summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 05:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 05:47:55 +0000
commit31d6ff6f931696850c348007241195ab3b2eddc7 (patch)
tree615cb1c57ce9f6611bad93326b9105098f379609
parentInitial commit. (diff)
downloadublock-origin-31d6ff6f931696850c348007241195ab3b2eddc7.tar.xz
ublock-origin-31d6ff6f931696850c348007241195ab3b2eddc7.zip
Adding upstream version 1.55.0+dfsg.upstream/1.55.0+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
-rw-r--r--.github/ISSUE_TEMPLATE/config.yml14
-rw-r--r--.github/workflows/main.yml90
-rw-r--r--.gitignore4
-rw-r--r--.gitmodules0
-rw-r--r--.jshintrc22
-rw-r--r--CHANGELOG.md73
-rw-r--r--CONTRIBUTING.md31
-rw-r--r--LICENSE.txt674
-rw-r--r--MANIFESTO.md7
-rw-r--r--Makefile91
-rw-r--r--README.md192
-rw-r--r--RELEASE.HEAD.md10
-rw-r--r--REMOVED.md87
-rw-r--r--assets/assets.dev.json902
-rw-r--r--assets/assets.json903
-rw-r--r--assets/resources/scriptlets.js4376
-rw-r--r--dist/README.md81
-rwxr-xr-xdist/chromium/publish-beta.py190
-rw-r--r--dist/description/description-ar.txt51
-rw-r--r--dist/description/description-az.txt49
-rw-r--r--dist/description/description-bg.txt49
-rw-r--r--dist/description/description-bn.txt49
-rw-r--r--dist/description/description-bs.txt47
-rw-r--r--dist/description/description-ca.txt49
-rw-r--r--dist/description/description-cs.txt49
-rw-r--r--dist/description/description-cv.txt49
-rw-r--r--dist/description/description-da.txt47
-rw-r--r--dist/description/description-de.txt49
-rw-r--r--dist/description/description-el.txt49
-rw-r--r--dist/description/description-en.txt33
-rw-r--r--dist/description/description-en_GB.txt49
-rw-r--r--dist/description/description-eo.txt49
-rw-r--r--dist/description/description-es.txt47
-rw-r--r--dist/description/description-et.txt50
-rw-r--r--dist/description/description-eu.txt49
-rw-r--r--dist/description/description-fa.txt49
-rw-r--r--dist/description/description-fi.txt49
-rw-r--r--dist/description/description-fil.txt51
-rw-r--r--dist/description/description-fr.txt47
-rw-r--r--dist/description/description-fy.txt49
-rw-r--r--dist/description/description-gl.txt50
-rw-r--r--dist/description/description-gu.txt49
-rw-r--r--dist/description/description-he.txt49
-rw-r--r--dist/description/description-hi.txt49
-rw-r--r--dist/description/description-hr.txt49
-rw-r--r--dist/description/description-hu.txt49
-rw-r--r--dist/description/description-hy.txt47
-rw-r--r--dist/description/description-id.txt49
-rw-r--r--dist/description/description-it.txt47
-rw-r--r--dist/description/description-ja.txt49
-rw-r--r--dist/description/description-ka.txt49
-rw-r--r--dist/description/description-kk.txt49
-rw-r--r--dist/description/description-kn.txt50
-rw-r--r--dist/description/description-ko.txt49
-rw-r--r--dist/description/description-lt.txt50
-rw-r--r--dist/description/description-lv.txt49
-rw-r--r--dist/description/description-mk.txt49
-rw-r--r--dist/description/description-ml.txt49
-rw-r--r--dist/description/description-mr.txt49
-rw-r--r--dist/description/description-ms.txt51
-rw-r--r--dist/description/description-nb.txt49
-rw-r--r--dist/description/description-nl.txt47
-rw-r--r--dist/description/description-oc.txt49
-rw-r--r--dist/description/description-pl.txt49
-rw-r--r--dist/description/description-pt_BR.txt48
-rw-r--r--dist/description/description-pt_PT.txt50
-rw-r--r--dist/description/description-ro.txt50
-rw-r--r--dist/description/description-ru.txt49
-rw-r--r--dist/description/description-si.txt49
-rw-r--r--dist/description/description-sk.txt49
-rw-r--r--dist/description/description-sl.txt49
-rw-r--r--dist/description/description-so.txt49
-rw-r--r--dist/description/description-sq.txt49
-rw-r--r--dist/description/description-sr.txt49
-rw-r--r--dist/description/description-sv.txt50
-rw-r--r--dist/description/description-sw.txt49
-rw-r--r--dist/description/description-ta.txt52
-rw-r--r--dist/description/description-te.txt49
-rw-r--r--dist/description/description-th.txt49
-rw-r--r--dist/description/description-tr.txt50
-rw-r--r--dist/description/description-uk.txt49
-rw-r--r--dist/description/description-ur.txt52
-rw-r--r--dist/description/description-vi.txt49
-rw-r--r--dist/description/description-zh_CN.txt52
-rw-r--r--dist/description/description-zh_TW.txt49
-rwxr-xr-xdist/firefox/publish-signed-beta.py331
-rw-r--r--dist/firefox/updates.json13
-rw-r--r--dist/firefox/updates.template.json13
-rwxr-xr-xdist/mv3/chromium/publish-beta.py195
-rwxr-xr-xdist/mv3/firefox/publish-signed-beta.py326
-rw-r--r--dist/mv3/firefox/updates.json13
-rw-r--r--dist/mv3/firefox/updates.template.json13
-rw-r--r--dist/mv3/log.txt1584
-rw-r--r--dist/version1
-rw-r--r--docs/README.md3
-rw-r--r--docs/index.html14
-rw-r--r--docs/tests/css-selector-based-cosmetic-filters.html150
-rw-r--r--docs/tests/hnbigset-benchmark.html268
-rw-r--r--docs/tests/hnset-benchmark.html424
-rw-r--r--docs/tests/hntrie-test.html226
-rw-r--r--docs/tests/hostname-pool.js45762
-rw-r--r--docs/tests/index.html22
-rw-r--r--docs/tests/procedural-cosmetic-filters.html230
-rw-r--r--docs/tests/procedural-html-filters.html169
-rw-r--r--docs/tests/scriptlet-injection-filters-1.html194
-rw-r--r--docs/tests/static-filtering-parser-checklist.txt123
-rw-r--r--platform/browser/main.js123
-rw-r--r--platform/browser/test.html71
-rw-r--r--platform/chromium/is-webrtc-supported.html9
-rw-r--r--platform/chromium/is-webrtc-supported.js52
-rw-r--r--platform/chromium/manifest.json115
-rw-r--r--platform/chromium/vapi-background-ext.js254
-rw-r--r--platform/chromium/webext.js164
-rw-r--r--platform/common/managed_storage.json73
-rw-r--r--platform/common/vapi-background.js1811
-rw-r--r--platform/common/vapi-client.js251
-rw-r--r--platform/common/vapi-common.js294
-rw-r--r--platform/common/vapi.js89
-rw-r--r--platform/dig/package.json28
-rw-r--r--platform/dig/snfe.js389
-rw-r--r--platform/firefox/manifest.json132
-rw-r--r--platform/firefox/vapi-background-ext.js328
-rw-r--r--platform/firefox/webext.js24
-rw-r--r--platform/mv3/README.md31
-rw-r--r--platform/mv3/chromium/manifest.json46
-rw-r--r--platform/mv3/description/en.md41
-rw-r--r--platform/mv3/description/webstore.ar.txt36
-rw-r--r--platform/mv3/description/webstore.az.txt30
-rw-r--r--platform/mv3/description/webstore.be.txt30
-rw-r--r--platform/mv3/description/webstore.bg.txt30
-rw-r--r--platform/mv3/description/webstore.bn.txt30
-rw-r--r--platform/mv3/description/webstore.br_FR.txt30
-rw-r--r--platform/mv3/description/webstore.bs.txt30
-rw-r--r--platform/mv3/description/webstore.ca.txt32
-rw-r--r--platform/mv3/description/webstore.cs.txt30
-rw-r--r--platform/mv3/description/webstore.cv.txt30
-rw-r--r--platform/mv3/description/webstore.da.txt30
-rw-r--r--platform/mv3/description/webstore.de.txt30
-rw-r--r--platform/mv3/description/webstore.el.txt30
-rw-r--r--platform/mv3/description/webstore.en_GB.txt30
-rw-r--r--platform/mv3/description/webstore.eo.txt30
-rw-r--r--platform/mv3/description/webstore.es.txt30
-rw-r--r--platform/mv3/description/webstore.et.txt30
-rw-r--r--platform/mv3/description/webstore.eu.txt30
-rw-r--r--platform/mv3/description/webstore.fa.txt30
-rw-r--r--platform/mv3/description/webstore.fi.txt30
-rw-r--r--platform/mv3/description/webstore.fil.txt30
-rw-r--r--platform/mv3/description/webstore.fr.txt30
-rw-r--r--platform/mv3/description/webstore.fy.txt30
-rw-r--r--platform/mv3/description/webstore.gl.txt30
-rw-r--r--platform/mv3/description/webstore.gu.txt30
-rw-r--r--platform/mv3/description/webstore.he.txt30
-rw-r--r--platform/mv3/description/webstore.hi.txt30
-rw-r--r--platform/mv3/description/webstore.hr.txt30
-rw-r--r--platform/mv3/description/webstore.hu.txt30
-rw-r--r--platform/mv3/description/webstore.hy.txt34
-rw-r--r--platform/mv3/description/webstore.id.txt30
-rw-r--r--platform/mv3/description/webstore.it.txt30
-rw-r--r--platform/mv3/description/webstore.ja.txt30
-rw-r--r--platform/mv3/description/webstore.ka.txt30
-rw-r--r--platform/mv3/description/webstore.kk.txt30
-rw-r--r--platform/mv3/description/webstore.kn.txt30
-rw-r--r--platform/mv3/description/webstore.ko.txt30
-rw-r--r--platform/mv3/description/webstore.ku.txt30
-rw-r--r--platform/mv3/description/webstore.lt.txt30
-rw-r--r--platform/mv3/description/webstore.lv.txt30
-rw-r--r--platform/mv3/description/webstore.mk.txt30
-rw-r--r--platform/mv3/description/webstore.ml.txt30
-rw-r--r--platform/mv3/description/webstore.mr.txt30
-rw-r--r--platform/mv3/description/webstore.ms.txt30
-rw-r--r--platform/mv3/description/webstore.nb.txt30
-rw-r--r--platform/mv3/description/webstore.nl.txt30
-rw-r--r--platform/mv3/description/webstore.oc.txt30
-rw-r--r--platform/mv3/description/webstore.pa.txt30
-rw-r--r--platform/mv3/description/webstore.pl.txt30
-rw-r--r--platform/mv3/description/webstore.pt_BR.txt30
-rw-r--r--platform/mv3/description/webstore.pt_PT.txt30
-rw-r--r--platform/mv3/description/webstore.ro.txt30
-rw-r--r--platform/mv3/description/webstore.ru.txt30
-rw-r--r--platform/mv3/description/webstore.si.txt30
-rw-r--r--platform/mv3/description/webstore.sk.txt30
-rw-r--r--platform/mv3/description/webstore.sl.txt30
-rw-r--r--platform/mv3/description/webstore.so.txt30
-rw-r--r--platform/mv3/description/webstore.sq.txt30
-rw-r--r--platform/mv3/description/webstore.sr.txt30
-rw-r--r--platform/mv3/description/webstore.sv.txt30
-rw-r--r--platform/mv3/description/webstore.sw.txt30
-rw-r--r--platform/mv3/description/webstore.ta.txt30
-rw-r--r--platform/mv3/description/webstore.te.txt30
-rw-r--r--platform/mv3/description/webstore.th.txt30
-rw-r--r--platform/mv3/description/webstore.tr.txt30
-rw-r--r--platform/mv3/description/webstore.txt30
-rw-r--r--platform/mv3/description/webstore.uk.txt30
-rw-r--r--platform/mv3/description/webstore.ur.txt30
-rw-r--r--platform/mv3/description/webstore.vi.txt30
-rw-r--r--platform/mv3/description/webstore.zh_CN.txt30
-rw-r--r--platform/mv3/description/webstore.zh_TW.txt30
-rw-r--r--platform/mv3/extension/_locales/ar/messages.json158
-rw-r--r--platform/mv3/extension/_locales/az/messages.json158
-rw-r--r--platform/mv3/extension/_locales/be/messages.json158
-rw-r--r--platform/mv3/extension/_locales/bg/messages.json158
-rw-r--r--platform/mv3/extension/_locales/bn/messages.json158
-rw-r--r--platform/mv3/extension/_locales/br_FR/messages.json158
-rw-r--r--platform/mv3/extension/_locales/bs/messages.json158
-rw-r--r--platform/mv3/extension/_locales/ca/messages.json158
-rw-r--r--platform/mv3/extension/_locales/cs/messages.json158
-rw-r--r--platform/mv3/extension/_locales/cv/messages.json158
-rw-r--r--platform/mv3/extension/_locales/da/messages.json158
-rw-r--r--platform/mv3/extension/_locales/de/messages.json158
-rw-r--r--platform/mv3/extension/_locales/el/messages.json158
-rw-r--r--platform/mv3/extension/_locales/en/messages.json158
-rw-r--r--platform/mv3/extension/_locales/en_GB/messages.json158
-rw-r--r--platform/mv3/extension/_locales/eo/messages.json158
-rw-r--r--platform/mv3/extension/_locales/es/messages.json158
-rw-r--r--platform/mv3/extension/_locales/et/messages.json158
-rw-r--r--platform/mv3/extension/_locales/eu/messages.json158
-rw-r--r--platform/mv3/extension/_locales/fa/messages.json158
-rw-r--r--platform/mv3/extension/_locales/fi/messages.json158
-rw-r--r--platform/mv3/extension/_locales/fil/messages.json158
-rw-r--r--platform/mv3/extension/_locales/fr/messages.json158
-rw-r--r--platform/mv3/extension/_locales/fy/messages.json158
-rw-r--r--platform/mv3/extension/_locales/gl/messages.json158
-rw-r--r--platform/mv3/extension/_locales/gu/messages.json158
-rw-r--r--platform/mv3/extension/_locales/he/messages.json158
-rw-r--r--platform/mv3/extension/_locales/hi/messages.json158
-rw-r--r--platform/mv3/extension/_locales/hr/messages.json158
-rw-r--r--platform/mv3/extension/_locales/hu/messages.json158
-rw-r--r--platform/mv3/extension/_locales/hy/messages.json158
-rw-r--r--platform/mv3/extension/_locales/id/messages.json158
-rw-r--r--platform/mv3/extension/_locales/it/messages.json158
-rw-r--r--platform/mv3/extension/_locales/ja/messages.json158
-rw-r--r--platform/mv3/extension/_locales/ka/messages.json158
-rw-r--r--platform/mv3/extension/_locales/kk/messages.json158
-rw-r--r--platform/mv3/extension/_locales/kn/messages.json158
-rw-r--r--platform/mv3/extension/_locales/ko/messages.json158
-rw-r--r--platform/mv3/extension/_locales/lt/messages.json158
-rw-r--r--platform/mv3/extension/_locales/lv/messages.json158
-rw-r--r--platform/mv3/extension/_locales/mk/messages.json158
-rw-r--r--platform/mv3/extension/_locales/ml/messages.json158
-rw-r--r--platform/mv3/extension/_locales/mr/messages.json158
-rw-r--r--platform/mv3/extension/_locales/ms/messages.json158
-rw-r--r--platform/mv3/extension/_locales/nb/messages.json158
-rw-r--r--platform/mv3/extension/_locales/nl/messages.json158
-rw-r--r--platform/mv3/extension/_locales/oc/messages.json158
-rw-r--r--platform/mv3/extension/_locales/pa/messages.json158
-rw-r--r--platform/mv3/extension/_locales/pl/messages.json158
-rw-r--r--platform/mv3/extension/_locales/pt_BR/messages.json158
-rw-r--r--platform/mv3/extension/_locales/pt_PT/messages.json158
-rw-r--r--platform/mv3/extension/_locales/ro/messages.json158
-rw-r--r--platform/mv3/extension/_locales/ru/messages.json158
-rw-r--r--platform/mv3/extension/_locales/si/messages.json158
-rw-r--r--platform/mv3/extension/_locales/sk/messages.json158
-rw-r--r--platform/mv3/extension/_locales/sl/messages.json158
-rw-r--r--platform/mv3/extension/_locales/so/messages.json158
-rw-r--r--platform/mv3/extension/_locales/sq/messages.json158
-rw-r--r--platform/mv3/extension/_locales/sr/messages.json158
-rw-r--r--platform/mv3/extension/_locales/sv/messages.json158
-rw-r--r--platform/mv3/extension/_locales/sw/messages.json158
-rw-r--r--platform/mv3/extension/_locales/ta/messages.json158
-rw-r--r--platform/mv3/extension/_locales/te/messages.json158
-rw-r--r--platform/mv3/extension/_locales/th/messages.json158
-rw-r--r--platform/mv3/extension/_locales/tr/messages.json158
-rw-r--r--platform/mv3/extension/_locales/uk/messages.json158
-rw-r--r--platform/mv3/extension/_locales/ur/messages.json158
-rw-r--r--platform/mv3/extension/_locales/vi/messages.json158
-rw-r--r--platform/mv3/extension/_locales/zh_CN/messages.json158
-rw-r--r--platform/mv3/extension/_locales/zh_TW/messages.json158
-rw-r--r--platform/mv3/extension/css/dashboard-common.css52
-rw-r--r--platform/mv3/extension/css/dashboard.css74
-rw-r--r--platform/mv3/extension/css/filtering-mode.css92
-rw-r--r--platform/mv3/extension/css/popup.css276
-rw-r--r--platform/mv3/extension/css/settings.css192
-rw-r--r--platform/mv3/extension/dashboard.html155
-rw-r--r--platform/mv3/extension/img/icon_128.pngbin0 -> 4015 bytes
-rw-r--r--platform/mv3/extension/img/icon_16.pngbin0 -> 534 bytes
-rw-r--r--platform/mv3/extension/img/icon_32.pngbin0 -> 971 bytes
-rw-r--r--platform/mv3/extension/img/icon_64.pngbin0 -> 1922 bytes
-rw-r--r--platform/mv3/extension/img/ublock.svg69
-rw-r--r--platform/mv3/extension/js/background.js354
-rw-r--r--platform/mv3/extension/js/dashboard.js40
-rw-r--r--platform/mv3/extension/js/ext.js119
-rw-r--r--platform/mv3/extension/js/fetch.js38
-rw-r--r--platform/mv3/extension/js/mode-manager.js426
-rw-r--r--platform/mv3/extension/js/popup.js351
-rw-r--r--platform/mv3/extension/js/ruleset-manager.js539
-rw-r--r--platform/mv3/extension/js/scripting-manager.js563
-rw-r--r--platform/mv3/extension/js/scripting/css-declarative.js157
-rw-r--r--platform/mv3/extension/js/scripting/css-generic.js239
-rw-r--r--platform/mv3/extension/js/scripting/css-procedural.js762
-rw-r--r--platform/mv3/extension/js/scripting/css-specific.js120
-rw-r--r--platform/mv3/extension/js/settings.js488
-rw-r--r--platform/mv3/extension/js/theme.js35
-rw-r--r--platform/mv3/extension/js/utils.js151
-rw-r--r--platform/mv3/extension/managed_storage.json15
-rw-r--r--platform/mv3/extension/popup.html61
-rw-r--r--platform/mv3/firefox/background.html10
-rw-r--r--platform/mv3/firefox/manifest.json54
-rw-r--r--platform/mv3/make-rulesets.js1344
-rw-r--r--platform/mv3/make-scriptlets.js193
-rw-r--r--platform/mv3/package.json6
-rw-r--r--platform/mv3/safe-replace.js41
-rw-r--r--platform/mv3/scriptlets/css-declarative.template.js51
-rw-r--r--platform/mv3/scriptlets/css-generic.template.js61
-rw-r--r--platform/mv3/scriptlets/css-generichigh.template.css26
-rw-r--r--platform/mv3/scriptlets/css-procedural.template.js51
-rw-r--r--platform/mv3/scriptlets/css-specific.template.js51
-rw-r--r--platform/mv3/scriptlets/scriptlet.template.js175
-rw-r--r--platform/mv3/ubo-version1
-rw-r--r--platform/nodejs/README.md158
-rw-r--r--platform/nodejs/build.js34
-rw-r--r--platform/nodejs/index.js281
-rw-r--r--platform/npm/.eslintrc.json38
-rw-r--r--platform/npm/.npmignore5
-rw-r--r--platform/npm/package-lock.json3038
-rw-r--r--platform/npm/package.json44
-rw-r--r--platform/npm/test.js59
-rw-r--r--platform/npm/tests/.eslintrc.json5
-rw-r--r--platform/npm/tests/_common.js34
-rw-r--r--platform/npm/tests/data/bundle.tgzbin0 -> 1225836 bytes
-rw-r--r--platform/npm/tests/leaks.js30
-rw-r--r--platform/npm/tests/request-data.js117
-rw-r--r--platform/npm/tests/snfe.js372
-rw-r--r--platform/npm/tests/wasm.js53
-rw-r--r--platform/opera/manifest.json116
-rw-r--r--platform/safari/README.md16
-rw-r--r--platform/thunderbird/manifest.json94
-rw-r--r--src/1p-filters.html68
-rw-r--r--src/3p-filters.html117
-rw-r--r--src/_locales/ar/messages.json1290
-rw-r--r--src/_locales/az/messages.json1290
-rw-r--r--src/_locales/be/messages.json1290
-rw-r--r--src/_locales/bg/messages.json1290
-rw-r--r--src/_locales/bn/messages.json1290
-rw-r--r--src/_locales/br_FR/messages.json1290
-rw-r--r--src/_locales/bs/messages.json1290
-rw-r--r--src/_locales/ca/messages.json1290
-rw-r--r--src/_locales/cs/messages.json1290
-rw-r--r--src/_locales/cv/messages.json1290
-rw-r--r--src/_locales/da/messages.json1290
-rw-r--r--src/_locales/de/messages.json1290
-rw-r--r--src/_locales/el/messages.json1290
-rw-r--r--src/_locales/en/messages.json1292
-rw-r--r--src/_locales/en_GB/messages.json1290
-rw-r--r--src/_locales/eo/messages.json1290
-rw-r--r--src/_locales/es/messages.json1290
-rw-r--r--src/_locales/et/messages.json1290
-rw-r--r--src/_locales/eu/messages.json1290
-rw-r--r--src/_locales/fa/messages.json1290
-rw-r--r--src/_locales/fi/messages.json1290
-rw-r--r--src/_locales/fil/messages.json1290
-rw-r--r--src/_locales/fr/messages.json1290
-rw-r--r--src/_locales/fy/messages.json1290
-rw-r--r--src/_locales/gl/messages.json1290
-rw-r--r--src/_locales/gu/messages.json1290
-rw-r--r--src/_locales/he/messages.json1290
-rw-r--r--src/_locales/hi/messages.json1290
-rw-r--r--src/_locales/hr/messages.json1290
-rw-r--r--src/_locales/hu/messages.json1290
-rw-r--r--src/_locales/hy/messages.json1290
-rw-r--r--src/_locales/id/messages.json1290
-rw-r--r--src/_locales/it/messages.json1290
-rw-r--r--src/_locales/ja/messages.json1290
-rw-r--r--src/_locales/ka/messages.json1290
-rw-r--r--src/_locales/kk/messages.json1290
-rw-r--r--src/_locales/kn/messages.json1290
-rw-r--r--src/_locales/ko/messages.json1290
-rw-r--r--src/_locales/ku/messages.json1290
-rw-r--r--src/_locales/lt/messages.json1290
-rw-r--r--src/_locales/lv/messages.json1290
-rw-r--r--src/_locales/mk/messages.json1290
-rw-r--r--src/_locales/ml/messages.json1290
-rw-r--r--src/_locales/mr/messages.json1290
-rw-r--r--src/_locales/ms/messages.json1290
-rw-r--r--src/_locales/nb/messages.json1290
-rw-r--r--src/_locales/nl/messages.json1290
-rw-r--r--src/_locales/oc/messages.json1290
-rw-r--r--src/_locales/pa/messages.json1290
-rw-r--r--src/_locales/pl/messages.json1290
-rw-r--r--src/_locales/pt_BR/messages.json1290
-rw-r--r--src/_locales/pt_PT/messages.json1290
-rw-r--r--src/_locales/ro/messages.json1290
-rw-r--r--src/_locales/ru/messages.json1290
-rw-r--r--src/_locales/si/messages.json1290
-rw-r--r--src/_locales/sk/messages.json1290
-rw-r--r--src/_locales/sl/messages.json1290
-rw-r--r--src/_locales/so/messages.json1290
-rw-r--r--src/_locales/sq/messages.json1290
-rw-r--r--src/_locales/sr/messages.json1290
-rw-r--r--src/_locales/sv/messages.json1290
-rw-r--r--src/_locales/sw/messages.json1290
-rw-r--r--src/_locales/ta/messages.json1290
-rw-r--r--src/_locales/te/messages.json1290
-rw-r--r--src/_locales/th/messages.json1290
-rw-r--r--src/_locales/tr/messages.json1290
-rw-r--r--src/_locales/uk/messages.json1290
-rw-r--r--src/_locales/ur/messages.json1290
-rw-r--r--src/_locales/vi/messages.json1290
-rw-r--r--src/_locales/zh_CN/messages.json1290
-rw-r--r--src/_locales/zh_TW/messages.json1290
-rw-r--r--src/about.html63
-rw-r--r--src/advanced-settings.html42
-rw-r--r--src/asset-viewer.html50
-rw-r--r--src/background.html12
-rw-r--r--src/cloud-ui.html23
-rw-r--r--src/code-viewer.html53
-rw-r--r--src/css/1p-filters.css26
-rw-r--r--src/css/3p-filters.css250
-rw-r--r--src/css/about.css3
-rw-r--r--src/css/advanced-settings.css26
-rw-r--r--src/css/asset-viewer.css79
-rw-r--r--src/css/click2load.css53
-rw-r--r--src/css/cloud-ui.css104
-rw-r--r--src/css/code-viewer.css67
-rw-r--r--src/css/codemirror.css327
-rw-r--r--src/css/common.css347
-rw-r--r--src/css/dashboard-common.css55
-rw-r--r--src/css/dashboard.css115
-rw-r--r--src/css/devtools.css22
-rw-r--r--src/css/document-blocked.css146
-rw-r--r--src/css/dom-inspector.css40
-rw-r--r--src/css/dyna-rules.css79
-rw-r--r--src/css/epicker-ui.css270
-rw-r--r--src/css/fa-icons.css149
-rw-r--r--src/css/fonts/Inter/Inter-Regular.woff2bin0 -> 100368 bytes
-rw-r--r--src/css/fonts/Inter/Inter-SemiBold.woff2bin0 -> 106916 bytes
-rw-r--r--src/css/fonts/Inter/LICENSE.txt93
-rw-r--r--src/css/fonts/Metropolis/Metropolis-Regular.woff2bin0 -> 24152 bytes
-rw-r--r--src/css/fonts/Metropolis/Metropolis-SemiBold.woff2bin0 -> 26564 bytes
-rw-r--r--src/css/fonts/Metropolis/README.md25
-rw-r--r--src/css/fonts/Metropolis/UNLICENSE24
-rw-r--r--src/css/logger-ui-inspector.css122
-rw-r--r--src/css/logger-ui.css985
-rw-r--r--src/css/popup-fenix.css778
-rw-r--r--src/css/settings.css74
-rw-r--r--src/css/support.css110
-rw-r--r--src/css/themes/default.css526
-rw-r--r--src/css/whitelist.css22
-rw-r--r--src/dashboard.html47
-rw-r--r--src/devtools.html59
-rw-r--r--src/document-blocked.html64
-rw-r--r--src/dyna-rules.html67
-rw-r--r--src/img/cloud.pngbin0 -> 5017 bytes
-rw-r--r--src/img/flags-of-the-world/README9
-rw-r--r--src/img/flags-of-the-world/ad.pngbin0 -> 672 bytes
-rw-r--r--src/img/flags-of-the-world/ae.pngbin0 -> 115 bytes
-rw-r--r--src/img/flags-of-the-world/af.pngbin0 -> 934 bytes
-rw-r--r--src/img/flags-of-the-world/ag.pngbin0 -> 603 bytes
-rw-r--r--src/img/flags-of-the-world/ai.pngbin0 -> 770 bytes
-rw-r--r--src/img/flags-of-the-world/al.pngbin0 -> 508 bytes
-rw-r--r--src/img/flags-of-the-world/am.pngbin0 -> 106 bytes
-rw-r--r--src/img/flags-of-the-world/ao.pngbin0 -> 430 bytes
-rw-r--r--src/img/flags-of-the-world/aq.pngbin0 -> 407 bytes
-rw-r--r--src/img/flags-of-the-world/ar.pngbin0 -> 345 bytes
-rw-r--r--src/img/flags-of-the-world/as.pngbin0 -> 1035 bytes
-rw-r--r--src/img/flags-of-the-world/at.pngbin0 -> 94 bytes
-rw-r--r--src/img/flags-of-the-world/au.pngbin0 -> 565 bytes
-rw-r--r--src/img/flags-of-the-world/aw.pngbin0 -> 249 bytes
-rw-r--r--src/img/flags-of-the-world/ax.pngbin0 -> 178 bytes
-rw-r--r--src/img/flags-of-the-world/az.pngbin0 -> 238 bytes
-rw-r--r--src/img/flags-of-the-world/ba.pngbin0 -> 385 bytes
-rw-r--r--src/img/flags-of-the-world/bb.pngbin0 -> 291 bytes
-rw-r--r--src/img/flags-of-the-world/bd.pngbin0 -> 282 bytes
-rw-r--r--src/img/flags-of-the-world/be.pngbin0 -> 115 bytes
-rw-r--r--src/img/flags-of-the-world/bf.pngbin0 -> 236 bytes
-rw-r--r--src/img/flags-of-the-world/bg.pngbin0 -> 105 bytes
-rw-r--r--src/img/flags-of-the-world/bh.pngbin0 -> 326 bytes
-rw-r--r--src/img/flags-of-the-world/bi.pngbin0 -> 651 bytes
-rw-r--r--src/img/flags-of-the-world/bj.pngbin0 -> 122 bytes
-rw-r--r--src/img/flags-of-the-world/bl.pngbin0 -> 2087 bytes
-rw-r--r--src/img/flags-of-the-world/bm.pngbin0 -> 1336 bytes
-rw-r--r--src/img/flags-of-the-world/bn.pngbin0 -> 1201 bytes
-rw-r--r--src/img/flags-of-the-world/bo.pngbin0 -> 107 bytes
-rw-r--r--src/img/flags-of-the-world/bq.pngbin0 -> 619 bytes
-rw-r--r--src/img/flags-of-the-world/br.pngbin0 -> 714 bytes
-rw-r--r--src/img/flags-of-the-world/bs.pngbin0 -> 304 bytes
-rw-r--r--src/img/flags-of-the-world/bt.pngbin0 -> 1250 bytes
-rw-r--r--src/img/flags-of-the-world/bv.pngbin0 -> 122 bytes
-rw-r--r--src/img/flags-of-the-world/bw.pngbin0 -> 108 bytes
-rw-r--r--src/img/flags-of-the-world/by.pngbin0 -> 454 bytes
-rw-r--r--src/img/flags-of-the-world/bz.pngbin0 -> 1303 bytes
-rw-r--r--src/img/flags-of-the-world/ca.pngbin0 -> 430 bytes
-rw-r--r--src/img/flags-of-the-world/cc.pngbin0 -> 618 bytes
-rw-r--r--src/img/flags-of-the-world/cd.pngbin0 -> 489 bytes
-rw-r--r--src/img/flags-of-the-world/cf.pngbin0 -> 214 bytes
-rw-r--r--src/img/flags-of-the-world/cg.pngbin0 -> 196 bytes
-rw-r--r--src/img/flags-of-the-world/ch.pngbin0 -> 124 bytes
-rw-r--r--src/img/flags-of-the-world/ci.pngbin0 -> 103 bytes
-rw-r--r--src/img/flags-of-the-world/ck.pngbin0 -> 803 bytes
-rw-r--r--src/img/flags-of-the-world/cl.pngbin0 -> 207 bytes
-rw-r--r--src/img/flags-of-the-world/cm.pngbin0 -> 201 bytes
-rw-r--r--src/img/flags-of-the-world/cn.pngbin0 -> 265 bytes
-rw-r--r--src/img/flags-of-the-world/co.pngbin0 -> 103 bytes
-rw-r--r--src/img/flags-of-the-world/cr.pngbin0 -> 419 bytes
-rw-r--r--src/img/flags-of-the-world/cu.pngbin0 -> 439 bytes
-rw-r--r--src/img/flags-of-the-world/cv.pngbin0 -> 385 bytes
-rw-r--r--src/img/flags-of-the-world/cw.pngbin0 -> 234 bytes
-rw-r--r--src/img/flags-of-the-world/cx.pngbin0 -> 750 bytes
-rw-r--r--src/img/flags-of-the-world/cy.pngbin0 -> 445 bytes
-rw-r--r--src/img/flags-of-the-world/cz.pngbin0 -> 277 bytes
-rw-r--r--src/img/flags-of-the-world/de.pngbin0 -> 105 bytes
-rw-r--r--src/img/flags-of-the-world/dj.pngbin0 -> 503 bytes
-rw-r--r--src/img/flags-of-the-world/dk.pngbin0 -> 139 bytes
-rw-r--r--src/img/flags-of-the-world/dm.pngbin0 -> 573 bytes
-rw-r--r--src/img/flags-of-the-world/do.pngbin0 -> 392 bytes
-rw-r--r--src/img/flags-of-the-world/dz.pngbin0 -> 358 bytes
-rw-r--r--src/img/flags-of-the-world/ec.pngbin0 -> 1039 bytes
-rw-r--r--src/img/flags-of-the-world/ee.pngbin0 -> 107 bytes
-rw-r--r--src/img/flags-of-the-world/eg.pngbin0 -> 286 bytes
-rw-r--r--src/img/flags-of-the-world/eh.pngbin0 -> 404 bytes
-rw-r--r--src/img/flags-of-the-world/er.pngbin0 -> 649 bytes
-rw-r--r--src/img/flags-of-the-world/es.pngbin0 -> 755 bytes
-rw-r--r--src/img/flags-of-the-world/et.pngbin0 -> 616 bytes
-rw-r--r--src/img/flags-of-the-world/fi.pngbin0 -> 140 bytes
-rw-r--r--src/img/flags-of-the-world/fj.pngbin0 -> 1166 bytes
-rw-r--r--src/img/flags-of-the-world/fk.pngbin0 -> 1501 bytes
-rw-r--r--src/img/flags-of-the-world/fm.pngbin0 -> 254 bytes
-rw-r--r--src/img/flags-of-the-world/fo.pngbin0 -> 124 bytes
-rw-r--r--src/img/flags-of-the-world/fr.pngbin0 -> 104 bytes
-rw-r--r--src/img/flags-of-the-world/ga.pngbin0 -> 102 bytes
-rw-r--r--src/img/flags-of-the-world/gb-eng.pngbin0 -> 134 bytes
-rw-r--r--src/img/flags-of-the-world/gb-nir.pngbin0 -> 745 bytes
-rw-r--r--src/img/flags-of-the-world/gb-sct.pngbin0 -> 428 bytes
-rw-r--r--src/img/flags-of-the-world/gb-wls.pngbin0 -> 2076 bytes
-rw-r--r--src/img/flags-of-the-world/gb.pngbin0 -> 489 bytes
-rw-r--r--src/img/flags-of-the-world/gd.pngbin0 -> 615 bytes
-rw-r--r--src/img/flags-of-the-world/ge.pngbin0 -> 311 bytes
-rw-r--r--src/img/flags-of-the-world/gf.pngbin0 -> 418 bytes
-rw-r--r--src/img/flags-of-the-world/gg.pngbin0 -> 170 bytes
-rw-r--r--src/img/flags-of-the-world/gh.pngbin0 -> 228 bytes
-rw-r--r--src/img/flags-of-the-world/gi.pngbin0 -> 874 bytes
-rw-r--r--src/img/flags-of-the-world/gl.pngbin0 -> 341 bytes
-rw-r--r--src/img/flags-of-the-world/gm.pngbin0 -> 131 bytes
-rw-r--r--src/img/flags-of-the-world/gn.pngbin0 -> 104 bytes
-rw-r--r--src/img/flags-of-the-world/gp.pngbin0 -> 993 bytes
-rw-r--r--src/img/flags-of-the-world/gq.pngbin0 -> 547 bytes
-rw-r--r--src/img/flags-of-the-world/gr.pngbin0 -> 180 bytes
-rw-r--r--src/img/flags-of-the-world/gs.pngbin0 -> 1786 bytes
-rw-r--r--src/img/flags-of-the-world/gt.pngbin0 -> 485 bytes
-rw-r--r--src/img/flags-of-the-world/gu.pngbin0 -> 691 bytes
-rw-r--r--src/img/flags-of-the-world/gw.pngbin0 -> 226 bytes
-rw-r--r--src/img/flags-of-the-world/gy.pngbin0 -> 509 bytes
-rw-r--r--src/img/flags-of-the-world/hk.pngbin0 -> 398 bytes
-rw-r--r--src/img/flags-of-the-world/hm.pngbin0 -> 571 bytes
-rw-r--r--src/img/flags-of-the-world/hn.pngbin0 -> 206 bytes
-rw-r--r--src/img/flags-of-the-world/hr.pngbin0 -> 707 bytes
-rw-r--r--src/img/flags-of-the-world/ht.pngbin0 -> 466 bytes
-rw-r--r--src/img/flags-of-the-world/hu.pngbin0 -> 106 bytes
-rw-r--r--src/img/flags-of-the-world/id.pngbin0 -> 92 bytes
-rw-r--r--src/img/flags-of-the-world/ie.pngbin0 -> 105 bytes
-rw-r--r--src/img/flags-of-the-world/il.pngbin0 -> 273 bytes
-rw-r--r--src/img/flags-of-the-world/im.pngbin0 -> 819 bytes
-rw-r--r--src/img/flags-of-the-world/in.pngbin0 -> 225 bytes
-rw-r--r--src/img/flags-of-the-world/io.pngbin0 -> 2064 bytes
-rw-r--r--src/img/flags-of-the-world/iq.pngbin0 -> 256 bytes
-rw-r--r--src/img/flags-of-the-world/ir.pngbin0 -> 533 bytes
-rw-r--r--src/img/flags-of-the-world/is.pngbin0 -> 174 bytes
-rw-r--r--src/img/flags-of-the-world/it.pngbin0 -> 104 bytes
-rw-r--r--src/img/flags-of-the-world/je.pngbin0 -> 965 bytes
-rw-r--r--src/img/flags-of-the-world/jm.pngbin0 -> 351 bytes
-rw-r--r--src/img/flags-of-the-world/jo.pngbin0 -> 299 bytes
-rw-r--r--src/img/flags-of-the-world/jp.pngbin0 -> 245 bytes
-rw-r--r--src/img/flags-of-the-world/ke.pngbin0 -> 523 bytes
-rw-r--r--src/img/flags-of-the-world/kg.pngbin0 -> 518 bytes
-rw-r--r--src/img/flags-of-the-world/kh.pngbin0 -> 598 bytes
-rw-r--r--src/img/flags-of-the-world/ki.pngbin0 -> 1314 bytes
-rw-r--r--src/img/flags-of-the-world/km.pngbin0 -> 525 bytes
-rw-r--r--src/img/flags-of-the-world/kn.pngbin0 -> 657 bytes
-rw-r--r--src/img/flags-of-the-world/kp.pngbin0 -> 360 bytes
-rw-r--r--src/img/flags-of-the-world/kr.pngbin0 -> 683 bytes
-rw-r--r--src/img/flags-of-the-world/kw.pngbin0 -> 227 bytes
-rw-r--r--src/img/flags-of-the-world/ky.pngbin0 -> 1535 bytes
-rw-r--r--src/img/flags-of-the-world/kz.pngbin0 -> 626 bytes
-rw-r--r--src/img/flags-of-the-world/la.pngbin0 -> 223 bytes
-rw-r--r--src/img/flags-of-the-world/lb.pngbin0 -> 361 bytes
-rw-r--r--src/img/flags-of-the-world/lc.pngbin0 -> 620 bytes
-rw-r--r--src/img/flags-of-the-world/li.pngbin0 -> 403 bytes
-rw-r--r--src/img/flags-of-the-world/lk.pngbin0 -> 911 bytes
-rw-r--r--src/img/flags-of-the-world/lr.pngbin0 -> 277 bytes
-rw-r--r--src/img/flags-of-the-world/ls.pngbin0 -> 297 bytes
-rw-r--r--src/img/flags-of-the-world/lt.pngbin0 -> 105 bytes
-rw-r--r--src/img/flags-of-the-world/lu.pngbin0 -> 105 bytes
-rw-r--r--src/img/flags-of-the-world/lv.pngbin0 -> 107 bytes
-rw-r--r--src/img/flags-of-the-world/ly.pngbin0 -> 218 bytes
-rw-r--r--src/img/flags-of-the-world/ma.pngbin0 -> 219 bytes
-rw-r--r--src/img/flags-of-the-world/mc.pngbin0 -> 93 bytes
-rw-r--r--src/img/flags-of-the-world/md.pngbin0 -> 761 bytes
-rw-r--r--src/img/flags-of-the-world/me.pngbin0 -> 720 bytes
-rw-r--r--src/img/flags-of-the-world/mf.pngbin0 -> 104 bytes
-rw-r--r--src/img/flags-of-the-world/mg.pngbin0 -> 105 bytes
-rw-r--r--src/img/flags-of-the-world/mh.pngbin0 -> 864 bytes
-rw-r--r--src/img/flags-of-the-world/mk.pngbin0 -> 578 bytes
-rw-r--r--src/img/flags-of-the-world/ml.pngbin0 -> 103 bytes
-rw-r--r--src/img/flags-of-the-world/mm.pngbin0 -> 389 bytes
-rw-r--r--src/img/flags-of-the-world/mn.pngbin0 -> 329 bytes
-rw-r--r--src/img/flags-of-the-world/mo.pngbin0 -> 440 bytes
-rw-r--r--src/img/flags-of-the-world/mp.pngbin0 -> 2196 bytes
-rw-r--r--src/img/flags-of-the-world/mq.pngbin0 -> 656 bytes
-rw-r--r--src/img/flags-of-the-world/mr.pngbin0 -> 374 bytes
-rw-r--r--src/img/flags-of-the-world/ms.pngbin0 -> 981 bytes
-rw-r--r--src/img/flags-of-the-world/mt.pngbin0 -> 209 bytes
-rw-r--r--src/img/flags-of-the-world/mu.pngbin0 -> 109 bytes
-rw-r--r--src/img/flags-of-the-world/mv.pngbin0 -> 201 bytes
-rw-r--r--src/img/flags-of-the-world/mw.pngbin0 -> 315 bytes
-rw-r--r--src/img/flags-of-the-world/mx.pngbin0 -> 822 bytes
-rw-r--r--src/img/flags-of-the-world/my.pngbin0 -> 450 bytes
-rw-r--r--src/img/flags-of-the-world/mz.pngbin0 -> 751 bytes
-rw-r--r--src/img/flags-of-the-world/na.pngbin0 -> 584 bytes
-rw-r--r--src/img/flags-of-the-world/nc.pngbin0 -> 664 bytes
-rw-r--r--src/img/flags-of-the-world/ne.pngbin0 -> 190 bytes
-rw-r--r--src/img/flags-of-the-world/nf.pngbin0 -> 522 bytes
-rw-r--r--src/img/flags-of-the-world/ng.pngbin0 -> 97 bytes
-rw-r--r--src/img/flags-of-the-world/ni.pngbin0 -> 336 bytes
-rw-r--r--src/img/flags-of-the-world/nl.pngbin0 -> 105 bytes
-rw-r--r--src/img/flags-of-the-world/no.pngbin0 -> 122 bytes
-rw-r--r--src/img/flags-of-the-world/np.pngbin0 -> 588 bytes
-rw-r--r--src/img/flags-of-the-world/nr.pngbin0 -> 205 bytes
-rw-r--r--src/img/flags-of-the-world/nu.pngbin0 -> 510 bytes
-rw-r--r--src/img/flags-of-the-world/nz.pngbin0 -> 608 bytes
-rw-r--r--src/img/flags-of-the-world/om.pngbin0 -> 291 bytes
-rw-r--r--src/img/flags-of-the-world/pa.pngbin0 -> 318 bytes
-rw-r--r--src/img/flags-of-the-world/pe.pngbin0 -> 97 bytes
-rw-r--r--src/img/flags-of-the-world/pf.pngbin0 -> 816 bytes
-rw-r--r--src/img/flags-of-the-world/pg.pngbin0 -> 589 bytes
-rw-r--r--src/img/flags-of-the-world/ph.pngbin0 -> 616 bytes
-rw-r--r--src/img/flags-of-the-world/pk.pngbin0 -> 355 bytes
-rw-r--r--src/img/flags-of-the-world/pl.pngbin0 -> 94 bytes
-rw-r--r--src/img/flags-of-the-world/pm.pngbin0 -> 2708 bytes
-rw-r--r--src/img/flags-of-the-world/pn.pngbin0 -> 1630 bytes
-rw-r--r--src/img/flags-of-the-world/pr.pngbin0 -> 456 bytes
-rw-r--r--src/img/flags-of-the-world/ps.pngbin0 -> 297 bytes
-rw-r--r--src/img/flags-of-the-world/pt.pngbin0 -> 1068 bytes
-rw-r--r--src/img/flags-of-the-world/pw.pngbin0 -> 300 bytes
-rw-r--r--src/img/flags-of-the-world/py.pngbin0 -> 320 bytes
-rw-r--r--src/img/flags-of-the-world/qa.pngbin0 -> 213 bytes
-rw-r--r--src/img/flags-of-the-world/re.pngbin0 -> 620 bytes
-rw-r--r--src/img/flags-of-the-world/ro.pngbin0 -> 103 bytes
-rw-r--r--src/img/flags-of-the-world/rs.pngbin0 -> 1245 bytes
-rw-r--r--src/img/flags-of-the-world/ru.pngbin0 -> 105 bytes
-rw-r--r--src/img/flags-of-the-world/rw.pngbin0 -> 255 bytes
-rw-r--r--src/img/flags-of-the-world/sa.pngbin0 -> 433 bytes
-rw-r--r--src/img/flags-of-the-world/sb.pngbin0 -> 574 bytes
-rw-r--r--src/img/flags-of-the-world/sc.pngbin0 -> 470 bytes
-rw-r--r--src/img/flags-of-the-world/sd.pngbin0 -> 295 bytes
-rw-r--r--src/img/flags-of-the-world/se.pngbin0 -> 140 bytes
-rw-r--r--src/img/flags-of-the-world/sg.pngbin0 -> 306 bytes
-rw-r--r--src/img/flags-of-the-world/sh.pngbin0 -> 925 bytes
-rw-r--r--src/img/flags-of-the-world/si.pngbin0 -> 303 bytes
-rw-r--r--src/img/flags-of-the-world/sj.pngbin0 -> 122 bytes
-rw-r--r--src/img/flags-of-the-world/sk.pngbin0 -> 454 bytes
-rw-r--r--src/img/flags-of-the-world/sl.pngbin0 -> 105 bytes
-rw-r--r--src/img/flags-of-the-world/sm.pngbin0 -> 1204 bytes
-rw-r--r--src/img/flags-of-the-world/sn.pngbin0 -> 233 bytes
-rw-r--r--src/img/flags-of-the-world/so.pngbin0 -> 271 bytes
-rw-r--r--src/img/flags-of-the-world/sr.pngbin0 -> 247 bytes
-rw-r--r--src/img/flags-of-the-world/ss.pngbin0 -> 475 bytes
-rw-r--r--src/img/flags-of-the-world/st.pngbin0 -> 351 bytes
-rw-r--r--src/img/flags-of-the-world/sv.pngbin0 -> 488 bytes
-rw-r--r--src/img/flags-of-the-world/sx.pngbin0 -> 945 bytes
-rw-r--r--src/img/flags-of-the-world/sy.pngbin0 -> 237 bytes
-rw-r--r--src/img/flags-of-the-world/sz.pngbin0 -> 917 bytes
-rw-r--r--src/img/flags-of-the-world/tc.pngbin0 -> 824 bytes
-rw-r--r--src/img/flags-of-the-world/td.pngbin0 -> 104 bytes
-rw-r--r--src/img/flags-of-the-world/tf.pngbin0 -> 377 bytes
-rw-r--r--src/img/flags-of-the-world/tg.pngbin0 -> 292 bytes
-rw-r--r--src/img/flags-of-the-world/th.pngbin0 -> 108 bytes
-rw-r--r--src/img/flags-of-the-world/tj.pngbin0 -> 330 bytes
-rw-r--r--src/img/flags-of-the-world/tk.pngbin0 -> 606 bytes
-rw-r--r--src/img/flags-of-the-world/tl.pngbin0 -> 441 bytes
-rw-r--r--src/img/flags-of-the-world/tm.pngbin0 -> 1517 bytes
-rw-r--r--src/img/flags-of-the-world/tn.pngbin0 -> 306 bytes
-rw-r--r--src/img/flags-of-the-world/to.pngbin0 -> 108 bytes
-rw-r--r--src/img/flags-of-the-world/tr.pngbin0 -> 317 bytes
-rw-r--r--src/img/flags-of-the-world/tt.pngbin0 -> 667 bytes
-rw-r--r--src/img/flags-of-the-world/tv.pngbin0 -> 726 bytes
-rw-r--r--src/img/flags-of-the-world/tw.pngbin0 -> 259 bytes
-rw-r--r--src/img/flags-of-the-world/tz.pngbin0 -> 382 bytes
-rw-r--r--src/img/flags-of-the-world/ua.pngbin0 -> 92 bytes
-rw-r--r--src/img/flags-of-the-world/ug.pngbin0 -> 388 bytes
-rw-r--r--src/img/flags-of-the-world/um.pngbin0 -> 539 bytes
-rw-r--r--src/img/flags-of-the-world/us.pngbin0 -> 539 bytes
-rw-r--r--src/img/flags-of-the-world/uy.pngbin0 -> 574 bytes
-rw-r--r--src/img/flags-of-the-world/uz.pngbin0 -> 310 bytes
-rw-r--r--src/img/flags-of-the-world/va.pngbin0 -> 750 bytes
-rw-r--r--src/img/flags-of-the-world/vc.pngbin0 -> 317 bytes
-rw-r--r--src/img/flags-of-the-world/ve.pngbin0 -> 268 bytes
-rw-r--r--src/img/flags-of-the-world/vg.pngbin0 -> 1339 bytes
-rw-r--r--src/img/flags-of-the-world/vi.pngbin0 -> 2159 bytes
-rw-r--r--src/img/flags-of-the-world/vn.pngbin0 -> 282 bytes
-rw-r--r--src/img/flags-of-the-world/vu.pngbin0 -> 662 bytes
-rw-r--r--src/img/flags-of-the-world/wf.pngbin0 -> 260 bytes
-rw-r--r--src/img/flags-of-the-world/ws.pngbin0 -> 255 bytes
-rw-r--r--src/img/flags-of-the-world/xk.pngbin0 -> 453 bytes
-rw-r--r--src/img/flags-of-the-world/ye.pngbin0 -> 105 bytes
-rw-r--r--src/img/flags-of-the-world/yt.pngbin0 -> 1402 bytes
-rw-r--r--src/img/flags-of-the-world/za.pngbin0 -> 387 bytes
-rw-r--r--src/img/flags-of-the-world/zm.pngbin0 -> 297 bytes
-rw-r--r--src/img/flags-of-the-world/zw.pngbin0 -> 617 bytes
-rw-r--r--src/img/fontawesome/LICENSE.txt25
-rw-r--r--src/img/fontawesome/fontawesome-defs.svg79
-rw-r--r--src/img/help16.pngbin0 -> 215 bytes
-rw-r--r--src/img/icon_128.pngbin0 -> 3552 bytes
-rw-r--r--src/img/icon_16-loading.pngbin0 -> 570 bytes
-rw-r--r--src/img/icon_16-off.pngbin0 -> 552 bytes
-rw-r--r--src/img/icon_16.pngbin0 -> 420 bytes
-rw-r--r--src/img/icon_32-loading.pngbin0 -> 1089 bytes
-rw-r--r--src/img/icon_32-off.pngbin0 -> 1114 bytes
-rw-r--r--src/img/icon_32.pngbin0 -> 1278 bytes
-rw-r--r--src/img/icon_64-loading.pngbin0 -> 4406 bytes
-rw-r--r--src/img/icon_64-off.pngbin0 -> 4955 bytes
-rw-r--r--src/img/icon_64.pngbin0 -> 2655 bytes
-rw-r--r--src/img/material-design.svg16
-rw-r--r--src/img/photon.svg16
-rw-r--r--src/img/ublock-defs.svg27
-rw-r--r--src/img/ublock.svg44
-rw-r--r--src/js/1p-filters.js337
-rw-r--r--src/js/3p-filters.js861
-rw-r--r--src/js/about.js34
-rw-r--r--src/js/advanced-settings.js194
-rw-r--r--src/js/asset-viewer.js112
-rw-r--r--src/js/assets.js1478
-rw-r--r--src/js/background.js410
-rw-r--r--src/js/base64-custom.js246
-rw-r--r--src/js/benchmarks.js421
-rw-r--r--src/js/biditrie.js947
-rw-r--r--src/js/broadcast.js75
-rw-r--r--src/js/cachestorage.js533
-rw-r--r--src/js/click2load.js60
-rw-r--r--src/js/cloud-ui.js238
-rw-r--r--src/js/code-viewer.js311
-rw-r--r--src/js/codemirror/search-thread.js199
-rw-r--r--src/js/codemirror/search.js504
-rw-r--r--src/js/codemirror/ubo-dynamic-filtering.js239
-rw-r--r--src/js/codemirror/ubo-static-filtering.js1200
-rw-r--r--src/js/commands.js181
-rw-r--r--src/js/console.js59
-rw-r--r--src/js/contentscript-extra.js662
-rw-r--r--src/js/contentscript.js1364
-rw-r--r--src/js/contextmenu.js270
-rw-r--r--src/js/cosmetic-filtering.js983
-rw-r--r--src/js/dashboard-common.js215
-rw-r--r--src/js/dashboard.js166
-rw-r--r--src/js/devtools.js192
-rw-r--r--src/js/diff-updater.js288
-rw-r--r--src/js/document-blocked.js230
-rw-r--r--src/js/dom-inspector.js68
-rw-r--r--src/js/dom.js213
-rw-r--r--src/js/dyna-rules.js678
-rw-r--r--src/js/dynamic-net-filtering.js488
-rw-r--r--src/js/epicker-ui.js900
-rw-r--r--src/js/fa-icons.js129
-rw-r--r--src/js/filtering-context.js461
-rw-r--r--src/js/filtering-engines.js50
-rw-r--r--src/js/hnswitches.js289
-rw-r--r--src/js/hntrie.js780
-rw-r--r--src/js/html-filtering.js465
-rw-r--r--src/js/httpheader-filtering.js213
-rw-r--r--src/js/i18n.js346
-rw-r--r--src/js/logger-ui-inspector.js710
-rw-r--r--src/js/logger-ui.js3044
-rw-r--r--src/js/logger.js88
-rw-r--r--src/js/lz4.js190
-rw-r--r--src/js/messaging.js2195
-rw-r--r--src/js/mrucache.js58
-rw-r--r--src/js/pagestore.js1140
-rw-r--r--src/js/popup-fenix.js1530
-rw-r--r--src/js/redirect-engine.js494
-rw-r--r--src/js/redirect-resources.js182
-rw-r--r--src/js/reverselookup-worker.js287
-rw-r--r--src/js/reverselookup.js223
-rw-r--r--src/js/scriptlet-filtering-core.js300
-rw-r--r--src/js/scriptlet-filtering.js328
-rw-r--r--src/js/scriptlets/cosmetic-logger.js365
-rw-r--r--src/js/scriptlets/cosmetic-off.js48
-rw-r--r--src/js/scriptlets/cosmetic-on.js48
-rw-r--r--src/js/scriptlets/cosmetic-report.js142
-rw-r--r--src/js/scriptlets/dom-inspector.js924
-rw-r--r--src/js/scriptlets/dom-survey-elements.js72
-rw-r--r--src/js/scriptlets/dom-survey-scripts.js126
-rw-r--r--src/js/scriptlets/epicker.js1356
-rw-r--r--src/js/scriptlets/load-3p-css.js67
-rw-r--r--src/js/scriptlets/load-large-media-all.js62
-rw-r--r--src/js/scriptlets/load-large-media-interactive.js299
-rw-r--r--src/js/scriptlets/noscript-spoof.js89
-rw-r--r--src/js/scriptlets/should-inject-contentscript.js40
-rw-r--r--src/js/scriptlets/subscriber.js113
-rw-r--r--src/js/scriptlets/updater.js118
-rw-r--r--src/js/settings.js317
-rw-r--r--src/js/start.js508
-rw-r--r--src/js/static-dnr-filtering.js497
-rw-r--r--src/js/static-ext-filtering-db.js171
-rw-r--r--src/js/static-ext-filtering.js184
-rw-r--r--src/js/static-filtering-io.js144
-rw-r--r--src/js/static-filtering-parser.js4461
-rw-r--r--src/js/static-net-filtering.js5651
-rw-r--r--src/js/storage.js1703
-rw-r--r--src/js/support.js335
-rw-r--r--src/js/tab.js1178
-rw-r--r--src/js/tasks.js42
-rw-r--r--src/js/text-encode.js275
-rw-r--r--src/js/text-utils.js107
-rw-r--r--src/js/theme.js151
-rw-r--r--src/js/traffic.js1261
-rw-r--r--src/js/ublock.js700
-rw-r--r--src/js/uri-utils.js175
-rw-r--r--src/js/url-net-filtering.js336
-rw-r--r--src/js/utils.js136
-rw-r--r--src/js/wasm/README.md24
-rw-r--r--src/js/wasm/biditrie.wasmbin0 -> 990 bytes
-rw-r--r--src/js/wasm/biditrie.wat728
-rw-r--r--src/js/wasm/hntrie.wasmbin0 -> 1034 bytes
-rw-r--r--src/js/wasm/hntrie.wat724
-rw-r--r--src/js/whitelist.js258
-rw-r--r--src/lib/codemirror/LICENSE21
-rw-r--r--src/lib/codemirror/README.md47
-rw-r--r--src/lib/codemirror/addon/comment/comment.js211
-rw-r--r--src/lib/codemirror/addon/display/panel.js133
-rw-r--r--src/lib/codemirror/addon/edit/closebrackets.js201
-rw-r--r--src/lib/codemirror/addon/edit/matchbrackets.js160
-rw-r--r--src/lib/codemirror/addon/fold/foldcode.js157
-rw-r--r--src/lib/codemirror/addon/fold/foldgutter.css20
-rw-r--r--src/lib/codemirror/addon/fold/foldgutter.js163
-rw-r--r--src/lib/codemirror/addon/hint/show-hint.css36
-rw-r--r--src/lib/codemirror/addon/hint/show-hint.js509
-rw-r--r--src/lib/codemirror/addon/merge/merge.css119
-rw-r--r--src/lib/codemirror/addon/merge/merge.js1006
-rw-r--r--src/lib/codemirror/addon/scroll/annotatescrollbar.js128
-rw-r--r--src/lib/codemirror/addon/search/matchesonscrollbar.css8
-rw-r--r--src/lib/codemirror/addon/search/searchcursor.js296
-rw-r--r--src/lib/codemirror/addon/selection/active-line.js72
-rw-r--r--src/lib/codemirror/lib/codemirror.css350
-rw-r--r--src/lib/codemirror/lib/codemirror.js9800
-rw-r--r--src/lib/codemirror/mode/css/css.js864
-rw-r--r--src/lib/codemirror/mode/htmlmixed/htmlmixed.js153
-rw-r--r--src/lib/codemirror/mode/javascript/javascript.js942
-rw-r--r--src/lib/codemirror/mode/xml/xml.js413
-rw-r--r--src/lib/codemirror/theme/night.css27
-rw-r--r--src/lib/csstree/LICENSE19
-rw-r--r--src/lib/csstree/css-tree.js17
-rw-r--r--src/lib/diff/README.md34
-rw-r--r--src/lib/diff/swatinem_diff.js272
-rw-r--r--src/lib/hsluv/LICENSE20
-rw-r--r--src/lib/hsluv/README3
-rw-r--r--src/lib/hsluv/hsluv-0.1.0.min.js8
-rw-r--r--src/lib/js-beautify/LICENSE9
-rw-r--r--src/lib/js-beautify/README5
-rw-r--r--src/lib/js-beautify/beautifier.min.js2
-rw-r--r--src/lib/lz4/README.md52
-rw-r--r--src/lib/lz4/lz4-block-codec-any.js151
-rw-r--r--src/lib/lz4/lz4-block-codec-js.js297
-rw-r--r--src/lib/lz4/lz4-block-codec-wasm.js195
-rw-r--r--src/lib/lz4/lz4-block-codec.wasmbin0 -> 1226 bytes
-rw-r--r--src/lib/lz4/lz4-block-codec.wat745
-rw-r--r--src/lib/publicsuffixlist/publicsuffixlist.js641
-rw-r--r--src/lib/publicsuffixlist/wasm/README.md29
-rw-r--r--src/lib/publicsuffixlist/wasm/publicsuffixlist.wasmbin0 -> 408 bytes
-rw-r--r--src/lib/publicsuffixlist/wasm/publicsuffixlist.wat322
-rw-r--r--src/lib/punycode.js493
-rw-r--r--src/lib/regexanalyzer/CHANGES.md15
-rw-r--r--src/lib/regexanalyzer/README.md14
-rw-r--r--src/lib/regexanalyzer/regex.js2276
-rw-r--r--src/logger-ui.html232
-rw-r--r--src/no-dashboard.html27
-rw-r--r--src/popup-fenix.html114
-rw-r--r--src/settings.html98
-rw-r--r--src/support.html130
-rw-r--r--src/web_accessible_resources/1x1.gifbin0 -> 43 bytes
-rw-r--r--src/web_accessible_resources/2x2.pngbin0 -> 68 bytes
-rw-r--r--src/web_accessible_resources/32x32.pngbin0 -> 83 bytes
-rw-r--r--src/web_accessible_resources/3x2.pngbin0 -> 68 bytes
-rw-r--r--src/web_accessible_resources/README.txt11
-rw-r--r--src/web_accessible_resources/amazon_ads.js70
-rw-r--r--src/web_accessible_resources/amazon_apstag.js62
-rw-r--r--src/web_accessible_resources/ampproject_v0.js34
-rw-r--r--src/web_accessible_resources/chartbeat.js30
-rw-r--r--src/web_accessible_resources/click2load.html28
-rw-r--r--src/web_accessible_resources/dom-inspector.html25
-rw-r--r--src/web_accessible_resources/doubleclick_instream_ad_status.js1
-rw-r--r--src/web_accessible_resources/empty0
-rw-r--r--src/web_accessible_resources/epicker-ui.html75
-rw-r--r--src/web_accessible_resources/fingerprint2.js55
-rw-r--r--src/web_accessible_resources/fingerprint3.js45
-rw-r--r--src/web_accessible_resources/google-analytics_analytics.js110
-rw-r--r--src/web_accessible_resources/google-analytics_cx_api.js36
-rw-r--r--src/web_accessible_resources/google-analytics_ga.js130
-rw-r--r--src/web_accessible_resources/google-analytics_inpage_linkid.js28
-rw-r--r--src/web_accessible_resources/google-ima.js855
-rw-r--r--src/web_accessible_resources/googlesyndication_adsbygoogle.js56
-rw-r--r--src/web_accessible_resources/googletagmanager_gtm.js43
-rw-r--r--src/web_accessible_resources/googletagservices_gpt.js154
-rw-r--r--src/web_accessible_resources/hd-main.js46
-rw-r--r--src/web_accessible_resources/nobab.js87
-rw-r--r--src/web_accessible_resources/nobab2.js42
-rw-r--r--src/web_accessible_resources/noeval-silent.js28
-rw-r--r--src/web_accessible_resources/noeval.js30
-rw-r--r--src/web_accessible_resources/nofab.js67
-rw-r--r--src/web_accessible_resources/noop-0.1s.mp3bin0 -> 813 bytes
-rw-r--r--src/web_accessible_resources/noop-0.5s.mp3bin0 -> 2349 bytes
-rw-r--r--src/web_accessible_resources/noop-1s.mp4bin0 -> 3753 bytes
-rw-r--r--src/web_accessible_resources/noop-vmap1.0.xml1
-rw-r--r--src/web_accessible_resources/noop.css1
-rw-r--r--src/web_accessible_resources/noop.html5
-rw-r--r--src/web_accessible_resources/noop.js3
-rw-r--r--src/web_accessible_resources/noop.json1
-rw-r--r--src/web_accessible_resources/noop.txt1
-rw-r--r--src/web_accessible_resources/outbrain-widget.js72
-rw-r--r--src/web_accessible_resources/popads-dummy.js30
-rw-r--r--src/web_accessible_resources/popads.js40
-rw-r--r--src/web_accessible_resources/prebid-ads.js26
-rw-r--r--src/web_accessible_resources/scorecardresearch_beacon.js31
-rw-r--r--src/whitelist.html63
-rw-r--r--tools/copy-common-files.sh25
-rwxr-xr-xtools/import-crowdin.sh51
-rwxr-xr-xtools/make-assets.sh42
-rwxr-xr-xtools/make-browser.sh36
-rw-r--r--tools/make-chromium-meta.py34
-rwxr-xr-xtools/make-chromium.sh40
-rwxr-xr-xtools/make-clean.sh9
-rwxr-xr-xtools/make-dig.sh17
-rw-r--r--tools/make-firefox-meta.py36
-rwxr-xr-xtools/make-firefox.sh44
-rwxr-xr-xtools/make-mv3.sh145
-rwxr-xr-xtools/make-nodejs.sh44
-rwxr-xr-xtools/make-npm.sh43
-rw-r--r--tools/make-opera-meta.py26
-rwxr-xr-xtools/make-opera.sh53
-rwxr-xr-xtools/make-thunderbird.sh45
-rwxr-xr-xtools/pull-assets.sh11
-rw-r--r--uAssets/.gitattributes1
-rw-r--r--uAssets/.github/ISSUE_TEMPLATE/bug_report.yml96
-rw-r--r--uAssets/.github/ISSUE_TEMPLATE/config.yml11
-rw-r--r--uAssets/.github/ISSUE_TEMPLATE/report_from_ubo.yml87
-rw-r--r--uAssets/.github/ISSUE_TEMPLATE/specific_report_from_ubo.yml91
-rw-r--r--uAssets/.github/PULL_REQUEST_TEMPLATE.md26
-rw-r--r--uAssets/.github/workflows/main.yml58
-rw-r--r--uAssets/.github/workflows/on-youtube-issue.yml32
-rw-r--r--uAssets/.github/workflows/update-3rd-party-assets.yml32
-rw-r--r--uAssets/.github/workflows/update-easylist.yml32
-rw-r--r--uAssets/.gitignore1
-rw-r--r--uAssets/CONTRIBUTING.md22
-rw-r--r--uAssets/LICENSE674
-rw-r--r--uAssets/Makefile83
-rw-r--r--uAssets/README.md51
-rw-r--r--uAssets/dnr/default.json2
-rw-r--r--uAssets/filters/annoyances-cookies.txt887
-rw-r--r--uAssets/filters/annoyances-others.txt7274
-rw-r--r--uAssets/filters/annoyances.txt12
-rw-r--r--uAssets/filters/badlists.txt77
-rw-r--r--uAssets/filters/badware.txt3619
-rw-r--r--uAssets/filters/filters-2020.txt4574
-rw-r--r--uAssets/filters/filters-2021.txt5422
-rw-r--r--uAssets/filters/filters-2022.txt5501
-rw-r--r--uAssets/filters/filters-2023.txt5620
-rw-r--r--uAssets/filters/filters-2024.txt276
-rw-r--r--uAssets/filters/filters-mobile.txt121
-rw-r--r--uAssets/filters/filters.txt15424
-rw-r--r--uAssets/filters/lan-block.txt101
-rw-r--r--uAssets/filters/legacy.txt169
-rw-r--r--uAssets/filters/privacy.txt937
-rw-r--r--uAssets/filters/quick-fixes.txt182
-rw-r--r--uAssets/filters/resource-abuse.txt149
-rw-r--r--uAssets/filters/ubo-link-shorteners.txt835
-rw-r--r--uAssets/filters/ubol-filters.txt65
-rw-r--r--uAssets/filters/unbreak.txt5182
-rw-r--r--uAssets/templates/easylist-annoyances.template22
-rw-r--r--uAssets/templates/easylist-chat.template7
-rw-r--r--uAssets/templates/easylist-cookies.template23
-rw-r--r--uAssets/templates/easylist-newsletters.template28
-rw-r--r--uAssets/templates/easylist-notifications.template22
-rw-r--r--uAssets/templates/easylist-social.template22
-rw-r--r--uAssets/templates/easylist.template41
-rw-r--r--uAssets/templates/easyprivacy.template57
-rw-r--r--uAssets/templates/ublock-annoyances.template8
-rw-r--r--uAssets/templates/ublock-badware.template8
-rw-r--r--uAssets/templates/ublock-filters.template16
-rw-r--r--uAssets/templates/ublock-privacy.template10
-rw-r--r--uAssets/templates/ublock-quick-fixes.template8
-rw-r--r--uAssets/templates/ublock-unbreak.template8
-rw-r--r--uAssets/thirdparties/easylist/easylist-annoyances.txt3544
-rw-r--r--uAssets/thirdparties/easylist/easylist-chat.txt195
-rw-r--r--uAssets/thirdparties/easylist/easylist-cookies.txt28739
-rw-r--r--uAssets/thirdparties/easylist/easylist-newsletters.txt5210
-rw-r--r--uAssets/thirdparties/easylist/easylist-notifications.txt1391
-rw-r--r--uAssets/thirdparties/easylist/easylist-social.txt14520
-rw-r--r--uAssets/thirdparties/easylist/easylist.txt67509
-rw-r--r--uAssets/thirdparties/easylist/easyprivacy.txt43790
-rw-r--r--uAssets/thirdparties/publicsuffix.org/list/effective_tld_names.dat15419
-rw-r--r--uAssets/thirdparties/urlhaus-filter/LICENSE.md42
-rw-r--r--uAssets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt1820
-rwxr-xr-xuAssets/tools/make-diffpatch.sh100
-rw-r--r--uAssets/tools/make-easylist.mjs201
-rwxr-xr-xuAssets/tools/make-easylist.sh35
-rwxr-xr-xuAssets/tools/make-ublock.sh21
-rwxr-xr-xuAssets/tools/make-validate.sh12
-rw-r--r--uAssets/tools/need-patch.mjs81
-rwxr-xr-xuAssets/tools/update-3rdparties.sh30
-rwxr-xr-xuAssets/tools/update-diffpatches.sh115
-rw-r--r--uAssets/tools/validate/config.js33
-rw-r--r--uAssets/tools/validate/package.json6
-rw-r--r--uAssets/tools/validate/validate.js321
999 files changed, 507051 insertions, 0 deletions
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..f1ca168
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,14 @@
+blank_issues_enabled: false
+contact_links:
+ - name: Support Forum
+ url: https://www.reddit.com/r/uBlockOrigin/
+ about: For support, questions, or help, visit /r/uBlockOrigin.
+ - name: uBlock Origin (uBO) Issues
+ url: https://github.com/uBlockOrigin/uBlock-issues/issues
+ about: Report issues with uBO in the uBO issue tracker.
+ - name: Filter List Issues
+ url: https://github.com/uBlockOrigin/uAssets/issues
+ about: Report issues with filter lists or broken website functionality in the uAssets issue tracker.
+ - name: uBO Lite (uBOL) Issues
+ url: https://github.com/uBlockOrigin/uBOL-issues/issues
+ about: Report issues specific to the Manifest Version 3 (MV3) variant in the uBOL issue tracker.
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
new file mode 100644
index 0000000..ed4445a
--- /dev/null
+++ b/.github/workflows/main.yml
@@ -0,0 +1,90 @@
+name: uBO release
+
+on:
+ create:
+ branches: master
+
+permissions:
+ contents: read
+
+# I used the following project as template to get started:
+# https://github.com/dessant/search-by-image/blob/master/.github/workflows/ci.yml
+
+jobs:
+ build:
+ permissions:
+ contents: write # for creating release
+ name: Build packages
+ runs-on: ubuntu-latest
+ if: startsWith(github.ref, 'refs/tags/')
+ steps:
+ - name: Clone repository
+ uses: actions/checkout@v3
+ with:
+ persist-credentials: false
+ - name: Clone uAssets
+ run: |
+ tools/pull-assets.sh
+ # https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
+ - name: Get release information
+ id: release_info
+ run: |
+ echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
+ - name: Assemble release notes
+ run: |
+ > release.body.txt
+ grep -m1 -B10000 -- "----------" CHANGELOG.md >> release.body.txt
+ sed -e 's/%version%/${{ steps.release_info.outputs.VERSION }}/g' RELEASE.HEAD.md >> release.body.txt
+ - name: Create GitHub release
+ id: create_release
+ uses: actions/create-release@v1
+ env:
+ GITHUB_TOKEN: ${{ github.token }}
+ with:
+ tag_name: ${{ steps.release_info.outputs.VERSION }}
+ release_name: ${{ steps.release_info.outputs.VERSION }}
+ draft: true
+ prerelease: true
+ body_path: release.body.txt
+ - name: Build MV2 packages
+ run: |
+ tools/make-chromium.sh ${{ steps.release_info.outputs.VERSION }}
+ tools/make-firefox.sh ${{ steps.release_info.outputs.VERSION }}
+ tools/make-thunderbird.sh ${{ steps.release_info.outputs.VERSION }}
+ tools/make-npm.sh ${{ steps.release_info.outputs.VERSION }}
+ - name: Upload Chromium package
+ uses: actions/upload-release-asset@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
+ asset_path: dist/build/uBlock0_${{ steps.release_info.outputs.VERSION }}.chromium.zip
+ asset_name: uBlock0_${{ steps.release_info.outputs.VERSION }}.chromium.zip
+ asset_content_type: application/octet-stream
+ - name: Upload Firefox package
+ uses: actions/upload-release-asset@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
+ asset_path: dist/build/uBlock0_${{ steps.release_info.outputs.VERSION }}.firefox.xpi
+ asset_name: uBlock0_${{ steps.release_info.outputs.VERSION }}.firefox.xpi
+ asset_content_type: application/octet-stream
+ - name: Upload Thunderbird package
+ uses: actions/upload-release-asset@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
+ asset_path: dist/build/uBlock0_${{ steps.release_info.outputs.VERSION }}.thunderbird.xpi
+ asset_name: uBlock0_${{ steps.release_info.outputs.VERSION }}.thunderbird.xpi
+ asset_content_type: application/octet-stream
+ - name: Upload NodeJS package
+ uses: actions/upload-release-asset@v1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
+ asset_path: dist/build/uBlock0_${{ steps.release_info.outputs.VERSION }}.npm.tgz
+ asset_name: uBlock0_${{ steps.release_info.outputs.VERSION }}.npm.tgz
+ asset_content_type: application/octet-stream
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..dee00e9
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+*.bak
+*.pem
+/dist/build/
+/tmp/
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/.gitmodules
diff --git a/.jshintrc b/.jshintrc
new file mode 100644
index 0000000..46c0d2e
--- /dev/null
+++ b/.jshintrc
@@ -0,0 +1,22 @@
+{
+ "browser": true,
+ "devel": true,
+ "eqeqeq": true,
+ "esversion": 11,
+ "globals": {
+ "chrome": false, // global variable in Chromium, Chrome, Opera
+ "globalThis": false,
+ "self": false,
+ "vAPI": false,
+ "URLSearchParams": false,
+ "WebAssembly": false
+ },
+ "laxbreak": true,
+ "newcap": false,
+ "nonew": false,
+ "strict": "global",
+ "sub": true,
+ "undef": true,
+ "unused": true,
+ "validthis": true
+}
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..ef76821
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,73 @@
+## Fixes / changes
+
+- [Mind drop events in filter expression field of logger](https://github.com/gorhill/uBlock/commit/c8b7d1a526)
+- [Improve `xml-prune` scriptlet](https://github.com/gorhill/uBlock/commit/d7063a052f)
+- [Fix message entries overflowing in logger](https://github.com/gorhill/uBlock/commit/49c8310e22)
+- [Add support for `application/x-javascript` in `replace=` option](https://github.com/gorhill/uBlock/commit/abeadf18eb)
+- [Extend support for differential updates to imported lists](https://github.com/gorhill/uBlock/commit/443c1f81e1)
+- [Add detection of mismatched `!#if`-`!#endif` in linter](https://github.com/gorhill/uBlock/commit/9f4b31a96f)
+- [Support links to update lists which are differential update-friendly](https://github.com/gorhill/uBlock/commit/5e3f9695b4)
+- [Remove "Purge all caches" button from "Filter lists" pane](https://github.com/gorhill/uBlock/commit/bd7ce41224)
+- [Add support for `all` list token in updater-link feature](https://github.com/gorhill/uBlock/commit/14926913f7)
+- [Fix logging of broad exception filter `#@#+js()`](https://github.com/gorhill/uBlock/commit/4305ea9c0c)
+- [Improve `no-xhr-if` scriptlet](https://github.com/gorhill/uBlock/commit/d01ad24291)
+- [Ensure cache storage backend is selected before access](https://github.com/gorhill/uBlock/commit/bfa28b960e)
+- [Fix popup panel rendering when embedded in logger](https://github.com/gorhill/uBlock/commit/4183ce477a)
+- [Add visual hint in support information re. differential update](https://github.com/gorhill/uBlock/commit/7e44db763e)
+- [Remove obsolete web accessible resources](https://github.com/gorhill/uBlock/commit/310bfec6a1)
+- [Rename `urltransform` to `uritransform`](https://github.com/gorhill/uBlock/commit/cdc5e89f52)
+- [Vertically expand/collapse in steps in dom inspector](https://github.com/gorhill/uBlock/commit/885bc3875b)
+- [Reset the DOM inspector when URL in top context changes](https://github.com/gorhill/uBlock/commit/c744c87607)
+- [Support shadow-piercing combinator `>>>` in `trusted-click-element`](https://github.com/gorhill/uBlock/commit/941077a25c)
+- [Isolate DOM inspector layers from page context](https://github.com/gorhill/uBlock/commit/ee83a4304a)
+- [Refactoring: Replace DOM events with broadcast channels](https://github.com/gorhill/uBlock/commit/67fb969572)
+- [Support non-default sticky lists](https://github.com/gorhill/uBlock/commit/ea7d411bc2)
+- [Add enableLazyLoad function](https://github.com/gorhill/uBlock/commit/a8cf08325d) (by @spazmodius )
+- [Change frequency of save-to-storage blocking stats](https://github.com/gorhill/uBlock/commit/5a338b7210)
+- [Improve `prevent-fetch` scriptlet](https://github.com/gorhill/uBlock/commit/6aeab2adbc)
+- [Catch cases of `! Expires:` field with no value](https://github.com/gorhill/uBlock/commit/9ce958432d)
+
+----------
+
+# 1.54.0
+
+## New
+
+Differential update of filter lists, as a result of discussions at <https://github.com/AdguardTeam/FiltersCompiler/issues/192>. Resulting spec is [here](https://github.com/ameshkov/diffupdates).
+
+![inkscape](https://github.com/gorhill/uBlock/assets/585534/3ee3567b-e24f-4d39-90e2-915b39a114fb)
+
+The goal is to **NOT** be ranked among the "most popular projects" by bandwidth usage (as per [jsDelivr's public stats](https://www.jsdelivr.com/statistics)):
+
+![jsDelivr stats](https://github.com/gorhill/uBlock/assets/585534/96c7e0fa-ffcc-4879-a01e-e340b4f0fa9e)
+
+It is expected that differential updates will lower both requests and bandwidth usage.
+
+To benefit the much shorter update period enabled by differential updates, you must let uBO auto-update the filter lists. Forcing a manual update will prevent differential updates until the next time a list auto-update.
+
+## Fixes / changes
+
+- [Enable path for native `has()` selector in Firefox](https://github.com/gorhill/uBlock/commit/c5724c1cce)
+- [Allow scriptlets to be injected in `about:blank`](https://github.com/gorhill/uBlock/commit/3fd2588650)
+- [Fix faulty `as` vararg in `set-constant` scriptlet](https://github.com/gorhill/uBlock/commit/c292a90b90)
+- [Add support to redirect to `noop.json`](https://github.com/gorhill/uBlock/commit/bd8a91ed3a)
+- [More improvements to the `google-ima` shim script](https://github.com/gorhill/uBlock/commit/c1d8f5908d) (by @kzar)
+- [All exceptions filters are exempt from requiring a trusted source](https://github.com/gorhill/uBlock/commit/d2b8d990e6)
+- [Add `trusted-set-session-storage-item` scriptlet](https://github.com/gorhill/uBlock/commit/f3d6a21e7a)
+- [Allow the use of quotes in `set-cookie` scriptlet ](https://github.com/gorhill/uBlock/commit/7c562d0c5c)
+- [Allow the use of quotes in `set-(local|session)-storage-item`](https://github.com/gorhill/uBlock/commit/decafc5cbf)
+- [Add ability to trigger cookie removal on specific events](https://github.com/gorhill/uBlock/commit/ef311ddbec)
+- [Ensure CSSTree does not hold a reference onto last parsed string](https://github.com/gorhill/uBlock/commit/1dba557c9a)
+- [Lower minimum Expires value to 4h](https://github.com/gorhill/uBlock/commit/2360bc02f3)
+- [Properly reset needle length in unserialized buffer](https://github.com/gorhill/uBlock/commit/8ed1ad9c9d)
+- [Add additional flags to regional lists](https://github.com/gorhill/uBlock/commit/0962366524) (by @DandelionSprout)
+- [Harden scriptlets which need to serialize function code into string](https://github.com/gorhill/uBlock/commit/7823d98070)
+- [Reset `g` regexes before use in `rmnt`/`rpnt` scriptlets](https://github.com/gorhill/uBlock/commit/cdc3f66a6b)
+- [Apply response filtering according to mime type](https://github.com/gorhill/uBlock/commit/6417f54299)
+- [Add t/f to set-cookie](https://github.com/gorhill/uBlock/commit/4ab1c36ac9) (by @ryanbr)
+- [Have `urltransform=` use the same syntax as `replace=`](https://github.com/gorhill/uBlock/commit/d7c99b46e6)
+- [Implement network filter option `replace=`](https://github.com/gorhill/uBlock/commit/7c3e060c01) (Firefox only because [filterResponseData](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/filterResponseData#browser_compatibility))
+- [Prevent evaluating the SNFE until fully loaded](https://github.com/gorhill/uBlock/commit/89b272775a)
+- [Add support for differential update of filter lists](https://github.com/gorhill/uBlock/commit/d05ff8ffeb)
+
+----------
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..2717e82
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,31 @@
+# Contributions
+
+Refer to the following sections to direct you to the appropriate destination. Thank you in advance for your help.
+
+---
+
+### Translations
+
+Help translate uBO via [Crowdin](https://crowdin.com/project/ublock).
+
+---
+
+### Reporting Issues
+
+The issue tracker in this repository is deprecated. Use the links below to guide you to where you need to report your issue.
+
+#### Support Forum
+
+For support, questions, or help, visit [/r/uBlockOrigin](https://www.reddit.com/r/uBlockOrigin/).
+
+#### Filter List Issues
+
+Report issues with filter lists or broken website functionality in the [uAssets issue tracker](https://github.com/uBlockOrigin/uAssets/issues).
+
+#### uBlock Origin (uBO) Issues
+
+Report issues with uBO in the [uBO issue tracker](https://github.com/uBlockOrigin/uBlock-issues/issues).
+
+#### uBO Lite (uBOL) Issues
+
+Report issues specific to the Manifest Version 3 (MV3) variant in the [uBOL issue tracker](https://github.com/uBlockOrigin/uBOL-issues/issues).
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..5e1c8e2
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,674 @@
+GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. {http://fsf.org/}
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ {one line to give the program's name and a brief idea of what it does.}
+ Copyright (C) {year} {name of author}
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ {{project}} Copyright (C) {{year}} {{fullname}}
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+{http://www.gnu.org/licenses/}.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+{http://www.gnu.org/philosophy/why-not-lgpl.html}.
diff --git a/MANIFESTO.md b/MANIFESTO.md
new file mode 100644
index 0000000..3fb46b9
--- /dev/null
+++ b/MANIFESTO.md
@@ -0,0 +1,7 @@
+uBlock Origin (uBO)'s manifesto:
+
+The **user decides** what web content is acceptable in their browser.
+
+The uBO project does not support Adblock Plus' _"Acceptable Ads Manifesto"_ because the _"Acceptable Ads"_ marketing campaign is the business plan of a for-profit entity.
+
+Users are the best placed to know what is or is not acceptable to them. uBO's sole purpose is to give users the means to enforce their choices.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..9c03018
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,91 @@
+# https://stackoverflow.com/a/6273809
+run_options := $(filter-out $@,$(MAKECMDGOALS))
+
+.PHONY: all clean test lint chromium opera firefox npm dig mv3 mv3-quick \
+ compare maxcost medcost mincost modifiers record wasm
+
+sources := $(wildcard assets/* assets/*/* dist/version src/* src/*/* src/*/*/* src/*/*/*/*)
+platform := $(wildcard platform/* platform/*/* platform/*/*/* platform/*/*/*/* platform/*/*/*/*/*)
+assets := dist/build/uAssets
+
+all: chromium firefox npm
+
+dist/build/uBlock0.chromium: tools/make-chromium.sh $(sources) $(platform) $(assets)
+ tools/make-chromium.sh
+
+# Build the extension for Chromium.
+chromium: dist/build/uBlock0.chromium
+
+dist/build/uBlock0.opera: tools/make-opera.sh $(sources) $(platform) $(assets)
+ tools/make-opera.sh
+
+# Build the extension for Opera.
+opera: dist/build/uBlock0.opera
+
+dist/build/uBlock0.firefox: tools/make-firefox.sh $(sources) $(platform) $(assets)
+ tools/make-firefox.sh all
+
+# Build the extension for Firefox.
+firefox: dist/build/uBlock0.firefox
+
+dist/build/uBlock0.npm: tools/make-nodejs.sh $(sources) $(platform) $(assets)
+ tools/make-npm.sh
+
+# Build the Node.js package.
+npm: dist/build/uBlock0.npm
+
+lint: npm
+ cd dist/build/uBlock0.npm && npm run lint
+
+test: npm
+ cd dist/build/uBlock0.npm && npm run test
+
+test-full-battery: npm
+ cd dist/build/uBlock0.npm && npm run test-full-battery
+
+check-leaks: npm
+ cd dist/build/uBlock0.npm && npm run check-leaks
+
+dist/build/uBlock0.dig: tools/make-nodejs.sh $(sources) $(platform) $(assets)
+ tools/make-dig.sh
+
+dig: dist/build/uBlock0.dig
+ cd dist/build/uBlock0.dig && npm install
+
+dig-snfe: dig
+ cd dist/build/uBlock0.dig && npm run snfe $(run_options)
+
+mv3-chromium: tools/make-mv3.sh $(sources) $(platform)
+ tools/make-mv3.sh chromium
+
+mv3-firefox: tools/make-mv3.sh $(sources) $(platform)
+ tools/make-mv3.sh firefox
+
+mv3-quick: tools/make-mv3.sh $(sources) $(platform)
+ tools/make-mv3.sh quick
+
+mv3-full: tools/make-mv3.sh $(sources) $(platform)
+ tools/make-mv3.sh full
+
+dist/build/uAssets:
+ tools/pull-assets.sh
+
+clean:
+ rm -rf dist/build tmp/node_modules
+
+
+# Not real targets, just convenient for auto-completion at shell prompt
+compare:
+ @echo
+maxcost:
+ @echo
+medcost:
+ @echo
+mincost:
+ @echo
+modifiers:
+ @echo
+record:
+ @echo
+wasm:
+ @echo
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..23e9036
--- /dev/null
+++ b/README.md
@@ -0,0 +1,192 @@
+[![Badge Commits]][Commit Rate]
+[![Badge Issues]][Issues]
+[![Badge Localization]][Crowdin]
+[![Badge License]][License]
+[![Badge NPM]][NPM]
+[![Badge Mozilla]][Mozilla]
+[![Badge Chrome]][Chrome]
+[![Badge Edge]][Edge]
+
+***
+
+<h1 align="center">
+<sub>
+<img src="https://github.com/gorhill/uBlock/blob/master/src/img/ublock.svg" height="38" width="38">
+</sub>
+uBlock Origin (uBO)
+</h1>
+<p align="center">
+<sub><a href="https://github.com/gorhill/uBlock/wiki/uBlock-Origin-is-completely-unrelated-to-the-web-site-ublock.org"><b>BEWARE!</b> uBO is (and has always been) COMPLETELY UNRELATED to the website <code>ublock.org</code></a>.</sub>
+</p>
+
+***
+
+<p align="center">
+<a href="https://addons.mozilla.org/addon/ublock-origin/"><img src="https://user-images.githubusercontent.com/585534/107280546-7b9b2a00-6a26-11eb-8f9f-f95932f4bfec.png" alt="Get uBlock Origin for Firefox"></a>
+<a href="https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm"><img src="https://user-images.githubusercontent.com/585534/107280622-91a8ea80-6a26-11eb-8d07-77c548b28665.png" alt="Get uBlock Origin for Chromium"></a>
+<a href="https://microsoftedge.microsoft.com/addons/detail/ublock-origin/odfafepnkmbhccpbejgmiehpchacaeak"><img src="https://user-images.githubusercontent.com/585534/107280673-a5ece780-6a26-11eb-9cc7-9fa9f9f81180.png" alt="Get uBlock Origin for Microsoft Edge"></a>
+<a href="https://addons.opera.com/extensions/details/ublock/"><img src="https://user-images.githubusercontent.com/585534/107280692-ac7b5f00-6a26-11eb-85c7-088926504452.png" alt="Get uBlock Origin for Opera"></a>
+<a href="https://addons.thunderbird.net/thunderbird/addon/ublock-origin/"><img src="https://user-images.githubusercontent.com/124740436/235314672-73243149-3683-4407-a2d5-ad0f2b08bc17.png" alt="Get uBlock Origin for Thunderbird"></a>
+</p>
+
+***
+
+uBlock Origin (uBO) is a CPU and memory-efficient [wide-spectrum content blocker][Blocking] for Chromium and Firefox. It blocks ads, trackers, coin miners, popups, annoying anti-blockers, malware sites, etc., by default using [EasyList][EasyList], [EasyPrivacy][EasyPrivacy], [Peter Lowe's Blocklist][Peter Lowe's Blocklist], [Online Malicious URL Blocklist][Malicious Blocklist], and uBO [filter lists][uBO Filters]. There are many other lists available to block even more. Hosts files are also supported. uBO uses the EasyList filter syntax and [extends][Extended Syntax] the syntax to work with custom rules and filters.
+
+You may easily unselect any preselected filter lists if you think uBO blocks too much. For reference, Adblock Plus installs with only EasyList, ABP filters, and Acceptable Ads enabled by default.
+
+It is important to note that using a blocker is **NOT** [theft]. Do not fall for this creepy idea. The _ultimate_ logical consequence of `blocking = theft` is the criminalization of the inalienable right to privacy.
+
+Ads, "unintrusive" or not, are just the visible portion of the privacy-invading means entering your browser when you visit most sites. **uBO's primary goal is to help users neutralize these privacy-invading methods** in a way that welcomes those users who do not wish to use more technical means.
+
+***
+
+* [Documentation](#documentation)
+* [Installation](#installation)
+ * [Firefox](#firefox)
+ * [Thunderbird](#thunderbird)
+ * [Chromium](#chromium)
+ * [All Programs](#all-programs)
+ * [Enterprise Deployment](#enterprise-deployment)
+* [Release History](#release-history)
+* [Translations](#translations)
+* [About](#about)
+
+## Documentation
+
+<table>
+ <thead>
+ <tr>
+ <th>Basic Mode</th>
+ <th>Advanced Mode</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>The <a href="https://github.com/gorhill/uBlock/wiki/Quick-guide:-popup-user-interface">simple popup user interface</a> for an install-it-and-forget-it type of installation that is configured optimally by default.</td>
+ <td>The <a href="https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-quick-guide">advanced popup user interface</a> includes a point-and-click firewall that is configurable on a per-site basis.</td>
+ </tr>
+ <tr>
+ <td align="center" valign="top"><a href="https://github.com/gorhill/uBlock/wiki/Quick-guide:-popup-user-interface"><img src="https://user-images.githubusercontent.com/585534/232531044-c4ac4dd5-0b60-4c1e-aabb-914be04b846c.png"/></a></td>
+ <td align="center" valign="top"><a href="https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-quick-guide"><img src="https://user-images.githubusercontent.com/585534/232531439-a8f81cc3-6622-45c4-8b32-7348cecf6e98.png"/></a></td>
+ </tr>
+ </tbody>
+</table>
+
+Visit the [Wiki][Wiki] for documentation.
+
+For support, questions, or help, visit [/r/uBlockOrigin][Reddit].
+
+## Installation
+
+[Required Permissions][Permissions]
+
+#### Firefox
+
+[Firefox Add-ons][Mozilla]
+
+[Development Builds][Beta]
+
+uBO [works best][Works Best] on Firefox and is available for desktop and Android versions.
+
+#### Thunderbird
+
+[Thunderbird Add-ons][Thunderbird]
+
+In Thunderbird, uBlock Origin does not affect emails, just feeds.
+
+#### Chromium
+
+[Chrome Web Store][Chrome]
+
+[Microsoft Edge Add-ons][Edge] (Published by: [Nicole Rolls][Nicole Rolls])
+
+[Opera Add-ons][Opera]
+
+[Development Builds][Chrome Dev]
+
+uBO should be compatible with any Chromium-based browser.
+
+#### All Programs
+
+Do **NOT** use uBO with any other content blocker. uBO [performs][Performance] as well as or better than most popular blockers. Other blockers can prevent uBO's privacy or anti-blocker-defusing features from working correctly.
+
+[Manual Installation][Manual Installation]
+
+#### Enterprise Deployment
+
+[Deploying uBO][Deployment]
+
+## Release History
+
+[Releases Page][Releases]
+
+## Translations
+
+Help translate uBO via [Crowdin][Crowdin].
+
+## About
+
+[Manifesto][Manifesto]
+
+[Privacy Policy][Privacy Policy]
+
+[GPLv3 License][License]
+
+Free. Open-source. For users by users. No donations sought.
+
+If you ever want to contribute something, think about the people working hard to maintain the filter lists you are using, which are available to use by all for free.
+
+
+<!----------------------------------------------------------------------------->
+
+[Peter Lowe's Blocklist]: https://pgl.yoyo.org/adservers/
+[Malicious Blocklist]: https://gitlab.com/malware-filter/urlhaus-filter#malicious-url-blocklist
+[Performance]: https://www.debugbear.com/blog/chrome-extension-performance-2021#how-do-ad-blockers-and-privacy-tools-affect-browser-performance
+[EasyPrivacy]: https://easylist.to/#easyprivacy
+[Thunderbird]: https://addons.thunderbird.net/thunderbird/addon/ublock-origin/
+[Chrome Dev]: https://chrome.google.com/webstore/detail/ublock-origin-development/cgbcahbpdhpcegmbfconppldiemgcoii
+[EasyList]: https://easylist.to/#easylist
+[Mozilla]: https://addons.mozilla.org/addon/ublock-origin/
+[Crowdin]: https://crowdin.com/project/ublock
+[Chrome]: https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm
+[Reddit]: https://www.reddit.com/r/uBlockOrigin/
+[Theft]: https://twitter.com/LeaVerou/status/518154828166725632
+[Opera]: https://addons.opera.com/extensions/details/ublock/
+[Edge]: https://microsoftedge.microsoft.com/addons/detail/ublock-origin/odfafepnkmbhccpbejgmiehpchacaeak
+[NPM]: https://www.npmjs.com/package/@gorhill/ubo-core
+
+[Manifesto]: MANIFESTO.md
+[License]: LICENSE.txt
+
+[Nicole Rolls]: https://github.com/nicole-ashley
+
+
+<!---------------------------------[ Internal ]-------------------------------->
+
+[Manual Installation]: https://github.com/gorhill/uBlock/tree/master/dist#install
+[Extended Syntax]: https://github.com/gorhill/uBlock/wiki/Static-filter-syntax#extended-syntax
+[Privacy Policy]: https://github.com/gorhill/uBlock/wiki/Privacy-policy
+[uBO Filters]: https://github.com/uBlockOrigin/uAssets/tree/master/filters
+[Permissions]: https://github.com/gorhill/uBlock/wiki/Permissions
+[Commit Rate]: https://github.com/gorhill/uBlock/commits/master
+[Works Best]: https://github.com/gorhill/uBlock/wiki/uBlock-Origin-works-best-on-Firefox
+[Deployment]: https://github.com/gorhill/uBlock/wiki/Deploying-uBlock-Origin
+[Blocking]: https://github.com/gorhill/uBlock/wiki/Blocking-mode
+[Releases]: https://github.com/gorhill/uBlock/releases
+[Issues]: https://github.com/uBlockOrigin/uBlock-issues/issues
+[Beta]: https://github.com/gorhill/uBlock/blob/master/dist/README.md#for-beta-version
+[Wiki]: https://github.com/gorhill/uBlock/wiki
+
+
+<!----------------------------------[ Badges ]--------------------------------->
+
+[Badge Localization]: https://d322cqt584bo4o.cloudfront.net/ublock/localized.svg
+[Badge Commits]: https://img.shields.io/github/commit-activity/m/gorhill/ublock?label=Commits
+[Badge Mozilla]: https://img.shields.io/amo/rating/ublock-origin?label=Firefox
+[Badge License]: https://img.shields.io/badge/License-GPLv3-blue.svg
+[Badge Chrome]: https://img.shields.io/chrome-web-store/rating/cjpalhdlnbpafiamejdnhcphjbkeiagm?label=Chrome
+[Badge Edge]: https://img.shields.io/badge/dynamic/json?label=Edge&color=brightgreen&query=%24.averageRating&suffix=%2F%35&url=https%3A%2F%2Fmicrosoftedge.microsoft.com%2Faddons%2Fgetproductdetailsbycrxid%2Fodfafepnkmbhccpbejgmiehpchacaeak
+[Badge Issues]: https://img.shields.io/github/issues/uBlockOrigin/uBlock-issues
+[Badge NPM]: https://img.shields.io/npm/v/@gorhill/ubo-core
+
diff --git a/RELEASE.HEAD.md b/RELEASE.HEAD.md
new file mode 100644
index 0000000..ce149ad
--- /dev/null
+++ b/RELEASE.HEAD.md
@@ -0,0 +1,10 @@
+
+[Commits to master since this release](https://github.com/gorhill/uBlock/compare/%version%...master)
+
+To install the developer build:
+
+- **Firefox**: Click [uBlock0_%version%.firefox.signed.xpi](https://github.com/gorhill/uBlock/releases/download/%version%/uBlock0_%version%.firefox.signed.xpi)
+ - [uBO works best on Firefox](https://github.com/gorhill/uBlock/wiki/uBlock-Origin-works-best-on-Firefox).
+- **Chromium**: Install from the Chrome Web Store (CWS): <https://chrome.google.com/webstore/detail/ublock-origin-dev-build/cgbcahbpdhpcegmbfconppldiemgcoii>.
+- **Thunderbird**: Download [uBlock0_%version%.thunderbird.xpi](https://github.com/gorhill/uBlock/releases/download/%version%/uBlock0_%version%.thunderbird.xpi), then drag-n-drop it into Thunderbird's _Add-ons Manager_ pane (Thunderbird 91+ required)
+- **Node.js**: Import from [npm](https://www.npmjs.com/package/@gorhill/ubo-core), or download and unzip [uBlock0_%version%.npm.tgz](https://github.com/gorhill/uBlock/releases/download/%version%/uBlock0_%version%.npm.tgz).
diff --git a/REMOVED.md b/REMOVED.md
new file mode 100644
index 0000000..d63b864
--- /dev/null
+++ b/REMOVED.md
@@ -0,0 +1,87 @@
+## Renamed/removed assets
+
+For convenience, list of commits of renamed/removed assets, so that they can be
+more easily found.
+
+Use the _Before_ link to browse the repo before the rename/removal of assets.
+
+#### 2022-10-28
+
+Removed:
+
+- ./doc/
+
+Git:
+
+- After: https://github.com/gorhill/uBlock/tree/ba637bb22e48f98383b9f1191a0c30e965475068
+- Commit: https://github.com/gorhill/uBlock/commit/ba637bb22e48f98383b9f1191a0c30e965475068
+- Before: https://github.com/gorhill/uBlock/tree/6c046ed95cd02d023453c66f766159f6410ae7f7
+
+#### 2022-05-08
+
+Removed:
+
+- ./src/css/popup.css
+- ./src/js/popup.js
+- ./src/popup.html
+
+Git:
+
+- After: https://github.com/gorhill/uBlock/tree/cef36518edd4d6ca4b3278493cb93329b0833408
+- Commit: https://github.com/gorhill/uBlock/commit/cef36518edd4d6ca4b3278493cb93329b0833408
+- Before: https://github.com/gorhill/uBlock/tree/cef36518edd4d6ca4b3278493cb93329b0833408
+
+#### 2021-07-16
+
+Moved:
+
+- ./platform/chromium/ => ./platform/common/
+
+Git:
+
+- After: https://github.com/gorhill/uBlock/tree/a4aced69dc814befcbb57ff1cc04bee307f2c131
+- Commit: https://github.com/gorhill/uBlock/commit/a4aced69dc814befcbb57ff1cc04bee307f2c131
+- Before: https://github.com/gorhill/uBlock/tree/ec7db30b2f4ff492ebc2a87ded28afa74aa50948
+
+#### 2019-09-19
+
+Removed:
+
+- ./platform/safari/*
+
+Git:
+
+- After: https://github.com/gorhill/uBlock/tree/149b5cf59cc760fa98c9753f4b4ec12d4b884d9a
+- Commit: https://github.com/gorhill/uBlock/commit/149b5cf59cc760fa98c9753f4b4ec12d4b884d9a
+- Before: https://github.com/gorhill/uBlock/tree/917f3620e0c08b722bbd4d400bca2735d9f6975f
+
+#### 2014-11-24
+
+Moved:
+
+- ./meta/crx/ => ./platform/chromium/
+
+Git:
+
+- After: https://github.com/gorhill/uBlock/tree/a430e526b6b72182a07cca94822861da7fbdf77b
+- Commit: https://github.com/gorhill/uBlock/commit/a430e526b6b72182a07cca94822861da7fbdf77b
+- Before: https://github.com/gorhill/uBlock/tree/266f62914fab3a9ae5d01fa808b9e7a68e948777
+
+#### 2014-11-09
+
+Moved:
+
+- ./*.html => ./src/
+- ./*.sh => ./tools/
+- ./_locales/ => ./src/_locales/
+- ./assets => ./src/assets/
+- ./css/ => ./src/css/
+- ./img/ => ./src/img/
+- ./js/ => ./src/js/
+- ./lib/ => ./src/lib/
+
+Git:
+
+- After: https://github.com/gorhill/uBlock/tree/5b79bf353647a4dad9d4968d0f246582744f07bc
+- Commit: https://github.com/gorhill/uBlock/commit/5b79bf353647a4dad9d4968d0f246582744f07bc
+- Before: https://github.com/gorhill/uBlock/tree/96c4e2e2565ffbd7d413ed7721d9610772b03859
diff --git a/assets/assets.dev.json b/assets/assets.dev.json
new file mode 100644
index 0000000..129cc75
--- /dev/null
+++ b/assets/assets.dev.json
@@ -0,0 +1,902 @@
+{
+ "assets.json": {
+ "content": "internal",
+ "updateAfter": 13,
+ "contentURL": [
+ "https://raw.githubusercontent.com/gorhill/uBlock/master/assets/assets.dev.json",
+ "assets/assets.dev.json"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/ublock/assets.dev.json",
+ "https://ublockorigin.pages.dev/ublock/assets.dev.json",
+ "https://cdn.jsdelivr.net/gh/gorhill/uBlock@master/assets/assets.dev.json",
+ "https://cdn.statically.io/gh/gorhill/uBlock/master/assets/assets.dev.json"
+ ]
+ },
+ "public_suffix_list.dat": {
+ "content": "internal",
+ "updateAfter": 19,
+ "contentURL": [
+ "https://publicsuffix.org/list/public_suffix_list.dat",
+ "assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat"
+ ]
+ },
+ "ublock-badlists": {
+ "content": "internal",
+ "updateAfter": 29,
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/filters/badlists.txt",
+ "assets/ublock/badlists.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/badlists.txt",
+ "https://ublockorigin.pages.dev/filters/badlists.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/badlists.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/badlists.txt"
+ ]
+ },
+ "ublock-filters": {
+ "content": "filters",
+ "group": "default",
+ "parent": "uBlock filters",
+ "title": "uBlock filters – Ads",
+ "tags": "ads",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/filters/filters.txt",
+ "assets/ublock/filters.min.txt",
+ "assets/ublock/filters.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/filters.min.txt",
+ "https://ublockorigin.pages.dev/filters/filters.min.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/filters.min.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/filters.min.txt"
+ ],
+ "supportURL": "https://github.com/uBlockOrigin/uAssets"
+ },
+ "ublock-badware": {
+ "content": "filters",
+ "group": "default",
+ "parent": "uBlock filters",
+ "title": "uBlock filters – Badware risks",
+ "tags": "malware security",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/filters/badware.txt",
+ "assets/ublock/badware.min.txt",
+ "assets/ublock/badware.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/badware.min.txt",
+ "https://ublockorigin.pages.dev/filters/badware.min.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/badware.min.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/badware.min.txt"
+ ],
+ "supportURL": "https://github.com/uBlockOrigin/uAssets",
+ "instructionURL": "https://github.com/gorhill/uBlock/wiki/Badware-risks"
+ },
+ "ublock-privacy": {
+ "content": "filters",
+ "group": "default",
+ "parent": "uBlock filters",
+ "title": "uBlock filters – Privacy",
+ "tags": "privacy",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/filters/privacy.txt",
+ "assets/ublock/privacy.min.txt",
+ "assets/ublock/privacy.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/privacy.min.txt",
+ "https://ublockorigin.pages.dev/filters/privacy.min.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/privacy.min.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/privacy.min.txt"
+ ],
+ "supportURL": "https://github.com/uBlockOrigin/uAssets"
+ },
+ "ublock-unbreak": {
+ "content": "filters",
+ "group": "default",
+ "parent": "uBlock filters",
+ "title": "uBlock filters – Unbreak",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/filters/unbreak.txt",
+ "assets/ublock/unbreak.min.txt",
+ "assets/ublock/unbreak.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/unbreak.min.txt",
+ "https://ublockorigin.pages.dev/filters/unbreak.min.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/unbreak.min.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/unbreak.min.txt"
+ ],
+ "supportURL": "https://github.com/uBlockOrigin/uAssets"
+ },
+ "ublock-quick-fixes": {
+ "content": "filters",
+ "group": "default",
+ "parent": "uBlock filters",
+ "title": "uBlock filters – Quick fixes",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/filters/quick-fixes.txt",
+ "assets/ublock/quick-fixes.min.txt",
+ "assets/ublock/quick-fixes.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/quick-fixes.min.txt",
+ "https://ublockorigin.pages.dev/filters/quick-fixes.min.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/quick-fixes.min.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/quick-fixes.min.txt?dev=1"
+ ],
+ "supportURL": "https://github.com/uBlockOrigin/uAssets"
+ },
+ "adguard-generic": {
+ "content": "filters",
+ "group": "ads",
+ "off": true,
+ "title": "AdGuard – Ads",
+ "tags": "ads",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/2_without_easylist.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "adguard-mobile": {
+ "content": "filters",
+ "group": "ads",
+ "off": true,
+ "title": "AdGuard – Mobile Ads",
+ "tags": "ads mobile",
+ "ua": "mobile",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/11.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "easylist": {
+ "content": "filters",
+ "group": "ads",
+ "title": "EasyList",
+ "tags": "ads",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/thirdparties/easylist.txt",
+ "assets/thirdparties/easylist/easylist.txt",
+ "assets/thirdparties/easylist-downloads.adblockplus.org/easylist.txt"
+ ],
+ "cdnURLs": [
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist.txt",
+ "https://ublockorigin.pages.dev/thirdparties/easylist.txt"
+ ],
+ "supportURL": "https://easylist.to/"
+ },
+ "adguard-spyware-url": {
+ "content": "filters",
+ "group": "privacy",
+ "off": true,
+ "title": "AdGuard URL Tracking Protection",
+ "tags": "privacy",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/17.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "adguard-spyware": {
+ "content": "filters",
+ "group": "privacy",
+ "off": true,
+ "title": "AdGuard Tracking Protection",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/3.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "block-lan": {
+ "content": "filters",
+ "group": "privacy",
+ "off": true,
+ "title": "Block Outsider Intrusion into LAN",
+ "tags": "privacy security",
+ "contentURL": "https://ublockorigin.github.io/uAssets/filters/lan-block.txt",
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/lan-block.txt",
+ "https://ublockorigin.pages.dev/filters/lan-block.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/lan-block.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/lan-block.txt"
+ ],
+ "supportURL": "https://github.com/uBlockOrigin/uAssets"
+ },
+ "easyprivacy": {
+ "content": "filters",
+ "group": "privacy",
+ "title": "EasyPrivacy",
+ "tags": "privacy",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/thirdparties/easyprivacy.txt",
+ "assets/thirdparties/easylist/easyprivacy.txt",
+ "assets/thirdparties/easylist-downloads.adblockplus.org/easyprivacy.txt"
+ ],
+ "cdnURLs": [
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easyprivacy.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easyprivacy.txt",
+ "https://ublockorigin.pages.dev/thirdparties/easyprivacy.txt"
+ ],
+ "supportURL": "https://easylist.to/"
+ },
+ "urlhaus-1": {
+ "content": "filters",
+ "group": "malware",
+ "title": "Online Malicious URL Blocklist",
+ "contentURL": [
+ "https://malware-filter.gitlab.io/urlhaus-filter/urlhaus-filter-ag-online.txt",
+ "assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt"
+ ],
+ "cdnURLs": [
+ "https://curbengh.github.io/malware-filter/urlhaus-filter-ag-online.txt",
+ "https://malware-filter.gitlab.io/urlhaus-filter/urlhaus-filter-ag-online.txt",
+ "https://malware-filter.pages.dev/urlhaus-filter-ag-online.txt"
+ ],
+ "supportURL": "https://gitlab.com/malware-filter/urlhaus-filter#malicious-url-blocklist"
+ },
+ "curben-phishing": {
+ "content": "filters",
+ "group": "malware",
+ "off": true,
+ "title": "Phishing URL Blocklist",
+ "contentURL": "https://malware-filter.gitlab.io/phishing-filter/phishing-filter.txt",
+ "cdnURLs": [
+ "https://curbengh.github.io/phishing-filter/phishing-filter.txt",
+ "https://malware-filter.gitlab.io/phishing-filter/phishing-filter.txt",
+ "https://phishing-filter.pages.dev/phishing-filter.txt"
+ ],
+ "supportURL": "https://gitlab.com/malware-filter/phishing-filter#phishing-url-blocklist"
+ },
+ "adguard-social": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "AdGuard – Annoyances",
+ "off": true,
+ "title": "AdGuard – Social Media",
+ "tags": "annoyances social",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/4.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "adguard-cookies": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "AdGuard – Annoyances|AdGuard/uBO – Cookie Notices",
+ "off": true,
+ "title": "AdGuard – Cookie Notices",
+ "tags": "annoyances cookies",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/18.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "ublock-cookies-adguard": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "AdGuard – Annoyances|AdGuard/uBO – Cookie Notices",
+ "off": true,
+ "title": "uBlock filters – Cookie Notices",
+ "tags": "annoyances cookies",
+ "contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances-cookies.txt",
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances-cookies.txt",
+ "https://ublockorigin.pages.dev/filters/annoyances-cookies.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances-cookies.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances-cookies.txt"
+ ],
+ "supportURL": "https://github.com/uBlockOrigin/uAssets"
+ },
+ "adguard-popup-overlays": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "AdGuard – Annoyances",
+ "off": true,
+ "title": "AdGuard – Popup Overlays",
+ "tags": "annoyances",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/19.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "adguard-mobile-app-banners": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "AdGuard – Annoyances",
+ "off": true,
+ "title": "AdGuard – Mobile App Banners",
+ "tags": "annoyances mobile",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/20.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "adguard-other-annoyances": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "AdGuard – Annoyances",
+ "off": true,
+ "title": "AdGuard – Other Annoyances",
+ "tags": "annoyances",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/21.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "adguard-widgets": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "AdGuard – Annoyances",
+ "off": true,
+ "title": "AdGuard – Widgets",
+ "tags": "annoyances",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/22.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "fanboy-thirdparty_social": {
+ "content": "filters",
+ "group": "annoyances",
+ "off": true,
+ "title": "Fanboy – Anti-Facebook",
+ "tags": "privacy",
+ "contentURL": "https://secure.fanboy.co.nz/fanboy-antifacebook.txt",
+ "supportURL": "https://github.com/ryanbr/fanboy-adblock/issues"
+ },
+ "easylist-annoyances": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "EasyList – Annoyances",
+ "off": true,
+ "title": "EasyList – Other Annoyances",
+ "tags": "annoyances",
+ "contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-annoyances.txt",
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-annoyances.txt",
+ "https://ublockorigin.pages.dev/thirdparties/easylist-annoyances.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-annoyances.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-annoyances.txt"
+ ],
+ "supportURL": "https://github.com/easylist/easylist#fanboy-lists"
+ },
+ "easylist-chat": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "EasyList – Annoyances",
+ "off": true,
+ "title": "EasyList – Chat Widgets",
+ "tags": "annoyances",
+ "contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-chat.txt",
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-chat.txt",
+ "https://ublockorigin.pages.dev/thirdparties/easylist-chat.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-chat.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-chat.txt"
+ ],
+ "supportURL": "https://github.com/easylist/easylist#fanboy-lists"
+ },
+ "fanboy-cookiemonster": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "EasyList – Annoyances|EasyList/uBO – Cookie Notices",
+ "off": true,
+ "title": "EasyList – Cookie Notices",
+ "tags": "annoyances cookies",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/thirdparties/easylist-cookies.txt",
+ "https://secure.fanboy.co.nz/fanboy-cookiemonster_ubo.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-cookies.txt",
+ "https://ublockorigin.pages.dev/thirdparties/easylist-cookies.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-cookies.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-cookies.txt",
+ "https://secure.fanboy.co.nz/fanboy-cookiemonster_ubo.txt"
+ ],
+ "supportURL": "https://github.com/easylist/easylist#fanboy-lists"
+ },
+ "ublock-cookies-easylist": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "EasyList – Annoyances|EasyList/uBO – Cookie Notices",
+ "off": true,
+ "title": "uBlock filters – Cookie Notices",
+ "tags": "annoyances cookies",
+ "contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances-cookies.txt",
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances-cookies.txt",
+ "https://ublockorigin.pages.dev/filters/annoyances-cookies.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances-cookies.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances-cookies.txt"
+ ],
+ "supportURL": "https://github.com/uBlockOrigin/uAssets"
+ },
+ "easylist-newsletters": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "EasyList – Annoyances",
+ "off": true,
+ "title": "EasyList – Newsletter Notices",
+ "tags": "annoyances",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/thirdparties/easylist-newsletters.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-newsletters.txt",
+ "https://ublockorigin.pages.dev/thirdparties/easylist-newsletters.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-newsletters.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-newsletters.txt"
+ ],
+ "supportURL": "https://easylist.to/"
+ },
+ "easylist-notifications": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "EasyList – Annoyances",
+ "off": true,
+ "title": "EasyList – Notifications",
+ "tags": "annoyances",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/thirdparties/easylist-notifications.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-notifications.txt",
+ "https://ublockorigin.pages.dev/thirdparties/easylist-notifications.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-notifications.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-notifications.txt"
+ ],
+ "supportURL": "https://easylist.to/"
+ },
+ "fanboy-social": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "EasyList – Annoyances",
+ "off": true,
+ "title": "EasyList – Social Widgets",
+ "tags": "annoyances social",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/thirdparties/easylist-social.txt",
+ "https://secure.fanboy.co.nz/fanboy-social_ubo.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-social.txt",
+ "https://ublockorigin.pages.dev/thirdparties/easylist-social.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-social.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-social.txt",
+ "https://secure.fanboy.co.nz/fanboy-social_ubo.txt"
+ ],
+ "supportURL": "https://easylist.to/"
+ },
+ "ublock-annoyances": {
+ "content": "filters",
+ "group": "annoyances",
+ "off": true,
+ "title": "uBlock filters – Annoyances",
+ "tags": "annoyances",
+ "contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances.txt",
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances.min.txt",
+ "https://ublockorigin.pages.dev/filters/annoyances.min.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances.min.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances.min.txt"
+ ],
+ "supportURL": "https://github.com/uBlockOrigin/uAssets"
+ },
+ "dpollock-0": {
+ "content": "filters",
+ "group": "multipurpose",
+ "updateAfter": 13,
+ "off": true,
+ "title": "Dan Pollock’s hosts file",
+ "tags": "ads privacy security",
+ "contentURL": "https://someonewhocares.org/hosts/hosts",
+ "supportURL": "https://someonewhocares.org/hosts/"
+ },
+ "plowe-0": {
+ "content": "filters",
+ "group": "multipurpose",
+ "updateAfter": 13,
+ "title": "Peter Lowe’s Ad and tracking server list",
+ "tags": "ads privacy security",
+ "contentURL": [
+ "https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext",
+ "assets/thirdparties/pgl.yoyo.org/as/serverlist.txt",
+ "assets/thirdparties/pgl.yoyo.org/as/serverlist"
+ ],
+ "supportURL": "https://pgl.yoyo.org/adservers/"
+ },
+ "ALB-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇦🇱al 🇽🇰xk: Adblock List for Albania",
+ "tags": "ads albania shqipja",
+ "lang": "sq",
+ "contentURL": "https://raw.githubusercontent.com/AnXh3L0/blocklist/master/albanian-easylist-addition/Albania.txt",
+ "supportURL": "https://github.com/AnXh3L0/blocklist"
+ },
+ "ara-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇪🇬eg 🇸🇦sa 🇲🇦ma 🇩🇿dz: Liste AR",
+ "tags": "ads arabic اَلْعَرَبِيَّةُ‎",
+ "lang": "ar",
+ "contentURL": "https://easylist-downloads.adblockplus.org/Liste_AR.txt",
+ "supportURL": "https://forums.lanik.us/viewforum.php?f=98"
+ },
+ "BGR-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇧🇬bg: Bulgarian Adblock list",
+ "tags": "ads bulgarian България macedonian Македонија",
+ "lang": "bg mk",
+ "contentURL": "https://stanev.org/abp/adblock_bg.txt",
+ "supportURL": "https://stanev.org/abp/"
+ },
+ "CHN-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇨🇳cn 🇹🇼tw: AdGuard Chinese (中文)",
+ "tags": "ads chinese 中文",
+ "lang": "ug zh",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/224.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
+ },
+ "CZE-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇨🇿cz 🇸🇰sk: EasyList Czech and Slovak",
+ "tags": "ads czech česká slovak slovenská",
+ "lang": "cs sk",
+ "contentURL": "https://raw.githubusercontent.com/tomasko126/easylistczechandslovak/master/filters.txt",
+ "supportURL": "https://github.com/tomasko126/easylistczechandslovak"
+ },
+ "DEU-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇩🇪de 🇨🇭ch 🇦🇹at: EasyList Germany",
+ "tags": "ads german deutschland luxembourgish lëtzebuerg romansh",
+ "lang": "de dsb hsb lb rm",
+ "contentURL": [
+ "https://easylist.to/easylistgermany/easylistgermany.txt",
+ "https://easylist-downloads.adblockplus.org/easylistgermany.txt"
+ ],
+ "supportURL": "https://forums.lanik.us/viewforum.php?f=90"
+ },
+ "EST-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇪🇪ee: Eesti saitidele kohandatud filter",
+ "tags": "ads estonian",
+ "lang": "et",
+ "contentURL": "https://adblock.ee/list.php",
+ "supportURL": "https://adblock.ee/"
+ },
+ "FIN-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇫🇮fi: Adblock List for Finland",
+ "tags": "ads finnish",
+ "lang": "fi",
+ "contentURL": "https://raw.githubusercontent.com/finnish-easylist-addition/finnish-easylist-addition/gh-pages/Finland_adb.txt",
+ "supportURL": "https://github.com/finnish-easylist-addition/finnish-easylist-addition"
+ },
+ "FRA-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇫🇷fr 🇨🇦ca: AdGuard Français",
+ "tags": "ads french",
+ "lang": "ar br ff fr lb oc son",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/16.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
+ },
+ "GRC-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇬🇷gr 🇨🇾cy: Greek AdBlock Filter",
+ "tags": "ads greek",
+ "lang": "el",
+ "contentURL": "https://www.void.gr/kargig/void-gr-filters.txt",
+ "supportURL": "https://github.com/kargig/greek-adblockplus-filter"
+ },
+ "HRV-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇭🇷hr 🇷🇸rs: Dandelion Sprout's Serbo-Croatian filters",
+ "tags": "ads croatian serbian",
+ "lang": "hr sr",
+ "contentURL": "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/SerboCroatianList.txt",
+ "supportURL": "https://github.com/DandelionSprout/adfilt#readme"
+ },
+ "HUN-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇭🇺hu: hufilter",
+ "tags": "ads hungarian",
+ "lang": "hu",
+ "contentURL": "https://raw.githubusercontent.com/hufilter/hufilter/master/hufilter-ublock.txt",
+ "supportURL": "https://github.com/hufilter/hufilter"
+ },
+ "IDN-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇮🇩id 🇲🇾my: ABPindo",
+ "tags": "ads indonesian malay",
+ "lang": "id ms",
+ "contentURL": "https://raw.githubusercontent.com/ABPindo/indonesianadblockrules/master/subscriptions/abpindo.txt",
+ "supportURL": "https://github.com/ABPindo/indonesianadblockrules"
+ },
+ "IND-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇮🇳in 🇱🇰lk 🇳🇵np: IndianList",
+ "tags": "ads assamese bengali gujarati hindi kannada malayalam marathi nepali punjabi sinhala tamil telugu",
+ "lang": "as bn gu hi kn ml mr ne pa si ta te",
+ "contentURL": "https://easylist-downloads.adblockplus.org/indianlist.txt",
+ "supportURL": "https://github.com/mediumkreation/IndianList"
+ },
+ "IRN-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇮🇷ir: PersianBlocker",
+ "tags": "ads af ir persian pashto tajik tj",
+ "lang": "fa ps tg",
+ "contentURL": [
+ "https://raw.githubusercontent.com/MasterKia/PersianBlocker/main/PersianBlocker.txt",
+ "https://cdn.statically.io/gh/MasterKia/PersianBlocker/main/PersianBlocker.txt",
+ "https://raw.githubusercontent.com/MasterKia/PersianBlocker/main/PersianBlocker.txt"
+ ],
+ "cdnURLs": [
+ "https://cdn.jsdelivr.net/gh/MasterKia/PersianBlocker@main/PersianBlocker.txt",
+ "https://cdn.statically.io/gh/MasterKia/PersianBlocker/main/PersianBlocker.txt"
+ ],
+ "supportURL": "https://github.com/MasterKia/PersianBlocker"
+ },
+ "ISL-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇮🇸is: Icelandic ABP List",
+ "tags": "ads icelandic",
+ "lang": "is",
+ "contentURL": "https://adblock.gardar.net/is.abp.txt",
+ "supportURL": "https://adblock.gardar.net/"
+ },
+ "ISR-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇮🇱il: EasyList Hebrew",
+ "tags": "ads hebrew",
+ "lang": "he",
+ "contentURL": "https://raw.githubusercontent.com/easylist/EasyListHebrew/master/EasyListHebrew.txt",
+ "supportURL": "https://github.com/easylist/EasyListHebrew"
+ },
+ "ITA-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇮🇹it: EasyList Italy",
+ "tags": "ads italian",
+ "lang": "it lij",
+ "contentURL": "https://easylist-downloads.adblockplus.org/easylistitaly.txt",
+ "supportURL": "https://forums.lanik.us/viewforum.php?f=96"
+ },
+ "JPN-1": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇯🇵jp: AdGuard Japanese",
+ "tags": "ads japanese 日本語",
+ "lang": "ja",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/7.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "KOR-1": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇰🇷kr: List-KR",
+ "tags": "ads korean 한국어",
+ "lang": "ko",
+ "contentURL": "https://cdn.jsdelivr.net/gh/List-KR/List-KR@latest/filter-uBlockOrigin.txt",
+ "supportURL": "https://github.com/List-KR/List-KR#readme"
+ },
+ "LTU-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇱🇹lt: EasyList Lithuania",
+ "tags": "ads lithuanian",
+ "lang": "lt",
+ "contentURL": "https://raw.githubusercontent.com/EasyList-Lithuania/easylist_lithuania/master/easylistlithuania.txt",
+ "cdnURLs": [
+ "https://cdn.jsdelivr.net/gh/EasyList-Lithuania/easylist_lithuania@master/easylistlithuania.txt",
+ "https://cdn.statically.io/gh/EasyList-Lithuania/easylist_lithuania/master/easylistlithuania.txt"
+ ],
+ "supportURL": "https://github.com/EasyList-Lithuania/easylist_lithuania"
+ },
+ "LVA-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇱🇻lv: Latvian List",
+ "tags": "ads latvian",
+ "lang": "lv",
+ "contentURL": "https://raw.githubusercontent.com/Latvian-List/adblock-latvian/master/lists/latvian-list.txt",
+ "supportURL": "https://github.com/Latvian-List/adblock-latvian"
+ },
+ "MKD-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇲🇰mk: Macedonian adBlock Filters",
+ "tags": "ads macedonian",
+ "lang": "mk",
+ "contentURL": "https://raw.githubusercontent.com/DeepSpaceHarbor/Macedonian-adBlock-Filters/master/Filters",
+ "supportURL": "https://github.com/DeepSpaceHarbor/Macedonian-adBlock-Filters"
+ },
+ "NLD-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇳🇱nl 🇧🇪be: EasyDutch",
+ "tags": "ads afrikaans be belgië frisian dutch flemish nederlands netherlands nl sr suriname za",
+ "lang": "af fy nl",
+ "contentURL": "https://easydutch-ubo.github.io/EasyDutch/EasyDutch.txt",
+ "cdnURLs": [
+ "https://easydutch-ubo.github.io/EasyDutch/EasyDutch.all.txt",
+ "https://cdn.jsdelivr.net/gh/EasyDutch-uBO/EasyDutch@gh-pages/EasyDutch.all.txt",
+ "https://cdn.statically.io/gh/EasyDutch-uBO/EasyDutch/gh-pages/EasyDutch.all.txt"
+ ],
+ "supportURL": "https://github.com/EasyDutch-uBO/EasyDutch/"
+ },
+ "NOR-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇳🇴no 🇩🇰dk 🇮🇸is: Dandelion Sprouts nordiske filtre",
+ "tags": "ads norwegian danish icelandic",
+ "lang": "nb nn no da is",
+ "contentURL": [
+ "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianList.txt"
+ ],
+ "cdnURLs": [
+ "https://cdn.jsdelivr.net/gh/DandelionSprout/adfilt@master/NorwegianList.txt",
+ "https://cdn.statically.io/gl/DandelionSprout/adfilt/master/NorwegianList.txt"
+ ],
+ "supportURL": "https://github.com/DandelionSprout/adfilt"
+ },
+ "POL-0": {
+ "content": "filters",
+ "group": "regions",
+ "parent": "🇵🇱pl: Oficjalne Polskie Filtry",
+ "off": true,
+ "title": "🇵🇱pl: Oficjalne Polskie Filtry do uBlocka Origin",
+ "tags": "ads polish polski",
+ "lang": "szl pl",
+ "contentURL": "https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-adblock-filters/adblock.txt",
+ "supportURL": "https://github.com/MajkiIT/polish-ads-filter/issues",
+ "instructionURL": "https://github.com/MajkiIT/polish-ads-filter#polish-filters-for-adblock-ublock-origin--adguard"
+ },
+ "POL-2": {
+ "content": "filters",
+ "group": "regions",
+ "parent": "🇵🇱pl: Oficjalne Polskie Filtry",
+ "off": true,
+ "title": "🇵🇱pl: Oficjalne polskie filtry przeciwko alertom o Adblocku",
+ "tags": "ads polish polski",
+ "lang": "szl pl",
+ "contentURL": "https://raw.githubusercontent.com/olegwukr/polish-privacy-filters/master/anti-adblock.txt",
+ "supportURL": "https://github.com/olegwukr/polish-privacy-filters/issues"
+ },
+ "ROU-1": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇷🇴ro 🇲🇩md: Romanian Ad (ROad) Block List Light",
+ "tags": "ads romanian română moldavian moldovenească молдовеняскэ",
+ "lang": "ro",
+ "contentURL": [
+ "https://raw.githubusercontent.com/tcptomato/ROad-Block/master/road-block-filters-light.txt"
+ ],
+ "supportURL": "https://github.com/tcptomato/ROad-Block"
+ },
+ "RUS-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList",
+ "tags": "ads belarusian беларуская kazakh tatar russian русский ukrainian українська uzbek",
+ "lang": "be kk tt ru uk uz",
+ "contentURL": "https://raw.githubusercontent.com/easylist/ruadlist/master/RuAdList-uBO.txt",
+ "cdnURLs": [
+ "https://cdn.jsdelivr.net/gh/dimisa-RUAdList/RUAdListCDN@main/lists/ruadlist.ubo.min.txt",
+ "https://cdn.statically.io/gh/dimisa-RUAdList/RUAdListCDN/main/lists/ruadlist.ubo.min.txt",
+ "https://raw.githubusercontent.com/dimisa-RUAdList/RUAdListCDN/main/lists/ruadlist.ubo.min.txt"
+ ],
+ "supportURL": "https://forums.lanik.us/viewforum.php?f=102",
+ "instructionURL": "https://forums.lanik.us/viewtopic.php?f=102&t=22512"
+ },
+ "spa-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇪🇸es 🇦🇷ar 🇲🇽mx 🇨🇴co: EasyList Spanish",
+ "tags": "ads aragonese basque catalan spanish español galician guarani",
+ "lang": "an ast ca cak es eu gl gn trs quz",
+ "contentURL": "https://easylist-downloads.adblockplus.org/easylistspanish.txt",
+ "supportURL": "https://forums.lanik.us/viewforum.php?f=103"
+ },
+ "spa-1": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇪🇸es 🇦🇷ar 🇧🇷br 🇵🇹pt: AdGuard Spanish/Portuguese",
+ "tags": "ads aragonese basque catalan spanish español galician guarani portuguese português",
+ "lang": "an ast ca cak es eu gl gn trs pt quz",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/9.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "SVN-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇸🇮si: Slovenian List",
+ "tags": "ads slovenian slovenski",
+ "lang": "sl",
+ "contentURL": "https://raw.githubusercontent.com/betterwebleon/slovenian-list/master/filters.txt",
+ "supportURL": "https://github.com/betterwebleon/slovenian-list"
+ },
+ "SWE-1": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇸🇪se: Frellwit's Swedish Filter",
+ "tags": "ads swedish svenska",
+ "lang": "sv",
+ "contentURL": "https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/master/Frellwits-Swedish-Filter.txt",
+ "supportURL": "https://github.com/lassekongo83/Frellwits-filter-lists"
+ },
+ "THA-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇹🇭th: EasyList Thailand",
+ "tags": "ads thai ไทย",
+ "lang": "th",
+ "contentURL": "https://raw.githubusercontent.com/easylist-thailand/easylist-thailand/master/subscription/easylist-thailand.txt",
+ "supportURL": "https://github.com/easylist-thailand/easylist-thailand"
+ },
+ "TUR-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇹🇷tr: AdGuard Turkish",
+ "tags": "ads turkish türkçe",
+ "lang": "tr",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/13.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "VIE-1": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇻🇳vn: ABPVN List",
+ "tags": "ads vietnamese việt",
+ "lang": "vi",
+ "contentURL": "https://raw.githubusercontent.com/abpvn/abpvn/master/filter/abpvn_ublock.txt",
+ "supportURL": "https://abpvn.com/"
+ }
+}
diff --git a/assets/assets.json b/assets/assets.json
new file mode 100644
index 0000000..7773314
--- /dev/null
+++ b/assets/assets.json
@@ -0,0 +1,903 @@
+{
+ "assets.json": {
+ "content": "internal",
+ "updateAfter": 13,
+ "contentURL": [
+ "https://raw.githubusercontent.com/gorhill/uBlock/master/assets/assets.json",
+ "assets/assets.json"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/ublock/assets.json",
+ "https://ublockorigin.pages.dev/ublock/assets.json",
+ "https://cdn.jsdelivr.net/gh/gorhill/uBlock@master/assets/assets.json",
+ "https://cdn.statically.io/gh/gorhill/uBlock/master/assets/assets.json"
+ ]
+ },
+ "public_suffix_list.dat": {
+ "content": "internal",
+ "updateAfter": 19,
+ "contentURL": [
+ "https://publicsuffix.org/list/public_suffix_list.dat",
+ "assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat"
+ ]
+ },
+ "ublock-badlists": {
+ "content": "internal",
+ "updateAfter": 29,
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/filters/badlists.txt",
+ "assets/ublock/badlists.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/badlists.txt",
+ "https://ublockorigin.pages.dev/filters/badlists.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/badlists.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/badlists.txt"
+ ]
+ },
+ "ublock-filters": {
+ "content": "filters",
+ "group": "default",
+ "parent": "uBlock filters",
+ "title": "uBlock filters – Ads",
+ "tags": "ads",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/filters/filters.txt",
+ "assets/ublock/filters.min.txt",
+ "assets/ublock/filters.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/filters.min.txt",
+ "https://ublockorigin.pages.dev/filters/filters.min.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/filters.min.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/filters.min.txt"
+ ],
+ "supportURL": "https://github.com/uBlockOrigin/uAssets"
+ },
+ "ublock-badware": {
+ "content": "filters",
+ "group": "default",
+ "parent": "uBlock filters",
+ "title": "uBlock filters – Badware risks",
+ "tags": "malware security",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/filters/badware.txt",
+ "assets/ublock/badware.min.txt",
+ "assets/ublock/badware.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/badware.min.txt",
+ "https://ublockorigin.pages.dev/filters/badware.min.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/badware.min.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/badware.min.txt"
+ ],
+ "supportURL": "https://github.com/uBlockOrigin/uAssets",
+ "instructionURL": "https://github.com/gorhill/uBlock/wiki/Badware-risks"
+ },
+ "ublock-privacy": {
+ "content": "filters",
+ "group": "default",
+ "parent": "uBlock filters",
+ "title": "uBlock filters – Privacy",
+ "tags": "privacy",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/filters/privacy.txt",
+ "assets/ublock/privacy.min.txt",
+ "assets/ublock/privacy.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/privacy.min.txt",
+ "https://ublockorigin.pages.dev/filters/privacy.min.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/privacy.min.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/privacy.min.txt"
+ ],
+ "supportURL": "https://github.com/uBlockOrigin/uAssets"
+ },
+ "ublock-unbreak": {
+ "content": "filters",
+ "group": "default",
+ "parent": "uBlock filters",
+ "title": "uBlock filters – Unbreak",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/filters/unbreak.txt",
+ "assets/ublock/unbreak.min.txt",
+ "assets/ublock/unbreak.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/unbreak.min.txt",
+ "https://ublockorigin.pages.dev/filters/unbreak.min.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/unbreak.min.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/unbreak.min.txt"
+ ],
+ "supportURL": "https://github.com/uBlockOrigin/uAssets"
+ },
+ "ublock-quick-fixes": {
+ "content": "filters",
+ "group": "default",
+ "parent": "uBlock filters",
+ "title": "uBlock filters – Quick fixes",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/filters/quick-fixes.txt",
+ "assets/ublock/quick-fixes.min.txt",
+ "assets/ublock/quick-fixes.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/quick-fixes.min.txt",
+ "https://ublockorigin.pages.dev/filters/quick-fixes.min.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/quick-fixes.min.txt"
+ ],
+ "supportURL": "https://github.com/uBlockOrigin/uAssets"
+ },
+ "adguard-generic": {
+ "content": "filters",
+ "group": "ads",
+ "off": true,
+ "title": "AdGuard – Ads",
+ "tags": "ads",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/2_without_easylist.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "adguard-mobile": {
+ "content": "filters",
+ "group": "ads",
+ "off": true,
+ "title": "AdGuard – Mobile Ads",
+ "tags": "ads mobile",
+ "ua": "mobile",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/11.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "easylist": {
+ "content": "filters",
+ "group": "ads",
+ "title": "EasyList",
+ "tags": "ads",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/thirdparties/easylist.txt",
+ "assets/thirdparties/easylist/easylist.txt",
+ "assets/thirdparties/easylist-downloads.adblockplus.org/easylist.txt"
+ ],
+ "cdnURLs": [
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist.txt",
+ "https://ublockorigin.pages.dev/thirdparties/easylist.txt",
+ "https://easylist.to/easylist/easylist.txt"
+ ],
+ "supportURL": "https://easylist.to/"
+ },
+ "adguard-spyware-url": {
+ "content": "filters",
+ "group": "privacy",
+ "off": true,
+ "title": "AdGuard URL Tracking Protection",
+ "tags": "privacy",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/17.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "adguard-spyware": {
+ "content": "filters",
+ "group": "privacy",
+ "off": true,
+ "title": "AdGuard Tracking Protection",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/3.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "block-lan": {
+ "content": "filters",
+ "group": "privacy",
+ "off": true,
+ "title": "Block Outsider Intrusion into LAN",
+ "tags": "privacy security",
+ "contentURL": "https://ublockorigin.github.io/uAssets/filters/lan-block.txt",
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/lan-block.txt",
+ "https://ublockorigin.pages.dev/filters/lan-block.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/lan-block.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/lan-block.txt"
+ ],
+ "supportURL": "https://github.com/uBlockOrigin/uAssets"
+ },
+ "easyprivacy": {
+ "content": "filters",
+ "group": "privacy",
+ "title": "EasyPrivacy",
+ "tags": "privacy",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/thirdparties/easyprivacy.txt",
+ "assets/thirdparties/easylist/easyprivacy.txt",
+ "assets/thirdparties/easylist-downloads.adblockplus.org/easyprivacy.txt"
+ ],
+ "cdnURLs": [
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easyprivacy.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easyprivacy.txt",
+ "https://ublockorigin.pages.dev/thirdparties/easyprivacy.txt",
+ "https://easylist.to/easylist/easyprivacy.txt"
+ ],
+ "supportURL": "https://easylist.to/"
+ },
+ "urlhaus-1": {
+ "content": "filters",
+ "group": "malware",
+ "title": "Online Malicious URL Blocklist",
+ "contentURL": [
+ "https://malware-filter.gitlab.io/urlhaus-filter/urlhaus-filter-ag-online.txt",
+ "assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt"
+ ],
+ "cdnURLs": [
+ "https://curbengh.github.io/malware-filter/urlhaus-filter-ag-online.txt",
+ "https://malware-filter.gitlab.io/urlhaus-filter/urlhaus-filter-ag-online.txt",
+ "https://malware-filter.pages.dev/urlhaus-filter-ag-online.txt"
+ ],
+ "supportURL": "https://gitlab.com/malware-filter/urlhaus-filter#malicious-url-blocklist"
+ },
+ "curben-phishing": {
+ "content": "filters",
+ "group": "malware",
+ "off": true,
+ "title": "Phishing URL Blocklist",
+ "contentURL": "https://malware-filter.gitlab.io/phishing-filter/phishing-filter.txt",
+ "cdnURLs": [
+ "https://curbengh.github.io/phishing-filter/phishing-filter.txt",
+ "https://malware-filter.gitlab.io/phishing-filter/phishing-filter.txt",
+ "https://phishing-filter.pages.dev/phishing-filter.txt"
+ ],
+ "supportURL": "https://gitlab.com/malware-filter/phishing-filter#phishing-url-blocklist"
+ },
+ "adguard-social": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "AdGuard – Annoyances",
+ "off": true,
+ "title": "AdGuard – Social Media",
+ "tags": "annoyances social",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/4.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "adguard-cookies": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "AdGuard – Annoyances|AdGuard/uBO – Cookie Notices",
+ "off": true,
+ "title": "AdGuard – Cookie Notices",
+ "tags": "annoyances cookies",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/18.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "ublock-cookies-adguard": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "AdGuard – Annoyances|AdGuard/uBO – Cookie Notices",
+ "off": true,
+ "title": "uBlock filters – Cookie Notices",
+ "tags": "annoyances cookies",
+ "contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances-cookies.txt",
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances-cookies.txt",
+ "https://ublockorigin.pages.dev/filters/annoyances-cookies.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances-cookies.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances-cookies.txt"
+ ],
+ "supportURL": "https://github.com/uBlockOrigin/uAssets"
+ },
+ "adguard-popup-overlays": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "AdGuard – Annoyances",
+ "off": true,
+ "title": "AdGuard – Popup Overlays",
+ "tags": "annoyances",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/19.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "adguard-mobile-app-banners": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "AdGuard – Annoyances",
+ "off": true,
+ "title": "AdGuard – Mobile App Banners",
+ "tags": "annoyances mobile",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/20.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "adguard-other-annoyances": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "AdGuard – Annoyances",
+ "off": true,
+ "title": "AdGuard – Other Annoyances",
+ "tags": "annoyances",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/21.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "adguard-widgets": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "AdGuard – Annoyances",
+ "off": true,
+ "title": "AdGuard – Widgets",
+ "tags": "annoyances",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/22.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "fanboy-thirdparty_social": {
+ "content": "filters",
+ "group": "annoyances",
+ "off": true,
+ "title": "Fanboy – Anti-Facebook",
+ "tags": "privacy",
+ "contentURL": "https://secure.fanboy.co.nz/fanboy-antifacebook.txt",
+ "supportURL": "https://github.com/ryanbr/fanboy-adblock/issues"
+ },
+ "easylist-annoyances": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "EasyList – Annoyances",
+ "off": true,
+ "title": "EasyList – Other Annoyances",
+ "tags": "annoyances",
+ "contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-annoyances.txt",
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-annoyances.txt",
+ "https://ublockorigin.pages.dev/thirdparties/easylist-annoyances.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-annoyances.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-annoyances.txt"
+ ],
+ "supportURL": "https://github.com/easylist/easylist#fanboy-lists"
+ },
+ "easylist-chat": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "EasyList – Annoyances",
+ "off": true,
+ "title": "EasyList – Chat Widgets",
+ "tags": "annoyances",
+ "contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-chat.txt",
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-chat.txt",
+ "https://ublockorigin.pages.dev/thirdparties/easylist-chat.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-chat.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-chat.txt"
+ ],
+ "supportURL": "https://github.com/easylist/easylist#fanboy-lists"
+ },
+ "fanboy-cookiemonster": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "EasyList – Annoyances|EasyList/uBO – Cookie Notices",
+ "off": true,
+ "title": "EasyList – Cookie Notices",
+ "tags": "annoyances cookies",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/thirdparties/easylist-cookies.txt",
+ "https://secure.fanboy.co.nz/fanboy-cookiemonster_ubo.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-cookies.txt",
+ "https://ublockorigin.pages.dev/thirdparties/easylist-cookies.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-cookies.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-cookies.txt",
+ "https://secure.fanboy.co.nz/fanboy-cookiemonster_ubo.txt"
+ ],
+ "supportURL": "https://github.com/easylist/easylist#fanboy-lists"
+ },
+ "ublock-cookies-easylist": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "EasyList – Annoyances|EasyList/uBO – Cookie Notices",
+ "off": true,
+ "title": "uBlock filters – Cookie Notices",
+ "tags": "annoyances cookies",
+ "contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances-cookies.txt",
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances-cookies.txt",
+ "https://ublockorigin.pages.dev/filters/annoyances-cookies.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances-cookies.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances-cookies.txt"
+ ],
+ "supportURL": "https://github.com/uBlockOrigin/uAssets"
+ },
+ "easylist-newsletters": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "EasyList – Annoyances",
+ "off": true,
+ "title": "EasyList – Newsletter Notices",
+ "tags": "annoyances",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/thirdparties/easylist-newsletters.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-newsletters.txt",
+ "https://ublockorigin.pages.dev/thirdparties/easylist-newsletters.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-newsletters.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-newsletters.txt"
+ ],
+ "supportURL": "https://easylist.to/"
+ },
+ "easylist-notifications": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "EasyList – Annoyances",
+ "off": true,
+ "title": "EasyList – Notifications",
+ "tags": "annoyances",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/thirdparties/easylist-notifications.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-notifications.txt",
+ "https://ublockorigin.pages.dev/thirdparties/easylist-notifications.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-notifications.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-notifications.txt"
+ ],
+ "supportURL": "https://easylist.to/"
+ },
+ "fanboy-social": {
+ "content": "filters",
+ "group": "annoyances",
+ "parent": "EasyList – Annoyances",
+ "off": true,
+ "title": "EasyList – Social Widgets",
+ "tags": "annoyances social",
+ "contentURL": [
+ "https://ublockorigin.github.io/uAssets/thirdparties/easylist-social.txt",
+ "https://secure.fanboy.co.nz/fanboy-social_ubo.txt"
+ ],
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-social.txt",
+ "https://ublockorigin.pages.dev/thirdparties/easylist-social.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-social.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-social.txt",
+ "https://secure.fanboy.co.nz/fanboy-social_ubo.txt"
+ ],
+ "supportURL": "https://easylist.to/"
+ },
+ "ublock-annoyances": {
+ "content": "filters",
+ "group": "annoyances",
+ "off": true,
+ "title": "uBlock filters – Annoyances",
+ "tags": "annoyances",
+ "contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances.txt",
+ "cdnURLs": [
+ "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances.min.txt",
+ "https://ublockorigin.pages.dev/filters/annoyances.min.txt",
+ "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances.min.txt",
+ "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances.min.txt"
+ ],
+ "supportURL": "https://github.com/uBlockOrigin/uAssets"
+ },
+ "dpollock-0": {
+ "content": "filters",
+ "group": "multipurpose",
+ "updateAfter": 13,
+ "off": true,
+ "title": "Dan Pollock’s hosts file",
+ "tags": "ads privacy security",
+ "contentURL": "https://someonewhocares.org/hosts/hosts",
+ "supportURL": "https://someonewhocares.org/hosts/"
+ },
+ "plowe-0": {
+ "content": "filters",
+ "group": "multipurpose",
+ "updateAfter": 13,
+ "title": "Peter Lowe’s Ad and tracking server list",
+ "tags": "ads privacy security",
+ "contentURL": [
+ "https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext",
+ "assets/thirdparties/pgl.yoyo.org/as/serverlist.txt",
+ "assets/thirdparties/pgl.yoyo.org/as/serverlist"
+ ],
+ "supportURL": "https://pgl.yoyo.org/adservers/"
+ },
+ "ALB-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇦🇱al 🇽🇰xk: Adblock List for Albania",
+ "tags": "ads albania shqipja",
+ "lang": "sq",
+ "contentURL": "https://raw.githubusercontent.com/AnXh3L0/blocklist/master/albanian-easylist-addition/Albania.txt",
+ "supportURL": "https://github.com/AnXh3L0/blocklist"
+ },
+ "ara-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇪🇬eg 🇸🇦sa 🇲🇦ma 🇩🇿dz: Liste AR",
+ "tags": "ads arabic اَلْعَرَبِيَّةُ‎",
+ "lang": "ar",
+ "contentURL": "https://easylist-downloads.adblockplus.org/Liste_AR.txt",
+ "supportURL": "https://forums.lanik.us/viewforum.php?f=98"
+ },
+ "BGR-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇧🇬bg: Bulgarian Adblock list",
+ "tags": "ads bulgarian България macedonian Македонија",
+ "lang": "bg mk",
+ "contentURL": "https://stanev.org/abp/adblock_bg.txt",
+ "supportURL": "https://stanev.org/abp/"
+ },
+ "CHN-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇨🇳cn 🇹🇼tw: AdGuard Chinese (中文)",
+ "tags": "ads chinese 中文",
+ "lang": "ug zh",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/224.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
+ },
+ "CZE-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇨🇿cz 🇸🇰sk: EasyList Czech and Slovak",
+ "tags": "ads czech česká slovak slovenská",
+ "lang": "cs sk",
+ "contentURL": "https://raw.githubusercontent.com/tomasko126/easylistczechandslovak/master/filters.txt",
+ "supportURL": "https://github.com/tomasko126/easylistczechandslovak"
+ },
+ "DEU-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇩🇪de 🇨🇭ch 🇦🇹at: EasyList Germany",
+ "tags": "ads german deutschland luxembourgish lëtzebuerg romansh",
+ "lang": "de dsb hsb lb rm",
+ "contentURL": [
+ "https://easylist.to/easylistgermany/easylistgermany.txt",
+ "https://easylist-downloads.adblockplus.org/easylistgermany.txt"
+ ],
+ "supportURL": "https://forums.lanik.us/viewforum.php?f=90"
+ },
+ "EST-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇪🇪ee: Eesti saitidele kohandatud filter",
+ "tags": "ads estonian",
+ "lang": "et",
+ "contentURL": "https://adblock.ee/list.php",
+ "supportURL": "https://adblock.ee/"
+ },
+ "FIN-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇫🇮fi: Adblock List for Finland",
+ "tags": "ads finnish",
+ "lang": "fi",
+ "contentURL": "https://raw.githubusercontent.com/finnish-easylist-addition/finnish-easylist-addition/gh-pages/Finland_adb.txt",
+ "supportURL": "https://github.com/finnish-easylist-addition/finnish-easylist-addition"
+ },
+ "FRA-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇫🇷fr 🇨🇦ca: AdGuard Français",
+ "tags": "ads french",
+ "lang": "ar br ff fr lb oc son",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/16.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters"
+ },
+ "GRC-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇬🇷gr 🇨🇾cy: Greek AdBlock Filter",
+ "tags": "ads greek",
+ "lang": "el",
+ "contentURL": "https://www.void.gr/kargig/void-gr-filters.txt",
+ "supportURL": "https://github.com/kargig/greek-adblockplus-filter"
+ },
+ "HRV-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇭🇷hr 🇷🇸rs: Dandelion Sprout's Serbo-Croatian filters",
+ "tags": "ads croatian serbian",
+ "lang": "hr sr",
+ "contentURL": "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/SerboCroatianList.txt",
+ "supportURL": "https://github.com/DandelionSprout/adfilt#readme"
+ },
+ "HUN-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇭🇺hu: hufilter",
+ "tags": "ads hungarian",
+ "lang": "hu",
+ "contentURL": "https://raw.githubusercontent.com/hufilter/hufilter/master/hufilter-ublock.txt",
+ "supportURL": "https://github.com/hufilter/hufilter"
+ },
+ "IDN-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇮🇩id 🇲🇾my: ABPindo",
+ "tags": "ads indonesian malay",
+ "lang": "id ms",
+ "contentURL": "https://raw.githubusercontent.com/ABPindo/indonesianadblockrules/master/subscriptions/abpindo.txt",
+ "supportURL": "https://github.com/ABPindo/indonesianadblockrules"
+ },
+ "IND-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇮🇳in 🇱🇰lk 🇳🇵np: IndianList",
+ "tags": "ads assamese bengali gujarati hindi kannada malayalam marathi nepali punjabi sinhala tamil telugu",
+ "lang": "as bn gu hi kn ml mr ne pa si ta te",
+ "contentURL": "https://easylist-downloads.adblockplus.org/indianlist.txt",
+ "supportURL": "https://github.com/mediumkreation/IndianList"
+ },
+ "IRN-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇮🇷ir: PersianBlocker",
+ "tags": "ads af ir persian pashto tajik tj",
+ "lang": "fa ps tg",
+ "contentURL": [
+ "https://raw.githubusercontent.com/MasterKia/PersianBlocker/main/PersianBlocker.txt",
+ "https://cdn.statically.io/gh/MasterKia/PersianBlocker/main/PersianBlocker.txt",
+ "https://raw.githubusercontent.com/MasterKia/PersianBlocker/main/PersianBlocker.txt"
+ ],
+ "cdnURLs": [
+ "https://cdn.jsdelivr.net/gh/MasterKia/PersianBlocker@main/PersianBlocker.txt",
+ "https://cdn.statically.io/gh/MasterKia/PersianBlocker/main/PersianBlocker.txt"
+ ],
+ "supportURL": "https://github.com/MasterKia/PersianBlocker"
+ },
+ "ISL-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇮🇸is: Icelandic ABP List",
+ "tags": "ads icelandic",
+ "lang": "is",
+ "contentURL": "https://adblock.gardar.net/is.abp.txt",
+ "supportURL": "https://adblock.gardar.net/"
+ },
+ "ISR-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇮🇱il: EasyList Hebrew",
+ "tags": "ads hebrew",
+ "lang": "he",
+ "contentURL": "https://raw.githubusercontent.com/easylist/EasyListHebrew/master/EasyListHebrew.txt",
+ "supportURL": "https://github.com/easylist/EasyListHebrew"
+ },
+ "ITA-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇮🇹it: EasyList Italy",
+ "tags": "ads italian",
+ "lang": "it lij",
+ "contentURL": "https://easylist-downloads.adblockplus.org/easylistitaly.txt",
+ "supportURL": "https://forums.lanik.us/viewforum.php?f=96"
+ },
+ "JPN-1": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇯🇵jp: AdGuard Japanese",
+ "tags": "ads japanese 日本語",
+ "lang": "ja",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/7.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "KOR-1": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇰🇷kr: List-KR",
+ "tags": "ads korean 한국어",
+ "lang": "ko",
+ "contentURL": "https://cdn.jsdelivr.net/gh/List-KR/List-KR@latest/filter-uBlockOrigin.txt",
+ "supportURL": "https://github.com/List-KR/List-KR#readme"
+ },
+ "LTU-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇱🇹lt: EasyList Lithuania",
+ "tags": "ads lithuanian",
+ "lang": "lt",
+ "contentURL": "https://raw.githubusercontent.com/EasyList-Lithuania/easylist_lithuania/master/easylistlithuania.txt",
+ "cdnURLs": [
+ "https://cdn.jsdelivr.net/gh/EasyList-Lithuania/easylist_lithuania@master/easylistlithuania.txt",
+ "https://cdn.statically.io/gh/EasyList-Lithuania/easylist_lithuania/master/easylistlithuania.txt"
+ ],
+ "supportURL": "https://github.com/EasyList-Lithuania/easylist_lithuania"
+ },
+ "LVA-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇱🇻lv: Latvian List",
+ "tags": "ads latvian",
+ "lang": "lv",
+ "contentURL": "https://raw.githubusercontent.com/Latvian-List/adblock-latvian/master/lists/latvian-list.txt",
+ "supportURL": "https://github.com/Latvian-List/adblock-latvian"
+ },
+ "MKD-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇲🇰mk: Macedonian adBlock Filters",
+ "tags": "ads macedonian",
+ "lang": "mk",
+ "contentURL": "https://raw.githubusercontent.com/DeepSpaceHarbor/Macedonian-adBlock-Filters/master/Filters",
+ "supportURL": "https://github.com/DeepSpaceHarbor/Macedonian-adBlock-Filters"
+ },
+ "NLD-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇳🇱nl 🇧🇪be: EasyDutch",
+ "tags": "ads afrikaans be belgië frisian dutch flemish nederlands netherlands nl sr suriname za",
+ "lang": "af fy nl",
+ "contentURL": "https://easydutch-ubo.github.io/EasyDutch/EasyDutch.txt",
+ "cdnURLs": [
+ "https://easydutch-ubo.github.io/EasyDutch/EasyDutch.all.txt",
+ "https://cdn.jsdelivr.net/gh/EasyDutch-uBO/EasyDutch@gh-pages/EasyDutch.all.txt",
+ "https://cdn.statically.io/gh/EasyDutch-uBO/EasyDutch/gh-pages/EasyDutch.all.txt"
+ ],
+ "supportURL": "https://github.com/EasyDutch-uBO/EasyDutch/"
+ },
+ "NOR-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇳🇴no 🇩🇰dk 🇮🇸is: Dandelion Sprouts nordiske filtre",
+ "tags": "ads norwegian danish icelandic",
+ "lang": "nb nn no da is",
+ "contentURL": [
+ "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianList.txt"
+ ],
+ "cdnURLs": [
+ "https://cdn.jsdelivr.net/gh/DandelionSprout/adfilt@master/NorwegianList.txt",
+ "https://cdn.statically.io/gl/DandelionSprout/adfilt/master/NorwegianList.txt"
+ ],
+ "supportURL": "https://github.com/DandelionSprout/adfilt"
+ },
+ "POL-0": {
+ "content": "filters",
+ "group": "regions",
+ "parent": "🇵🇱pl: Oficjalne Polskie Filtry",
+ "off": true,
+ "title": "🇵🇱pl: Oficjalne Polskie Filtry do uBlocka Origin",
+ "tags": "ads polish polski",
+ "lang": "szl pl",
+ "contentURL": "https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-adblock-filters/adblock.txt",
+ "supportURL": "https://github.com/MajkiIT/polish-ads-filter/issues",
+ "instructionURL": "https://github.com/MajkiIT/polish-ads-filter#polish-filters-for-adblock-ublock-origin--adguard"
+ },
+ "POL-2": {
+ "content": "filters",
+ "group": "regions",
+ "parent": "🇵🇱pl: Oficjalne Polskie Filtry",
+ "off": true,
+ "title": "🇵🇱pl: Oficjalne polskie filtry przeciwko alertom o Adblocku",
+ "tags": "ads polish polski",
+ "lang": "szl pl",
+ "contentURL": "https://raw.githubusercontent.com/olegwukr/polish-privacy-filters/master/anti-adblock.txt",
+ "supportURL": "https://github.com/olegwukr/polish-privacy-filters/issues"
+ },
+ "ROU-1": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇷🇴ro 🇲🇩md: Romanian Ad (ROad) Block List Light",
+ "tags": "ads romanian română moldavian moldovenească молдовеняскэ",
+ "lang": "ro",
+ "contentURL": [
+ "https://raw.githubusercontent.com/tcptomato/ROad-Block/master/road-block-filters-light.txt"
+ ],
+ "supportURL": "https://github.com/tcptomato/ROad-Block"
+ },
+ "RUS-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList",
+ "tags": "ads belarusian беларуская kazakh tatar russian русский ukrainian українська uzbek",
+ "lang": "be kk tt ru uk uz",
+ "contentURL": "https://raw.githubusercontent.com/easylist/ruadlist/master/RuAdList-uBO.txt",
+ "cdnURLs": [
+ "https://cdn.jsdelivr.net/gh/dimisa-RUAdList/RUAdListCDN@main/lists/ruadlist.ubo.min.txt",
+ "https://cdn.statically.io/gh/dimisa-RUAdList/RUAdListCDN/main/lists/ruadlist.ubo.min.txt",
+ "https://raw.githubusercontent.com/dimisa-RUAdList/RUAdListCDN/main/lists/ruadlist.ubo.min.txt"
+ ],
+ "supportURL": "https://forums.lanik.us/viewforum.php?f=102",
+ "instructionURL": "https://forums.lanik.us/viewtopic.php?f=102&t=22512"
+ },
+ "spa-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇪🇸es 🇦🇷ar 🇲🇽mx 🇨🇴co: EasyList Spanish",
+ "tags": "ads aragonese basque catalan spanish español galician guarani",
+ "lang": "an ast ca cak es eu gl gn trs quz",
+ "contentURL": "https://easylist-downloads.adblockplus.org/easylistspanish.txt",
+ "supportURL": "https://forums.lanik.us/viewforum.php?f=103"
+ },
+ "spa-1": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇪🇸es 🇦🇷ar 🇧🇷br 🇵🇹pt: AdGuard Spanish/Portuguese",
+ "tags": "ads aragonese basque catalan spanish español galician guarani portuguese português",
+ "lang": "an ast ca cak es eu gl gn trs pt quz",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/9.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "SVN-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇸🇮si: Slovenian List",
+ "tags": "ads slovenian slovenski",
+ "lang": "sl",
+ "contentURL": "https://raw.githubusercontent.com/betterwebleon/slovenian-list/master/filters.txt",
+ "supportURL": "https://github.com/betterwebleon/slovenian-list"
+ },
+ "SWE-1": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇸🇪se: Frellwit's Swedish Filter",
+ "tags": "ads swedish svenska",
+ "lang": "sv",
+ "contentURL": "https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/master/Frellwits-Swedish-Filter.txt",
+ "supportURL": "https://github.com/lassekongo83/Frellwits-filter-lists"
+ },
+ "THA-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇹🇭th: EasyList Thailand",
+ "tags": "ads thai ไทย",
+ "lang": "th",
+ "contentURL": "https://raw.githubusercontent.com/easylist-thailand/easylist-thailand/master/subscription/easylist-thailand.txt",
+ "supportURL": "https://github.com/easylist-thailand/easylist-thailand"
+ },
+ "TUR-0": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇹🇷tr: AdGuard Turkish",
+ "tags": "ads turkish türkçe",
+ "lang": "tr",
+ "contentURL": "https://filters.adtidy.org/extension/ublock/filters/13.txt",
+ "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters",
+ "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters"
+ },
+ "VIE-1": {
+ "content": "filters",
+ "group": "regions",
+ "off": true,
+ "title": "🇻🇳vn: ABPVN List",
+ "tags": "ads vietnamese việt",
+ "lang": "vi",
+ "contentURL": "https://raw.githubusercontent.com/abpvn/abpvn/master/filter/abpvn_ublock.txt",
+ "supportURL": "https://abpvn.com/"
+ }
+}
diff --git a/assets/resources/scriptlets.js b/assets/resources/scriptlets.js
new file mode 100644
index 0000000..6e2654f
--- /dev/null
+++ b/assets/resources/scriptlets.js
@@ -0,0 +1,4376 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+
+ The scriptlets below are meant to be injected only into a
+ web page context.
+*/
+
+// Externally added to the private namespace in which scriptlets execute.
+/* global scriptletGlobals */
+
+'use strict';
+
+export const builtinScriptlets = [];
+
+/*******************************************************************************
+
+ Helper functions
+
+ These are meant to be used as dependencies to injectable scriptlets.
+
+*******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'safe-self.fn',
+ fn: safeSelf,
+});
+function safeSelf() {
+ if ( scriptletGlobals.has('safeSelf') ) {
+ return scriptletGlobals.get('safeSelf');
+ }
+ const self = globalThis;
+ const safe = {
+ 'Array_from': Array.from,
+ 'Error': self.Error,
+ 'Function_toStringFn': self.Function.prototype.toString,
+ 'Function_toString': thisArg => safe.Function_toStringFn.call(thisArg),
+ 'Math_floor': Math.floor,
+ 'Math_max': Math.max,
+ 'Math_min': Math.min,
+ 'Math_random': Math.random,
+ 'Object_defineProperty': Object.defineProperty.bind(Object),
+ 'RegExp': self.RegExp,
+ 'RegExp_test': self.RegExp.prototype.test,
+ 'RegExp_exec': self.RegExp.prototype.exec,
+ 'Request_clone': self.Request.prototype.clone,
+ 'XMLHttpRequest': self.XMLHttpRequest,
+ 'addEventListener': self.EventTarget.prototype.addEventListener,
+ 'removeEventListener': self.EventTarget.prototype.removeEventListener,
+ 'fetch': self.fetch,
+ 'JSON': self.JSON,
+ 'JSON_parseFn': self.JSON.parse,
+ 'JSON_stringifyFn': self.JSON.stringify,
+ 'JSON_parse': (...args) => safe.JSON_parseFn.call(safe.JSON, ...args),
+ 'JSON_stringify': (...args) => safe.JSON_stringifyFn.call(safe.JSON, ...args),
+ 'log': console.log.bind(console),
+ uboLog(...args) {
+ if ( scriptletGlobals.has('canDebug') === false ) { return; }
+ if ( args.length === 0 ) { return; }
+ if ( `${args[0]}` === '' ) { return; }
+ this.log('[uBO]', ...args);
+ },
+ initPattern(pattern, options = {}) {
+ if ( pattern === '' ) {
+ return { matchAll: true };
+ }
+ const expect = (options.canNegate !== true || pattern.startsWith('!') === false);
+ if ( expect === false ) {
+ pattern = pattern.slice(1);
+ }
+ const match = /^\/(.+)\/([gimsu]*)$/.exec(pattern);
+ if ( match !== null ) {
+ return {
+ re: new this.RegExp(
+ match[1],
+ match[2] || options.flags
+ ),
+ expect,
+ };
+ }
+ if ( options.flags !== undefined ) {
+ return {
+ re: new this.RegExp(pattern.replace(
+ /[.*+?^${}()|[\]\\]/g, '\\$&'),
+ options.flags
+ ),
+ expect,
+ };
+ }
+ return { pattern, expect };
+ },
+ testPattern(details, haystack) {
+ if ( details.matchAll ) { return true; }
+ if ( details.re ) {
+ return this.RegExp_test.call(details.re, haystack) === details.expect;
+ }
+ return haystack.includes(details.pattern) === details.expect;
+ },
+ patternToRegex(pattern, flags = undefined, verbatim = false) {
+ if ( pattern === '' ) { return /^/; }
+ const match = /^\/(.+)\/([gimsu]*)$/.exec(pattern);
+ if ( match === null ) {
+ const reStr = pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
+ return new RegExp(verbatim ? `^${reStr}$` : reStr, flags);
+ }
+ try {
+ return new RegExp(match[1], match[2] || undefined);
+ }
+ catch(ex) {
+ }
+ return /^/;
+ },
+ getExtraArgs(args, offset = 0) {
+ const entries = args.slice(offset).reduce((out, v, i, a) => {
+ if ( (i & 1) === 0 ) {
+ const rawValue = a[i+1];
+ const value = /^\d+$/.test(rawValue)
+ ? parseInt(rawValue, 10)
+ : rawValue;
+ out.push([ a[i], value ]);
+ }
+ return out;
+ }, []);
+ return Object.fromEntries(entries);
+ },
+ };
+ scriptletGlobals.set('safeSelf', safe);
+ return safe;
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'get-exception-token.fn',
+ fn: getExceptionToken,
+ dependencies: [
+ 'safe-self.fn',
+ ],
+});
+function getExceptionToken() {
+ const safe = safeSelf();
+ const token =
+ String.fromCharCode(Date.now() % 26 + 97) +
+ safe.Math_floor(safe.Math_random() * 982451653 + 982451653).toString(36);
+ const oe = self.onerror;
+ self.onerror = function(msg, ...args) {
+ if ( typeof msg === 'string' && msg.includes(token) ) { return true; }
+ if ( oe instanceof Function ) {
+ return oe.call(this, msg, ...args);
+ }
+ }.bind();
+ return token;
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'should-debug.fn',
+ fn: shouldDebug,
+});
+function shouldDebug(details) {
+ if ( details instanceof Object === false ) { return false; }
+ return scriptletGlobals.has('canDebug') && details.debug;
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'should-log.fn',
+ fn: shouldLog,
+});
+function shouldLog(details) {
+ if ( details instanceof Object === false ) { return false; }
+ return scriptletGlobals.has('canDebug') && details.log;
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'run-at.fn',
+ fn: runAt,
+ dependencies: [
+ 'safe-self.fn',
+ ],
+});
+function runAt(fn, when) {
+ const intFromReadyState = state => {
+ const targets = {
+ 'loading': 1,
+ 'interactive': 2, 'end': 2, '2': 2,
+ 'complete': 3, 'idle': 3, '3': 3,
+ };
+ const tokens = Array.isArray(state) ? state : [ state ];
+ for ( const token of tokens ) {
+ const prop = `${token}`;
+ if ( targets.hasOwnProperty(prop) === false ) { continue; }
+ return targets[prop];
+ }
+ return 0;
+ };
+ const runAt = intFromReadyState(when);
+ if ( intFromReadyState(document.readyState) >= runAt ) {
+ fn(); return;
+ }
+ const onStateChange = ( ) => {
+ if ( intFromReadyState(document.readyState) < runAt ) { return; }
+ fn();
+ safe.removeEventListener.apply(document, args);
+ };
+ const safe = safeSelf();
+ const args = [ 'readystatechange', onStateChange, { capture: true } ];
+ safe.addEventListener.apply(document, args);
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'run-at-html-element.fn',
+ fn: runAtHtmlElementFn,
+});
+function runAtHtmlElementFn(fn) {
+ if ( document.documentElement ) {
+ fn();
+ return;
+ }
+ const observer = new MutationObserver(( ) => {
+ observer.disconnect();
+ fn();
+ });
+ observer.observe(document, { childList: true });
+}
+
+/******************************************************************************/
+
+// Reference:
+// https://github.com/AdguardTeam/Scriptlets/blob/master/wiki/about-scriptlets.md#prevent-xhr
+
+builtinScriptlets.push({
+ name: 'generate-content.fn',
+ fn: generateContentFn,
+ dependencies: [
+ 'safe-self.fn',
+ ],
+});
+function generateContentFn(directive) {
+ const safe = safeSelf();
+ const randomize = len => {
+ const chunks = [];
+ let textSize = 0;
+ do {
+ const s = safe.Math_random().toString(36).slice(2);
+ chunks.push(s);
+ textSize += s.length;
+ }
+ while ( textSize < len );
+ return chunks.join(' ').slice(0, len);
+ };
+ if ( directive === 'true' ) {
+ return Promise.resolve(randomize(10));
+ }
+ if ( directive === 'emptyObj' ) {
+ return Promise.resolve('{}');
+ }
+ if ( directive === 'emptyArr' ) {
+ return Promise.resolve('[]');
+ }
+ if ( directive === 'emptyStr' ) {
+ return Promise.resolve('');
+ }
+ if ( directive.startsWith('length:') ) {
+ const match = /^length:(\d+)(?:-(\d+))?$/.exec(directive);
+ if ( match ) {
+ const min = parseInt(match[1], 10);
+ const extent = safe.Math_max(parseInt(match[2], 10) || 0, min) - min;
+ const len = safe.Math_min(min + extent * safe.Math_random(), 500000);
+ return Promise.resolve(randomize(len | 0));
+ }
+ }
+ if ( directive.startsWith('war:') && scriptletGlobals.has('warOrigin') ) {
+ return new Promise(resolve => {
+ const warOrigin = scriptletGlobals.get('warOrigin');
+ const warName = directive.slice(4);
+ const fullpath = [ warOrigin, '/', warName ];
+ const warSecret = scriptletGlobals.get('warSecret');
+ if ( warSecret !== undefined ) {
+ fullpath.push('?secret=', warSecret);
+ }
+ const warXHR = new safe.XMLHttpRequest();
+ warXHR.responseType = 'text';
+ warXHR.onloadend = ev => {
+ resolve(ev.target.responseText || '');
+ };
+ warXHR.open('GET', fullpath.join(''));
+ warXHR.send();
+ });
+ }
+ return Promise.resolve('');
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'abort-current-script-core.fn',
+ fn: abortCurrentScriptCore,
+ dependencies: [
+ 'get-exception-token.fn',
+ 'safe-self.fn',
+ 'should-debug.fn',
+ 'should-log.fn',
+ ],
+});
+// Issues to mind before changing anything:
+// https://github.com/uBlockOrigin/uBlock-issues/issues/2154
+function abortCurrentScriptCore(
+ target = '',
+ needle = '',
+ context = ''
+) {
+ if ( typeof target !== 'string' ) { return; }
+ if ( target === '' ) { return; }
+ const safe = safeSelf();
+ const reNeedle = safe.patternToRegex(needle);
+ const reContext = safe.patternToRegex(context);
+ const extraArgs = safe.getExtraArgs(Array.from(arguments), 3);
+ const thisScript = document.currentScript;
+ const chain = target.split('.');
+ let owner = window;
+ let prop;
+ for (;;) {
+ prop = chain.shift();
+ if ( chain.length === 0 ) { break; }
+ if ( prop in owner === false ) { break; }
+ owner = owner[prop];
+ if ( owner instanceof Object === false ) { return; }
+ }
+ let value;
+ let desc = Object.getOwnPropertyDescriptor(owner, prop);
+ if (
+ desc instanceof Object === false ||
+ desc.get instanceof Function === false
+ ) {
+ value = owner[prop];
+ desc = undefined;
+ }
+ const log = shouldLog(extraArgs);
+ const debug = shouldDebug(extraArgs);
+ const exceptionToken = getExceptionToken();
+ const scriptTexts = new WeakMap();
+ const getScriptText = elem => {
+ let text = elem.textContent;
+ if ( text.trim() !== '' ) { return text; }
+ if ( scriptTexts.has(elem) ) { return scriptTexts.get(elem); }
+ const [ , mime, content ] =
+ /^data:([^,]*),(.+)$/.exec(elem.src.trim()) ||
+ [ '', '', '' ];
+ try {
+ switch ( true ) {
+ case mime.endsWith(';base64'):
+ text = self.atob(content);
+ break;
+ default:
+ text = self.decodeURIComponent(content);
+ break;
+ }
+ } catch(ex) {
+ }
+ scriptTexts.set(elem, text);
+ return text;
+ };
+ const validate = ( ) => {
+ const e = document.currentScript;
+ if ( e instanceof HTMLScriptElement === false ) { return; }
+ if ( e === thisScript ) { return; }
+ if ( context !== '' && reContext.test(e.src) === false ) {
+ if ( debug === 'nomatch' || debug === 'all' ) { debugger; } // jshint ignore: line
+ return;
+ }
+ if ( log && e.src !== '' ) { safe.uboLog(`matched src: ${e.src}`); }
+ const scriptText = getScriptText(e);
+ if ( reNeedle.test(scriptText) === false ) {
+ if ( debug === 'nomatch' || debug === 'all' ) { debugger; } // jshint ignore: line
+ return;
+ }
+ if ( log ) { safe.uboLog(`matched script text: ${scriptText}`); }
+ if ( debug === 'match' || debug === 'all' ) { debugger; } // jshint ignore: line
+ throw new ReferenceError(exceptionToken);
+ };
+ if ( debug === 'install' ) { debugger; } // jshint ignore: line
+ try {
+ Object.defineProperty(owner, prop, {
+ get: function() {
+ validate();
+ return desc instanceof Object
+ ? desc.get.call(owner)
+ : value;
+ },
+ set: function(a) {
+ validate();
+ if ( desc instanceof Object ) {
+ desc.set.call(owner, a);
+ } else {
+ value = a;
+ }
+ }
+ });
+ } catch(ex) {
+ if ( log ) { safe.uboLog(ex); }
+ }
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'set-constant-core.fn',
+ fn: setConstantCore,
+ dependencies: [
+ 'run-at.fn',
+ 'safe-self.fn',
+ ],
+});
+
+function setConstantCore(
+ trusted = false,
+ chain = '',
+ cValue = ''
+) {
+ if ( chain === '' ) { return; }
+ const safe = safeSelf();
+ const extraArgs = safe.getExtraArgs(Array.from(arguments), 3);
+ function setConstant(chain, cValue) {
+ const trappedProp = (( ) => {
+ const pos = chain.lastIndexOf('.');
+ if ( pos === -1 ) { return chain; }
+ return chain.slice(pos+1);
+ })();
+ if ( trappedProp === '' ) { return; }
+ const thisScript = document.currentScript;
+ const cloakFunc = fn => {
+ safe.Object_defineProperty(fn, 'name', { value: trappedProp });
+ const proxy = new Proxy(fn, {
+ defineProperty(target, prop) {
+ if ( prop !== 'toString' ) {
+ return Reflect.defineProperty(...arguments);
+ }
+ return true;
+ },
+ deleteProperty(target, prop) {
+ if ( prop !== 'toString' ) {
+ return Reflect.deleteProperty(...arguments);
+ }
+ return true;
+ },
+ get(target, prop) {
+ if ( prop === 'toString' ) {
+ return function() {
+ return `function ${trappedProp}() { [native code] }`;
+ }.bind(null);
+ }
+ return Reflect.get(...arguments);
+ },
+ });
+ return proxy;
+ };
+ if ( cValue === 'undefined' ) {
+ cValue = undefined;
+ } else if ( cValue === 'false' ) {
+ cValue = false;
+ } else if ( cValue === 'true' ) {
+ cValue = true;
+ } else if ( cValue === 'null' ) {
+ cValue = null;
+ } else if ( cValue === "''" || cValue === '' ) {
+ cValue = '';
+ } else if ( cValue === '[]' || cValue === 'emptyArr' ) {
+ cValue = [];
+ } else if ( cValue === '{}' || cValue === 'emptyObj' ) {
+ cValue = {};
+ } else if ( cValue === 'noopFunc' ) {
+ cValue = cloakFunc(function(){});
+ } else if ( cValue === 'trueFunc' ) {
+ cValue = cloakFunc(function(){ return true; });
+ } else if ( cValue === 'falseFunc' ) {
+ cValue = cloakFunc(function(){ return false; });
+ } else if ( /^-?\d+$/.test(cValue) ) {
+ cValue = parseInt(cValue);
+ if ( isNaN(cValue) ) { return; }
+ if ( Math.abs(cValue) > 0x7FFF ) { return; }
+ } else if ( trusted ) {
+ if ( cValue.startsWith('{') && cValue.endsWith('}') ) {
+ try { cValue = safe.JSON_parse(cValue).value; } catch(ex) { return; }
+ }
+ } else {
+ return;
+ }
+ if ( extraArgs.as !== undefined ) {
+ const value = cValue;
+ if ( extraArgs.as === 'function' ) {
+ cValue = ( ) => value;
+ } else if ( extraArgs.as === 'callback' ) {
+ cValue = ( ) => (( ) => value);
+ } else if ( extraArgs.as === 'resolved' ) {
+ cValue = Promise.resolve(value);
+ } else if ( extraArgs.as === 'rejected' ) {
+ cValue = Promise.reject(value);
+ }
+ }
+ let aborted = false;
+ const mustAbort = function(v) {
+ if ( trusted ) { return false; }
+ if ( aborted ) { return true; }
+ aborted =
+ (v !== undefined && v !== null) &&
+ (cValue !== undefined && cValue !== null) &&
+ (typeof v !== typeof cValue);
+ return aborted;
+ };
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/156
+ // Support multiple trappers for the same property.
+ const trapProp = function(owner, prop, configurable, handler) {
+ if ( handler.init(configurable ? owner[prop] : cValue) === false ) { return; }
+ const odesc = Object.getOwnPropertyDescriptor(owner, prop);
+ let prevGetter, prevSetter;
+ if ( odesc instanceof Object ) {
+ owner[prop] = cValue;
+ if ( odesc.get instanceof Function ) {
+ prevGetter = odesc.get;
+ }
+ if ( odesc.set instanceof Function ) {
+ prevSetter = odesc.set;
+ }
+ }
+ try {
+ safe.Object_defineProperty(owner, prop, {
+ configurable,
+ get() {
+ if ( prevGetter !== undefined ) {
+ prevGetter();
+ }
+ return handler.getter(); // cValue
+ },
+ set(a) {
+ if ( prevSetter !== undefined ) {
+ prevSetter(a);
+ }
+ handler.setter(a);
+ }
+ });
+ } catch(ex) {
+ }
+ };
+ const trapChain = function(owner, chain) {
+ const pos = chain.indexOf('.');
+ if ( pos === -1 ) {
+ trapProp(owner, chain, false, {
+ v: undefined,
+ init: function(v) {
+ if ( mustAbort(v) ) { return false; }
+ this.v = v;
+ return true;
+ },
+ getter: function() {
+ return document.currentScript === thisScript
+ ? this.v
+ : cValue;
+ },
+ setter: function(a) {
+ if ( mustAbort(a) === false ) { return; }
+ cValue = a;
+ }
+ });
+ return;
+ }
+ const prop = chain.slice(0, pos);
+ const v = owner[prop];
+ chain = chain.slice(pos + 1);
+ if ( v instanceof Object || typeof v === 'object' && v !== null ) {
+ trapChain(v, chain);
+ return;
+ }
+ trapProp(owner, prop, true, {
+ v: undefined,
+ init: function(v) {
+ this.v = v;
+ return true;
+ },
+ getter: function() {
+ return this.v;
+ },
+ setter: function(a) {
+ this.v = a;
+ if ( a instanceof Object ) {
+ trapChain(a, chain);
+ }
+ }
+ });
+ };
+ trapChain(window, chain);
+ }
+ runAt(( ) => {
+ setConstant(chain, cValue);
+ }, extraArgs.runAt);
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'replace-node-text.fn',
+ fn: replaceNodeTextFn,
+ dependencies: [
+ 'run-at.fn',
+ 'safe-self.fn',
+ ],
+});
+function replaceNodeTextFn(
+ nodeName = '',
+ pattern = '',
+ replacement = ''
+) {
+ const safe = safeSelf();
+ const reNodeName = safe.patternToRegex(nodeName, 'i', true);
+ const rePattern = safe.patternToRegex(pattern, 'gms');
+ const extraArgs = safe.getExtraArgs(Array.from(arguments), 3);
+ const shouldLog = scriptletGlobals.has('canDebug') && extraArgs.log || 0;
+ const reCondition = safe.patternToRegex(extraArgs.condition || '', 'ms');
+ const stop = (takeRecord = true) => {
+ if ( takeRecord ) {
+ handleMutations(observer.takeRecords());
+ }
+ observer.disconnect();
+ if ( shouldLog !== 0 ) {
+ safe.uboLog(`replace-node-text-core.fn: quitting "${pattern}" => "${replacement}"`);
+ }
+ };
+ let sedCount = extraArgs.sedCount || 0;
+ const handleNode = node => {
+ const before = node.textContent;
+ reCondition.lastIndex = 0;
+ if ( safe.RegExp_test.call(reCondition, before) === false ) { return true; }
+ rePattern.lastIndex = 0;
+ if ( safe.RegExp_test.call(rePattern, before) === false ) { return true; }
+ rePattern.lastIndex = 0;
+ const after = pattern !== ''
+ ? before.replace(rePattern, replacement)
+ : replacement;
+ node.textContent = after;
+ if ( shouldLog !== 0 ) {
+ safe.uboLog('replace-node-text.fn before:\n', before);
+ safe.uboLog('replace-node-text.fn after:\n', after);
+ }
+ return sedCount === 0 || (sedCount -= 1) !== 0;
+ };
+ const handleMutations = mutations => {
+ for ( const mutation of mutations ) {
+ for ( const node of mutation.addedNodes ) {
+ if ( reNodeName.test(node.nodeName) === false ) { continue; }
+ if ( handleNode(node) ) { continue; }
+ stop(false); return;
+ }
+ }
+ };
+ const observer = new MutationObserver(handleMutations);
+ observer.observe(document, { childList: true, subtree: true });
+ if ( document.documentElement ) {
+ const treeWalker = document.createTreeWalker(
+ document.documentElement,
+ NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT
+ );
+ let count = 0;
+ for (;;) {
+ const node = treeWalker.nextNode();
+ count += 1;
+ if ( node === null ) { break; }
+ if ( reNodeName.test(node.nodeName) === false ) { continue; }
+ if ( handleNode(node) ) { continue; }
+ stop(); break;
+ }
+ if ( shouldLog !== 0 ) {
+ safe.uboLog(`replace-node-text-core.fn ${count} nodes present before installing mutation observer`);
+ }
+ }
+ if ( extraArgs.stay ) { return; }
+ runAt(( ) => {
+ const quitAfter = extraArgs.quitAfter || 0;
+ if ( quitAfter !== 0 ) {
+ setTimeout(( ) => { stop(); }, quitAfter);
+ } else {
+ stop();
+ }
+ }, 'interactive');
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'object-prune.fn',
+ fn: objectPruneFn,
+ dependencies: [
+ 'matches-stack-trace.fn',
+ 'object-find-owner.fn',
+ 'safe-self.fn',
+ 'should-log.fn',
+ ],
+});
+// When no "prune paths" argument is provided, the scriptlet is
+// used for logging purpose and the "needle paths" argument is
+// used to filter logging output.
+//
+// https://github.com/uBlockOrigin/uBlock-issues/issues/1545
+// - Add support for "remove everything if needle matches" case
+function objectPruneFn(
+ obj,
+ rawPrunePaths,
+ rawNeedlePaths,
+ stackNeedleDetails = { matchAll: true },
+ extraArgs = {}
+) {
+ if ( typeof rawPrunePaths !== 'string' ) { return; }
+ const safe = safeSelf();
+ const prunePaths = rawPrunePaths !== ''
+ ? rawPrunePaths.split(/ +/)
+ : [];
+ const needlePaths = prunePaths.length !== 0 && rawNeedlePaths !== ''
+ ? rawNeedlePaths.split(/ +/)
+ : [];
+ const logLevel = shouldLog({ log: rawPrunePaths === '' || extraArgs.log });
+ const reLogNeedle = safe.patternToRegex(logLevel === true ? rawNeedlePaths : '');
+ if ( stackNeedleDetails.matchAll !== true ) {
+ if ( matchesStackTrace(stackNeedleDetails, extraArgs.logstack) === false ) {
+ return;
+ }
+ }
+ if ( objectPruneFn.mustProcess === undefined ) {
+ objectPruneFn.mustProcess = (root, needlePaths) => {
+ for ( const needlePath of needlePaths ) {
+ if ( objectFindOwnerFn(root, needlePath) === false ) {
+ return false;
+ }
+ }
+ return true;
+ };
+ objectPruneFn.logJson = (json, msg, reNeedle) => {
+ if ( reNeedle.test(json) === false ) { return; }
+ safeSelf().uboLog(`objectPrune()`, msg, location.hostname, json);
+ };
+ }
+ const jsonBefore = logLevel ? safe.JSON_stringify(obj, null, 2) : '';
+ if ( logLevel === true || logLevel === 'all' ) {
+ objectPruneFn.logJson(jsonBefore, `prune:"${rawPrunePaths}" log:"${logLevel}"`, reLogNeedle);
+ }
+ if ( prunePaths.length === 0 ) { return; }
+ let outcome = 'nomatch';
+ if ( objectPruneFn.mustProcess(obj, needlePaths) ) {
+ for ( const path of prunePaths ) {
+ if ( objectFindOwnerFn(obj, path, true) ) {
+ outcome = 'match';
+ }
+ }
+ }
+ if ( logLevel === outcome ) {
+ objectPruneFn.logJson(jsonBefore, `prune:"${rawPrunePaths}" log:"${logLevel}"`, reLogNeedle);
+ }
+ if ( outcome === 'match' ) { return obj; }
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'object-find-owner.fn',
+ fn: objectFindOwnerFn,
+});
+function objectFindOwnerFn(
+ root,
+ path,
+ prune = false
+) {
+ let owner = root;
+ let chain = path;
+ for (;;) {
+ if ( typeof owner !== 'object' || owner === null ) { return false; }
+ const pos = chain.indexOf('.');
+ if ( pos === -1 ) {
+ if ( prune === false ) {
+ return owner.hasOwnProperty(chain);
+ }
+ let modified = false;
+ if ( chain === '*' ) {
+ for ( const key in owner ) {
+ if ( owner.hasOwnProperty(key) === false ) { continue; }
+ delete owner[key];
+ modified = true;
+ }
+ } else if ( owner.hasOwnProperty(chain) ) {
+ delete owner[chain];
+ modified = true;
+ }
+ return modified;
+ }
+ const prop = chain.slice(0, pos);
+ if (
+ prop === '[]' && Array.isArray(owner) ||
+ prop === '*' && owner instanceof Object
+ ) {
+ const next = chain.slice(pos + 1);
+ let found = false;
+ for ( const key of Object.keys(owner) ) {
+ found = objectFindOwnerFn(owner[key], next, prune) || found;
+ }
+ return found;
+ }
+ if ( owner.hasOwnProperty(prop) === false ) { return false; }
+ owner = owner[prop];
+ chain = chain.slice(pos + 1);
+ }
+ return true;
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'set-cookie.fn',
+ fn: setCookieFn,
+});
+function setCookieFn(
+ trusted = false,
+ name = '',
+ value = '',
+ expires = '',
+ path = '',
+ options = {},
+) {
+ const getCookieValue = name => {
+ for ( const s of document.cookie.split(/\s*;\s*/) ) {
+ const pos = s.indexOf('=');
+ if ( pos === -1 ) { continue; }
+ if ( s.slice(0, pos) !== name ) { continue; }
+ return s.slice(pos+1);
+ }
+ };
+
+ const cookieBefore = getCookieValue(name);
+ if ( cookieBefore !== undefined && options.dontOverwrite ) { return; }
+ if ( cookieBefore === value && options.reload ) { return; }
+
+ const cookieParts = [ name, '=', value ];
+ if ( expires !== '' ) {
+ cookieParts.push('; expires=', expires);
+ }
+
+ if ( path === '' ) { path = '/'; }
+ else if ( path === 'none' ) { path = ''; }
+ if ( path !== '' && path !== '/' ) { return; }
+ if ( path === '/' ) {
+ cookieParts.push('; path=/');
+ }
+
+ if ( trusted ) {
+ if ( options.domain ) {
+ cookieParts.push(`; domain=${options.domain}`);
+ }
+ cookieParts.push('; Secure');
+ }
+
+ try {
+ document.cookie = cookieParts.join('');
+ } catch(_) {
+ }
+
+ if ( options.reload && getCookieValue(name) === value ) {
+ window.location.reload();
+ }
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'set-local-storage-item.fn',
+ fn: setLocalStorageItemFn,
+ dependencies: [
+ 'safe-self.fn',
+ ],
+});
+function setLocalStorageItemFn(
+ which = 'local',
+ trusted = false,
+ key = '',
+ value = '',
+) {
+ if ( key === '' ) { return; }
+
+ // For increased compatibility with AdGuard
+ if ( value === 'emptyArr' ) {
+ value = '[]';
+ } else if ( value === 'emptyObj' ) {
+ value = '{}';
+ }
+
+ const trustedValues = [
+ '',
+ 'undefined', 'null',
+ 'false', 'true',
+ 'on', 'off',
+ 'yes', 'no',
+ '{}', '[]', '""',
+ '$remove$',
+ ];
+
+ if ( trusted ) {
+ if ( value === '$now$' ) {
+ value = Date.now();
+ } else if ( value === '$currentDate$' ) {
+ value = `${Date()}`;
+ } else if ( value === '$currentISODate$' ) {
+ value = (new Date()).toISOString();
+ }
+ } else {
+ const normalized = value.toLowerCase();
+ const match = /^("?)(.+)\1$/.exec(normalized);
+ const unquoted = match && match[2] || normalized;
+ if ( trustedValues.includes(unquoted) === false ) {
+ if ( /^\d+$/.test(unquoted) === false ) { return; }
+ const n = parseInt(unquoted, 10);
+ if ( n > 32767 ) { return; }
+ }
+ }
+
+ try {
+ const storage = self[`${which}Storage`];
+ if ( value === '$remove$' ) {
+ const safe = safeSelf();
+ const pattern = safe.patternToRegex(key, undefined, true );
+ const toRemove = [];
+ for ( let i = 0, n = storage.length; i < n; i++ ) {
+ const key = storage.key(i);
+ if ( pattern.test(key) ) { toRemove.push(key); }
+ }
+ for ( const key of toRemove ) {
+ storage.removeItem(key);
+ }
+ } else {
+ storage.setItem(key, `${value}`);
+ }
+ } catch(ex) {
+ }
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'matches-stack-trace.fn',
+ fn: matchesStackTrace,
+ dependencies: [
+ 'get-exception-token.fn',
+ 'safe-self.fn',
+ ],
+});
+function matchesStackTrace(
+ needleDetails,
+ logLevel = ''
+) {
+ const safe = safeSelf();
+ const exceptionToken = getExceptionToken();
+ const error = new safe.Error(exceptionToken);
+ const docURL = new URL(self.location.href);
+ docURL.hash = '';
+ // Normalize stack trace
+ const reLine = /(.*?@)?(\S+)(:\d+):\d+\)?$/;
+ const lines = [];
+ for ( let line of error.stack.split(/[\n\r]+/) ) {
+ if ( line.includes(exceptionToken) ) { continue; }
+ line = line.trim();
+ const match = safe.RegExp_exec.call(reLine, line);
+ if ( match === null ) { continue; }
+ let url = match[2];
+ if ( url.startsWith('(') ) { url = url.slice(1); }
+ if ( url === docURL.href ) {
+ url = 'inlineScript';
+ } else if ( url.startsWith('<anonymous>') ) {
+ url = 'injectedScript';
+ }
+ let fn = match[1] !== undefined
+ ? match[1].slice(0, -1)
+ : line.slice(0, match.index).trim();
+ if ( fn.startsWith('at') ) { fn = fn.slice(2).trim(); }
+ let rowcol = match[3];
+ lines.push(' ' + `${fn} ${url}${rowcol}:1`.trim());
+ }
+ lines[0] = `stackDepth:${lines.length-1}`;
+ const stack = lines.join('\t');
+ const r = needleDetails.matchAll !== true &&
+ safe.testPattern(needleDetails, stack);
+ if (
+ logLevel === 'all' ||
+ logLevel === 'match' && r ||
+ logLevel === 'nomatch' && !r
+ ) {
+ safe.uboLog(stack.replace(/\t/g, '\n'));
+ }
+ return r;
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'parse-properties-to-match.fn',
+ fn: parsePropertiesToMatch,
+ dependencies: [
+ 'safe-self.fn',
+ ],
+});
+function parsePropertiesToMatch(propsToMatch, implicit = '') {
+ const safe = safeSelf();
+ const needles = new Map();
+ if ( propsToMatch === undefined || propsToMatch === '' ) { return needles; }
+ const options = { canNegate: true };
+ for ( const needle of propsToMatch.split(/\s+/) ) {
+ const [ prop, pattern ] = needle.split(':');
+ if ( prop === '' ) { continue; }
+ if ( pattern !== undefined ) {
+ needles.set(prop, safe.initPattern(pattern, options));
+ } else if ( implicit !== '' ) {
+ needles.set(implicit, safe.initPattern(prop, options));
+ }
+ }
+ return needles;
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'match-object-properties.fn',
+ fn: matchObjectProperties,
+ dependencies: [
+ 'safe-self.fn',
+ ],
+});
+function matchObjectProperties(propNeedles, ...objs) {
+ if ( matchObjectProperties.extractProperties === undefined ) {
+ matchObjectProperties.extractProperties = (src, des, props) => {
+ for ( const p of props ) {
+ const v = src[p];
+ if ( v === undefined ) { continue; }
+ des[p] = src[p];
+ }
+ };
+ }
+ const safe = safeSelf();
+ const haystack = {};
+ const props = safe.Array_from(propNeedles.keys());
+ for ( const obj of objs ) {
+ if ( obj instanceof Object === false ) { continue; }
+ matchObjectProperties.extractProperties(obj, haystack, props);
+ }
+ for ( const [ prop, details ] of propNeedles ) {
+ let value = haystack[prop];
+ if ( value === undefined ) { continue; }
+ if ( typeof value !== 'string' ) {
+ try { value = JSON.stringify(value); }
+ catch(ex) { }
+ if ( typeof value !== 'string' ) { continue; }
+ }
+ if ( safe.testPattern(details, value) ) { continue; }
+ return false;
+ }
+ return true;
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'json-prune-fetch-response.fn',
+ fn: jsonPruneFetchResponseFn,
+ dependencies: [
+ 'match-object-properties.fn',
+ 'object-prune.fn',
+ 'parse-properties-to-match.fn',
+ 'safe-self.fn',
+ 'should-log.fn',
+ ],
+});
+function jsonPruneFetchResponseFn(
+ rawPrunePaths = '',
+ rawNeedlePaths = ''
+) {
+ const safe = safeSelf();
+ const extraArgs = safe.getExtraArgs(Array.from(arguments), 2);
+ const logLevel = shouldLog({ log: rawPrunePaths === '' || extraArgs.log, });
+ const log = logLevel ? ((...args) => { safe.uboLog(...args); }) : (( ) => { });
+ const propNeedles = parsePropertiesToMatch(extraArgs.propsToMatch, 'url');
+ const stackNeedle = safe.initPattern(extraArgs.stackToMatch || '', { canNegate: true });
+ const applyHandler = function(target, thisArg, args) {
+ const fetchPromise = Reflect.apply(target, thisArg, args);
+ if ( logLevel === true ) {
+ log('json-prune-fetch-response:', JSON.stringify(Array.from(args)).slice(1,-1));
+ }
+ if ( rawPrunePaths === '' ) { return fetchPromise; }
+ let outcome = 'match';
+ if ( propNeedles.size !== 0 ) {
+ const objs = [ args[0] instanceof Object ? args[0] : { url: args[0] } ];
+ if ( objs[0] instanceof Request ) {
+ try { objs[0] = safe.Request_clone.call(objs[0]); }
+ catch(ex) { log(ex); }
+ }
+ if ( args[1] instanceof Object ) {
+ objs.push(args[1]);
+ }
+ if ( matchObjectProperties(propNeedles, ...objs) === false ) {
+ outcome = 'nomatch';
+ }
+ if ( outcome === logLevel || logLevel === 'all' ) {
+ log(
+ `json-prune-fetch-response (${outcome})`,
+ `\n\tfetchPropsToMatch: ${JSON.stringify(Array.from(propNeedles)).slice(1,-1)}`,
+ '\n\tprops:', ...objs,
+ );
+ }
+ }
+ if ( outcome === 'nomatch' ) { return fetchPromise; }
+ return fetchPromise.then(responseBefore => {
+ const response = responseBefore.clone();
+ return response.json().then(objBefore => {
+ if ( typeof objBefore !== 'object' ) { return responseBefore; }
+ const objAfter = objectPruneFn(
+ objBefore,
+ rawPrunePaths,
+ rawNeedlePaths,
+ stackNeedle,
+ extraArgs
+ );
+ if ( typeof objAfter !== 'object' ) { return responseBefore; }
+ const responseAfter = Response.json(objAfter, {
+ status: responseBefore.status,
+ statusText: responseBefore.statusText,
+ headers: responseBefore.headers,
+ });
+ Object.defineProperties(responseAfter, {
+ ok: { value: responseBefore.ok },
+ redirected: { value: responseBefore.redirected },
+ type: { value: responseBefore.type },
+ url: { value: responseBefore.url },
+ });
+ return responseAfter;
+ }).catch(reason => {
+ log('json-prune-fetch-response:', reason);
+ return responseBefore;
+ });
+ }).catch(reason => {
+ log('json-prune-fetch-response:', reason);
+ return fetchPromise;
+ });
+ };
+ self.fetch = new Proxy(self.fetch, {
+ apply: applyHandler
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'replace-fetch-response.fn',
+ fn: replaceFetchResponseFn,
+ dependencies: [
+ 'match-object-properties.fn',
+ 'parse-properties-to-match.fn',
+ 'safe-self.fn',
+ 'should-log.fn',
+ ],
+});
+function replaceFetchResponseFn(
+ trusted = false,
+ pattern = '',
+ replacement = '',
+ propsToMatch = ''
+) {
+ if ( trusted !== true ) { return; }
+ const safe = safeSelf();
+ const extraArgs = safe.getExtraArgs(Array.from(arguments), 4);
+ const logLevel = shouldLog({
+ log: pattern === '' || extraArgs.log,
+ });
+ const log = logLevel ? ((...args) => { safe.uboLog(...args); }) : (( ) => { });
+ if ( pattern === '*' ) { pattern = '.*'; }
+ const rePattern = safe.patternToRegex(pattern);
+ const propNeedles = parsePropertiesToMatch(propsToMatch, 'url');
+ self.fetch = new Proxy(self.fetch, {
+ apply: function(target, thisArg, args) {
+ if ( logLevel === true ) {
+ log('replace-fetch-response:', JSON.stringify(Array.from(args)).slice(1,-1));
+ }
+ const fetchPromise = Reflect.apply(target, thisArg, args);
+ if ( pattern === '' ) { return fetchPromise; }
+ let outcome = 'match';
+ if ( propNeedles.size !== 0 ) {
+ const objs = [ args[0] instanceof Object ? args[0] : { url: args[0] } ];
+ if ( objs[0] instanceof Request ) {
+ try { objs[0] = safe.Request_clone.call(objs[0]); }
+ catch(ex) { log(ex); }
+ }
+ if ( args[1] instanceof Object ) {
+ objs.push(args[1]);
+ }
+ if ( matchObjectProperties(propNeedles, ...objs) === false ) {
+ outcome = 'nomatch';
+ }
+ if ( outcome === logLevel || logLevel === 'all' ) {
+ log(
+ `replace-fetch-response (${outcome})`,
+ `\n\tpropsToMatch: ${JSON.stringify(Array.from(propNeedles)).slice(1,-1)}`,
+ '\n\tprops:', ...args,
+ );
+ }
+ }
+ if ( outcome === 'nomatch' ) { return fetchPromise; }
+ return fetchPromise.then(responseBefore => {
+ const response = responseBefore.clone();
+ return response.text().then(textBefore => {
+ const textAfter = textBefore.replace(rePattern, replacement);
+ const outcome = textAfter !== textBefore ? 'match' : 'nomatch';
+ if ( outcome === logLevel || logLevel === 'all' ) {
+ log(
+ `replace-fetch-response (${outcome})`,
+ `\n\tpattern: ${pattern}`,
+ `\n\treplacement: ${replacement}`,
+ );
+ }
+ if ( outcome === 'nomatch' ) { return responseBefore; }
+ const responseAfter = new Response(textAfter, {
+ status: responseBefore.status,
+ statusText: responseBefore.statusText,
+ headers: responseBefore.headers,
+ });
+ Object.defineProperties(responseAfter, {
+ ok: { value: responseBefore.ok },
+ redirected: { value: responseBefore.redirected },
+ type: { value: responseBefore.type },
+ url: { value: responseBefore.url },
+ });
+ return responseAfter;
+ }).catch(reason => {
+ log('replace-fetch-response:', reason);
+ return responseBefore;
+ });
+ }).catch(reason => {
+ log('replace-fetch-response:', reason);
+ return fetchPromise;
+ });
+ }
+ });
+}
+
+
+/*******************************************************************************
+
+ Injectable scriptlets
+
+ These are meant to be used in the MAIN (webpage) execution world.
+
+*******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'abort-current-script.js',
+ aliases: [
+ 'acs.js',
+ 'abort-current-inline-script.js',
+ 'acis.js',
+ ],
+ fn: abortCurrentScript,
+ dependencies: [
+ 'abort-current-script-core.fn',
+ 'run-at-html-element.fn',
+ ],
+});
+// Issues to mind before changing anything:
+// https://github.com/uBlockOrigin/uBlock-issues/issues/2154
+function abortCurrentScript(...args) {
+ runAtHtmlElementFn(( ) => {
+ abortCurrentScriptCore(...args);
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'abort-on-property-read.js',
+ aliases: [
+ 'aopr.js',
+ ],
+ fn: abortOnPropertyRead,
+ dependencies: [
+ 'get-exception-token.fn',
+ ],
+});
+function abortOnPropertyRead(
+ chain = ''
+) {
+ if ( typeof chain !== 'string' ) { return; }
+ if ( chain === '' ) { return; }
+ const exceptionToken = getExceptionToken();
+ const abort = function() {
+ throw new ReferenceError(exceptionToken);
+ };
+ const makeProxy = function(owner, chain) {
+ const pos = chain.indexOf('.');
+ if ( pos === -1 ) {
+ const desc = Object.getOwnPropertyDescriptor(owner, chain);
+ if ( !desc || desc.get !== abort ) {
+ Object.defineProperty(owner, chain, {
+ get: abort,
+ set: function(){}
+ });
+ }
+ return;
+ }
+ const prop = chain.slice(0, pos);
+ let v = owner[prop];
+ chain = chain.slice(pos + 1);
+ if ( v ) {
+ makeProxy(v, chain);
+ return;
+ }
+ const desc = Object.getOwnPropertyDescriptor(owner, prop);
+ if ( desc && desc.set !== undefined ) { return; }
+ Object.defineProperty(owner, prop, {
+ get: function() { return v; },
+ set: function(a) {
+ v = a;
+ if ( a instanceof Object ) {
+ makeProxy(a, chain);
+ }
+ }
+ });
+ };
+ const owner = window;
+ makeProxy(owner, chain);
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'abort-on-property-write.js',
+ aliases: [
+ 'aopw.js',
+ ],
+ fn: abortOnPropertyWrite,
+ dependencies: [
+ 'get-exception-token.fn',
+ ],
+});
+function abortOnPropertyWrite(
+ prop = ''
+) {
+ if ( typeof prop !== 'string' ) { return; }
+ if ( prop === '' ) { return; }
+ const exceptionToken = getExceptionToken();
+ let owner = window;
+ for (;;) {
+ const pos = prop.indexOf('.');
+ if ( pos === -1 ) { break; }
+ owner = owner[prop.slice(0, pos)];
+ if ( owner instanceof Object === false ) { return; }
+ prop = prop.slice(pos + 1);
+ }
+ delete owner[prop];
+ Object.defineProperty(owner, prop, {
+ set: function() {
+ throw new ReferenceError(exceptionToken);
+ }
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'abort-on-stack-trace.js',
+ aliases: [
+ 'aost.js',
+ ],
+ fn: abortOnStackTrace,
+ dependencies: [
+ 'get-exception-token.fn',
+ 'matches-stack-trace.fn',
+ 'safe-self.fn',
+ ],
+});
+function abortOnStackTrace(
+ chain = '',
+ needle = ''
+) {
+ if ( typeof chain !== 'string' ) { return; }
+ const safe = safeSelf();
+ const needleDetails = safe.initPattern(needle, { canNegate: true });
+ const extraArgs = safe.getExtraArgs(Array.from(arguments), 2);
+ if ( needle === '' ) { extraArgs.log = 'all'; }
+ const makeProxy = function(owner, chain) {
+ const pos = chain.indexOf('.');
+ if ( pos === -1 ) {
+ let v = owner[chain];
+ Object.defineProperty(owner, chain, {
+ get: function() {
+ if ( matchesStackTrace(needleDetails, extraArgs.log) ) {
+ throw new ReferenceError(getExceptionToken());
+ }
+ return v;
+ },
+ set: function(a) {
+ if ( matchesStackTrace(needleDetails, extraArgs.log) ) {
+ throw new ReferenceError(getExceptionToken());
+ }
+ v = a;
+ },
+ });
+ return;
+ }
+ const prop = chain.slice(0, pos);
+ let v = owner[prop];
+ chain = chain.slice(pos + 1);
+ if ( v ) {
+ makeProxy(v, chain);
+ return;
+ }
+ const desc = Object.getOwnPropertyDescriptor(owner, prop);
+ if ( desc && desc.set !== undefined ) { return; }
+ Object.defineProperty(owner, prop, {
+ get: function() { return v; },
+ set: function(a) {
+ v = a;
+ if ( a instanceof Object ) {
+ makeProxy(a, chain);
+ }
+ }
+ });
+ };
+ const owner = window;
+ makeProxy(owner, chain);
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'addEventListener-defuser.js',
+ aliases: [
+ 'aeld.js',
+ 'prevent-addEventListener.js',
+ ],
+ fn: addEventListenerDefuser,
+ dependencies: [
+ 'run-at.fn',
+ 'safe-self.fn',
+ 'should-debug.fn',
+ 'should-log.fn',
+ ],
+});
+// https://github.com/uBlockOrigin/uAssets/issues/9123#issuecomment-848255120
+function addEventListenerDefuser(
+ type = '',
+ pattern = ''
+) {
+ const safe = safeSelf();
+ const extraArgs = safe.getExtraArgs(Array.from(arguments), 2);
+ const reType = safe.patternToRegex(type, undefined, true);
+ const rePattern = safe.patternToRegex(pattern);
+ const log = shouldLog(extraArgs);
+ const debug = shouldDebug(extraArgs);
+ const trapEddEventListeners = ( ) => {
+ const eventListenerHandler = {
+ apply: function(target, thisArg, args) {
+ let type, handler;
+ try {
+ type = String(args[0]);
+ handler = args[1] instanceof Function
+ ? String(safe.Function_toString(args[1]))
+ : String(args[1]);
+ } catch(ex) {
+ }
+ const matchesType = safe.RegExp_test.call(reType, type);
+ const matchesHandler = safe.RegExp_test.call(rePattern, handler);
+ const matchesEither = matchesType || matchesHandler;
+ const matchesBoth = matchesType && matchesHandler;
+ if ( log === 1 && matchesBoth || log === 2 && matchesEither || log === 3 ) {
+ safe.uboLog(`addEventListener('${type}', ${handler})`);
+ }
+ if ( debug === 1 && matchesBoth || debug === 2 && matchesEither ) {
+ debugger; // jshint ignore:line
+ }
+ if ( matchesBoth ) { return; }
+ return Reflect.apply(target, thisArg, args);
+ },
+ get(target, prop, receiver) {
+ if ( prop === 'toString' ) {
+ return target.toString.bind(target);
+ }
+ return Reflect.get(target, prop, receiver);
+ },
+ };
+ self.EventTarget.prototype.addEventListener = new Proxy(
+ self.EventTarget.prototype.addEventListener,
+ eventListenerHandler
+ );
+ };
+ runAt(( ) => {
+ trapEddEventListeners();
+ }, extraArgs.runAt);
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'json-prune.js',
+ fn: jsonPrune,
+ dependencies: [
+ 'object-prune.fn',
+ 'safe-self.fn',
+ ],
+});
+function jsonPrune(
+ rawPrunePaths = '',
+ rawNeedlePaths = '',
+ stackNeedle = ''
+) {
+ const safe = safeSelf();
+ const stackNeedleDetails = safe.initPattern(stackNeedle, { canNegate: true });
+ const extraArgs = safe.getExtraArgs(Array.from(arguments), 3);
+ JSON.parse = new Proxy(JSON.parse, {
+ apply: function(target, thisArg, args) {
+ const objBefore = Reflect.apply(target, thisArg, args);
+ const objAfter = objectPruneFn(
+ objBefore,
+ rawPrunePaths,
+ rawNeedlePaths,
+ stackNeedleDetails,
+ extraArgs
+ );
+ return objAfter || objBefore;
+ },
+ });
+}
+
+/*******************************************************************************
+ *
+ * json-prune-fetch-response.js
+ *
+ * Prune JSON response of fetch requests.
+ *
+ **/
+
+builtinScriptlets.push({
+ name: 'json-prune-fetch-response.js',
+ fn: jsonPruneFetchResponse,
+ dependencies: [
+ 'json-prune-fetch-response.fn',
+ ],
+});
+function jsonPruneFetchResponse(...args) {
+ jsonPruneFetchResponseFn(...args);
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'json-prune-xhr-response.js',
+ fn: jsonPruneXhrResponse,
+ dependencies: [
+ 'match-object-properties.fn',
+ 'object-prune.fn',
+ 'parse-properties-to-match.fn',
+ 'safe-self.fn',
+ 'should-log.fn',
+ ],
+});
+function jsonPruneXhrResponse(
+ rawPrunePaths = '',
+ rawNeedlePaths = ''
+) {
+ const safe = safeSelf();
+ const xhrInstances = new WeakMap();
+ const extraArgs = safe.getExtraArgs(Array.from(arguments), 2);
+ const logLevel = shouldLog({ log: rawPrunePaths === '' || extraArgs.log, });
+ const log = logLevel ? ((...args) => { safe.uboLog(...args); }) : (( ) => { });
+ const propNeedles = parsePropertiesToMatch(extraArgs.propsToMatch, 'url');
+ const stackNeedle = safe.initPattern(extraArgs.stackToMatch || '', { canNegate: true });
+ self.XMLHttpRequest = class extends self.XMLHttpRequest {
+ open(method, url, ...args) {
+ const xhrDetails = { method, url };
+ let outcome = 'match';
+ if ( propNeedles.size !== 0 ) {
+ if ( matchObjectProperties(propNeedles, xhrDetails) === false ) {
+ outcome = 'nomatch';
+ }
+ }
+ if ( outcome === logLevel || outcome === 'all' ) {
+ log(`xhr.open(${method}, ${url}, ${args.join(', ')})`);
+ }
+ if ( outcome === 'match' ) {
+ xhrInstances.set(this, xhrDetails);
+ }
+ return super.open(method, url, ...args);
+ }
+ get response() {
+ const innerResponse = super.response;
+ const xhrDetails = xhrInstances.get(this);
+ if ( xhrDetails === undefined ) {
+ return innerResponse;
+ }
+ const responseLength = typeof innerResponse === 'string'
+ ? innerResponse.length
+ : undefined;
+ if ( xhrDetails.lastResponseLength !== responseLength ) {
+ xhrDetails.response = undefined;
+ xhrDetails.lastResponseLength = responseLength;
+ }
+ if ( xhrDetails.response !== undefined ) {
+ return xhrDetails.response;
+ }
+ let objBefore;
+ if ( typeof innerResponse === 'object' ) {
+ objBefore = innerResponse;
+ } else if ( typeof innerResponse === 'string' ) {
+ try { objBefore = safe.JSON_parse(innerResponse); }
+ catch(ex) { }
+ }
+ if ( typeof objBefore !== 'object' ) {
+ return (xhrDetails.response = innerResponse);
+ }
+ const objAfter = objectPruneFn(
+ objBefore,
+ rawPrunePaths,
+ rawNeedlePaths,
+ stackNeedle,
+ extraArgs
+ );
+ let outerResponse;
+ if ( typeof objAfter === 'object' ) {
+ outerResponse = typeof innerResponse === 'string'
+ ? safe.JSON_stringify(objAfter)
+ : objAfter;
+ } else {
+ outerResponse = innerResponse;
+ }
+ return (xhrDetails.response = outerResponse);
+ }
+ get responseText() {
+ const response = this.response;
+ return typeof response !== 'string'
+ ? super.responseText
+ : response;
+ }
+ };
+}
+
+/******************************************************************************/
+
+// There is still code out there which uses `eval` in lieu of `JSON.parse`.
+
+builtinScriptlets.push({
+ name: 'evaldata-prune.js',
+ fn: evaldataPrune,
+ dependencies: [
+ 'object-prune.fn',
+ ],
+});
+function evaldataPrune(
+ rawPrunePaths = '',
+ rawNeedlePaths = ''
+) {
+ self.eval = new Proxy(self.eval, {
+ apply(target, thisArg, args) {
+ const before = Reflect.apply(target, thisArg, args);
+ if ( typeof before === 'object' ) {
+ const after = objectPruneFn(before, rawPrunePaths, rawNeedlePaths);
+ return after || before;
+ }
+ return before;
+ }
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'adjust-setInterval.js',
+ aliases: [
+ 'nano-setInterval-booster.js',
+ 'nano-sib.js',
+ ],
+ fn: adjustSetInterval,
+ dependencies: [
+ 'safe-self.fn',
+ ],
+});
+// Imported from:
+// https://github.com/NanoAdblocker/NanoFilters/blob/1f3be7211bb0809c5106996f52564bf10c4525f7/NanoFiltersSource/NanoResources.txt#L126
+//
+// Speed up or down setInterval, 3 optional arguments.
+// The payload matcher, a string literal or a JavaScript RegExp, defaults
+// to match all.
+// delayMatcher
+// The delay matcher, an integer, defaults to 1000.
+// Use `*` to match any delay.
+// boostRatio - The delay multiplier when there is a match, 0.5 speeds up by
+// 2 times and 2 slows down by 2 times, defaults to 0.05 or speed up
+// 20 times. Speed up and down both cap at 50 times.
+function adjustSetInterval(
+ needleArg = '',
+ delayArg = '',
+ boostArg = ''
+) {
+ if ( typeof needleArg !== 'string' ) { return; }
+ const safe = safeSelf();
+ const reNeedle = safe.patternToRegex(needleArg);
+ let delay = delayArg !== '*' ? parseInt(delayArg, 10) : -1;
+ if ( isNaN(delay) || isFinite(delay) === false ) { delay = 1000; }
+ let boost = parseFloat(boostArg);
+ boost = isNaN(boost) === false && isFinite(boost)
+ ? Math.min(Math.max(boost, 0.001), 50)
+ : 0.05;
+ self.setInterval = new Proxy(self.setInterval, {
+ apply: function(target, thisArg, args) {
+ const [ a, b ] = args;
+ if (
+ (delay === -1 || b === delay) &&
+ reNeedle.test(a.toString())
+ ) {
+ args[1] = b * boost;
+ }
+ return target.apply(thisArg, args);
+ }
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'adjust-setTimeout.js',
+ aliases: [
+ 'nano-setTimeout-booster.js',
+ 'nano-stb.js',
+ ],
+ fn: adjustSetTimeout,
+ dependencies: [
+ 'safe-self.fn',
+ ],
+});
+// Imported from:
+// https://github.com/NanoAdblocker/NanoFilters/blob/1f3be7211bb0809c5106996f52564bf10c4525f7/NanoFiltersSource/NanoResources.txt#L82
+//
+// Speed up or down setTimeout, 3 optional arguments.
+// funcMatcher
+// The payload matcher, a string literal or a JavaScript RegExp, defaults
+// to match all.
+// delayMatcher
+// The delay matcher, an integer, defaults to 1000.
+// Use `*` to match any delay.
+// boostRatio - The delay multiplier when there is a match, 0.5 speeds up by
+// 2 times and 2 slows down by 2 times, defaults to 0.05 or speed up
+// 20 times. Speed up and down both cap at 50 times.
+function adjustSetTimeout(
+ needleArg = '',
+ delayArg = '',
+ boostArg = ''
+) {
+ if ( typeof needleArg !== 'string' ) { return; }
+ const safe = safeSelf();
+ const reNeedle = safe.patternToRegex(needleArg);
+ let delay = delayArg !== '*' ? parseInt(delayArg, 10) : -1;
+ if ( isNaN(delay) || isFinite(delay) === false ) { delay = 1000; }
+ let boost = parseFloat(boostArg);
+ boost = isNaN(boost) === false && isFinite(boost)
+ ? Math.min(Math.max(boost, 0.001), 50)
+ : 0.05;
+ self.setTimeout = new Proxy(self.setTimeout, {
+ apply: function(target, thisArg, args) {
+ const [ a, b ] = args;
+ if (
+ (delay === -1 || b === delay) &&
+ reNeedle.test(a.toString())
+ ) {
+ args[1] = b * boost;
+ }
+ return target.apply(thisArg, args);
+ }
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'noeval-if.js',
+ aliases: [
+ 'prevent-eval-if.js',
+ ],
+ fn: noEvalIf,
+ dependencies: [
+ 'safe-self.fn',
+ ],
+});
+function noEvalIf(
+ needle = ''
+) {
+ if ( typeof needle !== 'string' ) { return; }
+ const safe = safeSelf();
+ const reNeedle = safe.patternToRegex(needle);
+ window.eval = new Proxy(window.eval, { // jshint ignore: line
+ apply: function(target, thisArg, args) {
+ const a = args[0];
+ if ( reNeedle.test(a.toString()) ) { return; }
+ return target.apply(thisArg, args);
+ }
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'no-fetch-if.js',
+ aliases: [
+ 'prevent-fetch.js',
+ ],
+ fn: noFetchIf,
+ dependencies: [
+ 'generate-content.fn',
+ 'safe-self.fn',
+ ],
+});
+function noFetchIf(
+ propsToMatch = '',
+ responseBody = ''
+) {
+ if ( typeof propsToMatch !== 'string' ) { return; }
+ const safe = safeSelf();
+ const needles = [];
+ for ( const condition of propsToMatch.split(/\s+/) ) {
+ if ( condition === '' ) { continue; }
+ const pos = condition.indexOf(':');
+ let key, value;
+ if ( pos !== -1 ) {
+ key = condition.slice(0, pos);
+ value = condition.slice(pos + 1);
+ } else {
+ key = 'url';
+ value = condition;
+ }
+ needles.push({ key, re: safe.patternToRegex(value) });
+ }
+ const log = needles.length === 0 ? console.log.bind(console) : undefined;
+ self.fetch = new Proxy(self.fetch, {
+ apply: function(target, thisArg, args) {
+ const details = args[0] instanceof self.Request
+ ? args[0]
+ : Object.assign({ url: args[0] }, args[1]);
+ let proceed = true;
+ try {
+ const props = new Map();
+ for ( const prop in details ) {
+ let v = details[prop];
+ if ( typeof v !== 'string' ) {
+ try { v = JSON.stringify(v); }
+ catch(ex) { }
+ }
+ if ( typeof v !== 'string' ) { continue; }
+ props.set(prop, v);
+ }
+ if ( log !== undefined ) {
+ const out = Array.from(props)
+ .map(a => `${a[0]}:${a[1]}`)
+ .join(' ');
+ log(`uBO: fetch(${out})`);
+ }
+ proceed = needles.length === 0;
+ for ( const { key, re } of needles ) {
+ if (
+ props.has(key) === false ||
+ re.test(props.get(key)) === false
+ ) {
+ proceed = true;
+ break;
+ }
+ }
+ } catch(ex) {
+ }
+ if ( proceed ) {
+ return Reflect.apply(target, thisArg, args);
+ }
+ let responseType = '';
+ if ( details.mode === undefined || details.mode === 'cors' ) {
+ try {
+ const desURL = new URL(details.url);
+ responseType = desURL.origin !== document.location.origin
+ ? 'cors'
+ : 'basic';
+ } catch(_) {
+ }
+ }
+ return generateContentFn(responseBody).then(text => {
+ const response = new Response(text, {
+ statusText: 'OK',
+ headers: {
+ 'Content-Length': text.length,
+ }
+ });
+ Object.defineProperty(response, 'url', {
+ value: details.url
+ });
+ if ( responseType !== '' ) {
+ Object.defineProperty(response, 'type', {
+ value: responseType
+ });
+ }
+ return response;
+ });
+ }
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'prevent-refresh.js',
+ aliases: [
+ 'refresh-defuser.js',
+ ],
+ fn: preventRefresh,
+ world: 'ISOLATED',
+ dependencies: [
+ 'run-at.fn',
+ ],
+});
+// https://www.reddit.com/r/uBlockOrigin/comments/q0frv0/while_reading_a_sports_article_i_was_redirected/hf7wo9v/
+function preventRefresh(
+ arg1 = ''
+) {
+ if ( typeof arg1 !== 'string' ) { return; }
+ const defuse = ( ) => {
+ const meta = document.querySelector('meta[http-equiv="refresh" i][content]');
+ if ( meta === null ) { return; }
+ const s = arg1 === ''
+ ? meta.getAttribute('content')
+ : arg1;
+ const ms = Math.max(parseFloat(s) || 0, 0) * 1000;
+ setTimeout(( ) => { window.stop(); }, ms);
+ };
+ runAt(( ) => {
+ defuse();
+ }, 'interactive');
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'remove-attr.js',
+ aliases: [
+ 'ra.js',
+ ],
+ fn: removeAttr,
+ dependencies: [
+ 'run-at.fn',
+ ],
+});
+function removeAttr(
+ token = '',
+ selector = '',
+ behavior = ''
+) {
+ if ( typeof token !== 'string' ) { return; }
+ if ( token === '' ) { return; }
+ const tokens = token.split(/\s*\|\s*/);
+ if ( selector === '' ) {
+ selector = `[${tokens.join('],[')}]`;
+ }
+ let timer;
+ const rmattr = ( ) => {
+ timer = undefined;
+ try {
+ const nodes = document.querySelectorAll(selector);
+ for ( const node of nodes ) {
+ for ( const attr of tokens ) {
+ node.removeAttribute(attr);
+ }
+ }
+ } catch(ex) {
+ }
+ };
+ const mutationHandler = mutations => {
+ if ( timer !== undefined ) { return; }
+ let skip = true;
+ for ( let i = 0; i < mutations.length && skip; i++ ) {
+ const { type, addedNodes, removedNodes } = mutations[i];
+ if ( type === 'attributes' ) { skip = false; }
+ for ( let j = 0; j < addedNodes.length && skip; j++ ) {
+ if ( addedNodes[j].nodeType === 1 ) { skip = false; break; }
+ }
+ for ( let j = 0; j < removedNodes.length && skip; j++ ) {
+ if ( removedNodes[j].nodeType === 1 ) { skip = false; break; }
+ }
+ }
+ if ( skip ) { return; }
+ timer = self.requestIdleCallback(rmattr, { timeout: 17 });
+ };
+ const start = ( ) => {
+ rmattr();
+ if ( /\bstay\b/.test(behavior) === false ) { return; }
+ const observer = new MutationObserver(mutationHandler);
+ observer.observe(document, {
+ attributes: true,
+ attributeFilter: tokens,
+ childList: true,
+ subtree: true,
+ });
+ };
+ runAt(( ) => {
+ start();
+ }, /\bcomplete\b/.test(behavior) ? 'idle' : 'interactive');
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'remove-class.js',
+ aliases: [
+ 'rc.js',
+ ],
+ fn: removeClass,
+ world: 'ISOLATED',
+ dependencies: [
+ 'run-at.fn',
+ ],
+});
+function removeClass(
+ token = '',
+ selector = '',
+ behavior = ''
+) {
+ if ( typeof token !== 'string' ) { return; }
+ if ( token === '' ) { return; }
+ const classTokens = token.split(/\s*\|\s*/);
+ if ( selector === '' ) {
+ selector = '.' + classTokens.map(a => CSS.escape(a)).join(',.');
+ }
+ const mustStay = /\bstay\b/.test(behavior);
+ let timer;
+ const rmclass = function() {
+ timer = undefined;
+ try {
+ const nodes = document.querySelectorAll(selector);
+ for ( const node of nodes ) {
+ node.classList.remove(...classTokens);
+ }
+ } catch(ex) {
+ }
+ if ( mustStay ) { return; }
+ if ( document.readyState !== 'complete' ) { return; }
+ observer.disconnect();
+ };
+ const mutationHandler = mutations => {
+ if ( timer !== undefined ) { return; }
+ let skip = true;
+ for ( let i = 0; i < mutations.length && skip; i++ ) {
+ const { type, addedNodes, removedNodes } = mutations[i];
+ if ( type === 'attributes' ) { skip = false; }
+ for ( let j = 0; j < addedNodes.length && skip; j++ ) {
+ if ( addedNodes[j].nodeType === 1 ) { skip = false; break; }
+ }
+ for ( let j = 0; j < removedNodes.length && skip; j++ ) {
+ if ( removedNodes[j].nodeType === 1 ) { skip = false; break; }
+ }
+ }
+ if ( skip ) { return; }
+ timer = self.requestIdleCallback(rmclass, { timeout: 67 });
+ };
+ const observer = new MutationObserver(mutationHandler);
+ const start = ( ) => {
+ rmclass();
+ observer.observe(document, {
+ attributes: true,
+ attributeFilter: [ 'class' ],
+ childList: true,
+ subtree: true,
+ });
+ };
+ runAt(( ) => {
+ start();
+ }, /\bcomplete\b/.test(behavior) ? 'idle' : 'loading');
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'no-requestAnimationFrame-if.js',
+ aliases: [
+ 'norafif.js',
+ 'prevent-requestAnimationFrame.js',
+ ],
+ fn: noRequestAnimationFrameIf,
+ dependencies: [
+ 'safe-self.fn',
+ ],
+});
+function noRequestAnimationFrameIf(
+ needle = ''
+) {
+ if ( typeof needle !== 'string' ) { return; }
+ const safe = safeSelf();
+ const needleNot = needle.charAt(0) === '!';
+ if ( needleNot ) { needle = needle.slice(1); }
+ const log = needleNot === false && needle === '' ? console.log : undefined;
+ const reNeedle = safe.patternToRegex(needle);
+ window.requestAnimationFrame = new Proxy(window.requestAnimationFrame, {
+ apply: function(target, thisArg, args) {
+ const a = args[0] instanceof Function
+ ? String(safe.Function_toString(args[0]))
+ : String(args[0]);
+ let defuse = false;
+ if ( log !== undefined ) {
+ log('uBO: requestAnimationFrame("%s")', a);
+ } else {
+ defuse = reNeedle.test(a) !== needleNot;
+ }
+ if ( defuse ) {
+ args[0] = function(){};
+ }
+ return target.apply(thisArg, args);
+ }
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'set-constant.js',
+ aliases: [
+ 'set.js',
+ ],
+ fn: setConstant,
+ dependencies: [
+ 'set-constant-core.fn'
+ ],
+});
+function setConstant(
+ ...args
+) {
+ setConstantCore(false, ...args);
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'no-setInterval-if.js',
+ aliases: [
+ 'nosiif.js',
+ 'prevent-setInterval.js',
+ 'setInterval-defuser.js',
+ ],
+ fn: noSetIntervalIf,
+ dependencies: [
+ 'safe-self.fn',
+ ],
+});
+function noSetIntervalIf(
+ needle = '',
+ delay = ''
+) {
+ if ( typeof needle !== 'string' ) { return; }
+ const safe = safeSelf();
+ const needleNot = needle.charAt(0) === '!';
+ if ( needleNot ) { needle = needle.slice(1); }
+ if ( delay === '' ) { delay = undefined; }
+ let delayNot = false;
+ if ( delay !== undefined ) {
+ delayNot = delay.charAt(0) === '!';
+ if ( delayNot ) { delay = delay.slice(1); }
+ delay = parseInt(delay, 10);
+ }
+ const log = needleNot === false && needle === '' && delay === undefined
+ ? console.log
+ : undefined;
+ const reNeedle = safe.patternToRegex(needle);
+ self.setInterval = new Proxy(self.setInterval, {
+ apply: function(target, thisArg, args) {
+ const a = args[0] instanceof Function
+ ? String(safe.Function_toString(args[0]))
+ : String(args[0]);
+ const b = args[1];
+ if ( log !== undefined ) {
+ log('uBO: setInterval("%s", %s)', a, b);
+ } else {
+ let defuse;
+ if ( needle !== '' ) {
+ defuse = reNeedle.test(a) !== needleNot;
+ }
+ if ( defuse !== false && delay !== undefined ) {
+ defuse = (b === delay || isNaN(b) && isNaN(delay) ) !== delayNot;
+ }
+ if ( defuse ) {
+ args[0] = function(){};
+ }
+ }
+ return Reflect.apply(target, thisArg, args);
+ },
+ get(target, prop, receiver) {
+ if ( prop === 'toString' ) {
+ return target.toString.bind(target);
+ }
+ return Reflect.get(target, prop, receiver);
+ },
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'no-setTimeout-if.js',
+ aliases: [
+ 'nostif.js',
+ 'prevent-setTimeout.js',
+ 'setTimeout-defuser.js',
+ ],
+ fn: noSetTimeoutIf,
+ dependencies: [
+ 'safe-self.fn',
+ ],
+});
+function noSetTimeoutIf(
+ needle = '',
+ delay = ''
+) {
+ if ( typeof needle !== 'string' ) { return; }
+ const safe = safeSelf();
+ const needleNot = needle.charAt(0) === '!';
+ if ( needleNot ) { needle = needle.slice(1); }
+ if ( delay === '' ) { delay = undefined; }
+ let delayNot = false;
+ if ( delay !== undefined ) {
+ delayNot = delay.charAt(0) === '!';
+ if ( delayNot ) { delay = delay.slice(1); }
+ delay = parseInt(delay, 10);
+ }
+ const log = needleNot === false && needle === '' && delay === undefined
+ ? console.log
+ : undefined;
+ const reNeedle = safe.patternToRegex(needle);
+ self.setTimeout = new Proxy(self.setTimeout, {
+ apply: function(target, thisArg, args) {
+ const a = args[0] instanceof Function
+ ? String(safe.Function_toString(args[0]))
+ : String(args[0]);
+ const b = args[1];
+ if ( log !== undefined ) {
+ log('uBO: setTimeout("%s", %s)', a, b);
+ } else {
+ let defuse;
+ if ( needle !== '' ) {
+ defuse = reNeedle.test(a) !== needleNot;
+ }
+ if ( defuse !== false && delay !== undefined ) {
+ defuse = (b === delay || isNaN(b) && isNaN(delay) ) !== delayNot;
+ }
+ if ( defuse ) {
+ args[0] = function(){};
+ }
+ }
+ return Reflect.apply(target, thisArg, args);
+ },
+ get(target, prop, receiver) {
+ if ( prop === 'toString' ) {
+ return target.toString.bind(target);
+ }
+ return Reflect.get(target, prop, receiver);
+ },
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'webrtc-if.js',
+ fn: webrtcIf,
+ dependencies: [
+ 'safe-self.fn',
+ ],
+});
+function webrtcIf(
+ good = ''
+) {
+ if ( typeof good !== 'string' ) { return; }
+ const safe = safeSelf();
+ const reGood = safe.patternToRegex(good);
+ const rtcName = window.RTCPeerConnection
+ ? 'RTCPeerConnection'
+ : (window.webkitRTCPeerConnection ? 'webkitRTCPeerConnection' : '');
+ if ( rtcName === '' ) { return; }
+ const log = console.log.bind(console);
+ const neuteredPeerConnections = new WeakSet();
+ const isGoodConfig = function(instance, config) {
+ if ( neuteredPeerConnections.has(instance) ) { return false; }
+ if ( config instanceof Object === false ) { return true; }
+ if ( Array.isArray(config.iceServers) === false ) { return true; }
+ for ( const server of config.iceServers ) {
+ const urls = typeof server.urls === 'string'
+ ? [ server.urls ]
+ : server.urls;
+ if ( Array.isArray(urls) ) {
+ for ( const url of urls ) {
+ if ( reGood.test(url) ) { return true; }
+ }
+ }
+ if ( typeof server.username === 'string' ) {
+ if ( reGood.test(server.username) ) { return true; }
+ }
+ if ( typeof server.credential === 'string' ) {
+ if ( reGood.test(server.credential) ) { return true; }
+ }
+ }
+ neuteredPeerConnections.add(instance);
+ return false;
+ };
+ const peerConnectionCtor = window[rtcName];
+ const peerConnectionProto = peerConnectionCtor.prototype;
+ peerConnectionProto.createDataChannel =
+ new Proxy(peerConnectionProto.createDataChannel, {
+ apply: function(target, thisArg, args) {
+ if ( isGoodConfig(target, args[1]) === false ) {
+ log('uBO:', args[1]);
+ return Reflect.apply(target, thisArg, args.slice(0, 1));
+ }
+ return Reflect.apply(target, thisArg, args);
+ },
+ });
+ window[rtcName] =
+ new Proxy(peerConnectionCtor, {
+ construct: function(target, args) {
+ if ( isGoodConfig(target, args[0]) === false ) {
+ log('uBO:', args[0]);
+ return Reflect.construct(target);
+ }
+ return Reflect.construct(target, args);
+ }
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'no-xhr-if.js',
+ aliases: [
+ 'prevent-xhr.js',
+ ],
+ fn: noXhrIf,
+ dependencies: [
+ 'generate-content.fn',
+ 'match-object-properties.fn',
+ 'parse-properties-to-match.fn',
+ 'safe-self.fn',
+ ],
+});
+function noXhrIf(
+ propsToMatch = '',
+ directive = ''
+) {
+ if ( typeof propsToMatch !== 'string' ) { return; }
+ const xhrInstances = new WeakMap();
+ const propNeedles = parsePropertiesToMatch(propsToMatch, 'url');
+ const log = propNeedles.size === 0 ? console.log.bind(console) : undefined;
+ const warOrigin = scriptletGlobals.get('warOrigin');
+ const headers = {
+ 'date': '',
+ 'content-type': '',
+ 'content-length': '',
+ };
+ self.XMLHttpRequest = class extends self.XMLHttpRequest {
+ open(method, url, ...args) {
+ if ( log !== undefined ) {
+ log(`uBO: xhr.open(${method}, ${url}, ${args.join(', ')})`);
+ return super.open(method, url, ...args);
+ }
+ xhrInstances.delete(this);
+ if ( warOrigin !== undefined && url.startsWith(warOrigin) ) {
+ return super.open(method, url, ...args);
+ }
+ const haystack = { method, url };
+ if ( matchObjectProperties(propNeedles, haystack) ) {
+ xhrInstances.set(this, haystack);
+ }
+ haystack.headers = Object.assign({}, headers);
+ return super.open(method, url, ...args);
+ }
+ send(...args) {
+ const haystack = xhrInstances.get(this);
+ if ( haystack === undefined ) {
+ return super.send(...args);
+ }
+ haystack.headers['date'] = (new Date()).toUTCString();
+ let promise = Promise.resolve({
+ xhr: this,
+ directive,
+ props: {
+ readyState: { value: 4 },
+ response: { value: '' },
+ responseText: { value: '' },
+ responseXML: { value: null },
+ responseURL: { value: haystack.url },
+ status: { value: 200 },
+ statusText: { value: 'OK' },
+ },
+ });
+ switch ( this.responseType ) {
+ case 'arraybuffer':
+ promise = promise.then(details => {
+ details.props.response.value = new ArrayBuffer(0);
+ return details;
+ });
+ haystack.headers['content-type'] = 'application/octet-stream';
+ break;
+ case 'blob':
+ promise = promise.then(details => {
+ details.props.response.value = new Blob([]);
+ return details;
+ });
+ haystack.headers['content-type'] = 'application/octet-stream';
+ break;
+ case 'document': {
+ promise = promise.then(details => {
+ const parser = new DOMParser();
+ const doc = parser.parseFromString('', 'text/html');
+ details.props.response.value = doc;
+ details.props.responseXML.value = doc;
+ return details;
+ });
+ haystack.headers['content-type'] = 'text/html';
+ break;
+ }
+ case 'json':
+ promise = promise.then(details => {
+ details.props.response.value = {};
+ details.props.responseText.value = '{}';
+ return details;
+ });
+ haystack.headers['content-type'] = 'application/json';
+ break;
+ default:
+ if ( directive === '' ) { break; }
+ promise = promise.then(details => {
+ return generateContentFn(details.directive).then(text => {
+ details.props.response.value = text;
+ details.props.responseText.value = text;
+ return details;
+ });
+ });
+ haystack.headers['content-type'] = 'text/plain';
+ break;
+ }
+ promise.then(details => {
+ haystack.headers['content-length'] = `${details.props.response.value}`.length;
+ Object.defineProperties(details.xhr, details.props);
+ details.xhr.dispatchEvent(new Event('readystatechange'));
+ details.xhr.dispatchEvent(new Event('load'));
+ details.xhr.dispatchEvent(new Event('loadend'));
+ });
+ }
+ getResponseHeader(headerName) {
+ const haystack = xhrInstances.get(this);
+ if ( haystack === undefined || this.readyState < this.HEADERS_RECEIVED ) {
+ return super.getResponseHeader(headerName);
+ }
+ const value = haystack.headers[headerName.toLowerCase()];
+ if ( value !== undefined && value !== '' ) { return value; }
+ return null;
+ }
+ getAllResponseHeaders() {
+ const haystack = xhrInstances.get(this);
+ if ( haystack === undefined || this.readyState < this.HEADERS_RECEIVED ) {
+ return super.getAllResponseHeaders();
+ }
+ const out = [];
+ for ( const [ name, value ] of Object.entries(haystack.headers) ) {
+ if ( !value ) { continue; }
+ out.push(`${name}: ${value}`);
+ }
+ if ( out.length !== 0 ) { out.push(''); }
+ return out.join('\r\n');
+ }
+ };
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'no-window-open-if.js',
+ aliases: [
+ 'nowoif.js',
+ 'prevent-window-open.js',
+ 'window.open-defuser.js',
+ ],
+ fn: noWindowOpenIf,
+ dependencies: [
+ 'safe-self.fn',
+ 'should-log.fn',
+ ],
+});
+function noWindowOpenIf(
+ pattern = '',
+ delay = '',
+ decoy = ''
+) {
+ const safe = safeSelf();
+ const targetMatchResult = pattern.startsWith('!') === false;
+ if ( targetMatchResult === false ) {
+ pattern = pattern.slice(1);
+ }
+ const rePattern = safe.patternToRegex(pattern);
+ let autoRemoveAfter = parseInt(delay);
+ if ( isNaN(autoRemoveAfter) ) {
+ autoRemoveAfter = -1;
+ }
+ const extraArgs = safe.getExtraArgs(Array.from(arguments), 3);
+ const logLevel = shouldLog(extraArgs);
+ const createDecoy = function(tag, urlProp, url) {
+ const decoyElem = document.createElement(tag);
+ decoyElem[urlProp] = url;
+ decoyElem.style.setProperty('height','1px', 'important');
+ decoyElem.style.setProperty('position','fixed', 'important');
+ decoyElem.style.setProperty('top','-1px', 'important');
+ decoyElem.style.setProperty('width','1px', 'important');
+ document.body.appendChild(decoyElem);
+ setTimeout(( ) => { decoyElem.remove(); }, autoRemoveAfter * 1000);
+ return decoyElem;
+ };
+ window.open = new Proxy(window.open, {
+ apply: function(target, thisArg, args) {
+ const haystack = args.join(' ');
+ if ( logLevel ) {
+ safe.uboLog('window.open:', haystack);
+ }
+ if ( rePattern.test(haystack) !== targetMatchResult ) {
+ return Reflect.apply(target, thisArg, args);
+ }
+ if ( autoRemoveAfter < 0 ) { return null; }
+ const decoyElem = decoy === 'obj'
+ ? createDecoy('object', 'data', ...args)
+ : createDecoy('iframe', 'src', ...args);
+ let popup = decoyElem.contentWindow;
+ if ( typeof popup === 'object' && popup !== null ) {
+ Object.defineProperty(popup, 'closed', { value: false });
+ } else {
+ const noopFunc = (function(){}).bind(self);
+ popup = new Proxy(self, {
+ get: function(target, prop) {
+ if ( prop === 'closed' ) { return false; }
+ const r = Reflect.get(...arguments);
+ if ( typeof r === 'function' ) { return noopFunc; }
+ return target[prop];
+ },
+ set: function() {
+ return Reflect.set(...arguments);
+ },
+ });
+ }
+ if ( logLevel ) {
+ popup = new Proxy(popup, {
+ get: function(target, prop) {
+ safe.uboLog('window.open / get', prop, '===', target[prop]);
+ return Reflect.get(...arguments);
+ },
+ set: function(target, prop, value) {
+ safe.uboLog('window.open / set', prop, '=', value);
+ return Reflect.set(...arguments);
+ },
+ });
+ }
+ return popup;
+ }
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'close-window.js',
+ aliases: [
+ 'window-close-if.js',
+ ],
+ fn: closeWindow,
+ world: 'ISOLATED',
+ dependencies: [
+ 'safe-self.fn',
+ ],
+});
+// https://github.com/uBlockOrigin/uAssets/issues/10323#issuecomment-992312847
+// https://github.com/AdguardTeam/Scriptlets/issues/158
+// https://github.com/uBlockOrigin/uBlock-issues/discussions/2270
+function closeWindow(
+ arg1 = ''
+) {
+ if ( typeof arg1 !== 'string' ) { return; }
+ const safe = safeSelf();
+ let subject = '';
+ if ( /^\/.*\/$/.test(arg1) ) {
+ subject = window.location.href;
+ } else if ( arg1 !== '' ) {
+ subject = `${window.location.pathname}${window.location.search}`;
+ }
+ try {
+ const re = safe.patternToRegex(arg1);
+ if ( re.test(subject) ) {
+ window.close();
+ }
+ } catch(ex) {
+ console.log(ex);
+ }
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'window.name-defuser.js',
+ fn: windowNameDefuser,
+});
+// https://github.com/gorhill/uBlock/issues/1228
+function windowNameDefuser() {
+ if ( window === window.top ) {
+ window.name = '';
+ }
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'overlay-buster.js',
+ fn: overlayBuster,
+});
+// Experimental: Generic nuisance overlay buster.
+// if this works well and proves to be useful, this may end up
+// as a stock tool in uBO's popup panel.
+function overlayBuster() {
+ if ( window !== window.top ) { return; }
+ var tstart;
+ var ttl = 30000;
+ var delay = 0;
+ var delayStep = 50;
+ var buster = function() {
+ var docEl = document.documentElement,
+ bodyEl = document.body,
+ vw = Math.min(docEl.clientWidth, window.innerWidth),
+ vh = Math.min(docEl.clientHeight, window.innerHeight),
+ tol = Math.min(vw, vh) * 0.05,
+ el = document.elementFromPoint(vw/2, vh/2),
+ style, rect;
+ for (;;) {
+ if ( el === null || el.parentNode === null || el === bodyEl ) {
+ break;
+ }
+ style = window.getComputedStyle(el);
+ if ( parseInt(style.zIndex, 10) >= 1000 || style.position === 'fixed' ) {
+ rect = el.getBoundingClientRect();
+ if ( rect.left <= tol && rect.top <= tol && (vw - rect.right) <= tol && (vh - rect.bottom) < tol ) {
+ el.parentNode.removeChild(el);
+ tstart = Date.now();
+ el = document.elementFromPoint(vw/2, vh/2);
+ bodyEl.style.setProperty('overflow', 'auto', 'important');
+ docEl.style.setProperty('overflow', 'auto', 'important');
+ continue;
+ }
+ }
+ el = el.parentNode;
+ }
+ if ( (Date.now() - tstart) < ttl ) {
+ delay = Math.min(delay + delayStep, 1000);
+ setTimeout(buster, delay);
+ }
+ };
+ var domReady = function(ev) {
+ if ( ev ) {
+ document.removeEventListener(ev.type, domReady);
+ }
+ tstart = Date.now();
+ setTimeout(buster, delay);
+ };
+ if ( document.readyState === 'loading' ) {
+ document.addEventListener('DOMContentLoaded', domReady);
+ } else {
+ domReady();
+ }
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'alert-buster.js',
+ fn: alertBuster,
+});
+// https://github.com/uBlockOrigin/uAssets/issues/8
+function alertBuster() {
+ window.alert = new Proxy(window.alert, {
+ apply: function(a) {
+ console.info(a);
+ },
+ get(target, prop, receiver) {
+ if ( prop === 'toString' ) {
+ return target.toString.bind(target);
+ }
+ return Reflect.get(target, prop, receiver);
+ },
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'nowebrtc.js',
+ fn: noWebrtc,
+});
+// Prevent web pages from using RTCPeerConnection(), and report attempts in console.
+function noWebrtc() {
+ var rtcName = window.RTCPeerConnection ? 'RTCPeerConnection' : (
+ window.webkitRTCPeerConnection ? 'webkitRTCPeerConnection' : ''
+ );
+ if ( rtcName === '' ) { return; }
+ var log = console.log.bind(console);
+ var pc = function(cfg) {
+ log('Document tried to create an RTCPeerConnection: %o', cfg);
+ };
+ const noop = function() {
+ };
+ pc.prototype = {
+ close: noop,
+ createDataChannel: noop,
+ createOffer: noop,
+ setRemoteDescription: noop,
+ toString: function() {
+ return '[object RTCPeerConnection]';
+ }
+ };
+ var z = window[rtcName];
+ window[rtcName] = pc.bind(window);
+ if ( z.prototype ) {
+ z.prototype.createDataChannel = function() {
+ return {
+ close: function() {},
+ send: function() {}
+ };
+ }.bind(null);
+ }
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'golem.de.js',
+ fn: golemDe,
+});
+// https://github.com/uBlockOrigin/uAssets/issues/88
+function golemDe() {
+ const rael = window.addEventListener;
+ window.addEventListener = function(a, b) {
+ rael(...arguments);
+ let haystack;
+ try {
+ haystack = b.toString();
+ } catch(ex) {
+ }
+ if (
+ typeof haystack === 'string' &&
+ /^\s*function\s*\(\)\s*\{\s*window\.clearTimeout\(r\)\s*\}\s*$/.test(haystack)
+ ) {
+ b();
+ }
+ }.bind(window);
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'disable-newtab-links.js',
+ fn: disableNewtabLinks,
+});
+// https://github.com/uBlockOrigin/uAssets/issues/913
+function disableNewtabLinks() {
+ document.addEventListener('click', function(ev) {
+ var target = ev.target;
+ while ( target !== null ) {
+ if ( target.localName === 'a' && target.hasAttribute('target') ) {
+ ev.stopPropagation();
+ ev.preventDefault();
+ break;
+ }
+ target = target.parentNode;
+ }
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'remove-cookie.js',
+ aliases: [
+ 'cookie-remover.js',
+ ],
+ fn: cookieRemover,
+ world: 'ISOLATED',
+ dependencies: [
+ 'safe-self.fn',
+ ],
+});
+// https://github.com/NanoAdblocker/NanoFilters/issues/149
+function cookieRemover(
+ needle = ''
+) {
+ if ( typeof needle !== 'string' ) { return; }
+ const safe = safeSelf();
+ const reName = safe.patternToRegex(needle);
+ const extraArgs = safe.getExtraArgs(Array.from(arguments), 1);
+ const throttle = (fn, ms = 500) => {
+ if ( throttle.timer !== undefined ) { return; }
+ throttle.timer = setTimeout(( ) => {
+ throttle.timer = undefined;
+ fn();
+ }, ms);
+ };
+ const removeCookie = ( ) => {
+ document.cookie.split(';').forEach(cookieStr => {
+ const pos = cookieStr.indexOf('=');
+ if ( pos === -1 ) { return; }
+ const cookieName = cookieStr.slice(0, pos).trim();
+ if ( reName.test(cookieName) === false ) { return; }
+ const part1 = cookieName + '=';
+ const part2a = '; domain=' + document.location.hostname;
+ const part2b = '; domain=.' + document.location.hostname;
+ let part2c, part2d;
+ const domain = document.domain;
+ if ( domain ) {
+ if ( domain !== document.location.hostname ) {
+ part2c = '; domain=.' + domain;
+ }
+ if ( domain.startsWith('www.') ) {
+ part2d = '; domain=' + domain.replace('www', '');
+ }
+ }
+ const part3 = '; path=/';
+ const part4 = '; Max-Age=-1000; expires=Thu, 01 Jan 1970 00:00:00 GMT';
+ document.cookie = part1 + part4;
+ document.cookie = part1 + part2a + part4;
+ document.cookie = part1 + part2b + part4;
+ document.cookie = part1 + part3 + part4;
+ document.cookie = part1 + part2a + part3 + part4;
+ document.cookie = part1 + part2b + part3 + part4;
+ if ( part2c !== undefined ) {
+ document.cookie = part1 + part2c + part3 + part4;
+ }
+ if ( part2d !== undefined ) {
+ document.cookie = part1 + part2d + part3 + part4;
+ }
+ });
+ };
+ removeCookie();
+ window.addEventListener('beforeunload', removeCookie);
+ if ( typeof extraArgs.when !== 'string' ) { return; }
+ const supportedEventTypes = [ 'scroll', 'keydown' ];
+ const eventTypes = extraArgs.when.split(/\s/);
+ for ( const type of eventTypes ) {
+ if ( supportedEventTypes.includes(type) === false ) { continue; }
+ document.addEventListener(type, ( ) => {
+ throttle(removeCookie);
+ }, { passive: true });
+ }
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'xml-prune.js',
+ fn: xmlPrune,
+ dependencies: [
+ 'safe-self.fn',
+ 'should-log.fn',
+ ],
+});
+function xmlPrune(
+ selector = '',
+ selectorCheck = '',
+ urlPattern = ''
+) {
+ if ( typeof selector !== 'string' ) { return; }
+ if ( selector === '' ) { return; }
+ const safe = safeSelf();
+ const reUrl = safe.patternToRegex(urlPattern);
+ const extraArgs = safe.getExtraArgs(Array.from(arguments), 3);
+ const log = shouldLog(extraArgs) ? ((...args) => { safe.uboLog(...args); }) : (( ) => { });
+ const queryAll = (xmlDoc, selector) => {
+ const isXpath = /^xpath\(.+\)$/.test(selector);
+ if ( isXpath === false ) {
+ return Array.from(xmlDoc.querySelectorAll(selector));
+ }
+ const xpr = xmlDoc.evaluate(
+ selector.slice(6, -1),
+ xmlDoc,
+ null,
+ XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
+ null
+ );
+ const out = [];
+ for ( let i = 0; i < xpr.snapshotLength; i++ ) {
+ const node = xpr.snapshotItem(i);
+ out.push(node);
+ }
+ return out;
+ };
+ const pruneFromDoc = xmlDoc => {
+ try {
+ if ( selectorCheck !== '' && xmlDoc.querySelector(selectorCheck) === null ) {
+ return xmlDoc;
+ }
+ if ( extraArgs.logdoc ) {
+ const serializer = new XMLSerializer();
+ log(`xmlPrune: document is\n\t${serializer.serializeToString(xmlDoc)}`);
+ }
+ const items = queryAll(xmlDoc, selector);
+ if ( items.length === 0 ) { return xmlDoc; }
+ log(`xmlPrune: removing ${items.length} items`);
+ for ( const item of items ) {
+ if ( item.nodeType === 1 ) {
+ item.remove();
+ } else if ( item.nodeType === 2 ) {
+ item.ownerElement.removeAttribute(item.nodeName);
+ }
+ log(`xmlPrune: ${item.constructor.name}.${item.nodeName} removed`);
+ }
+ } catch(ex) {
+ log(ex);
+ }
+ return xmlDoc;
+ };
+ const pruneFromText = text => {
+ if ( (/^\s*</.test(text) && />\s*$/.test(text)) === false ) {
+ return text;
+ }
+ try {
+ const xmlParser = new DOMParser();
+ const xmlDoc = xmlParser.parseFromString(text, 'text/xml');
+ pruneFromDoc(xmlDoc);
+ const serializer = new XMLSerializer();
+ text = serializer.serializeToString(xmlDoc);
+ } catch(ex) {
+ }
+ return text;
+ };
+ const urlFromArg = arg => {
+ if ( typeof arg === 'string' ) { return arg; }
+ if ( arg instanceof Request ) { return arg.url; }
+ return String(arg);
+ };
+ self.fetch = new Proxy(self.fetch, {
+ apply: function(target, thisArg, args) {
+ const fetchPromise = Reflect.apply(target, thisArg, args);
+ if ( reUrl.test(urlFromArg(args[0])) === false ) {
+ return fetchPromise;
+ }
+ return fetchPromise.then(responseBefore => {
+ const response = responseBefore.clone();
+ return response.text().then(text => {
+ const responseAfter = new Response(pruneFromText(text), {
+ status: responseBefore.status,
+ statusText: responseBefore.statusText,
+ headers: responseBefore.headers,
+ });
+ Object.defineProperties(responseAfter, {
+ ok: { value: responseBefore.ok },
+ redirected: { value: responseBefore.redirected },
+ type: { value: responseBefore.type },
+ url: { value: responseBefore.url },
+ });
+ return responseAfter;
+ }).catch(( ) =>
+ responseBefore
+ );
+ });
+ }
+ });
+ self.XMLHttpRequest.prototype.open = new Proxy(self.XMLHttpRequest.prototype.open, {
+ apply: async (target, thisArg, args) => {
+ if ( reUrl.test(urlFromArg(args[1])) === false ) {
+ return Reflect.apply(target, thisArg, args);
+ }
+ thisArg.addEventListener('readystatechange', function() {
+ if ( thisArg.readyState !== 4 ) { return; }
+ const type = thisArg.responseType;
+ if (
+ type === 'document' ||
+ type === '' && thisArg.responseXML instanceof XMLDocument
+ ) {
+ pruneFromDoc(thisArg.responseXML);
+ const serializer = new XMLSerializer();
+ const textout = serializer.serializeToString(thisArg.responseXML);
+ Object.defineProperty(thisArg, 'responseText', { value: textout });
+ return;
+ }
+ if (
+ type === 'text' ||
+ type === '' && typeof thisArg.responseText === 'string'
+ ) {
+ const textin = thisArg.responseText;
+ const textout = pruneFromText(textin);
+ if ( textout === textin ) { return; }
+ Object.defineProperty(thisArg, 'response', { value: textout });
+ Object.defineProperty(thisArg, 'responseText', { value: textout });
+ return;
+ }
+ });
+ return Reflect.apply(target, thisArg, args);
+ }
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'm3u-prune.js',
+ fn: m3uPrune,
+ dependencies: [
+ 'safe-self.fn',
+ 'should-log.fn',
+ ],
+});
+// https://en.wikipedia.org/wiki/M3U
+function m3uPrune(
+ m3uPattern = '',
+ urlPattern = ''
+) {
+ if ( typeof m3uPattern !== 'string' ) { return; }
+ const safe = safeSelf();
+ const options = safe.getExtraArgs(Array.from(arguments), 2);
+ const logLevel = shouldLog(options);
+ const uboLog = logLevel ? ((...args) => safe.uboLog(...args)) : (( ) => { });
+ const regexFromArg = arg => {
+ if ( arg === '' ) { return /^/; }
+ const match = /^\/(.+)\/([gms]*)$/.exec(arg);
+ if ( match !== null ) {
+ let flags = match[2] || '';
+ if ( flags.includes('m') ) { flags += 's'; }
+ return new RegExp(match[1], flags);
+ }
+ return new RegExp(
+ arg.replace(/[.+?^${}()|[\]\\]/g, '\\$&').replace(/\*+/g, '.*?')
+ );
+ };
+ const reM3u = regexFromArg(m3uPattern);
+ const reUrl = regexFromArg(urlPattern);
+ const pruneSpliceoutBlock = (lines, i) => {
+ if ( lines[i].startsWith('#EXT-X-CUE:TYPE="SpliceOut"') === false ) {
+ return false;
+ }
+ uboLog('m3u-prune: discarding', `\n\t${lines[i]}`);
+ lines[i] = undefined; i += 1;
+ if ( lines[i].startsWith('#EXT-X-ASSET:CAID') ) {
+ uboLog(`\t${lines[i]}`);
+ lines[i] = undefined; i += 1;
+ }
+ if ( lines[i].startsWith('#EXT-X-SCTE35:') ) {
+ uboLog(`\t${lines[i]}`);
+ lines[i] = undefined; i += 1;
+ }
+ if ( lines[i].startsWith('#EXT-X-CUE-IN') ) {
+ uboLog(`\t${lines[i]}`);
+ lines[i] = undefined; i += 1;
+ }
+ if ( lines[i].startsWith('#EXT-X-SCTE35:') ) {
+ uboLog(`\t${lines[i]}`);
+ lines[i] = undefined; i += 1;
+ }
+ return true;
+ };
+ const pruneInfBlock = (lines, i) => {
+ if ( lines[i].startsWith('#EXTINF') === false ) { return false; }
+ if ( reM3u.test(lines[i+1]) === false ) { return false; }
+ uboLog('m3u-prune: discarding', `\n\t${lines[i]}, \n\t${lines[i+1]}`);
+ lines[i] = lines[i+1] = undefined; i += 2;
+ if ( lines[i].startsWith('#EXT-X-DISCONTINUITY') ) {
+ uboLog(`\t${lines[i]}`);
+ lines[i] = undefined; i += 1;
+ }
+ return true;
+ };
+ const pruner = text => {
+ if ( (/^\s*#EXTM3U/.test(text)) === false ) { return text; }
+ if ( reM3u.multiline ) {
+ reM3u.lastIndex = 0;
+ for (;;) {
+ const match = reM3u.exec(text);
+ if ( match === null ) { break; }
+ let discard = match[0];
+ let before = text.slice(0, match.index);
+ if (
+ /^[\n\r]+/.test(discard) === false &&
+ /[\n\r]+$/.test(before) === false
+ ) {
+ const startOfLine = /[^\n\r]+$/.exec(before);
+ if ( startOfLine !== null ) {
+ before = before.slice(0, startOfLine.index);
+ discard = startOfLine[0] + discard;
+ }
+ }
+ let after = text.slice(match.index + match[0].length);
+ if (
+ /[\n\r]+$/.test(discard) === false &&
+ /^[\n\r]+/.test(after) === false
+ ) {
+ const endOfLine = /^[^\n\r]+/.exec(after);
+ if ( endOfLine !== null ) {
+ after = after.slice(endOfLine.index);
+ discard += discard + endOfLine[0];
+ }
+ }
+ text = before.trim() + '\n' + after.trim();
+ reM3u.lastIndex = before.length + 1;
+ uboLog('m3u-prune: discarding\n',
+ discard.split(/\n+/).map(s => `\t${s}`).join('\n')
+ );
+ if ( reM3u.global === false ) { break; }
+ }
+ return text;
+ }
+ const lines = text.split(/\n\r|\n|\r/);
+ for ( let i = 0; i < lines.length; i++ ) {
+ if ( lines[i] === undefined ) { continue; }
+ if ( pruneSpliceoutBlock(lines, i) ) { continue; }
+ if ( pruneInfBlock(lines, i) ) { continue; }
+ }
+ return lines.filter(l => l !== undefined).join('\n');
+ };
+ const urlFromArg = arg => {
+ if ( typeof arg === 'string' ) { return arg; }
+ if ( arg instanceof Request ) { return arg.url; }
+ return String(arg);
+ };
+ const realFetch = self.fetch;
+ self.fetch = new Proxy(self.fetch, {
+ apply: function(target, thisArg, args) {
+ if ( reUrl.test(urlFromArg(args[0])) === false ) {
+ return Reflect.apply(target, thisArg, args);
+ }
+ return realFetch(...args).then(realResponse =>
+ realResponse.text().then(text =>
+ new Response(pruner(text), {
+ status: realResponse.status,
+ statusText: realResponse.statusText,
+ headers: realResponse.headers,
+ })
+ )
+ );
+ }
+ });
+ self.XMLHttpRequest.prototype.open = new Proxy(self.XMLHttpRequest.prototype.open, {
+ apply: async (target, thisArg, args) => {
+ if ( reUrl.test(urlFromArg(args[1])) === false ) {
+ return Reflect.apply(target, thisArg, args);
+ }
+ thisArg.addEventListener('readystatechange', function() {
+ if ( thisArg.readyState !== 4 ) { return; }
+ const type = thisArg.responseType;
+ if ( type !== '' && type !== 'text' ) { return; }
+ const textin = thisArg.responseText;
+ const textout = pruner(textin);
+ if ( textout === textin ) { return; }
+ Object.defineProperty(thisArg, 'response', { value: textout });
+ Object.defineProperty(thisArg, 'responseText', { value: textout });
+ });
+ return Reflect.apply(target, thisArg, args);
+ }
+ });
+}
+
+/*******************************************************************************
+ *
+ * @scriptlet href-sanitizer
+ *
+ * @description
+ * Set the `href` attribute to a value found in the DOM at, or below the
+ * targeted `a` element.
+ *
+ * ### Syntax
+ *
+ * ```text
+ * example.org##+js(href-sanitizer, selector [, source])
+ * ```
+ *
+ * - `selector`: required, CSS selector, specifies `a` elements for which the
+ * `href` attribute must be overridden.
+ * - `source`: optional, default to `text`, specifies from where to get the
+ * value which will override the `href` attribute.
+ * - `text`: the value will be the first valid URL found in the text
+ * content of the targeted `a` element.
+ * - `[attr]`: the value will be the attribute _attr_ of the targeted `a`
+ * element.
+ * - `?param`: the value will be the query parameter _param_ of the URL
+ * found in the `href` attribute of the targeted `a` element.
+ *
+ * ### Examples
+ *
+ * example.org##+js(href-sanitizer, a)
+ * example.org##+js(href-sanitizer, a[title], [title])
+ * example.org##+js(href-sanitizer, a[href*="/away.php?to="], ?to)
+ *
+ * */
+
+builtinScriptlets.push({
+ name: 'href-sanitizer.js',
+ fn: hrefSanitizer,
+ world: 'ISOLATED',
+ dependencies: [
+ 'run-at.fn',
+ ],
+});
+function hrefSanitizer(
+ selector = '',
+ source = ''
+) {
+ if ( typeof selector !== 'string' ) { return; }
+ if ( selector === '' ) { return; }
+ if ( source === '' ) { source = 'text'; }
+ const sanitizeCopycats = (href, text) => {
+ let elems = [];
+ try {
+ elems = document.querySelectorAll(`a[href="${href}"`);
+ }
+ catch(ex) {
+ }
+ for ( const elem of elems ) {
+ elem.setAttribute('href', text);
+ }
+ };
+ const validateURL = text => {
+ if ( text === '' ) { return ''; }
+ if ( /[^\x21-\x7e]/.test(text) ) { return ''; }
+ try {
+ const url = new URL(text, document.location);
+ return url.href;
+ } catch(ex) {
+ }
+ return '';
+ };
+ const extractText = (elem, source) => {
+ if ( /^\[.*\]$/.test(source) ) {
+ return elem.getAttribute(source.slice(1,-1).trim()) || '';
+ }
+ if ( source.startsWith('?') ) {
+ try {
+ const url = new URL(elem.href, document.location);
+ return url.searchParams.get(source.slice(1)) || '';
+ } catch(x) {
+ }
+ return '';
+ }
+ if ( source === 'text' ) {
+ return elem.textContent
+ .replace(/^[^\x21-\x7e]+/, '') // remove leading invalid characters
+ .replace(/[^\x21-\x7e]+$/, '') // remove trailing invalid characters
+ ;
+ }
+ return '';
+ };
+ const sanitize = ( ) => {
+ let elems = [];
+ try {
+ elems = document.querySelectorAll(selector);
+ }
+ catch(ex) {
+ return false;
+ }
+ for ( const elem of elems ) {
+ if ( elem.localName !== 'a' ) { continue; }
+ if ( elem.hasAttribute('href') === false ) { continue; }
+ const href = elem.getAttribute('href');
+ const text = extractText(elem, source);
+ const hrefAfter = validateURL(text);
+ if ( hrefAfter === '' ) { continue; }
+ if ( hrefAfter === href ) { continue; }
+ elem.setAttribute('href', hrefAfter);
+ sanitizeCopycats(href, hrefAfter);
+ }
+ return true;
+ };
+ let observer, timer;
+ const onDomChanged = mutations => {
+ if ( timer !== undefined ) { return; }
+ let shouldSanitize = false;
+ for ( const mutation of mutations ) {
+ if ( mutation.addedNodes.length === 0 ) { continue; }
+ for ( const node of mutation.addedNodes ) {
+ if ( node.nodeType !== 1 ) { continue; }
+ shouldSanitize = true;
+ break;
+ }
+ if ( shouldSanitize ) { break; }
+ }
+ if ( shouldSanitize === false ) { return; }
+ timer = self.requestAnimationFrame(( ) => {
+ timer = undefined;
+ sanitize();
+ });
+ };
+ const start = ( ) => {
+ if ( sanitize() === false ) { return; }
+ observer = new MutationObserver(onDomChanged);
+ observer.observe(document.body, {
+ subtree: true,
+ childList: true,
+ });
+ };
+ runAt(( ) => { start(); }, 'interactive');
+}
+
+/*******************************************************************************
+ *
+ * @scriptlet call-nothrow
+ *
+ * @description
+ * Prevent a function call from throwing. The function will be called, however
+ * should it throw, the scriptlet will silently process the exception and
+ * returns as if no exception has occurred.
+ *
+ * ### Syntax
+ *
+ * ```text
+ * example.org##+js(call-nothrow, propertyChain)
+ * ```
+ *
+ * - `propertyChain`: a chain of dot-separated properties which leads to the
+ * function to be trapped.
+ *
+ * ### Examples
+ *
+ * example.org##+js(call-nothrow, Object.defineProperty)
+ *
+ * */
+
+builtinScriptlets.push({
+ name: 'call-nothrow.js',
+ fn: callNothrow,
+});
+function callNothrow(
+ chain = ''
+) {
+ if ( typeof chain !== 'string' ) { return; }
+ if ( chain === '' ) { return; }
+ const parts = chain.split('.');
+ let owner = window, prop;
+ for (;;) {
+ prop = parts.shift();
+ if ( parts.length === 0 ) { break; }
+ owner = owner[prop];
+ if ( owner instanceof Object === false ) { return; }
+ }
+ if ( prop === '' ) { return; }
+ const fn = owner[prop];
+ if ( typeof fn !== 'function' ) { return; }
+ owner[prop] = new Proxy(fn, {
+ apply: function(...args) {
+ let r;
+ try {
+ r = Reflect.apply(...args);
+ } catch(ex) {
+ }
+ return r;
+ },
+ });
+}
+
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'spoof-css.js',
+ fn: spoofCSS,
+ dependencies: [
+ 'safe-self.fn',
+ ],
+});
+function spoofCSS(
+ selector,
+ ...args
+) {
+ if ( typeof selector !== 'string' ) { return; }
+ if ( selector === '' ) { return; }
+ const toCamelCase = s => s.replace(/-[a-z]/g, s => s.charAt(1).toUpperCase());
+ const propToValueMap = new Map();
+ for ( let i = 0; i < args.length; i += 2 ) {
+ if ( typeof args[i+0] !== 'string' ) { break; }
+ if ( args[i+0] === '' ) { break; }
+ if ( typeof args[i+1] !== 'string' ) { break; }
+ propToValueMap.set(toCamelCase(args[i+0]), args[i+1]);
+ }
+ const safe = safeSelf();
+ const canDebug = scriptletGlobals.has('canDebug');
+ const shouldDebug = canDebug && propToValueMap.get('debug') || 0;
+ const shouldLog = canDebug && propToValueMap.has('log') || 0;
+ const spoofStyle = (prop, real) => {
+ const normalProp = toCamelCase(prop);
+ const shouldSpoof = propToValueMap.has(normalProp);
+ const value = shouldSpoof ? propToValueMap.get(normalProp) : real;
+ if ( shouldLog === 2 || shouldSpoof && shouldLog === 1 ) {
+ safe.uboLog(prop, value);
+ }
+ return value;
+ };
+ self.getComputedStyle = new Proxy(self.getComputedStyle, {
+ apply: function(target, thisArg, args) {
+ if ( shouldDebug !== 0 ) { debugger; } // jshint ignore: line
+ const style = Reflect.apply(target, thisArg, args);
+ const targetElements = new WeakSet(document.querySelectorAll(selector));
+ if ( targetElements.has(args[0]) === false ) { return style; }
+ const proxiedStyle = new Proxy(style, {
+ get(target, prop, receiver) {
+ if ( typeof target[prop] === 'function' ) {
+ if ( prop === 'getPropertyValue' ) {
+ return (function(prop) {
+ return spoofStyle(prop, target[prop]);
+ }).bind(target);
+ }
+ return target[prop].bind(target);
+ }
+ return spoofStyle(prop, Reflect.get(target, prop, receiver));
+ },
+ getOwnPropertyDescriptor(target, prop) {
+ if ( propToValueMap.has(prop) ) {
+ return {
+ configurable: true,
+ enumerable: true,
+ value: propToValueMap.get(prop),
+ writable: true,
+ };
+ }
+ return Reflect.getOwnPropertyDescriptor(target, prop);
+ },
+ });
+ return proxiedStyle;
+ },
+ get(target, prop, receiver) {
+ if ( prop === 'toString' ) {
+ return target.toString.bind(target);
+ }
+ return Reflect.get(target, prop, receiver);
+ },
+ });
+ Element.prototype.getBoundingClientRect = new Proxy(Element.prototype.getBoundingClientRect, {
+ apply: function(target, thisArg, args) {
+ if ( shouldDebug !== 0 ) { debugger; } // jshint ignore: line
+ const rect = Reflect.apply(target, thisArg, args);
+ const targetElements = new WeakSet(document.querySelectorAll(selector));
+ if ( targetElements.has(thisArg) === false ) { return rect; }
+ let { height, width } = rect;
+ if ( propToValueMap.has('width') ) {
+ width = parseFloat(propToValueMap.get('width'));
+ }
+ if ( propToValueMap.has('height') ) {
+ height = parseFloat(propToValueMap.get('height'));
+ }
+ return new self.DOMRect(rect.x, rect.y, width, height);
+ },
+ get(target, prop, receiver) {
+ if ( prop === 'toString' ) {
+ return target.toString.bind(target);
+ }
+ return Reflect.get(target, prop, receiver);
+ },
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'remove-node-text.js',
+ aliases: [
+ 'rmnt.js',
+ ],
+ fn: removeNodeText,
+ world: 'ISOLATED',
+ dependencies: [
+ 'replace-node-text.fn',
+ ],
+});
+function removeNodeText(
+ nodeName,
+ condition,
+ ...extraArgs
+) {
+ replaceNodeTextFn(nodeName, '', '', 'condition', condition || '', ...extraArgs);
+}
+
+/*******************************************************************************
+ *
+ * set-cookie.js
+ *
+ * Set specified cookie to a specific value.
+ *
+ * Reference:
+ * https://github.com/AdguardTeam/Scriptlets/blob/master/src/scriptlets/set-cookie.js
+ *
+ **/
+
+builtinScriptlets.push({
+ name: 'set-cookie.js',
+ fn: setCookie,
+ world: 'ISOLATED',
+ dependencies: [
+ 'safe-self.fn',
+ 'set-cookie.fn',
+ ],
+});
+function setCookie(
+ name = '',
+ value = '',
+ path = ''
+) {
+ if ( name === '' ) { return; }
+ name = encodeURIComponent(name);
+
+ const validValues = [
+ 'accept', 'reject',
+ 'accepted', 'rejected', 'notaccepted',
+ 'allow', 'deny',
+ 'allowed', 'disallow',
+ 'enable', 'disable',
+ 'enabled', 'disabled',
+ 'ok',
+ 'on', 'off',
+ 'true', 't', 'false', 'f',
+ 'yes', 'y', 'no', 'n',
+ 'necessary', 'required',
+ ];
+ const normalized = value.toLowerCase();
+ const match = /^("?)(.+)\1$/.exec(normalized);
+ const unquoted = match && match[2] || normalized;
+ if ( validValues.includes(unquoted) === false ) {
+ if ( /^\d+$/.test(unquoted) === false ) { return; }
+ const n = parseInt(value, 10);
+ if ( n > 15 ) { return; }
+ }
+
+ setCookieFn(
+ false,
+ name,
+ value,
+ '',
+ path,
+ safeSelf().getExtraArgs(Array.from(arguments), 3)
+ );
+}
+
+// For compatibility with AdGuard
+builtinScriptlets.push({
+ name: 'set-cookie-reload.js',
+ fn: setCookieReload,
+ world: 'ISOLATED',
+ dependencies: [
+ 'set-cookie.js',
+ ],
+});
+function setCookieReload(name, value, path, ...args) {
+ setCookie(name, value, path, 'reload', '1', ...args);
+}
+
+/*******************************************************************************
+ *
+ * set-local-storage-item.js
+ * set-session-storage-item.js
+ *
+ * Set a local/session storage entry to a specific, allowed value.
+ *
+ * Reference:
+ * https://github.com/AdguardTeam/Scriptlets/blob/master/src/scriptlets/set-local-storage-item.js
+ * https://github.com/AdguardTeam/Scriptlets/blob/master/src/scriptlets/set-session-storage-item.js
+ *
+ **/
+
+builtinScriptlets.push({
+ name: 'set-local-storage-item.js',
+ fn: setLocalStorageItem,
+ world: 'ISOLATED',
+ dependencies: [
+ 'set-local-storage-item.fn',
+ ],
+});
+function setLocalStorageItem(key = '', value = '') {
+ setLocalStorageItemFn('local', false, key, value);
+}
+
+builtinScriptlets.push({
+ name: 'set-session-storage-item.js',
+ fn: setSessionStorageItem,
+ world: 'ISOLATED',
+ dependencies: [
+ 'set-local-storage-item.fn',
+ ],
+});
+function setSessionStorageItem(key = '', value = '') {
+ setLocalStorageItemFn('session', false, key, value);
+}
+
+/*******************************************************************************
+ *
+ * @scriptlet set-attr
+ *
+ * @description
+ * Sets the specified attribute on the specified elements. This scriptlet runs
+ * once when the page loads then afterward on DOM mutations.
+
+ * Reference: https://github.com/AdguardTeam/Scriptlets/blob/master/src/scriptlets/set-attr.js
+ *
+ * ### Syntax
+ *
+ * ```text
+ * example.org##+js(set-attr, selector, attr [, value])
+ * ```
+ *
+ * - `selector`: CSS selector of DOM elements for which the attribute `attr`
+ * must be modified.
+ * - `attr`: the name of the attribute to modify
+ * - `value`: the value to assign to the target attribute. Possible values:
+ * - `''`: empty string (default)
+ * - `true`
+ * - `false`
+ * - positive decimal integer 0 <= value < 32768
+ * - `[other]`: copy the value from attribute `other` on the same element
+ * */
+
+builtinScriptlets.push({
+ name: 'set-attr.js',
+ fn: setAttr,
+ world: 'ISOLATED',
+ dependencies: [
+ 'run-at.fn',
+ ],
+});
+function setAttr(
+ selector = '',
+ attr = '',
+ value = ''
+) {
+ if ( typeof selector !== 'string' ) { return; }
+ if ( selector === '' ) { return; }
+
+ const validValues = [ '', 'false', 'true' ];
+ let copyFrom = '';
+
+ if ( validValues.includes(value.toLowerCase()) === false ) {
+ if ( /^\d+$/.test(value) ) {
+ const n = parseInt(value, 10);
+ if ( n >= 32768 ) { return; }
+ value = `${n}`;
+ } else if ( /^\[.+\]$/.test(value) ) {
+ copyFrom = value.slice(1, -1);
+ } else {
+ return;
+ }
+ }
+
+ const extractValue = elem => {
+ if ( copyFrom !== '' ) {
+ return elem.getAttribute(copyFrom) || '';
+ }
+ return value;
+ };
+
+ const applySetAttr = ( ) => {
+ const elems = [];
+ try {
+ elems.push(...document.querySelectorAll(selector));
+ }
+ catch(ex) {
+ return false;
+ }
+ for ( const elem of elems ) {
+ const before = elem.getAttribute(attr);
+ const after = extractValue(elem);
+ if ( after === before ) { continue; }
+ elem.setAttribute(attr, after);
+ }
+ return true;
+ };
+ let observer, timer;
+ const onDomChanged = mutations => {
+ if ( timer !== undefined ) { return; }
+ let shouldWork = false;
+ for ( const mutation of mutations ) {
+ if ( mutation.addedNodes.length === 0 ) { continue; }
+ for ( const node of mutation.addedNodes ) {
+ if ( node.nodeType !== 1 ) { continue; }
+ shouldWork = true;
+ break;
+ }
+ if ( shouldWork ) { break; }
+ }
+ if ( shouldWork === false ) { return; }
+ timer = self.requestAnimationFrame(( ) => {
+ timer = undefined;
+ applySetAttr();
+ });
+ };
+ const start = ( ) => {
+ if ( applySetAttr() === false ) { return; }
+ observer = new MutationObserver(onDomChanged);
+ observer.observe(document.body, {
+ subtree: true,
+ childList: true,
+ });
+ };
+ runAt(( ) => { start(); }, 'idle');
+}
+
+/*******************************************************************************
+ *
+ * @scriptlet prevent-canvas
+ *
+ * @description
+ * Prevent usage of specific or all (default) canvas APIs.
+ *
+ * ### Syntax
+ *
+ * ```text
+ * example.com##+js(prevent-canvas [, contextType])
+ * ```
+ *
+ * - `contextType`: A specific type of canvas API to prevent (default to all
+ * APIs). Can be a string or regex which will be matched against the type
+ * used in getContext() call. Prepend with `!` to test for no-match.
+ *
+ * ### Examples
+ *
+ * 1. Prevent `example.com` from accessing all canvas APIs
+ *
+ * ```adblock
+ * example.com##+js(prevent-canvas)
+ * ```
+ *
+ * 2. Prevent access to any flavor of WebGL API, everywhere
+ *
+ * ```adblock
+ * *##+js(prevent-canvas, /webgl/)
+ * ```
+ *
+ * 3. Prevent `example.com` from accessing any flavor of canvas API except `2d`
+ *
+ * ```adblock
+ * example.com##+js(prevent-canvas, !2d)
+ * ```
+ *
+ * ### References
+ *
+ * https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext
+ *
+ * */
+
+builtinScriptlets.push({
+ name: 'prevent-canvas.js',
+ fn: preventCanvas,
+ dependencies: [
+ 'safe-self.fn',
+ ],
+});
+function preventCanvas(
+ contextType = ''
+) {
+ const safe = safeSelf();
+ const pattern = safe.initPattern(contextType, { canNegate: true });
+ const proto = globalThis.HTMLCanvasElement.prototype;
+ proto.getContext = new Proxy(proto.getContext, {
+ apply(target, thisArg, args) {
+ if ( safe.testPattern(pattern, args[0]) ) { return null; }
+ return Reflect.apply(target, thisArg, args);
+ }
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'multiup.js',
+ fn: multiup,
+ world: 'ISOLATED',
+});
+function multiup() {
+ const handler = ev => {
+ const target = ev.target;
+ if ( target.matches('button[link]') === false ) { return; }
+ const ancestor = target.closest('form');
+ if ( ancestor === null ) { return; }
+ if ( ancestor !== target.parentElement ) { return; }
+ const link = (target.getAttribute('link') || '').trim();
+ if ( link === '' ) { return; }
+ ev.preventDefault();
+ ev.stopPropagation();
+ document.location.href = link;
+ };
+ document.addEventListener('click', handler, { capture: true });
+}
+
+
+/*******************************************************************************
+ *
+ * Scriplets below this section are only available for filter lists from
+ * trusted sources. They all have the property `requiresTrust` set to `true`.
+ *
+ * Trusted sources are:
+ *
+ * - uBO's own filter lists, which name starts with "uBlock filters – ", and
+ * maintained at: https://github.com/uBlockOrigin/uAssets
+ *
+ * - The user's own filters as seen in "My filters" pane in uBO's dashboard.
+ *
+ * The trustworthiness of filters using these privileged scriptlets are
+ * evaluated at filter list compiled time: when a filter using one of the
+ * privileged scriptlet originates from a non-trusted filter list source, it
+ * is discarded at compile time, specifically from within:
+ *
+ * - Source: ./src/js/scriptlet-filtering.js
+ * - Method: scriptletFilteringEngine.compile(), via normalizeRawFilter()
+ *
+ **/
+
+/*******************************************************************************
+ *
+ * replace-node-text.js
+ *
+ * Replace text instance(s) with another text instance inside specific
+ * DOM nodes. By default, the scriplet stops and quits at the interactive
+ * stage of a document.
+ *
+ * See commit messages for usage:
+ * - https://github.com/gorhill/uBlock/commit/99ce027fd702
+ * - https://github.com/gorhill/uBlock/commit/41876336db48
+ *
+ **/
+
+builtinScriptlets.push({
+ name: 'trusted-replace-node-text.js',
+ requiresTrust: true,
+ aliases: [
+ 'trusted-rpnt.js',
+ 'replace-node-text.js',
+ 'rpnt.js',
+ ],
+ fn: replaceNodeText,
+ world: 'ISOLATED',
+ dependencies: [
+ 'replace-node-text.fn',
+ ],
+});
+function replaceNodeText(
+ nodeName,
+ pattern,
+ replacement,
+ ...extraArgs
+) {
+ replaceNodeTextFn(nodeName, pattern, replacement, ...extraArgs);
+}
+
+/*******************************************************************************
+ *
+ * trusted-set-constant.js
+ *
+ * Set specified property to any value. This is essentially the same as
+ * set-constant.js, but with no restriction as to which values can be used.
+ *
+ **/
+
+builtinScriptlets.push({
+ name: 'trusted-set-constant.js',
+ requiresTrust: true,
+ aliases: [
+ 'trusted-set.js',
+ ],
+ fn: trustedSetConstant,
+ dependencies: [
+ 'set-constant-core.fn'
+ ],
+});
+function trustedSetConstant(
+ ...args
+) {
+ setConstantCore(true, ...args);
+}
+
+/*******************************************************************************
+ *
+ * trusted-set-cookie.js
+ *
+ * Set specified cookie to an arbitrary value.
+ *
+ * Reference:
+ * https://github.com/AdguardTeam/Scriptlets/blob/master/src/scriptlets/trusted-set-cookie.js#L23
+ *
+ **/
+
+builtinScriptlets.push({
+ name: 'trusted-set-cookie.js',
+ requiresTrust: true,
+ fn: trustedSetCookie,
+ world: 'ISOLATED',
+ dependencies: [
+ 'safe-self.fn',
+ 'set-cookie.fn',
+ ],
+});
+function trustedSetCookie(
+ name = '',
+ value = '',
+ offsetExpiresSec = '',
+ path = ''
+) {
+ if ( name === '' ) { return; }
+
+ const time = new Date();
+
+ if ( value === '$now$' ) {
+ value = Date.now();
+ } else if ( value === '$currentDate$' ) {
+ value = time.toUTCString();
+ }
+
+ let expires = '';
+ if ( offsetExpiresSec !== '' ) {
+ if ( offsetExpiresSec === '1day' ) {
+ time.setDate(time.getDate() + 1);
+ } else if ( offsetExpiresSec === '1year' ) {
+ time.setFullYear(time.getFullYear() + 1);
+ } else {
+ if ( /^\d+$/.test(offsetExpiresSec) === false ) { return; }
+ time.setSeconds(time.getSeconds() + parseInt(offsetExpiresSec, 10));
+ }
+ expires = time.toUTCString();
+ }
+
+ setCookieFn(
+ true,
+ name,
+ value,
+ expires,
+ path,
+ safeSelf().getExtraArgs(Array.from(arguments), 4)
+ );
+}
+
+// For compatibility with AdGuard
+builtinScriptlets.push({
+ name: 'trusted-set-cookie-reload.js',
+ requiresTrust: true,
+ fn: trustedSetCookieReload,
+ world: 'ISOLATED',
+ dependencies: [
+ 'trusted-set-cookie.js',
+ ],
+});
+function trustedSetCookieReload(name, value, offsetExpiresSec, path, ...args) {
+ trustedSetCookie(name, value, offsetExpiresSec, path, 'reload', '1', ...args);
+}
+
+/*******************************************************************************
+ *
+ * trusted-set-local-storage-item.js
+ *
+ * Set a local storage entry to an arbitrary value.
+ *
+ * Reference:
+ * https://github.com/AdguardTeam/Scriptlets/blob/master/src/scriptlets/trusted-set-local-storage-item.js
+ *
+ **/
+
+builtinScriptlets.push({
+ name: 'trusted-set-local-storage-item.js',
+ requiresTrust: true,
+ fn: trustedSetLocalStorageItem,
+ world: 'ISOLATED',
+ dependencies: [
+ 'set-local-storage-item.fn',
+ ],
+});
+function trustedSetLocalStorageItem(key = '', value = '') {
+ setLocalStorageItemFn('local', true, key, value);
+}
+
+builtinScriptlets.push({
+ name: 'trusted-set-session-storage-item.js',
+ requiresTrust: true,
+ fn: trustedSetSessionStorageItem,
+ world: 'ISOLATED',
+ dependencies: [
+ 'set-local-storage-item.fn',
+ ],
+});
+function trustedSetSessionStorageItem(key = '', value = '') {
+ setLocalStorageItemFn('session', true, key, value);
+}
+
+/*******************************************************************************
+ *
+ * trusted-replace-fetch-response.js
+ *
+ * Replaces response text content of fetch requests if all given parameters
+ * match.
+ *
+ * Reference:
+ * https://github.com/AdguardTeam/Scriptlets/blob/master/src/scriptlets/trusted-replace-fetch-response.js
+ *
+ **/
+
+builtinScriptlets.push({
+ name: 'trusted-replace-fetch-response.js',
+ requiresTrust: true,
+ fn: trustedReplaceFetchResponse,
+ dependencies: [
+ 'replace-fetch-response.fn',
+ ],
+});
+function trustedReplaceFetchResponse(...args) {
+ replaceFetchResponseFn(true, ...args);
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'trusted-replace-xhr-response.js',
+ requiresTrust: true,
+ fn: trustedReplaceXhrResponse,
+ dependencies: [
+ 'match-object-properties.fn',
+ 'parse-properties-to-match.fn',
+ 'safe-self.fn',
+ 'should-log.fn',
+ ],
+});
+function trustedReplaceXhrResponse(
+ pattern = '',
+ replacement = '',
+ propsToMatch = ''
+) {
+ const safe = safeSelf();
+ const xhrInstances = new WeakMap();
+ const extraArgs = safe.getExtraArgs(Array.from(arguments), 3);
+ const logLevel = shouldLog({
+ log: pattern === '' && 'all' || extraArgs.log,
+ });
+ const log = logLevel ? ((...args) => { safe.uboLog(...args); }) : (( ) => { });
+ if ( pattern === '*' ) { pattern = '.*'; }
+ const rePattern = safe.patternToRegex(pattern);
+ const propNeedles = parsePropertiesToMatch(propsToMatch, 'url');
+ self.XMLHttpRequest = class extends self.XMLHttpRequest {
+ open(method, url, ...args) {
+ const outerXhr = this;
+ const xhrDetails = { method, url };
+ let outcome = 'match';
+ if ( propNeedles.size !== 0 ) {
+ if ( matchObjectProperties(propNeedles, xhrDetails) === false ) {
+ outcome = 'nomatch';
+ }
+ }
+ if ( outcome === logLevel || outcome === 'all' ) {
+ log(`xhr.open(${method}, ${url}, ${args.join(', ')})`);
+ }
+ if ( outcome === 'match' ) {
+ xhrInstances.set(outerXhr, xhrDetails);
+ }
+ return super.open(method, url, ...args);
+ }
+ get response() {
+ const innerResponse = super.response;
+ const xhrDetails = xhrInstances.get(this);
+ if ( xhrDetails === undefined ) {
+ return innerResponse;
+ }
+ const responseLength = typeof innerResponse === 'string'
+ ? innerResponse.length
+ : undefined;
+ if ( xhrDetails.lastResponseLength !== responseLength ) {
+ xhrDetails.response = undefined;
+ xhrDetails.lastResponseLength = responseLength;
+ }
+ if ( xhrDetails.response !== undefined ) {
+ return xhrDetails.response;
+ }
+ if ( typeof innerResponse !== 'string' ) {
+ return (xhrDetails.response = innerResponse);
+ }
+ const textBefore = innerResponse;
+ const textAfter = textBefore.replace(rePattern, replacement);
+ const outcome = textAfter !== textBefore ? 'match' : 'nomatch';
+ if ( outcome === logLevel || logLevel === 'all' ) {
+ log(
+ `trusted-replace-xhr-response (${outcome})`,
+ `\n\tpattern: ${pattern}`,
+ `\n\treplacement: ${replacement}`,
+ );
+ }
+ return (xhrDetails.response = textAfter);
+ }
+ get responseText() {
+ const response = this.response;
+ if ( typeof response !== 'string' ) {
+ return super.responseText;
+ }
+ return response;
+ }
+ };
+}
+
+/*******************************************************************************
+ *
+ * trusted-click-element.js
+ *
+ * Reference API:
+ * https://github.com/AdguardTeam/Scriptlets/blob/master/src/scriptlets/trusted-click-element.js
+ *
+ **/
+
+builtinScriptlets.push({
+ name: 'trusted-click-element.js',
+ requiresTrust: true,
+ fn: trustedClickElement,
+ world: 'ISOLATED',
+ dependencies: [
+ 'run-at-html-element.fn',
+ 'safe-self.fn',
+ ],
+});
+function trustedClickElement(
+ selectors = '',
+ extraMatch = '', // not yet supported
+ delay = ''
+) {
+ if ( extraMatch !== '' ) { return; }
+
+ const safe = safeSelf();
+ const extraArgs = safe.getExtraArgs(Array.from(arguments), 3);
+ const uboLog = extraArgs.log !== undefined
+ ? ((...args) => { safe.uboLog(...args); })
+ : (( ) => { });
+
+ const querySelectorEx = (selector, context = document) => {
+ const pos = selector.indexOf(' >>> ');
+ if ( pos === -1 ) { return context.querySelector(selector); }
+ const outside = selector.slice(0, pos).trim();
+ const inside = selector.slice(pos + 5).trim();
+ const elem = context.querySelector(outside);
+ if ( elem === null ) { return null; }
+ const shadowRoot = elem.shadowRoot;
+ return shadowRoot && querySelectorEx(inside, shadowRoot);
+ };
+
+ const selectorList = selectors.split(/\s*,\s*/)
+ .filter(s => {
+ try {
+ void querySelectorEx(s);
+ } catch(_) {
+ return false;
+ }
+ return true;
+ });
+ if ( selectorList.length === 0 ) { return; }
+
+ const clickDelay = parseInt(delay, 10) || 1;
+ const t0 = Date.now();
+ const tbye = t0 + 10000;
+ let tnext = selectorList.length !== 1 ? t0 : t0 + clickDelay;
+
+ const terminate = ( ) => {
+ selectorList.length = 0;
+ next.stop();
+ observe.stop();
+ };
+
+ const next = notFound => {
+ if ( selectorList.length === 0 ) {
+ uboLog(`trusted-click-element: Completed`);
+ return terminate();
+ }
+ const tnow = Date.now();
+ if ( tnow >= tbye ) {
+ uboLog(`trusted-click-element: Timed out`);
+ return terminate();
+ }
+ if ( notFound ) { observe(); }
+ const delay = Math.max(notFound ? tbye - tnow : tnext - tnow, 1);
+ next.timer = setTimeout(( ) => {
+ next.timer = undefined;
+ process();
+ }, delay);
+ uboLog(`trusted-click-element: Waiting for ${selectorList[0]}...`);
+ };
+ next.stop = ( ) => {
+ if ( next.timer === undefined ) { return; }
+ clearTimeout(next.timer);
+ next.timer = undefined;
+ };
+
+ const observe = ( ) => {
+ if ( observe.observer !== undefined ) { return; }
+ observe.observer = new MutationObserver(( ) => {
+ if ( observe.timer !== undefined ) { return; }
+ observe.timer = setTimeout(( ) => {
+ observe.timer = undefined;
+ process();
+ }, 20);
+ });
+ observe.observer.observe(document, {
+ attributes: true,
+ childList: true,
+ subtree: true,
+ });
+ };
+ observe.stop = ( ) => {
+ if ( observe.timer !== undefined ) {
+ clearTimeout(observe.timer);
+ observe.timer = undefined;
+ }
+ if ( observe.observer ) {
+ observe.observer.disconnect();
+ observe.observer = undefined;
+ }
+ };
+
+ const process = ( ) => {
+ next.stop();
+ if ( Date.now() < tnext ) { return next(); }
+ const selector = selectorList.shift();
+ if ( selector === undefined ) { return terminate(); }
+ const elem = querySelectorEx(selector);
+ if ( elem === null ) {
+ selectorList.unshift(selector);
+ return next(true);
+ }
+ uboLog(`trusted-click-element: Clicked ${selector}`);
+ elem.click();
+ tnext += clickDelay;
+ next();
+ };
+
+ runAtHtmlElementFn(process);
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'trusted-prune-inbound-object.js',
+ requiresTrust: true,
+ fn: trustedPruneInboundObject,
+ dependencies: [
+ 'object-find-owner.fn',
+ 'object-prune.fn',
+ 'safe-self.fn',
+ ],
+});
+function trustedPruneInboundObject(
+ entryPoint = '',
+ argPos = '',
+ rawPrunePaths = '',
+ rawNeedlePaths = ''
+) {
+ if ( entryPoint === '' ) { return; }
+ let context = globalThis;
+ let prop = entryPoint;
+ for (;;) {
+ const pos = prop.indexOf('.');
+ if ( pos === -1 ) { break; }
+ context = context[prop.slice(0, pos)];
+ if ( context instanceof Object === false ) { return; }
+ prop = prop.slice(pos+1);
+ }
+ if ( typeof context[prop] !== 'function' ) { return; }
+ const argIndex = parseInt(argPos);
+ if ( isNaN(argIndex) ) { return; }
+ if ( argIndex < 1 ) { return; }
+ const safe = safeSelf();
+ const extraArgs = safe.getExtraArgs(Array.from(arguments), 4);
+ const needlePaths = [];
+ if ( rawPrunePaths !== '' ) {
+ needlePaths.push(...rawPrunePaths.split(/ +/));
+ }
+ if ( rawNeedlePaths !== '' ) {
+ needlePaths.push(...rawNeedlePaths.split(/ +/));
+ }
+ const stackNeedle = safe.initPattern(extraArgs.stackToMatch || '', { canNegate: true });
+ const mustProcess = root => {
+ for ( const needlePath of needlePaths ) {
+ if ( objectFindOwnerFn(root, needlePath) === false ) {
+ return false;
+ }
+ }
+ return true;
+ };
+ context[prop] = new Proxy(context[prop], {
+ apply: function(target, thisArg, args) {
+ const targetArg = argIndex <= args.length
+ ? args[argIndex-1]
+ : undefined;
+ if ( targetArg instanceof Object && mustProcess(targetArg) ) {
+ let objBefore = targetArg;
+ if ( extraArgs.dontOverwrite ) {
+ try {
+ objBefore = safe.JSON_parse(safe.JSON_stringify(targetArg));
+ } catch(_) {
+ objBefore = undefined;
+ }
+ }
+ if ( objBefore !== undefined ) {
+ const objAfter = objectPruneFn(
+ objBefore,
+ rawPrunePaths,
+ rawNeedlePaths,
+ stackNeedle,
+ extraArgs
+ );
+ args[argIndex-1] = objAfter || objBefore;
+ }
+ }
+ return Reflect.apply(target, thisArg, args);
+ },
+ });
+}
+
+/******************************************************************************/
+
+builtinScriptlets.push({
+ name: 'trusted-prune-outbound-object.js',
+ requiresTrust: true,
+ fn: trustedPruneOutboundObject,
+ dependencies: [
+ 'object-prune.fn',
+ 'safe-self.fn',
+ ],
+});
+function trustedPruneOutboundObject(
+ entryPoint = '',
+ rawPrunePaths = '',
+ rawNeedlePaths = ''
+) {
+ if ( entryPoint === '' ) { return; }
+ let context = globalThis;
+ let prop = entryPoint;
+ for (;;) {
+ const pos = prop.indexOf('.');
+ if ( pos === -1 ) { break; }
+ context = context[prop.slice(0, pos)];
+ if ( context instanceof Object === false ) { return; }
+ prop = prop.slice(pos+1);
+ }
+ if ( typeof context[prop] !== 'function' ) { return; }
+ const safe = safeSelf();
+ const extraArgs = safe.getExtraArgs(Array.from(arguments), 3);
+ context[prop] = new Proxy(context[prop], {
+ apply: function(target, thisArg, args) {
+ const objBefore = Reflect.apply(target, thisArg, args);
+ if ( objBefore instanceof Object === false ) { return objBefore; }
+ const objAfter = objectPruneFn(
+ objBefore,
+ rawPrunePaths,
+ rawNeedlePaths,
+ { matchAll: true },
+ extraArgs
+ );
+ return objAfter || objBefore;
+ },
+ });
+}
+
+/******************************************************************************/
diff --git a/dist/README.md b/dist/README.md
new file mode 100644
index 0000000..37622c5
--- /dev/null
+++ b/dist/README.md
@@ -0,0 +1,81 @@
+## INSTALL
+
+### Chromium
+
+- Download and unzip `ublock0.chromium.zip` ([latest release desirable](https://github.com/gorhill/uBlock/releases)).
+- Rename the unzipped directory to `ublock`
+ - When you later update manually, replace the **content** of the `ublock` folder with the **content** of the latest zipped version.
+ - This will ensure that all the extension settings will be preserved
+ - As long as the extension loads **from same folder path from which it was originally installed**, all your settings will be preserved.
+- Go to chromium/chrome *Extensions*.
+- Click to check *Developer mode*.
+- Click *Load unpacked extension...*.
+- In the file selector dialog:
+ - Select the directory `ublock` which was created above.
+ - Click *Open*.
+
+The extension will now be available in your chromium/chromium-based browser.
+
+Remember that you have to update manually also. For some users, updating manually is actually an advantage because:
+- You can update when **you** want
+- If ever a new version sucks, you can easily just re-install the previous one
+
+### Firefox
+
+Compatible with Firefox 52 and beyond.
+
+#### For stable release version
+
+This works only if you set `xpinstall.signatures.required` to `false` in `about:config`.<sup>[see "Add-on signing in Firefox"](https://support.mozilla.org/en-US/kb/add-on-signing-in-firefox)</sup>
+
+- Download `ublock0.firefox.xpi` ([latest release desirable](https://github.com/gorhill/uBlock/releases)).
+ - Right-click and choose _"Save As..."_.
+- Drag and drop the previously downloaded `ublock0.firefox.xpi` into Firefox
+
+#### For beta version
+
+- Click on `ublock0.firefox.signed.xpi` ([latest release desirable](https://github.com/gorhill/uBlock/releases)).
+
+#### Location of uBO settings
+
+On Linux, the settings are saved in a JSON file located at `~/.mozilla/firefox/[profile name]/browser-extension-data/uBlock0@raymondhill.net/storage.js`.
+
+When you uninstall the extension, Firefox deletes that file, so all your settings are lost when you uninstall.
+
+### Firefox legacy
+
+Compatible with Firefox 24-56, [Pale Moon](https://www.palemoon.org/) and [SeaMonkey](http://www.seamonkey-project.org/).
+
+- Download `ublock0.firefox-legacy.xpi` ([latest release desirable](https://github.com/gorhill/uBlock-for-firefox-legacy/releases)).
+ - Right-click and select "Save Link As..."
+- Drag and drop the previously downloaded `ublock0.firefox-legacy.xpi` into Firefox
+
+With Firefox 43 and beyond, you may need to toggle the setting `xpinstall.signatures.required` to `false` in `about:config`.<sup>[see "Add-on signing in Firefox"](https://support.mozilla.org/en-US/kb/add-on-signing-in-firefox)</sup>
+
+Your uBlock Origin settings are kept intact even after you uninstall the addon.
+
+On Linux, the settings are saved in a SQlite file located at `~/.mozilla/firefox/[profile name]/extension-data/ublock0.sqlite`.
+
+On Windows, the settings are saved in a SQlite file located at `%APPDATA%\Mozilla\Firefox\Profiles\[profile name]\extension-data\ublock0.sqlite`.
+
+### Build instructions (for developers)
+
+- Clone [uBlock repo](https://github.com/gorhill/uBlock): `git clone https://github.com/gorhill/uBlock.git`
+- Set path to uBlock: `cd uBlock`
+- The official version of uBO is in the `master` branch
+ - `git checkout master`
+- Build the plugin:
+ - Chromium: `make chromium`
+ - Firefox: `make firefox`
+ - NPM package: `make npm`
+- Load the result of the build into your browser:
+ - Chromium:
+ - Navigate to `chrome://extensions/`
+ - Check _"Developer mode"_
+ - Click _"Load unpacked"_
+ - Select `/uBlock/dist/build/uBlock0.chromium/`
+ - Firefox:
+ - Navigate to `about:debugging#/runtime/this-firefox`
+ - Click _"Load Temporary Add-on..."_
+ - Select `/uBlock/dist/build/uBlock0.firefox/`
+
diff --git a/dist/chromium/publish-beta.py b/dist/chromium/publish-beta.py
new file mode 100755
index 0000000..5a6e19f
--- /dev/null
+++ b/dist/chromium/publish-beta.py
@@ -0,0 +1,190 @@
+#!/usr/bin/env python3
+
+import datetime
+import json
+import os
+import re
+import requests
+import shutil
+import subprocess
+import sys
+import tempfile
+import time
+import zipfile
+
+from string import Template
+
+# - Download target (raw) uBlock0.chromium.zip from GitHub
+# - This is referred to as "raw" package
+# - This will fail if not a dev build
+# - Upload uBlock0.chromium.zip to Chrome store
+# - Publish uBlock0.chromium.zip to Chrome store
+
+# Find path to project root
+projdir = os.path.split(os.path.abspath(__file__))[0]
+while not os.path.isdir(os.path.join(projdir, '.git')):
+ projdir = os.path.normpath(os.path.join(projdir, '..'))
+
+# We need a version string to work with
+if len(sys.argv) >= 2 and sys.argv[1]:
+ version = sys.argv[1]
+else:
+ version = input('Github release version: ')
+version.strip()
+if not re.search('^\d+\.\d+\.\d+(b|rc)\d+$', version):
+ print('Error: Invalid version string.')
+ exit(1)
+
+cs_extension_id = 'cgbcahbpdhpcegmbfconppldiemgcoii'
+tmpdir = tempfile.TemporaryDirectory()
+raw_zip_filename = 'uBlock0_' + version + '.chromium.zip'
+raw_zip_filepath = os.path.join(tmpdir.name, raw_zip_filename)
+github_owner = 'gorhill'
+github_repo = 'uBlock'
+
+# Load/save auth secrets
+# The build directory is excluded from git
+ubo_secrets = dict()
+ubo_secrets_filename = os.path.join(projdir, 'dist', 'build', 'ubo_secrets')
+if os.path.isfile(ubo_secrets_filename):
+ with open(ubo_secrets_filename) as f:
+ ubo_secrets = json.load(f)
+
+def input_secret(prompt, token):
+ if token in ubo_secrets:
+ prompt += ' ✔'
+ prompt += ': '
+ value = input(prompt).strip()
+ if len(value) == 0:
+ if token not in ubo_secrets:
+ print('Token error:', token)
+ exit(1)
+ value = ubo_secrets[token]
+ elif token not in ubo_secrets or value != ubo_secrets[token]:
+ ubo_secrets[token] = value
+ exists = os.path.isfile(ubo_secrets_filename)
+ with open(ubo_secrets_filename, 'w') as f:
+ json.dump(ubo_secrets, f, indent=2)
+ if not exists:
+ os.chmod(ubo_secrets_filename, 0o600)
+ return value
+
+
+# GitHub API token
+github_token = input_secret('Github token', 'github_token')
+github_auth = 'token ' + github_token
+
+#
+# Get metadata from GitHub about the release
+#
+
+# https://developer.github.com/v3/repos/releases/#get-a-single-release
+print('Downloading release info from GitHub...')
+release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, version)
+headers = { 'Authorization': github_auth, }
+response = requests.get(release_info_url, headers=headers)
+if response.status_code != 200:
+ print('Error: Release not found: {0}'.format(response.status_code))
+ exit(1)
+release_info = response.json()
+
+#
+# Extract URL to raw package from metadata
+#
+
+# Find url for uBlock0.chromium.zip
+raw_zip_url = ''
+for asset in release_info['assets']:
+ if asset['name'] == raw_zip_filename:
+ raw_zip_url = asset['url']
+if len(raw_zip_url) == 0:
+ print('Error: Release asset URL not found')
+ exit(1)
+
+#
+# Download raw package from GitHub
+#
+
+# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
+print('Downloading raw zip package from GitHub...')
+headers = {
+ 'Authorization': github_auth,
+ 'Accept': 'application/octet-stream',
+}
+response = requests.get(raw_zip_url, headers=headers)
+# Redirections are transparently handled:
+# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history
+if response.status_code != 200:
+ print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code))
+ exit(1)
+with open(raw_zip_filepath, 'wb') as f:
+ f.write(response.content)
+print('Downloaded raw package saved as {0}'.format(raw_zip_filepath))
+
+#
+# Upload to Chrome store
+#
+
+# Auth tokens
+cs_id = input_secret('Chrome store id', 'cs_id')
+cs_secret = input_secret('Chrome store secret', 'cs_secret')
+cs_refresh = input_secret('Chrome store refresh token', 'cs_refresh')
+
+print('Uploading to Chrome store...')
+with open(raw_zip_filepath, 'rb') as f:
+ print('Generating access token...')
+ auth_url = 'https://accounts.google.com/o/oauth2/token'
+ auth_payload = {
+ 'client_id': cs_id,
+ 'client_secret': cs_secret,
+ 'grant_type': 'refresh_token',
+ 'refresh_token': cs_refresh,
+ }
+ auth_response = requests.post(auth_url, data=auth_payload)
+ if auth_response.status_code != 200:
+ print('Error: Auth failed -- server error {0}'.format(auth_response.status_code))
+ print(auth_response.text)
+ exit(1)
+ response_dict = auth_response.json()
+ if 'access_token' not in response_dict:
+ print('Error: Auth failed -- no access token')
+ exit(1)
+ # Prepare access token
+ cs_auth = 'Bearer ' + response_dict['access_token']
+ headers = {
+ 'Authorization': cs_auth,
+ 'x-goog-api-version': '2',
+ }
+ # Upload
+ print('Uploading package...')
+ upload_url = 'https://www.googleapis.com/upload/chromewebstore/v1.1/items/{0}'.format(cs_extension_id)
+ upload_response = requests.put(upload_url, headers=headers, data=f)
+ f.close()
+ if upload_response.status_code != 200:
+ print('Upload failed -- server error {0}'.format(upload_response.status_code))
+ print(upload_response.text)
+ exit(1)
+ response_dict = upload_response.json();
+ if 'uploadState' not in response_dict or response_dict['uploadState'] != 'SUCCESS':
+ print('Upload failed -- server error {0}'.format(response_dict['uploadState']))
+ exit(1)
+ print('Upload succeeded.')
+ # Publish
+ print('Publishing package...')
+ publish_url = 'https://www.googleapis.com/chromewebstore/v1.1/items/{0}/publish'.format(cs_extension_id)
+ headers = {
+ 'Authorization': cs_auth,
+ 'x-goog-api-version': '2',
+ 'Content-Length': '0',
+ }
+ publish_response = requests.post(publish_url, headers=headers)
+ if publish_response.status_code != 200:
+ print('Error: Chrome store publishing failed -- server error {0}'.format(publish_response.status_code))
+ exit(1)
+ response_dict = publish_response.json();
+ if 'status' not in response_dict or response_dict['status'][0] != 'OK':
+ print('Publishing failed -- server error {0}'.format(response_dict['status']))
+ exit(1)
+ print('Publishing succeeded.')
+
+print('All done.')
diff --git a/dist/description/description-ar.txt b/dist/description/description-ar.txt
new file mode 100644
index 0000000..2e567bc
--- /dev/null
+++ b/dist/description/description-ar.txt
@@ -0,0 +1,51 @@
+مانع إعلانات فعال: خفيف على الذاكرة و المعالج, على الرغم من قدرته على تحميل و تطبيق الآلاف من الفلاتر أكثر من بعض أشهر مانعي الإعلانات.
+
+نظرة عامة توضح الكفاءة: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+الإستخدام: زر التشغيل الكبير في النافذة المنبثقة هو لتعطيل أو تشغيل يو بلوك أوريجين للموقع الحالي. هو ينطبق على الموقع الحالي فقط، و ليس زر تشغيل عام.
+
+***
+
+مع مرونته، هو أكثر من مجرد "مانع إعلانات": بإمكانه أيضا قراءة و إنشاء فلاتر من ملفات الإستقبال.
+
+فلاتر حديثة، هذه القوائم من الفلاتر يتم تحميلها و تطبيقها:
+
+- EasyList
+- قائمة خادم الإعلانات لـPeter Lowe
+- EasyPrivacy
+- نطاقات البرامج الضارة
+
+يوفر لك قوائم أكثر لتختار منها إذا كنت ترغب:
+
+قائم التتبع المحسنة لـFanboy
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- و الكثير من القوائم الأخرى.
+
+طبعا، كلما مكَّنتَ فلاتر أكثر، كلما ازداد أثرها على الذاكرة. حتى مع الرغم من إضافة القوائم الإضافية لـFanboy، و قوائم تتبع إعلان hpHost، ما زال بإمكان uBlock₀ العمل بأدنى أثر على الذاكرة أفضل من بعض أشهر قوائم التتبع.
+
+أيضا، كن على علم أن تحديد بعض من هذه القوائم الإضافية قد يؤدي إلى إمكانية أعلى لتعطيل المواقع -- خصوصا تلك القوائم التي تستخدم عادة كملفات مضيفة.
+
+***
+
+بدون وجود قوائم الفلترات, هذه الإضافة عديمة القيمة. إذن إن كانت لديك الرغبة في المساهمة، فكر في أولئك الذين يعملون بجد لصيانة قوائم الفلترات التي تستخدمها، التي تمت إتاحتها لك لتسخدمها مجَّاناََ.
+
+***
+
+مجاناً.
+مفتوح المصدر مع رخصة (GPLv3)
+للمستخدمين من طرف مستخدمين أخرين.
+
+المساهمون في Github:
+https://github.com/gorhill/uBlock/graphs/contributors
+المساهمون في Crowdin:
+ https://crowdin.net/project/ublock
+
+***
+
+الإضافة في قيد الإنجاز، خذ هذا في عين الإعتبار عندما تستعرضها.
+
+سجل التغييرات للمشروع:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-az.txt b/dist/description/description-az.txt
new file mode 100644
index 0000000..87af53b
--- /dev/null
+++ b/dist/description/description-az.txt
@@ -0,0 +1,49 @@
+Səmərəli bir əngəlləyici: yaddaş və prosessor yükünü artırmadığı halda digər məşhur əngəlləyicilərlə müqayisədə minlərlə daha çox filtri dəstəkləyir.
+
+Proqramın səmərəliliyinə dair ümumi əyani məlumat: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+İstifadə: Açılan pəncərədəki böyük açar düyməsi uBlock₀-u cari veb-saytda işə salmaq/dayandırmaq üçündür. Bu zaman uBlock₀ bütün veb-saytlarda deyil, yalnız cari veb-saytda işə düşür/dayandırılır.
+
+***
+
+Uyuşqan olmaqla yanaşı, uBlock₀ adi reklam əngəlləyicisindən fərqli olaraq domen adlarının olduğu faylları oxuya və yarada bilir.
+
+Standart rejimdə aşağıdakı filtr siyahıları yüklənəcək və tətbiq olunacaq:
+
+- EasyList
+- Peter Lowe-dan reklam serverləri siyahısı
+- EasyPrivacy
+- Zərərli domenlər
+
+Əlavə olaraq aşağıdakı siyahıları da seçə bilərsiniz:
+
+- Fanboy-dan izləmə serverlərinin genişləndirilmiş siyahısı
+- Dan Pollock-dan veb-domenlər faylı
+- hpHosts reklam və izləmə serverləri siyahısı
+- MVPS veb-domenləri
+- Spam404
+- Və bir çox başqaları
+
+Təbii ki, hər yeni seçilən filtrlər siyahısı yaddaş yükünü də artırır. Buna baxmayaraq, Fanboy-dan iki əlavə siyahı və hpHosts reklam və izləmə serverləri siyahısını seçsəniz belə, uBlock₀ digər məşhur reklam əngəlləyicilərindən fərqli olaraq yaddaşda daha az yer tutur.
+
+Həmçinin nəzərə alın ki, əlavə siyahıların bəzisini -- xüsusən tərkibində domen adları olan siyahıları seçdikdə, veb-saytın düzgün yüklənməməsi ehtimalı da artır.
+
+***
+
+Əvvəldən quraşdırılmış filtr siyahıları olmadan, uBlock₀ heç bir işə yaramır. Ona görə də, əgər siz həqiqətən bir töfhə vermək istəyirsinizsə, hər kəsin istifadəsinə pulsuz təqdim olunan filtr siyahılarını yorulmadan dəstəkləyən insanlar haqqında düşünün.
+
+***
+
+Pulsuz.
+Ümumi lisenziyalı (GPLv3) açıq mənbə kodu.
+İstifadəçilər tərəfindən istifadəçilər üçün.
+
+Github-a qoşulan iştirakçılarımız: https://github.com/gorhill/uBlock/graphs/contributors
+Crowdin-ə qoşulan iştirakçılarımız: https://crowdin.net/project/ublock
+
+***
+
+It's quite an early version, keep this in mind when you review.
+
+Layihəyə edilmiş dəyişikliklərin siyahısı:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-bg.txt b/dist/description/description-bg.txt
new file mode 100644
index 0000000..9fe8b4d
--- /dev/null
+++ b/dist/description/description-bg.txt
@@ -0,0 +1,49 @@
+Действащ блокер: щадящ паметта и процесора, но и способен да зареди и наложи хиляди филтри в сравнение с други популярни блокери.
+
+Илюстрация на неговата ефикасност: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Използване: големият бутон за включване в изскачащия прозорец забранява/разрешава uBlock в текущия сайт. Приложим само за текущия сайт, не действа глобално.
+
+***
+
+Гъвкав, нещо повече от „блокер на реклами“: чете и създава филтри на базата на файлове с хостове.
+
+Първоначално са заредени и наложени следните филтри:
+
+- EasyList
+- списък с рекламни сървъри от Peter Lowe
+- EasyPrivacy
+- вредоносни домейни
+
+Aко желаете, на разположение са допълнителни списъци, които да изберете:
+
+- разширен проследяващ списък от Fanboy
+- файл с хостове от Dan Pollock
+- рекламни и проследяващи сървъри от hpHosts
+- MVPS HOSTS
+- Spam404
+- и много други
+
+Разбира се, колкото повече списъци включите, толкова по-голямо е използването на паметта. Въпреки това, дори и след добавяне на двата допълнителни списъка от Fanboy, рекламните и проследяващи сървъри от hpHosts, uBlock₀ използва по-малко памет в сравнение с други много популярни блокери.
+
+Имайте също така предвид, че избирането на определени допълнителни списъци може да доведе с голяма степен на вероятност до неправилно функциониране на сайтовете — особено тези, които по принцип се ползват като файл с хостове.
+
+***
+
+Без предварително зададените списъци с филтри, това разширение е нищо. Така че, ако някога наистина искате да допринесете с нещо, помислете за хората, работещи усилено по поддържането на списъците с филтри, предоставени ви за безплатно използване от всички.
+
+***
+
+Безплатно.
+Отворен код с публичен лиценз (GPLv3)
+За потребители от потребители.
+
+Сътрудници @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Сътрудници @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Това е доста ранна версия, имайте го предвид, когато я разглеждате.
+
+Списък с промени на проекта:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-bn.txt b/dist/description/description-bn.txt
new file mode 100644
index 0000000..c8896b8
--- /dev/null
+++ b/dist/description/description-bn.txt
@@ -0,0 +1,49 @@
+একটি কার্যকর বিজ্ঞাপন প্রতিরোধক: মেমরি ও প্রসেসর সহায়ক, এবং অন্যান্য জনপ্রিয় বিজ্ঞাপন প্রতিরোধক বা অবরোধকারী থেকে হাজার অধিক ফিল্টারকে লোড এবং বাস্তবায়ন করতে পারে।
+
+এটির কার্যকারিতার সচিত্র সংক্ষিপ্ত বিবরণ: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+ব্যবহার: পপআপের বড় পাওয়ার বাটনটি হলো বর্তমান ওয়েবসাইটে uBlock কে স্থায়ীভাবে সক্রিয় / নিষ্ক্রিয় করার জন্য। এটা শুধুমাত্র বর্তমান ওয়েব সাইটে প্রযোজ্য, এটি একটি সার্বজনীন পাওয়ার বোতাম নয়।
+
+***
+
+নমনীয়, এটি একটি "বিজ্ঞাপন প্রতিরোধক"-এর চেয়েও বেশি: এছাড়াও এটি হোস্ট ফাইল থেকে ফিল্টার পড়তে ও তৈরি করতে পারে।
+
+বাক্সের বাইরের, এই তালিকার ফিল্টারগুলি লোড করে এবং তা প্রয়োগ করে:
+
+- সহজ তালিকা
+- পিটার লো'য়ের বিজ্ঞাপন সার্ভারের তালিকা
+- সহজ গোপনীয়তা
+- ম্যালওয়্যার ডোমেইন
+
+ আপনি যদি চান আপনি নির্বাচন করার জন্য আরো তালিকা পাবেন:
+
+- ফ্যানবয়ের বর্ধিত অনুসরণকরণ তালিকা
+- Dan Pollock’s hosts file
+- এইচপিহোস্টসের বিজ্ঞাপন এবং অনুসরণকরণ সার্ভার
+- MVPS হোস্টসমূহ
+- স্প্যাম৪০৪
+- এবং আরও অনেক কিছু
+
+অবশ্যই, যতবেশি ফিল্টার সক্রিয় করবেন, মেমরি ব্যবহার ততবেশি হবে। এমনকি Fanboy-এর দুটি অতিরিক্ত তালিকা, hpHosts-এর বিজ্ঞাপন এবং ট্র্যাকিং সার্ভার যোগ করার পরেও uব্লক অন্যান্য খুব জনপ্রিয় ব্লকারের থেকে কম মেমরি পদচিহ্ন ব্যবহার করে।
+
+এছাড়াও, এই অতিরিক্ত তালিকা নির্বাচন কিছু ওয়েব সাইট বিগড়ে দেওয়ার সম্ভাবনা বাড়িয়ে দিতে পারে তাই সাবধান --- বিশেষ করে এই তালিকাগুলি যা সাধারণত হোস্ট ফাইল হিসেবে ব্যবহার করা হয়।
+
+***
+
+ফিল্টারের পূর্বনির্ধারিত তালিকা ছাড়া, এই এক্সটেনশনটি কিছুই না। তাই কখনও যদি আপনি সত্যিই কিছু অবদান রাখতে চান, আপনার ব্যবহার করা ফিল্টার তালিকা রক্ষণাবেক্ষণের জন্য কঠোর পরিশ্রম করা সেই সব মানুষের করা কথা চিন্তা করুন যারা এই সব বিনামূল্যে ব্যবহারের জন্য উপলব্ধ করেছেন।
+
+***
+
+মুক্তভাবে
+পাবলিক লাইসেন্সসহ মুক্ত উৎসের (GPLv3)
+ব্যবহারকারীদের দ্বারা ব্যবহারকারীদের জন্য।
+
+অবদানকারীগণ @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+অবদানকারীগণ @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+এটি একটি প্রাথমিক সংস্করণ, আপনার পর্যালোচনার সময় তা মনে রাখুন।
+
+প্রকল্পের পরিবর্তন লগ:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-bs.txt b/dist/description/description-bs.txt
new file mode 100644
index 0000000..949f02f
--- /dev/null
+++ b/dist/description/description-bs.txt
@@ -0,0 +1,47 @@
+Efikasan bloker: lagan na memoriju i procesor, a može učitati i primijeniti još hiljadu više drugih filtera nego drugi poznati blokeri.
+
+Ilustrovani pregled njegove efikasnosti: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Upotreba: Veliko dugme u skočnom prozoru je da trajno omogućite/onemogućite uBlock na trenutačnoj web-stranici. To se odnosi samo na trenutačnu web-stranicu, pa nije da ga kompletno isključite.
+
+***
+
+Baš je fleksibilan, nije samo da blokira reklame: može čitati i napraviti filtere iz hosts datoteka.
+
+Odmah po instaliranju, slijedeći spisci filtera su pokrenuti i sprovedeni:
+
+- EasyList
+- Peter Lowe-ov popis reklamnih servera
+- EasyPrivacy
+- Malverske domene
+
+Sljedeće liste su dostupne po odabiru ako ih želite:
+
+- Fanboy-eva Poboljšana Lista za Praćenje
+- Dan Pollock-ova hosts datoteka
+- hpHosts-ovi serveri za reklame i praćenje
+- MVPS HOSTS
+- Spam404
+- I mnogi drugi
+
+Naravno, sa više omogućenih filtera, veća je i upotreba memorije. Ipak, čak i nakon što Fanboy-ova dva dodatna spiska, i hpHosts serveri za reklame i praćenje, su dodata, uBlock još uvijek ima manju upotrebu memorije od drugih poznatih blokera.
+
+Također, držite na umu da ako odaberete nekih od ovih pomoćnih spisaka možete i povećati prilike kvara web-stranice -- pogotovo onih spisaka koji se obično koriste kao hosts datoteke.
+
+***
+
+Bez prednaštimanih listih filtera, ovo proširenje neće raditi. Tako da ako ikad želite doprinijeti nešto, razmislite o ljudima koji naporno rade održavajući spiske filtera koje vi koristite i koji su dostupni za besplatno korištenje svima.
+
+***
+
+Besplatno.
+Otvorenog koda sa javnom licencom (GPLv3)
+Za korisnike od korisnika.
+
+Saradnici @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Saradnici @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Spiska promjena:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-ca.txt b/dist/description/description-ca.txt
new file mode 100644
index 0000000..d497770
--- /dev/null
+++ b/dist/description/description-ca.txt
@@ -0,0 +1,49 @@
+Un blocador eficient: Amb un consum discret de memòria i de processador, podeu carregar i aplicar milers de filtres més que altres aplicacions semblants.
+
+Gràfic de l'eficiència: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Ús: el botó gran d'engegada de la finestra emergent serveix per a habilitar/inhabilitar permanentment l'uBlock el lloc web actual. Només s'aplica al lloc web actual, no és un botó d'engegada global.
+
+***
+
+Flexible, és més que un "bloquejador d'anuncis": també pot llegir i crear filtres a partir de fitxers hosts.
+
+Per defecte, es carreguen i s'apliquen aquestes llistes de filtres:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Dominis de malware
+
+Si voleu, podeu seleccionar altres llistes disponibles:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- I molts més
+
+Òbviament, com més filtres activeu, més gran serà el consum de memòria. Però fins i tot després d'afegir les dues llistes extra de Fanboy, els servidors d'anuncis i rastreig d'hpHosts, l'uBlock encara té un consum de memòria inferior al d'altres bloquejadors coneguts.
+
+Tingueu en compte que també és més probable trobar llocs web inservibles en seleccionar algunes d'aquestes llistes extra, especialment aquelles llistes que s'utilitzen normalment com a fitxer de hosts.
+
+***
+
+Sense les llistes predefinides de filtres, aquesta extensió no és res. Així que, si en cap moment voleu fer una aportació, penseu en les persones que treballen durament per a mantenir les llistes de filtres que utilitzeu, a disposició de tothom de manera gratuïta.
+
+***
+
+Lliure.
+Codi obert amb llicència pública (GPLv3)
+Per usuaris per a usuaris.
+
+Col·laboradors a Github: https://github.com/gorhill/uBlock/graphs/contributors
+Col·laboradors a Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Aquesta és, en certa manera, una versió primitiva. Tingueu-ho en compte quan en doneu la vostra opinió.
+
+Registre de canvis del projecte:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-cs.txt b/dist/description/description-cs.txt
new file mode 100644
index 0000000..abf5dc1
--- /dev/null
+++ b/dist/description/description-cs.txt
@@ -0,0 +1,49 @@
+Efektivní blokovač: nezanechává velké stopy, nezatěžuje paměť a CPU, a přesto může načítat a využívat o několik tisíc filtrů více, než jiné populární blockery.
+
+Grafický přehled jeho účinnosti: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Použití: Velký vypínač ve vyskakovacím okně trvale povolí/zakáže uBlock pro otevřenou stránku. Funguje pouze pro aktivní webovou stránku, není to obecný vypínač.
+
+***
+
+Flexibilní, více než jen "blokovač reklam": umí také číst a vytvářet filtry z hosts souborů.
+
+Po instalaci jsou načteny a použity tyto filtry:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+Pokud chcete, můžete si vybrat tyto další filtry:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- A mnoho dalších
+
+Čím více filtrů je povoleno, tím je samozřejmě větší stopa v paměti. I přesto má ale uBlock₀ i po přidání dvou dalších seznamů od Fanboye a "hpHosts’s Ad and tracking servers" menší vliv na paměť než mnohé další velmi populární blockery.
+
+Dále mějte na paměti, že vybírání více filtrů zvyšuje šanci chybného zobrazení webů -- především u seznamů, které se normálně používají jako hosts soubory.
+
+***
+
+Bez předvolených seznamů filtrů by toto rozšíření bylo k ničemu. Pokud tedy opravdu budete chtít něčím přispět, myslete na lidi, kteří spravují Vámi používané seznamy filtrů a uvolňují je pro všechny zdarma.
+
+***
+
+Svobodný software.
+Open source s veřejnou licencí (GPLv3)
+Od uživatelů pro uživatele.
+
+Přispěvatelé na Githubu: https://github.com/gorhill/uBlock/graphs/contributors
+Přispěvatelé na Crowdinu: https://crowdin.net/project/ublock
+
+***
+
+Jde o poměrně ranou verzi, mějte to na paměti při recenzování.
+
+Change log projektu:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-cv.txt b/dist/description/description-cv.txt
new file mode 100644
index 0000000..43af9b5
--- /dev/null
+++ b/dist/description/description-cv.txt
@@ -0,0 +1,49 @@
+An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there.
+
+Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button.
+
+***
+
+Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files.
+
+Out of the box, these lists of filters are loaded and enforced:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+More lists are available for you to select if you wish:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- And many others
+
+Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there.
+
+Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file.
+
+***
+
+Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free.
+
+***
+
+Free.
+Open source with public license (GPLv3)
+For users by users.
+
+Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Contributors @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+It's quite an early version, keep this in mind when you review.
+
+Project change log:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-da.txt b/dist/description/description-da.txt
new file mode 100644
index 0000000..89587cd
--- /dev/null
+++ b/dist/description/description-da.txt
@@ -0,0 +1,47 @@
+En effektiv blocker: Forbruger kun lidt hukommelse og CPU, men kan alligevel indlæse og håndhæve tusindvis flere filtre end andre populære blockers.
+
+Illustreret oversigt over dens effektivitet: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Anvendelse: Den store slå til/fra knap i popup-vinduet benyttes til permanent at deaktivere/aktivere uBlock på det aktuelle websted. Dette gælder kun for det aktuelle websted, det er ikke en global til/fra-knap.
+
+***
+
+Fleksibel og mere end en "annonce-blocker": Den kan også læse og oprette filtre fra værtsfiler.
+
+Helt fra starten indlæses og håndhæves flg. filterlister:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware-domæner
+
+Du kan, om ønsket, vælge fra flere tilgængelige lister:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollocks værtsfil
+-Hphosts' annonce- og sporingsservere
+- MVPS HOSTS
+- Spam404
+- Og mange flere
+
+Jo flere aktive filtre, desto højere hukommelsesforbrug, selvfølgelig. Selv efter tilføjelse af Fanboys to ekstra lister samt hpHosts’ annonce- og sporingsservere har uBlock imidlertid stadig et lavere hukommelsesforbrug end andre meget populære blockere.
+
+Vær også opmærksom på, at vælger du nogle af disse ekstra lister, kan det øge risikoen for fejlviste websteder – især for de lister, som normalt anvendes som hosts-fil.
+
+***
+
+Uden forvalgslisterne med filtre er denne udvidelse intet værd. Hvis du nogensinde virkelig ønsker at bidrage med noget, så tænk på de personer, som arbejder hårdt for at vedligeholdede filterlisterne, du benytter - lister, som alle frit kan anvende.
+
+***
+
+Gratis.
+Open source med offentlig licens (GPLv3)
+Til brugere, af brugere.
+
+Bidragsydere på Github: https://github.com/gorhill/uBlock/graphs/contributors
+Bidragsydere på Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Projektændringslog:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-de.txt b/dist/description/description-de.txt
new file mode 100644
index 0000000..7d9fa2b
--- /dev/null
+++ b/dist/description/description-de.txt
@@ -0,0 +1,49 @@
+Ein effizienter Blocker: Geringer Speicherbedarf und niedrige CPU-Belastung - und dennoch werden tausende Filter mehr angewendet als bei anderen beliebten Blockern.
+
+Ein illustrierter Überblick über seine Effizienz: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Benutzung: Der An-/Ausschaltknopf beim Klicken des Erweiterungssymbols dient zum An-/Ausschalten von uBlock auf der aktuellen Webseite. Dies wirkt sich also nur auf die aktuelle Webseite aus und nicht global.
+
+
+
+uBlock ist flexibel, denn es ist mehr als ein „Werbeblocker“: Es verarbeitet auch Filter aus mehreren hosts-Dateien.
+
+Standardmäßig werden folgende Filterlisten geladen und angewandt:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+Auf Wunsch können zusätzliche Listen ausgewählt werden:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- etc.
+
+Natürlich ist der Speicherbedarf umso höher, desto mehr Filter angewandt werden. Aber selbst mit den zwei zusätzlichen Listen von Fanboy und hpHosts’s Ad and tracking servers ist der Speicherbedarf von uBlock₀ geringer als bei anderen sehr populären Blockern.
+
+Bedenke allerdings, dass durch die Wahl zusätzlicher Listen die Wahrscheinlichkeit größer wird, dass bestimmte Webseiten nicht richtig geladen werden - vor allem bei Listen, die normalerweise als hosts-Dateien verwendet werden.
+
+
+
+ Wenn du etwas beitragen möchtest, dann denke an die Menschen, die hart dafür arbeiten, die von dir benutzten Filterlisten zu pflegen und diese für uns alle frei verfügbar gemacht haben.
+
+
+
+Frei.
+Open-Source-Software unter der General Public License (GPLv3)
+Für Benutzer von Benutzern.
+
+Mitwirkende @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Mitwirkende @ Crowdin: https://crowdin.net/project/ublock
+
+
+
+
+
+Änderungsprotokoll:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-el.txt b/dist/description/description-el.txt
new file mode 100644
index 0000000..74454b1
--- /dev/null
+++ b/dist/description/description-el.txt
@@ -0,0 +1,49 @@
+Ένας αποτελεσματικός αναστολέας διαφημίσεων: παρόλο το ελαφρύ του αποτύπωμα στη μνήμη και τον επεξεργαστή μπορεί να εφαρμόσει χιλιάδες περισσότερα φίλτρα σε σχέση με άλλους δημοφιλείς blockers.
+
+Απεικονιζόμενη επισκόπηση της αποτελεσματικότητάς του: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Χρήση: Το μεγάλο πλήκτρο απενεργοποίησης/ενεργοποίησης στο αναδυόμενο παράθυρο, χρησιμεύει στην εναλλαγή κατάστασης του uBlock για τον τρέχοντα ιστότοπο. Η εφαρμογή της ρύθμισης αυτής γίνεται μόνο για τον τρέχοντα ιστότοπο και δεν επιβάλλεται καθολικά.
+
+***
+
+Ευέλικτος, είναι πολλά περισσότερα από ένας απλός "ad blocker": μπορεί επιπλέον να διαβάζει και να δημιουργεί φίλτρα από αρχεία hosts.
+
+Κατά προεπιλογή, οι λίστες φίλτρων που φορτώνονται και επιβάλλονται είναι οι εξής:
+
+- EasyList
+- Λίστα διακομιστών διαφημίσεων του Peter Lowe
+- EasyPrivacy
+- Κακόβουλοι τομείς
+
+Επιπλέον λίστες είναι διαθέσιμες για να επιλέξετε εάν το επιθυμείτε:
+
+- Ενισχυμένη Ιχνωσική Λίστα του Fanboy
+- Αρχείο hosts του Dan Pollock
+- Διαφημίσεις και διακομιστές ίχνωσης hpHosts
+- MVPS HOSTS
+- Spam404
+- και πολλές άλλες
+
+Φυσικά, όσο περισσότερα φίλτρα ενεργοποιούνται, τόσο αυξάνεται το αποτύπωμα της μνήμης. Ωστόσο, ακόμη και μετά από την προσθήκη δυο επιπλέον λιστών, του Fanboy και της λίστας διαφημίσεων και διακομιστών ίχνωσης hpHosts, το uBlock₀ συνεχίζει να έχει χαμηλότερο αποτύπωμα μνήμης από άλλους δημοφιλείς αναστολείς.
+
+Επίσης, έχετε υπ'όψην ότι διαλέγοντας μερικές από τις έξτρα λίστες μπορεί να οδηγήσει σε πιθανό σφάλμα στην ιστοσελίδα -- ειδικά εκείνες που κανονικά χρησιμοποιούνται σαν host αρχεία.
+
+***
+
+Χωρίς τις υπάρχουσες λίστες φίλτρων, αυτή η επέκταση δεν έχει καμία αξία. Εάν ποτέ λοιπόν θελήσετε πραγματικά να συνεισφέρετε κάτι, αναλογιστείτε τους ανθρώπους που εργάζονται σκληρά για να διατηρήσουν τις λίστες φίλτρων που χρησιμοποιείτε, οι οποίες διατέθηκαν προς χρήση σε όλους, δωρεάν.
+
+***
+
+Δωρεάν.
+Ανοιχτού κώδικα με άδεια δημόσιας χρήσης (GPLv3)
+Από τους χρήστες για τους χρήστες.
+
+Συνεισφέροντες @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Συνεισφέροντες @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Είναι μια αρκετά πρόωρη έκδοση, κρατήστε το υπόψη κατά την αξιολόγηση.
+
+Αρχείο αλλαγών του έργου:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-en.txt b/dist/description/description-en.txt
new file mode 100644
index 0000000..8cbdd25
--- /dev/null
+++ b/dist/description/description-en.txt
@@ -0,0 +1,33 @@
+uBlock Origin (uBO) is a CPU and memory-efficient wide-spectrum content blocker that blocks ads, trackers, coin miners, popups, annoying anti-blockers, etc., using the following list of filters, enabled by default:
+
+- EasyList (ads)
+- EasyPrivacy (tracking)
+- Peter Lowe's Blocklist
+- Online Malicious URL Blocklist
+- uBO filter lists
+
+More lists are available for you to select if you wish:
+
+- EasyList Cookie List
+- Fanboy's Annoyance List
+- AdGuard Annoyances
+- Dan Pollock’s hosts file
+- And many others
+
+Additionally, you can point-and-click to block JavaScript locally or globally, create your own global or local rules to override entries from filter lists, and many more advanced features.
+
+***
+
+Free. Open source with public license (GPLv3). For users by users. No donations sought.
+
+If you ever want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free.
+
+You can help contribute by translating uBO on Crowdin.
+
+***
+
+ [Documentation](https://github.com/gorhill/uBlock#ublock-origin-ubo)
+ [Release Notes](https://github.com/gorhill/uBlock/releases)
+ [Support Forum on Reddit](https://www.reddit.com/r/uBlockOrigin/)
+ [Contributors on GitHub](https://github.com/gorhill/uBlock/graphs/contributors)
+ [Contribute on Crowdin](https://crowdin.com/project/ublock)
diff --git a/dist/description/description-en_GB.txt b/dist/description/description-en_GB.txt
new file mode 100644
index 0000000..78b3d5c
--- /dev/null
+++ b/dist/description/description-en_GB.txt
@@ -0,0 +1,49 @@
+An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there.
+
+Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Usage: The big power button in the pop-up is to permanently disable/enable uBlock for the current website. It applies to the current website only; it is not a global power button.
+
+***
+
+Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files.
+
+Out of the box, these lists of filters are loaded and enforced:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+More lists are available for you to select if you wish:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- And many others
+
+Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there.
+
+Also, be aware that selecting some of these extra lists may lead to higher likelihood of website breakage -- especially those lists which are normally used as hosts file.
+
+***
+
+Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free.
+
+***
+
+Free.
+Open source with public licence (GPLv3)
+For users, by users.
+
+Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Contributors @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+It's quite an early version, keep this in mind when you review.
+
+Project change log:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-eo.txt b/dist/description/description-eo.txt
new file mode 100644
index 0000000..debc796
--- /dev/null
+++ b/dist/description/description-eo.txt
@@ -0,0 +1,49 @@
+Efika blokilo: malgranda spuro je memoro kaj ĉefprocesoro, tamen povas ŝarĝi kaj efikigi milojn pli da filtriloj ol aliaj popularaj blokiloj ekzistantaj.
+
+Ilustrita superrigardo de ĝia rendimento: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Uzado: La granda ŝaltilo en la ŝpruc-fenestro estas por daŭre malebligi/ebligi uBlock-on por la aktuala retejo. Ĝi aplikas nur al la aktuala retejo; ĝi ne estas universala ŝaltilo.
+
+***
+
+Fleksebla, ĝi estas pli ol "reklamo-blokilo": ĝi ankaŭ povas legi kaj krei filtrilojn el host-aj dosieroj.
+
+Rekte el la kesto, la jenaj filtriloj estas ŝarĝitaj kaj efikigitaj:
+
+- EasyList
+- Listo de Peter Lowe de reklamaj serviloj
+- EasyPrivacy
+- Domajnoj kun fiprogramaro
+
+Pliaj listoj estas elekteblaj laŭvole:
+
+- Plibonigita listo de spurado de Fanboy
+- Gastiga dosiero de Dan Pollock
+- Reklamaj kaj spuradaj serviloj de hpHosts
+- MVPS HOSTS
+- Spam404
+- Kaj multaj aliaj
+
+Kompreneble, ju pli da filtriloj efikigitaj, des pli alta la memora spuro. Tamen, eĉ post aldoni la du aldonaj listoj de Fanboy kaj la reklamaj kaj spuradaj serviloj de hpHost, uBlock ankoraŭ havas pli malaltan memoran spuron ol aliaj tre popularaj blokiloj.
+
+Aldone, atentu ke elekti iuj el tiuj listoj eble kaŭzos pli altan probablecon de rompiĝo de retejoj -- aparte tiuj listoj kiuj ĝenerale funkcias kiel host-aj dosieroj.
+
+***
+
+Sen la defaŭltaj listoj de filtriloj, ĉi tiu aldonaĵo estas senutila. Do se vi iam vere volos kontribui ion, pensu pri la homoj pene laborantaj bonteni la filtrilajn listojn kiujn vi uzas, kiuj estis disponebligitaj por ĉies uzado.
+
+***
+
+Libera.
+Malfermitkoda kun publika permesilo (GPLv3)
+Por uzantoj de uzantoj.
+
+Kontribuantoj ĉe GitHub: https://github.com/gorhill/uBlock/graphs/contributors
+Kontribuantoj ĉe Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Estas sufiĉe frue versio; konsideru tion kiam vi recenzas.
+
+Ŝanĝoprotokolo de la projekto:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-es.txt b/dist/description/description-es.txt
new file mode 100644
index 0000000..d231438
--- /dev/null
+++ b/dist/description/description-es.txt
@@ -0,0 +1,47 @@
+Un bloqueador eficiente: capaz de cargar y aplicar miles más de filtros en comparación con otros bloqueadores populares, manteniendo un mínimo consumo de memoria y CPU.
+
+Ejemplo con imágenes ilustrando su eficiencia (en inglés): https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Uso: El botón grande de apagado/encendido en la interfaz emergente de la extensión, es para deshabilitar/habilitar uBlock₀ permanentemente en el sitio web actual. Aplica solo al sitio web actual, no habilita o deshabilita la extensión de forma general.
+
+***
+
+Flexible, es más que un "bloqueador de anuncios": también puede leer y crear filtros desde archivos hosts.
+
+Por defecto ya trae configuradas las siguientes listas de filtros:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Online Malicious URL Blocklist
+
+Otras listas disponibles pueden ser seleccionadas, si se desea:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- Y muchas más
+
+Por supuesto, mientras más filtros se habiliten, mayor será el consumo de memoria. No obstante, incluso después de añadir las dos listas adicionales de "Fanboy" y la "hpHosts’s Ad and tracking servers", uBlock₀ consume menos memoria que otros bloqueadores similares.
+
+También se debe tomar en cuenta que seleccionar algunas de estas listas adicionales puede conducir a una mayor probabilidad de aparición de problemas al mostrar un sitio web -- especialmente las listas utilizadas normalmente como archivo hosts.
+
+***
+
+Sin las listas de filtros preestablecidas, esta extensión no sería nada. Así que si alguna vez realmente quieres aportar algo, piensa en las personas que trabajan duro para mantener estas listas de filtros, disponibles de forma gratuita para todos.
+
+***
+
+Libre.
+Código abierto con licencia pública (GPLv3)
+Hecho para usuarios por los usuarios.
+
+Colaboradores @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Colaboradores @ Crowdin: https://crowdin.com/project/ublock
+
+***
+
+Registro de cambios del proyecto:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-et.txt b/dist/description/description-et.txt
new file mode 100644
index 0000000..8f4153c
--- /dev/null
+++ b/dist/description/description-et.txt
@@ -0,0 +1,50 @@
+Tõhus blokeerija: kasutab vähe mälu ja protsessorit ning sellegipoolest suudab laadida ja kasutada mitu korda rohkem filtreid kui teised tuntud blokeerijad.
+
+Illustreeritud ülevaade selle kasulikkusest: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Kasutamine: hüpikaknas oleva suure toitenupu abil on võimalik uBlock avatud lehel püsivalt keelata või lubada. See käib ainult hetkel avatud lehe, mitte kõikide saitide kohta.
+
+***
+
+Paindlik, midagi rohkemat kui ainult "reklaamide blokeerija" - laiendus suudab lugeda ja luua filtreid ka hosts-failidest.
+
+Laienduse installimisel kasutatakse järgnevaid soovitatud filtreid:
+
+- EasyList
+- Peter Lowe reklaamiserveri loend
+- EasyPrivacy
+- Pahavara levitavad domeenid
+
+Lisaks neile on veel saadaval:
+
+- Fanboy täiustatud jälitusloend
+- Dan Pollock'i hosts-fail
+- hpHosts'i reklaami- ja jälitusserverid
+- MVPS HOSTS
+- Spam404
+- Ja paljud teised
+
+Mida rohkem filtreid on kasutusel, seda suurem on mälu kasutatavus. Siiski, pärast Fanboy kahe lisaloendi - hpHosts'i reklaami- ja jälitusserverite lisamist kasutab uBlock siiski palju vähem mälu kui ülejäänud tuntud blokeerijad.
+
+Lisaks pidage meeles, et täiendavate loendite lisamine tõstab saitide valesti kuvamise ohtu -- eriti nende loendite puhul, mida tavaliselt kasutatakse hosts-failina.
+
+***
+
+Ilma soovitatud loenditeta poleks laienduse kasutamisel mõtet. Kui peaksite kunagi tahtma lisada oma panuse siis mõelge nende peale, kes on töötanud kogu südamest selle nimel, et loendid oleksid kasutamiskõlblikud ning tasuta kättesaadavad.
+
+***
+
+Tasuta.
+Avatud lähtekoodiga avaliku litsentsiga (GPLv3)
+Kasutajatelt kasutajaile.
+
+Toetajad Github'is:
+https://github.com/gorhill/uBlock/graphs/contributors
+Toetajad Crowdin'is: https://crowdin.net/project/ublock
+
+***
+
+Laienduse kasutamisel pange tähele, et tegemist on uue laiendusega.
+
+Projekti muudatuste logi:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-eu.txt b/dist/description/description-eu.txt
new file mode 100644
index 0000000..435abdb
--- /dev/null
+++ b/dist/description/description-eu.txt
@@ -0,0 +1,49 @@
+Blokeatzaile eraginkor bat: Memoria eta PUZ erabileran arina da, eta hala ere beste blokeatzaile ezagun batzuk baino milaka iragazki gehiago kargatu eta ezarri ditzake.
+
+Bere eraginkortasunaren adibide grafikoa: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Erabilera: Laster-leihoko pizte botoi handia uBlock uneko gunean behin betiko gaitu edo desgaitzeko da. Uneko guneari dagokio soilik, ez da botoi orokor bat.
+
+***
+
+Malgua, iragarki blokeatzaile bat baino gehiago da, ostalarietako iragazkiak sortu eta irakurri ditzake ere.
+
+Lehenetsita, honako iragazki zerrendak kargatu eta ezartzen ditu:
+
+- EasyList
+- Peter Loweren iragarki zerbitzarien zerrenda
+- EasyPrivacy
+- Malware domeinuak
+
+Zerrenda gehiago dituzu eskura hautatzeko hala nahiez gero:
+
+- Fanboyren hobetutako jarraipen zerrenda
+- Dan Pollocken ostalari zerrenda
+- hpHostsen iragarki eta jarraipen zerbitzariak
+- MVPS Ostalariak
+- Spam404
+- Eta beste hainbat gehiago
+
+Jakina, iragazki gehiago kargatuta memoria erabilera handiagoa da. Hala ere, Fanboyren bi zerrenda gehigarriak eta hpHostsen iragarki eta jarraipen zerbitzariak kargatuta, uBlockek beste blokeatzaile ezagun batzuk baino memoria gutxiago erabiltzen du.
+
+Bestalde, kontuan izan zerrenda gehigarri hauetako batzuk gaitzeak guneren bat hausteko aukerak handitzen dituela, batez ere ostalari fitxategi gisa erabili ohi diren zerrendak.
+
+***
+
+Lehenetsitako iragazki zerrendarik gabe gehigarri honek ez du ezer egiten. Beraz ezertan lagundu nahi baduzu pentsa ezazu erabiltzen dituzun iragazki zerrendak egunean mantentzeko tinko lanean dabiltzan horietan, guztiek erabiltzeko moduan doan eskuragarri jarri dituztenak.
+
+***
+
+Doan.
+Lizentzia libreduna (GPLv3)
+Erabiltzaileek erabiltzaileentzat sortua.
+
+Parte-hartzaileak @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Parte-hartzaileak @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Nahiko berria da bertsio hau, kontua izan honi buruz idaztean.
+
+Proiektuaren aldaketa egunkaria:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-fa.txt b/dist/description/description-fa.txt
new file mode 100644
index 0000000..c9fce70
--- /dev/null
+++ b/dist/description/description-fa.txt
@@ -0,0 +1,49 @@
+یک بلاکر موثر: نیاز به پردازش حافظه و سی پی یو کمتر و در عین حال اجرای هزاران فیلتر بیشتر از سایر رقبای بلاکر موجود.
+
+بررسی تصویری از کارایی این محصول: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+روش استفاده: دکمه ی پاور بزرگ در پنجرۀ بالاپَر برای فعال یا غیرفعال کردن دائمی یوبلاک برای وب‌سایت فعلی می‌باشد. این فقط برای همین سایت اعمال میشود، این دکمه ی پاور برای تمام سایت ها نیست.
+
+***
+
+انعطاف پذیر، بیشتر از یک "ad blocker" است: همچنین می تواند فیلتر‌هایی را از فایل‌های هاست‌های میزبان، خوانده و بسازد.
+
+بیرون از جعبه، این لیست فیلترها بارگذاری و اجرا میشوند:
+
+- EasyList
+- لیست سرور تبلیغاتی Peter Lowe
+- EasyPrivacy
+-دامنه های تروجان
+
+اگر میخواهید لیست های بیشتر برای انتخاب شما در دسترس هستند:
+
+- ردیابی لیست پیشرفته ی Fanboy
+- میزبانی فایل Dan Pollock
+- تبلیغ و ردیابی سرور hpHosts
+- هاست های MVPS
+- اسپم 404
+- و بسیاری دیگر
+
+البته هرچه فیلترهای بیشتری فعال باشند، حافظه ی بیشتری اشغال خواهد شد. با اینحال، حتی پس از اضافه کردن دو لیست اضافی Fanboy و سرور های ردیابی و تبلیغ hpHosts ، میبینیم که uBlock هنوز حافظه پایین تری از دیگر برنامه های مشابه اشغال میکند.
+
+همچنین، بدانید که انتخاب برخی از این لیست ها ممکن است افزایش احتمال شکستگی وب سایت--به ویژه آنهایی که به طور معمول به عنوان میزبان فایل شناخته میشوند را در پی داشته باشد.
+
+***
+
+بدون فهرست از پیش تعیین شده ی فیلتر، این افزونه هیچ است. پس اگر واقعا می خواهید کمکی کرده باشید، به افرادی فکر کنید که برای حفظ لیست فیلتر مورد استفاده شما سخت کار میکنند که برای استفاده همه به رایگان در دسترس باشد.
+
+***
+
+رایگان.
+متن باز با مجوز عمومی (GPLv3)
+برای کاربران توسط کاربران.
+
+مشارکت کنندگان در گیت هاب: https://github.com/gorhill/uBlock/graphs/contributors
+مشارکت کنندگان در کرادین https://crowdin.net/project/ublock
+
+***
+
+این کاملا یک نسخه اولیه است، هنگام بررسی اینرا بخاطر داشته باشید.
+
+تغییرات اخیر پروژه:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-fi.txt b/dist/description/description-fi.txt
new file mode 100644
index 0000000..e2b8af4
--- /dev/null
+++ b/dist/description/description-fi.txt
@@ -0,0 +1,49 @@
+Tehokas mainosten estäjä – käyttää vähän resursseja, mutta silti voit ladata ja pakottaa tuhansia suodatinsääntöjä enemmän kuin muut suositut mainoksia estävät lisäosat.
+
+Kuvitettu yleiskatsaus uBlockin tehokkuudesta (englanniksi): https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Käyttö: Iso virtanappi ponnahdusikkunassa on tarkoitettu pysyvästi estämään/sallimaan uBlock kyseisellä sivulla. Tämä koskee vain nykyistä sivua, ei kaikkia sivuja.
+
+***
+
+Joustava, tämä lisäosa on enemmän kuin perinteinen "mainosten estäjä". Voit lukea ja luoda suodattimia myös hosts-tiedostoista.
+
+Nämä suodatinlistat ovat automaattisesti ladattuna ja kytketty päälle:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+Halutessasi voit valita käyttöösi lisää listoja:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- Ja monia muita
+
+Jos sinulla on useita listoja käytössä, keskusmuistia kuluu enemmän. Tästä huolimatta, vaikka lisäisit Fanboyn kaksi lisälistaa ja hpHostsin listan, uBlockilla on silti pienempi muistinkulutus kuin muilla suosituilla mainosten estäjillä.
+
+Useiden listojen lisääminen saattaa aiheuttaa sivujen kaatumisen tai hajoamisen. Etenkin listat, joita käytetään normaalisti hosts-tiedostona, voivat aiheuttaa ongelmia.
+
+***
+
+Tämä lisäosa ei tee mitään ilman suodatinlistoja. Jos siis haluat osallistua jotenkin, muistathan kaikki ne ihmiset jotka työskentelevät pitääkseen käyttämäsi suodatinlistat ajan tasalla ja saatavilla ilmaiseksi.
+
+***
+
+Ilmainen.
+Avoimen lähdekoodin julkinen lisenssi (GPLv3)
+Käyttäjiltä käyttäjille.
+
+Kehittäjät @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Kehittäjät @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Otathan huomioon testatessasi, että käytössäsi on varsin varhainen versio.
+
+Projektin muutosloki:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-fil.txt b/dist/description/description-fil.txt
new file mode 100644
index 0000000..2494288
--- /dev/null
+++ b/dist/description/description-fil.txt
@@ -0,0 +1,51 @@
+Isang episyenteng blocker: magaan sa memorya at CPU footprint, ngunit nakakapag-loload at nakakapag-enforce ng libo-libong mga filters kumpara sa mga ibang sikat na blockers.
+
+Isinalarawan pangkalahatang-ideya ng kahusayan ng uBlock:
+https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Paggamit: Ang malaking button sa sa popup ay upang permanenteng huwag paganahin / paganahin ang uBlock para sa kasalukuyang web site. Nalalapat ito sa kasalukuyang web site lamang , hindi ito pangkalahatang button.
+
+***
+
+May kakayahang umangkop. Ito ay higit pa sa isang "ad blocker " : Maaari rin itong magtakda at lumikha ng mga filter mula sa mga host ng mga files.
+
+Ang mga listahang ito ng mga filter nag-loload at ipinapatupad :
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+Higit pang mga listahan ay magagamit para sa iyo upang piliin kung nanaisin:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- At iba pa.
+
+Siyempre, mas maraming pinapaganang mga filter , mas mataas ang memory footprint. Ngunit , kahit ang pagdaragdag ng dalawang extra na mga listahan ng Fanboy , hpHosts’s Ad at tracking servers, ang uBlock₀ pa rin ay may mas mababang memory footprint kaysa sa iba pang mga sikat na blockers.
+
+Gayundin, magkaroon ng kamalayan na ang pagpili ng ilan sa mga dagdag na mga listahan ay maaaring humantong sa mas mataas na posibilidad ng pagkasira ng web site - lalo na ang mga listahan na palaging ginagamit na hosts file.
+
+***
+
+Kung walang mga preset na listahan na mga filters, ang extension na ito ay wala kwenta. Kaya kung sakaling nais mong tumulong, isipin ang mga tao nagsusumikap upang mapanatili ang mga listahan ng filter na ginagamit mo , na ginawang libre para sa lahat.
+
+***
+
+Libre.
+Open source with public license (GPLv3)
+Para sa users by users.
+
+Mga nag-aambag @ Github:
+https://github.com/gorhill/uBlock/graphs/contributors
+Mga nag-aambag @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Kakalabas lang nito kaya't pag-isipan ang mga komentaryo bago magbigay ng review.
+
+Mga pagbabago sa proyekto:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-fr.txt b/dist/description/description-fr.txt
new file mode 100644
index 0000000..cbf4a89
--- /dev/null
+++ b/dist/description/description-fr.txt
@@ -0,0 +1,47 @@
+uBlock₀ est un bloqueur efficace de publicités et de pisteurs. Utilisant peu de mémoire vive et de ressources du processeur, il est pourtant capable d'appliquer des milliers de filtres de plus que d'autres bloqueurs populaires.
+
+Consultez cette page en anglais pour avoir une vue d'ensemble illustrée de son efficacité : https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Utilisation : Le gros bouton "Power" dans la fenêtre pop-up permet de désactiver/activer en permanence uBlock₀ pour le site Web en cours de consultation. Cela s'applique uniquement au site Web actuel, ce n'est pas un bouton "Power" global.
+
+***
+
+Flexible, uBlock₀ n'est pas qu'un simple bloqueur de publicités. Il peut également lire et créer des filtres depuis des fichiers hosts.
+
+Par défaut, ces listes de filtres sont chargées et appliquées :
+
+- EasyList (Liste anti-publicités maintenue fréquemment à jour par la communauté)
+- Peter Lowe’s Ad server list (Liste de serveurs publicitaires maintenue à jour par Peter Lowe)
+- EasyPrivacy (Liste anti-pisteurs maintenue fréquemment à jour par la communauté)
+- Malware domains (Liste de protection contre des domaines malveillants)
+
+Davantage de listes sont disponibles si vous souhaitez renforcer le blocage :
+
+- Fanboy’s Enhanced Tracking List (Liste de protection avancée contre le pistage maintenue à jour par Fanboy)
+- Dan Pollock’s hosts file (Fichier hosts bloquant publicités, domaines malveillants et autres pisteurs, maintenue fréquemment à jour par Dan Pollock)
+- hpHosts’s Ad and tracking servers (Fichier hosts bloquant des serveurs publicitaires et des serveurs de pistage, maintenue à jour par hpHosts)
+- MVPS HOSTS (Fichier Hosts bloquant publicités, domaines malveillants et autres pisteurs, maintenue à jour par MVPS)
+- Spam404 (Liste de protection contre les spams, maintenue fréquemment à jour par la communauté)
+- Et de nombreuses autres listes
+
+Bien évidemment, plus vous activez de filtres, plus l'empreinte mémoire augmentera. Pourtant, même après avoir ajouté deux listes supplémentaires créées par Fanboy et le fichier hosts d'hpHosts, uBlock₀ utilise moins de mémoire vive que tous les autres bloqueurs populaires.
+
+Veuillez tout de même prendre en compte qu'utiliser certaines listes supplémentaires peut conduire à quelques incompatibilités sur les sites Web que vous visitez - en particulier les fichiers hosts.
+
+***
+
+Sans les listes prédéfinies de filtres, cette extension (comme d'autres) ne serait rien. Alors si vous tenez vraiment à contribuer d'une quelconque manière, pensez aux personnes travaillant dur pour maintenir à jour ces listes de filtres que vous utilisez, qui plus est proposées gratuitement à tout le monde.
+
+***
+
+Gratuit.
+Source libre sous licence publique GPLv3
+Conçu par des utilisateurs pour des utilisateurs.
+
+Contributeurs sur GitHub : https://github.com/gorhill/uBlock/graphs/contributors
+Contributeurs sur Crowdin : https://crowdin.net/project/ublock
+
+***
+
+Journal des changements du projet (en anglais) :
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-fy.txt b/dist/description/description-fy.txt
new file mode 100644
index 0000000..0073e90
--- /dev/null
+++ b/dist/description/description-fy.txt
@@ -0,0 +1,49 @@
+In effisjnte adblocker: brûkt hast gjin prosessorkrêft en ûnthâld. Dochs kin it tûzenen filters mear lade en tapasse as oare populêre adblockers.
+
+Yllustrearre effisjinsjefergeliking: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Gebrûk: Mei de grutte oan-útknop yn de pop-up kin uBlock permanint yn- of útskeakele wurde foar de aktuele website. It wurdt inkeld op de aktuele website tapast. It is gjin globale oan-útknop.
+
+***
+
+Fleksibel, want it is mear as in "adblocker": it kin ek filters ynlêze en meitsje fan hostsbestannen.
+
+Standert wurde de folgjende filterlisten laden en tapast:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+Der binne mear listen beskikber dy't jo ynskeakelje kin:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- En in protte mear
+
+Natuerlik wurdt it ûnthâldgebrûk grutter as der mear filters ynskeakele wurde. Mar sels nei it ynskeakeljen fan Fanboy's twa ekstra listen, hpHosts’s Ad en tracking servers, hat uBlock in leger ûnthâldgebrûk as oare populêre blockers.
+
+Let op, it gebrûk fan guon fan dizze ekstra listen ferheget de kâns dat websites net korrekt werjûn wurde -- seker de listen dy't normaal as hosts-bestân brûkt wurde.
+
+***
+
+Sûnder de standert filterlist docht dizze add-on neat. Dus as jo ea echt in bydrage leverje wolle, tink dan oan de minsken dy't hurd wurkje om de filterlisten dy't jo brûke te ûnderhâlden, hokker allegearre fergees beskikber makke binne.
+
+***
+
+Frij.
+Open source mei publike lisinsje (GPLv3)
+Foar brûkers, troch brûkers.
+
+Meiwurkers @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Meiwurkers @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Unthâld dat dit in hiele betide ferzje is as jo kommentaar leverje.
+
+Projektwizigingslochboek:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-gl.txt b/dist/description/description-gl.txt
new file mode 100644
index 0000000..f2bf7cb
--- /dev/null
+++ b/dist/description/description-gl.txt
@@ -0,0 +1,50 @@
+Un bloqueador eficiente: baixo consumo da memoria e da CPU, é capaz de cargar e aplicar unha morea de filtros máis que outros famosos bloqueadores.
+
+Ilustración da súa eficiencia: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Uso: o botón grande da xanela emerxente activa/desactiva o uBlock para a páxina en uso. Isto só afecta a páxina na que estés, non ten un efecto global.
+
+***
+
+É flexible, é máis que un "bloqueador de anuncios": pode tamén ler e crear filtros dende os arquivos hosts.
+
+As seguintes listas de filtros veñen cargadas por defecto:
+
+- A EasyList
+- A lista de servidores de anuncios do Peter Lowe
+- A EasyPrivacy
+- A Malware domains
+
+Hai máis listas para seleccionar se o queres:
+
+- A Fanboy’s Enhanced Tracking List
+- A lista de hosts do Dan Pollock
+- A hpHosts’s Ad and tracking servers
+- A MVPS HOSTS
+- A Spam404
+- E unha morea máis delas
+
+Ten en conta que cantos máis listos teñas activos, más memoria comerá o programa. Aínda así, despois de engadir dúas listas extra (a <i>hpHosts’s Ad</i> e a <i>tracking servers</i>, o uBlock consume aínda menos memoria que outros famosos bloqueadores.
+
+Ten en conta tamén que seleccionar todas estas listas extra pode xenerar problemas ó visualizar unha páxina web — sobre todo nas listas empregadas normalmente como arquivo host.
+
+***
+
+Sen as listas de filtros predeterminadas, esta extensión non serviría para moito. Polo que se de verdade queres contribuir nalgo, pensa na xente que traballa duro para manter as listas de filtros que estás a empregar, e que son dispoñibles de balde.
+
+***
+
+Libre.
+Código aberto con licencia pública (GPLv3)
+Feito por e para os usuarios.
+
+Colaboradores @ Github (en inglés): https://github.com/gorhill/uBlock/graphs/contributors
+Colaboradores @ Crowdin (en inglés): https://crowdin.net/project/ublock
+Podes botar unha man coa traducción ó galego, é de balde!
+
+***
+
+Esta é unha versión en desenvolvemento, telo en conta cando a evalúes.
+
+Rexistro de cambios do proxecto:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-gu.txt b/dist/description/description-gu.txt
new file mode 100644
index 0000000..43af9b5
--- /dev/null
+++ b/dist/description/description-gu.txt
@@ -0,0 +1,49 @@
+An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there.
+
+Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button.
+
+***
+
+Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files.
+
+Out of the box, these lists of filters are loaded and enforced:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+More lists are available for you to select if you wish:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- And many others
+
+Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there.
+
+Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file.
+
+***
+
+Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free.
+
+***
+
+Free.
+Open source with public license (GPLv3)
+For users by users.
+
+Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Contributors @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+It's quite an early version, keep this in mind when you review.
+
+Project change log:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-he.txt b/dist/description/description-he.txt
new file mode 100644
index 0000000..4295132
--- /dev/null
+++ b/dist/description/description-he.txt
@@ -0,0 +1,49 @@
+חוסם יעיל: חותמת נמוכה של המעבד והזיכרון, ועדיין יכול לטעון ולאפשר אלפי מסננים יותר מאשר חוסמים פופולריים אחרים.
+
+סקירה כוללת על היעילות שלו: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+שימוש: לחצן ההפעלה הגדול בחלון הפופאפ הוא בשביל לבטל/להפעיל את uBlock עבור האתר הנוכחי. הוא חל על האתר הנוכחי בלבד, זהו לא לחצן הפעלה גלובלי.
+
+***
+
+גמיש, יותר מ "חוסם פרסומות": הוא יכול גם לקרוא וליצור מסננים מקבצי hosts.
+
+היישר מהקופסה, רשימות המסננים הללו נטענות ומאופשרות:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+רשימות נוספות אלו זמינות לבחירתך אם תרצה:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- ועוד רבים אחרים
+
+כמובן שככל שכמות מסננים גדולה יותר מופעלת, ככה גם חתימת הזיכרון גדולה יותר. ובכל זאת, אפילו לאחר הוספת שתי הרשימות הנוספות של Fanboy ו hpHosts’s Ad and tracking servers, ל uBlock עדיין יש חתימת זיכרון נמוכה יותר מלחוסמים פופולריים אחרים שם בחוץ.
+
+כמו כן, תהיה מודע שבחירה של חלק מהרשימות הנוספות הללו עלולה להוביל בסבירות גבוהה לשבירה של אתרי אינטרנט -- במיוחד הרשימות אשר בדרך כלל משומשות כקובץ hosts.
+
+***
+
+ללא רשימות מסננים מוגדרים מראש, תוסף זה לא שווה כלום. אז אם אי פעם תרצה באמת לתרום משהו, תחשוב על האנשים שעובדים לילות כימים כדי לתחזק את רשימות המסננים שאתה משתמש בהן, אשר הובאו לשימוש על ידי כולם ללא כל תשלום.
+
+***
+
+תוכנה חופשית.
+קוד פתוח עם רשיון ציבורי (GPLv3)
+בשביל המשתמשים על ידי המשתמשים.
+
+תורמים @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+תורמים @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+קח בחשבון שזוהי גרסה מוקדמת בזמן הסקירה שלך.
+
+רשימת השינויים של הפרויקט:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-hi.txt b/dist/description/description-hi.txt
new file mode 100644
index 0000000..d770c2e
--- /dev/null
+++ b/dist/description/description-hi.txt
@@ -0,0 +1,49 @@
+एक बेहतर ब्लॉकर : एक बेहतर ब्लॉक कर जो मेमोरी और सीपीयू पर ज्यादा जोर नहीं देता, और जो हजारों फिल्टरों को आसानी से लोड करके और लागू कर सकता है दूसरे लोकप्रिय ब्लॉकरों से।
+
+अपनी काबिलियत का ओवरव्यू: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+इस्तेमाल: बड़ा पावर बटन पॉपअप uBlock को मौजूदा वेबसाइट में बंद या चालू करने के लिए है। यह सिर्फ मौजूदा वेब साइट पर लागू होता है, यह एक ग्लोबल पावर बटन नहीं है।
+
+***
+
+लचीला, यह एक "एडब्लॉकर" से ज्यादा है: यह होस्ट फाइलों को और फिल्टरों को पढ़ और बना सकता है।
+
+इंस्टॉल करते ही इन फिल्टरों को लोड और लागू किया जाएगा:
+
+- EasyList
+- Peter Lowe's एड सर्वर सूची
+- EasyPrivacy
+- Malware domains
+
+अगर आप चाहें तो चुनने के लिए और भी सूचियाँ उपलब्ध हैं:
+
+- Fanboy कि बढ़ी ट्रैकिंग सूची
+- Dan Pollock कि होस्ट फाइल
+- hpHosts कि एड और ट्रैकिंग सर्वरस
+- MVPS हॉस्ट्स
+- Spam404
+- और बहुत सारे
+
+बेशक, ज्यादा फिल्टर्स मतलब ज्यादा मेमोरी फुटप्रिंट। फिर भी, Fanboy की दो और सूचियों, hpHosts के विज्ञापन और ट्रैकिंग सर्वरों को जोड़ने के बाद, uBlock में अभी भी दूसरे लोकप्रिय ब्लॉकर्स की तुलना में कम मेमोरी फ़ुटप्रिंट है।
+
+इसके अलावा, ध्यान रखें कि इनमें से कुछ अतिरिक्त सूचियों को चुनने से वेब साइट के टूटने की संभावना ज्यादा हो सकती है -- विशेष रूप से उन सूचियों को जो आमतौर पर होस्ट फ़ाइल के रूप में इस्तेमाल की जाती हैं।
+
+***
+
+बिना प्रीसेट फिल्टर सूचियों के, यह एक्सटेंशन कुछ भी नहीं है। इसलिए अगर आप कभी सचमुच में कुछ योगदान करना चाहते हैं, तो उन लोगों के बारे में सोचें जो आपके द्वारा इस्तेमाल की जा रही फ़िल्टर सूचियों को बनाए रखने के लिए कड़ी मेहनत कर रहे हैं, जिन्हें मुफ्त में सभी को इस्तेमाल करने के लिए उपलब्ध कराया गया है।
+
+***
+
+नि: शुल्क।
+ओपन-सोर्स पब्लिक लाइसेंस के साथ (GPLv3)
+उपयोगकर्ताओं द्वारा उपयोगकर्ताओं के लिए।
+
+योगदानकर्ताओं @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+योगदानकर्ताओं @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+It's quite an early version, keep this in mind when you review.
+
+प्रोजेक्ट परिवर्तन लॉग:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-hr.txt b/dist/description/description-hr.txt
new file mode 100644
index 0000000..dfb03d2
--- /dev/null
+++ b/dist/description/description-hr.txt
@@ -0,0 +1,49 @@
+Efikasan bloker: radi sa malo memorije i CPU-a i još može učitati i primijeniti više tisuća filtera od drugih popularnih blokera.
+
+Ilustrirani pregled njegove efikasnosti: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Korištenje: Veliki gumb u skočnom prozorčiću je za trajno omogućavanje i onemogućavanje uBlock-a na trenutnom web-mjestu. To se odnosi samo na trenutno web-mjesto te nije za kompletno isključivanje.
+
+***
+
+Fleksibilan, nije samo "reklamni bloker": može i čitati i napraviti filtre iz hosts datoteka.
+
+Odmah po instalaciji slijedeći popisi filtera su pokrenuti i provode se:
+
+- EasyList
+- Peter Loweov popis reklamnih poslužitelja
+- EasyPrivacy
+- Zloćudne domene
+
+Ostale liste su dostupne za odabir ako ih želite:
+
+- Fanboy poboljšani popis praćenja
+- Dan Pollockova hosts datoteka
+- hpHosts serveri za reklame i praćenje
+- MVPS HOSTS
+- Spam404
+- I mnogi drugi
+
+Naravno, više omogućenih filtera, veći je memorijski otisak. Ipak, čak i nakon dodavanja Fanboyova dva dodatna popisa, hpHosts servera za reklame i praćenje, uBlock još uvijek ima manji memorijski otisak od drugih popularnih blokera.
+
+Također, imajte na umu da odabirom nekih od ovih pomoćnih popisa možete povećati šanse kvara web-mjesta -- posebno onih popisa koji se obično koriste kao hosts datoteke.
+
+***
+
+Bez prvotne liste filtera, ovo proširenje ništa ne radi. Tako da ako ikad želite doprinijeti nešto razmislite o ljudima koji rade naporno održavajući popise filtera koje koristite i koji su dostupni besplatno za korištenje od strane svih uključenih.
+
+***
+
+Besplatno.
+Otvorenog kôda sa javnom licencom (GPLv3)
+Za korisnike od strane korisnika.
+
+Suradnici @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Suradnici @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Ovo je rana verzija, imajte to na umu kada budete ocjenjivali.
+
+Popis promjena:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-hu.txt b/dist/description/description-hu.txt
new file mode 100644
index 0000000..67d9b60
--- /dev/null
+++ b/dist/description/description-hu.txt
@@ -0,0 +1,49 @@
+Egy hatékony blokkoló: kíméletes a processzorral és a memóriával, mégis képes nagyságrendekkel több szűrő betöltésére és alkalmazására a többi népszerű blokkolóhoz viszonyítva.
+
+Áttekintés a hatékonyságáról: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Használat: A nagy bekapcsológomb a kiegészítő tiltására/engedélyezésére szolgál a jelenlegi webhelyen. A gomb kizárólag a jelenlegi webhelyre érvényes, nem egy globális kapcsoló.
+
+***
+
+Több mint egy egyszerű reklámblokkoló: képes hosts fájlok bejegyzéseit is értelmezni, és azokból szűrőket létrehozni.
+
+Alapértelmezetten a következő szűrőlisták kerülnek betöltésre és alkalmazásra:
+
+- EasyList
+- Peter Lowe hirdetési szerverlistája
+- EasyPrivacy
+- Kártékony domainek
+
+Egyéb listák is kiválaszthatók a felhasználó igénye szerint:
+
+- Fanboy bővített követők listája
+- Dan Pollock hosts fájlja
+- hpHosts hirdetés és követőszerverek listája
+- MVPS HOSTS
+- Spam404
+- És sok más
+
+Természetesen, több szűrő használatával a memóriaigény is növekszik. Ennek ellenére Fanboy két extra listája és a hpHosts (reklám és követőszerverek) lista hozzáadásával a uBlock memóriafogyasztása még mindig alacsonyabb, mint a legnépszerűbb blokkolóké.
+
+Emellett, néhány extra lista kiválasztásával megnövekszik az esély arra, hogy a webhelyek használhatatlanná válnak -- főleg azon listákról van szó, melyek normál esetben hosts fájlként használatosak.
+
+***
+
+A szűrőlisták nélkül a kiegészítő nem sokat érne. Tehát, ha valaha is eszedbe jutna támogatást kínálni, akkor előbb gondolj azokra, akik keményen dolgoznak a listák karbantartásával, illetve ingyenesen hozzáférhetővé teszik azokat mindenki számára.
+
+***
+
+Ingyenes.
+Nyílt forráskódú nyilvános licenccel (GPLv3)
+Felhasználóknak felhasználóktól.
+
+Közreműködők a Github-on: https://github.com/gorhill/uBlock/graphs/contributors
+Közreműködők a Crowdin-en: https://crowdin.net/project/ublock
+
+***
+
+Ez még egy elég korai verzió, amit illik szem előtt tartani értékeléskor.
+
+Változások listája:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-hy.txt b/dist/description/description-hy.txt
new file mode 100644
index 0000000..f46c5ec
--- /dev/null
+++ b/dist/description/description-hy.txt
@@ -0,0 +1,47 @@
+Արդյունավետ արգելափակիչ. չի ծանրաբեռնում մշակիչը և օպերատիվ հիշողությունը, միևնույն ժամանակ աջակցում է հազարներով ավելի շատ զտիչիեր, քան այլ հանրաճանաչ արգելափակիչները։
+
+Դրա արդյունավետության պատկերազարդ ակնարկ՝ https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Օգտագործումը. ելնող լուսամուտի հոսանքի մեծ կոճակը ծառայում է ընթացիկ կայքի համար uBlock-ն անջատելու/միացնելու համար։ Դա ընդհանուր հոսանքի կոճակ չէ, այլ վերաբերում է միայն ընթացիկ կայքին։
+
+***
+
+Ճկուն, ավելին, քան պարզապես «գովազդի արգելափակիչ». uBlock֊ն կարող է կարդալ և ստեղծել զտիչներ հոսթ-նիշքերից։
+
+Լռելյայն կբեռնվեն և կկիրառվեն զտիչների հետևյալ ցանկերը՝
+
+- EasyList
+- Գովազդի սպասարկիչների ցանկ Փիթեր Լոուից
+- EasyPrivacy
+- Վնասակար տիրույթներ
+
+Ցանկության դեպքում կկարողանաք ընտրել մատչելի այլ ցանկեր՝
+
+- Հետագծող սպասարկիչների ընդլայնված ցանկ Fanboy-ից
+– Dan Pollock-ի hosts նիշքը
+- Գովազդային և հետագծման սպասարկիչներ hpHosts-ից
+- MVPS HOSTS
+- Spam404
+- Եվ բազում այլ
+
+Իհարկե, որքան շատ զտիչներ են միացված, այնքան բարձր է հիշողության օգտագործումը։ Այնուամենայնիվ, նույնիսկ Fanboy-ի երկու լրացուցիչ ցանկերը, hpHosts-ի գովազդային և հետագծող սպասարկիչներն ավելացնելուց հետո, uBlock֊ն ավելի քիչ է գործածում հիշողությունը, քան շատ սիրված այլ արգելափակիչները։
+
+Նաև նկատի ունեցեք, որ լրացուցիչ ցանկերից մի քանիսը կարող են հանգեցնել կայքի կոտրման մեծ հավանականության, հատկապես այն ցանկերի, որոնք սովորաբար օգտագործվում են որպես hosts նիշք։
+
+***
+
+Առանց զտիչների նախադրված ցուցակների այս ընդլայնումը ոչինչ է։ Այնպես որ, եթե դուք իսկապես ցանկանում եք ներդրում ունենալ, մտածեք այն մարդկանց մասին, ովքեր ջանասիրաբար աշխատում են զտիչների ցանկերի վրա, որոնք տրամադրվում են անվճար օգտագործման համար։
+
+***
+
+Անվճար։
+Բաց ելակետային կոդ հրապարակավ թույլատրագրով (GPLv3)։
+Օգտվողներին օգտվողների կողմից։
+
+Աջակցողները Github-ում՝ https://github.com/gorhill/uBlock/graphs/contributors
+Աջակցողները Crowdin-ում՝ https://crowdin.net/project/ublock
+
+***
+
+Փոփոխությունների մատյան՝
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-id.txt b/dist/description/description-id.txt
new file mode 100644
index 0000000..763a03f
--- /dev/null
+++ b/dist/description/description-id.txt
@@ -0,0 +1,49 @@
+Pemblokir yang efisien: ringan penggunaan memori dan CPU, namun dapat memuat dan menjalankan ribuan filter lain dibanding pemblokir populer lain di luar sana.
+
+Ringkasan ilustrasi efisiensi: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP :-Efficiency-Compared
+
+Penggunaan: Tombol daya yang besar dalam popup berfungsi menonaktifkan/mengaktifkan uBlock secara permanen untuk situs yang sedang dibuka. Berlaku untuk situs yang sedang dibuka saja, bukan tombol daya global.
+
+***
+
+Fleksibel, lebih dari sekedar "pemblokir iklan": juga dapat membaca dan membuat filter dari berkas host.
+
+Langsung bekerja, daftar filter berikut ini dimuat dan dijalankan:
+
+- EasyList
+- Daftar server iklan Peter Lowe
+- EasyPrivacy
+- Domain malware
+
+Jika Anda ingin, masih banyak tersedia daftar lain untuk Anda pilih:
+
+- Daftar Pelacakan Fanboy yang DItingkatkan
+- Berkas host Dan Pollock
+- Server iklan dan pelacakan hpHosts
+- HOST MVPS
+- Spam404
+- dan banyak lainnya
+
+Tentu saja, semakin banyak filter yang diaktifkan, semakin besar penggunaan memori. Namun, bahkan setelah menambahkan 2 daftar ekstra Fanboy, server iklan dan pelacakan hpHosts, penggunaan memori uBlock masih lebih kecil dibanding pemblokir iklan populer lain di luar sana.
+
+Perlu diketahui juga bahwa memilih beberapa daftar ekstra juga berpeluang lebih tinggi menyebabkan kerusakan situs -- terutama daftar yang biasanya digunakan sebagai berkas host.
+
+***
+
+Tanpa daftar filter yang ada, ekstensi ini bukanlah apa-apa. Jadi, jika Anda benar-benar ingin berkontribusi sesuatu, berpikirlah tentang orang-orang yang bekerja keras mengelola daftar filter yang Anda gunakan, yang dibuat dan tersedia untuk digunakan oleh semua dengan gratis.
+
+***
+
+Gratis.
+Sumber terbuka dengan lisensi publik (GPLv3)
+Untuk pengguna oleh pengguna.
+
+Kontributor @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Kontributor @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Masih dalam versi yang sangat awal, mohon diingat ketika anda membuat ulasan.
+
+Catatan perubahan proyek:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-it.txt b/dist/description/description-it.txt
new file mode 100644
index 0000000..d8b1ec8
--- /dev/null
+++ b/dist/description/description-it.txt
@@ -0,0 +1,47 @@
+uBlock è un efficiente ad-blocker: occupa poca memoria e poca CPU, ma può usare migliaia di filtri in più rispetto ad altri software simili.
+
+Consulta questa pagina (in inglese) per verificare la sua efficacia https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Uso: il pulsante power nel popup serve per disabilitare/abilitare permanentemente uBlock nel sito che stai visitando. e non serve per disabilitare/abilitare l'estensione.
+
+***
+
+Molto più che un ad-blocker: può anche creare filtri dal file host.
+
+Per default sono attivate queste liste:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+Puoi anche attivare moltre altre liste:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- Ecc.
+
+Ovviamente, più liste attivi, maggiore sarà l'impatto sulla memoria. Anche aggiungendo altre due liste di Fanboy, ad di hpHosts e tracking server, uBlock userà meno memoria di molti altri ad-blocker.
+
+Selezionando alcuni di questi filtri può portare ad una maggiore probabilità di problemi nel visualizzare alcuni siti web.
+
+***
+
+Senza queste liste di filtri, questa estensione non è niente. osì se vuoi contribuire, pensa alle persone che lavorano duramente per mantenere queste liste che stai usando, che sono disponibili gratuitamente.
+
+***
+
+Libero.
+Open source with public license (GPLv3)
+Fatto dagli utenti per gli utenti.
+
+Collaboratori @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Collaboratori @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Per leggere le novità di ogni versione consulta questa pagina (In Inlgese):
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-ja.txt b/dist/description/description-ja.txt
new file mode 100644
index 0000000..71d4295
--- /dev/null
+++ b/dist/description/description-ja.txt
@@ -0,0 +1,49 @@
+効率的なブロッカー: メモリーとCPUに優しいため、人気のある他のブロッカーと比べて何千も多くのフィルターを使用することができます。
+
+他ソフトとの比較: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+使用法: ポップアップに表示される大きな電源ボタンで、現在のサイトのuBlockの有効/無効を切り替えます。 変更は現在のサイトへのみ適用されます。他のサイトとの共通ボタンではありません。
+
+***
+
+ただの「広告ブロッカー」より柔軟です:ホストファイルを読み込みフィルターを作成できます。
+
+初回起動時の設定では、以下のフィルターが読み込まれ、適用されています:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+ご希望であればさらに多くのリストがご利用できます:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- などなど
+
+もちろん、多くのフィルターを適用すれば使用メモリーは増えます。 それでも、Fanboy's Special Blocking List、Fanboy's Enhanced Tracking List、hpHost's Ad and tracking serversの3つを追加してもなお、他の人気のブロッカーよりも少ないメモリー消費を実現しています。
+
+それと、多くのリストの適用は(特にホストファイルとしてよく使われているリスト)ウェブサイトの崩壊を起こしかねないことに注意してください。
+
+***
+
+この拡張機能は、あらかじめ設定されているフィルターのリストが無ければ意味を成しません。 ですので、何かしらの形で貢献したいと考えることがあった時は、これらのリストを無料で懸命に更新し続けている方々を思い出してください。
+
+***
+
+無料.
+パブリックライセンス(GPLv3)のオープンソース
+ユーザーによって作られた、ユーザーのための物。
+
+貢献者 @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+貢献者 @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+これは割と初期のバージョンですので、それを念頭にレビューをお願いします。
+
+プロジェクト変更ログ:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-ka.txt b/dist/description/description-ka.txt
new file mode 100644
index 0000000..e275750
--- /dev/null
+++ b/dist/description/description-ka.txt
@@ -0,0 +1,49 @@
+რეკლამების შედეგიანი შემზღუდავი: მეხსიერებისა და პროცესორის შემსუბუქებული მოხმარება, რეკლამების სხვა შემზღუდავებთან შედარებით, ათასობით მეტი ფილტრის გამოყენების პირობებშიც კი.
+
+შედეგიანობის მიმოხილვა იხილეთ ბმულზე: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+გამოყენება: ჩართვის დიდი ღილაკით, ჩამოშლილ მენიუში, შესაძლებელია uBlock-ის ჩართვა/გამორთვა მიმდინარე ვებსაიტზე. ეს ღილაკი მოქმედებს მხოლოდ არსებულ საიტზე და არ გამოიყენება ზოგადად ჩართვა/გამორთვისთვის.
+
+***
+
+მეტად მოქნილი, ეს არაა უბრალოდ „რეკლამების შემზღუდავი“: ასევე შესაძლებელია hosts ფაილის წაკითხვა და ფილტრების შექმნა.
+
+გარდა ამისა, ნაგულისხმევად ჩართულია და გამოიყენება შემდეგი გასაფილტრი სიები:
+
+- EasyList
+- Peter Lowe-ის სარეკლამო სერვერების სია
+- EasyPrivacy
+- მავნე დომენები
+
+ასევე, ხელმისაწვდომია სიები სურვილისამებრ შესარჩევად:
+
+- Fanboy-ის გაუმჯობესებული წესები თვალყურისმდევნებლების შესაზღუდად
+- Dan Pollock-ის hosts ფაილი
+- hpHosts-ის სარეკლამო და თვალყურისმდევნელი სერვერები
+- MVPS HOSTS
+- Spam404
+- და კიდევ ბევრი
+
+რასაკვირველია, რაც უფრო მეტი ფილტრია ჩართული, მეხსიერების გამოყენება იზრდება. თუმცა, Fanboy-ის გაფართოებული წესების, hpHosts-ის სარეკლამო და თვალყურისმდევნელი სერვერების დამატების შემთხვევაშიც კი, uBlock მაინც ნაკლებ მეხსიერებას იყენებს, ვიდრე ყველა სხვა ცნობილი შემზღუდავი პროგრამები.
+
+ამასთან, გაითვალისწინეთ, რომ ზოგიერთი დამატებითი წესების შერჩევის შედეგად, შესაძლოა ვებსაიტები არ გამოჩნდეს გამართულად -- განსაკუთრებით იმ წესების შემთხვევაში, რომელიც ჩვეულებრივ, hosts ფაილად გამოიყენება.
+
+***
+
+წინასწარ შედგენილ წესებს, მნიშვნელოვანი ადგილი უჭირავს ამ გაფართოების შედეგიან მუშაობაში. ასე რომ, თუ ოდესმე გადაწყვეტთ ვინმესთვის შემოწირულობის გაღებას, იფიქრეთ იმ ადამიანებზე, რომლებიც თავდაუზოგავად შრომობენ იმ გასაფილტრი წესების მუდმივ განახლებაზე, რომლითაც სარგებლობთ და რომელიც ხელმისაწვდომია ყველასთვის უფასოდ.
+
+***
+
+უფასო.
+ღია წყაროს მქონე საჯარო ლიცენზიით (GPLv3)
+მომხმარებლების მიერ, მომხმარებლებისთვის.
+
+წვლილის შემტანები @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+წვლილის შემტანები @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+It's quite an early version, keep this in mind when you review.
+
+ცვლილებების ჩამონათვალი:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-kk.txt b/dist/description/description-kk.txt
new file mode 100644
index 0000000..0407a69
--- /dev/null
+++ b/dist/description/description-kk.txt
@@ -0,0 +1,49 @@
+An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there.
+
+Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button.
+
+***
+
+Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files.
+
+Out of the box, these lists of filters are loaded and enforced:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+More lists are available for you to select if you wish:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- And many others
+
+Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there.
+
+Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file.
+
+***
+
+Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free.
+
+***
+
+Еркін.
+Open source with public license (GPLv3)
+For users by users.
+
+Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Contributors @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+It's quite an early version, keep this in mind when you review.
+
+Project change log:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-kn.txt b/dist/description/description-kn.txt
new file mode 100644
index 0000000..72679f6
--- /dev/null
+++ b/dist/description/description-kn.txt
@@ -0,0 +1,50 @@
+ಒಂದು ದಕ್ಷ ನಿರ್ಬಂಧಕ: ಮಿತವಾದ ಮೆಮೊರಿ ಹಾಗೂ ಸಿಪಿಯೂ ಹೆಜ್ಜೆಗುರುತು ಇದ್ದರೂ, ಇತರ ಜನಪ್ರಿಯ ನಿರ್ಬಂಧಕಗಳಿಗಿಂತ ಸಾವಿರಾರು ಹೆಚ್ಚು ಶೋಧಕಗಳನ್ನು ಹಾಕಿ ಮತ್ತು ಜಾರಿಗೆ ತರಬಲ್ಲದು.
+
+ಇದರ ದಕ್ಷತೆಯ ಸಚಿತ್ರ ಪಕ್ಷಿನೋಟ: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+ಬಳಕೆ: ಪಾಪ್ಅಪ್ ದೊಡ್ಡ ವಿದ್ಯುತ್ ಬಟನ್ ಶಾಶ್ವತವಾಗಿ / ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು ಪ್ರಸ್ತುತ ವೆಬ್ ಸೈಟ್ uBlock ಸಕ್ರಿಯಗೊಳಿಸಲು ಹೊಂದಿದೆ. ಇದು ಜಾಗತಿಕ ವಿದ್ಯುತ್ ಬಟನ್ ಅಲ್ಲ, ಪ್ರಸ್ತುತ ಜಾಲತಾಣಕ್ಕೆ ಮಾತ್ರ ಅನ್ವಯಿಸುತ್ತದೆ.
+
+***
+
+ಹೊಂದಿಕೊಳ್ಳುವಿಕೆ, ಇದು ಒಂದು "ಜಾಹೀರಾತು ನಿರ್ಬಂಧಕಕ್ಕಿಂತ" ಹೆಚ್ಚು: ಇದು ಅತಿಥೇಯಗಳ ಕಡತಗಳನ್ನು ಓದಬಲ್ಲದು ಹಾಗೂ ಶೋಧಕಗಳು ರಚಿಸಬಲ್ಲದು.
+
+ಫಿಲ್ಟರ್ಗಳ ಪಟ್ಟಿಗಳನ್ನು ಲೋಡ್ ಮಾಡಿ ಸಂಪೂರ್ಣವಾಗಿ ವಿಧಿಸಲಾಗಿದೆ:
+
+ಸರಳವಾದ ಪಟ್ಟಿ
+ಪೀಟರ್ ಲೋವೆ ಜಾಹೀರಾತು ಸರ್ವರ್ ಪಟ್ಟಿ
+ಸರಳ ಗೌಪ್ಯತೆ
+ಮಾಲ್ವೇರ್ ಡೊಮೇನ್ಗಳ
+
+ನೀವು ಬಯಸಿದರೆ, ಆಯ್ಕೆ ಮಾಡಲು ಹೆಚ್ಚು ಪಟ್ಟಿಗಳನ್ನು ಲಭ್ಯವಿದೆ:
+
+ಫ್ಯಾನ್ಬಾಯ್ ಅವರ ಉತ್ತಮ ಸುಧಾರಿತ ಪಟ್ಟಿ
+ಡಾನ್ ಪೊಲಾಕ್ ಅತಿಥೇಯಗಳ ಕಡತ
+- ಹೆಚ್ಪಿಹೋಸ್ಟ್ನ ಜಾಹೀರಾತು ಮತ್ತು ಜಾಡುಹಿಡಿಯುವಿಕೆಯ ಸರ್ವರ್ಗಳು
+-ಎಮ್ ವಿ ಪಿ ಎಸ್ ಹೋಸ್ಟ್ಗಳು
+ಸ್ಪಾಮ್ ೪೦೪
+- ಹಾಗೂ ಹಲವಾರು
+
+ಸಹಜವಾಗಿ, ಹೆಚ್ಚು ಶೋಧಕಗಳು ಸಕ್ರಿಯವಾಗಿದ್ದಲ್ಲಿ, ಹೆಚ್ಚಿನ ಸ್ಮೃತಿ ಹೆಜ್ಜೆಗುರುತು. ಹೆಚ್ಪಿಹೋಸ್ಟ್ನ ಜಾಹೀರಾತು ಮತ್ತು ಜಾಡುಹಿಡಿಯುವಿಕೆಯ ಸರ್ವರ್ಗಳು ಫ್ಯಾನ್ಬಾಯ್ ಎರಡು ಹೆಚ್ಚುವರಿ ಪಟ್ಟಿಗಳನ್ನು ಸೇರಿಸಿದ ನಂತರವೂ, uBlock ಇತರ ಜನಪ್ರಿಯ ನಿರ್ಬಂಧಕಗಳಿಗಿಂತ ಕಡಿಮೆ ಸ್ಮೃತಿ ಹೆಜ್ಜೆಗುರುತನ್ನು ಹೊಂದಿದೆ.
+
+ಅಲ್ಲದೆ, ಸಾಮಾನ್ಯವಾಗಿ ಈ ಹೆಚ್ಚುವರಿ ಪಟ್ಟಿಗಳಲ್ಲಿ ಕೆಲವನ್ನು ಆಯ್ಕೆ ಮಾಡುವುದು, ಜಾಲತಾಣ ಒಡೆಯುವಿಕೆಯ ಹೆಚ್ಚಿನ ಸಂಭವನೀಯತೆಗೆ ಕಾರಣವಾಗಬಹುದು, ವಿಶೇಷವಾಗಿ ಅತಿಥೇಯ ಕಡತವಾಗಿ ಬಳಸಲ್ಪಡುವ ಪಟ್ಟಿಗಳು - ತಿಳಿದಿರಲಿ.
+
+***
+
+ಪೂರ್ವನಿಯೋಜಿತ ಶೋಧಕಗಳ ಪಟ್ಟಿಗಳಿಲ್ಲದೆ, ಈ ಎಕ್ಸಟೆನ್ಶನ್ ಏನೂ ಅಲ್ಲ. ನೀವು ಎಂದಾದರೂ, ನಿಜವಾಗಿಯೂ ಏನಾದರೂ ಕೊಡುಗೆ ನೀಡಬೇಕು ಎಂದೆನಿಸಿದರೆ,
+ಎಲ್ಲರೂ ಉಚಿತವಾಗಿ ಬಳಸಲು ದೊರೆಯುವಂತಾಗಿರುವಾ, ನೀವು ಬಳಸುವ ಶೋಧಕಪಟ್ಟಿಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಕಷ್ಟಪಟ್ಟು ಕೆಲಸ ಮಾಡುತಿರುವವರ ಬಗ್ಗೆ ಯೋಚಿಸಿ.
+
+***
+
+ಉಚಿತ.
+ಸಾರ್ವಜನಿಕ ಪರವಾನಗಿ ಮುಕ್ತ ಆಕರ (ಜಿ. ಪಿ. ಎಲ್. ವಿ೩)
+ಬಳಕೆದಾರರಿಂದ ಬಳಕೆದಾರರಿಗಾಗಿ.
+
+ನೀಡುಗರು @ ಗಿಟ್ಹಬ್: https://github.com/gorhill/uBlock/graphs/contributors
+ನೀಡುಗರು @ ಕ್ರೌಡ್ಇನ್: https://crowdin.net/project/ublock
+
+***
+
+ಇದು ಸಾಕಷ್ಟು ಆರಂಭಿಕ ಆವೃತ್ತಿ, ನೀವು ಪರಿಶೀಲಿಸುವಾಗ ಇದನ್ನು ಮನಸ್ಸಿನಲ್ಲಿ ಇರಿಸಿಕೊಳ್ಳಿ.
+
+ಪ್ರಾಜೆಕ್ಟ್ ಬದಲಾವಣೆಗಳ ಲಾಗ್ :
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-ko.txt b/dist/description/description-ko.txt
new file mode 100644
index 0000000..c2fa486
--- /dev/null
+++ b/dist/description/description-ko.txt
@@ -0,0 +1,49 @@
+효율적인 차단기: 메모리와 CPU에 부담이 적고, 다른 인기있는 차단기에 비해 수 천 가지의 필터를 사용할 수 있습니다.
+
+효율성에 대한 소개: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+사용 방법: 해당 웹사이트에서 팝업의 큰 전원 버튼을 눌러 uBlock을 켜고 끌 수 있습니다. 적용은 현재 웹사이트만 적용되며, 전체적으로 적용되지 않습니다.
+
+***
+
+"AdBlocker" 보다 더 유연합니다: 호스트 파일들로부터 필터를 만들고 볼 수 있습니다.
+
+특별한 설치 없이도 아래 목록들을 불러오고 적용할 수 있습니다:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+당신이 원한다면 더 많은 목록을 선택할 수 있습니다:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- 그리고 무수히 많은 다른 목록들
+
+물론, 더 많은 필터를 활성화하면 할수록, 메모리 사용량도 높아집니다. 하지만 Fanboy's two extra lists와 hpHosts’s Ad and tracking servers 필터를 추가한 후에도 uBlock₀은 다른 인기있는 차단기에 비해 메모리 사용량이 적습니다.
+
+또, 이러한 일부 추가 목록(특히 일반적으로 사용되는 호스트 파일) 중 선택시 높은 확률로 웹사이트가 파손될 수 있음을 명심해주시기 바랍니다.
+
+***
+
+필터에 필터 목록이 하나도 없다면, 이 확장기능은 아무 쓸모가 없어집니다. 그래서 만약 당신이 정말 어떤것으로든 기여하고 싶을때는, 당신이 사용중인 필터 리스트를 만들고 유지하기 위해 노력중인 사람들을 생각해주세요. 필터들은 모두 무료로 사용이 가능하게 되어있습니다.
+
+***
+
+완전히 무료입니다.
+오픈소스이며, 공개 라이센스(GPLv3)를 따릅니다.
+사용자를 위해, 사용자에 의해 만들어졌습니다.
+
+기여자 @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+기여자 @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+이것은 완전히 초기 버전입니다, 리뷰할 때 이 점을 명심하세요.
+
+프로젝트 변경사항:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-lt.txt b/dist/description/description-lt.txt
new file mode 100644
index 0000000..2f71a5b
--- /dev/null
+++ b/dist/description/description-lt.txt
@@ -0,0 +1,50 @@
+Efektyvus blokatorius: neapkraunantis procesoriaus ir atminties, bet galintis taikyti tūkstančiais daugiau filtrų, nei kiti populiarūs blokatoriai.
+
+Iliustruota efektyvumo apžvalga:
+https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Naudojimas: didelis įjungimo mygtukas iškylančiame lange skirtas įjungti/išjungti uBlock dabartiniam puslapiui. Jis skirtas tik dabartiniam puslapiui ir nėra naudojamas visiškai išjungti plėtinį.
+
+***
+
+Lankstus, daugiau nei paprastas „reklamų blokatorius“: jis taip pat gali nuskaityti ir sukurti filtrus iš „hosts“ failų.
+
+Iš karto yra įtraukiami ir pradedami naudoti šie filtrų sąrašai:
+
+- EasyList
+- Peter Lowe reklamų serverių sąrašas
+- EasyPrivacy
+- Kenksmingos sritys
+
+Jei tik norite, galite pasirinkti dar daugiau sąrašų:
+
+- Fanboy pagerintas sekimo sąrašas
+- Dan Pollock „hosts“ failas
+- hpHosts reklamų ir sekimo serveriai
+- MVPS HOSTS
+- Spam404
+- Ir daugybę kitų
+
+Žinoma, kuo daugiau įjungsite filtrų, tuo labiau bus apkrauta operatyvioji atmintinė. Tačiau, net ir pridėjus du Fanboy sąrašus bei hpHosts reklamų ir sekimo serverius, uBlock naudoja žymiai mažiau atminties nei kiti populiarūs blokatoriai.
+
+Taip pat žinokite, kad pridėjus kelis kitus sąrašus, padidėja tikimybė, kad puslapis nebus rodomas tvarkingai, tai ypač galioja sąrašams, kurie dažniausiai naudojami kaip „hosts“ failai.
+
+***
+
+Be filtrų sąrašų šis plėtinys yra niekas. Taigi, jeigu iš tiesų norite kaip nors prisidėti, pagalvokite apie sunkiai dirbančius žmones, kurių dėka filtrų sąrašai yra prieinami visiems nemokamai.
+
+***
+
+Nemokamas.
+Atviroji programinė įranga su viešąja licencija (GPLv3)
+Naudotojų naudotojams.
+
+Github talkininkai: https://github.com/gorhill/uBlock/graphs/contributors
+Crowdin talkininkai: https://crowdin.net/project/ublock
+
+***
+
+Tai pakankamai ankstyva versija, turėkite tai omenyje, kai rašysite apžvalgą.
+
+Projekto pakeitimų žurnalas:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-lv.txt b/dist/description/description-lv.txt
new file mode 100644
index 0000000..e3dbaeb
--- /dev/null
+++ b/dist/description/description-lv.txt
@@ -0,0 +1,49 @@
+Efektīvs reklāmu bloķētājs: nepārslogo procesoru un atmiņu, un var ielādēt un pielietot tūkstošiem filtru vairāk nekā citi populāri bloķētāji.
+
+Ilustrēts apskats par tā efektivitāti: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP :-Efficiency-compared
+
+Izmantošana: nospiediet lielo pogu uznirstošajā logā, lai izslēgtu/ieslēgtu uBlock pašreizējā web vietnē. Šī poga attiecas tikai uz pašreizējo tīmekļa vietni.
+
+***
+
+Elastīgs, tas ir vairāk nekā "reklāmu bloķētājs": tas var arī lasīt un izveidot filtrus no sistēmas hostu failiem.
+
+Pēc noklusējuma, ielādē un izpilda šos filtru sarakstus:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+Ja vēlaties, ir pieejami daudz vairāk sarakstu, no kuriem jūs varat izvēlēties:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- Un daudzi citi
+
+Protams, jo vairāk papildus filtri tiks lietoti, jo lielāks atmiņas patēriņš. Tomēr pat pēc tam, kad pievienoti Fanboy divi papildu saraksti, hpHosts reklāmas un sekošanas serveriem, uBlock patērē mazāku atmiņas daudzumu, nekā citi populāri bloķētāji.
+
+Arī jāapzinās, ka izvēloties dažus no šiem papildus sarakstiem, tas var izraisīt lielāku iespējamību, ka tīmekļa vietne tiks nepareizi parādīta — īpaši sarakstos, kurus parasti izmanto kā hosts failu.
+
+***
+
+Bez filtru sarakstiem, šis paplašinājums nav nekas. Tātad, ja vēlēsieties sniegt atbalstu, padomājiet par cilvēkiem, kas strādā, lai uzturētu filtru sarakstus, ko lietojat, tie ir pieejami lietošanai visiem par brīvu.
+
+***
+
+Bezmaksas.
+Pirmkods ar publisko licenci (GPLv3)
+Lietotājiem no lietotājiem.
+
+Autori @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Autori @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Šī ir ļoti agrīna versija, paturiet to prātā, kad jūs to lietojat.
+
+Projekta izmaiņu žurnāls:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-mk.txt b/dist/description/description-mk.txt
new file mode 100644
index 0000000..9995ef6
--- /dev/null
+++ b/dist/description/description-mk.txt
@@ -0,0 +1,49 @@
+Ефикасен блокер: лесен на меморија и процесор, но сепак може да вчита и да наметне илјадници филтри повеќе од другите популарни блокери.
+
+Илустриран преглед на ефикасноста: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Користење: Големото копче за "струја" во попапот се користи за трајно да се исклучи/уклучи уБлок за моменталниот веб сајт. Се однесува само на моменталниот веб-страница, не е копче за глобално вклучување/исклучување.
+
+***
+
+Флексибилно, може да биде повеќе од само "блокирач на реклами": може исто да чита и прави филтери од хост фајлови.
+
+Без подесување, овие списоци на филтри се вчитуваат и се присилуваат:
+
+- EasyList (ИзиЛиста)
+- Peter Lowe’s Ad server list (Peter Lowe’s листа на рекламни сервери)
+- EasyPrivacy (ЛеснаПриватност)
+- Домени на малвер
+
+Повеќе листи се достапни за вас да ги одберете ако сакате:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- и много други
+
+Се разбира, што повеќе филтри се enabled, поголема ќе биде зафатената меморија. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there.
+
+Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file.
+
+***
+
+Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free.
+
+***
+
+Бесплатно.
+Отворен изворен код со јавна лиценза (ГПЛв3)
+За корисници од корисници.
+
+Соработници @ Гитхаб: https://github.com/gorhill/uBlock/graphs/contributors
+Преведување @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+It's quite an early version, keep this in mind when you review.
+
+Project change log:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-ml.txt b/dist/description/description-ml.txt
new file mode 100644
index 0000000..0296037
--- /dev/null
+++ b/dist/description/description-ml.txt
@@ -0,0 +1,49 @@
+കാര്യക്ഷമമായ ഒരു ബ്ലോക്കര്‍: മെമ്മറിയും സിപിയുവും ഉദാരമായി ഉപയോഗിക്കുന്നു, എന്നിരുന്നാലും ആയിരക്കണക്കിന് ഫില്‍ട്ടറുകള്‍ ലോഡ് ചെയ്യാനാകുന്നു, മറ്റുള്ള ബ്ലോക്കേര്‍സിനെ അപേക്ഷിച്ച്.
+
+ഇതിന്‍റെ കാര്യക്ഷമതയുടെ ഓവര്‍വ്യൂ ചിത്രം: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+ഉപയോഗരീതി: പോപ്‌അപ്പിള്‍ ഉള്ള വലിയ പവര്‍ ബട്ടണ്‍, ഇപ്പോള്‍ ലോഡ് ചെയ്യപ്പെട്ട വെബ്‌സൈറ്റില്‍ യുബ്ലോക്ക് സ്ഥിരമായി എനേബിള്‍/ഡിസേബിള്‍ ചെയ്യാന്‍ ഉപയോഗിക്കാം. ഇത് ഇപ്പോള്‍ നിലവില്‍ ഇരിക്കുന്ന വെബ്‌ സൈറ്റില്‍ മാത്രമേ അപ്ലൈ ചെയ്യപെടുകയുള്ളൂ. ഇത് ഒരു ഗ്ലോബല്‍ പവര്‍ ബട്ടന്‍ അല്ല.
+
+***
+
+ഫ്ലെക്സിബിള്‍ ആയ യുബ്ലോക്ക് വെറുമൊരു "പരസ്യ ബ്ലോക്കര്‍" മാത്രമല്ല: ഇതിനു ഹോസ്റ്റ് ഫയലുകളില്‍ നിന്നും റീഡ് ചെയ്യുവാനും ഫില്‍ട്ടറുകള്‍ ക്രിയേറ്റ് ചെയ്യുവാനും കഴിയും.
+
+പെട്ടിയില്‍ നിന്നും പുറത്തെടുക്കുമ്പോള്‍ ചുവടെ ഉള്ള ഫില്‍റ്റര്‍ ലിസ്റ്റുകള്‍ ലോഡ് ചെയ്ത് എന്‍ഫോര്‍സ് ചെയ്യപ്പെടുന്നു:
+
+-ഈസി ലിസ്റ്റ്
+-പീറ്റര്‍ ലോവ്ന്‍റെ ആഡ് സെര്‍വര്‍ ലിസ്റ്റ്
+-ഈസി പ്രൈവസി
+- മാല്‍വയര്‍ ഡൊമൈനുകള്‍
+
+താങ്കള്‍ക്ക് ആവശ്യമെങ്കില്‍ കൂടുതല്‍ പട്ടികകള്‍ ലഭ്യം:
+
+-ഫാന്‍ബോയ്യുടെ എന്‍ഹാന്‍സ്ഡ് ട്രാക്കിംഗ് ലിസ്റ്റ്
+-ഡാന്‍ പൊള്ളോക്കിന്‍റെ ഹോസ്റ്റ് ഫയല്‍
+-എച്പി ഹോസ്റ്റ്-ന്‍റെ ആഡ് & ട്രാക്കിംഗ് സെര്‍വറുകള്‍
+-എംവിപിഎസ് ഹോസ്റ്റുകള്‍
+-സ്പാം404
+-കൂടാതെ മറ്റ് അനവധി
+
+തീര്‍ച്ചയായും, കൂടുതല്‍ ഫില്‍ട്ടറുകള്‍ എനേബിള്‍ ചെയ്യുംതോറും മെമ്മറി ഉപഭോഗം കൂടുന്നതാണ്. എന്നിട്ടും, ഫാൻ‌ബോയിയുടെ രണ്ട് അധിക ലിസ്റ്റുകളായ എച്ച്പി ഹോസ്റ്റുകളുടെ പരസ്യവും ട്രാക്കിംഗ് സെർ‌വറുകളും ചേർ‌ത്തിട്ടും, യു‌ബ്ലോക്കിന് അവിടെയുള്ള മറ്റ് ജനപ്രിയ ബ്ലോക്കറുകളേക്കാൾ കുറഞ്ഞ മെമ്മറി കാൽ‌നോട്ടമുണ്ട്.
+
+കൂടാതെ, ഈ അധിക ലിസ്റ്റുകളിൽ ചിലത് തിരഞ്ഞെടുക്കുന്നത് വെബ് സൈറ്റ് തകരാനുള്ള സാധ്യതയിലേക്ക് നയിച്ചേക്കാം - പ്രത്യേകിച്ചും ഹോസ്റ്റ് ഫയലായി സാധാരണയായി ഉപയോഗിക്കുന്ന ലിസ്റ്റുകൾ.
+
+***
+
+ഫിൽട്ടറുകളുടെ പ്രീസെറ്റ് ലിസ്റ്റുകൾ ഇല്ലാതെ, ഈ വിപുലീകരണം ഒന്നുമല്ല. അതിനാൽ നിങ്ങൾ എപ്പോഴെങ്കിലും എന്തെങ്കിലും സംഭാവന ചെയ്യാൻ ആഗ്രഹിക്കുന്നുവെങ്കിൽ, നിങ്ങൾ ഉപയോഗിക്കുന്ന ഫിൽട്ടർ ലിസ്റ്റുകൾ പരിപാലിക്കാൻ കഠിനമായി പരിശ്രമിക്കുന്ന ആളുകളെക്കുറിച്ച് ചിന്തിക്കുക, അവ എല്ലാവർക്കും സ use ജന്യമായി ഉപയോഗിക്കാൻ ലഭ്യമാക്കി.
+
+***
+
+സൗ ജന്യം
+ഓപ്പണ്‍‌സോഴ്സ് പബ്ലിക്‌ ലൈസന്‍സ് (ജിപിഎല്‍വി3)
+ഉഭയോക്താക്കള്‍ക്ക്‌ ഉഭയോക്താക്കളില്‍ നിന്നും.
+
+കോണ്‍ട്രിബ്യൂട്ടര്‍മാര്‍ @ ഗിറ്റ്ഹബ്: https://github.com/gorhill/uBlock/graphs/contributors
+കോണ്‍ട്രിബ്യൂട്ടര്‍മാര്‍ @ ക്രൌവ്ഡിന്‍: https://crowdin.net/project/ublock
+
+***
+
+ഇത് സാമാന്യം ശൈശവ വേര്‍ഷന്‍ ആണ്, റിവ്യൂ ചെയ്യുമ്പോള്‍ ഇക്കാര്യം മനസ്സില്‍ വയ്ക്കൂ.
+
+പ്രൊജെക്റ്റ് മാറ്റങ്ങളുടെ ലോഗ്:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-mr.txt b/dist/description/description-mr.txt
new file mode 100644
index 0000000..43af9b5
--- /dev/null
+++ b/dist/description/description-mr.txt
@@ -0,0 +1,49 @@
+An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there.
+
+Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button.
+
+***
+
+Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files.
+
+Out of the box, these lists of filters are loaded and enforced:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+More lists are available for you to select if you wish:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- And many others
+
+Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there.
+
+Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file.
+
+***
+
+Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free.
+
+***
+
+Free.
+Open source with public license (GPLv3)
+For users by users.
+
+Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Contributors @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+It's quite an early version, keep this in mind when you review.
+
+Project change log:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-ms.txt b/dist/description/description-ms.txt
new file mode 100644
index 0000000..4b9cf3b
--- /dev/null
+++ b/dist/description/description-ms.txt
@@ -0,0 +1,51 @@
+Satu penghalang yang berkesan: kurang menggunakan memori dan CPU, tetapi dapat memuat dan menguatkuasakan beribu-ribu lagi penapis daripada penghalang popular yang lain di luar sana.
+
+Kecekapan yang digambarkan:
+https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+(Bahasa English)
+
+Cara menguna: Butang besar di dalam popup adalah untuk mengaktifkan/menyahaktifkan uBlock bagi laman web yang terkini. Ini hanya boleh diggunakan dalam laman web ini sahaja, ini bukan satu butang kuasa global.
+
+***
+
+Fleksibel, ini lebih daripada satu "penghalang": ia boleh membaca dan menghasilkan penapis daripada fail hosts.
+
+Senarai penapis yang telah dimuatkan dan dikuatkuasakan adalah seperti berikut:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Domain mengandungi malware
+
+Banyak lagi senarai penapis yang boleh anda pilih jika anda ingin seperti:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- dan banyak lagi
+
+Sudah tentu, dengan lebih banyak penapis yang diaktifkan, jejakan memori lebih tinggi. Lagi, walaupun sudah menambah dua senarai tambahan Fanboy, hpHosts's Ad and tracking servers, uBlock masih kekal mempunyai jejakan memori yang rendah berbanding dengan penghalang yang terkenal di luar sana.
+
+Juga, berhati-hati memilih sesetengah senarai tambahan yang kemungkinan besar membawa kepada kerosakan laman web -- terutamanya senarai yang biasanya digunakan sebagai fail hosts.
+
+***
+
+Penapis yang tiada senarai pratetap, extension ini tiada kegunaannya. Jadi, jika pernah anda benar-benar mahu menyumbang sesuatu, berfikir tentang orang yang bekerja keras untuk mengekalkan senarai penapis anda menggunakan, mereka telah menyediakannya untuk digunakan oleh semua orang secara percuma.
+
+***
+
+Percuma.
+Sumber terbuka dengan lesen awam (GPLv3)
+Bagi pengguna oleh pengguna.
+
+Penyumbang @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Penyumbang @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Ia versi yang agak awal, ingat apabila anda mengulas.
+
+Log perubahan projek:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-nb.txt b/dist/description/description-nb.txt
new file mode 100644
index 0000000..3b8097d
--- /dev/null
+++ b/dist/description/description-nb.txt
@@ -0,0 +1,49 @@
+Effektiv blokkering av reklame, sporing mm., lavt CPU- og minnebruk, og kan likevel laste og bruke tusenvis av flere filtre enn andre populære utvidelser for blokkering.
+
+Illustrert oversikt over effektiviteten: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Anvendelse: Den store av/på-knappen i oppsprettsvinduet er for å permanent deaktivere/aktivere uBlock for det gjeldende nettstedet. Dette gjelder bare for det gjeldende nettstedet, det er ikke en global av/på-knapp.
+
+***
+
+Fleksibel, uBlock er mer enn en "reklameblokkerer": uBlock kan også lese og opprette filtre fra vertsfiler.
+
+Som standard er disse filterlistene lastet og i bruk:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Online Malicious URL Blocklist
+
+Flere lister er tilgjengelige om ønskelig:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- Og mange andre
+
+Jo flere filtre som er aktivert, desto høyere minnebruk. Men selv etter å ha lagt til Fanboys to ekstra lister og "hpHosts’s Ad and tracking servers", har uBlock Origin fortsatt lavere minnebruk enn andre populære utvidelser for blokkering.
+
+Vær også oppmerksom på at å velge noen av disse ekstra listene kan lede til høyere sannsynlighet for at nettsider ikke lastes riktig -- spesielt de listene som normalt brukes som vertsfil.
+
+***
+
+ Hvis du virkelig ønsker å bidra med noe, tenk på folkene som arbeider hardt for å opprettholde filterlistene du bruker, som blir gjort tilgjengelige for alle - helt gratis.
+
+***
+
+Gratis.
+Åpen kildekode med offentlig lisens (GPLv3)
+For brukere, av brukere.
+
+Bidragsytere @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Bidragsytere @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+
+
+Endringslogg for prosjektet:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-nl.txt b/dist/description/description-nl.txt
new file mode 100644
index 0000000..773cc7f
--- /dev/null
+++ b/dist/description/description-nl.txt
@@ -0,0 +1,47 @@
+Een efficiënte adblocker: gebruikt weinig processorkracht en geheugen. Toch kan het duizenden filters meer laden en toepassen dan andere populaire adblockers.
+
+Geïllustreerde efficiëntievergelijking: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Gebruik: met de grote aan-uitknop in de pop-up kan uBlock voor de huidige website permanent worden in- of uitgeschakeld. Dit wordt alleen op de huidige website toegepast; het is geen algemene aan-uitknop.
+
+***
+
+Flexibel, want het is meer dan een ‘adblocker’: het kan ook filters inlezen en aanmaken vanuit hosts-bestanden.
+
+Standaard worden de volgende filterlijsten geladen en toegepast:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+Er zijn meer lijsten beschikbaar die u kunt inschakelen:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- en nog vele andere...
+
+Natuurlijk wordt het geheugengebruik groter naarmate er meer filters worden ingeschakeld. Maar zelfs na het inschakelen van Fanboy’s twee extra lijsten, hpHosts’s Ad en tracking servers, heeft uBlock een lager geheugengebruik dan andere populaire blockers.
+
+Houd er ook rekening mee dat het gebruik van sommige van deze extra lijsten de kans vergroot dat websites niet goed worden weergegeven - met name de lijsten die doorgaans als hosts-bestand worden gebruikt.
+
+***
+
+Zonder de standaard filterlijsten doet deze extensie niets. Als u dus ooit echt een bijdrage wilt leveren, denk dan aan de mensen die hard werken om de filterlijsten die u gebruikt te onderhouden, welke allemaal gratis beschikbaar zijn gemaakt.
+
+***
+
+Vrij.
+Open source met publieke licentie (GPLv3)
+Voor gebruikers, door gebruikers.
+
+Medewerkers @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Medewerkers @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Projectwijzigingenlogboek:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-oc.txt b/dist/description/description-oc.txt
new file mode 100644
index 0000000..43af9b5
--- /dev/null
+++ b/dist/description/description-oc.txt
@@ -0,0 +1,49 @@
+An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there.
+
+Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button.
+
+***
+
+Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files.
+
+Out of the box, these lists of filters are loaded and enforced:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+More lists are available for you to select if you wish:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- And many others
+
+Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there.
+
+Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file.
+
+***
+
+Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free.
+
+***
+
+Free.
+Open source with public license (GPLv3)
+For users by users.
+
+Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Contributors @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+It's quite an early version, keep this in mind when you review.
+
+Project change log:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-pl.txt b/dist/description/description-pl.txt
new file mode 100644
index 0000000..7f76e2e
--- /dev/null
+++ b/dist/description/description-pl.txt
@@ -0,0 +1,49 @@
+Skuteczny bloker, który używa mało pamięci RAM i zasobów procesora, a przy tym może wczytywać i stosować o wiele więcej filtrów niż inne popularne rozszerzenia do blokowania.
+
+Ilustrowany przegląd jego skuteczności: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-Efficiency-Compared
+
+Sposób użycia: Wyświetlany w panelu duży przycisk oznaczony symbolem zasilania służy do trwałego włączenia/wyłączenia uBlocka na bieżącej stronie internetowej. Działanie przycisku ma zastosowanie tylko na bieżącej witrynie – nie działa globalnie.
+
+***
+
+Elastyczny. Jest czymś więcej niż „blokerem reklam”. Może czytać i tworzyć filtry z plików hostów.
+
+Po zainstalowaniu są wczytywane i stosowane następujące listy filtrów:
+
+– EasyList
+– Peter Lowe’s Ad server list
+– EasyPrivacy
+– Online Malicious URL Blocklist
+
+Można wybrać więcej list filtrów:
+
+– Fanboy's Enhanced Tracking List
+– Dan Pollock’s hosts file
+– hpHosts’s Ad and tracking servers
+– MVPS HOSTS
+– Spam404
+– i wiele innych.
+
+Oczywiście, im więcej filtrów jest włączonych, tym wyższe jest zużycie pamięci. Jednak nawet po dodaniu dwóch dodatkowych list filtrów Fanboya, oraz listy hpHosts’ Ad and tracking servers, uBlock ma nadal niższe zużycie pamięci niż inne bardzo popularne blokery.
+
+Należy pamiętać, że wybranie niektórych dodatkowych list może prowadzić do wzrostu prawdopodobieństwa uszkodzenia witryny internetowej – zwłaszcza tych list, które są zwykle używane jako plik hostów.
+
+***
+
+Bez ustawionej listy filtrów, to rozszerzenie jest bezużyteczne. Więc jeśli rzeczywiście chciałbyś przekazać jakieś wsparcie, pomyśl o osobach, które ciężko pracują, tworząc i utrzymując udostępniane za darmo używane przez ciebie listy filtrów.
+
+***
+
+To jest darmowe rozszerzenie.
+Kod źródłowy udostępniany na otwartej licencji (GPLv3)
+Dla użytkowników przez użytkowników.
+
+Autorzy @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Autorzy tłumaczeń: https://crowdin.com/project/ublock/translators
+
+***
+
+Jest to dość wczesna wersja, pamiętaj o tym podczas oceniania.
+
+Dziennik zmian:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-pt_BR.txt b/dist/description/description-pt_BR.txt
new file mode 100644
index 0000000..5dac2d4
--- /dev/null
+++ b/dist/description/description-pt_BR.txt
@@ -0,0 +1,48 @@
+Um bloqueador eficiente: com baixo consumo de memória e CPU, e ainda pode carregar e aplicar milhares de filtros a mais do quê qualquer outro bloqueador popular por aí.
+
+Visão geral ilustrada de sua eficiência: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Utilização: Use o botão de energia no pop-up para desativar/ativar o uBlock₀ para o site atual. Isso se aplica apenas ao site atual, não é um botão global.
+
+***
+
+Flexível, é mais do que um "bloqueador de anúncios": ele também consegue ler e criar filtros de arquivos de hosts.
+
+Por padrão, essas listas de filtros são carregadas e aplicadas:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+Mais listas estão disponíveis para você escolher, se desejar:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- E varias outras
+
+Claro, quanto mais filtros ativados, maior o consumo de memória. Ainda, mesmo após adicionar duas listas extras Fanboy's e hpHosts’s, o uBlock₀ ainda tem o consumo de memória menor do que outros bloqueadores populares lá fora.
+
+Também, esteja ciente de que selecionar algumas dessas listas extras pode levar em uma maior probabilidade de quebrar o layout do site, especialmente aquelas listas que são normalmente usadas como arquivo hosts.
+
+***
+
+Sem as listas de filtros selecionadas por padrão, esta extensão não é nada. Por isso, se você nunca contribuiu com alguma coisa, pense nas pessoas que trabalham duro para manter as listas de filtros que você está usando, que foram disponibilizadas para usar, tudo de graça.
+
+***
+
+Gratuito
+Código aberto com licença pública (GPLv3)
+De usuários para usuários.
+
+Contribuidores no GitHub: https://github.com/gorhill/uBlock/graphs/contributors
+Contribuidores no Crowdin: https://crowdin.net/project/ublock
+
+***
+
+
+Registro de alterações do projeto:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-pt_PT.txt b/dist/description/description-pt_PT.txt
new file mode 100644
index 0000000..12c8ad7
--- /dev/null
+++ b/dist/description/description-pt_PT.txt
@@ -0,0 +1,50 @@
+Um bloqueador eficiente: leve na memória e CPU e, no entanto, consegue carregar e aplicar milhares de filtros a mais do que outros bloqueadores populares disponíveis.
+
+Visão geral ilustradora da sua eficiência:
+https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Utilização: O botão grande de energia na janela serve para desativar/ativar permanentemente o uBlock para o web site atual. Aplica-se unicamente ao web site atual, não sendo um botão de energia global.
+
+***
+
+Flexível, é mais do que um "bloqueador de anúncios": pode também ler e criar filtros a partir de ficheiros de servidores.
+
+Por predefinição, estas listas de filtros são carregadas e aplicadas:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+Se quiser, estão disponíveis mais listas para seleção:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- E muitas mais
+
+Obviamente que quanto maior o número de filtros ativos, maior será o consumo de memória. No entanto, mesmo após adicionar as duas listas extra do Fanboy, hpHosts Ad and tracking servers, o uBlock₀ continua a consumir menos memória do que outros bloqueadores populares disponíveis.
+
+Esteja ciente de que selecionar algumas destas listas extra pode resultar numa probabilidade acrescida de rutura em alguns web sites -- especialmente as listas que são normalmente utilizadas como ficheiro de servidores.
+
+***
+
+Sem as listas de filtros predefinidas, esta extensão não é nada. Se realmente quiser contribuir com algo, pense nas pessoas que trabalham duro para manter as listas de filtros que usa, que foram tornadas disponíveis para uso por todos sem custos.
+
+***
+
+Livre.
+Código aberto com licença pública (GPLv3)
+De utilizadores para utilizadores.
+
+Contribuidores @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Contribuidores @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Esta é uma versão inicial, tenha isso em mente quando avaliar.
+
+Registo de alterações do projeto:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-ro.txt b/dist/description/description-ro.txt
new file mode 100644
index 0000000..c6ceedf
--- /dev/null
+++ b/dist/description/description-ro.txt
@@ -0,0 +1,50 @@
+Un blocant (paravan) eficient: folosește foarte puțin procesorul și memoria și totuși poate încărca și aplica mii de filtre în plus față de alte paravane populare.
+
+O ilustrare a eficienței poate fi observată la:
+https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Utilizare: Butonul mare de pornire/oprire în fereastra paravanului este pentru a activa/dezactiva uBlock pentru saitul curent. Funcția este valabilă doar pentru saitul curent, nu la nivel global.
+
+***
+
+Flexibil, mai mult decât un „blocant de reclame”: acesta poate citi și crea filtre din fișierele de gazde (hosts).
+
+În mod implicit, aceste liste de filtre sunt încărcate și aplicate:
+
+- EasyList
+- Lista serverelor de reclame a lui Peter Lowe
+- EasyPrivacy
+- Domenii malițioase
+
+De asemenea, mai sunt disponibile și alte liste precum:
+
+- Lista îmbunătățită pentru urmărire a lui Fanboy
+- Lista de gazde a lui Dan Pollock
+- Lista de reclame și urmărire hpHosts
+- Gazdele MVPS
+- Spam404
+- Și multe altele
+
+Desigur, cu cât sunt mai multe filtre active cu atât mai mult este utilizată memoria. Totuși, chiar și după adăugarea în plus a două liste Fanboy și lista de reclame și urmărire hPhosts, uBlock₀ tot folosește mai puțină memorie decât restul paravanelor.
+
+De ținut minte, că odată cu selectarea în plus a unora dintre liste se poate ajunge la afectarea aspectului saiturilor -- în special listele care sunt în mod normal liste de gazde.
+
+***
+
+Fără listele prestabilite de filtre această extensie nu face nimic. Așadar, dacă totuși vreți să contribuiți, gândiți-vă la persoanele care muncesc să întrețină aceste filtre pe care le utilizați, care sunt oferite pentru utilizare gratuită.
+
+***
+
+Gratuit.
+Cu sursă liberă și licență publică (GPLv3)
+Pentru utilizatori de la utilizatori.
+
+Contribuitori pe Github: https://github.com/gorhill/uBlock/graphs/contributors
+Contribuitori pe Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Este încă o aplicație recentă, gândiți-vă la acest lucru când scrieți o recenzie.
+
+Lista de schimbări a proiectului:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-ru.txt b/dist/description/description-ru.txt
new file mode 100644
index 0000000..4b1f5cc
--- /dev/null
+++ b/dist/description/description-ru.txt
@@ -0,0 +1,49 @@
+Эффективный блокировщик: не нагружает процессор и оперативную память, поддерживает больше фильтров, чем другие популярные блокировщики.
+
+Иллюстрированный обзор его эффективности: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Использование: Большая кнопка питания в выпадающем окне служит для выключения/включения uBlock для текущего сайта. Это не глобальная кнопка, она применяется только для текущего сайта.
+
+***
+
+Гибкий, больше, чем просто «блокировщик рекламы»: uBlock может читать и создавать фильтры из хост-файлов.
+
+По умолчанию будут загружены и применены следующие списки фильтров:
+
+- EasyList
+- Список серверов рекламы от Peter Lowe
+- EasyPrivacy
+- Вредоносные домены
+
+Также на выбор доступны другие списки:
+
+- Расширенный список отслеживающих серверов от Fanboy
+- Хост-файл от Dan Pollock
+- Рекламные и отслеживающие сервера от hpHosts
+- MVPS HOSTS
+- Spam404
+- И многие другие
+
+Разумеется, чем больше включено фильтров, тем больше будет использовано памяти. Тем не менее, даже после добавления двух дополнительных списков от Fanboy, рекламных и отслеживающих серверов от hpHosts, uBlock потребляет меньше памяти, чем другие популярные блокировщики.
+
+Также имейте в виду, что некоторые из этих списков имеют высокую вероятность поломать веб-сайт, особенно те, что созданы из хост-файлов.
+
+***
+
+Без предустановленных списков фильтров это расширение — ничто. Так что, если вы действительно хотите внести свой вклад, подумайте о людях, усердно поддерживающих списки фильтров, предоставленные вам для бесплатного использования.
+
+***
+
+Бесплатно.
+Открытый исходный код, публичная лицензия (GPLv3).
+Для пользователей от пользователей.
+
+Участники на Github: https://github.com/gorhill/uBlock/graphs/contributors
+Участники на Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Это ещё очень ранняя версия, имейте это в виду, оценивая программу.
+
+Список изменений:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-si.txt b/dist/description/description-si.txt
new file mode 100644
index 0000000..43af9b5
--- /dev/null
+++ b/dist/description/description-si.txt
@@ -0,0 +1,49 @@
+An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there.
+
+Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button.
+
+***
+
+Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files.
+
+Out of the box, these lists of filters are loaded and enforced:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+More lists are available for you to select if you wish:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- And many others
+
+Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there.
+
+Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file.
+
+***
+
+Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free.
+
+***
+
+Free.
+Open source with public license (GPLv3)
+For users by users.
+
+Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Contributors @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+It's quite an early version, keep this in mind when you review.
+
+Project change log:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-sk.txt b/dist/description/description-sk.txt
new file mode 100644
index 0000000..566213f
--- /dev/null
+++ b/dist/description/description-sk.txt
@@ -0,0 +1,49 @@
+Účinný blokovač: nezaťažuje CPU a pamäť a dokáže načítať a vynútiť o niekoľko tisíc filtrov viac ako iné populárne blokovače.
+
+Ilustrovaný prehľad o jeho účinnosti: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Použitie: Veľký vypínač vo vyskakovacom okne natrvalo zakáže/povolí uBlock pre aktuálnu webovú stránku. Vzťahuje sa len na aktuálnu webovú stránku, nie na všeobecný vypínač.
+
+***
+
+Flexibilný, je viac než len "blokovač reklám": dokáže tiež načítať a vytvárať filtre z hosts súborov.
+
+Tieto zoznamy filtrov sú predvolene načítané a vynútené:
+
+- EasyList
+- Zoznam reklamných serverov od Petra Lowesa
+- EasyPrivacy
+- Domény malvéru
+
+Ďalšie zoznamy sú k dispozícii pre vás na výber, ak si prajete:
+
+- Rozšírený stopovací zoznam od Fanboya
+- Hosts súbor od Dana Pollocka
+- Reklamné a stopovacie servery od hpHosts
+- MVPS HOSTS
+- Spam404
+- A mnoho ďalších
+
+Samozrejme, čím viac povolených filtrov, tým vyššie nároky na pamäť. Aj po pridaní dvoch ďalších zoznamov od Fanboya, reklamných a stopovacích serverov od hpHost má uBlock stále menšie nároky na pamäť ako mnohé ďalšie veľmi populárne blockovače.
+
+Ďalej majte na pamäti, že výber viacerých filtrov zvyšuje šancu chybného zobrazenie webov - predovšetkým u zoznamov, ktoré sa normálne používajú ako hosts súbory.
+
+***
+
+Bez predvolených zoznamov filtrov by bolo toto rozšírenie k ničomu. Ak teda naozaj budete chcieť niečím prispieť, myslite na ľudí, ktorí spravujú vami používané zoznamy filtrov a uvoľňujú ich pre všetkých zadarmo.
+
+***
+
+Bezplatný.
+Otvorený zdrojový kód s verejnou licenciou (GPLv3)
+Pre používateľov od používateľov.
+
+Prispievatelia @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Prispievatelia @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Ide o pomerne skorú verziu, majte to na pamäti pri recenzovaní.
+
+Zoznam zmien projektu:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-sl.txt b/dist/description/description-sl.txt
new file mode 100644
index 0000000..22ac01e
--- /dev/null
+++ b/dist/description/description-sl.txt
@@ -0,0 +1,49 @@
+Efektiven zatiralec oglasov: lahek na pomnilniku in procesorju, in vendar lahko nalaga in uveljavlja tisoče filtrov več kot kakšen drug popularen dodatek za blokiranje oglasov.
+
+Ilustrirana efektivnost: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Uporaba: Velik gumb za vklop/izklop v pojavnem oknu je namenjen trajnemu izklopu/vklopu uBlock₀ za trenutno spletno stran. Ta uporaba velja samo za trenutno spletno stran, tako da gumb ne predstavlja globalnega vklopa/izklopa.
+
+***
+
+uBlock₀ je fleksibilen - in s tem več kot samo "blokada oglasom": lahko bere in ustvarja filtre iz datotek z gostitelji (HOSTS datoteka).
+
+Brez kakršnihkoli dodatnih nastavitev, uBlock₀ uporablja sledeče filtre:
+
+- EasyList
+- Seznam oglaševalskih strežnikov Peter Lowe
+- EasyPrivacy
+- Zlonamerne domene
+
+Več filtrskih seznamov na razpolago (če to želite):
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- In mnogi drugi
+
+Seveda, več filtrov kot je aktivnih, večji je odtis v pomnilniku. Pa kljub temu - tudi z nalaganjem dveh dodatnih seznamov filtrov (Fanboy in hpHosts) ima uBlock₀ še vedno nižjo mero obremenitve pomnilnika kot ostali zelo popularni dodatki za blokiranje oglasov.
+
+Poleg tega bodite pozorni, da vklop določenih dodatnih seznamov filtrov lahko pripelje do višje verjetnosti za nefunkcionalnost spletne strani - predvsem "ogrožajoči" so tisti seznami, ki se jih ponavadi uporablja kot HOSTS datoteko.
+
+***
+
+Brez prednastavljenih seznamov filtrov, da dodatek ni nič. Tako da, če res želite kje pomagati ali komu plačati kavo, pomislite na ljudi, ki trdo delajo, da vzdržujejo te sezname filtrov, ki jih uporabljate, in so jih naredili dosegljive zastonj in za vse.
+
+***
+
+Zastonj.
+Odprtokodno pod GPLv3 licenco
+Za uporabnike od uporabnikov.
+
+Razvijalci @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Prevajalci @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Gre še za dokaj sveže različice, prosimo da to upoštevate pri vaši kritiki.
+
+Dnevnik sprememb projekta:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-so.txt b/dist/description/description-so.txt
new file mode 100644
index 0000000..43af9b5
--- /dev/null
+++ b/dist/description/description-so.txt
@@ -0,0 +1,49 @@
+An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there.
+
+Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button.
+
+***
+
+Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files.
+
+Out of the box, these lists of filters are loaded and enforced:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+More lists are available for you to select if you wish:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- And many others
+
+Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there.
+
+Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file.
+
+***
+
+Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free.
+
+***
+
+Free.
+Open source with public license (GPLv3)
+For users by users.
+
+Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Contributors @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+It's quite an early version, keep this in mind when you review.
+
+Project change log:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-sq.txt b/dist/description/description-sq.txt
new file mode 100644
index 0000000..4915ea5
--- /dev/null
+++ b/dist/description/description-sq.txt
@@ -0,0 +1,49 @@
+Një bllokues efikas: me impakt të vogël te memoria dhe procesori, por mund të hapë dhe të zbatojë mijëra filtra më shumë sesa bllokuesit e tjerë të njohur.
+
+Përmbledhje e ilustruar e efikasitetit të tij: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Përdorimi: Çelësi i komandimit te dritarja e vogël e bën uBlock përherë joaktiv/aktiv për uebsajtin aktual. Ai vlen vetëm për uebsajtin aktual, nuk është një çelës i përgjithshëm.
+
+***
+
+Është fleksibël dhe jo thjesht një "bllokues reklamash": mund të lexojë dhe të krijojë filtra nga skedarët "hosts".
+
+Filtrat e listuar këtu hapen dhe zbatohen pas instalimit:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+Po të doni, ka edhe shumë lista të tjera të gatshme:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- Dhe shumë të tjera
+
+Sigurisht që sa më shumë filtra të aktivizoni, aq më i madh do të jetë impakti te memoria. Edhe sikur të shtoni dy listat e tjera të Fanboy, hpHosts’s Ad and tracking servers, uBlock përsëri ka impakt më të ulët te memoria sesa bllokuesit e tjerë shumë të njohur.
+
+Por, kujdes, sepse duke përzgjedhur disa prej këtyre listave, gjasat që faqet të shfaqin probleme do të jenë më të mëdha -- sidomos listat që normalisht përdoren si skedarë "hosts".
+
+***
+
+Pa listat e programuara, ky program nuk ka asnjë vlerë. Prandaj, po të doni të kontribuoni diçka, mendoni pak për njerëzit që punojnë fort për mirëmbajtjen e listave me filtra që po përdorni, të cilat na ofrohen të gjithëve pa pagesë.
+
+***
+
+Falas.
+Material i hapur me licencë publike (GPLv3)
+Krijuar nga përdoruesit për përdoruesit.
+
+Kontributorët @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Kontributorët @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Kur bëni vlerësimin e programit, mos harroni se ky është një version paraprak.
+
+Ditari i projektit:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-sr.txt b/dist/description/description-sr.txt
new file mode 100644
index 0000000..84f7c96
--- /dev/null
+++ b/dist/description/description-sr.txt
@@ -0,0 +1,49 @@
+Ефикасан блокатор: ниски процесорски и меморијски захтеви а може учитати и применити хиљаде филтера више него остали популарни блокатори.
+
+Илустровани преглед његове ефикасности: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Употреба: Велико дугме у искачућем прозору служи за трајно омогућавање/онемогућавање uBlock-а на тренутном веб сајту. То се односи само на тренутни веб сајт, није дугме за опште за искључивање.
+
+***
+
+Флексибилан је, више је од блокатора реклама: може читати и креирати филтере из хост датотека.
+
+Одмах по инсталирању, следећи спискови филтера су учитани и спроведени:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+Следећи спискови су доступни за избор ако желите:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- И многи други
+
+Наравно, што је више омогућених филтера, то је већа употреба меморије. Ипак, чак и након додавања два додатна списка Fanboy-а, hpHosts’s Ad и сервера за праћење, uBlock још увек има мањи меморијски захтев од осталих популарних блокатора.
+
+Такође, имајте на уму да избор неких од ових додатних спискова може водити ка већој вероватноћи неправилног функционисања веб сајта -- нарочито оних спискова који се обично користе као хост датотеке.
+
+***
+
+Без предефинисаних спискова филтера, ово проширење је ништа. Тако да ако икад желите да допринесете нечим, размислите о људима који напорно раде одржавајући спискове филтера које користите и који су доступни за бесплатно коришћење свима.
+
+***
+
+Бесплатно.
+Отвореног кода са јавном лиценцом (GPLv3)
+За кориснике од корисника.
+
+Сарадници @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Сарадници @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Ово је рана верзија, имајте то на уму када будете оцењивали.
+
+Евиденција промена:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-sv.txt b/dist/description/description-sv.txt
new file mode 100644
index 0000000..671c406
--- /dev/null
+++ b/dist/description/description-sv.txt
@@ -0,0 +1,50 @@
+En effektiv blockerare: lätt på minne och CPU-fotavtryck, som ändå kan ladda och applicera tusentals fler filter jämfört med andra populära blockerare där ute.
+
+Illustrerad översikt av dess effektivitet:
+https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Användning: Den stora strömbrytaren i popup-rutan är tillför att permanent inaktivera/aktivera uBlock för den aktuella webbplatsen. Detta gäller enbart för den aktuella webbplatsen, det är inte en global strömbrytare.
+
+***
+
+Flexibel, uBlock₀ är inte enbart en "reklamblockerare": den kan också läsa och skapa filter från hosts-filer.
+
+Som standard är följande filterlistor laddade och tillämpade:
+
+- EasyList
+- Peter Lowes reklamserverlista
+- EasyPrivacy
+- Malware domains
+
+Fler filterlistor finns tillgängliga att använda om du vill:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollocks hosts-fil
+- hpHosts reklam- och spårarservrar
+- MVPS HOSTS
+- Spam404
+- med flera
+
+Givetvis gör fler aktiverade filter att minnesanvändningen blir högre. Även efter att ha lagt till Fanboys två extra filterlistor och hpHosts reklam- och spårarservrar, använder ändå uBlock mindre minnesanvändning än andra populära reklamblockerare.
+
+Tänk på att genom att aktivera vissa av dessa extra filterlistor finns det större risk att webbplatser går sönder -- särskilt de listor som i normala fall används som hosts-fil.
+
+***
+
+Utan de förinställda filterlistorna är detta tillägg ingenting. Så om du vill bidra med någonting, tänk på personerna som arbetar hårt med att upprätthålla de filterlistor du använder, vilka är fritt tillgängliga för allas användning.
+
+***
+
+Gratis.
+Öppen källkod med offentlig licens (GPLv3)
+För användare, av användare.
+
+Bidragsgivare @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Bidragsgivare @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Detta är en ganska tidig version, tänk på detta när du skriver en recension.
+
+Projektets ändringslogg:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-sw.txt b/dist/description/description-sw.txt
new file mode 100644
index 0000000..e08ca2a
--- /dev/null
+++ b/dist/description/description-sw.txt
@@ -0,0 +1,49 @@
+Kizuizi kinachofaa: nyepesi kwenye kumbukumbu na nyayo za CPU, na bado inawezapakia na kuamrisha maelfu ya vichujio kuliko vizuizi vingine.
+
+Kielelezo cha ufanisi wake: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Utumiaji: Kitufe kikubwa cha nishati kinalemaza/kuwezesha kabisa uBlock kwenye tovuti ya sasa. Inatekelezeka kwenye tovutio ya sasa pekee, si kitufe cha kila mahali.
+
+***
+
+Inawezabadilishwa, na ni zaidi ya "kizuizi cha matangazo": inawezasoma na kuunda vichujio kutoka faili za wenyeji.
+
+Punde inapoanza kutumiwa, vichujio hivi vinapakiwa na kuamrishwa:
+
+- EasyList
+-Orodha ya Peter Lowe ya seva za matangazo
+- EasyPrivacy
+- Vikoa vya programu-hasidi
+
+Orodha zaidi zinawezateuliwa iwapo unataka:
+
+- Orodha fuatiliaji yake Fanboy iliyoboreshwa
+- Faili yake Dan Pollock ya wenyeji
+- seva za hpHosts za matangazo na ufuatiliaji
+- Wenyeji wa MVPS
+- Spam404
+- Na mengineo
+
+Inajulikana kuwa unavyowezesha vichujio zaidi, ndipo kumbukumbu inavyotumika zaidi. Hata hivyo, hata baada ya kuongeza orodha mbili anuwai za Fanboy, seva za hpHosts za matangazo, na za ufuatiliaji, uBlock bado inatumia kumbukumbu kidogo kuliko vizuizi vingine vinavyopatikana kule nje.
+
+Pia, unahamasishwa kuwa kuteua baadhi ya orodha hizi huenda kukaongeza hatari ya tovuti kuvunjika -- sana sana zile orodha ambazo hutumika kama faili za wenyeji.
+
+***
+
+Bila orodha setiawali za vichujio, kiendelezi hiki sii kitu. Kwa hivyo, iwapo ungependa kuchangia kitu cha maana, fikiria wale wanaotia bidii kudumisha orodha za vichujio unayotumia, na zilizofanywa huria kwa kila mmoja.
+
+***
+
+Huru
+Programu huria yenye leseni ya umma (GPLv3)
+Na watumiaji kwa watumiaji
+
+Wachangiaji @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Wachangiaji @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+It's quite an early version, keep this in mind when you review.
+
+Batli ya mabadiliko ya mradi:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-ta.txt b/dist/description/description-ta.txt
new file mode 100644
index 0000000..a150b3e
--- /dev/null
+++ b/dist/description/description-ta.txt
@@ -0,0 +1,52 @@
+ஒரு திறமையான தடுப்பான்: நினைவகம் மற்றும் CPU தடம் எளிதானது, ஆனால் அங்குள்ள பிற பிரபலமான தடுப்பான்களைக் காட்டிலும் ஆயிரக்கணக்கான வடிப்பான்களை ஏற்றலாம் மற்றும் செயல்படுத்தலாம்.
+
+அதன் செயல்திறனைப் பற்றிய விளக்கமான கண்ணோட்டம்: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+பயன்பாடு: தற்போதைய வலைத்தளத்திற்கான uBlock ஐ நிரந்தரமாக முடக்க / இயக்குவதே பாப்அப்பில் உள்ள பெரிய ஆற்றல் பொத்தான். இது தற்போதைய வலைத்தளத்திற்கு மட்டுமே பொருந்தும், இது உலகளாவிய சக்தி பொத்தான் அல்ல.
+
+***
+
+நெகிழ்வான, இது ஒரு "விளம்பரத் தடுப்பான்" ஐ விட அதிகம்: இது ஹோஸ்ட் கோப்புகளிலிருந்து வடிப்பான்களைப் படித்து உருவாக்கலாம்.
+
+பெட்டியின் வெளியே, இந்த வடிப்பான்களின் பட்டியல்கள் ஏற்றப்பட்டு செயல்படுத்தப்படுகின்றன:
+
+- EasyList
+
+- Peter Lowe’s Ad server list
+
+- EasyPrivacy
+
+- தீம்பொருள் களங்கள்
+
+நீங்கள் விரும்பினால் தேர்ந்தெடுக்க கூடுதல் பட்டியல்கள் கிடைக்கின்றன:
+
+- ஃபான்பாயின் மேம்படுத்தப்பட்ட கண்காணிப்பு பட்டியல்
+- டான் பொல்லாக் ஹோஸ்ட்கள் கோப்பு
+- hpHosts இன் விளம்பரம் மற்றும் கண்காணிப்பு சேவையகங்கள்
+- எம்விபிஎஸ் ஹோஸ்ட்ஸ்
+- ஸ்பேம் 404
+- மற்றும் பலர்
+
+நிச்சயமாக, அதிகமான வடிப்பான்கள் இயக்கப்பட்டன, நினைவக தடம் அதிகமாகும். இருப்பினும், ஃபான்பாயின் இரண்டு கூடுதல் பட்டியல்களான hpHosts இன் விளம்பரம் மற்றும் கண்காணிப்பு சேவையகங்களைச் சேர்த்த பிறகும், uBlock இன்னும் பிரபலமான பிற தடுப்பான்களைக் காட்டிலும் குறைந்த நினைவக தடம் உள்ளது.
+
+மேலும், இந்த கூடுதல் பட்டியல்களில் சிலவற்றைத் தேர்ந்தெடுப்பது வலைத்தள உடைப்புக்கான அதிக வாய்ப்புக்கு வழிவகுக்கும் என்பதை அறிந்து கொள்ளுங்கள் - குறிப்பாக அந்த பட்டியல்கள் பொதுவாக ஹோஸ்ட்கள் கோப்பாகப் பயன்படுத்தப்படுகின்றன.
+
+***
+
+வடிப்பான்களின் முன்னமைக்கப்பட்ட பட்டியல்கள் இல்லாமல், இந்த நீட்டிப்பு எதுவும் இல்லை. ஆகவே, நீங்கள் உண்மையிலேயே ஏதாவது பங்களிக்க விரும்பினால், நீங்கள் பயன்படுத்தும் வடிகட்டி பட்டியல்களைப் பராமரிக்க கடினமாக உழைக்கும் நபர்களைப் பற்றி சிந்தியுங்கள், அவை அனைவருக்கும் இலவசமாகப் பயன்படுத்தக் கிடைத்தன.
+
+***
+
+இலவசம்.
+பொது உரிமத்துடன் திறந்த மூல (GPLv3)
+பயனர்களால் பயனர்களுக்கு.
+
+பங்களிப்பாளர்கள் @ கிதுப்: https://github.com/gorhill/uBlock/graphs/contributors
+பங்களிப்பாளர்கள் @ க்ரவுடின்: https://crowdin.net/project/ublock
+
+***
+
+It's quite an early version, keep this in mind when you review.
+
+திட்ட மாற்ற பதிவு:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-te.txt b/dist/description/description-te.txt
new file mode 100644
index 0000000..0711bc7
--- /dev/null
+++ b/dist/description/description-te.txt
@@ -0,0 +1,49 @@
+ఒక సమర్థవంతమైన నిరోధిని: మిగిలిన ప్రముఖమైన నిరోధినుల కంటే తక్కువ RAM మరియు తక్కువ CPUని ఉపయోగిస్తూ వేలాది వడపోత జబీతాలను అమలు చేయగలిగే ఉత్తమమైన నిరోధిని.
+
+ఈ నిరోధిని పనితనం గురించి చిత్రపటాలతో కూడిన వివరణ: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+వాడుక: ప్రస్తుతం వీక్షిస్తున్న వెబ్ సైట్లో uBlock₀ని క్రియాశీల పరచడానికి లేదా అచేతనపరచడానికి, పాప్ అప్ లో వున్న పెద్ద బటన్ ని ఉపయోగించండి. ఈ బటన్ కేవలం ప్రస్తుతం వీక్షిస్తున్న వెబ్ సైట్ కి మాత్రమే వర్తిస్తుంది, అన్ని సైట్లకు వర్తించే బటన్ కాదు.
+
+***
+
+ఒక అనువైన, అసామాన్య నిరోధిని: ఇది మీ hosts ఫైల్ ని చదివి, వాటి నుండి కూడా వడపోత జాబితాను నిర్మించగలదు.
+
+మీ నుండి ఎలాంటి చర్య లేకుండానే, ఈ క్రింది వడపోత జాబితాలు ఉపయోగించబడుతాయి:
+
+- ఈజీలిస్ట్
+- పీటర్ లోవ్ గారి ప్రకటనా సేవికల జాబితా
+- ఈజీప్రైవసీ
+- మాల్వేర్ డొమైన్స్
+
+ఈ క్రింది జాబితాలు కూడా మీకు అందుబాటులో వుంటాయి:
+
+- ఫ్యాన్ బాయ్ యొక్క మెరుగైన వేమ్బడింపు జాబితా
+- డాన్ పొల్లాక్ గారి hosts ఫైల్
+- hpHosts వారి ప్రకటనా మరియు వేమ్బడింపు సేవికలు
+- MVPS HOSTS
+- స్పాం404
+- ఇంకా మరెన్నో జాబితాలు, సేవికలు
+
+కాకపోతే సాధారణంగా ఎన్ని ఎక్కువ వడపోత జాబితాలను ఉపయోగిస్తే అంత ఎక్కువగా RAM ఉపయోగించబడుతుంది. uBlock, ఫ్యాన్ బాయ్ యొక్క అదనపు రెండు జాబితాలు ఇంకా hpHosts వారి ప్రకటనా సేవికలు ఉపయోగించినాకుడా మిగతా ప్రముఖమైన నిరోధకాల కంటే తక్కువ RAMని వాడుతుంది.
+
+కానీ, పైవాటిలోని కొన్ని అదనపు జాబితాలను వాడిన యెడల వెబ్ సైట్ పనితనంపైన అవాంచిత ప్రభావం పడే ఆస్కారం ఉంది, ప్రత్యేకించి hosts ఫైల్ గా ఉపయోగించబడే జాబితాలతో అది జరిగే ఆస్కారం ఎక్కువ.
+
+***
+
+నిర్దేశిత వడపోత జాబితాలు లేకపోతే, ఈ పొడిగింపు నిష్ప్రయోగాజనకం. అందువలన, ఏ సమయంలోనైనా మీరు ఏదైనా విరాళం చేయదలిచితే, మీరు ఉపయోగించే ఆ జాబితాలను కష్టపడి రచించి, నిర్వహించి మరియు ఉచితంగా అందరికి విడుదలచేసే వారి గురించి ప్రప్రధమంగా ఆలోచించండి.
+
+***
+
+ఇది ఉచితం.
+సాముహిక లైసెన్సు (GPLv3)తో వచ్చే బహిర్గత మూలం
+వినియోగుదరులచే వినియోగుదరుల కోసం.
+
+Githubనందు ఈ ప్రాజెక్ట్కు దోహదపడే వారి జాబితా: https://github.com/gorhill/uBlock/graphs/contributors
+Crowdinనందు ఈ ప్రాజెక్ట్కుదోహదపదేవారి జాబితా: https://crowdin.net/project/ublock
+
+***
+
+ఈ పొడిగింపు పై మీ అభిప్రాయం తెలిపే ముందు, ఇది దీని ప్రారంభ సంస్కరణ మాత్రమేనని ద్రిష్టిలో వుంచుకోగలరని మనవి.
+
+ప్రాజెక్ట్ యొక్క మార్పుల పట్టిక:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-th.txt b/dist/description/description-th.txt
new file mode 100644
index 0000000..c7130d8
--- /dev/null
+++ b/dist/description/description-th.txt
@@ -0,0 +1,49 @@
+An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there.
+
+Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button.
+
+***
+
+Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files.
+
+Out of the box, these lists of filters are loaded and enforced:
+
+- EasyList
+- Seznam oglaševalskih strežnikov Peter Lowe
+- EasyPrivacy
+- Malware domains
+
+More lists are available for you to select if you wish:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- And many others
+
+Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there.
+
+Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file.
+
+***
+
+Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free.
+
+***
+
+Free.
+Open source with public license (GPLv3)
+For users by users.
+
+Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Contributors @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+It's quite an early version, keep this in mind when you review.
+
+Project change log:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-tr.txt b/dist/description/description-tr.txt
new file mode 100644
index 0000000..69674c3
--- /dev/null
+++ b/dist/description/description-tr.txt
@@ -0,0 +1,50 @@
+Etkili bir engelleyici: Belleği ve işlemciyi yormaz, yine de diğer popüler engelleyicilere göre binlerce daha çok filtreyi yükleyip uygulayabilir.
+
+Verimliliğine örneklendirilmiş genel bakış:
+https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Kullanımı: Arayüzdeki büyük güç düğmesi o anki web sitesinde, uBlock'u kalıcı olarak devre dışı bırakmak/etkinleştirmek içindir. Bu yalnızca o anki web sitesine uygulanır, evrensel bir güç düğmesi değildir.
+
+***
+
+Esnek, bir "reklam engelleyici"den daha fazlası: Ayrıca alan adları dosyalarınızdan filtreleri okuyabilir ve oluşturabilir.
+
+Hazır olarak, şu filtre listeleri yüklüdür ve uygulanır:
+
+- EasyList
+- Peter Lowe'un Reklam sunucu listesi
+- EasyPrivacy
+- Malware domains
+
+İsterseniz seçebileceğiniz daha fazla liste var:
+
+- Fanboy’un Gelişmiş İzleyici Listesi
+- Dan Pollock’un alan adları dosyası
+- hpHosts'un Reklam ve izleyici sunucuları
+- MVPS HOSTS
+- Spam404
+- Ve diğer birçoğu
+
+Tabii ki, ne kadar çok filtre etkinleştirilirse, bellek kullanımı da o kadar yüksek olur. Yine de, Fanboy'un iki ekstra listesi, hpHosts'un reklam ve izleyici sunucuları ekledikten sonra bile uBlock diğer oldukça popüler engelleyicilere göre daha az bellek kullanır.
+
+Ayrıca, bazı ekstra listelerin seçilmesinin web sitelerinin bozulması olasılığını artırabileceğini unutmayın -- özellikle normalde alan adları dosyası olarak kullanılan listelerin.
+
+***
+
+Ön ayarlı filtre listeleri olmadan, bu eklenti bir işe yaramaz. Bu yüzden, gerçekten bir şeylerle katkıda bulunmak isterseniz, herkesin özgürce kullanması için sunulan kullandığınız filtre listelerini sürdürmek için uğraşan insanları düşünün.
+
+***
+
+Özgür.
+Açık kaynak kamu lisanslı (GPLv3)
+Kullanıcılar tarafından kullanıcılar için.
+
+Katkıda bulunanlar @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Katkıda bulunanlar @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Bu çok erken bir sürüm, gözden geçirirken bunu göz önünde bulundurun.
+
+Proje değişiklik günlüğü:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-uk.txt b/dist/description/description-uk.txt
new file mode 100644
index 0000000..c9ea72c
--- /dev/null
+++ b/dist/description/description-uk.txt
@@ -0,0 +1,49 @@
+Ефективний блокувальник реклами: сильно не навантажує пам’ять та процесор і може працювати з набагато більшою кількістю фільтрів ніж інші блокувальники.
+
+Ілюстрований огляд ефективності: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Використання: Ця велика кнопка живлення у виринаючому вікні дозволяє вимкнути або увімкнути uBlock для поточного веб-сайту. Ефект розповсюджується тільки на поточний веб-сайт. Це не глобальна кнопка живлення.
+
+***
+
+Будучи універсальним, це більш ніж просто "блокувальник реклами". Він також може створювати фільтри з файлів hosts.
+
+За замовчуванням завантажено та застосовано наступні списки фільтрів:
+
+– EasyList
+– список рекламних серверів Петра Лоу
+– EasyPrivacy
+– шкідливі домени
+
+Наступні списки можна можна увімкнути за бажанням:
+
+– покращений список слідкування від Fanboy
+– файл хостів Дена Полока
+– сервери реклами та слідкування hpHosts
+– MVPS HOSTS
+– Spam404
+– тощо.
+
+Звичайно ж, чим більше фільтрів ви увімкнете тим більшим буде використання пам’яті. Однак, навіть після додання двох додаткових списків Fanboy, серверів слідкування та реклами phHosts, uBlock споживає менше пам’яті ніж інші популярні блокувальники.
+
+Також майте на увазі, що задіяння деяких додаткових списків може спричинити збільшення ймовірності пошкодження функціонування сайту. Особливо ті списки, які зазвичай використовуються як hosts-файл.
+
+***
+
+Без встановлених списків фільтрів це розширення – ніщо. Тому, якщо ви дійсно хочете зробити свій внесок, подумайте про людей, які тяжко працюють для підтримки списків фільтрів якими ви користуєтесь безкоштовно.
+
+***
+
+Безкоштовно.
+Відкритий джерельний код та публічна ліцензія (GPLv3)
+Для користувачів від користувачів.
+
+Учасники @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Перекладачі @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Це ще дуже дочасна версія, тому майте на увазі, коли робите огляд.
+
+Журнал змін проекту:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-ur.txt b/dist/description/description-ur.txt
new file mode 100644
index 0000000..f13fff8
--- /dev/null
+++ b/dist/description/description-ur.txt
@@ -0,0 +1,52 @@
+ایک زبردست اشتہارات کو روکنے والا سافٹویئر. کم میموری اور cpu استعمال کرتا ہے مگر کام بہترین کرتا ہے.
+
+اس کا بہترین اور پراثر کام کرنے کی تصاویر:
+https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+ہدایات: بڑا آن/ آف کا بٹن دبا کر آپ موجودہ ویب سائٹ پر uBlock کو فعال یا غیر فعال کر سکتے ہیں. یہ بٹن صرف موجودہ ویب سائٹ کے لئے ہے، باقی ویب سائٹس کو اس سے کوئی فرق نہیں پڑے گا.
+
+***
+
+Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files.
+
+یہ والے فلٹر پہلے سے لاگو ہوں گے:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+More lists are available for you to select if you wish:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- And many others
+
+جتنے زیادہ فلٹر لگائیں گے اتنی زیادہ میموری لے گا. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there.
+
+Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file.
+
+***
+
+Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free.
+
+***
+
+مفت.
+اوپن سورس عوامی لائسنس(جی.پی.ایل ورژن ٣) کے ساتھ
+عوام کے لیے، عوام کا بنایا ہوا.
+
+معاونین کی فہرست Github پر دیکھیں:
+https://github.com/gorhill/uBlock/graphs/contributors
+مترجمین کی فہرست Crowdin پر دیکھیں:
+https://crowdin.net/project/ublock
+
+***
+
+It's quite an early version, keep this in mind when you review.
+
+پراجیکٹ میں ترقیاتی کام کا ریکارڈ:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-vi.txt b/dist/description/description-vi.txt
new file mode 100644
index 0000000..4b3f302
--- /dev/null
+++ b/dist/description/description-vi.txt
@@ -0,0 +1,49 @@
+Một công cụ chặn quảng cáo hiệu quả: sử dụng ít bộ nhớ, CPU và có thể nạp, áp dụng hàng ngàn bộ lọc so với những công cụ chặn quảng cáo hiện nay.
+
+Minh hoạ tổng quan về tính hiệu quả của µBlock: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+Sử dụng: Nút nguồn lớn trong hộp thoại popup để vô hiệu/kích hoạt vĩnh viễn uBlock cho website hiện tại. Nó chỉ áp dụng cho trang hiện tại, không phải tất cả website.
+
+***
+
+Linh hoạt, hơn cả một "công cụ chặn quảng cáo": µBlock có thể đọc và tạo bộ lọc từ tập tin hosts.
+
+Ngay lập tức, những bộ lọc này được nạp và áp dụng:
+
+- EasyList
+- Danh sách máy chủ quảng cáo của Peter Lowe
+- EasyPrivacy
+- Malware domains
+
+Có thêm nhiều danh sách để bạn lựa chọn:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- Máy chủ quảng cáo và theo dõi hpHosts
+- MVPS HOSTS
+- Spam404
+- Và nhiều hơn nữa
+
+Dĩ nhiên, khi kích hoạt thêm bộ lọc, tiện ích sẽ dùng nhiều bộ nhớ hơn. Tuy vậy, sau khi thêm hai danh sách Fanboy, máy chủ quảng cáo và theo dõi của hpHosts, uBlock vẫn dùng ít bộ nhớ hơn so với những công cụ chặn quảng cáo rất phổ biến khác.
+
+Ngoài ra, lưu ý rằng chọn thêm một số danh sách có thể dẫn đến khả năng một số website hiển thị không đúng cách -- đặc biệt là những danh sách thường được dùng như tập tin hosts.
+
+***
+
+Không có danh sách bộ lọc cài sẵn, tiện ích mở rộng này chẳng là gì cả. Vậy nên nếu bạn thật sự muốn đóng góp gì đó, hãy nghĩ về những người đang chăm chỉ duy trì danh sách bộ lọc hoàn toàn miễn phí mà bạn đang dùng.
+
+***
+
+Miễn phí.
+Nguồn mở với giấy phép công cộng (GPLv3)
+Làm vì người dùng bởi người dùng.
+
+Những người đóng góp @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+Những người đóng góp @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+Đây là một phiên bản khá mới, hãy ghi nhớ điều này khi bạn đánh giá.
+
+Thay đổi của dự án:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-zh_CN.txt b/dist/description/description-zh_CN.txt
new file mode 100644
index 0000000..be4e2c0
--- /dev/null
+++ b/dist/description/description-zh_CN.txt
@@ -0,0 +1,52 @@
+一款高效的请求过滤工具:占用极低的内存和 CPU,与其他常见的过滤器相比,它能够多加载并执行上千条过滤规则。
+
+带图表的效率概述说明:
+https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
+
+用法:点击弹出窗口中的电源按钮,uBlock 将对当前网站永久禁用/启用过滤功能。 它仅应用于当前网站,而非全局性的开关。
+
+***
+
+它很灵活,不只是一个“广告拦截器”:它还能从 hosts 文件中读取、创建过滤规则。
+
+初始默认加载和执行下列过滤规则:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+这里还有更多规则列表可供您选择:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- 等等
+
+当然,启用的过滤规则越多,占用的内存也就越高。 然而,即使再添加 Fanboy 的两个额外规则列表与 hpHosts’s Ad and tracking servers,uBlock 的内存占用依然比其他流行的过滤器更低。
+
+另外,请注意,一些额外的规则列表可能会导致网站出现错误 —— 尤其是那些一般被作为 hosts 文件使用的列表。
+
+***
+
+没有这些过滤规则列表,这个扩展就没有了意义。 所以如果你真的想做点贡献,想想那些维护过滤规则的人们,是他们让所有人能够免费使用这一切变得可能。
+
+***
+
+自由并且免费。
+使用 GPLv3 公共许可协议开源。
+来自用户,只为用户。
+
+Github 上的贡献者们:
+https://github.com/gorhill/uBlock/graphs/contributors
+Crowdin 上的翻译者们:
+https://crowdin.net/project/ublock
+
+***
+
+它还是一个相当早期的版本,在您评论的时候请记住这一点。
+
+项目更新日志:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/description/description-zh_TW.txt b/dist/description/description-zh_TW.txt
new file mode 100644
index 0000000..1f7197f
--- /dev/null
+++ b/dist/description/description-zh_TW.txt
@@ -0,0 +1,49 @@
+一個高效率的阻擋器:uBO 使用不多的記憶體 (RAM) 以及 CPU 資源,但卻能比其他熱門的阻擋器多載入並執行數以千計的過濾規則。
+
+效能比較示意圖:https://github.com/gorhill/uBlock/wiki/%C2%B5Block-vs.-ABP:-efficiency-compared
+
+用法:在彈出式選單中的大電源按鈕,是用來設定是否在目前的網站永久的禁用/啟用 uBlock₀ 。 此按鈕僅於目前所在的網站有效,它並非是此擴展套件的總開關按鈕。
+
+***
+
+非常彈性:這不僅是「廣告阻擋器」,甚至能從 host 檔案中讀取並建立過濾規則。
+
+首次安裝後,預設就會載入套用下列過濾規則:
+
+- EasyList
+- Peter Lowe’s Ad server list
+- EasyPrivacy
+- Malware domains
+
+您可以自由選擇更多過濾規則:
+
+- Fanboy’s Enhanced Tracking List
+- Dan Pollock’s hosts file
+- hpHosts’s Ad and tracking servers
+- MVPS HOSTS
+- Spam404
+- 以及其他更多
+
+當然,啟用更多的過濾規則的話,就會使用更多記憶體資源。 但哪怕加入了 Fanboy 的 2 個額外的過濾規則列表,hpHosts’s Ad and tracking servers 過濾規則列表,uBlock 仍比市面上其他熱門的阻擋器使用更少的記憶體資源。
+
+另外,請注意,某些過濾規則載入後可能造成網站版面出現問題 -- 尤其是通常作為 host 檔案的過濾規則。
+
+***
+
+若沒有這些預設的過濾規則,這個擴充套件本身沒什麼用, 所以若您真的想要貢獻些什麼的話,請想想那些人們花時間努力維護並免費提供給您與其他人使用的過濾規則。
+
+***
+
+免費且自由。
+以公眾授權開放程式原始碼(GPLv3)。
+獻給所有人。
+
+貢獻者 @ Github: https://github.com/gorhill/uBlock/graphs/contributors
+翻譯者 @ Crowdin: https://crowdin.net/project/ublock
+
+***
+
+當您做評論時,請記住,此擴展套件目前仍是相當初期的版本。
+
+專案更新日誌:
+https://github.com/gorhill/uBlock/releases
diff --git a/dist/firefox/publish-signed-beta.py b/dist/firefox/publish-signed-beta.py
new file mode 100755
index 0000000..2e56d12
--- /dev/null
+++ b/dist/firefox/publish-signed-beta.py
@@ -0,0 +1,331 @@
+#!/usr/bin/env python3
+
+import datetime
+import json
+import jwt
+import os
+import re
+import requests
+import shutil
+import subprocess
+import sys
+import tempfile
+import time
+import zipfile
+
+from string import Template
+
+# - Download target (raw) uBlock0.firefox.xpi from GitHub
+# - This is referred to as "raw" package
+# - This will fail if not a dev build
+# - Modify raw package to make it self-hosted
+# - This is referred to as "unsigned" package
+# - Ask AMO to sign uBlock0.firefox.xpi
+# - Generate JWT to be used for communication with server
+# - Upload unsigned package to AMO
+# - Wait for a valid download URL for signed package
+# - Download signed package as uBlock0.firefox.signed.xpi
+# - This is referred to as "signed" package
+# - Upload uBlock0.firefox.signed.xpi to GitHub
+# - Remove uBlock0.firefox.xpi from GitHub
+# - Modify updates.json to point to new version
+# - Commit changes to repo
+
+# Find path to project root
+projdir = os.path.split(os.path.abspath(__file__))[0]
+while not os.path.isdir(os.path.join(projdir, '.git')):
+ projdir = os.path.normpath(os.path.join(projdir, '..'))
+# Check that found project root is valid
+version_filepath = os.path.join(projdir, 'dist', 'version')
+if not os.path.isfile(version_filepath):
+ print('Version file not found.')
+ exit(1)
+
+# We need a version string to work with
+if len(sys.argv) >= 2 and sys.argv[1]:
+ tag_version = sys.argv[1]
+else:
+ tag_version = input('Github release version: ')
+tag_version.strip()
+match = re.search('^(\d+\.\d+\.\d+)(?:(b|rc)(\d+))?$', tag_version)
+if not match:
+ print('Error: Invalid version string.')
+ exit(1)
+ext_version = match.group(1);
+if match.group(2):
+ revision = int(match.group(3))
+ if match.group(2) == 'rc':
+ revision += 100;
+ ext_version += '.' + str(revision)
+
+extension_id = 'uBlock0@raymondhill.net'
+tmpdir = tempfile.TemporaryDirectory()
+raw_xpi_filename = 'uBlock0_' + tag_version + '.firefox.xpi'
+raw_xpi_filepath = os.path.join(tmpdir.name, raw_xpi_filename)
+unsigned_xpi_filepath = os.path.join(tmpdir.name, 'uBlock0.firefox.unsigned.xpi')
+signed_xpi_filename = 'uBlock0_' + tag_version + '.firefox.signed.xpi'
+signed_xpi_filepath = os.path.join(tmpdir.name, signed_xpi_filename)
+github_owner = 'gorhill'
+github_repo = 'uBlock'
+
+# Load/save auth secrets
+# The build directory is excluded from git
+ubo_secrets = dict()
+ubo_secrets_filename = os.path.join(projdir, 'dist', 'build', 'ubo_secrets')
+if os.path.isfile(ubo_secrets_filename):
+ with open(ubo_secrets_filename) as f:
+ ubo_secrets = json.load(f)
+
+def input_secret(prompt, token):
+ if token in ubo_secrets:
+ prompt += ' ✔'
+ prompt += ': '
+ value = input(prompt).strip()
+ if len(value) == 0:
+ if token not in ubo_secrets:
+ print('Token error:', token)
+ exit(1)
+ value = ubo_secrets[token]
+ elif token not in ubo_secrets or value != ubo_secrets[token]:
+ ubo_secrets[token] = value
+ exists = os.path.isfile(ubo_secrets_filename)
+ with open(ubo_secrets_filename, 'w') as f:
+ json.dump(ubo_secrets, f, indent=2)
+ if not exists:
+ os.chmod(ubo_secrets_filename, 0o600)
+ return value
+
+# GitHub API token
+github_token = input_secret('Github token', 'github_token')
+github_auth = 'token ' + github_token
+
+#
+# Get metadata from GitHub about the release
+#
+
+# https://developer.github.com/v3/repos/releases/#get-a-single-release
+print('Downloading release info from GitHub...')
+release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, tag_version)
+headers = { 'Authorization': github_auth, }
+response = requests.get(release_info_url, headers=headers)
+if response.status_code != 200:
+ print('Error: Release not found: {0}'.format(response.status_code))
+ exit(1)
+release_info = response.json()
+
+#
+# Extract URL to raw package from metadata
+#
+
+# Find url for uBlock0.firefox.xpi
+raw_xpi_url = ''
+for asset in release_info['assets']:
+ if asset['name'] == signed_xpi_filename:
+ print('Error: Found existing signed self-hosted package.')
+ exit(1)
+ if asset['name'] == raw_xpi_filename:
+ raw_xpi_url = asset['url']
+if len(raw_xpi_url) == 0:
+ print('Error: Release asset URL not found')
+ exit(1)
+
+#
+# Download raw package from GitHub
+#
+
+# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
+print('Downloading raw xpi package from GitHub...')
+headers = {
+ 'Authorization': github_auth,
+ 'Accept': 'application/octet-stream',
+}
+response = requests.get(raw_xpi_url, headers=headers)
+# Redirections are transparently handled:
+# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history
+if response.status_code != 200:
+ print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code))
+ exit(1)
+with open(raw_xpi_filepath, 'wb') as f:
+ f.write(response.content)
+print('Downloaded raw package saved as {0}'.format(raw_xpi_filepath))
+
+#
+# Convert the package to a self-hosted one: add `update_url` to the manifest
+#
+min_browser_version = '68';
+
+print('Converting raw xpi package into self-hosted xpi package...')
+with zipfile.ZipFile(raw_xpi_filepath, 'r') as zipin:
+ with zipfile.ZipFile(unsigned_xpi_filepath, 'w') as zipout:
+ for item in zipin.infolist():
+ data = zipin.read(item.filename)
+ if item.filename == 'manifest.json':
+ manifest = json.loads(bytes.decode(data))
+ min_browser_version = manifest['browser_specific_settings']['gecko']['strict_min_version']
+ manifest['browser_specific_settings']['gecko']['update_url'] = 'https://raw.githubusercontent.com/{0}/{1}/master/dist/firefox/updates.json'.format(github_owner, github_repo)
+ data = json.dumps(manifest, indent=2, separators=(',', ': '), sort_keys=True).encode()
+ zipout.writestr(item, data)
+
+#
+# Ask AMO to sign the self-hosted package
+# - https://developer.mozilla.org/en-US/Add-ons/Distribution#Distributing_your_add-on
+# - https://pyjwt.readthedocs.io/en/latest/usage.html
+# - https://addons-server.readthedocs.io/en/latest/topics/api/auth.html
+# - https://addons-server.readthedocs.io/en/latest/topics/api/signing.html
+#
+
+amo_api_key = ''
+amo_secret = ''
+
+def get_jwt_auth():
+ global amo_api_key
+ if amo_api_key == '':
+ amo_api_key = input_secret('AMO API key', 'amo_api_key')
+ global amo_secret
+ if amo_secret == '':
+ amo_secret = input_secret('AMO API secret', 'amo_secret')
+ amo_nonce = os.urandom(8).hex()
+ jwt_payload = {
+ 'iss': amo_api_key,
+ 'jti': amo_nonce,
+ 'iat': datetime.datetime.utcnow(),
+ 'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=15),
+ }
+ return 'JWT ' + jwt.encode(jwt_payload, amo_secret)
+
+print('Ask AMO to sign self-hosted xpi package...')
+with open(unsigned_xpi_filepath, 'rb') as f:
+ # https://blog.mozilla.org/addons/2019/11/11/security-improvements-in-amo-upload-tools/
+ # "We recommend allowing up to 15 minutes."
+ interval = 60 # check every 60 seconds
+ countdown = 60 * 60 / interval # for at most 60 minutes
+ headers = { 'Authorization': get_jwt_auth(), }
+ data = { 'channel': 'unlisted' }
+ files = { 'upload': f, }
+ signing_url = 'https://addons.mozilla.org/api/v4/addons/{0}/versions/{1}/'.format(extension_id, ext_version)
+ print('Submitting package to be signed...')
+ response = requests.put(signing_url, headers=headers, data=data, files=files)
+ if response.status_code != 202:
+ print('Error: Creating new version failed -- server error {0}'.format(response.status_code))
+ print(response.text)
+ exit(1)
+ print('Request for signing self-hosted xpi package succeeded.')
+ signing_request_response = response.json();
+ f.close()
+ print('Waiting for AMO to process the request to sign the self-hosted xpi package...')
+ # Wait for signed package to be ready
+ signing_check_url = signing_request_response['url']
+ while True:
+ time.sleep(interval)
+ sys.stdout.write('.')
+ sys.stdout.flush()
+ countdown -= 1
+ if countdown <= 0:
+ print('Error: AMO signing timed out')
+ exit(1)
+ headers = { 'Authorization': get_jwt_auth(), }
+ response = requests.get(signing_check_url, headers=headers)
+ if response.status_code != 200:
+ print('Error: AMO signing failed -- server error {0}'.format(response.status_code))
+ print(response.text)
+ exit(1)
+ signing_check_response = response.json()
+ if not signing_check_response['processed']:
+ continue
+ if not signing_check_response['valid']:
+ print('Error: AMO validation failed')
+ print(response.text)
+ exit(1)
+ if not signing_check_response['files'] or len(signing_check_response['files']) == 0:
+ continue
+ if not signing_check_response['files'][0]['signed']:
+ continue
+ if not signing_check_response['files'][0]['download_url']:
+ print('Error: AMO signing failed')
+ print(response.text)
+ exit(1)
+ print('\r')
+ print('Self-hosted xpi package successfully signed.')
+ download_url = signing_check_response['files'][0]['download_url']
+ print('Downloading signed self-hosted xpi package from {0}...'.format(download_url))
+ response = requests.get(download_url, headers=headers)
+ if response.status_code != 200:
+ print('Error: Download signed package failed -- server error {0}'.format(response.status_code))
+ print(response.text)
+ exit(1)
+ with open(signed_xpi_filepath, 'wb') as f:
+ f.write(response.content)
+ f.close()
+ print('Signed self-hosted xpi package downloaded.')
+ break
+
+#
+# Upload signed package to GitHub
+#
+
+# https://developer.github.com/v3/repos/releases/#upload-a-release-asset
+print('Uploading signed self-hosted xpi package to GitHub...')
+with open(signed_xpi_filepath, 'rb') as f:
+ url = release_info['upload_url'].replace('{?name,label}', '?name=' + signed_xpi_filename)
+ headers = {
+ 'Authorization': github_auth,
+ 'Content-Type': 'application/zip',
+ }
+ response = requests.post(url, headers=headers, data=f.read())
+ if response.status_code != 201:
+ print('Error: Upload signed package failed -- server error: {0}'.format(response.status_code))
+ exit(1)
+
+#
+# Remove raw package from GitHub
+#
+
+# https://developer.github.com/v3/repos/releases/#delete-a-release-asset
+print('Remove raw xpi package from GitHub...')
+headers = { 'Authorization': github_auth, }
+response = requests.delete(raw_xpi_url, headers=headers)
+if response.status_code != 204:
+ print('Error: Deletion of raw package failed -- server error: {0}'.format(response.status_code))
+
+#
+# Update updates.json to point to new package -- but only if just-signed
+# package is higher version than current one.
+#
+
+# Be sure we are in sync with potentially modified files on remote
+r = subprocess.run(['git', 'pull', 'origin', 'master'], stdout=subprocess.PIPE)
+rout = bytes.decode(r.stdout).strip()
+
+def int_from_version(version):
+ parts = version.split('.')
+ if len(parts) == 3:
+ parts.append('0')
+ return int(parts[0])*10e9 + int(parts[1])*10e6 + int(parts[2])*10e3 + int(parts[3])
+
+print('Update GitHub to point to newly signed self-hosted xpi package...')
+updates_json_filepath = os.path.join(projdir, 'dist', 'firefox', 'updates.json')
+with open(updates_json_filepath) as f:
+ updates_json = json.load(f)
+ f.close()
+ previous_version = updates_json['addons'][extension_id]['updates'][0]['version']
+ if int_from_version(ext_version) > int_from_version(previous_version):
+ with open(os.path.join(projdir, 'dist', 'firefox', 'updates.template.json')) as f:
+ template_json = Template(f.read())
+ f.close()
+ updates_json = template_json.substitute(ext_version=ext_version, tag_version=tag_version, min_browser_version=min_browser_version)
+ with open(updates_json_filepath, 'w') as f:
+ f.write(updates_json)
+ f.close()
+ # - Stage the changed file
+ r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
+ rout = bytes.decode(r.stdout).strip()
+ if len(rout) >= 2 and rout[1] == 'M':
+ subprocess.run(['git', 'add', updates_json_filepath])
+ # - Commit the staged file
+ r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
+ rout = bytes.decode(r.stdout).strip()
+ if len(rout) >= 2 and rout[0] == 'M':
+ subprocess.run(['git', 'commit', '-m', 'Make Firefox dev build auto-update', updates_json_filepath])
+ subprocess.run(['git', 'push', 'origin', 'HEAD'])
+
+print('All done.')
diff --git a/dist/firefox/updates.json b/dist/firefox/updates.json
new file mode 100644
index 0000000..880063f
--- /dev/null
+++ b/dist/firefox/updates.json
@@ -0,0 +1,13 @@
+{
+ "addons": {
+ "uBlock0@raymondhill.net": {
+ "updates": [
+ {
+ "version": "1.54.1.102",
+ "browser_specific_settings": { "gecko": { "strict_min_version": "78.0" } },
+ "update_link": "https://github.com/gorhill/uBlock/releases/download/1.54.1rc2/uBlock0_1.54.1rc2.firefox.signed.xpi"
+ }
+ ]
+ }
+ }
+}
diff --git a/dist/firefox/updates.template.json b/dist/firefox/updates.template.json
new file mode 100644
index 0000000..4ee868a
--- /dev/null
+++ b/dist/firefox/updates.template.json
@@ -0,0 +1,13 @@
+{
+ "addons": {
+ "uBlock0@raymondhill.net": {
+ "updates": [
+ {
+ "version": "$ext_version",
+ "browser_specific_settings": { "gecko": { "strict_min_version": "$min_browser_version" } },
+ "update_link": "https://github.com/gorhill/uBlock/releases/download/$tag_version/uBlock0_$tag_version.firefox.signed.xpi"
+ }
+ ]
+ }
+ }
+}
diff --git a/dist/mv3/chromium/publish-beta.py b/dist/mv3/chromium/publish-beta.py
new file mode 100755
index 0000000..0c77f6d
--- /dev/null
+++ b/dist/mv3/chromium/publish-beta.py
@@ -0,0 +1,195 @@
+#!/usr/bin/env python3
+
+import datetime
+import json
+import os
+import re
+import requests
+import shutil
+import subprocess
+import sys
+import tempfile
+import time
+import zipfile
+
+from string import Template
+
+# - Download target (raw) uBOLite_*.chromium.mv3.zip from GitHub
+# - This is referred to as "raw" package
+# - This will fail if not a dev build
+# - Upload uBOLite_*.chromium.mv3.zip to Chrome store
+# - Publish uBOLite_*.chromium.mv3.zip to Chrome store
+
+# Find path to project root
+projdir = os.path.split(os.path.abspath(__file__))[0]
+while not os.path.isdir(os.path.join(projdir, '.git')):
+ projdir = os.path.normpath(os.path.join(projdir, '..'))
+
+# We need a version string to work with
+if len(sys.argv) >= 2 and sys.argv[1]:
+ version = sys.argv[1]
+else:
+ version = input('Github release version: ')
+version.strip()
+if not re.search('^uBOLite_\d+\.\d+\.\d+\.\d+$', version):
+ print('Error: Invalid version string.')
+ exit(1)
+
+cs_extension_id = 'ddkjiahejlhfcafbddmgiahcphecmpfh'
+tmpdir = tempfile.TemporaryDirectory()
+raw_zip_filename = ''
+raw_zip_filepath = ''
+github_owner = 'gorhill'
+github_repo = 'uBlock'
+
+# Load/save auth secrets
+# The build directory is excluded from git
+ubo_secrets = dict()
+ubo_secrets_filename = os.path.join(projdir, 'dist', 'build', 'ubo_secrets')
+if os.path.isfile(ubo_secrets_filename):
+ with open(ubo_secrets_filename) as f:
+ ubo_secrets = json.load(f)
+
+def input_secret(prompt, token):
+ if token in ubo_secrets:
+ prompt += ' ✔'
+ prompt += ': '
+ value = input(prompt).strip()
+ if len(value) == 0:
+ if token not in ubo_secrets:
+ print('Token error:', token)
+ exit(1)
+ value = ubo_secrets[token]
+ elif token not in ubo_secrets or value != ubo_secrets[token]:
+ ubo_secrets[token] = value
+ exists = os.path.isfile(ubo_secrets_filename)
+ with open(ubo_secrets_filename, 'w') as f:
+ json.dump(ubo_secrets, f, indent=2)
+ if not exists:
+ os.chmod(ubo_secrets_filename, 0o600)
+ return value
+
+
+# GitHub API token
+github_token = input_secret('Github token', 'github_token')
+github_auth = 'token ' + github_token
+
+#
+# Get metadata from GitHub about the release
+#
+
+# https://developer.github.com/v3/repos/releases/#get-a-single-release
+print('Downloading release info from GitHub...')
+release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, version)
+headers = { 'Authorization': github_auth, }
+response = requests.get(release_info_url, headers=headers)
+if response.status_code != 200:
+ print('Error: Release not found: {0}'.format(response.status_code))
+ exit(1)
+release_info = response.json()
+
+#
+# Extract URL to raw package from metadata
+#
+
+# Find url for uBOLite_*.chromium.mv3.zip
+raw_zip_url = ''
+for asset in release_info['assets']:
+ if re.search('uBOLite_\d+.\d+.\d+.\d+.chromium.mv3.zip', asset['name']):
+ raw_zip_url = asset['url']
+ raw_zip_filename = asset['name']
+ raw_zip_filepath = os.path.join(tmpdir.name, raw_zip_filename)
+if len(raw_zip_url) == 0:
+ print('Error: Release asset URL not found')
+ exit(1)
+if len(raw_zip_filepath) == 0:
+ print('Error: Invalid release asset file not set')
+ exit(1)
+
+#
+# Download raw package from GitHub
+#
+
+# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
+print('Downloading raw zip package from GitHub...')
+headers = {
+ 'Authorization': github_auth,
+ 'Accept': 'application/octet-stream',
+}
+response = requests.get(raw_zip_url, headers=headers)
+# Redirections are transparently handled:
+# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history
+if response.status_code != 200:
+ print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code))
+ exit(1)
+with open(raw_zip_filepath, 'wb') as f:
+ f.write(response.content)
+print('Downloaded raw package saved as {0}'.format(raw_zip_filepath))
+
+#
+# Upload to Chrome store
+#
+
+# Auth tokens
+cs_id = input_secret('Chrome store id', 'cs_id')
+cs_secret = input_secret('Chrome store secret', 'cs_secret')
+cs_refresh = input_secret('Chrome store refresh token', 'cs_refresh')
+
+print('Uploading to Chrome store...')
+with open(raw_zip_filepath, 'rb') as f:
+ print('Generating access token...')
+ auth_url = 'https://accounts.google.com/o/oauth2/token'
+ auth_payload = {
+ 'client_id': cs_id,
+ 'client_secret': cs_secret,
+ 'grant_type': 'refresh_token',
+ 'refresh_token': cs_refresh,
+ }
+ auth_response = requests.post(auth_url, data=auth_payload)
+ if auth_response.status_code != 200:
+ print('Error: Auth failed -- server error {0}'.format(auth_response.status_code))
+ print(auth_response.text)
+ exit(1)
+ response_dict = auth_response.json()
+ if 'access_token' not in response_dict:
+ print('Error: Auth failed -- no access token')
+ exit(1)
+ # Prepare access token
+ cs_auth = 'Bearer ' + response_dict['access_token']
+ headers = {
+ 'Authorization': cs_auth,
+ 'x-goog-api-version': '2',
+ }
+ # Upload
+ print('Uploading package...')
+ upload_url = 'https://www.googleapis.com/upload/chromewebstore/v1.1/items/{0}'.format(cs_extension_id)
+ upload_response = requests.put(upload_url, headers=headers, data=f)
+ f.close()
+ if upload_response.status_code != 200:
+ print('Upload failed -- server error {0}'.format(upload_response.status_code))
+ print(upload_response.text)
+ exit(1)
+ response_dict = upload_response.json();
+ if 'uploadState' not in response_dict or response_dict['uploadState'] != 'SUCCESS':
+ print('Upload failed -- server error {0}'.format(response_dict['uploadState']))
+ exit(1)
+ print('Upload succeeded.')
+ # Publish
+ print('Publishing package...')
+ publish_url = 'https://www.googleapis.com/chromewebstore/v1.1/items/{0}/publish'.format(cs_extension_id)
+ headers = {
+ 'Authorization': cs_auth,
+ 'x-goog-api-version': '2',
+ 'Content-Length': '0',
+ }
+ publish_response = requests.post(publish_url, headers=headers)
+ if publish_response.status_code != 200:
+ print('Error: Chrome store publishing failed -- server error {0}'.format(publish_response.status_code))
+ exit(1)
+ response_dict = publish_response.json();
+ if 'status' not in response_dict or response_dict['status'][0] != 'OK':
+ print('Publishing failed -- server error {0}'.format(response_dict['status']))
+ exit(1)
+ print('Publishing succeeded.')
+
+print('All done.')
diff --git a/dist/mv3/firefox/publish-signed-beta.py b/dist/mv3/firefox/publish-signed-beta.py
new file mode 100755
index 0000000..0c5f8cd
--- /dev/null
+++ b/dist/mv3/firefox/publish-signed-beta.py
@@ -0,0 +1,326 @@
+#!/usr/bin/env python3
+
+import datetime
+import json
+import jwt
+import os
+import re
+import requests
+import shutil
+import subprocess
+import sys
+import tempfile
+import time
+import zipfile
+
+from string import Template
+
+# - Download target (raw) uBlock0.firefox.xpi from GitHub
+# - This is referred to as "raw" package
+# - This will fail if not a dev build
+# - Modify raw package to make it self-hosted
+# - This is referred to as "unsigned" package
+# - Ask AMO to sign uBlock0.firefox.xpi
+# - Generate JWT to be used for communication with server
+# - Upload unsigned package to AMO
+# - Wait for a valid download URL for signed package
+# - Download signed package as uBlock0.firefox.signed.xpi
+# - This is referred to as "signed" package
+# - Upload uBlock0.firefox.signed.xpi to GitHub
+# - Remove uBlock0.firefox.xpi from GitHub
+# - Modify updates.json to point to new version
+# - Commit changes to repo
+
+# Find path to project root
+projdir = os.path.split(os.path.abspath(__file__))[0]
+while not os.path.isdir(os.path.join(projdir, '.git')):
+ projdir = os.path.normpath(os.path.join(projdir, '..'))
+# Check that found project root is valid
+version_filepath = os.path.join(projdir, 'dist', 'version')
+if not os.path.isfile(version_filepath):
+ print('Version file not found.')
+ exit(1)
+
+# We need a version string to work with
+if len(sys.argv) >= 2 and sys.argv[1]:
+ tag_version = sys.argv[1]
+else:
+ tag_version = input('Github release version: ')
+tag_version.strip()
+match = re.search('^uBOLite_(\d+\.\d+\.\d+.\d+)$', tag_version)
+if not match:
+ print('Error: Invalid version string.')
+ exit(1)
+ext_version = match.group(1);
+
+extension_id = 'uBOLite@raymondhill.net'
+tmpdir = tempfile.TemporaryDirectory()
+raw_xpi_filename = tag_version + '.firefox.mv3.xpi'
+raw_xpi_filepath = os.path.join(tmpdir.name, raw_xpi_filename)
+unsigned_xpi_filepath = os.path.join(tmpdir.name, 'uBOLite.firefox.unsigned.xpi')
+signed_xpi_filename = tag_version + '.firefox.signed.mv3.xpi'
+signed_xpi_filepath = os.path.join(tmpdir.name, signed_xpi_filename)
+github_owner = 'gorhill'
+github_repo = 'uBlock'
+
+# Load/save auth secrets
+# The build directory is excluded from git
+ubo_secrets = dict()
+ubo_secrets_filename = os.path.join(projdir, 'dist', 'build', 'ubo_secrets')
+if os.path.isfile(ubo_secrets_filename):
+ with open(ubo_secrets_filename) as f:
+ ubo_secrets = json.load(f)
+
+def input_secret(prompt, token):
+ if token in ubo_secrets:
+ prompt += ' ✔'
+ prompt += ': '
+ value = input(prompt).strip()
+ if len(value) == 0:
+ if token not in ubo_secrets:
+ print('Token error:', token)
+ exit(1)
+ value = ubo_secrets[token]
+ elif token not in ubo_secrets or value != ubo_secrets[token]:
+ ubo_secrets[token] = value
+ exists = os.path.isfile(ubo_secrets_filename)
+ with open(ubo_secrets_filename, 'w') as f:
+ json.dump(ubo_secrets, f, indent=2)
+ if not exists:
+ os.chmod(ubo_secrets_filename, 0o600)
+ return value
+
+# GitHub API token
+github_token = input_secret('Github token', 'github_token')
+github_auth = 'token ' + github_token
+
+#
+# Get metadata from GitHub about the release
+#
+
+# https://developer.github.com/v3/repos/releases/#get-a-single-release
+print('Downloading release info from GitHub...')
+release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, tag_version)
+headers = { 'Authorization': github_auth, }
+response = requests.get(release_info_url, headers=headers)
+if response.status_code != 200:
+ print('Error: Release not found: {0}'.format(response.status_code))
+ exit(1)
+release_info = response.json()
+
+#
+# Extract URL to raw package from metadata
+#
+
+# Find url for uBlock0.firefox.xpi
+raw_xpi_url = ''
+for asset in release_info['assets']:
+ if asset['name'] == signed_xpi_filename:
+ print('Error: Found existing signed self-hosted package.')
+ exit(1)
+ if asset['name'] == raw_xpi_filename:
+ raw_xpi_url = asset['url']
+if len(raw_xpi_url) == 0:
+ print('Error: Release asset URL not found')
+ exit(1)
+
+#
+# Download raw package from GitHub
+#
+
+# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
+print('Downloading raw xpi package from GitHub...')
+headers = {
+ 'Authorization': github_auth,
+ 'Accept': 'application/octet-stream',
+}
+response = requests.get(raw_xpi_url, headers=headers)
+# Redirections are transparently handled:
+# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history
+if response.status_code != 200:
+ print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code))
+ exit(1)
+with open(raw_xpi_filepath, 'wb') as f:
+ f.write(response.content)
+print('Downloaded raw package saved as {0}'.format(raw_xpi_filepath))
+
+#
+# Convert the package to a self-hosted one: add `update_url` to the manifest
+#
+min_browser_version = '114.0';
+
+print('Converting raw xpi package into self-hosted xpi package...')
+with zipfile.ZipFile(raw_xpi_filepath, 'r') as zipin:
+ with zipfile.ZipFile(unsigned_xpi_filepath, 'w') as zipout:
+ for item in zipin.infolist():
+ data = zipin.read(item.filename)
+ if item.filename == 'manifest.json':
+ manifest = json.loads(bytes.decode(data))
+ min_browser_version = manifest['browser_specific_settings']['gecko']['strict_min_version']
+ manifest['browser_specific_settings']['gecko']['update_url'] = 'https://raw.githubusercontent.com/{0}/{1}/master/dist/mv3/firefox/updates.json'.format(github_owner, github_repo)
+ data = json.dumps(manifest, indent=2, separators=(',', ': '), sort_keys=True).encode()
+ zipout.writestr(item, data)
+
+#
+# Ask AMO to sign the self-hosted package
+# - https://developer.mozilla.org/en-US/Add-ons/Distribution#Distributing_your_add-on
+# - https://pyjwt.readthedocs.io/en/latest/usage.html
+# - https://addons-server.readthedocs.io/en/latest/topics/api/auth.html
+# - https://addons-server.readthedocs.io/en/latest/topics/api/signing.html
+#
+
+amo_api_key = ''
+amo_secret = ''
+
+def get_jwt_auth():
+ global amo_api_key
+ if amo_api_key == '':
+ amo_api_key = input_secret('AMO API key', 'amo_api_key')
+ global amo_secret
+ if amo_secret == '':
+ amo_secret = input_secret('AMO API secret', 'amo_secret')
+ amo_nonce = os.urandom(8).hex()
+ jwt_payload = {
+ 'iss': amo_api_key,
+ 'jti': amo_nonce,
+ 'iat': datetime.datetime.utcnow(),
+ 'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=15),
+ }
+ return 'JWT ' + jwt.encode(jwt_payload, amo_secret)
+
+print('Ask AMO to sign self-hosted xpi package...')
+with open(unsigned_xpi_filepath, 'rb') as f:
+ # https://blog.mozilla.org/addons/2019/11/11/security-improvements-in-amo-upload-tools/
+ # "We recommend allowing up to 15 minutes."
+ interval = 60 # check every 60 seconds
+ countdown = 60 * 60 / interval # for at most 60 minutes
+ headers = { 'Authorization': get_jwt_auth(), }
+ data = { 'channel': 'unlisted' }
+ files = { 'upload': f, }
+ signing_url = 'https://addons.mozilla.org/api/v4/addons/{0}/versions/{1}/'.format(extension_id, ext_version)
+ print('Submitting package to be signed...')
+ response = requests.put(signing_url, headers=headers, data=data, files=files)
+ if response.status_code != 202:
+ print('Error: Creating new version failed -- server error {0}'.format(response.status_code))
+ print(response.text)
+ exit(1)
+ print('Request for signing self-hosted xpi package succeeded.')
+ signing_request_response = response.json();
+ f.close()
+ print('Waiting for AMO to process the request to sign the self-hosted xpi package...')
+ # Wait for signed package to be ready
+ signing_check_url = signing_request_response['url']
+ while True:
+ time.sleep(interval)
+ sys.stdout.write('.')
+ sys.stdout.flush()
+ countdown -= 1
+ if countdown <= 0:
+ print('Error: AMO signing timed out')
+ exit(1)
+ headers = { 'Authorization': get_jwt_auth(), }
+ response = requests.get(signing_check_url, headers=headers)
+ if response.status_code != 200:
+ print('Error: AMO signing failed -- server error {0}'.format(response.status_code))
+ print(response.text)
+ exit(1)
+ signing_check_response = response.json()
+ if not signing_check_response['processed']:
+ continue
+ if not signing_check_response['valid']:
+ print('Error: AMO validation failed')
+ print(response.text)
+ exit(1)
+ if not signing_check_response['files'] or len(signing_check_response['files']) == 0:
+ continue
+ if not signing_check_response['files'][0]['signed']:
+ continue
+ if not signing_check_response['files'][0]['download_url']:
+ print('Error: AMO signing failed')
+ print(response.text)
+ exit(1)
+ print('\r')
+ print('Self-hosted xpi package successfully signed.')
+ download_url = signing_check_response['files'][0]['download_url']
+ print('Downloading signed self-hosted xpi package from {0}...'.format(download_url))
+ response = requests.get(download_url, headers=headers)
+ if response.status_code != 200:
+ print('Error: Download signed package failed -- server error {0}'.format(response.status_code))
+ print(response.text)
+ exit(1)
+ with open(signed_xpi_filepath, 'wb') as f:
+ f.write(response.content)
+ f.close()
+ print('Signed self-hosted xpi package downloaded.')
+ break
+
+#
+# Upload signed package to GitHub
+#
+
+# https://developer.github.com/v3/repos/releases/#upload-a-release-asset
+print('Uploading signed self-hosted xpi package to GitHub...')
+with open(signed_xpi_filepath, 'rb') as f:
+ url = release_info['upload_url'].replace('{?name,label}', '?name=' + signed_xpi_filename)
+ headers = {
+ 'Authorization': github_auth,
+ 'Content-Type': 'application/zip',
+ }
+ response = requests.post(url, headers=headers, data=f.read())
+ if response.status_code != 201:
+ print('Error: Upload signed package failed -- server error: {0}'.format(response.status_code))
+ exit(1)
+
+#
+# Remove raw package from GitHub
+#
+
+# https://developer.github.com/v3/repos/releases/#delete-a-release-asset
+print('Remove raw xpi package from GitHub...')
+headers = { 'Authorization': github_auth, }
+response = requests.delete(raw_xpi_url, headers=headers)
+if response.status_code != 204:
+ print('Error: Deletion of raw package failed -- server error: {0}'.format(response.status_code))
+
+#
+# Update updates.json to point to new package -- but only if just-signed
+# package is higher version than current one.
+#
+
+# Be sure we are in sync with potentially modified files on remote
+r = subprocess.run(['git', 'pull', 'origin', 'master'], stdout=subprocess.PIPE)
+rout = bytes.decode(r.stdout).strip()
+
+def int_from_version(version):
+ parts = version.split('.')
+ if len(parts) == 3:
+ parts.append('0')
+ return int(parts[0])*10e9 + int(parts[1])*10e6 + int(parts[2])*10e3 + int(parts[3])
+
+print('Update GitHub to point to newly signed self-hosted xpi package...')
+updates_json_filepath = os.path.join(projdir, 'dist', 'mv3', 'firefox', 'updates.json')
+with open(updates_json_filepath) as f:
+ updates_json = json.load(f)
+ f.close()
+ previous_version = updates_json['addons'][extension_id]['updates'][0]['version']
+ if int_from_version(ext_version) > int_from_version(previous_version):
+ with open(os.path.join(projdir, 'dist', 'mv3', 'firefox', 'updates.template.json')) as f:
+ template_json = Template(f.read())
+ f.close()
+ updates_json = template_json.substitute(ext_version=ext_version, tag_version=tag_version, min_browser_version=min_browser_version)
+ with open(updates_json_filepath, 'w') as f:
+ f.write(updates_json)
+ f.close()
+ # - Stage the changed file
+ r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
+ rout = bytes.decode(r.stdout).strip()
+ if len(rout) >= 2 and rout[1] == 'M':
+ subprocess.run(['git', 'add', updates_json_filepath])
+ # - Commit the staged file
+ r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
+ rout = bytes.decode(r.stdout).strip()
+ if len(rout) >= 2 and rout[0] == 'M':
+ subprocess.run(['git', 'commit', '-m', 'Make Firefox dev build auto-update', updates_json_filepath])
+ subprocess.run(['git', 'push', 'origin', 'HEAD'])
+
+print('All done.')
diff --git a/dist/mv3/firefox/updates.json b/dist/mv3/firefox/updates.json
new file mode 100644
index 0000000..46fa088
--- /dev/null
+++ b/dist/mv3/firefox/updates.json
@@ -0,0 +1,13 @@
+{
+ "addons": {
+ "uBOLite@raymondhill.net": {
+ "updates": [
+ {
+ "version": "1.0.23.8125",
+ "browser_specific_settings": { "gecko": { "strict_min_version": "114.0" } },
+ "update_link": "https://github.com/gorhill/uBlock/releases/download/uBOLite_1.0.23.8125/uBOLite_1.0.23.8125.firefox.signed.mv3.xpi"
+ }
+ ]
+ }
+ }
+}
diff --git a/dist/mv3/firefox/updates.template.json b/dist/mv3/firefox/updates.template.json
new file mode 100644
index 0000000..08d161f
--- /dev/null
+++ b/dist/mv3/firefox/updates.template.json
@@ -0,0 +1,13 @@
+{
+ "addons": {
+ "uBOLite@raymondhill.net": {
+ "updates": [
+ {
+ "version": "$ext_version",
+ "browser_specific_settings": { "gecko": { "strict_min_version": "$min_browser_version" } },
+ "update_link": "https://github.com/gorhill/uBlock/releases/download/$tag_version/$tag_version.firefox.signed.mv3.xpi"
+ }
+ ]
+ }
+ }
+}
diff --git a/dist/mv3/log.txt b/dist/mv3/log.txt
new file mode 100644
index 0000000..122c47e
--- /dev/null
+++ b/dist/mv3/log.txt
@@ -0,0 +1,1584 @@
+Version: 2023.8.19.910
+Secret: 72d7360bdd9117ff
+============================
+Listset for 'default':
+ Fetching remote https://ublockorigin.github.io/uAssets/filters/filters.min.txt
+ Fetching remote https://ublockorigin.github.io/uAssets/filters/badware.txt
+ Fetching remote https://ublockorigin.github.io/uAssets/filters/privacy.min.txt
+ Fetching remote https://ublockorigin.github.io/uAssets/filters/unbreak.min.txt
+ Fetching remote https://ublockorigin.github.io/uAssets/filters/quick-fixes.txt
+ Fetching remote https://ublockorigin.github.io/uAssets/filters/ubol-filters.txt
+ Fetching remote https://ublockorigin.github.io/uAssets/thirdparties/easylist.txt
+ Fetching remote https://ublockorigin.github.io/uAssets/thirdparties/easyprivacy.txt
+ Fetching remote https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext
+Input filter count: 92855
+ Accepted filter count: 91275
+ Rejected filter count: 146
+Output rule count: 17561
+ Pruning requestDomains: from 54014 to 53859
+ Pruning requestDomains: from 2681 to 2675
+ Pruning requestDomains: from 5929 to 5925
+ Plain good: 16732
+ Salvaged rule by ignoring 1 entity-based domain= option: erotic-beauties.com|hardsex.cc|rule34.top|sex-movies.biz|tube18.sexy|xvideos.name|booru.*
+ Salvaged rule by ignoring 19 entity-based domain= option: fullxh.com|hamsterix.*|megaxh.com|unlockxh4.com|xhadult2.com|xhadult3.com|xhadult4.com|xhadult5.com|xhamster.*|xhamster10.*|xhamster11.*|xhamster12.*|xhamster13.*|xhamster14.*|xhamster15.*|xhamster16.*|xhamster17.*|xhamster18.*|xhamster19.*|xhamster2.*|xhamster20.*|xhamster3.*|xhamster4.*|xhamster46.com|xhamster5.*|xhamster7.*|xhamster8.*|xhday.com|xhday1.com|xhmoon5.com|xhplanet1.com|xhplanet2.com|xhreal2.com|xhreal3.com|xhtab2.com|xhvictory.com|xhwebsite.com|xhwebsite2.com|xhwide1.com|xhwide8.com
+ Salvaged rule by ignoring 19 entity-based domain= option: fullxh.com|hamsterix.*|megaxh.com|unlockxh4.com|xhadult2.com|xhadult3.com|xhadult4.com|xhadult5.com|xhamster.*|xhamster10.*|xhamster11.*|xhamster12.*|xhamster13.*|xhamster14.*|xhamster15.*|xhamster16.*|xhamster17.*|xhamster18.*|xhamster19.*|xhamster2.*|xhamster20.*|xhamster3.*|xhamster4.*|xhamster46.com|xhamster5.*|xhamster7.*|xhamster8.*|xhday.com|xhday1.com|xhmoon5.com|xhplanet1.com|xhplanet2.com|xhreal2.com|xhreal3.com|xhtab2.com|xhvictory.com|xhwebsite.com|xhwebsite2.com|xhwide1.com|xhwide8.com
+ Salvaged rule by ignoring 1 entity-based domain= option: 8boobs.com|angelgals.com|babesexy.com|babesinporn.com|fooxybabes.com|hotbabeswanted.com|hotstunners.com|mainbabes.com|nakedbabes.club|nakedgirlsroom.com|nudebabes.sexy|pleasuregirl.net|rabbitsfun.com|sexybabes.club|sexybabesart.com|wantedbabes.com|silkengirl.*
+ Salvaged rule by ignoring 1 entity-based domain= option: web.de|gmx.*
+ Salvaged rule by ignoring 2 entity-based domain= option: vizcloud.*|vizcloud2.*|mcloud.to
+ Salvaged rule by ignoring 1 entity-based domain= option: 8boobs.com|babesinporn.com|fooxybabes.com|hotstunners.com|mainbabes.com|pleasuregirl.net|rabbitsfun.com|wantedbabes.com|silkengirl.*
+ Salvaged rule by ignoring 2 entity-based domain= option: dood.*|dooood.*|doods.pro
+ Salvaged rule by ignoring 1 entity-based domain= option: vtplay.net|vtplayer.net|vtube.to|vtbe.*
+ Salvaged rule by ignoring 1 entity-based domain= option: piraproxy.app|unblocksite.pw|theproxy.*
+ Salvaged rule by ignoring 1 entity-based domain= option: androidapks.biz|androidsite.net|animeonlinefree.org|animesite.net|computercrack.com|crackedsoftware.biz|crackfree.org|cracksite.info|downloadapk.info|downloadapps.info|downloadgames.info|downloadmusic.info|downloadsite.org|ebooksite.org|emulatorsite.com|fmovies24.com|freeflix.info|freemoviesu4.com|freesoccer.net|fseries.org|gamefast.org|gamesite.info|gostreamon.net|hindisite.net|isosite.org|macsite.info|mangasite.org|megamovies.org|moviefree2.com|moviesite.app|moviesx.org|musicsite.biz|patchsite.net|pdfsite.net|play1002.com|productkeysite.com|romsite.org|seriesite.net|siteapk.net|siteflix.org|sitegames.net|sitekeys.net|sitepdf.com|sitetorrent.com|softwaresite.net|superapk.org|supermovies.org|tvonlinesports.com|ultramovies.org|warezsite.net|watchmovies2.com|watchmoviesforfree.org|watchsite.net|youapk.net|sitesunblocked.*
+ Salvaged rule by ignoring 19 entity-based domain= option: fullxh.com|hamsterix.*|megaxh.com|unlockxh4.com|xhadult2.com|xhadult3.com|xhadult4.com|xhadult5.com|xhamster.*|xhamster10.*|xhamster11.*|xhamster12.*|xhamster13.*|xhamster14.*|xhamster15.*|xhamster16.*|xhamster17.*|xhamster18.*|xhamster19.*|xhamster2.*|xhamster20.*|xhamster3.*|xhamster4.*|xhamster46.com|xhamster5.*|xhamster7.*|xhamster8.*|xhday.com|xhday1.com|xhmoon5.com|xhplanet1.com|xhplanet2.com|xhreal2.com|xhreal3.com|xhtab2.com|xhvictory.com|xhwebsite.com|xhwebsite2.com|xhwide1.com|xhwide8.com
+ Salvaged rule by ignoring 19 entity-based domain= option: fullxh.com|hamsterix.*|megaxh.com|unlockxh4.com|xhadult2.com|xhadult3.com|xhadult4.com|xhadult5.com|xhamster.*|xhamster10.*|xhamster11.*|xhamster12.*|xhamster13.*|xhamster14.*|xhamster15.*|xhamster16.*|xhamster17.*|xhamster18.*|xhamster19.*|xhamster2.*|xhamster20.*|xhamster3.*|xhamster4.*|xhamster46.com|xhamster5.*|xhamster7.*|xhamster8.*|xhday.com|xhday1.com|xhmoon5.com|xhplanet1.com|xhplanet2.com|xhreal2.com|xhreal3.com|xhtab2.com|xhvictory.com|xhwebsite.com|xhwebsite2.com|xhwide1.com|xhwide8.com
+ Salvaged rule by ignoring 11 entity-based domain= option: clik.pw|1ink.cc|pornfay.*|picbaron.com|bit-url.com|upbam.org|sexvid.*|sexrura.pl|isohuntz.*|isohunt.*|isohunts.*|isohuntx.*|isohunthydra.*|isohunters.*|isohunting.*|myisohunt.*|torrentproject2.*
+ Salvaged rule by ignoring 19 entity-based domain= option: fullxh.com|hamsterix.*|megaxh.com|unlockxh4.com|xhadult2.com|xhadult3.com|xhadult4.com|xhadult5.com|xhamster.*|xhamster10.*|xhamster11.*|xhamster12.*|xhamster13.*|xhamster14.*|xhamster15.*|xhamster16.*|xhamster17.*|xhamster18.*|xhamster19.*|xhamster20.*|xhamster2.*|xhamster3.*|xhamster4.*|xhamster46.com|xhamster5.*|xhamster7.*|xhamster8.*|xhday.com|xhday1.com|xhmoon5.com|xhplanet1.com|xhplanet2.com|xhreal2.com|xhreal3.com|xhtab2.com|xhvictory.com|xhwebsite.com|xhwebsite2.com|xhwide1.com|xhwide8.com|webnovel.com
+ Salvaged rule by ignoring 1 entity-based domain= option: torrentproject2.*|click.allkeyshop.com
+ Salvaged rule by ignoring 3 entity-based domain= option: 0gomovies.*|cdn1.fastvid.co|cdnqq.net|gorockmovies.top|kokostream.net|movi.pk|ncdn22.xyz|netu.ac|player.msmini.*|vapley.*
+ Salvaged rule by ignoring 1 entity-based domain= option: isaidub1.com|isaidubhd.*
+ Salvaged rule by ignoring 1 entity-based domain= option: d3ward.github.io|direct-cloud.*
+ Salvaged rule by ignoring 1 entity-based domain= option: povvldeo.lol|povvldeo.*
+ Salvaged rule by ignoring 1 entity-based domain= option: pngit.live|pingit.*
+ Salvaged rule by ignoring 1 entity-based domain= option: enrt.eu|seulink.*
+ Salvaged rule by ignoring 1 entity-based domain= option: imgair.net|imgblaze.net|imgfrost.net|imgwia.buzz|pixsera.net|vestimage.site|pixlev.*
+ Salvaged rule by ignoring 1 entity-based domain= option: javthe.com|javfree.*
+ Salvaged rule by ignoring 1 entity-based domain= option: dropcoins.xyz|fastcoin.ga|faucetbr.tk|is2btc.com|swift4claim.com|quickclaims.*
+ Salvaged rule by ignoring 1 entity-based domain= option: olympicstreams.me|vipboxtv.*
+ Salvaged rule by ignoring 8 entity-based domain= option: adbull.org|zdnet.fr|imgsen.com|titsbox.com|senmanga.com|hitomi.la|mangovideo.*|bolly4umovies.*|gaybeeg.info|lovelynudez.com|classicpornbest.com|skymovieshd.*|topwwnews.com|elsfile.org|javdoe.to|javtc.*|webmusic.*|pics4you.net|kiwiexploits.com|pornxp.com|silverpic.com|suicidepics.com|tanix.net|freeuseporn.com|ukrainesmodels.com|freeadultcomix.com|xxxwebdlxxx.top|uproxy2.biz|crownimg.com|masaporn.xyz|dvdplay.*|mangaraw.org|imgstar.eu|imgsto.*|picdollar.com|pics4upload.com|amateurblog.tv|fashionblog.tv|latinblog.tv|silverblog.tv|tokyoblog.tv|xblog.tv|maxsport.one|sportz.football|streamgo.to|streamgoto.*|amazingstream.net|imwatchingmovies.com|zinchanmanga.com|weaksports.xyz|vidoza.co|vidoza.net|govid.co|up-4ever.net|abcvideo.cc|ouo.io|ouo.press|imgbox.com|pirateproxy.live|thehiddenbay.com|thepiratebay.org|thepiratebay10.org
+ Salvaged rule by ignoring 1 entity-based domain= option: ceesty.com|corneey.com|destyy.com|festyy.com|gestyy.com|hd-easyporn.com|bolly4umovies.*|pcgamez-download.com|torrentvhd.biz|lovelynudez.com|gayforit.eu|movieston.com|kiwiexploits.com|dropload.io|nsfwyoutube.com|pomvideo.cc|steampiay.cc|vidoza.co|vidoza.net|mixdrop.co|govid.co|up-4ever.net|abcvideo.cc|ouo.io|ouo.press|pirateproxy.live|thehiddenbay.com|thepiratebay10.org|opensubtitles.org
+ Salvaged rule by ignoring 19 entity-based domain= option: fullxh.com|hamsterix.*|megaxh.com|unlockxh4.com|xhadult2.com|xhadult3.com|xhadult4.com|xhadult5.com|xhamster.*|xhamster10.*|xhamster11.*|xhamster12.*|xhamster13.*|xhamster14.*|xhamster15.*|xhamster16.*|xhamster17.*|xhamster18.*|xhamster19.*|xhamster2.*|xhamster20.*|xhamster3.*|xhamster4.*|xhamster46.com|xhamster5.*|xhamster7.*|xhamster8.*|xhday.com|xhday1.com|xhmoon5.com|xhplanet1.com|xhplanet2.com|xhreal2.com|xhreal3.com|xhtab2.com|xhvictory.com|xhwebsite.com|xhwebsite2.com|xhwide1.com|xhwide8.com
+ Salvaged rule by ignoring 1 entity-based domain= option: cpmlink.net|mwpaste.com|lusthero.com|22pixx.xyz|goto.com.np|imgtorrnt.in|shrinkearn.com|9ig.de|pingit.im|pngit.live|elil.cc|vev.red|vidop.icu|vidup.io|tubepornclassic.com|ironysub.net|bolly4umovies.*|pcgamez-download.com|curto.win|freeadultcomix.com|xxxwebdlxxx.top|crownimg.com|pomvideo.cc|steampiay.cc|bc.vc|vidoza.co|vidoza.net|pirateproxy.live|thehiddenbay.com|thepiratebay.org|thepiratebay10.org
+ Salvaged rule by ignoring 1 entity-based domain= option: financemonk.net|dropgalaxy.*
+ Salvaged rule by ignoring 1 entity-based domain= option: financemonk.net|dropgalaxy.*
+ Salvaged rule by ignoring 2 entity-based domain= option: gentside.*|ohmymag.*|maxisciences.com
+ Salvaged rule by ignoring 2 entity-based domain= option: gentside.*|ohmymag.*|maxisciences.com
+ Salvaged rule by ignoring 2 entity-based domain= option: gentside.*|ohmymag.*|maxisciences.com
+ Salvaged rule by ignoring 2 entity-based domain= option: gentside.*|ohmymag.*|maxisciences.com
+ Salvaged rule by ignoring 2 entity-based domain= option: gentside.*|ohmymag.*|maxisciences.com
+ Salvaged rule by ignoring 1 entity-based domain= option: gentside.co.uk|gentside.com|gentside.de|maxisciences.com|ohmymag.co.uk|ohmymag.com|ohmymag.de|gentside.*
+ Salvaged rule by ignoring 1 entity-based domain= option: financemonk.net|dropgalaxy.*
+ Salvaged rule by ignoring 1 entity-based domain= option: financemonk.net|techthematter.xyz|dropgalaxy.*
+ Salvaged rule by ignoring 1 entity-based domain= option: ladbible.com|tyla.com|unilad.com|gamingbible.*
+ Salvaged rule by ignoring 1 entity-based domain= option: ladbible.com|tyla.com|unilad.com|gamingbible.*
+ Salvaged rule by ignoring 1 entity-based domain= option: educatiocenter.online|a2zapk.*
+ Salvaged rule by ignoring 2 entity-based domain= option: gentside.*|ohmymag.*|maxisciences.com
+ Salvaged rule by ignoring 1 entity-based domain= option: financemonk.net|dropgalaxy.*
+ Salvaged rule by ignoring 1 entity-based domain= option: ladbible.com|tyla.com|unilad.com|gamingbible.*
+ Salvaged rule by ignoring 1 entity-based domain= option: ladbible.com|tyla.com|unilad.com|gamingbible.*
+ Salvaged rule by ignoring 1 entity-based domain= option: educatiocenter.online|a2zapk.*
+ Salvaged rule by ignoring 1 entity-based domain= option: cbhours.com|pussyspace.*
+ Salvaged rule by ignoring 2 entity-based domain= option: acortalo.*|acortar.*|megadescarga.net
+ Salvaged rule by ignoring 2 entity-based domain= option: gentside.*|ohmymag.*|maxisciences.com
+ Salvaged rule by ignoring 5 entity-based domain= option: mylink.*|my1ink.*|myl1nk.*|myli3k.*|audiotools.pro|magesy.blog|magesypro.pro|audioztools.com|solvetube.*|promo-visits.site|satoshi-win.xyz|healdad.com|mobitaak.com|gamalk-sehetk.com|allcryptoz.net|crewbase.net|crewus.net|shinbhu.net|shinchu.net|thumb8.net|thumb9.net|topcryptoz.net|uniqueten.net|ultraten.net
+ Maybe good (regexes): 146
+ redirect=: 342
+ removeparams= (accepted/discarded): 34/12
+ modifyHeaders=: 64
+ Unsupported: 243
+ Can't salvage rule with only entity-based domain= option: vidmoly.*
+ Can't salvage rule with only entity-based domain= option: megalink.*
+ Can't salvage rule with only entity-based domain= option: bg-gledai.*
+ FilterStrictParty: Strict partyness strict3p not supported
+ Can't salvage rule with only entity-based domain= option: nishankhatri.*
+ Can't salvage rule with only entity-based domain= option: oploverz.*
+ Can't salvage rule with only entity-based domain= option: mangaku.*
+ Can't salvage rule with only entity-based domain= option: nekopoi.*
+ Can't salvage rule with only entity-based domain= option: vinaurl.*
+ Can't salvage rule with only entity-based domain= option: komikcast.*
+ Can't salvage rule with only entity-based domain= option: movs4u.*
+ Can't salvage rule with only entity-based domain= option: movieon21.*
+ Can't salvage rule with only entity-based domain= option: aagmaal.*
+ Can't salvage rule with only entity-based domain= option: otakudesu.*
+ Can't salvage rule with only entity-based domain= option: myflixer.*
+ FilterStrictParty: Strict partyness strict3p not supported
+ Can't salvage rule with only entity-based domain= option: yts.*
+ regexFilter is not RE2-compatible: \/[a-z]{4,}\/(?!holly7)(?!siksik7)[0-9a-z]{3,}\d\.\d{1,2}\.\d{1,2}\.[0-9a-f]{32}\.js$
+ Can't salvage rule with only entity-based domain= option: ouo.*
+ Can't salvage rule with only entity-based domain= option: dewimg.*|imgtown.*|imgviu.*|mazpic.*|outletpic.*|picrok.*
+ Can't salvage rule with only entity-based domain= option: vinaurl.*
+ Can't salvage rule with only entity-based domain= option: mirrorace.*
+ Can't salvage rule with only entity-based domain= option: the-voice-of-germany.*
+ Can't salvage rule with only entity-based domain= option: linkvertise.*
+ regexFilter is not RE2-compatible: ^https?:\/\/a\.[-0-9a-z]{4,21}\.[a-z]{2,5}\/(?=[a-z]*[0-9A-Z])[0-9a-zA-Z]{5,7}\.js$
+ regexFilter is not RE2-compatible: ^https?:\/\/asg\.[-0-9a-z]{4,21}\.[a-z]{2,5}\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$
+ regexFilter is not RE2-compatible: ^https?:\/\/pre\.[0-9a-z]{6,12}\.[a-z]{3,4}\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$
+ regexFilter is not RE2-compatible: ^https?:\/\/oi\.[0-9a-z]{6,12}\.[a-z]{3}\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$
+ Can't salvage rule with only entity-based domain= option: vegamovies.*
+ Can't salvage rule with only entity-based domain= option: waaaw.*|waaw.*
+ Can't salvage rule with only entity-based domain= option: vizcloud.*|vizcloud2.*
+ FilterStrictParty: Strict partyness strict3p not supported
+ Can't salvage rule with only entity-based domain= option: sexvid.*
+ Can't salvage rule with only entity-based domain= option: slreamplay.*
+ Can't salvage rule with only entity-based domain= option: sexwebvideo.*
+ Can't salvage rule with only entity-based domain= option: dutchycorp.*
+ regexFilter is not RE2-compatible: ^https:\/\/(?:www\d\.)?[-a-z]{6,}\.(?:com|info|net|org)\/(?=[-_a-zA-Z]{0,42}\d)(?=[-_0-9a-z]{0,42}[A-Z])[-_0-9a-zA-Z]{43}\/\?cid=[-_0-9a-zA-Z]{10,36}(?:&qs\d=\S+)?&(?:s|pub)id=[-_0-9a-z{}]{1,32}(?:&s=0\.\d+)?(?:#\S+)?$
+ regexFilter is not RE2-compatible: ^https:\/\/(?:www\d\.)?[-a-z]{6,}\.(?:com|info|net|org)\/(?=[-_a-zA-Z]{0,42}\d)(?=[-_0-9a-z]{0,42}[A-Z])[-_0-9a-zA-Z]{43}\/\?(?:pub|s)id=[-_0-9a-z{}]{1,32}(?:&qs\d=\S+)?&cid=[-_0-9a-zA-Z]{10,36}(?:&s=0\.\d+)?(?:#\S+)?$
+ Can't salvage rule with only entity-based domain= option: 1337x.*|1337x.g3g.*|unblockit.*|x1337x.*
+ regexFilter is not RE2-compatible: \/img\/(?!new).+\.gif
+ FilterStrictParty: Strict partyness strict1p not supported
+ Can't salvage rule with only entity-based domain= option: slreamplay.*
+ Can't salvage rule with only entity-based domain= option: pouvideo.*|povvideo.*|povw1deo.*|povwideo.*|powv1deo.*|powvibeo.*|powvideo.*|powvldeo.*
+ Can't salvage rule with only entity-based domain= option: pouvideo.*|povvideo.*|povw1deo.*|povwideo.*|powv1deo.*|powvibeo.*|powvideo.*|powvldeo.*
+ Can't salvage rule with only entity-based domain= option: strcloud.*|streamta.*|streamtape.*|strtape.*|strtapeadblock.*|strtpe.*
+ Can't salvage rule with only entity-based domain= option: bigkickass.*|kat.*|kat2.*|katbay.*|katfreak.*|kathydra.*|katkickass.*|katkickass.*|kattracker.*|kick4ss.*|kickass-usa.*|kickass.*|kickass2.*|kickassaustralia.*|kickassbay.*|kickassdb.*|kickassfull.*|kickassgo.*|kickasshydra.*|kickassindia.*|kickasskat.*|kickassminds.*|kickassmovies.*|kickasspk.*|kickasst.*|kickasstorrents.*|kickasstorrents2.*|kickasstracker.*|kickasstrusty.*|kickassuk.*|kickassunlocked.*|kickassz.*|kkat.*|kkickass.*|thekat.*|thekickass.*|topkickass.*|torrentkat.*|torrentskickass.*
+ Can't salvage rule with only entity-based domain= option: isohunt.*|isohunters.*|isohunthydra.*|isohunting.*|isohunts.*|isohuntx.*|isohuntz.*|myisohunt.*
+ FilterStrictParty: Strict partyness strict1p not supported
+ Can't salvage rule with only entity-based domain= option: uptomega.*
+ Can't salvage rule with only entity-based domain= option: uplinkto.*
+ Can't salvage rule with only entity-based domain= option: link1s.*
+ Can't salvage rule with only entity-based domain= option: moviesda1.*
+ Can't salvage rule with only entity-based domain= option: dloader.*
+ Can't salvage rule with only entity-based domain= option: isaidub.*
+ Can't salvage rule with only entity-based domain= option: zone-telechargement.*
+ Can't salvage rule with only entity-based domain= option: earnload.*
+ regexFilter is not RE2-compatible: ^https?:\/\/[a-z]{7,16}\.com?\/(?=[+\/0-9a-zA-Z]*\+)(?=[+\/a-zA-Z]*\d)(?=[+\/0-9a-z]*[A-Z])[+\/0-9a-zA-Z]{140,}$
+ regexFilter is not RE2-compatible: ^https?:\/\/[a-z]{7,16}\.org\/(?=[+\/0-9a-zA-Z]*\+)(?=[+\/a-zA-Z]*\d)(?=[+\/0-9a-z]*[A-Z])[+\/0-9a-zA-Z]{140,}$
+ Can't salvage rule with only entity-based domain= option: torlock.*|torlock2.*
+ Can't salvage rule with only entity-based domain= option: vipleague.*
+ Can't salvage rule with only entity-based domain= option: my1ink.*|myl1nk.*|myli3k.*|mylink.*
+ Can't salvage rule with only entity-based domain= option: sxyprn.*
+ Can't salvage rule with only entity-based domain= option: palimas.*
+ Can't salvage rule with only entity-based domain= option: vjav.*
+ Can't salvage rule with only entity-based domain= option: linkshorts.*
+ Can't salvage rule with only entity-based domain= option: mazpic.*
+ Can't salvage rule with only entity-based domain= option: picrok.*
+ Can't salvage rule with only entity-based domain= option: imgviu.*
+ Can't salvage rule with only entity-based domain= option: outletpic.*
+ Can't salvage rule with only entity-based domain= option: dewimg.*
+ Can't salvage rule with only entity-based domain= option: imgtown.*
+ Can't salvage rule with only entity-based domain= option: oploverz.*
+ Can't salvage rule with only entity-based domain= option: readcomiconline.*
+ Can't salvage rule with only entity-based domain= option: adsrt.*
+ Can't salvage rule with only entity-based domain= option: animeflv.*
+ Can't salvage rule with only entity-based domain= option: kiss-anime.*
+ Can't salvage rule with only entity-based domain= option: japscan.*
+ Can't salvage rule with only entity-based domain= option: downloadhub.*
+ Can't salvage rule with only entity-based domain= option: 9xbuddy.*
+ Can't salvage rule with only entity-based domain= option: viprow.*
+ Can't salvage rule with only entity-based domain= option: anitube.*
+ Can't salvage rule with only entity-based domain= option: mixdroop.*|mixdrop.*|mixdrp.*
+ Can't salvage rule with only entity-based domain= option: dramacool9.*
+ Can't salvage rule with only entity-based domain= option: hdfriday.*
+ Can't salvage rule with only entity-based domain= option: extramovies.*
+ Can't salvage rule with only entity-based domain= option: atomixhq.*|pctfenix.*
+ Can't salvage rule with only entity-based domain= option: shortearn.*
+ Can't salvage rule with only entity-based domain= option: okstream.*
+ Can't salvage rule with only entity-based domain= option: megavideo.*
+ Can't salvage rule with only entity-based domain= option: tmearn.*
+ Can't salvage rule with only entity-based domain= option: leechall.*
+ Can't salvage rule with only entity-based domain= option: allcalidad.*
+ Can't salvage rule with only entity-based domain= option: movieshub.*
+ Can't salvage rule with only entity-based domain= option: dailysport.*
+ Can't salvage rule with only entity-based domain= option: mkvcinemas.*
+ Can't salvage rule with only entity-based domain= option: pelispedia.*
+ Can't salvage rule with only entity-based domain= option: linkviet.*
+ Can't salvage rule with only entity-based domain= option: btdb.*
+ Can't salvage rule with only entity-based domain= option: animesvision.*
+ Can't salvage rule with only entity-based domain= option: miniurl.*
+ Can't salvage rule with only entity-based domain= option: uploadhub.*
+ Can't salvage rule with only entity-based domain= option: bollyflix.*
+ Can't salvage rule with only entity-based domain= option: veranime.*|verhentai.*
+ Can't salvage rule with only entity-based domain= option: shortzzy.*
+ Can't salvage rule with only entity-based domain= option: xtits.*
+ Can't salvage rule with only entity-based domain= option: shorttey.*
+ Can't salvage rule with only entity-based domain= option: hdmovieplus.*
+ Can't salvage rule with only entity-based domain= option: img4fap.*
+ Can't salvage rule with only entity-based domain= option: elitetorrent.*
+ Can't salvage rule with only entity-based domain= option: lite-link.*
+ Can't salvage rule with only entity-based domain= option: adcorto.*
+ Can't salvage rule with only entity-based domain= option: streamhub.*
+ Can't salvage rule with only entity-based domain= option: 720pstream.*
+ Can't salvage rule with only entity-based domain= option: toonanime.*
+ Can't salvage rule with only entity-based domain= option: buffstreams.*
+ Can't salvage rule with only entity-based domain= option: cinemakottaga.*
+ Can't salvage rule with only entity-based domain= option: hog.*
+ Can't salvage rule with only entity-based domain= option: samehadaku.*
+ Can't salvage rule with only entity-based domain= option: atishmkv.*
+ Can't salvage rule with only entity-based domain= option: watchomovies.*
+ Can't salvage rule with only entity-based domain= option: hdhub4u.*
+ Can't salvage rule with only entity-based domain= option: livetvon.*
+ Can't salvage rule with only entity-based domain= option: sports-stream.*
+ regexFilter is not RE2-compatible: ^https?:\/\/[0-9a-z]{4,8}\.autos\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$
+ regexFilter is not RE2-compatible: ^https?:\/\/[0-9a-z]{4,8}\.beauty\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$
+ regexFilter is not RE2-compatible: ^https?:\/\/[0-9a-z]{4,8}\.lol\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$
+ regexFilter is not RE2-compatible: ^https?:\/\/[0-9a-z]{4,8}\.mom\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$
+ regexFilter is not RE2-compatible: ^https?:\/\/[0-9a-z]{4,8}\.pro\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$
+ regexFilter is not RE2-compatible: ^https?:\/\/[0-9a-z]{4,8}\.xyz\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$
+ regexFilter is not RE2-compatible: ^https?:\/\/[a-z]{8,15}\.com?\/(?=[0-9a-zA-Z]*%)(?=[%a-zA-Z]*\d)(?=[%0-9a-z]*[A-Z])[%0-9a-zA-Z]{170,}$
+ regexFilter is not RE2-compatible: ^https:\/\/(?:[a-z]{2}\.)?[a-z]{7,14}\.com\/r(?=[a-z]*[0-9A-Z])[0-9A-Za-z]{10,16}\/[A-Za-z]{5}$
+ Can't salvage rule with only entity-based domain= option: sdmoviespoint.*
+ Can't salvage rule with only entity-based domain= option: torrentgalaxy.*
+ regexFilter is not RE2-compatible: ^https:\/\/[0-9a-z]{7,25}\.com\/v2(?:\/0\/)?(?=[-_0-9a-z]{0,84}[A-Z])(?=[-_a-zA-Z]{0,84}[0-9])[-_0-9a-zA-Z]{54,85}(#\?v=[0-9a-f]{32})?$
+ Can't salvage rule with only entity-based domain= option: mazpic.*
+ Can't salvage rule with only entity-based domain= option: picrok.*
+ Can't salvage rule with only entity-based domain= option: imgviu.*
+ Can't salvage rule with only entity-based domain= option: outletpic.*
+ Can't salvage rule with only entity-based domain= option: dewimg.*
+ Can't salvage rule with only entity-based domain= option: imgtown.*
+ Can't salvage rule with only entity-based domain= option: btdb.*
+ regexFilter is not RE2-compatible: ^https?:\/\/(?:[a-z]{2}\.)?[0-9a-z]{7,16}\.com\/[a-z](?=[a-z]{0,25}[0-9A-Z])[0-9a-zA-Z]{3,26}\/(?:[1-6]\d{4}|[3-9]\d{3})\??(?:_=\d+|v=\d)?$
+ regexFilter is not RE2-compatible: ^https?:\/\/(?:[a-z]{2}\.)?[0-9a-z]{7,16}\.website\/[a-z](?=[a-z]{0,25}[0-9A-Z])[0-9a-zA-Z]{3,26}\/(?:[1-6]\d{4}|[3-9]\d{3})\??(?:_=\d+|v=\d)?$
+ regexFilter is not RE2-compatible: ^https:\/\/[0-9a-z]{7,25}\.com\/v2(?:\/0\/)?(?=[-_0-9a-z]{0,84}[A-Z])(?=[-_a-zA-Z]{0,84}[0-9])[-_0-9a-zA-Z]{54,85}(#\?v=[0-9a-f]{32})?$
+ Can't salvage rule with only entity-based domain= option: sxyprn.*
+ Can't salvage rule with only entity-based domain= option: txxx.*
+ Can't salvage rule with only entity-based domain= option: mazpic.*
+ Can't salvage rule with only entity-based domain= option: picrok.*
+ Can't salvage rule with only entity-based domain= option: imgviu.*
+ Can't salvage rule with only entity-based domain= option: outletpic.*
+ Can't salvage rule with only entity-based domain= option: dewimg.*
+ Can't salvage rule with only entity-based domain= option: imgtown.*
+ Can't salvage rule with only entity-based domain= option: pouvideo.*|povvideo.*|povvldeo.*|povw1deo.*|povwideo.*|powv1deo.*|powvibeo.*|powvideo.*|powvldeo.*
+ Can't salvage rule with only entity-based domain= option: btdb.*
+ regexFilter is not RE2-compatible: ^https?:\/\/(?:[a-z]{2}\.)?[0-9a-z]{7,16}\.com\/[a-z](?=[a-z]{0,25}[0-9A-Z])[0-9a-zA-Z]{3,26}\/(?:[1-6]\d{4}|[3-9]\d{3})\??(?:_=\d+|v=\d)?$
+ regexFilter is not RE2-compatible: ^https?:\/\/(?:[a-z]{2}\.)?[0-9a-z]{7,16}\.website\/[a-z](?=[a-z]{0,25}[0-9A-Z])[0-9a-zA-Z]{3,26}\/(?:[1-6]\d{4}|[3-9]\d{3})\??(?:_=\d+|v=\d)?$
+ Can't salvage rule with only entity-based domain= option: xtits.*
+ Can't salvage rule with only entity-based domain= option: animesa.*
+ regexFilter is not RE2-compatible: ^https?:\/\/[a-z]{7,16}\.com?\/(?=[+\/0-9a-zA-Z]*\+)(?=[+\/a-zA-Z]*\d)(?=[+\/0-9a-z]*[A-Z])[+\/0-9a-zA-Z]{400,}$
+ regexFilter is not RE2-compatible: ^https?:\/\/[a-z]{7,16}\.org\/(?=[+\/0-9a-zA-Z]*\+)(?=[+\/a-zA-Z]*\d)(?=[+\/0-9a-z]*[A-Z])[+\/0-9a-zA-Z]{400,}$
+ regexFilter is not RE2-compatible: ^https:\/\/[a-z]{7}\.com\/sub\/(?=[a-z]{0,9}[0-9A-Z])[0-9A-Za-z]{10}$
+ Can't salvage rule with only entity-based domain= option: hqq.*
+ Can't salvage rule with only entity-based domain= option: bloomberg.*
+ Can't salvage rule with only entity-based domain= option: my1ink.*|myl1nk.*|myli3k.*|mylink.*
+ Can't salvage rule with only entity-based domain= option: my1ink.*|myl1nk.*|myli3k.*|mylink.*
+ Can't salvage rule with only entity-based domain= option: hqq.*
+ Can't salvage rule with only entity-based domain= option: einthusan.*
+ Can't salvage rule with only entity-based domain= option: gentside.*|ohmymag.*
+ Can't salvage rule with only entity-based domain= option: gentside.*|ohmymag.*
+ Can't salvage rule with only entity-based domain= option: pasty.*
+ Can't salvage rule with only entity-based domain= option: pasty.*
+ Can't salvage rule with only entity-based domain= option: wstream.*
+ Can't salvage rule with only entity-based domain= option: viafree.*
+ Can't salvage rule with only entity-based domain= option: hotfrog.*
+ Can't salvage rule with only entity-based domain= option: goodstream.*
+ Can't salvage rule with only entity-based domain= option: now.*
+ Can't salvage rule with only entity-based domain= option: bloomberg.*
+ Can't salvage rule with only entity-based domain= option: bloomberg.*
+ Can't salvage rule with only entity-based domain= option: bloomberg.*
+ Can't salvage rule with only entity-based domain= option: allestoringen.*|downdetector.*|xn--allestrungen-9ib.*
+ Can't salvage rule with only entity-based domain= option: allestoringen.*|downdetector.*|xn--allestrungen-9ib.*
+ Can't salvage rule with only entity-based domain= option: allestoringen.*|downdetector.*|xn--allestrungen-9ib.*
+ Can't salvage rule with only entity-based domain= option: tube8.*
+ Can't salvage rule with only entity-based domain= option: audible.*
+ Can't salvage rule with only entity-based domain= option: savethechildren.*
+ Can't salvage rule with only entity-based domain= option: discoveryplus.*
+ Can't salvage rule with only entity-based domain= option: viafree.*
+ Can't salvage rule with only entity-based domain= option: streamingcommunity.*
+ Can't salvage rule with only entity-based domain= option: streamingcommunity.*
+ Can't salvage rule with only entity-based domain= option: filepress.*
+ Can't salvage rule with only entity-based domain= option: bloomberg.*
+ Can't salvage rule with only entity-based domain= option: soap2day.*
+ Can't salvage rule with only entity-based domain= option: soap2day.*
+ Can't salvage rule with only entity-based domain= option: pussyspace.*
+ Can't salvage rule with only entity-based domain= option: pussyspace.*
+ Can't salvage rule with only entity-based domain= option: pussyspace.*
+ Can't salvage rule with only entity-based domain= option: pussyspace.*
+ Can't salvage rule with only entity-based domain= option: pussyspace.*
+ Can't salvage rule with only entity-based domain= option: pussyspace.*
+ Can't salvage rule with only entity-based domain= option: slreamplay.*
+ Can't salvage rule with only entity-based domain= option: pouvideo.*|povvideo.*|povw1deo.*|povwideo.*|powv1deo.*|powvibeo.*|powvideo.*|powvldeo.*
+ Unsupported regex-based removeParam: /utm_source|utm_campaign|utm_content/
+ Unsupported regex-based removeParam: /utm_source|utm_campaign|utm_content/
+ Unsupported regex-based removeParam: /utm_source|utm_campaign|utm_content|utm_term|wr/
+ Unpatchable redirect filter: abp-resource:blank-mp4
+ Unpatchable redirect filter: abp-resource:blank-mp4
+ Unsupported regex-based removeParam: /^\/_ui\/desktop\/common\/js\/uiAnalytics\//
+ Can't salvage rule with only entity-based domain= option: 1movies.*
+ Can't salvage rule with only entity-based domain= option: 1movies.*
+ Unsupported regex-based removeParam: /^ad/
+ Unsupported regex-based removeParam: /^ad/
+ Can't salvage rule with only entity-based domain= option: discoveryplus.*
+ Unsupported regex-based removeParam: /^(cookie|ga_|u_)/
+ Unsupported regex-based removeParam: /^((?!SMIL|formats).)*$/
+ Unsupported regex-based removeParam: /^((?!formats|profile).)*$/
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Can't salvage rule with only entity-based domain= option: isohunt.*|isohunters.*|isohunthydra.*|isohunting.*|isohunts.*|isohuntx.*|isohuntz.*|myisohunt.*
+ Can't salvage rule with only entity-based domain= option: torrentproject2.*
+ Unsupported regex-based removeParam: /^(?:correlator|f[cr-w]|p[e-sv]|[abdeg-or-x])/
+ Unsupported regex-based removeParam: /^(?:correlator|f[cr-w]|p[e-sv]|u_|ga_|url|dt|adk)/
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Can't salvage rule with only entity-based domain= option: the-voice-of-germany.*
+ Can't salvage rule with only entity-based domain= option: discoveryplus.*
+ Can't salvage rule with only entity-based domain= option: pobre.*
+ Unsupported modifier exception
+ Can't salvage rule with only entity-based domain= option: bigkickass.*|kat.*|kat2.*|katbay.*|katfreak.*|kathydra.*|katkickass.*|katkickass.*|kattracker.*|kick4ss.*|kickass-usa.*|kickass.*|kickass2.*|kickassaustralia.*|kickassbay.*|kickassdb.*|kickassfull.*|kickassgo.*|kickasshydra.*|kickassindia.*|kickasskat.*|kickassminds.*|kickassmovies.*|kickasspk.*|kickasst.*|kickasstorrents2.*|kickasstracker.*|kickasstrusty.*|kickassuk.*|kickassunlocked.*|kickassz.*|kkat.*|kkickass.*|thekat.*|thekickass.*|topkickass.*|torrentkat.*|torrentskickass.*
+ Can't salvage rule with only entity-based domain= option: isohunt.*|isohunters.*|isohunthydra.*|isohunting.*|isohunts.*|isohuntx.*|isohuntz.*|myisohunt.*
+ Can't salvage rule with only entity-based domain= option: torrentproject2.*
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported regex-based removeParam: /^(?!offer_id=).*/
+ Unsupported modifier exception
+ Can't salvage rule with only entity-based domain= option: empire-stream.*|empire-streaming.*
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Can't salvage rule with only entity-based domain= option: empire-stream.*|empire-streaming.*
+ Unsupported modifier exception
+ regexFilter is not RE2-compatible: ^https?:\/\/(?:[a-z]{2}\.)?[0-9a-z]{5,16}\.[a-z]{3,7}\/[a-z](?=[a-z]{0,25}[0-9A-Z])[0-9a-zA-Z]{3,26}\/\d{4,5}(?:\?[_v]=\d+)?$
+CSS-generic: 15682 plain CSS selectors
+CSS-generic-high: 553 plain CSS selectors
+CSS-specific: 9630 distinct filters
+ Combined into 9055 distinct hostnames
+ Combined into 491 distinct entities
+CSS-declarative: 421 distinct filters
+ Combined into 622 distinct hostnames
+ Combined into 51 distinct entities
+Procedural-related distinct filters: 866 distinct combined selectors
+ Combined into 1381 distinct hostnames
+ Combined into 201 distinct entities
+============================
+Listset for 'alb-0':
+ Fetching remote https://raw.githubusercontent.com/AnXh3L0/blocklist/master/albanian-easylist-addition/Albania.txt
+Input filter count: 34
+ Accepted filter count: 31
+ Rejected filter count: 0
+Output rule count: 28
+ Plain good: 25
+
+ Maybe good (regexes): 0
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 3
+ Can't salvage rule with only entity-based domain= option: filma24.*
+ Can't salvage rule with only entity-based domain= option: www.filma24.*
+ Can't salvage rule with only entity-based domain= option: filma24.*
+CSS-generic: 6 plain CSS selectors
+CSS-specific: 239 distinct filters
+ Combined into 104 distinct hostnames
+ Combined into 1 distinct entities
+CSS-declarative: 3 distinct filters
+ Combined into 2 distinct hostnames
+ Combined into 1 distinct entities
+Procedural-related distinct filters: 4 distinct combined selectors
+ Combined into 4 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'bgr-0':
+ Fetching remote https://stanev.org/abp/adblock_bg.txt
+Input filter count: 661
+ Accepted filter count: 661
+ Rejected filter count: 0
+Output rule count: 650
+ Plain good: 650
+
+ Maybe good (regexes): 0
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+CSS-generic: 4 plain CSS selectors
+CSS-specific: 350 distinct filters
+ Combined into 175 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'chn-0':
+ Fetching remote https://filters.adtidy.org/extension/ublock/filters/224.txt
+Input filter count: 15280
+ Accepted filter count: 15215
+ Rejected filter count: 1
+Output rule count: 6478
+ Pruning requestDomains: from 6276 to 6268
+ Pruning requestDomains: from 520 to 518
+ Plain good: 6413
+
+ Maybe good (regexes): 11
+ redirect=: 41
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 8
+ Unsupported: 5
+ regexFilter is not RE2-compatible: ^(?!.*(sharecast.ws|bunnycdn.ru|bootstrapcdn.com|cdn.ampproject.org|cloudflare.com|cdn.staticfile.org|disqus.com|disquscdn.com|dmca.com|ebacdn.com|facebook.net|fastlylb.net|fbcdn.net|fluidplayer.com|fontawesome.com|github.io|google.com|googleapis.com|googletagmanager.com|gstatic.com|jquery.com|jsdelivr.net|jwpcdn.com|jwplatform.com|polyfill.io|recaptcha.net|shrink.pe|twitter.com|ulogin.ru|unpkg.com|userapi.com|vidazoo.com|vk.com|yandex.|yastatic.net|ytimg.com|zencdn.net|player|youtube.com|cackle.me|googleoptimize.com|vuukle.com|chatango.com|twimg.com|google-analytics.com|hcaptcha.com|raincaptcha.com|media-imdb.com|blogger.com|hwcdn.net|instagram.com|wp.com|imgsmail.ru)).*$
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Invalid network filter in chn-0: @@||ad.alimama.com^$genericblock
+ Invalid network filter in chn-0: @@||cmechina.net^$genericblock
+CSS-generic: 754 plain CSS selectors
+CSS-generic-high: 403 plain CSS selectors
+CSS-specific: 6507 distinct filters
+ Combined into 2795 distinct hostnames
+ Combined into 1 distinct entities
+CSS-declarative: 77 distinct filters
+ Combined into 70 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 92 distinct combined selectors
+ Combined into 65 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'cze-0':
+ Fetching remote https://raw.githubusercontent.com/tomasko126/easylistczechandslovak/master/filters.txt
+ Fetching remote https://raw.githubusercontent.com/tomasko126/easylistczechandslovak/master/filters_ublock.txt
+Input filter count: 228
+ Accepted filter count: 228
+ Rejected filter count: 0
+Output rule count: 120
+ Plain good: 115
+
+ Maybe good (regexes): 0
+ redirect=: 4
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 1
+ Unsupported: 0
+
+CSS-generic: 36 plain CSS selectors
+CSS-generic-high: 4 plain CSS selectors
+CSS-specific: 231 distinct filters
+ Combined into 167 distinct hostnames
+ Combined into 0 distinct entities
+CSS-declarative: 8 distinct filters
+ Combined into 11 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 7 distinct combined selectors
+ Combined into 7 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'deu-0':
+ Fetching remote https://easylist.to/easylistgermany/easylistgermany.txt
+Input filter count: 2340
+ Accepted filter count: 2340
+ Rejected filter count: 0
+Output rule count: 1783
+ Plain good: 1777
+
+ Maybe good (regexes): 4
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 2
+ Unpatchable redirect filter: abp-resource:blank-mp4
+ Invalid network filter in deu-0: @@||gofeminin.de^$genericblock
+CSS-generic: 356 plain CSS selectors
+CSS-generic-high: 34 plain CSS selectors
+CSS-specific: 2398 distinct filters
+ Combined into 1772 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 84 distinct combined selectors
+ Combined into 60 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'fin-0':
+ Fetching remote https://raw.githubusercontent.com/finnish-easylist-addition/finnish-easylist-addition/gh-pages/Finland_adb.txt
+ Fetching remote https://raw.githubusercontent.com/finnish-easylist-addition/finnish-easylist-addition/gh-pages/Finland_adb_uBO_extras.txt
+Input filter count: 177
+ Accepted filter count: 177
+ Rejected filter count: 0
+Output rule count: 157
+ Plain good: 149
+
+ Maybe good (regexes): 3
+ redirect=: 4
+ removeparams= (accepted/discarded): 1/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+CSS-generic: 53 plain CSS selectors
+CSS-generic-high: 14 plain CSS selectors
+CSS-specific: 1019 distinct filters
+ Combined into 556 distinct hostnames
+ Combined into 0 distinct entities
+CSS-declarative: 24 distinct filters
+ Combined into 16 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 149 distinct combined selectors
+ Combined into 114 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'fra-0':
+ Fetching remote https://filters.adtidy.org/extension/ublock/filters/16.txt
+Input filter count: 18886
+ Accepted filter count: 18813
+ Rejected filter count: 58
+Output rule count: 6567
+ Pruning requestDomains: from 7820 to 7809
+ Plain good: 6514
+ Salvaged rule by ignoring 2 entity-based domain= option: gentside.*|ohmymag.*|maxisciences.com
+ Salvaged rule by ignoring 2 entity-based domain= option: gentside.*|ohmymag.*|maxisciences.com
+ Maybe good (regexes): 7
+ redirect=: 32
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 5
+ Unsupported: 9
+ regexFilter is not RE2-compatible: ^https?:\/\/vitamiiin\.com\/(?!wp-content|uploads|plugins|themes)(.*)
+ regexFilter is not RE2-compatible: ^(?!.*(sharecast.ws|bunnycdn.ru|bootstrapcdn.com|cdn.ampproject.org|cloudflare.com|cdn.staticfile.org|disqus.com|disquscdn.com|dmca.com|ebacdn.com|facebook.net|fastlylb.net|fbcdn.net|fluidplayer.com|fontawesome.com|github.io|google.com|googleapis.com|googletagmanager.com|gstatic.com|jquery.com|jsdelivr.net|jwpcdn.com|jwplatform.com|polyfill.io|recaptcha.net|shrink.pe|twitter.com|ulogin.ru|unpkg.com|userapi.com|vidazoo.com|vk.com|yandex.|yastatic.net|ytimg.com|zencdn.net|player|youtube.com|cackle.me|googleoptimize.com|vuukle.com|chatango.com|twimg.com|google-analytics.com|hcaptcha.com|raincaptcha.com|media-imdb.com|blogger.com|hwcdn.net|instagram.com|wp.com|imgsmail.ru)).*$
+ Can't salvage rule with only entity-based domain= option: downdetector.*
+ Can't salvage rule with only entity-based domain= option: vidembed.*
+ Can't salvage rule with only entity-based domain= option: vidembed.*
+ Can't salvage rule with only entity-based domain= option: fmovies.*
+ Can't salvage rule with only entity-based domain= option: fmovies.*
+ Unsupported modifier exception
+ Unsupported modifier exception
+CSS-generic: 2419 plain CSS selectors
+CSS-generic-high: 522 plain CSS selectors
+CSS-specific: 2218 distinct filters
+ Combined into 1693 distinct hostnames
+ Combined into 3 distinct entities
+CSS-declarative: 42 distinct filters
+ Combined into 43 distinct hostnames
+ Combined into 1 distinct entities
+Procedural-related distinct filters: 97 distinct combined selectors
+ Combined into 117 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'grc-0':
+ Fetching remote https://www.void.gr/kargig/void-gr-filters.txt
+Input filter count: 451
+ Accepted filter count: 451
+ Rejected filter count: 0
+Output rule count: 416
+ Plain good: 416
+
+ Maybe good (regexes): 0
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+CSS-generic: 3 plain CSS selectors
+CSS-generic-high: 5 plain CSS selectors
+CSS-specific: 533 distinct filters
+ Combined into 162 distinct hostnames
+ Combined into 0 distinct entities
+CSS-declarative: 5 distinct filters
+ Combined into 5 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 2 distinct combined selectors
+ Combined into 2 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'hrv-0':
+ Fetching remote https://raw.githubusercontent.com/DandelionSprout/adfilt/master/SerboCroatianList.txt
+Input filter count: 53
+ Accepted filter count: 53
+ Rejected filter count: 0
+Output rule count: 44
+ Plain good: 44
+
+ Maybe good (regexes): 0
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+CSS-generic: 11 plain CSS selectors
+CSS-specific: 249 distinct filters
+ Combined into 149 distinct hostnames
+ Combined into 0 distinct entities
+CSS-declarative: 1 distinct filters
+ Combined into 1 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 2 distinct combined selectors
+ Combined into 2 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'hun-0':
+ Fetching remote https://raw.githubusercontent.com/hufilter/hufilter/master/hufilter-ublock.txt
+Input filter count: 325
+ Accepted filter count: 325
+ Rejected filter count: 0
+Output rule count: 200
+ Plain good: 197
+
+ Maybe good (regexes): 1
+ redirect=: 2
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+CSS-generic: 60 plain CSS selectors
+CSS-generic-high: 15 plain CSS selectors
+CSS-specific: 1020 distinct filters
+ Combined into 469 distinct hostnames
+ Combined into 0 distinct entities
+CSS-declarative: 23 distinct filters
+ Combined into 21 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 21 distinct combined selectors
+ Combined into 22 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'idn-0':
+ Fetching remote https://raw.githubusercontent.com/ABPindo/indonesianadblockrules/master/subscriptions/abpindo.txt
+Input filter count: 4286
+ Accepted filter count: 4283
+ Rejected filter count: 0
+Output rule count: 3017
+ Plain good: 3017
+
+ Maybe good (regexes): 0
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+CSS-generic: 239 plain CSS selectors
+CSS-generic-high: 3609 plain CSS selectors
+CSS-specific: 847 distinct filters
+ Combined into 690 distinct hostnames
+ Combined into 12 distinct entities
+CSS-declarative: 2 distinct filters
+ Combined into 2 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 1 distinct combined selectors
+ Combined into 1 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'ind-0':
+ Fetching remote https://easylist-downloads.adblockplus.org/indianlist.txt
+Input filter count: 4882
+ Accepted filter count: 4882
+ Rejected filter count: 0
+Output rule count: 4836
+ Plain good: 4836
+
+ Maybe good (regexes): 0
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+CSS-specific: 3728 distinct filters
+ Combined into 4088 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 93 distinct combined selectors
+ Combined into 89 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'irn-0':
+ Fetching remote https://raw.githubusercontent.com/MasterKia/PersianBlocker/main/PersianBlocker.txt
+Input filter count: 1103
+ Accepted filter count: 1103
+ Rejected filter count: 0
+Output rule count: 605
+ Pruning requestDomains: from 215 to 210
+ Plain good: 564
+
+ Maybe good (regexes): 0
+ redirect=: 0
+ removeparams= (accepted/discarded): 12/26
+ modifyHeaders=: 1
+ Unsupported: 28
+ FilterStrictParty: Strict partyness strict3p not supported
+ FilterStrictParty: Strict partyness strict3p not supported
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^promo/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /promo/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /promo/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^itm_/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^utm_|tatoken/
+CSS-generic: 17 plain CSS selectors
+CSS-specific: 742 distinct filters
+ Combined into 391 distinct hostnames
+ Combined into 0 distinct entities
+CSS-declarative: 226 distinct filters
+ Combined into 53 distinct hostnames
+ Combined into 1 distinct entities
+Procedural-related distinct filters: 163 distinct combined selectors
+ Combined into 119 distinct hostnames
+ Combined into 1 distinct entities
+============================
+Listset for 'isl-0':
+ Fetching remote https://adblock.gardar.net/is.abp.txt
+Input filter count: 68
+ Accepted filter count: 68
+ Rejected filter count: 0
+Output rule count: 68
+ Plain good: 68
+
+ Maybe good (regexes): 0
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+CSS-generic-high: 1 plain CSS selectors
+CSS-specific: 121 distinct filters
+ Combined into 40 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'isr-0':
+ Fetching remote https://raw.githubusercontent.com/easylist/EasyListHebrew/master/EasyListHebrew.txt
+ Fetching remote https://raw.githubusercontent.com/easylist/EasyListHebrew/master/EasyListHebrew-uBO.txt
+Input filter count: 703
+ Accepted filter count: 702
+ Rejected filter count: 1
+Output rule count: 274
+ Plain good: 249
+
+ Maybe good (regexes): 4
+ redirect=: 10
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 1
+ Unsupported: 10
+ regexFilter is not RE2-compatible: haaretz\.co\.il\/(?!.*\.(js)($|\?)).*
+ regexFilter is not RE2-compatible: ^(?![a-zA-Z0-9\-]+:\/+(api-mail|dal|dcx|isc|iscwne|6days|animals|astrology|b|buzzit|calendar|cars|celebs|e|elections|euro|fashion|finance|food|forums|fun|healthy|home|judaism|kids|mag|maps|milon|movies|mundial|nadlan|news|nick|olympics|search|sports|tags|tech|translate|travel|tv-guide|tv|usaelections|viva|vod|weather|www)\.walla\.co\.il\.?(\/|:|$))^[a-zA-Z0-9\-]+:\/+([a-zA-Z0-9\-]+\.)+walla\.co\.il\.?(\/|:|$)
+ regexFilter is not RE2-compatible: ^(?![a-zA-Z0-9\-]+:\/+www\.sheee\.co\.il\.?(\/|:|$))^[a-zA-Z0-9\-]+:\/+([a-zA-Z0-9\-]+\.)+sheee\.co\.il\.?(\/|:|$)
+ regexFilter is not RE2-compatible: ^(?![a-zA-Z0-9\-]+\:\/+([^\/\:\.]+\.)*((gov|idf|muni|ac|k12|net)\.il|(google|blogspot|phpbb|minifier|enable|nagich|nagishplus|nagishly|livedns|user-a|emap|23tv|glz|icast|ecast|mediacast|live1|siz|gif|meduzot|telesport|teleline|livegames|2net|weather2day|mekorotapp|e-vrit|fav|slash|rabbi|kaplanopensource|systematics|israelcoronamap|icdn|wcdn|wallanews|wallashops|wallatours|wallaart|wallaprint|hamal|sheee|globes|madlan|yad2|mipo|b144|bezeq|yes|fxp|nick|d|maariv|iol|dominos|magazineitsuv|doctors|mishpati|lawguide|arcdb|zebarur|wlcdn|linicom|erate)\.co\.il|(kan|kankids|makan|iba|oref|iaf|parks|imj|nli|bh|isoc|hebrew-academy|kineret|teva|zavit|ip6|profile)\.org\.il)\.?([\/\:]|$))^[a-zA-Z0-9\-]+\:\/+[^\/\:]+\.il\.?([\/\:]|$)
+ regexFilter is not RE2-compatible: ^(?![a-zA-Z0-9\-]+\:\/+([^\/\:\.]+\.)*(facebook|fbcdn|threads|dmcdn|slideshare|cloudfront|cloudflare|fastly|fastlylb|gammacdn|edgecastcdn|footprint|incapdns|cloudapp|brightcove|jsdelivr|akamai|akamaihd|akamaized|akamaiedge|akahost|ctedgecdn|2mdn|edgesuite|azurewebsites|azureedge|windows|hwcdn|zencdn|llnwd|llnwi|boltdns|msecnd|bitsngo|nocookie|datatables|docdroid|iframely|algolia|anvato|maphub|dwcdn|typekit|edgefonts|recaptcha|ampproject|viafoura|yastatic|yahoodns|behance|darksky|google|twitchcdn|ttvnw|jtvnw|dailyuploads|deviantart|8ch|b-cdn|vodgc|hlsplayer|streamlock|web-view|streamgates|cdnwz|playgorithm|vidiom|radwarecloud|f-static|chartbeat|doubleclick|advsnx|sc-static|artipbox)\.net\.?([\/\:]|$))^[a-zA-Z0-9\-]+\:\/+[^\/\:]+\.net\.?([\/\:]|$)
+ regexFilter is not RE2-compatible: ^(?![a-zA-Z0-9\-]+\:\/+([^\/\:\.]+\.)*(flowplayer|amara|h5p|d3js|ampproject|promisejs|backbonejs|angularjs|dojotoolkit|telegram|telegram-cdn|openstreetmap|wmflabs|wikimapia|wikimedia|wikipedia|w3|schema|archive|mozilla|documentcloud|w|mathjax|userway|pannellum|tmdb|muses|openweathermap|uploadimage|postimages|postimage|imgsafe|4chan|4channel|4cdn|olympic|pbs|pbskids|npr|ntp|gnu|creativecommons|eff|icann|iana|ietf|wikileaks|ourworldindata|cookielaw|google|cdn77|browser-update|consensu|wp-accessibility|covid19maps|coronaisrael)\.org\.?([\/\:]|$))^[a-zA-Z0-9\-]+\:\/+[^\/\:]+\.org\.?([\/\:]|$)
+ regexFilter is not RE2-compatible: ^(?![a-zA-Z0-9\-]+\:\/+([^\/\:\.]+\.)*(google|gstatic|googleapis|jquery|youtube|youtubekids|youtube-nocookie|ytimg|facebook|fbsbx|twitter|twimg|x|instagram|cdninstagram|pinterest|pinimg|tumblr|giphy|vimeo|vimeocdn|dailymotion|flickr|staticflickr|soundcloud|sndcdn|scribd|scribdassets|tiktok|tiktokcdn|ttwstatic|muscdn|ibytedtos|sharethis|addthis|addthisedge|addthiscdn|reddit|redditmedia|redditstatic|redditgifts|linkedin|licdn|fontawesome|image-maps|cloudflare|bootstrapcdn|unpkg|cdnjs|stackpathdns|stackpathcdn|maxcdn|maxcdn-edge|netdna-ssl|netdna-cdn|kxcdn|ssl-cdn|muicss|tinymce|createjs|github|githubusercontent|aspnetcdn|azure|amazonaws|awswaf|elasticbeanstalk|rackcdn|netlify|jwplayer|jwpcdn|jwpltx|jwpsrv|jwplatform|brightcove|brightcovecdn|flowplayer|foliovision|streamable|kaltura|streamtheworld|mixcloud|bandcamp|bcbits|spotify|omnystudio|omnycontent|iheart|spreaker|podbean|buzzsprout|simplecast|podtail|apple|nobexpartners|vocaroo|embedly|iframely|snapwidget|thinglink|infogram|highcharts|airtable|printfriendly|algolianet|gravatar|svgur|svgshare|imgur|imgflip|gifer|gfycat|tenor|disqus|disquscdn|disqusservice|oneall|oneallcdn|tapatalk|tapatalk-cdn|mapbox|maptiler|mapquest|arcgis|arcgisonline|esri|here|ted|tedcdn|kickstarter|riddle|strawpoll|9gag|9cache|unsplash|freepik|imageshack|tinypic|photobox|photobucket|imgbox|imagebam|gifyu|makeagif|reactiongifs|gifbin|gif-finder|pastebin|rawgit|rawgithub|knockoutjs|gridstackjs|ravenjs|liveleak|metacafe|mcstatic|ign|ignimgs|365scores|buzzfeed|digg|stumbleupon|mix|getpocket|blogspot|wordpress|wp|videopress|wptavern|livejournal|withgoogle|googlegroups|googleusercontent|googlevideo|ggpht|noembed|appspot|firebaseio|firebaseapp|libring|hcaptcha|paypal|paypalobjects|amazon|media-amazon|media-imdb|ebay|microsoft|live|bing|msn|yahoo|yimg|yahooapis|duckduckgo|yandex|webflow|rtlcss|dropbox|dropboxusercontent|dropboxstatic|dropbox-dns|timeanddate|momentjs|weather|accuweather|theweathernetwork|windy|sat24|rainviewer|uvlens|statcounter|adobe|onesignal|livefyre|pushwoosh|tinypass|addtoany|addthisevent|addevent|addtocalendar|sumo|sumome|chatango|bitly|tinyurl|ipcamlive|steamstatic|playstation|discord|discordapp|mixer|odysee|rumble|bitchute|parler|gab|slideplayer|kym-cdn|gyazo|icons8|iconfinder|iconarchive|iconscout|flaticon|kindpng|pngitem|prntscr|deviantart|firefoxusercontent|box|feedly|feedburner|phpbb|vk|userapi|whatsapp|vroptimal-3dx-assets|bbc|cnn|go|nytimes|nyt|today|gofundme|fifa|uefa|nba|turner|xkcd|mtvnservices|cc|tmz|bugsnag|zoro|hebcal|fontsproject|kayma|kayma-dashboards|kayma-insights|kampyle|vicomi|openweb|cincopa|avplayer|vidnt|peer5|h-cdn|bynetcdn|cdnwiz|best-tv|viewbix|streamrail|smv-cdn|cloudvideoplatform|dxmcdn|dxmdp|waze|hunchbots|jeeng|cloudinary|sphereup|poloriz|applicaster|cloudwm|cloudwm-waf|negishim|accessibe|accessibeapp|acsbap|vollotech|mk-sense|allyable|shortaudition|spaceil|clear-map|segmanta|opinionstage|playbuzz|apester|qmerce|outbrain|taboola|taboolasyndication|googleoptimize|google-analytics|googletagservices|googletagmanager|googleadservices|googlesyndication|cloudflareinsights|chartbeat|scorecardresearch|serving-sys|exposebox|dynamicyield|coralogix|browsiprod|ip-api|petametrics|cooladata|hotjar|pusher|carto|fortvision|fortcdn|getsentry|trackjs|gamezhero|nick|nickjr|teennick|travelriskmap|sinclairstoryline|fresnobee|nbcchicago|magazina-il|raxcdn|pagewiz|pas-rahav|aniview|adnxs|sekindo)\.com\.?([\/\:]|$))^[a-zA-Z0-9\-]+\:\/+[^\/\:]+\.com\.?([\/\:]|$)
+ regexFilter is not RE2-compatible: ^(?![a-zA-Z0-9\-]+\:\/+([^\/\:]+\.(il|com|net|org|gov|mil|edu|int|(ac|gov|nhs)\.uk|(google)|(google)\.(com?\.)?[a-zA-Z]{2,3})|[0-9\.]+|([^\/\:\.]+\.)*(omny\.fm|anchor\.fm|simplecast\.fm|castbox\.fm|github\.io|socket\.io|codepen\.io|polyfill\.io|embed\.ly|iframe\.ly|infogr\.am|t\.me|flourish\.studio|flourish\.rocks|uri\.sh|po\.st|plyr\.io|piano\.io|tg\.dev|periscope\.tv|pscp\.tv|vine\.co|popkey\.co|tenor\.co|redd\.it|ibb\.co|vgy\.me|postimg\.cc|imageshack\.us|prnt\.sc|imagesup\.co|weserv\.nl|telesco\.pe|powr\.io|pippa\.io|last\.fm|scdn\.co|adobe\.io|viafoura\.co|lmao\.ninja|disease\.sh|web\.app|twitch\.tv|rmbl\.ws|stories\.sc|vid\.me|spot\.im|spots\.im|inthegame\.io|cybercdn\.live|h-cdn\.co|minute\.ly|vttp\.co|tldw\.me|feeder\.co|del\.icio\.us|telegram\.me|yandex\.ru|dailymail\.co\.uk|dailystar\.co\.uk|bbc\.net\.uk|bbc\.co\.uk|cnn\.io|bit\.ly|goo\.gl|g\.co|youtu\.be|t\.co|fb\.me|m\.me|instagr\.am|wa\.me|amzn\.to|wp\.me|git\.io|docdro\.id|arcg\.is|ow\.ly|disq\.us|discord\.gg|tiny\.cc|ex\.co|jogo\.studio|nagishly\.co|user1st\.info|knesset\.tv|knesset\.live|walla\.cloud|103\.fm|nickjr\.tv|amagi\.tv|logidea\.info|zoomanalytics\.co|firstimpression\.io|rtk\.io|trb\.tv|ren\.tv|atom-data\.io|sentry\.io|outbid\.io))\.?([\/\:]|$))^[^\/\:\.]+\:\/+[^\/\:\.]
+ regexFilter is not RE2-compatible: ^(?![a-zA-Z0-9\-]+:\/+www\.(walla(news|shops|tours|art|print)|hamal|sheee)\.co\.il\.?(\/|:|$))^[a-zA-Z0-9\-]+:\/+([a-zA-Z0-9\-]+\.)+(walla(news|shops|tours|art|print)|hamal|sheee)\.co\.il\.?(\/|:|$)
+ regexFilter is not RE2-compatible: ^(?![a-zA-Z0-9\-]+:\/+(www\.(walla(news|shops|tours|art|print)|hamal)|(api-mail|dal|dcx|isc|iscwne|www)\.walla)\.co\.il\.?(\/|:|$))^[a-zA-Z0-9\-]+:\/+([a-zA-Z0-9\-]+\.)+(walla(news|shops|tours|art|print)?|hamal)\.co\.il\.?(\/|:|$)
+CSS-generic: 5 plain CSS selectors
+CSS-specific: 441 distinct filters
+ Combined into 320 distinct hostnames
+ Combined into 1 distinct entities
+CSS-declarative: 5 distinct filters
+ Combined into 3 distinct hostnames
+ Combined into 1 distinct entities
+Procedural-related distinct filters: 5 distinct combined selectors
+ Combined into 4 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'ita-0':
+ Fetching remote https://easylist-downloads.adblockplus.org/easylistitaly.txt
+Input filter count: 3547
+ Accepted filter count: 3545
+ Rejected filter count: 0
+Output rule count: 3279
+ Plain good: 3275
+
+ Maybe good (regexes): 4
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+CSS-generic: 363 plain CSS selectors
+CSS-generic-high: 53 plain CSS selectors
+CSS-specific: 2980 distinct filters
+ Combined into 3211 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 26 distinct combined selectors
+ Combined into 26 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'jpn-1':
+ Fetching remote https://filters.adtidy.org/extension/ublock/filters/7.txt
+Input filter count: 1891
+ Accepted filter count: 1891
+ Rejected filter count: 0
+Output rule count: 1311
+ Plain good: 1267
+
+ Maybe good (regexes): 16
+ redirect=: 23
+ removeparams= (accepted/discarded): 0/1
+ modifyHeaders=: 0
+ Unsupported: 5
+ regexFilter is not RE2-compatible: \/kyodopress_cms\/wp-content\/(themes\/kyodopress\/img_banner\/(?!bn_newspaper\.gif)|banners).*
+ regexFilter is not RE2-compatible: ^https:\/\/(?!www)[a-z]{3,}\.[a-z]{8,}\.com\/index\.php\?main_page=product_info(&stl=\d)?&(?:cPath|products_id)=
+ regexFilter is not RE2-compatible: ^https?:\/\/(?!www)[a-z]{3,5}\.[0-9a-z]{4,10}\.[a-z]{2,6}\/[a-z]{3,15}\/(?=[a-z]{0,9}[0-9A-Z])[0-9A-z]{10}\.html$
+ regexFilter is not RE2-compatible: ^(?!.*(sharecast.ws|bunnycdn.ru|bootstrapcdn.com|cdn.ampproject.org|cloudflare.com|cdn.staticfile.org|disqus.com|disquscdn.com|dmca.com|ebacdn.com|facebook.net|fastlylb.net|fbcdn.net|fluidplayer.com|fontawesome.com|github.io|google.com|googleapis.com|googletagmanager.com|gstatic.com|jquery.com|jsdelivr.net|jwpcdn.com|jwplatform.com|polyfill.io|recaptcha.net|shrink.pe|twitter.com|ulogin.ru|unpkg.com|userapi.com|vidazoo.com|vk.com|yandex.|yastatic.net|ytimg.com|zencdn.net|player|youtube.com|cackle.me|googleoptimize.com|vuukle.com|chatango.com|twimg.com|google-analytics.com|hcaptcha.com|raincaptcha.com|media-imdb.com|blogger.com|hwcdn.net|instagram.com|wp.com|imgsmail.ru)).*$
+ Unsupported regex-based removeParam: /^(cookie|ga_|u_)/
+CSS-generic: 110 plain CSS selectors
+CSS-generic-high: 10 plain CSS selectors
+CSS-specific: 5991 distinct filters
+ Combined into 4055 distinct hostnames
+ Combined into 7 distinct entities
+CSS-declarative: 174 distinct filters
+ Combined into 151 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 875 distinct combined selectors
+ Combined into 840 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'kor-1':
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filter-uBlockOrigin.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-share/3rd_domains.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-share/1st_domains.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-share/general_elemhide.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-uBO/specific_ELEMHIDE.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-share/general_url.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-uBO/general_url.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-share/specific_URL.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-share/specific_ELEMHIDE.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-share/allowlist.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-share/extended_css_ELEMHIDE.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-share/extended_css_INJECTION.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-uBO/specific_REDIRECT.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-uBO/extended_css_ELEMHIDE.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-uBO/extended_css_INJECTION.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-uBO/scriptlets.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-share/javascript.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-uBO/javascript.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-uBO/antiadblock.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-share/removeparam.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-uBO/allowlist.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-share/specific_CSS.txt
+ Fetching remote https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filters-uBO/specific_CSS.txt
+Input filter count: 1253
+ Accepted filter count: 1247
+ Rejected filter count: 0
+Output rule count: 896
+ Pruning requestDomains: from 297 to 292
+ Plain good: 728
+
+ Maybe good (regexes): 134
+ redirect=: 21
+ removeparams= (accepted/discarded): 1/0
+ modifyHeaders=: 0
+ Unsupported: 12
+ regexFilter is not RE2-compatible: ^https:\/\/nstatic\.dcinside\.com\/dc\/event\/nft_gaejugi\/(?!nftcon)
+ regexFilter is not RE2-compatible: ^https?:\/\/img\.kidkids\.net\/banner\/upimage\/[A-Z]+(_|-)[A-Z0-9]+(_|-)(?!LOGO)
+ regexFilter is not RE2-compatible: ^https:\/\/image\.aladin\.co\.kr\/img\/banner\/flash\/welcome\/nav\/(?!181010)[0-9]+_tab
+ regexFilter is not RE2-compatible: ^https:\/\/static\.wixstatic\.com\/media\/[0-9a-z]{6}_[a-z0-9]{32}~(?!.+doc).+
+ regexFilter is not RE2-compatible: ^https:\/\/thumb\.toomics\.com\/upload\/banner\/(?!main|cut)
+ Can't salvage rule with only entity-based domain= option: xn--h10b90b998c.*
+ Can't salvage rule with only entity-based domain= option: newtoki.*
+ regexFilter is not RE2-compatible: ^https:\/\/(www\.)?filetender\.com\/images\/(?!logo).+\.(jpg|png)$
+ regexFilter is not RE2-compatible: ^https:\/\/(www\.)?ruru\.tv\/uploads\/[0-9]+\/((?!16682220461360)[0-9]+)
+ regexFilter is not RE2-compatible: ^https:\/\/today-sports\.io\/img\/.*(?=(evolution|banner|\.gif))
+ regexFilter is not RE2-compatible: ^https:\/\/s[0-9]+\.sonagitv\.[a-z]+\/sonagi[0-9]*_media\/sites\/[0-9]+\/[0-9]+\/[0-9]+\/(?!(SSNGINDSALC|cropped|sonagitvlogo))[a-z0-9-]+\., Can't salvage rule with only entity-based domain= option: sonagitv.*
+ Unpatchable redirect filter: google-ima3.js
+CSS-generic: 12 plain CSS selectors
+CSS-generic-high: 67 plain CSS selectors
+CSS-specific: 1194 distinct filters
+ Combined into 1308 distinct hostnames
+ Combined into 2 distinct entities
+CSS-declarative: 170 distinct filters
+ Combined into 153 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 102 distinct combined selectors
+ Combined into 150 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'ltu-0':
+ Fetching remote https://raw.githubusercontent.com/EasyList-Lithuania/easylist_lithuania/master/easylistlithuania.txt
+Input filter count: 568
+ Accepted filter count: 568
+ Rejected filter count: 0
+Output rule count: 523
+ Plain good: 520
+
+ Maybe good (regexes): 1
+ redirect=: 2
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+CSS-generic: 5 plain CSS selectors
+CSS-generic-high: 5 plain CSS selectors
+CSS-specific: 564 distinct filters
+ Combined into 320 distinct hostnames
+ Combined into 0 distinct entities
+CSS-declarative: 7 distinct filters
+ Combined into 7 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 7 distinct combined selectors
+ Combined into 8 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'lva-0':
+ Fetching remote https://raw.githubusercontent.com/Latvian-List/adblock-latvian/master/lists/latvian-list.txt
+Input filter count: 185
+ Accepted filter count: 185
+ Rejected filter count: 0
+Output rule count: 144
+ Plain good: 144
+
+ Maybe good (regexes): 0
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+CSS-generic-high: 2 plain CSS selectors
+CSS-specific: 184 distinct filters
+ Combined into 62 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'mkd-0':
+ Fetching remote https://raw.githubusercontent.com/DeepSpaceHarbor/Macedonian-adBlock-Filters/master/Filters
+Input filter count: 289
+ Accepted filter count: 289
+ Rejected filter count: 0
+Output rule count: 158
+ Plain good: 157
+
+ Maybe good (regexes): 0
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 1
+ Invalid network filter in mkd-0: data:image/jpg;base64,/9j/4gIcSUNDX1BST0ZJTEUAAQEAAAIMbGNtcwIQAABtbnRyUkdCIFhZWiAH3AABABkAAwApADlhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApkZXNjAAAA/AAAAF5jcHJ0AAABXAAAAAt3dHB0AAABaAAAABRia3B0AAABfAAAABRyWFlaAAABkAAAABRnWFlaAAABpAAAABRiWFlaAAABuAAAABRyVFJDAAABzAAAAEBnVFJDAAABzAAAAEBiVFJDAAABzAAAAEBkZXNjAAAAAAAAAANjMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0ZXh0AAAAAEZCAABYWVogAAAAAAAA9tYAAQAAAADTLVhZWiAAAAAAAAADFgAAAzMAAAKkWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPY3VydgAAAAAAAAAaAAAAywHJA2MFkghrC/YQPxVRGzQh8SmQMhg7kkYFUXdd7WtwegWJsZp8rGm/fdPD6TD////gABBKRklGAAEBAABIAEgAAP/bAEMABwcHBwcHDAcHDBEMDAwRFxEREREXHhcXFxcXHiQeHh4eHh4kJCQkJCQkJCsrKysrKzIyMjIyODg4ODg4ODg4OP/bAEMBCQkJDg0OGQ0NGTsoISg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//CABEIAFoC2AMBIgACEQEDEQH/xAAbAAACAwEBAQAAAAAAAAAAAAAEBQACAwYBB//EABkBAQEBAQEBAAAAAAAAAAAAAAABAgMEBf/aAAwDAQACEAMQAAAB5TDDbPbKFXMN/aJeC4hQ0tnVGgZ+ufmeuEUl91F208swzhkoVi1yGV2lyL7gTFZbRcPPLrj74xVfm/siPRnsi/uUh/m0cN4mzpF61ns5K40liqrfyVR48NxUXUHecNcko6xX2yl8c02T+N6ivxl7Sar1KrPZA91iwRtVw3DtaWJLJfYEuB4Uu1LkXwgtffML0roC+k3MLNNMaXXZaQus9AVcM7yjmxOxWbnMwybhPuQvPZmGe64WZeMj+3hlTauNwrDffKY7+A9S/FE2G2mqlrWNz6uOAQ+08BNa+l8tKnnsrL60VNreW8kuZatoZWt5xuQG7TrEk6VlqcR50DI5I3rcedReuhs1UP0A+nN4dePucxLQrLelJeGPTc70q8yZh5NPIIXvn5PaFhLZ3WlCNECyZRK2kiSQkzzCHXNdhnSnrFeGK3CHcY0lZkj6y5R68+Y1KB2USTrmmusxrxsp+iIXzvLUsjNX0UqzQ/BcNHnjPJMVzKTDTqkVqVqw8jkD79Ccqzc0pAd0KROer0SOXLzaVjUiso7UFkcj7aWV2z1hh575wq9mBr1nQW5/3N6P3nczqAuZy3OtEVHQyac5TFbL1IXXN5W9eT30rLeJ50/MdOvNZE5mbxRvTSSFbSE8rmb+C5hmQ+izMm4LrrZCOo5Bhz30My3zclp+9mY2WsSXGl851zz/AFzSWnSW8y0x0v8AVvlRbFMZVbdXxI52gHLXO6K4TJGznivE+hC8TF7g351EctuRPjqcudidFrzOQ4U6YFqDbG/g7K1a953qE5HrkjDjwWtShuWaHpj89JYMpnQhZdzVkn130zYZX5YwYKvFJUF+dax5sg+zB34r5c8tsB+vYlnZVjkr6Lnem9nqQVKxuh8r+ZFka41nm1rSqzaigaMPEDjMNcQ2oYLGV6BZV2hiZXXz9KbCUDBIrD1xK/c0WM8t5Dmk3nC+Queh2APikD6bQNqTmWyH8Zp4VFxtpnLPfLMzz3GrOkTa5KklgQR9Y3C1oEkCF0BcgCSzteUJcOkoYXaV4aXYNNRAF1fm3P2fSE1nNITQ+m4i8ezZd6wmcAVaeCYtkTnaYPpMFQ5vp0yg60TSlo5VAau+Wa+P54jUYNEpi7N+X3DwRLK6IQejJjznoWUmXnQu+eLRvMdeWxsSZz3xgfX8l1y0JO5vJ72fzzrOmONgU3E+kIx1pvp6tRxas2tY5M9fYZZb4GVr+zVJoNc53tsZ742G3nvmucz0gpYLWwsaLCglWYPIxHJlq71hIoWP1OLm2vT5nelbZzenPjKPbxF0yt6uWuZ6xLFAH2+V08KMV/ect7YlCfM9AXNMlv0eEpPe/OtpElbeGVNamNdqAmG1F9cpmKlSQHyNi5038ReSOTdC9Mqc5m5KETlvsM02+aapIVagvY8h9JTlz0hnTCWZTb//xAAtEAACAgECBAYCAgMBAQAAAAABAgADBBESBRATIRQVICIxMjM0JTAjNUFCJP/aAAgBAQABBQLUCdSasZtgWacy4ENhi6s2gmkbtNTPdNGgEOk26zZpBpNgmyaCaTQza07z3CbjNGMO4Tc0G4z3yquyx9NABqcu7pJpNJpNJoJtE2rNqynDe+JwupVy8dsZ97CdUTqLN6zVZ7ZtE7zXSK24cmXSKFPNxFPaOsRoy7Yra8nGhQ6rprPiaGaTSCqxp4e2eGsnhbJ4a2Gq1Zq0YvFXcdDAs28ywENk9xmybYn25PE5mDv6B8QRdNbIn1X7PO2mLQ1zN5Yp6nC4H4WD1eGSm/h9c8dhwZ+GJZk8Otbq8MnV4ZOrwydXhk6vDJ1eGRTw1pW3Dqz5jizzHFmTlYFrdThc38KmvCZ/Ez+JmnCJ/EwVcOul1VlFiOVIIPI953U+8z3ibtZ3Ug68iNrDuDXNzie5oo2jkqliErWBmJLWJFS154a8RkuEKXKFuldmrZK6WFNJt05FgIbJqzQVwKBNJpyTmw1m0zaYDpG+F+eR+V+IARAWjaGDcIo7t3g+v4+G+gdhHOi+kKTFrA5loXjNu/py/wDJi6SptvqcRfcCrCdRp7nIGg9QXp0U1vdMe1KFtyN7WWNbOrY7oTTYL1YWnGybLErrOWParw2CbmMCGBBK6nsLI1Z9C+onv/4U6GE6QDUw/wBFn+r5j55WHvj0JYhxK1uHC6urXi1rUuHhlGwUpTwZNi0Ju8Ovjhh1a4uDXamQle67DRcf13focq315k6TqTu0Uaf0bhN81ZpaN1SFnDJZWwfqAeCC0U1bbKcYS3YahjViJT02yGmpmybRyxMVsmwXYmI3Eba7OVeHk2qcTJ3+XZcXDyN74eRWsGHlGHHyFsOBmmJiXG04OUAUlWHl2Lbi5FUTh+To1NqP4DLhRlPeaTQzSaTSWD+L5p9uT/amyhFOat0ys3rB8yq2DMqRfH6q+aOqc+qyDL/+5LWtl2Uq5gzlRrMunw/ru/QJ5D2lW3DloPVqJvm8zuZtm2UL/kDRBeLLEYHdSHsxbGNdmRWHssumrSquugM26Wtub0VsMDAJLHlxInxDMX4dh0qTW1uZRj492OkHD72i6Y58BcTiI6HExsmvIt/LfVbfRserDzMbItyPx2vi5fV4j+36rf8AWc0+3LaSQoHoLqIbNZ3MWowADnd3m2aTT1XfoactIjbT6Nwm+bzNSZpNs2zSdudFzGAzqs0sK6e7a2HvZa664X1jGN2h7mbub9PKx7FVbOWRV4x7dldGdeqjH0sw8erwhngbpemqDBt1yCMrMpreix7ld6aLnTIYU4q4uTpl2BmGNkzOyFsyupOrOtOpN5huMck8L7yorjo1JW+zINVniLpRda0S+13tyLlscm3HRkoF4auzB/LXjpSKbDZb4i6HQ2PfkbrbbGKFaFurNVmZ3spVaYmTkhsnJvS7K714yjHlv5LP0Ns051PC6ib5ry0m2aehmgQz3LA+so+fjkCJ2heEpGO2b0Z3Os01m3npK7rKuWoENkLE8gDNWhsM6jzVvSPnZNk2TZPZNoj+2LXvhp0itt5Ed7P9XjV9W263Fseza8vpPU2kTG+afy3ZISyux8qy2zGtfJVbkxO1m5MiUK1dxyZXebcmy7K31Lbfdf1Lbb1NtDhaziEvcPccv9jpqUqtNuXb+V/0IZ8zSJgZViWYWTUV4dmyvEvtlmLdSHqeo2UW0iqmy4vh5SLXjZdwsqsqL41y1qjmpandPLslhRTkJeEZlVGK6z2maLGv1YhQOmu/tq9bJy0HPqCGw8tIFm2M4EJJmk09WsXuOVj8kOq2fav6yxdDUY40Zu/C1dkhm5tFtsSNbYwDFYSRPc5TcnIMwVWZZ8Q5Nk11gbafGXzxeRPFZE8TkRrbLAhNcU6S3UubbCikqfmP+gZprzzf1qqPEYdHl6ZVn4cXvjWVL1syxrsbA0KYNeMrZiUa2Gu6sutttArGAgoGJbTiY7DTrU/Sof4QIyTKscTHNkNFrywrXMGxRabFEt0FhYCG2dzy0gWaQuohZmgSbZpz05kzSVfXl0u9olRlo91R7Rhqq/LrrMa2vZ5XlGeVZ88uzZ5dmwcO4hr5bmTy3NnluZPLc2eW5s8tzIeHZ8PC+ITyriE8p4hPKc6DhOfPKc+eVZ88qz4vCs2eW5s8tzY3C84zyrPnlWfBwy9ZkWrYfRbebUrzbKq/H1h6skeEOb1a78uy9GuL1U39GDPCTx42rxFUdeI1hsjL69VWQaq/HLZEymaxckCdb28smrrU4t3Qse6vSyzqtj66uWK3MzWTSBYFnYQ2TUmBdYEmnI9p8+j5gWaSpvdzYahToXGoU6GH4HzGTWbHEFbGKNsSt7JXiBeemsY1Ui7iJj22WFEMeuVvpLNuqnRCBzooa9toUGWvsXnp69IeSkqQdRydYqazasKCfUlQ09yyohaQ6GBxAw01m6XVVOejUDVw+tldRj5D6GN9oObchB6G9Dc2ifb0f9Hx/wCq/iz61/b04f4vRl/ms+tf2s+f+WfZfnmJi/gMMyvtyH9B+OQlXrf7J9ZR+GwDVCYORjxPkS78zfSf/8QAIxEAAgEEAgIDAQEAAAAAAAAAAAERAhASICEwAzEyQVEiQv/aAAgBAwEBPwHTEqF7GyR8EztJIqkOsnSUSSSZE6vaCCEQRpJJIxcGQ2PnVD0es6oi62QtPraet3m0bSST10si8Du7QQQQQR0eTl4lLyayPJRTjwVUpVcIj/I3l4x+nPsqp+4KXipKf55/T5UmCyPlTBT66ETtVutH0QmKleiEcHA4dsKfwwQkhwR0xeLO09S6UJWrq1oUiR5Hz0ySMRN0O3//xAAoEQACAgECBQQCAwAAAAAAAAAAAQIREhAhAyAwMVETIkBBBDIjQmH/2gAIAQIBAT8B5LEMoo7lFctFHFhKTOHwHe+tD2JZsgnW5RRiV0rMzMzZmxSt81a10FyR7aWOzEUCutIZ2EIXf4b0yoyLZXkczIj2604/ZYv8LSLIfC4m7xM0/wBiUI0Yq9ken/Vkp/xk3a37j4f3RGKjuyPt38jeUBRi5dj9o4i0svneq30j8KjAwoW2mJ6a+9PTj4MI+CXggitWug9U9juV8PiSxjaJTcnvpwOEnuyuTjSxVos/HXtvqSGtENkXp//EAEAQAAECBAEHCQUGBgMBAAAAAAEAAgMREiExEBMiMkFRoQQgMDNDYXGBohRAQpGxI2JygoPCJFJzwdHxU2Ph8P/aAAgBAQAGPwJW6Cyvz78yWXFY5cVisViscmKxQbNSGSlusVj0Gg22/YtMknuQDXTmrhX6eeWYVJUx0Wi0rBbFiFsWqVINPQ29yusOdJvmdyk50R/e2Ul23pXbeldt6VU0RfOSwicFg/gq3Z3gu29K7b0rtuC7b0rtvSu29KtnvSp0xHeMlg7gsH8EDEES26S7b0rtvSu29K7b0rt/Su39K7f0qmFEfDd/2SlwRhRMRkmOdI87RyyyyCvdShD5KTgQrNKmRJWupuYVitJdymOZbJf3ayvkkU4j44lJ8Je+cmiu1iC35HJLnyKsr5Jc+raUcZBUUyVIEhvVUNwmEGPMvH/6SrdEqEpYqp3yV9m5HNPmhLEKRVuZTDaT4Kl4kfev1v29BN0KK6+LMPookOiLEpOLP9IhznNbJtM8Zu2J0XlNVnUSbvTYgLgH6Iq2FCJHJA2+PcoVDXUPDST4otzcR0nSm3/S9lJtf6L2Z7jnyCZDAdxTXRiQXkhsu4JkOK37TCiHsH9ynR2tiMLSBJ/Qcl/P9csvcJBUtC/hdXcVU6/mg8Msq41DnFFzGSB2IvLQ071OMyY+6tD1f+LORMdnOlg0YlezMxQE5vG7AeeSpjLLN0aSu3iEYdFwq3NsMkwziEIJZpOwWpxCzVOluU6FZVw22X2wlNTDMVm3N0lqcQqXCRHP/W/b0GnnJ/dMgnCK1zQXVaBkmNhgtDL33pzYjNFxqsdqDYcPV1Z796EOKKmy0v8AKhvbMCGGiXghnA8UkkUneV7XTvt5SUMxOtYRJ/8AlVtE2smBLvTIkVtT22q7k6BDrNRBm87ug5NP7/1yzCn7hdCHBcAHb1/EH/C+8djcVWRpYyX2MnjcqeUgBu5GE27RaoqxJPeprwtzQ/4nfUqp2Jy0bGgSC0r0xJD5I8oi6kO/mo0tYkHyUV8UaNBEsk6Me8LksONi2rirFvzUaBhELZBNcWkBP8SoJgioBsrb00RxKUXgjEYKmnArkudsZEXRfSZznNO8uf8Arft6ay0lbKOh5L+f6+6GexTatJ3BSYLnFyvFDvK6zhcQrX8cl8k+a3aHEJzW4A5faILm3FwTgmcja4Oe58zLAJvIuTnRZrHeU7k4cA6qd06JFc2VJ245MW/NQeS1AvE9q1mjzTsy4eM9yEWPEFLfvIuG0zWchuAB75IQHuqeXTsZrRc0fmULk7CHFokT3lCqI0D8Sc5lxzMFgsFM/wDN+3Ixju0xWZ75LMwbAWWsnVHBpTWuNiQnAHaq34gpjHdpijDR8FnI+OxqqOwWWsoTjtRlNaabDfjExRYdiaB/KFmPiIm5BpKc1rrBQj3JoOvE+id4rk35/rzZHJbpXZLrHJit6uQ1Ug8/7N0stuZiscmPSWyW5g/q/tQGzapvq8lD5S34TdF4E57VcJ/4Cm+IThS033JsMyDReQVTq/JNjN8CvIqT7P3qTty1W/JNmjInFAxsG70XyKbG+JtivaX7AJeKc920IeKcocR+qxqDzvTvFcm/P9ctsgiMZY4XCaHt1jIX2rU4hGhuripxGyCpeJIOiCVSlCE5IuosO8KuGy3yUookVni3QO1Z6WjOXmnPAs3FBzG2N8QjCe24Ez4KYvLFFzcArjLRB+a3neVWxU71cdHbop5ZDnTUsn639kaTKeSnYtElScVbapt2KeJVjjkp2FTbkscMkwtcrXK1ypF6DXGclo5CXbVmybKpuKmVyb8/1yXy8m/CoEGcpxCmBmdqrAGEsVyr+qo7ThIfNe0RdSGwfNQYjsSXfVcoEUyFN053J3lzqDYpjXRaJNEhKahcmhOrcDjJP5B8NNLfEJw5QS0Z3+yj5hxdhis3FrLpXlKSDm4ezbcVE/ConlkwRbs8FoT8gtL1ZDUMVpSkUdgnksr9HboZqakpqXNdyaPZj9u4r7KUQbwQur4hdXxC6viFeHxC1OIWpxC6viFqcQtTiFqcQrQ+IXV8Qur4hXh8Qur4hdXxC6viF1fELq+IUzD4hanELq+IXV8Qur4hdXxCnymUJu8lBkK0Ngk3mw4curEkxjB1bqlnPZ2VTnPvUeNEAcXPnSs3DYIY2gJsM2ATIX8k+KdohwcJSKOahNYTaYQbFY2JTgSg9kFoIVeYbPeixrQJuqKfClZ8uCnFhted6zlIkG0S7lIQxdFrWgTylox2KT8Dipgqr4Rgg5q0kX87R6aXS2V1ZaIU3mZ5lUQqUES7yrmZWkphSKsrqYy921UtwGTv6aynlmFfJbJMZGuKsebN2O9SF5rSwVDTbvwU5cUfdB7h583y6MZR056I+PRO8Mn/xAAnEAEAAgIBAwMFAQEBAAAAAAABABEhMUEQUWFxgfAgkaGx0cHxMP/aAAgBAQABPyF3GPajOd0X0gDr5Zi+yMPQUmDEt0T0dDF3RjAZg5VF7bfQR0HjFfMs5hnRC7oYzQgbY87EeJqXI1v0gCwBjp2Xa0+DvL909TKd2U6T2Z4p4ot94xGYJ7qCUhIvJHkEA0TpvcnnlrkjwsacwuvVQ7jrYs0wjUCtdKHyl1O3XrIIuCHi4eml5mSjRKVLYd8pNoPaHJT1SDc/dKv6xLVvRhlrehcXdN4mXdlRallz0acwA102zOzjzw7pQh6tCcmWdFRcFunEcPpFYY6lbwuW4MZoTRMJ1PWXhrMXUAZTADljt+OEflMVVC2EvHBxymI/8T+oD/j/AFHOW9sZ4YeGHhj44eOHhhpELL9xEqwGHj+p/wAr+oSiiib2IWbIKcQ9Mk6QKkevzVLH10g41IG8QHZfQAp6CukBEUgM9NRHW95zRppcR7r6NbNs7r/YnGr2y09ZDM3kd8RBSHe4hQt+ZVJ9oNVBtuag4TIjPjlKdNmzsuqGkiI4Srhy9UWJ5ol5iwrvNfXfNMdRCxJYykA1dSjVElNlDTHeEiLf0n6S1Rp6FEuGk6Yjv9GOmv1NlnqB5lW2o79PqqVElsuTPio6bV9PWjfUBs5lV4JlZo0lWKlV2f8AhdVQLsc+8qtcvPvKZjO0qg91NP2YgCzOWI7TGIx6VzKt15VFS6DV0mNLrP6iPZh+Ii05mtDKjc9RLAHwuXkdpKY9HUqc6+rMqUvnuUL0qXEomppO0Kx9D00fRGwd+hNXtDyNpghXk1lHbTlmW3EMHlJXGwqhoW2sZGClGnvjIw3qEJVtsEVBNIrrlmo2g0wK3Aiel03hJGVIZRZVmDcLFMIMMrk7lS7hxwQ7WlhgooHI9sH1vTaRlW+zrVvcewmaU/8AwT5j2kHcjCvtEwlerYU+sqmXzhCe8BVVtu69YU7ZWhVhmyMU4jW1NzFzBdNuDCbw7Az94fAU1NHmX57ssYHmASpWvI+XMFe1O/leYdRZ5h55dAFxaVD9zh6l5SqPN1Pk/wDsrlb3JX31EvdyI/p6U4ESz/vGsmlZmvOpgqB8+ZsAeFP51FS07I/gZzzZy96h+2InhmxPxKP3hB/LCLBaI1/B+Y3RgJKm0YXi5eIAlUqVBh1yUPGG3j/RD6gdBaqnGdTueCWoKGXY0tBK0pGxGbdefKZ83ALtu6dmA3lDuQDhWQJZnEFdlPLnKimPNVWXr+4QxGvA2/dmXGwGlRVPnzKF2QFrwolkuX0uXMymdUw4GIu43kiEZ6+D6ktsTwRXWJ3IKBgU8TNWN8x2aKhs9puteqx74Fg9hcpyDKJwTN6c7NRuwuGFl9jSaH+zKZcrXpHvbBLE4hXWyJDueuj7EepeRfMuVL2+M4DEDuaw8R3qN54ENz6cPC/aVGlQI2+3QIIrL4MCwGQugDWYs3beDHMXIeYT8OXww0R8mUKnRwG5ZBSafCMJqUaqpnSjPKqJXz20eu4Kp7fofRiO+mr6DR1WXRc8o9am5ZxoKUFiM4eIbQrosHQVh2H0bwZ6A702KWYz0B+lHmJ4jw4nIgmEglOoUbGpTjihUFptZO5F1VeQLF2nM7PPrHBaHrgPbU0vrNAt3Vyhdxwzq+OZiBwdorO/PTwlrCU8r2L396ubgAHpcMdBDDWAUTZracFZZ2EEe7DSpqqrKI1noUWV6dBi/wAOUcPs6Hi4AKbvWdijwGHeFH5na/acthAPhLVYgmb2YAFSjpHPGFNZcx6kOjkbxJwLoPeiX7RpuUe0t0QTRA8KlfZAvLz9LqWn6nrMXvfll1Xp6RXNsGtywrZGO8xBxGiBeG34gNZy9DqNLQ/iH72AMiz/AEncqU4J8gQBRZthSqBaxDGamrKld7k9Lqcgz8QO0MAKUo/wIhkLDRKWyeI1zNphX8pH5z99P+UaRI4lh9qbllmFO5UHCAkrqy0aiy9dEsHEB6lP2/7BVeoidx+ZZ4S74qAYSTuX0Si1D94O3ELjqjgWe1AE5IDxDumzK596qb3HYx0+/lXBNyqBd0W5l+1M/XFJSKWrvpMFbMbKILVxlTqFJZzOR0laumfQRvm60qjtNlUBbeGAqzMGYitA6AHxuZcGC3lBgyTAVH4J1pVSyrG7fiASsSAHYjg+sUHSKUccNvfR2gBqiqXoOR8IsAnWHUow9j+zNxAx7w9FqMNnkE/P/wAhyfj5eCcnuHifm/3BFSUrMVXZ0WYM6Q/bKYLqiK43BYfz/wDZudarIU+8HXjmxPxDdog98Sk30uLuTOQ/cRNsjSfph9jxVA/eD2tLPBMRQ2DLcWAq79r1Kd0AYMfeKAH5j3eY6CmXomSnYMaOolXVKpi+3mbMkDFxNcaYVu3CeauGq6BeelhuI6z6ROsRt3BMWAJhsormChNTx9DXW4qe76GqtyofaZTr6YjpnL9ZYdmKnxHLKin06AGHLZAKES1VO0ur1SvaFDU5RUvJlmfcUprtADUUF7hGLKdRQZlAH4RW0QGpJ2YCQ7cFyxTHAjAJslOpe7RMVuVwElOiD0ocxVbFz0Cvdi4pGfk/8l3UXXwC/wCQYDEFzf4jsO3+onLS0MI5n14E/SEsWTbYziUWuA0RVOVliu8cbU3Rhha/XTPokYLbBiZKAvSuYMYgcL8oMx4OxZVyoUVU/FxL73KuMp/Ca2PzMiuWMD+WZ781/gghxeI3XIw8kKarvZv2lVDMo8cTbsR1qLsSoN6ICaTLMJxEYEm3S1xBTqrghDunbpVwBmxNB9JnZo8ksXRcRUWUbNkuvgvjaY5Q4tc/djT8/wCZ8n9Inq3y7ztn8eZ8f9J8v9JXr4PWfP8A0ny/0h8p/s1Pn+sTlt8+8eH5/WHxP9x4/n9Zyfn9Z2vj9Z83958/94V4Xy3Pj/pPm/pEsYHy3Pg/vPg/vHLC7AvsEJxzFuu8oNRIkSNwBQ8wJgoHveK/MDMByPdDh42NGZbsr3L6sNE7Pl7xqgGz1XG5inYgZFbWXUzdRWxXrCzw6XmAwBbybuIHuO71UOwcp7WlELStxlcFQZ1FgaYO43CNLqVKJgty9UtLtQ7PeYWo83MC/wBT3jr2pdFXsEKt1qUwhWDMOcQ9Q77FgiUIk7kp2wQJUaDMb9PQwnuH0XJKFmXNke77wbLIqSzInQczD0RS8YIqHqu/UeKxwajGFlSiI9f5EjRfKiX1GhMySU5nhcas/WVDNirM/XSsaG0AwrB0Z/lg6rwQ5OerGJKjDrEZeYKp1s702pA4iOyCwF1MR+0WEzmHWSzkRSIvfBM8aiL2TcRnUuZZ6Pqg8i6ahm1WeqVaMlsOknE2+iIxm3Q11nTX651R2mzoaPq3+rq9CdR00hpATqjtho6bEAU89G8/A6OvrPUemk0/8Bq6EbJ4clfbEwWNqNmh8wA47TJX8zG+8/XT/9oADAMBAAIAAwAAABDyQ3TrhZvCnY4/ZzKL8UBLHQF09mNmqlJH2919OV0q9hsgDXBs08dNcSo+ZX1dACbN7nnO7Z7zg64gNNjz97/vhwJpoUKzpF7RJdS4aBkywyDy5ELpMGBZXhiE/wDZDjTXeWn+U43jRCMt6t9YRghOXjX7Ab4ny8DCJjUevaiN0THj+DSnxxCFihzxmQVsnN6fKRIQ+8bQH82JD78WwTNN8J8k5yeaGW7pYCM3d9NoCslpTkKGXsgcbwyj9ACS3QoExBJ/rjz5K3SmsWN+pXFM/8QAHxEBAQEAAwEBAQEBAQAAAAAAAQARECExQSBRYXHw/9oACAEDAQE/EMC0tguxDHLuCwcCW9ZLOHt1ZbblsNtmzEjzrhsMMBI3rl1d5hyTe9gzsh9t/J/cDgzIDeB67lv8Rh9jrPWWttQaJPWxxnLxyXrjIy2R8t/HZkSY3sE9l7/GR+2Ps49k6sn8sztxs7Zl/wAjBLvG2228bbDLrggTjAsLT5dXU+8M8Ny1/OWFvGHU9upO+4FgHc+ECGwRq6cNRrggW8bbbbs/I59hB/420iEmh/Jb2Ov5Ki+nt2qcEYyHQBl2Cf8AV8zwJMGfL0Phu3hwHO22beuA9y5w9Wt64yCzLeAS/JM4H4beMB2SYhAMAEo7AHSTD17H0J794n+ZGMzqC7+wQQPbzgbeSR21ZsHdqyGM9SuCbeFyG8nu7T5+Xk7CeQSihbv4FdwTI/RyLIXB9wltlux3dF4//8QAIhEBAQEAAgIBBQEBAAAAAAAAAQARECExQSAwUWFxkaHR/9oACAECAQE/EN5XLN2LoRoukE6WLLJLOQwHgka8CyyeBu6cLC9omOHSPidmWnhjrhxI9WvRdmcDYJZykgz3gwk2xAwYc7w3nzuwzggmrV9yMdHwXqFh+G/B5hF8Eb0bGWc76noyyyw4/dlnGWWWWWWSRx4sJAEthHqFAPEtu3Dqyyz6KMOvcuvSUdSnqPa/BbbbeNtu7u7sbGyCwX9WkPtevzdyBdU0tb6POFquu8xlRpMRgBiMgD7Q0J/L936kP9iJjx9ryjwbv/LxOGHzHRg3gMAnhlttvwWyOCzh592BUnXSSBgdTfTuRXcu+meY9DbDMvwL8T+QMwdSjuQDQ93jj2fQWHdoe7ctukDMuNnz88nJE8twHAsPAA64OFWNL3CY/U7lgWXVnEmQ3j//xAAnEAEAAgIBAwMEAwEAAAAAAAABABEhMUFRYXEQgZGhscHwINHh8f/aAAgBAQABPxAvEdoRi7uzC208GJdvnoSkUHWs2lrOKKPEcGYfV9glqAPzClqXaQPg+J2T4iLwXcMAHrREX+Jbx9CcMPcR+k9VamQDHXUyOa6jcFXpaY92bVpOkSFkAV4GO1Xy1KGH8w4mvS4fiOlxboeCZtU7MIFc6ByynVXW5zKNlZlPCAOg8g1svxBiAgDgJiHRli0QaI3zfgf5MtrMHz80/wCxPM+7L9j8scGEwYLW2otZWutQasJpuD358FsaBxV2DsZv3+CIpqoQ7qrNxah7hgdKfMXNp5Inj7k6xhrtE2kPUYXwE7xhqpYSFWLMJ0fXFl/QlpopsYAwDwenbe3aVz39npQIY5D7wzhR0vPaZ7ZYekEFB+vpmlRkdmKC2YYVD89IojvtzA+k7uItZZ7QxlX5zKLSbFXzE6fAfm4bdbWn/EWBcvAv6jLSnkc/MaCjKt9tx647CrPJF0ubGql1Ri7ZRri+XMLgvuy6ruOCaQHfmVNGX0MxHHuP9Rb6HTRA5X4nDJvdD1eDvNIdw9L/AKJQjy5gAAaIgodMC5eVVzuQDN/hleaa0St6SWH5/wAT6x+8FPl/MPzIHZfqiRgLPKk4JrDpTvBnUOCq1X9pVG+slJ+r/aLeJzGBvFPj4ikEkozasItsAAVBwFz/AJP9p+7/AGn7v95/xP7T/g/2iv8AT/aUmH1aH3l8iaCT2EH3uAAMUARU2MK+aNAFXzaxe/1eY778/wCpv/b/ANRV92Ef09JsMbjA0cAfqGI5fSbE4R5Em/qwnUgFKCx9FOpmcG/F3DIye9R3t15uULq+TUDV7PDLCYeTpEvCWRkLdSC4CDIzLdXNP9ynbBqy/rLud6MUEpG27Xv6mxs+A6rK67zlofGX9xLt72LX3og6JtAfiUgnBNXxc6PyQftFoyqws+CZ9oGA7uLgU7aiwTUXNHaa82x65ce2PpM3Xs4jbBfdm9zQV9Jwu91ivbTwYIrlexKKh5lq0gFiMqW7eo2l0Qr0IFZXhOSUNjBMaUiKLNPqr6NzEO0zfGNyvs1KG8XmAUFdjGxLHXUwvEdHWVoxe6CSg55iCylHaz8vQUmBancLPGdcAz5gWzGNuvb+FxZM+a6nBMub99fEITBmXaW77AIbUqlHeZmZmVK9D2xblurC8rlr4WU5ZlduwvD6rIgs0zXoawcj8xAViouMWrXJsgGhXq2RUsVxdUBM63TL/N8wFFeQ4/e8rvm1QQ7bYPG5uq1Bz05byYYV3WcdJko5zV3iou+LVvAg1niK5Qtf5FKPemVxXBWqzK9jJrkj1hMC28tNPaEUzVDffxLALygNrQE29pnIKi72s+h8SynhYfeHEV7uCYi6OhM3h3YfLlFgiWiIOrWpRDNq+BgvmomKgtEaHYlG2WdkP4MPBsuPiEXBrmDYOxhut8EJDNuYFANE2+JotVdGK2HMclTNuMwL8H1mF+ekd8+0v7T7vXiW9yBjNoiS4H1/ajIiUsOMWrJzmBirvQFHoq641qaq0EpNYaarIBsmQ22s1AEo1g3ET6AWviKbsqu94b8C6vjDwIWrePogRkaMeuhQ8nmLqkOVSuW2Q3n4g7oBqV4knAOOuoAQQ9LZlKi1pK77UvXuFf2WUYVGkcIdDsuqbtzi/lSewKYt0fDXWUSiUSvUQX2Pw+gJmfHjOz1fApznU6DfmJfpfsQ67tcr6Je8/wAVAy1OpnoZn+9AtqlAEuICZMWG65+kGVilumZrO2t7ilYEBhzdDHmVWifhjtQ9okyCpI4DL2iToKisqpvJEoXOkO62q+kugCFgDV2Uypic2RXi0GZi0sWTqVVekYNrRo4aG/ufMd46zRU525TYCVquIqdo9AcB3Zrww6EoWJlhV4LFba8RMqwBsTIhbsNUGcdbL4ixtJN8WLh70yIFbEVmzmD5sYabxB4Q6ctvMfacB/dEa9Ai3JVYlmG8LXS34RbQdDecS/HMBKoabl6MXaHDJm40lDaPV5DGXB3GAEhQDvii/aWW8gl4UkQ5ACPxwEiprCm1vVVv2ikGaXWX4yj4CUYR6Q6P2nYloQhSWNxDrMbbp1ELZ/pLdJeWm77/AG9CZHvUe0IQszjCm/eL3yJNnMWgbgP4AQEkUbA33iDtoFl+UiNaZlolGeU6LQCgx9KvXKUW7CVguX6ENpebrGQj1a4OipVkusbhydaC1DM13uOh1ZhUq6gd11vmxoCZAKAuMo9wIwUwQvJabA4GeHm1KxAMZVQncJTrKXsljOwX2lujG3AQB6R8sJYbmcK1NkrxAKUljMAN7Oj6IJTkgGge38tOeCA3PdnBB2iNkvmO3Cbl1QwUvn9LhNS+i1MxJrNVqMZaiKsKwbDpTnnNkJcnmKeCiivMEU7bHksKrOO8LoRZZHIbTPDA7Foe1e29Bu2jEy0GAUNZPDV6YroBpiHoNBElVOX95i11Ig8OX3jTIYO+oZlHM6WYDAkERw7D2Avw9Y69i5yptWU4zLXbiZVACcFHB7/aIO2UbR2q+lv2hr0WX2nrmseDmOKpA6VUVjBy3L7siVDDk1Re+vovaIWqxyNMl5dqsQHDkPaIltUZGcVLiCAg9QPexv3jj9jaoRvtCAABAcZRxjhBoBY64+kodBx1ma7XcETLquFgz1v7wd3c7ZAXykGCQKm3IDcLCFo/wrhej6L938Pvvt6E5PDLMiHcYwg+cTA2PQyxcLh0Ny7MeCZ9B0ZfmUpfcxhBlCXvB/EOqB8XBbyUW0alBqU+haoV0C429oqwwwUusJVslygvvA5OWPnvmOkGyzI6fVxvE2I9oHRfMVoQ7RZwkZ3CbgBgljCg9LlQkpDYnDK3VEDtbyYxqGpZ0XTdmIhi8WD3v7kQtoA17e20cdIqlcAtn/YzbVS+ZU14NSjEDFh37zmyuhuchLA2i5WgBwXz3Yq2FqDhek/cRsandhsKs/RGaDQG6InsAO0UVW9bUIL9oDAjmU4RTjFIjxiEivqWyk0nD7PaHEUFe7bwffwRr5AM1lC7yL8QJAKdiqAb16EhWl5nd1CQrWxaaKrsdoAqJd6jrDRgFEGoFPLXiWlfvswaAOW6xE0aCE0KsukxSzBMl9o7vesNC8cY7sBTkAAC+wwtJDveBL8DthECmNXI1fSLqXjuKQp2sZ2EMYB5ZoH1Q65OoxVw/mKAYcqy0qRjtaUNthnPGBxjv8nwy6lWQtoin4SKzVEgNLKqdftFSRXZjBpOnRYJIbEYCqdR8RhCiV7ReoYDAD4lQTV1BaXWP3EP9dlzWK3bJ9YjFUji9h+KmCD/AJzClqO3o9J2/wCTFXTDDWKIdV+naByGExac1EXClVxfGJf0LLU+CFLYWGioPvXwy1h0LzsPxDsUINt5hMF63WPyftxT9oNCWFXUWcQBSrB2iG2eequYBQsIc7s9391BRgAGBxlDdJfR7I2zgdJoBUo6RHlxNBicnjpMKS9DMSYAOmJ5LLPEROvOEgDiVKj1aGMcwYktmm4jZsOpkjxWnXRgCC0fLr7fRAKvpTEEaHWKIO6qW0Sn6wdL8ihhVAcIJFOGOgYlizICj/mASIbd3fR6kZBwnQpl8n3TT5ebiljzuM0WIQkN0SDgstTi6UvvFUqbdrD7ZFDQvuzBJroYg+6GBimVMomDF2ESwzwzn73goyr5Zm5UqaTq1cH1lYS6stQroZh0YFA2W8EWdAcrzHAq8VTKEXzOkrqEGGIKjtGusooaT90LL0za3N+de8EZihYjAZF1z7y9Q9i+Raxe/kjvV1FMnXidyAIhP0vaLf8ApSV4yWCs8vWPyekoG78694RAYWJGCrLrzLWhiVvWzWL8dSGBOg8RKgwT7Z0P72l4UdORK2dSJnjcpjXilAKBTgIXaQAaq2uIqpF4TFutcv5jjuKOgYD4iKqaFWh+n/IMERLo/j/eIsRaXq5gcmHuJPpX2Sru0T1Puf1zGfpxOBTQQX+jlPYPxegAmgHWKPmSFcuXlYcgWQ51oGAGLUUFFhBvmo0kcXhHwXj9n4EJkZ7R+KaDZdLSSqE6WWWnCx5IVuFQrYacmGPsR0AO6gjESqsAbaR+kWsX4CLlwcqWDSJ2TD7QxWI6ZfF2GNpU54JqxS6q71zVQBp0iGVMFtyOpkuEHWLHNiHFXHBSsroWmrlEx7gr3blWbSwaWiBayOehHOB/ESOADmVx7KfR4/uUo1ZDnsMFPrQ0q43/AMgWyk2mXVfpKSF0qgiWb9KZSxyzjBUSWg8s3ZUXZUdtxLaV7zQEQ51CbaxzORB01EymngjuIRuVmmiXDvKiQHzGoJfAZUqAW/lJc0KUsvmWZsy9olOwBPcWwJQYdnZiU6tDpFBXJcpxlIfF6hAsCrF9EGB6Md+KPApqdkdDj4jZTbs4iSdo65WyLwUFHSRi1KjyvLKmahOr6LhNUDtEFiDwKaiNLCk6O5aEB1YNLAhXQ7qIW1YqN9iYRjzD4juh6WR+yl/yO1QRL2O+IUILTdce7DhetSc3uJjbXY9GN1Zk2xSB2rgj9X2DZHaKVLyswF3SqDMA9AjFq+gaJTqCH9fmCxJVLbdXelFPrhCqC6Ls7N1LRApD6ozSMi4LNJ3wfBAWXUek09c19OsoIuKNDAPYA9pjYEDYs2hzE2QQuY2l9CJ2LGjLBEM1XtHYMNBfVLdGOdEfguLNBsfN38EY7McdVj5+JSDWZ1zquvPxHYYCuJdALjL40OirVhtrfe4SN4ymbEsr2ynIhwbgLFC4SEjbi8TdNpuuCKLNQ03GslHxFgkCm/w4+kzFkCBtT7SvnQPV48wIJsgUOThA+7B9ibHwk19fQyy+C7nLFrRe8Oi5x0p3B80QlPEJnCnQSjsqbHcaQgZi10crB031lJuKBa0RXSdZntmU7dejQnWDbHencrAay/EyDnMoDob8S0MI36VGrQsnn4GV/YDqdJfXSBl47ycMevnNUOHAx1CzC8ccrOvDLEkIxWL0vsPDUAdD095284d2Z/uSwq2YqjAQocqSvLyQiUwvMLfphpKvDmg4ueBbmbvT5y7aGPR81kki8Lrt3Db2gmhFtG13XMCUP4APTSwqhRt+IiqF22KkdKRAiZCEIG/qzHh91Is0DdF/SMaESNpqzZBsKWNxFW/rvGOmwLbyPEpu8MBtqyPXq0gt1fMqzcAB4CNwMCg7FC/iz3ZQShFba4CGiNtzMd8MqeLRbuODvcQZAlYDV07lctScq97xR9IKCFQ5HSHnFBKoOI4AaGxOIsAuHdzCkUvdjj3LIRkNgZLo7ZuFA+ugqVmEET7nhwSxrBvF2wg7HNfl3+ZlIKF5wAfiDNv1jOAmwgOItxg7w1hfdjVs9o/0J0tZYl0RaNnsDrKCghWWSqInoxwnUiBbQdZmEwN9z+HVyrI+ppzfSbgchXMJnJodoAJY6YGoBDQXah6KtPJZhmb1dGWxLcrbMry9vWWtgcuh5Y+RFiIHzt+nrvWQ7rUrJOOvxs/WGEHFOfsfN+Ii58L9jpCmnOS9xUQBkOSCB04LxCAFTSXhStXuophtt59ukaEb7mLY5sNMAZ00+Ox3YUQFA4I6guU0Pfr7RVVVXd+iuG3rwQLst1fRIIPRfS3KZestecsDXL06wQtj606MNnWUi4ODrBKDXeHKLdOGPE2bOsApYXfWWgFdTIwzYKni7bPOpWCOBjuOTYwoJ7sxAjwLcarBblmPJdn/AF7wO3AGV8BmEkUVmkLPtA0zVWa1vvBsKwOLuYtiTdlT1L9AMenl4jV31huAshMThNPRr8zj0mbk1hxNPmfW/wAeXn8z6chPcjfejbeZ9P6dZz6/ouh6PpZQYNPuwEafDN+Z9AQCoNkA29Z9nPpJw+fxPoJXsMlrlt36dPiJ9v8AdnSff/iY+rd4nKPPpfQH8P79CbvafdT+pXYct+CEVfETzF1Zf26lRywjpZfMs8pTPO5icNseI3e735Q9K/74aPE//9k=$domain=reporter.mk
+CSS-generic: 2 plain CSS selectors
+CSS-specific: 426 distinct filters
+ Combined into 114 distinct hostnames
+ Combined into 0 distinct entities
+CSS-declarative: 2 distinct filters
+ Combined into 2 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'nld-0':
+ Fetching remote https://easydutch-ubo.github.io/EasyDutch/EasyDutch.txt
+ Fetching remote https://easydutch-ubo.github.io/EasyDutch/EasyDutch/Block_General.txt
+ Fetching remote https://easydutch-ubo.github.io/EasyDutch/EasyDutch/Block_first_party_Server.txt
+ Fetching remote https://easydutch-ubo.github.io/EasyDutch/EasyDutch/Block_third_party_Server.txt
+ Fetching remote https://easydutch-ubo.github.io/EasyDutch/EasyDutch/Block_Resources.txt
+ Fetching remote https://easydutch-ubo.github.io/EasyDutch/EasyDutch/Block_Whitelist.txt
+ Fetching remote https://easydutch-ubo.github.io/EasyDutch/EasyDutch/Hide_General.txt
+ Fetching remote https://easydutch-ubo.github.io/EasyDutch/EasyDutch/Hide_Specific.txt
+ Fetching remote https://easydutch-ubo.github.io/EasyDutch/EasyDutch/Hide_Whitelist.txt
+ Fetching remote https://easydutch-ubo.github.io/EasyDutch/EasyDutch/Anti-Adblock.txt
+ Fetching remote https://easydutch-ubo.github.io/EasyDutch/EasyDutch/No_uBlock_Filters.txt
+Input filter count: 734
+ Accepted filter count: 733
+ Rejected filter count: 0
+Output rule count: 626
+ Plain good: 615
+
+ Maybe good (regexes): 6
+ redirect=: 2
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 3
+ FilterStrictParty: Strict partyness strict3p not supported
+ regexFilter is not RE2-compatible: https\:\/\/nieuwsfiets\.nu\/wp-content\/uploads\/.*\/.*(?:banner-(?!mis|tip).*|\.gif)
+ Can't salvage rule with only entity-based domain= option: allestoringen.*
+CSS-generic: 14 plain CSS selectors
+CSS-generic-high: 1 plain CSS selectors
+CSS-specific: 956 distinct filters
+ Combined into 994 distinct hostnames
+ Combined into 1 distinct entities
+CSS-declarative: 11 distinct filters
+ Combined into 10 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 244 distinct combined selectors
+ Combined into 221 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'nor-0':
+ Fetching remote https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianList.txt
+ Fetching remote https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianExperimentalList%20alternate%20versions/AntiAdblockEntries.txt
+ Fetching remote https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianExperimentalList%20alternate%20versions/NordicFilters-NotFirefox.txt
+ Fetching remote https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianExperimentalList%20alternate%20versions/NordicFilters-NotBrave.txt
+Input filter count: 1400
+ Accepted filter count: 1400
+ Rejected filter count: 0
+Output rule count: 505
+ Plain good: 459
+
+ Maybe good (regexes): 4
+ redirect=: 5
+ removeparams= (accepted/discarded): 25/4
+ modifyHeaders=: 1
+ Unsupported: 11
+ Can't salvage rule with only entity-based domain= option: eniro.*
+ Can't salvage rule with only entity-based domain= option: eniro.*|proff.*
+ Can't salvage rule with only entity-based domain= option: eurosport.*
+ Can't salvage rule with only entity-based domain= option: discoveryplus.*
+ Can't salvage rule with only entity-based domain= option: discoveryplus.*
+ Can't salvage rule with only entity-based domain= option: discoveryplus.*
+ Can't salvage rule with only entity-based domain= option: discoveryplus.*
+ Unsupported regex-based removeParam: /^rs\d/
+ Unsupported regex-based removeParam: /^source=partnerads$/
+ Unsupported regex-based removeParam: /^source=tradedoubler$/
+ Unsupported regex-based removeParam: /^amp;/
+CSS-generic: 132 plain CSS selectors
+CSS-generic-high: 28 plain CSS selectors
+CSS-specific: 1127 distinct filters
+ Combined into 580 distinct hostnames
+ Combined into 13 distinct entities
+CSS-declarative: 48 distinct filters
+ Combined into 117 distinct hostnames
+ Combined into 1 distinct entities
+Procedural-related distinct filters: 92 distinct combined selectors
+ Combined into 80 distinct hostnames
+ Combined into 2 distinct entities
+============================
+Listset for 'pol-0':
+ Fetching remote https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-adblock-filters/adblock.txt
+ Fetching remote https://raw.githubusercontent.com/olegwukr/polish-privacy-filters/master/anti-adblock.txt
+ Fetching remote https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-adblock-filters/adblock_ublock.txt
+ Fetching remote https://raw.githubusercontent.com/olegwukr/polish-privacy-filters/master/anti-adblock-suplement.txt
+Input filter count: 1409
+ Accepted filter count: 1408
+ Rejected filter count: 1
+Output rule count: 1046
+ Plain good: 967
+
+ Maybe good (regexes): 43
+ redirect=: 27
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 9
+ regexFilter is not RE2-compatible: \/[0-9a-zA-Z]{5,7}\_(?!adaptiveresize)[a-z]{12,17}\_[0-9]{3,3}\x[0-9]{3,3}\.jpg$
+ regexFilter is not RE2-compatible: ^https:\/\/eku24.net\/images\/slajdy\/(?!zyczenia)[a-z]{3,10}\/[a-zA-Z0-9_-]{10,50}\.jpg
+ regexFilter is not RE2-compatible: ^https:\/\/(?!horrortube)(?!filman.cc)(?!horlol.pl)[a-z.0-9]{3,15}\.[a-z]{2,3}\/
+ regexFilter is not RE2-compatible: https?:\/\/naekranie\.pl\/wp-content\/uploads\/[0-9]{4,4}\/[0-9]{2,2}\/(?!jpg)[0-9a-z]{7,10}$
+ regexFilter is not RE2-compatible: https?:\/\/(?!(poczta|bc))[a-z.]{3,15}\.wp\.pl\/.{20,}
+ regexFilter is not RE2-compatible: ^http:\/\/((?!192\.168)(?!10\.)(?!172\.16)(?!172\.17)(?!172\.18)(?!172\.19)(?!172\.2)(?!172\.30)(?!172\.31)([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\/[a-zA-Z0-9]{30,}
+ regexFilter is not RE2-compatible: ^(http|https):\/\/www\.portel\.pl\/(?!pasaz)[-a-z0-9A-Z_%$&+=[\].]{1,200}\/[-a-z0-9A-Z_%$&+=[\]/.]{2,200}.(html|htm)
+ regexFilter is not RE2-compatible: ^(http|https):\/\/(?!www.speedvid)(?!streamcherry.com)(?!vshare)(?!vidoza)(?!www.youtube)[a-zA-Z0-9\W]{5,10}.[a-z]{2,20}\/(?!anime)[\w\W\d]{5,20}\/[a-z]{5,20}\/
+ Can't salvage rule with only entity-based domain= option: trojmiasto.*
+CSS-generic: 63 plain CSS selectors
+CSS-generic-high: 48 plain CSS selectors
+CSS-specific: 4214 distinct filters
+ Combined into 3231 distinct hostnames
+ Combined into 0 distinct entities
+CSS-declarative: 131 distinct filters
+ Combined into 182 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 96 distinct combined selectors
+ Combined into 95 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'rou-1':
+ Fetching remote https://road.adblock.ro/lista.txt
+No valid content for undefined
+Input filter count: 0
+ Accepted filter count: 0
+ Rejected filter count: 0
+Output rule count: 0
+ Plain good: 0
+
+ Maybe good (regexes): 0
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+============================
+Listset for 'rus-0':
+ Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/RuAdList-uBO.txt
+ Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/adservers.txt
+ Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/first_level.txt
+ Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/general_block.txt
+ Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/general_hide.txt
+ Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/popup.txt
+ Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/specific_antisocial.txt
+ Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/specific_block.txt
+ Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/specific_hide.txt
+ Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/specific_special.txt
+ Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/thirdparty.txt
+ Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/whitelist.txt
+ Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/css-fixes-experimental.txt
+ Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/js-fixes-experimental.txt
+ Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/AWRL-non-sync.txt
+Input filter count: 17309
+ Accepted filter count: 17299
+ Rejected filter count: 8
+Output rule count: 5832
+ Pruning requestDomains: from 6634 to 6633
+ Plain good: 5745
+
+ Maybe good (regexes): 21
+ redirect=: 16
+ removeparams= (accepted/discarded): 15/2
+ modifyHeaders=: 29
+ Unsupported: 6
+ regexFilter is not RE2-compatible: ^(?!.*(24liveblog.com|24liveplus.com|acint.net|addthis.com|addthisedge.com|akamai.net|akamaiedge.net|alloha.tv|ampproject.org|anycomment.io|apester.com|api-ssl.bitly.com|api.corr.life|api.here.com|api.sypexgeo.net|app.hoversignal.com|appsmail.ru|bam.nr-data.net|blogger.com|bootstrapcdn.com|cackle.me|cdn.ampproject.org|cdn.iframe.ly|cdn.rawgit.com|cdnstats.ru|cdnvideo.ru|chartbeat.com|chatango.com|chatbro.com|chimpstatic.com|cloudflare.com|cloudflare.net|cloudfront.net|cloudfunctions.net|code.createjs.com|columbus.te.ua|cultserv.ru|disqus.com|disquscdn.com|dmca.com|documentcloud.org|each.im|ebacdn.com|edgecastcdn.net|edgecdn.ru|ellinagraypel.com|embed.ex.co|embed.widgetpack.com|embedstorage.net|eurosolidarity.org|facebook.com|facebook.net|fastly.net|fastlylb.net|fbcdn.net|fbvkcdn.com|feonet.net|fluidplayer.com|fontawesome.com|fonts.w.tools|freecurrencyrates.com|fwcdn1.com|fwdcdn.com|gcdn.co|getsitecontrol.com|gismeteo.ru|github.io|gitlab.io|google-analytics.com|google.com|googleadservices.com|googleapis.com|googleoptimize.com|googletagmanager.com|googletagservices.com|gravatar.com|gravitec.media|gravitec.net|gstatic.com|hcaptcha.com|hupso.com|hwcdn.net|hypercomments.com|ibytedtos.com|imgsmail.ru|imgur.com|informers.ukr.net|instagram.com|intensedebate.com|intercom.io|intercomcdn.com|intravideo.net|issuu.com|ivideon.com|jivosite.com|jquery.com|js-agent.newrelic.com|jsdelivr.net|jsonip.com|jwpcdn.com|jwplatform.com|keycaptcha.com|kin-x.com|kinogram.best|kinohod.ru|kinoplayer.co|kinotreiler.com|kitbit.net|kodik-add.com|kodikapi.com|libria.fun|licdn.com|likebtn.com|linkedin.com|lp4.io|mail.ru|mailchimp.com|mapbox.com|media-imdb.com|media.reformal.ru|mediator.media|meteobar.com|meteonova.ru|mirtesen.ru|netdna-cdn.com|ngenix.net|nuipogoda.ru|odnaknopka.ru|odnoklassniki.ru|ok.ru|oneall.com|onesignal.com|onthe.io|parastorage.com|phnx.click|piktochart.com|pinterest.com|pixars.org|platformcraft.ru|playbuzz.com|player|player.panda.video|pljs.ru|plrjs.com|pluso.ru|plyr.io|polldaddy.com|polyfill.io|pv.pjtsu.com|quiz.ink|raincaptcha.com|readymag.com|recaptcha.net|relap.io|ren.tv|renteres.ru|rumer.club|s5o.ru|securedtouch.com|selcdn.net|sendpulse.com|sentry-cdn.com|shareaholic.com|shareaholic.net|sharethis.com|shrink.pe|sinoptik.ua|source.mmi.bemobile.ua|sporcle.com|sportradar.com|sportrecs.com|sports.ru|stackpathcdn.com|static.addtoany.com|statically.io|streamvid.club|telegram.im|telegram.org|tenews.org.ua|tenews.te.ua|tiktok.com|tilda.ws|tildacdn.com|tns-counter.ru|tolstoycomments.com|traq.li|trbcdn.net|trbna.com|ttrace.ru|ttwstatic.com|tumblr.com|tvget.ru|tvsok.ru|twimg.com|twitter.com|typekit.net|uanews.org.ua|unpkg.com|uptolike.com|userapi.com|usocial.pro|uweb.ru|vicomi.com|vidazoo.com|videocdn.tv|videoplayers.club|viglink.com|viqeo.tv|vk.com|vkontakte.ru|vuukle.com|webflow.com|weblium.com|weblium.site|widget.speechki.org|widget.vp.ru|widgets.getpocket.com|world-weather.ru|wp.com|yabber.cloud|yandex.ru|yandex.st|yastatic.net|yohoho.cc|yohoho.online|yoomoney.ru|yourwebsite.life|youtube-nocookie.com|youtube.com|ytimg.com|zencdn.net)).*$
+ regexFilter is not RE2-compatible: ^(?!.*(24liveblog.com|24liveplus.com|acint.net|addthis.com|addthisedge.com|akamai.net|akamaiedge.net|alloha.tv|ampproject.org|anycomment.io|apester.com|api-ssl.bitly.com|api.corr.life|api.here.com|api.sypexgeo.net|app.hoversignal.com|appsmail.ru|bam.nr-data.net|blogger.com|bootstrapcdn.com|cackle.me|cdn.ampproject.org|cdn.iframe.ly|cdn.rawgit.com|cdnstats.ru|cdnvideo.ru|chartbeat.com|chatango.com|chatbro.com|chimpstatic.com|cloudflare.com|cloudflare.net|cloudfront.net|cloudfunctions.net|code.createjs.com|columbus.te.ua|cultserv.ru|disqus.com|disquscdn.com|dmca.com|documentcloud.org|each.im|ebacdn.com|edgecastcdn.net|edgecdn.ru|ellinagraypel.com|embed.ex.co|embed.widgetpack.com|embedstorage.net|eurosolidarity.org|facebook.com|facebook.net|fastly.net|fastlylb.net|fbcdn.net|fbvkcdn.com|feonet.net|fluidplayer.com|fontawesome.com|fonts.w.tools|freecurrencyrates.com|fwcdn1.com|fwdcdn.com|gcdn.co|getsitecontrol.com|gismeteo.ru|github.io|gitlab.io|google-analytics.com|google.com|googleadservices.com|googleapis.com|googleoptimize.com|googletagmanager.com|googletagservices.com|gravatar.com|gravitec.media|gravitec.net|gstatic.com|hcaptcha.com|hupso.com|hwcdn.net|hypercomments.com|ibytedtos.com|imgsmail.ru|imgur.com|informers.ukr.net|instagram.com|intensedebate.com|intercom.io|intercomcdn.com|intravideo.net|issuu.com|ivideon.com|jivosite.com|jquery.com|js-agent.newrelic.com|jsdelivr.net|jsonip.com|jwpcdn.com|jwplatform.com|keycaptcha.com|kin-x.com|kinogram.best|kinohod.ru|kinoplayer.co|kinotreiler.com|kitbit.net|kodik-add.com|kodikapi.com|libria.fun|licdn.com|likebtn.com|linkedin.com|lp4.io|mail.ru|mailchimp.com|mapbox.com|media-imdb.com|media.reformal.ru|mediator.media|meteobar.com|meteonova.ru|mirtesen.ru|netdna-cdn.com|ngenix.net|nuipogoda.ru|odnaknopka.ru|odnoklassniki.ru|ok.ru|oneall.com|onesignal.com|onthe.io|parastorage.com|phnx.click|piktochart.com|pinterest.com|pixars.org|platformcraft.ru|playbuzz.com|player|player.panda.video|pljs.ru|plrjs.com|pluso.ru|plyr.io|polldaddy.com|polyfill.io|pv.pjtsu.com|quiz.ink|raincaptcha.com|readymag.com|recaptcha.net|relap.io|ren.tv|renteres.ru|rumer.club|s5o.ru|securedtouch.com|selcdn.net|sendpulse.com|sentry-cdn.com|shareaholic.com|shareaholic.net|sharethis.com|shrink.pe|sinoptik.ua|source.mmi.bemobile.ua|sporcle.com|sportradar.com|sportrecs.com|sports.ru|stackpathcdn.com|static.addtoany.com|statically.io|streamvid.club|telegram.im|telegram.org|tenews.org.ua|tenews.te.ua|tiktok.com|tilda.ws|tildacdn.com|tns-counter.ru|tolstoycomments.com|traq.li|trbcdn.net|trbna.com|ttrace.ru|ttwstatic.com|tumblr.com|tvget.ru|tvsok.ru|twimg.com|twitter.com|typekit.net|uanews.org.ua|unpkg.com|uptolike.com|userapi.com|usocial.pro|uweb.ru|vicomi.com|vidazoo.com|videocdn.tv|videoplayers.club|viglink.com|viqeo.tv|vk.com|vkontakte.ru|vuukle.com|webflow.com|weblium.com|weblium.site|widget.speechki.org|widget.vp.ru|widgets.getpocket.com|world-weather.ru|wp.com|yabber.cloud|yandex.ru|yandex.st|yastatic.net|yohoho.cc|yohoho.online|yoomoney.ru|yourwebsite.life|youtube-nocookie.com|youtube.com|ytimg.com|zencdn.net)).*$
+ regexFilter is not RE2-compatible: ^(?!.*(spac.me)).*$
+ regexFilter is not RE2-compatible: ^(?!.*(24liveblog.com|24liveplus.com|acint.net|addthis.com|addthisedge.com|akamai.net|akamaiedge.net|alloha.tv|ampproject.org|anycomment.io|apester.com|api-ssl.bitly.com|api.corr.life|api.here.com|api.sypexgeo.net|app.hoversignal.com|appsmail.ru|bam.nr-data.net|blogger.com|bootstrapcdn.com|cackle.me|cdn.ampproject.org|cdn.iframe.ly|cdn.rawgit.com|cdnstats.ru|cdnvideo.ru|chartbeat.com|chatango.com|chatbro.com|chimpstatic.com|cloudflare.com|cloudflare.net|cloudfront.net|cloudfunctions.net|code.createjs.com|columbus.te.ua|cultserv.ru|disqus.com|disquscdn.com|dmca.com|documentcloud.org|each.im|ebacdn.com|edgecastcdn.net|edgecdn.ru|ellinagraypel.com|embed.ex.co|embed.widgetpack.com|embedstorage.net|eurosolidarity.org|facebook.com|facebook.net|fastly.net|fastlylb.net|fbcdn.net|fbvkcdn.com|feonet.net|fluidplayer.com|fontawesome.com|fonts.w.tools|freecurrencyrates.com|fwcdn1.com|fwdcdn.com|gcdn.co|getsitecontrol.com|gismeteo.ru|github.io|gitlab.io|google-analytics.com|google.com|googleadservices.com|googleapis.com|googleoptimize.com|googletagmanager.com|googletagservices.com|gravatar.com|gravitec.media|gravitec.net|gstatic.com|hcaptcha.com|hupso.com|hwcdn.net|hypercomments.com|ibytedtos.com|imgsmail.ru|imgur.com|informers.ukr.net|instagram.com|intensedebate.com|intercom.io|intercomcdn.com|intravideo.net|issuu.com|ivideon.com|jivosite.com|jquery.com|js-agent.newrelic.com|jsdelivr.net|jsonip.com|jwpcdn.com|jwplatform.com|keycaptcha.com|kin-x.com|kinogram.best|kinohod.ru|kinoplayer.co|kinotreiler.com|kitbit.net|kodik-add.com|kodikapi.com|libria.fun|licdn.com|likebtn.com|linkedin.com|lp4.io|mail.ru|mailchimp.com|mapbox.com|media-imdb.com|media.reformal.ru|mediator.media|meteobar.com|meteonova.ru|mirtesen.ru|netdna-cdn.com|ngenix.net|nuipogoda.ru|odnaknopka.ru|odnoklassniki.ru|ok.ru|oneall.com|onesignal.com|onthe.io|parastorage.com|phnx.click|piktochart.com|pinterest.com|pixars.org|platformcraft.ru|playbuzz.com|player|player.panda.video|pljs.ru|plrjs.com|pluso.ru|plyr.io|polldaddy.com|polyfill.io|pv.pjtsu.com|quiz.ink|raincaptcha.com|readymag.com|recaptcha.net|relap.io|ren.tv|renteres.ru|rumer.club|s5o.ru|securedtouch.com|selcdn.net|sendpulse.com|sentry-cdn.com|shareaholic.com|shareaholic.net|sharethis.com|shrink.pe|sinoptik.ua|source.mmi.bemobile.ua|sporcle.com|sportradar.com|sportrecs.com|sports.ru|stackpathcdn.com|static.addtoany.com|statically.io|streamvid.club|telegram.im|telegram.org|tenews.org.ua|tenews.te.ua|tiktok.com|tilda.ws|tildacdn.com|tns-counter.ru|tolstoycomments.com|traq.li|trbcdn.net|trbna.com|ttrace.ru|ttwstatic.com|tumblr.com|tvget.ru|tvsok.ru|twimg.com|twitter.com|typekit.net|uanews.org.ua|unpkg.com|uptolike.com|userapi.com|usocial.pro|uweb.ru|vicomi.com|vidazoo.com|videocdn.tv|videoplayers.club|viglink.com|viqeo.tv|vk.com|vkontakte.ru|vuukle.com|webflow.com|weblium.com|weblium.site|widget.speechki.org|widget.vp.ru|widgets.getpocket.com|world-weather.ru|wp.com|yabber.cloud|yandex.ru|yandex.st|yastatic.net|yohoho.cc|yohoho.online|yoomoney.ru|yourwebsite.life|youtube-nocookie.com|youtube.com|ytimg.com|zencdn.net)).*$
+ Unsupported modifier exception
+ Unsupported modifier exception
+CSS-generic: 318 plain CSS selectors
+CSS-generic-high: 461 plain CSS selectors
+CSS-specific: 9772 distinct filters
+ Combined into 7075 distinct hostnames
+ Combined into 0 distinct entities
+CSS-declarative: 904 distinct filters
+ Combined into 876 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 271 distinct combined selectors
+ Combined into 336 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'spa-0':
+ Fetching remote https://easylist-downloads.adblockplus.org/easylistspanish.txt
+Input filter count: 1115
+ Accepted filter count: 1115
+ Rejected filter count: 0
+Output rule count: 642
+ Plain good: 634
+
+ Maybe good (regexes): 8
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+CSS-generic: 243 plain CSS selectors
+CSS-generic-high: 15 plain CSS selectors
+CSS-specific: 1469 distinct filters
+ Combined into 1198 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 26 distinct combined selectors
+ Combined into 25 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'spa-1':
+ Fetching remote https://filters.adtidy.org/extension/ublock/filters/9.txt
+Input filter count: 1393
+ Accepted filter count: 1387
+ Rejected filter count: 0
+Output rule count: 958
+ Plain good: 921
+ Salvaged rule by ignoring 1 entity-based domain= option: pelisplushd.net|cuevana3.*
+ Maybe good (regexes): 6
+ redirect=: 27
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 4
+ Can't salvage rule with only entity-based domain= option: netcine.*
+ Can't salvage rule with only entity-based domain= option: netcine.*
+ regexFilter is not RE2-compatible: ^(?!.*(sharecast.ws|bunnycdn.ru|bootstrapcdn.com|cdn.ampproject.org|cloudflare.com|cdn.staticfile.org|disqus.com|disquscdn.com|dmca.com|ebacdn.com|facebook.net|fastlylb.net|fbcdn.net|fluidplayer.com|fontawesome.com|github.io|google.com|googleapis.com|googletagmanager.com|gstatic.com|jquery.com|jsdelivr.net|jwpcdn.com|jwplatform.com|polyfill.io|recaptcha.net|shrink.pe|twitter.com|ulogin.ru|unpkg.com|userapi.com|vidazoo.com|vk.com|yandex.|yastatic.net|ytimg.com|zencdn.net|player|youtube.com|cackle.me|googleoptimize.com|vuukle.com|chatango.com|twimg.com|google-analytics.com|hcaptcha.com|raincaptcha.com|media-imdb.com|blogger.com|hwcdn.net|instagram.com|wp.com|imgsmail.ru)).*$
+ Can't salvage rule with only entity-based domain= option: anitube.*
+CSS-generic: 84 plain CSS selectors
+CSS-specific: 2526 distinct filters
+ Combined into 1464 distinct hostnames
+ Combined into 6 distinct entities
+CSS-declarative: 99 distinct filters
+ Combined into 149 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 70 distinct combined selectors
+ Combined into 65 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'svn-0':
+ Fetching remote https://raw.githubusercontent.com/betterwebleon/slovenian-list/master/filters.txt
+Input filter count: 148
+ Accepted filter count: 148
+ Rejected filter count: 0
+Output rule count: 100
+ Plain good: 100
+
+ Maybe good (regexes): 0
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+CSS-generic: 4 plain CSS selectors
+CSS-specific: 332 distinct filters
+ Combined into 148 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 2 distinct combined selectors
+ Combined into 2 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'swe-1':
+ Fetching remote https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/master/Frellwits-Swedish-Filter.txt
+ Fetching remote https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/master/Swedish/swe-ubo-filters.txt
+ Fetching remote https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/master/Swedish/chromium.txt
+ Fetching remote https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/master/Swedish/not_mobile.txt
+Input filter count: 1663
+ Accepted filter count: 1663
+ Rejected filter count: 0
+Output rule count: 1241
+ Plain good: 1219
+
+ Maybe good (regexes): 2
+ redirect=: 10
+ removeparams= (accepted/discarded): 5/3
+ modifyHeaders=: 2
+ Unsupported: 3
+ Unsupported regex-based removeParam: /^ap/
+ Unsupported regex-based removeParam: /^browser/
+ Unsupported regex-based removeParam: /^utm_/
+CSS-generic: 271 plain CSS selectors
+CSS-generic-high: 44 plain CSS selectors
+CSS-specific: 661 distinct filters
+ Combined into 1130 distinct hostnames
+ Combined into 1 distinct entities
+CSS-declarative: 79 distinct filters
+ Combined into 211 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 374 distinct combined selectors
+ Combined into 324 distinct hostnames
+ Combined into 1 distinct entities
+============================
+Listset for 'tha-0':
+ Fetching remote https://raw.githubusercontent.com/easylist-thailand/easylist-thailand/master/subscription/easylist-thailand.txt
+ Fetching remote https://raw.githubusercontent.com/easylist-thailand/easylist-thailand/master/subscription/ublock.txt
+Input filter count: 760
+ Accepted filter count: 760
+ Rejected filter count: 0
+Output rule count: 750
+ Plain good: 746
+
+ Maybe good (regexes): 2
+ redirect=: 2
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+CSS-generic-high: 5 plain CSS selectors
+CSS-specific: 614 distinct filters
+ Combined into 166 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 14 distinct combined selectors
+ Combined into 11 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'tur-0':
+ Fetching remote https://filters.adtidy.org/extension/ublock/filters/13.txt
+Input filter count: 1779
+ Accepted filter count: 1778
+ Rejected filter count: 0
+Output rule count: 1338
+ Plain good: 1297
+ Salvaged rule by ignoring 1 entity-based domain= option: ajans32.com|asyadiziizle.com|balfilmizle1.com|birasyadizi.com|buyuktorbali.com|dizilost.com|duzcetv.com|erotikfilmtube.com|erotikizlefilm.com|ertehaber.com|filmjr1.com|filmsezonu.com|haber32.com.tr|haberant.com|jokerfilmizle.com|kozfilm.com|malatyamegahaber.com|medya32.com|sexfilmleriizle.com|sinemangoo.org|technopat.net|unyenethaber.com|zerotikk.com|dizicaps.*
+ Salvaged rule by ignoring 1 entity-based domain= option: fullhdfilm.pro|fullhdfilmizle5.*
+ Salvaged rule by ignoring 1 entity-based domain= option: turkcealtyazi.org|filmmakinesi.*
+ Salvaged rule by ignoring 1 entity-based domain= option: cdn.diziyou.co|geyvemedya.com|hdfilmcehennemi2.*
+ Salvaged rule by ignoring 1 entity-based domain= option: forum.donanimhaber.com|mp3indirdur.mobi|setfilmizle.*
+ Maybe good (regexes): 14
+ redirect=: 17
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 10
+ Can't salvage rule with only entity-based domain= option: filmizletv.*
+ Can't salvage rule with only entity-based domain= option: fullhdfilmizle5.*
+ Can't salvage rule with only entity-based domain= option: jetfilmizle.*
+ Can't salvage rule with only entity-based domain= option: siyahfilmizle.*
+ Can't salvage rule with only entity-based domain= option: fullhdfilmizlesene.*
+ Can't salvage rule with only entity-based domain= option: filmmakinesi.*
+ regexFilter is not RE2-compatible: yenihaberden.com\/d\/other\/(?!yeni-haber-youtube)
+ Can't salvage rule with only entity-based domain= option: yabancidizi.*
+ regexFilter is not RE2-compatible: ^(?!.*(sharecast.ws|bunnycdn.ru|bootstrapcdn.com|cdn.ampproject.org|cloudflare.com|cdn.staticfile.org|disqus.com|disquscdn.com|dmca.com|ebacdn.com|facebook.net|fastlylb.net|fbcdn.net|fluidplayer.com|fontawesome.com|github.io|google.com|googleapis.com|googletagmanager.com|gstatic.com|jquery.com|jsdelivr.net|jwpcdn.com|jwplatform.com|polyfill.io|recaptcha.net|shrink.pe|twitter.com|ulogin.ru|unpkg.com|userapi.com|vidazoo.com|vk.com|yandex.|yastatic.net|ytimg.com|zencdn.net|player|youtube.com|cackle.me|googleoptimize.com|vuukle.com|chatango.com|twimg.com|google-analytics.com|hcaptcha.com|raincaptcha.com|media-imdb.com|blogger.com|hwcdn.net|instagram.com|wp.com|imgsmail.ru)).*$
+ Can't salvage rule with only entity-based domain= option: filmizletv.*
+CSS-generic: 146 plain CSS selectors
+CSS-generic-high: 60 plain CSS selectors
+CSS-specific: 3395 distinct filters
+ Combined into 2763 distinct hostnames
+ Combined into 40 distinct entities
+CSS-declarative: 169 distinct filters
+ Combined into 558 distinct hostnames
+ Combined into 22 distinct entities
+Procedural-related distinct filters: 159 distinct combined selectors
+ Combined into 128 distinct hostnames
+ Combined into 3 distinct entities
+============================
+Listset for 'vie-1':
+ Fetching remote https://raw.githubusercontent.com/abpvn/abpvn/master/filter/abpvn_ublock.txt
+Input filter count: 567
+ Accepted filter count: 567
+ Rejected filter count: 0
+Output rule count: 467
+ Plain good: 455
+
+ Maybe good (regexes): 4
+ redirect=: 5
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 3
+ Unsupported: 0
+
+CSS-generic: 10 plain CSS selectors
+CSS-generic-high: 4 plain CSS selectors
+CSS-specific: 769 distinct filters
+ Combined into 439 distinct hostnames
+ Combined into 0 distinct entities
+CSS-declarative: 4 distinct filters
+ Combined into 14 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 4 distinct combined selectors
+ Combined into 3 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'block-lan':
+ Fetching remote https://ublockorigin.github.io/uAssets/filters/lan-block.txt
+Input filter count: 48
+ Accepted filter count: 48
+ Rejected filter count: 0
+Output rule count: 12
+ Plain good: 5
+
+ Maybe good (regexes): 7
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+============================
+Listset for 'dpollock-0':
+ Fetching remote https://someonewhocares.org/hosts/hosts
+Input filter count: 11543
+ Accepted filter count: 11542
+ Rejected filter count: 0
+Output rule count: 1
+ Pruning requestDomains: from 11542 to 9296
+ Plain good: 1
+
+ Maybe good (regexes): 0
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+============================
+Listset for 'adguard-spyware-url':
+ Fetching remote https://filters.adtidy.org/extension/ublock/filters/17.txt
+Input filter count: 1186
+ Accepted filter count: 1183
+ Rejected filter count: 0
+Output rule count: 448
+ Plain good: 0
+
+ Maybe good (regexes): 0
+ redirect=: 0
+ removeparams= (accepted/discarded): 367/81
+ modifyHeaders=: 0
+ Unsupported: 81
+ Unsupported regex-based removeParam: /^cm_mmc/
+ Unsupported regex-based removeParam: /^__s=[A-Za-z0-9]{6\,}/
+ Unsupported regex-based removeParam: /^via%3D/
+ Unsupported regex-based removeParam: /ga[ct]id/
+ Unsupported regex-based removeParam: /param[0-9]{1}|utm_si|matchtype|device|creative|keyword|placement|adposition|campaignid|adgroupid|feeditemid|targetid|loc_|searchtype|network|search_pos|cat_pos|block|position/
+ Unsupported regex-based removeParam: /pfx|adj/
+ Unsupported regex-based removeParam: /^event_callback_/
+ Unsupported regex-based removeParam: /elq/
+ Unsupported regex-based removeParam: /utm_/
+ Unsupported regex-based removeParam: /web_only|_branch_referrer/
+ Unsupported regex-based removeParam: /premiumVisit|utm_compaign/
+ Unsupported regex-based removeParam: /utm_partner_id|frommail/
+ Unsupported regex-based removeParam: /^(udid|DeviceID|ver|appbuild|vendor|model|device_name|device_type|instanceid|device_year|connection_class|appsflyerid)/
+ Unsupported regex-based removeParam: /^cd\d+/
+ Unsupported regex-based removeParam: /^subid/
+ Unsupported regex-based removeParam: /^mkt_tok/
+ Unsupported regex-based removeParam: /fx_(source|medium|campaign)/
+ Unsupported regex-based removeParam: /^ref_/
+ Unsupported regex-based removeParam: /^cx_/
+ Unsupported regex-based removeParam: /^pickup_list_click/
+ Unsupported regex-based removeParam: /distributorid|wfr|ifr|share_relation/
+ Unsupported regex-based removeParam: /cUrl|ref/
+ Unsupported regex-based removeParam: /topicPageSponsorship|^itm_/
+ Unsupported regex-based removeParam: /^utm_/
+ Unsupported regex-based removeParam: /^trk/
+ Unsupported regex-based removeParam: /^utm_cid/
+ Unsupported regex-based removeParam: /entries/
+ Unsupported regex-based removeParam: /Version/
+ Unsupported regex-based removeParam: /^at_custom/
+ Unsupported regex-based removeParam: /mcorgid|mid|ts/
+ Unsupported regex-based removeParam: /^dc_trk_/
+ Unsupported regex-based removeParam: /^(ppref|ref|pid)=/
+ Unsupported regex-based removeParam: /^subid/
+ Unsupported regex-based removeParam: /^(_requestid|reff)=/
+ Unsupported regex-based removeParam: /^affExtParam/
+ Unsupported regex-based removeParam: /^otracker/
+ Unsupported regex-based removeParam: /spm=|scm=|from=|keyori=|sugg=|search=|mp=|c=|^abtest|^abbucket|pos=|themeID=|algArgs=|clickTrackInfo=|acm=|item_id=|version=|up_id=|pvid=/
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported modifier exception
+ Unsupported regex-based removeParam: /^\/_ui\/desktop\/common\/js\/uiAnalytics\//
+ Unsupported regex-based removeParam: /_ui\/shared\/common\/js\/analytics\/with-intersection-track.js/
+ Unsupported regex-based removeParam: /_ui\/shared\/common\/js\/InappCommunicationManager.js/
+ Unsupported regex-based removeParam: /_ui\/shared\/common\/js\/util\/jquery.analytics-utils.js/
+ Unsupported regex-based removeParam: /^(device|country|path)=/
+ Unsupported regex-based removeParam: /cdt|ref/
+ Unsupported regex-based removeParam: ~/^(primer|subset_id)=/
+ Unsupported regex-based removeParam: /tour|campaign/
+ Unsupported modifier exception
+CSS-specific: 1 distinct filters
+ Combined into 3 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'annoyances-cookies':
+ Fetching remote https://ublockorigin.github.io/uAssets/thirdparties/easylist-cookies.txt
+ Fetching remote https://ublockorigin.github.io/uAssets/filters/annoyances-cookies.txt
+Input filter count: 2000
+ Accepted filter count: 1997
+ Rejected filter count: 0
+Output rule count: 1691
+ Plain good: 1690
+
+ Maybe good (regexes): 1
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+CSS-generic: 16939 plain CSS selectors
+CSS-generic-high: 351 plain CSS selectors
+CSS-specific: 5385 distinct filters
+ Combined into 16378 distinct hostnames
+ Combined into 1 distinct entities
+CSS-declarative: 66 distinct filters
+ Combined into 5469 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 7 distinct combined selectors
+ Combined into 17 distinct hostnames
+ Combined into 0 distinct entities
+============================
+Listset for 'annoyances-overlays':
+ Fetching remote https://filters.adtidy.org/extension/ublock/filters/19.txt
+ Fetching remote https://ublockorigin.github.io/uAssets/filters/annoyances-others.txt
+Input filter count: 2483
+ Accepted filter count: 2481
+ Rejected filter count: 0
+Output rule count: 1520
+ Pruning requestDomains: from 530 to 529
+ Plain good: 1454
+
+ Maybe good (regexes): 3
+ redirect=: 52
+ removeparams= (accepted/discarded): 1/0
+ modifyHeaders=: 6
+ Unsupported: 4
+ Can't salvage rule with only entity-based domain= option: gmx.*
+ regexFilter is not RE2-compatible: ^https:\/\/[0-9a-z]{7,25}\.com\/v2(?:\/0\/)?(?=[0-9a-z_-]{0,84}[A-Z])(?=[a-zA-Z_-]{0,84}[0-9])[0-9a-zA-Z_-]{54,85}(#\?v=[0-9a-f]{32})?$
+ regexFilter is not RE2-compatible: ^https:\/\/[0-9a-z]{7,25}\.com\/v2(?:\/0\/)?(?=[0-9a-z_-]{0,84}[A-Z])(?=[a-zA-Z_-]{0,84}[0-9])[0-9a-zA-Z_-]{54,85}(#\?v=[0-9a-f]{32})?$
+ regexFilter is not RE2-compatible: ^https:\/\/[0-9a-z]{7,25}\.com\/v2(?:\/0\/)?(?=[0-9a-z_-]{0,84}[A-Z])(?=[a-zA-Z_-]{0,84}[0-9])[0-9a-zA-Z_-]{54,85}(#\?v=[0-9a-f]{32})?$
+CSS-generic: 35 plain CSS selectors
+CSS-generic-high: 3 plain CSS selectors
+CSS-specific: 10701 distinct filters
+ Combined into 10527 distinct hostnames
+ Combined into 68 distinct entities
+CSS-declarative: 610 distinct filters
+ Combined into 2227 distinct hostnames
+ Combined into 25 distinct entities
+Procedural-related distinct filters: 377 distinct combined selectors
+ Combined into 758 distinct hostnames
+ Combined into 7 distinct entities
+============================
+Listset for 'annoyances-social':
+ Fetching remote https://filters.adtidy.org/extension/ublock/filters/4.txt
+Input filter count: 643
+ Accepted filter count: 643
+ Rejected filter count: 0
+Output rule count: 544
+ Plain good: 541
+
+ Maybe good (regexes): 0
+ redirect=: 1
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 2
+ regexFilter is not RE2-compatible: \/icons_addtoany\/(?!a2a|bookmark|print)[a-z]+
+ Can't salvage rule with only entity-based domain= option: freelancer.*
+CSS-generic: 753 plain CSS selectors
+CSS-generic-high: 86 plain CSS selectors
+CSS-specific: 10807 distinct filters
+ Combined into 11984 distinct hostnames
+ Combined into 63 distinct entities
+CSS-declarative: 115 distinct filters
+ Combined into 204 distinct hostnames
+ Combined into 7 distinct entities
+Procedural-related distinct filters: 514 distinct combined selectors
+ Combined into 563 distinct hostnames
+ Combined into 4 distinct entities
+============================
+Listset for 'annoyances-widgets':
+ Fetching remote https://filters.adtidy.org/extension/ublock/filters/22.txt
+Input filter count: 665
+ Accepted filter count: 665
+ Rejected filter count: 0
+Output rule count: 432
+ Plain good: 432
+
+ Maybe good (regexes): 0
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+CSS-generic: 25 plain CSS selectors
+CSS-generic-high: 7 plain CSS selectors
+CSS-specific: 1014 distinct filters
+ Combined into 981 distinct hostnames
+ Combined into 2 distinct entities
+CSS-declarative: 15 distinct filters
+ Combined into 14 distinct hostnames
+ Combined into 0 distinct entities
+Procedural-related distinct filters: 73 distinct combined selectors
+ Combined into 54 distinct hostnames
+ Combined into 1 distinct entities
+============================
+Listset for 'annoyances-others':
+ Fetching remote https://filters.adtidy.org/extension/ublock/filters/21.txt
+Input filter count: 427
+ Accepted filter count: 427
+ Rejected filter count: 0
+Output rule count: 398
+ Plain good: 393
+
+ Maybe good (regexes): 2
+ redirect=: 1
+ removeparams= (accepted/discarded): 2/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
+CSS-generic: 6 plain CSS selectors
+CSS-specific: 3598 distinct filters
+ Combined into 3352 distinct hostnames
+ Combined into 33 distinct entities
+CSS-declarative: 391 distinct filters
+ Combined into 937 distinct hostnames
+ Combined into 5 distinct entities
+Procedural-related distinct filters: 169 distinct combined selectors
+ Combined into 144 distinct hostnames
+ Combined into 3 distinct entities
+============================
+Listset for 'stevenblack-hosts':
+ Fetching remote https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
+Input filter count: 210426
+ Accepted filter count: 210426
+ Rejected filter count: 0
+Output rule count: 1
+ Pruning requestDomains: from 210426 to 108459
+ Plain good: 1
+
+ Maybe good (regexes): 0
+ redirect=: 0
+ removeparams= (accepted/discarded): 0/0
+ modifyHeaders=: 0
+ Unsupported: 0
+
diff --git a/dist/version b/dist/version
new file mode 100644
index 0000000..094d6ad
--- /dev/null
+++ b/dist/version
@@ -0,0 +1 @@
+1.55.0
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 0000000..6e0353f
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,3 @@
+## uBlock Origin pages
+
+HTML: <https://gorhill.github.io/uBlock/>. \ No newline at end of file
diff --git a/docs/index.html b/docs/index.html
new file mode 100644
index 0000000..eccb4f7
--- /dev/null
+++ b/docs/index.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>uBlock Origin pages</title>
+</head>
+<body>
+<h1>uBlock Origin pages</h1>
+<ul>
+ <li><a href="tests/">Tests</a>
+</ul>
+</body>
+</html>
diff --git a/docs/tests/css-selector-based-cosmetic-filters.html b/docs/tests/css-selector-based-cosmetic-filters.html
new file mode 100644
index 0000000..9c19981
--- /dev/null
+++ b/docs/tests/css-selector-based-cosmetic-filters.html
@@ -0,0 +1,150 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>CSS selector-based cosmetic filters</title>
+<style>
+ .filters {
+ font-family: monospace;
+ white-space: pre;
+ }
+ .tests {
+ align-items: flex-start;
+ display: flex;
+ flex-wrap: wrap;
+ }
+ .tile {
+ display: inline-flex;
+ flex-direction: column;
+ margin: 0 20px 10px 0;
+ min-width: 200px;
+ }
+ .tile div {
+ align-items: center;
+ color: white;
+ display: flex;
+ justify-content: center;
+ }
+ .tile > div {
+ height: 50px;
+ position: relative;
+ }
+ .tile > div > div {
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+ }
+ .tile > code {
+ align-self: center;
+ }
+ .pass {
+ background-color: green;
+ }
+ .pass::before {
+ content: 'pass';
+ }
+ .fail {
+ background-color: red;
+ }
+ .fail::before {
+ content: 'fail';
+ }
+ .tests a, .tests b {
+ display: none;
+ }
+ .tests a::before {
+ opacity: 0;
+ }
+ .tests b::after {
+ opacity: 0;
+ }
+ .fail-pseudo::before {
+ align-items: center;
+ background-color: red;
+ content: 'fail';
+ display: flex;
+ height: 100%;
+ justify-content: center;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+ }
+</style>
+</head>
+<body>
+<h1>CSS selector-based cosmetic filters</h1>
+<p><a href="./.">Back</a>
+<br><br></p>
+<h3>Filters</h3>
+<div class="filters"><noscript>Enable JavaScript to see needed filters</noscript></div>
+
+<h3>Tests</h3>
+<div id="ccf" class="tests">
+
+<div id="a1" class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code class="generic">#ccf #a1 .fail</code>
+ </div>
+
+<div id="a2" class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code class="generic">#ccf #a2 .fail:not(.a2)</code>
+ </div>
+
+<div id="a3" class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code>#ccf #a3 .fail</code>
+ </div>
+
+<div id="a4" class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code>#ccf #a4 .fail:not(.a4)</code>
+ </div>
+
+<div id="a5" class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code>#ccf #a5 .fail:style(visibility: hidden)</code>
+ </div>
+
+<div id="a6" class="tile">
+ <div class="pass"><div class="fail-pseudo"><a><b></b></a></div></div>
+ <code class="generic">#ccf #a6 .fail-pseudo::before</code>
+ </div>
+
+<div id="a7" class="tile">
+ <div class="pass"><div class="fail-pseudo"><a><b></b></a></div></div>
+ <code>#ccf #a7 .fail-pseudo::before</code>
+ </div>
+
+<div id="a8" class="tile">
+ <div class="pass"><div class="fail-pseudo"><a><b></b></a></div></div>
+ <code>#ccf #a8 .fail-pseudo::before:style(visibility: hidden)</code>
+ </div>
+
+</div>
+
+<script>
+ const hostname = self.location.hostname;
+ const filters = [];
+ const fragment = document.createDocumentFragment();
+ for ( const node of document.querySelectorAll('code') ) {
+ const div = document.createElement('div');
+ let text = '##' + node.textContent;
+ if ( node.classList.contains('generic') === false ) {
+ text = hostname + text;
+ }
+ div.textContent = text;
+ fragment.appendChild(div);
+ }
+ const parent = document.querySelector('.filters');
+ while ( parent.lastElementChild !== null ) {
+ parent.removeChild(parent.lastElementChild);
+ }
+ parent.appendChild(fragment);
+</script>
+</body>
+</html>
diff --git a/docs/tests/hnbigset-benchmark.html b/docs/tests/hnbigset-benchmark.html
new file mode 100644
index 0000000..6816f4f
--- /dev/null
+++ b/docs/tests/hnbigset-benchmark.html
@@ -0,0 +1,268 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+</head>
+<body style="font: 14px sans-serif">
+<h1>Benchmark of hostname-lookup from small to large set:<br>Set, HNTrie</h1>
+<p><a href="./.">Back</a></p>
+<p>&nbsp;</p>
+<p><button id="createBenchmark">Creation</button> <button id="lookupBenchmark">Lookup</button></p>
+<div id="results-0" style="white-space:pre;font-family:mono"></div>
+<div id="results-1" style="white-space:pre;font-family:mono"></div>
+<div id="results-2" style="white-space:pre;font-family:mono"></div>
+<div id="results-3" style="white-space:pre;font-family:mono"></div>
+<div id="results-4" style="white-space:pre;font-family:mono"></div>
+<div id="results-5" style="white-space:pre;font-family:mono"></div>
+<div id="results-6" style="white-space:pre;font-family:mono"></div>
+
+<script src="https://rawcdn.githack.com/gorhill/uBlock/1b6fea16da81d1df3e2efd5a31894f71ea04dbb1/src/js/hntrie.js"></script>
+<!-- <script src="../../src/js/hntrie.js"></script> -->
+<script src="hostname-pool.js"></script>
+
+<script src="https://cdn.jsdelivr.net/lodash/4.17.2/lodash.min.js"></script>
+<script src="https://cdn.jsdelivr.net/platform.js/1.3.3/platform.js"></script>
+<script src="https://cdn.jsdelivr.net/benchmarkjs/2.1.2/benchmark.js"></script>
+<script>
+const randomHostname = function() {
+ return hostnamePool[Math.floor(Math.random() * hostnamePool.length)];
+};
+
+const randomNeedle = function() {
+ let needle = randomHostname();
+ const pos = needle.lastIndexOf('.');
+ if ( pos !== -1 ) {
+ needle = Math.random().toString(36).slice(2) + needle.slice(pos);
+ }
+ if ( Math.random() < 0.5 ) {
+ needle = Math.random().toString(36).slice(2, 6) + '.' + needle;
+ }
+ return needle;
+};
+
+// Create hostname dictionary of all sizes (from 2 to 1024 at most)
+const hostnameLists = (function() {
+ const dicts = [];
+ let n = hostnamePool.length;
+ while ( n > 1 ) {
+ const dict = [];
+ for ( let i = 0; i < n; i++ ) {
+ dict.push(randomHostname());
+ }
+ dicts.unshift(dict);
+ n = n >>> 2;
+ }
+ return dicts;
+})();
+
+/******************************************************************************/
+
+var setBasedDictCreate = function(hostnames) {
+ return new Set(hostnames);
+};
+
+var setBasedDictTest = function(haystack, needle) {
+ for (;;) {
+ if ( haystack.has(needle) ) { return true; }
+ const pos = needle.indexOf('.');
+ if ( pos === -1 ) { break; }
+ needle = needle.slice(pos + 1);
+ }
+ return false;
+};
+
+/******************************************************************************/
+
+const hnBigTrieJS = new HNTrieContainer();
+const hnBigTrieWASM = new HNTrieContainer();
+
+const trieBasedDictCreateJS = function(hostnames) {
+ return hnBigTrieJS.fromIterable(hostnames, 'addJS');
+}
+
+const trieBasedDictTest = function(haystack, needle) {
+ return haystack.matchesJS(needle);
+};
+
+const trieBasedDictCreateWASM = function(hostnames) {
+ return hnBigTrieWASM.fromIterable(hostnames, 'addWASM');
+}
+
+const trieBasedDictTestWASM = function(haystack, needle) {
+ return haystack.matchesWASM(needle);
+};
+
+/******************************************************************************/
+
+const gBenchmarks = [ null ];
+let gWhich;
+
+/******************************************************************************/
+
+function stdout(which, text) {
+ if ( which > 0 ) {
+ which = ((which - 1) % 3) + 1;
+ }
+ var r = document.querySelector('#results-' + which);
+ if ( text === '' ) {
+ r.innerHTML = '';
+ } else {
+ r.innerHTML += text;
+ }
+}
+
+function doBenchmark(which) {
+ stdout(0, '');
+ stdout(0, 'Benchmarking, the higher ops/sec the better.\n');
+ stdout(0, Benchmark.platform.toString() + '.');
+ stdout(0, '\n\n');
+ stdout(1, '');
+ stdout(2, '');
+ stdout(3, '');
+ gWhich = which;
+ gBenchmarks[gWhich].run({ 'async': true });
+}
+
+function nextBenchmark() {
+ stdout(gWhich, 'Done.\n\n');
+ gWhich += 1;
+ var bms = gBenchmarks[gWhich];
+ if ( bms ) {
+ bms.run({ 'async': true });
+ }
+}
+
+function exitBenchmark() {
+ stdout(gWhich, 'Done.\n\n');
+}
+
+/******************************************************************************/
+
+function initBenchmarks() {
+ gBenchmarks.push((function() {
+ let dicts = [];
+ let bigTrieDictsSerialized;
+
+ const createDict = function(fn) {
+ const out = [];
+ for ( let i = 0; i < hostnameLists.length; i++ ) {
+ out[i] = fn(hostnameLists[i]);
+ }
+ return out;
+ };
+
+ var bms = new Benchmark.Suite();
+ bms.add(' - Set-based', function() {
+ dicts = createDict(setBasedDictCreate);
+ }).add(' - Trie-based JS (3rd-gen)', function() {
+ hnBigTrieJS.reset();
+ dicts = createDict(trieBasedDictCreateJS);
+ });
+ if ( hnBigTrieWASM.addWASM !== null ) {
+ bms.add(' - Trie-based WASM (3rd-gen)', function() {
+ hnBigTrieWASM.reset();
+ dicts = createDict(trieBasedDictCreateWASM);
+ });
+ }
+ bms.add(' - Trie-based unserialized (3rd-gen)', function() {
+ hnBigTrieJS.reset();
+ hnBigTrieJS.unserialize(bigTrieDictsSerialized);
+ }).on('start', function() {
+ hnBigTrieJS.reset();
+ createDict(trieBasedDictCreateJS);
+ bigTrieDictsSerialized = hnBigTrieJS.serialize();
+ stdout(gWhich, '');
+ stdout(gWhich, 'Create dictionaries\n');
+ }).on('cycle', function(event) {
+ stdout(gWhich, String(event.target) + '\n');
+ }).on('complete', function() {
+ dicts = [];
+ bigTrieDictsSerialized = undefined;
+ exitBenchmark();
+ });
+
+ return bms;
+ })());
+
+ const lookupCount = 100;
+
+ gBenchmarks.push((function() {
+ const bms = new Benchmark.Suite();
+ const needles = [];
+
+ let setDicts = [];
+ let bigTrieDicts = [];
+ let results;
+
+ const lookupDict = function(dicts, fn) {
+ for ( let i = 0; i < needles.length; i++ ) {
+ const needle = needles[i];
+ for ( const dict of dicts ) {
+ results[i] = fn(dict, needle);
+ }
+ }
+ };
+
+ bms.add(' - Set-based', function() {
+ lookupDict(setDicts, setBasedDictTest);
+ }).add(' - Trie-based JS (3rd-gen)', function() {
+ lookupDict(bigTrieDicts, trieBasedDictTest);
+ });
+ if ( hnBigTrieWASM.matchesWASM !== null ) {
+ bms.add(' - Trie-based WASM (3rd-gen)', function() {
+ lookupDict(bigTrieDicts, trieBasedDictTestWASM);
+ })
+ }
+ bms.on('start', function() {
+ for ( let i = 0; i < lookupCount; i++ ) {
+ needles[i] = randomNeedle();
+ }
+ setDicts = [];
+ bigTrieDicts = [];
+ results = [];
+ hnBigTrieJS.reset();
+ for ( const hostnameList of hostnameLists ) {
+ setDicts.push(setBasedDictCreate(hostnameList));
+ bigTrieDicts.push(trieBasedDictCreateJS(hostnameList));
+ }
+ hnBigTrieJS.optimize();
+ stdout(gWhich, '');
+ stdout(
+ gWhich,
+ 'Test ' + lookupCount +
+ ' needles against ' + setDicts.length +
+ ' dictionaries with size between ' + hostnameLists[0].length +
+ ' and ' + hostnameLists[hostnameLists.length-1].length +
+ ' hostnames\n'
+ );
+ }).on('cycle', function(event) {
+ stdout(gWhich, String(event.target) + '\n');
+ }).on('complete', ( ) => {
+ setDicts = bigTrieDicts = results = [];
+ hnBigTrieJS.reset();
+ exitBenchmark();
+ });
+
+ return bms;
+ })());
+}
+
+/******************************************************************************/
+
+Promise.all([
+ hnBigTrieJS.readyToUse(),
+ hnBigTrieWASM.readyToUse()
+]).then(( ) => {
+ initBenchmarks();
+});
+
+document.getElementById('createBenchmark').onclick = function() {
+ doBenchmark(1);
+};
+document.getElementById('lookupBenchmark').onclick = function() {
+ doBenchmark(2);
+};
+</script>
+</body>
+</html>
diff --git a/docs/tests/hnset-benchmark.html b/docs/tests/hnset-benchmark.html
new file mode 100644
index 0000000..694a620
--- /dev/null
+++ b/docs/tests/hnset-benchmark.html
@@ -0,0 +1,424 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+</head>
+<body style="font: 14px sans-serif">
+<h1>Benchmark of hostname-lookup from small to medium set:<br>Set, RegExp, HNTrie</h1>
+<p><a href="./.">Back</a></p>
+<p>&nbsp;</p>
+<p><button id="createBenchmark">Creation</button> <button id="lookupBenchmark">Lookup</button></p>
+<div id="results-0" style="white-space:pre;font-family:mono"></div>
+<div id="results-1" style="white-space:pre;font-family:mono"></div>
+<div id="results-2" style="white-space:pre;font-family:mono"></div>
+<div id="results-3" style="white-space:pre;font-family:mono"></div>
+<div id="results-4" style="white-space:pre;font-family:mono"></div>
+<div id="results-5" style="white-space:pre;font-family:mono"></div>
+<div id="results-6" style="white-space:pre;font-family:mono"></div>
+
+<script src="https://rawcdn.githack.com/gorhill/uBlock/e83ffde5af29bd44ae529c5a60e2506970e7af34/src/js/hntrie.js"></script>
+<script src="https://rawcdn.githack.com/gorhill/uBlock/c3b0fd31f64bd7ffecdd282fb1208fe07aac3eb0/src/js/hntrie.js"></script>
+<script src="https://rawcdn.githack.com/gorhill/uBlock/1b6fea16da81d1df3e2efd5a31894f71ea04dbb1/src/js/hntrie.js"></script>
+<!-- <script src="../../src/js/hntrie.js"></script> -->
+<script src="hostname-pool.js"></script>
+
+<script src="https://cdn.jsdelivr.net/lodash/4.17.2/lodash.min.js"></script>
+<script src="https://cdn.jsdelivr.net/platform.js/1.3.3/platform.js"></script>
+<script src="https://cdn.jsdelivr.net/benchmarkjs/2.1.2/benchmark.js"></script>
+<script>
+const randomHostname = function() {
+ return hostnamePool[Math.floor(Math.random() * hostnamePool.length)];
+};
+
+const randomNeedle = function() {
+ let needle = randomHostname();
+ const pos = needle.lastIndexOf('.');
+ if ( pos !== -1 ) {
+ needle = Math.random().toString(36).slice(2) + needle.slice(pos);
+ }
+ if ( Math.random() < 0.5 ) {
+ needle = Math.random().toString(36).slice(2, 6) + '.' + needle;
+ }
+ return needle;
+};
+
+// Create "domain=" sets of all sizes (from 2 to 1024 at most)
+const domainOpts = (function() {
+ const domainOpts = [];
+ let n = 2;
+ while ( n <= 1024 ) {
+ const domainOpt = [];
+ for ( let i = 0; i < n; i++ ) {
+ domainOpt.push(randomHostname());
+ }
+ domainOpts.push(domainOpt.join('|'));
+ n += (n >>> 1);
+ }
+ return domainOpts;
+})();
+
+/******************************************************************************/
+
+var setBasedDictCreate = function(domainOpt) {
+ // Only one hostname
+ if ( domainOpt.indexOf('|') === -1 ) {
+ if ( domainOpt.startsWith('~') ) {
+ return domainOpt.slice(1);
+ }
+ return domainOpt;
+ }
+
+ // Multiple hostnames: use a dictionary.
+ var hostnames = domainOpt.split('|');
+ var i, hostname, dict;
+
+ // First find out whether we have a homogeneous dictionary
+ var hit = false, miss = false;
+ i = hostnames.length;
+ while ( i-- ) {
+ if ( hostnames[i].startsWith('~') ) {
+ miss = true;
+ if ( hit ) { break; }
+ } else {
+ hit = true;
+ if ( miss ) { break; }
+ }
+ }
+
+ // Heterogenous dictionary: this can happen, though VERY rarely.
+ // Spotted one occurrence in EasyList Lite (cjxlist.txt):
+ // domain=photobucket.com|~secure.photobucket.com
+ if ( hit && miss ) {
+ dict = new Map();
+ i = hostnames.length;
+ while ( i-- ) {
+ hostname = hostnames[i];
+ if ( hostname.startsWith('~') ) {
+ dict.set(hostname.slice(1), false);
+ } else {
+ dict.set(hostname, true);
+ }
+ }
+ return dict;
+ }
+
+ // Homogeneous dictionary.
+ if ( hit ) {
+ return new Set(hostnames);
+ }
+
+ dict = new Set();
+ i = hostnames.length;
+ while ( i-- ) {
+ dict.add(hostnames[i].slice(1));
+ }
+
+ return dict;
+};
+
+var setBasedDictTest = function(haystack, needle) {
+ var pos;
+ for (;;) {
+ if ( haystack.has(needle) ) { return true; }
+ pos = needle.indexOf('.');
+ if ( pos === -1 ) { break; }
+ needle = needle.slice(pos + 1);
+ }
+ return false;
+};
+
+/******************************************************************************/
+
+var regexBasedDictCreate = function(domainOpt) {
+ // Only one hostname
+ if ( domainOpt.indexOf('|') === -1 ) {
+ if ( domainOpt.startsWith('~') ) {
+ return domainOpt.slice(1);
+ }
+ return domainOpt;
+ }
+
+ // Many hostnames.
+ var re;
+
+ // Must be in dictionary (none negated).
+ if ( domainOpt.indexOf('~') === -1 ) { // all non-negated
+ re = new RegExp('(?:^|\\.)(?:' + domainOpt.replace(/\./g, '\\.') + ')$');
+ re.exec('');
+ return re;
+ }
+
+ // Must not be in dictionary (all negated).
+ if ( reDomainOptAllNegated.test(domainOpt) ) {
+ re = new RegExp('(?:^|\\.)(?:' + domainOpt.replace(/~/g, '').replace(/\./g, '\\.') + ')$');
+ re.exec('');
+ return re;
+ }
+
+ // Heterogenous dictionary: this can happen, though VERY rarely.
+ // Spotted one occurrence in EasyList Lite (cjxlist.txt):
+ // domain=photobucket.com|~secure.photobucket.com
+ var hostnames = domainOpt.split('|'),
+ i = hostnames.length,
+ dict = new Map(),
+ hostname;
+ while ( i-- ) {
+ hostname = hostnames[i];
+ if ( hostname.startsWith('~') ) {
+ dict.set(hostname.slice(1), false);
+ } else {
+ dict.set(hostname, true);
+ }
+ }
+ return dict;
+};
+var reDomainOptAllNegated = /^~(?:[^\|~]+\|~)+[^\|~]+$/;
+
+var regexBasedDictTest = function(haystack, needle) {
+ return haystack.test(needle);
+};
+
+/******************************************************************************/
+
+var oldTrieBasedDictCreate = function(domainOpt) {
+ return HNTrieBuilder.fromDomainOpt(domainOpt);
+}
+
+var oldTrieBasedDictTest = function(haystack, needle) {
+ return haystack.matches(needle);
+};
+
+/******************************************************************************/
+
+var trieBasedDictCreate = function(domainOpt) {
+ return hnTrieManager.fromDomainOpt(domainOpt);
+}
+
+var trieBasedDictTest = function(haystack, needle) {
+ return haystack.matchesJS(needle);
+};
+
+var trieBasedDictTestWASM = function(haystack, needle) {
+ return haystack.matchesWASM(needle);
+};
+
+/******************************************************************************/
+
+const hnBigTrieJS = new HNTrieContainer();
+const hnBigTrieWASM = new HNTrieContainer();
+
+const bigtrieBasedDictCreateJS = function(domainOpt) {
+ return hnBigTrieJS.fromIterable(domainOpt.split('|'), 'addJS');
+}
+
+const bigtrieBasedDictTestJS = function(haystack, needle) {
+ return haystack.matchesJS(needle);
+};
+
+const bigtrieBasedDictCreateWASM = function(domainOpt) {
+ return hnBigTrieWASM.fromIterable(domainOpt.split('|'), 'addWASM');
+}
+
+const bigtrieBasedDictTestWASM = function(haystack, needle) {
+ return haystack.matchesWASM(needle);
+};
+
+/******************************************************************************/
+
+const gBenchmarks = [ null ];
+let gWhich;
+
+/******************************************************************************/
+
+function stdout(which, text) {
+ if ( which > 0 ) {
+ which = ((which - 1) % 3) + 1;
+ }
+ var r = document.querySelector('#results-' + which);
+ if ( text === '' ) {
+ r.innerHTML = '';
+ } else {
+ r.innerHTML += text;
+ }
+}
+
+function doBenchmark(which) {
+ stdout(0, '');
+ stdout(0, 'Benchmarking, the higher ops/sec the better.\n');
+ stdout(0, Benchmark.platform.toString() + '.');
+ stdout(0, '\n\n');
+ stdout(1, '');
+ stdout(2, '');
+ stdout(3, '');
+ gWhich = which;
+ gBenchmarks[gWhich].run({ 'async': true });
+}
+
+function nextBenchmark() {
+ stdout(gWhich, 'Done.\n\n');
+ gWhich += 1;
+ var bms = gBenchmarks[gWhich];
+ if ( bms ) {
+ bms.run({ 'async': true });
+ }
+}
+
+function exitBenchmark() {
+ stdout(gWhich, 'Done.\n\n');
+}
+
+/******************************************************************************/
+
+function initBenchmarks() {
+ gBenchmarks.push((function() {
+ let dicts = [];
+
+ const createDict = function(fn) {
+ for ( let i = 0; i < domainOpts.length; i++ ) {
+ dicts[i] = fn(domainOpts[i]);
+ }
+ };
+
+ var bms = new Benchmark.Suite();
+ bms
+ .add(' - Set-based', function() {
+ createDict(setBasedDictCreate);
+ })
+ .add(' - Regex-based', function() {
+ createDict(regexBasedDictCreate);
+ })
+ .add(' - Trie-based (1st-gen)', function() {
+ createDict(oldTrieBasedDictCreate);
+ })
+ .add(' - Trie-based (2nd-gen)', function() {
+ hnTrieManager.reset();
+ createDict(trieBasedDictCreate);
+ })
+ .add(' - Trie-based JS (3rd-gen)', function() {
+ hnBigTrieJS.reset();
+ createDict(bigtrieBasedDictCreateJS);
+ })
+ .on('start', function() {
+ dicts = [];
+ stdout(gWhich, '');
+ stdout(gWhich, 'Create dictionaries\n');
+ })
+ .on('cycle', function(event) {
+ stdout(gWhich, String(event.target) + '\n');
+ })
+ .on('complete', exitBenchmark);
+
+ if ( hnBigTrieWASM.addWASM !== null ) {
+ bms.add(' - Trie-based WASM (3rd-gen)', function() {
+ hnBigTrieWASM.reset();
+ createDict(bigtrieBasedDictCreateWASM);
+ })
+ }
+
+ return bms;
+ })());
+
+ const lookupCount = 100;
+
+ gBenchmarks.push((function() {
+ const bms = new Benchmark.Suite();
+ const needles = [];
+
+ let setDicts;
+ let regexDicts;
+ let oldTrieDicts;
+ let newTrieDicts;
+ let bigTrieDicts;
+ let results;
+
+ const lookupDict = function(dicts, fn) {
+ for ( let i = 0; i < needles.length; i++ ) {
+ const needle = needles[i];
+ for ( const dict of dicts ) {
+ results[i] = fn(dict, needle);
+ }
+ }
+ };
+
+ bms
+ .add(' - Set-based', function() {
+ lookupDict(setDicts, setBasedDictTest);
+ })
+ .add(' - Regex-based', function() {
+ lookupDict(regexDicts, regexBasedDictTest);
+ })
+ .add(' - Trie-based (1st-gen)', function() {
+ lookupDict(oldTrieDicts, oldTrieBasedDictTest);
+ })
+ .on('start', function() {
+ for ( let i = 0; i < lookupCount; i++ ) {
+ needles[i] = randomNeedle();
+ }
+ setDicts = [];
+ regexDicts = [];
+ oldTrieDicts = []
+ newTrieDicts = []
+ bigTrieDicts = []
+ results = [];
+ hnTrieManager.reset();
+ for ( const domainOpt of domainOpts ) {
+ setDicts.push(setBasedDictCreate(domainOpt));
+ regexDicts.push(regexBasedDictCreate(domainOpt));
+ oldTrieDicts.push(oldTrieBasedDictCreate(domainOpt));
+ newTrieDicts.push(trieBasedDictCreate(domainOpt));
+ bigTrieDicts.push(bigtrieBasedDictCreateJS(domainOpt));
+ }
+
+ stdout(gWhich, '');
+ stdout(gWhich, 'Test ' + lookupCount + ' needles against ' + domainOpts.length + ' dictionaries of hostnames\n');
+ })
+ .on('cycle', function(event) {
+ stdout(gWhich, String(event.target) + '\n');
+ })
+ .on('complete', ( ) => {
+ setDicts = regexDicts = oldTrieDicts = newTrieDicts = results = undefined;
+ hnTrieManager.reset();
+ exitBenchmark();
+ });
+
+ bms.add(' - Trie-based JS (2nd-gen)', function() {
+ lookupDict(newTrieDicts, trieBasedDictTest);
+ })
+ if ( hnTrieManager.matchesWASM !== null ) {
+ bms.add(' - Trie-based WASM (2nd-gen)', function() {
+ lookupDict(newTrieDicts, trieBasedDictTestWASM);
+ })
+ }
+ bms.add(' - Trie-based JS (3rd-gen)', function() {
+ lookupDict(newTrieDicts, bigtrieBasedDictTestJS);
+ })
+ if ( hnBigTrieWASM.matchesWASM !== null ) {
+ bms.add(' - Trie-based WASM (3rd-gen)', function() {
+ lookupDict(bigTrieDicts, bigtrieBasedDictTestWASM);
+ })
+ }
+
+ return bms;
+ })());
+}
+
+/******************************************************************************/
+
+Promise.all([
+ hnTrieManager.readyToUse(),
+ hnBigTrieJS.readyToUse(),
+ hnBigTrieWASM.readyToUse(),
+]).then(( ) => {
+ initBenchmarks();
+});
+
+document.getElementById('createBenchmark').onclick = function() {
+ doBenchmark(1);
+};
+document.getElementById('lookupBenchmark').onclick = function() {
+ doBenchmark(2);
+};
+</script>
+</body>
+</html>
diff --git a/docs/tests/hntrie-test.html b/docs/tests/hntrie-test.html
new file mode 100644
index 0000000..ada8ecd
--- /dev/null
+++ b/docs/tests/hntrie-test.html
@@ -0,0 +1,226 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+</head>
+<body style="font: 14px sans-serif">
+<h1>HNTrieContainer test</h1>
+<p><a href="./.">Back</a></p>
+<p>&nbsp;</p>
+<div><button id="test" type="button">Test!</button></div>
+<div id="stdout"></div>
+<script src="https://rawcdn.githack.com/gorhill/uBlock/1b6fea16da81d1df3e2efd5a31894f71ea04dbb1/src/js/hntrie.js"></script>
+<!-- <script src="../../src/js/hntrie.js"></script> -->
+<script src="hostname-pool.js"></script>
+<script>
+const createRandomLabel = function() {
+ return Math.random().toString(36).slice(2);
+};
+
+const stdout = function(s) {
+ const line = document.createElement('div');
+ const parent = document.getElementById('stdout');
+ let tooManyErrors = false;
+ if ( parent.childElementCount > 100 ) {
+ tooManyErrors = true;
+ line.textContent = 'Too many errors, aborting';
+ } else {
+ line.textContent = s;
+ }
+ parent.appendChild(line)
+ if ( tooManyErrors ) {
+ throw 'Aborting';
+ }
+}
+
+/******************************************************************************/
+
+// Dictionary of hostnames
+//
+const FilterHostnameDict = function(hostnames) {
+ this.h = ''; // short-lived register
+ this.dict = new Set();
+ if ( hostnames !== undefined ) {
+ this.fromIterable(hostnames);
+ }
+};
+
+FilterHostnameDict.prototype = {
+ add: function(hn) {
+ if ( this.dict.has(hn) ) { return false; }
+ this.dict.add(hn);
+ return true;
+ },
+ fromIterable: function(hostnames) {
+ for ( let hn of hostnames ) {
+ this.add(hn);
+ }
+ return this;
+ },
+ matches: function(needle) {
+ while ( this.dict.has(needle) === false ) {
+ const pos = needle.indexOf('.');
+ if ( pos === -1 ) {
+ this.h = '';
+ return false;
+ }
+ needle = needle.slice(pos + 1);
+ }
+ this.h = needle;
+ return true;
+ },
+};
+
+/******************************************************************************/
+
+const testFlavor = function(hostnames, name, matchesFn, hitFn) {
+ stdout('\xA0');
+ stdout('Testing ' + name + '...');
+
+ const t0 = performance.now();
+
+ for ( let i = 0; i < hostnames.length; i++ ) {
+ // Exact hits
+ let needle = hostnames[i];
+ if ( hitFn(matchesFn(needle)) === false ) {
+ stdout('Exact hits failed: ' + needle);
+ }
+
+ // Subdomain hits
+ needle = createRandomLabel() + '.' + hostnames[i];
+ if ( hitFn(matchesFn(needle)) === false ) {
+ stdout('Subdomain hits failed: ' + needle);
+ }
+
+ // Misses batch 1
+ needle = createRandomLabel() + '.com';
+ if ( hitFn(matchesFn(needle)) !== false ) {
+ stdout('Misses batch 1: ' + needle);
+ }
+
+ // Misses batch 2
+ needle = hostnames[i] + '.' + createRandomLabel();
+ if ( hitFn(matchesFn(needle)) !== false ) {
+ stdout('Misses batch 2: ' + needle);
+ }
+
+ // Misses batch 3
+ needle = hostnames[i];
+ let pos = needle.lastIndexOf('.');
+ if ( pos !== -1 ) {
+ needle = needle.slice(0, pos) + needle.slice(pos + 1);
+ if ( hitFn(matchesFn(needle)) !== false ) {
+ stdout('Misses batch 3: ' + needle);
+ }
+ }
+ }
+
+ const t1 = performance.now();
+
+ stdout(
+ name + ': ' +
+ (hostnames.length * 5).toLocaleString() +
+ ' tests completed in ' +
+ (t1 - t0).toFixed(2) + ' ms'
+ );
+};
+
+const hnBigTrieJS = new HNTrieContainer();
+const hnBigTrieWASM = new HNTrieContainer();
+const hnBigTrieUnserialized = new HNTrieContainer();
+
+Promise.all([
+ hnBigTrieJS.readyToUse(),
+ hnBigTrieWASM.readyToUse()
+]).then(( ) => {
+ let t0 = performance.now();
+ const theSet = new FilterHostnameDict(hostnamePool);
+ let t1 = performance.now();
+ stdout('\xA0');
+ stdout(
+ 'Set creation completed in ' +
+ (t1 - t0).toFixed(2) + ' ms'
+ );
+
+ t0 = performance.now();
+ const theTrieJS = hnBigTrieJS.fromIterable(hostnamePool, 'addJS');
+ hnBigTrieJS.optimize();
+ t1 = performance.now();
+ stdout('\xA0');
+ stdout(
+ 'HNTrieContainer creation (JS) completed in ' +
+ (t1 - t0).toFixed(2) + ' ms'
+ );
+
+ let theTrieWASM;
+ if ( hnBigTrieWASM.addWASM instanceof Function ) {
+ t0 = performance.now();
+ theTrieWASM = hnBigTrieWASM.fromIterable(hostnamePool, 'addWASM');
+ hnBigTrieWASM.optimize();
+ t1 = performance.now();
+ stdout('\xA0');
+ stdout(
+ 'HNTrieContainer creation (WASM) completed in ' +
+ (t1 - t0).toFixed(2) + ' ms'
+ );
+
+ const bufJS = theTrieJS.container.buf;
+ const bufWASM = theTrieWASM.container.buf;
+ for ( let i = 0; i < bufJS.length; i++ ) {
+ if ( bufJS[i] !== bufWASM[i] ) {
+ stdout('theTrieWASM failure at index ' + i);
+ break;
+ }
+ }
+ }
+
+ let selfie = hnBigTrieJS.serialize();
+ t0 = performance.now();
+ hnBigTrieUnserialized.unserialize(selfie);
+ const theTrieUnserialized = hnBigTrieUnserialized.createOne(hnBigTrieJS.compileOne(theTrieJS));
+ t1 = performance.now();
+ stdout('\xA0');
+ stdout(
+ 'HNTrieContainer creation (unserialized) completed in ' +
+ (t1 - t0).toFixed(2) + ' ms'
+ );
+ selfie = undefined;
+
+ document.getElementById('test').addEventListener('click', ( ) => {
+ let parent = document.getElementById('stdout');
+ while ( parent.childElementCount !== 0 ) {
+ parent.removeChild(parent.firstChild);
+ }
+ testFlavor(
+ hostnamePool,
+ 'Set (JS)',
+ theSet.matches.bind(theSet),
+ r => r
+ );
+ testFlavor(
+ hostnamePool,
+ 'HNTrieContainer (JS)',
+ theTrieJS.matchesJS.bind(theTrieJS),
+ r => r >= 0
+ );
+ if ( theTrieWASM !== undefined ) {
+ testFlavor(
+ hostnamePool,
+ 'HNTrieContainer (WASM)',
+ theTrieWASM.matchesWASM.bind(theTrieWASM),
+ r => r >= 0
+ );
+ }
+ testFlavor(
+ hostnamePool,
+ 'HNTrieContainer (unserialized)',
+ theTrieUnserialized.matchesJS.bind(theTrieUnserialized),
+ r => r >= 0
+ );
+ });
+});
+
+</script>
+</body>
+</html>
diff --git a/docs/tests/hostname-pool.js b/docs/tests/hostname-pool.js
new file mode 100644
index 0000000..57c959e
--- /dev/null
+++ b/docs/tests/hostname-pool.js
@@ -0,0 +1,45762 @@
+/* exported hostnamePool */
+
+'use strict';
+
+// Following hostnames were extracted from',
+// "hpHosts - Ad and Tracking servers only",',
+// except for the first few I added to test',
+// specific cases.',
+const hostnamePool = [
+'a',
+'b.a',
+'cb.a',
+'005.free-counter.co.uk',
+'006.free-adult-counters.x-xtra.com',
+'006.free-counter.co.uk',
+'007.free-counter.co.uk',
+'007.go2cloud.org',
+'0075-7112-e7eb-f9b9.reporo.net',
+'008.free-counter.co.uk',
+'00zasdf.pw',
+'011i5.voluumtrk.com',
+'0124498474f7c13ac9a2-6b191446002b31342189d56cabcf5227.r11.cf2.rackcdn.com',
+'02gzx.voluumtrk.com',
+'0427d7.se',
+'04fd-74b3-b2f6-c645.reporo.net',
+'050003.voodoo.com',
+'050005.voodoo.com',
+'05ni7.voluumtrk.com',
+'0602v.voluumtrk.com',
+'060810131024.c.mystat-in.net',
+'06c5-dbbd-eb79-4cd4.reporo.net',
+'06rph.voluumtrk.com',
+'08.185.87.0.liveadvert.com',
+'08.185.87.00.liveadvert.com',
+'08.185.87.01.liveadvert.com',
+'08.185.87.02.liveadvert.com',
+'08.185.87.03.liveadvert.com',
+'08.185.87.04.liveadvert.com',
+'08.185.87.05.liveadvert.com',
+'08.185.87.06.liveadvert.com',
+'08.185.87.07.liveadvert.com',
+'08.185.87.08.liveadvert.com',
+'08.185.87.09.liveadvert.com',
+'08.185.87.1.liveadvert.com',
+'08.185.87.10.liveadvert.com',
+'08.185.87.100.liveadvert.com',
+'08.185.87.101.liveadvert.com',
+'08.185.87.103.liveadvert.com',
+'08.185.87.104.liveadvert.com',
+'08.185.87.105.liveadvert.com',
+'08.185.87.106.liveadvert.com',
+'08.185.87.107.liveadvert.com',
+'08.185.87.108.liveadvert.com',
+'08.185.87.109.liveadvert.com',
+'08.185.87.11.liveadvert.com',
+'08.185.87.110.liveadvert.com',
+'08.185.87.111.liveadvert.com',
+'08.185.87.113.liveadvert.com',
+'08.185.87.114.liveadvert.com',
+'08.185.87.115.liveadvert.com',
+'08.185.87.116.liveadvert.com',
+'08.185.87.117.liveadvert.com',
+'08.185.87.118.liveadvert.com',
+'08.185.87.119.liveadvert.com',
+'08.185.87.13.liveadvert.com',
+'08.185.87.130.liveadvert.com',
+'08.185.87.131.liveadvert.com',
+'08.185.87.133.liveadvert.com',
+'08.185.87.134.liveadvert.com',
+'08.185.87.135.liveadvert.com',
+'08.185.87.136.liveadvert.com',
+'08.185.87.137.liveadvert.com',
+'08.185.87.138.liveadvert.com',
+'08.185.87.139.liveadvert.com',
+'08.185.87.14.liveadvert.com',
+'08.185.87.140.liveadvert.com',
+'08.185.87.141.liveadvert.com',
+'08.185.87.143.liveadvert.com',
+'08.185.87.144.liveadvert.com',
+'08.185.87.145.liveadvert.com',
+'08.185.87.146.liveadvert.com',
+'08.185.87.147.liveadvert.com',
+'08.185.87.148.liveadvert.com',
+'08.185.87.149.liveadvert.com',
+'08.185.87.15.liveadvert.com',
+'08.185.87.150.liveadvert.com',
+'08.185.87.151.liveadvert.com',
+'08.185.87.153.liveadvert.com',
+'08.185.87.154.liveadvert.com',
+'08.185.87.155.liveadvert.com',
+'08.185.87.156.liveadvert.com',
+'08.185.87.157.liveadvert.com',
+'08.185.87.158.liveadvert.com',
+'08.185.87.159.liveadvert.com',
+'08.185.87.16.liveadvert.com',
+'08.185.87.160.liveadvert.com',
+'08.185.87.161.liveadvert.com',
+'08.185.87.163.liveadvert.com',
+'08.185.87.164.liveadvert.com',
+'08.185.87.165.liveadvert.com',
+'08.185.87.166.liveadvert.com',
+'08.185.87.167.liveadvert.com',
+'08.185.87.168.liveadvert.com',
+'08.185.87.169.liveadvert.com',
+'08.185.87.17.liveadvert.com',
+'08.185.87.170.liveadvert.com',
+'08.185.87.171.liveadvert.com',
+'08.185.87.173.liveadvert.com',
+'08.185.87.174.liveadvert.com',
+'08.185.87.175.liveadvert.com',
+'08.185.87.176.liveadvert.com',
+'08.185.87.177.liveadvert.com',
+'08.185.87.178.liveadvert.com',
+'08.185.87.179.liveadvert.com',
+'08.185.87.18.liveadvert.com',
+'08.185.87.180.liveadvert.com',
+'08.185.87.181.liveadvert.com',
+'08.185.87.183.liveadvert.com',
+'08.185.87.184.liveadvert.com',
+'08.185.87.185.liveadvert.com',
+'08.185.87.186.liveadvert.com',
+'08.185.87.187.liveadvert.com',
+'08.185.87.188.liveadvert.com',
+'08.185.87.189.liveadvert.com',
+'08.185.87.19.liveadvert.com',
+'08.185.87.190.liveadvert.com',
+'08.185.87.191.liveadvert.com',
+'08.185.87.193.liveadvert.com',
+'08.185.87.194.liveadvert.com',
+'08.185.87.195.liveadvert.com',
+'08.185.87.196.liveadvert.com',
+'08.185.87.197.liveadvert.com',
+'08.185.87.198.liveadvert.com',
+'08.185.87.199.liveadvert.com',
+'08.185.87.3.liveadvert.com',
+'08.185.87.30.liveadvert.com',
+'08.185.87.31.liveadvert.com',
+'08.185.87.33.liveadvert.com',
+'08.185.87.34.liveadvert.com',
+'08.185.87.35.liveadvert.com',
+'08.185.87.36.liveadvert.com',
+'08.185.87.37.liveadvert.com',
+'08.185.87.38.liveadvert.com',
+'08.185.87.39.liveadvert.com',
+'08.185.87.4.liveadvert.com',
+'08.185.87.40.liveadvert.com',
+'08.185.87.41.liveadvert.com',
+'08.185.87.43.liveadvert.com',
+'08.185.87.44.liveadvert.com',
+'08.185.87.45.liveadvert.com',
+'08.185.87.46.liveadvert.com',
+'08.185.87.47.liveadvert.com',
+'08.185.87.48.liveadvert.com',
+'08.185.87.49.liveadvert.com',
+'08.185.87.5.liveadvert.com',
+'08.185.87.50.liveadvert.com',
+'08.185.87.51.liveadvert.com',
+'08.185.87.53.liveadvert.com',
+'08.185.87.54.liveadvert.com',
+'08.185.87.55.liveadvert.com',
+'08.185.87.56.liveadvert.com',
+'08.185.87.57.liveadvert.com',
+'08.185.87.58.liveadvert.com',
+'08.185.87.59.liveadvert.com',
+'08.185.87.6.liveadvert.com',
+'08.185.87.60.liveadvert.com',
+'08.185.87.61.liveadvert.com',
+'08.185.87.63.liveadvert.com',
+'08.185.87.64.liveadvert.com',
+'08.185.87.65.liveadvert.com',
+'08.185.87.66.liveadvert.com',
+'08.185.87.67.liveadvert.com',
+'08.185.87.68.liveadvert.com',
+'08.185.87.69.liveadvert.com',
+'08.185.87.7.liveadvert.com',
+'08.185.87.70.liveadvert.com',
+'08.185.87.71.liveadvert.com',
+'08.185.87.73.liveadvert.com',
+'08.185.87.74.liveadvert.com',
+'08.185.87.75.liveadvert.com',
+'08.185.87.76.liveadvert.com',
+'08.185.87.77.liveadvert.com',
+'08.185.87.78.liveadvert.com',
+'08.185.87.79.liveadvert.com',
+'08.185.87.8.liveadvert.com',
+'08.185.87.80.liveadvert.com',
+'08.185.87.81.liveadvert.com',
+'08.185.87.83.liveadvert.com',
+'08.185.87.84.liveadvert.com',
+'08.185.87.85.liveadvert.com',
+'08.185.87.86.liveadvert.com',
+'08.185.87.87.liveadvert.com',
+'08.185.87.88.liveadvert.com',
+'08.185.87.89.liveadvert.com',
+'08.185.87.9.liveadvert.com',
+'08.185.87.90.liveadvert.com',
+'08.185.87.91.liveadvert.com',
+'08.185.87.93.liveadvert.com',
+'08.185.87.94.liveadvert.com',
+'08.185.87.95.liveadvert.com',
+'08.185.87.96.liveadvert.com',
+'08.185.87.97.liveadvert.com',
+'08.185.87.98.liveadvert.com',
+'08.185.87.99.liveadvert.com',
+'0896-c1b9-ed40-acad.reporo.net',
+'0aac4e6a54c170b0.se',
+'0alha.voluumtrk.com',
+'0b1xr.voluumtrk.com',
+'0bfn6.voluumtrk.com',
+'0br.realsecuredredirect.com',
+'0cfe-e814-fd2a-7ffc.reporo.net',
+'0cwjs.voluumtrk.com',
+'0dedx.voluumtrk.com',
+'0ftgo.voluumtrk.com',
+'0gitx.voluumtrk.com',
+'0hna.com',
+'0iiml.voluumtrk.com',
+'0latfee.ero-advertising.com',
+'0llii0g6.com',
+'0md5e.voluumtrk.com',
+'0mt66.voluumtrk.com',
+'0muvp.voluumtrk.com',
+'0ny3m.voluumtrk.com',
+'0qhuv.voluumtrk.com',
+'0rlbs.voluumtrk.com',
+'0wptk.voluumtrk.com',
+'0yn3h.voluumtrk.com',
+'1-1ads.com',
+'1.chipde.damoh.schneevonmorgen.com',
+'1.coolestmobi.com',
+'1.gmxnet.damoh.schneevonmorgen.com',
+'1.im.cz',
+'1.psfree.pay.clickbank.net',
+'1.ptp22.com',
+'1.quicktrkr.com',
+'10.6.87.194.dynamic.dol.ru',
+'10.ptp22.com',
+'100.6.87.194.dynamic.dol.ru',
+'100023.live173.com',
+'101.6.87.194.dynamic.dol.ru',
+'1016557.fls.doubleclick.net',
+'1017680.109mview.atdmt.com.1.6000.302br.net',
+'101order.com',
+'102.112.2o7.net',
+'102.122.2o7.net',
+'102.6.87.194.dynamic.dol.ru',
+'10267.10cms.com',
+'103.6.87.194.dynamic.dol.ru',
+'1030.go2cloud.org',
+'1033.bitterstrawberry.com',
+'104.6.87.194.dynamic.dol.ru',
+'105.6.87.194.dynamic.dol.ru',
+'106.6.87.194.dynamic.dol.ru',
+'106794.hittail.com',
+'107.6.87.194.dynamic.dol.ru',
+'10712824.qqc.co',
+'108.6.87.194.dynamic.dol.ru',
+'108434.hittail.com',
+'109.6.87.194.dynamic.dol.ru',
+'10fbb07a4b0.se',
+'11.6.87.194.dynamic.dol.ru',
+'11.ptp22.com',
+'11.rtstats.com',
+'110.6.87.194.dynamic.dol.ru',
+'111.6.87.194.dynamic.dol.ru',
+'11163929-2268.c2.adprotect.net',
+'11163929-2315.c2.adprotect.net',
+'11163929-2410.c.adprotect.net',
+'11163929-2410.c2.adprotect.net',
+'11163929-3212.c.adprotect.net',
+'11163929-3212.c2.adprotect.net',
+'11163929-3367.c2.adprotect.net',
+'11163929-3482.c2.adprotect.net',
+'11163943.c.adprotect.net',
+'11164000-690.c.adprotect.net',
+'11167236.adscreendirect.com',
+'112.6.87.194.dynamic.dol.ru',
+'11262.engine.mobileapptracking.com',
+'113.6.87.194.dynamic.dol.ru',
+'114.6.87.194.dynamic.dol.ru',
+'115.6.87.194.dynamic.dol.ru',
+'116.6.87.194.dynamic.dol.ru',
+'117.6.87.194.dynamic.dol.ru',
+'118.6.87.194.dynamic.dol.ru',
+'118d654612df63bc8395-aecfeaabe29a34ea9a877711ec6d8aed.r37.cf2.rackcdn.com',
+'119.6.87.194.dynamic.dol.ru',
+'119xpg.go2cloud.org',
+'12.ptp22.com',
+'120.6.87.194.dynamic.dol.ru',
+'120.duba.net',
+'120mk.voluumtrk.com',
+'121.2cnt.net',
+'121.6.87.194.dynamic.dol.ru',
+'1212.bitterstrawberry.com',
+'122.6.87.194.dynamic.dol.ru',
+'1221.bitterstrawberry.com',
+'1223.xg4ken.com',
+'122807155757.c.mystat-in.net',
+'123.6.87.194.dynamic.dol.ru',
+'123.dominoad.com',
+'123.duba.net',
+'1239.9014.302br.net',
+'123ads.nl',
+'123advertising.nl',
+'123banners.com',
+'123count.com',
+'123counter.mycomputer.com',
+'123counter.superstats.com',
+'123counts.com',
+'123jmdmediagroupllc.go2cloud.org',
+'123spill.no',
+'123srv.com',
+'123stat.com',
+'123webmarketing.com',
+'124.6.87.194.dynamic.dol.ru',
+'125.6.87.194.dynamic.dol.ru',
+'126.6.87.194.dynamic.dol.ru',
+'126.xg4ken.com',
+'1268402.fls.doubleclick.net',
+'127.6.87.194.dynamic.dol.ru',
+'128.6.87.194.dynamic.dol.ru',
+'129.6.87.194.dynamic.dol.ru',
+'12place.com',
+'13.6.87.194.dynamic.dol.ru',
+'13.ptp22.com',
+'130.6.87.194.dynamic.dol.ru',
+'131.6.87.194.dynamic.dol.ru',
+'132.6.87.194.dynamic.dol.ru',
+'1326154.fls.doubleclick.net',
+'133.6.87.194.dynamic.dol.ru',
+'1330903.fls.doubleclick.net',
+'134.6.87.194.dynamic.dol.ru',
+'135.6.87.194.dynamic.dol.ru',
+'1359940.fls.doubleclick.net',
+'136.6.87.194.dynamic.dol.ru',
+'13618.9005.302br.net',
+'137.6.87.194.dynamic.dol.ru',
+'137852403.log.optimizely.com',
+'138.6.87.194.dynamic.dol.ru',
+'139.6.87.194.dynamic.dol.ru',
+'14.6.87.194.dynamic.dol.ru',
+'14.ptp22.com',
+'140.6.87.194.dynamic.dol.ru',
+'140cc.v.fwmrm.net',
+'140proof.com',
+'141.6.87.194.dynamic.dol.ru',
+'14119276be0852.com',
+'1412173.fls.doubleclick.net',
+'141aa.voluumtrk.com',
+'142.6.87.194.dynamic.dol.ru',
+'143.6.87.194.dynamic.dol.ru',
+'1435575.fls.doubleclick.net',
+'144.6.87.194.dynamic.dol.ru',
+'145.6.87.194.dynamic.dol.ru',
+'146.6.87.194.dynamic.dol.ru',
+'147.6.87.194.dynamic.dol.ru',
+'148.6.87.194.dynamic.dol.ru',
+'149.6.87.194.dynamic.dol.ru',
+'15.6.87.194.dynamic.dol.ru',
+'15.ptp22.com',
+'150.6.87.194.dynamic.dol.ru',
+'151.6.87.194.dynamic.dol.ru',
+'1513878.fls.doubleclick.net',
+'152.6.87.194.dynamic.dol.ru',
+'152media.adk2x.com',
+'153.6.87.194.dynamic.dol.ru',
+'154.6.87.194.dynamic.dol.ru',
+'155.6.87.194.dynamic.dol.ru',
+'156.6.87.194.dynamic.dol.ru',
+'157-events.olark.com',
+'157.6.87.194.dynamic.dol.ru',
+'158.6.87.194.dynamic.dol.ru',
+'159.6.87.194.dynamic.dol.ru',
+'15cen.redirectvoluum.com',
+'15qhn.voluumtrk.com',
+'15view.atdmt.com.319.6000.302br.net',
+'16.6.87.194.dynamic.dol.ru',
+'16.ptp22.com',
+'160.6.87.194.dynamic.dol.ru',
+'160tracker.com',
+'160x600.exad.me',
+'161.6.87.194.dynamic.dol.ru',
+'162.6.87.194.dynamic.dol.ru',
+'163.6.87.194.dynamic.dol.ru',
+'163.wrating.com',
+'164.6.87.194.dynamic.dol.ru',
+'165.6.87.194.dynamic.dol.ru',
+'1651.bitterstrawberry.com',
+'1652.bitterstrawberry.com',
+'1653.bitterstrawberry.com',
+'1655.bitterstrawberry.com',
+'166.6.87.194.dynamic.dol.ru',
+'1669323.r.msn.com',
+'1669437.r.msn.com',
+'167.6.87.194.dynamic.dol.ru',
+'168.112.207.net',
+'168.6.87.194.dynamic.dol.ru',
+'169.6.87.194.dynamic.dol.ru',
+'1695693.r.msn.com',
+'1695842.r.msn.com',
+'1696908298.rsc.cdn77.org',
+'16qul.voluumtrk.com',
+'17.6.87.194.dynamic.dol.ru',
+'17.ptp22.com',
+'170.6.87.194.dynamic.dol.ru',
+'1707489.r.msn.com',
+'171.6.87.194.dynamic.dol.ru',
+'172.6.87.194.dynamic.dol.ru',
+'172degrees.go2cloud.org',
+'173.6.87.194.dynamic.dol.ru',
+'174.6.87.194.dynamic.dol.ru',
+'1742177.fls.doubleclick.net',
+'175.6.87.194.dynamic.dol.ru',
+'176.6.87.194.dynamic.dol.ru',
+'177.6.87.194.dynamic.dol.ru',
+'178.6.87.194.dynamic.dol.ru',
+'179.6.87.194.dynamic.dol.ru',
+'17b4-7817-18f7-3abd.reporo.net',
+'17k.originalsafteyredir.com',
+'17oez.voluumtrk.com',
+'18.6.87.194.dynamic.dol.ru',
+'18.ptp22.com',
+'180.6.87.194.dynamic.dol.ru',
+'1800inkfarm.go2cloud.org',
+'181.6.87.194.dynamic.dol.ru',
+'182.6.87.194.dynamic.dol.ru',
+'18205.voluumtrk.com',
+'1821.bitterstrawberry.com',
+'1822333.r.msn.com',
+'1829.bitterstrawberry.com',
+'183.6.87.194.dynamic.dol.ru',
+'184.6.87.194.dynamic.dol.ru',
+'18439.rejectclick.com',
+'1846.bitterstrawberry.com',
+'185.6.87.194.dynamic.dol.ru',
+'186.6.87.194.dynamic.dol.ru',
+'187.6.87.194.dynamic.dol.ru',
+'188.6.87.194.dynamic.dol.ru',
+'189.6.87.194.dynamic.dol.ru',
+'18clicks.com',
+'19.6.87.194.dynamic.dol.ru',
+'19.ptp22.com',
+'190.6.87.194.dynamic.dol.ru',
+'191.6.87.194.dynamic.dol.ru',
+'192.168.112.2o7.net',
+'192.168.ads.trafficjunky.net',
+'192.168.ads2.contentabc.com',
+'192.168.cdn-a2.contentabc.com',
+'192.168.cdn11.contentabc.com',
+'192.168.media.trafficjunky.net',
+'192.168.ss.xxxmyself.com',
+'192.6.87.194.dynamic.dol.ru',
+'192.com',
+'192com.112.2o7.net',
+'193.6.87.194.dynamic.dol.ru',
+'194.6.87.194.dynamic.dol.ru',
+'1940.bitterstrawberry.com',
+'195.6.87.194.dynamic.dol.ru',
+'196.6.87.194.dynamic.dol.ru',
+'196179102.log.optimizely.com',
+'197.6.87.194.dynamic.dol.ru',
+'198.6.87.194.dynamic.dol.ru',
+'199.6.87.194.dynamic.dol.ru',
+'199ea.voluumtrk.com',
+'1acpa.go2cloud.org',
+'1ad.de',
+'1app.blob.core.windows.net',
+'1artgalleryplus.go2cloud.org',
+'1au.cqcounter.com',
+'1bm.cqcounter.com',
+'1ca.cqcounter.com',
+'1cash.net',
+'1cgi.hitbox.com',
+'1clickscpa.go2cloud.org',
+'1dbxc.voluumtrk.com',
+'1de.cqcounter.com',
+'1de5g.voluumtrk.com',
+'1do16.voluumtrk.com',
+'1es.cqcounter.com',
+'1f62-ac07-3838-8236.reporo.net',
+'1f64-9327-ddd3-a591.reporo.net',
+'1fm8o.voluumtrk.com',
+'1fr.cqcounter.com',
+'1in.cqcounter.com',
+'1jo.cqcounter.com',
+'1k7uk.voluumtrk.com',
+'1m1mage.tr553.com',
+'1mp.mobi',
+'1mpo6.voluumtrk.com',
+'1msro.voluumtrk.com',
+'1naf9.voluumtrk.com',
+'1nl.cqcounter.com',
+'1no.cqcounter.com',
+'1nvrm.voluumtrk.com',
+'1pgna.voluumtrk.com',
+'1phads.com',
+'1pt.cqcounter.com',
+'1rcu4.voluumtrk.com',
+'1se.cqcounter.com',
+'1src.us.intellitxt.com',
+'1streamline.go2cloud.org',
+'1uk.cqcounter.com',
+'1ul8dvwz0a.s.ad6media.fr',
+'1us.cqcounter.com',
+'1w0xj.voluumtrk.com',
+'1wu2u.voluumtrk.com',
+'1xxx.cqcounter.com',
+'1zl86.voluumtrk.com',
+'1zlni.voluumtrk.com',
+'2.chipde.damoh.schneevonmorgen.com',
+'2.livejasmin.com',
+'2.ptp22.com',
+'20.ptp22.com',
+'200.6.87.194.dynamic.dol.ru',
+'2002.bitterstrawberry.com',
+'201.6.87.194.dynamic.dol.ru',
+'2013561.fls.doubleclick.net',
+'2013hk.go2cloud.org',
+'202.6.87.194.dynamic.dol.ru',
+'2026953308.go2cloud.org',
+'203.6.87.194.dynamic.dol.ru',
+'204.6.87.194.dynamic.dol.ru',
+'204.bitterstrawberry.com',
+'205.6.87.194.dynamic.dol.ru',
+'20501671p.rfihub.com',
+'20510777p.rfihub.com',
+'20514681p.rfihub.com',
+'20554339p.rfihub.com',
+'2056.bitterstrawberry.com',
+'20574919p.rfihub.com',
+'20576983p.rfihub.com',
+'20576991p.rfihub.com',
+'20591617p.rfihub.com',
+'206.6.87.194.dynamic.dol.ru',
+'207.6.87.194.dynamic.dol.ru',
+'208.185.87.1.liveadvert.com',
+'208.185.87.10.liveadvert.com',
+'208.185.87.100.liveadvert.com',
+'208.185.87.101.liveadvert.com',
+'208.185.87.102.liveadvert.com',
+'208.185.87.103.liveadvert.com',
+'208.185.87.104.liveadvert.com',
+'208.185.87.105.liveadvert.com',
+'208.185.87.106.liveadvert.com',
+'208.185.87.107.liveadvert.com',
+'208.185.87.108.liveadvert.com',
+'208.185.87.109.liveadvert.com',
+'208.185.87.11.liveadvert.com',
+'208.185.87.110.liveadvert.com',
+'208.185.87.111.liveadvert.com',
+'208.185.87.112.liveadvert.com',
+'208.185.87.113.liveadvert.com',
+'208.185.87.114.liveadvert.com',
+'208.185.87.115.liveadvert.com',
+'208.185.87.116.liveadvert.com',
+'208.185.87.117.liveadvert.com',
+'208.185.87.118.liveadvert.com',
+'208.185.87.119.liveadvert.com',
+'208.185.87.12.liveadvert.com',
+'208.185.87.120.liveadvert.com',
+'208.185.87.121.liveadvert.com',
+'208.185.87.122.liveadvert.com',
+'208.185.87.123.liveadvert.com',
+'208.185.87.124.liveadvert.com',
+'208.185.87.125.liveadvert.com',
+'208.185.87.126.liveadvert.com',
+'208.185.87.127.liveadvert.com',
+'208.185.87.128.liveadvert.com',
+'208.185.87.129.liveadvert.com',
+'208.185.87.13.liveadvert.com',
+'208.185.87.130.liveadvert.com',
+'208.185.87.131.liveadvert.com',
+'208.185.87.132.liveadvert.com',
+'208.185.87.133.liveadvert.com',
+'208.185.87.134.liveadvert.com',
+'208.185.87.135.liveadvert.com',
+'208.185.87.136.liveadvert.com',
+'208.185.87.137.liveadvert.com',
+'208.185.87.138.liveadvert.com',
+'208.185.87.139.liveadvert.com',
+'208.185.87.14.liveadvert.com',
+'208.185.87.140.liveadvert.com',
+'208.185.87.141.liveadvert.com',
+'208.185.87.142.liveadvert.com',
+'208.185.87.143.liveadvert.com',
+'208.185.87.144.liveadvert.com',
+'208.185.87.145.liveadvert.com',
+'208.185.87.146.liveadvert.com',
+'208.185.87.147.liveadvert.com',
+'208.185.87.148.liveadvert.com',
+'208.185.87.149.liveadvert.com',
+'208.185.87.15.liveadvert.com',
+'208.185.87.150.liveadvert.com',
+'208.185.87.151.liveadvert.com',
+'208.185.87.152.liveadvert.com',
+'208.185.87.153.liveadvert.com',
+'208.185.87.154.liveadvert.com',
+'208.185.87.155.liveadvert.com',
+'208.185.87.156.liveadvert.com',
+'208.185.87.157.liveadvert.com',
+'208.185.87.158.liveadvert.com',
+'208.185.87.159.liveadvert.com',
+'208.185.87.16.liveadvert.com',
+'208.185.87.160.liveadvert.com',
+'208.185.87.161.liveadvert.com',
+'208.185.87.162.liveadvert.com',
+'208.185.87.163.liveadvert.com',
+'208.185.87.164.liveadvert.com',
+'208.185.87.165.liveadvert.com',
+'208.185.87.166.liveadvert.com',
+'208.185.87.167.liveadvert.com',
+'208.185.87.168.liveadvert.com',
+'208.185.87.169.liveadvert.com',
+'208.185.87.17.liveadvert.com',
+'208.185.87.170.liveadvert.com',
+'208.185.87.171.liveadvert.com',
+'208.185.87.172.liveadvert.com',
+'208.185.87.173.liveadvert.com',
+'208.185.87.174.liveadvert.com',
+'208.185.87.175.liveadvert.com',
+'208.185.87.176.liveadvert.com',
+'208.185.87.177.liveadvert.com',
+'208.185.87.178.liveadvert.com',
+'208.185.87.179.liveadvert.com',
+'208.185.87.18.liveadvert.com',
+'208.185.87.180.liveadvert.com',
+'208.185.87.181.liveadvert.com',
+'208.185.87.182.liveadvert.com',
+'208.185.87.183.liveadvert.com',
+'208.185.87.184.liveadvert.com',
+'208.185.87.185.liveadvert.com',
+'208.185.87.186.liveadvert.com',
+'208.185.87.187.liveadvert.com',
+'208.185.87.188.liveadvert.com',
+'208.185.87.189.liveadvert.com',
+'208.185.87.19.liveadvert.com',
+'208.185.87.190.liveadvert.com',
+'208.185.87.191.liveadvert.com',
+'208.185.87.192.liveadvert.com',
+'208.185.87.193.liveadvert.com',
+'208.185.87.194.liveadvert.com',
+'208.185.87.195.liveadvert.com',
+'208.185.87.196.liveadvert.com',
+'208.185.87.197.liveadvert.com',
+'208.185.87.198.liveadvert.com',
+'208.185.87.199.liveadvert.com',
+'208.185.87.2.liveadvert.com',
+'208.185.87.20.liveadvert.com',
+'208.185.87.200.liveadvert.com',
+'208.185.87.201.liveadvert.com',
+'208.185.87.202.liveadvert.com',
+'208.185.87.203.liveadvert.com',
+'208.185.87.204.liveadvert.com',
+'208.185.87.205.liveadvert.com',
+'208.185.87.206.liveadvert.com',
+'208.185.87.207.liveadvert.com',
+'208.185.87.208.liveadvert.com',
+'208.185.87.209.liveadvert.com',
+'208.185.87.21.liveadvert.com',
+'208.185.87.210.liveadvert.com',
+'208.185.87.211.liveadvert.com',
+'208.185.87.212.liveadvert.com',
+'208.185.87.213.liveadvert.com',
+'208.185.87.214.liveadvert.com',
+'208.185.87.215.liveadvert.com',
+'208.185.87.216.liveadvert.com',
+'208.185.87.217.liveadvert.com',
+'208.185.87.218.liveadvert.com',
+'208.185.87.219.liveadvert.com',
+'208.185.87.22.liveadvert.com',
+'208.185.87.220.liveadvert.com',
+'208.185.87.221.liveadvert.com',
+'208.185.87.222.liveadvert.com',
+'208.185.87.223.liveadvert.com',
+'208.185.87.224.liveadvert.com',
+'208.185.87.225.liveadvert.com',
+'208.185.87.226.liveadvert.com',
+'208.185.87.227.liveadvert.com',
+'208.185.87.228.liveadvert.com',
+'208.185.87.229.liveadvert.com',
+'208.185.87.23.liveadvert.com',
+'208.185.87.230.liveadvert.com',
+'208.185.87.231.liveadvert.com',
+'208.185.87.232.liveadvert.com',
+'208.185.87.233.liveadvert.com',
+'208.185.87.234.liveadvert.com',
+'208.185.87.235.liveadvert.com',
+'208.185.87.236.liveadvert.com',
+'208.185.87.237.liveadvert.com',
+'208.185.87.238.liveadvert.com',
+'208.185.87.239.liveadvert.com',
+'208.185.87.24.liveadvert.com',
+'208.185.87.240.liveadvert.com',
+'208.185.87.241.liveadvert.com',
+'208.185.87.242.liveadvert.com',
+'208.185.87.243.liveadvert.com',
+'208.185.87.244.liveadvert.com',
+'208.185.87.245.liveadvert.com',
+'208.185.87.246.liveadvert.com',
+'208.185.87.247.liveadvert.com',
+'208.185.87.248.liveadvert.com',
+'208.185.87.249.liveadvert.com',
+'208.185.87.25.liveadvert.com',
+'208.185.87.250.liveadvert.com',
+'208.185.87.251.liveadvert.com',
+'208.185.87.252.liveadvert.com',
+'208.185.87.253.liveadvert.com',
+'208.185.87.254.liveadvert.com',
+'208.185.87.26.liveadvert.com',
+'208.185.87.27.liveadvert.com',
+'208.185.87.28.liveadvert.com',
+'208.185.87.29.liveadvert.com',
+'208.185.87.3.liveadvert.com',
+'208.185.87.30.liveadvert.com',
+'208.185.87.31.liveadvert.com',
+'208.185.87.32.liveadvert.com',
+'208.185.87.33.liveadvert.com',
+'208.185.87.34.liveadvert.com',
+'208.185.87.35.liveadvert.com',
+'208.185.87.36.liveadvert.com',
+'208.185.87.37.liveadvert.com',
+'208.185.87.38.liveadvert.com',
+'208.185.87.39.liveadvert.com',
+'208.185.87.4.liveadvert.com',
+'208.185.87.40.liveadvert.com',
+'208.185.87.41.liveadvert.com',
+'208.185.87.42.liveadvert.com',
+'208.185.87.43.liveadvert.com',
+'208.185.87.44.liveadvert.com',
+'208.185.87.45.liveadvert.com',
+'208.185.87.46.liveadvert.com',
+'208.185.87.47.liveadvert.com',
+'208.185.87.48.liveadvert.com',
+'208.185.87.49.liveadvert.com',
+'208.185.87.5.liveadvert.com',
+'208.185.87.50.liveadvert.com',
+'208.185.87.51.liveadvert.com',
+'208.185.87.52.liveadvert.com',
+'208.185.87.53.liveadvert.com',
+'208.185.87.54.liveadvert.com',
+'208.185.87.55.liveadvert.com',
+'208.185.87.56.liveadvert.com',
+'208.185.87.57.liveadvert.com',
+'208.185.87.58.liveadvert.com',
+'208.185.87.59.liveadvert.com',
+'208.185.87.6.liveadvert.com',
+'208.185.87.60.liveadvert.com',
+'208.185.87.61.liveadvert.com',
+'208.185.87.62.liveadvert.com',
+'208.185.87.63.liveadvert.com',
+'208.185.87.64.liveadvert.com',
+'208.185.87.65.liveadvert.com',
+'208.185.87.66.liveadvert.com',
+'208.185.87.67.liveadvert.com',
+'208.185.87.68.liveadvert.com',
+'208.185.87.69.liveadvert.com',
+'208.185.87.7.liveadvert.com',
+'208.185.87.70.liveadvert.com',
+'208.185.87.71.liveadvert.com',
+'208.185.87.72.liveadvert.com',
+'208.185.87.73.liveadvert.com',
+'208.185.87.74.liveadvert.com',
+'208.185.87.75.liveadvert.com',
+'208.185.87.76.liveadvert.com',
+'208.185.87.77.liveadvert.com',
+'208.185.87.78.liveadvert.com',
+'208.185.87.79.liveadvert.com',
+'208.185.87.8.liveadvert.com',
+'208.185.87.80.liveadvert.com',
+'208.185.87.81.liveadvert.com',
+'208.185.87.82.liveadvert.com',
+'208.185.87.83.liveadvert.com',
+'208.185.87.84.liveadvert.com',
+'208.185.87.85.liveadvert.com',
+'208.185.87.86.liveadvert.com',
+'208.185.87.87.liveadvert.com',
+'208.185.87.88.liveadvert.com',
+'208.185.87.89.liveadvert.com',
+'208.185.87.9.liveadvert.com',
+'208.185.87.90.liveadvert.com',
+'208.185.87.91.liveadvert.com',
+'208.185.87.92.liveadvert.com',
+'208.185.87.93.liveadvert.com',
+'208.185.87.94.liveadvert.com',
+'208.185.87.95.liveadvert.com',
+'208.185.87.96.liveadvert.com',
+'208.185.87.97.liveadvert.com',
+'208.185.87.98.liveadvert.com',
+'208.185.87.99.liveadvert.com',
+'208.6.87.194.dynamic.dol.ru',
+'209.6.87.194.dynamic.dol.ru',
+'20996-1061.popunder.loading-delivery1.com',
+'20d625b48e.se',
+'20minde.wemfbox.ch',
+'20popup.com',
+'210.6.87.194.dynamic.dol.ru',
+'21011-1061.popunder.loading-delivery1.com',
+'211.6.87.194.dynamic.dol.ru',
+'212.6.87.194.dynamic.dol.ru',
+'213.6.87.194.dynamic.dol.ru',
+'214.6.87.194.dynamic.dol.ru',
+'2149921.r.msn.com',
+'215.6.87.194.dynamic.dol.ru',
+'2154.bitterstrawberry.com',
+'2156.bitterstrawberry.com',
+'216.6.87.194.dynamic.dol.ru',
+'2161.bitterstrawberry.com',
+'217.6.87.194.dynamic.dol.ru',
+'218.6.87.194.dynamic.dol.ru',
+'219.6.87.194.dynamic.dol.ru',
+'2191.engine.mobileapptracking.com',
+'2196503.fls.doubleclick.net',
+'21v6m.realsecuredredirect.com',
+'220.6.87.194.dynamic.dol.ru',
+'2200.bitterstrawberry.com',
+'2205.bitterstrawberry.com',
+'2207.bitterstrawberry.com',
+'221.6.87.194.dynamic.dol.ru',
+'222.6.87.194.dynamic.dol.ru',
+'223.6.87.194.dynamic.dol.ru',
+'22329-406.popunder.loading-delivery1.com',
+'2233.bitterstrawberry.com',
+'224.6.87.194.dynamic.dol.ru',
+'225.6.87.194.dynamic.dol.ru',
+'226.6.87.194.dynamic.dol.ru',
+'227.6.87.194.dynamic.dol.ru',
+'22774.9133.302br.net',
+'228.6.87.194.dynamic.dol.ru',
+'229.6.87.194.dynamic.dol.ru',
+'2297.bitterstrawberry.com',
+'230.6.87.194.dynamic.dol.ru',
+'231.6.87.194.dynamic.dol.ru',
+'231c-356f-e194-8857.reporo.net',
+'232.6.87.194.dynamic.dol.ru',
+'232.bitterstrawberry.com',
+'233.6.87.194.dynamic.dol.ru',
+'233.bitterstrawberry.com',
+'2332696.fls.doubleclick.net',
+'2336.bitterstrawberry.com',
+'234.6.87.194.dynamic.dol.ru',
+'235.6.87.194.dynamic.dol.ru',
+'235.bitterstrawberry.com',
+'236.6.87.194.dynamic.dol.ru',
+'237.6.87.194.dynamic.dol.ru',
+'237.bitterstrawberry.com',
+'2370.bitterstrawberry.com',
+'238.6.87.194.dynamic.dol.ru',
+'239.6.87.194.dynamic.dol.ru',
+'2398.bitterstrawberry.com',
+'2400.bitterstrawberry.com',
+'2426010203.log.optimizely.com',
+'24290.9170.302br.net',
+'24293.9170.302br.net',
+'2449650414.log.optimizely.com',
+'245.bitterstrawberry.com',
+'2463678.fls.doubleclick.net',
+'247media.com',
+'247media.net',
+'247realmedia.com',
+'247support.adtech.fr',
+'247wsr.com',
+'2499034.fls.doubleclick.net',
+'24fun.2cnt.net',
+'24partners.go2cloud.org',
+'24pm-affiliation.com',
+'24x7adservice.com',
+'2507573.fls.doubleclick.net',
+'253.bitterstrawberry.com',
+'254.bitterstrawberry.com',
+'2542116.fls.doubleclick.net',
+'2551-ebc7-ebcf-4aff.reporo.net',
+'256.bitterstrawberry.com',
+'2565.bitterstrawberry.com',
+'2570540166.log.optimizely.com',
+'2573.bitterstrawberry.com',
+'2674011.r.msn.com',
+'27.6.87.194.dynamic.dol.ru',
+'27220337.go2cloud.org',
+'2769185.r.msn.com',
+'2793343.fls.doubleclick.net',
+'279r.realsecuredredirect.com',
+'28.6.87.194.dynamic.dol.ru',
+'2895566.fls.doubleclick.net',
+'2896678.fls.doubleclick.net',
+'29.6.87.194.dynamic.dol.ru',
+'2912a.v.fwmrm.net',
+'29193.9215.302br.net',
+'2926210385.log.optimizely.com',
+'2975c.v.fwmrm.net',
+'29bca6cb72a665c8.se',
+'29rhino.go2cloud.org',
+'2a.com.112.207.net',
+'2baners.ero-advertising.com',
+'2bibi.voluumtrk.com',
+'2c60-1723-23d3-2b28.reporo.net',
+'2cgi.hitbox.com',
+'2ds.ero-advertising.com',
+'2e1ck.voluumtrk.com',
+'2fbanners.ero-advertising.com',
+'2fflatfee.ero-advertising.com',
+'2finteryield.jmp9.com',
+'2fspeedclicks.ero-advertising.com',
+'2fview.atdmt.com.24492.9179.302br.net',
+'2fview.atdmt.com.60413.9342.302br.net',
+'2fview.atdmt.com.60416.9342.302br.net',
+'2gtstrk.com',
+'2ijmu.voluumtrk.com',
+'2ik1o.voluumtrk.com',
+'2inp7.voluumtrk.com',
+'2jy2d.voluumtrk.com',
+'2kd7g.voluumtrk.com',
+'2kygq.voluumtrk.com',
+'2lafc.voluumtrk.com',
+'2o7.net',
+'2options.go2cloud.org',
+'2qtn9.voluumtrk.com',
+'2sbd3.voluumtrk.com',
+'2sksk.voluumtrk.com',
+'2snla.voluumtrk.com',
+'2spyware.us.intellitxt.com',
+'2ttb4.voluumtrk.com',
+'2usdj.voluumtrk.com',
+'2vci0.voluumtrk.com',
+'2vie.catdmt.omc.324.6000.302br.net',
+'2wiz6.voluumtrk.com',
+'2xkft.voluumtrk.com',
+'2xxis.voluumtrk.com',
+'2xz5e.voluumtrk.com',
+'2y54x.voluumtrk.com',
+'2yo1y.voluumtrk.com',
+'3.2cnt.net',
+'3.ptp22.com',
+'30.6.87.194.dynamic.dol.ru',
+'302br.net',
+'303net.net',
+'306.bitterstrawberry.com',
+'309.bitterstrawberry.com',
+'30klc.voluumtrk.com',
+'31.6.87.194.dynamic.dol.ru',
+'3130320.fls.doubleclick.net',
+'32.6.87.194.dynamic.dol.ru',
+'3217776.r.msn.com',
+'3252817.r.msn.com',
+'3276817.fls.doubleclick.net',
+'32d1d3b9c.se',
+'33.6.87.194.dynamic.dol.ru',
+'33526.9243.302br.net',
+'33qx.secoptim.com',
+'34.6.87.194.dynamic.dol.ru',
+'34245.hittail.com',
+'343.bitterstrawberry.com',
+'3480025.log.optimizely.com',
+'35.6.87.194.dynamic.dol.ru',
+'3501113.fls.doubleclick.net',
+'35082.9255.302br.net',
+'350media.com',
+'35369.9265.302br.net',
+'36.6.87.194.dynamic.dol.ru',
+'360.yahoo.com',
+'360ads.go2cloud.org',
+'360popunder.com',
+'360redirect.com',
+'360switch.net',
+'360training.go2cloud.org',
+'360unitedmedia.go2cloud.org',
+'36222.seu.cleverreach.com',
+'3689-7dbc-ddf7-a45f.reporo.net',
+'36igq.voluumtrk.com',
+'37.6.87.194.dynamic.dol.ru',
+'3738527.fls.doubleclick.net',
+'3773523.fls.doubleclick.net',
+'37dyq.voluumtrk.com',
+'38.6.87.194.dynamic.dol.ru',
+'38179760.log.optimizely.com',
+'3879194.fls.doubleclick.net',
+'39.6.87.194.dynamic.dol.ru',
+'390.bitterstrawberry.com',
+'3941123.fls.doubleclick.net',
+'3973258.fls.doubleclick.net',
+'3982178.fls.doubleclick.net',
+'3axp9.voluumtrk.com',
+'3b9cc85dcf732d5.se',
+'3c41ddc0.se',
+'3c45d848d99.se',
+'3cinteractive.com',
+'3cnce854.com',
+'3d05q.voluumtrk.com',
+'3dc265e90c6d9fa3cc0c-3f982316dc17e6e99fe1b47483239d63.r95.cf2.rackcdn.com',
+'3ds.ero-advertising.com',
+'3dstats.com',
+'3ece-5608-732a-5bbd.reporo.net',
+'3flv2.voluumtrk.com',
+'3grs6.voluumtrk.com',
+'3hfag.voluumtrk.com',
+'3m56h.voluumtrk.com',
+'3point14.go2affise.com',
+'3rdeye.go2cloud.org',
+'3rih9.voluumtrk.com',
+'3ukg5.voluumtrk.com',
+'3uuak.voluumtrk.com',
+'3uzzo.voluumtrk.com',
+'3wykr.voluumtrk.com',
+'3xvh4.voluumtrk.com',
+'3yp7i.voluumtrk.com',
+'3zkgw.voluumtrk.com',
+'4.6.87.194.dynamic.dol.ru',
+'4.ptp22.com',
+'40.6.87.194.dynamic.dol.ru',
+'4002dbde88aebefdb1f7-8f93653c470e43727b1b565964867247.r51.cf2.rackcdn.com',
+'401591473.log.optimizely.com',
+'401ads.go2cloud.org',
+'4055.xg4ken.com',
+'40ohl.voluumtrk.com',
+'40xbfzk8.com',
+'41.6.87.194.dynamic.dol.ru',
+'411affiliates.ca',
+'4177752.fls.doubleclick.net',
+'418e158b80bc0381719c-c51e63b7e27054c59548bc9120302775.r53.cf2.rackcdn.com',
+'4191036.fls.doubleclick.net',
+'4191748.fls.doubleclick.net',
+'42.6.87.194.dynamic.dol.ru',
+'4228414.fls.doubleclick.net',
+'4235225.fls.doubleclick.net',
+'4236808.fls.doubleclick.net',
+'4294919531.kt.mixmarket.biz',
+'4299553.fls.doubleclick.net',
+'43.6.87.194.dynamic.dol.ru',
+'4331660.fls.doubleclick.net',
+'4338244.fls.doubleclick.net',
+'4345210.fls.doubleclick.net',
+'4371920.fls.doubleclick.net',
+'4375326.fls.doubleclick.net',
+'4379742.fls.doubleclick.net',
+'44.6.87.194.dynamic.dol.ru',
+'44902.9339.302br.net',
+'45.6.87.194.dynamic.dol.ru',
+'45i73jv6.com',
+'46.6.87.194.dynamic.dol.ru',
+'47.6.87.194.dynamic.dol.ru',
+'47.xg4ken.com',
+'47550.9340.302br.net',
+'47nbp.voluumtrk.com',
+'48.6.87.194.dynamic.dol.ru',
+'48ed4acf13b.se',
+'48qyx.voluumtrk.com',
+'49.6.87.194.dynamic.dol.ru',
+'49479.9362.302br.net',
+'49535.com',
+'4a6xw.voluumtrk.com',
+'4affiliate.net',
+'4anners.ero-advertising.com',
+'4bca-d658-a4da-12c8.reporo.net',
+'4d5.net',
+'4d80-dd41-9ed3-33b1.reporo.net',
+'4dogmedia.go2cloud.org',
+'4e93-6203-2401-d118.reporo.net',
+'4feaw.voluumtrk.com',
+'4gezz.win.adsservingtwig.xyz',
+'4hdt7.voluumtrk.com',
+'4hplo.voluumtrk.com',
+'4info.com',
+'4k6k0zj3.com',
+'4kehf.voluumtrk.com',
+'4ksir.voluumtrk.com',
+'4mads.com',
+'4n7i8.voluumtrk.com',
+'4necp.voluumtrk.com',
+'4online.go2affise.com',
+'4q.iperceptions.com',
+'4qinvite.4q.iperceptions.com',
+'4qsurvey.com',
+'4rxgu.voluumtrk.com',
+'4rzfl.voluumtrk.com',
+'4see.mobi',
+'4seeresults.com',
+'4spp2.voluumtrk.com',
+'4ur.click',
+'4uxl.go2cloud.org',
+'4va3x.voluumtrk.com',
+'4web.cz',
+'4x4review.us.intellitxt.com',
+'5.6.87.194.dynamic.dol.ru',
+'5.ptp22.com',
+'50.6.87.194.dynamic.dol.ru',
+'507222872.go2cloud.org',
+'50mango.go2affise.com',
+'51.6.87.194.dynamic.dol.ru',
+'51yes.com',
+'52.6.87.194.dynamic.dol.ru',
+'5234-259b-588d-41c6.reporo.net',
+'526633146.redpop.pro',
+'5280publishing.go2cloud.org',
+'53.6.87.194.dynamic.dol.ru',
+'535225459.keywordblocks.com',
+'54.6.87.194.dynamic.dol.ru',
+'5482fc58904b613aee952d23cac4db91.adsk2.co',
+'55.6.87.194.dynamic.dol.ru',
+'554924358.log.optimizely.com',
+'5555c0e19278c10ce23e-e43b9b9293b141a8c68c3bbff03519a0.r36.cf2.rackcdn.com',
+'555fe0fa.qqc.co',
+'55624-3.popunder.loading-delivery1.com',
+'55788.9391.302br.net',
+'56.6.87.194.dynamic.dol.ru',
+'560183740bc38303d0000248.maestroad.checkm8.com',
+'5623.web-stats.org',
+'56853.9349.302br.net',
+'56mfv.voluumtrk.com',
+'57.6.87.194.dynamic.dol.ru',
+'57222.9406.302br.net',
+'57243.9406.302br.net',
+'5726.bapi.adsafeprotected.com',
+'58.6.87.194.dynamic.dol.ru',
+'59.6.87.194.dynamic.dol.ru',
+'592.bitterstrawberry.com',
+'594.bitterstrawberry.com',
+'5ab3o.voluumtrk.com',
+'5avxd.voluumtrk.com',
+'5c2fk.voluumtrk.com',
+'5cuav.voluumtrk.com',
+'5czyx.voluumtrk.com',
+'5e5ff159.linkbucks.com',
+'5f8174fcf50c8f3fcaa2-1d2bf932855ebd52407efbb6cb4b64e5.r49.cf2.rackcdn.com',
+'5iesg.voluumtrk.com',
+'5jkjr.voluumtrk.com',
+'5ktep.voluumtrk.com',
+'5l11k.voluumtrk.com',
+'5nv2z.voluumtrk.com',
+'5pxno.voluumtrk.com',
+'5r2vl.voluumtrk.com',
+'5staraffiliateprograms.com',
+'5starsupport.us.intellitxt.com',
+'5t3is.voluumtrk.com',
+'5toay.voluumtrk.com',
+'5tujb.voluumtrk.com',
+'5wtbg.voluumtrk.com',
+'5ymz8.voluumtrk.com',
+'5yrwz.voluumtrk.com',
+'5ywhn.voluumtrk.com',
+'5zegq.voluumtrk.com',
+'6.6.87.194.dynamic.dol.ru',
+'6.ptp22.com',
+'60.6.87.194.dynamic.dol.ru',
+'600z.com',
+'6053-4c08-e99b-8d7a.reporo.net',
+'6058.bapi.adsafeprotected.com',
+'6067.bapi.adsafeprotected.com',
+'60djx.voluumtrk.com',
+'61.6.87.194.dynamic.dol.ru',
+'6153-8fbc-408b-b36b.reporo.net',
+'61qwg.voluumtrk.com',
+'62.6.87.194.dynamic.dol.ru',
+'623.bapi.adsafeprotected.com',
+'62919.9458.302br.net',
+'63.6.87.194.dynamic.dol.ru',
+'63.9view.atdmth.ya.869.9002.302br.net',
+'6322.web-stats.org',
+'63ads.go2cloud.org',
+'63rbl.voluumtrk.com',
+'64.208view.atdmt.com.1818.9020.302br.net',
+'64.6.87.194.dynamic.dol.ru',
+'65.163view.atdmt.com.801.8000.302br.net',
+'65.6.87.194.dynamic.dol.ru',
+'6539.bapi.adsafeprotected.com',
+'6553-fe9a-fd29-78e9.reporo.net',
+'66.151.63view.atdmt.com.801.8000.302br.net',
+'66.6.87.194.dynamic.dol.ru',
+'66mhb.voluumtrk.com',
+'67.132.view.atdmt.com.324.6000.302br.net',
+'67.13view.atdmt.com.324.6000.302br.net',
+'67.6.87.194.dynamic.dol.ru',
+'68.6.87.194.dynamic.dol.ru',
+'6857-d041-8100-fd21.reporo.net',
+'688.bitterstrawberry.com',
+'69.172.216.58.72603.9610.302br.net',
+'69.172.216.58.73871.9622.302br.net',
+'69.172.216.58.73872.9622.302br.net',
+'69.172.216.58.77876.9489.302br.net',
+'69.172.216.58.78742.9675.302br.net',
+'69.172.216.58.xxxxx.xxxx.302br.net',
+'69.6.87.194.dynamic.dol.ru',
+'69ba-95af-a923-8c02.reporo.net',
+'6a036421edec9693c962-4d1f758fa5668c904b9cd6e76bdc0d97.r71.cf2.rackcdn.com',
+'6a802238f18629454f48-5fd47577f4847dded97d514126394433.r3.cf2.rackcdn.com',
+'6ae6-f579-2f31-2cce.reporo.net',
+'6aemj.voluumtrk.com',
+'6aixd.voluumtrk.com',
+'6bf28imiuaptt949z56frbrn0z.hop.clickbank.net',
+'6c0jn.voluumtrk.com',
+'6ceig.voluumtrk.com',
+'6cl2q.voluumtrk.com',
+'6ctvp.voluumtrk.com',
+'6e2bd3848d2b73.se',
+'6e2ey.voluumtrk.com',
+'6e32870d409e7dd29e74-1f888a5500a4bf77de3933bbc73268d9.r21.cf2.rackcdn.com',
+'6ecdz.voluumtrk.com',
+'6f307e35.linkbucks.com',
+'6f80-9f9d-e2a7-67cb.reporo.net',
+'6fikt.voluumtrk.com',
+'6nkks.voluumtrk.com',
+'6p2bh.voluumtrk.com',
+'6qtbr.voluumtrk.com',
+'6r2uvllu.com',
+'6voop.voluumtrk.com',
+'7.6.87.194.dynamic.dol.ru',
+'7.ptp22.com',
+'70.6.87.194.dynamic.dol.ru',
+'70543.9546.302br.net',
+'70642.9528.302br.net',
+'707.bapi.adsafeprotected.com',
+'7093.bapi.adsafeprotected.com',
+'709d-469e-a98a-0a51.reporo.net',
+'71.6.87.194.dynamic.dol.ru',
+'718unlimited.com',
+'71aa8ed2ff1c8f.com',
+'72.6.87.194.dynamic.dol.ru',
+'72.view.atdmt.com.303.6000.302br.net',
+'7202.bapi.adsafeprotected.com',
+'7246.bapi.adsafeprotected.com',
+'7250.bapi.adsafeprotected.com',
+'7251.bapi.adsafeprotected.com',
+'7263-7365-7072-7467.reporo.net',
+'72669.9596.302br.net',
+'728x90.exad.me',
+'73.6.87.194.dynamic.dol.ru',
+'7303a09a9435e14d2141-577d252383f9c1423860b10142058ad7.r27.cf2.rackcdn.com',
+'7336.engine.mobileapptracking.com',
+'736516903.keywordblocks.com',
+'73ec0.voluumtrk.com',
+'74.6.87.194.dynamic.dol.ru',
+'74647825.log.optimizely.com',
+'75.6.87.194.dynamic.dol.ru',
+'75334.9458.302br.net',
+'757.justclick.ru',
+'76.6.87.194.dynamic.dol.ru',
+'76er2.voluumtrk.com',
+'76f42.voluumtrk.com',
+'76wik.voluumtrk.com',
+'76wy2.voluumtrk.com',
+'77.6.87.194.dynamic.dol.ru',
+'777seo.com',
+'77nid.voluumtrk.com',
+'77tzz.win.adsservingtwig.xyz',
+'78.6.87.194.dynamic.dol.ru',
+'7828rbrmedia.go2cloud.org',
+'7882.bapi.adsafeprotected.com',
+'7899-7fc3-3379-0ddd.reporo.net',
+'79.6.87.194.dynamic.dol.ru',
+'79423.analytics.edgekey.net',
+'7adpower.com',
+'7b493gkdlhlgwr0brceox8158d.hop.clickbank.net',
+'7bndh.voluumtrk.com',
+'7cxcrejm.com',
+'7dz98ad91l.s.ad6media.fr',
+'7ec4-d4b0-f6eb-5588.reporo.net',
+'7faa-e93a-19c5-c96d.reporo.net',
+'7fdf-f670-24dd-3bd8.reporo.net',
+'7fed-2832-993b-cb28.reporo.net',
+'7fgba.voluumtrk.com',
+'7fpdm.voluumtrk.com',
+'7gfqw.voluumtrk.com',
+'7hfmu.voluumtrk.com',
+'7hpb1.voluumtrk.com',
+'7hrpx.voluumtrk.com',
+'7iytk.voluumtrk.com',
+'7jftl.voluumtrk.com',
+'7jjrd.voluumtrk.com',
+'7lfu6.voluumtrk.com',
+'7ntrp.voluumtrk.com',
+'7qkuf.voluumtrk.com',
+'7search.com',
+'7sultans.com',
+'7vhyc.voluumtrk.com',
+'7yt26.voluumtrk.com',
+'8.6.87.194.dynamic.dol.ru',
+'8.dramafeverw2.appspot.com',
+'8.ptp22.com',
+'80.6.87.194.dynamic.dol.ru',
+'8097-c493-8fbf-0dc2.reporo.net',
+'81.6.87.194.dynamic.dol.ru',
+'810f3f9dde63ae3.com',
+'811b-7d4e-7abb-a29e.reporo.net',
+'81d9-e62d-0d23-6259.reporo.net',
+'81ynv.voluumtrk.com',
+'82.6.87.194.dynamic.dol.ru',
+'8233fa03a40c92d.com',
+'824le.voluumtrk.com',
+'82d914.se',
+'82sn9.voluumtrk.com',
+'83.6.87.194.dynamic.dol.ru',
+'8328.bapi.adsafeprotected.com',
+'833b446bf809d05d8cbe-22d497cab0248fe8bf9979b2e6155da2.r90.cf2.rackcdn.com',
+'84.6.87.194.dynamic.dol.ru',
+'85.6.87.194.dynamic.dol.ru',
+'859-events.olark.com',
+'86.6.87.194.dynamic.dol.ru',
+'863c4c0c521.se',
+'865.bitterstrawberry.com',
+'87.6.87.194.dynamic.dol.ru',
+'8796.tctm.co',
+'88.6.87.194.dynamic.dol.ru',
+'881.engine.mobileapptracking.com',
+'8889-38b3-9b87-03a8.reporo.net',
+'89.6.87.194.dynamic.dol.ru',
+'89jw3.voluumtrk.com',
+'8bdnl.voluumtrk.com',
+'8cynz.voluumtrk.com',
+'8ehdc.voluumtrk.com',
+'8jkad.voluumtrk.com',
+'8kvks.voluumtrk.com',
+'8l1dc.voluumtrk.com',
+'8lacf.voluumtrk.com',
+'8lt4u.voluumtrk.com',
+'8ma9b.voluumtrk.com',
+'8mrbg.voluumtrk.com',
+'8mzyb.voluumtrk.com',
+'8ngcx.voluumtrk.com',
+'8pzcp.voluumtrk.com',
+'8rhf0.voluumtrk.com',
+'8rvlh.voluumtrk.com',
+'8wtua.voluumtrk.com',
+'8x8ef.voluumtrk.com',
+'9.6.87.194.dynamic.dol.ru',
+'9.ptp22.com',
+'90.6.87.194.dynamic.dol.ru',
+'900quickcash.com',
+'9014.302br.net',
+'9030.302br.net',
+'90cc4.voluumtrk.com',
+'91.10view.atdmt.com.706.9000.302br.net',
+'91.6.87.194.dynamic.dol.ru',
+'911promotion.com',
+'913.bitterstrawberry.com',
+'9169.302br.net',
+'92.6.87.194.dynamic.dol.ru',
+'9215.302br.net',
+'9243.302br.net',
+'9250.302br.net',
+'92b6j.voluumtrk.com',
+'92x.tumblr.com',
+'93.6.87.194.dynamic.dol.ru',
+'9322.302br.net',
+'9332.302br.net',
+'9333.302br.net',
+'9340.302br.net',
+'9349.302br.net',
+'9362.302br.net',
+'94.6.87.194.dynamic.dol.ru',
+'9406.302br.net',
+'9414.302br.net',
+'941c-f58d-9ddb-b002.reporo.net',
+'943.bitterstrawberry.com',
+'943.engine.mobileapptracking.com',
+'9450.302br.net',
+'9458.302br.net',
+'9489.302br.net',
+'94982c5b634975e50103ce96082d2827.adsk2.co',
+'95.6.87.194.dynamic.dol.ru',
+'95126.hittail.com',
+'9528.302br.net',
+'9546.302br.net',
+'9596.302br.net',
+'96.6.87.194.dynamic.dol.ru',
+'9615.302br.net',
+'96175.hittail.com',
+'9675.302br.net',
+'968.bitterstrawberry.com',
+'97.6.87.194.dynamic.dol.ru',
+'9785216.log.optimizely.com',
+'97a7e.voluumtrk.com',
+'98.6.87.194.dynamic.dol.ru',
+'980media.com',
+'99.6.87.194.dynamic.dol.ru',
+'991.com',
+'99binary.go2cloud.org',
+'99x.com',
+'9ad06fe7lklknzbhi2pbzhoz9w.hop.clickbank.net',
+'9ak04.voluumtrk.com',
+'9am.2cnt.net',
+'9ata.ero-advertising.com',
+'9awdf.voluumtrk.com',
+'9b80-7ce0-5a47-2323.reporo.net',
+'9brpz.voluumtrk.com',
+'9bwls.voluumtrk.com',
+'9bx7v.voluumtrk.com',
+'9c1f917.se',
+'9c4e-159e-38f6-08ea.reporo.net',
+'9cc85d.se',
+'9cfa-356e-ec76-7adf.reporo.net',
+'9ctyz.voluumtrk.com',
+'9d1a9742.qqc.co',
+'9down.us.intellitxt.com',
+'9ezja.voluumtrk.com',
+'9ezon.voluumtrk.com',
+'9kfsz.voluumtrk.com',
+'9kzzh.voluumtrk.com',
+'9lbry.voluumtrk.com',
+'9m1cn.voluumtrk.com',
+'9m2hg.voluumtrk.com',
+'9mwoq.voluumtrk.com',
+'9mybb.voluumtrk.com',
+'9nemj.voluumtrk.com',
+'9pdq6.voluumtrk.com',
+'9rzzg.voluumtrk.com',
+'9thelm.go2cloud.org',
+'9v798.voluumtrk.com',
+'9wjg4.voluumtrk.com',
+'9zaju.voluumtrk.com',
+'9zfh1.voluumtrk.com',
+'a-ads.com',
+'a-counter.com.ua',
+'a-counter.kiev.ua',
+'a.1nimo.com',
+'a.ad-sys.com',
+'a.adnium.com',
+'a.adorika.net',
+'a.adroll.com',
+'a.ads.t-online.de',
+'a.ads1.msn.com',
+'a.ads2.msads.net',
+'a.ads2.msn.com',
+'a.adtech.de',
+'a.adtwirl.com',
+'a.ajkelra.com',
+'a.alimama.cn',
+'a.applovin.com',
+'a.avalhukof.com',
+'a.bahaimlo.com',
+'a.beglorena.com',
+'a.bokilora.com',
+'a.bondinra.com',
+'a.bonjikoa.com',
+'a.botiviga.com',
+'a.c.appier.net',
+'a.cam4free.com',
+'a.chartboost.com',
+'a.chukalapopi.com',
+'a.ciridola.com',
+'a.civitik.com',
+'a.clicksor.cn',
+'a.clickyab.com',
+'a.collective-media.net.22995.9150.302br.net',
+'a.collective-media.net.23421.9163.302br.net',
+'a.collective-media.net.23423.9163.302br.net',
+'a.collective-media.net.23425.9163.302br.net',
+'a.collective-media.net.23427.9163.302br.net',
+'a.collective-media.net.23429.9163.302br.net',
+'a.collective-media.net.23431.9163.302br.net',
+'a.collective-media.net.23433.9163.302br.net',
+'a.collective-media.net.42366.9289.302br.net',
+'a.collective-media.net.42367.9289.302br.net',
+'a.collective-media.net.42368.9289.302br.net',
+'a.collective-media.net.42369.9289.302br.net',
+'a.collective-media.net.42370.9289.302br.net',
+'a.collective-media.net.42371.9289.302br.net',
+'a.collective-media.net.42372.9289.302br.net',
+'a.collective-media.net.42373.9289.302br.net',
+'a.collective-media.net.42374.9289.302br.net',
+'a.collective-media.net.42375.9289.302br.net',
+'a.collective-media.net.42376.9289.302br.net',
+'a.collective-media.net.42377.9289.302br.net',
+'a.collective-media.net.42378.9289.302br.net',
+'a.collective-media.net.42379.9289.302br.net',
+'a.collective-media.net.42380.9289.302br.net',
+'a.collective-media.net.42381.9289.302br.net',
+'a.collective-media.net.42382.9289.302br.net',
+'a.collective-media.net.42384.9289.302br.net',
+'a.collective-media.net.42385.9289.302br.net',
+'a.collective-media.net.42386.9289.302br.net',
+'a.collective-media.net.42387.9289.302br.net',
+'a.collective-media.net.42388.9289.302br.net',
+'a.collective-media.net.42389.9289.302br.net',
+'a.collective-media.net.42390.9289.302br.net',
+'a.collective-media.net.42392.9289.302br.net',
+'a.collective-media.net.42394.9289.302br.net',
+'a.collective-media.net.42395.9289.302br.net',
+'a.collective-media.net.42396.9289.302br.net',
+'a.collective-media.net.42397.9289.302br.net',
+'a.collective-media.net.42398.9289.302br.net',
+'a.collective-media.net.42399.9289.302br.net',
+'a.collective-media.net.42400.9289.302br.net',
+'a.collective-media.net.42401.9289.302br.net',
+'a.collective-media.net.42402.9289.302br.net',
+'a.collective-media.net.42403.9289.302br.net',
+'a.collective-media.net.42404.9289.302br.net',
+'a.collective-media.net.42405.9289.302br.net',
+'a.collective-media.net.42406.9289.302br.net',
+'a.collective-media.net.42407.9289.302br.net',
+'a.collective-media.net.42408.9289.302br.net',
+'a.collective-media.net.42410.9289.302br.net',
+'a.collective-media.net.42412.9289.302br.net',
+'a.collective-media.net.42414.9289.302br.net',
+'a.collective-media.net.42416.9289.302br.net',
+'a.collective-media.net.42418.9289.302br.net',
+'a.collective-media.net.42420.9289.302br.net',
+'a.collective-media.net.42421.9289.302br.net',
+'a.collective-media.net.42422.9289.302br.net',
+'a.collective-media.net.42423.9289.302br.net',
+'a.collective-media.net.42424.9289.302br.net',
+'a.collective-media.net.42425.9289.302br.net',
+'a.collective-media.net.42426.9289.302br.net',
+'a.collective-media.net.42428.9289.302br.net',
+'a.collective-media.net.42430.9289.302br.net',
+'a.collective-media.net.42431.9289.302br.net',
+'a.collective-media.net.42432.9289.302br.net',
+'a.collective-media.net.42433.9289.302br.net',
+'a.collective-media.net.42434.9289.302br.net',
+'a.collective-media.net.42435.9289.302br.net',
+'a.collective-media.net.42436.9289.302br.net',
+'a.collective-media.net.42437.9289.302br.net',
+'a.collective-media.net.42438.9289.302br.net',
+'a.collective-media.net.42439.9289.302br.net',
+'a.collective-media.net.42440.9289.302br.net',
+'a.collective-media.net.42441.9289.302br.net',
+'a.collective-media.net.42442.9289.302br.net',
+'a.collective-media.net.42443.9289.302br.net',
+'a.collective-media.net.42444.9289.302br.net',
+'a.collective-media.net.42445.9289.302br.net',
+'a.collective-media.net.42446.9289.302br.net',
+'a.collective-media.net.42447.9289.302br.net',
+'a.collective-media.net.42448.9289.302br.net',
+'a.collective-media.net.42473.9289.302br.net',
+'a.collective-media.net.42474.9289.302br.net',
+'a.collective-media.net.42476.9289.302br.net',
+'a.collective-media.net.43489.9299.302br.net',
+'a.collective-media.net.43490.9299.302br.net',
+'a.collective-media.net.43491.9299.302br.net',
+'a.collective-media.net.43493.9299.302br.net',
+'a.collective-media.net.43494.9299.302br.net',
+'a.collective-media.net.43495.9299.302br.net',
+'a.collective-media.net.43497.9299.302br.net',
+'a.collective-media.net.43498.9299.302br.net',
+'a.collective-media.net.43499.9299.302br.net',
+'a.collective-media.net.43501.9299.302br.net',
+'a.collective-media.net.43503.9299.302br.net',
+'a.collective-media.net.43505.9299.302br.net',
+'a.collective-media.net.43506.9299.302br.net',
+'a.collective-media.net.43507.9299.302br.net',
+'a.collective-media.net.43508.9299.302br.net',
+'a.collective-media.net.43509.9299.302br.net',
+'a.collective-media.net.43510.9299.302br.net',
+'a.collective-media.net.43511.9299.302br.net',
+'a.collective-media.net.43512.9299.302br.net',
+'a.collective-media.net.43513.9299.302br.net',
+'a.collective-media.net.43514.9299.302br.net',
+'a.collective-media.net.43515.9299.302br.net',
+'a.collective-media.net.43516.9299.302br.net',
+'a.collective-media.net.43517.9299.302br.net',
+'a.collective-media.net.43518.9299.302br.net',
+'a.collective-media.net.43519.9299.302br.net',
+'a.collective-media.net.43520.9299.302br.net',
+'a.collective-media.net.43521.9299.302br.net',
+'a.collective-media.net.43523.9299.302br.net',
+'a.collective-media.net.43525.9299.302br.net',
+'a.collective-media.net.43527.9299.302br.net',
+'a.collective-media.net.43529.9299.302br.net',
+'a.collective-media.net.43531.9299.302br.net',
+'a.collective-media.net.43533.9299.302br.net',
+'a.collective-media.net.43534.9299.302br.net',
+'a.collective-media.net.43535.9299.302br.net',
+'a.collective-media.net.47545.9289.302br.net',
+'a.collective-media.net.47546.9289.302br.net',
+'a.collective-media.net.47547.9289.302br.net',
+'a.collective-media.net.47548.9289.302br.net',
+'a.collective-media.net.49419.9289.302br.net',
+'a.collective-media.net.49420.9289.302br.net',
+'a.collective-media.net.49421.9289.302br.net',
+'a.collective-media.net.49474.9362.302br.net',
+'a.collective-media.net.49475.9362.302br.net',
+'a.collective-media.net.49476.9362.302br.net',
+'a.collective-media.net.49477.9362.302br.net',
+'a.collective-media.net.49478.9362.302br.net',
+'a.collective-media.net.49479.9362.302br.net',
+'a.collective-media.net.49480.9362.302br.net',
+'a.collective-media.net.49481.9362.302br.net',
+'a.collective-media.net.49485.9362.302br.net',
+'a.collective-media.net.49487.9362.302br.net',
+'a.collective-media.net.49489.9362.302br.net',
+'a.collective-media.net.49490.9362.302br.net',
+'a.collective-media.net.49491.9362.302br.net',
+'a.collective-media.net.49492.9362.302br.net',
+'a.collective-media.net.49493.9362.302br.net',
+'a.collective-media.net.49494.9362.302br.net',
+'a.collective-media.net.49495.9362.302br.net',
+'a.collective-media.net.49496.9362.302br.net',
+'a.collective-media.net.49497.9362.302br.net',
+'a.collective-media.net.49501.9362.302br.net',
+'a.collective-media.net.49506.9362.302br.net',
+'a.collective-media.net.49507.9362.302br.net',
+'a.collective-media.net.49508.9362.302br.net',
+'a.collective-media.net.49509.9362.302br.net',
+'a.collective-media.net.49510.9362.302br.net',
+'a.collective-media.net.49511.9362.302br.net',
+'a.collective-media.net.49512.9362.302br.net',
+'a.collective-media.net.49513.9362.302br.net',
+'a.collective-media.net.68174.9535.302br.net',
+'a.collective-media.net.68175.9535.302br.net',
+'a.collective-media.net.68177.9535.302br.net',
+'a.collective-media.net.76215.9535.302br.net',
+'a.collective-media.net.76216.9535.302br.net',
+'a.collective-media.net.76217.9535.302br.net',
+'a.collective-media.net.76218.9535.302br.net',
+'a.collective-media.net.76224.9289.302br.net',
+'a.collective-media.net.76225.9289.302br.net',
+'a.collective-media.net.76226.9289.302br.net',
+'a.collective-media.net.76227.9289.302br.net',
+'a.collective-media.net.76228.9289.302br.net',
+'a.collective-media.net.76229.9289.302br.net',
+'a.collective-media.net.76230.9289.302br.net',
+'a.collective-media.net.76231.9289.302br.net',
+'a.collective-media.net.76232.9289.302br.net',
+'a.collective-media.net.76233.9289.302br.net',
+'a.collective-media.net.76234.9289.302br.net',
+'a.consumer.net',
+'a.ctasnet.com',
+'a.d.mojigaga.com',
+'a.dagasaka.com',
+'a.daghashmal.com',
+'a.dontibar.com',
+'a.dorapodorasham.com',
+'a.dpmsrv.com',
+'a.drogomet.com',
+'a.dulderbulder.com',
+'a.egolina.com',
+'a.ekolamis.com',
+'a.eporner.com',
+'a.erogaliv.com',
+'a.fandango.com',
+'a.farfarida.com',
+'a.flashtalking.com',
+'a.foditgoz.com',
+'a.forkitz.com',
+'a.fortumo.com',
+'a.fulhudhoo.com',
+'a.fw-a.co',
+'a.glcdn.co',
+'a.golizoli.com',
+'a.haklopar.com',
+'a.hariqavi.com',
+'a.hirovivi.com',
+'a.horheloopo.com',
+'a.horsered.com',
+'a.humuseliyahu.com',
+'a.imonomy.com',
+'a.intentmedia.net',
+'a.intgr.net',
+'a.iogous.com',
+'a.jadizayo.com',
+'a.jandolav.com',
+'a.jingavot.com',
+'a.jquerycdn.co.il',
+'a.jquerymin.co.il',
+'a.kalmloda.com',
+'a.kat.ph',
+'a.kickass.to',
+'a.kilomansa.com',
+'a.kilorama.com',
+'a.ktxtr.com',
+'a.kuchebraska.com',
+'a.lazyswipe.com',
+'a.ligatus.com',
+'a.liktirov.com',
+'a.livefreefunwith.me',
+'a.lokipodi.com',
+'a.measurementaz.com',
+'a.mibbit.com',
+'a.milparota.com',
+'a.mologiq.net',
+'a.mozefakt.com',
+'a.msclickrdr.com',
+'a.mujilora.com',
+'a.muligov.com',
+'a.myapp.com',
+'a.namitol.com',
+'a.networkworld.com',
+'a.niholaev.com',
+'a.niklesrov.com',
+'a.nimdinb.com',
+'a.o.nf',
+'a.o333o.com',
+'a.optinmonster.com',
+'a.optnmnstr.com',
+'a.pipilida.com',
+'a.pitatagata.com',
+'a.plapre.no',
+'a.pompazilla.com',
+'a.poratav.com',
+'a.postrelease.com',
+'a.prikolizdesa.com',
+'a.qawiman.com',
+'a.quavomi.com',
+'a.raasnet.com',
+'a.ratkalol.com',
+'a.remarketstats.com',
+'a.reqpostanza.com',
+'a.rfihub.com',
+'a.rmgserving.com',
+'a.roritabo.com',
+'a.rotibald.com',
+'a.sc.freepornvs.com',
+'a.scrappykoko.com',
+'a.senolati.com',
+'a.shmonekisot.com',
+'a.shokala.com',
+'a.shulhanafuh.com',
+'a.solarmovie.is',
+'a.stanzapub.com',
+'a.t.webtracker.jp',
+'a.tantella.com',
+'a.teads.tv',
+'a.tenlokif.com',
+'a.thanksearch.com',
+'a.thefreedictionary.com',
+'a.thoughtleadr.com',
+'a.tijorari.com',
+'a.tikodala.com',
+'a.tikrailijorj.com',
+'a.tribalfusion.com',
+'a.ttinline.com',
+'a.turbodsp.com',
+'a.twiago.com',
+'a.udorik.com',
+'a.ufraton.com',
+'a.ukatoe.com',
+'a.upnorma.com',
+'a.uralap.com',
+'a.utorido.com',
+'a.uzekrs.com',
+'a.uzotarak.com',
+'a.vartoken.com',
+'a.venonita.com',
+'a.visadd.com',
+'a.visualrevenue.com',
+'a.volvelle.tech',
+'a.vserv.mobi',
+'a.wakapita.com',
+'a.walla.co.il',
+'a.websponsors.com',
+'a.wikia-beacon.com',
+'a.wodizapt.com',
+'a.xanga.com',
+'a.xeozir.com',
+'a.xfreeservice.com',
+'a.xtargeting.com',
+'a.xvika.com',
+'a.yaboshadi.com',
+'a.yallboen.com',
+'a.yesadsrv.com',
+'a.yeshhaod.com',
+'a.yorilada.com',
+'a.yu0123456.com',
+'a.yuituityula.com',
+'a.zepozipo.com',
+'a.zeroredirect.com',
+'a.zeroredirect1.com',
+'a.zinovila.com',
+'a.zonolali.com',
+'a.zorbikala.com',
+'a.zortinah.com',
+'a01.korrelate.net',
+'a03.korrelate.net',
+'a04.korrelate.net',
+'a05.korrelate.net',
+'a0irt.voluumtrk.com',
+'a1-m1.doublepimp.com',
+'a1.admaster.net',
+'a1.dnbizcdn.com',
+'a1.suntimes.com',
+'a10shd.realshieldlinked.com',
+'a11om.voluumtrk.com',
+'a11shd.realshieldlinked.com',
+'a12a30zg8rw248c8bl5o72qweh.hop.clickbank.net',
+'a1599.g.akamai.net',
+'a1767.g.akamai.net',
+'a19.g.akamai.net',
+'a1shd.realshieldlinked.com',
+'a2.suntimes.com',
+'a207.p.f.qz3.net',
+'a2p.go2cloud.org',
+'a2pub.com',
+'a2shd.realshieldlinked.com',
+'a3.suntimes.com',
+'a3339.actonsoftware.com',
+'a39.ac-images.myspacecdn.com',
+'a3hb0.voluumtrk.com',
+'a3shd.realshieldlinked.com',
+'a4.suntimes.com',
+'a40.suntimes.com',
+'a433.com',
+'a4dtracker.com',
+'a4dtrk.com',
+'a4mwn.voluumtrk.com',
+'a4nwz.voluumtrk.com',
+'a4ocm.voluumtrk.com',
+'a4rlj.voluumtrk.com',
+'a4shd.realshieldlinked.com',
+'a5.suntimes.com',
+'a50.suntimes.com',
+'a51.suntimes.com',
+'a52.suntimes.com',
+'a53.suntimes.com',
+'a54.suntimes.com',
+'a55.suntimes.com',
+'a5b75231.qqc.co',
+'a5cee7.se',
+'a615.ac-images.myspacecdn.com',
+'a6522.s3-website-us-east-1.amazonaws.com',
+'a6ba.com',
+'a6shd.realshieldlinked.com',
+'a7.suntimes.com',
+'a71tb.voluumtrk.com',
+'a722-a332-7273-9e88.reporo.net',
+'a76.p.f.qz3.net',
+'a7shd.realshieldlinked.com',
+'a885.ac-images.myspacecdn.com',
+'a8shd.realshieldlinked.com',
+'a9.com',
+'a98dc034c7781a941eba-bac02262202668bbe918ea9fb5289cd2.r58.cf2.rackcdn.com',
+'a9shd.realshieldlinked.com',
+'aa-gb.marketgid.com',
+'aa.adfarm1.adition.com',
+'aa.connextra.com',
+'aa.voice2page.com',
+'aaa.dv0.info',
+'aad73c550c.se',
+'aads.go2cloud.org',
+'aads.us',
+'aafq0.voluumtrk.com',
+'aajtm.voluumtrk.com',
+'aaotr.com',
+'aarchives.ifriends.net',
+'aarki.com',
+'aata.ero-advertising.com',
+'aatp.go2cloud.org',
+'aax-eu-rtb.amazon-adsystem.com',
+'aax-eu.amazon-adsystem.com',
+'aax-fe-sin.amazon-adsystem.com',
+'aax-fe.amazon-adsystem.com',
+'aax-us-east.amazon-adsystem.com',
+'aax-us-pdx.amazon-adsystem.com',
+'aax-us-west.amazon-adsystem.com',
+'ab.airpush.com',
+'ab3a-f9be-43ed-76ca.reporo.net',
+'abacidcqfrjju.download',
+'abacus.go2cloud.org',
+'abakus.freenet.de',
+'abandonglare.8m.com',
+'abbott.vo.llnwd.net',
+'abbp1.pw',
+'abc.bnex.com',
+'abc.doublegear.com',
+'abc.hearst.co.uk',
+'abc.limaction.com',
+'abccampaignaudit.co.uk',
+'abcjmp.com',
+'abe.com.au',
+'abendbl.ivwbox.de',
+'abhitest.2cnt.net',
+'abidinglynsygto.download',
+'abis.justclick.ru',
+'abmr.org',
+'abo.libertysurf.fr',
+'about.elicitapp.com',
+'about.netster.com',
+'aboutads.info',
+'aboutads.quantcast.com',
+'above-gw.liveadvert.com',
+'abovetrack.com',
+'abp.smartadcheck.de',
+'abr4m.voluumtrk.com',
+'abradora.com',
+'abscbn.spinbox.net',
+'absolstats.co.za',
+'abz.com',
+'ac-nb.marketgid.com',
+'ac.babsrv.com',
+'ac.berlinonline.de',
+'ac.express.de',
+'ac.mz-web.de',
+'ac.openx.com',
+'ac.rnm.ca',
+'ac6.i2idata.com',
+'acac7.home4u.china.com',
+'acai.go2cloud.org',
+'acasatv.2cnt.net',
+'acbacb9c.ipt.aol.com',
+'acc.go2cloud.org',
+'accelerator-media.com',
+'access.amberathome.com',
+'accountonline.bridgetrack.com',
+'accurately-locate.com',
+'ace.advertising.com',
+'acecounter.com',
+'acento.com',
+'aceratezhoytlh.download',
+'acestats.com',
+'acheven2.go2cloud.org',
+'achmedia.com',
+'acim.com',
+'acinusqiwjwzl.download',
+'acknowing.com',
+'aclick.adhoc1.net',
+'aclickads.com',
+'acme.bfast.com',
+'acmeaffiliate.go2cloud.org',
+'acmgold.go2cloud.org',
+'acookie.alibaba.com',
+'acookie.aliexpress.com',
+'acookie.taobao.com',
+'acotrk.com',
+'acount.alley.ws',
+'acq.go2cloud.org',
+'acquinityinteractive.com',
+'acquiromedia.go2cloud.org',
+'acronymbxruv.download',
+'acrossperformance.go2cloud.org',
+'acs.xpanama.net',
+'acspaces.ero-advertising.com',
+'act.webmasterplan.com',
+'actforvictory.112.2o7.net',
+'action.media6degrees.com',
+'action.metaffiliation.com',
+'actionads.go2cloud.org',
+'actionteaser.ru',
+'activatesubhrle.download',
+'activeagent.at',
+'activeapps.go2cloud.org',
+'activeboard.com',
+'activetracker.activehotels.com',
+'activewin.us.intellitxt.com',
+'activities.alibaba.com',
+'activities.niagara.comedycentral.com',
+'activity.serving-sys.com',
+'actonsoftware.com',
+'actualdeals.com',
+'actvtrack.com',
+'actwebmedia.go2affise.com',
+'acxiom.com',
+'acxtrk.com',
+'ad-ace.doubleclick.net',
+'ad-agent.com',
+'ad-apac.doubleclick.net',
+'ad-balancer.net',
+'ad-blaster.com',
+'ad-board.com',
+'ad-brix.com',
+'ad-cdn.technoratimedia.com',
+'ad-clicks.com',
+'ad-creatives-public.commondatastorage.googleapis.com',
+'ad-dev.adotsolution.com',
+'ad-emea.doubleclick.net',
+'ad-emea.doubleclick.net.1000.9007.302br.net',
+'ad-emea.doubleclick.net.1002.9007.302br.net',
+'ad-emea.doubleclick.net.1003.9007.302br.net',
+'ad-emea.doubleclick.net.1004.9007.302br.net',
+'ad-emea.doubleclick.net.1005.9007.302br.net',
+'ad-emea.doubleclick.net.1006.9007.302br.net',
+'ad-emea.doubleclick.net.1007.9007.302br.net',
+'ad-emea.doubleclick.net.1008.9007.302br.net',
+'ad-emea.doubleclick.net.1009.9007.302br.net',
+'ad-emea.doubleclick.net.1013.9007.302br.net',
+'ad-emea.doubleclick.net.1014.9007.302br.net',
+'ad-emea.doubleclick.net.1015.9007.302br.net',
+'ad-emea.doubleclick.net.1016.9007.302br.net',
+'ad-emea.doubleclick.net.1017.9007.302br.net',
+'ad-emea.doubleclick.net.1018.9007.302br.net',
+'ad-emea.doubleclick.net.1019.9007.302br.net',
+'ad-emea.doubleclick.net.1020.9007.302br.net',
+'ad-emea.doubleclick.net.1021.9007.302br.net',
+'ad-emea.doubleclick.net.1022.9007.302br.net',
+'ad-emea.doubleclick.net.1023.9007.302br.net',
+'ad-emea.doubleclick.net.1024.9007.302br.net',
+'ad-emea.doubleclick.net.1026.9007.302br.net',
+'ad-emea.doubleclick.net.1027.9007.302br.net',
+'ad-emea.doubleclick.net.1029.9007.302br.net',
+'ad-emea.doubleclick.net.1030.9007.302br.net',
+'ad-emea.doubleclick.net.1032.9007.302br.net',
+'ad-emea.doubleclick.net.1033.9007.302br.net',
+'ad-emea.doubleclick.net.10536.9028.302br.net',
+'ad-emea.doubleclick.net.10537.9028.302br.net',
+'ad-emea.doubleclick.net.10539.9028.302br.net',
+'ad-emea.doubleclick.net.10542.9028.302br.net',
+'ad-emea.doubleclick.net.10548.9028.302br.net',
+'ad-emea.doubleclick.net.10551.9028.302br.net',
+'ad-emea.doubleclick.net.12421.9039.302br.net',
+'ad-emea.doubleclick.net.12424.9039.302br.net',
+'ad-emea.doubleclick.net.12425.9039.302br.net',
+'ad-emea.doubleclick.net.12427.9039.302br.net',
+'ad-emea.doubleclick.net.12428.9039.302br.net',
+'ad-emea.doubleclick.net.12430.9039.302br.net',
+'ad-emea.doubleclick.net.12433.9039.302br.net',
+'ad-emea.doubleclick.net.12436.9039.302br.net',
+'ad-emea.doubleclick.net.12944.9039.302br.net',
+'ad-emea.doubleclick.net.12947.9039.302br.net',
+'ad-emea.doubleclick.net.12948.9039.302br.net',
+'ad-emea.doubleclick.net.12950.9039.302br.net',
+'ad-emea.doubleclick.net.12951.9039.302br.net',
+'ad-emea.doubleclick.net.12956.9039.302br.net',
+'ad-emea.doubleclick.net.13019.9048.302br.net',
+'ad-emea.doubleclick.net.13025.9048.302br.net',
+'ad-emea.doubleclick.net.13026.9048.302br.net',
+'ad-emea.doubleclick.net.13028.9048.302br.net',
+'ad-emea.doubleclick.net.13030.9048.302br.net',
+'ad-emea.doubleclick.net.13031.9048.302br.net',
+'ad-emea.doubleclick.net.13034.9048.302br.net',
+'ad-emea.doubleclick.net.13037.9048.302br.net',
+'ad-emea.doubleclick.net.13040.9048.302br.net',
+'ad-emea.doubleclick.net.13043.9048.302br.net',
+'ad-emea.doubleclick.net.13049.9048.302br.net',
+'ad-emea.doubleclick.net.13052.9048.302br.net',
+'ad-emea.doubleclick.net.13053.9048.302br.net',
+'ad-emea.doubleclick.net.13061.9048.302br.net',
+'ad-emea.doubleclick.net.13062.9048.302br.net',
+'ad-emea.doubleclick.net.13066.9048.302br.net',
+'ad-emea.doubleclick.net.13067.9048.302br.net',
+'ad-emea.doubleclick.net.13068.9048.302br.net',
+'ad-emea.doubleclick.net.13070.9048.302br.net',
+'ad-emea.doubleclick.net.13072.9048.302br.net',
+'ad-emea.doubleclick.net.13073.9048.302br.net',
+'ad-emea.doubleclick.net.13074.9048.302br.net',
+'ad-emea.doubleclick.net.13075.9048.302br.net',
+'ad-emea.doubleclick.net.13076.9048.302br.net',
+'ad-emea.doubleclick.net.13077.9048.302br.net',
+'ad-emea.doubleclick.net.13079.9048.302br.net',
+'ad-emea.doubleclick.net.13080.9048.302br.net',
+'ad-emea.doubleclick.net.13081.9048.302br.net',
+'ad-emea.doubleclick.net.13082.9048.302br.net',
+'ad-emea.doubleclick.net.13083.9048.302br.net',
+'ad-emea.doubleclick.net.13085.9048.302br.net',
+'ad-emea.doubleclick.net.13088.9048.302br.net',
+'ad-emea.doubleclick.net.13091.9048.302br.net',
+'ad-emea.doubleclick.net.13094.9048.302br.net',
+'ad-emea.doubleclick.net.13095.9048.302br.net',
+'ad-emea.doubleclick.net.13097.9048.302br.net',
+'ad-emea.doubleclick.net.13098.9048.302br.net',
+'ad-emea.doubleclick.net.13100.9048.302br.net',
+'ad-emea.doubleclick.net.13101.9048.302br.net',
+'ad-emea.doubleclick.net.13103.9048.302br.net',
+'ad-emea.doubleclick.net.13106.9048.302br.net',
+'ad-emea.doubleclick.net.13107.9048.302br.net',
+'ad-emea.doubleclick.net.13109.9048.302br.net',
+'ad-emea.doubleclick.net.13112.9048.302br.net',
+'ad-emea.doubleclick.net.13115.9048.302br.net',
+'ad-emea.doubleclick.net.13118.9048.302br.net',
+'ad-emea.doubleclick.net.13121.9048.302br.net',
+'ad-emea.doubleclick.net.13122.9048.302br.net',
+'ad-emea.doubleclick.net.13124.9048.302br.net',
+'ad-emea.doubleclick.net.13127.9048.302br.net',
+'ad-emea.doubleclick.net.13130.9048.302br.net',
+'ad-emea.doubleclick.net.13131.9048.302br.net',
+'ad-emea.doubleclick.net.13136.9048.302br.net',
+'ad-emea.doubleclick.net.13137.9048.302br.net',
+'ad-emea.doubleclick.net.13139.9048.302br.net',
+'ad-emea.doubleclick.net.13142.9048.302br.net',
+'ad-emea.doubleclick.net.13143.9048.302br.net',
+'ad-emea.doubleclick.net.13145.9048.302br.net',
+'ad-emea.doubleclick.net.13146.9048.302br.net',
+'ad-emea.doubleclick.net.13148.9048.302br.net',
+'ad-emea.doubleclick.net.13149.9048.302br.net',
+'ad-emea.doubleclick.net.13151.9048.302br.net',
+'ad-emea.doubleclick.net.13152.9048.302br.net',
+'ad-emea.doubleclick.net.14015.9048.302br.net',
+'ad-emea.doubleclick.net.14018.9048.302br.net',
+'ad-emea.doubleclick.net.14021.9048.302br.net',
+'ad-emea.doubleclick.net.14024.9048.302br.net',
+'ad-emea.doubleclick.net.14028.9048.302br.net',
+'ad-emea.doubleclick.net.14030.9048.302br.net',
+'ad-emea.doubleclick.net.16121.9090.302br.net',
+'ad-emea.doubleclick.net.16169.9090.302br.net',
+'ad-emea.doubleclick.net.22707.9139.302br.net',
+'ad-emea.doubleclick.net.22708.9139.302br.net',
+'ad-emea.doubleclick.net.22710.9139.302br.net',
+'ad-emea.doubleclick.net.22711.9139.302br.net',
+'ad-emea.doubleclick.net.22713.9139.302br.net',
+'ad-emea.doubleclick.net.22714.9139.302br.net',
+'ad-emea.doubleclick.net.22716.9139.302br.net',
+'ad-emea.doubleclick.net.22717.9139.302br.net',
+'ad-emea.doubleclick.net.22722.9139.302br.net',
+'ad-emea.doubleclick.net.22723.9139.302br.net',
+'ad-emea.doubleclick.net.22725.9139.302br.net',
+'ad-emea.doubleclick.net.22726.9139.302br.net',
+'ad-emea.doubleclick.net.23179.9162.302br.net',
+'ad-emea.doubleclick.net.23180.9162.302br.net',
+'ad-emea.doubleclick.net.23182.9162.302br.net',
+'ad-emea.doubleclick.net.23183.9162.302br.net',
+'ad-emea.doubleclick.net.23185.9162.302br.net',
+'ad-emea.doubleclick.net.23186.9162.302br.net',
+'ad-emea.doubleclick.net.23187.9162.302br.net',
+'ad-emea.doubleclick.net.23188.9162.302br.net',
+'ad-emea.doubleclick.net.23189.9162.302br.net',
+'ad-emea.doubleclick.net.23191.9162.302br.net',
+'ad-emea.doubleclick.net.23192.9162.302br.net',
+'ad-emea.doubleclick.net.23194.9162.302br.net',
+'ad-emea.doubleclick.net.23195.9162.302br.net',
+'ad-emea.doubleclick.net.23197.9162.302br.net',
+'ad-emea.doubleclick.net.23198.9162.302br.net',
+'ad-emea.doubleclick.net.23200.9162.302br.net',
+'ad-emea.doubleclick.net.23201.9162.302br.net',
+'ad-emea.doubleclick.net.23203.9162.302br.net',
+'ad-emea.doubleclick.net.23204.9162.302br.net',
+'ad-emea.doubleclick.net.23206.9162.302br.net',
+'ad-emea.doubleclick.net.23207.9162.302br.net',
+'ad-emea.doubleclick.net.23209.9162.302br.net',
+'ad-emea.doubleclick.net.23210.9162.302br.net',
+'ad-emea.doubleclick.net.23212.9162.302br.net',
+'ad-emea.doubleclick.net.23213.9162.302br.net',
+'ad-emea.doubleclick.net.23215.9162.302br.net',
+'ad-emea.doubleclick.net.23216.9162.302br.net',
+'ad-emea.doubleclick.net.23218.9162.302br.net',
+'ad-emea.doubleclick.net.23219.9162.302br.net',
+'ad-emea.doubleclick.net.23221.9162.302br.net',
+'ad-emea.doubleclick.net.23222.9162.302br.net',
+'ad-emea.doubleclick.net.23224.9162.302br.net',
+'ad-emea.doubleclick.net.23225.9162.302br.net',
+'ad-emea.doubleclick.net.23227.9162.302br.net',
+'ad-emea.doubleclick.net.23228.9162.302br.net',
+'ad-emea.doubleclick.net.23230.9162.302br.net',
+'ad-emea.doubleclick.net.23231.9162.302br.net',
+'ad-emea.doubleclick.net.23233.9162.302br.net',
+'ad-emea.doubleclick.net.23236.9162.302br.net',
+'ad-emea.doubleclick.net.23237.9162.302br.net',
+'ad-emea.doubleclick.net.23239.9162.302br.net',
+'ad-emea.doubleclick.net.23240.9162.302br.net',
+'ad-emea.doubleclick.net.23242.9162.302br.net',
+'ad-emea.doubleclick.net.23243.9162.302br.net',
+'ad-emea.doubleclick.net.23245.9162.302br.net',
+'ad-emea.doubleclick.net.23246.9162.302br.net',
+'ad-emea.doubleclick.net.23248.9162.302br.net',
+'ad-emea.doubleclick.net.23249.9162.302br.net',
+'ad-emea.doubleclick.net.23251.9162.302br.net',
+'ad-emea.doubleclick.net.23252.9162.302br.net',
+'ad-emea.doubleclick.net.23254.9162.302br.net',
+'ad-emea.doubleclick.net.23255.9162.302br.net',
+'ad-emea.doubleclick.net.23257.9162.302br.net',
+'ad-emea.doubleclick.net.23258.9162.302br.net',
+'ad-emea.doubleclick.net.23260.9162.302br.net',
+'ad-emea.doubleclick.net.23261.9162.302br.net',
+'ad-emea.doubleclick.net.23263.9162.302br.net',
+'ad-emea.doubleclick.net.23264.9162.302br.net',
+'ad-emea.doubleclick.net.23266.9162.302br.net',
+'ad-emea.doubleclick.net.23267.9162.302br.net',
+'ad-emea.doubleclick.net.23269.9162.302br.net',
+'ad-emea.doubleclick.net.23270.9162.302br.net',
+'ad-emea.doubleclick.net.23272.9162.302br.net',
+'ad-emea.doubleclick.net.23273.9162.302br.net',
+'ad-emea.doubleclick.net.23275.9162.302br.net',
+'ad-emea.doubleclick.net.23276.9162.302br.net',
+'ad-emea.doubleclick.net.23278.9162.302br.net',
+'ad-emea.doubleclick.net.23279.9162.302br.net',
+'ad-emea.doubleclick.net.23281.9162.302br.net',
+'ad-emea.doubleclick.net.23282.9162.302br.net',
+'ad-emea.doubleclick.net.23284.9162.302br.net',
+'ad-emea.doubleclick.net.23285.9162.302br.net',
+'ad-emea.doubleclick.net.35450.9269.302br.net',
+'ad-emea.doubleclick.net.35451.9269.302br.net',
+'ad-emea.doubleclick.net.35452.9269.302br.net',
+'ad-emea.doubleclick.net.35453.9269.302br.net',
+'ad-emea.doubleclick.net.35454.9269.302br.net',
+'ad-emea.doubleclick.net.35455.9269.302br.net',
+'ad-emea.doubleclick.net.35456.9269.302br.net',
+'ad-emea.doubleclick.net.35457.9269.302br.net',
+'ad-emea.doubleclick.net.35458.9269.302br.net',
+'ad-emea.doubleclick.net.35459.9269.302br.net',
+'ad-emea.doubleclick.net.35460.9269.302br.net',
+'ad-emea.doubleclick.net.35461.9269.302br.net',
+'ad-emea.doubleclick.net.35462.9269.302br.net',
+'ad-emea.doubleclick.net.35463.9269.302br.net',
+'ad-emea.doubleclick.net.35464.9269.302br.net',
+'ad-emea.doubleclick.net.35465.9269.302br.net',
+'ad-emea.doubleclick.net.35466.9269.302br.net',
+'ad-emea.doubleclick.net.35467.9269.302br.net',
+'ad-emea.doubleclick.net.36871.9286.302br.net',
+'ad-emea.doubleclick.net.36872.9286.302br.net',
+'ad-emea.doubleclick.net.36873.9286.302br.net',
+'ad-emea.doubleclick.net.36887.9286.302br.net',
+'ad-emea.doubleclick.net.36888.9286.302br.net',
+'ad-emea.doubleclick.net.39901.9307.302br.net',
+'ad-emea.doubleclick.net.39903.9307.302br.net',
+'ad-emea.doubleclick.net.39907.9307.302br.net',
+'ad-emea.doubleclick.net.39909.9307.302br.net',
+'ad-emea.doubleclick.net.39973.9307.302br.net',
+'ad-emea.doubleclick.net.39975.9307.302br.net',
+'ad-emea.doubleclick.net.39982.9307.302br.net',
+'ad-emea.doubleclick.net.39984.9307.302br.net',
+'ad-emea.doubleclick.net.39985.9307.302br.net',
+'ad-emea.doubleclick.net.39987.9307.302br.net',
+'ad-emea.doubleclick.net.39994.9307.302br.net',
+'ad-emea.doubleclick.net.39996.9307.302br.net',
+'ad-emea.doubleclick.net.39997.9307.302br.net',
+'ad-emea.doubleclick.net.39999.9307.302br.net',
+'ad-emea.doubleclick.net.40003.9307.302br.net',
+'ad-emea.doubleclick.net.40005.9307.302br.net',
+'ad-emea.doubleclick.net.40009.9307.302br.net',
+'ad-emea.doubleclick.net.40011.9307.302br.net',
+'ad-emea.doubleclick.net.40018.9307.302br.net',
+'ad-emea.doubleclick.net.40020.9307.302br.net',
+'ad-emea.doubleclick.net.40027.9307.302br.net',
+'ad-emea.doubleclick.net.40029.9307.302br.net',
+'ad-emea.doubleclick.net.40030.9307.302br.net',
+'ad-emea.doubleclick.net.40032.9307.302br.net',
+'ad-emea.doubleclick.net.40033.9307.302br.net',
+'ad-emea.doubleclick.net.40035.9307.302br.net',
+'ad-emea.doubleclick.net.40090.9307.302br.net',
+'ad-emea.doubleclick.net.40092.9307.302br.net',
+'ad-emea.doubleclick.net.40099.9307.302br.net',
+'ad-emea.doubleclick.net.40101.9307.302br.net',
+'ad-emea.doubleclick.net.42685.9325.302br.net',
+'ad-emea.doubleclick.net.42686.9325.302br.net',
+'ad-emea.doubleclick.net.42688.9325.302br.net',
+'ad-emea.doubleclick.net.42691.9325.302br.net',
+'ad-emea.doubleclick.net.42692.9325.302br.net',
+'ad-emea.doubleclick.net.42694.9325.302br.net',
+'ad-emea.doubleclick.net.42695.9325.302br.net',
+'ad-emea.doubleclick.net.42697.9325.302br.net',
+'ad-emea.doubleclick.net.42698.9325.302br.net',
+'ad-emea.doubleclick.net.42700.9325.302br.net',
+'ad-emea.doubleclick.net.42701.9325.302br.net',
+'ad-emea.doubleclick.net.42703.9325.302br.net',
+'ad-emea.doubleclick.net.42704.9325.302br.net',
+'ad-emea.doubleclick.net.42706.9325.302br.net',
+'ad-emea.doubleclick.net.42712.9325.302br.net',
+'ad-emea.doubleclick.net.42713.9325.302br.net',
+'ad-emea.doubleclick.net.42715.9325.302br.net',
+'ad-emea.doubleclick.net.42716.9325.302br.net',
+'ad-emea.doubleclick.net.42718.9325.302br.net',
+'ad-emea.doubleclick.net.42721.9325.302br.net',
+'ad-emea.doubleclick.net.42804.9326.302br.net',
+'ad-emea.doubleclick.net.42807.9326.302br.net',
+'ad-emea.doubleclick.net.42808.9326.302br.net',
+'ad-emea.doubleclick.net.42810.9326.302br.net',
+'ad-emea.doubleclick.net.42813.9326.302br.net',
+'ad-emea.doubleclick.net.42816.9326.302br.net',
+'ad-emea.doubleclick.net.42817.9326.302br.net',
+'ad-emea.doubleclick.net.42819.9326.302br.net',
+'ad-emea.doubleclick.net.42822.9326.302br.net',
+'ad-emea.doubleclick.net.42825.9326.302br.net',
+'ad-emea.doubleclick.net.42828.9326.302br.net',
+'ad-emea.doubleclick.net.42831.9326.302br.net',
+'ad-emea.doubleclick.net.42834.9326.302br.net',
+'ad-emea.doubleclick.net.42835.9326.302br.net',
+'ad-emea.doubleclick.net.42837.9326.302br.net',
+'ad-emea.doubleclick.net.42840.9326.302br.net',
+'ad-emea.doubleclick.net.42843.9326.302br.net',
+'ad-emea.doubleclick.net.42844.9326.302br.net',
+'ad-emea.doubleclick.net.42846.9326.302br.net',
+'ad-emea.doubleclick.net.43038.9325.302br.net',
+'ad-emea.doubleclick.net.43040.9325.302br.net',
+'ad-emea.doubleclick.net.43041.9325.302br.net',
+'ad-emea.doubleclick.net.43043.9325.302br.net',
+'ad-emea.doubleclick.net.43044.9325.302br.net',
+'ad-emea.doubleclick.net.43046.9325.302br.net',
+'ad-emea.doubleclick.net.44831.9339.302br.net',
+'ad-emea.doubleclick.net.44834.9339.302br.net',
+'ad-emea.doubleclick.net.44837.9339.302br.net',
+'ad-emea.doubleclick.net.46927.9347.302br.net',
+'ad-emea.doubleclick.net.46930.9347.302br.net',
+'ad-emea.doubleclick.net.46933.9347.302br.net',
+'ad-emea.doubleclick.net.51282.9307.302br.net',
+'ad-emea.doubleclick.net.51284.9307.302br.net',
+'ad-emea.doubleclick.net.51285.9307.302br.net',
+'ad-emea.doubleclick.net.51287.9307.302br.net',
+'ad-emea.doubleclick.net.51291.9307.302br.net',
+'ad-emea.doubleclick.net.51293.9307.302br.net',
+'ad-emea.doubleclick.net.58218.9307.302br.net',
+'ad-emea.doubleclick.net.58220.9307.302br.net',
+'ad-emea.doubleclick.net.58230.9307.302br.net',
+'ad-emea.doubleclick.net.58232.9307.302br.net',
+'ad-emea.doubleclick.net.58236.9307.302br.net',
+'ad-emea.doubleclick.net.58238.9307.302br.net',
+'ad-emea.doubleclick.net.61327.9462.302br.net',
+'ad-emea.doubleclick.net.61330.9462.302br.net',
+'ad-emea.doubleclick.net.61333.9462.302br.net',
+'ad-emea.doubleclick.net.61336.9462.302br.net',
+'ad-emea.doubleclick.net.61339.9462.302br.net',
+'ad-emea.doubleclick.net.61340.9462.302br.net',
+'ad-emea.doubleclick.net.61342.9462.302br.net',
+'ad-emea.doubleclick.net.61345.9462.302br.net',
+'ad-emea.doubleclick.net.61346.9462.302br.net',
+'ad-emea.doubleclick.net.61348.9462.302br.net',
+'ad-emea.doubleclick.net.61351.9462.302br.net',
+'ad-emea.doubleclick.net.61352.9462.302br.net',
+'ad-emea.doubleclick.net.61354.9462.302br.net',
+'ad-emea.doubleclick.net.68799.9555.302br.net',
+'ad-emea.doubleclick.net.68801.9555.302br.net',
+'ad-emea.doubleclick.net.68819.9555.302br.net',
+'ad-emea.doubleclick.net.68843.9555.302br.net',
+'ad-emea.doubleclick.net.68864.9555.302br.net',
+'ad-emea.doubleclick.net.68867.9555.302br.net',
+'ad-emea.doubleclick.net.68873.9555.302br.net',
+'ad-emea.doubleclick.net.68885.9555.302br.net',
+'ad-emea.doubleclick.net.68897.9555.302br.net',
+'ad-emea.doubleclick.net.68939.9555.302br.net',
+'ad-emea.doubleclick.net.68945.9555.302br.net',
+'ad-emea.doubleclick.net.68948.9555.302br.net',
+'ad-emea.doubleclick.net.68954.9555.302br.net',
+'ad-emea.doubleclick.net.68984.9555.302br.net',
+'ad-emea.doubleclick.net.68999.9555.302br.net',
+'ad-emea.doubleclick.net.69011.9555.302br.net',
+'ad-emea.doubleclick.net.69026.9555.302br.net',
+'ad-emea.doubleclick.net.69047.9555.302br.net',
+'ad-emea.doubleclick.net.69050.9555.302br.net',
+'ad-emea.doubleclick.net.69060.9555.302br.net',
+'ad-emea.doubleclick.net.69062.9555.302br.net',
+'ad-emea.doubleclick.net.69065.9555.302br.net',
+'ad-emea.doubleclick.net.69077.9555.302br.net',
+'ad-emea.doubleclick.net.69083.9555.302br.net',
+'ad-emea.doubleclick.net.69087.9555.302br.net',
+'ad-emea.doubleclick.net.69096.9555.302br.net',
+'ad-emea.doubleclick.net.69098.9555.302br.net',
+'ad-emea.doubleclick.net.69107.9555.302br.net',
+'ad-emea.doubleclick.net.69110.9555.302br.net',
+'ad-emea.doubleclick.net.69116.9555.302br.net',
+'ad-emea.doubleclick.net.69128.9555.302br.net',
+'ad-emea.doubleclick.net.69134.9555.302br.net',
+'ad-emea.doubleclick.net.69155.9555.302br.net',
+'ad-emea.doubleclick.net.69158.9555.302br.net',
+'ad-emea.doubleclick.net.69161.9555.302br.net',
+'ad-emea.doubleclick.net.69176.9555.302br.net',
+'ad-emea.doubleclick.net.69182.9555.302br.net',
+'ad-emea.doubleclick.net.69203.9555.302br.net',
+'ad-emea.doubleclick.net.69206.9555.302br.net',
+'ad-emea.doubleclick.net.69218.9555.302br.net',
+'ad-emea.doubleclick.net.69227.9555.302br.net',
+'ad-emea.doubleclick.net.69236.9555.302br.net',
+'ad-emea.doubleclick.net.69239.9555.302br.net',
+'ad-emea.doubleclick.net.69242.9555.302br.net',
+'ad-emea.doubleclick.net.69260.9555.302br.net',
+'ad-emea.doubleclick.net.69269.9555.302br.net',
+'ad-emea.doubleclick.net.69272.9555.302br.net',
+'ad-emea.doubleclick.net.69275.9555.302br.net',
+'ad-emea.doubleclick.net.69278.9555.302br.net',
+'ad-emea.doubleclick.net.69284.9555.302br.net',
+'ad-emea.doubleclick.net.69296.9555.302br.net',
+'ad-emea.doubleclick.net.69302.9555.302br.net',
+'ad-emea.doubleclick.net.69314.9555.302br.net',
+'ad-emea.doubleclick.net.69326.9555.302br.net',
+'ad-emea.doubleclick.net.69329.9555.302br.net',
+'ad-emea.doubleclick.net.69339.9555.302br.net',
+'ad-emea.doubleclick.net.69341.9555.302br.net',
+'ad-emea.doubleclick.net.69356.9555.302br.net',
+'ad-emea.doubleclick.net.69380.9555.302br.net',
+'ad-emea.doubleclick.net.69576.9574.302br.net',
+'ad-emea.doubleclick.net.69577.9574.302br.net',
+'ad-emea.doubleclick.net.69578.9574.302br.net',
+'ad-emea.doubleclick.net.69579.9574.302br.net',
+'ad-emea.doubleclick.net.69580.9574.302br.net',
+'ad-emea.doubleclick.net.69581.9574.302br.net',
+'ad-emea.doubleclick.net.69582.9574.302br.net',
+'ad-emea.doubleclick.net.69583.9574.302br.net',
+'ad-emea.doubleclick.net.69584.9574.302br.net',
+'ad-emea.doubleclick.net.69586.9574.302br.net',
+'ad-emea.doubleclick.net.69588.9574.302br.net',
+'ad-emea.doubleclick.net.69589.9574.302br.net',
+'ad-emea.doubleclick.net.69590.9574.302br.net',
+'ad-emea.doubleclick.net.69592.9574.302br.net',
+'ad-emea.doubleclick.net.69593.9574.302br.net',
+'ad-emea.doubleclick.net.69594.9574.302br.net',
+'ad-emea.doubleclick.net.69595.9574.302br.net',
+'ad-emea.doubleclick.net.69596.9574.302br.net',
+'ad-emea.doubleclick.net.69597.9574.302br.net',
+'ad-emea.doubleclick.net.69598.9574.302br.net',
+'ad-emea.doubleclick.net.69600.9574.302br.net',
+'ad-emea.doubleclick.net.69601.9574.302br.net',
+'ad-emea.doubleclick.net.69602.9574.302br.net',
+'ad-emea.doubleclick.net.69603.9574.302br.net',
+'ad-emea.doubleclick.net.69604.9574.302br.net',
+'ad-emea.doubleclick.net.69605.9574.302br.net',
+'ad-emea.doubleclick.net.69606.9574.302br.net',
+'ad-emea.doubleclick.net.69607.9574.302br.net',
+'ad-emea.doubleclick.net.69608.9574.302br.net',
+'ad-emea.doubleclick.net.69609.9574.302br.net',
+'ad-emea.doubleclick.net.69610.9574.302br.net',
+'ad-emea.doubleclick.net.69611.9574.302br.net',
+'ad-emea.doubleclick.net.69612.9574.302br.net',
+'ad-emea.doubleclick.net.69613.9574.302br.net',
+'ad-emea.doubleclick.net.69614.9574.302br.net',
+'ad-emea.doubleclick.net.69615.9574.302br.net',
+'ad-emea.doubleclick.net.69616.9574.302br.net',
+'ad-emea.doubleclick.net.69617.9574.302br.net',
+'ad-emea.doubleclick.net.69618.9574.302br.net',
+'ad-emea.doubleclick.net.69619.9574.302br.net',
+'ad-emea.doubleclick.net.69620.9574.302br.net',
+'ad-emea.doubleclick.net.69622.9574.302br.net',
+'ad-emea.doubleclick.net.69623.9574.302br.net',
+'ad-emea.doubleclick.net.69624.9574.302br.net',
+'ad-emea.doubleclick.net.69625.9574.302br.net',
+'ad-emea.doubleclick.net.69626.9574.302br.net',
+'ad-emea.doubleclick.net.69627.9574.302br.net',
+'ad-emea.doubleclick.net.69628.9574.302br.net',
+'ad-emea.doubleclick.net.69629.9574.302br.net',
+'ad-emea.doubleclick.net.69630.9574.302br.net',
+'ad-emea.doubleclick.net.69631.9574.302br.net',
+'ad-emea.doubleclick.net.69632.9574.302br.net',
+'ad-emea.doubleclick.net.69633.9574.302br.net',
+'ad-emea.doubleclick.net.69634.9574.302br.net',
+'ad-emea.doubleclick.net.69635.9574.302br.net',
+'ad-emea.doubleclick.net.69636.9574.302br.net',
+'ad-emea.doubleclick.net.69637.9574.302br.net',
+'ad-emea.doubleclick.net.69638.9574.302br.net',
+'ad-emea.doubleclick.net.69639.9574.302br.net',
+'ad-emea.doubleclick.net.69640.9574.302br.net',
+'ad-emea.doubleclick.net.69641.9574.302br.net',
+'ad-emea.doubleclick.net.69643.9574.302br.net',
+'ad-emea.doubleclick.net.69644.9574.302br.net',
+'ad-emea.doubleclick.net.69646.9574.302br.net',
+'ad-emea.doubleclick.net.69647.9574.302br.net',
+'ad-emea.doubleclick.net.69648.9574.302br.net',
+'ad-emea.doubleclick.net.69649.9574.302br.net',
+'ad-emea.doubleclick.net.69650.9574.302br.net',
+'ad-emea.doubleclick.net.69667.9578.302br.net',
+'ad-emea.doubleclick.net.69669.9578.302br.net',
+'ad-emea.doubleclick.net.69671.9578.302br.net',
+'ad-emea.doubleclick.net.69673.9578.302br.net',
+'ad-emea.doubleclick.net.69675.9578.302br.net',
+'ad-emea.doubleclick.net.69677.9578.302br.net',
+'ad-emea.doubleclick.net.69679.9578.302br.net',
+'ad-emea.doubleclick.net.69681.9578.302br.net',
+'ad-emea.doubleclick.net.69683.9578.302br.net',
+'ad-emea.doubleclick.net.69685.9578.302br.net',
+'ad-emea.doubleclick.net.69687.9578.302br.net',
+'ad-emea.doubleclick.net.69689.9578.302br.net',
+'ad-emea.doubleclick.net.69691.9578.302br.net',
+'ad-emea.doubleclick.net.69693.9578.302br.net',
+'ad-emea.doubleclick.net.69695.9578.302br.net',
+'ad-emea.doubleclick.net.69697.9578.302br.net',
+'ad-emea.doubleclick.net.69698.9578.302br.net',
+'ad-emea.doubleclick.net.69700.9578.302br.net',
+'ad-emea.doubleclick.net.69702.9578.302br.net',
+'ad-emea.doubleclick.net.69704.9578.302br.net',
+'ad-emea.doubleclick.net.69706.9578.302br.net',
+'ad-emea.doubleclick.net.73042.9614.302br.net',
+'ad-emea.doubleclick.net.73045.9614.302br.net',
+'ad-emea.doubleclick.net.73048.9614.302br.net',
+'ad-emea.doubleclick.net.76473.9640.302br.net',
+'ad-emea.doubleclick.net.76474.9640.302br.net',
+'ad-emea.doubleclick.net.76476.9640.302br.net',
+'ad-emea.doubleclick.net.76479.9640.302br.net',
+'ad-emea.doubleclick.net.76480.9640.302br.net',
+'ad-emea.doubleclick.net.76482.9640.302br.net',
+'ad-emea.doubleclick.net.76485.9640.302br.net',
+'ad-emea.doubleclick.net.76795.9649.302br.net',
+'ad-emea.doubleclick.net.76798.9649.302br.net',
+'ad-emea.doubleclick.net.76801.9649.302br.net',
+'ad-emea.doubleclick.net.76804.9649.302br.net',
+'ad-emea.doubleclick.net.76807.9649.302br.net',
+'ad-emea.doubleclick.net.76810.9649.302br.net',
+'ad-emea.doubleclick.net.76813.9649.302br.net',
+'ad-emea.doubleclick.net.76816.9649.302br.net',
+'ad-emea.doubleclick.net.76819.9649.302br.net',
+'ad-emea.doubleclick.net.76822.9649.302br.net',
+'ad-emea.doubleclick.net.77250.9640.302br.net',
+'ad-emea.doubleclick.net.77251.9640.302br.net',
+'ad-emea.doubleclick.net.77252.9640.302br.net',
+'ad-emea.doubleclick.net.77253.9640.302br.net',
+'ad-emea.doubleclick.net.77254.9640.302br.net',
+'ad-emea.doubleclick.net.77255.9640.302br.net',
+'ad-emea.doubleclick.net.77256.9640.302br.net',
+'ad-emea.doubleclick.net.77257.9640.302br.net',
+'ad-emea.doubleclick.net.77258.9640.302br.net',
+'ad-emea.doubleclick.net.77259.9640.302br.net',
+'ad-emea.doubleclick.net.77260.9640.302br.net',
+'ad-emea.doubleclick.net.77261.9640.302br.net',
+'ad-emea.doubleclick.net.77262.9640.302br.net',
+'ad-emea.doubleclick.net.77263.9640.302br.net',
+'ad-emea.doubleclick.net.77264.9640.302br.net',
+'ad-emea.doubleclick.net.77265.9640.302br.net',
+'ad-emea.doubleclick.net.77266.9640.302br.net',
+'ad-emea.doubleclick.net.77267.9640.302br.net',
+'ad-emea.doubleclick.net.77268.9640.302br.net',
+'ad-emea.doubleclick.net.77269.9640.302br.net',
+'ad-emea.doubleclick.net.77330.9653.302br.net',
+'ad-emea.doubleclick.net.77331.9653.302br.net',
+'ad-emea.doubleclick.net.77332.9653.302br.net',
+'ad-emea.doubleclick.net.77333.9653.302br.net',
+'ad-emea.doubleclick.net.77334.9653.302br.net',
+'ad-emea.doubleclick.net.77335.9653.302br.net',
+'ad-emea.doubleclick.net.77336.9653.302br.net',
+'ad-emea.doubleclick.net.77337.9653.302br.net',
+'ad-emea.doubleclick.net.77338.9653.302br.net',
+'ad-emea.doubleclick.net.77339.9653.302br.net',
+'ad-emea.doubleclick.net.77340.9653.302br.net',
+'ad-emea.doubleclick.net.77341.9653.302br.net',
+'ad-emea.doubleclick.net.77342.9653.302br.net',
+'ad-emea.doubleclick.net.77343.9653.302br.net',
+'ad-emea.doubleclick.net.77344.9653.302br.net',
+'ad-emea.doubleclick.net.77345.9653.302br.net',
+'ad-emea.doubleclick.net.77346.9653.302br.net',
+'ad-emea.doubleclick.net.77347.9653.302br.net',
+'ad-emea.doubleclick.net.77348.9653.302br.net',
+'ad-emea.doubleclick.net.77349.9653.302br.net',
+'ad-emea.doubleclick.net.77350.9653.302br.net',
+'ad-emea.doubleclick.net.77351.9653.302br.net',
+'ad-emea.doubleclick.net.77352.9653.302br.net',
+'ad-emea.doubleclick.net.77353.9653.302br.net',
+'ad-emea.doubleclick.net.77355.9653.302br.net',
+'ad-emea.doubleclick.net.77357.9653.302br.net',
+'ad-emea.doubleclick.net.77358.9653.302br.net',
+'ad-emea.doubleclick.net.77359.9653.302br.net',
+'ad-emea.doubleclick.net.77877.9501.302br.net',
+'ad-emea.doubleclick.net.77878.9501.302br.net',
+'ad-emea.doubleclick.net.77879.9501.302br.net',
+'ad-emea.doubleclick.net.77889.9501.302br.net',
+'ad-emea.doubleclick.net.77890.9501.302br.net',
+'ad-emea.doubleclick.net.77891.9501.302br.net',
+'ad-emea.doubleclick.net.77893.9501.302br.net',
+'ad-emea.doubleclick.net.77894.9501.302br.net',
+'ad-emea.doubleclick.net.77896.9501.302br.net',
+'ad-emea.doubleclick.net.77897.9501.302br.net',
+'ad-emea.doubleclick.net.77899.9501.302br.net',
+'ad-emea.doubleclick.net.77900.9501.302br.net',
+'ad-emea.doubleclick.net.77902.9501.302br.net',
+'ad-emea.doubleclick.net.77903.9501.302br.net',
+'ad-emea.doubleclick.net.77905.9501.302br.net',
+'ad-emea.doubleclick.net.77906.9501.302br.net',
+'ad-emea.doubleclick.net.77907.9501.302br.net',
+'ad-emea.doubleclick.net.77908.9501.302br.net',
+'ad-emea.doubleclick.net.77909.9501.302br.net',
+'ad-emea.doubleclick.net.77910.9501.302br.net',
+'ad-emea.doubleclick.net.77911.9501.302br.net',
+'ad-emea.doubleclick.net.77912.9501.302br.net',
+'ad-emea.doubleclick.net.77913.9501.302br.net',
+'ad-emea.doubleclick.net.77914.9501.302br.net',
+'ad-emea.doubleclick.net.77915.9501.302br.net',
+'ad-emea.doubleclick.net.77916.9501.302br.net',
+'ad-emea.doubleclick.net.77917.9501.302br.net',
+'ad-emea.doubleclick.net.77918.9501.302br.net',
+'ad-emea.doubleclick.net.77920.9501.302br.net',
+'ad-emea.doubleclick.net.77921.9501.302br.net',
+'ad-emea.doubleclick.net.77922.9501.302br.net',
+'ad-emea.doubleclick.net.77923.9501.302br.net',
+'ad-emea.doubleclick.net.77924.9501.302br.net',
+'ad-emea.doubleclick.net.77925.9501.302br.net',
+'ad-emea.doubleclick.net.77926.9501.302br.net',
+'ad-emea.doubleclick.net.77927.9501.302br.net',
+'ad-emea.doubleclick.net.77928.9501.302br.net',
+'ad-emea.doubleclick.net.77929.9501.302br.net',
+'ad-emea.doubleclick.net.77930.9501.302br.net',
+'ad-emea.doubleclick.net.77931.9501.302br.net',
+'ad-emea.doubleclick.net.77932.9501.302br.net',
+'ad-emea.doubleclick.net.77933.9501.302br.net',
+'ad-emea.doubleclick.net.77950.9501.302br.net',
+'ad-emea.doubleclick.net.77951.9501.302br.net',
+'ad-emea.doubleclick.net.77955.9501.302br.net',
+'ad-emea.doubleclick.net.77956.9501.302br.net',
+'ad-emea.doubleclick.net.77957.9501.302br.net',
+'ad-emea.doubleclick.net.77958.9501.302br.net',
+'ad-emea.doubleclick.net.77959.9501.302br.net',
+'ad-emea.doubleclick.net.77960.9501.302br.net',
+'ad-emea.doubleclick.net.77961.9501.302br.net',
+'ad-emea.doubleclick.net.77962.9501.302br.net',
+'ad-emea.doubleclick.net.77963.9501.302br.net',
+'ad-emea.doubleclick.net.77965.9501.302br.net',
+'ad-emea.doubleclick.net.77966.9501.302br.net',
+'ad-emea.doubleclick.net.77967.9501.302br.net',
+'ad-emea.doubleclick.net.77968.9501.302br.net',
+'ad-emea.doubleclick.net.77969.9501.302br.net',
+'ad-emea.doubleclick.net.77971.9501.302br.net',
+'ad-emea.doubleclick.net.77972.9501.302br.net',
+'ad-emea.doubleclick.net.77974.9501.302br.net',
+'ad-emea.doubleclick.net.77975.9501.302br.net',
+'ad-emea.doubleclick.net.77985.9503.302br.net',
+'ad-emea.doubleclick.net.77986.9503.302br.net',
+'ad-emea.doubleclick.net.77993.9503.302br.net',
+'ad-emea.doubleclick.net.77994.9503.302br.net',
+'ad-emea.doubleclick.net.77996.9503.302br.net',
+'ad-emea.doubleclick.net.77997.9503.302br.net',
+'ad-emea.doubleclick.net.77998.9503.302br.net',
+'ad-emea.doubleclick.net.77999.9503.302br.net',
+'ad-emea.doubleclick.net.78001.9503.302br.net',
+'ad-emea.doubleclick.net.78002.9503.302br.net',
+'ad-emea.doubleclick.net.78003.9503.302br.net',
+'ad-emea.doubleclick.net.78004.9503.302br.net',
+'ad-emea.doubleclick.net.78005.9503.302br.net',
+'ad-emea.doubleclick.net.78006.9503.302br.net',
+'ad-emea.doubleclick.net.78007.9503.302br.net',
+'ad-emea.doubleclick.net.78009.9503.302br.net',
+'ad-emea.doubleclick.net.78010.9503.302br.net',
+'ad-emea.doubleclick.net.78011.9503.302br.net',
+'ad-emea.doubleclick.net.78012.9503.302br.net',
+'ad-emea.doubleclick.net.78013.9503.302br.net',
+'ad-emea.doubleclick.net.78014.9503.302br.net',
+'ad-emea.doubleclick.net.78016.9503.302br.net',
+'ad-emea.doubleclick.net.78017.9503.302br.net',
+'ad-emea.doubleclick.net.78028.9503.302br.net',
+'ad-emea.doubleclick.net.78029.9503.302br.net',
+'ad-emea.doubleclick.net.78031.9503.302br.net',
+'ad-emea.doubleclick.net.78032.9503.302br.net',
+'ad-emea.doubleclick.net.78037.9503.302br.net',
+'ad-emea.doubleclick.net.78038.9503.302br.net',
+'ad-emea.doubleclick.net.78040.9503.302br.net',
+'ad-emea.doubleclick.net.78041.9503.302br.net',
+'ad-emea.doubleclick.net.78048.9503.302br.net',
+'ad-emea.doubleclick.net.78049.9503.302br.net',
+'ad-emea.doubleclick.net.78050.9503.302br.net',
+'ad-emea.doubleclick.net.78051.9503.302br.net',
+'ad-emea.doubleclick.net.78052.9503.302br.net',
+'ad-emea.doubleclick.net.78053.9503.302br.net',
+'ad-emea.doubleclick.net.78054.9503.302br.net',
+'ad-emea.doubleclick.net.78055.9503.302br.net',
+'ad-emea.doubleclick.net.78056.9503.302br.net',
+'ad-emea.doubleclick.net.78057.9503.302br.net',
+'ad-emea.doubleclick.net.78058.9503.302br.net',
+'ad-emea.doubleclick.net.78059.9503.302br.net',
+'ad-emea.doubleclick.net.78060.9503.302br.net',
+'ad-emea.doubleclick.net.78061.9503.302br.net',
+'ad-emea.doubleclick.net.78062.9503.302br.net',
+'ad-emea.doubleclick.net.78063.9503.302br.net',
+'ad-emea.doubleclick.net.78064.9503.302br.net',
+'ad-emea.doubleclick.net.78065.9503.302br.net',
+'ad-emea.doubleclick.net.78076.9503.302br.net',
+'ad-emea.doubleclick.net.78079.9503.302br.net',
+'ad-emea.doubleclick.net.78080.9503.302br.net',
+'ad-emea.doubleclick.net.78082.9503.302br.net',
+'ad-emea.doubleclick.net.78085.9503.302br.net',
+'ad-emea.doubleclick.net.78086.9503.302br.net',
+'ad-emea.doubleclick.net.78088.9503.302br.net',
+'ad-emea.doubleclick.net.78091.9503.302br.net',
+'ad-emea.doubleclick.net.78092.9503.302br.net',
+'ad-emea.doubleclick.net.960.9007.302br.net',
+'ad-emea.doubleclick.net.961.9007.302br.net',
+'ad-emea.doubleclick.net.963.9007.302br.net',
+'ad-emea.doubleclick.net.964.9007.302br.net',
+'ad-emea.doubleclick.net.966.9007.302br.net',
+'ad-emea.doubleclick.net.967.9007.302br.net',
+'ad-emea.doubleclick.net.975.9007.302br.net',
+'ad-emea.doubleclick.net.976.9007.302br.net',
+'ad-emea.doubleclick.net.977.9007.302br.net',
+'ad-emea.doubleclick.net.978.9007.302br.net',
+'ad-emea.doubleclick.net.979.9007.302br.net',
+'ad-emea.doubleclick.net.981.9007.302br.net',
+'ad-emea.doubleclick.net.982.9007.302br.net',
+'ad-emea.doubleclick.net.984.9007.302br.net',
+'ad-emea.doubleclick.net.985.9007.302br.net',
+'ad-emea.doubleclick.net.993.9007.302br.net',
+'ad-emea.doubleclick.net.994.9007.302br.net',
+'ad-emea.doubleclick.net.996.9007.302br.net',
+'ad-emea.doubleclick.net.997.9007.302br.net',
+'ad-emea.doubleclick.net.999.9007.302br.net',
+'ad-feeds.com',
+'ad-flow.com',
+'ad-g.doubleclick.net',
+'ad-gbn.com',
+'ad-groups.com',
+'ad-guru.com',
+'ad-host.com',
+'ad-indicator.com',
+'ad-lister.co.uk',
+'ad-listings.com',
+'ad-lite.com',
+'ad-maker.net',
+'ad-rotator.com',
+'ad-search.com',
+'ad-server.co.za',
+'ad-server.gulasidorna.se',
+'ad-serverparc.nl',
+'ad-solutions.com',
+'ad-souk.com',
+'ad-space.net',
+'ad-sponsor.com',
+'ad-srv.net',
+'ad-staff.com',
+'ad-stir.com',
+'ad-style.com',
+'ad-tag.inner-active.mobi',
+'ad-u.com',
+'ad-vice.biz',
+'ad-visor.com',
+'ad-x.co.uk',
+'ad-x.com',
+'ad.100.tbn.ru',
+'ad.103092804.com',
+'ad.114.com.cn',
+'ad.120.tbn.ru',
+'ad.123ads.nl',
+'ad.163.com',
+'ad.3322.net',
+'ad.360yield.com',
+'ad.51yes.com',
+'ad.71i.de',
+'ad.a-ads.com',
+'ad.a8.net',
+'ad.abcnews.com',
+'ad.abctv.com',
+'ad.ableclick.com',
+'ad.about.co.kr',
+'ad.aboutit.de',
+'ad.aboutwebservices.com',
+'ad.accelerator-media.com',
+'ad.ad-srv.net',
+'ad.ad-stir.com',
+'ad.ad2-one.com',
+'ad.adc-serv.net',
+'ad.adconsole.com',
+'ad.adflight.com',
+'ad.adgile.com',
+'ad.adintensity.com',
+'ad.adip.ly',
+'ad.adition.de',
+'ad.adition.net',
+'ad.adlantis.jp',
+'ad.adlegend.com',
+'ad.admitad.com',
+'ad.adnet.biz',
+'ad.adnet.de',
+'ad.adnetinteractive.com',
+'ad.adnetwork.net',
+'ad.adohana.com',
+'ad.adotsolution.com',
+'ad.adriver.ru',
+'ad.adrttt.com',
+'ad.adschemist.com',
+'ad.adserver01.de',
+'ad.adserverplus.com',
+'ad.adslim.com',
+'ad.adsmart.net',
+'ad.adsonpop.com',
+'ad.adsrvr.org',
+'ad.adtegrity.net',
+'ad.adtoma.com',
+'ad.adtracking.me',
+'ad.adver.com.tw',
+'ad.adverteerdirect.nl',
+'ad.adverticum.net',
+'ad.advertise.com',
+'ad.advertstream.com',
+'ad.adworx.at',
+'ad.adxcore.com',
+'ad.afy11.net',
+'ad.agava.tbn.ru',
+'ad.agilemedia.jp',
+'ad.alldanzradio.com',
+'ad.allstar.cz',
+'ad.altervista.org',
+'ad.amgdgt.com',
+'ad.ams.mcdstorage.com',
+'ad.amtk-media.com.37866.9302.302br.net',
+'ad.amtk-media.com.37867.9302.302br.net',
+'ad.amtk-media.com.37869.9302.302br.net',
+'ad.amtk-media.com.37870.9302.302br.net',
+'ad.amtk-media.com.37872.9302.302br.net',
+'ad.amtk-media.com.37873.9302.302br.net',
+'ad.amtk-media.com.37875.9302.302br.net',
+'ad.amtk-media.com.37876.9302.302br.net',
+'ad.amtk-media.com.37877.9302.302br.net',
+'ad.amtk-media.com.37878.9302.302br.net',
+'ad.amtk-media.com.37879.9302.302br.net',
+'ad.amtk-media.com.37880.9302.302br.net',
+'ad.amtk-media.com.37881.9302.302br.net',
+'ad.amtk-media.com.37882.9302.302br.net',
+'ad.amtk-media.com.37883.9302.302br.net',
+'ad.amtk-media.com.37884.9302.302br.net',
+'ad.amtk-media.com.37885.9302.302br.net',
+'ad.amtk-media.com.37889.9302.302br.net',
+'ad.amtk-media.com.37890.9302.302br.net',
+'ad.amtk-media.com.37891.9302.302br.net',
+'ad.amtk-media.com.52670.9302.302br.net',
+'ad.amtk-media.com.52671.9302.302br.net',
+'ad.amtk-media.com.52672.9302.302br.net',
+'ad.amtk-media.com.52674.9302.302br.net',
+'ad.amtk-media.com.52675.9302.302br.net',
+'ad.amtk-media.com.52677.9302.302br.net',
+'ad.amtk-media.com.52678.9302.302br.net',
+'ad.antventure.com',
+'ad.app-authority.com',
+'ad.appier.net',
+'ad.apps.fm',
+'ad.aquamediadirect.com',
+'ad.ar.doubleclick.net',
+'ad.at.doubleclick.net',
+'ad.atdmt.com',
+'ad.au.doubleclick.net',
+'ad.bannerbank.ru',
+'ad.bannerconnect.net',
+'ad.bannerexchange.com',
+'ad.bannernetwork.it',
+'ad.bannerpoint.ru',
+'ad.bb.ru',
+'ad.be.doubleclick.net',
+'ad.bharatstudent.com',
+'ad.bizo.com',
+'ad.blamads.com',
+'ad.blm.net',
+'ad.blogdrive.com',
+'ad.bnmla.com',
+'ad.boardhost.com',
+'ad.bol.bg',
+'ad.bondage.com',
+'ad.br.doubleclick.net',
+'ad.brainbuzz.com',
+'ad.burstdirectads.com',
+'ad.bwise.ch',
+'ad.ca.doubleclick.net',
+'ad.cashdorado.de',
+'ad.cauly.co.kr',
+'ad.cgi.cz',
+'ad.ch.doubleclick.net',
+'ad.cl.doubleclick.net',
+'ad.clickdistrict.com',
+'ad.clickhere.ru',
+'ad.clix.pt',
+'ad.clovenetwork.com',
+'ad.cn.doubleclick.net',
+'ad.co.doubleclick.net',
+'ad.contentspecific.com',
+'ad.cornerpost.com',
+'ad.crosswalk.com',
+'ad.crwdcntrl.net',
+'ad.cz.doubleclick.net',
+'ad.damnpervert.com',
+'ad.de.doubleclick.net',
+'ad.dedicatedmedia.com',
+'ad.deviantart.com',
+'ad.digitallook.com',
+'ad.digitimes.com.tw',
+'ad.directaclick.com',
+'ad.directrev.com',
+'ad.distrigame.com',
+'ad.dk.doubleclick.net',
+'ad.dmm.com',
+'ad.dmpi.net',
+'ad.dogpile.com',
+'ad.domainfactory.de',
+'ad.doubleclick.de',
+'ad.doubleclick.net',
+'ad.doubleclick.net-60563.9436.302br.net',
+'ad.doubleclick.net.1.6100.302br.net',
+'ad.doubleclick.net.10100.9025.302br.net',
+'ad.doubleclick.net.10102.9025.302br.net',
+'ad.doubleclick.net.10104.9025.302br.net',
+'ad.doubleclick.net.10106.9025.302br.net',
+'ad.doubleclick.net.10108.9025.302br.net',
+'ad.doubleclick.net.10110.9025.302br.net',
+'ad.doubleclick.net.10113.9025.302br.net',
+'ad.doubleclick.net.10116.9025.302br.net',
+'ad.doubleclick.net.10119.9025.302br.net',
+'ad.doubleclick.net.10122.9025.302br.net',
+'ad.doubleclick.net.10125.9025.302br.net',
+'ad.doubleclick.net.10128.9025.302br.net',
+'ad.doubleclick.net.10168.9003.302br.net',
+'ad.doubleclick.net.10171.9003.302br.net',
+'ad.doubleclick.net.10174.9003.302br.net',
+'ad.doubleclick.net.10177.9003.302br.net',
+'ad.doubleclick.net.10180.9003.302br.net',
+'ad.doubleclick.net.10183.9003.302br.net',
+'ad.doubleclick.net.10186.9003.302br.net',
+'ad.doubleclick.net.10189.9003.302br.net',
+'ad.doubleclick.net.10192.9003.302br.net',
+'ad.doubleclick.net.10195.9003.302br.net',
+'ad.doubleclick.net.10198.9003.302br.net',
+'ad.doubleclick.net.10201.9003.302br.net',
+'ad.doubleclick.net.10246.9027.302br.net',
+'ad.doubleclick.net.10250.9027.302br.net',
+'ad.doubleclick.net.10258.9027.302br.net',
+'ad.doubleclick.net.10261.9027.302br.net',
+'ad.doubleclick.net.10273.9027.302br.net',
+'ad.doubleclick.net.10279.9027.302br.net',
+'ad.doubleclick.net.10282.9027.302br.net',
+'ad.doubleclick.net.10294.9027.302br.net',
+'ad.doubleclick.net.10304.9027.302br.net',
+'ad.doubleclick.net.10307.9027.302br.net',
+'ad.doubleclick.net.10310.9027.302br.net',
+'ad.doubleclick.net.10313.9027.302br.net',
+'ad.doubleclick.net.10316.9027.302br.net',
+'ad.doubleclick.net.10319.9027.302br.net',
+'ad.doubleclick.net.10322.9027.302br.net',
+'ad.doubleclick.net.10325.9027.302br.net',
+'ad.doubleclick.net.10328.9027.302br.net',
+'ad.doubleclick.net.10331.9027.302br.net',
+'ad.doubleclick.net.10334.9027.302br.net',
+'ad.doubleclick.net.10337.9027.302br.net',
+'ad.doubleclick.net.10341.9005.302br.net',
+'ad.doubleclick.net.10342.9005.302br.net',
+'ad.doubleclick.net.10344.9005.302br.net',
+'ad.doubleclick.net.10346.9005.302br.net',
+'ad.doubleclick.net.1040.9008.302br.net',
+'ad.doubleclick.net.1041.9008.302br.net',
+'ad.doubleclick.net.1043.9008.302br.net',
+'ad.doubleclick.net.10515.9027.302br.net',
+'ad.doubleclick.net.10518.9027.302br.net',
+'ad.doubleclick.net.10524.9027.302br.net',
+'ad.doubleclick.net.10526.9027.302br.net',
+'ad.doubleclick.net.10530.9027.302br.net',
+'ad.doubleclick.net.10533.9027.302br.net',
+'ad.doubleclick.net.1054.9009.302br.net',
+'ad.doubleclick.net.1057.9009.302br.net',
+'ad.doubleclick.net.1060.9009.302br.net',
+'ad.doubleclick.net.1066.9009.302br.net',
+'ad.doubleclick.net.10660.9031.302br.net',
+'ad.doubleclick.net.10661.9031.302br.net',
+'ad.doubleclick.net.10665.9031.302br.net',
+'ad.doubleclick.net.10666.9031.302br.net',
+'ad.doubleclick.net.10667.9031.302br.net',
+'ad.doubleclick.net.10668.9031.302br.net',
+'ad.doubleclick.net.10669.9031.302br.net',
+'ad.doubleclick.net.10670.9031.302br.net',
+'ad.doubleclick.net.1069.9009.302br.net',
+'ad.doubleclick.net.1072.9009.302br.net',
+'ad.doubleclick.net.10750.9029.302br.net',
+'ad.doubleclick.net.10762.9029.302br.net',
+'ad.doubleclick.net.10777.9029.302br.net',
+'ad.doubleclick.net.1078.9009.302br.net',
+'ad.doubleclick.net.10786.9029.302br.net',
+'ad.doubleclick.net.10792.9029.302br.net',
+'ad.doubleclick.net.10798.9029.302br.net',
+'ad.doubleclick.net.1081.9009.302br.net',
+'ad.doubleclick.net.10816.9029.302br.net',
+'ad.doubleclick.net.1084.9009.302br.net',
+'ad.doubleclick.net.10846.9029.302br.net',
+'ad.doubleclick.net.10855.9029.302br.net',
+'ad.doubleclick.net.1087.9009.302br.net',
+'ad.doubleclick.net.10882.9029.302br.net',
+'ad.doubleclick.net.10888.9029.302br.net',
+'ad.doubleclick.net.10903.9029.302br.net',
+'ad.doubleclick.net.10921.9029.302br.net',
+'ad.doubleclick.net.1093.9009.302br.net',
+'ad.doubleclick.net.10939.9029.302br.net',
+'ad.doubleclick.net.1096.9009.302br.net',
+'ad.doubleclick.net.1102.9009.302br.net',
+'ad.doubleclick.net.1105.9009.302br.net',
+'ad.doubleclick.net.1108.9009.302br.net',
+'ad.doubleclick.net.1111.9009.302br.net',
+'ad.doubleclick.net.1114.9009.302br.net',
+'ad.doubleclick.net.1115.9009.302br.net',
+'ad.doubleclick.net.1118.9009.302br.net',
+'ad.doubleclick.net.1131.9009.302br.net',
+'ad.doubleclick.net.1134.9009.302br.net',
+'ad.doubleclick.net.11375.9033.302br.net',
+'ad.doubleclick.net.11381.9033.302br.net',
+'ad.doubleclick.net.11384.9033.302br.net',
+'ad.doubleclick.net.11393.9033.302br.net',
+'ad.doubleclick.net.11396.9033.302br.net',
+'ad.doubleclick.net.11545.9033.302br.net',
+'ad.doubleclick.net.11551.9033.302br.net',
+'ad.doubleclick.net.11557.9033.302br.net',
+'ad.doubleclick.net.11567.9033.302br.net',
+'ad.doubleclick.net.11568.9033.302br.net',
+'ad.doubleclick.net.11569.9033.302br.net',
+'ad.doubleclick.net.11572.9033.302br.net',
+'ad.doubleclick.net.1164.9009.302br.net',
+'ad.doubleclick.net.1165.9009.302br.net',
+'ad.doubleclick.net.11704.9033.302br.net',
+'ad.doubleclick.net.11719.9033.302br.net',
+'ad.doubleclick.net.11770.9034.302br.net',
+'ad.doubleclick.net.11773.9034.302br.net',
+'ad.doubleclick.net.11774.9034.302br.net',
+'ad.doubleclick.net.11776.9034.302br.net',
+'ad.doubleclick.net.11779.9034.302br.net',
+'ad.doubleclick.net.11780.9034.302br.net',
+'ad.doubleclick.net.11785.9034.302br.net',
+'ad.doubleclick.net.11786.9034.302br.net',
+'ad.doubleclick.net.11788.9034.302br.net',
+'ad.doubleclick.net.11789.9034.302br.net',
+'ad.doubleclick.net.11791.9034.302br.net',
+'ad.doubleclick.net.11792.9034.302br.net',
+'ad.doubleclick.net.11797.9034.302br.net',
+'ad.doubleclick.net.11798.9034.302br.net',
+'ad.doubleclick.net.11800.9034.302br.net',
+'ad.doubleclick.net.11801.9034.302br.net',
+'ad.doubleclick.net.11803.9034.302br.net',
+'ad.doubleclick.net.11804.9034.302br.net',
+'ad.doubleclick.net.11806.9034.302br.net',
+'ad.doubleclick.net.11807.9034.302br.net',
+'ad.doubleclick.net.11812.9034.302br.net',
+'ad.doubleclick.net.11813.9034.302br.net',
+'ad.doubleclick.net.11821.9034.302br.net',
+'ad.doubleclick.net.11822.9034.302br.net',
+'ad.doubleclick.net.11823.9034.302br.net',
+'ad.doubleclick.net.11824.9034.302br.net',
+'ad.doubleclick.net.11825.9034.302br.net',
+'ad.doubleclick.net.11827.9034.302br.net',
+'ad.doubleclick.net.11828.9034.302br.net',
+'ad.doubleclick.net.11830.9034.302br.net',
+'ad.doubleclick.net.11831.9034.302br.net',
+'ad.doubleclick.net.11833.9034.302br.net',
+'ad.doubleclick.net.11834.9034.302br.net',
+'ad.doubleclick.net.11836.9034.302br.net',
+'ad.doubleclick.net.11837.9034.302br.net',
+'ad.doubleclick.net.11839.9034.302br.net',
+'ad.doubleclick.net.11840.9034.302br.net',
+'ad.doubleclick.net.11842.9034.302br.net',
+'ad.doubleclick.net.11843.9034.302br.net',
+'ad.doubleclick.net.11848.9034.302br.net',
+'ad.doubleclick.net.11851.9034.302br.net',
+'ad.doubleclick.net.11852.9034.302br.net',
+'ad.doubleclick.net.11854.9034.302br.net',
+'ad.doubleclick.net.11855.9034.302br.net',
+'ad.doubleclick.net.11857.9034.302br.net',
+'ad.doubleclick.net.11858.9034.302br.net',
+'ad.doubleclick.net.11872.9036.302br.net',
+'ad.doubleclick.net.11873.9036.302br.net',
+'ad.doubleclick.net.11875.9036.302br.net',
+'ad.doubleclick.net.11876.9036.302br.net',
+'ad.doubleclick.net.11878.9036.302br.net',
+'ad.doubleclick.net.11879.9036.302br.net',
+'ad.doubleclick.net.11880.9003.302br.net',
+'ad.doubleclick.net.11883.9003.302br.net',
+'ad.doubleclick.net.11886.9003.302br.net',
+'ad.doubleclick.net.11889.9003.302br.net',
+'ad.doubleclick.net.11892.9003.302br.net',
+'ad.doubleclick.net.11895.9003.302br.net',
+'ad.doubleclick.net.11899.9037.302br.net',
+'ad.doubleclick.net.11900.9037.302br.net',
+'ad.doubleclick.net.11902.9037.302br.net',
+'ad.doubleclick.net.11905.9037.302br.net',
+'ad.doubleclick.net.11908.9037.302br.net',
+'ad.doubleclick.net.11911.9037.302br.net',
+'ad.doubleclick.net.11913.9037.302br.net',
+'ad.doubleclick.net.11914.9037.302br.net',
+'ad.doubleclick.net.11915.9037.302br.net',
+'ad.doubleclick.net.11917.9037.302br.net',
+'ad.doubleclick.net.11920.9037.302br.net',
+'ad.doubleclick.net.11922.9037.302br.net',
+'ad.doubleclick.net.11923.9037.302br.net',
+'ad.doubleclick.net.11926.9037.302br.net',
+'ad.doubleclick.net.11929.9037.302br.net',
+'ad.doubleclick.net.11932.9037.302br.net',
+'ad.doubleclick.net.11938.9037.302br.net',
+'ad.doubleclick.net.11941.9037.302br.net',
+'ad.doubleclick.net.11944.9037.302br.net',
+'ad.doubleclick.net.11950.9037.302br.net',
+'ad.doubleclick.net.11953.9037.302br.net',
+'ad.doubleclick.net.11956.9037.302br.net',
+'ad.doubleclick.net.11959.9037.302br.net',
+'ad.doubleclick.net.11962.9037.302br.net',
+'ad.doubleclick.net.11963.9037.302br.net',
+'ad.doubleclick.net.11965.9037.302br.net',
+'ad.doubleclick.net.11968.9037.302br.net',
+'ad.doubleclick.net.11973.9037.302br.net',
+'ad.doubleclick.net.11974.9037.302br.net',
+'ad.doubleclick.net.11975.9037.302br.net',
+'ad.doubleclick.net.11980.9037.302br.net',
+'ad.doubleclick.net.11983.9037.302br.net',
+'ad.doubleclick.net.11986.9037.302br.net',
+'ad.doubleclick.net.11989.9037.302br.net',
+'ad.doubleclick.net.11995.9037.302br.net',
+'ad.doubleclick.net.11998.9037.302br.net',
+'ad.doubleclick.net.12003.9037.302br.net',
+'ad.doubleclick.net.12004.9037.302br.net',
+'ad.doubleclick.net.12007.9038.302br.net',
+'ad.doubleclick.net.12008.9038.302br.net',
+'ad.doubleclick.net.12010.9038.302br.net',
+'ad.doubleclick.net.12011.9038.302br.net',
+'ad.doubleclick.net.12013.9038.302br.net',
+'ad.doubleclick.net.12014.9038.302br.net',
+'ad.doubleclick.net.12016.9038.302br.net',
+'ad.doubleclick.net.12017.9038.302br.net',
+'ad.doubleclick.net.12019.9038.302br.net',
+'ad.doubleclick.net.12020.9038.302br.net',
+'ad.doubleclick.net.12022.9038.302br.net',
+'ad.doubleclick.net.12023.9038.302br.net',
+'ad.doubleclick.net.12026.9038.302br.net',
+'ad.doubleclick.net.12032.9038.302br.net',
+'ad.doubleclick.net.12035.9038.302br.net',
+'ad.doubleclick.net.12038.9038.302br.net',
+'ad.doubleclick.net.12041.9038.302br.net',
+'ad.doubleclick.net.12050.9038.302br.net',
+'ad.doubleclick.net.12083.9038.302br.net',
+'ad.doubleclick.net.12086.9038.302br.net',
+'ad.doubleclick.net.12089.9038.302br.net',
+'ad.doubleclick.net.1209.9012.302br.net',
+'ad.doubleclick.net.1210.9012.302br.net',
+'ad.doubleclick.net.1212.9012.302br.net',
+'ad.doubleclick.net.1218.9012.302br.net',
+'ad.doubleclick.net.12196.9038.302br.net',
+'ad.doubleclick.net.12197.9038.302br.net',
+'ad.doubleclick.net.12199.9038.302br.net',
+'ad.doubleclick.net.12200.9038.302br.net',
+'ad.doubleclick.net.12202.9038.302br.net',
+'ad.doubleclick.net.12203.9038.302br.net',
+'ad.doubleclick.net.12205.9038.302br.net',
+'ad.doubleclick.net.12206.9038.302br.net',
+'ad.doubleclick.net.12208.9038.302br.net',
+'ad.doubleclick.net.12209.9038.302br.net',
+'ad.doubleclick.net.12211.9037.302br.net',
+'ad.doubleclick.net.12212.9037.302br.net',
+'ad.doubleclick.net.12214.9037.302br.net',
+'ad.doubleclick.net.12217.9037.302br.net',
+'ad.doubleclick.net.12220.9037.302br.net',
+'ad.doubleclick.net.12222.9037.302br.net',
+'ad.doubleclick.net.12223.9037.302br.net',
+'ad.doubleclick.net.12224.9037.302br.net',
+'ad.doubleclick.net.12226.9037.302br.net',
+'ad.doubleclick.net.12227.9037.302br.net',
+'ad.doubleclick.net.12229.9037.302br.net',
+'ad.doubleclick.net.12238.9037.302br.net',
+'ad.doubleclick.net.1224.9013.302br.net',
+'ad.doubleclick.net.12241.9037.302br.net',
+'ad.doubleclick.net.12243.9037.302br.net',
+'ad.doubleclick.net.12244.9037.302br.net',
+'ad.doubleclick.net.12245.9037.302br.net',
+'ad.doubleclick.net.12246.9037.302br.net',
+'ad.doubleclick.net.12247.9037.302br.net',
+'ad.doubleclick.net.12248.9037.302br.net',
+'ad.doubleclick.net.12249.9037.302br.net',
+'ad.doubleclick.net.12250.9037.302br.net',
+'ad.doubleclick.net.12251.9037.302br.net',
+'ad.doubleclick.net.12253.9037.302br.net',
+'ad.doubleclick.net.12256.9037.302br.net',
+'ad.doubleclick.net.12259.9037.302br.net',
+'ad.doubleclick.net.12262.9037.302br.net',
+'ad.doubleclick.net.12265.9037.302br.net',
+'ad.doubleclick.net.12266.9037.302br.net',
+'ad.doubleclick.net.12268.9037.302br.net',
+'ad.doubleclick.net.12269.9037.302br.net',
+'ad.doubleclick.net.1227.9013.302br.net',
+'ad.doubleclick.net.12271.9037.302br.net',
+'ad.doubleclick.net.12272.9037.302br.net',
+'ad.doubleclick.net.12274.9037.302br.net',
+'ad.doubleclick.net.12275.9037.302br.net',
+'ad.doubleclick.net.12277.9037.302br.net',
+'ad.doubleclick.net.12278.9037.302br.net',
+'ad.doubleclick.net.12280.9037.302br.net',
+'ad.doubleclick.net.12281.9037.302br.net',
+'ad.doubleclick.net.12283.9037.302br.net',
+'ad.doubleclick.net.12284.9037.302br.net',
+'ad.doubleclick.net.12286.9037.302br.net',
+'ad.doubleclick.net.12287.9037.302br.net',
+'ad.doubleclick.net.12288.9037.302br.net',
+'ad.doubleclick.net.12289.9037.302br.net',
+'ad.doubleclick.net.12290.9037.302br.net',
+'ad.doubleclick.net.12292.9037.302br.net',
+'ad.doubleclick.net.12293.9037.302br.net',
+'ad.doubleclick.net.12295.9037.302br.net',
+'ad.doubleclick.net.12296.9037.302br.net',
+'ad.doubleclick.net.12298.9037.302br.net',
+'ad.doubleclick.net.12299.9037.302br.net',
+'ad.doubleclick.net.1230.9013.302br.net',
+'ad.doubleclick.net.12301.9037.302br.net',
+'ad.doubleclick.net.12302.9037.302br.net',
+'ad.doubleclick.net.12304.9037.302br.net',
+'ad.doubleclick.net.12307.9037.302br.net',
+'ad.doubleclick.net.12308.9037.302br.net',
+'ad.doubleclick.net.12310.9037.302br.net',
+'ad.doubleclick.net.12313.9037.302br.net',
+'ad.doubleclick.net.12316.9037.302br.net',
+'ad.doubleclick.net.12317.9037.302br.net',
+'ad.doubleclick.net.12327.9034.302br.net',
+'ad.doubleclick.net.12328.9034.302br.net',
+'ad.doubleclick.net.12329.9034.302br.net',
+'ad.doubleclick.net.1233.9014.302br.net',
+'ad.doubleclick.net.12331.9034.302br.net',
+'ad.doubleclick.net.12332.9034.302br.net',
+'ad.doubleclick.net.12334.9034.302br.net',
+'ad.doubleclick.net.12339.9034.302br.net',
+'ad.doubleclick.net.1234.9014.302br.net',
+'ad.doubleclick.net.12340.9034.302br.net',
+'ad.doubleclick.net.12341.9034.302br.net',
+'ad.doubleclick.net.12343.9034.302br.net',
+'ad.doubleclick.net.12344.9034.302br.net',
+'ad.doubleclick.net.12345.9034.302br.net',
+'ad.doubleclick.net.12346.9034.302br.net',
+'ad.doubleclick.net.12347.9034.302br.net',
+'ad.doubleclick.net.12349.9034.302br.net',
+'ad.doubleclick.net.12350.9034.302br.net',
+'ad.doubleclick.net.12355.9034.302br.net',
+'ad.doubleclick.net.12356.9034.302br.net',
+'ad.doubleclick.net.12358.9034.302br.net',
+'ad.doubleclick.net.12359.9034.302br.net',
+'ad.doubleclick.net.1236.9014.302br.net',
+'ad.doubleclick.net.12361.9034.302br.net',
+'ad.doubleclick.net.12362.9034.302br.net',
+'ad.doubleclick.net.12364.9034.302br.net',
+'ad.doubleclick.net.12365.9034.302br.net',
+'ad.doubleclick.net.12367.9034.302br.net',
+'ad.doubleclick.net.12368.9034.302br.net',
+'ad.doubleclick.net.1237.9014.302br.net',
+'ad.doubleclick.net.12370.9034.302br.net',
+'ad.doubleclick.net.12371.9034.302br.net',
+'ad.doubleclick.net.12373.9034.302br.net',
+'ad.doubleclick.net.12374.9034.302br.net',
+'ad.doubleclick.net.12376.9034.302br.net',
+'ad.doubleclick.net.12377.9034.302br.net',
+'ad.doubleclick.net.12379.9034.302br.net',
+'ad.doubleclick.net.12380.9034.302br.net',
+'ad.doubleclick.net.12382.9034.302br.net',
+'ad.doubleclick.net.12383.9034.302br.net',
+'ad.doubleclick.net.12385.9034.302br.net',
+'ad.doubleclick.net.12386.9034.302br.net',
+'ad.doubleclick.net.12388.9034.302br.net',
+'ad.doubleclick.net.12389.9034.302br.net',
+'ad.doubleclick.net.1239.9014.302br.net',
+'ad.doubleclick.net.12391.9034.302br.net',
+'ad.doubleclick.net.12392.9034.302br.net',
+'ad.doubleclick.net.12397.9034.302br.net',
+'ad.doubleclick.net.12398.9034.302br.net',
+'ad.doubleclick.net.1240.9014.302br.net',
+'ad.doubleclick.net.12400.9034.302br.net',
+'ad.doubleclick.net.12401.9034.302br.net',
+'ad.doubleclick.net.12403.9034.302br.net',
+'ad.doubleclick.net.12404.9034.302br.net',
+'ad.doubleclick.net.12405.9034.302br.net',
+'ad.doubleclick.net.12406.9034.302br.net',
+'ad.doubleclick.net.12407.9034.302br.net',
+'ad.doubleclick.net.1243.9015.302br.net',
+'ad.doubleclick.net.12461.9038.302br.net',
+'ad.doubleclick.net.12464.9038.302br.net',
+'ad.doubleclick.net.12467.9038.302br.net',
+'ad.doubleclick.net.1249.9015.302br.net',
+'ad.doubleclick.net.12710.9046.302br.net',
+'ad.doubleclick.net.12713.9046.302br.net',
+'ad.doubleclick.net.12714.9046.302br.net',
+'ad.doubleclick.net.12716.9046.302br.net',
+'ad.doubleclick.net.12719.9046.302br.net',
+'ad.doubleclick.net.12722.9046.302br.net',
+'ad.doubleclick.net.12725.9046.302br.net',
+'ad.doubleclick.net.12726.9046.302br.net',
+'ad.doubleclick.net.12728.9046.302br.net',
+'ad.doubleclick.net.12729.9046.302br.net',
+'ad.doubleclick.net.12731.9046.302br.net',
+'ad.doubleclick.net.12732.9046.302br.net',
+'ad.doubleclick.net.12734.9046.302br.net',
+'ad.doubleclick.net.12735.9046.302br.net',
+'ad.doubleclick.net.12737.9046.302br.net',
+'ad.doubleclick.net.12738.9046.302br.net',
+'ad.doubleclick.net.12740.9046.302br.net',
+'ad.doubleclick.net.12741.9046.302br.net',
+'ad.doubleclick.net.12743.9046.302br.net',
+'ad.doubleclick.net.12744.9046.302br.net',
+'ad.doubleclick.net.12746.9047.302br.net',
+'ad.doubleclick.net.12749.9047.302br.net',
+'ad.doubleclick.net.12759.9047.302br.net',
+'ad.doubleclick.net.12762.9047.302br.net',
+'ad.doubleclick.net.12771.9047.302br.net',
+'ad.doubleclick.net.12926.9034.302br.net',
+'ad.doubleclick.net.12938.9034.302br.net',
+'ad.doubleclick.net.12939.9034.302br.net',
+'ad.doubleclick.net.12941.9034.302br.net',
+'ad.doubleclick.net.132.6100.302br.net',
+'ad.doubleclick.net.1327.9015.302br.net',
+'ad.doubleclick.net.1330.9015.302br.net',
+'ad.doubleclick.net.1336.9015.302br.net',
+'ad.doubleclick.net.13521.9009.302br.net',
+'ad.doubleclick.net.13528.9009.302br.net',
+'ad.doubleclick.net.13529.9009.302br.net',
+'ad.doubleclick.net.13531.9009.302br.net',
+'ad.doubleclick.net.13532.9009.302br.net',
+'ad.doubleclick.net.13535.9009.302br.net',
+'ad.doubleclick.net.13541.9009.302br.net',
+'ad.doubleclick.net.13544.9009.302br.net',
+'ad.doubleclick.net.13556.9009.302br.net',
+'ad.doubleclick.net.13604.9005.302br.net',
+'ad.doubleclick.net.13605.9005.302br.net',
+'ad.doubleclick.net.13606.9005.302br.net',
+'ad.doubleclick.net.13607.9005.302br.net',
+'ad.doubleclick.net.13608.9005.302br.net',
+'ad.doubleclick.net.13618.9005.302br.net',
+'ad.doubleclick.net.13620.9005.302br.net',
+'ad.doubleclick.net.13628.9005.302br.net',
+'ad.doubleclick.net.1363.9015.302br.net',
+'ad.doubleclick.net.13630.9005.302br.net',
+'ad.doubleclick.net.13632.9005.302br.net',
+'ad.doubleclick.net.13634.9053.302br.net',
+'ad.doubleclick.net.13642.9053.302br.net',
+'ad.doubleclick.net.13643.9053.302br.net',
+'ad.doubleclick.net.13644.9053.302br.net',
+'ad.doubleclick.net.13645.9053.302br.net',
+'ad.doubleclick.net.13646.9053.302br.net',
+'ad.doubleclick.net.13647.9053.302br.net',
+'ad.doubleclick.net.13649.9053.302br.net',
+'ad.doubleclick.net.13658.9053.302br.net',
+'ad.doubleclick.net.13661.9053.302br.net',
+'ad.doubleclick.net.13721.9055.302br.net',
+'ad.doubleclick.net.13723.9055.302br.net',
+'ad.doubleclick.net.13724.9055.302br.net',
+'ad.doubleclick.net.13725.9055.302br.net',
+'ad.doubleclick.net.13727.9055.302br.net',
+'ad.doubleclick.net.13730.9055.302br.net',
+'ad.doubleclick.net.13739.9055.302br.net',
+'ad.doubleclick.net.13742.9055.302br.net',
+'ad.doubleclick.net.13782.9054.302br.net',
+'ad.doubleclick.net.13802.9054.302br.net',
+'ad.doubleclick.net.13803.9054.302br.net',
+'ad.doubleclick.net.13805.9054.302br.net',
+'ad.doubleclick.net.13806.9054.302br.net',
+'ad.doubleclick.net.13808.9054.302br.net',
+'ad.doubleclick.net.13809.9054.302br.net',
+'ad.doubleclick.net.13811.9054.302br.net',
+'ad.doubleclick.net.13812.9054.302br.net',
+'ad.doubleclick.net.13817.9054.302br.net',
+'ad.doubleclick.net.14043.9057.302br.net',
+'ad.doubleclick.net.14046.9057.302br.net',
+'ad.doubleclick.net.14063.9059.302br.net',
+'ad.doubleclick.net.14066.9059.302br.net',
+'ad.doubleclick.net.14075.9059.302br.net',
+'ad.doubleclick.net.14078.9059.302br.net',
+'ad.doubleclick.net.14079.9059.302br.net',
+'ad.doubleclick.net.14081.9059.302br.net',
+'ad.doubleclick.net.14082.9059.302br.net',
+'ad.doubleclick.net.14084.9059.302br.net',
+'ad.doubleclick.net.14085.9059.302br.net',
+'ad.doubleclick.net.14087.9059.302br.net',
+'ad.doubleclick.net.14088.9059.302br.net',
+'ad.doubleclick.net.14090.9059.302br.net',
+'ad.doubleclick.net.14091.9059.302br.net',
+'ad.doubleclick.net.14096.9059.302br.net',
+'ad.doubleclick.net.14097.9059.302br.net',
+'ad.doubleclick.net.14099.9059.302br.net',
+'ad.doubleclick.net.14102.9059.302br.net',
+'ad.doubleclick.net.14103.9059.302br.net',
+'ad.doubleclick.net.14105.9059.302br.net',
+'ad.doubleclick.net.14106.9059.302br.net',
+'ad.doubleclick.net.14108.9059.302br.net',
+'ad.doubleclick.net.14109.9059.302br.net',
+'ad.doubleclick.net.14111.9059.302br.net',
+'ad.doubleclick.net.14112.9059.302br.net',
+'ad.doubleclick.net.14114.9059.302br.net',
+'ad.doubleclick.net.14115.9059.302br.net',
+'ad.doubleclick.net.14117.9059.302br.net',
+'ad.doubleclick.net.14118.9059.302br.net',
+'ad.doubleclick.net.14120.9059.302br.net',
+'ad.doubleclick.net.14121.9059.302br.net',
+'ad.doubleclick.net.14123.9059.302br.net',
+'ad.doubleclick.net.14124.9059.302br.net',
+'ad.doubleclick.net.14126.9059.302br.net',
+'ad.doubleclick.net.14127.9059.302br.net',
+'ad.doubleclick.net.14129.9059.302br.net',
+'ad.doubleclick.net.14130.9059.302br.net',
+'ad.doubleclick.net.14132.9059.302br.net',
+'ad.doubleclick.net.14135.9059.302br.net',
+'ad.doubleclick.net.14136.9059.302br.net',
+'ad.doubleclick.net.14138.9059.302br.net',
+'ad.doubleclick.net.14139.9059.302br.net',
+'ad.doubleclick.net.14141.9059.302br.net',
+'ad.doubleclick.net.14144.9059.302br.net',
+'ad.doubleclick.net.14145.9059.302br.net',
+'ad.doubleclick.net.14150.9059.302br.net',
+'ad.doubleclick.net.14159.9059.302br.net',
+'ad.doubleclick.net.14160.9059.302br.net',
+'ad.doubleclick.net.1423.9015.302br.net',
+'ad.doubleclick.net.14235.9062.302br.net',
+'ad.doubleclick.net.14259.9064.302br.net',
+'ad.doubleclick.net.14271.9064.302br.net',
+'ad.doubleclick.net.14274.9064.302br.net',
+'ad.doubleclick.net.14277.9064.302br.net',
+'ad.doubleclick.net.14280.9064.302br.net',
+'ad.doubleclick.net.14285.9065.302br.net',
+'ad.doubleclick.net.14288.9065.302br.net',
+'ad.doubleclick.net.14291.9065.302br.net',
+'ad.doubleclick.net.14292.9065.302br.net',
+'ad.doubleclick.net.14294.9065.302br.net',
+'ad.doubleclick.net.14297.9065.302br.net',
+'ad.doubleclick.net.14300.9065.302br.net',
+'ad.doubleclick.net.14303.9065.302br.net',
+'ad.doubleclick.net.14306.9065.302br.net',
+'ad.doubleclick.net.14309.9065.302br.net',
+'ad.doubleclick.net.14343.9037.302br.net',
+'ad.doubleclick.net.14346.9037.302br.net',
+'ad.doubleclick.net.14349.9037.302br.net',
+'ad.doubleclick.net.1435.9015.302br.net',
+'ad.doubleclick.net.14352.9037.302br.net',
+'ad.doubleclick.net.14353.9037.302br.net',
+'ad.doubleclick.net.14355.9037.302br.net',
+'ad.doubleclick.net.14356.9037.302br.net',
+'ad.doubleclick.net.14358.9037.302br.net',
+'ad.doubleclick.net.14359.9037.302br.net',
+'ad.doubleclick.net.1438.9015.302br.net',
+'ad.doubleclick.net.14400.9053.302br.net',
+'ad.doubleclick.net.14403.9053.302br.net',
+'ad.doubleclick.net.14412.9053.302br.net',
+'ad.doubleclick.net.14415.9053.302br.net',
+'ad.doubleclick.net.14421.9053.302br.net',
+'ad.doubleclick.net.14427.9053.302br.net',
+'ad.doubleclick.net.14436.9053.302br.net',
+'ad.doubleclick.net.14475.9070.302br.net',
+'ad.doubleclick.net.14477.9070.302br.net',
+'ad.doubleclick.net.14480.9070.302br.net',
+'ad.doubleclick.net.14482.9070.302br.net',
+'ad.doubleclick.net.14483.9070.302br.net',
+'ad.doubleclick.net.14485.9070.302br.net',
+'ad.doubleclick.net.14486.9070.302br.net',
+'ad.doubleclick.net.14487.9070.302br.net',
+'ad.doubleclick.net.14488.9070.302br.net',
+'ad.doubleclick.net.14489.9070.302br.net',
+'ad.doubleclick.net.14491.9071.302br.net',
+'ad.doubleclick.net.14498.9072.302br.net',
+'ad.doubleclick.net.14501.9072.302br.net',
+'ad.doubleclick.net.14504.9072.302br.net',
+'ad.doubleclick.net.14505.9072.302br.net',
+'ad.doubleclick.net.14507.9073.302br.net',
+'ad.doubleclick.net.14509.9073.302br.net',
+'ad.doubleclick.net.14511.9073.302br.net',
+'ad.doubleclick.net.14513.9073.302br.net',
+'ad.doubleclick.net.14515.9073.302br.net',
+'ad.doubleclick.net.14517.9073.302br.net',
+'ad.doubleclick.net.1453.9015.302br.net',
+'ad.doubleclick.net.1474.9015.302br.net',
+'ad.doubleclick.net.1477.9015.302br.net',
+'ad.doubleclick.net.148.6100.302br.net',
+'ad.doubleclick.net.1504.9015.302br.net',
+'ad.doubleclick.net.1507.9015.302br.net',
+'ad.doubleclick.net.1525.9015.302br.net',
+'ad.doubleclick.net.1528.9015.302br.net',
+'ad.doubleclick.net.1534.9015.302br.net',
+'ad.doubleclick.net.1540.9015.302br.net',
+'ad.doubleclick.net.1543.9015.302br.net',
+'ad.doubleclick.net.1573.9015.302br.net',
+'ad.doubleclick.net.1576.9015.302br.net',
+'ad.doubleclick.net.1585.9015.302br.net',
+'ad.doubleclick.net.1591.9015.302br.net',
+'ad.doubleclick.net.15919.9075.302br.net',
+'ad.doubleclick.net.15921.9075.302br.net',
+'ad.doubleclick.net.15933.9075.302br.net',
+'ad.doubleclick.net.15957.9075.302br.net',
+'ad.doubleclick.net.15966.9075.302br.net',
+'ad.doubleclick.net.15969.9075.302br.net',
+'ad.doubleclick.net.15975.9075.302br.net',
+'ad.doubleclick.net.15983.9089.302br.net',
+'ad.doubleclick.net.15984.9089.302br.net',
+'ad.doubleclick.net.15985.9089.302br.net',
+'ad.doubleclick.net.15986.9089.302br.net',
+'ad.doubleclick.net.15989.9089.302br.net',
+'ad.doubleclick.net.16001.9088.302br.net',
+'ad.doubleclick.net.16002.9088.302br.net',
+'ad.doubleclick.net.16004.9088.302br.net',
+'ad.doubleclick.net.16005.9088.302br.net',
+'ad.doubleclick.net.16006.9088.302br.net',
+'ad.doubleclick.net.16007.9088.302br.net',
+'ad.doubleclick.net.16008.9088.302br.net',
+'ad.doubleclick.net.16010.9088.302br.net',
+'ad.doubleclick.net.16011.9088.302br.net',
+'ad.doubleclick.net.16012.9088.302br.net',
+'ad.doubleclick.net.16013.9088.302br.net',
+'ad.doubleclick.net.16014.9088.302br.net',
+'ad.doubleclick.net.16016.9088.302br.net',
+'ad.doubleclick.net.16017.9088.302br.net',
+'ad.doubleclick.net.16019.9088.302br.net',
+'ad.doubleclick.net.16020.9088.302br.net',
+'ad.doubleclick.net.16022.9088.302br.net',
+'ad.doubleclick.net.16023.9088.302br.net',
+'ad.doubleclick.net.16025.9088.302br.net',
+'ad.doubleclick.net.16026.9088.302br.net',
+'ad.doubleclick.net.16027.9088.302br.net',
+'ad.doubleclick.net.16028.9088.302br.net',
+'ad.doubleclick.net.16029.9088.302br.net',
+'ad.doubleclick.net.16031.9088.302br.net',
+'ad.doubleclick.net.16032.9088.302br.net',
+'ad.doubleclick.net.16034.9088.302br.net',
+'ad.doubleclick.net.16035.9088.302br.net',
+'ad.doubleclick.net.16040.9088.302br.net',
+'ad.doubleclick.net.16041.9088.302br.net',
+'ad.doubleclick.net.16043.9088.302br.net',
+'ad.doubleclick.net.16044.9088.302br.net',
+'ad.doubleclick.net.16049.9088.302br.net',
+'ad.doubleclick.net.16050.9088.302br.net',
+'ad.doubleclick.net.16071.9090.302br.net',
+'ad.doubleclick.net.16077.9090.302br.net',
+'ad.doubleclick.net.16086.9090.302br.net',
+'ad.doubleclick.net.16095.9090.302br.net',
+'ad.doubleclick.net.16104.9090.302br.net',
+'ad.doubleclick.net.16110.9090.302br.net',
+'ad.doubleclick.net.16125.9090.302br.net',
+'ad.doubleclick.net.16134.9090.302br.net',
+'ad.doubleclick.net.16146.9090.302br.net',
+'ad.doubleclick.net.16155.9090.302br.net',
+'ad.doubleclick.net.16173.9090.302br.net',
+'ad.doubleclick.net.16179.9090.302br.net',
+'ad.doubleclick.net.16185.9090.302br.net',
+'ad.doubleclick.net.16188.9090.302br.net',
+'ad.doubleclick.net.16215.9090.302br.net',
+'ad.doubleclick.net.16221.9090.302br.net',
+'ad.doubleclick.net.16224.9090.302br.net',
+'ad.doubleclick.net.16239.9090.302br.net',
+'ad.doubleclick.net.16242.9090.302br.net',
+'ad.doubleclick.net.16260.9091.302br.net',
+'ad.doubleclick.net.1633.9015.302br.net',
+'ad.doubleclick.net.1648.9015.302br.net',
+'ad.doubleclick.net.16500.9093.302br.net',
+'ad.doubleclick.net.16503.9093.302br.net',
+'ad.doubleclick.net.16506.9093.302br.net',
+'ad.doubleclick.net.1651.9015.302br.net',
+'ad.doubleclick.net.1654.9015.302br.net',
+'ad.doubleclick.net.16577.9003.302br.net',
+'ad.doubleclick.net.16580.9003.302br.net',
+'ad.doubleclick.net.16583.9003.302br.net',
+'ad.doubleclick.net.16652.9099.302br.net',
+'ad.doubleclick.net.16655.9099.302br.net',
+'ad.doubleclick.net.16658.9099.302br.net',
+'ad.doubleclick.net.1669.9015.302br.net',
+'ad.doubleclick.net.16760.9100.302br.net',
+'ad.doubleclick.net.16763.9100.302br.net',
+'ad.doubleclick.net.16766.9100.302br.net',
+'ad.doubleclick.net.1693.9015.302br.net',
+'ad.doubleclick.net.17125.9083.302br.net',
+'ad.doubleclick.net.17128.9083.302br.net',
+'ad.doubleclick.net.17129.9083.302br.net',
+'ad.doubleclick.net.17131.9083.302br.net',
+'ad.doubleclick.net.17134.9083.302br.net',
+'ad.doubleclick.net.17137.9083.302br.net',
+'ad.doubleclick.net.17138.9083.302br.net',
+'ad.doubleclick.net.17140.9083.302br.net',
+'ad.doubleclick.net.17141.9083.302br.net',
+'ad.doubleclick.net.17143.9083.302br.net',
+'ad.doubleclick.net.17144.9083.302br.net',
+'ad.doubleclick.net.17146.9083.302br.net',
+'ad.doubleclick.net.17147.9083.302br.net',
+'ad.doubleclick.net.17149.9083.302br.net',
+'ad.doubleclick.net.17152.9083.302br.net',
+'ad.doubleclick.net.17153.9083.302br.net',
+'ad.doubleclick.net.17155.9083.302br.net',
+'ad.doubleclick.net.17216.9104.302br.net',
+'ad.doubleclick.net.17219.9076.302br.net',
+'ad.doubleclick.net.17220.9076.302br.net',
+'ad.doubleclick.net.17222.9076.302br.net',
+'ad.doubleclick.net.17223.9076.302br.net',
+'ad.doubleclick.net.17225.9076.302br.net',
+'ad.doubleclick.net.17228.9076.302br.net',
+'ad.doubleclick.net.17229.9076.302br.net',
+'ad.doubleclick.net.17231.9076.302br.net',
+'ad.doubleclick.net.17234.9076.302br.net',
+'ad.doubleclick.net.17235.9076.302br.net',
+'ad.doubleclick.net.17237.9077.302br.net',
+'ad.doubleclick.net.17240.9077.302br.net',
+'ad.doubleclick.net.17241.9077.302br.net',
+'ad.doubleclick.net.17243.9077.302br.net',
+'ad.doubleclick.net.17244.9077.302br.net',
+'ad.doubleclick.net.17246.9077.302br.net',
+'ad.doubleclick.net.17247.9077.302br.net',
+'ad.doubleclick.net.17249.9077.302br.net',
+'ad.doubleclick.net.17250.9077.302br.net',
+'ad.doubleclick.net.17252.9077.302br.net',
+'ad.doubleclick.net.17253.9077.302br.net',
+'ad.doubleclick.net.17255.9078.302br.net',
+'ad.doubleclick.net.17261.9078.302br.net',
+'ad.doubleclick.net.17264.9078.302br.net',
+'ad.doubleclick.net.17273.9079.302br.net',
+'ad.doubleclick.net.17276.9079.302br.net',
+'ad.doubleclick.net.17279.9079.302br.net',
+'ad.doubleclick.net.17282.9079.302br.net',
+'ad.doubleclick.net.17283.9079.302br.net',
+'ad.doubleclick.net.17285.9079.302br.net',
+'ad.doubleclick.net.17291.9080.302br.net',
+'ad.doubleclick.net.17303.9080.302br.net',
+'ad.doubleclick.net.17306.9080.302br.net',
+'ad.doubleclick.net.17309.9081.302br.net',
+'ad.doubleclick.net.17315.9081.302br.net',
+'ad.doubleclick.net.17316.9081.302br.net',
+'ad.doubleclick.net.17318.9081.302br.net',
+'ad.doubleclick.net.17321.9081.302br.net',
+'ad.doubleclick.net.17322.9081.302br.net',
+'ad.doubleclick.net.17324.9081.302br.net',
+'ad.doubleclick.net.17325.9081.302br.net',
+'ad.doubleclick.net.17333.9084.302br.net',
+'ad.doubleclick.net.17339.9084.302br.net',
+'ad.doubleclick.net.17342.9084.302br.net',
+'ad.doubleclick.net.17381.9085.302br.net',
+'ad.doubleclick.net.17382.9085.302br.net',
+'ad.doubleclick.net.17384.9085.302br.net',
+'ad.doubleclick.net.17385.9085.302br.net',
+'ad.doubleclick.net.17387.9085.302br.net',
+'ad.doubleclick.net.17388.9085.302br.net',
+'ad.doubleclick.net.17390.9085.302br.net',
+'ad.doubleclick.net.17391.9085.302br.net',
+'ad.doubleclick.net.17393.9085.302br.net',
+'ad.doubleclick.net.17394.9085.302br.net',
+'ad.doubleclick.net.17396.9085.302br.net',
+'ad.doubleclick.net.17397.9085.302br.net',
+'ad.doubleclick.net.17407.9086.302br.net',
+'ad.doubleclick.net.17408.9086.302br.net',
+'ad.doubleclick.net.17409.9086.302br.net',
+'ad.doubleclick.net.17410.9086.302br.net',
+'ad.doubleclick.net.17411.9086.302br.net',
+'ad.doubleclick.net.17412.9086.302br.net',
+'ad.doubleclick.net.17414.9086.302br.net',
+'ad.doubleclick.net.17415.9086.302br.net',
+'ad.doubleclick.net.17417.9086.302br.net',
+'ad.doubleclick.net.17418.9086.302br.net',
+'ad.doubleclick.net.17420.9086.302br.net',
+'ad.doubleclick.net.17421.9086.302br.net',
+'ad.doubleclick.net.17423.9086.302br.net',
+'ad.doubleclick.net.17424.9086.302br.net',
+'ad.doubleclick.net.17426.9087.302br.net',
+'ad.doubleclick.net.17427.9087.302br.net',
+'ad.doubleclick.net.17429.9034.302br.net',
+'ad.doubleclick.net.17429.9087.302br.net',
+'ad.doubleclick.net.17430.9087.302br.net',
+'ad.doubleclick.net.17432.9034.302br.net',
+'ad.doubleclick.net.17432.9087.302br.net',
+'ad.doubleclick.net.17433.9087.302br.net',
+'ad.doubleclick.net.17444.9053.302br.net',
+'ad.doubleclick.net.17445.9053.302br.net',
+'ad.doubleclick.net.17447.9053.302br.net',
+'ad.doubleclick.net.17448.9053.302br.net',
+'ad.doubleclick.net.17450.9053.302br.net',
+'ad.doubleclick.net.17486.9105.302br.net',
+'ad.doubleclick.net.17495.9105.302br.net',
+'ad.doubleclick.net.17498.9105.302br.net',
+'ad.doubleclick.net.1750.9017.302br.net',
+'ad.doubleclick.net.17501.9105.302br.net',
+'ad.doubleclick.net.17507.9105.302br.net',
+'ad.doubleclick.net.17510.9105.302br.net',
+'ad.doubleclick.net.17513.9105.302br.net',
+'ad.doubleclick.net.17519.9105.302br.net',
+'ad.doubleclick.net.17522.9105.302br.net',
+'ad.doubleclick.net.17583.9109.302br.net',
+'ad.doubleclick.net.17584.9109.302br.net',
+'ad.doubleclick.net.17585.9109.302br.net',
+'ad.doubleclick.net.17590.9109.302br.net',
+'ad.doubleclick.net.17593.9109.302br.net',
+'ad.doubleclick.net.17600.9110.302br.net',
+'ad.doubleclick.net.17606.9110.302br.net',
+'ad.doubleclick.net.17612.9110.302br.net',
+'ad.doubleclick.net.17615.9110.302br.net',
+'ad.doubleclick.net.17618.9110.302br.net',
+'ad.doubleclick.net.17621.9110.302br.net',
+'ad.doubleclick.net.17624.9110.302br.net',
+'ad.doubleclick.net.17627.9111.302br.net',
+'ad.doubleclick.net.17630.9111.302br.net',
+'ad.doubleclick.net.17633.9111.302br.net',
+'ad.doubleclick.net.17636.9111.302br.net',
+'ad.doubleclick.net.17647.9112.302br.net',
+'ad.doubleclick.net.17648.9112.302br.net',
+'ad.doubleclick.net.17649.9112.302br.net',
+'ad.doubleclick.net.17650.9112.302br.net',
+'ad.doubleclick.net.17651.9112.302br.net',
+'ad.doubleclick.net.17652.9112.302br.net',
+'ad.doubleclick.net.17653.9112.302br.net',
+'ad.doubleclick.net.17654.9112.302br.net',
+'ad.doubleclick.net.17655.9112.302br.net',
+'ad.doubleclick.net.17660.9111.302br.net',
+'ad.doubleclick.net.17663.9111.302br.net',
+'ad.doubleclick.net.17666.9111.302br.net',
+'ad.doubleclick.net.17675.9110.302br.net',
+'ad.doubleclick.net.17678.9110.302br.net',
+'ad.doubleclick.net.17681.9110.302br.net',
+'ad.doubleclick.net.17684.9110.302br.net',
+'ad.doubleclick.net.17687.9110.302br.net',
+'ad.doubleclick.net.17690.9110.302br.net',
+'ad.doubleclick.net.17693.9110.302br.net',
+'ad.doubleclick.net.17696.9110.302br.net',
+'ad.doubleclick.net.17699.9110.302br.net',
+'ad.doubleclick.net.17702.9083.302br.net',
+'ad.doubleclick.net.17705.9083.302br.net',
+'ad.doubleclick.net.17707.9083.302br.net',
+'ad.doubleclick.net.17708.9083.302br.net',
+'ad.doubleclick.net.17710.9085.302br.net',
+'ad.doubleclick.net.17711.9085.302br.net',
+'ad.doubleclick.net.17712.9085.302br.net',
+'ad.doubleclick.net.17714.9085.302br.net',
+'ad.doubleclick.net.17715.9085.302br.net',
+'ad.doubleclick.net.17717.9085.302br.net',
+'ad.doubleclick.net.17718.9085.302br.net',
+'ad.doubleclick.net.17720.9085.302br.net',
+'ad.doubleclick.net.17723.9085.302br.net',
+'ad.doubleclick.net.17724.9085.302br.net',
+'ad.doubleclick.net.17726.9085.302br.net',
+'ad.doubleclick.net.17727.9085.302br.net',
+'ad.doubleclick.net.18013.9076.302br.net',
+'ad.doubleclick.net.18022.9077.302br.net',
+'ad.doubleclick.net.18029.9078.302br.net',
+'ad.doubleclick.net.18061.9081.302br.net',
+'ad.doubleclick.net.18073.9082.302br.net',
+'ad.doubleclick.net.18089.9084.302br.net',
+'ad.doubleclick.net.18097.9085.302br.net',
+'ad.doubleclick.net.18104.9086.302br.net',
+'ad.doubleclick.net.18117.9087.302br.net',
+'ad.doubleclick.net.18133.9077.302br.net',
+'ad.doubleclick.net.18134.9077.302br.net',
+'ad.doubleclick.net.18135.9077.302br.net',
+'ad.doubleclick.net.18137.9077.302br.net',
+'ad.doubleclick.net.18138.9077.302br.net',
+'ad.doubleclick.net.18140.9077.302br.net',
+'ad.doubleclick.net.18161.9077.302br.net',
+'ad.doubleclick.net.18162.9077.302br.net',
+'ad.doubleclick.net.18164.9077.302br.net',
+'ad.doubleclick.net.18165.9077.302br.net',
+'ad.doubleclick.net.18167.9077.302br.net',
+'ad.doubleclick.net.18168.9077.302br.net',
+'ad.doubleclick.net.18169.9077.302br.net',
+'ad.doubleclick.net.18170.9077.302br.net',
+'ad.doubleclick.net.18171.9077.302br.net',
+'ad.doubleclick.net.18172.9077.302br.net',
+'ad.doubleclick.net.18173.9077.302br.net',
+'ad.doubleclick.net.18174.9077.302br.net',
+'ad.doubleclick.net.18203.9078.302br.net',
+'ad.doubleclick.net.18204.9078.302br.net',
+'ad.doubleclick.net.18209.9078.302br.net',
+'ad.doubleclick.net.18210.9078.302br.net',
+'ad.doubleclick.net.18212.9079.302br.net',
+'ad.doubleclick.net.18213.9079.302br.net',
+'ad.doubleclick.net.18215.9079.302br.net',
+'ad.doubleclick.net.18216.9079.302br.net',
+'ad.doubleclick.net.18218.9079.302br.net',
+'ad.doubleclick.net.18221.9079.302br.net',
+'ad.doubleclick.net.18230.9079.302br.net',
+'ad.doubleclick.net.18231.9079.302br.net',
+'ad.doubleclick.net.18248.9081.302br.net',
+'ad.doubleclick.net.18249.9081.302br.net',
+'ad.doubleclick.net.18254.9081.302br.net',
+'ad.doubleclick.net.18255.9081.302br.net',
+'ad.doubleclick.net.18257.9081.302br.net',
+'ad.doubleclick.net.18258.9081.302br.net',
+'ad.doubleclick.net.18263.9081.302br.net',
+'ad.doubleclick.net.18264.9081.302br.net',
+'ad.doubleclick.net.18272.9082.302br.net',
+'ad.doubleclick.net.18274.9083.302br.net',
+'ad.doubleclick.net.18275.9083.302br.net',
+'ad.doubleclick.net.18276.9083.302br.net',
+'ad.doubleclick.net.18278.9083.302br.net',
+'ad.doubleclick.net.18279.9083.302br.net',
+'ad.doubleclick.net.18281.9083.302br.net',
+'ad.doubleclick.net.18282.9083.302br.net',
+'ad.doubleclick.net.18284.9085.302br.net',
+'ad.doubleclick.net.18285.9085.302br.net',
+'ad.doubleclick.net.18287.9085.302br.net',
+'ad.doubleclick.net.18288.9085.302br.net',
+'ad.doubleclick.net.18290.9085.302br.net',
+'ad.doubleclick.net.18291.9085.302br.net',
+'ad.doubleclick.net.18293.9085.302br.net',
+'ad.doubleclick.net.18294.9085.302br.net',
+'ad.doubleclick.net.18295.9086.302br.net',
+'ad.doubleclick.net.18296.9086.302br.net',
+'ad.doubleclick.net.18297.9086.302br.net',
+'ad.doubleclick.net.18298.9086.302br.net',
+'ad.doubleclick.net.18299.9086.302br.net',
+'ad.doubleclick.net.18300.9086.302br.net',
+'ad.doubleclick.net.18301.9086.302br.net',
+'ad.doubleclick.net.18302.9086.302br.net',
+'ad.doubleclick.net.18303.9086.302br.net',
+'ad.doubleclick.net.18308.9087.302br.net',
+'ad.doubleclick.net.18309.9087.302br.net',
+'ad.doubleclick.net.18311.9087.302br.net',
+'ad.doubleclick.net.18314.9087.302br.net',
+'ad.doubleclick.net.18317.9087.302br.net',
+'ad.doubleclick.net.18318.9087.302br.net',
+'ad.doubleclick.net.18320.9087.302br.net',
+'ad.doubleclick.net.18321.9087.302br.net',
+'ad.doubleclick.net.18323.9087.302br.net',
+'ad.doubleclick.net.18324.9087.302br.net',
+'ad.doubleclick.net.18326.9087.302br.net',
+'ad.doubleclick.net.18329.9087.302br.net',
+'ad.doubleclick.net.18332.9087.302br.net',
+'ad.doubleclick.net.18335.9087.302br.net',
+'ad.doubleclick.net.18338.9087.302br.net',
+'ad.doubleclick.net.18341.9084.302br.net',
+'ad.doubleclick.net.18342.9084.302br.net',
+'ad.doubleclick.net.18344.9084.302br.net',
+'ad.doubleclick.net.18345.9084.302br.net',
+'ad.doubleclick.net.18359.9076.302br.net',
+'ad.doubleclick.net.18362.9076.302br.net',
+'ad.doubleclick.net.18365.9076.302br.net',
+'ad.doubleclick.net.18369.9077.302br.net',
+'ad.doubleclick.net.18370.9077.302br.net',
+'ad.doubleclick.net.18372.9077.302br.net',
+'ad.doubleclick.net.18373.9077.302br.net',
+'ad.doubleclick.net.18376.9077.302br.net',
+'ad.doubleclick.net.18377.9077.302br.net',
+'ad.doubleclick.net.18422.9082.302br.net',
+'ad.doubleclick.net.18423.9082.302br.net',
+'ad.doubleclick.net.18425.9082.302br.net',
+'ad.doubleclick.net.18426.9082.302br.net',
+'ad.doubleclick.net.18428.9082.302br.net',
+'ad.doubleclick.net.18429.9082.302br.net',
+'ad.doubleclick.net.18449.9085.302br.net',
+'ad.doubleclick.net.18450.9085.302br.net',
+'ad.doubleclick.net.18453.9085.302br.net',
+'ad.doubleclick.net.18456.9085.302br.net',
+'ad.doubleclick.net.18459.9086.302br.net',
+'ad.doubleclick.net.18460.9086.302br.net',
+'ad.doubleclick.net.18462.9086.302br.net',
+'ad.doubleclick.net.18463.9086.302br.net',
+'ad.doubleclick.net.18465.9086.302br.net',
+'ad.doubleclick.net.18466.9086.302br.net',
+'ad.doubleclick.net.185.6100.302br.net',
+'ad.doubleclick.net.186.6100.302br.net',
+'ad.doubleclick.net.18697.9076.302br.net',
+'ad.doubleclick.net.18700.9076.302br.net',
+'ad.doubleclick.net.18703.9076.302br.net',
+'ad.doubleclick.net.18704.9076.302br.net',
+'ad.doubleclick.net.18706.9076.302br.net',
+'ad.doubleclick.net.18707.9076.302br.net',
+'ad.doubleclick.net.18709.9077.302br.net',
+'ad.doubleclick.net.18710.9077.302br.net',
+'ad.doubleclick.net.18711.9077.302br.net',
+'ad.doubleclick.net.18712.9077.302br.net',
+'ad.doubleclick.net.18713.9077.302br.net',
+'ad.doubleclick.net.18714.9078.302br.net',
+'ad.doubleclick.net.18715.9078.302br.net',
+'ad.doubleclick.net.18716.9078.302br.net',
+'ad.doubleclick.net.18721.9078.302br.net',
+'ad.doubleclick.net.18724.9078.302br.net',
+'ad.doubleclick.net.18725.9078.302br.net',
+'ad.doubleclick.net.18727.9081.302br.net',
+'ad.doubleclick.net.18728.9081.302br.net',
+'ad.doubleclick.net.18730.9081.302br.net',
+'ad.doubleclick.net.18731.9081.302br.net',
+'ad.doubleclick.net.18732.9082.302br.net',
+'ad.doubleclick.net.18734.9082.302br.net',
+'ad.doubleclick.net.18735.9082.302br.net',
+'ad.doubleclick.net.18737.9082.302br.net',
+'ad.doubleclick.net.18754.9085.302br.net',
+'ad.doubleclick.net.18757.9085.302br.net',
+'ad.doubleclick.net.18758.9085.302br.net',
+'ad.doubleclick.net.18760.9085.302br.net',
+'ad.doubleclick.net.18761.9085.302br.net',
+'ad.doubleclick.net.18763.9085.302br.net',
+'ad.doubleclick.net.18764.9085.302br.net',
+'ad.doubleclick.net.18769.9086.302br.net',
+'ad.doubleclick.net.18770.9086.302br.net',
+'ad.doubleclick.net.18772.9086.302br.net',
+'ad.doubleclick.net.18773.9086.302br.net',
+'ad.doubleclick.net.18775.9086.302br.net',
+'ad.doubleclick.net.18776.9086.302br.net',
+'ad.doubleclick.net.18777.9086.302br.net',
+'ad.doubleclick.net.18778.9086.302br.net',
+'ad.doubleclick.net.18779.9086.302br.net',
+'ad.doubleclick.net.18781.9086.302br.net',
+'ad.doubleclick.net.18782.9086.302br.net',
+'ad.doubleclick.net.18783.9086.302br.net',
+'ad.doubleclick.net.18784.9086.302br.net',
+'ad.doubleclick.net.18785.9086.302br.net',
+'ad.doubleclick.net.18790.9086.302br.net',
+'ad.doubleclick.net.18791.9086.302br.net',
+'ad.doubleclick.net.18796.9087.302br.net',
+'ad.doubleclick.net.18797.9087.302br.net',
+'ad.doubleclick.net.18799.9087.302br.net',
+'ad.doubleclick.net.188.6100.302br.net',
+'ad.doubleclick.net.18800.9087.302br.net',
+'ad.doubleclick.net.18802.9087.302br.net',
+'ad.doubleclick.net.18803.9087.302br.net',
+'ad.doubleclick.net.19076.9076.302br.net',
+'ad.doubleclick.net.19079.9076.302br.net',
+'ad.doubleclick.net.19081.9076.302br.net',
+'ad.doubleclick.net.19085.9076.302br.net',
+'ad.doubleclick.net.19102.9081.302br.net',
+'ad.doubleclick.net.19106.9081.302br.net',
+'ad.doubleclick.net.19109.9081.302br.net',
+'ad.doubleclick.net.19112.9082.302br.net',
+'ad.doubleclick.net.19114.9082.302br.net',
+'ad.doubleclick.net.19115.9082.302br.net',
+'ad.doubleclick.net.19117.9082.302br.net',
+'ad.doubleclick.net.19118.9082.302br.net',
+'ad.doubleclick.net.19133.9083.302br.net',
+'ad.doubleclick.net.19150.9083.302br.net',
+'ad.doubleclick.net.19157.9085.302br.net',
+'ad.doubleclick.net.19160.9085.302br.net',
+'ad.doubleclick.net.19163.9085.302br.net',
+'ad.doubleclick.net.19166.9085.302br.net',
+'ad.doubleclick.net.19168.9086.302br.net',
+'ad.doubleclick.net.19169.9086.302br.net',
+'ad.doubleclick.net.19174.9086.302br.net',
+'ad.doubleclick.net.19175.9086.302br.net',
+'ad.doubleclick.net.19177.9086.302br.net',
+'ad.doubleclick.net.19178.9086.302br.net',
+'ad.doubleclick.net.19179.9115.302br.net',
+'ad.doubleclick.net.19182.9115.302br.net',
+'ad.doubleclick.net.19185.9115.302br.net',
+'ad.doubleclick.net.19188.9115.302br.net',
+'ad.doubleclick.net.19191.9115.302br.net',
+'ad.doubleclick.net.19194.9115.302br.net',
+'ad.doubleclick.net.19207.9116.302br.net',
+'ad.doubleclick.net.19390.9118.302br.net',
+'ad.doubleclick.net.19392.9118.302br.net',
+'ad.doubleclick.net.19394.9118.302br.net',
+'ad.doubleclick.net.19396.9118.302br.net',
+'ad.doubleclick.net.19398.9118.302br.net',
+'ad.doubleclick.net.19400.9118.302br.net',
+'ad.doubleclick.net.19402.9118.302br.net',
+'ad.doubleclick.net.19404.9118.302br.net',
+'ad.doubleclick.net.19406.9118.302br.net',
+'ad.doubleclick.net.19408.9118.302br.net',
+'ad.doubleclick.net.19410.9118.302br.net',
+'ad.doubleclick.net.19412.9118.302br.net',
+'ad.doubleclick.net.19414.9118.302br.net',
+'ad.doubleclick.net.19416.9118.302br.net',
+'ad.doubleclick.net.19418.9118.302br.net',
+'ad.doubleclick.net.19420.9118.302br.net',
+'ad.doubleclick.net.19422.9118.302br.net',
+'ad.doubleclick.net.19424.9118.302br.net',
+'ad.doubleclick.net.19426.9118.302br.net',
+'ad.doubleclick.net.19428.9118.302br.net',
+'ad.doubleclick.net.19430.9118.302br.net',
+'ad.doubleclick.net.21261.9124.302br.net',
+'ad.doubleclick.net.21262.9124.302br.net',
+'ad.doubleclick.net.21268.9112.302br.net',
+'ad.doubleclick.net.21271.9112.302br.net',
+'ad.doubleclick.net.21274.9112.302br.net',
+'ad.doubleclick.net.21296.9117.302br.net',
+'ad.doubleclick.net.21371.9075.302br.net',
+'ad.doubleclick.net.21373.9075.302br.net',
+'ad.doubleclick.net.21376.9075.302br.net',
+'ad.doubleclick.net.21379.9075.302br.net',
+'ad.doubleclick.net.21380.9075.302br.net',
+'ad.doubleclick.net.21382.9075.302br.net',
+'ad.doubleclick.net.21383.9075.302br.net',
+'ad.doubleclick.net.21385.9075.302br.net',
+'ad.doubleclick.net.21388.9075.302br.net',
+'ad.doubleclick.net.21391.9075.302br.net',
+'ad.doubleclick.net.21392.9075.302br.net',
+'ad.doubleclick.net.21394.9075.302br.net',
+'ad.doubleclick.net.21398.9075.302br.net',
+'ad.doubleclick.net.21400.9075.302br.net',
+'ad.doubleclick.net.21401.9075.302br.net',
+'ad.doubleclick.net.21403.9075.302br.net',
+'ad.doubleclick.net.21406.9075.302br.net',
+'ad.doubleclick.net.21409.9075.302br.net',
+'ad.doubleclick.net.21410.9075.302br.net',
+'ad.doubleclick.net.21412.9075.302br.net',
+'ad.doubleclick.net.21413.9075.302br.net',
+'ad.doubleclick.net.21415.9075.302br.net',
+'ad.doubleclick.net.21418.9075.302br.net',
+'ad.doubleclick.net.21419.9075.302br.net',
+'ad.doubleclick.net.21421.9075.302br.net',
+'ad.doubleclick.net.21427.9075.302br.net',
+'ad.doubleclick.net.21430.9075.302br.net',
+'ad.doubleclick.net.21433.9075.302br.net',
+'ad.doubleclick.net.21436.9075.302br.net',
+'ad.doubleclick.net.21439.9075.302br.net',
+'ad.doubleclick.net.21440.9075.302br.net',
+'ad.doubleclick.net.21442.9075.302br.net',
+'ad.doubleclick.net.21445.9075.302br.net',
+'ad.doubleclick.net.21448.9075.302br.net',
+'ad.doubleclick.net.21451.9075.302br.net',
+'ad.doubleclick.net.21452.9075.302br.net',
+'ad.doubleclick.net.21454.9075.302br.net',
+'ad.doubleclick.net.21455.9075.302br.net',
+'ad.doubleclick.net.21457.9075.302br.net',
+'ad.doubleclick.net.21458.9075.302br.net',
+'ad.doubleclick.net.21460.9075.302br.net',
+'ad.doubleclick.net.21463.9075.302br.net',
+'ad.doubleclick.net.21464.9075.302br.net',
+'ad.doubleclick.net.21466.9075.302br.net',
+'ad.doubleclick.net.21467.9075.302br.net',
+'ad.doubleclick.net.21469.9075.302br.net',
+'ad.doubleclick.net.21470.9075.302br.net',
+'ad.doubleclick.net.21472.9075.302br.net',
+'ad.doubleclick.net.21473.9075.302br.net',
+'ad.doubleclick.net.21475.9075.302br.net',
+'ad.doubleclick.net.21476.9075.302br.net',
+'ad.doubleclick.net.21478.9075.302br.net',
+'ad.doubleclick.net.21479.9075.302br.net',
+'ad.doubleclick.net.21481.9075.302br.net',
+'ad.doubleclick.net.21482.9075.302br.net',
+'ad.doubleclick.net.21484.9075.302br.net',
+'ad.doubleclick.net.21485.9075.302br.net',
+'ad.doubleclick.net.21487.9075.302br.net',
+'ad.doubleclick.net.21491.9075.302br.net',
+'ad.doubleclick.net.21493.9075.302br.net',
+'ad.doubleclick.net.21494.9075.302br.net',
+'ad.doubleclick.net.21496.9075.302br.net',
+'ad.doubleclick.net.21497.9075.302br.net',
+'ad.doubleclick.net.21499.9075.302br.net',
+'ad.doubleclick.net.21500.9075.302br.net',
+'ad.doubleclick.net.21502.9075.302br.net',
+'ad.doubleclick.net.21503.9075.302br.net',
+'ad.doubleclick.net.21505.9075.302br.net',
+'ad.doubleclick.net.21506.9075.302br.net',
+'ad.doubleclick.net.21508.9075.302br.net',
+'ad.doubleclick.net.21509.9075.302br.net',
+'ad.doubleclick.net.21511.9075.302br.net',
+'ad.doubleclick.net.21512.9075.302br.net',
+'ad.doubleclick.net.21514.9075.302br.net',
+'ad.doubleclick.net.21515.9075.302br.net',
+'ad.doubleclick.net.21517.9075.302br.net',
+'ad.doubleclick.net.21518.9075.302br.net',
+'ad.doubleclick.net.21520.9075.302br.net',
+'ad.doubleclick.net.21521.9075.302br.net',
+'ad.doubleclick.net.21523.9075.302br.net',
+'ad.doubleclick.net.21524.9075.302br.net',
+'ad.doubleclick.net.21526.9075.302br.net',
+'ad.doubleclick.net.21527.9075.302br.net',
+'ad.doubleclick.net.21529.9075.302br.net',
+'ad.doubleclick.net.21530.9075.302br.net',
+'ad.doubleclick.net.21532.9075.302br.net',
+'ad.doubleclick.net.21533.9075.302br.net',
+'ad.doubleclick.net.21535.9075.302br.net',
+'ad.doubleclick.net.21536.9075.302br.net',
+'ad.doubleclick.net.21538.9075.302br.net',
+'ad.doubleclick.net.21539.9075.302br.net',
+'ad.doubleclick.net.21541.9075.302br.net',
+'ad.doubleclick.net.21542.9075.302br.net',
+'ad.doubleclick.net.21544.9075.302br.net',
+'ad.doubleclick.net.21545.9075.302br.net',
+'ad.doubleclick.net.21547.9075.302br.net',
+'ad.doubleclick.net.21548.9075.302br.net',
+'ad.doubleclick.net.21550.9075.302br.net',
+'ad.doubleclick.net.21551.9075.302br.net',
+'ad.doubleclick.net.21553.9075.302br.net',
+'ad.doubleclick.net.21554.9075.302br.net',
+'ad.doubleclick.net.21556.9075.302br.net',
+'ad.doubleclick.net.21557.9075.302br.net',
+'ad.doubleclick.net.21559.9075.302br.net',
+'ad.doubleclick.net.21562.9075.302br.net',
+'ad.doubleclick.net.21563.9075.302br.net',
+'ad.doubleclick.net.21565.9075.302br.net',
+'ad.doubleclick.net.21566.9075.302br.net',
+'ad.doubleclick.net.21568.9075.302br.net',
+'ad.doubleclick.net.21569.9075.302br.net',
+'ad.doubleclick.net.21571.9075.302br.net',
+'ad.doubleclick.net.21574.9075.302br.net',
+'ad.doubleclick.net.21575.9075.302br.net',
+'ad.doubleclick.net.21577.9075.302br.net',
+'ad.doubleclick.net.21580.9075.302br.net',
+'ad.doubleclick.net.21581.9075.302br.net',
+'ad.doubleclick.net.21583.9075.302br.net',
+'ad.doubleclick.net.21584.9075.302br.net',
+'ad.doubleclick.net.21586.9075.302br.net',
+'ad.doubleclick.net.21587.9075.302br.net',
+'ad.doubleclick.net.21589.9075.302br.net',
+'ad.doubleclick.net.21590.9075.302br.net',
+'ad.doubleclick.net.21592.9075.302br.net',
+'ad.doubleclick.net.21593.9075.302br.net',
+'ad.doubleclick.net.21595.9075.302br.net',
+'ad.doubleclick.net.21596.9075.302br.net',
+'ad.doubleclick.net.21598.9075.302br.net',
+'ad.doubleclick.net.21599.9075.302br.net',
+'ad.doubleclick.net.21601.9075.302br.net',
+'ad.doubleclick.net.21602.9075.302br.net',
+'ad.doubleclick.net.21604.9075.302br.net',
+'ad.doubleclick.net.21607.9075.302br.net',
+'ad.doubleclick.net.21608.9075.302br.net',
+'ad.doubleclick.net.21610.9075.302br.net',
+'ad.doubleclick.net.21611.9075.302br.net',
+'ad.doubleclick.net.21613.9075.302br.net',
+'ad.doubleclick.net.21614.9075.302br.net',
+'ad.doubleclick.net.21616.9075.302br.net',
+'ad.doubleclick.net.21617.9075.302br.net',
+'ad.doubleclick.net.21619.9075.302br.net',
+'ad.doubleclick.net.21620.9075.302br.net',
+'ad.doubleclick.net.21622.9075.302br.net',
+'ad.doubleclick.net.21623.9075.302br.net',
+'ad.doubleclick.net.21625.9075.302br.net',
+'ad.doubleclick.net.21626.9075.302br.net',
+'ad.doubleclick.net.21628.9075.302br.net',
+'ad.doubleclick.net.21629.9075.302br.net',
+'ad.doubleclick.net.21631.9075.302br.net',
+'ad.doubleclick.net.21632.9075.302br.net',
+'ad.doubleclick.net.21634.9075.302br.net',
+'ad.doubleclick.net.21635.9075.302br.net',
+'ad.doubleclick.net.21637.9075.302br.net',
+'ad.doubleclick.net.21638.9075.302br.net',
+'ad.doubleclick.net.21640.9075.302br.net',
+'ad.doubleclick.net.21641.9075.302br.net',
+'ad.doubleclick.net.21643.9075.302br.net',
+'ad.doubleclick.net.21646.9075.302br.net',
+'ad.doubleclick.net.21647.9075.302br.net',
+'ad.doubleclick.net.21649.9075.302br.net',
+'ad.doubleclick.net.21650.9075.302br.net',
+'ad.doubleclick.net.21652.9075.302br.net',
+'ad.doubleclick.net.21653.9075.302br.net',
+'ad.doubleclick.net.21655.9075.302br.net',
+'ad.doubleclick.net.21656.9075.302br.net',
+'ad.doubleclick.net.21658.9075.302br.net',
+'ad.doubleclick.net.21659.9075.302br.net',
+'ad.doubleclick.net.21661.9075.302br.net',
+'ad.doubleclick.net.21662.9075.302br.net',
+'ad.doubleclick.net.21664.9075.302br.net',
+'ad.doubleclick.net.21665.9075.302br.net',
+'ad.doubleclick.net.21667.9075.302br.net',
+'ad.doubleclick.net.21679.9075.302br.net',
+'ad.doubleclick.net.21682.9075.302br.net',
+'ad.doubleclick.net.21685.9075.302br.net',
+'ad.doubleclick.net.21688.9075.302br.net',
+'ad.doubleclick.net.21689.9075.302br.net',
+'ad.doubleclick.net.21691.9075.302br.net',
+'ad.doubleclick.net.21694.9075.302br.net',
+'ad.doubleclick.net.21697.9075.302br.net',
+'ad.doubleclick.net.21700.9075.302br.net',
+'ad.doubleclick.net.21703.9075.302br.net',
+'ad.doubleclick.net.21706.9075.302br.net',
+'ad.doubleclick.net.21707.9075.302br.net',
+'ad.doubleclick.net.21709.9075.302br.net',
+'ad.doubleclick.net.21712.9075.302br.net',
+'ad.doubleclick.net.21715.9075.302br.net',
+'ad.doubleclick.net.21718.9075.302br.net',
+'ad.doubleclick.net.21721.9075.302br.net',
+'ad.doubleclick.net.21724.9075.302br.net',
+'ad.doubleclick.net.21725.9075.302br.net',
+'ad.doubleclick.net.21727.9075.302br.net',
+'ad.doubleclick.net.21730.9075.302br.net',
+'ad.doubleclick.net.21733.9075.302br.net',
+'ad.doubleclick.net.21734.9075.302br.net',
+'ad.doubleclick.net.21736.9075.302br.net',
+'ad.doubleclick.net.21739.9075.302br.net',
+'ad.doubleclick.net.21740.9075.302br.net',
+'ad.doubleclick.net.21742.9075.302br.net',
+'ad.doubleclick.net.21743.9075.302br.net',
+'ad.doubleclick.net.21745.9075.302br.net',
+'ad.doubleclick.net.21746.9075.302br.net',
+'ad.doubleclick.net.21748.9075.302br.net',
+'ad.doubleclick.net.21749.9075.302br.net',
+'ad.doubleclick.net.21751.9075.302br.net',
+'ad.doubleclick.net.21752.9075.302br.net',
+'ad.doubleclick.net.21754.9075.302br.net',
+'ad.doubleclick.net.21755.9075.302br.net',
+'ad.doubleclick.net.21757.9075.302br.net',
+'ad.doubleclick.net.21760.9075.302br.net',
+'ad.doubleclick.net.21763.9075.302br.net',
+'ad.doubleclick.net.21766.9075.302br.net',
+'ad.doubleclick.net.21769.9075.302br.net',
+'ad.doubleclick.net.21772.9075.302br.net',
+'ad.doubleclick.net.21775.9075.302br.net',
+'ad.doubleclick.net.21776.9075.302br.net',
+'ad.doubleclick.net.21778.9075.302br.net',
+'ad.doubleclick.net.21779.9075.302br.net',
+'ad.doubleclick.net.21781.9075.302br.net',
+'ad.doubleclick.net.21782.9075.302br.net',
+'ad.doubleclick.net.21784.9075.302br.net',
+'ad.doubleclick.net.21785.9075.302br.net',
+'ad.doubleclick.net.21787.9075.302br.net',
+'ad.doubleclick.net.21788.9075.302br.net',
+'ad.doubleclick.net.21790.9075.302br.net',
+'ad.doubleclick.net.21793.9075.302br.net',
+'ad.doubleclick.net.21794.9075.302br.net',
+'ad.doubleclick.net.21796.9075.302br.net',
+'ad.doubleclick.net.21797.9075.302br.net',
+'ad.doubleclick.net.21799.9075.302br.net',
+'ad.doubleclick.net.21802.9075.302br.net',
+'ad.doubleclick.net.21803.9075.302br.net',
+'ad.doubleclick.net.21805.9075.302br.net',
+'ad.doubleclick.net.21806.9075.302br.net',
+'ad.doubleclick.net.21808.9075.302br.net',
+'ad.doubleclick.net.21809.9075.302br.net',
+'ad.doubleclick.net.21811.9075.302br.net',
+'ad.doubleclick.net.21812.9075.302br.net',
+'ad.doubleclick.net.21814.9075.302br.net',
+'ad.doubleclick.net.21817.9075.302br.net',
+'ad.doubleclick.net.21818.9075.302br.net',
+'ad.doubleclick.net.21820.9075.302br.net',
+'ad.doubleclick.net.21822.9126.302br.net',
+'ad.doubleclick.net.21823.9126.302br.net',
+'ad.doubleclick.net.21825.9126.302br.net',
+'ad.doubleclick.net.21826.9126.302br.net',
+'ad.doubleclick.net.21828.9126.302br.net',
+'ad.doubleclick.net.21829.9126.302br.net',
+'ad.doubleclick.net.21831.9126.302br.net',
+'ad.doubleclick.net.21832.9126.302br.net',
+'ad.doubleclick.net.21834.9126.302br.net',
+'ad.doubleclick.net.21835.9126.302br.net',
+'ad.doubleclick.net.21838.9126.302br.net',
+'ad.doubleclick.net.21840.9126.302br.net',
+'ad.doubleclick.net.21843.9126.302br.net',
+'ad.doubleclick.net.21844.9126.302br.net',
+'ad.doubleclick.net.21847.9117.302br.net',
+'ad.doubleclick.net.21848.9117.302br.net',
+'ad.doubleclick.net.21849.9117.302br.net',
+'ad.doubleclick.net.21850.9117.302br.net',
+'ad.doubleclick.net.21853.9117.302br.net',
+'ad.doubleclick.net.21922.9075.302br.net',
+'ad.doubleclick.net.21923.9127.302br.net',
+'ad.doubleclick.net.21924.9127.302br.net',
+'ad.doubleclick.net.21925.9127.302br.net',
+'ad.doubleclick.net.21926.9127.302br.net',
+'ad.doubleclick.net.21927.9127.302br.net',
+'ad.doubleclick.net.21928.9127.302br.net',
+'ad.doubleclick.net.2198.9022.302br.net',
+'ad.doubleclick.net.2200.9022.302br.net',
+'ad.doubleclick.net.22009.9068.302br.net',
+'ad.doubleclick.net.2201.9022.302br.net',
+'ad.doubleclick.net.2204.9022.302br.net',
+'ad.doubleclick.net.22055.9047.302br.net',
+'ad.doubleclick.net.22061.9047.302br.net',
+'ad.doubleclick.net.22070.9047.302br.net',
+'ad.doubleclick.net.22073.9047.302br.net',
+'ad.doubleclick.net.224.6100.302br.net',
+'ad.doubleclick.net.22572.9136.302br.net',
+'ad.doubleclick.net.22573.9136.302br.net',
+'ad.doubleclick.net.22575.9136.302br.net',
+'ad.doubleclick.net.22576.9136.302br.net',
+'ad.doubleclick.net.22578.9136.302br.net',
+'ad.doubleclick.net.22581.9136.302br.net',
+'ad.doubleclick.net.22584.9136.302br.net',
+'ad.doubleclick.net.22585.9136.302br.net',
+'ad.doubleclick.net.22587.9136.302br.net',
+'ad.doubleclick.net.22588.9136.302br.net',
+'ad.doubleclick.net.22590.9136.302br.net',
+'ad.doubleclick.net.22591.9136.302br.net',
+'ad.doubleclick.net.22593.9136.302br.net',
+'ad.doubleclick.net.22596.9136.302br.net',
+'ad.doubleclick.net.22597.9136.302br.net',
+'ad.doubleclick.net.22599.9136.302br.net',
+'ad.doubleclick.net.22600.9136.302br.net',
+'ad.doubleclick.net.22641.9137.302br.net',
+'ad.doubleclick.net.22642.9137.302br.net',
+'ad.doubleclick.net.22643.9137.302br.net',
+'ad.doubleclick.net.22644.9137.302br.net',
+'ad.doubleclick.net.22645.9137.302br.net',
+'ad.doubleclick.net.22646.9137.302br.net',
+'ad.doubleclick.net.22647.9137.302br.net',
+'ad.doubleclick.net.22648.9137.302br.net',
+'ad.doubleclick.net.22657.9068.302br.net',
+'ad.doubleclick.net.22660.9068.302br.net',
+'ad.doubleclick.net.22672.9068.302br.net',
+'ad.doubleclick.net.22678.9068.302br.net',
+'ad.doubleclick.net.22686.9068.302br.net',
+'ad.doubleclick.net.22687.9068.302br.net',
+'ad.doubleclick.net.22701.9138.302br.net',
+'ad.doubleclick.net.22702.9138.302br.net',
+'ad.doubleclick.net.22704.9138.302br.net',
+'ad.doubleclick.net.22705.9138.302br.net',
+'ad.doubleclick.net.22776.9142.302br.net',
+'ad.doubleclick.net.22777.9142.302br.net',
+'ad.doubleclick.net.22779.9142.302br.net',
+'ad.doubleclick.net.22780.9142.302br.net',
+'ad.doubleclick.net.22782.9142.302br.net',
+'ad.doubleclick.net.22785.9142.302br.net',
+'ad.doubleclick.net.22946.9147.302br.net',
+'ad.doubleclick.net.22948.9147.302br.net',
+'ad.doubleclick.net.22950.9147.302br.net',
+'ad.doubleclick.net.22952.9147.302br.net',
+'ad.doubleclick.net.22955.9149.302br.net',
+'ad.doubleclick.net.22958.9149.302br.net',
+'ad.doubleclick.net.22961.9149.302br.net',
+'ad.doubleclick.net.23027.9115.302br.net',
+'ad.doubleclick.net.23030.9115.302br.net',
+'ad.doubleclick.net.23033.9115.302br.net',
+'ad.doubleclick.net.23036.9140.302br.net',
+'ad.doubleclick.net.23038.9140.302br.net',
+'ad.doubleclick.net.23040.9140.302br.net',
+'ad.doubleclick.net.23043.9154.302br.net',
+'ad.doubleclick.net.23046.9154.302br.net',
+'ad.doubleclick.net.23049.9154.302br.net',
+'ad.doubleclick.net.23055.9156.302br.net',
+'ad.doubleclick.net.23058.9156.302br.net',
+'ad.doubleclick.net.23061.9156.302br.net',
+'ad.doubleclick.net.23064.9156.302br.net',
+'ad.doubleclick.net.23067.9156.302br.net',
+'ad.doubleclick.net.23070.9156.302br.net',
+'ad.doubleclick.net.23116.9160.302br.net',
+'ad.doubleclick.net.23119.9160.302br.net',
+'ad.doubleclick.net.23122.9160.302br.net',
+'ad.doubleclick.net.23290.9075.302br.net',
+'ad.doubleclick.net.23291.9075.302br.net',
+'ad.doubleclick.net.23293.9075.302br.net',
+'ad.doubleclick.net.23294.9075.302br.net',
+'ad.doubleclick.net.23298.9075.302br.net',
+'ad.doubleclick.net.23299.9075.302br.net',
+'ad.doubleclick.net.23300.9075.302br.net',
+'ad.doubleclick.net.23302.9075.302br.net',
+'ad.doubleclick.net.23303.9075.302br.net',
+'ad.doubleclick.net.23305.9075.302br.net',
+'ad.doubleclick.net.23308.9075.302br.net',
+'ad.doubleclick.net.23309.9075.302br.net',
+'ad.doubleclick.net.23310.9075.302br.net',
+'ad.doubleclick.net.23311.9075.302br.net',
+'ad.doubleclick.net.23312.9075.302br.net',
+'ad.doubleclick.net.23314.9075.302br.net',
+'ad.doubleclick.net.23315.9075.302br.net',
+'ad.doubleclick.net.23320.9075.302br.net',
+'ad.doubleclick.net.23322.9075.302br.net',
+'ad.doubleclick.net.23323.9075.302br.net',
+'ad.doubleclick.net.23324.9075.302br.net',
+'ad.doubleclick.net.23325.9075.302br.net',
+'ad.doubleclick.net.23326.9075.302br.net',
+'ad.doubleclick.net.23327.9075.302br.net',
+'ad.doubleclick.net.23329.9075.302br.net',
+'ad.doubleclick.net.23332.9075.302br.net',
+'ad.doubleclick.net.23333.9075.302br.net',
+'ad.doubleclick.net.23335.9075.302br.net',
+'ad.doubleclick.net.23336.9075.302br.net',
+'ad.doubleclick.net.23338.9075.302br.net',
+'ad.doubleclick.net.23341.9075.302br.net',
+'ad.doubleclick.net.23342.9075.302br.net',
+'ad.doubleclick.net.23343.9075.302br.net',
+'ad.doubleclick.net.23344.9075.302br.net',
+'ad.doubleclick.net.23345.9075.302br.net',
+'ad.doubleclick.net.23347.9075.302br.net',
+'ad.doubleclick.net.23350.9075.302br.net',
+'ad.doubleclick.net.23353.9075.302br.net',
+'ad.doubleclick.net.23354.9075.302br.net',
+'ad.doubleclick.net.23435.9160.302br.net',
+'ad.doubleclick.net.23438.9160.302br.net',
+'ad.doubleclick.net.23441.9160.302br.net',
+'ad.doubleclick.net.23444.9159.302br.net',
+'ad.doubleclick.net.23447.9159.302br.net',
+'ad.doubleclick.net.23452.9075.302br.net',
+'ad.doubleclick.net.23454.9075.302br.net',
+'ad.doubleclick.net.23457.9075.302br.net',
+'ad.doubleclick.net.23478.9075.302br.net',
+'ad.doubleclick.net.23481.9075.302br.net',
+'ad.doubleclick.net.23487.9075.302br.net',
+'ad.doubleclick.net.23491.9075.302br.net',
+'ad.doubleclick.net.23493.9075.302br.net',
+'ad.doubleclick.net.23494.9075.302br.net',
+'ad.doubleclick.net.23496.9075.302br.net',
+'ad.doubleclick.net.23502.9075.302br.net',
+'ad.doubleclick.net.23505.9075.302br.net',
+'ad.doubleclick.net.23506.9075.302br.net',
+'ad.doubleclick.net.23508.9075.302br.net',
+'ad.doubleclick.net.23509.9075.302br.net',
+'ad.doubleclick.net.23511.9075.302br.net',
+'ad.doubleclick.net.23517.9075.302br.net',
+'ad.doubleclick.net.23518.9075.302br.net',
+'ad.doubleclick.net.23520.9075.302br.net',
+'ad.doubleclick.net.23523.9075.302br.net',
+'ad.doubleclick.net.23526.9075.302br.net',
+'ad.doubleclick.net.23527.9075.302br.net',
+'ad.doubleclick.net.23529.9075.302br.net',
+'ad.doubleclick.net.23530.9075.302br.net',
+'ad.doubleclick.net.23532.9075.302br.net',
+'ad.doubleclick.net.23535.9075.302br.net',
+'ad.doubleclick.net.23545.9075.302br.net',
+'ad.doubleclick.net.23547.9075.302br.net',
+'ad.doubleclick.net.23550.9075.302br.net',
+'ad.doubleclick.net.23557.9075.302br.net',
+'ad.doubleclick.net.23559.9075.302br.net',
+'ad.doubleclick.net.23563.9075.302br.net',
+'ad.doubleclick.net.23565.9075.302br.net',
+'ad.doubleclick.net.23569.9075.302br.net',
+'ad.doubleclick.net.23569.9075.302br.net',
+'ad.doubleclick.net.23571.9075.302br.net',
+'ad.doubleclick.net.23572.9075.302br.net',
+'ad.doubleclick.net.23574.9075.302br.net',
+'ad.doubleclick.net.23575.9075.302br.net',
+'ad.doubleclick.net.23577.9075.302br.net',
+'ad.doubleclick.net.23584.9075.302br.net',
+'ad.doubleclick.net.23586.9075.302br.net',
+'ad.doubleclick.net.23587.9075.302br.net',
+'ad.doubleclick.net.23589.9075.302br.net',
+'ad.doubleclick.net.23592.9075.302br.net',
+'ad.doubleclick.net.23621.9164.302br.net',
+'ad.doubleclick.net.23624.9164.302br.net',
+'ad.doubleclick.net.23627.9164.302br.net',
+'ad.doubleclick.net.23630.9164.302br.net',
+'ad.doubleclick.net.23639.9164.302br.net',
+'ad.doubleclick.net.23642.9164.302br.net',
+'ad.doubleclick.net.23645.9164.302br.net',
+'ad.doubleclick.net.23648.9164.302br.net',
+'ad.doubleclick.net.23651.9164.302br.net',
+'ad.doubleclick.net.23654.9164.302br.net',
+'ad.doubleclick.net.23657.9164.302br.net',
+'ad.doubleclick.net.23660.9164.302br.net',
+'ad.doubleclick.net.23669.9164.302br.net',
+'ad.doubleclick.net.23670.9164.302br.net',
+'ad.doubleclick.net.23672.9164.302br.net',
+'ad.doubleclick.net.23673.9164.302br.net',
+'ad.doubleclick.net.23675.9164.302br.net',
+'ad.doubleclick.net.23678.9164.302br.net',
+'ad.doubleclick.net.23681.9164.302br.net',
+'ad.doubleclick.net.23687.9164.302br.net',
+'ad.doubleclick.net.23690.9164.302br.net',
+'ad.doubleclick.net.23693.9164.302br.net',
+'ad.doubleclick.net.23694.9164.302br.net',
+'ad.doubleclick.net.23695.9164.302br.net',
+'ad.doubleclick.net.23696.9164.302br.net',
+'ad.doubleclick.net.23697.9164.302br.net',
+'ad.doubleclick.net.23699.9164.302br.net',
+'ad.doubleclick.net.23700.9164.302br.net',
+'ad.doubleclick.net.23702.9164.302br.net',
+'ad.doubleclick.net.23703.9164.302br.net',
+'ad.doubleclick.net.23705.9164.302br.net',
+'ad.doubleclick.net.23711.9164.302br.net',
+'ad.doubleclick.net.23714.9164.302br.net',
+'ad.doubleclick.net.23715.9164.302br.net',
+'ad.doubleclick.net.23728.9164.302br.net',
+'ad.doubleclick.net.23729.9164.302br.net',
+'ad.doubleclick.net.23730.9164.302br.net',
+'ad.doubleclick.net.23738.9164.302br.net',
+'ad.doubleclick.net.23739.9164.302br.net',
+'ad.doubleclick.net.23741.9164.302br.net',
+'ad.doubleclick.net.23742.9164.302br.net',
+'ad.doubleclick.net.23744.9164.302br.net',
+'ad.doubleclick.net.23745.9164.302br.net',
+'ad.doubleclick.net.23747.9164.302br.net',
+'ad.doubleclick.net.23748.9164.302br.net',
+'ad.doubleclick.net.23749.9164.302br.net',
+'ad.doubleclick.net.23750.9164.302br.net',
+'ad.doubleclick.net.23751.9164.302br.net',
+'ad.doubleclick.net.23922.9166.302br.net',
+'ad.doubleclick.net.23925.9166.302br.net',
+'ad.doubleclick.net.23928.9166.302br.net',
+'ad.doubleclick.net.23931.9166.302br.net',
+'ad.doubleclick.net.23934.9166.302br.net',
+'ad.doubleclick.net.23937.9166.302br.net',
+'ad.doubleclick.net.23940.9166.302br.net',
+'ad.doubleclick.net.23943.9166.302br.net',
+'ad.doubleclick.net.23946.9166.302br.net',
+'ad.doubleclick.net.23949.9166.302br.net',
+'ad.doubleclick.net.23952.9166.302br.net',
+'ad.doubleclick.net.23955.9166.302br.net',
+'ad.doubleclick.net.23958.9166.302br.net',
+'ad.doubleclick.net.23961.9166.302br.net',
+'ad.doubleclick.net.23964.9166.302br.net',
+'ad.doubleclick.net.23969.9166.302br.net',
+'ad.doubleclick.net.23972.9166.302br.net',
+'ad.doubleclick.net.23975.9166.302br.net',
+'ad.doubleclick.net.24012.9068.302br.net',
+'ad.doubleclick.net.24013.9068.302br.net',
+'ad.doubleclick.net.24015.9068.302br.net',
+'ad.doubleclick.net.24016.9068.302br.net',
+'ad.doubleclick.net.24021.9068.302br.net',
+'ad.doubleclick.net.24022.9068.302br.net',
+'ad.doubleclick.net.24039.9068.302br.net',
+'ad.doubleclick.net.24046.9068.302br.net',
+'ad.doubleclick.net.24051.9068.302br.net',
+'ad.doubleclick.net.24052.9068.302br.net',
+'ad.doubleclick.net.24069.9068.302br.net',
+'ad.doubleclick.net.24070.9068.302br.net',
+'ad.doubleclick.net.24071.9068.302br.net',
+'ad.doubleclick.net.24072.9068.302br.net',
+'ad.doubleclick.net.24073.9068.302br.net',
+'ad.doubleclick.net.24077.9068.302br.net',
+'ad.doubleclick.net.24080.9168.302br.net',
+'ad.doubleclick.net.24081.9168.302br.net',
+'ad.doubleclick.net.24083.9168.302br.net',
+'ad.doubleclick.net.24086.9168.302br.net',
+'ad.doubleclick.net.24092.9168.302br.net',
+'ad.doubleclick.net.24093.9168.302br.net',
+'ad.doubleclick.net.24095.9168.302br.net',
+'ad.doubleclick.net.24098.9168.302br.net',
+'ad.doubleclick.net.24099.9168.302br.net',
+'ad.doubleclick.net.24101.9168.302br.net',
+'ad.doubleclick.net.24102.9168.302br.net',
+'ad.doubleclick.net.24110.9168.302br.net',
+'ad.doubleclick.net.24111.9168.302br.net',
+'ad.doubleclick.net.24330.9115.302br.net',
+'ad.doubleclick.net.24331.9115.302br.net',
+'ad.doubleclick.net.24332.9115.302br.net',
+'ad.doubleclick.net.24333.9115.302br.net',
+'ad.doubleclick.net.24334.9115.302br.net',
+'ad.doubleclick.net.24335.9115.302br.net',
+'ad.doubleclick.net.24336.9115.302br.net',
+'ad.doubleclick.net.24337.9115.302br.net',
+'ad.doubleclick.net.24338.9115.302br.net',
+'ad.doubleclick.net.24339.9115.302br.net',
+'ad.doubleclick.net.24340.9115.302br.net',
+'ad.doubleclick.net.24341.9115.302br.net',
+'ad.doubleclick.net.24342.9115.302br.net',
+'ad.doubleclick.net.24343.9115.302br.net',
+'ad.doubleclick.net.24344.9115.302br.net',
+'ad.doubleclick.net.24345.9115.302br.net',
+'ad.doubleclick.net.24346.9115.302br.net',
+'ad.doubleclick.net.24347.9115.302br.net',
+'ad.doubleclick.net.24355.9175.302br.net',
+'ad.doubleclick.net.24358.9175.302br.net',
+'ad.doubleclick.net.24361.9175.302br.net',
+'ad.doubleclick.net.24364.9175.302br.net',
+'ad.doubleclick.net.24367.9175.302br.net',
+'ad.doubleclick.net.24370.9175.302br.net',
+'ad.doubleclick.net.24483.9178.302br.net',
+'ad.doubleclick.net.24484.9178.302br.net',
+'ad.doubleclick.net.24485.9178.302br.net',
+'ad.doubleclick.net.24486.9178.302br.net',
+'ad.doubleclick.net.24487.9178.302br.net',
+'ad.doubleclick.net.24489.9178.302br.net',
+'ad.doubleclick.net.24490.9178.302br.net',
+'ad.doubleclick.net.24762.9176.302br.net',
+'ad.doubleclick.net.24763.9176.302br.net',
+'ad.doubleclick.net.24765.9176.302br.net',
+'ad.doubleclick.net.24766.9176.302br.net',
+'ad.doubleclick.net.24768.9176.302br.net',
+'ad.doubleclick.net.24771.9176.302br.net',
+'ad.doubleclick.net.24772.9176.302br.net',
+'ad.doubleclick.net.24774.9176.302br.net',
+'ad.doubleclick.net.24775.9176.302br.net',
+'ad.doubleclick.net.24777.9176.302br.net',
+'ad.doubleclick.net.24778.9176.302br.net',
+'ad.doubleclick.net.24780.9176.302br.net',
+'ad.doubleclick.net.24781.9176.302br.net',
+'ad.doubleclick.net.24783.9176.302br.net',
+'ad.doubleclick.net.24786.9176.302br.net',
+'ad.doubleclick.net.24787.9176.302br.net',
+'ad.doubleclick.net.24789.9176.302br.net',
+'ad.doubleclick.net.24792.9176.302br.net',
+'ad.doubleclick.net.24795.9176.302br.net',
+'ad.doubleclick.net.24796.9176.302br.net',
+'ad.doubleclick.net.24798.9176.302br.net',
+'ad.doubleclick.net.24801.9176.302br.net',
+'ad.doubleclick.net.24804.9176.302br.net',
+'ad.doubleclick.net.24805.9176.302br.net',
+'ad.doubleclick.net.24807.9176.302br.net',
+'ad.doubleclick.net.24808.9176.302br.net',
+'ad.doubleclick.net.24810.9176.302br.net',
+'ad.doubleclick.net.24811.9176.302br.net',
+'ad.doubleclick.net.24813.9176.302br.net',
+'ad.doubleclick.net.24814.9176.302br.net',
+'ad.doubleclick.net.24816.9176.302br.net',
+'ad.doubleclick.net.24817.9176.302br.net',
+'ad.doubleclick.net.24819.9176.302br.net',
+'ad.doubleclick.net.24820.9176.302br.net',
+'ad.doubleclick.net.24919.9185.302br.net',
+'ad.doubleclick.net.24931.9185.302br.net',
+'ad.doubleclick.net.24934.9185.302br.net',
+'ad.doubleclick.net.24937.9185.302br.net',
+'ad.doubleclick.net.24940.9185.302br.net',
+'ad.doubleclick.net.24943.9185.302br.net',
+'ad.doubleclick.net.24946.9185.302br.net',
+'ad.doubleclick.net.24949.9185.302br.net',
+'ad.doubleclick.net.24952.9185.302br.net',
+'ad.doubleclick.net.24955.9185.302br.net',
+'ad.doubleclick.net.24958.9185.302br.net',
+'ad.doubleclick.net.24961.9185.302br.net',
+'ad.doubleclick.net.24964.9185.302br.net',
+'ad.doubleclick.net.24965.9185.302br.net',
+'ad.doubleclick.net.24966.9185.302br.net',
+'ad.doubleclick.net.24967.9185.302br.net',
+'ad.doubleclick.net.24968.9185.302br.net',
+'ad.doubleclick.net.24969.9185.302br.net',
+'ad.doubleclick.net.24970.9185.302br.net',
+'ad.doubleclick.net.24971.9185.302br.net',
+'ad.doubleclick.net.24973.9185.302br.net',
+'ad.doubleclick.net.24975.9185.302br.net',
+'ad.doubleclick.net.24976.9185.302br.net',
+'ad.doubleclick.net.24979.9185.302br.net',
+'ad.doubleclick.net.24985.9185.302br.net',
+'ad.doubleclick.net.24988.9185.302br.net',
+'ad.doubleclick.net.24991.9185.302br.net',
+'ad.doubleclick.net.24994.9185.302br.net',
+'ad.doubleclick.net.24997.9185.302br.net',
+'ad.doubleclick.net.25000.9185.302br.net',
+'ad.doubleclick.net.25003.9185.302br.net',
+'ad.doubleclick.net.25006.9185.302br.net',
+'ad.doubleclick.net.25009.9185.302br.net',
+'ad.doubleclick.net.25012.9185.302br.net',
+'ad.doubleclick.net.25015.9185.302br.net',
+'ad.doubleclick.net.25021.9185.302br.net',
+'ad.doubleclick.net.25024.9185.302br.net',
+'ad.doubleclick.net.25027.9185.302br.net',
+'ad.doubleclick.net.25030.9185.302br.net',
+'ad.doubleclick.net.25033.9185.302br.net',
+'ad.doubleclick.net.25036.9185.302br.net',
+'ad.doubleclick.net.25039.9185.302br.net',
+'ad.doubleclick.net.25042.9185.302br.net',
+'ad.doubleclick.net.25045.9185.302br.net',
+'ad.doubleclick.net.25048.9185.302br.net',
+'ad.doubleclick.net.25051.9185.302br.net',
+'ad.doubleclick.net.25054.9185.302br.net',
+'ad.doubleclick.net.25057.9185.302br.net',
+'ad.doubleclick.net.25060.9185.302br.net',
+'ad.doubleclick.net.25063.9185.302br.net',
+'ad.doubleclick.net.25066.9185.302br.net',
+'ad.doubleclick.net.25069.9185.302br.net',
+'ad.doubleclick.net.25072.9185.302br.net',
+'ad.doubleclick.net.25075.9185.302br.net',
+'ad.doubleclick.net.25395.9185.302br.net',
+'ad.doubleclick.net.25398.9185.302br.net',
+'ad.doubleclick.net.25401.9185.302br.net',
+'ad.doubleclick.net.25404.9185.302br.net',
+'ad.doubleclick.net.25407.9185.302br.net',
+'ad.doubleclick.net.25408.9185.302br.net',
+'ad.doubleclick.net.25409.9185.302br.net',
+'ad.doubleclick.net.25410.9185.302br.net',
+'ad.doubleclick.net.25411.9185.302br.net',
+'ad.doubleclick.net.25412.9185.302br.net',
+'ad.doubleclick.net.25413.9185.302br.net',
+'ad.doubleclick.net.25414.9185.302br.net',
+'ad.doubleclick.net.25415.9185.302br.net',
+'ad.doubleclick.net.25419.9185.302br.net',
+'ad.doubleclick.net.25420.9185.302br.net',
+'ad.doubleclick.net.25421.9185.302br.net',
+'ad.doubleclick.net.25425.9185.302br.net',
+'ad.doubleclick.net.25426.9185.302br.net',
+'ad.doubleclick.net.25427.9185.302br.net',
+'ad.doubleclick.net.25428.9185.302br.net',
+'ad.doubleclick.net.25429.9185.302br.net',
+'ad.doubleclick.net.25430.9185.302br.net',
+'ad.doubleclick.net.25431.9185.302br.net',
+'ad.doubleclick.net.25432.9185.302br.net',
+'ad.doubleclick.net.25433.9185.302br.net',
+'ad.doubleclick.net.25434.9185.302br.net',
+'ad.doubleclick.net.25435.9185.302br.net',
+'ad.doubleclick.net.25436.9185.302br.net',
+'ad.doubleclick.net.25437.9185.302br.net',
+'ad.doubleclick.net.25438.9185.302br.net',
+'ad.doubleclick.net.25440.9185.302br.net',
+'ad.doubleclick.net.25443.9185.302br.net',
+'ad.doubleclick.net.25446.9185.302br.net',
+'ad.doubleclick.net.25448.9185.302br.net',
+'ad.doubleclick.net.25449.9185.302br.net',
+'ad.doubleclick.net.25469.9187.302br.net',
+'ad.doubleclick.net.25472.9187.302br.net',
+'ad.doubleclick.net.25475.9187.302br.net',
+'ad.doubleclick.net.25478.9187.302br.net',
+'ad.doubleclick.net.25481.9187.302br.net',
+'ad.doubleclick.net.25484.9187.302br.net',
+'ad.doubleclick.net.25497.9190.302br.net',
+'ad.doubleclick.net.25498.9190.302br.net',
+'ad.doubleclick.net.25503.9190.302br.net',
+'ad.doubleclick.net.25504.9190.302br.net',
+'ad.doubleclick.net.25506.9190.302br.net',
+'ad.doubleclick.net.25507.9190.302br.net',
+'ad.doubleclick.net.25509.9190.302br.net',
+'ad.doubleclick.net.25510.9190.302br.net',
+'ad.doubleclick.net.25512.9190.302br.net',
+'ad.doubleclick.net.25513.9190.302br.net',
+'ad.doubleclick.net.25515.9190.302br.net',
+'ad.doubleclick.net.25516.9190.302br.net',
+'ad.doubleclick.net.25523.9190.302br.net',
+'ad.doubleclick.net.25524.9190.302br.net',
+'ad.doubleclick.net.25525.9190.302br.net',
+'ad.doubleclick.net.25526.9190.302br.net',
+'ad.doubleclick.net.25527.9190.302br.net',
+'ad.doubleclick.net.25528.9190.302br.net',
+'ad.doubleclick.net.25530.9190.302br.net',
+'ad.doubleclick.net.25531.9190.302br.net',
+'ad.doubleclick.net.25532.9190.302br.net',
+'ad.doubleclick.net.25533.9190.302br.net',
+'ad.doubleclick.net.25534.9190.302br.net',
+'ad.doubleclick.net.25536.9190.302br.net',
+'ad.doubleclick.net.25537.9190.302br.net',
+'ad.doubleclick.net.25542.9190.302br.net',
+'ad.doubleclick.net.25543.9190.302br.net',
+'ad.doubleclick.net.25545.9190.302br.net',
+'ad.doubleclick.net.25546.9190.302br.net',
+'ad.doubleclick.net.25550.9190.302br.net',
+'ad.doubleclick.net.25551.9190.302br.net',
+'ad.doubleclick.net.25552.9190.302br.net',
+'ad.doubleclick.net.25556.9190.302br.net',
+'ad.doubleclick.net.25557.9190.302br.net',
+'ad.doubleclick.net.25558.9190.302br.net',
+'ad.doubleclick.net.25559.9190.302br.net',
+'ad.doubleclick.net.25560.9190.302br.net',
+'ad.doubleclick.net.25561.9190.302br.net',
+'ad.doubleclick.net.25563.9190.302br.net',
+'ad.doubleclick.net.25564.9190.302br.net',
+'ad.doubleclick.net.25566.9190.302br.net',
+'ad.doubleclick.net.25567.9190.302br.net',
+'ad.doubleclick.net.25569.9190.302br.net',
+'ad.doubleclick.net.25570.9190.302br.net',
+'ad.doubleclick.net.25573.9190.302br.net',
+'ad.doubleclick.net.25574.9190.302br.net',
+'ad.doubleclick.net.25581.9190.302br.net',
+'ad.doubleclick.net.25582.9190.302br.net',
+'ad.doubleclick.net.25584.9190.302br.net',
+'ad.doubleclick.net.25585.9190.302br.net',
+'ad.doubleclick.net.25643.9190.302br.net',
+'ad.doubleclick.net.25644.9190.302br.net',
+'ad.doubleclick.net.25645.9190.302br.net',
+'ad.doubleclick.net.25647.9190.302br.net',
+'ad.doubleclick.net.25648.9190.302br.net',
+'ad.doubleclick.net.25649.9190.302br.net',
+'ad.doubleclick.net.25650.9190.302br.net',
+'ad.doubleclick.net.25651.9190.302br.net',
+'ad.doubleclick.net.25652.9190.302br.net',
+'ad.doubleclick.net.25653.9190.302br.net',
+'ad.doubleclick.net.25654.9190.302br.net',
+'ad.doubleclick.net.25656.9190.302br.net',
+'ad.doubleclick.net.25657.9190.302br.net',
+'ad.doubleclick.net.25659.9190.302br.net',
+'ad.doubleclick.net.25660.9190.302br.net',
+'ad.doubleclick.net.25662.9190.302br.net',
+'ad.doubleclick.net.25663.9190.302br.net',
+'ad.doubleclick.net.25665.9190.302br.net',
+'ad.doubleclick.net.25666.9190.302br.net',
+'ad.doubleclick.net.25668.9190.302br.net',
+'ad.doubleclick.net.25669.9190.302br.net',
+'ad.doubleclick.net.25671.9190.302br.net',
+'ad.doubleclick.net.25672.9190.302br.net',
+'ad.doubleclick.net.25674.9190.302br.net',
+'ad.doubleclick.net.25675.9190.302br.net',
+'ad.doubleclick.net.25679.9190.302br.net',
+'ad.doubleclick.net.25680.9190.302br.net',
+'ad.doubleclick.net.25681.9190.302br.net',
+'ad.doubleclick.net.25686.9190.302br.net',
+'ad.doubleclick.net.25687.9190.302br.net',
+'ad.doubleclick.net.25689.9190.302br.net',
+'ad.doubleclick.net.25690.9190.302br.net',
+'ad.doubleclick.net.25692.9190.302br.net',
+'ad.doubleclick.net.25693.9190.302br.net',
+'ad.doubleclick.net.25695.9190.302br.net',
+'ad.doubleclick.net.25696.9190.302br.net',
+'ad.doubleclick.net.25698.9190.302br.net',
+'ad.doubleclick.net.25699.9190.302br.net',
+'ad.doubleclick.net.25701.9190.302br.net',
+'ad.doubleclick.net.25702.9190.302br.net',
+'ad.doubleclick.net.25704.9190.302br.net',
+'ad.doubleclick.net.25705.9190.302br.net',
+'ad.doubleclick.net.25707.9190.302br.net',
+'ad.doubleclick.net.25708.9190.302br.net',
+'ad.doubleclick.net.25731.9190.302br.net',
+'ad.doubleclick.net.25732.9190.302br.net',
+'ad.doubleclick.net.25734.9190.302br.net',
+'ad.doubleclick.net.25735.9190.302br.net',
+'ad.doubleclick.net.25737.9190.302br.net',
+'ad.doubleclick.net.25738.9190.302br.net',
+'ad.doubleclick.net.25740.9192.302br.net',
+'ad.doubleclick.net.25743.9192.302br.net',
+'ad.doubleclick.net.25746.9192.302br.net',
+'ad.doubleclick.net.25749.9192.302br.net',
+'ad.doubleclick.net.25752.9192.302br.net',
+'ad.doubleclick.net.25774.9075.302br.net',
+'ad.doubleclick.net.25780.9075.302br.net',
+'ad.doubleclick.net.25789.9075.302br.net',
+'ad.doubleclick.net.25819.9075.302br.net',
+'ad.doubleclick.net.25837.9075.302br.net',
+'ad.doubleclick.net.25844.9075.302br.net',
+'ad.doubleclick.net.25846.9075.302br.net',
+'ad.doubleclick.net.25849.9075.302br.net',
+'ad.doubleclick.net.25858.9075.302br.net',
+'ad.doubleclick.net.25861.9075.302br.net',
+'ad.doubleclick.net.25876.9075.302br.net',
+'ad.doubleclick.net.25951.9197.302br.net',
+'ad.doubleclick.net.25954.9197.302br.net',
+'ad.doubleclick.net.25957.9197.302br.net',
+'ad.doubleclick.net.25958.9197.302br.net',
+'ad.doubleclick.net.25960.9197.302br.net',
+'ad.doubleclick.net.25963.9197.302br.net',
+'ad.doubleclick.net.25964.9197.302br.net',
+'ad.doubleclick.net.25966.9197.302br.net',
+'ad.doubleclick.net.25969.9197.302br.net',
+'ad.doubleclick.net.25972.9197.302br.net',
+'ad.doubleclick.net.25975.9197.302br.net',
+'ad.doubleclick.net.25976.9197.302br.net',
+'ad.doubleclick.net.25978.9197.302br.net',
+'ad.doubleclick.net.25981.9197.302br.net',
+'ad.doubleclick.net.25984.9197.302br.net',
+'ad.doubleclick.net.25987.9197.302br.net',
+'ad.doubleclick.net.25988.9197.302br.net',
+'ad.doubleclick.net.25990.9197.302br.net',
+'ad.doubleclick.net.25993.9197.302br.net',
+'ad.doubleclick.net.25994.9197.302br.net',
+'ad.doubleclick.net.26041.9198.302br.net',
+'ad.doubleclick.net.26044.9198.302br.net',
+'ad.doubleclick.net.26045.9198.302br.net',
+'ad.doubleclick.net.26047.9198.302br.net',
+'ad.doubleclick.net.26048.9198.302br.net',
+'ad.doubleclick.net.26312.9199.302br.net',
+'ad.doubleclick.net.26313.9199.302br.net',
+'ad.doubleclick.net.26315.9199.302br.net',
+'ad.doubleclick.net.26316.9199.302br.net',
+'ad.doubleclick.net.26318.9199.302br.net',
+'ad.doubleclick.net.26321.9199.302br.net',
+'ad.doubleclick.net.26322.9199.302br.net',
+'ad.doubleclick.net.26324.9199.302br.net',
+'ad.doubleclick.net.26325.9199.302br.net',
+'ad.doubleclick.net.27461.9159.302br.net',
+'ad.doubleclick.net.27464.9159.302br.net',
+'ad.doubleclick.net.27467.9159.302br.net',
+'ad.doubleclick.net.27502.9210.302br.net',
+'ad.doubleclick.net.27521.9212.302br.net',
+'ad.doubleclick.net.27524.9212.302br.net',
+'ad.doubleclick.net.27527.9212.302br.net',
+'ad.doubleclick.net.27528.9212.302br.net',
+'ad.doubleclick.net.27531.9212.302br.net',
+'ad.doubleclick.net.27534.9212.302br.net',
+'ad.doubleclick.net.27537.9212.302br.net',
+'ad.doubleclick.net.27540.9212.302br.net',
+'ad.doubleclick.net.27543.9212.302br.net',
+'ad.doubleclick.net.27546.9212.302br.net',
+'ad.doubleclick.net.27549.9212.302br.net',
+'ad.doubleclick.net.27552.9212.302br.net',
+'ad.doubleclick.net.27555.9212.302br.net',
+'ad.doubleclick.net.27556.9212.302br.net',
+'ad.doubleclick.net.27557.9212.302br.net',
+'ad.doubleclick.net.27559.9212.302br.net',
+'ad.doubleclick.net.27560.9212.302br.net',
+'ad.doubleclick.net.27562.9212.302br.net',
+'ad.doubleclick.net.27563.9212.302br.net',
+'ad.doubleclick.net.27565.9212.302br.net',
+'ad.doubleclick.net.27566.9212.302br.net',
+'ad.doubleclick.net.27568.9212.302br.net',
+'ad.doubleclick.net.27569.9212.302br.net',
+'ad.doubleclick.net.27570.9212.302br.net',
+'ad.doubleclick.net.27571.9212.302br.net',
+'ad.doubleclick.net.27572.9212.302br.net',
+'ad.doubleclick.net.27573.9214.302br.net',
+'ad.doubleclick.net.27574.9214.302br.net',
+'ad.doubleclick.net.27577.9214.302br.net',
+'ad.doubleclick.net.27579.9190.302br.net',
+'ad.doubleclick.net.27581.9190.302br.net',
+'ad.doubleclick.net.27583.9190.302br.net',
+'ad.doubleclick.net.27585.9190.302br.net',
+'ad.doubleclick.net.27587.9190.302br.net',
+'ad.doubleclick.net.27589.9190.302br.net',
+'ad.doubleclick.net.27591.9176.302br.net',
+'ad.doubleclick.net.27592.9176.302br.net',
+'ad.doubleclick.net.27597.9176.302br.net',
+'ad.doubleclick.net.27598.9176.302br.net',
+'ad.doubleclick.net.27600.9176.302br.net',
+'ad.doubleclick.net.27601.9176.302br.net',
+'ad.doubleclick.net.27603.9176.302br.net',
+'ad.doubleclick.net.27606.9176.302br.net',
+'ad.doubleclick.net.27609.9176.302br.net',
+'ad.doubleclick.net.27610.9176.302br.net',
+'ad.doubleclick.net.27612.9176.302br.net',
+'ad.doubleclick.net.27613.9176.302br.net',
+'ad.doubleclick.net.27615.9176.302br.net',
+'ad.doubleclick.net.27616.9176.302br.net',
+'ad.doubleclick.net.27618.9176.302br.net',
+'ad.doubleclick.net.27622.9176.302br.net',
+'ad.doubleclick.net.27625.9176.302br.net',
+'ad.doubleclick.net.27628.9176.302br.net',
+'ad.doubleclick.net.27631.9176.302br.net',
+'ad.doubleclick.net.27637.9176.302br.net',
+'ad.doubleclick.net.27640.9176.302br.net',
+'ad.doubleclick.net.27646.9176.302br.net',
+'ad.doubleclick.net.27649.9176.302br.net',
+'ad.doubleclick.net.28092.9203.302br.net',
+'ad.doubleclick.net.28093.9203.302br.net',
+'ad.doubleclick.net.28094.9203.302br.net',
+'ad.doubleclick.net.28095.9203.302br.net',
+'ad.doubleclick.net.28096.9203.302br.net',
+'ad.doubleclick.net.28097.9203.302br.net',
+'ad.doubleclick.net.28098.9203.302br.net',
+'ad.doubleclick.net.28099.9203.302br.net',
+'ad.doubleclick.net.281.6100.302br.net',
+'ad.doubleclick.net.28100.9203.302br.net',
+'ad.doubleclick.net.282.6100.302br.net',
+'ad.doubleclick.net.28458.9203.302br.net',
+'ad.doubleclick.net.28459.9203.302br.net',
+'ad.doubleclick.net.28460.9203.302br.net',
+'ad.doubleclick.net.28461.9203.302br.net',
+'ad.doubleclick.net.28462.9203.302br.net',
+'ad.doubleclick.net.28463.9203.302br.net',
+'ad.doubleclick.net.28464.9203.302br.net',
+'ad.doubleclick.net.28465.9203.302br.net',
+'ad.doubleclick.net.28466.9203.302br.net',
+'ad.doubleclick.net.28508.9225.302br.net',
+'ad.doubleclick.net.28517.9225.302br.net',
+'ad.doubleclick.net.28520.9225.302br.net',
+'ad.doubleclick.net.28523.9225.302br.net',
+'ad.doubleclick.net.28526.9225.302br.net',
+'ad.doubleclick.net.28535.9225.302br.net',
+'ad.doubleclick.net.28538.9225.302br.net',
+'ad.doubleclick.net.28544.9225.302br.net',
+'ad.doubleclick.net.28547.9225.302br.net',
+'ad.doubleclick.net.28550.9225.302br.net',
+'ad.doubleclick.net.28556.9225.302br.net',
+'ad.doubleclick.net.28562.9225.302br.net',
+'ad.doubleclick.net.28574.9225.302br.net',
+'ad.doubleclick.net.28577.9225.302br.net',
+'ad.doubleclick.net.28583.9225.302br.net',
+'ad.doubleclick.net.28586.9225.302br.net',
+'ad.doubleclick.net.28589.9225.302br.net',
+'ad.doubleclick.net.28592.9225.302br.net',
+'ad.doubleclick.net.28598.9225.302br.net',
+'ad.doubleclick.net.286.6100.302br.net',
+'ad.doubleclick.net.28601.9225.302br.net',
+'ad.doubleclick.net.28604.9225.302br.net',
+'ad.doubleclick.net.28625.9225.302br.net',
+'ad.doubleclick.net.28628.9225.302br.net',
+'ad.doubleclick.net.28631.9225.302br.net',
+'ad.doubleclick.net.28634.9225.302br.net',
+'ad.doubleclick.net.28637.9225.302br.net',
+'ad.doubleclick.net.28646.9225.302br.net',
+'ad.doubleclick.net.28652.9225.302br.net',
+'ad.doubleclick.net.28655.9225.302br.net',
+'ad.doubleclick.net.28658.9225.302br.net',
+'ad.doubleclick.net.28661.9225.302br.net',
+'ad.doubleclick.net.28664.9225.302br.net',
+'ad.doubleclick.net.28667.9225.302br.net',
+'ad.doubleclick.net.28673.9225.302br.net',
+'ad.doubleclick.net.28676.9225.302br.net',
+'ad.doubleclick.net.28679.9225.302br.net',
+'ad.doubleclick.net.28691.9225.302br.net',
+'ad.doubleclick.net.28694.9225.302br.net',
+'ad.doubleclick.net.28697.9225.302br.net',
+'ad.doubleclick.net.28700.9225.302br.net',
+'ad.doubleclick.net.28703.9225.302br.net',
+'ad.doubleclick.net.28706.9225.302br.net',
+'ad.doubleclick.net.28712.9225.302br.net',
+'ad.doubleclick.net.28715.9225.302br.net',
+'ad.doubleclick.net.28718.9225.302br.net',
+'ad.doubleclick.net.28721.9225.302br.net',
+'ad.doubleclick.net.28724.9225.302br.net',
+'ad.doubleclick.net.28727.9225.302br.net',
+'ad.doubleclick.net.28728.9225.302br.net',
+'ad.doubleclick.net.28730.9225.302br.net',
+'ad.doubleclick.net.28742.9225.302br.net',
+'ad.doubleclick.net.28745.9225.302br.net',
+'ad.doubleclick.net.28748.9225.302br.net',
+'ad.doubleclick.net.28749.9225.302br.net',
+'ad.doubleclick.net.28751.9225.302br.net',
+'ad.doubleclick.net.28752.9225.302br.net',
+'ad.doubleclick.net.28754.9225.302br.net',
+'ad.doubleclick.net.28755.9225.302br.net',
+'ad.doubleclick.net.28757.9225.302br.net',
+'ad.doubleclick.net.28758.9225.302br.net',
+'ad.doubleclick.net.28760.9225.302br.net',
+'ad.doubleclick.net.28763.9225.302br.net',
+'ad.doubleclick.net.28766.9225.302br.net',
+'ad.doubleclick.net.28769.9225.302br.net',
+'ad.doubleclick.net.28772.9225.302br.net',
+'ad.doubleclick.net.28778.9225.302br.net',
+'ad.doubleclick.net.28781.9225.302br.net',
+'ad.doubleclick.net.28784.9225.302br.net',
+'ad.doubleclick.net.28787.9225.302br.net',
+'ad.doubleclick.net.28788.9225.302br.net',
+'ad.doubleclick.net.28790.9225.302br.net',
+'ad.doubleclick.net.28791.9225.302br.net',
+'ad.doubleclick.net.28793.9225.302br.net',
+'ad.doubleclick.net.28796.9225.302br.net',
+'ad.doubleclick.net.28799.9225.302br.net',
+'ad.doubleclick.net.28802.9225.302br.net',
+'ad.doubleclick.net.28808.9225.302br.net',
+'ad.doubleclick.net.28811.9225.302br.net',
+'ad.doubleclick.net.28814.9225.302br.net',
+'ad.doubleclick.net.28817.9225.302br.net',
+'ad.doubleclick.net.28820.9225.302br.net',
+'ad.doubleclick.net.28823.9225.302br.net',
+'ad.doubleclick.net.28824.9214.302br.net',
+'ad.doubleclick.net.28825.9214.302br.net',
+'ad.doubleclick.net.28828.9214.302br.net',
+'ad.doubleclick.net.28832.9226.302br.net',
+'ad.doubleclick.net.28836.9226.302br.net',
+'ad.doubleclick.net.28838.9226.302br.net',
+'ad.doubleclick.net.28966.9225.302br.net',
+'ad.doubleclick.net.28972.9225.302br.net',
+'ad.doubleclick.net.28974.9225.302br.net',
+'ad.doubleclick.net.28976.9225.302br.net',
+'ad.doubleclick.net.28980.9225.302br.net',
+'ad.doubleclick.net.28982.9225.302br.net',
+'ad.doubleclick.net.28984.9225.302br.net',
+'ad.doubleclick.net.28986.9225.302br.net',
+'ad.doubleclick.net.28988.9225.302br.net',
+'ad.doubleclick.net.29042.9225.302br.net',
+'ad.doubleclick.net.29044.9225.302br.net',
+'ad.doubleclick.net.29046.9225.302br.net',
+'ad.doubleclick.net.29048.9225.302br.net',
+'ad.doubleclick.net.29050.9225.302br.net',
+'ad.doubleclick.net.29053.9225.302br.net',
+'ad.doubleclick.net.29054.9225.302br.net',
+'ad.doubleclick.net.29058.9225.302br.net',
+'ad.doubleclick.net.29060.9225.302br.net',
+'ad.doubleclick.net.29062.9225.302br.net',
+'ad.doubleclick.net.29064.9225.302br.net',
+'ad.doubleclick.net.29066.9225.302br.net',
+'ad.doubleclick.net.29068.9225.302br.net',
+'ad.doubleclick.net.29070.9225.302br.net',
+'ad.doubleclick.net.29072.9225.302br.net',
+'ad.doubleclick.net.29073.9225.302br.net',
+'ad.doubleclick.net.29074.9225.302br.net',
+'ad.doubleclick.net.29075.9225.302br.net',
+'ad.doubleclick.net.29076.9225.302br.net',
+'ad.doubleclick.net.29078.9225.302br.net',
+'ad.doubleclick.net.29080.9225.302br.net',
+'ad.doubleclick.net.29082.9225.302br.net',
+'ad.doubleclick.net.29086.9225.302br.net',
+'ad.doubleclick.net.29092.9225.302br.net',
+'ad.doubleclick.net.29094.9225.302br.net',
+'ad.doubleclick.net.29096.9225.302br.net',
+'ad.doubleclick.net.29100.9225.302br.net',
+'ad.doubleclick.net.29102.9225.302br.net',
+'ad.doubleclick.net.29110.9225.302br.net',
+'ad.doubleclick.net.29112.9225.302br.net',
+'ad.doubleclick.net.29114.9225.302br.net',
+'ad.doubleclick.net.29116.9225.302br.net',
+'ad.doubleclick.net.29118.9225.302br.net',
+'ad.doubleclick.net.29120.9225.302br.net',
+'ad.doubleclick.net.29122.9225.302br.net',
+'ad.doubleclick.net.29124.9225.302br.net',
+'ad.doubleclick.net.29125.9225.302br.net',
+'ad.doubleclick.net.29126.9225.302br.net',
+'ad.doubleclick.net.29128.9225.302br.net',
+'ad.doubleclick.net.29130.9225.302br.net',
+'ad.doubleclick.net.29132.9225.302br.net',
+'ad.doubleclick.net.29134.9225.302br.net',
+'ad.doubleclick.net.29136.9225.302br.net',
+'ad.doubleclick.net.29138.9225.302br.net',
+'ad.doubleclick.net.29171.9215.302br.net',
+'ad.doubleclick.net.29172.9215.302br.net',
+'ad.doubleclick.net.29173.9215.302br.net',
+'ad.doubleclick.net.29174.9215.302br.net',
+'ad.doubleclick.net.29175.9215.302br.net',
+'ad.doubleclick.net.29176.9215.302br.net',
+'ad.doubleclick.net.29178.9215.302br.net',
+'ad.doubleclick.net.29179.9215.302br.net',
+'ad.doubleclick.net.29181.9215.302br.net',
+'ad.doubleclick.net.29182.9215.302br.net',
+'ad.doubleclick.net.29183.9215.302br.net',
+'ad.doubleclick.net.29184.9215.302br.net',
+'ad.doubleclick.net.29185.9215.302br.net',
+'ad.doubleclick.net.29186.9215.302br.net',
+'ad.doubleclick.net.29187.9215.302br.net',
+'ad.doubleclick.net.29188.9215.302br.net',
+'ad.doubleclick.net.29189.9215.302br.net',
+'ad.doubleclick.net.29190.9215.302br.net',
+'ad.doubleclick.net.29191.9215.302br.net',
+'ad.doubleclick.net.29192.9215.302br.net',
+'ad.doubleclick.net.29193.9215.302br.net',
+'ad.doubleclick.net.29194.9215.302br.net',
+'ad.doubleclick.net.29195.9215.302br.net',
+'ad.doubleclick.net.29196.9215.302br.net',
+'ad.doubleclick.net.29197.9215.302br.net',
+'ad.doubleclick.net.29198.9215.302br.net',
+'ad.doubleclick.net.29199.9215.302br.net',
+'ad.doubleclick.net.29200.9215.302br.net',
+'ad.doubleclick.net.29201.9215.302br.net',
+'ad.doubleclick.net.29202.9215.302br.net',
+'ad.doubleclick.net.29203.9215.302br.net',
+'ad.doubleclick.net.29204.9215.302br.net',
+'ad.doubleclick.net.29205.9215.302br.net',
+'ad.doubleclick.net.29206.9215.302br.net',
+'ad.doubleclick.net.29207.9231.302br.net',
+'ad.doubleclick.net.29210.9231.302br.net',
+'ad.doubleclick.net.29213.9231.302br.net',
+'ad.doubleclick.net.29219.9231.302br.net',
+'ad.doubleclick.net.29222.9231.302br.net',
+'ad.doubleclick.net.29225.9231.302br.net',
+'ad.doubleclick.net.29228.9231.302br.net',
+'ad.doubleclick.net.29231.9231.302br.net',
+'ad.doubleclick.net.29237.9231.302br.net',
+'ad.doubleclick.net.29331.9192.302br.net',
+'ad.doubleclick.net.29332.9192.302br.net',
+'ad.doubleclick.net.29334.9192.302br.net',
+'ad.doubleclick.net.29335.9192.302br.net',
+'ad.doubleclick.net.29337.9192.302br.net',
+'ad.doubleclick.net.29340.9192.302br.net',
+'ad.doubleclick.net.29341.9192.302br.net',
+'ad.doubleclick.net.29343.9192.302br.net',
+'ad.doubleclick.net.29347.9192.302br.net',
+'ad.doubleclick.net.29350.9192.302br.net',
+'ad.doubleclick.net.29356.9192.302br.net',
+'ad.doubleclick.net.29361.9233.302br.net',
+'ad.doubleclick.net.29362.9233.302br.net',
+'ad.doubleclick.net.29364.9233.302br.net',
+'ad.doubleclick.net.29367.9233.302br.net',
+'ad.doubleclick.net.29368.9233.302br.net',
+'ad.doubleclick.net.29370.9233.302br.net',
+'ad.doubleclick.net.29371.9233.302br.net',
+'ad.doubleclick.net.29373.9233.302br.net',
+'ad.doubleclick.net.29374.9233.302br.net',
+'ad.doubleclick.net.29403.9237.302br.net',
+'ad.doubleclick.net.29404.9237.302br.net',
+'ad.doubleclick.net.29412.9237.302br.net',
+'ad.doubleclick.net.29413.9237.302br.net',
+'ad.doubleclick.net.29441.9237.302br.net',
+'ad.doubleclick.net.29443.9237.302br.net',
+'ad.doubleclick.net.29444.9237.302br.net',
+'ad.doubleclick.net.29446.9237.302br.net',
+'ad.doubleclick.net.29447.9237.302br.net',
+'ad.doubleclick.net.29449.9237.302br.net',
+'ad.doubleclick.net.29452.9237.302br.net',
+'ad.doubleclick.net.29455.9237.302br.net',
+'ad.doubleclick.net.29456.9237.302br.net',
+'ad.doubleclick.net.29458.9237.302br.net',
+'ad.doubleclick.net.29459.9237.302br.net',
+'ad.doubleclick.net.29461.9237.302br.net',
+'ad.doubleclick.net.29462.9237.302br.net',
+'ad.doubleclick.net.29464.9237.302br.net',
+'ad.doubleclick.net.29467.9237.302br.net',
+'ad.doubleclick.net.29468.9237.302br.net',
+'ad.doubleclick.net.29470.9237.302br.net',
+'ad.doubleclick.net.29485.9236.302br.net',
+'ad.doubleclick.net.29500.9236.302br.net',
+'ad.doubleclick.net.29503.9236.302br.net',
+'ad.doubleclick.net.29506.9236.302br.net',
+'ad.doubleclick.net.29528.9235.302br.net',
+'ad.doubleclick.net.29530.9235.302br.net',
+'ad.doubleclick.net.29531.9235.302br.net',
+'ad.doubleclick.net.29533.9235.302br.net',
+'ad.doubleclick.net.29537.9235.302br.net',
+'ad.doubleclick.net.29539.9235.302br.net',
+'ad.doubleclick.net.29552.9235.302br.net',
+'ad.doubleclick.net.29554.9235.302br.net',
+'ad.doubleclick.net.29564.9235.302br.net',
+'ad.doubleclick.net.29566.9235.302br.net',
+'ad.doubleclick.net.29573.9235.302br.net',
+'ad.doubleclick.net.29575.9235.302br.net',
+'ad.doubleclick.net.29622.9239.302br.net',
+'ad.doubleclick.net.29625.9239.302br.net',
+'ad.doubleclick.net.29626.9240.302br.net',
+'ad.doubleclick.net.29628.9239.302br.net',
+'ad.doubleclick.net.29631.9240.302br.net',
+'ad.doubleclick.net.29632.9239.302br.net',
+'ad.doubleclick.net.29634.9239.302br.net',
+'ad.doubleclick.net.29637.9240.302br.net',
+'ad.doubleclick.net.29638.9239.302br.net',
+'ad.doubleclick.net.29643.9240.302br.net',
+'ad.doubleclick.net.29644.9239.302br.net',
+'ad.doubleclick.net.29649.9240.302br.net',
+'ad.doubleclick.net.29650.9239.302br.net',
+'ad.doubleclick.net.29655.9240.302br.net',
+'ad.doubleclick.net.29656.9239.302br.net',
+'ad.doubleclick.net.29658.9239.302br.net',
+'ad.doubleclick.net.29661.9240.302br.net',
+'ad.doubleclick.net.29662.9239.302br.net',
+'ad.doubleclick.net.29665.9239.302br.net',
+'ad.doubleclick.net.29667.9240.302br.net',
+'ad.doubleclick.net.29668.9239.302br.net',
+'ad.doubleclick.net.29670.9239.302br.net',
+'ad.doubleclick.net.29673.9240.302br.net',
+'ad.doubleclick.net.29674.9239.302br.net',
+'ad.doubleclick.net.29676.9239.302br.net',
+'ad.doubleclick.net.29679.9240.302br.net',
+'ad.doubleclick.net.29680.9239.302br.net',
+'ad.doubleclick.net.29682.9239.302br.net',
+'ad.doubleclick.net.29685.9240.302br.net',
+'ad.doubleclick.net.29686.9239.302br.net',
+'ad.doubleclick.net.29691.9240.302br.net',
+'ad.doubleclick.net.29692.9239.302br.net',
+'ad.doubleclick.net.29693.9240.302br.net',
+'ad.doubleclick.net.29695.9239.302br.net',
+'ad.doubleclick.net.29696.9240.302br.net',
+'ad.doubleclick.net.29698.9239.302br.net',
+'ad.doubleclick.net.29699.9240.302br.net',
+'ad.doubleclick.net.29703.9240.302br.net',
+'ad.doubleclick.net.29704.9239.302br.net',
+'ad.doubleclick.net.29706.9239.302br.net',
+'ad.doubleclick.net.29710.9239.302br.net',
+'ad.doubleclick.net.29716.9239.302br.net',
+'ad.doubleclick.net.29722.9239.302br.net',
+'ad.doubleclick.net.29727.9240.302br.net',
+'ad.doubleclick.net.29728.9239.302br.net',
+'ad.doubleclick.net.29730.9240.302br.net',
+'ad.doubleclick.net.29733.9239.302br.net',
+'ad.doubleclick.net.29734.9240.302br.net',
+'ad.doubleclick.net.29736.9240.302br.net',
+'ad.doubleclick.net.29739.9239.302br.net',
+'ad.doubleclick.net.29740.9240.302br.net',
+'ad.doubleclick.net.29744.9239.302br.net',
+'ad.doubleclick.net.29747.9240.302br.net',
+'ad.doubleclick.net.29750.9239.302br.net',
+'ad.doubleclick.net.29754.9240.302br.net',
+'ad.doubleclick.net.29755.9239.302br.net',
+'ad.doubleclick.net.29756.9240.302br.net',
+'ad.doubleclick.net.29759.9240.302br.net',
+'ad.doubleclick.net.29761.9240.302br.net',
+'ad.doubleclick.net.29762.9239.302br.net',
+'ad.doubleclick.net.29765.9240.302br.net',
+'ad.doubleclick.net.29767.9240.302br.net',
+'ad.doubleclick.net.29768.9239.302br.net',
+'ad.doubleclick.net.29771.9240.302br.net',
+'ad.doubleclick.net.29773.9240.302br.net',
+'ad.doubleclick.net.29774.9239.302br.net',
+'ad.doubleclick.net.29777.9240.302br.net',
+'ad.doubleclick.net.29779.9240.302br.net',
+'ad.doubleclick.net.29780.9239.302br.net',
+'ad.doubleclick.net.29783.9240.302br.net',
+'ad.doubleclick.net.29785.9240.302br.net',
+'ad.doubleclick.net.29786.9239.302br.net',
+'ad.doubleclick.net.29789.9240.302br.net',
+'ad.doubleclick.net.29793.9239.302br.net',
+'ad.doubleclick.net.29794.9240.302br.net',
+'ad.doubleclick.net.29796.9240.302br.net',
+'ad.doubleclick.net.29800.9240.302br.net',
+'ad.doubleclick.net.29803.9240.302br.net',
+'ad.doubleclick.net.29806.9240.302br.net',
+'ad.doubleclick.net.29809.9240.302br.net',
+'ad.doubleclick.net.29812.9240.302br.net',
+'ad.doubleclick.net.29815.9240.302br.net',
+'ad.doubleclick.net.29818.9240.302br.net',
+'ad.doubleclick.net.29821.9240.302br.net',
+'ad.doubleclick.net.29824.9240.302br.net',
+'ad.doubleclick.net.29825.9240.302br.net',
+'ad.doubleclick.net.29827.9240.302br.net',
+'ad.doubleclick.net.29828.9240.302br.net',
+'ad.doubleclick.net.29830.9240.302br.net',
+'ad.doubleclick.net.29831.9240.302br.net',
+'ad.doubleclick.net.29833.9240.302br.net',
+'ad.doubleclick.net.29836.9240.302br.net',
+'ad.doubleclick.net.29839.9240.302br.net',
+'ad.doubleclick.net.29840.9240.302br.net',
+'ad.doubleclick.net.29842.9240.302br.net',
+'ad.doubleclick.net.29843.9240.302br.net',
+'ad.doubleclick.net.29845.9240.302br.net',
+'ad.doubleclick.net.29846.9240.302br.net',
+'ad.doubleclick.net.29848.9240.302br.net',
+'ad.doubleclick.net.29849.9240.302br.net',
+'ad.doubleclick.net.29851.9240.302br.net',
+'ad.doubleclick.net.29854.9240.302br.net',
+'ad.doubleclick.net.29855.9240.302br.net',
+'ad.doubleclick.net.29857.9240.302br.net',
+'ad.doubleclick.net.29860.9240.302br.net',
+'ad.doubleclick.net.29861.9240.302br.net',
+'ad.doubleclick.net.29863.9240.302br.net',
+'ad.doubleclick.net.29864.9240.302br.net',
+'ad.doubleclick.net.29866.9240.302br.net',
+'ad.doubleclick.net.29869.9240.302br.net',
+'ad.doubleclick.net.29872.9240.302br.net',
+'ad.doubleclick.net.29875.9240.302br.net',
+'ad.doubleclick.net.29878.9240.302br.net',
+'ad.doubleclick.net.29879.9240.302br.net',
+'ad.doubleclick.net.29881.9240.302br.net',
+'ad.doubleclick.net.29882.9240.302br.net',
+'ad.doubleclick.net.29884.9240.302br.net',
+'ad.doubleclick.net.29885.9240.302br.net',
+'ad.doubleclick.net.29887.9240.302br.net',
+'ad.doubleclick.net.29888.9240.302br.net',
+'ad.doubleclick.net.29890.9240.302br.net',
+'ad.doubleclick.net.29893.9240.302br.net',
+'ad.doubleclick.net.29896.9240.302br.net',
+'ad.doubleclick.net.29897.9240.302br.net',
+'ad.doubleclick.net.29899.9240.302br.net',
+'ad.doubleclick.net.29913.9124.302br.net',
+'ad.doubleclick.net.29940.9124.302br.net',
+'ad.doubleclick.net.29946.9124.302br.net',
+'ad.doubleclick.net.29947.9124.302br.net',
+'ad.doubleclick.net.29958.9124.302br.net',
+'ad.doubleclick.net.29961.9124.302br.net',
+'ad.doubleclick.net.29962.9124.302br.net',
+'ad.doubleclick.net.29973.9124.302br.net',
+'ad.doubleclick.net.29982.9124.302br.net',
+'ad.doubleclick.net.29985.9124.302br.net',
+'ad.doubleclick.net.29988.9124.302br.net',
+'ad.doubleclick.net.29991.9124.302br.net',
+'ad.doubleclick.net.30003.9124.302br.net',
+'ad.doubleclick.net.30006.9124.302br.net',
+'ad.doubleclick.net.30027.9124.302br.net',
+'ad.doubleclick.net.30039.9124.302br.net',
+'ad.doubleclick.net.30042.9124.302br.net',
+'ad.doubleclick.net.30072.9124.302br.net',
+'ad.doubleclick.net.30075.9124.302br.net',
+'ad.doubleclick.net.30351.9240.302br.net',
+'ad.doubleclick.net.30353.9240.302br.net',
+'ad.doubleclick.net.30362.9240.302br.net',
+'ad.doubleclick.net.30364.9240.302br.net',
+'ad.doubleclick.net.30373.9240.302br.net',
+'ad.doubleclick.net.30375.9240.302br.net',
+'ad.doubleclick.net.30376.9240.302br.net',
+'ad.doubleclick.net.30378.9240.302br.net',
+'ad.doubleclick.net.30380.9240.302br.net',
+'ad.doubleclick.net.30382.9240.302br.net',
+'ad.doubleclick.net.30386.9240.302br.net',
+'ad.doubleclick.net.30388.9240.302br.net',
+'ad.doubleclick.net.30391.9240.302br.net',
+'ad.doubleclick.net.30392.9240.302br.net',
+'ad.doubleclick.net.30396.9240.302br.net',
+'ad.doubleclick.net.30398.9240.302br.net',
+'ad.doubleclick.net.30481.9240.302br.net',
+'ad.doubleclick.net.30483.9240.302br.net',
+'ad.doubleclick.net.30486.9240.302br.net',
+'ad.doubleclick.net.30488.9240.302br.net',
+'ad.doubleclick.net.30718.9240.302br.net',
+'ad.doubleclick.net.30720.9240.302br.net',
+'ad.doubleclick.net.30730.9240.302br.net',
+'ad.doubleclick.net.30732.9240.302br.net',
+'ad.doubleclick.net.30744.9240.302br.net',
+'ad.doubleclick.net.30745.9240.302br.net',
+'ad.doubleclick.net.30749.9240.302br.net',
+'ad.doubleclick.net.30751.9240.302br.net',
+'ad.doubleclick.net.30761.9240.302br.net',
+'ad.doubleclick.net.30763.9240.302br.net',
+'ad.doubleclick.net.30766.9240.302br.net',
+'ad.doubleclick.net.30773.9240.302br.net',
+'ad.doubleclick.net.30774.9240.302br.net',
+'ad.doubleclick.net.30776.9240.302br.net',
+'ad.doubleclick.net.30794.9240.302br.net',
+'ad.doubleclick.net.30825.9240.302br.net',
+'ad.doubleclick.net.30827.9240.302br.net',
+'ad.doubleclick.net.30838.9240.302br.net',
+'ad.doubleclick.net.30840.9240.302br.net',
+'ad.doubleclick.net.30844.9240.302br.net',
+'ad.doubleclick.net.30846.9240.302br.net',
+'ad.doubleclick.net.30850.9240.302br.net',
+'ad.doubleclick.net.30853.9240.302br.net',
+'ad.doubleclick.net.30863.9240.302br.net',
+'ad.doubleclick.net.30865.9240.302br.net',
+'ad.doubleclick.net.30869.9240.302br.net',
+'ad.doubleclick.net.30871.9240.302br.net',
+'ad.doubleclick.net.30875.9240.302br.net',
+'ad.doubleclick.net.30877.9240.302br.net',
+'ad.doubleclick.net.30893.9240.302br.net',
+'ad.doubleclick.net.30895.9240.302br.net',
+'ad.doubleclick.net.30899.9240.302br.net',
+'ad.doubleclick.net.30901.9240.302br.net',
+'ad.doubleclick.net.30918.9240.302br.net',
+'ad.doubleclick.net.30930.9240.302br.net',
+'ad.doubleclick.net.30932.9240.302br.net',
+'ad.doubleclick.net.30936.9240.302br.net',
+'ad.doubleclick.net.30938.9240.302br.net',
+'ad.doubleclick.net.30949.9240.302br.net',
+'ad.doubleclick.net.30951.9240.302br.net',
+'ad.doubleclick.net.30961.9240.302br.net',
+'ad.doubleclick.net.30963.9240.302br.net',
+'ad.doubleclick.net.30973.9240.302br.net',
+'ad.doubleclick.net.30975.9240.302br.net',
+'ad.doubleclick.net.30978.9240.302br.net',
+'ad.doubleclick.net.30980.9240.302br.net',
+'ad.doubleclick.net.30984.9240.302br.net',
+'ad.doubleclick.net.30985.9240.302br.net',
+'ad.doubleclick.net.30995.9240.302br.net',
+'ad.doubleclick.net.30997.9240.302br.net',
+'ad.doubleclick.net.31002.9240.302br.net',
+'ad.doubleclick.net.31005.9240.302br.net',
+'ad.doubleclick.net.31009.9240.302br.net',
+'ad.doubleclick.net.31011.9240.302br.net',
+'ad.doubleclick.net.31020.9240.302br.net',
+'ad.doubleclick.net.31021.9240.302br.net',
+'ad.doubleclick.net.31023.9240.302br.net',
+'ad.doubleclick.net.31027.9240.302br.net',
+'ad.doubleclick.net.31029.9240.302br.net',
+'ad.doubleclick.net.31033.9240.302br.net',
+'ad.doubleclick.net.31035.9240.302br.net',
+'ad.doubleclick.net.31039.9240.302br.net',
+'ad.doubleclick.net.31041.9240.302br.net',
+'ad.doubleclick.net.31045.9240.302br.net',
+'ad.doubleclick.net.31064.9240.302br.net',
+'ad.doubleclick.net.31065.9240.302br.net',
+'ad.doubleclick.net.31094.9240.302br.net',
+'ad.doubleclick.net.31096.9240.302br.net',
+'ad.doubleclick.net.31124.9240.302br.net',
+'ad.doubleclick.net.31126.9240.302br.net',
+'ad.doubleclick.net.31134.9240.302br.net',
+'ad.doubleclick.net.31136.9240.302br.net',
+'ad.doubleclick.net.31138.9240.302br.net',
+'ad.doubleclick.net.31142.9240.302br.net',
+'ad.doubleclick.net.31144.9240.302br.net',
+'ad.doubleclick.net.31325.9240.302br.net',
+'ad.doubleclick.net.31327.9240.302br.net',
+'ad.doubleclick.net.31331.9240.302br.net',
+'ad.doubleclick.net.31333.9240.302br.net',
+'ad.doubleclick.net.31337.9240.302br.net',
+'ad.doubleclick.net.31339.9240.302br.net',
+'ad.doubleclick.net.31344.9240.302br.net',
+'ad.doubleclick.net.31345.9240.302br.net',
+'ad.doubleclick.net.31348.9240.302br.net',
+'ad.doubleclick.net.31350.9240.302br.net',
+'ad.doubleclick.net.31352.9240.302br.net',
+'ad.doubleclick.net.31358.9240.302br.net',
+'ad.doubleclick.net.31364.9240.302br.net',
+'ad.doubleclick.net.31371.9240.302br.net',
+'ad.doubleclick.net.31377.9240.302br.net',
+'ad.doubleclick.net.31383.9240.302br.net',
+'ad.doubleclick.net.31389.9240.302br.net',
+'ad.doubleclick.net.31394.9240.302br.net',
+'ad.doubleclick.net.31401.9240.302br.net',
+'ad.doubleclick.net.31408.9240.302br.net',
+'ad.doubleclick.net.31411.9240.302br.net',
+'ad.doubleclick.net.31415.9240.302br.net',
+'ad.doubleclick.net.31417.9240.302br.net',
+'ad.doubleclick.net.31419.9240.302br.net',
+'ad.doubleclick.net.31421.9240.302br.net',
+'ad.doubleclick.net.31445.9240.302br.net',
+'ad.doubleclick.net.31447.9240.302br.net',
+'ad.doubleclick.net.31450.9240.302br.net',
+'ad.doubleclick.net.31456.9240.302br.net',
+'ad.doubleclick.net.31458.9240.302br.net',
+'ad.doubleclick.net.31462.9240.302br.net',
+'ad.doubleclick.net.31464.9240.302br.net',
+'ad.doubleclick.net.31468.9240.302br.net',
+'ad.doubleclick.net.31470.9240.302br.net',
+'ad.doubleclick.net.31474.9240.302br.net',
+'ad.doubleclick.net.31476.9240.302br.net',
+'ad.doubleclick.net.31480.9240.302br.net',
+'ad.doubleclick.net.31482.9240.302br.net',
+'ad.doubleclick.net.31485.9240.302br.net',
+'ad.doubleclick.net.31487.9240.302br.net',
+'ad.doubleclick.net.31490.9240.302br.net',
+'ad.doubleclick.net.31495.9240.302br.net',
+'ad.doubleclick.net.31501.9240.302br.net',
+'ad.doubleclick.net.31507.9240.302br.net',
+'ad.doubleclick.net.31509.9240.302br.net',
+'ad.doubleclick.net.31513.9240.302br.net',
+'ad.doubleclick.net.31519.9240.302br.net',
+'ad.doubleclick.net.31521.9240.302br.net',
+'ad.doubleclick.net.31524.9240.302br.net',
+'ad.doubleclick.net.31526.9240.302br.net',
+'ad.doubleclick.net.31530.9240.302br.net',
+'ad.doubleclick.net.31532.9240.302br.net',
+'ad.doubleclick.net.31536.9240.302br.net',
+'ad.doubleclick.net.31538.9240.302br.net',
+'ad.doubleclick.net.31542.9240.302br.net',
+'ad.doubleclick.net.31548.9240.302br.net',
+'ad.doubleclick.net.31550.9240.302br.net',
+'ad.doubleclick.net.31554.9240.302br.net',
+'ad.doubleclick.net.31941.9226.302br.net',
+'ad.doubleclick.net.31944.9226.302br.net',
+'ad.doubleclick.net.31945.9226.302br.net',
+'ad.doubleclick.net.31947.9226.302br.net',
+'ad.doubleclick.net.31950.9226.302br.net',
+'ad.doubleclick.net.31951.9226.302br.net',
+'ad.doubleclick.net.31953.9226.302br.net',
+'ad.doubleclick.net.31954.9226.302br.net',
+'ad.doubleclick.net.31972.9242.302br.net',
+'ad.doubleclick.net.31973.9242.302br.net',
+'ad.doubleclick.net.31974.9242.302br.net',
+'ad.doubleclick.net.31975.9242.302br.net',
+'ad.doubleclick.net.31978.9242.302br.net',
+'ad.doubleclick.net.31981.9242.302br.net',
+'ad.doubleclick.net.31987.9242.302br.net',
+'ad.doubleclick.net.31990.9242.302br.net',
+'ad.doubleclick.net.32002.9242.302br.net',
+'ad.doubleclick.net.32005.9242.302br.net',
+'ad.doubleclick.net.32008.9242.302br.net',
+'ad.doubleclick.net.32011.9242.302br.net',
+'ad.doubleclick.net.32014.9242.302br.net',
+'ad.doubleclick.net.32017.9242.302br.net',
+'ad.doubleclick.net.32020.9242.302br.net',
+'ad.doubleclick.net.32023.9242.302br.net',
+'ad.doubleclick.net.32026.9242.302br.net',
+'ad.doubleclick.net.32029.9242.302br.net',
+'ad.doubleclick.net.32032.9242.302br.net',
+'ad.doubleclick.net.32041.9242.302br.net',
+'ad.doubleclick.net.32045.9242.302br.net',
+'ad.doubleclick.net.32047.9242.302br.net',
+'ad.doubleclick.net.32048.9242.302br.net',
+'ad.doubleclick.net.32050.9242.302br.net',
+'ad.doubleclick.net.32053.9242.302br.net',
+'ad.doubleclick.net.32054.9242.302br.net',
+'ad.doubleclick.net.32056.9242.302br.net',
+'ad.doubleclick.net.32057.9242.302br.net',
+'ad.doubleclick.net.32059.9242.302br.net',
+'ad.doubleclick.net.32062.9242.302br.net',
+'ad.doubleclick.net.32065.9242.302br.net',
+'ad.doubleclick.net.32071.9242.302br.net',
+'ad.doubleclick.net.32074.9242.302br.net',
+'ad.doubleclick.net.32075.9242.302br.net',
+'ad.doubleclick.net.32077.9242.302br.net',
+'ad.doubleclick.net.32080.9242.302br.net',
+'ad.doubleclick.net.32110.9242.302br.net',
+'ad.doubleclick.net.32113.9242.302br.net',
+'ad.doubleclick.net.32119.9242.302br.net',
+'ad.doubleclick.net.32122.9242.302br.net',
+'ad.doubleclick.net.32125.9242.302br.net',
+'ad.doubleclick.net.32126.9242.302br.net',
+'ad.doubleclick.net.32128.9242.302br.net',
+'ad.doubleclick.net.32131.9242.302br.net',
+'ad.doubleclick.net.32137.9242.302br.net',
+'ad.doubleclick.net.32140.9242.302br.net',
+'ad.doubleclick.net.32141.9242.302br.net',
+'ad.doubleclick.net.32143.9242.302br.net',
+'ad.doubleclick.net.32146.9242.302br.net',
+'ad.doubleclick.net.32149.9242.302br.net',
+'ad.doubleclick.net.32152.9242.302br.net',
+'ad.doubleclick.net.32155.9242.302br.net',
+'ad.doubleclick.net.32158.9242.302br.net',
+'ad.doubleclick.net.32161.9242.302br.net',
+'ad.doubleclick.net.32164.9242.302br.net',
+'ad.doubleclick.net.32176.9242.302br.net',
+'ad.doubleclick.net.32177.9242.302br.net',
+'ad.doubleclick.net.32179.9242.302br.net',
+'ad.doubleclick.net.32180.9242.302br.net',
+'ad.doubleclick.net.32182.9242.302br.net',
+'ad.doubleclick.net.32206.9242.302br.net',
+'ad.doubleclick.net.32212.9242.302br.net',
+'ad.doubleclick.net.32221.9242.302br.net',
+'ad.doubleclick.net.32224.9242.302br.net',
+'ad.doubleclick.net.32227.9242.302br.net',
+'ad.doubleclick.net.32230.9242.302br.net',
+'ad.doubleclick.net.32242.9242.302br.net',
+'ad.doubleclick.net.32245.9242.302br.net',
+'ad.doubleclick.net.32263.9199.302br.net',
+'ad.doubleclick.net.32264.9199.302br.net',
+'ad.doubleclick.net.32266.9199.302br.net',
+'ad.doubleclick.net.32269.9199.302br.net',
+'ad.doubleclick.net.32270.9199.302br.net',
+'ad.doubleclick.net.32272.9199.302br.net',
+'ad.doubleclick.net.32273.9199.302br.net',
+'ad.doubleclick.net.32299.9210.302br.net',
+'ad.doubleclick.net.32300.9210.302br.net',
+'ad.doubleclick.net.32302.9210.302br.net',
+'ad.doubleclick.net.32303.9210.302br.net',
+'ad.doubleclick.net.32305.9210.302br.net',
+'ad.doubleclick.net.32306.9210.302br.net',
+'ad.doubleclick.net.32308.9210.302br.net',
+'ad.doubleclick.net.32309.9210.302br.net',
+'ad.doubleclick.net.32317.9239.302br.net',
+'ad.doubleclick.net.32318.9239.302br.net',
+'ad.doubleclick.net.32320.9239.302br.net',
+'ad.doubleclick.net.32321.9239.302br.net',
+'ad.doubleclick.net.32395.9239.302br.net',
+'ad.doubleclick.net.32396.9239.302br.net',
+'ad.doubleclick.net.32412.9239.302br.net',
+'ad.doubleclick.net.32414.9239.302br.net',
+'ad.doubleclick.net.32417.9239.302br.net',
+'ad.doubleclick.net.32418.9239.302br.net',
+'ad.doubleclick.net.32420.9239.302br.net',
+'ad.doubleclick.net.32428.9239.302br.net',
+'ad.doubleclick.net.32431.9239.302br.net',
+'ad.doubleclick.net.32443.9239.302br.net',
+'ad.doubleclick.net.32446.9239.302br.net',
+'ad.doubleclick.net.32452.9239.302br.net',
+'ad.doubleclick.net.32458.9239.302br.net',
+'ad.doubleclick.net.32485.9239.302br.net',
+'ad.doubleclick.net.32605.9239.302br.net',
+'ad.doubleclick.net.32716.9240.302br.net',
+'ad.doubleclick.net.32719.9240.302br.net',
+'ad.doubleclick.net.32722.9240.302br.net',
+'ad.doubleclick.net.32821.9240.302br.net',
+'ad.doubleclick.net.32822.9240.302br.net',
+'ad.doubleclick.net.32827.9240.302br.net',
+'ad.doubleclick.net.32828.9240.302br.net',
+'ad.doubleclick.net.32840.9240.302br.net',
+'ad.doubleclick.net.32843.9240.302br.net',
+'ad.doubleclick.net.32846.9240.302br.net',
+'ad.doubleclick.net.32887.9240.302br.net',
+'ad.doubleclick.net.32896.9240.302br.net',
+'ad.doubleclick.net.32899.9240.302br.net',
+'ad.doubleclick.net.32911.9240.302br.net',
+'ad.doubleclick.net.32944.9240.302br.net',
+'ad.doubleclick.net.32945.9240.302br.net',
+'ad.doubleclick.net.32947.9240.302br.net',
+'ad.doubleclick.net.32948.9240.302br.net',
+'ad.doubleclick.net.32949.9240.302br.net',
+'ad.doubleclick.net.32950.9240.302br.net',
+'ad.doubleclick.net.32951.9240.302br.net',
+'ad.doubleclick.net.32953.9240.302br.net',
+'ad.doubleclick.net.32954.9240.302br.net',
+'ad.doubleclick.net.32956.9240.302br.net',
+'ad.doubleclick.net.32957.9240.302br.net',
+'ad.doubleclick.net.32959.9240.302br.net',
+'ad.doubleclick.net.32960.9240.302br.net',
+'ad.doubleclick.net.32962.9240.302br.net',
+'ad.doubleclick.net.32963.9240.302br.net',
+'ad.doubleclick.net.32965.9240.302br.net',
+'ad.doubleclick.net.32966.9240.302br.net',
+'ad.doubleclick.net.32968.9240.302br.net',
+'ad.doubleclick.net.32969.9240.302br.net',
+'ad.doubleclick.net.32971.9240.302br.net',
+'ad.doubleclick.net.32972.9240.302br.net',
+'ad.doubleclick.net.32974.9240.302br.net',
+'ad.doubleclick.net.32975.9240.302br.net',
+'ad.doubleclick.net.32977.9240.302br.net',
+'ad.doubleclick.net.32978.9240.302br.net',
+'ad.doubleclick.net.32985.9240.302br.net',
+'ad.doubleclick.net.32986.9240.302br.net',
+'ad.doubleclick.net.32987.9240.302br.net',
+'ad.doubleclick.net.32994.9240.302br.net',
+'ad.doubleclick.net.32995.9240.302br.net',
+'ad.doubleclick.net.32996.9240.302br.net',
+'ad.doubleclick.net.33019.9240.302br.net',
+'ad.doubleclick.net.33020.9240.302br.net',
+'ad.doubleclick.net.33021.9240.302br.net',
+'ad.doubleclick.net.33022.9240.302br.net',
+'ad.doubleclick.net.33023.9240.302br.net',
+'ad.doubleclick.net.33025.9240.302br.net',
+'ad.doubleclick.net.33026.9240.302br.net',
+'ad.doubleclick.net.33028.9240.302br.net',
+'ad.doubleclick.net.33029.9240.302br.net',
+'ad.doubleclick.net.33031.9240.302br.net',
+'ad.doubleclick.net.33032.9240.302br.net',
+'ad.doubleclick.net.33040.9240.302br.net',
+'ad.doubleclick.net.33041.9240.302br.net',
+'ad.doubleclick.net.33046.9240.302br.net',
+'ad.doubleclick.net.33047.9240.302br.net',
+'ad.doubleclick.net.33048.9240.302br.net',
+'ad.doubleclick.net.33049.9240.302br.net',
+'ad.doubleclick.net.33050.9240.302br.net',
+'ad.doubleclick.net.33052.9240.302br.net',
+'ad.doubleclick.net.33053.9240.302br.net',
+'ad.doubleclick.net.33054.9240.302br.net',
+'ad.doubleclick.net.33055.9240.302br.net',
+'ad.doubleclick.net.33056.9240.302br.net',
+'ad.doubleclick.net.33067.9239.302br.net',
+'ad.doubleclick.net.33068.9239.302br.net',
+'ad.doubleclick.net.33073.9239.302br.net',
+'ad.doubleclick.net.33075.9239.302br.net',
+'ad.doubleclick.net.33079.9239.302br.net',
+'ad.doubleclick.net.33081.9239.302br.net',
+'ad.doubleclick.net.33091.9240.302br.net',
+'ad.doubleclick.net.33093.9240.302br.net',
+'ad.doubleclick.net.33095.9240.302br.net',
+'ad.doubleclick.net.33099.9240.302br.net',
+'ad.doubleclick.net.33101.9240.302br.net',
+'ad.doubleclick.net.33110.9240.302br.net',
+'ad.doubleclick.net.33111.9240.302br.net',
+'ad.doubleclick.net.33113.9240.302br.net',
+'ad.doubleclick.net.33115.9239.302br.net',
+'ad.doubleclick.net.33118.9240.302br.net',
+'ad.doubleclick.net.33119.9240.302br.net',
+'ad.doubleclick.net.33124.9240.302br.net',
+'ad.doubleclick.net.33125.9240.302br.net',
+'ad.doubleclick.net.33127.9240.302br.net',
+'ad.doubleclick.net.33128.9239.302br.net',
+'ad.doubleclick.net.33129.9240.302br.net',
+'ad.doubleclick.net.33131.9240.302br.net',
+'ad.doubleclick.net.33134.9239.302br.net',
+'ad.doubleclick.net.33135.9240.302br.net',
+'ad.doubleclick.net.33136.9239.302br.net',
+'ad.doubleclick.net.33137.9240.302br.net',
+'ad.doubleclick.net.33138.9239.302br.net',
+'ad.doubleclick.net.33141.9239.302br.net',
+'ad.doubleclick.net.33142.9240.302br.net',
+'ad.doubleclick.net.33143.9240.302br.net',
+'ad.doubleclick.net.33144.9239.302br.net',
+'ad.doubleclick.net.33147.9239.302br.net',
+'ad.doubleclick.net.33148.9240.302br.net',
+'ad.doubleclick.net.33149.9240.302br.net',
+'ad.doubleclick.net.33151.9240.302br.net',
+'ad.doubleclick.net.33152.9240.302br.net',
+'ad.doubleclick.net.33154.9240.302br.net',
+'ad.doubleclick.net.33155.9240.302br.net',
+'ad.doubleclick.net.33157.9240.302br.net',
+'ad.doubleclick.net.33158.9240.302br.net',
+'ad.doubleclick.net.33160.9240.302br.net',
+'ad.doubleclick.net.33161.9240.302br.net',
+'ad.doubleclick.net.33166.9240.302br.net',
+'ad.doubleclick.net.33167.9240.302br.net',
+'ad.doubleclick.net.33181.9172.302br.net',
+'ad.doubleclick.net.33184.9172.302br.net',
+'ad.doubleclick.net.33187.9172.302br.net',
+'ad.doubleclick.net.33190.9172.302br.net',
+'ad.doubleclick.net.33193.9172.302br.net',
+'ad.doubleclick.net.33194.9172.302br.net',
+'ad.doubleclick.net.33196.9172.302br.net',
+'ad.doubleclick.net.33197.9172.302br.net',
+'ad.doubleclick.net.33202.9172.302br.net',
+'ad.doubleclick.net.33205.9172.302br.net',
+'ad.doubleclick.net.33208.9172.302br.net',
+'ad.doubleclick.net.33211.9172.302br.net',
+'ad.doubleclick.net.33217.9172.302br.net',
+'ad.doubleclick.net.33220.9172.302br.net',
+'ad.doubleclick.net.33223.9172.302br.net',
+'ad.doubleclick.net.33226.9172.302br.net',
+'ad.doubleclick.net.33229.9172.302br.net',
+'ad.doubleclick.net.33230.9172.302br.net',
+'ad.doubleclick.net.33232.9172.302br.net',
+'ad.doubleclick.net.33235.9172.302br.net',
+'ad.doubleclick.net.33236.9172.302br.net',
+'ad.doubleclick.net.33238.9172.302br.net',
+'ad.doubleclick.net.33239.9172.302br.net',
+'ad.doubleclick.net.33241.9172.302br.net',
+'ad.doubleclick.net.33242.9172.302br.net',
+'ad.doubleclick.net.33244.9172.302br.net',
+'ad.doubleclick.net.33247.9172.302br.net',
+'ad.doubleclick.net.33250.9172.302br.net',
+'ad.doubleclick.net.33253.9172.302br.net',
+'ad.doubleclick.net.33527.9212.302br.net',
+'ad.doubleclick.net.33530.9212.302br.net',
+'ad.doubleclick.net.33533.9212.302br.net',
+'ad.doubleclick.net.33536.9212.302br.net',
+'ad.doubleclick.net.33539.9212.302br.net',
+'ad.doubleclick.net.33542.9212.302br.net',
+'ad.doubleclick.net.33545.9212.302br.net',
+'ad.doubleclick.net.33548.9212.302br.net',
+'ad.doubleclick.net.33551.9212.302br.net',
+'ad.doubleclick.net.33556.9212.302br.net',
+'ad.doubleclick.net.33559.9212.302br.net',
+'ad.doubleclick.net.33562.9212.302br.net',
+'ad.doubleclick.net.33564.9212.302br.net',
+'ad.doubleclick.net.33565.9212.302br.net',
+'ad.doubleclick.net.33567.9212.302br.net',
+'ad.doubleclick.net.33568.9212.302br.net',
+'ad.doubleclick.net.33570.9212.302br.net',
+'ad.doubleclick.net.33571.9212.302br.net',
+'ad.doubleclick.net.33572.9212.302br.net',
+'ad.doubleclick.net.33573.9212.302br.net',
+'ad.doubleclick.net.33574.9212.302br.net',
+'ad.doubleclick.net.33576.9212.302br.net',
+'ad.doubleclick.net.33577.9212.302br.net',
+'ad.doubleclick.net.33578.9212.302br.net',
+'ad.doubleclick.net.33579.9212.302br.net',
+'ad.doubleclick.net.33580.9212.302br.net',
+'ad.doubleclick.net.33605.9249.302br.net',
+'ad.doubleclick.net.33606.9249.302br.net',
+'ad.doubleclick.net.33607.9249.302br.net',
+'ad.doubleclick.net.33608.9249.302br.net',
+'ad.doubleclick.net.33609.9249.302br.net',
+'ad.doubleclick.net.33610.9249.302br.net',
+'ad.doubleclick.net.33731.9250.302br.net',
+'ad.doubleclick.net.33734.9250.302br.net',
+'ad.doubleclick.net.33737.9250.302br.net',
+'ad.doubleclick.net.33740.9250.302br.net',
+'ad.doubleclick.net.33743.9250.302br.net',
+'ad.doubleclick.net.33746.9250.302br.net',
+'ad.doubleclick.net.33749.9250.302br.net',
+'ad.doubleclick.net.33752.9250.302br.net',
+'ad.doubleclick.net.33755.9250.302br.net',
+'ad.doubleclick.net.33758.9250.302br.net',
+'ad.doubleclick.net.33761.9250.302br.net',
+'ad.doubleclick.net.33764.9250.302br.net',
+'ad.doubleclick.net.33767.9250.302br.net',
+'ad.doubleclick.net.33770.9250.302br.net',
+'ad.doubleclick.net.33773.9250.302br.net',
+'ad.doubleclick.net.33776.9250.302br.net',
+'ad.doubleclick.net.33779.9250.302br.net',
+'ad.doubleclick.net.33782.9250.302br.net',
+'ad.doubleclick.net.33785.9250.302br.net',
+'ad.doubleclick.net.33788.9250.302br.net',
+'ad.doubleclick.net.33791.9250.302br.net',
+'ad.doubleclick.net.33794.9250.302br.net',
+'ad.doubleclick.net.33797.9250.302br.net',
+'ad.doubleclick.net.33800.9250.302br.net',
+'ad.doubleclick.net.33803.9250.302br.net',
+'ad.doubleclick.net.33806.9250.302br.net',
+'ad.doubleclick.net.33809.9250.302br.net',
+'ad.doubleclick.net.33812.9250.302br.net',
+'ad.doubleclick.net.33815.9250.302br.net',
+'ad.doubleclick.net.33818.9250.302br.net',
+'ad.doubleclick.net.33821.9250.302br.net',
+'ad.doubleclick.net.33824.9250.302br.net',
+'ad.doubleclick.net.33825.9250.302br.net',
+'ad.doubleclick.net.33826.9250.302br.net',
+'ad.doubleclick.net.33827.9250.302br.net',
+'ad.doubleclick.net.33828.9250.302br.net',
+'ad.doubleclick.net.33829.9250.302br.net',
+'ad.doubleclick.net.33830.9250.302br.net',
+'ad.doubleclick.net.33831.9250.302br.net',
+'ad.doubleclick.net.33832.9250.302br.net',
+'ad.doubleclick.net.33833.9250.302br.net',
+'ad.doubleclick.net.33834.9250.302br.net',
+'ad.doubleclick.net.33835.9250.302br.net',
+'ad.doubleclick.net.33836.9250.302br.net',
+'ad.doubleclick.net.33837.9250.302br.net',
+'ad.doubleclick.net.33838.9250.302br.net',
+'ad.doubleclick.net.33839.9250.302br.net',
+'ad.doubleclick.net.33840.9250.302br.net',
+'ad.doubleclick.net.33841.9250.302br.net',
+'ad.doubleclick.net.33842.9250.302br.net',
+'ad.doubleclick.net.33843.9250.302br.net',
+'ad.doubleclick.net.33844.9250.302br.net',
+'ad.doubleclick.net.33845.9250.302br.net',
+'ad.doubleclick.net.33846.9250.302br.net',
+'ad.doubleclick.net.33847.9250.302br.net',
+'ad.doubleclick.net.33848.9250.302br.net',
+'ad.doubleclick.net.33849.9250.302br.net',
+'ad.doubleclick.net.33850.9250.302br.net',
+'ad.doubleclick.net.33851.9250.302br.net',
+'ad.doubleclick.net.33852.9250.302br.net',
+'ad.doubleclick.net.33853.9250.302br.net',
+'ad.doubleclick.net.33854.9250.302br.net',
+'ad.doubleclick.net.33855.9250.302br.net',
+'ad.doubleclick.net.33856.9250.302br.net',
+'ad.doubleclick.net.33857.9250.302br.net',
+'ad.doubleclick.net.33858.9250.302br.net',
+'ad.doubleclick.net.33859.9250.302br.net',
+'ad.doubleclick.net.33860.9250.302br.net',
+'ad.doubleclick.net.34320.9225.302br.net',
+'ad.doubleclick.net.34322.9225.302br.net',
+'ad.doubleclick.net.34324.9225.302br.net',
+'ad.doubleclick.net.34325.9225.302br.net',
+'ad.doubleclick.net.34326.9225.302br.net',
+'ad.doubleclick.net.34327.9225.302br.net',
+'ad.doubleclick.net.34328.9225.302br.net',
+'ad.doubleclick.net.34330.9225.302br.net',
+'ad.doubleclick.net.34331.9225.302br.net',
+'ad.doubleclick.net.34332.9225.302br.net',
+'ad.doubleclick.net.34333.9225.302br.net',
+'ad.doubleclick.net.34334.9225.302br.net',
+'ad.doubleclick.net.34335.9225.302br.net',
+'ad.doubleclick.net.34336.9225.302br.net',
+'ad.doubleclick.net.34337.9225.302br.net',
+'ad.doubleclick.net.34338.9225.302br.net',
+'ad.doubleclick.net.34339.9225.302br.net',
+'ad.doubleclick.net.34340.9225.302br.net',
+'ad.doubleclick.net.34341.9225.302br.net',
+'ad.doubleclick.net.34342.9225.302br.net',
+'ad.doubleclick.net.34344.9225.302br.net',
+'ad.doubleclick.net.34346.9225.302br.net',
+'ad.doubleclick.net.34348.9225.302br.net',
+'ad.doubleclick.net.34350.9225.302br.net',
+'ad.doubleclick.net.34354.9225.302br.net',
+'ad.doubleclick.net.34356.9225.302br.net',
+'ad.doubleclick.net.34358.9225.302br.net',
+'ad.doubleclick.net.34360.9225.302br.net',
+'ad.doubleclick.net.34361.9225.302br.net',
+'ad.doubleclick.net.34362.9225.302br.net',
+'ad.doubleclick.net.34363.9225.302br.net',
+'ad.doubleclick.net.34364.9225.302br.net',
+'ad.doubleclick.net.34365.9225.302br.net',
+'ad.doubleclick.net.34366.9225.302br.net',
+'ad.doubleclick.net.34378.9225.302br.net',
+'ad.doubleclick.net.34380.9225.302br.net',
+'ad.doubleclick.net.34382.9225.302br.net',
+'ad.doubleclick.net.34384.9225.302br.net',
+'ad.doubleclick.net.34386.9225.302br.net',
+'ad.doubleclick.net.34388.9225.302br.net',
+'ad.doubleclick.net.34390.9225.302br.net',
+'ad.doubleclick.net.34394.9225.302br.net',
+'ad.doubleclick.net.34396.9225.302br.net',
+'ad.doubleclick.net.34398.9225.302br.net',
+'ad.doubleclick.net.34399.9225.302br.net',
+'ad.doubleclick.net.34400.9225.302br.net',
+'ad.doubleclick.net.34402.9225.302br.net',
+'ad.doubleclick.net.34404.9225.302br.net',
+'ad.doubleclick.net.34405.9225.302br.net',
+'ad.doubleclick.net.34406.9225.302br.net',
+'ad.doubleclick.net.34414.9225.302br.net',
+'ad.doubleclick.net.34416.9225.302br.net',
+'ad.doubleclick.net.34420.9225.302br.net',
+'ad.doubleclick.net.34422.9225.302br.net',
+'ad.doubleclick.net.34424.9225.302br.net',
+'ad.doubleclick.net.34426.9225.302br.net',
+'ad.doubleclick.net.34428.9225.302br.net',
+'ad.doubleclick.net.34430.9225.302br.net',
+'ad.doubleclick.net.34432.9225.302br.net',
+'ad.doubleclick.net.34434.9225.302br.net',
+'ad.doubleclick.net.34436.9225.302br.net',
+'ad.doubleclick.net.34437.9225.302br.net',
+'ad.doubleclick.net.34438.9225.302br.net',
+'ad.doubleclick.net.34439.9225.302br.net',
+'ad.doubleclick.net.34440.9225.302br.net',
+'ad.doubleclick.net.34441.9225.302br.net',
+'ad.doubleclick.net.34442.9225.302br.net',
+'ad.doubleclick.net.34444.9225.302br.net',
+'ad.doubleclick.net.34446.9225.302br.net',
+'ad.doubleclick.net.34448.9225.302br.net',
+'ad.doubleclick.net.34449.9250.302br.net',
+'ad.doubleclick.net.34452.9250.302br.net',
+'ad.doubleclick.net.34455.9250.302br.net',
+'ad.doubleclick.net.34458.9250.302br.net',
+'ad.doubleclick.net.34461.9250.302br.net',
+'ad.doubleclick.net.34464.9250.302br.net',
+'ad.doubleclick.net.34467.9250.302br.net',
+'ad.doubleclick.net.34470.9250.302br.net',
+'ad.doubleclick.net.34473.9250.302br.net',
+'ad.doubleclick.net.34476.9250.302br.net',
+'ad.doubleclick.net.34477.9250.302br.net',
+'ad.doubleclick.net.34478.9250.302br.net',
+'ad.doubleclick.net.34479.9250.302br.net',
+'ad.doubleclick.net.34480.9250.302br.net',
+'ad.doubleclick.net.34481.9250.302br.net',
+'ad.doubleclick.net.34482.9250.302br.net',
+'ad.doubleclick.net.34536.9252.302br.net',
+'ad.doubleclick.net.34538.9252.302br.net',
+'ad.doubleclick.net.34539.9252.302br.net',
+'ad.doubleclick.net.34541.9252.302br.net',
+'ad.doubleclick.net.34542.9252.302br.net',
+'ad.doubleclick.net.34544.9252.302br.net',
+'ad.doubleclick.net.34545.9252.302br.net',
+'ad.doubleclick.net.34547.9252.302br.net',
+'ad.doubleclick.net.34548.9252.302br.net',
+'ad.doubleclick.net.34550.9252.302br.net',
+'ad.doubleclick.net.34551.9252.302br.net',
+'ad.doubleclick.net.34552.9252.302br.net',
+'ad.doubleclick.net.34553.9252.302br.net',
+'ad.doubleclick.net.34554.9252.302br.net',
+'ad.doubleclick.net.34555.9252.302br.net',
+'ad.doubleclick.net.34556.9252.302br.net',
+'ad.doubleclick.net.34557.9252.302br.net',
+'ad.doubleclick.net.34558.9252.302br.net',
+'ad.doubleclick.net.34559.9252.302br.net',
+'ad.doubleclick.net.34560.9252.302br.net',
+'ad.doubleclick.net.34561.9252.302br.net',
+'ad.doubleclick.net.34562.9252.302br.net',
+'ad.doubleclick.net.34563.9252.302br.net',
+'ad.doubleclick.net.34564.9252.302br.net',
+'ad.doubleclick.net.34565.9252.302br.net',
+'ad.doubleclick.net.34566.9252.302br.net',
+'ad.doubleclick.net.34567.9252.302br.net',
+'ad.doubleclick.net.34568.9252.302br.net',
+'ad.doubleclick.net.34569.9252.302br.net',
+'ad.doubleclick.net.34571.9252.302br.net',
+'ad.doubleclick.net.34572.9252.302br.net',
+'ad.doubleclick.net.34574.9252.302br.net',
+'ad.doubleclick.net.34575.9252.302br.net',
+'ad.doubleclick.net.34577.9252.302br.net',
+'ad.doubleclick.net.34578.9252.302br.net',
+'ad.doubleclick.net.34580.9252.302br.net',
+'ad.doubleclick.net.34581.9252.302br.net',
+'ad.doubleclick.net.34583.9252.302br.net',
+'ad.doubleclick.net.34584.9252.302br.net',
+'ad.doubleclick.net.34586.9252.302br.net',
+'ad.doubleclick.net.34587.9252.302br.net',
+'ad.doubleclick.net.34589.9252.302br.net',
+'ad.doubleclick.net.34590.9252.302br.net',
+'ad.doubleclick.net.34591.9252.302br.net',
+'ad.doubleclick.net.34592.9252.302br.net',
+'ad.doubleclick.net.34593.9252.302br.net',
+'ad.doubleclick.net.34595.9252.302br.net',
+'ad.doubleclick.net.34600.9252.302br.net',
+'ad.doubleclick.net.34601.9252.302br.net',
+'ad.doubleclick.net.34603.9252.302br.net',
+'ad.doubleclick.net.34604.9252.302br.net',
+'ad.doubleclick.net.34606.9252.302br.net',
+'ad.doubleclick.net.34607.9252.302br.net',
+'ad.doubleclick.net.34609.9252.302br.net',
+'ad.doubleclick.net.34610.9252.302br.net',
+'ad.doubleclick.net.34612.9252.302br.net',
+'ad.doubleclick.net.34613.9252.302br.net',
+'ad.doubleclick.net.34615.9252.302br.net',
+'ad.doubleclick.net.34616.9252.302br.net',
+'ad.doubleclick.net.34618.9252.302br.net',
+'ad.doubleclick.net.34619.9252.302br.net',
+'ad.doubleclick.net.34621.9252.302br.net',
+'ad.doubleclick.net.34622.9252.302br.net',
+'ad.doubleclick.net.34624.9252.302br.net',
+'ad.doubleclick.net.34625.9252.302br.net',
+'ad.doubleclick.net.34632.9252.302br.net',
+'ad.doubleclick.net.34634.9252.302br.net',
+'ad.doubleclick.net.34638.9252.302br.net',
+'ad.doubleclick.net.34640.9252.302br.net',
+'ad.doubleclick.net.34641.9252.302br.net',
+'ad.doubleclick.net.34642.9252.302br.net',
+'ad.doubleclick.net.34643.9252.302br.net',
+'ad.doubleclick.net.34645.9252.302br.net',
+'ad.doubleclick.net.34646.9252.302br.net',
+'ad.doubleclick.net.34647.9252.302br.net',
+'ad.doubleclick.net.34649.9252.302br.net',
+'ad.doubleclick.net.34650.9252.302br.net',
+'ad.doubleclick.net.34651.9252.302br.net',
+'ad.doubleclick.net.34652.9252.302br.net',
+'ad.doubleclick.net.34657.9252.302br.net',
+'ad.doubleclick.net.34660.9252.302br.net',
+'ad.doubleclick.net.34663.9252.302br.net',
+'ad.doubleclick.net.34664.9252.302br.net',
+'ad.doubleclick.net.34665.9252.302br.net',
+'ad.doubleclick.net.34666.9252.302br.net',
+'ad.doubleclick.net.34667.9252.302br.net',
+'ad.doubleclick.net.34668.9252.302br.net',
+'ad.doubleclick.net.34670.9252.302br.net',
+'ad.doubleclick.net.34671.9252.302br.net',
+'ad.doubleclick.net.34673.9252.302br.net',
+'ad.doubleclick.net.34675.9252.302br.net',
+'ad.doubleclick.net.34676.9252.302br.net',
+'ad.doubleclick.net.34677.9252.302br.net',
+'ad.doubleclick.net.34679.9252.302br.net',
+'ad.doubleclick.net.34695.9252.302br.net',
+'ad.doubleclick.net.34697.9252.302br.net',
+'ad.doubleclick.net.34708.9252.302br.net',
+'ad.doubleclick.net.34709.9252.302br.net',
+'ad.doubleclick.net.34711.9252.302br.net',
+'ad.doubleclick.net.34716.9252.302br.net',
+'ad.doubleclick.net.34718.9252.302br.net',
+'ad.doubleclick.net.34719.9252.302br.net',
+'ad.doubleclick.net.34721.9252.302br.net',
+'ad.doubleclick.net.34722.9252.302br.net',
+'ad.doubleclick.net.34724.9252.302br.net',
+'ad.doubleclick.net.34728.9252.302br.net',
+'ad.doubleclick.net.34730.9252.302br.net',
+'ad.doubleclick.net.34731.9252.302br.net',
+'ad.doubleclick.net.34733.9252.302br.net',
+'ad.doubleclick.net.34884.9239.302br.net',
+'ad.doubleclick.net.34886.9239.302br.net',
+'ad.doubleclick.net.34890.9239.302br.net',
+'ad.doubleclick.net.34892.9239.302br.net',
+'ad.doubleclick.net.34896.9239.302br.net',
+'ad.doubleclick.net.34898.9239.302br.net',
+'ad.doubleclick.net.34899.9239.302br.net',
+'ad.doubleclick.net.34901.9239.302br.net',
+'ad.doubleclick.net.34902.9239.302br.net',
+'ad.doubleclick.net.34904.9239.302br.net',
+'ad.doubleclick.net.34908.9239.302br.net',
+'ad.doubleclick.net.34910.9239.302br.net',
+'ad.doubleclick.net.34911.9239.302br.net',
+'ad.doubleclick.net.34913.9239.302br.net',
+'ad.doubleclick.net.34919.9239.302br.net',
+'ad.doubleclick.net.34920.9239.302br.net',
+'ad.doubleclick.net.34922.9239.302br.net',
+'ad.doubleclick.net.34923.9239.302br.net',
+'ad.doubleclick.net.34925.9239.302br.net',
+'ad.doubleclick.net.34932.9239.302br.net',
+'ad.doubleclick.net.34934.9239.302br.net',
+'ad.doubleclick.net.34938.9239.302br.net',
+'ad.doubleclick.net.34940.9239.302br.net',
+'ad.doubleclick.net.34943.9239.302br.net',
+'ad.doubleclick.net.34947.9239.302br.net',
+'ad.doubleclick.net.34949.9239.302br.net',
+'ad.doubleclick.net.34955.9239.302br.net',
+'ad.doubleclick.net.34964.9239.302br.net',
+'ad.doubleclick.net.34967.9239.302br.net',
+'ad.doubleclick.net.34970.9239.302br.net',
+'ad.doubleclick.net.34973.9239.302br.net',
+'ad.doubleclick.net.34976.9239.302br.net',
+'ad.doubleclick.net.35032.9076.302br.net',
+'ad.doubleclick.net.35035.9076.302br.net',
+'ad.doubleclick.net.35036.9076.302br.net',
+'ad.doubleclick.net.35038.9076.302br.net',
+'ad.doubleclick.net.35039.9076.302br.net',
+'ad.doubleclick.net.35041.9076.302br.net',
+'ad.doubleclick.net.35042.9076.302br.net',
+'ad.doubleclick.net.35044.9076.302br.net',
+'ad.doubleclick.net.35047.9076.302br.net',
+'ad.doubleclick.net.35050.9076.302br.net',
+'ad.doubleclick.net.35053.9076.302br.net',
+'ad.doubleclick.net.35056.9076.302br.net',
+'ad.doubleclick.net.35059.9076.302br.net',
+'ad.doubleclick.net.35060.9076.302br.net',
+'ad.doubleclick.net.35062.9076.302br.net',
+'ad.doubleclick.net.35065.9076.302br.net',
+'ad.doubleclick.net.35101.9250.302br.net',
+'ad.doubleclick.net.35104.9250.302br.net',
+'ad.doubleclick.net.35107.9250.302br.net',
+'ad.doubleclick.net.35110.9250.302br.net',
+'ad.doubleclick.net.35145.9256.302br.net',
+'ad.doubleclick.net.35146.9256.302br.net',
+'ad.doubleclick.net.35148.9256.302br.net',
+'ad.doubleclick.net.35149.9256.302br.net',
+'ad.doubleclick.net.35150.9256.302br.net',
+'ad.doubleclick.net.35151.9256.302br.net',
+'ad.doubleclick.net.35152.9256.302br.net',
+'ad.doubleclick.net.35153.9256.302br.net',
+'ad.doubleclick.net.35154.9256.302br.net',
+'ad.doubleclick.net.35155.9256.302br.net',
+'ad.doubleclick.net.35157.9256.302br.net',
+'ad.doubleclick.net.35163.9256.302br.net',
+'ad.doubleclick.net.35166.9256.302br.net',
+'ad.doubleclick.net.35244.9264.302br.net',
+'ad.doubleclick.net.35245.9264.302br.net',
+'ad.doubleclick.net.35246.9264.302br.net',
+'ad.doubleclick.net.35250.9264.302br.net',
+'ad.doubleclick.net.35251.9264.302br.net',
+'ad.doubleclick.net.35252.9264.302br.net',
+'ad.doubleclick.net.35265.9264.302br.net',
+'ad.doubleclick.net.35266.9264.302br.net',
+'ad.doubleclick.net.35267.9264.302br.net',
+'ad.doubleclick.net.35268.9264.302br.net',
+'ad.doubleclick.net.35269.9264.302br.net',
+'ad.doubleclick.net.35270.9264.302br.net',
+'ad.doubleclick.net.35278.9264.302br.net',
+'ad.doubleclick.net.35279.9264.302br.net',
+'ad.doubleclick.net.35284.9264.302br.net',
+'ad.doubleclick.net.35285.9264.302br.net',
+'ad.doubleclick.net.35287.9264.302br.net',
+'ad.doubleclick.net.35288.9264.302br.net',
+'ad.doubleclick.net.35290.9264.302br.net',
+'ad.doubleclick.net.35291.9264.302br.net',
+'ad.doubleclick.net.35293.9264.302br.net',
+'ad.doubleclick.net.35294.9264.302br.net',
+'ad.doubleclick.net.35296.9264.302br.net',
+'ad.doubleclick.net.35297.9264.302br.net',
+'ad.doubleclick.net.35299.9264.302br.net',
+'ad.doubleclick.net.35300.9264.302br.net',
+'ad.doubleclick.net.35305.9264.302br.net',
+'ad.doubleclick.net.35306.9264.302br.net',
+'ad.doubleclick.net.35308.9264.302br.net',
+'ad.doubleclick.net.35309.9264.302br.net',
+'ad.doubleclick.net.35314.9264.302br.net',
+'ad.doubleclick.net.35315.9264.302br.net',
+'ad.doubleclick.net.35317.9264.302br.net',
+'ad.doubleclick.net.35318.9264.302br.net',
+'ad.doubleclick.net.35320.9264.302br.net',
+'ad.doubleclick.net.35321.9264.302br.net',
+'ad.doubleclick.net.35323.9264.302br.net',
+'ad.doubleclick.net.35324.9264.302br.net',
+'ad.doubleclick.net.35332.9264.302br.net',
+'ad.doubleclick.net.35333.9264.302br.net',
+'ad.doubleclick.net.35360.9265.302br.net',
+'ad.doubleclick.net.35361.9265.302br.net',
+'ad.doubleclick.net.35362.9265.302br.net',
+'ad.doubleclick.net.35363.9265.302br.net',
+'ad.doubleclick.net.35364.9265.302br.net',
+'ad.doubleclick.net.35365.9265.302br.net',
+'ad.doubleclick.net.35366.9265.302br.net',
+'ad.doubleclick.net.35367.9265.302br.net',
+'ad.doubleclick.net.35368.9265.302br.net',
+'ad.doubleclick.net.35369.9265.302br.net',
+'ad.doubleclick.net.35370.9265.302br.net',
+'ad.doubleclick.net.35468.9269.302br.net',
+'ad.doubleclick.net.35471.9269.302br.net',
+'ad.doubleclick.net.35474.9269.302br.net',
+'ad.doubleclick.net.35477.9269.302br.net',
+'ad.doubleclick.net.35480.9269.302br.net',
+'ad.doubleclick.net.35483.9269.302br.net',
+'ad.doubleclick.net.35486.9269.302br.net',
+'ad.doubleclick.net.35489.9269.302br.net',
+'ad.doubleclick.net.35492.9269.302br.net',
+'ad.doubleclick.net.35496.9269.302br.net',
+'ad.doubleclick.net.35497.9269.302br.net',
+'ad.doubleclick.net.35499.9269.302br.net',
+'ad.doubleclick.net.35500.9269.302br.net',
+'ad.doubleclick.net.35501.9269.302br.net',
+'ad.doubleclick.net.35502.9269.302br.net',
+'ad.doubleclick.net.35503.9269.302br.net',
+'ad.doubleclick.net.35505.9269.302br.net',
+'ad.doubleclick.net.35506.9269.302br.net',
+'ad.doubleclick.net.35507.9269.302br.net',
+'ad.doubleclick.net.35508.9269.302br.net',
+'ad.doubleclick.net.35509.9269.302br.net',
+'ad.doubleclick.net.35510.9269.302br.net',
+'ad.doubleclick.net.35511.9269.302br.net',
+'ad.doubleclick.net.35512.9269.302br.net',
+'ad.doubleclick.net.35514.9269.302br.net',
+'ad.doubleclick.net.35515.9269.302br.net',
+'ad.doubleclick.net.35517.9269.302br.net',
+'ad.doubleclick.net.35518.9269.302br.net',
+'ad.doubleclick.net.35520.9269.302br.net',
+'ad.doubleclick.net.35521.9269.302br.net',
+'ad.doubleclick.net.35523.9269.302br.net',
+'ad.doubleclick.net.35524.9269.302br.net',
+'ad.doubleclick.net.35526.9269.302br.net',
+'ad.doubleclick.net.35527.9269.302br.net',
+'ad.doubleclick.net.35529.9269.302br.net',
+'ad.doubleclick.net.35530.9269.302br.net',
+'ad.doubleclick.net.35531.9269.302br.net',
+'ad.doubleclick.net.35532.9269.302br.net',
+'ad.doubleclick.net.35533.9269.302br.net',
+'ad.doubleclick.net.35534.9269.302br.net',
+'ad.doubleclick.net.35535.9269.302br.net',
+'ad.doubleclick.net.35536.9269.302br.net',
+'ad.doubleclick.net.35541.9269.302br.net',
+'ad.doubleclick.net.35542.9269.302br.net',
+'ad.doubleclick.net.35550.9269.302br.net',
+'ad.doubleclick.net.35551.9269.302br.net',
+'ad.doubleclick.net.35552.9269.302br.net',
+'ad.doubleclick.net.35553.9269.302br.net',
+'ad.doubleclick.net.35554.9269.302br.net',
+'ad.doubleclick.net.35555.9269.302br.net',
+'ad.doubleclick.net.35556.9269.302br.net',
+'ad.doubleclick.net.35557.9269.302br.net',
+'ad.doubleclick.net.35559.9269.302br.net',
+'ad.doubleclick.net.35560.9269.302br.net',
+'ad.doubleclick.net.35561.9269.302br.net',
+'ad.doubleclick.net.35562.9269.302br.net',
+'ad.doubleclick.net.35563.9269.302br.net',
+'ad.doubleclick.net.35564.9269.302br.net',
+'ad.doubleclick.net.35565.9269.302br.net',
+'ad.doubleclick.net.35566.9269.302br.net',
+'ad.doubleclick.net.35568.9264.302br.net',
+'ad.doubleclick.net.35569.9264.302br.net',
+'ad.doubleclick.net.35574.9264.302br.net',
+'ad.doubleclick.net.35575.9264.302br.net',
+'ad.doubleclick.net.35589.9270.302br.net',
+'ad.doubleclick.net.35592.9270.302br.net',
+'ad.doubleclick.net.35634.9239.302br.net',
+'ad.doubleclick.net.35635.9240.302br.net',
+'ad.doubleclick.net.35638.9053.302br.net',
+'ad.doubleclick.net.35641.9053.302br.net',
+'ad.doubleclick.net.35644.9053.302br.net',
+'ad.doubleclick.net.35647.9053.302br.net',
+'ad.doubleclick.net.35650.9053.302br.net',
+'ad.doubleclick.net.35653.9053.302br.net',
+'ad.doubleclick.net.35656.9053.302br.net',
+'ad.doubleclick.net.35659.9053.302br.net',
+'ad.doubleclick.net.35660.9053.302br.net',
+'ad.doubleclick.net.35662.9053.302br.net',
+'ad.doubleclick.net.35665.9053.302br.net',
+'ad.doubleclick.net.35668.9053.302br.net',
+'ad.doubleclick.net.35671.9053.302br.net',
+'ad.doubleclick.net.35682.9239.302br.net',
+'ad.doubleclick.net.35683.9239.302br.net',
+'ad.doubleclick.net.35685.9239.302br.net',
+'ad.doubleclick.net.35686.9239.302br.net',
+'ad.doubleclick.net.35687.9239.302br.net',
+'ad.doubleclick.net.35689.9239.302br.net',
+'ad.doubleclick.net.35692.9239.302br.net',
+'ad.doubleclick.net.35693.9239.302br.net',
+'ad.doubleclick.net.35695.9239.302br.net',
+'ad.doubleclick.net.35696.9239.302br.net',
+'ad.doubleclick.net.35698.9239.302br.net',
+'ad.doubleclick.net.35701.9239.302br.net',
+'ad.doubleclick.net.35702.9256.302br.net',
+'ad.doubleclick.net.35703.9256.302br.net',
+'ad.doubleclick.net.35704.9256.302br.net',
+'ad.doubleclick.net.35706.9256.302br.net',
+'ad.doubleclick.net.35707.9256.302br.net',
+'ad.doubleclick.net.35709.9256.302br.net',
+'ad.doubleclick.net.35710.9256.302br.net',
+'ad.doubleclick.net.35712.9256.302br.net',
+'ad.doubleclick.net.35713.9256.302br.net',
+'ad.doubleclick.net.35714.9256.302br.net',
+'ad.doubleclick.net.35715.9256.302br.net',
+'ad.doubleclick.net.35716.9256.302br.net',
+'ad.doubleclick.net.35717.9256.302br.net',
+'ad.doubleclick.net.35718.9256.302br.net',
+'ad.doubleclick.net.35719.9256.302br.net',
+'ad.doubleclick.net.35720.9256.302br.net',
+'ad.doubleclick.net.35721.9256.302br.net',
+'ad.doubleclick.net.35722.9256.302br.net',
+'ad.doubleclick.net.35723.9256.302br.net',
+'ad.doubleclick.net.35724.9256.302br.net',
+'ad.doubleclick.net.35725.9256.302br.net',
+'ad.doubleclick.net.35901.9274.302br.net',
+'ad.doubleclick.net.35902.9274.302br.net',
+'ad.doubleclick.net.35904.9274.302br.net',
+'ad.doubleclick.net.35905.9274.302br.net',
+'ad.doubleclick.net.35907.9274.302br.net',
+'ad.doubleclick.net.35908.9274.302br.net',
+'ad.doubleclick.net.35975.9239.302br.net',
+'ad.doubleclick.net.35976.9239.302br.net',
+'ad.doubleclick.net.35978.9239.302br.net',
+'ad.doubleclick.net.35979.9239.302br.net',
+'ad.doubleclick.net.35991.9276.302br.net',
+'ad.doubleclick.net.35992.9276.302br.net',
+'ad.doubleclick.net.35994.9276.302br.net',
+'ad.doubleclick.net.35995.9276.302br.net',
+'ad.doubleclick.net.35996.9276.302br.net',
+'ad.doubleclick.net.35997.9276.302br.net',
+'ad.doubleclick.net.35998.9276.302br.net',
+'ad.doubleclick.net.35999.9276.302br.net',
+'ad.doubleclick.net.36000.9276.302br.net',
+'ad.doubleclick.net.36001.9276.302br.net',
+'ad.doubleclick.net.36002.9276.302br.net',
+'ad.doubleclick.net.36003.9276.302br.net',
+'ad.doubleclick.net.36004.9276.302br.net',
+'ad.doubleclick.net.36006.9276.302br.net',
+'ad.doubleclick.net.36007.9276.302br.net',
+'ad.doubleclick.net.36008.9276.302br.net',
+'ad.doubleclick.net.36009.9276.302br.net',
+'ad.doubleclick.net.36010.9276.302br.net',
+'ad.doubleclick.net.36012.9276.302br.net',
+'ad.doubleclick.net.36013.9276.302br.net',
+'ad.doubleclick.net.36014.9276.302br.net',
+'ad.doubleclick.net.36015.9276.302br.net',
+'ad.doubleclick.net.36016.9276.302br.net',
+'ad.doubleclick.net.36048.9275.302br.net',
+'ad.doubleclick.net.36049.9275.302br.net',
+'ad.doubleclick.net.36065.9275.302br.net',
+'ad.doubleclick.net.36066.9275.302br.net',
+'ad.doubleclick.net.36067.9275.302br.net',
+'ad.doubleclick.net.36068.9275.302br.net',
+'ad.doubleclick.net.36069.9275.302br.net',
+'ad.doubleclick.net.36070.9275.302br.net',
+'ad.doubleclick.net.36072.9275.302br.net',
+'ad.doubleclick.net.36073.9275.302br.net',
+'ad.doubleclick.net.36075.9275.302br.net',
+'ad.doubleclick.net.36076.9275.302br.net',
+'ad.doubleclick.net.36078.9275.302br.net',
+'ad.doubleclick.net.36079.9275.302br.net',
+'ad.doubleclick.net.36080.9275.302br.net',
+'ad.doubleclick.net.36081.9275.302br.net',
+'ad.doubleclick.net.36082.9275.302br.net',
+'ad.doubleclick.net.36083.9275.302br.net',
+'ad.doubleclick.net.36084.9275.302br.net',
+'ad.doubleclick.net.36085.9275.302br.net',
+'ad.doubleclick.net.36369.9279.302br.net',
+'ad.doubleclick.net.36370.9279.302br.net',
+'ad.doubleclick.net.36371.9279.302br.net',
+'ad.doubleclick.net.36373.9279.302br.net',
+'ad.doubleclick.net.36374.9279.302br.net',
+'ad.doubleclick.net.36376.9279.302br.net',
+'ad.doubleclick.net.36377.9279.302br.net',
+'ad.doubleclick.net.36378.9279.302br.net',
+'ad.doubleclick.net.36379.9279.302br.net',
+'ad.doubleclick.net.36380.9279.302br.net',
+'ad.doubleclick.net.36381.9279.302br.net',
+'ad.doubleclick.net.36382.9279.302br.net',
+'ad.doubleclick.net.36383.9279.302br.net',
+'ad.doubleclick.net.36384.9279.302br.net',
+'ad.doubleclick.net.36385.9279.302br.net',
+'ad.doubleclick.net.36386.9279.302br.net',
+'ad.doubleclick.net.36389.9080.302br.net',
+'ad.doubleclick.net.36394.9076.302br.net',
+'ad.doubleclick.net.36397.9076.302br.net',
+'ad.doubleclick.net.36400.9077.302br.net',
+'ad.doubleclick.net.36401.9077.302br.net',
+'ad.doubleclick.net.36403.9077.302br.net',
+'ad.doubleclick.net.36404.9077.302br.net',
+'ad.doubleclick.net.36410.9078.302br.net',
+'ad.doubleclick.net.36415.9079.302br.net',
+'ad.doubleclick.net.36418.9081.302br.net',
+'ad.doubleclick.net.36421.9081.302br.net',
+'ad.doubleclick.net.36427.9084.302br.net',
+'ad.doubleclick.net.36433.9083.302br.net',
+'ad.doubleclick.net.36436.9083.302br.net',
+'ad.doubleclick.net.36437.9083.302br.net',
+'ad.doubleclick.net.36439.9083.302br.net',
+'ad.doubleclick.net.36442.9085.302br.net',
+'ad.doubleclick.net.36443.9085.302br.net',
+'ad.doubleclick.net.36445.9085.302br.net',
+'ad.doubleclick.net.36446.9085.302br.net',
+'ad.doubleclick.net.36448.9086.302br.net',
+'ad.doubleclick.net.36449.9086.302br.net',
+'ad.doubleclick.net.36451.9086.302br.net',
+'ad.doubleclick.net.36452.9086.302br.net',
+'ad.doubleclick.net.36457.9087.302br.net',
+'ad.doubleclick.net.36460.9280.302br.net',
+'ad.doubleclick.net.36462.9280.302br.net',
+'ad.doubleclick.net.36464.9280.302br.net',
+'ad.doubleclick.net.36466.9280.302br.net',
+'ad.doubleclick.net.36467.9250.302br.net',
+'ad.doubleclick.net.36470.9250.302br.net',
+'ad.doubleclick.net.36473.9250.302br.net',
+'ad.doubleclick.net.36476.9250.302br.net',
+'ad.doubleclick.net.36478.9250.302br.net',
+'ad.doubleclick.net.36481.9250.302br.net',
+'ad.doubleclick.net.36482.9250.302br.net',
+'ad.doubleclick.net.36484.9250.302br.net',
+'ad.doubleclick.net.36485.9250.302br.net',
+'ad.doubleclick.net.36487.9250.302br.net',
+'ad.doubleclick.net.36488.9250.302br.net',
+'ad.doubleclick.net.36490.9250.302br.net',
+'ad.doubleclick.net.36491.9250.302br.net',
+'ad.doubleclick.net.36493.9250.302br.net',
+'ad.doubleclick.net.36825.9285.302br.net',
+'ad.doubleclick.net.36864.9286.302br.net',
+'ad.doubleclick.net.36867.9286.302br.net',
+'ad.doubleclick.net.36870.9286.302br.net',
+'ad.doubleclick.net.36898.9252.302br.net',
+'ad.doubleclick.net.36899.9252.302br.net',
+'ad.doubleclick.net.36900.9252.302br.net',
+'ad.doubleclick.net.36901.9252.302br.net',
+'ad.doubleclick.net.36902.9252.302br.net',
+'ad.doubleclick.net.36904.9252.302br.net',
+'ad.doubleclick.net.36905.9252.302br.net',
+'ad.doubleclick.net.36906.9252.302br.net',
+'ad.doubleclick.net.36908.9252.302br.net',
+'ad.doubleclick.net.36909.9252.302br.net',
+'ad.doubleclick.net.36911.9252.302br.net',
+'ad.doubleclick.net.36912.9252.302br.net',
+'ad.doubleclick.net.36914.9252.302br.net',
+'ad.doubleclick.net.36915.9252.302br.net',
+'ad.doubleclick.net.36917.9252.302br.net',
+'ad.doubleclick.net.36918.9252.302br.net',
+'ad.doubleclick.net.36920.9252.302br.net',
+'ad.doubleclick.net.36933.9252.302br.net',
+'ad.doubleclick.net.36935.9252.302br.net',
+'ad.doubleclick.net.36936.9252.302br.net',
+'ad.doubleclick.net.36938.9252.302br.net',
+'ad.doubleclick.net.36939.9252.302br.net',
+'ad.doubleclick.net.36941.9252.302br.net',
+'ad.doubleclick.net.36942.9252.302br.net',
+'ad.doubleclick.net.36944.9252.302br.net',
+'ad.doubleclick.net.36945.9240.302br.net',
+'ad.doubleclick.net.36946.9240.302br.net',
+'ad.doubleclick.net.36947.9240.302br.net',
+'ad.doubleclick.net.36948.9240.302br.net',
+'ad.doubleclick.net.36949.9240.302br.net',
+'ad.doubleclick.net.36950.9240.302br.net',
+'ad.doubleclick.net.36952.9235.302br.net',
+'ad.doubleclick.net.36953.9235.302br.net',
+'ad.doubleclick.net.36955.9235.302br.net',
+'ad.doubleclick.net.36956.9235.302br.net',
+'ad.doubleclick.net.36957.9235.302br.net',
+'ad.doubleclick.net.36958.9235.302br.net',
+'ad.doubleclick.net.36959.9235.302br.net',
+'ad.doubleclick.net.36984.9240.302br.net',
+'ad.doubleclick.net.36987.9240.302br.net',
+'ad.doubleclick.net.36990.9240.302br.net',
+'ad.doubleclick.net.37004.9288.302br.net',
+'ad.doubleclick.net.37005.9288.302br.net',
+'ad.doubleclick.net.37007.9288.302br.net',
+'ad.doubleclick.net.37008.9288.302br.net',
+'ad.doubleclick.net.37010.9288.302br.net',
+'ad.doubleclick.net.37011.9288.302br.net',
+'ad.doubleclick.net.37013.9288.302br.net',
+'ad.doubleclick.net.37014.9288.302br.net',
+'ad.doubleclick.net.37025.9288.302br.net',
+'ad.doubleclick.net.37028.9290.302br.net',
+'ad.doubleclick.net.37031.9290.302br.net',
+'ad.doubleclick.net.37033.9291.302br.net',
+'ad.doubleclick.net.37034.9291.302br.net',
+'ad.doubleclick.net.37035.9291.302br.net',
+'ad.doubleclick.net.37036.9291.302br.net',
+'ad.doubleclick.net.37037.9291.302br.net',
+'ad.doubleclick.net.37038.9291.302br.net',
+'ad.doubleclick.net.37039.9291.302br.net',
+'ad.doubleclick.net.37040.9291.302br.net',
+'ad.doubleclick.net.37041.9291.302br.net',
+'ad.doubleclick.net.37043.9291.302br.net',
+'ad.doubleclick.net.37045.9291.302br.net',
+'ad.doubleclick.net.37046.9291.302br.net',
+'ad.doubleclick.net.37047.9291.302br.net',
+'ad.doubleclick.net.37048.9291.302br.net',
+'ad.doubleclick.net.37049.9291.302br.net',
+'ad.doubleclick.net.37363.9292.302br.net',
+'ad.doubleclick.net.37364.9292.302br.net',
+'ad.doubleclick.net.37365.9292.302br.net',
+'ad.doubleclick.net.37366.9292.302br.net',
+'ad.doubleclick.net.37367.9292.302br.net',
+'ad.doubleclick.net.37368.9292.302br.net',
+'ad.doubleclick.net.37369.9292.302br.net',
+'ad.doubleclick.net.37370.9292.302br.net',
+'ad.doubleclick.net.37371.9292.302br.net',
+'ad.doubleclick.net.37379.9294.302br.net',
+'ad.doubleclick.net.37380.9294.302br.net',
+'ad.doubleclick.net.37381.9294.302br.net',
+'ad.doubleclick.net.37382.9294.302br.net',
+'ad.doubleclick.net.37383.9294.302br.net',
+'ad.doubleclick.net.37387.9294.302br.net',
+'ad.doubleclick.net.37388.9294.302br.net',
+'ad.doubleclick.net.37389.9294.302br.net',
+'ad.doubleclick.net.37396.9294.302br.net',
+'ad.doubleclick.net.37397.9294.302br.net',
+'ad.doubleclick.net.37398.9294.302br.net',
+'ad.doubleclick.net.37399.9294.302br.net',
+'ad.doubleclick.net.37400.9294.302br.net',
+'ad.doubleclick.net.37401.9294.302br.net',
+'ad.doubleclick.net.37405.9294.302br.net',
+'ad.doubleclick.net.37406.9294.302br.net',
+'ad.doubleclick.net.37407.9294.302br.net',
+'ad.doubleclick.net.37432.9293.302br.net',
+'ad.doubleclick.net.37433.9293.302br.net',
+'ad.doubleclick.net.37434.9293.302br.net',
+'ad.doubleclick.net.37438.9293.302br.net',
+'ad.doubleclick.net.37439.9293.302br.net',
+'ad.doubleclick.net.37440.9293.302br.net',
+'ad.doubleclick.net.37441.9293.302br.net',
+'ad.doubleclick.net.37442.9293.302br.net',
+'ad.doubleclick.net.37443.9293.302br.net',
+'ad.doubleclick.net.37655.9298.302br.net',
+'ad.doubleclick.net.37656.9298.302br.net',
+'ad.doubleclick.net.37657.9298.302br.net',
+'ad.doubleclick.net.37658.9298.302br.net',
+'ad.doubleclick.net.37659.9298.302br.net',
+'ad.doubleclick.net.37660.9298.302br.net',
+'ad.doubleclick.net.37661.9298.302br.net',
+'ad.doubleclick.net.37662.9298.302br.net',
+'ad.doubleclick.net.37663.9298.302br.net',
+'ad.doubleclick.net.37664.9298.302br.net',
+'ad.doubleclick.net.37665.9298.302br.net',
+'ad.doubleclick.net.37666.9298.302br.net',
+'ad.doubleclick.net.37668.9298.302br.net',
+'ad.doubleclick.net.37669.9298.302br.net',
+'ad.doubleclick.net.37671.9298.302br.net',
+'ad.doubleclick.net.37672.9298.302br.net',
+'ad.doubleclick.net.37673.9298.302br.net',
+'ad.doubleclick.net.37674.9298.302br.net',
+'ad.doubleclick.net.37675.9298.302br.net',
+'ad.doubleclick.net.37676.9298.302br.net',
+'ad.doubleclick.net.37677.9298.302br.net',
+'ad.doubleclick.net.37678.9298.302br.net',
+'ad.doubleclick.net.37680.9298.302br.net',
+'ad.doubleclick.net.37681.9298.302br.net',
+'ad.doubleclick.net.37683.9298.302br.net',
+'ad.doubleclick.net.37684.9298.302br.net',
+'ad.doubleclick.net.37686.9298.302br.net',
+'ad.doubleclick.net.37687.9298.302br.net',
+'ad.doubleclick.net.37688.9298.302br.net',
+'ad.doubleclick.net.37689.9298.302br.net',
+'ad.doubleclick.net.37690.9298.302br.net',
+'ad.doubleclick.net.37692.9298.302br.net',
+'ad.doubleclick.net.37693.9298.302br.net',
+'ad.doubleclick.net.37695.9298.302br.net',
+'ad.doubleclick.net.37696.9298.302br.net',
+'ad.doubleclick.net.37697.9298.302br.net',
+'ad.doubleclick.net.37698.9298.302br.net',
+'ad.doubleclick.net.37699.9298.302br.net',
+'ad.doubleclick.net.37700.9298.302br.net',
+'ad.doubleclick.net.37701.9298.302br.net',
+'ad.doubleclick.net.37702.9298.302br.net',
+'ad.doubleclick.net.37704.9298.302br.net',
+'ad.doubleclick.net.37705.9298.302br.net',
+'ad.doubleclick.net.37706.9298.302br.net',
+'ad.doubleclick.net.37707.9298.302br.net',
+'ad.doubleclick.net.37708.9298.302br.net',
+'ad.doubleclick.net.37710.9298.302br.net',
+'ad.doubleclick.net.37711.9298.302br.net',
+'ad.doubleclick.net.37712.9298.302br.net',
+'ad.doubleclick.net.37713.9298.302br.net',
+'ad.doubleclick.net.37714.9298.302br.net',
+'ad.doubleclick.net.37716.9287.302br.net',
+'ad.doubleclick.net.37717.9287.302br.net',
+'ad.doubleclick.net.37719.9287.302br.net',
+'ad.doubleclick.net.37720.9287.302br.net',
+'ad.doubleclick.net.37728.9287.302br.net',
+'ad.doubleclick.net.37729.9287.302br.net',
+'ad.doubleclick.net.37731.9287.302br.net',
+'ad.doubleclick.net.37776.9300.302br.net',
+'ad.doubleclick.net.37779.9300.302br.net',
+'ad.doubleclick.net.37780.9300.302br.net',
+'ad.doubleclick.net.37782.9300.302br.net',
+'ad.doubleclick.net.37783.9300.302br.net',
+'ad.doubleclick.net.37785.9300.302br.net',
+'ad.doubleclick.net.37786.9300.302br.net',
+'ad.doubleclick.net.37800.9301.302br.net',
+'ad.doubleclick.net.37803.9301.302br.net',
+'ad.doubleclick.net.37804.9301.302br.net',
+'ad.doubleclick.net.37806.9301.302br.net',
+'ad.doubleclick.net.37807.9301.302br.net',
+'ad.doubleclick.net.37809.9301.302br.net',
+'ad.doubleclick.net.37810.9301.302br.net',
+'ad.doubleclick.net.39359.9305.302br.net',
+'ad.doubleclick.net.39360.9305.302br.net',
+'ad.doubleclick.net.39361.9305.302br.net',
+'ad.doubleclick.net.39362.9305.302br.net',
+'ad.doubleclick.net.39363.9305.302br.net',
+'ad.doubleclick.net.39364.9305.302br.net',
+'ad.doubleclick.net.39365.9305.302br.net',
+'ad.doubleclick.net.39366.9305.302br.net',
+'ad.doubleclick.net.39367.9305.302br.net',
+'ad.doubleclick.net.39370.9252.302br.net',
+'ad.doubleclick.net.39446.9124.302br.net',
+'ad.doubleclick.net.39479.9124.302br.net',
+'ad.doubleclick.net.39491.9124.302br.net',
+'ad.doubleclick.net.39497.9124.302br.net',
+'ad.doubleclick.net.39498.9124.302br.net',
+'ad.doubleclick.net.39506.9124.302br.net',
+'ad.doubleclick.net.39518.9124.302br.net',
+'ad.doubleclick.net.39524.9124.302br.net',
+'ad.doubleclick.net.39525.9124.302br.net',
+'ad.doubleclick.net.39542.9124.302br.net',
+'ad.doubleclick.net.39543.9124.302br.net',
+'ad.doubleclick.net.39569.9124.302br.net',
+'ad.doubleclick.net.39570.9124.302br.net',
+'ad.doubleclick.net.39572.9124.302br.net',
+'ad.doubleclick.net.39575.9124.302br.net',
+'ad.doubleclick.net.39578.9124.302br.net',
+'ad.doubleclick.net.39581.9124.302br.net',
+'ad.doubleclick.net.39587.9124.302br.net',
+'ad.doubleclick.net.39590.9124.302br.net',
+'ad.doubleclick.net.39591.9124.302br.net',
+'ad.doubleclick.net.39596.9124.302br.net',
+'ad.doubleclick.net.39597.9124.302br.net',
+'ad.doubleclick.net.39608.9124.302br.net',
+'ad.doubleclick.net.39611.9124.302br.net',
+'ad.doubleclick.net.39620.9124.302br.net',
+'ad.doubleclick.net.39623.9124.302br.net',
+'ad.doubleclick.net.39624.9124.302br.net',
+'ad.doubleclick.net.39629.9124.302br.net',
+'ad.doubleclick.net.39630.9124.302br.net',
+'ad.doubleclick.net.39638.9124.302br.net',
+'ad.doubleclick.net.39644.9124.302br.net',
+'ad.doubleclick.net.39645.9124.302br.net',
+'ad.doubleclick.net.39647.9124.302br.net',
+'ad.doubleclick.net.39653.9124.302br.net',
+'ad.doubleclick.net.39656.9124.302br.net',
+'ad.doubleclick.net.39659.9124.302br.net',
+'ad.doubleclick.net.39662.9124.302br.net',
+'ad.doubleclick.net.39663.9124.302br.net',
+'ad.doubleclick.net.39926.9307.302br.net',
+'ad.doubleclick.net.39927.9307.302br.net',
+'ad.doubleclick.net.39929.9307.302br.net',
+'ad.doubleclick.net.39930.9307.302br.net',
+'ad.doubleclick.net.39932.9307.302br.net',
+'ad.doubleclick.net.39933.9307.302br.net',
+'ad.doubleclick.net.39935.9307.302br.net',
+'ad.doubleclick.net.39936.9307.302br.net',
+'ad.doubleclick.net.39941.9307.302br.net',
+'ad.doubleclick.net.39942.9307.302br.net',
+'ad.doubleclick.net.39944.9307.302br.net',
+'ad.doubleclick.net.39945.9307.302br.net',
+'ad.doubleclick.net.39950.9307.302br.net',
+'ad.doubleclick.net.39951.9307.302br.net',
+'ad.doubleclick.net.39962.9307.302br.net',
+'ad.doubleclick.net.39963.9307.302br.net',
+'ad.doubleclick.net.39968.9307.302br.net',
+'ad.doubleclick.net.39969.9307.302br.net',
+'ad.doubleclick.net.40082.9307.302br.net',
+'ad.doubleclick.net.40083.9307.302br.net',
+'ad.doubleclick.net.40085.9307.302br.net',
+'ad.doubleclick.net.40086.9307.302br.net',
+'ad.doubleclick.net.40088.9307.302br.net',
+'ad.doubleclick.net.40089.9307.302br.net',
+'ad.doubleclick.net.40094.9307.302br.net',
+'ad.doubleclick.net.40095.9307.302br.net',
+'ad.doubleclick.net.40097.9307.302br.net',
+'ad.doubleclick.net.40098.9307.302br.net',
+'ad.doubleclick.net.40103.9307.302br.net',
+'ad.doubleclick.net.40104.9307.302br.net',
+'ad.doubleclick.net.40106.9307.302br.net',
+'ad.doubleclick.net.40107.9307.302br.net',
+'ad.doubleclick.net.40109.9307.302br.net',
+'ad.doubleclick.net.40110.9307.302br.net',
+'ad.doubleclick.net.40112.9307.302br.net',
+'ad.doubleclick.net.40113.9307.302br.net',
+'ad.doubleclick.net.40115.9307.302br.net',
+'ad.doubleclick.net.40116.9307.302br.net',
+'ad.doubleclick.net.40118.9307.302br.net',
+'ad.doubleclick.net.40119.9307.302br.net',
+'ad.doubleclick.net.40121.9307.302br.net',
+'ad.doubleclick.net.40122.9307.302br.net',
+'ad.doubleclick.net.40124.9308.302br.net',
+'ad.doubleclick.net.40125.9308.302br.net',
+'ad.doubleclick.net.40136.9308.302br.net',
+'ad.doubleclick.net.40137.9308.302br.net',
+'ad.doubleclick.net.40151.9308.302br.net',
+'ad.doubleclick.net.40152.9308.302br.net',
+'ad.doubleclick.net.40154.9308.302br.net',
+'ad.doubleclick.net.40155.9308.302br.net',
+'ad.doubleclick.net.40157.9308.302br.net',
+'ad.doubleclick.net.40158.9308.302br.net',
+'ad.doubleclick.net.40160.9308.302br.net',
+'ad.doubleclick.net.40161.9308.302br.net',
+'ad.doubleclick.net.40163.9308.302br.net',
+'ad.doubleclick.net.40164.9308.302br.net',
+'ad.doubleclick.net.40166.9308.302br.net',
+'ad.doubleclick.net.40167.9308.302br.net',
+'ad.doubleclick.net.40172.9308.302br.net',
+'ad.doubleclick.net.40173.9308.302br.net',
+'ad.doubleclick.net.40178.9308.302br.net',
+'ad.doubleclick.net.40179.9308.302br.net',
+'ad.doubleclick.net.40184.9308.302br.net',
+'ad.doubleclick.net.40185.9308.302br.net',
+'ad.doubleclick.net.40187.9308.302br.net',
+'ad.doubleclick.net.40188.9308.302br.net',
+'ad.doubleclick.net.40190.9308.302br.net',
+'ad.doubleclick.net.40191.9308.302br.net',
+'ad.doubleclick.net.40196.9308.302br.net',
+'ad.doubleclick.net.40197.9308.302br.net',
+'ad.doubleclick.net.40199.9308.302br.net',
+'ad.doubleclick.net.40200.9308.302br.net',
+'ad.doubleclick.net.40205.9309.302br.net',
+'ad.doubleclick.net.40206.9309.302br.net',
+'ad.doubleclick.net.40208.9309.302br.net',
+'ad.doubleclick.net.40209.9309.302br.net',
+'ad.doubleclick.net.40211.9309.302br.net',
+'ad.doubleclick.net.40212.9309.302br.net',
+'ad.doubleclick.net.40271.9309.302br.net',
+'ad.doubleclick.net.40272.9309.302br.net',
+'ad.doubleclick.net.40274.9309.302br.net',
+'ad.doubleclick.net.40275.9309.302br.net',
+'ad.doubleclick.net.40280.9309.302br.net',
+'ad.doubleclick.net.40281.9309.302br.net',
+'ad.doubleclick.net.40283.9309.302br.net',
+'ad.doubleclick.net.40284.9309.302br.net',
+'ad.doubleclick.net.40316.9309.302br.net',
+'ad.doubleclick.net.40317.9309.302br.net',
+'ad.doubleclick.net.40319.9309.302br.net',
+'ad.doubleclick.net.40320.9309.302br.net',
+'ad.doubleclick.net.40322.9309.302br.net',
+'ad.doubleclick.net.40323.9309.302br.net',
+'ad.doubleclick.net.40346.9309.302br.net',
+'ad.doubleclick.net.40347.9309.302br.net',
+'ad.doubleclick.net.40348.9250.302br.net',
+'ad.doubleclick.net.40349.9250.302br.net',
+'ad.doubleclick.net.40350.9250.302br.net',
+'ad.doubleclick.net.40351.9250.302br.net',
+'ad.doubleclick.net.40352.9250.302br.net',
+'ad.doubleclick.net.40353.9250.302br.net',
+'ad.doubleclick.net.40354.9250.302br.net',
+'ad.doubleclick.net.40355.9250.302br.net',
+'ad.doubleclick.net.40356.9250.302br.net',
+'ad.doubleclick.net.40357.9250.302br.net',
+'ad.doubleclick.net.40358.9250.302br.net',
+'ad.doubleclick.net.40359.9250.302br.net',
+'ad.doubleclick.net.40360.9250.302br.net',
+'ad.doubleclick.net.40361.9250.302br.net',
+'ad.doubleclick.net.40362.9250.302br.net',
+'ad.doubleclick.net.40363.9250.302br.net',
+'ad.doubleclick.net.40364.9250.302br.net',
+'ad.doubleclick.net.40365.9250.302br.net',
+'ad.doubleclick.net.40366.9250.302br.net',
+'ad.doubleclick.net.40367.9250.302br.net',
+'ad.doubleclick.net.40368.9250.302br.net',
+'ad.doubleclick.net.40369.9250.302br.net',
+'ad.doubleclick.net.40370.9250.302br.net',
+'ad.doubleclick.net.40371.9250.302br.net',
+'ad.doubleclick.net.40372.9250.302br.net',
+'ad.doubleclick.net.40373.9250.302br.net',
+'ad.doubleclick.net.40374.9250.302br.net',
+'ad.doubleclick.net.40513.9311.302br.net',
+'ad.doubleclick.net.40518.9311.302br.net',
+'ad.doubleclick.net.40524.9311.302br.net',
+'ad.doubleclick.net.40530.9311.302br.net',
+'ad.doubleclick.net.40536.9311.302br.net',
+'ad.doubleclick.net.40541.9311.302br.net',
+'ad.doubleclick.net.40543.9311.302br.net',
+'ad.doubleclick.net.40547.9311.302br.net',
+'ad.doubleclick.net.40553.9311.302br.net',
+'ad.doubleclick.net.40559.9311.302br.net',
+'ad.doubleclick.net.40561.9311.302br.net',
+'ad.doubleclick.net.40566.9311.302br.net',
+'ad.doubleclick.net.40572.9311.302br.net',
+'ad.doubleclick.net.40579.9311.302br.net',
+'ad.doubleclick.net.40581.9311.302br.net',
+'ad.doubleclick.net.40585.9311.302br.net',
+'ad.doubleclick.net.40587.9311.302br.net',
+'ad.doubleclick.net.40591.9311.302br.net',
+'ad.doubleclick.net.40597.9311.302br.net',
+'ad.doubleclick.net.40603.9311.302br.net',
+'ad.doubleclick.net.40605.9311.302br.net',
+'ad.doubleclick.net.40609.9311.302br.net',
+'ad.doubleclick.net.40611.9311.302br.net',
+'ad.doubleclick.net.40615.9311.302br.net',
+'ad.doubleclick.net.40621.9311.302br.net',
+'ad.doubleclick.net.40622.9311.302br.net',
+'ad.doubleclick.net.40627.9311.302br.net',
+'ad.doubleclick.net.40629.9311.302br.net',
+'ad.doubleclick.net.40633.9311.302br.net',
+'ad.doubleclick.net.40635.9311.302br.net',
+'ad.doubleclick.net.40639.9311.302br.net',
+'ad.doubleclick.net.40642.9311.302br.net',
+'ad.doubleclick.net.40645.9311.302br.net',
+'ad.doubleclick.net.40648.9311.302br.net',
+'ad.doubleclick.net.40651.9311.302br.net',
+'ad.doubleclick.net.40654.9311.302br.net',
+'ad.doubleclick.net.40657.9311.302br.net',
+'ad.doubleclick.net.40660.9311.302br.net',
+'ad.doubleclick.net.40663.9311.302br.net',
+'ad.doubleclick.net.40666.9311.302br.net',
+'ad.doubleclick.net.40669.9311.302br.net',
+'ad.doubleclick.net.40672.9311.302br.net',
+'ad.doubleclick.net.40673.9311.302br.net',
+'ad.doubleclick.net.40675.9311.302br.net',
+'ad.doubleclick.net.40676.9311.302br.net',
+'ad.doubleclick.net.40678.9311.302br.net',
+'ad.doubleclick.net.40679.9311.302br.net',
+'ad.doubleclick.net.40681.9311.302br.net',
+'ad.doubleclick.net.40682.9311.302br.net',
+'ad.doubleclick.net.40684.9311.302br.net',
+'ad.doubleclick.net.40685.9311.302br.net',
+'ad.doubleclick.net.40687.9311.302br.net',
+'ad.doubleclick.net.40688.9311.302br.net',
+'ad.doubleclick.net.40690.9311.302br.net',
+'ad.doubleclick.net.40691.9311.302br.net',
+'ad.doubleclick.net.40693.9311.302br.net',
+'ad.doubleclick.net.40696.9311.302br.net',
+'ad.doubleclick.net.40699.9311.302br.net',
+'ad.doubleclick.net.40702.9311.302br.net',
+'ad.doubleclick.net.40705.9311.302br.net',
+'ad.doubleclick.net.40706.9311.302br.net',
+'ad.doubleclick.net.40708.9311.302br.net',
+'ad.doubleclick.net.40711.9311.302br.net',
+'ad.doubleclick.net.40714.9311.302br.net',
+'ad.doubleclick.net.40717.9311.302br.net',
+'ad.doubleclick.net.40720.9311.302br.net',
+'ad.doubleclick.net.40723.9311.302br.net',
+'ad.doubleclick.net.40726.9311.302br.net',
+'ad.doubleclick.net.40727.9311.302br.net',
+'ad.doubleclick.net.40729.9311.302br.net',
+'ad.doubleclick.net.40732.9311.302br.net',
+'ad.doubleclick.net.40735.9311.302br.net',
+'ad.doubleclick.net.40738.9311.302br.net',
+'ad.doubleclick.net.40739.9311.302br.net',
+'ad.doubleclick.net.40741.9311.302br.net',
+'ad.doubleclick.net.40744.9311.302br.net',
+'ad.doubleclick.net.40747.9311.302br.net',
+'ad.doubleclick.net.40750.9311.302br.net',
+'ad.doubleclick.net.40753.9311.302br.net',
+'ad.doubleclick.net.40793.9314.302br.net',
+'ad.doubleclick.net.40796.9314.302br.net',
+'ad.doubleclick.net.40799.9314.302br.net',
+'ad.doubleclick.net.40802.9314.302br.net',
+'ad.doubleclick.net.40803.9314.302br.net',
+'ad.doubleclick.net.40805.9314.302br.net',
+'ad.doubleclick.net.40806.9314.302br.net',
+'ad.doubleclick.net.40808.9314.302br.net',
+'ad.doubleclick.net.40812.9314.302br.net',
+'ad.doubleclick.net.40814.9314.302br.net',
+'ad.doubleclick.net.40818.9314.302br.net',
+'ad.doubleclick.net.40820.9314.302br.net',
+'ad.doubleclick.net.40821.9314.302br.net',
+'ad.doubleclick.net.40823.9314.302br.net',
+'ad.doubleclick.net.40824.9314.302br.net',
+'ad.doubleclick.net.40826.9314.302br.net',
+'ad.doubleclick.net.40901.9313.302br.net',
+'ad.doubleclick.net.40904.9313.302br.net',
+'ad.doubleclick.net.40907.9313.302br.net',
+'ad.doubleclick.net.40910.9313.302br.net',
+'ad.doubleclick.net.40911.9313.302br.net',
+'ad.doubleclick.net.40913.9313.302br.net',
+'ad.doubleclick.net.40914.9313.302br.net',
+'ad.doubleclick.net.40916.9313.302br.net',
+'ad.doubleclick.net.40917.9313.302br.net',
+'ad.doubleclick.net.40919.9313.302br.net',
+'ad.doubleclick.net.40920.9313.302br.net',
+'ad.doubleclick.net.40922.9313.302br.net',
+'ad.doubleclick.net.40923.9313.302br.net',
+'ad.doubleclick.net.40925.9313.302br.net',
+'ad.doubleclick.net.40926.9313.302br.net',
+'ad.doubleclick.net.40928.9313.302br.net',
+'ad.doubleclick.net.40935.9313.302br.net',
+'ad.doubleclick.net.40937.9313.302br.net',
+'ad.doubleclick.net.40938.9313.302br.net',
+'ad.doubleclick.net.40940.9313.302br.net',
+'ad.doubleclick.net.40941.9313.302br.net',
+'ad.doubleclick.net.40943.9313.302br.net',
+'ad.doubleclick.net.40946.9313.302br.net',
+'ad.doubleclick.net.40988.9316.302br.net',
+'ad.doubleclick.net.40991.9316.302br.net',
+'ad.doubleclick.net.40994.9316.302br.net',
+'ad.doubleclick.net.41000.9316.302br.net',
+'ad.doubleclick.net.41003.9315.302br.net',
+'ad.doubleclick.net.41006.9315.302br.net',
+'ad.doubleclick.net.41009.9315.302br.net',
+'ad.doubleclick.net.41012.9315.302br.net',
+'ad.doubleclick.net.41018.9315.302br.net',
+'ad.doubleclick.net.41021.9315.302br.net',
+'ad.doubleclick.net.41024.9315.302br.net',
+'ad.doubleclick.net.41027.9315.302br.net',
+'ad.doubleclick.net.41033.9315.302br.net',
+'ad.doubleclick.net.41065.9315.302br.net',
+'ad.doubleclick.net.41123.9315.302br.net',
+'ad.doubleclick.net.41139.9315.302br.net',
+'ad.doubleclick.net.41141.9315.302br.net',
+'ad.doubleclick.net.41147.9315.302br.net',
+'ad.doubleclick.net.41162.9315.302br.net',
+'ad.doubleclick.net.41172.9315.302br.net',
+'ad.doubleclick.net.41174.9315.302br.net',
+'ad.doubleclick.net.41178.9315.302br.net',
+'ad.doubleclick.net.41180.9315.302br.net',
+'ad.doubleclick.net.41182.9315.302br.net',
+'ad.doubleclick.net.41183.9315.302br.net',
+'ad.doubleclick.net.41188.9315.302br.net',
+'ad.doubleclick.net.41191.9315.302br.net',
+'ad.doubleclick.net.41194.9315.302br.net',
+'ad.doubleclick.net.41197.9315.302br.net',
+'ad.doubleclick.net.41198.9315.302br.net',
+'ad.doubleclick.net.41200.9315.302br.net',
+'ad.doubleclick.net.41203.9315.302br.net',
+'ad.doubleclick.net.41204.9315.302br.net',
+'ad.doubleclick.net.41206.9315.302br.net',
+'ad.doubleclick.net.41207.9315.302br.net',
+'ad.doubleclick.net.41209.9315.302br.net',
+'ad.doubleclick.net.41210.9315.302br.net',
+'ad.doubleclick.net.41212.9315.302br.net',
+'ad.doubleclick.net.41213.9315.302br.net',
+'ad.doubleclick.net.41215.9315.302br.net',
+'ad.doubleclick.net.41216.9315.302br.net',
+'ad.doubleclick.net.41218.9315.302br.net',
+'ad.doubleclick.net.41219.9315.302br.net',
+'ad.doubleclick.net.41227.9315.302br.net',
+'ad.doubleclick.net.41230.9315.302br.net',
+'ad.doubleclick.net.41231.9315.302br.net',
+'ad.doubleclick.net.41233.9315.302br.net',
+'ad.doubleclick.net.41234.9315.302br.net',
+'ad.doubleclick.net.41236.9315.302br.net',
+'ad.doubleclick.net.41237.9315.302br.net',
+'ad.doubleclick.net.41239.9315.302br.net',
+'ad.doubleclick.net.41240.9315.302br.net',
+'ad.doubleclick.net.41242.9315.302br.net',
+'ad.doubleclick.net.41243.9315.302br.net',
+'ad.doubleclick.net.41244.9315.302br.net',
+'ad.doubleclick.net.41245.9315.302br.net',
+'ad.doubleclick.net.41246.9315.302br.net',
+'ad.doubleclick.net.41280.9317.302br.net',
+'ad.doubleclick.net.41283.9317.302br.net',
+'ad.doubleclick.net.41286.9317.302br.net',
+'ad.doubleclick.net.41289.9317.302br.net',
+'ad.doubleclick.net.41295.9317.302br.net',
+'ad.doubleclick.net.41296.9317.302br.net',
+'ad.doubleclick.net.41298.9317.302br.net',
+'ad.doubleclick.net.41301.9317.302br.net',
+'ad.doubleclick.net.41304.9317.302br.net',
+'ad.doubleclick.net.41307.9317.302br.net',
+'ad.doubleclick.net.41310.9317.302br.net',
+'ad.doubleclick.net.41313.9317.302br.net',
+'ad.doubleclick.net.41314.9317.302br.net',
+'ad.doubleclick.net.41319.9317.302br.net',
+'ad.doubleclick.net.41322.9317.302br.net',
+'ad.doubleclick.net.41325.9317.302br.net',
+'ad.doubleclick.net.41326.9317.302br.net',
+'ad.doubleclick.net.41328.9317.302br.net',
+'ad.doubleclick.net.41329.9317.302br.net',
+'ad.doubleclick.net.41331.9317.302br.net',
+'ad.doubleclick.net.41334.9317.302br.net',
+'ad.doubleclick.net.41335.9317.302br.net',
+'ad.doubleclick.net.41337.9317.302br.net',
+'ad.doubleclick.net.41340.9317.302br.net',
+'ad.doubleclick.net.41343.9317.302br.net',
+'ad.doubleclick.net.41344.9317.302br.net',
+'ad.doubleclick.net.41349.9317.302br.net',
+'ad.doubleclick.net.41350.9317.302br.net',
+'ad.doubleclick.net.41355.9317.302br.net',
+'ad.doubleclick.net.41361.9317.302br.net',
+'ad.doubleclick.net.41364.9317.302br.net',
+'ad.doubleclick.net.41370.9317.302br.net',
+'ad.doubleclick.net.41371.9317.302br.net',
+'ad.doubleclick.net.41373.9317.302br.net',
+'ad.doubleclick.net.41376.9317.302br.net',
+'ad.doubleclick.net.41379.9317.302br.net',
+'ad.doubleclick.net.41382.9317.302br.net',
+'ad.doubleclick.net.41385.9317.302br.net',
+'ad.doubleclick.net.41388.9317.302br.net',
+'ad.doubleclick.net.41391.9317.302br.net',
+'ad.doubleclick.net.41392.9317.302br.net',
+'ad.doubleclick.net.41394.9317.302br.net',
+'ad.doubleclick.net.41395.9317.302br.net',
+'ad.doubleclick.net.41397.9317.302br.net',
+'ad.doubleclick.net.41398.9317.302br.net',
+'ad.doubleclick.net.414.7000.302br.net',
+'ad.doubleclick.net.41400.9317.302br.net',
+'ad.doubleclick.net.41401.9317.302br.net',
+'ad.doubleclick.net.41403.9317.302br.net',
+'ad.doubleclick.net.41404.9317.302br.net',
+'ad.doubleclick.net.41406.9317.302br.net',
+'ad.doubleclick.net.41407.9317.302br.net',
+'ad.doubleclick.net.41409.9317.302br.net',
+'ad.doubleclick.net.41412.9317.302br.net',
+'ad.doubleclick.net.41418.9317.302br.net',
+'ad.doubleclick.net.41424.9317.302br.net',
+'ad.doubleclick.net.41427.9317.302br.net',
+'ad.doubleclick.net.41428.9317.302br.net',
+'ad.doubleclick.net.41430.9317.302br.net',
+'ad.doubleclick.net.41433.9317.302br.net',
+'ad.doubleclick.net.41434.9317.302br.net',
+'ad.doubleclick.net.41436.9317.302br.net',
+'ad.doubleclick.net.41439.9317.302br.net',
+'ad.doubleclick.net.41442.9317.302br.net',
+'ad.doubleclick.net.41445.9317.302br.net',
+'ad.doubleclick.net.41448.9317.302br.net',
+'ad.doubleclick.net.41454.9317.302br.net',
+'ad.doubleclick.net.41457.9317.302br.net',
+'ad.doubleclick.net.41458.9317.302br.net',
+'ad.doubleclick.net.41460.9317.302br.net',
+'ad.doubleclick.net.41463.9317.302br.net',
+'ad.doubleclick.net.41464.9317.302br.net',
+'ad.doubleclick.net.41484.9317.302br.net',
+'ad.doubleclick.net.41487.9317.302br.net',
+'ad.doubleclick.net.41488.9317.302br.net',
+'ad.doubleclick.net.41490.9317.302br.net',
+'ad.doubleclick.net.41493.9317.302br.net',
+'ad.doubleclick.net.41496.9317.302br.net',
+'ad.doubleclick.net.41497.9317.302br.net',
+'ad.doubleclick.net.41499.9317.302br.net',
+'ad.doubleclick.net.415.7000.302br.net',
+'ad.doubleclick.net.41500.9317.302br.net',
+'ad.doubleclick.net.41502.9317.302br.net',
+'ad.doubleclick.net.41503.9317.302br.net',
+'ad.doubleclick.net.41505.9317.302br.net',
+'ad.doubleclick.net.41506.9317.302br.net',
+'ad.doubleclick.net.41508.9317.302br.net',
+'ad.doubleclick.net.41511.9317.302br.net',
+'ad.doubleclick.net.41512.9317.302br.net',
+'ad.doubleclick.net.41514.9317.302br.net',
+'ad.doubleclick.net.41515.9317.302br.net',
+'ad.doubleclick.net.41520.9317.302br.net',
+'ad.doubleclick.net.41521.9317.302br.net',
+'ad.doubleclick.net.41523.9317.302br.net',
+'ad.doubleclick.net.41526.9317.302br.net',
+'ad.doubleclick.net.41527.9317.302br.net',
+'ad.doubleclick.net.41529.9317.302br.net',
+'ad.doubleclick.net.41532.9317.302br.net',
+'ad.doubleclick.net.41533.9317.302br.net',
+'ad.doubleclick.net.41535.9317.302br.net',
+'ad.doubleclick.net.41538.9317.302br.net',
+'ad.doubleclick.net.41539.9317.302br.net',
+'ad.doubleclick.net.41541.9317.302br.net',
+'ad.doubleclick.net.41542.9317.302br.net',
+'ad.doubleclick.net.41544.9317.302br.net',
+'ad.doubleclick.net.41545.9317.302br.net',
+'ad.doubleclick.net.41547.9317.302br.net',
+'ad.doubleclick.net.41550.9317.302br.net',
+'ad.doubleclick.net.41553.9317.302br.net',
+'ad.doubleclick.net.41556.9317.302br.net',
+'ad.doubleclick.net.41559.9317.302br.net',
+'ad.doubleclick.net.41562.9317.302br.net',
+'ad.doubleclick.net.41565.9317.302br.net',
+'ad.doubleclick.net.41568.9317.302br.net',
+'ad.doubleclick.net.41569.9317.302br.net',
+'ad.doubleclick.net.41571.9317.302br.net',
+'ad.doubleclick.net.41572.9317.302br.net',
+'ad.doubleclick.net.41574.9317.302br.net',
+'ad.doubleclick.net.41575.9317.302br.net',
+'ad.doubleclick.net.41577.9317.302br.net',
+'ad.doubleclick.net.41578.9317.302br.net',
+'ad.doubleclick.net.41583.9317.302br.net',
+'ad.doubleclick.net.41586.9317.302br.net',
+'ad.doubleclick.net.41589.9317.302br.net',
+'ad.doubleclick.net.41592.9317.302br.net',
+'ad.doubleclick.net.41595.9317.302br.net',
+'ad.doubleclick.net.41596.9317.302br.net',
+'ad.doubleclick.net.41598.9317.302br.net',
+'ad.doubleclick.net.41599.9317.302br.net',
+'ad.doubleclick.net.41601.9317.302br.net',
+'ad.doubleclick.net.41602.9317.302br.net',
+'ad.doubleclick.net.41604.9317.302br.net',
+'ad.doubleclick.net.41607.9317.302br.net',
+'ad.doubleclick.net.41610.9317.302br.net',
+'ad.doubleclick.net.41613.9317.302br.net',
+'ad.doubleclick.net.41616.9317.302br.net',
+'ad.doubleclick.net.41622.9317.302br.net',
+'ad.doubleclick.net.41623.9317.302br.net',
+'ad.doubleclick.net.41625.9317.302br.net',
+'ad.doubleclick.net.41626.9317.302br.net',
+'ad.doubleclick.net.41628.9317.302br.net',
+'ad.doubleclick.net.41629.9317.302br.net',
+'ad.doubleclick.net.41634.9317.302br.net',
+'ad.doubleclick.net.41637.9317.302br.net',
+'ad.doubleclick.net.41640.9317.302br.net',
+'ad.doubleclick.net.41643.9317.302br.net',
+'ad.doubleclick.net.41644.9317.302br.net',
+'ad.doubleclick.net.41646.9317.302br.net',
+'ad.doubleclick.net.41647.9317.302br.net',
+'ad.doubleclick.net.41649.9317.302br.net',
+'ad.doubleclick.net.41652.9317.302br.net',
+'ad.doubleclick.net.41655.9317.302br.net',
+'ad.doubleclick.net.41658.9317.302br.net',
+'ad.doubleclick.net.41659.9317.302br.net',
+'ad.doubleclick.net.41661.9317.302br.net',
+'ad.doubleclick.net.41662.9317.302br.net',
+'ad.doubleclick.net.41664.9317.302br.net',
+'ad.doubleclick.net.41667.9317.302br.net',
+'ad.doubleclick.net.41670.9317.302br.net',
+'ad.doubleclick.net.41673.9317.302br.net',
+'ad.doubleclick.net.41676.9317.302br.net',
+'ad.doubleclick.net.41677.9317.302br.net',
+'ad.doubleclick.net.41679.9317.302br.net',
+'ad.doubleclick.net.41682.9317.302br.net',
+'ad.doubleclick.net.41683.9317.302br.net',
+'ad.doubleclick.net.41694.9317.302br.net',
+'ad.doubleclick.net.41697.9317.302br.net',
+'ad.doubleclick.net.41700.9317.302br.net',
+'ad.doubleclick.net.41703.9317.302br.net',
+'ad.doubleclick.net.41704.9317.302br.net',
+'ad.doubleclick.net.41709.9317.302br.net',
+'ad.doubleclick.net.41710.9317.302br.net',
+'ad.doubleclick.net.41712.9317.302br.net',
+'ad.doubleclick.net.41715.9317.302br.net',
+'ad.doubleclick.net.41718.9317.302br.net',
+'ad.doubleclick.net.41721.9317.302br.net',
+'ad.doubleclick.net.41722.9317.302br.net',
+'ad.doubleclick.net.41724.9317.302br.net',
+'ad.doubleclick.net.41727.9317.302br.net',
+'ad.doubleclick.net.41728.9317.302br.net',
+'ad.doubleclick.net.41730.9317.302br.net',
+'ad.doubleclick.net.41733.9317.302br.net',
+'ad.doubleclick.net.41736.9317.302br.net',
+'ad.doubleclick.net.41737.9317.302br.net',
+'ad.doubleclick.net.41739.9317.302br.net',
+'ad.doubleclick.net.41740.9317.302br.net',
+'ad.doubleclick.net.41742.9317.302br.net',
+'ad.doubleclick.net.41745.9317.302br.net',
+'ad.doubleclick.net.41746.9317.302br.net',
+'ad.doubleclick.net.41748.9317.302br.net',
+'ad.doubleclick.net.41749.9317.302br.net',
+'ad.doubleclick.net.41751.9317.302br.net',
+'ad.doubleclick.net.41757.9317.302br.net',
+'ad.doubleclick.net.41758.9317.302br.net',
+'ad.doubleclick.net.41760.9317.302br.net',
+'ad.doubleclick.net.41761.9317.302br.net',
+'ad.doubleclick.net.41763.9317.302br.net',
+'ad.doubleclick.net.41766.9317.302br.net',
+'ad.doubleclick.net.41769.9317.302br.net',
+'ad.doubleclick.net.41775.9317.302br.net',
+'ad.doubleclick.net.41784.9317.302br.net',
+'ad.doubleclick.net.41785.9317.302br.net',
+'ad.doubleclick.net.41787.9317.302br.net',
+'ad.doubleclick.net.41788.9317.302br.net',
+'ad.doubleclick.net.41790.9317.302br.net',
+'ad.doubleclick.net.41791.9317.302br.net',
+'ad.doubleclick.net.41793.9317.302br.net',
+'ad.doubleclick.net.41794.9317.302br.net',
+'ad.doubleclick.net.41796.9317.302br.net',
+'ad.doubleclick.net.41797.9317.302br.net',
+'ad.doubleclick.net.41799.9317.302br.net',
+'ad.doubleclick.net.41800.9317.302br.net',
+'ad.doubleclick.net.41802.9317.302br.net',
+'ad.doubleclick.net.41803.9317.302br.net',
+'ad.doubleclick.net.41805.9317.302br.net',
+'ad.doubleclick.net.41806.9317.302br.net',
+'ad.doubleclick.net.41811.9317.302br.net',
+'ad.doubleclick.net.41814.9317.302br.net',
+'ad.doubleclick.net.41815.9317.302br.net',
+'ad.doubleclick.net.41817.9317.302br.net',
+'ad.doubleclick.net.41820.9317.302br.net',
+'ad.doubleclick.net.41821.9317.302br.net',
+'ad.doubleclick.net.41823.9317.302br.net',
+'ad.doubleclick.net.41824.9317.302br.net',
+'ad.doubleclick.net.41829.9317.302br.net',
+'ad.doubleclick.net.41832.9317.302br.net',
+'ad.doubleclick.net.41835.9317.302br.net',
+'ad.doubleclick.net.41838.9317.302br.net',
+'ad.doubleclick.net.41841.9317.302br.net',
+'ad.doubleclick.net.41844.9317.302br.net',
+'ad.doubleclick.net.41845.9317.302br.net',
+'ad.doubleclick.net.41847.9317.302br.net',
+'ad.doubleclick.net.41848.9317.302br.net',
+'ad.doubleclick.net.41850.9317.302br.net',
+'ad.doubleclick.net.41851.9317.302br.net',
+'ad.doubleclick.net.41853.9317.302br.net',
+'ad.doubleclick.net.41856.9317.302br.net',
+'ad.doubleclick.net.41859.9317.302br.net',
+'ad.doubleclick.net.41862.9317.302br.net',
+'ad.doubleclick.net.41865.9317.302br.net',
+'ad.doubleclick.net.41868.9317.302br.net',
+'ad.doubleclick.net.41871.9317.302br.net',
+'ad.doubleclick.net.41874.9317.302br.net',
+'ad.doubleclick.net.41875.9317.302br.net',
+'ad.doubleclick.net.41877.9317.302br.net',
+'ad.doubleclick.net.41878.9317.302br.net',
+'ad.doubleclick.net.41880.9317.302br.net',
+'ad.doubleclick.net.41883.9317.302br.net',
+'ad.doubleclick.net.41884.9317.302br.net',
+'ad.doubleclick.net.41889.9317.302br.net',
+'ad.doubleclick.net.41892.9317.302br.net',
+'ad.doubleclick.net.41895.9317.302br.net',
+'ad.doubleclick.net.41896.9317.302br.net',
+'ad.doubleclick.net.41898.9317.302br.net',
+'ad.doubleclick.net.41901.9317.302br.net',
+'ad.doubleclick.net.41904.9317.302br.net',
+'ad.doubleclick.net.41907.9317.302br.net',
+'ad.doubleclick.net.41910.9317.302br.net',
+'ad.doubleclick.net.41919.9317.302br.net',
+'ad.doubleclick.net.41922.9317.302br.net',
+'ad.doubleclick.net.41925.9317.302br.net',
+'ad.doubleclick.net.41928.9317.302br.net',
+'ad.doubleclick.net.41931.9317.302br.net',
+'ad.doubleclick.net.41943.9317.302br.net',
+'ad.doubleclick.net.41944.9317.302br.net',
+'ad.doubleclick.net.41958.9317.302br.net',
+'ad.doubleclick.net.41961.9317.302br.net',
+'ad.doubleclick.net.41964.9317.302br.net',
+'ad.doubleclick.net.41967.9317.302br.net',
+'ad.doubleclick.net.41968.9317.302br.net',
+'ad.doubleclick.net.41970.9317.302br.net',
+'ad.doubleclick.net.41971.9317.302br.net',
+'ad.doubleclick.net.41973.9317.302br.net',
+'ad.doubleclick.net.41974.9317.302br.net',
+'ad.doubleclick.net.41976.9317.302br.net',
+'ad.doubleclick.net.41982.9317.302br.net',
+'ad.doubleclick.net.41985.9317.302br.net',
+'ad.doubleclick.net.41988.9317.302br.net',
+'ad.doubleclick.net.41991.9317.302br.net',
+'ad.doubleclick.net.41994.9317.302br.net',
+'ad.doubleclick.net.41995.9317.302br.net',
+'ad.doubleclick.net.42000.9317.302br.net',
+'ad.doubleclick.net.42001.9317.302br.net',
+'ad.doubleclick.net.42003.9317.302br.net',
+'ad.doubleclick.net.42006.9317.302br.net',
+'ad.doubleclick.net.42009.9317.302br.net',
+'ad.doubleclick.net.42012.9317.302br.net',
+'ad.doubleclick.net.42015.9317.302br.net',
+'ad.doubleclick.net.42018.9317.302br.net',
+'ad.doubleclick.net.42021.9317.302br.net',
+'ad.doubleclick.net.42024.9317.302br.net',
+'ad.doubleclick.net.42027.9317.302br.net',
+'ad.doubleclick.net.42028.9317.302br.net',
+'ad.doubleclick.net.42030.9317.302br.net',
+'ad.doubleclick.net.42033.9317.302br.net',
+'ad.doubleclick.net.42036.9317.302br.net',
+'ad.doubleclick.net.42039.9317.302br.net',
+'ad.doubleclick.net.42042.9317.302br.net',
+'ad.doubleclick.net.42045.9317.302br.net',
+'ad.doubleclick.net.42048.9317.302br.net',
+'ad.doubleclick.net.42049.9317.302br.net',
+'ad.doubleclick.net.42051.9317.302br.net',
+'ad.doubleclick.net.42052.9317.302br.net',
+'ad.doubleclick.net.42054.9317.302br.net',
+'ad.doubleclick.net.42055.9317.302br.net',
+'ad.doubleclick.net.42057.9317.302br.net',
+'ad.doubleclick.net.42060.9317.302br.net',
+'ad.doubleclick.net.42063.9317.302br.net',
+'ad.doubleclick.net.42066.9317.302br.net',
+'ad.doubleclick.net.42067.9317.302br.net',
+'ad.doubleclick.net.42069.9317.302br.net',
+'ad.doubleclick.net.42072.9317.302br.net',
+'ad.doubleclick.net.42075.9317.302br.net',
+'ad.doubleclick.net.42078.9317.302br.net',
+'ad.doubleclick.net.42079.9317.302br.net',
+'ad.doubleclick.net.42081.9317.302br.net',
+'ad.doubleclick.net.42084.9317.302br.net',
+'ad.doubleclick.net.42085.9317.302br.net',
+'ad.doubleclick.net.42087.9317.302br.net',
+'ad.doubleclick.net.42096.9317.302br.net',
+'ad.doubleclick.net.42114.9318.302br.net',
+'ad.doubleclick.net.42115.9318.302br.net',
+'ad.doubleclick.net.42117.9318.302br.net',
+'ad.doubleclick.net.42118.9318.302br.net',
+'ad.doubleclick.net.42120.9318.302br.net',
+'ad.doubleclick.net.42123.9318.302br.net',
+'ad.doubleclick.net.42126.9318.302br.net',
+'ad.doubleclick.net.42129.9318.302br.net',
+'ad.doubleclick.net.42132.9318.302br.net',
+'ad.doubleclick.net.42141.9318.302br.net',
+'ad.doubleclick.net.42142.9318.302br.net',
+'ad.doubleclick.net.42144.9318.302br.net',
+'ad.doubleclick.net.42145.9318.302br.net',
+'ad.doubleclick.net.42147.9318.302br.net',
+'ad.doubleclick.net.42148.9318.302br.net',
+'ad.doubleclick.net.42149.9318.302br.net',
+'ad.doubleclick.net.42150.9318.302br.net',
+'ad.doubleclick.net.42151.9318.302br.net',
+'ad.doubleclick.net.42152.9318.302br.net',
+'ad.doubleclick.net.42153.9318.302br.net',
+'ad.doubleclick.net.42154.9318.302br.net',
+'ad.doubleclick.net.42156.9318.302br.net',
+'ad.doubleclick.net.42157.9318.302br.net',
+'ad.doubleclick.net.42159.9318.302br.net',
+'ad.doubleclick.net.42160.9318.302br.net',
+'ad.doubleclick.net.42165.9318.302br.net',
+'ad.doubleclick.net.42168.9318.302br.net',
+'ad.doubleclick.net.42171.9318.302br.net',
+'ad.doubleclick.net.42172.9318.302br.net',
+'ad.doubleclick.net.42174.9318.302br.net',
+'ad.doubleclick.net.42183.9318.302br.net',
+'ad.doubleclick.net.42186.9318.302br.net',
+'ad.doubleclick.net.42187.9318.302br.net',
+'ad.doubleclick.net.42189.9318.302br.net',
+'ad.doubleclick.net.42192.9318.302br.net',
+'ad.doubleclick.net.42193.9318.302br.net',
+'ad.doubleclick.net.42198.9318.302br.net',
+'ad.doubleclick.net.42199.9318.302br.net',
+'ad.doubleclick.net.42201.9318.302br.net',
+'ad.doubleclick.net.42202.9318.302br.net',
+'ad.doubleclick.net.42207.9318.302br.net',
+'ad.doubleclick.net.42208.9318.302br.net',
+'ad.doubleclick.net.42210.9318.302br.net',
+'ad.doubleclick.net.42213.9318.302br.net',
+'ad.doubleclick.net.42216.9318.302br.net',
+'ad.doubleclick.net.42479.9322.302br.net',
+'ad.doubleclick.net.42482.9322.302br.net',
+'ad.doubleclick.net.42485.9322.302br.net',
+'ad.doubleclick.net.42488.9322.302br.net',
+'ad.doubleclick.net.42494.9322.302br.net',
+'ad.doubleclick.net.42533.9324.302br.net',
+'ad.doubleclick.net.42534.9324.302br.net',
+'ad.doubleclick.net.42535.9324.302br.net',
+'ad.doubleclick.net.42536.9324.302br.net',
+'ad.doubleclick.net.42537.9324.302br.net',
+'ad.doubleclick.net.42538.9324.302br.net',
+'ad.doubleclick.net.42539.9324.302br.net',
+'ad.doubleclick.net.42540.9324.302br.net',
+'ad.doubleclick.net.42541.9324.302br.net',
+'ad.doubleclick.net.42551.9323.302br.net',
+'ad.doubleclick.net.42552.9323.302br.net',
+'ad.doubleclick.net.42553.9323.302br.net',
+'ad.doubleclick.net.42554.9323.302br.net',
+'ad.doubleclick.net.42555.9323.302br.net',
+'ad.doubleclick.net.42556.9323.302br.net',
+'ad.doubleclick.net.42557.9323.302br.net',
+'ad.doubleclick.net.42558.9323.302br.net',
+'ad.doubleclick.net.42559.9323.302br.net',
+'ad.doubleclick.net.42560.9289.302br.net',
+'ad.doubleclick.net.42561.9289.302br.net',
+'ad.doubleclick.net.42562.9289.302br.net',
+'ad.doubleclick.net.42588.9325.302br.net',
+'ad.doubleclick.net.42589.9325.302br.net',
+'ad.doubleclick.net.42590.9325.302br.net',
+'ad.doubleclick.net.42591.9325.302br.net',
+'ad.doubleclick.net.42592.9325.302br.net',
+'ad.doubleclick.net.42594.9325.302br.net',
+'ad.doubleclick.net.42595.9325.302br.net',
+'ad.doubleclick.net.42596.9325.302br.net',
+'ad.doubleclick.net.426.7000.302br.net',
+'ad.doubleclick.net.42600.9325.302br.net',
+'ad.doubleclick.net.42601.9325.302br.net',
+'ad.doubleclick.net.42603.9325.302br.net',
+'ad.doubleclick.net.42604.9325.302br.net',
+'ad.doubleclick.net.42605.9325.302br.net',
+'ad.doubleclick.net.42606.9325.302br.net',
+'ad.doubleclick.net.42607.9325.302br.net',
+'ad.doubleclick.net.42609.9325.302br.net',
+'ad.doubleclick.net.42610.9325.302br.net',
+'ad.doubleclick.net.42613.9325.302br.net',
+'ad.doubleclick.net.42616.9325.302br.net',
+'ad.doubleclick.net.42619.9325.302br.net',
+'ad.doubleclick.net.42620.9325.302br.net',
+'ad.doubleclick.net.42621.9325.302br.net',
+'ad.doubleclick.net.42622.9325.302br.net',
+'ad.doubleclick.net.42627.9325.302br.net',
+'ad.doubleclick.net.42628.9325.302br.net',
+'ad.doubleclick.net.42630.9325.302br.net',
+'ad.doubleclick.net.42631.9325.302br.net',
+'ad.doubleclick.net.42641.9325.302br.net',
+'ad.doubleclick.net.42654.9325.302br.net',
+'ad.doubleclick.net.42655.9325.302br.net',
+'ad.doubleclick.net.42668.9325.302br.net',
+'ad.doubleclick.net.42724.9240.302br.net',
+'ad.doubleclick.net.42730.9240.302br.net',
+'ad.doubleclick.net.42739.9239.302br.net',
+'ad.doubleclick.net.42750.9164.302br.net',
+'ad.doubleclick.net.42751.9164.302br.net',
+'ad.doubleclick.net.42753.9164.302br.net',
+'ad.doubleclick.net.42754.9164.302br.net',
+'ad.doubleclick.net.42756.9164.302br.net',
+'ad.doubleclick.net.42757.9164.302br.net',
+'ad.doubleclick.net.42971.9166.302br.net',
+'ad.doubleclick.net.42973.9166.302br.net',
+'ad.doubleclick.net.42974.9166.302br.net',
+'ad.doubleclick.net.42976.9166.302br.net',
+'ad.doubleclick.net.42977.9166.302br.net',
+'ad.doubleclick.net.42979.9166.302br.net',
+'ad.doubleclick.net.42980.9166.302br.net',
+'ad.doubleclick.net.42982.9166.302br.net',
+'ad.doubleclick.net.42983.9166.302br.net',
+'ad.doubleclick.net.42985.9166.302br.net',
+'ad.doubleclick.net.42986.9166.302br.net',
+'ad.doubleclick.net.42988.9166.302br.net',
+'ad.doubleclick.net.42989.9166.302br.net',
+'ad.doubleclick.net.42991.9166.302br.net',
+'ad.doubleclick.net.42997.9081.302br.net',
+'ad.doubleclick.net.42999.9082.302br.net',
+'ad.doubleclick.net.43000.9082.302br.net',
+'ad.doubleclick.net.43001.9082.302br.net',
+'ad.doubleclick.net.43003.9082.302br.net',
+'ad.doubleclick.net.43004.9082.302br.net',
+'ad.doubleclick.net.43006.9325.302br.net',
+'ad.doubleclick.net.43007.9325.302br.net',
+'ad.doubleclick.net.43009.9325.302br.net',
+'ad.doubleclick.net.43010.9325.302br.net',
+'ad.doubleclick.net.43015.9325.302br.net',
+'ad.doubleclick.net.43016.9325.302br.net',
+'ad.doubleclick.net.43020.9325.302br.net',
+'ad.doubleclick.net.43024.9325.302br.net',
+'ad.doubleclick.net.43025.9325.302br.net',
+'ad.doubleclick.net.43027.9325.302br.net',
+'ad.doubleclick.net.43028.9325.302br.net',
+'ad.doubleclick.net.43030.9325.302br.net',
+'ad.doubleclick.net.43031.9325.302br.net',
+'ad.doubleclick.net.43033.9325.302br.net',
+'ad.doubleclick.net.43034.9325.302br.net',
+'ad.doubleclick.net.43036.9325.302br.net',
+'ad.doubleclick.net.43037.9325.302br.net',
+'ad.doubleclick.net.43047.9296.302br.net',
+'ad.doubleclick.net.43048.9296.302br.net',
+'ad.doubleclick.net.43049.9296.302br.net',
+'ad.doubleclick.net.43050.9296.302br.net',
+'ad.doubleclick.net.43051.9296.302br.net',
+'ad.doubleclick.net.43052.9296.302br.net',
+'ad.doubleclick.net.43063.9296.302br.net',
+'ad.doubleclick.net.43064.9296.302br.net',
+'ad.doubleclick.net.43065.9296.302br.net',
+'ad.doubleclick.net.43066.9296.302br.net',
+'ad.doubleclick.net.43067.9296.302br.net',
+'ad.doubleclick.net.43068.9296.302br.net',
+'ad.doubleclick.net.43071.9285.302br.net',
+'ad.doubleclick.net.43072.9285.302br.net',
+'ad.doubleclick.net.43073.9285.302br.net',
+'ad.doubleclick.net.43074.9285.302br.net',
+'ad.doubleclick.net.43075.9285.302br.net',
+'ad.doubleclick.net.43076.9285.302br.net',
+'ad.doubleclick.net.43077.9285.302br.net',
+'ad.doubleclick.net.43078.9285.302br.net',
+'ad.doubleclick.net.43079.9285.302br.net',
+'ad.doubleclick.net.43080.9285.302br.net',
+'ad.doubleclick.net.43081.9285.302br.net',
+'ad.doubleclick.net.43082.9285.302br.net',
+'ad.doubleclick.net.43083.9285.302br.net',
+'ad.doubleclick.net.43084.9285.302br.net',
+'ad.doubleclick.net.43085.9285.302br.net',
+'ad.doubleclick.net.43086.9285.302br.net',
+'ad.doubleclick.net.43087.9285.302br.net',
+'ad.doubleclick.net.43088.9285.302br.net',
+'ad.doubleclick.net.43089.9285.302br.net',
+'ad.doubleclick.net.43090.9285.302br.net',
+'ad.doubleclick.net.43091.9285.302br.net',
+'ad.doubleclick.net.43092.9285.302br.net',
+'ad.doubleclick.net.43093.9285.302br.net',
+'ad.doubleclick.net.43094.9285.302br.net',
+'ad.doubleclick.net.43119.9296.302br.net',
+'ad.doubleclick.net.43120.9296.302br.net',
+'ad.doubleclick.net.43121.9296.302br.net',
+'ad.doubleclick.net.43122.9296.302br.net',
+'ad.doubleclick.net.43125.9296.302br.net',
+'ad.doubleclick.net.43126.9296.302br.net',
+'ad.doubleclick.net.43127.9296.302br.net',
+'ad.doubleclick.net.43128.9296.302br.net',
+'ad.doubleclick.net.43129.9296.302br.net',
+'ad.doubleclick.net.43130.9296.302br.net',
+'ad.doubleclick.net.43131.9296.302br.net',
+'ad.doubleclick.net.43132.9296.302br.net',
+'ad.doubleclick.net.43133.9295.302br.net',
+'ad.doubleclick.net.43134.9295.302br.net',
+'ad.doubleclick.net.43135.9295.302br.net',
+'ad.doubleclick.net.43137.9295.302br.net',
+'ad.doubleclick.net.43138.9295.302br.net',
+'ad.doubleclick.net.43150.9329.302br.net',
+'ad.doubleclick.net.43153.9329.302br.net',
+'ad.doubleclick.net.43156.9329.302br.net',
+'ad.doubleclick.net.43159.9329.302br.net',
+'ad.doubleclick.net.43162.9329.302br.net',
+'ad.doubleclick.net.43165.9329.302br.net',
+'ad.doubleclick.net.43168.9329.302br.net',
+'ad.doubleclick.net.43171.9329.302br.net',
+'ad.doubleclick.net.43174.9329.302br.net',
+'ad.doubleclick.net.43177.9329.302br.net',
+'ad.doubleclick.net.43180.9329.302br.net',
+'ad.doubleclick.net.43183.9329.302br.net',
+'ad.doubleclick.net.43186.9329.302br.net',
+'ad.doubleclick.net.43189.9329.302br.net',
+'ad.doubleclick.net.43192.9329.302br.net',
+'ad.doubleclick.net.43195.9329.302br.net',
+'ad.doubleclick.net.43198.9329.302br.net',
+'ad.doubleclick.net.43201.9329.302br.net',
+'ad.doubleclick.net.43204.9329.302br.net',
+'ad.doubleclick.net.43207.9329.302br.net',
+'ad.doubleclick.net.43210.9329.302br.net',
+'ad.doubleclick.net.43213.9329.302br.net',
+'ad.doubleclick.net.43216.9329.302br.net',
+'ad.doubleclick.net.43219.9329.302br.net',
+'ad.doubleclick.net.43288.9331.302br.net',
+'ad.doubleclick.net.43291.9331.302br.net',
+'ad.doubleclick.net.43294.9331.302br.net',
+'ad.doubleclick.net.43297.9331.302br.net',
+'ad.doubleclick.net.43300.9331.302br.net',
+'ad.doubleclick.net.43303.9331.302br.net',
+'ad.doubleclick.net.43319.9330.302br.net',
+'ad.doubleclick.net.43320.9330.302br.net',
+'ad.doubleclick.net.43323.9330.302br.net',
+'ad.doubleclick.net.43328.9330.302br.net',
+'ad.doubleclick.net.43329.9330.302br.net',
+'ad.doubleclick.net.43331.9330.302br.net',
+'ad.doubleclick.net.43332.9330.302br.net',
+'ad.doubleclick.net.43334.9330.302br.net',
+'ad.doubleclick.net.43338.9330.302br.net',
+'ad.doubleclick.net.43454.9315.302br.net',
+'ad.doubleclick.net.43456.9315.302br.net',
+'ad.doubleclick.net.43458.9315.302br.net',
+'ad.doubleclick.net.43459.9315.302br.net',
+'ad.doubleclick.net.43460.9315.302br.net',
+'ad.doubleclick.net.43465.9315.302br.net',
+'ad.doubleclick.net.43468.9315.302br.net',
+'ad.doubleclick.net.43469.9315.302br.net',
+'ad.doubleclick.net.43474.9315.302br.net',
+'ad.doubleclick.net.43480.9315.302br.net',
+'ad.doubleclick.net.43483.9315.302br.net',
+'ad.doubleclick.net.43487.9315.302br.net',
+'ad.doubleclick.net.435.7000.302br.net',
+'ad.doubleclick.net.43537.9078.302br.net',
+'ad.doubleclick.net.43543.9083.302br.net',
+'ad.doubleclick.net.43546.9083.302br.net',
+'ad.doubleclick.net.43549.9076.302br.net',
+'ad.doubleclick.net.43555.9077.302br.net',
+'ad.doubleclick.net.43556.9077.302br.net',
+'ad.doubleclick.net.43557.9303.302br.net',
+'ad.doubleclick.net.43558.9303.302br.net',
+'ad.doubleclick.net.43559.9303.302br.net',
+'ad.doubleclick.net.43561.9303.302br.net',
+'ad.doubleclick.net.43562.9303.302br.net',
+'ad.doubleclick.net.43563.9303.302br.net',
+'ad.doubleclick.net.43564.9303.302br.net',
+'ad.doubleclick.net.43565.9303.302br.net',
+'ad.doubleclick.net.43567.9303.302br.net',
+'ad.doubleclick.net.43568.9303.302br.net',
+'ad.doubleclick.net.43569.9303.302br.net',
+'ad.doubleclick.net.43570.9303.302br.net',
+'ad.doubleclick.net.43571.9303.302br.net',
+'ad.doubleclick.net.43572.9303.302br.net',
+'ad.doubleclick.net.43573.9303.302br.net',
+'ad.doubleclick.net.43574.9303.302br.net',
+'ad.doubleclick.net.43576.9086.302br.net',
+'ad.doubleclick.net.43577.9086.302br.net',
+'ad.doubleclick.net.43579.9087.302br.net',
+'ad.doubleclick.net.43582.9085.302br.net',
+'ad.doubleclick.net.43583.9085.302br.net',
+'ad.doubleclick.net.43584.9333.302br.net',
+'ad.doubleclick.net.43587.9333.302br.net',
+'ad.doubleclick.net.43590.9333.302br.net',
+'ad.doubleclick.net.43593.9333.302br.net',
+'ad.doubleclick.net.43596.9333.302br.net',
+'ad.doubleclick.net.43599.9333.302br.net',
+'ad.doubleclick.net.43602.9333.302br.net',
+'ad.doubleclick.net.43605.9333.302br.net',
+'ad.doubleclick.net.43608.9333.302br.net',
+'ad.doubleclick.net.43611.9333.302br.net',
+'ad.doubleclick.net.43614.9333.302br.net',
+'ad.doubleclick.net.43617.9333.302br.net',
+'ad.doubleclick.net.43622.9333.302br.net',
+'ad.doubleclick.net.43625.9333.302br.net',
+'ad.doubleclick.net.43628.9333.302br.net',
+'ad.doubleclick.net.43630.9333.302br.net',
+'ad.doubleclick.net.43631.9333.302br.net',
+'ad.doubleclick.net.43633.9333.302br.net',
+'ad.doubleclick.net.43634.9333.302br.net',
+'ad.doubleclick.net.43636.9333.302br.net',
+'ad.doubleclick.net.43637.9333.302br.net',
+'ad.doubleclick.net.43639.9333.302br.net',
+'ad.doubleclick.net.43640.9333.302br.net',
+'ad.doubleclick.net.43642.9333.302br.net',
+'ad.doubleclick.net.43643.9333.302br.net',
+'ad.doubleclick.net.43645.9333.302br.net',
+'ad.doubleclick.net.43646.9333.302br.net',
+'ad.doubleclick.net.43652.9334.302br.net',
+'ad.doubleclick.net.43655.9334.302br.net',
+'ad.doubleclick.net.43658.9334.302br.net',
+'ad.doubleclick.net.43659.9334.302br.net',
+'ad.doubleclick.net.43667.9334.302br.net',
+'ad.doubleclick.net.43670.9334.302br.net',
+'ad.doubleclick.net.43673.9334.302br.net',
+'ad.doubleclick.net.43676.9335.302br.net',
+'ad.doubleclick.net.43679.9335.302br.net',
+'ad.doubleclick.net.43680.9335.302br.net',
+'ad.doubleclick.net.43682.9335.302br.net',
+'ad.doubleclick.net.43685.9335.302br.net',
+'ad.doubleclick.net.43686.9335.302br.net',
+'ad.doubleclick.net.43688.9335.302br.net',
+'ad.doubleclick.net.43689.9335.302br.net',
+'ad.doubleclick.net.43691.9335.302br.net',
+'ad.doubleclick.net.43694.9335.302br.net',
+'ad.doubleclick.net.43695.9335.302br.net',
+'ad.doubleclick.net.43697.9335.302br.net',
+'ad.doubleclick.net.43700.9335.302br.net',
+'ad.doubleclick.net.43703.9335.302br.net',
+'ad.doubleclick.net.43719.9335.302br.net',
+'ad.doubleclick.net.43721.9335.302br.net',
+'ad.doubleclick.net.43725.9335.302br.net',
+'ad.doubleclick.net.43727.9335.302br.net',
+'ad.doubleclick.net.43728.9335.302br.net',
+'ad.doubleclick.net.43730.9335.302br.net',
+'ad.doubleclick.net.43734.9335.302br.net',
+'ad.doubleclick.net.43736.9335.302br.net',
+'ad.doubleclick.net.43737.9335.302br.net',
+'ad.doubleclick.net.43739.9335.302br.net',
+'ad.doubleclick.net.43740.9335.302br.net',
+'ad.doubleclick.net.43742.9335.302br.net',
+'ad.doubleclick.net.43752.9335.302br.net',
+'ad.doubleclick.net.43754.9335.302br.net',
+'ad.doubleclick.net.43755.9335.302br.net',
+'ad.doubleclick.net.43757.9335.302br.net',
+'ad.doubleclick.net.43758.9335.302br.net',
+'ad.doubleclick.net.43788.9335.302br.net',
+'ad.doubleclick.net.43790.9335.302br.net',
+'ad.doubleclick.net.43791.9335.302br.net',
+'ad.doubleclick.net.43793.9335.302br.net',
+'ad.doubleclick.net.43794.9335.302br.net',
+'ad.doubleclick.net.43796.9335.302br.net',
+'ad.doubleclick.net.43799.9335.302br.net',
+'ad.doubleclick.net.438.7000.302br.net',
+'ad.doubleclick.net.43800.9335.302br.net',
+'ad.doubleclick.net.43802.9335.302br.net',
+'ad.doubleclick.net.43803.9335.302br.net',
+'ad.doubleclick.net.43805.9335.302br.net',
+'ad.doubleclick.net.43812.9335.302br.net',
+'ad.doubleclick.net.43813.9335.302br.net',
+'ad.doubleclick.net.43814.9335.302br.net',
+'ad.doubleclick.net.43816.9335.302br.net',
+'ad.doubleclick.net.43817.9335.302br.net',
+'ad.doubleclick.net.43822.9335.302br.net',
+'ad.doubleclick.net.43823.9335.302br.net',
+'ad.doubleclick.net.43846.9315.302br.net',
+'ad.doubleclick.net.43849.9315.302br.net',
+'ad.doubleclick.net.43864.9315.302br.net',
+'ad.doubleclick.net.43865.9315.302br.net',
+'ad.doubleclick.net.43866.9315.302br.net',
+'ad.doubleclick.net.43867.9315.302br.net',
+'ad.doubleclick.net.43868.9315.302br.net',
+'ad.doubleclick.net.43870.9315.302br.net',
+'ad.doubleclick.net.43871.9315.302br.net',
+'ad.doubleclick.net.439.7000.302br.net',
+'ad.doubleclick.net.44218.9336.302br.net',
+'ad.doubleclick.net.44219.9336.302br.net',
+'ad.doubleclick.net.44221.9336.302br.net',
+'ad.doubleclick.net.44222.9336.302br.net',
+'ad.doubleclick.net.44224.9336.302br.net',
+'ad.doubleclick.net.44227.9336.302br.net',
+'ad.doubleclick.net.44230.9336.302br.net',
+'ad.doubleclick.net.44233.9336.302br.net',
+'ad.doubleclick.net.44236.9336.302br.net',
+'ad.doubleclick.net.44239.9336.302br.net',
+'ad.doubleclick.net.44240.9336.302br.net',
+'ad.doubleclick.net.44242.9336.302br.net',
+'ad.doubleclick.net.44243.9336.302br.net',
+'ad.doubleclick.net.44245.9336.302br.net',
+'ad.doubleclick.net.44246.9336.302br.net',
+'ad.doubleclick.net.44248.9336.302br.net',
+'ad.doubleclick.net.44249.9336.302br.net',
+'ad.doubleclick.net.44260.9336.302br.net',
+'ad.doubleclick.net.44269.9336.302br.net',
+'ad.doubleclick.net.44272.9336.302br.net',
+'ad.doubleclick.net.44273.9336.302br.net',
+'ad.doubleclick.net.44275.9336.302br.net',
+'ad.doubleclick.net.44276.9336.302br.net',
+'ad.doubleclick.net.44278.9336.302br.net',
+'ad.doubleclick.net.44279.9336.302br.net',
+'ad.doubleclick.net.44281.9336.302br.net',
+'ad.doubleclick.net.44284.9336.302br.net',
+'ad.doubleclick.net.44285.9336.302br.net',
+'ad.doubleclick.net.44287.9336.302br.net',
+'ad.doubleclick.net.44290.9336.302br.net',
+'ad.doubleclick.net.44293.9336.302br.net',
+'ad.doubleclick.net.44296.9336.302br.net',
+'ad.doubleclick.net.44299.9336.302br.net',
+'ad.doubleclick.net.44302.9336.302br.net',
+'ad.doubleclick.net.44303.9336.302br.net',
+'ad.doubleclick.net.44305.9336.302br.net',
+'ad.doubleclick.net.44306.9336.302br.net',
+'ad.doubleclick.net.44308.9336.302br.net',
+'ad.doubleclick.net.44311.9336.302br.net',
+'ad.doubleclick.net.44312.9336.302br.net',
+'ad.doubleclick.net.44314.9336.302br.net',
+'ad.doubleclick.net.44315.9336.302br.net',
+'ad.doubleclick.net.44317.9336.302br.net',
+'ad.doubleclick.net.44320.9336.302br.net',
+'ad.doubleclick.net.44323.9336.302br.net',
+'ad.doubleclick.net.44324.9336.302br.net',
+'ad.doubleclick.net.44326.9336.302br.net',
+'ad.doubleclick.net.44338.9336.302br.net',
+'ad.doubleclick.net.44341.9336.302br.net',
+'ad.doubleclick.net.44344.9336.302br.net',
+'ad.doubleclick.net.44347.9336.302br.net',
+'ad.doubleclick.net.44348.9336.302br.net',
+'ad.doubleclick.net.44350.9336.302br.net',
+'ad.doubleclick.net.44351.9336.302br.net',
+'ad.doubleclick.net.44353.9336.302br.net',
+'ad.doubleclick.net.44354.9336.302br.net',
+'ad.doubleclick.net.44356.9336.302br.net',
+'ad.doubleclick.net.44357.9336.302br.net',
+'ad.doubleclick.net.44359.9336.302br.net',
+'ad.doubleclick.net.44360.9336.302br.net',
+'ad.doubleclick.net.44362.9336.302br.net',
+'ad.doubleclick.net.44363.9336.302br.net',
+'ad.doubleclick.net.44365.9336.302br.net',
+'ad.doubleclick.net.44366.9336.302br.net',
+'ad.doubleclick.net.44368.9336.302br.net',
+'ad.doubleclick.net.44369.9336.302br.net',
+'ad.doubleclick.net.44371.9336.302br.net',
+'ad.doubleclick.net.44374.9336.302br.net',
+'ad.doubleclick.net.44375.9336.302br.net',
+'ad.doubleclick.net.44377.9336.302br.net',
+'ad.doubleclick.net.44380.9336.302br.net',
+'ad.doubleclick.net.44381.9336.302br.net',
+'ad.doubleclick.net.44383.9336.302br.net',
+'ad.doubleclick.net.44384.9336.302br.net',
+'ad.doubleclick.net.44386.9336.302br.net',
+'ad.doubleclick.net.44387.9336.302br.net',
+'ad.doubleclick.net.44389.9336.302br.net',
+'ad.doubleclick.net.44390.9336.302br.net',
+'ad.doubleclick.net.44392.9336.302br.net',
+'ad.doubleclick.net.44393.9336.302br.net',
+'ad.doubleclick.net.44395.9336.302br.net',
+'ad.doubleclick.net.44398.9336.302br.net',
+'ad.doubleclick.net.44401.9336.302br.net',
+'ad.doubleclick.net.44402.9336.302br.net',
+'ad.doubleclick.net.44404.9336.302br.net',
+'ad.doubleclick.net.44407.9336.302br.net',
+'ad.doubleclick.net.44409.9336.302br.net',
+'ad.doubleclick.net.44410.9336.302br.net',
+'ad.doubleclick.net.44411.9336.302br.net',
+'ad.doubleclick.net.44412.9336.302br.net',
+'ad.doubleclick.net.44413.9336.302br.net',
+'ad.doubleclick.net.44414.9336.302br.net',
+'ad.doubleclick.net.44415.9336.302br.net',
+'ad.doubleclick.net.44416.9336.302br.net',
+'ad.doubleclick.net.44417.9336.302br.net',
+'ad.doubleclick.net.44418.9336.302br.net',
+'ad.doubleclick.net.44419.9336.302br.net',
+'ad.doubleclick.net.44420.9336.302br.net',
+'ad.doubleclick.net.44425.9336.302br.net',
+'ad.doubleclick.net.44428.9336.302br.net',
+'ad.doubleclick.net.44434.9336.302br.net',
+'ad.doubleclick.net.44440.9336.302br.net',
+'ad.doubleclick.net.44441.9336.302br.net',
+'ad.doubleclick.net.44443.9336.302br.net',
+'ad.doubleclick.net.44444.9336.302br.net',
+'ad.doubleclick.net.44446.9336.302br.net',
+'ad.doubleclick.net.44447.9336.302br.net',
+'ad.doubleclick.net.44449.9336.302br.net',
+'ad.doubleclick.net.44452.9336.302br.net',
+'ad.doubleclick.net.44455.9336.302br.net',
+'ad.doubleclick.net.44456.9336.302br.net',
+'ad.doubleclick.net.44461.9336.302br.net',
+'ad.doubleclick.net.44464.9336.302br.net',
+'ad.doubleclick.net.44467.9336.302br.net',
+'ad.doubleclick.net.44470.9336.302br.net',
+'ad.doubleclick.net.44473.9336.302br.net',
+'ad.doubleclick.net.44474.9336.302br.net',
+'ad.doubleclick.net.44476.9336.302br.net',
+'ad.doubleclick.net.44479.9336.302br.net',
+'ad.doubleclick.net.44482.9336.302br.net',
+'ad.doubleclick.net.44483.9336.302br.net',
+'ad.doubleclick.net.44485.9336.302br.net',
+'ad.doubleclick.net.44486.9336.302br.net',
+'ad.doubleclick.net.44488.9336.302br.net',
+'ad.doubleclick.net.44489.9336.302br.net',
+'ad.doubleclick.net.44491.9336.302br.net',
+'ad.doubleclick.net.44494.9336.302br.net',
+'ad.doubleclick.net.44495.9336.302br.net',
+'ad.doubleclick.net.445.7000.302br.net',
+'ad.doubleclick.net.44500.9336.302br.net',
+'ad.doubleclick.net.44503.9336.302br.net',
+'ad.doubleclick.net.44504.9336.302br.net',
+'ad.doubleclick.net.44506.9336.302br.net',
+'ad.doubleclick.net.44507.9336.302br.net',
+'ad.doubleclick.net.44509.9336.302br.net',
+'ad.doubleclick.net.44512.9336.302br.net',
+'ad.doubleclick.net.44513.9336.302br.net',
+'ad.doubleclick.net.44515.9336.302br.net',
+'ad.doubleclick.net.44517.9336.302br.net',
+'ad.doubleclick.net.44518.9336.302br.net',
+'ad.doubleclick.net.44519.9336.302br.net',
+'ad.doubleclick.net.44521.9336.302br.net',
+'ad.doubleclick.net.44522.9336.302br.net',
+'ad.doubleclick.net.44523.9336.302br.net',
+'ad.doubleclick.net.44524.9336.302br.net',
+'ad.doubleclick.net.44525.9336.302br.net',
+'ad.doubleclick.net.44526.9336.302br.net',
+'ad.doubleclick.net.44527.9336.302br.net',
+'ad.doubleclick.net.44528.9336.302br.net',
+'ad.doubleclick.net.44529.9336.302br.net',
+'ad.doubleclick.net.44530.9336.302br.net',
+'ad.doubleclick.net.44531.9336.302br.net',
+'ad.doubleclick.net.44532.9336.302br.net',
+'ad.doubleclick.net.44533.9336.302br.net',
+'ad.doubleclick.net.44534.9336.302br.net',
+'ad.doubleclick.net.44535.9336.302br.net',
+'ad.doubleclick.net.44536.9336.302br.net',
+'ad.doubleclick.net.44537.9336.302br.net',
+'ad.doubleclick.net.44538.9336.302br.net',
+'ad.doubleclick.net.44539.9336.302br.net',
+'ad.doubleclick.net.44540.9336.302br.net',
+'ad.doubleclick.net.44542.9336.302br.net',
+'ad.doubleclick.net.44545.9336.302br.net',
+'ad.doubleclick.net.44548.9336.302br.net',
+'ad.doubleclick.net.44551.9336.302br.net',
+'ad.doubleclick.net.44552.9336.302br.net',
+'ad.doubleclick.net.44554.9336.302br.net',
+'ad.doubleclick.net.44555.9336.302br.net',
+'ad.doubleclick.net.44557.9336.302br.net',
+'ad.doubleclick.net.44558.9336.302br.net',
+'ad.doubleclick.net.44571.9335.302br.net',
+'ad.doubleclick.net.44573.9335.302br.net',
+'ad.doubleclick.net.44574.9335.302br.net',
+'ad.doubleclick.net.44576.9335.302br.net',
+'ad.doubleclick.net.44580.9335.302br.net',
+'ad.doubleclick.net.44582.9335.302br.net',
+'ad.doubleclick.net.44583.9335.302br.net',
+'ad.doubleclick.net.44585.9335.302br.net',
+'ad.doubleclick.net.44592.9335.302br.net',
+'ad.doubleclick.net.44597.9335.302br.net',
+'ad.doubleclick.net.446.7000.302br.net',
+'ad.doubleclick.net.44607.9335.302br.net',
+'ad.doubleclick.net.44608.9335.302br.net',
+'ad.doubleclick.net.44609.9335.302br.net',
+'ad.doubleclick.net.44610.9335.302br.net',
+'ad.doubleclick.net.44611.9335.302br.net',
+'ad.doubleclick.net.44612.9335.302br.net',
+'ad.doubleclick.net.44614.9335.302br.net',
+'ad.doubleclick.net.44615.9335.302br.net',
+'ad.doubleclick.net.447.7000.302br.net',
+'ad.doubleclick.net.44803.9079.302br.net',
+'ad.doubleclick.net.44818.9338.302br.net',
+'ad.doubleclick.net.44821.9338.302br.net',
+'ad.doubleclick.net.44823.9338.302br.net',
+'ad.doubleclick.net.44824.9338.302br.net',
+'ad.doubleclick.net.44825.9338.302br.net',
+'ad.doubleclick.net.44826.9338.302br.net',
+'ad.doubleclick.net.44827.9338.302br.net',
+'ad.doubleclick.net.44828.9338.302br.net',
+'ad.doubleclick.net.44889.9339.302br.net',
+'ad.doubleclick.net.44890.9339.302br.net',
+'ad.doubleclick.net.44891.9339.302br.net',
+'ad.doubleclick.net.44892.9339.302br.net',
+'ad.doubleclick.net.44893.9339.302br.net',
+'ad.doubleclick.net.44894.9339.302br.net',
+'ad.doubleclick.net.44895.9339.302br.net',
+'ad.doubleclick.net.44896.9339.302br.net',
+'ad.doubleclick.net.44897.9339.302br.net',
+'ad.doubleclick.net.44898.9339.302br.net',
+'ad.doubleclick.net.44899.9339.302br.net',
+'ad.doubleclick.net.44900.9339.302br.net',
+'ad.doubleclick.net.44901.9339.302br.net',
+'ad.doubleclick.net.44902.9339.302br.net',
+'ad.doubleclick.net.44903.9339.302br.net',
+'ad.doubleclick.net.44905.9339.302br.net',
+'ad.doubleclick.net.44906.9339.302br.net',
+'ad.doubleclick.net.44908.9339.302br.net',
+'ad.doubleclick.net.44909.9339.302br.net',
+'ad.doubleclick.net.44910.9339.302br.net',
+'ad.doubleclick.net.44911.9339.302br.net',
+'ad.doubleclick.net.44912.9339.302br.net',
+'ad.doubleclick.net.44913.9339.302br.net',
+'ad.doubleclick.net.44914.9339.302br.net',
+'ad.doubleclick.net.44915.9339.302br.net',
+'ad.doubleclick.net.44916.9339.302br.net',
+'ad.doubleclick.net.44917.9339.302br.net',
+'ad.doubleclick.net.44918.9339.302br.net',
+'ad.doubleclick.net.44919.9339.302br.net',
+'ad.doubleclick.net.44920.9339.302br.net',
+'ad.doubleclick.net.44921.9339.302br.net',
+'ad.doubleclick.net.44922.9339.302br.net',
+'ad.doubleclick.net.44923.9339.302br.net',
+'ad.doubleclick.net.44924.9339.302br.net',
+'ad.doubleclick.net.44926.9339.302br.net',
+'ad.doubleclick.net.44927.9339.302br.net',
+'ad.doubleclick.net.44929.9339.302br.net',
+'ad.doubleclick.net.44930.9339.302br.net',
+'ad.doubleclick.net.44931.9339.302br.net',
+'ad.doubleclick.net.44932.9339.302br.net',
+'ad.doubleclick.net.44933.9339.302br.net',
+'ad.doubleclick.net.44934.9339.302br.net',
+'ad.doubleclick.net.44937.9339.302br.net',
+'ad.doubleclick.net.44955.9250.302br.net',
+'ad.doubleclick.net.44958.9250.302br.net',
+'ad.doubleclick.net.45034.9341.302br.net',
+'ad.doubleclick.net.45035.9341.302br.net',
+'ad.doubleclick.net.45037.9341.302br.net',
+'ad.doubleclick.net.45038.9341.302br.net',
+'ad.doubleclick.net.45040.9341.302br.net',
+'ad.doubleclick.net.45041.9341.302br.net',
+'ad.doubleclick.net.45396.9285.302br.net',
+'ad.doubleclick.net.45397.9285.302br.net',
+'ad.doubleclick.net.45398.9285.302br.net',
+'ad.doubleclick.net.45399.9285.302br.net',
+'ad.doubleclick.net.45400.9285.302br.net',
+'ad.doubleclick.net.45401.9285.302br.net',
+'ad.doubleclick.net.45402.9285.302br.net',
+'ad.doubleclick.net.45403.9285.302br.net',
+'ad.doubleclick.net.45404.9285.302br.net',
+'ad.doubleclick.net.45405.9285.302br.net',
+'ad.doubleclick.net.45406.9285.302br.net',
+'ad.doubleclick.net.45407.9285.302br.net',
+'ad.doubleclick.net.45408.9285.302br.net',
+'ad.doubleclick.net.45409.9285.302br.net',
+'ad.doubleclick.net.45410.9285.302br.net',
+'ad.doubleclick.net.45411.9285.302br.net',
+'ad.doubleclick.net.45412.9285.302br.net',
+'ad.doubleclick.net.45413.9285.302br.net',
+'ad.doubleclick.net.45441.9344.302br.net',
+'ad.doubleclick.net.45443.9344.302br.net',
+'ad.doubleclick.net.45444.9344.302br.net',
+'ad.doubleclick.net.45446.9344.302br.net',
+'ad.doubleclick.net.45450.9344.302br.net',
+'ad.doubleclick.net.45452.9344.302br.net',
+'ad.doubleclick.net.45462.9344.302br.net',
+'ad.doubleclick.net.45464.9344.302br.net',
+'ad.doubleclick.net.45465.9344.302br.net',
+'ad.doubleclick.net.45467.9344.302br.net',
+'ad.doubleclick.net.45468.9344.302br.net',
+'ad.doubleclick.net.45470.9344.302br.net',
+'ad.doubleclick.net.45471.9344.302br.net',
+'ad.doubleclick.net.45473.9344.302br.net',
+'ad.doubleclick.net.45474.9344.302br.net',
+'ad.doubleclick.net.45476.9344.302br.net',
+'ad.doubleclick.net.45477.9344.302br.net',
+'ad.doubleclick.net.45479.9344.302br.net',
+'ad.doubleclick.net.45480.9344.302br.net',
+'ad.doubleclick.net.45482.9344.302br.net',
+'ad.doubleclick.net.45485.9344.302br.net',
+'ad.doubleclick.net.45492.9268.302br.net',
+'ad.doubleclick.net.45493.9268.302br.net',
+'ad.doubleclick.net.45494.9268.302br.net',
+'ad.doubleclick.net.45495.9268.302br.net',
+'ad.doubleclick.net.45496.9268.302br.net',
+'ad.doubleclick.net.45497.9268.302br.net',
+'ad.doubleclick.net.45499.9268.302br.net',
+'ad.doubleclick.net.45500.9268.302br.net',
+'ad.doubleclick.net.45501.9279.302br.net',
+'ad.doubleclick.net.45502.9279.302br.net',
+'ad.doubleclick.net.45503.9279.302br.net',
+'ad.doubleclick.net.45505.9279.302br.net',
+'ad.doubleclick.net.45506.9279.302br.net',
+'ad.doubleclick.net.45507.9279.302br.net',
+'ad.doubleclick.net.45508.9279.302br.net',
+'ad.doubleclick.net.45509.9279.302br.net',
+'ad.doubleclick.net.45510.9279.302br.net',
+'ad.doubleclick.net.45511.9279.302br.net',
+'ad.doubleclick.net.45512.9279.302br.net',
+'ad.doubleclick.net.45514.9279.302br.net',
+'ad.doubleclick.net.45515.9279.302br.net',
+'ad.doubleclick.net.45516.9279.302br.net',
+'ad.doubleclick.net.45517.9279.302br.net',
+'ad.doubleclick.net.45518.9279.302br.net',
+'ad.doubleclick.net.45519.9279.302br.net',
+'ad.doubleclick.net.45520.9279.302br.net',
+'ad.doubleclick.net.45521.9279.302br.net',
+'ad.doubleclick.net.45523.9279.302br.net',
+'ad.doubleclick.net.45524.9279.302br.net',
+'ad.doubleclick.net.45525.9279.302br.net',
+'ad.doubleclick.net.45526.9279.302br.net',
+'ad.doubleclick.net.45527.9279.302br.net',
+'ad.doubleclick.net.45529.9279.302br.net',
+'ad.doubleclick.net.45530.9279.302br.net',
+'ad.doubleclick.net.45532.9279.302br.net',
+'ad.doubleclick.net.45533.9279.302br.net',
+'ad.doubleclick.net.45538.9279.302br.net',
+'ad.doubleclick.net.45539.9279.302br.net',
+'ad.doubleclick.net.45541.9279.302br.net',
+'ad.doubleclick.net.45542.9279.302br.net',
+'ad.doubleclick.net.45543.9279.302br.net',
+'ad.doubleclick.net.45544.9279.302br.net',
+'ad.doubleclick.net.45545.9279.302br.net',
+'ad.doubleclick.net.45546.9279.302br.net',
+'ad.doubleclick.net.45547.9279.302br.net',
+'ad.doubleclick.net.45548.9279.302br.net',
+'ad.doubleclick.net.45550.9279.302br.net',
+'ad.doubleclick.net.45551.9279.302br.net',
+'ad.doubleclick.net.45553.9279.302br.net',
+'ad.doubleclick.net.45554.9279.302br.net',
+'ad.doubleclick.net.45556.9279.302br.net',
+'ad.doubleclick.net.45557.9279.302br.net',
+'ad.doubleclick.net.45558.9279.302br.net',
+'ad.doubleclick.net.45559.9279.302br.net',
+'ad.doubleclick.net.45560.9279.302br.net',
+'ad.doubleclick.net.45562.9279.302br.net',
+'ad.doubleclick.net.45563.9279.302br.net',
+'ad.doubleclick.net.45565.9279.302br.net',
+'ad.doubleclick.net.45566.9279.302br.net',
+'ad.doubleclick.net.45568.9279.302br.net',
+'ad.doubleclick.net.45569.9279.302br.net',
+'ad.doubleclick.net.45570.9279.302br.net',
+'ad.doubleclick.net.45571.9279.302br.net',
+'ad.doubleclick.net.45572.9279.302br.net',
+'ad.doubleclick.net.45573.9279.302br.net',
+'ad.doubleclick.net.45574.9279.302br.net',
+'ad.doubleclick.net.45575.9279.302br.net',
+'ad.doubleclick.net.45576.9279.302br.net',
+'ad.doubleclick.net.45577.9279.302br.net',
+'ad.doubleclick.net.45578.9279.302br.net',
+'ad.doubleclick.net.45580.9279.302br.net',
+'ad.doubleclick.net.45581.9279.302br.net',
+'ad.doubleclick.net.45583.9279.302br.net',
+'ad.doubleclick.net.45584.9279.302br.net',
+'ad.doubleclick.net.45586.9279.302br.net',
+'ad.doubleclick.net.45587.9279.302br.net',
+'ad.doubleclick.net.45589.9279.302br.net',
+'ad.doubleclick.net.45590.9279.302br.net',
+'ad.doubleclick.net.45591.9279.302br.net',
+'ad.doubleclick.net.45592.9279.302br.net',
+'ad.doubleclick.net.45593.9279.302br.net',
+'ad.doubleclick.net.45595.9279.302br.net',
+'ad.doubleclick.net.45596.9279.302br.net',
+'ad.doubleclick.net.45598.9279.302br.net',
+'ad.doubleclick.net.45599.9279.302br.net',
+'ad.doubleclick.net.45600.9346.302br.net',
+'ad.doubleclick.net.45601.9346.302br.net',
+'ad.doubleclick.net.45602.9346.302br.net',
+'ad.doubleclick.net.45603.9346.302br.net',
+'ad.doubleclick.net.45604.9346.302br.net',
+'ad.doubleclick.net.45605.9346.302br.net',
+'ad.doubleclick.net.45606.9346.302br.net',
+'ad.doubleclick.net.45607.9346.302br.net',
+'ad.doubleclick.net.45608.9346.302br.net',
+'ad.doubleclick.net.45610.9346.302br.net',
+'ad.doubleclick.net.45611.9346.302br.net',
+'ad.doubleclick.net.45612.9346.302br.net',
+'ad.doubleclick.net.45613.9346.302br.net',
+'ad.doubleclick.net.45614.9346.302br.net',
+'ad.doubleclick.net.45616.9346.302br.net',
+'ad.doubleclick.net.45617.9346.302br.net',
+'ad.doubleclick.net.45620.9346.302br.net',
+'ad.doubleclick.net.45623.9346.302br.net',
+'ad.doubleclick.net.45630.9346.302br.net',
+'ad.doubleclick.net.45632.9346.302br.net',
+'ad.doubleclick.net.45633.9346.302br.net',
+'ad.doubleclick.net.45636.9346.302br.net',
+'ad.doubleclick.net.45638.9346.302br.net',
+'ad.doubleclick.net.45639.9346.302br.net',
+'ad.doubleclick.net.45642.9346.302br.net',
+'ad.doubleclick.net.45644.9346.302br.net',
+'ad.doubleclick.net.45645.9346.302br.net',
+'ad.doubleclick.net.45656.9346.302br.net',
+'ad.doubleclick.net.47217.9350.302br.net',
+'ad.doubleclick.net.47220.9350.302br.net',
+'ad.doubleclick.net.47223.9350.302br.net',
+'ad.doubleclick.net.47226.9350.302br.net',
+'ad.doubleclick.net.47229.9350.302br.net',
+'ad.doubleclick.net.47232.9350.302br.net',
+'ad.doubleclick.net.47234.9350.302br.net',
+'ad.doubleclick.net.47236.9350.302br.net',
+'ad.doubleclick.net.47237.9350.302br.net',
+'ad.doubleclick.net.47239.9350.302br.net',
+'ad.doubleclick.net.47240.9350.302br.net',
+'ad.doubleclick.net.47242.9350.302br.net',
+'ad.doubleclick.net.47243.9350.302br.net',
+'ad.doubleclick.net.47245.9350.302br.net',
+'ad.doubleclick.net.47246.9350.302br.net',
+'ad.doubleclick.net.47248.9350.302br.net',
+'ad.doubleclick.net.47249.9350.302br.net',
+'ad.doubleclick.net.47251.9350.302br.net',
+'ad.doubleclick.net.47252.9350.302br.net',
+'ad.doubleclick.net.47254.9350.302br.net',
+'ad.doubleclick.net.47255.9350.302br.net',
+'ad.doubleclick.net.47257.9350.302br.net',
+'ad.doubleclick.net.47260.9350.302br.net',
+'ad.doubleclick.net.47274.9350.302br.net',
+'ad.doubleclick.net.47275.9350.302br.net',
+'ad.doubleclick.net.47277.9350.302br.net',
+'ad.doubleclick.net.47278.9350.302br.net',
+'ad.doubleclick.net.47293.9311.302br.net',
+'ad.doubleclick.net.47296.9311.302br.net',
+'ad.doubleclick.net.47299.9311.302br.net',
+'ad.doubleclick.net.47302.9311.302br.net',
+'ad.doubleclick.net.47305.9311.302br.net',
+'ad.doubleclick.net.47308.9311.302br.net',
+'ad.doubleclick.net.47309.9311.302br.net',
+'ad.doubleclick.net.47317.9311.302br.net',
+'ad.doubleclick.net.47318.9311.302br.net',
+'ad.doubleclick.net.47326.9311.302br.net',
+'ad.doubleclick.net.47332.9311.302br.net',
+'ad.doubleclick.net.47333.9311.302br.net',
+'ad.doubleclick.net.47335.9311.302br.net',
+'ad.doubleclick.net.47338.9311.302br.net',
+'ad.doubleclick.net.47339.9311.302br.net',
+'ad.doubleclick.net.47341.9311.302br.net',
+'ad.doubleclick.net.47347.9311.302br.net',
+'ad.doubleclick.net.47348.9311.302br.net',
+'ad.doubleclick.net.47356.9311.302br.net',
+'ad.doubleclick.net.47357.9311.302br.net',
+'ad.doubleclick.net.47374.9311.302br.net',
+'ad.doubleclick.net.47375.9311.302br.net',
+'ad.doubleclick.net.47380.9311.302br.net',
+'ad.doubleclick.net.47386.9311.302br.net',
+'ad.doubleclick.net.47389.9311.302br.net',
+'ad.doubleclick.net.47395.9311.302br.net',
+'ad.doubleclick.net.47396.9311.302br.net',
+'ad.doubleclick.net.47401.9311.302br.net',
+'ad.doubleclick.net.47402.9311.302br.net',
+'ad.doubleclick.net.47404.9311.302br.net',
+'ad.doubleclick.net.47416.9311.302br.net',
+'ad.doubleclick.net.47417.9311.302br.net',
+'ad.doubleclick.net.47420.9311.302br.net',
+'ad.doubleclick.net.47423.9311.302br.net',
+'ad.doubleclick.net.47426.9311.302br.net',
+'ad.doubleclick.net.47429.9311.302br.net',
+'ad.doubleclick.net.47432.9311.302br.net',
+'ad.doubleclick.net.47435.9311.302br.net',
+'ad.doubleclick.net.47441.9311.302br.net',
+'ad.doubleclick.net.47462.9311.302br.net',
+'ad.doubleclick.net.47474.9311.302br.net',
+'ad.doubleclick.net.47507.9311.302br.net',
+'ad.doubleclick.net.47917.9357.302br.net',
+'ad.doubleclick.net.47919.9357.302br.net',
+'ad.doubleclick.net.47936.9357.302br.net',
+'ad.doubleclick.net.47938.9357.302br.net',
+'ad.doubleclick.net.47940.9357.302br.net',
+'ad.doubleclick.net.47941.9357.302br.net',
+'ad.doubleclick.net.47943.9357.302br.net',
+'ad.doubleclick.net.47944.9357.302br.net',
+'ad.doubleclick.net.47946.9357.302br.net',
+'ad.doubleclick.net.47947.9357.302br.net',
+'ad.doubleclick.net.47949.9357.302br.net',
+'ad.doubleclick.net.47950.9357.302br.net',
+'ad.doubleclick.net.47951.9357.302br.net',
+'ad.doubleclick.net.47954.9357.302br.net',
+'ad.doubleclick.net.47957.9357.302br.net',
+'ad.doubleclick.net.47961.9357.302br.net',
+'ad.doubleclick.net.47964.9357.302br.net',
+'ad.doubleclick.net.47967.9357.302br.net',
+'ad.doubleclick.net.47978.9357.302br.net',
+'ad.doubleclick.net.47979.9357.302br.net',
+'ad.doubleclick.net.47980.9357.302br.net',
+'ad.doubleclick.net.47982.9357.302br.net',
+'ad.doubleclick.net.47983.9357.302br.net',
+'ad.doubleclick.net.47984.9357.302br.net',
+'ad.doubleclick.net.47985.9357.302br.net',
+'ad.doubleclick.net.47986.9357.302br.net',
+'ad.doubleclick.net.47988.9357.302br.net',
+'ad.doubleclick.net.47989.9357.302br.net',
+'ad.doubleclick.net.47990.9357.302br.net',
+'ad.doubleclick.net.47991.9357.302br.net',
+'ad.doubleclick.net.47992.9357.302br.net',
+'ad.doubleclick.net.47993.9357.302br.net',
+'ad.doubleclick.net.47994.9357.302br.net',
+'ad.doubleclick.net.47995.9357.302br.net',
+'ad.doubleclick.net.48408.9318.302br.net',
+'ad.doubleclick.net.48410.9318.302br.net',
+'ad.doubleclick.net.48415.9318.302br.net',
+'ad.doubleclick.net.48417.9318.302br.net',
+'ad.doubleclick.net.48422.9318.302br.net',
+'ad.doubleclick.net.48424.9318.302br.net',
+'ad.doubleclick.net.48441.9318.302br.net',
+'ad.doubleclick.net.48444.9318.302br.net',
+'ad.doubleclick.net.48452.9318.302br.net',
+'ad.doubleclick.net.48458.9318.302br.net',
+'ad.doubleclick.net.48460.9318.302br.net',
+'ad.doubleclick.net.48465.9318.302br.net',
+'ad.doubleclick.net.48467.9318.302br.net',
+'ad.doubleclick.net.48471.9318.302br.net',
+'ad.doubleclick.net.48478.9318.302br.net',
+'ad.doubleclick.net.48480.9318.302br.net',
+'ad.doubleclick.net.48485.9318.302br.net',
+'ad.doubleclick.net.48487.9318.302br.net',
+'ad.doubleclick.net.48492.9318.302br.net',
+'ad.doubleclick.net.48494.9318.302br.net',
+'ad.doubleclick.net.48504.9318.302br.net',
+'ad.doubleclick.net.48506.9318.302br.net',
+'ad.doubleclick.net.48512.9318.302br.net',
+'ad.doubleclick.net.48514.9318.302br.net',
+'ad.doubleclick.net.48517.9318.302br.net',
+'ad.doubleclick.net.48519.9318.302br.net',
+'ad.doubleclick.net.48521.9318.302br.net',
+'ad.doubleclick.net.48523.9318.302br.net',
+'ad.doubleclick.net.48524.9318.302br.net',
+'ad.doubleclick.net.48526.9318.302br.net',
+'ad.doubleclick.net.48529.9318.302br.net',
+'ad.doubleclick.net.48531.9318.302br.net',
+'ad.doubleclick.net.48532.9318.302br.net',
+'ad.doubleclick.net.48533.9318.302br.net',
+'ad.doubleclick.net.48534.9318.302br.net',
+'ad.doubleclick.net.48535.9318.302br.net',
+'ad.doubleclick.net.48536.9318.302br.net',
+'ad.doubleclick.net.48538.9318.302br.net',
+'ad.doubleclick.net.48541.9318.302br.net',
+'ad.doubleclick.net.48542.9318.302br.net',
+'ad.doubleclick.net.48544.9318.302br.net',
+'ad.doubleclick.net.48545.9318.302br.net',
+'ad.doubleclick.net.48547.9318.302br.net',
+'ad.doubleclick.net.48548.9318.302br.net',
+'ad.doubleclick.net.48550.9318.302br.net',
+'ad.doubleclick.net.48551.9318.302br.net',
+'ad.doubleclick.net.48553.9318.302br.net',
+'ad.doubleclick.net.48554.9318.302br.net',
+'ad.doubleclick.net.48556.9318.302br.net',
+'ad.doubleclick.net.48557.9318.302br.net',
+'ad.doubleclick.net.48558.9318.302br.net',
+'ad.doubleclick.net.48559.9318.302br.net',
+'ad.doubleclick.net.48560.9318.302br.net',
+'ad.doubleclick.net.48562.9318.302br.net',
+'ad.doubleclick.net.48563.9318.302br.net',
+'ad.doubleclick.net.48565.9318.302br.net',
+'ad.doubleclick.net.48566.9318.302br.net',
+'ad.doubleclick.net.48568.9318.302br.net',
+'ad.doubleclick.net.48569.9318.302br.net',
+'ad.doubleclick.net.48571.9318.302br.net',
+'ad.doubleclick.net.48574.9318.302br.net',
+'ad.doubleclick.net.48577.9318.302br.net',
+'ad.doubleclick.net.48578.9318.302br.net',
+'ad.doubleclick.net.48580.9318.302br.net',
+'ad.doubleclick.net.48581.9318.302br.net',
+'ad.doubleclick.net.48583.9318.302br.net',
+'ad.doubleclick.net.48584.9318.302br.net',
+'ad.doubleclick.net.48586.9318.302br.net',
+'ad.doubleclick.net.48587.9318.302br.net',
+'ad.doubleclick.net.48589.9318.302br.net',
+'ad.doubleclick.net.48590.9318.302br.net',
+'ad.doubleclick.net.48592.9318.302br.net',
+'ad.doubleclick.net.48593.9318.302br.net',
+'ad.doubleclick.net.48595.9318.302br.net',
+'ad.doubleclick.net.48596.9318.302br.net',
+'ad.doubleclick.net.48598.9318.302br.net',
+'ad.doubleclick.net.48599.9318.302br.net',
+'ad.doubleclick.net.48601.9318.302br.net',
+'ad.doubleclick.net.48602.9318.302br.net',
+'ad.doubleclick.net.48607.9318.302br.net',
+'ad.doubleclick.net.48608.9318.302br.net',
+'ad.doubleclick.net.48610.9318.302br.net',
+'ad.doubleclick.net.48611.9318.302br.net',
+'ad.doubleclick.net.48613.9318.302br.net',
+'ad.doubleclick.net.48614.9318.302br.net',
+'ad.doubleclick.net.48616.9318.302br.net',
+'ad.doubleclick.net.48617.9318.302br.net',
+'ad.doubleclick.net.48619.9318.302br.net',
+'ad.doubleclick.net.48622.9318.302br.net',
+'ad.doubleclick.net.48625.9318.302br.net',
+'ad.doubleclick.net.48626.9318.302br.net',
+'ad.doubleclick.net.48628.9318.302br.net',
+'ad.doubleclick.net.48629.9318.302br.net',
+'ad.doubleclick.net.48631.9318.302br.net',
+'ad.doubleclick.net.48634.9318.302br.net',
+'ad.doubleclick.net.48635.9318.302br.net',
+'ad.doubleclick.net.48637.9318.302br.net',
+'ad.doubleclick.net.48640.9318.302br.net',
+'ad.doubleclick.net.48643.9318.302br.net',
+'ad.doubleclick.net.48644.9318.302br.net',
+'ad.doubleclick.net.48649.9318.302br.net',
+'ad.doubleclick.net.48650.9318.302br.net',
+'ad.doubleclick.net.48655.9318.302br.net',
+'ad.doubleclick.net.48658.9318.302br.net',
+'ad.doubleclick.net.48659.9318.302br.net',
+'ad.doubleclick.net.48661.9318.302br.net',
+'ad.doubleclick.net.48662.9318.302br.net',
+'ad.doubleclick.net.48664.9318.302br.net',
+'ad.doubleclick.net.48665.9318.302br.net',
+'ad.doubleclick.net.48666.9318.302br.net',
+'ad.doubleclick.net.48667.9318.302br.net',
+'ad.doubleclick.net.48668.9318.302br.net',
+'ad.doubleclick.net.48670.9318.302br.net',
+'ad.doubleclick.net.48671.9318.302br.net',
+'ad.doubleclick.net.48673.9318.302br.net',
+'ad.doubleclick.net.48675.9318.302br.net',
+'ad.doubleclick.net.48676.9318.302br.net',
+'ad.doubleclick.net.48677.9318.302br.net',
+'ad.doubleclick.net.48679.9318.302br.net',
+'ad.doubleclick.net.48682.9318.302br.net',
+'ad.doubleclick.net.48683.9318.302br.net',
+'ad.doubleclick.net.48685.9318.302br.net',
+'ad.doubleclick.net.48691.9318.302br.net',
+'ad.doubleclick.net.48694.9318.302br.net',
+'ad.doubleclick.net.48695.9318.302br.net',
+'ad.doubleclick.net.48697.9318.302br.net',
+'ad.doubleclick.net.48700.9318.302br.net',
+'ad.doubleclick.net.48703.9318.302br.net',
+'ad.doubleclick.net.48704.9318.302br.net',
+'ad.doubleclick.net.48706.9318.302br.net',
+'ad.doubleclick.net.48707.9318.302br.net',
+'ad.doubleclick.net.48708.9318.302br.net',
+'ad.doubleclick.net.48709.9318.302br.net',
+'ad.doubleclick.net.48710.9318.302br.net',
+'ad.doubleclick.net.48712.9318.302br.net',
+'ad.doubleclick.net.48713.9318.302br.net',
+'ad.doubleclick.net.48715.9318.302br.net',
+'ad.doubleclick.net.48718.9318.302br.net',
+'ad.doubleclick.net.48721.9318.302br.net',
+'ad.doubleclick.net.48724.9318.302br.net',
+'ad.doubleclick.net.48727.9318.302br.net',
+'ad.doubleclick.net.48728.9318.302br.net',
+'ad.doubleclick.net.48729.9318.302br.net',
+'ad.doubleclick.net.48730.9318.302br.net',
+'ad.doubleclick.net.48731.9318.302br.net',
+'ad.doubleclick.net.48733.9318.302br.net',
+'ad.doubleclick.net.48736.9318.302br.net',
+'ad.doubleclick.net.48737.9318.302br.net',
+'ad.doubleclick.net.48739.9318.302br.net',
+'ad.doubleclick.net.48740.9318.302br.net',
+'ad.doubleclick.net.48742.9318.302br.net',
+'ad.doubleclick.net.48743.9318.302br.net',
+'ad.doubleclick.net.48745.9318.302br.net',
+'ad.doubleclick.net.48746.9318.302br.net',
+'ad.doubleclick.net.48748.9318.302br.net',
+'ad.doubleclick.net.48749.9318.302br.net',
+'ad.doubleclick.net.48751.9318.302br.net',
+'ad.doubleclick.net.48754.9318.302br.net',
+'ad.doubleclick.net.48755.9318.302br.net',
+'ad.doubleclick.net.48757.9318.302br.net',
+'ad.doubleclick.net.48758.9318.302br.net',
+'ad.doubleclick.net.48760.9318.302br.net',
+'ad.doubleclick.net.48763.9318.302br.net',
+'ad.doubleclick.net.48766.9318.302br.net',
+'ad.doubleclick.net.48769.9318.302br.net',
+'ad.doubleclick.net.48770.9318.302br.net',
+'ad.doubleclick.net.48772.9318.302br.net',
+'ad.doubleclick.net.48773.9318.302br.net',
+'ad.doubleclick.net.48775.9318.302br.net',
+'ad.doubleclick.net.48776.9318.302br.net',
+'ad.doubleclick.net.48778.9318.302br.net',
+'ad.doubleclick.net.48781.9318.302br.net',
+'ad.doubleclick.net.48784.9318.302br.net',
+'ad.doubleclick.net.48793.9318.302br.net',
+'ad.doubleclick.net.48794.9318.302br.net',
+'ad.doubleclick.net.48796.9318.302br.net',
+'ad.doubleclick.net.48797.9318.302br.net',
+'ad.doubleclick.net.48798.9318.302br.net',
+'ad.doubleclick.net.48799.9318.302br.net',
+'ad.doubleclick.net.48800.9318.302br.net',
+'ad.doubleclick.net.48802.9318.302br.net',
+'ad.doubleclick.net.48803.9318.302br.net',
+'ad.doubleclick.net.48805.9318.302br.net',
+'ad.doubleclick.net.48806.9318.302br.net',
+'ad.doubleclick.net.48808.9318.302br.net',
+'ad.doubleclick.net.48809.9318.302br.net',
+'ad.doubleclick.net.48814.9318.302br.net',
+'ad.doubleclick.net.48815.9318.302br.net',
+'ad.doubleclick.net.48817.9318.302br.net',
+'ad.doubleclick.net.48818.9318.302br.net',
+'ad.doubleclick.net.48820.9318.302br.net',
+'ad.doubleclick.net.48821.9318.302br.net',
+'ad.doubleclick.net.48823.9318.302br.net',
+'ad.doubleclick.net.48826.9318.302br.net',
+'ad.doubleclick.net.48827.9318.302br.net',
+'ad.doubleclick.net.48829.9318.302br.net',
+'ad.doubleclick.net.48830.9318.302br.net',
+'ad.doubleclick.net.48832.9318.302br.net',
+'ad.doubleclick.net.48833.9318.302br.net',
+'ad.doubleclick.net.48835.9318.302br.net',
+'ad.doubleclick.net.48836.9318.302br.net',
+'ad.doubleclick.net.48838.9318.302br.net',
+'ad.doubleclick.net.48839.9318.302br.net',
+'ad.doubleclick.net.48841.9318.302br.net',
+'ad.doubleclick.net.48842.9318.302br.net',
+'ad.doubleclick.net.48844.9318.302br.net',
+'ad.doubleclick.net.48847.9318.302br.net',
+'ad.doubleclick.net.48850.9318.302br.net',
+'ad.doubleclick.net.48853.9318.302br.net',
+'ad.doubleclick.net.48856.9318.302br.net',
+'ad.doubleclick.net.48857.9318.302br.net',
+'ad.doubleclick.net.48859.9318.302br.net',
+'ad.doubleclick.net.48860.9318.302br.net',
+'ad.doubleclick.net.48862.9318.302br.net',
+'ad.doubleclick.net.48863.9318.302br.net',
+'ad.doubleclick.net.48865.9318.302br.net',
+'ad.doubleclick.net.48868.9318.302br.net',
+'ad.doubleclick.net.48869.9318.302br.net',
+'ad.doubleclick.net.48871.9318.302br.net',
+'ad.doubleclick.net.48872.9318.302br.net',
+'ad.doubleclick.net.48873.9318.302br.net',
+'ad.doubleclick.net.48874.9318.302br.net',
+'ad.doubleclick.net.48875.9318.302br.net',
+'ad.doubleclick.net.48877.9318.302br.net',
+'ad.doubleclick.net.48878.9318.302br.net',
+'ad.doubleclick.net.48880.9318.302br.net',
+'ad.doubleclick.net.48883.9318.302br.net',
+'ad.doubleclick.net.48884.9318.302br.net',
+'ad.doubleclick.net.48886.9318.302br.net',
+'ad.doubleclick.net.48887.9318.302br.net',
+'ad.doubleclick.net.48892.9318.302br.net',
+'ad.doubleclick.net.48895.9318.302br.net',
+'ad.doubleclick.net.48896.9318.302br.net',
+'ad.doubleclick.net.48898.9318.302br.net',
+'ad.doubleclick.net.48899.9318.302br.net',
+'ad.doubleclick.net.48900.9318.302br.net',
+'ad.doubleclick.net.48901.9318.302br.net',
+'ad.doubleclick.net.48902.9318.302br.net',
+'ad.doubleclick.net.48904.9318.302br.net',
+'ad.doubleclick.net.48905.9318.302br.net',
+'ad.doubleclick.net.48906.9318.302br.net',
+'ad.doubleclick.net.48907.9318.302br.net',
+'ad.doubleclick.net.48908.9318.302br.net',
+'ad.doubleclick.net.48910.9318.302br.net',
+'ad.doubleclick.net.48911.9318.302br.net',
+'ad.doubleclick.net.48913.9318.302br.net',
+'ad.doubleclick.net.48915.9318.302br.net',
+'ad.doubleclick.net.48916.9318.302br.net',
+'ad.doubleclick.net.48917.9318.302br.net',
+'ad.doubleclick.net.48919.9318.302br.net',
+'ad.doubleclick.net.48920.9318.302br.net',
+'ad.doubleclick.net.48922.9318.302br.net',
+'ad.doubleclick.net.48923.9318.302br.net',
+'ad.doubleclick.net.48924.9318.302br.net',
+'ad.doubleclick.net.48925.9318.302br.net',
+'ad.doubleclick.net.48926.9318.302br.net',
+'ad.doubleclick.net.48928.9318.302br.net',
+'ad.doubleclick.net.48929.9318.302br.net',
+'ad.doubleclick.net.48931.9318.302br.net',
+'ad.doubleclick.net.48934.9318.302br.net',
+'ad.doubleclick.net.48935.9318.302br.net',
+'ad.doubleclick.net.48937.9318.302br.net',
+'ad.doubleclick.net.48938.9318.302br.net',
+'ad.doubleclick.net.48940.9318.302br.net',
+'ad.doubleclick.net.48946.9318.302br.net',
+'ad.doubleclick.net.48949.9318.302br.net',
+'ad.doubleclick.net.48950.9318.302br.net',
+'ad.doubleclick.net.48954.9240.302br.net',
+'ad.doubleclick.net.48957.9240.302br.net',
+'ad.doubleclick.net.48960.9240.302br.net',
+'ad.doubleclick.net.48968.9240.302br.net',
+'ad.doubleclick.net.48977.9240.302br.net',
+'ad.doubleclick.net.48986.9240.302br.net',
+'ad.doubleclick.net.48989.9240.302br.net',
+'ad.doubleclick.net.48992.9240.302br.net',
+'ad.doubleclick.net.48995.9240.302br.net',
+'ad.doubleclick.net.49001.9240.302br.net',
+'ad.doubleclick.net.49004.9240.302br.net',
+'ad.doubleclick.net.49007.9240.302br.net',
+'ad.doubleclick.net.49010.9240.302br.net',
+'ad.doubleclick.net.49016.9240.302br.net',
+'ad.doubleclick.net.49019.9240.302br.net',
+'ad.doubleclick.net.49028.9240.302br.net',
+'ad.doubleclick.net.49031.9240.302br.net',
+'ad.doubleclick.net.49036.9359.302br.net',
+'ad.doubleclick.net.49039.9359.302br.net',
+'ad.doubleclick.net.49042.9359.302br.net',
+'ad.doubleclick.net.49071.9361.302br.net',
+'ad.doubleclick.net.49072.9361.302br.net',
+'ad.doubleclick.net.49073.9361.302br.net',
+'ad.doubleclick.net.49077.9361.302br.net',
+'ad.doubleclick.net.49078.9361.302br.net',
+'ad.doubleclick.net.49079.9361.302br.net',
+'ad.doubleclick.net.49137.9363.302br.net',
+'ad.doubleclick.net.49140.9363.302br.net',
+'ad.doubleclick.net.49143.9363.302br.net',
+'ad.doubleclick.net.49146.9363.302br.net',
+'ad.doubleclick.net.49149.9363.302br.net',
+'ad.doubleclick.net.49152.9363.302br.net',
+'ad.doubleclick.net.49155.9363.302br.net',
+'ad.doubleclick.net.49158.9363.302br.net',
+'ad.doubleclick.net.49161.9363.302br.net',
+'ad.doubleclick.net.49164.9363.302br.net',
+'ad.doubleclick.net.49167.9363.302br.net',
+'ad.doubleclick.net.49170.9363.302br.net',
+'ad.doubleclick.net.49173.9363.302br.net',
+'ad.doubleclick.net.49176.9363.302br.net',
+'ad.doubleclick.net.49179.9363.302br.net',
+'ad.doubleclick.net.49182.9363.302br.net',
+'ad.doubleclick.net.49185.9363.302br.net',
+'ad.doubleclick.net.49188.9363.302br.net',
+'ad.doubleclick.net.49191.9363.302br.net',
+'ad.doubleclick.net.49194.9363.302br.net',
+'ad.doubleclick.net.49197.9363.302br.net',
+'ad.doubleclick.net.49200.9363.302br.net',
+'ad.doubleclick.net.49203.9363.302br.net',
+'ad.doubleclick.net.49206.9363.302br.net',
+'ad.doubleclick.net.49209.9363.302br.net',
+'ad.doubleclick.net.49212.9363.302br.net',
+'ad.doubleclick.net.49215.9363.302br.net',
+'ad.doubleclick.net.49218.9363.302br.net',
+'ad.doubleclick.net.49221.9363.302br.net',
+'ad.doubleclick.net.49224.9363.302br.net',
+'ad.doubleclick.net.49423.9325.302br.net',
+'ad.doubleclick.net.49424.9325.302br.net',
+'ad.doubleclick.net.49426.9325.302br.net',
+'ad.doubleclick.net.49427.9325.302br.net',
+'ad.doubleclick.net.49429.9325.302br.net',
+'ad.doubleclick.net.49430.9325.302br.net',
+'ad.doubleclick.net.49432.9325.302br.net',
+'ad.doubleclick.net.49433.9325.302br.net',
+'ad.doubleclick.net.49444.9240.302br.net',
+'ad.doubleclick.net.49605.9240.302br.net',
+'ad.doubleclick.net.49606.9240.302br.net',
+'ad.doubleclick.net.49613.9240.302br.net',
+'ad.doubleclick.net.49615.9240.302br.net',
+'ad.doubleclick.net.49618.9240.302br.net',
+'ad.doubleclick.net.49620.9239.302br.net',
+'ad.doubleclick.net.49621.9239.302br.net',
+'ad.doubleclick.net.49628.9239.302br.net',
+'ad.doubleclick.net.49630.9239.302br.net',
+'ad.doubleclick.net.49631.9239.302br.net',
+'ad.doubleclick.net.49633.9239.302br.net',
+'ad.doubleclick.net.49635.9359.302br.net',
+'ad.doubleclick.net.49641.9359.302br.net',
+'ad.doubleclick.net.49654.9240.302br.net',
+'ad.doubleclick.net.49657.9240.302br.net',
+'ad.doubleclick.net.49660.9240.302br.net',
+'ad.doubleclick.net.49664.9240.302br.net',
+'ad.doubleclick.net.49666.9240.302br.net',
+'ad.doubleclick.net.49675.9240.302br.net',
+'ad.doubleclick.net.49678.9240.302br.net',
+'ad.doubleclick.net.49687.9240.302br.net',
+'ad.doubleclick.net.49690.9240.302br.net',
+'ad.doubleclick.net.49693.9240.302br.net',
+'ad.doubleclick.net.49696.9240.302br.net',
+'ad.doubleclick.net.49699.9240.302br.net',
+'ad.doubleclick.net.49702.9240.302br.net',
+'ad.doubleclick.net.49714.9240.302br.net',
+'ad.doubleclick.net.49717.9240.302br.net',
+'ad.doubleclick.net.49720.9240.302br.net',
+'ad.doubleclick.net.49721.9240.302br.net',
+'ad.doubleclick.net.49723.9240.302br.net',
+'ad.doubleclick.net.49726.9240.302br.net',
+'ad.doubleclick.net.49729.9240.302br.net',
+'ad.doubleclick.net.49730.9364.302br.net',
+'ad.doubleclick.net.49885.9365.302br.net',
+'ad.doubleclick.net.49888.9365.302br.net',
+'ad.doubleclick.net.49900.9365.302br.net',
+'ad.doubleclick.net.49939.9365.302br.net',
+'ad.doubleclick.net.50236.9279.302br.net',
+'ad.doubleclick.net.50238.9279.302br.net',
+'ad.doubleclick.net.50240.9279.302br.net',
+'ad.doubleclick.net.50241.9279.302br.net',
+'ad.doubleclick.net.50242.9279.302br.net',
+'ad.doubleclick.net.50243.9279.302br.net',
+'ad.doubleclick.net.50247.9279.302br.net',
+'ad.doubleclick.net.50248.9279.302br.net',
+'ad.doubleclick.net.50251.9279.302br.net',
+'ad.doubleclick.net.50252.9279.302br.net',
+'ad.doubleclick.net.50256.9279.302br.net',
+'ad.doubleclick.net.50257.9279.302br.net',
+'ad.doubleclick.net.50259.9279.302br.net',
+'ad.doubleclick.net.50261.9279.302br.net',
+'ad.doubleclick.net.50265.9279.302br.net',
+'ad.doubleclick.net.50267.9279.302br.net',
+'ad.doubleclick.net.50269.9279.302br.net',
+'ad.doubleclick.net.50271.9279.302br.net',
+'ad.doubleclick.net.50273.9279.302br.net',
+'ad.doubleclick.net.50275.9279.302br.net',
+'ad.doubleclick.net.50279.9279.302br.net',
+'ad.doubleclick.net.50281.9279.302br.net',
+'ad.doubleclick.net.50285.9279.302br.net',
+'ad.doubleclick.net.50291.9279.302br.net',
+'ad.doubleclick.net.50293.9279.302br.net',
+'ad.doubleclick.net.50302.9279.302br.net',
+'ad.doubleclick.net.50314.9279.302br.net',
+'ad.doubleclick.net.50315.9279.302br.net',
+'ad.doubleclick.net.50344.9279.302br.net',
+'ad.doubleclick.net.50356.9279.302br.net',
+'ad.doubleclick.net.50367.9279.302br.net',
+'ad.doubleclick.net.50371.9279.302br.net',
+'ad.doubleclick.net.50373.9279.302br.net',
+'ad.doubleclick.net.50375.9279.302br.net',
+'ad.doubleclick.net.50379.9279.302br.net',
+'ad.doubleclick.net.50381.9279.302br.net',
+'ad.doubleclick.net.50385.9279.302br.net',
+'ad.doubleclick.net.50389.9279.302br.net',
+'ad.doubleclick.net.50391.9279.302br.net',
+'ad.doubleclick.net.50393.9279.302br.net',
+'ad.doubleclick.net.50396.9279.302br.net',
+'ad.doubleclick.net.50398.9279.302br.net',
+'ad.doubleclick.net.50399.9279.302br.net',
+'ad.doubleclick.net.50404.9279.302br.net',
+'ad.doubleclick.net.50410.9279.302br.net',
+'ad.doubleclick.net.50416.9279.302br.net',
+'ad.doubleclick.net.50428.9279.302br.net',
+'ad.doubleclick.net.50434.9279.302br.net',
+'ad.doubleclick.net.50436.9279.302br.net',
+'ad.doubleclick.net.50440.9279.302br.net',
+'ad.doubleclick.net.50441.9279.302br.net',
+'ad.doubleclick.net.50443.9279.302br.net',
+'ad.doubleclick.net.50444.9279.302br.net',
+'ad.doubleclick.net.50445.9279.302br.net',
+'ad.doubleclick.net.50446.9279.302br.net',
+'ad.doubleclick.net.50447.9279.302br.net',
+'ad.doubleclick.net.50449.9279.302br.net',
+'ad.doubleclick.net.50451.9279.302br.net',
+'ad.doubleclick.net.50452.9279.302br.net',
+'ad.doubleclick.net.50453.9279.302br.net',
+'ad.doubleclick.net.50454.9279.302br.net',
+'ad.doubleclick.net.50455.9279.302br.net',
+'ad.doubleclick.net.50456.9279.302br.net',
+'ad.doubleclick.net.50458.9279.302br.net',
+'ad.doubleclick.net.50461.9279.302br.net',
+'ad.doubleclick.net.50479.9279.302br.net',
+'ad.doubleclick.net.50482.9279.302br.net',
+'ad.doubleclick.net.50485.9279.302br.net',
+'ad.doubleclick.net.50486.9279.302br.net',
+'ad.doubleclick.net.50488.9279.302br.net',
+'ad.doubleclick.net.50491.9279.302br.net',
+'ad.doubleclick.net.50494.9279.302br.net',
+'ad.doubleclick.net.50495.9279.302br.net',
+'ad.doubleclick.net.50497.9279.302br.net',
+'ad.doubleclick.net.50500.9279.302br.net',
+'ad.doubleclick.net.50501.9279.302br.net',
+'ad.doubleclick.net.50503.9279.302br.net',
+'ad.doubleclick.net.50504.9279.302br.net',
+'ad.doubleclick.net.50506.9279.302br.net',
+'ad.doubleclick.net.50507.9279.302br.net',
+'ad.doubleclick.net.50509.9279.302br.net',
+'ad.doubleclick.net.50512.9279.302br.net',
+'ad.doubleclick.net.50518.9279.302br.net',
+'ad.doubleclick.net.50519.9279.302br.net',
+'ad.doubleclick.net.50524.9279.302br.net',
+'ad.doubleclick.net.50527.9279.302br.net',
+'ad.doubleclick.net.50528.9279.302br.net',
+'ad.doubleclick.net.50530.9279.302br.net',
+'ad.doubleclick.net.50531.9279.302br.net',
+'ad.doubleclick.net.50533.9279.302br.net',
+'ad.doubleclick.net.50534.9279.302br.net',
+'ad.doubleclick.net.50536.9279.302br.net',
+'ad.doubleclick.net.50557.9279.302br.net',
+'ad.doubleclick.net.50558.9279.302br.net',
+'ad.doubleclick.net.50560.9279.302br.net',
+'ad.doubleclick.net.50563.9279.302br.net',
+'ad.doubleclick.net.50564.9279.302br.net',
+'ad.doubleclick.net.50566.9279.302br.net',
+'ad.doubleclick.net.50567.9279.302br.net',
+'ad.doubleclick.net.50575.9279.302br.net',
+'ad.doubleclick.net.50576.9279.302br.net',
+'ad.doubleclick.net.50578.9279.302br.net',
+'ad.doubleclick.net.50581.9279.302br.net',
+'ad.doubleclick.net.50584.9279.302br.net',
+'ad.doubleclick.net.50587.9279.302br.net',
+'ad.doubleclick.net.50590.9279.302br.net',
+'ad.doubleclick.net.50599.9279.302br.net',
+'ad.doubleclick.net.50600.9279.302br.net',
+'ad.doubleclick.net.50602.9279.302br.net',
+'ad.doubleclick.net.50603.9279.302br.net',
+'ad.doubleclick.net.50605.9279.302br.net',
+'ad.doubleclick.net.50606.9279.302br.net',
+'ad.doubleclick.net.50617.9279.302br.net',
+'ad.doubleclick.net.50620.9279.302br.net',
+'ad.doubleclick.net.50629.9279.302br.net',
+'ad.doubleclick.net.50631.9279.302br.net',
+'ad.doubleclick.net.50632.9279.302br.net',
+'ad.doubleclick.net.50633.9279.302br.net',
+'ad.doubleclick.net.50634.9279.302br.net',
+'ad.doubleclick.net.50635.9279.302br.net',
+'ad.doubleclick.net.50636.9279.302br.net',
+'ad.doubleclick.net.50638.9279.302br.net',
+'ad.doubleclick.net.50639.9279.302br.net',
+'ad.doubleclick.net.50641.9279.302br.net',
+'ad.doubleclick.net.50642.9279.302br.net',
+'ad.doubleclick.net.50643.9279.302br.net',
+'ad.doubleclick.net.50644.9279.302br.net',
+'ad.doubleclick.net.50645.9279.302br.net',
+'ad.doubleclick.net.50647.9279.302br.net',
+'ad.doubleclick.net.50653.9279.302br.net',
+'ad.doubleclick.net.50655.9279.302br.net',
+'ad.doubleclick.net.50656.9279.302br.net',
+'ad.doubleclick.net.50657.9279.302br.net',
+'ad.doubleclick.net.50659.9279.302br.net',
+'ad.doubleclick.net.50662.9279.302br.net',
+'ad.doubleclick.net.50665.9279.302br.net',
+'ad.doubleclick.net.50668.9279.302br.net',
+'ad.doubleclick.net.50671.9279.302br.net',
+'ad.doubleclick.net.50673.9279.302br.net',
+'ad.doubleclick.net.50674.9279.302br.net',
+'ad.doubleclick.net.50675.9279.302br.net',
+'ad.doubleclick.net.50679.9279.302br.net',
+'ad.doubleclick.net.50680.9279.302br.net',
+'ad.doubleclick.net.50681.9279.302br.net',
+'ad.doubleclick.net.50692.9279.302br.net',
+'ad.doubleclick.net.50693.9279.302br.net',
+'ad.doubleclick.net.50701.9279.302br.net',
+'ad.doubleclick.net.50704.9279.302br.net',
+'ad.doubleclick.net.50881.9336.302br.net',
+'ad.doubleclick.net.50882.9336.302br.net',
+'ad.doubleclick.net.50884.9336.302br.net',
+'ad.doubleclick.net.50885.9336.302br.net',
+'ad.doubleclick.net.50887.9336.302br.net',
+'ad.doubleclick.net.50888.9336.302br.net',
+'ad.doubleclick.net.50889.9336.302br.net',
+'ad.doubleclick.net.50890.9336.302br.net',
+'ad.doubleclick.net.50891.9336.302br.net',
+'ad.doubleclick.net.50893.9336.302br.net',
+'ad.doubleclick.net.50894.9336.302br.net',
+'ad.doubleclick.net.50896.9336.302br.net',
+'ad.doubleclick.net.50897.9336.302br.net',
+'ad.doubleclick.net.50899.9336.302br.net',
+'ad.doubleclick.net.50902.9336.302br.net',
+'ad.doubleclick.net.50903.9336.302br.net',
+'ad.doubleclick.net.50905.9336.302br.net',
+'ad.doubleclick.net.50908.9336.302br.net',
+'ad.doubleclick.net.50909.9336.302br.net',
+'ad.doubleclick.net.50910.9336.302br.net',
+'ad.doubleclick.net.50911.9336.302br.net',
+'ad.doubleclick.net.50912.9336.302br.net',
+'ad.doubleclick.net.50913.9336.302br.net',
+'ad.doubleclick.net.50914.9336.302br.net',
+'ad.doubleclick.net.50915.9336.302br.net',
+'ad.doubleclick.net.50916.9336.302br.net',
+'ad.doubleclick.net.50917.9336.302br.net',
+'ad.doubleclick.net.50918.9336.302br.net',
+'ad.doubleclick.net.50920.9336.302br.net',
+'ad.doubleclick.net.50921.9336.302br.net',
+'ad.doubleclick.net.50922.9336.302br.net',
+'ad.doubleclick.net.50923.9336.302br.net',
+'ad.doubleclick.net.50924.9336.302br.net',
+'ad.doubleclick.net.50925.9336.302br.net',
+'ad.doubleclick.net.50926.9336.302br.net',
+'ad.doubleclick.net.50927.9336.302br.net',
+'ad.doubleclick.net.50928.9336.302br.net',
+'ad.doubleclick.net.50929.9336.302br.net',
+'ad.doubleclick.net.50930.9336.302br.net',
+'ad.doubleclick.net.50931.9336.302br.net',
+'ad.doubleclick.net.50932.9336.302br.net',
+'ad.doubleclick.net.50933.9336.302br.net',
+'ad.doubleclick.net.50934.9336.302br.net',
+'ad.doubleclick.net.50935.9336.302br.net',
+'ad.doubleclick.net.50936.9336.302br.net',
+'ad.doubleclick.net.50937.9336.302br.net',
+'ad.doubleclick.net.50938.9336.302br.net',
+'ad.doubleclick.net.50939.9336.302br.net',
+'ad.doubleclick.net.50958.9336.302br.net',
+'ad.doubleclick.net.50959.9336.302br.net',
+'ad.doubleclick.net.50960.9336.302br.net',
+'ad.doubleclick.net.50962.9336.302br.net',
+'ad.doubleclick.net.50963.9336.302br.net',
+'ad.doubleclick.net.50965.9336.302br.net',
+'ad.doubleclick.net.50966.9336.302br.net',
+'ad.doubleclick.net.50968.9336.302br.net',
+'ad.doubleclick.net.50969.9336.302br.net',
+'ad.doubleclick.net.50971.9336.302br.net',
+'ad.doubleclick.net.50974.9336.302br.net',
+'ad.doubleclick.net.50977.9336.302br.net',
+'ad.doubleclick.net.50980.9336.302br.net',
+'ad.doubleclick.net.50983.9336.302br.net',
+'ad.doubleclick.net.50986.9336.302br.net',
+'ad.doubleclick.net.50989.9336.302br.net',
+'ad.doubleclick.net.50992.9336.302br.net',
+'ad.doubleclick.net.50993.9336.302br.net',
+'ad.doubleclick.net.50995.9336.302br.net',
+'ad.doubleclick.net.50996.9336.302br.net',
+'ad.doubleclick.net.50998.9336.302br.net',
+'ad.doubleclick.net.50999.9336.302br.net',
+'ad.doubleclick.net.51001.9336.302br.net',
+'ad.doubleclick.net.51002.9336.302br.net',
+'ad.doubleclick.net.51004.9336.302br.net',
+'ad.doubleclick.net.51005.9336.302br.net',
+'ad.doubleclick.net.51007.9336.302br.net',
+'ad.doubleclick.net.51008.9336.302br.net',
+'ad.doubleclick.net.51010.9336.302br.net',
+'ad.doubleclick.net.51011.9336.302br.net',
+'ad.doubleclick.net.51013.9336.302br.net',
+'ad.doubleclick.net.51016.9336.302br.net',
+'ad.doubleclick.net.51019.9336.302br.net',
+'ad.doubleclick.net.51022.9336.302br.net',
+'ad.doubleclick.net.51025.9336.302br.net',
+'ad.doubleclick.net.51026.9336.302br.net',
+'ad.doubleclick.net.51028.9336.302br.net',
+'ad.doubleclick.net.51031.9336.302br.net',
+'ad.doubleclick.net.51037.9336.302br.net',
+'ad.doubleclick.net.51040.9336.302br.net',
+'ad.doubleclick.net.51043.9336.302br.net',
+'ad.doubleclick.net.51044.9336.302br.net',
+'ad.doubleclick.net.51046.9336.302br.net',
+'ad.doubleclick.net.51047.9336.302br.net',
+'ad.doubleclick.net.51049.9336.302br.net',
+'ad.doubleclick.net.51050.9336.302br.net',
+'ad.doubleclick.net.51057.9185.302br.net',
+'ad.doubleclick.net.51066.9185.302br.net',
+'ad.doubleclick.net.51157.9318.302br.net',
+'ad.doubleclick.net.51158.9318.302br.net',
+'ad.doubleclick.net.51159.9318.302br.net',
+'ad.doubleclick.net.51160.9318.302br.net',
+'ad.doubleclick.net.51161.9318.302br.net',
+'ad.doubleclick.net.51162.9318.302br.net',
+'ad.doubleclick.net.51163.9318.302br.net',
+'ad.doubleclick.net.51164.9318.302br.net',
+'ad.doubleclick.net.51166.9318.302br.net',
+'ad.doubleclick.net.51167.9318.302br.net',
+'ad.doubleclick.net.51168.9318.302br.net',
+'ad.doubleclick.net.51169.9318.302br.net',
+'ad.doubleclick.net.51170.9318.302br.net',
+'ad.doubleclick.net.51175.9318.302br.net',
+'ad.doubleclick.net.51176.9318.302br.net',
+'ad.doubleclick.net.51178.9318.302br.net',
+'ad.doubleclick.net.51179.9318.302br.net',
+'ad.doubleclick.net.51184.9318.302br.net',
+'ad.doubleclick.net.51185.9318.302br.net',
+'ad.doubleclick.net.51187.9318.302br.net',
+'ad.doubleclick.net.51188.9318.302br.net',
+'ad.doubleclick.net.51189.9318.302br.net',
+'ad.doubleclick.net.51190.9318.302br.net',
+'ad.doubleclick.net.51191.9318.302br.net',
+'ad.doubleclick.net.51192.9318.302br.net',
+'ad.doubleclick.net.51193.9318.302br.net',
+'ad.doubleclick.net.51194.9318.302br.net',
+'ad.doubleclick.net.51195.9318.302br.net',
+'ad.doubleclick.net.51196.9318.302br.net',
+'ad.doubleclick.net.51197.9318.302br.net',
+'ad.doubleclick.net.51198.9318.302br.net',
+'ad.doubleclick.net.51199.9318.302br.net',
+'ad.doubleclick.net.51200.9318.302br.net',
+'ad.doubleclick.net.51201.9318.302br.net',
+'ad.doubleclick.net.51202.9318.302br.net',
+'ad.doubleclick.net.51203.9318.302br.net',
+'ad.doubleclick.net.51204.9318.302br.net',
+'ad.doubleclick.net.51205.9318.302br.net',
+'ad.doubleclick.net.51206.9318.302br.net',
+'ad.doubleclick.net.51208.9318.302br.net',
+'ad.doubleclick.net.51209.9318.302br.net',
+'ad.doubleclick.net.51211.9318.302br.net',
+'ad.doubleclick.net.51212.9318.302br.net',
+'ad.doubleclick.net.51214.9318.302br.net',
+'ad.doubleclick.net.51215.9318.302br.net',
+'ad.doubleclick.net.51216.9318.302br.net',
+'ad.doubleclick.net.51217.9318.302br.net',
+'ad.doubleclick.net.51218.9318.302br.net',
+'ad.doubleclick.net.51220.9318.302br.net',
+'ad.doubleclick.net.51221.9318.302br.net',
+'ad.doubleclick.net.51223.9318.302br.net',
+'ad.doubleclick.net.51224.9318.302br.net',
+'ad.doubleclick.net.51225.9318.302br.net',
+'ad.doubleclick.net.51226.9318.302br.net',
+'ad.doubleclick.net.51227.9318.302br.net',
+'ad.doubleclick.net.51229.9318.302br.net',
+'ad.doubleclick.net.51230.9318.302br.net',
+'ad.doubleclick.net.51231.9318.302br.net',
+'ad.doubleclick.net.51232.9318.302br.net',
+'ad.doubleclick.net.51233.9318.302br.net',
+'ad.doubleclick.net.51235.9318.302br.net',
+'ad.doubleclick.net.51236.9318.302br.net',
+'ad.doubleclick.net.51238.9318.302br.net',
+'ad.doubleclick.net.51239.9318.302br.net',
+'ad.doubleclick.net.51241.9318.302br.net',
+'ad.doubleclick.net.51242.9318.302br.net',
+'ad.doubleclick.net.51243.9318.302br.net',
+'ad.doubleclick.net.51244.9318.302br.net',
+'ad.doubleclick.net.51245.9318.302br.net',
+'ad.doubleclick.net.51246.9318.302br.net',
+'ad.doubleclick.net.51247.9318.302br.net',
+'ad.doubleclick.net.51248.9318.302br.net',
+'ad.doubleclick.net.51250.9318.302br.net',
+'ad.doubleclick.net.51251.9318.302br.net',
+'ad.doubleclick.net.51252.9318.302br.net',
+'ad.doubleclick.net.51253.9318.302br.net',
+'ad.doubleclick.net.51254.9318.302br.net',
+'ad.doubleclick.net.51256.9318.302br.net',
+'ad.doubleclick.net.51257.9318.302br.net',
+'ad.doubleclick.net.51258.9318.302br.net',
+'ad.doubleclick.net.51259.9318.302br.net',
+'ad.doubleclick.net.51260.9318.302br.net',
+'ad.doubleclick.net.51262.9318.302br.net',
+'ad.doubleclick.net.51265.9318.302br.net',
+'ad.doubleclick.net.51266.9318.302br.net',
+'ad.doubleclick.net.51268.9318.302br.net',
+'ad.doubleclick.net.51269.9318.302br.net',
+'ad.doubleclick.net.51270.9318.302br.net',
+'ad.doubleclick.net.51271.9318.302br.net',
+'ad.doubleclick.net.51272.9318.302br.net',
+'ad.doubleclick.net.51297.9185.302br.net',
+'ad.doubleclick.net.51300.9185.302br.net',
+'ad.doubleclick.net.51309.9185.302br.net',
+'ad.doubleclick.net.51312.9185.302br.net',
+'ad.doubleclick.net.51315.9185.302br.net',
+'ad.doubleclick.net.51318.9185.302br.net',
+'ad.doubleclick.net.51515.9076.302br.net',
+'ad.doubleclick.net.51518.9076.302br.net',
+'ad.doubleclick.net.51521.9374.302br.net',
+'ad.doubleclick.net.51524.9374.302br.net',
+'ad.doubleclick.net.51542.9078.302br.net',
+'ad.doubleclick.net.51596.9087.302br.net',
+'ad.doubleclick.net.51599.9086.302br.net',
+'ad.doubleclick.net.51602.9086.302br.net',
+'ad.doubleclick.net.51605.9085.302br.net',
+'ad.doubleclick.net.51608.9085.302br.net',
+'ad.doubleclick.net.51617.9082.302br.net',
+'ad.doubleclick.net.51620.9082.302br.net',
+'ad.doubleclick.net.51623.9375.302br.net',
+'ad.doubleclick.net.51638.9076.302br.net',
+'ad.doubleclick.net.51641.9076.302br.net',
+'ad.doubleclick.net.51644.9076.302br.net',
+'ad.doubleclick.net.51647.9374.302br.net',
+'ad.doubleclick.net.51650.9374.302br.net',
+'ad.doubleclick.net.51653.9374.302br.net',
+'ad.doubleclick.net.51656.9374.302br.net',
+'ad.doubleclick.net.51659.9374.302br.net',
+'ad.doubleclick.net.51662.9374.302br.net',
+'ad.doubleclick.net.51683.9078.302br.net',
+'ad.doubleclick.net.51686.9078.302br.net',
+'ad.doubleclick.net.51689.9078.302br.net',
+'ad.doubleclick.net.51692.9078.302br.net',
+'ad.doubleclick.net.51695.9078.302br.net',
+'ad.doubleclick.net.51698.9078.302br.net',
+'ad.doubleclick.net.51701.9079.302br.net',
+'ad.doubleclick.net.51704.9079.302br.net',
+'ad.doubleclick.net.51707.9079.302br.net',
+'ad.doubleclick.net.51710.9079.302br.net',
+'ad.doubleclick.net.51713.9079.302br.net',
+'ad.doubleclick.net.51719.9080.302br.net',
+'ad.doubleclick.net.51722.9080.302br.net',
+'ad.doubleclick.net.51725.9080.302br.net',
+'ad.doubleclick.net.51728.9080.302br.net',
+'ad.doubleclick.net.51731.9080.302br.net',
+'ad.doubleclick.net.51737.9375.302br.net',
+'ad.doubleclick.net.51740.9375.302br.net',
+'ad.doubleclick.net.51743.9375.302br.net',
+'ad.doubleclick.net.51746.9375.302br.net',
+'ad.doubleclick.net.51749.9375.302br.net',
+'ad.doubleclick.net.51752.9375.302br.net',
+'ad.doubleclick.net.51755.9084.302br.net',
+'ad.doubleclick.net.51758.9084.302br.net',
+'ad.doubleclick.net.51761.9084.302br.net',
+'ad.doubleclick.net.51764.9084.302br.net',
+'ad.doubleclick.net.51767.9084.302br.net',
+'ad.doubleclick.net.51770.9084.302br.net',
+'ad.doubleclick.net.51773.9082.302br.net',
+'ad.doubleclick.net.51776.9082.302br.net',
+'ad.doubleclick.net.51779.9082.302br.net',
+'ad.doubleclick.net.51800.9085.302br.net',
+'ad.doubleclick.net.51803.9085.302br.net',
+'ad.doubleclick.net.51806.9085.302br.net',
+'ad.doubleclick.net.51809.9085.302br.net',
+'ad.doubleclick.net.51812.9085.302br.net',
+'ad.doubleclick.net.51815.9085.302br.net',
+'ad.doubleclick.net.51818.9086.302br.net',
+'ad.doubleclick.net.51821.9086.302br.net',
+'ad.doubleclick.net.51824.9086.302br.net',
+'ad.doubleclick.net.51827.9086.302br.net',
+'ad.doubleclick.net.51830.9086.302br.net',
+'ad.doubleclick.net.51833.9086.302br.net',
+'ad.doubleclick.net.51836.9087.302br.net',
+'ad.doubleclick.net.51839.9087.302br.net',
+'ad.doubleclick.net.51842.9087.302br.net',
+'ad.doubleclick.net.51845.9087.302br.net',
+'ad.doubleclick.net.51851.9087.302br.net',
+'ad.doubleclick.net.51852.9250.302br.net',
+'ad.doubleclick.net.51858.9250.302br.net',
+'ad.doubleclick.net.51859.9250.302br.net',
+'ad.doubleclick.net.51861.9364.302br.net',
+'ad.doubleclick.net.51863.9364.302br.net',
+'ad.doubleclick.net.51865.9364.302br.net',
+'ad.doubleclick.net.51867.9359.302br.net',
+'ad.doubleclick.net.51869.9359.302br.net',
+'ad.doubleclick.net.51871.9359.302br.net',
+'ad.doubleclick.net.51911.9250.302br.net',
+'ad.doubleclick.net.51914.9250.302br.net',
+'ad.doubleclick.net.51917.9250.302br.net',
+'ad.doubleclick.net.51920.9250.302br.net',
+'ad.doubleclick.net.51923.9250.302br.net',
+'ad.doubleclick.net.51926.9250.302br.net',
+'ad.doubleclick.net.51929.9250.302br.net',
+'ad.doubleclick.net.51932.9250.302br.net',
+'ad.doubleclick.net.51935.9250.302br.net',
+'ad.doubleclick.net.51938.9250.302br.net',
+'ad.doubleclick.net.51941.9250.302br.net',
+'ad.doubleclick.net.51944.9250.302br.net',
+'ad.doubleclick.net.51958.9359.302br.net',
+'ad.doubleclick.net.51961.9359.302br.net',
+'ad.doubleclick.net.51964.9359.302br.net',
+'ad.doubleclick.net.51967.9359.302br.net',
+'ad.doubleclick.net.51970.9359.302br.net',
+'ad.doubleclick.net.51973.9359.302br.net',
+'ad.doubleclick.net.51975.9381.302br.net',
+'ad.doubleclick.net.51976.9381.302br.net',
+'ad.doubleclick.net.52011.9382.302br.net',
+'ad.doubleclick.net.52014.9382.302br.net',
+'ad.doubleclick.net.52017.9382.302br.net',
+'ad.doubleclick.net.52020.9382.302br.net',
+'ad.doubleclick.net.52023.9382.302br.net',
+'ad.doubleclick.net.52029.9382.302br.net',
+'ad.doubleclick.net.52032.9382.302br.net',
+'ad.doubleclick.net.52064.9383.302br.net',
+'ad.doubleclick.net.52066.9383.302br.net',
+'ad.doubleclick.net.52067.9383.302br.net',
+'ad.doubleclick.net.52069.9383.302br.net',
+'ad.doubleclick.net.52070.9383.302br.net',
+'ad.doubleclick.net.52072.9383.302br.net',
+'ad.doubleclick.net.52079.9383.302br.net',
+'ad.doubleclick.net.52081.9383.302br.net',
+'ad.doubleclick.net.52094.9383.302br.net',
+'ad.doubleclick.net.52096.9383.302br.net',
+'ad.doubleclick.net.52097.9383.302br.net',
+'ad.doubleclick.net.52099.9383.302br.net',
+'ad.doubleclick.net.52100.9383.302br.net',
+'ad.doubleclick.net.52102.9383.302br.net',
+'ad.doubleclick.net.52103.9383.302br.net',
+'ad.doubleclick.net.52105.9383.302br.net',
+'ad.doubleclick.net.52106.9383.302br.net',
+'ad.doubleclick.net.52108.9383.302br.net',
+'ad.doubleclick.net.52112.9383.302br.net',
+'ad.doubleclick.net.52114.9383.302br.net',
+'ad.doubleclick.net.52115.9383.302br.net',
+'ad.doubleclick.net.52117.9383.302br.net',
+'ad.doubleclick.net.52118.9383.302br.net',
+'ad.doubleclick.net.52120.9383.302br.net',
+'ad.doubleclick.net.52126.9335.302br.net',
+'ad.doubleclick.net.52129.9384.302br.net',
+'ad.doubleclick.net.52132.9384.302br.net',
+'ad.doubleclick.net.52135.9384.302br.net',
+'ad.doubleclick.net.52141.9384.302br.net',
+'ad.doubleclick.net.52144.9384.302br.net',
+'ad.doubleclick.net.52147.9384.302br.net',
+'ad.doubleclick.net.52150.9384.302br.net',
+'ad.doubleclick.net.52208.9318.302br.net',
+'ad.doubleclick.net.52212.9318.302br.net',
+'ad.doubleclick.net.52222.9318.302br.net',
+'ad.doubleclick.net.52224.9318.302br.net',
+'ad.doubleclick.net.52230.9318.302br.net',
+'ad.doubleclick.net.52235.9318.302br.net',
+'ad.doubleclick.net.52242.9318.302br.net',
+'ad.doubleclick.net.52245.9318.302br.net',
+'ad.doubleclick.net.52253.9318.302br.net',
+'ad.doubleclick.net.52263.9318.302br.net',
+'ad.doubleclick.net.52270.9318.302br.net',
+'ad.doubleclick.net.52284.9318.302br.net',
+'ad.doubleclick.net.52295.9318.302br.net',
+'ad.doubleclick.net.52303.9318.302br.net',
+'ad.doubleclick.net.52310.9318.302br.net',
+'ad.doubleclick.net.52318.9318.302br.net',
+'ad.doubleclick.net.52319.9318.302br.net',
+'ad.doubleclick.net.52360.9303.302br.net',
+'ad.doubleclick.net.52361.9303.302br.net',
+'ad.doubleclick.net.52363.9303.302br.net',
+'ad.doubleclick.net.52364.9303.302br.net',
+'ad.doubleclick.net.52366.9303.302br.net',
+'ad.doubleclick.net.52367.9303.302br.net',
+'ad.doubleclick.net.52559.9335.302br.net',
+'ad.doubleclick.net.52561.9335.302br.net',
+'ad.doubleclick.net.52565.9335.302br.net',
+'ad.doubleclick.net.52567.9335.302br.net',
+'ad.doubleclick.net.52568.9335.302br.net',
+'ad.doubleclick.net.52570.9335.302br.net',
+'ad.doubleclick.net.52591.9239.302br.net',
+'ad.doubleclick.net.52594.9240.302br.net',
+'ad.doubleclick.net.52603.9076.302br.net',
+'ad.doubleclick.net.52606.9076.302br.net',
+'ad.doubleclick.net.52609.9076.302br.net',
+'ad.doubleclick.net.52610.9082.302br.net',
+'ad.doubleclick.net.52612.9082.302br.net',
+'ad.doubleclick.net.52613.9082.302br.net',
+'ad.doubleclick.net.52615.9082.302br.net',
+'ad.doubleclick.net.52616.9082.302br.net',
+'ad.doubleclick.net.52618.9082.302br.net',
+'ad.doubleclick.net.52620.9014.302br.net',
+'ad.doubleclick.net.52623.9014.302br.net',
+'ad.doubleclick.net.52626.9014.302br.net',
+'ad.doubleclick.net.52680.9389.302br.net',
+'ad.doubleclick.net.52681.9389.302br.net',
+'ad.doubleclick.net.52682.9389.302br.net',
+'ad.doubleclick.net.52683.9389.302br.net',
+'ad.doubleclick.net.52684.9389.302br.net',
+'ad.doubleclick.net.52686.9389.302br.net',
+'ad.doubleclick.net.52687.9389.302br.net',
+'ad.doubleclick.net.52688.9389.302br.net',
+'ad.doubleclick.net.52689.9389.302br.net',
+'ad.doubleclick.net.52690.9389.302br.net',
+'ad.doubleclick.net.52692.9389.302br.net',
+'ad.doubleclick.net.52693.9389.302br.net',
+'ad.doubleclick.net.52694.9389.302br.net',
+'ad.doubleclick.net.52695.9389.302br.net',
+'ad.doubleclick.net.52696.9389.302br.net',
+'ad.doubleclick.net.52698.9389.302br.net',
+'ad.doubleclick.net.52699.9389.302br.net',
+'ad.doubleclick.net.52700.9389.302br.net',
+'ad.doubleclick.net.52701.9389.302br.net',
+'ad.doubleclick.net.52702.9389.302br.net',
+'ad.doubleclick.net.52704.9389.302br.net',
+'ad.doubleclick.net.52705.9389.302br.net',
+'ad.doubleclick.net.52733.9390.302br.net',
+'ad.doubleclick.net.52734.9390.302br.net',
+'ad.doubleclick.net.52735.9390.302br.net',
+'ad.doubleclick.net.52736.9390.302br.net',
+'ad.doubleclick.net.52737.9390.302br.net',
+'ad.doubleclick.net.52738.9390.302br.net',
+'ad.doubleclick.net.52740.9390.302br.net',
+'ad.doubleclick.net.52741.9390.302br.net',
+'ad.doubleclick.net.54440.9199.302br.net',
+'ad.doubleclick.net.54441.9199.302br.net',
+'ad.doubleclick.net.54442.9199.302br.net',
+'ad.doubleclick.net.54453.9199.302br.net',
+'ad.doubleclick.net.54458.9199.302br.net',
+'ad.doubleclick.net.54459.9199.302br.net',
+'ad.doubleclick.net.54460.9199.302br.net',
+'ad.doubleclick.net.54488.9199.302br.net',
+'ad.doubleclick.net.54489.9199.302br.net',
+'ad.doubleclick.net.54548.9199.302br.net',
+'ad.doubleclick.net.54549.9199.302br.net',
+'ad.doubleclick.net.54560.9199.302br.net',
+'ad.doubleclick.net.54561.9199.302br.net',
+'ad.doubleclick.net.54567.9199.302br.net',
+'ad.doubleclick.net.54568.9199.302br.net',
+'ad.doubleclick.net.54578.9199.302br.net',
+'ad.doubleclick.net.54579.9199.302br.net',
+'ad.doubleclick.net.54580.9199.302br.net',
+'ad.doubleclick.net.54603.9199.302br.net',
+'ad.doubleclick.net.54604.9199.302br.net',
+'ad.doubleclick.net.54608.9199.302br.net',
+'ad.doubleclick.net.54609.9199.302br.net',
+'ad.doubleclick.net.54610.9199.302br.net',
+'ad.doubleclick.net.54615.9199.302br.net',
+'ad.doubleclick.net.54717.9199.302br.net',
+'ad.doubleclick.net.54718.9199.302br.net',
+'ad.doubleclick.net.54728.9199.302br.net',
+'ad.doubleclick.net.54729.9199.302br.net',
+'ad.doubleclick.net.54740.9199.302br.net',
+'ad.doubleclick.net.54741.9199.302br.net',
+'ad.doubleclick.net.54762.9199.302br.net',
+'ad.doubleclick.net.54763.9199.302br.net',
+'ad.doubleclick.net.54768.9199.302br.net',
+'ad.doubleclick.net.54769.9199.302br.net',
+'ad.doubleclick.net.54792.9199.302br.net',
+'ad.doubleclick.net.54793.9199.302br.net',
+'ad.doubleclick.net.54831.9199.302br.net',
+'ad.doubleclick.net.54832.9199.302br.net',
+'ad.doubleclick.net.54837.9199.302br.net',
+'ad.doubleclick.net.54852.9199.302br.net',
+'ad.doubleclick.net.54853.9199.302br.net',
+'ad.doubleclick.net.54867.9199.302br.net',
+'ad.doubleclick.net.54878.9199.302br.net',
+'ad.doubleclick.net.54879.9199.302br.net',
+'ad.doubleclick.net.54880.9199.302br.net',
+'ad.doubleclick.net.54936.9199.302br.net',
+'ad.doubleclick.net.54937.9199.302br.net',
+'ad.doubleclick.net.55008.9199.302br.net',
+'ad.doubleclick.net.55009.9199.302br.net',
+'ad.doubleclick.net.55017.9199.302br.net',
+'ad.doubleclick.net.55018.9199.302br.net',
+'ad.doubleclick.net.55029.9199.302br.net',
+'ad.doubleclick.net.55030.9199.302br.net',
+'ad.doubleclick.net.55817.9239.302br.net',
+'ad.doubleclick.net.55821.9376.302br.net',
+'ad.doubleclick.net.55823.9376.302br.net',
+'ad.doubleclick.net.55824.9376.302br.net',
+'ad.doubleclick.net.55826.9376.302br.net',
+'ad.doubleclick.net.55829.9077.302br.net',
+'ad.doubleclick.net.55832.9077.302br.net',
+'ad.doubleclick.net.55835.9083.302br.net',
+'ad.doubleclick.net.55838.9083.302br.net',
+'ad.doubleclick.net.55841.9376.302br.net',
+'ad.doubleclick.net.55844.9376.302br.net',
+'ad.doubleclick.net.55847.9376.302br.net',
+'ad.doubleclick.net.55850.9077.302br.net',
+'ad.doubleclick.net.55853.9077.302br.net',
+'ad.doubleclick.net.55856.9077.302br.net',
+'ad.doubleclick.net.55859.9077.302br.net',
+'ad.doubleclick.net.55862.9077.302br.net',
+'ad.doubleclick.net.55865.9077.302br.net',
+'ad.doubleclick.net.55868.9083.302br.net',
+'ad.doubleclick.net.55871.9083.302br.net',
+'ad.doubleclick.net.55874.9083.302br.net',
+'ad.doubleclick.net.55877.9083.302br.net',
+'ad.doubleclick.net.55880.9083.302br.net',
+'ad.doubleclick.net.55883.9083.302br.net',
+'ad.doubleclick.net.56116.9240.302br.net',
+'ad.doubleclick.net.56119.9240.302br.net',
+'ad.doubleclick.net.56122.9376.302br.net',
+'ad.doubleclick.net.56125.9376.302br.net',
+'ad.doubleclick.net.56128.9376.302br.net',
+'ad.doubleclick.net.56139.9392.302br.net',
+'ad.doubleclick.net.56140.9392.302br.net',
+'ad.doubleclick.net.56142.9392.302br.net',
+'ad.doubleclick.net.56143.9392.302br.net',
+'ad.doubleclick.net.56154.9392.302br.net',
+'ad.doubleclick.net.56155.9392.302br.net',
+'ad.doubleclick.net.56162.9392.302br.net',
+'ad.doubleclick.net.56163.9392.302br.net',
+'ad.doubleclick.net.56164.9392.302br.net',
+'ad.doubleclick.net.56166.9392.302br.net',
+'ad.doubleclick.net.56169.9392.302br.net',
+'ad.doubleclick.net.56170.9392.302br.net',
+'ad.doubleclick.net.56172.9392.302br.net',
+'ad.doubleclick.net.56173.9392.302br.net',
+'ad.doubleclick.net.56177.9392.302br.net',
+'ad.doubleclick.net.56178.9392.302br.net',
+'ad.doubleclick.net.56179.9392.302br.net',
+'ad.doubleclick.net.56181.9392.302br.net',
+'ad.doubleclick.net.56182.9392.302br.net',
+'ad.doubleclick.net.56184.9394.302br.net',
+'ad.doubleclick.net.56187.9394.302br.net',
+'ad.doubleclick.net.56190.9394.302br.net',
+'ad.doubleclick.net.56236.9393.302br.net',
+'ad.doubleclick.net.56239.9393.302br.net',
+'ad.doubleclick.net.56242.9393.302br.net',
+'ad.doubleclick.net.56248.9393.302br.net',
+'ad.doubleclick.net.56251.9393.302br.net',
+'ad.doubleclick.net.56254.9393.302br.net',
+'ad.doubleclick.net.56257.9393.302br.net',
+'ad.doubleclick.net.56260.9393.302br.net',
+'ad.doubleclick.net.56263.9393.302br.net',
+'ad.doubleclick.net.56265.9393.302br.net',
+'ad.doubleclick.net.56268.9393.302br.net',
+'ad.doubleclick.net.56271.9393.302br.net',
+'ad.doubleclick.net.56273.9393.302br.net',
+'ad.doubleclick.net.56276.9393.302br.net',
+'ad.doubleclick.net.56279.9393.302br.net',
+'ad.doubleclick.net.56286.9078.302br.net',
+'ad.doubleclick.net.56287.9078.302br.net',
+'ad.doubleclick.net.56304.9078.302br.net',
+'ad.doubleclick.net.56307.9078.302br.net',
+'ad.doubleclick.net.56313.9078.302br.net',
+'ad.doubleclick.net.56316.9078.302br.net',
+'ad.doubleclick.net.56317.9078.302br.net',
+'ad.doubleclick.net.56319.9078.302br.net',
+'ad.doubleclick.net.56320.9078.302br.net',
+'ad.doubleclick.net.56322.9078.302br.net',
+'ad.doubleclick.net.56323.9078.302br.net',
+'ad.doubleclick.net.56348.9078.302br.net',
+'ad.doubleclick.net.56350.9078.302br.net',
+'ad.doubleclick.net.56353.9078.302br.net',
+'ad.doubleclick.net.56354.9078.302br.net',
+'ad.doubleclick.net.56356.9078.302br.net',
+'ad.doubleclick.net.56359.9078.302br.net',
+'ad.doubleclick.net.56360.9078.302br.net',
+'ad.doubleclick.net.56362.9078.302br.net',
+'ad.doubleclick.net.56364.9078.302br.net',
+'ad.doubleclick.net.56365.9078.302br.net',
+'ad.doubleclick.net.56366.9078.302br.net',
+'ad.doubleclick.net.56367.9078.302br.net',
+'ad.doubleclick.net.56368.9078.302br.net',
+'ad.doubleclick.net.56371.9078.302br.net',
+'ad.doubleclick.net.56374.9078.302br.net',
+'ad.doubleclick.net.56375.9078.302br.net',
+'ad.doubleclick.net.56377.9078.302br.net',
+'ad.doubleclick.net.56378.9078.302br.net',
+'ad.doubleclick.net.56380.9078.302br.net',
+'ad.doubleclick.net.56383.9078.302br.net',
+'ad.doubleclick.net.56386.9078.302br.net',
+'ad.doubleclick.net.56432.9397.302br.net',
+'ad.doubleclick.net.56433.9397.302br.net',
+'ad.doubleclick.net.56434.9397.302br.net',
+'ad.doubleclick.net.56435.9376.302br.net',
+'ad.doubleclick.net.56437.9376.302br.net',
+'ad.doubleclick.net.56438.9376.302br.net',
+'ad.doubleclick.net.56440.9376.302br.net',
+'ad.doubleclick.net.56441.9376.302br.net',
+'ad.doubleclick.net.56443.9376.302br.net',
+'ad.doubleclick.net.56446.9083.302br.net',
+'ad.doubleclick.net.56449.9083.302br.net',
+'ad.doubleclick.net.56452.9083.302br.net',
+'ad.doubleclick.net.56455.9086.302br.net',
+'ad.doubleclick.net.56458.9086.302br.net',
+'ad.doubleclick.net.56461.9086.302br.net',
+'ad.doubleclick.net.56482.9083.302br.net',
+'ad.doubleclick.net.56485.9083.302br.net',
+'ad.doubleclick.net.56488.9083.302br.net',
+'ad.doubleclick.net.56491.9376.302br.net',
+'ad.doubleclick.net.56494.9376.302br.net',
+'ad.doubleclick.net.56497.9376.302br.net',
+'ad.doubleclick.net.56500.9083.302br.net',
+'ad.doubleclick.net.56503.9083.302br.net',
+'ad.doubleclick.net.56506.9083.302br.net',
+'ad.doubleclick.net.56509.9086.302br.net',
+'ad.doubleclick.net.56512.9086.302br.net',
+'ad.doubleclick.net.56515.9086.302br.net',
+'ad.doubleclick.net.56607.9336.302br.net',
+'ad.doubleclick.net.56608.9336.302br.net',
+'ad.doubleclick.net.56610.9336.302br.net',
+'ad.doubleclick.net.56611.9336.302br.net',
+'ad.doubleclick.net.56613.9336.302br.net',
+'ad.doubleclick.net.56614.9336.302br.net',
+'ad.doubleclick.net.56628.9336.302br.net',
+'ad.doubleclick.net.56634.9336.302br.net',
+'ad.doubleclick.net.56635.9336.302br.net',
+'ad.doubleclick.net.56637.9336.302br.net',
+'ad.doubleclick.net.56638.9336.302br.net',
+'ad.doubleclick.net.56640.9336.302br.net',
+'ad.doubleclick.net.56641.9336.302br.net',
+'ad.doubleclick.net.56643.9336.302br.net',
+'ad.doubleclick.net.56644.9336.302br.net',
+'ad.doubleclick.net.56646.9336.302br.net',
+'ad.doubleclick.net.56647.9336.302br.net',
+'ad.doubleclick.net.56649.9336.302br.net',
+'ad.doubleclick.net.56650.9336.302br.net',
+'ad.doubleclick.net.56652.9336.302br.net',
+'ad.doubleclick.net.56653.9336.302br.net',
+'ad.doubleclick.net.56655.9336.302br.net',
+'ad.doubleclick.net.56656.9336.302br.net',
+'ad.doubleclick.net.56658.9336.302br.net',
+'ad.doubleclick.net.56659.9336.302br.net',
+'ad.doubleclick.net.56682.9336.302br.net',
+'ad.doubleclick.net.56685.9336.302br.net',
+'ad.doubleclick.net.56688.9336.302br.net',
+'ad.doubleclick.net.56689.9336.302br.net',
+'ad.doubleclick.net.56691.9336.302br.net',
+'ad.doubleclick.net.56692.9336.302br.net',
+'ad.doubleclick.net.56694.9336.302br.net',
+'ad.doubleclick.net.56695.9336.302br.net',
+'ad.doubleclick.net.56708.9053.302br.net',
+'ad.doubleclick.net.56709.9053.302br.net',
+'ad.doubleclick.net.56710.9053.302br.net',
+'ad.doubleclick.net.56711.9053.302br.net',
+'ad.doubleclick.net.56712.9053.302br.net',
+'ad.doubleclick.net.56713.9053.302br.net',
+'ad.doubleclick.net.56715.9053.302br.net',
+'ad.doubleclick.net.56716.9053.302br.net',
+'ad.doubleclick.net.56724.9078.302br.net',
+'ad.doubleclick.net.56754.9078.302br.net',
+'ad.doubleclick.net.56760.9078.302br.net',
+'ad.doubleclick.net.56761.9078.302br.net',
+'ad.doubleclick.net.56766.9078.302br.net',
+'ad.doubleclick.net.56769.9078.302br.net',
+'ad.doubleclick.net.56770.9078.302br.net',
+'ad.doubleclick.net.56772.9078.302br.net',
+'ad.doubleclick.net.56786.9083.302br.net',
+'ad.doubleclick.net.56787.9083.302br.net',
+'ad.doubleclick.net.56897.9401.302br.net',
+'ad.doubleclick.net.56898.9401.302br.net',
+'ad.doubleclick.net.56902.9401.302br.net',
+'ad.doubleclick.net.56903.9401.302br.net',
+'ad.doubleclick.net.56904.9401.302br.net',
+'ad.doubleclick.net.56912.9401.302br.net',
+'ad.doubleclick.net.56913.9401.302br.net',
+'ad.doubleclick.net.56917.9402.302br.net',
+'ad.doubleclick.net.56918.9402.302br.net',
+'ad.doubleclick.net.56921.9402.302br.net',
+'ad.doubleclick.net.56922.9402.302br.net',
+'ad.doubleclick.net.56924.9402.302br.net',
+'ad.doubleclick.net.56925.9402.302br.net',
+'ad.doubleclick.net.56927.9402.302br.net',
+'ad.doubleclick.net.56930.9402.302br.net',
+'ad.doubleclick.net.56931.9402.302br.net',
+'ad.doubleclick.net.56933.9402.302br.net',
+'ad.doubleclick.net.56934.9402.302br.net',
+'ad.doubleclick.net.56936.9402.302br.net',
+'ad.doubleclick.net.56937.9402.302br.net',
+'ad.doubleclick.net.56939.9401.302br.net',
+'ad.doubleclick.net.56942.9401.302br.net',
+'ad.doubleclick.net.56945.9401.302br.net',
+'ad.doubleclick.net.56946.9401.302br.net',
+'ad.doubleclick.net.56948.9401.302br.net',
+'ad.doubleclick.net.56951.9401.302br.net',
+'ad.doubleclick.net.56954.9401.302br.net',
+'ad.doubleclick.net.56955.9401.302br.net',
+'ad.doubleclick.net.56957.9401.302br.net',
+'ad.doubleclick.net.56958.9401.302br.net',
+'ad.doubleclick.net.56961.9401.302br.net',
+'ad.doubleclick.net.56963.9401.302br.net',
+'ad.doubleclick.net.56964.9401.302br.net',
+'ad.doubleclick.net.56966.9401.302br.net',
+'ad.doubleclick.net.56967.9401.302br.net',
+'ad.doubleclick.net.56970.9401.302br.net',
+'ad.doubleclick.net.56976.9401.302br.net',
+'ad.doubleclick.net.56982.9401.302br.net',
+'ad.doubleclick.net.56998.9401.302br.net',
+'ad.doubleclick.net.56999.9401.302br.net',
+'ad.doubleclick.net.57000.9404.302br.net',
+'ad.doubleclick.net.57002.9404.302br.net',
+'ad.doubleclick.net.57003.9404.302br.net',
+'ad.doubleclick.net.57005.9404.302br.net',
+'ad.doubleclick.net.57006.9404.302br.net',
+'ad.doubleclick.net.57008.9404.302br.net',
+'ad.doubleclick.net.57009.9404.302br.net',
+'ad.doubleclick.net.57011.9404.302br.net',
+'ad.doubleclick.net.57014.9404.302br.net',
+'ad.doubleclick.net.57015.9404.302br.net',
+'ad.doubleclick.net.57017.9404.302br.net',
+'ad.doubleclick.net.57020.9404.302br.net',
+'ad.doubleclick.net.57021.9404.302br.net',
+'ad.doubleclick.net.57023.9404.302br.net',
+'ad.doubleclick.net.57026.9404.302br.net',
+'ad.doubleclick.net.57047.9405.302br.net',
+'ad.doubleclick.net.57050.9405.302br.net',
+'ad.doubleclick.net.57053.9405.302br.net',
+'ad.doubleclick.net.57056.9406.302br.net',
+'ad.doubleclick.net.57059.9406.302br.net',
+'ad.doubleclick.net.57062.9406.302br.net',
+'ad.doubleclick.net.57065.9406.302br.net',
+'ad.doubleclick.net.57068.9406.302br.net',
+'ad.doubleclick.net.57071.9406.302br.net',
+'ad.doubleclick.net.57169.9406.302br.net',
+'ad.doubleclick.net.57173.9406.302br.net',
+'ad.doubleclick.net.57176.9406.302br.net',
+'ad.doubleclick.net.57178.9406.302br.net',
+'ad.doubleclick.net.57181.9406.302br.net',
+'ad.doubleclick.net.57185.9406.302br.net',
+'ad.doubleclick.net.57188.9406.302br.net',
+'ad.doubleclick.net.57190.9406.302br.net',
+'ad.doubleclick.net.57194.9406.302br.net',
+'ad.doubleclick.net.57197.9406.302br.net',
+'ad.doubleclick.net.57200.9406.302br.net',
+'ad.doubleclick.net.57202.9406.302br.net',
+'ad.doubleclick.net.57209.9406.302br.net',
+'ad.doubleclick.net.57212.9406.302br.net',
+'ad.doubleclick.net.57214.9406.302br.net',
+'ad.doubleclick.net.57218.9406.302br.net',
+'ad.doubleclick.net.57220.9406.302br.net',
+'ad.doubleclick.net.57222.9406.302br.net',
+'ad.doubleclick.net.57223.9406.302br.net',
+'ad.doubleclick.net.57225.9406.302br.net',
+'ad.doubleclick.net.57226.9406.302br.net',
+'ad.doubleclick.net.57228.9406.302br.net',
+'ad.doubleclick.net.57229.9406.302br.net',
+'ad.doubleclick.net.57231.9406.302br.net',
+'ad.doubleclick.net.57232.9406.302br.net',
+'ad.doubleclick.net.57234.9406.302br.net',
+'ad.doubleclick.net.57235.9406.302br.net',
+'ad.doubleclick.net.57237.9406.302br.net',
+'ad.doubleclick.net.57238.9406.302br.net',
+'ad.doubleclick.net.57240.9406.302br.net',
+'ad.doubleclick.net.57241.9406.302br.net',
+'ad.doubleclick.net.57243.9406.302br.net',
+'ad.doubleclick.net.57245.9408.302br.net',
+'ad.doubleclick.net.57246.9408.302br.net',
+'ad.doubleclick.net.57248.9408.302br.net',
+'ad.doubleclick.net.57251.9408.302br.net',
+'ad.doubleclick.net.57252.9408.302br.net',
+'ad.doubleclick.net.57254.9408.302br.net',
+'ad.doubleclick.net.57255.9408.302br.net',
+'ad.doubleclick.net.57260.9401.302br.net',
+'ad.doubleclick.net.57263.9401.302br.net',
+'ad.doubleclick.net.57266.9401.302br.net',
+'ad.doubleclick.net.57276.9250.302br.net',
+'ad.doubleclick.net.57279.9250.302br.net',
+'ad.doubleclick.net.57282.9250.302br.net',
+'ad.doubleclick.net.57285.9250.302br.net',
+'ad.doubleclick.net.57288.9250.302br.net',
+'ad.doubleclick.net.57291.9250.302br.net',
+'ad.doubleclick.net.57293.9410.302br.net',
+'ad.doubleclick.net.57296.9410.302br.net',
+'ad.doubleclick.net.57299.9410.302br.net',
+'ad.doubleclick.net.57302.9410.302br.net',
+'ad.doubleclick.net.57303.9410.302br.net',
+'ad.doubleclick.net.57305.9410.302br.net',
+'ad.doubleclick.net.57306.9410.302br.net',
+'ad.doubleclick.net.57308.9410.302br.net',
+'ad.doubleclick.net.57309.9410.302br.net',
+'ad.doubleclick.net.57311.9410.302br.net',
+'ad.doubleclick.net.57312.9410.302br.net',
+'ad.doubleclick.net.57314.9410.302br.net',
+'ad.doubleclick.net.57315.9410.302br.net',
+'ad.doubleclick.net.57317.9410.302br.net',
+'ad.doubleclick.net.57318.9410.302br.net',
+'ad.doubleclick.net.57328.9411.302br.net',
+'ad.doubleclick.net.57330.9411.302br.net',
+'ad.doubleclick.net.57331.9411.302br.net',
+'ad.doubleclick.net.57333.9411.302br.net',
+'ad.doubleclick.net.57356.9231.302br.net',
+'ad.doubleclick.net.57357.9231.302br.net',
+'ad.doubleclick.net.57359.9231.302br.net',
+'ad.doubleclick.net.57360.9231.302br.net',
+'ad.doubleclick.net.57371.9231.302br.net',
+'ad.doubleclick.net.57372.9231.302br.net',
+'ad.doubleclick.net.57380.9231.302br.net',
+'ad.doubleclick.net.57381.9231.302br.net',
+'ad.doubleclick.net.57389.9231.302br.net',
+'ad.doubleclick.net.57390.9231.302br.net',
+'ad.doubleclick.net.57392.9231.302br.net',
+'ad.doubleclick.net.57393.9231.302br.net',
+'ad.doubleclick.net.57395.9231.302br.net',
+'ad.doubleclick.net.57396.9231.302br.net',
+'ad.doubleclick.net.57401.9166.302br.net',
+'ad.doubleclick.net.57402.9166.302br.net',
+'ad.doubleclick.net.57404.9166.302br.net',
+'ad.doubleclick.net.57405.9166.302br.net',
+'ad.doubleclick.net.57407.9166.302br.net',
+'ad.doubleclick.net.57408.9166.302br.net',
+'ad.doubleclick.net.57410.9166.302br.net',
+'ad.doubleclick.net.57411.9166.302br.net',
+'ad.doubleclick.net.57413.9166.302br.net',
+'ad.doubleclick.net.57414.9166.302br.net',
+'ad.doubleclick.net.57416.9166.302br.net',
+'ad.doubleclick.net.57417.9166.302br.net',
+'ad.doubleclick.net.57419.9166.302br.net',
+'ad.doubleclick.net.57420.9166.302br.net',
+'ad.doubleclick.net.57422.9166.302br.net',
+'ad.doubleclick.net.57423.9166.302br.net',
+'ad.doubleclick.net.57425.9166.302br.net',
+'ad.doubleclick.net.57426.9166.302br.net',
+'ad.doubleclick.net.57901.9418.302br.net',
+'ad.doubleclick.net.57903.9418.302br.net',
+'ad.doubleclick.net.57904.9418.302br.net',
+'ad.doubleclick.net.57906.9418.302br.net',
+'ad.doubleclick.net.57913.9418.302br.net',
+'ad.doubleclick.net.57915.9418.302br.net',
+'ad.doubleclick.net.57921.9418.302br.net',
+'ad.doubleclick.net.57924.9418.302br.net',
+'ad.doubleclick.net.57927.9418.302br.net',
+'ad.doubleclick.net.57928.9418.302br.net',
+'ad.doubleclick.net.57930.9418.302br.net',
+'ad.doubleclick.net.57933.9418.302br.net',
+'ad.doubleclick.net.57936.9418.302br.net',
+'ad.doubleclick.net.57937.9418.302br.net',
+'ad.doubleclick.net.57939.9418.302br.net',
+'ad.doubleclick.net.57940.9418.302br.net',
+'ad.doubleclick.net.57942.9418.302br.net',
+'ad.doubleclick.net.57943.9418.302br.net',
+'ad.doubleclick.net.57945.9418.302br.net',
+'ad.doubleclick.net.57946.9418.302br.net',
+'ad.doubleclick.net.57948.9418.302br.net',
+'ad.doubleclick.net.57951.9418.302br.net',
+'ad.doubleclick.net.57954.9418.302br.net',
+'ad.doubleclick.net.57957.9418.302br.net',
+'ad.doubleclick.net.57958.9418.302br.net',
+'ad.doubleclick.net.57960.9418.302br.net',
+'ad.doubleclick.net.57961.9418.302br.net',
+'ad.doubleclick.net.57963.9418.302br.net',
+'ad.doubleclick.net.57964.9418.302br.net',
+'ad.doubleclick.net.57966.9418.302br.net',
+'ad.doubleclick.net.57967.9418.302br.net',
+'ad.doubleclick.net.57969.9418.302br.net',
+'ad.doubleclick.net.57972.9418.302br.net',
+'ad.doubleclick.net.57973.9418.302br.net',
+'ad.doubleclick.net.57975.9418.302br.net',
+'ad.doubleclick.net.57978.9418.302br.net',
+'ad.doubleclick.net.57981.9418.302br.net',
+'ad.doubleclick.net.57982.9418.302br.net',
+'ad.doubleclick.net.57984.9418.302br.net',
+'ad.doubleclick.net.57985.9418.302br.net',
+'ad.doubleclick.net.57987.9418.302br.net',
+'ad.doubleclick.net.57990.9418.302br.net',
+'ad.doubleclick.net.57991.9418.302br.net',
+'ad.doubleclick.net.57993.9418.302br.net',
+'ad.doubleclick.net.57994.9418.302br.net',
+'ad.doubleclick.net.57996.9418.302br.net',
+'ad.doubleclick.net.57999.9418.302br.net',
+'ad.doubleclick.net.58000.9418.302br.net',
+'ad.doubleclick.net.58002.9418.302br.net',
+'ad.doubleclick.net.58005.9418.302br.net',
+'ad.doubleclick.net.58008.9418.302br.net',
+'ad.doubleclick.net.58009.9418.302br.net',
+'ad.doubleclick.net.58011.9418.302br.net',
+'ad.doubleclick.net.58015.9418.302br.net',
+'ad.doubleclick.net.58017.9418.302br.net',
+'ad.doubleclick.net.58018.9418.302br.net',
+'ad.doubleclick.net.58020.9418.302br.net',
+'ad.doubleclick.net.58021.9418.302br.net',
+'ad.doubleclick.net.58023.9418.302br.net',
+'ad.doubleclick.net.58024.9418.302br.net',
+'ad.doubleclick.net.58026.9418.302br.net',
+'ad.doubleclick.net.58027.9418.302br.net',
+'ad.doubleclick.net.58029.9418.302br.net',
+'ad.doubleclick.net.58032.9418.302br.net',
+'ad.doubleclick.net.58033.9418.302br.net',
+'ad.doubleclick.net.58035.9418.302br.net',
+'ad.doubleclick.net.58038.9418.302br.net',
+'ad.doubleclick.net.58039.9418.302br.net',
+'ad.doubleclick.net.58041.9418.302br.net',
+'ad.doubleclick.net.58042.9418.302br.net',
+'ad.doubleclick.net.58044.9418.302br.net',
+'ad.doubleclick.net.58048.9418.302br.net',
+'ad.doubleclick.net.58050.9418.302br.net',
+'ad.doubleclick.net.58051.9418.302br.net',
+'ad.doubleclick.net.58053.9418.302br.net',
+'ad.doubleclick.net.58054.9418.302br.net',
+'ad.doubleclick.net.58056.9418.302br.net',
+'ad.doubleclick.net.58057.9418.302br.net',
+'ad.doubleclick.net.58059.9418.302br.net',
+'ad.doubleclick.net.58060.9418.302br.net',
+'ad.doubleclick.net.58062.9418.302br.net',
+'ad.doubleclick.net.58065.9418.302br.net',
+'ad.doubleclick.net.58066.9418.302br.net',
+'ad.doubleclick.net.58068.9418.302br.net',
+'ad.doubleclick.net.58072.9418.302br.net',
+'ad.doubleclick.net.58074.9418.302br.net',
+'ad.doubleclick.net.58075.9418.302br.net',
+'ad.doubleclick.net.58077.9418.302br.net',
+'ad.doubleclick.net.58078.9418.302br.net',
+'ad.doubleclick.net.58080.9418.302br.net',
+'ad.doubleclick.net.58081.9418.302br.net',
+'ad.doubleclick.net.58083.9418.302br.net',
+'ad.doubleclick.net.58086.9418.302br.net',
+'ad.doubleclick.net.58087.9418.302br.net',
+'ad.doubleclick.net.58089.9418.302br.net',
+'ad.doubleclick.net.58092.9418.302br.net',
+'ad.doubleclick.net.58096.9418.302br.net',
+'ad.doubleclick.net.58098.9418.302br.net',
+'ad.doubleclick.net.58099.9418.302br.net',
+'ad.doubleclick.net.58101.9418.302br.net',
+'ad.doubleclick.net.58102.9418.302br.net',
+'ad.doubleclick.net.58104.9418.302br.net',
+'ad.doubleclick.net.58105.9418.302br.net',
+'ad.doubleclick.net.58107.9418.302br.net',
+'ad.doubleclick.net.58113.9418.302br.net',
+'ad.doubleclick.net.58114.9418.302br.net',
+'ad.doubleclick.net.58116.9418.302br.net',
+'ad.doubleclick.net.58117.9418.302br.net',
+'ad.doubleclick.net.58119.9418.302br.net',
+'ad.doubleclick.net.58120.9418.302br.net',
+'ad.doubleclick.net.58122.9418.302br.net',
+'ad.doubleclick.net.58123.9418.302br.net',
+'ad.doubleclick.net.58125.9418.302br.net',
+'ad.doubleclick.net.58126.9418.302br.net',
+'ad.doubleclick.net.58128.9418.302br.net',
+'ad.doubleclick.net.58131.9418.302br.net',
+'ad.doubleclick.net.58137.9418.302br.net',
+'ad.doubleclick.net.58140.9418.302br.net',
+'ad.doubleclick.net.58141.9418.302br.net',
+'ad.doubleclick.net.58143.9418.302br.net',
+'ad.doubleclick.net.58144.9418.302br.net',
+'ad.doubleclick.net.58146.9418.302br.net',
+'ad.doubleclick.net.58151.9078.302br.net',
+'ad.doubleclick.net.58153.9411.302br.net',
+'ad.doubleclick.net.58155.9411.302br.net',
+'ad.doubleclick.net.58156.9411.302br.net',
+'ad.doubleclick.net.58158.9411.302br.net',
+'ad.doubleclick.net.58162.9411.302br.net',
+'ad.doubleclick.net.58164.9411.302br.net',
+'ad.doubleclick.net.58165.9411.302br.net',
+'ad.doubleclick.net.58167.9411.302br.net',
+'ad.doubleclick.net.58169.9419.302br.net',
+'ad.doubleclick.net.58170.9419.302br.net',
+'ad.doubleclick.net.58171.9419.302br.net',
+'ad.doubleclick.net.58172.9419.302br.net',
+'ad.doubleclick.net.58245.9420.302br.net',
+'ad.doubleclick.net.58246.9420.302br.net',
+'ad.doubleclick.net.58247.9420.302br.net',
+'ad.doubleclick.net.58248.9420.302br.net',
+'ad.doubleclick.net.58249.9420.302br.net',
+'ad.doubleclick.net.58250.9420.302br.net',
+'ad.doubleclick.net.58252.9420.302br.net',
+'ad.doubleclick.net.58253.9420.302br.net',
+'ad.doubleclick.net.58256.9404.302br.net',
+'ad.doubleclick.net.58259.9404.302br.net',
+'ad.doubleclick.net.58262.9404.302br.net',
+'ad.doubleclick.net.58263.9404.302br.net',
+'ad.doubleclick.net.58265.9404.302br.net',
+'ad.doubleclick.net.58268.9404.302br.net',
+'ad.doubleclick.net.58269.9404.302br.net',
+'ad.doubleclick.net.58271.9404.302br.net',
+'ad.doubleclick.net.58272.9404.302br.net',
+'ad.doubleclick.net.58274.9404.302br.net',
+'ad.doubleclick.net.58277.9404.302br.net',
+'ad.doubleclick.net.58278.9404.302br.net',
+'ad.doubleclick.net.58280.9404.302br.net',
+'ad.doubleclick.net.58282.9423.302br.net',
+'ad.doubleclick.net.58284.9423.302br.net',
+'ad.doubleclick.net.58286.9423.302br.net',
+'ad.doubleclick.net.58288.9423.302br.net',
+'ad.doubleclick.net.58290.9423.302br.net',
+'ad.doubleclick.net.58292.9423.302br.net',
+'ad.doubleclick.net.58296.9423.302br.net',
+'ad.doubleclick.net.58300.9423.302br.net',
+'ad.doubleclick.net.58302.9423.302br.net',
+'ad.doubleclick.net.58306.9423.302br.net',
+'ad.doubleclick.net.58308.9423.302br.net',
+'ad.doubleclick.net.58310.9423.302br.net',
+'ad.doubleclick.net.58314.9423.302br.net',
+'ad.doubleclick.net.58315.9423.302br.net',
+'ad.doubleclick.net.58316.9423.302br.net',
+'ad.doubleclick.net.58320.9423.302br.net',
+'ad.doubleclick.net.58330.9318.302br.net',
+'ad.doubleclick.net.58332.9318.302br.net',
+'ad.doubleclick.net.58334.9318.302br.net',
+'ad.doubleclick.net.58335.9318.302br.net',
+'ad.doubleclick.net.58336.9318.302br.net',
+'ad.doubleclick.net.58338.9318.302br.net',
+'ad.doubleclick.net.58339.9318.302br.net',
+'ad.doubleclick.net.58340.9318.302br.net',
+'ad.doubleclick.net.58341.9318.302br.net',
+'ad.doubleclick.net.58342.9318.302br.net',
+'ad.doubleclick.net.58343.9318.302br.net',
+'ad.doubleclick.net.58344.9318.302br.net',
+'ad.doubleclick.net.58345.9318.302br.net',
+'ad.doubleclick.net.58347.9318.302br.net',
+'ad.doubleclick.net.58348.9318.302br.net',
+'ad.doubleclick.net.58350.9318.302br.net',
+'ad.doubleclick.net.58351.9318.302br.net',
+'ad.doubleclick.net.58352.9318.302br.net',
+'ad.doubleclick.net.58353.9318.302br.net',
+'ad.doubleclick.net.58354.9318.302br.net',
+'ad.doubleclick.net.58355.9318.302br.net',
+'ad.doubleclick.net.58356.9318.302br.net',
+'ad.doubleclick.net.58357.9318.302br.net',
+'ad.doubleclick.net.58359.9318.302br.net',
+'ad.doubleclick.net.58360.9318.302br.net',
+'ad.doubleclick.net.58361.9318.302br.net',
+'ad.doubleclick.net.58362.9318.302br.net',
+'ad.doubleclick.net.58363.9318.302br.net',
+'ad.doubleclick.net.58364.9318.302br.net',
+'ad.doubleclick.net.58365.9318.302br.net',
+'ad.doubleclick.net.58366.9318.302br.net',
+'ad.doubleclick.net.58368.9318.302br.net',
+'ad.doubleclick.net.58369.9318.302br.net',
+'ad.doubleclick.net.58371.9318.302br.net',
+'ad.doubleclick.net.58372.9318.302br.net',
+'ad.doubleclick.net.58373.9318.302br.net',
+'ad.doubleclick.net.58374.9318.302br.net',
+'ad.doubleclick.net.58375.9318.302br.net',
+'ad.doubleclick.net.58376.9318.302br.net',
+'ad.doubleclick.net.58377.9318.302br.net',
+'ad.doubleclick.net.58378.9318.302br.net',
+'ad.doubleclick.net.58380.9318.302br.net',
+'ad.doubleclick.net.58381.9318.302br.net',
+'ad.doubleclick.net.58383.9318.302br.net',
+'ad.doubleclick.net.58385.9318.302br.net',
+'ad.doubleclick.net.58386.9318.302br.net',
+'ad.doubleclick.net.58387.9318.302br.net',
+'ad.doubleclick.net.58389.9318.302br.net',
+'ad.doubleclick.net.58392.9318.302br.net',
+'ad.doubleclick.net.58393.9318.302br.net',
+'ad.doubleclick.net.58394.9318.302br.net',
+'ad.doubleclick.net.58395.9318.302br.net',
+'ad.doubleclick.net.58404.9318.302br.net',
+'ad.doubleclick.net.58407.9318.302br.net',
+'ad.doubleclick.net.58410.9318.302br.net',
+'ad.doubleclick.net.58411.9318.302br.net',
+'ad.doubleclick.net.58413.9318.302br.net',
+'ad.doubleclick.net.58417.9318.302br.net',
+'ad.doubleclick.net.58419.9318.302br.net',
+'ad.doubleclick.net.58425.9318.302br.net',
+'ad.doubleclick.net.58428.9318.302br.net',
+'ad.doubleclick.net.58429.9318.302br.net',
+'ad.doubleclick.net.58431.9318.302br.net',
+'ad.doubleclick.net.58437.9318.302br.net',
+'ad.doubleclick.net.58441.9318.302br.net',
+'ad.doubleclick.net.58443.9318.302br.net',
+'ad.doubleclick.net.58449.9318.302br.net',
+'ad.doubleclick.net.58452.9318.302br.net',
+'ad.doubleclick.net.58453.9318.302br.net',
+'ad.doubleclick.net.58455.9318.302br.net',
+'ad.doubleclick.net.58456.9318.302br.net',
+'ad.doubleclick.net.58458.9318.302br.net',
+'ad.doubleclick.net.58459.9318.302br.net',
+'ad.doubleclick.net.58461.9318.302br.net',
+'ad.doubleclick.net.58462.9318.302br.net',
+'ad.doubleclick.net.58464.9318.302br.net',
+'ad.doubleclick.net.58467.9318.302br.net',
+'ad.doubleclick.net.58479.9318.302br.net',
+'ad.doubleclick.net.58480.9318.302br.net',
+'ad.doubleclick.net.58482.9318.302br.net',
+'ad.doubleclick.net.58483.9318.302br.net',
+'ad.doubleclick.net.58485.9318.302br.net',
+'ad.doubleclick.net.58494.9318.302br.net',
+'ad.doubleclick.net.58497.9318.302br.net',
+'ad.doubleclick.net.58498.9318.302br.net',
+'ad.doubleclick.net.58500.9318.302br.net',
+'ad.doubleclick.net.58503.9318.302br.net',
+'ad.doubleclick.net.58504.9318.302br.net',
+'ad.doubleclick.net.58506.9318.302br.net',
+'ad.doubleclick.net.58509.9318.302br.net',
+'ad.doubleclick.net.58518.9318.302br.net',
+'ad.doubleclick.net.58522.9318.302br.net',
+'ad.doubleclick.net.58524.9318.302br.net',
+'ad.doubleclick.net.58527.9318.302br.net',
+'ad.doubleclick.net.58530.9318.302br.net',
+'ad.doubleclick.net.58533.9318.302br.net',
+'ad.doubleclick.net.58551.9318.302br.net',
+'ad.doubleclick.net.58557.9318.302br.net',
+'ad.doubleclick.net.58560.9318.302br.net',
+'ad.doubleclick.net.58572.9318.302br.net',
+'ad.doubleclick.net.58573.9318.302br.net',
+'ad.doubleclick.net.58574.9318.302br.net',
+'ad.doubleclick.net.58578.9318.302br.net',
+'ad.doubleclick.net.58579.9318.302br.net',
+'ad.doubleclick.net.58580.9318.302br.net',
+'ad.doubleclick.net.58585.9318.302br.net',
+'ad.doubleclick.net.58587.9318.302br.net',
+'ad.doubleclick.net.58588.9318.302br.net',
+'ad.doubleclick.net.58591.9318.302br.net',
+'ad.doubleclick.net.58592.9318.302br.net',
+'ad.doubleclick.net.58593.9318.302br.net',
+'ad.doubleclick.net.58596.9318.302br.net',
+'ad.doubleclick.net.58597.9318.302br.net',
+'ad.doubleclick.net.58599.9318.302br.net',
+'ad.doubleclick.net.58603.9318.302br.net',
+'ad.doubleclick.net.58604.9318.302br.net',
+'ad.doubleclick.net.58606.9318.302br.net',
+'ad.doubleclick.net.58607.9318.302br.net',
+'ad.doubleclick.net.58608.9318.302br.net',
+'ad.doubleclick.net.58612.9318.302br.net',
+'ad.doubleclick.net.58613.9318.302br.net',
+'ad.doubleclick.net.58614.9318.302br.net',
+'ad.doubleclick.net.58618.9318.302br.net',
+'ad.doubleclick.net.58619.9318.302br.net',
+'ad.doubleclick.net.58625.9318.302br.net',
+'ad.doubleclick.net.58627.9318.302br.net',
+'ad.doubleclick.net.58628.9318.302br.net',
+'ad.doubleclick.net.58630.9318.302br.net',
+'ad.doubleclick.net.58631.9318.302br.net',
+'ad.doubleclick.net.58633.9318.302br.net',
+'ad.doubleclick.net.58635.9318.302br.net',
+'ad.doubleclick.net.58638.9318.302br.net',
+'ad.doubleclick.net.58639.9318.302br.net',
+'ad.doubleclick.net.58640.9318.302br.net',
+'ad.doubleclick.net.58642.9318.302br.net',
+'ad.doubleclick.net.58644.9318.302br.net',
+'ad.doubleclick.net.58646.9318.302br.net',
+'ad.doubleclick.net.58648.9318.302br.net',
+'ad.doubleclick.net.58651.9318.302br.net',
+'ad.doubleclick.net.58652.9318.302br.net',
+'ad.doubleclick.net.58654.9318.302br.net',
+'ad.doubleclick.net.58655.9318.302br.net',
+'ad.doubleclick.net.58657.9318.302br.net',
+'ad.doubleclick.net.58658.9318.302br.net',
+'ad.doubleclick.net.58660.9318.302br.net',
+'ad.doubleclick.net.58661.9318.302br.net',
+'ad.doubleclick.net.58663.9318.302br.net',
+'ad.doubleclick.net.58665.9318.302br.net',
+'ad.doubleclick.net.58668.9318.302br.net',
+'ad.doubleclick.net.58669.9318.302br.net',
+'ad.doubleclick.net.58670.9318.302br.net',
+'ad.doubleclick.net.58671.9318.302br.net',
+'ad.doubleclick.net.58673.9318.302br.net',
+'ad.doubleclick.net.58674.9318.302br.net',
+'ad.doubleclick.net.58676.9318.302br.net',
+'ad.doubleclick.net.58678.9318.302br.net',
+'ad.doubleclick.net.58679.9318.302br.net',
+'ad.doubleclick.net.58681.9318.302br.net',
+'ad.doubleclick.net.58683.9318.302br.net',
+'ad.doubleclick.net.58685.9318.302br.net',
+'ad.doubleclick.net.58686.9318.302br.net',
+'ad.doubleclick.net.58687.9318.302br.net',
+'ad.doubleclick.net.58689.9318.302br.net',
+'ad.doubleclick.net.58691.9318.302br.net',
+'ad.doubleclick.net.58692.9318.302br.net',
+'ad.doubleclick.net.58693.9318.302br.net',
+'ad.doubleclick.net.58694.9318.302br.net',
+'ad.doubleclick.net.58695.9318.302br.net',
+'ad.doubleclick.net.58696.9318.302br.net',
+'ad.doubleclick.net.58698.9318.302br.net',
+'ad.doubleclick.net.58699.9318.302br.net',
+'ad.doubleclick.net.58700.9318.302br.net',
+'ad.doubleclick.net.58704.9318.302br.net',
+'ad.doubleclick.net.58706.9318.302br.net',
+'ad.doubleclick.net.58711.9318.302br.net',
+'ad.doubleclick.net.58712.9318.302br.net',
+'ad.doubleclick.net.58713.9318.302br.net',
+'ad.doubleclick.net.58715.9318.302br.net',
+'ad.doubleclick.net.58717.9318.302br.net',
+'ad.doubleclick.net.58718.9318.302br.net',
+'ad.doubleclick.net.58723.9318.302br.net',
+'ad.doubleclick.net.58724.9318.302br.net',
+'ad.doubleclick.net.58726.9318.302br.net',
+'ad.doubleclick.net.58730.9318.302br.net',
+'ad.doubleclick.net.58731.9318.302br.net',
+'ad.doubleclick.net.58732.9318.302br.net',
+'ad.doubleclick.net.58734.9318.302br.net',
+'ad.doubleclick.net.58737.9318.302br.net',
+'ad.doubleclick.net.58740.9318.302br.net',
+'ad.doubleclick.net.58741.9318.302br.net',
+'ad.doubleclick.net.58743.9318.302br.net',
+'ad.doubleclick.net.58746.9318.302br.net',
+'ad.doubleclick.net.58748.9318.302br.net',
+'ad.doubleclick.net.58752.9318.302br.net',
+'ad.doubleclick.net.58753.9318.302br.net',
+'ad.doubleclick.net.58754.9318.302br.net',
+'ad.doubleclick.net.58759.9318.302br.net',
+'ad.doubleclick.net.58760.9318.302br.net',
+'ad.doubleclick.net.58762.9318.302br.net',
+'ad.doubleclick.net.58763.9318.302br.net',
+'ad.doubleclick.net.58767.9318.302br.net',
+'ad.doubleclick.net.58770.9318.302br.net',
+'ad.doubleclick.net.58774.9318.302br.net',
+'ad.doubleclick.net.58776.9318.302br.net',
+'ad.doubleclick.net.58779.9318.302br.net',
+'ad.doubleclick.net.58781.9318.302br.net',
+'ad.doubleclick.net.58782.9318.302br.net',
+'ad.doubleclick.net.58785.9318.302br.net',
+'ad.doubleclick.net.58787.9318.302br.net',
+'ad.doubleclick.net.58791.9318.302br.net',
+'ad.doubleclick.net.58793.9318.302br.net',
+'ad.doubleclick.net.58795.9318.302br.net',
+'ad.doubleclick.net.58796.9318.302br.net',
+'ad.doubleclick.net.58797.9318.302br.net',
+'ad.doubleclick.net.58798.9318.302br.net',
+'ad.doubleclick.net.58800.9318.302br.net',
+'ad.doubleclick.net.58801.9318.302br.net',
+'ad.doubleclick.net.58802.9318.302br.net',
+'ad.doubleclick.net.58803.9318.302br.net',
+'ad.doubleclick.net.58804.9318.302br.net',
+'ad.doubleclick.net.58806.9318.302br.net',
+'ad.doubleclick.net.58808.9318.302br.net',
+'ad.doubleclick.net.58809.9318.302br.net',
+'ad.doubleclick.net.58810.9318.302br.net',
+'ad.doubleclick.net.58812.9318.302br.net',
+'ad.doubleclick.net.58815.9318.302br.net',
+'ad.doubleclick.net.58816.9318.302br.net',
+'ad.doubleclick.net.58818.9318.302br.net',
+'ad.doubleclick.net.58820.9318.302br.net',
+'ad.doubleclick.net.58821.9318.302br.net',
+'ad.doubleclick.net.58822.9318.302br.net',
+'ad.doubleclick.net.58824.9318.302br.net',
+'ad.doubleclick.net.58826.9318.302br.net',
+'ad.doubleclick.net.58827.9318.302br.net',
+'ad.doubleclick.net.58828.9318.302br.net',
+'ad.doubleclick.net.58829.9318.302br.net',
+'ad.doubleclick.net.58830.9318.302br.net',
+'ad.doubleclick.net.58831.9318.302br.net',
+'ad.doubleclick.net.58834.9318.302br.net',
+'ad.doubleclick.net.58835.9318.302br.net',
+'ad.doubleclick.net.58836.9318.302br.net',
+'ad.doubleclick.net.58837.9318.302br.net',
+'ad.doubleclick.net.58839.9318.302br.net',
+'ad.doubleclick.net.58843.9318.302br.net',
+'ad.doubleclick.net.58844.9318.302br.net',
+'ad.doubleclick.net.58846.9318.302br.net',
+'ad.doubleclick.net.58849.9318.302br.net',
+'ad.doubleclick.net.58855.9318.302br.net',
+'ad.doubleclick.net.58856.9318.302br.net',
+'ad.doubleclick.net.58857.9318.302br.net',
+'ad.doubleclick.net.58860.9318.302br.net',
+'ad.doubleclick.net.58861.9318.302br.net',
+'ad.doubleclick.net.58862.9318.302br.net',
+'ad.doubleclick.net.58864.9318.302br.net',
+'ad.doubleclick.net.58867.9318.302br.net',
+'ad.doubleclick.net.58868.9318.302br.net',
+'ad.doubleclick.net.58870.9318.302br.net',
+'ad.doubleclick.net.58872.9318.302br.net',
+'ad.doubleclick.net.58873.9318.302br.net',
+'ad.doubleclick.net.58874.9318.302br.net',
+'ad.doubleclick.net.58875.9318.302br.net',
+'ad.doubleclick.net.58879.9318.302br.net',
+'ad.doubleclick.net.58881.9318.302br.net',
+'ad.doubleclick.net.58886.9318.302br.net',
+'ad.doubleclick.net.58890.9318.302br.net',
+'ad.doubleclick.net.58892.9318.302br.net',
+'ad.doubleclick.net.58893.9318.302br.net',
+'ad.doubleclick.net.58896.9318.302br.net',
+'ad.doubleclick.net.58899.9318.302br.net',
+'ad.doubleclick.net.58902.9318.302br.net',
+'ad.doubleclick.net.58905.9318.302br.net',
+'ad.doubleclick.net.58907.9318.302br.net',
+'ad.doubleclick.net.58909.9318.302br.net',
+'ad.doubleclick.net.58911.9318.302br.net',
+'ad.doubleclick.net.58920.9318.302br.net',
+'ad.doubleclick.net.58923.9318.302br.net',
+'ad.doubleclick.net.58926.9318.302br.net',
+'ad.doubleclick.net.58928.9318.302br.net',
+'ad.doubleclick.net.58929.9318.302br.net',
+'ad.doubleclick.net.58932.9318.302br.net',
+'ad.doubleclick.net.58933.9318.302br.net',
+'ad.doubleclick.net.58936.9318.302br.net',
+'ad.doubleclick.net.58937.9318.302br.net',
+'ad.doubleclick.net.58938.9318.302br.net',
+'ad.doubleclick.net.58939.9318.302br.net',
+'ad.doubleclick.net.58942.9318.302br.net',
+'ad.doubleclick.net.58943.9318.302br.net',
+'ad.doubleclick.net.58944.9318.302br.net',
+'ad.doubleclick.net.58946.9318.302br.net',
+'ad.doubleclick.net.58951.9318.302br.net',
+'ad.doubleclick.net.58952.9318.302br.net',
+'ad.doubleclick.net.58954.9318.302br.net',
+'ad.doubleclick.net.58956.9318.302br.net',
+'ad.doubleclick.net.58957.9318.302br.net',
+'ad.doubleclick.net.58959.9318.302br.net',
+'ad.doubleclick.net.58961.9318.302br.net',
+'ad.doubleclick.net.58964.9318.302br.net',
+'ad.doubleclick.net.58969.9318.302br.net',
+'ad.doubleclick.net.58970.9318.302br.net',
+'ad.doubleclick.net.58971.9318.302br.net',
+'ad.doubleclick.net.58975.9318.302br.net',
+'ad.doubleclick.net.58976.9318.302br.net',
+'ad.doubleclick.net.58977.9318.302br.net',
+'ad.doubleclick.net.58978.9318.302br.net',
+'ad.doubleclick.net.58981.9318.302br.net',
+'ad.doubleclick.net.58982.9318.302br.net',
+'ad.doubleclick.net.58984.9318.302br.net',
+'ad.doubleclick.net.58988.9318.302br.net',
+'ad.doubleclick.net.58989.9318.302br.net',
+'ad.doubleclick.net.58993.9318.302br.net',
+'ad.doubleclick.net.58994.9318.302br.net',
+'ad.doubleclick.net.58996.9318.302br.net',
+'ad.doubleclick.net.58999.9318.302br.net',
+'ad.doubleclick.net.59000.9318.302br.net',
+'ad.doubleclick.net.59005.9318.302br.net',
+'ad.doubleclick.net.59006.9318.302br.net',
+'ad.doubleclick.net.59007.9318.302br.net',
+'ad.doubleclick.net.59014.9318.302br.net',
+'ad.doubleclick.net.59015.9318.302br.net',
+'ad.doubleclick.net.59017.9318.302br.net',
+'ad.doubleclick.net.59020.9318.302br.net',
+'ad.doubleclick.net.59022.9318.302br.net',
+'ad.doubleclick.net.59026.9318.302br.net',
+'ad.doubleclick.net.59027.9318.302br.net',
+'ad.doubleclick.net.59032.9318.302br.net',
+'ad.doubleclick.net.59033.9318.302br.net',
+'ad.doubleclick.net.59035.9318.302br.net',
+'ad.doubleclick.net.59037.9318.302br.net',
+'ad.doubleclick.net.59039.9318.302br.net',
+'ad.doubleclick.net.59040.9318.302br.net',
+'ad.doubleclick.net.59044.9318.302br.net',
+'ad.doubleclick.net.59046.9318.302br.net',
+'ad.doubleclick.net.59047.9318.302br.net',
+'ad.doubleclick.net.59050.9318.302br.net',
+'ad.doubleclick.net.59052.9318.302br.net',
+'ad.doubleclick.net.59055.9318.302br.net',
+'ad.doubleclick.net.59057.9318.302br.net',
+'ad.doubleclick.net.59058.9318.302br.net',
+'ad.doubleclick.net.59064.9318.302br.net',
+'ad.doubleclick.net.59067.9318.302br.net',
+'ad.doubleclick.net.59072.9318.302br.net',
+'ad.doubleclick.net.59073.9318.302br.net',
+'ad.doubleclick.net.59074.9318.302br.net',
+'ad.doubleclick.net.59077.9318.302br.net',
+'ad.doubleclick.net.59078.9318.302br.net',
+'ad.doubleclick.net.59082.9318.302br.net',
+'ad.doubleclick.net.59087.9318.302br.net',
+'ad.doubleclick.net.59093.9318.302br.net',
+'ad.doubleclick.net.59095.9318.302br.net',
+'ad.doubleclick.net.59098.9318.302br.net',
+'ad.doubleclick.net.59099.9318.302br.net',
+'ad.doubleclick.net.59100.9318.302br.net',
+'ad.doubleclick.net.59104.9318.302br.net',
+'ad.doubleclick.net.59105.9318.302br.net',
+'ad.doubleclick.net.59107.9318.302br.net',
+'ad.doubleclick.net.59109.9318.302br.net',
+'ad.doubleclick.net.59111.9318.302br.net',
+'ad.doubleclick.net.59115.9318.302br.net',
+'ad.doubleclick.net.59116.9318.302br.net',
+'ad.doubleclick.net.59118.9318.302br.net',
+'ad.doubleclick.net.59122.9318.302br.net',
+'ad.doubleclick.net.59123.9318.302br.net',
+'ad.doubleclick.net.59127.9318.302br.net',
+'ad.doubleclick.net.59130.9318.302br.net',
+'ad.doubleclick.net.59131.9318.302br.net',
+'ad.doubleclick.net.59134.9318.302br.net',
+'ad.doubleclick.net.59135.9318.302br.net',
+'ad.doubleclick.net.59136.9318.302br.net',
+'ad.doubleclick.net.59140.9318.302br.net',
+'ad.doubleclick.net.59146.9318.302br.net',
+'ad.doubleclick.net.59147.9318.302br.net',
+'ad.doubleclick.net.59148.9318.302br.net',
+'ad.doubleclick.net.59151.9318.302br.net',
+'ad.doubleclick.net.59154.9318.302br.net',
+'ad.doubleclick.net.59156.9318.302br.net',
+'ad.doubleclick.net.59162.9318.302br.net',
+'ad.doubleclick.net.59163.9318.302br.net',
+'ad.doubleclick.net.59165.9318.302br.net',
+'ad.doubleclick.net.59166.9318.302br.net',
+'ad.doubleclick.net.59168.9318.302br.net',
+'ad.doubleclick.net.59169.9318.302br.net',
+'ad.doubleclick.net.59171.9318.302br.net',
+'ad.doubleclick.net.59174.9318.302br.net',
+'ad.doubleclick.net.59176.9318.302br.net',
+'ad.doubleclick.net.59178.9318.302br.net',
+'ad.doubleclick.net.59179.9318.302br.net',
+'ad.doubleclick.net.59188.9318.302br.net',
+'ad.doubleclick.net.59189.9318.302br.net',
+'ad.doubleclick.net.59192.9318.302br.net',
+'ad.doubleclick.net.59194.9318.302br.net',
+'ad.doubleclick.net.59196.9318.302br.net',
+'ad.doubleclick.net.59199.9318.302br.net',
+'ad.doubleclick.net.59204.9318.302br.net',
+'ad.doubleclick.net.59209.9318.302br.net',
+'ad.doubleclick.net.59211.9318.302br.net',
+'ad.doubleclick.net.59220.9318.302br.net',
+'ad.doubleclick.net.59222.9318.302br.net',
+'ad.doubleclick.net.59223.9318.302br.net',
+'ad.doubleclick.net.59224.9318.302br.net',
+'ad.doubleclick.net.59227.9318.302br.net',
+'ad.doubleclick.net.59228.9318.302br.net',
+'ad.doubleclick.net.59229.9318.302br.net',
+'ad.doubleclick.net.59233.9318.302br.net',
+'ad.doubleclick.net.59234.9318.302br.net',
+'ad.doubleclick.net.59236.9318.302br.net',
+'ad.doubleclick.net.59238.9318.302br.net',
+'ad.doubleclick.net.59240.9318.302br.net',
+'ad.doubleclick.net.59242.9318.302br.net',
+'ad.doubleclick.net.59245.9318.302br.net',
+'ad.doubleclick.net.59246.9318.302br.net',
+'ad.doubleclick.net.59251.9318.302br.net',
+'ad.doubleclick.net.59252.9318.302br.net',
+'ad.doubleclick.net.59253.9318.302br.net',
+'ad.doubleclick.net.59255.9318.302br.net',
+'ad.doubleclick.net.59257.9318.302br.net',
+'ad.doubleclick.net.59258.9318.302br.net',
+'ad.doubleclick.net.59260.9318.302br.net',
+'ad.doubleclick.net.59263.9318.302br.net',
+'ad.doubleclick.net.59264.9318.302br.net',
+'ad.doubleclick.net.59265.9318.302br.net',
+'ad.doubleclick.net.59266.9318.302br.net',
+'ad.doubleclick.net.59269.9318.302br.net',
+'ad.doubleclick.net.59270.9318.302br.net',
+'ad.doubleclick.net.59271.9318.302br.net',
+'ad.doubleclick.net.59274.9318.302br.net',
+'ad.doubleclick.net.59279.9318.302br.net',
+'ad.doubleclick.net.59284.9318.302br.net',
+'ad.doubleclick.net.59286.9318.302br.net',
+'ad.doubleclick.net.59287.9318.302br.net',
+'ad.doubleclick.net.59290.9318.302br.net',
+'ad.doubleclick.net.59291.9318.302br.net',
+'ad.doubleclick.net.59295.9318.302br.net',
+'ad.doubleclick.net.59298.9318.302br.net',
+'ad.doubleclick.net.59300.9318.302br.net',
+'ad.doubleclick.net.59301.9318.302br.net',
+'ad.doubleclick.net.59305.9318.302br.net',
+'ad.doubleclick.net.59306.9318.302br.net',
+'ad.doubleclick.net.59311.9318.302br.net',
+'ad.doubleclick.net.59312.9318.302br.net',
+'ad.doubleclick.net.59317.9318.302br.net',
+'ad.doubleclick.net.59319.9318.302br.net',
+'ad.doubleclick.net.59320.9318.302br.net',
+'ad.doubleclick.net.59323.9318.302br.net',
+'ad.doubleclick.net.59324.9318.302br.net',
+'ad.doubleclick.net.59329.9318.302br.net',
+'ad.doubleclick.net.59330.9318.302br.net',
+'ad.doubleclick.net.59331.9318.302br.net',
+'ad.doubleclick.net.59335.9318.302br.net',
+'ad.doubleclick.net.59336.9318.302br.net',
+'ad.doubleclick.net.59337.9318.302br.net',
+'ad.doubleclick.net.59341.9318.302br.net',
+'ad.doubleclick.net.59342.9318.302br.net',
+'ad.doubleclick.net.59347.9318.302br.net',
+'ad.doubleclick.net.59349.9318.302br.net',
+'ad.doubleclick.net.59351.9318.302br.net',
+'ad.doubleclick.net.59356.9318.302br.net',
+'ad.doubleclick.net.59359.9318.302br.net',
+'ad.doubleclick.net.59362.9318.302br.net',
+'ad.doubleclick.net.59363.9318.302br.net',
+'ad.doubleclick.net.59368.9318.302br.net',
+'ad.doubleclick.net.59372.9318.302br.net',
+'ad.doubleclick.net.59374.9318.302br.net',
+'ad.doubleclick.net.59376.9318.302br.net',
+'ad.doubleclick.net.59380.9318.302br.net',
+'ad.doubleclick.net.59382.9318.302br.net',
+'ad.doubleclick.net.59385.9318.302br.net',
+'ad.doubleclick.net.59388.9318.302br.net',
+'ad.doubleclick.net.59390.9318.302br.net',
+'ad.doubleclick.net.59396.9318.302br.net',
+'ad.doubleclick.net.59401.9318.302br.net',
+'ad.doubleclick.net.59402.9318.302br.net',
+'ad.doubleclick.net.59404.9318.302br.net',
+'ad.doubleclick.net.59407.9318.302br.net',
+'ad.doubleclick.net.59410.9318.302br.net',
+'ad.doubleclick.net.59413.9318.302br.net',
+'ad.doubleclick.net.59414.9318.302br.net',
+'ad.doubleclick.net.59415.9318.302br.net',
+'ad.doubleclick.net.59419.9318.302br.net',
+'ad.doubleclick.net.59422.9318.302br.net',
+'ad.doubleclick.net.59423.9318.302br.net',
+'ad.doubleclick.net.59424.9318.302br.net',
+'ad.doubleclick.net.59426.9318.302br.net',
+'ad.doubleclick.net.59427.9318.302br.net',
+'ad.doubleclick.net.59430.9318.302br.net',
+'ad.doubleclick.net.59432.9318.302br.net',
+'ad.doubleclick.net.59436.9318.302br.net',
+'ad.doubleclick.net.59440.9318.302br.net',
+'ad.doubleclick.net.59444.9318.302br.net',
+'ad.doubleclick.net.59446.9318.302br.net',
+'ad.doubleclick.net.59449.9318.302br.net',
+'ad.doubleclick.net.59450.9318.302br.net',
+'ad.doubleclick.net.59453.9318.302br.net',
+'ad.doubleclick.net.59455.9318.302br.net',
+'ad.doubleclick.net.59456.9318.302br.net',
+'ad.doubleclick.net.59457.9318.302br.net',
+'ad.doubleclick.net.59461.9318.302br.net',
+'ad.doubleclick.net.59463.9318.302br.net',
+'ad.doubleclick.net.59465.9318.302br.net',
+'ad.doubleclick.net.59466.9318.302br.net',
+'ad.doubleclick.net.59471.9318.302br.net',
+'ad.doubleclick.net.59472.9318.302br.net',
+'ad.doubleclick.net.59476.9318.302br.net',
+'ad.doubleclick.net.59477.9318.302br.net',
+'ad.doubleclick.net.59481.9318.302br.net',
+'ad.doubleclick.net.59484.9318.302br.net',
+'ad.doubleclick.net.59486.9318.302br.net',
+'ad.doubleclick.net.59489.9318.302br.net',
+'ad.doubleclick.net.59492.9318.302br.net',
+'ad.doubleclick.net.59494.9318.302br.net',
+'ad.doubleclick.net.59495.9318.302br.net',
+'ad.doubleclick.net.59496.9318.302br.net',
+'ad.doubleclick.net.59499.9318.302br.net',
+'ad.doubleclick.net.59502.9318.302br.net',
+'ad.doubleclick.net.59503.9318.302br.net',
+'ad.doubleclick.net.59504.9318.302br.net',
+'ad.doubleclick.net.59509.9318.302br.net',
+'ad.doubleclick.net.59510.9318.302br.net',
+'ad.doubleclick.net.59514.9318.302br.net',
+'ad.doubleclick.net.59517.9318.302br.net',
+'ad.doubleclick.net.59520.9318.302br.net',
+'ad.doubleclick.net.59525.9318.302br.net',
+'ad.doubleclick.net.59527.9318.302br.net',
+'ad.doubleclick.net.59531.9318.302br.net',
+'ad.doubleclick.net.59536.9318.302br.net',
+'ad.doubleclick.net.59537.9318.302br.net',
+'ad.doubleclick.net.59542.9318.302br.net',
+'ad.doubleclick.net.59543.9318.302br.net',
+'ad.doubleclick.net.59544.9318.302br.net',
+'ad.doubleclick.net.59548.9318.302br.net',
+'ad.doubleclick.net.59554.9318.302br.net',
+'ad.doubleclick.net.59555.9318.302br.net',
+'ad.doubleclick.net.59556.9318.302br.net',
+'ad.doubleclick.net.59558.9318.302br.net',
+'ad.doubleclick.net.59559.9318.302br.net',
+'ad.doubleclick.net.59561.9318.302br.net',
+'ad.doubleclick.net.59562.9318.302br.net',
+'ad.doubleclick.net.59565.9318.302br.net',
+'ad.doubleclick.net.59567.9318.302br.net',
+'ad.doubleclick.net.59576.9318.302br.net',
+'ad.doubleclick.net.59577.9318.302br.net',
+'ad.doubleclick.net.59578.9318.302br.net',
+'ad.doubleclick.net.59580.9318.302br.net',
+'ad.doubleclick.net.59581.9318.302br.net',
+'ad.doubleclick.net.59583.9318.302br.net',
+'ad.doubleclick.net.59586.9318.302br.net',
+'ad.doubleclick.net.59589.9318.302br.net',
+'ad.doubleclick.net.59598.9318.302br.net',
+'ad.doubleclick.net.59601.9318.302br.net',
+'ad.doubleclick.net.59604.9318.302br.net',
+'ad.doubleclick.net.59611.9318.302br.net',
+'ad.doubleclick.net.59613.9318.302br.net',
+'ad.doubleclick.net.59616.9318.302br.net',
+'ad.doubleclick.net.59619.9318.302br.net',
+'ad.doubleclick.net.59622.9318.302br.net',
+'ad.doubleclick.net.59625.9318.302br.net',
+'ad.doubleclick.net.59634.9318.302br.net',
+'ad.doubleclick.net.59637.9318.302br.net',
+'ad.doubleclick.net.59640.9318.302br.net',
+'ad.doubleclick.net.59646.9318.302br.net',
+'ad.doubleclick.net.59652.9318.302br.net',
+'ad.doubleclick.net.59655.9318.302br.net',
+'ad.doubleclick.net.59661.9318.302br.net',
+'ad.doubleclick.net.59668.9318.302br.net',
+'ad.doubleclick.net.59670.9318.302br.net',
+'ad.doubleclick.net.59679.9318.302br.net',
+'ad.doubleclick.net.59682.9318.302br.net',
+'ad.doubleclick.net.59685.9318.302br.net',
+'ad.doubleclick.net.59686.9318.302br.net',
+'ad.doubleclick.net.59688.9318.302br.net',
+'ad.doubleclick.net.59689.9318.302br.net',
+'ad.doubleclick.net.59691.9318.302br.net',
+'ad.doubleclick.net.59694.9318.302br.net',
+'ad.doubleclick.net.59697.9318.302br.net',
+'ad.doubleclick.net.59700.9318.302br.net',
+'ad.doubleclick.net.59704.9318.302br.net',
+'ad.doubleclick.net.59706.9318.302br.net',
+'ad.doubleclick.net.59709.9318.302br.net',
+'ad.doubleclick.net.59712.9318.302br.net',
+'ad.doubleclick.net.59719.9318.302br.net',
+'ad.doubleclick.net.59721.9318.302br.net',
+'ad.doubleclick.net.59727.9318.302br.net',
+'ad.doubleclick.net.59730.9318.302br.net',
+'ad.doubleclick.net.59731.9318.302br.net',
+'ad.doubleclick.net.59733.9318.302br.net',
+'ad.doubleclick.net.59734.9318.302br.net',
+'ad.doubleclick.net.59736.9318.302br.net',
+'ad.doubleclick.net.59739.9318.302br.net',
+'ad.doubleclick.net.59742.9318.302br.net',
+'ad.doubleclick.net.59746.9318.302br.net',
+'ad.doubleclick.net.59748.9318.302br.net',
+'ad.doubleclick.net.59751.9318.302br.net',
+'ad.doubleclick.net.59755.9318.302br.net',
+'ad.doubleclick.net.59757.9318.302br.net',
+'ad.doubleclick.net.59764.9318.302br.net',
+'ad.doubleclick.net.59766.9318.302br.net',
+'ad.doubleclick.net.59769.9318.302br.net',
+'ad.doubleclick.net.59772.9318.302br.net',
+'ad.doubleclick.net.59776.9318.302br.net',
+'ad.doubleclick.net.59778.9318.302br.net',
+'ad.doubleclick.net.59781.9318.302br.net',
+'ad.doubleclick.net.59784.9318.302br.net',
+'ad.doubleclick.net.59790.9318.302br.net',
+'ad.doubleclick.net.59793.9318.302br.net',
+'ad.doubleclick.net.59794.9318.302br.net',
+'ad.doubleclick.net.59796.9318.302br.net',
+'ad.doubleclick.net.59799.9318.302br.net',
+'ad.doubleclick.net.59800.9318.302br.net',
+'ad.doubleclick.net.59802.9318.302br.net',
+'ad.doubleclick.net.59806.9318.302br.net',
+'ad.doubleclick.net.59808.9318.302br.net',
+'ad.doubleclick.net.59815.9318.302br.net',
+'ad.doubleclick.net.59817.9318.302br.net',
+'ad.doubleclick.net.59820.9318.302br.net',
+'ad.doubleclick.net.59821.9318.302br.net',
+'ad.doubleclick.net.59823.9318.302br.net',
+'ad.doubleclick.net.59824.9318.302br.net',
+'ad.doubleclick.net.59826.9318.302br.net',
+'ad.doubleclick.net.59827.9318.302br.net',
+'ad.doubleclick.net.59829.9318.302br.net',
+'ad.doubleclick.net.59833.9318.302br.net',
+'ad.doubleclick.net.59835.9318.302br.net',
+'ad.doubleclick.net.59839.9318.302br.net',
+'ad.doubleclick.net.59841.9318.302br.net',
+'ad.doubleclick.net.59842.9318.302br.net',
+'ad.doubleclick.net.59844.9318.302br.net',
+'ad.doubleclick.net.59845.9318.302br.net',
+'ad.doubleclick.net.59847.9318.302br.net',
+'ad.doubleclick.net.59851.9318.302br.net',
+'ad.doubleclick.net.59853.9318.302br.net',
+'ad.doubleclick.net.59862.9318.302br.net',
+'ad.doubleclick.net.59866.9318.302br.net',
+'ad.doubleclick.net.59868.9318.302br.net',
+'ad.doubleclick.net.59877.9318.302br.net',
+'ad.doubleclick.net.59886.9318.302br.net',
+'ad.doubleclick.net.59887.9318.302br.net',
+'ad.doubleclick.net.59889.9318.302br.net',
+'ad.doubleclick.net.59892.9318.302br.net',
+'ad.doubleclick.net.59895.9318.302br.net',
+'ad.doubleclick.net.59896.9318.302br.net',
+'ad.doubleclick.net.59898.9318.302br.net',
+'ad.doubleclick.net.59901.9318.302br.net',
+'ad.doubleclick.net.59902.9318.302br.net',
+'ad.doubleclick.net.59904.9318.302br.net',
+'ad.doubleclick.net.59905.9318.302br.net',
+'ad.doubleclick.net.59907.9318.302br.net',
+'ad.doubleclick.net.59910.9318.302br.net',
+'ad.doubleclick.net.59913.9318.302br.net',
+'ad.doubleclick.net.59916.9318.302br.net',
+'ad.doubleclick.net.59922.9318.302br.net',
+'ad.doubleclick.net.59925.9318.302br.net',
+'ad.doubleclick.net.59928.9318.302br.net',
+'ad.doubleclick.net.59931.9318.302br.net',
+'ad.doubleclick.net.59938.9318.302br.net',
+'ad.doubleclick.net.59940.9318.302br.net',
+'ad.doubleclick.net.59946.9318.302br.net',
+'ad.doubleclick.net.59949.9318.302br.net',
+'ad.doubleclick.net.59952.9318.302br.net',
+'ad.doubleclick.net.59956.9318.302br.net',
+'ad.doubleclick.net.59958.9318.302br.net',
+'ad.doubleclick.net.59959.9318.302br.net',
+'ad.doubleclick.net.59961.9318.302br.net',
+'ad.doubleclick.net.59964.9318.302br.net',
+'ad.doubleclick.net.59968.9318.302br.net',
+'ad.doubleclick.net.59970.9318.302br.net',
+'ad.doubleclick.net.59976.9318.302br.net',
+'ad.doubleclick.net.59977.9318.302br.net',
+'ad.doubleclick.net.59979.9318.302br.net',
+'ad.doubleclick.net.59980.9318.302br.net',
+'ad.doubleclick.net.59982.9318.302br.net',
+'ad.doubleclick.net.59983.9318.302br.net',
+'ad.doubleclick.net.59985.9318.302br.net',
+'ad.doubleclick.net.59986.9318.302br.net',
+'ad.doubleclick.net.59988.9318.302br.net',
+'ad.doubleclick.net.59991.9318.302br.net',
+'ad.doubleclick.net.59994.9318.302br.net',
+'ad.doubleclick.net.60000.9318.302br.net',
+'ad.doubleclick.net.60003.9318.302br.net',
+'ad.doubleclick.net.60006.9318.302br.net',
+'ad.doubleclick.net.60012.9318.302br.net',
+'ad.doubleclick.net.60013.9318.302br.net',
+'ad.doubleclick.net.60015.9318.302br.net',
+'ad.doubleclick.net.60019.9318.302br.net',
+'ad.doubleclick.net.60021.9318.302br.net',
+'ad.doubleclick.net.60024.9318.302br.net',
+'ad.doubleclick.net.60027.9318.302br.net',
+'ad.doubleclick.net.60031.9318.302br.net',
+'ad.doubleclick.net.60033.9318.302br.net',
+'ad.doubleclick.net.60039.9318.302br.net',
+'ad.doubleclick.net.60040.9318.302br.net',
+'ad.doubleclick.net.60042.9318.302br.net',
+'ad.doubleclick.net.60054.9318.302br.net',
+'ad.doubleclick.net.60057.9318.302br.net',
+'ad.doubleclick.net.60060.9318.302br.net',
+'ad.doubleclick.net.60061.9318.302br.net',
+'ad.doubleclick.net.60063.9318.302br.net',
+'ad.doubleclick.net.60070.9318.302br.net',
+'ad.doubleclick.net.60072.9318.302br.net',
+'ad.doubleclick.net.60075.9318.302br.net',
+'ad.doubleclick.net.60078.9318.302br.net',
+'ad.doubleclick.net.60084.9318.302br.net',
+'ad.doubleclick.net.60085.9318.302br.net',
+'ad.doubleclick.net.60087.9318.302br.net',
+'ad.doubleclick.net.60090.9318.302br.net',
+'ad.doubleclick.net.60099.9318.302br.net',
+'ad.doubleclick.net.60102.9318.302br.net',
+'ad.doubleclick.net.60108.9318.302br.net',
+'ad.doubleclick.net.60112.9318.302br.net',
+'ad.doubleclick.net.60114.9318.302br.net',
+'ad.doubleclick.net.60120.9318.302br.net',
+'ad.doubleclick.net.60123.9318.302br.net',
+'ad.doubleclick.net.60126.9318.302br.net',
+'ad.doubleclick.net.60129.9318.302br.net',
+'ad.doubleclick.net.60132.9318.302br.net',
+'ad.doubleclick.net.60138.9318.302br.net',
+'ad.doubleclick.net.60141.9318.302br.net',
+'ad.doubleclick.net.60144.9318.302br.net',
+'ad.doubleclick.net.60147.9318.302br.net',
+'ad.doubleclick.net.60150.9318.302br.net',
+'ad.doubleclick.net.60156.9318.302br.net',
+'ad.doubleclick.net.60159.9318.302br.net',
+'ad.doubleclick.net.60165.9318.302br.net',
+'ad.doubleclick.net.60166.9318.302br.net',
+'ad.doubleclick.net.60168.9318.302br.net',
+'ad.doubleclick.net.60169.9318.302br.net',
+'ad.doubleclick.net.60171.9318.302br.net',
+'ad.doubleclick.net.60174.9318.302br.net',
+'ad.doubleclick.net.60175.9318.302br.net',
+'ad.doubleclick.net.60177.9318.302br.net',
+'ad.doubleclick.net.60183.9318.302br.net',
+'ad.doubleclick.net.60186.9318.302br.net',
+'ad.doubleclick.net.60192.9318.302br.net',
+'ad.doubleclick.net.60195.9318.302br.net',
+'ad.doubleclick.net.60198.9318.302br.net',
+'ad.doubleclick.net.60201.9318.302br.net',
+'ad.doubleclick.net.60204.9318.302br.net',
+'ad.doubleclick.net.60205.9318.302br.net',
+'ad.doubleclick.net.60207.9318.302br.net',
+'ad.doubleclick.net.60208.9318.302br.net',
+'ad.doubleclick.net.60210.9318.302br.net',
+'ad.doubleclick.net.60213.9318.302br.net',
+'ad.doubleclick.net.60219.9318.302br.net',
+'ad.doubleclick.net.60222.9318.302br.net',
+'ad.doubleclick.net.60228.9318.302br.net',
+'ad.doubleclick.net.60231.9318.302br.net',
+'ad.doubleclick.net.60232.9318.302br.net',
+'ad.doubleclick.net.60234.9318.302br.net',
+'ad.doubleclick.net.60235.9318.302br.net',
+'ad.doubleclick.net.60237.9318.302br.net',
+'ad.doubleclick.net.60238.9318.302br.net',
+'ad.doubleclick.net.60240.9318.302br.net',
+'ad.doubleclick.net.60243.9318.302br.net',
+'ad.doubleclick.net.60246.9318.302br.net',
+'ad.doubleclick.net.60249.9318.302br.net',
+'ad.doubleclick.net.60253.9318.302br.net',
+'ad.doubleclick.net.60255.9318.302br.net',
+'ad.doubleclick.net.60261.9318.302br.net',
+'ad.doubleclick.net.60265.9318.302br.net',
+'ad.doubleclick.net.60267.9318.302br.net',
+'ad.doubleclick.net.60268.9318.302br.net',
+'ad.doubleclick.net.60270.9318.302br.net',
+'ad.doubleclick.net.60273.9318.302br.net',
+'ad.doubleclick.net.60276.9318.302br.net',
+'ad.doubleclick.net.60277.9318.302br.net',
+'ad.doubleclick.net.60279.9318.302br.net',
+'ad.doubleclick.net.60286.9318.302br.net',
+'ad.doubleclick.net.60288.9318.302br.net',
+'ad.doubleclick.net.60291.9318.302br.net',
+'ad.doubleclick.net.60294.9318.302br.net',
+'ad.doubleclick.net.60295.9318.302br.net',
+'ad.doubleclick.net.60297.9318.302br.net',
+'ad.doubleclick.net.60309.9318.302br.net',
+'ad.doubleclick.net.60310.9318.302br.net',
+'ad.doubleclick.net.60312.9318.302br.net',
+'ad.doubleclick.net.60313.9318.302br.net',
+'ad.doubleclick.net.60315.9318.302br.net',
+'ad.doubleclick.net.60318.9318.302br.net',
+'ad.doubleclick.net.60321.9318.302br.net',
+'ad.doubleclick.net.60324.9318.302br.net',
+'ad.doubleclick.net.60333.9318.302br.net',
+'ad.doubleclick.net.60346.9318.302br.net',
+'ad.doubleclick.net.60348.9318.302br.net',
+'ad.doubleclick.net.60349.9318.302br.net',
+'ad.doubleclick.net.60351.9318.302br.net',
+'ad.doubleclick.net.60354.9318.302br.net',
+'ad.doubleclick.net.60360.9318.302br.net',
+'ad.doubleclick.net.60361.9318.302br.net',
+'ad.doubleclick.net.60363.9318.302br.net',
+'ad.doubleclick.net.60366.9318.302br.net',
+'ad.doubleclick.net.60369.9318.302br.net',
+'ad.doubleclick.net.60373.9156.302br.net',
+'ad.doubleclick.net.60376.9156.302br.net',
+'ad.doubleclick.net.60379.9156.302br.net',
+'ad.doubleclick.net.60394.9187.302br.net',
+'ad.doubleclick.net.60397.9187.302br.net',
+'ad.doubleclick.net.60402.9424.302br.net',
+'ad.doubleclick.net.60405.9424.302br.net',
+'ad.doubleclick.net.60408.9424.302br.net',
+'ad.doubleclick.net.60411.9424.302br.net',
+'ad.doubleclick.net.60421.9112.302br.net',
+'ad.doubleclick.net.60424.9112.302br.net',
+'ad.doubleclick.net.60427.9112.302br.net',
+'ad.doubleclick.net.60520.9279.302br.net',
+'ad.doubleclick.net.60521.9279.302br.net',
+'ad.doubleclick.net.60523.9279.302br.net',
+'ad.doubleclick.net.60524.9279.302br.net',
+'ad.doubleclick.net.60526.9279.302br.net',
+'ad.doubleclick.net.60527.9279.302br.net',
+'ad.doubleclick.net.60529.9279.302br.net',
+'ad.doubleclick.net.60530.9279.302br.net',
+'ad.doubleclick.net.60531.9279.302br.net',
+'ad.doubleclick.net.60532.9279.302br.net',
+'ad.doubleclick.net.60533.9279.302br.net',
+'ad.doubleclick.net.60535.9279.302br.net',
+'ad.doubleclick.net.60536.9279.302br.net',
+'ad.doubleclick.net.60538.9279.302br.net',
+'ad.doubleclick.net.60539.9279.302br.net',
+'ad.doubleclick.net.60541.9279.302br.net',
+'ad.doubleclick.net.60542.9279.302br.net',
+'ad.doubleclick.net.60543.9279.302br.net',
+'ad.doubleclick.net.60544.9279.302br.net',
+'ad.doubleclick.net.60545.9279.302br.net',
+'ad.doubleclick.net.60546.9279.302br.net',
+'ad.doubleclick.net.60547.9279.302br.net',
+'ad.doubleclick.net.60548.9279.302br.net',
+'ad.doubleclick.net.60550.9279.302br.net',
+'ad.doubleclick.net.60551.9279.302br.net',
+'ad.doubleclick.net.60553.9279.302br.net',
+'ad.doubleclick.net.60554.9279.302br.net',
+'ad.doubleclick.net.60555.9436.302br.net',
+'ad.doubleclick.net.60557.9436.302br.net',
+'ad.doubleclick.net.60560.9436.302br.net',
+'ad.doubleclick.net.60561.9436.302br.net',
+'ad.doubleclick.net.60563.9436.302br.net',
+'ad.doubleclick.net.60566.9436.302br.net',
+'ad.doubleclick.net.60567.9436.302br.net',
+'ad.doubleclick.net.60569.9436.302br.net',
+'ad.doubleclick.net.60572.9436.302br.net',
+'ad.doubleclick.net.60575.9436.302br.net',
+'ad.doubleclick.net.60576.9436.302br.net',
+'ad.doubleclick.net.60578.9436.302br.net',
+'ad.doubleclick.net.60581.9436.302br.net',
+'ad.doubleclick.net.60584.9436.302br.net',
+'ad.doubleclick.net.60587.9436.302br.net',
+'ad.doubleclick.net.60590.9436.302br.net',
+'ad.doubleclick.net.60591.9436.302br.net',
+'ad.doubleclick.net.60593.9436.302br.net',
+'ad.doubleclick.net.60596.9436.302br.net',
+'ad.doubleclick.net.60597.9436.302br.net',
+'ad.doubleclick.net.60599.9436.302br.net',
+'ad.doubleclick.net.60600.9436.302br.net',
+'ad.doubleclick.net.60602.9436.302br.net',
+'ad.doubleclick.net.60603.9436.302br.net',
+'ad.doubleclick.net.60605.9436.302br.net',
+'ad.doubleclick.net.60608.9436.302br.net',
+'ad.doubleclick.net.60622.9439.302br.net',
+'ad.doubleclick.net.60623.9439.302br.net',
+'ad.doubleclick.net.60625.9439.302br.net',
+'ad.doubleclick.net.60628.9439.302br.net',
+'ad.doubleclick.net.60631.9439.302br.net',
+'ad.doubleclick.net.60632.9439.302br.net',
+'ad.doubleclick.net.60646.9250.302br.net',
+'ad.doubleclick.net.60649.9250.302br.net',
+'ad.doubleclick.net.60652.9250.302br.net',
+'ad.doubleclick.net.60655.9250.302br.net',
+'ad.doubleclick.net.60658.9250.302br.net',
+'ad.doubleclick.net.60661.9250.302br.net',
+'ad.doubleclick.net.60664.9250.302br.net',
+'ad.doubleclick.net.60667.9250.302br.net',
+'ad.doubleclick.net.60670.9250.302br.net',
+'ad.doubleclick.net.60673.9250.302br.net',
+'ad.doubleclick.net.60676.9250.302br.net',
+'ad.doubleclick.net.60679.9250.302br.net',
+'ad.doubleclick.net.60682.9250.302br.net',
+'ad.doubleclick.net.60685.9250.302br.net',
+'ad.doubleclick.net.60688.9250.302br.net',
+'ad.doubleclick.net.60691.9250.302br.net',
+'ad.doubleclick.net.60693.9336.302br.net',
+'ad.doubleclick.net.60696.9336.302br.net',
+'ad.doubleclick.net.60699.9336.302br.net',
+'ad.doubleclick.net.60702.9336.302br.net',
+'ad.doubleclick.net.60705.9336.302br.net',
+'ad.doubleclick.net.60708.9336.302br.net',
+'ad.doubleclick.net.60711.9336.302br.net',
+'ad.doubleclick.net.60728.9336.302br.net',
+'ad.doubleclick.net.60729.9336.302br.net',
+'ad.doubleclick.net.60730.9336.302br.net',
+'ad.doubleclick.net.60732.9336.302br.net',
+'ad.doubleclick.net.60733.9336.302br.net',
+'ad.doubleclick.net.60735.9336.302br.net',
+'ad.doubleclick.net.60736.9336.302br.net',
+'ad.doubleclick.net.60738.9336.302br.net',
+'ad.doubleclick.net.60739.9336.302br.net',
+'ad.doubleclick.net.60741.9336.302br.net',
+'ad.doubleclick.net.60742.9336.302br.net',
+'ad.doubleclick.net.60744.9336.302br.net',
+'ad.doubleclick.net.60745.9336.302br.net',
+'ad.doubleclick.net.60747.9336.302br.net',
+'ad.doubleclick.net.60750.9336.302br.net',
+'ad.doubleclick.net.60753.9336.302br.net',
+'ad.doubleclick.net.60756.9336.302br.net',
+'ad.doubleclick.net.60757.9336.302br.net',
+'ad.doubleclick.net.60759.9336.302br.net',
+'ad.doubleclick.net.60762.9336.302br.net',
+'ad.doubleclick.net.60763.9336.302br.net',
+'ad.doubleclick.net.60765.9336.302br.net',
+'ad.doubleclick.net.60768.9336.302br.net',
+'ad.doubleclick.net.60771.9336.302br.net',
+'ad.doubleclick.net.60774.9336.302br.net',
+'ad.doubleclick.net.60777.9336.302br.net',
+'ad.doubleclick.net.60780.9336.302br.net',
+'ad.doubleclick.net.60781.9336.302br.net',
+'ad.doubleclick.net.60783.9336.302br.net',
+'ad.doubleclick.net.60784.9336.302br.net',
+'ad.doubleclick.net.60786.9336.302br.net',
+'ad.doubleclick.net.60789.9336.302br.net',
+'ad.doubleclick.net.60792.9336.302br.net',
+'ad.doubleclick.net.60795.9336.302br.net',
+'ad.doubleclick.net.60798.9336.302br.net',
+'ad.doubleclick.net.60800.9336.302br.net',
+'ad.doubleclick.net.60801.9336.302br.net',
+'ad.doubleclick.net.60804.9336.302br.net',
+'ad.doubleclick.net.60805.9336.302br.net',
+'ad.doubleclick.net.60807.9336.302br.net',
+'ad.doubleclick.net.60808.9336.302br.net',
+'ad.doubleclick.net.60810.9336.302br.net',
+'ad.doubleclick.net.60811.9336.302br.net',
+'ad.doubleclick.net.60813.9336.302br.net',
+'ad.doubleclick.net.60814.9336.302br.net',
+'ad.doubleclick.net.60816.9336.302br.net',
+'ad.doubleclick.net.60819.9336.302br.net',
+'ad.doubleclick.net.60822.9336.302br.net',
+'ad.doubleclick.net.60824.9336.302br.net',
+'ad.doubleclick.net.60825.9336.302br.net',
+'ad.doubleclick.net.60826.9336.302br.net',
+'ad.doubleclick.net.60828.9336.302br.net',
+'ad.doubleclick.net.60829.9336.302br.net',
+'ad.doubleclick.net.60831.9336.302br.net',
+'ad.doubleclick.net.60834.9336.302br.net',
+'ad.doubleclick.net.60837.9336.302br.net',
+'ad.doubleclick.net.60840.9336.302br.net',
+'ad.doubleclick.net.60843.9336.302br.net',
+'ad.doubleclick.net.60846.9336.302br.net',
+'ad.doubleclick.net.60847.9336.302br.net',
+'ad.doubleclick.net.60849.9336.302br.net',
+'ad.doubleclick.net.60850.9336.302br.net',
+'ad.doubleclick.net.60852.9336.302br.net',
+'ad.doubleclick.net.60853.9336.302br.net',
+'ad.doubleclick.net.60855.9336.302br.net',
+'ad.doubleclick.net.60858.9336.302br.net',
+'ad.doubleclick.net.60861.9336.302br.net',
+'ad.doubleclick.net.60864.9336.302br.net',
+'ad.doubleclick.net.60867.9336.302br.net',
+'ad.doubleclick.net.60870.9336.302br.net',
+'ad.doubleclick.net.60873.9336.302br.net',
+'ad.doubleclick.net.60874.9336.302br.net',
+'ad.doubleclick.net.60876.9336.302br.net',
+'ad.doubleclick.net.60879.9336.302br.net',
+'ad.doubleclick.net.60888.9336.302br.net',
+'ad.doubleclick.net.60891.9336.302br.net',
+'ad.doubleclick.net.60897.9336.302br.net',
+'ad.doubleclick.net.60899.9336.302br.net',
+'ad.doubleclick.net.60900.9336.302br.net',
+'ad.doubleclick.net.60901.9336.302br.net',
+'ad.doubleclick.net.60902.9336.302br.net',
+'ad.doubleclick.net.60903.9336.302br.net',
+'ad.doubleclick.net.60904.9336.302br.net',
+'ad.doubleclick.net.60905.9336.302br.net',
+'ad.doubleclick.net.60906.9336.302br.net',
+'ad.doubleclick.net.60907.9336.302br.net',
+'ad.doubleclick.net.60909.9336.302br.net',
+'ad.doubleclick.net.60910.9336.302br.net',
+'ad.doubleclick.net.60911.9336.302br.net',
+'ad.doubleclick.net.60912.9336.302br.net',
+'ad.doubleclick.net.60913.9336.302br.net',
+'ad.doubleclick.net.60914.9336.302br.net',
+'ad.doubleclick.net.60915.9336.302br.net',
+'ad.doubleclick.net.60916.9336.302br.net',
+'ad.doubleclick.net.60918.9336.302br.net',
+'ad.doubleclick.net.60921.9336.302br.net',
+'ad.doubleclick.net.60924.9336.302br.net',
+'ad.doubleclick.net.60927.9336.302br.net',
+'ad.doubleclick.net.60928.9336.302br.net',
+'ad.doubleclick.net.60930.9336.302br.net',
+'ad.doubleclick.net.60933.9336.302br.net',
+'ad.doubleclick.net.60934.9336.302br.net',
+'ad.doubleclick.net.60936.9336.302br.net',
+'ad.doubleclick.net.60937.9336.302br.net',
+'ad.doubleclick.net.60939.9336.302br.net',
+'ad.doubleclick.net.60942.9336.302br.net',
+'ad.doubleclick.net.60943.9336.302br.net',
+'ad.doubleclick.net.60945.9336.302br.net',
+'ad.doubleclick.net.60948.9336.302br.net',
+'ad.doubleclick.net.60951.9336.302br.net',
+'ad.doubleclick.net.60954.9336.302br.net',
+'ad.doubleclick.net.60955.9336.302br.net',
+'ad.doubleclick.net.60957.9336.302br.net',
+'ad.doubleclick.net.60958.9336.302br.net',
+'ad.doubleclick.net.60960.9336.302br.net',
+'ad.doubleclick.net.60961.9336.302br.net',
+'ad.doubleclick.net.60963.9336.302br.net',
+'ad.doubleclick.net.60966.9336.302br.net',
+'ad.doubleclick.net.60967.9336.302br.net',
+'ad.doubleclick.net.60969.9336.302br.net',
+'ad.doubleclick.net.60972.9336.302br.net',
+'ad.doubleclick.net.60975.9336.302br.net',
+'ad.doubleclick.net.60976.9336.302br.net',
+'ad.doubleclick.net.60977.9336.302br.net',
+'ad.doubleclick.net.60978.9336.302br.net',
+'ad.doubleclick.net.60979.9336.302br.net',
+'ad.doubleclick.net.60981.9336.302br.net',
+'ad.doubleclick.net.60982.9336.302br.net',
+'ad.doubleclick.net.60983.9336.302br.net',
+'ad.doubleclick.net.60984.9336.302br.net',
+'ad.doubleclick.net.60985.9336.302br.net',
+'ad.doubleclick.net.60987.9336.302br.net',
+'ad.doubleclick.net.60990.9336.302br.net',
+'ad.doubleclick.net.60993.9336.302br.net',
+'ad.doubleclick.net.60996.9336.302br.net',
+'ad.doubleclick.net.60997.9336.302br.net',
+'ad.doubleclick.net.60999.9336.302br.net',
+'ad.doubleclick.net.6100.302br.net',
+'ad.doubleclick.net.61000.9336.302br.net',
+'ad.doubleclick.net.61002.9336.302br.net',
+'ad.doubleclick.net.61003.9336.302br.net',
+'ad.doubleclick.net.61005.9336.302br.net',
+'ad.doubleclick.net.61008.9336.302br.net',
+'ad.doubleclick.net.61009.9336.302br.net',
+'ad.doubleclick.net.61011.9336.302br.net',
+'ad.doubleclick.net.61014.9336.302br.net',
+'ad.doubleclick.net.61017.9336.302br.net',
+'ad.doubleclick.net.61018.9336.302br.net',
+'ad.doubleclick.net.61020.9336.302br.net',
+'ad.doubleclick.net.61021.9336.302br.net',
+'ad.doubleclick.net.61023.9336.302br.net',
+'ad.doubleclick.net.61024.9336.302br.net',
+'ad.doubleclick.net.61026.9336.302br.net',
+'ad.doubleclick.net.61029.9336.302br.net',
+'ad.doubleclick.net.61032.9336.302br.net',
+'ad.doubleclick.net.61066.9293.302br.net',
+'ad.doubleclick.net.61067.9293.302br.net',
+'ad.doubleclick.net.61069.9293.302br.net',
+'ad.doubleclick.net.61070.9293.302br.net',
+'ad.doubleclick.net.61072.9293.302br.net',
+'ad.doubleclick.net.61073.9293.302br.net',
+'ad.doubleclick.net.61074.9293.302br.net',
+'ad.doubleclick.net.61075.9293.302br.net',
+'ad.doubleclick.net.61076.9293.302br.net',
+'ad.doubleclick.net.61078.9294.302br.net',
+'ad.doubleclick.net.61079.9294.302br.net',
+'ad.doubleclick.net.61081.9294.302br.net',
+'ad.doubleclick.net.61082.9294.302br.net',
+'ad.doubleclick.net.61083.9294.302br.net',
+'ad.doubleclick.net.61084.9294.302br.net',
+'ad.doubleclick.net.61085.9294.302br.net',
+'ad.doubleclick.net.61086.9294.302br.net',
+'ad.doubleclick.net.61087.9294.302br.net',
+'ad.doubleclick.net.61088.9294.302br.net',
+'ad.doubleclick.net.61095.9187.302br.net',
+'ad.doubleclick.net.61097.9187.302br.net',
+'ad.doubleclick.net.61098.9330.302br.net',
+'ad.doubleclick.net.61100.9330.302br.net',
+'ad.doubleclick.net.61101.9330.302br.net',
+'ad.doubleclick.net.61103.9330.302br.net',
+'ad.doubleclick.net.61107.9450.302br.net',
+'ad.doubleclick.net.61108.9450.302br.net',
+'ad.doubleclick.net.61109.9450.302br.net',
+'ad.doubleclick.net.61110.9450.302br.net',
+'ad.doubleclick.net.61111.9450.302br.net',
+'ad.doubleclick.net.61112.9450.302br.net',
+'ad.doubleclick.net.61113.9450.302br.net',
+'ad.doubleclick.net.61114.9450.302br.net',
+'ad.doubleclick.net.61127.9450.302br.net',
+'ad.doubleclick.net.61128.9450.302br.net',
+'ad.doubleclick.net.61129.9450.302br.net',
+'ad.doubleclick.net.61130.9450.302br.net',
+'ad.doubleclick.net.61131.9450.302br.net',
+'ad.doubleclick.net.61132.9450.302br.net',
+'ad.doubleclick.net.61133.9450.302br.net',
+'ad.doubleclick.net.61134.9450.302br.net',
+'ad.doubleclick.net.61135.9450.302br.net',
+'ad.doubleclick.net.61136.9450.302br.net',
+'ad.doubleclick.net.61137.9450.302br.net',
+'ad.doubleclick.net.61138.9450.302br.net',
+'ad.doubleclick.net.61139.9450.302br.net',
+'ad.doubleclick.net.61140.9450.302br.net',
+'ad.doubleclick.net.61141.9450.302br.net',
+'ad.doubleclick.net.61142.9450.302br.net',
+'ad.doubleclick.net.61144.9450.302br.net',
+'ad.doubleclick.net.61148.9450.302br.net',
+'ad.doubleclick.net.61152.9450.302br.net',
+'ad.doubleclick.net.61154.9450.302br.net',
+'ad.doubleclick.net.61156.9450.302br.net',
+'ad.doubleclick.net.61158.9450.302br.net',
+'ad.doubleclick.net.61160.9450.302br.net',
+'ad.doubleclick.net.61162.9450.302br.net',
+'ad.doubleclick.net.61165.9450.302br.net',
+'ad.doubleclick.net.61166.9450.302br.net',
+'ad.doubleclick.net.61170.9450.302br.net',
+'ad.doubleclick.net.61171.9450.302br.net',
+'ad.doubleclick.net.61172.9450.302br.net',
+'ad.doubleclick.net.61174.9450.302br.net',
+'ad.doubleclick.net.61176.9450.302br.net',
+'ad.doubleclick.net.61179.9450.302br.net',
+'ad.doubleclick.net.61180.9450.302br.net',
+'ad.doubleclick.net.61181.9450.302br.net',
+'ad.doubleclick.net.61182.9450.302br.net',
+'ad.doubleclick.net.61196.9450.302br.net',
+'ad.doubleclick.net.61200.9450.302br.net',
+'ad.doubleclick.net.61202.9450.302br.net',
+'ad.doubleclick.net.61203.9450.302br.net',
+'ad.doubleclick.net.61204.9450.302br.net',
+'ad.doubleclick.net.61205.9450.302br.net',
+'ad.doubleclick.net.61206.9450.302br.net',
+'ad.doubleclick.net.61236.9454.302br.net',
+'ad.doubleclick.net.61238.9454.302br.net',
+'ad.doubleclick.net.61253.9401.302br.net',
+'ad.doubleclick.net.61255.9401.302br.net',
+'ad.doubleclick.net.61257.9401.302br.net',
+'ad.doubleclick.net.61261.9401.302br.net',
+'ad.doubleclick.net.61263.9401.302br.net',
+'ad.doubleclick.net.61265.9401.302br.net',
+'ad.doubleclick.net.61269.9401.302br.net',
+'ad.doubleclick.net.61271.9401.302br.net',
+'ad.doubleclick.net.61281.9290.302br.net',
+'ad.doubleclick.net.61282.9290.302br.net',
+'ad.doubleclick.net.61286.9362.302br.net',
+'ad.doubleclick.net.61287.9362.302br.net',
+'ad.doubleclick.net.61288.9362.302br.net',
+'ad.doubleclick.net.61289.9362.302br.net',
+'ad.doubleclick.net.61290.9362.302br.net',
+'ad.doubleclick.net.61291.9362.302br.net',
+'ad.doubleclick.net.61293.9303.302br.net',
+'ad.doubleclick.net.61294.9303.302br.net',
+'ad.doubleclick.net.61296.9303.302br.net',
+'ad.doubleclick.net.61297.9303.302br.net',
+'ad.doubleclick.net.61299.9303.302br.net',
+'ad.doubleclick.net.61320.9454.302br.net',
+'ad.doubleclick.net.61321.9454.302br.net',
+'ad.doubleclick.net.61322.9454.302br.net',
+'ad.doubleclick.net.61323.9454.302br.net',
+'ad.doubleclick.net.61324.9454.302br.net',
+'ad.doubleclick.net.61432.9465.302br.net',
+'ad.doubleclick.net.61435.9465.302br.net',
+'ad.doubleclick.net.61438.9465.302br.net',
+'ad.doubleclick.net.61476.9465.302br.net',
+'ad.doubleclick.net.61509.9465.302br.net',
+'ad.doubleclick.net.61518.9465.302br.net',
+'ad.doubleclick.net.61560.9465.302br.net',
+'ad.doubleclick.net.61608.9465.302br.net',
+'ad.doubleclick.net.61743.9465.302br.net',
+'ad.doubleclick.net.62882.9469.302br.net',
+'ad.doubleclick.net.62883.9469.302br.net',
+'ad.doubleclick.net.62884.9469.302br.net',
+'ad.doubleclick.net.62885.9469.302br.net',
+'ad.doubleclick.net.62886.9469.302br.net',
+'ad.doubleclick.net.62887.9469.302br.net',
+'ad.doubleclick.net.62888.9469.302br.net',
+'ad.doubleclick.net.62889.9469.302br.net',
+'ad.doubleclick.net.62890.9469.302br.net',
+'ad.doubleclick.net.62891.9469.302br.net',
+'ad.doubleclick.net.62892.9469.302br.net',
+'ad.doubleclick.net.62893.9469.302br.net',
+'ad.doubleclick.net.62897.9469.302br.net',
+'ad.doubleclick.net.62898.9469.302br.net',
+'ad.doubleclick.net.62899.9469.302br.net',
+'ad.doubleclick.net.62902.9347.302br.net',
+'ad.doubleclick.net.62905.9347.302br.net',
+'ad.doubleclick.net.62908.9347.302br.net',
+'ad.doubleclick.net.62945.9382.302br.net',
+'ad.doubleclick.net.62948.9382.302br.net',
+'ad.doubleclick.net.62951.9382.302br.net',
+'ad.doubleclick.net.62957.9382.302br.net',
+'ad.doubleclick.net.62960.9382.302br.net',
+'ad.doubleclick.net.62966.9382.302br.net',
+'ad.doubleclick.net.62969.9384.302br.net',
+'ad.doubleclick.net.62972.9384.302br.net',
+'ad.doubleclick.net.62975.9384.302br.net',
+'ad.doubleclick.net.62981.9384.302br.net',
+'ad.doubleclick.net.62984.9384.302br.net',
+'ad.doubleclick.net.62990.9384.302br.net',
+'ad.doubleclick.net.62993.9450.302br.net',
+'ad.doubleclick.net.62994.9450.302br.net',
+'ad.doubleclick.net.62995.9450.302br.net',
+'ad.doubleclick.net.62996.9450.302br.net',
+'ad.doubleclick.net.62997.9450.302br.net',
+'ad.doubleclick.net.62999.9450.302br.net',
+'ad.doubleclick.net.63000.9450.302br.net',
+'ad.doubleclick.net.63004.9450.302br.net',
+'ad.doubleclick.net.63005.9450.302br.net',
+'ad.doubleclick.net.63006.9450.302br.net',
+'ad.doubleclick.net.63020.9454.302br.net',
+'ad.doubleclick.net.63023.9454.302br.net',
+'ad.doubleclick.net.63026.9454.302br.net',
+'ad.doubleclick.net.63047.9476.302br.net',
+'ad.doubleclick.net.63050.9476.302br.net',
+'ad.doubleclick.net.63053.9476.302br.net',
+'ad.doubleclick.net.63056.9479.302br.net',
+'ad.doubleclick.net.63059.9479.302br.net',
+'ad.doubleclick.net.63062.9479.302br.net',
+'ad.doubleclick.net.63128.9090.302br.net',
+'ad.doubleclick.net.63134.9090.302br.net',
+'ad.doubleclick.net.63137.9090.302br.net',
+'ad.doubleclick.net.63149.9090.302br.net',
+'ad.doubleclick.net.63186.9090.302br.net',
+'ad.doubleclick.net.63189.9090.302br.net',
+'ad.doubleclick.net.63192.9090.302br.net',
+'ad.doubleclick.net.63341.9485.302br.net',
+'ad.doubleclick.net.63344.9485.302br.net',
+'ad.doubleclick.net.63347.9485.302br.net',
+'ad.doubleclick.net.63350.9485.302br.net',
+'ad.doubleclick.net.63351.9485.302br.net',
+'ad.doubleclick.net.63353.9485.302br.net',
+'ad.doubleclick.net.63354.9485.302br.net',
+'ad.doubleclick.net.63395.9485.302br.net',
+'ad.doubleclick.net.63396.9485.302br.net',
+'ad.doubleclick.net.63397.9485.302br.net',
+'ad.doubleclick.net.63400.9289.302br.net',
+'ad.doubleclick.net.63401.9289.302br.net',
+'ad.doubleclick.net.63403.9289.302br.net',
+'ad.doubleclick.net.63406.9289.302br.net',
+'ad.doubleclick.net.63407.9289.302br.net',
+'ad.doubleclick.net.63408.9289.302br.net',
+'ad.doubleclick.net.63409.9289.302br.net',
+'ad.doubleclick.net.63410.9289.302br.net',
+'ad.doubleclick.net.63411.9289.302br.net',
+'ad.doubleclick.net.63412.9289.302br.net',
+'ad.doubleclick.net.63413.9289.302br.net',
+'ad.doubleclick.net.63415.9289.302br.net',
+'ad.doubleclick.net.63416.9289.302br.net',
+'ad.doubleclick.net.63418.9289.302br.net',
+'ad.doubleclick.net.63419.9289.302br.net',
+'ad.doubleclick.net.63421.9289.302br.net',
+'ad.doubleclick.net.63424.9289.302br.net',
+'ad.doubleclick.net.63427.9289.302br.net',
+'ad.doubleclick.net.63764.9250.302br.net',
+'ad.doubleclick.net.63767.9250.302br.net',
+'ad.doubleclick.net.63772.9250.302br.net',
+'ad.doubleclick.net.63775.9250.302br.net',
+'ad.doubleclick.net.63778.9250.302br.net',
+'ad.doubleclick.net.63781.9250.302br.net',
+'ad.doubleclick.net.63784.9250.302br.net',
+'ad.doubleclick.net.63787.9250.302br.net',
+'ad.doubleclick.net.63790.9250.302br.net',
+'ad.doubleclick.net.63793.9250.302br.net',
+'ad.doubleclick.net.63796.9250.302br.net',
+'ad.doubleclick.net.63799.9250.302br.net',
+'ad.doubleclick.net.63802.9250.302br.net',
+'ad.doubleclick.net.63805.9250.302br.net',
+'ad.doubleclick.net.63806.9465.302br.net',
+'ad.doubleclick.net.63808.9465.302br.net',
+'ad.doubleclick.net.63809.9465.302br.net',
+'ad.doubleclick.net.63811.9465.302br.net',
+'ad.doubleclick.net.63812.9465.302br.net',
+'ad.doubleclick.net.63814.9465.302br.net',
+'ad.doubleclick.net.63815.9465.302br.net',
+'ad.doubleclick.net.63817.9465.302br.net',
+'ad.doubleclick.net.63818.9465.302br.net',
+'ad.doubleclick.net.63820.9465.302br.net',
+'ad.doubleclick.net.63823.9465.302br.net',
+'ad.doubleclick.net.63824.9465.302br.net',
+'ad.doubleclick.net.63826.9465.302br.net',
+'ad.doubleclick.net.63827.9465.302br.net',
+'ad.doubleclick.net.63829.9465.302br.net',
+'ad.doubleclick.net.63830.9465.302br.net',
+'ad.doubleclick.net.63832.9465.302br.net',
+'ad.doubleclick.net.63834.9465.302br.net',
+'ad.doubleclick.net.63835.9465.302br.net',
+'ad.doubleclick.net.63836.9465.302br.net',
+'ad.doubleclick.net.63837.9465.302br.net',
+'ad.doubleclick.net.63838.9465.302br.net',
+'ad.doubleclick.net.63839.9465.302br.net',
+'ad.doubleclick.net.63840.9465.302br.net',
+'ad.doubleclick.net.63841.9465.302br.net',
+'ad.doubleclick.net.63843.9465.302br.net',
+'ad.doubleclick.net.63844.9465.302br.net',
+'ad.doubleclick.net.63845.9465.302br.net',
+'ad.doubleclick.net.63846.9465.302br.net',
+'ad.doubleclick.net.63847.9465.302br.net',
+'ad.doubleclick.net.63848.9465.302br.net',
+'ad.doubleclick.net.63849.9465.302br.net',
+'ad.doubleclick.net.63850.9465.302br.net',
+'ad.doubleclick.net.63852.9465.302br.net',
+'ad.doubleclick.net.63853.9465.302br.net',
+'ad.doubleclick.net.63855.9465.302br.net',
+'ad.doubleclick.net.63856.9465.302br.net',
+'ad.doubleclick.net.63858.9465.302br.net',
+'ad.doubleclick.net.63859.9465.302br.net',
+'ad.doubleclick.net.63860.9465.302br.net',
+'ad.doubleclick.net.63861.9465.302br.net',
+'ad.doubleclick.net.63862.9465.302br.net',
+'ad.doubleclick.net.63863.9465.302br.net',
+'ad.doubleclick.net.63864.9465.302br.net',
+'ad.doubleclick.net.63865.9465.302br.net',
+'ad.doubleclick.net.63866.9465.302br.net',
+'ad.doubleclick.net.63867.9465.302br.net',
+'ad.doubleclick.net.63868.9465.302br.net',
+'ad.doubleclick.net.63869.9465.302br.net',
+'ad.doubleclick.net.63870.9465.302br.net',
+'ad.doubleclick.net.63871.9465.302br.net',
+'ad.doubleclick.net.63873.9465.302br.net',
+'ad.doubleclick.net.63874.9465.302br.net',
+'ad.doubleclick.net.63875.9465.302br.net',
+'ad.doubleclick.net.63876.9465.302br.net',
+'ad.doubleclick.net.63877.9465.302br.net',
+'ad.doubleclick.net.63878.9465.302br.net',
+'ad.doubleclick.net.63879.9465.302br.net',
+'ad.doubleclick.net.63880.9465.302br.net',
+'ad.doubleclick.net.63882.9465.302br.net',
+'ad.doubleclick.net.63883.9465.302br.net',
+'ad.doubleclick.net.63884.9465.302br.net',
+'ad.doubleclick.net.63885.9465.302br.net',
+'ad.doubleclick.net.63886.9465.302br.net',
+'ad.doubleclick.net.63887.9465.302br.net',
+'ad.doubleclick.net.63888.9465.302br.net',
+'ad.doubleclick.net.63889.9465.302br.net',
+'ad.doubleclick.net.63890.9465.302br.net',
+'ad.doubleclick.net.63891.9465.302br.net',
+'ad.doubleclick.net.63892.9465.302br.net',
+'ad.doubleclick.net.63894.9465.302br.net',
+'ad.doubleclick.net.63895.9465.302br.net',
+'ad.doubleclick.net.63897.9465.302br.net',
+'ad.doubleclick.net.63898.9465.302br.net',
+'ad.doubleclick.net.63900.9465.302br.net',
+'ad.doubleclick.net.63901.9465.302br.net',
+'ad.doubleclick.net.63903.9465.302br.net',
+'ad.doubleclick.net.63904.9465.302br.net',
+'ad.doubleclick.net.63905.9465.302br.net',
+'ad.doubleclick.net.63906.9465.302br.net',
+'ad.doubleclick.net.63907.9465.302br.net',
+'ad.doubleclick.net.63973.9465.302br.net',
+'ad.doubleclick.net.63976.9465.302br.net',
+'ad.doubleclick.net.63979.9465.302br.net',
+'ad.doubleclick.net.63982.9465.302br.net',
+'ad.doubleclick.net.63985.9465.302br.net',
+'ad.doubleclick.net.63988.9465.302br.net',
+'ad.doubleclick.net.63991.9465.302br.net',
+'ad.doubleclick.net.63994.9465.302br.net',
+'ad.doubleclick.net.64010.9494.302br.net',
+'ad.doubleclick.net.64013.9494.302br.net',
+'ad.doubleclick.net.64016.9494.302br.net',
+'ad.doubleclick.net.64728.9149.302br.net',
+'ad.doubleclick.net.64731.9149.302br.net',
+'ad.doubleclick.net.64734.9149.302br.net',
+'ad.doubleclick.net.64736.9506.302br.net',
+'ad.doubleclick.net.64738.9506.302br.net',
+'ad.doubleclick.net.64739.9506.302br.net',
+'ad.doubleclick.net.64741.9506.302br.net',
+'ad.doubleclick.net.64742.9506.302br.net',
+'ad.doubleclick.net.64744.9506.302br.net',
+'ad.doubleclick.net.64745.9506.302br.net',
+'ad.doubleclick.net.64748.9506.302br.net',
+'ad.doubleclick.net.64751.9506.302br.net',
+'ad.doubleclick.net.64755.9314.302br.net',
+'ad.doubleclick.net.64758.9314.302br.net',
+'ad.doubleclick.net.64761.9314.302br.net',
+'ad.doubleclick.net.64763.9314.302br.net',
+'ad.doubleclick.net.64765.9314.302br.net',
+'ad.doubleclick.net.64766.9314.302br.net',
+'ad.doubleclick.net.64768.9314.302br.net',
+'ad.doubleclick.net.64771.9314.302br.net',
+'ad.doubleclick.net.64772.9314.302br.net',
+'ad.doubleclick.net.64774.9314.302br.net',
+'ad.doubleclick.net.64775.9314.302br.net',
+'ad.doubleclick.net.64777.9314.302br.net',
+'ad.doubleclick.net.64780.9314.302br.net',
+'ad.doubleclick.net.64799.9314.302br.net',
+'ad.doubleclick.net.64801.9314.302br.net',
+'ad.doubleclick.net.64802.9314.302br.net',
+'ad.doubleclick.net.64804.9314.302br.net',
+'ad.doubleclick.net.64805.9314.302br.net',
+'ad.doubleclick.net.64807.9314.302br.net',
+'ad.doubleclick.net.64826.9313.302br.net',
+'ad.doubleclick.net.64827.9313.302br.net',
+'ad.doubleclick.net.64828.9313.302br.net',
+'ad.doubleclick.net.64829.9313.302br.net',
+'ad.doubleclick.net.64830.9313.302br.net',
+'ad.doubleclick.net.64831.9313.302br.net',
+'ad.doubleclick.net.64832.9313.302br.net',
+'ad.doubleclick.net.64833.9313.302br.net',
+'ad.doubleclick.net.64834.9313.302br.net',
+'ad.doubleclick.net.64835.9313.302br.net',
+'ad.doubleclick.net.64836.9313.302br.net',
+'ad.doubleclick.net.64837.9313.302br.net',
+'ad.doubleclick.net.64838.9313.302br.net',
+'ad.doubleclick.net.64839.9313.302br.net',
+'ad.doubleclick.net.64840.9313.302br.net',
+'ad.doubleclick.net.64841.9313.302br.net',
+'ad.doubleclick.net.64842.9313.302br.net',
+'ad.doubleclick.net.64843.9313.302br.net',
+'ad.doubleclick.net.64880.9496.302br.net',
+'ad.doubleclick.net.64882.9496.302br.net',
+'ad.doubleclick.net.64883.9496.302br.net',
+'ad.doubleclick.net.64885.9496.302br.net',
+'ad.doubleclick.net.64886.9496.302br.net',
+'ad.doubleclick.net.64888.9496.302br.net',
+'ad.doubleclick.net.64889.9496.302br.net',
+'ad.doubleclick.net.64891.9496.302br.net',
+'ad.doubleclick.net.64892.9496.302br.net',
+'ad.doubleclick.net.64894.9496.302br.net',
+'ad.doubleclick.net.64897.9496.302br.net',
+'ad.doubleclick.net.64900.9496.302br.net',
+'ad.doubleclick.net.64901.9496.302br.net',
+'ad.doubleclick.net.64903.9496.302br.net',
+'ad.doubleclick.net.64906.9496.302br.net',
+'ad.doubleclick.net.64909.9496.302br.net',
+'ad.doubleclick.net.64912.9496.302br.net',
+'ad.doubleclick.net.64914.9496.302br.net',
+'ad.doubleclick.net.64915.9496.302br.net',
+'ad.doubleclick.net.64918.9496.302br.net',
+'ad.doubleclick.net.64921.9496.302br.net',
+'ad.doubleclick.net.64924.9496.302br.net',
+'ad.doubleclick.net.64927.9496.302br.net',
+'ad.doubleclick.net.64929.9496.302br.net',
+'ad.doubleclick.net.64930.9496.302br.net',
+'ad.doubleclick.net.64933.9496.302br.net',
+'ad.doubleclick.net.64934.9496.302br.net',
+'ad.doubleclick.net.64936.9496.302br.net',
+'ad.doubleclick.net.64938.9496.302br.net',
+'ad.doubleclick.net.64939.9496.302br.net',
+'ad.doubleclick.net.64941.9496.302br.net',
+'ad.doubleclick.net.64942.9496.302br.net',
+'ad.doubleclick.net.64943.9496.302br.net',
+'ad.doubleclick.net.64944.9496.302br.net',
+'ad.doubleclick.net.64945.9496.302br.net',
+'ad.doubleclick.net.64947.9496.302br.net',
+'ad.doubleclick.net.64948.9496.302br.net',
+'ad.doubleclick.net.64951.9496.302br.net',
+'ad.doubleclick.net.64954.9496.302br.net',
+'ad.doubleclick.net.64957.9496.302br.net',
+'ad.doubleclick.net.64960.9496.302br.net',
+'ad.doubleclick.net.64963.9496.302br.net',
+'ad.doubleclick.net.64966.9496.302br.net',
+'ad.doubleclick.net.64968.9496.302br.net',
+'ad.doubleclick.net.64969.9496.302br.net',
+'ad.doubleclick.net.64972.9496.302br.net',
+'ad.doubleclick.net.64975.9496.302br.net',
+'ad.doubleclick.net.64978.9496.302br.net',
+'ad.doubleclick.net.64981.9496.302br.net',
+'ad.doubleclick.net.64984.9496.302br.net',
+'ad.doubleclick.net.64985.9496.302br.net',
+'ad.doubleclick.net.64987.9496.302br.net',
+'ad.doubleclick.net.64990.9496.302br.net',
+'ad.doubleclick.net.64993.9496.302br.net',
+'ad.doubleclick.net.64996.9496.302br.net',
+'ad.doubleclick.net.64999.9496.302br.net',
+'ad.doubleclick.net.65000.9496.302br.net',
+'ad.doubleclick.net.65002.9496.302br.net',
+'ad.doubleclick.net.65005.9496.302br.net',
+'ad.doubleclick.net.65008.9496.302br.net',
+'ad.doubleclick.net.65020.9496.302br.net',
+'ad.doubleclick.net.65023.9496.302br.net',
+'ad.doubleclick.net.65026.9496.302br.net',
+'ad.doubleclick.net.65029.9496.302br.net',
+'ad.doubleclick.net.65032.9496.302br.net',
+'ad.doubleclick.net.65035.9496.302br.net',
+'ad.doubleclick.net.65038.9496.302br.net',
+'ad.doubleclick.net.65041.9496.302br.net',
+'ad.doubleclick.net.65042.9496.302br.net',
+'ad.doubleclick.net.65044.9496.302br.net',
+'ad.doubleclick.net.65047.9496.302br.net',
+'ad.doubleclick.net.65050.9496.302br.net',
+'ad.doubleclick.net.65051.9496.302br.net',
+'ad.doubleclick.net.65053.9496.302br.net',
+'ad.doubleclick.net.65054.9496.302br.net',
+'ad.doubleclick.net.65056.9496.302br.net',
+'ad.doubleclick.net.65059.9496.302br.net',
+'ad.doubleclick.net.65062.9496.302br.net',
+'ad.doubleclick.net.65063.9496.302br.net',
+'ad.doubleclick.net.65065.9496.302br.net',
+'ad.doubleclick.net.65068.9496.302br.net',
+'ad.doubleclick.net.65069.9496.302br.net',
+'ad.doubleclick.net.65071.9496.302br.net',
+'ad.doubleclick.net.65078.9496.302br.net',
+'ad.doubleclick.net.65080.9496.302br.net',
+'ad.doubleclick.net.65081.9496.302br.net',
+'ad.doubleclick.net.65083.9496.302br.net',
+'ad.doubleclick.net.65085.9496.302br.net',
+'ad.doubleclick.net.65086.9496.302br.net',
+'ad.doubleclick.net.65088.9496.302br.net',
+'ad.doubleclick.net.65089.9496.302br.net',
+'ad.doubleclick.net.65091.9496.302br.net',
+'ad.doubleclick.net.65092.9496.302br.net',
+'ad.doubleclick.net.65094.9496.302br.net',
+'ad.doubleclick.net.65095.9496.302br.net',
+'ad.doubleclick.net.65097.9496.302br.net',
+'ad.doubleclick.net.65098.9496.302br.net',
+'ad.doubleclick.net.65100.9496.302br.net',
+'ad.doubleclick.net.65101.9496.302br.net',
+'ad.doubleclick.net.65103.9496.302br.net',
+'ad.doubleclick.net.65104.9496.302br.net',
+'ad.doubleclick.net.65106.9496.302br.net',
+'ad.doubleclick.net.65107.9496.302br.net',
+'ad.doubleclick.net.65109.9496.302br.net',
+'ad.doubleclick.net.65110.9496.302br.net',
+'ad.doubleclick.net.65112.9496.302br.net',
+'ad.doubleclick.net.65113.9496.302br.net',
+'ad.doubleclick.net.65115.9496.302br.net',
+'ad.doubleclick.net.65116.9496.302br.net',
+'ad.doubleclick.net.65118.9496.302br.net',
+'ad.doubleclick.net.65119.9496.302br.net',
+'ad.doubleclick.net.65120.9499.302br.net',
+'ad.doubleclick.net.65122.9499.302br.net',
+'ad.doubleclick.net.65123.9499.302br.net',
+'ad.doubleclick.net.65125.9499.302br.net',
+'ad.doubleclick.net.65126.9499.302br.net',
+'ad.doubleclick.net.65128.9499.302br.net',
+'ad.doubleclick.net.65129.9499.302br.net',
+'ad.doubleclick.net.65131.9499.302br.net',
+'ad.doubleclick.net.65132.9499.302br.net',
+'ad.doubleclick.net.65134.9499.302br.net',
+'ad.doubleclick.net.65137.9499.302br.net',
+'ad.doubleclick.net.65158.9499.302br.net',
+'ad.doubleclick.net.65161.9499.302br.net',
+'ad.doubleclick.net.65164.9499.302br.net',
+'ad.doubleclick.net.65167.9499.302br.net',
+'ad.doubleclick.net.65170.9499.302br.net',
+'ad.doubleclick.net.65171.9499.302br.net',
+'ad.doubleclick.net.65172.9499.302br.net',
+'ad.doubleclick.net.65173.9499.302br.net',
+'ad.doubleclick.net.65174.9499.302br.net',
+'ad.doubleclick.net.65176.9499.302br.net',
+'ad.doubleclick.net.65177.9499.302br.net',
+'ad.doubleclick.net.65179.9499.302br.net',
+'ad.doubleclick.net.65181.9499.302br.net',
+'ad.doubleclick.net.65182.9499.302br.net',
+'ad.doubleclick.net.65183.9499.302br.net',
+'ad.doubleclick.net.65185.9499.302br.net',
+'ad.doubleclick.net.65188.9499.302br.net',
+'ad.doubleclick.net.65191.9499.302br.net',
+'ad.doubleclick.net.65192.9499.302br.net',
+'ad.doubleclick.net.65194.9499.302br.net',
+'ad.doubleclick.net.65195.9499.302br.net',
+'ad.doubleclick.net.65197.9499.302br.net',
+'ad.doubleclick.net.65198.9499.302br.net',
+'ad.doubleclick.net.65200.9499.302br.net',
+'ad.doubleclick.net.65201.9499.302br.net',
+'ad.doubleclick.net.65203.9499.302br.net',
+'ad.doubleclick.net.65204.9499.302br.net',
+'ad.doubleclick.net.65206.9499.302br.net',
+'ad.doubleclick.net.65207.9499.302br.net',
+'ad.doubleclick.net.65208.9499.302br.net',
+'ad.doubleclick.net.65209.9499.302br.net',
+'ad.doubleclick.net.65210.9499.302br.net',
+'ad.doubleclick.net.65211.9499.302br.net',
+'ad.doubleclick.net.65212.9499.302br.net',
+'ad.doubleclick.net.65213.9499.302br.net',
+'ad.doubleclick.net.65214.9499.302br.net',
+'ad.doubleclick.net.65215.9499.302br.net',
+'ad.doubleclick.net.65216.9499.302br.net',
+'ad.doubleclick.net.65217.9499.302br.net',
+'ad.doubleclick.net.65218.9499.302br.net',
+'ad.doubleclick.net.65221.9499.302br.net',
+'ad.doubleclick.net.65225.9499.302br.net',
+'ad.doubleclick.net.65226.9499.302br.net',
+'ad.doubleclick.net.65227.9499.302br.net',
+'ad.doubleclick.net.65228.9499.302br.net',
+'ad.doubleclick.net.65229.9499.302br.net',
+'ad.doubleclick.net.65230.9499.302br.net',
+'ad.doubleclick.net.65233.9499.302br.net',
+'ad.doubleclick.net.65239.9499.302br.net',
+'ad.doubleclick.net.65241.9499.302br.net',
+'ad.doubleclick.net.65242.9499.302br.net',
+'ad.doubleclick.net.65243.9499.302br.net',
+'ad.doubleclick.net.65244.9499.302br.net',
+'ad.doubleclick.net.65245.9499.302br.net',
+'ad.doubleclick.net.65246.9499.302br.net',
+'ad.doubleclick.net.65247.9499.302br.net',
+'ad.doubleclick.net.65248.9499.302br.net',
+'ad.doubleclick.net.65254.9499.302br.net',
+'ad.doubleclick.net.65255.9499.302br.net',
+'ad.doubleclick.net.65257.9499.302br.net',
+'ad.doubleclick.net.65258.9499.302br.net',
+'ad.doubleclick.net.65260.9499.302br.net',
+'ad.doubleclick.net.65281.9499.302br.net',
+'ad.doubleclick.net.65284.9499.302br.net',
+'ad.doubleclick.net.65287.9499.302br.net',
+'ad.doubleclick.net.65290.9499.302br.net',
+'ad.doubleclick.net.65292.9510.302br.net',
+'ad.doubleclick.net.65295.9510.302br.net',
+'ad.doubleclick.net.65298.9510.302br.net',
+'ad.doubleclick.net.65328.9509.302br.net',
+'ad.doubleclick.net.65331.9509.302br.net',
+'ad.doubleclick.net.65334.9509.302br.net',
+'ad.doubleclick.net.65356.9509.302br.net',
+'ad.doubleclick.net.65359.9509.302br.net',
+'ad.doubleclick.net.65362.9509.302br.net',
+'ad.doubleclick.net.65365.9509.302br.net',
+'ad.doubleclick.net.65368.9509.302br.net',
+'ad.doubleclick.net.65371.9509.302br.net',
+'ad.doubleclick.net.65373.9499.302br.net',
+'ad.doubleclick.net.65374.9499.302br.net',
+'ad.doubleclick.net.65376.9499.302br.net',
+'ad.doubleclick.net.65377.9499.302br.net',
+'ad.doubleclick.net.65378.9499.302br.net',
+'ad.doubleclick.net.65379.9499.302br.net',
+'ad.doubleclick.net.65380.9499.302br.net',
+'ad.doubleclick.net.65382.9499.302br.net',
+'ad.doubleclick.net.65383.9499.302br.net',
+'ad.doubleclick.net.65385.9499.302br.net',
+'ad.doubleclick.net.65386.9499.302br.net',
+'ad.doubleclick.net.65388.9499.302br.net',
+'ad.doubleclick.net.65389.9499.302br.net',
+'ad.doubleclick.net.65391.9499.302br.net',
+'ad.doubleclick.net.65392.9499.302br.net',
+'ad.doubleclick.net.65394.9499.302br.net',
+'ad.doubleclick.net.65395.9499.302br.net',
+'ad.doubleclick.net.65397.9499.302br.net',
+'ad.doubleclick.net.65398.9499.302br.net',
+'ad.doubleclick.net.65473.9503.302br.net',
+'ad.doubleclick.net.65476.9503.302br.net',
+'ad.doubleclick.net.65479.9503.302br.net',
+'ad.doubleclick.net.65482.9503.302br.net',
+'ad.doubleclick.net.65485.9503.302br.net',
+'ad.doubleclick.net.65497.9503.302br.net',
+'ad.doubleclick.net.65500.9503.302br.net',
+'ad.doubleclick.net.65503.9503.302br.net',
+'ad.doubleclick.net.65515.9503.302br.net',
+'ad.doubleclick.net.65536.9503.302br.net',
+'ad.doubleclick.net.65539.9503.302br.net',
+'ad.doubleclick.net.65542.9503.302br.net',
+'ad.doubleclick.net.65544.9503.302br.net',
+'ad.doubleclick.net.65545.9503.302br.net',
+'ad.doubleclick.net.65546.9503.302br.net',
+'ad.doubleclick.net.65547.9503.302br.net',
+'ad.doubleclick.net.65548.9503.302br.net',
+'ad.doubleclick.net.65549.9503.302br.net',
+'ad.doubleclick.net.65550.9503.302br.net',
+'ad.doubleclick.net.65551.9503.302br.net',
+'ad.doubleclick.net.65552.9503.302br.net',
+'ad.doubleclick.net.65554.9503.302br.net',
+'ad.doubleclick.net.65556.9503.302br.net',
+'ad.doubleclick.net.65557.9503.302br.net',
+'ad.doubleclick.net.65559.9503.302br.net',
+'ad.doubleclick.net.65560.9503.302br.net',
+'ad.doubleclick.net.65562.9503.302br.net',
+'ad.doubleclick.net.65563.9503.302br.net',
+'ad.doubleclick.net.65565.9503.302br.net',
+'ad.doubleclick.net.65566.9503.302br.net',
+'ad.doubleclick.net.65568.9503.302br.net',
+'ad.doubleclick.net.65569.9503.302br.net',
+'ad.doubleclick.net.65571.9503.302br.net',
+'ad.doubleclick.net.65572.9503.302br.net',
+'ad.doubleclick.net.65574.9503.302br.net',
+'ad.doubleclick.net.65575.9503.302br.net',
+'ad.doubleclick.net.65578.9503.302br.net',
+'ad.doubleclick.net.65581.9503.302br.net',
+'ad.doubleclick.net.65584.9503.302br.net',
+'ad.doubleclick.net.65587.9503.302br.net',
+'ad.doubleclick.net.65590.9503.302br.net',
+'ad.doubleclick.net.65592.9503.302br.net',
+'ad.doubleclick.net.65593.9503.302br.net',
+'ad.doubleclick.net.65595.9503.302br.net',
+'ad.doubleclick.net.65596.9503.302br.net',
+'ad.doubleclick.net.65598.9503.302br.net',
+'ad.doubleclick.net.65599.9503.302br.net',
+'ad.doubleclick.net.65605.9503.302br.net',
+'ad.doubleclick.net.65608.9503.302br.net',
+'ad.doubleclick.net.65610.9503.302br.net',
+'ad.doubleclick.net.65611.9503.302br.net',
+'ad.doubleclick.net.65612.9503.302br.net',
+'ad.doubleclick.net.65613.9503.302br.net',
+'ad.doubleclick.net.65614.9503.302br.net',
+'ad.doubleclick.net.65617.9503.302br.net',
+'ad.doubleclick.net.65620.9503.302br.net',
+'ad.doubleclick.net.65626.9503.302br.net',
+'ad.doubleclick.net.65629.9503.302br.net',
+'ad.doubleclick.net.65630.9503.302br.net',
+'ad.doubleclick.net.65631.9503.302br.net',
+'ad.doubleclick.net.65632.9503.302br.net',
+'ad.doubleclick.net.65634.9503.302br.net',
+'ad.doubleclick.net.65635.9503.302br.net',
+'ad.doubleclick.net.65638.9503.302br.net',
+'ad.doubleclick.net.65641.9503.302br.net',
+'ad.doubleclick.net.65644.9503.302br.net',
+'ad.doubleclick.net.65647.9503.302br.net',
+'ad.doubleclick.net.65648.9503.302br.net',
+'ad.doubleclick.net.65650.9503.302br.net',
+'ad.doubleclick.net.65651.9503.302br.net',
+'ad.doubleclick.net.65653.9503.302br.net',
+'ad.doubleclick.net.65654.9503.302br.net',
+'ad.doubleclick.net.65656.9503.302br.net',
+'ad.doubleclick.net.65659.9503.302br.net',
+'ad.doubleclick.net.65662.9503.302br.net',
+'ad.doubleclick.net.65663.9503.302br.net',
+'ad.doubleclick.net.65665.9503.302br.net',
+'ad.doubleclick.net.65666.9503.302br.net',
+'ad.doubleclick.net.65668.9503.302br.net',
+'ad.doubleclick.net.65669.9503.302br.net',
+'ad.doubleclick.net.65671.9503.302br.net',
+'ad.doubleclick.net.65672.9503.302br.net',
+'ad.doubleclick.net.65674.9503.302br.net',
+'ad.doubleclick.net.65675.9503.302br.net',
+'ad.doubleclick.net.65677.9503.302br.net',
+'ad.doubleclick.net.65678.9503.302br.net',
+'ad.doubleclick.net.65680.9503.302br.net',
+'ad.doubleclick.net.65683.9503.302br.net',
+'ad.doubleclick.net.65684.9503.302br.net',
+'ad.doubleclick.net.65686.9503.302br.net',
+'ad.doubleclick.net.65689.9503.302br.net',
+'ad.doubleclick.net.65692.9503.302br.net',
+'ad.doubleclick.net.65693.9503.302br.net',
+'ad.doubleclick.net.65695.9503.302br.net',
+'ad.doubleclick.net.65698.9503.302br.net',
+'ad.doubleclick.net.65701.9503.302br.net',
+'ad.doubleclick.net.65704.9503.302br.net',
+'ad.doubleclick.net.65705.9503.302br.net',
+'ad.doubleclick.net.65707.9503.302br.net',
+'ad.doubleclick.net.65708.9503.302br.net',
+'ad.doubleclick.net.65710.9503.302br.net',
+'ad.doubleclick.net.65711.9503.302br.net',
+'ad.doubleclick.net.65713.9503.302br.net',
+'ad.doubleclick.net.65714.9503.302br.net',
+'ad.doubleclick.net.65716.9503.302br.net',
+'ad.doubleclick.net.65717.9503.302br.net',
+'ad.doubleclick.net.65719.9503.302br.net',
+'ad.doubleclick.net.65720.9503.302br.net',
+'ad.doubleclick.net.65722.9503.302br.net',
+'ad.doubleclick.net.65723.9503.302br.net',
+'ad.doubleclick.net.65724.9503.302br.net',
+'ad.doubleclick.net.65725.9503.302br.net',
+'ad.doubleclick.net.65726.9503.302br.net',
+'ad.doubleclick.net.65727.9503.302br.net',
+'ad.doubleclick.net.65728.9503.302br.net',
+'ad.doubleclick.net.65730.9503.302br.net',
+'ad.doubleclick.net.65731.9503.302br.net',
+'ad.doubleclick.net.65732.9503.302br.net',
+'ad.doubleclick.net.65733.9503.302br.net',
+'ad.doubleclick.net.65734.9503.302br.net',
+'ad.doubleclick.net.65736.9503.302br.net',
+'ad.doubleclick.net.65737.9503.302br.net',
+'ad.doubleclick.net.65738.9503.302br.net',
+'ad.doubleclick.net.65739.9503.302br.net',
+'ad.doubleclick.net.65740.9503.302br.net',
+'ad.doubleclick.net.65741.9503.302br.net',
+'ad.doubleclick.net.65742.9503.302br.net',
+'ad.doubleclick.net.65743.9503.302br.net',
+'ad.doubleclick.net.65745.9503.302br.net',
+'ad.doubleclick.net.65746.9503.302br.net',
+'ad.doubleclick.net.65747.9503.302br.net',
+'ad.doubleclick.net.65748.9503.302br.net',
+'ad.doubleclick.net.65749.9503.302br.net',
+'ad.doubleclick.net.65751.9503.302br.net',
+'ad.doubleclick.net.65752.9503.302br.net',
+'ad.doubleclick.net.65754.9503.302br.net',
+'ad.doubleclick.net.65755.9503.302br.net',
+'ad.doubleclick.net.65757.9503.302br.net',
+'ad.doubleclick.net.65758.9503.302br.net',
+'ad.doubleclick.net.65759.9503.302br.net',
+'ad.doubleclick.net.65760.9503.302br.net',
+'ad.doubleclick.net.65761.9503.302br.net',
+'ad.doubleclick.net.65762.9503.302br.net',
+'ad.doubleclick.net.65763.9503.302br.net',
+'ad.doubleclick.net.65764.9503.302br.net',
+'ad.doubleclick.net.65765.9503.302br.net',
+'ad.doubleclick.net.65766.9503.302br.net',
+'ad.doubleclick.net.65767.9503.302br.net',
+'ad.doubleclick.net.65768.9503.302br.net',
+'ad.doubleclick.net.65769.9503.302br.net',
+'ad.doubleclick.net.65770.9503.302br.net',
+'ad.doubleclick.net.65771.9503.302br.net',
+'ad.doubleclick.net.65772.9503.302br.net',
+'ad.doubleclick.net.65773.9503.302br.net',
+'ad.doubleclick.net.65774.9503.302br.net',
+'ad.doubleclick.net.65775.9503.302br.net',
+'ad.doubleclick.net.65776.9503.302br.net',
+'ad.doubleclick.net.65777.9503.302br.net',
+'ad.doubleclick.net.65778.9503.302br.net',
+'ad.doubleclick.net.65779.9503.302br.net',
+'ad.doubleclick.net.65780.9503.302br.net',
+'ad.doubleclick.net.65781.9503.302br.net',
+'ad.doubleclick.net.65782.9503.302br.net',
+'ad.doubleclick.net.65783.9503.302br.net',
+'ad.doubleclick.net.65784.9503.302br.net',
+'ad.doubleclick.net.65785.9503.302br.net',
+'ad.doubleclick.net.65786.9503.302br.net',
+'ad.doubleclick.net.65787.9503.302br.net',
+'ad.doubleclick.net.65788.9503.302br.net',
+'ad.doubleclick.net.65789.9503.302br.net',
+'ad.doubleclick.net.65790.9503.302br.net',
+'ad.doubleclick.net.65791.9503.302br.net',
+'ad.doubleclick.net.65792.9503.302br.net',
+'ad.doubleclick.net.65793.9503.302br.net',
+'ad.doubleclick.net.65794.9503.302br.net',
+'ad.doubleclick.net.65797.9503.302br.net',
+'ad.doubleclick.net.65800.9503.302br.net',
+'ad.doubleclick.net.65803.9503.302br.net',
+'ad.doubleclick.net.65806.9503.302br.net',
+'ad.doubleclick.net.65809.9503.302br.net',
+'ad.doubleclick.net.65812.9503.302br.net',
+'ad.doubleclick.net.65815.9503.302br.net',
+'ad.doubleclick.net.65818.9503.302br.net',
+'ad.doubleclick.net.65821.9503.302br.net',
+'ad.doubleclick.net.65824.9503.302br.net',
+'ad.doubleclick.net.65827.9503.302br.net',
+'ad.doubleclick.net.65830.9503.302br.net',
+'ad.doubleclick.net.65833.9503.302br.net',
+'ad.doubleclick.net.65836.9503.302br.net',
+'ad.doubleclick.net.65839.9503.302br.net',
+'ad.doubleclick.net.65842.9503.302br.net',
+'ad.doubleclick.net.65845.9501.302br.net',
+'ad.doubleclick.net.65848.9501.302br.net',
+'ad.doubleclick.net.65851.9501.302br.net',
+'ad.doubleclick.net.65854.9501.302br.net',
+'ad.doubleclick.net.65860.9501.302br.net',
+'ad.doubleclick.net.65863.9501.302br.net',
+'ad.doubleclick.net.65878.9501.302br.net',
+'ad.doubleclick.net.65881.9501.302br.net',
+'ad.doubleclick.net.65887.9501.302br.net',
+'ad.doubleclick.net.65890.9501.302br.net',
+'ad.doubleclick.net.65893.9501.302br.net',
+'ad.doubleclick.net.65896.9501.302br.net',
+'ad.doubleclick.net.65902.9501.302br.net',
+'ad.doubleclick.net.65909.9501.302br.net',
+'ad.doubleclick.net.65910.9501.302br.net',
+'ad.doubleclick.net.65911.9501.302br.net',
+'ad.doubleclick.net.65914.9501.302br.net',
+'ad.doubleclick.net.65915.9501.302br.net',
+'ad.doubleclick.net.65916.9501.302br.net',
+'ad.doubleclick.net.65917.9501.302br.net',
+'ad.doubleclick.net.65918.9501.302br.net',
+'ad.doubleclick.net.65919.9501.302br.net',
+'ad.doubleclick.net.65920.9501.302br.net',
+'ad.doubleclick.net.65921.9501.302br.net',
+'ad.doubleclick.net.65922.9501.302br.net',
+'ad.doubleclick.net.65923.9501.302br.net',
+'ad.doubleclick.net.65925.9501.302br.net',
+'ad.doubleclick.net.65926.9501.302br.net',
+'ad.doubleclick.net.65928.9501.302br.net',
+'ad.doubleclick.net.65929.9501.302br.net',
+'ad.doubleclick.net.65931.9501.302br.net',
+'ad.doubleclick.net.65932.9501.302br.net',
+'ad.doubleclick.net.65934.9501.302br.net',
+'ad.doubleclick.net.65935.9501.302br.net',
+'ad.doubleclick.net.65936.9501.302br.net',
+'ad.doubleclick.net.65937.9501.302br.net',
+'ad.doubleclick.net.65938.9501.302br.net',
+'ad.doubleclick.net.65939.9501.302br.net',
+'ad.doubleclick.net.65940.9501.302br.net',
+'ad.doubleclick.net.65941.9501.302br.net',
+'ad.doubleclick.net.65942.9501.302br.net',
+'ad.doubleclick.net.65943.9501.302br.net',
+'ad.doubleclick.net.65944.9501.302br.net',
+'ad.doubleclick.net.65946.9501.302br.net',
+'ad.doubleclick.net.65947.9501.302br.net',
+'ad.doubleclick.net.65950.9501.302br.net',
+'ad.doubleclick.net.65952.9501.302br.net',
+'ad.doubleclick.net.65953.9501.302br.net',
+'ad.doubleclick.net.65955.9501.302br.net',
+'ad.doubleclick.net.65956.9501.302br.net',
+'ad.doubleclick.net.65962.9501.302br.net',
+'ad.doubleclick.net.65965.9501.302br.net',
+'ad.doubleclick.net.65967.9501.302br.net',
+'ad.doubleclick.net.65968.9501.302br.net',
+'ad.doubleclick.net.65969.9501.302br.net',
+'ad.doubleclick.net.65971.9501.302br.net',
+'ad.doubleclick.net.65974.9501.302br.net',
+'ad.doubleclick.net.65977.9501.302br.net',
+'ad.doubleclick.net.65980.9501.302br.net',
+'ad.doubleclick.net.65982.9501.302br.net',
+'ad.doubleclick.net.65983.9501.302br.net',
+'ad.doubleclick.net.65985.9501.302br.net',
+'ad.doubleclick.net.65986.9501.302br.net',
+'ad.doubleclick.net.65988.9501.302br.net',
+'ad.doubleclick.net.65989.9501.302br.net',
+'ad.doubleclick.net.65992.9501.302br.net',
+'ad.doubleclick.net.65995.9501.302br.net',
+'ad.doubleclick.net.65996.9501.302br.net',
+'ad.doubleclick.net.65998.9501.302br.net',
+'ad.doubleclick.net.66000.9501.302br.net',
+'ad.doubleclick.net.66001.9501.302br.net',
+'ad.doubleclick.net.66002.9501.302br.net',
+'ad.doubleclick.net.66003.9501.302br.net',
+'ad.doubleclick.net.66004.9501.302br.net',
+'ad.doubleclick.net.66005.9501.302br.net',
+'ad.doubleclick.net.66007.9501.302br.net',
+'ad.doubleclick.net.66009.9501.302br.net',
+'ad.doubleclick.net.66010.9501.302br.net',
+'ad.doubleclick.net.66011.9501.302br.net',
+'ad.doubleclick.net.66013.9501.302br.net',
+'ad.doubleclick.net.66015.9501.302br.net',
+'ad.doubleclick.net.66016.9501.302br.net',
+'ad.doubleclick.net.66018.9501.302br.net',
+'ad.doubleclick.net.66019.9501.302br.net',
+'ad.doubleclick.net.66020.9501.302br.net',
+'ad.doubleclick.net.66021.9501.302br.net',
+'ad.doubleclick.net.66022.9501.302br.net',
+'ad.doubleclick.net.66024.9501.302br.net',
+'ad.doubleclick.net.66025.9501.302br.net',
+'ad.doubleclick.net.66026.9501.302br.net',
+'ad.doubleclick.net.66027.9501.302br.net',
+'ad.doubleclick.net.66028.9501.302br.net',
+'ad.doubleclick.net.66030.9501.302br.net',
+'ad.doubleclick.net.66031.9501.302br.net',
+'ad.doubleclick.net.66032.9501.302br.net',
+'ad.doubleclick.net.66034.9501.302br.net',
+'ad.doubleclick.net.66037.9501.302br.net',
+'ad.doubleclick.net.66038.9501.302br.net',
+'ad.doubleclick.net.66039.9501.302br.net',
+'ad.doubleclick.net.66040.9501.302br.net',
+'ad.doubleclick.net.66043.9501.302br.net',
+'ad.doubleclick.net.66044.9501.302br.net',
+'ad.doubleclick.net.66045.9501.302br.net',
+'ad.doubleclick.net.66046.9501.302br.net',
+'ad.doubleclick.net.66047.9501.302br.net',
+'ad.doubleclick.net.66048.9501.302br.net',
+'ad.doubleclick.net.66049.9501.302br.net',
+'ad.doubleclick.net.66050.9501.302br.net',
+'ad.doubleclick.net.66051.9501.302br.net',
+'ad.doubleclick.net.66052.9501.302br.net',
+'ad.doubleclick.net.66054.9501.302br.net',
+'ad.doubleclick.net.66055.9501.302br.net',
+'ad.doubleclick.net.66061.9501.302br.net',
+'ad.doubleclick.net.66062.9501.302br.net',
+'ad.doubleclick.net.66064.9501.302br.net',
+'ad.doubleclick.net.66067.9501.302br.net',
+'ad.doubleclick.net.66069.9501.302br.net',
+'ad.doubleclick.net.66070.9501.302br.net',
+'ad.doubleclick.net.66072.9501.302br.net',
+'ad.doubleclick.net.66073.9501.302br.net',
+'ad.doubleclick.net.66075.9501.302br.net',
+'ad.doubleclick.net.66076.9501.302br.net',
+'ad.doubleclick.net.66077.9501.302br.net',
+'ad.doubleclick.net.66078.9501.302br.net',
+'ad.doubleclick.net.66079.9501.302br.net',
+'ad.doubleclick.net.66082.9501.302br.net',
+'ad.doubleclick.net.66083.9501.302br.net',
+'ad.doubleclick.net.66084.9501.302br.net',
+'ad.doubleclick.net.66085.9501.302br.net',
+'ad.doubleclick.net.66087.9501.302br.net',
+'ad.doubleclick.net.66088.9501.302br.net',
+'ad.doubleclick.net.66090.9501.302br.net',
+'ad.doubleclick.net.66091.9501.302br.net',
+'ad.doubleclick.net.66093.9501.302br.net',
+'ad.doubleclick.net.66094.9501.302br.net',
+'ad.doubleclick.net.66096.9501.302br.net',
+'ad.doubleclick.net.66097.9501.302br.net',
+'ad.doubleclick.net.66098.9501.302br.net',
+'ad.doubleclick.net.66099.9501.302br.net',
+'ad.doubleclick.net.66100.9501.302br.net',
+'ad.doubleclick.net.66101.9501.302br.net',
+'ad.doubleclick.net.66102.9501.302br.net',
+'ad.doubleclick.net.66103.9501.302br.net',
+'ad.doubleclick.net.66105.9501.302br.net',
+'ad.doubleclick.net.66106.9501.302br.net',
+'ad.doubleclick.net.66108.9501.302br.net',
+'ad.doubleclick.net.66109.9501.302br.net',
+'ad.doubleclick.net.66111.9501.302br.net',
+'ad.doubleclick.net.66112.9501.302br.net',
+'ad.doubleclick.net.66113.9501.302br.net',
+'ad.doubleclick.net.66114.9501.302br.net',
+'ad.doubleclick.net.66115.9501.302br.net',
+'ad.doubleclick.net.66117.9501.302br.net',
+'ad.doubleclick.net.66118.9501.302br.net',
+'ad.doubleclick.net.66119.9501.302br.net',
+'ad.doubleclick.net.66120.9501.302br.net',
+'ad.doubleclick.net.66121.9501.302br.net',
+'ad.doubleclick.net.66122.9501.302br.net',
+'ad.doubleclick.net.66123.9501.302br.net',
+'ad.doubleclick.net.66124.9501.302br.net',
+'ad.doubleclick.net.66127.9501.302br.net',
+'ad.doubleclick.net.66130.9501.302br.net',
+'ad.doubleclick.net.66136.9501.302br.net',
+'ad.doubleclick.net.66142.9501.302br.net',
+'ad.doubleclick.net.66148.9501.302br.net',
+'ad.doubleclick.net.66154.9501.302br.net',
+'ad.doubleclick.net.66157.9501.302br.net',
+'ad.doubleclick.net.66160.9501.302br.net',
+'ad.doubleclick.net.66163.9501.302br.net',
+'ad.doubleclick.net.66166.9501.302br.net',
+'ad.doubleclick.net.66169.9501.302br.net',
+'ad.doubleclick.net.66172.9501.302br.net',
+'ad.doubleclick.net.66175.9501.302br.net',
+'ad.doubleclick.net.66178.9501.302br.net',
+'ad.doubleclick.net.66181.9501.302br.net',
+'ad.doubleclick.net.66184.9501.302br.net',
+'ad.doubleclick.net.66185.9501.302br.net',
+'ad.doubleclick.net.66186.9501.302br.net',
+'ad.doubleclick.net.66187.9501.302br.net',
+'ad.doubleclick.net.66188.9501.302br.net',
+'ad.doubleclick.net.66189.9501.302br.net',
+'ad.doubleclick.net.66190.9501.302br.net',
+'ad.doubleclick.net.66191.9501.302br.net',
+'ad.doubleclick.net.66192.9501.302br.net',
+'ad.doubleclick.net.66193.9501.302br.net',
+'ad.doubleclick.net.66194.9501.302br.net',
+'ad.doubleclick.net.66195.9501.302br.net',
+'ad.doubleclick.net.66196.9501.302br.net',
+'ad.doubleclick.net.66197.9501.302br.net',
+'ad.doubleclick.net.66198.9501.302br.net',
+'ad.doubleclick.net.66199.9501.302br.net',
+'ad.doubleclick.net.66200.9501.302br.net',
+'ad.doubleclick.net.66201.9501.302br.net',
+'ad.doubleclick.net.66202.9501.302br.net',
+'ad.doubleclick.net.66203.9501.302br.net',
+'ad.doubleclick.net.66204.9501.302br.net',
+'ad.doubleclick.net.66205.9501.302br.net',
+'ad.doubleclick.net.66206.9501.302br.net',
+'ad.doubleclick.net.66207.9501.302br.net',
+'ad.doubleclick.net.66208.9501.302br.net',
+'ad.doubleclick.net.66209.9501.302br.net',
+'ad.doubleclick.net.66210.9501.302br.net',
+'ad.doubleclick.net.66211.9501.302br.net',
+'ad.doubleclick.net.66212.9501.302br.net',
+'ad.doubleclick.net.66213.9501.302br.net',
+'ad.doubleclick.net.66214.9501.302br.net',
+'ad.doubleclick.net.66215.9501.302br.net',
+'ad.doubleclick.net.66216.9501.302br.net',
+'ad.doubleclick.net.66217.9501.302br.net',
+'ad.doubleclick.net.66218.9501.302br.net',
+'ad.doubleclick.net.66219.9501.302br.net',
+'ad.doubleclick.net.66220.9501.302br.net',
+'ad.doubleclick.net.66581.9156.302br.net',
+'ad.doubleclick.net.66584.9156.302br.net',
+'ad.doubleclick.net.66587.9156.302br.net',
+'ad.doubleclick.net.66590.9513.302br.net',
+'ad.doubleclick.net.66591.9513.302br.net',
+'ad.doubleclick.net.66592.9513.302br.net',
+'ad.doubleclick.net.66593.9513.302br.net',
+'ad.doubleclick.net.66594.9513.302br.net',
+'ad.doubleclick.net.66595.9513.302br.net',
+'ad.doubleclick.net.66596.9513.302br.net',
+'ad.doubleclick.net.66597.9513.302br.net',
+'ad.doubleclick.net.66598.9513.302br.net',
+'ad.doubleclick.net.66599.9513.302br.net',
+'ad.doubleclick.net.66600.9513.302br.net',
+'ad.doubleclick.net.66601.9513.302br.net',
+'ad.doubleclick.net.66602.9513.302br.net',
+'ad.doubleclick.net.66603.9513.302br.net',
+'ad.doubleclick.net.66604.9513.302br.net',
+'ad.doubleclick.net.66605.9513.302br.net',
+'ad.doubleclick.net.66606.9513.302br.net',
+'ad.doubleclick.net.66607.9513.302br.net',
+'ad.doubleclick.net.66608.9513.302br.net',
+'ad.doubleclick.net.66609.9513.302br.net',
+'ad.doubleclick.net.66610.9513.302br.net',
+'ad.doubleclick.net.66611.9513.302br.net',
+'ad.doubleclick.net.66612.9513.302br.net',
+'ad.doubleclick.net.66613.9513.302br.net',
+'ad.doubleclick.net.66614.9513.302br.net',
+'ad.doubleclick.net.66615.9513.302br.net',
+'ad.doubleclick.net.66616.9513.302br.net',
+'ad.doubleclick.net.66618.9513.302br.net',
+'ad.doubleclick.net.66619.9513.302br.net',
+'ad.doubleclick.net.66620.9513.302br.net',
+'ad.doubleclick.net.66621.9513.302br.net',
+'ad.doubleclick.net.66622.9513.302br.net',
+'ad.doubleclick.net.66623.9513.302br.net',
+'ad.doubleclick.net.66624.9513.302br.net',
+'ad.doubleclick.net.66625.9513.302br.net',
+'ad.doubleclick.net.66995.9515.302br.net',
+'ad.doubleclick.net.66996.9515.302br.net',
+'ad.doubleclick.net.66997.9515.302br.net',
+'ad.doubleclick.net.66998.9515.302br.net',
+'ad.doubleclick.net.66999.9515.302br.net',
+'ad.doubleclick.net.67000.9515.302br.net',
+'ad.doubleclick.net.67001.9515.302br.net',
+'ad.doubleclick.net.67002.9515.302br.net',
+'ad.doubleclick.net.67003.9515.302br.net',
+'ad.doubleclick.net.67004.9515.302br.net',
+'ad.doubleclick.net.67005.9515.302br.net',
+'ad.doubleclick.net.67006.9515.302br.net',
+'ad.doubleclick.net.67008.9515.302br.net',
+'ad.doubleclick.net.67010.9515.302br.net',
+'ad.doubleclick.net.67012.9515.302br.net',
+'ad.doubleclick.net.67015.9515.302br.net',
+'ad.doubleclick.net.67017.9515.302br.net',
+'ad.doubleclick.net.67023.9521.302br.net',
+'ad.doubleclick.net.67026.9521.302br.net',
+'ad.doubleclick.net.67029.9521.302br.net',
+'ad.doubleclick.net.67254.9336.302br.net',
+'ad.doubleclick.net.67255.9336.302br.net',
+'ad.doubleclick.net.67257.9336.302br.net',
+'ad.doubleclick.net.67260.9336.302br.net',
+'ad.doubleclick.net.67261.9336.302br.net',
+'ad.doubleclick.net.67263.9336.302br.net',
+'ad.doubleclick.net.67265.9336.302br.net',
+'ad.doubleclick.net.67266.9336.302br.net',
+'ad.doubleclick.net.67267.9336.302br.net',
+'ad.doubleclick.net.67268.9336.302br.net',
+'ad.doubleclick.net.67269.9336.302br.net',
+'ad.doubleclick.net.67270.9336.302br.net',
+'ad.doubleclick.net.67272.9336.302br.net',
+'ad.doubleclick.net.67273.9336.302br.net',
+'ad.doubleclick.net.67275.9336.302br.net',
+'ad.doubleclick.net.67276.9336.302br.net',
+'ad.doubleclick.net.67278.9336.302br.net',
+'ad.doubleclick.net.67279.9336.302br.net',
+'ad.doubleclick.net.67280.9336.302br.net',
+'ad.doubleclick.net.67281.9336.302br.net',
+'ad.doubleclick.net.67282.9336.302br.net',
+'ad.doubleclick.net.67284.9336.302br.net',
+'ad.doubleclick.net.67285.9336.302br.net',
+'ad.doubleclick.net.67287.9336.302br.net',
+'ad.doubleclick.net.67290.9336.302br.net',
+'ad.doubleclick.net.67293.9336.302br.net',
+'ad.doubleclick.net.67296.9336.302br.net',
+'ad.doubleclick.net.67299.9336.302br.net',
+'ad.doubleclick.net.67300.9336.302br.net',
+'ad.doubleclick.net.67302.9336.302br.net',
+'ad.doubleclick.net.67303.9336.302br.net',
+'ad.doubleclick.net.67305.9336.302br.net',
+'ad.doubleclick.net.67306.9336.302br.net',
+'ad.doubleclick.net.67308.9336.302br.net',
+'ad.doubleclick.net.67309.9336.302br.net',
+'ad.doubleclick.net.67311.9336.302br.net',
+'ad.doubleclick.net.67314.9336.302br.net',
+'ad.doubleclick.net.67317.9336.302br.net',
+'ad.doubleclick.net.67320.9336.302br.net',
+'ad.doubleclick.net.67321.9336.302br.net',
+'ad.doubleclick.net.67323.9336.302br.net',
+'ad.doubleclick.net.67326.9336.302br.net',
+'ad.doubleclick.net.67329.9336.302br.net',
+'ad.doubleclick.net.67332.9336.302br.net',
+'ad.doubleclick.net.67333.9336.302br.net',
+'ad.doubleclick.net.67335.9336.302br.net',
+'ad.doubleclick.net.67338.9336.302br.net',
+'ad.doubleclick.net.67341.9336.302br.net',
+'ad.doubleclick.net.67344.9336.302br.net',
+'ad.doubleclick.net.67347.9336.302br.net',
+'ad.doubleclick.net.67350.9336.302br.net',
+'ad.doubleclick.net.67353.9336.302br.net',
+'ad.doubleclick.net.67356.9336.302br.net',
+'ad.doubleclick.net.67359.9336.302br.net',
+'ad.doubleclick.net.67362.9336.302br.net',
+'ad.doubleclick.net.67363.9336.302br.net',
+'ad.doubleclick.net.67365.9336.302br.net',
+'ad.doubleclick.net.67368.9336.302br.net',
+'ad.doubleclick.net.67371.9336.302br.net',
+'ad.doubleclick.net.67374.9336.302br.net',
+'ad.doubleclick.net.67375.9336.302br.net',
+'ad.doubleclick.net.67377.9336.302br.net',
+'ad.doubleclick.net.67378.9336.302br.net',
+'ad.doubleclick.net.67380.9336.302br.net',
+'ad.doubleclick.net.67381.9336.302br.net',
+'ad.doubleclick.net.67383.9336.302br.net',
+'ad.doubleclick.net.67386.9336.302br.net',
+'ad.doubleclick.net.67389.9336.302br.net',
+'ad.doubleclick.net.67392.9336.302br.net',
+'ad.doubleclick.net.67395.9336.302br.net',
+'ad.doubleclick.net.67396.9336.302br.net',
+'ad.doubleclick.net.67398.9336.302br.net',
+'ad.doubleclick.net.67399.9336.302br.net',
+'ad.doubleclick.net.67401.9336.302br.net',
+'ad.doubleclick.net.67402.9336.302br.net',
+'ad.doubleclick.net.67404.9336.302br.net',
+'ad.doubleclick.net.67405.9336.302br.net',
+'ad.doubleclick.net.67407.9336.302br.net',
+'ad.doubleclick.net.67408.9336.302br.net',
+'ad.doubleclick.net.67410.9336.302br.net',
+'ad.doubleclick.net.67411.9336.302br.net',
+'ad.doubleclick.net.67413.9336.302br.net',
+'ad.doubleclick.net.67416.9336.302br.net',
+'ad.doubleclick.net.67419.9336.302br.net',
+'ad.doubleclick.net.67422.9336.302br.net',
+'ad.doubleclick.net.67425.9336.302br.net',
+'ad.doubleclick.net.67426.9336.302br.net',
+'ad.doubleclick.net.67430.9336.302br.net',
+'ad.doubleclick.net.67431.9336.302br.net',
+'ad.doubleclick.net.67432.9336.302br.net',
+'ad.doubleclick.net.67436.9336.302br.net',
+'ad.doubleclick.net.67437.9336.302br.net',
+'ad.doubleclick.net.67438.9336.302br.net',
+'ad.doubleclick.net.67439.9336.302br.net',
+'ad.doubleclick.net.67440.9336.302br.net',
+'ad.doubleclick.net.67441.9336.302br.net',
+'ad.doubleclick.net.67442.9336.302br.net',
+'ad.doubleclick.net.67443.9336.302br.net',
+'ad.doubleclick.net.67444.9336.302br.net',
+'ad.doubleclick.net.67445.9336.302br.net',
+'ad.doubleclick.net.67446.9336.302br.net',
+'ad.doubleclick.net.67447.9336.302br.net',
+'ad.doubleclick.net.67449.9336.302br.net',
+'ad.doubleclick.net.67450.9336.302br.net',
+'ad.doubleclick.net.67451.9336.302br.net',
+'ad.doubleclick.net.67452.9336.302br.net',
+'ad.doubleclick.net.67453.9336.302br.net',
+'ad.doubleclick.net.67454.9336.302br.net',
+'ad.doubleclick.net.67455.9336.302br.net',
+'ad.doubleclick.net.67456.9336.302br.net',
+'ad.doubleclick.net.67458.9336.302br.net',
+'ad.doubleclick.net.67459.9336.302br.net',
+'ad.doubleclick.net.67461.9336.302br.net',
+'ad.doubleclick.net.67462.9336.302br.net',
+'ad.doubleclick.net.67464.9336.302br.net',
+'ad.doubleclick.net.67465.9336.302br.net',
+'ad.doubleclick.net.67467.9336.302br.net',
+'ad.doubleclick.net.67468.9336.302br.net',
+'ad.doubleclick.net.67470.9336.302br.net',
+'ad.doubleclick.net.67473.9336.302br.net',
+'ad.doubleclick.net.67476.9336.302br.net',
+'ad.doubleclick.net.67479.9336.302br.net',
+'ad.doubleclick.net.67480.9336.302br.net',
+'ad.doubleclick.net.67485.9336.302br.net',
+'ad.doubleclick.net.67488.9336.302br.net',
+'ad.doubleclick.net.67489.9336.302br.net',
+'ad.doubleclick.net.67491.9336.302br.net',
+'ad.doubleclick.net.67494.9336.302br.net',
+'ad.doubleclick.net.67497.9336.302br.net',
+'ad.doubleclick.net.67498.9336.302br.net',
+'ad.doubleclick.net.67500.9336.302br.net',
+'ad.doubleclick.net.67501.9336.302br.net',
+'ad.doubleclick.net.67503.9336.302br.net',
+'ad.doubleclick.net.67512.9336.302br.net',
+'ad.doubleclick.net.67515.9336.302br.net',
+'ad.doubleclick.net.67518.9336.302br.net',
+'ad.doubleclick.net.67519.9336.302br.net',
+'ad.doubleclick.net.67521.9336.302br.net',
+'ad.doubleclick.net.67524.9336.302br.net',
+'ad.doubleclick.net.67530.9336.302br.net',
+'ad.doubleclick.net.67533.9336.302br.net',
+'ad.doubleclick.net.67536.9336.302br.net',
+'ad.doubleclick.net.67539.9336.302br.net',
+'ad.doubleclick.net.67545.9336.302br.net',
+'ad.doubleclick.net.67546.9336.302br.net',
+'ad.doubleclick.net.67548.9336.302br.net',
+'ad.doubleclick.net.67549.9336.302br.net',
+'ad.doubleclick.net.67551.9336.302br.net',
+'ad.doubleclick.net.67552.9336.302br.net',
+'ad.doubleclick.net.67554.9336.302br.net',
+'ad.doubleclick.net.67557.9336.302br.net',
+'ad.doubleclick.net.67558.9336.302br.net',
+'ad.doubleclick.net.67560.9336.302br.net',
+'ad.doubleclick.net.67561.9336.302br.net',
+'ad.doubleclick.net.67563.9336.302br.net',
+'ad.doubleclick.net.67564.9336.302br.net',
+'ad.doubleclick.net.67566.9336.302br.net',
+'ad.doubleclick.net.67567.9336.302br.net',
+'ad.doubleclick.net.67568.9336.302br.net',
+'ad.doubleclick.net.67569.9336.302br.net',
+'ad.doubleclick.net.67570.9336.302br.net',
+'ad.doubleclick.net.67571.9336.302br.net',
+'ad.doubleclick.net.67572.9336.302br.net',
+'ad.doubleclick.net.67573.9336.302br.net',
+'ad.doubleclick.net.67575.9336.302br.net',
+'ad.doubleclick.net.67576.9336.302br.net',
+'ad.doubleclick.net.67578.9336.302br.net',
+'ad.doubleclick.net.67579.9336.302br.net',
+'ad.doubleclick.net.67580.9336.302br.net',
+'ad.doubleclick.net.67581.9336.302br.net',
+'ad.doubleclick.net.67582.9336.302br.net',
+'ad.doubleclick.net.67584.9336.302br.net',
+'ad.doubleclick.net.67587.9336.302br.net',
+'ad.doubleclick.net.67589.9515.302br.net',
+'ad.doubleclick.net.67590.9515.302br.net',
+'ad.doubleclick.net.67591.9515.302br.net',
+'ad.doubleclick.net.67592.9515.302br.net',
+'ad.doubleclick.net.67593.9515.302br.net',
+'ad.doubleclick.net.67594.9515.302br.net',
+'ad.doubleclick.net.68039.9530.302br.net',
+'ad.doubleclick.net.68040.9164.302br.net',
+'ad.doubleclick.net.68041.9164.302br.net',
+'ad.doubleclick.net.68042.9164.302br.net',
+'ad.doubleclick.net.68043.9164.302br.net',
+'ad.doubleclick.net.68044.9164.302br.net',
+'ad.doubleclick.net.68045.9164.302br.net',
+'ad.doubleclick.net.68061.9164.302br.net',
+'ad.doubleclick.net.68062.9164.302br.net',
+'ad.doubleclick.net.68063.9164.302br.net',
+'ad.doubleclick.net.68067.9164.302br.net',
+'ad.doubleclick.net.68068.9164.302br.net',
+'ad.doubleclick.net.68069.9164.302br.net',
+'ad.doubleclick.net.68070.9164.302br.net',
+'ad.doubleclick.net.68071.9164.302br.net',
+'ad.doubleclick.net.68072.9164.302br.net',
+'ad.doubleclick.net.68074.9164.302br.net',
+'ad.doubleclick.net.68075.9164.302br.net',
+'ad.doubleclick.net.68085.9164.302br.net',
+'ad.doubleclick.net.68086.9164.302br.net',
+'ad.doubleclick.net.68087.9164.302br.net',
+'ad.doubleclick.net.68088.9164.302br.net',
+'ad.doubleclick.net.68089.9164.302br.net',
+'ad.doubleclick.net.68090.9164.302br.net',
+'ad.doubleclick.net.68091.9164.302br.net',
+'ad.doubleclick.net.68092.9164.302br.net',
+'ad.doubleclick.net.68093.9164.302br.net',
+'ad.doubleclick.net.68104.9322.302br.net',
+'ad.doubleclick.net.68107.9322.302br.net',
+'ad.doubleclick.net.68110.9322.302br.net',
+'ad.doubleclick.net.68113.9322.302br.net',
+'ad.doubleclick.net.68116.9322.302br.net',
+'ad.doubleclick.net.68118.9485.302br.net',
+'ad.doubleclick.net.68119.9485.302br.net',
+'ad.doubleclick.net.68120.9485.302br.net',
+'ad.doubleclick.net.68121.9485.302br.net',
+'ad.doubleclick.net.68122.9485.302br.net',
+'ad.doubleclick.net.68123.9485.302br.net',
+'ad.doubleclick.net.68124.9535.302br.net',
+'ad.doubleclick.net.68126.9535.302br.net',
+'ad.doubleclick.net.68129.9535.302br.net',
+'ad.doubleclick.net.68132.9485.302br.net',
+'ad.doubleclick.net.68134.9485.302br.net',
+'ad.doubleclick.net.68136.9485.302br.net',
+'ad.doubleclick.net.68153.9538.302br.net',
+'ad.doubleclick.net.68156.9538.302br.net',
+'ad.doubleclick.net.68159.9538.302br.net',
+'ad.doubleclick.net.68168.9538.302br.net',
+'ad.doubleclick.net.68171.9539.302br.net',
+'ad.doubleclick.net.68302.9418.302br.net',
+'ad.doubleclick.net.68303.9418.302br.net',
+'ad.doubleclick.net.68304.9418.302br.net',
+'ad.doubleclick.net.68306.9418.302br.net',
+'ad.doubleclick.net.68307.9418.302br.net',
+'ad.doubleclick.net.68308.9418.302br.net',
+'ad.doubleclick.net.68309.9418.302br.net',
+'ad.doubleclick.net.68310.9418.302br.net',
+'ad.doubleclick.net.68312.9418.302br.net',
+'ad.doubleclick.net.68313.9418.302br.net',
+'ad.doubleclick.net.68314.9418.302br.net',
+'ad.doubleclick.net.68315.9418.302br.net',
+'ad.doubleclick.net.68316.9418.302br.net',
+'ad.doubleclick.net.68318.9418.302br.net',
+'ad.doubleclick.net.68319.9418.302br.net',
+'ad.doubleclick.net.68320.9418.302br.net',
+'ad.doubleclick.net.68321.9418.302br.net',
+'ad.doubleclick.net.68322.9418.302br.net',
+'ad.doubleclick.net.68324.9418.302br.net',
+'ad.doubleclick.net.68325.9418.302br.net',
+'ad.doubleclick.net.68326.9418.302br.net',
+'ad.doubleclick.net.68327.9418.302br.net',
+'ad.doubleclick.net.68328.9418.302br.net',
+'ad.doubleclick.net.68329.9418.302br.net',
+'ad.doubleclick.net.68330.9418.302br.net',
+'ad.doubleclick.net.68331.9418.302br.net',
+'ad.doubleclick.net.68332.9418.302br.net',
+'ad.doubleclick.net.68333.9418.302br.net',
+'ad.doubleclick.net.68334.9418.302br.net',
+'ad.doubleclick.net.68336.9418.302br.net',
+'ad.doubleclick.net.68337.9418.302br.net',
+'ad.doubleclick.net.68339.9418.302br.net',
+'ad.doubleclick.net.68340.9418.302br.net',
+'ad.doubleclick.net.68341.9418.302br.net',
+'ad.doubleclick.net.68342.9418.302br.net',
+'ad.doubleclick.net.68343.9418.302br.net',
+'ad.doubleclick.net.68345.9418.302br.net',
+'ad.doubleclick.net.68346.9418.302br.net',
+'ad.doubleclick.net.68347.9418.302br.net',
+'ad.doubleclick.net.68348.9418.302br.net',
+'ad.doubleclick.net.68349.9418.302br.net',
+'ad.doubleclick.net.68350.9418.302br.net',
+'ad.doubleclick.net.68351.9418.302br.net',
+'ad.doubleclick.net.68352.9418.302br.net',
+'ad.doubleclick.net.68353.9418.302br.net',
+'ad.doubleclick.net.68354.9418.302br.net',
+'ad.doubleclick.net.68355.9418.302br.net',
+'ad.doubleclick.net.68377.9544.302br.net',
+'ad.doubleclick.net.68378.9544.302br.net',
+'ad.doubleclick.net.68380.9544.302br.net',
+'ad.doubleclick.net.68381.9544.302br.net',
+'ad.doubleclick.net.68382.9544.302br.net',
+'ad.doubleclick.net.68383.9544.302br.net',
+'ad.doubleclick.net.68384.9544.302br.net',
+'ad.doubleclick.net.68385.9544.302br.net',
+'ad.doubleclick.net.68386.9544.302br.net',
+'ad.doubleclick.net.68387.9544.302br.net',
+'ad.doubleclick.net.68388.9544.302br.net',
+'ad.doubleclick.net.68389.9544.302br.net',
+'ad.doubleclick.net.68390.9544.302br.net',
+'ad.doubleclick.net.68391.9544.302br.net',
+'ad.doubleclick.net.68392.9544.302br.net',
+'ad.doubleclick.net.68393.9544.302br.net',
+'ad.doubleclick.net.68394.9544.302br.net',
+'ad.doubleclick.net.68395.9544.302br.net',
+'ad.doubleclick.net.68396.9544.302br.net',
+'ad.doubleclick.net.68397.9544.302br.net',
+'ad.doubleclick.net.68400.9350.302br.net',
+'ad.doubleclick.net.68401.9350.302br.net',
+'ad.doubleclick.net.68403.9350.302br.net',
+'ad.doubleclick.net.68406.9350.302br.net',
+'ad.doubleclick.net.68473.9485.302br.net',
+'ad.doubleclick.net.68474.9485.302br.net',
+'ad.doubleclick.net.68475.9485.302br.net',
+'ad.doubleclick.net.68476.9485.302br.net',
+'ad.doubleclick.net.68477.9485.302br.net',
+'ad.doubleclick.net.68478.9485.302br.net',
+'ad.doubleclick.net.68479.9485.302br.net',
+'ad.doubleclick.net.68480.9485.302br.net',
+'ad.doubleclick.net.68481.9485.302br.net',
+'ad.doubleclick.net.68482.9485.302br.net',
+'ad.doubleclick.net.68483.9485.302br.net',
+'ad.doubleclick.net.68484.9485.302br.net',
+'ad.doubleclick.net.68485.9450.302br.net',
+'ad.doubleclick.net.68486.9450.302br.net',
+'ad.doubleclick.net.68487.9450.302br.net',
+'ad.doubleclick.net.68488.9450.302br.net',
+'ad.doubleclick.net.68489.9450.302br.net',
+'ad.doubleclick.net.68490.9450.302br.net',
+'ad.doubleclick.net.68498.9530.302br.net',
+'ad.doubleclick.net.68501.9530.302br.net',
+'ad.doubleclick.net.68508.9499.302br.net',
+'ad.doubleclick.net.68511.9499.302br.net',
+'ad.doubleclick.net.68512.9499.302br.net',
+'ad.doubleclick.net.68514.9499.302br.net',
+'ad.doubleclick.net.68517.9499.302br.net',
+'ad.doubleclick.net.68520.9499.302br.net',
+'ad.doubleclick.net.68523.9499.302br.net',
+'ad.doubleclick.net.68526.9499.302br.net',
+'ad.doubleclick.net.68529.9499.302br.net',
+'ad.doubleclick.net.68532.9499.302br.net',
+'ad.doubleclick.net.68533.9499.302br.net',
+'ad.doubleclick.net.68535.9499.302br.net',
+'ad.doubleclick.net.68536.9499.302br.net',
+'ad.doubleclick.net.68538.9499.302br.net',
+'ad.doubleclick.net.68539.9499.302br.net',
+'ad.doubleclick.net.68541.9499.302br.net',
+'ad.doubleclick.net.68542.9499.302br.net',
+'ad.doubleclick.net.68544.9499.302br.net',
+'ad.doubleclick.net.68545.9499.302br.net',
+'ad.doubleclick.net.68547.9499.302br.net',
+'ad.doubleclick.net.68550.9499.302br.net',
+'ad.doubleclick.net.68588.9499.302br.net',
+'ad.doubleclick.net.68594.9499.302br.net',
+'ad.doubleclick.net.68609.9499.302br.net',
+'ad.doubleclick.net.69424.9560.302br.net',
+'ad.doubleclick.net.69425.9560.302br.net',
+'ad.doubleclick.net.69427.9560.302br.net',
+'ad.doubleclick.net.69428.9560.302br.net',
+'ad.doubleclick.net.69430.9560.302br.net',
+'ad.doubleclick.net.69433.9560.302br.net',
+'ad.doubleclick.net.69434.9560.302br.net',
+'ad.doubleclick.net.69436.9560.302br.net',
+'ad.doubleclick.net.69439.9560.302br.net',
+'ad.doubleclick.net.69456.9566.302br.net',
+'ad.doubleclick.net.69457.9566.302br.net',
+'ad.doubleclick.net.69458.9566.302br.net',
+'ad.doubleclick.net.69483.9566.302br.net',
+'ad.doubleclick.net.69484.9566.302br.net',
+'ad.doubleclick.net.69485.9566.302br.net',
+'ad.doubleclick.net.69537.9566.302br.net',
+'ad.doubleclick.net.69538.9566.302br.net',
+'ad.doubleclick.net.69539.9566.302br.net',
+'ad.doubleclick.net.69541.9566.302br.net',
+'ad.doubleclick.net.69542.9566.302br.net',
+'ad.doubleclick.net.69543.9566.302br.net',
+'ad.doubleclick.net.69544.9566.302br.net',
+'ad.doubleclick.net.69545.9566.302br.net',
+'ad.doubleclick.net.69561.9569.302br.net',
+'ad.doubleclick.net.69562.9569.302br.net',
+'ad.doubleclick.net.69563.9569.302br.net',
+'ad.doubleclick.net.69564.9569.302br.net',
+'ad.doubleclick.net.69565.9569.302br.net',
+'ad.doubleclick.net.69566.9569.302br.net',
+'ad.doubleclick.net.69567.9569.302br.net',
+'ad.doubleclick.net.69568.9569.302br.net',
+'ad.doubleclick.net.69569.9569.302br.net',
+'ad.doubleclick.net.69570.9569.302br.net',
+'ad.doubleclick.net.69571.9569.302br.net',
+'ad.doubleclick.net.69572.9569.302br.net',
+'ad.doubleclick.net.69573.9569.302br.net',
+'ad.doubleclick.net.69574.9569.302br.net',
+'ad.doubleclick.net.69575.9569.302br.net',
+'ad.doubleclick.net.69651.9575.302br.net',
+'ad.doubleclick.net.69652.9575.302br.net',
+'ad.doubleclick.net.69653.9575.302br.net',
+'ad.doubleclick.net.69654.9575.302br.net',
+'ad.doubleclick.net.69655.9575.302br.net',
+'ad.doubleclick.net.69656.9575.302br.net',
+'ad.doubleclick.net.69657.9575.302br.net',
+'ad.doubleclick.net.69658.9575.302br.net',
+'ad.doubleclick.net.69659.9575.302br.net',
+'ad.doubleclick.net.69660.9575.302br.net',
+'ad.doubleclick.net.69661.9575.302br.net',
+'ad.doubleclick.net.69662.9575.302br.net',
+'ad.doubleclick.net.69663.9575.302br.net',
+'ad.doubleclick.net.69664.9575.302br.net',
+'ad.doubleclick.net.69665.9575.302br.net',
+'ad.doubleclick.net.69709.9350.302br.net',
+'ad.doubleclick.net.69712.9350.302br.net',
+'ad.doubleclick.net.69715.9350.302br.net',
+'ad.doubleclick.net.69718.9350.302br.net',
+'ad.doubleclick.net.69721.9350.302br.net',
+'ad.doubleclick.net.69724.9350.302br.net',
+'ad.doubleclick.net.70240.9289.302br.net',
+'ad.doubleclick.net.70241.9289.302br.net',
+'ad.doubleclick.net.70243.9289.302br.net',
+'ad.doubleclick.net.70244.9289.302br.net',
+'ad.doubleclick.net.70245.9584.302br.net',
+'ad.doubleclick.net.70246.9584.302br.net',
+'ad.doubleclick.net.70248.9584.302br.net',
+'ad.doubleclick.net.70249.9584.302br.net',
+'ad.doubleclick.net.70250.9584.302br.net',
+'ad.doubleclick.net.70251.9584.302br.net',
+'ad.doubleclick.net.70252.9584.302br.net',
+'ad.doubleclick.net.70253.9584.302br.net',
+'ad.doubleclick.net.70254.9584.302br.net',
+'ad.doubleclick.net.70256.9587.302br.net',
+'ad.doubleclick.net.70259.9587.302br.net',
+'ad.doubleclick.net.70260.9587.302br.net',
+'ad.doubleclick.net.70262.9587.302br.net',
+'ad.doubleclick.net.70263.9587.302br.net',
+'ad.doubleclick.net.70271.9587.302br.net',
+'ad.doubleclick.net.70277.9587.302br.net',
+'ad.doubleclick.net.70294.9589.302br.net',
+'ad.doubleclick.net.70295.9589.302br.net',
+'ad.doubleclick.net.70296.9589.302br.net',
+'ad.doubleclick.net.70297.9589.302br.net',
+'ad.doubleclick.net.70298.9589.302br.net',
+'ad.doubleclick.net.70299.9589.302br.net',
+'ad.doubleclick.net.70300.9589.302br.net',
+'ad.doubleclick.net.70301.9589.302br.net',
+'ad.doubleclick.net.70302.9589.302br.net',
+'ad.doubleclick.net.70304.9589.302br.net',
+'ad.doubleclick.net.70307.9589.302br.net',
+'ad.doubleclick.net.70310.9589.302br.net',
+'ad.doubleclick.net.70344.9589.302br.net',
+'ad.doubleclick.net.70347.9589.302br.net',
+'ad.doubleclick.net.70350.9589.302br.net',
+'ad.doubleclick.net.70353.9589.302br.net',
+'ad.doubleclick.net.70356.9589.302br.net',
+'ad.doubleclick.net.70359.9589.302br.net',
+'ad.doubleclick.net.70383.9594.302br.net',
+'ad.doubleclick.net.70386.9594.302br.net',
+'ad.doubleclick.net.70389.9594.302br.net',
+'ad.doubleclick.net.70392.9594.302br.net',
+'ad.doubleclick.net.70410.9594.302br.net',
+'ad.doubleclick.net.70413.9594.302br.net',
+'ad.doubleclick.net.70427.9538.302br.net',
+'ad.doubleclick.net.70581.9530.302br.net',
+'ad.doubleclick.net.70584.9530.302br.net',
+'ad.doubleclick.net.70587.9530.302br.net',
+'ad.doubleclick.net.70755.9499.302br.net',
+'ad.doubleclick.net.70964.9418.302br.net',
+'ad.doubleclick.net.70965.9418.302br.net',
+'ad.doubleclick.net.70966.9418.302br.net',
+'ad.doubleclick.net.70971.9418.302br.net',
+'ad.doubleclick.net.70977.9418.302br.net',
+'ad.doubleclick.net.70992.9418.302br.net',
+'ad.doubleclick.net.70993.9418.302br.net',
+'ad.doubleclick.net.71013.9418.302br.net',
+'ad.doubleclick.net.71014.9418.302br.net',
+'ad.doubleclick.net.71016.9418.302br.net',
+'ad.doubleclick.net.71017.9418.302br.net',
+'ad.doubleclick.net.71031.9418.302br.net',
+'ad.doubleclick.net.71032.9418.302br.net',
+'ad.doubleclick.net.71040.9418.302br.net',
+'ad.doubleclick.net.71041.9418.302br.net',
+'ad.doubleclick.net.71088.9418.302br.net',
+'ad.doubleclick.net.71089.9418.302br.net',
+'ad.doubleclick.net.71103.9418.302br.net',
+'ad.doubleclick.net.71104.9418.302br.net',
+'ad.doubleclick.net.71112.9418.302br.net',
+'ad.doubleclick.net.71113.9418.302br.net',
+'ad.doubleclick.net.71118.9418.302br.net',
+'ad.doubleclick.net.71119.9418.302br.net',
+'ad.doubleclick.net.71130.9418.302br.net',
+'ad.doubleclick.net.71151.9418.302br.net',
+'ad.doubleclick.net.71152.9418.302br.net',
+'ad.doubleclick.net.71154.9418.302br.net',
+'ad.doubleclick.net.71157.9418.302br.net',
+'ad.doubleclick.net.71158.9418.302br.net',
+'ad.doubleclick.net.71160.9418.302br.net',
+'ad.doubleclick.net.71175.9418.302br.net',
+'ad.doubleclick.net.71184.9418.302br.net',
+'ad.doubleclick.net.71185.9418.302br.net',
+'ad.doubleclick.net.71187.9418.302br.net',
+'ad.doubleclick.net.71188.9418.302br.net',
+'ad.doubleclick.net.71190.9418.302br.net',
+'ad.doubleclick.net.71199.9418.302br.net',
+'ad.doubleclick.net.71205.9418.302br.net',
+'ad.doubleclick.net.71214.9418.302br.net',
+'ad.doubleclick.net.71215.9418.302br.net',
+'ad.doubleclick.net.71217.9418.302br.net',
+'ad.doubleclick.net.71218.9418.302br.net',
+'ad.doubleclick.net.71221.9418.302br.net',
+'ad.doubleclick.net.71222.9418.302br.net',
+'ad.doubleclick.net.71224.9418.302br.net',
+'ad.doubleclick.net.71593.9598.302br.net',
+'ad.doubleclick.net.71595.9598.302br.net',
+'ad.doubleclick.net.71597.9598.302br.net',
+'ad.doubleclick.net.71599.9598.302br.net',
+'ad.doubleclick.net.71601.9598.302br.net',
+'ad.doubleclick.net.71603.9598.302br.net',
+'ad.doubleclick.net.71605.9598.302br.net',
+'ad.doubleclick.net.71606.9598.302br.net',
+'ad.doubleclick.net.71607.9598.302br.net',
+'ad.doubleclick.net.71619.9598.302br.net',
+'ad.doubleclick.net.71621.9598.302br.net',
+'ad.doubleclick.net.71623.9598.302br.net',
+'ad.doubleclick.net.71627.9598.302br.net',
+'ad.doubleclick.net.71629.9598.302br.net',
+'ad.doubleclick.net.71631.9598.302br.net',
+'ad.doubleclick.net.71633.9598.302br.net',
+'ad.doubleclick.net.71637.9598.302br.net',
+'ad.doubleclick.net.71639.9598.302br.net',
+'ad.doubleclick.net.71641.9598.302br.net',
+'ad.doubleclick.net.71642.9418.302br.net',
+'ad.doubleclick.net.71643.9418.302br.net',
+'ad.doubleclick.net.71644.9418.302br.net',
+'ad.doubleclick.net.71645.9176.302br.net',
+'ad.doubleclick.net.71646.9176.302br.net',
+'ad.doubleclick.net.71647.9176.302br.net',
+'ad.doubleclick.net.71654.9176.302br.net',
+'ad.doubleclick.net.71655.9176.302br.net',
+'ad.doubleclick.net.71656.9176.302br.net',
+'ad.doubleclick.net.71657.9176.302br.net',
+'ad.doubleclick.net.71658.9176.302br.net',
+'ad.doubleclick.net.71659.9176.302br.net',
+'ad.doubleclick.net.71660.9176.302br.net',
+'ad.doubleclick.net.71661.9176.302br.net',
+'ad.doubleclick.net.71662.9176.302br.net',
+'ad.doubleclick.net.71669.9176.302br.net',
+'ad.doubleclick.net.71670.9176.302br.net',
+'ad.doubleclick.net.71671.9176.302br.net',
+'ad.doubleclick.net.71678.9176.302br.net',
+'ad.doubleclick.net.71679.9176.302br.net',
+'ad.doubleclick.net.71680.9176.302br.net',
+'ad.doubleclick.net.71684.9176.302br.net',
+'ad.doubleclick.net.71685.9176.302br.net',
+'ad.doubleclick.net.71693.9176.302br.net',
+'ad.doubleclick.net.71694.9176.302br.net',
+'ad.doubleclick.net.71705.9176.302br.net',
+'ad.doubleclick.net.71706.9176.302br.net',
+'ad.doubleclick.net.71707.9176.302br.net',
+'ad.doubleclick.net.71708.9176.302br.net',
+'ad.doubleclick.net.71709.9176.302br.net',
+'ad.doubleclick.net.71710.9176.302br.net',
+'ad.doubleclick.net.71795.9603.302br.net',
+'ad.doubleclick.net.71796.9603.302br.net',
+'ad.doubleclick.net.71798.9603.302br.net',
+'ad.doubleclick.net.71799.9603.302br.net',
+'ad.doubleclick.net.71800.9603.302br.net',
+'ad.doubleclick.net.71801.9603.302br.net',
+'ad.doubleclick.net.71802.9603.302br.net',
+'ad.doubleclick.net.71803.9603.302br.net',
+'ad.doubleclick.net.71804.9603.302br.net',
+'ad.doubleclick.net.71805.9603.302br.net',
+'ad.doubleclick.net.71806.9603.302br.net',
+'ad.doubleclick.net.71807.9603.302br.net',
+'ad.doubleclick.net.71808.9603.302br.net',
+'ad.doubleclick.net.72205.9602.302br.net',
+'ad.doubleclick.net.72206.9602.302br.net',
+'ad.doubleclick.net.72207.9602.302br.net',
+'ad.doubleclick.net.72208.9602.302br.net',
+'ad.doubleclick.net.72209.9602.302br.net',
+'ad.doubleclick.net.72210.9602.302br.net',
+'ad.doubleclick.net.72211.9602.302br.net',
+'ad.doubleclick.net.72212.9602.302br.net',
+'ad.doubleclick.net.72213.9602.302br.net',
+'ad.doubleclick.net.72219.9369.302br.net',
+'ad.doubleclick.net.72222.9369.302br.net',
+'ad.doubleclick.net.72225.9369.302br.net',
+'ad.doubleclick.net.72227.9418.302br.net',
+'ad.doubleclick.net.72228.9418.302br.net',
+'ad.doubleclick.net.72229.9538.302br.net',
+'ad.doubleclick.net.72285.9381.302br.net',
+'ad.doubleclick.net.72286.9381.302br.net',
+'ad.doubleclick.net.72287.9381.302br.net',
+'ad.doubleclick.net.72313.9090.302br.net',
+'ad.doubleclick.net.72314.9090.302br.net',
+'ad.doubleclick.net.72316.9090.302br.net',
+'ad.doubleclick.net.72317.9090.302br.net',
+'ad.doubleclick.net.72319.9090.302br.net',
+'ad.doubleclick.net.72320.9090.302br.net',
+'ad.doubleclick.net.72323.9090.302br.net',
+'ad.doubleclick.net.72326.9090.302br.net',
+'ad.doubleclick.net.72332.9090.302br.net',
+'ad.doubleclick.net.72448.9607.302br.net',
+'ad.doubleclick.net.72451.9607.302br.net',
+'ad.doubleclick.net.72454.9607.302br.net',
+'ad.doubleclick.net.72457.9607.302br.net',
+'ad.doubleclick.net.72459.9607.302br.net',
+'ad.doubleclick.net.72460.9607.302br.net',
+'ad.doubleclick.net.72462.9607.302br.net',
+'ad.doubleclick.net.72463.9607.302br.net',
+'ad.doubleclick.net.72465.9607.302br.net',
+'ad.doubleclick.net.72466.9607.302br.net',
+'ad.doubleclick.net.72467.9607.302br.net',
+'ad.doubleclick.net.72468.9607.302br.net',
+'ad.doubleclick.net.72469.9607.302br.net',
+'ad.doubleclick.net.72470.9607.302br.net',
+'ad.doubleclick.net.72471.9607.302br.net',
+'ad.doubleclick.net.72472.9607.302br.net',
+'ad.doubleclick.net.72473.9607.302br.net',
+'ad.doubleclick.net.72474.9607.302br.net',
+'ad.doubleclick.net.72475.9607.302br.net',
+'ad.doubleclick.net.72476.9607.302br.net',
+'ad.doubleclick.net.72477.9607.302br.net',
+'ad.doubleclick.net.72478.9607.302br.net',
+'ad.doubleclick.net.72479.9607.302br.net',
+'ad.doubleclick.net.72480.9607.302br.net',
+'ad.doubleclick.net.72481.9607.302br.net',
+'ad.doubleclick.net.72482.9607.302br.net',
+'ad.doubleclick.net.72483.9608.302br.net',
+'ad.doubleclick.net.72484.9608.302br.net',
+'ad.doubleclick.net.72485.9608.302br.net',
+'ad.doubleclick.net.72486.9608.302br.net',
+'ad.doubleclick.net.72487.9608.302br.net',
+'ad.doubleclick.net.72488.9608.302br.net',
+'ad.doubleclick.net.72490.9608.302br.net',
+'ad.doubleclick.net.72491.9608.302br.net',
+'ad.doubleclick.net.72493.9608.302br.net',
+'ad.doubleclick.net.72494.9608.302br.net',
+'ad.doubleclick.net.72495.9608.302br.net',
+'ad.doubleclick.net.72496.9608.302br.net',
+'ad.doubleclick.net.72497.9608.302br.net',
+'ad.doubleclick.net.72498.9608.302br.net',
+'ad.doubleclick.net.72499.9608.302br.net',
+'ad.doubleclick.net.72500.9608.302br.net',
+'ad.doubleclick.net.72502.9608.302br.net',
+'ad.doubleclick.net.72503.9608.302br.net',
+'ad.doubleclick.net.72505.9608.302br.net',
+'ad.doubleclick.net.72508.9608.302br.net',
+'ad.doubleclick.net.72510.9608.302br.net',
+'ad.doubleclick.net.72511.9608.302br.net',
+'ad.doubleclick.net.72512.9608.302br.net',
+'ad.doubleclick.net.72514.9608.302br.net',
+'ad.doubleclick.net.72515.9608.302br.net',
+'ad.doubleclick.net.72570.9609.302br.net',
+'ad.doubleclick.net.72571.9609.302br.net',
+'ad.doubleclick.net.72572.9609.302br.net',
+'ad.doubleclick.net.72573.9609.302br.net',
+'ad.doubleclick.net.72574.9609.302br.net',
+'ad.doubleclick.net.72575.9609.302br.net',
+'ad.doubleclick.net.72576.9609.302br.net',
+'ad.doubleclick.net.72577.9609.302br.net',
+'ad.doubleclick.net.72578.9609.302br.net',
+'ad.doubleclick.net.72586.9604.302br.net',
+'ad.doubleclick.net.72587.9604.302br.net',
+'ad.doubleclick.net.72611.9450.302br.net',
+'ad.doubleclick.net.72613.9450.302br.net',
+'ad.doubleclick.net.72615.9450.302br.net',
+'ad.doubleclick.net.72617.9450.302br.net',
+'ad.doubleclick.net.72619.9450.302br.net',
+'ad.doubleclick.net.72621.9450.302br.net',
+'ad.doubleclick.net.72622.9450.302br.net',
+'ad.doubleclick.net.72623.9450.302br.net',
+'ad.doubleclick.net.72624.9450.302br.net',
+'ad.doubleclick.net.72625.9450.302br.net',
+'ad.doubleclick.net.72627.9450.302br.net',
+'ad.doubleclick.net.72629.9450.302br.net',
+'ad.doubleclick.net.72630.9450.302br.net',
+'ad.doubleclick.net.72631.9450.302br.net',
+'ad.doubleclick.net.72632.9450.302br.net',
+'ad.doubleclick.net.72633.9450.302br.net',
+'ad.doubleclick.net.72634.9450.302br.net',
+'ad.doubleclick.net.72635.9450.302br.net',
+'ad.doubleclick.net.72642.9450.302br.net',
+'ad.doubleclick.net.72643.9450.302br.net',
+'ad.doubleclick.net.72644.9450.302br.net',
+'ad.doubleclick.net.72645.9450.302br.net',
+'ad.doubleclick.net.72646.9450.302br.net',
+'ad.doubleclick.net.72647.9450.302br.net',
+'ad.doubleclick.net.72652.9450.302br.net',
+'ad.doubleclick.net.72653.9450.302br.net',
+'ad.doubleclick.net.72654.9450.302br.net',
+'ad.doubleclick.net.72655.9450.302br.net',
+'ad.doubleclick.net.72658.9450.302br.net',
+'ad.doubleclick.net.72659.9450.302br.net',
+'ad.doubleclick.net.72672.9450.302br.net',
+'ad.doubleclick.net.72673.9450.302br.net',
+'ad.doubleclick.net.72674.9450.302br.net',
+'ad.doubleclick.net.72675.9450.302br.net',
+'ad.doubleclick.net.72676.9450.302br.net',
+'ad.doubleclick.net.72677.9450.302br.net',
+'ad.doubleclick.net.72698.9450.302br.net',
+'ad.doubleclick.net.72699.9450.302br.net',
+'ad.doubleclick.net.72700.9450.302br.net',
+'ad.doubleclick.net.72701.9450.302br.net',
+'ad.doubleclick.net.72703.9450.302br.net',
+'ad.doubleclick.net.72705.9450.302br.net',
+'ad.doubleclick.net.72706.9450.302br.net',
+'ad.doubleclick.net.72707.9450.302br.net',
+'ad.doubleclick.net.72708.9450.302br.net',
+'ad.doubleclick.net.72709.9450.302br.net',
+'ad.doubleclick.net.72713.9450.302br.net',
+'ad.doubleclick.net.72714.9450.302br.net',
+'ad.doubleclick.net.72715.9450.302br.net',
+'ad.doubleclick.net.72717.9450.302br.net',
+'ad.doubleclick.net.72718.9450.302br.net',
+'ad.doubleclick.net.72719.9450.302br.net',
+'ad.doubleclick.net.72721.9450.302br.net',
+'ad.doubleclick.net.72722.9450.302br.net',
+'ad.doubleclick.net.72723.9450.302br.net',
+'ad.doubleclick.net.72733.9454.302br.net',
+'ad.doubleclick.net.72735.9454.302br.net',
+'ad.doubleclick.net.72737.9454.302br.net',
+'ad.doubleclick.net.72739.9454.302br.net',
+'ad.doubleclick.net.72741.9454.302br.net',
+'ad.doubleclick.net.72742.9450.302br.net',
+'ad.doubleclick.net.72743.9450.302br.net',
+'ad.doubleclick.net.72744.9450.302br.net',
+'ad.doubleclick.net.72745.9450.302br.net',
+'ad.doubleclick.net.72746.9450.302br.net',
+'ad.doubleclick.net.72747.9450.302br.net',
+'ad.doubleclick.net.72748.9450.302br.net',
+'ad.doubleclick.net.72749.9450.302br.net',
+'ad.doubleclick.net.72751.9369.302br.net',
+'ad.doubleclick.net.72754.9369.302br.net',
+'ad.doubleclick.net.72757.9369.302br.net',
+'ad.doubleclick.net.72760.9369.302br.net',
+'ad.doubleclick.net.72763.9369.302br.net',
+'ad.doubleclick.net.72766.9369.302br.net',
+'ad.doubleclick.net.72769.9369.302br.net',
+'ad.doubleclick.net.72772.9369.302br.net',
+'ad.doubleclick.net.72775.9369.302br.net',
+'ad.doubleclick.net.72778.9369.302br.net',
+'ad.doubleclick.net.72781.9369.302br.net',
+'ad.doubleclick.net.72784.9369.302br.net',
+'ad.doubleclick.net.72835.9613.302br.net',
+'ad.doubleclick.net.72836.9613.302br.net',
+'ad.doubleclick.net.72838.9613.302br.net',
+'ad.doubleclick.net.72839.9613.302br.net',
+'ad.doubleclick.net.72841.9613.302br.net',
+'ad.doubleclick.net.72842.9613.302br.net',
+'ad.doubleclick.net.72844.9613.302br.net',
+'ad.doubleclick.net.72845.9613.302br.net',
+'ad.doubleclick.net.72847.9613.302br.net',
+'ad.doubleclick.net.72848.9613.302br.net',
+'ad.doubleclick.net.72850.9613.302br.net',
+'ad.doubleclick.net.72851.9613.302br.net',
+'ad.doubleclick.net.72893.9624.302br.net',
+'ad.doubleclick.net.72967.9515.302br.net',
+'ad.doubleclick.net.72968.9515.302br.net',
+'ad.doubleclick.net.72969.9515.302br.net',
+'ad.doubleclick.net.72970.9515.302br.net',
+'ad.doubleclick.net.72994.9322.302br.net',
+'ad.doubleclick.net.73000.9322.302br.net',
+'ad.doubleclick.net.73003.9322.302br.net',
+'ad.doubleclick.net.73101.9616.302br.net',
+'ad.doubleclick.net.73104.9616.302br.net',
+'ad.doubleclick.net.73108.9617.302br.net',
+'ad.doubleclick.net.73109.9617.302br.net',
+'ad.doubleclick.net.73110.9617.302br.net',
+'ad.doubleclick.net.73114.9617.302br.net',
+'ad.doubleclick.net.73136.9617.302br.net',
+'ad.doubleclick.net.73138.9617.302br.net',
+'ad.doubleclick.net.73139.9617.302br.net',
+'ad.doubleclick.net.73141.9617.302br.net',
+'ad.doubleclick.net.73142.9617.302br.net',
+'ad.doubleclick.net.73143.9617.302br.net',
+'ad.doubleclick.net.73147.9617.302br.net',
+'ad.doubleclick.net.73148.9617.302br.net',
+'ad.doubleclick.net.73149.9617.302br.net',
+'ad.doubleclick.net.73150.9617.302br.net',
+'ad.doubleclick.net.73153.9617.302br.net',
+'ad.doubleclick.net.73154.9617.302br.net',
+'ad.doubleclick.net.73155.9617.302br.net',
+'ad.doubleclick.net.73156.9617.302br.net',
+'ad.doubleclick.net.73157.9617.302br.net',
+'ad.doubleclick.net.73158.9617.302br.net',
+'ad.doubleclick.net.73166.9620.302br.net',
+'ad.doubleclick.net.73167.9620.302br.net',
+'ad.doubleclick.net.73168.9620.302br.net',
+'ad.doubleclick.net.73169.9620.302br.net',
+'ad.doubleclick.net.73170.9620.302br.net',
+'ad.doubleclick.net.73171.9620.302br.net',
+'ad.doubleclick.net.73172.9620.302br.net',
+'ad.doubleclick.net.73173.9620.302br.net',
+'ad.doubleclick.net.73174.9620.302br.net',
+'ad.doubleclick.net.73175.9620.302br.net',
+'ad.doubleclick.net.73176.9620.302br.net',
+'ad.doubleclick.net.73177.9620.302br.net',
+'ad.doubleclick.net.73178.9620.302br.net',
+'ad.doubleclick.net.73179.9620.302br.net',
+'ad.doubleclick.net.73180.9620.302br.net',
+'ad.doubleclick.net.73181.9620.302br.net',
+'ad.doubleclick.net.73182.9620.302br.net',
+'ad.doubleclick.net.73183.9620.302br.net',
+'ad.doubleclick.net.73187.9617.302br.net',
+'ad.doubleclick.net.73188.9617.302br.net',
+'ad.doubleclick.net.73189.9617.302br.net',
+'ad.doubleclick.net.73190.9617.302br.net',
+'ad.doubleclick.net.73191.9617.302br.net',
+'ad.doubleclick.net.73192.9617.302br.net',
+'ad.doubleclick.net.73194.9616.302br.net',
+'ad.doubleclick.net.73197.9616.302br.net',
+'ad.doubleclick.net.73203.9616.302br.net',
+'ad.doubleclick.net.73209.9616.302br.net',
+'ad.doubleclick.net.73273.9423.302br.net',
+'ad.doubleclick.net.73276.9423.302br.net',
+'ad.doubleclick.net.73279.9423.302br.net',
+'ad.doubleclick.net.73282.9423.302br.net',
+'ad.doubleclick.net.73285.9423.302br.net',
+'ad.doubleclick.net.73288.9423.302br.net',
+'ad.doubleclick.net.73291.9423.302br.net',
+'ad.doubleclick.net.73294.9423.302br.net',
+'ad.doubleclick.net.73297.9423.302br.net',
+'ad.doubleclick.net.73300.9423.302br.net',
+'ad.doubleclick.net.73303.9423.302br.net',
+'ad.doubleclick.net.73304.9423.302br.net',
+'ad.doubleclick.net.73306.9423.302br.net',
+'ad.doubleclick.net.73309.9423.302br.net',
+'ad.doubleclick.net.73312.9423.302br.net',
+'ad.doubleclick.net.73318.9423.302br.net',
+'ad.doubleclick.net.73321.9423.302br.net',
+'ad.doubleclick.net.73324.9423.302br.net',
+'ad.doubleclick.net.73327.9423.302br.net',
+'ad.doubleclick.net.73330.9423.302br.net',
+'ad.doubleclick.net.73344.9621.302br.net',
+'ad.doubleclick.net.73345.9621.302br.net',
+'ad.doubleclick.net.73347.9621.302br.net',
+'ad.doubleclick.net.73348.9621.302br.net',
+'ad.doubleclick.net.73350.9621.302br.net',
+'ad.doubleclick.net.73351.9621.302br.net',
+'ad.doubleclick.net.73353.9621.302br.net',
+'ad.doubleclick.net.73354.9621.302br.net',
+'ad.doubleclick.net.73356.9621.302br.net',
+'ad.doubleclick.net.73357.9621.302br.net',
+'ad.doubleclick.net.73359.9621.302br.net',
+'ad.doubleclick.net.73360.9621.302br.net',
+'ad.doubleclick.net.73362.9621.302br.net',
+'ad.doubleclick.net.73363.9621.302br.net',
+'ad.doubleclick.net.73365.9621.302br.net',
+'ad.doubleclick.net.73366.9621.302br.net',
+'ad.doubleclick.net.73368.9621.302br.net',
+'ad.doubleclick.net.73369.9621.302br.net',
+'ad.doubleclick.net.73370.9621.302br.net',
+'ad.doubleclick.net.73372.9621.302br.net',
+'ad.doubleclick.net.73373.9621.302br.net',
+'ad.doubleclick.net.73375.9621.302br.net',
+'ad.doubleclick.net.73376.9621.302br.net',
+'ad.doubleclick.net.73378.9621.302br.net',
+'ad.doubleclick.net.73379.9621.302br.net',
+'ad.doubleclick.net.73381.9621.302br.net',
+'ad.doubleclick.net.73382.9621.302br.net',
+'ad.doubleclick.net.73384.9621.302br.net',
+'ad.doubleclick.net.73385.9621.302br.net',
+'ad.doubleclick.net.73387.9621.302br.net',
+'ad.doubleclick.net.73388.9621.302br.net',
+'ad.doubleclick.net.73390.9621.302br.net',
+'ad.doubleclick.net.73391.9621.302br.net',
+'ad.doubleclick.net.73393.9621.302br.net',
+'ad.doubleclick.net.73394.9621.302br.net',
+'ad.doubleclick.net.73396.9621.302br.net',
+'ad.doubleclick.net.73397.9621.302br.net',
+'ad.doubleclick.net.73399.9621.302br.net',
+'ad.doubleclick.net.73400.9621.302br.net',
+'ad.doubleclick.net.73402.9621.302br.net',
+'ad.doubleclick.net.73403.9621.302br.net',
+'ad.doubleclick.net.73405.9621.302br.net',
+'ad.doubleclick.net.73406.9621.302br.net',
+'ad.doubleclick.net.73408.9621.302br.net',
+'ad.doubleclick.net.73409.9621.302br.net',
+'ad.doubleclick.net.73411.9621.302br.net',
+'ad.doubleclick.net.73412.9621.302br.net',
+'ad.doubleclick.net.73414.9621.302br.net',
+'ad.doubleclick.net.73415.9621.302br.net',
+'ad.doubleclick.net.73417.9621.302br.net',
+'ad.doubleclick.net.73418.9621.302br.net',
+'ad.doubleclick.net.73420.9621.302br.net',
+'ad.doubleclick.net.73421.9621.302br.net',
+'ad.doubleclick.net.73423.9621.302br.net',
+'ad.doubleclick.net.73424.9621.302br.net',
+'ad.doubleclick.net.73426.9621.302br.net',
+'ad.doubleclick.net.73427.9621.302br.net',
+'ad.doubleclick.net.73429.9621.302br.net',
+'ad.doubleclick.net.73430.9621.302br.net',
+'ad.doubleclick.net.73432.9621.302br.net',
+'ad.doubleclick.net.73434.9621.302br.net',
+'ad.doubleclick.net.73437.9621.302br.net',
+'ad.doubleclick.net.73440.9621.302br.net',
+'ad.doubleclick.net.73443.9621.302br.net',
+'ad.doubleclick.net.73446.9621.302br.net',
+'ad.doubleclick.net.73449.9621.302br.net',
+'ad.doubleclick.net.73497.9620.302br.net',
+'ad.doubleclick.net.73498.9620.302br.net',
+'ad.doubleclick.net.73500.9620.302br.net',
+'ad.doubleclick.net.73501.9620.302br.net',
+'ad.doubleclick.net.73503.9620.302br.net',
+'ad.doubleclick.net.73504.9620.302br.net',
+'ad.doubleclick.net.73505.9620.302br.net',
+'ad.doubleclick.net.73506.9620.302br.net',
+'ad.doubleclick.net.73507.9620.302br.net',
+'ad.doubleclick.net.73508.9620.302br.net',
+'ad.doubleclick.net.73509.9620.302br.net',
+'ad.doubleclick.net.73510.9620.302br.net',
+'ad.doubleclick.net.73511.9620.302br.net',
+'ad.doubleclick.net.73512.9620.302br.net',
+'ad.doubleclick.net.73513.9620.302br.net',
+'ad.doubleclick.net.73515.9620.302br.net',
+'ad.doubleclick.net.73517.9620.302br.net',
+'ad.doubleclick.net.73518.9620.302br.net',
+'ad.doubleclick.net.73519.9620.302br.net',
+'ad.doubleclick.net.73520.9620.302br.net',
+'ad.doubleclick.net.73521.9620.302br.net',
+'ad.doubleclick.net.73522.9620.302br.net',
+'ad.doubleclick.net.73523.9620.302br.net',
+'ad.doubleclick.net.73524.9620.302br.net',
+'ad.doubleclick.net.73525.9620.302br.net',
+'ad.doubleclick.net.73526.9620.302br.net',
+'ad.doubleclick.net.73527.9620.302br.net',
+'ad.doubleclick.net.73528.9620.302br.net',
+'ad.doubleclick.net.73529.9620.302br.net',
+'ad.doubleclick.net.73530.9620.302br.net',
+'ad.doubleclick.net.73531.9620.302br.net',
+'ad.doubleclick.net.73533.9620.302br.net',
+'ad.doubleclick.net.73534.9620.302br.net',
+'ad.doubleclick.net.73535.9620.302br.net',
+'ad.doubleclick.net.73536.9620.302br.net',
+'ad.doubleclick.net.73537.9620.302br.net',
+'ad.doubleclick.net.73538.9620.302br.net',
+'ad.doubleclick.net.73539.9620.302br.net',
+'ad.doubleclick.net.73540.9620.302br.net',
+'ad.doubleclick.net.73541.9619.302br.net',
+'ad.doubleclick.net.73542.9619.302br.net',
+'ad.doubleclick.net.73543.9619.302br.net',
+'ad.doubleclick.net.73544.9619.302br.net',
+'ad.doubleclick.net.73545.9619.302br.net',
+'ad.doubleclick.net.73546.9619.302br.net',
+'ad.doubleclick.net.73547.9619.302br.net',
+'ad.doubleclick.net.73549.9619.302br.net',
+'ad.doubleclick.net.73550.9619.302br.net',
+'ad.doubleclick.net.73551.9619.302br.net',
+'ad.doubleclick.net.73552.9619.302br.net',
+'ad.doubleclick.net.73553.9619.302br.net',
+'ad.doubleclick.net.73555.9619.302br.net',
+'ad.doubleclick.net.73556.9619.302br.net',
+'ad.doubleclick.net.73558.9619.302br.net',
+'ad.doubleclick.net.73559.9619.302br.net',
+'ad.doubleclick.net.73560.9619.302br.net',
+'ad.doubleclick.net.73561.9619.302br.net',
+'ad.doubleclick.net.73562.9619.302br.net',
+'ad.doubleclick.net.73563.9619.302br.net',
+'ad.doubleclick.net.73564.9619.302br.net',
+'ad.doubleclick.net.73565.9619.302br.net',
+'ad.doubleclick.net.73566.9619.302br.net',
+'ad.doubleclick.net.73567.9619.302br.net',
+'ad.doubleclick.net.73568.9619.302br.net',
+'ad.doubleclick.net.73570.9619.302br.net',
+'ad.doubleclick.net.73571.9619.302br.net',
+'ad.doubleclick.net.73573.9619.302br.net',
+'ad.doubleclick.net.73574.9619.302br.net',
+'ad.doubleclick.net.73576.9619.302br.net',
+'ad.doubleclick.net.73578.9619.302br.net',
+'ad.doubleclick.net.73579.9619.302br.net',
+'ad.doubleclick.net.73581.9619.302br.net',
+'ad.doubleclick.net.73582.9619.302br.net',
+'ad.doubleclick.net.73584.9619.302br.net',
+'ad.doubleclick.net.73585.9619.302br.net',
+'ad.doubleclick.net.73587.9619.302br.net',
+'ad.doubleclick.net.73588.9619.302br.net',
+'ad.doubleclick.net.73590.9619.302br.net',
+'ad.doubleclick.net.73591.9619.302br.net',
+'ad.doubleclick.net.73593.9619.302br.net',
+'ad.doubleclick.net.73594.9619.302br.net',
+'ad.doubleclick.net.73596.9619.302br.net',
+'ad.doubleclick.net.73597.9619.302br.net',
+'ad.doubleclick.net.73599.9619.302br.net',
+'ad.doubleclick.net.73600.9619.302br.net',
+'ad.doubleclick.net.73602.9619.302br.net',
+'ad.doubleclick.net.73603.9619.302br.net',
+'ad.doubleclick.net.73622.9620.302br.net',
+'ad.doubleclick.net.73624.9620.302br.net',
+'ad.doubleclick.net.73625.9620.302br.net',
+'ad.doubleclick.net.73627.9620.302br.net',
+'ad.doubleclick.net.73628.9620.302br.net',
+'ad.doubleclick.net.73630.9620.302br.net',
+'ad.doubleclick.net.73631.9620.302br.net',
+'ad.doubleclick.net.73633.9620.302br.net',
+'ad.doubleclick.net.73634.9620.302br.net',
+'ad.doubleclick.net.73636.9620.302br.net',
+'ad.doubleclick.net.73637.9620.302br.net',
+'ad.doubleclick.net.73639.9620.302br.net',
+'ad.doubleclick.net.73640.9620.302br.net',
+'ad.doubleclick.net.73642.9620.302br.net',
+'ad.doubleclick.net.73643.9620.302br.net',
+'ad.doubleclick.net.73645.9620.302br.net',
+'ad.doubleclick.net.73646.9620.302br.net',
+'ad.doubleclick.net.73648.9620.302br.net',
+'ad.doubleclick.net.73649.9620.302br.net',
+'ad.doubleclick.net.73651.9620.302br.net',
+'ad.doubleclick.net.73652.9620.302br.net',
+'ad.doubleclick.net.73654.9620.302br.net',
+'ad.doubleclick.net.73655.9620.302br.net',
+'ad.doubleclick.net.73657.9620.302br.net',
+'ad.doubleclick.net.73658.9620.302br.net',
+'ad.doubleclick.net.73660.9620.302br.net',
+'ad.doubleclick.net.73661.9620.302br.net',
+'ad.doubleclick.net.73663.9620.302br.net',
+'ad.doubleclick.net.73664.9620.302br.net',
+'ad.doubleclick.net.73666.9620.302br.net',
+'ad.doubleclick.net.73667.9620.302br.net',
+'ad.doubleclick.net.73669.9620.302br.net',
+'ad.doubleclick.net.73670.9620.302br.net',
+'ad.doubleclick.net.73672.9620.302br.net',
+'ad.doubleclick.net.73673.9620.302br.net',
+'ad.doubleclick.net.73675.9620.302br.net',
+'ad.doubleclick.net.73676.9619.302br.net',
+'ad.doubleclick.net.73678.9619.302br.net',
+'ad.doubleclick.net.73679.9619.302br.net',
+'ad.doubleclick.net.73681.9619.302br.net',
+'ad.doubleclick.net.73682.9619.302br.net',
+'ad.doubleclick.net.73684.9619.302br.net',
+'ad.doubleclick.net.73685.9619.302br.net',
+'ad.doubleclick.net.73687.9619.302br.net',
+'ad.doubleclick.net.73688.9619.302br.net',
+'ad.doubleclick.net.73690.9619.302br.net',
+'ad.doubleclick.net.73691.9619.302br.net',
+'ad.doubleclick.net.73693.9619.302br.net',
+'ad.doubleclick.net.73694.9619.302br.net',
+'ad.doubleclick.net.73696.9619.302br.net',
+'ad.doubleclick.net.73697.9619.302br.net',
+'ad.doubleclick.net.73699.9619.302br.net',
+'ad.doubleclick.net.73700.9619.302br.net',
+'ad.doubleclick.net.73702.9619.302br.net',
+'ad.doubleclick.net.73703.9618.302br.net',
+'ad.doubleclick.net.73705.9618.302br.net',
+'ad.doubleclick.net.73706.9618.302br.net',
+'ad.doubleclick.net.73708.9618.302br.net',
+'ad.doubleclick.net.73709.9618.302br.net',
+'ad.doubleclick.net.73711.9618.302br.net',
+'ad.doubleclick.net.73712.9618.302br.net',
+'ad.doubleclick.net.73714.9618.302br.net',
+'ad.doubleclick.net.73715.9618.302br.net',
+'ad.doubleclick.net.73717.9618.302br.net',
+'ad.doubleclick.net.73718.9618.302br.net',
+'ad.doubleclick.net.73720.9618.302br.net',
+'ad.doubleclick.net.73722.9620.302br.net',
+'ad.doubleclick.net.73725.9620.302br.net',
+'ad.doubleclick.net.73728.9620.302br.net',
+'ad.doubleclick.net.73731.9620.302br.net',
+'ad.doubleclick.net.73734.9620.302br.net',
+'ad.doubleclick.net.73737.9620.302br.net',
+'ad.doubleclick.net.73740.9619.302br.net',
+'ad.doubleclick.net.73743.9619.302br.net',
+'ad.doubleclick.net.73746.9619.302br.net',
+'ad.doubleclick.net.73749.9618.302br.net',
+'ad.doubleclick.net.73752.9618.302br.net',
+'ad.doubleclick.net.73755.9618.302br.net',
+'ad.doubleclick.net.73892.9624.302br.net',
+'ad.doubleclick.net.73893.9624.302br.net',
+'ad.doubleclick.net.74579.9336.302br.net',
+'ad.doubleclick.net.74580.9336.302br.net',
+'ad.doubleclick.net.74582.9336.302br.net',
+'ad.doubleclick.net.74583.9336.302br.net',
+'ad.doubleclick.net.74585.9336.302br.net',
+'ad.doubleclick.net.74586.9336.302br.net',
+'ad.doubleclick.net.74588.9336.302br.net',
+'ad.doubleclick.net.74591.9336.302br.net',
+'ad.doubleclick.net.74594.9336.302br.net',
+'ad.doubleclick.net.74597.9336.302br.net',
+'ad.doubleclick.net.74598.9336.302br.net',
+'ad.doubleclick.net.74600.9336.302br.net',
+'ad.doubleclick.net.74601.9336.302br.net',
+'ad.doubleclick.net.74603.9336.302br.net',
+'ad.doubleclick.net.74606.9336.302br.net',
+'ad.doubleclick.net.74609.9336.302br.net',
+'ad.doubleclick.net.74612.9336.302br.net',
+'ad.doubleclick.net.74613.9336.302br.net',
+'ad.doubleclick.net.74615.9336.302br.net',
+'ad.doubleclick.net.74618.9336.302br.net',
+'ad.doubleclick.net.74619.9336.302br.net',
+'ad.doubleclick.net.74621.9336.302br.net',
+'ad.doubleclick.net.74624.9336.302br.net',
+'ad.doubleclick.net.74627.9336.302br.net',
+'ad.doubleclick.net.74630.9336.302br.net',
+'ad.doubleclick.net.74631.9336.302br.net',
+'ad.doubleclick.net.74633.9336.302br.net',
+'ad.doubleclick.net.74636.9336.302br.net',
+'ad.doubleclick.net.74639.9336.302br.net',
+'ad.doubleclick.net.74642.9336.302br.net',
+'ad.doubleclick.net.74645.9336.302br.net',
+'ad.doubleclick.net.74648.9336.302br.net',
+'ad.doubleclick.net.74651.9336.302br.net',
+'ad.doubleclick.net.74654.9336.302br.net',
+'ad.doubleclick.net.74655.9336.302br.net',
+'ad.doubleclick.net.74657.9336.302br.net',
+'ad.doubleclick.net.74658.9336.302br.net',
+'ad.doubleclick.net.74660.9336.302br.net',
+'ad.doubleclick.net.74661.9336.302br.net',
+'ad.doubleclick.net.74663.9336.302br.net',
+'ad.doubleclick.net.74664.9336.302br.net',
+'ad.doubleclick.net.74666.9336.302br.net',
+'ad.doubleclick.net.74667.9336.302br.net',
+'ad.doubleclick.net.74669.9336.302br.net',
+'ad.doubleclick.net.74670.9336.302br.net',
+'ad.doubleclick.net.74672.9336.302br.net',
+'ad.doubleclick.net.74673.9336.302br.net',
+'ad.doubleclick.net.74675.9336.302br.net',
+'ad.doubleclick.net.74676.9336.302br.net',
+'ad.doubleclick.net.74678.9336.302br.net',
+'ad.doubleclick.net.74679.9336.302br.net',
+'ad.doubleclick.net.74681.9336.302br.net',
+'ad.doubleclick.net.74682.9336.302br.net',
+'ad.doubleclick.net.74684.9336.302br.net',
+'ad.doubleclick.net.74685.9336.302br.net',
+'ad.doubleclick.net.74687.9336.302br.net',
+'ad.doubleclick.net.74688.9336.302br.net',
+'ad.doubleclick.net.74690.9336.302br.net',
+'ad.doubleclick.net.74693.9336.302br.net',
+'ad.doubleclick.net.74694.9336.302br.net',
+'ad.doubleclick.net.74696.9336.302br.net',
+'ad.doubleclick.net.74697.9336.302br.net',
+'ad.doubleclick.net.74699.9336.302br.net',
+'ad.doubleclick.net.74700.9336.302br.net',
+'ad.doubleclick.net.74702.9336.302br.net',
+'ad.doubleclick.net.74703.9336.302br.net',
+'ad.doubleclick.net.74705.9336.302br.net',
+'ad.doubleclick.net.74708.9336.302br.net',
+'ad.doubleclick.net.74711.9336.302br.net',
+'ad.doubleclick.net.74714.9336.302br.net',
+'ad.doubleclick.net.74717.9336.302br.net',
+'ad.doubleclick.net.74720.9336.302br.net',
+'ad.doubleclick.net.74726.9336.302br.net',
+'ad.doubleclick.net.74729.9336.302br.net',
+'ad.doubleclick.net.74732.9336.302br.net',
+'ad.doubleclick.net.74735.9336.302br.net',
+'ad.doubleclick.net.74738.9336.302br.net',
+'ad.doubleclick.net.74741.9336.302br.net',
+'ad.doubleclick.net.74744.9336.302br.net',
+'ad.doubleclick.net.74747.9336.302br.net',
+'ad.doubleclick.net.74750.9336.302br.net',
+'ad.doubleclick.net.74753.9336.302br.net',
+'ad.doubleclick.net.74754.9336.302br.net',
+'ad.doubleclick.net.74756.9336.302br.net',
+'ad.doubleclick.net.74757.9336.302br.net',
+'ad.doubleclick.net.74759.9336.302br.net',
+'ad.doubleclick.net.74762.9336.302br.net',
+'ad.doubleclick.net.74763.9336.302br.net',
+'ad.doubleclick.net.74765.9336.302br.net',
+'ad.doubleclick.net.74766.9336.302br.net',
+'ad.doubleclick.net.74768.9336.302br.net',
+'ad.doubleclick.net.74771.9336.302br.net',
+'ad.doubleclick.net.74772.9336.302br.net',
+'ad.doubleclick.net.74774.9336.302br.net',
+'ad.doubleclick.net.74777.9336.302br.net',
+'ad.doubleclick.net.74780.9336.302br.net',
+'ad.doubleclick.net.74783.9336.302br.net',
+'ad.doubleclick.net.74786.9336.302br.net',
+'ad.doubleclick.net.74787.9336.302br.net',
+'ad.doubleclick.net.74789.9336.302br.net',
+'ad.doubleclick.net.74790.9336.302br.net',
+'ad.doubleclick.net.74792.9336.302br.net',
+'ad.doubleclick.net.74795.9336.302br.net',
+'ad.doubleclick.net.74796.9336.302br.net',
+'ad.doubleclick.net.74798.9336.302br.net',
+'ad.doubleclick.net.74799.9336.302br.net',
+'ad.doubleclick.net.74800.9336.302br.net',
+'ad.doubleclick.net.74801.9336.302br.net',
+'ad.doubleclick.net.74802.9336.302br.net',
+'ad.doubleclick.net.74804.9336.302br.net',
+'ad.doubleclick.net.74805.9336.302br.net',
+'ad.doubleclick.net.74807.9336.302br.net',
+'ad.doubleclick.net.74808.9336.302br.net',
+'ad.doubleclick.net.74810.9336.302br.net',
+'ad.doubleclick.net.74811.9336.302br.net',
+'ad.doubleclick.net.74813.9336.302br.net',
+'ad.doubleclick.net.74816.9336.302br.net',
+'ad.doubleclick.net.74817.9336.302br.net',
+'ad.doubleclick.net.74819.9336.302br.net',
+'ad.doubleclick.net.74820.9336.302br.net',
+'ad.doubleclick.net.74822.9336.302br.net',
+'ad.doubleclick.net.74823.9336.302br.net',
+'ad.doubleclick.net.74825.9336.302br.net',
+'ad.doubleclick.net.74826.9336.302br.net',
+'ad.doubleclick.net.74828.9336.302br.net',
+'ad.doubleclick.net.74829.9336.302br.net',
+'ad.doubleclick.net.74831.9336.302br.net',
+'ad.doubleclick.net.74834.9336.302br.net',
+'ad.doubleclick.net.74835.9336.302br.net',
+'ad.doubleclick.net.74837.9336.302br.net',
+'ad.doubleclick.net.74838.9336.302br.net',
+'ad.doubleclick.net.74843.9336.302br.net',
+'ad.doubleclick.net.74846.9336.302br.net',
+'ad.doubleclick.net.74849.9336.302br.net',
+'ad.doubleclick.net.74852.9336.302br.net',
+'ad.doubleclick.net.74853.9336.302br.net',
+'ad.doubleclick.net.74855.9336.302br.net',
+'ad.doubleclick.net.74856.9336.302br.net',
+'ad.doubleclick.net.74858.9336.302br.net',
+'ad.doubleclick.net.74861.9336.302br.net',
+'ad.doubleclick.net.74862.9336.302br.net',
+'ad.doubleclick.net.74864.9336.302br.net',
+'ad.doubleclick.net.74867.9336.302br.net',
+'ad.doubleclick.net.74870.9336.302br.net',
+'ad.doubleclick.net.74873.9336.302br.net',
+'ad.doubleclick.net.74876.9336.302br.net',
+'ad.doubleclick.net.74877.9336.302br.net',
+'ad.doubleclick.net.74879.9336.302br.net',
+'ad.doubleclick.net.74882.9336.302br.net',
+'ad.doubleclick.net.74885.9336.302br.net',
+'ad.doubleclick.net.74897.9336.302br.net',
+'ad.doubleclick.net.74898.9336.302br.net',
+'ad.doubleclick.net.74901.9336.302br.net',
+'ad.doubleclick.net.74903.9336.302br.net',
+'ad.doubleclick.net.74912.9336.302br.net',
+'ad.doubleclick.net.74915.9336.302br.net',
+'ad.doubleclick.net.74918.9336.302br.net',
+'ad.doubleclick.net.74919.9336.302br.net',
+'ad.doubleclick.net.74921.9336.302br.net',
+'ad.doubleclick.net.74922.9336.302br.net',
+'ad.doubleclick.net.74924.9336.302br.net',
+'ad.doubleclick.net.74925.9336.302br.net',
+'ad.doubleclick.net.74927.9336.302br.net',
+'ad.doubleclick.net.74928.9336.302br.net',
+'ad.doubleclick.net.74930.9336.302br.net',
+'ad.doubleclick.net.74936.9336.302br.net',
+'ad.doubleclick.net.74939.9336.302br.net',
+'ad.doubleclick.net.74940.9336.302br.net',
+'ad.doubleclick.net.74942.9336.302br.net',
+'ad.doubleclick.net.74943.9336.302br.net',
+'ad.doubleclick.net.74945.9336.302br.net',
+'ad.doubleclick.net.74948.9336.302br.net',
+'ad.doubleclick.net.74951.9336.302br.net',
+'ad.doubleclick.net.74953.9336.302br.net',
+'ad.doubleclick.net.74954.9336.302br.net',
+'ad.doubleclick.net.74955.9336.302br.net',
+'ad.doubleclick.net.74957.9336.302br.net',
+'ad.doubleclick.net.74958.9336.302br.net',
+'ad.doubleclick.net.74959.9336.302br.net',
+'ad.doubleclick.net.74960.9336.302br.net',
+'ad.doubleclick.net.74961.9336.302br.net',
+'ad.doubleclick.net.74963.9336.302br.net',
+'ad.doubleclick.net.74964.9336.302br.net',
+'ad.doubleclick.net.74966.9336.302br.net',
+'ad.doubleclick.net.74969.9336.302br.net',
+'ad.doubleclick.net.74970.9336.302br.net',
+'ad.doubleclick.net.74972.9336.302br.net',
+'ad.doubleclick.net.74973.9336.302br.net',
+'ad.doubleclick.net.74975.9336.302br.net',
+'ad.doubleclick.net.74976.9336.302br.net',
+'ad.doubleclick.net.74978.9336.302br.net',
+'ad.doubleclick.net.74981.9336.302br.net',
+'ad.doubleclick.net.74982.9336.302br.net',
+'ad.doubleclick.net.74984.9336.302br.net',
+'ad.doubleclick.net.74987.9336.302br.net',
+'ad.doubleclick.net.74988.9336.302br.net',
+'ad.doubleclick.net.74990.9336.302br.net',
+'ad.doubleclick.net.74993.9336.302br.net',
+'ad.doubleclick.net.74996.9336.302br.net',
+'ad.doubleclick.net.74997.9336.302br.net',
+'ad.doubleclick.net.74998.9336.302br.net',
+'ad.doubleclick.net.74999.9336.302br.net',
+'ad.doubleclick.net.75000.9336.302br.net',
+'ad.doubleclick.net.75002.9336.302br.net',
+'ad.doubleclick.net.75003.9336.302br.net',
+'ad.doubleclick.net.75005.9336.302br.net',
+'ad.doubleclick.net.75006.9336.302br.net',
+'ad.doubleclick.net.75007.9336.302br.net',
+'ad.doubleclick.net.75008.9336.302br.net',
+'ad.doubleclick.net.75009.9336.302br.net',
+'ad.doubleclick.net.75011.9336.302br.net',
+'ad.doubleclick.net.75012.9336.302br.net',
+'ad.doubleclick.net.75014.9336.302br.net',
+'ad.doubleclick.net.75015.9336.302br.net',
+'ad.doubleclick.net.75017.9336.302br.net',
+'ad.doubleclick.net.75018.9336.302br.net',
+'ad.doubleclick.net.75020.9336.302br.net',
+'ad.doubleclick.net.75021.9336.302br.net',
+'ad.doubleclick.net.75022.9336.302br.net',
+'ad.doubleclick.net.75023.9336.302br.net',
+'ad.doubleclick.net.75024.9336.302br.net',
+'ad.doubleclick.net.75026.9336.302br.net',
+'ad.doubleclick.net.75027.9336.302br.net',
+'ad.doubleclick.net.75028.9336.302br.net',
+'ad.doubleclick.net.75029.9336.302br.net',
+'ad.doubleclick.net.75030.9336.302br.net',
+'ad.doubleclick.net.75035.9336.302br.net',
+'ad.doubleclick.net.75038.9336.302br.net',
+'ad.doubleclick.net.75039.9336.302br.net',
+'ad.doubleclick.net.75040.9336.302br.net',
+'ad.doubleclick.net.75041.9336.302br.net',
+'ad.doubleclick.net.75042.9336.302br.net',
+'ad.doubleclick.net.75043.9336.302br.net',
+'ad.doubleclick.net.75044.9336.302br.net',
+'ad.doubleclick.net.75045.9336.302br.net',
+'ad.doubleclick.net.75047.9336.302br.net',
+'ad.doubleclick.net.75050.9336.302br.net',
+'ad.doubleclick.net.75053.9336.302br.net',
+'ad.doubleclick.net.75054.9336.302br.net',
+'ad.doubleclick.net.75056.9336.302br.net',
+'ad.doubleclick.net.75071.9336.302br.net',
+'ad.doubleclick.net.75074.9336.302br.net',
+'ad.doubleclick.net.75077.9336.302br.net',
+'ad.doubleclick.net.75080.9336.302br.net',
+'ad.doubleclick.net.75083.9336.302br.net',
+'ad.doubleclick.net.75084.9336.302br.net',
+'ad.doubleclick.net.75086.9336.302br.net',
+'ad.doubleclick.net.75089.9336.302br.net',
+'ad.doubleclick.net.75090.9336.302br.net',
+'ad.doubleclick.net.75092.9336.302br.net',
+'ad.doubleclick.net.75093.9336.302br.net',
+'ad.doubleclick.net.75095.9336.302br.net',
+'ad.doubleclick.net.75107.9336.302br.net',
+'ad.doubleclick.net.75110.9336.302br.net',
+'ad.doubleclick.net.75113.9336.302br.net',
+'ad.doubleclick.net.75114.9336.302br.net',
+'ad.doubleclick.net.75116.9336.302br.net',
+'ad.doubleclick.net.75117.9336.302br.net',
+'ad.doubleclick.net.75119.9336.302br.net',
+'ad.doubleclick.net.75120.9336.302br.net',
+'ad.doubleclick.net.75122.9336.302br.net',
+'ad.doubleclick.net.75123.9336.302br.net',
+'ad.doubleclick.net.75125.9336.302br.net',
+'ad.doubleclick.net.75128.9336.302br.net',
+'ad.doubleclick.net.75129.9336.302br.net',
+'ad.doubleclick.net.75131.9336.302br.net',
+'ad.doubleclick.net.75132.9336.302br.net',
+'ad.doubleclick.net.75134.9336.302br.net',
+'ad.doubleclick.net.75135.9336.302br.net',
+'ad.doubleclick.net.75136.9336.302br.net',
+'ad.doubleclick.net.75137.9336.302br.net',
+'ad.doubleclick.net.75138.9336.302br.net',
+'ad.doubleclick.net.75139.9336.302br.net',
+'ad.doubleclick.net.75140.9336.302br.net',
+'ad.doubleclick.net.75141.9336.302br.net',
+'ad.doubleclick.net.75142.9336.302br.net',
+'ad.doubleclick.net.75143.9336.302br.net',
+'ad.doubleclick.net.75144.9336.302br.net',
+'ad.doubleclick.net.75145.9336.302br.net',
+'ad.doubleclick.net.75146.9336.302br.net',
+'ad.doubleclick.net.75147.9336.302br.net',
+'ad.doubleclick.net.75148.9336.302br.net',
+'ad.doubleclick.net.75149.9336.302br.net',
+'ad.doubleclick.net.75150.9336.302br.net',
+'ad.doubleclick.net.75151.9336.302br.net',
+'ad.doubleclick.net.75152.9336.302br.net',
+'ad.doubleclick.net.75153.9336.302br.net',
+'ad.doubleclick.net.75155.9336.302br.net',
+'ad.doubleclick.net.75158.9336.302br.net',
+'ad.doubleclick.net.75161.9336.302br.net',
+'ad.doubleclick.net.75162.9336.302br.net',
+'ad.doubleclick.net.75164.9336.302br.net',
+'ad.doubleclick.net.75165.9336.302br.net',
+'ad.doubleclick.net.75167.9336.302br.net',
+'ad.doubleclick.net.75168.9336.302br.net',
+'ad.doubleclick.net.75170.9336.302br.net',
+'ad.doubleclick.net.75171.9336.302br.net',
+'ad.doubleclick.net.75173.9336.302br.net',
+'ad.doubleclick.net.75176.9336.302br.net',
+'ad.doubleclick.net.75177.9336.302br.net',
+'ad.doubleclick.net.75179.9336.302br.net',
+'ad.doubleclick.net.75180.9336.302br.net',
+'ad.doubleclick.net.75182.9336.302br.net',
+'ad.doubleclick.net.75185.9336.302br.net',
+'ad.doubleclick.net.75186.9336.302br.net',
+'ad.doubleclick.net.75188.9336.302br.net',
+'ad.doubleclick.net.75189.9336.302br.net',
+'ad.doubleclick.net.75191.9336.302br.net',
+'ad.doubleclick.net.75192.9336.302br.net',
+'ad.doubleclick.net.75194.9336.302br.net',
+'ad.doubleclick.net.75195.9336.302br.net',
+'ad.doubleclick.net.75197.9336.302br.net',
+'ad.doubleclick.net.75198.9336.302br.net',
+'ad.doubleclick.net.75200.9336.302br.net',
+'ad.doubleclick.net.75201.9336.302br.net',
+'ad.doubleclick.net.75203.9336.302br.net',
+'ad.doubleclick.net.75204.9336.302br.net',
+'ad.doubleclick.net.75206.9336.302br.net',
+'ad.doubleclick.net.75207.9336.302br.net',
+'ad.doubleclick.net.75209.9336.302br.net',
+'ad.doubleclick.net.75210.9336.302br.net',
+'ad.doubleclick.net.75212.9336.302br.net',
+'ad.doubleclick.net.75213.9336.302br.net',
+'ad.doubleclick.net.75218.9336.302br.net',
+'ad.doubleclick.net.75219.9336.302br.net',
+'ad.doubleclick.net.75221.9336.302br.net',
+'ad.doubleclick.net.75222.9336.302br.net',
+'ad.doubleclick.net.75224.9336.302br.net',
+'ad.doubleclick.net.75225.9336.302br.net',
+'ad.doubleclick.net.75227.9336.302br.net',
+'ad.doubleclick.net.75228.9336.302br.net',
+'ad.doubleclick.net.75230.9336.302br.net',
+'ad.doubleclick.net.75233.9336.302br.net',
+'ad.doubleclick.net.75236.9336.302br.net',
+'ad.doubleclick.net.75242.9336.302br.net',
+'ad.doubleclick.net.75245.9336.302br.net',
+'ad.doubleclick.net.75246.9336.302br.net',
+'ad.doubleclick.net.75248.9336.302br.net',
+'ad.doubleclick.net.75249.9336.302br.net',
+'ad.doubleclick.net.75251.9336.302br.net',
+'ad.doubleclick.net.75252.9336.302br.net',
+'ad.doubleclick.net.75254.9336.302br.net',
+'ad.doubleclick.net.75255.9336.302br.net',
+'ad.doubleclick.net.75257.9336.302br.net',
+'ad.doubleclick.net.75258.9336.302br.net',
+'ad.doubleclick.net.75260.9336.302br.net',
+'ad.doubleclick.net.75261.9336.302br.net',
+'ad.doubleclick.net.75288.9112.302br.net',
+'ad.doubleclick.net.75289.9112.302br.net',
+'ad.doubleclick.net.75291.9112.302br.net',
+'ad.doubleclick.net.75294.9112.302br.net',
+'ad.doubleclick.net.75295.9625.302br.net',
+'ad.doubleclick.net.75296.9625.302br.net',
+'ad.doubleclick.net.75297.9625.302br.net',
+'ad.doubleclick.net.75298.9625.302br.net',
+'ad.doubleclick.net.75299.9625.302br.net',
+'ad.doubleclick.net.75300.9625.302br.net',
+'ad.doubleclick.net.75301.9625.302br.net',
+'ad.doubleclick.net.75302.9625.302br.net',
+'ad.doubleclick.net.75303.9625.302br.net',
+'ad.doubleclick.net.75305.9625.302br.net',
+'ad.doubleclick.net.75306.9625.302br.net',
+'ad.doubleclick.net.75307.9625.302br.net',
+'ad.doubleclick.net.75308.9625.302br.net',
+'ad.doubleclick.net.75309.9625.302br.net',
+'ad.doubleclick.net.75310.9625.302br.net',
+'ad.doubleclick.net.75311.9625.302br.net',
+'ad.doubleclick.net.75312.9625.302br.net',
+'ad.doubleclick.net.75368.9088.302br.net',
+'ad.doubleclick.net.75369.9088.302br.net',
+'ad.doubleclick.net.75370.9088.302br.net',
+'ad.doubleclick.net.75371.9088.302br.net',
+'ad.doubleclick.net.75372.9088.302br.net',
+'ad.doubleclick.net.75373.9088.302br.net',
+'ad.doubleclick.net.75374.9088.302br.net',
+'ad.doubleclick.net.75375.9088.302br.net',
+'ad.doubleclick.net.75376.9088.302br.net',
+'ad.doubleclick.net.75396.9088.302br.net',
+'ad.doubleclick.net.75397.9088.302br.net',
+'ad.doubleclick.net.75399.9088.302br.net',
+'ad.doubleclick.net.75400.9088.302br.net',
+'ad.doubleclick.net.75402.9088.302br.net',
+'ad.doubleclick.net.75403.9088.302br.net',
+'ad.doubleclick.net.75405.9366.302br.net',
+'ad.doubleclick.net.75408.9366.302br.net',
+'ad.doubleclick.net.75411.9366.302br.net',
+'ad.doubleclick.net.75414.9366.302br.net',
+'ad.doubleclick.net.75417.9366.302br.net',
+'ad.doubleclick.net.75420.9366.302br.net',
+'ad.doubleclick.net.75423.9366.302br.net',
+'ad.doubleclick.net.75426.9366.302br.net',
+'ad.doubleclick.net.75429.9366.302br.net',
+'ad.doubleclick.net.75435.9366.302br.net',
+'ad.doubleclick.net.75438.9366.302br.net',
+'ad.doubleclick.net.75441.9366.302br.net',
+'ad.doubleclick.net.75447.9366.302br.net',
+'ad.doubleclick.net.75450.9366.302br.net',
+'ad.doubleclick.net.75453.9366.302br.net',
+'ad.doubleclick.net.75456.9366.302br.net',
+'ad.doubleclick.net.75459.9366.302br.net',
+'ad.doubleclick.net.75462.9366.302br.net',
+'ad.doubleclick.net.75483.9627.302br.net',
+'ad.doubleclick.net.75486.9627.302br.net',
+'ad.doubleclick.net.75489.9627.302br.net',
+'ad.doubleclick.net.75511.9627.302br.net',
+'ad.doubleclick.net.75514.9627.302br.net',
+'ad.doubleclick.net.75517.9627.302br.net',
+'ad.doubleclick.net.75520.9627.302br.net',
+'ad.doubleclick.net.75523.9627.302br.net',
+'ad.doubleclick.net.75526.9627.302br.net',
+'ad.doubleclick.net.75528.9628.302br.net',
+'ad.doubleclick.net.75529.9628.302br.net',
+'ad.doubleclick.net.75531.9628.302br.net',
+'ad.doubleclick.net.75532.9628.302br.net',
+'ad.doubleclick.net.75534.9628.302br.net',
+'ad.doubleclick.net.75535.9628.302br.net',
+'ad.doubleclick.net.75537.9628.302br.net',
+'ad.doubleclick.net.75540.9628.302br.net',
+'ad.doubleclick.net.75541.9628.302br.net',
+'ad.doubleclick.net.75543.9628.302br.net',
+'ad.doubleclick.net.75544.9628.302br.net',
+'ad.doubleclick.net.75546.9198.302br.net',
+'ad.doubleclick.net.75547.9198.302br.net',
+'ad.doubleclick.net.75548.9198.302br.net',
+'ad.doubleclick.net.75549.9198.302br.net',
+'ad.doubleclick.net.75550.9198.302br.net',
+'ad.doubleclick.net.75564.9198.302br.net',
+'ad.doubleclick.net.75565.9198.302br.net',
+'ad.doubleclick.net.75570.9198.302br.net',
+'ad.doubleclick.net.75573.9198.302br.net',
+'ad.doubleclick.net.75574.9198.302br.net',
+'ad.doubleclick.net.75600.9198.302br.net',
+'ad.doubleclick.net.75618.9198.302br.net',
+'ad.doubleclick.net.75619.9198.302br.net',
+'ad.doubleclick.net.75621.9198.302br.net',
+'ad.doubleclick.net.75627.9198.302br.net',
+'ad.doubleclick.net.75648.9198.302br.net',
+'ad.doubleclick.net.75651.9198.302br.net',
+'ad.doubleclick.net.75652.9198.302br.net',
+'ad.doubleclick.net.75666.9198.302br.net',
+'ad.doubleclick.net.75714.9198.302br.net',
+'ad.doubleclick.net.75723.9198.302br.net',
+'ad.doubleclick.net.75724.9198.302br.net',
+'ad.doubleclick.net.75822.9630.302br.net',
+'ad.doubleclick.net.75823.9630.302br.net',
+'ad.doubleclick.net.75828.9630.302br.net',
+'ad.doubleclick.net.75829.9630.302br.net',
+'ad.doubleclick.net.75831.9630.302br.net',
+'ad.doubleclick.net.75832.9630.302br.net',
+'ad.doubleclick.net.75833.9630.302br.net',
+'ad.doubleclick.net.75834.9630.302br.net',
+'ad.doubleclick.net.75835.9630.302br.net',
+'ad.doubleclick.net.75839.9630.302br.net',
+'ad.doubleclick.net.75840.9630.302br.net',
+'ad.doubleclick.net.75841.9630.302br.net',
+'ad.doubleclick.net.75846.9630.302br.net',
+'ad.doubleclick.net.75847.9630.302br.net',
+'ad.doubleclick.net.75852.9630.302br.net',
+'ad.doubleclick.net.75853.9630.302br.net',
+'ad.doubleclick.net.75855.9630.302br.net',
+'ad.doubleclick.net.75856.9630.302br.net',
+'ad.doubleclick.net.75861.9630.302br.net',
+'ad.doubleclick.net.75862.9630.302br.net',
+'ad.doubleclick.net.75864.9630.302br.net',
+'ad.doubleclick.net.75865.9630.302br.net',
+'ad.doubleclick.net.75872.9630.302br.net',
+'ad.doubleclick.net.75873.9630.302br.net',
+'ad.doubleclick.net.75874.9630.302br.net',
+'ad.doubleclick.net.75876.9630.302br.net',
+'ad.doubleclick.net.75877.9630.302br.net',
+'ad.doubleclick.net.75879.9630.302br.net',
+'ad.doubleclick.net.75880.9630.302br.net',
+'ad.doubleclick.net.75882.9630.302br.net',
+'ad.doubleclick.net.75883.9630.302br.net',
+'ad.doubleclick.net.75888.9630.302br.net',
+'ad.doubleclick.net.75889.9630.302br.net',
+'ad.doubleclick.net.75891.9630.302br.net',
+'ad.doubleclick.net.75892.9630.302br.net',
+'ad.doubleclick.net.75897.9630.302br.net',
+'ad.doubleclick.net.75898.9630.302br.net',
+'ad.doubleclick.net.75903.9630.302br.net',
+'ad.doubleclick.net.75904.9630.302br.net',
+'ad.doubleclick.net.75914.9630.302br.net',
+'ad.doubleclick.net.75915.9630.302br.net',
+'ad.doubleclick.net.75916.9630.302br.net',
+'ad.doubleclick.net.75924.9293.302br.net',
+'ad.doubleclick.net.75925.9293.302br.net',
+'ad.doubleclick.net.75926.9293.302br.net',
+'ad.doubleclick.net.75927.9293.302br.net',
+'ad.doubleclick.net.75928.9293.302br.net',
+'ad.doubleclick.net.75935.9631.302br.net',
+'ad.doubleclick.net.75936.9631.302br.net',
+'ad.doubleclick.net.75937.9631.302br.net',
+'ad.doubleclick.net.75938.9631.302br.net',
+'ad.doubleclick.net.75939.9631.302br.net',
+'ad.doubleclick.net.75940.9631.302br.net',
+'ad.doubleclick.net.75943.9632.302br.net',
+'ad.doubleclick.net.75945.9632.302br.net',
+'ad.doubleclick.net.75948.9632.302br.net',
+'ad.doubleclick.net.75951.9632.302br.net',
+'ad.doubleclick.net.75954.9632.302br.net',
+'ad.doubleclick.net.75955.9632.302br.net',
+'ad.doubleclick.net.75957.9632.302br.net',
+'ad.doubleclick.net.75961.9632.302br.net',
+'ad.doubleclick.net.75963.9632.302br.net',
+'ad.doubleclick.net.75964.9632.302br.net',
+'ad.doubleclick.net.75966.9632.302br.net',
+'ad.doubleclick.net.75970.9632.302br.net',
+'ad.doubleclick.net.75972.9632.302br.net',
+'ad.doubleclick.net.75976.9632.302br.net',
+'ad.doubleclick.net.75978.9632.302br.net',
+'ad.doubleclick.net.75981.9632.302br.net',
+'ad.doubleclick.net.75984.9632.302br.net',
+'ad.doubleclick.net.75985.9632.302br.net',
+'ad.doubleclick.net.75987.9632.302br.net',
+'ad.doubleclick.net.75988.9632.302br.net',
+'ad.doubleclick.net.75990.9632.302br.net',
+'ad.doubleclick.net.75994.9632.302br.net',
+'ad.doubleclick.net.75996.9632.302br.net',
+'ad.doubleclick.net.76024.9635.302br.net',
+'ad.doubleclick.net.76025.9635.302br.net',
+'ad.doubleclick.net.76026.9635.302br.net',
+'ad.doubleclick.net.76027.9635.302br.net',
+'ad.doubleclick.net.76028.9635.302br.net',
+'ad.doubleclick.net.76029.9635.302br.net',
+'ad.doubleclick.net.76030.9635.302br.net',
+'ad.doubleclick.net.76031.9635.302br.net',
+'ad.doubleclick.net.76032.9635.302br.net',
+'ad.doubleclick.net.76094.9636.302br.net',
+'ad.doubleclick.net.76096.9636.302br.net',
+'ad.doubleclick.net.76100.9636.302br.net',
+'ad.doubleclick.net.76104.9636.302br.net',
+'ad.doubleclick.net.76108.9635.302br.net',
+'ad.doubleclick.net.76109.9635.302br.net',
+'ad.doubleclick.net.76110.9635.302br.net',
+'ad.doubleclick.net.76111.9635.302br.net',
+'ad.doubleclick.net.76112.9635.302br.net',
+'ad.doubleclick.net.76117.9635.302br.net',
+'ad.doubleclick.net.76118.9635.302br.net',
+'ad.doubleclick.net.76119.9635.302br.net',
+'ad.doubleclick.net.76120.9635.302br.net',
+'ad.doubleclick.net.76121.9635.302br.net',
+'ad.doubleclick.net.76122.9635.302br.net',
+'ad.doubleclick.net.76123.9635.302br.net',
+'ad.doubleclick.net.76124.9635.302br.net',
+'ad.doubleclick.net.76125.9635.302br.net',
+'ad.doubleclick.net.76126.9635.302br.net',
+'ad.doubleclick.net.76127.9635.302br.net',
+'ad.doubleclick.net.76137.9635.302br.net',
+'ad.doubleclick.net.76138.9635.302br.net',
+'ad.doubleclick.net.76139.9635.302br.net',
+'ad.doubleclick.net.76140.9635.302br.net',
+'ad.doubleclick.net.76141.9635.302br.net',
+'ad.doubleclick.net.76142.9635.302br.net',
+'ad.doubleclick.net.76149.9635.302br.net',
+'ad.doubleclick.net.76150.9635.302br.net',
+'ad.doubleclick.net.76151.9635.302br.net',
+'ad.doubleclick.net.76153.9635.302br.net',
+'ad.doubleclick.net.76154.9635.302br.net',
+'ad.doubleclick.net.76156.9635.302br.net',
+'ad.doubleclick.net.76157.9635.302br.net',
+'ad.doubleclick.net.76159.9635.302br.net',
+'ad.doubleclick.net.76160.9635.302br.net',
+'ad.doubleclick.net.76162.9635.302br.net',
+'ad.doubleclick.net.76163.9635.302br.net',
+'ad.doubleclick.net.76164.9635.302br.net',
+'ad.doubleclick.net.76165.9635.302br.net',
+'ad.doubleclick.net.76166.9635.302br.net',
+'ad.doubleclick.net.76167.9635.302br.net',
+'ad.doubleclick.net.76168.9635.302br.net',
+'ad.doubleclick.net.76169.9635.302br.net',
+'ad.doubleclick.net.76170.9635.302br.net',
+'ad.doubleclick.net.76171.9635.302br.net',
+'ad.doubleclick.net.76172.9635.302br.net',
+'ad.doubleclick.net.76174.9635.302br.net',
+'ad.doubleclick.net.76175.9635.302br.net',
+'ad.doubleclick.net.76177.9635.302br.net',
+'ad.doubleclick.net.76178.9635.302br.net',
+'ad.doubleclick.net.76180.9635.302br.net',
+'ad.doubleclick.net.76181.9635.302br.net',
+'ad.doubleclick.net.76189.9635.302br.net',
+'ad.doubleclick.net.76190.9635.302br.net',
+'ad.doubleclick.net.76192.9635.302br.net',
+'ad.doubleclick.net.76193.9635.302br.net',
+'ad.doubleclick.net.76443.9624.302br.net',
+'ad.doubleclick.net.76444.9624.302br.net',
+'ad.doubleclick.net.76445.9624.302br.net',
+'ad.doubleclick.net.76447.9624.302br.net',
+'ad.doubleclick.net.76449.9624.302br.net',
+'ad.doubleclick.net.76450.9624.302br.net',
+'ad.doubleclick.net.76455.9624.302br.net',
+'ad.doubleclick.net.76457.9624.302br.net',
+'ad.doubleclick.net.76459.9624.302br.net',
+'ad.doubleclick.net.76460.9624.302br.net',
+'ad.doubleclick.net.76461.9624.302br.net',
+'ad.doubleclick.net.76462.9624.302br.net',
+'ad.doubleclick.net.76463.9624.302br.net',
+'ad.doubleclick.net.76464.9624.302br.net',
+'ad.doubleclick.net.76465.9624.302br.net',
+'ad.doubleclick.net.76466.9624.302br.net',
+'ad.doubleclick.net.76467.9624.302br.net',
+'ad.doubleclick.net.76468.9624.302br.net',
+'ad.doubleclick.net.76469.9624.302br.net',
+'ad.doubleclick.net.76470.9624.302br.net',
+'ad.doubleclick.net.76499.9450.302br.net',
+'ad.doubleclick.net.76500.9450.302br.net',
+'ad.doubleclick.net.76501.9450.302br.net',
+'ad.doubleclick.net.76502.9450.302br.net',
+'ad.doubleclick.net.76529.9544.302br.net',
+'ad.doubleclick.net.76530.9544.302br.net',
+'ad.doubleclick.net.76531.9544.302br.net',
+'ad.doubleclick.net.76532.9544.302br.net',
+'ad.doubleclick.net.76533.9544.302br.net',
+'ad.doubleclick.net.76534.9544.302br.net',
+'ad.doubleclick.net.76535.9544.302br.net',
+'ad.doubleclick.net.76536.9544.302br.net',
+'ad.doubleclick.net.76537.9544.302br.net',
+'ad.doubleclick.net.76538.9544.302br.net',
+'ad.doubleclick.net.76539.9544.302br.net',
+'ad.doubleclick.net.76540.9544.302br.net',
+'ad.doubleclick.net.76541.9544.302br.net',
+'ad.doubleclick.net.76542.9544.302br.net',
+'ad.doubleclick.net.76543.9544.302br.net',
+'ad.doubleclick.net.76544.9544.302br.net',
+'ad.doubleclick.net.76545.9544.302br.net',
+'ad.doubleclick.net.76546.9544.302br.net',
+'ad.doubleclick.net.76547.9544.302br.net',
+'ad.doubleclick.net.76548.9544.302br.net',
+'ad.doubleclick.net.76549.9544.302br.net',
+'ad.doubleclick.net.76568.9603.302br.net',
+'ad.doubleclick.net.76569.9603.302br.net',
+'ad.doubleclick.net.76572.9603.302br.net',
+'ad.doubleclick.net.76574.9603.302br.net',
+'ad.doubleclick.net.76575.9603.302br.net',
+'ad.doubleclick.net.76576.9603.302br.net',
+'ad.doubleclick.net.76577.9603.302br.net',
+'ad.doubleclick.net.76578.9603.302br.net',
+'ad.doubleclick.net.76579.9603.302br.net',
+'ad.doubleclick.net.76581.9603.302br.net',
+'ad.doubleclick.net.76598.9450.302br.net',
+'ad.doubleclick.net.76599.9450.302br.net',
+'ad.doubleclick.net.76600.9450.302br.net',
+'ad.doubleclick.net.76601.9450.302br.net',
+'ad.doubleclick.net.76604.9648.302br.net',
+'ad.doubleclick.net.76605.9648.302br.net',
+'ad.doubleclick.net.76606.9648.302br.net',
+'ad.doubleclick.net.76607.9648.302br.net',
+'ad.doubleclick.net.76608.9648.302br.net',
+'ad.doubleclick.net.76609.9648.302br.net',
+'ad.doubleclick.net.76610.9648.302br.net',
+'ad.doubleclick.net.76611.9648.302br.net',
+'ad.doubleclick.net.76612.9648.302br.net',
+'ad.doubleclick.net.76622.9647.302br.net',
+'ad.doubleclick.net.76623.9647.302br.net',
+'ad.doubleclick.net.76624.9647.302br.net',
+'ad.doubleclick.net.76625.9647.302br.net',
+'ad.doubleclick.net.76626.9647.302br.net',
+'ad.doubleclick.net.76627.9647.302br.net',
+'ad.doubleclick.net.76635.9646.302br.net',
+'ad.doubleclick.net.76636.9646.302br.net',
+'ad.doubleclick.net.76638.9646.302br.net',
+'ad.doubleclick.net.76639.9646.302br.net',
+'ad.doubleclick.net.76641.9646.302br.net',
+'ad.doubleclick.net.76652.9611.302br.net',
+'ad.doubleclick.net.76654.9611.302br.net',
+'ad.doubleclick.net.76655.9611.302br.net',
+'ad.doubleclick.net.76657.9611.302br.net',
+'ad.doubleclick.net.76658.9611.302br.net',
+'ad.doubleclick.net.76660.9611.302br.net',
+'ad.doubleclick.net.76661.9611.302br.net',
+'ad.doubleclick.net.76663.9611.302br.net',
+'ad.doubleclick.net.76664.9611.302br.net',
+'ad.doubleclick.net.76666.9611.302br.net',
+'ad.doubleclick.net.76667.9611.302br.net',
+'ad.doubleclick.net.76669.9611.302br.net',
+'ad.doubleclick.net.76670.9611.302br.net',
+'ad.doubleclick.net.76672.9611.302br.net',
+'ad.doubleclick.net.76673.9611.302br.net',
+'ad.doubleclick.net.76675.9611.302br.net',
+'ad.doubleclick.net.76676.9611.302br.net',
+'ad.doubleclick.net.76678.9611.302br.net',
+'ad.doubleclick.net.76679.9611.302br.net',
+'ad.doubleclick.net.76681.9611.302br.net',
+'ad.doubleclick.net.76682.9611.302br.net',
+'ad.doubleclick.net.76684.9611.302br.net',
+'ad.doubleclick.net.76685.9611.302br.net',
+'ad.doubleclick.net.76687.9611.302br.net',
+'ad.doubleclick.net.76688.9611.302br.net',
+'ad.doubleclick.net.76690.9611.302br.net',
+'ad.doubleclick.net.76691.9611.302br.net',
+'ad.doubleclick.net.76693.9611.302br.net',
+'ad.doubleclick.net.76694.9611.302br.net',
+'ad.doubleclick.net.76696.9611.302br.net',
+'ad.doubleclick.net.76697.9611.302br.net',
+'ad.doubleclick.net.76699.9611.302br.net',
+'ad.doubleclick.net.76700.9611.302br.net',
+'ad.doubleclick.net.76702.9611.302br.net',
+'ad.doubleclick.net.76703.9611.302br.net',
+'ad.doubleclick.net.76705.9611.302br.net',
+'ad.doubleclick.net.76706.9611.302br.net',
+'ad.doubleclick.net.76708.9611.302br.net',
+'ad.doubleclick.net.76709.9611.302br.net',
+'ad.doubleclick.net.76711.9611.302br.net',
+'ad.doubleclick.net.76712.9611.302br.net',
+'ad.doubleclick.net.76714.9611.302br.net',
+'ad.doubleclick.net.76715.9611.302br.net',
+'ad.doubleclick.net.76717.9611.302br.net',
+'ad.doubleclick.net.76718.9611.302br.net',
+'ad.doubleclick.net.76720.9611.302br.net',
+'ad.doubleclick.net.76721.9611.302br.net',
+'ad.doubleclick.net.76723.9611.302br.net',
+'ad.doubleclick.net.76724.9611.302br.net',
+'ad.doubleclick.net.76726.9611.302br.net',
+'ad.doubleclick.net.76727.9611.302br.net',
+'ad.doubleclick.net.76729.9611.302br.net',
+'ad.doubleclick.net.76730.9611.302br.net',
+'ad.doubleclick.net.76732.9611.302br.net',
+'ad.doubleclick.net.76735.9649.302br.net',
+'ad.doubleclick.net.76738.9649.302br.net',
+'ad.doubleclick.net.76741.9649.302br.net',
+'ad.doubleclick.net.76744.9649.302br.net',
+'ad.doubleclick.net.76747.9649.302br.net',
+'ad.doubleclick.net.76750.9649.302br.net',
+'ad.doubleclick.net.76753.9649.302br.net',
+'ad.doubleclick.net.76756.9649.302br.net',
+'ad.doubleclick.net.76759.9649.302br.net',
+'ad.doubleclick.net.76762.9649.302br.net',
+'ad.doubleclick.net.76763.9649.302br.net',
+'ad.doubleclick.net.76765.9649.302br.net',
+'ad.doubleclick.net.76768.9649.302br.net',
+'ad.doubleclick.net.76771.9649.302br.net',
+'ad.doubleclick.net.76774.9649.302br.net',
+'ad.doubleclick.net.76775.9649.302br.net',
+'ad.doubleclick.net.76777.9649.302br.net',
+'ad.doubleclick.net.76780.9649.302br.net',
+'ad.doubleclick.net.76783.9649.302br.net',
+'ad.doubleclick.net.76786.9649.302br.net',
+'ad.doubleclick.net.76789.9649.302br.net',
+'ad.doubleclick.net.76860.9650.302br.net',
+'ad.doubleclick.net.76863.9650.302br.net',
+'ad.doubleclick.net.76866.9650.302br.net',
+'ad.doubleclick.net.76869.9650.302br.net',
+'ad.doubleclick.net.76872.9650.302br.net',
+'ad.doubleclick.net.76873.9076.302br.net',
+'ad.doubleclick.net.76875.9076.302br.net',
+'ad.doubleclick.net.76876.9076.302br.net',
+'ad.doubleclick.net.76878.9076.302br.net',
+'ad.doubleclick.net.76880.9076.302br.net',
+'ad.doubleclick.net.76883.9076.302br.net',
+'ad.doubleclick.net.76886.9076.302br.net',
+'ad.doubleclick.net.76889.9076.302br.net',
+'ad.doubleclick.net.76890.9076.302br.net',
+'ad.doubleclick.net.76892.9076.302br.net',
+'ad.doubleclick.net.76893.9076.302br.net',
+'ad.doubleclick.net.76895.9076.302br.net',
+'ad.doubleclick.net.76896.9076.302br.net',
+'ad.doubleclick.net.76898.9076.302br.net',
+'ad.doubleclick.net.76902.9076.302br.net',
+'ad.doubleclick.net.76905.9076.302br.net',
+'ad.doubleclick.net.76908.9076.302br.net',
+'ad.doubleclick.net.76911.9077.302br.net',
+'ad.doubleclick.net.76914.9077.302br.net',
+'ad.doubleclick.net.76915.9077.302br.net',
+'ad.doubleclick.net.76917.9077.302br.net',
+'ad.doubleclick.net.76918.9077.302br.net',
+'ad.doubleclick.net.76920.9077.302br.net',
+'ad.doubleclick.net.76922.9077.302br.net',
+'ad.doubleclick.net.76925.9077.302br.net',
+'ad.doubleclick.net.76926.9077.302br.net',
+'ad.doubleclick.net.76932.9078.302br.net',
+'ad.doubleclick.net.76935.9078.302br.net',
+'ad.doubleclick.net.76939.9078.302br.net',
+'ad.doubleclick.net.76941.9078.302br.net',
+'ad.doubleclick.net.76943.9078.302br.net',
+'ad.doubleclick.net.76946.9078.302br.net',
+'ad.doubleclick.net.76949.9078.302br.net',
+'ad.doubleclick.net.76953.9079.302br.net',
+'ad.doubleclick.net.76956.9079.302br.net',
+'ad.doubleclick.net.76959.9079.302br.net',
+'ad.doubleclick.net.76961.9079.302br.net',
+'ad.doubleclick.net.76964.9375.302br.net',
+'ad.doubleclick.net.76967.9375.302br.net',
+'ad.doubleclick.net.76970.9375.302br.net',
+'ad.doubleclick.net.76974.9375.302br.net',
+'ad.doubleclick.net.76977.9375.302br.net',
+'ad.doubleclick.net.76980.9375.302br.net',
+'ad.doubleclick.net.76983.9084.302br.net',
+'ad.doubleclick.net.76986.9084.302br.net',
+'ad.doubleclick.net.76989.9084.302br.net',
+'ad.doubleclick.net.76991.9084.302br.net',
+'ad.doubleclick.net.76995.9082.302br.net',
+'ad.doubleclick.net.76998.9082.302br.net',
+'ad.doubleclick.net.77001.9082.302br.net',
+'ad.doubleclick.net.77002.9082.302br.net',
+'ad.doubleclick.net.77004.9082.302br.net',
+'ad.doubleclick.net.77005.9082.302br.net',
+'ad.doubleclick.net.77007.9082.302br.net',
+'ad.doubleclick.net.77010.9083.302br.net',
+'ad.doubleclick.net.77013.9083.302br.net',
+'ad.doubleclick.net.77016.9083.302br.net',
+'ad.doubleclick.net.77019.9083.302br.net',
+'ad.doubleclick.net.77022.9083.302br.net',
+'ad.doubleclick.net.77025.9083.302br.net',
+'ad.doubleclick.net.77046.9085.302br.net',
+'ad.doubleclick.net.77049.9085.302br.net',
+'ad.doubleclick.net.77052.9085.302br.net',
+'ad.doubleclick.net.77053.9085.302br.net',
+'ad.doubleclick.net.77054.9085.302br.net',
+'ad.doubleclick.net.77055.9085.302br.net',
+'ad.doubleclick.net.77057.9085.302br.net',
+'ad.doubleclick.net.77058.9085.302br.net',
+'ad.doubleclick.net.77060.9085.302br.net',
+'ad.doubleclick.net.77061.9085.302br.net',
+'ad.doubleclick.net.77063.9085.302br.net',
+'ad.doubleclick.net.77064.9085.302br.net',
+'ad.doubleclick.net.77066.9085.302br.net',
+'ad.doubleclick.net.77067.9085.302br.net',
+'ad.doubleclick.net.77070.9087.302br.net',
+'ad.doubleclick.net.77073.9087.302br.net',
+'ad.doubleclick.net.77076.9087.302br.net',
+'ad.doubleclick.net.77077.9087.302br.net',
+'ad.doubleclick.net.77079.9087.302br.net',
+'ad.doubleclick.net.77082.9087.302br.net',
+'ad.doubleclick.net.77148.9450.302br.net',
+'ad.doubleclick.net.77150.9450.302br.net',
+'ad.doubleclick.net.77152.9450.302br.net',
+'ad.doubleclick.net.77154.9450.302br.net',
+'ad.doubleclick.net.77196.9279.302br.net',
+'ad.doubleclick.net.77197.9279.302br.net',
+'ad.doubleclick.net.77198.9279.302br.net',
+'ad.doubleclick.net.77199.9279.302br.net',
+'ad.doubleclick.net.77200.9279.302br.net',
+'ad.doubleclick.net.77201.9279.302br.net',
+'ad.doubleclick.net.77202.9279.302br.net',
+'ad.doubleclick.net.77203.9279.302br.net',
+'ad.doubleclick.net.77236.9584.302br.net',
+'ad.doubleclick.net.77237.9584.302br.net',
+'ad.doubleclick.net.77238.9584.302br.net',
+'ad.doubleclick.net.77239.9584.302br.net',
+'ad.doubleclick.net.77240.9584.302br.net',
+'ad.doubleclick.net.77241.9584.302br.net',
+'ad.doubleclick.net.77242.9584.302br.net',
+'ad.doubleclick.net.77243.9584.302br.net',
+'ad.doubleclick.net.77244.9584.302br.net',
+'ad.doubleclick.net.77245.9584.302br.net',
+'ad.doubleclick.net.77246.9584.302br.net',
+'ad.doubleclick.net.77248.9584.302br.net',
+'ad.doubleclick.net.77379.9654.302br.net',
+'ad.doubleclick.net.77382.9654.302br.net',
+'ad.doubleclick.net.77385.9654.302br.net',
+'ad.doubleclick.net.77403.9654.302br.net',
+'ad.doubleclick.net.77404.9654.302br.net',
+'ad.doubleclick.net.77409.9654.302br.net',
+'ad.doubleclick.net.77412.9654.302br.net',
+'ad.doubleclick.net.77443.9658.302br.net',
+'ad.doubleclick.net.77446.9658.302br.net',
+'ad.doubleclick.net.77449.9658.302br.net',
+'ad.doubleclick.net.77474.9632.302br.net',
+'ad.doubleclick.net.77475.9632.302br.net',
+'ad.doubleclick.net.77477.9632.302br.net',
+'ad.doubleclick.net.77499.9632.302br.net',
+'ad.doubleclick.net.77501.9632.302br.net',
+'ad.doubleclick.net.77504.9632.302br.net',
+'ad.doubleclick.net.77519.9632.302br.net',
+'ad.doubleclick.net.77638.9663.302br.net',
+'ad.doubleclick.net.77639.9663.302br.net',
+'ad.doubleclick.net.77640.9663.302br.net',
+'ad.doubleclick.net.77641.9663.302br.net',
+'ad.doubleclick.net.77642.9663.302br.net',
+'ad.doubleclick.net.77643.9663.302br.net',
+'ad.doubleclick.net.77644.9663.302br.net',
+'ad.doubleclick.net.77645.9663.302br.net',
+'ad.doubleclick.net.77646.9663.302br.net',
+'ad.doubleclick.net.77647.9663.302br.net',
+'ad.doubleclick.net.77648.9663.302br.net',
+'ad.doubleclick.net.77649.9663.302br.net',
+'ad.doubleclick.net.77650.9663.302br.net',
+'ad.doubleclick.net.77651.9663.302br.net',
+'ad.doubleclick.net.77652.9663.302br.net',
+'ad.doubleclick.net.77653.9663.302br.net',
+'ad.doubleclick.net.77654.9663.302br.net',
+'ad.doubleclick.net.77655.9663.302br.net',
+'ad.doubleclick.net.77661.9515.302br.net',
+'ad.doubleclick.net.77662.9515.302br.net',
+'ad.doubleclick.net.77663.9515.302br.net',
+'ad.doubleclick.net.77664.9515.302br.net',
+'ad.doubleclick.net.77665.9515.302br.net',
+'ad.doubleclick.net.77666.9503.302br.net',
+'ad.doubleclick.net.77667.9503.302br.net',
+'ad.doubleclick.net.77668.9503.302br.net',
+'ad.doubleclick.net.77669.9503.302br.net',
+'ad.doubleclick.net.77670.9503.302br.net',
+'ad.doubleclick.net.77671.9503.302br.net',
+'ad.doubleclick.net.77673.9503.302br.net',
+'ad.doubleclick.net.77676.9503.302br.net',
+'ad.doubleclick.net.77679.9503.302br.net',
+'ad.doubleclick.net.77680.9503.302br.net',
+'ad.doubleclick.net.77682.9503.302br.net',
+'ad.doubleclick.net.77683.9503.302br.net',
+'ad.doubleclick.net.77685.9503.302br.net',
+'ad.doubleclick.net.77686.9503.302br.net',
+'ad.doubleclick.net.77688.9503.302br.net',
+'ad.doubleclick.net.77689.9503.302br.net',
+'ad.doubleclick.net.77691.9503.302br.net',
+'ad.doubleclick.net.77693.9503.302br.net',
+'ad.doubleclick.net.77694.9503.302br.net',
+'ad.doubleclick.net.77695.9503.302br.net',
+'ad.doubleclick.net.77697.9503.302br.net',
+'ad.doubleclick.net.77700.9503.302br.net',
+'ad.doubleclick.net.77701.9503.302br.net',
+'ad.doubleclick.net.77703.9503.302br.net',
+'ad.doubleclick.net.77704.9503.302br.net',
+'ad.doubleclick.net.77706.9503.302br.net',
+'ad.doubleclick.net.77707.9503.302br.net',
+'ad.doubleclick.net.77709.9503.302br.net',
+'ad.doubleclick.net.77710.9503.302br.net',
+'ad.doubleclick.net.77712.9503.302br.net',
+'ad.doubleclick.net.77713.9503.302br.net',
+'ad.doubleclick.net.77714.9501.302br.net',
+'ad.doubleclick.net.77715.9501.302br.net',
+'ad.doubleclick.net.77716.9501.302br.net',
+'ad.doubleclick.net.77718.9501.302br.net',
+'ad.doubleclick.net.77719.9501.302br.net',
+'ad.doubleclick.net.77721.9501.302br.net',
+'ad.doubleclick.net.77722.9501.302br.net',
+'ad.doubleclick.net.77724.9501.302br.net',
+'ad.doubleclick.net.77725.9501.302br.net',
+'ad.doubleclick.net.77726.9501.302br.net',
+'ad.doubleclick.net.77727.9501.302br.net',
+'ad.doubleclick.net.77728.9501.302br.net',
+'ad.doubleclick.net.77730.9501.302br.net',
+'ad.doubleclick.net.77731.9501.302br.net',
+'ad.doubleclick.net.77733.9501.302br.net',
+'ad.doubleclick.net.77734.9501.302br.net',
+'ad.doubleclick.net.77736.9501.302br.net',
+'ad.doubleclick.net.77737.9501.302br.net',
+'ad.doubleclick.net.77738.9501.302br.net',
+'ad.doubleclick.net.77739.9501.302br.net',
+'ad.doubleclick.net.77740.9501.302br.net',
+'ad.doubleclick.net.77742.9501.302br.net',
+'ad.doubleclick.net.77745.9501.302br.net',
+'ad.doubleclick.net.77746.9501.302br.net',
+'ad.doubleclick.net.77747.9501.302br.net',
+'ad.doubleclick.net.77748.9501.302br.net',
+'ad.doubleclick.net.77749.9501.302br.net',
+'ad.doubleclick.net.77751.9501.302br.net',
+'ad.doubleclick.net.77752.9501.302br.net',
+'ad.doubleclick.net.77754.9501.302br.net',
+'ad.doubleclick.net.77755.9501.302br.net',
+'ad.doubleclick.net.77757.9501.302br.net',
+'ad.doubleclick.net.77760.9501.302br.net',
+'ad.doubleclick.net.77813.9665.302br.net',
+'ad.doubleclick.net.77814.9665.302br.net',
+'ad.doubleclick.net.77815.9665.302br.net',
+'ad.doubleclick.net.77816.9665.302br.net',
+'ad.doubleclick.net.77817.9665.302br.net',
+'ad.doubleclick.net.77818.9665.302br.net',
+'ad.doubleclick.net.77819.9665.302br.net',
+'ad.doubleclick.net.77820.9665.302br.net',
+'ad.doubleclick.net.77821.9665.302br.net',
+'ad.doubleclick.net.77859.9666.302br.net',
+'ad.doubleclick.net.77862.9666.302br.net',
+'ad.doubleclick.net.77865.9666.302br.net',
+'ad.doubleclick.net.77867.9666.302br.net',
+'ad.doubleclick.net.77870.9666.302br.net',
+'ad.doubleclick.net.77873.9666.302br.net',
+'ad.doubleclick.net.78093.9617.302br.net',
+'ad.doubleclick.net.78094.9617.302br.net',
+'ad.doubleclick.net.78095.9668.302br.net',
+'ad.doubleclick.net.78108.9667.302br.net',
+'ad.doubleclick.net.78109.9667.302br.net',
+'ad.doubleclick.net.78114.9667.302br.net',
+'ad.doubleclick.net.78115.9667.302br.net',
+'ad.doubleclick.net.78117.9667.302br.net',
+'ad.doubleclick.net.78184.9450.302br.net',
+'ad.doubleclick.net.78185.9450.302br.net',
+'ad.doubleclick.net.78186.9450.302br.net',
+'ad.doubleclick.net.78187.9450.302br.net',
+'ad.doubleclick.net.78188.9450.302br.net',
+'ad.doubleclick.net.78189.9450.302br.net',
+'ad.doubleclick.net.78190.9450.302br.net',
+'ad.doubleclick.net.78191.9450.302br.net',
+'ad.doubleclick.net.78192.9450.302br.net',
+'ad.doubleclick.net.78193.9450.302br.net',
+'ad.doubleclick.net.78224.9450.302br.net',
+'ad.doubleclick.net.78225.9450.302br.net',
+'ad.doubleclick.net.78226.9450.302br.net',
+'ad.doubleclick.net.78227.9450.302br.net',
+'ad.doubleclick.net.78228.9454.302br.net',
+'ad.doubleclick.net.78229.9454.302br.net',
+'ad.doubleclick.net.78230.9454.302br.net',
+'ad.doubleclick.net.78231.9454.302br.net',
+'ad.doubleclick.net.78232.9454.302br.net',
+'ad.doubleclick.net.78233.9454.302br.net',
+'ad.doubleclick.net.78234.9454.302br.net',
+'ad.doubleclick.net.78235.9454.302br.net',
+'ad.doubleclick.net.78237.9454.302br.net',
+'ad.doubleclick.net.78239.9454.302br.net',
+'ad.doubleclick.net.78240.9454.302br.net',
+'ad.doubleclick.net.78241.9454.302br.net',
+'ad.doubleclick.net.78242.9454.302br.net',
+'ad.doubleclick.net.78243.9454.302br.net',
+'ad.doubleclick.net.78244.9671.302br.net',
+'ad.doubleclick.net.78245.9671.302br.net',
+'ad.doubleclick.net.78246.9671.302br.net',
+'ad.doubleclick.net.78247.9671.302br.net',
+'ad.doubleclick.net.78248.9671.302br.net',
+'ad.doubleclick.net.78249.9671.302br.net',
+'ad.doubleclick.net.78250.9671.302br.net',
+'ad.doubleclick.net.78251.9671.302br.net',
+'ad.doubleclick.net.78256.9671.302br.net',
+'ad.doubleclick.net.78257.9671.302br.net',
+'ad.doubleclick.net.78260.9671.302br.net',
+'ad.doubleclick.net.78261.9671.302br.net',
+'ad.doubleclick.net.78312.9671.302br.net',
+'ad.doubleclick.net.78313.9671.302br.net',
+'ad.doubleclick.net.78315.9671.302br.net',
+'ad.doubleclick.net.78317.9671.302br.net',
+'ad.doubleclick.net.78319.9671.302br.net',
+'ad.doubleclick.net.78321.9671.302br.net',
+'ad.doubleclick.net.78322.9671.302br.net',
+'ad.doubleclick.net.78323.9671.302br.net',
+'ad.doubleclick.net.78324.9671.302br.net',
+'ad.doubleclick.net.78325.9671.302br.net',
+'ad.doubleclick.net.78327.9671.302br.net',
+'ad.doubleclick.net.78328.9671.302br.net',
+'ad.doubleclick.net.78329.9671.302br.net',
+'ad.doubleclick.net.78330.9671.302br.net',
+'ad.doubleclick.net.78331.9671.302br.net',
+'ad.doubleclick.net.78332.9671.302br.net',
+'ad.doubleclick.net.78333.9671.302br.net',
+'ad.doubleclick.net.78334.9671.302br.net',
+'ad.doubleclick.net.78335.9671.302br.net',
+'ad.doubleclick.net.78336.9671.302br.net',
+'ad.doubleclick.net.78337.9671.302br.net',
+'ad.doubleclick.net.78338.9671.302br.net',
+'ad.doubleclick.net.78339.9671.302br.net',
+'ad.doubleclick.net.78340.9671.302br.net',
+'ad.doubleclick.net.78341.9671.302br.net',
+'ad.doubleclick.net.78342.9671.302br.net',
+'ad.doubleclick.net.78343.9671.302br.net',
+'ad.doubleclick.net.78344.9671.302br.net',
+'ad.doubleclick.net.78345.9671.302br.net',
+'ad.doubleclick.net.78346.9671.302br.net',
+'ad.doubleclick.net.78347.9671.302br.net',
+'ad.doubleclick.net.78348.9671.302br.net',
+'ad.doubleclick.net.78349.9671.302br.net',
+'ad.doubleclick.net.78350.9671.302br.net',
+'ad.doubleclick.net.78351.9671.302br.net',
+'ad.doubleclick.net.78354.9671.302br.net',
+'ad.doubleclick.net.78355.9671.302br.net',
+'ad.doubleclick.net.78356.9671.302br.net',
+'ad.doubleclick.net.78357.9671.302br.net',
+'ad.doubleclick.net.78358.9671.302br.net',
+'ad.doubleclick.net.78359.9671.302br.net',
+'ad.doubleclick.net.78360.9671.302br.net',
+'ad.doubleclick.net.78361.9671.302br.net',
+'ad.doubleclick.net.78362.9671.302br.net',
+'ad.doubleclick.net.78363.9671.302br.net',
+'ad.doubleclick.net.78430.9671.302br.net',
+'ad.doubleclick.net.78431.9671.302br.net',
+'ad.doubleclick.net.78434.9671.302br.net',
+'ad.doubleclick.net.78435.9671.302br.net',
+'ad.doubleclick.net.78436.9671.302br.net',
+'ad.doubleclick.net.78437.9671.302br.net',
+'ad.doubleclick.net.78438.9671.302br.net',
+'ad.doubleclick.net.78439.9671.302br.net',
+'ad.doubleclick.net.78446.9671.302br.net',
+'ad.doubleclick.net.78447.9671.302br.net',
+'ad.doubleclick.net.78450.9671.302br.net',
+'ad.doubleclick.net.78451.9671.302br.net',
+'ad.doubleclick.net.78454.9671.302br.net',
+'ad.doubleclick.net.78455.9671.302br.net',
+'ad.doubleclick.net.78456.9671.302br.net',
+'ad.doubleclick.net.78457.9671.302br.net',
+'ad.doubleclick.net.78458.9671.302br.net',
+'ad.doubleclick.net.78459.9671.302br.net',
+'ad.doubleclick.net.78506.9671.302br.net',
+'ad.doubleclick.net.78507.9671.302br.net',
+'ad.doubleclick.net.78509.9671.302br.net',
+'ad.doubleclick.net.78510.9671.302br.net',
+'ad.doubleclick.net.78511.9671.302br.net',
+'ad.doubleclick.net.78516.9671.302br.net',
+'ad.doubleclick.net.78517.9671.302br.net',
+'ad.doubleclick.net.78518.9671.302br.net',
+'ad.doubleclick.net.78519.9671.302br.net',
+'ad.doubleclick.net.78522.9671.302br.net',
+'ad.doubleclick.net.78523.9671.302br.net',
+'ad.doubleclick.net.78524.9671.302br.net',
+'ad.doubleclick.net.78525.9671.302br.net',
+'ad.doubleclick.net.78528.9671.302br.net',
+'ad.doubleclick.net.78529.9671.302br.net',
+'ad.doubleclick.net.78530.9671.302br.net',
+'ad.doubleclick.net.78531.9671.302br.net',
+'ad.doubleclick.net.78532.9671.302br.net',
+'ad.doubleclick.net.78533.9671.302br.net',
+'ad.doubleclick.net.78534.9671.302br.net',
+'ad.doubleclick.net.78535.9671.302br.net',
+'ad.doubleclick.net.78536.9671.302br.net',
+'ad.doubleclick.net.78537.9671.302br.net',
+'ad.doubleclick.net.78539.9671.302br.net',
+'ad.doubleclick.net.78540.9671.302br.net',
+'ad.doubleclick.net.78541.9671.302br.net',
+'ad.doubleclick.net.78542.9671.302br.net',
+'ad.doubleclick.net.78543.9671.302br.net',
+'ad.doubleclick.net.78544.9671.302br.net',
+'ad.doubleclick.net.78545.9671.302br.net',
+'ad.doubleclick.net.78547.9671.302br.net',
+'ad.doubleclick.net.78548.9671.302br.net',
+'ad.doubleclick.net.78549.9671.302br.net',
+'ad.doubleclick.net.78550.9671.302br.net',
+'ad.doubleclick.net.78551.9671.302br.net',
+'ad.doubleclick.net.78552.9671.302br.net',
+'ad.doubleclick.net.78553.9671.302br.net',
+'ad.doubleclick.net.78554.9671.302br.net',
+'ad.doubleclick.net.78555.9671.302br.net',
+'ad.doubleclick.net.78556.9671.302br.net',
+'ad.doubleclick.net.78557.9671.302br.net',
+'ad.doubleclick.net.78558.9671.302br.net',
+'ad.doubleclick.net.78559.9671.302br.net',
+'ad.doubleclick.net.78560.9671.302br.net',
+'ad.doubleclick.net.78561.9671.302br.net',
+'ad.doubleclick.net.78562.9671.302br.net',
+'ad.doubleclick.net.78563.9671.302br.net',
+'ad.doubleclick.net.78564.9671.302br.net',
+'ad.doubleclick.net.78565.9671.302br.net',
+'ad.doubleclick.net.78566.9671.302br.net',
+'ad.doubleclick.net.78567.9671.302br.net',
+'ad.doubleclick.net.78568.9671.302br.net',
+'ad.doubleclick.net.78569.9671.302br.net',
+'ad.doubleclick.net.78572.9672.302br.net',
+'ad.doubleclick.net.78573.9672.302br.net',
+'ad.doubleclick.net.78574.9672.302br.net',
+'ad.doubleclick.net.78575.9672.302br.net',
+'ad.doubleclick.net.78576.9672.302br.net',
+'ad.doubleclick.net.78577.9672.302br.net',
+'ad.doubleclick.net.78584.9672.302br.net',
+'ad.doubleclick.net.78585.9672.302br.net',
+'ad.doubleclick.net.78596.9671.302br.net',
+'ad.doubleclick.net.78597.9671.302br.net',
+'ad.doubleclick.net.78598.9671.302br.net',
+'ad.doubleclick.net.78599.9671.302br.net',
+'ad.doubleclick.net.78600.9671.302br.net',
+'ad.doubleclick.net.78601.9671.302br.net',
+'ad.doubleclick.net.78602.9671.302br.net',
+'ad.doubleclick.net.78603.9671.302br.net',
+'ad.doubleclick.net.78618.9671.302br.net',
+'ad.doubleclick.net.78619.9671.302br.net',
+'ad.doubleclick.net.78620.9671.302br.net',
+'ad.doubleclick.net.78621.9671.302br.net',
+'ad.doubleclick.net.78622.9671.302br.net',
+'ad.doubleclick.net.78623.9671.302br.net',
+'ad.doubleclick.net.78624.9671.302br.net',
+'ad.doubleclick.net.78625.9671.302br.net',
+'ad.doubleclick.net.78626.9671.302br.net',
+'ad.doubleclick.net.78627.9671.302br.net',
+'ad.doubleclick.net.78629.9671.302br.net',
+'ad.doubleclick.net.78631.9671.302br.net',
+'ad.doubleclick.net.78633.9671.302br.net',
+'ad.doubleclick.net.78635.9671.302br.net',
+'ad.doubleclick.net.78637.9671.302br.net',
+'ad.doubleclick.net.78639.9671.302br.net',
+'ad.doubleclick.net.78641.9671.302br.net',
+'ad.doubleclick.net.78643.9671.302br.net',
+'ad.doubleclick.net.78644.9671.302br.net',
+'ad.doubleclick.net.78645.9671.302br.net',
+'ad.doubleclick.net.78646.9671.302br.net',
+'ad.doubleclick.net.78647.9671.302br.net',
+'ad.doubleclick.net.78649.9671.302br.net',
+'ad.doubleclick.net.78650.9671.302br.net',
+'ad.doubleclick.net.78651.9671.302br.net',
+'ad.doubleclick.net.78652.9671.302br.net',
+'ad.doubleclick.net.78653.9671.302br.net',
+'ad.doubleclick.net.78654.9671.302br.net',
+'ad.doubleclick.net.78655.9671.302br.net',
+'ad.doubleclick.net.78656.9671.302br.net',
+'ad.doubleclick.net.78657.9671.302br.net',
+'ad.doubleclick.net.78658.9671.302br.net',
+'ad.doubleclick.net.78659.9671.302br.net',
+'ad.doubleclick.net.78670.9671.302br.net',
+'ad.doubleclick.net.78671.9671.302br.net',
+'ad.doubleclick.net.78672.9671.302br.net',
+'ad.doubleclick.net.78673.9671.302br.net',
+'ad.doubleclick.net.78674.9671.302br.net',
+'ad.doubleclick.net.78675.9671.302br.net',
+'ad.doubleclick.net.78676.9671.302br.net',
+'ad.doubleclick.net.78677.9671.302br.net',
+'ad.doubleclick.net.78678.9672.302br.net',
+'ad.doubleclick.net.78679.9672.302br.net',
+'ad.doubleclick.net.78680.9672.302br.net',
+'ad.doubleclick.net.78681.9672.302br.net',
+'ad.doubleclick.net.78684.9672.302br.net',
+'ad.doubleclick.net.78685.9672.302br.net',
+'ad.doubleclick.net.78686.9671.302br.net',
+'ad.doubleclick.net.78687.9671.302br.net',
+'ad.doubleclick.net.78688.9671.302br.net',
+'ad.doubleclick.net.78689.9671.302br.net',
+'ad.doubleclick.net.78690.9671.302br.net',
+'ad.doubleclick.net.78691.9671.302br.net',
+'ad.doubleclick.net.78692.9671.302br.net',
+'ad.doubleclick.net.78693.9671.302br.net',
+'ad.doubleclick.net.78694.9671.302br.net',
+'ad.doubleclick.net.78695.9671.302br.net',
+'ad.doubleclick.net.78696.9671.302br.net',
+'ad.doubleclick.net.78697.9671.302br.net',
+'ad.doubleclick.net.78698.9672.302br.net',
+'ad.doubleclick.net.78699.9672.302br.net',
+'ad.doubleclick.net.78700.9672.302br.net',
+'ad.doubleclick.net.78701.9672.302br.net',
+'ad.doubleclick.net.78764.9326.302br.net',
+'ad.doubleclick.net.78765.9326.302br.net',
+'ad.doubleclick.net.78767.9326.302br.net',
+'ad.doubleclick.net.78768.9326.302br.net',
+'ad.doubleclick.net.78769.9326.302br.net',
+'ad.doubleclick.net.78770.9326.302br.net',
+'ad.doubleclick.net.78771.9326.302br.net',
+'ad.doubleclick.net.78773.9326.302br.net',
+'ad.doubleclick.net.78776.9326.302br.net',
+'ad.doubleclick.net.78777.9326.302br.net',
+'ad.doubleclick.net.78779.9326.302br.net',
+'ad.doubleclick.net.78780.9326.302br.net',
+'ad.doubleclick.net.78931.9678.302br.net',
+'ad.doubleclick.net.78932.9678.302br.net',
+'ad.doubleclick.net.78933.9678.302br.net',
+'ad.doubleclick.net.78934.9678.302br.net',
+'ad.doubleclick.net.79072.9678.302br.net',
+'ad.doubleclick.net.79074.9678.302br.net',
+'ad.doubleclick.net.79268.9678.302br.net',
+'ad.doubleclick.net.79269.9678.302br.net',
+'ad.doubleclick.net.79274.9678.302br.net',
+'ad.doubleclick.net.79275.9678.302br.net',
+'ad.doubleclick.net.79277.9678.302br.net',
+'ad.doubleclick.net.79278.9678.302br.net',
+'ad.doubleclick.net.79283.9678.302br.net',
+'ad.doubleclick.net.79284.9678.302br.net',
+'ad.doubleclick.net.79286.9678.302br.net',
+'ad.doubleclick.net.79287.9678.302br.net',
+'ad.doubleclick.net.79301.9678.302br.net',
+'ad.doubleclick.net.79302.9678.302br.net',
+'ad.doubleclick.net.79304.9678.302br.net',
+'ad.doubleclick.net.79305.9678.302br.net',
+'ad.doubleclick.net.79307.9678.302br.net',
+'ad.doubleclick.net.79316.9678.302br.net',
+'ad.doubleclick.net.79317.9678.302br.net',
+'ad.doubleclick.net.79319.9678.302br.net',
+'ad.doubleclick.net.79320.9678.302br.net',
+'ad.doubleclick.net.79322.9678.302br.net',
+'ad.doubleclick.net.79323.9678.302br.net',
+'ad.doubleclick.net.79337.9678.302br.net',
+'ad.doubleclick.net.79338.9678.302br.net',
+'ad.doubleclick.net.79340.9678.302br.net',
+'ad.doubleclick.net.79341.9678.302br.net',
+'ad.doubleclick.net.79343.9678.302br.net',
+'ad.doubleclick.net.79346.9678.302br.net',
+'ad.doubleclick.net.79347.9678.302br.net',
+'ad.doubleclick.net.79352.9678.302br.net',
+'ad.doubleclick.net.79353.9678.302br.net',
+'ad.doubleclick.net.79358.9678.302br.net',
+'ad.doubleclick.net.79359.9678.302br.net',
+'ad.doubleclick.net.79370.9678.302br.net',
+'ad.doubleclick.net.79371.9678.302br.net',
+'ad.doubleclick.net.79373.9678.302br.net',
+'ad.doubleclick.net.79374.9678.302br.net',
+'ad.doubleclick.net.79376.9678.302br.net',
+'ad.doubleclick.net.79377.9678.302br.net',
+'ad.doubleclick.net.79379.9678.302br.net',
+'ad.doubleclick.net.79380.9678.302br.net',
+'ad.doubleclick.net.79382.9678.302br.net',
+'ad.doubleclick.net.79385.9678.302br.net',
+'ad.doubleclick.net.79386.9678.302br.net',
+'ad.doubleclick.net.79388.9678.302br.net',
+'ad.doubleclick.net.79389.9678.302br.net',
+'ad.doubleclick.net.79391.9678.302br.net',
+'ad.doubleclick.net.79392.9678.302br.net',
+'ad.doubleclick.net.79394.9678.302br.net',
+'ad.doubleclick.net.79395.9678.302br.net',
+'ad.doubleclick.net.79397.9678.302br.net',
+'ad.doubleclick.net.79398.9678.302br.net',
+'ad.doubleclick.net.79400.9678.302br.net',
+'ad.doubleclick.net.79401.9678.302br.net',
+'ad.doubleclick.net.79403.9678.302br.net',
+'ad.doubleclick.net.79404.9678.302br.net',
+'ad.doubleclick.net.79406.9678.302br.net',
+'ad.doubleclick.net.79407.9678.302br.net',
+'ad.doubleclick.net.79409.9678.302br.net',
+'ad.doubleclick.net.79410.9678.302br.net',
+'ad.doubleclick.net.79412.9678.302br.net',
+'ad.doubleclick.net.79413.9678.302br.net',
+'ad.doubleclick.net.79415.9678.302br.net',
+'ad.doubleclick.net.79416.9678.302br.net',
+'ad.doubleclick.net.79418.9678.302br.net',
+'ad.doubleclick.net.79419.9678.302br.net',
+'ad.doubleclick.net.79421.9678.302br.net',
+'ad.doubleclick.net.79422.9678.302br.net',
+'ad.doubleclick.net.79439.9678.302br.net',
+'ad.doubleclick.net.79440.9678.302br.net',
+'ad.doubleclick.net.79445.9678.302br.net',
+'ad.doubleclick.net.79446.9678.302br.net',
+'ad.doubleclick.net.79448.9678.302br.net',
+'ad.doubleclick.net.79449.9678.302br.net',
+'ad.doubleclick.net.79451.9678.302br.net',
+'ad.doubleclick.net.79452.9678.302br.net',
+'ad.doubleclick.net.79457.9678.302br.net',
+'ad.doubleclick.net.79458.9678.302br.net',
+'ad.doubleclick.net.79460.9678.302br.net',
+'ad.doubleclick.net.79461.9678.302br.net',
+'ad.doubleclick.net.79463.9678.302br.net',
+'ad.doubleclick.net.79464.9678.302br.net',
+'ad.doubleclick.net.79466.9678.302br.net',
+'ad.doubleclick.net.79467.9678.302br.net',
+'ad.doubleclick.net.79469.9678.302br.net',
+'ad.doubleclick.net.79470.9678.302br.net',
+'ad.doubleclick.net.79472.9678.302br.net',
+'ad.doubleclick.net.79473.9678.302br.net',
+'ad.doubleclick.net.79475.9678.302br.net',
+'ad.doubleclick.net.79476.9678.302br.net',
+'ad.doubleclick.net.79478.9678.302br.net',
+'ad.doubleclick.net.79479.9678.302br.net',
+'ad.doubleclick.net.79481.9678.302br.net',
+'ad.doubleclick.net.79482.9678.302br.net',
+'ad.doubleclick.net.79484.9678.302br.net',
+'ad.doubleclick.net.79485.9678.302br.net',
+'ad.doubleclick.net.79487.9678.302br.net',
+'ad.doubleclick.net.79488.9678.302br.net',
+'ad.doubleclick.net.79490.9678.302br.net',
+'ad.doubleclick.net.79491.9678.302br.net',
+'ad.doubleclick.net.79493.9678.302br.net',
+'ad.doubleclick.net.79494.9678.302br.net',
+'ad.doubleclick.net.79496.9678.302br.net',
+'ad.doubleclick.net.79497.9678.302br.net',
+'ad.doubleclick.net.79499.9678.302br.net',
+'ad.doubleclick.net.79500.9678.302br.net',
+'ad.doubleclick.net.79503.9090.302br.net',
+'ad.doubleclick.net.79506.9090.302br.net',
+'ad.doubleclick.net.79515.9090.302br.net',
+'ad.doubleclick.net.79521.9090.302br.net',
+'ad.doubleclick.net.79524.9090.302br.net',
+'ad.doubleclick.net.79530.9090.302br.net',
+'ad.doubleclick.net.79623.9676.302br.net',
+'ad.doubleclick.net.79624.9676.302br.net',
+'ad.doubleclick.net.79625.9676.302br.net',
+'ad.doubleclick.net.79630.9676.302br.net',
+'ad.doubleclick.net.79631.9676.302br.net',
+'ad.doubleclick.net.79633.9676.302br.net',
+'ad.doubleclick.net.79634.9676.302br.net',
+'ad.doubleclick.net.79642.9676.302br.net',
+'ad.doubleclick.net.79643.9676.302br.net',
+'ad.doubleclick.net.79645.9676.302br.net',
+'ad.doubleclick.net.79646.9676.302br.net',
+'ad.doubleclick.net.79650.9676.302br.net',
+'ad.doubleclick.net.79651.9676.302br.net',
+'ad.doubleclick.net.79652.9676.302br.net',
+'ad.doubleclick.net.79657.9676.302br.net',
+'ad.doubleclick.net.79658.9676.302br.net',
+'ad.doubleclick.net.79660.9676.302br.net',
+'ad.doubleclick.net.79661.9676.302br.net',
+'ad.doubleclick.net.79662.9676.302br.net',
+'ad.doubleclick.net.79663.9676.302br.net',
+'ad.doubleclick.net.79664.9676.302br.net',
+'ad.doubleclick.net.79666.9676.302br.net',
+'ad.doubleclick.net.79667.9676.302br.net',
+'ad.doubleclick.net.79669.9676.302br.net',
+'ad.doubleclick.net.79670.9676.302br.net',
+'ad.doubleclick.net.79672.9676.302br.net',
+'ad.doubleclick.net.79673.9676.302br.net',
+'ad.doubleclick.net.79674.9676.302br.net',
+'ad.doubleclick.net.79675.9676.302br.net',
+'ad.doubleclick.net.79676.9676.302br.net',
+'ad.doubleclick.net.79678.9676.302br.net',
+'ad.doubleclick.net.79679.9676.302br.net',
+'ad.doubleclick.net.79684.9676.302br.net',
+'ad.doubleclick.net.79685.9676.302br.net',
+'ad.doubleclick.net.79696.9676.302br.net',
+'ad.doubleclick.net.79697.9676.302br.net',
+'ad.doubleclick.net.79699.9676.302br.net',
+'ad.doubleclick.net.79700.9676.302br.net',
+'ad.doubleclick.net.79702.9676.302br.net',
+'ad.doubleclick.net.79703.9676.302br.net',
+'ad.doubleclick.net.79704.9326.302br.net',
+'ad.doubleclick.net.79707.9326.302br.net',
+'ad.doubleclick.net.79710.9326.302br.net',
+'ad.doubleclick.net.79713.9326.302br.net',
+'ad.doubleclick.net.79729.9326.302br.net',
+'ad.doubleclick.net.79735.9680.302br.net',
+'ad.doubleclick.net.79736.9680.302br.net',
+'ad.doubleclick.net.79737.9680.302br.net',
+'ad.doubleclick.net.79739.9680.302br.net',
+'ad.doubleclick.net.79740.9680.302br.net',
+'ad.doubleclick.net.79741.9680.302br.net',
+'ad.doubleclick.net.79743.9680.302br.net',
+'ad.doubleclick.net.79744.9680.302br.net',
+'ad.doubleclick.net.79745.9680.302br.net',
+'ad.doubleclick.net.79746.9680.302br.net',
+'ad.doubleclick.net.79747.9680.302br.net',
+'ad.doubleclick.net.79749.9680.302br.net',
+'ad.doubleclick.net.79751.9680.302br.net',
+'ad.doubleclick.net.79753.9680.302br.net',
+'ad.doubleclick.net.79755.9680.302br.net',
+'ad.doubleclick.net.79756.9680.302br.net',
+'ad.doubleclick.net.79757.9680.302br.net',
+'ad.doubleclick.net.79759.9680.302br.net',
+'ad.doubleclick.net.79761.9680.302br.net',
+'ad.doubleclick.net.79763.9680.302br.net',
+'ad.doubleclick.net.79764.9680.302br.net',
+'ad.doubleclick.net.79765.9680.302br.net',
+'ad.doubleclick.net.79767.9680.302br.net',
+'ad.doubleclick.net.79768.9680.302br.net',
+'ad.doubleclick.net.79769.9680.302br.net',
+'ad.doubleclick.net.79770.9680.302br.net',
+'ad.doubleclick.net.79771.9680.302br.net',
+'ad.doubleclick.net.79772.9680.302br.net',
+'ad.doubleclick.net.79773.9680.302br.net',
+'ad.doubleclick.net.79775.9126.302br.net',
+'ad.doubleclick.net.79777.9126.302br.net',
+'ad.doubleclick.net.79778.9126.302br.net',
+'ad.doubleclick.net.79780.9126.302br.net',
+'ad.doubleclick.net.79781.9126.302br.net',
+'ad.doubleclick.net.79782.9126.302br.net',
+'ad.doubleclick.net.79783.9126.302br.net',
+'ad.doubleclick.net.79784.9126.302br.net',
+'ad.doubleclick.net.79785.9126.302br.net',
+'ad.doubleclick.net.79786.9126.302br.net',
+'ad.doubleclick.net.79787.9126.302br.net',
+'ad.doubleclick.net.79788.9126.302br.net',
+'ad.doubleclick.net.79805.9676.302br.net',
+'ad.doubleclick.net.79806.9676.302br.net',
+'ad.doubleclick.net.79808.9676.302br.net',
+'ad.doubleclick.net.79809.9676.302br.net',
+'ad.doubleclick.net.79811.9676.302br.net',
+'ad.doubleclick.net.79812.9676.302br.net',
+'ad.doubleclick.net.79814.9676.302br.net',
+'ad.doubleclick.net.79815.9676.302br.net',
+'ad.doubleclick.net.79817.9676.302br.net',
+'ad.doubleclick.net.79818.9676.302br.net',
+'ad.doubleclick.net.79820.9676.302br.net',
+'ad.doubleclick.net.79821.9676.302br.net',
+'ad.doubleclick.net.79823.9676.302br.net',
+'ad.doubleclick.net.79826.9676.302br.net',
+'ad.doubleclick.net.79827.9676.302br.net',
+'ad.doubleclick.net.79828.9676.302br.net',
+'ad.doubleclick.net.79829.9676.302br.net',
+'ad.doubleclick.net.79832.9676.302br.net',
+'ad.doubleclick.net.79833.9676.302br.net',
+'ad.doubleclick.net.79835.9676.302br.net',
+'ad.doubleclick.net.79836.9676.302br.net',
+'ad.doubleclick.net.79837.9676.302br.net',
+'ad.doubleclick.net.79838.9676.302br.net',
+'ad.doubleclick.net.79839.9676.302br.net',
+'ad.doubleclick.net.79878.9681.302br.net',
+'ad.doubleclick.net.79881.9681.302br.net',
+'ad.doubleclick.net.79884.9681.302br.net',
+'ad.doubleclick.net.79885.9681.302br.net',
+'ad.doubleclick.net.79887.9681.302br.net',
+'ad.doubleclick.net.79888.9681.302br.net',
+'ad.doubleclick.net.79892.9681.302br.net',
+'ad.doubleclick.net.79898.9681.302br.net',
+'ad.doubleclick.net.79908.9681.302br.net',
+'ad.doubleclick.net.79911.9681.302br.net',
+'ad.doubleclick.net.79913.9681.302br.net',
+'ad.doubleclick.net.79916.9681.302br.net',
+'ad.doubleclick.net.79919.9681.302br.net',
+'ad.doubleclick.net.79923.9681.302br.net',
+'ad.doubleclick.net.79926.9681.302br.net',
+'ad.doubleclick.net.79929.9681.302br.net',
+'ad.doubleclick.net.79931.9336.302br.net',
+'ad.doubleclick.net.79932.9336.302br.net',
+'ad.doubleclick.net.79934.9336.302br.net',
+'ad.doubleclick.net.79935.9336.302br.net',
+'ad.doubleclick.net.79937.9336.302br.net',
+'ad.doubleclick.net.79938.9336.302br.net',
+'ad.doubleclick.net.79940.9336.302br.net',
+'ad.doubleclick.net.79946.9336.302br.net',
+'ad.doubleclick.net.79949.9336.302br.net',
+'ad.doubleclick.net.79950.9336.302br.net',
+'ad.doubleclick.net.79952.9336.302br.net',
+'ad.doubleclick.net.79953.9336.302br.net',
+'ad.doubleclick.net.79955.9336.302br.net',
+'ad.doubleclick.net.79958.9336.302br.net',
+'ad.doubleclick.net.79959.9336.302br.net',
+'ad.doubleclick.net.79961.9336.302br.net',
+'ad.doubleclick.net.79964.9336.302br.net',
+'ad.doubleclick.net.79967.9336.302br.net',
+'ad.doubleclick.net.79968.9336.302br.net',
+'ad.doubleclick.net.79970.9336.302br.net',
+'ad.doubleclick.net.79971.9336.302br.net',
+'ad.doubleclick.net.79973.9336.302br.net',
+'ad.doubleclick.net.79974.9336.302br.net',
+'ad.doubleclick.net.79975.9336.302br.net',
+'ad.doubleclick.net.79976.9336.302br.net',
+'ad.doubleclick.net.79977.9336.302br.net',
+'ad.doubleclick.net.79979.9336.302br.net',
+'ad.doubleclick.net.79980.9336.302br.net',
+'ad.doubleclick.net.79982.9336.302br.net',
+'ad.doubleclick.net.79985.9336.302br.net',
+'ad.doubleclick.net.79988.9336.302br.net',
+'ad.doubleclick.net.79994.9336.302br.net',
+'ad.doubleclick.net.79997.9336.302br.net',
+'ad.doubleclick.net.80000.9336.302br.net',
+'ad.doubleclick.net.80003.9336.302br.net',
+'ad.doubleclick.net.80006.9336.302br.net',
+'ad.doubleclick.net.80009.9336.302br.net',
+'ad.doubleclick.net.80012.9336.302br.net',
+'ad.doubleclick.net.80015.9336.302br.net',
+'ad.doubleclick.net.80018.9336.302br.net',
+'ad.doubleclick.net.80021.9336.302br.net',
+'ad.doubleclick.net.80024.9336.302br.net',
+'ad.doubleclick.net.80030.9336.302br.net',
+'ad.doubleclick.net.80031.9336.302br.net',
+'ad.doubleclick.net.80033.9336.302br.net',
+'ad.doubleclick.net.80036.9336.302br.net',
+'ad.doubleclick.net.80037.9336.302br.net',
+'ad.doubleclick.net.80039.9336.302br.net',
+'ad.doubleclick.net.80040.9336.302br.net',
+'ad.doubleclick.net.80042.9336.302br.net',
+'ad.doubleclick.net.80043.9336.302br.net',
+'ad.doubleclick.net.80045.9336.302br.net',
+'ad.doubleclick.net.80048.9336.302br.net',
+'ad.doubleclick.net.80051.9336.302br.net',
+'ad.doubleclick.net.80054.9336.302br.net',
+'ad.doubleclick.net.80057.9336.302br.net',
+'ad.doubleclick.net.80059.9336.302br.net',
+'ad.doubleclick.net.80060.9336.302br.net',
+'ad.doubleclick.net.80061.9336.302br.net',
+'ad.doubleclick.net.80062.9336.302br.net',
+'ad.doubleclick.net.80063.9336.302br.net',
+'ad.doubleclick.net.80064.9336.302br.net',
+'ad.doubleclick.net.80065.9336.302br.net',
+'ad.doubleclick.net.80066.9336.302br.net',
+'ad.doubleclick.net.80067.9336.302br.net',
+'ad.doubleclick.net.80068.9336.302br.net',
+'ad.doubleclick.net.80069.9336.302br.net',
+'ad.doubleclick.net.80070.9336.302br.net',
+'ad.doubleclick.net.80072.9336.302br.net',
+'ad.doubleclick.net.80073.9336.302br.net',
+'ad.doubleclick.net.80080.9336.302br.net',
+'ad.doubleclick.net.80081.9336.302br.net',
+'ad.doubleclick.net.80082.9336.302br.net',
+'ad.doubleclick.net.80084.9336.302br.net',
+'ad.doubleclick.net.80090.9336.302br.net',
+'ad.doubleclick.net.80093.9336.302br.net',
+'ad.doubleclick.net.80096.9336.302br.net',
+'ad.doubleclick.net.80099.9336.302br.net',
+'ad.doubleclick.net.80100.9336.302br.net',
+'ad.doubleclick.net.80102.9336.302br.net',
+'ad.doubleclick.net.80103.9336.302br.net',
+'ad.doubleclick.net.80105.9336.302br.net',
+'ad.doubleclick.net.80106.9336.302br.net',
+'ad.doubleclick.net.80108.9336.302br.net',
+'ad.doubleclick.net.80111.9336.302br.net',
+'ad.doubleclick.net.80112.9336.302br.net',
+'ad.doubleclick.net.80114.9336.302br.net',
+'ad.doubleclick.net.80115.9336.302br.net',
+'ad.doubleclick.net.80117.9336.302br.net',
+'ad.doubleclick.net.80118.9336.302br.net',
+'ad.doubleclick.net.80120.9336.302br.net',
+'ad.doubleclick.net.80121.9336.302br.net',
+'ad.doubleclick.net.80123.9336.302br.net',
+'ad.doubleclick.net.80129.9336.302br.net',
+'ad.doubleclick.net.80132.9336.302br.net',
+'ad.doubleclick.net.80135.9336.302br.net',
+'ad.doubleclick.net.80138.9336.302br.net',
+'ad.doubleclick.net.80141.9336.302br.net',
+'ad.doubleclick.net.80144.9336.302br.net',
+'ad.doubleclick.net.80162.9336.302br.net',
+'ad.doubleclick.net.80165.9336.302br.net',
+'ad.doubleclick.net.80168.9336.302br.net',
+'ad.doubleclick.net.80169.9336.302br.net',
+'ad.doubleclick.net.80171.9336.302br.net',
+'ad.doubleclick.net.80177.9336.302br.net',
+'ad.doubleclick.net.80183.9336.302br.net',
+'ad.doubleclick.net.80186.9336.302br.net',
+'ad.doubleclick.net.80189.9336.302br.net',
+'ad.doubleclick.net.80192.9336.302br.net',
+'ad.doubleclick.net.80195.9336.302br.net',
+'ad.doubleclick.net.80198.9336.302br.net',
+'ad.doubleclick.net.80199.9336.302br.net',
+'ad.doubleclick.net.80201.9336.302br.net',
+'ad.doubleclick.net.80204.9336.302br.net',
+'ad.doubleclick.net.80207.9336.302br.net',
+'ad.doubleclick.net.80210.9336.302br.net',
+'ad.doubleclick.net.80216.9336.302br.net',
+'ad.doubleclick.net.80217.9336.302br.net',
+'ad.doubleclick.net.80219.9336.302br.net',
+'ad.doubleclick.net.80220.9336.302br.net',
+'ad.doubleclick.net.80222.9336.302br.net',
+'ad.doubleclick.net.80223.9336.302br.net',
+'ad.doubleclick.net.80225.9336.302br.net',
+'ad.doubleclick.net.80228.9336.302br.net',
+'ad.doubleclick.net.80231.9336.302br.net',
+'ad.doubleclick.net.80232.9336.302br.net',
+'ad.doubleclick.net.80234.9336.302br.net',
+'ad.doubleclick.net.80237.9336.302br.net',
+'ad.doubleclick.net.80238.9336.302br.net',
+'ad.doubleclick.net.80239.9336.302br.net',
+'ad.doubleclick.net.80240.9336.302br.net',
+'ad.doubleclick.net.80241.9336.302br.net',
+'ad.doubleclick.net.80242.9336.302br.net',
+'ad.doubleclick.net.80243.9336.302br.net',
+'ad.doubleclick.net.80244.9336.302br.net',
+'ad.doubleclick.net.80245.9336.302br.net',
+'ad.doubleclick.net.80246.9336.302br.net',
+'ad.doubleclick.net.80247.9336.302br.net',
+'ad.doubleclick.net.80249.9336.302br.net',
+'ad.doubleclick.net.80250.9336.302br.net',
+'ad.doubleclick.net.80252.9336.302br.net',
+'ad.doubleclick.net.80253.9336.302br.net',
+'ad.doubleclick.net.80255.9336.302br.net',
+'ad.doubleclick.net.80258.9336.302br.net',
+'ad.doubleclick.net.80260.9336.302br.net',
+'ad.doubleclick.net.80261.9336.302br.net',
+'ad.doubleclick.net.80262.9336.302br.net',
+'ad.doubleclick.net.80267.9336.302br.net',
+'ad.doubleclick.net.80270.9336.302br.net',
+'ad.doubleclick.net.80279.9336.302br.net',
+'ad.doubleclick.net.80280.9336.302br.net',
+'ad.doubleclick.net.80282.9336.302br.net',
+'ad.doubleclick.net.80283.9336.302br.net',
+'ad.doubleclick.net.80285.9336.302br.net',
+'ad.doubleclick.net.80286.9336.302br.net',
+'ad.doubleclick.net.80288.9336.302br.net',
+'ad.doubleclick.net.80291.9450.302br.net',
+'ad.doubleclick.net.80293.9450.302br.net',
+'ad.doubleclick.net.80295.9450.302br.net',
+'ad.doubleclick.net.80296.9450.302br.net',
+'ad.doubleclick.net.80297.9450.302br.net',
+'ad.doubleclick.net.80298.9450.302br.net',
+'ad.doubleclick.net.80299.9450.302br.net',
+'ad.doubleclick.net.80300.9450.302br.net',
+'ad.doubleclick.net.80301.9450.302br.net',
+'ad.doubleclick.net.80304.9450.302br.net',
+'ad.doubleclick.net.80305.9450.302br.net',
+'ad.doubleclick.net.80306.9450.302br.net',
+'ad.doubleclick.net.80307.9450.302br.net',
+'ad.doubleclick.net.80312.9450.302br.net',
+'ad.doubleclick.net.80313.9450.302br.net',
+'ad.doubleclick.net.80314.9450.302br.net',
+'ad.doubleclick.net.80315.9450.302br.net',
+'ad.doubleclick.net.80316.9450.302br.net',
+'ad.doubleclick.net.80317.9450.302br.net',
+'ad.doubleclick.net.80318.9682.302br.net',
+'ad.doubleclick.net.80319.9682.302br.net',
+'ad.doubleclick.net.80320.9682.302br.net',
+'ad.doubleclick.net.80321.9682.302br.net',
+'ad.doubleclick.net.80323.9682.302br.net',
+'ad.doubleclick.net.80325.9682.302br.net',
+'ad.doubleclick.net.80327.9682.302br.net',
+'ad.doubleclick.net.80373.9677.302br.net',
+'ad.doubleclick.net.80375.9677.302br.net',
+'ad.doubleclick.net.80376.9677.302br.net',
+'ad.doubleclick.net.80378.9677.302br.net',
+'ad.doubleclick.net.80385.9677.302br.net',
+'ad.doubleclick.net.80387.9677.302br.net',
+'ad.doubleclick.net.80397.9677.302br.net',
+'ad.doubleclick.net.80399.9677.302br.net',
+'ad.doubleclick.net.80400.9677.302br.net',
+'ad.doubleclick.net.80402.9677.302br.net',
+'ad.doubleclick.net.80403.9677.302br.net',
+'ad.doubleclick.net.80405.9677.302br.net',
+'ad.doubleclick.net.80406.9677.302br.net',
+'ad.doubleclick.net.80408.9677.302br.net',
+'ad.doubleclick.net.80410.9515.302br.net',
+'ad.doubleclick.net.80411.9515.302br.net',
+'ad.doubleclick.net.80413.9515.302br.net',
+'ad.doubleclick.net.80414.9515.302br.net',
+'ad.doubleclick.net.80416.9515.302br.net',
+'ad.doubleclick.net.80417.9515.302br.net',
+'ad.doubleclick.net.80418.9515.302br.net',
+'ad.doubleclick.net.80419.9515.302br.net',
+'ad.doubleclick.net.80420.9515.302br.net',
+'ad.doubleclick.net.80421.9515.302br.net',
+'ad.doubleclick.net.80422.9515.302br.net',
+'ad.doubleclick.net.80423.9515.302br.net',
+'ad.doubleclick.net.80425.9515.302br.net',
+'ad.doubleclick.net.80426.9515.302br.net',
+'ad.doubleclick.net.80427.9515.302br.net',
+'ad.doubleclick.net.80428.9515.302br.net',
+'ad.doubleclick.net.80429.9515.302br.net',
+'ad.doubleclick.net.80430.9515.302br.net',
+'ad.doubleclick.net.80431.9515.302br.net',
+'ad.doubleclick.net.80432.9515.302br.net',
+'ad.doubleclick.net.80433.9515.302br.net',
+'ad.doubleclick.net.80434.9515.302br.net',
+'ad.doubleclick.net.80435.9515.302br.net',
+'ad.doubleclick.net.80628.9685.302br.net',
+'ad.doubleclick.net.80629.9685.302br.net',
+'ad.doubleclick.net.80630.9685.302br.net',
+'ad.doubleclick.net.80631.9685.302br.net',
+'ad.doubleclick.net.80632.9685.302br.net',
+'ad.doubleclick.net.80633.9685.302br.net',
+'ad.doubleclick.net.80641.9685.302br.net',
+'ad.doubleclick.net.80642.9685.302br.net',
+'ad.doubleclick.net.80644.9685.302br.net',
+'ad.doubleclick.net.80645.9685.302br.net',
+'ad.doubleclick.net.80646.9685.302br.net',
+'ad.doubleclick.net.80647.9685.302br.net',
+'ad.doubleclick.net.80648.9685.302br.net',
+'ad.doubleclick.net.80649.9685.302br.net',
+'ad.doubleclick.net.80650.9685.302br.net',
+'ad.doubleclick.net.80651.9685.302br.net',
+'ad.doubleclick.net.80653.9685.302br.net',
+'ad.doubleclick.net.80654.9685.302br.net',
+'ad.doubleclick.net.80655.9685.302br.net',
+'ad.doubleclick.net.80656.9685.302br.net',
+'ad.doubleclick.net.80657.9685.302br.net',
+'ad.doubleclick.net.80661.9685.302br.net',
+'ad.doubleclick.net.80662.9685.302br.net',
+'ad.doubleclick.net.80663.9685.302br.net',
+'ad.doubleclick.net.80664.9685.302br.net',
+'ad.doubleclick.net.80665.9685.302br.net',
+'ad.doubleclick.net.80666.9685.302br.net',
+'ad.doubleclick.net.80667.9685.302br.net',
+'ad.doubleclick.net.80668.9685.302br.net',
+'ad.doubleclick.net.80669.9685.302br.net',
+'ad.doubleclick.net.80670.9685.302br.net',
+'ad.doubleclick.net.80671.9685.302br.net',
+'ad.doubleclick.net.80672.9685.302br.net',
+'ad.doubleclick.net.80674.9685.302br.net',
+'ad.doubleclick.net.80675.9685.302br.net',
+'ad.doubleclick.net.80676.9685.302br.net',
+'ad.doubleclick.net.80677.9685.302br.net',
+'ad.doubleclick.net.80678.9685.302br.net',
+'ad.doubleclick.net.80686.9685.302br.net',
+'ad.doubleclick.net.80689.9685.302br.net',
+'ad.doubleclick.net.80690.9685.302br.net',
+'ad.doubleclick.net.80691.9685.302br.net',
+'ad.doubleclick.net.80692.9685.302br.net',
+'ad.doubleclick.net.80693.9685.302br.net',
+'ad.doubleclick.net.80695.9685.302br.net',
+'ad.doubleclick.net.80696.9685.302br.net',
+'ad.doubleclick.net.80698.9685.302br.net',
+'ad.doubleclick.net.80700.9685.302br.net',
+'ad.doubleclick.net.80701.9685.302br.net',
+'ad.doubleclick.net.80702.9685.302br.net',
+'ad.doubleclick.net.80706.9685.302br.net',
+'ad.doubleclick.net.80707.9685.302br.net',
+'ad.doubleclick.net.80708.9685.302br.net',
+'ad.doubleclick.net.80709.9685.302br.net',
+'ad.doubleclick.net.80710.9685.302br.net',
+'ad.doubleclick.net.80711.9685.302br.net',
+'ad.doubleclick.net.80712.9685.302br.net',
+'ad.doubleclick.net.80713.9685.302br.net',
+'ad.doubleclick.net.80714.9685.302br.net',
+'ad.doubleclick.net.80715.9685.302br.net',
+'ad.doubleclick.net.80716.9685.302br.net',
+'ad.doubleclick.net.80717.9685.302br.net',
+'ad.doubleclick.net.80719.9357.302br.net',
+'ad.doubleclick.net.80722.9357.302br.net',
+'ad.doubleclick.net.80725.9357.302br.net',
+'ad.doubleclick.net.80729.9357.302br.net',
+'ad.doubleclick.net.80732.9357.302br.net',
+'ad.doubleclick.net.80735.9357.302br.net',
+'ad.doubleclick.net.80738.9357.302br.net',
+'ad.doubleclick.net.80741.9357.302br.net',
+'ad.doubleclick.net.80744.9357.302br.net',
+'ad.doubleclick.net.80880.9682.302br.net',
+'ad.doubleclick.net.80882.9682.302br.net',
+'ad.doubleclick.net.80885.9682.302br.net',
+'ad.doubleclick.net.80886.9682.302br.net',
+'ad.doubleclick.net.80890.9682.302br.net',
+'ad.doubleclick.net.80891.9682.302br.net',
+'ad.doubleclick.net.80892.9682.302br.net',
+'ad.doubleclick.net.80896.9682.302br.net',
+'ad.doubleclick.net.80897.9682.302br.net',
+'ad.doubleclick.net.80898.9682.302br.net',
+'ad.doubleclick.net.80899.9682.302br.net',
+'ad.doubleclick.net.80900.9682.302br.net',
+'ad.doubleclick.net.80902.9682.302br.net',
+'ad.doubleclick.net.80906.9682.302br.net',
+'ad.doubleclick.net.80908.9682.302br.net',
+'ad.doubleclick.net.80910.9682.302br.net',
+'ad.doubleclick.net.80911.9682.302br.net',
+'ad.doubleclick.net.80912.9682.302br.net',
+'ad.doubleclick.net.80916.9682.302br.net',
+'ad.doubleclick.net.80918.9682.302br.net',
+'ad.doubleclick.net.80968.9689.302br.net',
+'ad.doubleclick.net.80969.9689.302br.net',
+'ad.doubleclick.net.80970.9689.302br.net',
+'ad.doubleclick.net.80972.9689.302br.net',
+'ad.doubleclick.net.80973.9689.302br.net',
+'ad.doubleclick.net.80974.9689.302br.net',
+'ad.doubleclick.net.80975.9689.302br.net',
+'ad.doubleclick.net.80976.9689.302br.net',
+'ad.doubleclick.net.80977.9689.302br.net',
+'ad.doubleclick.net.80978.9689.302br.net',
+'ad.doubleclick.net.80979.9689.302br.net',
+'ad.doubleclick.net.80980.9584.302br.net',
+'ad.doubleclick.net.80981.9584.302br.net',
+'ad.doubleclick.net.80982.9584.302br.net',
+'ad.doubleclick.net.80983.9584.302br.net',
+'ad.doubleclick.net.80984.9584.302br.net',
+'ad.doubleclick.net.80985.9584.302br.net',
+'ad.doubleclick.net.80986.9584.302br.net',
+'ad.doubleclick.net.80987.9584.302br.net',
+'ad.doubleclick.net.80988.9584.302br.net',
+'ad.doubleclick.net.80989.9584.302br.net',
+'ad.doubleclick.net.80990.9584.302br.net',
+'ad.doubleclick.net.80992.9584.302br.net',
+'ad.doubleclick.net.80993.9584.302br.net',
+'ad.doubleclick.net.80994.9584.302br.net',
+'ad.doubleclick.net.80995.9544.302br.net',
+'ad.doubleclick.net.80996.9544.302br.net',
+'ad.doubleclick.net.80997.9544.302br.net',
+'ad.doubleclick.net.80998.9544.302br.net',
+'ad.doubleclick.net.80999.9544.302br.net',
+'ad.doubleclick.net.81000.9544.302br.net',
+'ad.doubleclick.net.81001.9544.302br.net',
+'ad.doubleclick.net.81002.9544.302br.net',
+'ad.doubleclick.net.81003.9544.302br.net',
+'ad.doubleclick.net.892.9003.302br.net',
+'ad.doubleclick.net.901.9003.302br.net',
+'ad.doubleclick.net.947.9005.302br.net',
+'ad.doubleclick.net.950.9005.302br.net',
+'ad.doubleclick.net.954.9005.302br.net',
+'ad.doubyeclick.net.60605.9436.302br.net',
+'ad.dslr-forum.de',
+'ad.duga.jp',
+'ad.dyntracker.com',
+'ad.dyntracker.de',
+'ad.e-kolay.net',
+'ad.eanalyzer.de',
+'ad.eg.doubleclick.net',
+'ad.egloos.com',
+'ad.eltext.com',
+'ad.ent400-2.tbn.ru',
+'ad.ent400.tbn.ru',
+'ad.eporner.com',
+'ad.ero.be',
+'ad.ero.nl',
+'ad.erohost.com',
+'ad.erotik-click.de',
+'ad.es.chilinext.com',
+'ad.es.doubleclick.net',
+'ad.ethicalads.net',
+'ad.ettoday.net',
+'ad.eurosport.com',
+'ad.evozi.com',
+'ad.excite.co.jp',
+'ad.extrabanner.com',
+'ad.ezcybersearch.com',
+'ad.ezmob.com',
+'ad.family.go.com',
+'ad.fi.doubleclick.net',
+'ad.firstadsolution.com',
+'ad.flurry.com',
+'ad.foxnetworks.com',
+'ad.fr.doubleclick.net',
+'ad.freshersexposed.com',
+'ad.games.ch',
+'ad.globalinteractive.com',
+'ad.globalismedia.com',
+'ad.globe7.com',
+'ad.go.com',
+'ad.goo.ne.jp',
+'ad.gr.doubleclick.net',
+'ad.grafika.cz',
+'ad.gt.doubleclick.net',
+'ad.highsearch.co.kr',
+'ad.hk.doubleclick.net',
+'ad.hodomobile.com',
+'ad.hornymatches.com',
+'ad.hpg.com.br',
+'ad.hpg.ig.com.br',
+'ad.html.it',
+'ad.hu.doubleclick.net',
+'ad.hyena.cz',
+'ad.ibest.com.br',
+'ad.iconadserver.com',
+'ad.ie.doubleclick.net',
+'ad.iii.co.uk',
+'ad.iinfo.cz',
+'ad.il.doubleclick.net',
+'ad.ilove.de',
+'ad.ilse.nl',
+'ad.in.doubleclick.net',
+'ad.infoseek.com',
+'ad.insightexpress.com',
+'ad.intsig.net',
+'ad.ipredictive.com',
+'ad.ir.ru',
+'ad.is.doubleclick.net',
+'ad.it.chilinext.com',
+'ad.it.doubleclick.net',
+'ad.ittoolbox.com',
+'ad.jamba.net',
+'ad.jamster.co.uk',
+'ad.jetsoftware.com',
+'ad.jp.ap.valuecommerce.com',
+'ad.jp.doubleclick.net',
+'ad.juksr.com',
+'ad.jumbaexchange.com',
+'ad.kat.ph',
+'ad.kataweb.it',
+'ad.keenspace.com',
+'ad.kr.doubleclick.net',
+'ad.kw.doubleclick.net',
+'ad.layer-ad.org',
+'ad.lbb.org',
+'ad.leadbolt.net',
+'ad.leadboltads.net',
+'ad.leadboltapps.net',
+'ad.leadboltmobile.net',
+'ad.letsbonus.com',
+'ad.lfstmedia.com',
+'ad.linkexchange.com',
+'ad.linkexchange.net',
+'ad.linksynergy.com',
+'ad.linxcz.cz',
+'ad.liveinternet.ru',
+'ad.livere.co.kr',
+'ad.lolipop.jp',
+'ad.lupa.cz',
+'ad.m5prod.net',
+'ad.ma.doubleclick.net',
+'ad.mail.ru',
+'ad.main-netz.de',
+'ad.maist.jp',
+'ad.mangapanda.com',
+'ad.mangareader.net',
+'ad.marsmediachannels.com',
+'ad.mbn.bb.ru',
+'ad.media6degrees.com',
+'ad.mediaadserver.com',
+'ad.mediaplex.com',
+'ad.mediaprecision.net',
+'ad.mediastorm.hu',
+'ad.mediresource.com',
+'ad.mesomorphosis.com',
+'ad.metanetwork.com',
+'ad.mirror.co.uk',
+'ad.mlnadvertising.com',
+'ad.mo.doubleclick.net',
+'ad.monetizus.com',
+'ad.msn.co.il',
+'ad.musicmatch.com',
+'ad.mwork.vn',
+'ad.mx.doubleclick.net',
+'ad.my.doubleclick.net',
+'ad.mylinea.com',
+'ad.n2434.doubleclick.net',
+'ad.n2434.doubleclick.net.22562.9135.302br.net',
+'ad.n2434.doubleclick.net.22565.9135.302br.net',
+'ad.net-activities.com',
+'ad.networkcpm.com',
+'ad.newmail.ru',
+'ad.newsnow.net',
+'ad.nifty.com',
+'ad.nl.doubleclick.net',
+'ad.no.doubleclick.net',
+'ad.nobreak.com',
+'ad.nozonedata.com',
+'ad.nttnavi.co.jp',
+'ad.nz.doubleclick.net',
+'ad.ohmynews.com',
+'ad.onlineadserv.com',
+'ad.onyx7.com',
+'ad.orbitel.bg',
+'ad.oubleclick.net.44902.9339.302br.net',
+'ad.outsidehub.com',
+'ad.ox88.info',
+'ad.payclick.it',
+'ad.paycount.com',
+'ad.paypal.com',
+'ad.pbs.bb.ru',
+'ad.pchome.com.tw',
+'ad.pe.doubleclick.net',
+'ad.pensamedia.org',
+'ad.perfectworld.com',
+'ad.perfectworld.eu',
+'ad.ph.doubleclick.net',
+'ad.pickadz.com',
+'ad.pickple.net',
+'ad.piximedia.com',
+'ad.pixnet.net',
+'ad.pl.doubleclick.net',
+'ad.planclick.co.kr',
+'ad.preferances.com',
+'ad.prismamediadigital.com',
+'ad.propellerads.com',
+'ad.proxy.sh',
+'ad.prv.pl',
+'ad.pt.doubleclick.net',
+'ad.publicidees.com',
+'ad.punto-informatico.it',
+'ad.pupsik.ru',
+'ad.pyce.info',
+'ad.rambler.ru',
+'ad.reachjunction.com',
+'ad.reachlocal.com',
+'ad.realmcdn.net',
+'ad.realmedia.co.kr',
+'ad.reduxmedia.com',
+'ad.referencement.01net.com',
+'ad.rekket.com',
+'ad.reklamstore.com',
+'ad.repubblica.it',
+'ad.retargeter.com',
+'ad.reunion.com',
+'ad.rkads.com',
+'ad.ro.doubleclick.net',
+'ad.ru.doubleclick.net',
+'ad.sa.doubleclick.net',
+'ad.sa9.woowy.com',
+'ad.sab.woowy.com',
+'ad.scadnet.com',
+'ad.scanmedios.com',
+'ad.se.doubleclick.net',
+'ad.seagulltracer.com',
+'ad.search.ch',
+'ad.sensismediasmart.com.au',
+'ad.sevenads.net',
+'ad.sexcount.de',
+'ad.seznam.cz',
+'ad.sg.doubleclick.net',
+'ad.shop.tbn.ru',
+'ad.simgames.net',
+'ad.singletrackworld.com',
+'ad.sitemaji.com',
+'ad.sk.doubleclick.net',
+'ad.sma.punto.net',
+'ad.sma.punto.org',
+'ad.smaad.jp',
+'ad.smaclick.com',
+'ad.smartgroups.com',
+'ad.smsmovies.net',
+'ad.smsmovies.se',
+'ad.soft365.com',
+'ad.soicos.com',
+'ad.strict.tbn.ru',
+'ad.t-ad.co.kr',
+'ad.tblamnetwork.com',
+'ad.tbn.ru',
+'ad.technoratimedia.com',
+'ad.tek.no',
+'ad.tenderteen.com',
+'ad.terra.doubleclick.net',
+'ad.text.tbn.ru',
+'ad.th.doubleclick.net',
+'ad.theadhost.com',
+'ad.thewheelof.com',
+'ad.thisav.com',
+'ad.thoughtsondance.info',
+'ad.tokyo-tube-ad.com',
+'ad.tom.com',
+'ad.toplist.cz',
+'ad.topstat.com',
+'ad.tr.doubleclick.net',
+'ad.track1v.com',
+'ad.trafficgate.net',
+'ad.trafficmp.com.60640.9377.302br.net',
+'ad.trafficmp.com.72284.9606.302br.net',
+'ad.trafficmp.com.76504.9641.302br.net',
+'ad.trafficmp.com.77832.9606.302br.net',
+'ad.traffmonster.info',
+'ad.trwv.net',
+'ad.tubeadnetwork.com',
+'ad.turn.com',
+'ad.tv2.no',
+'ad.tw.doubleclick.net',
+'ad.uk.doubleclick.net',
+'ad.uproar.com',
+'ad.us.doubleclick.net',
+'ad.usatoday.com',
+'ad.userporn.com',
+'ad.utop.ir',
+'ad.valuecalling.com',
+'ad.valuecommerce.ne.jp',
+'ad.vcm.jp',
+'ad.ve.doubleclick.net',
+'ad.videokit.org',
+'ad.virtualave.com',
+'ad.vonna.com',
+'ad.vrvm.com',
+'ad.walla.co.il',
+'ad.wap4dollars.in',
+'ad.way.cz',
+'ad.weatherbug.com',
+'ad.webm.tbn.ru',
+'ad.webm120.tbn.ru',
+'ad.where.com',
+'ad.winningpartner.com',
+'ad.womensforum.com',
+'ad.www.net.cn',
+'ad.wz.cz',
+'ad.xertive.com',
+'ad.xplusone.com',
+'ad.xtendmedia.com',
+'ad.yadro.ru',
+'ad.yahoo.com',
+'ad.yam.com.tw',
+'ad.yieldlab.net',
+'ad.yieldmanager.com',
+'ad.yieldpartners.com',
+'ad.yllix.com',
+'ad.yourmedia.com',
+'ad.yoyo.pl',
+'ad.z5x.net',
+'ad.za.doubleclick.net',
+'ad.zanox.com',
+'ad.zencudo.co.uk',
+'ad.zet.net',
+'ad.zompmedia.com',
+'ad0.adspaces.ero-advertising.com',
+'ad0.api.ero-advertising.com',
+'ad0.banners.ero-advertising.com',
+'ad0.data2.ero-advertising.com',
+'ad0.haynet.com',
+'ad0.hpg.com.br',
+'ad0.paycount.com',
+'ad00.hpg.com.br',
+'ad00.paycount.com',
+'ad01.adonspot.com',
+'ad01.advertise.com',
+'ad01.focalink.com',
+'ad01.hpg.com.br',
+'ad01.mediacorpsingapore.com',
+'ad01.paycount.com',
+'ad02.focalink.com',
+'ad03.adam4adam.com',
+'ad03.focalink.com',
+'ad03.hpg.com.br',
+'ad03.paycount.com',
+'ad04.focalink.com',
+'ad04.hpg.com.br',
+'ad04.paycount.com',
+'ad05.focalink.com',
+'ad05.hpg.com.br',
+'ad05.paycount.com',
+'ad06.focalink.com',
+'ad06.hpg.com.br',
+'ad06.paycount.com',
+'ad07.focalink.com',
+'ad07.hpg.com.br',
+'ad07.paycount.com',
+'ad08.focalink.com',
+'ad08.hpg.com.br',
+'ad08.paycount.com',
+'ad09.focalink.com',
+'ad09.hpg.com.br',
+'ad09.paycount.com',
+'ad1.adfarm1.adition.com',
+'ad1.ads.ero-advertising.com',
+'ad1.adspaces.ero-advertising.com',
+'ad1.api.ero-advertising.com',
+'ad1.bannerbank.ru',
+'ad1.banners.ero-advertising.com',
+'ad1.bb.ru',
+'ad1.dada.it',
+'ad1.emediate.dk',
+'ad1.ero-advertising.com',
+'ad1.gamezone.de',
+'ad1.hpg.com.br',
+'ad1.icorp.net',
+'ad1.kde.cz',
+'ad1.nend.net',
+'ad1.pamedia.com.au',
+'ad1.paycount.com',
+'ad1.primorye.ru',
+'ad1.radioreti.it',
+'ad1.sbs.co.kr',
+'ad1.searchmiracle.com',
+'ad1.speedbit.com',
+'ad1.virtualave.com',
+'ad1.yourmedia.com',
+'ad10.bannerbank.ru',
+'ad10.focalink.com',
+'ad10.hpg.com.br',
+'ad10.paycount.com',
+'ad10.speedbit.com',
+'ad100.hpg.com.br',
+'ad100.paycount.com',
+'ad100m.adk2.co',
+'ad101.hpg.com.br',
+'ad101.paycount.com',
+'ad101m.adk2.co',
+'ad102.hpg.com.br',
+'ad102.paycount.com',
+'ad102m.adk2.co',
+'ad103.hpg.com.br',
+'ad103.paycount.com',
+'ad103m.adk2.co',
+'ad104.hpg.com.br',
+'ad104.paycount.com',
+'ad104m.adk2.co',
+'ad105.hpg.com.br',
+'ad105.paycount.com',
+'ad105m.adk2.co',
+'ad106.hpg.com.br',
+'ad106.paycount.com',
+'ad106m.adk2.co',
+'ad107.hpg.com.br',
+'ad107.paycount.com',
+'ad107m.adk2.co',
+'ad108.hpg.com.br',
+'ad108.paycount.com',
+'ad108m.adk2.co',
+'ad109.hpg.com.br',
+'ad109.paycount.com',
+'ad109m.adk2.co',
+'ad10m.adk2.co',
+'ad11.bannerbank.ru',
+'ad11.focalink.com',
+'ad11.hpg.com.br',
+'ad11.paycount.com',
+'ad110.hpg.com.br',
+'ad110.paycount.com',
+'ad110m.adk2.co',
+'ad111.hpg.com.br',
+'ad111.paycount.com',
+'ad111m.adk2.co',
+'ad112.hpg.com.br',
+'ad112.paycount.com',
+'ad112m.adk2.co',
+'ad113.hpg.com.br',
+'ad113.paycount.com',
+'ad113m.adk2.co',
+'ad114.hpg.com.br',
+'ad114.paycount.com',
+'ad114m.adk2.co',
+'ad115.hpg.com.br',
+'ad115.paycount.com',
+'ad115m.adk2.co',
+'ad116.hpg.com.br',
+'ad116.paycount.com',
+'ad116m.adk2.co',
+'ad117.hpg.com.br',
+'ad117.paycount.com',
+'ad117m.adk2.co',
+'ad118.hpg.com.br',
+'ad118.paycount.com',
+'ad118m.adk2.co',
+'ad119.hpg.com.br',
+'ad119.paycount.com',
+'ad119m.adk2.co',
+'ad11m.adk2.co',
+'ad12.bannerbank.ru',
+'ad12.focalink.com',
+'ad12.hpg.com.br',
+'ad12.paycount.com',
+'ad120.hpg.com.br',
+'ad120.paycount.com',
+'ad120m.adk2.co',
+'ad121.hpg.com.br',
+'ad121.paycount.com',
+'ad121m.adk2.co',
+'ad122.hpg.com.br',
+'ad122.paycount.com',
+'ad122m.adk2.co',
+'ad123.hpg.com.br',
+'ad123.paycount.com',
+'ad123m.adk2.co',
+'ad124.hpg.com.br',
+'ad124.paycount.com',
+'ad124m.adk2.co',
+'ad125.hpg.com.br',
+'ad125.paycount.com',
+'ad125m.adk2.co',
+'ad126.hpg.com.br',
+'ad126.paycount.com',
+'ad126m.adk2.co',
+'ad127.hpg.com.br',
+'ad127.paycount.com',
+'ad127m.adk2.co',
+'ad128.hpg.com.br',
+'ad128.paycount.com',
+'ad128m.adk2.co',
+'ad129.hpg.com.br',
+'ad129.paycount.com',
+'ad129m.adk2.co',
+'ad12m.adk2.co',
+'ad13.bannerbank.ru',
+'ad13.focalink.com',
+'ad13.hpg.com.br',
+'ad13.paycount.com',
+'ad130.hpg.com.br',
+'ad130.paycount.com',
+'ad130m.adk2.co',
+'ad131.hpg.com.br',
+'ad131.paycount.com',
+'ad131m.adk2.co',
+'ad132.hpg.com.br',
+'ad132.paycount.com',
+'ad132m.adk2.co',
+'ad133.hpg.com.br',
+'ad133.paycount.com',
+'ad133m.adk2.co',
+'ad134.hpg.com.br',
+'ad134.paycount.com',
+'ad134m.adk2.co',
+'ad135.hpg.com.br',
+'ad135.paycount.com',
+'ad135m.adk2.co',
+'ad136.hpg.com.br',
+'ad136.paycount.com',
+'ad136m.adk2.co',
+'ad137.hpg.com.br',
+'ad137.paycount.com',
+'ad137m.adk2.co',
+'ad138.hpg.com.br',
+'ad138.paycount.com',
+'ad138m.adk2.co',
+'ad139.hpg.com.br',
+'ad139.paycount.com',
+'ad139m.adk2.co',
+'ad13m.adk2.co',
+'ad14.bannerbank.ru',
+'ad14.focalink.com',
+'ad14.hpg.com.br',
+'ad14.paycount.com',
+'ad140.hpg.com.br',
+'ad140.paycount.com',
+'ad140m.adk2.co',
+'ad141.hpg.com.br',
+'ad141.paycount.com',
+'ad141m.adk2.co',
+'ad142.hpg.com.br',
+'ad142.paycount.com',
+'ad142m.adk2.co',
+'ad143.hpg.com.br',
+'ad143.paycount.com',
+'ad143m.adk2.co',
+'ad144.hpg.com.br',
+'ad144.paycount.com',
+'ad144m.adk2.co',
+'ad145.hpg.com.br',
+'ad145.paycount.com',
+'ad145m.adk2.co',
+'ad146.hpg.com.br',
+'ad146.paycount.com',
+'ad146m.adk2.co',
+'ad147.hpg.com.br',
+'ad147.paycount.com',
+'ad147m.adk2.co',
+'ad148.hpg.com.br',
+'ad148.paycount.com',
+'ad148m.adk2.co',
+'ad149.hpg.com.br',
+'ad149.paycount.com',
+'ad149m.adk2.co',
+'ad14m.adk2.co',
+'ad15.bannerbank.ru',
+'ad15.focalink.com',
+'ad15.hpg.com.br',
+'ad15.paycount.com',
+'ad150.hpg.com.br',
+'ad150.paycount.com',
+'ad150m.adk2.co',
+'ad151.hpg.com.br',
+'ad151.paycount.com',
+'ad151m.adk2.co',
+'ad152.hpg.com.br',
+'ad152.paycount.com',
+'ad152m.adk2.co',
+'ad153.hpg.com.br',
+'ad153.paycount.com',
+'ad153m.adk2.co',
+'ad154.hpg.com.br',
+'ad154.paycount.com',
+'ad154m.adk2.co',
+'ad155.hpg.com.br',
+'ad155.paycount.com',
+'ad155m.adk2.co',
+'ad156.hpg.com.br',
+'ad156.paycount.com',
+'ad156m.adk2.co',
+'ad157.hpg.com.br',
+'ad157.paycount.com',
+'ad157m.adk2.co',
+'ad158.hpg.com.br',
+'ad158.paycount.com',
+'ad158m.adk2.co',
+'ad159.hpg.com.br',
+'ad159.paycount.com',
+'ad159m.adk2.co',
+'ad15m.adk2.co',
+'ad16.bannerbank.ru',
+'ad16.focalink.com',
+'ad16.hpg.com.br',
+'ad16.paycount.com',
+'ad160.hpg.com.br',
+'ad160.paycount.com',
+'ad160m.adk2.co',
+'ad161.hpg.com.br',
+'ad161.paycount.com',
+'ad161m.adk2.co',
+'ad162.hpg.com.br',
+'ad162.paycount.com',
+'ad162m.adk2.co',
+'ad163.hpg.com.br',
+'ad163.paycount.com',
+'ad163m.adk2.co',
+'ad164.hpg.com.br',
+'ad164.paycount.com',
+'ad164m.adk2.co',
+'ad165.hpg.com.br',
+'ad165.paycount.com',
+'ad165m.adk2.co',
+'ad166.hpg.com.br',
+'ad166.paycount.com',
+'ad166m.adk2.co',
+'ad167.hpg.com.br',
+'ad167.paycount.com',
+'ad167m.adk2.co',
+'ad168.hpg.com.br',
+'ad168.paycount.com',
+'ad168m.adk2.co',
+'ad169.hpg.com.br',
+'ad169.paycount.com',
+'ad169m.adk2.co',
+'ad16m.adk2.co',
+'ad17.bannerbank.ru',
+'ad17.focalink.com',
+'ad17.hpg.com.br',
+'ad17.paycount.com',
+'ad170.hpg.com.br',
+'ad170.paycount.com',
+'ad170m.adk2.co',
+'ad171.hpg.com.br',
+'ad171.paycount.com',
+'ad171m.adk2.co',
+'ad172.hpg.com.br',
+'ad172.paycount.com',
+'ad172m.adk2.co',
+'ad173.hpg.com.br',
+'ad173.paycount.com',
+'ad173m.adk2.co',
+'ad174.hpg.com.br',
+'ad174.paycount.com',
+'ad174m.adk2.co',
+'ad175.hpg.com.br',
+'ad175.paycount.com',
+'ad175m.adk2.co',
+'ad176.hpg.com.br',
+'ad176.paycount.com',
+'ad176m.adk2.co',
+'ad177.hpg.com.br',
+'ad177.paycount.com',
+'ad177m.adk2.co',
+'ad178.hpg.com.br',
+'ad178.paycount.com',
+'ad178m.adk2.co',
+'ad179.hpg.com.br',
+'ad179.paycount.com',
+'ad179m.adk2.co',
+'ad17m.adk2.co',
+'ad18.bannerbank.ru',
+'ad18.focalink.com',
+'ad18.hpg.com.br',
+'ad18.paycount.com',
+'ad180.hpg.com.br',
+'ad180.paycount.com',
+'ad180m.adk2.co',
+'ad181.hpg.com.br',
+'ad181.paycount.com',
+'ad181m.adk2.co',
+'ad182.hpg.com.br',
+'ad182.paycount.com',
+'ad182m.adk2.co',
+'ad183.hpg.com.br',
+'ad183.paycount.com',
+'ad183m.adk2.co',
+'ad184.hpg.com.br',
+'ad184.paycount.com',
+'ad184m.adk2.co',
+'ad185.hpg.com.br',
+'ad185.paycount.com',
+'ad185m.adk2.co',
+'ad186.hpg.com.br',
+'ad186.paycount.com',
+'ad186m.adk2.co',
+'ad187.hpg.com.br',
+'ad187.paycount.com',
+'ad187m.adk2.co',
+'ad188.hpg.com.br',
+'ad188.paycount.com',
+'ad188m.adk2.co',
+'ad189.hpg.com.br',
+'ad189.paycount.com',
+'ad189m.adk2.co',
+'ad18m.adk2.co',
+'ad19.bannerbank.ru',
+'ad19.focalink.com',
+'ad19.hpg.com.br',
+'ad19.paycount.com',
+'ad190.hpg.com.br',
+'ad190.paycount.com',
+'ad190m.adk2.co',
+'ad191.hpg.com.br',
+'ad191.paycount.com',
+'ad191m.adk2.co',
+'ad192.hpg.com.br',
+'ad192.paycount.com',
+'ad192m.adk2.co',
+'ad193.hpg.com.br',
+'ad193.paycount.com',
+'ad193m.adk2.co',
+'ad194.hpg.com.br',
+'ad194.paycount.com',
+'ad194m.adk2.co',
+'ad195.hpg.com.br',
+'ad195.paycount.com',
+'ad195m.adk2.co',
+'ad196.hpg.com.br',
+'ad196.paycount.com',
+'ad196m.adk2.co',
+'ad197.hpg.com.br',
+'ad197.paycount.com',
+'ad197m.adk2.co',
+'ad198.hpg.com.br',
+'ad198.paycount.com',
+'ad198m.adk2.co',
+'ad199.hpg.com.br',
+'ad199.paycount.com',
+'ad199m.adk2.co',
+'ad19m.adk2.co',
+'ad1m.adk2.co',
+'ad2.ad.doubleclick.net.77817.9665.302br.net',
+'ad2.adfarm1.adition.com',
+'ad2.adspaces.ero-advertising.com',
+'ad2.adxpansion.com',
+'ad2.allbanners.ru',
+'ad2.api.ero-advertising.com',
+'ad2.bannerbank.ru',
+'ad2.banners.ero-advertising.com',
+'ad2.bb.ru',
+'ad2.doubleclick.net',
+'ad2.doublepimp.com',
+'ad2.ero-advertising.com',
+'ad2.firehousezone.com',
+'ad2.fivecdm.com',
+'ad2.hpg.com.br',
+'ad2.linxcz.cz',
+'ad2.lupa.cz',
+'ad2.paycount.com',
+'ad2.rambler.ru',
+'ad2.sbs.co.kr',
+'ad2.speedbit.com',
+'ad2.thumbs.ero-advertising.com',
+'ad2.trafficgate.net',
+'ad2.turn.com',
+'ad2.yam.com',
+'ad2.yam.com.tw',
+'ad20.bannerbank.ru',
+'ad20.hpg.com.br',
+'ad20.net',
+'ad20.paycount.com',
+'ad200.hpg.com.br',
+'ad200.paycount.com',
+'ad2000.org',
+'ad200m.adk2.co',
+'ad201.hpg.com.br',
+'ad201.paycount.com',
+'ad201m.adk2.co',
+'ad202.hpg.com.br',
+'ad202.paycount.com',
+'ad202m.adk2.co',
+'ad203.hpg.com.br',
+'ad203.paycount.com',
+'ad203m.adk2.co',
+'ad204.hpg.com.br',
+'ad204.paycount.com',
+'ad204m.adk2.co',
+'ad205.hpg.com.br',
+'ad205.paycount.com',
+'ad205m.adk2.co',
+'ad206.hpg.com.br',
+'ad206.paycount.com',
+'ad206m.adk2.co',
+'ad207.hpg.com.br',
+'ad207.paycount.com',
+'ad207m.adk2.co',
+'ad208.hpg.com.br',
+'ad208.paycount.com',
+'ad208m.adk2.co',
+'ad209.hpg.com.br',
+'ad209.paycount.com',
+'ad209m.adk2.co',
+'ad20m.adk2.co',
+'ad21.hpg.com.br',
+'ad21.paycount.com',
+'ad210.hpg.com.br',
+'ad210.paycount.com',
+'ad210m.adk2.co',
+'ad211.hpg.com.br',
+'ad211.paycount.com',
+'ad211m.adk2.co',
+'ad212.hpg.com.br',
+'ad212.paycount.com',
+'ad212m.adk2.co',
+'ad213.hpg.com.br',
+'ad213.paycount.com',
+'ad213m.adk2.co',
+'ad214.hpg.com.br',
+'ad214.paycount.com',
+'ad214m.adk2.co',
+'ad215.hpg.com.br',
+'ad215.paycount.com',
+'ad215m.adk2.co',
+'ad216.hpg.com.br',
+'ad216.paycount.com',
+'ad216m.adk2.co',
+'ad217.hpg.com.br',
+'ad217.paycount.com',
+'ad217m.adk2.co',
+'ad218.hpg.com.br',
+'ad218.paycount.com',
+'ad218m.adk2.co',
+'ad219.hpg.com.br',
+'ad219.paycount.com',
+'ad219m.adk2.co',
+'ad21m.adk2.co',
+'ad22.hpg.com.br',
+'ad22.paycount.com',
+'ad220.hpg.com.br',
+'ad220.paycount.com',
+'ad220m.adk2.co',
+'ad221.hpg.com.br',
+'ad221.paycount.com',
+'ad221m.adk2.co',
+'ad222.hpg.com.br',
+'ad222.paycount.com',
+'ad222m.adk2.co',
+'ad223.hpg.com.br',
+'ad223.paycount.com',
+'ad223m.adk2.co',
+'ad224.hpg.com.br',
+'ad224.paycount.com',
+'ad224m.adk2.co',
+'ad225.hpg.com.br',
+'ad225.paycount.com',
+'ad225m.adk2.co',
+'ad226.hpg.com.br',
+'ad226.paycount.com',
+'ad226m.adk2.co',
+'ad227.hpg.com.br',
+'ad227.paycount.com',
+'ad227m.adk2.co',
+'ad228.hpg.com.br',
+'ad228.paycount.com',
+'ad228m.adk2.co',
+'ad229.hpg.com.br',
+'ad229.paycount.com',
+'ad229m.adk2.co',
+'ad22m.adk2.co',
+'ad23.hpg.com.br',
+'ad23.paycount.com',
+'ad230.hpg.com.br',
+'ad230.paycount.com',
+'ad230m.adk2.co',
+'ad231.hpg.com.br',
+'ad231.paycount.com',
+'ad231m.adk2.co',
+'ad232.hpg.com.br',
+'ad232.paycount.com',
+'ad232m.adk2.co',
+'ad233.hpg.com.br',
+'ad233.paycount.com',
+'ad233m.adk2.co',
+'ad234.hpg.com.br',
+'ad234.paycount.com',
+'ad234m.adk2.co',
+'ad235.hpg.com.br',
+'ad235.paycount.com',
+'ad235m.adk2.co',
+'ad236.hpg.com.br',
+'ad236.paycount.com',
+'ad236m.adk2.co',
+'ad237.hpg.com.br',
+'ad237.paycount.com',
+'ad237m.adk2.co',
+'ad238.hpg.com.br',
+'ad238.paycount.com',
+'ad238m.adk2.co',
+'ad239.hpg.com.br',
+'ad239.paycount.com',
+'ad239m.adk2.co',
+'ad23m.adk2.co',
+'ad24.hpg.com.br',
+'ad24.paycount.com',
+'ad240.hpg.com.br',
+'ad240.paycount.com',
+'ad240m.adk2.co',
+'ad241.hpg.com.br',
+'ad241.paycount.com',
+'ad241m.adk2.co',
+'ad242.hpg.com.br',
+'ad242.paycount.com',
+'ad242m.adk2.co',
+'ad243.hpg.com.br',
+'ad243.paycount.com',
+'ad243m.adk2.co',
+'ad244.hpg.com.br',
+'ad244.paycount.com',
+'ad244m.adk2.co',
+'ad245.hpg.com.br',
+'ad245.paycount.com',
+'ad245m.adk2.co',
+'ad246.hpg.com.br',
+'ad246.paycount.com',
+'ad246m.adk2.co',
+'ad247.hpg.com.br',
+'ad247.paycount.com',
+'ad247m.adk2.co',
+'ad248.hpg.com.br',
+'ad248.paycount.com',
+'ad248m.adk2.co',
+'ad249.hpg.com.br',
+'ad249.paycount.com',
+'ad249m.adk2.co',
+'ad24m.adk2.co',
+'ad25.hpg.com.br',
+'ad25.paycount.com',
+'ad250.hpg.com.br',
+'ad250.paycount.com',
+'ad250m.adk2.co',
+'ad251.hpg.com.br',
+'ad251.paycount.com',
+'ad251m.adk2.co',
+'ad252.hpg.com.br',
+'ad252.paycount.com',
+'ad252m.adk2.co',
+'ad253.hpg.com.br',
+'ad253.paycount.com',
+'ad253m.adk2.co',
+'ad254.hpg.com.br',
+'ad254.paycount.com',
+'ad254m.adk2.co',
+'ad255.hpg.com.br',
+'ad255.paycount.com',
+'ad255m.adk2.co',
+'ad256m.adk2.co',
+'ad257m.adk2.co',
+'ad258m.adk2.co',
+'ad259m.adk2.co',
+'ad25m.adk2.co',
+'ad26.hpg.com.br',
+'ad26.paycount.com',
+'ad260m.adk2.co',
+'ad261m.adk2.co',
+'ad262m.adk2.co',
+'ad263m.adk2.co',
+'ad264m.adk2.co',
+'ad265m.adk2.co',
+'ad266m.adk2.co',
+'ad267m.adk2.co',
+'ad268m.adk2.co',
+'ad269m.adk2.co',
+'ad26m.adk2.co',
+'ad27.hpg.com.br',
+'ad27.paycount.com',
+'ad270m.adk2.co',
+'ad271m.adk2.co',
+'ad272m.adk2.co',
+'ad273m.adk2.co',
+'ad274m.adk2.co',
+'ad275m.adk2.co',
+'ad276m.adk2.co',
+'ad277m.adk2.co',
+'ad278m.adk2.co',
+'ad279m.adk2.co',
+'ad27m.adk2.co',
+'ad28.hpg.com.br',
+'ad28.paycount.com',
+'ad280m.adk2.co',
+'ad281m.adk2.co',
+'ad282m.adk2.co',
+'ad283m.adk2.co',
+'ad284m.adk2.co',
+'ad285m.adk2.co',
+'ad286m.adk2.co',
+'ad287m.adk2.co',
+'ad288m.adk2.co',
+'ad289m.adk2.co',
+'ad28m.adk2.co',
+'ad29.hpg.com.br',
+'ad29.paycount.com',
+'ad290m.adk2.co',
+'ad291m.adk2.co',
+'ad292m.adk2.co',
+'ad293m.adk2.co',
+'ad294m.adk2.co',
+'ad295m.adk2.co',
+'ad296m.adk2.co',
+'ad297m.adk2.co',
+'ad298m.adk2.co',
+'ad299m.adk2.co',
+'ad29m.adk2.co',
+'ad2adnetwork.biz',
+'ad2click.go2cloud.org',
+'ad2games.com',
+'ad2m.adk2.co',
+'ad2play.ftv-publicite.fr',
+'ad2up.com',
+'ad3.adfarm1.adition.com',
+'ad3.adspaces.ero-advertising.com',
+'ad3.allbanners.ru',
+'ad3.api.ero-advertising.com',
+'ad3.bannerbank.ru',
+'ad3.banners.ero-advertising.com',
+'ad3.bb.ru',
+'ad3.doublepimp.com',
+'ad3.fpa.ero-advertising.com',
+'ad3.hpg.com.br',
+'ad3.pamedia.com.au',
+'ad3.paycount.com',
+'ad3.sbs.co.kr',
+'ad3.sina.com.cn',
+'ad3.speedbit.com',
+'ad30.hpg.com.br',
+'ad30.paycount.com',
+'ad300m.adk2.co',
+'ad301m.adk2.co',
+'ad302m.adk2.co',
+'ad303m.adk2.co',
+'ad304m.adk2.co',
+'ad305m.adk2.co',
+'ad306m.adk2.co',
+'ad307m.adk2.co',
+'ad308m.adk2.co',
+'ad309m.adk2.co',
+'ad30m.adk2.co',
+'ad31.hpg.com.br',
+'ad31.paycount.com',
+'ad310m.adk2.co',
+'ad311m.adk2.co',
+'ad312m.adk2.co',
+'ad313m.adk2.co',
+'ad314m.adk2.co',
+'ad315m.adk2.co',
+'ad316m.adk2.co',
+'ad317m.adk2.co',
+'ad318m.adk2.co',
+'ad319m.adk2.co',
+'ad31m.adk2.co',
+'ad32.hpg.com.br',
+'ad32.paycount.com',
+'ad320m.adk2.co',
+'ad321m.adk2.co',
+'ad322m.adk2.co',
+'ad323m.adk2.co',
+'ad324m.adk2.co',
+'ad325m.adk2.co',
+'ad326m.adk2.co',
+'ad327m.adk2.co',
+'ad328m.adk2.co',
+'ad329m.adk2.co',
+'ad32m.adk2.co',
+'ad33.hpg.com.br',
+'ad33.paycount.com',
+'ad330m.adk2.co',
+'ad331m.adk2.co',
+'ad332m.adk2.co',
+'ad333m.adk2.co',
+'ad334m.adk2.co',
+'ad335m.adk2.co',
+'ad336m.adk2.co',
+'ad337m.adk2.co',
+'ad338m.adk2.co',
+'ad339m.adk2.co',
+'ad33m.adk2.co',
+'ad34.hpg.com.br',
+'ad34.paycount.com',
+'ad340m.adk2.co',
+'ad341m.adk2.co',
+'ad342m.adk2.co',
+'ad343m.adk2.co',
+'ad344m.adk2.co',
+'ad345m.adk2.co',
+'ad346m.adk2.co',
+'ad347m.adk2.co',
+'ad348m.adk2.co',
+'ad349m.adk2.co',
+'ad34m.adk2.co',
+'ad35.hpg.com.br',
+'ad35.paycount.com',
+'ad350m.adk2.co',
+'ad351m.adk2.co',
+'ad352m.adk2.co',
+'ad353m.adk2.co',
+'ad354m.adk2.co',
+'ad355m.adk2.co',
+'ad356m.adk2.co',
+'ad357m.adk2.co',
+'ad358m.adk2.co',
+'ad359m.adk2.co',
+'ad35m.adk2.co',
+'ad36.hpg.com.br',
+'ad36.paycount.com',
+'ad360.vn',
+'ad360m.adk2.co',
+'ad361m.adk2.co',
+'ad362m.adk2.co',
+'ad363m.adk2.co',
+'ad364m.adk2.co',
+'ad365m.adk2.co',
+'ad366m.adk2.co',
+'ad367m.adk2.co',
+'ad368m.adk2.co',
+'ad369m.adk2.co',
+'ad36m.adk2.co',
+'ad37.hpg.com.br',
+'ad37.paycount.com',
+'ad370m.adk2.co',
+'ad371m.adk2.co',
+'ad372m.adk2.co',
+'ad373m.adk2.co',
+'ad374m.adk2.co',
+'ad375m.adk2.co',
+'ad376m.adk2.co',
+'ad377m.adk2.co',
+'ad378m.adk2.co',
+'ad379m.adk2.co',
+'ad37m.adk2.co',
+'ad38.hpg.com.br',
+'ad38.paycount.com',
+'ad380m.adk2.co',
+'ad381m.adk2.co',
+'ad382m.adk2.co',
+'ad383m.adk2.co',
+'ad384m.adk2.co',
+'ad385m.adk2.co',
+'ad386m.adk2.co',
+'ad387m.adk2.co',
+'ad388m.adk2.co',
+'ad389m.adk2.co',
+'ad38m.adk2.co',
+'ad39.hpg.com.br',
+'ad39.paycount.com',
+'ad390m.adk2.co',
+'ad391m.adk2.co',
+'ad392m.adk2.co',
+'ad393m.adk2.co',
+'ad394m.adk2.co',
+'ad395m.adk2.co',
+'ad396m.adk2.co',
+'ad397m.adk2.co',
+'ad398m.adk2.co',
+'ad399m.adk2.co',
+'ad39m.adk2.co',
+'ad3m.adk2.co',
+'ad4.adfarm1.adition.com',
+'ad4.adspaces.ero-advertising.com',
+'ad4.api.ero-advertising.com',
+'ad4.bannerbank.ru',
+'ad4.banners.ero-advertising.com',
+'ad4.bb.ru',
+'ad4.enet.com.cn',
+'ad4.hpg.com.br',
+'ad4.layerads.ero-advertising.com',
+'ad4.paycount.com',
+'ad4.sina.com.cn',
+'ad4.speedbit.com',
+'ad4.thumbs.ero-advertising.com',
+'ad40.hpg.com.br',
+'ad40.paycount.com',
+'ad400m.adk2.co',
+'ad401m.adk2.co',
+'ad402m.adk2.co',
+'ad403m.adk2.co',
+'ad404m.adk2.co',
+'ad405m.adk2.co',
+'ad406m.adk2.co',
+'ad407m.adk2.co',
+'ad408m.adk2.co',
+'ad409m.adk2.co',
+'ad40m.adk2.co',
+'ad41.hpg.com.br',
+'ad41.paycount.com',
+'ad410m.adk2.co',
+'ad411m.adk2.co',
+'ad412m.adk2.co',
+'ad413m.adk2.co',
+'ad414m.adk2.co',
+'ad415m.adk2.co',
+'ad416m.adk2.co',
+'ad417m.adk2.co',
+'ad418m.adk2.co',
+'ad419m.adk2.co',
+'ad41m.adk2.co',
+'ad42.hpg.com.br',
+'ad42.paycount.com',
+'ad420m.adk2.co',
+'ad421m.adk2.co',
+'ad422m.adk2.co',
+'ad423m.adk2.co',
+'ad424m.adk2.co',
+'ad425m.adk2.co',
+'ad426m.adk2.co',
+'ad427m.adk2.co',
+'ad428m.adk2.co',
+'ad429m.adk2.co',
+'ad42m.adk2.co',
+'ad43.hpg.com.br',
+'ad43.paycount.com',
+'ad430m.adk2.co',
+'ad431m.adk2.co',
+'ad432m.adk2.co',
+'ad433m.adk2.co',
+'ad434m.adk2.co',
+'ad435m.adk2.co',
+'ad436m.adk2.co',
+'ad437m.adk2.co',
+'ad438m.adk2.co',
+'ad439m.adk2.co',
+'ad43m.adk2.co',
+'ad44.hpg.com.br',
+'ad44.paycount.com',
+'ad440m.adk2.co',
+'ad441m.adk2.co',
+'ad442m.adk2.co',
+'ad443m.adk2.co',
+'ad444m.adk2.co',
+'ad445m.adk2.co',
+'ad446m.adk2.co',
+'ad447m.adk2.co',
+'ad448m.adk2.co',
+'ad449m.adk2.co',
+'ad44m.adk2.co',
+'ad45.hpg.com.br',
+'ad45.paycount.com',
+'ad450m.adk2.co',
+'ad451m.adk2.co',
+'ad452m.adk2.co',
+'ad453m.adk2.co',
+'ad454m.adk2.co',
+'ad455m.adk2.co',
+'ad456m.adk2.co',
+'ad457m.adk2.co',
+'ad458m.adk2.co',
+'ad459m.adk2.co',
+'ad45m.adk2.co',
+'ad46.hpg.com.br',
+'ad46.paycount.com',
+'ad460m.adk2.co',
+'ad461m.adk2.co',
+'ad462m.adk2.co',
+'ad463m.adk2.co',
+'ad464m.adk2.co',
+'ad465m.adk2.co',
+'ad466m.adk2.co',
+'ad467m.adk2.co',
+'ad468m.adk2.co',
+'ad469m.adk2.co',
+'ad46m.adk2.co',
+'ad47.hpg.com.br',
+'ad47.paycount.com',
+'ad470m.adk2.co',
+'ad471m.adk2.co',
+'ad472m.adk2.co',
+'ad473m.adk2.co',
+'ad474m.adk2.co',
+'ad475m.adk2.co',
+'ad476m.adk2.co',
+'ad477m.adk2.co',
+'ad478m.adk2.co',
+'ad479m.adk2.co',
+'ad47m.adk2.co',
+'ad48.hpg.com.br',
+'ad48.paycount.com',
+'ad480m.adk2.co',
+'ad481m.adk2.co',
+'ad482m.adk2.co',
+'ad483m.adk2.co',
+'ad484m.adk2.co',
+'ad485m.adk2.co',
+'ad486m.adk2.co',
+'ad487m.adk2.co',
+'ad488m.adk2.co',
+'ad489m.adk2.co',
+'ad48m.adk2.co',
+'ad49.hpg.com.br',
+'ad49.paycount.com',
+'ad490m.adk2.co',
+'ad491m.adk2.co',
+'ad492m.adk2.co',
+'ad493m.adk2.co',
+'ad494m.adk2.co',
+'ad495m.adk2.co',
+'ad496m.adk2.co',
+'ad497m.adk2.co',
+'ad498m.adk2.co',
+'ad499m.adk2.co',
+'ad49m.adk2.co',
+'ad4game.com',
+'ad4games.com',
+'ad4m.adk2.co',
+'ad4mat.de',
+'ad4me.net',
+'ad4partners.com',
+'ad5.adfarm1.adition.com',
+'ad5.adrevolver.com',
+'ad5.adspaces.ero-advertising.com',
+'ad5.bannerbank.ru',
+'ad5.banners.ero-advertising.com',
+'ad5.bb.ru',
+'ad5.fpa.ero-advertising.com',
+'ad5.hpg.com.br',
+'ad5.paycount.com',
+'ad5.speedbit.com',
+'ad50.hpg.com.br',
+'ad50.paycount.com',
+'ad500m.adk2.co',
+'ad50m.adk2.co',
+'ad51.hpg.com.br',
+'ad51.paycount.com',
+'ad51m.adk2.co',
+'ad52.hpg.com.br',
+'ad52.paycount.com',
+'ad52m.adk2.co',
+'ad53.hpg.com.br',
+'ad53.paycount.com',
+'ad53m.adk2.co',
+'ad54.hpg.com.br',
+'ad54.paycount.com',
+'ad54m.adk2.co',
+'ad55.hpg.com.br',
+'ad55.paycount.com',
+'ad55m.adk2.co',
+'ad56.hpg.com.br',
+'ad56.paycount.com',
+'ad56m.adk2.co',
+'ad57.hpg.com.br',
+'ad57.paycount.com',
+'ad57m.adk2.co',
+'ad58.hpg.com.br',
+'ad58.paycount.com',
+'ad58m.adk2.co',
+'ad59.hpg.com.br',
+'ad59.paycount.com',
+'ad59m.adk2.co',
+'ad5m.adk2.co',
+'ad6.adfarm1.adition.com',
+'ad6.adspaces.ero-advertising.com',
+'ad6.bannerbank.ru',
+'ad6.banners.ero-advertising.com',
+'ad6.bb.ru',
+'ad6.hpg.com.br',
+'ad6.paycount.com',
+'ad6.speedbit.com',
+'ad60.hpg.com.br',
+'ad60.paycount.com',
+'ad60m.adk2.co',
+'ad61.hpg.com.br',
+'ad61.paycount.com',
+'ad61m.adk2.co',
+'ad62.hpg.com.br',
+'ad62.paycount.com',
+'ad62m.adk2.co',
+'ad63.hpg.com.br',
+'ad63.paycount.com',
+'ad63m.adk2.co',
+'ad64.hpg.com.br',
+'ad64.paycount.com',
+'ad64m.adk2.co',
+'ad65.hpg.com.br',
+'ad65.paycount.com',
+'ad65m.adk2.co',
+'ad66.hpg.com.br',
+'ad66.paycount.com',
+'ad66m.adk2.co',
+'ad67.hpg.com.br',
+'ad67.paycount.com',
+'ad67m.adk2.co',
+'ad68.hpg.com.br',
+'ad68.paycount.com',
+'ad68m.adk2.co',
+'ad69.hpg.com.br',
+'ad69.paycount.com',
+'ad69m.adk2.co',
+'ad6m.adk2.co',
+'ad6media.co.uk',
+'ad6media.fr',
+'ad7.ad.doubleclick.net.32840.9240.302br.net',
+'ad7.adspaces.ero-advertising.com',
+'ad7.api.ero-advertising.com',
+'ad7.bannerbank.ru',
+'ad7.banners.ero-advertising.com',
+'ad7.bb.ru',
+'ad7.hpg.com.br',
+'ad7.paycount.com',
+'ad7.speedbit.com',
+'ad7.thumbs.ero-advertising.com',
+'ad70.hpg.com.br',
+'ad70.paycount.com',
+'ad70m.adk2.co',
+'ad71.hpg.com.br',
+'ad71.paycount.com',
+'ad71m.adk2.co',
+'ad72.hpg.com.br',
+'ad72.paycount.com',
+'ad72m.adk2.co',
+'ad73.hpg.com.br',
+'ad73.paycount.com',
+'ad73m.adk2.co',
+'ad74.hpg.com.br',
+'ad74.paycount.com',
+'ad74m.adk2.co',
+'ad75.hpg.com.br',
+'ad75.paycount.com',
+'ad75m.adk2.co',
+'ad76.hpg.com.br',
+'ad76.paycount.com',
+'ad76m.adk2.co',
+'ad77.hpg.com.br',
+'ad77.paycount.com',
+'ad77m.adk2.co',
+'ad78.hpg.com.br',
+'ad78.paycount.com',
+'ad78m.adk2.co',
+'ad79.hpg.com.br',
+'ad79.paycount.com',
+'ad79m.adk2.co',
+'ad7m.adk2.co',
+'ad8.adfarm1.adition.com',
+'ad8.adspaces.ero-advertising.com',
+'ad8.allbanners.ru',
+'ad8.api.ero-advertising.com',
+'ad8.bannerbank.ru',
+'ad8.banners.ero-advertising.com',
+'ad8.bb.ru',
+'ad8.hpg.com.br',
+'ad8.paycount.com',
+'ad8.speedbit.com',
+'ad80.hpg.com.br',
+'ad80.paycount.com',
+'ad80m.adk2.co',
+'ad81.hpg.com.br',
+'ad81.paycount.com',
+'ad81m.adk2.co',
+'ad82.hpg.com.br',
+'ad82.paycount.com',
+'ad82m.adk2.co',
+'ad83.hpg.com.br',
+'ad83.paycount.com',
+'ad83m.adk2.co',
+'ad84.hpg.com.br',
+'ad84.paycount.com',
+'ad84m.adk2.co',
+'ad85.hpg.com.br',
+'ad85.paycount.com',
+'ad85m.adk2.co',
+'ad86.hpg.com.br',
+'ad86.paycount.com',
+'ad86m.adk2.co',
+'ad87.hpg.com.br',
+'ad87.paycount.com',
+'ad87m.adk2.co',
+'ad88.hpg.com.br',
+'ad88.paycount.com',
+'ad88m.adk2.co',
+'ad89.hpg.com.br',
+'ad89.paycount.com',
+'ad89m.adk2.co',
+'ad8m.adk2.co',
+'ad9.adfarm1.adition.com',
+'ad9.bannerbank.ru',
+'ad9.bb.ru',
+'ad9.hpg.com.br',
+'ad9.paycount.com',
+'ad9.speedbit.com',
+'ad90.hpg.com.br',
+'ad90.paycount.com',
+'ad90m.adk2.co',
+'ad91.hpg.com.br',
+'ad91.paycount.com',
+'ad91m.adk2.co',
+'ad92.hpg.com.br',
+'ad92.paycount.com',
+'ad92m.adk2.co',
+'ad93.hpg.com.br',
+'ad93.paycount.com',
+'ad93m.adk2.co',
+'ad94.hpg.com.br',
+'ad94.paycount.com',
+'ad94m.adk2.co',
+'ad95.hpg.com.br',
+'ad95.paycount.com',
+'ad95m.adk2.co',
+'ad96.hpg.com.br',
+'ad96.paycount.com',
+'ad96m.adk2.co',
+'ad97.hpg.com.br',
+'ad97.paycount.com',
+'ad97m.adk2.co',
+'ad98.hpg.com.br',
+'ad98.paycount.com',
+'ad98m.adk2.co',
+'ad99.hpg.com.br',
+'ad99.paycount.com',
+'ad99m.adk2.co',
+'ad9m.adk2.co',
+'adac02.webtrekk.net',
+'adacado.com',
+'adaction.se',
+'adactioninteractive.go2cloud.org',
+'adadapter.netzathleten-media.de',
+'adadvisor.net',
+'adamoads.com',
+'adan1.xtendmedia.com',
+'adaos-ads.net',
+'adap.tv',
+'adapi.inlcorp.com',
+'adaroo.go2cloud.org',
+'adart.go2cloud.org',
+'adattract.go2cloud.org',
+'adb.nikkei.co.jp',
+'adbank.go2cloud.org',
+'adbanner.cz',
+'adbanner.mylinea.com',
+'adbanner.ro',
+'adbanners.bizland.com',
+'adbard.net',
+'adbazaar.go2cloud.org',
+'adbenefit.go2cloud.org',
+'adbest.com',
+'adbest.net',
+'adbird.go2affise.com',
+'adbit.co',
+'adbl.spieletipps.de',
+'adblade.com',
+'adbonus.com',
+'adboost.com',
+'adboost.serverpower.net',
+'adbooth.go2cloud.org',
+'adbot.com',
+'adbox.beweb.com',
+'adbrands.co.il',
+'adbrite.com',
+'adbucks.brandreachsys.com',
+'adbucks.com',
+'adbuddiz.com',
+'adbull.com',
+'adbureau.com',
+'adbureau.ru',
+'adbutler.com',
+'adbuyer.com',
+'adbuyer2.lycos.com',
+'adbuyer3.lycos.com',
+'adc.go2cloud.org',
+'adc.people-group.su',
+'adc.tripple.at',
+'adcache.aftenposten.no',
+'adcade.com',
+'adcamp.ru',
+'adcash.com',
+'adcastplus.net',
+'adcdnx.com',
+'adcel.vrvm.com',
+'adcell.de',
+'adcenter.mdf.se',
+'adcenter.net',
+'adcentric.go2cloud.org',
+'adchap.com',
+'adcheck.about.co.kr',
+'adchoices.com.vn',
+'adcito.com',
+'adclear.adclear.net',
+'adclear.net',
+'adclick.com',
+'adclick.de',
+'adclick.g.doubleclick.net',
+'adclick.lv',
+'adclick.nl',
+'adclick.pk',
+'adclick.ru',
+'adclickafrica.com',
+'adclickint.go2cloud.org',
+'adclickmedia.com',
+'adclickxpress.com',
+'adclient-uol.lp.uol.com.br',
+'adclient.163.com',
+'adclient.detelefoongids.nl',
+'adclient.uimserv.net',
+'adclient1.tucows.com',
+'adclix.com',
+'adclix.org',
+'adcloud.net',
+'adclub.net',
+'adcolo.com',
+'adcolony.com',
+'adcomplete.com',
+'adconfig.infolife.mobi',
+'adcontent.gamespy.com',
+'adcontent.saymedia.com',
+'adcount.hollywood.com',
+'adcounter.theglobeandmail.com',
+'adcrimson.go2cloud.org',
+'adcron.com',
+'adcycle.com',
+'adcycle.everyone.net',
+'add3.go2affise.com',
+'addapptr.com',
+'addash.co',
+'addbtest.timesink.com',
+'addeppo.com',
+'addfreestats.com',
+'addltest.timesink.com',
+'addoer.com',
+'addressingbxmqasxix.download',
+'addrev.go2cloud.org',
+'addroid.com',
+'adds.weatherology.com',
+'addspro.go2cloud.org',
+'addstats.com',
+'addthis.com',
+'addtosite.netster.com',
+'addupp.com',
+'addvaluemedia.go2affise.com',
+'addvaluemedia.go2cloud.org',
+'addynamics.eu',
+'addynamix.com',
+'addynamo.net',
+'ade.clmbtech.com',
+'adecn.adnxs.com',
+'adecn.com',
+'adedy.com',
+'adelement.com',
+'adelogs.wip4.adobe.com',
+'ademails.com',
+'adengage.com',
+'adengine.theglobe.net',
+'adespresso.com',
+'adex.adchakra.net',
+'adex.admailtiser.com',
+'adexc.net',
+'adexce.net',
+'adexchangeperformance.com',
+'adexcite.com',
+'adexit.com',
+'adexit.de',
+'adexm.com',
+'adexperts.com',
+'adext.inkclub.com',
+'adexten.com',
+'adextent.com',
+'adf.ero-advertising.com',
+'adf.send.microad.jp',
+'adfacten.go2cloud.org',
+'adfactory88.com',
+'adfarm.mediaplex.com',
+'adfarm.mediaplex.com.22114.9130.302br.net',
+'adfarm.mediaplex.com.22123.9130.302br.net',
+'adfarm.mediaplex.com.22124.9130.302br.net',
+'adfarm.mediaplex.com.22130.9130.302br.net',
+'adfarm.mediaplex.com.22135.9130.302br.net',
+'adfarm.mediaplex.com.22141.9130.302br.net',
+'adfarm.mediaplex.com.22144.9130.302br.net',
+'adfarm.mediaplex.com.22153.9130.302br.net',
+'adfarm.mediaplex.com.22154.9130.302br.net',
+'adfarm.mediaplex.com.22159.9130.302br.net',
+'adfarm.mediaplex.com.22165.9130.302br.net',
+'adfarm.mediaplex.com.22168.9130.302br.net',
+'adfarm.mediaplex.com.22169.9130.302br.net',
+'adfarm.mediaplex.com.22174.9130.302br.net',
+'adfarm.mediaplex.com.22183.9130.302br.net',
+'adfarm.mediaplex.com.22189.9130.302br.net',
+'adfarm.mediaplex.com.22198.9130.302br.net',
+'adfarm.mediaplex.com.22201.9130.302br.net',
+'adfarm.mediaplex.com.22213.9130.302br.net',
+'adfarm.mediaplex.com.22222.9130.302br.net',
+'adfarm.mediaplex.com.22223.9130.302br.net',
+'adfarm.mediaplex.com.22225.9130.302br.net',
+'adfarm.mediaplex.com.22228.9130.302br.net',
+'adfarm.mediaplex.com.22229.9130.302br.net',
+'adfarm.mediaplex.com.22231.9130.302br.net',
+'adfarm.mediaplex.com.22234.9130.302br.net',
+'adfarm.mediaplex.com.22237.9130.302br.net',
+'adfarm.mediaplex.com.22240.9130.302br.net',
+'adfarm.mediaplex.com.22243.9130.302br.net',
+'adfarm.mediaplex.com.22246.9130.302br.net',
+'adfarm.mediaplex.com.22247.9130.302br.net',
+'adfarm.mediaplex.com.22249.9130.302br.net',
+'adfarm.mediaplex.com.22252.9130.302br.net',
+'adfarm.mediaplex.com.22253.9130.302br.net',
+'adfarm.mediaplex.com.22255.9130.302br.net',
+'adfarm.mediaplex.com.22258.9130.302br.net',
+'adfarm.mediaplex.com.22261.9130.302br.net',
+'adfarm.mediaplex.com.22262.9130.302br.net',
+'adfarm.mediaplex.com.22267.9130.302br.net',
+'adfarm.mediaplex.com.22270.9130.302br.net',
+'adfarm.mediaplex.com.22271.9130.302br.net',
+'adfarm.mediaplex.com.22276.9130.302br.net',
+'adfarm.mediaplex.com.22277.9130.302br.net',
+'adfarm.mediaplex.com.22282.9130.302br.net',
+'adfarm.mediaplex.com.22283.9130.302br.net',
+'adfarm.mediaplex.com.22288.9130.302br.net',
+'adfarm.mediaplex.com.22291.9130.302br.net',
+'adfarm.mediaplex.com.22294.9130.302br.net',
+'adfarm.mediaplex.com.22297.9130.302br.net',
+'adfarm.mediaplex.com.22298.9130.302br.net',
+'adfarm.mediaplex.com.22303.9130.302br.net',
+'adfarm.mediaplex.com.22304.9130.302br.net',
+'adfarm.mediaplex.com.22306.9130.302br.net',
+'adfarm.mediaplex.com.22309.9130.302br.net',
+'adfarm.mediaplex.com.22312.9130.302br.net',
+'adfarm.mediaplex.com.22315.9130.302br.net',
+'adfarm.mediaplex.com.22316.9130.302br.net',
+'adfarm.mediaplex.com.22318.9130.302br.net',
+'adfarm.mediaplex.com.22321.9130.302br.net',
+'adfarm.mediaplex.com.22324.9130.302br.net',
+'adfarm.mediaplex.com.22325.9130.302br.net',
+'adfarm.mediaplex.com.22327.9130.302br.net',
+'adfarm.mediaplex.com.22328.9130.302br.net',
+'adfarm.mediaplex.com.22330.9130.302br.net',
+'adfarm.mediaplex.com.22333.9130.302br.net',
+'adfarm.mediaplex.com.22334.9130.302br.net',
+'adfarm.mediaplex.com.22336.9130.302br.net',
+'adfarm.mediaplex.com.22337.9130.302br.net',
+'adfarm.mediaplex.com.22339.9130.302br.net',
+'adfarm.mediaplex.com.22342.9130.302br.net',
+'adfarm.mediaplex.com.22343.9130.302br.net',
+'adfarm.mediaplex.com.22345.9130.302br.net',
+'adfarm.mediaplex.com.22348.9130.302br.net',
+'adfarm.mediaplex.com.22349.9130.302br.net',
+'adfarm.mediaplex.com.22351.9130.302br.net',
+'adfarm.mediaplex.com.22354.9130.302br.net',
+'adfarm.mediaplex.com.22355.9130.302br.net',
+'adfarm.mediaplex.com.22360.9130.302br.net',
+'adfarm.mediaplex.com.22361.9130.302br.net',
+'adfarm.mediaplex.com.22363.9130.302br.net',
+'adfarm.mediaplex.com.22366.9130.302br.net',
+'adfarm.mediaplex.com.22367.9130.302br.net',
+'adfarm.mediaplex.com.22369.9130.302br.net',
+'adfarm.mediaplex.com.22370.9130.302br.net',
+'adfarm.mediaplex.com.22375.9130.302br.net',
+'adfarm.mediaplex.com.22376.9130.302br.net',
+'adfarm.mediaplex.com.22378.9130.302br.net',
+'adfarm.mediaplex.com.22381.9130.302br.net',
+'adfarm.mediaplex.com.22382.9130.302br.net',
+'adfarm.mediaplex.com.22384.9130.302br.net',
+'adfarm.mediaplex.com.22385.9130.302br.net',
+'adfarm.mediaplex.com.22396.9130.302br.net',
+'adfarm.mediaplex.com.22483.9130.302br.net',
+'adfarm.mediaplex.com.22484.9130.302br.net',
+'adfarm.mediaplex.com.22486.9130.302br.net',
+'adfarm.mediaplex.com.22487.9130.302br.net',
+'adfarm.mediaplex.com.22489.9130.302br.net',
+'adfarm.mediaplex.com.22490.9130.302br.net',
+'adfarm.mediaplex.com.22492.9130.302br.net',
+'adfarm.mediaplex.com.24914.9130.302br.net',
+'adfarm.mediaplex.com.76487.9626.302br.net',
+'adfarm.mediaplex.com.76488.9626.302br.net',
+'adfarm1.adition.com',
+'adfavori.go2cloud.org',
+'adfest.com',
+'adfishmedia.go2cloud.org',
+'adflight.com',
+'adfluence.net',
+'adfoc.us',
+'adfootprints.com',
+'adforce.adtech.fr',
+'adforce.com',
+'adforce.ru',
+'adforgames.com',
+'adfornepal.com',
+'adfox.ru',
+'adfpaces.ero-advertising.com',
+'adframesrc.com',
+'adfrontiers.com',
+'adfu.slashdot.org',
+'adfuel.com',
+'adfusion.com',
+'adfux.com',
+'adg.bzgint.com',
+'adgaem.go2cloud.org',
+'adgale.com',
+'adgardener.com',
+'adgatemedia.com',
+'adgatemedia.go2cloud.org',
+'adgear.com',
+'adgebra.co.in',
+'adgebra.in',
+'adgenie.co.uk',
+'adgent007.com',
+'adgine.net',
+'adgitize.com',
+'adglobal.go2cloud.org',
+'adgorithms.com',
+'adgoto.com',
+'adgridwork.com',
+'adgroups.com',
+'adgroups.net',
+'adgrx.moatads.com',
+'adhall.com',
+'adhese.be',
+'adhese.com',
+'adhese.net',
+'adhitprofits.com',
+'adhitzads.com',
+'adhood.com',
+'adhost.com',
+'adhostingsolutions.com',
+'adhub.co.nz',
+'adhubz.com',
+'adialy.go2cloud.org',
+'adicate.com',
+'adify.com',
+'adigniter.org',
+'adimage.asia1.com.sg',
+'adimages.been.com',
+'adimages.go.com',
+'adimages.homestore.com',
+'adimages.sanomawsoy.fi',
+'adimages.sina.com.hk',
+'adimages.tmpw.net',
+'adimages.whowhere.com',
+'adimg.activeadv.net',
+'adimg.cnet.com',
+'adimg.egroups.com',
+'adimg.simmani.com',
+'adimg.uimserv.net',
+'adimg.virgilio.it',
+'adimg.zdnet.com',
+'adimg1.chosun.com',
+'adimg1.chosun.net',
+'adimg3.search.naver.net',
+'adimgs.sapo.pt',
+'adimise.com',
+'adimpact.com',
+'adimpression.net',
+'adinch.com',
+'adindigo.com',
+'adinfinity.com.au',
+'adinfuse.com',
+'adinsight.co.kr',
+'adinterax.com',
+'adintop.go2cloud.org',
+'adipics.com',
+'adiqglobal.com',
+'adisfy.com',
+'adisn.com',
+'adistas.go2cloud.org',
+'adition.com',
+'adition.net',
+'aditmedia.go2affise.com',
+'aditor.go2cloud.org',
+'adjal.com',
+'adjal.go2cloud.org',
+'adjaws.go2cloud.org',
+'adjector.com',
+'adjewel.go2cloud.org',
+'adjug.com',
+'adjuggler.com',
+'adjuggler.yourdictionary.com',
+'adjump.go2cloud.org',
+'adjungle.com',
+'adk.go2cloud.org',
+'adk2.com',
+'adk2cdn.cpmrocket.com',
+'adkaramba.go2cloud.org',
+'adkernel.com',
+'adklik.com.tr',
+'adklip.com',
+'adklo.com',
+'adknowledge.com',
+'adkompan.go2cloud.org',
+'adland.co.il',
+'adland.ru',
+'adlatvia.com',
+'adlead.com',
+'adleague.go2cloud.org',
+'adlegend.com',
+'adlermode.com',
+'adlet.voice2page.com',
+'adlev.neodatagroup.com',
+'adlibr.com',
+'adlink.net',
+'adlink.shopsafe.co.nz',
+'adloaded.com',
+'adlock.in',
+'adlog.cbsi.com',
+'adlog.com.com',
+'adlog.flurry.com',
+'adlogix.net',
+'adlooxtracking.com',
+'adluminious.go2affise.com',
+'adm.fwmrm.net',
+'adm.leju.sina.com.cn',
+'adm.shinobi.jp',
+'admagnet.go2cloud.org',
+'admagnet.net',
+'admailtiser.com',
+'adman.gr',
+'admanage.com',
+'admanagement.ch',
+'admanager.btopenworld.com',
+'admanager.persianblog.com',
+'admantic.ru',
+'adman_test.go2cloud.org',
+'admarket.entireweb.com',
+'admarketplace.com',
+'admarketplace.net',
+'admarvel.com',
+'admarvel.s3.amazonaws.com',
+'admaster.com.cn',
+'admaster.de',
+'admaster.heyos.com',
+'admaster.union.ucweb.com',
+'admaven.adk2x.com',
+'admax.go2cloud.org',
+'admax.nexage.com',
+'admaya.in',
+'admaym.com',
+'admazing.adfarm1.adition.com',
+'admedia.com',
+'admedo.com',
+'admeld-match.dotomi.com',
+'admeld.adnxs.com',
+'admeld.com',
+'admeta.com',
+'admex.com',
+'admez.com',
+'admicro1.vcmedia.vn',
+'admin.ads.basal.ca',
+'admin.appnext.com',
+'admin.chartboost.com',
+'admin.clicksor.com',
+'admin.download-sponsor.de',
+'admin.fhserve.com',
+'admin.performancerevenues.com',
+'admin.rts.doublepimp.com',
+'admin.rts.phn.doublepimp.com',
+'admin.vserv.mobi',
+'admin1.testandtarget.omniture.com',
+'admin10.testandtarget.omniture.com',
+'admin11.testandtarget.omniture.com',
+'admin12.testandtarget.omniture.com',
+'admin13.testandtarget.omniture.com',
+'admin14.testandtarget.omniture.com',
+'admin15.testandtarget.omniture.com',
+'admin16.testandtarget.omniture.com',
+'admin17.testandtarget.omniture.com',
+'admin18.testandtarget.omniture.com',
+'admin19.testandtarget.omniture.com',
+'admin2.testandtarget.omniture.com',
+'admin20.testandtarget.omniture.com',
+'admin3.testandtarget.omniture.com',
+'admin4.testandtarget.omniture.com',
+'admin5.testandtarget.omniture.com',
+'admin6.testandtarget.omniture.com',
+'admin7.testandtarget.omniture.com',
+'admin8.testandtarget.omniture.com',
+'admin9.testandtarget.omniture.com',
+'adminder.com',
+'adminml.go2cloud.org',
+'admission.net',
+'admitad.com',
+'admix.go2cloud.org',
+'admixer.co.kr',
+'admixer.net',
+'admized.com',
+'admn.go2cloud.org',
+'admngronline.com',
+'admob.com',
+'admobiclick.go2cloud.org',
+'admobile.com',
+'admobit.go2cloud.org',
+'admobsphere.go2cloud.org',
+'admonitor.com',
+'admonkey.dapper.net',
+'admontest1.2cnt.net',
+'admontestbalt.2cnt.net',
+'admotion.com.ar',
+'admoustache.go2affise.com',
+'admp.sanoma.fi',
+'admperformance.go2cloud.org',
+'admtpmp127.adsk2.co',
+'admulti.com',
+'admyapp.net',
+'adn.fusionads.net',
+'adn.meinsol.de',
+'adn.polluxnetwork.com',
+'adnanny.go2cloud.org',
+'adnection.com',
+'adnet-media.net',
+'adnet.asahi.com',
+'adnet.biz',
+'adnet.com',
+'adnet.com.tr',
+'adnet.mediawhiz.com',
+'adnet.ru',
+'adnet.vn',
+'adnet7.go2cloud.org',
+'adnetinternational.com',
+'adnetmarket.go2cloud.org',
+'adnetwork.free-h.fr',
+'adnetwork.kataweb.it',
+'adnetwork.nextgen.net',
+'adnetworkme.com',
+'adnetworkperformance.com',
+'adnext.fr',
+'adnimation.com',
+'adnoble.com',
+'adnotbad.com',
+'adnotch.com',
+'adnxs1.com',
+'ado.internet.cz',
+'ado.pro-market.net',
+'adobemcspb.b.sc.omtrdc.net',
+'adocean.pl',
+'adolent.go2cloud.org',
+'adonads.com',
+'adonion.com',
+'adonis.go2cloud.org',
+'adonweb.ru',
+'adopt.specificclick.net',
+'adoptim.com',
+'adorigin.com',
+'adorika.net',
+'adosia.com',
+'adotic.com',
+'adotmobanalytics.go2cloud.org',
+'adotsolution.com',
+'adotube.com',
+'adp.cplaza.ne.jp',
+'adp.go2cloud.org',
+'adpanel.net',
+'adparlor.com',
+'adpay.com',
+'adperf.go2cloud.org',
+'adperfdemo.solution.weborama.fr',
+'adperfect.com',
+'adperium.com',
+'adpetizer.go2cloud.org',
+'adpile.go2affise.com',
+'adpionier.de',
+'adplace.adsame.com',
+'adplace.i.adsame.com',
+'adplans.info',
+'adplans.net',
+'adplexo.com',
+'adplus.co.id',
+'adpop.theglobe.net',
+'adprimemedia.com',
+'adprofessmedia.go2cloud.org',
+'adprofs.com',
+'adprojekt.pl',
+'adprovider.adlure.net',
+'adprudence.com',
+'adpulse.ads.targetnet.com',
+'adq.nextag.com',
+'adqa.timesink.com',
+'adqadb.timesink.com',
+'adqadl.timesink.com',
+'adquota.com',
+'adr-g3-1.vindicosuite.com',
+'adrd.taxuan.net',
+'adreactor.com',
+'adready.com',
+'adreadytractions.com',
+'adrent.net',
+'adrepo.singlehop.com',
+'adreporting.com',
+'adres.internet.com',
+'adresellers.com',
+'adrevmedia.com',
+'adrevolver.com',
+'adrewards.com',
+'adright.go2affise.com',
+'adrise.de',
+'adriver.ru',
+'adroar.com',
+'adrocket.com',
+'adrolays.de',
+'adroll.com',
+'adrotator.com',
+'adrotator.se',
+'adrspain.go2cloud.org',
+'adrtrklnk.com',
+'adrunner.superstats.com',
+'adrunnr.com',
+'ads-03.tor.focusin.ads.targetnet.com',
+'ads-au.onelouder.com',
+'ads-b.focalink.com',
+'ads-by.madadsmedia.com',
+'ads-c.focalink.com',
+'ads-f.focalink.com',
+'ads-i.focalink.com',
+'ads-instrument.focalink.com',
+'ads-links.com',
+'ads-static.saymedia.com',
+'ads-trk.vidible.tv',
+'ads-us.pictela.net',
+'ads-ussj1.focalink.com',
+'ads-ussnv2.focalink.com',
+'ads.1000mercis.com',
+'ads.100asians.com',
+'ads.100megswebhosting.com',
+'ads.118.lv',
+'ads.123m.valueclick.net',
+'ads.160tracker.com',
+'ads.1a-infosysteme.de',
+'ads.3d.com',
+'ads.51.net',
+'ads.5ci.lt',
+'ads.8833.com',
+'ads.accelerator-media.com',
+'ads.acesse.com',
+'ads.aceweb.net',
+'ads.ad-center.com',
+'ads.ad4game.com',
+'ads.adamoads.com',
+'ads.adaptv.advertising.com',
+'ads.addynamix.com',
+'ads.adengage.com',
+'ads.adflight.com',
+'ads.adfox.ru',
+'ads.adfuzz.com',
+'ads.adgorithms.com',
+'ads.adgoto.com',
+'ads.adhood.com',
+'ads.aditor.com',
+'ads.adjalauto.com',
+'ads.adjust-net.jp',
+'ads.admarvel.com',
+'ads.admized.com',
+'ads.adnet-plus.com',
+'ads.adnet.de',
+'ads.adonion.com',
+'ads.adpv.com',
+'ads.adrdgt.com',
+'ads.ads360.com',
+'ads.adsconsumer.com',
+'ads.adsfirefly.com',
+'ads.adshareware.net',
+'ads.adsmart.net',
+'ads.adsonar.com',
+'ads.adsready.com',
+'ads.adsrevenue.com',
+'ads.adtarget.me',
+'ads.adtegrity.net',
+'ads.adthrive.com',
+'ads.adtiger.de',
+'ads.adultfriendfinder.com',
+'ads.adultplex.com',
+'ads.advance.de',
+'ads.advance.net',
+'ads.advance.uk.com',
+'ads.adverline.com',
+'ads.advertise.net',
+'ads.adviva.net',
+'ads.adworldnetwork.com',
+'ads.adxpansion.com',
+'ads.adzip.co',
+'ads.affbuzzads.com',
+'ads.affelix.com',
+'ads.affiliates.match.com',
+'ads.afixi.com',
+'ads.aftama.mobi',
+'ads.ahds.ac.uk',
+'ads.aim4media.com',
+'ads.airpush.com',
+'ads.allotraffic.com',
+'ads.allrecipes.com',
+'ads.allsites.com',
+'ads.alt.com',
+'ads.amarillo.com',
+'ads.amateurmatch.com',
+'ads.amdmb.com',
+'ads.amusive.com',
+'ads.apn.co.nz',
+'ads.app-authority.com',
+'ads.appia.com',
+'ads.applelinks.com',
+'ads.appnext.com',
+'ads.appsgeyser.com',
+'ads.arcuspubblicita.it',
+'ads.arrl.org',
+'ads.as4x.tmcs.net',
+'ads.as4x.tmcs.ticketmaster.com',
+'ads.asexstories.com',
+'ads.asia1.com.sg',
+'ads.asiafriendfinder.com',
+'ads.ask.com',
+'ads.aspalliance.com',
+'ads.aspectgroup.co.uk',
+'ads.astroadvice.com',
+'ads.auctionads.com',
+'ads.auctioncity.co.nz',
+'ads.auctions.yahoo.com',
+'ads.audience2media.com',
+'ads.audiencebank.com',
+'ads.automobile.tn',
+'ads.autotrader.com',
+'ads.avazu.net',
+'ads.ayads.co',
+'ads.b10f.jp',
+'ads.baazee.com',
+'ads.babal.net',
+'ads.bakersfield.com',
+'ads.bangkokpost.co.th',
+'ads.banner-link.com.br',
+'ads.basal.ca',
+'ads.bcsyndication.com',
+'ads.befan.it',
+'ads.beliefnet.com',
+'ads.belointeractive.com',
+'ads.berrynet.com',
+'ads.best-ads.com',
+'ads.betanews.com',
+'ads.betweendigital.com',
+'ads.bianca.com',
+'ads.bianca.net',
+'ads.bidclix.com',
+'ads.bidvertiser.com',
+'ads.bigasia.com',
+'ads.bigfoot.com',
+'ads.bitservices.no',
+'ads.blamads.com',
+'ads.blogdrive.com',
+'ads.bloomberg.com',
+'ads.blueadvertise.com',
+'ads.bluefishnetwork.com',
+'ads.bluelithium.com',
+'ads.bluemongoose.com',
+'ads.bluemountain.com',
+'ads.bonnint.net',
+'ads.bostonmedia.com',
+'ads.brazzers.com',
+'ads.buddypic.com',
+'ads.bugnet.com',
+'ads.businessweek.com',
+'ads.buysell.com',
+'ads.byggahus.se',
+'ads.camrecord.com',
+'ads.canoe.ca',
+'ads.cantonrep.com',
+'ads.carltononline.com',
+'ads.cars.com',
+'ads.cashsurfers.com',
+'ads.catholic.org',
+'ads.cbc.ca',
+'ads.cc-dt.com',
+'ads.cdn.rovio.com',
+'ads.ce.cn',
+'ads.celtra.com',
+'ads.centraliprom.com',
+'ads.centralmedia.ws',
+'ads.cgchannel.com',
+'ads.cgnetworks.com',
+'ads.ch.adcenter.net',
+'ads.champs-elysees.com',
+'ads.channel4.com',
+'ads.chickclick.com',
+'ads.cinamuse.com',
+'ads.cineble.com',
+'ads.citenkomedia.com',
+'ads.clearchannel.com',
+'ads.click-now.co',
+'ads.click2paid.com',
+'ads.clickability.com',
+'ads.clickad.com',
+'ads.clickad.com.pl',
+'ads.clickagents.com',
+'ads.clickheal.com',
+'ads.clicksor.cn',
+'ads.clicksor.com',
+'ads.clicmanager.fr',
+'ads.clovenetwork.com',
+'ads.clubphoto.com',
+'ads.clubplanet.com',
+'ads.cnbc.com',
+'ads.cnet.com',
+'ads.cobrad.com',
+'ads.columbian.com',
+'ads.comeadvertisewithus.com',
+'ads.commission365.com',
+'ads.communitech.net',
+'ads.computer.org',
+'ads.consolemul.com',
+'ads.contactmusic.com',
+'ads.contentabc.com',
+'ads.contextweb.com',
+'ads.coolmobilegroup.com',
+'ads.corky.net',
+'ads.cosmosmagazine.com',
+'ads.cpxcenter.com',
+'ads.crakmedia.com',
+'ads.creafi-online-media.com',
+'ads.creative-serving.com',
+'ads.creativelayers.de',
+'ads.ctasnet.com',
+'ads.cwcity.de',
+'ads.cyberprog.net',
+'ads.cybersales.cz',
+'ads.dada.it',
+'ads.dai.org',
+'ads.dailyjolt.com',
+'ads.datais.com',
+'ads.date.com',
+'ads.dealhelper.com',
+'ads.delfi.ee',
+'ads.deliads.com',
+'ads.democratandchronicle.com',
+'ads.dennisnet.co.uk',
+'ads.denverbroncos.com',
+'ads.depositfiles.com',
+'ads.depositfiles.org',
+'ads.desktopdollars.com',
+'ads.desmoinesregister.com',
+'ads.detelefoongids.nl',
+'ads.deviantart.com',
+'ads.devx.com',
+'ads.dfiles.eu',
+'ads.dfiles.ru',
+'ads.dgonn.com',
+'ads.dhakatribune.com',
+'ads.digital-digest.com',
+'ads.digitalmedianet.com',
+'ads.digitalpoint.com',
+'ads.dinclinx.com',
+'ads.dir.bg',
+'ads.directionsmag.com',
+'ads.displayincloud.com',
+'ads.dns-look-up.com',
+'ads.doctors.co.il',
+'ads.doublemax.net',
+'ads.doublepimp.com',
+'ads.downloadaccelerator.com',
+'ads.downloadmix.de',
+'ads.dragonfru.it',
+'ads.drf.com',
+'ads.dropspam.com',
+'ads.drugs.com',
+'ads.dvdreview.com',
+'ads.e-planning.net',
+'ads.e-webtrack.net',
+'ads.e9china.com',
+'ads.easy-ads.com',
+'ads.ebay.com',
+'ads.ebihoreanul.ro',
+'ads.ecircles.com',
+'ads.economist.com',
+'ads.egrana.com.br',
+'ads.elementodigital.org',
+'ads.eltiempo.com',
+'ads.emg-network.com',
+'ads.emol.com',
+'ads.emule-island.ru',
+'ads.eniro.com',
+'ads.enliven.net',
+'ads.epatra.com',
+'ads.epom.com',
+'ads.ero-advertising.com',
+'ads.eromarkt.de',
+'ads.erotism.net',
+'ads.erotism.nl',
+'ads.ethicalads.net',
+'ads.etoiledirect.com',
+'ads.eu.msn.com',
+'ads.eurogrand.com',
+'ads.everyplay.com',
+'ads.ewebse.com',
+'ads.exactdrive.com',
+'ads.examiner.net',
+'ads.exchange-it.com',
+'ads.exdynsrv.com',
+'ads.exoclick.com',
+'ads.expatinbulgaria.com',
+'ads.expedia.com',
+'ads.expotv.com',
+'ads.ezcybersearch.com',
+'ads.facebook.com',
+'ads.fairfax.com.au',
+'ads.fashionsupreme.co.uk',
+'ads.fcnet.de',
+'ads.fetnet.net',
+'ads.filefront.com',
+'ads.filez.com',
+'ads.filez.nl',
+'ads.filmlush.com',
+'ads.filmup.com',
+'ads.finance.yahoo.com',
+'ads.flashtrack.net',
+'ads.flightsim.com',
+'ads.flipkart.com',
+'ads.flixaddict.com',
+'ads.flooble.com',
+'ads.flurry.com',
+'ads.focalink.com',
+'ads.foodieblogroll.com',
+'ads.fool.com',
+'ads.fool.org',
+'ads.footar.com',
+'ads.forbes.com',
+'ads.forbes.net',
+'ads.fortunecity.co.uk',
+'ads.fortunecity.com',
+'ads.fortunecity.de',
+'ads.fortunecity.org',
+'ads.fotoable.com',
+'ads.fredericksburg.com',
+'ads.free-banners.com',
+'ads.freearcade.com',
+'ads.freecity.de',
+'ads.freeze.com',
+'ads.freshmeat.net',
+'ads.friendfinder.com',
+'ads.friendtest.com',
+'ads.ft.com',
+'ads.fulltraffic.net',
+'ads.funfarsi.ir',
+'ads.gad-network.com',
+'ads.game.net',
+'ads.gamecity.net',
+'ads.gamecopyworld.no',
+'ads.gamershell.com',
+'ads.gamesbannernet.com',
+'ads.gamespyid.com',
+'ads.gamigo.de',
+'ads.gawker.com',
+'ads.gay.com',
+'ads.gemscool.com',
+'ads.genericlink.com',
+'ads.geoads.net',
+'ads.gfy.com',
+'ads.glispa.com',
+'ads.globaltraffico.com',
+'ads.globo.com',
+'ads.gltrkk.com',
+'ads.gmtracker.com',
+'ads.golem.de',
+'ads.google.com',
+'ads.gorillavid.com',
+'ads.goyk.com',
+'ads.greatoutdoors.com',
+'ads.gree.net',
+'ads.grindinggears.com',
+'ads.grokads.com',
+'ads.grupozeta.es',
+'ads.guardian.co.uk',
+'ads.guardianunlimited.co.uk',
+'ads.gumgum.com',
+'ads.guru3d.com',
+'ads.haberler.com',
+'ads.hamtonroads.com',
+'ads.harpercollins.co.uk',
+'ads.harpers.org',
+'ads.hbv.de',
+'ads.hdn.valueclick.net',
+'ads.heartlight.org',
+'ads.hecklers.org',
+'ads.heias.com',
+'ads.hexasoft.com.my',
+'ads.heyu.net',
+'ads.heyzap.com',
+'ads.hitbox.com',
+'ads.hitcents.com',
+'ads.hmn-net.com',
+'ads.hnet.valueclick.net',
+'ads.hollandsentinel.com',
+'ads.hollywood.com',
+'ads.home.net',
+'ads.hornymatches.com',
+'ads.hostingbuy.net',
+'ads.howabout.net',
+'ads.howtoroot.mobi',
+'ads.hpg.com.br',
+'ads.hpg.ig.com.br',
+'ads.hsoub.com',
+'ads.huma.valueclick.net',
+'ads.iac-online.de',
+'ads.iafrica.com',
+'ads.iawsnetwork.com',
+'ads.ibtracking.com',
+'ads.iconpeak.com',
+'ads.icq.com',
+'ads.idg.com.pl',
+'ads.ign.com',
+'ads.iknownetwork.com',
+'ads.iknowthatgirl.com',
+'ads.imagine-inc.com',
+'ads.imailo.nl',
+'ads.imdb.nl',
+'ads.imdb.org',
+'ads.img.co.za',
+'ads.immobilienscout24.de',
+'ads.inbox.lv',
+'ads.incmd03.com',
+'ads.incmd09.com',
+'ads.indians.com',
+'ads.indiatimes.com',
+'ads.indystar.com',
+'ads.inet.co.th',
+'ads.inet1.com',
+'ads.inetinteractive.com',
+'ads.infi.net',
+'ads.ino.com',
+'ads.interfacelift.com',
+'ads.intergi.com',
+'ads.internet-optimizer.com',
+'ads.internic.co.il',
+'ads.ioam.de',
+'ads.iol.co.il',
+'ads.ipowerweb.com',
+'ads.isat-tech.com',
+'ads.isoftmarketing.com',
+'ads.itmcash.com',
+'ads.itshd.com',
+'ads.itv.com',
+'ads.iwon.com',
+'ads.ixo.com',
+'ads.jerk2it.com',
+'ads.jimworld.com',
+'ads.jinkads.com',
+'ads.jobclicks.net',
+'ads.jossip.com',
+'ads.jp.msn.com',
+'ads.jpost.com',
+'ads.juicyads.com',
+'ads.kentonline.co.uk',
+'ads.keywordblocks.com',
+'ads.kinobox.cz',
+'ads.kinxxx.com',
+'ads.kizu.org',
+'ads.klixxx.com',
+'ads.ksl.com',
+'ads.lacoctelera.com',
+'ads.lanistaads.com',
+'ads.lawnsite.com',
+'ads.leovegas.com',
+'ads.lfstmedia.com',
+'ads.link4ads.com',
+'ads.linkbucks.com',
+'ads.linkedin.com',
+'ads.linksponsor.com',
+'ads.linktracking.net',
+'ads.linuxjournal.com',
+'ads.linuxsecurity.com',
+'ads.liteweb.net',
+'ads.live365.com',
+'ads.livescore.com',
+'ads.livesportmedia.eu',
+'ads.lokale-internetwerbung.de',
+'ads.luno.net',
+'ads.lycos.de',
+'ads.lycos.fr',
+'ads.lzjl.com',
+'ads.macdailynews.com',
+'ads.mainetoday.com',
+'ads.mammanett.no',
+'ads.mangomediaads.com',
+'ads.mariuana.it',
+'ads.matchbin.com',
+'ads.mcafee.com',
+'ads.mdchoice.com',
+'ads.mediacapital.pt',
+'ads.mediaodyssey.com',
+'ads.mediaon.it',
+'ads.mediasoul.net',
+'ads.mediawhite.com',
+'ads.medscape.com',
+'ads.megaproxy.com',
+'ads.members.teamskeet.com',
+'ads.metromanager.com',
+'ads.mgmt.somee.com',
+'ads.mgnetwork.com',
+'ads.midwayusa.com',
+'ads.mixtraffic.com',
+'ads.mjoelkbar.net',
+'ads.mmania.com',
+'ads.mnium.org',
+'ads.mobclix.com',
+'ads.mobilefuse.net',
+'ads.mobilepad.co',
+'ads.mobilityware.com',
+'ads.mobiteasy.com',
+'ads.mobvertising.net',
+'ads.mocean.mobi',
+'ads.mofos.com',
+'ads.mojiva.com',
+'ads.mojiva.com.edgesuite.net',
+'ads.moneyclicks.com',
+'ads.monstermoving.com',
+'ads.mopub.com',
+'ads.motorhomesforsale.co.uk',
+'ads.mouseplanet.com',
+'ads.moviease.com',
+'ads.movielush.com',
+'ads.mp.mydas.mobi',
+'ads.mp3.com',
+'ads.mplx.valueclick.net',
+'ads.msn-ppe.com',
+'ads.msn.co.il',
+'ads.msn.com',
+'ads.multimania.lycos.fr',
+'ads.musiccity.com',
+'ads.musicfans.com',
+'ads.musicmatch.com',
+'ads.mustangworks.com',
+'ads.mybale.com',
+'ads.myopen.vipshop.com',
+'ads.mypcwash.com',
+'ads.mysimon.com',
+'ads.mysupermarket.co.uk',
+'ads.mysupermarket.com',
+'ads.mytelus.com',
+'ads.myx.net',
+'ads.narrowline.com',
+'ads.netcraft.com',
+'ads.netmechanic.com',
+'ads.netomia.com',
+'ads.netsol.com',
+'ads.nettsnakk.no',
+'ads.networkplay.in',
+'ads.networksolutions.com',
+'ads.networkwcs.net',
+'ads.newads.com',
+'ads.newdb.mtp.pl',
+'ads.newdream.net',
+'ads.newmedia.cz',
+'ads.newsgeek.co.il',
+'ads.newsint.co.uk',
+'ads.newsland.it',
+'ads.newsobserver.com',
+'ads.nexage.com',
+'ads.nicovideo.jp',
+'ads.ninemsn.com.au',
+'ads.nj.com',
+'ads.nobuffer.info',
+'ads.nola.com',
+'ads.nordichardware.se',
+'ads.norindex.no',
+'ads.northjersey.com',
+'ads.nwsource.com',
+'ads.nyi.net',
+'ads.nytimes.com',
+'ads.nzcity.co.nz',
+'ads.ocolly.com',
+'ads.odigo.com',
+'ads.off.net.mk',
+'ads.offeroptimizer.com',
+'ads.ojooo.com',
+'ads.okitspace.com',
+'ads.ole.com',
+'ads.omaha.com',
+'ads.one.co.il',
+'ads.onecenter.com',
+'ads.oneplace.com',
+'ads.onlineguiden.com',
+'ads.oomz.de',
+'ads.opensubtitles.org',
+'ads.openx.net',
+'ads.opera.com',
+'ads.optusnet.com.au',
+'ads.orange142.com',
+'ads.p-club.net',
+'ads.parrysound.com',
+'ads.passion.com',
+'ads.paxnet.co.kr',
+'ads.peel.com',
+'ads.pennet.com',
+'ads.pennlive.com',
+'ads.pennnet.com',
+'ads.pervsonpatrol.com',
+'ads.photosight.ru',
+'ads.phpclasses.org',
+'ads.pictela.net',
+'ads.piramit.net',
+'ads.pirateden.com',
+'ads.pittsburghlive.com',
+'ads.placester.net',
+'ads.planet.nl',
+'ads.playnet.nl',
+'ads.playukinternet.com',
+'ads.pni.com',
+'ads.poconorecord.com',
+'ads.pointroll.com',
+'ads.pointroll.com.13594.9051.302br.net',
+'ads.pointroll.com.16586.9051.302br.net',
+'ads.pointroll.com.17211.9051.302br.net',
+'ads.pointroll.com.25916.9193.302br.net',
+'ads.pointroll.com.25917.9193.302br.net',
+'ads.pointroll.com.25919.9193.302br.net',
+'ads.pointroll.com.25920.9193.302br.net',
+'ads.pointroll.com.25921.9193.302br.net',
+'ads.pointroll.com.25922.9193.302br.net',
+'ads.pointroll.com.25923.9193.302br.net',
+'ads.pointroll.com.25924.9193.302br.net',
+'ads.pointroll.com.25925.9193.302br.net',
+'ads.pointroll.com.25926.9193.302br.net',
+'ads.pointroll.com.25927.9193.302br.net',
+'ads.pointroll.com.25928.9193.302br.net',
+'ads.pointroll.com.25929.9193.302br.net',
+'ads.pointroll.com.29141.9229.302br.net',
+'ads.pointroll.com.29142.9229.302br.net',
+'ads.pointroll.com.29143.9229.302br.net',
+'ads.pointroll.com.29144.9229.302br.net',
+'ads.pointroll.com.29145.9229.302br.net',
+'ads.pointroll.com.29146.9229.302br.net',
+'ads.pointroll.com.29148.9229.302br.net',
+'ads.pointroll.com.29149.9229.302br.net',
+'ads.pointroll.com.29150.9229.302br.net',
+'ads.pointroll.com.29151.9229.302br.net',
+'ads.pointroll.com.29152.9229.302br.net',
+'ads.pointroll.com.29154.9229.302br.net',
+'ads.pointroll.com.29155.9229.302br.net',
+'ads.pointroll.com.29156.9229.302br.net',
+'ads.pointroll.com.29157.9229.302br.net',
+'ads.pointroll.com.29158.9229.302br.net',
+'ads.pointroll.com.29159.9229.302br.net',
+'ads.pointroll.com.29160.9229.302br.net',
+'ads.pointroll.com.29161.9229.302br.net',
+'ads.pointroll.com.29163.9229.302br.net',
+'ads.pointroll.com.29164.9229.302br.net',
+'ads.pointroll.com.29166.9229.302br.net',
+'ads.pointroll.com.29168.9229.302br.net',
+'ads.pointroll.com.29169.9229.302br.net',
+'ads.pointroll.com.29170.9229.302br.net',
+'ads.pointroll.com.29590.9190.302br.net',
+'ads.pointroll.com.29591.9190.302br.net',
+'ads.pointroll.com.29592.9190.302br.net',
+'ads.pointroll.com.29594.9190.302br.net',
+'ads.pointroll.com.29595.9190.302br.net',
+'ads.pointroll.com.29596.9190.302br.net',
+'ads.pointroll.com.29597.9190.302br.net',
+'ads.pointroll.com.34277.88.302br.net',
+'ads.pointroll.com.34278.88.302br.net',
+'ads.pointroll.com.34279.88.302br.net',
+'ads.pointroll.com.35113.9245.302br.net',
+'ads.pointroll.com.35114.9245.302br.net',
+'ads.pointroll.com.35116.9245.302br.net',
+'ads.pointroll.com.35594.9271.302br.net',
+'ads.pointroll.com.35595.9271.302br.net',
+'ads.pointroll.com.35596.9271.302br.net',
+'ads.pointroll.com.35597.9271.302br.net',
+'ads.pointroll.com.35598.9271.302br.net',
+'ads.pointroll.com.35600.9271.302br.net',
+'ads.pointroll.com.35601.9271.302br.net',
+'ads.pointroll.com.35602.9271.302br.net',
+'ads.pointroll.com.35603.9271.302br.net',
+'ads.pointroll.com.35604.9271.302br.net',
+'ads.pointroll.com.35605.9271.302br.net',
+'ads.pointroll.com.35606.9271.302br.net',
+'ads.pointroll.com.35607.9271.302br.net',
+'ads.pointroll.com.35609.9271.302br.net',
+'ads.pointroll.com.35610.9271.302br.net',
+'ads.pointroll.com.35611.9271.302br.net',
+'ads.pointroll.com.35612.9271.302br.net',
+'ads.pointroll.com.35613.9271.302br.net',
+'ads.pointroll.com.35614.9271.302br.net',
+'ads.pointroll.com.35615.9271.302br.net',
+'ads.pointroll.com.35616.9271.302br.net',
+'ads.pointroll.com.35617.9271.302br.net',
+'ads.pointroll.com.35618.9271.302br.net',
+'ads.pointroll.com.35619.9271.302br.net',
+'ads.pointroll.com.35620.9271.302br.net',
+'ads.pointroll.com.35621.9271.302br.net',
+'ads.pointroll.com.35983.9229.302br.net',
+'ads.pointroll.com.35985.9229.302br.net',
+'ads.pointroll.com.35986.9229.302br.net',
+'ads.pointroll.com.36350.9229.302br.net',
+'ads.pointroll.com.40375.9310.302br.net',
+'ads.pointroll.com.40376.9310.302br.net',
+'ads.pointroll.com.40377.9310.302br.net',
+'ads.pointroll.com.40378.9310.302br.net',
+'ads.pointroll.com.40379.9310.302br.net',
+'ads.pointroll.com.40380.9310.302br.net',
+'ads.pointroll.com.40381.9310.302br.net',
+'ads.pointroll.com.40382.9310.302br.net',
+'ads.pointroll.com.40383.9310.302br.net',
+'ads.pointroll.com.40384.9310.302br.net',
+'ads.pointroll.com.40385.9310.302br.net',
+'ads.pointroll.com.40386.9310.302br.net',
+'ads.pointroll.com.40387.9310.302br.net',
+'ads.pointroll.com.40388.9310.302br.net',
+'ads.pointroll.com.40389.9310.302br.net',
+'ads.pointroll.com.40390.9250.302br.net',
+'ads.pointroll.com.40391.9250.302br.net',
+'ads.pointroll.com.40392.9250.302br.net',
+'ads.pointroll.com.40393.9250.302br.net',
+'ads.pointroll.com.40394.9250.302br.net',
+'ads.pointroll.com.43095.9295.302br.net',
+'ads.pointroll.com.43096.9295.302br.net',
+'ads.pointroll.com.43097.9295.302br.net',
+'ads.pointroll.com.43101.9295.302br.net',
+'ads.pointroll.com.43102.9295.302br.net',
+'ads.pointroll.com.43103.9295.302br.net',
+'ads.pointroll.com.43104.9295.302br.net',
+'ads.pointroll.com.43105.9295.302br.net',
+'ads.pointroll.com.43106.9295.302br.net',
+'ads.pointroll.com.44810.9250.302br.net',
+'ads.pointroll.com.44811.9250.302br.net',
+'ads.pointroll.com.44812.9250.302br.net',
+'ads.pointroll.com.44813.9250.302br.net',
+'ads.pointroll.com.44814.9250.302br.net',
+'ads.pointroll.com.49080.9360.302br.net',
+'ads.pointroll.com.49225.9363.302br.net',
+'ads.pointroll.com.49226.9363.302br.net',
+'ads.pointroll.com.49227.9363.302br.net',
+'ads.pointroll.com.49228.9363.302br.net',
+'ads.pointroll.com.49229.9363.302br.net',
+'ads.pointroll.com.49230.9363.302br.net',
+'ads.pointroll.com.49231.9363.302br.net',
+'ads.pointroll.com.49232.9363.302br.net',
+'ads.pointroll.com.49233.9363.302br.net',
+'ads.pointroll.com.49234.9363.302br.net',
+'ads.pointroll.com.49235.9363.302br.net',
+'ads.pointroll.com.49236.9363.302br.net',
+'ads.pointroll.com.49237.9363.302br.net',
+'ads.pointroll.com.49238.9363.302br.net',
+'ads.pointroll.com.49239.9363.302br.net',
+'ads.pointroll.com.62910.9458.302br.net',
+'ads.pointroll.com.62911.9458.302br.net',
+'ads.pointroll.com.62912.9458.302br.net',
+'ads.pointroll.com.62913.9458.302br.net',
+'ads.pointroll.com.62914.9458.302br.net',
+'ads.pointroll.com.62915.9458.302br.net',
+'ads.pointroll.com.62916.9458.302br.net',
+'ads.pointroll.com.62917.9458.302br.net',
+'ads.pointroll.com.62918.9458.302br.net',
+'ads.pointroll.com.62919.9458.302br.net',
+'ads.pointroll.com.62920.9458.302br.net',
+'ads.pointroll.com.62921.9458.302br.net',
+'ads.pointroll.com.62922.9458.302br.net',
+'ads.pointroll.com.62923.9458.302br.net',
+'ads.pointroll.com.62924.9458.302br.net',
+'ads.pointroll.com.62925.9458.302br.net',
+'ads.pointroll.com.62926.9458.302br.net',
+'ads.pointroll.com.62927.9458.302br.net',
+'ads.pointroll.com.62928.9458.302br.net',
+'ads.pointroll.com.62929.9458.302br.net',
+'ads.pointroll.com.62930.9458.302br.net',
+'ads.pointroll.com.62931.9458.302br.net',
+'ads.pointroll.com.62932.9458.302br.net',
+'ads.pointroll.com.62933.9458.302br.net',
+'ads.pointroll.com.62934.9458.302br.net',
+'ads.pointroll.com.75325.9458.302br.net',
+'ads.pointroll.com.75326.9458.302br.net',
+'ads.pointroll.com.75327.9458.302br.net',
+'ads.pointroll.com.75328.9458.302br.net',
+'ads.pointroll.com.75329.9458.302br.net',
+'ads.pointroll.com.75330.9458.302br.net',
+'ads.pointroll.com.75331.9458.302br.net',
+'ads.pointroll.com.75332.9458.302br.net',
+'ads.pointroll.com.75333.9458.302br.net',
+'ads.pointroll.com.75334.9458.302br.net',
+'ads.pointroll.com.75345.9458.302br.net',
+'ads.pointroll.com.75346.9458.302br.net',
+'ads.pointroll.com.75347.9458.302br.net',
+'ads.pointroll.com.75348.9458.302br.net',
+'ads.pointroll.com.75349.9458.302br.net',
+'ads.pojonews.com',
+'ads.polluxnetwork.com',
+'ads.poppen.de',
+'ads.poptarts.me',
+'ads.pornad.com',
+'ads.pornerbros.com',
+'ads.powweb.com',
+'ads.predictad.com',
+'ads.premium.cz',
+'ads.premiumnetwork.net',
+'ads.pressdemo.com',
+'ads.prisacom.com',
+'ads.prnt.sc',
+'ads.prntscr.com',
+'ads.pro-market.net',
+'ads.proboards.com',
+'ads.prod.wifog.com',
+'ads.program3.com',
+'ads.provincianews.ro',
+'ads.proxy3.adservr.de',
+'ads.pub-fit.com',
+'ads.publited.com',
+'ads.pubmatic.com',
+'ads.pulsetv.com',
+'ads.purefuck.com',
+'ads.pureleads.com',
+'ads.pushtraffic.net',
+'ads.qadabra.com',
+'ads.qcns.valueclick.net',
+'ads.qipu.de',
+'ads.quantserve.com',
+'ads.quartermedia.de',
+'ads.quasaraffiliates.com',
+'ads.queendom.com',
+'ads.raidrush.org',
+'ads.rampidads.com',
+'ads.rcgroups.com',
+'ads.realitytraffic.com',
+'ads.realitytraffic.com.s2.gvirabi.com',
+'ads.realitytraffic.com.s3.gvirabi.com',
+'ads.realslutparty.com',
+'ads.recoletos.es',
+'ads.rediff.com',
+'ads.redtube.com',
+'ads.reelhd.com',
+'ads.reelvidz.com',
+'ads.reflexcash.com',
+'ads.revmob.com',
+'ads.revsci.net',
+'ads.reward.rakuten.jp',
+'ads.rim.co.uk',
+'ads.rkads.com',
+'ads.roanoke.com',
+'ads.roar.com',
+'ads.royalmail.com',
+'ads.rte.ie',
+'ads.rubiconproject.com',
+'ads.runningwolf.com',
+'ads.s-i-r.de',
+'ads.saba-e.com',
+'ads.sacbee.com',
+'ads.satyamonline.com',
+'ads.savannahnow.com',
+'ads.scabee.com',
+'ads.schnaeppchenjagd.de',
+'ads.scifi.com',
+'ads.searchignited.com',
+'ads.searchingbooth.com',
+'ads.searchmobileonline.com',
+'ads.seattletimes.com',
+'ads.seniorfriendfinder.com',
+'ads.servebom.com',
+'ads.sex.com',
+'ads.sexier.com',
+'ads.sexinyourcity.com',
+'ads.sexspaces.com',
+'ads.sexspaces.net',
+'ads.sexspaces.nl',
+'ads.sextip.de',
+'ads.sf.net',
+'ads.shorte.st',
+'ads.showmeflix.com',
+'ads.showsplash.com',
+'ads.sina.com',
+'ads.sitemeter.com',
+'ads.slnads.com',
+'ads.smaato.com',
+'ads.smartclick.com',
+'ads.smartclicks.com',
+'ads.smartfeedads.com',
+'ads.smartstream.tv',
+'ads.socialbakers.com',
+'ads.sockshots.com',
+'ads.softure.com',
+'ads.sol.no',
+'ads.sonobi.com',
+'ads.sourceforge.net',
+'ads.southbendtribune.com',
+'ads.space.com',
+'ads.spaceports.com',
+'ads.spaceports.net',
+'ads.sportingnews.com',
+'ads.sprintrade.com',
+'ads.sptimes.com',
+'ads.spymac.net',
+'ads.srax.com',
+'ads.sritis.net',
+'ads.starbanner.com',
+'ads.startext.net',
+'ads.statesmanjournal.com',
+'ads.stephensmedia.com',
+'ads.stepstone.be',
+'ads.stepstone.no',
+'ads.stickyadstv.com',
+'ads.stockbanners.com',
+'ads.str8up.com',
+'ads.studylight.org',
+'ads.sublimedirectory.com',
+'ads.sumotorrent.sx',
+'ads.sun.com',
+'ads.svnt.com',
+'ads.syracuse.com',
+'ads.tackyworld.com',
+'ads.taggify.net',
+'ads.tagword.com',
+'ads.taiphanmem.org',
+'ads.tapit.com',
+'ads.taptapnetworks.com',
+'ads.techtv.com',
+'ads.teixido.co',
+'ads.telegraph.co.uk',
+'ads.telkomsel.com',
+'ads.tennessean.com',
+'ads.terra.com.br',
+'ads.thecrimson.com',
+'ads.thedieselstop.com',
+'ads.thehiveworks.com',
+'ads.theindependent.com',
+'ads.themoneytizer.com',
+'ads.theolympian.com',
+'ads.theporndb.com',
+'ads.thestar.com',
+'ads.thewonder.com',
+'ads.thrillreel.com',
+'ads.thrillsaffiliates.com',
+'ads.thumbr.com',
+'ads.thzhost.com',
+'ads.tibaco.net',
+'ads.timesdaily.com',
+'ads.timesink.com',
+'ads.timesunion.com',
+'ads.tinet.ie',
+'ads.tmcs.net',
+'ads.today.com',
+'ads.topcities.com',
+'ads.toronto.com',
+'ads.torrentco.com',
+'ads.torrpedo.net',
+'ads.totallyfreestuff.com',
+'ads.townhall.com',
+'ads.track.net',
+'ads.traderonline.com',
+'ads.trafficaces.com',
+'ads.traffichunt.com',
+'ads.trafficjunky.net',
+'ads.traffpartners.com',
+'ads.tribalfusion.com',
+'ads.triongames.com',
+'ads.tripod.com',
+'ads.tripod.lycos.co.uk',
+'ads.tripod.lycos.de',
+'ads.tripod.lycos.es',
+'ads.tripod.lycos.it',
+'ads.tripod.lycos.nl',
+'ads.tripod.spray.se',
+'ads.tromaville.com',
+'ads.truongton.net',
+'ads.tubewolf.com',
+'ads.ucoz.ru',
+'ads.undertone.com',
+'ads.unister-gmbh.de',
+'ads.uproar.com',
+'ads.uptobox.com',
+'ads.urli.net',
+'ads.us.e-planning.net',
+'ads.usatoday.com',
+'ads.utopiad.com',
+'ads.v3.com',
+'ads.v3exchange.com',
+'ads.valuead.com',
+'ads.vcix.com',
+'ads.vegas.com',
+'ads.veloxia.com',
+'ads.ventivmedia.com',
+'ads.videoslots.com',
+'ads.vintageporntubenet.com',
+'ads.vipmobile.co.za',
+'ads.visionads.de',
+'ads.vitalix.net',
+'ads.vrocks.in',
+'ads.vserv.mobi',
+'ads.w3hoster.de',
+'ads.waiads.com',
+'ads.wamba.com',
+'ads.wave.si',
+'ads.wazooweb.com',
+'ads.weather.ca',
+'ads.web.aol.com',
+'ads.web.compuserve.com',
+'ads.web.cs.com',
+'ads.web.de',
+'ads.web.nl',
+'ads.web1tv.de',
+'ads.web21.de',
+'ads.web3-ads.com',
+'ads.webads360.com',
+'ads.webcash.net',
+'ads.webcash.nl',
+'ads.webhosting.info',
+'ads.webindia123.com',
+'ads.webkicks.de',
+'ads.webmastersdirect.com',
+'ads.webmd.com',
+'ads.webme.com',
+'ads.webseoanalytics.com',
+'ads.webshots.com',
+'ads.website-guru.com',
+'ads.whaleads.com',
+'ads.whi.co.nz',
+'ads.wicked.com',
+'ads.williamhill.es',
+'ads.williamhill.it',
+'ads.win.rs',
+'ads.winneronline.com',
+'ads.winsite.com',
+'ads.wlcnet.com',
+'ads.worldstarhiphop.com',
+'ads.x10.be',
+'ads.xbiz.com',
+'ads.xhamster.com',
+'ads.xl.co.id',
+'ads.xl.pt',
+'ads.xlxtra.com',
+'ads.xpg.com.br',
+'ads.xpics.com',
+'ads.xtac.com',
+'ads.xtargeting.com',
+'ads.xtra.co.nz',
+'ads.xxxad.net',
+'ads.xxxbunker.com',
+'ads.yahoo.com',
+'ads.yeshanews.com',
+'ads.yimg.com',
+'ads.yllix.com',
+'ads.ynot.com',
+'ads.yourfreedvds.com',
+'ads.yumenetworks.com',
+'ads.yupimsn.com',
+'ads.zamunda.se',
+'ads.zchat.no',
+'ads.zdnet.com',
+'ads.zdnet.de',
+'ads.zedo.com',
+'ads0.hpg.com.br',
+'ads00.hpg.com.br',
+'ads01.com',
+'ads01.focalink.com',
+'ads01.groovinads.com',
+'ads01.hpg.com.br',
+'ads02.focalink.com',
+'ads03.focalink.com',
+'ads03.hpg.com.br',
+'ads04.focalink.com',
+'ads04.hpg.com.br',
+'ads05.focalink.com',
+'ads05.hpg.com.br',
+'ads06.focalink.com',
+'ads06.hpg.com.br',
+'ads07.focalink.com',
+'ads07.hpg.com.br',
+'ads08.focalink.com',
+'ads08.hpg.com.br',
+'ads09.focalink.com',
+'ads09.hpg.com.br',
+'ads1.advance.de',
+'ads1.ami-admin.com',
+'ads1.canoe.ca',
+'ads1.condenet.com',
+'ads1.ero-advertising.com',
+'ads1.focalink.com',
+'ads1.gccx.com',
+'ads1.hpg.com.br',
+'ads1.intelliads.com',
+'ads1.mb.datingadzone.com',
+'ads1.mediacapital.pt',
+'ads1.mocean.mobi',
+'ads1.mojiva.com',
+'ads1.msads.net',
+'ads1.msn.com',
+'ads1.searchmiracle.com',
+'ads1.solocpm.com',
+'ads1.speedbit.com',
+'ads1.spiderware.com',
+'ads1.themobileindian.net',
+'ads1.tripod.com',
+'ads1.utopiad.com',
+'ads10.focalink.com',
+'ads10.hpg.com.br',
+'ads10.speedbit.com',
+'ads100.hpg.com.br',
+'ads101.hpg.com.br',
+'ads102.hpg.com.br',
+'ads103.hpg.com.br',
+'ads104.hpg.com.br',
+'ads105.hpg.com.br',
+'ads106.hpg.com.br',
+'ads107.hpg.com.br',
+'ads108.hpg.com.br',
+'ads109.hpg.com.br',
+'ads11.focalink.com',
+'ads11.hpg.com.br',
+'ads110.hpg.com.br',
+'ads111.hpg.com.br',
+'ads112.hpg.com.br',
+'ads113.hpg.com.br',
+'ads114.hpg.com.br',
+'ads115.hpg.com.br',
+'ads116.hpg.com.br',
+'ads117.hpg.com.br',
+'ads118.hpg.com.br',
+'ads119.hpg.com.br',
+'ads12.focalink.com',
+'ads12.hpg.com.br',
+'ads120.hpg.com.br',
+'ads121.hpg.com.br',
+'ads122.hpg.com.br',
+'ads123.hpg.com.br',
+'ads124.hpg.com.br',
+'ads125.hpg.com.br',
+'ads126.hpg.com.br',
+'ads127.hpg.com.br',
+'ads128.hpg.com.br',
+'ads129.hpg.com.br',
+'ads13.focalink.com',
+'ads13.hpg.com.br',
+'ads130.hpg.com.br',
+'ads131.hpg.com.br',
+'ads132.hpg.com.br',
+'ads133.hpg.com.br',
+'ads134.hpg.com.br',
+'ads135.hpg.com.br',
+'ads136.hpg.com.br',
+'ads137.hpg.com.br',
+'ads138.hpg.com.br',
+'ads139.hpg.com.br',
+'ads14.focalink.com',
+'ads14.hpg.com.br',
+'ads140.hpg.com.br',
+'ads141.hpg.com.br',
+'ads142.hpg.com.br',
+'ads143.hpg.com.br',
+'ads144.hpg.com.br',
+'ads145.hpg.com.br',
+'ads146.hpg.com.br',
+'ads147.hpg.com.br',
+'ads148.hpg.com.br',
+'ads149.hpg.com.br',
+'ads15.focalink.com',
+'ads15.hpg.com.br',
+'ads150.hpg.com.br',
+'ads151.hpg.com.br',
+'ads152.hpg.com.br',
+'ads153.hpg.com.br',
+'ads154.hpg.com.br',
+'ads155.hpg.com.br',
+'ads156.hpg.com.br',
+'ads157.hpg.com.br',
+'ads158.hpg.com.br',
+'ads159.hpg.com.br',
+'ads16.focalink.com',
+'ads16.hpg.com.br',
+'ads160.hpg.com.br',
+'ads161.hpg.com.br',
+'ads162.hpg.com.br',
+'ads163.hpg.com.br',
+'ads164.hpg.com.br',
+'ads165.hpg.com.br',
+'ads166.hpg.com.br',
+'ads167.hpg.com.br',
+'ads168.hpg.com.br',
+'ads16811.hotwords.es',
+'ads169.hpg.com.br',
+'ads17.focalink.com',
+'ads17.hpg.com.br',
+'ads170.hpg.com.br',
+'ads171.hpg.com.br',
+'ads172.hpg.com.br',
+'ads173.hpg.com.br',
+'ads174.hpg.com.br',
+'ads175.hpg.com.br',
+'ads176.hpg.com.br',
+'ads177.hpg.com.br',
+'ads178.hpg.com.br',
+'ads179.hpg.com.br',
+'ads18.focalink.com',
+'ads18.hpg.com.br',
+'ads180.hpg.com.br',
+'ads181.hpg.com.br',
+'ads182.hpg.com.br',
+'ads183.hpg.com.br',
+'ads184.hpg.com.br',
+'ads185.hpg.com.br',
+'ads186.hpg.com.br',
+'ads187.hpg.com.br',
+'ads188.hpg.com.br',
+'ads189.hpg.com.br',
+'ads19.focalink.com',
+'ads19.hpg.com.br',
+'ads190.hpg.com.br',
+'ads191.hpg.com.br',
+'ads192.hpg.com.br',
+'ads193.hpg.com.br',
+'ads194.hpg.com.br',
+'ads195.hpg.com.br',
+'ads196.hpg.com.br',
+'ads197.hpg.com.br',
+'ads198.hpg.com.br',
+'ads199.hpg.com.br',
+'ads2.advance.de',
+'ads2.adverline.com',
+'ads2.backads.com',
+'ads2.brazzers.com',
+'ads2.clearchannel.com',
+'ads2.condenet.com',
+'ads2.contentabc.com',
+'ads2.delfi.ee',
+'ads2.ero-advertising.com',
+'ads2.exhedra.com',
+'ads2.fingersoft.net',
+'ads2.focalink.com',
+'ads2.gamecity.net',
+'ads2.greystripe.com',
+'ads2.hpg.com.br',
+'ads2.iwon.com',
+'ads2.jubii.dk',
+'ads2.medianord.de',
+'ads2.mocean.mobi',
+'ads2.mojiva.com',
+'ads2.oneplace.com',
+'ads2.opensubtitles.org',
+'ads2.rp.pl',
+'ads2.searchmiracle.com',
+'ads2.speedbit.com',
+'ads2.utopiad.com',
+'ads2.vortexmediagroup.com',
+'ads2.williamhill.com',
+'ads2.zeusclicks.com',
+'ads20.focalink.com',
+'ads20.hpg.com.br',
+'ads200.focalink.com',
+'ads200.hpg.com.br',
+'ads2000.hw.net',
+'ads201.hpg.com.br',
+'ads202.hpg.com.br',
+'ads203.hpg.com.br',
+'ads204.hpg.com.br',
+'ads205.hpg.com.br',
+'ads206.hpg.com.br',
+'ads207.focalink.com',
+'ads207.hpg.com.br',
+'ads208.hpg.com.br',
+'ads209.hpg.com.br',
+'ads21.focalink.com',
+'ads21.hpg.com.br',
+'ads210.hpg.com.br',
+'ads211.hpg.com.br',
+'ads212.hpg.com.br',
+'ads213.hpg.com.br',
+'ads214.hpg.com.br',
+'ads215.hpg.com.br',
+'ads216.hpg.com.br',
+'ads217.hpg.com.br',
+'ads218.hpg.com.br',
+'ads219.hpg.com.br',
+'ads22.focalink.com',
+'ads22.hpg.com.br',
+'ads220.hpg.com.br',
+'ads221.hpg.com.br',
+'ads222.hpg.com.br',
+'ads223.hpg.com.br',
+'ads224.hpg.com.br',
+'ads225.hpg.com.br',
+'ads226.hpg.com.br',
+'ads227.hpg.com.br',
+'ads228.hpg.com.br',
+'ads229.hpg.com.br',
+'ads23.focalink.com',
+'ads23.hpg.com.br',
+'ads230.hpg.com.br',
+'ads231.hpg.com.br',
+'ads232.hpg.com.br',
+'ads233.hpg.com.br',
+'ads234.hpg.com.br',
+'ads235.hpg.com.br',
+'ads236.hpg.com.br',
+'ads237.hpg.com.br',
+'ads238.hpg.com.br',
+'ads239.hpg.com.br',
+'ads24.focalink.com',
+'ads24.hpg.com.br',
+'ads240.hpg.com.br',
+'ads241.hpg.com.br',
+'ads242.hpg.com.br',
+'ads243.hpg.com.br',
+'ads244.hpg.com.br',
+'ads245.hpg.com.br',
+'ads246.hpg.com.br',
+'ads247.hpg.com.br',
+'ads248.hpg.com.br',
+'ads249.hpg.com.br',
+'ads25.focalink.com',
+'ads25.hpg.com.br',
+'ads250.hpg.com.br',
+'ads251.hpg.com.br',
+'ads252.hpg.com.br',
+'ads253.hpg.com.br',
+'ads254.hpg.com.br',
+'ads255.hpg.com.br',
+'ads26.focalink.com',
+'ads26.hpg.com.br',
+'ads27.focalink.com',
+'ads27.hpg.com.br',
+'ads28.focalink.com',
+'ads28.hpg.com.br',
+'ads29.focalink.com',
+'ads29.hpg.com.br',
+'ads2srv.com',
+'ads3.advance.de',
+'ads3.bigasia.com',
+'ads3.condenet.com',
+'ads3.focalink.com',
+'ads3.gamecity.net',
+'ads3.hpg.com.br',
+'ads3.mocean.mobi',
+'ads3.mojiva.com',
+'ads3.qadabra.com',
+'ads3.searchmiracle.com',
+'ads3.speedbit.com',
+'ads3.utopiad.com',
+'ads30.focalink.com',
+'ads30.hpg.com.br',
+'ads303.focalink.com',
+'ads304.focalink.com',
+'ads305.focalink.com',
+'ads31.hpg.com.br',
+'ads311.focalink.com',
+'ads316.focalink.com',
+'ads317.focalink.com',
+'ads32.hpg.com.br',
+'ads320.focalink.com',
+'ads33.hpg.com.br',
+'ads34.hpg.com.br',
+'ads35.hpg.com.br',
+'ads36.hpg.com.br',
+'ads37.hpg.com.br',
+'ads38.hpg.com.br',
+'ads39.hpg.com.br',
+'ads4.advance.de',
+'ads4.bigasia.com',
+'ads4.clearchannel.com',
+'ads4.condenet.com',
+'ads4.focalink.com',
+'ads4.gamecity.net',
+'ads4.hpg.com.br',
+'ads4.mocean.mobi',
+'ads4.mojiva.com',
+'ads4.speedbit.com',
+'ads4.utopiad.com',
+'ads40.hpg.com.br',
+'ads41.hpg.com.br',
+'ads42.hpg.com.br',
+'ads43.hpg.com.br',
+'ads44.hpg.com.br',
+'ads45.hpg.com.br',
+'ads46.hpg.com.br',
+'ads47.hpg.com.br',
+'ads48.hpg.com.br',
+'ads49.hpg.com.br',
+'ads4homes.com',
+'ads4links.com',
+'ads5.bigasia.com',
+'ads5.canoe.ca',
+'ads5.focalink.com',
+'ads5.gamecity.net',
+'ads5.hpg.com.br',
+'ads5.mocean.mobi',
+'ads5.mojiva.com',
+'ads5.speedbit.com',
+'ads5.utopiad.com',
+'ads50.hpg.com.br',
+'ads51.hpg.com.br',
+'ads52.hpg.com.br',
+'ads53.hpg.com.br',
+'ads54.hpg.com.br',
+'ads55.hpg.com.br',
+'ads56.hpg.com.br',
+'ads57.hpg.com.br',
+'ads58.hpg.com.br',
+'ads59.hpg.com.br',
+'ads6.focalink.com',
+'ads6.gamecity.net',
+'ads6.hpg.com.br',
+'ads6.mocean.mobi',
+'ads6.speedbit.com',
+'ads6.utopiad.com',
+'ads60.hpg.com.br',
+'ads61.hpg.com.br',
+'ads61153.hotwords.com',
+'ads62.hpg.com.br',
+'ads63.hpg.com.br',
+'ads64.hpg.com.br',
+'ads65.hpg.com.br',
+'ads66.hpg.com.br',
+'ads67.hpg.com.br',
+'ads68.hpg.com.br',
+'ads69.hpg.com.br',
+'ads7.focalink.com',
+'ads7.gamecity.net',
+'ads7.hpg.com.br',
+'ads7.inet1.com',
+'ads7.mocean.mobi',
+'ads7.speedbit.com',
+'ads70.hpg.com.br',
+'ads71.hpg.com.br',
+'ads72.hpg.com.br',
+'ads73.hpg.com.br',
+'ads74.hpg.com.br',
+'ads75.hpg.com.br',
+'ads76.hpg.com.br',
+'ads77.hpg.com.br',
+'ads78.hpg.com.br',
+'ads79.hpg.com.br',
+'ads8.com',
+'ads8.focalink.com',
+'ads8.hpg.com.br',
+'ads8.mocean.mobi',
+'ads8.speedbit.com',
+'ads8.utopiad.com',
+'ads8.utopiad.comcb3.utopiad.com',
+'ads80.com',
+'ads80.hpg.com.br',
+'ads81.hpg.com.br',
+'ads82.hpg.com.br',
+'ads83.hpg.com.br',
+'ads84.hpg.com.br',
+'ads85.hpg.com.br',
+'ads86.hpg.com.br',
+'ads87.hpg.com.br',
+'ads88.hpg.com.br',
+'ads89.hpg.com.br',
+'ads9.focalink.com',
+'ads9.hpg.com.br',
+'ads9.mocean.mobi',
+'ads9.speedbit.com',
+'ads90.hpg.com.br',
+'ads91.hpg.com.br',
+'ads92.hpg.com.br',
+'ads93.hpg.com.br',
+'ads94.hpg.com.br',
+'ads95.hpg.com.br',
+'ads96.hpg.com.br',
+'ads97.hpg.com.br',
+'ads98.hpg.com.br',
+'ads99.hpg.com.br',
+'adsafeprotected.com',
+'adsalvo.com',
+'adsances.ero-advertising.com',
+'adsatt.abcnews.starwave.com',
+'adsatt.disney.starwave.com',
+'adsatt.espn.go.com',
+'adsatt.espn.starwave.com',
+'adsatt.go.starwave.com',
+'adsaturation.com',
+'adsays.go2cloud.org',
+'adsbookie.com',
+'adsbrook.com',
+'adsby.bidtheatre.com',
+'adsby.breezeads.com',
+'adscale.de',
+'adscampaign.net',
+'adscendmedia.com',
+'adscontent.indiatimes.com',
+'adscoops.com',
+'adsdaq.com',
+'adsdb.timesink.com',
+'adsdelivery1.com',
+'adsdk.com',
+'adsdl.timesink.com',
+'adsdlmaster.timesink.com',
+'adsdot.ph',
+'adsearch.adkontekst.pl',
+'adsee.jp',
+'adseller.hop.ru',
+'adsender.us',
+'adsenger.com',
+'adsense-world.de',
+'adsensecamp.com',
+'adsenzia.solution.weborama.fr',
+'adserv.aavalue.com',
+'adserv.adbonus.com',
+'adserv.arrow.com',
+'adserv.brandaffinity.net',
+'adserv.bravenet.com',
+'adserv.de',
+'adserv.exxxit.com',
+'adserv.floppybank.com',
+'adserv.gamezone.de',
+'adserv.happypuppy.com',
+'adserv.iafrica.com',
+'adserv.legitreviews.com',
+'adserv.net',
+'adserv.sapo.pt',
+'adserv.search-exe.com',
+'adserv.searchenhancement.com',
+'adserv.usps.com',
+'adserv001.adtech.fr',
+'adserv002.adtech.fr',
+'adserv003.adtech.fr',
+'adserv004.adtech.fr',
+'adserv005.adtech.fr',
+'adserv006.adtech.fr',
+'adserv007.adtech.fr',
+'adserv008.adtech.fr',
+'adserv2.bravenet.com',
+'adserv3.bravenet.com',
+'adserve-nj.1rx.io',
+'adserve.adtoll.com',
+'adserve.advertising.com',
+'adserve.cpmba.se',
+'adserve.gogreece.com',
+'adserve.postrelease.com',
+'adserver-2.ig.com.br',
+'adserver-4.ig.com.br',
+'adserver-5.ig.com.br',
+'adserver-a-frr.adtech.de',
+'adserver.100free.com',
+'adserver.71i.de',
+'adserver.ad-space.net',
+'adserver.adbunker.com',
+'adserver.adreactor.com',
+'adserver.ads.com.ph',
+'adserver.ads360.com',
+'adserver.adtech.advertising.com',
+'adserver.adtech.de',
+'adserver.adtech.de.1754.9018.302br.net',
+'adserver.adtech.de.1756.9018.302br.net',
+'adserver.adtech.de.1758.9019.302br.net',
+'adserver.adtech.de.1760.9019.302br.net',
+'adserver.adtech.de.1762.9019.302br.net',
+'adserver.adtech.de.62936.9473.302br.net',
+'adserver.adtech.de.62937.9473.302br.net',
+'adserver.adtech.de.62938.9473.302br.net',
+'adserver.adtech.de.62939.9473.302br.net',
+'adserver.adtech.de.62943.9473.302br.net',
+'adserver.adtech.fr',
+'adserver.adtechus.com',
+'adserver.adtechus.com.13154.9047.302br.net',
+'adserver.adtechus.com.13158.9047.302br.net',
+'adserver.adtechus.com.14361.9066.302br.net',
+'adserver.adtechus.com.22718.9068.302br.net',
+'adserver.adtechus.com.22719.9068.302br.net',
+'adserver.adtechus.com.24351.9068.302br.net',
+'adserver.adtechus.com.68137.9528.302br.net',
+'adserver.adtechus.com.68138.9528.302br.net',
+'adserver.adtechus.com.68139.9528.302br.net',
+'adserver.adtechus.com.68140.9528.302br.net',
+'adserver.adtechus.com.68298.9541.302br.net',
+'adserver.adtechus.com.68299.9541.302br.net',
+'adserver.adtechus.com.68300.9541.302br.net',
+'adserver.adtechus.com.68301.9541.302br.net',
+'adserver.adtechus.com.76415.9541.302br.net',
+'adserver.adtechus.com.76416.9541.302br.net',
+'adserver.adtechus.com.77231.9541.302br.net',
+'adserver.adtechus.com.77232.9541.302br.net',
+'adserver.adtechus.com.77233.9541.302br.net',
+'adserver.adtechus.com.77234.9541.302br.net',
+'adserver.adultfriendfinder.com',
+'adserver.advertist.com',
+'adserver.affiliatemg.com',
+'adserver.airmiles.ca',
+'adserver.aol.fr',
+'adserver.aphrodite.tweakers.net',
+'adserver.asiafriendfinder.com',
+'adserver.bizland-inc.net',
+'adserver.brandilitynetwork.de',
+'adserver.buzzfirst.com',
+'adserver.cash4webmaster.de',
+'adserver.chickclick.com',
+'adserver.click4cash.de',
+'adserver.co.il',
+'adserver.comparatel.fr',
+'adserver.coreads.net',
+'adserver.creative-asia.com',
+'adserver.creativeinspire.com',
+'adserver.cxad.cxense.com',
+'adserver.cz.cc',
+'adserver.dayrates.com',
+'adserver.dbusiness.com',
+'adserver.digitalpartners.com',
+'adserver.dnps.com',
+'adserver.dotmusic.com',
+'adserver.download3000.com',
+'adserver.emulation64.com',
+'adserver.filefront.com',
+'adserver.freecity.de',
+'adserver.friendfinder.com',
+'adserver.gameparty.net',
+'adserver.gamigo.de',
+'adserver.garden.nl',
+'adserver.goforandroid.com',
+'adserver.gorillanation.com',
+'adserver.hardwareanalysis.com',
+'adserver.harktheherald.com',
+'adserver.hellasnet.gr',
+'adserver.idg.de',
+'adserver.ilmessaggero.it',
+'adserver.infotiger.com',
+'adserver.interfree.it',
+'adserver.inwind.it',
+'adserver.ip-phone-forum.de',
+'adserver.ision.de',
+'adserver.isonews.com',
+'adserver.janes.com',
+'adserver.janes.org',
+'adserver.juicyads.com',
+'adserver.kimia.es',
+'adserver.lanacion.com.ar',
+'adserver.libero.it',
+'adserver.lunarpages.com',
+'adserver.matchcraft.com',
+'adserver.mindshare.de',
+'adserver.mobillex.com',
+'adserver.mundo-service.de',
+'adserver.mylinea.com',
+'adserver.myownemail.com',
+'adserver.news.com',
+'adserver.news.com.au',
+'adserver.ngz-network.de',
+'adserver.nydailynews.com',
+'adserver.outpersonals.com',
+'adserver.penthouse.com',
+'adserver.phatmax.net',
+'adserver.pl',
+'adserver.planet-multiplayer.de',
+'adserver.portal.pl',
+'adserver.portalofevil.com',
+'adserver.portugalmail.net',
+'adserver.portugalmail.pt',
+'adserver.radio-canada.ca',
+'adserver.sandbox.cxad.cxense.com',
+'adserver.sanomawsoy.fi',
+'adserver.sextracker.com',
+'adserver.sharewareonline.com',
+'adserver.sitesense.com',
+'adserver.skyhookwireless.com',
+'adserver.snowball.com',
+'adserver.softonic.com',
+'adserver.te.pt',
+'adserver.terra.com.br',
+'adserver.terra.es',
+'adserver.theknot.com',
+'adserver.theonering.net',
+'adserver.thirty4.com',
+'adserver.trackstats.info',
+'adserver.trader.ca',
+'adserver.trafficsyndicate.com',
+'adserver.trellian.com',
+'adserver.tweakers.net',
+'adserver.ubiyoo.com',
+'adserver.unityads.unity3d.com',
+'adserver.veruta.com',
+'adserver.weakgame.com',
+'adserver.web.de',
+'adserver.webads.nl',
+'adserver.x3.hu',
+'adserver.xpanama.net',
+'adserver.yahoo.com',
+'adserver.yanosik.pl',
+'adserver.zencudo.co.uk',
+'adserver.zylom.com',
+'adserver1-images.backbeatmedia.com',
+'adserver1.backbeatmedia.com',
+'adserver1.harvestadsdepot.com',
+'adserver1.hookyouup.com',
+'adserver1.ogilvy-interactive.de',
+'adserver1.realtracker.com',
+'adserver1.shareconnector.com',
+'adserver1.sonymusiceurope.com',
+'adserver1.wmads.com',
+'adserver2.ads-cpm.com',
+'adserver2.realtracker.com',
+'adserver3.adremedy.com.48002.9358.302br.net',
+'adserverplus.com',
+'adserverpub.com',
+'adserversolutions.com',
+'adservi.com',
+'adservice.everyone.com',
+'adservice.everyone.net',
+'adserving.ads.ec',
+'adserving.autotrader.com',
+'adserving.claxon.com',
+'adserving.cpmgo.com',
+'adserving.cpminventory.com',
+'adserving.greenadvertizing.com',
+'adserving.hugecpm.com',
+'adserving.localpages.com',
+'adserving.mediatrafficreports.com',
+'adserving.supreme.clicksor.com',
+'adserving.uniquetrafficgroup.com',
+'adservinginternational.com',
+'adservingnetwork.com',
+'adservone.com',
+'adservr.net',
+'adsexpand.go2cloud.org',
+'adsfac.eu',
+'adsfac.net',
+'adsfac.us',
+'adsfac.us.14518.9074.302br.net',
+'adsfac.us.14519.9074.302br.net',
+'adsfac.us.14521.9074.302br.net',
+'adsfac.us.14523.9074.302br.net',
+'adsfac.us.21366.9125.302br.net',
+'adsfac.us.21367.25.302br.net',
+'adsfac.us.21367.9125.302br.net',
+'adsfac.us.21367.9125.302br1366.9125.302br.net',
+'adsfac.us.24349.9125.302br.net',
+'adsfac.us.302br.net',
+'adsfast.com',
+'adsforindians.com',
+'adsfundi.com',
+'adsfundi.net',
+'adsfuse.com',
+'adsgangsta.com',
+'adshiftmedia.com',
+'adshooter.com',
+'adshopping.com',
+'adshostnet.com',
+'adshot.de',
+'adshuffle.com',
+'adsignals.com',
+'adsinimages.com',
+'adsipl.indiatimes.com',
+'adsiplytmedia.indiatimes.com',
+'adskape.ru',
+'adskeeper.co.uk',
+'adsl-71-138-149-62.dsl.pltn13.pacbell.net',
+'adslidango.com',
+'adsmarket.com',
+'adsmarket.es',
+'adsmarketgroup.com',
+'adsmart.com',
+'adsmart.de',
+'adsmart.net',
+'adsmart.ru',
+'adsmatters.go2cloud.org',
+'adsmeans.com',
+'adsmile.go2cloud.org',
+'adsmo.ru',
+'adsmobil.go2cloud.org',
+'adsmoon.com',
+'adsnetworksa.go2cloud.org',
+'adsniper.ru',
+'adsoldier.com',
+'adsolutions.nl',
+'adsolutions.yp.com',
+'adsolvix.go2cloud.org',
+'adson.awempire.com',
+'adsonar.com',
+'adsoogle.com',
+'adsopedia.go2cloud.org',
+'adsp.ilse.nl',
+'adspacds.ero-advertising.com',
+'adspace.ro',
+'adspaces.ero-ades.ero-advertising.com',
+'adspaces.ero-advertising.com',
+'adspaces.ero-apaces.ero-advertising.com',
+'adspaces2.ero-advertising.com',
+'adspade.go2affise.com',
+'adspaes.ero-advertising.com',
+'adspages.ero-advertising.com',
+'adspcces.ero-advertising.com',
+'adspdbl.com',
+'adspeed.com',
+'adsphinx.com',
+'adspics.com',
+'adspinner.com',
+'adspirit.de',
+'adsplay.go2cloud.org',
+'adsplay.in',
+'adsppperv.com',
+'adspserving.com',
+'adspynet.com',
+'adsremote.timesink.com',
+'adsrevenue.net',
+'adsring.com',
+'adsrv.dispatch.com',
+'adsrv.ea.com',
+'adsrv.hpg.com.br',
+'adsrv.iol.co.za',
+'adsrv.keycaptcha.com',
+'adsrv.travelseller.net',
+'adsrv.tuscaloosanews.com',
+'adsrv.us',
+'adsrv.wilmingtonstar.com',
+'adsrv2.theledger.com',
+'adsrv2.wilmingtonstar.com',
+'adsrvmedia.adk2.co',
+'adsrvmedia.adk2x.com',
+'adsrvmedia.adsk2.co',
+'adsrvmedia.com',
+'adsrvr.org',
+'adss.comeadvertisewithus.com',
+'adss.yahoo.com',
+'adssl01.adtech.fr',
+'adssl02.adtech.fr',
+'adsspaces.ero-advertising.com',
+'adstaces.ero-advertising.com',
+'adstage-analytics.herokuapp.com',
+'adstartmedia.go2affise.com',
+'adstats.adviva.net',
+'adstil.indiatimes.com',
+'adstoclick.com',
+'adstrack.co',
+'adstracking.s3-website-us-west-1.amazonaws.com',
+'adstract.adk2.co',
+'adstrategy.go2cloud.org',
+'adstream.cardboardfish.com',
+'adstrologycpa.go2cloud.org',
+'adstrx.com',
+'adsup.go2cloud.org',
+'adsupermarket.com',
+'adsuperstar.com',
+'adsupervisor.com',
+'adsurve.com',
+'adsvert.com',
+'adsvids.com',
+'adsview.com',
+'adsvr.adknowledge.com',
+'adsvr.adsparc.net',
+'adsvr.taipeilink.net',
+'adswakeup.com',
+'adswap.com',
+'adsweb.tiscali.de',
+'adsweb.tiscali.it',
+'adswizz.com',
+'adsx.greystripe.com',
+'adsx.greystripe.com',
+'adsxgm.com',
+'adsxxxtraff.com',
+'adsymptotic.com',
+'adsyndication.msn.com',
+'adsynergy.com',
+'adsys.townnews.com',
+'adsyst.biz',
+'adsytipl.indiatimes.com',
+'ads_ad_center.s3.amazonaws.com',
+'adtackmedia.go2cloud.org',
+'adtag.msn.ca',
+'adtag.sympatico.ca',
+'adtagger.com',
+'adtaily.com',
+'adtank.go2cloud.org',
+'adtarget.ro',
+'adtds.trackads.net',
+'adtecc.com',
+'adtech.com',
+'adtech.de',
+'adtegrity.com',
+'adtegrity.net',
+'adtegrity.spinbox.net',
+'adtendant.weatherforyou.com',
+'adteractive.com',
+'adtest.theonion.com',
+'adtest.timesink.com',
+'adtgs.com',
+'adtheorent.com',
+'adthrive.com',
+'adti.me',
+'adtiger.de',
+'adtilt.com',
+'adtimes.nytimes.com',
+'adtlgc.com',
+'adtoadd.com',
+'adtoll.com',
+'adtoma.com',
+'adtoox.com',
+'adtotal.pl',
+'adtpix.com',
+'adtrack.adleadevent.com',
+'adtrack.cimedia.net',
+'adtrack.king.com',
+'adtrack.pichunter.com',
+'adtrack.right-ads.com',
+'adtrack.trafficwave.net',
+'adtrack1.pl',
+'adtracker.inmobi.com',
+'adtracking.vinden.nl',
+'adtrackone.eu',
+'adtrade.net',
+'adtrafic.go2cloud.org',
+'adtredo.com',
+'adtrivacpa.go2cloud.org',
+'adtrix.com',
+'adtruism.com',
+'adtruth.com',
+'adtual1.go2cloud.org',
+'adtuber.go2cloud.org',
+'adtwirl.com',
+'aducash.com',
+'adult-banner-ads.com',
+'adultbannerexchange.de',
+'adultcpaoffers-elb.go2cloud.org',
+'adultcpaoffers.go2cloud.org',
+'adultimate.tubewolf.com',
+'adulttubetraffic.com',
+'adunblock.com',
+'aduncle.go2cloud.org',
+'adv-adserver.com',
+'adv-banner.iol.it',
+'adv-banner.libero.it',
+'adv-g009.us.intellitxt.com',
+'adv-plus.com',
+'adv.abv.bg',
+'adv.adr.it',
+'adv.adsbwm.com',
+'adv.adultrium.com',
+'adv.aport.ru',
+'adv.bbanner.it',
+'adv.blogupp.com',
+'adv.calciomercato.com',
+'adv.co.il',
+'adv.domaindirect.it',
+'adv.dot.wp.pl',
+'adv.erosnews.it',
+'adv.freeonline.it',
+'adv.gazeta.pl',
+'adv.gpm-digital.com',
+'adv.h2porn.com',
+'adv.hwupgrade.it',
+'adv.ilsole24ore.it',
+'adv.imadrep.co.kr',
+'adv.isdn.cz',
+'adv.linear.it',
+'adv.m88sb.com',
+'adv.neto.net.il',
+'adv.noblepoker.com',
+'adv.pconline.com.cn',
+'adv.quipo.it',
+'adv.sexcounter.com',
+'adv.tre.it',
+'adv.virgilio.it',
+'adv.webmd.com',
+'adv.wp.pl',
+'adv.yo.cz',
+'adv01.interfree.it',
+'adv2.absoluteagency.com',
+'adv679854.ru',
+'adv9.net',
+'advancedad.com',
+'advancedadapters.com',
+'advancedmedia.go2cloud.org',
+'advancedsoftwaresupport.com',
+'advancedtracker.appspot.com',
+'advancemobile.go2affise.com',
+'advancets.org',
+'advantageglobalmarketing.com',
+'advantedges.go2cloud.org',
+'advconversion.com',
+'adveng.hiasys.com',
+'adventize.go2cloud.org',
+'adventori.com',
+'adventory.com',
+'adventuresinnetmarketing.com',
+'advenueplatform.com',
+'adverity.com',
+'adverline.com',
+'adverline.fr',
+'adversaldisplay.com',
+'adversalservers.com',
+'advert.bayarea.com',
+'advert.e-se.ru',
+'advert.estsoft.com',
+'advert.exaccess.ru',
+'advert.gittigidiyor.com',
+'advert.hpg.com.br',
+'advert.hu',
+'advert.subscribe.ru',
+'advert.uloz.to',
+'advert.webdifusao-server.com',
+'advert0.hpg.com.br',
+'advert1.hpg.com.br',
+'advert18.hpg.com.br',
+'advert19.hpg.com.br',
+'advert218.hpg.com.br',
+'advert219.hpg.com.br',
+'advert220.hpg.com.br',
+'advert221.hpg.com.br',
+'advert222.hpg.com.br',
+'advert223.hpg.com.br',
+'advert224.hpg.com.br',
+'advert225.hpg.com.br',
+'advert226.hpg.com.br',
+'advert227.hpg.com.br',
+'advert228.hpg.com.br',
+'advert229.hpg.com.br',
+'advert230.hpg.com.br',
+'advert231.hpg.com.br',
+'advert232.hpg.com.br',
+'advert233.hpg.com.br',
+'advert234.hpg.com.br',
+'advert235.hpg.com.br',
+'advert236.hpg.com.br',
+'advert237.hpg.com.br',
+'advert238.hpg.com.br',
+'advert239.hpg.com.br',
+'advert240.hpg.com.br',
+'advert241.hpg.com.br',
+'advert242.hpg.com.br',
+'advert243.hpg.com.br',
+'advert244.hpg.com.br',
+'advert245.hpg.com.br',
+'advert246.hpg.com.br',
+'advert247.hpg.com.br',
+'advert248.hpg.com.br',
+'advert249.hpg.com.br',
+'advert250.hpg.com.br',
+'advert251.hpg.com.br',
+'advert252.hpg.com.br',
+'advert253.hpg.com.br',
+'advert254.hpg.com.br',
+'advert255.hpg.com.br',
+'advert3.hpg.com.br',
+'advert30.hpg.com.br',
+'advert31.hpg.com.br',
+'advert33.hpg.com.br',
+'advert34.hpg.com.br',
+'advert35.hpg.com.br',
+'advert36.hpg.com.br',
+'advert37.hpg.com.br',
+'advert38.hpg.com.br',
+'advert39.hpg.com.br',
+'advert4.hpg.com.br',
+'advert40.hpg.com.br',
+'advert41.hpg.com.br',
+'advert43.hpg.com.br',
+'advert44.hpg.com.br',
+'advert45.hpg.com.br',
+'advert46.hpg.com.br',
+'advert47.hpg.com.br',
+'advert48.hpg.com.br',
+'advert49.hpg.com.br',
+'advert5.hpg.com.br',
+'advert50.hpg.com.br',
+'advert51.hpg.com.br',
+'advert53.hpg.com.br',
+'advert54.hpg.com.br',
+'advert55.hpg.com.br',
+'advert6.hpg.com.br',
+'advert7.hpg.com.br',
+'advert8.hpg.com.br',
+'advert9.hpg.com.br',
+'advertarium.com.ua',
+'advertbox.us',
+'adverteerdirect.nl',
+'adverticum.com',
+'adverticum.net',
+'adverticus.de',
+'advertis.go2cloud.org',
+'advertise.com',
+'advertise.tucows.com',
+'advertise.twitpic.com',
+'advertisegame.com',
+'advertisehealth.go2cloud.org',
+'advertiseireland.com',
+'advertisementbanners.com',
+'advertiser.adknowledge.com',
+'advertiser.ads.ec',
+'advertiser.cyberghostvpn.com',
+'advertiser.fyber.com',
+'advertiser.lifestyleadnetwork.com',
+'advertiser.net',
+'advertiser.superstats.com',
+'advertiserconnection.azurewebsites.net',
+'advertiserjob.com',
+'advertisers.doubleclick.net',
+'advertisespace.com',
+'advertiseyourgame.com',
+'advertising-software.com',
+'advertising-world.com',
+'advertising.apple.com',
+'advertising.christiansunite.com',
+'advertising.com',
+'advertising.counterpath.com',
+'advertising.de',
+'advertising.dk',
+'advertising.entensity.net',
+'advertising.gammae.com',
+'advertising.gfxartist.com',
+'advertising.hardwarezone.com',
+'advertising.hiasys.com',
+'advertising.ie',
+'advertising.lycos.com',
+'advertising.microsoft.com',
+'advertising.net',
+'advertising.paltalk.com',
+'advertising.spreadomat.net',
+'advertising.yahoo.com',
+'advertising365.com',
+'advertisingsex.com',
+'advertisingvalue.info',
+'advertjunction.com',
+'advertlets.com',
+'advertmarket.com',
+'advertmarketing.com',
+'advertmedia.de',
+'advertpay.net',
+'advertpro.sitepoint.com',
+'advertraf.go2affise.com',
+'adverts.adam4adam.com',
+'adverts.archant.co.uk',
+'adverts.creativemark.co.uk',
+'adverts.eclypsia.com',
+'adverts.freeloader.com',
+'advertserve.com',
+'advertstats.com',
+'advertstream.com',
+'advertzer.com',
+'advice-ads.s3.amazonaws.com',
+'advidi.optimuum.com',
+'advido.com',
+'adview.ppro.de',
+'adviews-sponsor.de',
+'adviqo.go2cloud.org',
+'advlab.it',
+'advm10.com',
+'advmania.com',
+'advmedia.go2cloud.org',
+'advmedialtd.com',
+'advnet.xyz',
+'advnstrdm541231c0esprod.122.2o7.net',
+'advnt01.com',
+'advolution.de',
+'advombat.ru',
+'advrts.s3.amazonaws.com',
+'advserver.xyz',
+'advspot.com',
+'advt.webindia123.com',
+'adw.ero-advertising.com',
+'adw.sapo.pt',
+'adwareremovergold.com',
+'adwaver.de',
+'adwayskorea.go2cloud.org',
+'adwealth.com',
+'adweb.hornymatches.com',
+'adweb1.hornymatches.com',
+'adweb2.hornymatches.com',
+'adwolf.eu',
+'adword2301.go2cloud.org',
+'adwords.immortalnight.com',
+'adworkmedia.com',
+'adworkmedia.net',
+'adworks.rediff.com',
+'adworldmedia.com',
+'adwpaces.ero-advertising.com',
+'adx.adnxs.com',
+'adx.allstar.cz',
+'adx.atnext.com',
+'adx.infomed.co.il',
+'adx.kat.ph',
+'adx.metanetwork.com',
+'adx.panet.co.il',
+'adxite.com',
+'adxmarket.com',
+'adxpansion.com',
+'adxpop.com',
+'adxpose.com',
+'adxpower.com',
+'adxserve.net',
+'adyoulike.com',
+'adz.mobi',
+'adz.zwee.ly',
+'adzerk-www.s3.amazonaws.com',
+'adzerver.com',
+'adzly.com',
+'adzmedia.com',
+'adzmob.com',
+'adzmobi.com',
+'adzones.com',
+'adzonesocial.go2cloud.org',
+'adzonk.com',
+'adzouk.com',
+'ae28-1e4a-ec3b-e9e6.reporo.net',
+'aecidiamldalomt.download',
+'aeekj.voluumtrk.com',
+'aehistory.112.2o7.net',
+'aeht9.voluumtrk.com',
+'aen.belugaboost.com',
+'aeps.112.2o7.net',
+'aeropostale.resultspage.com',
+'aetv.112.2o7.net',
+'aexp.demdex.net',
+'af-gb.mgid.com',
+'aff-jp.dxlive.com',
+'aff-jp.exshot.com',
+'aff.adland.co.il',
+'aff.attractiontracker.com',
+'aff.bstatic.com',
+'aff.camplace.com',
+'aff.clickon.co.il',
+'aff.devicebondage.com',
+'aff.eteachergroup.com',
+'aff.kinkondemand.com',
+'aff.letsbonus.com',
+'aff.lmgtfy.com',
+'aff.marathonbet.com',
+'aff.mclick.mobi',
+'aff.nextdating.com',
+'aff.nscash.com',
+'aff.optionbit.com',
+'aff.optionyard.com',
+'aff.primaryads.com',
+'aff.publicdisgrace.com',
+'aff.putncall.com',
+'aff.ringtonepartner.com',
+'aff.sexandsubmission.com',
+'aff.trafficjmp.com',
+'aff.utrader.com',
+'aff.zoomtrader.com',
+'aff12.com',
+'affbanners.bizland.com',
+'affbeat.com',
+'affbuzzads.com',
+'affcloud.go2cloud.org',
+'affddl.automotive.com',
+'affguru.go2cloud.org',
+'affilcrtopcolle.112.2o7.net',
+'affili.go2cloud.org',
+'affili24.com',
+'affili24.net',
+'affiliate-robot.com',
+'affiliate.1800flowers.com',
+'affiliate.365adsolutions.com',
+'affiliate.abctrcker.com',
+'affiliate.adgtracker.com',
+'affiliate.adiclicks.com',
+'affiliate.admtracker.com',
+'affiliate.baazee.com',
+'affiliate.c2mclicks.com',
+'affiliate.casinorewards.com',
+'affiliate.ckmtracker.com',
+'affiliate.coral.co.uk',
+'affiliate.cpavhits.com',
+'affiliate.distrigame.com',
+'affiliate.domaindirect.net',
+'affiliate.doteasy.com',
+'affiliate.doubleyourdating.com',
+'affiliate.drivotracker.com',
+'affiliate.dtiserv.com',
+'affiliate.entireweb.com',
+'affiliate.espotting.com',
+'affiliate.espotting.fr',
+'affiliate.everyone.net',
+'affiliate.exploit.net',
+'affiliate.fr.espotting.com',
+'affiliate.free-banners.com',
+'affiliate.friendsearch.com',
+'affiliate.gamestop.com',
+'affiliate.glbtracker.com',
+'affiliate.gmtracker.com',
+'affiliate.gwmtracker.com',
+'affiliate.hcatracker.com',
+'affiliate.hosteurope.de',
+'affiliate.iamplify.com',
+'affiliate.icdsoft.com',
+'affiliate.idownload.com',
+'affiliate.idritracker.com',
+'affiliate.immobilienscout24.de',
+'affiliate.juno.co.uk',
+'affiliate.key2link.com',
+'affiliate.landsend.com',
+'affiliate.mall.cz',
+'affiliate.mediaclicktrker.com',
+'affiliate.mediatemple.net',
+'affiliate.nmbtrack.com',
+'affiliate.no.espotting.com',
+'affiliate.paidonresults.com',
+'affiliate.plugnpay.com',
+'affiliate.rakuten.com',
+'affiliate.redtubefiles.com',
+'affiliate.resellerclub.com',
+'affiliate.smsdollar.com',
+'affiliate.suntrck.com',
+'affiliate.tcnclickpath.com',
+'affiliate.techstats.net',
+'affiliate.thedatingnetwork.com',
+'affiliate.travelnow.com',
+'affiliate.trk4.com',
+'affiliate.trust.zone',
+'affiliate.tvmtracker.com',
+'affiliate.viator.com',
+'affiliate.wallatrax.com',
+'affiliate.yeahmobi.com',
+'affiliate.zantracker.com',
+'affiliate.zap.co.il',
+'affiliate.zap2it.com',
+'affiliateads.go2cloud.org',
+'affiliatebot.com',
+'affiliateclub.go2cloud.org',
+'affiliatedpartners.go2cloud.org',
+'affiliatefind.com',
+'affiliatefuel.com',
+'affiliategateways.go2cloud.org',
+'affiliategateways.hasoffers.com',
+'affiliateharvest.com',
+'affiliatehub.skybet.com',
+'affiliatekeeper.com',
+'affiliatelounge.com',
+'affiliatemarketing.directtrack.com',
+'affiliatematch.com',
+'affiliatemg.com',
+'affiliatemunch.go2cloud.org',
+'affiliatenetmedia.go2cloud.org',
+'affiliatenetwork.com',
+'affiliateprogram.keywordspy.com',
+'affiliatequality.com',
+'affiliates.5dimes.com',
+'affiliates.a2hosting.com',
+'affiliates.allposters.com',
+'affiliates.beaffiliates.com',
+'affiliates.beaffiliates.fr',
+'affiliates.bfast.com',
+'affiliates.bigdoggie.net',
+'affiliates.bizarre-mature-sex.com',
+'affiliates.bookdepository.co.uk',
+'affiliates.bookdepository.com',
+'affiliates.chacha.com',
+'affiliates.cherryaffiliates.omarsys.com',
+'affiliates.cupidplc.com',
+'affiliates.de',
+'affiliates.deluxepass.com',
+'affiliates.eblastengine.com',
+'affiliates.esellerate.net',
+'affiliates.galapartners.co.uk',
+'affiliates.globat.com',
+'affiliates.goodvibes.com',
+'affiliates.homestead.com',
+'affiliates.hostgator.in',
+'affiliates.hotelscombined.com',
+'affiliates.internationaljock.com',
+'affiliates.kingplayer.com',
+'affiliates.kissmyads.com',
+'affiliates.kliks.net',
+'affiliates.kliks.nl',
+'affiliates.londonmarketing.com',
+'affiliates.lynda.com',
+'affiliates.macromedia.com',
+'affiliates.market-ace.com',
+'affiliates.mature.eu',
+'affiliates.mature.nl',
+'affiliates.mgmmirage.com',
+'affiliates.minglematch.com',
+'affiliates.mozy.com',
+'affiliates.myfax.com',
+'affiliates.net',
+'affiliates.nl',
+'affiliates.old-and-young-lesbians.com',
+'affiliates.onetravel.com',
+'affiliates.playboy.com',
+'affiliates.playboyplus.com',
+'affiliates.powweb.com',
+'affiliates.quintura.com',
+'affiliates.reunion.com',
+'affiliates.spark.net',
+'affiliates.thelotter.com',
+'affiliates.thrixxx.com',
+'affiliates.treasureisland.com',
+'affiliates.tyroodr.com',
+'affiliates.valuepass.com',
+'affiliates.vcommission.com',
+'affiliates.wintingo.com',
+'affiliates.woodbrass.com',
+'affiliates.worldhot.com',
+'affiliateshop.com',
+'affiliatesuccess.net',
+'affiliatetarget.com',
+'affiliateteams.go2cloud.org',
+'affiliatetracking.com',
+'affiliatetracking.net',
+'affiliatetrading.go2cloud.org',
+'affiliatetrading.net',
+'affiliatewire.go2cloud.org',
+'affiliatezone.com',
+'affiliation-france.com',
+'affiliation.planethoster.info',
+'affiliation.rueducommerce.fr',
+'affiliking.blogspot.com',
+'affiliplus.de',
+'affiliprint.go2cloud.org',
+'affilysis.go2cloud.org',
+'affimarket.go2cloud.org',
+'affimob.go2cloud.org',
+'affina.com',
+'affinitytracking.go2cloud.org',
+'affirmedzwvnkh.download',
+'affise.com',
+'affl.sucuri.net',
+'affscout.go2cloud.org',
+'affsharkoffer.com',
+'afftrack.com',
+'afftracker.info',
+'afftrackinglinks.com',
+'afftrackr.com',
+'affyield.com',
+'afgr2.com',
+'afiliati.ro',
+'afimg.liveperson.com',
+'afin.doublepimp.com',
+'aflrm.com',
+'afreehome.com',
+'africandevelopmentbank.com',
+'afs.ero-advertising.com',
+'afs.googlesyndication.com',
+'afs.googleusercontent.com',
+'afs.moatads.com',
+'afsanalytics.com',
+'afterdawn.us.intellitxt.com',
+'afterdownload.com',
+'afterview.ru',
+'aftp.linksynergy.com',
+'aftrk.com',
+'afwl8.voluumtrk.com',
+'ag.travelocity.com.edgesuite.net',
+'agf-test.2cnt.net',
+'aggregateknowledge.com',
+'agi5y.voluumtrk.com',
+'agjdv.voluumtrk.com',
+'agmedia.go2cloud.org',
+'agmtrk.com',
+'agnstaging.com',
+'agnvbmaus.112.2o7.net',
+'agofm-test-off.2cnt.net',
+'agoramedia.com',
+'agpaffiliates.go2cloud.org',
+'ags.beta.advertising.com',
+'ah-ha.com',
+'ahhgu.voluumtrk.com',
+'ahomedia.zxfactory.nl',
+'ahqcr.voluumtrk.com',
+'ai.hitbox.com',
+'ai.net',
+'ai.yimg.jp',
+'aideslihks.download',
+'aidps.atdmt.com',
+'aidqi.voluumtrk.com',
+'aim-charts.pf.aol.com',
+'aim1.adsoftware.com',
+'aim2.adsoftware.com',
+'aim3.adsoftware.com',
+'aim4.adsoftware.com',
+'aim4media.com',
+'aim5.adsoftware.com',
+'aimtoday.aol.com',
+'aio.lp.mydas.mobi',
+'airbrake.io',
+'airpush.com',
+'airpush.go2affise.com',
+'airpushmarketing.s3.amazonaws.com',
+'ais.abacast.com',
+'aj.600z.com',
+'aj.adjungle.com',
+'aj3zt.voluumtrk.com',
+'ajcclassifieds.com',
+'ajjtgubginkgoes.review',
+'ajkelra.com',
+'ajwantjtkrn.download',
+'ak-ns.sascdn.com',
+'ak.exe.imgfarm.com',
+'ak.imgaft.com',
+'ak.imgfarm.com',
+'ak.linkstorm.net',
+'ak.pipoffers.apnpartners.com',
+'ak.sail-horizon.com',
+'ak.toolbar.mywebsearch.com',
+'ak.webfetti.com',
+'ak1.abmr.net',
+'ak1.imgaft.com',
+'ak1s.abmr.net',
+'aka-cdn-ns.adtech.de',
+'aka-cdn-ns.adtechus.com',
+'aka-cdn.adtechus.com',
+'aka.p80.net',
+'akaads-abc.starwave.com',
+'akaads-espn.starwave.com',
+'akamai.bizrate.com',
+'akamai.smartadserver.com',
+'akillimeyveler.reklamagaci.com',
+'akm.playnow.guru',
+'akmnetwork.com',
+'aknoj.voluumtrk.com',
+'akqhhiqteunuchise.review',
+'aksb-a.akamaihd.net',
+'aktrack.pubmatic.com',
+'akvoi.voluumtrk.com',
+'akz.imgfarm.com',
+'alabardak.com',
+'albanytimesunion.122.2o7.net',
+'albinoblacksheep.us.intellitxt.com',
+'alchemynteryield.jmp9.com',
+'alea.adam.ad.daum.net',
+'alea.adam.daum.net',
+'alenty.2cnt.net',
+'alfredean.com',
+'aliaz.go2cloud.org',
+'alienationxjbqjennn.download',
+'alijaextort.review',
+'all.447.xyz',
+'all.eliteserverconnect.xyz',
+'alladream.go2cloud.org',
+'allatv.justclick.ru',
+'allbanners.ru',
+'alldcs-distinct.outbrain.com',
+'alldcs.outbrain.com',
+'alldcs.sphere.com',
+'allhiphop.us.intellitxt.com',
+'alliancesqcqet.download',
+'allosponsor.com',
+'alloydigital.com',
+'allsolutionsnetwork.com',
+'allstarmediagroup.com',
+'allstats4u.com',
+'alltereg0.ru',
+'alltraff.ru',
+'allyes.com',
+'almonriesdocerjqcc.download',
+'alog.umeng.com',
+'alpha.bnex.com',
+'alphagirlz.mobi',
+'alpventures.bravejournal.com',
+'alt.bugsense.appspot.com',
+'alt.bugsense.com',
+'altfarm.mediaplex.com',
+'altfarm.mediaplex.com.27517.9211.302br.net',
+'altfarm.mediaplex.com.32246.9211.302br.net',
+'altfarm.mediaplex.com.32247.9211.302br.net',
+'altfarm.mediaplex.com.32249.9211.302br.net',
+'altfarm.mediaplex.com.60476.9430.302br.net',
+'altfarm.mediaplex.com.60477.9430.302br.net',
+'altfarm.mediaplex.com.72266.9605.302br.net',
+'altfarm.mediaplex.com.72267.9605.302br.net',
+'altfarm.mediaplex.com.77763.9664.302br.net',
+'altfarm.mediaplex.com.77765.9664.302br.net',
+'altfarm.mediaplex.com.77767.9664.302br.net',
+'altfarm.mediaplex.com.77769.9664.302br.net',
+'altfarm.mediaplex.com.77770.9664.302br.net',
+'altfarm.mediaplex.com.77771.9664.302br.net',
+'altfarm.mediaplex.com.77773.9664.302br.net',
+'altfarm.mediaplex.com.77775.9664.302br.net',
+'altfarm.mediaplex.com.77777.9664.302br.net',
+'altfarm.mediaplex.com.77779.9664.302br.net',
+'altfarm.mediaplex.com.77781.9664.302br.net',
+'altfarm.mediaplex.com.77783.9664.302br.net',
+'altfarm.mediaplex.com.77785.9664.302br.net',
+'altfarm.mediaplex.com.77787.9664.302br.net',
+'altfarm.mediaplex.com.77789.9664.302br.net',
+'altfarm.mediaplex.com.77791.9664.302br.net',
+'altfarm.mediaplex.com.77792.9664.302br.net',
+'altfarm.mediaplex.com.77793.9664.302br.net',
+'altfarm.mediaplex.com.77794.9664.302br.net',
+'altfarm.mediaplex.com.77795.9664.302br.net',
+'altfarm.mediaplex.com.77796.9664.302br.net',
+'altfarm.mediaplex.com.77797.9664.302br.net',
+'altfarm.mediaplex.com.77798.9664.302br.net',
+'altfarm.mediaplex.com.77799.9664.302br.net',
+'altfarm.mediaplex.com.77801.9664.302br.net',
+'altiris.112.2o7.net',
+'alwaysnewsoft.thegoodonesystemforcontentingstable.stream',
+'alxsite.com',
+'am15.net',
+'amanitaswtzshxp.download',
+'amateur.amarotic.com',
+'amateur.xxxcounter.com',
+'amazedmag.digidip.net',
+'amazingcounters.com',
+'amazinglyjvrucwx.download',
+'amclicks.com',
+'amidmostewbvqcji.download',
+'amkhn.voluumtrk.com',
+'amoad.com',
+'amobee.com',
+'amoffers.go2cloud.org',
+'amoffers.hasoffers.com',
+'amono.justclick.ru',
+'amp.122.2o7.net',
+'ampxchange.com',
+'ampya01.wt-eu02.net',
+'amres.voluumtrk.com',
+'ams1.ib.adnxs.com',
+'ams1.mobile.adnxs.com',
+'ams10.ib.adnxs.com',
+'ams11.ib.adnxs.com',
+'ams12.ib.adnxs.com',
+'ams13.ib.adnxs.com',
+'ams14.ib.adnxs.com',
+'ams15.ib.adnxs.com',
+'ams16.ib.adnxs.com',
+'ams17.ib.adnxs.com',
+'ams18.ib.adnxs.com',
+'ams19.ib.adnxs.com',
+'ams2.100tb.heyzap.com',
+'ams2.ib.adnxs.com',
+'ams2.voxcloud.cedexis.com',
+'ams20.ib.adnxs.com',
+'ams3.100tb.heyzap.com',
+'ams3.ib.adnxs.com',
+'ams4.100tb.heyzap.com',
+'ams4.ib.adnxs.com',
+'ams5.ib.adnxs.com',
+'ams6.ib.adnxs.com',
+'ams7.ib.adnxs.com',
+'ams8.ib.adnxs.com',
+'ams9.ib.adnxs.com',
+'amtracking.go2cloud.org',
+'amuco.voluumtrk.com',
+'amusive.com',
+'amwqo.voluumtrk.com',
+'amylaseyaxvh.download',
+'amz.steamprices.com',
+'amzn.trendhure.com',
+'an-retargeting.awsotherlevels.com',
+'an.adhood.com',
+'an.blamads.com',
+'an.pxl.ace.advertising.com',
+'an.tacoda.net',
+'an.yandex.ru',
+'analy.qq.com',
+'analysis.focalprice.com',
+'analysis.shinobi.jp',
+'analytic.gatewayinterface.com',
+'analytic.imlive.com',
+'analytic.spamfighter.com',
+'analytic.xingcloud.com',
+'analytics-api-samples.googlecode.com',
+'analytics-prod-ingress.bricknet.com',
+'analytics-v2.anvato.com',
+'analytics.163.com',
+'analytics.1and1.com',
+'analytics.1und1.de',
+'analytics.abacast.com',
+'analytics.ad.daum.net',
+'analytics.adnetwork.vn',
+'analytics.adspaces.ero-advertising.com',
+'analytics.ambient-platform.com',
+'analytics.archive.org',
+'analytics.arubamediamarketing.it',
+'analytics.aweber.com',
+'analytics.beeznest.com',
+'analytics.belgacom.be',
+'analytics.bigcommerce.com',
+'analytics.blogspot.com',
+'analytics.clickdimensions.com',
+'analytics.cmg.net',
+'analytics.cnd-motionmedia.de',
+'analytics.cocolog-nifty.com',
+'analytics.conmio.com',
+'analytics.convertlanguage.com',
+'analytics.cynapse.com',
+'analytics.datahc.com',
+'analytics.dev.springboardvideo.com',
+'analytics.disneyinternational.com',
+'analytics.ero-advertising.com',
+'analytics.freedom.com',
+'analytics.fusepowered.com',
+'analytics.google.com',
+'analytics.gorillanation.com',
+'analytics.gvim.mobi',
+'analytics.industriemagazin.net',
+'analytics.informationweek.com',
+'analytics.ladmedia.fr',
+'analytics.leadlifesolutions.net',
+'analytics.localytics.com',
+'analytics.loop-cloud.de',
+'analytics.matchbin.com',
+'analytics.mefeedia.com',
+'analytics.mindjolt.com',
+'analytics.mobile.yandex.net',
+'analytics.moneycontrol.com',
+'analytics.moz.com',
+'analytics.mozzi.com',
+'analytics.mpn.mokonocdn.com',
+'analytics.nascar.com',
+'analytics.newsinc.com',
+'analytics.openload.co',
+'analytics.optilead.co.uk',
+'analytics.poferries.com',
+'analytics.popsci.com',
+'analytics.query.yahoo.com',
+'analytics.rechtslupe.org',
+'analytics.recruitics.com',
+'analytics.reyrey.net',
+'analytics.sitewit.com',
+'analytics.socialbakers.com',
+'analytics.solidbau.at',
+'analytics.soup.io',
+'analytics.spoken-tutorial.org',
+'analytics.stg.online.xl.pt',
+'analytics.supplyframe.com',
+'analytics.teespring.com',
+'analytics.themarketiq.com',
+'analytics.theminersunion.com',
+'analytics.thingx.tv',
+'analytics.traidnt.net',
+'analytics.traviangames.com',
+'analytics.tribeca.vidavee.com',
+'analytics.tube8.phncdn.com',
+'analytics.twitter.com',
+'analytics.upworthy.com',
+'analytics.us.archive.org',
+'analytics.vodafone.co.uk',
+'analytics.wildtangent.com',
+'analytics.xl.pt',
+'analytics.yahoo.com',
+'analytics.yam.com',
+'analytics.yola.net',
+'analytics.yolacdn.net',
+'analytics.youporn.phncdn.com',
+'analytics.zhihu.com',
+'analyticsengine.s3.amazonaws.com',
+'analyze.full-marke.com',
+'analyzer.fc2.com',
+'analyzer.liveads.no',
+'analyzer2.fc2.com',
+'analyzer52.fc2.com',
+'analyzer55.fc2.com',
+'anapaestsgekcc.download',
+'anapixel.expansion.com',
+'anapixel.telva.com',
+'anastasiaaffiliate.go2cloud.org',
+'anatomiseddybglcuku.download',
+'ancestrymsn.112.2o7.net',
+'andpop.us.intellitxt.com',
+'andreev.justclick.ru',
+'android-hilfe.de.intellitxt.com',
+'android-sdk31.transpera.com',
+'android.bcfads.com',
+'android.heyzap.com',
+'android.mobpartner.mobi',
+'android.reporo.net',
+'android.revmob.com',
+'androidads20.adcolony.com',
+'androidads21.adcolony.com',
+'androidquery.appspot.com',
+'androidsdk.ads.mp.mydas.mobi',
+'androidsk.ads.mp.mydas.mobi',
+'androtify.com',
+'anet.apx.appier.net',
+'anet.c.appier.net',
+'anfyx.voluumtrk.com',
+'angiba.112.2o7.net',
+'angmar.112.2o7.net',
+'angpar.112.2o7.net',
+'angtr.112.2o7.net',
+'angts.112.2o7.net',
+'angvac.112.2o7.net',
+'anlt.dnsdynamic.com',
+'anm.intelli-direct.com',
+'anners.ero-advertising.com',
+'annonser.dagbladet.no',
+'annuncio.com.do',
+'anomicpcwgrml.download',
+'anon.doubleclick.speedera.net',
+'anonymousads.com',
+'anpqt.voluumtrk.com',
+'ans1.adsoftware.com',
+'ans2.adsoftware.com',
+'ans3.adsoftware.com',
+'ans4.adsoftware.com',
+'answermedia.com',
+'answers.us.intellitxt.com',
+'antezeta.com',
+'anurousxaeazghbz.download',
+'any.gs',
+'anycast.fw.adsafeprotected.com',
+'anycast.pixel.adsafeprotected.com',
+'anyday.com',
+'anylist.c.appier.net',
+'anymanga.com',
+'anz.ads.link4ads.com',
+'anz.ms.link4ads.com',
+'anzeigen.bei-uns.de',
+'aobwt.voluumtrk.com',
+'aocular.com',
+'aojws.voluumtrk.com',
+'aok.122.207.net',
+'aol.ivwbox.de',
+'aol.tt.omtrdc.net',
+'aoldmoz.122.2o7.net',
+'aolsvc.ivwbox.de',
+'aolturnercnnmoney.112.2o7.net',
+'aolturnersi.122.2o7.net',
+'aolwpmq.112.2o7.net',
+'aolwpmqnoban.112.2o7.net',
+'aolwpnscom.112.2o7.net',
+'aolwpnswhatsnew.112.2o7.net',
+'aonx6.voluumtrk.com',
+'aoredi.com',
+'aos.wall.youmi.net',
+'ap.ads.link4ads.com',
+'ap.lijit.com',
+'ap.ms.link4ads.com',
+'ap.rtrgt.com',
+'ap1.alphagirlz.mobi',
+'ap2.alphagirlz.mobi',
+'apachestat.cimedia.net',
+'apapi.dc121677.com',
+'apapi.rapsio.com',
+'aparat.ads.saba-e.com',
+'apdigitalorg.112.2o7.net',
+'aperture.displaymarketplace.com',
+'apex.go.sonobi.com',
+'api-public.addthis.com',
+'api.140proof.com',
+'api.2easydroid.com',
+'api.ad-patrick.com',
+'api.adip.ly',
+'api.adlure.net',
+'api.adrta.com',
+'api.adsymptotic.com',
+'api.adyoulike.com',
+'api.airpush.com',
+'api.analytics.omgpop.com',
+'api.appfireworks.com',
+'api.applifier.com',
+'api.appoxee.com',
+'api.appsflyer.com',
+'api.apptap.com',
+'api.asiatone.net',
+'api.atdmt.com',
+'api.autocompleteplus.com',
+'api.bee7.com',
+'api.bitp.it',
+'api.bizographics.com',
+'api.celtra.com',
+'api.chartboost.com',
+'api.citygridmedia.com',
+'api.conduit.com',
+'api.contextly.com',
+'api.crittercism.com',
+'api.demandbase.com',
+'api.domob.cn',
+'api.elasticemail.com',
+'api.ero-advertising.com',
+'api.flicktweets.com',
+'api.flurry.com',
+'api.flyertown.ca',
+'api.fortumo.com',
+'api.fusepowered.com',
+'api.fyreball.com',
+'api.gameanalytics.com',
+'api.getvero.com',
+'api.hostip.info',
+'api.iflychat.com',
+'api.ilius.net',
+'api.innomdc.com',
+'api.intensifier.de',
+'api.ipinfodb.com',
+'api.keen.io',
+'api.kiip.me',
+'api.kissmetrics.com',
+'api.lazyswipe.com',
+'api.magmamobile.com',
+'api.mixpanel.com',
+'api.mobileapptracking.com',
+'api.mobpartner.mobi',
+'api.mobula.sdk.duapps.com',
+'api.nanigans.com',
+'api.native.ai',
+'api.naturaltracking.com',
+'api.nrelate.com',
+'api.omniata.com',
+'api.optimizely.com',
+'api.otherlevels.com',
+'api.parsely.com',
+'api.petametrics.com',
+'api.posst.co',
+'api.revcontent.com',
+'api.revmob.com',
+'api.segment.io',
+'api.sharedcount.com',
+'api.skyhookwireless.com',
+'api.sponsorpay.com',
+'api.taplytics.com',
+'api.taps.io',
+'api.target.smi2.net',
+'api.testrequest.info',
+'api.thetrafficstat.net',
+'api.traversedlp.com',
+'api.tweetmeme.com',
+'api.umbel.com',
+'api.umeng.com',
+'api.unthem.com',
+'api.usersnap.com',
+'api.v2.sslsecure1.com',
+'api.viglink.com',
+'api.vungle.com',
+'api.w3i.com',
+'api.xdirectx.com',
+'api.yeahmobi.com',
+'api.yieldkit.com',
+'api.yp.com',
+'api.zanox.com',
+'api.zanox.ws',
+'api.zedo.com',
+'api1.intellicontact.com',
+'api1.thesearchagency.net',
+'api15.cmdragracing.com',
+'api2.testrequest.info',
+'api2.thesearchagency.net',
+'api28.thetrafficstat.net',
+'api28.webovernet.com',
+'api3.testrequest.info',
+'api3.thesearchagency.net',
+'api31.thetrafficstat.net',
+'api4.testrequest.info',
+'api4.thesearchagency.net',
+'api5.testrequest.info',
+'api5.thesearchagency.net',
+'api6.thesearchagency.net',
+'api7.thesearchagency.net',
+'api8.thesearchagency.net',
+'api9.thesearchagency.net',
+'apiae.hopscore.com',
+'apiservices.krxd.net',
+'apiskywebbercom-a.akamaihd.net',
+'apkquery.ksmobile.net',
+'apm.crittercism.com',
+'apnx-match.dotomi.com',
+'apo.ero-advertising.com',
+'apodemjyoqhwc.download',
+'apollo.go2cloud.org',
+'apophygeneafuk.download',
+'app-ab02.marketo.com',
+'app-ab03.marketo.com',
+'app-ab04.marketo.com',
+'app-abj.marketo.com',
+'app-abk.marketo.com',
+'app-abm.marketo.com',
+'app-abq.marketo.com',
+'app-authority.com',
+'app-creatives.cdn.admobile.me',
+'app-promo.com',
+'app-ratings.com',
+'app-sj01.marketo.com',
+'app-sj09.marketo.com',
+'app-sjg.marketo.com',
+'app-sjn.marketo.com',
+'app-sjo.marketo.com',
+'app-storage.elicitapp.com',
+'app.adjust.io',
+'app.app-authority.com',
+'app.appsflyer.com',
+'app.bronto.com',
+'app.cocolog-nifty.com',
+'app.compete.com',
+'app.cookieassistant.com',
+'app.cooleremail.com',
+'app.crittercism.com',
+'app.crowdscience.com',
+'app.desktop.ak-networks.com',
+'app.elicitapp.com',
+'app.getvero.com',
+'app.hubspot.com',
+'app.icontact.com',
+'app.insightgrit.com',
+'app.kissmetrics.com',
+'app.lfstmedia.com',
+'app.medyanetads.com',
+'app.mlcampaignru.com',
+'app.mlnewsletterru.com',
+'app.mysafeurl.com',
+'app.qualaroo.com',
+'app.salecycle.com',
+'app.sgiz.mobi',
+'app.sgizmo.com',
+'app.simplycast.com',
+'app.t-ad.co.kr',
+'app.yieldify.com',
+'app4us.info',
+'appads.com',
+'appapi.inspsearchapi.com',
+'apparitorvlipqjiz.download',
+'appboy.com',
+'appclick.co',
+'appclick.net',
+'appdog.com',
+'appetencyelain.com',
+'appflood.com',
+'appflood.go2cloud.org',
+'appfly.mobi',
+'appia.com',
+'appintop.com',
+'appitate.go2affise.com',
+'applab-sdk.amazon.com',
+'applebarq.com',
+'appledaily.apx.appier.net',
+'appleglobal.112.2o7.net',
+'applestoreus.112.2o7.net',
+'application.bfast.com',
+'applicationgrabb.net',
+'applications.bfast.com',
+'appliedsemantics.com',
+'applifier.com',
+'applift-a.apptornado.com',
+'applift.com',
+'appload.ingest.crittercism.com',
+'applovin.com',
+'appmpire.go2affise.com',
+'appodeal.com',
+'appolicious.com',
+'apposersdamxq.download',
+'appraisingemfxg.download',
+'apprebates.com',
+'appredeem.com',
+'approstar.com',
+'apps-infor.com',
+'apps.bittorrent.com',
+'apps.conduit.com',
+'apps.crittercism.com',
+'apps.fm',
+'apps.leadbolt.com',
+'apps.livejasmin.com',
+'apps.mobilityware.com',
+'apps.oetingerverlag.de',
+'apps.outfit7.com',
+'apps.social.omniture.com',
+'apps2.outfit7.com',
+'apps4push.com',
+'appscion.go2cloud.org',
+'appserver-ap.com',
+'appserver-cp.com',
+'appsfire.com',
+'appsflyer.com',
+'appsnack.com',
+'apptenpro.com',
+'apptera.com',
+'apptest.2cnt.net',
+'apptornado.com',
+'apptrafficmedia.go2affise.com',
+'apptv.com',
+'appular.com',
+'appxigo.go2affise.com',
+'apqixzxxgoverstayed.review',
+'aproegroup.go2cloud.org',
+'apromoweb.com',
+'aps.hearstnp.com',
+'apsalar.com',
+'aptrk.com',
+'aptrk5.com',
+'apture.com',
+'apu04c0.audientia.net',
+'apu0640.audientia.net',
+'apx.avazutracking.net',
+'apx.internal-redirect.avazutracking.net',
+'apx.irck.avazutracking.net',
+'apx.matk.avazutracking.net',
+'apx.moatads.com',
+'apx.motads.com',
+'apx.trck.avazutracking.net',
+'aqua.7eer.net',
+'aquasoft.us.intellitxt.com',
+'aqueduct.com',
+'ar.2.cqcounter.com',
+'ar.hao123.com',
+'ar.tns-counter.ru',
+'ar.voicefive.com',
+'ar1.atwola.com',
+'ar2.atwola.com',
+'ar3.atwola.com',
+'ar4.atwola.com',
+'ar5.atwola.com',
+'ar6.atwola.com',
+'ar7.atwola.com',
+'ar8.atwola.com',
+'ar9.atwola.com',
+'arabadzhi.justclick.ru',
+'arabmistress.s3.amazonaws.com',
+'arabyads.go2cloud.org',
+'arachne.cz',
+'arads.0fees.us',
+'aragonadvertising.go2cloud.org',
+'arcadebanners.com',
+'arcor.de.intellitxt.com',
+'ard.ihookup.com',
+'ard.ivwbox.de',
+'ard.xxxblackbook.com',
+'ard.yahoo.co.jp',
+'ardrone.swoop.com',
+'areasins.com',
+'areasnap.com',
+'arena.altitude-arena.com',
+'ariexinteractive.go2cloud.org',
+'arnmp.voluumtrk.com',
+'arrestspkqtg.download',
+'arrowtec.go2cloud.org',
+'arroyomedia.go2cloud.org',
+'art-of-forex.justclick.ru',
+'article19.com',
+'artificecvtogvnt.download',
+'artuframe.bfast.com',
+'artwork.aim4media.com',
+'aru.index.hu',
+'as.adfonic.net',
+'as.adwave.com',
+'as.air2s.com',
+'as.casalemedia.com',
+'as.chango.com',
+'as.ebz.io',
+'as.gamebox.com',
+'as.gettyservices.com',
+'as.gostats.com',
+'as.inbox.com',
+'as.innity.com',
+'as.it.impact-ad.jp',
+'as.mv.impact-ad.jp',
+'as.sexad.net',
+'as.sinahk.net',
+'as.wiley.com',
+'as.wkcr.cz',
+'as5000.com',
+'ase.clmbtech.com',
+'ashiestsdznwfbsd.download',
+'ashwebmail.createsend.com',
+'asiarevenue.go2cloud.org',
+'askjolene.ero-advertising.com',
+'askmen.us.intellitxt.com',
+'askmen2.us.intellitxt.com',
+'asmedia.adsupplyssl.com',
+'asmi-mobile.nuggad.net',
+'asn-trk.advolution.de',
+'asn.advolution.de',
+'asooda.com',
+'asotrack1.fluentmobile.com',
+'aspair3.fingta.com',
+'aspartamerpzyyzyn.download',
+'asplayer-ovp.piksel.com',
+'asqcr.voluumtrk.com',
+'asrv-a.akamaihd.net',
+'ass4all.com',
+'asset-0.tenderapp.com',
+'asset-1.tenderapp.com',
+'asset-2.tenderapp.com',
+'asset.pagefair.com',
+'asset.pagefair.net',
+'assets-polarb-com.a.ssl.fastly.net',
+'assets.adobedtm.com',
+'assets.bravenet.com',
+'assets.cntdy.mobi',
+'assets.devx.com',
+'assets.infinity-tracking.net',
+'assets.kampyle.com',
+'assets.kuhlmann-software.at',
+'assets.matchbin.com',
+'assets.olark.com',
+'assets.omniture.com',
+'assets.oomz.de',
+'assets.servedby-buysellads.com',
+'assets.tapad.com',
+'assistonglobal.com',
+'assoc-amazon.co.uk',
+'associatedcontent.112.2o7.net',
+'associateprograms.com',
+'associeta.com',
+'associmage.match.com',
+'associmg.com',
+'assonantsvqqxpr.download',
+'ast.adiquity.com',
+'astrocash.org',
+'astroportal.de.intellitxt.com',
+'astrsk.net',
+'asuum.com',
+'asv.nuggad.net',
+'asx13.com',
+'at.amgdgt.com',
+'at.atwola.com',
+'at.netster.com',
+'ata.ero-advertising.com',
+'atdmt.com',
+'atdmt.com.24287.9170.302br.net',
+'atdmt.com.24290.9170.302br.net',
+'atdmt.com.24293.9170.302br.net',
+'atdmt.com.24492.9179.302br.net',
+'atdmt.com.24498.9179.302br.net',
+'atdmt.com.27329.9201.302br.net',
+'atdmt.com.35014.9254.302br.net',
+'atdmt.com.35191.9254.302br.net',
+'atdmt.com.38007.9304.302br.net',
+'atdmt.com.38019.9304.302br.net',
+'atdmt.com.38025.9304.302br.net',
+'atdmt.com.38373.9304.302br.net',
+'atdmt.com.38376.9304.302br.net',
+'atdmt.com.38943.9304.302br.net',
+'atdmt.com.43345.9332.302br.net',
+'atdmt.com.43351.9332.302br.net',
+'atdmt.com.43357.9332.302br.net',
+'atdmt.com.46618.9304.302br.net',
+'atdmt.com.46624.9304.302br.net',
+'atdmt.com.46636.9304.302br.net',
+'atdmt.com.46663.9304.302br.net',
+'atdmt.com.47693.9304.302br.net',
+'atdmt.com.52905.9332.302br.net',
+'atdmt.com.55788.9391.302br.net',
+'atdmt.com.72669.9596.302br.net',
+'ate.spritmonitor.de',
+'atemda.com',
+'athanorjjvdyu.download',
+'atinternet.com',
+'atkeg.voluumtrk.com',
+'atkins.vo.llnwd.net',
+'atlas.astrology.com',
+'atlasdmt.com',
+'atmek.voluumtrk.com',
+'atmospherebfrufumzi.download',
+'atomicleads.go2cloud.org',
+'atrack.allposters.com',
+'atrack.art.com',
+'atropismlsuttxa.download',
+'atsfi.de',
+'attadworks.turn.com',
+'attrack.ientrynetwork.net',
+'attributiontrackingga.googlecode.com',
+'attservicesinc.tt.omtrdc.net',
+'au-cdn.effectivemeasure.net',
+'au-ssl.effectivemeasure.net',
+'au.2.cqcounter.com',
+'au.ads.link4ads.com',
+'au.adserver.yahoo.com',
+'au.effectivemeasure.net',
+'au.marketo.com',
+'au.ms.link4ads.com',
+'au.umeng.com',
+'au.www.sabela.com',
+'au.youmi.net',
+'auctionads.com',
+'auctionarysrnbyfiqd.download',
+'aud.pubmatic.com',
+'audi-club.ru',
+'audiag.112.2o7.net',
+'audience.powerlinks.com',
+'audience360.dpmsrv.com',
+'audio.digidip.net',
+'audio.iad.cimedia.net',
+'audiopal.com',
+'audit.303br.net',
+'audit.303br.net.73165.9465.302br.net',
+'audit.303br.net.73185.9381.302br.net',
+'audit.303br.net.73186.9602.302br.net',
+'audit.303br.net.76823.9517.302br.net',
+'audit.median.hu',
+'audit.webinform.hu',
+'audit1.median.hu',
+'audit2.median.hu',
+'audit3.median.hu',
+'auditonline.hu',
+'aufxbejwdnkn.download',
+'auihv.voluumtrk.com',
+'aulosyhydzitxb.download',
+'aureate.com',
+'aureolasfdoqu.download',
+'aurora.starpartner.com',
+'australiapost.122.2o7.net',
+'austria1.adverserve.net',
+'auth.livejasmin.com',
+'auth20120430.getjar.com',
+'auto-ping.com',
+'auto.ivwbox.de',
+'autobytel.112.2o7.net',
+'autocontext.begun.ru',
+'autoforumuniverse.us.intellitxt.com',
+'autohits.dk',
+'autolinkmaker.itunes.apple.com',
+'automaticsystem.com',
+'automrxowsdxm.download',
+'autopilothq.com',
+'autosurfpro.com',
+'autotrader-www.baynote.net',
+'autotrader.tt.omtrdc.net',
+'autoweb.112.2o7.net',
+'av.ageverify.co',
+'av.beap.bc.yahoo.com',
+'av7df.voluumtrk.com',
+'avads.co.uk',
+'avatar.truongton.net',
+'avatarcash.com',
+'avatarresources.com',
+'avatraffic.com',
+'avazudsp.net',
+'avazutracking.net',
+'avenuea.com',
+'avgtechnologies.112.2o7.net',
+'aviderlutcinvv.download',
+'avp.innity.com',
+'avres.net',
+'aw.masterstats.com',
+'awaps.yandex.ru',
+'award.sitekeuring.net',
+'awardspace.de.intellitxt.com',
+'awarez.net',
+'away.us.intellitxt.com',
+'aweber.com',
+'awempire.com',
+'awin1.com',
+'awjul1.radar11ab.co.uk',
+'awjul10.radar11ab.co.uk',
+'awjul11.radar11ab.co.uk',
+'awjul12.radar11ab.co.uk',
+'awjul13.radar11ab.co.uk',
+'awjul14.radar11ab.co.uk',
+'awjul15.radar11ab.co.uk',
+'awjul16.radar11ab.co.uk',
+'awjul17.radar11ab.co.uk',
+'awjul18.radar11ab.co.uk',
+'awjul19.radar11ab.co.uk',
+'awjul2.radar11ab.co.uk',
+'awjul20.radar11ab.co.uk',
+'awjul3.radar11ab.co.uk',
+'awjul4.radar11ab.co.uk',
+'awjul5.radar11ab.co.uk',
+'awjul6.radar11ab.co.uk',
+'awjul7.radar11ab.co.uk',
+'awjul8.radar11ab.co.uk',
+'awjul9.radar11ab.co.uk',
+'awos8.voluumtrk.com',
+'aws-ap-southeast-2a.bench.cedexis.com',
+'aws.tracker.squidanalytics.com',
+'ax10.a.cocolog-nifty.com',
+'axad.shinobi.jp',
+'axd.cpapush.com',
+'axeds.com',
+'axesiiyuqtfa.download',
+'axis7.go2cloud.org',
+'axislogger.appspot.com',
+'axldy.voluumtrk.com',
+'axonix.com',
+'axp.zedo.com',
+'axpraqxjdikes.review',
+'axtrhasenegas.review',
+'aydne.voluumtrk.com',
+'ayrqdtroglodyte.review',
+'ayuzu.voluumtrk.com',
+'ayx.soundharborredirect.com',
+'az413505.vo.msecnd.net',
+'az416426.vo.msecnd.net',
+'az598575.vo.msecnd.net',
+'az708531.vo.msecnd.net',
+'az7t8.com',
+'azads.net',
+'azalead.com',
+'aznmedia.go2cloud.org',
+'azubi.adition.com',
+'b-online.de',
+'b.admedia.com',
+'b.ads1.msn.com',
+'b.ads2.msads.net',
+'b.aklamio.com',
+'b.aol.com',
+'b.aol.de',
+'b.baidu.com',
+'b.bedop.com',
+'b.big7.com',
+'b.bm324.com',
+'b.c8.net.ua',
+'b.camplace.com',
+'b.casalemedia.com',
+'b.chartboost.com',
+'b.dlsite.net',
+'b.dpmsrv.com',
+'b.esecure-transaction.com',
+'b.hidemyass.com',
+'b.huffingtonpost.com',
+'b.huffingtonpost.de',
+'b.ifmnwi.club',
+'b.imonomy.com',
+'b.inbox.lv',
+'b.localpages.com',
+'b.netscape.com',
+'b.photobucket.com',
+'b.portalnet.cl',
+'b.positive-technology.co.uk',
+'b.rmgserving.com',
+'b.sc.omtrdc.net',
+'b.scorecardresearch.com',
+'b.sell.com',
+'b.sli-spark.com',
+'b.thanksearch.com',
+'b.the-nextlevel.com',
+'b.trackcdn.com',
+'b.turbo.az',
+'b.vghd.com',
+'b.vimeocdn.com',
+'b.voicefive.com',
+'b.xfreeservice.com',
+'b.zedo.com',
+'b.zeroredirect.com',
+'b.zeroredirect1.com',
+'b0bsi.voluumtrk.com',
+'b1.2cnt.net',
+'b1.boards2go.com',
+'b1060no8673u5l58vi150ofyri.hop.clickbank.net',
+'b12.myspace.com',
+'b12.sitemeter.com',
+'b17261b2b5010f3c6c93-d77e110c9a6908e75cd02fbd7eb24572.r86.cf2.rackcdn.com',
+'b1d6z.voluumtrk.com',
+'b2.boards2go.com',
+'b2.sitemeter.com',
+'b23.ru',
+'b243-4eb2-8667-4a30.reporo.net',
+'b2c-mlm.marketo.com',
+'b2fkj.voluumtrk.com',
+'b2wtd.voluumtrk.com',
+'b3-uk.mookie1.com',
+'b3-uk.mookie1.com.63430.9488.302br.net',
+'b3.mookie1.com',
+'b3.rivalgaming.com',
+'b3.toparcadehits.com',
+'b344-7507-e4c2-b742.reporo.net',
+'b365.2cnt.net',
+'b4.rivalgaming.com',
+'b4.toparcadehits.com',
+'b4.yahoo.co.jp',
+'b4psads.com',
+'b5wpo.voluumtrk.com',
+'b7.sitemeter.com',
+'b99217.r.axf8.net',
+'ba.ccm2.net',
+'ba.kioskea.net',
+'ba2b687.se',
+'ba42-c08c-2e10-c6e3.reporo.net',
+'ba965.voluumtrk.com',
+'babes.go2cloud.org',
+'babm.texthelp.com',
+'babs.tv2.dk',
+'babycentercom.112.2o7.net',
+'babylon.netseer.com',
+'baccajxzumht.download',
+'bacillemiaujtpcij.download',
+'baciotti.com',
+'backlink.dichthuat.org',
+'backoffice.adsender.us',
+'backtype.com',
+'backups.crittercism.com',
+'badge.stumbleupon.com',
+'badges.instagram.com',
+'badoink.com',
+'bafflesitfjtxan.download',
+'bahuvrihisjcdqhbfv.download',
+'bakler.net',
+'bal.ad.dotandad.com',
+'baleron.com',
+'bam-1.nr-data.net',
+'bam-2.nr-data.net',
+'bam-3.nr-data.net',
+'bam-4.nr-data.net',
+'bam-5.nr-data.net',
+'ban.krooncasino.com',
+'ban.promotools.biz',
+'ban3ers.ero-advertising.com',
+'ban4ers.ero-advertising.com',
+'bandpage.go2cloud.org',
+'banex.cz',
+'bangmedia.go2cloud.org',
+'bango.co.uk',
+'bango.com',
+'bango.info',
+'bango.net',
+'bangtuoc.vn',
+'banjers.ero-advertising.com',
+'bank-01.ads.mp.mydas.mobi',
+'bank-02.ads.mp.mydas.mobi',
+'bank-03.ads.mp.mydas.mobi',
+'bank-04.ads.mp.mydas.mobi',
+'bank-05.ads.mp.mydas.mobi',
+'bank-06.ads.mp.mydas.mobi',
+'bank-07.ads.mp.mydas.mobi',
+'bank-08.ads.mp.mydas.mobi',
+'bank-09.ads.mp.mydas.mobi',
+'bank-10.ads.mp.mydas.mobi',
+'bank-11.ads.mp.mydas.mobi',
+'bank-12.ads.mp.mydas.mobi',
+'bank-13.ads.mp.mydas.mobi',
+'bank-14.ads.mp.mydas.mobi',
+'bank-15.ads.mp.mydas.mobi',
+'bank-16.ads.mp.mydas.mobi',
+'bank-17.ads.mp.mydas.mobi',
+'bank-171.ads.mp.mydas.mobi',
+'bank-172.ads.mp.mydas.mobi',
+'bank-173.ads.mp.mydas.mobi',
+'bank-174.ads.mp.mydas.mobi',
+'bank-175.ads.mp.mydas.mobi',
+'bank-176.ads.mp.mydas.mobi',
+'bank-177.ads.mp.mydas.mobi',
+'bank-178.ads.mp.mydas.mobi',
+'bank-179.ads.mp.mydas.mobi',
+'bank-18.ads.mp.mydas.mobi',
+'bank-180.ads.mp.mydas.mobi',
+'bank-181.ads.mp.mydas.mobi',
+'bank-182.ads.mp.mydas.mobi',
+'bank-183.ads.mp.mydas.mobi',
+'bank-184.ads.mp.mydas.mobi',
+'bank-185.ads.mp.mydas.mobi',
+'bank-186.ads.mp.mydas.mobi',
+'bank-187.ads.mp.mydas.mobi',
+'bank-188.ads.mp.mydas.mobi',
+'bank-189.ads.mp.mydas.mobi',
+'bank-19.ads.mp.mydas.mobi',
+'bank-190.ads.mp.mydas.mobi',
+'bank-191.ads.mp.mydas.mobi',
+'bank-192.ads.mp.mydas.mobi',
+'bank-193.ads.mp.mydas.mobi',
+'bank-194.ads.mp.mydas.mobi',
+'bank-195.ads.mp.mydas.mobi',
+'bank-196.ads.mp.mydas.mobi',
+'bank-197.ads.mp.mydas.mobi',
+'bank-198.ads.mp.mydas.mobi',
+'bank-199.ads.mp.mydas.mobi',
+'bank-2.ads.mp.mydas.mobi',
+'bank-20.ads.mp.mydas.mobi',
+'bank-200.ads.mp.mydas.mobi',
+'bank-21.ads.mp.mydas.mobi',
+'bank-22.ads.mp.mydas.mobi',
+'bank-23.ads.mp.mydas.mobi',
+'bank-24.ads.mp.mydas.mobi',
+'bank-25.ads.mp.mydas.mobi',
+'bank-26.ads.mp.mydas.mobi',
+'bank-27.ads.mp.mydas.mobi',
+'bank-28.ads.mp.mydas.mobi',
+'bank-29.ads.mp.mydas.mobi',
+'bank-3.ads.mp.mydas.mobi',
+'bank-30.ads.mp.mydas.mobi',
+'bank-31.ads.mp.mydas.mobi',
+'bank-32.ads.mp.mydas.mobi',
+'bank-33.ads.mp.mydas.mobi',
+'bank-34.ads.mp.mydas.mobi',
+'bank-35.ads.mp.mydas.mobi',
+'bank-36.ads.mp.mydas.mobi',
+'bank-37.ads.mp.mydas.mobi',
+'bank-38.ads.mp.mydas.mobi',
+'bank-39.ads.mp.mydas.mobi',
+'bank-4.ads.mp.mydas.mobi',
+'bank-40.ads.mp.mydas.mobi',
+'bank-41.ads.mp.mydas.mobi',
+'bank-42.ads.mp.mydas.mobi',
+'bank-43.ads.mp.mydas.mobi',
+'bank-44.ads.mp.mydas.mobi',
+'bank-45.ads.mp.mydas.mobi',
+'bank-46.ads.mp.mydas.mobi',
+'bank-47.ads.mp.mydas.mobi',
+'bank-48.ads.mp.mydas.mobi',
+'bank-49.ads.mp.mydas.mobi',
+'bank-5.ads.mp.mydas.mobi',
+'bank-50.ads.mp.mydas.mobi',
+'bank-51.ads.mp.mydas.mobi',
+'bank-52.ads.mp.mydas.mobi',
+'bank-53.ads.mp.mydas.mobi',
+'bank-54.ads.mp.mydas.mobi',
+'bank-55.ads.mp.mydas.mobi',
+'bank-56.ads.mp.mydas.mobi',
+'bank-57.ads.mp.mydas.mobi',
+'bank-58.ads.mp.mydas.mobi',
+'bank-59.ads.mp.mydas.mobi',
+'bank-6.ads.mp.mydas.mobi',
+'bank-60.ads.mp.mydas.mobi',
+'bank-61.ads.mp.mydas.mobi',
+'bank-62.ads.mp.mydas.mobi',
+'bank-63.ads.mp.mydas.mobi',
+'bank-64.ads.mp.mydas.mobi',
+'bank-65.ads.mp.mydas.mobi',
+'bank-66.ads.mp.mydas.mobi',
+'bank-67.ads.mp.mydas.mobi',
+'bank-68.ads.mp.mydas.mobi',
+'bank-69.ads.mp.mydas.mobi',
+'bank-7.ads.mp.mydas.mobi',
+'bank-70.ads.mp.mydas.mobi',
+'bank-71.ads.mp.mydas.mobi',
+'bank-72.ads.mp.mydas.mobi',
+'bank-73.ads.mp.mydas.mobi',
+'bank-74.ads.mp.mydas.mobi',
+'bank-75.ads.mp.mydas.mobi',
+'bank-76.ads.mp.mydas.mobi',
+'bank-77.ads.mp.mydas.mobi',
+'bank-78.ads.mp.mydas.mobi',
+'bank-79.ads.mp.mydas.mobi',
+'bank-8.ads.mp.mydas.mobi',
+'bank-80.ads.mp.mydas.mobi',
+'bank-81.ads.mp.mydas.mobi',
+'bank-82.ads.mp.mydas.mobi',
+'bank-83.ads.mp.mydas.mobi',
+'bank-84.ads.mp.mydas.mobi',
+'bank-85.ads.mp.mydas.mobi',
+'bank-86.ads.mp.mydas.mobi',
+'bank-87.ads.mp.mydas.mobi',
+'bank-88.ads.mp.mydas.mobi',
+'bank-89.ads.mp.mydas.mobi',
+'bank-9.ads.mp.mydas.mobi',
+'bank-90.ads.mp.mydas.mobi',
+'bank-91.ads.mp.mydas.mobi',
+'bank-92.ads.mp.mydas.mobi',
+'bank-93.ads.mp.mydas.mobi',
+'bank-94.ads.mp.mydas.mobi',
+'bank-95.ads.mp.mydas.mobi',
+'bank-96.ads.mp.mydas.mobi',
+'bank-97.ads.mp.mydas.mobi',
+'bank-98.ads.mp.mydas.mobi',
+'bank-99.ads.mp.mydas.mobi',
+'bank01.clicks.mp.mydas.mobi',
+'bank01.mi.ads.mp.mydas.mobi',
+'bank01.mi.clicks.mp.mydas.mobi',
+'bank02.clicks.mp.mydas.mobi',
+'bank02.mi.ads.mp.mydas.mobi',
+'bank03.clicks.mp.mydas.mobi',
+'bank03.mi.ads.mp.mydas.mobi',
+'bank03.mi.clicks.mp.mydas.mobi',
+'bank04.clicks.mp.mydas.mobi',
+'bank04.mi.ads.mp.mydas.mobi',
+'bank05.clicks.mp.mydas.mobi',
+'bank05.mi.ads.mp.mydas.mobi',
+'bank06.clicks.mp.mydas.mobi',
+'bank06.mi.ads.mp.mydas.mobi',
+'bank07.clicks.mp.mydas.mobi',
+'bank07.mi.ads.mp.mydas.mobi',
+'bank08.clicks.mp.mydas.mobi',
+'bank08.mi.ads.mp.mydas.mobi',
+'bank09.clicks.mp.mydas.mobi',
+'bank09.mi.ads.mp.mydas.mobi',
+'bank1.clicks.mp.mydas.mobi',
+'bank10.clicks.mp.mydas.mobi',
+'bank10.mi.ads.mp.mydas.mobi',
+'bank11.clicks.mp.mydas.mobi',
+'bank11.mi.ads.mp.mydas.mobi',
+'bank12.clicks.mp.mydas.mobi',
+'bank12.mi.ads.mp.mydas.mobi',
+'bank13.clicks.mp.mydas.mobi',
+'bank13.mi.ads.mp.mydas.mobi',
+'bank14.clicks.mp.mydas.mobi',
+'bank14.mi.ads.mp.mydas.mobi',
+'bank15.ads.dt.mydas.mobi',
+'bank15.clicks.mp.mydas.mobi',
+'bank15.mi.ads.mp.mydas.mobi',
+'bank15.mi.clicks.mp.mydas.mobi',
+'bank16.clicks.mp.mydas.mobi',
+'bank16.mi.ads.mp.mydas.mobi',
+'bank17.clicks.mp.mydas.mobi',
+'bank17.mi.ads.mp.mydas.mobi',
+'bank18.clicks.mp.mydas.mobi',
+'bank18.mi.ads.mp.mydas.mobi',
+'bank19.clicks.mp.mydas.mobi',
+'bank19.mi.ads.mp.mydas.mobi',
+'bank20.clicks.mp.mydas.mobi',
+'bank20.mi.ads.mp.mydas.mobi',
+'bank21.clicks.mp.mydas.mobi',
+'bank21.mi.ads.mp.mydas.mobi',
+'bank22.clicks.mp.mydas.mobi',
+'bank22.mi.ads.mp.mydas.mobi',
+'bank23.clicks.mp.mydas.mobi',
+'bank23.mi.ads.mp.mydas.mobi',
+'bank24.clicks.mp.mydas.mobi',
+'bank24.mi.ads.mp.mydas.mobi',
+'bank25.clicks.mp.mydas.mobi',
+'bank25.mi.ads.mp.mydas.mobi',
+'bank26.clicks.mp.mydas.mobi',
+'bank26.mi.ads.mp.mydas.mobi',
+'bank27.clicks.mp.mydas.mobi',
+'bank27.mi.ads.mp.mydas.mobi',
+'bank28.clicks.mp.mydas.mobi',
+'bank28.mi.ads.mp.mydas.mobi',
+'bank29.clicks.mp.mydas.mobi',
+'bank29.mi.ads.mp.mydas.mobi',
+'bank30.clicks.mp.mydas.mobi',
+'bank30.mi.ads.mp.mydas.mobi',
+'bank31.clicks.mp.mydas.mobi',
+'bank31.mi.ads.mp.mydas.mobi',
+'bank32.clicks.mp.mydas.mobi',
+'bank32.mi.ads.mp.mydas.mobi',
+'bank33.clicks.mp.mydas.mobi',
+'bank33.mi.ads.mp.mydas.mobi',
+'bank34.mi.ads.mp.mydas.mobi',
+'bank35.clicks.mp.mydas.mobi',
+'bank35.mi.ads.mp.mydas.mobi',
+'bank36.clicks.mp.mydas.mobi',
+'bank36.mi.ads.mp.mydas.mobi',
+'bank37.ads.mp.mydas.mobi',
+'bank37.clicks.mp.mydas.mobi',
+'bank37.mi.ads.mp.mydas.mobi',
+'bank38.clicks.mp.mydas.mobi',
+'bank38.mi.ads.mp.mydas.mobi',
+'bank39.clicks.mp.mydas.mobi',
+'bank39.mi.ads.mp.mydas.mobi',
+'bank40.clicks.mp.mydas.mobi',
+'bank40.mi.ads.mp.mydas.mobi',
+'bank41.clicks.mp.mydas.mobi',
+'bank41.mi.ads.mp.mydas.mobi',
+'bank42.clicks.mp.mydas.mobi',
+'bank42.mi.ads.mp.mydas.mobi',
+'bank43.ads.mp.mydas.mobi',
+'bank43.clicks.mp.mydas.mobi',
+'bank43.mi.ads.mp.mydas.mobi',
+'bank44.ads.mp.mydas.mobi',
+'bank44.clicks.mp.mydas.mobi',
+'bank44.mi.ads.mp.mydas.mobi',
+'bank45.mi.ads.mp.mydas.mobi',
+'bank46.mi.ads.mp.mydas.mobi',
+'bank47.mi.ads.mp.mydas.mobi',
+'bank48.mi.ads.mp.mydas.mobi',
+'bank49.mi.ads.mp.mydas.mobi',
+'bank50.mi.ads.mp.mydas.mobi',
+'bank51.mi.ads.mp.mydas.mobi',
+'bank52.mi.ads.mp.mydas.mobi',
+'bank53.mi.ads.mp.mydas.mobi',
+'bank54.mi.ads.mp.mydas.mobi',
+'bank55.mi.ads.mp.mydas.mobi',
+'bank56.mi.ads.mp.mydas.mobi',
+'bank57.mi.ads.mp.mydas.mobi',
+'bank58.mi.ads.mp.mydas.mobi',
+'bank59.mi.ads.mp.mydas.mobi',
+'bank60.mi.ads.mp.mydas.mobi',
+'bank61.mi.ads.mp.mydas.mobi',
+'bank62.mi.ads.mp.mydas.mobi',
+'bank63.mi.ads.mp.mydas.mobi',
+'bank64.mi.ads.mp.mydas.mobi',
+'bank65.mi.ads.mp.mydas.mobi',
+'bank66.mi.ads.mp.mydas.mobi',
+'bank67.mi.ads.mp.mydas.mobi',
+'bank68.mi.ads.mp.mydas.mobi',
+'bank69.mi.ads.mp.mydas.mobi',
+'bank70.mi.ads.mp.mydas.mobi',
+'bank71.mi.ads.mp.mydas.mobi',
+'bank72.mi.ads.mp.mydas.mobi',
+'bank73.mi.ads.mp.mydas.mobi',
+'bank74.mi.ads.mp.mydas.mobi',
+'bank75.mi.ads.mp.mydas.mobi',
+'bank76.mi.ads.mp.mydas.mobi',
+'bank77.mi.ads.mp.mydas.mobi',
+'bank78.mi.ads.mp.mydas.mobi',
+'bank79.mi.ads.mp.mydas.mobi',
+'bank80.mi.ads.mp.mydas.mobi',
+'bank81.mi.ads.mp.mydas.mobi',
+'bank82.mi.ads.mp.mydas.mobi',
+'bank83.mi.ads.mp.mydas.mobi',
+'bank84.mi.ads.mp.mydas.mobi',
+'bank85.mi.ads.mp.mydas.mobi',
+'bank86.mi.ads.mp.mydas.mobi',
+'bank87.mi.ads.mp.mydas.mobi',
+'bank88.mi.ads.mp.mydas.mobi',
+'bank89.mi.ads.mp.mydas.mobi',
+'bank90.mi.ads.mp.mydas.mobi',
+'bank91.mi.ads.mp.mydas.mobi',
+'bank92.mi.ads.mp.mydas.mobi',
+'bank93.mi.ads.mp.mydas.mobi',
+'bank94.mi.ads.mp.mydas.mobi',
+'bank95.mi.ads.mp.mydas.mobi',
+'bank96.mi.ads.mp.mydas.mobi',
+'bank97.mi.ads.mp.mydas.mobi',
+'bank98.mi.ads.mp.mydas.mobi',
+'bank99.mi.ads.mp.mydas.mobi',
+'bankads.com',
+'bankdata.112.207.net',
+'bankiru.go2cloud.org',
+'bankofamerica.tt.omtrdc.net',
+'banman.isoftmarketing.com',
+'bann12s.ero-advertising.com',
+'bann13s.ero-advertising.com',
+'bann14s.ero-advertising.com',
+'bann1rs.ero-advertising.com',
+'banne2s.ero-advertising.com',
+'banne3s.ero-advertising.com',
+'banne4s.ero-advertising.com',
+'banner-exchange.nl',
+'banner.0catch.com',
+'banner.101xp.com',
+'banner.50megs.com',
+'banner.69stream.com',
+'banner.ad.nu',
+'banner.adlive.de',
+'banner.ajax.ancestry.co.uk',
+'banner.ajax.ancestry.com',
+'banner.auction.co.kr',
+'banner.avp2000.com',
+'banner.blogranking.net',
+'banner.bpaserver.net',
+'banner.buempliz-online.ch',
+'banner.cashinpills.com',
+'banner.casino.net',
+'banner.casino.paddypower.com',
+'banner.casinodelrio.com',
+'banner.casinoking.com',
+'banner.casinolasvegas.com',
+'banner.casinotropez.com',
+'banner.cdpoker.com',
+'banner.celebrity-fakes.net',
+'banner.cityclubcasino.com',
+'banner.click-tt.de',
+'banner.clickme.com.br',
+'banner.clubdicecasino.com',
+'banner.com',
+'banner.commissionpartner.com',
+'banner.congstar.de',
+'banner.coral.co.uk',
+'banner.coza.com',
+'banner.cz',
+'banner.dabi.ir',
+'banner.dafasportbook.com',
+'banner.date.com',
+'banner.de',
+'banner.dhg-marketing.de',
+'banner.dk',
+'banner.e2ads.com',
+'banner.easyspace.com',
+'banner.elisa.fi',
+'banner.elisa.net',
+'banner.eresmas.com',
+'banner.ero-advertising.com',
+'banner.euroads.no',
+'banner.eurogrand.com',
+'banner.europacasino.com',
+'banner.everestpoker.com',
+'banner.fairpoker.com',
+'banner.fotor.com',
+'banner.freeservers.com',
+'banner.freeservers.net',
+'banner.galabingo.com',
+'banner.galacasino.com',
+'banner.gasuki.com',
+'banner.goldenpalace.com',
+'banner.grupos.com.br',
+'banner.hosteurope.de',
+'banner.i-3.de',
+'banner.img.co.za',
+'banner.immowelt.de',
+'banner.indiocasino.com',
+'banner.intermega.com.br',
+'banner.inyourpocket.com',
+'banner.itweb.co.za',
+'banner.kiev.ua',
+'banner.lasvegasusacasino.com',
+'banner.linkexchange.com',
+'banner.linkexchange.net',
+'banner.linksynergy.com',
+'banner.linktech.cn',
+'banner.linux.se',
+'banner.listinus.de',
+'banner.love104.com',
+'banner.magicboxcasino.com',
+'banner.maido3.com',
+'banner.mansioncasino.com',
+'banner.maxximum.org',
+'banner.media-system.de',
+'banner.mindshare.de',
+'banner.missbingo.com',
+'banner.missingkids.com',
+'banner.nasty-cam.de',
+'banner.net',
+'banner.nixnet.cz',
+'banner.nonstoppartner.net',
+'banner.northsky.com',
+'banner.nttnavi.co.jp',
+'banner.oddcast.com',
+'banner.ool.ua',
+'banner.orizzontescuola.it',
+'banner.paodeacucar.com.br',
+'banner.penguin.cz',
+'banner.pethobbyist.com',
+'banner.poker.williamhill.com',
+'banner.poker770.com',
+'banner.relcom.ru',
+'banner.scasino.com',
+'banner.sealmedia.de',
+'banner.sunpalacecasino.com',
+'banner.surfree.com',
+'banner.svitonline.com',
+'banner.tanto.de',
+'banner.technorail.com',
+'banner.testberichte.de',
+'banner.themediaplanets.com',
+'banner.titanpoker.com',
+'banner.tripple.at',
+'banner.truehits.net',
+'banner.upjers.com',
+'banner.vbonline.com',
+'banner1.50megs.com',
+'banner2.casino.com',
+'banner2tausch.de',
+'banner3.a411.com',
+'bannera.kingsoft-office-service.com',
+'bannerads.communitech.net',
+'bannerads.de',
+'bannerads.nl',
+'banneradvertising.adclickmedia.com',
+'bannerbank.com',
+'bannerbank.de',
+'bannerbank.ru',
+'bannercampaign.com',
+'bannercash.com.cz',
+'bannercash.de',
+'bannercast.com',
+'bannercenter.net',
+'bannerco-op.com',
+'bannercommunity.de',
+'bannerconnect.net',
+'bannerdoctors.com',
+'bannerexchange.cjb.net',
+'bannerexchange.com',
+'bannerexchange.klikklik.nl',
+'bannerexchange.mycomputer.com',
+'bannerfarm.ace.advertising.com',
+'bannerforge.com',
+'bannerignition.co.za',
+'bannerimage.com',
+'bannerimages.0catch.com',
+'bannerlandia.com',
+'bannerlandia.com.ar',
+'bannermall.com',
+'bannermarkt.nl',
+'bannermat.com',
+'bannermedia.com',
+'bannermill.com',
+'bannerpoint.ru',
+'bannerpower.com',
+'bannerpro.tk',
+'bannerpromotion.it',
+'banners.4d5.net',
+'banners.500euro.net',
+'banners.adgoto.com',
+'banners.adultfriendfinder.com',
+'banners.advancewebhosting.com',
+'banners.adzones.com',
+'banners.affiliatefuel.com',
+'banners.affiliatefuture.com',
+'banners.aftrk.com',
+'banners.alt.com',
+'banners.amigos.com',
+'banners.anunciweb.pt',
+'banners.aris.ge',
+'banners.asiafriendfinder.com',
+'banners.askmecca.com',
+'banners.babetimes.com',
+'banners.babylon-x.com',
+'banners.babylonbucks.com',
+'banners.bebadasousadas.com',
+'banners.beevpn.com',
+'banners.bigmobileads.com',
+'banners.bizportal.co.il',
+'banners.blacksexmatch.com',
+'banners.bol.com.br',
+'banners.bombich.com',
+'banners.buscarsexo.com',
+'banners.cams.com',
+'banners.cashring.com',
+'banners.chare.ir',
+'banners.chicashumedas.com',
+'banners.citygridmedia.com',
+'banners.cj.com',
+'banners.classmates.com',
+'banners.clickthrucash.com',
+'banners.clubseventeen.com',
+'banners.clubworldgroup.com',
+'banners.colegialasdesvirgadas.com',
+'banners.com',
+'banners.contentfeed.net',
+'banners.copyscape.com',
+'banners.crack.ru',
+'banners.czi.cz',
+'banners.deseoasiatico.com',
+'banners.directnic.com',
+'banners.dogfart.com',
+'banners.dollarmachine.com',
+'banners.dot.tk',
+'banners.e-dologic.co.il',
+'banners.easydns.com',
+'banners.easydns.nl',
+'banners.emol.com',
+'banners.empoweredcomms.com.au',
+'banners.ero-advertising.com',
+'banners.eroadvertising.com',
+'banners.espiasadictos.com',
+'banners.fastcupid.com',
+'banners.flingguru.com',
+'banners.freett.com',
+'banners.friendfinder.com',
+'banners.friendpages.com',
+'banners.fuckcuck.com',
+'banners.galiciae.com',
+'banners.getiton.com',
+'banners.guns.ru',
+'banners.hpg.com.br',
+'banners.images.streamray.com',
+'banners.img.uol.com.br',
+'banners.impactfive.com',
+'banners.ims.nl',
+'banners.inetfast.com',
+'banners.intergal.com',
+'banners.internetextra.com',
+'banners.interq.or.jp',
+'banners.iop.org',
+'banners.iq.pl',
+'banners.isoftmarketing.com',
+'banners.itweb.co.za',
+'banners.ix.se',
+'banners.jobwinner.ch',
+'banners.kappa.ro',
+'banners.knollenstein.com',
+'banners.ksl.com',
+'banners.largecash.com',
+'banners.leadingedgecash.com',
+'banners.ligbr.com.br',
+'banners.linkbuddies.com',
+'banners.lovercloud.com',
+'banners.moreniche.com',
+'banners.moviegoods.com',
+'banners.mydailydigest.com',
+'banners.nbcupromotes.com',
+'banners.news1.co.il',
+'banners.no1free.com',
+'banners.nostringsattached.com',
+'banners.outster.com',
+'banners.oversexe.com',
+'banners.passion.com',
+'banners.passiondollars.com',
+'banners.pickupcloud.com',
+'banners.playocio.com',
+'banners.resultonline.com',
+'banners.searchingbooth.com',
+'banners.sexsearch.com',
+'banners.sextracker.be',
+'banners.sextracker.com',
+'banners.sextracker.de',
+'banners.sexypartners.net',
+'banners.showdeinfieis.com',
+'banners.smarttweak.com',
+'banners.spread4u.com',
+'banners.tibiabr.com',
+'banners.toteme.com',
+'banners.totesport.com',
+'banners.truecash.com',
+'banners.twibbers.com',
+'banners.unibet.be',
+'banners.unibet.co.uk',
+'banners.unibet.de',
+'banners.unibet.dk',
+'banners.unibet.it',
+'banners.valuead.com',
+'banners.victor.com',
+'banners.vivilatina.com',
+'banners.voyeurweb.com',
+'banners.webmasterplan.com',
+'banners.winfire.com',
+'banners.wlservices.fr',
+'banners.xmatch.com',
+'banners.xxxwebhosting.com',
+'banners.yatrainc.com',
+'banners.zhurnal.ru',
+'banners0.hpg.com.br',
+'banners00.hpg.com.br',
+'banners01.hpg.com.br',
+'banners03.hpg.com.br',
+'banners04.hpg.com.br',
+'banners05.hpg.com.br',
+'banners06.hpg.com.br',
+'banners07.hpg.com.br',
+'banners08.hpg.com.br',
+'banners09.hpg.com.br',
+'banners1.ero-advertising.com',
+'banners1.hpg.com.br',
+'banners10.hpg.com.br',
+'banners100.hpg.com.br',
+'banners101.hpg.com.br',
+'banners102.hpg.com.br',
+'banners103.hpg.com.br',
+'banners104.hpg.com.br',
+'banners105.hpg.com.br',
+'banners106.hpg.com.br',
+'banners107.hpg.com.br',
+'banners108.hpg.com.br',
+'banners109.hpg.com.br',
+'banners11.hpg.com.br',
+'banners110.hpg.com.br',
+'banners111.hpg.com.br',
+'banners112.hpg.com.br',
+'banners113.hpg.com.br',
+'banners114.hpg.com.br',
+'banners115.hpg.com.br',
+'banners116.hpg.com.br',
+'banners117.hpg.com.br',
+'banners118.hpg.com.br',
+'banners119.hpg.com.br',
+'banners12.hpg.com.br',
+'banners120.hpg.com.br',
+'banners121.hpg.com.br',
+'banners122.hpg.com.br',
+'banners123.hpg.com.br',
+'banners124.hpg.com.br',
+'banners125.hpg.com.br',
+'banners126.hpg.com.br',
+'banners127.hpg.com.br',
+'banners128.hpg.com.br',
+'banners129.hpg.com.br',
+'banners13.hpg.com.br',
+'banners130.hpg.com.br',
+'banners131.hpg.com.br',
+'banners132.hpg.com.br',
+'banners133.hpg.com.br',
+'banners134.hpg.com.br',
+'banners135.hpg.com.br',
+'banners136.hpg.com.br',
+'banners137.hpg.com.br',
+'banners138.hpg.com.br',
+'banners139.hpg.com.br',
+'banners14.hpg.com.br',
+'banners140.hpg.com.br',
+'banners141.hpg.com.br',
+'banners142.hpg.com.br',
+'banners143.hpg.com.br',
+'banners144.hpg.com.br',
+'banners145.hpg.com.br',
+'banners146.hpg.com.br',
+'banners147.hpg.com.br',
+'banners148.hpg.com.br',
+'banners149.hpg.com.br',
+'banners15.hpg.com.br',
+'banners150.hpg.com.br',
+'banners151.hpg.com.br',
+'banners152.hpg.com.br',
+'banners153.hpg.com.br',
+'banners154.hpg.com.br',
+'banners155.hpg.com.br',
+'banners156.hpg.com.br',
+'banners157.hpg.com.br',
+'banners158.hpg.com.br',
+'banners159.hpg.com.br',
+'banners16.hpg.com.br',
+'banners160.hpg.com.br',
+'banners161.hpg.com.br',
+'banners162.hpg.com.br',
+'banners163.hpg.com.br',
+'banners164.hpg.com.br',
+'banners165.hpg.com.br',
+'banners166.hpg.com.br',
+'banners167.hpg.com.br',
+'banners168.hpg.com.br',
+'banners169.hpg.com.br',
+'banners17.hpg.com.br',
+'banners170.hpg.com.br',
+'banners171.hpg.com.br',
+'banners172.hpg.com.br',
+'banners173.hpg.com.br',
+'banners174.hpg.com.br',
+'banners175.hpg.com.br',
+'banners176.hpg.com.br',
+'banners177.hpg.com.br',
+'banners178.hpg.com.br',
+'banners179.hpg.com.br',
+'banners18.hpg.com.br',
+'banners180.hpg.com.br',
+'banners181.hpg.com.br',
+'banners182.hpg.com.br',
+'banners183.hpg.com.br',
+'banners184.hpg.com.br',
+'banners185.hpg.com.br',
+'banners186.hpg.com.br',
+'banners187.hpg.com.br',
+'banners188.hpg.com.br',
+'banners189.hpg.com.br',
+'banners19.hpg.com.br',
+'banners190.hpg.com.br',
+'banners191.hpg.com.br',
+'banners192.hpg.com.br',
+'banners193.hpg.com.br',
+'banners194.hpg.com.br',
+'banners195.hpg.com.br',
+'banners196.hpg.com.br',
+'banners197.hpg.com.br',
+'banners198.hpg.com.br',
+'banners199.hpg.com.br',
+'banners2.ero-advertising.com',
+'banners2.hpg.com.br',
+'banners20.hpg.com.br',
+'banners200.hpg.com.br',
+'banners201.hpg.com.br',
+'banners202.hpg.com.br',
+'banners203.hpg.com.br',
+'banners204.hpg.com.br',
+'banners205.hpg.com.br',
+'banners206.hpg.com.br',
+'banners207.hpg.com.br',
+'banners208.hpg.com.br',
+'banners209.hpg.com.br',
+'banners21.hpg.com.br',
+'banners210.hpg.com.br',
+'banners211.hpg.com.br',
+'banners212.hpg.com.br',
+'banners213.hpg.com.br',
+'banners214.hpg.com.br',
+'banners215.hpg.com.br',
+'banners216.hpg.com.br',
+'banners217.hpg.com.br',
+'banners218.hpg.com.br',
+'banners219.hpg.com.br',
+'banners22.hpg.com.br',
+'banners220.hpg.com.br',
+'banners221.hpg.com.br',
+'banners222.hpg.com.br',
+'banners223.hpg.com.br',
+'banners224.hpg.com.br',
+'banners225.hpg.com.br',
+'banners226.hpg.com.br',
+'banners227.hpg.com.br',
+'banners228.hpg.com.br',
+'banners229.hpg.com.br',
+'banners23.hpg.com.br',
+'banners230.hpg.com.br',
+'banners231.hpg.com.br',
+'banners232.hpg.com.br',
+'banners233.hpg.com.br',
+'banners234.hpg.com.br',
+'banners235.hpg.com.br',
+'banners236.hpg.com.br',
+'banners237.hpg.com.br',
+'banners238.hpg.com.br',
+'banners239.hpg.com.br',
+'banners24.hpg.com.br',
+'banners240.hpg.com.br',
+'banners241.hpg.com.br',
+'banners242.hpg.com.br',
+'banners243.hpg.com.br',
+'banners244.hpg.com.br',
+'banners245.hpg.com.br',
+'banners246.hpg.com.br',
+'banners247.hpg.com.br',
+'banners248.hpg.com.br',
+'banners249.hpg.com.br',
+'banners25.hpg.com.br',
+'banners250.hpg.com.br',
+'banners251.hpg.com.br',
+'banners252.hpg.com.br',
+'banners253.hpg.com.br',
+'banners254.hpg.com.br',
+'banners255.hpg.com.br',
+'banners26.hpg.com.br',
+'banners27.hpg.com.br',
+'banners28.hpg.com.br',
+'banners29.hpg.com.br',
+'banners3.hpg.com.br',
+'banners30.hpg.com.br',
+'banners31.hpg.com.br',
+'banners32.hpg.com.br',
+'banners33.hpg.com.br',
+'banners34.hpg.com.br',
+'banners35.hpg.com.br',
+'banners36.hpg.com.br',
+'banners37.hpg.com.br',
+'banners38.hpg.com.br',
+'banners39.hpg.com.br',
+'banners4.hpg.com.br',
+'banners40.hpg.com.br',
+'banners41.hpg.com.br',
+'banners42.hpg.com.br',
+'banners43.hpg.com.br',
+'banners44.hpg.com.br',
+'banners45.hpg.com.br',
+'banners46.hpg.com.br',
+'banners47.hpg.com.br',
+'banners48.hpg.com.br',
+'banners49.hpg.com.br',
+'banners5.hpg.com.br',
+'banners50.hpg.com.br',
+'banners51.hpg.com.br',
+'banners52.hpg.com.br',
+'banners53.hpg.com.br',
+'banners54.hpg.com.br',
+'banners55.hpg.com.br',
+'banners56.hpg.com.br',
+'banners57.hpg.com.br',
+'banners58.hpg.com.br',
+'banners59.hpg.com.br',
+'banners6.hpg.com.br',
+'banners60.hpg.com.br',
+'banners61.hpg.com.br',
+'banners62.hpg.com.br',
+'banners63.hpg.com.br',
+'banners64.hpg.com.br',
+'banners65.hpg.com.br',
+'banners66.hpg.com.br',
+'banners67.hpg.com.br',
+'banners68.hpg.com.br',
+'banners69.hpg.com.br',
+'banners7.hpg.com.br',
+'banners70.hpg.com.br',
+'banners71.hpg.com.br',
+'banners72.hpg.com.br',
+'banners73.hpg.com.br',
+'banners74.hpg.com.br',
+'banners75.hpg.com.br',
+'banners76.hpg.com.br',
+'banners77.hpg.com.br',
+'banners78.hpg.com.br',
+'banners79.hpg.com.br',
+'banners8.hpg.com.br',
+'banners80.hpg.com.br',
+'banners81.hpg.com.br',
+'banners82.hpg.com.br',
+'banners83.hpg.com.br',
+'banners84.hpg.com.br',
+'banners85.hpg.com.br',
+'banners86.hpg.com.br',
+'banners87.hpg.com.br',
+'banners88.hpg.com.br',
+'banners89.hpg.com.br',
+'banners9.hpg.com.br',
+'banners90.hpg.com.br',
+'banners91.hpg.com.br',
+'banners92.hpg.com.br',
+'banners93.hpg.com.br',
+'banners94.hpg.com.br',
+'banners95.hpg.com.br',
+'banners96.hpg.com.br',
+'banners97.hpg.com.br',
+'banners98.hpg.com.br',
+'banners99.hpg.com.br',
+'bannerselect.com',
+'bannerserver.com',
+'bannersgomlm.buildreferrals.com',
+'bannersgomlm.com',
+'bannersng.yell.com',
+'bannersolutions.com',
+'bannersolutions.de',
+'bannerspace.com',
+'bannersponsor.com',
+'bannerswap.com',
+'bannersworld.com',
+'bannervip.web1000.com',
+'bannervip.webjump.com',
+'bannerware.com',
+'bannerweb.com',
+'bannerwebservice.zvz.co.il',
+'bannevs.ero-advertising.com',
+'bans.bride.ru',
+'bansrv1.n1media.com',
+'bar.hit-counter.udub.com',
+'bar.piano-media.com',
+'barb-rsync.2cnt.net',
+'barb-sftp.2cnt.net',
+'barb-test.2cnt.net',
+'barb.2cnt.net',
+'barbpool01.2cnt.net',
+'barbpool02.2cnt.net',
+'barbpool03.2cnt.net',
+'barbpool04.2cnt.net',
+'barbpool05.2cnt.net',
+'barbpool06.2cnt.net',
+'barbpool07.2cnt.net',
+'barbpool08.2cnt.net',
+'barbregister.2cnt.net',
+'barbvm.2cnt.net',
+'bardzomedia.com',
+'bargainingayzgdp.download',
+'bargainpda.us.intellitxt.com',
+'bariebenefit.com',
+'barium.cheezdev.com',
+'barnyardszjvrvndj.download',
+'barrelfulstwhxuuum.download',
+'barruletoleehtcz.download',
+'bastardlystydflko.download',
+'bastionedqpaugac.download',
+'bat.adforum.com',
+'bat.bing.com',
+'bat.r.msn.com',
+'bathyliticlkjwh.download',
+'bavners2.ero-advertising.com',
+'baypops.com',
+'bazingandroid.com',
+'bb.connextra.com',
+'bbb7-bfec-9a0b-58ba.reporo.net',
+'bbca.channelfinder.net',
+'bbcandroid.2cnt.net',
+'bbcandroidtest.2cnt.net',
+'bbcdotcom.2cnt.net',
+'bbcdotcomtest.2cnt.net',
+'bbcios.2cnt.net',
+'bbciostest.2cnt.net',
+'bbcnewscouk.112.2o7.net',
+'bbf7n.voluumtrk.com',
+'bbn.img.com.ua',
+'bbp.brazzers.com',
+'bbpntg3.homestead.com',
+'bbs.duba.net',
+'bbvj6.voluumtrk.com',
+'bc2.fivecdm.com',
+'bc84-88b8-96b7-6515.reporo.net',
+'bcanalytics.bigcommerce.com',
+'bcast.pw',
+'bcfads.com',
+'bcmediagroup.com',
+'bcnmonetize.go2affise.com',
+'bcp.crwdcntrl.net',
+'bcsrciccspermatic.review',
+'bd.moatads.com',
+'bdbaffiliates.go2cloud.org',
+'bddff.voluumtrk.com',
+'bdex.com',
+'bdv.bidvertiser.com',
+'be.mobsweet.com',
+'be.nedstat.net',
+'be.sitestat.com',
+'be2be2nz.122.2o7.net',
+'bea4.v.fwmrm.net',
+'beacon-1.newrelic.com',
+'beacon-2.newrelic.com',
+'beacon-3.newrelic.com',
+'beacon-5.newrelic.com',
+'beacon-6.newrelic.com',
+'beacon.archonia.com',
+'beacon.clickequations.net',
+'beacon.decryptresearch.co.uk',
+'beacon.errorception.com',
+'beacon.flipboard.com',
+'beacon.guim.co.uk',
+'beacon.indieclick.com',
+'beacon.indieclicktv.com',
+'beacon.kmi-us.com',
+'beacon.krxd.net',
+'beacon.lycos.com',
+'beacon.mtgx.tv',
+'beacon.nuskin.com',
+'beacon.richrelevance.com',
+'beacon.rubiconproject.com',
+'beacon.schneidercorp.com',
+'beacon.securestudies.com',
+'beacon.shazam.com',
+'beacon.sina.com.cn',
+'beacon.sinauda.com',
+'beacon.stage.walmart.com',
+'beacon.wikia-services.com',
+'beacon2.indieclick.com',
+'beacon2.indieclicktv.com',
+'beacons.brandads.net',
+'beadngmke.download',
+'beam.hlserve.com',
+'beanstock.com',
+'beanstockmedia.com',
+'beastasuum.a.ssl.fastly.net',
+'bebsz.voluumtrk.com',
+'becausebabes.go2cloud.org',
+'becontext.com',
+'bee-ads.com',
+'beead.co.uk',
+'beglorena.com',
+'begun.ru',
+'behacdn.ksmobile.net',
+'behance.vo.llnwd.net',
+'beiersdorf.122.2o7.net',
+'bekissedxpyno.download',
+'bekleidet.digidip.net',
+'beliesqhmsin.download',
+'bellca.112.2o7.net',
+'bellca.demdex.net',
+'bellserviceeng.112.2o7.net',
+'belole.ru',
+'belstat.be',
+'benchbrands.com',
+'benderswaojb.download',
+'benefique-shiseido.b.appier.net',
+'berater.adition.com',
+'bergenstidende.112.2o7.net',
+'beseen.com',
+'bespatehwxslkoz.download',
+'best-ads.com',
+'best-deals-products.com',
+'bestadbid.com',
+'bestaffiliates.go2cloud.org',
+'bestfwdservice.com',
+'bestmusic.2cnt.net',
+'bestwebnutfunblack.biz',
+'beta-old.superstats.com',
+'beta.adition.com',
+'beta.adknowledge.com',
+'beta.ads.cc',
+'beta.easyhitcounters.com',
+'beta.inclk.com',
+'beta.superstats.com',
+'betaadvertisers.doubleclick.net',
+'betaffs.com',
+'betanews.us.intellitxt.com',
+'betareportcentral.doubleclick.net',
+'betatest.adition.com',
+'betrad.com',
+'better-counter.com',
+'betterhg.112.2o7.net',
+'bettermail.ca',
+'betting.betfair.com',
+'bettraf.com',
+'bevo.go2cloud.org',
+'beyond.go2cloud.org',
+'beyourownaffiliate.com',
+'bfd.secureintl.com',
+'bfe9-0d31-18b3-7493.reporo.net',
+'bfiqlohtombic.review',
+'bfpildlmcolatitude.review',
+'bgn0f.voluumtrk.com',
+'bgngq.voluumtrk.com',
+'bgsurveys.go2cloud.org',
+'bh.ams.contextweb.com',
+'bh.contextweb.com',
+'bh2y3.voluumtrk.com',
+'bhconsulting.go2cloud.org',
+'bhgmarketing.112.2o7.net',
+'bi-three.wooga.com',
+'bi.installcore.com',
+'bi.medscape.com',
+'bi.softservers.net',
+'bi827.voluumtrk.com',
+'bibqh.voluumtrk.com',
+'bid.contextweb.com',
+'bid.pubmatic.com',
+'bid.socdm.com',
+'bidclix.com',
+'bidclix.net',
+'bidhere.go2cloud.org',
+'bidsystem.adknowledge.com',
+'bidvertiser.com',
+'big.sddan.com',
+'bigamypuabg.download',
+'bigasia.com',
+'bigbangads.go2cloud.org',
+'bigbangmedia.com',
+'bigbanners.com',
+'bigclicks.com',
+'bigfatbaby.com',
+'biglinkext.xyz',
+'bigmobileads.com',
+'bigsoccer.us.intellitxt.com',
+'bigstats.net',
+'biipe.voluumtrk.com',
+'bilbob.com',
+'bilbowtunxjujc.download',
+'bild.de.intellitxt.com',
+'bild01.webtrekk.net',
+'bildwl.mobile.de',
+'bill-info.com',
+'billboard.cz',
+'billionpops.com',
+'billmscurlrev.com',
+'bimlocal.com',
+'binarybliss.com',
+'binaryoffers.go2cloud.org',
+'binaryperform.go2cloud.org',
+'bingads.com',
+'binglee-com-au.b.appier.net',
+'bingocabin.com',
+'bingsclspe.download',
+'bist.ailsg.com',
+'bit.do',
+'bit.ehow.com',
+'bitable.com',
+'bitburg.adtech.fr',
+'bitcast-a.bitgravity.com',
+'bitcoinadvertisers.com',
+'bitsonthewire.com',
+'bitterstrawberry.com',
+'bitvisitor.com',
+'bizad.nikkeibp.co.jp',
+'bizsolutions.strands.com',
+'bizzclick.com',
+'bjvim.voluumtrk.com',
+'blabbermouth.us.intellitxt.com',
+'blackchek.popunder.ru',
+'blacklightimages.com',
+'blacksheep.go2cloud.org',
+'blamads-assets.s3.amazonaws.com',
+'blamads.com',
+'blankrefer.com',
+'blast4traffic.com',
+'blatfee.ero-advertising.com',
+'blazedlvlwzwt.download',
+'bleepingcomputer.us.intellitxt.com',
+'blindferretmedia.go2cloud.org',
+'blkget6.com',
+'blm.bz',
+'blockbuster.112.2o7.net',
+'blockbustercom.112.2o7.net',
+'blockedf9ojq.voluumtrk.com',
+'blocks.ginotrack.com',
+'blog-hits.com',
+'blog.adspaces.ero-advertising.com',
+'blog.chartboost.com',
+'blog.duba.net',
+'blog.ero-advertising.com',
+'blog.intext.ero-advertising.com',
+'blog.leadbolt.com',
+'blog.mobpartner.com',
+'blog.qualaroo.com',
+'blog.skyhookwireless.com',
+'blog.zedo.com',
+'blogads.com',
+'bloggannonser.no',
+'blogher.org.12469.9030.302br.net',
+'blogwerk.wemfbox.ch',
+'blueadvertise.com',
+'bluecava.com',
+'bluechillies.us.intellitxt.com',
+'blueconic.net',
+'blueflameelite.go2cloud.org',
+'bluehavenmedia.com',
+'blueheart.org',
+'bluelinkmarketing0.go2cloud.org',
+'bluemongoose.com',
+'bluerazormedia.go2cloud.org',
+'blueseek.com',
+'bluesq.com',
+'bluetrackmedia.com',
+'blushing.justclick.ru',
+'blutrumpet.com',
+'bm.annonce.cz',
+'bm.hbtronix.de',
+'bm5150.com',
+'bm7dc.voluumtrk.com',
+'bmcp5.voluumtrk.com',
+'bmetrack.com',
+'bmg8u.voluumtrk.com',
+'bmi.go2cloud.org',
+'bmkolkvhunotifies.review',
+'bmmetrix.com',
+'bmobl.voluumtrk.com',
+'bmp.rentboy.com',
+'bms.zeptolab.com',
+'bn.gewinn24.de',
+'bnbaz.eb2a.com',
+'bncrf.voluumtrk.com',
+'bng3w.voluumtrk.com',
+'bnkr8dev.112.2o7.net',
+'bnr.sys.lv',
+'bo-videos.s3.amazonaws.com',
+'bo.jumptap.com',
+'boaaabsdcsubtends.review',
+'boardreader.us.intellitxt.com',
+'boards2go.com',
+'bodybuilding-com.112.2o7.net',
+'bofa.demdex.net',
+'bogeymanpbbgzoi.download',
+'boh00.voluumtrk.com',
+'boingdragon.com',
+'bokilora.com',
+'bolch02.webtrekk.net',
+'boldcenter.com',
+'boldchat.com',
+'bolde02.webtrekk.net',
+'bolt.us.intellitxt.com',
+'bomek.com',
+'bon7g.voluumtrk.com',
+'bondinra.com',
+'bongacash.com',
+'bonjikoa.com',
+'book-mark.net',
+'bookcorps.com',
+'boom.ro',
+'boomerang.com.au',
+'boomingsbzboqfg.download',
+'boomottkr.download',
+'boostads.net',
+'bootstraps.timesink.com',
+'bopsgoxon.download',
+'borageytjly.download',
+'borwgskshrinks.review',
+'bos-tapreq01.jumptap.com',
+'bos-tapreq02.jumptap.com',
+'bos-tapreq03.jumptap.com',
+'bos-tapreq04.jumptap.com',
+'bos-tapreq05.jumptap.com',
+'bos-tapreq06.jumptap.com',
+'bos-tapreq07.jumptap.com',
+'bos-tapreq08.jumptap.com',
+'bos-tapreq09.jumptap.com',
+'bos-tapreq10.jumptap.com',
+'bos-tapreq11.jumptap.com',
+'bos-tapreq12.jumptap.com',
+'bos-tapreq13.jumptap.com',
+'bos-tapreq14.jumptap.com',
+'bos-tapreq15.jumptap.com',
+'bos-tapreq16.jumptap.com',
+'bos-tapreq17.jumptap.com',
+'bos-tapreq18.jumptap.com',
+'bos-tapreq19.jumptap.com',
+'bos-tapreq20.jumptap.com',
+'bosecom.112.2o7.net',
+'boss.berlinonline.de',
+'bossip.us.intellitxt.com',
+'bosslegen.de',
+'bounceexchange.com',
+'bourgeonujprvxf.download',
+'bouygues-care.inq.com',
+'box.anchorfree.net',
+'box002.2cnt.net',
+'box003.2cnt.net',
+'box011.2cnt.net',
+'box012.2cnt.net',
+'box013.2cnt.net',
+'box014.2cnt.net',
+'box015.2cnt.net',
+'box016.2cnt.net',
+'box18006.2cnt.net',
+'box18007.2cnt.net',
+'box18008.2cnt.net',
+'box18009.2cnt.net',
+'box30101.2cnt.net',
+'box30102.2cnt.net',
+'box30103.2cnt.net',
+'box30107.2cnt.net',
+'box30120.2cnt.net',
+'box32002.2cnt.net',
+'box32003.2cnt.net',
+'boxofficeprophets.us.intellitxt.com',
+'bp.ads.link4ads.com',
+'bp5xs.voluumtrk.com',
+'bpath.com',
+'bpflx.voluumtrk.com',
+'bptracking.com',
+'bqukvgnash.review',
+'br.blackfling.com',
+'br.naked.com',
+'br.rk.com',
+'br.vghd.com',
+'brain.cubi.me',
+'braincash.com',
+'brainient.com',
+'brainteasers.freestats.com',
+'branch.io',
+'brandedoffersaff.go2cloud.org',
+'brandmovers.net',
+'branovate.com',
+'brashnessgujqtmt.download',
+'brataudit-offloader.2cnt.net',
+'bratro-a.2cnt.net',
+'bratro-s.2cnt.net',
+'brattest.2cnt.net',
+'brattest1.2cnt.net',
+'brattest2.2cnt.net',
+'brattest3.2cnt.net',
+'brattest4.2cnt.net',
+'bratwurstsktrllgfj.download',
+'bravenet.com',
+'bravo.israelweather.co.il',
+'brawnmill.go2cloud.org',
+'brcache.madthumbs.com',
+'breeksboikac.download',
+'brew-u-ex.tekblue.net',
+'brickandmobile.com',
+'bricklehtezjtjfi.download',
+'bride.ru',
+'bright.bncnt.com',
+'brightshare.com',
+'briskads.go2affise.com',
+'british-banners.com',
+'britishtelecom.112.2o7.net',
+'britneyexperts.us.intellitxt.com',
+'broadjump.com',
+'broker.adobe.com',
+'brokertraffic.com',
+'bronzingeyes.digidip.net',
+'browsertest.web.aol.com',
+'brqvld0p.com',
+'brusmedia.go2cloud.org',
+'bs.serving-sys.com',
+'bs.serving-sys.com.10001.9024.302br.net',
+'bs.serving-sys.com.10003.9024.302br.net',
+'bs.serving-sys.com.10005.9024.302br.net',
+'bs.serving-sys.com.10007.9024.302br.net',
+'bs.serving-sys.com.10009.9024.302br.net',
+'bs.serving-sys.com.10011.9024.302br.net',
+'bs.serving-sys.com.10013.9024.302br.net',
+'bs.serving-sys.com.10015.9024.302br.net',
+'bs.serving-sys.com.10017.9024.302br.net',
+'bs.serving-sys.com.10018.9024.302br.net',
+'bs.serving-sys.com.10019.9024.302br.net',
+'bs.serving-sys.com.10021.9024.302br.net',
+'bs.serving-sys.com.10023.9024.302br.net',
+'bs.serving-sys.com.10085.9024.302br.net',
+'bs.serving-sys.com.10087.9024.302br.net',
+'bs.serving-sys.com.10098.9024.302br.net',
+'bs.serving-sys.com.10648.9021.302br.net',
+'bs.serving-sys.com.10650.9021.302br.net',
+'bs.serving-sys.com.10654.9021.302br.net',
+'bs.serving-sys.com.10658.9021.302br.net',
+'bs.serving-sys.com.11722.9021.302br.net',
+'bs.serving-sys.com.11724.9021.302br.net',
+'bs.serving-sys.com.11734.9021.302br.net',
+'bs.serving-sys.com.11736.9021.302br.net',
+'bs.serving-sys.com.11758.9021.302br.net',
+'bs.serving-sys.com.11762.9021.302br.net',
+'bs.serving-sys.com.11768.9021.302br.net',
+'bs.serving-sys.com.12786.9021.302br.net',
+'bs.serving-sys.com.12790.9021.302br.net',
+'bs.serving-sys.com.1826.9021.302br.net',
+'bs.serving-sys.com.1851.9021.302br.net',
+'bs.serving-sys.com.1857.9021.302br.net',
+'bs.serving-sys.com.1859.9021.302br.net',
+'bs.serving-sys.com.1861.9021.302br.net',
+'bs.serving-sys.com.1865.9021.302br.net',
+'bs.serving-sys.com.1867.9021.302br.net',
+'bs.serving-sys.com.1869.9021.302br.net',
+'bs.serving-sys.com.1881.9021.302br.net',
+'bs.serving-sys.com.1887.9021.302br.net',
+'bs.serving-sys.com.1893.9021.302br.net',
+'bs.serving-sys.com.1895.9021.302br.net',
+'bs.serving-sys.com.1899.9021.302br.net',
+'bs.serving-sys.com.1905.9021.302br.net',
+'bs.serving-sys.com.1915.9021.302br.net',
+'bs.serving-sys.com.1919.9021.302br.net',
+'bs.serving-sys.com.1921.9021.302br.net',
+'bs.serving-sys.com.19452.9120.302br.net',
+'bs.serving-sys.com.19454.9120.302br.net',
+'bs.serving-sys.com.19456.9120.302br.net',
+'bs.serving-sys.com.19458.9120.302br.net',
+'bs.serving-sys.com.19460.9120.302br.net',
+'bs.serving-sys.com.19462.9120.302br.net',
+'bs.serving-sys.com.19464.9120.302br.net',
+'bs.serving-sys.com.19466.9120.302br.net',
+'bs.serving-sys.com.19468.9120.302br.net',
+'bs.serving-sys.com.19472.9120.302br.net',
+'bs.serving-sys.com.19474.9120.302br.net',
+'bs.serving-sys.com.19476.9120.302br.net',
+'bs.serving-sys.com.19478.9120.302br.net',
+'bs.serving-sys.com.19480.9120.302br.net',
+'bs.serving-sys.com.19482.9120.302br.net',
+'bs.serving-sys.com.19484.9120.302br.net',
+'bs.serving-sys.com.19486.9120.302br.net',
+'bs.serving-sys.com.19488.9120.302br.net',
+'bs.serving-sys.com.19490.9120.302br.net',
+'bs.serving-sys.com.19492.9120.302br.net',
+'bs.serving-sys.com.19494.9120.302br.net',
+'bs.serving-sys.com.19498.9120.302br.net',
+'bs.serving-sys.com.19502.9120.302br.net',
+'bs.serving-sys.com.19504.9120.302br.net',
+'bs.serving-sys.com.19505.9120.302br.net',
+'bs.serving-sys.com.19506.9120.302br.net',
+'bs.serving-sys.com.19508.9120.302br.net',
+'bs.serving-sys.com.19510.9120.302br.net',
+'bs.serving-sys.com.19511.9120.302br.net',
+'bs.serving-sys.com.19512.9120.302br.net',
+'bs.serving-sys.com.19514.9120.302br.net',
+'bs.serving-sys.com.19516.9120.302br.net',
+'bs.serving-sys.com.19518.9120.302br.net',
+'bs.serving-sys.com.19520.9120.302br.net',
+'bs.serving-sys.com.19522.9120.302br.net',
+'bs.serving-sys.com.19524.9120.302br.net',
+'bs.serving-sys.com.19526.9120.302br.net',
+'bs.serving-sys.com.19528.9120.302br.net',
+'bs.serving-sys.com.20228.9120.302br.net',
+'bs.serving-sys.com.20232.9120.302br.net',
+'bs.serving-sys.com.20236.9120.302br.net',
+'bs.serving-sys.com.20240.9120.302br.net',
+'bs.serving-sys.com.20256.9120.302br.net',
+'bs.serving-sys.com.20268.9120.302br.net',
+'bs.serving-sys.com.20272.9120.302br.net',
+'bs.serving-sys.com.20286.9120.302br.net',
+'bs.serving-sys.com.20318.9120.302br.net',
+'bs.serving-sys.com.20320.9120.302br.net',
+'bs.serving-sys.com.20330.9120.302br.net',
+'bs.serving-sys.com.20332.9120.302br.net',
+'bs.serving-sys.com.20333.9120.302br.net',
+'bs.serving-sys.com.20334.9120.302br.net',
+'bs.serving-sys.com.20336.9120.302br.net',
+'bs.serving-sys.com.20337.9120.302br.net',
+'bs.serving-sys.com.20338.9120.302br.net',
+'bs.serving-sys.com.20340.9120.302br.net',
+'bs.serving-sys.com.20342.9120.302br.net',
+'bs.serving-sys.com.20344.9120.302br.net',
+'bs.serving-sys.com.20346.9120.302br.net',
+'bs.serving-sys.com.20348.9120.302br.net',
+'bs.serving-sys.com.20350.9120.302br.net',
+'bs.serving-sys.com.20352.9120.302br.net',
+'bs.serving-sys.com.20354.9120.302br.net',
+'bs.serving-sys.com.20356.9120.302br.net',
+'bs.serving-sys.com.20358.9120.302br.net',
+'bs.serving-sys.com.20360.9120.302br.net',
+'bs.serving-sys.com.20362.9120.302br.net',
+'bs.serving-sys.com.20364.9120.302br.net',
+'bs.serving-sys.com.20366.9120.302br.net',
+'bs.serving-sys.com.20368.9120.302br.net',
+'bs.serving-sys.com.20370.9120.302br.net',
+'bs.serving-sys.com.20372.9120.302br.net',
+'bs.serving-sys.com.20374.9120.302br.net',
+'bs.serving-sys.com.20376.9120.302br.net',
+'bs.serving-sys.com.20378.9120.302br.net',
+'bs.serving-sys.com.20380.9120.302br.net',
+'bs.serving-sys.com.20382.9120.302br.net',
+'bs.serving-sys.com.20384.9120.302br.net',
+'bs.serving-sys.com.20386.9120.302br.net',
+'bs.serving-sys.com.20388.9120.302br.net',
+'bs.serving-sys.com.20392.9120.302br.net',
+'bs.serving-sys.com.20394.9120.302br.net',
+'bs.serving-sys.com.20396.9120.302br.net',
+'bs.serving-sys.com.20398.9120.302br.net',
+'bs.serving-sys.com.20402.9120.302br.net',
+'bs.serving-sys.com.20404.9120.302br.net',
+'bs.serving-sys.com.20406.9120.302br.net',
+'bs.serving-sys.com.20408.9120.302br.net',
+'bs.serving-sys.com.20410.9120.302br.net',
+'bs.serving-sys.com.20412.9120.302br.net',
+'bs.serving-sys.com.20414.9120.302br.net',
+'bs.serving-sys.com.20416.9120.302br.net',
+'bs.serving-sys.com.20418.9120.302br.net',
+'bs.serving-sys.com.20422.9120.302br.net',
+'bs.serving-sys.com.20426.9120.302br.net',
+'bs.serving-sys.com.20428.9120.302br.net',
+'bs.serving-sys.com.20434.9120.302br.net',
+'bs.serving-sys.com.20436.9120.302br.net',
+'bs.serving-sys.com.20437.9120.302br.net',
+'bs.serving-sys.com.20438.9120.302br.net',
+'bs.serving-sys.com.20439.9120.302br.net',
+'bs.serving-sys.com.20440.9120.302br.net',
+'bs.serving-sys.com.20442.9120.302br.net',
+'bs.serving-sys.com.20444.9120.302br.net',
+'bs.serving-sys.com.20446.9120.302br.net',
+'bs.serving-sys.com.20448.9120.302br.net',
+'bs.serving-sys.com.20449.9120.302br.net',
+'bs.serving-sys.com.20450.9120.302br.net',
+'bs.serving-sys.com.20451.9120.302br.net',
+'bs.serving-sys.com.20452.9120.302br.net',
+'bs.serving-sys.com.20506.9120.302br.net',
+'bs.serving-sys.com.20508.9120.302br.net',
+'bs.serving-sys.com.20510.9120.302br.net',
+'bs.serving-sys.com.20512.9120.302br.net',
+'bs.serving-sys.com.20514.9120.302br.net',
+'bs.serving-sys.com.20516.9120.302br.net',
+'bs.serving-sys.com.20518.9120.302br.net',
+'bs.serving-sys.com.20520.9120.302br.net',
+'bs.serving-sys.com.20522.9120.302br.net',
+'bs.serving-sys.com.20524.9120.302br.net',
+'bs.serving-sys.com.20526.9120.302br.net',
+'bs.serving-sys.com.20528.9120.302br.net',
+'bs.serving-sys.com.20530.9120.302br.net',
+'bs.serving-sys.com.20532.9120.302br.net',
+'bs.serving-sys.com.20534.9120.302br.net',
+'bs.serving-sys.com.20536.9120.302br.net',
+'bs.serving-sys.com.20538.9120.302br.net',
+'bs.serving-sys.com.20540.9120.302br.net',
+'bs.serving-sys.com.20542.9120.302br.net',
+'bs.serving-sys.com.20544.9120.302br.net',
+'bs.serving-sys.com.20546.9120.302br.net',
+'bs.serving-sys.com.20548.9120.302br.net',
+'bs.serving-sys.com.20550.9120.302br.net',
+'bs.serving-sys.com.20552.9120.302br.net',
+'bs.serving-sys.com.20554.9120.302br.net',
+'bs.serving-sys.com.20556.9120.302br.net',
+'bs.serving-sys.com.20558.9120.302br.net',
+'bs.serving-sys.com.20560.9120.302br.net',
+'bs.serving-sys.com.20562.9120.302br.net',
+'bs.serving-sys.com.20564.9120.302br.net',
+'bs.serving-sys.com.20566.9120.302br.net',
+'bs.serving-sys.com.20568.9120.302br.net',
+'bs.serving-sys.com.20570.9120.302br.net',
+'bs.serving-sys.com.20572.9120.302br.net',
+'bs.serving-sys.com.20576.9120.302br.net',
+'bs.serving-sys.com.20578.9120.302br.net',
+'bs.serving-sys.com.20580.9120.302br.net',
+'bs.serving-sys.com.20582.9120.302br.net',
+'bs.serving-sys.com.20584.9120.302br.net',
+'bs.serving-sys.com.20586.9120.302br.net',
+'bs.serving-sys.com.20588.9120.302br.net',
+'bs.serving-sys.com.20590.9120.302br.net',
+'bs.serving-sys.com.20592.9120.302br.net',
+'bs.serving-sys.com.20594.9120.302br.net',
+'bs.serving-sys.com.20596.9120.302br.net',
+'bs.serving-sys.com.20598.9120.302br.net',
+'bs.serving-sys.com.20600.9120.302br.net',
+'bs.serving-sys.com.20602.9120.302br.net',
+'bs.serving-sys.com.20604.9120.302br.net',
+'bs.serving-sys.com.20606.9120.302br.net',
+'bs.serving-sys.com.20608.9120.302br.net',
+'bs.serving-sys.com.20610.9120.302br.net',
+'bs.serving-sys.com.20612.9120.302br.net',
+'bs.serving-sys.com.20614.9120.302br.net',
+'bs.serving-sys.com.20616.9120.302br.net',
+'bs.serving-sys.com.20618.9120.302br.net',
+'bs.serving-sys.com.20620.9120.302br.net',
+'bs.serving-sys.com.20622.9120.302br.net',
+'bs.serving-sys.com.20624.9120.302br.net',
+'bs.serving-sys.com.20626.9120.302br.net',
+'bs.serving-sys.com.20628.9120.302br.net',
+'bs.serving-sys.com.20630.9120.302br.net',
+'bs.serving-sys.com.20632.9120.302br.net',
+'bs.serving-sys.com.20634.9120.302br.net',
+'bs.serving-sys.com.20636.9120.302br.net',
+'bs.serving-sys.com.20638.9120.302br.net',
+'bs.serving-sys.com.20640.9120.302br.net',
+'bs.serving-sys.com.20644.9120.302br.net',
+'bs.serving-sys.com.20646.9120.302br.net',
+'bs.serving-sys.com.20648.9120.302br.net',
+'bs.serving-sys.com.24618.9182.302br.net',
+'bs.serving-sys.com.24620.9182.302br.net',
+'bs.serving-sys.com.24622.9182.302br.net',
+'bs.serving-sys.com.24624.9182.302br.net',
+'bs.serving-sys.com.24626.9182.302br.net',
+'bs.serving-sys.com.24628.9182.302br.net',
+'bs.serving-sys.com.24630.9182.302br.net',
+'bs.serving-sys.com.24632.9182.302br.net',
+'bs.serving-sys.com.24634.9182.302br.net',
+'bs.serving-sys.com.24636.9182.302br.net',
+'bs.serving-sys.com.24638.9182.302br.net',
+'bs.serving-sys.com.24640.9182.302br.net',
+'bs.serving-sys.com.24642.9182.302br.net',
+'bs.serving-sys.com.24644.9182.302br.net',
+'bs.serving-sys.com.24646.9182.302br.net',
+'bs.serving-sys.com.24648.9182.302br.net',
+'bs.serving-sys.com.24650.9182.302br.net',
+'bs.serving-sys.com.24652.9182.302br.net',
+'bs.serving-sys.com.24654.9182.302br.net',
+'bs.serving-sys.com.24656.9182.302br.net',
+'bs.serving-sys.com.24658.9182.302br.net',
+'bs.serving-sys.com.24660.9182.302br.net',
+'bs.serving-sys.com.24662.9182.302br.net',
+'bs.serving-sys.com.24664.9182.302br.net',
+'bs.serving-sys.com.24666.9182.302br.net',
+'bs.serving-sys.com.24668.9182.302br.net',
+'bs.serving-sys.com.24670.9182.302br.net',
+'bs.serving-sys.com.24672.9182.302br.net',
+'bs.serving-sys.com.24674.9182.302br.net',
+'bs.serving-sys.com.24676.9182.302br.net',
+'bs.serving-sys.com.24678.9182.302br.net',
+'bs.serving-sys.com.24680.9182.302br.net',
+'bs.serving-sys.com.24682.9182.302br.net',
+'bs.serving-sys.com.24684.9182.302br.net',
+'bs.serving-sys.com.24686.9182.302br.net',
+'bs.serving-sys.com.24688.9182.302br.net',
+'bs.serving-sys.com.24690.9181.302br.net',
+'bs.serving-sys.com.24692.9181.302br.net',
+'bs.serving-sys.com.24694.9181.302br.net',
+'bs.serving-sys.com.24696.9181.302br.net',
+'bs.serving-sys.com.24698.9181.302br.net',
+'bs.serving-sys.com.24700.9181.302br.net',
+'bs.serving-sys.com.24702.9181.302br.net',
+'bs.serving-sys.com.24704.9181.302br.net',
+'bs.serving-sys.com.24706.9181.302br.net',
+'bs.serving-sys.com.24708.9181.302br.net',
+'bs.serving-sys.com.24710.9181.302br.net',
+'bs.serving-sys.com.24712.9181.302br.net',
+'bs.serving-sys.com.24714.9181.302br.net',
+'bs.serving-sys.com.24716.9181.302br.net',
+'bs.serving-sys.com.24718.9181.302br.net',
+'bs.serving-sys.com.24720.9181.302br.net',
+'bs.serving-sys.com.24722.9181.302br.net',
+'bs.serving-sys.com.24724.9181.302br.net',
+'bs.serving-sys.com.24726.9181.302br.net',
+'bs.serving-sys.com.24728.9181.302br.net',
+'bs.serving-sys.com.24730.9181.302br.net',
+'bs.serving-sys.com.24732.9181.302br.net',
+'bs.serving-sys.com.24734.9181.302br.net',
+'bs.serving-sys.com.24736.9181.302br.net',
+'bs.serving-sys.com.24738.9181.302br.net',
+'bs.serving-sys.com.24740.9181.302br.net',
+'bs.serving-sys.com.24742.9181.302br.net',
+'bs.serving-sys.com.24744.9181.302br.net',
+'bs.serving-sys.com.24746.9181.302br.net',
+'bs.serving-sys.com.24748.9181.302br.net',
+'bs.serving-sys.com.24750.9181.302br.net',
+'bs.serving-sys.com.24752.9181.302br.net',
+'bs.serving-sys.com.24754.9181.302br.net',
+'bs.serving-sys.com.24756.9181.302br.net',
+'bs.serving-sys.com.24758.9181.302br.net',
+'bs.serving-sys.com.24760.9181.302br.net',
+'bs.serving-sys.com.25254.9186.302br.net',
+'bs.serving-sys.com.25256.9186.302br.net',
+'bs.serving-sys.com.25258.9186.302br.net',
+'bs.serving-sys.com.25259.9186.302br.net',
+'bs.serving-sys.com.25260.9186.302br.net',
+'bs.serving-sys.com.25261.9186.302br.net',
+'bs.serving-sys.com.25262.9186.302br.net',
+'bs.serving-sys.com.25263.9186.302br.net',
+'bs.serving-sys.com.25264.9186.302br.net',
+'bs.serving-sys.com.25265.9186.302br.net',
+'bs.serving-sys.com.25266.9186.302br.net',
+'bs.serving-sys.com.25268.9186.302br.net',
+'bs.serving-sys.com.25269.9186.302br.net',
+'bs.serving-sys.com.25270.9186.302br.net',
+'bs.serving-sys.com.25271.9186.302br.net',
+'bs.serving-sys.com.25272.9186.302br.net',
+'bs.serving-sys.com.25273.9186.302br.net',
+'bs.serving-sys.com.25274.9186.302br.net',
+'bs.serving-sys.com.25275.9186.302br.net',
+'bs.serving-sys.com.25276.9186.302br.net',
+'bs.serving-sys.com.25277.9186.302br.net',
+'bs.serving-sys.com.25278.9186.302br.net',
+'bs.serving-sys.com.25279.9186.302br.net',
+'bs.serving-sys.com.25280.9186.302br.net',
+'bs.serving-sys.com.25281.9186.302br.net',
+'bs.serving-sys.com.25282.9186.302br.net',
+'bs.serving-sys.com.25283.9186.302br.net',
+'bs.serving-sys.com.25284.9186.302br.net',
+'bs.serving-sys.com.25285.9186.302br.net',
+'bs.serving-sys.com.25286.9186.302br.net',
+'bs.serving-sys.com.25287.9186.302br.net',
+'bs.serving-sys.com.25288.9186.302br.net',
+'bs.serving-sys.com.25289.9186.302br.net',
+'bs.serving-sys.com.25290.9186.302br.net',
+'bs.serving-sys.com.25291.9186.302br.net',
+'bs.serving-sys.com.25292.9186.302br.net',
+'bs.serving-sys.com.25293.9186.302br.net',
+'bs.serving-sys.com.25294.9186.302br.net',
+'bs.serving-sys.com.25295.9186.302br.net',
+'bs.serving-sys.com.25296.9186.302br.net',
+'bs.serving-sys.com.25297.9186.302br.net',
+'bs.serving-sys.com.25298.9186.302br.net',
+'bs.serving-sys.com.25308.9186.302br.net',
+'bs.serving-sys.com.25310.9186.302br.net',
+'bs.serving-sys.com.25311.9186.302br.net',
+'bs.serving-sys.com.25312.9186.302br.net',
+'bs.serving-sys.com.25313.9186.302br.net',
+'bs.serving-sys.com.25314.9186.302br.net',
+'bs.serving-sys.com.25315.9186.302br.net',
+'bs.serving-sys.com.25316.9186.302br.net',
+'bs.serving-sys.com.25317.9186.302br.net',
+'bs.serving-sys.com.25318.9186.302br.net',
+'bs.serving-sys.com.25320.9186.302br.net',
+'bs.serving-sys.com.25322.9186.302br.net',
+'bs.serving-sys.com.25324.9186.302br.net',
+'bs.serving-sys.com.25326.9186.302br.net',
+'bs.serving-sys.com.25328.9186.302br.net',
+'bs.serving-sys.com.25330.9186.302br.net',
+'bs.serving-sys.com.25332.9186.302br.net',
+'bs.serving-sys.com.25333.9186.302br.net',
+'bs.serving-sys.com.25334.9186.302br.net',
+'bs.serving-sys.com.25335.9186.302br.net',
+'bs.serving-sys.com.25336.9186.302br.net',
+'bs.serving-sys.com.25337.9186.302br.net',
+'bs.serving-sys.com.25338.9186.302br.net',
+'bs.serving-sys.com.25339.9186.302br.net',
+'bs.serving-sys.com.25340.9186.302br.net',
+'bs.serving-sys.com.25341.9186.302br.net',
+'bs.serving-sys.com.25342.9186.302br.net',
+'bs.serving-sys.com.25343.9186.302br.net',
+'bs.serving-sys.com.25344.9186.302br.net',
+'bs.serving-sys.com.25346.9186.302br.net',
+'bs.serving-sys.com.25348.9186.302br.net',
+'bs.serving-sys.com.25350.9186.302br.net',
+'bs.serving-sys.com.25369.9186.302br.net',
+'bs.serving-sys.com.25370.9186.302br.net',
+'bs.serving-sys.com.25371.9186.302br.net',
+'bs.serving-sys.com.25372.9186.302br.net',
+'bs.serving-sys.com.25373.9186.302br.net',
+'bs.serving-sys.com.25374.9186.302br.net',
+'bs.serving-sys.com.25375.9186.302br.net',
+'bs.serving-sys.com.25376.9186.302br.net',
+'bs.serving-sys.com.25377.9186.302br.net',
+'bs.serving-sys.com.25378.9186.302br.net',
+'bs.serving-sys.com.25380.9186.302br.net',
+'bs.serving-sys.com.33504.9243.302br.net',
+'bs.serving-sys.com.33505.9243.302br.net',
+'bs.serving-sys.com.33506.9243.302br.net',
+'bs.serving-sys.com.33507.9243.302br.net',
+'bs.serving-sys.com.33508.9243.302br.net',
+'bs.serving-sys.com.33516.9243.302br.net',
+'bs.serving-sys.com.33517.9243.302br.net',
+'bs.serving-sys.com.33518.9243.302br.net',
+'bs.serving-sys.com.33519.9243.302br.net',
+'bs.serving-sys.com.33520.9243.302br.net',
+'bs.serving-sys.com.33521.9243.302br.net',
+'bs.serving-sys.com.33522.9243.302br.net',
+'bs.serving-sys.com.33523.9243.302br.net',
+'bs.serving-sys.com.33524.9243.302br.net',
+'bs.serving-sys.com.33525.9243.302br.net',
+'bs.serving-sys.com.33526.9243.302br.net',
+'bs.serving-sys.com.35174.9113.302br.net',
+'bs.serving-sys.com.35175.9113.302br.net',
+'bs.serving-sys.com.35176.9113.302br.net',
+'bs.serving-sys.com.35177.9113.302br.net',
+'bs.serving-sys.com.36494.9244.302br.net',
+'bs.serving-sys.com.36495.9244.302br.net',
+'bs.serving-sys.com.36496.9244.302br.net',
+'bs.serving-sys.com.36497.9244.302br.net',
+'bs.serving-sys.com.36498.9244.302br.net',
+'bs.serving-sys.com.36499.9244.302br.net',
+'bs.serving-sys.com.36500.9244.302br.net',
+'bs.serving-sys.com.36501.9244.302br.net',
+'bs.serving-sys.com.36502.9244.302br.net',
+'bs.serving-sys.com.36503.9244.302br.net',
+'bs.serving-sys.com.36504.9244.302br.net',
+'bs.serving-sys.com.36505.9244.302br.net',
+'bs.serving-sys.com.36507.9244.302br.net',
+'bs.serving-sys.com.36509.9244.302br.net',
+'bs.serving-sys.com.36511.9244.302br.net',
+'bs.serving-sys.com.36513.9244.302br.net',
+'bs.serving-sys.com.36514.9244.302br.net',
+'bs.serving-sys.com.36515.9244.302br.net',
+'bs.serving-sys.com.36516.9244.302br.net',
+'bs.serving-sys.com.36517.9244.302br.net',
+'bs.serving-sys.com.36518.9244.302br.net',
+'bs.serving-sys.com.36519.9244.302br.net',
+'bs.serving-sys.com.36520.9244.302br.net',
+'bs.serving-sys.com.36521.9244.302br.net',
+'bs.serving-sys.com.36522.9244.302br.net',
+'bs.serving-sys.com.36523.9244.302br.net',
+'bs.serving-sys.com.36525.9244.302br.net',
+'bs.serving-sys.com.36526.9244.302br.net',
+'bs.serving-sys.com.36527.9244.302br.net',
+'bs.serving-sys.com.36529.9244.302br.net',
+'bs.serving-sys.com.36531.9244.302br.net',
+'bs.serving-sys.com.36533.9244.302br.net',
+'bs.serving-sys.com.36534.9244.302br.net',
+'bs.serving-sys.com.36535.9244.302br.net',
+'bs.serving-sys.com.36537.9244.302br.net',
+'bs.serving-sys.com.36539.9244.302br.net',
+'bs.serving-sys.com.36540.9244.302br.net',
+'bs.serving-sys.com.36541.9244.302br.net',
+'bs.serving-sys.com.36542.9244.302br.net',
+'bs.serving-sys.com.36543.9244.302br.net',
+'bs.serving-sys.com.36544.9244.302br.net',
+'bs.serving-sys.com.36545.9244.302br.net',
+'bs.serving-sys.com.36546.9244.302br.net',
+'bs.serving-sys.com.36547.9244.302br.net',
+'bs.serving-sys.com.36548.9244.302br.net',
+'bs.serving-sys.com.36549.9244.302br.net',
+'bs.serving-sys.com.36550.9244.302br.net',
+'bs.serving-sys.com.36551.9244.302br.net',
+'bs.serving-sys.com.36552.9244.302br.net',
+'bs.serving-sys.com.36553.9244.302br.net',
+'bs.serving-sys.com.36554.9244.302br.net',
+'bs.serving-sys.com.36555.9244.302br.net',
+'bs.serving-sys.com.36556.9244.302br.net',
+'bs.serving-sys.com.36557.9244.302br.net',
+'bs.serving-sys.com.36582.9244.302br.net',
+'bs.serving-sys.com.36583.9244.302br.net',
+'bs.serving-sys.com.36584.9244.302br.net',
+'bs.serving-sys.com.36585.9244.302br.net',
+'bs.serving-sys.com.36586.9244.302br.net',
+'bs.serving-sys.com.36587.9244.302br.net',
+'bs.serving-sys.com.36589.9244.302br.net',
+'bs.serving-sys.com.36590.9244.302br.net',
+'bs.serving-sys.com.36591.9244.302br.net',
+'bs.serving-sys.com.36592.9244.302br.net',
+'bs.serving-sys.com.36593.9244.302br.net',
+'bs.serving-sys.com.36594.9244.302br.net',
+'bs.serving-sys.com.36595.9244.302br.net',
+'bs.serving-sys.com.36596.9244.302br.net',
+'bs.serving-sys.com.36597.9244.302br.net',
+'bs.serving-sys.com.36598.9244.302br.net',
+'bs.serving-sys.com.36599.9244.302br.net',
+'bs.serving-sys.com.36600.9244.302br.net',
+'bs.serving-sys.com.36601.9244.302br.net',
+'bs.serving-sys.com.36602.9244.302br.net',
+'bs.serving-sys.com.36603.9244.302br.net',
+'bs.serving-sys.com.36605.9244.302br.net',
+'bs.serving-sys.com.36607.9244.302br.net',
+'bs.serving-sys.com.36609.9244.302br.net',
+'bs.serving-sys.com.36611.9244.302br.net',
+'bs.serving-sys.com.36613.9244.302br.net',
+'bs.serving-sys.com.36615.9244.302br.net',
+'bs.serving-sys.com.36617.9244.302br.net',
+'bs.serving-sys.com.36619.9244.302br.net',
+'bs.serving-sys.com.36621.9244.302br.net',
+'bs.serving-sys.com.36623.9244.302br.net',
+'bs.serving-sys.com.36625.9244.302br.net',
+'bs.serving-sys.com.36627.9244.302br.net',
+'bs.serving-sys.com.36629.9244.302br.net',
+'bs.serving-sys.com.36631.9244.302br.net',
+'bs.serving-sys.com.36633.9244.302br.net',
+'bs.serving-sys.com.36635.9244.302br.net',
+'bs.serving-sys.com.36637.9244.302br.net',
+'bs.serving-sys.com.36639.9244.302br.net',
+'bs.serving-sys.com.36640.9244.302br.net',
+'bs.serving-sys.com.36641.9244.302br.net',
+'bs.serving-sys.com.36642.9244.302br.net',
+'bs.serving-sys.com.36643.9244.302br.net',
+'bs.serving-sys.com.36645.9244.302br.net',
+'bs.serving-sys.com.36646.9244.302br.net',
+'bs.serving-sys.com.36647.9244.302br.net',
+'bs.serving-sys.com.36649.9244.302br.net',
+'bs.serving-sys.com.36650.9244.302br.net',
+'bs.serving-sys.com.36651.9244.302br.net',
+'bs.serving-sys.com.36652.9244.302br.net',
+'bs.serving-sys.com.36653.9244.302br.net',
+'bs.serving-sys.com.36654.9244.302br.net',
+'bs.serving-sys.com.36655.9244.302br.net',
+'bs.serving-sys.com.36656.9244.302br.net',
+'bs.serving-sys.com.36657.9244.302br.net',
+'bs.serving-sys.com.36658.9244.302br.net',
+'bs.serving-sys.com.36659.9244.302br.net',
+'bs.serving-sys.com.36660.9244.302br.net',
+'bs.serving-sys.com.36661.9244.302br.net',
+'bs.serving-sys.com.36748.9282.302br.net',
+'bs.serving-sys.com.36750.9282.302br.net',
+'bs.serving-sys.com.36758.9282.302br.net',
+'bs.serving-sys.com.36760.9282.302br.net',
+'bs.serving-sys.com.36768.9282.302br.net',
+'bs.serving-sys.com.36770.9282.302br.net',
+'bs.serving-sys.com.36778.9282.302br.net',
+'bs.serving-sys.com.36780.9282.302br.net',
+'bs.serving-sys.com.36788.9282.302br.net',
+'bs.serving-sys.com.36790.9282.302br.net',
+'bs.serving-sys.com.36798.9282.302br.net',
+'bs.serving-sys.com.36800.9282.302br.net',
+'bs.serving-sys.com.36967.9244.302br.net',
+'bs.serving-sys.com.36969.9244.302br.net',
+'bs.serving-sys.com.36971.9244.302br.net',
+'bs.serving-sys.com.36972.9244.302br.net',
+'bs.serving-sys.com.36973.9244.302br.net',
+'bs.serving-sys.com.36974.9244.302br.net',
+'bs.serving-sys.com.36975.9244.302br.net',
+'bs.serving-sys.com.36976.9244.302br.net',
+'bs.serving-sys.com.36977.9244.302br.net',
+'bs.serving-sys.com.36978.9244.302br.net',
+'bs.serving-sys.com.36979.9244.302br.net',
+'bs.serving-sys.com.36980.9244.302br.net',
+'bs.serving-sys.com.36981.9244.302br.net',
+'bs.serving-sys.com.37346.9024.302br.net',
+'bs.serving-sys.com.37348.9024.302br.net',
+'bs.serving-sys.com.37350.9024.302br.net',
+'bs.serving-sys.com.42218.9320.302br.net',
+'bs.serving-sys.com.42219.9320.302br.net',
+'bs.serving-sys.com.42220.9320.302br.net',
+'bs.serving-sys.com.42221.9320.302br.net',
+'bs.serving-sys.com.42222.9320.302br.net',
+'bs.serving-sys.com.42223.9320.302br.net',
+'bs.serving-sys.com.42225.9320.302br.net',
+'bs.serving-sys.com.42226.9320.302br.net',
+'bs.serving-sys.com.42227.9320.302br.net',
+'bs.serving-sys.com.42228.9320.302br.net',
+'bs.serving-sys.com.42229.9320.302br.net',
+'bs.serving-sys.com.42231.9320.302br.net',
+'bs.serving-sys.com.42232.9320.302br.net',
+'bs.serving-sys.com.42233.9320.302br.net',
+'bs.serving-sys.com.42234.9320.302br.net',
+'bs.serving-sys.com.42235.9320.302br.net',
+'bs.serving-sys.com.42237.9320.302br.net',
+'bs.serving-sys.com.42239.9320.302br.net',
+'bs.serving-sys.com.42241.9320.302br.net',
+'bs.serving-sys.com.42242.9320.302br.net',
+'bs.serving-sys.com.42243.9320.302br.net',
+'bs.serving-sys.com.42244.9320.302br.net',
+'bs.serving-sys.com.42245.9320.302br.net',
+'bs.serving-sys.com.42247.9320.302br.net',
+'bs.serving-sys.com.42249.9320.302br.net',
+'bs.serving-sys.com.42250.9320.302br.net',
+'bs.serving-sys.com.42251.9320.302br.net',
+'bs.serving-sys.com.42253.9320.302br.net',
+'bs.serving-sys.com.46966.9349.302br.net',
+'bs.serving-sys.com.46967.9349.302br.net',
+'bs.serving-sys.com.46968.9349.302br.net',
+'bs.serving-sys.com.46969.9349.302br.net',
+'bs.serving-sys.com.46970.9349.302br.net',
+'bs.serving-sys.com.46971.9349.302br.net',
+'bs.serving-sys.com.46973.9349.302br.net',
+'bs.serving-sys.com.46975.9349.302br.net',
+'bs.serving-sys.com.46977.9349.302br.net',
+'bs.serving-sys.com.46979.9349.302br.net',
+'bs.serving-sys.com.46981.9349.302br.net',
+'bs.serving-sys.com.46983.9349.302br.net',
+'bs.serving-sys.com.46984.9349.302br.net',
+'bs.serving-sys.com.46985.9349.302br.net',
+'bs.serving-sys.com.46986.9349.302br.net',
+'bs.serving-sys.com.46987.9349.302br.net',
+'bs.serving-sys.com.46988.9349.302br.net',
+'bs.serving-sys.com.46989.9349.302br.net',
+'bs.serving-sys.com.46990.9349.302br.net',
+'bs.serving-sys.com.46991.9349.302br.net',
+'bs.serving-sys.com.46992.9349.302br.net',
+'bs.serving-sys.com.46993.9349.302br.net',
+'bs.serving-sys.com.46994.9349.302br.net',
+'bs.serving-sys.com.46995.9349.302br.net',
+'bs.serving-sys.com.46996.9349.302br.net',
+'bs.serving-sys.com.46997.9349.302br.net',
+'bs.serving-sys.com.46998.9349.302br.net',
+'bs.serving-sys.com.46999.9349.302br.net',
+'bs.serving-sys.com.47000.9349.302br.net',
+'bs.serving-sys.com.47001.9349.302br.net',
+'bs.serving-sys.com.47003.9349.302br.net',
+'bs.serving-sys.com.47004.9349.302br.net',
+'bs.serving-sys.com.47005.9349.302br.net',
+'bs.serving-sys.com.47006.9349.302br.net',
+'bs.serving-sys.com.47007.9349.302br.net',
+'bs.serving-sys.com.47008.9349.302br.net',
+'bs.serving-sys.com.47009.9349.302br.net',
+'bs.serving-sys.com.47010.9349.302br.net',
+'bs.serving-sys.com.47011.9349.302br.net',
+'bs.serving-sys.com.47012.9349.302br.net',
+'bs.serving-sys.com.47013.9349.302br.net',
+'bs.serving-sys.com.47014.9349.302br.net',
+'bs.serving-sys.com.47015.9349.302br.net',
+'bs.serving-sys.com.47016.9349.302br.net',
+'bs.serving-sys.com.47017.9349.302br.net',
+'bs.serving-sys.com.47019.9349.302br.net',
+'bs.serving-sys.com.47020.9349.302br.net',
+'bs.serving-sys.com.47021.9349.302br.net',
+'bs.serving-sys.com.47022.9349.302br.net',
+'bs.serving-sys.com.47023.9349.302br.net',
+'bs.serving-sys.com.47025.9349.302br.net',
+'bs.serving-sys.com.47026.9349.302br.net',
+'bs.serving-sys.com.47027.9349.302br.net',
+'bs.serving-sys.com.47028.9349.302br.net',
+'bs.serving-sys.com.47029.9349.302br.net',
+'bs.serving-sys.com.47030.9349.302br.net',
+'bs.serving-sys.com.47031.9349.302br.net',
+'bs.serving-sys.com.47032.9349.302br.net',
+'bs.serving-sys.com.47033.9349.302br.net',
+'bs.serving-sys.com.47034.9349.302br.net',
+'bs.serving-sys.com.47035.9349.302br.net',
+'bs.serving-sys.com.47036.9349.302br.net',
+'bs.serving-sys.com.47037.9349.302br.net',
+'bs.serving-sys.com.47038.9349.302br.net',
+'bs.serving-sys.com.47039.9349.302br.net',
+'bs.serving-sys.com.47040.9349.302br.net',
+'bs.serving-sys.com.47041.9349.302br.net',
+'bs.serving-sys.com.47042.9349.302br.net',
+'bs.serving-sys.com.47043.9349.302br.net',
+'bs.serving-sys.com.47044.9349.302br.net',
+'bs.serving-sys.com.47045.9349.302br.net',
+'bs.serving-sys.com.47050.9349.302br.net',
+'bs.serving-sys.com.47051.9349.302br.net',
+'bs.serving-sys.com.47052.9349.302br.net',
+'bs.serving-sys.com.47053.9349.302br.net',
+'bs.serving-sys.com.47054.9349.302br.net',
+'bs.serving-sys.com.47055.9349.302br.net',
+'bs.serving-sys.com.47056.9349.302br.net',
+'bs.serving-sys.com.47057.9349.302br.net',
+'bs.serving-sys.com.47058.9349.302br.net',
+'bs.serving-sys.com.47059.9349.302br.net',
+'bs.serving-sys.com.47060.9349.302br.net',
+'bs.serving-sys.com.47061.9349.302br.net',
+'bs.serving-sys.com.47066.9349.302br.net',
+'bs.serving-sys.com.47067.9349.302br.net',
+'bs.serving-sys.com.47068.9349.302br.net',
+'bs.serving-sys.com.47069.9349.302br.net',
+'bs.serving-sys.com.47070.9349.302br.net',
+'bs.serving-sys.com.47071.9349.302br.net',
+'bs.serving-sys.com.47072.9349.302br.net',
+'bs.serving-sys.com.47073.9349.302br.net',
+'bs.serving-sys.com.47074.9349.302br.net',
+'bs.serving-sys.com.47075.9349.302br.net',
+'bs.serving-sys.com.47076.9349.302br.net',
+'bs.serving-sys.com.47077.9349.302br.net',
+'bs.serving-sys.com.47078.9349.302br.net',
+'bs.serving-sys.com.47079.9349.302br.net',
+'bs.serving-sys.com.47080.9349.302br.net',
+'bs.serving-sys.com.47081.9349.302br.net',
+'bs.serving-sys.com.47082.9349.302br.net',
+'bs.serving-sys.com.47083.9349.302br.net',
+'bs.serving-sys.com.47084.9349.302br.net',
+'bs.serving-sys.com.47085.9349.302br.net',
+'bs.serving-sys.com.47086.9349.302br.net',
+'bs.serving-sys.com.47087.9349.302br.net',
+'bs.serving-sys.com.47088.9349.302br.net',
+'bs.serving-sys.com.47089.9349.302br.net',
+'bs.serving-sys.com.47090.9349.302br.net',
+'bs.serving-sys.com.47091.9349.302br.net',
+'bs.serving-sys.com.47092.9349.302br.net',
+'bs.serving-sys.com.47093.9349.302br.net',
+'bs.serving-sys.com.47094.9349.302br.net',
+'bs.serving-sys.com.47095.9349.302br.net',
+'bs.serving-sys.com.47096.9349.302br.net',
+'bs.serving-sys.com.47097.9349.302br.net',
+'bs.serving-sys.com.47099.9349.302br.net',
+'bs.serving-sys.com.47100.9349.302br.net',
+'bs.serving-sys.com.47101.9349.302br.net',
+'bs.serving-sys.com.47102.9349.302br.net',
+'bs.serving-sys.com.47103.9349.302br.net',
+'bs.serving-sys.com.47105.9349.302br.net',
+'bs.serving-sys.com.47106.9349.302br.net',
+'bs.serving-sys.com.47107.9349.302br.net',
+'bs.serving-sys.com.47108.9349.302br.net',
+'bs.serving-sys.com.47109.9349.302br.net',
+'bs.serving-sys.com.47110.9349.302br.net',
+'bs.serving-sys.com.47111.9349.302br.net',
+'bs.serving-sys.com.47112.9349.302br.net',
+'bs.serving-sys.com.47113.9349.302br.net',
+'bs.serving-sys.com.47114.9349.302br.net',
+'bs.serving-sys.com.47115.9349.302br.net',
+'bs.serving-sys.com.47116.9349.302br.net',
+'bs.serving-sys.com.47117.9349.302br.net',
+'bs.serving-sys.com.47119.9349.302br.net',
+'bs.serving-sys.com.47126.9349.302br.net',
+'bs.serving-sys.com.47127.9349.302br.net',
+'bs.serving-sys.com.47128.9349.302br.net',
+'bs.serving-sys.com.47129.9349.302br.net',
+'bs.serving-sys.com.47132.9349.302br.net',
+'bs.serving-sys.com.47133.9349.302br.net',
+'bs.serving-sys.com.47134.9349.302br.net',
+'bs.serving-sys.com.47135.9349.302br.net',
+'bs.serving-sys.com.47136.9349.302br.net',
+'bs.serving-sys.com.47137.9349.302br.net',
+'bs.serving-sys.com.47138.9349.302br.net',
+'bs.serving-sys.com.47139.9349.302br.net',
+'bs.serving-sys.com.47140.9349.302br.net',
+'bs.serving-sys.com.47141.9349.302br.net',
+'bs.serving-sys.com.47142.9349.302br.net',
+'bs.serving-sys.com.47143.9349.302br.net',
+'bs.serving-sys.com.47144.9349.302br.net',
+'bs.serving-sys.com.47145.9349.302br.net',
+'bs.serving-sys.com.47146.9349.302br.net',
+'bs.serving-sys.com.47147.9349.302br.net',
+'bs.serving-sys.com.47148.9349.302br.net',
+'bs.serving-sys.com.47149.9349.302br.net',
+'bs.serving-sys.com.47150.9349.302br.net',
+'bs.serving-sys.com.47151.9349.302br.net',
+'bs.serving-sys.com.47152.9349.302br.net',
+'bs.serving-sys.com.47153.9349.302br.net',
+'bs.serving-sys.com.47154.9349.302br.net',
+'bs.serving-sys.com.47155.9349.302br.net',
+'bs.serving-sys.com.47156.9349.302br.net',
+'bs.serving-sys.com.47157.9349.302br.net',
+'bs.serving-sys.com.47158.9349.302br.net',
+'bs.serving-sys.com.47159.9349.302br.net',
+'bs.serving-sys.com.47160.9349.302br.net',
+'bs.serving-sys.com.47161.9349.302br.net',
+'bs.serving-sys.com.47162.9349.302br.net',
+'bs.serving-sys.com.47163.9349.302br.net',
+'bs.serving-sys.com.47164.9349.302br.net',
+'bs.serving-sys.com.47165.9349.302br.net',
+'bs.serving-sys.com.47166.9349.302br.net',
+'bs.serving-sys.com.47167.9349.302br.net',
+'bs.serving-sys.com.47168.9349.302br.net',
+'bs.serving-sys.com.47169.9349.302br.net',
+'bs.serving-sys.com.47170.9349.302br.net',
+'bs.serving-sys.com.47171.9349.302br.net',
+'bs.serving-sys.com.47172.9349.302br.net',
+'bs.serving-sys.com.47173.9349.302br.net',
+'bs.serving-sys.com.47174.9349.302br.net',
+'bs.serving-sys.com.47175.9349.302br.net',
+'bs.serving-sys.com.47177.9349.302br.net',
+'bs.serving-sys.com.47178.9349.302br.net',
+'bs.serving-sys.com.47179.9349.302br.net',
+'bs.serving-sys.com.47180.9349.302br.net',
+'bs.serving-sys.com.47181.9349.302br.net',
+'bs.serving-sys.com.47182.9349.302br.net',
+'bs.serving-sys.com.47183.9349.302br.net',
+'bs.serving-sys.com.47184.9349.302br.net',
+'bs.serving-sys.com.47185.9349.302br.net',
+'bs.serving-sys.com.47186.9349.302br.net',
+'bs.serving-sys.com.47187.9349.302br.net',
+'bs.serving-sys.com.47188.9349.302br.net',
+'bs.serving-sys.com.47189.9349.302br.net',
+'bs.serving-sys.com.47190.9349.302br.net',
+'bs.serving-sys.com.47191.9349.302br.net',
+'bs.serving-sys.com.47192.9349.302br.net',
+'bs.serving-sys.com.47193.9349.302br.net',
+'bs.serving-sys.com.47194.9349.302br.net',
+'bs.serving-sys.com.47195.9349.302br.net',
+'bs.serving-sys.com.47196.9349.302br.net',
+'bs.serving-sys.com.47197.9349.302br.net',
+'bs.serving-sys.com.47198.9349.302br.net',
+'bs.serving-sys.com.47199.9349.302br.net',
+'bs.serving-sys.com.47200.9349.302br.net',
+'bs.serving-sys.com.47201.9349.302br.net',
+'bs.serving-sys.com.47202.9349.302br.net',
+'bs.serving-sys.com.47203.9349.302br.net',
+'bs.serving-sys.com.47204.9349.302br.net',
+'bs.serving-sys.com.47205.9349.302br.net',
+'bs.serving-sys.com.47206.9349.302br.net',
+'bs.serving-sys.com.47207.9349.302br.net',
+'bs.serving-sys.com.47208.9349.302br.net',
+'bs.serving-sys.com.47209.9349.302br.net',
+'bs.serving-sys.com.47210.9349.302br.net',
+'bs.serving-sys.com.47211.9349.302br.net',
+'bs.serving-sys.com.47212.9349.302br.net',
+'bs.serving-sys.com.47213.9349.302br.net',
+'bs.serving-sys.com.47214.9349.302br.net',
+'bs.serving-sys.com.47215.9349.302br.net',
+'bs.serving-sys.com.47550.9340.302br.net',
+'bs.serving-sys.com.47746.9354.302br.net.47770.9354.302br.net',
+'bs.serving-sys.com.47770.9354.302br.net',
+'bs.serving-sys.com.47814.9355.302br.net',
+'bs.serving-sys.com.47816.9355.302br.net',
+'bs.serving-sys.com.47818.9355.302br.net',
+'bs.serving-sys.com.47861.9352.302br.net',
+'bs.serving-sys.com.47862.9352.302br.net',
+'bs.serving-sys.com.47863.9352.302br.net',
+'bs.serving-sys.com.47864.9352.302br.net',
+'bs.serving-sys.com.47865.9352.302br.net',
+'bs.serving-sys.com.47866.9352.302br.net',
+'bs.serving-sys.com.47909.9354.302br.net',
+'bs.serving-sys.com.47910.9354.302br.net',
+'bs.serving-sys.com.47911.9354.302br.net',
+'bs.serving-sys.com.47912.9354.302br.net',
+'bs.serving-sys.com.47913.9354.302br.net',
+'bs.serving-sys.com.47914.9354.302br.net',
+'bs.serving-sys.com.49272.9352.302br.net',
+'bs.serving-sys.com.49273.9352.302br.net',
+'bs.serving-sys.com.49274.9352.302br.net',
+'bs.serving-sys.com.49275.9352.302br.net',
+'bs.serving-sys.com.49277.9352.302br.net',
+'bs.serving-sys.com.49279.9352.302br.net',
+'bs.serving-sys.com.49281.9352.302br.net',
+'bs.serving-sys.com.49283.9352.302br.net',
+'bs.serving-sys.com.49285.9352.302br.net',
+'bs.serving-sys.com.49287.9352.302br.net',
+'bs.serving-sys.com.49293.9352.302br.net',
+'bs.serving-sys.com.49295.9352.302br.net',
+'bs.serving-sys.com.49297.9352.302br.net',
+'bs.serving-sys.com.49298.9352.302br.net',
+'bs.serving-sys.com.49299.9352.302br.net',
+'bs.serving-sys.com.49300.9352.302br.net',
+'bs.serving-sys.com.49301.9352.302br.net',
+'bs.serving-sys.com.49302.9352.302br.net',
+'bs.serving-sys.com.49303.9352.302br.net',
+'bs.serving-sys.com.49304.9352.302br.net',
+'bs.serving-sys.com.49305.9352.302br.net',
+'bs.serving-sys.com.49307.9352.302br.net',
+'bs.serving-sys.com.49309.9352.302br.net',
+'bs.serving-sys.com.49311.9352.302br.net',
+'bs.serving-sys.com.49312.9352.302br.net',
+'bs.serving-sys.com.49313.9352.302br.net',
+'bs.serving-sys.com.49314.9355.302br.net',
+'bs.serving-sys.com.49315.9355.302br.net',
+'bs.serving-sys.com.49325.9355.302br.net',
+'bs.serving-sys.com.49343.9355.302br.net',
+'bs.serving-sys.com.49345.9355.302br.net',
+'bs.serving-sys.com.49347.9355.302br.net',
+'bs.serving-sys.com.49349.9355.302br.net',
+'bs.serving-sys.com.49351.9355.302br.net',
+'bs.serving-sys.com.49353.9355.302br.net',
+'bs.serving-sys.com.49359.9355.302br.net',
+'bs.serving-sys.com.49360.9354.302br.net',
+'bs.serving-sys.com.49361.9354.302br.net',
+'bs.serving-sys.com.49363.9354.302br.net',
+'bs.serving-sys.com.49365.9354.302br.net',
+'bs.serving-sys.com.49366.9354.302br.net',
+'bs.serving-sys.com.49367.9354.302br.net',
+'bs.serving-sys.com.49369.9354.302br.net',
+'bs.serving-sys.com.49371.9354.302br.net',
+'bs.serving-sys.com.49373.9354.302br.net',
+'bs.serving-sys.com.49379.9354.302br.net',
+'bs.serving-sys.com.49381.9354.302br.net',
+'bs.serving-sys.com.49383.9354.302br.net',
+'bs.serving-sys.com.49384.9354.302br.net',
+'bs.serving-sys.com.49385.9354.302br.net',
+'bs.serving-sys.com.49386.9354.302br.net',
+'bs.serving-sys.com.49387.9354.302br.net',
+'bs.serving-sys.com.49388.9354.302br.net',
+'bs.serving-sys.com.49389.9354.302br.net',
+'bs.serving-sys.com.49390.9354.302br.net',
+'bs.serving-sys.com.49391.9354.302br.net',
+'bs.serving-sys.com.49392.9354.302br.net',
+'bs.serving-sys.com.49393.9354.302br.net',
+'bs.serving-sys.com.49395.9354.302br.net',
+'bs.serving-sys.com.49397.9354.302br.net',
+'bs.serving-sys.com.49399.9354.302br.net',
+'bs.serving-sys.com.49401.9356.302br.net',
+'bs.serving-sys.com.49403.9356.302br.net',
+'bs.serving-sys.com.49405.9356.302br.net',
+'bs.serving-sys.com.49406.9356.302br.net',
+'bs.serving-sys.com.49407.9356.302br.net',
+'bs.serving-sys.com.49409.9356.302br.net',
+'bs.serving-sys.com.49411.9356.302br.net',
+'bs.serving-sys.com.49413.9356.302br.net',
+'bs.serving-sys.com.49415.9356.302br.net',
+'bs.serving-sys.com.49417.9356.302br.net',
+'bs.serving-sys.com.49434.9354.302br.net',
+'bs.serving-sys.com.49435.9354.302br.net',
+'bs.serving-sys.com.49436.9352.302br.net',
+'bs.serving-sys.com.49437.9352.302br.net',
+'bs.serving-sys.com.49462.9354.302br.net',
+'bs.serving-sys.com.49463.9354.302br.net',
+'bs.serving-sys.com.49464.9354.302br.net',
+'bs.serving-sys.com.49465.9354.302br.net',
+'bs.serving-sys.com.49466.9354.302br.net',
+'bs.serving-sys.com.49467.9354.302br.net',
+'bs.serving-sys.com.49731.9355.302br.net',
+'bs.serving-sys.com.49732.9355.302br.net',
+'bs.serving-sys.com.49733.9354.302br.net',
+'bs.serving-sys.com.49734.9354.302br.net',
+'bs.serving-sys.com.49735.9352.302br.net',
+'bs.serving-sys.com.49736.9352.302br.net',
+'bs.serving-sys.com.55649.9244.302br.net',
+'bs.serving-sys.com.55650.9244.302br.net',
+'bs.serving-sys.com.55651.9244.302br.net',
+'bs.serving-sys.com.55652.9244.302br.net',
+'bs.serving-sys.com.55653.9244.302br.net',
+'bs.serving-sys.com.55654.9244.302br.net',
+'bs.serving-sys.com.55656.9244.302br.net',
+'bs.serving-sys.com.55884.9244.302br.net',
+'bs.serving-sys.com.55885.9244.302br.net',
+'bs.serving-sys.com.55886.9244.302br.net',
+'bs.serving-sys.com.55887.9244.302br.net',
+'bs.serving-sys.com.55888.9244.302br.net',
+'bs.serving-sys.com.55889.9244.302br.net',
+'bs.serving-sys.com.55891.9244.302br.net',
+'bs.serving-sys.com.55900.9244.302br.net',
+'bs.serving-sys.com.55901.9244.302br.net',
+'bs.serving-sys.com.55902.9244.302br.net',
+'bs.serving-sys.com.55903.9244.302br.net',
+'bs.serving-sys.com.55904.9244.302br.net',
+'bs.serving-sys.com.55905.9244.302br.net',
+'bs.serving-sys.com.55907.9244.302br.net',
+'bs.serving-sys.com.56812.9349.302br.net',
+'bs.serving-sys.com.56813.9349.302br.net',
+'bs.serving-sys.com.56814.9349.302br.net',
+'bs.serving-sys.com.56815.9349.302br.net',
+'bs.serving-sys.com.56816.9349.302br.net',
+'bs.serving-sys.com.56817.9349.302br.net',
+'bs.serving-sys.com.56818.9349.302br.net',
+'bs.serving-sys.com.56819.9349.302br.net',
+'bs.serving-sys.com.56820.9349.302br.net',
+'bs.serving-sys.com.56821.9349.302br.net',
+'bs.serving-sys.com.56822.9349.302br.net',
+'bs.serving-sys.com.56823.9349.302br.net',
+'bs.serving-sys.com.56824.9349.302br.net',
+'bs.serving-sys.com.56825.9349.302br.net',
+'bs.serving-sys.com.56826.9349.302br.net',
+'bs.serving-sys.com.56827.9349.302br.net',
+'bs.serving-sys.com.56828.9349.302br.net',
+'bs.serving-sys.com.56829.9349.302br.net',
+'bs.serving-sys.com.56830.9349.302br.net',
+'bs.serving-sys.com.56831.9349.302br.net',
+'bs.serving-sys.com.56832.9349.302br.net',
+'bs.serving-sys.com.56833.9349.302br.net',
+'bs.serving-sys.com.56838.9349.302br.net',
+'bs.serving-sys.com.56839.9349.302br.net',
+'bs.serving-sys.com.56844.9349.302br.net',
+'bs.serving-sys.com.56845.9349.302br.net',
+'bs.serving-sys.com.56846.9349.302br.net',
+'bs.serving-sys.com.56847.9349.302br.net',
+'bs.serving-sys.com.56848.9349.302br.net',
+'bs.serving-sys.com.56849.9349.302br.net',
+'bs.serving-sys.com.56850.9349.302br.net',
+'bs.serving-sys.com.56851.9349.302br.net',
+'bs.serving-sys.com.56852.9349.302br.net',
+'bs.serving-sys.com.56853.9349.302br.net',
+'bs.serving-sys.com.56854.9349.302br.net',
+'bs.serving-sys.com.56855.9349.302br.net',
+'bs.serving-sys.com.56872.9349.302br.net',
+'bs.serving-sys.com.56873.9349.302br.net',
+'bs.serving-sys.com.56874.9349.302br.net',
+'bs.serving-sys.com.56875.9349.302br.net',
+'bs.serving-sys.com.56876.9349.302br.net',
+'bs.serving-sys.com.56877.9349.302br.net',
+'bs.serving-sys.com.56879.9349.302br.net',
+'bs.serving-sys.com.56883.9349.302br.net',
+'bs.serving-sys.com.56884.9349.302br.net',
+'bs.serving-sys.com.56885.9349.302br.net',
+'bs.serving-sys.com.56886.9349.302br.net',
+'bs.serving-sys.com.56887.9349.302br.net',
+'bs.serving-sys.com.56889.9349.302br.net',
+'bs.serving-sys.com.56890.9400.302br.net',
+'bs.serving-sys.com.56891.9400.302br.net',
+'bs.serving-sys.com.56892.9400.302br.net',
+'bs.serving-sys.com.56893.9400.302br.net',
+'bs.serving-sys.com.56894.9400.302br.net',
+'bs.serving-sys.com.56895.9400.302br.net',
+'bs.serving-sys.com.57841.9414.302br.net',
+'bs.serving-sys.com.57842.9414.302br.net',
+'bs.serving-sys.com.57843.9414.302br.net',
+'bs.serving-sys.com.57844.9414.302br.net',
+'bs.serving-sys.com.57845.9414.302br.net',
+'bs.serving-sys.com.57846.9414.302br.net',
+'bs.serving-sys.com.57847.9414.302br.net',
+'bs.serving-sys.com.57848.9414.302br.net',
+'bs.serving-sys.com.57849.9414.302br.net',
+'bs.serving-sys.com.57850.9414.302br.net',
+'bs.serving-sys.com.57851.9414.302br.net',
+'bs.serving-sys.com.57852.9414.302br.net',
+'bs.serving-sys.com.57853.9414.302br.net',
+'bs.serving-sys.com.57854.9414.302br.net',
+'bs.serving-sys.com.57855.9414.302br.net',
+'bs.serving-sys.com.57856.9414.302br.net',
+'bs.serving-sys.com.57857.9414.302br.net',
+'bs.serving-sys.com.57858.9414.302br.net',
+'bs.serving-sys.com.57859.9414.302br.net',
+'bs.serving-sys.com.57860.9414.302br.net',
+'bs.serving-sys.com.57861.9414.302br.net',
+'bs.serving-sys.com.57862.9414.302br.net',
+'bs.serving-sys.com.57863.9414.302br.net',
+'bs.serving-sys.com.57864.9414.302br.net',
+'bs.serving-sys.com.57865.9414.302br.net',
+'bs.serving-sys.com.57866.9414.302br.net',
+'bs.serving-sys.com.57867.9414.302br.net',
+'bs.serving-sys.com.57868.9414.302br.net',
+'bs.serving-sys.com.57869.9414.302br.net',
+'bs.serving-sys.com.57870.9414.302br.net',
+'bs.serving-sys.com.57871.9414.302br.net',
+'bs.serving-sys.com.57872.9414.302br.net',
+'bs.serving-sys.com.57873.9414.302br.net',
+'bs.serving-sys.com.57874.9414.302br.net',
+'bs.serving-sys.com.57875.9414.302br.net',
+'bs.serving-sys.com.57876.9414.302br.net',
+'bs.serving-sys.com.57878.9414.302br.net',
+'bs.serving-sys.com.57880.9414.302br.net',
+'bs.serving-sys.com.57882.9414.302br.net',
+'bs.serving-sys.com.57884.9414.302br.net',
+'bs.serving-sys.com.57886.9414.302br.net',
+'bs.serving-sys.com.57888.9414.302br.net',
+'bs.serving-sys.com.57889.9414.302br.net',
+'bs.serving-sys.com.57890.9414.302br.net',
+'bs.serving-sys.com.57892.9414.302br.net',
+'bs.serving-sys.com.57893.9414.302br.net',
+'bs.serving-sys.com.57894.9414.302br.net',
+'bs.serving-sys.com.57895.9414.302br.net',
+'bs.serving-sys.com.57896.9414.302br.net',
+'bs.serving-sys.com.57897.9414.302br.net',
+'bs.serving-sys.com.57898.9414.302br.net',
+'bs.serving-sys.com.57899.9414.302br.net',
+'bs.serving-sys.com.57900.9414.302br.net',
+'bs.serving-sys.com.60478.9349.302br.net',
+'bs.serving-sys.com.60479.9349.302br.net',
+'bs.serving-sys.com.71531.9356.302br.net',
+'bs.serving-sys.com.71533.9356.302br.net',
+'bs.serving-sys.com.71534.9356.302br.net',
+'bs.serving-sys.com.71535.9356.302br.net',
+'bs.serving-sys.com.71537.9356.302br.net',
+'bs.serving-sys.com.71538.9356.302br.net',
+'bs.serving-sys.com.71539.9356.302br.net',
+'bs.serving-sys.com.71540.9356.302br.net',
+'bs.serving-sys.com.71541.9356.302br.net',
+'bs.serving-sys.com.71548.9356.302br.net',
+'bs.serving-sys.com.71549.9356.302br.net',
+'bs.serving-sys.com.71550.9356.302br.net',
+'bs.serving-sys.com.71551.9356.302br.net',
+'bs.serving-sys.com.71552.9356.302br.net',
+'bs.serving-sys.com.71553.9356.302br.net',
+'bs.serving-sys.com.71554.9356.302br.net',
+'bs.serving-sys.com.71555.9356.302br.net',
+'bs.serving-sys.com.71556.9356.302br.net',
+'bs.serving-sys.com.71557.9356.302br.net',
+'bs.serving-sys.com.71558.9356.302br.net',
+'bs.serving-sys.com.71559.9356.302br.net',
+'bs.serving-sys.com.71560.9356.302br.net',
+'bs.serving-sys.com.71561.9356.302br.net',
+'bs.serving-sys.com.71562.9356.302br.net',
+'bs.serving-sys.com.71563.9356.302br.net',
+'bs.serving-sys.com.71564.9356.302br.net',
+'bs.serving-sys.com.71565.9356.302br.net',
+'bs.serving-sys.com.71567.9356.302br.net',
+'bs.serving-sys.com.71575.9356.302br.net',
+'bs.serving-sys.com.71576.9356.302br.net',
+'bs.serving-sys.com.71577.9356.302br.net',
+'bs.serving-sys.com.71578.9356.302br.net',
+'bs.serving-sys.com.71579.9356.302br.net',
+'bs.serving-sys.com.71581.9356.302br.net',
+'bs.serving-sys.com.71582.9356.302br.net',
+'bs.serving-sys.com.71583.9356.302br.net',
+'bs.serving-sys.com.72249.9400.302br.net',
+'bs.serving-sys.com.72250.9400.302br.net',
+'bs.serving-sys.com.72251.9400.302br.net',
+'bs.serving-sys.com.72252.9400.302br.net',
+'bs.serving-sys.com.72253.9400.302br.net',
+'bs.serving-sys.com.72255.9400.302br.net',
+'bs.serving-sys.com.72257.9400.302br.net',
+'bs.serving-sys.com.72259.9400.302br.net',
+'bs.serving-sys.com.72261.9400.302br.net',
+'bs.serving-sys.com.72263.9400.302br.net',
+'bs.serving-sys.com.72264.9400.302br.net',
+'bs.serving-sys.com.72265.9400.302br.net',
+'bs.serving-sys.com.76235.9639.302br.net',
+'bs.serving-sys.com.76236.9639.302br.net',
+'bs.serving-sys.com.76237.9639.302br.net',
+'bs.serving-sys.com.76238.9639.302br.net',
+'bs.serving-sys.com.76239.9639.302br.net',
+'bs.serving-sys.com.76240.9639.302br.net',
+'bs.serving-sys.com.76243.9639.302br.net',
+'bs.serving-sys.com.76244.9639.302br.net',
+'bs.serving-sys.com.76245.9639.302br.net',
+'bs.serving-sys.com.76246.9639.302br.net',
+'bs.serving-sys.com.76247.9639.302br.net',
+'bs.serving-sys.com.76248.9639.302br.net',
+'bs.serving-sys.com.76249.9639.302br.net',
+'bs.serving-sys.com.76250.9639.302br.net',
+'bs.serving-sys.com.76251.9639.302br.net',
+'bs.serving-sys.com.76252.9639.302br.net',
+'bs.serving-sys.com.76253.9639.302br.net',
+'bs.serving-sys.com.76254.9639.302br.net',
+'bs.serving-sys.com.76255.9639.302br.net',
+'bs.serving-sys.com.76256.9639.302br.net',
+'bs.serving-sys.com.76257.9639.302br.net',
+'bs.serving-sys.com.76258.9639.302br.net',
+'bs.serving-sys.com.76259.9639.302br.net',
+'bs.serving-sys.com.76260.9639.302br.net',
+'bs.serving-sys.com.76261.9639.302br.net',
+'bs.serving-sys.com.76262.9639.302br.net',
+'bs.serving-sys.com.76263.9639.302br.net',
+'bs.serving-sys.com.76264.9639.302br.net',
+'bs.serving-sys.com.76265.9639.302br.net',
+'bs.serving-sys.com.76266.9639.302br.net',
+'bs.serving-sys.com.76267.9639.302br.net',
+'bs.serving-sys.com.76268.9639.302br.net',
+'bs.serving-sys.com.76269.9639.302br.net',
+'bs.serving-sys.com.76270.9639.302br.net',
+'bs.serving-sys.com.76271.9639.302br.net',
+'bs.serving-sys.com.76272.9639.302br.net',
+'bs.serving-sys.com.76273.9639.302br.net',
+'bs.serving-sys.com.76274.9639.302br.net',
+'bs.serving-sys.com.76275.9639.302br.net',
+'bs.serving-sys.com.76276.9639.302br.net',
+'bs.serving-sys.com.76277.9639.302br.net',
+'bs.serving-sys.com.76278.9639.302br.net',
+'bs.serving-sys.com.76279.9639.302br.net',
+'bs.serving-sys.com.76280.9639.302br.net',
+'bs.serving-sys.com.76281.9639.302br.net',
+'bs.serving-sys.com.76282.9639.302br.net',
+'bs.serving-sys.com.76283.9639.302br.net',
+'bs.serving-sys.com.76284.9639.302br.net',
+'bs.serving-sys.com.76285.9639.302br.net',
+'bs.serving-sys.com.76286.9639.302br.net',
+'bs.serving-sys.com.76288.9639.302br.net',
+'bs.serving-sys.com.76290.9639.302br.net',
+'bs.serving-sys.com.76291.9639.302br.net',
+'bs.serving-sys.com.76292.9639.302br.net',
+'bs.serving-sys.com.76293.9639.302br.net',
+'bs.serving-sys.com.76294.9639.302br.net',
+'bs.serving-sys.com.76296.9638.302br.net',
+'bs.serving-sys.com.76298.9638.302br.net',
+'bs.serving-sys.com.76300.9638.302br.net',
+'bs.serving-sys.com.76302.9638.302br.net',
+'bs.serving-sys.com.76304.9638.302br.net',
+'bs.serving-sys.com.76306.9638.302br.net',
+'bs.serving-sys.com.76308.9638.302br.net',
+'bs.serving-sys.com.76310.9638.302br.net',
+'bs.serving-sys.com.76312.9638.302br.net',
+'bs.serving-sys.com.76314.9638.302br.net',
+'bs.serving-sys.com.76316.9638.302br.net',
+'bs.serving-sys.com.76318.9638.302br.net',
+'bs.serving-sys.com.76320.9638.302br.net',
+'bs.serving-sys.com.76322.9638.302br.net',
+'bs.serving-sys.com.76324.9638.302br.net',
+'bs.serving-sys.com.76326.9638.302br.net',
+'bs.serving-sys.com.76328.9638.302br.net',
+'bs.serving-sys.com.76330.9638.302br.net',
+'bs.serving-sys.com.76332.9638.302br.net',
+'bs.serving-sys.com.76334.9638.302br.net',
+'bs.serving-sys.com.76336.9638.302br.net',
+'bs.serving-sys.com.76338.9638.302br.net',
+'bs.serving-sys.com.76340.9638.302br.net',
+'bs.serving-sys.com.76342.9638.302br.net',
+'bs.serving-sys.com.76344.9638.302br.net',
+'bs.serving-sys.com.76346.9638.302br.net',
+'bs.serving-sys.com.76348.9638.302br.net',
+'bs.serving-sys.com.76350.9638.302br.net',
+'bs.serving-sys.com.76352.9638.302br.net',
+'bs.serving-sys.com.76354.9638.302br.net',
+'bs.serving-sys.com.76356.9638.302br.net',
+'bs.serving-sys.com.76358.9638.302br.net',
+'bs.serving-sys.com.76360.9638.302br.net',
+'bs.serving-sys.com.76362.9638.302br.net',
+'bs.serving-sys.com.76364.9638.302br.net',
+'bs.serving-sys.com.76366.9638.302br.net',
+'bs.serving-sys.com.76368.9638.302br.net',
+'bs.serving-sys.com.76370.9638.302br.net',
+'bs.serving-sys.com.76372.9638.302br.net',
+'bs.serving-sys.com.76374.9638.302br.net',
+'bs.serving-sys.com.76376.9638.302br.net',
+'bs.serving-sys.com.76378.9638.302br.net',
+'bs.serving-sys.com.76380.9638.302br.net',
+'bs.serving-sys.com.76382.9638.302br.net',
+'bs.serving-sys.com.76384.9638.302br.net',
+'bs.serving-sys.com.76386.9638.302br.net',
+'bs.serving-sys.com.76388.9638.302br.net',
+'bs.serving-sys.com.76390.9638.302br.net',
+'bs.serving-sys.com.76392.9638.302br.net',
+'bs.serving-sys.com.76396.9638.302br.net',
+'bs.serving-sys.com.76398.9638.302br.net',
+'bs.serving-sys.com.76400.9638.302br.net',
+'bs.serving-sys.com.76402.9638.302br.net',
+'bs.serving-sys.com.76404.9638.302br.net',
+'bs.serving-sys.com.76406.9638.302br.net',
+'bs.serving-sys.com.76408.9638.302br.net',
+'bs.serving-sys.com.76410.9638.302br.net',
+'bs.serving-sys.com.76412.9638.302br.net',
+'bs.serving-sys.com.76414.9638.302br.net',
+'bs.serving-sys.com.76511.9643.302br.net',
+'bs.serving-sys.com.76512.9643.302br.net',
+'bs.serving-sys.com.76513.9643.302br.net',
+'bs.serving-sys.com.76514.9643.302br.net',
+'bs.serving-sys.com.76515.9643.302br.net',
+'bs.serving-sys.com.76516.9643.302br.net',
+'bs.serving-sys.com.76517.9643.302br.net',
+'bs.serving-sys.com.76518.9643.302br.net',
+'bs.serving-sys.com.76519.9643.302br.net',
+'bs.serving-sys.com.76520.9643.302br.net',
+'bs.serving-sys.com.76521.9643.302br.net',
+'bs.serving-sys.com.76522.9643.302br.net',
+'bs.serving-sys.com.76523.9643.302br.net',
+'bs.serving-sys.com.76524.9643.302br.net',
+'bs.serving-sys.com.76525.9643.302br.net',
+'bs.serving-sys.com.76526.9643.302br.net',
+'bs.serving-sys.com.76528.9643.302br.net',
+'bs.serving-sys.com.76826.9639.302br.net',
+'bs.serving-sys.com.77422.9656.302br.net',
+'bs.serving-sys.com.77423.9656.302br.net',
+'bs.serving-sys.com.77424.9656.302br.net',
+'bs.serving-sys.com.77425.9656.302br.net',
+'bs.serving-sys.com.77426.9656.302br.net',
+'bs.serving-sys.com.77427.9656.302br.net',
+'bs.serving-sys.com.77428.9656.302br.net',
+'bs.serving-sys.com.77429.9656.302br.net',
+'bs.serving-sys.com.77430.9656.302br.net',
+'bs.serving-sys.com.77431.9656.302br.net',
+'bs.serving-sys.com.77432.9656.302br.net',
+'bs.serving-sys.com.77433.9656.302br.net',
+'bs.serving-sys.com.77437.9657.302br.net',
+'bs.serving-sys.com.77523.9639.302br.net',
+'bs.serving-sys.com.77524.9639.302br.net',
+'bs.serving-sys.com.77525.9639.302br.net',
+'bs.serving-sys.com.77526.9639.302br.net',
+'bs.serving-sys.com.77562.9244.302br.net',
+'bs.serving-sys.com.77563.9244.302br.net',
+'bs.serving-sys.com.77564.9244.302br.net',
+'bs.serving-sys.com.77565.9244.302br.net',
+'bs.serving-sys.com.77566.9244.302br.net',
+'bs.serving-sys.com.77567.9244.302br.net',
+'bs.serving-sys.com.77569.9244.302br.net',
+'bs.serving-sys.com.77574.9244.302br.net',
+'bs.serving-sys.com.77575.9244.302br.net',
+'bs.serving-sys.com.77576.9244.302br.net',
+'bs.serving-sys.com.77577.9244.302br.net',
+'bs.serving-sys.com.77578.9244.302br.net',
+'bs.serving-sys.com.77579.9244.302br.net',
+'bs.serving-sys.com.78482.9639.302br.net',
+'bs.serving-sys.com.78483.9639.302br.net',
+'bs.serving-sys.com.78484.9639.302br.net',
+'bs.serving-sys.com.78485.9639.302br.net',
+'bs.serving-sys.com.78486.9639.302br.net',
+'bs.serving-sys.com.78487.9639.302br.net',
+'bs.serving-sys.com.78488.9639.302br.net',
+'bs.serving-sys.com.78489.9639.302br.net',
+'bs.serving-sys.com.78491.9638.302br.net',
+'bs.serving-sys.com.78493.9638.302br.net',
+'bs.serving-sys.com.78495.9638.302br.net',
+'bs.serving-sys.com.78497.9638.302br.net',
+'bs.serving-sys.com.78499.9655.302br.net',
+'bs.serving-sys.com.78501.9655.302br.net',
+'bs.serving-sys.com.78503.9655.302br.net',
+'bs.serving-sys.com.78505.9655.302br.net',
+'bs.yandex.ru',
+'bs50tds.com',
+'bsaig.voluumtrk.com',
+'bsch.serving-sys.com',
+'bshha.voluumtrk.com',
+'bsitm3.com',
+'bsrv.adohana.com',
+'bt.rcs.it',
+'bt.tt.omtrdc.net',
+'btdirectnav.com',
+'bte5z.voluumtrk.com',
+'btg.mtvnservices.com',
+'btnativedirect.com',
+'btnativenav.com',
+'btprmnav.com',
+'btr.domywife.com',
+'btrace.qq.com',
+'btsportandroid.2cnt.net',
+'btsportdotcom.2cnt.net',
+'btsportios.2cnt.net',
+'btstats.devtribu.fr',
+'bttrack.com',
+'btttag.com',
+'btvkojstaenioid.review',
+'btw.ero-advertising.com',
+'btwwu.voluumtrk.com',
+'btz9j.voluumtrk.com',
+'bucataras.2cnt.net',
+'buchch02.webtrekk.net',
+'buchde02.webtrekk.net',
+'bucketsofbanners.com',
+'bucksense.go2cloud.org',
+'budgetedbauer.com',
+'budsinc.com',
+'bugsense.appspot.com',
+'bugsense.com',
+'bugstest.adition.com',
+'builder.com',
+'builder.extensionfactory.com',
+'buildtraffic.com',
+'buildtrafficx.com',
+'builfico.de',
+'bujrc.voluumtrk.com',
+'bukalapak-com.b.appier.net',
+'buket7.justclick.ru',
+'buldog-stats.com',
+'bullseye-media.net',
+'bullseye-network.com',
+'bullseye-network.net',
+'bumerang.hurriyet.com.tr',
+'bunchofads.com',
+'bungeysswkhiug.download',
+'bunitd.com',
+'bunnyaqsuze.download',
+'bunte.de.intellitxt.com',
+'buongiorno.go2cloud.org',
+'burbledchxtg.download',
+'burns.adtech.fr',
+'burrowmkoylvrnd.download',
+'burweednxakod.download',
+'business.opera.com',
+'business.realtracker.com',
+'business.sharedcount.com',
+'businessweekpoc.112.2o7.net',
+'buttcandy.com',
+'button.clickability.com',
+'buxflow.com',
+'buy.com',
+'buy.thetrackr.com',
+'buy2.go2cloud.org',
+'buyhitscheap.com',
+'buystream.com',
+'buysub.com',
+'buytraf.ru',
+'buzz.igg.com',
+'buzzadnetwork.com',
+'buzzfeed.d1.sc.omtrdc.net',
+'buzzreferrals.go2cloud.org',
+'bvalit.justclick.ru',
+'bvgszzfifing.review',
+'bvoau.voluumtrk.com',
+'bvsrv.adk2x.com',
+'bwhcj.voluumtrk.com',
+'bwin90.com',
+'bwlwtdevilings.review',
+'bwp.download.com',
+'bwp.theinsider.com.com',
+'bwzqltlcfprimacies.review',
+'bx.clickmedia.ro',
+'bxsql.clickmedia.ro',
+'bxtop.voluumtrk.com',
+'by.advertising.com',
+'bytecenter.com',
+'byxng.voluumtrk.com',
+'bzpibgazalternant.review',
+'bzpkv.voluumtrk.com',
+'c-col.com',
+'c-evt.moatads.com',
+'c-on-text.com',
+'c.9388.com',
+'c.a2g-secure.com',
+'c.actiondesk.com',
+'c.ad.ru',
+'c.ad6media.fr',
+'c.admaster.com.cn',
+'c.admob.com',
+'c.ads.com',
+'c.afftrx.com',
+'c.algovid.com',
+'c.am11.ru',
+'c.am15.net',
+'c.amazon-adsystem.com',
+'c.aol.com',
+'c.apple.com',
+'c.atdmt.com',
+'c.ato.mx',
+'c.betrad.com',
+'c.bigmir.net',
+'c.bing.com',
+'c.bizjournals.com',
+'c.c.appier.net',
+'c.casalemedia.com',
+'c.cblevt.com',
+'c.chango.com',
+'c.chartboost.com',
+'c.cldlr.com',
+'c.cnzz.com',
+'c.cocacola.co.jp',
+'c.computerbild.de',
+'c.coolshader.com',
+'c.cpa6.ru',
+'c.cpl2.ru',
+'c.domob.cn',
+'c.gdt.qq.com',
+'c.go-mpulse.net',
+'c.greystripe.com',
+'c.gumgum.com',
+'c.hit.ua',
+'c.kakaku.com',
+'c.l.qq.com',
+'c.la1w1.salesforceliveagent.com',
+'c.live.com',
+'c.medialytics.com',
+'c.microsoft.com',
+'c.mobhubrdrms.com',
+'c.mobpartner.mobi',
+'c.mscimg.com',
+'c.msn.com',
+'c.msnbc.com',
+'c.munmedtrflow.com',
+'c.netu.tv',
+'c.newsinc.com',
+'c.ns.inbox.lv',
+'c.orange.fr',
+'c.p-advg.com',
+'c.pebblemedia.be',
+'c.perlentaucher.de',
+'c.popunderz.com',
+'c.rhapsody.com',
+'c.rmgserving.com',
+'c.sahcdn.com',
+'c.securepaths.com',
+'c.smartclick.net',
+'c.spiegel.de',
+'c.statcounter.com',
+'c.t4ft.de',
+'c.teromil.com',
+'c.thanksearch.com',
+'c.us1.dyntrk.com',
+'c.viewsecure.net',
+'c.vindicosuite.com',
+'c.vrvm.com',
+'c.vserv.mobi',
+'c.w.inmobi.com',
+'c.webengage.com',
+'c.woopic.com',
+'c.wrating.com',
+'c.x.oanda.com',
+'c.xbox.com',
+'c.zeroredirect1.com',
+'c01.brickoffers.com',
+'c02qds.2cnt.net',
+'c0u8w.voluumtrk.com',
+'c1.adform.net',
+'c1.amazingcounters.com',
+'c1.gostats.com',
+'c1.gostats.de',
+'c1.gostats.ir',
+'c1.gostats.pl',
+'c1.gostats.ro',
+'c1.gostats.ru',
+'c1.gostats.vn',
+'c1.microsoft.com',
+'c1.nowlinux.com',
+'c1.onedmp.com',
+'c1.outster.com',
+'c1.popads.net',
+'c1.rfihub.net',
+'c1.smartclick.net',
+'c1.statcounter.com',
+'c1.xxxcounter.com',
+'c1.zedo.com',
+'c10.statcounter.com',
+'c11.statcounter.com',
+'c12.statcounter.com',
+'c124830.conv.btrll.com',
+'c13.statcounter.com',
+'c13.zedo.com',
+'c14.statcounter.com',
+'c14.zedo.com',
+'c15.statcounter.com',
+'c16.statcounter.com',
+'c17.statcounter.com',
+'c18.statcounter.com',
+'c2.amazingcounters.com',
+'c2.campartner.com',
+'c2.clickprotects.com',
+'c2.gostats.com',
+'c2.gostats.de',
+'c2.gostats.ir',
+'c2.gostats.pl',
+'c2.gostats.ro',
+'c2.gostats.ru',
+'c2.gostats.vn',
+'c2.outster.com',
+'c2.popads.net',
+'c2.rfihub.net',
+'c2.statcounter.com',
+'c2.taboola.com',
+'c2.xxxcounter.com',
+'c2.zedo.com',
+'c22i.categoria.hpg.com.br',
+'c28.statcounter.com',
+'c2mtrack01.track.c2m00b.net',
+'c2path.com',
+'c2x4s.voluumtrk.com',
+'c3.amazingcounters.com',
+'c3.gostats.com',
+'c3.gostats.de',
+'c3.gostats.pl',
+'c3.gostats.ro',
+'c3.gostats.ru',
+'c3.gostats.vn',
+'c3.outster.com',
+'c3.statcounter.com',
+'c3.xxxcounter.com',
+'c3.zedo.com',
+'c32.statcounter.com',
+'c3ad7.voluumtrk.com',
+'c3onlinemarketing.com',
+'c4.amazingcounters.com',
+'c4.gostats.com',
+'c4.gostats.de',
+'c4.gostats.ir',
+'c4.gostats.pl',
+'c4.gostats.ro',
+'c4.gostats.vn',
+'c4.statcounter.com',
+'c4.zedo.com',
+'c41.statcounter.com',
+'c44.statcounter.com',
+'c479636.r36.cf2.rackcdn.com',
+'c479842.r42.cf2.rackcdn.com',
+'c4android.2cnt.net',
+'c4androidtest.2cnt.net',
+'c4dk1.voluumtrk.com',
+'c4dotcom.2cnt.net',
+'c4dotcomtest.2cnt.net',
+'c4fbb.voluumtrk.com',
+'c4ios.2cnt.net',
+'c4iostest.2cnt.net',
+'c4tracking01.com',
+'c5.amazingcounters.com',
+'c5.gostats.com',
+'c5.gostats.de',
+'c5.gostats.ir',
+'c5.gostats.pl',
+'c5.gostats.ro',
+'c5.gostats.ru',
+'c5.gostats.vn',
+'c5.statcounter.com',
+'c5.zedo.com',
+'c52c-10ac-3ffc-3a18.reporo.net',
+'c5android.2cnt.net',
+'c5androidtest.2cnt.net',
+'c5dotcom.2cnt.net',
+'c5dotcomtest.2cnt.net',
+'c5ios.2cnt.net',
+'c5iostest.2cnt.net',
+'c5k.site',
+'c5vup.voluumtrk.com',
+'c6.amazingcounters.com',
+'c6.statcounter.com',
+'c6.zedo.com',
+'c60.smaato.net',
+'c7.amazingcounters.com',
+'c7.statcounter.com',
+'c7.zedo.com',
+'c74vr.voluumtrk.com',
+'c753738.r38.cf2.rackcdn.com',
+'c8.amazingcounters.com',
+'c8.net.ua',
+'c8.statcounter.com',
+'c8.zedo.com',
+'c829aeaf4090c1289783-9ad4110c8011547ec25e241b917b5aab.r35.cf2.rackcdn.com',
+'c8j4u.voluumtrk.com',
+'c9.amazingcounters.com',
+'c97a-b910-eb5b-b0b8.reporo.net',
+'c9k4p.voluumtrk.com',
+'ca.2.cqcounter.com',
+'ca.akamai.startappservice.com',
+'ca.clickinc.com',
+'ca.cqcounter.com',
+'ca.livestat.com',
+'ca305656.luckyorange.com',
+'caartoonnetwork.com',
+'caasco.go2cloud.org',
+'cabernetdzzafeak.download',
+'cabgdhscnubbier.review',
+'cache-ssl.celtra.com',
+'cache.addthiscdn.com',
+'cache.adfeedstrk.com',
+'cache.adviva.net',
+'cache.betweendigital.com',
+'cache.brandreachsys.com',
+'cache.btrll.com',
+'cache.celtra.com',
+'cache.enic.cc',
+'cache.imagehost123.com',
+'cache.microad.jp',
+'cache.osttirol-online.at',
+'cache.scbih.com',
+'cache.ssend.microad.jp',
+'cache.unicast.com.edgesuite.net',
+'cache.usabilla.com',
+'cache.worldfriends.tv',
+'cache2.delvenetworks.com',
+'cachebanners.toteme.com',
+'cade.clmbtech.com',
+'cadreon.s3.amazonaws.com',
+'cads.ch',
+'cadvv.heraldm.com',
+'cadvv.koreaherald.com',
+'cafarducqhonk.download',
+'cagilycgkwt.download',
+'calendar.adition.com',
+'calendar.apptornado.com',
+'calendar.chartboost.com',
+'calendar.kissmetrics.com',
+'calendar.performancerevenues.com',
+'calendar.zedo.com',
+'calfxvpqle.download',
+'call-tracking.co.uk',
+'callfire.com',
+'callloop.com',
+'calltoadagency.go2affise.com',
+'cameraboys.com',
+'camisekwqhbehs.download',
+'campaign-tapad.s3.amazonaws.com',
+'campaignheroes.go2cloud.org',
+'campaignmonitor.com',
+'campaigns.f2.com.au',
+'campaigns.rioseo.com',
+'campaigntracking01.com',
+'campf.voluumtrk.com',
+'camsiteonline.wiredcircular.com',
+'camz.tintel.nl',
+'can.you.shut.the.fuck.up.at.bnex.com',
+'candidclicks.com',
+'candlingbploxcq.download',
+'candyadz.go2affise.com',
+'cantatricekrwutrlj.download',
+'cantedmxcndjhm.download',
+'canvas-advert.ru',
+'canvaspl-a.akamaihd.net',
+'canwest.112.207.net',
+'canwest.112.2o7.net',
+'canwestdose.112.2o7.net',
+'capquestglobal.com',
+'caprewards.go2cloud.org',
+'capsizalsoxdxke.download',
+'captivau.go2affise.com',
+'capture.trackjs.com',
+'carambo.la',
+'carbonads.com',
+'careers.112.2o7.net',
+'carhopyewiqzlmz.download',
+'carleton.com',
+'carmunity.de',
+'carrierapptraffic.go2affise.com',
+'cars.ign.us.intellitxt.com',
+'cartonetwork.com',
+'cartoonnrtwork.com',
+'cas.criteo.com',
+'cas.criteo.com.68099.9533.302br.net',
+'cas.pxl.ace.advertising.com',
+'casalemedia.com',
+'casalmedia.com',
+'cascade.madmimi.com',
+'case.clmbtech.com',
+'cash.atkcash.com',
+'cash.femjoy.com',
+'cash.neweramediaworks.com',
+'cash4banner.de',
+'cash4files.com',
+'cash4popup.de',
+'cash4views.de',
+'cash4webmaster.de',
+'cashadsllc.go2cloud.org',
+'cashassociate.com',
+'cashcashpinoy-com.b.appier.net',
+'cashcount.com',
+'cashcount.de',
+'cashcrate.com',
+'cashengines.com',
+'cashfiesta.com',
+'cashforclicks.com',
+'cashforsurveys.com',
+'cashforsurveys.net',
+'cashlayer.com',
+'cashmylinks.com',
+'cashpartner.com',
+'cashpartner.net',
+'cashprom.ru',
+'cashspace.com',
+'cashtrafic.com',
+'cashuniversity.go2cloud.org',
+'casinogames.com',
+'casinorewards.com',
+'casinotraffic.com',
+'casinotreasure.com',
+'casof.voluumtrk.com',
+'cast.ra.icast.cn',
+'cat.fr.eu.criteo.com',
+'cata.ero-advertising.com',
+'catalogizeagvztfrmt.download',
+'catharon.com',
+'catheterpokfwbwp.download',
+'catoonetwork.com',
+'cavalcadesvmrkjv.download',
+'cb.adprofile.net',
+'cb.amazingcounters.com',
+'cb1.counterbot.com',
+'cbanners.virtuagirlhd.com',
+'cbaol.112.2o7.net',
+'cbeckads.com',
+'cben1.net',
+'cbgoto.com',
+'cbird.sextracker.com',
+'cbird4.sextracker.com',
+'cbird6.sextracker.com',
+'cbjs.baidu.com',
+'cblevt.com',
+'cbm02.webtrekk.net',
+'cbmsn.112.2o7.net',
+'cbn.tbn.ru',
+'cbs.wondershare.com',
+'cbsi.demdex.net',
+'cbsmarket.com',
+'cbsncaasports.112.2o7.net',
+'cbsnfl.112.2o7.net',
+'cbspgatour.112.2o7.net',
+'cbsspln.112.2o7.net',
+'cbvtest.2cnt.net',
+'cbx.net',
+'cc.amazingcounters.com',
+'cc.chango.com',
+'cc.connextra.com',
+'cc.zeit.de',
+'cc03-41cf-c2ea-3a84.reporo.net',
+'cc54-ed21-fc7f-e519.reporo.net',
+'ccamholdings.go2cloud.org',
+'ccas.clearchannel.com',
+'ccc01.opinionlab.com',
+'cclfx.voluumtrk.com',
+'cclrn.voluumtrk.com',
+'ccn2n.voluumtrk.com',
+'ccran.com',
+'ccs.infospace.com',
+'ccstatic.highwebmedia.com',
+'cd-ladsp-com.s3.amazonaws.com',
+'cdate.122.2o7.net',
+'cdlqzpenearer.review',
+'cdmagurus.us.intellitxt.com',
+'cdn-0.pics.dvdcdn.com',
+'cdn-akamai.mookie1.com',
+'cdn-ci34.actonsoftware.com',
+'cdn-gl.imrworldwide.com',
+'cdn-highwinds.unityads.unity3d.com',
+'cdn-i.dmdentertainment.com',
+'cdn-tags.mmondi.com',
+'cdn-www.madblast.com',
+'cdn-wx.rainbowtgx.com',
+'cdn.2app.lk',
+'cdn.2xbpub.com',
+'cdn.ad-maven.com',
+'cdn.ad.maist.jp',
+'cdn.adbrau.com',
+'cdn.addnow.com',
+'cdn.adengine.org',
+'cdn.adfoc.us',
+'cdn.adikteev.com',
+'cdn.adk2.com',
+'cdn.adkreator.com',
+'cdn.adnxs.com',
+'cdn.adnxs.com.44946.9340.302br.net',
+'cdn.adonads.com',
+'cdn.adorikacontentportal.com',
+'cdn.adplxmd.com',
+'cdn.adrolays.de',
+'cdn.adrta.com',
+'cdn.adscpm.net',
+'cdn.adshexa.com',
+'cdn.adspirit.de',
+'cdn.adsrvmedia.net',
+'cdn.adultforce.com',
+'cdn.advanseads.com',
+'cdn.adworkmedia.com',
+'cdn.allegedmedia.com',
+'cdn.ap.bittorrent.com',
+'cdn.applifier.com',
+'cdn.apptv.com',
+'cdn.assets.craveonline.com',
+'cdn.assets.gorillanation.com',
+'cdn.at.atwola.com',
+'cdn.badoink.com',
+'cdn.behavioralengine.com',
+'cdn.bidvertiser.com',
+'cdn.boomtrain.com',
+'cdn.brcdn.com',
+'cdn.broadstreetads.com',
+'cdn.bttrack.com',
+'cdn.buysellads.com',
+'cdn.c.try9.com',
+'cdn.callrail.com',
+'cdn.capturly.com',
+'cdn.cdnco.us',
+'cdn.cdncomputer.com',
+'cdn.cdntraffic.com',
+'cdn.celtra.com',
+'cdn.chargeplatform.com',
+'cdn.chuknu.sokrati.com',
+'cdn.clickfuse.com',
+'cdn.clicktale.net',
+'cdn.cms.neatcontent.com',
+'cdn.complexmedianetwork.com',
+'cdn.connatix.com',
+'cdn.contentadserver.com',
+'cdn.cpiera.com',
+'cdn.cpmstar.com',
+'cdn.cpnscdn.com',
+'cdn.creative.medialytics.com',
+'cdn.cxense.com',
+'cdn.derlatas.com',
+'cdn.devolapgt.com',
+'cdn.digitalcity.com',
+'cdn.directrev.com',
+'cdn.directtrk.com',
+'cdn.dirjournal.com',
+'cdn.doubleverify.com',
+'cdn.downloaddabs.com',
+'cdn.dsultra.com',
+'cdn.dynamicyield.com',
+'cdn.ebocornac.com',
+'cdn.effectivemeasure.net',
+'cdn.elasticad.net',
+'cdn.engine.4dsply.com',
+'cdn.engine.adsupply.com',
+'cdn.engine.avid.doublepimp.com',
+'cdn.engine.bang.doublepimp.com',
+'cdn.engine.doublepimp.com',
+'cdn.engine.fling.doublepimp.com',
+'cdn.engine.manwin.doublepimp.com',
+'cdn.engine.phn.doublepimp.com',
+'cdn.engine.rk.doublepimp.com',
+'cdn.engine.streamate.doublepimp.com',
+'cdn.engine.trklnks.com',
+'cdn.epom.com',
+'cdn.escalatenetwork.com',
+'cdn.eveitoki.com',
+'cdn.exactag.com',
+'cdn.exogripper.com',
+'cdn.exoticads.com',
+'cdn.exovueplatform.com',
+'cdn.eyewonder.com.12812.9047.302br.net',
+'cdn.eyewonder.com.12842.9047.302br.net',
+'cdn.eyewonder.com.21863.9047.302br.net',
+'cdn.eyewonder.com.21889.9047.302br.net',
+'cdn.eyewonder.com.21891.9047.302br.net',
+'cdn.eyewonder.com.21893.9047.302br.net',
+'cdn.eyewonder.com.21895.9068.302br.net',
+'cdn.eyewonder.com.21897.9068.302br.net',
+'cdn.eyewonder.com.21899.9068.302br.net',
+'cdn.eyewonder.com.22790.9068.302br.net',
+'cdn.eyewonder.com.22792.9068.302br.net',
+'cdn.eyewonder.com.22794.9068.302br.net',
+'cdn.eyewonder.com.22796.9068.302br.net',
+'cdn.eyewonder.com.22798.9068.302br.net',
+'cdn.eyewonder.com.22800.9068.302br.net',
+'cdn.eyewonder.com.22802.9068.302br.net',
+'cdn.eyewonder.com.22804.9068.302br.net',
+'cdn.eyewonder.com.22806.9068.302br.net',
+'cdn.eyewonder.com.22808.9068.302br.net',
+'cdn.eyewonder.com.22810.9068.302br.net',
+'cdn.eyewonder.com.22812.9068.302br.net',
+'cdn.eyewonder.com.24239.9068.302br.net',
+'cdn.eyewonder.com.24241.9068.302br.net',
+'cdn.eyewonder.com.24243.9068.302br.net',
+'cdn.eyewonder.com.24251.9068.302br.net',
+'cdn.eyewonder.com.24253.9068.302br.net',
+'cdn.eyewonder.com.24265.9068.302br.net',
+'cdn.eyewonder.com.70430.9538.302br.net',
+'cdn.eyewonder.com.70431.9538.302br.net',
+'cdn.eyewonder.com.70432.9538.302br.net',
+'cdn.eyewonder.com.70433.9538.302br.net',
+'cdn.fancybar.net',
+'cdn.fastclick.net',
+'cdn.fastclick.net.956.9006.302br.net',
+'cdn.fastclick.net.958.9006.302br.net',
+'cdn.feeds.videosz.com',
+'cdn.firstimpression.io',
+'cdn.flashtalking.com',
+'cdn.flurry.com',
+'cdn.frestacero.com',
+'cdn.ftdownloader.net',
+'cdn.funnel.naturaltracking.com',
+'cdn.gameadvert.com',
+'cdn.hanaprop.com',
+'cdn.herezera.com',
+'cdn.hgdat.com',
+'cdn.hiido.cn',
+'cdn.hyperpromote.com',
+'cdn.iasrv.com',
+'cdn.imonomy.com',
+'cdn.inentasky.com',
+'cdn.innity.com',
+'cdn.inspectlet.com',
+'cdn.interactivemedia.net',
+'cdn.intergi.com',
+'cdn.justonecookbook.com',
+'cdn.krxd.net',
+'cdn.lfstmedia.com',
+'cdn.listrakbi.com',
+'cdn.livechatinc.com',
+'cdn.mbp91.com',
+'cdn.mcextjmp.com',
+'cdn.mdotm.com',
+'cdn.media.net',
+'cdn.millennialmedia.com',
+'cdn.mobicow.com',
+'cdn.mobidea.com',
+'cdn.mouseflow.com',
+'cdn.mplxtms.com',
+'cdn.mxpnl.com',
+'cdn.nativendo.de',
+'cdn.nearbyad.com',
+'cdn.neblotech.com',
+'cdn.niche.videosz.com',
+'cdn.o333o.com',
+'cdn.onescreen.net',
+'cdn.onlinecountdowns.com',
+'cdn.optimatic.com',
+'cdn.optimizely.com',
+'cdn.pardot.com',
+'cdn.petametrics.com',
+'cdn.popcash.net',
+'cdn.popmyads.com',
+'cdn.psdvault.com',
+'cdn.pubexchange.com',
+'cdn.ramctrlgate.com',
+'cdn.reporo.net',
+'cdn.revcontent.com',
+'cdn.rooktemplate.com',
+'cdn.royale.spongecell.com.18367.9113.302br.net',
+'cdn.royale.spongecell.com.18473.9113.302br.net',
+'cdn.sailthru.com',
+'cdn.scootloor.com',
+'cdn.search.aol.com',
+'cdn.segment.com',
+'cdn.segment.io',
+'cdn.shorte.st',
+'cdn.siftscience.com',
+'cdn.slopeaota.com',
+'cdn.snapsitemap.com',
+'cdn.socialtwist.com',
+'cdn.spotxchange.com',
+'cdn.spoutable.com',
+'cdn.static.zdbb.net',
+'cdn.stroeerdigitalmedia.de',
+'cdn.taboola.com',
+'cdn.taboolasyndication.com',
+'cdn.tanx.com',
+'cdn.teads.tv',
+'cdn.technoratimedia.com',
+'cdn.thetorntv.com',
+'cdn.theturboforums.com',
+'cdn.tinypass.com',
+'cdn.tomekas.com',
+'cdn.trafficexchangelist.com',
+'cdn.trafficforce.com',
+'cdn.trafficposse.com',
+'cdn.trafficstars.com',
+'cdn.triggertag.gorillanation.com',
+'cdn.trkclk.net',
+'cdn.turn.com',
+'cdn.tynt.com',
+'cdn.ui.phn.doublepimp.com',
+'cdn.undertone.com',
+'cdn.vaguntrader.com',
+'cdn.valueclick.net',
+'cdn.vdopia.com',
+'cdn.viglink.com',
+'cdn.vipboxoc.co',
+'cdn.viralmint.com',
+'cdn.vlexokrako.com',
+'cdn.voscast.com',
+'cdn.w55c.net',
+'cdn.widgets.webengage.com',
+'cdn.wigetmedia.com',
+'cdn.wonderfulengineering.com',
+'cdn.www1.oratosaeron.com',
+'cdn.yb0t.com',
+'cdn.yldbt.com',
+'cdn.yourtopoffers.info',
+'cdn.ywxi.net',
+'cdn.zeusclicks.com',
+'cdn.ziffstatic.com',
+'cdn.zopim.com',
+'cdn0.mobmore.com',
+'cdn0.puata.info',
+'cdn1-ref.landing.comcontent.net',
+'cdn1.ad-center.com',
+'cdn1.ads.contentabc.com',
+'cdn1.appia.com',
+'cdn1.bad-credit-cdn.com',
+'cdn1.bnmla.com',
+'cdn1.clkbid.com',
+'cdn1.clkrev.com',
+'cdn1.crispadvertising.com',
+'cdn1.deals-discounts-codes.com',
+'cdn1.e5.mydirtyhobby.com',
+'cdn1.flash.shareadult.com',
+'cdn1.inner-active.mobi',
+'cdn1.kovla.com',
+'cdn1.psdvault.com',
+'cdn1.reporo.net',
+'cdn1.rhtag.com',
+'cdn1.skinected.com',
+'cdn1.smartadserver.com',
+'cdn1.srv.revdepo.com',
+'cdn1.tags1.revdepo.com',
+'cdn1.traffichaus.com',
+'cdn1.tribalfusion.com',
+'cdn11.00zasdf.pw',
+'cdn11.abbp1.pw',
+'cdn11.contentabc.com',
+'cdn11.plmokn.pw',
+'cdn11.routehero.com',
+'cdn15.acloudimages.com',
+'cdn1b.adspace.porntube.com',
+'cdn1ht.traffichaus.com',
+'cdn2-ref.landing.comcontent.net',
+'cdn2.ad-center.com',
+'cdn2.adbrau.com',
+'cdn2.adsdk.com',
+'cdn2.bad-credit-cdn.com',
+'cdn2.cpmstar.com',
+'cdn2.crispadvertising.com',
+'cdn2.deals-discounts-codes.com',
+'cdn2.lockerdome.com',
+'cdn2.maxiget.com',
+'cdn2.mobile.contentdef.com',
+'cdn2.optimizely.com',
+'cdn2.reporo.net',
+'cdn3-ref.landing.comcontent.net',
+'cdn3.kovla.com',
+'cdn3.mobile.contentdef.com',
+'cdn3.optimizely.com',
+'cdn3.userzoom.com',
+'cdn4-ref.landing.comcontent.net',
+'cdn4.bad-credit-cdn.com',
+'cdn4.deals-discounts-codes.com',
+'cdn4.psdvault.com',
+'cdn4.userzoom.com',
+'cdn5-ref.landing.comcontent.net',
+'cdn5.bad-credit-cdn.com',
+'cdn5.deals-discounts-codes.com',
+'cdn5.psdvault.com',
+'cdn5.tribalfusion.com',
+'cdn6.bad-credit-cdn.com',
+'cdn6.deals-discounts-codes.com',
+'cdn6.psdvault.com',
+'cdn7.bad-credit-cdn.com',
+'cdn7.deals-discounts-codes.com',
+'cdna.tremormedia.com',
+'cdnads.cam4.com',
+'cdncache2-a.akamaihd.net',
+'cdneu.alcoholsoftcdn.com',
+'cdneu.filefactscdn.com',
+'cdnke.voluumtrk.com',
+'cdns.brsrvr.com',
+'cdnstats-a.akamaihd.net',
+'cdnus.alcoholsoftcdn.com',
+'cdnus.filefactscdn.com',
+'cdnx.tribalfusion.com',
+'cdr0b.voluumtrk.com',
+'cds.g8j8b9g6.hwcdn.net',
+'cds2.freenet.de',
+'cdx.cedexis.com',
+'ce.lijit.com',
+'ce2-dev-trk.s3.amazonaws.com',
+'ce2-dev.s3.amazonaws.com',
+'ce5iz.voluumtrk.com',
+'cebj8.voluumtrk.com',
+'cecash.com',
+'ced.sascdn.com',
+'cedexis-dsa-eu.gccdn.net',
+'cedexis-test01.insnw.net',
+'cedexis.cdn.mediactive-network.net',
+'cedexis.leasewebcdn.com',
+'cedexiscom.btttag.com',
+'cedexispub.cdnetworks.net',
+'celeb-ads.com',
+'celebrities.searchwho.com',
+'celebrity-image.com',
+'celebrityhack.us.intellitxt.com',
+'celebscentral.us.intellitxt.com',
+'cellstats.mako.co.il',
+'celltick.com',
+'cellularphones.com',
+'celtra.com',
+'centerpoint.hitbox.com',
+'centik.justclick.ru',
+'centinela.sofistic.net',
+'centralad.com',
+'centricaplc.tt.omtrdc.net',
+'centrport.net',
+'certified-email.com',
+'cetrk.com',
+'cf.addthis.com',
+'cf.ads.kontextua.com',
+'cf.cdn.inmobi.com',
+'cf33b.voluumtrk.com',
+'cfcdn.fhserve.com',
+'cfifsfsbsower.review',
+'cfpbg.voluumtrk.com',
+'cfrfa.112.2o7.net',
+'cfs.u-ad.info',
+'cfyav.voluumtrk.com',
+'cfzp1.voluumtrk.com',
+'cg27e.voluumtrk.com',
+'cgi.hotstat.nl',
+'cgi.netscape.com',
+'cgi.zdnet.com',
+'cgicounter.oneandone.co.uk',
+'cgicounter.onlinehome.de',
+'cgicounter.puretec.de',
+'cgovj.voluumtrk.com',
+'cgzudintercom.review',
+'ch.questionmarket.com',
+'ch2lb.checkm8.com',
+'chainmychonga.com',
+'chalkpitqqjpwis.download',
+'chanalytics.merchantadvantage.com',
+'chango.com',
+'channel4.com.112.2o7.net',
+'channeltraffic.net',
+'chapdyn.bidsystem.com',
+'charmour.club',
+'chart.superstats.com',
+'chartaca.com.s3.amazonaws.com',
+'chartboost.com',
+'chat.adspaces.ero-advertising.com',
+'chat.ero-advertising.com',
+'chat.zedo.com',
+'chathu.apkmania.co',
+'chatserver.comm100.cn',
+'chayaoyaui.download',
+'cheaperia.digidip.net',
+'cheatcc.us.intellitxt.com',
+'cheatingdome.us.intellitxt.com',
+'checker.admitad.com',
+'checker.cityads.com',
+'checker.cityads.com.br',
+'checker.cityads.ru',
+'checker.cityadspix.com',
+'checker.cityredirect.com',
+'checker.cityviplink.com',
+'checker.dumedia.ru',
+'checker.gameleads.ru',
+'checkm8.com',
+'checkstat.com',
+'checkstat.net',
+'checkstat.nl',
+'chefkoch01.webtrekk.net',
+'cherryaffiliates.omarsys.com',
+'chessmob.go2affise.com',
+'chestionar.ro',
+'chgqm.voluumtrk.com',
+'chi-only.outbrain.com',
+'chi2only.outbrain.com',
+'chillinessfjnvbh.download',
+'chillout.real.com',
+'china.inmobi.com',
+'chinacache.cedexis.com',
+'chip.de.intellitxt.com',
+'chip.digidip.net',
+'chip.ivwbox.de',
+'chip.met.vgwort.de',
+'chip.pl.intellitxt.com',
+'chippingswbhhaxf.download',
+'choice.demdex.net',
+'choice.microsoft.com',
+'choices.trustarc.com',
+'choices.truste.com',
+'chokoladsrv.net',
+'chope-co.b.appier.net',
+'chronicads.com',
+'chronicleddxsilskp.download',
+'chtatic.appspot.com',
+'chukalapopi.com',
+'chutneysrkcmkwrqb.download',
+'ci.categoria.hpg.com.br',
+'ci22.actonsoftware.com',
+'ci23.actonsoftware.com',
+'ci29.actonsoftware.com',
+'ci33.actonsoftware.com',
+'ci35.actonsoftware.com',
+'ci43.actonsoftware.com',
+'ci44.actonsoftware.com',
+'ci45.actonsoftware.com',
+'ci46.actonsoftware.com',
+'ci50.actonsoftware.com',
+'ci51.actonsoftware.com',
+'ci52.actonsoftware.com',
+'ci53.actonsoftware.com',
+'cia2853.actonsoftware.com',
+'ciao.de.intellitxt.com',
+'ciao.ivwbox.de',
+'ciaoshopde.122.2o7.net',
+'cidemo.actonsoftware.com',
+'ciktv.voluumtrk.com',
+'ciliolateefgntk.download',
+'ciscosystemsinc.tt.omtrdc.net',
+'cistycsoyceif.download',
+'citi.bridgetrack.com',
+'citi.bridgetrack.com.21936.9128.302br.net',
+'citi.bridgetrack.com.21937.9128.302br.net',
+'citi.bridgetrack.com.21939.9128.302br.net',
+'citi.bridgetrack.com.21940.9128.302br.net',
+'citi.bridgetrack.com.21942.9128.302br.net',
+'citi.bridgetrack.com.21943.9128.302br.net',
+'citi.bridgetrack.com.21945.9128.302br.net',
+'citi.bridgetrack.com.21946.9128.302br.net',
+'citi.bridgetrack.com.21948.9128.302br.net',
+'citi.bridgetrack.com.21949.9128.302br.net',
+'citi.bridgetrack.com.21950.9128.302br.net',
+'citi.bridgetrack.com.21951.9128.302br.net',
+'citi.bridgetrack.com.21952.9128.302br.net',
+'citi.bridgetrack.com.21953.9128.302br.net',
+'citi.bridgetrack.com.21954.9128.302br.net',
+'citi.bridgetrack.com.21955.9128.302br.net',
+'citi.bridgetrack.com.21956.9128.302br.net',
+'citi.bridgetrack.com.21957.9128.302br.net',
+'citi.bridgetrack.com.21958.9128.302br.net',
+'citi.bridgetrack.com.21960.9128.302br.net',
+'citi.bridgetrack.com.21961.9128.302br.net',
+'citi.bridgetrack.com.21963.9128.302br.net',
+'citi.bridgetrack.com.21964.9128.302br.net',
+'citi.bridgetrack.com.21966.9128.302br.net',
+'citi.bridgetrack.com.21967.9128.302br.net',
+'citi.bridgetrack.com.21969.9128.302br.net',
+'citi.bridgetrack.com.21970.9128.302br.net',
+'citi.bridgetrack.com.21971.9128.302br.net',
+'citi.bridgetrack.com.21972.9128.302br.net',
+'citi.bridgetrack.com.21973.9128.302br.net',
+'citi.bridgetrack.com.21974.9128.302br.net',
+'citi.bridgetrack.com.21975.9128.302br.net',
+'citi.bridgetrack.com.21976.9128.302br.net',
+'citi.bridgetrack.com.21977.9128.302br.net',
+'citi.bridgetrack.com.21978.9128.302br.net',
+'citi.bridgetrack.com.21979.9128.302br.net',
+'citi.bridgetrack.com.21981.9128.302br.net',
+'citi.bridgetrack.com.21982.9128.302br.net',
+'citi.netmng.com',
+'citizens.inq.com',
+'citrix.tradedoubler.com',
+'city-ads.de',
+'cityads.com',
+'cityads.com.br',
+'cityads.ru',
+'cityads.telus.net',
+'cityadslink.com',
+'cityadspix.com',
+'citygrid.com',
+'cityredirect.com',
+'cityviplink.com',
+'civitik.com',
+'cj.com',
+'cj.dotomi.com',
+'cj.net',
+'ck.jp.ap.valuecommerce.com',
+'ck.juicyads.com',
+'ck.solocpm.com',
+'cke1i.voluumtrk.com',
+'cklu4.voluumtrk.com',
+'ckm-m.xp1.ru4.com',
+'cknsoyunwrought.review',
+'cksocial.hitpointstudios.com',
+'ckstatic.com',
+'cl.cnn.com',
+'cl.exct.net',
+'cl2.webterren.com',
+'clarinetsfulrjwphb.download',
+'clarity.abacast.com',
+'clashmobile.com',
+'claspedhjkyehhf.download',
+'classifieds.atspace.com',
+'classifieds1000.com',
+'classifiedscanada.112.2o7.net',
+'classmates.com',
+'classmatescom.112.2o7.net',
+'classroomchvpagg.download',
+'clck.webteaser.ru',
+'clck.yandex.by',
+'clck.yandex.com',
+'clck.yandex.com.tr',
+'clck.yandex.kz',
+'clck.yandex.ru',
+'clck.yandex.ua',
+'clckme.com',
+'cld.edg.startappservice.com',
+'clddt.com',
+'cldsecure.info',
+'cleangamemedia.go2cloud.org',
+'clear-reports.com',
+'clearlinkmedia.go2cloud.org',
+'clearspring.com',
+'clearwebstats.com',
+'cli.linksynergy.com',
+'clic-exchange.com',
+'clic.reussissonsensemble.fr',
+'click-123.com',
+'click-here-to-listen.com',
+'click-ice.com',
+'click.a-ads.com',
+'click.absoluteagency.com',
+'click.ad.nu-face.jp',
+'click.adknowledge.com',
+'click.alibaba.com',
+'click.aristotle.net',
+'click.atdmt.com',
+'click.atdmt.net',
+'click.bokecc.com',
+'click.cashengines.com',
+'click.clickcommander.com',
+'click.dagbladet.no',
+'click.dtiserv2.com',
+'click.engage.xbox.com',
+'click.ewebse.com',
+'click.eyk.net',
+'click.fastlinkfinder.com',
+'click.findthewebsiteyouneed.com',
+'click.fool.com',
+'click.holland-billing.com',
+'click.hotlog.ru',
+'click.hubspotanalytics.com',
+'click.icetraffic.com',
+'click.icptrack.com',
+'click.igg.com',
+'click.ipc.ru',
+'click.kataweb.it',
+'click.kidslivesafe.com',
+'click.kmindex.ru',
+'click.linkstattrack.com',
+'click.linkstorm.net',
+'click.linksynergy.com',
+'click.livedoor.com',
+'click.livejasmin.com',
+'click.loudgames.com',
+'click.mmosite.com',
+'click.mobtimizer.com',
+'click.monstracking.com',
+'click.mz.simba.taobao.com',
+'click.news2.v3.email-publisher.com',
+'click.oxcash.com',
+'click.pandaapp.com',
+'click.payserve.com',
+'click.pdl1tracking.com',
+'click.plista.com',
+'click.readme.ru',
+'click.rontraffic.com',
+'click.rssfwd.com',
+'click.safe-sender.co.uk',
+'click.scour.com',
+'click.silvercash.com',
+'click.simba.taobao.com',
+'click.solocpm.com',
+'click.startappexchange.com',
+'click.tanx.com',
+'click.topica.com',
+'click.trklinklog.com',
+'click.tv.repubblica.it',
+'click.tz.simba.taobao.com',
+'click.union.ucweb.com',
+'click.vgnett.no',
+'click.wrating.com',
+'click1.performance-zone.com',
+'click168.com',
+'click2.cafepress.com',
+'click2.scour.com',
+'click202.com',
+'click2boost.com',
+'click2net.nl',
+'click2paid.com',
+'click2site.co',
+'click4assistance.co.uk',
+'click4cash.de',
+'click4click.com',
+'click4free.info',
+'clickability.com',
+'clickability.net',
+'clickability.org',
+'clickable.com',
+'clickad.com.pl',
+'clickad.pl',
+'clickadin.com',
+'clickadscounter.com',
+'clickadu.com',
+'clickagents.com',
+'clickagy.com',
+'clickater.com',
+'clickauditor.net',
+'clickbangpop.com',
+'clickbank.net',
+'clickbet88.com',
+'clickbooth.com',
+'clickboothlnk.com',
+'clickbroker.com',
+'clickbrokers.com',
+'clickbug.com',
+'clickcash.com',
+'clickcash.webpower.com',
+'clickcashmoney.com',
+'clickcdn.xda-developers.com',
+'clickcertain.com',
+'clickchecker.co.uk',
+'clickdealer.go2cloud.org',
+'clickdensity.com',
+'clickdough.com',
+'clickedyclick.com',
+'clickeight.com',
+'clickequations.net',
+'clickeu.admailtiser.com',
+'clickeu.tractionize.com',
+'clickexperts.net',
+'clickey.com',
+'clickfirms.go2cloud.org',
+'clickflow.com',
+'clickforwebmasters.com',
+'clickfuse.com',
+'clickheretofind.com',
+'clickhouse.com',
+'clickice.com',
+'clicking.com.tw',
+'clickintext.com',
+'clickit.com',
+'clickkingdom.net',
+'clickkwala.go2cloud.org',
+'clickmarks.com',
+'clickmedia.ro',
+'clickmonsters.com',
+'clickon.co.il',
+'clickosmedia.com',
+'clickpapa.com',
+'clickppcbuzz.com',
+'clickquick.com',
+'clickriver.com',
+'clicks.about.com',
+'clicks.ads.netlog.com',
+'clicks.aweber.com',
+'clicks.babylon-x.com',
+'clicks.bannerboxes.com',
+'clicks.beap.bc.yahoo.com',
+'clicks.equantum.com',
+'clicks.igg.com',
+'clicks.net',
+'clicks.oxcash.com',
+'clicks.stripsaver.com',
+'clicks.toteme.com',
+'clicks.virtuagirl.com',
+'clicks.walla.co.il',
+'clicks.whatifoffers.com',
+'clicks2.oxcash.com',
+'clicks2count.com',
+'clicks2install.go2affise.com',
+'clicksaddiction.go2cloud.org',
+'clicksales.com',
+'clicksandclients.go2cloud.org',
+'clickserv.sitescout.com',
+'clickserv2.sitescout.com',
+'clickserve.cc-dt.com',
+'clickserve.dartsearch.net',
+'clickshare.com',
+'clickshield.net',
+'clicksite.com',
+'clicksor.net',
+'clicksrvr.co',
+'clickstotrack.com',
+'clickstream.co.za',
+'clicksurecpa.com',
+'clicksvenue.com',
+'clicktaxi.com',
+'clickthrough.com',
+'clickthru.lefbc.com',
+'clickthrucash.com',
+'clickthruhost.com',
+'clickthruserver.com',
+'clickthrutraffic.com',
+'clicktrace.info',
+'clicktrack.wnu.com',
+'clicktracks.com',
+'clicktrade.linkexchange.net',
+'clicktrade.net',
+'clicktraffix.com',
+'clicktraq.mtree.com',
+'clicktripz.com',
+'clicktv.com',
+'clickus.admailtiser.com',
+'clickus.reimsrvcm.com',
+'clickus.tractionize.com',
+'clickv.com',
+'clickwinks.com',
+'clickxchange.com',
+'clickz.lonelycheatingwives.com',
+'clicshop.com',
+'clictrafic.com',
+'clicz.com',
+'client.cobrowser.net',
+'client.download-sponsor.de',
+'client.everlinks.net',
+'client.tahono.com',
+'clients.adventmedia.net',
+'clients.advertising.com',
+'clients.bluecava.com',
+'clients.rootsecure.org',
+'clixgalore.co.uk',
+'clixgalore.com',
+'cliximages.com',
+'clixsense.com',
+'clixtrac.com',
+'clixzen1.go2cloud.org',
+'clk.77978.xn--q9jyb4c',
+'clk.8mm.shiksha',
+'clk.adgatemedia.com',
+'clk.atdmt.com',
+'clk.boulanger.fr',
+'clk.directrev.com',
+'clk.flmsecure.com',
+'clk.im',
+'clk.jmp9.com',
+'clk.members.fling.com',
+'clk.ml-links.com',
+'clk.nanigans.com',
+'clk.optaim.com',
+'clk.recreativ.ru',
+'clk.relestar.com',
+'clk.solocpm.com',
+'clk.voyages-sncf.com',
+'clkax.tradedoubler.com',
+'clkde.tradedoubler.com',
+'clkdeals.com',
+'clkerr.com',
+'clkmg.com',
+'clkmon.com',
+'clkmr.com',
+'clkrev.com',
+'clksite.com',
+'clkstat.qihoo.com',
+'clktag.com',
+'clkuk.tradedoubler.com',
+'clmbtrk.com',
+'clnk.me',
+'clobucks.com',
+'clog.go.com',
+'clottingsuoxiz.download',
+'cloud-q.duba.net',
+'cloud.cashtrafic.info',
+'cloud.insightera.com',
+'cloud.video.unrulymedia.com',
+'cloudfront-dsa-eu.cedexis.com',
+'cloudfront-labs.amazonaws.com',
+'cloudfront.cedexis.com',
+'cloudhostbanner.com',
+'cloudixconnection.com',
+'cloveads.go2cloud.org',
+'clpremdo.com',
+'cls.vrvm.com',
+'clubbebe.2cnt.net',
+'cluster-03.topbucks.com',
+'cluster.adultadworld.com',
+'cluster.performanceanalyser.net',
+'cluster0.2cnt.net',
+'cluster002.2cnt.net',
+'cluster003.2cnt.net',
+'cluster1.2cnt.net',
+'cluster10.2cnt.net',
+'cluster11.2cnt.net',
+'cluster1805.2cnt.net',
+'cluster29002.2cnt.net',
+'cluster29003.2cnt.net',
+'clvrtrkr.go2cloud.org',
+'clz3.net',
+'cm-cl35.fresheye.com',
+'cm.ac3.msn.com',
+'cm.adgrx.com',
+'cm.adkmob.com',
+'cm.dpclk.com',
+'cm.emarbox.com',
+'cm.g.doubleclick.net',
+'cm.gcm.ksmobile.com',
+'cm.l.qq.com',
+'cm8og.voluumtrk.com',
+'cma.zdnet.com',
+'cma60.voluumtrk.com',
+'cmail1.com',
+'cmail2.com',
+'cmail5.com',
+'cmap.uac.ace.advertising.com',
+'cmdts.ksmobile.com',
+'cmfads.com',
+'cmllk1.info',
+'cmn1lsm2.beliefnet.com',
+'cmn1lsm3.beliefnet.com',
+'cmn1lsm4.beliefnet.com',
+'cmp.entertainmentcrave.com',
+'cmp.us.intellitxt.com',
+'cmpdotnetjunkiescom.112.2o7.net',
+'cmpglobalvista.112.2o7.net',
+'cms-pixel.crowdreport.com',
+'cms-skin.com',
+'cms.abmr.net',
+'cms.analytics.yahoo.com',
+'cms.grandcloud.cn',
+'cms.quantserve.com',
+'cms2.net',
+'cmstrendslog.indiatimes.com',
+'cmstrendslog.timesnow.tv',
+'cn.adserver.yahoo.com',
+'cn.clickable.net',
+'cn01.dwstat.cn',
+'cnb.cnews.ru',
+'cncdn.9966.org',
+'cnetnews.112.2o7.net',
+'cnettech.112.2o7.net',
+'cnetwidget.creativemark.co.uk',
+'cnetzdnet.112.2o7.net',
+'cnheagletribune.112.2o7.net',
+'cnhsq.voluumtrk.com',
+'cnn.122.2o7.net',
+'cnn.dyn.cnn.com',
+'cnn.entertainment.printthis.clickability.com',
+'cnn.looksmart.com',
+'cnnfn.emailthis.clickability.com',
+'cnnfn.printthis.clickability.com',
+'cnnfn.savethis.clickability.com',
+'cnnglobal.122.2o7.net',
+'cnstats.cdev.eu',
+'cnt.in.bookmyshow.com',
+'cnt.likealaugh.org',
+'cnt.logoslovo.ru',
+'cnt.my',
+'cnt.nicemix.com',
+'cnt.nov.ru',
+'cnt.nuvid.com',
+'cnt.one.ru',
+'cnt.promodj.com',
+'cnt.rambler.ru',
+'cnt.rate.ru',
+'cnt.threewave.jp',
+'cnt.tmefekt.pl',
+'cnt.tokyo-porn-tube.com',
+'cnt.tokyo-tube.com',
+'cnt.tyxo.bg',
+'cnt.winkal.com',
+'cnt.zhaopin.com',
+'cnt1.pocitadlo.cz',
+'cnt1.xhamster.com',
+'cnt2.xhamster.com',
+'cntdy.mobi',
+'cnteryield.jmp9.com',
+'cntrck.com',
+'cntv.wrating.com',
+'cntwr.voluumtrk.com',
+'cnzz.com',
+'cnzz.mmstat.com',
+'coachingminceur.go2cloud.org',
+'coadvertise.com',
+'coaft.voluumtrk.com',
+'cobrands.mailermailer.com',
+'coconuts.boy.jp',
+'code.37cs.com',
+'code.adengage.com',
+'code.directadvert.ru',
+'code.fastclick.net',
+'code.iwadserver.com',
+'code.kissmetrics.com',
+'code.rtbsystem.com',
+'code.snapengage.com',
+'code.superstats.com',
+'code.taggify.net',
+'code.theads.me',
+'code.xidx.org',
+'codead.dajusepe.com',
+'codice.shinystat.com',
+'codice.shinystat.it',
+'codiceisp.shinystat.it',
+'codicepro.shinystat.it',
+'codilladtqjizvrh.download',
+'cogtree.com',
+'coheredqdsurfq.download',
+'cohortdigital.go2cloud.org',
+'coiffedvsyitd.download',
+'coinurl.com',
+'coinvisitor.com',
+'coke.nuggad.net',
+'coldfusion.affiliateshop.com',
+'collect.igodigital.com',
+'collect.m-pathy.com',
+'collection.acromas.com',
+'collective-media.net.49479.9362.302br.net',
+'collector-cdn.github.com',
+'collector-test.staging.mb-internal.com',
+'collector.deepmetrix.com',
+'collector.ksax.com',
+'collector.kstptv5.com',
+'collector.statowl.com',
+'collector.tescocompare.com',
+'collector.viki.io',
+'collegerqdieq.download',
+'collidingsgmwsx.download',
+'colligatepygpdqk.download',
+'colonize.com',
+'colorfoto.digidip.net',
+'com-magazin.de.intellitxt.com',
+'com-symantec.netmng.com',
+'com-wkejf32ljd23409system.net',
+'com.24290.9170.302br.net',
+'com.24293.9170.302br.net',
+'com.33526.9243.302br.net',
+'com.36659.9244.302br.net',
+'com.47129.9349.302br.net',
+'com.47550.9340.302br.net',
+'com.55788.9391.302br.net',
+'com.72669.9596.302br.net',
+'com.djinnworks.sdm.s3.amazonaws.com',
+'com.econa.com',
+'comagic.ru',
+'comcast.112.2o7.net',
+'comcast.demdex.net',
+'comclick.com',
+'comclick.net',
+'comet.ibsrv.net',
+'comics.ign.us.intellitxt.com',
+'commerce.cimedia.net',
+'commercedjbppce.download',
+'commissionmonster.com',
+'commonname.com',
+'commonssearch.com',
+'commonwealth.riddler.com',
+'companiedhhplrdpp.download',
+'companydeep.go2affise.com',
+'compareyourclicks.com',
+'compatdb.us.intellitxt.com',
+'compete.com',
+'compete.evergage.com',
+'competeinc.com',
+'completecarrd.com',
+'compnet.us.intellitxt.com',
+'components.adsender.us',
+'compteur.com',
+'compteur.francite.com',
+'compu3.com',
+'computerbild-forum.digidip.net',
+'computershopper.uk.intellitxt.com',
+'computershopper.zdnet.com',
+'computerwoche.de.intellitxt.com',
+'computingcentral.com',
+'comscore.com',
+'comunidad.lasexta.com',
+'con.thetrafficstat.net',
+'concealedffvqfx.download',
+'concinnousaepwnh.download',
+'concours.fr',
+'concours.hit-parade.com',
+'condenast.demdex.net',
+'condenast.tt.omtrdc.net',
+'condonenawphf.download',
+'conduit-banners.com',
+'conf.xpanama.net',
+'config-ltvp.inmobi.com',
+'config.ioam.de',
+'config.mobile.wxbug.com',
+'configusa.veinteractive.com',
+'confirm-referer.glrsales.com',
+'confluence.kissmetrics.com',
+'conforama.commander1.com',
+'conforama.ugc.bazaarvoice.com',
+'connect.247media.ads.link4ads.com',
+'connect.appflood.com',
+'connect.de.intellitxt.com',
+'connect.digidip.net',
+'connect.ekomi.de',
+'connect.ok.ru',
+'connect.quoka.de',
+'connect.tapjoy.com',
+'connect001.com',
+'connectbot.org',
+'connectedhome.digidip.net',
+'connectlinking1.com',
+'connectlinking10.com',
+'connectlinking12.com',
+'connectlinking2.com',
+'connectlinking3.com',
+'connectlinking4.com',
+'connectlinking5.com',
+'connectlinking6.com',
+'connectlinking7.com',
+'connectlinking8.com',
+'connectlinking9.com',
+'connexionsafe.com',
+'connexionsecure.com',
+'connextra.com',
+'connotenrrvlxq.download',
+'connxtionads.go2cloud.org',
+'consent-st.truste.com',
+'consent.truste.com',
+'consent.webmasterplan.com',
+'console.revmob.com',
+'consonancetkumk.download',
+'consors.ivwbox.de',
+'consumerinfo.com',
+'consumerreview.us.intellitxt.com',
+'consumesldpmue.download',
+'contador-de-visitas.com',
+'contadores.miarroba.com',
+'contadores.miarroba.es',
+'contadorgratis.web-kit.org',
+'contendersuudvsxwq.download',
+'content-ad.com',
+'content-ads.impactengine.com',
+'content-cooperation.com',
+'content.acc-hd.de',
+'content.ad',
+'content.adprofile.net',
+'content.adriver.ru',
+'content.adscension.com',
+'content.aimatch.com',
+'content.app-authority.com',
+'content.applift.com',
+'content.bannerconnect.net',
+'content.bitsontherun.com',
+'content.complex.com',
+'content.cpxinteractive.com',
+'content.directadvert.ru',
+'content.livesportmedia.eu',
+'content.liveuniverse.com',
+'content.pop6.com',
+'content.quantcount.com',
+'content.rbc.medialand.ru',
+'content.surpax.net',
+'content.tucows.com',
+'content.uclick.com',
+'content.untd.com',
+'content.videoclick.ru',
+'content.yieldmanager.com',
+'content.yieldmanager.edgesuite.net',
+'content.zemanta.com',
+'contentcache-a.akamaihd.net',
+'contentclick.akamaized.net',
+'contentlockingnetworks.com',
+'contentserv.brandaffinity.net',
+'contextlinks.netseer.com',
+'contextuads.com',
+'contextual.media.net',
+'contextweb.pixel.invitemedia.com',
+'control.123banners.com',
+'control.cityofcairns.com',
+'control.kochava.com',
+'controlcenter.superstats.com',
+'controller.4seeresults.com',
+'controller2.foreseeresults.com',
+'controlroom.netmining.com',
+'contxmedia.go2cloud.org',
+'conv.adengage.com',
+'conversion.7search.com',
+'conversionruler.com',
+'conversions.rts.doublepimp.com',
+'convertglobal.s3.amazonaws.com',
+'convoad.technoratimedia.com.21929.9047.302br.net',
+'convoad.technoratimedia.com.22787.9068.302br.net',
+'convoad.technoratimedia.com.22788.9068.302br.net',
+'convoad.technoratimedia.com.24234.9068.302br.net',
+'convoad.technoratimedia.com.24235.9068.302br.net',
+'convoad.technoratimedia.com.24236.9068.302br.net',
+'cookie.disneylandparis.com',
+'cookie.fdih.dk',
+'cookie.monster.com',
+'cookieanalyze.info',
+'cookies.cmpnet.com',
+'cookies.reedbusiness.nl',
+'cookiex.ngd.yahoo.com',
+'coolertracks.emailroi.com',
+'coolpaysite.com',
+'coolshader.com',
+'coop.crwdcntrl.net',
+'copesetticxobdnn.download',
+'copilul.2cnt.net',
+'corba.adtech.fr',
+'core.adproxy2.com',
+'core.adservingfactory.com',
+'core.asuum.com',
+'core.banner.t-online.de',
+'core.naturalmotion.com',
+'core.yorkvillemarketing.com',
+'core2digital.go2affise.com',
+'coreads.net',
+'coreclickhoo.com',
+'coreg-feed.fr',
+'coretalk.co',
+'cornhuskerypyvjzplr.download',
+'corpext.msitadfs.glbdns2.microsoft.com',
+'correctiongnarfj.download',
+'cortezz.justclick.ru',
+'cortoonnetwork.com',
+'cosmos01ssl.webtrekk.net',
+'cossette.com',
+'cossiesnkycsr.download',
+'cotidianul.2cnt.net',
+'cotylebijnutawn.download',
+'coull.com',
+'coull.go2cloud.org',
+'count.51yes.com',
+'count.asnetworks.de',
+'count.atm.youku.com',
+'count.be',
+'count.carrierzone.com',
+'count.chanet.com.cn',
+'count.channeladvisor.com',
+'count.cncrk.com',
+'count.crsky.com',
+'count.ddooo.com',
+'count.de',
+'count.freeyellow.com',
+'count.im',
+'count.infoemail.gamexp.ru',
+'count.iwbank.it',
+'count.joy.cn',
+'count.ly',
+'count.mail.163.com',
+'count.me.uk',
+'count.paycounter.com',
+'count.portail.free.fr',
+'count.prx.org',
+'count.qiannao.com',
+'count.rbc.ru',
+'count.rin.ru',
+'count.rtl.de',
+'count.rubylane.com',
+'count.shopping.t-online.de',
+'count.tbcdn.cn',
+'count.timedg.com',
+'count.video.sina.com.cn',
+'count.windows9download.net',
+'count1.51yes.com',
+'count10.51yes.com',
+'count100.51yes.com',
+'count1000.51yes.com',
+'count101.51yes.com',
+'count102.51yes.com',
+'count103.51yes.com',
+'count104.51yes.com',
+'count105.51yes.com',
+'count106.51yes.com',
+'count107.51yes.com',
+'count108.51yes.com',
+'count109.51yes.com',
+'count11.51yes.com',
+'count110.51yes.com',
+'count111.51yes.com',
+'count112.51yes.com',
+'count113.51yes.com',
+'count114.51yes.com',
+'count115.51yes.com',
+'count116.51yes.com',
+'count117.51yes.com',
+'count118.51yes.com',
+'count119.51yes.com',
+'count12.51yes.com',
+'count120.51yes.com',
+'count121.51yes.com',
+'count122.51yes.com',
+'count123.51yes.com',
+'count124.51yes.com',
+'count125.51yes.com',
+'count126.51yes.com',
+'count127.51yes.com',
+'count128.51yes.com',
+'count129.51yes.com',
+'count13.51yes.com',
+'count130.51yes.com',
+'count131.51yes.com',
+'count132.51yes.com',
+'count133.51yes.com',
+'count134.51yes.com',
+'count135.51yes.com',
+'count136.51yes.com',
+'count137.51yes.com',
+'count138.51yes.com',
+'count139.51yes.com',
+'count14.51yes.com',
+'count140.51yes.com',
+'count141.51yes.com',
+'count142.51yes.com',
+'count143.51yes.com',
+'count144.51yes.com',
+'count145.51yes.com',
+'count146.51yes.com',
+'count147.51yes.com',
+'count148.51yes.com',
+'count149.51yes.com',
+'count15.51yes.com',
+'count150.51yes.com',
+'count151.51yes.com',
+'count152.51yes.com',
+'count153.51yes.com',
+'count154.51yes.com',
+'count155.51yes.com',
+'count156.51yes.com',
+'count157.51yes.com',
+'count158.51yes.com',
+'count159.51yes.com',
+'count16.51yes.com',
+'count160.51yes.com',
+'count161.51yes.com',
+'count162.51yes.com',
+'count163.51yes.com',
+'count164.51yes.com',
+'count165.51yes.com',
+'count166.51yes.com',
+'count167.51yes.com',
+'count168.51yes.com',
+'count169.51yes.com',
+'count17.51yes.com',
+'count170.51yes.com',
+'count171.51yes.com',
+'count172.51yes.com',
+'count173.51yes.com',
+'count174.51yes.com',
+'count175.51yes.com',
+'count176.51yes.com',
+'count177.51yes.com',
+'count178.51yes.com',
+'count179.51yes.com',
+'count18.51yes.com',
+'count180.51yes.com',
+'count181.51yes.com',
+'count182.51yes.com',
+'count183.51yes.com',
+'count184.51yes.com',
+'count185.51yes.com',
+'count186.51yes.com',
+'count187.51yes.com',
+'count188.51yes.com',
+'count189.51yes.com',
+'count19.51yes.com',
+'count190.51yes.com',
+'count191.51yes.com',
+'count192.51yes.com',
+'count193.51yes.com',
+'count194.51yes.com',
+'count195.51yes.com',
+'count196.51yes.com',
+'count197.51yes.com',
+'count198.51yes.com',
+'count199.51yes.com',
+'count2.51yes.com',
+'count20.51yes.com',
+'count200.51yes.com',
+'count201.51yes.com',
+'count202.51yes.com',
+'count203.51yes.com',
+'count204.51yes.com',
+'count205.51yes.com',
+'count206.51yes.com',
+'count207.51yes.com',
+'count208.51yes.com',
+'count209.51yes.com',
+'count21.51yes.com',
+'count210.51yes.com',
+'count211.51yes.com',
+'count212.51yes.com',
+'count213.51yes.com',
+'count214.51yes.com',
+'count215.51yes.com',
+'count216.51yes.com',
+'count217.51yes.com',
+'count218.51yes.com',
+'count219.51yes.com',
+'count22.51yes.com',
+'count220.51yes.com',
+'count221.51yes.com',
+'count222.51yes.com',
+'count223.51yes.com',
+'count224.51yes.com',
+'count225.51yes.com',
+'count226.51yes.com',
+'count227.51yes.com',
+'count228.51yes.com',
+'count229.51yes.com',
+'count23.51yes.com',
+'count230.51yes.com',
+'count231.51yes.com',
+'count232.51yes.com',
+'count233.51yes.com',
+'count234.51yes.com',
+'count235.51yes.com',
+'count236.51yes.com',
+'count237.51yes.com',
+'count238.51yes.com',
+'count239.51yes.com',
+'count24.51yes.com',
+'count240.51yes.com',
+'count241.51yes.com',
+'count242.51yes.com',
+'count243.51yes.com',
+'count244.51yes.com',
+'count245.51yes.com',
+'count246.51yes.com',
+'count247.51yes.com',
+'count248.51yes.com',
+'count249.51yes.com',
+'count25.51yes.com',
+'count250.51yes.com',
+'count251.51yes.com',
+'count252.51yes.com',
+'count253.51yes.com',
+'count254.51yes.com',
+'count255.51yes.com',
+'count256.51yes.com',
+'count257.51yes.com',
+'count258.51yes.com',
+'count259.51yes.com',
+'count26.51yes.com',
+'count260.51yes.com',
+'count261.51yes.com',
+'count262.51yes.com',
+'count263.51yes.com',
+'count264.51yes.com',
+'count265.51yes.com',
+'count266.51yes.com',
+'count267.51yes.com',
+'count268.51yes.com',
+'count269.51yes.com',
+'count27.51yes.com',
+'count270.51yes.com',
+'count271.51yes.com',
+'count272.51yes.com',
+'count273.51yes.com',
+'count274.51yes.com',
+'count275.51yes.com',
+'count276.51yes.com',
+'count277.51yes.com',
+'count278.51yes.com',
+'count279.51yes.com',
+'count28.51yes.com',
+'count280.51yes.com',
+'count281.51yes.com',
+'count282.51yes.com',
+'count283.51yes.com',
+'count284.51yes.com',
+'count285.51yes.com',
+'count286.51yes.com',
+'count287.51yes.com',
+'count288.51yes.com',
+'count289.51yes.com',
+'count29.51yes.com',
+'count290.51yes.com',
+'count291.51yes.com',
+'count292.51yes.com',
+'count293.51yes.com',
+'count294.51yes.com',
+'count295.51yes.com',
+'count296.51yes.com',
+'count297.51yes.com',
+'count298.51yes.com',
+'count299.51yes.com',
+'count3.51yes.com',
+'count30.51yes.com',
+'count300.51yes.com',
+'count301.51yes.com',
+'count302.51yes.com',
+'count303.51yes.com',
+'count304.51yes.com',
+'count305.51yes.com',
+'count306.51yes.com',
+'count307.51yes.com',
+'count308.51yes.com',
+'count309.51yes.com',
+'count31.51yes.com',
+'count310.51yes.com',
+'count311.51yes.com',
+'count312.51yes.com',
+'count313.51yes.com',
+'count314.51yes.com',
+'count315.51yes.com',
+'count316.51yes.com',
+'count317.51yes.com',
+'count318.51yes.com',
+'count319.51yes.com',
+'count32.51yes.com',
+'count320.51yes.com',
+'count321.51yes.com',
+'count322.51yes.com',
+'count323.51yes.com',
+'count324.51yes.com',
+'count325.51yes.com',
+'count326.51yes.com',
+'count327.51yes.com',
+'count328.51yes.com',
+'count329.51yes.com',
+'count33.51yes.com',
+'count330.51yes.com',
+'count331.51yes.com',
+'count332.51yes.com',
+'count333.51yes.com',
+'count334.51yes.com',
+'count335.51yes.com',
+'count336.51yes.com',
+'count337.51yes.com',
+'count338.51yes.com',
+'count339.51yes.com',
+'count34.51yes.com',
+'count340.51yes.com',
+'count341.51yes.com',
+'count342.51yes.com',
+'count343.51yes.com',
+'count344.51yes.com',
+'count345.51yes.com',
+'count346.51yes.com',
+'count347.51yes.com',
+'count348.51yes.com',
+'count349.51yes.com',
+'count35.51yes.com',
+'count350.51yes.com',
+'count351.51yes.com',
+'count352.51yes.com',
+'count353.51yes.com',
+'count354.51yes.com',
+'count355.51yes.com',
+'count356.51yes.com',
+'count357.51yes.com',
+'count358.51yes.com',
+'count359.51yes.com',
+'count36.51yes.com',
+'count360.51yes.com',
+'count361.51yes.com',
+'count362.51yes.com',
+'count363.51yes.com',
+'count364.51yes.com',
+'count365.51yes.com',
+'count366.51yes.com',
+'count367.51yes.com',
+'count368.51yes.com',
+'count369.51yes.com',
+'count37.51yes.com',
+'count370.51yes.com',
+'count371.51yes.com',
+'count372.51yes.com',
+'count373.51yes.com',
+'count374.51yes.com',
+'count375.51yes.com',
+'count376.51yes.com',
+'count377.51yes.com',
+'count378.51yes.com',
+'count379.51yes.com',
+'count38.51yes.com',
+'count380.51yes.com',
+'count381.51yes.com',
+'count382.51yes.com',
+'count383.51yes.com',
+'count384.51yes.com',
+'count385.51yes.com',
+'count386.51yes.com',
+'count387.51yes.com',
+'count388.51yes.com',
+'count389.51yes.com',
+'count39.51yes.com',
+'count390.51yes.com',
+'count391.51yes.com',
+'count392.51yes.com',
+'count393.51yes.com',
+'count394.51yes.com',
+'count395.51yes.com',
+'count396.51yes.com',
+'count397.51yes.com',
+'count398.51yes.com',
+'count399.51yes.com',
+'count4.51yes.com',
+'count40.51yes.com',
+'count400.51yes.com',
+'count401.51yes.com',
+'count402.51yes.com',
+'count403.51yes.com',
+'count404.51yes.com',
+'count405.51yes.com',
+'count406.51yes.com',
+'count407.51yes.com',
+'count408.51yes.com',
+'count409.51yes.com',
+'count41.51yes.com',
+'count410.51yes.com',
+'count411.51yes.com',
+'count412.51yes.com',
+'count413.51yes.com',
+'count414.51yes.com',
+'count415.51yes.com',
+'count416.51yes.com',
+'count417.51yes.com',
+'count418.51yes.com',
+'count419.51yes.com',
+'count42.51yes.com',
+'count420.51yes.com',
+'count421.51yes.com',
+'count422.51yes.com',
+'count423.51yes.com',
+'count424.51yes.com',
+'count425.51yes.com',
+'count426.51yes.com',
+'count427.51yes.com',
+'count428.51yes.com',
+'count429.51yes.com',
+'count43.51yes.com',
+'count430.51yes.com',
+'count431.51yes.com',
+'count432.51yes.com',
+'count433.51yes.com',
+'count434.51yes.com',
+'count435.51yes.com',
+'count436.51yes.com',
+'count437.51yes.com',
+'count438.51yes.com',
+'count439.51yes.com',
+'count44.51yes.com',
+'count440.51yes.com',
+'count441.51yes.com',
+'count442.51yes.com',
+'count443.51yes.com',
+'count444.51yes.com',
+'count445.51yes.com',
+'count446.51yes.com',
+'count447.51yes.com',
+'count448.51yes.com',
+'count449.51yes.com',
+'count45.51yes.com',
+'count450.51yes.com',
+'count451.51yes.com',
+'count452.51yes.com',
+'count453.51yes.com',
+'count454.51yes.com',
+'count455.51yes.com',
+'count456.51yes.com',
+'count457.51yes.com',
+'count458.51yes.com',
+'count459.51yes.com',
+'count46.51yes.com',
+'count460.51yes.com',
+'count461.51yes.com',
+'count462.51yes.com',
+'count463.51yes.com',
+'count464.51yes.com',
+'count465.51yes.com',
+'count466.51yes.com',
+'count467.51yes.com',
+'count468.51yes.com',
+'count469.51yes.com',
+'count47.51yes.com',
+'count470.51yes.com',
+'count471.51yes.com',
+'count472.51yes.com',
+'count473.51yes.com',
+'count474.51yes.com',
+'count475.51yes.com',
+'count476.51yes.com',
+'count477.51yes.com',
+'count478.51yes.com',
+'count479.51yes.com',
+'count48.51yes.com',
+'count480.51yes.com',
+'count481.51yes.com',
+'count482.51yes.com',
+'count483.51yes.com',
+'count484.51yes.com',
+'count485.51yes.com',
+'count486.51yes.com',
+'count487.51yes.com',
+'count488.51yes.com',
+'count489.51yes.com',
+'count49.51yes.com',
+'count490.51yes.com',
+'count491.51yes.com',
+'count492.51yes.com',
+'count493.51yes.com',
+'count494.51yes.com',
+'count495.51yes.com',
+'count496.51yes.com',
+'count497.51yes.com',
+'count498.51yes.com',
+'count499.51yes.com',
+'count4all.com',
+'count5.51yes.com',
+'count5.pconline.com.cn',
+'count50.51yes.com',
+'count500.51yes.com',
+'count501.51yes.com',
+'count502.51yes.com',
+'count503.51yes.com',
+'count504.51yes.com',
+'count505.51yes.com',
+'count506.51yes.com',
+'count507.51yes.com',
+'count508.51yes.com',
+'count509.51yes.com',
+'count51.51yes.com',
+'count510.51yes.com',
+'count511.51yes.com',
+'count512.51yes.com',
+'count513.51yes.com',
+'count514.51yes.com',
+'count515.51yes.com',
+'count516.51yes.com',
+'count517.51yes.com',
+'count518.51yes.com',
+'count519.51yes.com',
+'count52.51yes.com',
+'count520.51yes.com',
+'count521.51yes.com',
+'count522.51yes.com',
+'count523.51yes.com',
+'count524.51yes.com',
+'count525.51yes.com',
+'count526.51yes.com',
+'count527.51yes.com',
+'count528.51yes.com',
+'count529.51yes.com',
+'count53.51yes.com',
+'count530.51yes.com',
+'count531.51yes.com',
+'count532.51yes.com',
+'count533.51yes.com',
+'count534.51yes.com',
+'count535.51yes.com',
+'count536.51yes.com',
+'count537.51yes.com',
+'count538.51yes.com',
+'count539.51yes.com',
+'count54.51yes.com',
+'count540.51yes.com',
+'count541.51yes.com',
+'count542.51yes.com',
+'count543.51yes.com',
+'count544.51yes.com',
+'count545.51yes.com',
+'count546.51yes.com',
+'count547.51yes.com',
+'count548.51yes.com',
+'count549.51yes.com',
+'count55.51yes.com',
+'count550.51yes.com',
+'count551.51yes.com',
+'count552.51yes.com',
+'count553.51yes.com',
+'count554.51yes.com',
+'count555.51yes.com',
+'count556.51yes.com',
+'count557.51yes.com',
+'count558.51yes.com',
+'count559.51yes.com',
+'count56.51yes.com',
+'count560.51yes.com',
+'count561.51yes.com',
+'count562.51yes.com',
+'count563.51yes.com',
+'count564.51yes.com',
+'count565.51yes.com',
+'count566.51yes.com',
+'count567.51yes.com',
+'count568.51yes.com',
+'count569.51yes.com',
+'count57.51yes.com',
+'count570.51yes.com',
+'count571.51yes.com',
+'count572.51yes.com',
+'count573.51yes.com',
+'count574.51yes.com',
+'count575.51yes.com',
+'count576.51yes.com',
+'count577.51yes.com',
+'count578.51yes.com',
+'count579.51yes.com',
+'count58.51yes.com',
+'count580.51yes.com',
+'count581.51yes.com',
+'count582.51yes.com',
+'count583.51yes.com',
+'count584.51yes.com',
+'count585.51yes.com',
+'count586.51yes.com',
+'count587.51yes.com',
+'count588.51yes.com',
+'count589.51yes.com',
+'count59.51yes.com',
+'count590.51yes.com',
+'count591.51yes.com',
+'count592.51yes.com',
+'count593.51yes.com',
+'count594.51yes.com',
+'count595.51yes.com',
+'count596.51yes.com',
+'count597.51yes.com',
+'count598.51yes.com',
+'count599.51yes.com',
+'count6.51yes.com',
+'count60.51yes.com',
+'count600.51yes.com',
+'count601.51yes.com',
+'count602.51yes.com',
+'count603.51yes.com',
+'count604.51yes.com',
+'count605.51yes.com',
+'count606.51yes.com',
+'count607.51yes.com',
+'count608.51yes.com',
+'count609.51yes.com',
+'count61.51yes.com',
+'count610.51yes.com',
+'count611.51yes.com',
+'count612.51yes.com',
+'count613.51yes.com',
+'count614.51yes.com',
+'count615.51yes.com',
+'count616.51yes.com',
+'count617.51yes.com',
+'count618.51yes.com',
+'count619.51yes.com',
+'count62.51yes.com',
+'count620.51yes.com',
+'count621.51yes.com',
+'count622.51yes.com',
+'count623.51yes.com',
+'count624.51yes.com',
+'count625.51yes.com',
+'count626.51yes.com',
+'count627.51yes.com',
+'count628.51yes.com',
+'count629.51yes.com',
+'count63.51yes.com',
+'count630.51yes.com',
+'count631.51yes.com',
+'count632.51yes.com',
+'count633.51yes.com',
+'count634.51yes.com',
+'count635.51yes.com',
+'count636.51yes.com',
+'count637.51yes.com',
+'count638.51yes.com',
+'count639.51yes.com',
+'count64.51yes.com',
+'count640.51yes.com',
+'count641.51yes.com',
+'count642.51yes.com',
+'count643.51yes.com',
+'count644.51yes.com',
+'count645.51yes.com',
+'count646.51yes.com',
+'count647.51yes.com',
+'count648.51yes.com',
+'count649.51yes.com',
+'count65.51yes.com',
+'count650.51yes.com',
+'count651.51yes.com',
+'count652.51yes.com',
+'count653.51yes.com',
+'count654.51yes.com',
+'count655.51yes.com',
+'count656.51yes.com',
+'count657.51yes.com',
+'count658.51yes.com',
+'count659.51yes.com',
+'count66.51yes.com',
+'count660.51yes.com',
+'count661.51yes.com',
+'count662.51yes.com',
+'count663.51yes.com',
+'count664.51yes.com',
+'count665.51yes.com',
+'count666.51yes.com',
+'count667.51yes.com',
+'count668.51yes.com',
+'count669.51yes.com',
+'count67.51yes.com',
+'count670.51yes.com',
+'count671.51yes.com',
+'count672.51yes.com',
+'count673.51yes.com',
+'count674.51yes.com',
+'count675.51yes.com',
+'count676.51yes.com',
+'count677.51yes.com',
+'count678.51yes.com',
+'count679.51yes.com',
+'count68.51yes.com',
+'count680.51yes.com',
+'count681.51yes.com',
+'count682.51yes.com',
+'count683.51yes.com',
+'count684.51yes.com',
+'count685.51yes.com',
+'count686.51yes.com',
+'count687.51yes.com',
+'count688.51yes.com',
+'count689.51yes.com',
+'count69.51yes.com',
+'count690.51yes.com',
+'count691.51yes.com',
+'count692.51yes.com',
+'count693.51yes.com',
+'count694.51yes.com',
+'count695.51yes.com',
+'count696.51yes.com',
+'count697.51yes.com',
+'count698.51yes.com',
+'count699.51yes.com',
+'count7.51yes.com',
+'count70.51yes.com',
+'count700.51yes.com',
+'count701.51yes.com',
+'count702.51yes.com',
+'count703.51yes.com',
+'count704.51yes.com',
+'count705.51yes.com',
+'count706.51yes.com',
+'count707.51yes.com',
+'count708.51yes.com',
+'count709.51yes.com',
+'count71.51yes.com',
+'count710.51yes.com',
+'count711.51yes.com',
+'count712.51yes.com',
+'count713.51yes.com',
+'count714.51yes.com',
+'count715.51yes.com',
+'count716.51yes.com',
+'count717.51yes.com',
+'count718.51yes.com',
+'count719.51yes.com',
+'count72.51yes.com',
+'count720.51yes.com',
+'count721.51yes.com',
+'count722.51yes.com',
+'count723.51yes.com',
+'count724.51yes.com',
+'count725.51yes.com',
+'count726.51yes.com',
+'count727.51yes.com',
+'count728.51yes.com',
+'count729.51yes.com',
+'count73.51yes.com',
+'count730.51yes.com',
+'count731.51yes.com',
+'count732.51yes.com',
+'count733.51yes.com',
+'count734.51yes.com',
+'count735.51yes.com',
+'count736.51yes.com',
+'count737.51yes.com',
+'count738.51yes.com',
+'count739.51yes.com',
+'count74.51yes.com',
+'count740.51yes.com',
+'count741.51yes.com',
+'count742.51yes.com',
+'count743.51yes.com',
+'count744.51yes.com',
+'count745.51yes.com',
+'count746.51yes.com',
+'count747.51yes.com',
+'count748.51yes.com',
+'count749.51yes.com',
+'count75.51yes.com',
+'count750.51yes.com',
+'count751.51yes.com',
+'count752.51yes.com',
+'count753.51yes.com',
+'count754.51yes.com',
+'count755.51yes.com',
+'count756.51yes.com',
+'count757.51yes.com',
+'count758.51yes.com',
+'count759.51yes.com',
+'count76.51yes.com',
+'count760.51yes.com',
+'count761.51yes.com',
+'count762.51yes.com',
+'count763.51yes.com',
+'count764.51yes.com',
+'count765.51yes.com',
+'count766.51yes.com',
+'count767.51yes.com',
+'count768.51yes.com',
+'count769.51yes.com',
+'count77.51yes.com',
+'count770.51yes.com',
+'count771.51yes.com',
+'count772.51yes.com',
+'count773.51yes.com',
+'count774.51yes.com',
+'count775.51yes.com',
+'count776.51yes.com',
+'count777.51yes.com',
+'count778.51yes.com',
+'count779.51yes.com',
+'count78.51yes.com',
+'count780.51yes.com',
+'count781.51yes.com',
+'count782.51yes.com',
+'count783.51yes.com',
+'count784.51yes.com',
+'count785.51yes.com',
+'count786.51yes.com',
+'count787.51yes.com',
+'count788.51yes.com',
+'count789.51yes.com',
+'count79.51yes.com',
+'count790.51yes.com',
+'count791.51yes.com',
+'count792.51yes.com',
+'count793.51yes.com',
+'count794.51yes.com',
+'count795.51yes.com',
+'count796.51yes.com',
+'count797.51yes.com',
+'count798.51yes.com',
+'count799.51yes.com',
+'count8.51yes.com',
+'count80.51yes.com',
+'count800.51yes.com',
+'count801.51yes.com',
+'count802.51yes.com',
+'count803.51yes.com',
+'count804.51yes.com',
+'count805.51yes.com',
+'count806.51yes.com',
+'count807.51yes.com',
+'count808.51yes.com',
+'count809.51yes.com',
+'count81.51yes.com',
+'count810.51yes.com',
+'count811.51yes.com',
+'count812.51yes.com',
+'count813.51yes.com',
+'count814.51yes.com',
+'count815.51yes.com',
+'count816.51yes.com',
+'count817.51yes.com',
+'count818.51yes.com',
+'count819.51yes.com',
+'count82.51yes.com',
+'count820.51yes.com',
+'count821.51yes.com',
+'count822.51yes.com',
+'count823.51yes.com',
+'count824.51yes.com',
+'count825.51yes.com',
+'count826.51yes.com',
+'count827.51yes.com',
+'count828.51yes.com',
+'count829.51yes.com',
+'count83.51yes.com',
+'count830.51yes.com',
+'count831.51yes.com',
+'count832.51yes.com',
+'count833.51yes.com',
+'count834.51yes.com',
+'count835.51yes.com',
+'count836.51yes.com',
+'count837.51yes.com',
+'count838.51yes.com',
+'count839.51yes.com',
+'count84.51yes.com',
+'count840.51yes.com',
+'count841.51yes.com',
+'count842.51yes.com',
+'count843.51yes.com',
+'count844.51yes.com',
+'count845.51yes.com',
+'count846.51yes.com',
+'count847.51yes.com',
+'count848.51yes.com',
+'count849.51yes.com',
+'count85.51yes.com',
+'count850.51yes.com',
+'count851.51yes.com',
+'count852.51yes.com',
+'count853.51yes.com',
+'count854.51yes.com',
+'count855.51yes.com',
+'count856.51yes.com',
+'count857.51yes.com',
+'count858.51yes.com',
+'count859.51yes.com',
+'count86.51yes.com',
+'count860.51yes.com',
+'count861.51yes.com',
+'count862.51yes.com',
+'count863.51yes.com',
+'count864.51yes.com',
+'count865.51yes.com',
+'count866.51yes.com',
+'count867.51yes.com',
+'count868.51yes.com',
+'count869.51yes.com',
+'count87.51yes.com',
+'count870.51yes.com',
+'count871.51yes.com',
+'count872.51yes.com',
+'count873.51yes.com',
+'count874.51yes.com',
+'count875.51yes.com',
+'count876.51yes.com',
+'count877.51yes.com',
+'count878.51yes.com',
+'count879.51yes.com',
+'count88.51yes.com',
+'count880.51yes.com',
+'count881.51yes.com',
+'count882.51yes.com',
+'count883.51yes.com',
+'count884.51yes.com',
+'count885.51yes.com',
+'count886.51yes.com',
+'count887.51yes.com',
+'count888.51yes.com',
+'count889.51yes.com',
+'count89.51yes.com',
+'count890.51yes.com',
+'count891.51yes.com',
+'count892.51yes.com',
+'count893.51yes.com',
+'count894.51yes.com',
+'count895.51yes.com',
+'count896.51yes.com',
+'count897.51yes.com',
+'count898.51yes.com',
+'count899.51yes.com',
+'count9.51yes.com',
+'count90.51yes.com',
+'count900.51yes.com',
+'count901.51yes.com',
+'count902.51yes.com',
+'count903.51yes.com',
+'count904.51yes.com',
+'count905.51yes.com',
+'count906.51yes.com',
+'count907.51yes.com',
+'count908.51yes.com',
+'count909.51yes.com',
+'count91.51yes.com',
+'count910.51yes.com',
+'count911.51yes.com',
+'count912.51yes.com',
+'count913.51yes.com',
+'count914.51yes.com',
+'count915.51yes.com',
+'count916.51yes.com',
+'count917.51yes.com',
+'count918.51yes.com',
+'count919.51yes.com',
+'count92.51yes.com',
+'count920.51yes.com',
+'count921.51yes.com',
+'count922.51yes.com',
+'count923.51yes.com',
+'count924.51yes.com',
+'count925.51yes.com',
+'count926.51yes.com',
+'count927.51yes.com',
+'count928.51yes.com',
+'count929.51yes.com',
+'count93.51yes.com',
+'count930.51yes.com',
+'count931.51yes.com',
+'count932.51yes.com',
+'count933.51yes.com',
+'count934.51yes.com',
+'count935.51yes.com',
+'count936.51yes.com',
+'count937.51yes.com',
+'count938.51yes.com',
+'count939.51yes.com',
+'count94.51yes.com',
+'count940.51yes.com',
+'count941.51yes.com',
+'count942.51yes.com',
+'count943.51yes.com',
+'count944.51yes.com',
+'count945.51yes.com',
+'count946.51yes.com',
+'count947.51yes.com',
+'count948.51yes.com',
+'count949.51yes.com',
+'count95.51yes.com',
+'count950.51yes.com',
+'count951.51yes.com',
+'count952.51yes.com',
+'count953.51yes.com',
+'count954.51yes.com',
+'count955.51yes.com',
+'count956.51yes.com',
+'count957.51yes.com',
+'count958.51yes.com',
+'count959.51yes.com',
+'count96.51yes.com',
+'count960.51yes.com',
+'count961.51yes.com',
+'count962.51yes.com',
+'count963.51yes.com',
+'count964.51yes.com',
+'count965.51yes.com',
+'count966.51yes.com',
+'count967.51yes.com',
+'count968.51yes.com',
+'count969.51yes.com',
+'count97.51yes.com',
+'count970.51yes.com',
+'count971.51yes.com',
+'count972.51yes.com',
+'count973.51yes.com',
+'count974.51yes.com',
+'count975.51yes.com',
+'count976.51yes.com',
+'count977.51yes.com',
+'count978.51yes.com',
+'count979.51yes.com',
+'count98.51yes.com',
+'count980.51yes.com',
+'count981.51yes.com',
+'count982.51yes.com',
+'count983.51yes.com',
+'count984.51yes.com',
+'count985.51yes.com',
+'count986.51yes.com',
+'count987.51yes.com',
+'count988.51yes.com',
+'count989.51yes.com',
+'count99.51yes.com',
+'count990.51yes.com',
+'count991.51yes.com',
+'count992.51yes.com',
+'count993.51yes.com',
+'count994.51yes.com',
+'count995.51yes.com',
+'count996.51yes.com',
+'count997.51yes.com',
+'count998.51yes.com',
+'count999.51yes.com',
+'counted.com',
+'counted.de',
+'counter.1i.kz',
+'counter.adultrevenueservice.com',
+'counter.aport.ru',
+'counter.awempire.com',
+'counter.bizland.com',
+'counter.blogoscoop.net',
+'counter.bloke.com',
+'counter.bravenet.com',
+'counter.caliro.de',
+'counter.cnw.cz',
+'counter.cyberschnuffi.de',
+'counter.cz',
+'counter.dreamhost.com',
+'counter.execpc.com',
+'counter.fatcow.com',
+'counter.fateback.com',
+'counter.fc2.com',
+'counter.gamespy.com',
+'counter.goingup.com',
+'counter.gorodmsk.ru',
+'counter.hackers.lv',
+'counter.hitbox.com',
+'counter.hitslink.com',
+'counter.hitslinks.com',
+'counter.htmlvalidator.com',
+'counter.hyipexplorer.com',
+'counter.inetusa.com',
+'counter.kmindex.ru',
+'counter.ksm.it',
+'counter.li.org',
+'counter.maases.com',
+'counter.megaindex.ru',
+'counter.monkeybanana3.com',
+'counter.mtree.com',
+'counter.mycomputer.com',
+'counter.nn.ru',
+'counter.nope.dk',
+'counter.nowlinux.com',
+'counter.opensuse.org',
+'counter.opinion.com.ua',
+'counter.pagesview.com',
+'counter.photopulse.ru',
+'counter.powweb.com',
+'counter.pr-cy.ru',
+'counter.promodeejay.net',
+'counter.rambler.ru',
+'counter.rapidcounter.com',
+'counter.relmaxtop.com',
+'counter.rian.ru',
+'counter.rootsweb.com',
+'counter.russiansubmitter.com',
+'counter.scribblelive.com',
+'counter.search.bg',
+'counter.sexsuche.tv',
+'counter.sparklit.com',
+'counter.spylog.com',
+'counter.superstats.com',
+'counter.theconversation.edu.au',
+'counter.top.dkd.it',
+'counter.top.ge',
+'counter.top.kg',
+'counter.topping.com.ua',
+'counter.tripod.com',
+'counter.ukr.net',
+'counter.w3open.com',
+'counter.wapstart.ru',
+'counter.wbtiger.mmska.ru',
+'counter.webmart.de',
+'counter.webmedia.pl',
+'counter.xeanon.com',
+'counter.yadro.ru',
+'counter.zeit.de',
+'counter.zone.ee',
+'counter.ztgame.com',
+'counter1.bravenet.com',
+'counter1.sextracker.be',
+'counter1.sextracker.com',
+'counter10.bravenet.com',
+'counter10.sextracker.be',
+'counter10.sextracker.com',
+'counter11.bravenet.com',
+'counter11.sextracker.be',
+'counter11.sextracker.com',
+'counter12.bravenet.com',
+'counter12.sextracker.be',
+'counter12.sextracker.com',
+'counter13.bravenet.com',
+'counter13.sextracker.be',
+'counter13.sextracker.com',
+'counter14.bravenet.com',
+'counter14.sextracker.be',
+'counter14.sextracker.com',
+'counter15.bravenet.com',
+'counter15.sextracker.be',
+'counter15.sextracker.com',
+'counter16.bravenet.com',
+'counter16.sextracker.be',
+'counter16.sextracker.com',
+'counter160.com',
+'counter17.bravenet.com',
+'counter18.bravenet.com',
+'counter19.bravenet.com',
+'counter2.bravenet.com',
+'counter2.freeware.de',
+'counter2.hitbox.com',
+'counter2.hitslink.com',
+'counter2.sextracker.be',
+'counter2.sextracker.com',
+'counter20.bravenet.com',
+'counter21.bravenet.com',
+'counter22.bravenet.com',
+'counter23.bravenet.com',
+'counter24.bravenet.com',
+'counter25.bravenet.com',
+'counter26.bravenet.com',
+'counter27.bravenet.com',
+'counter28.bravenet.com',
+'counter29.bravenet.com',
+'counter3.bravenet.com',
+'counter3.sextracker.be',
+'counter3.sextracker.com',
+'counter30.bravenet.com',
+'counter31.bravenet.com',
+'counter32.bravenet.com',
+'counter33.bravenet.com',
+'counter34.bravenet.com',
+'counter35.bravenet.com',
+'counter36.bravenet.com',
+'counter37.bravenet.com',
+'counter38.bravenet.com',
+'counter39.bravenet.com',
+'counter4.bravenet.com',
+'counter4.sextracker.be',
+'counter4.sextracker.com',
+'counter40.bravenet.com',
+'counter41.bravenet.com',
+'counter42.bravenet.com',
+'counter43.bravenet.com',
+'counter44.bravenet.com',
+'counter45.bravenet.com',
+'counter46.bravenet.com',
+'counter47.bravenet.com',
+'counter48.bravenet.com',
+'counter49.bravenet.com',
+'counter5.bravenet.com',
+'counter5.sextracker.be',
+'counter5.sextracker.com',
+'counter50.bravenet.com',
+'counter6.bravenet.com',
+'counter6.sextracker.be',
+'counter6.sextracker.com',
+'counter7.bravenet.com',
+'counter7.sextracker.be',
+'counter7.sextracker.com',
+'counter8.bravenet.com',
+'counter8.sextracker.be',
+'counter8.sextracker.com',
+'counter9.bravenet.com',
+'counter9.sextracker.be',
+'counter9.sextracker.com',
+'counterattack.com',
+'counterbot.com',
+'counters.auctionwatch.com',
+'counters.auctiva.com',
+'counters.honesty.com',
+'counters4u.com',
+'counterservis.com',
+'countess.twitch.tv',
+'counting4free.com',
+'countit.ch',
+'countmaster.com',
+'countmaster.superstats.com',
+'countomat.com',
+'countonline3.de',
+'counts.tucows.com',
+'countt.51yes.com',
+'countus.editeurjavascript.com',
+'countus1.editeurjavascript.com',
+'countus2.editeurjavascript.com',
+'countus3.editeurjavascript.com',
+'countus4.editeurjavascript.com',
+'countz.com',
+'couponcp-a.akamaihd.net',
+'couponcraze.com',
+'coupondiscounts.com',
+'coupondunia.go2cloud.org',
+'coupons-inc.com',
+'coupons4humanity.go2cloud.org',
+'coverletsnmqnylq.download',
+'covetkqoex.download',
+'covusaffiliates.go2cloud.org',
+'coxds.com',
+'coxnetmasterglobal.112.2o7.net',
+'coxpalmbeachpost.112.2o7.net',
+'cp.abbp1.pw',
+'cp.doublepimp.com',
+'cp.intl.match.com',
+'cp.pushwoosh.com',
+'cp.routehero.com',
+'cp.surf-town.net',
+'cp1dk.voluumtrk.com',
+'cpa.ly',
+'cpaaltima.go2cloud.org',
+'cpabrasil.go2cloud.org',
+'cpadna1.com',
+'cpadoc.com',
+'cpafull.go2cloud.org',
+'cpagrip.com',
+'cpajizz.go2cloud.org',
+'cpalead.com',
+'cpanel.nativeads.com',
+'cpapointer.com',
+'cpaprohits.com',
+'cparevenue.go2cloud.org',
+'cparussia.go2cloud.org',
+'cpasaw.go2cloud.org',
+'cpaswag.go2cloud.org',
+'cpatrac.com',
+'cpatrackr.com',
+'cpaway.afftrack.com',
+'cpayard.com',
+'cpays.com',
+'cpcadnet.com',
+'cpd8.net',
+'cpfclassifieds.com',
+'cpfvtest.2cnt.net',
+'cplpro.go2cloud.org',
+'cpm-plus.com',
+'cpm.amateurcommunity.com',
+'cpm.amateurcommunity.de',
+'cpm.bazoto.com',
+'cpm.biz',
+'cpm.live6.com',
+'cpm.tz4.com',
+'cpm.wargaming.net',
+'cpm.worldofwarplanes.com',
+'cpm10.com',
+'cpmcity.com',
+'cpmfun.com',
+'cpmland.com',
+'cpmleader.com',
+'cpmlove.com',
+'cpmmaster.com',
+'cpmstatsart.com',
+'cpmtips.com',
+'cpmtown.com',
+'cpolixyndenisles.review',
+'cpro.baidu.com',
+'cpro.baidustatic.com',
+'cpv2tracking.com',
+'cpvads.com',
+'cpx.acloudweb.com',
+'cpx.go2cloud.org',
+'cpx.golem.de',
+'cpxcenter.com',
+'cpxl.golem.de',
+'cpxmobile.go2cloud.org',
+'cqcounter.com',
+'cqyoj.voluumtrk.com',
+'cr.tractionize.com',
+'crabbierfnffe.download',
+'crackberry.us.intellitxt.com',
+'crakmedia.com',
+'craveandlamb.com',
+'crd1.bannerbank.ru',
+'creafi.com',
+'create.leadid.com',
+'createsend.com',
+'createsend1.com',
+'createsend3.com',
+'createsend4.com',
+'createsend5.com',
+'creative-mobile.com',
+'creative.360yield.com',
+'creative.abestservers.com',
+'creative.ad120m.com',
+'creative.ad121m.com',
+'creative.ad123m.com',
+'creative.ad124m.com',
+'creative.ad125m.com',
+'creative.ad127m.com',
+'creative.ad129m.com',
+'creative.ad131m.com',
+'creative.ad135m.com',
+'creative.ad7m.com',
+'creative.admtpmp127.com',
+'creative.adonion.com',
+'creative.apn.co.nz',
+'creative.clicksor.com',
+'creative.cpxcenter.com',
+'creative.digitaltargetmarketing.com',
+'creative.hatid.com',
+'creative.m2pub.com',
+'creative.metalyzer.com',
+'creative.rev2pub.com',
+'creative.speednetwork6.com',
+'creative.whi.co.nz',
+'creative.wwwpromoter.com',
+'creative.xtendmedia.com',
+'creative1cdn.mobfox.com',
+'creativeby1.unicast.com',
+'creativeby1.unicast.com.17578.9103.302br.net',
+'creativeby1.unicast.com.17580.9103.302br.net',
+'creativeby1.unicast.com.17582.9103.302br.net',
+'creatives.as4x.tmcs.net',
+'creatives.doubleclick.net',
+'creatives.inmotionhosting.com',
+'creatives.livejasmin.com',
+'creatives.pichunter.com',
+'creativestuff.com',
+'creativos.ads.uigc.net',
+'creativshik.justclick.ru',
+'credit-cards.com',
+'credit-cards.de',
+'credit-cards.nl',
+'credit-cards.org',
+'creoads.com',
+'cringersredtdw.download',
+'crispads.com',
+'crispadvertising.com',
+'crispmedia.com',
+'crispwireless.com',
+'crittercism.com',
+'crkld.voluumtrk.com',
+'croondezztg.download',
+'crossbeamstnmjmmh.download',
+'crosspromotion.ubi.com',
+'crowdcontrol.lotame.com',
+'crowdscience.com',
+'crtl.aimatch.com',
+'crtracklink.com',
+'crucial.com.112.207.net',
+'crummockskubhke.download',
+'crunchroll.com',
+'crushads.com',
+'crwdcntrl.net',
+'crx92.voluumtrk.com',
+'crxbh.voluumtrk.com',
+'cs.adingo.jp',
+'cs.adxpansion.com',
+'cs.atdmt.com',
+'cs.celebbusters.com',
+'cs.exposedontape.com',
+'cs.go.affec.tv',
+'cs.ns1p.net',
+'cs.sexcounter.com',
+'cs1.livetex.ru',
+'cs10.livetex.ru',
+'cs11.livetex.ru',
+'cs12.livetex.ru',
+'cs13.livetex.ru',
+'cs14.livetex.ru',
+'cs15.livetex.ru',
+'cs16.livetex.ru',
+'cs17.livetex.ru',
+'cs18.livetex.ru',
+'cs19.livetex.ru',
+'cs2.livetex.ru',
+'cs20.livetex.ru',
+'cs3.livetex.ru',
+'cs4.livetex.ru',
+'cs5.livetex.ru',
+'cs6.livetex.ru',
+'cs600.wpc.alphacdn.net',
+'cs7.livetex.ru',
+'cs8.livetex.ru',
+'cs9.livetex.ru',
+'csc.beap.bc.yahoo.com',
+'cshoppingbox.partner.leguide.com',
+'csi.gstatic.com',
+'csnation.us.intellitxt.com',
+'cso6i.voluumtrk.com',
+'csstatic.com',
+'cstrk.net',
+'ct.adcenter.net',
+'ct.cnet-ssa.cnet.com',
+'ct.eid.co.nz',
+'ct.itbusinessedge.com',
+'ct.needlive.com',
+'ct.sddan.com',
+'ct.thegear-box.com',
+'ct1.addthis.com',
+'ct1.xrea.com',
+'ct2.comclick.com',
+'ct3.addthis.com',
+'ct5.addthis.com',
+'ct6z.addthis.com',
+'ctn.go2cloud.org',
+'ctnetwork.hu',
+'ctr-iwb.nmg.de',
+'ctr-opc.nmg.de',
+'ctr.nmg.de',
+'ctrack.trafficjunky.net',
+'cts.businesswire.com',
+'cts.snmmd.nl',
+'cts.tradepub.com',
+'cts.vresp.com',
+'cttracking11.com',
+'ctvsmokinggun.112.2o7.net',
+'cu.genesismedia.com',
+'cube.ign.us.intellitxt.com',
+'cubegroup.go2cloud.org',
+'cubismfdzqnurt.download',
+'cuccu.me',
+'cucdn.genesismedia.com',
+'cujaz.voluumtrk.com',
+'cullenderzsqemhqfz.download',
+'culturaltpnxpr.download',
+'cunda.122.2o7.net',
+'cupidplc.go2cloud.org',
+'cur.lv',
+'curate.nestedmedia.com',
+'curbstonexxteskqxv.download',
+'custom.mobpartner.mobi',
+'custom.serving-sys.com',
+'customad.cnn.com',
+'customds.serving-sys.com',
+'customer.bnex.com',
+'customer.heartinternet.co.uk',
+'customize.netster.com',
+'custommediainc.go2cloud.org',
+'cutestuf.com',
+'cutterbuck.com',
+'cuty.doublepimp.com',
+'cv26u.voluumtrk.com',
+'cvbgjnunslain.review',
+'cvt.mydas.mobi',
+'cw1k9.voluumtrk.com',
+'cw5jp.voluumtrk.com',
+'cwdvm.voluumtrk.com',
+'cwdwb.voluumtrk.com',
+'cws.psccint.com',
+'cwsitetrack.com',
+'cx.atdmt.com',
+'cxad.cxense.com',
+'cxdigitalmedia.com',
+'cxw73.voluumtrk.com',
+'cya2.net',
+'cyberbounty.com',
+'cyberclick.net',
+'cyberclickagent.go2cloud.org',
+'cyberwavemedia.com',
+'cyclops.prod.untd.com',
+'cyclops.untd.com',
+'cyclothymewlheoh.download',
+'cyhners.ero-advertising.com',
+'cyk0d.voluumtrk.com',
+'cyonix.to',
+'cypcxeqocolluvies.review',
+'cz8.clickzzs.nl',
+'czrqs.voluumtrk.com',
+'d.adcash.com',
+'d.addelive.com',
+'d.adroll.com',
+'d.adx.io',
+'d.adxcore.com',
+'d.afftrx.com',
+'d.agkn.com',
+'d.annarbor.com',
+'d.applovin.com',
+'d.appsdt.com',
+'d.audienceiq.com',
+'d.billyaffcontent.com',
+'d.btttag.com',
+'d.chango.com',
+'d.delivery45.com',
+'d.delivery47.com',
+'d.delivery49.com',
+'d.delivery51.com',
+'d.financenewsalert.com',
+'d.foxadd.com',
+'d.gettvwizard.com',
+'d.ghostery.com',
+'d.jazzedcdn.com',
+'d.ligatus.com',
+'d.mobpartner.mobi',
+'d.moreover.com',
+'d.p-td.com',
+'d.plugrush.com',
+'d.rapsio.com',
+'d.recomendedsite.com',
+'d.refinedads.com',
+'d.rmgserving.com',
+'d.skimresources.com',
+'d.socdm.com',
+'d.tds.adlabs.ru',
+'d.thanksearch.com',
+'d.turn.com',
+'d.xp1.ru4.com',
+'d.yimg.com',
+'d.zeroredirect.com',
+'d.zeroredirect1.com',
+'d00.sina.com.cn',
+'d06915f22873285e84a9-9954fed71f1f51f77e6d1b38cb5af421.r69.cf2.rackcdn.com',
+'d07c-7e2c-3ef0-1b99.reporo.net',
+'d1.c6.b3.a0.top.list.ru',
+'d1.sc.omtrdc.net',
+'d1.zedo.com',
+'d1110e4.se',
+'d12ulf131zb0yj.cloudfront.net',
+'d13.zedo.com',
+'d136-d24d-4fd4-38d1.reporo.net',
+'d13czkep7ax7nj.cloudfront.net',
+'d13im3ek7neeqp.cloudfront.net',
+'d1447tq2m68ekg.cloudfront.net',
+'d15gt9gwxw5wu0.cloudfront.net',
+'d16.net',
+'d173vqb05g6hza.cloudfront.net',
+'d17f2fxw547952.cloudfront.net',
+'d19972r8wdpby8.cloudfront.net',
+'d1af033869koo7.cloudfront.net',
+'d1byvlfiet2h9q.cloudfront.net',
+'d1cdnlzf6usiff.cloudfront.net',
+'d1cerpgff739r9.cloudfront.net',
+'d1cl1sqtf3o420.cloudfront.net',
+'d1clfvuu2240eh.cloudfront.net',
+'d1dnmhdhg9vg1d.cloudfront.net',
+'d1eoo1tco6rr5e.cloudfront.net',
+'d1ey3fksimezm4.cloudfront.net',
+'d1fc8wv8zag5ca.cloudfront.net',
+'d1fo96xm8fci0r.cloudfront.net',
+'d1gojtoka5qi10.cloudfront.net',
+'d1gp8joe0evc8s.cloudfront.net',
+'d1ivexoxmp59q7.cloudfront.net',
+'d1ksyxj9xozc2j.cloudfront.net',
+'d1l6p2sc9645hc.cloudfront.net',
+'d1lm7kd3bd3yo9.cloudfront.net',
+'d1nkcqm1nusqof.cloudfront.net',
+'d1noellhv8fksc.cloudfront.net',
+'d1pcttwib15k25.cloudfront.net',
+'d1pdpbxj733bb1.cloudfront.net',
+'d1qpxk1wfeh8v1.cloudfront.net',
+'d1rdh3xxuqlqfo.cloudfront.net',
+'d1rgnfh960lz2b.cloudfront.net',
+'d1tprjo2w7krrh.cloudfront.net',
+'d1uwd25yvxu96k.cloudfront.net',
+'d1z2jf7jlzjs58.cloudfront.net',
+'d1zgderxoe1a.cloudfront.net',
+'d2.zedo.com',
+'d21aw2xov4zz0i.cloudfront.net',
+'d21o24qxwf7uku.cloudfront.net',
+'d23guct4biwna6.cloudfront.net',
+'d23nyyb6dc29z6.cloudfront.net',
+'d23p9gffjvre9v.cloudfront.net',
+'d25ruj6ht8bs1.cloudfront.net',
+'d26dzd2k67we08.cloudfront.net',
+'d26j9bp9bq4uhd.cloudfront.net',
+'d26wy0pxd3qqpv.cloudfront.net',
+'d27jt7xr4fq3e8.cloudfront.net',
+'d28ethi6slcjbm.cloudfront.net',
+'d29gqcij.com',
+'d29p64779x43zo.cloudfront.net',
+'d29r6igjpnoykg.cloudfront.net',
+'d2b2x1ywompm1b.cloudfront.net',
+'d2b65ihpmocv7w.cloudfront.net',
+'d2bgg7rjywcwsy.cloudfront.net',
+'d2d2lbvq8xirbs.cloudfront.net',
+'d2dq2ahtl5zl1z.cloudfront.net',
+'d2gfdmu30u15x7.cloudfront.net',
+'d2gi7ultltnc2u.cloudfront.net',
+'d2gpgaupalra1d.cloudfront.net',
+'d2gt9oovykfp1z.cloudfront.net',
+'d2gtlljtkeiyzd.cloudfront.net',
+'d2gz6iop9uxobu.cloudfront.net',
+'d2hap2bsh1k9lw.cloudfront.net',
+'d2mic0r0bo3i6z.cloudfront.net',
+'d2mq0uzafv8ytp.cloudfront.net',
+'d2nlytvx51ywh9.cloudfront.net',
+'d2nq0f8d9ofdwv.cloudfront.net',
+'d2o307dm5mqftz.cloudfront.net',
+'d2oallm7wrqvmi.cloudfront.net',
+'d2oh4tlt9mrke9.cloudfront.net',
+'d2pgy8h4i30on1.cloudfront.net',
+'d2plxos94peuwp.cloudfront.net',
+'d2r359adnh3sfn.cloudfront.net',
+'d2ry9vue95px0b.cloudfront.net',
+'d2so4705rl485y.cloudfront.net',
+'d2tgev5wuprbqq.cloudfront.net',
+'d2tnimpzlb191i.cloudfront.net',
+'d2ubicnllnnszy.cloudfront.net',
+'d2uevgmgh16uk4.cloudfront.net',
+'d2uzdrx7k4koxz.cloudfront.net',
+'d2v9ajh2eysdau.cloudfront.net',
+'d2vig74li2resi.cloudfront.net',
+'d2vt6q0n0iy66w.cloudfront.net',
+'d2wy8f7a9ursnm.cloudfront.net',
+'d2xkqxdy6ewr93.cloudfront.net',
+'d2yhukq7vldf1u.cloudfront.net',
+'d2z1smm3i01tnr.cloudfront.net',
+'d2zah9y47r7bi2.cloudfront.net',
+'d3.condenast.servedbyopenx.com',
+'d3.demo.servedbyopenx.com',
+'d3.sc.omtrdc.net',
+'d3.sina.com.cn',
+'d3.zedo.com',
+'d31bfnnwekbny6.cloudfront.net',
+'d31qbv1cthcecs.cloudfront.net',
+'d32pxqbknuxsuy.cloudfront.net',
+'d33f10u0pfpplc.cloudfront.net',
+'d34ko97cxuv4p7.cloudfront.net',
+'d34obr29voew8l.cloudfront.net',
+'d36lvucg9kzous.cloudfront.net',
+'d37h3y471q0lt2.cloudfront.net',
+'d37kzqe5knnh6t.cloudfront.net',
+'d38pxm3dmrdu6d.cloudfront.net',
+'d38r21vtgndgb1.cloudfront.net',
+'d39xqloz8t5a6x.cloudfront.net',
+'d3a2okcloueqyx.cloudfront.net',
+'d3aa0ztdn3oibi.cloudfront.net',
+'d3aq14vri881or.cloudfront.net',
+'d3cxv97fi8q177.cloudfront.net',
+'d3dc2aopftfkeo.cloudfront.net',
+'d3dphmosjk9rot.cloudfront.net',
+'d3emsmln8xfj03.cloudfront.net',
+'d3ezl4ajpp2zy8.cloudfront.net',
+'d3f9mcik999dte.cloudfront.net',
+'d3fzrm6pcer44x.cloudfront.net',
+'d3hlizmpi4g3v9.cloudfront.net',
+'d3hmb5h5qngs7g.cloudfront.net',
+'d3l3lkinz3f56t.cloudfront.net',
+'d3lvr7yuk4uaui.cloudfront.net',
+'d3lzezfa753mqu.cloudfront.net',
+'d3m41swuqq4sv5.cloudfront.net',
+'d3m83gvgzupli.cloudfront.net',
+'d3mj0pkbugdjcn.cloudfront.net',
+'d3mvnvhjmkxpjz.cloudfront.net',
+'d3nslu0hdya83q.cloudfront.net',
+'d3ojzyhbolvoi5.cloudfront.net',
+'d3oltyb66oj2v8.cloudfront.net',
+'d3pkae9owd2lcf.cloudfront.net',
+'d3pkntwtp2ukl5.cloudfront.net',
+'d3pkrll6is44dx.cloudfront.net',
+'d3q2dpprdsteo.cloudfront.net',
+'d3q6px0y2suh5n.cloudfront.net',
+'d3qszud4qdthr8.cloudfront.net',
+'d3qxef4rp70elm.cloudfront.net',
+'d3rmnwi2tssrfx.cloudfront.net',
+'d3s7ggfq1s6jlj.cloudfront.net',
+'d3tdefw8pwfkbk.cloudfront.net',
+'d3ujids68p6xmq.cloudfront.net',
+'d3v1lb83psg9di.cloudfront.net',
+'d3v27wwd40f0xu.cloudfront.net',
+'d3vc1nm9xbncz5.cloudfront.net',
+'d4.zedo.com',
+'d5.zedo.com',
+'d5e1ef2qzo-8108dl9wk1l8m59.hop.clickbank.net',
+'d5grz.voluumtrk.com',
+'d5nxst8fruw4z.cloudfront.net',
+'d5pvnbpawsaav.cloudfront.net',
+'d6.zedo.com',
+'d6bdy3eto8fyu.cloudfront.net',
+'d6hzz.survey7.adsservingtwig.xyz',
+'d6y1.ads.pof.com',
+'d6y2.ads.pof.com',
+'d6y3.ads.pof.com',
+'d7.zedo.com',
+'d8.zedo.com',
+'d81mfvml8p5ml.cloudfront.net',
+'d844g.voluumtrk.com',
+'d8qy7md4cj3gz.cloudfront.net',
+'d8rk54i4mohrb.cloudfront.net',
+'d9.zedo.com',
+'d9ae99824.se',
+'d9b05-pgfb01xj76ljh8o4sg3f.hop.clickbank.net',
+'d9iwc.voluumtrk.com',
+'d9uqd.voluumtrk.com',
+'da.feedsportal.com',
+'da.virginmedia.com',
+'da5c8.voluumtrk.com',
+'daaa.ero-advertising.com',
+'dacgb.voluumtrk.com',
+'daea.ero-advertising.com',
+'dagasaka.com',
+'dagek.voluumtrk.com',
+'daggr.adsxgm.com',
+'daghashmal.com',
+'daia.ero-advertising.com',
+'daidalos.twyn.com',
+'daikoku.ebis.ne.jp',
+'daily-traffic.com',
+'dailydeals.amarillo.com',
+'dailydeals.augustachronicle.com',
+'dailydeals.brainerddispatch.com',
+'dailydeals.lubbockonline.com',
+'dailydeals.onlineathens.com',
+'dailydeals.savannahnow.com',
+'dailymotion-ams.gravityrd-services.com',
+'dailyradar.ads.imaginemedia.net',
+'dailyslut.net',
+'dailyvideo.securejoin.com',
+'dairyingsmorbjo.download',
+'dal2.voxcloud.cedexis.com',
+'dal9hkyfi0m0n.cloudfront.net',
+'dampnesscoczbh.download',
+'danieltan.evplayer.com',
+'daniweb.us.intellitxt.com',
+'danskebank.122.207.net',
+'darriens.go2affise.com',
+'dart.l.doubleclick.net',
+'das5ku9q.com',
+'dash.scorpiointeractive.com',
+'dashboard.chartboost.com',
+'dashboard.gumgum.com',
+'dashboard.qubitproducts.com',
+'dashboard.trafficforce.com',
+'dat2.ero-advertising.com',
+'data-ero-advertising.com',
+'data-eroadvertising.com',
+'data.adaptiveaudience.com',
+'data.adexda.com',
+'data.alexa.com',
+'data.appflood.com',
+'data.captifymedia.com',
+'data.coremetrics.com',
+'data.econa.com',
+'data.ero-advertising.com',
+'data.flurry.com',
+'data.gametree.tw',
+'data.gosquared.com',
+'data.imakenews.com',
+'data.initialcontroledge.info',
+'data.kamcord.com',
+'data.lockscalecompare.com',
+'data.logentries.com',
+'data.marketgid.com',
+'data.mobclix.com',
+'data.neuroxmedia.com',
+'data.ninemsn.com.au',
+'data.perion.com',
+'data.permittingnorthlandseamen.info',
+'data.ppn-ad-cdn.populis.com',
+'data.publishflow.com',
+'data.redhelper.ru',
+'data.replacingobservedlose.info',
+'data2.ero-advertising.com',
+'data2.gosquared.com',
+'data3.perf.overture.com',
+'data9.econa.com',
+'database.revmob.com',
+'datais.ads.targetnet.com',
+'datais.com',
+'datalabusa.com',
+'datamaster.com.cn',
+'datametrical.com',
+'datashreddergold.com',
+'dataxu.com',
+'date.ero-advertising.com',
+'dating-banners.com',
+'dating-exchange.com',
+'dating.atraf.co.il',
+'dating.ezstatic.com',
+'datingadnetwork.com',
+'datingnow.mobi',
+'datingoffersmedia.go2cloud.org',
+'datingsinglesfree.net',
+'dats.ero-advertising.com',
+'datt.ero-advertising.com',
+'daua.ero-advertising.com',
+'daudc.voluumtrk.com',
+'dava.ero-advertising.com',
+'daversion4.digitalbrandsinc.netdna-cdn.com',
+'dawa.ero-advertising.com',
+'daylogs.com',
+'dayms.voluumtrk.com',
+'daz.com',
+'dazeurbht.download',
+'db.bnex.com',
+'db.c7.b3.a1.top.list.ru',
+'db.hosting.doublepimp.com',
+'db.hosting.rts.doublepimp.com',
+'db.hosting.rts.fling.doublepimp.com',
+'db.hosting.rts.lj.doublepimp.com',
+'db.hosting.rts.phn.doublepimp.com',
+'db.hosting.streamate.doublepimp.com',
+'db0.net-filter.com',
+'db0.sitestats.com',
+'db1.sitestats.com',
+'db2.hosting.doublepimp.com',
+'db2.hosting.rts.doublepimp.com',
+'db2.hosting.rts.fling.doublepimp.com',
+'db2.hosting.rts.lj.doublepimp.com',
+'db2.hosting.rts.phn.doublepimp.com',
+'db2.hosting.streamate.doublepimp.com',
+'db2.net-filter.com',
+'db2.sitestats.com',
+'db3.net-filter.com',
+'db3.sitestats.com',
+'db4.net-filter.com',
+'db4.sitestats.com',
+'db5.net-filter.com',
+'db5.sitestats.com',
+'db6.net-filter.com',
+'db6.sitestats.com',
+'db6fz.voluumtrk.com',
+'db7.net-filter.com',
+'db7.sitestats.com',
+'db8.net-filter.com',
+'db8.sitestats.com',
+'db9.sitestats.com',
+'dbam.dashbida.com',
+'dbbru.voluumtrk.com',
+'dbbsrv.com',
+'dbi1.surf-town.net',
+'dbs-com-sg.b.appier.net',
+'dbs.112.207.net',
+'dbs.advertising.com',
+'dbs.bitterstrawberry.org',
+'dbt.adition.com',
+'dbta.ero-advertising.com',
+'dc.letv.com',
+'dc.plussizetech.com',
+'dc.services.visualstudio.com',
+'dc.tremormedia.com',
+'dc4d4996bc86498d8959-7dc0216bc6cc2f4ed239035dfc17235b.r83.cf3.rackcdn.com',
+'dc84.s290.meetrics.net',
+'dc8na2hxrj29i.cloudfront.net',
+'dc8xl0ndzn2cb.cloudfront.net',
+'dcad.watersoul.com',
+'dcdd29eaa743c493e732-7dc0216bc6cc2f4ed239035dfc17235b.ssl.cf3.rackcdn.com',
+'dcisw.voluumtrk.com',
+'dclk.net',
+'dcs.netbiscuits.net',
+'dcs.plussizetech.com',
+'dcs.wtlive.com',
+'dcvnupudgiest.review',
+'dcw.1592878.com',
+'dd.connextra.com',
+'dd.myapp.com',
+'ddefvibhjwoolfat.review',
+'ddfnmo6ev4fd.cloudfront.net',
+'ddgmb.voluumtrk.com',
+'ddi2.com',
+'ddnk.advertur.ru',
+'ddqhn.voluumtrk.com',
+'ddwht76d9jvfl.cloudfront.net',
+'de-ipd.cdn.videoplaza.tv',
+'de.2.cqcounter.com',
+'de.adition.com',
+'de.adserver.yahoo.com',
+'de.cb.b0.a1.top.mail.ru',
+'de.ioam.de',
+'de.nedstat.net',
+'de.sensic.net',
+'de.sitestat.com',
+'de.tynt.com',
+'de.web.planet49.com',
+'de2.ipinkvisualpass.com',
+'de8of677fyt0b.cloudfront.net',
+'dealcatcher.com',
+'dealchicken.go2cloud.org',
+'dealhelper.com',
+'dealmedia.utsandiego.com',
+'deals.buxr.net',
+'deals.macupdate.com',
+'dealsaust.go2cloud.org',
+'dealsfor.me',
+'dean.doublepimp.com',
+'deanmediagroup.com',
+'debadu.com',
+'debenturessqpwls.download',
+'debsfunpages.com',
+'debug.adfarm1.adition.com',
+'debug.adition.com',
+'debugger.zedo.com',
+'decide.mixpanel.com',
+'declip.crakmedia.snaxxx.tv',
+'dedicatedads.go2cloud.org',
+'deepcom.com',
+'deepervbjacffg.download',
+'deerberrynveztw.download',
+'defeatismbmakiplm.download',
+'defshop01.webtrekk.net',
+'degivuladles.review',
+'dehaj.voluumtrk.com',
+'deignsgcngub.download',
+'dejavu.mercadolivre.com.br',
+'dejavu.mlapps.com',
+'delfinproject.go2cloud.org',
+'deliciousbrains.go2cloud.org',
+'delishows.com',
+'delivere.com',
+'delivery-asia-northeast-1.servedbyopenx.com',
+'delivery-europe-west-1.servedbyopenx.com',
+'delivery-us-east-1.servedbyopenx.com',
+'delivery-us-west-1.servedbyopenx.com',
+'delivery.a.switchadhub.com',
+'delivery.adscension.com',
+'delivery.adstheaa.com',
+'delivery.advanseads.com',
+'delivery.advert-layer.de',
+'delivery.anchorfree.us',
+'delivery.broker.to',
+'delivery.brokerbabe.com',
+'delivery.first-impression.com',
+'delivery.hornyspots.com',
+'delivery.optimatic.com',
+'delivery.preprod.trafficjunky.net',
+'delivery.swid.switchads.com',
+'delivery.switchadhub.com',
+'delivery.trafficbroker.com',
+'delivery.trafficforce.com',
+'delivery.trafficjunky.net',
+'delivery.uauniverse.com',
+'delivery.us.myswitchads.com',
+'delivery.yieldoptimisers.net',
+'delivery04.dhe.ibm.com',
+'delivery1.trafficjunky.net',
+'delivery2.trafficjunky.net',
+'delivery3.trafficjunky.net',
+'delivery4.trafficjunky.net',
+'delivery5.trafficjunky.net',
+'delivery6.trafficjunky.net',
+'delivery9.trafficjunky.net',
+'deliverymailsysytem.co.uk',
+'deloo.de',
+'deloton.com',
+'delta210.rtb.appier.net',
+'delta223.homestead.com',
+'delta244.rtb.appier.net',
+'deltaairlines.tt.omtrdc.net',
+'demandbase.com',
+'demandmedia.s3.amazonaws.com',
+'demarketing.go2cloud.org',
+'demo.adsender.us',
+'demo.advertising.com',
+'demo.cj.com',
+'demo.idg.com.au',
+'demo.kissmetrics.com',
+'demo.yeahmobi.com',
+'demo.zedo.com',
+'demos.zedo.com',
+'demotionstjjrntd.download',
+'denofgeek.uk.intellitxt.com',
+'dentaliumseeldbz.download',
+'denver.cbslocal.us.intellitxt.com',
+'denverpost.112.2o7.net',
+'depesche01.webtrekk.net',
+'depici.2cnt.net',
+'depositphotos.go2cloud.org',
+'derigina.justclick.ru',
+'deriversal.com',
+'derlatas.com',
+'dermadoctoraffiliates.com',
+'derstand.oewabox.at',
+'derstandard.nuggad.net',
+'des.smartclip.net',
+'desalinateorixnpf.download',
+'designweekly.co.cc',
+'desistancetslsdgppv.download',
+'desk.cmix.org',
+'deskwww.s3.amazonaws.com',
+'desmoidqqzopi.download',
+'destricso.com',
+'deta.ero-advertising.com',
+'detect.ergebnis-dienst.de',
+'detector.apptornado.com',
+'detik.serving-sys.com',
+'deucodialytic.review',
+'dev.adsender.us',
+'dev.ajc.cimedia.com',
+'dev.alphagirlz.mobi',
+'dev.ap1.alphagirlz.mobi',
+'dev.ap2.alphagirlz.mobi',
+'dev.bnex.com',
+'dev.demdex.net',
+'dev.flurry.com',
+'dev.mundomediainc.com',
+'dev.skyhookwireless.com',
+'dev.springboardplatform.com',
+'dev.visualwebsiteoptimizer.com',
+'devadmin.cimedia.com',
+'developer.anscamobile.com',
+'device-metrics-us-2.amazon.com',
+'device.4seeresults.com',
+'device.maxmind.com',
+'device.zhiliaoapp.com',
+'devil.go2cloud.org',
+'devolapgt.com',
+'devsalliemaecom.112.2o7.net',
+'devshed.us.intellitxt.com',
+'dezaz.voluumtrk.com',
+'df.telemetry.microsoft.com',
+'dfccgatkeoverworks.review',
+'dfd8-789c-33b8-f419.reporo.net',
+'dfdbz2tdq3k01.cloudfront.net',
+'dff7tx5c2qbxc.cloudfront.net',
+'dfp.doubleclick.net',
+'dfpreports.doubleclick.net',
+'dgird.voluumtrk.com',
+'dh956.com',
+'dhmonitor.dinaserver.com',
+'dhsmarthouse.122.2o7.net',
+'di1.shopping.com',
+'di63.shoppingshadow.com',
+'dialerporn.com',
+'dianomioffers.co.uk',
+'dibmarketing.go2cloud.org',
+'dickssgmobile.btttag.com',
+'dicl9.voluumtrk.com',
+'dictyqijwr.download',
+'dicynodonttglahbvl.download',
+'didit.com',
+'didtal.com',
+'didtheyreadit.com',
+'dieting.searchwho.com',
+'diff.smartadserver.com',
+'diff2.smartadserver.com',
+'diff3.smartadserver.com',
+'digdug.divxnetworks.com',
+'digiaffiliate.go2cloud.org',
+'digibrand.go2cloud.org',
+'digital.datalabusa.com',
+'digitaladvisor.go2cloud.org',
+'digitaldsp.com',
+'digitalfernsehen.de.intellitxt.com',
+'digitalngo.com',
+'digitalone.go2cloud.org',
+'digitalsalesmedia.go2cloud.org',
+'digitrack.go2cloud.org',
+'digits.com',
+'digiwebmarketing.go2cloud.org',
+'digiwebtracking.go2cloud.org',
+'dihgq.voluumtrk.com',
+'dihitt.com',
+'dilhd.voluumtrk.com',
+'dimorphicbwwjmwvh.download',
+'dingecraitos.download',
+'diplozoonhswtvx.download',
+'direct-revenue.com',
+'direct-stats.com',
+'direct-xxx-access.com',
+'direct.apptornado.com',
+'direct.reporo.net',
+'direct.tekblue.net',
+'direct.travelocity.com',
+'directads.epom.com',
+'directads.mcafee.com',
+'directadvert.ru',
+'directbrand.com',
+'directfreebies.com',
+'directleads.com',
+'directleads.net',
+'directory.linkshare.com',
+'directory.snapshot.toolbar.conduit-services.com',
+'directrev.blob.core.windows.net',
+'directrev.cloudapp.net',
+'directstuff.com',
+'directvalue.nl',
+'dirli.voluumtrk.com',
+'dis.criteo.com',
+'dis.eu.criteo.com',
+'dis.us.criteo.com',
+'dischannel.112.2o7.net',
+'discloserwdojtmjb.download',
+'discountclick.com',
+'discoverapps.appia.com',
+'discoverexactly.com',
+'diseaseless.com',
+'disgustingsjnhmuv.download',
+'disjoiningjfdxyogp.download',
+'dismalitydbjmfaux.download',
+'disney.2cnt.net',
+'dispatch.admixer.co.kr',
+'dispatcher.oewabox.at',
+'displacedijnnd.download',
+'display.adsender.us',
+'display.online-adnetwork.com',
+'display.provenpixel.com',
+'displayad.layer-ad.org',
+'displayadserv.adsimilate.com',
+'displayadsmedia.com',
+'displayincloud.adk2.co',
+'disqusads.com',
+'dist.belnk.com',
+'distillery.wistia.com',
+'distortiveecynxpidy.download',
+'distrelec-02.webtrekk.net',
+'disy2s34euyqm.cloudfront.net',
+'diversifymarketing.go2cloud.org',
+'dj.renren.com',
+'dj1.baidu.com',
+'djlf5xdlz7m8m.cloudfront.net',
+'dk.adserver.yahoo.com',
+'dk49j.voluumtrk.com',
+'dk8u3.voluumtrk.com',
+'dkd69bwkvrht1.cloudfront.net',
+'dkdwv3lcby5zi.cloudfront.net',
+'dkj2m377b0yzw.cloudfront.net',
+'dl.adshooter.com',
+'dl.alphagirlz.mobi',
+'dl.clicktraffix.com',
+'dl1d2m8ri9v3j.cloudfront.net',
+'dl392qndlveq0.cloudfront.net',
+'dlapf.voluumtrk.com',
+'dlixv.voluumtrk.com',
+'dlsear.com',
+'dltags.com',
+'dltrk.com',
+'dlupv9uqtjlie.cloudfront.net',
+'dlvr.adne.tv',
+'dlvr.readserver.net',
+'dlvr.t-online.de',
+'dm-online.de',
+'dm.travelocity.com',
+'dm0acvguygm9h.cloudfront.net',
+'dm8srf206hien.cloudfront.net',
+'dmdrogerie01.webtrekk.net',
+'dmeserv.newsinc.com',
+'dmexco.adition.com',
+'dmg.digitaltarget.ru',
+'dmgt.grapeshot.co.uk',
+'dmm.tt.omtrdc.net',
+'dmp.springserve.com',
+'dmp.theadex.com',
+'dmpnetwork.go2cloud.org',
+'dmros.ysm.yahoo.com',
+'dmtracker.com',
+'dn.adzerver.com',
+'dn3y71tq7jf07.cloudfront.net',
+'dna2.mookie1.com',
+'dnads.directnic.com',
+'dnb.doubleclick.net',
+'dneprliga.justclick.ru',
+'dnhgz729v27ca.cloudfront.net',
+'dnn506yrbagrg.cloudfront.net',
+'dns-01.ns.aol.com',
+'dns1.schoffstall.com',
+'dnssec-nd.gexperiments1.com',
+'dnssec-vd.gexperiments2.com',
+'dnsstat.com',
+'dntx.com',
+'dnxek.voluumtrk.com',
+'do.you.uh.yahoo.at.bnex.com',
+'docs.adition.com',
+'docs.applifier.com',
+'docs.apptornado.com',
+'docs.chartbeat.com',
+'docs.chartboost.com',
+'docs.demdex.net',
+'docs.openx.com',
+'docs.performancerevenues.com',
+'docs.zedo.com',
+'doctortrusted.org',
+'dodderssbsczsaao.download',
+'dodkinlsautvfo.download',
+'dogcustom-works.com',
+'dogpile.112.2o7.net',
+'dohillright.com',
+'dohod-inet.justclick.ru',
+'doldrumspijyzkdx.download',
+'doll.home.ro',
+'dolphinsfootball.com',
+'domain.gabia.com',
+'domainoptions.engine.adglare.net',
+'domains.googlesyndication.com',
+'domainsponsor.com',
+'domainsteam.de',
+'domanialtmiqjsrc.download',
+'domdex.com',
+'dominoad.com',
+'dompark.dadapro.com',
+'domseo.com.edgesuite.net',
+'done.witchcraftcash.com',
+'donkeymails.com',
+'dontblockme.modaco.com',
+'donval.112.2o7.net',
+'doozymob.go2affise.com',
+'doqby.voluumtrk.com',
+'dorapodorasham.com',
+'dorsiflexzobyojlh.download',
+'dot.eporner.com',
+'dot.wp.pl',
+'dot2.eporner.com',
+'dotcom-monitor.com',
+'dotcommedia.de',
+'dotlight.2cnt.net',
+'doubleclic.com',
+'doubleclick-analytics.com',
+'doubleclick.com',
+'doubleclick.d4p.net',
+'doubleclick.de',
+'doubleclick.ne.jp',
+'doubleclick.net',
+'doubleclick.net.24489.9178.302br.net',
+'doubleclick.net.25665.9190.302br.net',
+'doubleclick.net.29193.9215.302br.net',
+'doubleclick.net.30961.9240.302br.net',
+'doubleclick.net.34561.9252.302br.net',
+'doubleclick.net.40316.9309.302br.net',
+'doubleclick.net.40928.9313.302br.net',
+'doubleclick.net.42485.9322.302br.net',
+'doubleclick.net.44821.9338.302br.net',
+'doubleclick.net.44824.9338.302br.net',
+'doubleclick.net.44902.9339.302br.net',
+'doubleclick.net.45577.9279.302br.net',
+'doubleclick.net.47979.9357.302br.net',
+'doubleclick.net.47985.9357.302br.net',
+'doubleclick.net.48907.9318.302br.net',
+'doubleclick.net.49072.9361.302br.net',
+'doubleclick.net.50391.9279.302br.net',
+'doubleclick.net.51232.9318.302br.net',
+'doubleclick.net.51253.9318.302br.net',
+'doubleclick.net.51271.9318.302br.net',
+'doubleclick.net.57222.9406.302br.net',
+'doubleclick.net.57240.9406.302br.net',
+'doubleclick.net.57371.9231.302br.net',
+'doubleclick.net.57407.9166.302br.net',
+'doubleclick.net.60984.9336.302br.net',
+'doubleclick.net.62908.9347.302br.net',
+'doubleclick.net.63870.9465.302br.net',
+'doubleclick.net.65115.9496.302br.net',
+'doubleclick.net.67026.9521.302br.net',
+'doubleclick.net.67029.9521.302br.net',
+'doubleclick.net.67569.9336.302br.net',
+'doubleclick.net.68330.9418.302br.net',
+'doubleclick.net.68348.9418.302br.net',
+'doubleclick.net.69538.9566.302br.net',
+'doubleclick.net.69565.9569.302br.net',
+'doubleclick.net.69658.9575.302br.net',
+'doubleclick.net.69664.9575.302br.net',
+'doubleclick.net.70298.9589.302br.net',
+'doubleclick.net.73104.9616.302br.net',
+'doubleclick.net.73728.9620.302br.net',
+'doubleclick.net.76168.9635.302br.net',
+'doubleclick.net.77648.9663.302br.net',
+'doubleclick.net.77654.9663.302br.net',
+'doubleclick.net.80252.9336.302br.net',
+'doubleclick.shockwave.com',
+'doubledeepclick.com',
+'doug1izaerwt3.cloudfront.net',
+'dowlatow.justclick.ru',
+'downbursteefxriuvb.download',
+'download.akamaitools.com.edgesuite.net',
+'download.hitbox.com',
+'download.pchubs.com',
+'download.scorecardresearch.com',
+'download.timesink.com',
+'downloadandsave-a.akamaihd.net',
+'downloadcounter.de',
+'downloads.default-homepage-network.com',
+'downloads.kissmetrics.com',
+'dp.g.doubleclick.net',
+'dp51h10v6ggpa.cloudfront.net',
+'dpdds.voluumtrk.com',
+'dpfyq.voluumtrk.com',
+'dpgoo.voluumtrk.com',
+'dpjxu.voluumtrk.com',
+'dpm.bluray-disc.de',
+'dpm.demdex.net',
+'dpm.zebestof.com',
+'dpmno.voluumtrk.com',
+'dpmsrv.com',
+'dpp750yjcl65g.cloudfront.net',
+'dprtb.com',
+'dps.bing.com',
+'dq2tgxnc2knif.cloudfront.net',
+'dqs001.adtech.fr',
+'dr8pk6ovub897.cloudfront.net',
+'drabbersgpauijt.download',
+'dragon1.visits.lt',
+'dragon145.visits.lt',
+'dragonballzhomeland.com',
+'dramafever.go2cloud.org',
+'drawbrid.ge',
+'drb34.voluumtrk.com',
+'drd.hauchi.com.tw',
+'dreammates.112.2o7.net',
+'dreamsearch.or.kr',
+'drinkmy.com',
+'drippler.helpshift.com',
+'drive.richbanner.ru',
+'drive.videoclick.ru',
+'driver.skyhookwireless.com',
+'drivotracker.com',
+'drogomet.com',
+'droguevnmkkti.download',
+'drosstik.com',
+'drp60gfj3y9kn.cloudfront.net',
+'drrey.voluumtrk.com',
+'drtserver.com',
+'drugscom.us.intellitxt.com',
+'drumcash.com',
+'ds-aksb-a.akamaihd.net',
+'ds-cc.serving-sys.com',
+'ds-vn.serving-sys.com',
+'ds.eyeblaster.com',
+'ds.ign.us.intellitxt.com',
+'ds.serving-sys.com',
+'ds1.nl',
+'dsct1.com',
+'dsgretaillimited.tt.omtrdc.net',
+'dsjuu.voluumtrk.com',
+'dsm.doubleclick.net',
+'dsmmadvantage.com',
+'dsmreports.doubleclick.net',
+'dsms0mj1bbhn4.cloudfront.net',
+'dsnr.net',
+'dsnrmg.com',
+'dsnrmg.go2affise.com',
+'dsosvbpuhw.download',
+'dsp.adfarm1.adition.com',
+'dsp.adkernel.com',
+'dsp.bnmla.com',
+'dspcluster.adfarm1.adition.com',
+'dsply.com',
+'dssja7qsifeak.cloudfront.net',
+'dsum.casalemedia.com',
+'dsyxv.voluumtrk.com',
+'dt.302br.net',
+'dt.adsafeprotected.com',
+'dt.doubleclick.net.12016.9038.302br.net',
+'dt.doubleclick.net.12022.9038.302br.net',
+'dt.scanscout.com',
+'dt.sellpoint.net',
+'dt.videohub2.tv',
+'dtf.goyavelab.com',
+'dtkm4pd19nw6z.cloudfront.net',
+'dtlilztwypawv.cloudfront.net',
+'dtm.advertising.com',
+'dtrck.xyz',
+'dts.akamai.startappexchange.com',
+'dtta.ero-advertising.com',
+'dtym7iokkjlif.cloudfront.net',
+'du8783wkf05yr.cloudfront.net',
+'dualstack.cloudinary.com',
+'duba.net',
+'dubich91119.justclick.ru',
+'dufue2m4sondk.cloudfront.net',
+'dumbfoundrurjldk.download',
+'dumedia.ru',
+'dupue.voluumtrk.com',
+'duramenswaxsjhmqt.download',
+'durre.freestats.com',
+'dust.ipfingerprint.com',
+'duv3c.voluumtrk.com',
+'dv.bitterstrawberry.com',
+'dv1970.freestats.com',
+'dv1ih.voluumtrk.com',
+'dv4uxy777adjt.cloudfront.net',
+'dvdbeats.com',
+'dvnzx.voluumtrk.com',
+'dw-eu.com.com',
+'dw.cnet.com',
+'dw.com.com',
+'dwb54.voluumtrk.com',
+'dwn.pushtraffic.net',
+'dwxmyiyf7jg6.cloudfront.net',
+'dx.steelhousemedia.com',
+'dx5qvhwg92mjd.cloudfront.net',
+'dxq6c0tx3v6mm.cloudfront.net',
+'dxqd86uz345mg.cloudfront.net',
+'dy21q.voluumtrk.com',
+'dy48bnzanqw0v.cloudfront.net',
+'dycpc40hvg4ki.cloudfront.net',
+'dyhju.voluumtrk.com',
+'dyl3p6so5yozo.cloudfront.net',
+'dynamic.aol.com',
+'dynamic.fmpub.net',
+'dynamic.mediaadserver.com',
+'dynamic.woolik.com',
+'dynamyn.go2affise.com',
+'dync.c.appier.net',
+'dyntraq.mtree.com',
+'dypbo.voluumtrk.com',
+'dzccl.voluumtrk.com',
+'e-2dj6wfk4ggdzkbo.stats.esomniture.com',
+'e-2dj6wfkikjd5glq.stats.esomniture.com',
+'e-2dj6wfkiokc5odp.stats.esomniture.com',
+'e-2dj6wflicocjklo.stats.esomniture.com',
+'e-2dj6wflikgdpodo.stats.esomniture.com',
+'e-2dj6wfloenczmkq.stats.esomniture.com',
+'e-2dj6wjk4amd5mfp.stats.esomniture.com',
+'e-2dj6wjkooid5scq.stats.esomniture.com',
+'e-2dj6wjkowjajcbo.stats.esomniture.com',
+'e-2dj6wjkyandpogq.stats.esomniture.com',
+'e-2dj6wjkycpdzckp.stats.esomniture.com',
+'e-2dj6wjkyqmdzcgo.stats.esomniture.com',
+'e-2dj6wjkysndzigp.stats.esomniture.com',
+'e-2dj6wjl4qhd5kdo.stats.esomniture.com',
+'e-2dj6wjliehcjglp.stats.esomniture.com',
+'e-2dj6wjlignajgaq.stats.esomniture.com',
+'e-2dj6wjlyamdpogo.stats.esomniture.com',
+'e-2dj6wjnyagcpkko.stats.esomniture.com',
+'e-2dj6wjnyeocpcdo.stats.esomniture.com',
+'e-2dj6wjnygidjskq.stats.esomniture.com',
+'e-2dj6wjnyqkajabp.stats.esomniture.com',
+'e-bannerx.com',
+'e-communications.insidebandwidth.com',
+'e-hpaces.ero-advertising.com',
+'e-ltvp.inmobi.com',
+'e-n.y-1shz2prbmdj6wvny-1sez2pra2dj6wjmyepdzadpwudj6x9ny-1seq-2-2.stats.esomniture.com',
+'e-ny.a-1shz2prbmdj6wvny-1sez2pra2dj6wjny-1jcpgbowsdj6x9ny-1seq-2-2.stats.esomniture.com',
+'e-tracker.de',
+'e-zeeinternet.com',
+'e.admob.com',
+'e.ai.inmobi.com',
+'e.digitalnectar.co.uk',
+'e.domob.cn',
+'e.ligatus.com',
+'e.monetate.net',
+'e.nexac.com',
+'e.ofuda.cc',
+'e.performancerevenues.com',
+'e.qq.com',
+'e.rmgserving.com',
+'e.tdmagroup.com',
+'e.thanksearch.com',
+'e.yeahmobi.com',
+'e.yieldmanager.net',
+'e.zedo.com',
+'e.zeroredirect.com',
+'e.zeroredirect1.com',
+'e0.extreme-dm.com',
+'e0c8a237dc02264dcf1d3df6c7c0cfa6.adk2.co',
+'e1.extreme-dm.com',
+'e1.static.hoptopboy.com',
+'e1.zedo.com',
+'e14f-a9f5-54dd-d269.reporo.net',
+'e2.emediate.se',
+'e2.extreme-dm.com',
+'e2.static.hoptopboy.com',
+'e250a.track4.com',
+'e32e0c3c972d179cd1d0-1847ac4c91d55b307d162b6d5ad07fe3.r71.cf2.rackcdn.com',
+'e46fa8d94b17745ac277-ae524ab82d83e9108c081b44b53c4ff2.r94.cf2.rackcdn.com',
+'e4sa0.voluumtrk.com',
+'e64cf.voluumtrk.com',
+'e85440ec98f04725.com',
+'e89.friendfinder.com',
+'e8obj.voluumtrk.com',
+'e97527f0.se',
+'e9mlrvy1.com',
+'ea.fleurancenature.fr',
+'ea.rueducommerce.fr',
+'eadexchange.com',
+'eads-com01.webtrekk.net',
+'eads.com',
+'eads.nl',
+'eads.org',
+'eafl3.voluumtrk.com',
+'earntosurf.com',
+'earthlinkcom.122.2o7.net',
+'earthlnkcom.122.2o7.net',
+'eas4.emediate.eu',
+'easilyask.com',
+'easilytrack.com',
+'east.ads.simpli.fi',
+'easyhitcounters.com',
+'easyhits4u.com',
+'easypoll.superstats.com',
+'easypolls.superstats.com',
+'easyscopes.net',
+'easyspace.com',
+'eat-travel.apx.appier.net',
+'eatthis.com',
+'eb0ej.voluumtrk.com',
+'ebao.duba.net',
+'ebay.northernhost.com',
+'ebay4u.justclick.ru',
+'ebayadvertising.com',
+'ebayobjects.com.au',
+'ebayrelevancead.webmasterplan.com',
+'ebe3-ad9d-992b-3990.reporo.net',
+'ebocornac.com',
+'ebonyhead.com',
+'ebtmarketing.com',
+'ebvjw.voluumtrk.com',
+'ec-ns.sascdn.com',
+'ec.atdmt.com',
+'ec.tynt.com',
+'ec01c392919812c4f818-79afe539d963810002081e6e2a51e67e.ssl.cf2.rackcdn.com',
+'ec1.hitbox.com',
+'ec2-54-171-97-32.eu-west-1.compute.amazonaws.com',
+'ec2-54-225-149-4.compute-1.amazonaws.com',
+'ec2-54-235-183-132.compute-1.amazonaws.com',
+'ec90-e3eb-7fb8-2a1c.reporo.net',
+'ecdn.firstimpression.io',
+'echo.teasernet.com',
+'echo4.bluehornet.com',
+'echofonads.appspot.com',
+'eclick.baidu.com',
+'eclkmpbn.com',
+'eclkmpsa.com',
+'ecnxsufmoshing.review',
+'ecomcon.go2cloud.org',
+'ecommerce.go2cloud.org',
+'ecommercetimes.us.intellitxt.com',
+'econa.met.vgwort.de',
+'econda.web.de',
+'economica.2cnt.net',
+'economizerfmtwfqxv.download',
+'ecoupons.com',
+'ecoverage.go2cloud.org',
+'ecpm.adbooth.com',
+'ecpmrocks.com',
+'ectestlampsplus1.112.2o7.net',
+'ectropionqybhnovh.download',
+'ed.koeln.de',
+'edge.aperture.displaymarketplace.com',
+'edge.ayboll.com',
+'edge.bredg.com',
+'edge.jeetyetmedia.com',
+'edge.mb.gammae.com',
+'edge.quantserve.com',
+'edge.reporo.net',
+'edge.sharethis.com',
+'edgy.demo.sproutinc.com',
+'edidomus01.webtrekk.net',
+'editorial.outbrain.com',
+'edk5y.voluumtrk.com',
+'edmundscom.112.2o7.net',
+'edomz.com',
+'edsa.122.2o7.net',
+'edskes.com.site-id.nl',
+'edusearch.go2cloud.org',
+'edusuccessdev.122.2o7.net',
+'edw.edmunds.com',
+'edwlifes.vo.llnwd.net',
+'ee01gws.advertising.com',
+'ee01hmq.advertising.com',
+'ee01job.advertising.com',
+'ee02gws.advertising.com',
+'ee02hmq.advertising.com',
+'ee12gp4.advertising.com',
+'ee74ff81b44.se',
+'ee8f928b71ed0dc6033231fa0943d9f5.adsk2.co',
+'eeb06878.qqc.co',
+'eeczfihelicopter.review',
+'eedclicks.ero-advertising.com',
+'eezy.plxserve.com',
+'efanguide.us.intellitxt.com',
+'effeminatejfghoxdji.download',
+'efoods.go2cloud.org',
+'efront.com',
+'egnfa.voluumtrk.com',
+'egolina.com',
+'ehc-e-healthlinks.122.2o7.net',
+'ehc-justepilepsy.122.2o7.net',
+'ehealthcaresolutions.com',
+'ehealthforum.us.intellitxt.com',
+'ehg-acdsystems.hitbox.com',
+'ehg-adeptscience.hitbox.com',
+'ehg-adobe1p.hitbox.com',
+'ehg-aha.hitbox.com',
+'ehg-akagourmet.hitbox.com',
+'ehg-amerix.hitbox.com',
+'ehg-ati.hitbox.com',
+'ehg-att2.hitbox.com',
+'ehg-attenza.hitbox.com',
+'ehg-attworldnet.hitbox.com',
+'ehg-autodesk.hitbox.com',
+'ehg-autotrader.hitbox.com',
+'ehg-backweb.hitbox.com',
+'ehg-bareweb.hitbox.com',
+'ehg-bbc.hitbox.com',
+'ehg-bestbuy.hitbox.com',
+'ehg-bizjournals.hitbox.com',
+'ehg-bmwna.hitbox.com',
+'ehg-bskyb.hitbox.com',
+'ehg-cafepress.hitbox.com',
+'ehg-careerbuilder.hitbox.com',
+'ehg-cbs.hitbox.com',
+'ehg-chrysler.hitbox.com',
+'ehg-cisco.hitbox.com',
+'ehg-citrixonline.hitbox.com',
+'ehg-clearchannel.hitbox.com',
+'ehg-closetmaid.hitbox.com',
+'ehg-comcast.hitbox.com',
+'ehg-cometsystems.hitbox.com',
+'ehg-commjun.hitbox.com',
+'ehg-communityconnect.hitbox.com',
+'ehg-comscore.hitbox.com',
+'ehg-crain.hitbox.com',
+'ehg-cygnusbm.hitbox.com',
+'ehg-datamonitor.hitbox.com',
+'ehg-dig.hitbox.com',
+'ehg-eckounlimited.hitbox.com',
+'ehg-espn.hitbox.com',
+'ehg-exoteric.hitbox.com',
+'ehg-findlaw.hitbox.com',
+'ehg-foundation.hitbox.com',
+'ehg-foxmovies.hitbox.com',
+'ehg-foxsports.hitbox.com',
+'ehg-fredericks.hitbox.com',
+'ehg-groceryworks.hitbox.com',
+'ehg-guardian.hitbox.com',
+'ehg-hasbro.hitbox.com',
+'ehg-himedia.hitbox.com',
+'ehg-hitent.hitbox.com',
+'ehg-hollywood.hitbox.com',
+'ehg-idg.hitbox.com',
+'ehg-idgentertainment.hitbox.com',
+'ehg-ignitemedia.hitbox.com',
+'ehg-imedia.hitbox.com',
+'ehg-intel.hitbox.com',
+'ehg-ittoolbox.hitbox.com',
+'ehg-itworldcanada.hitbox.com',
+'ehg-jaygroup.hitbox.com',
+'ehg-knightridder.hitbox.com',
+'ehg-learningco.hitbox.com',
+'ehg-legonewyorkinc.hitbox.com',
+'ehg-lexmark.hitbox.com',
+'ehg-liveperson.hitbox.com',
+'ehg-lowermybills.hitbox.com',
+'ehg-macpublishingllc.hitbox.com',
+'ehg-macromedia.hitbox.com',
+'ehg-majorbaseball.hitbox.com',
+'ehg-maplesoft.hitbox.com',
+'ehg-mccormick.hitbox.com',
+'ehg-mh.hitbox.com',
+'ehg-micron.hitbox.com',
+'ehg-mindshare.hitbox.com',
+'ehg-mtv.hitbox.com',
+'ehg-mybc.hitbox.com',
+'ehg-nestlepurinapetcare.hitbox.com',
+'ehg-nestleusainc.hitbox.com',
+'ehg-netapparel.hitbox.com',
+'ehg-newegg.hitbox.com',
+'ehg-newscientist.hitbox.com',
+'ehg-nike.hitbox.com',
+'ehg-nokiafin.hitbox.com',
+'ehg-northjerseymediagroup.hitbox.com',
+'ehg-novell.hitbox.com',
+'ehg-oreilly.hitbox.com',
+'ehg-pacifictheatres.hitbox.com',
+'ehg-pcsecurityshield.hitbox.com',
+'ehg-pennwell.hitbox.com',
+'ehg-peoplesoft.hitbox.com',
+'ehg-pharmacia.hitbox.com',
+'ehg-playboy.hitbox.com',
+'ehg-proflowers.hitbox.com',
+'ehg-qualcomm.hitbox.com',
+'ehg-quantumcorp.hitbox.com',
+'ehg-redherring.hitbox.com',
+'ehg-register.hitbox.com',
+'ehg-rfa.hitbox.com',
+'ehg-salonmedia.hitbox.com',
+'ehg-samsungusa.hitbox.com',
+'ehg-schwannssales.hitbox.com',
+'ehg-silverpop.hitbox.com',
+'ehg-sonybssc.hitbox.com',
+'ehg-sonyelec.hitbox.com',
+'ehg-sonyesolutions.hitbox.com',
+'ehg-sonymusic.hitbox.com',
+'ehg-sonyny.hitbox.com',
+'ehg-space.hitbox.com',
+'ehg-stampsdotcom.hitbox.com',
+'ehg-studentuniverse.hitbox.com',
+'ehg-superwarehouse.hitbox.com',
+'ehg-systemax.hitbox.com',
+'ehg-techtarget.hitbox.com',
+'ehg-telecomitalia.hitbox.com',
+'ehg-thomas.hitbox.com',
+'ehg-tigerdirect.hitbox.com',
+'ehg-tigerdirect2.hitbox.com',
+'ehg-tmgolf.hitbox.com',
+'ehg-topps.hitbox.com',
+'ehg-tumbleweed.hitbox.com',
+'ehg-ubisoft.hitbox.com',
+'ehg-uniontrib.hitbox.com',
+'ehg-verizoncommunications.hitbox.com',
+'ehg-viacom.hitbox.com',
+'ehg-vonage.hitbox.com',
+'ehg-wachovia.hitbox.com',
+'ehg-warnerbrothers.hitbox.com',
+'ehg-wetseal.hitbox.com',
+'ehg-win2000mag.hitbox.com',
+'ehg-wizardsofthecoast.hitbox.com',
+'ehg-womanswallstreet.hitbox.com',
+'ehg-wss.hitbox.com',
+'ehg-yakpak.hitbox.com',
+'ehg-yellowpages.hitbox.com',
+'ehg-zentropypartners.hitbox.com',
+'ehg.hitbox.com',
+'ehh7w.voluumtrk.com',
+'ei.cnzz.com',
+'eightfoldlogic.com',
+'einets.com',
+'einsfestivalliveaccount01.wt-eu02.net',
+'ejbgr.voluumtrk.com',
+'ejs.hitbox.com',
+'ejs.moatads.com',
+'eju10.voluumtrk.com',
+'ejyav.voluumtrk.com',
+'ek4de.voluumtrk.com',
+'ekingkrmxzfpml.download',
+'ekmpinpoint.co.uk',
+'el.woolik.com',
+'eld.jmp9.com',
+'ele.2cnt.net',
+'electorelyjs.download',
+'elflockskmewxdzsq.download',
+'elicitapp.com',
+'elitecpamountain.go2cloud.org',
+'elitepartner.msn.de',
+'elitepartners.ru',
+'elmo.crsspxl.com',
+'eloqua.com',
+'eltiempocitytv.112.2o7.net',
+'eltiempocom.112.2o7.net',
+'eltrafiko.com',
+'em.offerx.co.uk',
+'email-newsletters.com',
+'email.advertising.com',
+'email.crittercism.com',
+'email.livejasmin.com',
+'email.performancerevenues.com',
+'email.yeahmobi.com',
+'email666.com',
+'emailcash.com.au',
+'emailserving.com',
+'emailworks.go2cloud.org',
+'emap.admedia.net',
+'emarketer.com',
+'emarketing.ljhooker.com',
+'emarketing.rmauctions.com',
+'embarkingsztwot.download',
+'embed.spokenlayer.com',
+'embloomedobjqwpc.download',
+'emc-emccom.122.2o7.net',
+'emc-southafrica.122.2o7.net',
+'emd10.medianext.com',
+'emea-bidder.mathtag.com',
+'emea-ukash.netmng.com',
+'emediate.se',
+'emeza-ch01.webtrekk.net',
+'emeza-com01.webtrekk.net',
+'emeza-de01.webtrekk.net',
+'emng.libero.it',
+'empathizewjrclcsh.download',
+'empg.go2cloud.org',
+'employ22.112.2o7.net',
+'employ26.112.2o7.net',
+'employeestnmsy.download',
+'employment.112.2o7.net',
+'emptinesslzajbffo.download',
+'emsdirect.go2cloud.org',
+'emsvr.com',
+'emwsz.voluumtrk.com',
+'en.adition.com',
+'en.adtech.info',
+'en.mywebzines.com',
+'encomiumsenttlzhwt.download',
+'encrypted.reporo.net',
+'endow.com',
+'enetwork.ncbuy.com',
+'enews.bfast.com',
+'enewsletters.ziffdavisinternet.com',
+'enfintrouver.com',
+'enforcertiuvhklj.download',
+'engage.morespeck.com',
+'engagebdr.com',
+'engine.4dsply.com',
+'engine.a.redditmedia.com',
+'engine.adbooth.com',
+'engine.adverserve.net',
+'engine.adzerk.net',
+'engine.airtransat.co.uk',
+'engine.ap.bittorrent.com',
+'engine.aviasales.ru',
+'engine.avid.doublepimp.com',
+'engine.bang.doublepimp.com',
+'engine.billetmoinscher.com',
+'engine.bingocams.com',
+'engine.bitmedianetwork.com',
+'engine.carbonads.com',
+'engine.century.edocbuilder.com',
+'engine.cpmwarez.com',
+'engine.doublepimp.com',
+'engine.edocbuilder.com',
+'engine.espace.netavenir.com',
+'engine.fl-ads.com',
+'engine.fling.doublepimp.com',
+'engine.manwin.doublepimp.com',
+'engine.mobileapptracking.com',
+'engine.multiview.com',
+'engine.netanday.it',
+'engine.partygaming.doublepimp.com',
+'engine.pgmediaserve.com',
+'engine.phn.doublepimp.com',
+'engine.phptrader.com',
+'engine.pianomedia.sk',
+'engine.rk.doublepimp.com',
+'engine.smartbn.ru',
+'engine.statcount.com',
+'engine.streamate.doublepimp.com',
+'engine.trklnks.com',
+'engine.webgozar.ir',
+'engine.widespace.com',
+'englobingoopmzqu.download',
+'enhance.com',
+'enigma.kissmetrics.com',
+'enio.justclick.ru',
+'eniro.d3.sc.omtrdc.net',
+'enlacedpwcuphe.download',
+'enlarget.com',
+'enlightenment.secureshoppingbasket.com',
+'enliven.org',
+'enlnks.com',
+'enpdx.voluumtrk.com',
+'enrichment.moportals.com',
+'enscl.com',
+'ensyp.voluumtrk.com',
+'entercasino.com',
+'enterprise.hitbox.com',
+'enterprisemediagroup.112.2o7.net',
+'enterprisenewsmedia.122.2o7.net',
+'entrepreneur.us.intellitxt.com',
+'entrepreneurpoc.122.2o7.net',
+'environment.searchwho.com',
+'envy.2cnt.net',
+'enzjptkr.com',
+'enzxpkist.review',
+'eo0c1.voluumtrk.com',
+'eoleb.voluumtrk.com',
+'eoredi.com',
+'eosesd.org',
+'ep73e.voluumtrk.com',
+'epicgameads.com',
+'epidm.edgesuite.net',
+'epitaphistnyemzvxw.download',
+'eplayer.clipsyndicate.com',
+'epomads2.4shared.com',
+'epotjriebeckite.review',
+'epowernetworktrackerimages.s3.amazonaws.com',
+'epxkb8zz4ssdv7b.global.ssl.fastly.net',
+'eqads.com',
+'eqgdx.voluumtrk.com',
+'eqlhpcyzarosolios.review',
+'eqs-redserver.appspot.com',
+'equantum.com',
+'equitymarketingsolutions.com',
+'eqx.smartadserver.com',
+'eratrf.com',
+'ercva.com',
+'erendri.com',
+'erjbe.voluumtrk.com',
+'ero-advertising.biz',
+'ero-advertising.co.uk',
+'ero-advertising.com',
+'ero-advertising.de',
+'ero-advertising.eu',
+'ero-advertising.info',
+'ero-advertising.nl',
+'ero-advertising.org',
+'eroadvertising.biz',
+'eroadvertising.com',
+'eroadvertising.eu',
+'eroadvertising.info',
+'eroadvertising.net',
+'eroadvertising.nl',
+'eroadvertising.org',
+'eroanalysis.com',
+'erogaliv.com',
+'erotic.masterstats.com',
+'error.2cnt.net',
+'error.mobpartner.mobi',
+'error.reporo.com',
+'ers.ero-advertising.com',
+'eruno.voluumtrk.com',
+'eryield.jmp9.com',
+'es.adserver.yahoo.com',
+'es.cj.com',
+'es.ero-advertising.com',
+'es.nedstat.net',
+'es.puritan.com',
+'es.statcounter.com',
+'escalatenetwork.com',
+'escati.hypermart.net',
+'escati.linkopp.net',
+'esg.hitbox.com',
+'esg5l.voluumtrk.com',
+'eskimokay.bravejournal.com',
+'esomniture.com',
+'espolupracecz.go2cloud.org',
+'espotting.com',
+'espousershcota.download',
+'esprit-at01.webtrekk.net',
+'esprit-de01.webtrekk.net',
+'esprit-fi01.webtrekk.net',
+'esprit-fr01.webtrekk.net',
+'esprit-nl01.webtrekk.net',
+'esprit-uk01.webtrekk.net',
+'esprit01.webtrekk.net',
+'espritatssl.webtrekk.net',
+'espritbessl.webtrekk.net',
+'espritcoukssl.webtrekk.net',
+'espritdessl.webtrekk.net',
+'espritdkssl.webtrekk.net',
+'espriteussl.webtrekk.net',
+'espritfissl.webtrekk.net',
+'espritfrssl.webtrekk.net',
+'espritnlssl.webtrekk.net',
+'espritshopchssl.webtrekk.net',
+'esquare.go2cloud.org',
+'essen-und-trinken.de.intellitxt.com',
+'estadisticas.lanacion.com.ar',
+'estadonline.publiguias.cl',
+'estat.chez.com',
+'estat.com',
+'esylx.voluumtrk.com',
+'et-code.ru',
+'et.grabnetworks.com',
+'et.nytimes.com',
+'et.twyn-group.com',
+'et.w.inmobi.com',
+'etahub.com',
+'eternalmobi.go2affise.com',
+'ethicalads.net',
+'ethn.io',
+'etl.tindersparks.com',
+'etlpa.voluumtrk.com',
+'etonovosti.biz',
+'etonovosti.net',
+'etoys.bfast.com',
+'etracker.com',
+'etracker.de',
+'etrader.kalahari.com',
+'etrader.kalahari.net',
+'etui.fs.ml.com',
+'etvsg.voluumtrk.com',
+'eu-adcenter.net',
+'eu-gmtdmp.gd1.mookie1.com',
+'eu-pn1.adserver.yahoo.com',
+'eu-pn2.adserver.yahoo.com',
+'eu-pn3.adserver.yahoo.com',
+'eu-pn4.adserver.yahoo.com',
+'eu-px.steelhousemedia.com',
+'eu-u.openx.net',
+'eu.a.volvelle.tech',
+'eu.link.decideinteractive.com',
+'eu.webprodcdn.com',
+'eu.winninganswers.net',
+'eu0.content-serve.net',
+'eu1.madsone.com',
+'eu1.snoobi.com',
+'eu2.madsone.com',
+'eu3.madsone.com',
+'eucainemkjwgw.download',
+'eulogiumalezquc.download',
+'eurekacentral.go2cloud.org',
+'euroathleticgreens.go2cloud.org',
+'europe.adserver.yahoo.com',
+'euros4click.de',
+'eurosponsor.de',
+'euus7.voluumtrk.com',
+'euwidget.imshopping.com',
+'ev.ib-ibi.com',
+'evbeacon.godaddy.com',
+'eveitoki.com',
+'event-dev.adotsolution.com',
+'event.adotsolution.com',
+'event.adxpose.com',
+'event.scorecardresearch.com',
+'event.yoochoose.net',
+'eventi.co.il',
+'eventlog.inspsearchapi.com',
+'eventlogger.soundcloud.com',
+'events-us-east-1.ipredictive.com',
+'events.foreseeresults.com',
+'events.jotform.com',
+'events.olark.com',
+'events.realgravity.com',
+'events.redditmedia.com',
+'events.tremorhub.com',
+'events.walla.co.il',
+'everstring.com',
+'everydayhealth.demdex.net',
+'everyfreegift.com',
+'everyscape.com',
+'everythingbts.com',
+'everythinghsrpple.download',
+'evidencecleanergold.com',
+'evisit.exeter.ac.uk',
+'evita.ivwbox.de',
+'evklj.voluumtrk.com',
+'evo5-com-netmining.netmining.com',
+'evs-hosted-14facd241e1c08.s3.amazonaws.com',
+'evt.moatads.com',
+'evtsl.voluumtrk.com',
+'evwr.hitbox.com',
+'ewordofmouth.com',
+'ex.joyjasp.com',
+'ex.mobmore.com',
+'ex.puata.info',
+'ex.umengcloud.com',
+'exactinstall.com',
+'exactseek.com',
+'exacttarget.com',
+'exad.mmo1vn.com',
+'exadwese.us',
+'exakj.voluumtrk.com',
+'examnotes.us.intellitxt.com',
+'excelpractic.justclick.ru',
+'excelqjmtypxbd.download',
+'exch-e.atdmt.com',
+'exch-eu.atdmt.com',
+'exch-w.atdmt.com',
+'exch.quantcount.com',
+'exch.quantserve.com',
+'exchange-it.com',
+'exchange.admailtiser.com',
+'exchange.bg',
+'exchange.tractionize.com',
+'exchangead.com',
+'exchangebanner.com',
+'exchangeyb.admailtiser.com',
+'exclaimsmwdgsle.download',
+'exct.net',
+'execulink.112.2o7.net',
+'exfgumodulated.review',
+'exit.doublepimp.com',
+'exit.oxcash2.com',
+'exit.xpays.com',
+'exitdevil.com',
+'exitexchange.com',
+'exitfuel.com',
+'exitingihrjdmytt.download',
+'exitmoney.com',
+'exmapro.go2cloud.org',
+'exodusesnkkvycngt.download',
+'exogamichkstnksb.download',
+'exp.platform.glispa.com',
+'expandsearchanswers.com',
+'expansilehsnpjlpb.download',
+'expbl2ro.xbox.com',
+'expedia.ca.112.2o7.net',
+'expert-offers.com',
+'experts.us.intellitxt.com',
+'expertvillage.us.intellitxt.com',
+'export.newscube.de',
+'exporterfpkvxr.download',
+'ext.affaire.com',
+'ext.host-tracker.com',
+'ext.platinnetz.de',
+'ext1.engageya.com',
+'ext4.price.ru',
+'external-lhr0-1.xx.fbcdn.net',
+'external-lhr1-1.xx.fbcdn.net',
+'external-lhr10-1.xx.fbcdn.net',
+'external-lhr2-1.xx.fbcdn.net',
+'external-lhr4-1.xx.fbcdn.net',
+'external-lhr5-1.xx.fbcdn.net',
+'external-lhr6-1.xx.fbcdn.net',
+'external-lhr7-1.xx.fbcdn.net',
+'external-lhr8-1.xx.fbcdn.net',
+'external-lhr9-1.xx.fbcdn.net',
+'externaldb.switchadhub.com',
+'extntechnologies.us.intellitxt.com',
+'extolmentstsxocupq.download',
+'extra.wavecdn.net',
+'extra33.com',
+'extranet.ilius.net',
+'extreme-dm.com',
+'extremetracking.com',
+'extremetracking.net',
+'extzbxocracknels.review',
+'ey.c.appier.net',
+'ey4uh.voluumtrk.com',
+'eyaxf.voluumtrk.com',
+'eyeglassesmlldb.download',
+'eyescream-com-tw.b.appier.net',
+'ez-poll.superstats.com',
+'ez-polls.superstats.com',
+'ezbng.voluumtrk.com',
+'ezcybersearch.com',
+'ezec.co.uk',
+'ezpoll.superstats.com',
+'ezpolls.superstats.com',
+'ezrsd.voluumtrk.com',
+'eztexting.com',
+'ezw0z.voluumtrk.com',
+'f-js1.spotsniper.ru',
+'f.aduwant.com',
+'f.blogads.com',
+'f.mol.im',
+'f.pinid.com',
+'f.rmgserving.com',
+'f.securelinkcorp.com',
+'f.staticlp.com',
+'f.thanksearch.com',
+'f.tracking.goodgamestudios.com',
+'f.zeroredirect.com',
+'f.zeroredirect1.com',
+'f0nuq.voluumtrk.com',
+'f1.ilivlite.com',
+'f1bwg.voluumtrk.com',
+'f2f2-e0e3-6b11-5f39.reporo.net',
+'f2ncracker.112.2o7.net',
+'f2nsmh.112.2o7.net',
+'f2ntheage.112.2o7.net',
+'f54d6bf2b1.se',
+'f5da-aa36-cfa9-346f.reporo.net',
+'f6xzw.voluumtrk.com',
+'f72a-d3a4-0314-7b97.reporo.net',
+'f74zc.voluumtrk.com',
+'f8350e7c1.se',
+'f9ojq.voluumtrk.com',
+'fablingsmmidmlm.download',
+'faceculture.justclick.ru',
+'faceoff.112.2o7.net',
+'fad-1104.nyc1.targetnet.com',
+'fad-1111.nyc1.targetnet.com',
+'fad-1113.nyc1.targetnet.com',
+'fad-1114.nyc1.targetnet.com',
+'fad-1115.nyc1.targetnet.com',
+'fad-408.mtl4.targetnet.com',
+'fad-411.mtl4.targetnet.com',
+'fad-413.mtl4.targetnet.com',
+'faeuz.voluumtrk.com',
+'fairfax.cxsearch.cxense.com',
+'faldagehvvbwm.download',
+'falk.speedera.net',
+'fan.twitch.tv',
+'fandango.gcrd.co',
+'fandangostore.wgiftcard.com',
+'fangcffsne.download',
+'fanners.ero-advertising.com',
+'fanpop.tags.crwdcntrl.net',
+'fansign.streamray.com',
+'faradsfmbrdiejz.download',
+'farfarida.com',
+'farm.plista.com',
+'farmer.wego.com',
+'farmville2.visits.lt',
+'fashiontrafficdemo.go2cloud.org',
+'fast-route.com',
+'fast.anz.demdex.net',
+'fast.cam.demdex.net',
+'fast.choice.demdex.net',
+'fast.fedex.demdex.net',
+'fast.finn.demdex.net',
+'fast.forbes.com',
+'fast.foxnews.demdex.net',
+'fast.globo.demdex.net',
+'fast.lenovo.demdex.net',
+'fast.monster.demdex.net',
+'fast.px.demdex.net',
+'fast.qantas.demdex.net',
+'fast.rbi.demdex.net',
+'fast.rogers.demdex.net',
+'fast.scripps.demdex.net',
+'fastad.beepworld.de',
+'fastads.swiftnews.com',
+'fastadvert.com',
+'fastclick.com',
+'fastclick.com.edgesuite.net',
+'fastcounter.com',
+'fastcounter.linkexchange.net',
+'fasteasytraffic.com',
+'fastlinkfinder.com',
+'fastonlinefinder.com',
+'fastpopclick.com',
+'fastpopunder.com',
+'fasttrack.nu',
+'fata.ero-advertising.com',
+'fatads.toldya.com',
+'faunus.go2affise.com',
+'favoritismkwaqmz.download',
+'faz.ivwbox.de',
+'faz.met.vgwort.de',
+'fb-nym.adnxs.com',
+'fbgdc.com',
+'fbkmnr.112.2o7.net',
+'fbokvk.com.justclick.ru',
+'fbtrack.webtrekk.net',
+'fc.webmasterpro.de',
+'fc4c-b275-b59b-7a32.reporo.net',
+'fccl5.voluumtrk.com',
+'fcd3-8570-6529-d8b7.reporo.net',
+'fcds.affiliatetracking.net',
+'fcgadgets.blogspot.com',
+'fcged.voluumtrk.com',
+'fcmads.go2affise.com',
+'fcstats.altervista.org',
+'fctdi.voluumtrk.com',
+'fcvjhuzdcached.review',
+'fdimages.fairfax.com.au',
+'fdp5y.voluumtrk.com',
+'fe-au.imrworldwide.com',
+'fe.lea.lycos.es',
+'fe1-au.imrworldwide.com',
+'fe2-au.imrworldwide.com',
+'fe3-au.imrworldwide.com',
+'featousvzgzfinst.download',
+'febadu.com',
+'feclo.voluumtrk.com',
+'fedex.demdex.net',
+'fedex.tt.omtrdc.net',
+'fedsit.com',
+'feed.2makeyourday.press',
+'feed.bizzclick.com',
+'feed.peakclick.com',
+'feed.snap.do',
+'feedblitz.com',
+'feedfetch.c.appier.net',
+'feedjit.com',
+'feeds.global-intermedia.com',
+'feeds.logicbuy.com',
+'feeds.mofos.com',
+'feeds.tubecontext.com',
+'feeds.webtrekk.com',
+'feedshare.flipora.com',
+'fegariesupzxx.download',
+'felicityofxmgzq.download',
+'felitb.rightinthebox.com',
+'felliesgrlzafjb.download',
+'femi9.voluumtrk.com',
+'fenix-translation.com.ua',
+'ferdy.org',
+'fermakontenta.justclick.ru',
+'ferrago.uk.intellitxt.com',
+'fessr.voluumtrk.com',
+'festeryfjejya.download',
+'festologyqueudknaa.download',
+'festoonedkyskjtmxv.download',
+'ff.connextra.com',
+'ffbqk.voluumtrk.com',
+'fff.dailymail.co.uk',
+'ffhvtest.2cnt.net',
+'fftf-ips.heroku.com',
+'ffxcam.fairfax.com.au',
+'fg5aa.voluumtrk.com',
+'fghmt.voluumtrk.com',
+'fh1tz.voluumtrk.com',
+'fh2ex.voluumtrk.com',
+'fhatfee.ero-advertising.com',
+'fhb9n.trackvoluum.com',
+'fhg.iknowthatgirl.com',
+'fhg.mofos.com',
+'fhg.pervsonpatrol.com',
+'fhg.realslutparty.com',
+'fhlyo.voluumtrk.com',
+'fhserve.com',
+'fiacardservicesgroup.tt.omtrdc.net',
+'fiafii.org',
+'fideismmbertleo.download',
+'fiesta-game.com',
+'fifa.d2.sc.omtrdc.net',
+'fiksu.com',
+'filament-stats.herokuapp.com',
+'filecm.net',
+'files.adspdbl.com',
+'files.chartboost.com',
+'files.download-sponsor.de',
+'fileserver.glam.com',
+'filestore.adition.com',
+'filetarget.net',
+'fillymedia.go2affise.com',
+'filmboxlive.go2cloud.org',
+'filmforcedvd.ign.us.intellitxt.com',
+'filter.adexchangemedia.xyz',
+'filter.online-adnetwork.com',
+'filter.onwardclick.com',
+'filtertest.2cnt.net',
+'fim.adnxs.com',
+'fimserve.ign.com',
+'finalizehmnzdo.download',
+'finatime.ivwbox.de',
+'findalternate.com',
+'findanopportunity.com',
+'findcommerce.com',
+'findepended.com',
+'findlisted.com',
+'findnsave.idahostatesman.com',
+'finduses.com',
+'fineclicks.com',
+'finen.voluumtrk.com',
+'fingerhut.track4.com',
+'finickingzepkzyw.download',
+'finn.demdex.net',
+'fips.uimserv.net',
+'firecash.org',
+'firecpa.com',
+'firehunt.com',
+'firetrck.com',
+'firewall.timesink.com',
+'firingsquad.us.intellitxt.com',
+'firmingqubvlnepw.download',
+'first.nova.cz',
+'firstadnetwork.go2cloud.org',
+'firstload.com',
+'firstlook.com',
+'firstname.com',
+'firstsnfmlmlohq.download',
+'fitness.searchwho.com',
+'fitwoman.justclick.ru',
+'fizzix.com',
+'fjhtp.voluumtrk.com',
+'fjlhf.voluumtrk.com',
+'fjm0v.voluumtrk.com',
+'fjz3c.voluumtrk.com',
+'fjzwn.voluumtrk.com',
+'fkm.go2cloud.org',
+'fkref.com',
+'fkyno.voluumtrk.com',
+'fl.milesplit.com',
+'fl01.ct2.comclick.com',
+'flaconi02.webtrekk.net',
+'flagship.asp-host.co.uk',
+'flagstickidiambxee.download',
+'flash-counter.com',
+'flash.doubleclick-analytics.com',
+'flash.quantserve.com',
+'flashbanners.static.ard.xxxblackbook.com',
+'flashstats.libsyn.com',
+'flashtest.ero-advertising.com',
+'flashvortex.com',
+'flatdee.ero-advertising.com',
+'flatex-at01.webtrekk.net',
+'flatex-de01.webtrekk.net',
+'flatfae.ero-advertising.com',
+'flatfea.ero-advertising.com',
+'flatfee.ero-advertising.com',
+'fledn.voluumtrk.com',
+'flensingiyflh.download',
+'flex.msn.com',
+'flexbanner.com',
+'flexbeta.us.intellitxt.com',
+'flexoffers.com',
+'fliegen-sparen.de.intellitxt.com',
+'flippermedia.go2cloud.org',
+'flippermedia.hasoffers.com',
+'flirt.youjizz.com',
+'flixfacts.co.uk',
+'floctwuupgrowing.review',
+'flom.net',
+'floppybank.com',
+'floridasmb.go2cloud.org',
+'flowgo.com',
+'flowleadsmedia.go2cloud.org',
+'fls-eu.amazon-adsystem.com',
+'fls-eu.amazon.com',
+'fls-eu.amazon.de',
+'fls-fe.amazon-adsystem.com',
+'fls-fe.amazon.co.jp',
+'fls-na.amazon-adsystem.com',
+'fls.doubleclick.net',
+'flu.secureintl.com',
+'fluentmobile.com',
+'flurry.com',
+'flvmoviesdownloader.com',
+'flvyh.voluumtrk.com',
+'flw.ero-advertising.com',
+'flygo.ru',
+'flyinads.com',
+'fmaster.webtrekk.net',
+'fmmlk.voluumtrk.com',
+'fmpub.net',
+'fmtv.go2cloud.org',
+'fmydk.voluumtrk.com',
+'fn.hgin.com',
+'fnatfee.ero-advertising.com',
+'focalink.com',
+'focusin.com',
+'focusworks.com',
+'fodderingcuyrwzrwq.download',
+'foditgoz.com',
+'foi8q.voluumtrk.com',
+'folksierkfxqlpc.download',
+'followup.adlandpro.com',
+'folloyu.com',
+'fomentingbuutbsdi.download',
+'foo.freelogs.com',
+'forbes.us.intellitxt.com',
+'forbescom.112.2o7.net',
+'forcemovement.go2cloud.org',
+'ford.demdex.net',
+'forefeetwsjgg.download',
+'foreign.marketgid.com',
+'forelook.com',
+'foreseeresults.com',
+'forestvieweu.go2cloud.org',
+'forex-expert.justclick.ru',
+'forexac.justclick.ru',
+'forexforecast.co.cc',
+'forkitz.com',
+'form-cdn.pardot.com',
+'forms.ontraport.com',
+'forskning.tns-cs.net',
+'fortpush.com',
+'forum-fok.digidip.net',
+'forum.adspaces.ero-advertising.com',
+'forum.ero-advertising.com',
+'forum.livejasmin.com',
+'forum.yeahmobi.com',
+'forums.adspaces.ero-advertising.com',
+'forums.data2.ero-advertising.com',
+'forums.ero-advertising.com',
+'forumwarz.s3.amazonaws.com',
+'forwardleo.justclick.ru',
+'fossilisedboxbkshj.download',
+'fossilisesgcjrfazlr.download',
+'fotocommunity.digidip.net',
+'fourthgearmedia.go2cloud.org',
+'foxarmedia.com',
+'foxcom.112.2o7.net',
+'foxgloveslyukq.download',
+'foxnet.demdex.net',
+'foxnews.tt.omtrdc.net',
+'foxsimpsons.112.2o7.net',
+'foxy.track4.com',
+'foy4a.trackvoluum.com',
+'foy4a.voluumtrk.com',
+'fozdw.voluumtrk.com',
+'fp.buy.com',
+'fp.fraudmetrix.cn',
+'fp.gad-network.com',
+'fp108.digitaloptout.com',
+'fpa.ero-advertising.com',
+'fpctraffic.com',
+'fpctraffic2.com',
+'fpfts.voluumtrk.com',
+'fpxrl.voluumtrk.com',
+'fpzee.voluumtrk.com',
+'fr-himedia.cdn.videoplaza.tv',
+'fr.2.cqcounter.com',
+'fr.adserver.yahoo.com',
+'fr.nedstat.net',
+'fr.sitestat.com',
+'fra1.ib.adnxs.com',
+'fra1.mobile.adnxs.com',
+'fra10.ib.adnxs.com',
+'fra100.ib.adnxs.com',
+'fra101.ib.adnxs.com',
+'fra102.ib.adnxs.com',
+'fra103.ib.adnxs.com',
+'fra104.ib.adnxs.com',
+'fra105.ib.adnxs.com',
+'fra106.ib.adnxs.com',
+'fra107.ib.adnxs.com',
+'fra108.ib.adnxs.com',
+'fra109.ib.adnxs.com',
+'fra11.ib.adnxs.com',
+'fra110.ib.adnxs.com',
+'fra111.ib.adnxs.com',
+'fra112.ib.adnxs.com',
+'fra113.ib.adnxs.com',
+'fra114.ib.adnxs.com',
+'fra115.ib.adnxs.com',
+'fra116.ib.adnxs.com',
+'fra117.ib.adnxs.com',
+'fra118.ib.adnxs.com',
+'fra119.ib.adnxs.com',
+'fra12.ib.adnxs.com',
+'fra120.ib.adnxs.com',
+'fra121.ib.adnxs.com',
+'fra122.ib.adnxs.com',
+'fra123.ib.adnxs.com',
+'fra124.ib.adnxs.com',
+'fra125.ib.adnxs.com',
+'fra126.ib.adnxs.com',
+'fra127.ib.adnxs.com',
+'fra128.ib.adnxs.com',
+'fra129.ib.adnxs.com',
+'fra13.ib.adnxs.com',
+'fra130.ib.adnxs.com',
+'fra131.ib.adnxs.com',
+'fra132.ib.adnxs.com',
+'fra133.ib.adnxs.com',
+'fra134.ib.adnxs.com',
+'fra135.ib.adnxs.com',
+'fra136.ib.adnxs.com',
+'fra137.ib.adnxs.com',
+'fra138.ib.adnxs.com',
+'fra139.ib.adnxs.com',
+'fra14.ib.adnxs.com',
+'fra140.ib.adnxs.com',
+'fra141.ib.adnxs.com',
+'fra142.ib.adnxs.com',
+'fra143.ib.adnxs.com',
+'fra144.ib.adnxs.com',
+'fra145.ib.adnxs.com',
+'fra146.ib.adnxs.com',
+'fra147.ib.adnxs.com',
+'fra148.ib.adnxs.com',
+'fra149.ib.adnxs.com',
+'fra15.ib.adnxs.com',
+'fra150.ib.adnxs.com',
+'fra151.ib.adnxs.com',
+'fra152.ib.adnxs.com',
+'fra153.ib.adnxs.com',
+'fra154.ib.adnxs.com',
+'fra155.ib.adnxs.com',
+'fra156.ib.adnxs.com',
+'fra157.ib.adnxs.com',
+'fra158.ib.adnxs.com',
+'fra159.ib.adnxs.com',
+'fra16.ib.adnxs.com',
+'fra160.ib.adnxs.com',
+'fra161.ib.adnxs.com',
+'fra162.ib.adnxs.com',
+'fra163.ib.adnxs.com',
+'fra164.ib.adnxs.com',
+'fra165.ib.adnxs.com',
+'fra166.ib.adnxs.com',
+'fra167.ib.adnxs.com',
+'fra168.ib.adnxs.com',
+'fra169.ib.adnxs.com',
+'fra17.ib.adnxs.com',
+'fra170.ib.adnxs.com',
+'fra171.ib.adnxs.com',
+'fra172.ib.adnxs.com',
+'fra173.ib.adnxs.com',
+'fra174.ib.adnxs.com',
+'fra175.ib.adnxs.com',
+'fra176.ib.adnxs.com',
+'fra177.ib.adnxs.com',
+'fra178.ib.adnxs.com',
+'fra179.ib.adnxs.com',
+'fra18.ib.adnxs.com',
+'fra180.ib.adnxs.com',
+'fra181.ib.adnxs.com',
+'fra182.ib.adnxs.com',
+'fra183.ib.adnxs.com',
+'fra184.ib.adnxs.com',
+'fra185.ib.adnxs.com',
+'fra186.ib.adnxs.com',
+'fra187.ib.adnxs.com',
+'fra188.ib.adnxs.com',
+'fra189.ib.adnxs.com',
+'fra19.ib.adnxs.com',
+'fra190.ib.adnxs.com',
+'fra191.ib.adnxs.com',
+'fra192.ib.adnxs.com',
+'fra193.ib.adnxs.com',
+'fra194.ib.adnxs.com',
+'fra195.ib.adnxs.com',
+'fra196.ib.adnxs.com',
+'fra197.ib.adnxs.com',
+'fra198.ib.adnxs.com',
+'fra199.ib.adnxs.com',
+'fra2.ib.adnxs.com',
+'fra20.ib.adnxs.com',
+'fra200.ib.adnxs.com',
+'fra201.ib.adnxs.com',
+'fra202.ib.adnxs.com',
+'fra203.ib.adnxs.com',
+'fra204.ib.adnxs.com',
+'fra205.ib.adnxs.com',
+'fra206.ib.adnxs.com',
+'fra207.ib.adnxs.com',
+'fra208.ib.adnxs.com',
+'fra209.ib.adnxs.com',
+'fra21.ib.adnxs.com',
+'fra210.ib.adnxs.com',
+'fra211.ib.adnxs.com',
+'fra212.ib.adnxs.com',
+'fra213.ib.adnxs.com',
+'fra214.ib.adnxs.com',
+'fra215.ib.adnxs.com',
+'fra216.ib.adnxs.com',
+'fra217.ib.adnxs.com',
+'fra218.ib.adnxs.com',
+'fra219.ib.adnxs.com',
+'fra22.ib.adnxs.com',
+'fra220.ib.adnxs.com',
+'fra221.ib.adnxs.com',
+'fra222.ib.adnxs.com',
+'fra223.ib.adnxs.com',
+'fra224.ib.adnxs.com',
+'fra225.ib.adnxs.com',
+'fra226.ib.adnxs.com',
+'fra227.ib.adnxs.com',
+'fra228.ib.adnxs.com',
+'fra229.ib.adnxs.com',
+'fra23.ib.adnxs.com',
+'fra230.ib.adnxs.com',
+'fra231.ib.adnxs.com',
+'fra232.ib.adnxs.com',
+'fra233.ib.adnxs.com',
+'fra234.ib.adnxs.com',
+'fra235.ib.adnxs.com',
+'fra236.ib.adnxs.com',
+'fra237.ib.adnxs.com',
+'fra238.ib.adnxs.com',
+'fra239.ib.adnxs.com',
+'fra24.ib.adnxs.com',
+'fra240.ib.adnxs.com',
+'fra241.ib.adnxs.com',
+'fra242.ib.adnxs.com',
+'fra243.ib.adnxs.com',
+'fra244.ib.adnxs.com',
+'fra245.ib.adnxs.com',
+'fra246.ib.adnxs.com',
+'fra247.ib.adnxs.com',
+'fra248.ib.adnxs.com',
+'fra249.ib.adnxs.com',
+'fra25.ib.adnxs.com',
+'fra250.ib.adnxs.com',
+'fra251.ib.adnxs.com',
+'fra252.ib.adnxs.com',
+'fra253.ib.adnxs.com',
+'fra254.ib.adnxs.com',
+'fra255.ib.adnxs.com',
+'fra256.ib.adnxs.com',
+'fra257.ib.adnxs.com',
+'fra258.ib.adnxs.com',
+'fra259.ib.adnxs.com',
+'fra26.ib.adnxs.com',
+'fra260.ib.adnxs.com',
+'fra261.ib.adnxs.com',
+'fra262.ib.adnxs.com',
+'fra263.ib.adnxs.com',
+'fra264.ib.adnxs.com',
+'fra265.ib.adnxs.com',
+'fra266.ib.adnxs.com',
+'fra267.ib.adnxs.com',
+'fra268.ib.adnxs.com',
+'fra269.ib.adnxs.com',
+'fra27.ib.adnxs.com',
+'fra270.ib.adnxs.com',
+'fra271.ib.adnxs.com',
+'fra272.ib.adnxs.com',
+'fra273.ib.adnxs.com',
+'fra274.ib.adnxs.com',
+'fra275.ib.adnxs.com',
+'fra276.ib.adnxs.com',
+'fra277.ib.adnxs.com',
+'fra278.ib.adnxs.com',
+'fra279.ib.adnxs.com',
+'fra28.ib.adnxs.com',
+'fra280.ib.adnxs.com',
+'fra281.ib.adnxs.com',
+'fra282.ib.adnxs.com',
+'fra283.ib.adnxs.com',
+'fra284.ib.adnxs.com',
+'fra285.ib.adnxs.com',
+'fra286.ib.adnxs.com',
+'fra287.ib.adnxs.com',
+'fra288.ib.adnxs.com',
+'fra289.ib.adnxs.com',
+'fra29.ib.adnxs.com',
+'fra290.ib.adnxs.com',
+'fra291.ib.adnxs.com',
+'fra292.ib.adnxs.com',
+'fra293.ib.adnxs.com',
+'fra294.ib.adnxs.com',
+'fra295.ib.adnxs.com',
+'fra296.ib.adnxs.com',
+'fra297.ib.adnxs.com',
+'fra298.ib.adnxs.com',
+'fra299.ib.adnxs.com',
+'fra3.ib.adnxs.com',
+'fra30.ib.adnxs.com',
+'fra300.ib.adnxs.com',
+'fra301.ib.adnxs.com',
+'fra302.ib.adnxs.com',
+'fra303.ib.adnxs.com',
+'fra304.ib.adnxs.com',
+'fra305.ib.adnxs.com',
+'fra306.ib.adnxs.com',
+'fra307.ib.adnxs.com',
+'fra308.ib.adnxs.com',
+'fra309.ib.adnxs.com',
+'fra31.ib.adnxs.com',
+'fra310.ib.adnxs.com',
+'fra311.ib.adnxs.com',
+'fra312.ib.adnxs.com',
+'fra313.ib.adnxs.com',
+'fra314.ib.adnxs.com',
+'fra315.ib.adnxs.com',
+'fra316.ib.adnxs.com',
+'fra317.ib.adnxs.com',
+'fra318.ib.adnxs.com',
+'fra319.ib.adnxs.com',
+'fra32.ib.adnxs.com',
+'fra320.ib.adnxs.com',
+'fra321.ib.adnxs.com',
+'fra322.ib.adnxs.com',
+'fra323.ib.adnxs.com',
+'fra324.ib.adnxs.com',
+'fra325.ib.adnxs.com',
+'fra326.ib.adnxs.com',
+'fra327.ib.adnxs.com',
+'fra328.ib.adnxs.com',
+'fra329.ib.adnxs.com',
+'fra33.ib.adnxs.com',
+'fra330.ib.adnxs.com',
+'fra331.ib.adnxs.com',
+'fra332.ib.adnxs.com',
+'fra333.ib.adnxs.com',
+'fra334.ib.adnxs.com',
+'fra335.ib.adnxs.com',
+'fra336.ib.adnxs.com',
+'fra337.ib.adnxs.com',
+'fra338.ib.adnxs.com',
+'fra339.ib.adnxs.com',
+'fra34.ib.adnxs.com',
+'fra340.ib.adnxs.com',
+'fra341.ib.adnxs.com',
+'fra342.ib.adnxs.com',
+'fra343.ib.adnxs.com',
+'fra344.ib.adnxs.com',
+'fra345.ib.adnxs.com',
+'fra346.ib.adnxs.com',
+'fra347.ib.adnxs.com',
+'fra348.ib.adnxs.com',
+'fra349.ib.adnxs.com',
+'fra35.ib.adnxs.com',
+'fra350.ib.adnxs.com',
+'fra351.ib.adnxs.com',
+'fra352.ib.adnxs.com',
+'fra353.ib.adnxs.com',
+'fra354.ib.adnxs.com',
+'fra355.ib.adnxs.com',
+'fra356.ib.adnxs.com',
+'fra357.ib.adnxs.com',
+'fra358.ib.adnxs.com',
+'fra359.ib.adnxs.com',
+'fra36.ib.adnxs.com',
+'fra360.ib.adnxs.com',
+'fra361.ib.adnxs.com',
+'fra362.ib.adnxs.com',
+'fra363.ib.adnxs.com',
+'fra364.ib.adnxs.com',
+'fra365.ib.adnxs.com',
+'fra366.ib.adnxs.com',
+'fra367.ib.adnxs.com',
+'fra368.ib.adnxs.com',
+'fra369.ib.adnxs.com',
+'fra37.ib.adnxs.com',
+'fra370.ib.adnxs.com',
+'fra371.ib.adnxs.com',
+'fra372.ib.adnxs.com',
+'fra373.ib.adnxs.com',
+'fra374.ib.adnxs.com',
+'fra375.ib.adnxs.com',
+'fra376.ib.adnxs.com',
+'fra377.ib.adnxs.com',
+'fra378.ib.adnxs.com',
+'fra379.ib.adnxs.com',
+'fra38.ib.adnxs.com',
+'fra380.ib.adnxs.com',
+'fra381.ib.adnxs.com',
+'fra382.ib.adnxs.com',
+'fra383.ib.adnxs.com',
+'fra384.ib.adnxs.com',
+'fra385.ib.adnxs.com',
+'fra386.ib.adnxs.com',
+'fra387.ib.adnxs.com',
+'fra388.ib.adnxs.com',
+'fra389.ib.adnxs.com',
+'fra39.ib.adnxs.com',
+'fra390.ib.adnxs.com',
+'fra391.ib.adnxs.com',
+'fra392.ib.adnxs.com',
+'fra393.ib.adnxs.com',
+'fra394.ib.adnxs.com',
+'fra395.ib.adnxs.com',
+'fra396.ib.adnxs.com',
+'fra397.ib.adnxs.com',
+'fra398.ib.adnxs.com',
+'fra399.ib.adnxs.com',
+'fra4.ib.adnxs.com',
+'fra40.ib.adnxs.com',
+'fra400.ib.adnxs.com',
+'fra401.ib.adnxs.com',
+'fra402.ib.adnxs.com',
+'fra403.ib.adnxs.com',
+'fra404.ib.adnxs.com',
+'fra405.ib.adnxs.com',
+'fra406.ib.adnxs.com',
+'fra407.ib.adnxs.com',
+'fra408.ib.adnxs.com',
+'fra409.ib.adnxs.com',
+'fra41.ib.adnxs.com',
+'fra410.ib.adnxs.com',
+'fra411.ib.adnxs.com',
+'fra412.ib.adnxs.com',
+'fra413.ib.adnxs.com',
+'fra414.ib.adnxs.com',
+'fra415.ib.adnxs.com',
+'fra416.ib.adnxs.com',
+'fra417.ib.adnxs.com',
+'fra418.ib.adnxs.com',
+'fra419.ib.adnxs.com',
+'fra42.ib.adnxs.com',
+'fra420.ib.adnxs.com',
+'fra421.ib.adnxs.com',
+'fra422.ib.adnxs.com',
+'fra423.ib.adnxs.com',
+'fra424.ib.adnxs.com',
+'fra425.ib.adnxs.com',
+'fra426.ib.adnxs.com',
+'fra427.ib.adnxs.com',
+'fra428.ib.adnxs.com',
+'fra429.ib.adnxs.com',
+'fra43.ib.adnxs.com',
+'fra430.ib.adnxs.com',
+'fra431.ib.adnxs.com',
+'fra432.ib.adnxs.com',
+'fra433.ib.adnxs.com',
+'fra434.ib.adnxs.com',
+'fra435.ib.adnxs.com',
+'fra436.ib.adnxs.com',
+'fra437.ib.adnxs.com',
+'fra438.ib.adnxs.com',
+'fra439.ib.adnxs.com',
+'fra44.ib.adnxs.com',
+'fra440.ib.adnxs.com',
+'fra441.ib.adnxs.com',
+'fra442.ib.adnxs.com',
+'fra443.ib.adnxs.com',
+'fra444.ib.adnxs.com',
+'fra445.ib.adnxs.com',
+'fra446.ib.adnxs.com',
+'fra447.ib.adnxs.com',
+'fra448.ib.adnxs.com',
+'fra449.ib.adnxs.com',
+'fra45.ib.adnxs.com',
+'fra450.ib.adnxs.com',
+'fra451.ib.adnxs.com',
+'fra452.ib.adnxs.com',
+'fra453.ib.adnxs.com',
+'fra454.ib.adnxs.com',
+'fra455.ib.adnxs.com',
+'fra456.ib.adnxs.com',
+'fra457.ib.adnxs.com',
+'fra458.ib.adnxs.com',
+'fra459.ib.adnxs.com',
+'fra46.ib.adnxs.com',
+'fra460.ib.adnxs.com',
+'fra461.ib.adnxs.com',
+'fra462.ib.adnxs.com',
+'fra463.ib.adnxs.com',
+'fra464.ib.adnxs.com',
+'fra465.ib.adnxs.com',
+'fra466.ib.adnxs.com',
+'fra467.ib.adnxs.com',
+'fra468.ib.adnxs.com',
+'fra469.ib.adnxs.com',
+'fra47.ib.adnxs.com',
+'fra470.ib.adnxs.com',
+'fra471.ib.adnxs.com',
+'fra472.ib.adnxs.com',
+'fra473.ib.adnxs.com',
+'fra474.ib.adnxs.com',
+'fra475.ib.adnxs.com',
+'fra476.ib.adnxs.com',
+'fra477.ib.adnxs.com',
+'fra478.ib.adnxs.com',
+'fra479.ib.adnxs.com',
+'fra48.ib.adnxs.com',
+'fra480.ib.adnxs.com',
+'fra481.ib.adnxs.com',
+'fra482.ib.adnxs.com',
+'fra483.ib.adnxs.com',
+'fra484.ib.adnxs.com',
+'fra485.ib.adnxs.com',
+'fra486.ib.adnxs.com',
+'fra487.ib.adnxs.com',
+'fra488.ib.adnxs.com',
+'fra489.ib.adnxs.com',
+'fra49.ib.adnxs.com',
+'fra490.ib.adnxs.com',
+'fra491.ib.adnxs.com',
+'fra492.ib.adnxs.com',
+'fra493.ib.adnxs.com',
+'fra494.ib.adnxs.com',
+'fra495.ib.adnxs.com',
+'fra496.ib.adnxs.com',
+'fra497.ib.adnxs.com',
+'fra498.ib.adnxs.com',
+'fra499.ib.adnxs.com',
+'fra5.ib.adnxs.com',
+'fra50.ib.adnxs.com',
+'fra500.ib.adnxs.com',
+'fra51.ib.adnxs.com',
+'fra52.ib.adnxs.com',
+'fra53.ib.adnxs.com',
+'fra54.ib.adnxs.com',
+'fra55.ib.adnxs.com',
+'fra56.ib.adnxs.com',
+'fra57.ib.adnxs.com',
+'fra58.ib.adnxs.com',
+'fra59.ib.adnxs.com',
+'fra6.ib.adnxs.com',
+'fra60.ib.adnxs.com',
+'fra61.ib.adnxs.com',
+'fra62.ib.adnxs.com',
+'fra63.ib.adnxs.com',
+'fra64.ib.adnxs.com',
+'fra65.ib.adnxs.com',
+'fra66.ib.adnxs.com',
+'fra67.ib.adnxs.com',
+'fra68.ib.adnxs.com',
+'fra69.ib.adnxs.com',
+'fra7.ib.adnxs.com',
+'fra70.ib.adnxs.com',
+'fra71.ib.adnxs.com',
+'fra72.ib.adnxs.com',
+'fra73.ib.adnxs.com',
+'fra74.ib.adnxs.com',
+'fra75.ib.adnxs.com',
+'fra76.ib.adnxs.com',
+'fra77.ib.adnxs.com',
+'fra78.ib.adnxs.com',
+'fra79.ib.adnxs.com',
+'fra8.ib.adnxs.com',
+'fra80.ib.adnxs.com',
+'fra81.ib.adnxs.com',
+'fra82.ib.adnxs.com',
+'fra83.ib.adnxs.com',
+'fra84.ib.adnxs.com',
+'fra85.ib.adnxs.com',
+'fra86.ib.adnxs.com',
+'fra87.ib.adnxs.com',
+'fra88.ib.adnxs.com',
+'fra89.ib.adnxs.com',
+'fra9.ib.adnxs.com',
+'fra90.ib.adnxs.com',
+'fra91.ib.adnxs.com',
+'fra92.ib.adnxs.com',
+'fra93.ib.adnxs.com',
+'fra94.ib.adnxs.com',
+'fra95.ib.adnxs.com',
+'fra96.ib.adnxs.com',
+'fra97.ib.adnxs.com',
+'fra98.ib.adnxs.com',
+'fra99.ib.adnxs.com',
+'fragmentserv.iac-online.de',
+'fraisenyvno.download',
+'france.bpath.com',
+'frantic.com',
+'frantro.de',
+'frdupsdittays.review',
+'freakingdwobhfh.download',
+'freddyman.com',
+'free-banners.com',
+'free-counter.co.uk',
+'free-counters.co.uk',
+'free-stats.com',
+'free-stats.i8.com',
+'free.atdmt.com',
+'free.livejasmin.com',
+'free.realtracker.com',
+'free.xxxcounter.com',
+'free1.usa.realtracker.com',
+'free2try.com',
+'freebanner.com',
+'freebe221.homestead.com',
+'freebieclub.com',
+'freebiesfrenzy.go2cloud.org',
+'freecelebvideo.net',
+'freecodecs.us.intellitxt.com',
+'freecountersnow.com',
+'freelogs.com',
+'freemyapps.com',
+'freepay.com',
+'freepush.com',
+'freeresultsguide.com',
+'freerotator.com',
+'freestat.pl',
+'freestats.com',
+'freevisits.com',
+'freewarefiles.us.intellitxt.com',
+'freewebcounter.com',
+'freewha.com',
+'freewrinklecream.com',
+'freexxxvideoclip.aebn.net',
+'fremescentptwvzl.download',
+'fresh.doublepimp.com',
+'fresh.techdirt.com',
+'frestacero.com',
+'freundin.ivwbox.de',
+'frg.go2cloud.org',
+'fricasseeidjcd.download',
+'friendfindercash.com',
+'friendlyduck.com',
+'fritz.asnetworks.de',
+'frivol-ads.com',
+'frizzingaqrpioyby.download',
+'frl.c.appier.net',
+'frog.wix.com',
+'frogsthemes.go2cloud.org',
+'front.facetz.net',
+'frontingfjwpsvis.download',
+'frontletsvuesv.download',
+'frontwardsxizrhchs.download',
+'frtya.com',
+'frtyb.com',
+'frtye.com',
+'fs.moatads.com',
+'fsecfsecdev2.122.2o7.net',
+'fsfsfsfsfsf.112.207.net',
+'fsimedia.go2cloud.org',
+'fsitel.com',
+'fspsm.voluumtrk.com',
+'fsvbh.voluumtrk.com',
+'fsvxdwaggeries.review',
+'fsvzj.voluumtrk.com',
+'fswvj.voluumtrk.com',
+'ft-snappy-02-debate.herokuapp.com',
+'ftebd.voluumtrk.com',
+'ftp.123banners.com',
+'ftp.admex.com',
+'ftp.control.123banners.com',
+'ftp.kissmetrics.com',
+'ftp.leadbolt.com',
+'ftp.linksynergy.com',
+'ftp.performancerevenues.com',
+'ftp.skyhookwireless.com',
+'ftp.track4.com',
+'ftp.yeahmobi.com',
+'ftp.zedo.com',
+'ftr2.external.xerox.com',
+'fu7fb.voluumtrk.com',
+'fuauq.voluumtrk.com',
+'fucktubenetwork.com',
+'fugger.ipage.com',
+'fulhudhoo.com',
+'fun-town.com',
+'fun.searchwho.com',
+'fungamesmobile.com',
+'funklicks.com',
+'funkyd.2cnt.net',
+'funniesslvqb.download',
+'funny-postcards10.home.ro',
+'funnygreetings.com',
+'funstun.com',
+'furthermobi.go2cloud.org',
+'fusdc.voluumtrk.com',
+'fuse.go2cloud.org',
+'fusion.adtoma.com',
+'fusionpmg.go2cloud.org',
+'futurebazaar.go2cloud.org',
+'futurenet.com',
+'futurepay.globway.eu',
+'futurex.go2affise.com',
+'fvglt.voluumtrk.com',
+'fw.adsafeprotected.com',
+'fw.moatads.com',
+'fw2zy.voluumtrk.com',
+'fwdservice.com',
+'fwocy.voluumtrk.com',
+'fwpgw1.surf-town.net',
+'fxj.realsecuredredirect.com',
+'fxnvsyupprovender.review',
+'fxox3.voluumtrk.com',
+'fxstyle.net',
+'fxt.go2cloud.org',
+'fyber.com',
+'fyhjs.voluumtrk.com',
+'fyvzz.survey7.adsservingtwig.xyz',
+'fywwy.voluumtrk.com',
+'fz6wh.voluumtrk.com',
+'fzab1.voluumtrk.com',
+'fzgmq.voluumtrk.com',
+'g-i2.com',
+'g-pixel.invitemedia.com',
+'g.3gl.net',
+'g.adnxs.com',
+'g.adspeed.net',
+'g.atdmt.com',
+'g.brothersoft.com',
+'g.c.appier.net',
+'g.delivery.net',
+'g.msn.com',
+'g.seoparts.net',
+'g.websponsors.com',
+'g.zedo.com',
+'g.zeroredirect.com',
+'g.zeroredirect1.com',
+'g.zeroredirect2.com',
+'g0ffs.voluumtrk.com',
+'g11em.voluumtrk.com',
+'g1vzn.voluumtrk.com',
+'g2.gumgum.com',
+'g3.us.intellitxt.com',
+'g39yz.voluumtrk.com',
+'g5.us.intellitxt.com',
+'g9xzz.voluumtrk.com',
+'ga.canoe.ca',
+'ga.webdigi.co.uk',
+'gabia.com',
+'gadcreatives.glam.com',
+'gads.ru',
+'gae.caspion.com',
+'gag.admulti.com',
+'gail.hit.gemius.pl',
+'galeriaseroticas.xpg.com.br',
+'galleries1.justcreampie.com',
+'gallery.apptornado.com',
+'galleryoftheabsurd.us.intellitxt.com',
+'gallsrpvzalfr.download',
+'gallup.2cnt.net',
+'galttech.com',
+'gambleup.com',
+'gamblingbanner.com',
+'game-advertising-online.com',
+'game4mobile.hayday.mobi',
+'gameads-admin.applifier.com',
+'gameads.digyourowngrave.com',
+'gamefuse.go2cloud.org',
+'gamehouse.com',
+'gameleads.ru',
+'gamescpc.com',
+'gamingblast.com',
+'gamingclub.com',
+'gamingrealms.go2cloud.org',
+'gamrfeed.vgchartz.com.9.302br.net',
+'gan.doubleclick.net',
+'gan.wavecdn.net',
+'gannett.gcion.com',
+'ganoinihrjk.download',
+'gao.go2cloud.org',
+'garbo.2cnt.net',
+'garlanca.com',
+'garnishersqcltox.download',
+'garrigueatcuw.download',
+'garristo.com',
+'gata.ero-advertising.com',
+'gateway-banner.eravage.com',
+'gateway.adgatemedia.com',
+'gateway.blamads.com',
+'gateway.fortunelounge.com',
+'gateways.s3.amazonaws.com',
+'gatewaytracker.com',
+'gather.hankyung.com',
+'gator.com',
+'gaxsumshicksa.review',
+'gay.xxxcounter.com',
+'gayadnetwork.com',
+'gazzz.survey7.adsservingtwig.xyz',
+'gb0qw.voluumtrk.com',
+'gbotvisit.com',
+'gbpeq.voluumtrk.com',
+'gbtqw.voluumtrk.com',
+'gc128.infusionsoft.com',
+'gcamb.voluumtrk.com',
+'gcounter.hosting4u.net',
+'gcsbr.voluumtrk.com',
+'gcumuobqjbullfight.review',
+'gd.geobytes.com',
+'gdc.indeed.com',
+'ge1.ca',
+'gear.ign.us.intellitxt.com',
+'geegawmpuvidd.download',
+'geekstogo.us.intellitxt.com',
+'gelidlycupaq.download',
+'gelzg.voluumtrk.com',
+'gemgx.voluumtrk.com',
+'geneme.go2cloud.org',
+'generator.zdnet.com',
+'genhit.com',
+'genorithm.com',
+'gentleygupqmdpm.download',
+'geo.api.qualaroo.com',
+'geo.cliphunter.com',
+'geo.crtracklink.com',
+'geo.deepmetrix.com',
+'geo.hyperlinksecure.com',
+'geo.metronews.ca',
+'geo.mtvnn.com',
+'geo.offermatica.com',
+'geo.q5media.net',
+'geo.query.yahoo.com',
+'geo.safelinktracker.com',
+'geo.startappservice.com',
+'geo.yahoo.com',
+'geo.ziffdavis.com',
+'geo2.adobe.com',
+'geobanner.adultfriendfinder.com',
+'geobanner.alt.com',
+'geobanner.blacksexmatch.com',
+'geobanner.fuckbookhookups.com',
+'geobanner.germanfriendfinder.com',
+'geobanner.getiton.com',
+'geobanner.sexfinder.com',
+'geobanner.socialflirt.com',
+'geobar.ziffdavisinternational.com',
+'geobytes.com',
+'geocities.bfast.com',
+'geoip.al.com',
+'geoip.infra-team.com',
+'geoip.syracuse.com',
+'geoip.taskforce.is',
+'geoip.viamichelin.com',
+'geoloc.appscion.com',
+'geoloc1.geovisite.com',
+'geoloc10.geovisite.com',
+'geoloc100.geovisite.com',
+'geoloc11.geovisite.com',
+'geoloc12.geovisite.com',
+'geoloc13.geovisite.com',
+'geoloc14.geovisite.com',
+'geoloc15.geovisite.com',
+'geoloc16.geovisite.com',
+'geoloc17.geovisite.com',
+'geoloc18.geovisite.com',
+'geoloc19.geovisite.com',
+'geoloc2.geovisite.com',
+'geoloc20.geovisite.com',
+'geoloc21.geovisite.com',
+'geoloc22.geovisite.com',
+'geoloc23.geovisite.com',
+'geoloc24.geovisite.com',
+'geoloc25.geovisite.com',
+'geoloc26.geovisite.com',
+'geoloc27.geovisite.com',
+'geoloc28.geovisite.com',
+'geoloc29.geovisite.com',
+'geoloc3.geovisite.com',
+'geoloc30.geovisite.com',
+'geoloc31.geovisite.com',
+'geoloc32.geovisite.com',
+'geoloc33.geovisite.com',
+'geoloc34.geovisite.com',
+'geoloc35.geovisite.com',
+'geoloc36.geovisite.com',
+'geoloc37.geovisite.com',
+'geoloc38.geovisite.com',
+'geoloc39.geovisite.com',
+'geoloc4.geovisite.com',
+'geoloc40.geovisite.com',
+'geoloc41.geovisite.com',
+'geoloc42.geovisite.com',
+'geoloc43.geovisite.com',
+'geoloc44.geovisite.com',
+'geoloc45.geovisite.com',
+'geoloc46.geovisite.com',
+'geoloc47.geovisite.com',
+'geoloc48.geovisite.com',
+'geoloc49.geovisite.com',
+'geoloc5.geovisite.com',
+'geoloc50.geovisite.com',
+'geoloc51.geovisite.com',
+'geoloc52.geovisite.com',
+'geoloc53.geovisite.com',
+'geoloc54.geovisite.com',
+'geoloc55.geovisite.com',
+'geoloc56.geovisite.com',
+'geoloc57.geovisite.com',
+'geoloc58.geovisite.com',
+'geoloc59.geovisite.com',
+'geoloc6.geovisite.com',
+'geoloc60.geovisite.com',
+'geoloc61.geovisite.com',
+'geoloc62.geovisite.com',
+'geoloc63.geovisite.com',
+'geoloc64.geovisite.com',
+'geoloc65.geovisite.com',
+'geoloc66.geovisite.com',
+'geoloc67.geovisite.com',
+'geoloc68.geovisite.com',
+'geoloc69.geovisite.com',
+'geoloc7.geovisite.com',
+'geoloc70.geovisite.com',
+'geoloc71.geovisite.com',
+'geoloc72.geovisite.com',
+'geoloc73.geovisite.com',
+'geoloc74.geovisite.com',
+'geoloc75.geovisite.com',
+'geoloc76.geovisite.com',
+'geoloc77.geovisite.com',
+'geoloc78.geovisite.com',
+'geoloc79.geovisite.com',
+'geoloc8.geovisite.com',
+'geoloc80.geovisite.com',
+'geoloc81.geovisite.com',
+'geoloc82.geovisite.com',
+'geoloc83.geovisite.com',
+'geoloc84.geovisite.com',
+'geoloc85.geovisite.com',
+'geoloc86.geovisite.com',
+'geoloc87.geovisite.com',
+'geoloc88.geovisite.com',
+'geoloc89.geovisite.com',
+'geoloc9.geovisite.com',
+'geoloc90.geovisite.com',
+'geoloc91.geovisite.com',
+'geoloc92.geovisite.com',
+'geoloc93.geovisite.com',
+'geoloc94.geovisite.com',
+'geoloc95.geovisite.com',
+'geoloc96.geovisite.com',
+'geoloc97.geovisite.com',
+'geoloc98.geovisite.com',
+'geoloc99.geovisite.com',
+'geoplugin.net',
+'georgewbush.112.2o7.net',
+'georgewbushcom.112.2o7.net',
+'geoservice.curse.com',
+'geoshopping.nzherald.co.nz',
+'geoup.com',
+'geovisites.com',
+'get-answers-fast.com',
+'get-information.com',
+'get.hitbox.com',
+'get.mirando.de',
+'get.netscape.com',
+'get.qualaroo.com',
+'get.replacingobservedlose.info',
+'get.rubyroyal.com',
+'get.slotocash.com',
+'get.superstats.com',
+'get2buynow.com',
+'getabadmate.com',
+'getbarometer.s3.amazonaws.com',
+'getdirect.ru',
+'getexceptional.com',
+'getfreebl.com',
+'getglasses-com-au.b.appier.net',
+'getlinksinaseconds.com',
+'getmetrical.com',
+'getmycell.com',
+'getoffersdirect.go2cloud.org',
+'getpaidtosurfthenetmoney.homestead.com',
+'gets.faz.net',
+'gets.lockscalecompare.com',
+'getsidecar.s3.amazonaws.com',
+'geverons.justclick.ru',
+'gevfh.voluumtrk2.com',
+'gfaf-banners.s3.amazonaws.com',
+'gfk-de.sensic.net',
+'gfrsz.voluumtrk.com',
+'gft2.de',
+'gfx.infomine.com',
+'gfx3.avn.com',
+'gfxa.sheetmusicplus.com',
+'gg.google.com',
+'gg.mob.vendimob.pl',
+'ggean.voluumtrk.com',
+'ggi.go2cloud.org',
+'ggo.directrev.com',
+'gh.ffshrine.org',
+'ghost.in.the.shell.at.bnex.com',
+'gi.sfr.fr',
+'giantsavings-a.akamaihd.net',
+'giddyupmedia.go2cloud.org',
+'gifthulk.go2cloud.org',
+'giftjap.justclick.ru',
+'gifttracker.com',
+'gifttree.track4.com',
+'gigletcirjy.download',
+'gili-lankanfushi-com.b.appier.net',
+'gimmickedofpkjfxln.download',
+'gipigbzfortes.review',
+'girafa.com',
+'girdinguyqfqwehf.download',
+'girlscoutsoftheusa.sc.omtrdc.net',
+'girlsofvs.com',
+'girthingbeypvmxb.download',
+'giveaboost.go2cloud.org',
+'givemefreestuff.com',
+'gj.mmstat.com',
+'gj7py.voluumtrk.com',
+'gjana.voluumtrk.com',
+'gjerrigknark.no.intellitxt.com',
+'gjr7r.voluumtrk.com',
+'gk.rts.doublepimp.com',
+'gk.streamate.doublepimp.com',
+'gkugzxfmjargonised.review',
+'glassesonline-com-ph.b.appier.net',
+'glassesonline-com-sg.b.appier.net',
+'glassesonline-com-tw.b.appier.net',
+'glauconitexwgsr.download',
+'glbad.adtech.de',
+'glean.pop6.com',
+'glffogrmnpareses.review',
+'glieo.voluumtrk.com',
+'glitternetwork.go2cloud.org',
+'global-adsrv.com',
+'global.adserver.yahoo.com',
+'global.ib-ibi.com',
+'global.justclick.ru',
+'global.msads.net',
+'global.reporo.net',
+'global.ymtrack.com',
+'global.ymtracking.com',
+'globaltargets.go2cloud.org',
+'globaltrack.com',
+'globaltrack123.go2cloud.org',
+'globe7.com',
+'globel.co.uk',
+'globirank.com',
+'globo.demdex.net',
+'glomsflablwiv.download',
+'glopro.com',
+'glugjbygh.download',
+'gluma.voluumtrk.com',
+'gm.mmstat.com',
+'gm7ru.voluumtrk.com',
+'gmads.mookie1.com',
+'gmads.net',
+'gmkxougopsonin.review',
+'gmonitor.aliimg.com',
+'gmoxn.voluumtrk.com',
+'gmtdmp.mookie1.com',
+'gmtracker.com',
+'gmx-ssl.wemfbox.ch',
+'gmx.oewabox.at',
+'gnaea.voluumtrk.com',
+'gnaur.voluumtrk.com',
+'gnftr.voluumtrk.com',
+'gniho.voluumtrk.com',
+'go-rilla.go2affise.com',
+'go.activengage.com',
+'go.ad2up.com',
+'go.ad2upapp.com',
+'go.adify.com',
+'go.adversal.com',
+'go.affec.tv',
+'go.by',
+'go.clickhoptk.com',
+'go.clicktrackopt.com',
+'go.coxds.com',
+'go.deliverymodo.com',
+'go.doupat.xyz',
+'go.feedxfeed.com',
+'go.goroost.com',
+'go.hd-3.com',
+'go.herdailyvideos.com',
+'go.hunkwebcam.com',
+'go.jetswap.hs5.ru',
+'go.kissmetrics.com',
+'go.ll.net.co',
+'go.madmimi.com',
+'go.mobilix.eu',
+'go.mobilix.mobi',
+'go.mobisla.com',
+'go.mobpartner.mobi',
+'go.mobtrks.com',
+'go.mobytrks.com',
+'go.myimgt.com',
+'go.oclaserver.com',
+'go.oclasrv.com',
+'go.onclasrv.com',
+'go.openx.com',
+'go.padsdelivery.com',
+'go.padstm.com',
+'go.pardot.com',
+'go.playmmogames.com',
+'go.promojet.ru',
+'go.pub2srv.com',
+'go.qb.by',
+'go.quantcast.com',
+'go.redirectingat.com',
+'go.securelinktrack.com',
+'go.shareaholic.com',
+'go.sonobi.com',
+'go.tendatta.com',
+'go.theadsnet.com',
+'go.toutapp.com',
+'go.trackgold.net',
+'go.trafficshop.com',
+'go.underclick.ru',
+'go.voice2page.com',
+'go.vrvm.com',
+'go.wastedpushdevelop.info',
+'go.wbsadsdel.com',
+'go.wellhello.com',
+'go.wsockd.com',
+'go.youlamedia.com',
+'go2.trekaklik.com',
+'go2affise.com',
+'go2cloud.org',
+'go2funz.com',
+'go2linkfast.com',
+'go2web20.net',
+'go3.trekaklik.com',
+'go34down.com',
+'goadv.com',
+'gobbetsdjgjnyc.download',
+'goblemam.com',
+'gocm.c.appier.net',
+'godrejproperties-com.b.appier.net',
+'goetheinstitut01.webtrekk.net',
+'gofugyourself.us.intellitxt.com',
+'gogousenet.com',
+'goingplatinum.com',
+'goku.brightcove.com',
+'gold-file.com',
+'goldenticket.disconnect.me',
+'goldmansachs.122.2o7.net',
+'golds.lp.mydas.mobi',
+'goldspotmedia.com',
+'goldstar.go2cloud.org',
+'golem.met.vgwort.de',
+'golf18.go2cloud.org',
+'golfcountryhomes.com',
+'golizoli.com',
+'gomobbi.go2cloud.org',
+'gomovies.track.clicksure.com',
+'gooal.herokuapp.com',
+'goodbookbook.com',
+'gooddata.com',
+'goodiemob.com',
+'goodsavingtips.com',
+'goodtraffic.net',
+'google-analytics.com',
+'googleads.g.doubleclick.net',
+'googleads2.g.doubleclick.net',
+'googleads4.g.doubleclick.net',
+'googleadservices.com',
+'googlesyndication.com',
+'googletagmanager.com',
+'gooool.com',
+'gopacket.goforandroid.com',
+'gopuralverslakf.download',
+'goreal.at',
+'goredi.com',
+'gorilla.go2cloud.org',
+'goshoppingonline.bfast.com',
+'gosms.3g.cn',
+'gosmsdev.3g.cn',
+'gosmstheme.3g.cn',
+'gospycash.com',
+'gostats.com',
+'gostats.de',
+'gostats.pl',
+'gostats.ru',
+'gostats.vn',
+'gotlaughs.com',
+'goto.myfunbreak.com',
+'gotoast.com',
+'gotoo.com',
+'goviralnetwork.com',
+'goviralnetwork.net',
+'goweb.de',
+'goyellow.ivwbox.de',
+'goywt.voluumtrk.com',
+'gozilla.com',
+'gp.dejanews.com',
+'gpaper104.112.2o7.net',
+'gpaper105.112.2o7.net',
+'gpaper106.112.2o7.net',
+'gpaper107.112.2o7.net',
+'gpaper108.112.2o7.net',
+'gpaper109.112.2o7.net',
+'gpaper110.112.2o7.net',
+'gpaper111.112.2o7.net',
+'gpaper112.112.2o7.net',
+'gpaper113.112.2o7.net',
+'gpaper114.112.2o7.net',
+'gpaper115.112.2o7.net',
+'gpaper116.112.2o7.net',
+'gpaper117.112.2o7.net',
+'gpaper118.112.2o7.net',
+'gpaper119.112.2o7.net',
+'gpaper120.112.2o7.net',
+'gpaper121.112.2o7.net',
+'gpaper122.112.2o7.net',
+'gpaper123.112.2o7.net',
+'gpaper124.112.2o7.net',
+'gpaper125.112.2o7.net',
+'gpaper126.112.2o7.net',
+'gpaper127.112.2o7.net',
+'gpaper128.112.2o7.net',
+'gpaper129.112.2o7.net',
+'gpaper131.112.2o7.net',
+'gpaper132.112.2o7.net',
+'gpaper133.112.2o7.net',
+'gpaper134.112.2o7.net',
+'gpaper135.112.2o7.net',
+'gpaper136.112.2o7.net',
+'gpaper137.112.2o7.net',
+'gpaper138.112.2o7.net',
+'gpaper139.112.2o7.net',
+'gpaper140.112.2o7.net',
+'gpaper141.112.2o7.net',
+'gpaper142.112.2o7.net',
+'gpaper143.112.2o7.net',
+'gpaper144.112.2o7.net',
+'gpaper145.112.2o7.net',
+'gpaper147.112.2o7.net',
+'gpaper149.112.2o7.net',
+'gpaper150.112.2o7.net',
+'gpaper151.112.2o7.net',
+'gpaper152.112.2o7.net',
+'gpaper154.112.2o7.net',
+'gpaper155.112.2o7.net',
+'gpaper156.112.2o7.net',
+'gpaper157.112.2o7.net',
+'gpaper158.112.2o7.net',
+'gpaper160.112.2o7.net',
+'gpaper161.112.2o7.net',
+'gpaper162.112.2o7.net',
+'gpaper163.112.2o7.net',
+'gpaper164.112.2o7.net',
+'gpaper166.112.2o7.net',
+'gpaper167.112.2o7.net',
+'gpaper168.112.2o7.net',
+'gpaper169.112.2o7.net',
+'gpaper170.112.2o7.net',
+'gpaper171.112.2o7.net',
+'gpaper172.112.2o7.net',
+'gpaper173.112.2o7.net',
+'gpaper174.112.2o7.net',
+'gpaper175.112.2o7.net',
+'gpaper176.112.2o7.net',
+'gpaper177.112.2o7.net',
+'gpaper178.112.2o7.net',
+'gpaper180.112.2o7.net',
+'gpaper182.112.2o7.net',
+'gpaper183.112.2o7.net',
+'gpaper184.112.2o7.net',
+'gpaper185.112.2o7.net',
+'gpaper186.112.2o7.net',
+'gpaper187.112.2o7.net',
+'gpaper188.112.2o7.net',
+'gpaper190.112.2o7.net',
+'gpaper191.112.2o7.net',
+'gpaper192.112.2o7.net',
+'gpaper193.112.2o7.net',
+'gpaper194.112.2o7.net',
+'gpaper195.112.2o7.net',
+'gpaper196.112.2o7.net',
+'gpaper197.112.2o7.net',
+'gpaper198.112.2o7.net',
+'gpaper199.112.2o7.net',
+'gpaper201.112.2o7.net',
+'gpaper202.112.2o7.net',
+'gpaper204.112.2o7.net',
+'gpaper205.112.2o7.net',
+'gpaper211.112.2o7.net',
+'gpaper214.112.2o7.net',
+'gpaper218.112.2o7.net',
+'gpaper223.112.2o7.net',
+'gpaper231.112.2o7.net',
+'gpaper246.112.2o7.net',
+'gpapercareer.112.2o7.net',
+'gpkjxgsginfallible.review',
+'gqe0d.voluumtrk.com',
+'gqfysspiracles.review',
+'gqgng.voluumtrk.com',
+'gqkzu.voluumtrk.com',
+'gqqv4.voluumtrk.com',
+'gqsrirsleazes.review',
+'gr1innovations.com',
+'gr2hk6ze.com',
+'gr8.com',
+'gr8nk.voluumtrk.com',
+'grabanapptrk.com',
+'grabify.link',
+'graffix.adition.com',
+'grafix.xxxcounter.com',
+'gramashgbbjqbzy.download',
+'grammarly.go2cloud.org',
+'granite.bnex.com',
+'graphics.cams.com',
+'graphics.friendfinder.com',
+'graphics1.sextracker.com',
+'graphics2.sextracker.com',
+'graphics3.sextracker.com',
+'graphics7.nytimes.com',
+'graphics8.nytimes.m7z.net',
+'graptolitezcmxrfe.download',
+'gravitateszwcxvb.download',
+'greatcpm.com',
+'green.erne.co',
+'green.virtual-nights.com',
+'greenlightmedia.go2cloud.org',
+'greensmoke.com',
+'greenthinkday.com',
+'greentooth.xtgem.com',
+'greentubeiesgmbh.tt.omtrdc.net',
+'gregoryenterprises.go2cloud.org',
+'gregoryvjvbd.download',
+'greystripe.com',
+'gridironjhkdbypz.download',
+'grieftalk.com',
+'gripfile.net',
+'grippedownloads.co',
+'grosskjlkwccna.download',
+'grouchiestopszo.download',
+'groupe.go2cloud.org',
+'groupritm.go2affise.com',
+'grousingkvjtblhj.download',
+'grow.kissmetrics.com',
+'grsyd.voluumtrk.com',
+'grupoblidoo.go2cloud.org',
+'gruppoespresso01.webtrekk.net',
+'gs.spylog.ru',
+'gs.statcounter.com',
+'gs1.surf-town.net',
+'gsanet.com',
+'gscounters.eu1.gigya.com',
+'gscounters.us1.gigya.com',
+'gserv.zdnet.co.uk',
+'gsfn.us',
+'gsfr1.voluumtrk.com',
+'gsicrsk.112.207.net',
+'gslbeacon.lijit.com',
+'gsmtop.net',
+'gsujb.voluumtrk.com',
+'gtag.yieldoptimizer.com',
+'gtcc1.acecounter.com',
+'gtedtnebrises.review',
+'gtiuy.voluumtrk.com',
+'gtrforums.us.intellitxt.com',
+'gts-ads.twistbox.com',
+'gttracking.go2cloud.org',
+'gu-pix.appspot.com',
+'gugaswrjegxix.download',
+'gui.secure.mobile.contentabc.com',
+'guid.org',
+'guidagedhgperv.download',
+'gum.criteo.com',
+'gumlz.voluumtrk.com',
+'gunnedagcsg.download',
+'guppymedia.com',
+'gurgle.zdbb.net',
+'guru3d.us.intellitxt.com',
+'gutefrage.de.intellitxt.com',
+'guyism.us.intellitxt.com',
+'gv90x.voluumtrk.com',
+'gvp3l.voluumtrk.com',
+'gw.adotsolution.com',
+'gw1.surf-town.net',
+'gw2.surf-town.net',
+'gw3.surf-town.net',
+'gw4.surf-town.net',
+'gwa.lphbs.com',
+'gwa.reedbusiness.net',
+'gzadt.voluumtrk.com',
+'gzwku.voluumtrk.com',
+'h.atdmt.com',
+'h.cliphunter.com',
+'h.imedia.cz',
+'h.live.com',
+'h.online-metrix.net',
+'h.openx.net',
+'h.scorecardresearch.com',
+'h.zedo.com',
+'h.zeroredirect.com',
+'h.zeroredirect1.com',
+'h.zeroredirect2.com',
+'h1.flashvortex.com',
+'h2.msn.com',
+'h6.msn.com',
+'h8lku.voluumtrk.com',
+'h9diz.voluumtrk.com',
+'hab3n.trackvoluum.com',
+'habilatoryphyjf.download',
+'hadecpjvwytpy.download',
+'haklopar.com',
+'hal9000.redintelligence.net',
+'halc.iadvize.com',
+'hamburg.pennerzone.de',
+'hamster.com',
+'hanaprop.com',
+'handb.go2cloud.org',
+'handbl.ivwbox.de',
+'handworkedwguqhhqpj.download',
+'handyseek.com',
+'hangmyads.go2cloud.org',
+'harassedlyayeigwq.download',
+'hardcore.xxxcounter.com',
+'hardsextube-bud.gravityrd-services.com',
+'hardwarezone.us.intellitxt.com',
+'hariqavi.com',
+'harrenmedia.go2affise.com',
+'harrenmedianetwork.com',
+'harvardbp.vo.llnwd.net',
+'harvestadsdepot.com',
+'harvester.eu.square-enix.com',
+'harvester.ext.square-enix-europe.com',
+'harvester.hbpl.co.uk',
+'harvester.piano-media.com',
+'has.go2cloud.org',
+'has.it',
+'hasoffers.com',
+'hasoffers.ymtrack.com',
+'hastrk1.com',
+'hastrk2.com',
+'hastrk3.com',
+'hata.ero-advertising.com',
+'hatbo.voluumtrk.com',
+'hatchmentstnddqlfba.download',
+'hatelive.site',
+'hatertoupfrcz.download',
+'hatmedia.go2cloud.org',
+'hauptstadtmuttide.digidip.net',
+'hausgarten.de.intellitxt.com',
+'hawkbitsirbzmvsf.download',
+'hayday1.visits.lt',
+'hayday145.visits.lt',
+'hb.justclick.ru',
+'hbb.concentra.be',
+'hbho0.voluumtrk.com',
+'hc1.humanclick.com',
+'hc2.humanclick.com',
+'hcharbach.de',
+'hchrmain.112.2o7.net',
+'hclrm.voluumtrk.com',
+'hcu1u.voluumtrk.com',
+'hd.jmp9.com',
+'hdc3z.voluumtrk.com',
+'hdlife-com-tw.b.appier.net',
+'hdmoviesinc.com',
+'heals.msgfocus.com',
+'heartbeat.pmc.com',
+'hebadu.com',
+'hebdotop.com',
+'heine.adclear.net',
+'heiringlxsna.download',
+'heise.met.vgwort.de',
+'heise02.webtrekk.net',
+'heisebanner.geizhals.at',
+'hekng.voluumtrk.com',
+'held.jmp9.com',
+'hello.myfonts.net',
+'hello.staticstuff.net',
+'helloyoungmanqq.com',
+'helmsstikizg.download',
+'help.adtech.fr',
+'help.chartboost.com',
+'help.doubleclick.net',
+'help.qualaroo.com',
+'henbaneypgvxgt.download',
+'herbisttjojeo.download',
+'hernando.com',
+'hexacash.com',
+'heywire.com',
+'heyzap.com',
+'hfp.gdmdigital.com',
+'hfph5.voluumtrk.com',
+'hfrov.voluumtrk.com',
+'hfx.go2cloud.org',
+'hg-ios.hitbox.com',
+'hg.travelocity.com.edgesuite.net',
+'hg1.hitbox.com',
+'hg7nu.voluumtrk.com',
+'hgads.com',
+'hgcjh.voluumtrk.com',
+'hhbekxxw5d9e.pflexads.com',
+'hhioj.voluumtrk.com',
+'hi.hellobar.com',
+'hicpm5.com',
+'hide.io',
+'hideaway.com',
+'hield.jmp9.com',
+'hig.com',
+'highcpms.com',
+'highdefforum.us.intellitxt.com',
+'higheurest.com',
+'highflyer.go2affise.com',
+'hightrafficads.com',
+'hijackedzdupdb.download',
+'hilltopads.net',
+'hindsight.com',
+'hipcrime.home.dhs.org',
+'hipersushiads.com',
+'hippo.adultadworld.com',
+'hirovivi.com',
+'histats.com',
+'histriodqxmtbztd.download',
+'hit-counter.info',
+'hit-counter.udub.com',
+'hit-parade.com',
+'hit.bg',
+'hit.copesa.cl',
+'hit.gemius.pl',
+'hit.hotlog.ru',
+'hit.meta.ua',
+'hit.multimania.com',
+'hit.multimania.lycos.fr',
+'hit.stat24.com',
+'hit.sunnydollars.net',
+'hit.tripod.lycos.co.uk',
+'hit.tripod.lycos.de',
+'hit.tripod.lycos.es',
+'hit.tripod.lycos.it',
+'hit.tripod.lycos.nl',
+'hit1.hotlog.ru',
+'hit10.hotlog.ru',
+'hit13.hotlog.ru',
+'hit15.hotlog.ru',
+'hit2.hotlog.ru',
+'hit20.hotlog.ru',
+'hit3.hotlog.ru',
+'hit30.hotlog.ru',
+'hit4.hotlog.ru',
+'hit5.hotlog.ru',
+'hit6.hotlog.ru',
+'hit7.hotlog.ru',
+'hit8.hotlog.ru',
+'hit9.hotlog.ru',
+'hitbox.com',
+'hitcents.com',
+'hitcounter.govmetric.com',
+'hitcounter.ru',
+'hitcounter.servmetric.com',
+'hitcounter01.xspp.com',
+'hitcpm.com',
+'hitfarm.com',
+'hitfox.go2cloud.org',
+'hitlink.com',
+'hitlist.ru',
+'hitlogger.com',
+'hitlounge.com',
+'hitmeter.com',
+'hitmeter.ru',
+'hits.dealer.com',
+'hits.icdirect.com',
+'hits.nextstat.com',
+'hits.roitracker.com',
+'hits.spylog.com',
+'hits.sys.lv',
+'hits.webstat.com',
+'hits.zdnet.co.kr',
+'hitserver.ibope.com.br',
+'hitslink.com',
+'hitsniffer.com',
+'hitsquad.us.intellitxt.com',
+'hitweb.org',
+'hitweb2.chosun.com',
+'hitwebcounter.com',
+'hitx.net',
+'hiwire.com',
+'hjapa.voluumtrk.com',
+'hjchung.myweb.hinet.net',
+'hjhaw.voluumtrk.com',
+'hjlas.com',
+'hjtjz.voluumtrk.com',
+'hk.adserver.yahoo.com',
+'hk9dl.voluumtrk.com',
+'hkjhwrhogwash.review',
+'hld.jmp9.com',
+'hlgsolutions.go2cloud.org',
+'hlok.qertewrt.com',
+'hlrke.voluumtrk.com',
+'hlt6o.voluumtrk.com',
+'hm.baidu.com',
+'hmhrw.voluumtrk.com',
+'hmrhz.voluumtrk.com',
+'hmultiplex.2cnt.net',
+'hmz8h.voluumtrk.com',
+'hnbutton.appspot.com',
+'hni14.voluumtrk.com',
+'ho-openx.ha.rs',
+'holidaypirates.digidip.net',
+'hollywoodlife-us.intellitxt.com',
+'hollywoodlife.us.intellitxt.com',
+'holystonesobrzuasu.download',
+'homad-global-configs-eu-fra.schneevonmorgen.com.s3.amazonaws.com',
+'homad-global-configs.schneevonmorgen.com',
+'home-remodeling.com',
+'home.compete.com.edgesuite.net',
+'home.edt02.net',
+'home.free-banners.com',
+'home.mmcable.com',
+'home.netster.com',
+'home.pages.at',
+'home.peoplepc.com',
+'home.vividvip.com',
+'homedepot.tt.omtrdc.net',
+'homedepoy.com',
+'homedepto.com',
+'homeearthlink.net',
+'homeemployed.com',
+'homeeq.com',
+'homegrownvideo.com',
+'homelearningcenter.com',
+'homeloan.tr.cx',
+'homepage.cc',
+'homepage.ru',
+'homesclick.112.2o7.net',
+'homesidelendinginc.com',
+'homestad.com',
+'homesteadtechnologies.122.2o7.net',
+'homevisions.com',
+'homonymyhnovvlnkz.download',
+'hondahookup.us.intellitxt.com',
+'hongkongdisneyland-com.b.appier.net',
+'honourwkuowjaj.download',
+'hoofprintsjvogd.download',
+'hook.yieldbuild.com',
+'hoopsvibe.us.intellitxt.com',
+'hooqy.com',
+'hoptopboy.com',
+'hopurl.org',
+'hordesvavxlom.download',
+'horedi.com',
+'horheloopo.com',
+'horizon.attn.com',
+'horizon.playboy.com',
+'horizon.sailthru.com',
+'horse-racing-affiliate-program.co.uk',
+'host-tracker.com',
+'host.clicksor.com',
+'host.leadbolt.com',
+'host6.hitbox.com',
+'hostboard.us.intellitxt.com',
+'hostedmovieupdates.aebn.net',
+'hosting.sproutbuilder.com',
+'hosting2.rts.lj.doublepimp.com',
+'hosting4.rts.fling.doublepimp.com',
+'hotdatinglist.com',
+'hotex.voluumtrk.com',
+'hotheadedwrkqqsm.download',
+'hotjar.com',
+'hotlinking.dosmil.imap.cc',
+'hotlog.ru',
+'hotonlinenews.us.intellitxt.com',
+'hotrank.com.tw',
+'hottour.justclick.ru',
+'hotwords.com.br',
+'hotwords.com.mx',
+'house27.ch',
+'housead.umeng.com',
+'howaboutwe.go2cloud.org',
+'howardchui.us.intellitxt.com',
+'hoz01.voluumtrk.com',
+'hpglobal.112.2o7.net',
+'hphqglobal.112.2o7.net',
+'hpqvvpfloatage.review',
+'hpr.outbrain.com',
+'hpwtrpizecrowned.review',
+'hpygd.voluumtrk.com',
+'hq.kissmetrics.com',
+'hqfootyad4.blogspot.com',
+'hqs7.cnzz.com',
+'hrdya.voluumtrk.com',
+'hrfdpodunwarlike.review',
+'hrukxtcqmosaics.review',
+'hs-sites.com',
+'hs.interpolls.com',
+'hs4rs.voluumtrk.com',
+'hsaki.voluumtrk.com',
+'hsbc.tt.omtrdc.net',
+'hsbolewhzbaffs.review',
+'hsn01.wcom-ma.us.conversion-marketing.com',
+'hstde.tradedoubler.com',
+'hstest.surf-town.net',
+'hstpnetwork.com',
+'hsxfa.voluumtrk.com',
+'hsxmo.voluumtrk.com',
+'hsykmnzsdogskins.review',
+'ht.keezmovies.com',
+'ht.pornhub.com',
+'ht.redtube.com',
+'ht.spankwire.com',
+'ht.tidaltv.com.10089.9022.302br.net',
+'ht.tube8.com',
+'ht.xtube.com',
+'ht.youporn.com',
+'htimepyvhbondstone.review',
+'htinua.justclick.ru',
+'html-images.realnetworks.com',
+'html.overture.com',
+'html5adkit.plusmo.s3.amazonaws.com',
+'html5zombo.com',
+'htmlcenter.us.intellitxt.com',
+'htmlcounter.com',
+'htmonster.com',
+'htt.jmp9.com',
+'http.tidaltv.com.10088.9022.302br.net',
+'http.tidaltv.com.10089.9022.302br.net',
+'http.tidaltv.com.10090.9022.302br.net',
+'http.tidaltv.com.1746.9009.302br.net',
+'http.tidaltv.com.42107.9319.302br.net',
+'http.tidaltv.com.42108.9319.302br.net',
+'http.tidaltv.com.42109.9319.302br.net',
+'hu0pd.voluumtrk.com',
+'hubspot.my.salesforce.com',
+'hubtraffic.com',
+'hubxt.redtube.com',
+'hubxt.tube8.com',
+'hulu.112.2o7.net',
+'humandemand.com',
+'humaniq.com',
+'humdrumsqflyl.download',
+'hummumsutjuwal.download',
+'humourqyizg.download',
+'humuseliyahu.com',
+'hunt-leads.com',
+'huntmad.com',
+'hurricanedigitalmedia.com',
+'hv3.webstat.com',
+'hv3jo.voluumtrk.com',
+'hvaevqkprtumorous.review',
+'hvqtw.voluumtrk.com',
+'hvxca.voluumtrk.com',
+'hw1vb.voluumtrk.com',
+'hwcdn.reporo.net',
+'hwuhk.voluumtrk.com',
+'hwupgrade.it.intellitxt.com',
+'hxhsu.voluumtrk.com',
+'hxmtq.voluumtrk.com',
+'hxnfk.voluumtrk.com',
+'hxpwl.voluumtrk.com',
+'hybl9bazbc35.pflexads.com',
+'hybridview.co.kr',
+'hybtq.voluumtrk.com',
+'hyield.jmp9.com',
+'hym.albinass.com',
+'hymdo.voluumtrk.com',
+'hyperbanner.net',
+'hyperion.adtech.fr',
+'hyperlinksecure.com',
+'hypermall.com',
+'hypertracker.com',
+'hypoot.com',
+'hyv6u.voluumtrk.com',
+'hywae.voluumtrk.com',
+'hz7.de',
+'hzvtbypisdeejays.review',
+'i-cdn.servedbyopenx.com',
+'i-fit-com-tw.b.appier.net',
+'i-lookup.com',
+'i-mobile.co.jp',
+'i-vengo.com',
+'i.1cat.com',
+'i.4see.mobi',
+'i.adsame.com',
+'i.appflood.com',
+'i.bigbn.com.ua',
+'i.bkatjs.info',
+'i.blogads.com',
+'i.bongacash.com',
+'i.casalemedia.com',
+'i.cdnpark.com',
+'i.chartboost.com',
+'i.exclusivegiftcards.com',
+'i.flowgo.com',
+'i.idownloadgalore.com',
+'i.isohunt.to',
+'i.jumptap.com',
+'i.kissmetrics.com',
+'i.ligatus.com',
+'i.mxplayer.j2inter.com',
+'i.n.jwpltx.com',
+'i.nuseek.com',
+'i.offerx.co.uk',
+'i.playnow.guru',
+'i.plug.it',
+'i.po.st',
+'i.psa-ads.openx.com',
+'i.r1-cdn.net',
+'i.sahcdn.com',
+'i.serves.live',
+'i.simpli.fi',
+'i.socdm.com',
+'i.tapit.com',
+'i.txtsrving.info',
+'i.verticalresponse.com',
+'i.w.inmobi.com',
+'i.w55c.net',
+'i.walla.co.il',
+'i.wifi-x.co.uk',
+'i.xx.openx.com',
+'i.zeroredirect.com',
+'i.zeroredirect1.com',
+'i.zeroredirect2.com',
+'i1-j1-18-7-1-13335-2395654547-i.init.cedexis-radar.net',
+'i1-j1-18-7-1-13335-423715794-i.init.cedexis-radar.net',
+'i1-j4-19-0-1-13960-2465639427-i.init.cedexis-radar.net',
+'i1-js-14-3-01-13960-152038880-i.init.cedexis-radar.net',
+'i1-js-14-3-01-13960-28308226-i.init.cedexis-radar.net',
+'i1-js-14-3-01-13960-519948169-i.init.cedexis-radar.net',
+'i1-js-14-3-01-13960-544110554-i.init.cedexis-radar.net',
+'i1-js-14-3-01-13960-551103725-i.init.cedexis-radar.net',
+'i1-js-14-3-01-13960-57801005-i.init.cedexis-radar.net',
+'i1-js-14-3-01-13960-670713316-i.init.cedexis-radar.net',
+'i1-js-14-3-01-13960-749916135-s.init.cedexis-radar.net',
+'i1-js-14-3-01-13960-764582940-i.init.cedexis-radar.net',
+'i1-js-14-3-01-13960-904132444-i.init.cedexis-radar.net',
+'i1.cmail1.com',
+'i1.cmail2.com',
+'i1.createsend4.com',
+'i1.createsend5.com',
+'i1.likes-media.com',
+'i1.putags.com',
+'i18n.adition.com',
+'i1k2c.voluumtrk.com',
+'i1slv.voluumtrk.com',
+'i2.cmail1.com',
+'i2.cmail2.com',
+'i2.createsend1.com',
+'i2.createsend3.com',
+'i2.createsend4.com',
+'i2.gatewayinterface.com',
+'i2.likes-media.com',
+'i2.putags.com',
+'i3.cmail1.com',
+'i3.cmail2.com',
+'i3.cmail5.com',
+'i3.createsend1.com',
+'i3.createsend3.com',
+'i3.createsend4.com',
+'i3.createsend5.com',
+'i3.putags.com',
+'i3pw2.voluumtrk.com',
+'i4.cmail1.com',
+'i4.createsend4.com',
+'i4.putags.com',
+'i46rz.voluumtrk.com',
+'i4927.voluumtrk.com',
+'i4c.go2cloud.org',
+'i5.cmail2.com',
+'i5.cmail5.com',
+'i5.createsend1.com',
+'i5.createsend3.com',
+'i5.createsend5.com',
+'i5g9d.voluumtrk.com',
+'i6.cmail1.com',
+'i6.createsend3.com',
+'i6.createsend5.com',
+'i7.cmail1.com',
+'i7.cmail2.com',
+'i7.cmail5.com',
+'i7.createsend5.com',
+'i8vnk.voluumtrk.com',
+'i9mhy.voluumtrk.com',
+'ia.spinbox.net',
+'ia1.7search.com',
+'ia1.sftcdn.net',
+'iacpromotion.s3.amazonaws.com',
+'iad-login.dotomi.com',
+'iad.anm.co.uk',
+'iadc.qwapi.com',
+'iadctest.qwapi.com',
+'iadfeed.qwapi.com',
+'iadfeedtest.qwapi.com',
+'iads.com.np',
+'iadsdk.apple.com',
+'ialchemnteryield.jmp9.com',
+'ialchemynteryield.jmp9.com',
+'ialchenteryield.jmp9.com',
+'ialcnteryield.jmp9.com',
+'ialnteryield.jmp9.com',
+'iamnotageek.us.intellitxt.com',
+'ianteryield.jmp9.com',
+'iapref.orange.fr',
+'iapref.wanadoo.fr',
+'iar.worthathousandwords.com',
+'ias.hitbox.com',
+'iaspromotes.com',
+'iatzk.voluumtrk.com',
+'ib.3lift.com',
+'ib.adnxs.com',
+'ib.bounceads.net',
+'ib.mookie1.com',
+'ibanners.empoweredcomms.com.au',
+'ibario.com',
+'ibeat.indiatimes.com',
+'ibeu2.mookie1.com',
+'ibg.hitbox.com',
+'ibjk3.voluumtrk.com',
+'ibope.2cnt.net',
+'ibs.indiatimes.com',
+'ibsys.com',
+'icentric.us.intellitxt.com',
+'icestorm.com',
+'ichabodbvtxqb.download',
+'icm.go2cloud.org',
+'ico.freelogs.com',
+'icompass.insightexpressai.com',
+'icon.ajiang.net',
+'icon.cnzz.com',
+'iconator.com',
+'iconifyingkjlzag.download',
+'icontact.com',
+'icontent.us',
+'icount.com',
+'icoupon.go2cloud.org',
+'icptrack.com',
+'ics.hitbox.com',
+'icthl.voluumtrk.com',
+'icubes.go2cloud.org',
+'icubeswire.go2affise.com',
+'icvdm.vo.llnwd.net',
+'id.allegisgroup.com',
+'id.google.com',
+'id.tynt.com',
+'iddiction.com',
+'idg.dmdelivery.com',
+'idgmagazine.met.vgwort.de',
+'idgpctip.wemfbox.ch',
+'idioticxellutv.download',
+'idritracker.com',
+'idspaces.ero-advertising.com',
+'idsync.rlcdn.com',
+'ie.justclick.ru',
+'ieah8.voluumtrk.com',
+'iectl.voluumtrk.com',
+'iefqr.voluumtrk.com',
+'ield.jmp9.com',
+'iendoo.com',
+'ientc.voluumtrk.com',
+'ientry.com',
+'ientrymail.com',
+'ientrynetwork.net',
+'iesnare.com',
+'iezgb.voluumtrk.com',
+'ifa.camads.net',
+'ifcvc.voluumtrk.com',
+'ifdds.voluumtrk.com',
+'iffet.de',
+'iforex.go2cloud.org',
+'iframe.adultfriendfinder.com',
+'iframe.mediaplazza.com',
+'iframe.sponsorpay.com',
+'iframes.hustler.com',
+'ifriends.net',
+'ifxvq.voluumtrk.com',
+'igmarauders.isotx.com',
+'ign.us.intellitxt.com',
+'igninetwork.go2cloud.org',
+'ignitad.com',
+'igogoshare.com',
+'igor093.justclick.ru',
+'ih.adscale.de',
+'ih.f2.constantcontact.com',
+'ih4.gamecopyworld.com',
+'ihcgpro.go2cloud.org',
+'ihfpu.voluumtrk.com',
+'ihm01.ct2.comclick.com',
+'iicdn.com',
+'iiiyr.voluumtrk.com',
+'ijdkc.voluumtrk.com',
+'ijrgl.voluumtrk.com',
+'ijsl1.voluumtrk.com',
+'ijxaxlacapacitors.review',
+'ijyrq.voluumtrk.com',
+'ikay6.voluumtrk.com',
+'iknka.voluumtrk.com',
+'ikwyd.analytics.sapo.pt',
+'ilbfk.voluumtrk.com',
+'ilead.itrack.it',
+'ilife.com',
+'illicitlyyyzmvq.download',
+'iloopmobile.com',
+'ilovecookies.co',
+'iluv.clickbooth.com',
+'ilzzf.voluumtrk.com',
+'im.405d5700.1ff6a9b.ads.a4cdn.contentabc.com',
+'im.405d5700.8d9937e.ads.a4cdn.contentabc.com',
+'im.51111900.b1aad3f.ads.a4cdn.contentabc.com',
+'im.b2a2c700.a80886f.ads.a4cdn.contentabc.com',
+'im.b2a2c700.e8cace3.ads.a4cdn.contentabc.com',
+'im.b2a2cd00.885d48e.ads.a4cdn.contentabc.com',
+'im.b2a2cd00.92bde07.ads.a4cdn.contentabc.com',
+'im.ov.yahoo.co.jp',
+'im.upromise.com',
+'im2.smartadserver.com',
+'ima3vpaid.appspot.com',
+'imads.ero-advertising.com',
+'imads.integral-marketing.com',
+'imads.rediff.com',
+'imadworks.rediff.com',
+'image-map.com',
+'image.accendo.com',
+'image.adition.com',
+'image.atdmt.com',
+'image.click2net.nl',
+'image.cybererotica.com',
+'image.excite.com',
+'image.ig.com.br',
+'image.linkexchange.com',
+'image.linkexchange.net',
+'image.masterstats.com',
+'image.nsk-sys.com',
+'image.pathfinder.com',
+'image.providesupport.com',
+'image.reporo.net',
+'image.safe-sender.co.uk',
+'image.versiontracker.com',
+'image2.pubmatic.com',
+'imageads.canoe.ca',
+'imagec07.247realmedia.com',
+'imagec08.247realmedia.com',
+'imagec10.247realmedia.com',
+'imagec11.247realmedia.com',
+'imagec12.247realmedia.com',
+'imagec14.247realmedia.com',
+'imagec15.247realmedia.com',
+'imagec16.247realmedia.com',
+'imagec17.247realmedia.com',
+'imagecache.allposters.com',
+'imagecache2.allposters.com',
+'imagecdn.infospace.com',
+'imageceu1.247realmedia.com',
+'imageers.com',
+'imagen01.247realmedia.com',
+'imagen03.247realmedia.com',
+'imagen04.247realmedia.com',
+'images-aud.freshmeat.net',
+'images-aud.slashdot.org',
+'images-aud.sourceforge.net',
+'images-geo.outbrain.com',
+'images-mcdn.startappexchange.com',
+'images-pw.secureserver.net',
+'images.about.com',
+'images.adkmob.com',
+'images.adprofile.net',
+'images.ads.fairfax.com.au',
+'images.ads.whaleads.com',
+'images.adsyndication.msn.com',
+'images.adultplex.com',
+'images.bizrate.com',
+'images.bmnq.com',
+'images.brainfox.com',
+'images.bravenet.com',
+'images.buy.com',
+'images.chitika.net',
+'images.clickability.com',
+'images.clicktrade.com',
+'images.cloudassets.mobi',
+'images.cybereps.com',
+'images.dentalplans.com',
+'images.directtrack.com',
+'images.dmca.com',
+'images.dreamhost.com',
+'images.drivelinemedia.com',
+'images.e-mailcom.co.uk',
+'images.ed4.net',
+'images.enhance.com',
+'images.fastclick.net',
+'images.francite.com',
+'images.freelotto.com',
+'images.hi5.com',
+'images.hitwise.co.uk',
+'images.ibsys.com',
+'images.ientrymail.com',
+'images.ifriends.net',
+'images.indiads.com',
+'images.intellitxt.com',
+'images.livejasmin.com',
+'images.lookwhatworks.com',
+'images.m0.net',
+'images.marchex.com',
+'images.millennialmedia.com',
+'images.mpression.net',
+'images.mrskincash.com',
+'images.myareaguide.com',
+'images.mylot.com',
+'images.netradio.nl',
+'images.outbrain.com',
+'images.paypal.com',
+'images.people2people.com',
+'images.performgroup.com',
+'images.quitnet.com',
+'images.rambler.ru',
+'images.resellerratings.com',
+'images.revmob.com',
+'images.revtrax.com',
+'images.sexkey.com',
+'images.sexlist.com',
+'images.specificclick.net',
+'images.speedbit.com',
+'images.startappexchange.com',
+'images.startappservice.com',
+'images.streamray.com',
+'images.taboola.com',
+'images.tigerdirect.com.edgesuite.net',
+'images.v3.com',
+'images.vantage-media.net',
+'images.vantagenet.com',
+'images.webads.nl',
+'images02.netaddress.usa.net',
+'images1.paycounter.com',
+'images2.click-now.co',
+'images2.iac-online.de',
+'imageserv.adtech.fr',
+'imagesrv.adition.com',
+'imagevenue.advertserve.com',
+'imagine-inc.com',
+'imaginemedia.net',
+'imap.linkshare.com',
+'imatmobile.com',
+'imbof.com',
+'imedia.co.il',
+'imeds.ero-advertising.com',
+'imeseonetwork.go2cloud.org',
+'img-cdn.mediaplex.com',
+'img-iad.mediaplex.com',
+'img-iad.wip.mediaplex.com',
+'img-sjc.wip.mediaplex.com',
+'img.163.com',
+'img.7search.com',
+'img.adecorp.co.kr',
+'img.adkmob.com',
+'img.adpublisher.com',
+'img.ads.huntmad.com',
+'img.ads.mobilefuse.net',
+'img.ads.mocean.mobi',
+'img.ads.mojiva.com',
+'img.ads.taptapnetworks.com',
+'img.ads1.mocean.mobi',
+'img.ads1.mojiva.com',
+'img.ads2.mocean.mobi',
+'img.ads2.mojiva.com',
+'img.ads3.mocean.mobi',
+'img.ads3.mojiva.com',
+'img.ads4.mocean.mobi',
+'img.ads4.mojiva.com',
+'img.ads5.mojiva.com',
+'img.alcoholsoftcdn.com',
+'img.atdmt.com',
+'img.babcdn.com',
+'img.bizjournals.com',
+'img.blogsavenue.com',
+'img.bluehost.com',
+'img.bororeb.com',
+'img.centrum.sk',
+'img.cmpnet.com',
+'img.cqcounter.com',
+'img.df-stream.net',
+'img.directadvert.ru',
+'img.directtrack.com',
+'img.dt00.net',
+'img.espngp.com',
+'img.filefactscdn.com',
+'img.fliks.net',
+'img.footprintlive.com',
+'img.gmo.jp',
+'img.gostats.com',
+'img.livejasmin.com',
+'img.mediaplex.com',
+'img.mediaplex.com.edgesuite.net',
+'img.mobpartner.mobi',
+'img.mobusi.com',
+'img.mqcdn.com',
+'img.msgtag.com',
+'img.mybet.com',
+'img.nameintel.com',
+'img.qualtrics.com',
+'img.revcontent.com',
+'img.revmob.com',
+'img.sedoparking.com',
+'img.servint.net',
+'img.share-online.biz',
+'img.solocpm.com',
+'img.stamps.com',
+'img.szm.sk',
+'img.techweb.com',
+'img.testsuite.adition.com',
+'img.tradedoubler.com',
+'img.turn.com.73892.9624.302br.net',
+'img.turn.com.73893.9624.302br.net',
+'img.users.51.la',
+'img.vmmpxl.com',
+'img.webring.com',
+'img.wmp10.elsitiodc.com',
+'img.woolik.com',
+'img.zedo.com',
+'img001.groovinads.com',
+'img002.groovinads.com',
+'img003.groovinads.com',
+'img004.groovinads.com',
+'img005.groovinads.com',
+'img006.groovinads.com',
+'img007.groovinads.com',
+'img008.groovinads.com',
+'img009.groovinads.com',
+'img01.webtrekk.net',
+'img02.webtrekk.net',
+'img03.en25.com',
+'img03.webtrekk.net',
+'img04.webtrekk.net',
+'img05.webtrekk.net',
+'img06.webtrekk.net',
+'img1.nend.net',
+'img1.webring.com',
+'img2.freeze.com',
+'img22.ru.redtram.com',
+'img3.giardinelli.com',
+'img3.giardinelli.com.edgesuite.net',
+'imgcache.classesusa.com',
+'imgclck.com',
+'imgfarm.com',
+'imgg-cdn.adskeeper.co.uk',
+'imgg.adskeeper.co.uk',
+'imgg.marketgid.com',
+'imgg.steepto.com',
+'imgn.dt07.net',
+'imgs.xinhuanet.com',
+'imgserv.adbutler.com',
+'imgstat.ameba.jp',
+'imgtrack.domainmarket.com',
+'imiclk.com',
+'imimobile.com',
+'imln5.voluumtrk.com',
+'immassets.s3.amazonaws.com',
+'imonitor.dhgate.com',
+'imonitor.nethost.cz',
+'imp.bid.ace.advertising.com',
+'imp.clickability.com',
+'imp.constantcontact.com',
+'imp.optaim.com',
+'imp.startappexchange.com',
+'imp.tradedoubler.com',
+'impact.applifier.com',
+'impact.staging.applifier.com',
+'impactmobile.com',
+'impbe.tradedoubler.com',
+'impde.tradedoubler.com',
+'impdk.tradedoubler.com',
+'impes.tradedoubler.com',
+'impfi.tradedoubler.com',
+'impfr.tradedoubler.com',
+'impgb.tradedoubler.com',
+'impit.tradedoubler.com',
+'impluviawtqydlbbi.download',
+'impnl.tradedoubler.com',
+'impno.tradedoubler.com',
+'impr.superpages.com',
+'imprese.cz',
+'impression.clickinc.com',
+'imprusmp.admailtiser.com',
+'impse.tradedoubler.com',
+'imptestrm.com',
+'ims.cz',
+'ims.nl',
+'imserv001.adtech.fr',
+'imserv002.adtech.fr',
+'imserv003.adtech.fr',
+'imserv004.adtech.fr',
+'imserv005.adtech.fr',
+'imserv006.adtech.fr',
+'imserv00x.adtech.fr',
+'imssl01.adtech.fr',
+'imstore.bet365affiliates.com',
+'imtrck.com',
+'imtrk.trktoo.com',
+'imu.com.cn',
+'imupdate.3g.cn',
+'imx.comedycentral.com',
+'in.adserver.yahoo.com',
+'in.cybererotica.com',
+'in.getclicky.com',
+'in.mainentrypoint.com',
+'in.ml314.com',
+'in.mstrckinam.com',
+'in.mydirtyhobby.com',
+'in.paycounter.com',
+'in.riskymail4free.com',
+'inb.csrvrgroup.com',
+'inb.genorithm.com',
+'inbeingsfmjfup.download',
+'inboxdollars.com',
+'inboxpounds.co.uk',
+'inboxpounds.com',
+'incentaclick.com',
+'inceptionads.go2cloud.org',
+'inclk.com',
+'include.reinvigorate.net',
+'incoming.cloud-trax.com',
+'indiads.com',
+'indicative.com',
+'indieclick.3janecdn.com',
+'indocpa.go2cloud.org',
+'indoorspkacwv.download',
+'industryclick.com',
+'indystar.com',
+'inebriatesqmwpaz.download',
+'inedo.com',
+'inentasky.com',
+'ineryield.jmp9.com',
+'inet-traffic.com',
+'inetlog.com',
+'inetlog.ru',
+'inf.marketgid.com',
+'infinio.go2cloud.org',
+'infinite-ads.com',
+'infinite-mobility.go2affise.com',
+'infinity.adsupply.com',
+'infinityads.com',
+'influens.go2affise.com',
+'influentialads.go2cloud.org',
+'info-mail.codeguard.com',
+'info.anmedia.co.uk',
+'info.bororeb.com',
+'info.elba.at',
+'info.evidon.com',
+'info.skyhookwireless.com',
+'info.static.startappservice.com',
+'info.web.de',
+'info4.a7.org',
+'infoc1.duba.net',
+'infoc2.duba.net',
+'infomart.ca.112.2o7.net',
+'infonlin.2cnt.net',
+'infoproducts.go2cloud.org',
+'information.com',
+'infos.com',
+'infospace.com',
+'infospace.com.112.2o7.net',
+'infostart.com',
+'infostroy.nnov.ru',
+'ingameads.gameloft.com',
+'ingdirectit.tt.omtrdc.net',
+'ingluvialqsbjgerp.download',
+'inimage.tr553.com',
+'init.lingospot.com',
+'init.phpwind.net',
+'init.startappexchange.com',
+'initgroup.com',
+'inkshare.com',
+'inm.go2cloud.org',
+'inmobi.com',
+'inmobi.net',
+'inmobisdk-a.akamaihd.net',
+'inner-active.com',
+'inner-active.mobi',
+'inneractive-assets.s3.amazonaws.com',
+'innn.site',
+'inpencil.go2cloud.org',
+'inpencilmedia.go2cloud.org',
+'inpref.s3-external-3.amazonaws.com',
+'inpref.s3.amazonaws.com',
+'inquiries.redhat.com',
+'inquiry.shop.xerox.com',
+'insight.adsrvr.org',
+'insight.mintel.com',
+'insightexpress.com',
+'insightexpressai.com',
+'insights.gravity.com',
+'insightsprod.zelfy.com',
+'insitepromotion.com',
+'insites.be',
+'inspectlet.com',
+'inspectorclick.com',
+'instinctiveads.com',
+'instore-audience.pb.adition.com',
+'int.sitestat.com',
+'intares.net',
+'intarsia.bnex.com',
+'intecyield.jmp9.com',
+'integral-marketing.com',
+'integrate.112.2o7.net',
+'integrate.com',
+'intelcorpchan.112.2o7.net',
+'intelcorperror.112.2o7.net',
+'intelcorpsupp.112.2o7.net',
+'inteld.jmp9.com',
+'inteletrack.com',
+'intelglobal.112.2o7.net',
+'intelli-direct.com',
+'intelli-tracker.com',
+'intelli.ageuk.org.uk',
+'intelliad.de',
+'intellicampaign.com',
+'intellicontact.com',
+'intelligence.dgmsearchlab.com',
+'intelligentbeauty.122.2o7.net',
+'intelliseek.com',
+'intellitxt.com',
+'interactive-assets.s3.amazonaws.com',
+'interactivepartners.go2cloud.org',
+'interhyp02.webtrekk.net',
+'interield.jmp9.com',
+'interludenbaabaim.download',
+'internet-optimizer.com',
+'internet-time.com',
+'internet.cz',
+'internetcount.com',
+'internettrafficreport.com',
+'interreklame.de',
+'interstateanalytics.com',
+'interunionieyyq.download',
+'interupload.com',
+'interworksmedia.co.kr',
+'interyeild.jmp9.com',
+'interyield.jmp9.com',
+'interyield.jmp9.cominteryield.jmp9.com',
+'interyieldw.jmp9.com',
+'interyieldww.jmp9.com',
+'interyieldwww.jmp9.com',
+'interyieldwww.t.jmp9.com',
+'inteteryield.jmp9.com',
+'intext.advertise.com',
+'intext.billboard.cz',
+'intext.de',
+'intext.ero-advertising.com',
+'intext.intextdirect.com',
+'intext.linknavi1.com',
+'intext.nav-links.com',
+'intimistsoqitkh.download',
+'intouchmediagroup.com',
+'intranet.adition.com',
+'intranet.bnex.com',
+'intranet.zedo.com',
+'intredo.com',
+'intredomedia.com',
+'intueryield.jmp9.com',
+'intuitinc.122.2o7.net',
+'inuvi.com',
+'investora.justclick.ru',
+'invideo.ero-advertising.com',
+'inviterdczpqji.download',
+'invites.flipmailer.com',
+'invites.infoaxe.com',
+'inze5.voluumtrk.com',
+'ioads.ero-advertising.com',
+'ione.adspirit.de',
+'ione.netmng.com',
+'iopodx.de',
+'ios.revmob.com',
+'iosads20.adcolony.com',
+'iosads22.adcolony.com',
+'iosads24.adcolony.com',
+'iota1.rtb.appier.net',
+'iota5.rtb.appier.net',
+'ip-api.com',
+'ip.casalemedia.com',
+'ip134.timesink.com',
+'ip2.casalemedia.com',
+'ipacc1.adtech.fr',
+'ipc.chtah.com',
+'ipdata.adtech.fr',
+'ipdeutschland.122.2o7.net',
+'iperceptions.com',
+'ipfingerprint.com',
+'iph.go2cloud.org',
+'iphone.mobpartner.mobi',
+'ipinvite.iperceptions.com',
+'ipinyou.com.cn',
+'ipqualityscore.com',
+'ipstat.com',
+'iptrack01.webtrekk.net',
+'iptrack02.webtrekk.net',
+'iptrack03.webtrekk.net',
+'iptrack04.webtrekk.net',
+'iptrack05.webtrekk.net',
+'iq.mobilix.mobi',
+'iq001.adtech.fr',
+'iqads.2cnt.net',
+'iqolu.voluumtrk.com',
+'ir-de.amazon-adsystem.com',
+'ir-jp.amazon-adsystem.com',
+'ir-na.amazon-adsystem.com',
+'ir.doubleclick.net',
+'ir0.mobify.com',
+'ir1p5.voluumtrk.com',
+'ir2.beap.gemini.yahoo.com',
+'ir752.voluumtrk.com',
+'iranpopup.ir',
+'ireklama.cz',
+'irepdeliver.com',
+'irozb.voluumtrk.com',
+'irpopup.ir',
+'irqnaphizzes.review',
+'irs01.net',
+'is9ip.voluumtrk.com',
+'ise.clmbtech.com',
+'isearch.shopathome.com',
+'isg01.casalemedia.com',
+'ishare.metric.rediff.com',
+'isoa.adition.com',
+'isobarevdwtaol.download',
+'isoclinicvzlcj.download',
+'ispeakvideo.com',
+'ist.go2cloud.org',
+'istatic.datafastguru.info',
+'istats.nl',
+'istrack.com',
+'it.adserver.yahoo.com',
+'itnteryield.jmp9.com',
+'itop.cz',
+'itpaystolearn.com',
+'itpro.no.intellitxt.com',
+'itrack.it',
+'itrafficcontrol.com',
+'itrckr.com',
+'itreviews.uk.intellitxt.com',
+'itroq.voluumtrk.com',
+'itsptp.com',
+'itunes.mobpartner.mobi',
+'ituwnqfhoimpresari.review',
+'itvandroid.2cnt.net',
+'itvdotcom.2cnt.net',
+'itvios.2cnt.net',
+'itx5-publicidad.smartadserver.com',
+'itx5.smartadserver.com',
+'itxt2.us.intellitxt.com',
+'itxt3.us.intellitxt.com',
+'iuhts.voluumtrk.com',
+'iusfpiadefunction.review',
+'iut4u.voluumtrk.com',
+'iv.doubleclick.net',
+'ivi.traflab.ru',
+'ivillageglobal.112.2o7.net',
+'ivjca.voluumtrk.com',
+'ivoriessrjwoctu.download',
+'ivqva.voluumtrk.com',
+'ivw.discover-outdoor.de',
+'ivw.dumontreise.de',
+'ivw.rtl.de',
+'ivwextern.prosieben.de',
+'ivwextern.sat1.de',
+'ivypixel.com',
+'ivypx.voluumtrk.com',
+'iweb.go2cloud.org',
+'iwebimg.net',
+'iwmhtnexbthwartly.review',
+'iwqzh.voluumtrk.com',
+'ixsjz.voluumtrk.com',
+'ixzvhxrithripses.review',
+'iy3me.voluumtrk.com',
+'iycmeworlds.review',
+'iyczm.voluumtrk.com',
+'iyfnzgb.com',
+'iymaw.voluumtrk.com',
+'izrtyzjvarememberer.review',
+'izzonet.go2cloud.org',
+'j.adlooxtracking.com',
+'j.clickdensity.com',
+'j.ophan.co.uk',
+'j.rvttrack.com',
+'j.sahcdn.com',
+'j.zeroredirect.com',
+'j.zeroredirect1.com',
+'j.zeroredirect2.com',
+'j0q3w.voluumtrk.com',
+'j1alc.voluumtrk.com',
+'j3vcj.voluumtrk.com',
+'j4sgq.voluumtrk.com',
+'j5g2b.voluumtrk.com',
+'j5sjr.voluumtrk.com',
+'j8r2b.voluumtrk.com',
+'jaapt.voluumtrk.com',
+'jackpotgambling.net',
+'jade.bnex.com',
+'jadina-counter.de',
+'jadizayo.com',
+'jag.go2cloud.org',
+'jaggiestlydumv.download',
+'jaildxlhdnvo.download',
+'jajzr.voluumtrk.com',
+'jalbum.net',
+'jamii.2cnt.net',
+'jaminfinity.tk',
+'jammyads.go2affise.com',
+'jandolav.com',
+'japan.inmobi.com',
+'jarvinzo.com',
+'jasmin.com',
+'jasper.go2cloud.org',
+'jatxt.com',
+'javascriptcounter.appspot.com',
+'javdict.disqus.com',
+'jayde.com',
+'jayohmedia.go2cloud.org',
+'jbmqa.voluumtrk.com',
+'jbonlinemedia-electronics.t.domdex.com',
+'jbrotrk.com',
+'jcarter.spinbox.net',
+'jclqf.voluumtrk.com',
+'jcmailer.justcode.biz',
+'jcount.com',
+'jcr0757kum.s.ad6media.fr',
+'jd-mail.co.uk',
+'jd.revolvermaps.com',
+'jd2yj.voluumtrk.com',
+'jdelta2.rtb.appier.net',
+'jdelta3.rtb.appier.net',
+'jdn.monster.com',
+'je.revolvermaps.com',
+'je60z.voluumtrk.com',
+'jeanswest-com-au.b.appier.net',
+'jebadu.com',
+'jebtrack.com',
+'jeiup.voluumtrk.com',
+'jenkins.kissmetrics.com',
+'jeolk.voluumtrk.com',
+'jerrcotch.com',
+'jetenglish.justclick.ru',
+'jetmultimedia1.audientia.net',
+'jetzt.digidip.net',
+'jewelryincandlescomplg-wxhost.netdna-ssl.com',
+'jfhjh.voluumtrk.com',
+'jggxm.voluumtrk.com',
+'jh4ne.voluumtrk.com',
+'jhojr.voluumtrk.com',
+'jhwjkr.com',
+'jidbn.voluumtrk.com',
+'jigoshop.go2cloud.org',
+'jijsonline.112.2o7.net',
+'jingavot.com',
+'jira.adition.com',
+'jira.omniture.com',
+'jirkinetsaxjjdegyp.download',
+'jiwire.com',
+'jixfo.voluumtrk.com',
+'jkearns.freestats.com',
+'jkeyp.voluumtrk.com',
+'jkgah.voluumtrk.com',
+'jkmiepojqatmolyse.review',
+'jlh9b.voluumtrk.com',
+'jlinks.industrybrains.com',
+'jlyse.net',
+'jm.moatads.com',
+'jmm.livestat.com',
+'jmp.realtraq.net',
+'jmp9.com',
+'jmpdirect01.com',
+'jmpgo.com',
+'jmplink.com',
+'jmqqopacmilligram.review',
+'jmsri.voluumtrk.com',
+'jmyyyjhnzpeaching.review',
+'jobclicks.net',
+'jobfeeds.coroflot.com',
+'joblo.us.intellitxt.com',
+'jobs.advertising.com',
+'jobs.leadbolt.com',
+'jobs.zedo.com',
+'jobscentral-com-sg.b.appier.net',
+'joetec.net',
+'johnlewis.112.2o7.net',
+'joigd.voluumtrk.com',
+'join.whitegfs.com',
+'jokep.com',
+'jokes.searchwho.com',
+'jonathanleger.com',
+'joredi.com',
+'joredii.com',
+'jorel.radfellas.com',
+'joshtest1.evsuite.com',
+'joyourself.com',
+'jp-u.openx.net',
+'jp8yh.voluumtrk.com',
+'jpgolimited.go2affise.com',
+'jpmedia.go2cloud.org',
+'jppcj.voluumtrk.com',
+'jpvoj.voluumtrk.com',
+'jpxal.voluumtrk.com',
+'jqreb.voluumtrk.com',
+'jqs7d.voluumtrk.com',
+'jquerycdn.co.il',
+'jquerymin.co.il',
+'jqyss.voluumtrk.com',
+'jrcdelcotimescom.122.2o7.net',
+'jrjdn.voluumtrk.com',
+'jrtux.com',
+'js-agent.newrelic.com',
+'js-sec.indexww.com',
+'js-webt-lol.9cache.com',
+'js.ad-stir.com',
+'js.adforgames.com',
+'js.ads.ero-advertising.com',
+'js.adscale.de',
+'js.adsonar.com',
+'js.avstats.com',
+'js.bitlordservdownload.com',
+'js.bizographics.com',
+'js.callbutton.net',
+'js.cdn.yieldkit.com',
+'js.cybermonitor.com',
+'js.dmtry.com',
+'js.embedarticle.com',
+'js.ero-advertising.com',
+'js.francite.com',
+'js.gumgum.com',
+'js.hs-analytics.net',
+'js.hubspot.com',
+'js.indexww.com',
+'js.juicyads.com',
+'js.kau.li',
+'js.libertysurf.fr',
+'js.livehelper.com',
+'js.matheranalytics.com',
+'js.maxmind.com',
+'js.moatads.com',
+'js.myinfotopia.com',
+'js.nrcdn.com',
+'js.revsci.net',
+'js.rmbn.ru',
+'js.ru.redtram.com',
+'js.sddan.com',
+'js.smartredirect.de',
+'js.stormcontainertag.com',
+'js.users.51.la',
+'js.w.inmobi.com',
+'js.wingowin.com',
+'js.worthathousandwords.com',
+'js1.hitbox.com',
+'js1.nend.net',
+'js2.rfihub.com',
+'jsauth.mymovies.net',
+'jsc.dinclinx.com',
+'jsc.dt07.net',
+'jsc.madisonlogic.com',
+'jsc.marketgid.com',
+'jsc.mgid.com',
+'jscount.com',
+'jserr.cnzz.com',
+'jserror.newrelic.com',
+'jsl.blankbase.com',
+'jsmith.go2cloud.org',
+'jsn.dt07.net',
+'jsn.mgid.com',
+'jsok.demos.su',
+'json-cricket.appspot.com',
+'json.mmotraffic.com',
+'json.moatads.com',
+'jsonp.moatads.com',
+'jspy.ru',
+'jsu.dt07.net',
+'jsu.mgid.com',
+'jsv2.ptengine.com',
+'jswrite.com',
+'jsy59.voluumtrk.com',
+'jtqhcgndrawlers.review',
+'jttnk.voluumtrk.com',
+'jtzvl.voluumtrk.com',
+'ju6jb.voluumtrk.com',
+'jubilationqeeau.download',
+'juiceadv.com',
+'juispsvgtproselytes.review',
+'jump.aragontrack.com',
+'jump.jspg.cc',
+'jump.omnitarget.com',
+'jump.youmobistein.com',
+'jumptap.com',
+'junbi-tracker.com',
+'junggglex.go2affise.com',
+'jupiter.bravenet.com',
+'jupiter.us.intellitxt.com',
+'jurymastgewtdwcw.download',
+'justad.mobi',
+'justgetitfaster.com',
+'justsaywow.com',
+'justwebads.com',
+'justwtchaffiliatecom.ipage.com',
+'jvesd.voluumtrk.com',
+'jvhuv.voluumtrk.com',
+'jvpmb.voluumtrk.com',
+'jvrub.voluumtrk.com',
+'jvz5.com',
+'jvz7.com',
+'jvz8.com',
+'jvz9.com',
+'jvzoo.com',
+'jwljj.adsb4track.com',
+'jwner.voluumtrk.com',
+'jwpltx.com',
+'jwtznloxywadsets.review',
+'jxzmo.voluumtrk.com',
+'jxzxqaauplaybooks.review',
+'jzgng.voluumtrk.com',
+'k.collective-media.net',
+'k.ilius.net',
+'k.zeroredirect.com',
+'k.zeroredirect1.com',
+'k.zeroredirect2.com',
+'k30mn.voluumtrk.com',
+'k3sbo.voluumtrk.com',
+'k658t.voluumtrk.com',
+'k66fd.voluumtrk.com',
+'k6afu.voluumtrk.com',
+'k6pwy.voluumtrk.com',
+'k7j6a.voluumtrk.com',
+'k9a8e.voluumtrk.com',
+'kaartenhuis.nl.site-id.nl',
+'kads.k-network.com',
+'kalanternaya.justclick.ru',
+'kaldi.voluumtrk.com',
+'kaleidoaffiliates.go2cloud.org',
+'kalender.adition.com',
+'kalpit.go2cloud.org',
+'kalstats.kaltura.com',
+'kanoodle.com',
+'kaponetwo.com',
+'kargo.com',
+'kavanga.ru',
+'kb.2cnt.net',
+'kb1vtest.2cnt.net',
+'kb9kd.voluumtrk.com',
+'kcaf9.voluumtrk.com',
+'kcsbaujgynaecia.review',
+'kd1fv.voluumtrk.com',
+'kdhhl.voluumtrk.com',
+'kdovs.voluumtrk.com',
+'kds.ero-advertising.com',
+'kdzwk.voluumtrk.com',
+'kea98.voluumtrk.com',
+'kecksesualnfr.download',
+'kecwxhifheyestalks.review',
+'keen.io',
+'kefu.duba.net',
+'keisu.eproof.com',
+'kek2s.voluumtrk.com',
+'kel6x.voluumtrk.com',
+'kelshpjmntongues.review',
+'kewlrank.com',
+'keydownload.go2cloud.org',
+'keynotedeviceanywhere.com',
+'keyoptimize.com',
+'keystat.com',
+'keyword.daumdn.com',
+'keyword.netscape.com',
+'keywordblocks.com',
+'keywordmax.com',
+'keywords.fmpub.net',
+'kfmm5.voluumtrk.com',
+'kfngqabkeinfallibly.review',
+'kfw-05.webtrekk.net',
+'kfw-06.webtrekk.net',
+'kfw-07.webtrekk.net',
+'kfw01.webtrekk.net',
+'kfw02.webtrekk.net',
+'kfw03.webtrekk.net',
+'kfw04.webtrekk.net',
+'kgj9s.voluumtrk.com',
+'kgn3j.voluumtrk.com',
+'khe5q.voluumtrk.com',
+'khkg2.voluumtrk.com',
+'khvx.secoptim.com',
+'ki6fu.voluumtrk.com',
+'kiks.yandex.ru',
+'kikuzip.com',
+'kilobytebokrfnbvp.download',
+'kilomansa.com',
+'kilopog.com',
+'kilorama.com',
+'kinesiz.go2affise.com',
+'kinkycards.com',
+'kinocash.com',
+'kinoprogramm.bild.de',
+'kinostok.tv',
+'kintris.adspirit.net.52322.9351.302br.net',
+'kintris.adspirit.net.52325.9351.302br.net',
+'kintris.adspirit.net.52328.9351.302br.net',
+'kintris.adspirit.net.52331.9351.302br.net',
+'kintris.adspirit.net.52337.9351.302br.net',
+'kintris.adspirit.net.52340.9351.302br.net',
+'kintrisaffiliates.go2cloud.org',
+'kiomi-com01.webtrekk.net',
+'kismia.go2affise.com',
+'kissfm.ivwbox.de',
+'kissmetrics.com',
+'kissmyads.com',
+'kitcg.voluumtrk.com',
+'kizash.com',
+'kjolj.voluumtrk.com',
+'kjos.vo.llnwd.net',
+'kjswp.voluumtrk.com',
+'kka.agitos.de',
+'kka.idg.de',
+'kkastatic.s3.amazonaws.com',
+'kkhopguserenate.review',
+'kleiderkreisel.digidip.net',
+'klick.affiliwelt.net',
+'klick.retailerweb.net',
+'klick4u.de',
+'klikklik.nl',
+'kliks.nl',
+'kliktrek.com',
+'klipmart.forbes.com',
+'kliptracker.com',
+'klix.cz',
+'klu02.voluumtrk.com',
+'klxik.voluumtrk.com',
+'kmechte.justclick.ru',
+'kmfrk.voluumtrk.com',
+'kmylvwo5.com',
+'knalo.voluumtrk.com',
+'knigge.webtrekk.net',
+'knnomeuaustringer.review',
+'kochava.com',
+'kohls.tt.omtrdc.net',
+'komoona.com',
+'kondratev.popunder.ru',
+'kontaktanzeigen-fotos.de',
+'kontera.com',
+'koocash.com',
+'kople.voluumtrk.com',
+'kosoft-ads.com',
+'kostenloseanzeigen.momentblick.de',
+'kpcrw.voluumtrk.com',
+'kpdxchvxydeepest.review',
+'kpe75.voluumtrk.com',
+'kpicentral.com',
+'kqqfxfortlets.review',
+'kqram.voluumtrk.com',
+'kr-adimage.lycos.co.kr',
+'krafteurope.112.2o7.net',
+'kraftfoodseurope.d3.sc.omtrdc.net',
+'kraken-measurements.s3.amazonaws.com',
+'kreapixel.go2cloud.org',
+'kristinaaza.justclick.ru',
+'krj9b.redirectvoluum.com',
+'krone.oewabox.at',
+'kropka.tro.pl',
+'krwxs.voluumtrk.com',
+'kryptobanners.com',
+'kscrudiscepted.review',
+'kstmnfmdaphilologue.review',
+'kszmp.voluumtrk.com',
+'ktmoh.voluumtrk.com',
+'ktu.sv2.biz',
+'ktxtkvolitient.review',
+'kuchebraska.com',
+'kudika.2cnt.net',
+'kuhuz.voluumtrk.com',
+'kuivt.voluumtrk.com',
+'kulinar.justclick.ru',
+'kulxc.voluumtrk.com',
+'kunal3291.ibprofits.cpa.clicksure.com',
+'kundenserver.de',
+'kvjwu.voluumtrk.com',
+'kvsge.voluumtrk.com',
+'kvvadrat.net',
+'ky6oi.voluumtrk.com',
+'ky9ab.voluumtrk.com',
+'kyg.go2cloud.org',
+'kyuhd.voluumtrk.com',
+'kzhav.voluumtrk.com',
+'kzyrg.voluumtrk.com',
+'l.5min.com',
+'l.advertstream.com',
+'l.adxcore.com',
+'l.betrad.com',
+'l.deals.ebay.com',
+'l.deindeal.ch',
+'l.gamespot.com',
+'l.longtailvideo.com',
+'l.lp4.io',
+'l.mail-backcountry.com',
+'l.mail-steepandcheap.com',
+'l.moapi.net',
+'l.mydirtyhobby.com',
+'l.myxcz.com',
+'l.ooyala.com',
+'l.player.ooyala.com',
+'l.popin.cc',
+'l.sharethis.com',
+'l.zeroredirect.com',
+'l.zeroredirect1.com',
+'l.zeroredirect2.com',
+'l1.zedo.com',
+'l2.zedo.com',
+'l3egp.voluumtrk.com',
+'l4vt1.voluumtrk.com',
+'l5.zedo.com',
+'l69or.voluumtrk.com',
+'l6kjl.voluumtrk.com',
+'l9wne.voluumtrk.com',
+'la-chi.outbrain.com',
+'la1w1.salesforceliveagent.com',
+'lab.atdmt.com',
+'labelfind01.webtrekk.net',
+'laboutique.go2affise.com',
+'lacodeworks.com',
+'lacquerersdfnkejwkz.download',
+'ladbrokesaffiliates.com.au',
+'lads.myspacecdn.com',
+'lai.go2cloud.org',
+'laih.com',
+'laminarianxvdcl.download',
+'landing.adhall.com',
+'landing.appia.com',
+'landing.parkplatzkartei.com',
+'landing.seek2.com',
+'landing.trafficz.com',
+'landingpagegenius.com',
+'landscaping.srv123.com',
+'lapescuit.2cnt.net',
+'lapoo.net',
+'latest-460050.ebeda.info',
+'latest-461069.dochyedu.info',
+'latest-470741.takyake.ru',
+'latinoreview.us.intellitxt.com',
+'lau1.slot.union.ucweb.com',
+'launch1.co',
+'launchbit.com',
+'launchermsg.3g.cn',
+'laurel.macrovision.com',
+'lavoce.justclick.ru',
+'lax1.ib.adnxs.com',
+'laxnws.112.2o7.net',
+'laxprs.112.2o7.net',
+'laxpsd.112.2o7.net',
+'laxwht.122.2o7.net',
+'layer-ad.org',
+'layer-ads.de',
+'layer.dhg-marketing.de',
+'layer.interactivespot.net',
+'layer.lima-city.de',
+'layerads.ero-advertising.com',
+'layers.ero-advertising.com',
+'layers.yontoo.com',
+'layout1.realtracker.com',
+'lb-adserver.ig.com.br',
+'lb.apicit.net',
+'lb.statsevent.com',
+'lb.trellian.com',
+'lb.usemaxserver.de',
+'lb.webovernet.com',
+'lbhf.logo-net.co.uk',
+'lbkkq.voluumtrk.com',
+'lbn.ru',
+'lbs.justclick.ru',
+'lbtel.voluumtrk.com',
+'lc-pay.com',
+'lc.iadvize.com',
+'lcc64.voluumtrk.com',
+'lcs.livedoor.net',
+'lcs.naver.com',
+'ld.you2mail.com',
+'lddthjbooboos.review',
+'ldglob01.adtech.fr',
+'ldglob02.adtech.fr',
+'ldimage01.adtech.fr',
+'ldimage02.adtech.fr',
+'ldserv01.adtech.fr',
+'ldserv02.adtech.fr',
+'lead.adsender.us',
+'leadads.go2jump.org',
+'leadback.advertising.com',
+'leadbolt.com',
+'leadclick.com',
+'leadcrunch.com',
+'leader.linkexchange.net',
+'leadfactory.go2cloud.org',
+'leadformix.com',
+'leadgid.go2cloud.org',
+'leadhound.com',
+'leadhug.go2cloud.org',
+'leadim.go2cloud.org',
+'leadin.adspirit.de',
+'leadingedgecash.com',
+'leadintelligence.co.uk',
+'leadlander.com',
+'leadmobi.en.alibaba.com',
+'leadparadise.go2cloud.org',
+'leadperformanceltd.go2cloud.org',
+'leads.383media.com',
+'leads.ohecampus.com',
+'leadtrackgo.com',
+'leadtracking.plumvoice.com',
+'leapfind.com',
+'learn.doubleclick.net',
+'leastsuuhyh.download',
+'leave.exacttarget.com',
+'lecternxqlgvbl.download',
+'legacylabs.go2cloud.org',
+'legitfreecounters.com',
+'legkokstroinosti.justclick.ru',
+'lego.112.207.net',
+'lenovo.demdex.net',
+'lenovo.tt.omtrdc.net',
+'lerelais.com',
+'letssearch.com',
+'lettre.research-int.fr',
+'level.turboads.de',
+'level3com.d2.sc.omtrdc.net',
+'levexis.com',
+'lexa3maus.justclick.ru',
+'lfbot.voluumtrk.com',
+'lfiofptxserows.review',
+'lfstmedia.com',
+'lg.brandreachsys.com',
+'lhcep.voluumtrk.com',
+'lhgqc.voluumtrk.com',
+'lib.trafit.com',
+'lib1.libstat.com',
+'libie.justclick.ru',
+'libs.coremetrics.com',
+'libstat.com',
+'license20121011.getjar.com',
+'liczniki.org',
+'lidl.adspirit.de',
+'life-in-travels.justclick.ru',
+'lifetoyou.justclick.ru',
+'lift.openx.com',
+'liftopia.go2cloud.org',
+'ligatus.com',
+'lightboxanalytics-53675.onmodulus.net',
+'lightedpages.com',
+'lijit.com',
+'likebtn.com',
+'liktirov.com',
+'limelightovp3.creatorcloud.netdna-cdn.com',
+'limitlessoffers.go2cloud.org',
+'limmaocijq.download',
+'linicom.co.il',
+'link.ac',
+'link.alviboard.com',
+'link.alvicut.com',
+'link.alvifly.com',
+'link.alvilink.com',
+'link.alvilite.com',
+'link.alvinewss.com',
+'link.alviopen.com',
+'link.alvisoftt.com',
+'link.ananboard.com',
+'link.ananroot.com',
+'link.anansky.com',
+'link.belati.net',
+'link.connectoffer.com',
+'link.email.dynect.net',
+'link.huffingtonpost.com',
+'link.informer.com',
+'link.mercent.com',
+'link.net',
+'link.offrerenouveau.fr',
+'link.openfile.fr',
+'link.p0.com',
+'link.pcspeedup.com',
+'link.profitreload.com',
+'link.safecart.com',
+'link.sysmail.fr',
+'link4link.com',
+'link4u.de',
+'linkads.de',
+'linkbuddies.com',
+'linkconnector.com',
+'linkcounter.com',
+'linkdex.go2cloud.org',
+'linkexchange.lk.net',
+'linkexchange.net',
+'linkexchange.nl',
+'linkexchange.org',
+'linklog.blogflux.com',
+'linknavi1.com',
+'linkopp.com',
+'linkprice.com',
+'linkpuls.idg.no',
+'linkreferral.com',
+'links.freeones.com',
+'links.outster.com',
+'links.services.disqus.com',
+'links.xxxcounter.com',
+'linkshare.com',
+'linksmile.com',
+'linksponsor.com',
+'linksredirect.com',
+'linkswaper.com',
+'linktarget.com',
+'linktrack.bravenet.com',
+'linktrackerinc.go2cloud.org',
+'linkwithin.com',
+'linkwords.net',
+'linkxchanger.com',
+'linkxchanger.info',
+'linkybank.com',
+'linuxpark.adtech.fr',
+'liquidad.narrowcastmedia.com',
+'liqwid.net',
+'list.ilius.net',
+'list.ru',
+'list2.bravenet.com',
+'listbot.com',
+'listenloop.com',
+'lisyn.voluumtrk.com',
+'litiumo.com',
+'live-cams-1.livejasmin.com',
+'live.chartboost.com',
+'live.ec2.cxo.name',
+'live.logaholic.com',
+'live.rads.msn.com',
+'live.sekindo.com',
+'live1.logaholic.com',
+'live2.logaholic.com',
+'live3s.me',
+'liveadexchanger.com',
+'liveadvert.com',
+'livecams.nl',
+'livechat.s3.amazonaws.com',
+'livecounter.dk',
+'liveinternet.ru',
+'livejasmin.com',
+'livepass.conviva.com',
+'liveprivates.com',
+'livere.co.kr',
+'livere.co.kr.cizion.ixcloud.net',
+'liversely.com',
+'livesearchnow.com',
+'liveserver.com',
+'livesexasian.com',
+'livesharepersonals.com',
+'livestat.com',
+'livestat.derstandard.at',
+'livestats.la7.tv',
+'livestats.matrix.it',
+'livetechnology.com',
+'livetracker.martinoticias.org',
+'livetracker.radiosawa.us',
+'liveviewer.ez.no',
+'ljostrade.go2cloud.org',
+'ljteas.com',
+'ljujm.voluumtrk.com',
+'lkqd.net',
+'lli.org',
+'llivedotcom.2cnt.net',
+'llivedotcomtest.2cnt.net',
+'lllezpalebucks.review',
+'llnwop-eu.cedexis.com',
+'lloogg.com',
+'llyebbsouthpaws.review',
+'lm.visualware.com',
+'lm5.spyc.biz',
+'lmcd.us.intellitxt.com',
+'lmdemo.netmining.com',
+'lmimi.snfie.com',
+'lmjgo.voluumtrk.com',
+'lmlttrack.com',
+'lnkgo.com',
+'lnkgt.com',
+'lnkxfer8.com',
+'lnwns.voluumtrk.com',
+'lnx.lu',
+'load.exelator.com',
+'load.instinctiveads.com',
+'load.sumome.com',
+'loader.engage.gsfn.us',
+'loadeu.exelator.com',
+'loading1.widdit.com',
+'loadm.exelator.com',
+'loadus.exelator.com',
+'loanlinks.com',
+'loanpush.com',
+'lobstersctero.download',
+'loc1.hitsprocessor.com',
+'local.ads.nwsource.com',
+'localads-statistics.maps.me',
+'localads.maps.me',
+'localmantra.com',
+'localmediabuying.com',
+'localytics.com',
+'log.adap.tv',
+'log.advista.no',
+'log.amitshah.net',
+'log.btopenworld.com',
+'log.chartbeat.com',
+'log.data.disney.com',
+'log.dmtry.com',
+'log.formr.io',
+'log.gemscool.com',
+'log.go.com',
+'log.hiiir.com',
+'log.ideamelt.com',
+'log.idnes.cz',
+'log.incredibar-search.com',
+'log.ioam.de',
+'log.itworld.com',
+'log.kieskeurig.nl',
+'log.kukuplay.com',
+'log.kuwo.cn',
+'log.mmstat.com',
+'log.netgeography.net',
+'log.newsvine.com',
+'log.nexgen.neustar.biz',
+'log.omiga-plus.com',
+'log.opentracker.net',
+'log.optimizely.com',
+'log.outbrain.com',
+'log.paulbetts.org',
+'log.pinterest.com',
+'log.streamagent.sensic.net',
+'log.suchen.de',
+'log.superweb.ws',
+'log.tapatalk.com',
+'log.trafic.ro',
+'log.user-clicks.com',
+'log.vdn.apps.cntv.cn',
+'log.viva.co.id',
+'log.wilmaa.com',
+'log.worldsoft-cms.info',
+'log.xiti.com',
+'log000.goo.ne.jp',
+'log10.doubleverify.com',
+'loga.hit-parade.com',
+'loga.xiti.com',
+'logc1.xiti.com',
+'logc10.xiti.com',
+'logc110.xiti.com',
+'logc127.xiti.com',
+'logc13.xiti.com',
+'logc132.xiti.com',
+'logc135.xiti.com',
+'logc147.xiti.com',
+'logc148.xiti.com',
+'logc153.xiti.com',
+'logc156.xiti.com',
+'logc168.xiti.com',
+'logc172.xiti.com',
+'logc174.xiti.com',
+'logc175.xiti.com',
+'logc183.xiti.com',
+'logc194.xiti.com',
+'logc199.xiti.com',
+'logc2.xiti.com',
+'logc204.xiti.com',
+'logc205.xiti.com',
+'logc206.xiti.com',
+'logc209.xiti.com',
+'logc215.xiti.com',
+'logc23.xiti.com',
+'logc239.xiti.com',
+'logc240.xiti.com',
+'logc246.xiti.com',
+'logc269.xiti.com',
+'logc278.xiti.com',
+'logc281.xiti.com',
+'logc286.xiti.com',
+'logc35.xiti.com',
+'logc4.xiti.com',
+'logc5.xiti.com',
+'logc57.xiti.com',
+'logc8.xiti.com',
+'logc9.xiti.com',
+'logentries.com',
+'logger-01.vty.dailymotion.com',
+'logger-02.vty.dailymotion.com',
+'logger-03.vty.dailymotion.com',
+'logger-04.vty.dailymotion.com',
+'logger-05.vty.dailymotion.com',
+'logger-06.vty.dailymotion.com',
+'logger.co.kr',
+'logger.tlvmedia.com',
+'logging.ourstats.de',
+'logging.wilmaa.com',
+'logging03.wxs.nl',
+'loggingapi.spingo.com',
+'logi.xiti.com',
+'logi1.xiti.com',
+'logi2.xiti.com',
+'logi241.xiti.com',
+'logi3.xiti.com',
+'logi6.xiti.com',
+'logi7.xiti.com',
+'login.adition.com',
+'login.affluentco.com',
+'login.campaignmonitor.com',
+'login.dotomi.com',
+'loginlog.sdo.com',
+'logiq.go2cloud.org',
+'loglady.publicbroadcasting.net',
+'lognormal.net',
+'logo-net.co.uk',
+'logp.hit-parade.com',
+'logp.xiti.com',
+'logp2.xiti.com',
+'logp3.xiti.com',
+'logp4.xiti.com',
+'logp5.xiti.com',
+'logp6.xiti.com',
+'logp7.xiti.com',
+'logp8.xiti.com',
+'logp9.xiti.com',
+'logs-01.loggly.com',
+'logs.51cto.com',
+'logs.dashlane.com',
+'logs.eresmas.com',
+'logs.eternityco.net',
+'logs.infoaxe.com',
+'logs.libuv.org',
+'logs.naukri.com',
+'logs.nodejs.org',
+'logs.ovh.net',
+'logs.sofaware.com',
+'logs.www.eresmas.com',
+'logs.xiti.com',
+'logs.zedo.com',
+'logs11.xiti.com',
+'logs1204.xiti.com',
+'logs1241.xiti.com',
+'logs1242.xiti.com',
+'logs1281.xiti.com',
+'logs13.xiti.com',
+'logs1400.xiti.com',
+'logs1403.xiti.com',
+'logs2.xiti.com',
+'logs3.xiti.com',
+'logs4.xiti.com',
+'logs5.xiti.com',
+'logs6.xiti.com',
+'logs8.xiti.com',
+'logstat.caixin.com',
+'logtest.moatads.com',
+'logv1.xiti.com',
+'logv10.xiti.com',
+'logv11.xiti.com',
+'logv12.xiti.com',
+'logv13.xiti.com',
+'logv14.xiti.com',
+'logv15.xiti.com',
+'logv16.xiti.com',
+'logv17.xiti.com',
+'logv18.xiti.com',
+'logv19.xiti.com',
+'logv2.xiti.com',
+'logv20.xiti.com',
+'logv21.xiti.com',
+'logv25.xiti.com',
+'logv27.xiti.com',
+'logv3.xiti.com',
+'logv4.xiti.com',
+'logv5.xiti.com',
+'logv6.xiti.com',
+'logv7.xiti.com',
+'logv8.xiti.com',
+'logv9.xiti.com',
+'logyd.voluumtrk.com',
+'lokhlp.com',
+'lokipodi.com',
+'lolfun.com',
+'lon.telefonica.bench.cedexis.com',
+'londonprivaterentals.standard.co.uk',
+'look2me.com',
+'lookest.win',
+'looksa.com',
+'looksmart.com',
+'looky.hyves.org',
+'loopme.biz',
+'loopme.me',
+'lootcrate.go2cloud.org',
+'los.go2cloud.org',
+'losbs.voluumtrk.com',
+'losii.voluumtrk.com',
+'lostwebtracker.com',
+'lotame.com',
+'lotame.nexac.com',
+'loudgames.com',
+'lovecam.com.br',
+'loved-by.s3.amazonaws.com',
+'lovehoney.peerius.com',
+'lowndestdhlpcpo.download',
+'loxtk.com',
+'lp.amateurcommunity.com',
+'lp.babbel.com',
+'lp.bigfarm.goodgamestudios.com',
+'lp.empire.goodgamestudios.com',
+'lp.funtapps.com',
+'lp.koramgame.com',
+'lp.longtailvideo.com',
+'lp.mp.mydas.mobi',
+'lp.mydas.mobi',
+'lp.plan-q-secret.com',
+'lp.sekindo.co.il',
+'lp.stargames.com',
+'lp.webgame.web.id',
+'lpm-20minutes.nuggad.net',
+'lptag.liveperson.net',
+'lpvzq.voluumtrk.com',
+'lqckn.voluumtrk.com',
+'lqhoy.voluumtrk.com',
+'lqipx.voluumtrk.com',
+'lrpush.apxlv.com',
+'lrpush.cogocast.net',
+'lrrtslskippers.review',
+'lrzxk.voluumtrk.com',
+'ls.ezakus.net',
+'lsawards.com',
+'lsegt.voluumtrk.com',
+'lslfrhpqarechating.review',
+'lslmetrics.djlmgdigital.com',
+'lsut8.voluumtrk.com',
+'lt.andomedia.com',
+'lt.c.appier.net',
+'lt.retargeter.com',
+'ltassrv.com.s3.amazonaws.com',
+'ltljm.voluumtrk.com',
+'ltur.112.2o7.net',
+'lucky.netmng.com',
+'luckyorange.com',
+'lumdf.voluumtrk.com',
+'luminate.com',
+'lummeslwusp.download',
+'lunametrics.wpengine.netdna-cdn.com',
+'lunarads.com',
+'lunho.com',
+'lup5z.voluumtrk.com',
+'luu.lightquartrate.com',
+'luvianetwork.hasoffers.com',
+'lvler.voluumtrk.com',
+'lvtxg.voluumtrk.com',
+'lw1.cdmediaworld.com',
+'lwfmc.voluumtrk.com',
+'lwken.com',
+'lxa6d.voluumtrk.com',
+'lxpwv.voluumtrk.com',
+'lyaxz.voluumtrk.com',
+'lycos-eu.imrworldwide.com',
+'lyikl.voluumtrk.com',
+'lysoft.go2cloud.org',
+'lyyy6.voluumtrk.com',
+'lzukp.voluumtrk.com',
+'m.2mdn.net',
+'m.ad6media.fr',
+'m.addthis.com',
+'m.addthisedge.com',
+'m.adnxs.com',
+'m.adsymptotic.com',
+'m.adtc.daum.net',
+'m.ajxqiongbg.com',
+'m.astrokolik.com',
+'m.awesometracker.com',
+'m.banner.linksynergy.com',
+'m.banner.t-online.de',
+'m.benaughty.com',
+'m.burt.io',
+'m.chartbeat.com',
+'m.doubleclick.com',
+'m.doubleclick.net',
+'m.duba.net',
+'m.exactag.com',
+'m.exovueplatform.com',
+'m.friendlyduck.com',
+'m.leadbolt.com',
+'m.livejasmin.com',
+'m.loading-content.net',
+'m.matdm.com',
+'m.mirmay.com',
+'m.mobilerevenu.com',
+'m.porntourfr.3818.idhad.com',
+'m.quantcount.com',
+'m.quantserve.com',
+'m.sancdn.net',
+'m.servebom.com',
+'m.shopathome.com',
+'m.trb.com',
+'m.tribalfusion.com',
+'m.trk44.mobi',
+'m.tstore.co.kr',
+'m.wankz.com',
+'m.wrating.com',
+'m.xcams.com',
+'m.xp1.ru4.com',
+'m.xvideos.fr',
+'m.zeroredirect.com',
+'m.zeroredirect1.com',
+'m.zeroredirect2.com',
+'m08hh.voluumtrk.com',
+'m0zl8.voluumtrk.com',
+'m1.2mdn.net',
+'m1.webstats4u.com',
+'m1e.net',
+'m1fzj.trackvoluum.com',
+'m2.webstats.motigo.com',
+'m2d.m2.ai',
+'m2m1.inner-active.mobi',
+'m3.usnews.com',
+'m3.webstats.motigo.com',
+'m3jok.voluumtrk.com',
+'m4.webstats.motigo.com',
+'m4.zedo.com',
+'m43fw.voluumtrk.com',
+'m4n.nl',
+'m5.webstats.motigo.com',
+'m6.webstats.motigo.com',
+'m62-genreal.com',
+'m7.webstats.motigo.com',
+'m8.webstats.motigo.com',
+'m9.webstats.motigo.com',
+'m9qi1.voluumtrk.com',
+'m9zzz.survey7.adsservingtwig.xyz',
+'ma.tinyflashlight.com',
+'ma156-r.analytics.edgesuite.net',
+'ma180-r.analytics.edgekey.net',
+'ma180-r.analytics.edgesuite.net',
+'ma277-r.analytics.edgesuite.net',
+'ma728-r.analytics.edgekey.net',
+'ma9jh.voluumtrk.com',
+'maarentkeaels.download',
+'mabping.chartbeat.net',
+'mad2.brandreachsys.com',
+'madadsmedia.com',
+'madas-ads.securest.org',
+'madbidcom.go2cloud.org',
+'madblast.com',
+'madclient.uimserv.net',
+'madisonlogic.com',
+'madmax53.stellar.cpa.clicksure.com',
+'madmimi.com',
+'madnet.ru',
+'mads.amazon-adsystem.com',
+'mads.at.atwola.com',
+'mads.bz',
+'mads.cnet.com',
+'mads.com.com',
+'mads.zdnet.com',
+'madserve.org',
+'madsone.com',
+'madsuk.aol.com',
+'madsuk.at.atwola.com',
+'maeas.voluumtrk.com',
+'maedge.com',
+'magentanews.com',
+'magicads.nl',
+'magicfuture.go2cloud.org',
+'magicmail.co.nz',
+'magicmail.createsend.com',
+'magifirst.com',
+'magnify360-cdn.s3.amazonaws.com',
+'mahuaswcspi.download',
+'mail-to-a-friend.com',
+'mail.adsender.us',
+'mail.yeahmobi.com',
+'mail.zedo.com',
+'mail1.surf-town.net',
+'mail2.doublepimp.com',
+'mail2.surf-town.net',
+'mail3.surf-town.net',
+'mail4.surf-town.net',
+'mail5.surf-town.net',
+'mail6.surf-town.net',
+'mail7.surf-town.net',
+'mailb1.surf-town.net',
+'mailb2.surf-town.net',
+'mailb3.surf-town.net',
+'mailderef.web.de',
+'mailer.livejasmin.com',
+'mailer.p1ne.com',
+'mailinb1.surf-town.net',
+'mailmenrkgzquz.download',
+'mailout1.surf-town.net',
+'mailout2.surf-town.net',
+'mailoutb1.surf-town.net',
+'mailserver.247media.net',
+'mailtrack.io',
+'mailtrack.me',
+'main.abqjournal.netdna-cdn.com',
+'main.atdmt.com',
+'main.exdynsrv.com',
+'main.exoclick.com',
+'main.exosrv.com',
+'majintetley.bravejournal.com',
+'majoringmcaiynfa.download',
+'makemoneyonline.2yu.in',
+'makersfile.com',
+'mako.checkm8.com',
+'malachite.bnex.com',
+'manage001.adtech.fr',
+'manager.koocash.fr',
+'mandolinefchscpmft.download',
+'manuelu.com',
+'manwin.doublepimp.com',
+'map.adsniper.ru',
+'map.media6degrees.com',
+'map.pop6.com',
+'map.popunderz.com',
+'map.sddan.com',
+'map1.adsniper.ru',
+'map2.adsniper.ru',
+'mapi.tapreason.com',
+'maple-team.com',
+'maps.netster.com',
+'mapstats.blogflux.com',
+'marble.bnex.com',
+'market.oicdn.com',
+'market.trafficpimps.com',
+'marketbrowser.com',
+'marketconnect.go2cloud.org',
+'marketgid.com',
+'markethealth.go2cloud.org',
+'marketing-issue.com',
+'marketing.888.com',
+'marketing.com',
+'marketing.external.xerox.com',
+'marketing.gamesload.de',
+'marketing.ghosterymktg.com',
+'marketing.kalahari.net',
+'marketing.nyi.com',
+'marketing.nyi.net',
+'marketing.openoffice.org',
+'marketing.vistaprint.com',
+'marketingsecrets.com',
+'marketingtips.com',
+'marketingwithpostcards.com',
+'marketingx.com',
+'marketleverage.go2cloud.org',
+'marketo.com',
+'marketplace.trafficjunky.net',
+'marketsource.com',
+'marketsurveys.com',
+'marsoffset.goforandroid.com',
+'mashasedgwick.digidip.net',
+'mass-traffic.com',
+'massetersspaeu.download',
+'massmerchandise.com',
+'masterh1.adriver.ru',
+'masterh2.adriver.ru',
+'masterh3.adriver.ru',
+'masterh4.adriver.ru',
+'masterh5.adriver.ru',
+'masterh6.adriver.ru',
+'masterstats.com',
+'mastertag.effiliation.com',
+'masterzonex.com',
+'mata.ero-advertising.com',
+'match.admailtiser.com',
+'match.adsrvr.org',
+'matchbin-assets.s3.amazonaws.com',
+'matchbin.com',
+'matchetbpvgzvo.download',
+'material.mediav.com',
+'mathtag.com',
+'matomy.adk2.co',
+'matomy.com',
+'matomygroup.com',
+'matomymail.com',
+'matomymarket.com',
+'matomymax.com',
+'matomymedia.com',
+'matomymediagroup.com',
+'matomymobile.com',
+'mattiz.justclick.ru',
+'mature.xxxcounter.com',
+'maturescam.com',
+'mauleadltd.go2cloud.org',
+'maverickmedia.go2cloud.org',
+'maxbounty.com',
+'maxcash.com',
+'maxgelir.go2cloud.org',
+'maximumcash.com',
+'maxspeedcdn.com',
+'maxtrust.ru',
+'maxvr.112.2o7.net',
+'mayrondigital.go2affise.com',
+'mazda-com-tw.b.appier.net',
+'mb.datingadzone.com',
+'mb.gammae.com',
+'mb.hockeybuzz.com',
+'mb.marathonbet.com',
+'mb.zam.com',
+'mb01.com',
+'mb104.com',
+'mb871.voluumtrk.com',
+'mbixuxsfeoutfields.review',
+'mbjqc.voluumtrk.com',
+'mbotvisit.com',
+'mbox12.offermatica.com',
+'mbox12e.offermatica.com',
+'mbox3.offermatica.com',
+'mbox4.offermatica.com',
+'mbox5.offermatica.com',
+'mbox6.offermatica.com',
+'mbox9.offermatica.com',
+'mbox9e.offermatica.com',
+'mbs.spankwirecams.com',
+'mbs.youjizzlive.com',
+'mc.yandex.ru',
+'mcafee12.tt.omtrdc.net',
+'mcc.godaddy.com',
+'mcityadslink.com',
+'mckygschalalled.review',
+'mclient.ivwbox.de',
+'mclient2.ivwbox.de',
+'mcmads.mediacapital.pt',
+'mcmoby.go2cloud.org',
+'mcp8f.voluumtrk.com',
+'mcpaz.voluumtrk.com',
+'mcpvkhoven.review',
+'mcs.delvenetworks.com',
+'mcssl.com',
+'mctracking.go2cloud.org',
+'mdamarillo.112.2o7.net',
+'mdataroom.com',
+'mdjacksonville.112.2o7.net',
+'mdlinx.app4.hubspot.com',
+'mdmserver.mobidia.com',
+'mdn1.phluantmobile.net',
+'mdn2.phluantmobile.net',
+'mdn3.phluantmobile.net',
+'mdn3origin.phluantmobile.net',
+'mdqc2.voluumtrk.com',
+'mdwjuneau.122.2o7.net',
+'me-cdn.effectivemeasure.net',
+'measurementaz.com',
+'mechtayte.justclick.ru',
+'meclabs.go2cloud.org',
+'medbroadcast.112.2o7.net',
+'media-0.vpptechnologies.com',
+'media-1.vpptechnologies.com',
+'media-4.vpptechnologies.com',
+'media-5.vpptechnologies.com',
+'media-6.vpptechnologies.com',
+'media-a.vpptechnologies.com',
+'media-adrunner.mycomputer.com',
+'media-b.vpptechnologies.com',
+'media-c.vpptechnologies.com',
+'media-clic.com',
+'media-code.info',
+'media-d.vpptechnologies.com',
+'media-delivery.armorgames.com',
+'media-e.vpptechnologies.com',
+'media-f.vpptechnologies.com',
+'media-mc-adrunner.mycomputer.com',
+'media-mgmt.armorgames.com',
+'media.adlegend.com',
+'media.admob.com',
+'media.adrevolver.com',
+'media.alphaload.com',
+'media.brandreachsys.com',
+'media.campartner.com',
+'media.carpediem.fr',
+'media.contextweb.com',
+'media.curse.com',
+'media.datingpartner.com',
+'media.doublepimp.com',
+'media.email-match.com',
+'media.exchange-it.com',
+'media.fastclick.net',
+'media.fc2.com',
+'media.flixfacts.com',
+'media.ftv-publicite.fr',
+'media.funpic.de',
+'media.gameduell.de',
+'media.gan-online.com',
+'media.go2app.org',
+'media.go2speed.org',
+'media.gsimedia.net',
+'media.hasoffers.com',
+'media.justad.mobi',
+'media.l3.cdn.adbucks.com',
+'media.likes.com',
+'media.livepromotools.com',
+'media.match.com',
+'media.mgnetwork.com',
+'media.mobileapptracking.com',
+'media.mobilerevenu.com',
+'media.mobpartner.mobi',
+'media.monster.com',
+'media.mybet.com',
+'media.mydas.mobi',
+'media.mykocam.com',
+'media.mykodial.com',
+'media.net',
+'media.onlineteachers.co.in',
+'media.onlinewelten.com',
+'media.origin.doublepimp.com',
+'media.pointroll.com',
+'media.popuptraffic.com',
+'media.richrelevance.com',
+'media.salemwebnetwork.com',
+'media.snowball.com',
+'media.superstats.com',
+'media.syracuse.com',
+'media.tipjunkie.com',
+'media.trafficfactory.biz',
+'media.trafficjunky.net',
+'media.ym0.net',
+'media1.adsoftware.com',
+'media2.carpediem.fr',
+'media4.fc2.com',
+'media970.com',
+'mediaantics.go2cloud.org',
+'mediabistro.112.2o7.net',
+'mediabreakaway.com',
+'mediabuilder.com',
+'mediacampaign.org',
+'mediadomain.com',
+'mediaforce.com',
+'mediageneral.com',
+'mediahorizons.com',
+'medialand.ru',
+'mediamath.com',
+'mediametrics.mpsa.com',
+'mediamgr.ugo.com',
+'mediamind.com',
+'median.hu',
+'medianyx.go2cloud.org',
+'mediaplazza.com',
+'mediaplex.com',
+'mediaroi.go2cloud.org',
+'mediascale.de',
+'mediaserver.bwinpartypartners.com',
+'mediaservices-d.openxenterprise.com',
+'mediasheva.com',
+'mediastay.go2cloud.org',
+'mediasuite.multicastmedia.com',
+'mediation.adnxs.com',
+'mediatisedevkrumfkc.download',
+'mediatotal.ads.visionweb.no',
+'mediavisor.doubleclick.net',
+'mediawhirl.net',
+'mediaxds.go2affise.com',
+'mediciinternet.go2cloud.org',
+'medicinenet.us.intellitxt.com',
+'medleyads.com',
+'meethotties.mobi',
+'meetupdev.122.2o7.net',
+'megacash.warpnet.com.br',
+'megacounter.de',
+'megafriends.com',
+'megalithusa.com',
+'megapopads.com',
+'megastore.bnex.com',
+'melanitesmuawsxxw.download',
+'mellowads.com',
+'meltingpoint.com',
+'meltwater.com',
+'meltwaternews.com',
+'member.clicksor.com',
+'members.applifier.com',
+'members.cj.com',
+'members.homecareersearch.com',
+'members.livejasmin.com',
+'members.swimsuitnetwork.com',
+'members.us.homecareersearch.com',
+'memopumpkin.com',
+'memorablesix.com',
+'menato.ru',
+'meraad2.blogspot.com',
+'meraxes-cdn.polarmobile.com',
+'merchant.com',
+'merchant.linksynergy.com',
+'merchant.myofferpal.com',
+'merchant.wgiftcard.com',
+'meshbean.com',
+'mesia.com',
+'meta.7search.com',
+'meta.streamcloud.eu',
+'metacount.com',
+'metal.ovh',
+'metalliselwgtj.download',
+'metartmoney.met-art.com',
+'meter.2cnt.net',
+'metopesjdsrau.download',
+'metric.federalnewsradio.com',
+'metric.ind.rediff.com',
+'metric.inetcore.com',
+'metric.timewarnercable.com',
+'metrica.yandex.by',
+'metrica.yandex.com',
+'metrica.yandex.com.tr',
+'metrica.yandex.com.ua',
+'metrica.yandex.kz',
+'metrica.yandex.ru',
+'metrica.yandex.ua',
+'metricology.com',
+'metrics.active.com',
+'metrics.ambient-platform.com',
+'metrics.apple.com',
+'metrics.att.com',
+'metrics.brightcove.com',
+'metrics.cnn.com',
+'metrics.comcast.com',
+'metrics.directv.com',
+'metrics.ee.co.uk',
+'metrics.feedroom.com',
+'metrics.fifa.com',
+'metrics.mcafee.com',
+'metrics.mmailhost.com',
+'metrics.payback.de',
+'metrics.premiereradio.net',
+'metrics.raptr.com',
+'metrics.responsetap.com',
+'metrics.ryanair.com',
+'metrics.scribblelive.com',
+'metrics.seenon.com',
+'metrics.sourceforge.net',
+'metrics.ted.com',
+'metrics.upcload.com',
+'metrics.veryfunnyads.com',
+'metrics.wikinvest.com',
+'metrics.zales.com',
+'metricskey.net',
+'metrika.yandex.by',
+'metrika.yandex.com',
+'metrika.yandex.com.tr',
+'metrika.yandex.com.ua',
+'metrika.yandex.kz',
+'metrika.yandex.ru',
+'metrika.yandex.ua',
+'metrixlablw.customers.luna.net',
+'mfeed.newzfind.com',
+'mftp.linksynergy.com',
+'mg.dt00.net',
+'mg.dt07.net',
+'mg.mgid.com',
+'mgage.com',
+'mgbhr.voluumtrk.com',
+'mgcash.com',
+'mgcashgate.com',
+'mgid.com',
+'mgjournalnow.112.2o7.net',
+'mgnjmsxycosta.review',
+'mgtbo.112.2o7.net',
+'mgtimesdispatch.112.2o7.net',
+'mgutu.voluumtrk.com',
+'mgwnct.112.2o7.net',
+'mgwsls.112.2o7.net',
+'mgxqs.voluumtrk.com',
+'mha4c.voluumtrk.com',
+'mi-web10.prod.millennialmedia.com',
+'mi-web11.prod.millennialmedia.com',
+'mi-web12.prod.millennialmedia.com',
+'mi-web13.prod.millennialmedia.com',
+'mi-web14.prod.millennialmedia.com',
+'mi-web15.prod.millennialmedia.com',
+'mi-web16.prod.millennialmedia.com',
+'mi-web17.prod.millennialmedia.com',
+'mi-web18.prod.millennialmedia.com',
+'mi-web19.prod.millennialmedia.com',
+'mi-web20.prod.millennialmedia.com',
+'mi-web21.prod.millennialmedia.com',
+'mi-web22.prod.millennialmedia.com',
+'mi-web23.prod.millennialmedia.com',
+'mi-web24.prod.millennialmedia.com',
+'mi-web25.prod.millennialmedia.com',
+'mi-web26.prod.millennialmedia.com',
+'mi-web27.prod.millennialmedia.com',
+'mi-web28.prod.millennialmedia.com',
+'mi-web29.prod.millennialmedia.com',
+'mi-web30.prod.millennialmedia.com',
+'mi-web31.prod.millennialmedia.com',
+'mi-web32.prod.millennialmedia.com',
+'mi-web33.prod.millennialmedia.com',
+'mi-web35.prod.millennialmedia.com',
+'mi-web36.prod.millennialmedia.com',
+'mi-web37.prod.millennialmedia.com',
+'mi-web38.prod.millennialmedia.com',
+'mi-web39.prod.millennialmedia.com',
+'mi-web40.prod.millennialmedia.com',
+'mi-web41.prod.millennialmedia.com',
+'mi-web42.prod.millennialmedia.com',
+'mi-web43.prod.millennialmedia.com',
+'mi.adinterax.com',
+'mi.gdt.qq.com',
+'miami.ero-advertising.com',
+'micro.marketo.com',
+'microad.net',
+'microreporting.metrofrance.com',
+'microreporting.metronews.ru',
+'microreporting.publimetro.cl',
+'microsoft-watch.us.intellitxt.com',
+'microsofteup.112.2o7.net',
+'microsoftgamestudio.112.2o7.net',
+'microsoftwga.112.2o7.net',
+'microsoftwindows.112.2o7.net',
+'microstatic.pl',
+'microstocker.justclick.ru',
+'microticker.com',
+'midar.112.2o7.net',
+'middleware.adition.com',
+'middlewaredev.adition.com',
+'midsen.112.2o7.net',
+'midwayjfpvbvwuy.download',
+'migpay.com',
+'migrantsyyorzkm.download',
+'miildoos.ru',
+'milesaway.oracle.cpa.clicksure.com',
+'milira.justclick.ru',
+'millennialmedia.com',
+'millennyadv.go2cloud.org',
+'million.francite.com',
+'millionaire.go2cloud.org',
+'milliremsfpscyd.download',
+'milparota.com',
+'mim.io',
+'mimage.opentext.com',
+'mimg-snv.mediaplex.com',
+'minimusespdjglnek.download',
+'mintake.com',
+'miov5.voluumtrk.com',
+'mirgadaniy.justclick.ru',
+'mirror1.surf-town.net',
+'mirror3.filefacts.com',
+'mirrorad.com',
+'misbfskterrellas.review',
+'miss-wellness.justclick.ru',
+'missuitzyvtjtq.download',
+'mixadvert.com',
+'mixpanel.com',
+'mixrank.go2cloud.org',
+'mjgxsidsixes.review',
+'mjjjr.voluumtrk.com',
+'mjov7.voluumtrk.com',
+'mjvns.voluumtrk.com',
+'mjx.ads.nwsource.com',
+'mkgcp.voluumtrk.com',
+'mkgod.voluumtrk.com',
+'mkin4.voluumtrk.com',
+'mkonyvjesnorkelled.review',
+'mktg.actonsoftware.com',
+'mkto-k0029.com',
+'ml314.com',
+'ml8m.com',
+'mlbglobal.112.2o7.net',
+'mlinktracker.com',
+'mlook.mcdstorage.com',
+'mlvrp.voluumtrk.com',
+'mlweb.dmlab.hu',
+'mm.777-partner.com',
+'mm.777-partners.net',
+'mm.chitika.net',
+'mmftpf.com',
+'mmi.bemobile.ua',
+'mmnetwork.mobi',
+'mmotraffic.com',
+'mmtracking.com',
+'mmtrkdb.com',
+'mmtrkmc.com',
+'mnetads.com',
+'mnetads.net',
+'mngiangibabest.112.2o7.net',
+'mngidmn.112.2o7.net',
+'mngirockymtnnews.112.2o7.net',
+'mngislctrib.112.2o7.net',
+'mntr.babcdn.com',
+'moadnet.com',
+'moba8.net',
+'mobadoo.go2affise.com',
+'mobads.baidu.com',
+'mobaloo.go2cloud.org',
+'mobavenue.go2affise.com',
+'mobbridge.mobpartner.mobi',
+'mobcdn.com',
+'mobco.go2affise.com',
+'mobday.com',
+'mobfox.com',
+'mobhero.com',
+'mobi-mobi.info',
+'mobi.mobijo.tv',
+'mobi.pornhubpremium.com',
+'mobi.yanosik.pl',
+'mobiads.ru',
+'mobiadtrk.com',
+'mobiaffiliatenetwork.go2cloud.org',
+'mobidia.com',
+'mobidiscover.go2affise.com',
+'mobilda.com',
+'mobile-abc.com',
+'mobile-ads.wifog.com',
+'mobile-collector.newrelic.com',
+'mobile-ent.biz',
+'mobile.adfarm1.adition.com',
+'mobile.adnxs.com',
+'mobile.banzai.it',
+'mobile.biz.daum.net',
+'mobile.juicyads.com',
+'mobile.traffic-tracker.net',
+'mobile18.in.com',
+'mobileactive.com',
+'mobileads.ero-advertising.com',
+'mobileads.mobilebanner.net',
+'mobileads.msn.com',
+'mobileadvertisinghub.com',
+'mobileapptracking.com',
+'mobilecollege.go2cloud.org',
+'mobileconspiracy.go2cloud.org',
+'mobilecore.com',
+'mobiledl.adboe.com',
+'mobilemetrics.appspot.com',
+'mobilemovie.bitterstrawberry.com',
+'mobileposse.com',
+'mobilestorm.com',
+'mobiletest.2cnt.net',
+'mobiletest2.2cnt.net',
+'mobiletheory.com',
+'mobileweb.api.airpush.com',
+'mobilitysite.us.intellitxt.com',
+'mobilogia.go2affise.com',
+'mobiplay.go2affise.com',
+'mobireckon.go2affise.com',
+'mobirushhour.com',
+'mobisense.go2affise.com',
+'mobisystems.com',
+'mobitracker.info',
+'mobivity.com',
+'mobix.a.bukugames.net',
+'mobixell.com',
+'mobl-apps.com',
+'mobooka.go2cloud.org',
+'mobooka.hasoffers.com',
+'mobpartner.com',
+'mobpartner.mobi',
+'mobsonic.go2affise.com',
+'mobstac.com',
+'mobtions.go2affise.com',
+'mobvid.mobi',
+'mobvista.go2cloud.org',
+'mobwall.mobpartner.com',
+'mobyt.com',
+'moceanmobile.com',
+'modbm.voluumtrk.com',
+'modelatos.com',
+'modemspeedbooster.com',
+'moderninstalls.go2cloud.org',
+'mofox.com',
+'mogofinance.go2affise.com',
+'mogreet.com',
+'mojiva.com',
+'mojiva2-13fc.kxcdn.com',
+'mojofarm.mediaplex.com',
+'mojoworks.mediaplex.com',
+'mojoworks.snv.mediaplex.com',
+'mokono.com',
+'mom.freelogs.com',
+'momomall-com-tw.b.appier.net',
+'momoshop-com-tw.b.appier.net',
+'mon.0f8.cdnfarm18.com',
+'mon.2os.cdnfarm18.com',
+'mon.2yf.cdnfarm18.com',
+'mon.cdnfarm18.com',
+'mondainefpjwdelvr.download',
+'mondrian.twyn.com',
+'monetisetrk.co.uk',
+'monetisetrk1.co.uk',
+'monetisetrk2.co.uk',
+'monetisetrk3.co.uk',
+'monetisetrk4.co.uk',
+'monetisetrk5.co.uk',
+'monetisetrk6.co.uk',
+'monetisevideo.com',
+'monetize.applift.com',
+'monetizemore.com',
+'monetizeplus.go2affise.com',
+'money--bux2013.justclick.ru',
+'money.2cnt.net',
+'money4exit.de',
+'moneyempire.go2cloud.org',
+'moneymakercdn.com',
+'moneyup.justclick.ru',
+'mongoosemetrics.com',
+'monitor-old.adition.com',
+'monitor.adition.com',
+'monitor.applift.com',
+'monitor.econda-monitor.de',
+'monitor.stage.adition.com',
+'monitor.yigao.com',
+'monster.gostats.com',
+'monsterpops.com',
+'monteyxnmhx.download',
+'moo.go2cloud.org',
+'moradu.com',
+'more-games.creative-mobile.com',
+'morehitserver.com',
+'moreover.com',
+'morgweb.ivwbox.de',
+'mos.com',
+'mosaic.bnex.com',
+'mostawesomeoffers.com',
+'mostcash.com',
+'motifcdn2.doubleclick.net',
+'motionhits.com',
+'motor-talk.digidip.net',
+'motorads.go2affise.com',
+'motormarket.com',
+'motorsport-total.de.intellitxt.com',
+'motorward.us.intellitxt.com',
+'mottcp.go2affise.com',
+'mottnow.adk2x.com',
+'mountainbike.digidip.net',
+'mousselinehkhnrrnlq.download',
+'movieads.ero-advertising.com',
+'moviepulp.eu',
+'movise.site',
+'mowburnsexrzvcbvq.download',
+'mozo-widgets.f2.com.au',
+'mozoo.com',
+'mp-success.com',
+'mp.apmebf.com',
+'mp.clicksor.net',
+'mp.piano-media.com',
+'mp.twitch.tv',
+'mpm.payback.de',
+'mpn-analytics.mokonocdn.com',
+'mpp.vindicosuite.com',
+'mpp2.vindicosuite.com',
+'mproxy.banner.linksynergy.com',
+'mprptrk.com',
+'mpsnare.iesnare.com',
+'mq98e.voluumtrk.com',
+'mqo7a.voluumtrk.com',
+'mqot2.voluumtrk.com',
+'mqs.ioam.de',
+'mracqblihahas.review',
+'mrapq.voluumtrk.com',
+'mrchewy.go2cloud.org',
+'mrhcyagrouchily.review',
+'mridangastrtki.download',
+'mrktrecord3.com',
+'mrskin.netmng.com',
+'mrtg.hitbox.com',
+'mrwjy.voluumtrk.com',
+'ms-links.com',
+'ms49r.voluumtrk.com',
+'msbmopod.vo.llnwd.net',
+'msdbb1.surf-town.net',
+'msdbb2.surf-town.net',
+'msdbi1.surf-town.net',
+'msft.demdex.net',
+'msgui.go2cloud.org',
+'msimg.com',
+'msjil.voluumtrk.com',
+'msn.rce.veeseo.com',
+'msnaccountservices.112.2o7.net',
+'msnbc.112.2o7.net',
+'msnbcom.112.2o7.net',
+'msnhome.com',
+'msnhomepage.com',
+'msninviteprod.112.2o7.net',
+'msnlivefavorites.112.2o7.net',
+'msnnetwork.com',
+'msnportal.112.2o7.net',
+'msnportalent.112.2o7.net',
+'msnportalhome.112.2o7.net',
+'msnportalprivacy.112.2o7.net',
+'msnservices.112.2o7.net',
+'msntest.serving-sys.com',
+'msntrademarketing.112.2o7.net',
+'msnwinonecare.112.2o7.net',
+'mssqladmin.surf-town.net',
+'mswgaprod.112.2o7.net',
+'mswtg.voluumtrk.com',
+'msxml.webcrawler.com',
+'mt.sellingrealestatemalta.com',
+'mtburn.com',
+'mtburn.jp',
+'mtcount.channeladvisor.com',
+'mtkzz.survey7.adsservingtwig.xyz',
+'mto.mediatakeout.com',
+'mtrc1.digital-metric.com',
+'mtree.com',
+'mtrx.go.sonobi.com',
+'mts.mansion.com',
+'mtsd9.voluumtrk.com',
+'mttwtrack.com',
+'mtvn.demdex.net',
+'mtvnetworks.tt.omtrdc.net',
+'muas4.voluumtrk.com',
+'muchmarketing.go2cloud.org',
+'muesq.voluumtrk.com',
+'mujilora.com',
+'multi.xnxx.com',
+'multicounter.de',
+'multimania.com',
+'munaluchibridal.munaluchibridema.netdna-cdn.com',
+'munchkin.marketo.net',
+'muntussejbnk.download',
+'muricatedhslitves.download',
+'musculahq.appspot.com',
+'musecdn.businesscatalyst.com',
+'musiccounter.ru',
+'muv.famousintactswitch.com',
+'mv6we.voluumtrk.com',
+'mvakbserenates.review',
+'mvexg.voluumtrk.com',
+'mvldn.voluumtrk.com',
+'mvpxv.voluumtrk.com',
+'mwc.velti.com',
+'mx.adserver.yahoo.com',
+'mx.ero-advertising.com',
+'mx1.revsci.net',
+'mx3ih.voluumtrk.com',
+'mxmacromedia.112.2o7.net',
+'my-etracker.com',
+'my-linker.com',
+'my.applifier.com',
+'my.blueadvertise.com',
+'my.hellobar.com',
+'my.mobfox.com',
+'my.omniture.com',
+'my.plexapp.com',
+'my.skyhookwireless.com',
+'myad.no',
+'myadmarket.com',
+'myads.newads.com',
+'myadserve.s3-website-us-east-1.amazonaws.com',
+'myadvertisingpays.com',
+'myaffiliateads.com',
+'myaffiliateprogram.com',
+'mybb.ero-advertising.com',
+'mybip.go2cloud.org',
+'mycams.com',
+'mycdn.media.net',
+'mychannelvip2.netscape.com',
+'mycomputer.superstats.com',
+'mycounter.com.ua',
+'mycoupons.com',
+'mycpaads.go2cloud.org',
+'mydas.mobi',
+'mydas.mobi.hostlogr.com',
+'mydas.mobi.visualizetraffic.com',
+'mydb1.surf-town.net',
+'mydb2.surf-town.net',
+'mydb3.surf-town.net',
+'mydb4.surf-town.net',
+'mydbb1.surf-town.net',
+'mydbb2.surf-town.net',
+'mydbc1.surf-town.net',
+'mydress-com-tw.b.appier.net',
+'myetracker.com',
+'myfamilyancestry.112.2o7.net',
+'myfamilysurvival.net',
+'myfavoritegames.us.intellitxt.com',
+'mygosecure.com',
+'myiframe.com',
+'myimagetracking.com',
+'mylistenetwork.go2cloud.org',
+'mylottoadserv.com',
+'myns-v1.websys.aol.com',
+'myosotisvkrzovi.download',
+'mypoints.com',
+'mypopup.ir',
+'mypowermall.com',
+'myscoop-tracking.googlecode.com',
+'myscreen.com',
+'myseostats.com',
+'mysite.com',
+'mysmartprice.go2cloud.org',
+'mysnoringsolution.go2cloud.org',
+'mytds.pr.vc',
+'mytiwi.com',
+'mytogolinks.com',
+'mytrafficbuilder.info',
+'mytrannycams.com',
+'myvacationguide.com',
+'mywebstats.com.au',
+'mz28ismn.com',
+'mzadx.go2affise.com',
+'mzqtm.voluumtrk.com',
+'mzrvi.voluumtrk.com',
+'n-tv.de.intellitxt.com',
+'n-tv.met.vgwort.de',
+'n.bodybuilding.com',
+'n.fclick-adnow.com',
+'n.gemini.yahoo.com',
+'n.ladycash.ru',
+'n.lcads.ru',
+'n.pay-click.ru',
+'n.popclck.org',
+'n.targetdtracker.com',
+'n.zeroredirect.com',
+'n.zeroredirect1.com',
+'n.zeroredirect2.com',
+'n0cgi.distributed.net',
+'n1.nedstatbasic.net',
+'n21o1.voluumtrk.com',
+'n24mobse.nuggad.net',
+'n2m1z.voluumtrk.com',
+'n32o1.voluumtrk.com',
+'n388hkxg.com',
+'n3hps.voluumtrk.com',
+'n3qcp.voluumtrk.com',
+'n4052ad.doubleclick.net',
+'n4403ad.doubleclick.net',
+'n479ad.doubleclick.net',
+'n4p.ru.redtram.com',
+'n60adserv.com',
+'n63adserv.com',
+'n64adserv.com',
+'n65adserv.com',
+'n69.com',
+'n69adserv.com',
+'n72adserv.com',
+'n79adserv.com',
+'n7yk4.voluumtrk.com',
+'n99adshostnet.com',
+'na-sjn.marketo.com',
+'nagios.adition.com',
+'naj.sk',
+'nam11.voluumtrk.com',
+'namestation.tenderapp.com',
+'namitol.com',
+'nandp.go2cloud.org',
+'nanigans.com',
+'nannyingeuzcxae.download',
+'nanoadexchange.com',
+'nanostats.nanopress.it',
+'nappieseummiroso.download',
+'napster.searchwho.com',
+'naruko-com-tw.b.appier.net',
+'nastinessprndnz.download',
+'nastydollars.com',
+'nata.ero-advertising.com',
+'natgeoedit.112.2o7.net',
+'natgeoeditcom.112.2o7.net',
+'nationalpost.112.2o7.net',
+'native.ai',
+'native.sharethrough.com',
+'nativeads.com',
+'nativeadx.net',
+'nativitystones.go2cloud.org',
+'nats.hushmoney.com',
+'naviant.com',
+'navlog.channel4.com',
+'navrcholu.cz',
+'navteq.com',
+'naytev.global.ssl.fastly.net',
+'nazarabo.bitterstrawberry.com',
+'nb.myspace.com',
+'nbasic.sitestat.com',
+'nbimg.dt00.net',
+'nbjmp.com',
+'nbnkg.voluumtrk.com',
+'nbsmr.voluumtrk.com',
+'nc0vx.voluumtrk.com',
+'ncfae.voluumtrk.com',
+'ncmzm.voluumtrk.com',
+'nctymqrcplanular.review',
+'nczgs.voluumtrk.com',
+'ndirect.ppro.de',
+'ndjln.voluumtrk.com',
+'ndk38.voluumtrk.com',
+'ndparking.com',
+'ndwck.voluumtrk.com',
+'nearbyad.com',
+'neber.112.2o7.net',
+'neblotech.com',
+'ned.itv.com',
+'nedstat.co.uk',
+'nedstat.com',
+'nedstat.net',
+'nedstat.nl',
+'nedstatbasic.com',
+'nedstatbasic.net',
+'neemfmujqqz.download',
+'negmediaconsulting.go2cloud.org',
+'nei.hitbox.com',
+'neobux.com',
+'neocounter.neoworx-blog-tools.net',
+'neoseeker.us.intellitxt.com',
+'nesql.voluumtrk.com',
+'net-france.com',
+'net.29193.9215.302br.net',
+'net.29674.9239.302br.net',
+'net.35369.9265.302br.net',
+'net.44902.9339.302br.net',
+'net.44920.9339.302br.net',
+'net.49479.9362.302br.net',
+'net.57222.9406.302br.net',
+'net.57240.9406.302br.net',
+'netbanner.com',
+'netcomm.spinbox.net',
+'netcore.go2affise.com',
+'netcounter.de',
+'netdirect.nl',
+'netdna.cedexis.com',
+'netdna.reporo.net',
+'netezines.advertising.com',
+'netflow.go2cloud.org',
+'netfuerza.com',
+'netgeo.com',
+'nethit-free.nl',
+'netidentity.com',
+'netlinktrack.com',
+'netmarketeur.com',
+'netmarketing2004.com',
+'netmetrix.2cnt.net',
+'netmng.com',
+'netmx.wemfbox.ch',
+'netmxtst.wemfbox.ch',
+'netnames.com',
+'netperception.com',
+'netperceptions.com',
+'netpool.netbookia.net',
+'netprefs.com',
+'netreflector.com',
+'netremote.com',
+'netropa.com',
+'netrp.112.2o7.net',
+'netsalespl.go2cloud.org',
+'netscope.data.marktest.pt',
+'netsodawap.xtgem.com',
+'netspiderads2.indiatimes.com',
+'netstats-1.www.ibm.com',
+'netstats-2.www.ibm.com',
+'nettown.com',
+'netweather.accuweather.com',
+'network-a.bazaarvoice.com',
+'network.adbullion.com',
+'network.adjal.com',
+'network.adsmarket.com',
+'network.aptimus.com',
+'network.aufeminin.com',
+'network.bazaarvoice.com',
+'network.bemyapp.com',
+'network.bildderfrau.de',
+'network.gofeminin.de',
+'network.nocreditcard.net',
+'network.realmedia.com.19388.9117.302br.net',
+'network.sofeminine.co.uk',
+'network2.aufeminin.com',
+'network22.com',
+'networkadvertising.org',
+'networkcommerce.com',
+'networkpb.com',
+'networksolutionsaffiliates.com',
+'netzathleten-media.de',
+'netzathleten.net',
+'netzip.com',
+'netzwelt.digidip.net',
+'neueoz.ivwbox.de',
+'neutrinokhdii.download',
+'new.adition.com',
+'new.gtsads.com',
+'new.livejasmin.com',
+'newads.bangbros.com',
+'newadserver.interfree.it',
+'newbe122.homestead.com',
+'newbestsellers.justclick.ru',
+'newcomperformance.go2cloud.org',
+'newjobs.d1.sc.omtrdc.net',
+'newnet.qsrch.com',
+'newopenx.simplethings.de',
+'newpayload.yieldbuild.com',
+'newprose.bravejournal.com',
+'newrelic.com',
+'news-whistleout.s3.amazonaws.com',
+'news.duba.net',
+'news.idealmedia.com',
+'newsclicker.com',
+'newsletter.linkshare.com',
+'newsmaxfeednetwork.com',
+'newsnet.in.ua',
+'newsnetz.wemfbox.ch',
+'newspaperarchive.go2cloud.org',
+'newsroomsolsnkww.download',
+'newt1.adultadworld.com',
+'newt2.adultadworld.com',
+'newtopsites.com',
+'newusnews.justclick.ru',
+'newworldiq.com',
+'nexac.demdex.net',
+'nexage.com',
+'nextlevel.com',
+'nextmag.apx.appier.net',
+'nextmillennium.liqwid.net',
+'nextoptim.com',
+'nexus.adspirit.de',
+'nexus.ensighten.com',
+'nexusads.adspirit.de',
+'nexzenpro.go2cloud.org',
+'nfbal.trackvoluum.com',
+'nfm.optdiv.net',
+'nfs.visits.lt',
+'ng3.ads.warnerbros.com',
+'ngads.go.com',
+'ngbn.net',
+'ngludvfyaspiration.review',
+'ngohq.us.intellitxt.com',
+'ngxsx.voluumtrk.com',
+'nhhr6.voluumtrk.com',
+'nht-2.extreme-dm.com',
+'ni3.imlive.com',
+'ni8bd.voluumtrk.com',
+'nicotianavcajdyyq.download',
+'nid.timesink.com',
+'nidinternal.timesink.com',
+'nidtest.timesink.com',
+'nifvd.voluumtrk.com',
+'nihilistlhaeieykb.download',
+'niholaev.com',
+'nimdinb.com',
+'ninemsn.imrworldwide.com',
+'nip.net',
+'nitratedffwtprxdo.download',
+'nitroclicks.com',
+'nj.fo.startappservice.com',
+'njfy6.voluumtrk.com',
+'njump.youmobistein.com',
+'njwol.voluumtrk.com',
+'njyshuopawas.review',
+'nk.brandreachsys.com',
+'nkcache.brandreachsys.com',
+'nkf3i.voluumtrk.com',
+'nkqgy.voluumtrk.com',
+'nkyrh.voluumtrk.com',
+'nl.adserver.yahoo.com',
+'nl.count.worldstats.com',
+'nl.cqcounter.com',
+'nl.nedstatpro.com',
+'nl.nedstatpro.net',
+'nl.sitestat.com',
+'nl.topstat.com',
+'nl1.ero-advertising.com',
+'nl2.ero-advertising.com',
+'nlbanner.nl',
+'nlhra.voluumtrk.com',
+'nlrbucstales.review',
+'nltlgufalsies.review',
+'nm.netmng.com',
+'nmaio.voluumtrk.com',
+'nmanchorage.112.2o7.net',
+'nmcommancomedia.112.2o7.net',
+'nmeprod.122.2o7.net',
+'nmhiltonhead.112.2o7.net',
+'nmkawartha.112.2o7.net',
+'nmminneapolis.112.2o7.net',
+'nmmua.voluumtrk.com',
+'nmnandomedia.112.2o7.net',
+'nmqtp.voluumtrk.com',
+'nmraleigh.112.2o7.net',
+'nmsacramento.112.2o7.net',
+'nmt5m.voluumtrk.com',
+'nmtracking.netflix.com',
+'nmyork.112.2o7.net',
+'nn7la.voluumtrk.com',
+'nndxcyybailliage.review',
+'nners.ero-advertising.com',
+'nnfku.voluumtrk.com',
+'nnlb.go2cloud.org',
+'nno9c.voluumtrk.com',
+'no-stress.justclick.ru',
+'no.2.cqcounter.com',
+'no.adserver.yahoo.com',
+'nobinet.go2cloud.org',
+'noc.hitbox.com',
+'noc.luckyorange.com',
+'nodeposit.linktrackr.com',
+'nodes.ads-digitalkeys.com',
+'nodes.double6affiliation.com',
+'nodes.r66t.com',
+'nokby.voluumtrk.com',
+'nomen-est-omen.de',
+'nomogramsopptw.download',
+'nonames.tk',
+'noowho.com',
+'norc.go2cloud.org',
+'normalexchange.com',
+'northnetworks.go2cloud.org',
+'notebooksbilliger02.webtrekk.net',
+'nova.dice.net',
+'novascotianetworks.go2cloud.org',
+'novellcom.112.2o7.net',
+'novostimira.biz',
+'now.eloqua.com',
+'nowlucky.go2cloud.org',
+'np.lexity.com',
+'npdor.go2cloud.org',
+'npoyv.voluumtrk.com',
+'npvnf.voluumtrk.com',
+'npvos.com',
+'nqi5j.voluumtrk.com',
+'nr.taboola.com',
+'nrgdigital.checkm8.com',
+'nrsadrefects.review',
+'nry5r.voluumtrk.com',
+'ns.2cnt.net',
+'ns.ivwbox.de',
+'ns.mediaplex.com',
+'ns.rvmkitt.com',
+'ns.valueclick.com',
+'ns1.123go.net',
+'ns1.247media.com',
+'ns1.carmunity.de',
+'ns1.datapipe.net',
+'ns1.hitbox.com',
+'ns1.hitx.net',
+'ns1.iad.cimedia.net',
+'ns1.ivwbox.de',
+'ns1.lighthost.com',
+'ns1.livetechnology.com',
+'ns1.maximumhost.com',
+'ns1.metacount.com',
+'ns1.netster.net',
+'ns1.sfj.pnap.net',
+'ns1.skyhookwireless.com',
+'ns1.sunrise.ch',
+'ns1.surf-town.net',
+'ns106.ehostpros.com',
+'ns2.123go.net',
+'ns2.2cnt.net',
+'ns2.boostservice.com',
+'ns2.datapipe.net',
+'ns2.livetechnology.com',
+'ns2.maximumhost.com',
+'ns2.mediaplex.com',
+'ns2.sellingsource.com',
+'ns2.sfj.pnap.net',
+'ns2.skyhookwireless.com',
+'ns2.surf-town.net',
+'ns2.w3open.com',
+'ns24i.voluumtrk.com',
+'ns3.adsender.us',
+'ns3.datapipe.net',
+'ns3.iad.cimedia.net',
+'ns3.ivwbox.de',
+'ns3.maximumhost.com',
+'ns3.mediaplex.com',
+'ns3.skyhookwireless.com',
+'ns3.surf-town.net',
+'ns4.ivwbox.de',
+'nsa.conviva.com',
+'nsa.lphbs.com',
+'nsclick.baidu.com',
+'nsmyk.voluumtrk.com',
+'nstracking.nonstopdelivery.com',
+'ntcompatible.us.intellitxt.com',
+'nteryield.jmp9.com',
+'nuadn.voluumtrk.com',
+'nub9r.maisonx.com',
+'nuera.go2cloud.org',
+'nuggad.net',
+'numb.hotshare.biz',
+'nurno.com',
+'nv.ad.naver.com',
+'nv4n8.voluumtrk.com',
+'nvk.realsecuredredirect.com',
+'nvmuh.voluumtrk.com',
+'nvtrak.com',
+'nvy.sharesix.com',
+'nw.ads.doko.jp',
+'nwidget.networkedblogs.com',
+'nws.naltis.com',
+'nwxpdqczwighting.review',
+'nwz.ivwbox.de',
+'nxa-ls.s3.amazonaws.com',
+'nxeso.voluumtrk.com',
+'nxmav.voluumtrk.com',
+'nxref.voluumtrk.com',
+'ny-only.outbrain.com',
+'ny1dm.voluumtrk.com',
+'nychi2.outbrain.com',
+'nydwc.voluumtrk.com',
+'nyhyz.voluumtrk.com',
+'nym1.ib.adnxs.com',
+'nym1.mobile.adnxs.com',
+'nym2.ib.adnxs.com',
+'nymcom.112.2o7.net',
+'nytadvertising.nytimes.com',
+'nytbglobe.112.2o7.net',
+'nytglobe.112.2o7.net',
+'nythglobe.112.2o7.net',
+'nytimesglobal.112.2o7.net',
+'nytimesnonsampled.112.2o7.net',
+'nytimesnoonsampled.112.2o7.net',
+'nytmembercenter.112.2o7.net',
+'nytrgadsden.112.2o7.net',
+'nytrlakeland.112.2o7.net',
+'nytrsantarosa.112.2o7.net',
+'nytrsarasota.112.2o7.net',
+'nytrwilmington.112.2o7.net',
+'nyttechnology.112.2o7.net',
+'nztv.prod.untd.com',
+'nzujq.voluumtrk.com',
+'o.addthis.com',
+'o.leadbolt.com',
+'o.sa.aol.com',
+'o.ss2.us',
+'o.swisscom.ch',
+'o.xbox.com',
+'o.yieldsquare.com',
+'o.zedo.com',
+'o.zeroredirect.com',
+'o.zeroredirect1.com',
+'o.zeroredirect2.com',
+'o0.winfuture.de',
+'o11cr.voluumtrk.com',
+'o1bxv.voluumtrk.com',
+'o1ghd.voluumtrk.com',
+'o1hak.voluumtrk.com',
+'o2onbusiness.de',
+'o3hll.voluumtrk.com',
+'o3ozt.voluumtrk.com',
+'o64x.voluumtrk.com',
+'o8yrg.voluumtrk.com',
+'oa4xu.voluumtrk.com',
+'oamtrk.com',
+'oaqkv.voluumtrk.com',
+'oas.alltforforaldrar.se',
+'oas.benchmark.fr',
+'oas.foxnews.com',
+'oas.hitbox.com',
+'oas.repubblica.it',
+'oas.roanoke.com',
+'oas.salon.com',
+'oas.toronto.com',
+'oas.uniontrib.com',
+'oas.villagevoice.com',
+'oas.wuv.de',
+'oasc-eu1.247realmedia.com',
+'oasc03012.247realmedia.com',
+'oasc03049.247realmedia.com',
+'oasc04012.247realmedia.com',
+'oasc05024.247realmedia.com',
+'oasc05050.247realmedia.com',
+'oasc05059.247realmedia.com',
+'oasc06006.247realmedia.com',
+'oasc07.citywire.co.uk',
+'oasc08006.247realmedia.com',
+'oasc08024.247realmedia.com',
+'oasc09.247realmedia.com',
+'oasc10.247realmedia.com',
+'oasc10006.247realmedia.com',
+'oasc11.247realmedia.com',
+'oasc12.247realmedia.com',
+'oasc14.247realmedia.com',
+'oasc15.247realmedia.com',
+'oasc16.247realmedia.com',
+'oasc17.247realmedia.com',
+'oasc18.247realmedia.com',
+'oasc18015.247realmedia.com',
+'oascentral.abclocal.go.com',
+'oascentral.adage.com',
+'oascentral.advanstar.com',
+'oascentral.appssavvy.com.23051.9155.302br.net',
+'oascentral.appssavvy.com.23053.9155.302br.net',
+'oascentral.appssavvy.com.23054.9155.302br.net',
+'oascentral.appssavvy.com.24908.9184.302br.net',
+'oascentral.appssavvy.com.24909.9184.302br.net',
+'oascentral.appssavvy.com.24910.9184.302br.net',
+'oascentral.appssavvy.com.24911.9184.302br.net',
+'oascentral.appssavvy.com.24912.9184.302br.net',
+'oascentral.appssavvy.com.31838.9155.302br.net',
+'oascentral.appssavvy.com.31839.9155.302br.net',
+'oascentral.blogher.org.10941.9030.302br.net',
+'oascentral.blogher.org.12468.9030.302br.net',
+'oascentral.blogher.org.12469.9030.302br.net',
+'oascentral.blogher.org.12470.9030.302br.net',
+'oascentral.blogher.org.12471.9030.302br.net',
+'oascentral.blogher.org.12472.9030.302br.net',
+'oascentral.blogher.org.12473.9030.302br.net',
+'oascentral.blogher.org.12474.9030.302br.net',
+'oascentral.blogher.org.12475.9030.302br.net',
+'oascentral.blogher.org.12476.9030.302br.net',
+'oascentral.blogher.org.12477.9030.302br.net',
+'oascentral.blogher.org.12478.9030.302br.net',
+'oascentral.blogher.org.12479.9030.302br.net',
+'oascentral.blogher.org.23017.9030.302br.net',
+'oascentral.businessweek.com',
+'oascentral.chicagobusiness.com',
+'oascentral.comcast.net',
+'oascentral.construction.com',
+'oascentral.crainsdetroit.com',
+'oascentral.dailybreeze.com',
+'oascentral.feedroom.com',
+'oascentral.fortunecity.com',
+'oascentral.mdlinx.com',
+'oascentral.newsmax.com',
+'oascentral.post-gazette.com',
+'oascentral.register.com',
+'oascentral.sina.com',
+'oascentral.tmcnet.com',
+'oascentral.villagevoice.com',
+'oascentral.washtimes.com',
+'oascentralnx.comcast.net',
+'oasde.springstreetnetworks.com',
+'oase00821.247realmedia.com',
+'oasis.411affiliates.ca',
+'oata.ero-advertising.com',
+'oatcakehcewr.download',
+'ob1trk.com',
+'obc99.voluumtrk.com',
+'obesw.com',
+'obgyn.us.intellitxt.com',
+'obi-at01.webtrekk.net',
+'obi-com01.webtrekk.net',
+'obi-de01.webtrekk.net',
+'obi-ru01.webtrekk.net',
+'objects.tremormedia.com',
+'observantsumzcl.download',
+'observer.ip-label.net',
+'obuchenie.justclick.ru',
+'oc-track.autonomycloud.com',
+'oc.umeng.com',
+'oc9e5.voluumtrk.com',
+'oca.telemetry.microsoft.com',
+'ocdn.adsterra.com',
+'oceango.net',
+'ocio.leadzu.com',
+'ocoym.voluumtrk.com',
+'ocpmb.voluumtrk.com',
+'ocs.websponsors.com',
+'ocybtztforth.review',
+'odb-chidc2.outbrain.com',
+'odb.outbrain.com',
+'odmdr.voluumtrk.com',
+'odttrilkocement.review',
+'odzb5nkp.com',
+'oehui.voluumtrk.com',
+'oekwa.voluumtrk.com',
+'oew7r.voluumtrk.com',
+'oewa.oewabox.at',
+'of3ga.voluumtrk.com',
+'offended.feenode.net',
+'offer.17bullets.com',
+'offer.alibaba.com',
+'offerannex.go2cloud.org',
+'offerdeliver.com',
+'offeredby.net',
+'offeroptimizer.com',
+'offers.appnext.com',
+'offers.avazuscd.net',
+'offers.bitbop.com',
+'offers.bycontext.com',
+'offers.keynote.com',
+'offerservice.go2cloud.org',
+'offersinternational.go2cloud.org',
+'offersquared.go2cloud.org',
+'offersquest.directtrack.com',
+'offerssyndication.appspot.com',
+'offervisionnetwork.go2cloud.org',
+'offerx.co.uk',
+'office.partnerearning.com',
+'offline.adsoftware.com',
+'offline.sanomaservices.nl',
+'og1rc.voluumtrk.com',
+'ogdocggdermas.review',
+'oggva.voluumtrk.com',
+'ogxtu.voluumtrk.com',
+'ohgipscavenging.review',
+'ohlone.vizu.com',
+'oi2cz.voluumtrk.com',
+'oimg.m.cnbc.com',
+'oimg.mobile.cnbc.com',
+'oin.valuead.com',
+'ojbrnmoowoold.review',
+'ojolink.com',
+'ojrq.net',
+'okohp.voluumtrk.com',
+'okpgn.voluumtrk.com',
+'okrg0.voluumtrk.com',
+'okstrade.go2affise.com',
+'ol14x.voluumtrk.com',
+'olddata.radarurl.com',
+'oleg71d.justclick.ru',
+'olegnekrom.justclick.ru',
+'oliver.adcenter.net',
+'olizyr.com',
+'om.cbsi.com',
+'omariev.justclick.ru',
+'omarsys.com',
+'omg247.us4.list-manage.com',
+'omg247.us4.list-manage1.com',
+'omg247.us4.list-manage2.com',
+'omg247.us5.list-manage1.com',
+'omg247.us5.list-manage2.com',
+'omkjd.voluumtrk.com',
+'omnaling.com',
+'omni.canadiantire.ca',
+'omni.holidaycheck.com',
+'omni.holidaycheck.de',
+'omniata.com',
+'omnistats.jetblue.com',
+'omniture.112.207.net',
+'omniture.112.2o7.net',
+'omniture.chip.de',
+'omniture.com',
+'omniture.eaeurope.eu',
+'omniture.mirror.co.uk',
+'omniture.scotiabank.com',
+'omns.americanexpress.com',
+'oms.digitaledienste.web.de',
+'omtrdc.net',
+'on-js.herokuapp.com',
+'on-mobi.com',
+'on.linkexchange.com',
+'on.maxspeedcdn.com',
+'onceux.unicornmedia.com',
+'onclickads.net',
+'onclickmax.com',
+'onclickrev.com',
+'onclkds.com',
+'oncqpdpmerosomes.review',
+'one-time-offer.com',
+'one.123counters.com',
+'oneandonlynetwork.com',
+'onedrive-collection.device.mobileengagement.windows.net',
+'onefeed.co.uk',
+'onelouder.com',
+'onenetworkdirect.net',
+'onepassnetwork.com',
+'onespot-tracking.herokuapp.com',
+'onestat.com',
+'onestatfree.com',
+'onet.hit.stat.pl',
+'online-dohod.justclick.ru',
+'online.adservicemedia.dk',
+'online.casinodelrio.com',
+'online.cnzz.com',
+'online.com',
+'online.qdigital.co.il',
+'online.winner.com',
+'online.winnerclub.com',
+'onlineads.magicvalley.com',
+'onlineboss.go2cloud.org',
+'onlineemailmarketing.com',
+'onlineindigoca.112.2o7.net',
+'onlinetraffic.info',
+'onlinewebfind.com',
+'onlinsport.2cnt.net',
+'onlysix.co.uk',
+'onmobile.com',
+'onshj.voluumtrk.com',
+'onwkmbhucalthaeas.review',
+'onyx.bnex.com',
+'oobqt.voluumtrk.com',
+'oofywoeynt.download',
+'ooredi.com',
+'op4g.go2cloud.org',
+'opads.ero-advertising.com',
+'opame.voluumtrk.com',
+'opap.co.kr',
+'open.ad.yieldmanager.net',
+'open.mkt1397.com',
+'open.vmdb.se',
+'openad.tf1.fr',
+'openad.travelnow.com',
+'openadserving.com',
+'opencms.adscale.de',
+'openmarket.com',
+'openstat.com',
+'openstat.net',
+'openstat.ru',
+'opentracker.net',
+'openvn.com',
+'openx.admailtiser.com',
+'openx.anonymouse.org',
+'openx.archerytalk.com',
+'openx.automation.com',
+'openx.cda.pl',
+'openx.cellulari.me',
+'openx.city-nav.com',
+'openx.com',
+'openx.datacenterknowledge.com',
+'openx.datacentermap.com',
+'openx.detik.com',
+'openx.financialpublishers.nl',
+'openx.gamereactor.dk',
+'openx.gen2server.com',
+'openx.gns.co.il',
+'openx.innogames.de',
+'openx.kasjauns.lv',
+'openx.net',
+'openx.org',
+'openx.pw',
+'openx.ricetteveloci.me',
+'openx.sales.e.fc2.com',
+'openx.sexsearch.com',
+'openx.sexsearchcom.com',
+'openx.socialsex.biz',
+'openx.tai.pl',
+'openx.tunisien.tn',
+'openx.wayfareinteractive.com',
+'openx.xxxbookcom.com',
+'openx.xxxconnect.com',
+'openx.yolau.net',
+'openx.yorkvillemarketing.com',
+'openx.youmeet.se',
+'openx4.emag.ro',
+'openxmedia.com',
+'opera1-servedby.advertising.com',
+'operatest.webtrekk.net',
+'operationfabulous.com',
+'ophan.guardian.co.uk',
+'ophan.theguardian.com',
+'opinionlab.com',
+'opinionlabcc.122.2o7.net',
+'opinions.research-interactive.com',
+'opportunity-tracking.com',
+'opqyo.voluumtrk.com',
+'opt-media.com',
+'opt-n.net',
+'opt.leadbolt.com',
+'opticalnetworks.com',
+'optimiser.trafficmansion.com',
+'optimize.indieclick.com',
+'optimize.webtrends.com',
+'optimized-by.rubiconproject.com',
+'optimized.by.vitalads.net',
+'optimizedby.rmxads.com',
+'optimizely.appspot.com',
+'optimizely.com',
+'optimizely.s3.amazonaws.com',
+'optimum-hits.com',
+'optimumadsmedia.go2cloud.org',
+'optin.webtrekk.net',
+'optiprofits.go2cloud.org',
+'optmd.com',
+'optout.2cnt.net',
+'optout.ad1.adfarm1.adition.com',
+'optout.ad2.adfarm1.adition.com',
+'optout.ad3.adfarm1.adition.com',
+'optout.ad4.adfarm1.adition.com',
+'optout.ad5.adfarm1.adition.com',
+'optout.ad6.adfarm1.adition.com',
+'optout.ad7.adfarm1.adition.com',
+'optout.ad8.adfarm1.adition.com',
+'optout.adfarm1.adition.com',
+'oqhdujtcharrier.review',
+'oqw9b.voluumtrk.com',
+'oqzwmbeliefs.review',
+'or3v3.voluumtrk.com',
+'oradestiri.2cnt.net',
+'orangesoda.com',
+'orangesoda.d2.sc.omtrdc.net',
+'orarala.com',
+'orbitscripts.com',
+'orbitz.tt.omtrdc.net',
+'orders.webpower.com',
+'orencia.pflexads.com',
+'orf.oewabox.at',
+'origin.privoy.doublepimp.com',
+'origin.zedo.com',
+'originade.clmbtech.com',
+'originadessl.clmbtech.com',
+'orion.bnex.com',
+'orlbh.voluumtrk.com',
+'orts.wixawin.com',
+'orw2k.voluumtrk.com',
+'os.bororeb.com',
+'os.filefactscdn.com',
+'os2.alcoholsoftcdn.com',
+'ospsweeps.brandmovers.net',
+'ot.ca-mpr.jp',
+'ot7od.voluumtrk.com',
+'otf.msn.com',
+'other.xxxcounter.com',
+'otherprofit.com',
+'otkyfxmassifs.review',
+'otmsrv.com',
+'otologistxyrdfmy.download',
+'otracking.com',
+'ots.optimize.webtrends.com',
+'ouah.com',
+'ouah.fr',
+'our.affiliatetracking.net',
+'ourdeal.go2cloud.org',
+'out-there-media.com',
+'out.paycounter.com',
+'out.popads.net',
+'outbrain.com',
+'outerpages.com',
+'outils.acf-webmaster.net',
+'outils.f5biz.com',
+'outlyingveburydd.download',
+'outpost.real.com',
+'output.nend.net',
+'outsidethebeltway.us.intellitxt.com',
+'outsolesevkcifol.download',
+'outspeaksisfjto.download',
+'outtalkedxtypmjjbh.download',
+'ov.yahoo.co.jp',
+'overawingksapsofy.download',
+'overely.com',
+'overpro.com',
+'overroastiklcrpyn.download',
+'oversee.d.chango.com',
+'oversee.net',
+'overstock.com.112.2o7.net',
+'overture.com',
+'overture.reporting.net',
+'ovhomes.com',
+'ovxvhtext.review',
+'owha.vancouverco.com',
+'owzdu.voluumtrk.com',
+'ox-d.247wallst.servedbyopenx.com',
+'ox-d.aa.com',
+'ox-d.addkt.servedbyopenx.com',
+'ox-d.adobe.com',
+'ox-d.ads.alliancehealth.com',
+'ox-d.aegdigitalgroup.com',
+'ox-d.alf.servedbyopenx.com',
+'ox-d.allday.servedbyopenx.com',
+'ox-d.answers.servedbyopenx.com',
+'ox-d.aopa.org',
+'ox-d.ask.servedbyopenx.com',
+'ox-d.babla.servedbyopenx.com',
+'ox-d.bbm.servedbyopenx.com',
+'ox-d.bbt.com',
+'ox-d.bizjournals.servedbyopenx.com',
+'ox-d.blogads.servedbyopenx.com',
+'ox-d.bnmedia.servedbyopenx.com',
+'ox-d.boston.servedbyopenx.com',
+'ox-d.broadway.com',
+'ox-d.cargurus.servedbyopenx.com',
+'ox-d.catholic.org',
+'ox-d.cbs.servedbyopenx.com',
+'ox-d.cbsi.servedbyopenx.com',
+'ox-d.cesarsway.com',
+'ox-d.chosun.servedbyopenx.com',
+'ox-d.consumed.servedbyopenx.com',
+'ox-d.coolmath.servedbyopenx.com',
+'ox-d.covers.com',
+'ox-d.curse.servedbyopenx.com',
+'ox-d.cyberagent.servedbyopenx.com',
+'ox-d.datacenterdynamics.com',
+'ox-d.diply.servedbyopenx.com',
+'ox-d.doucettemedia.com',
+'ox-d.ebayde.servedbyopenx.com',
+'ox-d.ebaydeb.servedbyopenx.com',
+'ox-d.evolvemedia.servedbyopenx.com',
+'ox-d.ezoic.servedbyopenx.com',
+'ox-d.fark.servedbyopenx.com',
+'ox-d.forbesbidder.servedbyopenx.com',
+'ox-d.futurenet.servedbyopenx.com',
+'ox-d.fwmedia.com',
+'ox-d.gamer-network.net',
+'ox-d.gatewaymedia.servedbyopenx.com',
+'ox-d.gloh.co.uk',
+'ox-d.greatergood.servedbyopenx.com',
+'ox-d.hatena.servedbyopenx.com',
+'ox-d.hearstmagazines.servedbyopenx.com',
+'ox-d.huddler.servedbyopenx.com',
+'ox-d.ibt.servedbyopenx.com',
+'ox-d.imgur.servedbyopenx.com',
+'ox-d.ink.servedbyopenx.com',
+'ox-d.intermarkets.net',
+'ox-d.internetbrands.servedbyopenx.com',
+'ox-d.interweave.com',
+'ox-d.journatic.com',
+'ox-d.jrn.com',
+'ox-d.ksl.servedbyopenx.com',
+'ox-d.kwick.servedbyopenx.com',
+'ox-d.leessp.servedbyopenx.com',
+'ox-d.m-market.servedbyopenx.com',
+'ox-d.mailonline.servedbyopenx.com',
+'ox-d.medianet.servedbyopenx.com',
+'ox-d.merriamwebster.servedbyopenx.com',
+'ox-d.mm1x.nl',
+'ox-d.mmaadnet.com',
+'ox-d.mods.pch.com',
+'ox-d.monetizationservices.servedbyopenx.com',
+'ox-d.monetizemore.servedbyopenx.com',
+'ox-d.mst.servedbyopenx.com',
+'ox-d.mylikes.servedbyopenx.com',
+'ox-d.nasdaq.servedbyopenx.com',
+'ox-d.nydailynews.servedbyopenx.com',
+'ox-d.openx.jp',
+'ox-d.os4m.servedbyopenx.com',
+'ox-d.oxjapan.servedbyopenx.com',
+'ox-d.pbhmedia.servedbyopenx.com',
+'ox-d.philly.servedbyopenx.com',
+'ox-d.pittpostgazette.servedbyopenx.com',
+'ox-d.playboy.servedbyopenx.com',
+'ox-d.publisherdesk.servedbyopenx.com',
+'ox-d.quebecor.servedbyopenx.com',
+'ox-d.ranker.servedbyopenx.com',
+'ox-d.realtor.servedbyopenx.com',
+'ox-d.rocketadserver.com',
+'ox-d.saygoodbuy.servedbyopenx.com',
+'ox-d.sbnationbidder.servedbyopenx.com',
+'ox-d.sinclair.servedbyopenx.com',
+'ox-d.skylikes.servedbyopenx.com',
+'ox-d.slader.servedbyopenx.com',
+'ox-d.sltrib.servedbyopenx.com',
+'ox-d.sm.servedbyopenx.com',
+'ox-d.socialknowledge.servedbyopenx.com',
+'ox-d.southwest.com',
+'ox-d.spanishdict.servedbyopenx.com',
+'ox-d.sparksnetworks.servedbyopenx.com',
+'ox-d.sporcle.servedbyopenx.com',
+'ox-d.startribune.servedbyopenx.com',
+'ox-d.technoratimedia.servedbyopenx.com',
+'ox-d.thechive.servedbyopenx.com',
+'ox-d.tmn.servedbyopenx.com',
+'ox-d.traffichub.ch',
+'ox-d.trulia.servedbyopenx.com',
+'ox-d.tunein.servedbyopenx.com',
+'ox-d.viumbe.servedbyopenx.com',
+'ox-d.warnerbros.servedbyopenx.com',
+'ox-d.weatherus.servedbyopenx.com',
+'ox-d.wetransfer.com',
+'ox-d.wikia.servedbyopenx.com',
+'ox-d.wikihow.servedbyopenx.com',
+'ox-d.wuv.servedbyopenx.com',
+'ox-d.yp.com',
+'ox-d.zergnet.servedbyopenx.com',
+'ox-i.ebayus.servedbyopenx.com',
+'ox-i.majorgeeks.com',
+'ox-i.mm1x.nl',
+'ox-i.quebecor.servedbyopenx.com',
+'ox-i.zam.com',
+'ox-socialimg.bidsystem.com',
+'ox-ui.amu.servedbyopenx.com',
+'ox-ui.ask.servedbyopenx.com',
+'ox-ui.ebayukb.servedbyopenx.com',
+'ox-ui.ebayus.servedbyopenx.com',
+'ox-ui.synacor.servedbyopenx.com',
+'ox-ui.usatodaysports.servedbyopenx.com',
+'ox-ui.wayfairssp.servedbyopenx.com',
+'ox.ac.onthehub.com',
+'ox.appnext.com',
+'ox.furaffinity.net',
+'ox.gassi-tv.de',
+'ox.gluu.org',
+'ox.indomediagroup.com',
+'ox.irv.si',
+'ox.mediabistro.com',
+'ox.mybroadband.co.za',
+'ox.pigu.lt',
+'ox.stardoll.com',
+'ox.videobuster.de',
+'oxado.com',
+'oxcash.com',
+'oxeey.voluumtrk.com',
+'oxen8.voluumtrk.com',
+'oxosurf.eu',
+'oxs1.selsin.net',
+'oylkc.voluumtrk.com',
+'oyvir.voluumtrk.com',
+'ozzhf.voluumtrk.com',
+'o_thus.ero-advertising.com',
+'p-bandai-hk.b.appier.net',
+'p.ace.advertising.com',
+'p.adpdx.com',
+'p.adsymptotic.com',
+'p.algovid.com',
+'p.ato.mx',
+'p.chango.com',
+'p.chartboost.com',
+'p.cpaoa.org',
+'p.cpx.to',
+'p.cpxinteractive.com',
+'p.ctasnet.com',
+'p.delivery.net',
+'p.errorception.com',
+'p.imgur.com',
+'p.l.qq.com',
+'p.medialytics.com',
+'p.nexac.com',
+'p.pagesjaunes.fr',
+'p.po.st',
+'p.pxl2015x1.com',
+'p.raasnet.com',
+'p.rfihub.com',
+'p.srv2trkk.com',
+'p.t-online.de',
+'p.tanx.com',
+'p.txtsrving.info',
+'p.typekit.net',
+'p.univide.com',
+'p.wntg2x.com',
+'p.yigao.com',
+'p.zeroredirect.com',
+'p.zeroredirect1.com',
+'p.zeroredirect2.com',
+'p1.tcr111.tynt.com',
+'p13n-int.herokuapp.com',
+'p13n-test.herokuapp.com',
+'p1tre.emv3.com',
+'p2-aahhyknavsj2m-wtnlrzkba6lht33q-if-v6exp3-v4.metric.gstatic.com',
+'p2-f6rp6piuxns4u-uzq4vp76bu3w2tso-if-v6exp3-v4.metric.gstatic.com',
+'p2-n3zurhre4jjvk-can5rb2f2a4urcxh-if-v6exp3-v4.metric.gstatic.com',
+'p2.adhitzads.com',
+'p2.wncit.com',
+'p2in2.voluumtrk.com',
+'p2tre.emv3.com',
+'p30download.ads.saba-e.com',
+'p30gp.voluumtrk.com',
+'p36jk.voluumtrk.com',
+'p3marketing.com',
+'p3tre.emv3.com',
+'p4-ajvwyt5lpjazy-us7r2dzqcjsqh7pt-164149-i1-v6exp3-v4.metric.gstatic.com',
+'p4-ajvwyt5lpjazy-us7r2dzqcjsqh7pt-164149-i2-v6exp3-ds.metric.gstatic.com',
+'p4-ajvwyt5lpjazy-us7r2dzqcjsqh7pt-164149-s1-v6exp3-v4.metric.gstatic.com',
+'p4-ajvwyt5lpjazy-us7r2dzqcjsqh7pt-if-v6exp3-v4.metric.gstatic.com',
+'p4iov.voluumtrk.com',
+'p4tre.emv3.com',
+'p5-lj5aujgj7jl7w-r2pmxqvndsgx2im2-931517-i1-v6exp3-v4.metric.gstatic.com',
+'p5-lj5aujgj7jl7w-r2pmxqvndsgx2im2-931517-i2-v6exp3-ds.metric.gstatic.com',
+'p5trc.emv2.com',
+'p5tre.emv3.com',
+'p6tre.emv3.com',
+'p7tre.emv3.com',
+'p8gqd.voluumtrk.com',
+'p8tre.emv3.com',
+'p96582.adskape.ru',
+'p9tre.emv3.com',
+'pa.advertising.veeseo.com',
+'pa.yahoo.com',
+'pads.adition.com',
+'pads.se',
+'pads1.go2cloud.org',
+'padsdel.cdnads.com',
+'padv.co.il',
+'pagead2.googleadservices.com',
+'pagead2.googlesyndication.com',
+'pagead46.l.doubleclick.net',
+'pagecount.com',
+'pagepeel.ero-advertising.com',
+'pages.appia.com',
+'pages.crittercism.com',
+'pages.expert-offers.com',
+'pages2.marketo.com',
+'pagvl.voluumtrk.com',
+'paid-work-at-home.com',
+'paid.outbrain.com',
+'paid2mobi.com',
+'paid4clicks.de',
+'pajpv.voluumtrk.com',
+'paletotseeyzubqr.download',
+'palimashop.com',
+'pamedia.com.au',
+'pan.conanpartners.com',
+'panachedesai.go2cloud.org',
+'panasonic-jp.b.appier.net',
+'pandaapp.us.intellitxt.com',
+'pandectxfszuufr.download',
+'panel-metrica.2cnt.net',
+'panel.ioam.de',
+'pangea-livetracker.rferl.org',
+'panisukharska.justclick.ru',
+'panther1.cpxinteractive.com',
+'panzermedia.go2cloud.org',
+'pap.zalando.de',
+'papayamobile.com',
+'papi.slideme.org',
+'paramount.go2cloud.org',
+'paranoicbarhuhw.download',
+'parenting.searchwho.com',
+'pareticpaypdtpq.download',
+'paris.typepad.com',
+'paritycube.go2cloud.org',
+'park.above.com',
+'parking.parklogic.com',
+'parkingcrew.net',
+'parradoodle.bravejournal.com',
+'parse.ly',
+'parship.co.uk',
+'partner-ads.com',
+'partner.ah-ha.com',
+'partner.applift.com',
+'partner.auxilis.de',
+'partner.bargaindomains.com',
+'partner.buzzcity.com',
+'partner.clubandmore.de',
+'partner.cynapse.com',
+'partner.dasoertliche-marketing.de',
+'partner.dhl.de',
+'partner.e-conomic.com',
+'partner.finline.ua',
+'partner.gewinnspiele.de',
+'partner.googleadservices.com',
+'partner.leguide.com',
+'partner.maxxim.de',
+'partner.monetizus.com',
+'partner.oboom.com',
+'partner.premiumdomains.com',
+'partner.privatbank.ua',
+'partner.share-online.biz',
+'partner.simplytel.de',
+'partner.stellenanzeigen.de',
+'partner.teufel.de',
+'partner.topcities.com',
+'partner.zangocash.com',
+'partner.zooplus.de',
+'partner1.whatsfind.com',
+'partner2profit.com',
+'partner6.linktrust.com',
+'partnerad.l.doubleclick.net',
+'partnerads.ysm.yahoo.com',
+'partnercash.com',
+'partnerprogramm.e-wie-einfach.de',
+'partners.adultadworld.com',
+'partners.affili24.com',
+'partners.bangbrosonline.com',
+'partners.betus.com',
+'partners.cltrda.com',
+'partners.cmptch.com',
+'partners.cotterweb.net',
+'partners.eatsmarter.de',
+'partners.keezmovies.com',
+'partners.pornerbros.com',
+'partners.rochen.com',
+'partners.sportingbet.com.au',
+'partners.trafficz.com',
+'partners.tremorhub.com',
+'partners.webmasterplan.com',
+'partners.webtrends.com',
+'partners.xpertmarket.com',
+'partners.yobt.com',
+'partners.yobt.tv',
+'pas.private4.com',
+'pass.duba.net',
+'passinst.com',
+'passport.pfn.bz',
+'pasta.dianxinos.com',
+'pastilon.com',
+'pata.ero-advertising.com',
+'patchwork.net',
+'patriothealth.go2cloud.org',
+'pavelbagryancev.justclick.ru',
+'pay-ads.com',
+'pay-to-promote.com',
+'paycount.com',
+'paycounter.com',
+'payload.yieldbuild.com',
+'paymonsters.biz',
+'payoom.go2cloud.org',
+'paypal.112.2o7.net',
+'paypal.adtag.where.com',
+'paypal.d1.sc.omtrdc.net',
+'paypalssl.doubleclick.net',
+'payperclick.co.il',
+'payperplay.voice2page.com',
+'paypersaleadvertising.com',
+'payserve.com',
+'pb.i.sogou.com',
+'pb.sogou.com',
+'pba39.inethoster.org',
+'pbc7m.voluumtrk.com',
+'pbid.pro-market.net',
+'pbm7t.voluumtrk.com',
+'pbnet.ru',
+'pbnwiecwfpaltrier.review',
+'pbtool.adition.com',
+'pcash.imlive.com',
+'pcastuces.fr.intellitxt.com',
+'pcdwh.voluumtrk.com',
+'pcgames.de.intellitxt.com',
+'pclick.europe.yahoo.com',
+'pclick.internal.yahoo.com',
+'pclick.yahoo.com',
+'pcmagazin.digidip.net',
+'pcmega.hasoffers.com',
+'pcookie.cnzz.com',
+'pcppu.voluumtrk.com',
+'pcsvy.voluumtrk.com',
+'pcsx9.voluumtrk.com',
+'pctipp.ch.intellitxt.com',
+'pctools.tt.omtrdc.net',
+'pctweu.vancouverco.com',
+'pd.justclick.ru',
+'pda.mv.bidsystem.com',
+'pde.lp4.io',
+'pdf.forbes.com',
+'pdn.applovin.com',
+'pdpdsromlaconical.review',
+'pdsqopgtdiphyodont.review',
+'pdt.tradedoubler.com',
+'peakclick.com',
+'peakcounter.dk',
+'pebble.bnex.com',
+'peekipaiw.com',
+'peerform.go2cloud.org',
+'peffk.voluumtrk.com',
+'pegasoweb.com',
+'peils.voluumtrk.com',
+'pejorationkgoibtbvp.download',
+'pencomputing.us.intellitxt.com',
+'penneroqqwnqz.download',
+'penton.us.intellitxt.com',
+'pentos-cdn.polarmobile.com',
+'people-group.su',
+'people.searchwho.com',
+'perf.mmstat.com',
+'perf.overture.com',
+'perfect-privacy.postaffiliatepro.com',
+'performance.affiliaxe.com',
+'performancerevenues.com',
+'performances.bestofmedia.com',
+'performercenter.livejasmin.com',
+'permissionmedia.com',
+'persevered.com',
+'persiangig.ads.saba-e.com',
+'persianstat.com',
+'perso0.free.fr',
+'personalcapital.go2cloud.org',
+'personalize.rapleaf.com',
+'personalreports.lexisnexis.com',
+'pezrphjl.com',
+'pf.tradedoubler.com',
+'pfead1.netway.at',
+'pfead2.netway.at',
+'pfead3.netway.at',
+'pfead4.netway.at',
+'pflexads.com',
+'pfpc.citygridmedia.com',
+'pfuv5.voluumtrk.com',
+'pfx9u.voluumtrk.com',
+'pgcxe.voluumtrk.com',
+'pgdb1.surf-town.net',
+'pgdbb1.surf-town.net',
+'pgmopcongruity.review',
+'ph-ad.focalink.com',
+'ph-ad01.focalink.com',
+'ph-ad02.focalink.com',
+'ph-ad03.focalink.com',
+'ph-ad04.focalink.com',
+'ph-ad05.focalink.com',
+'ph-ad06.focalink.com',
+'ph-ad07.focalink.com',
+'ph-ad08.focalink.com',
+'ph-ad09.focalink.com',
+'ph-ad10.focalink.com',
+'ph-ad11.focalink.com',
+'ph-ad12.focalink.com',
+'ph-ad13.focalink.com',
+'ph-ad14.focalink.com',
+'ph-ad15.focalink.com',
+'ph-ad16.focalink.com',
+'ph-ad17.focalink.com',
+'ph-ad18.focalink.com',
+'ph-ad19.focalink.com',
+'ph-ad20.focalink.com',
+'ph-ad21.focalink.com',
+'ph-ad23.focalink.com',
+'ph.affinity.com',
+'phenomcrm.com',
+'phg.hitbox.com',
+'philipselectronicsne.tt.omtrdc.net',
+'phizzle.com',
+'phluant.com',
+'phmgtrfqxreesting.review',
+'phn.apnanalytics.com',
+'phoenix-adrunner.mycomputer.com',
+'phoenix-mc-adrunner.mycomputer.com',
+'phoenix.ivwbox.de',
+'phoenix.untd.com',
+'phoneboxexperiment.com',
+'photoshop-master.org',
+'php.bisrv.com',
+'phpbbex.com',
+'phpmyadmin.ads.ero-advertising.com',
+'phpmyadmin.ero-advertising.com',
+'phpmyadmin.js.ero-advertising.com',
+'phx.co.in',
+'phylesonqjkilk.download',
+'physorg.us.intellitxt.com',
+'pi.feedsportal.com',
+'pi.pardot.com',
+'pi.safer-networking.ie',
+'pic.tokyo-tube-ad.com',
+'picda.ilius.net',
+'picket0.com',
+'pickyourplum.hasoffers.com',
+'picreel.com',
+'pics.firstload.de',
+'pics3.inxhost.com',
+'picupload.tnaflix.com',
+'piet2eix3l.com',
+'pigment-adv.co.il',
+'pillowywdgpchl.download',
+'pimprig.us.intellitxt.com',
+'pimproll.com',
+'pinfishmabev.download',
+'ping-fast.com',
+'ping.aclst.com',
+'ping.answerbook.com',
+'ping.apptornado.com',
+'ping.chartbeat.net',
+'ping.dozuki.com',
+'ping.getadblock.com',
+'ping.jmp9.com',
+'ping.taplytics.com',
+'pingback.sogou.com',
+'pinger.macromedia.com',
+'pingjs.qq.com',
+'pings.conviva.com',
+'pinguinqeslaj.download',
+'pipedream.wistia.com',
+'pipeschannels.com',
+'piranho.com',
+'piranho.de',
+'piratinviaggio.digidip.net',
+'pitneybowes-www.baynote.net',
+'piumrtfasiv.download',
+'pivotal.github.com',
+'pivotnetworks.com',
+'piwik.adspaces.ero-advertising.com',
+'piwik.ero-advertising.com',
+'piwik.ilfllc.com',
+'piwik.kuhlmann-software.at',
+'pix.bit.ly',
+'pix.btrll.com',
+'pix.gfycat.com',
+'pix.speedbit.com',
+'pix01.revsci.net',
+'pix04-pd04.revsci.net',
+'pix04.revsci.net',
+'pix521.adtech.fr',
+'pix522.adtech.fr',
+'pixazza.com',
+'pixel-dimestore.dmi.sensic.net',
+'pixel.1und1.de',
+'pixel.33across.com',
+'pixel.ad.mlnadvertising.com',
+'pixel.adcrowd.com',
+'pixel.adsafeprotected.com',
+'pixel.adsniper.ru',
+'pixel.advertising.com',
+'pixel.alephd.com',
+'pixel.alexametrics.com',
+'pixel.autoaffiliatenetwork.com',
+'pixel.bild.de',
+'pixel.despegar.com',
+'pixel.eversttech.net',
+'pixel.facebook.com',
+'pixel.fanbridge.com',
+'pixel.getpaidfordata.com',
+'pixel.gfycat.com',
+'pixel.honestjohn.co.uk',
+'pixel.intares.net',
+'pixel.invitemedia.com',
+'pixel.jumptap.com',
+'pixel.mathtag.com',
+'pixel.moatads.com',
+'pixel.monitor1.returnpath.net',
+'pixel.monitor2.returnpath.net',
+'pixel.nbsp.de',
+'pixel.pcworld.com',
+'pixel.prfct.co',
+'pixel.prosieben.de',
+'pixel.quantcount.com',
+'pixel.quantserve.com',
+'pixel.reddit.com',
+'pixel.redditmedia.com',
+'pixel.rubiconproject.com',
+'pixel.serviceleverage.com',
+'pixel.sitescout.com',
+'pixel.solvemedia.com',
+'pixel.staging.tree.com',
+'pixel.staticworld.net',
+'pixel.tapad.com',
+'pixel.tcog.cp1.news.com.au',
+'pixel.tree.com',
+'pixel.watch',
+'pixel.wp.com',
+'pixel.wp.tv',
+'pixel.yabidos.com',
+'pixel.yola.com',
+'pixel1041.everesttech.net',
+'pixel1739.everesttech.net',
+'pixelcounter.expansion.com',
+'pixelcounter.telva.com',
+'pixeleze.com',
+'pixiedust.buzzfeed.com',
+'pk5qr.voluumtrk.com',
+'pkmg.go2cloud.org',
+'pl105423.putags.com',
+'pl106332.puhtml.com',
+'pl108274.puhtml.com',
+'pl109299.puhtml.com',
+'pl111316.puhtml.com',
+'pl111439.puhtml.com',
+'pl112153.puhtml.com',
+'pl116670.puhtml.com',
+'pl117290.puhtml.com',
+'pl130464.puhtml.com',
+'pl133504.puhtml.com',
+'pl144731.puhtml.com',
+'pl147032.puhtml.com',
+'pl1567.bntags.com',
+'pl3700.puhtml.com',
+'pl3792.puhtml.com',
+'pl4277.putags.com',
+'pl4851.putags.com',
+'pl5014.putags.com',
+'pl5027.putags.com',
+'pl504.putags.com',
+'pl5191.putags.com',
+'pl5225.bntags.com',
+'pl5411.bntags.com',
+'pl61x.voluumtrk.com',
+'placed.com',
+'placehold.it',
+'placeholdit.imgix.net',
+'planet-source-code.us.intellitxt.com',
+'planetactive.com',
+'planetgamecube.us.intellitxt.com',
+'planetluck.com',
+'planituk.go2cloud.org',
+'platado.com',
+'platform.communicatorcorp.com',
+'platform.linkedin.com',
+'platform.revenuestreet.com',
+'platform.stumbleupon.com',
+'platform.tumblr.com',
+'play.affmob.org',
+'play.leadzu.com',
+'play2mobi.com',
+'play4traffic.com',
+'playads.applift.com',
+'playboy.us.intellitxt.com',
+'player.piksel.com',
+'playminigolf.com',
+'playnow.guru',
+'playtomic.com',
+'plb27.voluumtrk.com',
+'pleadshvzek.download',
+'pleasewaitlonger.com',
+'plemedia.com',
+'plemx.com',
+'pleshkov.justclick.ru',
+'plethoramobile.com',
+'plgundr.com',
+'pll28.voluumtrk.com',
+'plmokn.pw',
+'plocia.com',
+'ploko.voluumtrk.com',
+'ploppingppoqqgq.download',
+'pls.webtype.com',
+'plsdrct2.me',
+'plug.plugerr.com',
+'plugin.2easydroid.com',
+'plugin.mediavoice.com',
+'plugin.reactful.com',
+'plugins.mixi.jp',
+'plugrush.com',
+'plusperformance.go2cloud.org',
+'pluto.adcycle.com',
+'plutusads.com',
+'pm.bumskontakt.com',
+'pm.deinfickdate.com',
+'pm.deinsexdate.com',
+'pm.fetischsexkontakte.com',
+'pm.heutenochficken.com',
+'pm.hobbyhurenkontakte.com',
+'pm.hobbynuttendatenbank.com',
+'pm.kontakt-vermittler.de',
+'pm.natursektdating.com',
+'pm.onlineseitensprung.de',
+'pm.schwangerdating.com',
+'pm.sexkiste.com',
+'pm.sexkontaktflatrate.com',
+'pm.sofortficken.com',
+'pm.swingerdatenbank.com',
+'pm.tittendating.com',
+'pm.w55c.net',
+'pm.web.com',
+'pmloe.voluumtrk.com',
+'pmlt1.voluumtrk.com',
+'pmm.people.com.cn',
+'pn2.adserver.yahoo.com',
+'pnx6n.voluumtrk.com',
+'pnytimes.chartbeat.net',
+'po.st',
+'pocketmedia.go2cloud.org',
+'pocketpc.digidip.net',
+'poconorecordcom.112.2o7.net',
+'pod.xpress.com',
+'pod.xxxconnect.com',
+'pointific.go2cloud.org',
+'pointix.com',
+'pointroll.com',
+'pointshop.dk',
+'pokasvobodna.justclick.ru',
+'polishedsvcxddsy.download',
+'politads.com',
+'politics.searchwho.com',
+'poll.truehits.net',
+'polluxnetwork.com',
+'pompazilla.com',
+'pongoresume.com',
+'pontiflex.com',
+'pool.admedo.com',
+'pool.ads.netlog.com',
+'pool.skyhookwireless.com',
+'pool01.2cnt.net',
+'pool02.2cnt.net',
+'poopoo.freestats.com',
+'pop.adcocktail.com',
+'pop.kissmetrics.com',
+'pop.mobpartner.mobi',
+'pop.mrstiff.com',
+'pop.performancerevenues.com',
+'pop.pptw.org',
+'pop.yeahmobi.com',
+'popacs.ero-advertising.com',
+'popads.ero-advertising.com',
+'popads.net',
+'popadscdn.net',
+'popcash.net',
+'popelingmltdiidyr.download',
+'popit.mediumpimpin.com',
+'popload.net',
+'popme.163.com',
+'poponclick.com',
+'poppntags.com',
+'pops.ero-advertising.com',
+'pops.freeze.com',
+'popserve.adscpm.net',
+'popstrap.com',
+'poptm.com',
+'popunder.jacquieetmichel.net',
+'popunder.loading-delivery1.com',
+'popunder.net',
+'popunder.ru',
+'popunderz.com',
+'popup.msn.com',
+'popup.smusic.ir',
+'popup.wisepops.com',
+'popupad.net',
+'popupads.ir',
+'popupmoney.com',
+'popups.infostart.com',
+'popuptraffic.com',
+'popzila.com',
+'poratav.com',
+'poredii.com',
+'pornads.biz',
+'porner.at',
+'pornhub.tardangro.com',
+'pornhub.yoshatia.com',
+'pornlist.mobi',
+'porntrack.com',
+'pornvideostube.net',
+'portableplanet.us.intellitxt.com',
+'portal.admeld.com',
+'portal.publishersserviceassociates.com',
+'portal.scanscout.com',
+'portal.skyhookwireless.com',
+'portal.zedo.com',
+'pos.baidu.com',
+'posibilities_en.popunder.net',
+'possibilities.popunder.net',
+'posst.co',
+'post.securestudies.com',
+'post.update.moatads.com',
+'postads24.com',
+'postchronicle.us.intellitxt.com',
+'postitial.iqzone.com',
+'postmasterbannernet.com',
+'postpixel.vindicosuite.com',
+'potd.onlytease.com',
+'potionoxfrtmzvr.download',
+'power-affliate.blogspot.com',
+'poweradvertising.co.uk',
+'powercount.jswelt.de',
+'powersearch.us.com',
+'powertube.bitterstrawberry.com',
+'pp-serve.newsinc.com',
+'pp0ru.voluumtrk.com',
+'ppcchicago.com',
+'ppcindo.com',
+'ppctracking.net',
+'ppctrck.com',
+'ppp.voice2page.com',
+'ppsxqapwsurcoats.review',
+'pptrk.com',
+'pq-direct.revsci.net',
+'pr-bh.ybp.yahoo.com',
+'pr-static.empflix.com',
+'pr.atwola.com',
+'pr.blogflux.com',
+'pr.pbp.vip.ir2.yahoo.com',
+'pr.prchecker.info',
+'pr.ybp.yahoo.com',
+'praiseads.go2cloud.org',
+'pranking12.ziyu.net',
+'praptkppltraditors.review',
+'prchecker.info',
+'pre.footprintpredict.com',
+'precisionleads.go2cloud.org',
+'predictad.com',
+'predictivadvertising.com',
+'preferences.truste.com',
+'preferredpublishers.go2cloud.org',
+'prehensivetvrie.download',
+'premiercreditcard.com',
+'premios.go2cloud.org',
+'premium.cz',
+'premium.naturalnews.tv',
+'premiumastrology.go2cloud.org',
+'premiumnetwork.com',
+'premiumtrack01.webtrekk.net',
+'premiumtrack02.webtrekk.net',
+'premiumtrack03.webtrekk.net',
+'premiumtrack04.webtrekk.net',
+'prepareriblef.download',
+'preplannedpbxggguv.download',
+'preply.go2affise.com',
+'prerelease.rts.doublepimp.com',
+'prerelease.rts.phn.doublepimp.com',
+'prerelease.streamate.doublepimp.com',
+'prerollads.ign.com',
+'preview.bnex.com',
+'preview.serving-sys.com',
+'prexista.com',
+'priceinfo.comuv.com',
+'priceminister.ezakus.net',
+'prikolizdesa.com',
+'primaryads.com',
+'primedia.us.intellitxt.com',
+'primosearch.com',
+'pringotrack.com',
+'prishla.info',
+'prismaprofits.go2cloud.org',
+'prizee.com',
+'prkhg.voluumtrk.com',
+'prm.europacash.com',
+'prmfactory.go2cloud.org',
+'prmobiles.com',
+'pro-advertising.com',
+'pro.hit.gemius.pl',
+'proac.nationwide.com',
+'proactive.base.de',
+'probe.cedexis.org',
+'probe.yieldlab.net',
+'probes.cedexis.com',
+'probux.com',
+'procinema.2cnt.net',
+'prodege.go2cloud.org',
+'production-eqbc.lvp.llnw.net',
+'production-mcs.lvp.llnw.net',
+'production-ps.lvp.llnw.net',
+'production-stats-ezpublishing.netdna-ssl.com',
+'production.mcs.delve.cust.lldns.net',
+'productpartnersllc.tt.omtrdc.net',
+'products-and-services.com',
+'prof.estat.com',
+'proffigurufast.com',
+'profile.bharatmatrimony.com',
+'profiles.mydirtyhobby.com',
+'profitreload.com',
+'profitshare.emag.ro',
+'profitsiegenetwork.go2cloud.org',
+'profitzone.com',
+'progressive.lp.mydas.mobi',
+'project2.realtracker.com',
+'projectcounter.org',
+'projectvrtcl.go2cloud.org',
+'projectwonderful.com',
+'projop.dnsalias.com',
+'promo.acquinityinteractive.com',
+'promo.awempire.com',
+'promo.badoink.com',
+'promo.blackcrush.com',
+'promo.bluesq.com',
+'promo.bongacash.com',
+'promo.easy-dating.org',
+'promo.ezstatic.com',
+'promo.fileforum.com',
+'promo.free-datings.com',
+'promo.freecamstars.com',
+'promo.indecentes-voisines.com',
+'promo.pegcweb.com',
+'promo.selbstaendig20.12227.digistore24.com',
+'promo.thepornsurvey.com',
+'promo.ulust.com',
+'promo.yahoo.com',
+'promo1.c-rewards.com',
+'promo2.c-rewards.com',
+'promo3.c-rewards.com',
+'promo4.c-rewards.com',
+'promo4partners.com',
+'promobenef.com',
+'promos.adlead.com',
+'promos.fling.com',
+'promos.gpniches.com',
+'promote.pair.com',
+'promotion.coreg.de',
+'promotion.partnercash.com',
+'promotion.shirtinator.net',
+'promotionmaterial.betacash.com',
+'promotions.iasbet.com',
+'promotions.yahoo.com',
+'promptleads.go2cloud.org',
+'pronatingwdlurtut.download',
+'propellerpops.com',
+'prophet.heise.de',
+'proratepgehzyd.download',
+'prosperent.com',
+'protectsebuwflgm.download',
+'protexting.com',
+'protraffic.com',
+'providence.voxmedia.com',
+'proxad.net',
+'proxy.ladot.com',
+'proxypage.msn.com',
+'prpops.com',
+'prscripts.com',
+'prstatics.com',
+'prunemedia.go2affise.com',
+'prv3h.voluumtrk.com',
+'prwidgets.com',
+'ps-eu.amazon-adsystem.com',
+'ps.ns-cdn.com',
+'ps2.interpolls.com',
+'ps3.ign.us.intellitxt.com',
+'psfjg.voluumtrk.com',
+'psl19.voluumtrk.com',
+'psma02.com',
+'psp.ign.us.intellitxt.com',
+'psstt.com',
+'pssvc.iqzone.com',
+'psx.ign.us.intellitxt.com',
+'psyimjyctimeliness.review',
+'psyschool.justclick.ru',
+'pt.crossmediaservices.com',
+'pt.friendbuy.com',
+'pt.trafficjunky.net',
+'pt000127.unica.com',
+'pt200204.unica.com',
+'pt7ma.voluumtrk.com',
+'ptest.webtrekk.net',
+'ptk6n.voluumtrk.com',
+'ptp.lolco.net',
+'ptp4ever.fr',
+'ptqss.voluumtrk.com',
+'ptracker.be2.com',
+'ptsc.shoplocal.com',
+'pttsite.com',
+'pu-dsp.adsniper.ru',
+'pu.trafficshop.com',
+'puat.go2cloud.org',
+'pub.ad-sys.com',
+'pub.adswam.com',
+'pub.akinator.com',
+'pub.aujourdhui.com',
+'pub.chez.com',
+'pub.clicktraffix.com',
+'pub.club-internet.fr',
+'pub.cyberbrain.net',
+'pub.dreamboxcart.com',
+'pub.ftv-publicite.fr',
+'pub.hardware.fr',
+'pub.realmedia.fr',
+'pub.sapo.pt',
+'pub.sex.com',
+'pub.sitetag.us',
+'pub.sponsorselect.com',
+'pub.sv2.biz',
+'pub1.bravenet.com',
+'pub1.co',
+'pub10.bravenet.com',
+'pub11.bravenet.com',
+'pub12.bravenet.com',
+'pub13.bravenet.com',
+'pub14.bravenet.com',
+'pub15.bravenet.com',
+'pub16.bravenet.com',
+'pub17.bravenet.com',
+'pub18.bravenet.com',
+'pub19.bravenet.com',
+'pub2.bravenet.com',
+'pub20.bravenet.com',
+'pub21.bravenet.com',
+'pub22.bravenet.com',
+'pub23.bravenet.com',
+'pub24.bravenet.com',
+'pub25.bravenet.com',
+'pub26.bravenet.com',
+'pub27.bravenet.com',
+'pub28.bravenet.com',
+'pub29.bravenet.com',
+'pub2srv.com',
+'pub3.bravenet.com',
+'pub3.media-clic.com',
+'pub30.bravenet.com',
+'pub31.bravenet.com',
+'pub32.bravenet.com',
+'pub33.bravenet.com',
+'pub34.bravenet.com',
+'pub35.bravenet.com',
+'pub36.bravenet.com',
+'pub37.bravenet.com',
+'pub38.bravenet.com',
+'pub39.bravenet.com',
+'pub4.bravenet.com',
+'pub40.bravenet.com',
+'pub41.bravenet.com',
+'pub42.bravenet.com',
+'pub43.bravenet.com',
+'pub44.bravenet.com',
+'pub45.bravenet.com',
+'pub46.bravenet.com',
+'pub47.bravenet.com',
+'pub48.bravenet.com',
+'pub49.bravenet.com',
+'pub5.bravenet.com',
+'pub50.bravenet.com',
+'pub6.bravenet.com',
+'pub7.bravenet.com',
+'pub8.bravenet.com',
+'pub9.bravenet.com',
+'pubads.g.doubleclick.net',
+'pubcpm.com',
+'pubdirecte.com',
+'publead.go2cloud.org',
+'public.bravenet.com',
+'public.carpediem.fr',
+'public.porn.fr',
+'public0.bravenet.com',
+'public1.bravenet.com',
+'public10.bravenet.com',
+'public11.bravenet.com',
+'public12.bravenet.com',
+'public13.bravenet.com',
+'public14.bravenet.com',
+'public15.bravenet.com',
+'public16.bravenet.com',
+'public17.bravenet.com',
+'public18.bravenet.com',
+'public19.bravenet.com',
+'public2.bravenet.com',
+'public20.bravenet.com',
+'public21.bravenet.com',
+'public22.bravenet.com',
+'public23.bravenet.com',
+'public24.bravenet.com',
+'public25.bravenet.com',
+'public26.bravenet.com',
+'public27.bravenet.com',
+'public28.bravenet.com',
+'public29.bravenet.com',
+'public3.bravenet.com',
+'public30.bravenet.com',
+'public31.bravenet.com',
+'public32.bravenet.com',
+'public33.bravenet.com',
+'public34.bravenet.com',
+'public35.bravenet.com',
+'public36.bravenet.com',
+'public37.bravenet.com',
+'public38.bravenet.com',
+'public39.bravenet.com',
+'public4.bravenet.com',
+'public40.bravenet.com',
+'public41.bravenet.com',
+'public42.bravenet.com',
+'public43.bravenet.com',
+'public44.bravenet.com',
+'public45.bravenet.com',
+'public46.bravenet.com',
+'public47.bravenet.com',
+'public48.bravenet.com',
+'public49.bravenet.com',
+'public5.bravenet.com',
+'public50.bravenet.com',
+'public6.bravenet.com',
+'public7.bravenet.com',
+'public8.bravenet.com',
+'public9.bravenet.com',
+'publicationsunbound.112.2o7.net',
+'publicidad.elmundo.es',
+'publicizedrtgtvj.download',
+'publish.pizzazzemail.com',
+'publish.vidavee.com',
+'publisher.acquinityinteractive.com',
+'publisher.affiliwelt.net',
+'publisher.infinityads.com',
+'publisher.tradedoubler.com',
+'publisherportal.doubleclick.net',
+'publishers.clickbooth.com',
+'publishers.gourmetads.com',
+'pubnative.net',
+'pubs.lemonde.fr',
+'pubted.com',
+'pubx.co',
+'pud.cpulse.com',
+'puggareeslshty.download',
+'puhtml.com',
+'pulharktheherald.112.2o7.net',
+'pulpantagraph.112.2o7.net',
+'pulsarads.go2affise.com',
+'pulsepoint.com',
+'pulsetv.com',
+'puma.vizu.com.51275.9332.302br.net',
+'puma.vizu.com.51276.9332.302br.net',
+'puma.vizu.com.51277.9332.302br.net',
+'puma.vizu.com.51278.9332.302br.net',
+'puokp.voluumtrk.com',
+'pure-ads.com',
+'pureresults.go2cloud.org',
+'puretec.de',
+'purgrobi.com',
+'push.appsgeyser.com',
+'push.cdnads.com',
+'pushdoglucoside.review',
+'putbid.net',
+'pv.sogou.com',
+'pvcteegjdrecombine.review',
+'pvnrr.voluumtrk.com',
+'pvrgf.voluumtrk.com',
+'pwgrkcxuescaped.review',
+'pwu0e.voluumtrk.com',
+'px.adhigh.net',
+'px.cdn.creative.medialytics.com',
+'px.demdex.net',
+'px.dpmsrv.com',
+'px.excitedigitalmedia.com',
+'px.owneriq.net',
+'px.ozonemedia.com',
+'px.srvcs.tumblr.com',
+'px.topspin.net',
+'px.wa.ui-portal.de',
+'px1.vtrtl.de',
+'pxl.darchermedia.com',
+'pxl.leads.su',
+'pxlctl.as.com',
+'pxlctl.elpais.com',
+'py2so.voluumtrk.com',
+'pyhel.voluumtrk.com',
+'pyj6n.voluumtrk.com',
+'pyqnmtgtsrouleaux.review',
+'pyracanthahiiiy.download',
+'pyrolyzesgykddf.download',
+'pyrrhousabowdw.download',
+'pyrroleqkoaob.download',
+'pywatur.biz',
+'pyxqbzdwemuteness.review',
+'pyzct.voluumtrk.com',
+'pyzou.voluumtrk.com',
+'pztqt.voluumtrk.com',
+'pzxld.voluumtrk.com',
+'p_en.popunder.net',
+'q-mobi.go2affise.com',
+'q.addthis.com',
+'q.azcentral.com',
+'q.jmp9.com',
+'q.pni.com',
+'q.serving-sys.com',
+'q.stripe.com',
+'q.zeroredirect.com',
+'q.zeroredirect1.com',
+'q.zeroredirect2.com',
+'q1blk.voluumtrk.com',
+'q2fqo.voluumtrk.com',
+'q3-2.webtrekk.net',
+'q3.webtrekk.net',
+'q3aut.voluumtrk.com',
+'q3iko.voluumtrk.com',
+'q3mz4.voluumtrk.com',
+'q47bd.voluumtrk.com',
+'q4trt.voluumtrk.com',
+'q9dga.voluumtrk.com',
+'qa.rlcdn.com',
+'qa3wf.voluumtrk.com',
+'qadabra.com',
+'qainteryield.jmp9.com',
+'qajtgdsulfate.review',
+'qannd.voluumtrk.com',
+'qantas.demdex.net',
+'qarmonija.justclick.ru',
+'qawiman.com',
+'qb2h0.voluumtrk.com',
+'qb6q5.voluumtrk.com',
+'qbeeeld.jmp9.com',
+'qbeeld.jmp9.com',
+'qbeeseld.jmp9.com',
+'qbeld.jmp9.com',
+'qbsg9.voluumtrk.com',
+'qbt0g.voluumtrk.com',
+'qbuxm.voluumtrk.com',
+'qckjmp.com',
+'qclyu.voluumtrk.com',
+'qd.jmp9.com',
+'qdibdzannvauntings.review',
+'qdigital.co.il',
+'qdildryypitapat.review',
+'qdmil.com',
+'qdzlt.voluumtrk.com',
+'qeld.jmp9.com',
+'qf2e4.voluumtrk.com',
+'qfrirscauterises.review',
+'qftqw.voluumtrk.com',
+'qi2kt.voluumtrk.com',
+'qibly.voluumtrk.com',
+'qimuj.voluumtrk.com',
+'qitr0.voluumtrk.com',
+'qixrb.voluumtrk.com',
+'qj.us.intellitxt.com',
+'qjfbjuyvuazotizing.review',
+'qksrv.growhope.com',
+'qld.jmp9.com',
+'qlipsodigital.checkm8.com',
+'qlog.adap.tv',
+'qm41q.voluumtrk.com',
+'qmkkm.voluumtrk.com',
+'qmtjz.voluumtrk.com',
+'qmuuc.voluumtrk.com',
+'qnlcq.voluumtrk.com',
+'qnzdd.voluumtrk.com',
+'qof7o.voluumtrk.com',
+'qoredi.com',
+'qos.report.qq.com',
+'qpfumxmsxvoars.review',
+'qplir.voluumtrk.com',
+'qq.m.cn.miaozhen.com',
+'qqc.co',
+'qqvj6.voluumtrk.com',
+'qs.ioam.de',
+'qs.ivwbox.de',
+'qsearch.media.net',
+'quakemarketing.com',
+'qualaroo.com',
+'qualigo.de',
+'qualigo.net',
+'qualityclickcontrol.com',
+'qualitylegion.com',
+'quantcount.com',
+'quantserve.com',
+'quartz.bnex.com',
+'qubitanalytics.appspot.com',
+'qubitproducts.app13.hubspot.com',
+'qudll.voluumtrk.com',
+'queerestxyxlws.download',
+'questaffiliates.net',
+'questnet.de',
+'questseek.com',
+'quickdomainfwd.com',
+'quicken.demdex.net',
+'quickinfo247.com',
+'quickinspirations.com',
+'quickpay.carmunity.de',
+'quickstartstore.go2cloud.org',
+'quinolaerbnj.download',
+'quinst.com',
+'qvb2w.voluumtrk.com',
+'qvciu.voluumtrk.com',
+'qwest.bfast.com',
+'qwiklnk.com',
+'qwwqb.voluumtrk.com',
+'qxj3b.voluumtrk.com',
+'qyrix.go2cloud.org',
+'r.254a.comjs.moatads.com',
+'r.adserver01.de',
+'r.af-share.jp',
+'r.aol.com',
+'r.apina.biz',
+'r.best-rated-apps.com',
+'r.casalemedia.com',
+'r.chip.de',
+'r.coolmobile.biz',
+'r.domob.cn',
+'r.edge.inmobicdn.net',
+'r.leadzu.com',
+'r.leadzuaf.com',
+'r.leadzupc.com',
+'r.mail.ru',
+'r.migch.com',
+'r.mobhubrdrms.com',
+'r.mobpartner.mobi',
+'r.movad.de',
+'r.msn.com',
+'r.my.com',
+'r.myadx.net',
+'r.openx.net',
+'r.radikal.ru',
+'r.skimresources.com',
+'r.turn.com',
+'r.twimg.com',
+'r.uimserv.net',
+'r.w.inmobi.com',
+'r.yieldkit.com',
+'r.zeroredirect.com',
+'r.zeroredirect1.com',
+'r.zeroredirect2.com',
+'r0d2x.voluumtrk.com',
+'r1.ace.advertising.com',
+'r1.beta.ace.advertising.com',
+'r1.computerbild.de',
+'r1.cooleremail.com',
+'r1.fmpub.net',
+'r1.pcwelt.de',
+'r1.plugrush.com',
+'r1.zedo.com',
+'r10.cooleremail.com',
+'r11.cooleremail.com',
+'r2.cooleremail.com',
+'r2.linksynergy.com',
+'r2.plugrush.com',
+'r20.rs6.net',
+'r2fjs.voluumtrk.com',
+'r2jmarketing.go2cloud.org',
+'r2v3n.voluumtrk.com',
+'r3.cooleremail.com',
+'r3.plugrush.com',
+'r4.cooleremail.com',
+'r4.plugrush.com',
+'r4zih.voluumtrk.com',
+'r5.cooleremail.com',
+'r5.plugrush.com',
+'r6.cooleremail.com',
+'r6qz8.voluumtrk.com',
+'r7.cooleremail.com',
+'r8.cooleremail.com',
+'r9.cooleremail.com',
+'r9pyq.voluumtrk.com',
+'ra.revolvermaps.com',
+'rack.bauermedia.co.uk',
+'raconteurnvlwsc.download',
+'rad.adriver.ru',
+'rad.reporo.net',
+'radar.cedexis.com',
+'radar.cedexis.swiftserve.com',
+'radar11ab.co.uk',
+'radartumblr.cedexis.com',
+'radarurl.com',
+'radiate.com',
+'radioguerr.2cnt.net',
+'radiozu.2cnt.net',
+'radstackmedia.go2cloud.org',
+'rainbow-de.mythings.com',
+'rainbow.mythings.com',
+'rainmaker.digitalbrandsinc.netdna-cdn.com',
+'rainoffers.afftrack.com',
+'rainydaymarketing.go2affise.com',
+'raiss.voluumtrk.com',
+'ramctrlgate.com',
+'ramongroup.go2affise.com',
+'rampidads.com',
+'ranking-charts.de',
+'ranking-hits.de',
+'ranks.com',
+'rankseller.de',
+'ranksider.com',
+'rankyou.com',
+'rapdirt.us.intellitxt.com',
+'rapid-cdn.com',
+'rapleaf.com',
+'raplz.voluumtrk.com',
+'rareru.ru',
+'rasedbdhczr.download',
+'rasius.pro',
+'rasml.voluumtrk.com',
+'rata.ero-advertising.com',
+'rates.insureship.com',
+'rating.openstat.com',
+'rating.openstat.ru',
+'ratkalol.com',
+'ratx9.voluumtrk.com',
+'ravenstonedigital.go2cloud.org',
+'rawdinner.justclick.ru',
+'rawstory.us.intellitxt.com',
+'raygun.io',
+'raymond.uk.intellitxt.com',
+'rb1.design.ru',
+'rbb.ic.llnwd.net',
+'rbs.tt.omtrdc.net',
+'rc-au.imrworldwide.com',
+'rc.adition.com',
+'rc.bt.ilsemedia.nl',
+'rc.rlcdn.com',
+'rc6.i2i.jp',
+'rce.veeseo.com',
+'rcgi.video.qq.com',
+'rckymtnnws.112.2o7.net',
+'rcm-de.amazon.de',
+'rcm-fe.amazon-adsystem.com',
+'rcm-images.amazon.com',
+'rcm.amazon.com',
+'rcm.go2cloud.org',
+'rcp.c.appier.net',
+'rcpmf.voluumtrk.com',
+'rcsmetrics.it',
+'rd-eu.a9.com',
+'rd.ads.juno.com',
+'rd.advertising.com',
+'rd.alice.it',
+'rd.ane.yahoo.co.jp',
+'rd.apmebf.com',
+'rd.jersey.ads.juno.com',
+'rd.mobiteasy.com',
+'rd.rakuten.co.jp',
+'rd.sslmediaserver.com',
+'rd1.hitbox.com',
+'rd1.surfernetwork.com',
+'rddywd.com',
+'rdir.smartshoppingads.co.uk',
+'rds4k.voluumtrk.com',
+'rdstat.tanx.com',
+'re.adroll.com',
+'re.directrev.com',
+'re.try9.com',
+'readserver.cachefly.net',
+'realclick.co.kr',
+'realclix.com',
+'realcounter.eu',
+'realestate.searchwho.com',
+'realist.gen.tr',
+'realitatea.2cnt.net',
+'reallybig.spinbox.net',
+'realmedia-a592.d4p.net',
+'realmedia-a800.d4p.net',
+'realmedia.co.kr',
+'realmedia.fr',
+'realmedia.ro',
+'realnetworks.com',
+'realtechnetwork.com',
+'realtime.services.disqus.com',
+'realtracker.com',
+'reamerskltzgimoz.download',
+'rec.quartic.pl',
+'rec3.prosieben.de',
+'recade.clmbtech.com',
+'recipegoldmine.us.intellitxt.com',
+'reco.hardsextube.com',
+'recommendation.24.com',
+'recommendations.shareaholic.com',
+'recommendedpreview.com',
+'record.commissionlounge.com',
+'recorded-email.com',
+'recreationalequipmen.tt.omtrdc.net',
+'recreativ.ru',
+'recrossedmuwiemq.download',
+'recs.atgsvcs.com',
+'red.chic-avenue.fr',
+'red.yourdailyoffers.co.uk',
+'redcounter.net',
+'redcourtside.com',
+'redeye.williamhill.com',
+'redir-traffic.elephant-traffic.com',
+'redir.adap.tv',
+'redir.metaservices.microsoft.com',
+'redir.speedbit.com',
+'redir.widdit.com',
+'redirect-for-more.info',
+'redirect.advertising.se',
+'redirect.com',
+'redirect.dealabs.com',
+'redirect.ero-advertising.com',
+'redirect.fairfax.com.au',
+'redirect.la.idealab.com',
+'redirect.linksummary.com',
+'redirect.mobpartner.mobi',
+'redirect.searchignite.com',
+'redirect.simba.taobao.com',
+'redirect.viglink.com',
+'redirect.wister.biz',
+'redirect1.vip.store.yahoo.com',
+'redirect2719.ws',
+'redirecting.ws',
+'redirector.themobilehub.net',
+'redirects.ero-advertising.com',
+'redirects.timesink.com',
+'reditions.net',
+'redmas.com',
+'redrct.site',
+'redshiftleads.steele.net',
+'redtube.yoshatia.com',
+'reduxmedia.com',
+'redvase.bravenet.com',
+'redvertisment.com',
+'redzun.go2cloud.org',
+'reedingxgxwiet.download',
+'refer.ccbill.com',
+'refer.webhostingbuzz.com',
+'refer100.outster.com',
+'referral.imcbet.com',
+'referral.indotogel.net',
+'referral.lotto01.com',
+'referral.togel4d.com',
+'referral.totobet.net',
+'referral.totojitu.com',
+'referral.totost.com',
+'referralware.com',
+'referrer.disqus.com',
+'refinedads.com',
+'reformal.ru',
+'reg20.ubermedia.com',
+'regalcigs.go2cloud.org',
+'regie.oopt.fr',
+'register.leadbolt.com',
+'registration.livejasmin.com',
+'rehungekmar.download',
+'reichelt02.webtrekk.net',
+'rejectclick.com',
+'rek.mobi',
+'rekket.go2affise.com',
+'reklam.rfsl.se',
+'reklama.internet.cz',
+'reklama.reflektor.cz',
+'relap.io',
+'relatedweboffers.com',
+'relay.cj.com',
+'relay.livejasmin.com',
+'relay.reporo.net',
+'relentless.go2cloud.org',
+'reliaquote.com',
+'rem-track.bild.de',
+'rem.go2cloud.org',
+'remarketing.doubleclick.net',
+'remercyingynfycoay.download',
+'remotead-internal.cnet.com',
+'remotead.cnet.com',
+'renegademillionaire.go2cloud.org',
+'renouncecvtqbkx.download',
+'replay.foreseeresults.com',
+'replaycontroller.4seeresults.com',
+'report-zt.1rx.io',
+'report.adsender.us',
+'report.adview.cn',
+'report.footprintdns.com',
+'report.ivwbox.de',
+'report.qq.com',
+'report.the-path-gateway.com',
+'report.webtrekk.de',
+'report.yeahmobi.com',
+'report.zedo.com',
+'report02.adtech.fr',
+'report12.webtrekk.com',
+'report2.webtrekk.de',
+'report8.webtrekk.com',
+'reportcentral.doubleclick.net',
+'reporter.adtech.fr',
+'reporter001.adtech.fr',
+'reportimage.adtech.fr',
+'reporting.flymonarch.com',
+'reporting.ilius.net',
+'reporting.net',
+'reporting.theonion.com',
+'reporting.wilkinsonplus.com',
+'reports.adition.com',
+'reports.amonetize.com',
+'reports.cedexis.com',
+'reports.doubleclick.com',
+'reports.doubleclick.net',
+'reports.extreme-dm.com',
+'reports.pagesuite-professional.co.uk',
+'reports.wes.df.telemetry.microsoft.com',
+'reports.zedo.com',
+'repricebkbakkrxq.download',
+'republika.onet.pl',
+'req.mojiva.com',
+'req.startappexchange.com',
+'req.startappservice.com',
+'reqpostanza.com',
+'request.issuu.com',
+'res-x.com',
+'res.lazyswipe.com',
+'res3.feedsportal.com',
+'research-artisan.com',
+'research.de.com',
+'researchnow.co.uk',
+'reseller.hitbox.com',
+'resimler.randevum.com',
+'resolingvmvkfqrq.download',
+'resolvedlyecyduwkv.download',
+'resource-marketing.com',
+'resources.hitbox.com',
+'resources.infolinks.com',
+'resources.search.conduit.com',
+'resourcs.infolinks.com',
+'responder.wt-safetag.com',
+'rest.sharethis.com',
+'result.wired.com',
+'resultanthixic.download',
+'resultonline.com',
+'retail-affiliates.com',
+'retarget.ssl-services.com',
+'retargetpro.net',
+'retentionscience.com',
+'retrostats.com',
+'return.bs.domainnamesales.com',
+'return.to',
+'return.uk.domainnamesales.com',
+'rev.adip.ly',
+'rev.fapdu.com',
+'rev.pornxs.com',
+'rev2pub.adk2x.com',
+'revadstrk.com',
+'revdepo.com',
+'revealads.appspot.com',
+'revelations.trovus.co.uk',
+'revenue.net',
+'revenues.go2cloud.org',
+'revenues.performancerevenues.com',
+'revenueservice.com',
+'revlabs.go2cloud.org',
+'revmob.com',
+'revmobmobileadnetwork.com',
+'revolution.ign.us.intellitxt.com',
+'revolutiongolf.go2cloud.org',
+'revsci.net',
+'rewardit.go2cloud.org',
+'rewardsflow.com',
+'rewardster.com',
+'rewqs.com',
+'rexmox.com',
+'rextk.com',
+'rextopia.com',
+'rextrk.com',
+'rey3935.112.2o7.net',
+'rg.yieldoptimizer.com',
+'rg1.com',
+'rg4.com',
+'rg6.com',
+'rg7.com',
+'rg9.com',
+'rgady.voluumtrk.com',
+'rgmarket.adspirit.net',
+'rgrmarketing.go2cloud.org',
+'rgryk.voluumtrk.com',
+'rgxzf.voluumtrk.com',
+'rhapsodespzamgepzf.download',
+'rhodonitexnwpvf.download',
+'rhtag.com',
+'rhvtt.voluumtrk.com',
+'ribbon.india.com',
+'rich-agent.s3.amazonaws.com',
+'richfind.com',
+'richpays.com',
+'richwebmaster.com',
+'ricinoleicqnvzzrqnk.download',
+'ricksticksidperh.download',
+'ricor.ru',
+'ridiculeojlipf.download',
+'rightmedia.com',
+'rightonmediagroup.go2cloud.org',
+'rightpundits.us.intellitxt.com',
+'rightstats.com',
+'ringmenbnfkg.download',
+'rinsesqpppqbd.download',
+'ripenesscamuhceu.download',
+'ritogaga.com',
+'rivasearch.com',
+'rjfjx.voluumtrk.com',
+'rjnc0.voluumtrk.com',
+'rkaffiliates.go2cloud.org',
+'rkq0r.voluumtrk.com',
+'rl.heise.de',
+'rland.searchlabel.com',
+'rlcdn.com',
+'rlcxi.voluumtrk.com',
+'rleeden.myby.co.uk',
+'rll9v.voluumtrk.com',
+'rlog-api.under9.co',
+'rlog.9gag.com',
+'rlyg7.voluumtrk.com',
+'rm.yieldmanager.com',
+'rm2.adtilt.com',
+'rmads.eu.msn.com',
+'rmads.msn.com',
+'rmatic.go2cloud.org',
+'rmbn.ru',
+'rmd.atdmt.com',
+'rmedia.boston.com',
+'rmj9i.voluumtrk.com',
+'rmpanelzone.research-int.com',
+'rmsurveys.research-int.com',
+'rmv.so',
+'rnd.yxo.ru',
+'rnyp9.voluumtrk.com',
+'ro.adocean.pl',
+'roadcatalogs.us.intellitxt.com',
+'roadmappdigital.go2affise.com',
+'roar.com',
+'roars.com',
+'robotreplay.com',
+'rockdirt.us.intellitxt.com',
+'rocketfuel.com',
+'rockoneinnovations.go2cloud.org',
+'rockstaralliance.go2cloud.org',
+'rockyou.go2cloud.org',
+'rogers.demdex.net',
+'roi.mediaplex.com',
+'roia.biz',
+'roiliernoqgxdj.download',
+'roilsqbquh.download',
+'roitracker.com',
+'romanticfm.2cnt.net',
+'romview.atdmt.com.915.9004.302br.net',
+'ronaldheft.com',
+'roomkey.d1.sc.omtrdc.net',
+'rootzwiki.us.intellitxt.com',
+'ropnqabtmaths.review',
+'roritabo.com',
+'rose.ixbt.com',
+'rosettastone.tt.omtrdc.net',
+'rotabanner.kulichki.net',
+'rotate.fncnet1.com',
+'rotatix.go2affise.com',
+'rotator.nbjmp.com',
+'rotator.offpageads.com',
+'rotator.tradetracker.nl',
+'rotator.trafficstars.com',
+'rotrk.com',
+'rotunddpgyiagb.download',
+'routehero.com',
+'router.adlure.net',
+'router.tlvmedia.com',
+'rovelrpphyrua.download',
+'row.bc.yahoo.com',
+'rowdyishtnhlgiax.download',
+'roxio.112.2o7.net',
+'roxionewroxio2006.112.2o7.net',
+'royal-cannabis-seeds-nirvanashop.netdna-ssl.com',
+'royalmial.112.207.net',
+'royalmobi.go2affise.com',
+'rp.alcoholsoftcdn.com',
+'rp.filefactscdn.com',
+'rp.hit.gemius.pl',
+'rp.mamamama2.com',
+'rpc-php.trafficfactory.biz',
+'rpjf.com',
+'rpm-images.newrelic.com',
+'rpt.cedexis.com',
+'rpylvksecants.review',
+'rqc3w.voluumtrk.com',
+'rr1.outster.com',
+'rr1.xxxcounter.com',
+'rrglxwvflpropensely.review',
+'rrwnt.voluumtrk.com',
+'rs-staticart.ybcdn.net',
+'rs.epoq.de',
+'rs.ero-advertising.com',
+'rs.gwallet.com',
+'rs0.co.uk',
+'rs1.avenuea.com',
+'rs2.ero-advertising.com',
+'rs4.anti-leech.com',
+'rsmrttracking.com',
+'rss.dtiserv.com',
+'rsvfh.voluumtrk.com',
+'rsvjs.voluumtrk.com',
+'rt.analytics.anvato.net',
+'rt.globo.com',
+'rt.liftdna.com',
+'rt.prnewswire.com',
+'rt.rakuten.co.jp',
+'rt01.2cnt.net',
+'rt02.2cnt.net',
+'rta.dailymail.co.uk',
+'rtax.criteo.com',
+'rtb-pclick.secure.yahoo.com',
+'rtb-pixel-ams1.everesttech.net',
+'rtb.nexage.com',
+'rtb.watchmedia.biz',
+'rtbpop.com',
+'rtd.tubemogul.com',
+'rtl.2cnt.net',
+'rtl.ivwbox.de',
+'rtlvtest.2cnt.net',
+'rtlvtest1.2cnt.net',
+'rtlxl.2cnt.net',
+'rtraccoin1.com',
+'rtrcoin1.com',
+'rtrinstcap1.com',
+'rtrk.com',
+'rtrpropcoin1.com',
+'rts.fling.doublepimp.com',
+'rts.lj.doublepimp.com',
+'rts.mobula.sdk.duapps.com',
+'rtsg.com',
+'rtso.divolution.com',
+'rtt.campanja.com',
+'rtv.2cnt.net',
+'rtvhalearn.review',
+'ru.redtram.com',
+'ru.velti.com',
+'ruaft.voluumtrk.com',
+'rubanners.com',
+'rubicon.admailtiser.com',
+'rubulat.justclick.ru',
+'rucir.voluumtrk.com',
+'ruclicks.com',
+'rum-static.pingdom.net',
+'rum.monitis.com',
+'rum.turbobytes.com',
+'run.dts.startappservice.com',
+'run.dvdbeats.com',
+'run.startappexchange.com',
+'run.trackimpression.com',
+'rundumsb.ivwbox.de',
+'rushbucks.go2cloud.org',
+'rushdktwu.download',
+'russia1.2cnt.net',
+'russia2.2cnt.net',
+'rutht.vgzmedia.com',
+'rutht.voluumtrk.com',
+'rvcjn.voluumtrk.com',
+'rvkai.voluumtrk.com',
+'rvy2a.voluumtrk.com',
+'rvzr-a.akamaihd.net',
+'rvzr2-a.akamaihd.net',
+'rwbd0.voluumtrk.com',
+'rwnkj.voluumtrk.com',
+'rxdja.voluumtrk.com',
+'ry7c5.directadsopt.com',
+'rydium.us.intellitxt.com',
+'ryerose.net',
+'rygpq.voluumtrk.com',
+'ryield.jmp9.com',
+'rytj3.voluumtrk.com',
+'rzr.tractionize.com',
+'s-adserver.cxad.cxense.com',
+'s-adserver.sandbox.cxad.cxense.com',
+'s-assets.tp-cdn.com',
+'s-cs.send.microad.jp',
+'s-jsonp.moatads.com',
+'s.206ads.com',
+'s.2app.lk',
+'s.ad120m.com',
+'s.ad121m.com',
+'s.ad123m.com',
+'s.ad124m.com',
+'s.ad125m.com',
+'s.ad127m.com',
+'s.ad129m.com',
+'s.ad131m.com',
+'s.ad7m.com',
+'s.adroll.com',
+'s.agava.ru',
+'s.amazon-adsystem.com',
+'s.arlime.com',
+'s.as997.de',
+'s.ato.mx',
+'s.btstatic.com',
+'s.c.appier.net',
+'s.click.aliexpress.com',
+'s.click.taobao.com',
+'s.cpx.to',
+'s.dpmsrv.com',
+'s.effectivemeasure.net',
+'s.ero-advertising.com',
+'s.getsmartcontent.com',
+'s.gstat.orange.fr',
+'s.innovid.com',
+'s.ixiaa.com',
+'s.jwpltx.com',
+'s.ktxtr.com',
+'s.luxadv.com',
+'s.m2pub.com',
+'s.moatads.com',
+'s.mobclix.com',
+'s.motads.com',
+'s.n.jwpltx.com',
+'s.ndemiccreations.com',
+'s.ntv.io',
+'s.o-clk.com',
+'s.po.st',
+'s.rankdirectory.org',
+'s.renren.com',
+'s.rev2pub.com',
+'s.sharethis.com',
+'s.skimresources.com',
+'s.ssacdn.com',
+'s.tagsrvcs.com',
+'s.tcimg.com',
+'s.tctm.co',
+'s.thebrighttag.com',
+'s.tribalfusion.com',
+'s.uadx.com',
+'s.update.moatads.com',
+'s.update.rubiconproject.com',
+'s.userzoom.com',
+'s.vgsgaming-ads.com',
+'s.wnd.com',
+'s.xp1.ru4.com',
+'s.xpanama.net',
+'s.yjtag.jp',
+'s.zeroredirect.com',
+'s.zeroredirect1.com',
+'s.zeroredirect2.com',
+'s.zkcdn.net',
+'s0.2mdn.net',
+'s0.img.awempire.com',
+'s01-delivery.addynamo.net',
+'s01.flagcounter.com',
+'s02.flagcounter.com',
+'s02.optimix.asia',
+'s03.flagcounter.com',
+'s04.flagcounter.com',
+'s05.flagcounter.com',
+'s06.flagcounter.com',
+'s06i.categoria.hpg.com.br',
+'s07.flagcounter.com',
+'s0s5e.voluumtrk.com',
+'s1.2mdn.net',
+'s1.freehostedscripts.net',
+'s1.img.awempire.com',
+'s1.ipicture.ru',
+'s1.listrakbi.com',
+'s1.mobile-tracking.gfsrv.net',
+'s1.rotaban.ru',
+'s1.shinystat.com',
+'s1.shinystat.it',
+'s1.slimtrade.com',
+'s1.teknum.com',
+'s1.trafficmaxx.de',
+'s10.hiadspaces.ero-advertising.com',
+'s10.hipaces.ero-advertising.com',
+'s10.his.ero-advertising.com',
+'s10.hispaces.ero-advertising.com',
+'s10.histas.ero-advertising.com',
+'s10.histats.com',
+'s10.histats.com.ero-advertising.com',
+'s10.shinystat.com',
+'s10.sitemeter.com',
+'s109.cnzz.com',
+'s10paces.ero-advertising.com',
+'s11.cnzz.com',
+'s11.sitemeter.com',
+'s12.sitemeter.com',
+'s13.sitemeter.com',
+'s133d7.virtualxs.com',
+'s14.sitemeter.com',
+'s15.sitemeter.com',
+'s16.sitemeter.com',
+'s164.211bs.serving-sys.com.1827.9021.302br.net',
+'s17.cnzz.com',
+'s17.sitemeter.com',
+'s18.sitemeter.com',
+'s19.sitemeter.com',
+'s2.ads.tradeads.eu',
+'s2.focalink.com',
+'s2.forumforfree.com',
+'s2.img.awempire.com',
+'s2.ipicture.ru',
+'s2.rotaban.ru',
+'s2.shinystat.com',
+'s2.shinystat.it',
+'s2.socialannex.com',
+'s2.statcounter.com',
+'s20.sitemeter.com',
+'s21.sitemeter.com',
+'s2143.t.eloqua.com',
+'s22.sitemeter.com',
+'s2206i.categoria.hpg.com.br',
+'s23.sitemeter.com',
+'s24.sitemeter.com',
+'s25.sitemeter.com',
+'s26.topstat.com',
+'s290.meetrics.net',
+'s290.mxcdn.net',
+'s2s.go2affise.com',
+'s2wrw.voluumtrk.com',
+'s3-tracking.synthasite.net.s3.amazonaws.com',
+'s3.buysellads.com',
+'s3.ongsono.com',
+'s3.phluant.com',
+'s3.shinystat.com',
+'s32.research.de.com',
+'s361.meetrics.net',
+'s383.meetrics.net',
+'s3bvd.voluumtrk.com',
+'s3mzd.voluumtrk.com',
+'s3nit.voluumtrk.com',
+'s4.histats.com',
+'s4.shinystat.com',
+'s4.trafficmaxx.de',
+'s48bp.voluumtrk.com',
+'s4candroid.2cnt.net',
+'s4candroidtest.2cnt.net',
+'s4cdotcom.2cnt.net',
+'s4cdotcomtest.2cnt.net',
+'s4cios.2cnt.net',
+'s4ciostest.2cnt.net',
+'s4orw.voluumtrk.com',
+'s4smedia.go2cloud.org',
+'s4snetwork.go2cloud.org',
+'s4tac.voluumtrk.com',
+'s5.ads.tradeads.eu',
+'s5.com',
+'s5.histats.com',
+'s5.shinystat.com',
+'s6.netlogstatic.com',
+'s6.shinystat.com',
+'s62.research.de.com',
+'s6b3m.voluumtrk.com',
+'s6hbo.voluumtrk.com',
+'s6x7y.voluumtrk.com',
+'s7.adaces.ero-advertising.com',
+'s7.addthis.com',
+'s7.cnzz.com',
+'s7.shinystat.com',
+'s73.cnzz.com',
+'s8.shinystat.com',
+'s9.addthis.com',
+'s9.shinystat.com',
+'s90.cnzz.com',
+'s95.research.de.com',
+'s9kpd.voluumtrk.com',
+'sa-receiver.sematext.com',
+'sa.bbc.co.uk',
+'sa.seotoaster.com',
+'sa.squareup.com',
+'sa.windows.com',
+'saaronl.ivwbox.de',
+'saas.appoxee.com',
+'saas.seewhy.com',
+'sabela.com',
+'sabin.free.fr',
+'sact.atdmt.com',
+'sad1.adriver.ru',
+'sadv.dadapro.com',
+'safarids.com',
+'safe.net-az83.stream',
+'safelinking.net',
+'safelinktracker.com',
+'safelists.com',
+'safetracgr.com',
+'salem02.webtrekk.net',
+'salescast.real.com',
+'salesforcecom.tt.omtrdc.net',
+'salesmanager.doubleclick.net',
+'sammix.adsame.com',
+'samsclub.r.delivery.net',
+'sana.newsinc.com',
+'sana.newsinc.com.s3.amazonaws.com',
+'sand-01.adnxs.com',
+'sandbox.outbrain.com',
+'sapremium.go2cloud.org',
+'sarrazinsxkkkyv.download',
+'sassolitesffuzwmv.download',
+'sassvodetba.download',
+'sat.sanoma.fi',
+'sat101.webtrekk.net',
+'satgreera.com',
+'satyridsochasuzk.download',
+'saveology.go2cloud.org',
+'savings-galleria.com',
+'sax.sina.com.cn',
+'saxoniesiqolqoh.download',
+'sayhello.popunder.ru',
+'saymedia.com',
+'sayutracking.co.uk',
+'sb.monetate.net',
+'sb.scorecardresearch.com',
+'sb.sellpoint.net',
+'sb.vevo.com',
+'sb44a.voluumtrk.com',
+'sba.about.co.kr',
+'sbdhealth.go2cloud.org',
+'sbrjgqeppcarbuncle.review',
+'sbs.2cnt.net',
+'sbx.pagesjaunes.fr',
+'sc-a-lbs.focalink.com',
+'sc.ca.us.cddb.com',
+'sc.rvtlife.com',
+'sc.tradetracker.net',
+'sc.tynt.com',
+'sc2bg.voluumtrk.com',
+'sc5pr.voluumtrk.com',
+'sca1.listrakbi.com',
+'scarabaeidpiiwuw.download',
+'scarthspnckx.download',
+'scbl54virared.com',
+'sccqbcwwuoerlikon.review',
+'scd.secureintl.com',
+'scdn.cxense.com',
+'schizopodviicvxvtr.download',
+'scholasticinc.tt.omtrdc.net',
+'schuelvz.ivwbox.de',
+'schumacher.adtech.fr',
+'sciamglobal.112.2o7.net',
+'scleromanongsf.download',
+'sclick.baidu.com',
+'scluvkzgdowel.review',
+'scootloor.com',
+'scorecard.wspisp.net',
+'scores-brataudit.2cnt.net',
+'scores01.2cnt.net',
+'scores02.2cnt.net',
+'scout.haymarketmedia.com',
+'scout.rollcall.com',
+'scptn.voluumtrk.com',
+'scrappykoko.com',
+'scrawliestliopa.download',
+'scrawlymecmxobp.download',
+'screencapturewidget.aebn.net',
+'scribol.com',
+'scrippsfoodnet.112.2o7.net',
+'script.blamads.com',
+'script.crazyegg.com',
+'script.footprintlive.com',
+'script.ioam.de',
+'script.leadboxer.com',
+'script.opentracker.net',
+'script.tailsweep.com',
+'scripts.adrcdn.com',
+'scripts.affiliatefuture.com',
+'scripts.affilired.com',
+'scripts.amateurpin.com',
+'scripts.blamads.com',
+'scripts.blueadvertise.com',
+'scripts.cgispy.com',
+'scripts.chitika.net',
+'scripts.hellobar.com',
+'scripts.insite.com.br',
+'scripts.kiosked.com',
+'scripts.kissmetrics.com',
+'scripts.lycos.com',
+'scripts.psyma.com',
+'scripts.speedshiftmedia.com',
+'scripts.stage.kissmetrics.com',
+'scripts.view-ads.de',
+'scriptshead.com',
+'scrooge.click10.com',
+'scrooge.nbc11.com',
+'scrooge.nbc4.com',
+'scrooge.nbcsandiego.com',
+'scrooge.newsnet5.com',
+'scrooge.thedenverchannel.com',
+'scrooge.theindychannel.com',
+'scrooge.wesh.com',
+'scrooge.wnbc.com',
+'scubajournal.com',
+'scytalesezqaxxr.download',
+'sd.domob.cn',
+'sd.sharethis.com',
+'sda.groupspaces.com',
+'sdc.ca.com',
+'sdc.hns.com',
+'sdc.krollontrack.com',
+'sdc.mako.co.il',
+'sdc.mcafee.com',
+'sdk-b.apptornado.com',
+'sdk.appbrain.com',
+'sdk.justad.mobi',
+'sdkm.w.inmobi.com',
+'sdr.totango.com',
+'sdsbucket.s3.amazonaws.com',
+'sdtimes.us.intellitxt.com',
+'se.adserver.yahoo.com',
+'se.cqcounter.com',
+'sea-u.openx.net',
+'seacoastonlinecom.112.2o7.net',
+'seal.verisign.com',
+'search-images.com',
+'search-results.com',
+'search-results.mobi',
+'search-tracker.com',
+'search.clicksor.com',
+'search.dmtracker.com',
+'search.doubleclick.com',
+'search.doubleclick.net',
+'search.keywordblocks.com',
+'search.media.net',
+'search.opentext.com',
+'search.snap.do',
+'search.spotxchange.com',
+'search.url.com',
+'search.us.com',
+'search.vertoz.com',
+'searchesinteractive.com',
+'searchingresult.com',
+'searchinquire.com',
+'searchlocate.com',
+'searchpeack.com',
+'searchproduction.com',
+'searchramp.com',
+'searchswitch.com',
+'searchtracking.leads.com',
+'searchwebresults.com',
+'searscom.112.2o7.net',
+'searsholdings.tt.omtrdc.net',
+'seawood.org',
+'sebeadmin.justclick.ru',
+'sebgomokos.review',
+'sebowelarger.review',
+'sec.hit.gemius.pl',
+'sec.yimg.com',
+'secimage.adtech.fr',
+'secoptim.com',
+'secrets40.com',
+'secserv.adtech.de',
+'secserv.adtech.fr',
+'secure-ads.pictela.net',
+'secure-assets.rubiconproject.com',
+'secure-au.imrworldwide.com',
+'secure-cdn.mplxtms.com',
+'secure-dcr.imrworldwide.com',
+'secure-ds.serving-sys.com',
+'secure-eu.imrworldwide.com',
+'secure-gl.imrworldwide.com',
+'secure-jp.imrworldwide.com',
+'secure-nz.imrworldwide.com',
+'secure-uk.imrworldwide.com',
+'secure-us.imrworldwide.com',
+'secure-za.imrworldwide.com',
+'secure.ace-tag.advertising.com',
+'secure.adnxs.com',
+'secure.adsender.us',
+'secure.advertising.com',
+'secure.adzerk.net',
+'secure.applifier.com',
+'secure.asiansluttease.com',
+'secure.bidvertiser.com',
+'secure.bigfatjuicylesbians.com',
+'secure.cpaempire.com',
+'secure.download-sponsor.de',
+'secure.eloqua.com',
+'secure.exoclick.com',
+'secure.flashtalking.com',
+'secure.footprint.net',
+'secure.fortuneaffiliates.com',
+'secure.gaug.es',
+'secure.ifbyphone.com',
+'secure.img-cdn.mediaplex.com',
+'secure.leadback.advertising.com',
+'secure.livejasmin.com',
+'secure.medleyads.com',
+'secure.providesupport.com',
+'secure.pubdirecte.com',
+'secure.quantserve.com',
+'secure.redirectportal.com',
+'secure.testoxl.com',
+'secure.webconnect.net',
+'secure.xsrving.com',
+'secure128.go2cloud.org',
+'secure3.go2cloud.org',
+'secureadcenter.com',
+'securejoinsite.com',
+'securejump.net',
+'securemetrics.apple.com',
+'securepaths.com',
+'securepubads.g.doubleclick.net',
+'securestudies.com',
+'securetracking2.com',
+'secursors.com',
+'sedotracker.com',
+'sedotracker.de',
+'seducemvjbklpqi.download',
+'seedingsllobt.download',
+'seethisinaction.com',
+'seevolution.com',
+'seg.sharethis.com',
+'sega.go2cloud.org',
+'segapi.quantserve.com',
+'segment-data.zqtk.net',
+'segment-pixel.invitemedia.com',
+'segment.com',
+'segment.io',
+'segments.adap.tv',
+'segs.btrll.com',
+'seitentipp.com',
+'sekindo.co.il',
+'sekindo.com',
+'select001.adtech.fr',
+'select002.adtech.fr',
+'select003.adtech.fr',
+'select004.adtech.fr',
+'self-destructing-email.com',
+'self-destructing.com',
+'self-destructingemail.com',
+'selfdestructing.com',
+'selfdestructingemail.com',
+'selfdestructingmessage.com',
+'selfnetwork.com',
+'sellads.eu',
+'sem.shopexplorer.com',
+'semrush.com',
+'send.microad.jp',
+'send4fun.com',
+'sengreensbaxsovax.download',
+'senolati.com',
+'senseiproducts.com',
+'sensor.org.ua',
+'seoproofits.justclick.ru',
+'seotoolscentral.com',
+'separatingvqeikpmhz.download',
+'separtnership.com',
+'sergarius.popunder.ru',
+'serializedwzrxrhw.download',
+'serpanel.com',
+'serv.powerofads.com',
+'serv0.com',
+'serve.adplxmd.com',
+'serve.ads.chaturbate.com',
+'serve.adsxgm.com',
+'serve.joylandcasino.com',
+'serve.popads.net',
+'serve.traffic-orgy.com',
+'serve.vdopia.com',
+'serve.williamhill.com',
+'serve.williamhill.it',
+'serve.williamhillcasino.com.27688.9216.302br.net',
+'servecontent.net',
+'servedby.adsfactor.net',
+'servedby.advertising.com',
+'servedby.adxpose.com',
+'servedby.blamads.com',
+'servedby.eleavers.com',
+'servedby.flashtalking.com',
+'servedby.flashtalking.com.16508.9069.302br.net',
+'servedby.flashtalking.com.16510.9069.302br.net',
+'servedby.flashtalking.com.16514.9069.302br.net',
+'servedby.flashtalking.com.16516.9069.302br.net',
+'servedby.flashtalking.com.16518.9069.302br.net',
+'servedby.flashtalking.com.16520.9069.302br.net',
+'servedby.flashtalking.com.16521.9069.302br.net',
+'servedby.flashtalking.com.16522.9069.302br.net',
+'servedby.flashtalking.com.16524.9069.302br.net',
+'servedby.flashtalking.com.16525.9069.302br.net',
+'servedby.flashtalking.com.16526.9069.302br.net',
+'servedby.flashtalking.com.16529.9069.302br.net',
+'servedby.flashtalking.com.16530.9069.302br.net',
+'servedby.flashtalking.com.23979.9167.302br.net',
+'servedby.flashtalking.com.23981.9167.302br.net',
+'servedby.flashtalking.com.23983.9167.302br.net',
+'servedby.flashtalking.com.23989.9167.302br.net',
+'servedby.flashtalking.com.23992.9167.302br.net',
+'servedby.flashtalking.com.23993.9167.302br.net',
+'servedby.flashtalking.com.23994.9167.302br.net',
+'servedby.flashtalking.com.23995.9167.302br.net',
+'servedby.flashtalking.com.24000.9167.302br.net',
+'servedby.flashtalking.com.24001.9167.302br.net',
+'servedby.flashtalking.com.24327.9172.302br.net',
+'servedby.flashtalking.com.63355.9124.302br.net',
+'servedby.flashtalking.com.63356.9124.302br.net',
+'servedby.flashtalking.com.63357.9124.302br.net',
+'servedby.flashtalking.com.63358.9124.302br.net',
+'servedby.flashtalking.com.63359.9124.302br.net',
+'servedby.flashtalking.com.63360.9124.302br.net',
+'servedby.flashtalking.com.63362.9124.302br.net',
+'servedby.flashtalking.com.63364.9124.302br.net',
+'servedby.flashtalking.com.63375.9311.302br.net',
+'servedby.flashtalking.com.63376.9311.302br.net',
+'servedby.flashtalking.com.63377.9311.302br.net',
+'servedby.flashtalking.com.63378.9311.302br.net',
+'servedby.flashtalking.com.63379.9311.302br.net',
+'servedby.flashtalking.com.63380.9311.302br.net',
+'servedby.flashtalking.com.63381.9311.302br.net',
+'servedby.flashtalking.com.63382.9311.302br.net',
+'servedby.flashtalking.com.63384.9311.302br.net',
+'servedby.flashtalking.com.70369.9591.302br.net',
+'servedby.flashtalking.com.70370.9591.302br.net',
+'servedby.flashtalking.com.70371.9591.302br.net',
+'servedby.flashtalking.com.70372.9591.302br.net',
+'servedby.flashtalking.com.70373.9591.302br.net',
+'servedby.flashtalking.com.70374.9591.302br.net',
+'servedby.flashtalking.com.70375.9591.302br.net',
+'servedby.flashtalking.com.70376.9591.302br.net',
+'servedby.flashtalking.com.70380.9591.302br.net',
+'servedby.flashtalking.com.71515.9591.302br.net',
+'servedby.flashtalking.com.71516.9591.302br.net',
+'servedby.flashtalking.com.71517.9591.302br.net',
+'servedby.flashtalking.com.71518.9591.302br.net',
+'servedby.flashtalking.com.71519.9591.302br.net',
+'servedby.flashtalking.com.71520.9591.302br.net',
+'servedby.flashtalking.com.71521.9591.302br.net',
+'servedby.flashtalking.com.71522.9591.302br.net',
+'servedby.flashtalking.com.71523.9591.302br.net',
+'servedby.flashtalking.com.71524.9591.302br.net',
+'servedby.flashtalking.com.71525.9591.302br.net',
+'servedby.flashtalking.com.71526.9591.302br.net',
+'servedby.flashtalking.com.71527.9591.302br.net',
+'servedby.flashtalking.com.71528.9591.302br.net',
+'servedby.flashtalking.com.71529.9591.302br.net',
+'servedby.openxmarket.asia',
+'servedby.openxmarket.jp',
+'servedby.orbisvideo.com',
+'servedby.reviveservers.com',
+'servedby1.advertising.com',
+'servedby2.advertising.com',
+'servedby3.advertising.com',
+'servedbyadbutler.com',
+'servedbyopenx.com',
+'server-au.imrworldwide.com',
+'server-br.imrworldwide.com',
+'server-by.imrworldwide.com',
+'server-de.imrworldwide.com',
+'server-dk.imrworldwide.com',
+'server-ee.imrworldwide.com',
+'server-fi.imrworldwide.com',
+'server-fr.imrworldwide.com',
+'server-hk.imrworldwide.com',
+'server-it.imrworldwide.com',
+'server-jp.imrworldwide.com',
+'server-lt.imrworldwide.com',
+'server-lv.imrworldwide.com',
+'server-no.imrworldwide.com',
+'server-nz.imrworldwide.com',
+'server-oslo.imrworldwide.com',
+'server-pl.imrworldwide.com',
+'server-ru.imrworldwide.com',
+'server-se.imrworldwide.com',
+'server-sg.imrworldwide.com',
+'server-stockh.imrworldwide.com',
+'server-ua.imrworldwide.com',
+'server-uk.imrworldwide.com',
+'server-us.imrworldwide.com',
+'server.adform.net',
+'server.adformdsp.net',
+'server.cpmstar.com',
+'server01.2cnt.net',
+'server02.2cnt.net',
+'server1.streamsend.com',
+'server2.ompinc.com',
+'server3.web-stat.com',
+'serverfarm.continentads.com',
+'serverwatch.de.intellitxt.com',
+'servethis.com',
+'service-stat.tbn.ru',
+'service.adtech.fr',
+'service.clicksvenue.com',
+'service.maxymiser.net',
+'service.sponsorpay.com',
+'service.srvmd60.com',
+'service.urchin.com',
+'service001.adtech.fr',
+'service002.adtech.fr',
+'service003.adtech.fr',
+'service004.adtech.fr',
+'service00x.adtech.fr',
+'services.adtech.fr',
+'services.chartboost.com',
+'services.mailermailer.com',
+'services.serving-sys.com',
+'services.webestools.com',
+'services.wes.df.telemetry.microsoft.com',
+'services.x-traceur.com',
+'services1.adtech.fr',
+'servicetick.com',
+'serving-sys.com.36659.9244.302br.net',
+'serving.adsrevenue.clicksor.net',
+'serving.asdrevenue.clicksor.net',
+'serving.demo.clicksor.net',
+'serving.plexop.net',
+'serw.clicksor.com',
+'serw.myroitracking.com',
+'seselisgqpobnny.download',
+'session-tracker.badcreditloans.com',
+'sessionm.com',
+'seth.avazutracking.net',
+'setihome.com',
+'seto.createsend.com',
+'settings-sandbox.data.microsoft.com',
+'settings-win.data.microsoft.com',
+'seu.cleverreach.com',
+'seventynine.go2cloud.org',
+'sevnhcdshops.review',
+'sexcount.de',
+'sexcounter.com',
+'sexinyourcity.com',
+'sexlist.com',
+'sextracker.com',
+'sextube2.bitterstrawberry.com',
+'sexy.fling.com',
+'sfgybrfoveracting.review',
+'sfl.downloadfilesnow.info',
+'sfl.erw.downloadfilesnow.info',
+'sftp.barb.2cnt.net',
+'sftp.clickability.com',
+'sftrack.searchforce.net',
+'sftwrads.com',
+'sfw.adsafeprotected.com',
+'sg-ssl.effectivemeasure.net',
+'sg.adserver.yahoo.com',
+'sg.akamai.startappservice.com',
+'sg.c.appier.net',
+'sg.d.p.xpanama.net',
+'sg.eu-west-1.p.xpanama.net',
+'sg.eu.p.xpanama.net',
+'sg.geo.p.xpanama.net',
+'sg.p.xpanama.net',
+'sg.us-east-1.p.xpanama.net',
+'sg.us.p.xpanama.net',
+'sg.winmobi.me',
+'sgcdn.duplomediaas.netdna-cdn.com',
+'sgiegeexposture.review',
+'sgiz.mobi',
+'sgs001.adtech.fr',
+'sh.adingo.jp',
+'shadu.duba.net',
+'share.9cdn.net',
+'share.loginradius.com',
+'share.pluso.ru',
+'shareasale.com',
+'shared.9msn.com.au',
+'sharemyclick.go2cloud.org',
+'shedad.com',
+'sheetedgfypgdtws.download',
+'shellersyheaefm.download',
+'sher.index.hu',
+'shfr.hernando.com',
+'shield.sitelock.com',
+'shiltirs.com',
+'shinystat.com',
+'shinystat.it',
+'shinystat.shiny.it',
+'shmonekisot.com',
+'shokala.com',
+'shoogloomobile.go2affise.com',
+'shop.adition.com',
+'shop.gnezdo.ru',
+'shop.zedo.com',
+'shopexplorer.com',
+'shopping-udn-com.b.appier.net',
+'shopping.dailycamera.com',
+'shoppingpartners2.futurenet.com',
+'shorte.st',
+'show-jp1.c.appier.net',
+'show.ctrmanager.com',
+'show.textads.lv',
+'show.yeabble.com',
+'show2.textads.lv',
+'showads.pubmatic.com',
+'showads1000.pubmatic.com',
+'showadsak.pubmatic.com',
+'showcount.honest.com',
+'showm3.com',
+'showroomvip.com',
+'showstat.com',
+'shtuppingxpacoed.download',
+'shufflepointads.go2cloud.org',
+'si.2.cqcounter.com',
+'si.netmng.com',
+'si1.default-homepage-network.com',
+'sibylipmxs.download',
+'sic-akamai.33across.com',
+'sichtbarkeitsindex.de',
+'sictalk.com',
+'sidebar.angelfire.com',
+'sidebar.issuu.com',
+'sifyimg.edgesuite.net',
+'sifyimg.speedera.net',
+'sig.gamerdna.com',
+'sigma0.rtb.appier.net',
+'sigma1.rtb.appier.net',
+'sigma10.rtb.appier.net',
+'sigma100.rtb.appier.net',
+'sigma11.rtb.appier.net',
+'sigma111.rtb.appier.net',
+'sigma12.rtb.appier.net',
+'sigma126.rtb.appier.net',
+'sigma132.rtb.appier.net',
+'sigma22.rtb.appier.net',
+'sigma23.rtb.appier.net',
+'sigma26.rtb.appier.net',
+'sigma27.rtb.appier.net',
+'sigma51.rtb.appier.net',
+'sigma52.rtb.appier.net',
+'sigma63.rtb.appier.net',
+'sigma67.rtb.appier.net',
+'sigma69.rtb.appier.net',
+'sigma72.rtb.appier.net',
+'sigma73.rtb.appier.net',
+'sigma74.rtb.appier.net',
+'sigma76.rtb.appier.net',
+'sigma79.rtb.appier.net',
+'sigma84.rtb.appier.net',
+'sigma85.rtb.appier.net',
+'sigma89.rtb.appier.net',
+'sigma94.rtb.appier.net',
+'sigma97.rtb.appier.net',
+'signaltrader.go2cloud.org',
+'signpost.go2cloud.org',
+'signup.clicksor.com',
+'siliconaction.com',
+'silverpush.com',
+'silversol.go2affise.com',
+'sim.thetrafficstat.net',
+'simg.sinajs.cn',
+'simg.zedo.com',
+'similezfzycz.download',
+'simonsearch.com',
+'simpailoppvw.download',
+'simplehitcounter.com',
+'simpleonlinemedia.go2cloud.org',
+'simplistssxshrgh.download',
+'simyo.adclear.net',
+'sin.ero-advertising.com',
+'singaporeair-com.b.appier.net',
+'sired.com',
+'site-stats.com',
+'site-stats.i8.com',
+'site-submit.com.ua',
+'siteanalyser.yellgroup.com',
+'siteauikozph.download',
+'sitedirectory.doubleclick.net',
+'siteflow.com',
+'siteinfo.libero.it',
+'siteintercept.qualtrics.com',
+'sitelife.ehow.com',
+'sitemeter.com',
+'siteminer.mycomputer.com',
+'siteminer.superstats.com',
+'sitepal.com',
+'sites.chartboost.com',
+'sitesearch.hitbox.com',
+'sitesell.com',
+'sitestat.com',
+'sitestat.hetnet.nl',
+'sitestats.com',
+'sitestats.tiscali.co.uk',
+'sitestatz.com',
+'sitetagger.co.uk',
+'sitetracker.com',
+'sixpackshortcuts.go2cloud.org',
+'sj-g-lbs.focalink.com',
+'sj1.lenta.ru',
+'sj2.lenta.ru',
+'sj3.lenta.ru',
+'sj4.lenta.ru',
+'sjc-g007.us.intellitxt.com',
+'sjs.bizographics.com',
+'sk.connect2.ws',
+'skilljam.com',
+'skimlinks.com',
+'skinhead.com',
+'sklentedjibkmbouo.download',
+'skwheunderlines.review',
+'skyandroid.2cnt.net',
+'skydotcom.2cnt.net',
+'skyhookwireless.com',
+'skyhorn.com',
+'skyios.2cnt.net',
+'skyligh.co',
+'skype.tt.omtrdc.net',
+'skypronz6j.s.ad6media.fr',
+'skyrocketingmedia.go2cloud.org',
+'sl3tsw6.com',
+'slashphone.us.intellitxt.com',
+'sleepcartoon.com',
+'slfnmzblblowsy.review',
+'slfpu.com',
+'slimtrade.com',
+'slingersdlbrbhjs.download',
+'slinse.com',
+'sls.go2cloud.org',
+'slushingfcikpfvjt.download',
+'slzppcgzheuristic.review',
+'sm.banner-link.com.br',
+'sm.domob.cn',
+'sm1.sitemeter.com',
+'sm2.sitemeter.com',
+'sm3.sitemeter.com',
+'sm4.sitemeter.com',
+'sm5.sitemeter.com',
+'sm6.sitemeter.com',
+'sm7.sitemeter.com',
+'sm8.sitemeter.com',
+'sm9.sitemeter.com',
+'sma.punto.net',
+'smaato.net',
+'smart-ip.net',
+'smart.allocine.fr',
+'smart.montiera.com',
+'smart.theadsnet.com',
+'smart2.allocine.fr',
+'smartadserver.com',
+'smartadv.ru',
+'smartbrowse.netster.com',
+'smartdevicemedia.com',
+'smartdirect.com',
+'smarticon.geotrust.com',
+'smartmediamarketing.go2cloud.org',
+'smartoffer.site',
+'smarttracks2.smarttracks.net',
+'smarttrk.com',
+'smetrics.att.com',
+'smetrics.blackberry.com',
+'smetrics.comcast.com',
+'smetrics.delta.com',
+'smetrics.fifa.com',
+'smetrics.mcafee.com',
+'smetrics.npr.org',
+'smetrics.payback.de',
+'smetrics.southwest.com',
+'smetrics.starwoodhotels.com',
+'smetrics.toptenreviews.com',
+'smfgroup.cjb.net',
+'smilepop.com',
+'smirchedsapkthxmy.download',
+'smjmp.net',
+'smockingbjyvmh.download',
+'smoochjmxptj.download',
+'smoothedqwcpw.download',
+'smoothscrollapp.com',
+'smp.adviva.net',
+'sms-mmm.com',
+'sms.otair.com',
+'sms18.in.com',
+'smssts.3g.cn',
+'smtp.ero-advertising.com',
+'smtp.kissmetrics.com',
+'smtp.mobpartner.mobi',
+'smtp.performancerevenues.com',
+'smtp.yeahmobi.com',
+'smtp.zedo.com',
+'smtrack.go2affise.com',
+'smurringdimmv.download',
+'smwww.112.2o7.net',
+'snapabug.appspot.com',
+'snapengage.com',
+'snapify.go2cloud.org',
+'sndkorea.co.kr',
+'sndkorea.nowcdn.co.kr',
+'snimi-sam.justclick.ru',
+'snowmenwwrotgud.download',
+'soa.adition.com',
+'soadev.adition.com',
+'soaold.adition.com',
+'soaperformance.adition.com',
+'soastage.adition.com',
+'soav1.adition.com',
+'soccer.searchwho.com',
+'social.msgplus.net',
+'social1listnews.com',
+'socialize-it.com',
+'socialschanche.com',
+'socialskive.com',
+'sociomantic.com',
+'socitm.govmetric.com',
+'soclock.com',
+'sofa.bankofamerica.com',
+'sofia.ai',
+'softcash.biz',
+'softclick.com.br',
+'softcore.xxxcounter.com',
+'softlayertechnologie.tt.omtrdc.net',
+'softlinkers.popunder.ru',
+'softonic.112.2o7.net',
+'softonic.us.intellitxt.com',
+'softpedia.uk.intellitxt.com',
+'software.xoomcounter.com',
+'softwares.timesink.com',
+'sohh.us.intellitxt.com',
+'sokrates.adtech.fr',
+'soldi.msn.it',
+'solidclix.go2cloud.org',
+'solutions.tradedoubler.com',
+'solutionswide.go2cloud.org',
+'soma.smaato.net',
+'somethingawful.us.intellitxt.com',
+'somniture.theglobeandmail.com',
+'somt.honda.com',
+'sony.demdex.net',
+'soogiedsoafm.download',
+'soothsitlppfwm.download',
+'sororiallyfdnstbxp.download',
+'sosharpcorporation.go2cloud.org',
+'soundadgroup.go2cloud.org',
+'soundbeat.go2cloud.org',
+'soundslam.us.intellitxt.com',
+'sousquywpscd.download',
+'southwestairlines.tt.omtrdc.net',
+'sovetnik.go2cloud.org',
+'sp.analytics.yahoo.com',
+'spacash.com',
+'spaces.ero-advertising.com',
+'spaces.slimspots.com',
+'spad.i-mobile.co.jp',
+'spade.twitch.tv',
+'spanids.reference.com',
+'spanksvrfvabcuq.download',
+'sparkimg.com',
+'sparknetworks.112.2o7.net',
+'spc.ceahcdiflefhadbgigaheffe.iban.telemetryverification.net.47289.9351.302br.net',
+'spc.cefdfgjcdedhnejehfdekfad.iban.telemetryverification.net.47290.9351.302br.net',
+'spc.cegeihmgcfefpedefemeogbe.iban.telemetryverification.net.47544.9351.302br.net',
+'spc.cejhbebefgneifcekhfgggff.iban.telemetryverification.net.47287.9351.302br.net',
+'spd.atdmt.com',
+'spd.atdmt.speedera.net',
+'spd.pointroll.com',
+'spdeliver.i-mobile.co.jp',
+'spdeliverp.i-mobile.co.jp',
+'spe.atdmt.com',
+'special-news.online',
+'specialoffers.aol.com',
+'specific-match.dotomi.com',
+'specificads.go2affise.com',
+'specificmedia.com',
+'specificpop.com',
+'spectato.com',
+'speed.pointroll.com',
+'speed4cksa.ero-advertising.com',
+'speedclecks.ero-advertising.com',
+'speedclicks.ero-advertising.com',
+'speedclics.ero-advertising.com',
+'speedlicks.ero-advertising.com',
+'speednetwork6.adk2x.com',
+'speedtrap.shopdirect.com',
+'speeuclicks.ero-advertising.com',
+'sperse.com',
+'spezialreporte.de',
+'spicymobile.go2affise.com',
+'spiegel.met.vgwort.de',
+'spiegel.rce.veeseo.com',
+'spin.spinbox.net',
+'spinbox.techtracker.com',
+'spinbox.versiontracker.com',
+'spixel.adsafeprotected.com',
+'spixl.ivwbox.de',
+'spixlcont.ivwbox.de',
+'splash.appsgeyser.com',
+'splashpageadvertising.com',
+'splatzmmkvu.download',
+'splitter.ndsplitter.com',
+'sponsorads.de',
+'sponsorpay.com',
+'sponsors.thoughtsmedia.com',
+'sponsors.webosroundup.com',
+'sponsorships.net',
+'spoods.rce.veeseo.com',
+'sport.xoomcounter.com',
+'sportingbet-affiliate.host.bannerflow.com',
+'sports.ign.us.intellitxt.com',
+'spotexchange.com',
+'spotlight.accuweather.com',
+'spots.ah-me.com',
+'spotsniper.ru',
+'springboardplatform.com',
+'springer02.webtrekk.net',
+'sprint.r.delivery.net',
+'sprung.go2cloud.org',
+'spycash.biz',
+'spyhunter-download.s3.amazonaws.com',
+'spyingjplnda.download',
+'spykemedia.go2cloud.org',
+'spylog.com',
+'spylog.ru',
+'spymac.us.intellitxt.com',
+'spynet2.microsoft.com',
+'spytrack.tic.ru',
+'spyware.homestead.com',
+'spywarelabs.com',
+'spywarenuker.com',
+'sq2trk2.com',
+'sql.doublepimp.com',
+'sqm.df.telemetry.microsoft.com',
+'sqm.telemetry.microsoft.com',
+'sqm.telemetry.microsoft.com.nsatc.net',
+'squareandcircle.go2affise.com',
+'squarenessqyecvdn.download',
+'squarespace.evyy.net',
+'squashyrsewa.download',
+'sr.adrevolver.com',
+'src.kitcode.net',
+'srf.wemfbox.ch',
+'sronline.ivwbox.de',
+'srs.targetpoint.com',
+'srv-2015-01-12-10.pixel.parsely.com',
+'srv.admailtiser.com',
+'srv.buysellads.com',
+'srv.clickfuse.com',
+'srv.de.ebayrtm.com',
+'srv.dynamicyield.com',
+'srv.nwave.de',
+'srv.sayyac.net',
+'srv.tonefuse.com',
+'srv.tyroodr.com',
+'srv1.bannercommunity.de',
+'srv18.xmediaserve.com',
+'srv2cnt.2cnt.net',
+'srv2cnt2.2cnt.net',
+'srv2trking.com',
+'srv3.adnetworkme.com',
+'srv3.bannercommunity.de',
+'srv6.admedit.me',
+'srv6.mobpedia.com',
+'srvjs.media.net',
+'srvpub.com',
+'srx.at.ebayrtm.com',
+'srx.au.ebayrtm.com',
+'srx.befr.ebayrtm.com',
+'srx.benl.ebayrtm.com',
+'srx.ca.ebayrtm.com',
+'srx.cafr.ebayrtm.com',
+'srx.ch.ebayrtm.com',
+'srx.de.ebayrtm.com',
+'srx.es.ebayrtm.com',
+'srx.fr.ebayrtm.com',
+'srx.ie.ebayrtm.com',
+'srx.in.ebayrtm.com',
+'srx.it.ebayrtm.com',
+'srx.main.ebayrtm.com',
+'srx.nl.ebayrtm.com',
+'srx.pl.ebayrtm.com',
+'srx.sg.ebayrtm.com',
+'srx.uk.ebayrtm.com',
+'ss.c.appier.net',
+'ss.linksynergy.com',
+'ss.tiscali.it',
+'ss.xxxnavy.com',
+'ss2.zedo.com',
+'ssangyong.co.il',
+'sscdn.banners.advidi.com',
+'ssdk.adkmob.com',
+'ssh.kissmetrics.com',
+'sshowads.pubmatic.com',
+'ssi.go2cloud.org',
+'ssl-i.2cnt.net',
+'ssl-munchkin.marketo.net',
+'ssl-offloader.2cnt.net',
+'ssl-static.vinsight.de',
+'ssl-stats.wordpress.com',
+'ssl-stumbleupon-com-ded5f3.c-col.com',
+'ssl-test.2cnt.net',
+'ssl-vg03.met.vgwort.de',
+'ssl-vpn.cutterbuck.com',
+'ssl-vznetzme.ivwbox.de',
+'ssl-vznetzst.ivwbox.de',
+'ssl-youtube.2cnt.net',
+'ssl.clickbank.net',
+'ssl.google-analytics.com',
+'ssl.linksynergy.com',
+'ssl.luckyorange.com',
+'ssl.safepoollink.com',
+'ssl.webserviceaward.com',
+'ssl.xplosion.de',
+'sslad.adcash.com',
+'ssljscdn.airbrake.io',
+'sso.conduit.com',
+'ssp.sellads.me',
+'sstatic1.histats.com',
+'sstats.adobe.com',
+'sstats.economist.com',
+'ssum-sec.casalemedia.com',
+'sszomsa.imdrv.net',
+'st-ops.stage.adition.com',
+'st.a-link.co.kr',
+'st.bebi.com',
+'st.blogads.com',
+'st.dynamicyield.com',
+'st.ladycash.ru',
+'st.listrak.com',
+'st.madisonlogic.com',
+'st.magnify.net',
+'st.mirror.co.uk',
+'st.pay-click.ru',
+'st.pc.adonweb.ru',
+'st.penis-size.net',
+'st.shinobi.jp',
+'st.wetrack.it',
+'st.xhamster.com',
+'st1.freeonlineusers.com',
+'st2-img.recreativ.ru',
+'st2.xhamster.com',
+'st3.xhamster.com',
+'st4.xhamster.com',
+'st5.surf-town.net',
+'sta.ifeng.com',
+'stadig.ifeng.com',
+'stadtbremerhaven.digidip.net',
+'staffpicks.outbrain.com',
+'stag.tivinci.com',
+'stage.alphagirlz.mobi',
+'stage.ap1.alphagirlz.mobi',
+'stage.ap2.alphagirlz.mobi',
+'stage.hitbox.com',
+'stage.traffiliate.com',
+'stage102.hitbox.com',
+'stage39media.go2cloud.org',
+'staging-beacon-1.newrelic.com',
+'staging-goldcrown.linkshare.com',
+'staging-hallmark.linkshare.com',
+'staging.50onred.com',
+'staging.adition.com',
+'staging.luckyorange.com',
+'staging.rts.doublepimp.com',
+'staging.rts.phn.doublepimp.com',
+'staging.streamate.doublepimp.com',
+'stags.bluekai.com',
+'staples.tt.omtrdc.net',
+'star.pulseonclick.com',
+'starchedlyyvlbyt.download',
+'stare.adrevolver.com',
+'stargamesaffiliate.com',
+'starsads.com',
+'start.freeze.com',
+'start.xxxcounter.com',
+'startapp.com',
+'startapp.go2cloud.org',
+'startappexchange.com',
+'starwoodhotelsandres.tt.omtrdc.net',
+'stat.4u.pl',
+'stat.acca.it',
+'stat.adlabs.ru',
+'stat.appsgeyser.com',
+'stat.caijing.com.cn',
+'stat.clichehosting.de',
+'stat.cybermonitor.com',
+'stat.dealtime.com',
+'stat.flashtalking.com',
+'stat.freetool.it',
+'stat.funshion.net',
+'stat.gw.youmi.net',
+'stat.hudong.com',
+'stat.info-stream.net',
+'stat.iteye.com',
+'stat.mtv3.fi',
+'stat.nebula168.com',
+'stat.onestat.com',
+'stat.pl',
+'stat.ppstream.com',
+'stat.prsmedia.fr',
+'stat.ringier.cz',
+'stat.ringier.sk',
+'stat.rum.cdnvideo.ru',
+'stat.ruvr.ru',
+'stat.segitek.hu',
+'stat.simba.taobao.com',
+'stat.tianya.cn',
+'stat.tvigle.ru',
+'stat.uptodown.com',
+'stat.uuu9.com',
+'stat.vidcore.tv',
+'stat.web-regie.com',
+'stat.webmedia.pl',
+'stat.webtrack.biz',
+'stat.www.fi',
+'stat.zenon.net',
+'stat.zol.com.cn',
+'stat1.vipstat.com',
+'stat1.z-stat.com',
+'stat2.cybermonitor.com',
+'stat24.meta.ua',
+'stat3.cybermonitor.com',
+'stat4.edev.at',
+'statcollector.sidearmsports.com',
+'statcounter.com',
+'statdb.pressflex.com',
+'stateresolver.link',
+'stathat.com',
+'static-analytics.nativeads.com',
+'static-cdn.anetwork.ir',
+'static-rtb.adkernel.com',
+'static-trackers.adtarget.me',
+'static-www.ec.popcap.com',
+'static.2mdn.net',
+'static.3-mobiappu.com',
+'static.acs86.com',
+'static.addinto.com',
+'static.addynamo.net',
+'static.adfarm1.adition.com',
+'static.ads.crakmedia.com',
+'static.adsafeprotected.com',
+'static.adsender.us',
+'static.adsnative.com',
+'static.adzerk.net',
+'static.adziff.com',
+'static.affilae.com',
+'static.akamai.startappexchange.com',
+'static.alimama.com',
+'static.ap.bittorrent.com',
+'static.app.widdit.com',
+'static.application-77my.com',
+'static.appwatch.com',
+'static.atdmt.com.24293.9170.302br.net',
+'static.atdmt.com.24299.9170.302br.net',
+'static.atdmt.com.24492.9179.302br.net',
+'static.atdmt.com.24495.9179.302br.net',
+'static.atdmt.com.67997.9528.302br.net',
+'static.atdmt.com.68423.9546.302br.net',
+'static.atdmt.com.75273.9615.302br.net',
+'static.atomload.at',
+'static.audienceinsights.net',
+'static.awempire.com',
+'static.bannerbank.ru',
+'static.beintoo.com',
+'static.chartbeat.com',
+'static.chartboost.com',
+'static.clickpapa.com',
+'static.clixsense.com',
+'static.clmbtech.com',
+'static.contactme.com',
+'static.crakbanner.com',
+'static.criteo.com',
+'static.criteo.net',
+'static.csbew.com',
+'static.dcoengine.com',
+'static.digidip.net',
+'static.doubleclick.com',
+'static.doubleclick.net',
+'static.doubleclick.net.12022.9038.302br.net',
+'static.doubleclick.net.12026.9038.302br.net',
+'static.doubleclick.net.12035.9038.302br.net',
+'static.doubleclick.net.12467.9038.302br.net',
+'static.doubleclick.net.30351.9240.302br.net',
+'static.doubleclick.net.36066.9275.302br.net',
+'static.doubleclick.net.37659.9298.302br.net',
+'static.doubleclick.net.37674.9298.302br.net',
+'static.doubleclick.net.40322.9309.302br.net',
+'static.doubleclick.net.51235.9318.302br.net',
+'static.doubleclick.net.51253.9318.302br.net',
+'static.doubleclick.net.67594.9515.302br.net',
+'static.doubleclick.net.76539.9544.302br.net',
+'static.eplayer.performgroup.com',
+'static.estebull.com',
+'static.etracker.com',
+'static.everyone.net',
+'static.everyplay.com',
+'static.exoclick.com',
+'static.firstmobilecash.com',
+'static.fmpub.net',
+'static.fragbite.com',
+'static.freewebs.getclicky.com',
+'static.getclicky.com',
+'static.getkudos.me',
+'static.groupon.co.uk',
+'static.hoptopboy.com',
+'static.hotjar.com',
+'static.htmlhubing.xyz',
+'static.hubspot.com',
+'static.hupso.com',
+'static.ifa.camads.net',
+'static.it.groupon-content.net',
+'static.itrack.it',
+'static.kameleoon.com',
+'static.kinghost.com',
+'static.kinley.com',
+'static.l3.cdn.adbucks.com',
+'static.live2delivery.com',
+'static.livejasmin.com',
+'static.mailchimp.com',
+'static.manwin.doublepimp.com',
+'static.matchnet.com',
+'static.mb89-live.com',
+'static.mediav.com',
+'static.mmotraffic.com',
+'static.mobilecore.com',
+'static.ngbn.net',
+'static.nrelate.com',
+'static.parse.ly',
+'static.parsely.com',
+'static.plista.com',
+'static.plugrush.com',
+'static.promo2.tubemogul.com.1748.9016.302br.net',
+'static.pubdirecte.com',
+'static.resetamobil.com',
+'static.rpxnow.com',
+'static.rts.doublepimp.com',
+'static.rts.phn.doublepimp.com',
+'static.salesresourcepartners.com',
+'static.serving-sys.com.47157.9349.302br.net',
+'static.shiltirs.com',
+'static.slfpu.com',
+'static.smsac.net.edgesuite.net',
+'static.streamate.doublepimp.com',
+'static.styria-digital.com',
+'static.t4btv.com',
+'static.teasermedia.net',
+'static.theadex.com',
+'static.thumbr.com',
+'static.tradetracker.net',
+'static.traffe.eu',
+'static.trafficjunky.net',
+'static.uolcontent.com',
+'static.verticalscope.com',
+'static.vinsight.de',
+'static.vpptechnologies.com',
+'static.whoopalook.com',
+'static.xpct.de',
+'static.yieldmo.com',
+'static.zangocash.com',
+'static.zanox.com',
+'static.zedo.com',
+'static.ziffdavis.com',
+'static0.awempire.com',
+'static1.awempire.com',
+'static1.baifendian.com',
+'static2.amateurpin.net',
+'static2.chartbeat.com',
+'staticadm.leju.sina.com.cn',
+'staticads.btopenworld.com',
+'staticrr.paleokits.net',
+'staticrr.sslsecure1.com',
+'statistic.qzone.qq.com',
+'statistics.crowdynews.com',
+'statistics.infowap.info',
+'statistics.rbi-nl.com',
+'statistics.tattermedia.com',
+'statistics.wibiya.com',
+'statistik-gallup.net',
+'statistik.simaja.de',
+'statm.the-adult-company.com',
+'statonly.com',
+'stats-ec2-46-137-101-227.layar.com',
+'stats.aatrk.com',
+'stats.adobe.com',
+'stats.adotube.com',
+'stats.adsender.us',
+'stats.adspaces.ero-advertising.com',
+'stats.adultplex.com',
+'stats.adultrevenueservice.com',
+'stats.applifier.com',
+'stats.appsgeyser.com',
+'stats.ars4real.com',
+'stats.avg.com',
+'stats.bbc.co.uk',
+'stats.betradar.com',
+'stats.binki.es',
+'stats.bitgravity.com',
+'stats.blogg.se',
+'stats.blogger.com',
+'stats.bmw.de',
+'stats.buysellads.com',
+'stats.cashring.com',
+'stats.cdn.pfn.bz',
+'stats.channel4.com',
+'stats.cheatscodesguides.com',
+'stats.christianpost.com',
+'stats.clear-media.com',
+'stats.clickability.com',
+'stats.clickforknowledge.com',
+'stats.clicktracks.com',
+'stats.computecmedia.de',
+'stats.comunio.de',
+'stats.coolwebsearch.com',
+'stats.coronalabs.com',
+'stats.cts-bv.nl',
+'stats.cubi.me',
+'stats.dallasnews.com',
+'stats.data2.ero-advertising.com',
+'stats.digital-natives.de',
+'stats.directnic.com',
+'stats.distributed.net',
+'stats.dlx-media.com',
+'stats.ebay.com',
+'stats.empowher.com',
+'stats.ero-advertising.com',
+'stats.esomniture.com',
+'stats.espncricinfo.com',
+'stats.examiner.com',
+'stats.fastcompany.com',
+'stats.fileplanet.com',
+'stats.fittkaumaass.de',
+'stats.frankfurterneuepresse.de',
+'stats.g.doubleclick.net',
+'stats.gammacash.com',
+'stats.gbvanalytics.com',
+'stats.geegain.com',
+'stats.gohip.com',
+'stats.greenpixels.com',
+'stats.grok.se',
+'stats.groupninetyfour.com',
+'stats.harpercollins.com',
+'stats.hickoryfarms.com',
+'stats.highwire.com',
+'stats.hitbox.com',
+'stats.homestead.com',
+'stats.homestead.net',
+'stats.hosting24.com',
+'stats.ilius.net',
+'stats.immense.net',
+'stats.inergizedigitalmedia.com',
+'stats.inter-it.nl',
+'stats.irishmirror.ie',
+'stats.itsol.it',
+'stats.iwebtrack.com',
+'stats.justad.mobi',
+'stats.justin.tv',
+'stats.kaltura.com',
+'stats.lnol.com.ar',
+'stats.macmillanusa.com',
+'stats.mako.co.il',
+'stats.manticoretechnology.com',
+'stats.matomy.com',
+'stats.maximumcash.com',
+'stats.metacount.com',
+'stats.miarroba.info',
+'stats.milenio.com',
+'stats.mirror.co.uk',
+'stats.nascar.com',
+'stats.net',
+'stats.netbopdev.co.uk',
+'stats.netnorth.co.uk',
+'stats.nomade.fr',
+'stats.norton.com',
+'stats.nutritiondata.com',
+'stats.orangemail.orange.fr',
+'stats.ourstats.de',
+'stats.outster.com',
+'stats.partypoker.com',
+'stats.paste2.org',
+'stats.paycounter.com',
+'stats.pflexads.com',
+'stats.piaggio.com',
+'stats.pingdom.com',
+'stats.polldaddy.com',
+'stats.popcap.com',
+'stats.popuptraffic.com',
+'stats.profileponds.com',
+'stats.propublica.org',
+'stats.pusher.com',
+'stats.rcsobjects.it',
+'stats.remoteserver.pw',
+'stats.sawlive.tv',
+'stats.scholastic.com',
+'stats.sextracker.com',
+'stats.sharenet.co.za',
+'stats.shoppydoo.com',
+'stats.sitegauge.bizland.com',
+'stats.sitesuite.org',
+'stats.skyhookwireless.com',
+'stats.skyhorn.com',
+'stats.slideshare.net',
+'stats.smartbucks.com',
+'stats.smartclip.net',
+'stats.speedclicks.ero-advertising.com',
+'stats.storify.com',
+'stats.superstats.com',
+'stats.superstats.de',
+'stats.superstats.nl',
+'stats.surf-town.net',
+'stats.technopia.it',
+'stats.teledyski.info',
+'stats.tubemogul.com',
+'stats.united-domains.de',
+'stats.unity3d.com',
+'stats.uswitch.com',
+'stats.valaffiliates.com',
+'stats.vertriebsassistent.de',
+'stats.viddler.com',
+'stats.virtuemart.net',
+'stats.walesonline.co.uk',
+'stats.warenform.de',
+'stats.webnext.com',
+'stats.webs.com',
+'stats.webstarts.com',
+'stats.wired.com',
+'stats.wittyfeed.com',
+'stats.wordpress.com',
+'stats.wp.com',
+'stats.wwd.com',
+'stats.www.ibm.com',
+'stats0.one.ru',
+'stats1.clicktracks.com',
+'stats1.one.ru',
+'stats1.porntrack.com',
+'stats1.tune.pk',
+'stats1x1.kapaza.be',
+'stats2.algo.at',
+'stats2.clicktracks.com',
+'stats2.one.ru',
+'stats2.porntrack.com',
+'stats3.porntrack.com',
+'stats4.porntrack.com',
+'stats4you.com',
+'statsadv.dadapro.com',
+'statsdev.treesd.com',
+'statse.webtrendslive.com',
+'statt-collect.herokuapp.com',
+'stattds.club',
+'stattrax.com',
+'statuncore.com',
+'status.kissmetrics.com',
+'statystyki.panelek.com',
+'statz.123ads.nl',
+'stbt.coupons.com',
+'stcb.admailtiser.com',
+'stcollection.moneysupermarket.com',
+'steakafka.pro',
+'stepank.justclick.ru',
+'stepstone.112.2o7.net',
+'ster.2cnt.net',
+'stern.met.vgwort.de',
+'sternvtest.2cnt.net',
+'stiltyulrmms.download',
+'stiriprotv.2cnt.net',
+'storage.cloud.kargo.com',
+'storage.conduit.com',
+'storage.creative-mobile.com',
+'storage.outbrain.com',
+'storage.psstgccint.com',
+'store.greatdealnews.com',
+'store.lavasoft.com',
+'storedsearch.com',
+'storewidget.pcauthority.com.au',
+'storm.applifier.com',
+'straightschool.com',
+'strategy.com',
+'stratoshear.go2cloud.org',
+'stream.aff-id.com',
+'stream.tribeca.vidavee.com',
+'stream4u.me',
+'streamagent.sensic.net',
+'streamcastnetworks.com',
+'streaming-illimite5.com',
+'stretchywrrbzwg.download',
+'strikeadcdn.s3.amazonaws.com',
+'strk.enlnks.com',
+'strookepvwkv.download',
+'stroutstlwvrss.download',
+'strtrk.go2cloud.org',
+'struct.nt-com.co',
+'stubbierrjdassboo.download',
+'studio.doubleclick.com',
+'studio.doubleclick.net',
+'studivz.adfarm1.adition.com',
+'stun.xpanama.net',
+'stuntoffer.com',
+'stuttest.ivwbox.de',
+'stvdotcom.2cnt.net',
+'stvdotcomtest.2cnt.net',
+'stx.banners.sextracker.com',
+'stx.sextracker.com',
+'stx0.sextracker.com',
+'stx1.sextracker.com',
+'stx10.sextracker.com',
+'stx11.sextracker.com',
+'stx12.sextracker.com',
+'stx13.sextracker.com',
+'stx14.sextracker.com',
+'stx15.sextracker.com',
+'stx16.sextracker.com',
+'stx2.sextracker.com',
+'stx3.sextracker.com',
+'stx4.sextracker.com',
+'stx5.sextracker.com',
+'stx6.sextracker.com',
+'stx7.sextracker.com',
+'stx8.sextracker.com',
+'stx9.sextracker.com',
+'stxbans.sextracker.com',
+'style2.ad6.fr',
+'su.addthis.com',
+'su600.com',
+'subchanterpjiyqc.download',
+'subeditorsoqltcxf.download',
+'subfuscsoweaucss.download',
+'submitexpress.co.uk',
+'subs.flixhangar.com',
+'subsoilsolvhikahb.download',
+'success.act-on.com',
+'success123.com',
+'successalert.com',
+'successetc.go2cloud.org',
+'sueddeut.ivwbox.de',
+'suez.xpanama.net',
+'sugar.gameforge.com',
+'suggest.infospace.com',
+'sugoicounter.com',
+'sun3xani.justclick.ru',
+'suncom.112.2o7.net',
+'suncountryair.com',
+'sunglobal.112.2o7.net',
+'sunnssgybqn.download',
+'sunonesearch.112.2o7.net',
+'sunopenoffice.112.2o7.net',
+'suo.lp.mydas.mobi',
+'superadmin.adition.com',
+'superfish.com',
+'superloofy.com',
+'superprofit.justclick.ru',
+'supersonicads.com',
+'superstats.com',
+'superstats.de',
+'superstats.nl',
+'supertop100.com',
+'supply.upjers.com',
+'support.crittercism.com',
+'support.hasoffers.com',
+'support.kissmetrics.com',
+'support.leadbolt.com',
+'support.mobpartner.com',
+'support.publicrand.org',
+'support.skyhookwireless.com',
+'surebaby.us.intellitxt.com',
+'surehits.com',
+'sureonlinefind.com',
+'sureseeker.com',
+'surezilla.go2cloud.org',
+'surfers.ro',
+'surfingprizes.com',
+'surgelesssomdpninp.download',
+'survey.112.2o7.net',
+'survey.122.2o7.net',
+'survey.com-annualsurvey.info',
+'survey.foreseeresults.com',
+'survey.g.doubleclick.net',
+'survey.interquest.com',
+'survey.ivwbox.de',
+'surveyfocus.com',
+'surveylogix.com',
+'surveymanager.com',
+'surveynetworks.com',
+'surveys.cnet.com',
+'surveysavvy.com',
+'susi.adtech.fr',
+'suthome.com',
+'suvinleo.justclick.ru',
+'svast.moatads.com',
+'svastx.moatads.com',
+'svc-analytics.adkernel.com',
+'svpro7.oewabox.at',
+'svr1.unicaondemand.com',
+'svsub.com',
+'swa.demdex.net',
+'swag.go2cloud.org',
+'swaggeredvflzknyhf.download',
+'sweeneyxuumfdw.download',
+'sweepstakes.com',
+'sweetpacks.go2cloud.org',
+'swellisholupo.download',
+'swift.com',
+'swimsuitnetwork.com',
+'switch.atdmt.com',
+'switch.atdmt.net',
+'swww.sc.pages02.net',
+'swx.domob.cn',
+'sx.thrnt.com',
+'syllabusqhlloohss.download',
+'symantec.tt.omtrdc.net',
+'sympmsnsports.112.2o7.net',
+'synad.nuffnang.com.my',
+'synad2.nuffnang.com.my',
+'synad2.nuffnang.com.ph',
+'sync.1rx.io',
+'sync.adap.tv',
+'sync.adaptv.advertising.com',
+'sync.go.sonobi.com',
+'sync.mathtag.com',
+'sync.mookie1.cn',
+'sync.teads.tv',
+'syndicate.payloadz.com',
+'syndicate.powerofads.com',
+'syndication-evo.exoclick.com',
+'syndication.adlandmark.com',
+'syndication.cntrafficpro.com',
+'syndication.dtcn.com',
+'syndication.exoclick.com',
+'syndication.globaltraffico.com',
+'syndication.jobthread.com',
+'syndication.loganmueller.info',
+'syndication.openapi.naver.com',
+'syndication.teleborsa.it',
+'syndication.theguardian.com',
+'syndication.traffichaus.com',
+'syndication.universalnightlife.com',
+'syndication.voodoo.com',
+'syndication1.traffichaus.com',
+'synergetic.de',
+'synthes.vo.llnwd.net',
+'sys.itop.cz',
+'sys.osttirol-online.at',
+'sysprobs.us.intellitxt.com',
+'system.picreel.com',
+'systemmonitoring.badgeville.com',
+'sz.met.vgwort.de',
+'sz.track4.com',
+'t-ak.hulu.com',
+'t-krone.2cnt.net',
+'t-krone.oewabox.at',
+'t-oewa.2cnt.net',
+'t-online.de.intellitxt.com',
+'t-orf.2cnt.net',
+'t-staging.powerreviews.com',
+'t.9gag.com',
+'t.acxiom-online.com',
+'t.adonly.com',
+'t.afftrackr.com',
+'t.appsflyer.com',
+'t.atdmt.com',
+'t.bimvid.com',
+'t.channeladvisor.com',
+'t.cpa37.com',
+'t.cqq5id8n.com',
+'t.dailymail.co.uk',
+'t.devnet.com',
+'t.dgm-au.com',
+'t.dtscout.com',
+'t.eharmony.com',
+'t.extreme-dm.com',
+'t.flux.com',
+'t.formalyzer.com',
+'t.frtyi.com',
+'t.hypers.com.cn',
+'t.insigit.com',
+'t.irtya.com',
+'t.ivwbox.de',
+'t.jobthread.com',
+'t.ktxtr.com',
+'t.leadlander.com',
+'t.leady.com',
+'t.locpub.com',
+'t.mdn2015x1.com',
+'t.mdn2015x2.com',
+'t.menepe.com',
+'t.ml00.net',
+'t.mobilediva.com',
+'t.mobitrk.com',
+'t.mookie1.com',
+'t.mpire.nxus.mobi',
+'t.mplxtms.com',
+'t.mtagmonetizationa.com',
+'t.mtagmonetizationb.com',
+'t.myfuncards.com',
+'t.myvisualiq.net',
+'t.nxus.mobi',
+'t.p.mybuys.com',
+'t.paypal.com',
+'t.pointroll.com',
+'t.powerreviews.com',
+'t.qservz.com',
+'t.searchelper.com',
+'t.searchhelper.com',
+'t.sf14g.com',
+'t.skimresources.com',
+'t.thetrafficstat.net',
+'t.trackalyzer.com',
+'t.trackedlink.net',
+'t.trafficninjas.co',
+'t.unbounce.com',
+'t.update.moatads.com',
+'t.webtracker.jp',
+'t.wowanalytics.co.uk',
+'t.wowtrk.com',
+'t.ymlp275.net',
+'t.zedo.com',
+'t.zeroredirect.com',
+'t.zeroredirect1.com',
+'t.zeroredirect2.com',
+'t0.c.appier.net',
+'t0.extreme-dm.com',
+'t0.formalyzer.com',
+'t0.leadlander.com',
+'t0.trackalyzer.com',
+'t01.rbnt.org',
+'t02.rbnt.org',
+'t03.rbnt.org',
+'t04.rbnt.org',
+'t05.rbnt.org',
+'t06.rbnt.org',
+'t07.rbnt.org',
+'t08.rbnt.org',
+'t09.rbnt.org',
+'t1.extreme-dm.com',
+'t1.formalyzer.com',
+'t1.leadlander.com',
+'t1.stormcontainertag.com',
+'t1.trackalyzer.com',
+'t10.rbnt.org',
+'t2.formalyzer.com',
+'t2.hulu.com',
+'t2.huluim.com',
+'t2.junbi-tracker.com',
+'t2.leadlander.com',
+'t2.trackalyzer.com',
+'t3.formalyzer.com',
+'t3.leadlander.com',
+'t3.trackalyzer.com',
+'t3q7af0z.com',
+'t4.formalyzer.com',
+'t4.leadlander.com',
+'t4.trackalyzer.com',
+'t4ft.de',
+'t5.formalyzer.com',
+'t5.leadlander.com',
+'t5.trackalyzer.com',
+'t5.wrating.com',
+'t6.formalyzer.com',
+'t6.leadlander.com',
+'t6.trackalyzer.com',
+'t7.formalyzer.com',
+'t7.leadlander.com',
+'t7.trackalyzer.com',
+'t8.formalyzer.com',
+'t8.leadlander.com',
+'t8.trackalyzer.com',
+'t9.formalyzer.com',
+'t9.leadlander.com',
+'t9.trackalyzer.com',
+'ta.demdex.net',
+'tabligheirani.com',
+'taboola.com',
+'tackledoyuzsfx.download',
+'tag.120ask.com',
+'tag.163.com',
+'tag.adip.ly',
+'tag.bounceexchange.com',
+'tag.contextweb.com',
+'tag.crsspxl.com',
+'tag.email-attitude.com',
+'tag.gstat.orangeportails.net',
+'tag.myplay.com',
+'tag.researchnow.com',
+'tag.shopping-feed.com',
+'tag.shopping-flux.com',
+'tag.sitescout.com',
+'tag.tlvmedia.com',
+'tag.wigetmedia.com',
+'tag.yakarouler.com',
+'tag.yieldoptimizer.com',
+'tag.zhupiter.com',
+'tagcash.com',
+'tagcontainer.arvato-e.com',
+'tagjunction.com',
+'tags-cdn.deployads.com',
+'tags-eu.tiqcdn.com',
+'tags.1001spiele.de',
+'tags.api.umbel.com',
+'tags.bkrtx.com',
+'tags.bluekai.com',
+'tags.chitika.net',
+'tags.compuhot.com',
+'tags.crwdcntrl.net',
+'tags.expo9.exponential.com',
+'tags.go2cloud.org',
+'tags.grajteraz.pl',
+'tags.h12-media.com',
+'tags.jiwire.com',
+'tags.liveperson.net',
+'tags.master-perf-tools.com',
+'tags.mathtag.com',
+'tags.mediaforge.com',
+'tags.msnbc.com',
+'tags.news.com.au',
+'tags.pixnet.net',
+'tags.topshareware.com',
+'tags.toroadvertising.com',
+'tagx.nytimes.com',
+'tajs.qq.com',
+'take5.real.com',
+'takyake.ru',
+'talesoftheslayer.bravejournal.com',
+'talkcity.realtracker.com',
+'talkingdata.com',
+'talkingdata.net',
+'tantella.com',
+'tantrack.info',
+'tanzanite.infomine.com',
+'tap-cdn.rubiconproject.com',
+'tap-secure.rubiconproject.com',
+'tap.more-results.net',
+'tap.rubiconproject.com',
+'tap2-cdn.rubiconproject.com',
+'tapad.com',
+'tapenowmskndjn.download',
+'tapestry.tapad.com',
+'tapfiliate.com',
+'tapgen.com',
+'tapit.com',
+'tapit.go2cloud.org',
+'tapjoy.com',
+'tapjoy.go2cloud.org',
+'tapjoyads.com',
+'taplytics.com',
+'tapone.jp',
+'tappx.go2affise.com',
+'tapsense.com',
+'targad.com',
+'target-talent.com',
+'target.122.2o7.net',
+'target.untd.com',
+'target.zedo.com',
+'targetclick.com',
+'targetnet.com',
+'targetpoint.com',
+'targetspot.com',
+'tarifliste.com',
+'tarrinc.go2cloud.org',
+'tarsan.go2affise.com',
+'tasks.kissmetrics.com',
+'tasseledalcktk.download',
+'tassellingnmwczavi.download',
+'tasteguru.go2cloud.org',
+'tatango.com',
+'tayppqgouaches.review',
+'tbe.tom.ru',
+'tbgilthmonticulus.review',
+'tbl.tradedoubler.com',
+'tbm.go2cloud.org',
+'tbws.shopathome.com',
+'tbws64.shopathome.com',
+'tc.freehostedscripts.net',
+'tc.tradetracker.net',
+'tc.tradetracker.nl',
+'tchibo02.webtrekk.net',
+'tchibo03.webtrekk.net',
+'tchibo04.webtrekk.net',
+'tchibo05.webtrekk.net',
+'tchibo06.webtrekk.net',
+'tchibo07.webtrekk.net',
+'tchibo08.webtrekk.net',
+'tchibo09.webtrekk.net',
+'tcm.optica.ero-advertising.com',
+'tcmagazine.uk.intellitxt.com',
+'tcr.tynt.com',
+'tcr111.tynt.com',
+'td.demdex.net',
+'tdeiggbfmetamers.review',
+'tds.clicks2count.com',
+'tds41.bestdeals.at',
+'tds42.bestdeals.at',
+'tds43.bestdeals.at',
+'tds44.bestdeals.at',
+'tds45.bestdeals.at',
+'tds46.bestdeals.at',
+'tds47.bestdeals.at',
+'tds48.bestdeals.at',
+'tds49.bestdeals.at',
+'tds50.bestdeals.at',
+'tds51.bestdeals.at',
+'tds52.bestdeals.at',
+'tds53.bestdeals.at',
+'tds54.bestdeals.at',
+'tds55.bestdeals.at',
+'tds56.bestdeals.at',
+'tds57.bestdeals.at',
+'tds58.bestdeals.at',
+'tds59.bestdeals.at',
+'tds60.bestdeals.at',
+'tdstats.com',
+'te.adlandpro.com',
+'te.thestar.ca',
+'te.thestar.com',
+'te.versiontracker.com',
+'teachscape.vo.llnwd.net',
+'teasermedia.net',
+'teasernet.com',
+'tebadu.com',
+'tecchannel.de.intellitxt.com',
+'tech.leadbolt.com',
+'techexpress.home.mindspring.com',
+'techmarkaffi.go2cloud.org',
+'technewsworld.us.intellitxt.com',
+'technology.searchwho.com',
+'techreview.112.2o7.net',
+'techspot.us.intellitxt.com',
+'techtalks.enigma.revenuewire.net',
+'techtalks.paretologic.revenuewire.net',
+'techtracker.com',
+'ted.dailymail.co.uk',
+'ted.metro.co.uk',
+'teenrevenue.com',
+'tegulaenasqffvn.download',
+'teilsidhobehqy.download',
+'teknosurf3.com',
+'telecommand.telemetry.microsoft.com',
+'telekom01.webtrekk.net',
+'telekom02.webtrekk.net',
+'telemetry.appex.bing.net',
+'telemetry.microsoft.com',
+'telemetry.soundcloud.com',
+'telemetry.urs.microsoft.com',
+'telenor.112.2o7.net',
+'telenorstartsiden.112.2o7.net',
+'television.searchwho.com',
+'telstra.imrworldwide.com',
+'temp.adzerver.com',
+'temperersgelvhakyk.download',
+'tempest.services.disqus.com',
+'template.aebn.net',
+'tenantrymishdg.download',
+'tenlokif.com',
+'tennae880interyield.jmp9.com',
+'tennessean.us.intellitxt.com',
+'tenzero.com',
+'tenzing.fmpub.net',
+'terms.reporo.net',
+'terra.demdex.net',
+'terraclicks.com',
+'terrazzo.bnex.com',
+'terren.cntv.cn',
+'teryield.jmp9.com',
+'tescostoresltd.tt.omtrdc.net',
+'tesr.112.207.net',
+'test.112.207.net',
+'test.2cnt.net',
+'test.adition.com',
+'test.ajc.cimedia.com',
+'test.applifier.com',
+'test.coremetrics.com',
+'test.doublepimp.com',
+'test.livejasmin.com',
+'test.reporo.net',
+'test.scorecardresearch.com',
+'test.superstats.com',
+'test.yesadvertising.com',
+'test.zedo.com',
+'test1.lmsoft.cz',
+'testadmin.cimedia.com',
+'testandtarget.omniture.com',
+'testserver121.webtrekk.net',
+'testserver122.webtrekk.net',
+'testsuite.adfarm1.adition.com',
+'testsuite.adition.com',
+'tex.ero-advertising.com',
+'text-link-ads.com',
+'text-o-matic.superstats.com',
+'textad.net',
+'textadvertising.adclickmedia.com',
+'textlinkcash.de',
+'textomatic.superstats.com',
+'textron.vo.llnwd.net',
+'tfl.d3.sc.omtrdc.net',
+'tfn.das.tamedia.ch',
+'tfncdn.thaflynation.com',
+'tg.socdm.com',
+'tga.csbew.com',
+'tgp.pornsponsors.com',
+'thaidigger.com',
+'thaliaat02.webtrekk.net',
+'thaliach02.webtrekk.net',
+'thaliade02.webtrekk.net',
+'thalliformxaujqbsq.website',
+'thba.go2cloud.org',
+'the-binary-trader.biz',
+'the-counter.net',
+'the-path-gateway.com',
+'the.tracking.city',
+'theaffiliate.us',
+'theaffiliatepeople.com',
+'theaffiliateprogram.com',
+'theanswerto.com',
+'theappwarrior.com',
+'thebugs.ws',
+'theclickmagnets.go2cloud.org',
+'thecounter.com',
+'theeldergeek.us.intellitxt.com',
+'thefashionspot.us.intellitxt.com',
+'thehitsusa.com',
+'theinterwebs.space',
+'theophanyujgxscs.download',
+'theowgkkaj.download',
+'thepoint.go2cloud.org',
+'theslice.go2cloud.org',
+'theta49.rtb.appier.net',
+'theta57.rtb.appier.net',
+'theta75.rtb.appier.net',
+'thetechzone.us.intellitxt.com',
+'thetradedesk-tags.s3.amazonaws.com',
+'thevictorynetwork.com',
+'theylike.org',
+'thicksetchrzcu.download',
+'thindivide.com',
+'thing1.infolink.com',
+'thing2.infolink.com',
+'thinkgeek.112.2o7.net',
+'thinkingmedia.net',
+'thinklabs-ltd.de',
+'thinknear-hosted.thinknearhub.com',
+'thinknear.com',
+'thirdparty.fmpub.net',
+'thirdworld.magnify.net',
+'this.content.served.by.adshuffle.com',
+'this.content.served.by.adshuffle.com.11860.9035.302br.net',
+'this.content.served.by.adshuffle.com.11861.9035.302br.net',
+'this.content.served.by.adshuffle.com.11862.9035.302br.net',
+'this.content.served.by.adshuffle.com.11866.9035.302br.net',
+'this.content.served.by.adshuffle.com.11867.9035.302br.net',
+'this.content.served.by.adshuffle.com.11868.9035.302br.net',
+'this.content.served.by.adshuffle.com.11869.9035.302br.net',
+'this.content.served.by.adshuffle.com.11870.9035.302br.net',
+'this.content.served.by.adshuffle.com.12408.9035.302br.net',
+'this.content.served.by.adshuffle.com.12417.9035.302br.net',
+'thisbanner.com',
+'thisteddagblad.dk',
+'thliluxanplanet.review',
+'thogethoffic.co',
+'thor-cpa.com',
+'thowelspegzmc.download',
+'thrgo.pro',
+'thruport.com',
+'ths9j89.com',
+'thumb.ero-advertising.com',
+'thumbads.ero-advertising.com',
+'thumbs.ero-advertising.com',
+'thumbs.xlaces.ero-advertising.com',
+'thumbs2.ero-advertising.com',
+'tiads.time.com',
+'ticks2.bugsense.com',
+'tidalkqbvnxk.download',
+'tidbit.co.in',
+'tidbitlhztnnx.download',
+'tidd.ly',
+'tifosicsonoel.download',
+'tigertext.com',
+'tikrailijorj.com',
+'til.go2cloud.org',
+'tiller.co',
+'timebus2.112.2o7.net',
+'timecom.112.2o7.net',
+'timefortune.112.2o7.net',
+'timepeople.122.207.net',
+'timepeople.122.2o7.net',
+'timeslog.indiatimes.com',
+'timeslogtn.timesnow.tv',
+'timestrends.indiatimes.com',
+'timestrends.timesnow.tv',
+'timwedigitalsales.go2cloud.org',
+'tinbuadserv.com',
+'ting.7eer.net',
+'tinybar.com',
+'tinytracker.onion.com',
+'tioweuuukcedarwood.review',
+'tirebuyer.go2cloud.org',
+'tiscali.ad.dotandad.com',
+'tiser.com.au',
+'titanads1.com',
+'titanads3.com',
+'titanads4.com',
+'titanads5.com',
+'titsbro.org',
+'tiumbs.ero-advertising.com',
+'tizer8.net',
+'tizerclik.com',
+'tizermy.net',
+'tizernaya-reklama.ru',
+'tizru.com',
+'tj.phpwind.net',
+'tk3.sbc60.com',
+'tlehflrectus.review',
+'tlkrvyuincommodes.review',
+'tlvmedia.adk2.co',
+'tlvmedia.com',
+'tm.tradetracker.net',
+'tmarket.tripod.com',
+'tmgdigital.go2cloud.org',
+'tminainc.go2affise.com',
+'tml.clmbtech.com',
+'tmobile-us.inq.com',
+'tmp.dt00.net',
+'tmscdn.coremetrics.com',
+'tmtrck.com',
+'tmz.vo.llnwd.net',
+'tnjcars.go2cloud.org',
+'tns-counter.ru',
+'tns-cs.net',
+'tns.simba.taobao.com',
+'todacell.com',
+'todayads.com',
+'toggo.ivwbox.de',
+'toi3.ivwbox.de',
+'toics.2cnt.net',
+'toivtest.2cnt.net',
+'tom.302br.net',
+'tom.vgwort.de',
+'tomekas.com',
+'toms.us.intellitxt.com',
+'tonefuse.go2cloud.org',
+'toolbar.aol.com',
+'toolbarmodal.medialeopard.com',
+'toolbox.contentspread.net',
+'tools.bongacams.com',
+'tools.bongacash.com',
+'tools.gfcash.com',
+'tools.hitbox.com',
+'tools.kissmetrics.com',
+'tools.mobpartner.mobi',
+'tools.quicksprout.com',
+'tools.runetki.com',
+'tools2.hitbox.com',
+'toolsa.hitbox.com',
+'top-fwz1.mail.ru',
+'top-ro.ro',
+'top-viral-videos.com',
+'top.addfreestats.com',
+'top.chebra.lt',
+'top.dkd.lt',
+'top.elec.ru',
+'top.list.ru',
+'top.mail.ru',
+'top.proext.com',
+'top.wn.com',
+'top100-images.rambler.ru',
+'top100.mafia.ru',
+'top100.rambler.ru',
+'top20.com',
+'top50.co.uk',
+'topads.ero-advertising.com',
+'topadvancedsearch.com',
+'topbarh.box.sk',
+'topbinaryaffiliates.ck-cdn.com',
+'topfox.co.uk',
+'toplist.cz',
+'toplist.deluxestream.info',
+'toplista.mw.hu',
+'toprebates.com',
+'topsafelist.net',
+'topsky.go2cloud.org',
+'topspot.go2cloud.org',
+'topstat.com',
+'topstat.ru',
+'topstats.com',
+'toptrafficsource.com',
+'torcherxotnnqq.download',
+'torerovdmsbvg.download',
+'toroadvertisingmedia.com',
+'torque.bittorrent.com',
+'toruk.tanx.com',
+'total-media.net',
+'totaladperformance.com',
+'totalping.com',
+'totalsystemservices.112.2o7.net',
+'totemcash.com',
+'touchclarity.com',
+'tours.imlive.com',
+'towableohrhz.download',
+'towerrecords.track4.com',
+'toyota-com-tw.b.appier.net',
+'toyota.112.2o7.net',
+'toyota.vo.llnwd.net',
+'tpc.googlesyndication.com',
+'tpc.googlesyndication.com.proxy.c9w.net',
+'tpcnc.googlesyndication.com',
+'tpl1.realtracker.com',
+'tpl2.realtracker.com',
+'tppintext.com',
+'tprmyslidden.review',
+'tpu.2cnt.net',
+'tr.bt.matrixspa.it',
+'tr.cloud-media.fr',
+'tr.contextweb.com',
+'tr.etrxc.com',
+'tr.ilius.net',
+'tr.interlake.net',
+'tr.newsletter.capdecision.fr',
+'tr.sjc.contextweb.com',
+'tr1.myroitracking.com',
+'tr10.myroitracking.com',
+'tr1035.myroitracking.com',
+'tr11.myroitracking.com',
+'tr1126.myroitracking.com',
+'tr12.myroitracking.com',
+'tr13.myroitracking.com',
+'tr14.myroitracking.com',
+'tr15.myroitracking.com',
+'tr16.myroitracking.com',
+'tr17.myroitracking.com',
+'tr18.myroitracking.com',
+'tr19.myroitracking.com',
+'tr2.myroitracking.com',
+'tr2.smarterremarketer.net',
+'tr2.vttrack.com.br',
+'tr20.myroitracking.com',
+'tr3.myroitracking.com',
+'tr4.myroitracking.com',
+'tr5.myroitracking.com',
+'tr553.com',
+'tr6.myroitracking.com',
+'tr7.myroitracking.com',
+'tr8.myroitracking.com',
+'tr9.myroitracking.com',
+'trace.jdtracker.com',
+'trace.qq.com',
+'traceadmanager.com',
+'tracemyip.org',
+'tracer.blogads.com',
+'track.007cpa.com',
+'track.12trackway.com',
+'track.99acres.com',
+'track.actiplay-network.com',
+'track.adbooth.net',
+'track.adcocktail.com',
+'track.adform.net',
+'track.adintend.com',
+'track.adnetwork.vn',
+'track.adrevolver.com',
+'track.adrpanel.es',
+'track.adsushi.de',
+'track.adtraction.com',
+'track.adxmi.com',
+'track.affiliate-b.com',
+'track.affktch.com',
+'track.ahury.com',
+'track.appsflyer.com',
+'track.ashley-george.com',
+'track.atgstores.com',
+'track.ballerft.site',
+'track.bannerbridge.net',
+'track.blamads.com',
+'track.braincash.com',
+'track.brucelead.com',
+'track.byzon.swelen.net',
+'track.cafemomstatic.com',
+'track.campaignmonitor.com',
+'track.catalogs.com',
+'track.cbs.com',
+'track.celtra.com',
+'track.chanret.com',
+'track.cinestar.de',
+'track.clariad.com',
+'track.clickbooth.com',
+'track.cliqrr.com',
+'track.cmllk1.info',
+'track.createsend.com',
+'track.cxdigitalmedia.com',
+'track.dalenetwork.com',
+'track.did-it.com',
+'track.digitalriver.com',
+'track.divx.com',
+'track.easeus.com',
+'track.effiliation.com',
+'track.engagesciences.com',
+'track.eovnx.com',
+'track.flexlinks.com',
+'track.floppybank.com',
+'track.ft.com',
+'track.fxstreet.com',
+'track.games.la',
+'track.gawker.com',
+'track.grmtracking.com',
+'track.homestead.com',
+'track.hubspot.com',
+'track.igg.com',
+'track.ilovecpa.com',
+'track.impactfive.com',
+'track.interracialtgirlsex.com',
+'track.jbtrax.net',
+'track.jerkednetwork.com',
+'track.juno.com',
+'track.justcloud.com',
+'track.leady.cz',
+'track.lfstmedia.com',
+'track.linksynergy.com',
+'track.livestat.com',
+'track.mdsmatch.com',
+'track.mdsmatch2.com',
+'track.monitis.com',
+'track.myadshub.com',
+'track.mypcbackup.com',
+'track.mysavingsmedia.net',
+'track.net',
+'track.netshelter.net',
+'track.netzero.net',
+'track.ning.com',
+'track.omgpl.com',
+'track.oxcash.com',
+'track.performtracking.com',
+'track.pointroll.com',
+'track.pornaccess.com',
+'track.probolan50.it',
+'track.pubmatic.com',
+'track.qcri.org',
+'track.qoof.com',
+'track.ra.icast.cn',
+'track.radins.com',
+'track.realwhiznews.com',
+'track.reasonablespread.com',
+'track.rediff.com',
+'track.reinvigorate.net',
+'track.rejuvenate-lifestyles.com',
+'track.right-ads.com',
+'track.scanguard.com',
+'track.scanmyphones.com',
+'track.scorpiointeractive.com',
+'track.searchignite.com',
+'track.sexchangegirl.com',
+'track.shop2market.com',
+'track.slideshare.net',
+'track.smcnetwork.net',
+'track.spiceworks.com',
+'track.strife.com',
+'track.tagesanzeiger.ch',
+'track.tastyfoodcombos.com',
+'track.td3x.com',
+'track.tesiteca.it',
+'track.tracking85.com',
+'track.trademail.fr',
+'track.untd.com',
+'track.v2.sslsecure1.com',
+'track.webgains.com',
+'track.websiteceo.com',
+'track.webtrekk.net',
+'track.wildblue.com',
+'track.xtrasize.co.uk',
+'track.xtrasize.com',
+'track.xtrasize.de',
+'track.xtrasize.pl',
+'track.yieldmgr.com',
+'track.zappos.com',
+'track.zipalerts.com',
+'track.zomato.com',
+'track112.com',
+'track2.dulingo.com',
+'track2.homestead.com',
+'track2.mycliplister.com',
+'track4aff.go2cloud.org',
+'trackads.com',
+'trackalyzer.com',
+'trackbacksecure.com',
+'trackbar.go2cloud.org',
+'trackbar.navigator.web.de',
+'trackedclicks.com',
+'tracker-api.my.com',
+'tracker.adwingate.com',
+'tracker.adxpansion.com',
+'tracker.affility.com',
+'tracker.alterwayhosting.fr',
+'tracker.anandtech.com',
+'tracker.averetek.com',
+'tracker.babbel.com',
+'tracker.bestshopping.com',
+'tracker.brokeragecapital.com',
+'tracker.bt.uol.com.br',
+'tracker.btarena.org',
+'tracker.buscape.com.br',
+'tracker.calameo.com',
+'tracker.cds-tracking.com',
+'tracker.clicktrade.com',
+'tracker.com',
+'tracker.cztorrent.net',
+'tracker.divvit.com',
+'tracker.drippler.com',
+'tracker.egora.fr',
+'tracker.emailaptitude.com',
+'tracker.ero-advertising.com',
+'tracker.euroweb.net',
+'tracker.infosender.in',
+'tracker.iqnomy.com',
+'tracker.jcstracker.net',
+'tracker.joost.com',
+'tracker.junbi-tracker.com',
+'tracker.keywordintent.com',
+'tracker.leadsius.com',
+'tracker.lgcontent.cl',
+'tracker.loadingfast.com',
+'tracker.lomadee.com',
+'tracker.marinsm.com',
+'tracker.marinsoftware.com',
+'tracker.mobile.biz.daum.net',
+'tracker.msales.com',
+'tracker.netmechanic.com',
+'tracker.nmp1.com',
+'tracker.peerclick.io',
+'tracker.pinnaclesports.com',
+'tracker.plan2.net',
+'tracker.realclearpolitics.com',
+'tracker.roitesting.com',
+'tracker.scao.it',
+'tracker.seoboost.net',
+'tracker.smartcounter.de',
+'tracker.timesgroup.com',
+'tracker.trackerbox.com',
+'tracker.tradedoubler.com',
+'tracker.uprinting.com',
+'tracker.winload.de',
+'tracker.www.junbi-tracker.com',
+'tracker1.leadiya.com',
+'trackermodules.com',
+'trackerstatistik.init-ag.de',
+'trackertracker.com',
+'trackicollect.ibase.fr',
+'tracking.1moretoy.com',
+'tracking.247search.com',
+'tracking.4v4jfe79erfxfu8z8.com',
+'tracking.actionads.ru',
+'tracking.adjug.com',
+'tracking.admarketplace.net',
+'tracking.admobsphere.com',
+'tracking.ads.ibibo.com',
+'tracking.adserving.im',
+'tracking.adsup.me',
+'tracking.adtracker.ch',
+'tracking.amazing-revenue.com',
+'tracking.ancestry.com',
+'tracking.applift.com',
+'tracking.attractwomen.com',
+'tracking.autoscout24.com',
+'tracking.bafby.com',
+'tracking.banners.meccahoo.com',
+'tracking.base.de',
+'tracking.battleon.com',
+'tracking.bbinary.com',
+'tracking.binarypromos.com',
+'tracking.bloomberg.com',
+'tracking.bol.com',
+'tracking.bucksense.com',
+'tracking.carsales.com.au',
+'tracking.cat898.com',
+'tracking.cdiscount.com',
+'tracking.chacha.com',
+'tracking.cmcigroup.com',
+'tracking.cmgdigital.com',
+'tracking.conduit.com',
+'tracking.cp.ligatus.com',
+'tracking.crobo.com',
+'tracking.dealerwebwatcher.com',
+'tracking.deepsearch.adlucent.com',
+'tracking.directadsmedia.com',
+'tracking.dolphinbrowser.com',
+'tracking.drsfostersmith.com',
+'tracking.dsmmadvantage.com',
+'tracking.dzukk.com',
+'tracking.ecookie.fr',
+'tracking.ehavior.net',
+'tracking.ero-advertising.com',
+'tracking.euroads.fi',
+'tracking.euroads.no',
+'tracking.euroads.se',
+'tracking.eurosport.com',
+'tracking.everydayhealth.com',
+'tracking.fathomseo.com',
+'tracking.feedperfect.com',
+'tracking.fits.me',
+'tracking.foxnews.com',
+'tracking.gammae.com',
+'tracking.gfycat.com',
+'tracking.godatafeed.com',
+'tracking.goodgamestudios.com',
+'tracking.groupon.com',
+'tracking.gruppo.mps.it',
+'tracking.ha.rueducommerce.fr',
+'tracking.hannoversche.de',
+'tracking.hi-pi.com',
+'tracking.hostgator.com',
+'tracking.hrs.de',
+'tracking.hsn.com',
+'tracking.hyde.ligatus.com',
+'tracking.icotrack.com',
+'tracking.immobilienscout24.de',
+'tracking.infoninjas.net',
+'tracking.instantcheckmate.com',
+'tracking.interweave.com',
+'tracking.inuvo.com',
+'tracking.jotform.com',
+'tracking.keywee.co',
+'tracking.kissmyads.com',
+'tracking.klickthru.com',
+'tracking.ladies.de',
+'tracking.lcleads.com',
+'tracking.lenzmx.com',
+'tracking.listhub.net',
+'tracking.lunho.com',
+'tracking.m6r.eu',
+'tracking.maxcdn.com',
+'tracking.melty.es',
+'tracking.melty.fr',
+'tracking.messagemates.com',
+'tracking.mhlnk.com',
+'tracking.mindshare.de',
+'tracking.mlsat02.de',
+'tracking.mobile.de',
+'tracking.mobitracker.info',
+'tracking.moneyam.com',
+'tracking.moon-ray.com',
+'tracking.moportals.com',
+'tracking.musixmatch.com',
+'tracking.mycapture.com',
+'tracking.netbank.de',
+'tracking.netrefer.com',
+'tracking.netzathleten-media.de',
+'tracking.olx-st.com',
+'tracking.orixa-media.com',
+'tracking.perfecttoolmedia.com',
+'tracking.performancerevenues.com',
+'tracking.plattformad.com',
+'tracking.practicefusion.com',
+'tracking.prmtracking.com',
+'tracking.publicidees.com',
+'tracking.quillion.com',
+'tracking.resumecompanion.com',
+'tracking.rtl.de',
+'tracking.s24.com',
+'tracking.searchmarketing.com',
+'tracking.sekomedia.com',
+'tracking.sembox.it',
+'tracking.shopping-flux.com',
+'tracking.si.com',
+'tracking.smartclicksystem.com',
+'tracking.sodta.com',
+'tracking.softwareprojects.com',
+'tracking.sokrati.com',
+'tracking.sponsorpay.com',
+'tracking.sport1.de',
+'tracking.srv2.de',
+'tracking.statravel.de',
+'tracking.strongmail.west.mtvi.com',
+'tracking.surveycheck.com',
+'tracking.syncedvision.com',
+'tracking.taptica.com',
+'tracking.tchibo.de',
+'tracking.teebik.com',
+'tracking.theeword.co.uk',
+'tracking.thehut.net',
+'tracking.toroadvertising.com',
+'tracking.trackor.net',
+'tracking.traviangames.com',
+'tracking.truthfinder.com',
+'tracking.ukwm.co.uk',
+'tracking.vcommission.com',
+'tracking.veoxa.com',
+'tracking.voltagesearch.com',
+'tracking.w2mobile.com',
+'tracking.waterfrontmedia.com',
+'tracking.websitealive.com',
+'tracking.wfnetwork.com',
+'tracking.wisepops.com',
+'tracking.worldmedia.net',
+'tracking01.walmart.com',
+'tracking1.aleadpay.com',
+'tracking1.euroads.no',
+'tracking101.com',
+'tracking11.com',
+'tracking1112.com',
+'tracking2.interweave.com',
+'tracking999.com',
+'trackingdev.nixxie.com',
+'trackingstatalytics.com',
+'trackit.skyhighctr.com',
+'tracklead.net',
+'trackpm.shop2market.com',
+'trackpromotion.net',
+'tracks.arubamediamarketing.it',
+'trackthatad.com',
+'trackword.net',
+'trackyourlinks.com',
+'trackyourstats.com',
+'tractionize.com',
+'trade-in-value.com',
+'tradeadexchange.com',
+'tradearabia.advertserve.com',
+'tradedoubler.com',
+'tradeexpert.net',
+'tradehall.com',
+'tradelikeapro.justclick.ru',
+'trademob.com',
+'tradetraffic.com',
+'tradingmarkets.us.intellitxt.com',
+'traf.visit-x.net',
+'traffboost.net',
+'traffdaq.com',
+'traffic-delivery.com',
+'traffic-exchange.com',
+'traffic-hits.com',
+'traffic-supremacy.com',
+'traffic.acwebconnecting.com',
+'traffic.adxprts.com',
+'traffic.adxprtz.com',
+'traffic.alexa.com',
+'traffic.bannerator.com',
+'traffic.bokecc.com',
+'traffic.buyservices.com',
+'traffic.firstmobilelink.com',
+'traffic.index.hu',
+'traffic.moportals.com',
+'traffic.ru',
+'traffic.sexpillguru.com',
+'traffic.trafficcompany.com',
+'traffic.trafficposse.com',
+'traffic.velvet.hu',
+'traffic4you.de',
+'trafficads.s3-website-us-west-1.amazonaws.com',
+'trafficbroker.com',
+'trafficcaptain.go2cloud.org',
+'trafficcenter.com',
+'trafficdiscount.com',
+'trafficfactory.biz',
+'trafficfile.com',
+'trafficforce.com',
+'traffichaus.com',
+'traffichold.com',
+'traffichome.de',
+'trafficjammedia.go2cloud.org',
+'trafficjuicer.com',
+'trafficjunky.net',
+'trafficjunky.xtube.com',
+'trafficleader.com',
+'trafficmagnet.com',
+'trafficmanagers.nl',
+'trafficmasterz.net',
+'trafficmp.com',
+'trafficparade.com',
+'trafficpimps.com',
+'trafficpoint.go2cloud.org',
+'trafficpump.com',
+'trafficshop.com',
+'trafficspaces.net',
+'trafficswarm.com',
+'traffictrader.net',
+'trafficundercontrol.com',
+'trafficwave.net',
+'trafficz.com',
+'trafficzap.com',
+'trafic-fr.com',
+'trafic.ro',
+'traficmax.fr',
+'trafmag.com',
+'trakksocial.googlecode.com',
+'traktum.com',
+'trans20120430.getjar.com',
+'transact-can.cedexis.com',
+'transact.justclick.ru',
+'transferhit.com',
+'transfermarkt01.wt-eu02.net',
+'travel.netster.com',
+'travel.travelocity.com',
+'traveladvertising.com',
+'travelmail.traveltek.net',
+'travelocity.bfast.com',
+'travelscream.com',
+'travsoft.bfast.com',
+'trax-ad.jp',
+'trax.gamespot.com',
+'tray-e-ex.tekblue.net',
+'tray-w-ex.tekblue.net',
+'trc.smtrcplatform.it',
+'trc.taboola.com',
+'trck.addiliate.com',
+'trck.destidyll.com',
+'trck.illimeet.com',
+'trck.meexy.com',
+'trcktm.net',
+'treasure1.justclick.ru',
+'treasuredome.com',
+'treasuretrooper.com',
+'treddleswdnnipx.download',
+'tredirect.com',
+'tree-pixel-log.s3.amazonaws.com',
+'trefogli8.adulttargettrack.pw',
+'trekblue.com',
+'trekdata.com',
+'tremblingskzymvgcu.download',
+'tremorvideo.com',
+'trends.revcontent.com',
+'tresalacarta.2cnt.net',
+'trhzc.com',
+'triadmedianetwork.com',
+'tribal.us.intellitxt.com',
+'tribalfusion.com',
+'tribalfusion.net',
+'tribalfusion.speedera.net',
+'tribeca.vidavee.com',
+'tribuneinteractive.com',
+'trickys.com',
+'triggeredmail.appspot.com',
+'triggertag.gorillanation.com',
+'triolit.go2affise.com',
+'trivia2mobile.com',
+'trix.net',
+'trk.1cpa.ru',
+'trk.adbutter.net',
+'trk.adtrkaa.com',
+'trk.airproof.party',
+'trk.anchtrk.com',
+'trk.apperol.com',
+'trk.atdmt.com',
+'trk.blamads.com',
+'trk.bluetrackmedia.com',
+'trk.clmbtech.com',
+'trk.dsv2trk.com',
+'trk.kissmetrics.com',
+'trk.m.libero.it',
+'trk.mailtoward.com',
+'trk.meacashtrk.com',
+'trk.obix.pro',
+'trk.pswec.com',
+'trk.rrcpm.com',
+'trk.trafficposse.com',
+'trk.vidible.tv',
+'trk.vindicosuite.com',
+'trk.wdacashtrk.com',
+'trk1.opanw.com',
+'trk2it4.com',
+'trk4.com',
+'trkbin.com',
+'trkclk.net',
+'trkcpamedia.com',
+'trkem.com',
+'trker.com',
+'trklnks.com',
+'trks.us',
+'trktrk020.com',
+'trktrk026.com',
+'trkuoy.com',
+'trkur.com',
+'trkur1.com',
+'trkur5.com',
+'trollzeweb.com',
+'troopersiccy.bravejournal.com',
+'tropo01.webtrekk.net',
+'trovus.co.uk',
+'trp.numergy.bench.cedexis.com',
+'trs.webprospector.de',
+'trtc.adspirit.de',
+'tru.am',
+'truedigitalmedia.go2cloud.org',
+'truehits.in.th',
+'truehits.net',
+'truehits1.gits.net.th',
+'truehits2.gits.net.th',
+'truma.pitchonlev.org.il',
+'trunktest.adition.com',
+'truongton.net',
+'trupanion.go2cloud.org',
+'trustedads.adtrustmedia.com',
+'trustedads.org',
+'trustedmarketings.go2cloud.org',
+'trw12.com',
+'trx.mxmfb.com',
+'ts-krone.2cnt.net',
+'ts-oewa.2cnt.net',
+'ts-orf.2cnt.net',
+'ts.d.p.xpanama.net',
+'ts.eu-west-1.p.xpanama.net',
+'ts.eu.p.xpanama.net',
+'ts.faz.net',
+'ts.geo.p.xpanama.net',
+'ts.istrack.com',
+'ts.p.xpanama.net',
+'ts.rtl.de',
+'ts.us-east-1.p.xpanama.net',
+'ts.us.p.xpanama.net',
+'ts.videosz.com',
+'ts1.hitbox.com',
+'ts2.hitbox.com',
+'ts777.com',
+'tsog8.redirectvoluum.com',
+'tsyuftaindignance.review',
+'tt.omtrdc.net',
+'ttlmodels.com',
+'ttzmedia.com',
+'tu.demdex.net',
+'tu.moatads.com',
+'tubatebunjrqzi.download',
+'tuberewards.com',
+'tucows.orangesoda.com',
+'tufosex.com.br',
+'tugads.go2cloud.org',
+'tumblrprobes.cedexis.com',
+'tumblrreports.cedexis.com',
+'tunersyxofqeak.download',
+'turn.com',
+'turncoatsuxica.download',
+'tutvp.com',
+'tv.livejasmin.com',
+'tv.sohu.com',
+'tv4chan.com',
+'tvdttzemicrotome.review',
+'tvlistings3.zap2it.com',
+'tvlistings4.zap2it.com',
+'tvoy-mir.justclick.ru',
+'tvseriesfinale.us.intellitxt.com',
+'tw.adserver.yahoo.com',
+'tw.api.vpon.com',
+'tw.i.hulu.com',
+'twci.coremetrics.com',
+'twctsg.122.2o7.net',
+'tweets.kissmetrics.com',
+'twemyksybtripewomen.review',
+'twilightdata.com',
+'twinedigital.go2cloud.org',
+'twitter-badges.s3.amazonaws.com',
+'twqlnorqcmesquite.review',
+'twsg21x6-22dcca05c0915aa0dad0a07273e7a3c5015ddc6d-am1.d.aa.online-metrix.net',
+'txel.snmmd.nl',
+'txn.ingest.crittercism.com',
+'txtimpact.com',
+'tynt.com',
+'typiol.com',
+'typo3.ero-advertising.com',
+'tyroo.com',
+'tyxo.bg',
+'tyzqxseppukus.review',
+'tzgcxofordid.review',
+'tzigwosquniquely.review',
+'tzpwyoyhfspaed.review',
+'u-on.eu',
+'u-porn.mp1.mobi',
+'u.begun.ru',
+'u.extreme-dm.com',
+'u.heatmap.it',
+'u.moatads.com',
+'u.mobpartner.mobi',
+'u.openx.net',
+'u.optorb.com',
+'u.outbrain.com',
+'u.zeroredirect.com',
+'u.zeroredirect1.com',
+'u.zeroredirect2.com',
+'u0.extreme-dm.com',
+'u001.13.spylog.com',
+'u001.22.spylog.com',
+'u002.01.spylog.com',
+'u002.31.spylog.com',
+'u003.00.spylog.com',
+'u003.52.spylog.com',
+'u003.81.spylog.com',
+'u004.39.spylog.com',
+'u004.58.spylog.com',
+'u004.83.spylog.com',
+'u005.33.spylog.com',
+'u006.15.spylog.com',
+'u006.29.spylog.com',
+'u006.78.spylog.com',
+'u006.98.spylog.com',
+'u007.06.spylog.com',
+'u008.44.spylog.com',
+'u008.47.spylog.com',
+'u008.96.spylog.com',
+'u010.42.spylog.com',
+'u010.44.spylog.com',
+'u010.60.spylog.com',
+'u011.20.spylog.com',
+'u011.22.spylog.com',
+'u011.75.spylog.com',
+'u013.04.spylog.com',
+'u013.89.spylog.com',
+'u014.73.spylog.com',
+'u015.90.spylog.com',
+'u016.25.spylog.com',
+'u017.76.spylog.com',
+'u017.94.spylog.com',
+'u018.38.spylog.com',
+'u019.29.spylog.com',
+'u019.33.spylog.com',
+'u020.39.spylog.com',
+'u020.69.spylog.com',
+'u022.39.spylog.com',
+'u023.47.spylog.com',
+'u023.82.spylog.com',
+'u024.10.spylog.com',
+'u025.73.spylog.com',
+'u025.82.spylog.com',
+'u025.89.spylog.com',
+'u026.68.spylog.com',
+'u026.81.spylog.com',
+'u028.07.spylog.com',
+'u028.35.spylog.com',
+'u030.83.spylog.com',
+'u031.54.spylog.com',
+'u032.71.spylog.com',
+'u033.20.spylog.com',
+'u034.40.spylog.com',
+'u034.55.spylog.com',
+'u034.80.spylog.com',
+'u036.48.spylog.com',
+'u037.20.spylog.com',
+'u037.26.spylog.com',
+'u038.18.spylog.com',
+'u039.10.spylog.com',
+'u039.28.spylog.com',
+'u039.30.spylog.com',
+'u040.76.spylog.com',
+'u043.32.spylog.com',
+'u043.37.spylog.com',
+'u044.09.spylog.com',
+'u046.09.spylog.com',
+'u046.67.spylog.com',
+'u046.73.spylog.com',
+'u049.45.spylog.com',
+'u052.94.spylog.com',
+'u053.14.spylog.com',
+'u053.20.spylog.com',
+'u053.24.spylog.com',
+'u053.48.spylog.com',
+'u054.94.spylog.com',
+'u055.70.spylog.com',
+'u058.03.spylog.com',
+'u058.67.spylog.com',
+'u059.14.spylog.com',
+'u060.16.spylog.com',
+'u060.28.spylog.com',
+'u060.41.spylog.com',
+'u060.92.spylog.com',
+'u061.97.spylog.com',
+'u062.01.spylog.com',
+'u062.16.spylog.com',
+'u062.47.spylog.com',
+'u063.13.spylog.com',
+'u066.62.spylog.com',
+'u066.80.spylog.com',
+'u066.84.spylog.com',
+'u070.38.spylog.com',
+'u070.54.spylog.com',
+'u070.67.spylog.com',
+'u071.47.spylog.com',
+'u071.56.spylog.com',
+'u071.93.spylog.com',
+'u072.93.spylog.com',
+'u074.03.spylog.com',
+'u075.87.spylog.com',
+'u075.94.spylog.com',
+'u076.46.spylog.com',
+'u081.83.spylog.com',
+'u082.61.spylog.com',
+'u082.84.spylog.com',
+'u082.99.spylog.com',
+'u085.95.spylog.com',
+'u086.32.spylog.com',
+'u088.23.spylog.com',
+'u088.27.spylog.com',
+'u090.44.spylog.com',
+'u090.69.spylog.com',
+'u090.78.spylog.com',
+'u091.38.spylog.com',
+'u091.75.spylog.com',
+'u093.76.spylog.com',
+'u094.14.spylog.com',
+'u094.29.spylog.com',
+'u094.35.spylog.com',
+'u094.90.spylog.com',
+'u095.38.spylog.com',
+'u096.59.spylog.com',
+'u098.24.spylog.com',
+'u099.28.spylog.com',
+'u099.40.spylog.com',
+'u099.41.spylog.com',
+'u099.42.spylog.com',
+'u099.81.spylog.com',
+'u099.84.spylog.com',
+'u1.extreme-dm.com',
+'u101.13.spylog.com',
+'u101.29.spylog.com',
+'u1025.77.spylog.com',
+'u104.65.spylog.com',
+'u105.77.spylog.com',
+'u108.36.spylog.com',
+'u108.95.spylog.com',
+'u1080.31.spylog.com',
+'u11.seoparts.net',
+'u112.68.spylog.com',
+'u113.63.spylog.com',
+'u114.19.spylog.com',
+'u114.76.spylog.com',
+'u1147.60.spylog.com',
+'u115.39.spylog.com',
+'u115.46.spylog.com',
+'u1157.21.spylog.com',
+'u117.45.spylog.com',
+'u117.95.spylog.com',
+'u118.05.spylog.com',
+'u118.11.spylog.com',
+'u120.74.spylog.com',
+'u121.83.spylog.com',
+'u123.23.spylog.com',
+'u125.28.spylog.com',
+'u126.40.spylog.com',
+'u127.62.spylog.com',
+'u127.92.spylog.com',
+'u128.04.spylog.com',
+'u129.20.spylog.com',
+'u129.65.spylog.com',
+'u130.01.spylog.com',
+'u130.83.spylog.com',
+'u1308.54.spylog.com',
+'u132.04.spylog.com',
+'u132.08.spylog.com',
+'u132.40.spylog.com',
+'u134.81.spylog.com',
+'u135.25.spylog.com',
+'u136.07.spylog.com',
+'u136.28.spylog.com',
+'u136.91.spylog.com',
+'u138.56.spylog.com',
+'u139.75.spylog.com',
+'u140.30.spylog.com',
+'u140.32.spylog.com',
+'u140.90.spylog.com',
+'u144.05.spylog.com',
+'u144.54.spylog.com',
+'u145.33.spylog.com',
+'u145.73.spylog.com',
+'u147.14.spylog.com',
+'u152.37.spylog.com',
+'u152.45.spylog.com',
+'u154.03.spylog.com',
+'u155.50.spylog.com',
+'u1569.61.spylog.com',
+'u1598.51.spylog.com',
+'u1617.87.spylog.com',
+'u1617.91.spylog.com',
+'u166.09.spylog.com',
+'u166.27.spylog.com',
+'u166.28.spylog.com',
+'u166.32.spylog.com',
+'u166.49.spylog.com',
+'u166.56.spylog.com',
+'u167.27.spylog.com',
+'u167.51.spylog.com',
+'u167.54.spylog.com',
+'u167.78.spylog.com',
+'u167.81.spylog.com',
+'u167.86.spylog.com',
+'u167.90.spylog.com',
+'u168.06.spylog.com',
+'u168.09.spylog.com',
+'u168.38.spylog.com',
+'u1695.55.spylog.com',
+'u175.78.spylog.com',
+'u1773.34.spylog.com',
+'u178.75.spylog.com',
+'u181.05.spylog.com',
+'u1817.16.spylog.com',
+'u184.04.spylog.com',
+'u185.26.spylog.com',
+'u187.18.spylog.com',
+'u192.84.spylog.com',
+'u1hw38x0.com',
+'u206.36.spylog.com',
+'u207.80.spylog.com',
+'u212.91.spylog.com',
+'u218.55.spylog.com',
+'u218.73.spylog.com',
+'u239.40.spylog.com',
+'u245.27.spylog.com',
+'u246.61.spylog.com',
+'u249.15.spylog.com',
+'u249.77.spylog.com',
+'u252.80.spylog.com',
+'u273.53.spylog.com',
+'u289.06.spylog.com',
+'u294.54.spylog.com',
+'u2965.45.spylog.com',
+'u2967.81.spylog.com',
+'u2974.05.spylog.com',
+'u3064.72.spylog.com',
+'u3102.47.spylog.com',
+'u311.79.spylog.com',
+'u3123.29.spylog.com',
+'u3129.10.spylog.com',
+'u3197.42.spylog.com',
+'u3215.97.spylog.com',
+'u3239.08.spylog.com',
+'u3305.71.spylog.com',
+'u3417.93.spylog.com',
+'u342.39.spylog.com',
+'u3436.19.spylog.com',
+'u3571.56.spylog.com',
+'u3585.14.spylog.com',
+'u3608.20.spylog.com',
+'u385.24.spylog.com',
+'u4056.56.spylog.com',
+'u4122.70.spylog.com',
+'u432.77.spylog.com',
+'u4396.79.spylog.com',
+'u4443.84.spylog.com',
+'u4556.11.spylog.com',
+'u4573.85.spylog.com',
+'u4702.03.spylog.com',
+'u5234.87.spylog.com',
+'u5234.98.spylog.com',
+'u5303.67.spylog.com',
+'u539.34.spylog.com',
+'u567.64.spylog.com',
+'u5687.48.spylog.com',
+'u574.07.spylog.com',
+'u590.51.spylog.com',
+'u592.05.spylog.com',
+'u604.41.spylog.com',
+'u6226.44.spylog.com',
+'u6353.56.spylog.com',
+'u649.63.spylog.com',
+'u6504.70.spylog.com',
+'u674.98.spylog.com',
+'u7031.36.spylog.com',
+'u707.53.spylog.com',
+'u715381.sendgrid.org',
+'u73801620533084.s.push-21.cdnsun.com',
+'u790.60.spylog.com',
+'u790.67.spylog.com',
+'u899519.sendgrid.org',
+'u904.62.spylog.com',
+'u920.31.spylog.com',
+'u972.03.spylog.com',
+'u977.40.spylog.com',
+'uac.advertising.com',
+'uadx.com',
+'ubermedia.com',
+'ucaluco.com',
+'uclick.com',
+'ucounter.ucoz.net',
+'ucoz.spotsniper.ru',
+'udac.se',
+'udarem.com',
+'udc.msn.com',
+'uddlywcatarrhs.review',
+'udelivery.trademob.com',
+'udf.staging.adition.com',
+'udilova.justclick.ru',
+'udm.scorecardresearch.com',
+'udmserve.net',
+'udns1.newdotnet.net',
+'udorik.com',
+'uebadu.com',
+'uenetwork.go2cloud.org',
+'uestat.video.qiyi.com',
+'ueuerea.com',
+'ueyqejwfyeither.review',
+'ufohyfzt.download',
+'ufraton.com',
+'ugaral.com',
+'ugo.tractionize.com',
+'uhjfxgwrchronical.review',
+'ui.avid.doublepimp.com',
+'ui.bang.doublepimp.com',
+'ui.doublepimp.com',
+'ui.fling.doublepimp.com',
+'ui.manwin.doublepimp.com',
+'ui.partygaming.doublepimp.com',
+'ui.phn.doublepimp.com',
+'ui.rk.doublepimp.com',
+'ui.streamate.doublepimp.com',
+'ui.zanox-affiliate.de',
+'ui.zanox.com',
+'uim.adfarm1.adition.com',
+'uim.adition.com',
+'uim.image.adition.com',
+'uim.tifbs.net',
+'uir.uimserv.net',
+'uk-ads.openx.net',
+'uk.2.cqcounter.com',
+'uk.adserver.yahoo.com',
+'uk.cqcounter.com',
+'uk.nedstat.net',
+'uk.nedstatpro.net',
+'uk.sitestat.com',
+'uk1.siteimprove.com',
+'ukaffiliates2.com',
+'ukatoe.com',
+'ukbanners.com',
+'uktvandroid.2cnt.net',
+'uktvdotcom.2cnt.net',
+'uktvios.2cnt.net',
+'ulock.it',
+'ultimacash.go2cloud.org',
+'ultimate-guitar.us.intellitxt.com',
+'ultimategracelessness.info',
+'ultimatelyreveal.com',
+'ultraadserver.com',
+'um.eqads.com',
+'um.simpli.fi',
+'umbel.com',
+'umbs.ero-advertising.com',
+'umeng.com',
+'umprow.com',
+'ums.adtech.de',
+'unadvertising.info',
+'unboxingdotfb.download',
+'unbridlingdkkedavk.download',
+'uncarefulwrhmgwje.download',
+'uncoached.us.intellitxt.com',
+'undefined.vindicosuite.com',
+'underclick.ru',
+'undertonenetworks.com',
+'unfairnesstxucdbqiz.download',
+'unfamedooxpcktdb.download',
+'unfurled.com',
+'unica.com',
+'unicast.com',
+'unicast.ign.com',
+'unicume.com',
+'unicume.go2cloud.org',
+'union2.50bang.org',
+'uniqueleads.com',
+'uniquesurf.com',
+'unisonsas.bravejournal.com',
+'universal-traffic.com',
+'unlck.net',
+'unlimitads.go2affise.com',
+'unlimitedtextads.com',
+'unpacifiedeaecmq.download',
+'unquietlyzyiwrvvao.download',
+'unrightfuljfuqrbf.download',
+'unrulymedia.com',
+'unsisteredgajudros.download',
+'unstaidblmgmsmpq.download',
+'unsubscribe.rmv.so',
+'untangledlkvhbhj.download',
+'untendereduxqwgikf.download',
+'unwealhdvfydj.download',
+'unwellnessyttshyf.download',
+'uob-com-sg.b.appier.net',
+'uobsoe.com',
+'uol-i3.servedbyopenx.com',
+'up.cm.ksmobile.com',
+'up.nytimes.com',
+'upads.info',
+'upahco.go2affise.com',
+'upapps.go2cloud.org',
+'upcnl.tt.omtrdc.net',
+'upcuushogunates.review',
+'update.moatads.com',
+'updatewinrar.ru',
+'upgrowsxdeyxj.download',
+'upliftsearch.com',
+'upload.kipa.co.il',
+'upload.webtrends.com',
+'upload.yeahmobi.com',
+'upload.zedo.com',
+'uploadedgnxjteu.download',
+'upnorma.com',
+'uponit.com',
+'upraisegbczr.download',
+'uproar.com',
+'upsellit.com',
+'upsight.com',
+'upsnap.com',
+'upstream.where.com',
+'uptnzrhwainwright.review',
+'uptpro.homestead.com',
+'uptrck.com',
+'upv4.moatads.com',
+'uralap.com',
+'urbanityadnetwork.com',
+'urbo.2cnt.net',
+'urc.taboolasyndication.com',
+'urchin.com',
+'urchin.estadao.com.br',
+'urlaubspiraten.digidip.net',
+'urlcash.net',
+'urlcheck.hulu.com',
+'urlstats.com',
+'urlzzz.com',
+'us-ads.openx.net',
+'us-east-1.profile-api.ads.linkedin.com',
+'us-gmtdmp.mookie1.com',
+'us-nj-e10.traffictradinghub.com',
+'us-nj-e2.traffictradinghub.com',
+'us-u.openx.net',
+'us.2.cqcounter.com',
+'us.a1.yimg.com',
+'us.a2.yimg.com',
+'us.adserver.yahoo.com',
+'us.cam4ads.com',
+'us.cqcounter.com',
+'us.i1.yimg.com',
+'us.js.yimg.com',
+'us.wa.ui-portal.com',
+'us.webprodcdn.com',
+'us.winninganswers.net',
+'us.yimg.com',
+'us0.adlibr.com',
+'us01.lockview.cn',
+'us02.lockview.cn',
+'us03.lockview.cn',
+'us2widget.nimblecommerce.com',
+'us3widget.nimblecommerce.com',
+'us5.campaign-archive1.com',
+'us5.forward-to-friend.com',
+'us5.forward-to-friend1.com',
+'usa.bpath.com',
+'usa.nedstat.com',
+'usa.nedstat.net',
+'usabilla.com',
+'usachoice.net',
+'usads.futurenet.nl',
+'usage.trackjs.com',
+'usarevenue.com',
+'usbanners.com',
+'usd.bravo-dog.com',
+'usdtop.58.com',
+'use.a.volvelle.tech',
+'usearchmedia.com',
+'usefb.adsrvr.org',
+'usell.go2cloud.org',
+'usenet.raidrush.org',
+'user-disp.tidaltv.com',
+'userlog.synapseip.tv',
+'users.ero-advertising.com',
+'users.marketleverage.com',
+'uslbtest.cedexis.com',
+'usr.dropkickmedia.com',
+'usr.mgid.com',
+'usun.112.2o7.net',
+'usw.a.volvelle.tech',
+'utarget.co.uk',
+'uthenxxnoisemaker.review',
+'utils.adadapter.netzathleten-media.de',
+'utils.mediageneral.net',
+'utm.myfuncards.com',
+'utm.trk.myfuncards.com',
+'utm.trk.popularscreensavers.com',
+'utm.trk.webfetti.com',
+'utm.webfetti.com',
+'utm2.smileycentral.com',
+'utmtrk2.smileycentral.com',
+'utokapa.com',
+'utopiad.com',
+'utorido.com',
+'utrade.com',
+'uugpwdbtalaria.review',
+'uur.at',
+'uv.terra.com.br',
+'uvyeoperistome.review',
+'uy81rb.wraug5vv72b28fch.pro',
+'uzekrs.com',
+'uzhegovandrey.justclick.ru',
+'uzomaxgcamel.review',
+'uzotarak.com',
+'v.amazon-adsystem.com',
+'v.chartboost.com',
+'v.duba.net',
+'v.effectivemeasure.net',
+'v.emedia.cn',
+'v.extreme-dm.com',
+'v.gfhdkse.com',
+'v.movad.de',
+'v.visitweb.com',
+'v.wqsph.net',
+'v.zedo.com',
+'v.zeroredirect.com',
+'v.zeroredirect1.com',
+'v.zeroredirect2.com',
+'v0.extreme-dm.com',
+'v1.extreme-dm.com',
+'v1.nedstatbasic.net',
+'v2.adsbookie.com',
+'v2.ipopup.ir',
+'v2.popupsky.ir',
+'v2.shareaholic.com',
+'v2.visualwebsiteoptimizer.com',
+'v3.adition.com',
+'v3.come.to',
+'v3.moatads.com',
+'v4.moatads.com',
+'v6exp3-ds.metric.gstatic.com',
+'v6exp3-ds.metric.ipv6test.net',
+'v6exp3-v4.metric.gstatic.com',
+'v75.xiti.com',
+'v75l.xiti.com',
+'va.akamai.startappservice.com',
+'va.marketer.lpsnmedia.net',
+'va.origin.startappservice.com',
+'vad.e-messenger.net',
+'vad.mainentrypoint.com',
+'vadoseyxcuekj.download',
+'valf.atm.youku.com',
+'valuead.com',
+'valueclick.com',
+'valueclickmedia.com',
+'valuecommerce.com',
+'valuecommerce.ne.jp',
+'valuedopinions.co.uk',
+'valuehit.com',
+'valuepay.com',
+'valuesponsor.com',
+'vampiresofview.atdmt.com.706.9000.302br.net',
+'vap2dfw1.lijit.com',
+'vap2iad3.lijit.com',
+'vaporprofits.go2cloud.org',
+'variedlyewebwd.download',
+'varsityads.directtrack.com',
+'vassalagescafpum.download',
+'vast.moatads.com',
+'vastuchaedes.review',
+'vastx.moatads.com',
+'vatrack.hinet.net',
+'vayavicio.com',
+'vb1700.mgmt.somee.com',
+'vbhoqfogey.review',
+'vbutlvkmesially.review',
+'vcbypttassel.review',
+'vcm.go2cloud.org',
+'vcom.go2cloud.org',
+'vda.gtarcade.com',
+'vdlayer.videodeals.com',
+'vdopia.com',
+'vdrn.redplum.com',
+'vectormarketing.com',
+'velismedia.go2cloud.org',
+'velocity.go2cloud.org',
+'velti.com',
+'vemna.go2cloud.org',
+'vendiblefqgmayr.download',
+'venonita.com',
+'venturead.com',
+'verdict.abc.go.com',
+'verio.122.2o7.net',
+'verisign.bfast.com',
+'verisign.tt.omtrdc.net',
+'verisignwildcard.112.2o7.net',
+'verisonwildcard.112.2o7.net',
+'verivox.ivwbox.de',
+'verizonwireless.tt.omtrdc.net',
+'verkehrsportal.de.intellitxt.com',
+'vermifugalvacqsw.download',
+'vernalizesdoanrm.download',
+'vertical-leap.co.uk',
+'vertoz.go2affise.com',
+'verumm.go2affise.com',
+'vervemobile.com',
+'vfd2dyn.vodafone.de',
+'vfdeprod.amobee.com',
+'vfqwpoxshelfroom.review',
+'vg00.met.vgwort.de',
+'vg01.met.vgwort.de',
+'vg02.met.vgwort.de',
+'vg03.met.vgwort.de',
+'vg04.met.vgwort.de',
+'vg05.met.vgwort.de',
+'vg06.met.vgwort.de',
+'vg07.met.vgwort.de',
+'vg08.met.vgwort.de',
+'vg09.met.vgwort.de',
+'vgleqkbergamots.review',
+'vh1com.112.2o7.net',
+'vhnnicneovals.review',
+'via.appia.com',
+'viaden.com',
+'viadeplayer.112.2o7.net',
+'vialeads.com',
+'viamichelin.ads.trafficjunky.net',
+'viamichelin.ss.xxxmyself.com',
+'viamtvcom.112.2o7.net',
+'viamtvde.112.2o7.net',
+'viavivade.112.2o7.net',
+'vibrantmedia.com',
+'vice-ads.s3.amazonaws.com',
+'viciosityptktpdyq.download',
+'vidego.multicastmedia.com',
+'video-loader.com',
+'video-stats.video.google.com',
+'video.begun.ru',
+'video.cld.startappexchange.com',
+'video.digidip.net',
+'video.moatads.com',
+'video.oms.eu',
+'video.unrulymedia.com',
+'videoads.theonion.com',
+'videocodezone.us.intellitxt.com',
+'videofun.me',
+'videoplus.vo.llnwd.net',
+'videos.oms.eu',
+'videostat-new.index.hu',
+'videostat.index.hu',
+'videostrip.2cnt.net',
+'videotracker.washingtonpost.com',
+'vidzur.com',
+'view-ads.de',
+'view.atdmt.com',
+'view.atdmt.com.1000.302br.net',
+'view.atdmt.com.10213.9002.302br.net',
+'view.atdmt.com.10216.9002.302br.net',
+'view.atdmt.com.10217.9002.302br.net',
+'view.atdmt.com.10219.9002.302br.net',
+'view.atdmt.com.10220.9002.302br.net',
+'view.atdmt.com.10222.9002.302br.net',
+'view.atdmt.com.10223.9002.302br.net',
+'view.atdmt.com.10359.9023.302br.net',
+'view.atdmt.com.10362.9023.302br.net',
+'view.atdmt.com.10365.9023.302br.net',
+'view.atdmt.com.10377.9023.302br.net',
+'view.atdmt.com.10380.9023.302br.net',
+'view.atdmt.com.10383.9023.302br.net',
+'view.atdmt.com.10410.9023.302br.net',
+'view.atdmt.com.10428.9023.302br.net',
+'view.atdmt.com.10452.9023.302br.net',
+'view.atdmt.com.1179.9011.302br.net',
+'view.atdmt.com.1182.9011.302br.net',
+'view.atdmt.com.1185.9011.302br.net',
+'view.atdmt.com.12494.9043.302br.net',
+'view.atdmt.com.12518.9043.302br.net',
+'view.atdmt.com.12548.9043.302br.net',
+'view.atdmt.com.12560.9043.302br.net',
+'view.atdmt.com.13559.9050.302br.net',
+'view.atdmt.com.13562.9050.302br.net',
+'view.atdmt.com.13565.9050.302br.net',
+'view.atdmt.com.13571.9050.302br.net',
+'view.atdmt.com.13574.9050.302br.net',
+'view.atdmt.com.13577.9050.302br.net',
+'view.atdmt.com.14382.9067.302br.net',
+'view.atdmt.com.14385.9067.302br.net',
+'view.atdmt.com.14388.9067.302br.net',
+'view.atdmt.com.16538.9094.302br.net',
+'view.atdmt.com.16541.9094.302br.net',
+'view.atdmt.com.16547.9094.302br.net',
+'view.atdmt.com.16942.9102.302br.net',
+'view.atdmt.com.16945.9102.302br.net',
+'view.atdmt.com.16948.9102.302br.net',
+'view.atdmt.com.16951.9102.302br.net',
+'view.atdmt.com.16954.9102.302br.net',
+'view.atdmt.com.16957.9102.302br.net',
+'view.atdmt.com.16960.9102.302br.net',
+'view.atdmt.com.16963.9102.302br.net',
+'view.atdmt.com.16966.9102.302br.net',
+'view.atdmt.com.16969.9103.302br.net',
+'view.atdmt.com.16972.9103.302br.net',
+'view.atdmt.com.16975.9103.302br.net',
+'view.atdmt.com.1764.9020.302br.net',
+'view.atdmt.com.1767.9020.302br.net',
+'view.atdmt.com.1770.9020.302br.net',
+'view.atdmt.com.1782.9020.302br.net',
+'view.atdmt.com.1794.9020.302br.net',
+'view.atdmt.com.1818.9020.302br.net',
+'view.atdmt.com.1821.9020.302br.net',
+'view.atdmt.com.1824.9020.302br.net',
+'view.atdmt.com.20661.9121.302br.net',
+'view.atdmt.com.20663.9121.302br.net',
+'view.atdmt.com.20664.9121.302br.net',
+'view.atdmt.com.20673.9121.302br.net',
+'view.atdmt.com.20682.9121.302br.net',
+'view.atdmt.com.20685.9121.302br.net',
+'view.atdmt.com.20696.9121.302br.net',
+'view.atdmt.com.20697.9121.302br.net',
+'view.atdmt.com.20702.9121.302br.net',
+'view.atdmt.com.20703.9121.302br.net',
+'view.atdmt.com.20705.9121.302br.net',
+'view.atdmt.com.20706.9121.302br.net',
+'view.atdmt.com.20709.9121.302br.net',
+'view.atdmt.com.20712.9121.302br.net',
+'view.atdmt.com.20715.9121.302br.net',
+'view.atdmt.com.20859.9122.302br.net',
+'view.atdmt.com.20862.9122.302br.net',
+'view.atdmt.com.20868.9122.302br.net',
+'view.atdmt.com.20871.9122.302br.net',
+'view.atdmt.com.2177.9023.302br.net',
+'view.atdmt.com.22690.9002.302br.net',
+'view.atdmt.com.22693.9002.302br.net',
+'view.atdmt.com.22696.9002.302br.net',
+'view.atdmt.com.22698.9002.302br.net',
+'view.atdmt.com.22699.9002.302br.net',
+'view.atdmt.com.22727.9141.302br.net',
+'view.atdmt.com.22728.9141.302br.net',
+'view.atdmt.com.22729.9141.302br.net',
+'view.atdmt.com.22730.9141.302br.net',
+'view.atdmt.com.22731.9141.302br.net',
+'view.atdmt.com.22732.9141.302br.net',
+'view.atdmt.com.22733.9141.302br.net',
+'view.atdmt.com.22734.9141.302br.net',
+'view.atdmt.com.22735.9141.302br.net',
+'view.atdmt.com.22736.9141.302br.net',
+'view.atdmt.com.22737.9141.302br.net',
+'view.atdmt.com.22738.9141.302br.net',
+'view.atdmt.com.22763.9133.302br.net',
+'view.atdmt.com.22764.9133.302br.net',
+'view.atdmt.com.22765.9133.302br.net',
+'view.atdmt.com.22766.65.9133.302br.net',
+'view.atdmt.com.22766.9133.302br.net',
+'view.atdmt.com.22767.9133.302br.net',
+'view.atdmt.com.22768.9133.302br.net',
+'view.atdmt.com.22769.9133.302br.net',
+'view.atdmt.com.22770.9133.302br.net',
+'view.atdmt.com.22772.9133.302br.net',
+'view.atdmt.com.22773.9133.302br.net',
+'view.atdmt.com.22774.9133.302br.net',
+'view.atdmt.com.22828.9121.302br.net',
+'view.atdmt.com.22829.9121.302br.net',
+'view.atdmt.com.22830.9121.302br.net',
+'view.atdmt.com.22831.9121.302br.net',
+'view.atdmt.com.22832.9121.302br.net',
+'view.atdmt.com.22833.9121.302br.net',
+'view.atdmt.com.22834.9121.302br.net',
+'view.atdmt.com.22835.9121.302br.net',
+'view.atdmt.com.22837.9121.302br.net',
+'view.atdmt.com.22838.9121.302br.net',
+'view.atdmt.com.22839.9121.302br.net',
+'view.atdmt.com.22841.9121.302br.net',
+'view.atdmt.com.22842.9121.302br.net',
+'view.atdmt.com.22843.9121.302br.net',
+'view.atdmt.com.22845.9121.302br.net',
+'view.atdmt.com.22846.9121.302br.net',
+'view.atdmt.com.22847.9121.302br.net',
+'view.atdmt.com.22848.9121.302br.net',
+'view.atdmt.com.22849.9121.302br.net',
+'view.atdmt.com.22850.9121.302br.net',
+'view.atdmt.com.22851.9121.302br.net',
+'view.atdmt.com.22927.9146.302br.net',
+'view.atdmt.com.22928.9146.302br.net',
+'view.atdmt.com.22930.9146.302br.net',
+'view.atdmt.com.22931.9146.302br.net',
+'view.atdmt.com.22933.9146.302br.net',
+'view.atdmt.com.22934.9146.302br.net',
+'view.atdmt.com.22937.9146.302br.net',
+'view.atdmt.com.22940.9146.302br.net',
+'view.atdmt.com.22943.9146.302br.net',
+'view.atdmt.com.23125.9161.302br.net',
+'view.atdmt.com.23128.9161.302br.net',
+'view.atdmt.com.23131.9161.302br.net',
+'view.atdmt.com.23134.9161.302br.net',
+'view.atdmt.com.23137.9161.302br.net',
+'view.atdmt.com.23140.9161.302br.net',
+'view.atdmt.com.23142.9161.302br.net',
+'view.atdmt.com.23143.9161.302br.net',
+'view.atdmt.com.23145.9161.302br.net',
+'view.atdmt.com.23146.9161.302br.net',
+'view.atdmt.com.23148.9161.302br.net',
+'view.atdmt.com.23149.9161.302br.net',
+'view.atdmt.com.23151.9161.302br.net',
+'view.atdmt.com.23152.9161.302br.net',
+'view.atdmt.com.23154.9161.302br.net',
+'view.atdmt.com.23155.9161.302br.net',
+'view.atdmt.com.23157.9161.302br.net',
+'view.atdmt.com.23158.9161.302br.net',
+'view.atdmt.com.23160.9161.302br.net',
+'view.atdmt.com.23161.9161.302br.net',
+'view.atdmt.com.23163.9161.302br.net',
+'view.atdmt.com.23164.9161.302br.net',
+'view.atdmt.com.23166.9161.302br.net',
+'view.atdmt.com.23167.9161.302br.net',
+'view.atdmt.com.23169.9161.302br.net',
+'view.atdmt.com.23170.9161.302br.net',
+'view.atdmt.com.23172.9161.302br.net',
+'view.atdmt.com.23173.9161.302br.net',
+'view.atdmt.com.23175.9161.302br.net',
+'view.atdmt.com.23176.9161.302br.net',
+'view.atdmt.com.23359.9133.302br.net',
+'view.atdmt.com.23361.9133.302br.net',
+'view.atdmt.com.23364.9133.302br.net',
+'view.atdmt.com.23365.9133.302br.net',
+'view.atdmt.com.23369.9133.302br.net',
+'view.atdmt.com.23371.9133.302br.net',
+'view.atdmt.com.23372.9133.302br.net',
+'view.atdmt.com.23373.9133.302br.net',
+'view.atdmt.com.23376.9133.302br.net',
+'view.atdmt.com.23377.9133.302br.net',
+'view.atdmt.com.23379.9133.302br.net',
+'view.atdmt.com.23381.9133.302br.net',
+'view.atdmt.com.23384.9133.302br.net',
+'view.atdmt.com.23385.9133.302br.net',
+'view.atdmt.com.23388.9133.302br.net',
+'view.atdmt.com.23389.9133.302br.net',
+'view.atdmt.com.23390.9133.302br.net',
+'view.atdmt.com.23391.9133.302br.net',
+'view.atdmt.com.23393.9133.302br.net',
+'view.atdmt.com.23396.9133.302br.net',
+'view.atdmt.com.23397.9133.302br.net',
+'view.atdmt.com.23401.9133.302br.net',
+'view.atdmt.com.23402.9161.302br.net',
+'view.atdmt.com.23403.9161.302br.net',
+'view.atdmt.com.23405.9161.302br.net',
+'view.atdmt.com.23406.9161.302br.net',
+'view.atdmt.com.23408.9161.302br.net',
+'view.atdmt.com.23409.9161.302br.net',
+'view.atdmt.com.23411.9161.302br.net',
+'view.atdmt.com.23412.9161.302br.net',
+'view.atdmt.com.23414.9161.302br.net',
+'view.atdmt.com.23415.9161.302br.net',
+'view.atdmt.com.23417.9161.302br.net',
+'view.atdmt.com.23418.9161.302br.net',
+'view.atdmt.com.23921.9133.302br.net',
+'view.atdmt.com.24127.9169.302br.net',
+'view.atdmt.com.24128.9169.302br.net',
+'view.atdmt.com.24129.9169.302br.net',
+'view.atdmt.com.24130.9169.302br.net',
+'view.atdmt.com.24131.9169.302br.net',
+'view.atdmt.com.24132.9169.302br.net',
+'view.atdmt.com.24133.9169.302br.net',
+'view.atdmt.com.24134.9169.302br.net',
+'view.atdmt.com.24135.9169.302br.net',
+'view.atdmt.com.24136.9169.302br.net',
+'view.atdmt.com.24137.9169.302br.net',
+'view.atdmt.com.24138.9169.302br.net',
+'view.atdmt.com.24138.om.24137.9169.302br.net',
+'view.atdmt.com.24142.9169.302br.net',
+'view.atdmt.com.24144.9169.302br.net',
+'view.atdmt.com.24146.9169.302br.net',
+'view.atdmt.com.24148.9169.302br.net',
+'view.atdmt.com.24150.9169.302br.net',
+'view.atdmt.com.24153.9169.302br.net',
+'view.atdmt.com.24154.9169.302br.net',
+'view.atdmt.com.24155.9169.302br.net',
+'view.atdmt.com.24156.9169.302br.net',
+'view.atdmt.com.24157.9169.302br.net',
+'view.atdmt.com.24158.9169.302br.net',
+'view.atdmt.com.24159.9169.302br.net',
+'view.atdmt.com.24160.9169.302br.net',
+'view.atdmt.com.24161.9169.302br.net',
+'view.atdmt.com.24162.9169.302br.net',
+'view.atdmt.com.24175.9169.302br.net',
+'view.atdmt.com.24176.9169.302br.net',
+'view.atdmt.com.24177.9169.302br.net',
+'view.atdmt.com.24178.9169.302br.net',
+'view.atdmt.com.24179.9169.302br.net',
+'view.atdmt.com.24180.9169.302br.net',
+'view.atdmt.com.24181.9169.302br.net',
+'view.atdmt.com.24182.9169.302br.net',
+'view.atdmt.com.24184.9169.302br.net',
+'view.atdmt.com.24185.9169.302br.net',
+'view.atdmt.com.24186.9169.302br.net',
+'view.atdmt.com.24187.9169.302br.net',
+'view.atdmt.com.24188.9169.302br.net',
+'view.atdmt.com.24189.9169.302br.net',
+'view.atdmt.com.24190.9169.302br.net',
+'view.atdmt.com.24191.9169.302br.net',
+'view.atdmt.com.24192.9169.302br.net',
+'view.atdmt.com.24193.9169.302br.net',
+'view.atdmt.com.24194.9169.302br.net',
+'view.atdmt.com.241w.atdmt.com.24137.9169.302br.net',
+'view.atdmt.com.24208.9169.302br.net',
+'view.atdmt.com.24211.9114.302br.net',
+'view.atdmt.com.24219.9114.302br.net',
+'view.atdmt.com.24220.9114.302br.net',
+'view.atdmt.com.24225.9114.302br.net',
+'view.atdmt.com.24226.9114.302br.net',
+'view.atdmt.com.24229.9114.302br.net',
+'view.atdmt.com.24231.9114.302br.net',
+'view.atdmt.com.24232.9114.302br.net',
+'view.atdmt.com.24287.9170.302br.net',
+'view.atdmt.com.24290.9170.302br.net',
+'view.atdmt.com.24292.9170.302br.net',
+'view.atdmt.com.24293.9170.302br.net',
+'view.atdmt.com.24296.9170.302br.net',
+'view.atdmt.com.24299.9170.302br.net',
+'view.atdmt.com.24302.9170.302br.net',
+'view.atdmt.com.24305.9170.302br.net',
+'view.atdmt.com.24308.9170.302br.net',
+'view.atdmt.com.24311.9170.302br.net',
+'view.atdmt.com.24314.9170.302br.net',
+'view.atdmt.com.24317.9170.302br.net',
+'view.atdmt.com.24320.9170.302br.net',
+'view.atdmt.com.24491.9179.302br.net',
+'view.atdmt.com.24492.9179.302br.net',
+'view.atdmt.com.24494.9179.302br.net',
+'view.atdmt.com.24495.9179.302br.net',
+'view.atdmt.com.24497.9179.302br.net',
+'view.atdmt.com.24498.9179.302br.net',
+'view.atdmt.com.24498.91dm.302br.net',
+'view.atdmt.com.24501.9179.302br.net',
+'view.atdmt.com.24503.9179.302br.net',
+'view.atdmt.com.24504.9179.302br.net',
+'view.atdmt.com.24506.9179.302br.net',
+'view.atdmt.com.24507.9179.302br.net',
+'view.atdmt.com.24528.9180.302br.net.25148.9185.302br.net',
+'view.atdmt.com.24531.9180.302br.net.25151.9185.302br.net',
+'view.atdmt.com.24534.9180.302br.net.25154.9185.302br.net',
+'view.atdmt.com.24537.9180.302br.net.25157.9185.302br.net',
+'view.atdmt.com.24540.9180.302br.net.25160.9185.302br.net',
+'view.atdmt.com.24543.9180.302br.net.25163.9185.302br.net',
+'view.atdmt.com.24546.9180.302br.net.25166.9185.302br.net',
+'view.atdmt.com.24549.9180.302br.net.25169.9185.302br.net',
+'view.atdmt.com.24552.9180.302br.net.25172.9185.302br.net',
+'view.atdmt.com.24555.9180.302br.net.25175.9185.302br.net',
+'view.atdmt.com.24558.9180.302br.net.25178.9185.302br.net',
+'view.atdmt.com.24561.9180.302br.net.25181.9185.302br.net',
+'view.atdmt.com.24575.9180.302br.net.25195.9185.302br.net',
+'view.atdmt.com.24576.9180.302br.net.25196.9185.302br.net',
+'view.atdmt.com.24578.9180.302br.net.25198.9185.302br.net',
+'view.atdmt.com.24579.9180.302br.net.25199.9185.302br.net',
+'view.atdmt.com.24581.9180.302br.net.25201.9185.302br.net',
+'view.atdmt.com.24582.9180.302br.net.25202.9185.302br.net',
+'view.atdmt.com.24585.9180.302br.net.25205.9185.302br.net',
+'view.atdmt.com.24588.9180.302br.net.25208.9185.302br.net',
+'view.atdmt.com.24591.9180.302br.net.25211.9185.302br.net',
+'view.atdmt.com.24594.9180.302br.net.25214.9185.302br.net',
+'view.atdmt.com.24597.9180.302br.net.25217.9185.302br.net',
+'view.atdmt.com.24882.9170.302br.net',
+'view.atdmt.com.24885.9170.302br.net',
+'view.atdmt.com.24888.9170.302br.net',
+'view.atdmt.com.24900.9170.302br.net',
+'view.atdmt.com.24903.9170.302br.net',
+'view.atdmt.com.24906.9170.302br.net',
+'view.atdmt.com.25148.9185.302br.net',
+'view.atdmt.com.25151.9185.302br.net',
+'view.atdmt.com.25154.9185.302br.net',
+'view.atdmt.com.25157.9185.302br.net',
+'view.atdmt.com.25160.9185.302br.net',
+'view.atdmt.com.25163.9185.302br.net',
+'view.atdmt.com.25166.9185.302br.net',
+'view.atdmt.com.25169.9185.302br.net',
+'view.atdmt.com.25172.9185.302br.net',
+'view.atdmt.com.25175.9185.302br.net',
+'view.atdmt.com.25178.9185.302br.net',
+'view.atdmt.com.25181.9185.302br.net',
+'view.atdmt.com.25196.9185.302br.net',
+'view.atdmt.com.25198.9185.302br.net',
+'view.atdmt.com.25199.9185.302br.net',
+'view.atdmt.com.25201.9185.302br.net',
+'view.atdmt.com.25202.9185.302br.net',
+'view.atdmt.com.25205.9185.302br.net',
+'view.atdmt.com.25208.9185.302br.net',
+'view.atdmt.com.25211.9185.302br.net',
+'view.atdmt.com.25214.9185.302br.net',
+'view.atdmt.com.25217.9185.302br.net',
+'view.atdmt.com.25217.9185.302br.net',
+'view.atdmt.com.26099.9201.302br.net',
+'view.atdmt.com.26102.9201.302br.net',
+'view.atdmt.com.26105.9201.302br.net',
+'view.atdmt.com.26107.9201.302br.net',
+'view.atdmt.com.26108.9201.302br.net',
+'view.atdmt.com.26110.9201.302br.net',
+'view.atdmt.com.26111.9201.302br.net',
+'view.atdmt.com.26113.9201.302br.net',
+'view.atdmt.com.26114.9201.302br.net',
+'view.atdmt.com.26116.9201.302br.net',
+'view.atdmt.com.26117.9201.302br.net',
+'view.atdmt.com.26119.9201.302br.net',
+'view.atdmt.com.26120.9201.302br.net',
+'view.atdmt.com.26122.9201.302br.net',
+'view.atdmt.com.26123.9201.302br.net',
+'view.atdmt.com.26125.9201.302br.net',
+'view.atdmt.com.26126.9201.302br.net',
+'view.atdmt.com.26128.9201.302br.net',
+'view.atdmt.com.26129.9201.302br.net',
+'view.atdmt.com.26132.9201.302br.net',
+'view.atdmt.com.26135.9201.302br.net',
+'view.atdmt.com.26136.9201.302br.net',
+'view.atdmt.com.26137.9201.302br.net',
+'view.atdmt.com.26139.9201.302br.net',
+'view.atdmt.com.26140.9201.302br.net',
+'view.atdmt.com.26141.9201.302br.net',
+'view.atdmt.com.26142.9201.302br.net',
+'view.atdmt.com.26143.9201.302br.net',
+'view.atdmt.com.26144.9201.302br.net',
+'view.atdmt.com.26145.9201.302br.net',
+'view.atdmt.com.26146.9201.302br.net',
+'view.atdmt.com.26147.9201.302br.net',
+'view.atdmt.com.26149.9201.302br.net',
+'view.atdmt.com.26150.9201.302br.net',
+'view.atdmt.com.26151.9201.302br.net',
+'view.atdmt.com.26153.9201.302br.net',
+'view.atdmt.com.26155.9201.302br.net',
+'view.atdmt.com.26157.9201.302br.net',
+'view.atdmt.com.26159.9201.302br.net',
+'view.atdmt.com.26161.9201.302br.net',
+'view.atdmt.com.26163.9201.302br.net',
+'view.atdmt.com.26165.9201.302br.net',
+'view.atdmt.com.26167.9201.302br.net',
+'view.atdmt.com.26169.9201.302br.net',
+'view.atdmt.com.26170.9201.302br.net',
+'view.atdmt.com.26171.9201.302br.net',
+'view.atdmt.com.26173.9201.302br.net',
+'view.atdmt.com.26175.9201.302br.net',
+'view.atdmt.com.26177.9201.302br.net',
+'view.atdmt.com.26178.9201.302br.net',
+'view.atdmt.com.26179.9201.302br.net',
+'view.atdmt.com.26181.9201.302br.net',
+'view.atdmt.com.26182.9201.302br.net',
+'view.atdmt.com.26183.9201.302br.net',
+'view.atdmt.com.26185.9201.302br.net',
+'view.atdmt.com.26187.9201.302br.net',
+'view.atdmt.com.26188.9201.302br.net',
+'view.atdmt.com.26189.9201.302br.net',
+'view.atdmt.com.26191.9201.302br.net',
+'view.atdmt.com.26193.9201.302br.net',
+'view.atdmt.com.26195.9201.302br.net',
+'view.atdmt.com.26197.9201.302br.net',
+'view.atdmt.com.26198.9201.302br.net',
+'view.atdmt.com.26199.9201.302br.net',
+'view.atdmt.com.26200.9201.302br.net',
+'view.atdmt.com.26201.9201.302br.net',
+'view.atdmt.com.26203.9201.302br.net',
+'view.atdmt.com.26205.9201.302br.net',
+'view.atdmt.com.26218.9201.302br.net',
+'view.atdmt.com.26219.9201.302br.net',
+'view.atdmt.com.26220.9201.302br.net',
+'view.atdmt.com.26221.9201.302br.net',
+'view.atdmt.com.26222.9201.302br.net',
+'view.atdmt.com.26223.9201.302br.net',
+'view.atdmt.com.26224.9201.302br.net',
+'view.atdmt.com.26225.9201.302br.net',
+'view.atdmt.com.26226.9201.302br.net',
+'view.atdmt.com.26227.9201.302br.net',
+'view.atdmt.com.26228.9201.302br.net',
+'view.atdmt.com.26229.9201.302br.net',
+'view.atdmt.com.26285.9202.302br.net',
+'view.atdmt.com.26288.9202.302br.net',
+'view.atdmt.com.26291.9202.302br.net',
+'view.atdmt.com.26294.9202.302br.net',
+'view.atdmt.com.26297.9202.302br.net',
+'view.atdmt.com.26300.9202.302br.net',
+'view.atdmt.com.26303.9202.302br.net',
+'view.atdmt.com.26306.9202.302br.net',
+'view.atdmt.com.26309.9202.302br.net',
+'view.atdmt.com.26621.9201.302br.net',
+'view.atdmt.com.26624.9201.302br.net',
+'view.atdmt.com.26627.9201.302br.net',
+'view.atdmt.com.26630.9201.302br.net',
+'view.atdmt.com.26633.9201.302br.net',
+'view.atdmt.com.26635.9201.302br.net',
+'view.atdmt.com.26636.9201.302br.net',
+'view.atdmt.com.26639.9201.302br.net',
+'view.atdmt.com.26642.9201.302br.net',
+'view.atdmt.com.26645.9201.302br.net',
+'view.atdmt.com.26647.9201.302br.net',
+'view.atdmt.com.26648.9201.302br.net',
+'view.atdmt.com.26651.9201.302br.net',
+'view.atdmt.com.26654.9201.302br.net',
+'view.atdmt.com.26657.9201.302br.net',
+'view.atdmt.com.26660.9201.302br.net',
+'view.atdmt.com.26663.9201.302br.net',
+'view.atdmt.com.26665.9201.302br.net',
+'view.atdmt.com.26666.9201.302br.net',
+'view.atdmt.com.26669.9201.302br.net',
+'view.atdmt.com.26672.9201.302br.net',
+'view.atdmt.com.26675.9201.302br.net',
+'view.atdmt.com.26677.9201.302br.net',
+'view.atdmt.com.26678.9201.302br.net',
+'view.atdmt.com.26680.9201.302br.net',
+'view.atdmt.com.26681.9201.302br.net',
+'view.atdmt.com.26684.9201.302br.net',
+'view.atdmt.com.26687.9201.302br.net',
+'view.atdmt.com.26690.9201.302br.net',
+'view.atdmt.com.26692.9201.302br.net',
+'view.atdmt.com.26693.9201.302br.net',
+'view.atdmt.com.26696.9201.302br.net',
+'view.atdmt.com.26698.9201.302br.net',
+'view.atdmt.com.26699.9201.302br.net',
+'view.atdmt.com.26702.9201.302br.net',
+'view.atdmt.com.26705.9201.302br.net',
+'view.atdmt.com.26708.9201.302br.net',
+'view.atdmt.com.26710.9201.302br.net',
+'view.atdmt.com.26711.9201.302br.net',
+'view.atdmt.com.26714.9201.302br.net',
+'view.atdmt.com.26717.9201.302br.net',
+'view.atdmt.com.26720.9201.302br.net',
+'view.atdmt.com.26722.9201.302br.net',
+'view.atdmt.com.26723.9201.302br.net',
+'view.atdmt.com.26726.9201.302br.net',
+'view.atdmt.com.26728.9201.302br.net',
+'view.atdmt.com.26729.9201.302br.net',
+'view.atdmt.com.26731.9201.302br.net',
+'view.atdmt.com.26732.9201.302br.net',
+'view.atdmt.com.26734.9201.302br.net',
+'view.atdmt.com.26735.9201.302br.net',
+'view.atdmt.com.26737.9201.302br.net',
+'view.atdmt.com.26738.9201.302br.net',
+'view.atdmt.com.26740.9201.302br.net',
+'view.atdmt.com.26741.9201.302br.net',
+'view.atdmt.com.26743.9201.302br.net',
+'view.atdmt.com.26744.9201.302br.net',
+'view.atdmt.com.26759.9201.302br.net',
+'view.atdmt.com.26762.9201.302br.net',
+'view.atdmt.com.26765.9201.302br.net',
+'view.atdmt.com.26777.9201.302br.net',
+'view.atdmt.com.26780.9201.302br.net',
+'view.atdmt.com.26783.9201.302br.net',
+'view.atdmt.com.26795.9201.302br.net',
+'view.atdmt.com.26798.9201.302br.net',
+'view.atdmt.com.26801.9201.302br.net',
+'view.atdmt.com.26804.9201.302br.net',
+'view.atdmt.com.26807.9201.302br.net',
+'view.atdmt.com.26809.9201.302br.net',
+'view.atdmt.com.26810.9201.302br.net',
+'view.atdmt.com.26812.9201.302br.net',
+'view.atdmt.com.26813.9201.302br.net',
+'view.atdmt.com.26816.9201.302br.net',
+'view.atdmt.com.26819.9201.302br.net',
+'view.atdmt.com.26821.9201.302br.net',
+'view.atdmt.com.26822.9201.302br.net',
+'view.atdmt.com.26824.9201.302br.net',
+'view.atdmt.com.26825.9201.302br.net',
+'view.atdmt.com.26828.9201.302br.net',
+'view.atdmt.com.26831.9201.302br.net',
+'view.atdmt.com.26834.9201.302br.net',
+'view.atdmt.com.26837.9201.302br.net',
+'view.atdmt.com.26839.9201.302br.net',
+'view.atdmt.com.26840.9201.302br.net',
+'view.atdmt.com.26841.9201.302br.net',
+'view.atdmt.com.26842.9201.302br.net',
+'view.atdmt.com.26843.9201.302br.net',
+'view.atdmt.com.26844.9201.302br.net',
+'view.atdmt.com.26845.9201.302br.net',
+'view.atdmt.com.26846.9201.302br.net',
+'view.atdmt.com.26847.9201.302br.net',
+'view.atdmt.com.26848.9201.302br.net',
+'view.atdmt.com.26849.9201.302br.net',
+'view.atdmt.com.26850.9201.302br.net',
+'view.atdmt.com.26851.9201.302br.net',
+'view.atdmt.com.26852.9201.302br.net',
+'view.atdmt.com.26854.9201.302br.net',
+'view.atdmt.com.26855.9201.302br.net',
+'view.atdmt.com.26856.9201.302br.net',
+'view.atdmt.com.26858.9201.302br.net',
+'view.atdmt.com.26859.9201.302br.net',
+'view.atdmt.com.26860.9201.302br.net',
+'view.atdmt.com.26862.9201.302br.net',
+'view.atdmt.com.26863.9201.302br.net',
+'view.atdmt.com.26864.9201.302br.net',
+'view.atdmt.com.26866.9201.302br.net',
+'view.atdmt.com.26868.9201.302br.net',
+'view.atdmt.com.26870.9201.302br.net',
+'view.atdmt.com.26872.9201.302br.net',
+'view.atdmt.com.26874.9201.302br.net',
+'view.atdmt.com.26875.9201.302br.net',
+'view.atdmt.com.26876.9201.302br.net',
+'view.atdmt.com.26877.9201.302br.net',
+'view.atdmt.com.26878.9201.302br.net',
+'view.atdmt.com.26880.9201.302br.net',
+'view.atdmt.com.26882.9201.302br.net',
+'view.atdmt.com.26883.9201.302br.net',
+'view.atdmt.com.26884.9201.302br.net',
+'view.atdmt.com.26885.9201.302br.net',
+'view.atdmt.com.26886.9201.302br.net',
+'view.atdmt.com.26888.9201.302br.net',
+'view.atdmt.com.26889.9201.302br.net',
+'view.atdmt.com.26890.9201.302br.net',
+'view.atdmt.com.26891.9201.302br.net',
+'view.atdmt.com.26892.9201.302br.net',
+'view.atdmt.com.26893.9201.302br.net',
+'view.atdmt.com.26894.9201.302br.net',
+'view.atdmt.com.26896.9201.302br.net',
+'view.atdmt.com.26897.9201.302br.net',
+'view.atdmt.com.26898.9201.302br.net',
+'view.atdmt.com.26899.9201.302br.net',
+'view.atdmt.com.26900.9201.302br.net',
+'view.atdmt.com.26901.9201.302br.net',
+'view.atdmt.com.26902.9201.302br.net',
+'view.atdmt.com.26903.9201.302br.net',
+'view.atdmt.com.26904.9201.302br.net',
+'view.atdmt.com.26905.9201.302br.net',
+'view.atdmt.com.26906.9201.302br.net',
+'view.atdmt.com.26908.9201.302br.net',
+'view.atdmt.com.26909.9201.302br.net',
+'view.atdmt.com.26910.9201.302br.net',
+'view.atdmt.com.26911.9201.302br.net',
+'view.atdmt.com.26912.9201.302br.net',
+'view.atdmt.com.26914.9201.302br.net',
+'view.atdmt.com.26915.9201.302br.net',
+'view.atdmt.com.26916.9201.302br.net',
+'view.atdmt.com.26917.9201.302br.net',
+'view.atdmt.com.26918.9201.302br.net',
+'view.atdmt.com.26919.9201.302br.net',
+'view.atdmt.com.26920.9201.302br.net',
+'view.atdmt.com.26921.9201.302br.net',
+'view.atdmt.com.26922.9201.302br.net',
+'view.atdmt.com.26923.9201.302br.net',
+'view.atdmt.com.26924.9201.302br.net',
+'view.atdmt.com.26925.9201.302br.net',
+'view.atdmt.com.26926.9201.302br.net',
+'view.atdmt.com.26939.9201.302br.net',
+'view.atdmt.com.26940.9201.302br.net',
+'view.atdmt.com.26941.9201.302br.net',
+'view.atdmt.com.26942.9201.302br.net',
+'view.atdmt.com.26943.9201.302br.net',
+'view.atdmt.com.26944.9201.302br.net',
+'view.atdmt.com.26945.9201.302br.net',
+'view.atdmt.com.26946.9201.302br.net',
+'view.atdmt.com.26947.9201.302br.net',
+'view.atdmt.com.26948.9201.302br.net',
+'view.atdmt.com.26949.9201.302br.net',
+'view.atdmt.com.26950.9201.302br.net',
+'view.atdmt.com.26963.9201.302br.net',
+'view.atdmt.com.26964.9201.302br.net',
+'view.atdmt.com.26965.9201.302br.net',
+'view.atdmt.com.26966.9201.302br.net',
+'view.atdmt.com.26968.9201.302br.net',
+'view.atdmt.com.26969.9201.302br.net',
+'view.atdmt.com.26970.9201.302br.net',
+'view.atdmt.com.26971.9201.302br.net',
+'view.atdmt.com.26972.9201.302br.net',
+'view.atdmt.com.26974.9201.302br.net',
+'view.atdmt.com.26975.9201.302br.net',
+'view.atdmt.com.26976.9201.302br.net',
+'view.atdmt.com.26977.9201.302br.net',
+'view.atdmt.com.26978.9201.302br.net',
+'view.atdmt.com.26979.9201.302br.net',
+'view.atdmt.com.26980.9201.302br.net',
+'view.atdmt.com.26982.9201.302br.net',
+'view.atdmt.com.26983.9201.302br.net',
+'view.atdmt.com.26984.9201.302br.net',
+'view.atdmt.com.26985.9201.302br.net',
+'view.atdmt.com.26986.9201.302br.net',
+'view.atdmt.com.27059.9202.302br.net',
+'view.atdmt.com.27060.9202.302br.net',
+'view.atdmt.com.27062.9202.302br.net',
+'view.atdmt.com.27063.9202.302br.net',
+'view.atdmt.com.27065.9202.302br.net',
+'view.atdmt.com.27066.9202.302br.net',
+'view.atdmt.com.27068.9202.302br.net',
+'view.atdmt.com.27069.9202.302br.net',
+'view.atdmt.com.27071.9202.302br.net',
+'view.atdmt.com.27072.9202.302br.net',
+'view.atdmt.com.27074.9202.302br.net',
+'view.atdmt.com.27075.9202.302br.net',
+'view.atdmt.com.27078.9202.302br.net',
+'view.atdmt.com.27081.9202.302br.net',
+'view.atdmt.com.27084.9202.302br.net',
+'view.atdmt.com.27087.9202.302br.net',
+'view.atdmt.com.27090.9202.302br.net',
+'view.atdmt.com.27093.9202.302br.net',
+'view.atdmt.com.27096.9202.302br.net',
+'view.atdmt.com.27099.9202.302br.net',
+'view.atdmt.com.27102.9202.302br.net',
+'view.atdmt.com.27105.9202.302br.net',
+'view.atdmt.com.27108.9202.302br.net',
+'view.atdmt.com.27111.9202.302br.net',
+'view.atdmt.com.27114.9202.302br.net',
+'view.atdmt.com.27116.9202.302br.net',
+'view.atdmt.com.27117.9202.302br.net',
+'view.atdmt.com.27119.9202.302br.net',
+'view.atdmt.com.27120.9202.302br.net',
+'view.atdmt.com.27123.9202.302br.net',
+'view.atdmt.com.27126.9202.302br.net',
+'view.atdmt.com.27129.9202.302br.net',
+'view.atdmt.com.27131.9202.302br.net',
+'view.atdmt.com.27132.9202.302br.net',
+'view.atdmt.com.27135.9202.302br.net',
+'view.atdmt.com.27138.9202.302br.net',
+'view.atdmt.com.27141.9202.302br.net',
+'view.atdmt.com.27144.9202.302br.net',
+'view.atdmt.com.27147.9202.302br.net',
+'view.atdmt.com.27150.9202.302br.net',
+'view.atdmt.com.27152.9202.302br.net',
+'view.atdmt.com.27153.9202.302br.net',
+'view.atdmt.com.27156.9202.302br.net',
+'view.atdmt.com.27159.9202.302br.net',
+'view.atdmt.com.27162.9202.302br.net',
+'view.atdmt.com.27165.9202.302br.net',
+'view.atdmt.com.27168.9202.302br.net',
+'view.atdmt.com.27171.9202.302br.net',
+'view.atdmt.com.27174.9202.302br.net',
+'view.atdmt.com.27177.9202.302br.net',
+'view.atdmt.com.27179.9202.302br.net',
+'view.atdmt.com.27180.9202.302br.net',
+'view.atdmt.com.27186.9202.302br.net',
+'view.atdmt.com.27189.9202.302br.net',
+'view.atdmt.com.27192.9202.302br.net',
+'view.atdmt.com.27195.9202.302br.net',
+'view.atdmt.com.27198.9202.302br.net',
+'view.atdmt.com.27204.9202.302br.net',
+'view.atdmt.com.27206.9202.302br.net',
+'view.atdmt.com.27207.9202.302br.net',
+'view.atdmt.com.27209.9202.302br.net',
+'view.atdmt.com.27210.9202.302br.net',
+'view.atdmt.com.27213.9202.302br.net',
+'view.atdmt.com.27215.9202.302br.net',
+'view.atdmt.com.27216.9202.302br.net',
+'view.atdmt.com.27218.9202.302br.net',
+'view.atdmt.com.27219.9202.302br.net',
+'view.atdmt.com.27222.9202.302br.net',
+'view.atdmt.com.27225.9202.302br.net',
+'view.atdmt.com.27228.9202.302br.net',
+'view.atdmt.com.27231.9202.302br.net',
+'view.atdmt.com.27234.9202.302br.net',
+'view.atdmt.com.27237.9202.302br.net',
+'view.atdmt.com.27240.9202.302br.net',
+'view.atdmt.com.27243.9202.302br.net',
+'view.atdmt.com.27246.9202.302br.net',
+'view.atdmt.com.27249.9202.302br.net',
+'view.atdmt.com.27252.9202.302br.net',
+'view.atdmt.com.27255.9202.302br.net',
+'view.atdmt.com.27258.9202.302br.net',
+'view.atdmt.com.27264.9202.302br.net',
+'view.atdmt.com.27267.9202.302br.net',
+'view.atdmt.com.27270.9202.302br.net',
+'view.atdmt.com.27273.9202.302br.net',
+'view.atdmt.com.27276.9202.302br.net',
+'view.atdmt.com.27279.9202.302br.net',
+'view.atdmt.com.27282.9202.302br.net',
+'view.atdmt.com.27288.9202.302br.net',
+'view.atdmt.com.27291.9202.302br.net',
+'view.atdmt.com.27294.9202.302br.net',
+'view.atdmt.com.27297.9202.302br.net',
+'view.atdmt.com.27300.9202.302br.net',
+'view.atdmt.com.27311.9201.302br.net',
+'view.atdmt.com.27314.9201.302br.net',
+'view.atdmt.com.27317.9201.302br.net',
+'view.atdmt.com.27320.9201.302br.net',
+'view.atdmt.com.27326.9201.302br.net',
+'view.atdmt.com.27329.9201.302br.net',
+'view.atdmt.com.27332.9201.302br.net',
+'view.atdmt.com.27337.9201.302br.net',
+'view.atdmt.com.27338.9201.302br.net',
+'view.atdmt.com.27344.9201.302br.net',
+'view.atdmt.com.27347.9201.302br.net',
+'view.atdmt.com.27350.9201.302br.net',
+'view.atdmt.com.27352.9201.302br.net',
+'view.atdmt.com.27353.9201.302br.net',
+'view.atdmt.com.27359.9201.302br.net',
+'view.atdmt.com.27362.9201.302br.net',
+'view.atdmt.com.27364.9201.302br.net',
+'view.atdmt.com.27365.9201.302br.net',
+'view.atdmt.com.27488.9208.302br.net',
+'view.atdmt.com.27491.9208.302br.net',
+'view.atdmt.com.27650.9169.302br.net',
+'view.atdmt.com.27651.9169.302br.net',
+'view.atdmt.com.315.6000.302br.net',
+'view.atdmt.com.317.6000.302br.net',
+'view.atdmt.com.318.6000.302br.net',
+'view.atdmt.com.319.6000.302br.net',
+'view.atdmt.com.320.6000.302br.net',
+'view.atdmt.com.324.6000.302br.net',
+'view.atdmt.com.33330.9201.302br.net',
+'view.atdmt.com.33331.9201.302br.net',
+'view.atdmt.com.33332.9201.302br.net',
+'view.atdmt.com.33333.9201.302br.net',
+'view.atdmt.com.33334.9201.302br.net',
+'view.atdmt.com.33335.9201.302br.net',
+'view.atdmt.com.33336.9201.302br.net',
+'view.atdmt.com.33337.9201.302br.net',
+'view.atdmt.com.33338.9201.302br.net',
+'view.atdmt.com.33339.9201.302br.net',
+'view.atdmt.com.33340.9201.302br.net',
+'view.atdmt.com.33341.9201.302br.net',
+'view.atdmt.com.33342.9201.302br.net',
+'view.atdmt.com.33343.9201.302br.net',
+'view.atdmt.com.33345.9201.302br.net',
+'view.atdmt.com.33346.9201.302br.net',
+'view.atdmt.com.33347.9201.302br.net',
+'view.atdmt.com.33348.9201.302br.net',
+'view.atdmt.com.33349.9201.302br.net',
+'view.atdmt.com.33350.9201.302br.net',
+'view.atdmt.com.33351.9201.302br.net',
+'view.atdmt.com.33352.9201.302br.net',
+'view.atdmt.com.33353.9201.302br.net',
+'view.atdmt.com.33354.9201.302br.net',
+'view.atdmt.com.33355.9201.302br.net',
+'view.atdmt.com.33356.9201.302br.net',
+'view.atdmt.com.33357.9201.302br.net',
+'view.atdmt.com.33359.9201.302br.net',
+'view.atdmt.com.33361.9201.302br.net',
+'view.atdmt.com.33363.9201.302br.net',
+'view.atdmt.com.33365.9201.302br.net',
+'view.atdmt.com.33367.9201.302br.net',
+'view.atdmt.com.33369.9201.302br.net',
+'view.atdmt.com.33371.9201.302br.net',
+'view.atdmt.com.33373.9201.302br.net',
+'view.atdmt.com.33375.9201.302br.net',
+'view.atdmt.com.33377.9201.302br.net',
+'view.atdmt.com.33379.9201.302br.net',
+'view.atdmt.com.33381.9201.302br.net',
+'view.atdmt.com.33383.9201.302br.net',
+'view.atdmt.com.33385.9201.302br.net',
+'view.atdmt.com.33387.9201.302br.net',
+'view.atdmt.com.33388.9201.302br.net',
+'view.atdmt.com.33389.9201.302br.net',
+'view.atdmt.com.33390.9201.302br.net',
+'view.atdmt.com.33391.9201.302br.net',
+'view.atdmt.com.33392.9201.302br.net',
+'view.atdmt.com.33393.9201.302br.net',
+'view.atdmt.com.33394.9201.302br.net',
+'view.atdmt.com.33395.9201.302br.net',
+'view.atdmt.com.33396.9201.302br.net',
+'view.atdmt.com.33397.9201.302br.net',
+'view.atdmt.com.33401.9201.302br.net',
+'view.atdmt.com.33403.9201.302br.net',
+'view.atdmt.com.33405.9201.302br.net',
+'view.atdmt.com.33407.9201.302br.net',
+'view.atdmt.com.33409.9201.302br.net',
+'view.atdmt.com.33411.9201.302br.net',
+'view.atdmt.com.33413.9201.302br.net',
+'view.atdmt.com.33417.9201.302br.net',
+'view.atdmt.com.33418.9201.302br.net',
+'view.atdmt.com.33419.9201.302br.net',
+'view.atdmt.com.33420.9201.302br.net',
+'view.atdmt.com.33421.9201.302br.net',
+'view.atdmt.com.33423.9201.302br.net',
+'view.atdmt.com.33425.9201.302br.net',
+'view.atdmt.com.33427.9201.302br.net',
+'view.atdmt.com.33428.9201.302br.net',
+'view.atdmt.com.33429.9201.302br.net',
+'view.atdmt.com.33430.9201.302br.net',
+'view.atdmt.com.33431.9201.302br.net',
+'view.atdmt.com.33432.9201.302br.net',
+'view.atdmt.com.33433.9201.302br.net',
+'view.atdmt.com.33434.9201.302br.net',
+'view.atdmt.com.33435.9201.302br.net',
+'view.atdmt.com.33436.9201.302br.net',
+'view.atdmt.com.33437.9201.302br.net',
+'view.atdmt.com.33438.9201.302br.net',
+'view.atdmt.com.33439.9201.302br.net',
+'view.atdmt.com.33441.9201.302br.net',
+'view.atdmt.com.33443.9201.302br.net',
+'view.atdmt.com.33445.9201.302br.net',
+'view.atdmt.com.33447.9201.302br.net',
+'view.atdmt.com.33448.9201.302br.net',
+'view.atdmt.com.33449.9201.302br.net',
+'view.atdmt.com.33451.9201.302br.net',
+'view.atdmt.com.33453.9201.302br.net',
+'view.atdmt.com.33455.9201.302br.net',
+'view.atdmt.com.33457.9201.302br.net',
+'view.atdmt.com.33459.9201.302br.net',
+'view.atdmt.com.33461.9201.302br.net',
+'view.atdmt.com.33463.9201.302br.net',
+'view.atdmt.com.33465.9201.302br.net',
+'view.atdmt.com.33467.9201.302br.net',
+'view.atdmt.com.33469.9201.302br.net',
+'view.atdmt.com.33471.9201.302br.net',
+'view.atdmt.com.33473.9201.302br.net',
+'view.atdmt.com.33475.9201.302br.net',
+'view.atdmt.com.33476.9245.302br.net',
+'view.atdmt.com.33477.9245.302br.net',
+'view.atdmt.com.33479.9245.302br.net',
+'view.atdmt.com.33480.9245.302br.net',
+'view.atdmt.com.33482.9245.302br.net',
+'view.atdmt.com.33483.9245.302br.net',
+'view.atdmt.com.33485.9245.302br.net',
+'view.atdmt.com.33486.9245.302br.net',
+'view.atdmt.com.33489.9245.302br.net',
+'view.atdmt.com.33492.9245.302br.net',
+'view.atdmt.com.33497.9245.302br.net',
+'view.atdmt.com.33498.9245.302br.net',
+'view.atdmt.com.33500.9245.302br.net',
+'view.atdmt.com.33501.9245.302br.net',
+'view.atdmt.com.33581.9249.302br.net',
+'view.atdmt.com.33582.9249.302br.net',
+'view.atdmt.com.33583.9249.302br.net',
+'view.atdmt.com.33584.9249.302br.net',
+'view.atdmt.com.33585.9249.302br.net',
+'view.atdmt.com.33586.9249.302br.net',
+'view.atdmt.com.33718.9169.302br.net',
+'view.atdmt.com.33719.9169.302br.net',
+'view.atdmt.com.33720.9169.302br.net',
+'view.atdmt.com.33721.9169.302br.net',
+'view.atdmt.com.33722.9169.302br.net',
+'view.atdmt.com.33723.9169.302br.net',
+'view.atdmt.com.33724.9169.302br.net',
+'view.atdmt.com.33726.9169.302br.net',
+'view.atdmt.com.33727.9169.302br.net',
+'view.atdmt.com.33728.9169.302br.net',
+'view.atdmt.com.33861.9201.302br.net',
+'view.atdmt.com.33862.9201.302br.net',
+'view.atdmt.com.33864.9201.302br.net',
+'view.atdmt.com.33865.9201.302br.net',
+'view.atdmt.com.33866.9201.302br.net',
+'view.atdmt.com.33898.9201.302br.net',
+'view.atdmt.com.33900.9201.302br.net',
+'view.atdmt.com.33902.9201.302br.net',
+'view.atdmt.com.33922.9201.302br.net',
+'view.atdmt.com.33924.9201.302br.net',
+'view.atdmt.com.33926.9201.302br.net',
+'view.atdmt.com.33980.9169.302br.net',
+'view.atdmt.com.33982.9169.302br.net',
+'view.atdmt.com.33984.9169.302br.net',
+'view.atdmt.com.33986.9169.302br.net',
+'view.atdmt.com.33988.9169.302br.net',
+'view.atdmt.com.33989.9169.302br.net',
+'view.atdmt.com.33990.9169.302br.net',
+'view.atdmt.com.33991.9169.302br.net',
+'view.atdmt.com.33992.9169.302br.net',
+'view.atdmt.com.33993.9169.302br.net',
+'view.atdmt.com.33994.9169.302br.net',
+'view.atdmt.com.33995.9169.302br.net',
+'view.atdmt.com.33996.9169.302br.net',
+'view.atdmt.com.33997.9169.302br.net',
+'view.atdmt.com.33998.9169.302br.net',
+'view.atdmt.com.33999.9169.302br.net',
+'view.atdmt.com.34000.9169.302br.net',
+'view.atdmt.com.34486.9251.302br.net',
+'view.atdmt.com.34489.9251.302br.net',
+'view.atdmt.com.34503.9251.302br.net',
+'view.atdmt.com.34504.9251.302br.net',
+'view.atdmt.com.34519.9251.302br.net',
+'view.atdmt.com.35013.9254.302br.net',
+'view.atdmt.com.35014.9254.302br.net',
+'view.atdmt.com.35016.9254.302br.net',
+'view.atdmt.com.35017.9254.302br.net',
+'view.atdmt.com.35019.9254.302br.net',
+'view.atdmt.com.35020.9254.302br.net',
+'view.atdmt.com.35067.9255.302br.net',
+'view.atdmt.com.35068.9255.302br.net',
+'view.atdmt.com.35069.9255.302br.net',
+'view.atdmt.com.35070.9255.302br.net',
+'view.atdmt.com.35071.9255.302br.net',
+'view.atdmt.com.35072.9255.302br.net',
+'view.atdmt.com.35073.9255.302br.net',
+'view.atdmt.com.35074.9255.302br.net',
+'view.atdmt.com.35075.9255.302br.net',
+'view.atdmt.com.35076.9255.302br.net',
+'view.atdmt.com.35077.9255.302br.net',
+'view.atdmt.com.35078.9255.302br.net',
+'view.atdmt.com.35079.9255.302br.net',
+'view.atdmt.com.35080.9255.302br.net',
+'view.atdmt.com.35081.9255.302br.net',
+'view.atdmt.com.35082.9255.302br.net',
+'view.atdmt.com.35083.9255.302br.net',
+'view.atdmt.com.35084.9255.302br.net',
+'view.atdmt.com.35085.9255.302br.net',
+'view.atdmt.com.35086.9255.302br.net',
+'view.atdmt.com.35087.9255.302br.net',
+'view.atdmt.com.35088.9255.302br.net',
+'view.atdmt.com.35089.9255.302br.net',
+'view.atdmt.com.35090.9255.302br.net',
+'view.atdmt.com.35091.9255.302br.net',
+'view.atdmt.com.35092.9255.302br.net',
+'view.atdmt.com.35093.9255.302br.net',
+'view.atdmt.com.35094.9255.302br.net',
+'view.atdmt.com.35095.9255.302br.net',
+'view.atdmt.com.35096.9255.302br.net',
+'view.atdmt.com.35097.9255.302br.net',
+'view.atdmt.com.35098.9255.302br.net',
+'view.atdmt.com.35099.9255.302br.net',
+'view.atdmt.com.35100.9255.302br.net',
+'view.atdmt.com.35178.9254.302br.net',
+'view.atdmt.com.35179.9254.302br.net',
+'view.atdmt.com.35181.9254.302br.net',
+'view.atdmt.com.35182.9254.302br.net',
+'view.atdmt.com.35184.9254.302br.net',
+'view.atdmt.com.35185.9254.302br.net',
+'view.atdmt.com.35187.9254.302br.net',
+'view.atdmt.com.35188.9254.302br.net',
+'view.atdmt.com.35190.9254.302br.net',
+'view.atdmt.com.35191.9254.302br.net',
+'view.atdmt.com.35193.9254.302br.net',
+'view.atdmt.com.35194.9254.302br.net',
+'view.atdmt.com.35353.9267.302br.net',
+'view.atdmt.com.35354.9267.302br.net',
+'view.atdmt.com.35357.9266.302br.net',
+'view.atdmt.com.35372.9234.302br.net',
+'view.atdmt.com.35381.9234.302br.net',
+'view.atdmt.com.35384.9234.302br.net',
+'view.atdmt.com.35411.9251.302br.net',
+'view.atdmt.com.35413.9251.302br.net',
+'view.atdmt.com.35622.9169.302br.net',
+'view.atdmt.com.35623.9169.302br.net',
+'view.atdmt.com.35624.9169.302br.net',
+'view.atdmt.com.35625.9169.302br.net',
+'view.atdmt.com.35626.9169.302br.net',
+'view.atdmt.com.35627.9169.302br.net',
+'view.atdmt.com.35628.9169.302br.net',
+'view.atdmt.com.35629.9169.302br.net',
+'view.atdmt.com.35630.9169.302br.net',
+'view.atdmt.com.35631.9169.302br.net',
+'view.atdmt.com.35632.9169.302br.net',
+'view.atdmt.com.35633.9169.302br.net',
+'view.atdmt.com.35757.9272.302br.net',
+'view.atdmt.com.35766.9272.302br.net',
+'view.atdmt.com.35769.9272.302br.net',
+'view.atdmt.com.35775.9272.302br.net',
+'view.atdmt.com.35778.9272.302br.net',
+'view.atdmt.com.35972.9201.302br.net',
+'view.atdmt.com.35973.9201.302br.net',
+'view.atdmt.com.35980.9251.302br.net',
+'view.atdmt.com.35981.9251.302br.net',
+'view.atdmt.com.36272.9251.302br.net',
+'view.atdmt.com.36273.9251.302br.net',
+'view.atdmt.com.36315.9273.302br.net',
+'view.atdmt.com.36318.9273.302br.net',
+'view.atdmt.com.36321.9273.302br.net',
+'view.atdmt.com.36324.9273.302br.net',
+'view.atdmt.com.36330.9273.302br.net',
+'view.atdmt.com.36333.9273.302br.net',
+'view.atdmt.com.36336.9273.302br.net',
+'view.atdmt.com.36339.9273.302br.net',
+'view.atdmt.com.36342.9273.302br.net',
+'view.atdmt.com.36345.9273.302br.net',
+'view.atdmt.com.36348.9273.302br.net',
+'view.atdmt.com.36891.9201.302br.net',
+'view.atdmt.com.36892.9201.302br.net',
+'view.atdmt.com.36893.9201.302br.net',
+'view.atdmt.com.36894.9201.302br.net',
+'view.atdmt.com.36895.9201.302br.net',
+'view.atdmt.com.36896.9201.302br.net',
+'view.atdmt.com.37929.9304.302br.net',
+'view.atdmt.com.37932.9304.302br.net',
+'view.atdmt.com.37935.9304.302br.net',
+'view.atdmt.com.37947.9304.302br.net',
+'view.atdmt.com.37950.9304.302br.net',
+'view.atdmt.com.37953.9304.302br.net',
+'view.atdmt.com.37965.9304.302br.net',
+'view.atdmt.com.37968.9304.302br.net',
+'view.atdmt.com.37971.9304.302br.net',
+'view.atdmt.com.37983.9304.302br.net',
+'view.atdmt.com.38004.9304.302br.net',
+'view.atdmt.com.38007.9304.302br.net',
+'view.atdmt.com.38019.9304.302br.net',
+'view.atdmt.com.38022.9304.302br.net',
+'view.atdmt.com.38025.9304.302br.net',
+'view.atdmt.com.38037.9304.302br.net',
+'view.atdmt.com.38040.9304.302br.net',
+'view.atdmt.com.38043.9304.302br.net',
+'view.atdmt.com.38055.9304.302br.net',
+'view.atdmt.com.38058.9304.302br.net',
+'view.atdmt.com.38061.9304.302br.net',
+'view.atdmt.com.38073.9304.302br.net',
+'view.atdmt.com.38076.9304.302br.net',
+'view.atdmt.com.38079.9304.302br.net',
+'view.atdmt.com.38094.9304.302br.net',
+'view.atdmt.com.38097.9304.302br.net',
+'view.atdmt.com.38127.9304.302br.net',
+'view.atdmt.com.38130.9304.302br.net',
+'view.atdmt.com.38145.9304.302br.net',
+'view.atdmt.com.38148.9304.302br.net',
+'view.atdmt.com.38151.9304.302br.net',
+'view.atdmt.com.38163.9304.302br.net',
+'view.atdmt.com.38166.9304.302br.net',
+'view.atdmt.com.38169.9304.302br.net',
+'view.atdmt.com.38181.9304.302br.net',
+'view.atdmt.com.38184.9304.302br.net',
+'view.atdmt.com.38187.9304.302br.net',
+'view.atdmt.com.38199.9304.302br.net',
+'view.atdmt.com.38202.9304.302br.net',
+'view.atdmt.com.38205.9304.302br.net',
+'view.atdmt.com.38217.9304.302br.net',
+'view.atdmt.com.38220.9304.302br.net',
+'view.atdmt.com.38223.9304.302br.net',
+'view.atdmt.com.38235.9304.302br.net',
+'view.atdmt.com.38238.9304.302br.net',
+'view.atdmt.com.38241.9304.302br.net',
+'view.atdmt.com.38253.9304.302br.net',
+'view.atdmt.com.38256.9304.302br.net',
+'view.atdmt.com.38274.9304.302br.net',
+'view.atdmt.com.38289.9304.302br.net',
+'view.atdmt.com.38292.9304.302br.net',
+'view.atdmt.com.38295.9304.302br.net',
+'view.atdmt.com.38307.9304.302br.net',
+'view.atdmt.com.38310.9304.302br.net',
+'view.atdmt.com.38313.9304.302br.net',
+'view.atdmt.com.38316.9304.302br.net',
+'view.atdmt.com.38319.9304.302br.net',
+'view.atdmt.com.38322.9304.302br.net',
+'view.atdmt.com.38334.9304.302br.net',
+'view.atdmt.com.38337.9304.302br.net',
+'view.atdmt.com.38340.9304.302br.net',
+'view.atdmt.com.38352.9304.302br.net',
+'view.atdmt.com.38355.9304.302br.net',
+'view.atdmt.com.38358.9304.302br.net',
+'view.atdmt.com.38370.9304.302br.net',
+'view.atdmt.com.38373.9304.302br.net',
+'view.atdmt.com.38376.9304.302br.net',
+'view.atdmt.com.38388.9304.302br.net',
+'view.atdmt.com.38391.9304.302br.net',
+'view.atdmt.com.38394.9304.302br.net',
+'view.atdmt.com.38406.9304.302br.net',
+'view.atdmt.com.38409.9304.302br.net',
+'view.atdmt.com.38412.9304.302br.net',
+'view.atdmt.com.38424.9304.302br.net',
+'view.atdmt.com.38427.9304.302br.net',
+'view.atdmt.com.38430.9304.302br.net',
+'view.atdmt.com.38445.9304.302br.net',
+'view.atdmt.com.38463.9304.302br.net',
+'view.atdmt.com.38466.9304.302br.net',
+'view.atdmt.com.38468.9304.302br.net',
+'view.atdmt.com.38469.9304.302br.net',
+'view.atdmt.com.38471.9304.302br.net',
+'view.atdmt.com.38472.9304.302br.net',
+'view.atdmt.com.38474.9304.302br.net',
+'view.atdmt.com.38475.9304.302br.net',
+'view.atdmt.com.38478.9304.302br.net',
+'view.atdmt.com.38481.9304.302br.net',
+'view.atdmt.com.38484.9304.302br.net',
+'view.atdmt.com.38487.9304.302br.net',
+'view.atdmt.com.38490.9304.302br.net',
+'view.atdmt.com.38493.9304.302br.net',
+'view.atdmt.com.38495.9304.302br.net',
+'view.atdmt.com.38496.9304.302br.net',
+'view.atdmt.com.38498.9304.302br.net',
+'view.atdmt.com.38499.9304.302br.net',
+'view.atdmt.com.38501.9304.302br.net',
+'view.atdmt.com.38502.9304.302br.net',
+'view.atdmt.com.38514.9304.302br.net',
+'view.atdmt.com.38517.9304.302br.net',
+'view.atdmt.com.38520.9304.302br.net',
+'view.atdmt.com.38532.9304.302br.net',
+'view.atdmt.com.38535.9304.302br.net',
+'view.atdmt.com.38541.9304.302br.net',
+'view.atdmt.com.38544.9304.302br.net',
+'view.atdmt.com.38547.9304.302br.net',
+'view.atdmt.com.38559.9304.302br.net',
+'view.atdmt.com.38562.9304.302br.net',
+'view.atdmt.com.38565.9304.302br.net',
+'view.atdmt.com.38586.9304.302br.net',
+'view.atdmt.com.38589.9304.302br.net',
+'view.atdmt.com.38592.9304.302br.net',
+'view.atdmt.com.38595.9304.302br.net',
+'view.atdmt.com.38598.9304.302br.net',
+'view.atdmt.com.38601.9304.302br.net',
+'view.atdmt.com.38604.9304.302br.net',
+'view.atdmt.com.38607.9304.302br.net',
+'view.atdmt.com.38610.9304.302br.net',
+'view.atdmt.com.38613.9304.302br.net',
+'view.atdmt.com.38616.9304.302br.net',
+'view.atdmt.com.38619.9304.302br.net',
+'view.atdmt.com.38622.9304.302br.net',
+'view.atdmt.com.38625.9304.302br.net',
+'view.atdmt.com.38628.9304.302br.net',
+'view.atdmt.com.38631.9304.302br.net',
+'view.atdmt.com.38634.9304.302br.net',
+'view.atdmt.com.38637.9304.302br.net',
+'view.atdmt.com.38649.9304.302br.net',
+'view.atdmt.com.38652.9304.302br.net',
+'view.atdmt.com.38655.9304.302br.net',
+'view.atdmt.com.38676.9304.302br.net',
+'view.atdmt.com.38678.9304.302br.net',
+'view.atdmt.com.38679.9304.302br.net',
+'view.atdmt.com.38681.9304.302br.net',
+'view.atdmt.com.38682.9304.302br.net',
+'view.atdmt.com.38688.9304.302br.net',
+'view.atdmt.com.38694.9304.302br.net',
+'view.atdmt.com.38697.9304.302br.net',
+'view.atdmt.com.38700.9304.302br.net',
+'view.atdmt.com.38703.9304.302br.net',
+'view.atdmt.com.38706.9304.302br.net',
+'view.atdmt.com.38712.9304.302br.net',
+'view.atdmt.com.38715.9304.302br.net',
+'view.atdmt.com.38718.9304.302br.net',
+'view.atdmt.com.38721.9304.302br.net',
+'view.atdmt.com.38724.9304.302br.net',
+'view.atdmt.com.38727.9304.302br.net',
+'view.atdmt.com.38733.9304.302br.net',
+'view.atdmt.com.38736.9304.302br.net',
+'view.atdmt.com.38739.9304.302br.net',
+'view.atdmt.com.38742.9304.302br.net',
+'view.atdmt.com.38745.9304.302br.net',
+'view.atdmt.com.38748.9304.302br.net',
+'view.atdmt.com.38754.9304.302br.net',
+'view.atdmt.com.38757.9304.302br.net',
+'view.atdmt.com.38760.9304.302br.net',
+'view.atdmt.com.38763.9304.302br.net',
+'view.atdmt.com.38766.9304.302br.net',
+'view.atdmt.com.38769.9304.302br.net',
+'view.atdmt.com.38772.9304.302br.net',
+'view.atdmt.com.38784.9304.302br.net',
+'view.atdmt.com.38787.9304.302br.net',
+'view.atdmt.com.38790.9304.302br.net',
+'view.atdmt.com.38793.9304.302br.net',
+'view.atdmt.com.38796.9304.302br.net',
+'view.atdmt.com.38799.9304.302br.net',
+'view.atdmt.com.38801.9304.302br.net',
+'view.atdmt.com.38802.9304.302br.net',
+'view.atdmt.com.38804.9304.302br.net',
+'view.atdmt.com.38805.9304.302br.net',
+'view.atdmt.com.38807.9304.302br.net',
+'view.atdmt.com.38808.9304.302br.net',
+'view.atdmt.com.38811.9304.302br.net',
+'view.atdmt.com.38814.9304.302br.net',
+'view.atdmt.com.38817.9304.302br.net',
+'view.atdmt.com.38829.9304.302br.net',
+'view.atdmt.com.38832.9304.302br.net',
+'view.atdmt.com.38835.9304.302br.net',
+'view.atdmt.com.38853.9304.302br.net',
+'view.atdmt.com.38856.9304.302br.net',
+'view.atdmt.com.38859.9304.302br.net',
+'view.atdmt.com.38862.9304.302br.net',
+'view.atdmt.com.38874.9304.302br.net',
+'view.atdmt.com.38904.9304.302br.net',
+'view.atdmt.com.38907.9304.302br.net',
+'view.atdmt.com.38936.9304.302br.net',
+'view.atdmt.com.38937.9304.302br.net',
+'view.atdmt.com.38939.9304.302br.net',
+'view.atdmt.com.38940.9304.302br.net',
+'view.atdmt.com.38942.9304.302br.net',
+'view.atdmt.com.38943.9304.302br.net',
+'view.atdmt.com.38981.9304.302br.net',
+'view.atdmt.com.38982.9304.302br.net',
+'view.atdmt.com.38984.9304.302br.net',
+'view.atdmt.com.38985.9304.302br.net',
+'view.atdmt.com.38987.9304.302br.net',
+'view.atdmt.com.38988.9304.302br.net',
+'view.atdmt.com.39026.9304.302br.net',
+'view.atdmt.com.39027.9304.302br.net',
+'view.atdmt.com.39029.9304.302br.net',
+'view.atdmt.com.39030.9304.302br.net',
+'view.atdmt.com.39032.9304.302br.net',
+'view.atdmt.com.39033.9304.302br.net',
+'view.atdmt.com.39071.9304.302br.net',
+'view.atdmt.com.39072.9304.302br.net',
+'view.atdmt.com.39074.9304.302br.net',
+'view.atdmt.com.39075.9304.302br.net',
+'view.atdmt.com.39077.9304.302br.net',
+'view.atdmt.com.39078.9304.302br.net',
+'view.atdmt.com.39116.9304.302br.net',
+'view.atdmt.com.39117.9304.302br.net',
+'view.atdmt.com.39119.9304.302br.net',
+'view.atdmt.com.39120.9304.302br.net',
+'view.atdmt.com.39122.9304.302br.net',
+'view.atdmt.com.39123.9304.302br.net',
+'view.atdmt.com.39161.9304.302br.net',
+'view.atdmt.com.39162.9304.302br.net',
+'view.atdmt.com.39164.9304.302br.net',
+'view.atdmt.com.39165.9304.302br.net',
+'view.atdmt.com.39167.9304.302br.net',
+'view.atdmt.com.39168.9304.302br.net',
+'view.atdmt.com.39206.9304.302br.net',
+'view.atdmt.com.39207.9304.302br.net',
+'view.atdmt.com.39209.9304.302br.net',
+'view.atdmt.com.39210.9304.302br.net',
+'view.atdmt.com.39212.9304.302br.net',
+'view.atdmt.com.39213.9304.302br.net',
+'view.atdmt.com.39252.9304.302br.net',
+'view.atdmt.com.39254.9304.302br.net',
+'view.atdmt.com.39255.9304.302br.net',
+'view.atdmt.com.39258.9304.302br.net',
+'view.atdmt.com.39296.9304.302br.net',
+'view.atdmt.com.39297.9304.302br.net',
+'view.atdmt.com.39299.9304.302br.net',
+'view.atdmt.com.39300.9304.302br.net',
+'view.atdmt.com.39302.9304.302br.net',
+'view.atdmt.com.39303.9304.302br.net',
+'view.atdmt.com.39341.9304.302br.net',
+'view.atdmt.com.39342.9304.302br.net',
+'view.atdmt.com.39344.9304.302br.net',
+'view.atdmt.com.39345.9304.302br.net',
+'view.atdmt.com.39347.9304.302br.net',
+'view.atdmt.com.39348.9304.302br.net',
+'view.atdmt.com.39372.9306.302br.net',
+'view.atdmt.com.39373.9306.302br.net',
+'view.atdmt.com.39374.9306.302br.net',
+'view.atdmt.com.39375.9306.302br.net',
+'view.atdmt.com.39376.9306.302br.net',
+'view.atdmt.com.39377.9306.302br.net',
+'view.atdmt.com.39378.9306.302br.net',
+'view.atdmt.com.39380.9306.302br.net',
+'view.atdmt.com.39382.9306.302br.net',
+'view.atdmt.com.39384.9306.302br.net',
+'view.atdmt.com.39385.9306.302br.net',
+'view.atdmt.com.39386.9306.302br.net',
+'view.atdmt.com.39388.9306.302br.net',
+'view.atdmt.com.39389.9306.302br.net',
+'view.atdmt.com.39390.9306.302br.net',
+'view.atdmt.com.39391.9306.302br.net',
+'view.atdmt.com.39392.9306.302br.net',
+'view.atdmt.com.39393.9306.302br.net',
+'view.atdmt.com.39394.9306.302br.net',
+'view.atdmt.com.39404.9306.302br.net',
+'view.atdmt.com.39406.9306.302br.net',
+'view.atdmt.com.39407.9306.302br.net',
+'view.atdmt.com.39408.9306.302br.net',
+'view.atdmt.com.39410.9306.302br.net',
+'view.atdmt.com.39420.9306.302br.net',
+'view.atdmt.com.39422.9306.302br.net',
+'view.atdmt.com.39424.9306.302br.net',
+'view.atdmt.com.39426.9306.302br.net',
+'view.atdmt.com.39438.9306.302br.net',
+'view.atdmt.com.39945.88.302br.net',
+'view.atdmt.com.39946.88.302br.net',
+'view.atdmt.com.39947.88.302br.net',
+'view.atdmt.com.39948.88.302br.net',
+'view.atdmt.com.39949.88.302br.net',
+'view.atdmt.com.39950.88.302br.net',
+'view.atdmt.com.39951.88.302br.net',
+'view.atdmt.com.39952.88.302br.net',
+'view.atdmt.com.41248.9306.302br.net',
+'view.atdmt.com.41250.9306.302br.net',
+'view.atdmt.com.41252.9306.302br.net',
+'view.atdmt.com.41253.9306.302br.net',
+'view.atdmt.com.41254.9306.302br.net',
+'view.atdmt.com.41258.9306.302br.net',
+'view.atdmt.com.41260.9306.302br.net',
+'view.atdmt.com.41262.9306.302br.net',
+'view.atdmt.com.41264.9306.302br.net',
+'view.atdmt.com.41266.9306.302br.net',
+'view.atdmt.com.41268.9306.302br.net',
+'view.atdmt.com.41270.9306.302br.net',
+'view.atdmt.com.42099.9251.302br.net',
+'view.atdmt.com.42101.9251.302br.net',
+'view.atdmt.com.42102.9251.302br.net',
+'view.atdmt.com.42105.9251.302br.net',
+'view.atdmt.com.42497.9306.302br.net',
+'view.atdmt.com.42499.9306.302br.net',
+'view.atdmt.com.42509.9306.302br.net',
+'view.atdmt.com.42511.9306.302br.net',
+'view.atdmt.com.42513.9306.302br.net',
+'view.atdmt.com.42514.9306.302br.net',
+'view.atdmt.com.42515.9306.302br.net',
+'view.atdmt.com.43133.9306.302br.net',
+'view.atdmt.com.43134.9306.302br.net',
+'view.atdmt.com.43136.9306.302br.net',
+'view.atdmt.com.43138.9306.302br.net',
+'view.atdmt.com.43140.9306.302br.net',
+'view.atdmt.com.43142.9306.302br.net',
+'view.atdmt.com.43144.9306.302br.net',
+'view.atdmt.com.43146.9306.302br.net',
+'view.atdmt.com.43148.9306.302br.net',
+'view.atdmt.com.43341.9332.302br.net',
+'view.atdmt.com.43342.9332.302br.net',
+'view.atdmt.com.43344.9332.302br.net',
+'view.atdmt.com.43345.9332.302br.net',
+'view.atdmt.com.43348.9332.302br.net',
+'view.atdmt.com.43350.9332.302br.net',
+'view.atdmt.com.43351.9332.302br.net',
+'view.atdmt.com.43353.9332.302br.net',
+'view.atdmt.com.43354.9332.302br.net',
+'view.atdmt.com.43356.9332.302br.net',
+'view.atdmt.com.43357.9332.302br.net',
+'view.atdmt.com.43359.9332.302br.net',
+'view.atdmt.com.43360.9332.302br.net',
+'view.atdmt.com.43362.9332.302br.net',
+'view.atdmt.com.43363.9332.302br.net',
+'view.atdmt.com.43365.9332.302br.net',
+'view.atdmt.com.43366.9332.302br.net',
+'view.atdmt.com.43368.9332.302br.net',
+'view.atdmt.com.43369.9332.302br.net',
+'view.atdmt.com.43372.9332.302br.net',
+'view.atdmt.com.43374.9332.302br.net',
+'view.atdmt.com.43375.9332.302br.net',
+'view.atdmt.com.44728.9332.302br.net',
+'view.atdmt.com.44730.9332.302br.net',
+'view.atdmt.com.44731.9332.302br.net',
+'view.atdmt.com.44733.9332.302br.net',
+'view.atdmt.com.44734.9332.302br.net',
+'view.atdmt.com.44737.9332.302br.net',
+'view.atdmt.com.44739.9332.302br.net',
+'view.atdmt.com.44740.9332.302br.net',
+'view.atdmt.com.44742.9332.302br.net',
+'view.atdmt.com.44743.9332.302br.net',
+'view.atdmt.com.44745.9332.302br.net',
+'view.atdmt.com.44746.9332.302br.net',
+'view.atdmt.com.44749.9332.302br.net',
+'view.atdmt.com.44751.9332.302br.net',
+'view.atdmt.com.44752.9332.302br.net',
+'view.atdmt.com.44755.9332.302br.net',
+'view.atdmt.com.44757.9332.302br.net',
+'view.atdmt.com.44758.9332.302br.net',
+'view.atdmt.com.44761.9332.302br.net',
+'view.atdmt.com.44763.9332.302br.net',
+'view.atdmt.com.44764.9332.302br.net',
+'view.atdmt.com.44767.9332.302br.net',
+'view.atdmt.com.44770.9332.302br.net',
+'view.atdmt.com.44773.9332.302br.net',
+'view.atdmt.com.44776.9332.302br.net',
+'view.atdmt.com.44779.9332.302br.net',
+'view.atdmt.com.44782.9332.302br.net',
+'view.atdmt.com.44785.9332.302br.net',
+'view.atdmt.com.44788.9332.302br.net',
+'view.atdmt.com.44791.9332.302br.net',
+'view.atdmt.com.44793.9332.302br.net',
+'view.atdmt.com.44794.9332.302br.net',
+'view.atdmt.com.44797.9332.302br.net',
+'view.atdmt.com.44800.9332.302br.net',
+'view.atdmt.com.44805.9337.302br.net',
+'view.atdmt.com.44806.9337.302br.net',
+'view.atdmt.com.44947.9340.302br.net',
+'view.atdmt.com.44950.9340.302br.net',
+'view.atdmt.com.45053.9342.302br.net',
+'view.atdmt.com.45055.9342.302br.net',
+'view.atdmt.com.45058.9342.302br.net',
+'view.atdmt.com.45060.9342.302br.net',
+'view.atdmt.com.45064.9342.302br.net',
+'view.atdmt.com.45066.9342.302br.net',
+'view.atdmt.com.45067.9342.302br.net',
+'view.atdmt.com.45069.9342.302br.net',
+'view.atdmt.com.45072.9342.302br.net',
+'view.atdmt.com.45073.9342.302br.net',
+'view.atdmt.com.45076.9342.302br.net',
+'view.atdmt.com.45077.9342.302br.net',
+'view.atdmt.com.45080.9342.302br.net',
+'view.atdmt.com.45081.9342.302br.net',
+'view.atdmt.com.45084.9342.302br.net',
+'view.atdmt.com.45086.9342.302br.net',
+'view.atdmt.com.45087.9342.302br.net',
+'view.atdmt.com.45090.9342.302br.net',
+'view.atdmt.com.45092.9342.302br.net',
+'view.atdmt.com.45093.9342.302br.net',
+'view.atdmt.com.45098.9342.302br.net',
+'view.atdmt.com.45099.9342.302br.net',
+'view.atdmt.com.45102.9342.302br.net',
+'view.atdmt.com.45103.9342.302br.net',
+'view.atdmt.com.45105.9342.302br.net',
+'view.atdmt.com.45110.9342.302br.net',
+'view.atdmt.com.45112.9342.302br.net',
+'view.atdmt.com.45115.9342.302br.net',
+'view.atdmt.com.45118.9342.302br.net',
+'view.atdmt.com.45119.9342.302br.net',
+'view.atdmt.com.45121.9342.302br.net',
+'view.atdmt.com.45124.9342.302br.net',
+'view.atdmt.com.45128.9342.302br.net',
+'view.atdmt.com.45129.9342.302br.net',
+'view.atdmt.com.45133.9342.302br.net',
+'view.atdmt.com.45136.9342.302br.net',
+'view.atdmt.com.45139.9342.302br.net',
+'view.atdmt.com.45142.9342.302br.net',
+'view.atdmt.com.45145.9342.302br.net',
+'view.atdmt.com.45148.9342.302br.net',
+'view.atdmt.com.45151.9342.302br.net',
+'view.atdmt.com.45154.9342.302br.net',
+'view.atdmt.com.45157.9342.302br.net',
+'view.atdmt.com.45160.9342.302br.net',
+'view.atdmt.com.45163.9342.302br.net',
+'view.atdmt.com.45166.9342.302br.net',
+'view.atdmt.com.45169.9342.302br.net',
+'view.atdmt.com.45172.9342.302br.net',
+'view.atdmt.com.45175.9342.302br.net',
+'view.atdmt.com.45178.9342.302br.net',
+'view.atdmt.com.45181.9342.302br.net',
+'view.atdmt.com.45184.9342.302br.net',
+'view.atdmt.com.45187.9342.302br.net',
+'view.atdmt.com.45190.9342.302br.net',
+'view.atdmt.com.45192.9342.302br.net',
+'view.atdmt.com.45193.9342.302br.net',
+'view.atdmt.com.45196.9342.302br.net',
+'view.atdmt.com.45198.9342.302br.net',
+'view.atdmt.com.45199.9342.302br.net',
+'view.atdmt.com.45201.9342.302br.net',
+'view.atdmt.com.45202.9342.302br.net',
+'view.atdmt.com.45205.9342.302br.net',
+'view.atdmt.com.45208.9342.302br.net',
+'view.atdmt.com.45211.9342.302br.net',
+'view.atdmt.com.45214.9342.302br.net',
+'view.atdmt.com.45217.9342.302br.net',
+'view.atdmt.com.45220.9342.302br.net',
+'view.atdmt.com.45223.9342.302br.net',
+'view.atdmt.com.45226.9342.302br.net',
+'view.atdmt.com.45229.9342.302br.net',
+'view.atdmt.com.45231.9342.302br.net',
+'view.atdmt.com.45232.9342.302br.net',
+'view.atdmt.com.45234.9342.302br.net',
+'view.atdmt.com.45235.9342.302br.net',
+'view.atdmt.com.45238.9342.302br.net',
+'view.atdmt.com.45241.9342.302br.net',
+'view.atdmt.com.45243.9342.302br.net',
+'view.atdmt.com.45244.9342.302br.net',
+'view.atdmt.com.45247.9342.302br.net',
+'view.atdmt.com.45250.9342.302br.net',
+'view.atdmt.com.45253.9342.302br.net',
+'view.atdmt.com.45256.9342.302br.net',
+'view.atdmt.com.45259.9342.302br.net',
+'view.atdmt.com.45262.9342.302br.net',
+'view.atdmt.com.45265.9342.302br.net',
+'view.atdmt.com.45267.9342.302br.net',
+'view.atdmt.com.45268.9342.302br.net',
+'view.atdmt.com.45270.9342.302br.net',
+'view.atdmt.com.45271.9342.302br.net',
+'view.atdmt.com.45273.9342.302br.net',
+'view.atdmt.com.45274.9342.302br.net',
+'view.atdmt.com.45277.9342.302br.net',
+'view.atdmt.com.45280.9342.302br.net',
+'view.atdmt.com.45283.9342.302br.net',
+'view.atdmt.com.45286.9342.302br.net',
+'view.atdmt.com.45289.9342.302br.net',
+'view.atdmt.com.45292.9342.302br.net',
+'view.atdmt.com.45295.9342.302br.net',
+'view.atdmt.com.45298.9342.302br.net',
+'view.atdmt.com.45301.9342.302br.net',
+'view.atdmt.com.45304.9342.302br.net',
+'view.atdmt.com.45307.9342.302br.net',
+'view.atdmt.com.45309.9342.302br.net',
+'view.atdmt.com.45310.9342.302br.net',
+'view.atdmt.com.45311.9342.302br.net',
+'view.atdmt.com.45312.9342.302br.net',
+'view.atdmt.com.45313.9342.302br.net',
+'view.atdmt.com.45314.9342.302br.net',
+'view.atdmt.com.45316.9342.302br.net',
+'view.atdmt.com.45317.9342.302br.net',
+'view.atdmt.com.45318.9342.302br.net',
+'view.atdmt.com.45320.9342.302br.net',
+'view.atdmt.com.45321.9342.302br.net',
+'view.atdmt.com.45322.9342.302br.net',
+'view.atdmt.com.45323.9342.302br.net',
+'view.atdmt.com.45324.9342.302br.net',
+'view.atdmt.com.45325.9342.302br.net',
+'view.atdmt.com.45326.9342.302br.net',
+'view.atdmt.com.45328.9342.302br.net',
+'view.atdmt.com.45330.9342.302br.net',
+'view.atdmt.com.45332.9342.302br.net',
+'view.atdmt.com.45340.9342.302br.net',
+'view.atdmt.com.45342.9342.302br.net',
+'view.atdmt.com.45344.9342.302br.net',
+'view.atdmt.com.45352.9342.302br.net',
+'view.atdmt.com.45354.9342.302br.net',
+'view.atdmt.com.45356.9342.302br.net',
+'view.atdmt.com.45358.9342.302br.net',
+'view.atdmt.com.45359.9342.302br.net',
+'view.atdmt.com.45360.9342.302br.net',
+'view.atdmt.com.45361.9342.302br.net',
+'view.atdmt.com.45362.9342.302br.net',
+'view.atdmt.com.45364.9342.302br.net',
+'view.atdmt.com.45366.9342.302br.net',
+'view.atdmt.com.45368.9342.302br.net',
+'view.atdmt.com.45370.9342.302br.net',
+'view.atdmt.com.45372.9342.302br.net',
+'view.atdmt.com.45374.9342.302br.net',
+'view.atdmt.com.45376.9342.302br.net',
+'view.atdmt.com.45378.9342.302br.net',
+'view.atdmt.com.45380.9342.302br.net',
+'view.atdmt.com.45382.9342.302br.net',
+'view.atdmt.com.45384.9342.302br.net',
+'view.atdmt.com.45388.9342.302br.net',
+'view.atdmt.com.45390.9342.302br.net',
+'view.atdmt.com.45392.9342.302br.net',
+'view.atdmt.com.45393.9337.302br.net',
+'view.atdmt.com.45394.9337.302br.net',
+'view.atdmt.com.46297.9304.302br.net',
+'view.atdmt.com.46300.9304.302br.net',
+'view.atdmt.com.46303.9304.302br.net',
+'view.atdmt.com.46306.9304.302br.net',
+'view.atdmt.com.46309.9304.302br.net',
+'view.atdmt.com.46312.9304.302br.net',
+'view.atdmt.com.46315.9304.302br.net',
+'view.atdmt.com.46318.9304.302br.net',
+'view.atdmt.com.46321.9304.302br.net',
+'view.atdmt.com.46324.9304.302br.net',
+'view.atdmt.com.46327.9304.302br.net',
+'view.atdmt.com.46330.9304.302br.net',
+'view.atdmt.com.46333.9304.302br.net',
+'view.atdmt.com.46336.9304.302br.net',
+'view.atdmt.com.46339.9304.302br.net',
+'view.atdmt.com.46342.9304.302br.net',
+'view.atdmt.com.46345.9304.302br.net',
+'view.atdmt.com.46348.9304.302br.net',
+'view.atdmt.com.46351.9304.302br.net',
+'view.atdmt.com.46354.9304.302br.net',
+'view.atdmt.com.46357.9304.302br.net',
+'view.atdmt.com.46360.9304.302br.net',
+'view.atdmt.com.46363.9304.302br.net',
+'view.atdmt.com.46366.9304.302br.net',
+'view.atdmt.com.46369.9304.302br.net',
+'view.atdmt.com.46372.9304.302br.net',
+'view.atdmt.com.46375.9304.302br.net',
+'view.atdmt.com.46378.9304.302br.net',
+'view.atdmt.com.46381.9304.302br.net',
+'view.atdmt.com.46384.9304.302br.net',
+'view.atdmt.com.46387.9304.302br.net',
+'view.atdmt.com.46390.9304.302br.net',
+'view.atdmt.com.46393.9304.302br.net',
+'view.atdmt.com.46396.9304.302br.net',
+'view.atdmt.com.46399.9304.302br.net',
+'view.atdmt.com.46402.9304.302br.net',
+'view.atdmt.com.46405.9304.302br.net',
+'view.atdmt.com.46408.9304.302br.net',
+'view.atdmt.com.46411.9304.302br.net',
+'view.atdmt.com.46414.9304.302br.net',
+'view.atdmt.com.46417.9304.302br.net',
+'view.atdmt.com.46420.9304.302br.net',
+'view.atdmt.com.46423.9304.302br.net',
+'view.atdmt.com.46426.9304.302br.net',
+'view.atdmt.com.46429.9304.302br.net',
+'view.atdmt.com.46432.9304.302br.net',
+'view.atdmt.com.46435.9304.302br.net',
+'view.atdmt.com.46438.9304.302br.net',
+'view.atdmt.com.46440.9304.302br.net',
+'view.atdmt.com.46441.9304.302br.net',
+'view.atdmt.com.46443.9304.302br.net',
+'view.atdmt.com.46444.9304.302br.net',
+'view.atdmt.com.46447.9304.302br.net',
+'view.atdmt.com.46450.9304.302br.net',
+'view.atdmt.com.46452.9304.302br.net',
+'view.atdmt.com.46453.9304.302br.net',
+'view.atdmt.com.46455.9304.302br.net',
+'view.atdmt.com.46456.9304.302br.net',
+'view.atdmt.com.46459.9304.302br.net',
+'view.atdmt.com.46462.9304.302br.net',
+'view.atdmt.com.46468.9304.302br.net',
+'view.atdmt.com.46470.9304.302br.net',
+'view.atdmt.com.46471.9304.302br.net',
+'view.atdmt.com.46473.9304.302br.net',
+'view.atdmt.com.46474.9304.302br.net',
+'view.atdmt.com.46477.9304.302br.net',
+'view.atdmt.com.46480.9304.302br.net',
+'view.atdmt.com.46483.9304.302br.net',
+'view.atdmt.com.46485.9304.302br.net',
+'view.atdmt.com.46486.9304.302br.net',
+'view.atdmt.com.46488.9304.302br.net',
+'view.atdmt.com.46489.9304.302br.net',
+'view.atdmt.com.46492.9304.302br.net',
+'view.atdmt.com.46494.9304.302br.net',
+'view.atdmt.com.46495.9304.302br.net',
+'view.atdmt.com.46498.9304.302br.net',
+'view.atdmt.com.46501.9304.302br.net',
+'view.atdmt.com.46503.9304.302br.net',
+'view.atdmt.com.46504.9304.302br.net',
+'view.atdmt.com.46506.9304.302br.net',
+'view.atdmt.com.46507.9304.302br.net',
+'view.atdmt.com.46510.9304.302br.net',
+'view.atdmt.com.46512.9304.302br.net',
+'view.atdmt.com.46513.9304.302br.net',
+'view.atdmt.com.46515.9304.302br.net',
+'view.atdmt.com.46516.9304.302br.net',
+'view.atdmt.com.46519.9304.302br.net',
+'view.atdmt.com.46521.9304.302br.net',
+'view.atdmt.com.46522.9304.302br.net',
+'view.atdmt.com.46525.9304.302br.net',
+'view.atdmt.com.46528.9304.302br.net',
+'view.atdmt.com.46530.9304.302br.net',
+'view.atdmt.com.46531.9304.302br.net',
+'view.atdmt.com.46534.9304.302br.net',
+'view.atdmt.com.46537.9304.302br.net',
+'view.atdmt.com.46540.9304.302br.net',
+'view.atdmt.com.46543.9304.302br.net',
+'view.atdmt.com.46546.9304.302br.net',
+'view.atdmt.com.46549.9304.302br.net',
+'view.atdmt.com.46552.9304.302br.net',
+'view.atdmt.com.46555.9304.302br.net',
+'view.atdmt.com.46558.9304.302br.net',
+'view.atdmt.com.46561.9304.302br.net',
+'view.atdmt.com.46564.9304.302br.net',
+'view.atdmt.com.46567.9304.302br.net',
+'view.atdmt.com.46570.9304.302br.net',
+'view.atdmt.com.46573.9304.302br.net',
+'view.atdmt.com.46576.9304.302br.net',
+'view.atdmt.com.46579.9304.302br.net',
+'view.atdmt.com.46582.9304.302br.net',
+'view.atdmt.com.46588.9304.302br.net',
+'view.atdmt.com.46591.9304.302br.net',
+'view.atdmt.com.46594.9304.302br.net',
+'view.atdmt.com.46597.9304.302br.net',
+'view.atdmt.com.46600.9304.302br.net',
+'view.atdmt.com.46603.9304.302br.net',
+'view.atdmt.com.46606.9304.302br.net',
+'view.atdmt.com.46609.9304.302br.net',
+'view.atdmt.com.46611.9304.302br.net',
+'view.atdmt.com.46612.9304.302br.net',
+'view.atdmt.com.46614.9304.302br.net',
+'view.atdmt.com.46615.9304.302br.net',
+'view.atdmt.com.46617.9304.302br.net',
+'view.atdmt.com.46618.9304.302br.net',
+'view.atdmt.com.46620.9304.302br.net',
+'view.atdmt.com.46621.9304.302br.net',
+'view.atdmt.com.46623.9304.302br.net',
+'view.atdmt.com.46624.9304.302br.net',
+'view.atdmt.com.46626.9304.302br.net',
+'view.atdmt.com.46627.9304.302br.net',
+'view.atdmt.com.46629.9304.302br.net',
+'view.atdmt.com.46630.9304.302br.net',
+'view.atdmt.com.46632.9304.302br.net',
+'view.atdmt.com.46633.9304.302br.net',
+'view.atdmt.com.46635.9304.302br.net',
+'view.atdmt.com.46636.9304.302br.net',
+'view.atdmt.com.46638.9304.302br.net',
+'view.atdmt.com.46639.9304.302br.net',
+'view.atdmt.com.46641.9304.302br.net',
+'view.atdmt.com.46642.9304.302br.net',
+'view.atdmt.com.46644.9304.302br.net',
+'view.atdmt.com.46645.9304.302br.net',
+'view.atdmt.com.46647.9304.302br.net',
+'view.atdmt.com.46648.9304.302br.net',
+'view.atdmt.com.46650.9304.302br.net',
+'view.atdmt.com.46651.9304.302br.net',
+'view.atdmt.com.46653.9304.302br.net',
+'view.atdmt.com.46654.9304.302br.net',
+'view.atdmt.com.46656.9304.302br.net',
+'view.atdmt.com.46657.9304.302br.net',
+'view.atdmt.com.46659.9304.302br.net',
+'view.atdmt.com.46660.9304.302br.net',
+'view.atdmt.com.46662.9304.302br.net',
+'view.atdmt.com.46663.9304.302br.net',
+'view.atdmt.com.46665.9304.302br.net',
+'view.atdmt.com.46666.9304.302br.net',
+'view.atdmt.com.46668.9304.302br.net',
+'view.atdmt.com.46669.9304.302br.net',
+'view.atdmt.com.46671.9304.302br.net',
+'view.atdmt.com.46672.9304.302br.net',
+'view.atdmt.com.46675.9304.302br.net',
+'view.atdmt.com.46678.9304.302br.net',
+'view.atdmt.com.46680.9304.302br.net',
+'view.atdmt.com.46681.9304.302br.net',
+'view.atdmt.com.46683.9304.302br.net',
+'view.atdmt.com.46684.9304.302br.net',
+'view.atdmt.com.46687.9304.302br.net',
+'view.atdmt.com.46690.9304.302br.net',
+'view.atdmt.com.46693.9304.302br.net',
+'view.atdmt.com.46696.9304.302br.net',
+'view.atdmt.com.46699.9304.302br.net',
+'view.atdmt.com.46702.9304.302br.net',
+'view.atdmt.com.46705.9304.302br.net',
+'view.atdmt.com.46708.9304.302br.net',
+'view.atdmt.com.46711.9304.302br.net',
+'view.atdmt.com.46714.9304.302br.net',
+'view.atdmt.com.46716.9304.302br.net',
+'view.atdmt.com.46717.9304.302br.net',
+'view.atdmt.com.46720.9304.302br.net',
+'view.atdmt.com.46723.9304.302br.net',
+'view.atdmt.com.46726.9304.302br.net',
+'view.atdmt.com.46729.9304.302br.net',
+'view.atdmt.com.46732.9304.302br.net',
+'view.atdmt.com.46735.9304.302br.net',
+'view.atdmt.com.46738.9304.302br.net',
+'view.atdmt.com.46741.9304.302br.net',
+'view.atdmt.com.46744.9304.302br.net',
+'view.atdmt.com.46747.9304.302br.net',
+'view.atdmt.com.46750.9304.302br.net',
+'view.atdmt.com.46753.9304.302br.net',
+'view.atdmt.com.46756.9304.302br.net',
+'view.atdmt.com.46759.9304.302br.net',
+'view.atdmt.com.46762.9304.302br.net',
+'view.atdmt.com.46765.9304.302br.net',
+'view.atdmt.com.46768.9304.302br.net',
+'view.atdmt.com.46771.9304.302br.net',
+'view.atdmt.com.46774.9304.302br.net',
+'view.atdmt.com.46777.9304.302br.net',
+'view.atdmt.com.46780.9304.302br.net',
+'view.atdmt.com.46783.9304.302br.net',
+'view.atdmt.com.46786.9304.302br.net',
+'view.atdmt.com.46789.9304.302br.net',
+'view.atdmt.com.46792.9304.302br.net',
+'view.atdmt.com.46795.9304.302br.net',
+'view.atdmt.com.46798.9304.302br.net',
+'view.atdmt.com.46801.9304.302br.net',
+'view.atdmt.com.46804.9304.302br.net',
+'view.atdmt.com.46807.9304.302br.net',
+'view.atdmt.com.46810.9304.302br.net',
+'view.atdmt.com.46813.9304.302br.net',
+'view.atdmt.com.46816.9304.302br.net',
+'view.atdmt.com.46819.9304.302br.net',
+'view.atdmt.com.46822.9304.302br.net',
+'view.atdmt.com.46825.9304.302br.net',
+'view.atdmt.com.46828.9304.302br.net',
+'view.atdmt.com.46831.9304.302br.net',
+'view.atdmt.com.46834.9304.302br.net',
+'view.atdmt.com.46837.9304.302br.net',
+'view.atdmt.com.46840.9304.302br.net',
+'view.atdmt.com.46843.9304.302br.net',
+'view.atdmt.com.46846.9304.302br.net',
+'view.atdmt.com.46849.9304.302br.net',
+'view.atdmt.com.46852.9304.302br.net',
+'view.atdmt.com.46855.9304.302br.net',
+'view.atdmt.com.46858.9304.302br.net',
+'view.atdmt.com.46861.9304.302br.net',
+'view.atdmt.com.46864.9304.302br.net',
+'view.atdmt.com.46867.9304.302br.net',
+'view.atdmt.com.46870.9304.302br.net',
+'view.atdmt.com.46873.9304.302br.net',
+'view.atdmt.com.46876.9304.302br.net',
+'view.atdmt.com.46879.9304.302br.net',
+'view.atdmt.com.46882.9304.302br.net',
+'view.atdmt.com.46885.9304.302br.net',
+'view.atdmt.com.46888.9304.302br.net',
+'view.atdmt.com.46891.9304.302br.net',
+'view.atdmt.com.46894.9304.302br.net',
+'view.atdmt.com.46897.9304.302br.net',
+'view.atdmt.com.46900.9304.302br.net',
+'view.atdmt.com.46903.9304.302br.net',
+'view.atdmt.com.46906.9304.302br.net',
+'view.atdmt.com.46909.9304.302br.net',
+'view.atdmt.com.46912.9304.302br.net',
+'view.atdmt.com.46915.9304.302br.net',
+'view.atdmt.com.46918.9304.302br.net',
+'view.atdmt.com.46921.9304.302br.net',
+'view.atdmt.com.47642.9304.302br.net',
+'view.atdmt.com.47645.9304.302br.net',
+'view.atdmt.com.47648.9304.302br.net',
+'view.atdmt.com.47651.9304.302br.net',
+'view.atdmt.com.47654.9304.302br.net',
+'view.atdmt.com.47657.9304.302br.net',
+'view.atdmt.com.47660.9304.302br.net',
+'view.atdmt.com.47663.9304.302br.net',
+'view.atdmt.com.47666.9304.302br.net',
+'view.atdmt.com.47668.9304.302br.net',
+'view.atdmt.com.47669.9304.302br.net',
+'view.atdmt.com.47671.9304.302br.net',
+'view.atdmt.com.47672.9304.302br.net',
+'view.atdmt.com.47675.9304.302br.net',
+'view.atdmt.com.47678.9304.302br.net',
+'view.atdmt.com.47681.9304.302br.net',
+'view.atdmt.com.47684.9304.302br.net',
+'view.atdmt.com.47686.9304.302br.net',
+'view.atdmt.com.47687.9304.302br.net',
+'view.atdmt.com.47689.9304.302br.net',
+'view.atdmt.com.47690.9304.302br.net',
+'view.atdmt.com.47692.9304.302br.net',
+'view.atdmt.com.47693.9304.302br.net',
+'view.atdmt.com.47696.9304.302br.net',
+'view.atdmt.com.47699.9304.302br.net',
+'view.atdmt.com.47702.9304.302br.net',
+'view.atdmt.com.47704.9304.302br.net',
+'view.atdmt.com.47705.9304.302br.net',
+'view.atdmt.com.47708.9304.302br.net',
+'view.atdmt.com.47711.9304.302br.net',
+'view.atdmt.com.47714.9304.302br.net',
+'view.atdmt.com.47717.9304.302br.net',
+'view.atdmt.com.47720.9304.302br.net',
+'view.atdmt.com.47723.9304.302br.net',
+'view.atdmt.com.47726.9304.302br.net',
+'view.atdmt.com.47729.9304.302br.net',
+'view.atdmt.com.49584.9332.302br.net',
+'view.atdmt.com.49586.9332.302br.net',
+'view.atdmt.com.49587.9332.302br.net',
+'view.atdmt.com.49590.9332.302br.net',
+'view.atdmt.com.49592.9332.302br.net',
+'view.atdmt.com.49593.9332.302br.net',
+'view.atdmt.com.49596.9332.302br.net',
+'view.atdmt.com.49598.9332.302br.net',
+'view.atdmt.com.49599.9332.302br.net',
+'view.atdmt.com.51322.9342.302br.net',
+'view.atdmt.com.51324.9342.302br.net',
+'view.atdmt.com.51872.9377.302br.net',
+'view.atdmt.com.51874.9377.302br.net',
+'view.atdmt.com.51876.9377.302br.net',
+'view.atdmt.com.51878.9377.302br.net',
+'view.atdmt.com.51880.9377.302br.net',
+'view.atdmt.com.51882.9377.302br.net',
+'view.atdmt.com.51884.9377.302br.net',
+'view.atdmt.com.51886.9377.302br.net',
+'view.atdmt.com.51888.9377.302br.net',
+'view.atdmt.com.51890.9377.302br.net',
+'view.atdmt.com.51892.9377.302br.net',
+'view.atdmt.com.52832.9332.302br.net',
+'view.atdmt.com.52833.9332.302br.net',
+'view.atdmt.com.52835.9332.302br.net',
+'view.atdmt.com.52836.9332.302br.net',
+'view.atdmt.com.52839.9332.302br.net',
+'view.atdmt.com.52841.9332.302br.net',
+'view.atdmt.com.52842.9332.302br.net',
+'view.atdmt.com.52845.9332.302br.net',
+'view.atdmt.com.52847.9332.302br.net',
+'view.atdmt.com.52848.9332.302br.net',
+'view.atdmt.com.52905.9332.302br.net',
+'view.atdmt.com.52907.9332.302br.net',
+'view.atdmt.com.52908.9332.302br.net',
+'view.atdmt.com.52910.9332.302br.net',
+'view.atdmt.com.52911.9332.302br.net',
+'view.atdmt.com.52914.9332.302br.net',
+'view.atdmt.com.52917.9332.302br.net',
+'view.atdmt.com.52920.9332.302br.net',
+'view.atdmt.com.52923.9332.302br.net',
+'view.atdmt.com.52926.9332.302br.net',
+'view.atdmt.com.52929.9332.302br.net',
+'view.atdmt.com.52932.9332.302br.net',
+'view.atdmt.com.52934.9332.302br.net',
+'view.atdmt.com.52935.9332.302br.net',
+'view.atdmt.com.52937.9332.302br.net',
+'view.atdmt.com.52938.9332.302br.net',
+'view.atdmt.com.52940.9332.302br.net',
+'view.atdmt.com.52941.9332.302br.net',
+'view.atdmt.com.52947.9332.302br.net',
+'view.atdmt.com.52950.9332.302br.net',
+'view.atdmt.com.52952.9332.302br.net',
+'view.atdmt.com.52953.9332.302br.net',
+'view.atdmt.com.52956.9332.302br.net',
+'view.atdmt.com.52959.9332.302br.net',
+'view.atdmt.com.52962.9332.302br.net',
+'view.atdmt.com.52964.9332.302br.net',
+'view.atdmt.com.52965.9332.302br.net',
+'view.atdmt.com.52968.9332.302br.net',
+'view.atdmt.com.52970.9332.302br.net',
+'view.atdmt.com.52971.9332.302br.net',
+'view.atdmt.com.52974.9332.302br.net',
+'view.atdmt.com.52976.9332.302br.net',
+'view.atdmt.com.52977.9332.302br.net',
+'view.atdmt.com.52998.9332.302br.net',
+'view.atdmt.com.53000.9332.302br.net',
+'view.atdmt.com.53001.9332.302br.net',
+'view.atdmt.com.53003.9332.302br.net',
+'view.atdmt.com.53004.9332.302br.net',
+'view.atdmt.com.53007.9332.302br.net',
+'view.atdmt.com.53009.9332.302br.net',
+'view.atdmt.com.53010.9332.302br.net',
+'view.atdmt.com.53012.9332.302br.net',
+'view.atdmt.com.53013.9332.302br.net',
+'view.atdmt.com.53015.9332.302br.net',
+'view.atdmt.com.53016.9332.302br.net',
+'view.atdmt.com.53019.9332.302br.net',
+'view.atdmt.com.53021.9332.302br.net',
+'view.atdmt.com.53022.9332.302br.net',
+'view.atdmt.com.53025.9332.302br.net',
+'view.atdmt.com.53028.9332.302br.net',
+'view.atdmt.com.53030.9332.302br.net',
+'view.atdmt.com.53031.9332.302br.net',
+'view.atdmt.com.53034.9332.302br.net',
+'view.atdmt.com.53037.9332.302br.net',
+'view.atdmt.com.53040.9332.302br.net',
+'view.atdmt.com.53042.9332.302br.net',
+'view.atdmt.com.53043.9332.302br.net',
+'view.atdmt.com.53045.9332.302br.net',
+'view.atdmt.com.53046.9332.302br.net',
+'view.atdmt.com.53049.9332.302br.net',
+'view.atdmt.com.53051.9332.302br.net',
+'view.atdmt.com.53052.9332.302br.net',
+'view.atdmt.com.53055.9332.302br.net',
+'view.atdmt.com.53058.9332.302br.net',
+'view.atdmt.com.53060.9332.302br.net',
+'view.atdmt.com.53061.9332.302br.net',
+'view.atdmt.com.53063.9332.302br.net',
+'view.atdmt.com.53064.9332.302br.net',
+'view.atdmt.com.53066.9332.302br.net',
+'view.atdmt.com.53067.9332.302br.net',
+'view.atdmt.com.53069.9332.302br.net',
+'view.atdmt.com.53070.9332.302br.net',
+'view.atdmt.com.55641.9170.302br.net',
+'view.atdmt.com.55644.9170.302br.net',
+'view.atdmt.com.55647.9170.302br.net',
+'view.atdmt.com.55682.9391.302br.net',
+'view.atdmt.com.55684.9391.302br.net',
+'view.atdmt.com.55686.9391.302br.net',
+'view.atdmt.com.55688.9391.302br.net',
+'view.atdmt.com.55690.9391.302br.net',
+'view.atdmt.com.55692.9391.302br.net',
+'view.atdmt.com.55696.9391.302br.net',
+'view.atdmt.com.55706.9391.302br.net',
+'view.atdmt.com.55708.9391.302br.net',
+'view.atdmt.com.55710.9391.302br.net',
+'view.atdmt.com.55718.9391.302br.net',
+'view.atdmt.com.55720.9391.302br.net',
+'view.atdmt.com.55722.9391.302br.net',
+'view.atdmt.com.55724.9391.302br.net',
+'view.atdmt.com.55726.9391.302br.net',
+'view.atdmt.com.55728.9391.302br.net',
+'view.atdmt.com.55730.9391.302br.net',
+'view.atdmt.com.55732.9391.302br.net',
+'view.atdmt.com.55734.9391.302br.net',
+'view.atdmt.com.55736.9391.302br.net',
+'view.atdmt.com.55748.9391.302br.net',
+'view.atdmt.com.55750.9391.302br.net',
+'view.atdmt.com.55752.9391.302br.net',
+'view.atdmt.com.55754.9391.302br.net',
+'view.atdmt.com.55756.9391.302br.net',
+'view.atdmt.com.55758.9391.302br.net',
+'view.atdmt.com.55760.9391.302br.net',
+'view.atdmt.com.55772.9391.302br.net',
+'view.atdmt.com.55774.9391.302br.net',
+'view.atdmt.com.55777.9391.302br.net',
+'view.atdmt.com.55778.9391.302br.net',
+'view.atdmt.com.55779.9391.302br.net',
+'view.atdmt.com.55780.9391.302br.net',
+'view.atdmt.com.55781.9391.302br.net',
+'view.atdmt.com.55782.9391.302br.net',
+'view.atdmt.com.55783.9391.302br.net',
+'view.atdmt.com.55784.9391.302br.net',
+'view.atdmt.com.55785.9391.302br.net',
+'view.atdmt.com.55786.9391.302br.net',
+'view.atdmt.com.55787.9391.302br.net',
+'view.atdmt.com.55788.9391.302br.net',
+'view.atdmt.com.55789.9391.302br.net',
+'view.atdmt.com.55790.9391.302br.net',
+'view.atdmt.com.55791.9391.302br.net',
+'view.atdmt.com.55792.9391.302br.net',
+'view.atdmt.com.55793.9391.302br.net',
+'view.atdmt.com.55794.9391.302br.net',
+'view.atdmt.com.55917.9391.302br.net',
+'view.atdmt.com.55919.9391.302br.net',
+'view.atdmt.com.55921.9391.302br.net',
+'view.atdmt.com.55923.9391.302br.net',
+'view.atdmt.com.55925.9391.302br.net',
+'view.atdmt.com.55927.9391.302br.net',
+'view.atdmt.com.55929.9391.302br.net',
+'view.atdmt.com.55931.9391.302br.net',
+'view.atdmt.com.55933.9391.302br.net',
+'view.atdmt.com.55935.9391.302br.net',
+'view.atdmt.com.55937.9391.302br.net',
+'view.atdmt.com.55939.9391.302br.net',
+'view.atdmt.com.55941.9391.302br.net',
+'view.atdmt.com.55945.9391.302br.net',
+'view.atdmt.com.55947.9391.302br.net',
+'view.atdmt.com.55949.9391.302br.net',
+'view.atdmt.com.55951.9391.302br.net',
+'view.atdmt.com.55953.9391.302br.net',
+'view.atdmt.com.55955.9391.302br.net',
+'view.atdmt.com.55957.9391.302br.net',
+'view.atdmt.com.55959.9391.302br.net',
+'view.atdmt.com.55961.9391.302br.net',
+'view.atdmt.com.55963.9391.302br.net',
+'view.atdmt.com.55965.9391.302br.net',
+'view.atdmt.com.55967.9391.302br.net',
+'view.atdmt.com.55969.9391.302br.net',
+'view.atdmt.com.55971.9391.302br.net',
+'view.atdmt.com.55973.9391.302br.net',
+'view.atdmt.com.55975.9391.302br.net',
+'view.atdmt.com.55977.9391.302br.net',
+'view.atdmt.com.55979.9391.302br.net',
+'view.atdmt.com.55981.9391.302br.net',
+'view.atdmt.com.55983.9391.302br.net',
+'view.atdmt.com.55985.9391.302br.net',
+'view.atdmt.com.55987.9391.302br.net',
+'view.atdmt.com.55988.9391.302br.net',
+'view.atdmt.com.55989.9391.302br.net',
+'view.atdmt.com.55990.9391.302br.net',
+'view.atdmt.com.55991.9391.302br.net',
+'view.atdmt.com.55992.9391.302br.net',
+'view.atdmt.com.55993.9391.302br.net',
+'view.atdmt.com.56400.9395.302br.net',
+'view.atdmt.com.56402.9395.302br.net',
+'view.atdmt.com.56403.9395.302br.net',
+'view.atdmt.com.56406.9395.302br.net',
+'view.atdmt.com.56412.9395.302br.net',
+'view.atdmt.com.57073.9395.302br.net',
+'view.atdmt.com.57074.9395.302br.net',
+'view.atdmt.com.57094.9395.302br.net',
+'view.atdmt.com.57095.9395.302br.net',
+'view.atdmt.com.57097.9395.302br.net',
+'view.atdmt.com.57098.9395.302br.net',
+'view.atdmt.com.57100.9395.302br.net',
+'view.atdmt.com.57101.9395.302br.net',
+'view.atdmt.com.57104.9395.302br.net',
+'view.atdmt.com.6000.302br.net',
+'view.atdmt.com.60370.9201.302br.net',
+'view.atdmt.com.60371.9201.302br.net',
+'view.atdmt.com.60413.9342.302br.net',
+'view.atdmt.com.60416.9342.302br.net',
+'view.atdmt.com.60419.9342.302br.net',
+'view.atdmt.com.60480.9433.302br.net',
+'view.atdmt.com.60481.9433.302br.net',
+'view.atdmt.com.60643.9391.302br.net',
+'view.atdmt.com.63029.9391.302br.net',
+'view.atdmt.com.63031.9391.302br.net',
+'view.atdmt.com.63033.9391.302br.net',
+'view.atdmt.com.63035.9391.302br.net',
+'view.atdmt.com.63037.9391.302br.net',
+'view.atdmt.com.63039.9391.302br.net',
+'view.atdmt.com.63041.9391.302br.net',
+'view.atdmt.com.63043.9391.302br.net',
+'view.atdmt.com.63045.9391.302br.net',
+'view.atdmt.com.63429.9488.302br.net',
+'view.atdmt.com.63430.9488.302br.net',
+'view.atdmt.com.63508.9489.302br.net',
+'view.atdmt.com.63511.9489.302br.net',
+'view.atdmt.com.63532.9489.302br.net',
+'view.atdmt.com.63534.9489.302br.net',
+'view.atdmt.com.63535.9489.302br.net',
+'view.atdmt.com.63537.9489.302br.net',
+'view.atdmt.com.63538.9489.302br.net',
+'view.atdmt.com.63540.9489.302br.net',
+'view.atdmt.com.63541.9489.302br.net',
+'view.atdmt.com.63544.9489.302br.net',
+'view.atdmt.com.63547.9489.302br.net',
+'view.atdmt.com.63549.9489.302br.net',
+'view.atdmt.com.63550.9489.302br.net',
+'view.atdmt.com.63552.9489.302br.net',
+'view.atdmt.com.63553.9489.302br.net',
+'view.atdmt.com.63555.9489.302br.net',
+'view.atdmt.com.63556.9489.302br.net',
+'view.atdmt.com.63558.9489.302br.net',
+'view.atdmt.com.63559.9489.302br.net',
+'view.atdmt.com.63561.9489.302br.net',
+'view.atdmt.com.63562.9489.302br.net',
+'view.atdmt.com.63564.9489.302br.net',
+'view.atdmt.com.63565.9489.302br.net',
+'view.atdmt.com.63567.9489.302br.net',
+'view.atdmt.com.63568.9489.302br.net',
+'view.atdmt.com.63570.9489.302br.net',
+'view.atdmt.com.63571.9489.302br.net',
+'view.atdmt.com.63573.9489.302br.net',
+'view.atdmt.com.63574.9489.302br.net',
+'view.atdmt.com.63576.9489.302br.net',
+'view.atdmt.com.63577.9489.302br.net',
+'view.atdmt.com.63579.9489.302br.net',
+'view.atdmt.com.63580.9489.302br.net',
+'view.atdmt.com.63582.9489.302br.net',
+'view.atdmt.com.63583.9489.302br.net',
+'view.atdmt.com.63585.9489.302br.net',
+'view.atdmt.com.63586.9489.302br.net',
+'view.atdmt.com.63588.9489.302br.net',
+'view.atdmt.com.63589.9489.302br.net',
+'view.atdmt.com.63591.9489.302br.net',
+'view.atdmt.com.63592.9489.302br.net',
+'view.atdmt.com.63594.9489.302br.net',
+'view.atdmt.com.63595.9489.302br.net',
+'view.atdmt.com.63598.9489.302br.net',
+'view.atdmt.com.63601.9489.302br.net',
+'view.atdmt.com.63628.9489.302br.net',
+'view.atdmt.com.63630.9489.302br.net',
+'view.atdmt.com.63631.9489.302br.net',
+'view.atdmt.com.63633.9489.302br.net',
+'view.atdmt.com.63634.9489.302br.net',
+'view.atdmt.com.63636.9489.302br.net',
+'view.atdmt.com.63637.9489.302br.net',
+'view.atdmt.com.63676.9489.302br.net',
+'view.atdmt.com.63678.9489.302br.net',
+'view.atdmt.com.63679.9489.302br.net',
+'view.atdmt.com.63681.9489.302br.net',
+'view.atdmt.com.63682.9489.302br.net',
+'view.atdmt.com.63693.9489.302br.net',
+'view.atdmt.com.63694.9489.302br.net',
+'view.atdmt.com.63695.9489.302br.net',
+'view.atdmt.com.63696.9489.302br.net',
+'view.atdmt.com.63697.9489.302br.net',
+'view.atdmt.com.63698.9489.302br.net',
+'view.atdmt.com.63699.9489.302br.net',
+'view.atdmt.com.63700.9489.302br.net',
+'view.atdmt.com.63702.9491.302br.net',
+'view.atdmt.com.63705.9491.302br.net',
+'view.atdmt.com.63708.9491.302br.net',
+'view.atdmt.com.63711.9491.302br.net',
+'view.atdmt.com.63714.9491.302br.net',
+'view.atdmt.com.63716.9491.302br.net',
+'view.atdmt.com.63717.9491.302br.net',
+'view.atdmt.com.63719.9491.302br.net',
+'view.atdmt.com.63720.9491.302br.net',
+'view.atdmt.com.63722.9491.302br.net',
+'view.atdmt.com.63723.9491.302br.net',
+'view.atdmt.com.63725.9491.302br.net',
+'view.atdmt.com.63726.9491.302br.net',
+'view.atdmt.com.63728.9491.302br.net',
+'view.atdmt.com.63729.9491.302br.net',
+'view.atdmt.com.63731.9491.302br.net',
+'view.atdmt.com.63732.9491.302br.net',
+'view.atdmt.com.63734.9491.302br.net',
+'view.atdmt.com.63735.9491.302br.net',
+'view.atdmt.com.63737.9491.302br.net',
+'view.atdmt.com.63738.9491.302br.net',
+'view.atdmt.com.63740.9491.302br.net',
+'view.atdmt.com.63741.9491.302br.net',
+'view.atdmt.com.63743.9491.302br.net',
+'view.atdmt.com.63744.9491.302br.net',
+'view.atdmt.com.63746.9491.302br.net',
+'view.atdmt.com.63747.9491.302br.net',
+'view.atdmt.com.63749.9491.302br.net',
+'view.atdmt.com.63750.9491.302br.net',
+'view.atdmt.com.63752.9491.302br.net',
+'view.atdmt.com.63753.9491.302br.net',
+'view.atdmt.com.63755.9491.302br.net',
+'view.atdmt.com.63756.9491.302br.net',
+'view.atdmt.com.63759.9491.302br.net',
+'view.atdmt.com.63761.9491.302br.net',
+'view.atdmt.com.63762.9491.302br.net',
+'view.atdmt.com.66717.9517.302br.net',
+'view.atdmt.com.66720.9517.302br.net',
+'view.atdmt.com.66723.9517.302br.net',
+'view.atdmt.com.66725.9517.302br.net',
+'view.atdmt.com.66726.9517.302br.net',
+'view.atdmt.com.66728.9517.302br.net',
+'view.atdmt.com.66729.9517.302br.net',
+'view.atdmt.com.66731.9517.302br.net',
+'view.atdmt.com.66732.9517.302br.net',
+'view.atdmt.com.66734.9517.302br.net',
+'view.atdmt.com.66735.9517.302br.net',
+'view.atdmt.com.66737.9517.302br.net',
+'view.atdmt.com.66738.9517.302br.net',
+'view.atdmt.com.66740.9517.302br.net',
+'view.atdmt.com.66741.9517.302br.net',
+'view.atdmt.com.66743.9517.302br.net',
+'view.atdmt.com.66744.9517.302br.net',
+'view.atdmt.com.66747.9517.302br.net',
+'view.atdmt.com.66749.9517.302br.net',
+'view.atdmt.com.66750.9517.302br.net',
+'view.atdmt.com.66753.9517.302br.net',
+'view.atdmt.com.66756.9517.302br.net',
+'view.atdmt.com.66759.9517.302br.net',
+'view.atdmt.com.66762.9517.302br.net',
+'view.atdmt.com.66765.9517.302br.net',
+'view.atdmt.com.66768.9517.302br.net',
+'view.atdmt.com.66771.9517.302br.net',
+'view.atdmt.com.66774.9517.302br.net',
+'view.atdmt.com.66777.9517.302br.net',
+'view.atdmt.com.66780.9517.302br.net',
+'view.atdmt.com.66783.9517.302br.net',
+'view.atdmt.com.66786.9517.302br.net',
+'view.atdmt.com.66789.9517.302br.net',
+'view.atdmt.com.66792.9517.302br.net',
+'view.atdmt.com.66794.9517.302br.net',
+'view.atdmt.com.66795.9517.302br.net',
+'view.atdmt.com.66797.9517.302br.net',
+'view.atdmt.com.66798.9517.302br.net',
+'view.atdmt.com.66800.9517.302br.net',
+'view.atdmt.com.66801.9517.302br.net',
+'view.atdmt.com.66803.9517.302br.net',
+'view.atdmt.com.66804.9517.302br.net',
+'view.atdmt.com.66806.9517.302br.net',
+'view.atdmt.com.66807.9517.302br.net',
+'view.atdmt.com.66809.9517.302br.net',
+'view.atdmt.com.66810.9517.302br.net',
+'view.atdmt.com.66812.9517.302br.net',
+'view.atdmt.com.66813.9517.302br.net',
+'view.atdmt.com.66815.9517.302br.net',
+'view.atdmt.com.66816.9517.302br.net',
+'view.atdmt.com.66818.9517.302br.net',
+'view.atdmt.com.66819.9517.302br.net',
+'view.atdmt.com.66821.9517.302br.net',
+'view.atdmt.com.66822.9517.302br.net',
+'view.atdmt.com.66825.9517.302br.net',
+'view.atdmt.com.66827.9517.302br.net',
+'view.atdmt.com.66828.9517.302br.net',
+'view.atdmt.com.66830.9517.302br.net',
+'view.atdmt.com.66831.9517.302br.net',
+'view.atdmt.com.66833.9517.302br.net',
+'view.atdmt.com.66834.9517.302br.net',
+'view.atdmt.com.66836.9517.302br.net',
+'view.atdmt.com.66837.9517.302br.net',
+'view.atdmt.com.66839.9517.302br.net',
+'view.atdmt.com.66840.9517.302br.net',
+'view.atdmt.com.66842.9517.302br.net',
+'view.atdmt.com.66843.9517.302br.net',
+'view.atdmt.com.66845.9517.302br.net',
+'view.atdmt.com.66846.9517.302br.net',
+'view.atdmt.com.66848.9517.302br.net',
+'view.atdmt.com.66849.9517.302br.net',
+'view.atdmt.com.66851.9517.302br.net',
+'view.atdmt.com.66852.9517.302br.net',
+'view.atdmt.com.66854.9517.302br.net',
+'view.atdmt.com.66855.9517.302br.net',
+'view.atdmt.com.66857.9517.302br.net',
+'view.atdmt.com.66858.9517.302br.net',
+'view.atdmt.com.66879.9517.302br.net',
+'view.atdmt.com.66882.9517.302br.net',
+'view.atdmt.com.66885.9517.302br.net',
+'view.atdmt.com.66888.9517.302br.net',
+'view.atdmt.com.66891.9517.302br.net',
+'view.atdmt.com.66894.9517.302br.net',
+'view.atdmt.com.66897.9517.302br.net',
+'view.atdmt.com.66900.9517.302br.net',
+'view.atdmt.com.66903.9517.302br.net',
+'view.atdmt.com.66905.9517.302br.net',
+'view.atdmt.com.66906.9517.302br.net',
+'view.atdmt.com.66908.9517.302br.net',
+'view.atdmt.com.66909.9517.302br.net',
+'view.atdmt.com.66911.9519.302br.net',
+'view.atdmt.com.66912.9519.302br.net',
+'view.atdmt.com.66913.9519.302br.net',
+'view.atdmt.com.66914.9519.302br.net',
+'view.atdmt.com.66915.9519.302br.net',
+'view.atdmt.com.66916.9519.302br.net',
+'view.atdmt.com.66917.9519.302br.net',
+'view.atdmt.com.66918.9519.302br.net',
+'view.atdmt.com.66919.9519.302br.net',
+'view.atdmt.com.66920.9519.302br.net',
+'view.atdmt.com.66921.9519.302br.net',
+'view.atdmt.com.66922.9519.302br.net',
+'view.atdmt.com.66989.9519.302br.net',
+'view.atdmt.com.66990.9519.302br.net',
+'view.atdmt.com.66991.9519.302br.net',
+'view.atdmt.com.66992.9519.302br.net',
+'view.atdmt.com.66993.9519.302br.net',
+'view.atdmt.com.66994.9519.302br.net',
+'view.atdmt.com.67614.9491.302br.net',
+'view.atdmt.com.67617.9491.302br.net',
+'view.atdmt.com.67620.9491.302br.net',
+'view.atdmt.com.67623.9491.302br.net',
+'view.atdmt.com.67626.9491.302br.net',
+'view.atdmt.com.67629.9491.302br.net',
+'view.atdmt.com.67632.9491.302br.net',
+'view.atdmt.com.67635.9491.302br.net',
+'view.atdmt.com.67638.9491.302br.net',
+'view.atdmt.com.67641.9519.302br.net',
+'view.atdmt.com.67644.9519.302br.net',
+'view.atdmt.com.67647.9519.302br.net',
+'view.atdmt.com.67650.9519.302br.net',
+'view.atdmt.com.67653.9519.302br.net',
+'view.atdmt.com.67656.9519.302br.net',
+'view.atdmt.com.67659.9519.302br.net',
+'view.atdmt.com.67662.9519.302br.net',
+'view.atdmt.com.67665.9519.302br.net',
+'view.atdmt.com.67668.9519.302br.net',
+'view.atdmt.com.67671.9519.302br.net',
+'view.atdmt.com.67674.9519.302br.net',
+'view.atdmt.com.67676.9524.302br.net',
+'view.atdmt.com.67677.9524.302br.net',
+'view.atdmt.com.67679.9524.302br.net',
+'view.atdmt.com.67680.9524.302br.net',
+'view.atdmt.com.67682.9524.302br.net',
+'view.atdmt.com.67683.9524.302br.net',
+'view.atdmt.com.67686.9519.302br.net',
+'view.atdmt.com.67689.9519.302br.net',
+'view.atdmt.com.67692.9519.302br.net',
+'view.atdmt.com.67695.9519.302br.net',
+'view.atdmt.com.67698.9519.302br.net',
+'view.atdmt.com.67701.9519.302br.net',
+'view.atdmt.com.67704.9519.302br.net',
+'view.atdmt.com.67707.9519.302br.net',
+'view.atdmt.com.67710.9519.302br.net',
+'view.atdmt.com.67713.9519.302br.net',
+'view.atdmt.com.67716.9519.302br.net',
+'view.atdmt.com.67719.9519.302br.net',
+'view.atdmt.com.67722.9519.302br.net',
+'view.atdmt.com.67725.9519.302br.net',
+'view.atdmt.com.67728.9519.302br.net',
+'view.atdmt.com.67731.9519.302br.net',
+'view.atdmt.com.67734.9519.302br.net',
+'view.atdmt.com.67737.9519.302br.net',
+'view.atdmt.com.67740.9519.302br.net',
+'view.atdmt.com.67743.9519.302br.net',
+'view.atdmt.com.67746.9519.302br.net',
+'view.atdmt.com.67749.9519.302br.net',
+'view.atdmt.com.67752.9519.302br.net',
+'view.atdmt.com.67755.9519.302br.net',
+'view.atdmt.com.67758.9519.302br.net',
+'view.atdmt.com.67761.9519.302br.net',
+'view.atdmt.com.67764.9519.302br.net',
+'view.atdmt.com.67767.9519.302br.net',
+'view.atdmt.com.67770.9519.302br.net',
+'view.atdmt.com.67773.9519.302br.net',
+'view.atdmt.com.67775.9306.302br.net',
+'view.atdmt.com.67776.9306.302br.net',
+'view.atdmt.com.67777.9306.302br.net',
+'view.atdmt.com.67778.9306.302br.net',
+'view.atdmt.com.67779.9306.302br.net',
+'view.atdmt.com.67780.9306.302br.net',
+'view.atdmt.com.67781.9306.302br.net',
+'view.atdmt.com.67782.9306.302br.net',
+'view.atdmt.com.67783.9306.302br.net',
+'view.atdmt.com.67784.9306.302br.net',
+'view.atdmt.com.67785.9306.302br.net',
+'view.atdmt.com.67786.9306.302br.net',
+'view.atdmt.com.67787.9306.302br.net',
+'view.atdmt.com.67788.9306.302br.net',
+'view.atdmt.com.67789.9306.302br.net',
+'view.atdmt.com.67790.9306.302br.net',
+'view.atdmt.com.67791.9306.302br.net',
+'view.atdmt.com.67792.9306.302br.net',
+'view.atdmt.com.67794.9306.302br.net',
+'view.atdmt.com.67796.9306.302br.net',
+'view.atdmt.com.67798.9306.302br.net',
+'view.atdmt.com.67800.9306.302br.net',
+'view.atdmt.com.67802.9306.302br.net',
+'view.atdmt.com.67804.9306.302br.net',
+'view.atdmt.com.67806.9306.302br.net',
+'view.atdmt.com.67808.9306.302br.net',
+'view.atdmt.com.67810.9306.302br.net',
+'view.atdmt.com.67812.9306.302br.net',
+'view.atdmt.com.67814.9306.302br.net',
+'view.atdmt.com.67816.9306.302br.net',
+'view.atdmt.com.67818.9306.302br.net',
+'view.atdmt.com.67820.9306.302br.net',
+'view.atdmt.com.67822.9306.302br.net',
+'view.atdmt.com.67824.9306.302br.net',
+'view.atdmt.com.67826.9306.302br.net',
+'view.atdmt.com.67828.9306.302br.net',
+'view.atdmt.com.67830.9306.302br.net',
+'view.atdmt.com.67832.9306.302br.net',
+'view.atdmt.com.67834.9306.302br.net',
+'view.atdmt.com.67835.9306.302br.net',
+'view.atdmt.com.67836.9306.302br.net',
+'view.atdmt.com.67837.9306.302br.net',
+'view.atdmt.com.67838.9306.302br.net',
+'view.atdmt.com.67839.9306.302br.net',
+'view.atdmt.com.67840.9306.302br.net',
+'view.atdmt.com.67841.9306.302br.net',
+'view.atdmt.com.67842.9306.302br.net',
+'view.atdmt.com.67843.9306.302br.net',
+'view.atdmt.com.67844.9306.302br.net',
+'view.atdmt.com.67845.9306.302br.net',
+'view.atdmt.com.67846.9306.302br.net',
+'view.atdmt.com.67847.9306.302br.net',
+'view.atdmt.com.67848.9306.302br.net',
+'view.atdmt.com.67849.9306.302br.net',
+'view.atdmt.com.67850.9306.302br.net',
+'view.atdmt.com.67851.9306.302br.net',
+'view.atdmt.com.67852.9306.302br.net',
+'view.atdmt.com.67853.9306.302br.net',
+'view.atdmt.com.67854.9306.302br.net',
+'view.atdmt.com.67856.9526.302br.net',
+'view.atdmt.com.67859.9526.302br.net',
+'view.atdmt.com.67862.9526.302br.net',
+'view.atdmt.com.67865.9526.302br.net',
+'view.atdmt.com.67868.9526.302br.net',
+'view.atdmt.com.67870.9526.302br.net',
+'view.atdmt.com.67871.9526.302br.net',
+'view.atdmt.com.67873.9526.302br.net',
+'view.atdmt.com.67874.9526.302br.net',
+'view.atdmt.com.67876.9526.302br.net',
+'view.atdmt.com.67877.9526.302br.net',
+'view.atdmt.com.67889.9526.302br.net',
+'view.atdmt.com.67892.9526.302br.net',
+'view.atdmt.com.67894.9526.302br.net',
+'view.atdmt.com.67895.9526.302br.net',
+'view.atdmt.com.67897.9526.302br.net',
+'view.atdmt.com.67898.9526.302br.net',
+'view.atdmt.com.67900.9526.302br.net',
+'view.atdmt.com.67901.9526.302br.net',
+'view.atdmt.com.67903.9526.302br.net',
+'view.atdmt.com.67904.9526.302br.net',
+'view.atdmt.com.67906.9526.302br.net',
+'view.atdmt.com.67907.9526.302br.net',
+'view.atdmt.com.67909.9526.302br.net',
+'view.atdmt.com.67910.9526.302br.net',
+'view.atdmt.com.67912.9526.302br.net',
+'view.atdmt.com.67913.9526.302br.net',
+'view.atdmt.com.67927.9528.302br.net',
+'view.atdmt.com.67928.9528.302br.net',
+'view.atdmt.com.67930.9528.302br.net',
+'view.atdmt.com.67931.9528.302br.net',
+'view.atdmt.com.67933.9528.302br.net',
+'view.atdmt.com.67934.9528.302br.net',
+'view.atdmt.com.67936.9528.302br.net',
+'view.atdmt.com.67937.9528.302br.net',
+'view.atdmt.com.67939.9528.302br.net',
+'view.atdmt.com.67940.9528.302br.net',
+'view.atdmt.com.67942.9528.302br.net',
+'view.atdmt.com.67943.9528.302br.net',
+'view.atdmt.com.67946.9528.302br.net',
+'view.atdmt.com.67949.9528.302br.net',
+'view.atdmt.com.67952.9528.302br.net',
+'view.atdmt.com.67964.9528.302br.net',
+'view.atdmt.com.67967.9528.302br.net',
+'view.atdmt.com.67970.9528.302br.net',
+'view.atdmt.com.67982.9528.302br.net',
+'view.atdmt.com.67985.9528.302br.net',
+'view.atdmt.com.67988.9528.302br.net',
+'view.atdmt.com.67991.9528.302br.net',
+'view.atdmt.com.67994.9528.302br.net',
+'view.atdmt.com.67996.9528.302br.net',
+'view.atdmt.com.67997.9528.302br.net',
+'view.atdmt.com.67999.9528.302br.net',
+'view.atdmt.com.68000.9528.302br.net',
+'view.atdmt.com.68003.9528.302br.net',
+'view.atdmt.com.68006.9528.302br.net',
+'view.atdmt.com.68009.9528.302br.net',
+'view.atdmt.com.68012.9528.302br.net',
+'view.atdmt.com.68014.9528.302br.net',
+'view.atdmt.com.68015.9528.302br.net',
+'view.atdmt.com.68017.9528.302br.net',
+'view.atdmt.com.68018.9528.302br.net',
+'view.atdmt.com.68020.9528.302br.net',
+'view.atdmt.com.68021.9528.302br.net',
+'view.atdmt.com.68023.9528.302br.net',
+'view.atdmt.com.68024.9528.302br.net',
+'view.atdmt.com.68026.9528.302br.net',
+'view.atdmt.com.68027.9528.302br.net',
+'view.atdmt.com.68029.9528.302br.net',
+'view.atdmt.com.68030.9528.302br.net',
+'view.atdmt.com.68032.9528.302br.net',
+'view.atdmt.com.68033.9528.302br.net',
+'view.atdmt.com.68035.9528.302br.net',
+'view.atdmt.com.68036.9528.302br.net',
+'view.atdmt.com.68190.9541.302br.net',
+'view.atdmt.com.68191.9541.302br.net',
+'view.atdmt.com.68193.9541.302br.net',
+'view.atdmt.com.68194.9541.302br.net',
+'view.atdmt.com.68196.9541.302br.net',
+'view.atdmt.com.68197.9541.302br.net',
+'view.atdmt.com.68218.9541.302br.net',
+'view.atdmt.com.68221.9541.302br.net',
+'view.atdmt.com.68224.9541.302br.net',
+'view.atdmt.com.68226.9541.302br.net',
+'view.atdmt.com.68227.9541.302br.net',
+'view.atdmt.com.68229.9541.302br.net',
+'view.atdmt.com.68230.9541.302br.net',
+'view.atdmt.com.68232.9541.302br.net',
+'view.atdmt.com.68233.9541.302br.net',
+'view.atdmt.com.68236.9541.302br.net',
+'view.atdmt.com.68239.9541.302br.net',
+'view.atdmt.com.68242.9541.302br.net',
+'view.atdmt.com.68245.9541.302br.net',
+'view.atdmt.com.68247.9541.302br.net',
+'view.atdmt.com.68248.9541.302br.net',
+'view.atdmt.com.68250.9541.302br.net',
+'view.atdmt.com.68251.9541.302br.net',
+'view.atdmt.com.68254.9541.302br.net',
+'view.atdmt.com.68257.9541.302br.net',
+'view.atdmt.com.68260.9541.302br.net',
+'view.atdmt.com.68262.9541.302br.net',
+'view.atdmt.com.68263.9541.302br.net',
+'view.atdmt.com.68265.9541.302br.net',
+'view.atdmt.com.68266.9541.302br.net',
+'view.atdmt.com.68268.9541.302br.net',
+'view.atdmt.com.68269.9541.302br.net',
+'view.atdmt.com.68271.9541.302br.net',
+'view.atdmt.com.68272.9541.302br.net',
+'view.atdmt.com.68274.9541.302br.net',
+'view.atdmt.com.68275.9541.302br.net',
+'view.atdmt.com.68277.9541.302br.net',
+'view.atdmt.com.68278.9541.302br.net',
+'view.atdmt.com.68281.9541.302br.net',
+'view.atdmt.com.68284.9541.302br.net',
+'view.atdmt.com.68287.9541.302br.net',
+'view.atdmt.com.68416.9546.302br.net',
+'view.atdmt.com.68417.9546.302br.net',
+'view.atdmt.com.68419.9546.302br.net',
+'view.atdmt.com.68420.9546.302br.net',
+'view.atdmt.com.68422.9546.302br.net',
+'view.atdmt.com.68423.9546.302br.net',
+'view.atdmt.com.68438.9546.302br.net',
+'view.atdmt.com.68441.9546.302br.net',
+'view.atdmt.com.68444.9546.302br.net',
+'view.atdmt.com.68447.9546.302br.net',
+'view.atdmt.com.68450.9546.302br.net',
+'view.atdmt.com.68452.9546.302br.net',
+'view.atdmt.com.68453.9546.302br.net',
+'view.atdmt.com.68456.9546.302br.net',
+'view.atdmt.com.68459.9546.302br.net',
+'view.atdmt.com.68462.9546.302br.net',
+'view.atdmt.com.68464.9546.302br.net',
+'view.atdmt.com.68465.9546.302br.net',
+'view.atdmt.com.68468.9546.302br.net',
+'view.atdmt.com.68471.9546.302br.net',
+'view.atdmt.com.68557.9549.302br.net',
+'view.atdmt.com.68566.9549.302br.net',
+'view.atdmt.com.68569.9549.302br.net',
+'view.atdmt.com.68572.9549.302br.net',
+'view.atdmt.com.68575.9549.302br.net',
+'view.atdmt.com.68578.9549.302br.net',
+'view.atdmt.com.68581.9549.302br.net',
+'view.atdmt.com.69411.9557.302br.net',
+'view.atdmt.com.69412.9557.302br.net',
+'view.atdmt.com.69413.9557.302br.net',
+'view.atdmt.com.69414.9557.302br.net',
+'view.atdmt.com.69415.9557.302br.net',
+'view.atdmt.com.69416.9557.302br.net',
+'view.atdmt.com.69417.9557.302br.net',
+'view.atdmt.com.69418.9557.302br.net',
+'view.atdmt.com.69419.9557.302br.net',
+'view.atdmt.com.69420.9557.302br.net',
+'view.atdmt.com.69421.9557.302br.net',
+'view.atdmt.com.69422.9557.302br.net',
+'view.atdmt.com.701.9000.302br.net',
+'view.atdmt.com.704.9000.302br.net',
+'view.atdmt.com.70475.9596.302br.net',
+'view.atdmt.com.70477.9596.302br.net',
+'view.atdmt.com.70479.9596.302br.net',
+'view.atdmt.com.70481.9596.302br.net',
+'view.atdmt.com.70483.9596.302br.net',
+'view.atdmt.com.70485.9596.302br.net',
+'view.atdmt.com.70487.9596.302br.net',
+'view.atdmt.com.70489.9596.302br.net',
+'view.atdmt.com.70491.9596.302br.net',
+'view.atdmt.com.70493.9596.302br.net',
+'view.atdmt.com.70518.9546.302br.net',
+'view.atdmt.com.70519.9546.302br.net',
+'view.atdmt.com.70520.9546.302br.net',
+'view.atdmt.com.70521.9546.302br.net',
+'view.atdmt.com.70522.9546.302br.net',
+'view.atdmt.com.70523.9546.302br.net',
+'view.atdmt.com.70524.9546.302br.net',
+'view.atdmt.com.70525.9546.302br.net',
+'view.atdmt.com.70526.9546.302br.net',
+'view.atdmt.com.70527.9546.302br.net',
+'view.atdmt.com.70530.9546.302br.net',
+'view.atdmt.com.70531.9546.302br.net',
+'view.atdmt.com.70532.9546.302br.net',
+'view.atdmt.com.70533.9546.302br.net',
+'view.atdmt.com.70534.9546.302br.net',
+'view.atdmt.com.70535.9546.302br.net',
+'view.atdmt.com.70536.9546.302br.net',
+'view.atdmt.com.70537.9546.302br.net',
+'view.atdmt.com.70538.9546.302br.net',
+'view.atdmt.com.70539.9546.302br.net',
+'view.atdmt.com.70540.9546.302br.net',
+'view.atdmt.com.70541.9546.302br.net',
+'view.atdmt.com.70542.9546.302br.net',
+'view.atdmt.com.70543.9546.302br.net',
+'view.atdmt.com.70545.9546.302br.net',
+'view.atdmt.com.70547.9546.302br.net',
+'view.atdmt.com.70549.9546.302br.net',
+'view.atdmt.com.70551.9546.302br.net',
+'view.atdmt.com.70553.9546.302br.net',
+'view.atdmt.com.70555.9546.302br.net',
+'view.atdmt.com.70557.9519.302br.net',
+'view.atdmt.com.70558.9519.302br.net',
+'view.atdmt.com.70559.9519.302br.net',
+'view.atdmt.com.70560.9519.302br.net',
+'view.atdmt.com.70561.9519.302br.net',
+'view.atdmt.com.70562.9519.302br.net',
+'view.atdmt.com.70563.9519.302br.net',
+'view.atdmt.com.70565.9519.302br.net',
+'view.atdmt.com.70567.9519.302br.net',
+'view.atdmt.com.70568.9519.302br.net',
+'view.atdmt.com.70569.9519.302br.net',
+'view.atdmt.com.70571.9519.302br.net',
+'view.atdmt.com.70572.9519.302br.net',
+'view.atdmt.com.70573.9519.302br.net',
+'view.atdmt.com.70574.9519.302br.net',
+'view.atdmt.com.70575.9519.302br.net',
+'view.atdmt.com.70577.9519.302br.net',
+'view.atdmt.com.70579.9519.302br.net',
+'view.atdmt.com.706.9000.302br.net',
+'view.atdmt.com.70631.9528.302br.net',
+'view.atdmt.com.70632.9528.302br.net',
+'view.atdmt.com.70633.9528.302br.net',
+'view.atdmt.com.70634.9528.302br.net',
+'view.atdmt.com.70635.9528.302br.net',
+'view.atdmt.com.70636.9528.302br.net',
+'view.atdmt.com.70637.9528.302br.net',
+'view.atdmt.com.70638.9528.302br.net',
+'view.atdmt.com.70639.9528.302br.net',
+'view.atdmt.com.70640.9528.302br.net',
+'view.atdmt.com.70641.9528.302br.net',
+'view.atdmt.com.70642.9528.302br.net',
+'view.atdmt.com.70643.9528.302br.net',
+'view.atdmt.com.70644.9528.302br.net',
+'view.atdmt.com.70645.9528.302br.net',
+'view.atdmt.com.70646.9528.302br.net',
+'view.atdmt.com.70647.9528.302br.net',
+'view.atdmt.com.70648.9528.302br.net',
+'view.atdmt.com.70649.9528.302br.net',
+'view.atdmt.com.70650.9528.302br.net',
+'view.atdmt.com.70651.9528.302br.net',
+'view.atdmt.com.70652.9528.302br.net',
+'view.atdmt.com.70653.9528.302br.net',
+'view.atdmt.com.70654.9528.302br.net',
+'view.atdmt.com.70656.9528.302br.net',
+'view.atdmt.com.70658.9528.302br.net',
+'view.atdmt.com.70660.9528.302br.net',
+'view.atdmt.com.70662.9528.302br.net',
+'view.atdmt.com.70664.9528.302br.net',
+'view.atdmt.com.70666.9528.302br.net',
+'view.atdmt.com.70668.9528.302br.net',
+'view.atdmt.com.70670.9528.302br.net',
+'view.atdmt.com.70672.9528.302br.net',
+'view.atdmt.com.70674.9596.302br.net',
+'view.atdmt.com.70676.9596.302br.net',
+'view.atdmt.com.70678.9596.302br.net',
+'view.atdmt.com.70680.9596.302br.net',
+'view.atdmt.com.70681.9541.302br.net',
+'view.atdmt.com.70682.9541.302br.net',
+'view.atdmt.com.70683.9541.302br.net',
+'view.atdmt.com.70684.9541.302br.net',
+'view.atdmt.com.70685.9541.302br.net',
+'view.atdmt.com.70686.9541.302br.net',
+'view.atdmt.com.70687.9541.302br.net',
+'view.atdmt.com.70688.9541.302br.net',
+'view.atdmt.com.70689.9541.302br.net',
+'view.atdmt.com.70690.9541.302br.net',
+'view.atdmt.com.70691.9541.302br.net',
+'view.atdmt.com.70692.9541.302br.net',
+'view.atdmt.com.70693.9541.302br.net',
+'view.atdmt.com.70694.9541.302br.net',
+'view.atdmt.com.70695.9541.302br.net',
+'view.atdmt.com.70696.9541.302br.net',
+'view.atdmt.com.70697.9541.302br.net',
+'view.atdmt.com.70698.9541.302br.net',
+'view.atdmt.com.70699.9541.302br.net',
+'view.atdmt.com.707.9000.302br.net',
+'view.atdmt.com.70700.9541.302br.net',
+'view.atdmt.com.70701.9541.302br.net',
+'view.atdmt.com.70702.9541.302br.net',
+'view.atdmt.com.70703.9541.302br.net',
+'view.atdmt.com.70704.9541.302br.net',
+'view.atdmt.com.70705.9541.302br.net',
+'view.atdmt.com.70706.9541.302br.net',
+'view.atdmt.com.70707.9541.302br.net',
+'view.atdmt.com.70708.9541.302br.net',
+'view.atdmt.com.70709.9541.302br.net',
+'view.atdmt.com.70710.9541.302br.net',
+'view.atdmt.com.70711.9541.302br.net',
+'view.atdmt.com.70712.9541.302br.net',
+'view.atdmt.com.70713.9541.302br.net',
+'view.atdmt.com.70714.9541.302br.net',
+'view.atdmt.com.70715.9541.302br.net',
+'view.atdmt.com.70716.9541.302br.net',
+'view.atdmt.com.70718.9541.302br.net',
+'view.atdmt.com.70720.9541.302br.net',
+'view.atdmt.com.70722.9541.302br.net',
+'view.atdmt.com.70724.9541.302br.net',
+'view.atdmt.com.70726.9541.302br.net',
+'view.atdmt.com.70728.9541.302br.net',
+'view.atdmt.com.70729.9541.302br.net',
+'view.atdmt.com.70730.9541.302br.net',
+'view.atdmt.com.70731.9541.302br.net',
+'view.atdmt.com.70732.9541.302br.net',
+'view.atdmt.com.70733.9541.302br.net',
+'view.atdmt.com.70734.9541.302br.net',
+'view.atdmt.com.70735.9541.302br.net',
+'view.atdmt.com.70736.9541.302br.net',
+'view.atdmt.com.70737.9541.302br.net',
+'view.atdmt.com.70738.9541.302br.net',
+'view.atdmt.com.70739.9541.302br.net',
+'view.atdmt.com.70740.9541.302br.net',
+'view.atdmt.com.70741.9541.302br.net',
+'view.atdmt.com.70742.9541.302br.net',
+'view.atdmt.com.70743.9541.302br.net',
+'view.atdmt.com.70744.9541.302br.net',
+'view.atdmt.com.70745.9541.302br.net',
+'view.atdmt.com.70746.9541.302br.net',
+'view.atdmt.com.70747.9541.302br.net',
+'view.atdmt.com.70748.9541.302br.net',
+'view.atdmt.com.70750.9541.302br.net',
+'view.atdmt.com.70752.9541.302br.net',
+'view.atdmt.com.70756.9596.302br.net',
+'view.atdmt.com.70757.9596.302br.net',
+'view.atdmt.com.70758.9596.302br.net',
+'view.atdmt.com.70759.9596.302br.net',
+'view.atdmt.com.70760.9596.302br.net',
+'view.atdmt.com.70761.9596.302br.net',
+'view.atdmt.com.70762.9596.302br.net',
+'view.atdmt.com.70763.9596.302br.net',
+'view.atdmt.com.70764.9596.302br.net',
+'view.atdmt.com.70765.9596.302br.net',
+'view.atdmt.com.70766.9596.302br.net',
+'view.atdmt.com.70767.9596.302br.net',
+'view.atdmt.com.70768.9596.302br.net',
+'view.atdmt.com.70769.9596.302br.net',
+'view.atdmt.com.70770.9596.302br.net',
+'view.atdmt.com.70771.9596.302br.net',
+'view.atdmt.com.70772.9596.302br.net',
+'view.atdmt.com.70773.9596.302br.net',
+'view.atdmt.com.70774.9596.302br.net',
+'view.atdmt.com.70775.9596.302br.net',
+'view.atdmt.com.70776.9596.302br.net',
+'view.atdmt.com.70777.9596.302br.net',
+'view.atdmt.com.70778.9596.302br.net',
+'view.atdmt.com.70779.9596.302br.net',
+'view.atdmt.com.70780.9546.302br.net',
+'view.atdmt.com.70781.9546.302br.net',
+'view.atdmt.com.70782.9546.302br.net',
+'view.atdmt.com.70783.9546.302br.net',
+'view.atdmt.com.70784.9546.302br.net',
+'view.atdmt.com.70785.9546.302br.net',
+'view.atdmt.com.70786.9541.302br.net',
+'view.atdmt.com.70787.9541.302br.net',
+'view.atdmt.com.70788.9541.302br.net',
+'view.atdmt.com.70789.9541.302br.net',
+'view.atdmt.com.70790.9541.302br.net',
+'view.atdmt.com.70791.9541.302br.net',
+'view.atdmt.com.70792.9541.302br.net',
+'view.atdmt.com.70793.9541.302br.net',
+'view.atdmt.com.70794.9541.302br.net',
+'view.atdmt.com.70795.9541.302br.net',
+'view.atdmt.com.70796.9541.302br.net',
+'view.atdmt.com.70797.9541.302br.net',
+'view.atdmt.com.70798.9528.302br.net',
+'view.atdmt.com.70799.9528.302br.net',
+'view.atdmt.com.70800.9528.302br.net',
+'view.atdmt.com.70801.9528.302br.net',
+'view.atdmt.com.70802.9528.302br.net',
+'view.atdmt.com.70803.9528.302br.net',
+'view.atdmt.com.70804.9528.302br.net',
+'view.atdmt.com.70805.9528.302br.net',
+'view.atdmt.com.70806.9528.302br.net',
+'view.atdmt.com.70807.9528.302br.net',
+'view.atdmt.com.70808.9528.302br.net',
+'view.atdmt.com.70809.9528.302br.net',
+'view.atdmt.com.70810.9528.302br.net',
+'view.atdmt.com.70811.9528.302br.net',
+'view.atdmt.com.70812.9528.302br.net',
+'view.atdmt.com.70813.9528.302br.net',
+'view.atdmt.com.70814.9528.302br.net',
+'view.atdmt.com.70815.9528.302br.net',
+'view.atdmt.com.70822.9519.302br.net',
+'view.atdmt.com.70823.9519.302br.net',
+'view.atdmt.com.70824.9519.302br.net',
+'view.atdmt.com.70825.9519.302br.net',
+'view.atdmt.com.70826.9519.302br.net',
+'view.atdmt.com.70827.9519.302br.net',
+'view.atdmt.com.70828.9519.302br.net',
+'view.atdmt.com.70829.9519.302br.net',
+'view.atdmt.com.70830.9519.302br.net',
+'view.atdmt.com.70831.9519.302br.net',
+'view.atdmt.com.70832.9519.302br.net',
+'view.atdmt.com.70833.9519.302br.net',
+'view.atdmt.com.70834.9519.302br.net',
+'view.atdmt.com.70835.9519.302br.net',
+'view.atdmt.com.70836.9519.302br.net',
+'view.atdmt.com.70837.9519.302br.net',
+'view.atdmt.com.70838.9519.302br.net',
+'view.atdmt.com.70839.9519.302br.net',
+'view.atdmt.com.70841.9519.302br.net',
+'view.atdmt.com.70843.9519.302br.net',
+'view.atdmt.com.70844.9519.302br.net',
+'view.atdmt.com.70845.9519.302br.net',
+'view.atdmt.com.70846.9519.302br.net',
+'view.atdmt.com.70847.9519.302br.net',
+'view.atdmt.com.70848.9519.302br.net',
+'view.atdmt.com.70849.9519.302br.net',
+'view.atdmt.com.70850.9519.302br.net',
+'view.atdmt.com.70851.9519.302br.net',
+'view.atdmt.com.70852.9519.302br.net',
+'view.atdmt.com.70853.9519.302br.net',
+'view.atdmt.com.70854.9519.302br.net',
+'view.atdmt.com.70855.9519.302br.net',
+'view.atdmt.com.70856.9519.302br.net',
+'view.atdmt.com.70857.9519.302br.net',
+'view.atdmt.com.70858.9519.302br.net',
+'view.atdmt.com.70859.9519.302br.net',
+'view.atdmt.com.70860.9519.302br.net',
+'view.atdmt.com.70861.9519.302br.net',
+'view.atdmt.com.70862.9519.302br.net',
+'view.atdmt.com.70863.9519.302br.net',
+'view.atdmt.com.70864.9519.302br.net',
+'view.atdmt.com.70865.9519.302br.net',
+'view.atdmt.com.70866.9519.302br.net',
+'view.atdmt.com.70867.9519.302br.net',
+'view.atdmt.com.70868.9519.302br.net',
+'view.atdmt.com.70869.9519.302br.net',
+'view.atdmt.com.70870.9519.302br.net',
+'view.atdmt.com.70871.9519.302br.net',
+'view.atdmt.com.70872.9519.302br.net',
+'view.atdmt.com.70873.9519.302br.net',
+'view.atdmt.com.70874.9519.302br.net',
+'view.atdmt.com.70875.9519.302br.net',
+'view.atdmt.com.70876.9519.302br.net',
+'view.atdmt.com.70877.9519.302br.net',
+'view.atdmt.com.70878.9519.302br.net',
+'view.atdmt.com.70879.9519.302br.net',
+'view.atdmt.com.70880.9519.302br.net',
+'view.atdmt.com.70881.9519.302br.net',
+'view.atdmt.com.70882.9519.302br.net',
+'view.atdmt.com.70883.9519.302br.net',
+'view.atdmt.com.70884.9519.302br.net',
+'view.atdmt.com.70885.9519.302br.net',
+'view.atdmt.com.70886.9519.302br.net',
+'view.atdmt.com.70887.9519.302br.net',
+'view.atdmt.com.70888.9519.302br.net',
+'view.atdmt.com.70889.9519.302br.net',
+'view.atdmt.com.70890.9519.302br.net',
+'view.atdmt.com.70891.9519.302br.net',
+'view.atdmt.com.70892.9519.302br.net',
+'view.atdmt.com.70893.9519.302br.net',
+'view.atdmt.com.70894.9519.302br.net',
+'view.atdmt.com.70895.9519.302br.net',
+'view.atdmt.com.70896.9519.302br.net',
+'view.atdmt.com.70897.9519.302br.net',
+'view.atdmt.com.70898.9519.302br.net',
+'view.atdmt.com.70899.9519.302br.net',
+'view.atdmt.com.70900.9519.302br.net',
+'view.atdmt.com.70901.9519.302br.net',
+'view.atdmt.com.70902.9519.302br.net',
+'view.atdmt.com.70903.9519.302br.net',
+'view.atdmt.com.70904.9519.302br.net',
+'view.atdmt.com.70905.9519.302br.net',
+'view.atdmt.com.70907.9519.302br.net',
+'view.atdmt.com.70908.9519.302br.net',
+'view.atdmt.com.70909.9519.302br.net',
+'view.atdmt.com.70910.9519.302br.net',
+'view.atdmt.com.70911.9519.302br.net',
+'view.atdmt.com.70912.9519.302br.net',
+'view.atdmt.com.70913.9519.302br.net',
+'view.atdmt.com.70914.9519.302br.net',
+'view.atdmt.com.70915.9519.302br.net',
+'view.atdmt.com.70916.9519.302br.net',
+'view.atdmt.com.70917.9519.302br.net',
+'view.atdmt.com.70918.9519.302br.net',
+'view.atdmt.com.70919.9519.302br.net',
+'view.atdmt.com.70920.9519.302br.net',
+'view.atdmt.com.70921.9519.302br.net',
+'view.atdmt.com.70922.9519.302br.net',
+'view.atdmt.com.70923.9519.302br.net',
+'view.atdmt.com.70924.9526.302br.net',
+'view.atdmt.com.70925.9526.302br.net',
+'view.atdmt.com.70926.9526.302br.net',
+'view.atdmt.com.70927.9526.302br.net',
+'view.atdmt.com.70928.9526.302br.net',
+'view.atdmt.com.70929.9526.302br.net',
+'view.atdmt.com.70930.9526.302br.net',
+'view.atdmt.com.70931.9526.302br.net',
+'view.atdmt.com.70932.9526.302br.net',
+'view.atdmt.com.70933.9526.302br.net',
+'view.atdmt.com.70934.9526.302br.net',
+'view.atdmt.com.70935.9526.302br.net',
+'view.atdmt.com.70936.9526.302br.net',
+'view.atdmt.com.70937.9526.302br.net',
+'view.atdmt.com.70938.9526.302br.net',
+'view.atdmt.com.70939.9526.302br.net',
+'view.atdmt.com.70941.9526.302br.net',
+'view.atdmt.com.70942.9526.302br.net',
+'view.atdmt.com.70943.9526.302br.net',
+'view.atdmt.com.70944.9526.302br.net',
+'view.atdmt.com.70945.9526.302br.net',
+'view.atdmt.com.70946.9526.302br.net',
+'view.atdmt.com.70947.9526.302br.net',
+'view.atdmt.com.70948.9526.302br.net',
+'view.atdmt.com.70949.9526.302br.net',
+'view.atdmt.com.70950.9526.302br.net',
+'view.atdmt.com.70951.9526.302br.net',
+'view.atdmt.com.70952.9526.302br.net',
+'view.atdmt.com.70953.9526.302br.net',
+'view.atdmt.com.70954.9526.302br.net',
+'view.atdmt.com.70955.9526.302br.net',
+'view.atdmt.com.70956.9526.302br.net',
+'view.atdmt.com.70957.9526.302br.net',
+'view.atdmt.com.70958.9526.302br.net',
+'view.atdmt.com.70959.9526.302br.net',
+'view.atdmt.com.70960.9526.302br.net',
+'view.atdmt.com.70961.9526.302br.net',
+'view.atdmt.com.70962.9526.302br.net',
+'view.atdmt.com.70963.9526.302br.net',
+'view.atdmt.com.71226.9517.302br.net',
+'view.atdmt.com.71228.9517.302br.net',
+'view.atdmt.com.71230.9517.302br.net',
+'view.atdmt.com.71232.9517.302br.net',
+'view.atdmt.com.71234.9517.302br.net',
+'view.atdmt.com.71236.9517.302br.net',
+'view.atdmt.com.71237.9517.302br.net',
+'view.atdmt.com.71238.9517.302br.net',
+'view.atdmt.com.71239.9517.302br.net',
+'view.atdmt.com.71240.9517.302br.net',
+'view.atdmt.com.71241.9517.302br.net',
+'view.atdmt.com.71242.9517.302br.net',
+'view.atdmt.com.71243.9517.302br.net',
+'view.atdmt.com.71244.9517.302br.net',
+'view.atdmt.com.71245.9517.302br.net',
+'view.atdmt.com.71246.9517.302br.net',
+'view.atdmt.com.71247.9517.302br.net',
+'view.atdmt.com.71248.9517.302br.net',
+'view.atdmt.com.71249.9517.302br.net',
+'view.atdmt.com.71250.9517.302br.net',
+'view.atdmt.com.71251.9517.302br.net',
+'view.atdmt.com.71252.9517.302br.net',
+'view.atdmt.com.71253.9517.302br.net',
+'view.atdmt.com.71254.9517.302br.net',
+'view.atdmt.com.71255.9517.302br.net',
+'view.atdmt.com.71256.9517.302br.net',
+'view.atdmt.com.71257.9517.302br.net',
+'view.atdmt.com.71258.9517.302br.net',
+'view.atdmt.com.71259.9517.302br.net',
+'view.atdmt.com.71260.9517.302br.net',
+'view.atdmt.com.71261.9517.302br.net',
+'view.atdmt.com.71262.9517.302br.net',
+'view.atdmt.com.71263.9517.302br.net',
+'view.atdmt.com.71264.9517.302br.net',
+'view.atdmt.com.71265.9517.302br.net',
+'view.atdmt.com.71266.9517.302br.net',
+'view.atdmt.com.71267.9517.302br.net',
+'view.atdmt.com.71268.9517.302br.net',
+'view.atdmt.com.71269.9517.302br.net',
+'view.atdmt.com.71270.9517.302br.net',
+'view.atdmt.com.71271.9517.302br.net',
+'view.atdmt.com.71272.9517.302br.net',
+'view.atdmt.com.71273.9517.302br.net',
+'view.atdmt.com.71274.9517.302br.net',
+'view.atdmt.com.71275.9517.302br.net',
+'view.atdmt.com.71276.9517.302br.net',
+'view.atdmt.com.71277.9517.302br.net',
+'view.atdmt.com.71278.9517.302br.net',
+'view.atdmt.com.71279.9517.302br.net',
+'view.atdmt.com.71280.9517.302br.net',
+'view.atdmt.com.71281.9517.302br.net',
+'view.atdmt.com.71282.9517.302br.net',
+'view.atdmt.com.71283.9517.302br.net',
+'view.atdmt.com.71284.9517.302br.net',
+'view.atdmt.com.71285.9517.302br.net',
+'view.atdmt.com.71286.9517.302br.net',
+'view.atdmt.com.71287.9517.302br.net',
+'view.atdmt.com.71288.9517.302br.net',
+'view.atdmt.com.71289.9517.302br.net',
+'view.atdmt.com.71290.9517.302br.net',
+'view.atdmt.com.71291.9517.302br.net',
+'view.atdmt.com.71292.9517.302br.net',
+'view.atdmt.com.71293.9517.302br.net',
+'view.atdmt.com.71294.9517.302br.net',
+'view.atdmt.com.71295.9517.302br.net',
+'view.atdmt.com.71296.9517.302br.net',
+'view.atdmt.com.71297.9517.302br.net',
+'view.atdmt.com.71298.9517.302br.net',
+'view.atdmt.com.71299.9517.302br.net',
+'view.atdmt.com.71300.9517.302br.net',
+'view.atdmt.com.71301.9517.302br.net',
+'view.atdmt.com.71302.9517.302br.net',
+'view.atdmt.com.71303.9517.302br.net',
+'view.atdmt.com.71304.9517.302br.net',
+'view.atdmt.com.71305.9517.302br.net',
+'view.atdmt.com.71306.9517.302br.net',
+'view.atdmt.com.71307.9517.302br.net',
+'view.atdmt.com.71308.9517.302br.net',
+'view.atdmt.com.71309.9517.302br.net',
+'view.atdmt.com.71310.9517.302br.net',
+'view.atdmt.com.71311.9517.302br.net',
+'view.atdmt.com.71312.9517.302br.net',
+'view.atdmt.com.71313.9517.302br.net',
+'view.atdmt.com.71314.9517.302br.net',
+'view.atdmt.com.71315.9517.302br.net',
+'view.atdmt.com.71316.9517.302br.net',
+'view.atdmt.com.71317.9517.302br.net',
+'view.atdmt.com.71318.9517.302br.net',
+'view.atdmt.com.71319.9517.302br.net',
+'view.atdmt.com.71320.9517.302br.net',
+'view.atdmt.com.71321.9517.302br.net',
+'view.atdmt.com.71322.9517.302br.net',
+'view.atdmt.com.71323.9517.302br.net',
+'view.atdmt.com.71324.9517.302br.net',
+'view.atdmt.com.71325.9517.302br.net',
+'view.atdmt.com.71326.9517.302br.net',
+'view.atdmt.com.71327.9517.302br.net',
+'view.atdmt.com.71328.9517.302br.net',
+'view.atdmt.com.71329.9517.302br.net',
+'view.atdmt.com.71330.9517.302br.net',
+'view.atdmt.com.71331.9517.302br.net',
+'view.atdmt.com.71332.9517.302br.net',
+'view.atdmt.com.71333.9517.302br.net',
+'view.atdmt.com.71334.9517.302br.net',
+'view.atdmt.com.71335.9517.302br.net',
+'view.atdmt.com.71336.9517.302br.net',
+'view.atdmt.com.71337.9517.302br.net',
+'view.atdmt.com.71338.9517.302br.net',
+'view.atdmt.com.71339.9517.302br.net',
+'view.atdmt.com.71340.9517.302br.net',
+'view.atdmt.com.71341.9517.302br.net',
+'view.atdmt.com.71342.9517.302br.net',
+'view.atdmt.com.71343.9517.302br.net',
+'view.atdmt.com.71344.9517.302br.net',
+'view.atdmt.com.71351.9517.302br.net',
+'view.atdmt.com.71352.9517.302br.net',
+'view.atdmt.com.71353.9517.302br.net',
+'view.atdmt.com.71354.9517.302br.net',
+'view.atdmt.com.71356.9489.302br.net',
+'view.atdmt.com.71358.9489.302br.net',
+'view.atdmt.com.71372.9489.302br.net',
+'view.atdmt.com.71373.9489.302br.net',
+'view.atdmt.com.71374.9489.302br.net',
+'view.atdmt.com.71377.9489.302br.net',
+'view.atdmt.com.71378.9489.302br.net',
+'view.atdmt.com.71379.9489.302br.net',
+'view.atdmt.com.71380.9489.302br.net',
+'view.atdmt.com.71381.9489.302br.net',
+'view.atdmt.com.71382.9489.302br.net',
+'view.atdmt.com.71383.9489.302br.net',
+'view.atdmt.com.71384.9489.302br.net',
+'view.atdmt.com.71385.9489.302br.net',
+'view.atdmt.com.71386.9489.302br.net',
+'view.atdmt.com.71387.9489.302br.net',
+'view.atdmt.com.71388.9489.302br.net',
+'view.atdmt.com.71389.9489.302br.net',
+'view.atdmt.com.71390.9489.302br.net',
+'view.atdmt.com.71391.9489.302br.net',
+'view.atdmt.com.71392.9489.302br.net',
+'view.atdmt.com.71393.9489.302br.net',
+'view.atdmt.com.71394.9489.302br.net',
+'view.atdmt.com.71395.9489.302br.net',
+'view.atdmt.com.71396.9489.302br.net',
+'view.atdmt.com.71397.9489.302br.net',
+'view.atdmt.com.71398.9489.302br.net',
+'view.atdmt.com.71399.9489.302br.net',
+'view.atdmt.com.71400.9489.302br.net',
+'view.atdmt.com.71401.9489.302br.net',
+'view.atdmt.com.71402.9489.302br.net',
+'view.atdmt.com.71403.9489.302br.net',
+'view.atdmt.com.71404.9489.302br.net',
+'view.atdmt.com.71405.9489.302br.net',
+'view.atdmt.com.71406.9489.302br.net',
+'view.atdmt.com.71407.9489.302br.net',
+'view.atdmt.com.71408.9489.302br.net',
+'view.atdmt.com.71409.9489.302br.net',
+'view.atdmt.com.71410.9489.302br.net',
+'view.atdmt.com.71411.9489.302br.net',
+'view.atdmt.com.71412.9489.302br.net',
+'view.atdmt.com.71413.9489.302br.net',
+'view.atdmt.com.71414.9489.302br.net',
+'view.atdmt.com.71415.9489.302br.net',
+'view.atdmt.com.71416.9489.302br.net',
+'view.atdmt.com.71417.9489.302br.net',
+'view.atdmt.com.71418.9489.302br.net',
+'view.atdmt.com.71419.9489.302br.net',
+'view.atdmt.com.71420.9489.302br.net',
+'view.atdmt.com.71421.9489.302br.net',
+'view.atdmt.com.71422.9489.302br.net',
+'view.atdmt.com.71423.9489.302br.net',
+'view.atdmt.com.71424.9489.302br.net',
+'view.atdmt.com.71425.9489.302br.net',
+'view.atdmt.com.71426.9489.302br.net',
+'view.atdmt.com.71443.9491.302br.net',
+'view.atdmt.com.71444.9491.302br.net',
+'view.atdmt.com.71445.9491.302br.net',
+'view.atdmt.com.71446.9491.302br.net',
+'view.atdmt.com.71447.9491.302br.net',
+'view.atdmt.com.71448.9491.302br.net',
+'view.atdmt.com.71449.9491.302br.net',
+'view.atdmt.com.71450.9491.302br.net',
+'view.atdmt.com.71451.9491.302br.net',
+'view.atdmt.com.71452.9491.302br.net',
+'view.atdmt.com.71453.9491.302br.net',
+'view.atdmt.com.71454.9491.302br.net',
+'view.atdmt.com.71455.9491.302br.net',
+'view.atdmt.com.71456.9491.302br.net',
+'view.atdmt.com.71457.9491.302br.net',
+'view.atdmt.com.71458.9491.302br.net',
+'view.atdmt.com.71459.9491.302br.net',
+'view.atdmt.com.71460.9491.302br.net',
+'view.atdmt.com.71461.9491.302br.net',
+'view.atdmt.com.71462.9491.302br.net',
+'view.atdmt.com.71463.9491.302br.net',
+'view.atdmt.com.71464.9491.302br.net',
+'view.atdmt.com.71465.9491.302br.net',
+'view.atdmt.com.71466.9491.302br.net',
+'view.atdmt.com.71467.9491.302br.net',
+'view.atdmt.com.71468.9491.302br.net',
+'view.atdmt.com.71469.9491.302br.net',
+'view.atdmt.com.71470.9491.302br.net',
+'view.atdmt.com.71472.9491.302br.net',
+'view.atdmt.com.71474.9491.302br.net',
+'view.atdmt.com.71476.9491.302br.net',
+'view.atdmt.com.71477.9491.302br.net',
+'view.atdmt.com.71478.9491.302br.net',
+'view.atdmt.com.71479.9491.302br.net',
+'view.atdmt.com.71480.9491.302br.net',
+'view.atdmt.com.71481.9491.302br.net',
+'view.atdmt.com.71482.9491.302br.net',
+'view.atdmt.com.71483.9491.302br.net',
+'view.atdmt.com.71484.9491.302br.net',
+'view.atdmt.com.71485.9491.302br.net',
+'view.atdmt.com.71486.9491.302br.net',
+'view.atdmt.com.71489.9491.302br.net',
+'view.atdmt.com.71490.9491.302br.net',
+'view.atdmt.com.71491.9491.302br.net',
+'view.atdmt.com.71492.9491.302br.net',
+'view.atdmt.com.71493.9491.302br.net',
+'view.atdmt.com.71494.9491.302br.net',
+'view.atdmt.com.71495.9491.302br.net',
+'view.atdmt.com.71496.9491.302br.net',
+'view.atdmt.com.71497.9491.302br.net',
+'view.atdmt.com.71498.9491.302br.net',
+'view.atdmt.com.71499.9491.302br.net',
+'view.atdmt.com.71500.9491.302br.net',
+'view.atdmt.com.71501.9491.302br.net',
+'view.atdmt.com.71502.9491.302br.net',
+'view.atdmt.com.71503.9491.302br.net',
+'view.atdmt.com.71504.9491.302br.net',
+'view.atdmt.com.71505.9491.302br.net',
+'view.atdmt.com.71506.9491.302br.net',
+'view.atdmt.com.71507.9491.302br.net',
+'view.atdmt.com.71508.9491.302br.net',
+'view.atdmt.com.71509.9491.302br.net',
+'view.atdmt.com.71510.9491.302br.net',
+'view.atdmt.com.71511.9491.302br.net',
+'view.atdmt.com.71512.9491.302br.net',
+'view.atdmt.com.71513.9491.302br.net',
+'view.atdmt.com.71514.9491.302br.net',
+'view.atdmt.com.71585.9600.302br.net',
+'view.atdmt.com.71586.9599.302br.net',
+'view.atdmt.com.71587.9599.302br.net',
+'view.atdmt.com.71589.9597.302br.net',
+'view.atdmt.com.71590.9597.302br.net',
+'view.atdmt.com.71825.9528.302br.net',
+'view.atdmt.com.71826.9528.302br.net',
+'view.atdmt.com.71827.9528.302br.net',
+'view.atdmt.com.71828.9528.302br.net',
+'view.atdmt.com.71829.9528.302br.net',
+'view.atdmt.com.71830.9528.302br.net',
+'view.atdmt.com.71831.9528.302br.net',
+'view.atdmt.com.71832.9528.302br.net',
+'view.atdmt.com.71833.9528.302br.net',
+'view.atdmt.com.71834.9528.302br.net',
+'view.atdmt.com.71835.9528.302br.net',
+'view.atdmt.com.71836.9528.302br.net',
+'view.atdmt.com.71839.9528.302br.net',
+'view.atdmt.com.71840.9528.302br.net',
+'view.atdmt.com.71841.9528.302br.net',
+'view.atdmt.com.71842.9528.302br.net',
+'view.atdmt.com.71843.9528.302br.net',
+'view.atdmt.com.71844.9528.302br.net',
+'view.atdmt.com.71852.9304.302br.net',
+'view.atdmt.com.71855.9304.302br.net',
+'view.atdmt.com.71858.9304.302br.net',
+'view.atdmt.com.71861.9304.302br.net',
+'view.atdmt.com.71864.9304.302br.net',
+'view.atdmt.com.71867.9304.302br.net',
+'view.atdmt.com.71870.9304.302br.net',
+'view.atdmt.com.71873.9304.302br.net',
+'view.atdmt.com.71879.9304.302br.net',
+'view.atdmt.com.71882.9304.302br.net',
+'view.atdmt.com.71885.9304.302br.net',
+'view.atdmt.com.71888.9304.302br.net',
+'view.atdmt.com.71891.9304.302br.net',
+'view.atdmt.com.71894.9304.302br.net',
+'view.atdmt.com.71897.9304.302br.net',
+'view.atdmt.com.71900.9304.302br.net',
+'view.atdmt.com.71903.9304.302br.net',
+'view.atdmt.com.71906.9304.302br.net',
+'view.atdmt.com.71909.9304.302br.net',
+'view.atdmt.com.71912.9304.302br.net',
+'view.atdmt.com.71915.9304.302br.net',
+'view.atdmt.com.71918.9304.302br.net',
+'view.atdmt.com.71921.9304.302br.net',
+'view.atdmt.com.71924.9304.302br.net',
+'view.atdmt.com.71927.9304.302br.net',
+'view.atdmt.com.71930.9304.302br.net',
+'view.atdmt.com.71933.9304.302br.net',
+'view.atdmt.com.71936.9304.302br.net',
+'view.atdmt.com.71938.9304.302br.net',
+'view.atdmt.com.71939.9304.302br.net',
+'view.atdmt.com.71941.9304.302br.net',
+'view.atdmt.com.71942.9304.302br.net',
+'view.atdmt.com.71944.9304.302br.net',
+'view.atdmt.com.71945.9304.302br.net',
+'view.atdmt.com.71947.9304.302br.net',
+'view.atdmt.com.71948.9304.302br.net',
+'view.atdmt.com.71950.9304.302br.net',
+'view.atdmt.com.71951.9304.302br.net',
+'view.atdmt.com.71954.9304.302br.net',
+'view.atdmt.com.71956.9304.302br.net',
+'view.atdmt.com.71957.9304.302br.net',
+'view.atdmt.com.71960.9304.302br.net',
+'view.atdmt.com.71963.9304.302br.net',
+'view.atdmt.com.71965.9304.302br.net',
+'view.atdmt.com.71966.9304.302br.net',
+'view.atdmt.com.71969.9304.302br.net',
+'view.atdmt.com.71972.9304.302br.net',
+'view.atdmt.com.71975.9304.302br.net',
+'view.atdmt.com.71978.9304.302br.net',
+'view.atdmt.com.71981.9304.302br.net',
+'view.atdmt.com.71984.9304.302br.net',
+'view.atdmt.com.71990.9304.302br.net',
+'view.atdmt.com.71993.9304.302br.net',
+'view.atdmt.com.71996.9304.302br.net',
+'view.atdmt.com.71999.9304.302br.net',
+'view.atdmt.com.72002.9304.302br.net',
+'view.atdmt.com.72005.9304.302br.net',
+'view.atdmt.com.72008.9304.302br.net',
+'view.atdmt.com.72011.9304.302br.net',
+'view.atdmt.com.72023.9304.302br.net',
+'view.atdmt.com.72281.9491.302br.net',
+'view.atdmt.com.72283.9491.302br.net',
+'view.atdmt.com.72661.9596.302br.net',
+'view.atdmt.com.72663.9596.302br.net',
+'view.atdmt.com.72665.9596.302br.net',
+'view.atdmt.com.72667.9596.302br.net',
+'view.atdmt.com.72669.9596.302br.net',
+'view.atdmt.com.72671.9596.302br.net',
+'view.atdmt.com.72823.9517.302br.net',
+'view.atdmt.com.72825.9517.302br.net',
+'view.atdmt.com.72827.9517.302br.net',
+'view.atdmt.com.72829.9517.302br.net',
+'view.atdmt.com.72831.9517.302br.net',
+'view.atdmt.com.72833.9517.302br.net',
+'view.atdmt.com.72888.9596.302br.net',
+'view.atdmt.com.72889.9596.302br.net',
+'view.atdmt.com.72890.9596.302br.net',
+'view.atdmt.com.72891.9596.302br.net',
+'view.atdmt.com.72892.9596.302br.net',
+'view.atdmt.com.72893.9596.302br.net',
+'view.atdmt.com.72894.9596.302br.net',
+'view.atdmt.com.72895.9596.302br.net',
+'view.atdmt.com.72896.9596.302br.net',
+'view.atdmt.com.72897.9596.302br.net',
+'view.atdmt.com.72898.9596.302br.net',
+'view.atdmt.com.72899.9596.302br.net',
+'view.atdmt.com.72900.9596.302br.net',
+'view.atdmt.com.72901.9596.302br.net',
+'view.atdmt.com.72902.9596.302br.net',
+'view.atdmt.com.72903.9596.302br.net',
+'view.atdmt.com.72904.9596.302br.net',
+'view.atdmt.com.72905.9596.302br.net',
+'view.atdmt.com.72906.9596.302br.net',
+'view.atdmt.com.72907.9596.302br.net',
+'view.atdmt.com.72908.9596.302br.net',
+'view.atdmt.com.72909.9596.302br.net',
+'view.atdmt.com.72910.9596.302br.net',
+'view.atdmt.com.72911.9596.302br.net',
+'view.atdmt.com.72913.9517.302br.net',
+'view.atdmt.com.72916.9517.302br.net',
+'view.atdmt.com.72919.9517.302br.net',
+'view.atdmt.com.72922.9517.302br.net',
+'view.atdmt.com.72925.9517.302br.net',
+'view.atdmt.com.72928.9517.302br.net',
+'view.atdmt.com.72931.9517.302br.net',
+'view.atdmt.com.72934.9517.302br.net',
+'view.atdmt.com.72937.9517.302br.net',
+'view.atdmt.com.72940.9517.302br.net',
+'view.atdmt.com.72943.9517.302br.net',
+'view.atdmt.com.72946.9517.302br.net',
+'view.atdmt.com.72971.9546.302br.net',
+'view.atdmt.com.72972.9546.302br.net',
+'view.atdmt.com.72983.9541.302br.net',
+'view.atdmt.com.72984.9541.302br.net',
+'view.atdmt.com.72985.9541.302br.net',
+'view.atdmt.com.72986.9541.302br.net',
+'view.atdmt.com.72987.9541.302br.net',
+'view.atdmt.com.72988.9541.302br.net',
+'view.atdmt.com.72989.9541.302br.net',
+'view.atdmt.com.72990.9541.302br.net',
+'view.atdmt.com.73006.9549.302br.net',
+'view.atdmt.com.73009.9489.302br.net',
+'view.atdmt.com.73011.9489.302br.net',
+'view.atdmt.com.73013.9489.302br.net',
+'view.atdmt.com.73015.9489.302br.net',
+'view.atdmt.com.73018.9489.302br.net',
+'view.atdmt.com.73021.9489.302br.net',
+'view.atdmt.com.73024.9489.302br.net',
+'view.atdmt.com.73027.9489.302br.net',
+'view.atdmt.com.73030.9489.302br.net',
+'view.atdmt.com.73033.9489.302br.net',
+'view.atdmt.com.73036.9489.302br.net',
+'view.atdmt.com.73039.9489.302br.net',
+'view.atdmt.com.73050.9615.302br.net',
+'view.atdmt.com.73051.9615.302br.net',
+'view.atdmt.com.73052.9615.302br.net',
+'view.atdmt.com.73053.9615.302br.net',
+'view.atdmt.com.73054.9615.302br.net',
+'view.atdmt.com.73055.9615.302br.net',
+'view.atdmt.com.73056.9615.302br.net',
+'view.atdmt.com.73057.9615.302br.net',
+'view.atdmt.com.73059.9615.302br.net',
+'view.atdmt.com.73060.9615.302br.net',
+'view.atdmt.com.73061.9615.302br.net',
+'view.atdmt.com.73062.9615.302br.net',
+'view.atdmt.com.73063.9615.302br.net',
+'view.atdmt.com.73064.9615.302br.net',
+'view.atdmt.com.73065.9615.302br.net',
+'view.atdmt.com.73066.9615.302br.net',
+'view.atdmt.com.73067.9615.302br.net',
+'view.atdmt.com.73068.9615.302br.net',
+'view.atdmt.com.73069.9615.302br.net',
+'view.atdmt.com.73071.9615.302br.net',
+'view.atdmt.com.73073.9615.302br.net',
+'view.atdmt.com.73075.9615.302br.net',
+'view.atdmt.com.73077.9615.302br.net',
+'view.atdmt.com.73078.9615.302br.net',
+'view.atdmt.com.73079.9615.302br.net',
+'view.atdmt.com.73080.9615.302br.net',
+'view.atdmt.com.73081.9615.302br.net',
+'view.atdmt.com.73082.9615.302br.net',
+'view.atdmt.com.73083.9615.302br.net',
+'view.atdmt.com.73084.9615.302br.net',
+'view.atdmt.com.73085.9615.302br.net',
+'view.atdmt.com.73086.9615.302br.net',
+'view.atdmt.com.73087.9615.302br.net',
+'view.atdmt.com.73088.9615.302br.net',
+'view.atdmt.com.73089.9615.302br.net',
+'view.atdmt.com.73090.9615.302br.net',
+'view.atdmt.com.73091.9615.302br.net',
+'view.atdmt.com.73093.9615.302br.net',
+'view.atdmt.com.73094.9615.302br.net',
+'view.atdmt.com.73095.9615.302br.net',
+'view.atdmt.com.73096.9615.302br.net',
+'view.atdmt.com.73097.9615.302br.net',
+'view.atdmt.com.73098.9615.302br.net',
+'view.atdmt.com.73099.9615.302br.net',
+'view.atdmt.com.73874.9623.302br.net',
+'view.atdmt.com.73875.9623.302br.net',
+'view.atdmt.com.73876.9623.302br.net',
+'view.atdmt.com.73877.9623.302br.net',
+'view.atdmt.com.73878.9623.302br.net',
+'view.atdmt.com.73879.9623.302br.net',
+'view.atdmt.com.73880.9623.302br.net',
+'view.atdmt.com.73881.9623.302br.net',
+'view.atdmt.com.73882.9623.302br.net',
+'view.atdmt.com.73883.9623.302br.net',
+'view.atdmt.com.73884.9623.302br.net',
+'view.atdmt.com.73885.9623.302br.net',
+'view.atdmt.com.73886.9623.302br.net',
+'view.atdmt.com.73887.9623.302br.net',
+'view.atdmt.com.73888.9623.302br.net',
+'view.atdmt.com.73889.9623.302br.net',
+'view.atdmt.com.73890.9623.302br.net',
+'view.atdmt.com.73891.9623.302br.net',
+'view.atdmt.com.75262.9615.302br.net',
+'view.atdmt.com.75263.9615.302br.net',
+'view.atdmt.com.75264.9615.302br.net',
+'view.atdmt.com.75265.9615.302br.net',
+'view.atdmt.com.75266.9615.302br.net',
+'view.atdmt.com.75267.9615.302br.net',
+'view.atdmt.com.75268.9615.302br.net',
+'view.atdmt.com.75269.9615.302br.net',
+'view.atdmt.com.75270.9615.302br.net',
+'view.atdmt.com.75271.9615.302br.net',
+'view.atdmt.com.75272.9615.302br.net',
+'view.atdmt.com.75273.9615.302br.net',
+'view.atdmt.com.75274.9623.302br.net',
+'view.atdmt.com.75275.9623.302br.net',
+'view.atdmt.com.75276.9623.302br.net',
+'view.atdmt.com.75277.9623.302br.net',
+'view.atdmt.com.75278.9623.302br.net',
+'view.atdmt.com.75279.9623.302br.net',
+'view.atdmt.com.75280.9623.302br.net',
+'view.atdmt.com.75281.9623.302br.net',
+'view.atdmt.com.75282.9623.302br.net',
+'view.atdmt.com.75283.9623.302br.net',
+'view.atdmt.com.75284.9623.302br.net',
+'view.atdmt.com.75285.9623.302br.net',
+'view.atdmt.com.76197.9615.302br.net',
+'view.atdmt.com.76198.9615.302br.net',
+'view.atdmt.com.76199.9615.302br.net',
+'view.atdmt.com.76200.9615.302br.net',
+'view.atdmt.com.76202.9615.302br.net',
+'view.atdmt.com.76203.9615.302br.net',
+'view.atdmt.com.76204.9615.302br.net',
+'view.atdmt.com.76206.9615.302br.net',
+'view.atdmt.com.76207.9615.302br.net',
+'view.atdmt.com.76208.9615.302br.net',
+'view.atdmt.com.76550.9645.302br.net',
+'view.atdmt.com.76551.9645.302br.net',
+'view.atdmt.com.76552.9645.302br.net',
+'view.atdmt.com.76553.9645.302br.net',
+'view.atdmt.com.76554.9645.302br.net',
+'view.atdmt.com.76555.9645.302br.net',
+'view.atdmt.com.76556.9645.302br.net',
+'view.atdmt.com.76557.9645.302br.net',
+'view.atdmt.com.76558.9645.302br.net',
+'view.atdmt.com.76559.9645.302br.net',
+'view.atdmt.com.76560.9645.302br.net',
+'view.atdmt.com.76561.9645.302br.net',
+'view.atdmt.com.76562.9645.302br.net',
+'view.atdmt.com.76563.9645.302br.net',
+'view.atdmt.com.76564.9645.302br.net',
+'view.atdmt.com.76565.9645.302br.net',
+'view.atdmt.com.76566.9645.302br.net',
+'view.atdmt.com.76567.9645.302br.net',
+'view.atdmt.com.77580.9519.302br.net',
+'view.atdmt.com.77581.9519.302br.net',
+'view.atdmt.com.77586.9661.302br.net',
+'view.atdmt.com.77587.9661.302br.net',
+'view.atdmt.com.77588.9661.302br.net',
+'view.atdmt.com.77589.9661.302br.net',
+'view.atdmt.com.77590.9661.302br.net',
+'view.atdmt.com.77591.9661.302br.net',
+'view.atdmt.com.77592.9661.302br.net',
+'view.atdmt.com.77593.9661.302br.net',
+'view.atdmt.com.77594.9661.302br.net',
+'view.atdmt.com.77595.9661.302br.net',
+'view.atdmt.com.77596.9661.302br.net',
+'view.atdmt.com.77597.9661.302br.net',
+'view.atdmt.com.77598.9661.302br.net',
+'view.atdmt.com.77599.9661.302br.net',
+'view.atdmt.com.77600.9661.302br.net',
+'view.atdmt.com.77601.9661.302br.net',
+'view.atdmt.com.77602.9661.302br.net',
+'view.atdmt.com.77603.9661.302br.net',
+'view.atdmt.com.77604.9661.302br.net',
+'view.atdmt.com.77605.9661.302br.net',
+'view.atdmt.com.77606.9661.302br.net',
+'view.atdmt.com.77607.9661.302br.net',
+'view.atdmt.com.77608.9661.302br.net',
+'view.atdmt.com.77609.9661.302br.net',
+'view.atdmt.com.77610.9661.302br.net',
+'view.atdmt.com.77611.9661.302br.net',
+'view.atdmt.com.77612.9661.302br.net',
+'view.atdmt.com.77613.9661.302br.net',
+'view.atdmt.com.77614.9661.302br.net',
+'view.atdmt.com.77615.9661.302br.net',
+'view.atdmt.com.77616.9661.302br.net',
+'view.atdmt.com.77617.9661.302br.net',
+'view.atdmt.com.77618.9661.302br.net',
+'view.atdmt.com.77619.9661.302br.net',
+'view.atdmt.com.77620.9661.302br.net',
+'view.atdmt.com.77621.9661.302br.net',
+'view.atdmt.com.77622.9661.302br.net',
+'view.atdmt.com.77623.9661.302br.net',
+'view.atdmt.com.77624.9661.302br.net',
+'view.atdmt.com.77625.9661.302br.net',
+'view.atdmt.com.77626.9661.302br.net',
+'view.atdmt.com.77627.9661.302br.net',
+'view.atdmt.com.77629.9661.302br.net',
+'view.atdmt.com.77630.9661.302br.net',
+'view.atdmt.com.77631.9661.302br.net',
+'view.atdmt.com.77633.9661.302br.net',
+'view.atdmt.com.77635.9661.302br.net',
+'view.atdmt.com.77636.9661.302br.net',
+'view.atdmt.com.77637.9661.302br.net',
+'view.atdmt.com.78134.9597.302br.net',
+'view.atdmt.com.78135.9597.302br.net',
+'view.atdmt.com.78137.9670.302br.net',
+'view.atdmt.com.78139.9670.302br.net',
+'view.atdmt.com.78141.9670.302br.net',
+'view.atdmt.com.78143.9670.302br.net',
+'view.atdmt.com.78144.9670.302br.net',
+'view.atdmt.com.78145.9670.302br.net',
+'view.atdmt.com.78146.9670.302br.net',
+'view.atdmt.com.78147.9670.302br.net',
+'view.atdmt.com.78149.9670.302br.net',
+'view.atdmt.com.78150.9670.302br.net',
+'view.atdmt.com.78151.9670.302br.net',
+'view.atdmt.com.78152.9670.302br.net',
+'view.atdmt.com.78153.9670.302br.net',
+'view.atdmt.com.78154.9670.302br.net',
+'view.atdmt.com.78155.9670.302br.net',
+'view.atdmt.com.78156.9670.302br.net',
+'view.atdmt.com.78157.9670.302br.net',
+'view.atdmt.com.78158.9670.302br.net',
+'view.atdmt.com.78159.9670.302br.net',
+'view.atdmt.com.78160.9670.302br.net',
+'view.atdmt.com.78161.9670.302br.net',
+'view.atdmt.com.78162.9670.302br.net',
+'view.atdmt.com.78163.9670.302br.net',
+'view.atdmt.com.78202.9623.302br.net',
+'view.atdmt.com.78203.9623.302br.net',
+'view.atdmt.com.78204.9623.302br.net',
+'view.atdmt.com.78205.9623.302br.net',
+'view.atdmt.com.78206.9623.302br.net',
+'view.atdmt.com.78207.9623.302br.net',
+'view.atdmt.com.78527.9541.302br.net',
+'view.atdmt.com.78889.9623.302br.net',
+'view.atdmt.com.78890.9623.302br.net',
+'view.atdmt.com.78891.9623.302br.net',
+'view.atdmt.com.78892.9623.302br.net',
+'view.atdmt.com.78893.9623.302br.net',
+'view.atdmt.com.78894.9623.302br.net',
+'view.atdmt.com.79593.9546.302br.net',
+'view.atdmt.com.79594.9546.302br.net',
+'view.atdmt.com.79595.9546.302br.net',
+'view.atdmt.com.79596.9546.302br.net',
+'view.atdmt.com.79597.9546.302br.net',
+'view.atdmt.com.79598.9546.302br.net',
+'view.atdmt.com.79840.9489.302br.net',
+'view.atdmt.com.79841.9489.302br.net',
+'view.atdmt.com.79842.9489.302br.net',
+'view.atdmt.com.79843.9489.302br.net',
+'view.atdmt.com.79844.9489.302br.net',
+'view.atdmt.com.79845.9489.302br.net',
+'view.atdmt.com.79846.9489.302br.net',
+'view.atdmt.com.79847.9489.302br.net',
+'view.atdmt.com.79867.9491.302br.net',
+'view.atdmt.com.79869.9491.302br.net',
+'view.atdmt.com.79871.9491.302br.net',
+'view.atdmt.com.79873.9491.302br.net',
+'view.atdmt.com.79875.9491.302br.net',
+'view.atdmt.com.801.8000.302br.net',
+'view.atdmt.com.804.8000.302br.net',
+'view.atdmt.com.857.9002.302br.net',
+'view.atdmt.com.859.9002.302br.net',
+'view.atdmt.com.861.9002.302br.net',
+'view.atdmt.com.867.9002.302br.net',
+'view.atdmt.com.871.9002.302br.net',
+'view.atdmt.com.873.9002.302br.net',
+'view.atdmt.com.917.9004.302br.net',
+'view.atdmt.com.919.9004.302br.net',
+'view.atdmt.com.920.9004.302br.net',
+'view.atdmt.com.923.9004.302br.net',
+'view.atdmt.coom.70635.9528.302br.net',
+'view.atdmt.net',
+'view.atdmtcaya.2186.9023.302br.net',
+'view.autoscout24.de',
+'view.binlayer.com',
+'view.ilove.de',
+'view4cash.de',
+'viewbix.com',
+'viewhttp.atdmt.com.70777.9596.302br.net',
+'viewsecure.net',
+'viewstat.hotstat.nl',
+'vig.tynt.com',
+'vigapi.tynt.com',
+'viglink.com',
+'vignette.com',
+'vikingtrck.com',
+'villsacsma.download',
+'vimage.com',
+'vimages.videoprofessor.com',
+'vintacom.112.2o7.net',
+'vip.adstatic.com',
+'vipadshares.com',
+'viplogin.553.clicksurecpa.com',
+'vippay.c.duba.net',
+'vipplaza-co-id.b.appier.net',
+'virads.com',
+'virtual-person.com',
+'virtualnet.co.uk',
+'visit.dealspwn.com',
+'visit.digidip.net',
+'visit.geocities.jp',
+'visit.mobot.net',
+'visit.webhosting.yahoo.com',
+'visitor.benchmarkemail.com',
+'visitorbarscript.com',
+'visitorcontact.com',
+'visitorpath.com',
+'visitorprofiler.com',
+'visitors.sourcingmap.com',
+'visitorvoice.etracker.com',
+'visitweb.com',
+'visualdna-widgets.mirror.co.uk',
+'visuallyxvnxqhr.download',
+'visualnetworks.com',
+'visualrevenue.com',
+'vitacost.tt.omtrdc.net',
+'vitax.abc-sms.de',
+'vitrade02.webtrekk.net',
+'viziomothersday.brandmovers.net',
+'vizisense.komli.net',
+'vjnehfcprozymite.review',
+'vk.cblevt.com',
+'vladtv.us.intellitxt.com',
+'vlbalash.justclick.ru',
+'vlexokrako.com',
+'vlog.leadformix.com',
+'vlogic.ak-networks.com',
+'vmco.adk2.co',
+'vml-127.com',
+'vmp.boldchat.com',
+'vmss.boldchat.com',
+'vocalistgixybeoj.download',
+'vod-s.kinetonetwork.com',
+'vod.mobile-abc.com',
+'vod.mobvid.mobi',
+'vodafone.inq.com',
+'vogo-vogo.ru',
+'voluum.redirecting.site',
+'volvelle-ads-cdn.azureedge.net',
+'voodooparking.com',
+'vop.sundaysky.com',
+'voradu.com',
+'vorcu.go2cloud.org',
+'vorlon.ferretsoft.com',
+'vortex-sandbox.data.microsoft.com',
+'vortex-win.data.microsoft.com',
+'vortex.data.microsoft.com',
+'vortextraffic.com',
+'vowjnembargoing.review',
+'voyages-sncf.com.122.207.net',
+'vp-www.addthis.com',
+'vp2-www.addthis.com',
+'vpb0.moatads.com',
+'vpos.bnex.com',
+'vps.zeptolab.com',
+'vq91811.com',
+'vra.outbrain.com',
+'vrp.outbrain.com',
+'vrt-chidc2-only.outbrain.com',
+'vrt.outbrain.com',
+'vrts.doublepimp.com',
+'vs.dmtracker.com',
+'vs.target.com',
+'vs.webtrekk.net',
+'vsc.send.microad.jp',
+'vseprogroshi.justclick.ru',
+'vserv.bc.cdn.bitgravity.com',
+'vserv.mobi',
+'vsevjednom.cz',
+'vsii.spinbox.net',
+'vst.c.appier.net',
+'vstats.net',
+'vstrk.com',
+'vt.adition.com',
+'vtot.proxy.aol.com',
+'vtrack.larvtrk.com',
+'vtrack.wdavtrk.com',
+'vtracking.in.com',
+'vtrtl.de',
+'vu.moatads.com',
+'vu.veoxa.com',
+'vulcan.doublepimp.com',
+'vulgarizexemdqzmr.download',
+'vumeujlug.download',
+'vungle.com',
+'vviii.ru',
+'vw.masterstats.com',
+'vwr1.hitbox.com',
+'vygeirghpedaller.review',
+'vznetzme.ivwbox.de',
+'vznetzst.ivwbox.de',
+'vztd3.adition.com',
+'w.atdmt.com.1000.302br.net',
+'w.cm.ksmobile.com',
+'w.estat.com',
+'w.extreme-dm.com',
+'w.goprkcdn.com',
+'w.hypercomments.com',
+'w.mlv-cdn.com',
+'w.online-verlag-freiburg.de',
+'w.sharethis.com',
+'w.shoopadoo.com',
+'w.tr553.com',
+'w.uptolike.com',
+'w.usabilla.com',
+'w.zeroredirect.com',
+'w.zeroredirect1.com',
+'w.zeroredirect2.com',
+'w0.extreme-dm.com',
+'w00tpublishers.wootmedia.net',
+'w1.ax.xrea.com',
+'w1.extreme-dm.com',
+'w1.hitbox.com',
+'w1.luckyorange.com',
+'w1.mozzi.com',
+'w10.hitbox.com',
+'w100.hitbox.com',
+'w101.hitbox.com',
+'w102.hitbox.com',
+'w103.hitbox.com',
+'w104.hitbox.com',
+'w105.hitbox.com',
+'w106.hitbox.com',
+'w107.hitbox.com',
+'w108.hitbox.com',
+'w109.hitbox.com',
+'w11.hitbox.com',
+'w110.hitbox.com',
+'w111.hitbox.com',
+'w112.hitbox.com',
+'w113.hitbox.com',
+'w114.hitbox.com',
+'w115.hitbox.com',
+'w116.hitbox.com',
+'w117.hitbox.com',
+'w118.hitbox.com',
+'w119.hitbox.com',
+'w12.hitbox.com',
+'w120.hitbox.com',
+'w121.hitbox.com',
+'w122.hitbox.com',
+'w123.hitbox.com',
+'w124.hitbox.com',
+'w126.hitbox.com',
+'w128.hitbox.com',
+'w129.hitbox.com',
+'w13.hitbox.com',
+'w130.hitbox.com',
+'w131.hitbox.com',
+'w132.hitbox.com',
+'w133.hitbox.com',
+'w135.hitbox.com',
+'w136.hitbox.com',
+'w137.hitbox.com',
+'w138.hitbox.com',
+'w139.hitbox.com',
+'w14.hitbox.com',
+'w140.hitbox.com',
+'w141.hitbox.com',
+'w144.hitbox.com',
+'w147.hitbox.com',
+'w15.hitbox.com',
+'w153.hitbox.com',
+'w154.hitbox.com',
+'w155.hitbox.com',
+'w157.hitbox.com',
+'w159.hitbox.com',
+'w16.hitbox.com',
+'w161.hitbox.com',
+'w162.hitbox.com',
+'w167.hitbox.com',
+'w168.hitbox.com',
+'w17.hitbox.com',
+'w170.hitbox.com',
+'w175.hitbox.com',
+'w18.hitbox.com',
+'w19.hitbox.com',
+'w2-ver.adprofile.net',
+'w2.hitbox.com',
+'w20.hitbox.com',
+'w20.iit.guru',
+'w21.hitbox.com',
+'w22.hitbox.com',
+'w23.hitbox.com',
+'w24.hitbox.com',
+'w25.hitbox.com',
+'w26.hitbox.com',
+'w27.hitbox.com',
+'w28.hitbox.com',
+'w29.hitbox.com',
+'w2mobile.go2cloud.org',
+'w3.bitterstrawberry.com',
+'w3.hitbox.com',
+'w30.hitbox.com',
+'w31.hitbox.com',
+'w32.hitbox.com',
+'w33.hitbox.com',
+'w36.hitbox.com',
+'w3nation.com',
+'w4.hitbox.com',
+'w5.hitbox.com',
+'w6.bitterstrawberry.com',
+'w6.hitbox.com',
+'w7.hitbox.com',
+'w8.hitbox.com',
+'w88.go.com',
+'w88.m.espn.go.com',
+'w9.hitbox.com',
+'wa.and.co.uk',
+'wa.metro.co.uk',
+'wa.ui-portal.de',
+'wac.658e.edgecastcdn.net',
+'wac.a164.edgecastcdn.net',
+'wac.a164.taucdn.net',
+'wackoqczwjds.download',
+'wagerersivrvnemu.download',
+'wahoha.com',
+'waiads.com',
+'wakapita.com',
+'walkingsgzezhx.download',
+'wallstreet.2cnt.net',
+'wallstreetprep.go2cloud.org',
+'walmartcom.112.2o7.net',
+'walmartsavingscatcher.com',
+'wamfebdvsabotier.review',
+'wan.duba.net',
+'wap-click.com',
+'wap.advertising.com',
+'wap.chatwalk.com',
+'wap.co.il',
+'wapp2de.mobimaniac.com',
+'wapp4de.brickoffers.com',
+'wapplanet.org',
+'wapstart.ru',
+'warcry.us.intellitxt.com',
+'warentest01.webtrekk.net',
+'warmongersgyuszzudy.download',
+'warnerbros.112.207.net',
+'warnerbros.112.2o7.net',
+'warnerbrosads.112.2o7.net',
+'warp.ly',
+'warp.prnewswire.co.uk',
+'warp2search.us.intellitxt.com',
+'warsport.timesink.com',
+'washesqydoigavu.download',
+'watch.stream4know.com',
+'watchever.bild.de',
+'watchfree.flv.in',
+'watchlivestream.me.uk',
+'watson.live.com',
+'watson.microsoft.com',
+'watson.ppe.telemetry.microsoft.com',
+'watson.telemetry.microsoft.com',
+'waudeesestew.com',
+'wbf.go2cloud.org',
+'wblasti.go2cloud.org',
+'wct.link',
+'wctrack.go2cloud.org',
+'wd-edge.sharethis.com',
+'wd.sharethis.com',
+'wda.com',
+'wdata.ero-advertising.com',
+'wdc.mediation.nexage.com',
+'wdig.vo.llnwd.net',
+'wdm.map24.com',
+'wdxcyber.us.intellitxt.com',
+'weakentipjxv.download',
+'web-jp.ad-v.jp',
+'web-stat.com',
+'web-t.9gag.com',
+'web-track.telekom-dienste.de',
+'web.adblade.com',
+'web.adknowledge.com',
+'web.blogads.com',
+'web.mobpartner.com',
+'web.mxradon.com',
+'web.secmedia.de',
+'web.softonic-analytics.net',
+'web1.51.la',
+'web1.realtracker.com',
+'web1.voodoo.com',
+'web10.voodoo.com',
+'web1000.com',
+'web11.voodoo.com',
+'web12.voodoo.com',
+'web13.voodoo.com',
+'web14.voodoo.com',
+'web15.voodoo.com',
+'web16.voodoo.com',
+'web17.voodoo.com',
+'web18.voodoo.com',
+'web19.voodoo.com',
+'web2.deja.com',
+'web2.realtracker.com',
+'web2.voodoo.com',
+'web20.voodoo.com',
+'web21.voodoo.com',
+'web22.voodoo.com',
+'web23.voodoo.com',
+'web24.voodoo.com',
+'web25.voodoo.com',
+'web26.voodoo.com',
+'web27.voodoo.com',
+'web28.voodoo.com',
+'web29.voodoo.com',
+'web3.voodoo.com',
+'web30.voodoo.com',
+'web31.voodoo.com',
+'web32.voodoo.com',
+'web33.voodoo.com',
+'web34.voodoo.com',
+'web35.voodoo.com',
+'web36.voodoo.com',
+'web37.voodoo.com',
+'web38.voodoo.com',
+'web39.voodoo.com',
+'web4.realtracker.com',
+'web4.voodoo.com',
+'web40.voodoo.com',
+'web4friends.com',
+'web5.voodoo.com',
+'web6.voodoo.com',
+'web63.jumptap.com',
+'web64.jumptap.com',
+'web65.jumptap.com',
+'web7.voodoo.com',
+'web8.voodoo.com',
+'web9.voodoo.com',
+'webad1.adsoftware.com',
+'webads.co.nz',
+'webads.com',
+'webads.nl',
+'webaffiliate.covad.com',
+'webartsbrack.tt.omtrdc.net',
+'webaudit.hu',
+'webcare.byside.com',
+'webcontrolling.com',
+'webcounter.cc',
+'webcounter.co.za',
+'webcounter.com',
+'webcounter.cz',
+'webcounter.goweb.de',
+'webcounter.together.net',
+'webd.francite.com',
+'webd.home.news.cn',
+'webdiva3001.bravejournal.com',
+'webforensics.co.uk',
+'webglobaltraffic.info',
+'webgozar.com',
+'webgozar.ir',
+'webhit.snd.no',
+'webhitcounter.com',
+'webhits.de',
+'webindicator.siteheart.com',
+'webinline-usage.streamesh.net',
+'webinline.look4like.com',
+'webiq-cdn.appspot.com',
+'webiq-warp.appspot.com',
+'weblemon.pl',
+'webload101.hitbox.com',
+'weblog.blogads.com',
+'weblog.com.ua',
+'weblog.livesport.eu',
+'weblog.strawberrynet.com',
+'weblogger-dynamic-lb.playdom.com',
+'webmail.adsender.us',
+'webmail.leadbolt.com',
+'webmail.mobpartner.mobi',
+'webmail.performancerevenues.com',
+'webmail.yeahmobi.com',
+'webmaster.erotik.com',
+'webmasters.hugetraffic.com',
+'webmasters.nastydollars.com',
+'webmasters.tubealliance.com',
+'webmedia.co.il',
+'webmedia.pl',
+'webnooze.com',
+'webodu.com',
+'weborama.fr',
+'webpagescripts.net',
+'webperformance.it',
+'webpower.com',
+'webprovider.com',
+'webprowire.com',
+'webproworld.com',
+'webr.emv2.com',
+'websatpub.fth.net',
+'webservices.aptwords.net',
+'webservices.ecn5.com',
+'webservices.sub2tech.com',
+'webservices.websitepros.com',
+'webservis.gen.tr',
+'website-designs.com',
+'websitefinancing.com',
+'websitehome.co.uk',
+'websitepromoserver.com',
+'websitepromote.com',
+'websitesponsor.de',
+'websitetrafficreport.com',
+'webspace.webhoster.de',
+'webspectator.com',
+'websponsors.com',
+'webstars2000.com',
+'webstat.com',
+'webstat.kuwo.cn',
+'webstat.net',
+'webstat.no',
+'webstatistieken.xs4all.nl',
+'webstatistik.odav.de',
+'webstats.adspaces.ero-advertising.com',
+'webstats.com.br',
+'webstats.perfectworld.com',
+'webstats.sapo.pt',
+'webstats.seoinc.com',
+'webtools.homestead.com',
+'webtrac.bluecherry.com',
+'webtrace.exapaq.com',
+'webtrack-brickstreetconnect-bau-prd.hsbc.com.hk',
+'webtrack-brickstreetconnect-mkt-prd.hsbc.com.hk',
+'webtrack.jwgrant.co.uk',
+'webtracker.educationconnection.com',
+'webtrackerplus.com',
+'webtracking.touchclarity.com',
+'webtraffic.ttinet.com',
+'webtrafficllc.co',
+'webtraxx.de',
+'webtrekk.com',
+'webtrekk.de',
+'webtrekk.net',
+'webtrends.com',
+'webtrends.de',
+'webtrends.org',
+'webtrends.thisis.co.uk',
+'webtrendslive.com',
+'webtrening.justclick.ru',
+'webts.adac.de',
+'webuytraffic.com',
+'webxu.go2cloud.org',
+'weddings.searchwho.com',
+'wee.co.il',
+'weecia.7173.clicksurecpa.com',
+'weedoit.fr',
+'weeklyad.target.com',
+'weesh.co.uk',
+'weevermedia.go2affise.com',
+'wehasoffers.go2cloud.org',
+'welcome.openx.com',
+'welcomeworld.justclick.ru',
+'welkingmkscrmgc.download',
+'weltbild01.webtrekk.net',
+'weltbild02-de.webtrekk.net',
+'weltonline01.webtrekk.net',
+'wemfbox.ch',
+'wemftest0.2cnt.net',
+'wemftest1.2cnt.net',
+'wemftest2.2cnt.net',
+'wemftest3.2cnt.net',
+'wemftest4.2cnt.net',
+'wemfvtest.2cnt.net',
+'werbemittel.adshot.de',
+'werbung.mediaplex.com',
+'werbung.xfind.de',
+'wes.df.telemetry.microsoft.com',
+'wesell.co.il',
+'westeins.2cnt.net',
+'westernereoednyj.download',
+'westeros.go2cloud.org',
+'wetrack.it',
+'wfnetwork.go2cloud.org',
+'wfpscripts.webspectator.com',
+'wfs01.wapka.mobi',
+'whainteryield.jmp9.com',
+'whatifholdings.go2cloud.org',
+'whatinteryield.jmp9.com',
+'whatismyip.akamai.com',
+'whatrunswhere.go2cloud.org',
+'whatseek.com',
+'whenu.com',
+'whereuntomzrpo.download',
+'whickerxsxnz.download',
+'whinteryield.jmp9.com',
+'whirlerssrmbf.download',
+'whisk.com',
+'whispa.com',
+'whistleout.s3.amazonaws.com',
+'who.knows.com',
+'wholebodyresearch.go2cloud.org',
+'whoopalook.com',
+'whos.amung.us',
+'whoson.smcorp.com',
+'whosread.com',
+'whydowork.com',
+'whyfame.us.intellitxt.com',
+'wibiya-actions.conduit-data.com',
+'wibiya-june-new-log.conduit-data.com',
+'widget.apptap.com',
+'widget.breakingburner.com',
+'widget.cheki.com.ng',
+'widget.dihitt.com.br',
+'widget.embedarticle.com',
+'widget.foodieblogroll.com',
+'widget.getsatisfaction.com',
+'widget.hypercomments.com',
+'widget.imshopping.com',
+'widget.marktjagd.de',
+'widget.perfectmarket.com',
+'widget.sharecash.org',
+'widget.siteheart.com',
+'widget.stagram.com',
+'widget.supercounters.com',
+'widget.weibo.com',
+'widget.yavli.com',
+'widgetadvertising.biz',
+'widgetbucks.com',
+'widgetcf.adviceiq.com',
+'widgetcontent.net',
+'widgetdigital.info',
+'widgets-cdn.rpxnow.com',
+'widgets.amung.us',
+'widgets.cam-content.com',
+'widgets.comcontent.net',
+'widgets.digg.com',
+'widgets.digitalmediacommunications.com',
+'widgets.fccinteractive.com',
+'widgets.getglue.com',
+'widgets.goldankauf123.de',
+'widgets.kiosked.com',
+'widgets.markosweb.com',
+'widgets.mobilelocalnews.com',
+'widgets.mozo.com.au',
+'widgets.outbrain.com',
+'widgets.privateproperty.com.ng',
+'widgets.progrids.com',
+'widgets.sprinkletxt.com',
+'widgetssec.cam-content.com',
+'widgettool.net',
+'wiki.adition.com',
+'wiki.adspaces.ero-advertising.com',
+'wiki.ero-advertising.com',
+'wildrhino.com',
+'wiliestmbpgakdno.download',
+'willhab.oewabox.at',
+'win.bannersbucket.xyz',
+'win.openvn.com',
+'win7affiliates.com',
+'windgallsxsnxcqt.download',
+'window.nixnet.cz',
+'windowslive.tt.omtrdc.net',
+'winfaq.de.intellitxt.com',
+'wingatemedia.go2cloud.org',
+'wingoads.com',
+'wingowin.com',
+'winmpmain.112.2o7.net',
+'winneronline.com',
+'winteryield.jmp9.com',
+'wintotal.de.intellitxt.com',
+'wireless.ign.us.intellitxt.com',
+'wirelessforums.us.intellitxt.com',
+'wirelessidea.go2cloud.org',
+'wisemen.go2cloud.org',
+'wisewire.com',
+'wisti.adulte3g.com',
+'witbe.net',
+'wizard.bannerforge.com',
+'wizfitness.go2cloud.org',
+'wks.ero-advertising.com',
+'wlmfortunepartners.adsrv.eacdn.com',
+'wlwt01.opentext.com',
+'wm-space.youero.com',
+'wmadv.go2cloud.org',
+'wmedia.adk2x.com',
+'wmfqmxqwsurgeries.review',
+'wmp-forumde.digidip.net',
+'wms-eu.amazon-adsystem.com',
+'wms-fe.amazon-adsystem.com',
+'wms.assoc-amazon.com',
+'wms.assoc-amazon.de',
+'wmtrackinglink.com',
+'wmtrafficentry.com',
+'wn.pos.baidu.com',
+'wnpcdn.com',
+'wodizapt.com',
+'womansanga.justclick.ru',
+'womanwithinsweepstakes2013.brandmovers.net',
+'womensforum.us.intellitxt.com',
+'won.images.streamray.com',
+'wondrousvalue.com',
+'woopra.com',
+'wordwatch.go2cloud.org',
+'woredi.com',
+'workflowboard.com',
+'workingonline.com',
+'worksbest.freeservers.com',
+'world.eliteserverconnect.xyz',
+'worldbannerexchange.com',
+'worldprofitassociates.com',
+'worldwidesolution.go2cloud.org',
+'wouralistvdmttom.download',
+'wovxriqartworks.review',
+'wow.ero-advertising.com',
+'wowanalytics.co.uk',
+'wowtrk.go2cloud.org',
+'wp.hit.gemius.pl',
+'wpmimkheartfelt.review',
+'wpni.tt.omtrdc.net',
+'wptag.net',
+'wqdtzhdstabler.review',
+'wrackgdnkgwg.download',
+'wrb.pornme.com',
+'wrestling.searchwho.com',
+'wrt.mtr-4uk.com',
+'wrxviatrhzoists.review',
+'ws-eu.amazon-adsystem.com',
+'ws-na.amazon-adsystem.com',
+'ws.00zasdf.pw',
+'ws.abbp1.pw',
+'ws.amazon.com',
+'ws.plmokn.pw',
+'ws.routehero.com',
+'ws.sharethis.com',
+'ws.tapjoyads.com',
+'ws1.surf-town.net',
+'ws10.surf-town.net',
+'ws11.surf-town.net',
+'ws12.surf-town.net',
+'ws13.surf-town.net',
+'ws14.surf-town.net',
+'ws15.surf-town.net',
+'ws16.surf-town.net',
+'ws17.surf-town.net',
+'ws18.surf-town.net',
+'ws19.surf-town.net',
+'ws2.surf-town.net',
+'ws20.surf-town.net',
+'ws21.surf-town.net',
+'ws22.surf-town.net',
+'ws23.surf-town.net',
+'ws24.surf-town.net',
+'ws25.surf-town.net',
+'ws26.surf-town.net',
+'ws27.surf-town.net',
+'ws28.surf-town.net',
+'ws29.surf-town.net',
+'ws3.surf-town.net',
+'ws4.surf-town.net',
+'ws5.surf-town.net',
+'ws6.surf-town.net',
+'ws7.surf-town.net',
+'ws8.surf-town.net',
+'ws9.surf-town.net',
+'wsb1.surf-town.net',
+'wsb2.surf-town.net',
+'wsb3.surf-town.net',
+'wsb4.surf-town.net',
+'wsb5.surf-town.net',
+'wsb6.surf-town.net',
+'wsb7.surf-town.net',
+'wsb8.surf-town.net',
+'wsb9.surf-town.net',
+'wsc.ehost-services.com',
+'wsc1.surf-town.net',
+'wsc1.webspectator.com',
+'wsg.abbp1.pw',
+'wsi1.surf-town.net',
+'wsknjzjwlyrically.review',
+'wsod.com',
+'wsp1.surf-town.net',
+'wsq.umeng.com',
+'wsstatic.govmetric.com',
+'wstat.wibiya.com',
+'wsw.ero-advertising.com',
+'wsw1.surf-town.net',
+'wsw2.surf-town.net',
+'wsw3.surf-town.net',
+'wsw4.surf-town.net',
+'wsw5.surf-town.net',
+'wsw6.surf-town.net',
+'wswb1.surf-town.net',
+'wswb3.surf-town.net',
+'wt.o.nytimes.com',
+'wt.socialsex.biz',
+'wt01.webtrekk.net',
+'wta.ero-advertising.com',
+'wtlive.com',
+'wtpn.twenga.co.uk',
+'wtpn.twenga.de',
+'wundercounter.com',
+'wutlar.fortumo.com',
+'wv.inner-active.mobi',
+'wvwr1.hitbox.com',
+'ww.cj.com',
+'ww.tr553.com',
+'ww1.contaprime.com',
+'ww1.hitbox.com',
+'ww1.searchhelper.com',
+'ww1.smartadserver.com',
+'ww1082.smartadserver.com',
+'ww129.smartadserver.com',
+'ww13.smartadserver.com',
+'ww14.smartadserver.com',
+'ww2.ero-advertising.com',
+'ww2.hitbox.com',
+'ww2.instafinder.com',
+'ww2.lostwebtracker.com',
+'ww234.smartadserver.com',
+'ww251.bz-berlin.de',
+'ww251.smartadserver.com',
+'ww264.smartadserver.com',
+'ww276.smartadserver.com',
+'ww3.hitbox.com',
+'ww302.smartadserver.com',
+'ww362.smartadserver.com',
+'ww370.smartadserver.com',
+'ww38.smartadserver.com',
+'ww381.smartadserver.com',
+'ww392.smartadserver.com',
+'ww50.smartadserver.com',
+'ww55.smartadserver.com',
+'ww57.smartadserver.com',
+'ww651.smartadserver.com',
+'ww684.smartadserver.com',
+'ww690.smartadserver.com',
+'ww84.smartadserver.com',
+'ww856.smartadserver.com',
+'ww881.smartadserver.com',
+'wwa.dateformore.de',
+'wwa.ero-advertising.com',
+'wwa.hitbox.com',
+'wwa.only-dates.de',
+'wwbanners2.ero-advertising.com',
+'wwc.hitbox.com',
+'wwd.hitbox.com',
+'wweconsumer.112.2o7.net',
+'wwm.adspirit.de',
+'wws.ero-advertising.com',
+'wwv4ez0n.com',
+'www-banner.chat.ru',
+'www-beta.statcounter.com',
+'www-obdesign-com-tw.b.appier.net',
+'www-shard02-a.justclick.ru',
+'www-shard04-cef.justclick.ru',
+'www-shard05-ghi.justclick.ru',
+'www-shard07-jm.justclick.ru',
+'www-shard09-s.justclick.ru',
+'www-shard11-vwxyz.justclick.ru',
+'www.005.free-counter.co.uk',
+'www.006.free-counter.co.uk',
+'www.007.free-counter.co.uk',
+'www.008.free-counter.co.uk',
+'www.0hna.com',
+'www.100webads.com',
+'www.123count.com',
+'www.123counter.superstats.com',
+'www.123spill.no',
+'www.123stat.com',
+'www.123webmarketing.com',
+'www.1414.de',
+'www.160tracker.com',
+'www.17k.originalsafteyredir.com',
+'www.1ad.de',
+'www.1clickdownloader.com',
+'www.1empiredirect.com',
+'www.1worldmarket.com',
+'www.2.livejasmin.com',
+'www.247media.com',
+'www.247media.net',
+'www.247realmedia.com',
+'www.2ad.de',
+'www.2gtstrk.com',
+'www.2o7.net',
+'www.302br.net',
+'www.360adshost.net',
+'www.49535.com',
+'www.4qsurvey.com',
+'www.4ur.click',
+'www.51yes.com',
+'www.526633146.redpop.pro',
+'www.600z.com',
+'www.718unlimited.com',
+'www.863c4c0c521.se',
+'www.a-ads.com',
+'www.a.ero-advertising.com',
+'www.a.volvelle.tech',
+'www.a4dtracker.com',
+'www.a6ba.com',
+'www.a9.com',
+'www.aaddzz.com',
+'www.abacidcqfrjju.download',
+'www.abcjmp.com',
+'www.abe.com.au',
+'www.abidinglynsygto.download',
+'www.abmr.net',
+'www.abmr2.net',
+'www.accipiter.com',
+'www.acclaimimages.com',
+'www.accurately-locate.com',
+'www.acecounter.com',
+'www.aceratezhoytlh.download',
+'www.achmedia.com',
+'www.acint.net',
+'www.acinusqiwjwzl.download',
+'www.acotrk.com',
+'www.acquinityinteractive.com',
+'www.acronymbxruv.download',
+'www.acs3.com',
+'www.actionteaser.ru',
+'www.activatesubhrle.download',
+'www.actonsoftware.com',
+'www.actvtrack.com',
+'www.acxiom.com',
+'www.acxtrk.com',
+'www.ad-agent.com',
+'www.ad-board.com',
+'www.ad-guru.com',
+'www.ad-host.com',
+'www.ad-lister.co.uk',
+'www.ad-listings.com',
+'www.ad-lite.com',
+'www.ad-maker.net',
+'www.ad-media.org',
+'www.ad-search.com',
+'www.ad-solutions.com',
+'www.ad-space.net',
+'www.ad-staff.com',
+'www.ad-style.com',
+'www.ad-visor.com',
+'www.ad-x.co.uk',
+'www.ad.admitad.com',
+'www.ad.doubleclick.net.60532.9279.302br.net',
+'www.ad.doubleclick.net.68390.9544.302br.net',
+'www.ad.doubleclick.net.73285.9423.302br.net',
+'www.ad.doubleclick.net.76530.9544.302br.net',
+'www.ad.infoseek.com',
+'www.ad.preferences.net',
+'www.ad2games.com',
+'www.ad4games.com',
+'www.adadvisor.net',
+'www.adaos-ads.net',
+'www.adap.tv',
+'www.adatom.com',
+'www.adbit.co',
+'www.adblade.com',
+'www.adbrands.co.il',
+'www.adbutler.com',
+'www.adbuyer.com',
+'www.adcash.com',
+'www.adcdnx.com',
+'www.adcenter.net',
+'www.adcentriconline.com',
+'www.adchoices.com.vn',
+'www.adclickxpress.com',
+'www.adclix.com',
+'www.adclub.net',
+'www.adcron.com',
+'www.addinto.com',
+'www.addme.com',
+'www.addressingbxmqasxix.download',
+'www.addthis.com',
+'www.adexc.net',
+'www.adexce.net',
+'www.adexchangeperformance.com',
+'www.adexcite.com',
+'www.adexm.com',
+'www.adexten.com',
+'www.adfest.com',
+'www.adfluence.net',
+'www.adfoc.us',
+'www.adforce.ru',
+'www.adforgames.com',
+'www.adfornepal.com',
+'www.adfusion.com',
+'www.adgatemedia.com',
+'www.adgear.com',
+'www.adgebra.co.in',
+'www.adgebra.in',
+'www.adgroups.com',
+'www.adgroups.net',
+'www.adhall.com',
+'www.adhitprofits.com',
+'www.adhood.com',
+'www.adhubz.com',
+'www.adify.com',
+'www.adimages.beeb.com',
+'www.adinterax.com',
+'www.adipics.com',
+'www.adition.com',
+'www.adjug.com',
+'www.adjuggler.com',
+'www.adlead.com',
+'www.adlock.in',
+'www.admailtiser.com',
+'www.adman.gr',
+'www.admantic.ru',
+'www.admarketplace.net',
+'www.admaya.in',
+'www.admaym.com',
+'www.admedo.com',
+'www.admeld.com',
+'www.admitad.com',
+'www.admyapp.net',
+'www.adnetworkperformance.com',
+'www.adnxs1.com',
+'www.adocean.pl',
+'www.adopshost1.com',
+'www.adotsolution.com',
+'www.adprudence.com',
+'www.adreadytractions.com',
+'www.adrevmedia.com',
+'www.adroz.com',
+'www.adrtrklnk.com',
+'www.ads.bitservices.no',
+'www.ads.ero-advertising.com',
+'www.ads1.advance.de',
+'www.ads180.com',
+'www.ads2.advance.de',
+'www.ads3.advance.de',
+'www.ads4.advance.de',
+'www.ads4links.com',
+'www.ads80.com',
+'www.adsalvo.com',
+'www.adsbookie.com',
+'www.adscendmedia.com',
+'www.adscoops.com',
+'www.adsdelight.com',
+'www.adsender.us',
+'www.adsensecamp.com',
+'www.adserver.brandilitynetwork.de',
+'www.adserver.cz.cc',
+'www.adserverplus.com',
+'www.adserverxxl.de',
+'www.adserving.pro',
+'www.adservone.com',
+'www.adshiftmedia.com',
+'www.adshooter.com',
+'www.adshot.de',
+'www.adskeeper.co.uk',
+'www.adsmarketgroup.com',
+'www.adsmeans.com',
+'www.adsniper.ru',
+'www.adsoogle.com',
+'www.adspaces.ero-advertising.com',
+'www.adsphinx.com',
+'www.adspics.com',
+'www.adspinner.com',
+'www.adsplay.in',
+'www.adspserving.com',
+'www.adsuperstar.com',
+'www.adsview.com',
+'www.adtech.com',
+'www.adtegrity.com',
+'www.adternal.com',
+'www.adthrive.com',
+'www.adti.me',
+'www.adtilt.com',
+'www.adtoll.com',
+'www.adtrack1.pl',
+'www.adtredo.com',
+'www.adtwirl.com',
+'www.aducash.com',
+'www.adult-banner-ads.com',
+'www.adultbannerexchange.de',
+'www.adultblogtoplist.com',
+'www.adv-adserver.com',
+'www.adv.co.il',
+'www.adv679854.ru',
+'www.advancedad.com',
+'www.advancets.org',
+'www.advconversion.com',
+'www.adventori.com',
+'www.adventuresinnetmarketing.com',
+'www.advenueplatform.com',
+'www.advernet.co.il',
+'www.adversalservers.com',
+'www.adverticus.de',
+'www.advertisegame.com',
+'www.advertiserjob.com',
+'www.advertising-software.com',
+'www.advertising-world.com',
+'www.advertising.com',
+'www.advertserve.com',
+'www.advertstream.com',
+'www.advertzer.com',
+'www.advido.com',
+'www.adview.cn',
+'www.adviews-sponsor.de',
+'www.advm10.com',
+'www.advnet.xyz',
+'www.advolution.de',
+'www.advombat.ru',
+'www.advserver.xyz',
+'www.adworkmedia.com',
+'www.adworkmedia.net',
+'www.adworks.com',
+'www.adx1.com',
+'www.adzly.com',
+'www.adzones.com',
+'www.aecidiamldalomt.download',
+'www.affbeat.com',
+'www.affbuzzads.com',
+'www.affiliate.net',
+'www.affiliatefuel.com',
+'www.affiliatefuture.co.uk',
+'www.affiliateguide.com',
+'www.affiliateharvest.com',
+'www.affiliatematch.com',
+'www.affiliatemoneytree.com',
+'www.affiliatequality.com',
+'www.affiliateshop.com',
+'www.affiliateshowcase.com',
+'www.affiliatetracking.com',
+'www.affiliatetracking.net',
+'www.affiliatewindow.com',
+'www.affiliatezone.com',
+'www.affirmedzwvnkh.download',
+'www.affise.com',
+'www.affsharkoffer.com',
+'www.afftrack.com',
+'www.afftracker.info',
+'www.afftrackinglinks.com',
+'www.afftrackr.com',
+'www.affyield.com',
+'www.afgr2.com',
+'www.afiliati.ro',
+'www.afsanalytics.com',
+'www.afterdownload.com',
+'www.afterview.ru',
+'www.agmtrk.com',
+'www.agnstaging.com',
+'www.aideslihks.download',
+'www.airpush.com',
+'www.ajjtgubginkgoes.review',
+'www.ajwantjtkrn.download',
+'www.akqhhiqteunuchise.review',
+'www.alienationxjbqjennn.download',
+'www.alijaextort.review',
+'www.alladvantage.com',
+'www.alliancesqcqet.download',
+'www.allosponsor.com',
+'www.alloydigital.com',
+'www.allsolutionsnetwork.com',
+'www.alltereg0.ru',
+'www.alltraff.ru',
+'www.almonriesdocerjqcc.download',
+'www.alphagirlz.mobi',
+'www.amanitaswtzshxp.download',
+'www.amazingcounters.com',
+'www.amazinglyjvrucwx.download',
+'www.amclicks.com',
+'www.amidmostewbvqcji.download',
+'www.amusive.com',
+'www.amylaseyaxvh.download',
+'www.analytics.theminersunion.com',
+'www.anapaestsgekcc.download',
+'www.anatomiseddybglcuku.download',
+'www.androtify.com',
+'www.annuncio.com.do',
+'www.anomicpcwgrml.download',
+'www.anonymousads.com',
+'www.answermedia.com',
+'www.anurousxaeazghbz.download',
+'www.any.gs',
+'www.anymanga.com',
+'www.apmebf.com',
+'www.apodemjyoqhwc.download',
+'www.apophygeneafuk.download',
+'www.app-authority.com',
+'www.app-ratings.com',
+'www.apparitorvlipqjiz.download',
+'www.appetencyelain.com',
+'www.appflood.com',
+'www.appfoxes.com',
+'www.appia.com',
+'www.appliedsemantics.com',
+'www.applifier.com',
+'www.applift.com',
+'www.apposersdamxq.download',
+'www.appraisingemfxg.download',
+'www.apps-infor.com',
+'www.apptornado.com',
+'www.apptv.com',
+'www.appyet.com',
+'www.apqixzxxgoverstayed.review',
+'www.aptrk.com',
+'www.aptrk5.com',
+'www.apture.com',
+'www.apxadtracking.net',
+'www.areasnap.com',
+'www.armstrongsystems.bizland.com',
+'www.arrestspkqtg.download',
+'www.artificecvtogvnt.download',
+'www.ashiestsdznwfbsd.download',
+'www.aspartamerpzyyzyn.download',
+'www.ass4all.com',
+'www.assoc-amazon.com',
+'www.assoc-amazon.de',
+'www.associeta.com',
+'www.associmg.com',
+'www.assonantsvqqxpr.download',
+'www.atdmt.com',
+'www.atemda.com',
+'www.athanorjjvdyu.download',
+'www.atmospherebfrufumzi.download',
+'www.atropismlsuttxa.download',
+'www.auctionads.com',
+'www.auctionarysrnbyfiqd.download',
+'www.audienceinsights.net',
+'www.audiopal.com',
+'www.aufxbejwdnkn.download',
+'www.aulosyhydzitxb.download',
+'www.aureolasfdoqu.download',
+'www.auto-ping.com',
+'www.automaticsystem.com',
+'www.automrxowsdxm.download',
+'www.autopilothq.com',
+'www.avatraffic.com',
+'www.avazudsp.net',
+'www.aviderlutcinvv.download',
+'www.aweber.com',
+'www.axesiiyuqtfa.download',
+'www.axf8.net',
+'www.axpraqxjdikes.review',
+'www.axtrhasenegas.review',
+'www.ayrqdtroglodyte.review',
+'www.ayx.soundharborredirect.com',
+'www.azads.net',
+'www.azalead.com',
+'www.b1060no8673u5l58vi150ofyri.hop.clickbank.net',
+'www.baccajxzumht.download',
+'www.bacillemiaujtpcij.download',
+'www.baciotti.com',
+'www.backtype.com',
+'www.badoink.com',
+'www.bafflesitfjtxan.download',
+'www.bahuvrihisjcdqhbfv.download',
+'www.bakler.net',
+'www.baleron.com',
+'www.bango.co.uk',
+'www.bango.com',
+'www.bango.net',
+'www.bangtuoc.vn',
+'www.banner-rotation.com',
+'www.bannerbank.ru',
+'www.bannercenter.net',
+'www.bannerforge.com',
+'www.bannerpro.tk',
+'www.banners.ero-advertising.com',
+'www.banners2.ero-advertising.com',
+'www.banners2.eroadvertising.com',
+'www.bar.hit-counter.udub.com',
+'www.bardzomedia.com',
+'www.bargainingayzgdp.download',
+'www.barnyardszjvrvndj.download',
+'www.barrelfulstwhxuuum.download',
+'www.barruletoleehtcz.download',
+'www.bastardlystydflko.download',
+'www.bastionedqpaugac.download',
+'www.bathyliticlkjwh.download',
+'www.bazingandroid.com',
+'www.bcast.pw',
+'www.bcsrciccspermatic.review',
+'www.bdex.com',
+'www.beadngmke.download',
+'www.beanstockmedia.com',
+'www.becontext.com',
+'www.bee-ads.com',
+'www.bekissedxpyno.download',
+'www.beliesqhmsin.download',
+'www.belstat.be',
+'www.belstat.fr',
+'www.belstat.nl',
+'www.benchbrands.com',
+'www.benderswaojb.download',
+'www.bespatehwxslkoz.download',
+'www.bestdealconnector.com',
+'www.bestfwdservice.com',
+'www.bestwebnutfunblack.biz',
+'www.besuchercounter.de',
+'www.bettermail.ca',
+'www.bettingmarket.com',
+'www.bettraf.com',
+'www.beyourownaffiliate.com',
+'www.bfiqlohtombic.review',
+'www.bfpildlmcolatitude.review',
+'www.bigad.com.au',
+'www.bigamypuabg.download',
+'www.bigfatbaby.com',
+'www.biglinkext.xyz',
+'www.bilbowtunxjujc.download',
+'www.bill-info.com',
+'www.bimm.in',
+'www.bingsclspe.download',
+'www.bit.do',
+'www.bitcoinadvertisers.com',
+'www.bitterstrawberry.com',
+'www.bitvisitor.com',
+'www.bizzclick.com',
+'www.bkrtx.com',
+'www.blacklightimages.com',
+'www.blamads.com',
+'www.blankrefer.com',
+'www.blazedlvlwzwt.download',
+'www.blkget6.com',
+'www.blog-hits.com',
+'www.blogads.com',
+'www.blueheart.org',
+'www.blueseek.com',
+'www.bluesq.com',
+'www.bluetrackmedia.com',
+'www.blumi.to',
+'www.bmetrack.com',
+'www.bmkolkvhunotifies.review',
+'www.bnbaz.eb2a.com',
+'www.bnex.com',
+'www.bnhtml.com',
+'www.boaaabsdcsubtends.review',
+'www.boards2go.com',
+'www.bogeymanpbbgzoi.download',
+'www.boldcenter.com',
+'www.boldchat.com',
+'www.bongacash.com',
+'www.bookcorps.com',
+'www.boomingsbzboqfg.download',
+'www.boomottkr.download',
+'www.bopsgoxon.download',
+'www.borageytjly.download',
+'www.borwgskshrinks.review',
+'www.bounceexchange.com',
+'www.bourgeonujprvxf.download',
+'www.bpath.com',
+'www.bqukvgnash.review',
+'www.braincash.com',
+'www.brashnessgujqtmt.download',
+'www.bratwurstsktrllgfj.download',
+'www.bravenetmedianetwork.com',
+'www.breeksboikac.download',
+'www.bricklehtezjtjfi.download',
+'www.brightadnetwork.com',
+'www.brightshare.com',
+'www.brokertraffic.com',
+'www.browser-statistik.de',
+'www.bsitm3.com',
+'www.btdirectnav.com',
+'www.btnativedirect.com',
+'www.btnativenav.com',
+'www.btprmnav.com',
+'www.btvkojstaenioid.review',
+'www.bullseye-network.com',
+'www.bullseye-network.net',
+'www.bungeysswkhiug.download',
+'www.bunnyaqsuze.download',
+'www.burbledchxtg.download',
+'www.burrowmkoylvrnd.download',
+'www.burstnet.com',
+'www.burweednxakod.download',
+'www.buttcandy.com',
+'www.buyhitscheap.com',
+'www.buytraf.ru',
+'www.buzzadnetwork.com',
+'www.bvgszzfifing.review',
+'www.bwin90.com',
+'www.bwlwtdevilings.review',
+'www.bwzqltlcfprimacies.review',
+'www.bzpibgazalternant.review',
+'www.c-on-text.com',
+'www.c2path.com',
+'www.c3onlinemarketing.com',
+'www.c5k.site',
+'www.caartoonnetwork.com',
+'www.cabernetdzzafeak.download',
+'www.cabgdhscnubbier.review',
+'www.cafarducqhonk.download',
+'www.cagilycgkwt.download',
+'www.calfxvpqle.download',
+'www.cam-traffic.com',
+'www.camisekwqhbehs.download',
+'www.campaignmonitor.com',
+'www.campaigntracking01.com',
+'www.candlingbploxcq.download',
+'www.cantatricekrwutrlj.download',
+'www.cantedmxcndjhm.download',
+'www.canvas-advert.ru',
+'www.capsizalsoxdxke.download',
+'www.carambo.la',
+'www.carhopyewiqzlmz.download',
+'www.carmunity.de',
+'www.cartonetwork.com',
+'www.cartoonnrtwork.com',
+'www.casalemedia.com',
+'www.casalparis.cat',
+'www.cash-duck.com',
+'www.cash4files.com',
+'www.cash4webmaster.de',
+'www.cashassociate.com',
+'www.cashcount.com',
+'www.cashdorado.de',
+'www.cashforsurveys.com',
+'www.cashforsurveys.net',
+'www.cashfromhome.com',
+'www.cashlayer.com',
+'www.cashmylinks.com',
+'www.catalogizeagvztfrmt.download',
+'www.catheterpokfwbwp.download',
+'www.catoonetwork.com',
+'www.cavalcadesvmrkjv.download',
+'www.cbeckads.com',
+'www.cbgoto.com',
+'www.cbpassiveincome.com',
+'www.cbsmarket.com',
+'www.cdlqzpenearer.review',
+'www.celebrity-image.com',
+'www.certified-email.com',
+'www.cetrk.com',
+'www.cfifsfsbsower.review',
+'www.cgzudintercom.review',
+'www.chainmychonga.com',
+'www.chalkpitqqjpwis.download',
+'www.chango.com',
+'www.channeltraffic.net',
+'www.chartboost.com',
+'www.chayaoyaui.download',
+'www.checkm8.com',
+'www.chillinessfjnvbh.download',
+'www.chippingswbhhaxf.download',
+'www.chokoladsrv.net',
+'www.chronicleddxsilskp.download',
+'www.chutneysrkcmkwrqb.download',
+'www.ciliolateefgntk.download',
+'www.cistycsoyceif.download',
+'www.cityads.com',
+'www.cityads.com.br',
+'www.cityads.ru',
+'www.cityadspix.com',
+'www.cityredirect.com',
+'www.cityviplink.com',
+'www.civicscience.com',
+'www.cj.com',
+'www.cknsoyunwrought.review',
+'www.clarinetsfulrjwphb.download',
+'www.claspedhjkyehhf.download',
+'www.classroomchvpagg.download',
+'www.clck.ru',
+'www.cldsecure.info',
+'www.clear-reports.com',
+'www.clearspring.com',
+'www.clearwebstats.com',
+'www.click-ice.com',
+'www.click2site.co',
+'www.clickadscounter.com',
+'www.clickansave.net',
+'www.clickauditor.net',
+'www.clickchecker.co.uk',
+'www.clickdensity.com',
+'www.clickice.com',
+'www.clickon.co.il',
+'www.clickriver.com',
+'www.clickshield.net',
+'www.clicksor.com',
+'www.clicksor.net',
+'www.clicksrvr.co',
+'www.clickstotrack.com',
+'www.clicksurecpa.com',
+'www.clicksyndicatetracking.com',
+'www.clickterra.net',
+'www.clicktracksolutions.com',
+'www.clicktraffix.com',
+'www.clicktrough.com',
+'www.clickv.com',
+'www.clickwinks.com',
+'www.clickxchange.com',
+'www.clicz.com',
+'www.cliximages.com',
+'www.clixsense.com',
+'www.clk.im',
+'www.clkdeals.com',
+'www.clkerr.com',
+'www.clkmg.com',
+'www.clkmon.com',
+'www.clkmr.com',
+'www.clkrev.com',
+'www.clksite.com',
+'www.clktag.com',
+'www.clottingsuoxiz.download',
+'www.cloudixconnection.com',
+'www.cms2.net',
+'www.cnt.my',
+'www.cnzz.com',
+'www.codilladtqjizvrh.download',
+'www.cogtree.com',
+'www.coheredqdsurfq.download',
+'www.coiffedvsyitd.download',
+'www.coinurl.com',
+'www.coinvisitor.com',
+'www.collegerqdieq.download',
+'www.collidingsgmwsx.download',
+'www.colligatepygpdqk.download',
+'www.com-wkejf32ljd23409system.net',
+'www.comagic.ru',
+'www.comfm.com',
+'www.commercedjbppce.download',
+'www.commissionmonster.com',
+'www.commonssearch.com',
+'www.companiedhhplrdpp.download',
+'www.compete.com',
+'www.competeinc.com',
+'www.comscore.com',
+'www.comunedeicittadini.it',
+'www.concealedffvqfx.download',
+'www.concinnousaepwnh.download',
+'www.condonenawphf.download',
+'www.connectlinking1.com',
+'www.connectlinking10.com',
+'www.connectlinking12.com',
+'www.connectlinking2.com',
+'www.connectlinking3.com',
+'www.connectlinking4.com',
+'www.connectlinking5.com',
+'www.connectlinking6.com',
+'www.connectlinking7.com',
+'www.connectlinking8.com',
+'www.connectlinking9.com',
+'www.connexionsecure.com',
+'www.connextra.com',
+'www.connotenrrvlxq.download',
+'www.consonancetkumk.download',
+'www.consumesldpmue.download',
+'www.contador-de-visitas.com',
+'www.contendersuudvsxwq.download',
+'www.content-ad.com',
+'www.contentlockingnetworks.com',
+'www.contextuads.com',
+'www.contextweb.com',
+'www.control.123banners.com',
+'www.conversionruler.com',
+'www.copesetticxobdnn.download',
+'www.coreg-feed.fr',
+'www.coremetrics.com',
+'www.cornhuskerypyvjzplr.download',
+'www.correctiongnarfj.download',
+'www.cortoonnetwork.com',
+'www.cossiesnkycsr.download',
+'www.cotylebijnutawn.download',
+'www.count.im',
+'www.count24.de',
+'www.counter-gratis.com',
+'www.counter-kostenlos.net',
+'www.counter.bloke.com',
+'www.counter.superstats.com',
+'www.counter1.sextracker.be',
+'www.counter10.sextracker.be',
+'www.counter11.sextracker.be',
+'www.counter12.sextracker.be',
+'www.counter13.sextracker.be',
+'www.counter14.sextracker.be',
+'www.counter15.sextracker.be',
+'www.counter16.sextracker.be',
+'www.counter160.com',
+'www.counter2.sextracker.be',
+'www.counter3.sextracker.be',
+'www.counter4.sextracker.be',
+'www.counter5.sextracker.be',
+'www.counter6.sextracker.be',
+'www.counter7.sextracker.be',
+'www.counter8.sextracker.be',
+'www.counter9.sextracker.be',
+'www.counterguide.com',
+'www.counters4u.com',
+'www.counting4free.com',
+'www.countomat.com',
+'www.countonline3.de',
+'www.countz.com',
+'www.coverletsnmqnylq.download',
+'www.covetkqoex.download',
+'www.coxds.com',
+'www.cpa.ly',
+'www.cpadna1.com',
+'www.cpadoc.com',
+'www.cpagrip.com',
+'www.cpapointer.com',
+'www.cpatrac.com',
+'www.cpatrackr.com',
+'www.cpayard.com',
+'www.cpd8.net',
+'www.cpm-plus.com',
+'www.cpm.biz',
+'www.cpm10.com',
+'www.cpmaffiliation.com',
+'www.cpmfun.com',
+'www.cpmland.com',
+'www.cpmleader.com',
+'www.cpmtips.com',
+'www.cpmtown.com',
+'www.cpolixyndenisles.review',
+'www.cpv2tracking.com',
+'www.cpxcenter.com',
+'www.cpxinteractive.com',
+'www.cqcounter.com',
+'www.crabbierfnffe.download',
+'www.createsend.com',
+'www.creative-mobile.com',
+'www.creoads.com',
+'www.cringersredtdw.download',
+'www.crittercism.com',
+'www.croondezztg.download',
+'www.crossbeamstnmjmmh.download',
+'www.crowdgather.com',
+'www.crowdscience.com',
+'www.crummockskubhke.download',
+'www.crunchroll.com',
+'www.crushads.com',
+'www.crwdcntrl.net',
+'www.cstrk.net',
+'www.cubismfdzqnurt.download',
+'www.cuccu.me',
+'www.cullenderzsqemhqfz.download',
+'www.culturaltpnxpr.download',
+'www.cur.lv',
+'www.curbstonexxteskqxv.download',
+'www.customads.net',
+'www.cutterbuck.com',
+'www.cvbgjnunslain.review',
+'www.cwahi.net',
+'www.cyberwavemedia.com',
+'www.cycleuniverseupdate.com',
+'www.cyclothymewlheoh.download',
+'www.cyonix.to',
+'www.cypcxeqocolluvies.review',
+'www.d1.c6.b3.a0.top.list.ru',
+'www.d16.net',
+'www.daily-traffic.com',
+'www.dairyingsmorbjo.download',
+'www.dampnesscoczbh.download',
+'www.data-ero-advertising.com',
+'www.data-eroadvertising.com',
+'www.daylogs.com',
+'www.dazeurbht.download',
+'www.dcvnupudgiest.review',
+'www.dcw.1592878.com',
+'www.ddefvibhjwoolfat.review',
+'www.dealcent.com',
+'www.dealsfor.me',
+'www.debenturessqpwls.download',
+'www.debsfunpages.com',
+'www.deepervbjacffg.download',
+'www.deerberrynveztw.download',
+'www.default-homepage-network.com',
+'www.defeatismbmakiplm.download',
+'www.degivuladles.review',
+'www.deignsgcngub.download',
+'www.delishows.com',
+'www.deloton.com',
+'www.delta-search.com',
+'www.demandbase.com',
+'www.demdex.net',
+'www.demotionstjjrntd.download',
+'www.dentaliumseeldbz.download',
+'www.dermadoctoraffiliates.com',
+'www.desalinateorixnpf.download',
+'www.desistancetslsdgppv.download',
+'www.desmoidqqzopi.download',
+'www.deucodialytic.review',
+'www.dfccgatkeoverworks.review',
+'www.dh956.com',
+'www.dianomi.com',
+'www.dictyqijwr.download',
+'www.dicynodonttglahbvl.download',
+'www.did-it.com',
+'www.didit.com',
+'www.digitalngo.com',
+'www.digits.com',
+'www.dihitt.com',
+'www.dimorphicbwwjmwvh.download',
+'www.dinclinx.com',
+'www.dingecraitos.download',
+'www.diplozoonhswtvx.download',
+'www.directadvert.ru',
+'www.directbrand.com',
+'www.directtrack.com',
+'www.dirtnaprecs.com',
+'www.discloserwdojtmjb.download',
+'www.discoverexactly.com',
+'www.disgustingsjnhmuv.download',
+'www.disjoiningjfdxyogp.download',
+'www.dismalitydbjmfaux.download',
+'www.displacedijnnd.download',
+'www.distortiveecynxpidy.download',
+'www.dltags.com',
+'www.dmtracker.com',
+'www.dnps.com',
+'www.dntx.com',
+'www.doctortrusted.org',
+'www.dodderssbsczsaao.download',
+'www.dodkinlsautvfo.download',
+'www.dohillright.com',
+'www.doldrumspijyzkdx.download',
+'www.doll.home.ro',
+'www.domainsponsor.com',
+'www.domanialtmiqjsrc.download',
+'www.donkeymails.com',
+'www.dorsiflexzobyojlh.download',
+'www.doubleclick.com',
+'www.doubleclick.de',
+'www.doubleclick.ne.jp',
+'www.doubleclick.net',
+'www.downbursteefxriuvb.download',
+'www.downloadcounter.de',
+'www.dprtb.com',
+'www.drabbersgpauijt.download',
+'www.dragonballzhomeland.com',
+'www.drivotracker.com',
+'www.droguevnmkkti.download',
+'www.drtserver.com',
+'www.dsct1.com',
+'www.dsmmadvantage.com',
+'www.dsnr.net',
+'www.dsnrmg.com',
+'www.dsosvbpuhw.download',
+'www.dsply.com',
+'www.dtrck.xyz',
+'www.duba.net',
+'www.dumbfoundrurjldk.download',
+'www.dumedia.ru',
+'www.duramenswaxsjhmqt.download',
+'www.dwin2.com',
+'www.e-tracker.de',
+'www.e-trends.com',
+'www.e-zeeinternet.com',
+'www.eadexchange.com',
+'www.eads.com',
+'www.easilyask.com',
+'www.easilytrack.com',
+'www.easycounter.com',
+'www.easyhitcounters.com',
+'www.easyhits4u.com',
+'www.eatthis.com',
+'www.ebtmarketing.com',
+'www.eclkmpbn.com',
+'www.eclkmpsa.com',
+'www.ecnxsufmoshing.review',
+'www.economizerfmtwfqxv.download',
+'www.ecpmrocks.com',
+'www.ectropionqybhnovh.download',
+'www.edge.quantserve.com',
+'www.edomz.com',
+'www.eeczfihelicopter.review',
+'www.effeminatejfghoxdji.download',
+'www.eightfoldlogic.com',
+'www.ekingkrmxzfpml.download',
+'www.elded.eu',
+'www.electorelyjs.download',
+'www.elflockskmewxdzsq.download',
+'www.elitemarketing.net',
+'www.elitepartners.ru',
+'www.eloqua.com',
+'www.elpais.es',
+'www.eltrafiko.com',
+'www.email-marketing.net',
+'www.email666.com',
+'www.emailaccount.com',
+'www.emailmarketingleads.com',
+'www.emailserving.com',
+'www.emarketers.com',
+'www.embarkingsztwot.download',
+'www.embloomedobjqwpc.download',
+'www.emjcd.com',
+'www.empathizewjrclcsh.download',
+'www.employeestnmsy.download',
+'www.emptinesslzajbffo.download',
+'www.emsvr.com',
+'www.encomiumsenttlzhwt.download',
+'www.enforcertiuvhklj.download',
+'www.englobingoopmzqu.download',
+'www.enlacedpwcuphe.download',
+'www.enliven.com',
+'www.enscl.com',
+'www.enzjptkr.com',
+'www.enzxpkist.review',
+'www.epicgameads.com',
+'www.epitaphistnyemzvxw.download',
+'www.epotjriebeckite.review',
+'www.eqlhpcyzarosolios.review',
+'www.equitymarketingsolutions.com',
+'www.eratrf.com',
+'www.ercva.com',
+'www.ero-adverising.com.ero-advertising.com',
+'www.ero-advertising.co.uk',
+'www.ero-advertising.com',
+'www.ero-advertising.de',
+'www.ero-advertising.org',
+'www.eroadvertising.com',
+'www.eroadvertising.info',
+'www.eroadvertising.nl',
+'www.eroanalysis.com',
+'www.escalatenetwork.com',
+'www.espousershcota.download',
+'www.estat.com',
+'www.et-code.ru',
+'www.etahub.com',
+'www.ethn.io',
+'www.etracker.com',
+'www.etracker.de',
+'www.eucainemkjwgw.download',
+'www.eulogiumalezquc.download',
+'www.euroclick.com',
+'www.eurocounter.com',
+'www.euros4click.de',
+'www.eventi.co.il',
+'www.everestjs.net',
+'www.everstring.com',
+'www.everyscape.com',
+'www.everythinghsrpple.download',
+'www.ewordofmouth.com',
+'www.exactadvertising.com',
+'www.exactinstall.com',
+'www.exacttarget.com',
+'www.excelqjmtypxbd.download',
+'www.exchange-it.com',
+'www.exchangead.com',
+'www.exchangebanner.com',
+'www.exclaimsmwdgsle.download',
+'www.exct.net',
+'www.exelator.com',
+'www.exfgumodulated.review',
+'www.exit-ad.de',
+'www.exitdevil.com',
+'www.exitingihrjdmytt.download',
+'www.exoclick.com',
+'www.exodusesnkkvycngt.download',
+'www.exogamichkstnksb.download',
+'www.expandsearchanswers.com',
+'www.expansilehsnpjlpb.download',
+'www.expert-offers.com',
+'www.exporterfpkvxr.download',
+'www.extolmentstsxocupq.download',
+'www.extreme-dm.com',
+'www.extremetracking.com',
+'www.extzbxocracknels.review',
+'www.eyeblaster.com',
+'www.eyeglassesmlldb.download',
+'www.ez-poll.superstats.com',
+'www.ez-polls.superstats.com',
+'www.ezdirectory.com',
+'www.ezpoll.superstats.com',
+'www.ezpolls.superstats.com',
+'www.f8350e7c1.se',
+'www.fablingsmmidmlm.download',
+'www.faldagehvvbwm.download',
+'www.fangcffsne.download',
+'www.faradsfmbrdiejz.download',
+'www.fast-route.com',
+'www.fastadvert.com',
+'www.fastcashathome.homestead.com',
+'www.fastclick.net',
+'www.fasteasytraffic.com',
+'www.fastlinkfinder.com',
+'www.fastonlinefinder.com',
+'www.favoritismkwaqmz.download',
+'www.fcvjhuzdcached.review',
+'www.featousvzgzfinst.download',
+'www.feedblitz.com',
+'www.feedjit.com',
+'www.fegariesupzxx.download',
+'www.felicityofxmgzq.download',
+'www.felliesgrlzafjb.download',
+'www.ferdy.org',
+'www.festeryfjejya.download',
+'www.festologyqueudknaa.download',
+'www.festoonedkyskjtmxv.download',
+'www.fhserve.com',
+'www.fideismmbertleo.download',
+'www.fiesta-game.com',
+'www.filecm.net',
+'www.finalizehmnzdo.download',
+'www.findalternate.com',
+'www.findlisted.com',
+'www.finduses.com',
+'www.finickingzepkzyw.download',
+'www.firecash.org',
+'www.firecpa.com',
+'www.firetrck.com',
+'www.firmingqubvlnepw.download',
+'www.firstload.com',
+'www.firstlook.com',
+'www.firstsnfmlmlohq.download',
+'www.fixin.de',
+'www.fkref.com',
+'www.flagads.net',
+'www.flagstickidiambxee.download',
+'www.flash-counter.com',
+'www.flashvortex.com',
+'www.flensingiyflh.download',
+'www.fleshlight.com',
+'www.flexoffers.com',
+'www.flixfacts.co.uk',
+'www.floctwuupgrowing.review',
+'www.flowgo.com',
+'www.flurry.com',
+'www.flvmoviesdownloader.com',
+'www.flycast.com',
+'www.flyinads.com',
+'www.fmpub.net',
+'www.fncnet1.com',
+'www.fodderingcuyrwzrwq.download',
+'www.folksierkfxqlpc.download',
+'www.fomentingbuutbsdi.download',
+'www.forefeetwsjgg.download',
+'www.forelook.com',
+'www.foreseeresults.com',
+'www.fossilisedboxbkshj.download',
+'www.fossilisesgcjrfazlr.download',
+'www.foxarmedia.com',
+'www.foxgloveslyukq.download',
+'www.foy4a.trackvoluum.com',
+'www.fpcplugs.com',
+'www.fpctraffic.com',
+'www.fraisenyvno.download',
+'www.frdupsdittays.review',
+'www.freakingdwobhfh.download',
+'www.freddyman.com',
+'www.free-banners.com',
+'www.freeadposting.com',
+'www.freecamdollars.com',
+'www.freecountersnow.com',
+'www.freehomepages.com',
+'www.freelogs.com',
+'www.freeonescams.com',
+'www.freeresultsguide.com',
+'www.freerotator.com',
+'www.freestats.com',
+'www.freeviral.com',
+'www.freewha.com',
+'www.fremescentptwvzl.download',
+'www.fricasseeidjcd.download',
+'www.friendlyduck.com',
+'www.frizzingaqrpioyby.download',
+'www.frontingfjwpsvis.download',
+'www.frontletsvuesv.download',
+'www.frontwardsxizrhchs.download',
+'www.fsvxdwaggeries.review',
+'www.fucktubenetwork.com',
+'www.fullqurandownload.com',
+'www.fun-hits.de',
+'www.fun-town.com',
+'www.funklicks.com',
+'www.funniesslvqb.download',
+'www.funny-postcards10.home.ro',
+'www.funnygreetings.com',
+'www.funstun.com',
+'www.fusespot.com',
+'www.futurecard.com',
+'www.fwdservice.com',
+'www.fxnvsyupprovender.review',
+'www.fxstyle.net',
+'www.gabia.com',
+'www.gallsrpvzalfr.download',
+'www.game-advertising-online.com',
+'www.gameadexchange.com',
+'www.gamecity.net',
+'www.gameleads.ru',
+'www.gamescpc.com',
+'www.gamingblast.com',
+'www.ganoinihrjk.download',
+'www.garnishersqcltox.download',
+'www.garrigueatcuw.download',
+'www.gatewaytracker.com',
+'www.gaxsumshicksa.review',
+'www.gbotvisit.com',
+'www.gcumuobqjbullfight.review',
+'www.geegawmpuvidd.download',
+'www.gelidlycupaq.download',
+'www.gentleygupqmdpm.download',
+'www.geoplugin.net',
+'www.geovisites.com',
+'www.get-answers-fast.com',
+'www.get-information.com',
+'www.getdirect.ru',
+'www.getfreebl.com',
+'www.getmetrical.com',
+'www.getmycell.com',
+'www.gigletcirjy.download',
+'www.gimmickedofpkjfxln.download',
+'www.gipigbzfortes.review',
+'www.girdinguyqfqwehf.download',
+'www.girlsofvs.com',
+'www.girthingbeypvmxb.download',
+'www.gkugzxfmjargonised.review',
+'www.glauconitexwgsr.download',
+'www.glb.livejasmin.com',
+'www.glffogrmnpareses.review',
+'www.global-adsrv.com',
+'www.globirank.com',
+'www.glomsflablwiv.download',
+'www.glugjbygh.download',
+'www.gmkxougopsonin.review',
+'www.gmtracker.com',
+'www.go.by',
+'www.go2web20.net',
+'www.gobbetsdjgjnyc.download',
+'www.goblemam.com',
+'www.gogousenet.com',
+'www.golfcountryhomes.com',
+'www.gooddata.com',
+'www.goodsavingtips.com',
+'www.goodtraffic.net',
+'www.google-analytics.com',
+'www.google.com.1.302br.net',
+'www.googleadservices.com',
+'www.googletagmanager.com',
+'www.googletagservices.com',
+'www.gooool.com',
+'www.gopuralverslakf.download',
+'www.goreal.at',
+'www.gospycash.com',
+'www.gostats.com',
+'www.gostats.de',
+'www.gostats.ir',
+'www.gostats.pl',
+'www.gostats.ro',
+'www.gostats.ru',
+'www.gostats.vn',
+'www.gotlaughs.com',
+'www.goviralnetwork.com',
+'www.goviralnetwork.net',
+'www.gpkjxgsginfallible.review',
+'www.gprapps.com',
+'www.gqfysspiracles.review',
+'www.gqsrirsleazes.review',
+'www.grabanapptrk.com',
+'www.gramashgbbjqbzy.download',
+'www.graptolitezcmxrfe.download',
+'www.gravitateszwcxvb.download',
+'www.greatcarrates.com',
+'www.gregoryvjvbd.download',
+'www.gridironjhkdbypz.download',
+'www.gripfile.net',
+'www.grosskjlkwccna.download',
+'www.grouchiestopszo.download',
+'www.group-mail.com',
+'www.grousingkvjtblhj.download',
+'www.gtedtnebrises.review',
+'www.guestbook.superstats.com',
+'www.gugaswrjegxix.download',
+'www.guid.org',
+'www.guidagedhgperv.download',
+'www.gunnedagcsg.download',
+'www.hab3n.trackvoluum.com',
+'www.habilatoryphyjf.download',
+'www.hadecpjvwytpy.download',
+'www.handworkedwguqhhqpj.download',
+'www.handyseek.com',
+'www.harassedlyayeigwq.download',
+'www.hasoffers.com',
+'www.hastrk1.com',
+'www.hastrk2.com',
+'www.hastrk3.com',
+'www.hatchmentstnddqlfba.download',
+'www.hatelive.site',
+'www.hatertoupfrcz.download',
+'www.hawkbitsirbzmvsf.download',
+'www.health.searchwho.com',
+'www.heeziewljxpyk.download',
+'www.heiringlxsna.download',
+'www.heliometernxwpu.download',
+'www.helmsstikizg.download',
+'www.henbaneypgvxgt.download',
+'www.herbalaffiliateprogram.com',
+'www.herbisttjojeo.download',
+'www.herborizeabruj.download',
+'www.herdsgtqbsn.download',
+'www.hgmjnsnddaydream.review',
+'www.hgzlpbfluent.review',
+'www.hicpm5.com',
+'www.hide.io',
+'www.highcharts.com',
+'www.highcpms.com',
+'www.highspeedtesting.com',
+'www.hijackedzdupdb.download',
+'www.hipersushiads.com',
+'www.hipmarket.com',
+'www.histriodqxmtbztd.download',
+'www.hit-counter.info',
+'www.hit-parade.com',
+'www.hitbox.com',
+'www.hitcounter.ru',
+'www.hitcpm.com',
+'www.hitfarm.com',
+'www.hitmeter.ru',
+'www.hitslink.com',
+'www.hitsniffer.com',
+'www.hitwebcounter.com',
+'www.hitwise.co.uk',
+'www.hitx.net',
+'www.hjplocoheavier.review',
+'www.hkjhwrhogwash.review',
+'www.hlserve.com',
+'www.holystonesobrzuasu.download',
+'www.home.ro',
+'www.homebusinessgo.com',
+'www.homecareersearch.com',
+'www.homedepoy.com',
+'www.homedepto.com',
+'www.homeearthlink.net',
+'www.homeeq.com',
+'www.homeloan.tr.cx',
+'www.homepage.ru',
+'www.homepageware.com',
+'www.homesidelendinginc.com',
+'www.homestad.com',
+'www.homevisions.com',
+'www.homonymyhnovvlnkz.download',
+'www.honourwkuowjaj.download',
+'www.hoofprintsjvogd.download',
+'www.hooqy.com',
+'www.hoptopboy.com',
+'www.hopurl.org',
+'www.hordesvavxlom.download',
+'www.host-tracker.com',
+'www.host.clicksor.com',
+'www.hotheadedwrkqqsm.download',
+'www.hotjar.com',
+'www.hotlog.ru',
+'www.hpqvvpfloatage.review',
+'www.hpwtrpizecrowned.review',
+'www.hrfdpodunwarlike.review',
+'www.hrukxtcqmosaics.review',
+'www.hsbolewhzbaffs.review',
+'www.hsykmnzsdogskins.review',
+'www.htimepyvhbondstone.review',
+'www.html-email-marketing.com',
+'www.html5zombo.com',
+'www.htmlcounter.com',
+'www.htmonster.com',
+'www.hubtraffic.com',
+'www.humanclick.com',
+'www.humdrumsqflyl.download',
+'www.hummumsutjuwal.download',
+'www.humourqyizg.download',
+'www.hurricanedigitalmedia.com',
+'www.hvaevqkprtumorous.review',
+'www.hyalinizeslskzyp.download',
+'www.hybridview.co.kr',
+'www.hyperbanner.net',
+'www.hyperlinksecure.com',
+'www.hyphenszypdywo.download',
+'www.hypocistksmukkiy.download',
+'www.hzvtbypisdeejays.review',
+'www.hzwurfzsmouches.review',
+'www.iads.com.np',
+'www.iagsgypeavy.review',
+'www.iaspromotes.com',
+'www.ib.adnxs.com',
+'www.iballs.nl',
+'www.ibario.com',
+'www.ibroadband.com',
+'www.ibrtpbaroscope.review',
+'www.ibsys.com',
+'www.ichabodbvtxqb.download',
+'www.iconifyingkjlzag.download',
+'www.icontact.com',
+'www.icount.com',
+'www.icptrack.com',
+'www.ideaworks.com',
+'www.idioticxellutv.download',
+'www.idirect.com',
+'www.idritracker.com',
+'www.ientry.com',
+'www.ientrymail.com',
+'www.ientrynetwork.net',
+'www.iergzsqungod.review',
+'www.ierofsymphylous.review',
+'www.ifjcpbcontessas.review',
+'www.ifsmarketing.com',
+'www.igain-mail.co.uk',
+'www.ignitad.com',
+'www.igogoshare.com',
+'www.iicdn.com',
+'www.ijxaxlacapacitors.review',
+'www.ilgm-deals.com',
+'www.illicitlyyyzmvq.download',
+'www.ilovecookies.co',
+'www.imads.ero-advertising.com',
+'www.image-map.com',
+'www.imageers.com',
+'www.imagenes.de',
+'www.imagine-inc.com',
+'www.imbof.com',
+'www.imgclck.com',
+'www.imiclk.com',
+'www.impluviawtqydlbbi.download',
+'www.imptestrm.com',
+'www.imtrck.com',
+'www.inbeingsfmjfup.download',
+'www.inboxpounds.co.uk',
+'www.inboxpounds.com',
+'www.incentaclick.com',
+'www.indicative.com',
+'www.indoorspkacwv.download',
+'www.inebriatesqmwpaz.download',
+'www.inedo.com',
+'www.ineedhits.com',
+'www.inetlog.com',
+'www.inetlog.ru',
+'www.ingluvialqsbjgerp.download',
+'www.inhumatesiwqkd.download',
+'www.inkinesspjjpli.download',
+'www.inmobi.com',
+'www.innn.site',
+'www.inspectlet.com',
+'www.inspectorclick.com',
+'www.instantdownloaderpro.com',
+'www.instanterzxjgftfip.download',
+'www.instinctiveads.com',
+'www.intangiblegrnokiq.download',
+'www.integrate.com',
+'www.inteletrack.com',
+'www.intelli-direct.com',
+'www.intelli-tracker.com',
+'www.intellicampaign.com',
+'www.intellicontact.com',
+'www.intelligentkid.com',
+'www.intellitxt.com',
+'www.interludenbaabaim.download',
+'www.internetmedia.com.au',
+'www.internetworks.org',
+'www.interunionieyyq.download',
+'www.interupload.com',
+'www.intext.de',
+'www.intextdirect.com',
+'www.intimistsoqitkh.download',
+'www.intouchmediagroup.com',
+'www.intredo.com',
+'www.intredomedia.com',
+'www.invariancewnbfwwro.download',
+'www.inviterdczpqji.download',
+'www.ioam.de',
+'www.iperceptions.com',
+'www.ipfingerprint.com',
+'www.ipfovdeqdenaries.review',
+'www.ipnwombonefish.review',
+'www.ipqualityscore.com',
+'www.ipstat.com',
+'www.ireel.com',
+'www.irepdeliver.com',
+'www.irqnaphizzes.review',
+'www.isobaresumrzh.download',
+'www.isobarevdwtaol.download',
+'www.isoclinicvzlcj.download',
+'www.ispeakvideo.com',
+'www.istats.nl',
+'www.istrack.com',
+'www.itrckr.com',
+'www.ituwnqfhoimpresari.review',
+'www.iusfpiadefunction.review',
+'www.ivoriessrjwoctu.download',
+'www.ivwbox.de',
+'www.iwmhtnexbthwartly.review',
+'www.ixzvhxrithripses.review',
+'www.iycmeworlds.review',
+'www.iyfnzgb.com',
+'www.izrtyzjvarememberer.review',
+'www.jadina-counter.de',
+'www.jafvcwmrfespousing.review',
+'www.jaggiestlydumv.download',
+'www.jaildxlhdnvo.download',
+'www.jalbum.net',
+'www.jampanimxygdwkim.download',
+'www.javdict.disqus.com',
+'www.jayde.com',
+'www.jcount.com',
+'www.jd-mail.co.uk',
+'www.jdoqocy.com',
+'www.jebtrack.com',
+'www.jennetsywjfwy.download',
+'www.jetpad.com',
+'www.jfqsgonveglandules.review',
+'www.jirkinetsaxjjdegyp.download',
+'www.jjinviczbountiful.review',
+'www.jkmiepojqatmolyse.review',
+'www.jlyse.net',
+'www.jmp9.com',
+'www.jmpgo.com',
+'www.jmplink.com',
+'www.jmqqopacmilligram.review',
+'www.jmyyyjhnzpeaching.review',
+'www.joelnhfuabrim.review',
+'www.jollingymkovt.download',
+'www.jowarinzqmiak.download',
+'www.jptybcinnamonic.review',
+'www.jscount.com',
+'www.jscripts.org',
+'www.jspy.ru',
+'www.jtqhcgndrawlers.review',
+'www.jubilationqeeau.download',
+'www.juiceadv.com',
+'www.juispsvgtproselytes.review',
+'www.jumpinessrhbijjq.download',
+'www.jumptap.com',
+'www.junbi-tracker.com',
+'www.jupuxbmavoguish.review',
+'www.jurymastgewtdwcw.download',
+'www.justclick.ru',
+'www.justsaywow.com',
+'www.jvz5.com',
+'www.jvz7.com',
+'www.jvz8.com',
+'www.jvz9.com',
+'www.jvzoo.com',
+'www.jwljj.adsb4track.com',
+'www.jwtznloxywadsets.review',
+'www.jxksprlogging.review',
+'www.jxydvhslucifer.review',
+'www.jxzxqaauplaybooks.review',
+'www.jzdqksgennets.review',
+'www.kampongsnylsyoa.download',
+'www.kamsinseuexlw.download',
+'www.karakulszmlyttq.download',
+'www.kcsbaujgynaecia.review',
+'www.kdfveporphyry.review',
+'www.kdqsasmacker.review',
+'www.kdukvh.com',
+'www.kecksesualnfr.download',
+'www.kecwxhifheyestalks.review',
+'www.keen.io',
+'www.kelshpjmntongues.review',
+'www.kerningrsxwpoc.download',
+'www.kewlrank.com',
+'www.keyoptimize.com',
+'www.keywordblocks.com',
+'www.keywordmax.com',
+'www.kfngqabkeinfallibly.review',
+'www.khutbahleqzaer.download',
+'www.kilobytebokrfnbvp.download',
+'www.kilopog.com',
+'www.kilovoltsqychaubi.download',
+'www.kinocash.com',
+'www.kinostok.tv',
+'www.kissmetrics.com',
+'www.kissmyads.com',
+'www.kizash.com',
+'www.kkhopguserenate.review',
+'www.kliktrek.com',
+'www.kljcwpqarevealers.review',
+'www.klybugvdsbugwort.review',
+'www.kneecappedgmlviym.download',
+'www.knnomeuaustringer.review',
+'www.komoona.com',
+'www.kontera.com',
+'www.koocash.com',
+'www.kosoft-ads.com',
+'www.koxrqrpnroundlet.review',
+'www.kpdxchvxydeepest.review',
+'www.kpicentral.com',
+'www.kqqfxfortlets.review',
+'www.kqzyfj.com',
+'www.kronerrtyqgofq.download',
+'www.krullerkzouw.download',
+'www.kryptoads.com',
+'www.kryptobanners.com',
+'www.kscrudiscepted.review',
+'www.ksqoglpledgeable.review',
+'www.kstmnfmdaphilologue.review',
+'www.ktxtkvolitient.review',
+'www.lacodeworks.com',
+'www.lacquerersdfnkejwkz.download',
+'www.lacqueyiiwkr.download',
+'www.laminarianxvdcl.download',
+'www.lanternedhreszxvw.download',
+'www.lapoo.net',
+'www.latest-460050.ebeda.info',
+'www.latest-461069.dochyedu.info',
+'www.launch1.co',
+'www.launchbit.com',
+'www.layer-ad.org',
+'www.lddthjbooboos.review',
+'www.leadbolt.com',
+'www.leadclick.com',
+'www.leadformix.com',
+'www.leadhound.com',
+'www.leadlander.com',
+'www.leadtrackgo.com',
+'www.leastsuuhyh.download',
+'www.lecternxqlgvbl.download',
+'www.leeringsmxcgbra.download',
+'www.legatoeweyxn.download',
+'www.legendsqevxiaxbh.download',
+'www.legitfreecounters.com',
+'www.lewderkltrw.download',
+'www.lexiconsahzdcver.download',
+'www.lfiofptxserows.review',
+'www.lfstmedia.com',
+'www.liczniki.org',
+'www.ligatus.com',
+'www.lightedpages.com',
+'www.lijit.com',
+'www.likebtn.com',
+'www.limmaocijq.download',
+'www.link.ac',
+'www.link4link.com',
+'www.linkads.de',
+'www.linkbucksmedia.com',
+'www.linkconnector.com',
+'www.linkcounter.com',
+'www.linkexchange.nl',
+'www.linkexchange.org',
+'www.linkreferral.com',
+'www.links2u.com',
+'www.linkscout.com',
+'www.linksmile.com',
+'www.linksredirect.com',
+'www.linkstation.de',
+'www.linktarget.com',
+'www.linkwithin.com',
+'www.linkwords.net',
+'www.linkworld.ws',
+'www.linkxchanger.com',
+'www.linkxchanger.info',
+'www.linkybank.com',
+'www.linkz.com',
+'www.liqwid.net',
+'www.listbot.com',
+'www.listenloop.com',
+'www.litiumo.com',
+'www.live3s.me',
+'www.liveadexchanger.com',
+'www.livecounter.dk',
+'www.liveinternet.ru',
+'www.livejasmin.com',
+'www.livesearchnow.com',
+'www.livestat.com',
+'www.ljteas.com',
+'www.lkqd.net',
+'www.lllezpalebucks.review',
+'www.lloogg.com',
+'www.llyebbsouthpaws.review',
+'www.lmlttrack.com',
+'www.lnkgo.com',
+'www.lnkgt.com',
+'www.lnkxfer8.com',
+'www.lnx.lu',
+'www.lobstersctero.download',
+'www.lognormal.net',
+'www.lokhlp.com',
+'www.lolfun.com',
+'www.lookest.win',
+'www.looksmart.com',
+'www.looksmartclicks.com',
+'www.lostwebtracker.com',
+'www.lotame.com',
+'www.lowndestdhlpcpo.download',
+'www.loxtk.com',
+'www.lrrtslskippers.review',
+'www.lslfrhpqarechating.review',
+'www.luminate.com',
+'www.lummeslwusp.download',
+'www.m.loading-content.net',
+'www.maarentkeaels.download',
+'www.macaddictads.snv.futurenet.nl',
+'www.madblast.com',
+'www.madisonlogic.com',
+'www.madmax53.stellar.cpa.clicksure.com',
+'www.madmimi.com',
+'www.madnet.ru',
+'www.magentanews.com',
+'www.magicads.nl',
+'www.magicmail.co.nz',
+'www.mahuaswcspi.download',
+'www.mail-to-a-friend.com',
+'www.mailchimp.com',
+'www.mailmenrkgzquz.download',
+'www.mailtrack.me',
+'www.mainstreamadvertising.com',
+'www.majoringmcaiynfa.download',
+'www.makersfile.com',
+'www.mandolinefchscpmft.download',
+'www.manuelu.com',
+'www.maple-team.com',
+'www.mapmyuser.com',
+'www.marketbiz.com',
+'www.marketgid.com',
+'www.marketing-internet.com',
+'www.marketing.com.ar',
+'www.marketingsecrets.com',
+'www.marketingtips.com',
+'www.marketingwithpostcards.com',
+'www.marketingx.com',
+'www.marketo.com',
+'www.marketsurveys.com',
+'www.massetersspaeu.download',
+'www.mastercount.net',
+'www.matchbin.com',
+'www.matchetbpvgzvo.download',
+'www.mathtag.com',
+'www.matomy.com',
+'www.matomygroup.com',
+'www.matomymail.com',
+'www.matomymarket.com',
+'www.matomymax.com',
+'www.matomymedia.com',
+'www.matomymediagroup.com',
+'www.matomymobile.com',
+'www.maxbounty.com',
+'www.maxtrust.ru',
+'www.mb01.com',
+'www.mb103.com',
+'www.mb104.com',
+'www.mb89-live.com',
+'www.mbixuxsfeoutfields.review',
+'www.mbotvisit.com',
+'www.mckygschalalled.review',
+'www.mcpvkhoven.review',
+'www.mcssl.com',
+'www.media-clic.com',
+'www.media-code.info',
+'www.media.net',
+'www.media970.com',
+'www.mediabreakaway.com',
+'www.mediaforce.com',
+'www.medialytics.com',
+'www.mediamath.com',
+'www.mediamind.com',
+'www.mediaplex.com',
+'www.mediaroi.go2cloud.org',
+'www.mediasheva.com',
+'www.mediatisedevkrumfkc.download',
+'www.mediawhirl.net',
+'www.meethotties.mobi',
+'www.megacounter.de',
+'www.megapopads.com',
+'www.melanitesmuawsxxw.download',
+'www.mellowads.com',
+'www.meltwater.com',
+'www.meltwaternews.com',
+'www.memopumpkin.com',
+'www.menato.ru',
+'www.meshbean.com',
+'www.metacount.com',
+'www.metalliselwgtj.download',
+'www.metopesjdsrau.download',
+'www.metricskey.net',
+'www.mgcash.com',
+'www.mgcashgate.com',
+'www.mgid.com',
+'www.mgnjmsxycosta.review',
+'www.midwayjfpvbvwuy.download',
+'www.migpay.com',
+'www.migrantsyyorzkm.download',
+'www.miildoos.ru',
+'www.milesaway.oracle.cpa.clicksure.com',
+'www.milliremsfpscyd.download',
+'www.mim.io',
+'www.minimusespdjglnek.download',
+'www.mirrorad.com',
+'www.misbfskterrellas.review',
+'www.missuitzyvtjtq.download',
+'www.mixpanel.com',
+'www.mjgxsidsixes.review',
+'www.mkonyvjesnorkelled.review',
+'www.ml8m.com',
+'www.mlinktracker.com',
+'www.mmftpf.com',
+'www.mmnetwork.mobi',
+'www.mmo123.co',
+'www.mmotraffic.com',
+'www.mmtracking.com',
+'www.mmtrkmc.com',
+'www.mnetads.com',
+'www.mnetads.net',
+'www.moatads.com',
+'www.mobfox.com',
+'www.mobi-mobi.info',
+'www.mobiadtrk.com',
+'www.mobile-abc.com',
+'www.mobile.adnxs.com',
+'www.mobileandinternetadvertising.com',
+'www.mobilelandings.com',
+'www.mobisystems.com',
+'www.mobitracker.info',
+'www.mobpartner.com',
+'www.mobpartner.mobi',
+'www.mobvid.mobi',
+'www.moceanmobile.com',
+'www.modelatos.com',
+'www.mojiva.com',
+'www.mokono.com',
+'www.mondainefpjwdelvr.download',
+'www.monetisevideo.com',
+'www.money4exit.de',
+'www.moneymakercdn.com',
+'www.mongoosemetrics.com',
+'www.monteyxnmhx.download',
+'www.moonmarketing.com',
+'www.mousselinehkhnrrnlq.download',
+'www.movieads.ero-advertising.com',
+'www.moviepulp.eu',
+'www.movise.site',
+'www.mowburnsexrzvcbvq.download',
+'www.mp-success.com',
+'www.mpression.net',
+'www.mprptrk.com',
+'www.mracqblihahas.review',
+'www.mrhcyagrouchily.review',
+'www.mridangastrtki.download',
+'www.msnhome.com',
+'www.msnhomepage.com',
+'www.msnnetwork.com',
+'www.multicounter.de',
+'www.muntussejbnk.download',
+'www.muricatedhslitves.download',
+'www.mvakbserenates.review',
+'www.my-dirty-hobby.com',
+'www.my-etracker.com',
+'www.my-linker.com',
+'www.myad.no',
+'www.myadmarket.com',
+'www.myadtrack.com',
+'www.myadvertisingpays.com',
+'www.myaffiliateads.com',
+'www.myaffiliateprogram.com',
+'www.myapp.com',
+'www.myetracker.com',
+'www.myforum365.com',
+'www.myiframe.com',
+'www.mymobcn.com',
+'www.myosotisvkrzovi.download',
+'www.myseostats.com',
+'www.mysuperpharm.com',
+'www.myswitchads.com',
+'www.mytds.pr.vc',
+'www.mytiwi.com',
+'www.mytogolinks.com',
+'www.mytrafficbuilder.info',
+'www.myvpn.pro',
+'www.mywebstats.org',
+'www.n.popclck.org',
+'www.n60adserv.com',
+'www.n63adserv.com',
+'www.n64adserv.com',
+'www.n65adserv.com',
+'www.n69adserv.com',
+'www.n72adserv.com',
+'www.n79adserv.com',
+'www.nannyingeuzcxae.download',
+'www.nanoadexchange.com',
+'www.nappieseummiroso.download',
+'www.nastinessprndnz.download',
+'www.nativeadx.net',
+'www.navteq.com',
+'www.nbjmp.com',
+'www.nctymqrcplanular.review',
+'www.nedstat.co.uk',
+'www.nedstat.com',
+'www.nedstat.nl',
+'www.neemfmujqqz.download',
+'www.neobux.com',
+'www.netdirect.nl',
+'www.netlinktrack.com',
+'www.nettown.com',
+'www.network22.com',
+'www.networkadvertising.org',
+'www.networkcommerce.com',
+'www.networksolutionsaffiliates.com',
+'www.networkwestvirginia.com',
+'www.networkwestvirginia.net',
+'www.netzathleten.de',
+'www.neutrinokhdii.download',
+'www.newsroomsolsnkww.download',
+'www.nextoptim.com',
+'www.ngbn.net',
+'www.ngludvfyaspiration.review',
+'www.nicotianavcajdyyq.download',
+'www.nihilistlhaeieykb.download',
+'www.nitratedffwtprxdo.download',
+'www.njyshuopawas.review',
+'www.nlrbucstales.review',
+'www.nltlgufalsies.review',
+'www.nndxcyybailliage.review',
+'www.nomogramsopptw.download',
+'www.nonames.tk',
+'www.noowho.com',
+'www.nrsadrefects.review',
+'www.nurno.com',
+'www.nvtrak.com',
+'www.nwxpdqczwighting.review',
+'www.nxsrv1.com',
+'www.o2onbusiness.de',
+'www.oascentral.blogher.org.12468.9030.302br.net',
+'www.oascentral.blogher.org.12470.9030.302br.net',
+'www.oatcakehcewr.download',
+'www.observantsumzcl.download',
+'www.oceango.net',
+'www.ocybtztforth.review',
+'www.odttrilkocement.review',
+'www.offerdeliver.com',
+'www.offeredby.net',
+'www.offerx.co.uk',
+'www.ogdocggdermas.review',
+'www.ohgipscavenging.review',
+'www.ojbrnmoowoold.review',
+'www.ojolink.com',
+'www.ojrq.net',
+'www.olizyr.com',
+'www.omarsys.com',
+'www.omnaling.com',
+'www.omniata.com',
+'www.omniture.com',
+'www.omtrdc.net',
+'www.onclickads.net',
+'www.onclickmax.com',
+'www.onclickpredictiv.com',
+'www.onclkds.com',
+'www.oncqpdpmerosomes.review',
+'www.oneandonlynetwork.com',
+'www.onelouder.com',
+'www.onestat.com',
+'www.onestatfree.com',
+'www.onlineemailmarketing.com',
+'www.onlinetraffic.info',
+'www.only-dates.de',
+'www.onwkmbhucalthaeas.review',
+'www.oofywoeynt.download',
+'www.openadserving.com',
+'www.opentracker.net',
+'www.openvn.com',
+'www.openx.net',
+'www.openxmedia.com',
+'www.operationfabulous.com',
+'www.opportunity-tracking.com',
+'www.opt-media.com',
+'www.optimum-hits.com',
+'www.optmd.com',
+'www.oqhdujtcharrier.review',
+'www.oqzwmbeliefs.review',
+'www.otherprofit.com',
+'www.otkyfxmassifs.review',
+'www.otmsrv.com',
+'www.otologistxyrdfmy.download',
+'www.otracking.com',
+'www.outerpages.com',
+'www.outlyingveburydd.download',
+'www.outsolesevkcifol.download',
+'www.outspeaksisfjto.download',
+'www.outtalkedxtypmjjbh.download',
+'www.overawingksapsofy.download',
+'www.overroastiklcrpyn.download',
+'www.oversee.net',
+'www.ovhomes.com',
+'www.ovxvhtext.review',
+'www.oxosurf.eu',
+'www.p.de',
+'www.p3marketing.com',
+'www.padv.co.il',
+'www.paid-work-at-home.com',
+'www.paid2mobi.com',
+'www.paidclick.ro',
+'www.paidsurveysfree.com',
+'www.paletotseeyzubqr.download',
+'www.palimashop.com',
+'www.pandectxfszuufr.download',
+'www.paranoicbarhuhw.download',
+'www.pareticpaypdtpq.download',
+'www.parkingcrew.net',
+'www.parse.ly',
+'www.parship.co.uk',
+'www.partnercash.com',
+'www.passinst.com',
+'www.pastilon.com',
+'www.paycounter.com',
+'www.paymonsters.biz',
+'www.payperclick.co.il',
+'www.paypersaleadvertising.com',
+'www.pbnwiecwfpaltrier.review',
+'www.pdpdsromlaconical.review',
+'www.pdsqopgtdiphyodont.review',
+'www.pe.n-mobile.net',
+'www.peakclick.com',
+'www.peakcounter.dk',
+'www.pejorationkgoibtbvp.download',
+'www.penneroqqwnqz.download',
+'www.people-group.su',
+'www.performanceadexchange.com',
+'www.performancerevenues.com',
+'www.persevered.com',
+'www.persianstat.com',
+'www.pflexads.com',
+'www.pgmopcongruity.review',
+'www.phenomcrm.com',
+'www.phmgtrfqxreesting.review',
+'www.photoshop-master.org',
+'www.phpbbex.com',
+'www.phylesonqjkilk.download',
+'www.picreel.com',
+'www.pigment-adv.co.il',
+'www.pillowywdgpchl.download',
+'www.pinfishmabev.download',
+'www.ping-fast.com',
+'www.pinguinqeslaj.download',
+'www.piumrtfasiv.download',
+'www.pivotnetworks.com',
+'www.pixazza.com',
+'www.pixel.watch',
+'www.pixeleze.com',
+'www.placehold.it',
+'www.pleadshvzek.download',
+'www.pleasewaitlonger.com',
+'www.plocia.com',
+'www.ploppingppoqqgq.download',
+'www.plug-media.com',
+'www.plus500.com',
+'www.po.st',
+'www.pointroll.com',
+'www.pointshop.dk',
+'www.polishedsvcxddsy.download',
+'www.pongoresume.com',
+'www.popads.ero-advertising.com',
+'www.popadscdn.net',
+'www.popcash.net',
+'www.popelingmltdiidyr.download',
+'www.poponclick.com',
+'www.popstrap.com',
+'www.poptm.com',
+'www.popunder.net',
+'www.popunder.ru',
+'www.popzila.com',
+'www.pornland.mobi',
+'www.pornlist.mobi',
+'www.pornsponsors.com',
+'www.postads24.com',
+'www.potionoxfrtmzvr.download',
+'www.ppcindo.com',
+'www.ppsxqapwsurcoats.review',
+'www.pptrk.com',
+'www.praptkppltraditors.review',
+'www.prchecker.info',
+'www.predictivadvertising.com',
+'www.prehensivetvrie.download',
+'www.premiumhdv.com',
+'www.prepareriblef.download',
+'www.preplannedpbxggguv.download',
+'www.primosearch.com',
+'www.pringotrack.com',
+'www.prishla.info',
+'www.probux.com',
+'www.products-and-services.com',
+'www.profitreload.com',
+'www.projectcounter.org',
+'www.projectwonderful.com',
+'www.promolnk.com',
+'www.promomasters.at',
+'www.promotions.yahoo.com',
+'www.pronatingwdlurtut.download',
+'www.propellerpops.com',
+'www.proratepgehzyd.download',
+'www.prosperent.com',
+'www.protectsebuwflgm.download',
+'www.prtracker.com',
+'www.psyimjyctimeliness.review',
+'www.ptp22.com',
+'www.ptp4ever.fr',
+'www.pubdirecte.com',
+'www.publicizedrtgtvj.download',
+'www.pubx.co',
+'www.puggareeslshty.download',
+'www.pureadexchange.com',
+'www.pushdoglucoside.review',
+'www.pvcteegjdrecombine.review',
+'www.pwgrkcxuescaped.review',
+'www.pyqnmtgtsrouleaux.review',
+'www.pyracanthahiiiy.download',
+'www.pyrolyzesgykddf.download',
+'www.pyrrhousabowdw.download',
+'www.pyrroleqkoaob.download',
+'www.pywatur.biz',
+'www.pyxqbzdwemuteness.review',
+'www.qadabra.com',
+'www.qajtgdsulfate.review',
+'www.qdibdzannvauntings.review',
+'www.qdigital.co.il',
+'www.qdildryypitapat.review',
+'www.qfrirscauterises.review',
+'www.qjfbjuyvuazotizing.review',
+'www.qpfumxmsxvoars.review',
+'www.qqc.co',
+'www.qualaroo.com',
+'www.qualigo.de',
+'www.qualigo.net',
+'www.qualityclickcontrol.com',
+'www.qualitylegion.com',
+'www.quantcount.com',
+'www.quantserve.com',
+'www.qubitproducts.com',
+'www.queerestxyxlws.download',
+'www.questionmarket.com',
+'www.quick-torrent.com',
+'www.quinolaerbnj.download',
+'www.quizilla.com',
+'www.quotestream.com',
+'www.qwiklnk.com',
+'www.rackshack-affiliates.net',
+'www.raconteurnvlwsc.download',
+'www.radar11ab.co.uk',
+'www.radarurl.com',
+'www.rankseller.de',
+'www.ranksider.com',
+'www.rapleaf.com',
+'www.rasedbdhczr.download',
+'www.rasius.pro',
+'www.raygun.io',
+'www.rddywd.com',
+'www.real-marketing.com',
+'www.realcounter.eu',
+'www.realtracker.com',
+'www.reamerskltzgimoz.download',
+'www.recommendedpreview.com',
+'www.recorded-email.com',
+'www.recreativ.ru',
+'www.recrossedmuwiemq.download',
+'www.redcounter.net',
+'www.redirect.com',
+'www.reduxmediia.com',
+'www.reedingxgxwiet.download',
+'www.reformal.ru',
+'www.rehungekmar.download',
+'www.rejectclick.com',
+'www.relap.io',
+'www.remercyingynfycoay.download',
+'www.renouncecvtqbkx.download',
+'www.repricebkbakkrxq.download',
+'www.research-artisan.com',
+'www.resolingvmvkfqrq.download',
+'www.resolvedlyecyduwkv.download',
+'www.resultanthixic.download',
+'www.retargetpro.net',
+'www.return.to',
+'www.revdepo.com',
+'www.revenue.net',
+'www.revmob.com',
+'www.revmobmobileadnetwork.com',
+'www.rewardsflow.com',
+'www.rextopia.com',
+'www.rgadvert.com',
+'www.rhapsodespzamgepzf.download',
+'www.rhodonitexnwpvf.download',
+'www.rhtag.com',
+'www.ricinoleicqnvzzrqnk.download',
+'www.ricksticksidperh.download',
+'www.ridiculeojlipf.download',
+'www.ringmenbnfkg.download',
+'www.rinsesqpppqbd.download',
+'www.ripenesscamuhceu.download',
+'www.rivcash.com',
+'www.rlcdn.com',
+'www.rmbn.ru',
+'www.rmv.so',
+'www.roars.com',
+'www.robotreplay.com',
+'www.roiliernoqgxdj.download',
+'www.roilsqbquh.download',
+'www.roitracker.com',
+'www.ropnqabtmaths.review',
+'www.rotrk.com',
+'www.rotunddpgyiagb.download',
+'www.rovelrpphyrua.download',
+'www.rowdyishtnhlgiax.download',
+'www.roxyaffiliates.com',
+'www.rpylvksecants.review',
+'www.rrglxwvflpropensely.review',
+'www.rsmrttracking.com',
+'www.rt-ns.ru',
+'www.rtraccoin1.com',
+'www.rtrcoin1.com',
+'www.rtrinstcap1.com',
+'www.rtrk.com',
+'www.rtrpropcoin1.com',
+'www.rtsg.com',
+'www.rtvhalearn.review',
+'www.ruclicks.com',
+'www.runnergamesch.com',
+'www.runnergameshk.com',
+'www.ruralworkforcecenter.com',
+'www.rushdktwu.download',
+'www.safelinking.net',
+'www.safelinktracker.com',
+'www.sarrazinsxkkkyv.download',
+'www.sassolitesffuzwmv.download',
+'www.sassvodetba.download',
+'www.satyridsochasuzk.download',
+'www.savethis.clickability.com',
+'www.savings-galleria.com',
+'www.saxoniesiqolqoh.download',
+'www.sbrjgqeppcarbuncle.review',
+'www.sc.pages02.net',
+'www.scarabaeidpiiwuw.download',
+'www.scarthspnckx.download',
+'www.sccqbcwwuoerlikon.review',
+'www.schizopodviicvxvtr.download',
+'www.scleromanongsf.download',
+'www.scluvkzgdowel.review',
+'www.scorecardresearch.com',
+'www.scrawliestliopa.download',
+'www.scrawlymecmxobp.download',
+'www.scribol.com',
+'www.scriptshead.com',
+'www.scytalesezqaxxr.download',
+'www.search-images.com',
+'www.search-results.com',
+'www.search-results.mobi',
+'www.search-tracker.com',
+'www.search.us.com',
+'www.searchesinteractive.com',
+'www.searchfusion.com',
+'www.searchingresult.com',
+'www.searchinquire.com',
+'www.searchpeack.com',
+'www.searchproduction.com',
+'www.searchswitch.com',
+'www.searchwebresults.com',
+'www.sebgomokos.review',
+'www.sebowelarger.review',
+'www.secoptim.com',
+'www.secrets40.com',
+'www.secureadcenter.com',
+'www.securejump.net',
+'www.securepaths.com',
+'www.securestudies.com',
+'www.sedotracker.com',
+'www.sedotracker.de',
+'www.seducemvjbklpqi.download',
+'www.seedingsllobt.download',
+'www.seethisinaction.com',
+'www.seevolution.com',
+'www.segment.com',
+'www.segment.io',
+'www.sekindo.co.il',
+'www.sekindo.com',
+'www.self-destructing-email.com',
+'www.self-destructing.com',
+'www.self-destructingemail.com',
+'www.selfdestructing.com',
+'www.selfdestructingemail.com',
+'www.selfdestructingmessage.com',
+'www.selfnetwork.com',
+'www.sellads.eu',
+'www.semrush.com',
+'www.send4fun.com',
+'www.sengreensbaxsovax.download',
+'www.senseiproducts.com',
+'www.seotoolscentral.com',
+'www.separatingvqeikpmhz.download',
+'www.serializedwzrxrhw.download',
+'www.serpanel.com',
+'www.servedbyadbutler.com',
+'www.seselisgqpobnny.download',
+'www.setihome.com',
+'www.sevnhcdshops.review',
+'www.sexsponsors.com',
+'www.sfgybrfoveracting.review',
+'www.sfippa.com',
+'www.sgiegeexposture.review',
+'www.sgiz.mobi',
+'www.sgizmo.com',
+'www.shareasale.com',
+'www.sheetedgfypgdtws.download',
+'www.shellersyheaefm.download',
+'www.shinystat.com',
+'www.shinystat.it',
+'www.shopexplorer.com',
+'www.showm3.com',
+'www.showroomvip.com',
+'www.shtuppingxpacoed.download',
+'www.sibylipmxs.download',
+'www.sichtbarkeitsindex.de',
+'www.silverpush.com',
+'www.similezfzycz.download',
+'www.simonsearch.com',
+'www.simpailoppvw.download',
+'www.simplistssxshrgh.download',
+'www.siteauikozph.download',
+'www.sitemeter.com',
+'www.sitepal.com',
+'www.sitestat.com',
+'www.sitetracker.com',
+'www.skimlinks.com',
+'www.sklentedjibkmbouo.download',
+'www.skwheunderlines.review',
+'www.skyenetmedia.com',
+'www.skyhookwireless.com',
+'www.skyligh.co',
+'www.slfnmzblblowsy.review',
+'www.slingersdlbrbhjs.download',
+'www.slushingfcikpfvjt.download',
+'www.slzppcgzheuristic.review',
+'www.smart-ip.net',
+'www.smart-scripts.com',
+'www.smartcj.com',
+'www.smartclick.net',
+'www.smartlog.ru',
+'www.smilepop.com',
+'www.smirchedsapkthxmy.download',
+'www.smjmp.net',
+'www.smockingbjyvmh.download',
+'www.smoochjmxptj.download',
+'www.smoothedqwcpw.download',
+'www.smoothscrollapp.com',
+'www.smurringdimmv.download',
+'www.snapengage.com',
+'www.snowmenwwrotgud.download',
+'www.socialize-it.com',
+'www.sociomantic.com',
+'www.soclock.com',
+'www.sofia.ai',
+'www.softcash.biz',
+'www.soogiedsoafm.download',
+'www.soothsitlppfwm.download',
+'www.sororiallyfdnstbxp.download',
+'www.soundstation.dk',
+'www.sousquywpscd.download',
+'www.spanksvrfvabcuq.download',
+'www.sparkimg.com',
+'www.specificmedia.com',
+'www.spectato.com',
+'www.speedclicks.ero-advertising.com',
+'www.sperse.com',
+'www.spinbox.com',
+'www.spinbox.net',
+'www.splashpageadvertising.com',
+'www.splatzmmkvu.download',
+'www.sponsorads.de',
+'www.spotsniper.ru',
+'www.springboardplatform.com',
+'www.spycash.biz',
+'www.spyingjplnda.download',
+'www.spylog.com',
+'www.spylog.ru',
+'www.sq2trk2.com',
+'www.squarenessqyecvdn.download',
+'www.squashyrsewa.download',
+'www.srv2trking.com',
+'www.srvpub.com',
+'www.ssangyong.co.il',
+'www.starchedlyyvlbyt.download',
+'www.stargamesaffiliate.com',
+'www.starsads.com',
+'www.startappexchange.com',
+'www.statcount.com',
+'www.statcounter.com',
+'www.stateresolver.link',
+'www.static.mb89-live.com',
+'www.stats4all.com',
+'www.stats4you.com',
+'www.statuncore.com',
+'www.stayinhomeandlovinit.com',
+'www.steakafka.pro',
+'www.stepstone.112.2o7.net',
+'www.stiltyulrmms.download',
+'www.storedsearch.com',
+'www.stream4u.me',
+'www.streamcastnetworks.com',
+'www.stretchywrrbzwg.download',
+'www.strookepvwkv.download',
+'www.stroutstlwvrss.download',
+'www.stubbierrjdassboo.download',
+'www.su600.com',
+'www.subchanterpjiyqc.download',
+'www.subeditorsoqltcxf.download',
+'www.subfuscsoweaucss.download',
+'www.subsoilsolvhikahb.download',
+'www.suncountryair.com',
+'www.sunnssgybqn.download',
+'www.sunopenoffice.112.2o7.net',
+'www.superfish.com',
+'www.supersonicads.com',
+'www.sureonlinefind.com',
+'www.surfernetwork.com',
+'www.surfers.ro',
+'www.surgelesssomdpninp.download',
+'www.surphace.com',
+'www.surveynetworks.com',
+'www.swaggeredvflzknyhf.download',
+'www.sweeneyxuumfdw.download',
+'www.swellisholupo.download',
+'www.swiftad.com',
+'www.swimsuitnetwork.com',
+'www.syllabusqhlloohss.download',
+'www.tackledoyuzsfx.download',
+'www.tag4arm.com',
+'www.taggstar.com',
+'www.tagjunction.com',
+'www.takyake.ru',
+'www.talkingdata.com',
+'www.talkingdata.net',
+'www.tangibledownload.com',
+'www.tantrack.info',
+'www.tapenowmskndjn.download',
+'www.tapfortap.com',
+'www.targad.com',
+'www.targetmarketingusa.com',
+'www.tasseledalcktk.download',
+'www.tassellingnmwczavi.download',
+'www.tayppqgouaches.review',
+'www.tbgilthmonticulus.review',
+'www.td553.com',
+'www.tdeiggbfmetamers.review',
+'www.teasermedia.net',
+'www.teasernet.com',
+'www.tegulaenasqffvn.download',
+'www.teilsidhobehqy.download',
+'www.temperersgelvhakyk.download',
+'www.tenantrymishdg.download',
+'www.tenzero.com',
+'www.terraads.net',
+'www.terraclicks.com',
+'www.tesimages.com',
+'www.text-link-ads.com',
+'www.textad.net',
+'www.tgpmanager.com',
+'www.thaidigger.com',
+'www.thalliformxaujqbsq.website',
+'www.theaffiliate.us',
+'www.theaffiliatepeople.com',
+'www.theappwarrior.com',
+'www.thecounter.com',
+'www.thehitsusa.com',
+'www.theophanyujgxscs.download',
+'www.theowgkkaj.download',
+'www.thetrafficstat.net',
+'www.thicksetchrzcu.download',
+'www.thindivide.com',
+'www.thisteddagblad.dk',
+'www.thliluxanplanet.review',
+'www.thogethoffic.co',
+'www.thor-cpa.com',
+'www.thowelspegzmc.download',
+'www.thrgo.pro',
+'www.ths9j89.com',
+'www.thumb.ero-advertising.com',
+'www.tickerassist.co.uk',
+'www.tickerland.com',
+'www.tidalkqbvnxk.download',
+'www.tidbitlhztnnx.download',
+'www.tifosicsonoel.download',
+'www.tiller.co',
+'www.tinbuadserv.com',
+'www.tioweuuukcedarwood.review',
+'www.titanads1.com',
+'www.titanads3.com',
+'www.titanads4.com',
+'www.titanads5.com',
+'www.tizernaya-reklama.ru',
+'www.tlehflrectus.review',
+'www.tlkrvyuincommodes.review',
+'www.tlvmedia.com',
+'www.tmtrck.com',
+'www.tns-counter.ru',
+'www.toolbarcounter.com',
+'www.top-ro.ro',
+'www.topadvancedsearch.com',
+'www.toplist.cz',
+'www.topstat.ru',
+'www.toptrafficsource.com',
+'www.torcherxotnnqq.download',
+'www.torerovdmsbvg.download',
+'www.total-media.net',
+'www.totaladperformance.com',
+'www.totalping.com',
+'www.towableohrhz.download',
+'www.tprmyslidden.review',
+'www.tracemyip.org',
+'www.track.net',
+'www.track112.com',
+'www.track4.com',
+'www.trackalyzer.com',
+'www.trackbacksecure.com',
+'www.trackedclicks.com',
+'www.tracker.peerclick.io',
+'www.trackermodules.com',
+'www.trackhost.com',
+'www.trackimpression.com',
+'www.tracking.mobitracker.info',
+'www.tracking.w2mobile.com',
+'www.tracking999.com',
+'www.trackingclick.net',
+'www.trackingstatalytics.com',
+'www.tracklead.net',
+'www.trackvoluum.com',
+'www.trackyourstats.com',
+'www.tradeadexchange.com',
+'www.tradetraffic.com',
+'www.trading.dianomi.com',
+'www.traffdaq.com',
+'www.traffe.eu',
+'www.traffic4you.de',
+'www.trafficads.com',
+'www.trafficcenter.com',
+'www.trafficfactory.biz',
+'www.trafficfile.com',
+'www.traffichold.com',
+'www.trafficjunky.net',
+'www.trafficmagnet.com',
+'www.trafficmonster.com',
+'www.trafficmp.com',
+'www.trafficoasis.com',
+'www.trafficswarm.com',
+'www.traffictrader.net',
+'www.trafic.ro',
+'www.traficmax.fr',
+'www.transferhit.com',
+'www.trcktm.net',
+'www.treddleswdnnipx.download',
+'www.tremblingskzymvgcu.download',
+'www.trhzc.com',
+'www.tribalfusion.com',
+'www.trivia2mobile.com',
+'www.trkroi.com',
+'www.trkuoy.com',
+'www.trkur.com',
+'www.trkur1.com',
+'www.trkur5.com',
+'www.trollzeweb.com',
+'www.truetraffic4u.com',
+'www.truongton.net',
+'www.trw12.com',
+'www.tsyuftaindignance.review',
+'www.tubatebunjrqzi.download',
+'www.tudoparablogs2.hpg.com.br',
+'www.tunersyxofqeak.download',
+'www.turncoatsuxica.download',
+'www.tv4chan.com',
+'www.tvdttzemicrotome.review',
+'www.tvsquad.com',
+'www.twemyksybtripewomen.review',
+'www.twqlnorqcmesquite.review',
+'www.tynt.com',
+'www.typepad.com',
+'www.typiol.com',
+'www.tyxo.bg',
+'www.tyzqxseppukus.review',
+'www.tzgcxofordid.review',
+'www.tzigwosquniquely.review',
+'www.tzpwyoyhfspaed.review',
+'www.uclick.com',
+'www.uddlywcatarrhs.review',
+'www.udmserve.net',
+'www.ueyqejwfyeither.review',
+'www.ufohyfzt.download',
+'www.ugdturner.com',
+'www.uhjfxgwrchronical.review',
+'www.ukbanners.com',
+'www.ulock.it',
+'www.ultimatelyreveal.com',
+'www.ultraadserver.com',
+'www.umeng.com',
+'www.unadvertising.info',
+'www.unboxingdotfb.download',
+'www.unbridlingdkkedavk.download',
+'www.uncarefulwrhmgwje.download',
+'www.unfairnesstxucdbqiz.download',
+'www.unfamedooxpcktdb.download',
+'www.universal-traffic.com',
+'www.unlck.net',
+'www.unpacifiedeaecmq.download',
+'www.unquietlyzyiwrvvao.download',
+'www.unrightfuljfuqrbf.download',
+'www.unsisteredgajudros.download',
+'www.unstaidblmgmsmpq.download',
+'www.untangledlkvhbhj.download',
+'www.untendereduxqwgikf.download',
+'www.unwealhdvfydj.download',
+'www.unwellnessyttshyf.download',
+'www.upcuushogunates.review',
+'www.upgrowsxdeyxj.download',
+'www.uploadedgnxjteu.download',
+'www.uponit.com',
+'www.upraisegbczr.download',
+'www.upsellit.com',
+'www.uptnzrhwainwright.review',
+'www.upv4.moatads.com',
+'www.urlstats.com',
+'www.urlzzz.com',
+'www.urmediazone.com',
+'www.usabilla.com',
+'www.usarevenue.com',
+'www.usd.bravo-dog.com',
+'www.usearchmedia.com',
+'www.uthenxxnoisemaker.review',
+'www.uugpwdbtalaria.review',
+'www.uur.at',
+'www.uvyeoperistome.review',
+'www.uzomaxgcamel.review',
+'www.vadoseyxcuekj.download',
+'www.valueclickmedia.com',
+'www.valuesponsor.com',
+'www.variedlyewebwd.download',
+'www.vassalagescafpum.download',
+'www.vastuchaedes.review',
+'www.vayavicio.com',
+'www.vbhoqfogey.review',
+'www.vbutlvkmesially.review',
+'www.vcbypttassel.review',
+'www.vectormarketing.com',
+'www.vendiblefqgmayr.download',
+'www.venturead.com',
+'www.vermifugalvacqsw.download',
+'www.vernalizesdoanrm.download',
+'www.veruta.com',
+'www.vfqwpoxshelfroom.review',
+'www.vgleqkbergamots.review',
+'www.vhnnicneovals.review',
+'www.vibrantmedia.com',
+'www.viciosityptktpdyq.download',
+'www.video-loader.com',
+'www.view.atdmt.com.35354.9267.302br.net',
+'www.viewbix.com',
+'www.viewsecure.net',
+'www.viglink.com',
+'www.vignette.com',
+'www.villsacsma.download',
+'www.vinceandjoesmarket.com',
+'www.vipadshares.com',
+'www.virads.com',
+'www.virtual-person.com',
+'www.visitorbarscript.com',
+'www.visitorpath.com',
+'www.visitorprofiler.com',
+'www.visitweb.com',
+'www.visuallyxvnxqhr.download',
+'www.visualrevenue.com',
+'www.vjnehfcprozymite.review',
+'www.vml-127.com',
+'www.vocalistgixybeoj.download',
+'www.voodooparking.com',
+'www.vowjnembargoing.review',
+'www.vq91811.com',
+'www.vsevjednom.cz',
+'www.vstats.net',
+'www.vstrk.com',
+'www.vulgarizexemdqzmr.download',
+'www.vumeujlug.download',
+'www.vviii.ru',
+'www.vxcash.net',
+'www.vygeirghpedaller.review',
+'www.w.shoopadoo.com',
+'www.wackoqczwjds.download',
+'www.wagerersivrvnemu.download',
+'www.wahoha.com',
+'www.walkingsgzezhx.download',
+'www.walmartsavingscatcher.com',
+'www.wamfebdvsabotier.review',
+'www.wantstraffic.com',
+'www.wap.co.il',
+'www.wapplanet.org',
+'www.warmongersgyuszzudy.download',
+'www.washesqydoigavu.download',
+'www.watchlivestream.me.uk',
+'www.wct.link',
+'www.weakentipjxv.download',
+'www.web-controlling.com',
+'www.web-counter.5u.com',
+'www.web-marketing.8m.com',
+'www.web-stat.com',
+'www.webattack.com',
+'www.webcontrolling.com',
+'www.webcontrolling.net',
+'www.webcounter.cc',
+'www.webcounter.com',
+'www.webglobaltraffic.info',
+'www.webgozar.com',
+'www.webgozar.ir',
+'www.webhitcounter.com',
+'www.webhits.de',
+'www.weblemon.pl',
+'www.webpagescripts.net',
+'www.webprowire.com',
+'www.webproworld.com',
+'www.websitefinancing.com',
+'www.websitehome.co.uk',
+'www.websponsors.com',
+'www.webstat.com',
+'www.webstat.net',
+'www.webstat.no',
+'www.webtrafficllc.co',
+'www.webtrends.com',
+'www.webtrends.net',
+'www.webtrendslive.com',
+'www.wee.co.il',
+'www.weebecash.com',
+'www.weedoit.fr',
+'www.welkingmkscrmgc.download',
+'www.wesell.co.il',
+'www.westernereoednyj.download',
+'www.wgiftcard.com',
+'www.whatseek.com',
+'www.whereuntomzrpo.download',
+'www.whickerxsxnz.download',
+'www.whirlerssrmbf.download',
+'www.whosread.com',
+'www.whydowork.com',
+'www.widgetadvertising.biz',
+'www.widgetcontent.net',
+'www.widgetdigital.info',
+'www.widgettool.net',
+'www.wildrhino.com',
+'www.wiliestmbpgakdno.download',
+'www.win7affiliates.com',
+'www.windgallsxsnxcqt.download',
+'www.wingoads.com',
+'www.witchlab.com',
+'www.wmfqmxqwsurgeries.review',
+'www.wondrousvalue.com',
+'www.wopnersoft.com',
+'www.workflowboard.com',
+'www.workfromhome.org',
+'www.workingonline.com',
+'www.workzip.it',
+'www.worldupdates.in',
+'www.wouralistvdmttom.download',
+'www.wovxriqartworks.review',
+'www.wpmimkheartfelt.review',
+'www.wqdtzhdstabler.review',
+'www.wrackgdnkgwg.download',
+'www.wrxviatrhzoists.review',
+'www.wsknjzjwlyrically.review',
+'www.wundercounter.com',
+'www.wwwdiscounthotel.com',
+'www.wwwdishnetwork.com',
+'www.wwwetracker.com',
+'www.wwwfoodnetwork.com',
+'www.wwwthesharperimage.com',
+'www.wxubrlotdguineas.review',
+'www.wytpxpnhflavin.review',
+'www.wyvoimulligrubs.review',
+'www.x19network.com',
+'www.xblpizjejunum.review',
+'www.xeanon.com',
+'www.xiti.com',
+'www.xivphnipressings.review',
+'www.xkcaivkoheeding.review',
+'www.xl415.com',
+'www.xml.admetix.com',
+'www.xratedtracking.com',
+'www.xrevtrk.com',
+'www.xstat.pl',
+'www.xxrwdgucdnibblingly.review',
+'www.xxxcounter.com',
+'www.xxxcounter.de',
+'www.xykhbtobligant.review',
+'www.ybotvisit.com',
+'www.yceml.net',
+'www.yeahmobi.com',
+'www.yearcast.com',
+'www.yemobiads.com',
+'www.yepdigital.adk2x.com',
+'www.yesadvertising.com',
+'www.yesno.co.il',
+'www.yestupjldo.download',
+'www.yesupmicro.com',
+'www.yesupseo.com',
+'www.yfxnajdodamasks.review',
+'www.yhmpiboweanel.review',
+'www.yieldersoogjabsb.download',
+'www.ykujsrbdcbridemaid.review',
+'www.yllix.com',
+'www.you2mail.com',
+'www.younglingsbcjzvozva.download',
+'www.youradexchange.com',
+'www.yourcartoons.com',
+'www.yourhitstats.com',
+'www.youyield.com',
+'www.ytubevideoqualitymanager.com',
+'www.yzpvcwaelunker.review',
+'www.z5x.net',
+'www.za-ads.de',
+'www.zanox-affiliate.de',
+'www.zedo.com',
+'www.zedoadnetwork.com',
+'www.zemoumisfortune.review',
+'www.zeptolab.com',
+'www.zergnet.com',
+'www.zeroredirect1.com',
+'www.zetatrk.com',
+'www.zhanzhang.net',
+'www.zhurqeyscbidet.review',
+'www.zokjlyraphide.review',
+'www.zombo.com',
+'www.zoomorphicylxvmnz.download',
+'www.zqojpysorkiddiewink.review',
+'www.ztapobanefuller.review',
+'www.ztrack.net',
+'www.ztrack.pw',
+'www.zxtrace.com',
+'www.zyiztazhfprochain.review',
+'www.zzptzdhugavot.review',
+'www1.clickdownloader.com',
+'www1.counter.bloke.com',
+'www1.effectivemeasure.net',
+'www1.freestats.com',
+'www1.ivwbox.de',
+'www1.kliks.nl',
+'www1.mpnrs.com',
+'www1.mystats.nl',
+'www1.oratosaeron.com',
+'www1.perf.overture.com',
+'www1.runnergameshk.com',
+'www1.track4.com',
+'www1.yesadvertising.com',
+'www1.zedo.com',
+'www10.indiads.com',
+'www10.mystats.nl',
+'www10.overture.com',
+'www10.yesadvertising.com',
+'www11.yesadvertising.com',
+'www12.yesadvertising.com',
+'www14.a8.net',
+'www14.yesadvertising.com',
+'www2.addfreestats.com',
+'www2.adhost.com',
+'www2.alloydigital.com',
+'www2.applifier.com',
+'www2.arielrebel.com',
+'www2.bubblesmedia.ru',
+'www2.buttonware.net',
+'www2.clustrmaps.com',
+'www2.counter.bloke.com',
+'www2.cqcounter.com',
+'www2.crittercism.com',
+'www2.dealtime.com',
+'www2.delta-search.com',
+'www2.doubleclick.com',
+'www2.doubleclick.net',
+'www2.effectivemeasure.net',
+'www2.flowgo.com',
+'www2.freestats.com',
+'www2.glam.com',
+'www2.hitslink.com',
+'www2.ivwbox.de',
+'www2.kliks.nl',
+'www2.mpnrs.com',
+'www2.pardot.com',
+'www2.skyhookwireless.com',
+'www2.smartadserver.com',
+'www2.survey-poll.com',
+'www2.surveyfocus.com',
+'www2.telemarque.com',
+'www2.track4.com',
+'www21.a8.net',
+'www22.a8.net',
+'www24.a8.net',
+'www26.a8.net',
+'www28.a8.net',
+'www3.adhost.com',
+'www3.adireland.com',
+'www3.clustrmaps.com',
+'www3.counter.bloke.com',
+'www3.delta-search.com',
+'www3.doubleclick.com',
+'www3.doubleclick.net',
+'www3.effectivemeasure.net',
+'www3.mpnrs.com',
+'www3.mystats.nl',
+'www3.smartadserver.com',
+'www3.track4.com',
+'www3.webhostingtalk.com',
+'www3.yesadvertising.com',
+'www35.glam.com',
+'www3secure.com',
+'www4.addfreestats.com',
+'www4.clustrmaps.com',
+'www4.counter.bloke.com',
+'www4.delta-search.com',
+'www4.directrdr.com',
+'www4.effectivemeasure.net',
+'www4.freestats.com',
+'www4.glam.com',
+'www4.mystats.nl',
+'www4.shiftlock.com',
+'www4.smartadserver.com',
+'www4.trix.net',
+'www4.yesadvertising.com',
+'www5.addfreestats.com',
+'www5.cj.com',
+'www5.counter.bloke.com',
+'www5.effectivemeasure.net',
+'www5.freestats.com',
+'www5.mystats.nl',
+'www5.overture.com',
+'www5.yesadvertising.com',
+'www6.addfreestats.com',
+'www6.counter.bloke.com',
+'www6.effectivemeasure.net',
+'www6.glam.com',
+'www6.mystats.nl',
+'www60.overture.com',
+'www61.overture.com',
+'www7.addfreestats.com',
+'www7.bannerspace.com',
+'www7.cbox.ws',
+'www7.counter.bloke.com',
+'www7.effectivemeasure.net',
+'www7.glam.com',
+'www7.mystats.nl',
+'www7.overture.com',
+'www7.yesadvertising.com',
+'www8.addfreestats.com',
+'www8.counter.bloke.com',
+'www8.effectivemeasure.net',
+'www8.glam.com',
+'www8.mystats.nl',
+'www9.counter.bloke.com',
+'www9.effectivemeasure.net',
+'www9.glam.com',
+'www9.mystats.nl',
+'www9.overture.com',
+'wwwdiscounthotel.com',
+'wwwdishnetwork.com',
+'wwwetracker.com',
+'wwwfoodnetwork.com',
+'wwwimlive.com',
+'wwwpromoter.com',
+'wwwtest.timesink.com',
+'wwwthesharperimage.com',
+'wwwview.atdmt.com.1520.302br.net',
+'wwwview.atdmt.com.801.8000.302br.net',
+'wwww.cj.com',
+'wwww.woolik.com',
+'wxdownloadmanager.com',
+'wxubrlotdguineas.review',
+'wytpxpnhflavin.review',
+'wyvoimulligrubs.review',
+'wz.tynt.com',
+'x.about.com',
+'x.bloggurat.net',
+'x.castanet.net',
+'x.cnt.my',
+'x.dpstatic.com',
+'x.go.com',
+'x.myspace.com',
+'x.myspace.edgesuite.net',
+'x.skimresources.com',
+'x.vindicosuite.com',
+'x.weather.com',
+'x.zedo.com',
+'x.zeroredirect.com',
+'x.zeroredirect1.com',
+'x.zeroredirect2.com',
+'x1.ifdef.jp',
+'x1.yamanoha.com',
+'x10.com',
+'x10.ifdef.jp',
+'x11.ifdef.jp',
+'x12.ifdef.jp',
+'x13.ifdef.jp',
+'x14.ifdef.jp',
+'x15.ifdef.jp',
+'x16.ifdef.jp',
+'x17.ifdef.jp',
+'x18.ifdef.jp',
+'x19.ifdef.jp',
+'x19network.com',
+'x2.ifdef.jp',
+'x2.vindicosuite.com',
+'x2.yamanoha.com',
+'x20.ifdef.jp',
+'x3.extreme-dm.com',
+'x3.ifdef.jp',
+'x3.xclicks.net',
+'x3.yamanoha.com',
+'x4.ifdef.jp',
+'x4.yamanoha.com',
+'x5.ifdef.jp',
+'x5.yamanoha.com',
+'x6.ifdef.jp',
+'x6.yamanoha.com',
+'x7.hebiichigo.com',
+'x7.ifdef.jp',
+'x7.yamanoha.com',
+'x8.ifdef.jp',
+'x8.yamanoha.com',
+'x9.ifdef.jp',
+'xad.com',
+'xads.zedo.com',
+'xapi.juicyads.com',
+'xaxis.2cnt.net',
+'xb11776.com',
+'xban.walla.co.il',
+'xblpizjejunum.review',
+'xbox.ign.us.intellitxt.com',
+'xbox.visits.lt',
+'xbox360.ign.us.intellitxt.com',
+'xbridge.122.207.net',
+'xeanon.com',
+'xebadu.com',
+'xenec.stol.it',
+'xeontopa.com',
+'xerox.elicitapp.com',
+'xfinder.staging.adition.com',
+'xhealthmobiltools.112.2o7.net',
+'xhr.ajkelra.com',
+'xhr.avalhukof.com',
+'xhr.bahaimlo.com',
+'xhr.beglorena.com',
+'xhr.bokilora.com',
+'xhr.bondinra.com',
+'xhr.bonjikoa.com',
+'xhr.botiviga.com',
+'xhr.chukalapopi.com',
+'xhr.ciridola.com',
+'xhr.civitik.com',
+'xhr.d.mojigaga.com',
+'xhr.dagasaka.com',
+'xhr.daghashmal.com',
+'xhr.dontibar.com',
+'xhr.dorapodorasham.com',
+'xhr.drogomet.com',
+'xhr.dulderbulder.com',
+'xhr.egolina.com',
+'xhr.ekolamis.com',
+'xhr.erogaliv.com',
+'xhr.farfarida.com',
+'xhr.foditgoz.com',
+'xhr.forkitz.com',
+'xhr.fulhudhoo.com',
+'xhr.golizoli.com',
+'xhr.haklopar.com',
+'xhr.hariqavi.com',
+'xhr.hirovivi.com',
+'xhr.horheloopo.com',
+'xhr.humuseliyahu.com',
+'xhr.jadizayo.com',
+'xhr.jandolav.com',
+'xhr.jingavot.com',
+'xhr.jquerycdn.co.il',
+'xhr.jquerymin.co.il',
+'xhr.kalmloda.com',
+'xhr.kilomansa.com',
+'xhr.kilorama.com',
+'xhr.kuchebraska.com',
+'xhr.liktirov.com',
+'xhr.lokipodi.com',
+'xhr.measurementaz.com',
+'xhr.milparota.com',
+'xhr.mozefakt.com',
+'xhr.mujilora.com',
+'xhr.muligov.com',
+'xhr.namitol.com',
+'xhr.niholaev.com',
+'xhr.niklesrov.com',
+'xhr.nimdinb.com',
+'xhr.pipilida.com',
+'xhr.pitatagata.com',
+'xhr.pompazilla.com',
+'xhr.poratav.com',
+'xhr.prikolizdesa.com',
+'xhr.qawiman.com',
+'xhr.quavomi.com',
+'xhr.ratkalol.com',
+'xhr.reqpostanza.com',
+'xhr.roritabo.com',
+'xhr.rotibald.com',
+'xhr.scrappykoko.com',
+'xhr.senolati.com',
+'xhr.shmonekisot.com',
+'xhr.shokala.com',
+'xhr.shulhanafuh.com',
+'xhr.tantella.com',
+'xhr.tenlokif.com',
+'xhr.tijorari.com',
+'xhr.tikodala.com',
+'xhr.tikrailijorj.com',
+'xhr.udorik.com',
+'xhr.ufraton.com',
+'xhr.ukatoe.com',
+'xhr.upnorma.com',
+'xhr.uralap.com',
+'xhr.utorido.com',
+'xhr.uzekrs.com',
+'xhr.uzotarak.com',
+'xhr.venonita.com',
+'xhr.wakapita.com',
+'xhr.wodizapt.com',
+'xhr.yaboshadi.com',
+'xhr.yallboen.com',
+'xhr.yeshhaod.com',
+'xhr.yorilada.com',
+'xhr.yuituityula.com',
+'xhr.zepozipo.com',
+'xhr.zinovila.com',
+'xhr.zonolali.com',
+'xhr.zorbikala.com',
+'xhr.zortinah.com',
+'xiazai.duba.net',
+'xiti.com',
+'xivphnipressings.review',
+'xkcaivkoheeding.review',
+'xl.topstat.com',
+'xl415.com',
+'xlite.counterpath.com',
+'xml.admeridian.com',
+'xml.admetix.com',
+'xml.adservme.com',
+'xml.adtech.fr',
+'xml.clickredirection.com',
+'xml.explorads.com',
+'xml.ezmob.com',
+'xml.ioam.de',
+'xml.online-adnetwork.com',
+'xml.sahcdn.com',
+'xml.trafficsyndicate.com',
+'xml.vokut.com',
+'xml.xmlwizard.com',
+'xml2.trafficsyndicate.com',
+'xmpie.vo.llnwd.net',
+'xmts.net',
+'xn--adspace-kvg.ero-advertising.com',
+'xn--ryield-heqxb4671gshxg.jmp9.com',
+'xn--ryield-hqmh5974xb8yg.jmp9.com',
+'xns1.vignette.com',
+'xobor.miranus.com',
+'xoredi.com',
+'xp1.zedo.com',
+'xp2.zedo.com',
+'xratedtracking.com',
+'xrevtrk.com',
+'xslt.alexa.com',
+'xsltcache.alexa.com',
+'xstat.pl',
+'xtra.co.nz',
+'xwne.wcdn.co.il',
+'xxladu.com',
+'xxrwdgucdnibblingly.review',
+'xxx.cqcounter.com',
+'xxxadu.com',
+'xxxconnect.com',
+'xxxcounter.com',
+'xykhbtobligant.review',
+'xyz.freelogs.com',
+'xz.duba.net',
+'xz6h6zj3.com',
+'y.extreme-dm.com',
+'y.ibsys.com',
+'y.jmp9.com',
+'y.moatads.com',
+'y.net-games.co.il',
+'y.zedo.com',
+'y.zeroredirect.com',
+'y.zeroredirect1.com',
+'y.zeroredirect2.com',
+'y0.extreme-dm.com',
+'y1.extreme-dm.com',
+'y3.ifengimg.com',
+'y72yuyr9.com',
+'yaboshadi.com',
+'yada.com',
+'yadro.ru',
+'yads.zedo.com',
+'yahoo-s.nuggad.net',
+'yahoo.ivwbox.de',
+'yahoo.nuggad.net',
+'yahoo.serving-sys.com',
+'yakezienetwork.go2cloud.org',
+'yallboen.com',
+'yandexadexchange.net',
+'yang.hitbox.com',
+'yast.rutube.ru',
+'yb.torchbrowser.com',
+'ybotvisit.com',
+'yc-ads.s3.amazonaws.com',
+'ycv.secoptim.com',
+'yeahmobi.com',
+'yeahmobi.go2cloud.org',
+'yeahmobi.hasoffers.com',
+'yearcast.com',
+'yeas.yahoo.co.jp',
+'yebadu.com',
+'yellgroup.122.2o7.net',
+'yello-de01.webtrekk.net',
+'yellostrom.webtrekk.net',
+'yemobiads.com',
+'yen.appsfire.net',
+'yepdigital.adk2x.com',
+'yepdigital.go2cloud.org',
+'yesadvertising.com',
+'yeshhaod.com',
+'yesno.co.il',
+'yestupjldo.download',
+'yesup.net',
+'yesupmicro.com',
+'yesupseo.com',
+'yfxnajdodamasks.review',
+'yhmpiboweanel.review',
+'yield.jmp9.com',
+'yieldersoogjabsb.download',
+'yieldmanager.adbooth.com',
+'yieldmanager.com',
+'yieldmgr.com',
+'ying.hitbox.com',
+'yj.moatads.com',
+'ykujsrbdcbridemaid.review',
+'yllix.com',
+'ylu7k4i2o7.s.ad6media.fr',
+'yoc-performance.com',
+'yoclub.waphall.com',
+'yostatic.net',
+'yotefiles.com',
+'yottos.com',
+'you2mail.com',
+'youmi.net',
+'younglingsbcjzvozva.download',
+'your.365advert.com',
+'youradexchange.com',
+'yourcartoons.com',
+'yourhitstats.com',
+'yourlondonbridge.go2cloud.org',
+'yoursubdomain.bravediary.com',
+'youspacko.com',
+'youtrack.co',
+'youtube.2cnt.net',
+'youyield.com',
+'ypn-jscs.overture.com',
+'yrkdsp.112.2o7.net',
+'yrkeve.112.2o7.net',
+'ysm.hauchi.com.tw',
+'ytubevideoqualitymanager.com',
+'yuilop.com',
+'yuituityula.com',
+'yume.com',
+'yuppy.2cnt.net',
+'yvap.query.yahoo.com',
+'yx-ads6.com',
+'yxo.warmportrait.com',
+'yz0fi.voluumtrk.com',
+'yzpvcwaelunker.review',
+'yzus09by.com',
+'z-na.amazon-adsystem.com',
+'z.adcpm.com',
+'z.blogads.com',
+'z.extreme-dm.com',
+'z.moatads.com',
+'z.on.aol.com',
+'z.zedo.com',
+'z.zeroredirect.com',
+'z.zeroredirect1.com',
+'z.zeroredirect2.com',
+'z0.extreme-dm.com',
+'z1.extreme-dm.com',
+'z1.zedo.com',
+'z1.zeroredirect1.com',
+'z2.zeroredirect1.com',
+'z3.zeroredirect1.com',
+'z4.zeroredirect1.com',
+'z5.zeroredirect1.com',
+'z5x.net',
+'z6.zeroredirect1.com',
+'z7.zeroredirect1.com',
+'z7ale.go2cloud.org',
+'z8.zeroredirect1.com',
+'z9.zeroredirect1.com',
+'za.delta-boa.com',
+'za.zeroredirect1.com',
+'za1.delta-boa.com',
+'za2.delta-boa.com',
+'za3.delta-boa.com',
+'za4.delta-boa.com',
+'za5.delta-boa.com',
+'za6.delta-boa.com',
+'za7.delta-boa.com',
+'za8.delta-boa.com',
+'za9.delta-boa.com',
+'zalando01.webtrekk.net',
+'zalorasea.go2cloud.org',
+'zangocash.com',
+'zanox-affiliate.de',
+'zanox.com',
+'zapads.zapak.com',
+'zb.zeroredirect1.com',
+'zc.zeroredirect1.com',
+'zc.zeroredirect2.com',
+'zc2.quebec-bin.com',
+'zd.zeroredirect1.com',
+'zdau-builder.122.2o7.net',
+'zdau-zdnetau.122.2o7.net',
+'zdbb.net',
+'zdf.de.edgesuite.net',
+'zdf.ivwbox.de',
+'zdorovayaspina.justclick.ru',
+'ze.zeroredirect1.com',
+'zeads.com',
+'zedo.com',
+'zedoadnetwork.com',
+'zeepmedia.com',
+'zeit.met.vgwort.de',
+'zeit01.webtrekk.net',
+'zeitonl.ivwbox.de',
+'zemoumisfortune.review',
+'zenent.go2cloud.org',
+'zenithperformance.go2cloud.org',
+'zenkreka.com',
+'zepozipo.com',
+'zerezas.com',
+'zeroredirect.com',
+'zeroredirect1.com',
+'zetatrk.com',
+'zeus.timesink.com',
+'zeuscpa.go2affise.com',
+'zeuscpa.go2cloud.org',
+'zf.zeroredirect1.com',
+'zg.zeroredirect1.com',
+'zh.zeroredirect1.com',
+'zhanzhang.net',
+'zhcn.admob.com',
+'zhurqeyscbidet.review',
+'zi.zeroredirect1.com',
+'ziffdavisglobal.112.2o7.net',
+'ziflx.redirectvoluum.com',
+'ziflx.trackvoluum.com',
+'ziinga.go2cloud.org',
+'zillow.go2cloud.org',
+'zinovila.com',
+'zinturax.com',
+'zipcity.com',
+'zipovoma.com',
+'zipropyl.com',
+'zipzap.go2cloud.org',
+'zj.dcys.ksmobile.com',
+'zj.zeroredirect1.com',
+'zk.zeroredirect1.com',
+'zk1.zeroredirect1.com',
+'zk10.zeroredirect1.com',
+'zk2.zeroredirect1.com',
+'zk3.zeroredirect1.com',
+'zk4.zeroredirect1.com',
+'zk5.zeroredirect1.com',
+'zk6.zeroredirect1.com',
+'zk7.zeroredirect1.com',
+'zk8.zeroredirect1.com',
+'zk9.zeroredirect1.com',
+'zl.zeroredirect1.com',
+'zm.zeroredirect1.com',
+'zmedia.com',
+'zn.zeroredirect1.com',
+'zn0cjgsju6439lcsd-microsoft.siteintercept.qualtrics.com',
+'zn87b2gchqlbyp0jn-viacom.siteintercept.qualtrics.com',
+'zn_0xssfnnsxmogd01-cbs.siteintercept.qualtrics.com',
+'zn_9nquvazst1xipkt-cbs.siteintercept.qualtrics.com',
+'zn_b4q1adq70amqdth-citrix.siteintercept.qualtrics.com',
+'zn_brp7urzdaj4xmxn-edhealth.siteintercept.qualtrics.com',
+'zo.zeroredirect1.com',
+'zokidif.com',
+'zokjlyraphide.review',
+'zombo.com',
+'zone28.hotwords.com.br',
+'zonolali.com',
+'zoom.go2cloud.org',
+'zoomdirect.com.au',
+'zoomorphicylxvmnz.download',
+'zorbikala.com',
+'zortinah.com',
+'zp.zeroredirect1.com',
+'zq.zeroredirect1.com',
+'zqojpysorkiddiewink.review',
+'zr.zeroredirect1.com',
+'zs.dhl.de',
+'zs.ffshrine.org',
+'zs.zeroredirect1.com',
+'zs0s5xfe.com',
+'zt.1rx.io',
+'zt.zeroredirect1.com',
+'ztapobanefuller.review',
+'ztrack.net',
+'ztrack.pw',
+'zu.zeroredirect1.com',
+'zulu.go2cloud.org',
+'zulumob.go2cloud.org',
+'zv.zeroredirect1.com',
+'zw.zeroredirect1.com',
+'zww.ero-advertising.com',
+'zx.zeroredirect1.com',
+'zxtrace.com',
+'zxypenguin.people-group.su',
+'zy.zeroredirect1.com',
+'zyiztazhfprochain.review',
+'zyngawithfriends.com',
+'zz.cqcounter.com',
+'zz.zeroredirect1.com',
+'zzptzdhugavot.review',
+'zzz.clickbank.net',
+'_thums.ero-advertising.com',
+]; \ No newline at end of file
diff --git a/docs/tests/index.html b/docs/tests/index.html
new file mode 100644
index 0000000..b0558c1
--- /dev/null
+++ b/docs/tests/index.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>uBlock Origin -- Tests</title>
+</head>
+<body>
+<h1>uBlock Origin tests</h1>
+<p>Some of the pages below are hosted on <a href="raw.githack.com">raw.githack.com</a> in order to ensure some of the secondary resources can be properly loaded (specifically, the WebAssembly modules, as they <a href="https://github.com/WebAssembly/design/blob/master/Web.md#webassemblyinstantiatestreaming">require to be loaded using same-origin policy</a>).</p>
+<ul>
+<li><a href="css-selector-based-cosmetic-filters.html">CSS selector-based cosmetic filters</a>
+<li><a href="procedural-cosmetic-filters.html">Procedural cosmetic filters</a>
+<li><a href="procedural-html-filters.html">Procedural HTML filters</a>
+<li><a href="scriptlet-injection-filters-1.html">Scriptlet injection filters / no-setTimeout-if</a>
+<li>&nbsp;
+<li><a href="https://raw.githack.com/gorhill/uBlock/master/docs/tests/hntrie-test.html">HNTrie: tests</a>
+<li><a href="https://raw.githack.com/gorhill/uBlock/master/docs/tests/hnset-benchmark.html">HNTrie, small (2) to medium (~1000) set: benchmarks</a>
+<li><a href="https://raw.githack.com/gorhill/uBlock/master/docs/tests/hnbigset-benchmark.html">HNTrie, small (2) to large (40,000+) set: benchmarks</a>
+</ul>
+</body>
+</html>
diff --git a/docs/tests/procedural-cosmetic-filters.html b/docs/tests/procedural-cosmetic-filters.html
new file mode 100644
index 0000000..4de93db
--- /dev/null
+++ b/docs/tests/procedural-cosmetic-filters.html
@@ -0,0 +1,230 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>Procedural cosmetic filters</title>
+<style>
+ .filters {
+ font-family: monospace;
+ white-space: pre;
+ }
+ .tests {
+ align-items: flex-start;
+ display: flex;
+ flex-wrap: wrap;
+ }
+ .tile {
+ display: inline-flex;
+ flex-direction: column;
+ margin: 0 20px 10px 0;
+ min-width: 200px;
+ }
+ .tile div {
+ align-items: center;
+ color: white;
+ display: flex;
+ justify-content: center;
+ }
+ .tile > div {
+ height: 50px;
+ position: relative;
+ }
+ .tile > div > div {
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+ }
+ .tile > code {
+ align-self: center;
+ }
+ .pass {
+ background-color: green;
+ }
+ .pass::before {
+ content: 'pass';
+ }
+ .fail {
+ background-color: red;
+ }
+ .fail::before {
+ content: 'fail';
+ }
+ .tests a, .tests b {
+ display: none;
+ }
+ .tests a::before {
+ opacity: 0;
+ }
+ .tests b::after {
+ opacity: 0;
+ }
+</style>
+</head>
+<body>
+<h1>Procedural cosmetic filters</h1>
+<p><a href="./.">Back</a>
+<br><br></p>
+<h3>Filters</h3>
+<div class="filters"><noscript>Enable JavaScript to see needed filters</noscript></div>
+
+<h3>Tests</h3>
+<div id="pcf" class="tests">
+
+<div class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code> .fail:has(b)</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code> .fail:has(> a > b)</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"></div><a><b></b></a></div>
+ <code> .fail:has(+ a > b)</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"></div><a><b></b></a></div>
+ <code> .fail:has(:scope + a > b)</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code> .fail:has(:is(.pass a > b))</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code> .fail:not(:has(c))</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"><a><b>I am a needle!!!</b></a></div></div>
+ <code> .fail:has-text(needle)</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"><a><b>I am a needle!!!</b></a></div></div>
+ <code> .fail:has-text(/NEEDLE/i)</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"><a><b>I am a needle!!!</b></a></div></div>
+ <code> .fail:not(:has-text(haystack))</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code> .fail:matches-css(position: absolute)</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code> .fail:has(a:matches-css-before(opacity: 0))</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code> .fail:has(b:matches-css-after(opacity: 0))</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code> .fail > a > b:nth-ancestor(2)</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code>:xpath(.//b/../..)</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"><a>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna<b>aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</b>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</a></div></div>
+ <code> .fail:min-text-length(300)</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><a><b></b></a><div class="fail"></div></div>
+ <code> .pass > a:has(b) + .fail</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><a><b></b></a><div class="fail"><a><b></b></a></div></div>
+ <code> .pass > a:has(b) + .fail:has(b)</code>
+ </div>
+
+<div class="tile watchattr1">
+ <div class="pass"><div class="pass"><a><b class="ok"></b></a></div></div>
+ <code> .pass:watch-attr(class) > .fail:has(b.notok)</code>
+ <script>
+ self.setTimeout(( ) =>
+ {
+ document.querySelector('.watchattr1 .pass > .pass').className = 'fail';
+ document.querySelector('.watchattr1 .pass > .fail b.ok').className = 'notok';
+ },
+ 500
+ );
+ </script>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"></div><a></a><b></b></div>
+ <code> .fail:has(+ a)</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"></div><a><b></b></a></div>
+ <code> .fail:has(~ a:has(b))</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"></div><a><b></b></a></div>
+ <code> .fail:remove()</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code> b:upward(2)</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code> b:upward(.fail)</code>
+ </div>
+
+<div class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code> b:upward(.fail):style(visibility: hidden !important)</code>
+ </div>
+
+</div>
+
+<script>
+ const hostname = self.location.hostname;
+ const filters = [];
+ const fragment = document.createDocumentFragment();
+ let i = 1;
+ for ( const tile of document.querySelectorAll('.tile') ) {
+ const id = `a${i}`;
+ tile.id = id;
+ const code = tile.querySelector('code');
+ const filter = `#pcf #${id}${code.textContent}`;
+ code.textContent = filter;
+ const div = document.createElement('div');
+ div.textContent = `${hostname}#?#${filter}`;
+ fragment.appendChild(div);
+ i += 1;
+ }
+ const parent = document.querySelector('.filters');
+ while ( parent.lastElementChild !== null ) {
+ parent.removeChild(parent.lastElementChild);
+ }
+ parent.appendChild(fragment);
+</script>
+</body>
+</html>
diff --git a/docs/tests/procedural-html-filters.html b/docs/tests/procedural-html-filters.html
new file mode 100644
index 0000000..23d7f01
--- /dev/null
+++ b/docs/tests/procedural-html-filters.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>Procedural HTML filters</title>
+<style>
+ .filters {
+ font-family: monospace;
+ white-space: pre;
+ }
+ .tests {
+ align-items: flex-start;
+ display: flex;
+ flex-wrap: wrap;
+ }
+ .tile {
+ display: inline-flex;
+ flex-direction: column;
+ margin: 0 20px 10px 0;
+ min-width: 200px;
+ }
+ .tile div {
+ align-items: center;
+ color: white;
+ display: flex;
+ justify-content: center;
+ }
+ .tile > div {
+ height: 50px;
+ position: relative;
+ }
+ .tile > div > div {
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+ }
+ .tile > code {
+ align-self: center;
+ }
+ .pass {
+ background-color: green;
+ }
+ .pass::before {
+ content: 'pass';
+ }
+ .fail {
+ background-color: red;
+ }
+ .fail::before {
+ content: 'fail';
+ }
+ .tests a, .tests b {
+ display: none;
+ }
+ .tests a::before {
+ opacity: 0;
+ }
+ .tests b::after {
+ opacity: 0;
+ }
+</style>
+</head>
+<body>
+<h1>Procedural HTML filters</h1>
+<p><a href="./.">Back</a>
+<br><br></p>
+<h3>Filters</h3>
+<div class="filters"><noscript>Enable JavaScript to see needed filters</noscript></div>
+
+<h3>Tests</h3>
+<div id="phf" class="tests">
+
+<div id="a1" class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code>^#phf #a1 .fail:has(b)</code>
+ </div>
+
+<div id="a2" class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code>^#phf #a2 .fail:has(> a > b)</code>
+ </div>
+
+<div id="a3" class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code>^#phf #a3 .fail:not(:has(c))</code>
+ </div>
+
+<div id="a4" class="tile">
+ <div class="pass"><div class="fail"><a><b>I am a needle!!!</b></a></div></div>
+ <code>^#phf #a4 .fail:has-text(needle)</code>
+ </div>
+
+<div id="a5" class="tile">
+ <div class="pass"><div class="fail"><a><b>I am a needle!!!</b></a></div></div>
+ <code>^#phf #a5 .fail:has-text(/NEEDLE/i)</code>
+ </div>
+
+<div id="a6" class="tile">
+ <div class="pass"><div class="fail"><a><b>I am a needle!!!</b></a></div></div>
+ <code>^#phf #a6 .fail:not(:has-text(haystack))</code>
+ </div>
+
+<div id="a7" class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code>^#phf #a7 .fail > a > b:nth-ancestor(2)</code>
+ </div>
+
+<div id="a8" class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code>^#phf #a8:xpath(.//b/../..)</code>
+ </div>
+
+<div id="a9" class="tile">
+ <div class="pass"><div class="fail"><a>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna<b>aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</b>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</a></div></div>
+ <code>^#phf #a9 .fail:min-text-length(300)</code>
+ </div>
+
+<div id="a10" class="tile">
+ <div class="pass"><a><b></b></a><div class="fail"></div></div>
+ <code>^#phf #a10 .pass > a:has(b) + .fail</code>
+ </div>
+
+<div id="a11" class="tile">
+ <div class="pass"><a><b></b></a><div class="fail"><a><b></b></a></div></div>
+ <code>^#phf #a11 .pass > a:has(b) + .fail:has(b)</code>
+ </div>
+
+<div id="a12" class="tile">
+ <div class="pass"><div class="fail"></div><a></a><b></b></div>
+ <code>^#phf #a12 .fail:has(+ a)</code>
+ </div>
+
+<div id="a13" class="tile">
+ <div class="pass"><div class="fail"></div><a><b></b></a></div>
+ <code>^#phf #a13 .fail:has(~ a:has(b))</code>
+ </div>
+
+<div id="a14" class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code>^#phf #a14 b:upward(2)</code>
+ </div>
+
+<div id="a15" class="tile">
+ <div class="pass"><div class="fail"><a><b></b></a></div></div>
+ <code>^#phf #a15 b:upward(.fail)</code>
+ </div>
+
+</div>
+
+<script>
+ const hostname = self.location.hostname;
+ const filters = [];
+ const fragment = document.createDocumentFragment();
+ for ( const node of document.querySelectorAll('code') ) {
+ const div = document.createElement('div');
+ div.textContent = `${hostname}##${node.textContent}`;
+ fragment.appendChild(div);
+ }
+ const parent = document.querySelector('.filters');
+ while ( parent.lastElementChild !== null ) {
+ parent.removeChild(parent.lastElementChild);
+ }
+ parent.appendChild(fragment);
+</script>
+</body>
+</html>
diff --git a/docs/tests/scriptlet-injection-filters-1.html b/docs/tests/scriptlet-injection-filters-1.html
new file mode 100644
index 0000000..61368c9
--- /dev/null
+++ b/docs/tests/scriptlet-injection-filters-1.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>Scriptlet injection filters / no-setTimeout-if</title>
+<style>
+ .filters {
+ font-family: monospace;
+ white-space: pre;
+ }
+ .filters td > b {
+ display: inline-block;
+ height: 1em;
+ margin-left: 2px;
+ width: 2em;
+ }
+ .filters td > b.G {
+ background-color: green;
+ }
+ .filters td > b.R {
+ background-color: red;
+ }
+ .tests {
+ align-items: flex-start;
+ display: flex;
+ flex-wrap: wrap;
+ }
+ .tile {
+ display: inline-flex;
+ flex-direction: column;
+ margin: 0 20px 10px 0;
+ min-width: 200px;
+ }
+ .tile div {
+ align-items: center;
+ color: white;
+ display: flex;
+ justify-content: center;
+ }
+ .tile > div {
+ height: 50px;
+ position: relative;
+ }
+ .tile > div > div {
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+ }
+ .tile > code {
+ align-self: center;
+ }
+ .cell.bad {
+ background-color: red;
+ }
+ .cell.bad.notexecuted {
+ background-color: green;
+ }
+ .cell.good {
+ background-color: green;
+ }
+ .cell.good.notexecuted {
+ background-color: red;
+ }
+ .cell::before {
+ content: 'executed';
+ }
+ .cell.notexecuted::before {
+ content: 'not executed';
+ }
+</style>
+</head>
+<body>
+<h1>Scriptlet injection filters / no-setTimeout-if</h1>
+<p><a href="./.">Back</a>
+<br><br></p>
+<h3>Filters</h3>
+<p>The filters below must be tried one by one, not all at the same
+time. When you try a filter, ensure the result is what is expected.</p>
+<noscript>Enable JavaScript to see needed filter</noscript>
+<table class="filters">
+<tr><th>Filter<th>Expected
+<tr><td>None<td><b class="R">&nbsp;</b><b class="R">&nbsp;</b><b class="G">&nbsp;</b><b class="G">&nbsp;</b>
+</table>
+
+<h3>Results</h3>
+<div id="sif" class="tests">
+
+<script>
+ function createSetTimeout(fn, delay) {
+ self.addEventListener('load', ( ) => {
+ self.setTimeout(fn, delay)
+ });
+ }
+ function removeClass(sel, cls) {
+ document.querySelector(sel).classList.remove(cls);
+ }
+</script>
+
+
+<div id="a1" class="tile">
+ <div class="cell bad notexecuted"></div>
+ <code>bad, 33</code>
+ <script>
+ createSetTimeout(
+ function() {
+ 'bad';
+ removeClass('#a1 .cell', 'notexecuted');
+ },
+ 33
+ );
+ </script>
+ </div>
+
+<div id="a2" class="tile">
+ <div class="cell bad notexecuted"></div>
+ <code>bad, 66</code>
+ <script>
+ createSetTimeout(
+ function() {
+ 'bad';
+ removeClass('#a2 .cell', 'notexecuted');
+ },
+ 66
+ );
+ </script>
+ </div>
+
+<div id="a3" class="tile">
+ <div class="cell good notexecuted"></div>
+ <code>good, 33</code>
+ <script>
+ createSetTimeout(
+ function() {
+ 'good';
+ removeClass('#a3 .cell', 'notexecuted');
+ },
+ 33
+ );
+ </script>
+ </div>
+
+<div id="a4" class="tile">
+ <div class="cell good notexecuted"></div>
+ <code>good, 66</code>
+ <script>
+ createSetTimeout(
+ function() {
+ 'good';
+ removeClass('#a4 .cell', 'notexecuted');
+ },
+ 66
+ );
+ </script>
+ </div>
+
+</div>
+
+<script>
+ const hostname = self.location.hostname;
+ const fragment = document.createDocumentFragment();
+ const filters = [
+ [ [ 'bad' ], 'GGGG' ],
+ [ [ '!good' ], 'GGGG' ],
+ [ [ '', '33' ], 'GRRG' ],
+ [ [ '', '!66' ], 'GRRG' ],
+ [ [ 'bad', '33' ], 'GRGG' ],
+ [ [ '!good', '!66' ], 'GRGG' ],
+ [ [ 'bad', '!33' ], 'RGGG' ],
+ [ [ '!good', '66' ], 'RGGG' ],
+ [ [ '!bad', '33' ], 'RRRG' ],
+ [ [ 'good', '!66' ], 'RRRG' ],
+ ];
+ for ( const [ args, result ] of filters ) {
+ const tr = document.createElement('tr');
+ let td = document.createElement('td');
+ td.textContent = `${hostname}##+js(nostif, ${args.join(', ')})`;
+ tr.appendChild(td);
+ td = document.createElement('td');
+ for ( let i = 0; i < result.length; i++ ) {
+ const b = document.createElement('b');
+ b.className = result.charAt(i);
+ b.textContent = '\xA0';
+ td.appendChild(b);
+ }
+ tr.appendChild(td);
+ fragment.appendChild(tr);
+ }
+ document.querySelector('.filters').appendChild(fragment);
+</script>
+</body>
+</html>
diff --git a/docs/tests/static-filtering-parser-checklist.txt b/docs/tests/static-filtering-parser-checklist.txt
new file mode 100644
index 0000000..c77baf2
--- /dev/null
+++ b/docs/tests/static-filtering-parser-checklist.txt
@@ -0,0 +1,123 @@
+! Title: Static Filtering Parser Checklist
+! Homepage: https://github.com/gorhill/uBlock
+! Licence: https://github.com/gorhill/uBlock/blob/master/LICENSE.txt
+!
+! Description:
+! To verify that the static filtering parser is properly parsing valid and
+! invalid cases, by typically adding the list to uBO, disabling the list,
+! and viewing it in uBO's asset viewer.
+!
+! Feel free to add more entries to more thoroughly validate the static
+! filtering parser, submit the changes in your fork of uBO by opening an
+! issue at https://github.com/uBlockOrigin/uBlock-issues/issues
+
+
+
+
+!-----------------------
+! Parsing should succeed
+!-----------------------
+
+! valid patterns
+a*
+*$xhr
+|*$xhr
+|$xhr
+||*$xhr
+||$xhr
+||*|$xhr
+
+! valid hosts file entries
+:: ab
+:: AB
+:: ab # comment
+
+! valid hosts file entries
+0.0.0.0 0.0.0.0.example.com
+0.0.0.0 localhost.example.com
+0.0.0.0 local-host.example.com
+0.0.0.0 local.com
+0.0.0.0 localhost.com
+0.0.0.0 local-host.com
+
+! valid options
+$script,redirect=noop.js
+*$redirect=noop.js
+*$empty
+*$xhr,empty
+*$xhr,redirect=empty
+
+*$csp=default-src 'none'
+
+*$all,~document
+*$all,~popup
+*$all,~inline-script
+*$all,~inline-font
+
+! valid domain option values
+*$domain=toto.com|toto.*|~toto.com|~toto.*|tôtó.ça|tôtó.*|~tôtó.ça|[ff00::0]|1.1.1.1
+
+! valid denyallow option values
+*$denyallow=toto.com|tôtó.ça|[ff00::0]|1.1.1.1,domain=toto.com
+
+
+
+
+!--------------------
+! Parsing should fail
+!--------------------
+
+! bad patterns
+a
+|
+||
+$
+*
+|*
+||*
+||*|
+
+! bad hosts file entries
+:: a
+:: ab/
+:: ab/ # comment
+::/ ab
+:: ab$
+
+! ignored hosts file entries
+0.0.0.0 0.0.0.0
+0.0.0.0 local
+0.0.0.0 localhost
+
+! bad regex
+/(abc|def/$xhr
+
+! non-redirectable types
+*$beacon,redirect-rule=empty
+*$ping,redirect-rule=empty
+*$websocket,redirect-rule=empty
+*$ghide,redirect=noop.js
+
+! can't mix csp with other types or redirect directives
+*$csp=default-src 'none',empty
+*$csp=default-src 'none',redirect=empty
+*$redirect=empty,csp=default-src 'none'
+*$csp=default-src 'none',xhr
+*$csp=default-src 'none',ghide
+*$csp=default-src 'none',csp=script-src 'none'
+
+! https://github.com/gorhill/uBlock/issues/2385#issuecomment-494078763
+*$~document
+*$~popup
+*$~inline-script
+*$~inline-font
+
+! invalidity of IP addresses is browser-dependent
+! invalid domain= option values
+*$domain=.toto.com|toto.com.|[ff00::00000]|1.1.1.1111
+
+! invalid denyallow= option values
+*$denyallow=.toto.com|toto.com.|toto.*|~toto.com|~toto.*|[ff00::00000]|1.1.1.1111,domain=toto.com
+
+! denyallow= requires a domain= option
+*$script,denyallow=toto.com
diff --git a/platform/browser/main.js b/platform/browser/main.js
new file mode 100644
index 0000000..d6f6acb
--- /dev/null
+++ b/platform/browser/main.js
@@ -0,0 +1,123 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import publicSuffixList from './lib/publicsuffixlist/publicsuffixlist.js';
+import punycode from './lib/punycode.js';
+
+import staticNetFilteringEngine from './js/static-net-filtering.js';
+import { FilteringContext } from './js/filtering-context.js';
+import { LineIterator } from './js/text-utils.js';
+import * as sfp from './js/static-filtering-parser.js';
+
+import {
+ CompiledListReader,
+ CompiledListWriter
+} from './js/static-filtering-io.js';
+
+/******************************************************************************/
+
+function compileList(rawText, writer) {
+ const lineIter = new LineIterator(rawText);
+ const parser = new sfp.AstFilterParser({
+ interactive: true,
+ maxTokenLength: staticNetFilteringEngine.MAX_TOKEN_LENGTH,
+ });
+ const compiler = staticNetFilteringEngine.createCompiler();
+
+ while ( lineIter.eot() === false ) {
+ let line = lineIter.next();
+
+ while ( line.endsWith(' \\') ) {
+ if ( lineIter.peek(4) !== ' ' ) { break; }
+ line = line.slice(0, -2).trim() + lineIter.next().trim();
+ }
+ parser.parse(line);
+
+ if ( parser.isFilter() === false ) { continue; }
+ if ( parser.isNetworkFilter() === false ) { continue; }
+ if ( compiler.compile(parser, writer) ) { continue; }
+ if ( compiler.error !== undefined ) {
+ console.info(JSON.stringify({
+ realm: 'message',
+ type: 'error',
+ text: compiler.error
+ }));
+ }
+ }
+
+ return writer.toString();
+}
+
+function applyList(name, raw) {
+ const writer = new CompiledListWriter();
+ writer.properties.set('name', name);
+ const compiled = compileList(raw, writer);
+ const reader = new CompiledListReader(compiled);
+ staticNetFilteringEngine.fromCompiled(reader);
+}
+
+function enableWASM(path) {
+ return Promise.all([
+ publicSuffixList.enableWASM(`${path}/lib/publicsuffixlist`),
+ staticNetFilteringEngine.enableWASM(`${path}/js`),
+ ]);
+}
+
+function pslInit(raw) {
+ if ( typeof raw !== 'string' || raw.trim() === '' ) {
+ console.info('Unable to populate public suffix list');
+ return;
+ }
+ publicSuffixList.parse(raw, punycode.toASCII);
+ console.info('Public suffix list populated');
+}
+
+function restart(lists) {
+ // Remove all filters
+ reset();
+
+ if ( Array.isArray(lists) && lists.length !== 0 ) {
+ // Populate filtering engine with filter lists
+ for ( const { name, raw } of lists ) {
+ applyList(name, raw);
+ }
+ // Commit changes
+ staticNetFilteringEngine.freeze();
+ staticNetFilteringEngine.optimize();
+ }
+
+ return staticNetFilteringEngine;
+}
+
+function reset() {
+ staticNetFilteringEngine.reset();
+}
+
+export {
+ FilteringContext,
+ enableWASM,
+ pslInit,
+ restart,
+};
diff --git a/platform/browser/test.html b/platform/browser/test.html
new file mode 100644
index 0000000..32b1aba
--- /dev/null
+++ b/platform/browser/test.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>uBO Static Network Filtering Engine</title>
+</head>
+<body>
+<script type="module">
+ import {
+ FilteringContext,
+ enableWASM,
+ pslInit,
+ restart,
+ } from './main.js';
+
+ (async ( ) => {
+ await enableWASM('.');
+
+ await fetch('./data/effective_tld_names.dat').then(response => {
+ return response.text();
+ }).then(pslRaw => {
+ pslInit(pslRaw);
+ });
+
+ const snfe = await Promise.all([
+ fetch('./data/easylist.txt').then(response => {
+ return response.text();
+ }),
+ fetch('./data/easyprivacy.txt').then(response => {
+ return response.text();
+ }),
+ ]).then(rawLists => {
+ return restart([
+ { name: 'easylist', raw: rawLists[0] },
+ { name: 'easyprivacy', raw: rawLists[1] },
+ ]);
+ });
+
+ // Reuse filtering context: it's what uBO does
+ const fctxt = new FilteringContext();
+
+ // Tests
+ // Not blocked
+ fctxt.setDocOriginFromURL('https://www.bloomberg.com/');
+ fctxt.setURL('https://www.bloomberg.com/tophat/assets/v2.6.1/that.css');
+ fctxt.setType('stylesheet');
+ if ( snfe.matchRequest(fctxt) !== 0 ) {
+ console.log(snfe.toLogData());
+ }
+
+ // Blocked
+ fctxt.setDocOriginFromURL('https://www.bloomberg.com/');
+ fctxt.setURL('https://securepubads.g.doubleclick.net/tag/js/gpt.js');
+ fctxt.setType('script');
+ if ( snfe.matchRequest(fctxt) !== 0 ) {
+ console.log(snfe.toLogData());
+ }
+
+ // Unblocked
+ fctxt.setDocOriginFromURL('https://www.bloomberg.com/');
+ fctxt.setURL('https://sourcepointcmp.bloomberg.com/ccpa.js');
+ fctxt.setType('script');
+ if ( snfe.matchRequest(fctxt) !== 0 ) {
+ console.log(snfe.toLogData());
+ }
+
+ restart();
+ })();
+</script>
+</body>
+</html>
diff --git a/platform/chromium/is-webrtc-supported.html b/platform/chromium/is-webrtc-supported.html
new file mode 100644
index 0000000..d30b674
--- /dev/null
+++ b/platform/chromium/is-webrtc-supported.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title></title>
+<script async src="js/is-webrtc-supported.js"></script>
+</head>
+<body></body>
+</html>
diff --git a/platform/chromium/is-webrtc-supported.js b/platform/chromium/is-webrtc-supported.js
new file mode 100644
index 0000000..8841370
--- /dev/null
+++ b/platform/chromium/is-webrtc-supported.js
@@ -0,0 +1,52 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015 Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+// https://github.com/gorhill/uBlock/issues/533#issuecomment-164292868
+// If WebRTC is supported, there won't be an exception if we
+// try to instantiate a peer connection object.
+
+// https://github.com/gorhill/uBlock/issues/533#issuecomment-168097594
+// Because Chromium leaks WebRTC connections after they have been closed
+// and forgotten, we need to test for WebRTC support inside an iframe, this
+// way the closed and forgottetn WebRTC connections are properly garbage
+// collected.
+
+(function() {
+ 'use strict';
+
+ var pc = null;
+ try {
+ var PC = self.RTCPeerConnection || self.webkitRTCPeerConnection;
+ if ( PC ) {
+ pc = new PC(null);
+ }
+ } catch (ex) {
+ console.error(ex);
+ }
+ if ( pc !== null ) {
+ pc.close();
+ }
+
+ window.top.postMessage(
+ pc !== null ? 'webRTCSupported' : 'webRTCNotSupported',
+ window.location.origin
+ );
+})();
diff --git a/platform/chromium/manifest.json b/platform/chromium/manifest.json
new file mode 100644
index 0000000..28ceec5
--- /dev/null
+++ b/platform/chromium/manifest.json
@@ -0,0 +1,115 @@
+{
+ "author": "Raymond Hill & contributors",
+ "background": {
+ "page": "background.html"
+ },
+ "browser_action": {
+ "default_icon": {
+ "16": "img/icon_16.png",
+ "32": "img/icon_32.png",
+ "64": "img/icon_64.png"
+ },
+ "default_title": "uBlock Origin",
+ "default_popup": "popup-fenix.html"
+ },
+ "commands": {
+ "launch-element-zapper": {
+ "description": "__MSG_popupTipZapper__"
+ },
+ "launch-element-picker": {
+ "description": "__MSG_popupTipPicker__"
+ },
+ "launch-logger": {
+ "description": "__MSG_popupTipLog__"
+ },
+ "open-dashboard": {
+ "description": "__MSG_popupTipDashboard__"
+ },
+ "relax-blocking-mode": {
+ "description": "__MSG_relaxBlockingMode__"
+ },
+ "toggle-cosmetic-filtering": {
+ "description": "__MSG_toggleCosmeticFiltering__"
+ }
+ },
+ "content_scripts": [
+ {
+ "matches": [
+ "http://*/*",
+ "https://*/*"
+ ],
+ "js": [
+ "/js/vapi.js",
+ "/js/vapi-client.js",
+ "/js/contentscript.js"
+ ],
+ "all_frames": true,
+ "match_about_blank": true,
+ "run_at": "document_start"
+ },
+ {
+ "matches": [
+ "https://easylist.to/*",
+ "https://*.fanboy.co.nz/*",
+ "https://filterlists.com/*",
+ "https://forums.lanik.us/*",
+ "https://github.com/*",
+ "https://*.github.io/*",
+ "https://*.letsblock.it/*"
+ ],
+ "js": [
+ "/js/scriptlets/subscriber.js"
+ ],
+ "run_at": "document_idle",
+ "all_frames": false
+ },
+ {
+ "matches": [
+ "https://github.com/uBlockOrigin/*",
+ "https://ublockorigin.github.io/*",
+ "https://*.reddit.com/r/uBlockOrigin/*"
+ ],
+ "js": [
+ "/js/scriptlets/updater.js"
+ ],
+ "run_at": "document_idle",
+ "all_frames": false
+ }
+ ],
+ "content_security_policy": "script-src 'self'; object-src 'self'",
+ "default_locale": "en",
+ "description": "__MSG_extShortDesc__",
+ "icons": {
+ "16": "img/icon_16.png",
+ "32": "img/icon_32.png",
+ "64": "img/icon_64.png",
+ "128": "img/icon_128.png"
+ },
+ "incognito": "split",
+ "manifest_version": 2,
+ "minimum_chrome_version": "73.0",
+ "name": "uBlock Origin",
+ "options_ui": {
+ "page": "dashboard.html",
+ "open_in_tab": true
+ },
+ "permissions": [
+ "contextMenus",
+ "privacy",
+ "storage",
+ "tabs",
+ "unlimitedStorage",
+ "webNavigation",
+ "webRequest",
+ "webRequestBlocking",
+ "<all_urls>"
+ ],
+ "short_name": "uBlock₀",
+ "storage": {
+ "managed_schema": "managed_storage.json"
+ },
+ "version": "1.15.11.0",
+ "web_accessible_resources": [
+ "/web_accessible_resources/*"
+ ]
+}
diff --git a/platform/chromium/vapi-background-ext.js b/platform/chromium/vapi-background-ext.js
new file mode 100644
index 0000000..29de305
--- /dev/null
+++ b/platform/chromium/vapi-background-ext.js
@@ -0,0 +1,254 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2017-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* globals browser */
+
+'use strict';
+
+/******************************************************************************/
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/1659
+// Chromium fails to dispatch onCreatedNavigationTarget() events sometimes,
+// so we synthetize these missing events when this happens.
+// https://github.com/uBlockOrigin/uAssets/issues/10323
+// Also mind whether the new tab is launched from an external application.
+
+vAPI.Tabs = class extends vAPI.Tabs {
+ constructor() {
+ super();
+ this.tabIds = new Set();
+ browser.tabs.onCreated.addListener(tab => {
+ this.onCreatedHandler(tab);
+ });
+ }
+
+ onCreatedHandler(tab) {
+ if ( typeof tab.openerTabId === 'number' ) { return; }
+ if ( tab.index !== 0 ) { return; }
+ if ( tab.url !== '' ) { return; }
+ this.tabIds.add(tab.id);
+ }
+
+ onCreatedNavigationTargetHandler(details) {
+ this.tabIds.delete(details.tabId);
+ super.onCreatedNavigationTargetHandler(details);
+ }
+
+ onCommittedHandler(details) {
+ if ( details.frameId === 0 ) {
+ this.synthesizeNavigationTargetEvent(details);
+ }
+ super.onCommittedHandler(details);
+ }
+
+ onRemovedHandler(tabId, details) {
+ this.tabIds.delete(tabId);
+ super.onRemovedHandler(tabId, details);
+ }
+
+ synthesizeNavigationTargetEvent(details) {
+ if ( this.tabIds.has(details.tabId) === false ) { return; }
+ this.tabIds.delete(details.tabId);
+ const isClientRedirect =
+ Array.isArray(details.transitionQualifiers) &&
+ details.transitionQualifiers.includes('client_redirect');
+ const isStartPage = details.transitionType === 'start_page';
+ if ( isClientRedirect === false && isStartPage === false ) { return; }
+ this.onCreatedNavigationTargetHandler({
+ tabId: details.tabId,
+ sourceTabId: details.tabId,
+ sourceFrameId: 0,
+ url: details.url,
+ });
+ }
+};
+
+/******************************************************************************/
+
+{
+ const extToTypeMap = new Map([
+ ['eot','font'],['otf','font'],['svg','font'],['ttf','font'],['woff','font'],['woff2','font'],
+ ['mp3','media'],['mp4','media'],['webm','media'],
+ ['gif','image'],['ico','image'],['jpeg','image'],['jpg','image'],['png','image'],['webp','image']
+ ]);
+
+ const headerValue = (headers, name) => {
+ let i = headers.length;
+ while ( i-- ) {
+ if ( headers[i].name.toLowerCase() === name ) {
+ return headers[i].value.trim();
+ }
+ }
+ return '';
+ };
+
+ const parsedURL = new URL('https://www.example.org/');
+
+ // Extend base class to normalize as per platform.
+
+ vAPI.Net = class extends vAPI.Net {
+ normalizeDetails(details) {
+ // Chromium 63+ supports the `initiator` property, which contains
+ // the URL of the origin from which the network request was made.
+ if (
+ typeof details.initiator === 'string' &&
+ details.initiator !== 'null'
+ ) {
+ details.documentUrl = details.initiator;
+ }
+
+ let type = details.type;
+
+ if ( type === 'imageset' ) {
+ details.type = 'image';
+ return;
+ }
+
+ // The rest of the function code is to normalize type
+ if ( type !== 'other' ) { return; }
+
+ // Try to map known "extension" part of URL to request type.
+ parsedURL.href = details.url;
+ const path = parsedURL.pathname,
+ pos = path.indexOf('.', path.length - 6);
+ if ( pos !== -1 && (type = extToTypeMap.get(path.slice(pos + 1))) ) {
+ details.type = type;
+ return;
+ }
+
+ // Try to extract type from response headers if present.
+ if ( details.responseHeaders ) {
+ type = headerValue(details.responseHeaders, 'content-type');
+ if ( type.startsWith('font/') ) {
+ details.type = 'font';
+ return;
+ }
+ if ( type.startsWith('image/') ) {
+ details.type = 'image';
+ return;
+ }
+ if ( type.startsWith('audio/') || type.startsWith('video/') ) {
+ details.type = 'media';
+ return;
+ }
+ }
+ }
+
+ // https://www.reddit.com/r/uBlockOrigin/comments/9vcrk3/
+ // Some types can be mapped from 'other', thus include 'other' if and
+ // only if the caller is interested in at least one of those types.
+ denormalizeTypes(types) {
+ if ( types.length === 0 ) {
+ return Array.from(this.validTypes);
+ }
+ const out = new Set();
+ for ( const type of types ) {
+ if ( this.validTypes.has(type) ) {
+ out.add(type);
+ }
+ }
+ if ( out.has('other') === false ) {
+ for ( const type of extToTypeMap.values() ) {
+ if ( out.has(type) ) {
+ out.add('other');
+ break;
+ }
+ }
+ }
+ return Array.from(out);
+ }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/2063
+ // Do not interfere with root document
+ suspendOneRequest(details) {
+ this.onBeforeSuspendableRequest(details);
+ if ( details.type === 'main_frame' ) { return; }
+ return { cancel: true };
+ }
+
+ unsuspendAllRequests(discard = false) {
+ if ( discard === true ) { return; }
+ const toReload = [];
+ for ( const tabId of this.unprocessedTabs.keys() ) {
+ toReload.push(tabId);
+ }
+ this.removeUnprocessedRequest();
+ for ( const tabId of toReload ) {
+ vAPI.tabs.reload(tabId);
+ }
+ }
+ };
+}
+
+/******************************************************************************/
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/548
+// Use `X-DNS-Prefetch-Control` to workaround Chromium's disregard of the
+// setting "Predict network actions to improve page load performance".
+
+vAPI.prefetching = (( ) => {
+ let listening = false;
+
+ const onHeadersReceived = function(details) {
+ details.responseHeaders.push({
+ name: 'X-DNS-Prefetch-Control',
+ value: 'off'
+ });
+ return { responseHeaders: details.responseHeaders };
+ };
+
+ return state => {
+ const wr = chrome.webRequest;
+ if ( state && listening ) {
+ wr.onHeadersReceived.removeListener(onHeadersReceived);
+ listening = false;
+ } else if ( !state && !listening ) {
+ wr.onHeadersReceived.addListener(
+ onHeadersReceived,
+ {
+ urls: [ 'http://*/*', 'https://*/*' ],
+ types: [ 'main_frame', 'sub_frame' ]
+ },
+ [ 'blocking', 'responseHeaders' ]
+ );
+ listening = true;
+ }
+ };
+})();
+
+/******************************************************************************/
+
+vAPI.scriptletsInjector = ((doc, details) => {
+ let script;
+ try {
+ script = doc.createElement('script');
+ script.appendChild(doc.createTextNode(details.scriptlets));
+ (doc.head || doc.documentElement).appendChild(script);
+ self.uBO_scriptletsInjected = details.filters;
+ } catch (ex) {
+ }
+ if ( script ) {
+ script.remove();
+ script.textContent = '';
+ }
+}).toString();
+
+/******************************************************************************/
diff --git a/platform/chromium/webext.js b/platform/chromium/webext.js
new file mode 100644
index 0000000..851b653
--- /dev/null
+++ b/platform/chromium/webext.js
@@ -0,0 +1,164 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+// `webext` is a promisified api of `chrome`. Entries are added as
+// the promisification of uBO progress.
+
+const promisifyNoFail = function(thisArg, fnName, outFn = r => r) {
+ const fn = thisArg[fnName];
+ return function() {
+ return new Promise(resolve => {
+ fn.call(thisArg, ...arguments, function() {
+ if ( chrome.runtime.lastError instanceof Object ) {
+ void chrome.runtime.lastError.message;
+ }
+ resolve(outFn(...arguments));
+ });
+ });
+ };
+};
+
+const promisify = function(thisArg, fnName) {
+ const fn = thisArg[fnName];
+ return function() {
+ return new Promise((resolve, reject) => {
+ fn.call(thisArg, ...arguments, function() {
+ const lastError = chrome.runtime.lastError;
+ if ( lastError instanceof Object ) {
+ return reject(lastError.message);
+ }
+ resolve(...arguments);
+ });
+ });
+ };
+};
+
+const webext = {
+ // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserAction
+ browserAction: {
+ setBadgeBackgroundColor: promisifyNoFail(chrome.browserAction, 'setBadgeBackgroundColor'),
+ setBadgeText: promisifyNoFail(chrome.browserAction, 'setBadgeText'),
+ setIcon: promisifyNoFail(chrome.browserAction, 'setIcon'),
+ setTitle: promisifyNoFail(chrome.browserAction, 'setTitle'),
+ },
+ // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/menus
+ menus: {
+ create: function() {
+ return chrome.contextMenus.create(...arguments, ( ) => {
+ void chrome.runtime.lastError;
+ });
+ },
+ onClicked: chrome.contextMenus.onClicked,
+ remove: promisifyNoFail(chrome.contextMenus, 'remove'),
+ removeAll: promisifyNoFail(chrome.contextMenus, 'removeAll'),
+ },
+ // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/privacy
+ privacy: {
+ },
+ // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage
+ storage: {
+ // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/local
+ local: {
+ clear: promisify(chrome.storage.local, 'clear'),
+ get: promisify(chrome.storage.local, 'get'),
+ getBytesInUse: promisify(chrome.storage.local, 'getBytesInUse'),
+ remove: promisify(chrome.storage.local, 'remove'),
+ set: promisify(chrome.storage.local, 'set'),
+ },
+ },
+ // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs
+ tabs: {
+ get: promisifyNoFail(chrome.tabs, 'get', tab => tab instanceof Object ? tab : null),
+ executeScript: promisifyNoFail(chrome.tabs, 'executeScript'),
+ insertCSS: promisifyNoFail(chrome.tabs, 'insertCSS'),
+ removeCSS: promisifyNoFail(chrome.tabs, 'removeCSS'),
+ query: promisifyNoFail(chrome.tabs, 'query', tabs => Array.isArray(tabs) ? tabs : []),
+ reload: promisifyNoFail(chrome.tabs, 'reload'),
+ remove: promisifyNoFail(chrome.tabs, 'remove'),
+ update: promisifyNoFail(chrome.tabs, 'update', tab => tab instanceof Object ? tab : null),
+ },
+ // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webNavigation
+ webNavigation: {
+ getFrame: promisify(chrome.webNavigation, 'getFrame'),
+ getAllFrames: promisify(chrome.webNavigation, 'getAllFrames'),
+ },
+ // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/windows
+ windows: {
+ get: promisifyNoFail(chrome.windows, 'get', win => win instanceof Object ? win : null),
+ create: promisifyNoFail(chrome.windows, 'create', win => win instanceof Object ? win : null),
+ update: promisifyNoFail(chrome.windows, 'update', win => win instanceof Object ? win : null),
+ },
+};
+
+// browser.privacy entries
+{
+ const settings = [
+ // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/privacy/network
+ [ 'network', 'networkPredictionEnabled' ],
+ [ 'network', 'webRTCIPHandlingPolicy' ],
+ // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/privacy/websites
+ [ 'websites', 'hyperlinkAuditingEnabled' ],
+ ];
+ for ( const [ category, setting ] of settings ) {
+ let categoryEntry = webext.privacy[category];
+ if ( categoryEntry instanceof Object === false ) {
+ categoryEntry = webext.privacy[category] = {};
+ }
+ const settingEntry = categoryEntry[setting] = {};
+ const thisArg = chrome.privacy[category][setting];
+ settingEntry.clear = promisifyNoFail(thisArg, 'clear');
+ settingEntry.get = promisifyNoFail(thisArg, 'get');
+ settingEntry.set = promisifyNoFail(thisArg, 'set');
+ }
+}
+
+// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/managed
+if ( chrome.storage.managed instanceof Object ) {
+ webext.storage.managed = {
+ get: promisify(chrome.storage.managed, 'get'),
+ };
+}
+
+// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/sync
+if ( chrome.storage.sync instanceof Object ) {
+ webext.storage.sync = {
+ QUOTA_BYTES: chrome.storage.sync.QUOTA_BYTES,
+ QUOTA_BYTES_PER_ITEM: chrome.storage.sync.QUOTA_BYTES_PER_ITEM,
+ MAX_ITEMS: chrome.storage.sync.MAX_ITEMS,
+ MAX_WRITE_OPERATIONS_PER_HOUR: chrome.storage.sync.MAX_WRITE_OPERATIONS_PER_HOUR,
+ MAX_WRITE_OPERATIONS_PER_MINUTE: chrome.storage.sync.MAX_WRITE_OPERATIONS_PER_MINUTE,
+
+ clear: promisify(chrome.storage.sync, 'clear'),
+ get: promisify(chrome.storage.sync, 'get'),
+ getBytesInUse: promisify(chrome.storage.sync, 'getBytesInUse'),
+ remove: promisify(chrome.storage.sync, 'remove'),
+ set: promisify(chrome.storage.sync, 'set'),
+ };
+}
+
+// https://bugs.chromium.org/p/chromium/issues/detail?id=608854
+if ( chrome.tabs.removeCSS instanceof Function ) {
+ webext.tabs.removeCSS = promisifyNoFail(chrome.tabs, 'removeCSS');
+}
+
+export default webext;
diff --git a/platform/common/managed_storage.json b/platform/common/managed_storage.json
new file mode 100644
index 0000000..25614dd
--- /dev/null
+++ b/platform/common/managed_storage.json
@@ -0,0 +1,73 @@
+{
+ "$schema": "http://json-schema.org/draft-03/schema#",
+ "type": "object",
+ "properties": {
+ "adminSettings": {
+ "title": "A valid JSON string compliant with uBO's backup format",
+ "description": "All entries present will overwrite local settings.",
+ "type": "string"
+ },
+ "advancedSettings": {
+ "title": "A list of [name,value] pairs to populate advanced settings",
+ "type": "array",
+ "items": {
+ "title": "A [name,value] pair",
+ "type": "array",
+ "items": { "type": "string" }
+ }
+ },
+ "userSettings": {
+ "title": "A list of [name,value] pairs to populate user settings",
+ "type": "array",
+ "items": {
+ "title": "A [name,value] pair",
+ "type": "array",
+ "items": { "type": "string" }
+ }
+ },
+ "disableDashboard": {
+ "title": "Set to true to prevent access to configuration options",
+ "type": "boolean"
+ },
+ "disabledPopupPanelParts": {
+ "title": "An array of strings used to remove parts of the popup panel",
+ "type": "array",
+ "items": { "type": "string" }
+ },
+ "toAdd": {
+ "title": "Settings to add at launch time",
+ "type": "object",
+ "properties": {
+ "trustedSiteDirectives": {
+ "title": "A list of trusted-site directives",
+ "description": "Trusted-site directives to always add at launch time.",
+ "type": "array",
+ "items": { "type": "string" }
+ }
+ }
+ },
+ "toOverwrite": {
+ "title": "Settings to overwrite at launch time",
+ "type": "object",
+ "properties": {
+ "filters": {
+ "title": "A collection of filters",
+ "description": "The set of user filters to use at launch time -- where each entry is a distinct line.",
+ "type": "array",
+ "items": { "type": "string" }
+ },
+ "filterLists": {
+ "title": "A collection of list identifiers and/or list URLs",
+ "description": "The set of filter lists to use at launch time.",
+ "type": "array",
+ "items": { "type": "string" }
+ },
+ "trustedSiteDirectives": {
+ "title": "A list of trusted-site directives",
+ "type": "array",
+ "items": { "type": "string" }
+ }
+ }
+ }
+ }
+}
diff --git a/platform/common/vapi-background.js b/platform/common/vapi-background.js
new file mode 100644
index 0000000..0d6fcdd
--- /dev/null
+++ b/platform/common/vapi-background.js
@@ -0,0 +1,1811 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-2015 The uBlock Origin authors
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+// For background page
+
+/* globals browser */
+
+'use strict';
+
+/******************************************************************************/
+
+import webext from './webext.js';
+import { ubolog } from './console.js';
+
+/******************************************************************************/
+
+const manifest = browser.runtime.getManifest();
+
+vAPI.cantWebsocket =
+ browser.webRequest.ResourceType instanceof Object === false ||
+ browser.webRequest.ResourceType.WEBSOCKET !== 'websocket';
+
+vAPI.canWASM = vAPI.webextFlavor.soup.has('chromium') === false;
+if ( vAPI.canWASM === false ) {
+ const csp = manifest.content_security_policy;
+ vAPI.canWASM = csp !== undefined && csp.indexOf("'wasm-unsafe-eval'") !== -1;
+}
+
+vAPI.supportsUserStylesheets = vAPI.webextFlavor.soup.has('user_stylesheet');
+
+/******************************************************************************/
+
+vAPI.app = {
+ name: manifest.name.replace(/ dev\w+ build/, ''),
+ version: (( ) => {
+ let version = manifest.version;
+ const match = /(\d+\.\d+\.\d+)(?:\.(\d+))?/.exec(version);
+ if ( match && match[2] ) {
+ const v = parseInt(match[2], 10);
+ version = match[1] + (v < 100 ? 'b' + v : 'rc' + (v - 100));
+ }
+ return version;
+ })(),
+
+ intFromVersion: function(s) {
+ const parts = s.match(/(?:^|\.|b|rc)\d+/g);
+ if ( parts === null ) { return 0; }
+ let vint = 0;
+ for ( let i = 0; i < 4; i++ ) {
+ const pstr = parts[i] || '';
+ let pint;
+ if ( pstr === '' ) {
+ pint = 0;
+ } else if ( pstr.startsWith('.') || pstr.startsWith('b') ) {
+ pint = parseInt(pstr.slice(1), 10);
+ } else if ( pstr.startsWith('rc') ) {
+ pint = parseInt(pstr.slice(2), 10) + 100;
+ } else {
+ pint = parseInt(pstr, 10);
+ }
+ vint = vint * 1000 + pint;
+ }
+ return vint;
+ },
+
+ restart: function() {
+ browser.runtime.reload();
+ },
+};
+
+/*******************************************************************************
+ *
+ * https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/storage/session
+ *
+ * Session (in-memory) storage is promise-based in all browsers, no need for
+ * a webext polyfill. However, not all browsers supports it in MV2.
+ *
+ * */
+
+vAPI.sessionStorage = {
+ get() {
+ return Promise.resolve({});
+ },
+ set() {
+ return Promise.resolve();
+ },
+ remove() {
+ return Promise.resolve();
+ },
+ clear() {
+ return Promise.resolve();
+ },
+ implemented: false,
+};
+
+/*******************************************************************************
+ *
+ * Data written to and read from storage.local will be mirrored to in-memory
+ * storage.session.
+ *
+ * Data read from storage.local will be first fetched from storage.session,
+ * then if not available, read from storage.local.
+ *
+ * */
+
+vAPI.storage = {
+ get(key, ...args) {
+ if ( vAPI.sessionStorage.implemented !== true ) {
+ return webext.storage.local.get(key, ...args).catch(reason => {
+ console.log(reason);
+ });
+ }
+ return vAPI.sessionStorage.get(key, ...args).then(bin => {
+ const size = Object.keys(bin).length;
+ if ( size === 1 && typeof key === 'string' && bin[key] === null ) {
+ return {};
+ }
+ if ( size !== 0 ) { return bin; }
+ return webext.storage.local.get(key, ...args).then(bin => {
+ if ( bin instanceof Object === false ) { return bin; }
+ // Mirror empty result as null value in order to prevent
+ // from falling back to storage.local when there is no need.
+ const tomirror = Object.assign({}, bin);
+ if ( typeof key === 'string' && Object.keys(bin).length === 0 ) {
+ Object.assign(tomirror, { [key]: null });
+ }
+ vAPI.sessionStorage.set(tomirror);
+ return bin;
+ }).catch(reason => {
+ console.log(reason);
+ });
+ });
+ },
+ set(...args) {
+ vAPI.sessionStorage.set(...args);
+ return webext.storage.local.set(...args).catch(reason => {
+ console.log(reason);
+ });
+ },
+ remove(...args) {
+ vAPI.sessionStorage.remove(...args);
+ return webext.storage.local.remove(...args).catch(reason => {
+ console.log(reason);
+ });
+ },
+ clear(...args) {
+ vAPI.sessionStorage.clear(...args);
+ return webext.storage.local.clear(...args).catch(reason => {
+ console.log(reason);
+ });
+ },
+ QUOTA_BYTES: browser.storage.local.QUOTA_BYTES,
+};
+
+// Not all platforms support getBytesInUse
+if ( webext.storage.local.getBytesInUse instanceof Function ) {
+ vAPI.storage.getBytesInUse = function(...args) {
+ return webext.storage.local.getBytesInUse(...args).catch(reason => {
+ console.log(reason);
+ });
+ };
+}
+
+/******************************************************************************/
+/******************************************************************************/
+
+// https://github.com/gorhill/uMatrix/issues/234
+// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/privacy/network
+
+// https://github.com/gorhill/uBlock/issues/2048
+// Do not mess up with existing settings if not assigning them stricter
+// values.
+
+vAPI.browserSettings = (( ) => {
+ // Not all platforms support `browser.privacy`.
+ const bp = webext.privacy;
+ if ( bp instanceof Object === false ) { return; }
+
+ return {
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1723#issuecomment-919913361
+ canLeakLocalIPAddresses:
+ vAPI.webextFlavor.soup.has('firefox') &&
+ vAPI.webextFlavor.soup.has('mobile'),
+
+ set: function(details) {
+ for ( const setting in details ) {
+ if ( details.hasOwnProperty(setting) === false ) { continue; }
+ switch ( setting ) {
+ case 'prefetching':
+ const enabled = !!details[setting];
+ if ( enabled ) {
+ bp.network.networkPredictionEnabled.clear({
+ scope: 'regular',
+ });
+ } else {
+ bp.network.networkPredictionEnabled.set({
+ value: false,
+ scope: 'regular',
+ });
+ }
+ if ( vAPI.prefetching instanceof Function ) {
+ vAPI.prefetching(enabled);
+ }
+ break;
+
+ case 'hyperlinkAuditing':
+ if ( !!details[setting] ) {
+ bp.websites.hyperlinkAuditingEnabled.clear({
+ scope: 'regular',
+ });
+ } else {
+ bp.websites.hyperlinkAuditingEnabled.set({
+ value: false,
+ scope: 'regular',
+ });
+ }
+ break;
+
+ case 'webrtcIPAddress': {
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1928
+ // https://www.reddit.com/r/uBlockOrigin/comments/sl7p74/
+ // Hypothetical: some browsers _think_ uBO is still using
+ // the setting possibly based on cached state from the
+ // past, and making an explicit API call that uBO is not
+ // using the setting appears to solve those unexpected
+ // reported occurrences of uBO interfering despite never
+ // using the API.
+ const mustEnable = !details[setting];
+ if ( this.canLeakLocalIPAddresses === false ) {
+ if ( mustEnable && vAPI.webextFlavor.soup.has('chromium') ) {
+ bp.network.webRTCIPHandlingPolicy.clear({
+ scope: 'regular',
+ });
+ }
+ continue;
+ }
+ if ( mustEnable ) {
+ bp.network.webRTCIPHandlingPolicy.set({
+ value: 'default_public_interface_only',
+ scope: 'regular'
+ });
+ } else {
+ bp.network.webRTCIPHandlingPolicy.clear({
+ scope: 'regular',
+ });
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ }
+ };
+})();
+
+/******************************************************************************/
+/******************************************************************************/
+
+vAPI.isBehindTheSceneTabId = function(tabId) {
+ return tabId < 0;
+};
+
+vAPI.unsetTabId = 0;
+vAPI.noTabId = -1; // definitely not any existing tab
+
+// To ensure we always use a good tab id
+const toTabId = function(tabId) {
+ return typeof tabId === 'number' && isNaN(tabId) === false
+ ? tabId
+ : 0;
+};
+
+// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webNavigation
+// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs
+
+vAPI.Tabs = class {
+ constructor() {
+ browser.webNavigation.onCreatedNavigationTarget.addListener(details => {
+ this.onCreatedNavigationTargetHandler(details);
+ });
+ browser.webNavigation.onCommitted.addListener(details => {
+ const { frameId, tabId } = details;
+ if ( frameId === 0 && tabId > 0 && details.transitionType === 'reload' ) {
+ if ( vAPI.net && vAPI.net.hasUnprocessedRequest(tabId) ) {
+ vAPI.net.removeUnprocessedRequest(tabId);
+ }
+ }
+ this.onCommittedHandler(details);
+ });
+ browser.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
+ this.onUpdatedHandler(tabId, changeInfo, tab);
+ });
+ browser.tabs.onActivated.addListener(details => {
+ this.onActivated(details);
+ });
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/151
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/680#issuecomment-515215220
+ if ( browser.windows instanceof Object ) {
+ browser.windows.onFocusChanged.addListener(windowId => {
+ this.onFocusChangedHandler(windowId);
+ });
+ }
+ browser.tabs.onRemoved.addListener((tabId, details) => {
+ if ( vAPI.net && vAPI.net.hasUnprocessedRequest(tabId) ) {
+ vAPI.net.removeUnprocessedRequest(tabId);
+ }
+ this.onRemovedHandler(tabId, details);
+ });
+ }
+
+ async executeScript() {
+ let result;
+ try {
+ result = await webext.tabs.executeScript(...arguments);
+ }
+ catch(reason) {
+ }
+ return Array.isArray(result) ? result : [];
+ }
+
+ async get(tabId) {
+ if ( tabId === null ) {
+ return this.getCurrent();
+ }
+ if ( tabId <= 0 ) { return null; }
+ let tab;
+ try {
+ tab = await webext.tabs.get(tabId);
+ }
+ catch(reason) {
+ }
+ return tab instanceof Object ? tab : null;
+ }
+
+ async getCurrent() {
+ const tabs = await this.query({ active: true, currentWindow: true });
+ return tabs.length !== 0 ? tabs[0] : null;
+ }
+
+ async insertCSS(tabId, details) {
+ if ( vAPI.supportsUserStylesheets ) {
+ details.cssOrigin = 'user';
+ }
+ try {
+ await webext.tabs.insertCSS(...arguments);
+ }
+ catch(reason) {
+ }
+ }
+
+ async query(queryInfo) {
+ let tabs;
+ try {
+ tabs = await webext.tabs.query(queryInfo);
+ }
+ catch(reason) {
+ }
+ return Array.isArray(tabs) ? tabs : [];
+ }
+
+ async removeCSS(tabId, details) {
+ if ( vAPI.supportsUserStylesheets ) {
+ details.cssOrigin = 'user';
+ }
+ try {
+ await webext.tabs.removeCSS(...arguments);
+ }
+ catch(reason) {
+ }
+ }
+
+ // Properties of the details object:
+ // - url: 'URL', => the address that will be opened
+ // - index: -1, => undefined: end of the list, -1: following tab,
+ // or after index
+ // - active: false, => opens the tab... in background: true,
+ // foreground: undefined
+ // - popup: 'popup' => open in a new window
+
+ async create(url, details) {
+ if ( details.active === undefined ) {
+ details.active = true;
+ }
+
+ const subWrapper = async ( ) => {
+ const updateDetails = {
+ url: url,
+ active: !!details.active
+ };
+
+ // Opening a tab from incognito window won't focus the window
+ // in which the tab was opened
+ const focusWindow = tab => {
+ if ( tab.active && vAPI.windows instanceof Object ) {
+ vAPI.windows.update(tab.windowId, { focused: true });
+ }
+ };
+
+ if ( !details.tabId ) {
+ if ( details.index !== undefined ) {
+ updateDetails.index = details.index;
+ }
+ browser.tabs.create(updateDetails, focusWindow);
+ return;
+ }
+
+ // update doesn't accept index, must use move
+ const tab = await vAPI.tabs.update(
+ toTabId(details.tabId),
+ updateDetails
+ );
+ // if the tab doesn't exist
+ if ( tab === null ) {
+ browser.tabs.create(updateDetails, focusWindow);
+ } else if ( details.index !== undefined ) {
+ browser.tabs.move(tab.id, { index: details.index });
+ }
+ };
+
+ // Open in a standalone window
+ //
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/168#issuecomment-413038191
+ // Not all platforms support vAPI.windows.
+ //
+ // For some reasons, some platforms do not honor the left,top
+ // position when specified. I found that further calling
+ // windows.update again with the same position _may_ help.
+ if ( details.popup !== undefined && vAPI.windows instanceof Object ) {
+ const createDetails = {
+ url: details.url,
+ type: details.popup,
+ };
+ if ( details.box instanceof Object ) {
+ Object.assign(createDetails, details.box);
+ }
+ const win = await vAPI.windows.create(createDetails);
+ if ( win === null ) { return; }
+ if ( details.box instanceof Object === false ) { return; }
+ if (
+ win.left === details.box.left &&
+ win.top === details.box.top
+ ) {
+ return;
+ }
+ vAPI.windows.update(win.id, {
+ left: details.box.left,
+ top: details.box.top
+ });
+ return;
+ }
+
+ if ( details.index !== -1 ) {
+ subWrapper();
+ return;
+ }
+
+ const tab = await vAPI.tabs.getCurrent();
+ if ( tab !== null ) {
+ details.index = tab.index + 1;
+ } else {
+ details.index = undefined;
+ }
+ subWrapper();
+ }
+
+ // Properties of the details object:
+ // - url: 'URL', => the address that will be opened
+ // - tabId: 1, => the tab is used if set, instead of creating a new one
+ // - index: -1, => undefined: end of the list, -1: following tab, or
+ // after index
+ // - active: false, => opens the tab in background - true and undefined:
+ // foreground
+ // - select: true, => if a tab is already opened with that url, then select
+ // it instead of opening a new one
+ // - popup: true => open in a new window
+
+ async open(details) {
+ let targetURL = details.url;
+ if ( typeof targetURL !== 'string' || targetURL === '' ) {
+ return null;
+ }
+
+ // extension pages
+ if ( /^[\w-]{2,}:/.test(targetURL) !== true ) {
+ targetURL = vAPI.getURL(targetURL);
+ }
+
+ if ( !details.select ) {
+ this.create(targetURL, details);
+ return;
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query#Parameters
+ // "Note that fragment identifiers are not matched."
+ // Fragment identifiers ARE matched -- we need to remove the fragment.
+ const pos = targetURL.indexOf('#');
+ const targetURLWithoutHash = pos === -1
+ ? targetURL
+ : targetURL.slice(0, pos);
+
+ const tabs = await vAPI.tabs.query({ url: targetURLWithoutHash });
+ if ( tabs.length === 0 ) {
+ this.create(targetURL, details);
+ return;
+ }
+ let tab = tabs[0];
+ const updateDetails = { active: true };
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/592
+ if ( tab.url.startsWith(targetURL) === false ) {
+ updateDetails.url = targetURL;
+ }
+ tab = await vAPI.tabs.update(tab.id, updateDetails);
+ if ( vAPI.windows instanceof Object === false ) { return; }
+ vAPI.windows.update(tab.windowId, { focused: true });
+ }
+
+ async update() {
+ let tab;
+ try {
+ tab = await webext.tabs.update(...arguments);
+ }
+ catch (reason) {
+ }
+ return tab instanceof Object ? tab : null;
+ }
+
+ // Replace the URL of a tab. Noop if the tab does not exist.
+ replace(tabId, url) {
+ tabId = toTabId(tabId);
+ if ( tabId === 0 ) { return; }
+
+ let targetURL = url;
+
+ // extension pages
+ if ( /^[\w-]{2,}:/.test(targetURL) !== true ) {
+ targetURL = vAPI.getURL(targetURL);
+ }
+
+ vAPI.tabs.update(tabId, { url: targetURL });
+ }
+
+ async remove(tabId) {
+ tabId = toTabId(tabId);
+ if ( tabId === 0 ) { return; }
+ try {
+ await webext.tabs.remove(tabId);
+ }
+ catch (reason) {
+ }
+ }
+
+ async reload(tabId, bypassCache = false) {
+ tabId = toTabId(tabId);
+ if ( tabId === 0 ) { return; }
+ try {
+ await webext.tabs.reload(
+ tabId,
+ { bypassCache: bypassCache === true }
+ );
+ }
+ catch (reason) {
+ }
+ }
+
+ async select(tabId) {
+ tabId = toTabId(tabId);
+ if ( tabId === 0 ) { return; }
+ const tab = await vAPI.tabs.update(tabId, { active: true });
+ if ( tab === null ) { return; }
+ if ( vAPI.windows instanceof Object === false ) { return; }
+ vAPI.windows.update(tab.windowId, { focused: true });
+ }
+
+ // https://forums.lanik.us/viewtopic.php?f=62&t=32826
+ // Chromium-based browsers: sanitize target URL. I've seen data: URI with
+ // newline characters in standard fields, possibly as a way of evading
+ // filters. As per spec, there should be no whitespaces in a data: URI's
+ // standard fields.
+
+ sanitizeURL(url) {
+ if ( url.startsWith('data:') === false ) { return url; }
+ const pos = url.indexOf(',');
+ if ( pos === -1 ) { return url; }
+ const s = url.slice(0, pos);
+ if ( s.search(/\s/) === -1 ) { return url; }
+ return s.replace(/\s+/, '') + url.slice(pos);
+ }
+
+ onCreatedNavigationTargetHandler(details) {
+ if ( typeof details.url !== 'string' ) {
+ details.url = '';
+ }
+ if ( /^https?:\/\//.test(details.url) === false ) {
+ details.frameId = 0;
+ details.url = this.sanitizeURL(details.url);
+ this.onNavigation(details);
+ }
+ this.onCreated(details);
+ }
+
+ onCommittedHandler(details) {
+ details.url = this.sanitizeURL(details.url);
+ this.onNavigation(details);
+ }
+
+ onUpdatedHandler(tabId, changeInfo, tab) {
+ // Ignore uninteresting update events
+ const { status = '', title = '', url = '' } = changeInfo;
+ if ( status === '' && title === '' && url === '' ) { return; }
+ // https://github.com/gorhill/uBlock/issues/3073
+ // Fall back to `tab.url` when `changeInfo.url` is not set.
+ if ( url === '' ) {
+ changeInfo.url = tab && tab.url;
+ }
+ if ( changeInfo.url ) {
+ changeInfo.url = this.sanitizeURL(changeInfo.url);
+ }
+ this.onUpdated(tabId, changeInfo, tab);
+ }
+
+ onRemovedHandler(tabId, details) {
+ this.onClosed(tabId, details);
+ }
+
+ onFocusChangedHandler(windowId) {
+ if ( windowId === browser.windows.WINDOW_ID_NONE ) { return; }
+ vAPI.tabs.query({ active: true, windowId }).then(tabs => {
+ if ( tabs.length === 0 ) { return; }
+ const tab = tabs[0];
+ this.onActivated({ tabId: tab.id, windowId: tab.windowId });
+ });
+ }
+
+ onActivated(/* details */) {
+ }
+
+ onClosed(/* tabId, details */) {
+ }
+
+ onCreated(/* details */) {
+ }
+
+ onNavigation(/* details */) {
+ }
+
+ onUpdated(/* tabId, changeInfo, tab */) {
+ }
+};
+
+/******************************************************************************/
+/******************************************************************************/
+
+if ( webext.windows instanceof Object ) {
+ vAPI.windows = {
+ get: async function() {
+ let win;
+ try {
+ win = await webext.windows.get(...arguments);
+ }
+ catch (reason) {
+ }
+ return win instanceof Object ? win : null;
+ },
+ create: async function() {
+ let win;
+ try {
+ win = await webext.windows.create(...arguments);
+ }
+ catch (reason) {
+ }
+ return win instanceof Object ? win : null;
+ },
+ update: async function() {
+ let win;
+ try {
+ win = await webext.windows.update(...arguments);
+ }
+ catch (reason) {
+ }
+ return win instanceof Object ? win : null;
+ },
+ };
+}
+
+/******************************************************************************/
+/******************************************************************************/
+
+if ( webext.browserAction instanceof Object ) {
+ vAPI.browserAction = {
+ setTitle: async function() {
+ try {
+ await webext.browserAction.setTitle(...arguments);
+ }
+ catch (reason) {
+ }
+ },
+ };
+ // Not supported on Firefox for Android
+ if ( webext.browserAction.setIcon ) {
+ vAPI.browserAction.setBadgeTextColor = async function() {
+ try {
+ await webext.browserAction.setBadgeTextColor(...arguments);
+ }
+ catch (reason) {
+ }
+ };
+ vAPI.browserAction.setBadgeBackgroundColor = async function() {
+ try {
+ await webext.browserAction.setBadgeBackgroundColor(...arguments);
+ }
+ catch (reason) {
+ }
+ };
+ vAPI.browserAction.setBadgeText = async function() {
+ try {
+ await webext.browserAction.setBadgeText(...arguments);
+ }
+ catch (reason) {
+ }
+ };
+ vAPI.browserAction.setIcon = async function() {
+ try {
+ await webext.browserAction.setIcon(...arguments);
+ }
+ catch (reason) {
+ }
+ };
+ }
+}
+
+/******************************************************************************/
+/******************************************************************************/
+
+// Must read: https://code.google.com/p/chromium/issues/detail?id=410868#c8
+
+// https://github.com/chrisaljoudi/uBlock/issues/19
+// https://github.com/chrisaljoudi/uBlock/issues/207
+// Since we may be called asynchronously, the tab id may not exist
+// anymore, so this ensures it does still exist.
+
+// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/browserAction#Browser_compatibility
+// Firefox for Android does no support browser.browserAction.setIcon().
+// Performance: use ImageData for platforms supporting it.
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/32
+// Ensure ImageData for toolbar icon is valid before use.
+
+{
+ const browserAction = vAPI.browserAction;
+ const titleTemplate = `${browser.runtime.getManifest().browser_action.default_title} ({badge})`;
+ const icons = [
+ { path: {
+ '16': 'img/icon_16-off.png',
+ '32': 'img/icon_32-off.png',
+ '64': 'img/icon_64-off.png',
+ } },
+ { path: {
+ '16': 'img/icon_16.png',
+ '32': 'img/icon_32.png',
+ '64': 'img/icon_64.png',
+ } },
+ ];
+
+ (( ) => {
+ if ( browserAction.setIcon === undefined ) { return; }
+
+ // The global badge text and background color.
+ if ( browserAction.setBadgeBackgroundColor !== undefined ) {
+ browserAction.setBadgeBackgroundColor({ color: '#666666' });
+ }
+ if ( browserAction.setBadgeTextColor !== undefined ) {
+ browserAction.setBadgeTextColor({ color: '#FFFFFF' });
+ }
+
+ // As of 2018-05, benchmarks show that only Chromium benefits for sure
+ // from using ImageData.
+ //
+ // Chromium creates a new ImageData instance every call to setIcon
+ // with paths:
+ // https://cs.chromium.org/chromium/src/extensions/renderer/resources/set_icon.js?l=56&rcl=99be185c25738437ecfa0dafba72a26114196631
+ //
+ // Firefox uses an internal cache for each setIcon's paths:
+ // https://searchfox.org/mozilla-central/rev/5ff2d7683078c96e4b11b8a13674daded935aa44/browser/components/extensions/parent/ext-browserAction.js#631
+ if ( vAPI.webextFlavor.soup.has('chromium') === false ) { return; }
+
+ const imgs = [];
+ for ( let i = 0; i < icons.length; i++ ) {
+ for ( const key of Object.keys(icons[i].path) ) {
+ if ( parseInt(key, 10) >= 64 ) { continue; }
+ imgs.push({ i: i, p: key, cached: false });
+ }
+ }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/296
+ const safeGetImageData = function(ctx, w, h) {
+ let data;
+ try {
+ data = ctx.getImageData(0, 0, w, h);
+ } catch(ex) {
+ }
+ return data;
+ };
+
+ const onLoaded = function() {
+ for ( const img of imgs ) {
+ if ( img.r.complete === false ) { return; }
+ }
+ const ctx = document.createElement('canvas')
+ .getContext('2d', { willReadFrequently: true });
+ const iconData = [ null, null ];
+ for ( const img of imgs ) {
+ if ( img.cached ) { continue; }
+ const w = img.r.naturalWidth, h = img.r.naturalHeight;
+ ctx.width = w; ctx.height = h;
+ ctx.clearRect(0, 0, w, h);
+ ctx.drawImage(img.r, 0, 0);
+ if ( iconData[img.i] === null ) { iconData[img.i] = {}; }
+ const imgData = safeGetImageData(ctx, w, h);
+ if (
+ imgData instanceof Object === false ||
+ imgData.data instanceof Uint8ClampedArray === false ||
+ imgData.data[0] !== 0 ||
+ imgData.data[1] !== 0 ||
+ imgData.data[2] !== 0 ||
+ imgData.data[3] !== 0
+ ) {
+ return;
+ }
+ iconData[img.i][img.p] = imgData;
+ img.cached = true;
+ }
+ for ( let i = 0; i < iconData.length; i++ ) {
+ if ( iconData[i] ) {
+ icons[i] = { imageData: iconData[i] };
+ }
+ }
+ };
+ for ( const img of imgs ) {
+ img.r = new Image();
+ img.r.addEventListener('load', onLoaded, { once: true });
+ img.r.src = icons[img.i].path[img.p];
+ }
+ })();
+
+ // parts: bit 0 = icon
+ // bit 1 = badge text
+ // bit 2 = badge color
+ // bit 3 = hide badge
+
+ vAPI.setIcon = async function(tabId, details) {
+ tabId = toTabId(tabId);
+ if ( tabId === 0 ) { return; }
+
+ const tab = await vAPI.tabs.get(tabId);
+ if ( tab === null ) { return; }
+
+ const hasUnprocessedRequest = vAPI.net && vAPI.net.hasUnprocessedRequest(tabId);
+ const { parts, state } = details;
+ const { badge, color } = hasUnprocessedRequest
+ ? { badge: '!', color: '#FC0' }
+ : details;
+
+ if ( browserAction.setIcon !== undefined ) {
+ if ( parts === undefined || (parts & 0b0001) !== 0 ) {
+ browserAction.setIcon(
+ Object.assign({ tabId: tab.id }, icons[state])
+ );
+ }
+ if ( (parts & 0b0010) !== 0 ) {
+ browserAction.setBadgeText({
+ tabId: tab.id,
+ text: (parts & 0b1000) === 0 ? badge : ''
+ });
+ }
+ if ( (parts & 0b0100) !== 0 ) {
+ browserAction.setBadgeBackgroundColor({ tabId: tab.id, color });
+ }
+ }
+
+ // Insert the badge text in the title if:
+ // - the platform does not support browserAction.setIcon(); OR
+ // - the rendering of the badge is disabled
+ if ( browserAction.setTitle !== undefined ) {
+ const title = titleTemplate.replace('{badge}',
+ state === 1 ? (badge !== '' ? badge : '0') : 'off'
+ );
+ browserAction.setTitle({ tabId: tab.id, title });
+ }
+
+ if ( vAPI.contextMenu instanceof Object ) {
+ vAPI.contextMenu.onMustUpdate(tabId);
+ }
+ };
+
+ vAPI.setDefaultIcon = function(flavor, text) {
+ if ( browserAction.setIcon === undefined ) { return; }
+ browserAction.setIcon({
+ path: {
+ '16': `img/icon_16${flavor}.png`,
+ '32': `img/icon_32${flavor}.png`,
+ '64': `img/icon_64${flavor}.png`,
+ }
+ });
+ browserAction.setBadgeText({ text });
+ browserAction.setBadgeBackgroundColor({
+ color: text === '!' ? '#FC0' : '#666'
+ });
+ };
+}
+
+browser.browserAction.onClicked.addListener(function(tab) {
+ vAPI.tabs.open({
+ select: true,
+ url: `popup-fenix.html?tabId=${tab.id}&intab=1`,
+ });
+});
+
+/******************************************************************************/
+/******************************************************************************/
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/710
+// uBO uses only ports to communicate with its auxiliary pages and
+// content scripts. Whether a message can trigger a privileged operation is
+// decided based on whether the port from which a message is received is
+// privileged, which is a status evaluated once, at port connection time.
+//
+// https://github.com/uBlockOrigin/uBlock-issues/issues/1992
+// If present, use MessageSender.origin to determine whether the port is
+// from a privileged page, otherwise use MessageSender.url.
+// MessageSender.origin is more reliable as it is not spoofable by a
+// compromised renderer.
+
+vAPI.messaging = {
+ ports: new Map(),
+ listeners: new Map(),
+ defaultHandler: null,
+ PRIVILEGED_ORIGIN: vAPI.getURL('').slice(0, -1),
+ NOOPFUNC: function(){},
+ UNHANDLED: 'vAPI.messaging.notHandled',
+
+ listen: function(details) {
+ this.listeners.set(details.name, {
+ fn: details.listener,
+ privileged: details.privileged === true
+ });
+ },
+
+ onPortDisconnect: function(port) {
+ this.ports.delete(port.name);
+ },
+
+ // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/Port
+ // port.sender is always present for onConnect() listeners.
+ onPortConnect: function(port) {
+ port.onDisconnect.addListener(port =>
+ this.onPortDisconnect(port)
+ );
+ port.onMessage.addListener((request, port) =>
+ this.onPortMessage(request, port)
+ );
+ const portDetails = { port };
+ const sender = port.sender;
+ const { origin, tab, url } = sender;
+ portDetails.frameId = sender.frameId;
+ portDetails.frameURL = url;
+ portDetails.privileged = origin !== undefined
+ ? origin === this.PRIVILEGED_ORIGIN
+ : url.startsWith(this.PRIVILEGED_ORIGIN);
+ if ( tab ) {
+ portDetails.tabId = tab.id;
+ portDetails.tabURL = tab.url;
+ }
+ this.ports.set(port.name, portDetails);
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1652925#c24
+ port.sender = undefined;
+ },
+
+ setup: function(defaultHandler) {
+ if ( this.defaultHandler !== null ) { return; }
+
+ if ( typeof defaultHandler !== 'function' ) {
+ defaultHandler = function() {
+ return this.UNHANDLED;
+ };
+ }
+ this.defaultHandler = defaultHandler;
+
+ browser.runtime.onConnect.addListener(
+ port => this.onPortConnect(port)
+ );
+
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1392067
+ // Workaround: manually remove ports matching removed tab.
+ if (
+ vAPI.webextFlavor.soup.has('firefox') &&
+ vAPI.webextFlavor.major < 61
+ ) {
+ browser.tabs.onRemoved.addListener(tabId => {
+ for ( const { port, tabId: portTabId } of this.ports.values() ) {
+ if ( portTabId !== tabId ) { continue; }
+ this.onPortDisconnect(port);
+ }
+ });
+ }
+ },
+
+ onFrameworkMessage: function(request, port, callback) {
+ const portDetails = this.ports.get(port.name) || {};
+ const tabId = portDetails.tabId;
+ const msg = request.msg;
+ switch ( msg.what ) {
+ case 'localStorage': {
+ if ( portDetails.privileged !== true ) { break; }
+ const args = msg.args || [];
+ vAPI.localStorage[msg.fn](...args).then(result => {
+ callback(result);
+ });
+ break;
+ }
+ case 'userCSS':
+ if ( tabId === undefined ) { break; }
+ const promises = [];
+ if ( msg.add ) {
+ const details = {
+ code: undefined,
+ frameId: portDetails.frameId,
+ matchAboutBlank: true,
+ runAt: 'document_start',
+ };
+ for ( const cssText of msg.add ) {
+ details.code = cssText;
+ promises.push(vAPI.tabs.insertCSS(tabId, details));
+ }
+ }
+ if ( msg.remove ) {
+ const details = {
+ code: undefined,
+ frameId: portDetails.frameId,
+ matchAboutBlank: true,
+ };
+ for ( const cssText of msg.remove ) {
+ details.code = cssText;
+ promises.push(vAPI.tabs.removeCSS(tabId, details));
+ }
+ }
+ Promise.all(promises).then(( ) => {
+ callback();
+ });
+ break;
+ }
+ },
+
+ // Use a wrapper to avoid closure and to allow reuse.
+ CallbackWrapper: class {
+ constructor(messaging, port, msgId) {
+ this.messaging = messaging;
+ this.callback = this.proxy.bind(this); // bind once
+ this.init(port, msgId);
+ }
+ init(port, msgId) {
+ this.port = port;
+ this.msgId = msgId;
+ return this;
+ }
+ proxy(response) {
+ // https://github.com/chrisaljoudi/uBlock/issues/383
+ try {
+ this.port.postMessage({
+ msgId: this.msgId,
+ msg: response !== undefined ? response : null,
+ });
+ } catch (ex) {
+ this.messaging.onPortDisconnect(this.port);
+ }
+ // Store for reuse
+ this.port = null;
+ this.messaging.callbackWrapperJunkyard.push(this);
+ }
+ },
+
+ callbackWrapperJunkyard: [],
+
+ callbackWrapperFactory: function(port, msgId) {
+ return this.callbackWrapperJunkyard.length !== 0
+ ? this.callbackWrapperJunkyard.pop().init(port, msgId)
+ : new this.CallbackWrapper(this, port, msgId);
+ },
+
+ onPortMessage: function(request, port) {
+ // prepare response
+ let callback = this.NOOPFUNC;
+ if ( request.msgId !== undefined ) {
+ callback = this.callbackWrapperFactory(port, request.msgId).callback;
+ }
+
+ // Content process to main process: framework handler.
+ if ( request.channel === 'vapi' ) {
+ this.onFrameworkMessage(request, port, callback);
+ return;
+ }
+
+ // Auxiliary process to main process: specific handler
+ const portDetails = this.ports.get(port.name);
+ if ( portDetails === undefined ) { return; }
+
+ const listenerDetails = this.listeners.get(request.channel);
+ let r = this.UNHANDLED;
+ if (
+ (listenerDetails !== undefined) &&
+ (listenerDetails.privileged === false || portDetails.privileged)
+
+ ) {
+ r = listenerDetails.fn(request.msg, portDetails, callback);
+ }
+ if ( r !== this.UNHANDLED ) { return; }
+
+ // Auxiliary process to main process: default handler
+ if ( portDetails.privileged ) {
+ r = this.defaultHandler(request.msg, portDetails, callback);
+ if ( r !== this.UNHANDLED ) { return; }
+ }
+
+ // Auxiliary process to main process: no handler
+ ubolog(
+ `vAPI.messaging.onPortMessage > unhandled request: ${JSON.stringify(request.msg)}`,
+ request
+ );
+
+ // Need to callback anyways in case caller expected an answer, or
+ // else there is a memory leak on caller's side
+ callback();
+ },
+};
+
+/******************************************************************************/
+/******************************************************************************/
+
+// https://github.com/gorhill/uBlock/issues/3474
+// https://github.com/gorhill/uBlock/issues/2823
+// Foil ability of web pages to identify uBO through
+// its web accessible resources.
+// https://github.com/gorhill/uBlock/issues/3497
+// Prevent web pages from interfering with uBO's element picker
+// https://github.com/uBlockOrigin/uBlock-issues/issues/550
+// Support using a new secret for every network request.
+
+{
+ // Generate a 6-character alphanumeric string, thus one random value out
+ // of 36^6 = over 2x10^9 values.
+ const generateSecret = ( ) =>
+ (Math.floor(Math.random() * 2176782336) + 2176782336).toString(36).slice(1);
+
+ const root = vAPI.getURL('/');
+ const reSecret = /\?secret=(\w+)/;
+ const shortSecrets = [];
+ let lastShortSecretTime = 0;
+
+ // Long secrets are valid until revoked or uBO restarts. The realm is one
+ // value out of 36^18 = over 10^28 values.
+ const longSecrets = new Set();
+
+ const guard = details => {
+ const match = reSecret.exec(details.url);
+ if ( match === null ) { return { cancel: true }; }
+ const secret = match[1];
+ if ( longSecrets.has(secret) ) { return; }
+ const pos = shortSecrets.indexOf(secret);
+ if ( pos === -1 ) { return { cancel: true }; }
+ shortSecrets.splice(pos, 1);
+ };
+
+ browser.webRequest.onBeforeRequest.addListener(
+ guard,
+ {
+ urls: [ root + 'web_accessible_resources/*' ]
+ },
+ [ 'blocking' ]
+ );
+
+ vAPI.warSecret = {
+ short: ( ) => {
+ if ( shortSecrets.length !== 0 ) {
+ if ( (Date.now() - lastShortSecretTime) > 5000 ) {
+ shortSecrets.splice(0);
+ } else if ( shortSecrets.length > 256 ) {
+ shortSecrets.splice(0, shortSecrets.length - 192);
+ }
+ }
+ lastShortSecretTime = Date.now();
+ const secret = generateSecret();
+ shortSecrets.push(secret);
+ return secret;
+ },
+ long: previous => {
+ if ( previous !== undefined ) {
+ longSecrets.delete(previous);
+ }
+ const secret = `${generateSecret()}${generateSecret()}${generateSecret()}`;
+ longSecrets.add(secret);
+ return secret;
+ },
+ };
+}
+
+/******************************************************************************/
+
+vAPI.Net = class {
+ constructor() {
+ this.validTypes = new Set();
+ {
+ const wrrt = browser.webRequest.ResourceType;
+ for ( const typeKey in wrrt ) {
+ if ( wrrt.hasOwnProperty(typeKey) ) {
+ this.validTypes.add(wrrt[typeKey]);
+ }
+ }
+ }
+ this.suspendableListener = undefined;
+ this.deferredSuspendableListener = undefined;
+ this.listenerMap = new WeakMap();
+ this.suspendDepth = 0;
+ this.unprocessedTabs = new Map();
+
+ browser.webRequest.onBeforeRequest.addListener(
+ details => {
+ this.normalizeDetails(details);
+ if ( this.suspendDepth !== 0 && details.tabId >= 0 ) {
+ return this.suspendOneRequest(details);
+ }
+ return this.onBeforeSuspendableRequest(details);
+ },
+ this.denormalizeFilters({ urls: [ 'http://*/*', 'https://*/*' ] }),
+ [ 'blocking' ]
+ );
+
+ vAPI.setDefaultIcon('-loading', '');
+ }
+ setOptions(/* options */) {
+ }
+ normalizeDetails(/* details */) {
+ }
+ denormalizeFilters(filters) {
+ const urls = filters.urls || [ '<all_urls>' ];
+ let types = filters.types;
+ if ( Array.isArray(types) ) {
+ types = this.denormalizeTypes(types);
+ }
+ if (
+ (this.validTypes.has('websocket')) &&
+ (types === undefined || types.indexOf('websocket') !== -1) &&
+ (urls.indexOf('<all_urls>') === -1)
+ ) {
+ if ( urls.indexOf('ws://*/*') === -1 ) {
+ urls.push('ws://*/*');
+ }
+ if ( urls.indexOf('wss://*/*') === -1 ) {
+ urls.push('wss://*/*');
+ }
+ }
+ return { types, urls };
+ }
+ denormalizeTypes(types) {
+ return types;
+ }
+ canonicalNameFromHostname(/* hn */) {
+ }
+ addListener(which, clientListener, filters, options) {
+ const actualFilters = this.denormalizeFilters(filters);
+ const actualListener = this.makeNewListenerProxy(clientListener);
+ browser.webRequest[which].addListener(
+ actualListener,
+ actualFilters,
+ options
+ );
+ }
+ onBeforeSuspendableRequest(details) {
+ if ( this.suspendableListener !== undefined ) {
+ return this.suspendableListener(details);
+ }
+ this.onUnprocessedRequest(details);
+ }
+ setSuspendableListener(listener) {
+ for ( const [ tabId, requests ] of this.unprocessedTabs ) {
+ let i = requests.length;
+ while ( i-- ) {
+ const r = listener(requests[i]);
+ if ( r === undefined || r.cancel !== true ) {
+ requests.splice(i, 1);
+ }
+ }
+ if ( requests.length !== 0 ) { continue; }
+ this.unprocessedTabs.delete(tabId);
+ }
+ if ( this.unprocessedTabs.size !== 0 ) {
+ this.deferredSuspendableListener = listener;
+ listener = details => {
+ const { tabId, type } = details;
+ if ( type === 'main_frame' && this.unprocessedTabs.has(tabId) ) {
+ if ( this.removeUnprocessedRequest(tabId) ) {
+ return this.suspendableListener(details);
+ }
+ }
+ return this.deferredSuspendableListener(details);
+ };
+ }
+ this.suspendableListener = listener;
+ vAPI.setDefaultIcon('', '');
+ }
+ removeListener(which, clientListener) {
+ const actualListener = this.listenerMap.get(clientListener);
+ if ( actualListener === undefined ) { return; }
+ this.listenerMap.delete(clientListener);
+ browser.webRequest[which].removeListener(actualListener);
+ }
+ makeNewListenerProxy(clientListener) {
+ const actualListener = details => {
+ this.normalizeDetails(details);
+ return clientListener(details);
+ };
+ this.listenerMap.set(clientListener, actualListener);
+ return actualListener;
+ }
+ handlerBehaviorChanged() {
+ browser.webRequest.handlerBehaviorChanged();
+ }
+ onUnprocessedRequest(details) {
+ const { tabId } = details;
+ if ( tabId === -1 ) { return; }
+ if ( this.unprocessedTabs.size === 0 ) {
+ vAPI.setDefaultIcon('-loading', '!');
+ }
+ let requests = this.unprocessedTabs.get(tabId);
+ if ( requests === undefined ) {
+ this.unprocessedTabs.set(tabId, (requests = []));
+ }
+ requests.push(Object.assign({}, details));
+ }
+ hasUnprocessedRequest(tabId) {
+ if ( this.unprocessedTabs.size === 0 ) { return false; }
+ if ( tabId === undefined ) { return true; }
+ return this.unprocessedTabs.has(tabId);
+ }
+ removeUnprocessedRequest(tabId) {
+ if ( this.deferredSuspendableListener === undefined ) {
+ this.unprocessedTabs.clear();
+ return true;
+ }
+ if ( tabId !== undefined ) {
+ this.unprocessedTabs.delete(tabId);
+ } else {
+ this.unprocessedTabs.clear();
+ }
+ if ( this.unprocessedTabs.size !== 0 ) { return false; }
+ this.suspendableListener = this.deferredSuspendableListener;
+ this.deferredSuspendableListener = undefined;
+ return true;
+ }
+ suspendOneRequest() {
+ }
+ unsuspendAllRequests() {
+ }
+ suspend() {
+ this.suspendDepth += 1;
+ }
+ unsuspend({ all = false, discard = false } = {}) {
+ if ( this.suspendDepth === 0 ) { return; }
+ if ( all ) {
+ this.suspendDepth = 0;
+ } else {
+ this.suspendDepth -= 1;
+ }
+ if ( this.suspendDepth !== 0 ) { return; }
+ this.unsuspendAllRequests(discard);
+ }
+ static canSuspend() {
+ return false;
+ }
+};
+
+/******************************************************************************/
+/******************************************************************************/
+
+// To be defined by platform-specific code.
+
+vAPI.scriptletsInjector = (( ) => {
+ self.uBO_scriptletsInjected = '';
+}).toString();
+
+/******************************************************************************/
+/******************************************************************************/
+
+// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/contextMenus#Browser_compatibility
+// Firefox for Android does no support browser.contextMenus.
+
+vAPI.contextMenu = webext.menus && {
+ _callback: null,
+ _hash: '',
+ onMustUpdate: function() {},
+ setEntries: function(entries, callback) {
+ entries = entries || [];
+ const hash = entries.map(v => v.id).join();
+ if ( hash === this._hash ) { return; }
+ this._hash = hash;
+ webext.menus.removeAll();
+ for ( const entry of entries ) {
+ webext.menus.create(JSON.parse(JSON.stringify(entry)));
+ }
+ const n = entries.length;
+ callback = callback || null;
+ if ( callback === this._callback ) { return; }
+ if ( n !== 0 && callback !== null ) {
+ webext.menus.onClicked.addListener(callback);
+ this._callback = callback;
+ } else if ( n === 0 && this._callback !== null ) {
+ webext.menus.onClicked.removeListener(this._callback);
+ this._callback = null;
+ }
+ }
+};
+
+/******************************************************************************/
+/******************************************************************************/
+
+vAPI.commands = browser.commands;
+
+/******************************************************************************/
+/******************************************************************************/
+
+// https://github.com/gorhill/uBlock/issues/531
+// Storage area dedicated to admin settings. Read-only.
+
+// https://github.com/gorhill/uBlock/commit/43a5ed735b95a575a9339b6e71a1fcb27a99663b#commitcomment-13965030
+// Not all Chromium-based browsers support managed storage. Merely testing or
+// exception handling in this case does NOT work: I don't know why. The
+// extension on Opera ends up in a non-sensical state, whereas vAPI become
+// undefined out of nowhere. So only solution left is to test explicitly for
+// Opera.
+// https://github.com/gorhill/uBlock/issues/900
+// Also, UC Browser: http://www.upsieutoc.com/image/WXuH
+
+// https://github.com/uBlockOrigin/uAssets/discussions/16939
+// Use a cached version of admin settings, such that there is no blocking
+// call on `storage.managed`. The side effect is that any changes to admin
+// settings will require an extra extension restart to take effect.
+
+vAPI.adminStorage = (( ) => {
+ if ( webext.storage.managed instanceof Object === false ) {
+ return {
+ get: function() {
+ return Promise.resolve();
+ },
+ };
+ }
+ const cacheManagedStorage = async ( ) => {
+ let store;
+ try {
+ store = await webext.storage.managed.get();
+ } catch(ex) {
+ }
+ vAPI.storage.set({ cachedManagedStorage: store || {} });
+ };
+
+ return {
+ get: async function(key) {
+ let bin;
+ try {
+ bin = await vAPI.storage.get('cachedManagedStorage') || {};
+ if ( Object.keys(bin).length === 0 ) {
+ bin = await webext.storage.managed.get() || {};
+ } else {
+ bin = bin.cachedManagedStorage;
+ }
+ } catch(ex) {
+ bin = {};
+ }
+ cacheManagedStorage();
+ if ( key === undefined || key === null ) {
+ return bin;
+ }
+ if ( typeof key === 'string' && bin instanceof Object ) {
+ return bin[key];
+ }
+ const out = {};
+ if ( Array.isArray(key) ) {
+ for ( const k of key ) {
+ if ( bin[k] === undefined ) { continue; }
+ out[k] = bin[k];
+ }
+ return out;
+ }
+ for ( const [ k, v ] of Object.entries(key) ) {
+ out[k] = bin[k] !== undefined ? bin[k] : v;
+ }
+ return out;
+ }
+ };
+})();
+
+/******************************************************************************/
+/******************************************************************************/
+
+// A localStorage-like object which should be accessible from the
+// background page or auxiliary pages.
+//
+// https://github.com/uBlockOrigin/uBlock-issues/issues/899
+// Convert into asynchronous access API.
+//
+// Note: vAPI.localStorage should already be defined with the client-side
+// implementation at this point, but we override with the
+// background-side implementation.
+vAPI.localStorage = {
+ start: async function() {
+ if ( this.cache instanceof Promise ) { return this.cache; }
+ if ( this.cache instanceof Object ) { return this.cache; }
+ this.cache = vAPI.storage.get('localStorage').then(bin => {
+ this.cache = bin instanceof Object &&
+ bin.localStorage instanceof Object
+ ? bin.localStorage
+ : {};
+ });
+ return this.cache;
+ },
+ clear: function() {
+ this.cache = {};
+ return vAPI.storage.set({ localStorage: this.cache });
+ },
+ getItem: function(key) {
+ if ( this.cache instanceof Object === false ) {
+ console.info(`localStorage.getItem('${key}') not ready`);
+ return null;
+ }
+ const value = this.cache[key];
+ return value !== undefined ? value : null;
+ },
+ getItemAsync: async function(key) {
+ await this.start();
+ const value = this.cache[key];
+ return value !== undefined ? value : null;
+ },
+ removeItem: async function(key) {
+ this.setItem(key);
+ },
+ setItem: async function(key, value = undefined) {
+ await this.start();
+ if ( value === this.cache[key] ) { return; }
+ this.cache[key] = value;
+ return vAPI.storage.set({ localStorage: this.cache });
+ },
+ cache: undefined,
+};
+
+vAPI.localStorage.start();
+
+/******************************************************************************/
+/******************************************************************************/
+
+// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/sync
+
+vAPI.cloud = (( ) => {
+ // Not all platforms support `webext.storage.sync`.
+ if ( webext.storage.sync instanceof Object === false ) { return; }
+
+ // Currently, only Chromium supports the following constants -- these
+ // values will be assumed for platforms which do not define them.
+ // https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/storage/sync
+ // > You can store up to 100KB of data using this API
+ const MAX_ITEMS =
+ webext.storage.sync.MAX_ITEMS || 512;
+ const QUOTA_BYTES =
+ webext.storage.sync.QUOTA_BYTES || 102400;
+ const QUOTA_BYTES_PER_ITEM =
+ webext.storage.sync.QUOTA_BYTES_PER_ITEM || 8192;
+
+ const chunkCountPerFetch = 16; // Must be a power of 2
+ const maxChunkCountPerItem = Math.floor(MAX_ITEMS * 0.75) & ~(chunkCountPerFetch - 1);
+
+ // https://github.com/gorhill/uBlock/issues/3006
+ // For Firefox, we will use a lower ratio to allow for more overhead for
+ // the infrastructure. Unfortunately this leads to less usable space for
+ // actual data, but all of this is provided for free by browser vendors,
+ // so we need to accept and deal with these limitations.
+ const evalMaxChunkSize = function() {
+ return Math.floor(
+ QUOTA_BYTES_PER_ITEM *
+ (vAPI.webextFlavor.soup.has('firefox') ? 0.6 : 0.75)
+ );
+ };
+
+ let maxChunkSize = evalMaxChunkSize();
+
+ // The real actual webextFlavor value may not be set in stone, so listen
+ // for possible future changes.
+ window.addEventListener('webextFlavor', function() {
+ maxChunkSize = evalMaxChunkSize();
+ }, { once: true });
+
+ const options = {
+ defaultDeviceName: window.navigator.platform,
+ deviceName: undefined,
+ };
+
+ vAPI.localStorage.getItemAsync('deviceName').then(value => {
+ options.deviceName = value;
+ });
+
+ // This is used to find out a rough count of how many chunks exists:
+ // We "poll" at specific index in order to get a rough idea of how
+ // large is the stored string.
+ // This allows reading a single item with only 2 sync operations -- a
+ // good thing given chrome.storage.sync.MAX_WRITE_OPERATIONS_PER_MINUTE
+ // and chrome.storage.sync.MAX_WRITE_OPERATIONS_PER_HOUR.
+
+ const getCoarseChunkCount = async function(datakey) {
+ const keys = {};
+ for ( let i = 0; i < maxChunkCountPerItem; i += 16 ) {
+ keys[datakey + i.toString()] = '';
+ }
+ let bin;
+ try {
+ bin = await webext.storage.sync.get(keys);
+ } catch (reason) {
+ return String(reason);
+ }
+ let chunkCount = 0;
+ for ( let i = 0; i < maxChunkCountPerItem; i += 16 ) {
+ if ( bin[datakey + i.toString()] === '' ) { break; }
+ chunkCount = i + 16;
+ }
+ return chunkCount;
+ };
+
+ const deleteChunks = async function(datakey, start) {
+ const keys = [];
+
+ const n = await getCoarseChunkCount(datakey);
+ for ( let i = start; i < n; i++ ) {
+ keys.push(datakey + i.toString());
+ }
+ if ( keys.length !== 0 ) {
+ webext.storage.sync.remove(keys);
+ }
+ };
+
+ const push = async function(details) {
+ const { datakey, data, encode } = details;
+ if (
+ data === undefined ||
+ typeof data === 'string' && data === ''
+ ) {
+ return deleteChunks(datakey, 0);
+ }
+ const item = {
+ source: options.deviceName || options.defaultDeviceName,
+ tstamp: Date.now(),
+ data,
+ };
+ const json = JSON.stringify(item);
+ const encoded = encode instanceof Function
+ ? await encode(json)
+ : json;
+
+ // Chunkify taking into account QUOTA_BYTES_PER_ITEM:
+ // https://developer.chrome.com/extensions/storage#property-sync
+ // "The maximum size (in bytes) of each individual item in sync
+ // "storage, as measured by the JSON stringification of its value
+ // "plus its key length."
+ const bin = {};
+ const chunkCount = Math.ceil(encoded.length / maxChunkSize);
+ for ( let i = 0; i < chunkCount; i++ ) {
+ bin[datakey + i.toString()]
+ = encoded.substr(i * maxChunkSize, maxChunkSize);
+ }
+ bin[datakey + chunkCount.toString()] = ''; // Sentinel
+
+ // Remove potentially unused trailing chunks before storing the data,
+ // this will free storage space which could otherwise cause the push
+ // operation to fail.
+ try {
+ await deleteChunks(datakey, chunkCount + 1);
+ } catch (reason) {
+ }
+
+ // Push the data to browser-provided cloud storage.
+ try {
+ await webext.storage.sync.set(bin);
+ } catch (reason) {
+ return String(reason);
+ }
+ };
+
+ const pull = async function(details) {
+ const { datakey, decode } = details;
+
+ const result = await getCoarseChunkCount(datakey);
+ if ( typeof result !== 'number' ) {
+ return result;
+ }
+ const chunkKeys = {};
+ for ( let i = 0; i < result; i++ ) {
+ chunkKeys[datakey + i.toString()] = '';
+ }
+
+ let bin;
+ try {
+ bin = await webext.storage.sync.get(chunkKeys);
+ } catch (reason) {
+ return String(reason);
+ }
+
+ // Assemble chunks into a single string.
+ // https://www.reddit.com/r/uMatrix/comments/8lc9ia/my_rules_tab_hangs_with_cloud_storage_support/
+ // Explicit sentinel is not necessarily present: this can
+ // happen when the number of chunks is a multiple of
+ // chunkCountPerFetch. Hence why we must also test against
+ // undefined.
+ let encoded = [];
+ let i = 0;
+ for (;;) {
+ const slice = bin[datakey + i.toString()];
+ if ( slice === '' || slice === undefined ) { break; }
+ encoded.push(slice);
+ i += 1;
+ }
+ encoded = encoded.join('');
+ const json = decode instanceof Function
+ ? await decode(encoded)
+ : encoded;
+ let entry = null;
+ try {
+ entry = JSON.parse(json);
+ } catch(ex) {
+ }
+ return entry;
+ };
+
+ const used = async function(datakey) {
+ if ( webext.storage.sync.getBytesInUse instanceof Function === false ) {
+ return;
+ }
+ const coarseCount = await getCoarseChunkCount(datakey);
+ if ( typeof coarseCount !== 'number' ) { return; }
+ const keys = [];
+ for ( let i = 0; i < coarseCount; i++ ) {
+ keys.push(`${datakey}${i}`);
+ }
+ let results;
+ try {
+ results = await Promise.all([
+ webext.storage.sync.getBytesInUse(keys),
+ webext.storage.sync.getBytesInUse(null),
+ ]);
+ } catch(ex) {
+ }
+ if ( Array.isArray(results) === false ) { return; }
+ return { used: results[0], total: results[1], max: QUOTA_BYTES };
+ };
+
+ const getOptions = function(callback) {
+ if ( typeof callback !== 'function' ) { return; }
+ callback(options);
+ };
+
+ const setOptions = function(details, callback) {
+ if ( typeof details !== 'object' || details === null ) { return; }
+
+ if ( typeof details.deviceName === 'string' ) {
+ vAPI.localStorage.setItem('deviceName', details.deviceName);
+ options.deviceName = details.deviceName;
+ }
+
+ getOptions(callback);
+ };
+
+ return { push, pull, used, getOptions, setOptions };
+})();
+
+/******************************************************************************/
+/******************************************************************************/
+
+vAPI.alarms = browser.alarms || {
+ create() {
+ },
+ clear() {
+ },
+ onAlarm: {
+ addListener() {
+ }
+ }
+};
+
+/******************************************************************************/
diff --git a/platform/common/vapi-client.js b/platform/common/vapi-client.js
new file mode 100644
index 0000000..9375e88
--- /dev/null
+++ b/platform/common/vapi-client.js
@@ -0,0 +1,251 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-2015 The uBlock Origin authors
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+// For non-background page
+
+/* globals browser */
+
+'use strict';
+
+/******************************************************************************/
+
+// https://github.com/chrisaljoudi/uBlock/issues/456
+// Skip if already injected.
+
+// >>>>>>>> start of HUGE-IF-BLOCK
+if (
+ typeof vAPI === 'object' &&
+ vAPI.randomToken instanceof Function === false
+) {
+
+/******************************************************************************/
+/******************************************************************************/
+
+vAPI.randomToken = function() {
+ const n = Math.random();
+ return String.fromCharCode(n * 25 + 97) +
+ Math.floor(
+ (0.25 + n * 0.75) * Number.MAX_SAFE_INTEGER
+ ).toString(36).slice(-8);
+};
+
+vAPI.sessionId = vAPI.randomToken();
+vAPI.setTimeout = vAPI.setTimeout || self.setTimeout.bind(self);
+
+/******************************************************************************/
+
+vAPI.shutdown = {
+ jobs: [],
+ add: function(job) {
+ this.jobs.push(job);
+ },
+ exec: function() {
+ // Shutdown asynchronously, to ensure shutdown jobs are called from
+ // the top context.
+ self.requestIdleCallback(( ) => {
+ const jobs = this.jobs.slice();
+ this.jobs.length = 0;
+ while ( jobs.length !== 0 ) {
+ (jobs.pop())();
+ }
+ });
+ },
+ remove: function(job) {
+ let pos;
+ while ( (pos = this.jobs.indexOf(job)) !== -1 ) {
+ this.jobs.splice(pos, 1);
+ }
+ }
+};
+
+/******************************************************************************/
+
+vAPI.messaging = {
+ port: null,
+ portTimer: null,
+ portTimerDelay: 10000,
+ msgIdGenerator: 1,
+ pending: new Map(),
+ shuttingDown: false,
+
+ shutdown: function() {
+ this.shuttingDown = true;
+ this.destroyPort();
+ },
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/403
+ // Spurious disconnection can happen, so do not consider such events
+ // as world-ending, i.e. stay around. Except for embedded frames.
+
+ disconnectListener: function() {
+ void browser.runtime.lastError;
+ this.port = null;
+ if ( window !== window.top ) {
+ vAPI.shutdown.exec();
+ } else {
+ this.destroyPort();
+ }
+ },
+ disconnectListenerBound: null,
+
+ // 2020-09-01:
+ // In Firefox, `details instanceof Object` resolves to `false` despite
+ // `details` being a valid object. Consequently, falling back to use
+ // `typeof details`.
+ // This is an issue which surfaced when the element picker code was
+ // revisited to isolate the picker dialog DOM from the page DOM.
+ messageListener: function(details) {
+ if ( typeof details !== 'object' || details === null ) { return; }
+
+ // Response to specific message previously sent
+ if ( details.msgId !== undefined ) {
+ const resolver = this.pending.get(details.msgId);
+ if ( resolver !== undefined ) {
+ this.pending.delete(details.msgId);
+ resolver(details.msg);
+ return;
+ }
+ }
+ },
+ messageListenerBound: null,
+
+ canDestroyPort: function() {
+ return this.pending.size === 0;
+ },
+
+ portPoller: function() {
+ this.portTimer = null;
+ if ( this.port !== null && this.canDestroyPort() ) {
+ return this.destroyPort();
+ }
+ this.portTimer = vAPI.setTimeout(this.portPollerBound, this.portTimerDelay);
+ this.portTimerDelay = Math.min(this.portTimerDelay * 2, 60 * 60 * 1000);
+ },
+ portPollerBound: null,
+
+ destroyPort: function() {
+ if ( this.portTimer !== null ) {
+ clearTimeout(this.portTimer);
+ this.portTimer = null;
+ }
+ const port = this.port;
+ if ( port !== null ) {
+ port.disconnect();
+ port.onMessage.removeListener(this.messageListenerBound);
+ port.onDisconnect.removeListener(this.disconnectListenerBound);
+ this.port = null;
+ }
+ // service pending callbacks
+ if ( this.pending.size !== 0 ) {
+ const pending = this.pending;
+ this.pending = new Map();
+ for ( const resolver of pending.values() ) {
+ resolver();
+ }
+ }
+ },
+
+ createPort: function() {
+ if ( this.shuttingDown ) { return null; }
+ if ( this.messageListenerBound === null ) {
+ this.messageListenerBound = this.messageListener.bind(this);
+ this.disconnectListenerBound = this.disconnectListener.bind(this);
+ this.portPollerBound = this.portPoller.bind(this);
+ }
+ try {
+ this.port = browser.runtime.connect({name: vAPI.sessionId}) || null;
+ } catch (ex) {
+ this.port = null;
+ }
+ // Not having a valid port at this point means the main process is
+ // not available: no point keeping the content scripts alive.
+ if ( this.port === null ) {
+ vAPI.shutdown.exec();
+ return null;
+ }
+ this.port.onMessage.addListener(this.messageListenerBound);
+ this.port.onDisconnect.addListener(this.disconnectListenerBound);
+ this.portTimerDelay = 10000;
+ if ( this.portTimer === null ) {
+ this.portTimer = vAPI.setTimeout(
+ this.portPollerBound,
+ this.portTimerDelay
+ );
+ }
+ return this.port;
+ },
+
+ getPort: function() {
+ return this.port !== null ? this.port : this.createPort();
+ },
+
+ send: function(channel, msg) {
+ // Too large a gap between the last request and the last response means
+ // the main process is no longer reachable: memory leaks and bad
+ // performance become a risk -- especially for long-lived, dynamic
+ // pages. Guard against this.
+ if ( this.pending.size > 50 ) {
+ vAPI.shutdown.exec();
+ }
+ const port = this.getPort();
+ if ( port === null ) {
+ return Promise.resolve();
+ }
+ const msgId = this.msgIdGenerator++;
+ const promise = new Promise(resolve => {
+ this.pending.set(msgId, resolve);
+ });
+ port.postMessage({ channel, msgId, msg });
+ return promise;
+ },
+};
+
+vAPI.shutdown.add(( ) => {
+ vAPI.messaging.shutdown();
+ window.vAPI = undefined;
+});
+
+/******************************************************************************/
+/******************************************************************************/
+
+}
+// <<<<<<<< end of HUGE-IF-BLOCK
+
+
+
+
+
+
+
+
+/*******************************************************************************
+
+ DO NOT:
+ - Remove the following code
+ - Add code beyond the following code
+ Reason:
+ - https://github.com/gorhill/uBlock/pull/3721
+ - uBO never uses the return value from injected content scripts
+
+**/
+
+void 0;
diff --git a/platform/common/vapi-common.js b/platform/common/vapi-common.js
new file mode 100644
index 0000000..3b74820
--- /dev/null
+++ b/platform/common/vapi-common.js
@@ -0,0 +1,294 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-2015 The uBlock Origin authors
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+// For background page or non-background pages
+
+/* global browser */
+
+'use strict';
+
+/******************************************************************************/
+/******************************************************************************/
+
+vAPI.T0 = Date.now();
+
+/******************************************************************************/
+
+vAPI.setTimeout = vAPI.setTimeout || self.setTimeout.bind(self);
+
+vAPI.defer = {
+ create(callback) {
+ return new this.Client(callback);
+ },
+ once(delay, ...args) {
+ const delayInMs = vAPI.defer.normalizeDelay(delay);
+ return new Promise(resolve => {
+ vAPI.setTimeout(
+ (...args) => { resolve(...args); },
+ delayInMs,
+ ...args
+ );
+ });
+ },
+ Client: class {
+ constructor(callback) {
+ this.timer = null;
+ this.type = 0;
+ this.callback = callback;
+ }
+ on(delay, ...args) {
+ if ( this.timer !== null ) { return; }
+ const delayInMs = vAPI.defer.normalizeDelay(delay);
+ this.type = 0;
+ this.timer = vAPI.setTimeout(( ) => {
+ this.timer = null;
+ this.callback(...args);
+ }, delayInMs || 1);
+ }
+ offon(delay, ...args) {
+ this.off();
+ this.on(delay, ...args);
+ }
+ onvsync(delay, ...args) {
+ if ( this.timer !== null ) { return; }
+ const delayInMs = vAPI.defer.normalizeDelay(delay);
+ if ( delayInMs !== 0 ) {
+ this.type = 0;
+ this.timer = vAPI.setTimeout(( ) => {
+ this.timer = null;
+ this.onraf(...args);
+ }, delayInMs);
+ } else {
+ this.onraf(...args);
+ }
+ }
+ onidle(delay, options, ...args) {
+ if ( this.timer !== null ) { return; }
+ const delayInMs = vAPI.defer.normalizeDelay(delay);
+ if ( delayInMs !== 0 ) {
+ this.type = 0;
+ this.timer = vAPI.setTimeout(( ) => {
+ this.timer = null;
+ this.onric(options, ...args);
+ }, delayInMs);
+ } else {
+ this.onric(options, ...args);
+ }
+ }
+ off() {
+ if ( this.timer === null ) { return; }
+ switch ( this.type ) {
+ case 0:
+ self.clearTimeout(this.timer);
+ break;
+ case 1:
+ self.cancelAnimationFrame(this.timer);
+ break;
+ case 2:
+ self.cancelIdleCallback(this.timer);
+ break;
+ default:
+ break;
+ }
+ this.timer = null;
+ }
+ onraf(...args) {
+ if ( this.timer !== null ) { return; }
+ this.type = 1;
+ this.timer = requestAnimationFrame(( ) => {
+ this.timer = null;
+ this.callback(...args);
+ });
+ }
+ onric(options, ...args) {
+ if ( this.timer !== null ) { return; }
+ this.type = 2;
+ this.timer = self.requestIdleCallback(deadline => {
+ this.timer = null;
+ this.callback(deadline, ...args);
+ }, options);
+ }
+ ongoing() {
+ return this.timer !== null;
+ }
+ },
+ normalizeDelay(delay = 0) {
+ if ( typeof delay === 'object' ) {
+ if ( delay.sec !== undefined ) {
+ return delay.sec * 1000;
+ } else if ( delay.min !== undefined ) {
+ return delay.min * 60000;
+ } else if ( delay.hr !== undefined ) {
+ return delay.hr * 3600000;
+ }
+ }
+ return delay;
+ }
+};
+
+/******************************************************************************/
+
+vAPI.webextFlavor = {
+ major: 0,
+ soup: new Set(),
+ get env() {
+ return Array.from(this.soup);
+ }
+};
+
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1858743
+// Add support for native `:has()` for Firefox 121+
+
+(( ) => {
+ const ua = navigator.userAgent;
+ const flavor = vAPI.webextFlavor;
+ const soup = flavor.soup;
+ const dispatch = function() {
+ window.dispatchEvent(new CustomEvent('webextFlavor'));
+ };
+
+ // This is always true.
+ soup.add('ublock').add('webext');
+
+ // Whether this is a dev build.
+ if ( /^\d+\.\d+\.\d+\D/.test(browser.runtime.getManifest().version) ) {
+ soup.add('devbuild');
+ }
+
+ if ( /\bMobile\b/.test(ua) ) {
+ soup.add('mobile');
+ }
+
+ if ( CSS.supports('selector(a:has(b))') ) {
+ soup.add('native_css_has');
+ }
+
+ // Order of tests is important
+ if ( browser.runtime.getURL('').startsWith('moz-extension://') ) {
+ soup.add('firefox')
+ .add('user_stylesheet')
+ .add('html_filtering');
+ const match = /Firefox\/(\d+)/.exec(ua);
+ flavor.major = match && parseInt(match[1], 10) || 115;
+ } else {
+ const match = /\bChrom(?:e|ium)\/(\d+)/.exec(ua);
+ if ( match !== null ) {
+ soup.add('chromium')
+ .add('user_stylesheet');
+ }
+ flavor.major = match && parseInt(match[1], 10) || 120;
+ }
+
+ // Don't starve potential listeners
+ vAPI.setTimeout(dispatch, 97);
+})();
+
+/******************************************************************************/
+
+vAPI.download = function(details) {
+ if ( !details.url ) { return; }
+ const a = document.createElement('a');
+ a.href = details.url;
+ a.setAttribute('download', details.filename || '');
+ a.setAttribute('type', 'text/plain');
+ a.dispatchEvent(new MouseEvent('click'));
+};
+
+/******************************************************************************/
+
+vAPI.getURL = browser.runtime.getURL;
+
+/******************************************************************************/
+
+// https://github.com/gorhill/uBlock/issues/3057
+// - webNavigation.onCreatedNavigationTarget become broken on Firefox when we
+// try to make the popup panel close itself using the original
+// `window.open('', '_self').close()`.
+
+vAPI.closePopup = function() {
+ if ( vAPI.webextFlavor.soup.has('firefox') ) {
+ window.close();
+ return;
+ }
+
+ // TODO: try to figure why this was used instead of a plain window.close().
+ // https://github.com/gorhill/uBlock/commit/b301ac031e0c2e9a99cb6f8953319d44e22f33d2#diff-bc664f26b9c453e0d43a9379e8135c6a
+ window.open('', '_self').close();
+};
+
+/******************************************************************************/
+
+// A localStorage-like object which should be accessible from the
+// background page or auxiliary pages.
+//
+// https://github.com/uBlockOrigin/uBlock-issues/issues/899
+// Convert into asynchronous access API.
+
+vAPI.localStorage = {
+ clear: function() {
+ vAPI.messaging.send('vapi', {
+ what: 'localStorage',
+ fn: 'clear',
+ });
+ },
+ getItemAsync: function(key) {
+ return vAPI.messaging.send('vapi', {
+ what: 'localStorage',
+ fn: 'getItemAsync',
+ args: [ key ],
+ });
+ },
+ removeItem: function(key) {
+ return vAPI.messaging.send('vapi', {
+ what: 'localStorage',
+ fn: 'removeItem',
+ args: [ key ],
+ });
+ },
+ setItem: function(key, value = undefined) {
+ return vAPI.messaging.send('vapi', {
+ what: 'localStorage',
+ fn: 'setItem',
+ args: [ key, value ]
+ });
+ },
+};
+
+
+
+
+
+
+
+
+/*******************************************************************************
+
+ DO NOT:
+ - Remove the following code
+ - Add code beyond the following code
+ Reason:
+ - https://github.com/gorhill/uBlock/pull/3721
+ - uBO never uses the return value from injected content scripts
+
+**/
+
+void 0;
diff --git a/platform/common/vapi.js b/platform/common/vapi.js
new file mode 100644
index 0000000..d10ae66
--- /dev/null
+++ b/platform/common/vapi.js
@@ -0,0 +1,89 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2017-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/* global HTMLDocument, XMLDocument */
+
+// For background page, auxiliary pages, and content scripts.
+
+/******************************************************************************/
+
+if (
+ self.browser instanceof Object &&
+ self.browser instanceof Element === false
+) {
+ self.chrome = self.browser;
+} else {
+ self.browser = self.chrome;
+}
+
+/******************************************************************************/
+
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1408996#c9
+var vAPI = self.vAPI; // jshint ignore:line
+
+// https://github.com/chrisaljoudi/uBlock/issues/464
+// https://github.com/chrisaljoudi/uBlock/issues/1528
+// A XMLDocument can be a valid HTML document.
+
+// https://github.com/gorhill/uBlock/issues/1124
+// Looks like `contentType` is on track to be standardized:
+// https://dom.spec.whatwg.org/#concept-document-content-type
+
+// https://forums.lanik.us/viewtopic.php?f=64&t=31522
+// Skip text/plain documents.
+
+if (
+ (
+ document instanceof HTMLDocument ||
+ document instanceof XMLDocument &&
+ document.createElement('div') instanceof HTMLDivElement
+ ) &&
+ (
+ /^image\/|^text\/plain/.test(document.contentType || '') === false
+ ) &&
+ (
+ self.vAPI instanceof Object === false || vAPI.uBO !== true
+ )
+) {
+ vAPI = self.vAPI = { uBO: true };
+}
+
+
+
+
+
+
+
+
+/*******************************************************************************
+
+ DO NOT:
+ - Remove the following code
+ - Add code beyond the following code
+ Reason:
+ - https://github.com/gorhill/uBlock/pull/3721
+ - uBO never uses the return value from injected content scripts
+
+**/
+
+void 0;
diff --git a/platform/dig/package.json b/platform/dig/package.json
new file mode 100644
index 0000000..d15b78c
--- /dev/null
+++ b/platform/dig/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "@gorhill/ubo-dig",
+ "version": "0.1.0",
+ "description": "To investigate code changes (not for publication)",
+ "type": "module",
+ "main": "index.js",
+ "scripts": {
+ "build": "node build.js",
+ "snfe": "node snfe.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/gorhill/uBlock.git"
+ },
+ "author": "Raymond Hill",
+ "license": "GPL-3.0-or-later",
+ "bugs": {
+ "url": "https://github.com/gorhill/uBlock/issues"
+ },
+ "homepage": "https://github.com/gorhill/uBlock#readme",
+ "engines": {
+ "node": ">=14.0.0",
+ "npm": ">=6.14.4"
+ },
+ "devDependencies": {
+ "scaling-palm-tree": "github:mjethani/scaling-palm-tree#15cf1ab"
+ }
+}
diff --git a/platform/dig/snfe.js b/platform/dig/snfe.js
new file mode 100644
index 0000000..7090828
--- /dev/null
+++ b/platform/dig/snfe.js
@@ -0,0 +1,389 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* eslint-disable-next-line no-redeclare */
+/* globals process */
+
+'use strict';
+
+/******************************************************************************/
+
+import { strict as assert } from 'assert';
+import { createRequire } from 'module';
+import { readFile, writeFile, mkdir } from 'fs/promises';
+import { dirname } from 'path';
+import { fileURLToPath } from 'url';
+
+const __dirname = dirname(fileURLToPath(import.meta.url));
+
+import { enableWASM, StaticNetFilteringEngine } from './index.js';
+
+/******************************************************************************/
+
+const FLAGS = process.argv.slice(2);
+const COMPARE = FLAGS.includes('compare');
+const MAXCOST = FLAGS.includes('maxcost');
+const MEDCOST = FLAGS.includes('medcost');
+const MINCOST = FLAGS.includes('mincost');
+const MODIFIERS = FLAGS.includes('modifiers');
+const RECORD = FLAGS.includes('record');
+const WASM = FLAGS.includes('wasm');
+const NEED_RESULTS = COMPARE || MAXCOST || MEDCOST || MINCOST || RECORD;
+
+// This maps puppeteer types to WebRequest types
+const WEBREQUEST_OPTIONS = {
+ // Consider document requests as sub_document. This is because the request
+ // dataset does not contain sub_frame or main_frame but only 'document' and
+ // different blockers have different behaviours.
+ document: 'sub_frame',
+ stylesheet: 'stylesheet',
+ image: 'image',
+ media: 'media',
+ font: 'font',
+ script: 'script',
+ xhr: 'xmlhttprequest',
+ fetch: 'xmlhttprequest',
+ websocket: 'websocket',
+ ping: 'ping',
+ // other
+ other: 'other',
+ eventsource: 'other',
+ manifest: 'other',
+ texttrack: 'other',
+};
+
+/******************************************************************************/
+
+function nanoToMilli(bigint) {
+ return (Number(bigint) / 1000000).toFixed(2) + ' ms';
+}
+
+function nanoToMicro(bigint) {
+ return (Number(bigint) / 1000).toFixed(2) + ' µs';
+}
+
+async function read(path) {
+ return readFile(path, 'utf8');
+}
+
+async function write(path, data) {
+ await mkdir(dirname(path), { recursive: true });
+ return writeFile(path, data, 'utf8');
+}
+
+/******************************************************************************/
+
+async function matchRequests(engine, requests) {
+ const results = [];
+ const details = {
+ r: 0,
+ f: undefined,
+ type: '',
+ url: '',
+ originURL: '',
+ t: 0,
+ };
+
+ let notBlockedCount = 0;
+ let blockedCount = 0;
+ let unblockedCount = 0;
+
+ const start = process.hrtime.bigint();
+
+ for ( let i = 0; i < requests.length; i++ ) {
+ const request = requests[i];
+ const reqstart = process.hrtime.bigint();
+ details.type = WEBREQUEST_OPTIONS[request.cpt];
+ details.url = request.url;
+ details.originURL = request.frameUrl;
+ const r = engine.matchRequest(details);
+ if ( r === 0 ) {
+ notBlockedCount += 1;
+ } else if ( r === 1 ) {
+ blockedCount += 1;
+ } else {
+ unblockedCount += 1;
+ }
+ if ( NEED_RESULTS !== true ) { continue; }
+ const reqstop = process.hrtime.bigint();
+ details.r = r;
+ details.f = r !== 0 ? engine.toLogData().raw : undefined;
+ details.t = Math.round(Number(reqstop - reqstart) / 10) / 100;
+ results.push([ i, Object.assign({}, details) ]);
+ }
+
+ const stop = process.hrtime.bigint();
+
+ console.log(`Matched ${requests.length} requests in ${nanoToMilli(stop - start)}`);
+ console.log(`\tNot blocked: ${notBlockedCount} requests`);
+ console.log(`\tBlocked: ${blockedCount} requests`);
+ console.log(`\tUnblocked: ${unblockedCount} requests`);
+ console.log(`\tAverage: ${nanoToMicro((stop - start) / BigInt(requests.length))} per request`);
+
+ if ( RECORD ) {
+ write('data/snfe.json', JSON.stringify(results, null, 2));
+ }
+
+ if ( COMPARE ) {
+ const diffs = await compare(results);
+ if ( Array.isArray(diffs) ) {
+ write('data/snfe.diffs.json', JSON.stringify(diffs, null, 2));
+ }
+ console.log(`Compare: ${diffs.length} requests differ`);
+ }
+
+ if ( MAXCOST ) {
+ const costly = results.slice().sort((a,b) => b[1].t - a[1].t).slice(0, 1000);
+ write('data/snfe.maxcost.json', JSON.stringify(costly, null, 2));
+ }
+
+ if ( MEDCOST ) {
+ const median = results.length >>> 1;
+ const costly = results.slice().sort((a,b) => b[1].t - a[1].t).slice(median - 500, median + 500);
+ write('data/snfe.medcost.json', JSON.stringify(costly, null, 2));
+ }
+
+ if ( MINCOST ) {
+ const costly = results.slice().sort((a,b) => b[1].t - a[1].t).slice(-1000);
+ write('data/snfe.mincost.json', JSON.stringify(costly, null, 2));
+ }
+}
+
+async function compare(results) {
+ let before;
+ try {
+ const raw = await read('data/snfe.json');
+ before = new Map(JSON.parse(raw));
+ } catch(ex) {
+ console.log(ex);
+ console.log('Nothing to compare');
+ return;
+ }
+ const after = new Map(results);
+ const diffs = [];
+ for ( let i = 0; i < results.length; i++ ) {
+ const a = before.get(i);
+ const b = after.get(i);
+ if ( a.r === b.r ) { continue; }
+ diffs.push([ i, {
+ type: a.type,
+ url: a.url,
+ originURL: a.originURL,
+ before: { r: a.r, f: a.f, t: a.t },
+ after: { r: b.r, f: b.f, t: b.t },
+ }]);
+ }
+ return diffs;
+}
+
+/******************************************************************************/
+
+async function matchRequestModifiers(engine, requests) {
+ const results = {
+ 'csp': [],
+ 'redirect-rule': [],
+ 'removeparam': [],
+ };
+
+ const details = {
+ f: undefined,
+ type: '',
+ url: '',
+ originURL: '',
+ t: 0,
+ };
+
+ let modifiedCount = 0;
+
+ const start = process.hrtime.bigint();
+ for ( let i = 0; i < requests.length; i++ ) {
+ const request = requests[i];
+ details.type = WEBREQUEST_OPTIONS[request.cpt];
+ details.url = request.url;
+ details.originURL = request.frameUrl;
+ const r = engine.matchRequest(details);
+ let modified = false;
+ if ( r !== 1 && details.type === 'sub_frame' ) {
+ const reqstart = process.hrtime.bigint();
+ const directives = engine.matchAndFetchModifiers(details, 'csp');
+ if ( directives !== undefined ) {
+ modified = true;
+ if ( NEED_RESULTS ) {
+ const reqstop = process.hrtime.bigint();
+ details.f = directives.map(a => `${a.result}:${a.logData().raw}`).sort();
+ details.t = Math.round(Number(reqstop - reqstart) / 10) / 100;
+ results['csp'].push([ i, Object.assign({}, details) ]);
+ }
+ }
+ }
+ if ( r === 1 ) {
+ const reqstart = process.hrtime.bigint();
+ const directives = engine.matchAndFetchModifiers(details, 'redirect-rule');
+ if ( directives !== undefined ) {
+ modified = true;
+ if ( NEED_RESULTS ) {
+ const reqstop = process.hrtime.bigint();
+ details.f = directives.map(a => `${a.result}:${a.logData().raw}`).sort();
+ details.t = Math.round(Number(reqstop - reqstart) / 10) / 100;
+ results['redirect-rule'].push([ i, Object.assign({}, details) ]);
+ }
+ }
+ }
+ if ( r !== 1 && engine.hasQuery(details) ) {
+ const reqstart = process.hrtime.bigint();
+ const directives = engine.matchAndFetchModifiers(details, 'removeparam');
+ if ( directives !== undefined ) {
+ modified = true;
+ if ( NEED_RESULTS ) {
+ const reqstop = process.hrtime.bigint();
+ details.f = directives.map(a => `${a.result}:${a.logData().raw}`).sort();
+ details.t = Math.round(Number(reqstop - reqstart) / 10) / 100;
+ results['removeparam'].push([ i, Object.assign({}, details) ]);
+ }
+ }
+ }
+ if ( modified ) {
+ modifiedCount += 1;
+ }
+ }
+ const stop = process.hrtime.bigint();
+
+ console.log(`Matched-modified ${requests.length} requests in ${nanoToMilli(stop - start)}`);
+ console.log(`\t${modifiedCount} modifiers found`);
+ console.log(`\tAverage: ${nanoToMicro((stop - start) / BigInt(requests.length))} per request`);
+
+ if ( RECORD ) {
+ write('data/snfe.modifiers.json', JSON.stringify(results, null, 2));
+ }
+
+ if ( COMPARE ) {
+ const diffs = await compareModifiers(results);
+ if ( Array.isArray(diffs) ) {
+ write('data/snfe.modifiers.diffs.json', JSON.stringify(diffs, null, 2));
+ }
+ console.log(`Compare: ${diffs.length} modified requests differ`);
+ }
+}
+
+async function compareModifiers(afterResults) {
+ let beforeResults;
+ try {
+ const raw = await read('data/snfe.modifiers.json');
+ beforeResults = JSON.parse(raw);
+ } catch(ex) {
+ console.log(ex);
+ console.log('Nothing to compare');
+ return;
+ }
+ const diffs = [];
+ for ( const modifier of [ 'csp', 'redirect-rule', 'removeparam' ] ) {
+ const before = new Map(beforeResults[modifier]);
+ const after = new Map(afterResults[modifier]);
+ for ( const [ i, b ] of before ) {
+ const a = after.get(i);
+ if ( a !== undefined && JSON.stringify(a.f) === JSON.stringify(b.f) ) { continue; }
+ diffs.push([ i, {
+ type: b.type,
+ url: b.url,
+ originURL: b.originURL,
+ before: { f: b.f, t: b.t },
+ after: a !== undefined ? { f: a.f, t: a.t } : null,
+ }]);
+ }
+ for ( const [ i, a ] of after ) {
+ const b = before.get(i);
+ if ( b !== undefined ) { continue; }
+ diffs.push([ i, {
+ type: a.type,
+ url: a.url,
+ originURL: a.originURL,
+ before: null,
+ after: { f: a.f, t: a.t },
+ }]);
+ }
+ }
+ return diffs;
+}
+
+/******************************************************************************/
+
+async function bench() {
+ if ( WASM ) {
+ try {
+ const result = await enableWASM();
+ if ( result === true ) {
+ console.log('WASM code paths enabled');
+ }
+ } catch(ex) {
+ console.log(ex);
+ }
+ }
+
+ const require = createRequire(import.meta.url); // jshint ignore:line
+ const requests = await require('./node_modules/scaling-palm-tree/requests.json');
+ const engine = await StaticNetFilteringEngine.create();
+
+ let start = process.hrtime.bigint();
+ await engine.useLists([
+ read('assets/ublock/filters.min.txt')
+ .then(raw => ({ name: 'filters', raw })),
+ read('assets/ublock/badware.txt')
+ .then(raw => ({ name: 'badware', raw })),
+ read('assets/ublock/privacy.min.txt')
+ .then(raw => ({ name: 'privacy', raw })),
+ read('assets/ublock/quick-fixes.txt')
+ .then(raw => ({ name: 'quick-fixes.txt', raw })),
+ read('assets/ublock/unbreak.txt')
+ .then(raw => ({ name: 'unbreak.txt', raw })),
+ read('assets/thirdparties/easylist/easylist.txt')
+ .then(raw => ({ name: 'easylist', raw })),
+ read('assets/thirdparties/easylist/easyprivacy.txt')
+ .then(raw => ({ name: 'easyprivacy', raw })),
+ read('assets/thirdparties/pgl.yoyo.org/as/serverlist')
+ .then(raw => ({ name: 'PGL', raw })),
+ read('assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt')
+ .then(raw => ({ name: 'urlhaus', raw })),
+ ]);
+ let stop = process.hrtime.bigint();
+ console.log(`Filter lists parsed-compiled-loaded in ${nanoToMilli(stop - start)}`);
+
+ // Dry run to let JS engine optimize hot JS code paths
+ for ( let i = 0; i < requests.length; i += 8 ) {
+ const request = requests[i];
+ void engine.matchRequest({
+ type: WEBREQUEST_OPTIONS[request.cpt],
+ url: request.url,
+ originURL: request.frameUrl,
+ });
+ }
+
+ if ( MODIFIERS === false ) {
+ matchRequests(engine, requests);
+ } else {
+ matchRequestModifiers(engine, requests);
+ }
+
+ StaticNetFilteringEngine.release();
+}
+
+bench();
+
+/******************************************************************************/
diff --git a/platform/firefox/manifest.json b/platform/firefox/manifest.json
new file mode 100644
index 0000000..4ee0b56
--- /dev/null
+++ b/platform/firefox/manifest.json
@@ -0,0 +1,132 @@
+{
+ "author": "Raymond Hill & contributors",
+ "background": {
+ "page": "background.html"
+ },
+ "browser_action": {
+ "browser_style": false,
+ "default_area": "navbar",
+ "default_icon": {
+ "16": "img/icon_16.png",
+ "32": "img/icon_32.png",
+ "64": "img/icon_64.png"
+ },
+ "default_title": "uBlock Origin",
+ "default_popup": "popup-fenix.html"
+ },
+ "browser_specific_settings": {
+ "gecko": {
+ "id": "uBlock0@raymondhill.net",
+ "strict_min_version": "78.0"
+ },
+ "gecko_android": {
+ "strict_min_version": "79.0"
+ }
+ },
+ "commands": {
+ "_execute_browser_action": {
+ },
+ "launch-element-zapper": {
+ "description": "__MSG_popupTipZapper__"
+ },
+ "launch-element-picker": {
+ "description": "__MSG_popupTipPicker__"
+ },
+ "launch-logger": {
+ "description": "__MSG_popupTipLog__"
+ },
+ "open-dashboard": {
+ "description": "__MSG_popupTipDashboard__"
+ },
+ "relax-blocking-mode": {
+ "description": "__MSG_relaxBlockingMode__"
+ },
+ "toggle-cosmetic-filtering": {
+ "description": "__MSG_toggleCosmeticFiltering__"
+ }
+ },
+ "content_scripts": [
+ {
+ "matches": [
+ "http://*/*",
+ "https://*/*",
+ "file://*/*"
+ ],
+ "js": [
+ "/js/vapi.js",
+ "/js/vapi-client.js",
+ "/js/contentscript.js"
+ ],
+ "all_frames": true,
+ "match_about_blank": true,
+ "run_at": "document_start"
+ },
+ {
+ "matches": [
+ "https://easylist.to/*",
+ "https://*.fanboy.co.nz/*",
+ "https://filterlists.com/*",
+ "https://forums.lanik.us/*",
+ "https://github.com/*",
+ "https://*.github.io/*",
+ "https://*.letsblock.it/*"
+ ],
+ "js": [
+ "/js/scriptlets/subscriber.js"
+ ],
+ "run_at": "document_idle",
+ "all_frames": false
+ },
+ {
+ "matches": [
+ "https://github.com/uBlockOrigin/*",
+ "https://ublockorigin.github.io/*",
+ "https://*.reddit.com/r/uBlockOrigin/*"
+ ],
+ "js": [
+ "/js/scriptlets/updater.js"
+ ],
+ "run_at": "document_idle",
+ "all_frames": false
+ }
+ ],
+ "default_locale": "en",
+ "description": "__MSG_extShortDesc__",
+ "icons": {
+ "16": "img/ublock.svg",
+ "32": "img/ublock.svg",
+ "48": "img/ublock.svg",
+ "64": "img/ublock.svg",
+ "96": "img/ublock.svg"
+ },
+ "manifest_version": 2,
+ "name": "uBlock Origin",
+ "options_ui": {
+ "page": "dashboard.html",
+ "open_in_tab": true
+ },
+ "permissions": [
+ "alarms",
+ "dns",
+ "menus",
+ "privacy",
+ "storage",
+ "tabs",
+ "unlimitedStorage",
+ "webNavigation",
+ "webRequest",
+ "webRequestBlocking",
+ "<all_urls>"
+ ],
+ "short_name": "uBlock₀",
+ "sidebar_action": {
+ "default_title": "__MSG_statsPageName__",
+ "default_panel": "logger-ui.html",
+ "default_icon": "img/ublock.svg",
+ "open_at_install": false
+ },
+ "version": "1.9.15.101",
+ "web_accessible_resources": [
+ "/web_accessible_resources/*"
+ ]
+}
diff --git a/platform/firefox/vapi-background-ext.js b/platform/firefox/vapi-background-ext.js
new file mode 100644
index 0000000..8ecefc9
--- /dev/null
+++ b/platform/firefox/vapi-background-ext.js
@@ -0,0 +1,328 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2017-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* globals browser */
+
+'use strict';
+
+/******************************************************************************/
+
+import {
+ domainFromHostname,
+ hostnameFromNetworkURL,
+} from './uri-utils.js';
+
+/******************************************************************************/
+
+// Canonical name-uncloaking feature.
+let cnameUncloakEnabled = browser.dns instanceof Object;
+let cnameUncloakProxied = false;
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/911
+// We detect here whether network requests are proxied, and if so,
+// de-aliasing of hostnames will be disabled to avoid possible
+// DNS leaks.
+const proxyDetector = function(details) {
+ if ( details.proxyInfo instanceof Object ) {
+ cnameUncloakEnabled = false;
+ proxyDetectorTryCount = 0;
+ }
+ if ( proxyDetectorTryCount === 0 ) {
+ browser.webRequest.onHeadersReceived.removeListener(proxyDetector);
+ return;
+ }
+ proxyDetectorTryCount -= 1;
+};
+let proxyDetectorTryCount = 0;
+
+// Related issues:
+// - https://github.com/gorhill/uBlock/issues/1327
+// - https://github.com/uBlockOrigin/uBlock-issues/issues/128
+// - https://bugzilla.mozilla.org/show_bug.cgi?id=1503721
+
+// Extend base class to normalize as per platform.
+
+vAPI.Net = class extends vAPI.Net {
+ constructor() {
+ super();
+ this.pendingRequests = [];
+ this.canUncloakCnames = browser.dns instanceof Object;
+ this.cnames = new Map([ [ '', null ] ]);
+ this.cnameIgnoreList = null;
+ this.cnameIgnore1stParty = true;
+ this.cnameIgnoreExceptions = true;
+ this.cnameIgnoreRootDocument = true;
+ this.cnameMaxTTL = 120;
+ this.cnameReplayFullURL = false;
+ this.cnameFlushTime = Date.now() + this.cnameMaxTTL * 60000;
+ }
+ setOptions(options) {
+ super.setOptions(options);
+ if ( 'cnameUncloakEnabled' in options ) {
+ cnameUncloakEnabled =
+ this.canUncloakCnames &&
+ options.cnameUncloakEnabled !== false;
+ }
+ if ( 'cnameUncloakProxied' in options ) {
+ cnameUncloakProxied = options.cnameUncloakProxied === true;
+ }
+ if ( 'cnameIgnoreList' in options ) {
+ this.cnameIgnoreList =
+ this.regexFromStrList(options.cnameIgnoreList);
+ }
+ if ( 'cnameIgnore1stParty' in options ) {
+ this.cnameIgnore1stParty =
+ options.cnameIgnore1stParty !== false;
+ }
+ if ( 'cnameIgnoreExceptions' in options ) {
+ this.cnameIgnoreExceptions =
+ options.cnameIgnoreExceptions !== false;
+ }
+ if ( 'cnameIgnoreRootDocument' in options ) {
+ this.cnameIgnoreRootDocument =
+ options.cnameIgnoreRootDocument !== false;
+ }
+ if ( 'cnameMaxTTL' in options ) {
+ this.cnameMaxTTL = options.cnameMaxTTL || 120;
+ }
+ if ( 'cnameReplayFullURL' in options ) {
+ this.cnameReplayFullURL = options.cnameReplayFullURL === true;
+ }
+ this.cnames.clear(); this.cnames.set('', null);
+ this.cnameFlushTime = Date.now() + this.cnameMaxTTL * 60000;
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/911
+ // Install/remove proxy detector.
+ if ( vAPI.webextFlavor.major < 80 ) {
+ const wrohr = browser.webRequest.onHeadersReceived;
+ if ( cnameUncloakEnabled === false || cnameUncloakProxied ) {
+ if ( wrohr.hasListener(proxyDetector) ) {
+ wrohr.removeListener(proxyDetector);
+ }
+ } else if ( wrohr.hasListener(proxyDetector) === false ) {
+ wrohr.addListener(
+ proxyDetector,
+ { urls: [ '*://*/*' ] },
+ [ 'blocking' ]
+ );
+ }
+ proxyDetectorTryCount = 32;
+ }
+ }
+ normalizeDetails(details) {
+ const type = details.type;
+
+ if ( type === 'imageset' ) {
+ details.type = 'image';
+ return;
+ }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/345
+ // Re-categorize an embedded object as a `sub_frame` if its
+ // content type is that of a HTML document.
+ if ( type === 'object' && Array.isArray(details.responseHeaders) ) {
+ for ( const header of details.responseHeaders ) {
+ if ( header.name.toLowerCase() === 'content-type' ) {
+ if ( header.value.startsWith('text/html') ) {
+ details.type = 'sub_frame';
+ }
+ break;
+ }
+ }
+ }
+ }
+ denormalizeTypes(types) {
+ if ( types.length === 0 ) {
+ return Array.from(this.validTypes);
+ }
+ const out = new Set();
+ for ( const type of types ) {
+ if ( this.validTypes.has(type) ) {
+ out.add(type);
+ }
+ if ( type === 'image' && this.validTypes.has('imageset') ) {
+ out.add('imageset');
+ }
+ if ( type === 'sub_frame' ) {
+ out.add('object');
+ }
+ }
+ return Array.from(out);
+ }
+ canonicalNameFromHostname(hn) {
+ const cnRecord = this.cnames.get(hn);
+ if ( cnRecord !== undefined && cnRecord !== null ) {
+ return cnRecord.cname;
+ }
+ }
+ processCanonicalName(hn, cnRecord, details) {
+ if ( cnRecord === null ) { return; }
+ if ( cnRecord.isRootDocument ) { return; }
+ const hnBeg = details.url.indexOf(hn);
+ if ( hnBeg === -1 ) { return; }
+ const oldURL = details.url;
+ let newURL = oldURL.slice(0, hnBeg) + cnRecord.cname;
+ const hnEnd = hnBeg + hn.length;
+ if ( this.cnameReplayFullURL ) {
+ newURL += oldURL.slice(hnEnd);
+ } else {
+ const pathBeg = oldURL.indexOf('/', hnEnd);
+ if ( pathBeg !== -1 ) {
+ newURL += oldURL.slice(hnEnd, pathBeg + 1);
+ }
+ }
+ details.url = newURL;
+ details.aliasURL = oldURL;
+ return super.onBeforeSuspendableRequest(details);
+ }
+ recordCanonicalName(hn, record, isRootDocument) {
+ if ( (this.cnames.size & 0b111111) === 0 ) {
+ const now = Date.now();
+ if ( now >= this.cnameFlushTime ) {
+ this.cnames.clear(); this.cnames.set('', null);
+ this.cnameFlushTime = now + this.cnameMaxTTL * 60000;
+ }
+ }
+ let cname =
+ typeof record.canonicalName === 'string' &&
+ record.canonicalName !== hn
+ ? record.canonicalName
+ : '';
+ if (
+ cname !== '' &&
+ this.cnameIgnore1stParty &&
+ domainFromHostname(cname) === domainFromHostname(hn)
+ ) {
+ cname = '';
+ }
+ if (
+ cname !== '' &&
+ this.cnameIgnoreList !== null &&
+ this.cnameIgnoreList.test(cname)
+ ) {
+ cname = '';
+ }
+ const cnRecord = cname !== '' ? { cname, isRootDocument } : null;
+ this.cnames.set(hn, cnRecord);
+ return cnRecord;
+ }
+ regexFromStrList(list) {
+ if (
+ typeof list !== 'string' ||
+ list.length === 0 ||
+ list === 'unset' ||
+ browser.dns instanceof Object === false
+ ) {
+ return null;
+ }
+ if ( list === '*' ) {
+ return /^./;
+ }
+ return new RegExp(
+ '(?:^|\.)(?:' +
+ list.trim()
+ .split(/\s+/)
+ .map(a => a.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))
+ .join('|') +
+ ')$'
+ );
+ }
+ onBeforeSuspendableRequest(details) {
+ const r = super.onBeforeSuspendableRequest(details);
+ if ( cnameUncloakEnabled === false ) { return r; }
+ if ( r !== undefined ) {
+ if (
+ r.cancel === true ||
+ r.redirectUrl !== undefined ||
+ this.cnameIgnoreExceptions
+ ) {
+ return r;
+ }
+ }
+ const hn = hostnameFromNetworkURL(details.url);
+ const cnRecord = this.cnames.get(hn);
+ if ( cnRecord !== undefined ) {
+ return this.processCanonicalName(hn, cnRecord, details);
+ }
+ const documentUrl = details.documentUrl || details.url;
+ const isRootDocument = this.cnameIgnoreRootDocument &&
+ hn === hostnameFromNetworkURL(documentUrl);
+ return browser.dns.resolve(hn, [ 'canonical_name' ]).then(
+ rec => {
+ const cnRecord = this.recordCanonicalName(hn, rec, isRootDocument);
+ return this.processCanonicalName(hn, cnRecord, details);
+ },
+ ( ) => {
+ this.cnames.set(hn, null);
+ }
+ );
+ }
+ suspendOneRequest(details) {
+ const pending = {
+ details: Object.assign({}, details),
+ resolve: undefined,
+ promise: undefined
+ };
+ pending.promise = new Promise(resolve => {
+ pending.resolve = resolve;
+ });
+ this.pendingRequests.push(pending);
+ return pending.promise;
+ }
+ unsuspendAllRequests(discard = false) {
+ const pendingRequests = this.pendingRequests;
+ this.pendingRequests = [];
+ for ( const entry of pendingRequests ) {
+ entry.resolve(
+ discard !== true
+ ? this.onBeforeSuspendableRequest(entry.details)
+ : undefined
+ );
+ }
+ }
+ static canSuspend() {
+ return true;
+ }
+};
+
+/******************************************************************************/
+
+vAPI.scriptletsInjector = ((doc, details) => {
+ let script, url;
+ try {
+ const blob = new self.Blob(
+ [ details.scriptlets ],
+ { type: 'text/javascript; charset=utf-8' }
+ );
+ url = self.URL.createObjectURL(blob);
+ script = doc.createElement('script');
+ script.async = false;
+ script.src = url;
+ (doc.head || doc.documentElement || doc).append(script);
+ self.uBO_scriptletsInjected = details.filters;
+ } catch (ex) {
+ }
+ if ( url ) {
+ if ( script ) { script.remove(); }
+ self.URL.revokeObjectURL(url);
+ }
+}).toString();
+
+/******************************************************************************/
diff --git a/platform/firefox/webext.js b/platform/firefox/webext.js
new file mode 100644
index 0000000..e9bff76
--- /dev/null
+++ b/platform/firefox/webext.js
@@ -0,0 +1,24 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+export default browser;
diff --git a/platform/mv3/README.md b/platform/mv3/README.md
new file mode 100644
index 0000000..2400bfe
--- /dev/null
+++ b/platform/mv3/README.md
@@ -0,0 +1,31 @@
+# How to build MV3 uBO Lite
+
+Instructions for reviewers.
+
+The following assumes a linux environment.
+
+1. Open Bash console
+2. `git clone https://github.com/gorhill/uBlock.git`
+3. `cd uBlock`
+4. `make mv3-[platform]`, where `[platform]` is either `chromium` or `firefox`
+5. This will fully build uBO Lite, and during the process filter lists will be downloaded from their respective remote servers
+
+Upon completion of the script, the resulting extension package will become present in:
+
+- Chromium: `dist/build/uBOLite.chromium`
+- Firefox: `dist/build/uBOLite.firefox`
+
+The folder `dist/build/mv3-data` will cache data fetched from remote server, so as to avoid fetching repeatedly from remote server with repeated build commands. Remove `dist/build/mv3-data` if you want to build with latest versions of filter lists.
+
+The file `dist/build/mv3-data/log.txt` will contain information about what happened during the build process.
+
+The entry in the `Makefile` which implement the build process is `tools/make-mv3.sh [platform]`.[1] This Bash script copy various files from uBlock Origin branch and MV3-specific branch into a single folder which will be the final extension package.
+
+Notably, `tools/make-mv3.sh [platform]` calls a Nodejs script which purpose is to convert the filter lists into various rulesets to be used in a declarative way. The Nodejs version required is 17.5.0 or above.
+
+All the final rulesets are present in the `dist/build/uBOLite.[platform]/rulesets` in the final extension package.
+
+---
+
+[1] https://github.com/gorhill/uBlock/blob/c4d324362fdb95ff8ef20f0b18f42f0eec955433/tools/make-mv3.sh
+[2] https://github.com/gorhill/uBlock/blob/c4d324362fdb95ff8ef20f0b18f42f0eec955433/tools/make-mv3.sh#L103
diff --git a/platform/mv3/chromium/manifest.json b/platform/mv3/chromium/manifest.json
new file mode 100644
index 0000000..036dc2d
--- /dev/null
+++ b/platform/mv3/chromium/manifest.json
@@ -0,0 +1,46 @@
+{
+ "action": {
+ "default_icon": {
+ "16": "img/icon_16.png",
+ "32": "img/icon_32.png",
+ "64": "img/icon_64.png"
+ },
+ "default_popup": "popup.html"
+ },
+ "author": "Raymond Hill",
+ "background": {
+ "service_worker": "/js/background.js",
+ "type": "module"
+ },
+ "declarative_net_request": {
+ "rule_resources": [
+ ]
+ },
+ "default_locale": "en",
+ "description": "__MSG_extShortDesc__",
+ "icons": {
+ "16": "img/icon_16.png",
+ "32": "img/icon_32.png",
+ "64": "img/icon_64.png",
+ "128": "img/icon_128.png"
+ },
+ "manifest_version": 3,
+ "minimum_chrome_version": "105.0",
+ "name": "__MSG_extName__",
+ "options_page": "dashboard.html",
+ "optional_host_permissions": [
+ "<all_urls>"
+ ],
+ "permissions": [
+ "activeTab",
+ "declarativeNetRequest",
+ "scripting",
+ "storage"
+ ],
+ "short_name": "uBO Lite",
+ "storage": {
+ "managed_schema": "managed_storage.json"
+ },
+ "version": "1.0",
+ "web_accessible_resources": []
+}
diff --git a/platform/mv3/description/en.md b/platform/mv3/description/en.md
new file mode 100644
index 0000000..5714024
--- /dev/null
+++ b/platform/mv3/description/en.md
@@ -0,0 +1,41 @@
+## Description
+
+**uBO Lite** (uBOL), a **permission-less** [MV3 API-based](https://developer.chrome.com/docs/extensions/mv3/intro/) content blocker.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is [performed reliably](https://developer.chrome.com/docs/extensions/reference/scripting/#method-registerContentScripts) by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read/modify data" [permission](https://developer.chrome.com/docs/extensions/mv3/declare_permissions/) at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read/modify data" permissions at install time. <details><summary>**However, [...]**</summary>
+ uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using declarative cosmetic and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+![uBOL's popup panel: no permission](https://user-images.githubusercontent.com/585534/195468156-d7e63ab9-abfa-443c-a8f6-e646a29b801e.png)
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request:
+
+![uBOL's popup panel: browser warning](https://user-images.githubusercontent.com/585534/195342593-2b82b740-70a3-4507-a0e5-d7aee803b286.png)
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site:
+
+![uBOL's popup panel: permissions to inject content](https://user-images.githubusercontent.com/585534/195342612-85d109d9-9006-4eb5-95a5-fec8a4f233ea.png)
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to modify and read data on all websites:
+
+![uBOL's options: Default filtering mode](https://user-images.githubusercontent.com/585534/195343335-a0aa103e-621e-4137-9bcf-9821dc881be1.png)
+
+</details>
+
+The default ruleset corresponds to at least uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.ar.txt b/platform/mv3/description/webstore.ar.txt
new file mode 100644
index 0000000..a86b45a
--- /dev/null
+++ b/platform/mv3/description/webstore.ar.txt
@@ -0,0 +1,36 @@
+uBO الخفيف (uBOL) مانع محتوى *لا يحتاج لتصاريح* مبني على MV3.
+
+تتوافق مجموعة القواعد الافتراضية مع مجموعة عوامل التصفية الافتراضية لـ uBlock Origin:
+
+- قوائم التصفية المدمجة في uBlock Origin
+- القائمة السهلة
+- الخصوصية السهلة
+- قائمة خادم الإعلانات والتتبع لبيتر لوي
+
+يمكنك إضافة المزيد من القواعد من خلال زيارة صفحة الخيارات ومن ثم أنقر على رمز _Cogs_ في اللوحة المنبثقة.
+
+uBOL صريح تمامًا، مما يعني أنه لا تحتاج إلى uBOL بشكل دائم لحدوث تصفية المحتوى، يتم إجراء تصفية المحتوى من خلال إضافة CSS/JS بشكل موثوق به بواسطة المتصفح نفسه بدلًا من الإضافة.
+ هذا يعني أن uBOL نفسه لا يستهلك موارد وحدة المعالجة المركزية/الذاكرة أثناء استمراره في حظر المحتوى. عملية عامل الخدمة في uBOL مطلوبة _فقط_ عند التفاعل مع اللوحة المنبثقة أو صفحة الخيارات.
+
+لا يتطلب uBOL صلاحية واسعة «لقراءة البيانات وتعديلها» في وقت التثبيت، وبالتالي فإن قدراته محدودة مقارنة بـ uBlock Origin أو إضافات حظر الإعلانات الأخرى التي تتطلب صلاحية واسعة «قراءة البيانات وتعديلها» في وقت التثبيت.
+
+
+ومع ذلك، يسمح لك uBOL "بوضوح" بمنح صلاحيات موسعة على مواقع محددة من اختيارك حتى يتمكن من التصفية بشكل أفضل على تلك المواقع باستخدام التصفية التجميلية وإضافة النص.
+
+
+لمنح صلاحيات موسعة على موقع معين، افتح اللوحة المنبثقة واختر وضع التصفية إما الأمثل أو الكامل.
+
+سيحذرك المتصفح من مخاطر منح صلاحيات إضافية التي يطلبها الامتداد على الموقع الحالي، وسيتعين عليك إختيار بما إذا كنت تقبل الطلب أو ترفضه.
+
+
+إذا قبلت طلب uBOL بالحصول على صلاحيات إضافية على الموقع الحالي، فستتمكن من تصفية المحتوى بشكل أفضل للموقع الحالي.
+
+
+بإمكانك اختيار وضع التصفية الافتراضية من خلال صفحة خيارات uBOL. إذا اخترت الوضع الأمثل أو الكامل باعتباره الوضع الافتراضي، فستحتاج إلى منح uBOL الإذن لقراءة البيانات وتعديلها على جميع مواقع الويب.
+
+
+ضع في اعتبارك أن هذا لا يزال عملًا قيد التنفيذ، هذه هي الأهداف النهائية:
+
+لا يمكنك تحديد الأذونات المستخدمة لاحقًا في التثبيت، تحديدك للأذونات سيكون خلال زيارتك لكل موقع.
+
+تقريري تمامًا للموثوقية ولكفاءة وحدة المعالجة المركزية/الذاكرة.
diff --git a/platform/mv3/description/webstore.az.txt b/platform/mv3/description/webstore.az.txt
new file mode 100644
index 0000000..8ff852c
--- /dev/null
+++ b/platform/mv3/description/webstore.az.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) *icazəsiz* MV3 əsaslı məzmun bloklayıcısıdır.
+
+Defolt qaydalar dəsti uBlock Origin-in defolt filtr dəstinə uyğundur:
+
+- uBlock Origin-in daxili filtr siyahıları
+- EasyList
+- EasyPrivacy
+- Peter Lowe-un Reklam və izləyici server siyahısı
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.be.txt b/platform/mv3/description/webstore.be.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.be.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.bg.txt b/platform/mv3/description/webstore.bg.txt
new file mode 100644
index 0000000..6e58550
--- /dev/null
+++ b/platform/mv3/description/webstore.bg.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) е блокер за съдържание *без разрешения*, базиран на MV3.
+
+Наборът от правила по подразбиране съответства на набора от филтри по подразбиране на uBlock Origin:
+
+- Вградени списъци с филтри на uBlock Origin
+- EasyList
+- EasyPrivacy
+- Списък със сървъри на Peter Lowe за реклами и проследяване
+
+Можете да добавите още набори от правила, като посетите страницата с опции – щракнете върху иконата _зъбно колело_ в изскачащия панел.
+
+uBOL е изцяло декларативен, което означава, че няма нужда от постоянен процес на uBOL за филтриране, а филтрирането на съдържание, базирано на инжектиране на CSS/JS, се извършва надеждно от самия браузър, а не от разширението. Това означава, че самият uBOL не консумира ресурси на процесора/паметта, докато тече блокирането на съдържанието – работният процес на услугата на uBOL е необходим _само_ когато взаимодействате с изскачащия панел или страниците с опции.
+
+uBOL не изисква широко разрешение за "четене и промяна на данни" по време на инсталиране, поради което възможностите му са ограничени в сравнение с uBlock Origin или други блокери на съдържание, изискващи широко разрешение за "четене и промяна на данни" по време на инсталиране.
+
+Въпреки това uBOL ви позволява да предоставите *изрично* разширени разрешения за определени сайтове по ваш избор, за да може да филтрира по-добре тези сайтове, като използва козметично филтриране и инжектиране на скриптове.
+
+За да предоставите разширени разрешения за даден сайт, отворете изскачащия панел и изберете по-висок режим на филтриране, например Оптимален или Пълен.
+
+След това браузърът ще ви предупреди за последиците от предоставянето на допълнителните разрешения, поискани от разширението, за текущия сайт и ще трябва да кажете на браузъра дали приемате или отхвърляте искането.
+
+Ако приемете искането на uBOL за допълнителни разрешения за текущия сайт, той ще може да филтрира по-добре съдържанието на текущия сайт.
+
+Можете да зададете режима на филтриране по подразбиране от страницата с опции на uBOL. Ако изберете оптимален или пълен режим по подразбиране, ще трябва да предоставите на uBOL разрешение за четене и промяна на данни във всички уебсайтове.
+
+Имайте предвид, че това все още е в процес на разработка с тези крайни цели:
+
+- По време на инсталацията няма широки разрешения за хоста – разширените разрешения се предоставят изрично от потребителя за всеки сайт.
+
+- Изцяло декларативен за надеждност и ефективност на процесора/паметта.
diff --git a/platform/mv3/description/webstore.bn.txt b/platform/mv3/description/webstore.bn.txt
new file mode 100644
index 0000000..83e739a
--- /dev/null
+++ b/platform/mv3/description/webstore.bn.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) হল একটি *অনুমতি-হীন* MV3-ভিত্তিক কন্টেন্ট ব্লকার।
+
+পূর্ব নির্ধারিত নিয়ম সেট uBlock অরিজিনের ডিফল্ট ফিল্টারসেটের সাথে মিলে যায়:
+
+- uBlock অরিজিনের বিল্ট ইন ফিল্টার তালিকা
+- ইজিলিস্ট
+- সহজ গোপনীয়তা
+- পিটার লো এর বিজ্ঞাপন এবং ট্র্যাকিং সার্ভার তালিকা
+
+আপনি অপশন পেজে গিয়ে আরও নিয়ম সেট যোগ করতে পারেন -- পপআপ প্যানেলে _Cogs_ আইকনে ক্লিক করুন।
+
+uBOL সম্পূর্ণরূপে ঘোষণামূলক, অর্থাৎ ফিল্টারিং করতে একটি স্থায়ী uBOL প্রক্রিয়ার প্রয়োজন নেই, এবং CSS/JS ইনজেকশন-ভিত্তিক বিষয়বস্তু ফিল্টারিং এক্সটেনশনের পরিবর্তে ব্রাউজার নিজেই নির্ভরযোগ্যভাবে এই কাজ করে থাকে। এর মানে হল যে কন্টেন্ট ব্লকিং চলমান থাকা অবস্থায় uBOL নিজেই CPU/মেমরি রিসোর্স ব্যবহার করে না -- uBOL-এর পরিষেবার প্রক্রিয়ার প্রয়োজন শুধুমাত্র_ যখন আপনি পপআপ প্যানেল বা অপশন পেজগুলির সাথে ইন্টারঅ্যাক্ট করেন।
+
+uBOL-এর ইন্সটল করার সময় বিস্তৃত "পড়ার ও ডেটা পরিবর্তন করার" অনুমতির প্রয়োজন হয় না, তাই ইউব্লক অরিজিন বা অন্যান্য কনটেন্ট ব্লকের তুলনায় এটির সীমিত ক্ষমতা বাক্সের বাইরে রয়েছে যার জন্য ইন্সটল করার সময় বিস্তৃত "ডেটা পড়ুন এবং পরিবর্তন করুন" অনুমতি প্রয়োজন।
+
+যাইহোক, uBOL আপনাকে আপনার পছন্দের নির্দিষ্ট সাইটে *স্পষ্টভাবে* বর্ধিত অনুমতি প্রদান করে যাতে এটি কসমেটিক ফিল্টারিং এবং স্ক্রিপ্টলেট ইনজেকশন ব্যবহার করে সেই সাইটগুলিতে আরও ভাল ফিল্টার করতে পারে।
+
+একটি সাইটে বর্ধিত অনুমতি প্রদানের জন্য, পপআপ প্যানেল খুলুন এবং একটি উচ্চতর ফিল্টারিং মোড বাছাই করুন যেমন অপটিমাল বা কমপ্লিট।
+
+ব্রাউজারটি তখন বর্তমান সাইটে এক্সটেনশন দ্বারা অনুরোধ করা অতিরিক্ত অনুমতি প্রদানের প্রভাব সম্পর্কে আপনাকে সতর্ক করবে এবং আপনি অনুরোধটি গ্রহণ করবেন বা প্রত্যাখ্যান করবেন কিনা তা আপনার ব্রাউজারকে বলতে হবে।
+
+আপনি যদি বর্তমান সাইটে অতিরিক্ত অনুমতির জন্য uBOL-এর অনুরোধ গ্রহণ করেন, তাহলে এটি বর্তমান সাইটের জন্য আরও ভালভাবে ফিল্টার করতে সক্ষম হবে।
+
+আপনি uBOL এর বিকল্প পৃষ্ঠা থেকে ডিফল্ট ফিল্টারিং মোড সেট করতে পারেন। আপনি যদি অপটিমাল বা কমপ্লিট মোডটিকে ডিফল্ট হিসেবে বেছে নেন, তাহলে আপনাকে uBOL-কে সমস্ত ওয়েবসাইটের ডেটা পড়তে এবং পরিবর্তন করার অনুমতি দিতে হবে।
+
+মনে রাখবেন এই শেষ লক্ষ্যগুলির ফলাফলের সাথে এখনও সংস্করণ কাজ চলছে:
+
+- ইনস্টল করার সময় কোনও বিস্তৃত অনুমতি নেই -- বর্ধিত অনুমতিগুলি প্রতি-সাইট ভিত্তিতে ব্যবহারকারীর দ্বারা স্পষ্টভাবে প্র্রদান করা হয়।
+
+- নির্ভরযোগ্যতা এবং CPU/মেমরি দক্ষতার জন্য সম্পূর্ণরূপে পূর্বঘোষণামুূলক।
diff --git a/platform/mv3/description/webstore.br_FR.txt b/platform/mv3/description/webstore.br_FR.txt
new file mode 100644
index 0000000..bfc4ce6
--- /dev/null
+++ b/platform/mv3/description/webstore.br_FR.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) zo ur stanker noazadurioù *hep aotreoù* diazezet war ar manifesto MV3.
+
+Ar reolennoù dre ziouer a glot gant silañ dre ziouer uBlock Origin:
+
+- Rolloù siloù genidik a uBlock Origin
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+Tu zo deoc'h ouzhpennañ reolennoù all en arventennoù -- klikit war an ikon _kendentadur_ er banell popup.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+Koulskoude ez eus tu deoc'h reiñ *sklaer* aotreoù ouzhpenn da uBOL el lec'hiennoù ma fell deoc'h, mod-se e vint silet gwelloc'h en ur implij siloù kened hag ensinkladurioù scriplet.
+
+Evit reiñ aotreoù ouzhpenn da uBOL en ul lec'hienn bennak, n'ho peus nemet digeriñ ar prenestr pop-up ha diuzañ ul live silañ uheloc'h evel ar mod Gwellañ pe ar mod Klok
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+Ma asantit da reiñ muioc'h a aotreoù da uBOL war ar bajenn-mañ e vo silet gwelloc'h.
+
+Gallout a rit termeniñ ar mod silañ dre ziouer e pajenn arventennoù uBOL. Ma tibabit ar mod Gwellañ pe an hini Klok evel ar mod dre ziouer e vo ret deoc'h aotren uBOL da lenn ha kemmañ roadennoù en holl lec'hiennoù.
+
+Dalc'hit soñj ez eo uBOL ur raktres war ober c'hoazh hag a zo e bal:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.bs.txt b/platform/mv3/description/webstore.bs.txt
new file mode 100644
index 0000000..96ba7d2
--- /dev/null
+++ b/platform/mv3/description/webstore.bs.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) je blokator sadržaja zasnovan na MV3 *bez dozvole*.
+
+Zadani skup pravila odgovara zadanom skupu filtera uBlock Origin:
+
+- UBlock Origin ugrađene liste filtera
+- EasyList
+- EasyPrivacy
+- Oglas Peter Lowe i lista servera za praćenje
+
+Možete dodati još skupova pravila tako što ćete posjetiti stranicu sa opcijama -- kliknite na ikonu _Cogs_ na iskačućoj ploči.
+
+uBOL je potpuno deklarativno, što znači da nema potrebe za trajnim uBOL procesom da bi se filtriranje dogodilo, a filtriranje sadržaja zasnovano na CSS/JS injekcijama se pouzdano izvodi od strane samog pretraživača, a ne ekstenzije. To znači da sam uBOL ne troši CPU/memorijske resurse dok je blokiranje sadržaja u toku -- proces uBOL-a servisnog radnika je potreban _samo_ kada stupite u interakciju sa iskačućim panelom ili stranicama sa opcijama.
+
+uBOL ne zahtijeva široku dozvolu za "čitanje i modificiranje podataka" u vrijeme instalacije, stoga su njegove ograničene mogućnosti izvan kutije u poređenju sa uBlock Origin-om ili drugim blokatorima sadržaja koji zahtijevaju široke dozvole za "čitanje i modificiranje podataka" u vrijeme instalacije.
+
+Međutim, uBOL vam omogućava da *eksplicitno* dodijelite proširene dozvole na određenim web lokacijama po vašem izboru kako bi mogao bolje filtrirati te stranice koristeći kozmetičko filtriranje i injekcije skriptleta.
+
+Da biste dali proširene dozvole za datu web lokaciju, otvorite iskačući panel i odaberite viši način filtriranja kao što je Optimal ili Complete.
+
+Pregledač će vas tada upozoriti na efekte odobravanja dodatnih dozvola koje ekstenzija traži na trenutnoj web stranici, a vi ćete morati reći pretraživaču da li prihvatate ili odbijate zahtjev.
+
+Ako prihvatite uBOL-ov zahtjev za dodatnim dozvolama na trenutnoj stranici, moći će bolje filtrirati sadržaj za trenutnu stranicu.
+
+Možete postaviti zadani način filtriranja sa uBOL-ove stranice sa opcijama. Ako odaberete Optimal ili Kompletan način kao zadani, morat ćete dati uBOL-u dozvolu da čita i mijenja podatke na svim web stranicama.
+
+Imajte na umu da je ovo još uvijek u toku, sa ovim krajnjim ciljevima:
+
+- Nema širokih dozvola za host u vrijeme instalacije - proširene dozvole se eksplicitno dodeljuju od strane korisnika na bazi po lokaciji.
+
+- Potpuno deklarativno za pouzdanost i efikasnost CPU/memorije.
diff --git a/platform/mv3/description/webstore.ca.txt b/platform/mv3/description/webstore.ca.txt
new file mode 100644
index 0000000..e750255
--- /dev/null
+++ b/platform/mv3/description/webstore.ca.txt
@@ -0,0 +1,32 @@
+L'uBO Lite (uBOL) és un blocador de contingut *sense permisos* basat en MV3.
+
+El conjunt de regles per defecte correspon al conjunt de filtres per defecte d'uBlock Origin:
+
+- Llistes de filtres integrades d'uBlock Origin
+- EasyList
+- EasyPrivacy
+- Llista de servidors de seguiment i anuncis de Peter Lowe
+
+Podeu afegir més conjunts de regles si visiteu la pàgina d'opcions: feu clic a la icona _Cogs_ al tauler emergent.
+
+L'uBOL és totalment declaratiu, és a dir, no cal un procés uBOL permanent perquè es produeixi el filtratge, i el filtratge de contingut basat en injecció CSS/JS es realitza de manera fiable pel propi navegador més que per l'extensió.
+ Això vol dir que l'uBOL en si no consumeix recursos de CPU/memòria mentre el bloqueig de contingut està en curs; el procés de treballador de servei d'uBOL només es requereix quan interactueu amb el tauler emergent o les pàgines d'opcions.
+
+
+L'uBOL no requereix un ampli permís de "lectura i modificació de dades" en el moment de la instal·lació, per tant, les seves capacitats limitades en comparació amb l'uBlock Origin o altres blocadors de contingut que requereixen amplis permisos de "lectura i modificació de dades" en el moment de la instal·lació.
+
+Tanmateix, l'uBOL us permet concedir *explícitament* permisos ampliats en llocs específics que trieu perquè pugui filtrar millor en aquests llocs mitjançant filtres cosmètics i injeccions de scriptlet.
+
+Per concedir permisos ampliats en un lloc determinat, obriu el tauler emergent i seleccioneu un mode de filtrat superior, com ara Òptim o Complet.
+
+Aleshores, el navegador us avisarà sobre els efectes de la concessió dels permisos addicionals sol·licitats per l'extensió al lloc actual, i haureu d'indicar-li al navegador si accepteu o rebutgeu la sol·licitud.
+
+Si accepteu la sol·licitud d'uBOL de permisos addicionals al lloc actual, podrà filtrar millor el contingut del lloc actual.
+
+Podeu establir el mode de filtratge per defecte des de la pàgina d'opcions d'uBOL. Si trieu el mode Òptim o Complet per defecte, haureu de concedir a l'uBOL el permís per llegir i modificar dades a tots els llocs web.
+
+Tingueu en compte que encara és un treball en curs, amb aquests objectius finals:
+
+- No hi ha permisos d'amfitrió amplis en el moment de la instal·lació; els permisos ampliats els concedeix explícitament l'usuari per lloc.
+
+- Totalment declaratiu per a la fiabilitat i l'eficiència de la CPU/memòria.
diff --git a/platform/mv3/description/webstore.cs.txt b/platform/mv3/description/webstore.cs.txt
new file mode 100644
index 0000000..05ca248
--- /dev/null
+++ b/platform/mv3/description/webstore.cs.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) je blokovač obsahu vyžadující méně oprávnění, založený na MV3.
+
+Výchozí sada pravidel koresponduje k výchozím sadám filtrů uBlock Origin:
+
+- Vestavěný seznam filtrů uBlock Origin
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+Můžete přidat více sad pravidel navštívením stránky nastavení -- klikněte na ikonu ozubených kol ve vyskakovácím panelu.
+
+uBOL je zcela deklarativní, což znamená, že pro filtrování není potřeba permanentní proces uBOL a filtrování obsahu založené na vstřikování CSS/JS je spolehlivě prováděno samotným prohlížečem, nikoli rozšířením. To znamená, že samotný uBOL nespotřebovává zdroje CPU/paměti, zatímco probíhá blokování obsahu – proces servisního pracovníka uBOL je vyžadován _pouze_ při interakci s vyskakovacím panelem nebo stránkami nastavení.
+
+uBOL nevyžaduje rozsáhlá oprávnění ke "čtení a úpravě dat" v době instalace, a proto má ihned po instalaci omezené možnosti ve srovnání s uBlock Origin nebo jinými blokovači obsahu, které vyžadují rozsáhlá oprávnění ke "čtení a úpravě dat" v době instalace.
+
+Nicméně, uBOL vám umožňuje *explicitně* udělit rozšířená oprávnění na konkrétních webech podle vašeho výběru, aby mohl na těchto webech lépe filtrovat pomocí kosmetického filtrování a vstřikování skriptů.
+
+Chcete-li na daném webu udělit rozšířená oprávnění, otevřete vyskakovací panel a vyberte vyšší režim filtrování, například optimální nebo kompletní.
+
+Prohlížeč vás poté upozorní na důsledky udělení dalších oprávnění požadovaných rozšířením na aktuálním webu a vy budete muset prohlížeči sdělit, zda žádost přijímáte nebo odmítáte.
+
+Pokud přijmete žádost uBOL o další oprávnění na aktuálním webu, bude moci lépe filtrovat obsah aktuálního webu.
+
+Výchozí filtrovací režim můžete nastavit na stránce nastavení uBOL. Pokud jako výchozí zvolíte režim optimální nebo kompletní, budete muset uBOL udělit oprávnění ke čtení a úpravě dat na všech webových stránkách.
+
+Mějte na paměti, že toto je stále nedokončená práce s těmito konečnými cíli:
+
+- Žádná rozsáhlá oprávnění hostitele v době instalace -- rozšířená oprávnění uděluje explicitně uživatel na jednotlivých stránkách.
+
+- Zcela deklarativní pro spolehlivost a efektivitu CPU/paměti.
diff --git a/platform/mv3/description/webstore.cv.txt b/platform/mv3/description/webstore.cv.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.cv.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.da.txt b/platform/mv3/description/webstore.da.txt
new file mode 100644
index 0000000..1d32188
--- /dev/null
+++ b/platform/mv3/description/webstore.da.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) er en *tilladelsesløs* MV3-baseret indholdsblocker.
+
+Standardregelsættet svarer til uBlock Origins standardfiltersæt:
+
+- uBlock Origins indbyggede filterlister
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+Flere regelsæt kan tilføjes ved at gå til indstillingssiden -- klik på ikonet _Cogs_ i pop op-panelet.
+
+uBOL er fuldstændig deklarativ, hvilket betyder, at ingen permanent uBOL-proces behøves for at filtreringen kan finde sted, og CSS/JS-injektionsbaseret indholdsfiltrering udføres pålideligt af browseren selv i stedet for af udvidelsen. Dette betyder, at uBOL ikke selv forbruger CPU-/hukommelsesressourcer under indholdsblokeringen -- uBOLs tjenestearbejdsproces er _kun_ nødvendig under interaktion med pop op-panelet eller indstillingssiderne.
+
+uBOL kræver ikke en omfattende "læse og ændre data" tilladelse under installationen, derfor dens begrænsede egenskaber fra start af sammenlignet med uBlock Origin eller andre indholdsblockere, som kræver omfattende "læse/ændre data" tilladelser under installationen.
+
+uBOL giver dog mulighed for *eksplicit* at tildele udvidede tilladelser på bestemte websteder efter eget valg, så den bedre kan filtrere på disse websteder vha. kosmetisk filtrering og scriptlet-injektioner.
+
+For at tildele udvidede tilladelser på et givent websted, åbn pop op-panelet og vælg en højere filtreringstilstand, såsom Optimal eller Komplet.
+
+Browseren advarer derefter om virkningerne af de ekstra tildelte tilladelser, som udvidelsen anmoder om på det aktuelle websted, og man vil skulle fortælle browseren, hvorvidt anmodningen accepteres eller afslås.
+
+Accepteres uBOLs anmodning om ekstra tilladelser på det aktuelle websted, vil den bedre kunne filtrere indhold på webstedet.
+
+Standardfiltreringstilstanden kan angives via uBOLs indstillingsside. Hvis tilstanden Optimal eller Komplet vælges som standardtilstand, skal uBOL tildeles tilladelse til at læse og ændre data på alle websteder.
+
+Husk dog, at dette stadig er et igangværende arbejde med disse slutmål:
+
+- Ingen omfattende værtstilladelser under installationen -- udvidede tilladelser tildeles eksplicit af brugeren på webstedsbasis.
+
+- Fuldstændig deklarativ for pålidelighed og CPU-/hukommelseseffektivitet.
diff --git a/platform/mv3/description/webstore.de.txt b/platform/mv3/description/webstore.de.txt
new file mode 100644
index 0000000..807ec84
--- /dev/null
+++ b/platform/mv3/description/webstore.de.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) ist ein Inhaltsblocker, der *ohne Berechtigungen* auskommt und auf MV3 basiert.
+
+Die Standardregeln entsprechen den Standardfiltern von uBlock Origin:
+
+- Integrierte Filterlisten von uBlock Origin
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+Sie können weitere Regeln hinzufügen, indem Sie die Optionen aufrufen — klicken Sie dazu im Pop-up-Fenster auf das Symbol mit den _Zahnrädern_.
+
+uBOL ist vollständig deklarativ, d. h. es ist kein dauerhafter uBOL-Prozess für das Filtern erforderlich, und die auf CSS/JS-Injektion basierende Inhaltsfilterung wird zuverlässig vom Browser selbst und nicht von der Erweiterung durchgeführt. Das bedeutet, dass uBOL selbst keine CPU-/Speicherressourcen verbraucht, während der Inhalt blockiert wird — der uBOL-Service-Worker-Prozess wird _nur_ benötigt, wenn Sie mit dem Pop-up-Fenster oder den Optionen interagieren.
+
+uBOL erfordert bei der Installation keine weitreichende Berechtigung zum Lesen und Ändern von Daten, daher sind die Möglichkeiten im Vergleich zu uBlock Origin oder anderen Inhaltsblockern, die bei der Installation weitreichende Berechtigungen zum Lesen und Ändern von Daten erfordern, von vornherein begrenzt.
+
+Allerdings können Sie mit uBOL *explizit* erweiterte Berechtigungen für bestimmte Websites Ihrer Wahl erteilen, sodass diese Websites durch kosmetisches Filtern und Scriptlet-Injektionen besser gefiltert werden können.
+
+Um erweiterte Berechtigungen für eine bestimmte Website zu erteilen, öffnen Sie das Pop-up-Fenster und wählen Sie einen stärkeren Filtermodus wie »Optimal« oder »Vollständig«.
+
+Der Browser warnt Sie anschließend über die Auswirkungen der zusätzlichen Berechtigungen, die von der Erweiterung für die aktuelle Website angefordert werden, und Sie können entscheiden, ob Sie zustimmen oder ablehnen.
+
+Wenn Sie die Anfrage von uBOL nach zusätzlichen Berechtigungen für die aktuelle Website zustimmen, kann uBOL die Inhalte für die aktuelle Website besser filtern.
+
+Sie können den Standardfiltermodus in den Optionen von uBOL festlegen. Wenn Sie den Modus »Optimal« oder »Vollständig« als Standardmodus wählen, müssen Sie uBOL die Berechtigung erteilen, Daten auf allen Websites lesen und ändern zu dürfen.
+
+Denken Sie daran, dass sich dieses Projekt noch in Entwicklung befindet und folgende Ziele verfolgt:
+
+- Keine weitreichenden Host-Berechtigungen bei der Installation — erweiterte Berechtigungen werden explizit von Ihnen für jede einzelne Website erteilt.
+
+- Vollständig deklarativ für Zuverlässigkeit und CPU-/Speichereffizienz.
diff --git a/platform/mv3/description/webstore.el.txt b/platform/mv3/description/webstore.el.txt
new file mode 100644
index 0000000..32d043d
--- /dev/null
+++ b/platform/mv3/description/webstore.el.txt
@@ -0,0 +1,30 @@
+Το uBO Lite (uBOL) είναι ένας blocker περιεχομένου *χωρίς άδειες* που βασίζεται σε MV3.
+
+Το προεπιλεγμένο σύνολο κανόνων αντιστοιχεί στο προεπιλεγμένο σύνολο φίλτρων του uBlock Origin:
+
+- Οι ενσωματωμένες λίστες φίλτρων του uBlock Origin
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+Μπορείτε να προσθέσετε περισσότερα σύνολα κανόνων μεταβαίνοντας στη σελίδα επιλογών -- κάντε κλικ στο εικονίδιο _Cogs_ στον αναδυόμενο πίνακα.
+
+Το uBOL είναι εξ'ολοκλήρου δηλωτικό, πράγμα που σημαίνει ότι δεν υπάρχει ανάγκη για μόνιμη διαδικασία uBOL για να πραγματοποιηθεί το φιλτράρισμα, και το φιλτράρισμα περιεχομένου που βασίζεται σε έγχυση CSS/JS εκτελείται αξιόπιστα από το ίδιο το πρόγραμμα περιήγησης και όχι από την επέκταση. Αυτό σημαίνει ότι το ίδιο το uBOL δεν καταναλώνει πόρους CPU/μνήμης ενώ ο αποκλεισμός περιεχομένου είναι σε εξέλιξη -- η διαδικασία του service worker του uBOL απαιτείται _μόνο_ όταν αλληλεπιδράτε με τον αναδυόμενο πίνακα ή τις σελίδες επιλογών.
+
+Το uBOL δεν απαιτεί ευρεία άδεια "ανάγνωσης και τροποποίησης δεδομένων" κατά τον χρόνο εγκατάστασης, επομένως έχει εξαρχής περιορισμένες δυνατότητές σε σύγκριση με το uBlock Origin ή άλλα προγράμματα αποκλεισμού περιεχομένου που απαιτούν ευρείες άδειες "ανάγνωσης/τροποποίησης δεδομένων" κατά την εγκατάσταση.
+
+Ωστόσο, το uBOL σάς επιτρέπει *ρητά* να εκχωρείτε εκτεταμένες άδειες σε συγκεκριμένους ιστότοπους της επιλογής σας, ώστε να μπορεί να φιλτράρει καλύτερα σε αυτούς τους ιστότοπους χρησιμοποιώντας κοσμητικό φιλτράρισμα και έγχυση scriptlet.
+
+Για να εκχωρήσετε εκτεταμένα δικαιώματα σε έναν δεδομένο ιστότοπο, ανοίξτε το αναδυόμενο πλαίσιο και επιλέξτε μια υψηλότερη λειτουργία φιλτραρίσματος, όπως Βέλτιστη ή Ολοκληρωμένη.
+
+Στη συνέχεια, το πρόγραμμα περιήγησης θα σας προειδοποιήσει για τα αποτελέσματα της χορήγησης των πρόσθετων δικαιωμάτων που ζητούνται από την επέκταση στον τρέχοντα ιστότοπο και θα πρέπει να ενημερώσετε το πρόγραμμα περιήγησης εάν αποδέχεστε ή απορρίπτετε το αίτημα.
+
+Εάν αποδεχτείτε το αίτημα του uBOL για πρόσθετα δικαιώματα στον τρέχοντα ιστότοπο, θα μπορεί να φιλτράρει καλύτερα το περιεχόμενο για τον τρέχοντα ιστότοπο.
+
+Μπορείτε να ορίσετε την προεπιλεγμένη λειτουργία φιλτραρίσματος από τη σελίδα επιλογών του uBOL. Εάν επιλέξετε τη λειτουργία Βέλτιστη ή Ολοκληρωμένη ως προεπιλεγμένη, θα πρέπει να εκχωρήσετε στην uBOL την άδεια ανάγνωσης και τροποποίησης δεδομένων σε όλους τους ιστότοπους.
+
+Λάβετε υπόψη ότι αυτό είναι ακόμη ένα έργο σε εξέλιξη, με αυτούς τους τελικούς στόχους:
+
+- Να μην υπάρχουν ευρείες άδειες hosts κατά την εγκατάσταση -- οι εκτεταμένες άδειες παραχωρούνται ρητά από τον χρήστη σε βάση ανά τοποθεσία.
+
+- Εντελώς δηλωτικό για αξιοπιστία και απόδοση CPU/μνήμης.
diff --git a/platform/mv3/description/webstore.en_GB.txt b/platform/mv3/description/webstore.en_GB.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.en_GB.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.eo.txt b/platform/mv3/description/webstore.eo.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.eo.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.es.txt b/platform/mv3/description/webstore.es.txt
new file mode 100644
index 0000000..2ea6cff
--- /dev/null
+++ b/platform/mv3/description/webstore.es.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) es un bloqueador de contenido con *menos permisos* basado en MV3.
+
+Por defecto ya trae configuradas las siguientes listas de filtros:
+
+- Listas de filtros de uBlock Origin
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+Puedes añadir más conjuntos de reglas visitando la página de opciones, haz clic en el icono de _engranaje_ del panel emergente.
+
+uBOL es completamente declarativo, lo que significa que no hay necesidad de un proceso uBOL permanente para que se produzca el filtrado, y el filtrado de contenido basado en la inyección de CSS/JS se realiza de forma confiable por el propio navegador en lugar de la extensión. Esto significa que uBOL en sí mismo no consume recursos de CPU/memoria mientras el bloqueo de contenido está en curso, el proceso service worker de uBOL se requiere _solo_ cuando se interactúa con el panel emergente o las páginas de opciones.
+
+uBOL no requiere amplios permisos para "leer y modificar datos" en el momento de la instalación, de ahí sus capacidades limitadas en comparación con uBlock Origin u otros bloqueadores de contenido que requieren amplios permisos para "leer y modificar datos" en el momento de la instalación.
+
+Sin embargo, uBOL te permite otorgar *explícitamente* permisos extendidos en sitios específicos de tu elección para que pueda filtrar mejor en esos sitios usando filtrado cosmético e inyecciones de scriptlet.
+
+Para otorgar permisos extendidos en un sitio determinado, abre el panel emergente y elige un modo de filtrado superior, como óptimo o completo.
+
+Después el navegador te advertirá sobre los efectos de otorgar los permisos adicionales solicitados por la extensión en el sitio actual, y deberás indicar al navegador si aceptas o rechazas la solicitud.
+
+Si aceptas la solicitud de uBOL para permisos adicionales en el sitio actual, será capaz de filtrar mejor el contenido para el sitio actual.
+
+Puedes establecer el modo de filtrado predeterminado desde la página de opciones de uBOL. Si eliges como predeterminado el modo óptimo o completo, tendrás que otorgar a uBOL el permiso para leer y modificar datos en todos los sitios web.
+
+Téngase en cuenta que esto todavía es un trabajo en progreso, con estos objetivos finales:
+
+- Sin amplios permisos de host en el momento de la instalación, los permisos ampliados son otorgados explícitamente por el usuario en cada sitio.
+
+- Completamente declarativo para confiabilidad y eficiencia de la CPU/memoria.
diff --git a/platform/mv3/description/webstore.et.txt b/platform/mv3/description/webstore.et.txt
new file mode 100644
index 0000000..d3bf236
--- /dev/null
+++ b/platform/mv3/description/webstore.et.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) on MV3-l põhinev *lubadeta* sisutõkestaja.
+
+Tavaline reeglitekogum vastab uBlock Origini tavalisele filtritekogumile:
+
+- uBlock Origini sisseehitatud filtriloendid
+- EasyList
+- EasyPrivacy
+Peter Lowe'i reklaamide ja jälitusserverite loend
+
+Reeglitekogumeid saate lisada valikute lehelt ehk avanenud paneelis klõpsake _Cogs_ ikooni.
+
+uBOL on läbinisti deklaratiivne ehk filtreerimiseks pole vaja kogu aeg töötavat uBOLi protsessi ja CSS/JS süstipõhist sisu filtreerib tegelikult brauser, mitte laiendus. Teisisõnu, uBOL ei kasuta sisu tõkestamisel protsessori/mälu ressursse. uBOLi teenuse toimimise protsessi on vaja _vaid_ juhul, kui kasutate hüpikpaneeli või valikute lehekülgi.
+
+uBOL ei nõua paigaldamise ajal teadatuntud andmete lugemise ja muutmise luba, seega võrreldes seda nõudva laiendusega uBlock Origin või muu sisutõkestiga on uBOL-i piiratus üks selle funktsioonidest.
+
+Kuid uBOL võimaldab *selgesõnaliselt* anda täpsemaid lubasid teie valitud veebilehtedele, et neid saaks paremini filtreerida ilufiltrite ja skriptisüstidega.
+
+Veebilehele täpsustatud lubade andmiseks ava hüpikpaneel ja vali põhjalikum filtreerimisrežiim, näiteks Optimaalne või Põhjalik.
+
+Seejärel hoiatab brauser teid praeguse saidi laienduse taotletud täiendavate õiguste andmise tagajärgede eest ja peate brauserile ütlema, kas nõustute taotlusega või keeldute sellest.
+
+Kui nõustute uBOLi taotlusega täiendavate õiguste saamiseks praegusel saidil, saab see praeguse saidi sisu paremini filtreerida.
+
+Vaikimisi filtreerimisrežiimi saate määrata uBOLi suvandite lehelt Kui määrate optimaalse või põhjaliku režiimi tavaliseks, peate andma uBOLile loa kõikide veebilehtede andmete lugemiseks ja muutmiseks.
+
+Pidage meeles, et see on veel pooleliolev töö, mille lõppeesmärgid on järgmised:
+
+- Installimise ajal laialdased hostiõigused puuduvad – kasutaja annab laiendatud load selgesõnaliselt saidipõhiselt.
+
+- Täiesti deklaratiivne töökindluse ja protsessori/mälu tõhususe osas.
diff --git a/platform/mv3/description/webstore.eu.txt b/platform/mv3/description/webstore.eu.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.eu.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.fa.txt b/platform/mv3/description/webstore.fa.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.fa.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.fi.txt b/platform/mv3/description/webstore.fi.txt
new file mode 100644
index 0000000..7e5693c
--- /dev/null
+++ b/platform/mv3/description/webstore.fi.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) on *käyttöoikeudeton* MV3-pohjainen sisällönestotyökalu.
+
+Oletusarvoiset sääntömääritykset vastaavat uBlock Origin -laajennuksen oletuksia:
+
+- uBlock Originin sisäänrakennetut suodatinlistat
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+Voit lisätä sääntömäärityksiä asetussivulta -- paina ponnahduspaneelin _Rataskuvaketta_.
+
+uBOL on täysin deklaratiivinen, eli suodatus ei edellytä pysyvää uBOL-prosessia ja CSS-/JS-koodin manipulointiin perustuva sisällönsuodatuksen suorittaa laajennusprosessin sijaan luotettavasti selainsovellus. Tämän ansiosta itse uBOL ei kuormita prosessoria tai keskusmuistia sisällöneston tapahtuessa -- uBOL:n työprosessia tarvitaan _ainoastaan_ ponnahduspaneelia ja asetussivuja käytettäessä.
+
+uBOL ei edellytä laajan tietojen luku- ja muokkausoikeuden myöntämistä asennuksen yhteydessä, jonka vuoksi sen oletusarvoiset valmiudet ovat uBlock Originia ja muita vastaavia sisällönestotyökaluja rajallisemmat.
+
+On kuitenkin mahdollista myöntää *yksinomaisesti* uBOL:lle laajennetut käyttöoikeudet sivustokohtaisesti niiden suodatuksen tehostamiseksi kosmeettisella suodatuksella ja scriplet-injektoinnilla.
+
+Laajemmat oikeudet myönnetään avoimelle sivustolle avaamalla ponnahduspaneeli ja valitsemalla korkeampi suodatustaso, kuten Optimaalinen tai Täysi.
+
+Tällöin selain varoittaa laajennuksen avoimelle sivustolle pyytämien käyttöoikeuksien seurauksista ja pyytää hyväksymään tai hylkäämään pyynnön.
+
+Jos uBOL:n käyttöoikeuspyyntö avoimelle sivustolle hyväksytään, se pystyy suodattamaan sivuston sisältöä tehokkaammin.
+
+Voit asettaa oletusarvoisen suodatustilan uBOL:n asetussivulta. Jos valitset oletustilaksi Optimaalinen tai Täysi, on uBOL:lle myönnettävä oikeus lukea ja muokata tietojasi kaikilla verkkosivustoilla.
+
+Huomioithan, että laajennuksen kehitys vielä kesken, seuraavilla tavoitteilla:
+
+- Laajoja käyttöoikeuksia ei tarvita asennusvaiheesssa, vaan laajennetut oikeudet myönnetään aina sivustokohtaisesti käyttäjän toimesta.
+
+- Täysin deklaratiivinen luotettavuutta ja prosessorin/muistin kuormituksen keventämiseksi.
diff --git a/platform/mv3/description/webstore.fil.txt b/platform/mv3/description/webstore.fil.txt
new file mode 100644
index 0000000..0bb5710
--- /dev/null
+++ b/platform/mv3/description/webstore.fil.txt
@@ -0,0 +1,30 @@
+Ang uBO Lite (uBOL) ay isang eksperimental at *permission-less* na tagaharang ng content na nakabase sa MV3.
+
+Tulad ng uBlock Origin, ito rin ang mga default na listahan ng mga filter:
+
+- Mga built-in na listahan ng mga filter ng uBlock Origin
+- EasyList
+- EasyPrivacy
+- Listahan ni Peter Lowe sa mga ad at tracking server (Peter Lowe’s Ad and tracking server list)
+
+Makakapagdagdag ka ng higit pang mga patakaran sa pahina ng mga opsyon -- pindutin ang icon ng _gulong_ sa popup panel.
+
+Deklaratibo lamang ang uBOL, kaya hindi nito kailangan ng permanenteng proseso upang mag-filter, at mainam na ginagawa ng browser mismo imbes na ekstensyon ang pagfi-filter sa content na nakabase sa CSS o JS. Ibig-sabihin, hindi kumokonsyumo ng CPU o memorya ang uBOL habang nanghaharang -- ang proseso ng trabahante ng serbisyo ay kailangan _lang_ kung nasa popup panel o pahina ng opsyon ka.
+
+Hindi kailangan ng uBOL ang malawakang pahintulot para "basahin at baguhin ang data" pagka-install, kaya kung bago pa lang itong install ay limitado ang kakayahan nito kumpara sa uBlock Origin o iba pang mga pangharang ng content na nangangailangan ng malawakang pahintulot para "basahin at baguhin ang data" pagka-install.
+
+Ngunit, pwede mong *pasadyang* pahintulutan ang uBOL na magkaroon ng pinalawak na pahintulot sa mga website na pipiliin mo para mas mapabuti ang pagfi-filter sa mga site na iyon gamit ang kosmetikong pagfi-filter at injeksyon ng scriptlet.
+
+Upang bigyan ito ng pinalawak na pahintulot sa isang site, buksan ang popup panel at pumili ng isang mode sa pagfi-filter tulad ng Pinainam o Kumpleto.
+
+Babalaan ka ng browser tungkol sa mga epekto ng pagbibigay ng karagdagang pahintulot na hinihiling ng ekstensyon sa kasalukuyang site, at kailangan mong tumugon kung pinapahintulutan mo ba ito o hindi.
+
+Kung tatanggapin mo ang hiling ng uBOL para sa karagdagang mga pahintulot sa kasalukuyang site, mas magiging mainam ang pagfi-filter nito sa content para sa kasalukuyang site.
+
+Maitatakda mo ang default na mode sa pagfi-filter sa pahina ng mga opsyon ng uBOL. Kailangan mong pahintulutan ang uBOL na basahin o baguhin ang datos sa lahat ng mga website kung pipiliin mo ang Pinainam o Kumpleto bilang default na mode sa pagfi-filter.
+
+Tandaang kasalukuyan pang binubuo ang ekstensyong ito, at nilalayon nitong:
+
+- Walang kakailanganing malawakang pahintulot pagka-install -- ibibigay lang ng user ang karagdagang pahintulot sa mga piling site.
+
+- Deklaratibo lamang upang maging mapagkakatiwalaan at matipid sa CPU at memorya.
diff --git a/platform/mv3/description/webstore.fr.txt b/platform/mv3/description/webstore.fr.txt
new file mode 100644
index 0000000..12b9d01
--- /dev/null
+++ b/platform/mv3/description/webstore.fr.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) est un bloqueur de contenu *sans permission* basé sur le manifeste MV3.
+
+Les règles par défaut correspondent au filtrage par défaut d'uBlock Origin :
+
+- Les listes de filtres natifs d'uBlock Origin
+- EasyList
+- EasyPrivacy
+- La liste anti-serveurs pub et pistage de Peter Lowe
+
+Vous pouvez ajouter plus de règles en consultant la page des paramètres -- Cliquez sur l'_Engrenage_ dans le panneau pop-up.
+
+uBOL est entièrement déclarative, c'est-à-dire qu'il n'y a pas besoin d'un processus uBOL permanent pour filtrer, et le filtrage basé sur l'injection CSS/JavaScript se fait en toute fiabilité par le navigateur lui-même. Cela veut dire qu'en soi, uBOL ne consomme pas de ressources processeur/mémoire pendant le blocage de contenu -- l'agent de service d'uBOL n'est sollicité _que_ quand vous interagissez avec le panneau pop-up ou la page des paramètres.
+
+Contrairement à uBlock Origin ou d'autres extensions de blocage, uBOL ne nécessite pas de larges permissions de "lecture/modification des données" au moment de l'installation, ce qui explique ses capacités au départ limitées.
+
+Cependant, uBOL vous permet *explicitement* d'accorder des permissions étendues sur les sites Web de votre choix, pour qu'elle puisse mieux les filtrer en utilisant le filtrage esthétique et des injections de scriptlet.
+
+Pour accorder des permissions étendues sur un site Web donné, ouvrez le panneau pop-up et choisissez un mode de filtrage plus élevé comme le mode Optimal ou le mode Complet.
+
+Le navigateur vous préviendra alors des effets de l'accord de permissions additionnelles requises par l'extension sur le site Web en cours de consultation et vous devrez indiquer votre choix au navigateur (Accepter/Refuser).
+
+Si vous acceptez la requête d'uBOL pour des permissions additionnelles sur le site Web en cours de consultation, le filtrage de son contenu sera renforcé.
+
+Vous pouvez définir le mode de filtrage par défaut depuis la page des paramètres d'uBOL. Si vous choisissez le mode Optimal ou Complet en tant que mode par défaut, vous devrez accorder à uBOL l'autorisation de lire et de modifier des données sur tous les sites Web.
+
+Gardez à l'esprit que c'est en cours de développement, avec comme objectifs :
+
+- De ne pas accorder de permissions globales au moment de l'installation -- les permissions étendues s'accordent explicitement par l'utilisateur site par site.
+
+- De travailler de manière entièrement déclarative pour la fiabilité et l'efficacité processeur/mémoire.
diff --git a/platform/mv3/description/webstore.fy.txt b/platform/mv3/description/webstore.fy.txt
new file mode 100644
index 0000000..63fa94a
--- /dev/null
+++ b/platform/mv3/description/webstore.fy.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is in *tastimmingsleaze* MV3-basearre ynhâldsblokkearder.
+
+De standert regelset komt oerien mei de standert filterset fan uBlock Origin:
+
+- Ynboude filterlisten fan uBlock Origin
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking-serverlist
+
+Jo kinne mear regelsets tafoegje troch de opsjesside te besykjen – klik op it _tântsjilpiktogram_ yn it pop-uppaniel.
+
+uBOL is folslein deklaratyf, wat betsjut dat in permanint uBOL-proses foar de filtering net nedich is, en ynhâldsfiltering op basis fan CSS/JS-ynjeksje op in betroubere manier troch de browser sels útfierd wurdt yn stee fan de útwreiding. Dit betsjut dat uBOL sels gjin CPU-/ûnthâldboarnen brûkt wylst ynhâldsblokkearring aktyf is – it serviceworker-proses fan uBOL is _allinnich_ fereaske as jo mei it pop-uppaniel of de opsjessiden wurkje.
+
+uBOL fereasket gjin brede tastimming foar it ‘lêzen en oanpassen fan gegevens’ wylst ynstallaasje, fan dêr de beheinde ynboude mooglikheden dêrfan yn fergeliking mei uBlock Origin of oare ynhâldsblokkearders dy’t brede tastimmingen foar it ‘lêzen en oanpassen fan gegevens’ fereaskje wylst de ynstallaasje.
+
+Jo kinne yn uBOL echter *eksplisyt* wiidweidige tastimmingen ferliene op bepaalde websites fan jo kar, sadat it op dy websites better filterje kin fia kosmetyske filtering en scriptlet-ynjeksjes.
+
+Om wiidweidige tastimmingen op in bepaalde website te ferlienen, iepenje jo it pop-uppaniel en kieze jo in hegere filtermodus, lykas Optimaal of Folslein.
+
+De browser warskôget jo dan oer de gefolgen fan it ferlienen fan de troch de útwreiding oanfrege oanfoljende tastimmingen op de aktuele website, en jo moatte de browser witte litte oft jo de oanfraach akseptearje of wegerje.
+
+As jo de oanfraach fan uBOL foar oanfoljende tastimmingen op de aktuele website akseptearje, sil it ynhâld foar de aktuele website better filterje kinne.
+
+Jo kinne de standert filtermodus ynstelle fan de opsjesside fan uBOL ôf. As jo de modus Optimaal of Folslein as de standertmodus kieze, moatte jo uBOL de tastimming foar it lêzen en oanpassen fan gegevens op alle websites te ferlienen.
+
+Unthâld dat dit noch wurk yn útfiering is, mei dizze eindoelen:
+
+- Gjin brede host-tastimmingen wylst ynstallaasje – wiidweidige tastimmingen wurde eksplisyt en per website ferliend troch de brûker.
+
+- Folslein deklaratyf omwille fan betrouberheid en CPU-/ûnthâldeffisjinsje.
diff --git a/platform/mv3/description/webstore.gl.txt b/platform/mv3/description/webstore.gl.txt
new file mode 100644
index 0000000..a82432f
--- /dev/null
+++ b/platform/mv3/description/webstore.gl.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) é un bloqueador de contido baseado en MV3 *sen permisos.
+
+O conxunto de regras predeterminado corresponde ao conxunto de filtros predeterminado de uBlock Origin:
+
+- Listas de filtros integradas de uBlock Origin
+- EasyList
+- EasyPrivacy
+Lista de servidores de seguimento e anuncios de Peter Lowe
+
+Podes engadir máis conxuntos de regras visitando a páxina de opcións: fai clic na icona _Cogs_ no panel emerxente.
+
+uBOL é totalmente declarativo, o que significa que non é necesario un proceso permanente de uBOL para que se produza o filtrado e o filtrado de contido baseado en inxección de CSS/JS realízao de forma fiable o propio navegador en lugar da extensión. Isto significa que o propio uBOL non consume recursos de CPU/memoria mentres o bloqueo de contido está en curso -- o proceso do traballador do servizo de uBOL é necesario _só_ cando interactúas co panel emerxente ou coas páxinas de opcións.
+
+uBOL non require amplos permisos de "ler e modificar datos" no momento da instalación, de aí as súas capacidades limitadas fóra da caixa en comparación con uBlock Origin ou outros bloqueadores de contido que requiren amplos permisos de "ler e modificar datos" no momento da instalación.
+
+Non obstante, uBOL permítelle *de forma explícita* conceder permisos estendidos en sitios específicos da súa elección para que poida filtrar mellor neses sitios mediante filtrado cosmético e inxeccións de scriptlet.
+
+Para conceder permisos estendidos nun sitio determinado, abra o panel emerxente e escolle un modo de filtrado superior, como Óptimo ou Completa.
+
+A continuación, o navegador avisará sobre os efectos da concesión dos permisos adicionais solicitados pola extensión no sitio actual, e terá que indicarlle ao navegador se acepta ou rexeita a solicitude.
+
+Se aceptas a solicitude de uBOL de permisos adicionais no sitio actual, poderá filtrar mellor o contido do sitio actual.
+
+Podes establecer o modo de filtrado predeterminado desde a páxina de opcións de uBOL. Se escolle o modo Óptimo ou Completo como o predeterminado, terá que conceder a uBOL o permiso para ler e modificar datos en todos os sitios web.
+
+Teña en conta que este aínda é un traballo en curso, cos seguintes obxectivos finais:
+
+- Non hai permisos de host amplos no momento da instalación. Os permisos estendidos son concedidos explícitamente polo usuario por cada sitio.
+
+- Totalmente declarativo para a fiabilidade e a eficiencia da CPU/memoria.
diff --git a/platform/mv3/description/webstore.gu.txt b/platform/mv3/description/webstore.gu.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.gu.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.he.txt b/platform/mv3/description/webstore.he.txt
new file mode 100644
index 0000000..d931b3d
--- /dev/null
+++ b/platform/mv3/description/webstore.he.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) הוא חוסם תוכן *ללא הרשאות* מבוסס MV3.
+
+ערכת הכללים ברירת מחדל שמתכתבת עם ערכת המסננים של uBlock Origin:
+
+- רשימת מסננים מובנים של uBlock Origin
+- EasyList
+- EasyPrivacy
+- רשימת שרתי מודעות ומעקב של פיטר לואו
+
+ניתן להוסיף ערכות כללים נוספות מעמוד האפשרויות –על ידי הקשה על סמל _Cogs_ בלוח הצץ.
+
+uBOL הוא הכרזתי לחלוטין, כלומר אין צורך בתהליך uBOL קבוע כדי שהסינון יתרחש, וסינון תוכן מבוסס הזרקת CSS/JS מבוצע באופן אמין על ידי הדפדפן עצמו ולא על ידי ההרחבה. המשמעות היא ש־uBOL עצמו לא צורכך משאבי מעבד/זיכרון בזמן שחסימת התוכן מתרחשת – תהליך ה־service worker של uBOL נדרש _אך ורק_ בזמן הידוד עם החלון הקופץ או עם עמוד האפשרויות.
+
+uBOL לא דורש הרשאת "קריאה ושינוי נתונים" נרחבות במהלך ההתקנה, לכן היכולות המוגבלות שלה הישר מהקופסה בהשוואה ל־uBlock Origin או חוסמי תוכן אחרים הדורשים הרשאות "קריאה ושינוי נתונים" נרחבות כבר בזמן ההתקנה.
+
+עם זאת, uBOL מאפשר להעניק *באופן מפורש* הרשאות נרחבות לאתרים מסויימים על פי בחירה, למיטוב הסינון באתרים אלה, באמצעות סינון קוסמטי והזרקות סקריפלטים.
+
+כדי להעניק הרשאות נרחבות באתר נתון, נא לפתוח את הלוח הקופץ ולבחור באופן סינון גבוה יותר כגון מיטבי או מלא.
+
+לאחר מכן, תוצג אזהרת דפדפן על השפעות מתן הרשאות נוספות אותן מבקשת ההרחה באתר הנוכחי, הדפדפן ימתין לקבלת תשובה האם לקבל או לדוחות את בקשת ההרשאה.
+
+אם תקבל את הבקשה של uBOL להרשאות נוספות באתר הנוכחי, הוא יוכל לסנן טוב יותר תוכן עבור האתר הנוכחי.
+
+ניתן להגדיר את מצב הסינון המוגדר כברירת מחדל מדף האפשרויות של uBOL. אם הבחירה היתה באופןסינון מיטבי או מלא כברירת המחדל, יידרש להעניק ל־uBOL הרשאת קריאה שנוי נתונים בכל אתרי הרשת.
+
+יש לזכור שזו עדיין 'עבודה בתהליך', עם המטרות הבאות:
+
+- אין הרשאות מארח רחבות בזמן ההתקנה -- הרשאות מורחבות מוענקות במפורש על ידי המשתמש על בסיס לכל אתר.
+
+הכרזתי לחלוטין, אמין ויעיל בצריכת משאבי מעבד/זיכרון.
diff --git a/platform/mv3/description/webstore.hi.txt b/platform/mv3/description/webstore.hi.txt
new file mode 100644
index 0000000..7b361bc
--- /dev/null
+++ b/platform/mv3/description/webstore.hi.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) एक *अनुमति-रहित* MV3-आधारित कन्टेन्ट ब्लॉकर है।
+
+डिफ़ॉल्ट रूलसेट uBlock Origin के डिफ़ॉल्ट फ़िल्टर सेट के अनुरूप होता है:
+
+- uBlock Origin की बिल्ट-इन फ़िल्टर सूचियां
+- EasyList
+- EasyPrivacy
+- Peter Lowe की विज्ञापन एवं ट्रैकिंग सर्वर सू‍ची
+
+आप विकल्प पृष्ठ पर जाकर और अधिक रूलसेट जोड़ सकते हैं -- पॉपअप पैनल में _Cogs_ आइकन पर क्लिक करें।
+
+uBOL पूरी तरह से वर्णनात्मक है, जिसका यह अर्थ है कि फ़िल्टरिंग के लिए एक स्थायी uBOL प्रक्रिया की कोई आवश्यकता नहीं है, और CSS/JS इंजेक्शन-आधारित कन्टेन्ट फ़िल्टरिंग एक्सटेंशन के बजाय ब्राउज़र द्वारा विश्वसनीय रूप से की जाती है। इसका यह अर्थ है कि कन्टेन्ट ब्लॉक करते समय uBOL द्वारा सीपीयू/मेमोरी संसाधनों का उपभोग स्वयं नहीं किया जाता है -- uBOL की सर्विस प्रोसेस की आवश्यकता _केवल_ तब होती है जब आप पॉपअप पैनल या विकल्प पृष्ठों पर कोई अंत:क्रिया करते हैं।
+
+uBOL को इन्सटॉल करते समय "डेटा को पढ़ने और संशोधित करने" की व्यापक अनुमति की आवश्यकता नहीं होती है, अतः इसकी सीमित क्षमताओं तत्काल उपयोगिता की तुलना में uBlock Origin या अन्य कन्टेन्ट ब्लॉकर को इन्सटॉलेशन के समय "डेटा को पढ़ने और संशोधित करने" की व्यापक अनुमतियों की आवश्यकता होती है।
+
+हालांकि, uBOL आपको अपनी मनपसंद विशिष्ट साइटों पर विस्तारित अनुमतियां देना *स्पष्ट रूप से* अनुमत करता है ताकि यह कॉस्मेटिक फ़िल्टरिंग और स्क्रिप्टलेट इंजेक्शन का उपयोग करके उन साइटों पर अच्छी तरह से फ़िल्टर कर सके।
+
+किसी एक साइट पर विस्तारित अनुमतियां देने के लिए, पॉपअप पैनल खोलें और उच्च फ़िल्टरिंग मोड, जैसे कि 'अनुकूलतम' (ऑप्टिमल) या 'पूर्ण' (कंपलीट) चुनें।
+
+इसके बाद ब्राउज़र द्वारा आपको वर्तमान साइट पर एक्सटेंशन द्वारा अनुरोधित अतिरिक्त अनुमतियों को देने के प्रभावों के बारे में चेतावनी दी जाएगी, और आपको ब्राउज़र को यह बताना होगा कि आप अनुरोध को स्वीकार करते हैं या अस्वीकार करते हैं।
+
+यदि आप वर्तमान साइट पर अतिरिक्त अनुमतियों के लिए uBOL के अनुरोध को स्वीकार करते हैं, तो यह वर्तमान साइट के लिए कन्टेन्ट अच्छी तरह से फ़िल्टर करने में सक्षम होगा।
+
+आप uBOL के विकल्प पृष्ठ से डिफ़ॉल्ट फ़िल्टरिंग मोड को सेट कर सकते हैं। यदि आप 'अनुकूलतम' (ऑप्टिमल) या 'पूर्ण' (कंपलीट) मोड को डिफ़ॉल्ट रूप से चुनते हैं, तो आपको uBOL को सभी वेबसाइटों पर डेटा को पढ़ने और संशोधित करने के लिए अनुमत करना होगा।
+
+ध्यान रखें कि यह कार्य अभी भी प्रगतिधीन है, और इसके न‍िम्नांकित अंतिम लक्ष्यों तय किये गए हैं:
+
+- इन्सटॉल करते समय कोई व्यापक होस्ट अनुमतियां नहीं -- विस्तारित अनुमतियां उपयोगकर्ता द्वारा हर एक साइट के आधार पर स्पष्ट रूप से दी जाती हैं।
+
+- विश्वसनीयता और सीपीयू/मेमोरी दक्षता के लिए पूरी तरह वर्णनात्मक।
diff --git a/platform/mv3/description/webstore.hr.txt b/platform/mv3/description/webstore.hr.txt
new file mode 100644
index 0000000..898bc20
--- /dev/null
+++ b/platform/mv3/description/webstore.hr.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) je bloker sadržaja *bez dopuštenja* baziran na MV3.
+
+Zadana lista pravila odgovara uBlock Origin-ovoj zadanoj listi filtera:
+
+- uBlock Origin ugrađene liste filtera
+- EasyList
+- EasyPrivacy
+- Peter Lowe-ova lista oglasa i pratećih servera
+
+Možete dodati više skupova pravila tako što ćete posjetiti stranicu s opcijama -- kliknite ikonu _zupčanika_ na skočnoj ploči.
+
+uBOL je u potpunosti deklarativan, što znači da nema potrebe za trajnim uBOL procesom za filtriranje, a filtriranje sadržaja temeljeno na ubacivanju CSS/JS pouzdano izvodi sam preglednik, a ne ekstenzija. To znači da sam uBOL ne troši CPU/memorijske resurse dok je blokiranje sadržaja u tijeku -- uBOL-ov servisni radni proces potreban je _samo_ kada komunicirate s skočnom pločom ili stranicama s opcijama.
+
+uBOL ne zahtijeva široku dozvolu za "čitanje i izmjenu podataka" u vrijeme instalacije, stoga ima zadane ograničene mogućnosti u usporedbi s uBlock Origin ili drugim blokatorima sadržaja koji zahtijevaju veću dozvolu za "čitanje i izmjenu podataka" u vrijeme instalacije.
+
+Međutim, uBOL vam omogućuje da *eksplicitno* dodijelite proširena dopuštenja na određenim web-stranicama po vašem izboru tako da može bolje filtrirati te web-stranice koristeći kozmetičko filtriranje i injekcijske skripte.
+
+Da biste dodijelili proširena dopuštenja na određenoj web stranici, otvorite skočnu ploču i odaberite viši način filtriranja kao što je Optimalno ili Potpuno.
+
+Preglednik će vas tada upozoriti o učincima dodjele dodatnih dopuštenja koje traži ekstenzija na trenutnom mjestu, a vi ćete morati reći pregledniku prihvaćate li ili odbijate zahtjev.
+
+Ako prihvatite uBOL-ov zahtjev za dodatnim dozvolama na trenutnoj stranici, moći će bolje filtrirati sadržaj na njoj.
+
+Zadani način filtriranja možete postaviti na stranici s opcijama uBOL-a. Ako kao zadano odaberete Optimalni ili Potpuni način rada, morati ćete dati uBOL-u dopuštenje za čitanje i izmjenu podataka na svim web stranicama.
+
+Imajte na umu da je ovo još u tijeku, sa sljedećim krajnjim ciljevima:
+
+- Nema širokih dopuštenja hosta u vrijeme instalacije -- proširena dopuštenja izričito dodjeljuje korisnik za svaku pojedinačnu stranicu.
+
+- Potpuno deklarativno za pouzdanost i učinkovitost CPU/memorije.
diff --git a/platform/mv3/description/webstore.hu.txt b/platform/mv3/description/webstore.hu.txt
new file mode 100644
index 0000000..4d54e2f
--- /dev/null
+++ b/platform/mv3/description/webstore.hu.txt
@@ -0,0 +1,30 @@
+Az uBO Lite (uBOL) egy *engedélyt nem igénylő* MV3-alapú tartalomblokkoló.
+
+Az alapértelmezett szabálykészlet megfelel a uBlock Origin alapértelmezett szűrőkészletének:
+
+- uBlock Origin beépített szűrőlistái
+- EasyList
+- EasyPrivacy
+- Peter Lowe hirdetési és nyomkövető-kiszolgálókat tartalmazó listája
+
+További szabályokat adhat hozzá a beállítások oldalon – kattintson a _Fogaskerekek_ ikonra a felugró panelen.
+
+Az uBOL teljes mértékben deklaratív, vagyis nincs szükség állandó uBOL folyamatra a szűréshez, és a CSS/JS injektálás-alapú tartalomszűrést maga a böngésző végzi megbízhatóan, nem pedig a kiegészítő. Ez azt jelenti, hogy az uBOL maga nem fogyaszt CPU/memória erőforrásokat, amíg a tartalom blokkolása folyamatban van – az uBOL service worker folyamatára _csak_ akkor van szükség, amikor az felugró panellel vagy a beállítási oldalakkal érintkezik.
+
+Az uBOL nem igényel széles körű „adatok módosítása és olvasása” engedélyt a telepítéskor, ezért korlátozott képességei vannak az uBlock Originhez vagy más tartalomblokkolókhoz képest, amelyek széles körű „adatok olvasása és módosítása” engedélyeket igényelnek a telepítésükkor.
+
+Az uBOL azonban lehetővé teszi, hogy *kifejezetten* kiterjesztett engedélyeket adjon az Ön által választott bizonyos webhelyekhez, hogy jobban szűrhessen ezeken a webhelyeken kozmetikai szűréssel és szkriptlet-injekciókkal.
+
+Ha kiterjesztett engedélyeket szeretne adni egy adott webhelyen, nyissa meg az előugró panelt, és válasszon magasabb szűrési módot, például Optimális vagy Teljes.
+
+A böngésző ekkor figyelmezteti Önt a bővítmény által kért további engedélyek megadásának hatásaira az aktuális webhelyen, és közölnie kell a böngészővel, hogy elfogadja-e vagy elutasítja a kérést.
+
+Ha elfogadja az uBOL további engedélyekre vonatkozó kérését az aktuális webhelyen, akkor jobban tudja szűrni az aktuális webhely tartalmát.
+
+Az alapértelmezett szűrési módot az uBOL beállítási oldalán állíthatja be. Ha az Optimális vagy a Teljes módot választja alapértelmezettként, akkor az uBOL-nak engedélyt kell adnia az adatok olvasására és módosítására az összes webhelyen.
+
+Ne feledje, hogy ez még folyamatban van, a következő célokkal:
+
+- Nincsenek széles körű gazdagép-engedélyek a telepítés során – a kiterjesztett engedélyeket a felhasználó kifejezetten webhelyenként adja meg.
+
+- Teljesen deklaratív a nagyobb megbízhatóság illetve CPU- és memóriahatékonyság érdekében.
diff --git a/platform/mv3/description/webstore.hy.txt b/platform/mv3/description/webstore.hy.txt
new file mode 100644
index 0000000..c847ac6
--- /dev/null
+++ b/platform/mv3/description/webstore.hy.txt
@@ -0,0 +1,34 @@
+uBO Lite (uBOL)-ը բովանդակության արգելափակիչ է, որը *չի պահանջում թույլտվություններ*, և հիմնված է MV3-ի վրա։
+
+Կանոնների լռելյայն փաթեթը համապատասխանում է uBlock Origin-ի լռելյայն զտիչների փաթեթին։
+
+- uBlock Origin-ի ներկառուցված զտիչների ցանկ
+- EasyList
+- EasyPrivacy
+- Peter Lowe-ի գովազդային և հետագծող սպասարկիչների ցուցակ
+
+Դուք կարող եք ավելացնել ուրիշ կանոններ՝ այցելելով ընտրանքների էջը. կտտացրեք Ժանանվակի_պատկերակին դուրս լողացող վահանակում։
+
+uBOL-ն ամբողջությամբ դեկլարատիվ է, այսինքն՝ զտման համար անընդհատ կատարվող uBOL գործընթացի կարիք չկա, իսկ CSS/JS արմատավորման վրա հիմնված բովանդակության զտումը հուսալիորեն իրականացվում է զննիչի կողմից, այլ ոչ թե ընդլայնման միջոցով։ Սա նշանակում է, որ uBOL հավելումը չի սպառում մշակիչի/հիշողության որևէ ռեսուրս, երբ տեղի է ունենում գովազդի արգելափակումը. uBOL աշխատանքային գործընթացն աշխատում է _միայն_ երբ Դուք փոփոխություններ եք կատարում դուրս լողացող վահանակում կամ ընտրանքների էջում։
+
+uBOL-ը տեղադրման ժամանակ «տվյելները լիովին ընթերցելու և փոփոխելու» թույլտվություն չի պահանջում, ուստի այն ունի սահմանափակ հնարավորություններ՝ համեմատած uBlock Origin-ի և բովանդակության այլ արգելափակիչների հետ, որոնք տեղադրման ժամանակ պահանջում են այդպիսի թույլտվություն։
+
+Однако uBOL позволяет *намеренно* давать расширенные разрешения для определенных сайтов - по вашему усмотрению, чтобы эффективнее работать, используя косметическую фильтрацию и scriptlet-внедрения.
+
+Այնուամենայնիվ, uBOL-ը թույլ է տալիս *դիտմամբ* տրամադրել ընդլայնված թույլտվություններ Ձեր ընտրած կայքերի համար, որպեսզի այն կարողանա էլ ավելի լավ զտել այդ կայքերը՝ օգտագործելով կոսմետիկ զտումը և սցենարների արմատավորումները։
+
+Для предоставления расширенных разрешений на текущем сайте - откройте всплывающую панель и выберите повышенный режим фильтрации: Оптимальный или Полный.
+
+Ընթացիկ կայքում ընդլայնված թույլտվություններ տրամադրելու համար բացեք դուրս լողացող վահանակը և ընտրեք ընդլայնված զտման ռեժիմ՝ Գերադասելի կամ Ամբողջական։
+
+Այնուհետև զննիչը կզգուշացնի Ձեզ ընթացիկ կայքում ընդլայնման կողմից պահանջվող լրացուցիչ թույլտվությունների տրամադրման հետևանքների մասին, և Դուք պետք է ընտրեք՝ ընդունում եք, թե մերժում եք հայտը։
+
+Եթե ​​ընդունեք uBOL-ին լրացուցիչ թույլտվություններ տալու հայտը, ապա այն կկարողանա ավելի արդյունավետ կերպով զտել ընթացիկ կայքի բովանդակությունը։
+
+Դուք կարող եք սահմանել զտման լռելյայն ռեժիմը uBOL-ի ընտրանքների էջում։ Եթե ​​որպես լռելյայն ընտրեք «Գերադասելի» կամ «Ամբողջական» ռեժիմը, պետք կլինի uBOL-ին թույլտվություն տրամադրեք կարդալու և փոփոխելու տվյալները բոլոր կայքերում։
+
+Հիշեք, որ այս նախագիծը մշակման ակտիվ փուլում է, որ ունի հետևյալ նպատակները.
+
+- Տեղադրման ընթացքում Սահմանափակ թույլտվություններով աշխատանք տեղադրման ժամանակ. օգտվողը ընդլայնված թույլտվություններ է տալիս իր հայեցողությամբ, յուրաքանչյուր կայքի համար առանձին։
+
+- Ամբողջովին դեկլարատիվ է հուսալիության և մշակիչի/հիշողության արտադրողականության համար։
diff --git a/platform/mv3/description/webstore.id.txt b/platform/mv3/description/webstore.id.txt
new file mode 100644
index 0000000..33c86b6
--- /dev/null
+++ b/platform/mv3/description/webstore.id.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) adalah pemblokir konten berbasis MV3 yang membutuhkan lebih sedikit perizinan.
+
+Kumpulan aturan bawaan sesuai dengan kumpulan penyaringan bawaan uBlock Origin:
+
+- Daftar filter bawaan uBlock Origin
+- EasyList
+- EasyPrivacy
+- Daftar server iklan dan pelacak Peter Lowe
+
+kamu dapat menambahkan rulesets di halaman opsi -- klik ikon _Cogs_ di panel popup.
+
+uBOL sepenuhnya deklaratif, yang mana tidak membutuhkan proses permanen uBOL agar penyaringan dapat terjadi, dan penyaringan konten berbasis injeksi CSS/JS dilakukan sepenuhnya oleh peramban itu sendiri ketimbang oleh ekstensi. Ini berarti bahwa uBOL sendiri tidak mengkonsumsi sumber daya CPU/memori selama melakukan pemblokiran konten -- proses pekerja layanan uBOL dibutuhkan _hanya_ ketika Anda berinteraksi dengan panel popup atau opsi halaman.
+
+uBOL tidak membutuhkan izin "baca dan modifikasi data" pada waktu penginstalan, maka kemampuannya lebih terbatas jika dibandingkan dengan uBlock Origin atau pemblokir konten lain yang memerlukan izin "baca dan modifikasi data" pada waktu penginstalan.
+
+Namun, uBOL memberi anda opsi untuk *secara eksplisit* memberikan izin tambahan pada situs pilihan Anda, sehingga dapat memfilter situs tersebut dengan lebih baik menggunakan pemfilteran kosmetik dan injeksi scriptlet.
+
+Untuk memberikan izin tambahan pada situs tertentu, buka panel popup dan pilih mode pemfilteran yang lebih tinggi seperti Optimal atau Complete.
+
+Perambaan kemudian akan memperingatkan anda tentang efek memberikan izin tambahan yang diminta oleh ekstensi pada situs saat ini, dan Anda harus memberitahu perambaan apakah anda menyetujui atau menolak permintaan.
+
+Jika Anda menyetujui permintaan uBOL untuk izin tambahan pada situs terkini, uBOL akan dapat menyaring konten dengan lebih baik untuk situs terkini.
+
+Anda dapat menentukan mode penyaringan bawaan dari halaman pengaturan uBOL Jika Anda memilih mode Optimal atau Complete sebagai mode bawaan, Anda perlu memberikan uBOL izin untuk membaca dan mengubah data pada semua situs web.
+
+Mohon diingat bahwa ini msaih dalam tahap proses pengerjaan, dengan tujuan akhir sebagai berikut:
+
+- Tidak ada izin pengguna yang luas saat penginstalan -- izin tambahan diberikan secara eksplisit oleh pengguna berdasarkan tiap situs.
+
+- Sepenuhnya delkaratif untuk reliabilitas dan CPU/efisiensi memori.
diff --git a/platform/mv3/description/webstore.it.txt b/platform/mv3/description/webstore.it.txt
new file mode 100644
index 0000000..0aa86f4
--- /dev/null
+++ b/platform/mv3/description/webstore.it.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) è un sistema per bloccare contenuti che *non richiede autorizzazioni* basato su MV3.
+
+L'insieme di regole predefinite corrisponde a quello di uBlock Origin:
+
+- Elenco dei filtri integrati in uBlock Origin
+- EasyList
+- EasyPrivacy
+- Elenco dei server di tracciatura e pubblicità di Peter Lowe
+
+Puoi aggiungere altre regole nella pagina delle opzioni. Clicca sull'icona _Ingranaggi_ nel pannello a comparsa.
+
+uBOL è interamente dichiarativo ovvero non è necessario un processo uBOL permanente per eseguire il filtraggio e il filtraggio dei contenuti CSS/JS inietattai viene eseguito in modo affidabile dal browser stesso piuttosto che dall'estensione. Ciò significa che lo stesso uBOL non consuma risorse di CPU/memoria mentre il blocco dei contenuti è in corso: il processo di lavoro di servizio di uBOL è richiesto _solo_ quando interagisci con il pannello popup o le pagine delle opzioni.
+
+uBOL non richiede un'ampia autorizzazione di "lettura e modifica dei dati" al momento dell'installazione, da qui le sue capacità limitate rispetto a uBlock Origin o ad altre estensioni che richiedono ampie autorizzazioni di "lettura e modifica dei dati" al momento dell'installazione.
+
+Tuttavia, uBOL consente di concedere *esplicitamente* permessi estesi a siti specifici di vostra scelta, in modo da poter filtrare meglio tali siti utilizzando il filtraggio cosmetico e le iniezioni di scriptlet.
+
+Per concedere autorizzazioni estese su un determinato sito, apri il pannello popup e scegli una modalità di filtraggio più restrittiva come Ottimale o Completa.
+
+Il browser ti avviserà degli effetti della concessione delle autorizzazioni aggiuntive richieste dall'estensione sul sito corrente e dovrai comunicare al browser se accetti o rifiuti la richiesta.
+
+Se accetti la richiesta di uBOL per ulteriori autorizzazioni sul sito corrente, sarà in grado di filtrare meglio i contenuti per il sito corrente.
+
+Puoi impostare la modalità di filtraggio predefinita dalla pagina delle opzioni di uBOL. Se scegli come predefinita la modalità Ottimale o Completa, dovrai concedere a uBOL il permesso di leggere e modificare i dati di tutti i siti web.
+
+Tieni presente che questo è ancora un work in progress, con questi obiettivi finali:
+
+- Nessuna autorizzazione host ampia al momento dell'installazione: le autorizzazioni estese vengono concesse esplicitamente dall'utente in base al sito.
+
+- Interamente dichiarativo per l'affidabilità e l'efficienza della CPU/memoria.
diff --git a/platform/mv3/description/webstore.ja.txt b/platform/mv3/description/webstore.ja.txt
new file mode 100644
index 0000000..5ae015f
--- /dev/null
+++ b/platform/mv3/description/webstore.ja.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) は権限を必要としない MV3 ベースのコンテンツブロッカーです。
+
+デフォルトのルールセットは以下の通り。uBlock Origin のデフォルトフィルターセットと同じです。
+
+- uBlock Origin の内製フィルターリスト
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+オプションページでルールセットを追加できます -- ポップアップ パネルの「歯車」アイコンをクリックします。
+
+uBOL は完全に宣言的です。つまり、フィルタリングを行うための恒久的な uBOL プロセスは必要なく、CSS/JS インジェクション ベースのコンテンツフィルタリングは拡張機能ではなくブラウザによって、確実に実行されます。 これは uBOL がコンテンツブロッキングの際に CPU、メモリを消費しないことを意味します。uBOL のサービス ワーカーは ポップアップ パネルや設定ページでのみ必要とされます。
+
+uBOL はインストール時に広範な「データの読み取りと変更」の権限を要求しません。したがって uBlock Origin やその他の、インストール時に広範な「データの読み取りと変更」の権限を要求するコンテンツ ブロッカーに比べて、行えることが制限されています。
+
+しかし、ユーザーの選んだ特定のサイトに対する拡張権限を「明示的に」付与すれば、そのサイト上で整形フィルターやスクリプトレットの挿入を用いた優れたフィルタリングを行うことができます。
+
+特定のサイトで拡張された権限を付与するには、ポップアップ パネルを開いて、「最適」や「完全」のようなより高いフィルタリングモードを選択します。
+
+ブラウザは、現在のサイトで拡張機能によってリクエストされた追加の権限を付与することによってもたらされる影響について警告します。承認または拒否することができます。
+
+閲覧中のサイトに対するuBOLの追加的な権限要求リクエストを承認すると、そのサイトへのコンテンツフィルタリングの品質をあげることができます。
+
+uBOL の設定ページで既定のフィルタリングモードを設定できます。 「最適」または「完全」を規定のフィルタリング モードに設定した場合、すべてのWebサイトで「データの読み取りと変更」権限を付与する必要があります。
+
+注意として、uBOL はまだ開発途中で、これらの開発目標があります。
+
+- インストール時に広範なホスト権限は不要 -- 拡張された権限はサイトごとにユーザーによって明示的に付与されます。
+
+- 完全に宣言的で、CPU、メモリの効率性が良い
diff --git a/platform/mv3/description/webstore.ka.txt b/platform/mv3/description/webstore.ka.txt
new file mode 100644
index 0000000..ffcc985
--- /dev/null
+++ b/platform/mv3/description/webstore.ka.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) *ნებართვებისგან თავისუფალი* MV3-ზე დაფუძნებული შიგთავსის შემზღუდავია.
+
+წესების ნაგულისხმევი კრებული იგივეა, რასაც uBlock Origin იყენებს:
+
+- uBlock Origin – ფილტრების ჩაშენებული სიები
+- EasyList
+- EasyPrivacy
+- Peter Lowe – სარეკლამო სერვერების სია
+
+შეგიძლიათ სხვა კრებულებიც დაამატეთ პარამეტრების გვერდიდან -- დაწკაპეთ _Cogs_ ხატულაზე ამომხტომ არეში.
+
+uBOL სრულად დეკლარაციულია, ანუ არაა საჭირო მუდმივად იყოს გაშვებული uBOL-პროცესი გასაფილტრად, CSS/JS ჩანაცვლებით შიგთავსის გაფილტვრას თავად ბრაუზერი უზრუნველყოფს ნაცვლად გაფართოებისა, რაც მეტად საიმედოა. შესაბამისად, uBOL თავად არ დატვირთავს პროცესორს/ოპერატიულს შიგთავსის შეზღუდვის დროს -- uBOL-ის შუამავალი მომსახურე პროცესი საჭიროა _მხოლოდ_ მაშინ, როცა ამომხტომ არესთან ურთიერთქმედებთ ან ცვლით პარამეტრებს.
+
+uBOL არ საჭიროებს „მონაცემთა წაკითხვისა და შეცვლის“ სრულ ნებართვას დაყენებისას, ვინაიდან მოკვეცილი შესაძლებლობებითაა წარმოდგენილი uBlock Origin-თან ან რეკლამის სხვა შემზღუდავებთან შედარებით, რომლებიც ერთბაშად ითხოვს „მონაცემთა წაკითხვისა და შეცვლის“ უფლებას დაყენებისთანავე.
+
+ამასთანავე, uBOL საშუალებას გაძლევთ *მკაფიო* თანხმობით მიუთითოთ გაფართოებული ნებართვები ცალკეულ საიტებზე სურვილისამებრ, რომ უკეთ შეიზღუდოს შიგთავსი ხილული ელემენტების გაფილტვრითა და პროგრამული ჩამატებებით.
+
+გაფართოებული ნებართვების მისაცემად მითითებულ საიტზე, გახსენით ამომხტომი არე და აირჩიეთ ფილტრაციის უფრო მაღალი დონე, როგორიცაა „წონასწორული“ ან „სრული“.
+
+შემდეგ ბრაუზერი გაგაფრთხილებთ გაფართოების მიერ დამატებითი ნებართვების მოთხოვნის შესახებ მოცემულ საიტზე და აირჩევთ, დათანხმდებით თუ უარყოფთ მოთხოვნას.
+
+თუ დათანხმდებით uBOL-ს მოთხოვნას დამატებითი ნებართვებისთვის მიმდინარე საიტზე, უკეთ შეძლებს შიგთავსის შეზღუდვას აღნიშნულ საიტზე.
+
+შეგიძლიათ მიუთითოთ გაფილტვრის ნაგულისხმევი რეჟიმი uBOL-ის პარამეტრების გვერდიდან. თუ აირჩევთ „წონასწორულ“ ან „სრულ“ რეჟიმს ნაგულისხმევად, uBOL-ს უნდა დართოთ ყველა საიტზე მონაცემთა წაკითხვისა და შეცვლის ნება.
+
+დაიხსომეთ, რომ ჯერ კიდევ მუშავდება შემდეგი მიზნებისთვის:
+
+- არანაირი სრული ნებართვების ერთბაშად მოთხოვნა დაყენებისას -- დამატებითი უფლებები შეიძლება მიეცეს მომხმარებლის მკაფიო თანხმობით თითოეულ საიტზე ცალ-ცალკე.
+
+- სრულად დეკლარაციულია პროცესორის/მეხსიერების დასაზოგად.
diff --git a/platform/mv3/description/webstore.kk.txt b/platform/mv3/description/webstore.kk.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.kk.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.kn.txt b/platform/mv3/description/webstore.kn.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.kn.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.ko.txt b/platform/mv3/description/webstore.ko.txt
new file mode 100644
index 0000000..c23291c
--- /dev/null
+++ b/platform/mv3/description/webstore.ko.txt
@@ -0,0 +1,30 @@
+uBO Lite(uBOL)는 *적은 권한을 요구하는* MV3 기반 콘텐츠 차단기입니다.
+
+기본 규칙 목록은 uBlock Origin의 기본 필터 목록과 대응됩니다.
+
+- uBlock Origin 내장 필터 목록
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+설정 페이지에서 규칙 목록을 더욱 추가할 수 있습니다. 팝업 창의 _Cogs_ 아이콘을 누르세요.
+
+uBOL은 완전히 선언적이라 필터링 중 영구적으로 실행되는 uBOL 프로세스를 필요로 하지 않으며, CSS/JS 주입 기반 콘텐츠 필터링이 확장 프로그램이 아닌 브라우저 자체에서 더욱 안정적으로 동작합니다. 즉 uBOL 자체는 콘텐츠 차단을 하는 동안 CPU/메모리 리소스를 소비하지 않습니다. uBOL 서비스워커 프로세스는 사용자가 팝업 창이나 설정을 열었을 _때에만_ 동작합니다.
+
+uBOL은 설치 시 광범위한 "읽기 및 수정" 권한을 요구하지 않으므로, 설치 후 즉시 쓸 수 있는 기능들은 uBlock Origin이나 설치 시 광범위한 "읽기 및 수정" 권한을 요구하는 다른 콘텐츠 차단기에 비해 제한됩니다.
+
+하지만 uBOL에서는 원하는 특정 사이트에 대해 확장된 권한을 부여하여, 해당 사이트를 표면 필터링 및 스크립트 주입을 바탕으로 더욱 잘 필터링할 수 있습니다.
+
+주어진 사이트에 확장된 권한을 부여하려면, 팝업 창을 열고 필터링 모드를 '최적'이나 '완전'과 같이 더 높은 수준으로 선택하세요.
+
+브라우저는 확장 프로그램에 현재 사이트에 대한 추가 권한을 부여했을 때 발생할 수 있는 일에 대해 경고할 것이며, 권한 요청을 수락할지 거부할지 선택해야 합니다.
+
+현재 사이트에 대해 uBOL에 추가 권한을 부여하면, 해당 사이트의 콘텐츠를 더욱 잘 필터링할 수 있습니다.
+
+uBOL 설정 페이지에서 기본 필터링 모드를 설정할 수 있습니다. 기본 모드를 '최적' 혹은 '완전'으로 설정하는 경우, uBOL에 모든 웹사이트에서 데이터를 읽고 수정할 수 있는 권한을 부여해야 합니다.
+
+본 확장 프로그램은 여전히 아래 목표를 달성하기 위해 개발 중인 단계입니다.
+
+- 설치 시 광범위한 호스트 권한을 요구하지 않고, 사용자가 사이트마다 명시적으로 확장된 권한을 부여할 수 있도록 합니다.
+
+- 완전히 선언적으로 구현하여 CPU/메모리 효율성과 신뢰성을 확보합니다.
diff --git a/platform/mv3/description/webstore.ku.txt b/platform/mv3/description/webstore.ku.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.ku.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.lt.txt b/platform/mv3/description/webstore.lt.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.lt.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.lv.txt b/platform/mv3/description/webstore.lv.txt
new file mode 100644
index 0000000..078cf7f
--- /dev/null
+++ b/platform/mv3/description/webstore.lv.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) ir *bezatļauju* uz MV3 balstīts satura aizturētājs.
+
+Noklusējuma nosacījumu kopa atbilst uBokc Origin noklusējuma aizturēšanas kopai:
+
+- uBlock Origin iebūvētie aizturēšanas saraksti
+- EasyList
+- EasyPrivacy
+- Pētera Lova (Peter Lowe) reklāmu un izsakošanas serveru saraksts
+
+Vairāk nosacījumu kopu var pievienot iestatījumu sadaļā -- jāklikšķina _Zobratu_ ikona uznirstošajā logā.
+
+uBOL ir pilnībā vispārīgs, kas nozīmē, ka nav nepieciešamības pēc pastāvīga uBOL procesa, lai notiktu aizturēšana, un uz CSS/JS ievietošanu balstīta satura aizturēšanu uzticami veic pārlūks, nevis paplašinājums. Tas nozīmē, ka uBOL pats par sevi neizmanto procesoru un atmiņu, kamēr satura aizturēšana ir notiekoša -- uBOL pakalpojuma strādņa process ir nepieciešams _tikai_ tad, kad notiek mijiedarbība ar uznirstošo logu vai iestatījumu sadaļām.
+
+uBOL nav nepieciešamas plašas "lasīt un pārveidot datus" atļaujas uzstādīšanas laikā, tāpēc tam ir ierobežotas spējas pēc noklusējuma, salīdzinājumā ar uBlock Origin vai citiem satura aizturētājiem, kas pieprasa plašas "lasīt un pārveidot datus" atļaujas uzstādīšanas laikā.
+
+Tomēr uBOL ļauj piešķirt paplašinātās atļaujas *tieši* noteiktās vietnēs pēc izvēles, lai tas varētu labāk veikt aizturēšanu tajās, izmantojot kosmētisku aizturēšanu un skriptu ievietošanu.
+
+Lai nodrošinātu paplašinātas piekļuves tiesības noteiktā vietnē, jāatver uznirstošais logs un jāizvēlas striktāks aizturēšanas veids, kā, piemēram, "Labākais" vai "Pilnīgais".
+
+Pārlūks tad brīdinās ietekmi, ko radīs paplašinājuma pieprasīto papildu atļauju nodrošināšana pašreizējā vietnē, un būs jānorāda, vai pieprasījums tiek apstiprināts vai noraidīts.
+
+Ja pašreizējā vietnē tiek apstiprināts uBOL papildu atļauju pieprasījums, paplašinājums varēs labāk veikt satura aizturēšanu.
+
+Noklusējuma aizturēšanas veids ir norādāms uBOL uzstādījumu lapā. Ja tiek izvēlēts "Labākais" vai "Pilnīgais" kā noklusējuma, tad būs nepieciešams nodrošināt uBOL tiesības rakstīt un pārveidot datus visās tīmekļa vietnēs.
+
+Jāpatur prātā, ka šī iespēja joprojām tiek izstrādāta ar šādiem mērķiem:
+
+- Nav plašu saimniekdatora atļauju uzstādīšanas laikā -- paplašinātas atļaujas nodrošina lietotājs atsevišķi katrai vietnei.
+
+- Pilnībā vispārīgs - uzticamībai un procesora/atmiņas lietderīgai izmantošanai.
diff --git a/platform/mv3/description/webstore.mk.txt b/platform/mv3/description/webstore.mk.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.mk.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.ml.txt b/platform/mv3/description/webstore.ml.txt
new file mode 100644
index 0000000..9237bc2
--- /dev/null
+++ b/platform/mv3/description/webstore.ml.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) ഒരു *അനുമതി-കുറവ്* MV3 അടിസ്ഥാനമാക്കിയുള്ള ഉള്ളടക്ക ബ്ലോക്കറാണ്.
+
+ഡിഫോൾട്ട് റൂൾസെറ്റ് uBlock Origin-ന്റെ ഡിഫോൾട്ട് ഫിൽട്ടർസെറ്റുമായി യോജിക്കുന്നു:
+
+- uBlock ഒറിജിനിന്റെ ബിൽറ്റ്-ഇൻ ഫിൽട്ടർ ലിസ്റ്റുകൾ
+- ഈസി ലിസ്റ്റ്
+- ഈസി സ്വകാര്യത
+- പീറ്റർ ലോവിന്റെ പരസ്യവും ട്രാക്കിംഗ് സെർവർ ലിസ്റ്റും
+
+ഓപ്ഷനുകൾ പേജ് സന്ദർശിച്ച് നിങ്ങൾക്ക് കൂടുതൽ നിയമങ്ങൾ ചേർക്കാൻ കഴിയും -- പോപ്പ്അപ്പ് പാനലിലെ _Cogs_ ഐക്കണിൽ ക്ലിക്കുചെയ്യുക.
+
+uBOL പൂർണ്ണമായും ഡിക്ലറേറ്റീവ് ആണ്, അതായത് ഫിൽട്ടറിംഗ് സംഭവിക്കുന്നതിന് ഒരു സ്ഥിരമായ uBOL പ്രക്രിയയുടെ ആവശ്യമില്ല, കൂടാതെ CSS/JS ഇഞ്ചക്ഷൻ അടിസ്ഥാനമാക്കിയുള്ള ഉള്ളടക്ക ഫിൽട്ടറിംഗ്, എക്സ്റ്റൻഷനേക്കാൾ വിശ്വസനീയമായി ബ്രൗസർ തന്നെ നിർവഹിക്കുന്നു. ഉള്ളടക്കം തടയൽ നടന്നുകൊണ്ടിരിക്കുമ്പോൾ uBOL തന്നെ CPU/മെമ്മറി ഉറവിടങ്ങൾ ഉപയോഗിക്കില്ല എന്നാണ് ഇതിനർത്ഥം -- നിങ്ങൾ പോപ്പ്അപ്പ് പാനലുമായോ ഓപ്‌ഷൻ പേജുകളുമായോ സംവദിക്കുമ്പോൾ _only_ uBOL-ന്റെ സേവന വർക്കർ പ്രോസസ്സ് ആവശ്യമാണ്.
+
+ഇൻസ്റ്റാളേഷൻ സമയത്ത് uBOL ന് വിശാലമായ "ഡാറ്റ വായിക്കാനും പരിഷ്‌ക്കരിക്കാനും" അനുമതി ആവശ്യമില്ല, അതിനാൽ uBlock ഒറിജിൻ അല്ലെങ്കിൽ മറ്റ് ഉള്ളടക്ക ബ്ലോക്കറുകൾ എന്നിവയുമായി താരതമ്യപ്പെടുത്തുമ്പോൾ അതിന്റെ പരിമിതമായ കഴിവുകൾ ഇൻസ്റ്റാളേഷൻ സമയത്ത് വിശാലമായ "ഡാറ്റ വായിക്കാനും പരിഷ്‌ക്കരിക്കാനും" അനുമതികൾ ആവശ്യമാണ്.
+
+എന്നിരുന്നാലും, നിങ്ങൾ തിരഞ്ഞെടുക്കുന്ന നിർദ്ദിഷ്ട സൈറ്റുകളിൽ വിപുലീകൃത അനുമതികൾ *വ്യക്തമായി* നൽകാൻ uBOL നിങ്ങളെ അനുവദിക്കുന്നു, അതുവഴി കോസ്മെറ്റിക് ഫിൽട്ടറിംഗും സ്ക്രിപ്റ്റ്ലെറ്റ് കുത്തിവയ്പ്പുകളും ഉപയോഗിച്ച് ആ സൈറ്റുകളിൽ മികച്ച രീതിയിൽ ഫിൽട്ടർ ചെയ്യാൻ കഴിയും.
+
+തന്നിരിക്കുന്ന സൈറ്റിൽ വിപുലമായ അനുമതികൾ നൽകുന്നതിന്, പോപ്പ്അപ്പ് പാനൽ തുറന്ന് ഒപ്റ്റിമൽ അല്ലെങ്കിൽ കംപ്ലീറ്റ് പോലുള്ള ഉയർന്ന ഫിൽട്ടറിംഗ് മോഡ് തിരഞ്ഞെടുക്കുക.
+
+നിലവിലെ സൈറ്റിൽ വിപുലീകരണം അഭ്യർത്ഥിച്ച അധിക അനുമതികൾ നൽകുന്നതിന്റെ ഫലങ്ങളെക്കുറിച്ച് ബ്രൗസർ നിങ്ങൾക്ക് മുന്നറിയിപ്പ് നൽകും, നിങ്ങൾ അഭ്യർത്ഥന സ്വീകരിക്കുകയോ നിരസിക്കുകയോ ചെയ്യണോ എന്ന് നിങ്ങൾ ബ്രൗസറിനോട് പറയേണ്ടിവരും.
+
+നിലവിലെ സൈറ്റിൽ കൂടുതൽ അനുമതികൾക്കായുള്ള uBOL-ന്റെ അഭ്യർത്ഥന നിങ്ങൾ അംഗീകരിക്കുകയാണെങ്കിൽ, നിലവിലെ സൈറ്റിനായി മികച്ച ഉള്ളടക്കം ഫിൽട്ടർ ചെയ്യാൻ അതിന് കഴിയും.
+
+uBOL-ന്റെ ഓപ്‌ഷൻ പേജിൽ നിന്ന് നിങ്ങൾക്ക് ഡിഫോൾട്ട് ഫിൽട്ടറിംഗ് മോഡ് സജ്ജമാക്കാൻ കഴിയും. ഒപ്റ്റിമൽ അല്ലെങ്കിൽ കംപ്ലീറ്റ് മോഡ് ഡിഫോൾട്ടായി നിങ്ങൾ തിരഞ്ഞെടുക്കുകയാണെങ്കിൽ, എല്ലാ വെബ്‌സൈറ്റുകളിലെയും ഡാറ്റ വായിക്കാനും പരിഷ്‌ക്കരിക്കാനും നിങ്ങൾ uBOL-ന് അനുമതി നൽകേണ്ടതുണ്ട്.
+
+ഈ അന്തിമ ലക്ഷ്യങ്ങളോടെ ഇത് ഇപ്പോഴും പുരോഗമിക്കുന്ന ഒരു ജോലിയാണെന്ന് ഓർമ്മിക്കുക:
+
+- ഇൻസ്റ്റാളേഷൻ സമയത്ത് ബ്രോഡ് ഹോസ്റ്റ് അനുമതികളൊന്നുമില്ല -- ഓരോ സൈറ്റിന്റെ അടിസ്ഥാനത്തിൽ വിപുലീകൃത അനുമതികൾ ഉപയോക്താവ് വ്യക്തമായി നൽകുന്നു.
+
+- വിശ്വാസ്യതയ്ക്കും സിപിയു/മെമ്മറി കാര്യക്ഷമതയ്ക്കും പൂർണ്ണമായും പ്രഖ്യാപനം.
diff --git a/platform/mv3/description/webstore.mr.txt b/platform/mv3/description/webstore.mr.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.mr.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.ms.txt b/platform/mv3/description/webstore.ms.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.ms.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.nb.txt b/platform/mv3/description/webstore.nb.txt
new file mode 100644
index 0000000..c45f9a5
--- /dev/null
+++ b/platform/mv3/description/webstore.nb.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) er en *tillatelses-begrenset* MV3-basert innholdsblokkerer.
+
+Standardregelsettet tilsvarer standardfiltersettet til uBlock Origin:
+
+- uBlock Origin's innebygde filterlister
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+Du kan legge til flere regelsett ved å gå til innstillingssiden -- klikk _Tannhjul_-ikonet i oppsprettspanelet.
+
+uBOL er fullstendig deklarativ, noe som betyr at det ikke er behov for en permanent uBOL-prosess for at filtreringen skal skje, og CSS/JS-injeksjonsbasert innholdsfiltrering utføres pålitelig av nettleseren selv i stedet for av utvidelsen. Dette betyr at uBOL selv ikke bruker CPU/minneressurser mens innholdsblokkering pågår -- uBOL's service worker-prosess kreves _bare_ når du samhandler med oppsprettspanelet eller innstillingssidene.
+
+uBOL krever ikke bred "lese og endre data"-tillatelse under installasjonen, derav begrensede muligheter i utgangspunktet sammenlignet med uBlock Origin eller andre innholdsblokkerere som krever bred "lese og endre data"-tillatelse under installasjonen.
+
+Men, uBOL lar deg *uttrykkelig* gi utvidede tillatelser på bestemte nettsteder du velger, slik at uBOL bedre kan filtrere på disse nettstedene ved bruk av kosmetisk filtrering og skriptlet-injeksjoner.
+
+For å gi utvidede tillatelser på et gitt nettsted, åpne oppsprettspanelet og velg en høyere filtreringsmodus som Optimal eller Fullstendig.
+
+Nettleseren vil da advare deg om effektene av å gi de ekstra tillatelsene som utvidelsen ber om på det gjeldende nettstedet, og du må fortelle nettleseren om du godtar eller avslår forespørselen.
+
+Hvis du godtar forespørselen fra uBOL om ekstra tillatelser på det gjeldende nettstedet, vil uBOL være i stand til å filtrere innhold bedre for det gjeldende nettstedet.
+
+Du kan angi standard filtreringsmodus fra innstillingssiden i uBOL. Hvis du velger Optimal eller Fullstendig modus som standard, må du gi uBOL tillatelsen til å lese og endre data på alle nettsteder.
+
+Husk at dette fortsatt er et arbeid som pågår, med disse sluttmålene:
+
+- Ingen brede vertstillatelser under installasjonen -- utvidede tillatelser gis uttrykkelig av brukeren på per-side-basis.
+
+- Helt deklarativt for pålitelighet og CPU/minneeffektivitet.
diff --git a/platform/mv3/description/webstore.nl.txt b/platform/mv3/description/webstore.nl.txt
new file mode 100644
index 0000000..ecdf0c3
--- /dev/null
+++ b/platform/mv3/description/webstore.nl.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is een *toestemmingsloze* MV3-gebaseerde inhoudsblokkeerder.
+
+De standaard regelset komt overeen met de standaard filterset van uBlock Origin:
+
+- Ingebouwde filterlijsten van uBlock Origin
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+U kunt meer regelsets toevoegen door de optiespagina te bezoeken -- klik op het _tandwielpictogram_ in het pop-uppaneel.
+
+uBOL is volledig declaratief, wat betekent dat er geen permanent uBOL-proces voor de filtering nodig is, en inhoudsfiltering op basis van CSS/JS-injectie op een betrouwbare manier door de browser zelf wordt uitgevoerd in plaats van door de extensie. Dit betekent dat uBOL zelf geen CPU-/geheugenbronnen gebruikt terwijl inhoudsblokkering actief is -- het serviceworker-proces van uBOL is _alleen_ vereist als u met het pop-uppaneel of de optiespagina’s werkt.
+
+uBOL vereist geen brede toestemming voor het ‘lezen en aanpassen van gegevens’ tijdens installatie, vandaar de beperkte ingebouwde mogelijkheden ervan in vergelijking met uBlock Origin of andere inhoudsblokkeerders die brede toestemmingen voor het ‘lezen en aanpassen van gegevens’ vereisen tijdens installatie.
+
+U kunt in uBOL echter *expliciet* uitgebreide toestemmingen verlenen op bepaalde websites van uw keuze, zodat het op die websites beter kan filteren via cosmetische filtering en scriptlet-injecties.
+
+Om uitgebreide toestemmingen op een bepaalde website te verlenen, opent u het pop-uppaneel en kiest u een hogere filtermodus, zoals Optimaal of Volledig.
+
+De browser waarschuwt u dan over de gevolgen van het verlenen van de door de extensie aangevraagde aanvullende toestemmingen op de huidige website, en u dient de browser te laten weten of u de aanvraag accepteert of weigert.
+
+Als u de aanvraag van uBOL voor aanvullende toestemmingen op de huidige website accepteert, zal het inhoud voor de huidige website beter kunnen filteren.
+
+U kunt de standaard filtermodus instellen vanaf de optiespagina van uBOL. Als u de modus Optimaal of Volledig als de standaardmodus kiest, dient u uBOL de toestemming voor het lezen en aanpassen van gegevens op alle websites te verlenen.
+
+Onthoud dat dit nog werk in uitvoering is, met deze einddoelen:
+
+- Geen brede host-toestemmingen tijdens installatie -- uitgebreide toestemmingen worden expliciet en per website verleend door de gebruiker.
+
+- Volledig declaratief omwille van betrouwbaarheid en CPU-/geheugenefficiëntie.
diff --git a/platform/mv3/description/webstore.oc.txt b/platform/mv3/description/webstore.oc.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.oc.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.pa.txt b/platform/mv3/description/webstore.pa.txt
new file mode 100644
index 0000000..b413fe3
--- /dev/null
+++ b/platform/mv3/description/webstore.pa.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) ਇੱਕ *ਬਿਨਾਂ ਇਜਾਜ਼ਤਾਂ* ਵਾਲਾ MV3-ਅਧਾਰਿਤ ਸਮੱਗਰੀ ਬਲਾਕਰ ਹੈ।
+
+ਮੂਲ ਨਿਯਮ-ਸਮੂਹ uBlock Origin ਦੇ ਮੂਲ ਫਿਲਟਰ-ਸਮੂਹ ਨਾਲ ਸੰਬੰਧਿਤ ਹੈ:
+
+- uBlock Origin ਦੀਆਂ ਬਿਲਟ-ਇਨ ਫਿਲਟਰ ਸੂਚੀਆਂ
+-ਸੌਖੀ-ਸੂਚੀ
+-ਸੌਖੀ ਪਰਦੇਦਾਰੀ
+- Peter Lowe ਦੀ ਇਸ਼ਤਿਹਾਰ ਅਤੇ ਟਰੈਕਿੰਗ ਸਰਵਰ ਸੂਚੀ
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+ਯਾਦ ਰੱਖੋ ਕਿ ਇਹ ਕੰਮ ਹਾਲੇ ਵੀ ਜਾਰੀ ਹੈ, ਜਿਸ ਦੇ ਟੀਚੇ ਇਹ ਹਨ:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.pl.txt b/platform/mv3/description/webstore.pl.txt
new file mode 100644
index 0000000..a65d0db
--- /dev/null
+++ b/platform/mv3/description/webstore.pl.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) to *niewymagający uprawnień* bloker treści bazujący na MV3.
+
+Domyślny zestaw reguł odpowiada domyślnemu zestawowi filtrów uBlock Origin:
+
+– wbudowane listy filtrów uBlock Origin
+– EasyList
+– EasyPrivacy
+– lista serwerów śledzących i reklam Petera Lowe'a
+
+Możesz dodać więcej zestawów reguł, odwiedzając stronę opcji – kliknij ikonę _Trybika_ w wyskakującym panelu.
+
+uBOL jest całkowicie deklaratywny, co oznacza, że nie jest potrzebny stały proces uBOL w celu filtrowania, a filtrowanie treści oparte na wstrzykiwaniu CSS/JS jest wykonywane niezawodnie przez samą przeglądarkę, a nie przez rozszerzenie. Oznacza to, że sam uBOL nie zużywa zasobów procesora/pamięci, gdy trwa blokowanie treści – proces Service Worker uBOL jest wymagany _tylko_ podczas interakcji z panelem wyskakującym lub stronami opcji.
+
+uBOL w trakcie instalacji nie wymaga szerokich uprawnień do „odczytu i modyfikacji danych”, stąd jego ograniczone możliwości w porównaniu z uBlock Origin lub innymi blokerami treści, które w czasie instalacji wymagają szerokich uprawnień do „odczytu i modyfikacji danych”.
+
+Jednakże uBOL umożliwia *jawnie* udzielanie rozszerzonych uprawnień na określonych wybranych witrynach, dzięki czemu może lepiej filtrować te witryny za pomocą filtrowania kosmetycznego i wstrzykiwania skryptletów.
+
+Aby przyznać rozszerzone uprawnienia na danej witrynie, otwórz panel wyskakujący i wybierz wyższy tryb filtrowania, taki jak Optymalny lub Kompletny.
+
+Przeglądarka wyświetli ostrzeżenie o skutkach przyznania dodatkowych uprawnień wymaganych przez rozszerzenie na bieżącej witrynie i będziesz musiał poinformować przeglądarkę, czy akceptujesz, czy odrzucasz żądanie.
+
+Jeśli zaakceptujesz żądanie uBOL o dodatkowe uprawnienia na bieżącej witrynie, będzie on w stanie lepiej filtrować zawartość bieżącej witryny.
+
+Możesz ustawić domyślny tryb filtrowania na stronie opcji uBOL. Jeśli tryb Optymalny lub Pełny zostanie wybrany jako domyślny, trzeba będzie przyznać uBOL uprawnienia do odczytu i modyfikacji danych na wszystkich stronach internetowych.
+
+Należy pamiętać, że nadal trwają prace z następującymi celami końcowymi:
+
+– Brak szerokich uprawnień hosta w czasie instalacji – rozszerzone uprawnienia są przyznawane jawnie przez użytkownika na podstawie poszczególnych witryn.
+
+– Całkowicie deklaratywna niezawodność i wydajność procesora/pamięci.
diff --git a/platform/mv3/description/webstore.pt_BR.txt b/platform/mv3/description/webstore.pt_BR.txt
new file mode 100644
index 0000000..884ec64
--- /dev/null
+++ b/platform/mv3/description/webstore.pt_BR.txt
@@ -0,0 +1,30 @@
+O uBO Lite (uBOL) é um bloqueador de conteúdo baseado no MV3 com menor permissão.
+
+O conjunto de regras padrão corresponde ao conjunto de filtros padrão do uBlock Origin:
+
+- Listas embutidas dos filtros do uBlock Origin
+- EasyList
+- EasyPrivacy
+- Lista de servidores de anúncios e rastreadores do Peter Lowe
+
+Você pode adicionar mais conjuntos de regras visitando a página das opções -- clique no ícone _Engrenagens_ no painel do pop-up.
+
+O uBOL é totalmente declarativo, significando que não há necessidade de um processo permanente do uBOL para a filtragem ocorrer e a filtragem de conteúdo baseada em injeção do CSS/JS é realizada confiavelmente pelo próprio navegador ao invés da extensão. Isto significa que o próprio uBOL não consome recursos de CPU/memória enquanto o bloqueio de conteúdo está em andamento -- o processo do service worker do uBOL _só_ é necessário quando você interage com o painel do pop-up ou as páginas das opções.
+
+O uBOL não requer permissão ampla pra "ler e modificar dados" na hora da instalação, logo suas capacidades limitadas fora da caixa comparadas com o uBlock Origin ou outros bloqueadores de conteúdo requerem permissões amplas pra "ler e modificar dados" na hora da instalação.
+
+Contudo, o uBOL permite a você garantir *explicitamente* permissões estendidas em sites específicos de sua escolha pra que possa filtrar melhor esses sites usando filtragem cosmética e injeções de scriptlet.
+
+Pra conceder permissões estendidas num site dado, abra o painel do pop-up e escolha um modo de filtragem superior tal como Otimizado ou Completo.
+
+O navegador então avisará você sobre os efeitos de garantir as permissões adicionais requisitadas pela extensão no site atual e você terá que dizer ao navegador se você aceita ou recusa a requisição.
+
+Se você aceitar a requisição do uBOL por permissões adicionais no site atual ele será capaz de filtrar melhor o conteúdo do site atual.
+
+Você pode definir o modo de filtragem padrão na página de opções do uBOL. Se você escolher o Modo Otimizado ou Completo como o modo padrão você precisará garantir ao uBOL a permissão de ler e modificar os dados em todos os sites.
+
+Mantenha em mente que este ainda é um trabalho em progresso com estes objetivos finais:
+
+- Sem permissões amplas do hospedeiro na hora da instalação -- as permissões estendidas são garantidas explicitamente pelo usuário numa base por site.
+
+- Totalmente declarativo para confiabilidade e eficiência de CPU/memória.
diff --git a/platform/mv3/description/webstore.pt_PT.txt b/platform/mv3/description/webstore.pt_PT.txt
new file mode 100644
index 0000000..f390d5d
--- /dev/null
+++ b/platform/mv3/description/webstore.pt_PT.txt
@@ -0,0 +1,30 @@
+O uBO Lite (uBOL) é um bloqueador de conteúdo baseado no MV3 *sem permissões*.
+
+O conjunto de regras padrão corresponde ao conjunto de filtros padrão do uBlock Origin:
+
+- Listas de filtros integrados do uBlock Origin
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+Pode adicionar mais conjuntos de regras visitando a página de opções -- clique no ícone _Cogs_ no painel pop-up.
+
+O uBOL é totalmente declarativo, o que elimina a necessidade de um processo ativo constante para a filtragem ocorrer. A injeção de CSS e JS para filtragem de conteúdo é efetuada de maneira confiável pelo navegador, não dependendo da extensão. Isso significa que o uBOL por si só não gasta recursos de CPU/memória enquanto o bloqueio de conteúdo está a acontecer -- o processo do trabalhador de serviço do uBOL é necessário apenas quando se interage com a janela flutuante ou as páginas de opções.
+
+uBOL não requer ampla permissão de "ler e modificar dados" no momento da instalação, daí as suas capacidades limitadas de pronto a usar em comparação com uBlock Origin ou outros bloqueadores de conteúdo que requerem amplas permissões de "ler e modificar dados" no momento da instalação.
+
+No entanto, o uBOL permite-lhe que *explicitamente* conceda permissões alargadas em websites específicos de sua escolha, para que possa filtrar melhor esses websites usando filtragem cosmética e injeções de scriptlet.
+
+Para conceder permissões alargadas num determinado sítio web, abra a janela flutuante e escolha um modo de filtragem superior, como 'Ideal' ou 'Completo'.
+
+O navegador irá avisá-lo sobre os efeitos da concessão das permissões adicionais solicitadas pela extensão no site atual, e terá que informar ao navegador se aceita ou recusa o pedido.
+
+Se aceitar o pedido do uBOL para permissões adicionais no site atual, o mesmo poderá filtrar melhor o conteúdo do site atual.
+
+Pode definir o modo de filtragem padrão na página de opções do uBOL. Se escolher o modo Ideal ou Completo como o modo predefinido, terá de conceder ao uBOL a permissão para ler e modificar dados em todos os sítios web.
+
+Tenha em mente que este ainda é um trabalho em curso, com estes objetivos finais:
+
+Sem permissões amplas de anfitrião no momento da instalação -- permissões estendidas são concedidas explicitamente pelo utilizador numa base por site.
+
+- Totalmente declarativo para fiabilidade e eficiência de CPU/memória
diff --git a/platform/mv3/description/webstore.ro.txt b/platform/mv3/description/webstore.ro.txt
new file mode 100644
index 0000000..6e1f05d
--- /dev/null
+++ b/platform/mv3/description/webstore.ro.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) este blocant de conținut experimental *fără permisiuni* bazat pe MV3.
+
+Setul de reguli implicit corespunde setului de filtre implicit al uBlock Origin:
+
+Listele de filtre încorporate de uBlock Origin
+- EasyList
+- EasyPrivacy
+- Oglas Peter Lowe i lista servera za praćenje
+
+Puteți adăuga mai multe seturi de reguli vizitând pagina de opțiuni -- făcând clic pe pictograma _Cogs_ din panoul pop-up
+
+uBOL este în întregime declarativ, ceea ce înseamnă că nu este nevoie de un proces uBOL permanent pentru ca filtrarea să aibă loc, iar filtrarea conținutului pe bază de injecție CSS/JS este realizată în mod sigur de browser în sine, mai degrabă decât de extensie. Aceasta înseamnă că uBOL în sine nu consumă resurse CPU/memorie în timp ce blocarea conținutului este în desfășurare -- procesul de lucru al serviciului uBOL este necesar _doar_ atunci când interacționați cu panoul pop-up sau cu paginile de opțiuni.
+
+uBOL nu necesită permisiunii extinse de „citire și modificare a datelor” în momentul instalării, astfel capacitățile sale limitate din momentul instalării în comparație cu uBlock Origin sau alte blocare de conținut necesită permisiuni largi de „citire și modificare a datelor” în momentul instalării.
+
+Cu toate acestea, uBOL vă permite să acordați *explicit* permisiuni extinse pe anumite site-uri alese de dvs., astfel încât să poată filtra mai bine pe acele site-uri folosind filtrarea cosmetică și injecțiile de scriptlet.
+
+Pentru a acorda permisiuni extinse pe un anumit site, deschideți panoul pop-up și alegeți un mod de filtrare mai ridicat, cum ar fi Optimal sau Complet.
+
+Browser-ul vă va avertiza apoi cu privire la efectele acordării permisiunilor suplimentare solicitate de extensie pe site-ul curent și va trebui să-i precizați browserului dacă acceptați sau refuzați cererea.
+
+Dacă acceptați solicitarea uBOL pentru permisiuni suplimentare pe site-ul curent, acesta va putea filtra mai bine conținutul pentru site-ul curent.
+
+Puteți seta modul implicit de filtrare din pagina de opțiuni a uBOL. Dacă alegeți modul optim sau complet ca implicit, va trebui să acordați lui uBOL permisiunea de a citi și modifica datele de pe toate site-urile web.
+
+Rețineți că aceasta este în curs de desfășurare, cu aceste obiective finale:
+
+- Fără permisiuni de gazdă largi în momentul instalării - permisiunile extinse sunt acordate în mod explicit de către utilizator pe bază de site.
+
+- Complet declarativ pentru fiabilitate și eficiență CPU/memorie.
diff --git a/platform/mv3/description/webstore.ru.txt b/platform/mv3/description/webstore.ru.txt
new file mode 100644
index 0000000..637d7cb
--- /dev/null
+++ b/platform/mv3/description/webstore.ru.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) — это блокировщик содержимого, *не требующий разрешений*, и основанный на MV3.
+
+Стандартный набор правил соответствует типовому набору фильтров uBlock Origin:
+
+- Встроенные списки фильтров uBlock Origin
+- EasyList
+- EasyPrivacy
+- Список рекламных и отслеживающих серверов от Peter Lowe
+
+Вы можете добавить больше правил, посетив страницу настроек -- нажмите на значок_Шестеренок на всплывающей панели.
+
+uBOL - полностью декларативный, т.е. для фильтрации не нужен постоянно выполняющийся uBOL процесс, а фильтрация контента, основанная на внедрении CSS/JS, производится непосредственно браузером. Это значит, что дополнение uBOL не расходует ресурсы ЦПУ/памяти, когда происходит блокировка рекламы -- служебный процесс uBOL запускается, _только_ когда вы вносите изменения на всплывающей панели или странице настроек.
+
+uBOL не требует разрешение на полное "чтение и изменение данных" в момент установки, поэтому имеет ограниченные возможности по сравнению с uBlock Origin, и другими блокировщиками контента, которые требуют полное разрешение на "чтение и изменение данных" в момент установки.
+
+Однако uBOL позволяет *намеренно* давать расширенные разрешения для определенных сайтов - по вашему усмотрению, чтобы эффективнее работать, используя косметическую фильтрацию и scriptlet-внедрения.
+
+Для предоставления расширенных разрешений на текущем сайте - откройте всплывающую панель и выберите повышенный режим фильтрации: Оптимальный или Полный.
+
+Далее браузер выдаст предупреждение об эффектах предоставления расширенных разрешений, запрошенных дополнением на текущем сайте, и надо будет выбрать: принять или отклонить этот запрос.
+
+Если вы принимаете запрос uBOL на предоставление дополнительных разрешений, тогда дополнение сможет эффективнее фильтровать контент на текущем сайте.
+
+Вы можете установить стандартный режим фильтрации на странице настроек uBOL. Если вы выбираете Оптимальный или Полный режим - режимом по умолчанию, необходимо предоставить uBOL разрешение на чтение и изменение данных на всех веб-сайтах.
+
+Помните, что данный проект - в активной фазе разработки, преследующей следующие цели:
+
+- Работа с ограниченными разрешениями при установке -- расширенные разрешения пользователь выдает по своему усмотрению, каждому сайту отдельно.
+
+- Полностью декларативная работа - для надежности и эффективного использования ЦПУ/памяти.
diff --git a/platform/mv3/description/webstore.si.txt b/platform/mv3/description/webstore.si.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.si.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.sk.txt b/platform/mv3/description/webstore.sk.txt
new file mode 100644
index 0000000..686e41f
--- /dev/null
+++ b/platform/mv3/description/webstore.sk.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) je blokovač obsahu založený na MV3 *bez povolenia*.
+
+Predvolený súbor pravidiel zodpovedá predvolenému súboru filtrov uBlock Origin:
+
+- Vstavané zoznamy filtrov uBlock Origin
+- EasyList
+- EasyPrivacy
+- Zoznam reklamných a sledovacích serverov Petra Lowea
+
+Ďalšie súbory pravidiel môžete pridať na stránke s možnosťami – kliknite na ikonu _súkolesia_ vo vyskakovacom paneli.
+
+uBOL je úplne deklaratívny, čo znamená, že na filtrovanie nie je potrebný trvalý proces uBOL a filtrovanie obsahu založené na injektovaní CSS/JS spoľahlivo vykonáva samotný prehliadač, a nie rozšírenie. To znamená, že samotný uBOL nespotrebúva zdroje CPU/pamäte, kým prebieha blokovanie obsahu -- proces uBOL Service Worker je potrebný _len_ pri interakcii s vyskakovacím panelom alebo stránkami možností.
+
+uBOL pri inštalácii nevyžaduje všeobecné oprávnenie "čítať a upravovať údaje", preto má obmedzené možnosti v porovnaní s uBlock Origin alebo inými blokovačmi obsahu, ktoré pri inštalácii vyžadujú všeobecné oprávnenie "čítať a upravovať údaje".
+
+uBOL vám však umožňuje *výslovne* udeliť všebecné oprávnenia na konkrétne stránky podľa vášho výberu, aby mohol lepšie filtrovať na týchto stránkach pomocou kozmetického filtrovania a injektovaných skriptletov.
+
+Ak chcete udeliť všeobecné oprávnenia na danom webe, otvorte vyskakovací panel a vyberte vyšší režim filtrovania, napríklad Optimálny alebo Kompletný.
+
+Prehliadač vás potom upozorní na dôsledky udelenia dodatočných oprávnení požadovaných rozšírením na aktuálnej stránke a vy budete musieť prehliadaču oznámiť, či požiadavku prijímate alebo odmietate.
+
+Ak prijmete žiadosť uBOL o dodatočné povolenia na aktuálnom webe, bude môcť lepšie filtrovať obsah aktuálneho webu.
+
+Predvolený režim filtrovania môžete nastaviť na stránke možností uBOL. Ak ako predvolený režim vyberiete Optimálny alebo Kompletný režim, budete musieť uBOL-u udeliť oprávnenie na čítanie a úpravu údajov na všetkých webových stránkach.
+
+Majte na pamäti, že na tomto projekte sa stále pracuje, pričom jeho konečné ciele sú takéto:
+
+- Žiadne všeobecné oprávnenia hostiteľa v čase inštalácie -- rozšírené oprávnenia udeľuje používateľ explicitne pre jednotlivé stránky.
+
+- Úplne deklaratívne pre spoľahlivosť a efektivitu CPU/pamäte.
diff --git a/platform/mv3/description/webstore.sl.txt b/platform/mv3/description/webstore.sl.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.sl.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.so.txt b/platform/mv3/description/webstore.so.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.so.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.sq.txt b/platform/mv3/description/webstore.sq.txt
new file mode 100644
index 0000000..6b087c3
--- /dev/null
+++ b/platform/mv3/description/webstore.sq.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) është një bllokues *i pavarur* që funksionon sipas modelit MV3.
+
+Rregullat e tij janë të barasvlershme me filtrat standardë që përdor uBlock Origin:
+
+- Listat e filtrave të integruar në uBlock Origin
+- EasyList
+- EasyPrivacy
+- Lista e Peter Lowe për reklamat dhe gjurmuesit
+
+Në faqen e opsioneve mund të shtoni rregulla të tjera – klikoni ikonën e _ingranazhit_ në panelin modal.
+
+uBOL është tërësisht deklarativ, domethënë filtrimi ndodh pa qenë nevoja që procesi i uBOL të vijojë vazhdimisht në sfond, ndërsa injektimi i filtrave CSS/JS te materialet kryhet me saktësi nga vetë shfletuesi. Pra, uBOL i bllokon materialet pa konsumuar resurset e procesorit/memories – asetet e uBOL nevojiten _vetëm_ kur ndërveproni me panelin modal ose faqen e opsioneve të tij.
+
+uBO Lite nuk kërkon leje shtesë për "leximin dhe modifikimin e të dhënave" kur e instaloni, prandaj fillimisht ka aftësi më të kufizuara sesa uBlock Origin apo bllokuesit e tjerë që kërkojnë leje shtesë për "leximin dhe modifikimin e të dhënave" gjatë instalimit.
+
+Megjithatë ju mund t'i jepni uBOL leje të posaçme *eksplicite* për ato uebsajte që doni, në mënyrë që t'i filtrojë më mirë me filtra kozmetikë dhe skripte.
+
+Lejet e posaçme për uebsajtet jepen nëpërmjet panelit modal duke zgjedhur mënyrën e filtrimit Optimal ose Komplet.
+
+Më tej shfletuesi do ju informojë për efektet e dhënies së këtyre lejeve për uebsajtin në fjalë dhe ju duhet ta pranoni ose refuzoni kërkesën.
+
+Po ta pranoni dhënien e lejeve shtesë për uebsajtin në fjalë, uBOL do mundet ta filtrojë më mirë atë.
+
+Në faqen e opsioneve të uBOL mund të përcaktoni mënyrën standarde të filtrimit. Nëse vendosni si standard mënyrën Optimale ose Komplete, uBOL do ju marrë leje për leximin dhe modifikimin e të dhënave në të gjitha uebsajtet.
+
+Kini parasysh se ky projekt është në zhvillim e sipër sipas këtyre objektivave:
+
+- Instalohet pa leje shtesë – lejet e posaçme për çdo uebsajt jepen në mënyrë eksplicite nga përdoruesi.
+
+- Tërësisht deklarativ për të qenë më i qëndrueshëm dhe eficient me procesorin/memorien.
diff --git a/platform/mv3/description/webstore.sr.txt b/platform/mv3/description/webstore.sr.txt
new file mode 100644
index 0000000..065d6c0
--- /dev/null
+++ b/platform/mv3/description/webstore.sr.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) је блокатор садржаја *без дозвола*, заснован на MV3.
+
+Подразумевани скуп правила одговара подразумеваном скупу филтера uBlock Origin-а:
+
+- uBlock Origin листе уграђених филтера
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+Можете додати још скупова правила тако што ћете посетити страницу са опцијама - кликните на иконицу зупчаника у искачућем панелу.
+
+uBOL је потпуно декларативан, што значи да нема потребе за трајним uBOL процесом да би дошло до филтрирања, а филтрирање садржаја засновано на убацивању CSS/JS се обавља поуздано од стране самог прегледача, а не проширења. То значи да сам uBOL не троши CPU/меморијске ресурсе док је блокирање садржаја у току -- сервисни радни процес uBOL-а је потребан _само_ када ступите у интеракцију са искачућим панелом или страницама опција.
+
+uBOL не захтева широку дозволу за „читање и измену података” у тренутку инсталације, стога су његове ограничене могућности ван оквира у поређењу са uBlock Origin-ом или другим блокаторима садржаја који захтевају широке дозволе за „читање и измену података” у тренутку инсталације.
+
+Међутим, uBOL вам омогућује да *експлицитно* доделите проширене дозволе на одређеним сајтовима по вашем избору тако да може боље да филтрира те сајтове користећи козметичко филтрирање и ињекције скриптлета.
+
+Да бисте доделили проширене дозволе за дати сајт, отворите искачући панел и изаберите виши режим филтрирања, као што је Оптимално или Комплетно.
+
+Прегледач ће вас тада упозорити на ефекте давања додатних дозвола које захтева проширење на тренутном сајту, а ви ћете морати да кажете прегледачу да ли прихватате или одбијате захтев.
+
+Ако прихватите uBOL-ов захтев за додатне дозволе на тренутном сајту, он ће моћи боље да филтрира садржај за тренутни сајт.
+
+Можете подесити подразумевани режим филтрирања на uBOL-овој страници са опцијама. Ако изаберете режим Оптимално или Комплетно као подразумевани, мораћете да доделите uBOL-у дозволу да чита и мења податке на свим веб сајтовима.
+
+Имајте на уму да је ово још увек рад у току, са овим крајњим циљевима:
+
+– Нема широких дозвола за хост у тренутку инсталације – проширене дозволе се експлицитно додељују од стране корисника на основу сваког сајта.
+
+- Потпуно декларативан за поузданост и ефикасност CPU/меморије.
diff --git a/platform/mv3/description/webstore.sv.txt b/platform/mv3/description/webstore.sv.txt
new file mode 100644
index 0000000..0355bd0
--- /dev/null
+++ b/platform/mv3/description/webstore.sv.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) är en *behörighetslös* MV3-baserad innehållsblockerare.
+
+Standardregeluppsättningen motsvarar uBlock Origins standardfilteruppsättning:
+
+- uBlock Origins inbyggda filterlistor
+- EasyList
+- EasyPrivacy
+- Peter Lowes reklam- och spårningsserverlista
+
+Du kan lägga till fler regeluppsättningar genom att besöka alternativsidan -- klicka på ikonen _Kugghjulet_ i popup-panelen.
+
+uBOL är helt deklarativt, vilket innebär att det inte finns något behov av en permanent uBOL-process för att filtreringen ska ske och CSS/JS-injektionsbaserad innehållsfiltrering utförs på ett tillförlitligt sätt av webbläsaren själv snarare än av tillägget. Detta innebär att uBOL själv inte förbrukar CPU/minnesresurser medan innehållsblockering pågår -- uBOLs serviceworkerprocess krävs _endast_ när du interagerar med popup-panelen eller alternativsidorna.
+
+uBOL kräver inte högre behörighet för "läs och ändra data" vid installationen, därav dess begränsade möjligheter jämfört med uBlock Origin eller andra innehållsblockerare som kräver högre behörighet för "läs och ändra data" vid installationen.
+
+Däremot låter uBOL dig *uttryckligen* ge utökade behörigheter på specifika webbplatser du väljer så att den bättre kan filtrera på dessa webbplatser med hjälp av kosmetisk filtrering och scriptletinjektioner.
+
+För att ge utökade behörigheter på en viss webbplats, öppna popup-panelen och välj ett högre filtreringsläge som optimal eller fullständig.
+
+Webbläsaren kommer sedan att varna dig om effekterna av att bevilja de ytterligare behörigheter som tillägget begär på den aktuella webbplatsen och du måste tala om för webbläsaren om du accepterar eller avslår begäran.
+
+Om du accepterar uBOLs begäran om ytterligare behörigheter på den aktuella webbplatsen kommer den att kunna filtrera innehåll för den aktuella webbplatsen bättre.
+
+Du kan ställa in standardfiltreringsläget från uBOLs alternativsida. Om du väljer läge optimalt eller fullständigt som standard måste du ge uBOL behörighet att läsa och ändra data på alla webbplatser.
+
+Tänk på att detta fortfarande är ett pågående arbete med dessa slutmål:
+
+- Inga högre värdbehörigheter vid installationen - utökade behörigheter ges uttryckligen av användaren per webbplats.
+
+- Helt deklarativt för tillförlitlighet och CPU/minneseffektivitet.
diff --git a/platform/mv3/description/webstore.sw.txt b/platform/mv3/description/webstore.sw.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.sw.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.ta.txt b/platform/mv3/description/webstore.ta.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.ta.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.te.txt b/platform/mv3/description/webstore.te.txt
new file mode 100644
index 0000000..2f0c87d
--- /dev/null
+++ b/platform/mv3/description/webstore.te.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) అనేది *అనుమతి-తక్కువ* MV3-ఆధారిత కంటెంట్ బ్లాకర్.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOLకి ఇన్‌స్టాల్ సమయంలో విస్తృత "డేటాను చదవడం మరియు సవరించడం" అనుమతి అవసరం లేదు, అందువల్ల uBlock ఆరిజిన్ లేదా ఇన్‌స్టాల్ సమయంలో విస్తృతమైన "డేటాను చదవడం మరియు సవరించడం" అనుమతులు అవసరమయ్యే ఇతర కంటెంట్ బ్లాకర్‌లతో పోలిస్తే దాని పరిమిత సామర్థ్యాలు బాక్స్ వెలుపల ఉన్నాయి.
+
+అయితే, uBOL మీకు నచ్చిన నిర్దిష్ట సైట్‌లలో పొడిగించిన అనుమతులను *స్పష్టంగా* మంజూరు చేయడానికి మిమ్మల్ని అనుమతిస్తుంది, తద్వారా కాస్మెటిక్ ఫిల్టరింగ్ మరియు స్క్రిప్ట్‌లెట్ ఇంజెక్షన్‌లను ఉపయోగించి ఆ సైట్‌లలో మెరుగ్గా ఫిల్టర్ చేయవచ్చు.
+
+ఇచ్చిన సైట్‌లో పొడిగించిన అనుమతులను మంజూరు చేయడానికి, పాప్‌అప్ ప్యానెల్‌ను తెరిచి, ఆప్టిమల్ లేదా కంప్లీట్ వంటి అధిక ఫిల్టరింగ్ మోడ్‌ను ఎంచుకోండి.
+
+ప్రస్తుత సైట్‌లో పొడిగింపు ద్వారా అభ్యర్థించిన అదనపు అనుమతులను మంజూరు చేయడం వల్ల కలిగే ప్రభావాల గురించి బ్రౌజర్ మిమ్మల్ని హెచ్చరిస్తుంది మరియు మీరు అభ్యర్థనను అంగీకరించాలా లేదా తిరస్కరించాలా అని మీరు బ్రౌజర్‌కి తెలియజేయాలి.
+
+మీరు ప్రస్తుత సైట్‌లో అదనపు అనుమతుల కోసం uBOL అభ్యర్థనను అంగీకరిస్తే, అది ప్రస్తుత సైట్ కోసం కంటెంట్‌ను మెరుగ్గా ఫిల్టర్ చేయగలదు.
+
+మీరు uBOL ఎంపికల పేజీ నుండి డిఫాల్ట్ ఫిల్టరింగ్ మోడ్‌ను సెట్ చేయవచ్చు. మీరు డిఫాల్ట్‌గా ఆప్టిమల్ లేదా కంప్లీట్ మోడ్‌ని ఎంచుకుంటే, మీరు అన్ని వెబ్‌సైట్‌లలోని డేటాను చదవడానికి మరియు సవరించడానికి uBOLకి అనుమతిని మంజూరు చేయాలి.
+
+ఈ తుది లక్ష్యాలతో ఇది ఇంకా పురోగతిలో ఉందని గుర్తుంచుకోండి:
+
+- ఇన్‌స్టాల్ సమయంలో విస్తృత హోస్ట్ అనుమతులు లేవు -- పొడిగించిన అనుమతులు ప్రతి-సైట్ ప్రాతిపదికన వినియోగదారు ద్వారా స్పష్టంగా మంజూరు చేయబడతాయి.
+
+- విశ్వసనీయత మరియు CPU/మెమరీ సామర్థ్యం కోసం పూర్తిగా డిక్లరేటివ్.
diff --git a/platform/mv3/description/webstore.th.txt b/platform/mv3/description/webstore.th.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.th.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.tr.txt b/platform/mv3/description/webstore.tr.txt
new file mode 100644
index 0000000..125ca90
--- /dev/null
+++ b/platform/mv3/description/webstore.tr.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL), *izin gerektirmeyen* MV3 tabanlı bir içerik engelleyicidir.
+
+Varsayılan kural seti, uBlock Origin'in varsayılan filtre setine karşılık gelir:
+
+- uBlock Origin'in yerleşik filtre listeleri
+- EasyList
+- EasyPrivacy
+- Peter Lowe'un Reklam ve izleme sunucusu listesi
+
+Seçenekler sayfasını ziyaret ederek daha fazla kural seti ekleyebilirsiniz -- açılan paneldeki _Cogs_ simgesine tıklayın.
+
+uBOL tamamen bildirimseldir, yani filtrelemenin gerçekleşmesi için kalıcı bir uBOL işlemine gerek yoktur, içerik filtreleme eklenti yerine tarayıcının kendisi tarafından CSS/JS yerleştirerek gerçekleştirilir. Bu, içerik engelleme devam ederken uBOL'nin kendisinin CPU/bellek kaynaklarını tüketmediği anlamına gelir -- uBOL'un hizmet çalışanı işlemi, _only_ açılan panel veya seçenek sayfalarıyla etkileşim kurduğunuzda gereklidir.
+
+uBOL, kurulum sırasında geniş "veri okuma ve değiştirme" izni gerektirmez, bu nedenle, kurulum sırasında geniş "veri okuma ve değiştirme" izinleri gerektiren uBlock Origin veya diğer içerik engelleyicilere kıyasla, kutudan çıkar çıkmaz sınırlı yetenekleri vardır.
+
+Bununla birlikte, uBOL, kozmetik filtreleme ve komut dosyası enjeksiyonları kullanarak bu sitelerde daha iyi filtre uygulayabilmesi için, seçtiğiniz belirli sitelerde *açıkça* genişletilmiş izinler vermenize izin verir.
+
+Belirli bir sitede genişletilmiş izinler vermek için açılır paneli açın ve Optimal veya Complete gibi daha yüksek bir filtreleme modu seçin.
+
+Ardından tarayıcı, uzantı tarafından istenen ek izinlerin geçerli sitede verilmesinin etkileri konusunda sizi uyaracak ve tarayıcıya isteği kabul edip etmediğinizi söylemeniz gerekecektir.
+
+uBOL'un mevcut site için ek izin talebini kabul ederseniz, mevcut site için içeriği daha iyi filtreleyebilecektir.
+
+Varsayılan filtreleme modunu uBOL'un seçenekler sayfasından ayarlayabilirsiniz. Varsayılan mod olarak Optimal veya Complete modunu seçerseniz, uBOL'a tüm web sitelerindeki verileri okuma ve değiştirme izni vermeniz gerekecektir.
+
+Bunun, şu nihai hedeflerle hala devam eden bir çalışma olduğunu unutmayın:
+
+- Yükleme sırasında geniş ana bilgisayar izinleri yoktur -- genişletilmiş izinler, her site için kullanıcı tarafından açıkça verilir.
+
+- Güvenilirlik ve CPU/bellek verimliliği için tamamen bildirimsel.
diff --git a/platform/mv3/description/webstore.txt b/platform/mv3/description/webstore.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.uk.txt b/platform/mv3/description/webstore.uk.txt
new file mode 100644
index 0000000..799bdec
--- /dev/null
+++ b/platform/mv3/description/webstore.uk.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) - це блокувальник вмісту на основі MV3, що не потребує дозволу.
+
+Усталений набір правил відповідає типовому набору фільтрів uBlock Origin:
+
+- Вбудовані списки фільтрів uBlock Origin
+- EasyList
+- EasyPrivacy
+- Список серверів реклами та стеження від Peter Lowe
+
+Ви можете додати більше наборів правил, перейшовши на сторінку налаштувань — натисніть на піктограму _Шестерень_ на спливній панелі.
+
+uBOL повністю декларативний, тобто немає необхідності в постійному процесі uBOL для здійснення фільтрації, а фільтрація вмісту на основі CSS/JS-ін'єкцій надійно виконується самим браузером, а не розширенням. Це означає, що сам uBOL не споживає ресурси процесора/пам'яті під час блокування вмісту — службовий робочий процес uBOL потрібен _лише_ під час взаємодії зі спливною панеллю або сторінками опцій.
+
+uBOL не вимагає широкого дозволу на «читання та зміну даних» під час встановлення, отже, його можливості «з коробки» обмежені порівняно з uBlock Origin або іншими блокувальниками, які вимагають широкого дозволу на «читання/зміну даних» під час встановлення.
+
+Однак uBOL дозволяє вам *явно* надавати розширені дозволи на певних сайтах на ваш вибір, щоб він міг краще виконувати фільтрування на цих сайтах, використовуючи косметичну фільтрацію та вкладення скриптів.
+
+Щоб надати розширені дозволи на певному сайті, відкрийте спливну панель і виберіть вищий режим фільтрації, наприклад, «Оптимальний» або «Повний».
+
+Потім браузер попередить вас про наслідки надання додаткових дозволів, запитуваних розширенням, на поточному сайті, і ви повинні будете повідомити браузеру, чи приймаєте ви запит або відхиляєте його.
+
+Якщо ви приймете запит uBOL на додаткові дозволи на поточному сайті, він зможе краще фільтрувати вміст для цього сайту.
+
+Ви можете типовий налаштувати режим фільтрації на сторінці налаштувань uBOL. Якщо ви обираєте типовим режим Оптимальний або Повний, вам потрібно буде надати uBOL дозвіл на читання та зміну даних на всіх вебсайтах.
+
+Варто пам'ятати, що це досі незавершена робота з такими цілями:
+
+- Відсутність широких дозволів на хост під час встановлення — розширені дозволи надаються користувачем окремо для кожного сайту.
+
+- Повністю декларативна оцінка надійності та ефективності роботи процесора/пам'яті.
diff --git a/platform/mv3/description/webstore.ur.txt b/platform/mv3/description/webstore.ur.txt
new file mode 100644
index 0000000..e03fa80
--- /dev/null
+++ b/platform/mv3/description/webstore.ur.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) is a *permission-less* MV3-based content blocker.
+
+The default ruleset corresponds to uBlock Origin's default filterset:
+
+- uBlock Origin's built-in filter lists
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
+
+uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages.
+
+uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time.
+
+However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections.
+
+To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete.
+
+The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request.
+
+If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site.
+
+You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites.
+
+Keep in mind this is still a work in progress, with these end goals:
+
+- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis.
+
+- Entirely declarative for reliability and CPU/memory efficiency.
diff --git a/platform/mv3/description/webstore.vi.txt b/platform/mv3/description/webstore.vi.txt
new file mode 100644
index 0000000..70d6d59
--- /dev/null
+++ b/platform/mv3/description/webstore.vi.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) là trình chặn nội dung dựa trên MV3 *không-cần-cấp-phép*.
+
+Bộ quy tắc mặc định tương tự bộ lọc của uBlock Origin:
+
+- Bộ lọc cài sẵn của uBlock Origin
+- EasyList
+- EasyPrivacy
+- Danh sách máy chủ chạy quảng cáo và trình theo dõi của Pete Lowe
+
+Bạn có thể tự thêm quy tắc mới ở trang cài đặt -- click vào icon _Bánh răng_ ở trong cửa sổ popup.
+
+uBOL mang tính khai báo hoàn toàn, vì vậy uBOL sẽ không cần phải liên tục chạy để chặn nội dung. Thay vào đó, chính trình duyệt sẽ thực hiện lọc nội dung bằng cách sử dụng công cụ chèn CSS/JS hiệu quả hơn có sẵn của nó. Điều này cũng đồng thời có nghĩa là uBOL sẽ không tiêu tốn tài nguyên CPU/bộ nhớ của bạn để chặn nội dung. uBOL sẽ chỉ chạy _khi và chỉ khi_ bạn đang xem cửa sổ popup của uBOL, hoặc bạn đang cấu hình uBOL ở trang cài đặt.
+
+uBOL không yêu cầu cấp quyền "đọc và sửa đổi dữ liệu" chung khi cài đặt, vì vậy nên ban đầu nó sẽ hơi yếu hơn uBlock Origin hoặc các trình chặn nội dung khác mà có yêu cầu quyền "đọc và sửa đổi dữ liệu" chung khi cài đặt.
+
+Tuy nhiên, uBOL lại cho phép bạn cấu hình *rất cụ thể* quyền ở trên bất kỳ trang nào tự chọn của bạn, để nó có thể lọc nội dụng trên các trang đấy tốt hơn bằng các kỹ thuật như lọc hiển thị (cosmetic filtering) hay chèn kịch bản con (scriptlet injections).
+
+Để cấp quyền cho uBOL chặn trang bất kỳ, hãy mở cửa sổ popup và chọn một chế độ chặn cao hơn như "Tối ưu" hoặc "Hoàn toàn".
+
+Trình duyệt của bạn sẽ hiện cảnh báo cho việc cấp quyền cho tiện ích trên trang web hiện tại, và bạn sẽ phải chọn đồng ý hoặc từ chối yêu cầu cấp quyền.
+
+Nếu bạn chọn đồng ý cấp quyền cho uBOL sửa trang web bất kỳ, uBOL sẽ có thể lọc nội dung tốt hơn cho web đấy.
+
+Bạn cũng có thể chọn chế độ chặn mặc định ở trang cài đặt của uBOL. Nếu bạn chọn chế độ Tối ưu hoặc Hoàn toàn làm mặc định, bạn sẽ cần phải cấp quyền "đọc và sửa đổi dữ liệu" trên tất cả các trang web.
+
+Lưu ý rằng sản phẩm này vẫn đang trong giai đoạn phát triển, và bản hoàn thiện sẽ có những tính năng sau:
+
+- Không yêu cầu bất kỳ quyền nào khi cài đặt - người dùng sẽ phải tự chủ động cấp bất kỳ quyền gì cho tiện ích, cụ thể từng trang web một.
+
+- Hoàn toàn mang tính khai báo, để có thế chạy nhẹ hơn và ổn định hơn.
diff --git a/platform/mv3/description/webstore.zh_CN.txt b/platform/mv3/description/webstore.zh_CN.txt
new file mode 100644
index 0000000..b307f53
--- /dev/null
+++ b/platform/mv3/description/webstore.zh_CN.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) 是一个基于最新浏览器扩展接口(Manifest Version 3)打造的“无需权限”的内容屏蔽工具。
+
+该扩展预设的规则列表对应 uBlock Origin 的预设过滤规则列表:
+
+- uBlock Origin 内置过滤规则列表
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+您可以通过设置页面添加更多过滤规则列表——点击弹出面板的“齿轮”图标。
+
+uBOL 的过滤规则是完全声明式的,并不需要固定保留一个 uBOL 扩展进程,基于 CSS/JS 注入的内容过滤更是交由浏览器进行调度,比起扩展本身更为可靠。 这也即是说当内容被过滤时 uBOL 自身并不占用额外 CPU 和内存资源,只有在您打开弹出面板或是设置页面时才会生成 uBOL 扩展进程。
+
+uBOL 在安装时并不需要宽泛的“读取或修改网页数据”的权限,因此它的开箱即用功能相对于 uBlock Origin 以及其他安装时要求该权限的屏蔽工具显得较为有限。
+
+不过,uBOL 可在您“明确”授予额外扩屏权限后,对您指定的网站采用基于 CSS/JS 注入的声明式规则加强内容过滤。
+
+若要在特定网站授予扩展权限,请开启弹出面板并选择更高级的过滤模式,例如“优化”或“完全”。
+
+接着浏览器会就在当前网站授予扩展额外权限有何影响示以警告,而您要接受或者拒绝该请求。
+
+如果您允许 uBOL 在当前网站获取额外权限,它就可以更好地对网站内容进行过滤。
+
+您还可以在 uBOL 的设置页面设定默认过滤模式。 如果设定的默认过滤模式是“优化”或“完全”,您必须授予 uBOL 读取或修改所有网页数据的权限。
+
+请注意,该扩展尚未完成,其最终实现目标是:
+
+- 安装时不需要过多扩展权限——额外权限要由用戶指定,按需求及作用域授予。
+
+- 采用完全声明式规则,以求可靠性以及更佳 CPU 和内存使用效率。
diff --git a/platform/mv3/description/webstore.zh_TW.txt b/platform/mv3/description/webstore.zh_TW.txt
new file mode 100644
index 0000000..1add144
--- /dev/null
+++ b/platform/mv3/description/webstore.zh_TW.txt
@@ -0,0 +1,30 @@
+uBO Lite (uBOL) 是款以 MV3 為基礎的「免權限」內容阻擋器。
+
+預設規則集對應了 uBlock Origin 的預設過濾集:
+
+- uBlock Origin 內建的過濾器清單
+- EasyList
+- EasyPrivacy
+- Peter Lowe’s Ad and tracking server list
+
+您可以前往選項頁面(按下彈出面板的 **齒輪** 按鈕)新增更多規則集。
+
+uBOL 是完全宣告式的,意即過濾過程中不需要持續性的 uBOL 處理程序參與,且以 CSS/JS 注入為基礎進行的內容過濾由可靠的瀏覽器執行,而非是擴充功能。 這就代表 uBOL 在內容阻擋過程不會佔用 CPU 和記憶體資源——除了和彈出面板或選項頁面互動的場景外,都不需要 uBOL 的 Service Worker 程序。
+
+uBOL 在安裝期間不需要氾濫的「讀取與修改資料」權限,因此它出廠時的功能和 uBlock Origin 或其他在安裝期間要求「讀取與修改資料」權限的內容阻擋程式相比,會相對受限。
+
+不過 uBOL 能讓你 **明確地** 在自選的特定網站授予額外的權限,使其在這些網站的過濾效果可以在元素過濾及 scripetlet 注入的加持下得到提升。
+
+若要授予指定網站延伸權限,請開啟對話框並選擇更高的過濾模式,如「最佳化」或「完整」。
+
+瀏覽器接著會警告您授予擴充功能請求的額外權限會帶來的後果,而你需要告訴瀏覽器要同意還是拒絕請求。
+
+如果你接受 uBOL 在目前網站請求的額外權限,其在這個網站的過濾效果將會更好。
+
+您可以在 uBOL 的選項頁面設定預設的過濾模式。 如果您選擇「最佳化」或「完整」為預設的模式,您需要授予 uBOL 讀取與修改所有網站資料的權限。
+
+注意這尚未完工,最終目標有:
+
+- 安裝期間不要有氾濫的 host 權限 —— 以網站為基準讓使用者授予延伸權限。
+
+- 完全宣告式,以提升可靠性和 CPU / 記憶體效率。
diff --git a/platform/mv3/extension/_locales/ar/messages.json b/platform/mv3/extension/_locales/ar/messages.json
new file mode 100644
index 0000000..d907faa
--- /dev/null
+++ b/platform/mv3/extension/_locales/ar/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "حاجب محتوى و بأقل التراخيص المسبقة. يحجب الإعلانات والمتتبعات والمعدنات والكثير فوراً عند التثبيت.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} شرط محولة من {{filterCount}} مصفيّات الشبكة ",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "لوحة التحكم",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "الإعدادات",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "عن التطبيق",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "سياسة الخصوصية",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "وضع التصفية",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "افتح لوحة التحكم",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "المزيد",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "أقل",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "افتراضي",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "اعلانات",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "الخصوصية",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "نطاقات البرامج الضارة",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "مضايقات",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "متنوع",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "المناطق واللغات",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "سجل التغييرات",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "شفرة المصدر (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "المساهمون",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "شيفرة المصدر",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "الترجمات",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "قوائم التصفية",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "التبعيات الخارجية (متوافقة مع GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "مرحبا",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "لقد قمت للتو بتثبيت uBO Lite. هنا يمكنك اختيار وضع التصفية الافتراضي لاستخدامه في جميع مواقع الويب.\n\nبشكل افتراضي ، يتم تحديد الوضع <em>الأساسي</em> لأنه لا يتطلب الإذن لقراءة البيانات وتعديلها. إذا كنت تثق في uBO Lite ، فيمكنك منحه إذنًا واسعًا لقراءة البيانات وتعديلها على جميع مواقع الويب من أجل تمكين المزيد من إمكانات التصفية المتقدمة لجميع مواقع الويب افتراضيًا.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "وضع التصفية الافتراضي",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "سيتم تجاوز وضع التصفية الافتراضي بواسطة أوضاع التصفية لكل موقع ويب. يمكنك ضبط وضع التصفية على أي موقع ويب معين وفقًا للوضع الذي يعمل بشكل أفضل على موقع الويب هذا. كل وضع له مزاياه وعيوبه.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "لا تصفية",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "أساسي",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "الأفضل",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "مكتمل",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "تصفية الشبكة الأساسية من قوائم التصفية المحددة.\n\nلا يتطلب إذنًا لقراءة البيانات وتعديلها على مواقع الويب.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "تصفية الشبكة المتقدمة بالإضافة إلى تصفية موسعة محددة من قوائم التصفية المحددة.\n\nيتطلب إذنًا واسعًا لقراءة البيانات وتعديلها على جميع مواقع الويب.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "تصفية الشبكة المتقدمة بالإضافة إلى تصفية موسعة محددة وعامة من قوائم التصفية المحددة.\n\nيتطلب إذنًا واسعًا لقراءة البيانات وتعديلها على جميع مواقع الويب.\n\nقد تؤدي التصفية الموسعة العامة إلى زيادة استخدام موارد صفحة الويب.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "قائمة بأسماء المضيفين التي لن تتم أي تصفية لها",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "السلوك",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "إعادة تحميل الصفحة تلقائيًا عند تغيير وضع التصفية",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/az/messages.json b/platform/mv3/extension/_locales/az/messages.json
new file mode 100644
index 0000000..59b7d81
--- /dev/null
+++ b/platform/mv3/extension/_locales/az/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "İcazəyə ehtiyac duymayan məzmun əngəlləyicisi. Reklamları, izləyiciləri, maynerləri və daha çoxunu quraşdırmadan dərhal sonra əngəlləyir.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — İdarəetmə paneli",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Tənzimləmələr",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Haqqında",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Məxfilik siyasəti",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "İdarəetmə panelini aç",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Daha çox",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Daha az",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Standart",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Reklamlar",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Məxfilik",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Zəhlətökən elementlər",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Müxtəlif",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Bölgələr, dillər",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Dəyişikliklər siyahısı",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Mənbə kodu (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Töhfə verənlər",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Mənbə kodu",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Tərcümələr",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filtr siyahıları",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Xoş gəldiniz",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/be/messages.json b/platform/mv3/extension/_locales/be/messages.json
new file mode 100644
index 0000000..795f961
--- /dev/null
+++ b/platform/mv3/extension/_locales/be/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Эксперыментальны блакавальнік змесціва, які не патрабуе дазволаў. Блакуе рэкламу, трэкеры, майнеры і іншае адразу пасля ўсталявання.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} правілаў, сканвертаваных з {{filterCount}} сеткавых фільтраў",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Панэль кіравання",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Налады",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Пра пашырэнне",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Палітыка прыватнасці",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "рэжым фільтравання",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Адкрыць панэль кіравання",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Больш",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Менш",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Прадвызначана",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Рэклама",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Прыватнасць",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Дамены шкодных праграм",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Надакучлівасці",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Рознае",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Рэгіёны, мовы",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Журнал змяненняў",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Зыходны код (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Удзельнікі",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Зыходны код",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Пераклады",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Спісы фільтраў",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Вонкавыя залежнасці (GPLv3-сумяшчальныя):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Вітаем",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Вы толькі што ўсталявалі uBO Lite. Тут вы можаце выбраць прадвызначаны рэжым фільтравання для ўсіх вэб-сайтаў.\n\nКалі не ўказана іншае, выбраны <em>базавы</em> рэжым, бо ён не патрабуе дазволаў на чытанне і змяненне звестак. Калі вы давяраеце uBO Lite, можаце даць яму шырэйшыя дазволы на чытанне і змяненне звестак на ўсіх вэб-сайтах, каб зрабіць магчымымі больш прасунутыя функцыі фільтравання прадвызначана на ўсіх вэб-сайтах.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Прадвызначаны рэжым фільтравання",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Прадвызначаны рэжым фільтравання будзе перавызначаны рэжымам, выбраным для пэўнага вэб-сайта. Вы можаце дапасаваць рэжым фільтравання для кожнага сайта згодна з тым, які рэжым працуе лепей на гэтым вэб-сайце. Кожны рэжым мае свае перавагі і недахопы.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "без фільтравання",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "базавы",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "аптымальны",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "поўны",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Базавае сеткавае фільтраванне па выбраных спісах фільтраў.\n\nНе патрабуе дазволу на чытанне і змяненне звестак на вэб-сайтах.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Пашыранае сеткавае фільтраванне плюс дакладнае фільтраванне па выбраных спісах фільтраў.\n\nПатрабуе шырокі дазвол на чытанне і змяненне звестак на ўсіх вэб-сайтах.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Пашыранае сеткавае фільтраванне плюс дакладнае і агульнае пашыранае фільтраванне па выбраных спісах фільтраў.\n\nПатрабуе шырокі дазвол на чытанне і змяненне звестак на ўсіх вэб-сайтах.\n\nАгульнае пашыранае фільтраванне можа прывесці да павышанага спажывання рэсурсаў вэб-старонкі.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Спіс назваў хостаў, для якіх не будзе праводзіцца фільтраванне",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Паводзіны",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Аўтаматычна абнаўляць старонку пры змене рэжыму фільтравання",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/bg/messages.json b/platform/mv3/extension/_locales/bg/messages.json
new file mode 100644
index 0000000..c440a4b
--- /dev/null
+++ b/platform/mv3/extension/_locales/bg/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Блокиране на съдържание без разрешение. Блокира реклами, тракери, миньори и други веднага след инсталирането.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} правила, преобразувани от {{filterCount}} мрежови филтри",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Табло",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Настройки",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Относно",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Политика за поверителност",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "режим на филтриране",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Табло с настройки",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Още",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "По-малко",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Стандартни",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Реклами",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Поверителност",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Вредоносни домейни",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Досадни неща",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Разни",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Региони, езици",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Списък с промени",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Изходен код (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Сътрудници",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Изходен код",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Преводи",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Списъци с филтри",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Външни зависимости (съвместими с GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Добре дошли",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Току-що инсталирахте uBO Lite. Тук можете да изберете режима на филтриране по подразбиране, който да се използва за всички уебсайтове.\n\nПо подразбиране е избран <em>основен</em> режим, тъй като той не изисква разрешение за четене и промяна на данни. Ако се доверите на uBO Lite, можете да му дадете широко разрешение да чете и променя данни на всички уебсайтове, за да активирате по-разширени възможности за филтриране за всички уебсайтове по подразбиране.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Режим на филтриране по подразбиране",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Режимът на филтриране по подразбиране ще бъде заменен от режимите на филтриране за всеки сайт. Можете да регулирате режима на филтриране на всеки уебсайт в зависимост от това кой режим работи най-добре за този уебсайт. Всеки режим има своите предимства и недостатъци.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "без филтриране",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "основен",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "оптимален",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "пълен",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Основно мрежово филтриране от избрани списъци с филтри.\n\nНе изисква разрешение за четене и промяна на данни в уебсайтове.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Разширено мрежово филтриране и специфично разширено филтриране от избрани списъци с филтри.\n\nИзисква широко разрешение за четене и промяна на данни във всички уебсайтове.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Разширено мрежово филтриране и специфично и общо разширено филтриране от избрани списъци с филтри.\n\nИзисква широко разрешение за четене и промяна на данни във всички уебсайтове.\n\nОбщото разширено филтриране може да доведе до по-голямо използване на ресурси от уебстраницата.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Списък с имена на хостове, за които няма да се извършва филтриране",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Поведение",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Автоматично презареждане на страницата при промяна на режима на филтриране",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/bn/messages.json b/platform/mv3/extension/_locales/bn/messages.json
new file mode 100644
index 0000000..ba12b5d
--- /dev/null
+++ b/platform/mv3/extension/_locales/bn/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "একটি পরীক্ষামূলক, অনুমতিহীন কন্টেন্ট নিষিদ্ধকারক। বিজ্ঞাপন, অনুসরণকারী, খননকারী, এবং আরো জিনিস নিষিদ্ধ করো ইন্সটলের সাথে সাথেই।",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — ড্যাশবোর্ড",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "পছন্দসমূহ",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "সম্পর্কে",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "গোপনীয়তার নীতিমালা",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "ফিল্টারিং মোড",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "ড্যাশবোর্ড খুলুন",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "আরো",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "কম",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "পূর্ব-নির্ধারিত",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "বিজ্ঞাপন",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "গোপনীয়তা",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "ম্যালওয়্যার ডোমেইন",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "বিরক্তি",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "বিবিধ",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "অঞ্চল, ভাষা",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "পরিবর্তনসূচি",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "অবদানকারী",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "উৎস কোড",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "অনুবাদসমূহ",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "ছাঁকন তালিকা",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "বাহ্যিক নির্ভরতা (GPLv3-সামঞ্জস্যপূর্ণ):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "স্বাগতম",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "আপনি সবেমাত্র uBO Lite ইনস্টল করেছেন। এখানে আপনি সকল ওয়েবসাইটে ব্যবহার করার জন্য ডিফল্ট ফিল্টারিং মোড চয়ন করতে পারেন৷\n\nডিফল্টরূপে, <em>মৌলিক</em> মোডটি নির্বাচন করা হয়েছে কারণ এতে ডেটা পড়ার এবং পরিবর্তন করার অনুমতির প্রয়োজন হয় না৷ আপনি যদি uBO Lite-কে বিশ্বাস করেন, আপনি ডিফল্টরূপে সকল ওয়েবসাইটের জন্য আরও উন্নত ফিল্টারিং ক্ষমতা সক্ষম করার জন্য এটিকে সকল ওয়েবসাইটের ডেটা পড়তে এবং পরিবর্তন করার বিস্তৃত অনুমতি দিতে পারেন।",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "ডিফল্ট ফিল্টারিং মোড",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "ডিফল্ট ফিল্টারিং মোড প্রতি-ওয়েবসাইটে ফিল্টারিং মোড দ্বারা ওভাররাইড করা হবে। আপনি যে কোনও ওয়েবসাইটে ফিল্টারিং মোড সামঞ্জস্য করতে পারেন যা সেই ওয়েবসাইটে সবচেয়ে ভাল কাজ করে। প্রতিটি মোড এর সুবিধা এবং অসুবিধা আছে।",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "ছাঁকনি নেই",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "মৌলিক",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "কার্যকরী",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "সম্পূর্ণ",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "নির্বাচিত ফিল্টার তালিকা থেকে মৌলিক নেটওয়ার্ক ফিল্টারিং।\n\nওয়েবসাইটগুলোতে ডেটা পড়তে এবং পরিবর্তন করার জন্য অনুমতির প্রয়োজন হয় না।",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "উন্নত নেটওয়ার্ক ফিল্টারিং এবং নির্বাচিত ফিল্টার তালিকা থেকে নির্দিষ্ট বর্ধিত ফিল্টারিং।\n\nসকল ওয়েবসাইটের ডেটা পড়তে এবং পরিবর্তন করার জন্য বিস্তৃত অনুমতির প্রয়োজন৷",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "উন্নত নেটওয়ার্ক ফিল্টারিং এবং নির্বাচিত ফিল্টার তালিকা থেকে নির্দিষ্ট এবং জেনেরিকের বর্ধিত ফিল্টারিং।\n\nসকল ওয়েবসাইটে ডেটা পড়তে এবং পরিবর্তন করার জন্য বিস্তৃত অনুমতির প্রয়োজন৷\n\nজেনেরিক বর্ধিত ফিল্টারিং উচ্চতর ওয়েবপেজ সম্পদসমূহের ব্যবহারের কারণ হতে পারে।",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "হোস্টনেমের তালিকা যেগুলোর কোনো ফিল্টারিং হবে না",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "আচরণ",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "ফিল্টারিং মোড পরিবর্তন করার সময় স্বয়ংক্রিয়ভাবে পেজ পুনরায় লোড করুন",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/br_FR/messages.json b/platform/mv3/extension/_locales/br_FR/messages.json
new file mode 100644
index 0000000..48f7013
--- /dev/null
+++ b/platform/mv3/extension/_locales/br_FR/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Ur stanker saotradurioù hep aotre ebet rekis. Stankañ a ra bruderezh, heulierien, minerien ha kalz muioc'h kerkent ha m'eo staliet.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} reolenn, amdroet diwar {{filterCount}} sil rouedad",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Taolenn-vourzh",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Arventennoù",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Diwar-benn",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Politikerezh prevezded",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "mod silañ",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Digeriñ an daolenn-vourzh",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Muioc'h",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Nebeutoc'h",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Dre ziouer",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Bruderezh",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Prevezded",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Saotradurioù",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "A bep seurt",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Rannvroioù, broioù",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Deizlevr ar cheñchamantoù",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Kod mammenn (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Kenlabourerien",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Kod mammenn",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Troidigezhioù",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Rolloù ar siloù",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dalc'hioù diavaez (a glot gant GPLv3)",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Donemat",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Emaoc'h o paouez staliañ uBO Lite. Amañ-dindan e c'hallit dibab ar mod silañ dre ziouer evit an holl lec'hiennoù.\n\nDre ziouer eo bet dibabet ar mod <em>diazez</em> peogwir n'eus ket ezhomm reiñ aotre da lenn ha kemmañ roadennoù da uBO Lite. M'ho peus fiziañs e uBO Lite e c'hallit reiñ aotreoù ouzhpenn dezhañ a-benn lenn ha kemmañ roadennoù en holl lec'hiennoù, mod-se e vo enaouet ar mod silañ araokaet en holl lec'hiennoù dre ziouer.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Mod silañ dre ziouer",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Ar mod silañ dre ziouer a vo erlec'hiet gant modoù silañ zo evit lec'hiennoù resis. Gallout a rit aozañ ar mod silañ war bep seurt lec'hienn evit ma vo diouzh al lec'hiennoù-se. Pep mod en deus e duioù fall ha mat.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "Tamm silañ ebet",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "diazez",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "ar gwellañ",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "klok",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Silañ diazez ar rouedad diouzh ar rolloù siloù diuzet.\n\nN'eus ket ezhomm a aotre evit lenn hag aozañ roadennoù el lec'hiennoù.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Silañ rouedad araokaet ha silañ amplaet termenet diouzh ar rolloù siloù bet dibabet.\n\nRet eo reiñ aotreoù ouzhpenn a-benn lenn ha kemmañ roadennoù en holl lec'hiennoù.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Silañ rouedad araokaet ha silañ amplaet resis ha hollek diouzh ar rolloù siloù diuzet.\n\nRet eo reiñ aotreoù ouzhpenn a-benn lenn ha kemmañ roadennoù en holl lec'hiennoù.\n\nGant ar silañ amplaet hollek e c'hallfe ar bajenn web implijout muioc'h a zanvezioù.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Roll eus anvioù domanioù el-lec'h ne vo silañ ebet",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Emzalc'h",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Adkargañ ar bajenn ent-emgefreek pa vez cheñchet an doare silañ",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/bs/messages.json b/platform/mv3/extension/_locales/bs/messages.json
new file mode 100644
index 0000000..14e847d
--- /dev/null
+++ b/platform/mv3/extension/_locales/bs/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Eksperimentalni blokator sadržaja bez dopuštenja. Blokira oglase, trakere za praćenje, \"rudare\" kovanica kripto valute i još [...]",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} pravila, pretvoreno iz {{filterCount}} mrežnih filtera",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Nadzorna Ploča",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Postavke",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "O aplikaciji",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Politika privatnosti",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "način filtriranja",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Otvorite nadzornu ploču",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Više",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Manje",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Zadano",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Reklame",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privatnost",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Zloćudne domene",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Dosade",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Raznolično",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regije, jezici",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Dnevnik izmjena",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Izvorna koda (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Suradnici",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Izvorna koda",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Prijevodi",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Zapis filtera",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Vanjske ovisnosti (kompatibilno s GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Dobrodošli",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Upravo ste instalirali uBO Lite. Ovdje možete odabrati zadani način filtriranja koji će se koristiti na svim web stranicama.\n\nPrema zadanim postavkama, <em>Osnovni</em> način rada je odabran jer ne zahtijeva dozvolu za čitanje i izmjenu podataka. Ako vjerujete uBO Lite-u, možete mu dati široku dozvolu za čitanje i izmjenu podataka na svim web lokacijama kako bi se omogućile naprednije mogućnosti filtriranja za sve web stranice prema zadanim postavkama.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Zadani način filtriranja",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Zadani način filtriranja bit će zamijenjen načinima filtriranja po web stranici. Možete podesiti način filtriranja na bilo kojoj web stranici prema tome koji način rada najbolje funkcionira na toj web stranici. Svaki način rada ima svoje prednosti i nedostatke.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "nema filtriranja",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "osnovno",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimalno",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "kompletan",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": " Osnovno mrežno filtriranje sa odabranih lista filtera.\n\nNe zahtijeva dozvolu za čitanje i modificiranje podataka na web stranicama.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Napredno mrežno filtriranje plus specifično prošireno filtriranje sa odabranih lista filtera.\n\nZahtijeva široku dozvolu za čitanje i izmjenu podataka na svim web stranicama.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Napredno mrežno filtriranje plus specifično i generičko prošireno filtriranje sa odabranih lista filtera.\n\nZahtijeva široku dozvolu za čitanje i izmjenu podataka na svim web stranicama.\n\nGeneričko prošireno filtriranje može uzrokovati veću upotrebu resursa web stranice.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Lista imena hostova za koja se neće vršiti filtriranje",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Ponašanje",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatski ponovo učitajte stranicu prilikom promjene načina filtriranja",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/ca/messages.json b/platform/mv3/extension/_locales/ca/messages.json
new file mode 100644
index 0000000..abe76eb
--- /dev/null
+++ b/platform/mv3/extension/_locales/ca/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Un blocador de contingut lleuger experimental i sense permisos: bloca anuncis, rastrejadors, miners i molt més per defecte.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} regles, convertides a partir de {{filterCount}} filtres de xarxa",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Tauler",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Configuració",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Quant a",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Política de privadesa",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "mode de filtre",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Obre el tauler",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Més",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Menys",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Per defecte",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Anuncis",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privadesa",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Dominis de programari maliciós",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Elements molestos",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscel·lània",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, llengües",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Registre de canvis",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Codi font (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Col·laboradors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Codi font",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Traduccions",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Llistat de filtres",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dependències externes (compatibles amb GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Us donem la benvinguda",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Acabeu d'instal·lar l'uBO Lite. Aquí podeu triar el mode de filtrat per defecte per utilitzar-lo a tots els llocs web.\n\nPer defecte, el mode <em>Bàsic</em> està seleccionat perquè no requereix permís per llegir i canviar dades. Si confieu en l'uBO Lite, podeu donar-li un ampli permís per llegir i canviar dades a tots els llocs web per tal d'activar capacitats de filtratge més avançades per a tots els llocs web per defecete.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Mode de filtratge per defecte",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "El mode de filtratge per defecte serà substituït pels modes de filtrat per lloc web. Podeu ajustar el mode de filtratge a qualsevol lloc web segons el qual funcioni millor en aquest lloc web. Cada mode té els seus avantatges i desavantatges.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "sense filtres",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "bàsic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "òptim",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complet",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Filtratge bàsic de xarxa a partir de llistes de filtres seleccionades.\n\nNo requereix permís per llegir i canviar dades als llocs web.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Filtratge de xarxa avançat més un filtratge ampli específic de les llistes de filtres seleccionades.\n\nRequereix un ampli permís per llegir i canviar dades a tots els llocs web.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Filtratge de xarxa avançat més un filtratge estès específic i genèric de les llistes de filtres seleccionades.\n\nRequereix un ampli permís per llegir i canviar dades a tots els llocs web.\n\nEl filtratge estès genèric pot provocar un ús més elevat dels recursos de la pàgina web.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Llistat de noms d'amfitrió als quals no s'aplicarà cap filtre",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Comportament",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Recarrega automàticament la pàgina quan canvieu el mode de filtratge",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/cs/messages.json b/platform/mv3/extension/_locales/cs/messages.json
new file mode 100644
index 0000000..abc5164
--- /dev/null
+++ b/platform/mv3/extension/_locales/cs/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Experimentální blokátor obsahu vyžadující méně oprávnění. Blokuje reklamy, sledovače, těžaře a jiné ihned po instalaci.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} pravidel, převedeno z {{filterCount}} síťových filtrů",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Ovládací panel",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Nastavení",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "O rozšíření",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Ochrana soukromí",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "Filtrovací režim",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Otevřít ovládací panel",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Více",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Méně",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Výchozí",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Reklamy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Soukromí",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domény",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Dotěrnosti",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Ostatní",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regionální, jazykové",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Přehled změn",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Zdrojový kód (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Přispívající",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Zdrojový kód",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Překlady",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Seznamy filtrů",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Externí závislosti (kompatibilní s GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Vítejte",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Právě jste nainstalovali uBO Lite. Zde si můžete vybrat výchozí režim filtrování pro použití na všech webových stránkách.\n\nVe výchozím nastavení je vybrán režim <em>Základní</em>, protože nevyžaduje oprávnění ke čtení a změně dat. Pokud důvěřujete uBO Lite, můžete mu udělit široké oprávnění číst a měnit data na všech webových stránkách, abyste ve výchozím nastavení povolili pokročilejší možnosti filtrování pro všechny webové stránky.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Výchozí filtrovací režim",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Výchozí režim filtrování bude přepsán režimy filtrování pro jednotlivé webové stránky. Režim filtrování na libovolném webu můžete upravit podle toho, který režim na daném webu funguje nejlépe. Každý režim má své výhody a nevýhody.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "žádné filtrování",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "základní",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimální",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "kompletní",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Základní filtrování sítě z vybraných seznamů filtrů.\n\nNevyžaduje oprávnění ke čtení a změně údajů na webových stránkách.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Pokročilé síťové filtrování plus specificky rozšířené filtrování z vybraných seznamů filtrů.\n\nVyžaduje rozsáhlé oprávnění ke čtení a změně dat na všech webech.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Pokročilé síťové filtrování plus specificky a obecně rozšířené filtrování z vybraných seznamů filtrů.\n\nVyžaduje rozsáhlé oprávnění ke čtení a změně dat na všech webech.\n\nObecně rozšířené filtrování může způsobit vyšší využití zdrojů webových stránek.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Seznam názvů hostitelů, pro které nebude probíhat žádné filtrování",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Chování",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automaticky znovu načíst stránku při změně filtrovacího režimu",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/cv/messages.json b/platform/mv3/extension/_locales/cv/messages.json
new file mode 100644
index 0000000..627857e
--- /dev/null
+++ b/platform/mv3/extension/_locales/cv/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Settings",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "About",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Default",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscellaneous",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/da/messages.json b/platform/mv3/extension/_locales/da/messages.json
new file mode 100644
index 0000000..7f628ab
--- /dev/null
+++ b/platform/mv3/extension/_locales/da/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "En tilladelsesløs indholdsblocker. Blokerer som standard annoncer, trackere, minere mv. straks efter installationen.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} regler, konverteret fra {{filterCount}} netværksfiltre",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Kontrolpanel",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Indstillinger",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Om",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Fortrolighedspolitik",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtreringstilstand",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Åbn kontrolpanelet",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Flere",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Færre",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Standard",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Reklamer",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Fortrolighed",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware-domæner",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Irritationsmomenter",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Diverse",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regioner, sprog",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Ændringslog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Kildekode (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Bidragsydere",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Kildekode",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Oversættelser",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filterlister",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Eksterne afhængigheder (GPLv3-kompatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Velkommen",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Du har netop installeret uBO Lite. Her kan den standardfiltreringstilstand vælges, der skal bruges på alle websteder.\n\nStandardvalget er <em>Basis</em>-tilstand, da den ikke kræver tilladelse til at læse og ændre data. Er uBO Lite betroet, kan den udvidede tilladelse til at læse og ændre data på alle websteder tildeles for som standard at aktivere mere avancerede filtreringsfunktioner for alle websteder.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Standardfiltreringstilstand",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Standardfiltreringstilstanden tilsidesættes af per-websted filtreringstilstande. Filtreringstilstanden kan justeres på ethvert givent websted iht., hvilken tilstand der fungere bedst på det givne websted. Hver tilstand har sine fordele og ulemper.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "ingen filtrering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basis",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "fuldstændig",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basis netværksfiltrering ud fra valgte filterlister.\n\nTilladelse kræves ikke til at læse og ændre data på websteder.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Avanceret netværksfiltrering plus specifik udvidet filtrering ud fra valgte filterlister.\n\nOmfattende tilladelse kræves for at læse og ændre data på alle websteder.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Avanceret netværksfiltrering plus specifik og generisk udvidet filtrering ud fra valgte filterlister.\n\nOmfattende tilladelse kræves for at læse og ændre data på alle websteder.\n\nGenerisk, udvidet filtrering kan medføre højere webside-ressourceforbrug.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Liste over værtsnavne, for hvilke ingen filtrering vil ske",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Adfærd",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatisk sidegenindlæsning ved skift af filtreringstilstand",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/de/messages.json b/platform/mv3/extension/_locales/de/messages.json
new file mode 100644
index 0000000..1e014df
--- /dev/null
+++ b/platform/mv3/extension/_locales/de/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Ein Inhaltsblocker, der ohne Berechtigungen auskommt. Blockiert Werbung, Tracker und mehr sofort nach der Installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} Regeln, umgewandelt aus {{filterCount}} Netzwerkfiltern",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Einstellungen",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Über",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Datenschutzhinweise",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "Filtermodus",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Dashboard öffnen",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Mehr",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Weniger",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Standard",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Werbung",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Datenschutz",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Domains mit Schadsoftware",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Belästigungen",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Verschiedenes",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regionen, Sprachen",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Änderungsprotokoll",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Quellcode (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Mitwirkende",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Quellcode",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Übersetzungen",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filterlisten",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Externe Abhängigkeiten (GPLv3-kompatibel):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Willkommen",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Sie haben soeben uBO Lite installiert. Sie können hier den Standardfiltermodus auswählen, der auf allen Websites angewendet werden soll.\n\nStandardmäßig ist der <em>einfache</em> Modus ausgewählt, weil er keine Berechtigung zum Lesen und Ändern von Daten erfordert. Wenn Sie uBO Lite vertrauen, können Sie dieser Erweiterung eine weitreichende Berechtigung zum Lesen und Ändern von Daten auf allen Websites erteilen, um standardmäßig erweiterte Filterfunktionen für alle Websites zu aktivieren.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Standardfiltermodus",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Der Standardfiltermodus wird durch individuelle Filtermodi für die jeweiligen Websites überschrieben. Sie können den Filtermodus auf jeder beliebigen Website entsprechend dem Modus anpassen, der auf dieser Website am besten funktioniert. Jeder Modus hat seine Vor- und Nachteile.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "nicht filtern",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "einfach",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "vollständig",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Einfaches Netzwerkfiltern aus gewählten Filterlisten.\n\nErfordert keine Berechtigung zum Lesen und Ändern von Daten auf Websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Erweitertes Netzwerkfiltern plus spezifisches erweitertes Filtern aus ausgewählten Filterlisten.\n\nErfordert eine weitreichende Berechtigung zum Lesen und Ändern von Daten auf allen Websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Erweitertes Netzwerkfiltern plus spezifisches und allgemeines erweitertes Filtern aus gewählten Filterlisten.\n\nErfordert eine weitreichende Berechtigung zum Lesen und Ändern von Daten auf allen Websites.\n\nDas allgemeine erweiterte Filtern kann zu einem höheren Ressourcenverbrauch der Webseite führen.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Liste der Hostnamen, für die nicht gefiltert wird",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Verhalten",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Seite beim Ändern des Filtermodus automatisch neu laden",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/el/messages.json b/platform/mv3/extension/_locales/el/messages.json
new file mode 100644
index 0000000..cc8c204
--- /dev/null
+++ b/platform/mv3/extension/_locales/el/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Ένα πειραματικό εργαλείο φραγής περιεχομένου χωρίς δικαιώματα. Αποκλείει διαφημίσεις, ιχνηλάτες και πολλά άλλα μετά την εγκατάσταση.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} κανόνες, μετατράπηκαν από {{filterCount}} φίλτρα δικτύου",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Πίνακας ελέγχου",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Ρυθμίσεις",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Σχετικά",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Πολιτική απορρήτου",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "λειτουργία φιλτραρίσματος",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Ανοίξτε τον πίνακα ελέγχου",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Περισσότερα",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Λιγότερα",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Προεπιλογή",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Διαφημίσεις",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Απόρρητο",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Τομείς κακόβουλου λογισμικού",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Ενοχλήσεις",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Διάφορα",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Περιοχές, γλώσσες",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Αρχείο αλλαγών",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Πηγαίος κώδικας (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Συνεισφέροντες",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Πηγαίος κώδικας",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Μεταφράσεις",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Λίστες φίλτρων",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Εξωτερικές εξαρτήσεις (συμβατές με GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Καλώς ήρθατε",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Μόλις εγκαταστήσατε το uBO Lite. Μπορείτε να επιλέξετε εδώ την προεπιλεγμένη λειτουργία φιλτραρίσματος για χρήση σε όλους τους ιστότοπους.\n\nΑπό προεπιλογή, έχει επιλεγεί η λειτουργία <em>Βασική</em> επειδή δεν απαιτεί άδεια ανάγνωσης και αλλαγής δεδομένων. Εάν εμπιστεύεστε το uBO Lite, μπορείτε να του δώσετε ευρεία άδεια να διαβάζει και να αλλάζει δεδομένα σε όλους τους ιστότοπους, προκειμένου να ενεργοποιηθούν πιο προηγμένες δυνατότητες φιλτραρίσματος για όλους τους ιστότοπους από προεπιλογή.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Προεπιλεγμένη λειτουργία φιλτραρίσματος",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Η προεπιλεγμένη λειτουργία φιλτραρίσματος θα αντικατασταθεί από τις λειτουργίες φιλτραρίσματος ανά ιστότοπο. Μπορείτε να προσαρμόσετε τη λειτουργία φιλτραρίσματος σε οποιονδήποτε ιστότοπο, σύμφωνα με όποια λειτουργία λειτουργεί καλύτερα σε αυτόν τον ιστότοπο. Κάθε λειτουργία έχει τα πλεονεκτήματα και τα μειονεκτήματά της.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "χωρίς φιλτράρισμα",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "βασικό",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "βέλτιστο",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "πλήρης",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Βασικό φιλτράρισμα δικτύου από επιλεγμένες λίστες φίλτρων.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Προηγμένο φιλτράρισμα δικτύου και συγκεκριμένο εκτεταμένο φιλτράρισμα από επιλεγμένες λίστες φίλτρων.\n\nΑπαιτεί ευρεία άδεια για την ανάγνωση και την αλλαγή δεδομένων σε όλους τους ιστότοπους.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Προηγμένο φιλτράρισμα δικτύου και ειδικό και γενικό εκτεταμένο φιλτράρισμα από επιλεγμένες λίστες φίλτρων.\n\nΑπαιτεί ευρεία άδεια για την ανάγνωση και την αλλαγή δεδομένων σε όλους τους ιστότοπους.\n\nΤο γενικό εκτεταμένο φιλτράρισμα μπορεί να προκαλέσει μεγαλύτερη χρήση πόρων ιστοσελίδας.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Λίστα των hostnames για τα οποία δεν θα πραγματοποιηθεί φιλτράρισμα",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Συμπεριφορά",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Αυτόματη επαναφόρτωση σελίδας κατά την αλλαγή λειτουργίας φιλτραρίσματος",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/en/messages.json b/platform/mv3/extension/_locales/en/messages.json
new file mode 100644
index 0000000..6725ba1
--- /dev/null
+++ b/platform/mv3/extension/_locales/en/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Settings",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "About",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Default",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscellaneous",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/en_GB/messages.json b/platform/mv3/extension/_locales/en_GB/messages.json
new file mode 100644
index 0000000..b935137
--- /dev/null
+++ b/platform/mv3/extension/_locales/en_GB/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Settings",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "About",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Default",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscellaneous",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Change-log",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behaviour",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/eo/messages.json b/platform/mv3/extension/_locales/eo/messages.json
new file mode 100644
index 0000000..9e86eea
--- /dev/null
+++ b/platform/mv3/extension/_locales/eo/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Agordoj",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Pri",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Pli",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Malpli",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Defaŭlta",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Reklamoj",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privateco",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscellaneous",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Ŝanĝprotokolo",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Fontkodo (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Kontribuantoj",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Fontkodo",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Tradukoj",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Bonvenon",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "simpla",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/es/messages.json b/platform/mv3/extension/_locales/es/messages.json
new file mode 100644
index 0000000..1bf7af5
--- /dev/null
+++ b/platform/mv3/extension/_locales/es/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Un bloqueador de contenido con menos permisos. Bloquea anuncios, rastreadores, criptomineros y aún más.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} reglas, convertidas desde {{filterCount}} filtros de red",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Panel de control",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Configuración",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Acerca de",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Política de privacidad",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "modo de filtrado",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Abrir panel de control",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Más",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Menos",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Predeterminado",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Anuncios",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacidad",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Dominios de malware",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Elementos molestos",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Varios",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regiones, idiomas",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Registro de cambios",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Código fuente (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Colaboradores",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Código fuente",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Traducciones",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Listas de filtros",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dependencias externas (compatibles con GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Bienvenida",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Acabas de instalar uBO Lite. Aquí puedes elegir el modo de filtrado predeterminado que se utilizará en todos los sitios web.\n\nPor defecto, el modo <em>básico</em> está seleccionado porque no requiere permiso para leer y modificar datos. Si confías en uBO Lite, puedes otorgarle un permiso amplio para leer y modificar datos en todos los sitios web para habilitar capacidades de filtrado más avanzadas para todos los sitios web de forma predeterminada.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Modo de filtrado predeterminado",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "El modo de filtrado predeterminado será anulado por los modos de filtrado por sitio web. Puedes ajustar el modo de filtrado en cualquier sitio web según el modo que funcione mejor en ese sitio web. Cada modo tiene sus ventajas y desventajas.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "sin filtrado",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "básico",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "óptimo",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "completo",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Filtrado de red básico a partir de listas de filtros seleccionadas.\n\nNo requiere permiso para leer y modificar datos en sitios web.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Filtrado de red avanzado más filtrado extendido específico a partir de listas de filtros seleccionadas.\n\nRequiere un amplio permiso para leer y modificar datos en todos los sitios web.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Filtrado de red avanzado más filtrado extendido específico y genérico a partir de listas de filtros seleccionadas.\n\nRequiere un amplio permiso para leer y modificar datos en todos los sitios web.\n\nEl filtrado genérico extendido puede causar un mayor uso de recursos de la página web.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Lista de nombres de host para los cuales no tendrá lugar el filtrado",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Comportamiento",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Recargar automáticamente la página al cambiar el modo de filtrado",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/et/messages.json b/platform/mv3/extension/_locales/et/messages.json
new file mode 100644
index 0000000..92e5952
--- /dev/null
+++ b/platform/mv3/extension/_locales/et/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Õigustevaba sisublokeerija. Blokeerib reklaamid, jälitajad, kaevandajad ja teised kohe pärast paigaldust.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} reeglit, konverteeritud {{filterCount}} võrgufiltrist",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Töölaud",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Sätted",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Teave",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privaatsusteatis",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtreerimisrežiim",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Ava töölaud",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Rohkem",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Vähem",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Vaikimisi",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Reklaamid",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privaatsus",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Pahavara domeenid",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Tüütused",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Varia",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regioonid, keeled",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Muudatuste logi",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Lähtekood (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Toetajad",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Lähtekood",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Tõlked",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filtriloendid",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Välised sõltuvused (ühilduvad GPLv3-ga):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Tere tulemast",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Olete paigaldanud uBO Lite'i. Nüüd valige kõigil veebilehtedel kasutatav üldine filtreerimisrežiim.\n\nTavaliselt kehtib <em>Põhiline</em> režiim, kuna see ei vaja andmete lugemise ja muutmise luba. uBO Lite'i usaldamisel saate sel lubada andmeid lugeda ja muuta kõigil veebilehtedel, et neid saaks vaikimisi filtreerida põhjalikumalt.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Tavaline filtreerimisrežiim",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Tavalise filtreerimisrežiimi asemel kasutatakse vajadusel veebilehepõhiseid filtreerimisrežiime. Saate veebilehte filtreerida kõige paremini toimiva režiimiga. Igal režiimil on omad eelised ja puudused.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "filtreerimine puudub",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "põhiline",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimaalne",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "põhjalik",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Interneti üldine filtreerimine valitud filtreerimisloenditega.\n\nPole vaja veebilehtede andmete lugemise ja muutmise luba.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Interneti täpsem filtreerimine enda valitud filtreerimisloenditega.\n\nVajab veebilehtede andmete lugemise ja muutmise üldist luba.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Interneti põhjalikum filtreerimine ja enda valitud filtreerimisloenditega täpsem ning üldisem filtreerimine.\n\nVajab kõikide veebilehtede andmete lugemise ja muutmise üldist luba.\n\nÜldine ja põhjalikum filtreerimine võib koormata veebilehe ressursse tavapärasest rohkem.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Hostinimede loend, kus filtreerimine keelatakse",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Käitumine",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Leht laadib ise uuesti filtreerimisrežiimi muutmisel",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/eu/messages.json b/platform/mv3/extension/_locales/eu/messages.json
new file mode 100644
index 0000000..386468f
--- /dev/null
+++ b/platform/mv3/extension/_locales/eu/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Probatako eta baimenik behar ez duen eduki-blokeatzailea. Iragarkiak, jarraitzeko tresnak, eta gehiago instalatzean bertan [...]",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} erregela, {{filterCount}} sare-filtrotik bihurtuta.",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite - Lan-lekua",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Ezarpenak",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Honi buruz",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Pribatutasun politika",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "Iragazteko modua",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Ireki lan-lekua",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Gehiago",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Gutxiago",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Defektuzkoa",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Iragarkiak",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Pribatutasuna",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domeinuak",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Eragozpenak",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Bestelakoak",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Eskualdeak, hizkuntzak",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Aldaketen erregistroa",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Iturburu kodea (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Laguntzaileak",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Iturburu-kodea",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Itzulpenak",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Iragazki-zerrendak",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Kanpo menpekotasunak (GPLv3 lizentziarekin bateragarriak):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Ongi etorri",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "uBO Lite instalatu berri duzu. Hemen, webgune guztietan erabiltzeko iragazteko modu lehenetsia hauta dezakezu.\n\nAurrez zehaztuta, <em>Oinarrizkoa </em>modua hautatzen da, ez baita baimenik behar datuak irakurtzeko eta aldatzeko. uBO Lite-n konfiantza baduzu, webgune guztietan datuak irakurtzeko eta aldatzeko baimen zabala eman dezakezu, webgune guztietarako iragazteko gaitasun aurreratuagoak gaitzeko, aldez aurretik zehaztuta.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Lehenetsitako iragazteko modua",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Iragazteko aurrez zehaztutako modua webgunearen arabera iragazteko moduen bidez deuseztatuko da. Edozein webgunetan iragazteko modua doitu dezake, webgune horretan hobekien funtzionatzen duen moduaren arabera. Modu bakoitzak bere abantailak eta desabantailak ditu.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "iragazkirik gabe\n",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "Oinarrizkoa",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimo",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "eginda",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Oinarrizko sarea iragaztea, hautatutako iragazkien zerrendetatik abiatuta.\n\nEz da baimenik behar webguneetan datuak irakurtzeko eta aldatzeko.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "\nSare aurreratuaren iragazketa gehi hautatutako iragazkien zerrenden berariazko hedapena.\n\nBaimen zabala behar da webgune guztietan datuak irakurri eta aldatzeko.\n",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "\nSare aurreratuko iragazketa gehi hedapen espezifiko eta generikoa hautatutako iragazkien zerrendetan.\n\nBaimen zabala behar da webgune guztietan datuak irakurri eta aldatzeko.\n\nIragazte hedatu generikoak web-orriaren baliabide gehiago erabiltzea eragin dezake.\n",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "portaera or jokaera",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Orria automatikoki kargatuko da iragazteko modua aldatuko denean",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/fa/messages.json b/platform/mv3/extension/_locales/fa/messages.json
new file mode 100644
index 0000000..b0ed662
--- /dev/null
+++ b/platform/mv3/extension/_locales/fa/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "تنظیمات",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "درباره",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "بیشتر",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "کمتر",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "پیش فرض",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "تبلیغات",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "حریم خصوصی",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "سایر",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/fi/messages.json b/platform/mv3/extension/_locales/fi/messages.json
new file mode 100644
index 0000000..44ac9b0
--- /dev/null
+++ b/platform/mv3/extension/_locales/fi/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Käyttöoikeudeton estotyökalu, joka estää välittömästi asennuksesta lähtien mm. mainokset, seurannat ja kryptolouhijat.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} sääntöä, muunnettu {{filterCount}} verkkosuodattimesta",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Hallintapaneeli",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Asetukset",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Tietoja",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Tietosuojakäytäntö",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "suodatustila",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Avaa hallintapaneeli",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Enemmän",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Vähemmän",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Oletus",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Mainokset",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Tietosuoja",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Haittaohjelmia jakelevat verkkotunnukset",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Ärsykkeet",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Sekalaiset",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Alueet, kielet",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Muutoshistoria",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Lähdekoodi (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Avustajat",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Lähdekoodi",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Käännökset",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Suodatinlistat",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Ulkopuoliset riippuvuudet (GPLv3-yhteensopiva):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Tervetuloa",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Olet juuri asentanut uBO Liten. Tästä voit valita kaikilla sivustoilla oletusarvoisesti käytettävän suodatustilan.\n\nOletusarvoinen valinta on <em>Perus</em>-tila, koska se ei vaadi tietojen luku- ja muokkausoikeutta. Jos luotat uBO Liteen, voit myöntää sille kaikki sivustot kattavan laajan tietojen luku- ja muokkausoikeuden, jolloin edistyneemmät suodatusominaisuudet ovat oletusarvoisesti käytössä kaikilla sivustoilla.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Oletusarvoinen suodatustila",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Sivustokohtaiset suodatustilat ohittavat oletusarvoisen suodatustilan. Voit säätää suodatustilan kullekin sivustolle parhaiten sopivaksi. Jokaisella tilalla on hyvät ja huonot puolensa.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "ei suodatusta",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "perus",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimaalinen",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "täysi",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Perustason verkkosuodatus valituilla suodatinlistoilla.\n\nEi edellytä sivustojen tietojen luku- ja muokkausoikeutta.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Edistynyt verkkosuodatus sekä kohdistettu laajempi suodatus valituilla suodatinlistoilla.\n\nEdellyttää kaikki sivustot kattavan, laajemman tietojen luku- ja muokkausoikeuden.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Edistynyt verkkosuodatus sekä kohdistettu ja yleinen laajempi suodatus valituilla suodatinlistoilla.\n\nEdellyttää kaikki sivustot kattavan, laajemman tietojen luku- ja muokkausoikeuden.\n\nYleinen laajempi suodatus saattaa kasvattaa sivukohtaista resurssien käyttöä.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Listaus osotteista, joita ei suodateta.",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Toiminta",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Lataa sivu suodatustilan vaihtuessa automaattisesti uudelleen",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/fil/messages.json b/platform/mv3/extension/_locales/fil/messages.json
new file mode 100644
index 0000000..68025d2
--- /dev/null
+++ b/platform/mv3/extension/_locales/fil/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Permission-less na tagaharang ng content. Hinaharang ang mga ad, tracker, miner, at higit pa pagka-install.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} (na) mga patakaran, mula sa {{filterCount}} (na) mga network filter",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Mga Setting",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Tungkol",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Patakaran sa pagkapribado",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "moda nang pagsasala",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Buksan ang dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Higit pa",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Mas konti",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Default",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Mga ad",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Pagkapribado",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Mga domain na may malware",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Mga nakakaabalang bagay",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Iba pa",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Mga rehiyon o wika",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Talaan ng mga pagbabago",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Mga nag-ambag",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Mga pagsasalin",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Listahan ng mga filter",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Mga panlabas na dependency (angkop sa GPLv3)",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Mabuhay",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Maligayang pagdating sa uBO Lite. Dito mo mapipili ang default na mode sa pagfi-filter para sa lahat ng mga website.\n\nAng default na mode ay <em>Basic</em> dahil hindi nito kailangan ng karagdagang pahintulot na magbasa at magbago ng datos. Pwede mong pahintulutan ang uBO Lite, kung nagtitiwala ka sa amin, na basahin at baguhin ang data ng lahat ng mga website para sa karagdagang kakayahan sa pagfi-filter.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default na mode sa pagfi-filter",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Mas sinusunod ang mode sa pagfi-filter na pinasadya para sa isang website kaysa sa pangkalahatang mode sa pagfi-filter. Mababago mo ang mode sa pagfi-filter sa isang website sa kung anong mode ang mas mainam. May kalakasan at kahinaan ang bawat mode.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "walang pagfi-filter",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "pinainam",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "kumpleto",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic na network filtering mula sa mga napiling listahan ng mga filter.\n\nHindi kailangan ng pahintulot na basahin at baguhin ang mga data ng website.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Pinainam na network filtering at partikular na karagdagang pagfi-filter mula sa mga napiling listahan ng mga filter.\n\nKailangan ang pahintulot na basahin at baguhin ang mga data ng lahat ng mga website.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Pinainam na network filtering, partikular at generikong karagdagang pagfi-filter mula sa mga napiling listahan ng mga filter.\n\nKailangan ang pahintulot na basahin at baguhin ang mga data ng lahat ng mga website.\n\nMaaaring mas malaki ang konsyumo sa resource dahil sa generikong karagdagang pagfi-filter.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Ugali",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Awtomatikong i-reload ang pahina kapag binago ang mode sa pagfi-filter",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/fr/messages.json b/platform/mv3/extension/_locales/fr/messages.json
new file mode 100644
index 0000000..2f6a837
--- /dev/null
+++ b/platform/mv3/extension/_locales/fr/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Un bloqueur de contenu sans permission requise. Bloque les publicités, pisteurs, mineurs et plus dès l'installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} règles converties depuis {{filterCount}} filtres de réseau",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Tableau de bord",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Paramètres",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "À propos",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Politique de confidentialité",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "Mode de filtrage",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Ouvrir le Tableau de bord",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Plus",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Moins",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Par défaut",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Publicités",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Confidentalité",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Domaines malveillants",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Nuisances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Divers",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Régions, langues",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Journal des changements",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Code Source (Licence GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributeurs",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Code Source",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Traductions",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Listes de filtres",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dépendances externes (compatibles GPLv3) :",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Bienvenue",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Vous venez d'installer uBO Lite. À présent vous pouvez choisir le mode de filtrage par défaut à utiliser sur tous les sites Web.\n\nPar défaut, le mode <em>Basique</em> est sélectionné car il ne requiert pas de permissions pour lire et modifier les données. Si vous faites confiance à uBO Lite, vous pouvez lui donner des permissions étendues pour lire et modifier les données sur tous les sites Web pour activer des capacités de filtrage plus avancées pour tous les sites Web par défaut.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Mode de filtrage par défaut",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Le mode de filtrage par défaut sera remplacé par des modes de filtrage au cas par cas. Vous pouvez ajuster le mode de filtrage sur un site Web donné d'après le mode qui fonctionne le mieux sur ce dernier. Chaque mode a ses avantages et ses inconvénients.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "Pas de filtrage",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "Basique",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "Optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "Complet",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Du filtrage réseau basique issu de listes de filtres choisies.\n\nNe nécessite pas de permission pour lire et modifier les données sur les sites Web.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Du filtrage réseau avancé plus du filtrage étendu spécifique issu de listes de filtres choisies.\n\nNécessite des permissions étendues pour lire et modifier les données sur tous les sites Web.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Du filtrage réseau avancé plus du filtrage étendu générique et spécifique issu de listes de filtres choisies.\n\nNécessite des permissions étendues pour lire et modifier les données sur tous les sites Web.\n\nLe filtrage étendu générique peut augmenter l'utilisation des ressources pour la page Web.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Liste des noms de domaine pour lesquels aucun filtrage n'aura lieu",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Comportement",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Recharger automatiquement la page lors du changement de mode de filtrage",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/fy/messages.json b/platform/mv3/extension/_locales/fy/messages.json
new file mode 100644
index 0000000..606fc0a
--- /dev/null
+++ b/platform/mv3/extension/_locales/fy/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "In eksperimintele, tastimmingsleaze ynhâldsblokkearder. Blokkearret daliks nei ynstallaasje advertinsjes, trackers, miners en mear.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rigels, konvertearre út {{filterCount}} netwurkfilters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite – Dashboerd",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Ynstellingen",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Oer",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacybelied",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtermodus",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Dashboerd iepenje",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Mear",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Minder",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Standert",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Advertinsjes",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malwaredomeinen",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Steurende eleminten",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Diversken",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Gebieden, talen",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Wizigingslochboek",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Boarnekoade (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Meiwurkers",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Boarnekoade",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Oersettingen",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filterlisten",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Eksterne ôfhinklikheden (GPLv3-kompatibel):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Wolkom",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Jo hawwe sakrekt uBO Lite ynstallearre. Hjir kinne jo de standery filtermodus foar it gebrûk op alle websites kieze.\n\nStandert wurdt de modus <em>Basis</em> selektearre, omdat hjirfoar gjin tastimming foar it lêzen en wizigjen fan gegevens fereaske is. As jo uBO Lite fertrouwe, kinne jo it brede tastimming foar it lêzen en wizigjen fan gegevens op alle websites ferliene, sadat standert mear avansearre filtermooglikheden foar alle websites beskikber binne.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Standert filtermodus",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "De standert filtermodus wurdt negearre troch filtermodi per website. Jo kinne de filtermodus op in winske website oanpasse nei de modus dy’t op dy website it bêste wurket. Elke modus hat foar- en neidielen.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "gjin filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basis",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimaal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "folslein",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basale netwurkfiltering fan selektearre filterlisten út.\n\nFereasket gjin tastimming foar it lêzen en wizigjen fan gegevens op websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Avansearre netwurkfiltering plus spesifike wiidweidige filtering fan selektearre filterlisten út.\n\nFereasket brede tastimming foar it lêzen en wizigjen fan gegevens op alle websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Avansearre netwurkfiltering plus spesifike en algemiene wiidweidige filtering fan selektearre filterlisten út.\n\nFereasket brede tastimming foar it lêzen en wizigjen fan gegevens op alle websites.\n\nAlgemiene wiidweidige filtering kin in heger gebrûk fan websideboarnen feroarsaakje.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List fan hostnammen wêrfoar gjin filtering plakfynt.",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Gedrach",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Side automatysk fernije by wizigjen fan filtermodus",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/gl/messages.json b/platform/mv3/extension/_locales/gl/messages.json
new file mode 100644
index 0000000..460bdb8
--- /dev/null
+++ b/platform/mv3/extension/_locales/gl/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Un bloqueador de contido con menos permisos. Bloquea anuncios, rastreadores, criptomineiros e mais despois da instalación.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} regras, convertidas dende {{filterCount}} filtros de redes",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Panel de control",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Axustes",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Acerca de",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Política de privacidade",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "modo de filtrado",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Abrir o panel",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Máis",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Menos",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Por defecto",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Anuncios",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacidade",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Molestias",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Varios",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Rexións, linguaxes",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Rexistro de cambios",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Código fonte (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contribúen",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Código fonte",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Traducións",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Listas de filtrado",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dependencias externas (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Benvida",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Acabas de instalar uBO Lite. Aquí podes escoller o modo de filtrado para usar en todas as páxinas web.\n\nPor defecto, o modo <em>Básico</em> está seleccionado porque non require o permiso de lectura ou modificar datos. Se confías en uBO Lite, podes darlle máis permisos para ler e modificar os datos de todos os sitios web para poder realizar por defecto un filtrado máis preciso en todas as páxinas web.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Modo de filtrado por defecto",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "O modo de filtrado por defecto vaise sobrescribir usando os filtros propios para cada web. Podes axustar o modo de filtrado para calquera web acorde ás túas preferencias para esa web. Cada modo ten as súas vantaxes e inconvintes.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "sen filtrar",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "básico",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "óptimo",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "completo",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Filtrado básico na rede usando listas de filtrado seleccionadas.\n\nNon require permiso de lectura ou modificar datos do sitio web.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Filtrado avanzado da rede e filtrado extendido específico usando listas de filtrado seleccionadas.\n\nRequire permisos máis amplos para ler e modificar datos en todas as webs.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Filtro avanzado na rede e filtrado extenso usando listas xenéricas e específicas para as webs.\n\nRequire permisos máis amplos para ler e modificar datos en todas as webs.\n\nO filtrado extendido xenérico podería facer que aumentasen os recursos que usa a páxina web.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Lista de nomes de host para os que non se fará filtrado",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Comportamento",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Recargar automáticamente a páxina a cambiar o modo de filtrado",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/gu/messages.json b/platform/mv3/extension/_locales/gu/messages.json
new file mode 100644
index 0000000..627857e
--- /dev/null
+++ b/platform/mv3/extension/_locales/gu/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Settings",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "About",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Default",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscellaneous",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/he/messages.json b/platform/mv3/extension/_locales/he/messages.json
new file mode 100644
index 0000000..3782fdb
--- /dev/null
+++ b/platform/mv3/extension/_locales/he/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "חוסם תוכן ניסיוני, נטול הרשאות. חוסם מודעות, עוקבים, כורים, ועוד מיד עם ההתקנה.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} כללים, הומרו מ־{{filterCount}} מסנני רשת",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "לוח־מחוונים – uBO Lite",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "הגדרות",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "אודות",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "מדיניות פרטיות",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "מצב מסנן",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "פתיחת לוח־המחוונים",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "עוד",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "פחות",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "ברירת מחדל",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "פרסומות",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "פרטיות",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "תחומי תוכנות זדוניות",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "מטרדים",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "שונות",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "אזורים, שפות",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "יומן שינויים",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "קוד מקור (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "תורמים",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "קוד מקור",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "תרגומים",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "רשימות סינון",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "תלויות חיצוניות (תואם GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "ברוך בואך",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "התקנת uBO Lite הסתיימה זה עתה. ניתן לבחור כאן את אופן סינון ברירת המחדל בכל אתרי הרשת.\n\nכברירת מחדל, ייבחר אופן סינון <em>בסיסי</em> מאחר והוא אינו דורש הרשאות קריאה ושינוי נתונים. 'סומכים על uBO Lite?' אם כן, ניתן להעניק ל־uBO Lite הרשאות נרחבות לכתיבה ושינוי נתונים בכלול אתרי הרשת על מנת לאפשר יכולות סינון מתקדמות יותר כבררת מחדל.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "מצב סינון ברירת מחדל",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "אופן סינון ברירת המחדל יעקף על ידי אופני סינון יעודיים לכל אתר. ניתן להתאים את אופן הסינון בכל אתר נתון, לאופן הסינון המיטבי באותו אחר. לכול אופן סינון, יתרונות וחסרונות משלו.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "ללא סינון",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "בסיסי",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "מיטבי",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "מלא",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "סינון רשת בסיסי מרשימות סינון נבחרות.\n\nאינו מצריך הרשאת קריאה ושינוי נתונים באתרי רשת.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "סינון רשת מתקדם פלוס, וסינון נרחב ייחודי מרשימות סינון נבחרות.\n\n מצריך הרשאה לקריאה ושינוי נתונים באתרי רשת.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "סינון רשת מתקדם וסינון נרחב ייחודי מרשימות סינון נבחרות.\n\n מצריך הרשאות נרחבות לקריאה ושינוי נתונים בכל אתרי הרשת.\n\nסינון כללי מורחב עלול לגרום לצריכת משאבי רשת מוגברת.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "רשימה של שמות אתרים שלא יתבצע עליהם סינון",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "התנהגות",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "טעינת עמוד באופן אוטומטי עם שינוי מצב סינון",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/hi/messages.json b/platform/mv3/extension/_locales/hi/messages.json
new file mode 100644
index 0000000..89ed004
--- /dev/null
+++ b/platform/mv3/extension/_locales/hi/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "एक प्रयोगात्मक, अनुमति-रहित सामग्री अवरोधक. इंस्टालेशन के तुरंत बाद विज्ञापनों, ट्रैकर्स, माइनर्स और बहुत कुछ को ब्लॉक कर देता है.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{filterCount}} नेटवर्क फ़िल्टर से रूपांतरित, {{ruleCount}} नियम",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — डैशबोर्ड",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "सेटिंग्स",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "परिचय",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "गोपनीयता नीति",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "फ़िल्टरिंग मोड",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "डैशबोर्ड खोलें",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "अधिक",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "कम",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "डिफॉल्ट",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "विज्ञापन",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "गोपनीयता",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "मैलवेयर डोमेन",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "झुंझलाहटें",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "विविध",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "क्षेत्र, भाषाएँ",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "परिवर्तन लॉग",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "सोर्स कोड {GPLv3}",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "योगदानकर्ता",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "सोर्स कोड",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "अनुवाद",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "फिल्टर सूची",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "बाहरी निर्भरता (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "स्वागत",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "आपने अभी-अभी uBO Lite स्थापित किया है. आप यहां सभी वेबसाइटों पर उपयोग करने के लिए डिफ़ॉल्ट फ़िल्टरिंग मोड चुन सकते हैं.\n\nडिफ़ॉल्ट रूप से, <em>बुनियादी</em> मोड चुना जाता है क्योंकि इसमें डेटा को पढ़ने और बदलने की अनुमति की आवश्यकता नहीं होती है. यदि आप uBO Lite पर भरोसा करते हैं, तो आप डिफ़ॉल्ट रूप से सभी वेबसाइटों के लिए अधिक उन्नत फ़िल्टरिंग क्षमताओं को सक्षम करने के लिए सभी वेबसाइटों पर डेटा को पढ़ने और बदलने की व्यापक अनुमति दे सकते हैं.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "डिफ़ॉल्ट फ़िल्टरिंग मोड",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "डिफ़ॉल्ट फ़िल्टरिंग मोड प्रति-वेबसाइट फ़िल्टरिंग मोड द्वारा ओवरराइड किया जाएगा. आप किसी भी वेबसाइट पर फ़िल्टरिंग मोड को उस वेबसाइट पर सबसे अच्छा काम करने वाले मोड के अनुसार समायोजित कर सकते हैं. प्रत्येक मोड के अपने फायदे और नुकसान हैं.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "कोई फ़िल्टर नहीं",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "बुनियादी",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "अनुकूलतम",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "पूर्ण",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "चयनित फ़िल्टर सूचियों में से बुनियादी नेटवर्क फ़िल्टरिंग.\n\nवेबसाइटों पर डेटा पढ़ने और बदलने के लिए अनुमति की आवश्यकता नहीं हौती है.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "चयनित फ़िल्टर सूचियों में से उन्नत नेटवर्क फ़िल्टरिंग के साथ विशिष्ट विस्तारित फ़िल्टरिंग.\n\nसभी वेबसाइटों पर डेटा पढ़ने और बदलने के लिए व्यापक अनुमति की आवश्यकता है.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "चयनित फ़िल्टर सूचियों में से उन्नत नेटवर्क फ़िल्टरिंग के साथ विशिष्ट विस्तारित फ़िल्टरिंग.\n\nसभी वेबसाइटों पर डेटा पढ़ने और बदलने के लिए व्यापक अनुमति की आवश्यकता है.\n\nसामान्य विस्तारित फ़िल्टरिंग के कारण वेबपृष्ठ संसाधनों का अधिक उपयोग हो सकता है.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "होस्टनामों की सूची जिनके लिए कोई फ़िल्टरिंग नहीं होगी",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "व्यवहार",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "फ़िल्टरिंग मोड बदलते समय स्वचालित रूप से पृष्ठ पुनः लोड करें",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/hr/messages.json b/platform/mv3/extension/_locales/hr/messages.json
new file mode 100644
index 0000000..14c9401
--- /dev/null
+++ b/platform/mv3/extension/_locales/hr/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Bloker sadržaja bez dopuštenja. Blokira oglase, oglasne pratitelje, kripto \"rudare\" i ostalo odmah nakon instalacije.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} pravila, pretvoreno iz {{filterCount}} mrežnih filtera",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — nadzorna ploča",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Postavke",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "O aplikaciji",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Pravila privatnosti",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "Način filtriranja",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Otvori nadzornu ploču",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Više",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Manje",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Zadano",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Oglasi",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privatnost",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Zloćudne domene",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Smetnje",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Razno",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regije, jezici",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Popis promjena",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Izvorni kod (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Suradnici",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Izvorni kod",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Prijevodi",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Liste filtera",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Vanjski korišteni programi (GPLv3-kompatiblini):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Dobrodošli",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Upravo ste instalirali uBO Lite. Ovdje možete odabrati zadani način filtriranja za korištenje na svim web stranicama.\n\nPrema zadanim postavkama odabran je način rada <em>Osnovni</em> jer ne zahtijeva dopuštenje za čitanje i promjenu podataka. Ako vjerujete uBO Liteu, možete mu dati široko dopuštenje za čitanje i promjenu podataka na svim web stranicama kako biste prema zadanim postavkama omogućili naprednije mogućnosti filtriranja za sva web mjesta.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Zadani način filtriranja",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Zadani način filtriranja bit će nadjačan načinima filtriranja po web stranici. Možete prilagoditi način filtriranja na bilo kojoj web stranici u skladu s načinom koji najbolje funkcionira na toj web stranici. Svaki način ima svoje prednosti i nedostatke.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "bez filtriranja",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "osnovno",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimalno",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "kompletno",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Osnovno mrežno filtriranje s odabranih popisa filtera.\n\nNe zahtijeva dopuštenje za čitanje i promjenu podataka na web stranicama.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Napredno mrežno filtriranje plus posebno prošireno filtriranje s odabranih popisa filtera.\n\nZahtijeva široko dopuštenje za čitanje i promjenu podataka na svim web stranicama.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Napredno mrežno filtriranje plus specifično i generičko prošireno filtriranje s odabranih popisa filtera.\n\nZahtijeva široko dopuštenje za čitanje i promjenu podataka na svim web stranicama.\n\nGeneričko prošireno filtriranje može uzrokovati veće korištenje resursa web stranice.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Popis naziva hostova za koje se neće izvršiti filtriranje",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Ponašanje",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatski ponovno učitaj stranicu pri promjeni načina filtriranja",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/hu/messages.json b/platform/mv3/extension/_locales/hu/messages.json
new file mode 100644
index 0000000..5fe25d2
--- /dev/null
+++ b/platform/mv3/extension/_locales/hu/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Kísérleti, engedélyt nem igénylő nélküli tartalomblokkoló. A telepítés után azonnal blokkolja a hirdetéseket, nyomkövetőket, bányászokat és egyebeket.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} szabály, {{filterCount}} hálózati szűrőből átalakítva",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Vezérlőpult",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Beállítások",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Névjegy",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Adatvédelmi irányelvek",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "szűrési mód",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Vezérlőpult megnyitása",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Több",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Kevesebb",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Alapértelmezett",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Hirdetések",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Adatvédelem",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domainek",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Bosszúságok",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Egyéb",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Régiók, nyelvek",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Változások listája",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Forráskód (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Közreműködők",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Forráskód",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Fordítások",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Szűrőlisták",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Külső függőségek (GPLv3-kompatibilis):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Üdvözlünk",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Alapértelmezés szerint az <em>Alap</em> mód van kiválasztva, mert nem igényel engedélyt az adatok olvasásához és módosításához. Ha megbízik az uBO Lite-ban, széles körű engedélyt adhat neki az adatok olvasására és módosítására az összes webhelyen, hogy alapértelmezés szerint fejlettebb szűrési lehetőségeket tegyen lehetővé minden webhelyen.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Alapértelmezett szűrő",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Az alapértelmezett szűrési módot a webhelyenkénti szűrési módok felülírják. Bármely webhelyen beállíthatja a szűrési módot aszerint, hogy melyik mód működik a legjobban az adott webhelyen. Mindegyik módnak megvannak a maga előnyei és hátrányai.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "Nincs szűrés",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "alapok",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimális",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "elkészült",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Alapvető hálózati szűrés a kiválasztott szűrőlistákból.\n\nNem igényel engedélyt a webhelyeken található adatok olvasásához és módosításához.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Speciális hálózati szűrés plusz speciális kiterjesztett szűrés a kiválasztott szűrőlistákból.\n\nSzéles körű engedély szükséges az adatok olvasásához és módosításához az összes webhelyen.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Speciális hálózati szűrés, valamint speciális és általános kiterjesztett szűrés a kiválasztott szűrőlistákból.\n\nSzéles körű engedély szükséges az adatok olvasásához és módosításához az összes webhelyen.\n\nAz általános kiterjesztett szűrés nagyobb weboldal-erőforrás-felhasználást eredményezhet.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Azon hosztnevek listája, amelyek esetében nem történik szűrés",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Viselkedés",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Az oldal automatikus újratöltése a szűrési mód megváltoztatásakor",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/hy/messages.json b/platform/mv3/extension/_locales/hy/messages.json
new file mode 100644
index 0000000..50b9b44
--- /dev/null
+++ b/platform/mv3/extension/_locales/hy/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Փորձարարական բովանդակության արգելափակիչ, որը չի պահանջում թույլտվություններ։ Արգելափակում է ազդերը, հետագծիչները, մայներները և շատ ավելին։",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} կանոն, որոնք փոխարկված են {{filterCount}} ցանցային զտիչներից",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Կառավահան",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Կարգավորումներ",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Ընդլայնման մասին",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Գաղտնիության քաղաքականություն",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "զտման ռեժիմ",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Բացել կառավահանը",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Ավելին",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Պակաս",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Լռելյայն",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Գովազդ",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Գաղտնիություն",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Վնասակար տիրույթներ",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Ջղայնացնող տարրեր",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Տարբեր",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Տարածաշրջաններ, լեզուներ",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Փոփոխությունների մատյան",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Աղբյուրի կոդ (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Մասնակիցներ",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Աղբյուրի կոդ",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Թարգմանություն",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Զտիչների ցանկեր",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Արտաքին կախվածություններ (GPLv3-համատեղելի)՝",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Բարի գալուստ",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Դուք հենց նոր տեղադրեցիք uBO Lite-ը։ Այստեղ Դուք կարող եք զտման ստանդարտ ռեժիմ ընտրել բոլոր կայքերի համար։\n\nԼռելյայն կերպով ընտրված է <em>հիմնական</em> ռեժիմը, քանի որ այն չի պահանջում տվյալների ընթերցման և փոփոխման թույլտվություն։ Եթե վստահում եք uBO Lite-ին, կարող եք տալ դրան բոլոր կայքերում տվյալների ընթերցման և փոփոխման լայն իրավունքներ՝ բոլոր կայքերի համար զտման ավելի առաջադեմ հնարավորությունները լռելյայն կերպով միացնելու համար։",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Զտման լռելյայն ռեժիմ",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Զտման լռելյայն ռեժիմը վերասահմանվում է յուրաքանչյուր կայքի զտման ռեժիմներով։ Դուք կարող եք ջոկել ամենաարդյունավետ զտման ռեժիմը ցանկացած կայքում։ Յուրաքանչյուր ռեժիմ ունի իր առավելություններն ու թերությունները։",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "առանց զտման",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "հիմնական",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "գերադասելի",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "ամբողջական",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Ցանցային հիմնական զտում ըստ ընտրված զտիչների ցուցակների։\n\nԿայքերում տվյալները կարդալու և փոփոխելու թույլտվություն չի պահանջում։",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Ընդլայնված ցանցային զտում՝ ընտրված զտիչների ցուցակների համաձայն հատուկ զտման հետ միասին։\n\nՊահանջում է տվյալները բոլոր կայքերում կարդալու և փոփոխելու թույլտվություն։",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Ընդլայնված ցանցային զտում, ինչպես նաև հատուկ և առաջադեմ ընդհանուր զտում ընտրված զտիչների ցանկերի համաձայն։\n\nՊահանջում է բոլոր կայքերում տվյալները կարդալու և փոփոխելու թույլտվություն։\n\nԱռաջադեմ ընդհանուր զտումը կարող է առաջացնել վեբ էջի կողմից ռեսուրսների սպառման ավելացում:",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Հյուրերի անունների ցանկ, որոնց համար զտում չի իրականացվի",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Վարք",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Զտման ռեժիմը փոխելիս ինքնաշխատորեն վերաբեռնել էջը",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/id/messages.json b/platform/mv3/extension/_locales/id/messages.json
new file mode 100644
index 0000000..e3c6f69
--- /dev/null
+++ b/platform/mv3/extension/_locales/id/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Pemblokir konten eksperimental yang cepat dan ringan -- memblokir iklan, pelacak, penambang kripto dan lainnya secara bawaan.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} aturan, dikonversi dari {{filterCount}} filter jaringan",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dasbor",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Pengaturan",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Tentang",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Kebijakan privasi",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "mode filter",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Buka dasbor",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Lainnya",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Lebih sedikit",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Bawaan",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Iklan",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privasi",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Domain malware",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Gangguan",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Lainnya",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Wilayah, bahasa",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Catatan perubahan",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Kode sumber (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Kontributor",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Kode sumber",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Terjemahan",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Daftar filter",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dependensi eksternal (kompatibel GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Selamat datang",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Terima kasih telah memasang uBO Lite. Anda bisa memilih di sini mode filter bawaan untuk digunakan pada semua situs web.\n\nSecara bawaan, mode <em>Dasar</em> akan dipilih karena tidak membutuhkan izin untuk membaca dan mengubah data. Jika Anda mempercayai uBO Lite, Anda bisa memberikan izin tambahan untuk membaca dan mengubah data pada semua situs web untuk mengaktifkan kemampuan filter yang lebih luas untuk semua situs web secara bawaan.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Mode filter bawaan",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Mode filter bawaan akan ditimpa oleh mode filter per-situs web. Anda bisa menyesuaikan mode filter pada setiap situs web dengan mode yang bekerja paling baik pada situs web tersebut. Masing-masing mode memiliki kelebihan dan kekurangan.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "tanpa filter",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "dasar",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "lengkap",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Filter jaringan dasar dari daftar filter yang dipilih.\n\nTidak membutuhkan izin untuk membaca dan mengubah data pada situs web.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Filter jaringan lanjutan ditambah filter spesifik yang diperluas dari daftar filter yang dipilih.\n\nMembutuhkan banyak izin untuk membaca dan mengubah data pada semua situs web.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Filter jaringan lanjutan ditambah filter spesifik dan umum yang diperluas dari daftar filter yang dipilih.\n\nMembutuhkan banyak izin untuk membaca dan mengubah data pada semua situs web.\n\nFilter umum yang diperluas dapat menyebabkan penggunan sumber daya situs web menjadi lebih tinggi.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Perilaku",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Otomatis memuat ulang halaman web saat mengubah mode filter",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/it/messages.json b/platform/mv3/extension/_locales/it/messages.json
new file mode 100644
index 0000000..04c500e
--- /dev/null
+++ b/platform/mv3/extension/_locales/it/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Un blocco sperimentale che non richiede permessi. Blocca pubblicità, tracker, cryptominer e altro ancora.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} regole, convertite da {{filterCount}} filtri di rete",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Cruscotto",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Opzioni",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Informazioni",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Informativa sulla privacy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "Modalità di filtraggio",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Accedi al cruscotto",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Altro",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Nascondi",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Predefinite",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Pubblicità",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Domini che diffondono virus",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Scocciature",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Generici",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Lingue e regioni",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Registro delle modifiche",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Codice sorgente (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Collaboratori",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Codice sorgente",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Traduzioni",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Elenco filtri",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dipendenze esterne (in linea con la GPL v3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Ciao",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Hai installato uBO Lite. Scegli il filtro predefinito da usare ovunque.\n\nL'impostazione di fabbrica prevede la modalità <em>Basilare</em> che non richiede alcun tipo di autorizzazione. Puoi decidere di attivare il filtro avanzato se vuoi concedere a uBO Lite l'autorizzazione a rielaborare i dati di tutti i siti web che visiti, in modo da avere un sistema di filtraggio con altre funzioni in più.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Filtro predefinito",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Il filtraggio predefinito può essere sostituito dal filtraggio personalizzato. Puoi regolare il filtraggio per ogni singolo sito web al fine di ottenere il risultato migliore. Ognuno dei filtraggi presenta vantaggi e svantaggi.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "nessun filtraggio",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "di base",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "ottimale",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "completo",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Filtro di rete basilare basato su un elenco selezionato di filtri.\n\nNon servono autorizzazioni per rielaborare i dati dei siti web.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Filtro di rete avanzato in aggiunta al filtro avanzato basato su un elenco selezionato di filtri.\n\nRichiede delle autorizzazioni specifiche per rielaborare i dati dei siti web.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Filtro avanzato di rete in aggiunta al filtro esteso basato su un elenco selezionato di filtri.\n\nRichiede autorizzazioni estese per leggere e modificare i dati da ogni sito web.\n\nIl filtro esteso richiede più memoria e un maggiore impegno del processore.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Elenco degli host per i quali non viene effettuato nessun filtraggio",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Comportamento",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Ricarica la pagina quando scegli un altro metodo di filtraggio",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/ja/messages.json b/platform/mv3/extension/_locales/ja/messages.json
new file mode 100644
index 0000000..fe679dc
--- /dev/null
+++ b/platform/mv3/extension/_locales/ja/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "実験的で要求権限の少ないコンテンツブロッカー - 広告・トラッカー・マイニングスクリプトなどをブロック",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} 件のルール ({{filterCount}} 件のネットワークフィルターから変換)",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — ダッシュボード",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "設定",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "uBO Lite について",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "プライバシーポリシー",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "フィルタリングモード",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "ダッシュボードを開く",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "さらに表示",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "折りたたむ",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "既定",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "広告",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "プライバシー",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "マルウェアドメイン",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "迷惑系",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "その他",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "地域・言語",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "更新履歴",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "ソースコード (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "貢献者",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "ソースコード",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "翻訳",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "フィルターリスト",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "外部依存関係 (GPLv3 と両立):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "ようこそ",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "uBO Lite のインストールが完了しました。すべてのサイトに適用するデフォルトのフィルタリングモードを選んでください。\n\nデフォルトでは、データの読み書きの権限が必要ない<em>基本</em>モードが選択されています。 uBO Lite を信用してもらえるなら、データの読み書きや変更の権限を許可してもらえればすべてのサイトに対してより詳細なフィルタリングを有効化できます。",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "デフォルトのフィルタリングモード",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "デフォルトのフィルタリングモードは、サイト毎のフィルタリングモードで上書きされます。サイトにぴったりなモードにいつでも好きなように調整できます。どのモードも一長一短です。",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "フィルタリングなし",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "基本",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "最適",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "完全",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "特定のフィルターリストを使った基本ネットワークフィルタリングです。\n\nウェブサイトのデータの読み書き権限を必要としません。",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "特定のフィルターリストを使ったネットワークフィルタリングとサイト別の拡張フィルタリングです。\n\nすべてのウェブサイトのデータの読み書き権限を必要とします。",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "特定のフィルターリストを使ったネットワークフィルタリングと一般的・サイト別の拡張フィルタリングです。\n\nすべてのウェブサイトのデータの読み書き権限を必要とします。\n\n一般的な拡張フィルタリングを使うとリソース消費量が増えるかもしれません。",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "フィルタリングを行わないホスト名のリスト",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "動作",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "フィルタリングモード変更時にページを自動再読み込みする",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/ka/messages.json b/platform/mv3/extension/_locales/ka/messages.json
new file mode 100644
index 0000000..298a736
--- /dev/null
+++ b/platform/mv3/extension/_locales/ka/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "საცდელი, ნებართვებისგან თავისუფალი მსუბუქი შემზღუდავი -- თავისთავად აცილებს რეკლამებს, მეთვალყურეებს, კრიპტოგამომმუშავებლებს და ა.შ.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} წესი, შედგენილი {{filterCount}} ქსელის ფილტრიდან",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — მაჩვენებლები",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "პარამეტრები",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "შესახებ",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "პირადულობის დებულება",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "გაფილტვრის რეჟიმი",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "სამართავის გახსნა",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "ვრცლად",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "მოკლედ",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "ნაგულისხმევი",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "რეკლამები",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "პირადულობა",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "მავნე დომენები",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "შემაწუხებელი შიგთავსი",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "სხვადასხვა",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "მხარეები, ენები",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "ცვლილებები",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "წყაროს კოდი (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "მოხალისეები",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "პირველწყარო კოდი",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "თარგმანები",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "ფილტრების სიები",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "ცალკეული დაქვემდებარებული პროექტები (GPLv3-თან თავსებადი):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "მოგესალმებით",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "თქვენ ახლახან დააყენეთ uBO Lite. აქვე შეგიძლიათ აირჩიოთ ფილტრაციის ნაგულისხმევი რეჟიმი ყველა საიტზე გამოსაყენებლად.\n\nნაგულისხმევად <em>ძირითადი</em> რეჟიმია შერჩეული, ვინაიდან არ საჭიროებს მონაცემთა წაკითხვისა და ცვლილების ნებართვებს. თუ თქვენთვის სანდოა uBO Lite, შეგიძლიათ დართოთ მონაცემთა წაკითხვისა და შეცვლის ნება ყველა საიტზე გაუმჯობესებული ფილტრაციის ნაგულისხმევად გამოყენებისთვის.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "გაფილტვრის ნაგულისხმევი რეჟიმი",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "ფილტრაციის ნაგულისხმევი რეჟიმი ჩაანაცვლებს ცალკეულ საიტზე მითითებულს. ფილტრაციის რეჟიმის მორგება შეგიძლიათ ნებისმიერ სასურველ საიტზე იმისდა მიხედვით, რა უფრო გამოსადეგი იქნება თქვენთვის იმ საიტზე. თითოეულ რეჟიმს თავისი დადებითი და უარყოფითი მხარეები აქვს.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "ფილტრის გარეშე",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "ძირითადი",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "წონასწორული",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "სრული",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "ქსელის ძირითადი ფილტრაცია შერჩეული სიებით.\n\nარ საჭიროებს საიტებზე მონაცემთა წაკითხვისა და ცვლილების ნებართვებს.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "ქსელის გაუმჯობესებულ ფილტრაციასთან ერთად გაფართოებული ფილტრები შერჩეული სიებიდან.\n\nსაჭიროებს ყველა საიტზე მონაცემთა სრულად წაკითხვისა და შეცვლის ნებართვას.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "ქსელის გაუმჯობესებულ ფილტრაციასთან ერთად საერთო გაფართოებული ფილტრები შერჩეული სიებიდან.\n\nსაჭიროებს ყველა საიტზე მონაცემთა სრულად წაკითხვისა და შეცვლის ნებართვას.\n\nგაფართოებული ფილტრაცია ზოგჯერ ზედმეტად ზრდის დატვირთვას ვებგვერდის მონახულებისას.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "სია მისამართებისა, რომლებზეც ფილტრები არ იმოქმედებს",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "მოქმედება",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "გვერდის ავტომატური განახლება ფილტრაციის რეჟიმის შეცვლისას",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/kk/messages.json b/platform/mv3/extension/_locales/kk/messages.json
new file mode 100644
index 0000000..627857e
--- /dev/null
+++ b/platform/mv3/extension/_locales/kk/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Settings",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "About",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Default",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscellaneous",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/kn/messages.json b/platform/mv3/extension/_locales/kn/messages.json
new file mode 100644
index 0000000..627857e
--- /dev/null
+++ b/platform/mv3/extension/_locales/kn/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Settings",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "About",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Default",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscellaneous",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/ko/messages.json b/platform/mv3/extension/_locales/ko/messages.json
new file mode 100644
index 0000000..5942fce
--- /dev/null
+++ b/platform/mv3/extension/_locales/ko/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "실험적이고 권한이 적은 콘텐츠 차단기. 광고, 추적기, 채굴기 등을 설치 직후 차단합니다.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "네트워크 필터 {{filterCount}}개로부터 변환된 규칙 {{ruleCount}}개",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — 대시보드",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "설정",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "정보",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "개인정보취급방침",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "필터링 모드",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "대시보드 열기",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "자세히",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "간단히",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "기본값",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "광고",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "개인 정보 보호",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "멀웨어 도메인",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "방해 요소",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "기타",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "지역, 언어",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "변경 로그",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "소스 코드 (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "기여자들",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "소스 코드",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "번역",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "필터 리스트",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "외부 의존성 (GPLv3 호환):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "환영합니다",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "uBO Lite를 설치하셨습니다. 모든 웹사이트에 적용할 기본 필터링 모드를 선택해주세요.\n\n데이터를 읽고 변경하는 권한이 필요 없는 <em>기본</em> 모드가 기본 설정입니다. uBO Lite를 신뢰하신다면, 모든 웹사이트에서 데이터를 읽고 변경하는 권한을 부여해서 모든 웹사이트에 대해 고급 필터링 기능을 기본적으로 켤 수 있습니다.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "기본 필터링 모드",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "웹사이트별 필터링 모드가 있다면 기본 필터링 모드를 덮어씁니다. 각 웹사이트에서 가장 잘 작동하는 필터링 모드로 조정할 수 있습니다. 각 모드에는 장단점이 있습니다.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "필터링 없음",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "기본",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "최적",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "완전",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "선택한 필터 목록을 바탕으로 기본적인 네트워크 필터링을 수행합니다.\n\n웹사이트의 데이터를 읽고 수정하는 권한이 필요하지 않습니다.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "고급 네트워크 필터링과 선택한 필터 목록을 바탕으로 특정한 확장 필터링을 수행합니다.\n\n모든 웹사이트에서 데이터를 읽고 쓸 수 있도록 하는 광범위한 권한이 필요합니다.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "고급 네트워크 필터링과 선택한 필터 목록을 바탕으로 특정한 확장 필터링 및 보편적인 확장 필터링을 수행합니다.\n\n모든 웹사이트에서 데이터를 읽고 쓸 수 있도록 하는 광범위한 권한이 필요합니다.\n\n보편적인 확장 필터링 기능을 이용하는 경우 웹페이지의 리소스 사용량이 증가할 수 있습니다.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "필터링을 비활성화할 호스트 이름 목록",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "동작",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "필터링 모드를 변경할 때 페이지 자동 새로고침",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/lt/messages.json b/platform/mv3/extension/_locales/lt/messages.json
new file mode 100644
index 0000000..0377c08
--- /dev/null
+++ b/platform/mv3/extension/_locales/lt/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Skydelis",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Nustatymai",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Apie",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privatumo politika",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Daugiau",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Mažiau",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Default",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Reklamos",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privatumas",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscellaneous",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regionai, kalbos",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Pakeitimų žurnalas",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Programinis kodas",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Vertimai",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filtrų sąrašai",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Išorinės priklausomybės (suderinamos su „GPLv3“):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatiškai perkrauti sveitane keičiant filtro rėžimą",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/lv/messages.json b/platform/mv3/extension/_locales/lv/messages.json
new file mode 100644
index 0000000..bea58f2
--- /dev/null
+++ b/platform/mv3/extension/_locales/lv/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Izmēģinājuma, bezatļauju satura aizturētājs. Aiztur reklāmas, izsekotājus, kriptoracējus un vēl uzreiz pēc uzstādīšanas.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} nosacījumi, pārveidoti no {{filterCount}} tīkla aizturētājiem",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — infopanelis",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Iestatījumi",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Par",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privātuma nosacījumi",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "aizturēšanas veids",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Atvērt vadības paneli",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Vairāk",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Mazāk",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Noklusējums",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Reklāmas",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privātums",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Ļaunatūras domēni",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Traucējumi",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Dažādi",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Apgabali, valodas",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Izmaiņu žurnāls",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Pirmkods (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Līdzdalībnieki",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Pirmkods",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Tulkojumi",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Aizturēšanas saraksti",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Ārējās atkarības (GPLv3 saderīgas):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Sveicināti!",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Tikko ir uzstādīts uBO Lite. Šeit var izvēlēties noklusējuma aizturēšanas veidu, ko izmantot visām tīmekļa vietnēm.\n\nPēc noklusējuma ir atlasīts <em>Pamata</em>, jo tam nav nepieciešama atļauja lasīt un mainīt datus. Ja uBO Lite šķiet uzticams, ir iespējams piešķirt plašas atļaujas lasīt un mainīt datus visās tīmekļa vietnēs, lai pēc noklusējuma iespējotu pilnīgākas aizturēšanas spējas visās tīmekļa vietnēs.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Noklusējuma aizturēšanas veids",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Tīmekļa vietnes aizturēšanas veidi pārrakstīs noklusējumu. Katrā tīmekļa vietnē ir iespēja pielāgot aizturēšanu, vadoties pēc tā, kurš no veidiem vislabāk darbojas tieši tajā lapā. Katram veidam ir savas priekšrocības un trūkumi.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "bez aizturēšanas",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "pamata",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "labākais",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "pilnīgais",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Pamata tīkla aizturēšana, izmantojot atlasītos aizturēšanas sarakstus.\n\nNav nepieciešama atļauja lasīt un mainīt datus tīmekļa vietnēs.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Attīstītāka tīkla aizturēšana ar atsevišķu paplašinātu aizturēšanu, izmantojot atlasītos aizturēšanas sarakstus.\n\nNepieciešamas plašas atļaujas lasīt un mainīt visu tīmekļa vietņu datus.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Attīstītāka tīkla aizturēšana ar pamata un papildu paplašinātu aizturēšanu, izmantojot atlasītos aizturēšanas sarakstus.\n\nNepieciešamas plašas atļaujas lasīt un mainīt visu tīmekļa vietņu datus.\n\nPamata paplašinātā aizturēšana var izraisīt paaugstinātu tīmekļa vietnes resursu izmantošanu.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Saraksts ar saimniekdatoru nosaukumiem, kuriem netiks pielietota aizturēšana",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Uzvedība",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Pārlādēt lapu pēc aizturēšanas veida nomaiņas.",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/mk/messages.json b/platform/mv3/extension/_locales/mk/messages.json
new file mode 100644
index 0000000..0ef10c7
--- /dev/null
+++ b/platform/mv3/extension/_locales/mk/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} правила, добиени од {{filterCount}} мрежните филтри",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Контролна плоча",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Прилагодби",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Информации за...",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Заштита на личните податоци",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "Начини на прочистување",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Отварање на Контролна Табла",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Повеќе",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Почетни прилагодби",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Рекламни огласи",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Приватност",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Разно",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Региони, Јазици",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/ml/messages.json b/platform/mv3/extension/_locales/ml/messages.json
new file mode 100644
index 0000000..d272672
--- /dev/null
+++ b/platform/mv3/extension/_locales/ml/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "അനുമതി-കുറവ് ഉള്ളടക്ക ബ്ലോക്കർ. പരസ്യങ്ങൾ, ട്രാക്കറുകൾ, ക്രിപ്‌റ്റോ-മൈനർ എന്നിവയും മറ്റും ഇൻസ്റ്റാളുചെയ്യുമ്പോൾ ഉടനടി തടയുന്നു.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} നിയമങ്ങൾ, {{filterCount}} നെറ്റ്‌വർക്ക് ഫിൽട്ടറുകളിൽ നിന്ന് പരിവർത്തനം ചെയ്‌തു",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO ലൈറ്റ് - ഡാഷ്ബോർഡ്",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "ക്രമീകരണങ്ങൾ",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "കുറിച്ച്",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "സ്വകാര്യതാ നയം",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "ഫിൽട്ടറിംഗ് മോഡ്",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "ഡാഷ്ബോർഡ് തുറക്കുക",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "കൂടുതൽ",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "കുറവ്",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "സ്ഥിരസ്ഥിതി",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "പരസ്യങ്ങള്‍",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "പ്രൈവസി",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "ശല്യപ്പെടുത്തലുകൾ",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "പലവക ",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "പ്രാദേശികം, ഭാഷകള്‍",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "ചേഞ്ച് ലോഗ്",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "സോര്‍സ് കോഡ് (ജിപിഎല്‍ വി3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "സോഴ്സ് കോഡ്",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "ഫിൽട്ടർ ലിസ്റ്റ്",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "ബാഹ്യ ഡിപൻഡൻസികൾ (ജിപിൽവി3-അനുയോജ്യമായത്):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "സ്വാഗതം",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "നിങ്ങൾ ഇപ്പോൾ uBO Lite ഇൻസ്റ്റാൾ ചെയ്തു. എല്ലാ വെബ്‌സൈറ്റുകളിലും ഉപയോഗിക്കുന്നതിന് ഇവിടെ നിങ്ങൾക്ക് ഡിഫോൾട്ട് ഫിൽട്ടറിംഗ് മോഡ് തിരഞ്ഞെടുക്കാം.\n\nസ്ഥിരസ്ഥിതിയായി, <em>അടിസ്ഥാന</em> മോഡ് തിരഞ്ഞെടുത്തു, കാരണം ഡാറ്റ വായിക്കാനും പരിഷ്ക്കരിക്കാനും അനുമതി ആവശ്യമില്ല. നിങ്ങൾ uBO Lite-നെ വിശ്വസിക്കുന്നുവെങ്കിൽ, ഡിഫോൾട്ടായി എല്ലാ വെബ്‌സൈറ്റുകൾക്കും കൂടുതൽ വിപുലമായ ഫിൽട്ടറിംഗ് കഴിവുകൾ പ്രാപ്‌തമാക്കുന്നതിന് എല്ലാ വെബ്‌സൈറ്റുകളിലെയും ഡാറ്റ വായിക്കാനും പരിഷ്‌ക്കരിക്കാനും നിങ്ങൾക്ക് വിശാലമായ അനുമതി നൽകാം.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "ഡിഫോൾട്ട് ഫിൽട്ടറിംഗ് മോഡ്",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "ഓരോ വെബ്‌സൈറ്റിലും ഫിൽട്ടറിംഗ് മോഡുകൾ ഉപയോഗിച്ച് ഡിഫോൾട്ട് ഫിൽട്ടറിംഗ് മോഡ് അസാധുവാക്കപ്പെടും. ഏത് വെബ്‌സൈറ്റിൽ ഏറ്റവും മികച്ച രീതിയിൽ പ്രവർത്തിക്കുന്ന മോഡ് അനുസരിച്ച് നിങ്ങൾക്ക് ഏത് വെബ്‌സൈറ്റിലും ഫിൽട്ടറിംഗ് മോഡ് ക്രമീകരിക്കാൻ കഴിയും. ഓരോ മോഡിനും അതിന്റെ ഗുണങ്ങളും ദോഷങ്ങളുമുണ്ട്.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "ഫിൽട്ടറിംഗ് ഇല്ല",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "അടിസ്ഥാനം",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "ഒപ്റ്റിമൽ",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "പൂർണ്ണമായ",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "തിരഞ്ഞെടുത്ത ഫിൽട്ടർ ലിസ്റ്റുകളിൽ നിന്നുള്ള അടിസ്ഥാന നെറ്റ്‌വർക്ക് ഫിൽട്ടറിംഗ്.\n\nവെബ്‌സൈറ്റുകളിലെ ഡാറ്റ വായിക്കാനും പരിഷ്‌ക്കരിക്കാനും അനുമതി ആവശ്യമില്ല.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "തിരഞ്ഞെടുത്ത ഫിൽട്ടർ ലിസ്റ്റുകളിൽ നിന്നുള്ള വിപുലമായ നെറ്റ്‌വർക്ക് ഫിൽട്ടറിംഗും പ്രത്യേക വിപുലീകൃത ഫിൽട്ടറിംഗും.\n\nഎല്ലാ വെബ്‌സൈറ്റുകളിലെയും ഡാറ്റ വായിക്കാനും പരിഷ്‌ക്കരിക്കാനും വിശാലമായ അനുമതി ആവശ്യമാണ്.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "തിരഞ്ഞെടുത്ത ഫിൽട്ടർ ലിസ്റ്റുകളിൽ നിന്നുള്ള വിപുലമായ നെറ്റ്‌വർക്ക് ഫിൽട്ടറിംഗും നിർദ്ദിഷ്ടവും പൊതുവായതുമായ വിപുലീകൃത ഫിൽട്ടറിംഗും.\n\nഎല്ലാ വെബ്‌സൈറ്റുകളിലെയും ഡാറ്റ വായിക്കാനും പരിഷ്‌ക്കരിക്കാനും വിശാലമായ അനുമതി ആവശ്യമാണ്.\n\nപൊതുവായ വിപുലീകൃത ഫിൽട്ടറിംഗ് ഉയർന്ന വെബ്‌പേജ് ഉറവിട ഉപയോഗത്തിന് കാരണമായേക്കാം.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "ഫിൽട്ടറിംഗ് നടക്കാത്ത ഹോസ്റ്റ് നെയിമുകളുടെ ലിസ്റ്റ്",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "പെരുമാറ്റം",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "ഫിൽട്ടറിംഗ് മോഡ് മാറ്റുമ്പോൾ പേജ് സ്വയമേവ റീലോഡ് ചെയ്യുക",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/mr/messages.json b/platform/mv3/extension/_locales/mr/messages.json
new file mode 100644
index 0000000..627857e
--- /dev/null
+++ b/platform/mv3/extension/_locales/mr/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Settings",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "About",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Default",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscellaneous",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/ms/messages.json b/platform/mv3/extension/_locales/ms/messages.json
new file mode 100644
index 0000000..2128e9b
--- /dev/null
+++ b/platform/mv3/extension/_locales/ms/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Tetapan",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Mengenai",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Dasar privasi",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Lagi",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Kurangkan",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Lalai",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Iklan",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privasi",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Pelbagai",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Wilayah, bahasa",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Log perubahan",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Kod sumber (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Penyumbang",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Kod sumber",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Terjemahan",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Senarai penapis",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Pergantungan luaran (serasi dengan GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Selamat datang",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": " tiada penapisan",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "asas",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optima",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "selesai",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Tingkah laku",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/nb/messages.json b/platform/mv3/extension/_locales/nb/messages.json
new file mode 100644
index 0000000..5c47f65
--- /dev/null
+++ b/platform/mv3/extension/_locales/nb/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "En tillatelsesbegrenset innholdsblokkerer. Blokkerer reklame, sporere, minere og mer umiddelbart etter installering.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} regler, konvertert fra {{filterCount}} nettverksfiltre",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashbord",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Innstillinger",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Om",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Personvernpraksis",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtreringsmodus",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Åpne dashbordet",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Mer",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Mindre",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Standard",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Reklame",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Personvern",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Domener med skadelig programvare",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Irritasjonsmomenter",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Diverse",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regioner, språk",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Endringslogg",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Kildekode (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Bidragsytere",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Kildekode",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Oversettelser",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filterlister",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Eksterne avhengigheter (GPLv3-kompatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Velkommen",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Du har nettopp installert uBO Lite. Her kan du velge standard-filtreringsmodusen som skal brukes på alle nettsteder.\n\nSom standard er modusen <em>Grunnleggende</em> valgt fordi den ikke krever tillatelse til å lese og endre data. Hvis du stoler på uBO Lite, kan du gi uBO Lite bred tillatelse til å lese og endre data på alle nettsteder for å aktivere mer avanserte filtreringsfunksjoner for alle nettsteder som standard.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Standard filtreringsmodus",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Standard-filtreringsmodusen vil bli overstyrt av per-nettsted filtreringsmoduser. Du kan justere filtreringsmodusen på ethvert gitt nettsted etter hvilken modus som virker best på det nettstedet. Hver modus har sine fordeler og ulemper.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "ingen filtrering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "grunnleggende",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "fullstendig",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Grunnleggende nettverksfiltrering fra valgte filterlister.\n\nKrever ikke tillatelse til å lese og endre data på nettsteder.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Avansert nettverksfiltrering pluss spesifikk utvidet filtrering fra valgte filterlister.\n\nKrever bred tillatelse til å lese og endre data på alle nettsteder.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Avansert nettverksfiltrering pluss spesifikk og generell utvidet filtrering fra valgte filterlister.\n\nKrever bred tillatelse til å lese og endre data på alle nettsteder.\n\nGenerell utvidet filtrering kan forårsake høyere ressursbruk på nettsider.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Liste over vertsnavn der ingen filtrering vil finne sted",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Virkemåte",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatisk last side på nytt ved endring av filtreringsmodus",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/nl/messages.json b/platform/mv3/extension/_locales/nl/messages.json
new file mode 100644
index 0000000..b83eeae
--- /dev/null
+++ b/platform/mv3/extension/_locales/nl/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Een toestemmingsloze inhoudsblokkeerder. Blokkeert direct na installatie advertenties, trackers, miners en meer.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} regels, geconverteerd uit {{filterCount}} netwerkfilters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite – Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Instellingen",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Over",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacybeleid",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtermodus",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Dashboard openen",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Meer",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Minder",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Standaard",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Advertenties",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malwaredomeinen",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Storende elementen",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Diversen",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Gebieden, talen",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Wijzigingenlogboek",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Broncode (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Medewerkers",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Broncode",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Vertalingen",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filterlijsten",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Externe afhankelijkheden (GPLv3-compatibel):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welkom",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "U hebt zojuist uBO Lite geïnstalleerd. Hier kunt u de standaard filtermodus voor het gebruik op alle websites kiezen.\n\nStandaard wordt de modus <em>Basis</em> geselecteerd, omdat hiervoor geen toestemming voor het lezen en aanpassen van gegevens is vereist. Als u uBO Lite vertrouwt, kunt u het brede toestemming voor het lezen en aanpassen van gegevens op alle websites verlenen, zodat standaard meer geavanceerde filtermogelijkheden voor alle websites beschikbaar zijn.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Standaard filtermodus",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Filtermodi per website hebben voorrang op de standaard filtermodus. U kunt de filtermodus op een gewenste website aanpassen naar de modus die op die website het beste werkt. Elke modus heeft zijn voor- en nadelen.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "geen filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basis",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimaal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "volledig",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basale netwerkfiltering vanuit geselecteerde filterlijsten.\n\nVereist geen toestemming voor het lezen en aanpassen van gegevens op websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Geavanceerde netwerkfiltering plus specifieke uitgebreide filtering vanuit geselecteerde filterlijsten.\n\nVereist brede toestemming voor het lezen en aanpassen van gegevens op alle websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Geavanceerde netwerkfiltering plus specifieke en algemene uitgebreide filtering vanuit geselecteerde filterlijsten.\n\nVereist brede toestemming voor het lezen en aanpassen van gegevens op alle websites.\n\nAlgemene uitgebreide filtering kan een hoger gebruik van webpaginabronnen veroorzaken.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Lijst van hostnamen waarvoor geen filtering plaatsvindt.",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Gedrag",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Pagina automatisch vernieuwen bij wijzigen van filtermodus",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/oc/messages.json b/platform/mv3/extension/_locales/oc/messages.json
new file mode 100644
index 0000000..627857e
--- /dev/null
+++ b/platform/mv3/extension/_locales/oc/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Settings",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "About",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Default",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscellaneous",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/pa/messages.json b/platform/mv3/extension/_locales/pa/messages.json
new file mode 100644
index 0000000..753c355
--- /dev/null
+++ b/platform/mv3/extension/_locales/pa/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "ਮਨਜ਼ੂਰੀਆਂ ਤੋਂ ਬਿਨਾਂ ਵਾਲਾ ਸਮੱਗਰੀ ਬਲਾਕਰ ਹੈ। ਇਸ਼ਤਿਹਾਰ, ਟਰੈਕਰਾਂ, ਮਾਈਨਰਾਂ ਅਤੇ ਹੋਰਾਂ ਉੱਤੇ ਇੰਸਟਾਲ ਕਰਨ ਤੋਂ ਫ਼ੌਰਨ ਬਾਅਦ ਪਾਬੰਦੀ ਲਾਉਂਦਾ ਹੈ।",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} ਨਿਯਮ, {{filterCount}} ਨੈੱਟਵਰਕ ਫਿਲਟਰ ਤੋਂ ਬਦਲੇ ਗਏ",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — ਡੈਸ਼ਬੋਰਡ",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "ਸੈਟਿੰਗਾਂ",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "ਇਸ ਬਾਰੇ",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "ਪਰਦੇਦਾਰੀ ਨੀਤੀ",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "ਫਿਲਟਰ ਕਰਨ ਦਾ ਮੋਡ",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "ਡੈਸ਼ਬੋਰਡ ਨੂੰ ਖੋਲ੍ਹੋ",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "ਹੋਰ",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "ਘੱਟ",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "ਮੂਲ",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "ਇਸ਼ਤਿਹਾਰ",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "ਪਰਦੇਦਾਰੀ",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "ਅਣਚਾਹੇ",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "ਫੁਟਕਲ",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "ਖੇਤਰ, ਭਾਸ਼ਾਵਾਂ",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "ਤਬਦੀਲੀ-ਸੂਚੀ",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "ਸਰੋਤ ਕੋਡ (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "ਯੋਗਦਾਨੀ",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "ਸਰੋਤ ਕੋਡ",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "ਅਨੁਵਾਦ",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "ਫਿਲਟਰ ਸੂਚੀਆਂ",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "ਬਾਹਰੀ ਨਿਰਭਰਤਾਵਾਂ (GPLv3-ਅਨੁਕੂਲ):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "ਜੀ ਆਇਆਂ ਨੂੰ",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "ਤੁਸੀਂ ਹੁਣੇ ਹੀ uBO Lite ਨੂੰ ਇੰਸਟਾਲ ਕੀਤਾ ਹੈ। ਤੁਸੀਂ ਸਾਰੀਆਂ ਵੈੱਬਸਾਈਟਾਂ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਮੂਲ ਫਿਲਟਰ ਕਰਨ ਦੇ ਢੰਗ ਨੂੰ ਚੁਣ ਸਕਦੇ ਹੋ।\n\nਮੂਲ ਰੂਪ ਵਿੱਚ <em>ਮੁੱਢਲਾ (Basic)</em> ਢੰਗ ਚੁਣਿਆ ਜਾਂਦਾ ਹੈ, ਕਿਉਂਕਿ ਇਸ ਵਾਸਤੇ ਡਾਟਾ ਪੜ੍ਹਨ ਅਤੇ ਸੋਧਣ ਲਈ ਕਿਸੇ ਵੀ ਮਨਜ਼ੂਰੀ ਦੀ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ ਹੈ। ਜੇ ਤੁਹਾਨੂੰ uBO Lite ਉੱਤੇ ਭਰੋਸਾ ਹੋਵੇ ਤਾਂ ਤੁਸੀਂ ਇਸ ਨੂੰ ਸਾਰੀਆਂ ਵੈੱਬਸਾਈਟਾਂ ਉੱਤੇ ਮੂਲ ਰੂਪ ਵਿੱਚ ਹੀ ਵੱਧ ਤਕਨੀਕੀ ਫਿਲਟਰ ਸਮਰੱਥਾ ਨੂੰ ਚਾਲੂ ਕਰਨ ਲਈ ਸਭ ਵੈੱਬਸਾਈਟਾਂ ਉੱਤੇ ਡਾਟਾ ਪੜ੍ਹਨ ਅਤੇ ਸੋਧਣ ਲਈ ਜਿਆਦਾ ਮਨਜ਼ੂਰੀ ਦੇ ਸਕਦੇ ਹੋ।",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "ਮੂਲ ਫਿਲਟਰ ਕਰਨ ਦਾ ਢੰਗ",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "ਮੂਲ ਫਿਲਟਰਿੰਗ ਢੰਗ ਨੂੰ ਹਰ-ਵੈੱਬਸਾਈਟ ਫਿਲਟਰਿੰਗ ਢੰਗਾਂ ਰਾਹੀਂ ਅਣਡਿੱਠਾ ਕੀਤਾ ਜਾਵੇਗਾ। ਤੁਸੀਂ ਕਿਸੇ ਵੀ ਵੈੱਬਸਾਈਟ ਲਈ ਫਿਲਟਰ ਕਰਨ ਦੇ ਢੰਗ ਨੂੰ ਉਸ ਵੈੱਬਸਾਈਟ ਲਈ ਸਭ ਤੋਂ ਵਧੀਆ ਕੰਮ ਕਰਦੇ ਢੰਗ ਮੁਤਾਬਕ ਅਡਜੱਸਟ ਕਰ ਸਕਦੇ ਹੋ। ਹਰ ਢੰਗ ਦੇ ਆਪਣੇ ਫਾਇਦੇ ਅਤੇ ਆਪਣੇ ਨੁਕਸਾਨ ਹਨ।",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "ਕੋਈ ਫਿਲਟਰ ਨਹੀਂ ਕਰਨਾ",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "ਮੁੱਢਲਾ",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "ਅਨੁਕੂਲ",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "ਪੂਰਾ",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "ਚੁਣੀਆਂ ਫਿਲਟਰ ਸੂਚੀਆਂ ਤੋਂ ਮੁੱਢਲਾ ਨੈੱਟਵਰਕ ਫਿਲਟਰ ਕਰਨਾ।\n\nਵੈੱਬਸਾਈਟਾਂ ਤੋਂ ਡਾਟਾ ਪੜ੍ਹਨ ਅਤੇ ਸੋਧਣ ਲਈ ਮਨਜ਼ੂਰੀ ਨਹੀਂ ਚਾਹੀਦੀ ਹੈ।",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "ਤਕਨੀਕੀ ਨੈੱਟਵਰਕ ਫਿਲਟਰ ਕਰਨ ਤੋਂ ਨਾਲ ਨਾਲ ਚੁਣੀਆਂ ਫਿਲਟਰ ਸੂਚੀਆਂ ਤੋਂ ਖਾਸ ਵਾਧਾ ਕੀਤੇ ਫਿਲਟਰ।\n\nਸਾਰੀਆਂ ਵੈੱਬਸਾਈਟਾਂ ਲਈ ਡਾਟਾ ਪੜ੍ਹਨ ਅਤੇ ਸੋਧਣ ਲਈ ਜਿਆਦਾ ਮਨਜ਼ੂਰੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ।",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "ਤਕਨੀਕੀ ਨੈੱਟਵਰਕ ਫਿਲਟਰ ਕਰਨ ਤੋਂ ਨਾਲ ਨਾਲ ਚੁਣੀਆਂ ਫਿਲਟਰ ਸੂਚੀਆਂ ਤੋਂ ਖਾਸ ਵਾਧਾ ਕੀਤੇ ਫਿਲਟਰ।\n\nਸਾਰੀਆਂ ਵੈੱਬਸਾਈਟਾਂ ਲਈ ਡਾਟਾ ਪੜ੍ਹਨ ਅਤੇ ਸੋਧਣ ਲਈ ਜਿਆਦਾ ਮਨਜ਼ੂਰੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ।\n\nਆਮ ਵਾਧਾ ਕੀਤੀ ਫਿਲਟਰਿੰਗ ਵੱਧ ਵੈੱਬ-ਸਫ਼ਾ ਸਰੋਤ ਵਰਤੇ ਜਾਣ ਦਾ ਕਾਰਨ ਬਣ ਸਕਦੀ ਹੈ।",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "ਹੋਸਟ-ਨਾਵਾਂ ਦੀ ਸੂਚੀ, ਜਿਨ੍ਹਾਂ ਲਈ ਕੋਈ ਫਿਲਟਰ ਨਹੀਂ ਕੀਤਾ ਜਾਵੇਗਾ",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "ਰਵੱਈਆ",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "ਫਿਲਫਰ ਕਰਨ ਦਾ ਢੰਗ ਬਦਲਣ ਦੇ ਬਾਅਦ ਸਫ਼ੇ ਨੂੰ ਆਪਣੇ-ਆਪ ਲੋਡ ਕਰੋ",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/pl/messages.json b/platform/mv3/extension/_locales/pl/messages.json
new file mode 100644
index 0000000..07c7543
--- /dev/null
+++ b/platform/mv3/extension/_locales/pl/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Eksperymentalny, niewymagający uprawnień bloker treści. Natychmiast po instalacji blokuje reklamy, moduły śledzące, koparki i nie tylko.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} reguł, przekonwertowanych z {{filterCount}} filtrów sieciowych",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Panel sterowania",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Ustawienia",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "O rozszerzeniu",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Polityka prywatności",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "Tryb filtrowania",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Otwórz panel sterowania",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Więcej",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Mniej",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Domyślne",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Reklamy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Prywatność",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Domeny ze złośliwym oprogramowaniem",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Elementy irytujące",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Różne",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regiony, języki",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Informacje o wydaniu",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Kod źródłowy (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Współtwórcy",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Kod źródłowy",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Tłumaczenia",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Listy filtrów",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Zewnętrzne zależności (kompatybilne z GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Witaj",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Właśnie został zainstalowany uBO Lite. Tutaj możesz wybrać domyślny tryb filtrowania, który będzie używany na wszystkich witrynach internetowych.\n\nDomyślnie wybrany jest tryb <em>Podstawowy</em>, ponieważ nie wymaga uprawnień do odczytu i zmiany danych. Jeśli ufasz uBO Lite, możesz nadać mu szerokie uprawnienia do odczytu i zmiany danych na wszystkich witrynach internetowych w celu domyślnego włączenia bardziej zaawansowanych funkcji filtrowania wszystkich witryn internetowych.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Domyślny tryb filtrowania",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Domyślny tryb filtrowania zostanie zastąpiony przez tryby filtrowania poszczególnych witryn. Możesz dostosować tryb filtrowania na dowolnej witrynie zgodnie z trybem, który najlepiej działa na tej witrynie. Każdy tryb ma swoje wady i zalety.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "bez filtrowania",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "podstawowy",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optymalny",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "kompletny",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Podstawowe filtrowanie sieciowe z wybranych list filtrów.\n\nNie wymaga uprawnień do odczytu i zmiany danych na witrynach internetowych.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Zaawansowane filtrowanie sieciowe oraz konkretne filtrowanie rozszerzone z wybranych list filtrów.\n\nWymaga szerokich uprawnień do odczytu i zmiany danych na wszystkich witrynach internetowych.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Zaawansowane filtrowanie sieciowe oraz konkretne i ogólne filtrowanie rozszerzone z wybranych list filtrów.\n\nWymaga szerokich uprawnień do odczytu i zmiany danych na wszystkich witrynach internetowych.\n\nOgólne filtrowanie rozszerzone może powodować większe zużycie zasobów przez witryny internetowe.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Lista nazw hostów, dla których nie będzie stosowane żadne filtrowanie",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Zachowanie",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatycznie wczytaj ponownie stronę po zmianie trybu filtrowania",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/pt_BR/messages.json b/platform/mv3/extension/_locales/pt_BR/messages.json
new file mode 100644
index 0000000..cb4e978
--- /dev/null
+++ b/platform/mv3/extension/_locales/pt_BR/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Um bloqueador de conteúdo com menos permissões - Bloqueie anúncios, rastreadores, mineradores e mais imediatamente após a instalação.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} regras, convertidas de {{filterCount}} filtros de rede",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Painel",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Configurações",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Sobre",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Política de privacidade",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "modo de filtragem",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Abrir painel",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Mais",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Menos",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Padrão",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Anúncios",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacidade",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Domínios de malware",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Aborrecimentos",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscelãnea",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regiões, idiomas",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Código fonte (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Colaboradores",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Código fonte",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Traduções",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Listas de filtros",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dependências externas (compatíveis com GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Bem-vindo",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Você instalou o uBO Lite. Aqui você pode escolher o modo de filtragem padrão pra usar em todos os sites da web.\n\nPor padrão o modo <em>Básico</em> está selecionado porque não requer permissão pra ler e modificar os dados. Se você confia no uBO Lite você pode dar ampla permissão pra ler e modificar os dados em todos os sites da web de modo a ativar as capacidades de filtragem mais avançadas pra todos os sites da web por padrão.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Modo de filtragem padrão",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "O modo de filtragem padrão será substituído pelos modos de filtragem por site. Você pode ajustar o modo de filtragem em qualquer site dado da web de acordo com qualquer modo que funcionar melhor nesse site da web. Cada modo tem suas vantagens e desvantagens.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "sem filtragem",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "básico",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "otimizado",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "completo",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Filtragem básica da rede de listas de filtros selecionadas.\n\nNão requer permissão pra ler e modificar os dados nos sites da web.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Filtragem avançada da rede mais filtragem estendida específica das listas de filtros selecionadas.\n\nRequer ampla permissão pra ler e modificar os dados em todos os sites da web.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Filtragem avançada da rede mais filtragem estendida específica e genérica das listas de filtros selecionadas.\n\nRequer ampla permissão pra ler e modificar os dados em todos os sites da web.\n\nA filtragem estendida genérica pode causar maior uso de recursos da página da web.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Lista de nomes dos hospedeiros para os quais nenhuma filtragem acontecerá.",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Comportamento",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Recarregar a página automaticamente quando mudar o modo de filtragem",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/pt_PT/messages.json b/platform/mv3/extension/_locales/pt_PT/messages.json
new file mode 100644
index 0000000..4bd510a
--- /dev/null
+++ b/platform/mv3/extension/_locales/pt_PT/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Um bloqueador de conteúdo sem permissões. Bloqueia anúncios, rastreadores, mineradores de criptomoedas e muito mais, imediatamente após a instalação.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} regras, convertidas a partir de {{filterCount}} filtros de rede",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Painel de controlo",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Definições",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Acerca",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Política de privacidade",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "modo de filtragem",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Abrir o painel de controlo",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Mais",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Menos",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Predefinição",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Anúncios",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacidade",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Domínios maliciosos",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Inconveniências",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Diversos",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regiões, idiomas",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Registo de alterações",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Código fonte (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contribuidores",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Código fonte",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Traduções",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Listas de filtros",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dependências externas (compatíveis com GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Bem-vindo(a)",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Acabou de instalar o uBO Lite. Pode escolher aqui o modo de filtragem predefinido para usar em todos os websites.\n\nPor predefinição, o modo <em>Básico</em> é selecionado porque não requer a permissão para ler e modificar dados. Se confiar no uBO Lite, pode dar-lhe ampla permissão para ler e modificar dados em todos os websites, a fim de ativar capacidades de filtragem mais avançadas para todos os websites por predefinição.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Modo de filtragem predefinido",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "O modo de filtragem predefinido será substituído pelos modos de filtragem por website. Pode ajustar o modo de filtragem em qualquer website conforme o modo que melhor funcionar nesse website. Cada modo tem as suas vantagens e desvantagens.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "sem filtragem",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "básico",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "ideal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "completo",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Filtragem de rede básica a partir de listas de filtros selecionadas.\n\nNão requer permissão para ler e modificar dados em websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Filtragem de rede avançada mais filtragem alargada específica a partir de listas de filtros selecionadas.\n\nRequer ampla permissão para ler e modificar dados em todos os websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Filtragem de rede avançada mais filtragem alargada específica e genérica a partir de listas de filtros selecionadas.\n\nRequer ampla permissão para ler e modificar dados em todos os websites.\n\nA filtragem alargada genérica pode causar uma maior utilização de recursos das páginas web.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Lista de nomes de anfitriões para os quais não será efetuada qualquer filtragem",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Comportamento",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Recarrega automaticamente a página ao mudar o modo de filtragem",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/ro/messages.json b/platform/mv3/extension/_locales/ro/messages.json
new file mode 100644
index 0000000..fb01a05
--- /dev/null
+++ b/platform/mv3/extension/_locales/ro/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Un blocant experimental, fără permisiuni. Blochează reclamele, urmăritorii, minerii de monede virtuale și multe altele imediat [...]",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} de reguli convertite din {{filterCount}} filtre de rețea",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Panou de control",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Opțiuni",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Despre",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Politică de confidențialitate",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "Mod de filtrare",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Deschide panoul de control",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Mai mult",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Mai puțin",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Implicit",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Reclame",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Confidențialitate",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Domenii malițioase",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Neplăceri",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Diverse",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regiuni, limbi",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Jurnal de modificări",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Cod sursă (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contribuitori",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Cod sursă",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Traduceri",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Liste de filtre",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dependențe externe (compatibile GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Bun venit",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Tocmai ați instalat uBO Lite. Aici puteți alege modul de filtrare implicit pe toate site-urile.\n\nImplicit, modul de <em>bază</em> este selectat întrucât nu necesită permisiuni pentru a citi și modifica date. Dacă aveți încredere în uBO Lite, puteți să-i acordați permisiuni sporite pentru a citi și modifica datele tututor sitte-rilor pentru a activa capabilități mai avansate de filtrare.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Mod de filtrare implicit",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Modul implicit de filtrare va fi suprascris de modul specific fiecărui site. Puteți ajusta filtrarea pentru fiecare site conform caracteristicilor acestuia. Modurile au avantaje și dezavantaje.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "fără filtrare",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "de bază",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optim",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complet",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Filtrare de rețea de bază de la liste de filtre selectate.\n\nNu necesită permisiune pentru a citi și vedea date pe site-uri web.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Filtrare de rețea avansată plus filtrare extinsă specifică de la liste de filtre selectate.\n\nNecesită permisiune vagă pentru a citi și vedea date pe toate site-urile web.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Filtrare de rețea avansată plus filtrare extinsă specifică și generică de la liste de filtre selectate.\n\nNecesită permisiune vagă pentru a citi și modifica date pe toate site-urile web.\n\nFiltrarea generică extinsă poate cauza mai multă utilizare de resurse la nivel de pagină web.\n",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Lista numelor mașinilor pentru care nu se va face filtrare",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Comportament",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Reîncărcare automată a paginii la schimbarea modului de filtrare",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/ru/messages.json b/platform/mv3/extension/_locales/ru/messages.json
new file mode 100644
index 0000000..0104b7c
--- /dev/null
+++ b/platform/mv3/extension/_locales/ru/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Блокировщик контента, не требующий разрешений. Сразу после инсталляции блокирует рекламу, трекеры, майнеры и многое другое.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} правил, преобразованных из {{filterCount}} сетевых фильтров",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Панель управления",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Настройки",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "О расширении",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Политика конфиденциальности",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "режим фильтрации",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Открыть панель управления",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Больше",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Меньше",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "По умолчанию",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Реклама",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Приватность",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Вредоносные домены",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Раздражающие элементы",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Разное",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Регионы, языки",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Список изменений",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Исходный код (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Участники",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Исходный код",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Перевод",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Списки фильтров",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Внешние зависимости (совместимые с GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Добро пожаловать",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Вы только что установили uBO Lite. Здесь вы можете выбрать стандартный режим фильтрации для всех веб-сайтов.\n\nПо умолчанию выбран режим <em>Базовый</em>, так как он не требует разрешения на чтение и изменение данных. Если вы доверяете uBO Lite, вы можете дать ему широкие права на чтение и изменение данных на всех веб-сайтах, чтобы включить более продвинутые возможности фильтрации для всех веб-сайтов по умолчанию.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Режим фильтрации по умолчанию",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Стандартный режим фильтрации перезаписывается режимом настройки конкретного сайта. Вы можете подобрать наиболее эффективный режим фильтрации на любом сайте. У каждого режима есть свои преимущества и недостатки.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "без фильтрации",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "базовый",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "оптимальный",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "полный",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Основная сетевая фильтрация по выбранным спискам фильтров.\n\nНе требует разрешения на чтение и изменение данных на веб-сайтах.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Расширенная сетевая фильтрация вместе со специальной фильтрацией по выбранным спискам фильтров.\n\nТребуется разрешение на чтение и изменение данных на всех веб-сайтах.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Расширенная сетевая фильтрация вместе со специальной, и усиленной общей фильтрацией по выбранным спискам фильтров.\n\nТребуется разрешение на чтение и изменение данных на всех веб-сайтах.\n\nУсиленная общая фильтрация может стать причиной повышенного потребления ресурсов веб-страницей.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Список имён хостов, для которых не будет производиться фильтрация",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Поведение",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Автоматически перезагружать страницу при изменении режима фильтрации",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/si/messages.json b/platform/mv3/extension/_locales/si/messages.json
new file mode 100644
index 0000000..627857e
--- /dev/null
+++ b/platform/mv3/extension/_locales/si/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Settings",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "About",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Default",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscellaneous",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/sk/messages.json b/platform/mv3/extension/_locales/sk/messages.json
new file mode 100644
index 0000000..997c759
--- /dev/null
+++ b/platform/mv3/extension/_locales/sk/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Experimentálny blokátor obsahu bez povolení. Okamžite po inštalácii zablokuje reklamy, sledovacie programy, minery a ďalšie.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} pravidiel, prevedené z {{filterCount}} sieťových filtrov",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Ovládací panel",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Nastavenia",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "O doplnku",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Zásady ochrany osobných údajov",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "Režim filtrovania",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Otvoriť ovládací panel",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Viac",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Menej",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Predvolené",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Reklamy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Súkromie",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Domény malvéru",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Obťažujúce",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Rôzne",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regióny, jazyky",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Zoznam zmien",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Zdrojový kód (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Prispievatelia",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Zdrojový kód",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Preklady",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Zoznam filtrov",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Externé závislosti (kompatibilné s GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Vitajte",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Práve ste nainštalovali uBO Lite. Tu si môžete vybrať predvolený režim filtrovania, ktorý sa má používať na všetkých webových stránkach.\n\nV predvolenom nastavení je zvolený režim <em>Základný</em>, pretože nevyžaduje povolenie na čítanie a zmenu údajov. Ak dôverujete rozšíreniu uBO Lite, môžete mu udeliť všeobecné oprávnenie na čítanie a zmenu údajov na všetkých webových stránkach, aby ste v predvolenom nastavení umožnili pokročilejšie možnosti filtrovania všetkých webových stránok.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Predvolený režim filtrovania",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Predvolený režim filtrovania bude nahradený režimami filtrovania pre jednotlivé webové stránky. Režim filtrovania na ktorejkoľvek webovej stránke môžete upraviť podľa toho, ktorý režim je na danej webovej lokalite najlepší. Každý režim má svoje výhody a nevýhody.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "nefiltrované",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "základný",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimálny",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "kompletný",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Základné sieťové filtrovanie z vybraných zoznamov filtrov.\n\nNevyžaduje povolenie na čítanie a zmenu údajov na webových stránkach.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Pokročilé sieťové filtrovanie a špecifické rozšírené filtrovanie z vybraných zoznamov filtrov.\n\nVyžaduje všeobecné oprávnenie na čítanie a zmenu údajov na všetkých webových stránkach.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Pokročilé sieťové filtrovanie plus špecifické a generické rozšírené filtrovanie z vybraných zoznamov filtrov.\n\nVyžaduje všeobecné oprávnenie na čítanie a zmenu údajov na všetkých webových stránkach.\n\nGenerické rozšírené filtrovanie môže spôsobiť vyššie využitie zdrojov webovej stránky.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Správanie",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automaticky znova načítať stránku pri zmene režimu filtrovania",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/sl/messages.json b/platform/mv3/extension/_locales/sl/messages.json
new file mode 100644
index 0000000..627857e
--- /dev/null
+++ b/platform/mv3/extension/_locales/sl/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Settings",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "About",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Default",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscellaneous",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/so/messages.json b/platform/mv3/extension/_locales/so/messages.json
new file mode 100644
index 0000000..627857e
--- /dev/null
+++ b/platform/mv3/extension/_locales/so/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Settings",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "About",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Default",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscellaneous",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/sq/messages.json b/platform/mv3/extension/_locales/sq/messages.json
new file mode 100644
index 0000000..d390d8d
--- /dev/null
+++ b/platform/mv3/extension/_locales/sq/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Një bllokues që bllokon në mënyrë të pavarur reklamat, gjurmuesit, kriptominatorët etj. menjëherë pas instalimit.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rregulla sipas {{filterCount}} filtrave",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Paneli i kontrollit",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Parametrat",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Info",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Politika e privatësisë",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "mënyra e filtrimit",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Hapni panelin e kontrollit",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Më shumë",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Më pak",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Standarde",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Reklamat",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privatësia",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Domenet e dëmshme",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Elementet e bezdisshme",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Të ndryshme",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Sipas rajonit, gjuhës",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Ditari i ndryshimeve",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Materiali burimor (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Kontribuesit",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Materiali burimor",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Përkthimet",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Listat e filtrave",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Programet kushtëzuese (sipas GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Përshëndetje",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Sapo instaluat uBO Lite. Këtu mund të zgjidhni mënyrën e filtrimit që duhet përdorur për të gjitha uebsajtet.\n\n<em>E thjeshta</em> është mënyra standarde, sepse nuk ju merret leje për leximin dhe modifikimin e të dhënave. Nëse keni besim te uBO Lite, mund t'i jepni leje shtesë për leximin dhe modifikimin e të dhënave në të gjitha uebsajtet, në mënyrë që të kryeni një filtrim më të avancuar.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Mënyra standarde e filtrimit",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Mënyra standarde e filtrimit mund të ndryshohet në çdo kohë sipas kërkesave që kanë uebsajte të caktuara. Secila mënyrë ka avantazhet dhe disavantazhet e veta.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "pa filtër",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "thjesht",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "komplet",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Filtrat kryesorë të rrjetit nga listat e përzgjedhura.\n\nNuk merret leje për leximin dhe modifikimin e të dhënave në uebsajte.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Filtrat e avancuar të rrjetit plus filtrat e posaçëm nga listat e përzgjedhura.\n\nDuhen leje shtesë për leximin dhe modifikimin e të dhënave në të gjitha uebsajtet.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Filtrat e avancuar të rrjetit plus filtrat e posaçëm jospecifikë nga listat e përzgjedhura.\n\nDuhen leje shtesë për leximin dhe modifikimin e të dhënave në të gjitha uebsajtet.\n\nFiltrat e posaçëm jospecifikë mund ta rëndojnë hapjen e faqeve në internet.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Emrat e hosteve që nuk do të kalojnë në filtër",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Sjellja",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Freskoj automatikisht faqen kur ndryshoj mënyrën e filtrimit",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/sr/messages.json b/platform/mv3/extension/_locales/sr/messages.json
new file mode 100644
index 0000000..0900785
--- /dev/null
+++ b/platform/mv3/extension/_locales/sr/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Блокатор садржаја који не захтева дозволе. Блокира рекламе, праћења, рударе криптовалута и друго.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} правила, конвертована из {{filterCount}} мрежних филтера",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Контролна табла",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Подешавања",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "О апликацији",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Политика приватности",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "режим филтрирања",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Отвори контролну таблу",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Више",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Мање",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Подразумевано",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Рекламе",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Приватност",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Злонамерни домени",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Сметње",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Разно",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Регионални, језички",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Списак измена",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Изворни код (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Сарадници",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Изворни код",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Преводи",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Листе филтера",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Спољне зависности (компатибилно са GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Добродошли",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Управо сте инсталирали uBO Lite. Овде можете изабрати подразумевани режим филтрирања који ће се користити на свим сајтовима.\n\nПодразумевано је изабран <em>основни</em> режим јер он не захтева дозволу за читање и мењање података. Ако верујете uBO Lite-у, можете му дати широку дозволу за читање и мењање података како би се подразумевано омогућиле напредније могућности филтрирања за све сајтове.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Подразумевани режим филтрирања",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Подразумевани режим филтрирања ће бити замењен режимима филтрирања по појединачним веб сајтовима. Можете прилагодити режим филтрирања на било ком веб сајту у складу са режимом који најбоље функционише на том веб сајту. Сваки режим има своје предности и мане.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "без филтрирања",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "основно",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "оптимално",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "комплетно",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Основно мрежно филтрирање са изабраних листа филтера.\n\nНе захтева дозволу за читање и мењање података на сајтовима.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Напредно мрежно и специфично проширено филтрирање са изабраних листа филтера.\n\nЗахтева широку дозволу за читање и мењање података на свим сајтовима.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Напредно мрежно и специфично и генеричко проширено филтрирање са изабраних листа филтера.\n\nЗахтева широку дозволу за читање и мењање података на свим сајтовима.\n\nГенеричко филтрирање може довести до већег коришћења ресурса веб странице.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Листа имена хостова за које се неће вршити филтрирање",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Понашање",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Аутоматски поново учитај страницу при промени режима филтрирања",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/sv/messages.json b/platform/mv3/extension/_locales/sv/messages.json
new file mode 100644
index 0000000..fddcca5
--- /dev/null
+++ b/platform/mv3/extension/_locales/sv/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "En behörighetslös innehållsblockerare. Blockerar annonser, spårare, miners och mer omedelbart efter installationen.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} regler, konverterat från {{filterCount}} nätverksfilter",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Kontrollpanel",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Inställningar",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Om",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Integritetspolicy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtreringsläge",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Öppna kontrollpanelen",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Mer",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Mindre",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Standard",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Annonser",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Integritet",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Domäner med skadlig kod (malware)",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Störande",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Diverse",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regioner, språk",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Ändringslogg",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Källkod (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Bidragsgivare",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Källkod",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Översättningar",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filterlistor",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Externa beroenden (GPLv3-kompatibla):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Välkommen",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Du har precis installerat uBO Lite. Här kan du välja standardfiltreringsläget som ska användas på alla webbplatser.\n\nSom standard är läget <em>Grundläggande</em> valt eftersom det inte kräver behörighet att läsa och ändra data. Om du litar på uBO Lite kan du ge den högre behörighet att läsa och ändra data på alla webbplatser för att som standard aktivera mer avancerade filtreringsmöjligheter för alla webbplatser.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Standardfiltreringsläge",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Standardfiltreringsläget kommer att åsidosättas av filtreringslägen per webbplats. Du kan justera filtreringsläget på vilken webbplats som helst enligt vilket läge som fungerar bäst på den webbplatsen. Varje läge har sina fördelar och nackdelar.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "ingen filtrering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "grundläggande",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "fullständig",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Grundläggande nätverksfiltrering från valda filterlistor.\n\nKräver ingen behörighet för att läsa och ändra data på webbplatser.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Avancerad nätverksfiltrering plus specifik utökad filtrering från utvalda filterlistor.\n\nKräver högre behörighet för att läsa och ändra data på alla webbplatser.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Avancerad nätverksfiltrering plus specifik och allmän utökad filtrering från utvalda filterlistor.\n\nKräver bred behörighet för att läsa och ändra data på alla webbplatser.\n\nAllmän utökad filtrering kan orsaka högre användning av webbsidors resurser.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Lista över värdnamn för vilka ingen filtrering kommer att äga rum",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Beteende",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Ladda automatiskt om sidan när du byter filtreringsläge",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/sw/messages.json b/platform/mv3/extension/_locales/sw/messages.json
new file mode 100644
index 0000000..627857e
--- /dev/null
+++ b/platform/mv3/extension/_locales/sw/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Settings",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "About",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Default",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscellaneous",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/ta/messages.json b/platform/mv3/extension/_locales/ta/messages.json
new file mode 100644
index 0000000..627857e
--- /dev/null
+++ b/platform/mv3/extension/_locales/ta/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Settings",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "About",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Default",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscellaneous",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/te/messages.json b/platform/mv3/extension/_locales/te/messages.json
new file mode 100644
index 0000000..e263523
--- /dev/null
+++ b/platform/mv3/extension/_locales/te/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "ఐచ్చికాలు",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "మా గురించి",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "గోప్యతా",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "వడపోత మోడ్",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "డాష్‌బోర్డ్‌ను తెరవండి",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "మరిన్ని",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "తక్కువ",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "డిఫాల్ట్",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "ప్రకటనలు",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "గోప్యత",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscellaneous",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "ఎంచుకున్న ఫిల్టర్ జాబితాల నుండి ప్రాథమిక నెట్‌వర్క్ ఫిల్టరింగ్.\n\nవెబ్‌సైట్‌లలో డేటాను చదవడానికి మరియు సవరించడానికి అనుమతి అవసరం లేదు.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "ఎంచుకున్న ఫిల్టర్ జాబితాల నుండి అధునాతన నెట్‌వర్క్ ఫిల్టరింగ్ మరియు నిర్దిష్ట పొడిగించిన ఫిల్టరింగ్.\n\nఅన్ని వెబ్‌సైట్‌లలోని డేటాను చదవడానికి మరియు సవరించడానికి విస్తృత అనుమతి అవసరం.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "ఎంచుకున్న ఫిల్టర్ జాబితాల నుండి అధునాతన నెట్‌వర్క్ ఫిల్టరింగ్ మరియు నిర్దిష్ట మరియు సాధారణ పొడిగించిన ఫిల్టరింగ్.\n\nఅన్ని వెబ్‌సైట్‌లలోని డేటాను చదవడానికి మరియు సవరించడానికి విస్తృత అనుమతి అవసరం.\n\nసాధారణ పొడిగించిన వడపోత అధిక వెబ్‌పేజీ వనరుల వినియోగానికి కారణం కావచ్చు.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "వడపోత జరగని హోస్ట్ పేర్ల జాబితా",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "ప్రవర్తన",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "ఫిల్టరింగ్ మోడ్‌ను మార్చేటప్పుడు పేజీని స్వయంచాలకంగా రీలోడ్ చేయండి",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/th/messages.json b/platform/mv3/extension/_locales/th/messages.json
new file mode 100644
index 0000000..75f992a
--- /dev/null
+++ b/platform/mv3/extension/_locales/th/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Dashboard",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Settings",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "About",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Default",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscellaneous",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "การแปลภาษา",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "complete",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/tr/messages.json b/platform/mv3/extension/_locales/tr/messages.json
new file mode 100644
index 0000000..b40f8a0
--- /dev/null
+++ b/platform/mv3/extension/_locales/tr/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "İzin gerektirmeyen içerik engelleyicisi. Kurulumdan hemen sonra reklamları, izleyicileri, kripto madencilerini, ve daha fazlasını engeller.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{filterCount}} ağ filtresinden {{ruleCount}} adet kural dönüştürüldü",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Kontrol Paneli",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Ayarlar",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Hakkında",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Gizlilik ilkesi",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "Filtreleme modu",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Kontrol panelini aç",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Daha Fazla",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Daha Az",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Varsayılan",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Reklamlar",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Gizlilik",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Zararlı alan adları",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Rahatsız ediciler",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Diğer",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Bölgeler, diller",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Değişiklik günlüğü",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Kaynak kodu (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Katkıda bulunanlar",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Kaynak kodu",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Çeviriler",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filtre listeleri",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dış bağlılıklar (GPLv3-uyumlu):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Hoş geldiniz",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Az önce uBO Lite'ı indirdiniz. Buradan tüm siteler için varsayılan filtreleme modlarını seçebilirsiniz.\n\nVarsayılan olarak, <em>Basit</em> mod seçilidir çünkü verileri okuma ve yazma izni gerektirmez. uBO Lite'a güveniyorsanız, tüm sitelerde verileri okuma ve yazma izni verebilirsiniz ve daha gelişmiş filtreleme yeteneklerine tüm sitelerde sahip olabilirsiniz.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Varsayılan filtreleme modu",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Varsayılan filtreleme modu, web sitesi başına filtreleme modları tarafından geçersiz kılınacaktır. Herhangi bir web sitesindeki filtreleme modunu, o web sitesinde en iyi çalışan moda göre ayarlayabilirsiniz. Her modun avantajları ve dezavantajları vardır.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "filtreleme yok",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "temel",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "ideal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "kapsamlı",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Seçilen filtre listelerinden temel ağ filtrelemesi.\n\nWeb sitelerindeki verileri okumak ve değiştirmek için izin gerektirmez.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Gelişmiş ağ filtrelemesi ve seçilen filtre listelerinden genişletilmiş filtreleme.\n\nTüm web sitelerindeki verileri okumak ve değiştirmek için izin gerektirir.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Gelişmiş ağ filtrelemenin yanı sıra seçilen filtre listelerinden özel ve genel genişletilmiş filtreleme.\n\nTüm web sitelerindeki verileri okumak ve değiştirmek için geniş izin gerektirir.\n\nGenel genişletilmiş filtreleme daha yüksek kaynak kullanımına neden olabilir.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Filtreleme yapılmayacak alan alarının listesi",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Davranış",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Filtreleme modu değiştirildiğinde sayfayı yenile",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/uk/messages.json b/platform/mv3/extension/_locales/uk/messages.json
new file mode 100644
index 0000000..b48a9bb
--- /dev/null
+++ b/platform/mv3/extension/_locales/uk/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Експериментальний, бездозвільний блокувальник вмісту. Блокує рекламу, трекери, майнери та інше одразу після встановлення.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} правил, конвертованих з {{filterCount}} мережних фільтрів",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Панель керування",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Налаштування",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Про застосунок",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Політика конфіденційності",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "режим фільтрації",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Відкрити панель керування",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Більше",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Менше",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Типово",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Реклама",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Приватність",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Домени шкідливих програм",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Надокучливості",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Різне",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Регіони, мови",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Журнал змін",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Код програми (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Учасники",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Вихідний код",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Переклади",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Списки фільтрів",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Зовнішні залежності (Сумісні з GPLv3)",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Ласкаво просимо",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Ви щойно встановили uBO Lite. Тут ви можете вибрати режим фільтрації за замовчуванням, який буде використовуватися на всіх вебсайтах.\n\nЗа замовчуванням вибрано <em>Базовий</em> режим, оскільки він не вимагає дозволу на читання та зміну даних. Якщо ви довіряєте uBO Lite, ви можете надати йому широкий дозвіл на читання та зміну даних на всіх вебсайтах, щоб увімкнути більш розширені можливості фільтрації для всіх вебсайтів за замовчуванням.\n",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Типовий режим фільтрування",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Режим фільтрації за замовчуванням буде замінений режимами фільтрації для кожного вебсайту. Ви можете налаштувати режим фільтрації на будь-якому вебсайті відповідно до того, який режим найкраще працює на цьому вебсайті. Кожен режим має свої переваги та недоліки.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "без фільтрування",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "базовий",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "оптимальний",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "повний",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Базова мережева фільтрація з обраних списків фільтрів.\n\nНе вимагає дозволу на читання і зміну даних на вебсайтах.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Розширена мережева фільтрація плюс спеціальна розширена фільтрація з вибраних списків фільтрів.\n\nВимагає широкого дозволу на читання та зміну даних на всіх вебсайтах.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Розширена мережева фільтрація плюс специфічна та загальна розширена фільтрація з вибраних списків фільтрів.\n\nПотребує широкого дозволу на читання та зміну даних на всіх сайтах.\n\nЗагальна розширена фільтрація може призвести до збільшення використання ресурсів веб-сторінки.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Список імен хостів, для яких буде відбуватись фільтрування",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Поведінка",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Автоматично оновити сторінку при зміні режиму фільтрування",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/ur/messages.json b/platform/mv3/extension/_locales/ur/messages.json
new file mode 100644
index 0000000..e66c4a9
--- /dev/null
+++ b/platform/mv3/extension/_locales/ur/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "ایک تجرباتی، اجازت سے کم مواد بلاکر۔ انسٹال ہونے پر اشتہارات، ٹریکرز، کان کنوں اور مزید کو فوری طور پر روکتا ہے۔",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "یو بلاکر لائٹ-ڈیش بورڈ",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "ترتیبات",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "تعارف",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "پرائیویسی پالیسی",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "filtering mode",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Default",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Miscellaneous",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "ترجمہ",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Welcome",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, <em>Basic</em> mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Default filtering mode",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "no filtering",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "basic",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "optimal",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "مکمل",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "List of hostnames for which no filtering will take place",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Behavior",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Automatically reload page when changing filtering mode",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/vi/messages.json b/platform/mv3/extension/_locales/vi/messages.json
new file mode 100644
index 0000000..6ecd8cb
--- /dev/null
+++ b/platform/mv3/extension/_locales/vi/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Trình chặn nội dung không cần quyền. Chặn quảng cáo, trình theo dõi, công cụ khai thác tiền số và hơn thế nữa ngay sau khi cài đặt.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} quy tắc, được chuyển đổi từ {{filterCount}} bộ lọc mạng",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — Bảng điều khiển",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "Cài đặt",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "Giới thiệu",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Chính sách bảo mật",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "chế độ lọc",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "Mở bảng điều khiển",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "Mở rộng",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "Ít hơn",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "Mặc định",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "Quảng cáo",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "Riêng tư",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "Các tên miền nguy hiểm",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Phiền toái",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "Linh tinh",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "Khu vực, ngôn ngữ",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "Nhật ký thay đổi",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Mã nguồn (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Những người đóng góp",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Mã nguồn",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Bản dịch",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Danh sách bộ lọc",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Các phụ thuộc bên ngoài (tương thích GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "Chào mừng",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "Bạn vừa cài đặt uBO Lite. Bạn có thể chọn chế độ của bộ lọc mặc định để sử dụng trên tất cả các trang web. Theo mặc định, chế độ <em>Cơ bản</em> được chọn vì chế độ này không yêu cầu quyền đọc và thay đổi dữ liệu. Nếu bạn tin tưởng uBO Lite, bạn có thể cấp cho bộ lọc với quyền rộng rãi để đọc và thay đổi dữ liệu trên tất cả các trang web để kích hoạt khả năng lọc nâng cao hơn cho tất cả các trang web theo mặc định.",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "Chế độ bộ lọc mặc định",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "Chế độ lọc mặc định sẽ ghi đè các chế độ bộ lọc trên mỗi trang web. Bạn có thể điều chỉnh chế độ lọc trên bất kỳ trang web nào và theo bất kỳ chế độ nào hoạt động tốt nhất trên trang web đó. Mỗi chế độ đều có ưu điểm và nhược điểm riêng.",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "Không có bộ lọc",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "Cơ bản",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "tối ưu",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "Hoàn toàn",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "Chế độ lọc mạng cơ bản từ các danh sách bộ lọc đã chọn.\n\nKhông yêu cầu quyền về đọc và thay đổi dữ liệu trên các trang web.\n",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "Lọc mạng với mức nâng cao cộng với lọc mở rộng cụ thể từ danh sách bộ lọc đã chọn.\n\nYêu cầu cấp quyền để đọc và thay đổi dữ liệu trên tất cả các trang web.",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "Lọc mạng với chế độ nâng cao cộng với lọc mở rộng cụ thể và chung chung từ danh sách bộ lọc đã chọn.\n\nYêu cầu cấp quyền để đọc và thay đổi dữ liệu trên tất cả các trang web.\n\nVới chế độ lọc chung có thể gây ra tốn tài nguyên trang web cao hơn.",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "Danh sách tên máy chủ sẽ không được lọc",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "Hành vi",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "Tự động tải lại trang khi thay đổi chế độ bộ lọc",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/zh_CN/messages.json b/platform/mv3/extension/_locales/zh_CN/messages.json
new file mode 100644
index 0000000..c11fdf7
--- /dev/null
+++ b/platform/mv3/extension/_locales/zh_CN/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "一个不需要权限的内容屏蔽工具。安装即可屏蔽广告、跟踪器、挖矿脚本等网页内容。",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} 条规则,转换自 {{filterCount}} 条网络共享规则",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — 控制面板",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "设置",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "关于",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "隐私政策",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "过滤模式",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "在仪表板中",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "更多",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "更少",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "预设",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "广告",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "隐私",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "恶意网站",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "骚扰",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "其他",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "区域、语言",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "更新日志",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "源代码(GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "贡献者",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "源代码",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "翻译",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "过滤规则列表",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "外部依赖(与 GPLv3 协议兼容):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "欢迎使用",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "uBO Lite 现已安装完毕。接下来您可以为网页内容选择默认过滤模式。\n\n预设过滤模式为“基础”,该模式不需要读取或修改网页内容的权限。如果您信任 uBO Lite,您可以授予其用以读取或修改所有网页数据的额外权限,进而默认为所有网站开启高级过滤模式。",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "默认过滤模式",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "默认过滤模式会被为各网站专设的过滤模式覆盖。您可以为任何网站设置最为合适的过滤模式,每种模式都有各自的优点和缺点。",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "不过滤",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "基础",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "优化",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "完全",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "用选定的过滤规则列表进行基本网页过滤。\n\n不需要读取或修改网页数据的权限。",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "用选定的过滤规则列表进行进阶网页过滤,会使用有针对性的过滤规则。\n\n需要读取或修改网页数据的权限。",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "用选定的过滤规则列表进行进阶网页过滤,会同时使用有针对性的以及通用的过滤规则。\n\n需要读取或修改网页数据的权限。\n\n通用过滤功能可能会占用更多系统资源。",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "不进行过滤的主机名列表",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "操作设置",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "更改过滤模式后自动刷新网页",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/_locales/zh_TW/messages.json b/platform/mv3/extension/_locales/zh_TW/messages.json
new file mode 100644
index 0000000..7825bd5
--- /dev/null
+++ b/platform/mv3/extension/_locales/zh_TW/messages.json
@@ -0,0 +1,158 @@
+{
+ "extName": {
+ "message": "uBlock Origin Lite",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "一個無須任何權限的內容阻擋器。安裝即可阻擋廣告、追蹤器、挖礦程式等網頁內容。",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "perRulesetStats": {
+ "message": "{{ruleCount}} 條規則,轉換自 {{filterCount}} 條網路過濾規則",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "dashboardName": {
+ "message": "uBO Lite — 控制台",
+ "description": "English: uBO Lite — Dashboard"
+ },
+ "settingsPageName": {
+ "message": "設定",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPageName": {
+ "message": "關於",
+ "description": "appears as tab name in dashboard"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "隱私權政策",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "popupFilteringModeLabel": {
+ "message": "過濾模式",
+ "description": "Label in the popup panel for the current filtering mode"
+ },
+ "popupTipDashboard": {
+ "message": "開啟控制台",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupMoreButton": {
+ "message": "更多",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton": {
+ "message": "更少",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "3pGroupDefault": {
+ "message": "預設",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAds": {
+ "message": "廣告",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupPrivacy": {
+ "message": "隱私",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMalware": {
+ "message": "惡意網域",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupAnnoyances": {
+ "message": "嫌惡元素",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupMisc": {
+ "message": "其他",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "3pGroupRegions": {
+ "message": "地區及語言",
+ "description": "Header for a ruleset section in 'Filter lists pane'"
+ },
+ "aboutChangelog": {
+ "message": "變更日誌",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "原始碼(GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "貢獻者",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "原始碼",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "翻譯",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "過濾規則清單",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "外部相依套件(與 GPLv3 相容):",
+ "description": "Shown in the About pane"
+ },
+ "firstRunSectionLabel": {
+ "message": "歡迎",
+ "description": "The header text for the welcome message section"
+ },
+ "firstRunDescription": {
+ "message": "您剛安裝了 uBO Lite。您可以在此處選擇要在所有網站上使用的預設過濾模式。\n\n預設情況下將會選取<em>基礎</em>模式,因為其不需要讀取與變更資料的權限。若您信任 uBO Lite,您可以給予其讀取並變更在所有網站上資料的廣泛權限,以便為所有網站啟用更進階的過濾功能。",
+ "description": "Descriptive text shown at first install time only "
+ },
+ "defaultFilteringModeSectionLabel": {
+ "message": "預設過濾模式",
+ "description": "The header text for the default filtering mode section"
+ },
+ "defaultFilteringModeDescription": {
+ "message": "預設過濾模式將被每個網站的過濾模式覆寫。您可以根據在該網站上最有效的模式為任何指定的網站調整過濾模式。每種模式都有其優缺點。",
+ "description": "This describes the default filtering mode setting"
+ },
+ "filteringMode0Name": {
+ "message": "不過濾",
+ "description": "Name of blocking mode 0"
+ },
+ "filteringMode1Name": {
+ "message": "基礎",
+ "description": "Name of blocking mode 1"
+ },
+ "filteringMode2Name": {
+ "message": "最佳化",
+ "description": "Name of blocking mode 2"
+ },
+ "filteringMode3Name": {
+ "message": "完整",
+ "description": "Name of blocking mode 3"
+ },
+ "basicFilteringModeDescription": {
+ "message": "來自選定過濾條件清單的基礎網路過濾。\n\n不需要讀取與變更網站資料的權限。",
+ "description": "This describes the 'basic' filtering mode"
+ },
+ "optimalFilteringModeDescription": {
+ "message": "進階網路過濾以及來自選定過濾條件清單的特定擴展過濾條件。\n\n需要在所有網站上讀取並變更資料的廣泛權限。",
+ "description": "This describes the 'optimal' filtering mode"
+ },
+ "completeFilteringModeDescription": {
+ "message": "進階網路過濾以及來自選定過濾條件清單的特定與通用擴展過濾條件。\n\n需要在所有網站上讀取並變更資料的廣泛權限。\n\n通用擴展過濾可能會導致更高的網頁資源使用率。",
+ "description": "This describes the 'complete' filtering mode"
+ },
+ "noFilteringModeDescription": {
+ "message": "不進行過濾的主機名稱列表",
+ "description": "A short description for the editable field which lists trusted sites"
+ },
+ "behaviorSectionLabel": {
+ "message": "行為",
+ "description": "The header text for the 'Behavior' section"
+ },
+ "autoReloadLabel": {
+ "message": "變更過濾模式時自動重新載入頁面",
+ "description": "Label for a checkbox in the options page"
+ }
+}
diff --git a/platform/mv3/extension/css/dashboard-common.css b/platform/mv3/extension/css/dashboard-common.css
new file mode 100644
index 0000000..41d6416
--- /dev/null
+++ b/platform/mv3/extension/css/dashboard-common.css
@@ -0,0 +1,52 @@
+h2, h3 {
+ margin: 1em 0;
+ }
+h2 {
+ font-size: 18px;
+ }
+h3 {
+ font-size: 16px;
+ }
+a {
+ text-decoration: none;
+ }
+.fa-icon.info {
+ color: var(--info0-ink);
+ fill: var(--info0-ink);
+ font-size: 115%;
+ }
+.fa-icon.info:hover {
+ transform: scale(1.25);
+ }
+.fa-icon.info.important {
+ color: var(--info2-ink);
+ fill: var(--info2-ink);
+ }
+.fa-icon.info.very-important {
+ color: var(--info3-ink);
+ fill: var(--info3-ink);
+ }
+input[type="number"] {
+ width: 5em;
+ }
+@media (max-height: 640px), (max-height: 800px) and (max-width: 480px) {
+ .body > p,
+ .body > ul {
+ margin: 0.5em 0;
+ }
+ .vverbose {
+ display: none !important;
+ }
+ }
+/**
+ On mobile device, the on-screen keyboard may take up
+ so much space that it overlaps the content being edited.
+ The rule below makes it possible to scroll the edited
+ content within view.
+*/
+:root.mobile {
+ overflow: auto;
+ }
+:root.mobile body {
+ min-height: 600px;
+ }
diff --git a/platform/mv3/extension/css/dashboard.css b/platform/mv3/extension/css/dashboard.css
new file mode 100644
index 0000000..e98bcc9
--- /dev/null
+++ b/platform/mv3/extension/css/dashboard.css
@@ -0,0 +1,74 @@
+body {
+ align-items: center;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ }
+body > * {
+ width: min(640px, 100%);
+ }
+#dashboard-nav {
+ background-color: var(--surface-1);
+ border: 0;
+ border-bottom: 1px solid var(--border-1);
+ display: flex;
+ flex-shrink: 0;
+ flex-wrap: wrap;
+ overflow-x: hidden;
+ padding: 0;
+ position: sticky;
+ top: 0;
+ z-index: 100;
+ }
+.tabButton {
+ background-color: transparent;
+ border: 0;
+ border-bottom: 3px solid transparent;
+ border-radius: 0;
+ color: var(--dashboard-tab-ink);
+ fill: var(--dashboard-tab-ink);
+ font-family: var(--font-family);
+ font-size: var(--font-size);
+ padding: 0.7em 1.4em calc(0.7em - 3px);
+ text-decoration: none;
+ white-space: nowrap;
+ }
+.tabButton:focus {
+ outline: 0;
+ }
+.tabButton:hover {
+ background-color: var(--dashboard-tab-hover-surface);
+ border-bottom-color: var(--dashboard-tab-hover-border);
+ }
+
+body[data-pane="settings"] #dashboard-nav .tabButton[data-pane="settings"],
+body[data-pane="about"] #dashboard-nav .tabButton[data-pane="about"] {
+ background-color: var(--dashboard-tab-active-surface);
+ border-bottom: 3px solid var(--dashboard-tab-active-ink);
+ color: var(--dashboard-tab-active-ink);
+ fill: var(--dashboard-tab-active-ink);
+ }
+
+body > section {
+ display: none;
+ }
+body[data-pane="settings"] > section[data-pane="settings"],
+body[data-pane="about"] > section[data-pane="about"] {
+ display: block;
+ }
+
+/* high dpi devices */
+:root.hidpi .tabButton {
+ font-family: Metropolis, sans-serif;
+ font-weight: 600;
+ letter-spacing: 0.5px;
+ }
+
+/* touch-screen devices */
+:root.mobile #dashboard-nav {
+ flex-wrap: nowrap;
+ overflow-x: auto;
+ }
+:root.mobile #dashboard-nav .logo {
+ display: none;
+ }
diff --git a/platform/mv3/extension/css/filtering-mode.css b/platform/mv3/extension/css/filtering-mode.css
new file mode 100644
index 0000000..fecb1ac
--- /dev/null
+++ b/platform/mv3/extension/css/filtering-mode.css
@@ -0,0 +1,92 @@
+.filteringModeSlider {
+ align-items: center;
+ display: flex;
+ height: 60px;
+ justify-content: center;
+ position: relative;
+ width: 240px;
+ }
+
+.filteringModeButton {
+ background-color: var(--surface-1);
+ box-sizing: border-box;
+ border-radius: 30% 15% / 15% 30%;
+ height: 100%;
+ position: absolute;
+ width: 25%;
+ z-index: 10;
+ }
+
+.filteringModeButton > div {
+ background-color: var(--accent-surface-1);
+ border: 4px solid var(--accent-surface-1);
+ border-radius: inherit;
+ box-sizing: border-box;
+ height: calc(100% - 2px);
+ margin: 1px;
+ width: calc(100% - 2px);
+ }
+
+.filteringModeSlider.moving .filteringModeButton > div,
+.filteringModeButton > div:hover {
+ filter: brightness(0.9);
+ }
+
+.filteringModeSlider[data-level="0"] .filteringModeButton > div {
+ background-color: var(--surface-2);
+ border-color: var(--surface-2);
+ }
+
+.filteringModeSlider span[data-level] {
+ background-color: var(--accent-surface-1);
+ display: inline-flex;
+ height: 30%;
+ margin-left: 1px;
+ width: 25%;
+ }
+
+.filteringModeSlider.moving span[data-level] {
+ pointer-events: none;
+ }
+
+.filteringModeSlider[data-level="0"] .filteringModeButton {
+ left: 0;
+ }
+.filteringModeSlider[data-level="1"] .filteringModeButton {
+ left: 25%;
+ }
+.filteringModeSlider[data-level="2"] .filteringModeButton {
+ left: 50%;
+ }
+.filteringModeSlider[data-level="3"] .filteringModeButton {
+ left: 75%;
+ }
+[dir="rtl"] .filteringModeSlider[data-level="0"] .filteringModeButton {
+ left: 75%;
+ }
+[dir="rtl"] .filteringModeSlider[data-level="1"] .filteringModeButton {
+ left: 50%;
+ }
+[dir="rtl"] .filteringModeSlider[data-level="2"] .filteringModeButton {
+ left: 25%;
+ }
+[dir="rtl"] .filteringModeSlider[data-level="3"] .filteringModeButton {
+ left: 0;
+ }
+
+
+.filteringModeSlider[data-level="0"] span[data-level] {
+ background-color: var(--surface-2);
+ }
+
+.filteringModeSlider[data-level="1"] span[data-level]:nth-of-type(1) ~ span[data-level] {
+ background-color: var(--surface-2);
+ }
+
+.filteringModeSlider[data-level="2"] span[data-level]:nth-of-type(2) ~ span[data-level] {
+ background-color: var(--surface-2);
+ }
+
+.filteringModeSlider[data-level]:not(.moving) span[data-level]:hover {
+ filter: brightness(0.9);
+ }
diff --git a/platform/mv3/extension/css/popup.css b/platform/mv3/extension/css/popup.css
new file mode 100644
index 0000000..385a051
--- /dev/null
+++ b/platform/mv3/extension/css/popup.css
@@ -0,0 +1,276 @@
+ /* External CSS values override */
+.fa-icon.fa-icon-badged > .fa-icon-badge {
+ bottom: auto;
+ top: -20%;
+ }
+
+:root body,
+:root.mobile body {
+ --font-size: 14px;
+ --popup-gap: var(--font-size);
+ --popup-gap-thin: calc(0.5 * var(--popup-gap));
+ --popup-gap-extra-thin: calc(0.25 * var(--popup-gap));
+ --popup-main-min-width: 18em;
+ --popup-firewall-min-width: 30em;
+ --popup-rule-cell-width: 5em;
+ font-size: var(--font-size);
+ line-height: 20px;
+ min-width: 100%;
+ }
+:root body.loading {
+ opacity: 0;
+ }
+a {
+ color: var(--ink-1);
+ fill: var(--ink-1);
+ text-decoration: none;
+ }
+:focus {
+ outline: 0;
+ }
+
+#main {
+ align-self: flex-start;
+ display: flex;
+ flex-direction: column;
+ max-width: 340px;
+ min-width: 100%;
+ }
+:root.portrait #main {
+ align-self: inherit;
+ }
+hr {
+ border: 0;
+ border-top: 1px solid var(--hr-ink);
+ margin: 0;
+ padding: 0;
+ }
+
+#hostname {
+ align-items: center;
+ background-color: var(--popup-toolbar-surface);
+ display: flex;
+ justify-content: center;
+ min-height: calc(var(--font-size) * 3);
+ padding: 0 var(--popup-gap-extra-thin);
+ text-align: center;
+ word-break: break-all;
+ }
+#hostname > span {
+ word-break: break-all;
+ }
+#hostname > span + span {
+ font-weight: 600;
+ }
+
+#filteringModeText {
+ color: var(--ink-3);
+ margin: var(--default-gap-small);
+ margin-top: 0;
+ text-align: center;
+ text-transform: lowercase;
+ }
+#filteringModeText > span {
+ color: var(--accent-surface-1);
+ }
+#filteringModeText > span:nth-of-type(2) {
+ display: none;
+ }
+#filteringModeText > span:nth-of-type(2):not(:empty) {
+ display: inline;
+ }
+#filteringModeText > span:nth-of-type(2):not(:empty)::before {
+ content: '\2002\2192\2002';
+ }
+[dir="rtl"] #filteringModeText > span:nth-of-type(2):not(:empty)::before {
+ content: '\2002\2190\2002';
+ }
+
+.filteringModeSlider {
+ align-self: center;
+ margin: var(--popup-gap);
+ width: calc(var(--popup-main-min-width) - 1em);
+ }
+
+.rulesetTools {
+ background-color: transparent;
+ border: 0;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-evenly;
+ width: 25%;
+ }
+.rulesetTools [id] {
+ background-color: var(--popup-ruleset-tool-surface);
+ border-radius: 4px;
+ cursor: pointer;
+ fill: var(--popup-ruleset-tool-ink);
+ flex-grow: 1;
+ font-size: 2.2em;
+ padding: 0;
+ visibility: hidden;
+ }
+.rulesetTools [id]:not(:first-of-type) {
+ margin-block-start: 1px;
+ }
+.rulesetTools [id] > svg {
+ fill: var(--ink-4);
+ }
+body.needReload #refresh {
+ visibility: visible;
+ }
+
+#rulesetStats {
+ padding: 0 var(--popup-gap-thin);
+ }
+#rulesetStats .rulesetDetails h1 {
+ font-size: 1em;
+ font-weight: normal;
+ margin: 0.5em 0 0.25em 0;
+ }
+#rulesetStats .rulesetDetails p {
+ color: var(--ink-2);
+ font-size: var(--font-size-smaller);
+ margin: 0.25em 0 0.5em 0.5em;
+ }
+
+.itemRibbon {
+ column-gap: var(--popup-gap);
+ display: grid;
+ grid-auto-columns: 1fr;
+ grid-auto-flow: column;
+ grid-template: auto / 1fr 1fr;
+ margin: var(--popup-gap);
+ }
+.itemRibbon > span + span {
+ text-align: end;
+ }
+
+.toolRibbon {
+ align-items: center;
+ background-color: var(--popup-toolbar-surface);
+ display: grid;
+ grid-auto-columns: 1fr;
+ grid-auto-flow: column;
+ grid-template: auto / repeat(5, 1fr);
+ justify-items: center;
+ white-space: normal;
+ }
+.toolRibbon .tool {
+ cursor: pointer;
+ display: flex;
+ flex-direction: column;
+ font-size: 1.4em;
+ min-width: 32px;
+ padding: var(--popup-gap)
+ var(--popup-gap-thin);
+ unicode-bidi: embed;
+ visibility: hidden;
+ }
+.toolRibbon .tool:hover {
+ color: var(--ink-1);
+ fill: var(--ink-1);
+ }
+.toolRibbon .tool.enabled {
+ visibility: visible;
+ }
+.toolRibbon .tool .caption {
+ font: 10px/12px sans-serif;
+ margin-top: 6px;
+ text-align: center;
+ }
+body.mobile.no-tooltips .toolRibbon .tool {
+ font-size: 1.6em;
+ }
+.toolRibbon.genericTools {
+ margin-bottom: 0;
+ }
+
+#moreOrLess {
+ column-gap: 0;
+ display: grid;
+ grid-template: auto / 1fr 1fr;
+ justify-items: stretch;
+ margin: 1px 0 0 0;
+ }
+#moreOrLess > span {
+ cursor: pointer;
+ margin: 0;
+ padding: var(--popup-gap-thin) var(--popup-gap);
+ user-select: none;
+ white-space: nowrap;
+ }
+#moreButton .fa-icon {
+ transform: rotate(180deg);
+ }
+#lessButton {
+ border-inline-start: 1px solid var(--surface-1);
+ text-align: end;
+ }
+body[data-section="a b"] #moreButton {
+ pointer-events: none;
+ visibility: hidden;
+ }
+body[data-section=""] #lessButton {
+ pointer-events: none;
+ visibility: hidden;
+ }
+body:not([data-section~="a"]) [data-section="a"] {
+ display: none;
+ }
+body:not([data-section~="b"]) [data-section="b"] {
+ display: none;
+ }
+
+/* configurable UI elements */
+:root:not(.mobile) .toolRibbon .caption,
+:root.mobile body.no-tooltips .toolRibbon .caption,
+:root.mobile body[data-ui~="-captions"] .toolRibbon .caption {
+ display: none;
+ }
+:root.mobile .toolRibbon .caption,
+:root:not(.mobile) body[data-ui~="+captions"] .toolRibbon .caption {
+ display: inherit;
+ }
+:root:not(.mobile) .toolRibbon .tool,
+:root.mobile body.no-tooltips .toolRibbon .tool,
+:root.mobile body[data-ui~="-captions"] .toolRibbon .tool {
+ padding: var(--popup-gap) var(--popup-gap-thin);
+ }
+:root.mobile #moreOrLess > span {
+ padding: var(--popup-gap);
+ }
+
+/* horizontally-constrained viewport */
+:root.portrait body {
+ overflow-y: auto;
+ width: 100%;
+ }
+:root.portrait #main {
+ max-width: unset;
+ }
+/* mouse-driven devices */
+:root.desktop {
+ display: flex;
+ }
+:root.desktop body {
+ --popup-gap: calc(var(--font-size) * 0.875);
+ }
+:root.desktop .rulesetTools [id]:hover {
+ background-color: var(--popup-ruleset-tool-surface-hover);
+ }
+:root.desktop .rulesetTools [id]:hover > svg {
+ fill: var(--ink-2);
+ }
+:root.desktop .tool:hover {
+ background-color: var(--popup-toolbar-surface-hover);
+ }
+:root.desktop #moreOrLess > span:hover {
+ background-color: var(--surface-2);
+ /* background-color: var(--popup-toolbar-surface-hover); */
+ }
+
+#templates {
+ display: none;
+ }
diff --git a/platform/mv3/extension/css/settings.css b/platform/mv3/extension/css/settings.css
new file mode 100644
index 0000000..f03e276
--- /dev/null
+++ b/platform/mv3/extension/css/settings.css
@@ -0,0 +1,192 @@
+@keyframes spin {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+ }
+legend {
+ color: var(--ink-3);
+ font-size: var(--font-size-smaller);
+ padding: var(--default-gap-xxsmall);
+ }
+body .firstRun {
+ display: none;
+ }
+body.firstRun .firstRun {
+ background-color: rgb(var(--dashboard-highlight-surface-rgb));
+ display: block;
+ padding: 8px;
+ }
+h3 {
+ margin: 1em 0;
+ }
+p {
+ white-space: pre-line;
+ }
+
+#defaultFilteringMode {
+ display: grid;
+ gap: 1em;
+ grid: auto-flow dense / 1fr 1fr 1fr;
+ }
+.filteringModeCard {
+ border: 1px solid var(--surface-3);
+ border-radius: 4px;
+ display: flex;
+ flex-direction: column;
+ }
+.filteringModeCard:has(.radio > [type="radio"]:checked) {
+ background-color: var(--surface-0);
+ }
+.filteringModeCard .input.radio ~ [data-i18n] {
+ text-transform: capitalize;
+ }
+.filteringModeCard span:has(> .input) {
+ align-items: center;
+ display: inline-flex;
+ }
+.filteringModeCard > div {
+ align-items: center;
+ box-sizing: border-box;
+ display: flex;
+ padding: 0.5em;
+ width: 100%;
+ }
+.filteringModeCard > div:nth-of-type(2) {
+ justify-content: center;
+ }
+.filteringModeCard > div:nth-of-type(3) {
+ border-top: 1px solid var(--surface-2);
+ font-size: var(--font-size-smaller);
+ white-space: pre-line;
+ }
+.filteringModeSlider {
+ height: calc(60px / 2);
+ pointer-events: none;
+ width: calc(240px / 2);
+ }
+
+h3[data-i18n="filteringMode0Name"]::first-letter {
+ text-transform: capitalize;
+ }
+#trustedSites {
+ box-sizing: border-box;
+ height: 6rem;
+ resize: vertical;
+ width: 100%;
+ }
+
+#lists {
+ margin: 0.5em 0 0 0;
+ padding: 0;
+ }
+.groupEntry:not([data-groupkey="user"]) .geDetails::before {
+ color: var(--ink-3);
+ content: '\2212';
+ font-family: monospace;
+ font-size: large;
+ margin-inline-end: 0.25em;
+ -webkit-margin-end: 0.25em;
+ }
+.groupEntry.hideUnused:not([data-groupkey="user"]) .geDetails::before {
+ content: '+';
+ }
+.groupEntry {
+ margin: 0.5em 0;
+ }
+.groupEntry .geDetails {
+ cursor: pointer;
+ }
+.groupEntry .geName {
+ pointer-events: none;
+ }
+.groupEntry .geCount {
+ color: var(--ink-3);
+ font-size: 90%;
+ pointer-events: none;
+ }
+.listEntries {
+ margin-inline-start: 0.6em;
+ -webkit-margin-start: 0.6em;
+ }
+.groupEntry:not([data-groupkey="user"]) .listEntry:not(.isDefault).unused {
+ display: none;
+ }
+.listEntry > * {
+ margin-left: 0;
+ margin-right: 0;
+ unicode-bidi: embed;
+ }
+.listEntry .listname {
+ white-space: nowrap;
+ }
+.listEntry a,
+.listEntry .fa-icon {
+ color: var(--info0-ink);
+ fill: var(--info0-ink);
+ display: none;
+ font-size: 120%;
+ margin: 0 0.2em 0 0;
+ }
+.listEntry .fa-icon:hover {
+ transform: scale(1.25);
+ }
+.listEntry .content {
+ display: inline-flex;
+ }
+.listEntry a.towiki {
+ display: inline-flex;
+ }
+.listEntry.support a.support {
+ display: inline-flex;
+ }
+.listEntry.mustread a.mustread {
+ color: var(--info1-ink);
+ fill: var(--info1-ink);
+ display: inline-flex;
+ }
+.listEntry .status {
+ cursor: default;
+ display: none;
+}
+
+body.noMoreRuleset .listEntry:not(.checked) {
+ opacity: 0.5;
+ pointer-events: none;
+}
+
+/* touch-screen devices */
+:root.mobile .listEntry .fa-icon {
+ font-size: 120%;
+ margin: 0 0.5em 0 0;
+ }
+:root.mobile .listEntries {
+ margin-inline-start: 0;
+ -webkit-margin-start: 0;
+ }
+:root.mobile .li.listEntry {
+ overflow-x: auto;
+ }
+:root.mobile .li.listEntry label > span:not([class]) {
+ flex-grow: 1;
+ }
+:root.mobile .li.listEntry .listname,
+:root.mobile .li.listEntry .iconbar {
+ align-items: flex-start;
+ display: flex;
+ white-space: nowrap;
+ }
+:root.mobile .li.listEntry .iconbar {
+ margin-top: 0.2em;
+ }
+
+#templates {
+ display: none;
+ }
+
+@media (max-width: 480px) {
+ #defaultFilteringMode {
+ grid: 1fr 1fr 1fr / auto-flow dense;
+ }
+ .filteringModeCard > div:nth-of-type(2) {
+ justify-content: flex-start;
+ }
+}
diff --git a/platform/mv3/extension/dashboard.html b/platform/mv3/extension/dashboard.html
new file mode 100644
index 0000000..698e1fb
--- /dev/null
+++ b/platform/mv3/extension/dashboard.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
+<title data-i18n="dashboardName"></title>
+<link rel="stylesheet" href="css/default.css">
+<link rel="stylesheet" href="css/common.css">
+<link rel="stylesheet" href="css/fa-icons.css">
+<link rel="stylesheet" href="css/dashboard.css">
+
+<link rel="stylesheet" href="css/dashboard-common.css">
+<link rel="stylesheet" href="css/filtering-mode.css">
+<link rel="stylesheet" href="css/settings.css">
+
+<link rel="shortcut icon" type="image/png" href="img/icon_64.png"/>
+</head>
+
+<body data-pane="settings">
+ <!-- -------- -->
+ <div id="dashboard-nav">
+ <span class="logo"><img data-i18n-title="extName" src="img/ublock.svg" alt="uBO Lite"></span><!--
+ --><button class="tabButton" type="button" data-pane="settings" data-i18n="settingsPageName" tabindex="0"></button><!--
+ --><button class="tabButton" type="button" data-pane="about" data-i18n="aboutPageName" tabindex="0"></button>
+ </div>
+ <!-- -------- -->
+ <section data-pane="settings">
+ <div class="firstRun">
+ <h3 data-i18n="firstRunSectionLabel"></h3>
+ <p data-i18n="firstRunDescription"></p>
+ </div>
+
+ <div>
+ <h3 data-i18n="defaultFilteringModeSectionLabel"></h3>
+ <p data-i18n="defaultFilteringModeDescription"></p>
+ <div id="defaultFilteringMode">
+ <label class="filteringModeCard">
+ <div>
+ <span><span class="input radio"><input type="radio" name="filteringMode" value="1"><svg viewBox="0 0 24 24"><path d="M 12 0 A 12 12 0 0 0 0 12 A 12 12 0 0 0 12 24 A 12 12 0 0 0 24 12 A 12 12 0 0 0 12 0 z M 12 2.5 A 9.5 9.5 0 0 1 21.5 12 A 9.5 9.5 0 0 1 12 21.5 A 9.5 9.5 0 0 1 2.5 12 A 9.5 9.5 0 0 1 12 2.5 z"/><circle cx="12" cy="12" r="7"/></svg></span><span data-i18n="filteringMode1Name">_</span></span>
+ </div>
+ <div>
+ <div class="filteringModeSlider" data-level="1">
+ <div class="filteringModeButton"><div></div></div>
+ <span data-level="0"></span>
+ <span data-level="1"></span>
+ <span data-level="2"></span>
+ <span data-level="3"></span>
+ </div>
+ </div>
+ <div data-i18n="basicFilteringModeDescription"></div>
+ </label>
+ <label class="filteringModeCard">
+ <div>
+ <span><span class="input radio"><input type="radio" name="filteringMode" value="2"><svg viewBox="0 0 24 24"><path d="M 12 0 A 12 12 0 0 0 0 12 A 12 12 0 0 0 12 24 A 12 12 0 0 0 24 12 A 12 12 0 0 0 12 0 z M 12 2.5 A 9.5 9.5 0 0 1 21.5 12 A 9.5 9.5 0 0 1 12 21.5 A 9.5 9.5 0 0 1 2.5 12 A 9.5 9.5 0 0 1 12 2.5 z"/><circle cx="12" cy="12" r="7"/></svg></span><span data-i18n="filteringMode2Name">_</span></span>
+ </div>
+ <div>
+ <div class="filteringModeSlider" data-level="2">
+ <div class="filteringModeButton"><div></div></div>
+ <span data-level="0"></span>
+ <span data-level="1"></span>
+ <span data-level="2"></span>
+ <span data-level="3"></span>
+ </div>
+ </div>
+ <div data-i18n="optimalFilteringModeDescription"></div>
+ </label>
+ <label class="filteringModeCard">
+ <div>
+ <span><span class="input radio"><input type="radio" name="filteringMode" value="3"><svg viewBox="0 0 24 24"><path d="M 12 0 A 12 12 0 0 0 0 12 A 12 12 0 0 0 12 24 A 12 12 0 0 0 24 12 A 12 12 0 0 0 12 0 z M 12 2.5 A 9.5 9.5 0 0 1 21.5 12 A 9.5 9.5 0 0 1 12 21.5 A 9.5 9.5 0 0 1 2.5 12 A 9.5 9.5 0 0 1 12 2.5 z"/><circle cx="12" cy="12" r="7"/></svg></span><span data-i18n="filteringMode3Name">_</span></span>
+ </div>
+ <div>
+ <div class="filteringModeSlider" data-level="3">
+ <div class="filteringModeButton"><div></div></div>
+ <span data-level="0"></span>
+ <span data-level="1"></span>
+ <span data-level="2"></span>
+ <span data-level="3"></span>
+ </div>
+ </div>
+ <div data-i18n="completeFilteringModeDescription"></div>
+ </label>
+ </div>
+ </div>
+
+ <div>
+ <h3 data-i18n="filteringMode0Name"></h3>
+ <p data-i18n="noFilteringModeDescription">_</p>
+ <p><textarea id="trustedSites" spellcheck="false"></textarea>
+ </p>
+ </div>
+
+ <div>
+ <h3 data-i18n="behaviorSectionLabel"></h3>
+ <p><label id="autoReload" data-i18n="autoReloadLabel"><span class="input checkbox"><input type="checkbox"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span>_</label>
+ </p>
+ </div>
+
+ <div>
+ <h3 data-i18n="aboutFilterLists"></h3>
+ <div>
+ <p id="listsOfBlockedHostsPrompt"></p>
+ </div>
+ <div>
+ <div id="lists"></div>
+ </div>
+ </div>
+
+ <div id="templates">
+ <div class="groupEntry">
+ <div class="geDetails"><span class="geName"></span> <span class="geCount"></span></div>
+ <div class="listEntries"></div>
+ </div>
+ <div class="li listEntry">
+ <label><span class="input checkbox"><input type="checkbox"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span><span class="listname forinput"></span> <span class="iconbar"><!--
+ --><a class="fa-icon support" href="#" target="_blank">home</a><!--
+ --><a class="fa-icon mustread" href="#" target="_blank">info-circle</a><!--
+ --></span></span></label>
+ </div>
+ </div>
+ </section>
+ <!-- -------- -->
+ <section data-pane="about">
+ <div class="body">
+ <div id="aboutNameVer" class="li"></div>
+ <div class="liul">
+ <div class="li">Copyright (c) Raymond Hill 2014-present</div>
+ </div>
+ <div class="li"><a href="https://github.com/gorhill/uBlock/wiki/Privacy-policy" data-i18n="aboutPrivacyPolicy"></a></div>
+ <div class="li"><a href="https://github.com/uBlockOrigin/uBOL-home/releases" data-i18n="aboutChangelog"></a></div>
+ <div class="li"><a href="https://github.com/gorhill/uBlock" data-i18n="aboutCode"></a></div>
+ <div class="li"><span data-i18n="aboutContributors"></span></div>
+ <div class="liul">
+ <div class="li"><a href="https://github.com/gorhill/uBlock/graphs/contributors" data-i18n="aboutSourceCode"></a></div>
+ <div class="li"><a href="https://crowdin.com/project/ublock" data-i18n="aboutTranslations"></a></div>
+ <div class="li"><a href="https://github.com/uBlockOrigin/uAssets/graphs/contributors" data-i18n="aboutFilterLists"></a></div>
+ </div>
+ <div class="li"><span data-i18n="aboutDependencies"></span></div>
+ <div class="liul">
+ <div class="li"><span><a href="https://github.com/chrismsimpson/Metropolis" target="_blank">Metropolis font family</a> by <a href="https://github.com/chrismsimpson">Chris Simpson</a></span></div>
+ <div class="li"><span><a href="https://github.com/rsms/inter" target="_blank">Inter font family</a> by <a href="https://github.com/rsms">Rasmus Andersson</a></span></div>
+ <div class="li"><span><a href="https://fontawesome.com/" target="_blank">FontAwesome font family</a> by <a href="https://github.com/davegandy">Dave Gandy</a></span></div>
+ <div class="li"><span><a href="https://github.com/mathiasbynens/punycode.js" target="_blank">Punycode.js</a> by <a href="https://github.com/mathiasbynens">Mathias Bynens</a></span></div>
+ <div class="li"><span><a href="https://flagpedia.net/" target="_blank">Flags of the World</a> by <a href="https://www.davidkrmela.com/">David Krmela</a></span></div>
+ </div>
+ </div>
+ </section>
+ <!-- -------- -->
+<script src="js/theme.js" type="module"></script>
+<script src="js/fa-icons.js" type="module"></script>
+<script src="js/i18n.js" type="module"></script>
+<script src="js/dashboard.js" type="module"></script>
+<script src="js/settings.js" type="module"></script>
+
+</body>
+</html>
diff --git a/platform/mv3/extension/img/icon_128.png b/platform/mv3/extension/img/icon_128.png
new file mode 100644
index 0000000..9824fa8
--- /dev/null
+++ b/platform/mv3/extension/img/icon_128.png
Binary files differ
diff --git a/platform/mv3/extension/img/icon_16.png b/platform/mv3/extension/img/icon_16.png
new file mode 100644
index 0000000..2bf29ef
--- /dev/null
+++ b/platform/mv3/extension/img/icon_16.png
Binary files differ
diff --git a/platform/mv3/extension/img/icon_32.png b/platform/mv3/extension/img/icon_32.png
new file mode 100644
index 0000000..7c8a455
--- /dev/null
+++ b/platform/mv3/extension/img/icon_32.png
Binary files differ
diff --git a/platform/mv3/extension/img/icon_64.png b/platform/mv3/extension/img/icon_64.png
new file mode 100644
index 0000000..2cf0a62
--- /dev/null
+++ b/platform/mv3/extension/img/icon_64.png
Binary files differ
diff --git a/platform/mv3/extension/img/ublock.svg b/platform/mv3/extension/img/ublock.svg
new file mode 100644
index 0000000..28e8f06
--- /dev/null
+++ b/platform/mv3/extension/img/ublock.svg
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ viewBox="0 0 128 128"
+ height="128"
+ width="128"
+ id="svg86"
+ sodipodi:docname="ublock.svg"
+ inkscape:export-filename="../../platform/mv3/extension/img/icon_16.png"
+ inkscape:export-xdpi="12"
+ inkscape:export-ydpi="12"
+ inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs90" />
+ <sodipodi:namedview
+ id="namedview88"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ showgrid="true"
+ inkscape:zoom="5.6734271"
+ inkscape:cx="-1.6744729"
+ inkscape:cy="76.232583"
+ inkscape:window-width="2560"
+ inkscape:window-height="1377"
+ inkscape:window-x="0"
+ inkscape:window-y="40"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg86">
+ <inkscape:grid
+ type="xygrid"
+ id="grid250"
+ spacingx="1"
+ spacingy="1"
+ empspacing="8" />
+ </sodipodi:namedview>
+ <g
+ style="display:inline;opacity:1"
+ id="g76">
+ <g
+ style="fill:#800000;fill-opacity:1;stroke:#ffffff;stroke-width:1.62100744;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ transform="matrix(0.6778654,0,0,0.56141828,-241.07537,-247.27712)"
+ id="g70" />
+ <g
+ transform="matrix(-0.6945203,0,0,0.56109687,375.02964,-247.42947)"
+ style="fill:#800000;fill-opacity:1;stroke:#ffffff;stroke-width:1.60191178000000001;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;stroke-linejoin:round"
+ id="g74">
+ <path
+ d="m 447.83376,669.09921 c -80.63119,-57.03115 -80.63119,-57.03115 -80.63119,-199.60903 34.55623,0 46.07497,0 80.63119,-28.51558 m 0,228.12461 c 80.6312,-57.03115 80.6312,-57.03115 80.6312,-199.60903 -34.55623,0 -46.07497,0 -80.6312,-28.51558"
+ style="fill:#800000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.60191178;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="path72" />
+ </g>
+ </g>
+ <rect
+ style="fill:#fefefe;fill-opacity:1;stroke-width:0.550132"
+ id="rect304"
+ width="63.999996"
+ height="12"
+ x="32"
+ y="58" />
+</svg>
diff --git a/platform/mv3/extension/js/background.js b/platform/mv3/extension/js/background.js
new file mode 100644
index 0000000..5ceacc4
--- /dev/null
+++ b/platform/mv3/extension/js/background.js
@@ -0,0 +1,354 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2022-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint esversion:11 */
+
+'use strict';
+
+/******************************************************************************/
+
+import {
+ browser,
+ dnr,
+ runtime,
+ localRead, localWrite,
+ sessionRead, sessionWrite,
+ adminRead,
+} from './ext.js';
+
+import {
+ getRulesetDetails,
+ defaultRulesetsFromLanguage,
+ enableRulesets,
+ getEnabledRulesetsDetails,
+ updateDynamicRules,
+} from './ruleset-manager.js';
+
+import {
+ registerInjectables,
+} from './scripting-manager.js';
+
+import {
+ getFilteringMode,
+ setFilteringMode,
+ getDefaultFilteringMode,
+ setDefaultFilteringMode,
+ getTrustedSites,
+ setTrustedSites,
+ syncWithBrowserPermissions,
+} from './mode-manager.js';
+
+import {
+ broadcastMessage,
+ ubolLog,
+} from './utils.js';
+
+/******************************************************************************/
+
+const rulesetConfig = {
+ version: '',
+ enabledRulesets: [ 'default' ],
+ autoReload: true,
+};
+
+const UBOL_ORIGIN = runtime.getURL('').replace(/\/$/, '');
+
+let firstRun = false;
+let wakeupRun = false;
+
+/******************************************************************************/
+
+function getCurrentVersion() {
+ return runtime.getManifest().version;
+}
+
+async function loadRulesetConfig() {
+ let data = await sessionRead('rulesetConfig');
+ if ( data ) {
+ rulesetConfig.version = data.version;
+ rulesetConfig.enabledRulesets = data.enabledRulesets;
+ rulesetConfig.autoReload = data.autoReload && true || false;
+ wakeupRun = true;
+ return;
+ }
+ data = await localRead('rulesetConfig');
+ if ( data ) {
+ rulesetConfig.version = data.version;
+ rulesetConfig.enabledRulesets = data.enabledRulesets;
+ rulesetConfig.autoReload = data.autoReload && true || false;
+ sessionWrite('rulesetConfig', rulesetConfig);
+ return;
+ }
+ rulesetConfig.enabledRulesets = await defaultRulesetsFromLanguage();
+ sessionWrite('rulesetConfig', rulesetConfig);
+ localWrite('rulesetConfig', rulesetConfig);
+ firstRun = true;
+}
+
+async function saveRulesetConfig() {
+ sessionWrite('rulesetConfig', rulesetConfig);
+ return localWrite('rulesetConfig', rulesetConfig);
+}
+
+/******************************************************************************/
+
+async function hasGreatPowers(origin) {
+ if ( /^https?:\/\//.test(origin) === false ) { return false; }
+ return browser.permissions.contains({
+ origins: [ `${origin}/*` ],
+ });
+}
+
+function hasOmnipotence() {
+ return browser.permissions.contains({
+ origins: [ '<all_urls>' ],
+ });
+}
+
+async function onPermissionsRemoved() {
+ const beforeMode = await getDefaultFilteringMode();
+ const modified = await syncWithBrowserPermissions();
+ if ( modified === false ) { return false; }
+ const afterMode = await getDefaultFilteringMode();
+ if ( beforeMode > 1 && afterMode <= 1 ) {
+ updateDynamicRules();
+ }
+ registerInjectables();
+ return true;
+}
+
+/******************************************************************************/
+
+function onMessage(request, sender, callback) {
+
+ // Does not require trusted origin.
+
+ switch ( request.what ) {
+
+ case 'insertCSS': {
+ const tabId = sender?.tab?.id ?? false;
+ const frameId = sender?.frameId ?? false;
+ if ( tabId === false || frameId === false ) { return; }
+ browser.scripting.insertCSS({
+ css: request.css,
+ origin: 'USER',
+ target: { tabId, frameIds: [ frameId ] },
+ }).catch(reason => {
+ console.log(reason);
+ });
+ return false;
+ }
+
+ default:
+ break;
+ }
+
+ // Does require trusted origin.
+
+ // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/MessageSender
+ // Firefox API does not set `sender.origin`
+ if ( sender.origin !== undefined && sender.origin !== UBOL_ORIGIN ) { return; }
+
+ switch ( request.what ) {
+
+ case 'applyRulesets': {
+ enableRulesets(request.enabledRulesets).then(( ) => {
+ rulesetConfig.enabledRulesets = request.enabledRulesets;
+ return saveRulesetConfig();
+ }).then(( ) => {
+ registerInjectables();
+ callback();
+ broadcastMessage({ enabledRulesets: rulesetConfig.enabledRulesets });
+ });
+ return true;
+ }
+
+ case 'getOptionsPageData': {
+ Promise.all([
+ getDefaultFilteringMode(),
+ getTrustedSites(),
+ getRulesetDetails(),
+ dnr.getEnabledRulesets(),
+ ]).then(results => {
+ const [
+ defaultFilteringMode,
+ trustedSites,
+ rulesetDetails,
+ enabledRulesets,
+ ] = results;
+ callback({
+ defaultFilteringMode,
+ trustedSites: Array.from(trustedSites),
+ enabledRulesets,
+ maxNumberOfEnabledRulesets: dnr.MAX_NUMBER_OF_ENABLED_STATIC_RULESETS,
+ rulesetDetails: Array.from(rulesetDetails.values()),
+ autoReload: rulesetConfig.autoReload,
+ firstRun,
+ });
+ firstRun = false;
+ });
+ return true;
+ }
+
+ case 'setAutoReload':
+ rulesetConfig.autoReload = request.state && true || false;
+ saveRulesetConfig().then(( ) => {
+ callback();
+ broadcastMessage({ autoReload: rulesetConfig.autoReload });
+ });
+ return true;
+
+ case 'popupPanelData': {
+ Promise.all([
+ getFilteringMode(request.hostname),
+ hasOmnipotence(),
+ hasGreatPowers(request.origin),
+ getEnabledRulesetsDetails(),
+ ]).then(results => {
+ callback({
+ level: results[0],
+ autoReload: rulesetConfig.autoReload,
+ hasOmnipotence: results[1],
+ hasGreatPowers: results[2],
+ rulesetDetails: results[3],
+ });
+ });
+ return true;
+ }
+
+ case 'getFilteringMode': {
+ getFilteringMode(request.hostname).then(actualLevel => {
+ callback(actualLevel);
+ });
+ return true;
+ }
+
+ case 'setFilteringMode': {
+ getFilteringMode(request.hostname).then(actualLevel => {
+ if ( request.level === actualLevel ) { return actualLevel; }
+ return setFilteringMode(request.hostname, request.level);
+ }).then(actualLevel => {
+ registerInjectables();
+ callback(actualLevel);
+ });
+ return true;
+ }
+
+ case 'setDefaultFilteringMode': {
+ getDefaultFilteringMode().then(beforeLevel =>
+ setDefaultFilteringMode(request.level).then(afterLevel =>
+ ({ beforeLevel, afterLevel })
+ )
+ ).then(({ beforeLevel, afterLevel }) => {
+ if ( beforeLevel === 1 || afterLevel === 1 ) {
+ updateDynamicRules();
+ }
+ if ( afterLevel !== beforeLevel ) {
+ registerInjectables();
+ }
+ callback(afterLevel);
+ });
+ return true;
+ }
+
+ case 'setTrustedSites':
+ setTrustedSites(request.hostnames).then(( ) => {
+ registerInjectables();
+ return Promise.all([
+ getDefaultFilteringMode(),
+ getTrustedSites(),
+ ]);
+ }).then(results => {
+ callback({
+ defaultFilteringMode: results[0],
+ trustedSites: Array.from(results[1]),
+ });
+ });
+ return true;
+
+ default:
+ break;
+ }
+}
+
+/******************************************************************************/
+
+async function start() {
+ await loadRulesetConfig();
+
+ if ( wakeupRun === false ) {
+ await enableRulesets(rulesetConfig.enabledRulesets);
+ }
+
+ // We need to update the regex rules only when ruleset version changes.
+ if ( wakeupRun === false ) {
+ const currentVersion = getCurrentVersion();
+ if ( currentVersion !== rulesetConfig.version ) {
+ ubolLog(`Version change: ${rulesetConfig.version} => ${currentVersion}`);
+ updateDynamicRules().then(( ) => {
+ rulesetConfig.version = currentVersion;
+ saveRulesetConfig();
+ });
+ }
+ }
+
+ // Permissions may have been removed while the extension was disabled
+ const permissionsChanged = await onPermissionsRemoved();
+
+ // Unsure whether the browser remembers correctly registered css/scripts
+ // after we quit the browser. For now uBOL will check unconditionally at
+ // launch time whether content css/scripts are properly registered.
+ if ( wakeupRun === false || permissionsChanged ) {
+ registerInjectables();
+
+ const enabledRulesets = await dnr.getEnabledRulesets();
+ ubolLog(`Enabled rulesets: ${enabledRulesets}`);
+
+ dnr.getAvailableStaticRuleCount().then(count => {
+ ubolLog(`Available static rule count: ${count}`);
+ });
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/declarativeNetRequest
+ // Firefox API does not support `dnr.setExtensionActionOptions`
+ if ( wakeupRun === false && dnr.setExtensionActionOptions ) {
+ dnr.setExtensionActionOptions({ displayActionCountAsBadgeText: true });
+ }
+
+ runtime.onMessage.addListener(onMessage);
+
+ browser.permissions.onRemoved.addListener(
+ ( ) => { onPermissionsRemoved(); }
+ );
+
+ if ( firstRun ) {
+ const disableFirstRunPage = await adminRead('disableFirstRunPage');
+ if ( disableFirstRunPage !== true ) {
+ runtime.openOptionsPage();
+ }
+ }
+}
+
+try {
+ start();
+} catch(reason) {
+ console.trace(reason);
+}
diff --git a/platform/mv3/extension/js/dashboard.js b/platform/mv3/extension/js/dashboard.js
new file mode 100644
index 0000000..363f301
--- /dev/null
+++ b/platform/mv3/extension/js/dashboard.js
@@ -0,0 +1,40 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+import { runtime } from './ext.js';
+import { dom } from './dom.js';
+
+/******************************************************************************/
+
+{
+ const manifest = runtime.getManifest();
+ dom.text('#aboutNameVer', `${manifest.name} ${manifest.version}`);
+}
+
+dom.attr('a', 'target', '_blank');
+
+dom.on('#dashboard-nav', 'click', '.tabButton', ev => {
+ dom.body.dataset.pane = ev.target.dataset.pane;
+});
+
+/******************************************************************************/
diff --git a/platform/mv3/extension/js/ext.js b/platform/mv3/extension/js/ext.js
new file mode 100644
index 0000000..185fa9c
--- /dev/null
+++ b/platform/mv3/extension/js/ext.js
@@ -0,0 +1,119 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2022-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint esversion:11 */
+
+'use strict';
+
+/******************************************************************************/
+
+export const browser =
+ self.browser instanceof Object &&
+ self.browser instanceof Element === false
+ ? self.browser
+ : self.chrome;
+
+export const dnr = browser.declarativeNetRequest;
+export const i18n = browser.i18n;
+export const runtime = browser.runtime;
+
+/******************************************************************************/
+
+// The extension's service worker can be evicted at any time, so when we
+// send a message, we try a few more times when the message fails to be sent.
+
+export function sendMessage(msg) {
+ return new Promise((resolve, reject) => {
+ let i = 5;
+ const send = ( ) => {
+ runtime.sendMessage(msg).then(response => {
+ resolve(response);
+ }).catch(reason => {
+ i -= 1;
+ if ( i <= 0 ) {
+ reject(reason);
+ } else {
+ setTimeout(send, 200);
+ }
+ });
+ };
+ send();
+ });
+}
+
+/******************************************************************************/
+
+export async function localRead(key) {
+ if ( browser.storage instanceof Object === false ) { return; }
+ if ( browser.storage.local instanceof Object === false ) { return; }
+ try {
+ const bin = await browser.storage.local.get(key);
+ if ( bin instanceof Object === false ) { return; }
+ return bin[key] ?? undefined;
+ } catch(ex) {
+ }
+}
+
+export async function localWrite(key, value) {
+ if ( browser.storage instanceof Object === false ) { return; }
+ if ( browser.storage.local instanceof Object === false ) { return; }
+ return browser.storage.local.set({ [key]: value });
+}
+
+export async function localRemove(key) {
+ if ( browser.storage instanceof Object === false ) { return; }
+ if ( browser.storage.local instanceof Object === false ) { return; }
+ return browser.storage.local.remove(key);
+}
+
+/******************************************************************************/
+
+export async function sessionRead(key) {
+ if ( browser.storage instanceof Object === false ) { return; }
+ if ( browser.storage.session instanceof Object === false ) { return; }
+ try {
+ const bin = await browser.storage.session.get(key);
+ if ( bin instanceof Object === false ) { return; }
+ return bin[key] ?? undefined;
+ } catch(ex) {
+ }
+}
+
+export async function sessionWrite(key, value) {
+ if ( browser.storage instanceof Object === false ) { return; }
+ if ( browser.storage.session instanceof Object === false ) { return; }
+ return browser.storage.session.set({ [key]: value });
+}
+
+/******************************************************************************/
+
+export async function adminRead(key) {
+ if ( browser.storage instanceof Object === false ) { return; }
+ if ( browser.storage.local instanceof Object === false ) { return; }
+ try {
+ const bin = await browser.storage.managed.get(key);
+ if ( bin instanceof Object === false ) { return; }
+ return bin[key] ?? undefined;
+ } catch(ex) {
+ }
+}
+
+/******************************************************************************/
diff --git a/platform/mv3/extension/js/fetch.js b/platform/mv3/extension/js/fetch.js
new file mode 100644
index 0000000..5570159
--- /dev/null
+++ b/platform/mv3/extension/js/fetch.js
@@ -0,0 +1,38 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2022-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint esversion:11 */
+
+'use strict';
+
+/******************************************************************************/
+
+function fetchJSON(path) {
+ return fetch(`${path}.json`).then(response =>
+ response.json()
+ ).catch(reason => {
+ console.info(reason);
+ });
+}
+
+/******************************************************************************/
+
+export { fetchJSON };
diff --git a/platform/mv3/extension/js/mode-manager.js b/platform/mv3/extension/js/mode-manager.js
new file mode 100644
index 0000000..bc76199
--- /dev/null
+++ b/platform/mv3/extension/js/mode-manager.js
@@ -0,0 +1,426 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2022-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint esversion:11 */
+
+'use strict';
+
+/******************************************************************************/
+
+import {
+ browser,
+ dnr,
+ localRead, localWrite, localRemove,
+ sessionRead, sessionWrite,
+ adminRead,
+} from './ext.js';
+
+import {
+ broadcastMessage,
+ hostnamesFromMatches,
+ isDescendantHostnameOfIter,
+ toBroaderHostname,
+} from './utils.js';
+
+import {
+ TRUSTED_DIRECTIVE_BASE_RULE_ID,
+ getDynamicRules
+} from './ruleset-manager.js';
+
+/******************************************************************************/
+
+// 0: no filtering
+// 1: basic filtering
+// 2: optimal filtering
+// 3: complete filtering
+
+export const MODE_NONE = 0;
+export const MODE_BASIC = 1;
+export const MODE_OPTIMAL = 2;
+export const MODE_COMPLETE = 3;
+
+/******************************************************************************/
+
+const pruneDescendantHostnamesFromSet = (hostname, hnSet) => {
+ for ( const hn of hnSet ) {
+ if ( hn.endsWith(hostname) === false ) { continue; }
+ if ( hn === hostname ) { continue; }
+ if ( hn.at(-hostname.length-1) !== '.' ) { continue; }
+ hnSet.delete(hn);
+ }
+};
+
+const pruneHostnameFromSet = (hostname, hnSet) => {
+ let hn = hostname;
+ for (;;) {
+ hnSet.delete(hn);
+ hn = toBroaderHostname(hn);
+ if ( hn === '*' ) { break; }
+ }
+};
+
+/******************************************************************************/
+
+const eqSets = (setBefore, setAfter) => {
+ for ( const hn of setAfter ) {
+ if ( setBefore.has(hn) === false ) { return false; }
+ }
+ for ( const hn of setBefore ) {
+ if ( setAfter.has(hn) === false ) { return false; }
+ }
+ return true;
+};
+
+/******************************************************************************/
+
+const serializeModeDetails = details => {
+ return {
+ none: Array.from(details.none),
+ basic: Array.from(details.basic),
+ optimal: Array.from(details.optimal),
+ complete: Array.from(details.complete),
+ };
+};
+
+const unserializeModeDetails = details => {
+ return {
+ none: new Set(details.none),
+ basic: new Set(details.basic ?? details.network),
+ optimal: new Set(details.optimal ?? details.extendedSpecific),
+ complete: new Set(details.complete ?? details.extendedGeneric),
+ };
+};
+
+/******************************************************************************/
+
+function lookupFilteringMode(filteringModes, hostname) {
+ const { none, basic, optimal, complete } = filteringModes;
+ if ( hostname === 'all-urls' ) {
+ if ( filteringModes.none.has('all-urls') ) { return MODE_NONE; }
+ if ( filteringModes.basic.has('all-urls') ) { return MODE_BASIC; }
+ if ( filteringModes.optimal.has('all-urls') ) { return MODE_OPTIMAL; }
+ if ( filteringModes.complete.has('all-urls') ) { return MODE_COMPLETE; }
+ return MODE_BASIC;
+ }
+ if ( none.has(hostname) ) { return MODE_NONE; }
+ if ( none.has('all-urls') === false ) {
+ if ( isDescendantHostnameOfIter(hostname, none) ) { return MODE_NONE; }
+ }
+ if ( basic.has(hostname) ) { return MODE_BASIC; }
+ if ( basic.has('all-urls') === false ) {
+ if ( isDescendantHostnameOfIter(hostname, basic) ) { return MODE_BASIC; }
+ }
+ if ( optimal.has(hostname) ) { return MODE_OPTIMAL; }
+ if ( optimal.has('all-urls') === false ) {
+ if ( isDescendantHostnameOfIter(hostname, optimal) ) { return MODE_OPTIMAL; }
+ }
+ if ( complete.has(hostname) ) { return MODE_COMPLETE; }
+ if ( complete.has('all-urls') === false ) {
+ if ( isDescendantHostnameOfIter(hostname, complete) ) { return MODE_COMPLETE; }
+ }
+ return lookupFilteringMode(filteringModes, 'all-urls');
+}
+
+/******************************************************************************/
+
+function applyFilteringMode(filteringModes, hostname, afterLevel) {
+ const defaultLevel = lookupFilteringMode(filteringModes, 'all-urls');
+ if ( hostname === 'all-urls' ) {
+ if ( afterLevel === defaultLevel ) { return afterLevel; }
+ switch ( afterLevel ) {
+ case MODE_NONE:
+ filteringModes.none.clear();
+ filteringModes.none.add('all-urls');
+ break;
+ case MODE_BASIC:
+ filteringModes.basic.clear();
+ filteringModes.basic.add('all-urls');
+ break;
+ case MODE_OPTIMAL:
+ filteringModes.optimal.clear();
+ filteringModes.optimal.add('all-urls');
+ break;
+ case MODE_COMPLETE:
+ filteringModes.complete.clear();
+ filteringModes.complete.add('all-urls');
+ break;
+ }
+ switch ( defaultLevel ) {
+ case MODE_NONE:
+ filteringModes.none.delete('all-urls');
+ break;
+ case MODE_BASIC:
+ filteringModes.basic.delete('all-urls');
+ break;
+ case MODE_OPTIMAL:
+ filteringModes.optimal.delete('all-urls');
+ break;
+ case MODE_COMPLETE:
+ filteringModes.complete.delete('all-urls');
+ break;
+ }
+ return lookupFilteringMode(filteringModes, 'all-urls');
+ }
+ const beforeLevel = lookupFilteringMode(filteringModes, hostname);
+ if ( afterLevel === beforeLevel ) { return afterLevel; }
+ const { none, basic, optimal, complete } = filteringModes;
+ switch ( beforeLevel ) {
+ case MODE_NONE:
+ pruneHostnameFromSet(hostname, none);
+ break;
+ case MODE_BASIC:
+ pruneHostnameFromSet(hostname, basic);
+ break;
+ case MODE_OPTIMAL:
+ pruneHostnameFromSet(hostname, optimal);
+ break;
+ case MODE_COMPLETE:
+ pruneHostnameFromSet(hostname, complete);
+ break;
+ }
+ if ( afterLevel !== defaultLevel ) {
+ switch ( afterLevel ) {
+ case MODE_NONE:
+ if ( isDescendantHostnameOfIter(hostname, none) === false ) {
+ filteringModes.none.add(hostname);
+ pruneDescendantHostnamesFromSet(hostname, none);
+ }
+ break;
+ case MODE_BASIC:
+ if ( isDescendantHostnameOfIter(hostname, basic) === false ) {
+ filteringModes.basic.add(hostname);
+ pruneDescendantHostnamesFromSet(hostname, basic);
+ }
+ break;
+ case MODE_OPTIMAL:
+ if ( isDescendantHostnameOfIter(hostname, optimal) === false ) {
+ filteringModes.optimal.add(hostname);
+ pruneDescendantHostnamesFromSet(hostname, optimal);
+ }
+ break;
+ case MODE_COMPLETE:
+ if ( isDescendantHostnameOfIter(hostname, complete) === false ) {
+ filteringModes.complete.add(hostname);
+ pruneDescendantHostnamesFromSet(hostname, complete);
+ }
+ break;
+ }
+ }
+ return lookupFilteringMode(filteringModes, hostname);
+}
+
+/******************************************************************************/
+
+async function readFilteringModeDetails() {
+ if ( readFilteringModeDetails.cache ) {
+ return readFilteringModeDetails.cache;
+ }
+ const sessionModes = await sessionRead('filteringModeDetails');
+ if ( sessionModes instanceof Object ) {
+ readFilteringModeDetails.cache = unserializeModeDetails(sessionModes);
+ return readFilteringModeDetails.cache;
+ }
+ let [ userModes, adminNoFiltering ] = await Promise.all([
+ localRead('filteringModeDetails'),
+ localRead('adminNoFiltering'),
+ ]);
+ if ( userModes === undefined ) {
+ userModes = { basic: [ 'all-urls' ] };
+ }
+ userModes = unserializeModeDetails(userModes);
+ if ( Array.isArray(adminNoFiltering) ) {
+ for ( const hn of adminNoFiltering ) {
+ applyFilteringMode(userModes, hn, 0);
+ }
+ }
+ filteringModesToDNR(userModes);
+ sessionWrite('filteringModeDetails', serializeModeDetails(userModes));
+ readFilteringModeDetails.cache = userModes;
+ adminRead('noFiltering').then(results => {
+ if ( results ) {
+ localWrite('adminNoFiltering', results);
+ } else {
+ localRemove('adminNoFiltering');
+ }
+ });
+ return userModes;
+}
+
+/******************************************************************************/
+
+async function writeFilteringModeDetails(afterDetails) {
+ await filteringModesToDNR(afterDetails);
+ const data = serializeModeDetails(afterDetails);
+ localWrite('filteringModeDetails', data);
+ sessionWrite('filteringModeDetails', data);
+ readFilteringModeDetails.cache = unserializeModeDetails(data);
+
+ Promise.all([
+ getDefaultFilteringMode(),
+ getTrustedSites(),
+ ]).then(results => {
+ broadcastMessage({
+ defaultFilteringMode: results[0],
+ trustedSites: Array.from(results[1]),
+ });
+ });
+}
+
+/******************************************************************************/
+
+async function filteringModesToDNR(modes) {
+ const dynamicRuleMap = await getDynamicRules();
+ const presentRule = dynamicRuleMap.get(TRUSTED_DIRECTIVE_BASE_RULE_ID);
+ const presentNone = new Set(
+ presentRule && presentRule.condition.requestDomains
+ );
+ if ( eqSets(presentNone, modes.none) ) { return; }
+ const removeRuleIds = [];
+ if ( presentRule !== undefined ) {
+ removeRuleIds.push(TRUSTED_DIRECTIVE_BASE_RULE_ID);
+ dynamicRuleMap.delete(TRUSTED_DIRECTIVE_BASE_RULE_ID);
+ }
+ const addRules = [];
+ if ( modes.none.size !== 0 ) {
+ const rule = {
+ id: TRUSTED_DIRECTIVE_BASE_RULE_ID,
+ action: { type: 'allowAllRequests' },
+ condition: {
+ resourceTypes: [ 'main_frame' ],
+ },
+ priority: 100,
+ };
+ if (
+ modes.none.size !== 1 ||
+ modes.none.has('all-urls') === false
+ ) {
+ rule.condition.requestDomains = Array.from(modes.none);
+ }
+ addRules.push(rule);
+ dynamicRuleMap.set(TRUSTED_DIRECTIVE_BASE_RULE_ID, rule);
+ }
+ const updateOptions = {};
+ if ( addRules.length ) {
+ updateOptions.addRules = addRules;
+ }
+ if ( removeRuleIds.length ) {
+ updateOptions.removeRuleIds = removeRuleIds;
+ }
+ await dnr.updateDynamicRules(updateOptions);
+}
+
+/******************************************************************************/
+
+export async function getFilteringModeDetails() {
+ const actualDetails = await readFilteringModeDetails();
+ return {
+ none: new Set(actualDetails.none),
+ basic: new Set(actualDetails.basic),
+ optimal: new Set(actualDetails.optimal),
+ complete: new Set(actualDetails.complete),
+ };
+}
+
+/******************************************************************************/
+
+export async function getFilteringMode(hostname) {
+ const filteringModes = await getFilteringModeDetails();
+ return lookupFilteringMode(filteringModes, hostname);
+}
+
+export async function setFilteringMode(hostname, afterLevel) {
+ const filteringModes = await getFilteringModeDetails();
+ const level = applyFilteringMode(filteringModes, hostname, afterLevel);
+ await writeFilteringModeDetails(filteringModes);
+ return level;
+}
+
+/******************************************************************************/
+
+export function getDefaultFilteringMode() {
+ return getFilteringMode('all-urls');
+}
+
+export function setDefaultFilteringMode(afterLevel) {
+ return setFilteringMode('all-urls', afterLevel);
+}
+
+/******************************************************************************/
+
+export async function getTrustedSites() {
+ const filteringModes = await getFilteringModeDetails();
+ return filteringModes.none;
+}
+
+export async function setTrustedSites(hostnames) {
+ const filteringModes = await getFilteringModeDetails();
+ const { none } = filteringModes;
+ const hnSet = new Set(hostnames);
+ let modified = false;
+ for ( const hn of none ) {
+ if ( hnSet.has(hn) ) {
+ hnSet.delete(hn);
+ } else {
+ none.delete(hn);
+ modified = true;
+ }
+ }
+ for ( const hn of hnSet ) {
+ const level = applyFilteringMode(filteringModes, hn, MODE_NONE);
+ if ( level !== MODE_NONE ) { continue; }
+ modified = true;
+ }
+ if ( modified === false ) { return; }
+ return writeFilteringModeDetails(filteringModes);
+}
+
+/******************************************************************************/
+
+export async function syncWithBrowserPermissions() {
+ const [ permissions, beforeMode ] = await Promise.all([
+ browser.permissions.getAll(),
+ getDefaultFilteringMode(),
+ ]);
+ const allowedHostnames = new Set(hostnamesFromMatches(permissions.origins || []));
+ let modified = false;
+ if ( beforeMode > MODE_BASIC && allowedHostnames.has('all-urls') === false ) {
+ await setDefaultFilteringMode(MODE_BASIC);
+ modified = true;
+ }
+ const afterMode = await getDefaultFilteringMode();
+ if ( afterMode > MODE_BASIC ) { return false; }
+ const filteringModes = await getFilteringModeDetails();
+ const { optimal, complete } = filteringModes;
+ for ( const hn of optimal ) {
+ if ( allowedHostnames.has(hn) ) { continue; }
+ optimal.delete(hn);
+ modified = true;
+ }
+ for ( const hn of complete ) {
+ if ( allowedHostnames.has(hn) ) { continue; }
+ complete.delete(hn);
+ modified = true;
+ }
+ await writeFilteringModeDetails(filteringModes);
+ return modified;
+}
+
+/******************************************************************************/
diff --git a/platform/mv3/extension/js/popup.js b/platform/mv3/extension/js/popup.js
new file mode 100644
index 0000000..29b993b
--- /dev/null
+++ b/platform/mv3/extension/js/popup.js
@@ -0,0 +1,351 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2022-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint esversion:11 */
+
+'use strict';
+
+/******************************************************************************/
+
+import {
+ browser,
+ runtime,
+ sendMessage,
+ localRead, localWrite,
+} from './ext.js';
+
+import { dom, qs$ } from './dom.js';
+import { i18n, i18n$ } from './i18n.js';
+import punycode from './punycode.js';
+
+/******************************************************************************/
+
+const popupPanelData = {};
+const currentTab = {};
+let tabHostname = '';
+
+/******************************************************************************/
+
+function normalizedHostname(hn) {
+ return hn.replace(/^www\./, '');
+}
+
+/******************************************************************************/
+
+const BLOCKING_MODE_MAX = 3;
+
+function setFilteringMode(level, commit = false) {
+ const modeSlider = qs$('.filteringModeSlider');
+ modeSlider.dataset.level = level;
+ if ( qs$('.filteringModeSlider.moving') === null ) {
+ dom.text(
+ '#filteringModeText > span:nth-of-type(1)',
+ i18n$(`filteringMode${level}Name`)
+ );
+ }
+ if ( commit !== true ) { return; }
+ commitFilteringMode();
+}
+
+async function commitFilteringMode() {
+ if ( tabHostname === '' ) { return; }
+ const targetHostname = normalizedHostname(tabHostname);
+ const modeSlider = qs$('.filteringModeSlider');
+ const afterLevel = parseInt(modeSlider.dataset.level, 10);
+ const beforeLevel = parseInt(modeSlider.dataset.levelBefore, 10);
+ if ( afterLevel > 1 ) {
+ let granted = false;
+ try {
+ granted = await browser.permissions.request({
+ origins: [ `*://*.${targetHostname}/*` ],
+ });
+ } catch(ex) {
+ }
+ if ( granted !== true ) {
+ setFilteringMode(beforeLevel);
+ return;
+ }
+ }
+ dom.text(
+ '#filteringModeText > span:nth-of-type(1)',
+ i18n$(`filteringMode${afterLevel}Name`)
+ );
+ const actualLevel = await sendMessage({
+ what: 'setFilteringMode',
+ hostname: targetHostname,
+ level: afterLevel,
+ });
+ if ( actualLevel !== afterLevel ) {
+ setFilteringMode(actualLevel);
+ }
+ if ( actualLevel !== beforeLevel && popupPanelData.autoReload ) {
+ browser.tabs.reload(currentTab.id);
+ }
+}
+
+{
+ let mx0 = 0;
+ let mx1 = 0;
+ let l0 = 0;
+ let lMax = 0;
+ let timer;
+
+ const move = ( ) => {
+ timer = undefined;
+ const l1 = Math.min(Math.max(l0 + mx1 - mx0, 0), lMax);
+ let level = Math.floor(l1 * BLOCKING_MODE_MAX / lMax);
+ if ( qs$('body[dir="rtl"]') !== null ) {
+ level = 3 - level;
+ }
+ const modeSlider = qs$('.filteringModeSlider');
+ if ( `${level}` === modeSlider.dataset.level ) { return; }
+ dom.text(
+ '#filteringModeText > span:nth-of-type(2)',
+ i18n$(`filteringMode${level}Name`)
+ );
+ setFilteringMode(level);
+ };
+
+ const moveAsync = ev => {
+ if ( timer !== undefined ) { return; }
+ mx1 = ev.pageX;
+ timer = self.requestAnimationFrame(move);
+ };
+
+ const stop = ev => {
+ if ( ev.button !== 0 ) { return; }
+ const modeSlider = qs$('.filteringModeSlider');
+ if ( dom.cl.has(modeSlider, 'moving') === false ) { return; }
+ dom.cl.remove(modeSlider, 'moving');
+ self.removeEventListener('mousemove', moveAsync, { capture: true });
+ self.removeEventListener('mouseup', stop, { capture: true });
+ dom.text('#filteringModeText > span:nth-of-type(2)', '');
+ commitFilteringMode();
+ ev.stopPropagation();
+ ev.preventDefault();
+ if ( timer !== undefined ) {
+ self.cancelAnimationFrame(timer);
+ timer = undefined;
+ }
+ };
+
+ const startSliding = ev => {
+ if ( ev.button !== 0 ) { return; }
+ const modeButton = qs$('.filteringModeButton');
+ if ( ev.currentTarget !== modeButton ) { return; }
+ const modeSlider = qs$('.filteringModeSlider');
+ if ( dom.cl.has(modeSlider, 'moving') ) { return; }
+ modeSlider.dataset.levelBefore = modeSlider.dataset.level;
+ mx0 = ev.pageX;
+ const buttonRect = modeButton.getBoundingClientRect();
+ l0 = buttonRect.left + buttonRect.width / 2;
+ const sliderRect = modeSlider.getBoundingClientRect();
+ lMax = sliderRect.width - buttonRect.width ;
+ dom.cl.add(modeSlider, 'moving');
+ self.addEventListener('mousemove', moveAsync, { capture: true });
+ self.addEventListener('mouseup', stop, { capture: true });
+ ev.stopPropagation();
+ ev.preventDefault();
+ };
+
+ dom.on('.filteringModeButton', 'mousedown', startSliding);
+}
+
+dom.on(
+ '.filteringModeSlider',
+ 'click',
+ '.filteringModeSlider span[data-level]',
+ ev => {
+ const modeSlider = qs$('.filteringModeSlider');
+ modeSlider.dataset.levelBefore = modeSlider.dataset.level;
+ const span = ev.target;
+ const level = parseInt(span.dataset.level, 10);
+ setFilteringMode(level, true);
+ }
+);
+
+dom.on(
+ '.filteringModeSlider',
+ 'mouseenter',
+ '.filteringModeSlider span[data-level]',
+ ev => {
+ const span = ev.target;
+ const level = parseInt(span.dataset.level, 10);
+ dom.text(
+ '#filteringModeText > span:nth-of-type(2)',
+ i18n$(`filteringMode${level}Name`)
+ );
+ }
+);
+
+dom.on(
+ '.filteringModeSlider',
+ 'mouseleave',
+ '.filteringModeSlider span[data-level]',
+ ( ) => {
+ dom.text('#filteringModeText > span:nth-of-type(2)', '');
+ }
+);
+
+/******************************************************************************/
+
+// The popup panel is made of sections. Visibility of sections can be
+// toggled on/off.
+
+const maxNumberOfSections = 2;
+
+const sectionBitsFromAttribute = function() {
+ const value = dom.body.dataset.section;
+ if ( value === '' ) { return 0; }
+ let bits = 0;
+ for ( const c of value.split(' ') ) {
+ bits |= 1 << (c.charCodeAt(0) - 97);
+ }
+ return bits;
+};
+
+const sectionBitsToAttribute = function(bits) {
+ if ( typeof bits !== 'number' ) { return; }
+ if ( isNaN(bits) ) { return; }
+ const value = [];
+ for ( let i = 0; i < maxNumberOfSections; i++ ) {
+ const bit = 1 << i;
+ if ( (bits & bit) === 0 ) { continue; }
+ value.push(String.fromCharCode(97 + i));
+ }
+ dom.body.dataset.section = value.join(' ');
+};
+
+async function toggleSections(more) {
+ let currentBits = sectionBitsFromAttribute();
+ let newBits = currentBits;
+ for ( let i = 0; i < maxNumberOfSections; i++ ) {
+ const bit = 1 << (more ? i : maxNumberOfSections - i - 1);
+ if ( more ) {
+ newBits |= bit;
+ } else {
+ newBits &= ~bit;
+ }
+ if ( newBits !== currentBits ) { break; }
+ }
+ if ( newBits === currentBits ) { return; }
+ sectionBitsToAttribute(newBits);
+ localWrite('popupPanelSections', newBits);
+}
+
+localRead('popupPanelSections').then(bits => {
+ sectionBitsToAttribute(bits || 0);
+});
+
+dom.on('#moreButton', 'click', ( ) => {
+ toggleSections(true);
+});
+
+dom.on('#lessButton', 'click', ( ) => {
+ toggleSections(false);
+});
+
+/******************************************************************************/
+
+dom.on('[data-i18n-title="popupTipDashboard"]', 'click', ev => {
+ if ( ev.isTrusted !== true ) { return; }
+ if ( ev.button !== 0 ) { return; }
+ runtime.openOptionsPage();
+});
+
+/******************************************************************************/
+
+async function init() {
+ const [ tab ] = await browser.tabs.query({
+ active: true,
+ currentWindow: true,
+ });
+ if ( tab instanceof Object === false ) { return true; }
+ Object.assign(currentTab, tab);
+
+ let url;
+ try {
+ url = new URL(currentTab.url);
+ tabHostname = url.hostname || '';
+ } catch(ex) {
+ }
+
+ if ( url !== undefined ) {
+ const response = await sendMessage({
+ what: 'popupPanelData',
+ origin: url.origin,
+ hostname: normalizedHostname(tabHostname),
+ });
+ if ( response instanceof Object ) {
+ Object.assign(popupPanelData, response);
+ }
+ }
+
+ setFilteringMode(popupPanelData.level);
+
+ dom.text('#hostname', punycode.toUnicode(tabHostname));
+
+ const parent = qs$('#rulesetStats');
+ for ( const details of popupPanelData.rulesetDetails || [] ) {
+ const div = dom.clone('#templates .rulesetDetails');
+ qs$(div, 'h1').append(i18n.patchUnicodeFlags(details.name));
+ const { rules, filters, css } = details;
+ let ruleCount = rules.plain + rules.regex;
+ if ( popupPanelData.hasOmnipotence ) {
+ ruleCount += rules.removeparam + rules.redirect + rules.modifyHeaders;
+ }
+ let specificCount = 0;
+ if ( typeof css.specific === 'number' ) {
+ specificCount += css.specific;
+ }
+ if ( typeof css.declarative === 'number' ) {
+ specificCount += css.declarative;
+ }
+ if ( typeof css.procedural === 'number' ) {
+ specificCount += css.procedural;
+ }
+ dom.text(
+ qs$(div, 'p'),
+ i18n$('perRulesetStats')
+ .replace('{{ruleCount}}', ruleCount.toLocaleString())
+ .replace('{{filterCount}}', filters.accepted.toLocaleString())
+ .replace('{{cssSpecificCount}}', specificCount.toLocaleString())
+ );
+ parent.append(div);
+ }
+
+ dom.cl.remove(dom.body, 'loading');
+
+ return true;
+}
+
+async function tryInit() {
+ try {
+ await init();
+ } catch(ex) {
+ setTimeout(tryInit, 100);
+ }
+}
+
+tryInit();
+
+/******************************************************************************/
+
diff --git a/platform/mv3/extension/js/ruleset-manager.js b/platform/mv3/extension/js/ruleset-manager.js
new file mode 100644
index 0000000..a484e1d
--- /dev/null
+++ b/platform/mv3/extension/js/ruleset-manager.js
@@ -0,0 +1,539 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2022-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint esversion:11 */
+
+'use strict';
+
+/******************************************************************************/
+
+import { browser, dnr, i18n } from './ext.js';
+import { fetchJSON } from './fetch.js';
+import { ubolLog } from './utils.js';
+
+/******************************************************************************/
+
+const RULE_REALM_SIZE = 1000000;
+const REGEXES_REALM_START = 1000000;
+const REGEXES_REALM_END = REGEXES_REALM_START + RULE_REALM_SIZE;
+const REMOVEPARAMS_REALM_START = REGEXES_REALM_END;
+const REMOVEPARAMS_REALM_END = REMOVEPARAMS_REALM_START + RULE_REALM_SIZE;
+const REDIRECT_REALM_START = REMOVEPARAMS_REALM_END;
+const REDIRECT_REALM_END = REDIRECT_REALM_START + RULE_REALM_SIZE;
+const MODIFYHEADERS_REALM_START = REDIRECT_REALM_END;
+const MODIFYHEADERS_REALM_END = MODIFYHEADERS_REALM_START + RULE_REALM_SIZE;
+const TRUSTED_DIRECTIVE_BASE_RULE_ID = 8000000;
+
+/******************************************************************************/
+
+function getRulesetDetails() {
+ if ( getRulesetDetails.rulesetDetailsPromise !== undefined ) {
+ return getRulesetDetails.rulesetDetailsPromise;
+ }
+ getRulesetDetails.rulesetDetailsPromise = fetchJSON('/rulesets/ruleset-details').then(entries => {
+ const rulesMap = new Map(
+ entries.map(entry => [ entry.id, entry ])
+ );
+ return rulesMap;
+ });
+ return getRulesetDetails.rulesetDetailsPromise;
+}
+
+/******************************************************************************/
+
+function getDynamicRules() {
+ if ( getDynamicRules.dynamicRuleMapPromise !== undefined ) {
+ return getDynamicRules.dynamicRuleMapPromise;
+ }
+ getDynamicRules.dynamicRuleMapPromise = dnr.getDynamicRules().then(rules => {
+ const rulesMap = new Map(rules.map(rule => [ rule.id, rule ]));
+ ubolLog(`Dynamic rule count: ${rulesMap.size}`);
+ ubolLog(`Available dynamic rule count: ${dnr.MAX_NUMBER_OF_DYNAMIC_AND_SESSION_RULES - rulesMap.size}`);
+ return rulesMap;
+ });
+ return getDynamicRules.dynamicRuleMapPromise;
+}
+
+/******************************************************************************/
+
+async function pruneInvalidRegexRules(realm, rulesIn) {
+ // Avoid testing already tested regexes
+ const dynamicRules = await dnr.getDynamicRules();
+ const validRegexSet = new Set(
+ dynamicRules.filter(rule =>
+ rule.condition?.regexFilter && true || false
+ ).map(rule =>
+ rule.condition.regexFilter
+ )
+ );
+
+ // Validate regex-based rules
+ const toCheck = [];
+ const rejectedRegexRules = [];
+ for ( const rule of rulesIn ) {
+ if ( rule.condition?.regexFilter === undefined ) {
+ toCheck.push(true);
+ continue;
+ }
+ const {
+ regexFilter: regex,
+ isUrlFilterCaseSensitive: isCaseSensitive
+ } = rule.condition;
+ if ( validRegexSet.has(regex) ) {
+ toCheck.push(true);
+ continue;
+ }
+ toCheck.push(
+ dnr.isRegexSupported({ regex, isCaseSensitive }).then(result => {
+ if ( result.isSupported ) { return true; }
+ rejectedRegexRules.push(`\t${regex} ${result.reason}`);
+ return false;
+ })
+ );
+ }
+
+ // Collate results
+ const isValid = await Promise.all(toCheck);
+
+ if ( rejectedRegexRules.length !== 0 ) {
+ ubolLog(
+ `${realm} realm: rejected regexes:\n`,
+ rejectedRegexRules.join('\n')
+ );
+ }
+
+ return rulesIn.filter((v, i) => isValid[i]);
+}
+
+/******************************************************************************/
+
+async function updateRegexRules() {
+ const rulesetDetails = await getEnabledRulesetsDetails();
+
+ // Fetch regexes for all enabled rulesets
+ const toFetch = [];
+ for ( const details of rulesetDetails ) {
+ if ( details.rules.regex === 0 ) { continue; }
+ toFetch.push(fetchJSON(`/rulesets/regex/${details.id}`));
+ }
+ const regexRulesets = await Promise.all(toFetch);
+
+ // Collate all regexes rules
+ const allRules = [];
+ let regexRuleId = REGEXES_REALM_START;
+ for ( const rules of regexRulesets ) {
+ if ( Array.isArray(rules) === false ) { continue; }
+ for ( const rule of rules ) {
+ rule.id = regexRuleId++;
+ allRules.push(rule);
+ }
+ }
+
+ const validatedRules = await pruneInvalidRegexRules('regexes', allRules);
+
+ // Add validated regex rules to dynamic ruleset without affecting rules
+ // outside regex rules realm.
+ const dynamicRuleMap = await getDynamicRules();
+ const newRuleMap = new Map(validatedRules.map(rule => [ rule.id, rule ]));
+ const addRules = [];
+ const removeRuleIds = [];
+
+ for ( const oldRule of dynamicRuleMap.values() ) {
+ if ( oldRule.id < REGEXES_REALM_START ) { continue; }
+ if ( oldRule.id >= REGEXES_REALM_END ) { continue; }
+ const newRule = newRuleMap.get(oldRule.id);
+ if ( newRule === undefined ) {
+ removeRuleIds.push(oldRule.id);
+ dynamicRuleMap.delete(oldRule.id);
+ } else if ( JSON.stringify(oldRule) !== JSON.stringify(newRule) ) {
+ removeRuleIds.push(oldRule.id);
+ addRules.push(newRule);
+ dynamicRuleMap.set(oldRule.id, newRule);
+ }
+ }
+
+ for ( const newRule of newRuleMap.values() ) {
+ if ( dynamicRuleMap.has(newRule.id) ) { continue; }
+ addRules.push(newRule);
+ dynamicRuleMap.set(newRule.id, newRule);
+ }
+
+ if ( addRules.length === 0 && removeRuleIds.length === 0 ) { return; }
+
+ if ( removeRuleIds.length !== 0 ) {
+ ubolLog(`Remove ${removeRuleIds.length} DNR regex rules`);
+ }
+ if ( addRules.length !== 0 ) {
+ ubolLog(`Add ${addRules.length} DNR regex rules`);
+ }
+
+ return dnr.updateDynamicRules({ addRules, removeRuleIds }).catch(reason => {
+ console.error(`updateRegexRules() / ${reason}`);
+ });
+}
+
+/******************************************************************************/
+
+async function updateRemoveparamRules() {
+ const [
+ hasOmnipotence,
+ rulesetDetails,
+ dynamicRuleMap,
+ ] = await Promise.all([
+ browser.permissions.contains({ origins: [ '<all_urls>' ] }),
+ getEnabledRulesetsDetails(),
+ getDynamicRules(),
+ ]);
+
+ // Fetch removeparam rules for all enabled rulesets
+ const toFetch = [];
+ for ( const details of rulesetDetails ) {
+ if ( details.rules.removeparam === 0 ) { continue; }
+ toFetch.push(fetchJSON(`/rulesets/removeparam/${details.id}`));
+ }
+ const removeparamRulesets = await Promise.all(toFetch);
+
+ // Removeparam rules can only be enforced with omnipotence
+ const allRules = [];
+ if ( hasOmnipotence ) {
+ let removeparamRuleId = REMOVEPARAMS_REALM_START;
+ for ( const rules of removeparamRulesets ) {
+ if ( Array.isArray(rules) === false ) { continue; }
+ for ( const rule of rules ) {
+ rule.id = removeparamRuleId++;
+ allRules.push(rule);
+ }
+ }
+ }
+
+ const validatedRules = await pruneInvalidRegexRules('removeparam', allRules);
+
+ // Add removeparam rules to dynamic ruleset without affecting rules
+ // outside removeparam rules realm.
+ const newRuleMap = new Map(validatedRules.map(rule => [ rule.id, rule ]));
+ const addRules = [];
+ const removeRuleIds = [];
+
+ for ( const oldRule of dynamicRuleMap.values() ) {
+ if ( oldRule.id < REMOVEPARAMS_REALM_START ) { continue; }
+ if ( oldRule.id >= REMOVEPARAMS_REALM_END ) { continue; }
+ const newRule = newRuleMap.get(oldRule.id);
+ if ( newRule === undefined ) {
+ removeRuleIds.push(oldRule.id);
+ dynamicRuleMap.delete(oldRule.id);
+ } else if ( JSON.stringify(oldRule) !== JSON.stringify(newRule) ) {
+ removeRuleIds.push(oldRule.id);
+ addRules.push(newRule);
+ dynamicRuleMap.set(oldRule.id, newRule);
+ }
+ }
+
+ for ( const newRule of newRuleMap.values() ) {
+ if ( dynamicRuleMap.has(newRule.id) ) { continue; }
+ addRules.push(newRule);
+ dynamicRuleMap.set(newRule.id, newRule);
+ }
+
+ if ( addRules.length === 0 && removeRuleIds.length === 0 ) { return; }
+
+ if ( removeRuleIds.length !== 0 ) {
+ ubolLog(`Remove ${removeRuleIds.length} DNR removeparam rules`);
+ }
+ if ( addRules.length !== 0 ) {
+ ubolLog(`Add ${addRules.length} DNR removeparam rules`);
+ }
+
+ return dnr.updateDynamicRules({ addRules, removeRuleIds }).catch(reason => {
+ console.error(`updateRemoveparamRules() / ${reason}`);
+ });
+}
+
+/******************************************************************************/
+
+async function updateRedirectRules() {
+ const [
+ hasOmnipotence,
+ rulesetDetails,
+ dynamicRuleMap,
+ ] = await Promise.all([
+ browser.permissions.contains({ origins: [ '<all_urls>' ] }),
+ getEnabledRulesetsDetails(),
+ getDynamicRules(),
+ ]);
+
+ // Fetch redirect rules for all enabled rulesets
+ const toFetch = [];
+ for ( const details of rulesetDetails ) {
+ if ( details.rules.redirect === 0 ) { continue; }
+ toFetch.push(fetchJSON(`/rulesets/redirect/${details.id}`));
+ }
+ const redirectRulesets = await Promise.all(toFetch);
+
+ // Redirect rules can only be enforced with omnipotence
+ const allRules = [];
+ if ( hasOmnipotence ) {
+ let redirectRuleId = REDIRECT_REALM_START;
+ for ( const rules of redirectRulesets ) {
+ if ( Array.isArray(rules) === false ) { continue; }
+ for ( const rule of rules ) {
+ rule.id = redirectRuleId++;
+ allRules.push(rule);
+ }
+ }
+ }
+
+ const validatedRules = await pruneInvalidRegexRules('redirect', allRules);
+
+ // Add redirect rules to dynamic ruleset without affecting rules
+ // outside redirect rules realm.
+ const newRuleMap = new Map(validatedRules.map(rule => [ rule.id, rule ]));
+ const addRules = [];
+ const removeRuleIds = [];
+
+ for ( const oldRule of dynamicRuleMap.values() ) {
+ if ( oldRule.id < REDIRECT_REALM_START ) { continue; }
+ if ( oldRule.id >= REDIRECT_REALM_END ) { continue; }
+ const newRule = newRuleMap.get(oldRule.id);
+ if ( newRule === undefined ) {
+ removeRuleIds.push(oldRule.id);
+ dynamicRuleMap.delete(oldRule.id);
+ } else if ( JSON.stringify(oldRule) !== JSON.stringify(newRule) ) {
+ removeRuleIds.push(oldRule.id);
+ addRules.push(newRule);
+ dynamicRuleMap.set(oldRule.id, newRule);
+ }
+ }
+
+ for ( const newRule of newRuleMap.values() ) {
+ if ( dynamicRuleMap.has(newRule.id) ) { continue; }
+ addRules.push(newRule);
+ dynamicRuleMap.set(newRule.id, newRule);
+ }
+
+ if ( addRules.length === 0 && removeRuleIds.length === 0 ) { return; }
+
+ if ( removeRuleIds.length !== 0 ) {
+ ubolLog(`Remove ${removeRuleIds.length} DNR redirect rules`);
+ }
+ if ( addRules.length !== 0 ) {
+ ubolLog(`Add ${addRules.length} DNR redirect rules`);
+ }
+
+ return dnr.updateDynamicRules({ addRules, removeRuleIds }).catch(reason => {
+ console.error(`updateRedirectRules() / ${reason}`);
+ });
+}
+
+/******************************************************************************/
+
+async function updateModifyHeadersRules() {
+ const [
+ hasOmnipotence,
+ rulesetDetails,
+ dynamicRuleMap,
+ ] = await Promise.all([
+ browser.permissions.contains({ origins: [ '<all_urls>' ] }),
+ getEnabledRulesetsDetails(),
+ getDynamicRules(),
+ ]);
+
+ // Fetch modifyHeaders rules for all enabled rulesets
+ const toFetch = [];
+ for ( const details of rulesetDetails ) {
+ if ( details.rules.modifyHeaders === 0 ) { continue; }
+ toFetch.push(fetchJSON(`/rulesets/modify-headers/${details.id}`));
+ }
+ const rulesets = await Promise.all(toFetch);
+
+ // Redirect rules can only be enforced with omnipotence
+ const allRules = [];
+ if ( hasOmnipotence ) {
+ let ruleId = MODIFYHEADERS_REALM_START;
+ for ( const rules of rulesets ) {
+ if ( Array.isArray(rules) === false ) { continue; }
+ for ( const rule of rules ) {
+ rule.id = ruleId++;
+ allRules.push(rule);
+ }
+ }
+ }
+
+ const validatedRules = await pruneInvalidRegexRules('modify-headers', allRules);
+
+ // Add modifyHeaders rules to dynamic ruleset without affecting rules
+ // outside modifyHeaders realm.
+ const newRuleMap = new Map(validatedRules.map(rule => [ rule.id, rule ]));
+ const addRules = [];
+ const removeRuleIds = [];
+
+ for ( const oldRule of dynamicRuleMap.values() ) {
+ if ( oldRule.id < MODIFYHEADERS_REALM_START ) { continue; }
+ if ( oldRule.id >= MODIFYHEADERS_REALM_END ) { continue; }
+ const newRule = newRuleMap.get(oldRule.id);
+ if ( newRule === undefined ) {
+ removeRuleIds.push(oldRule.id);
+ dynamicRuleMap.delete(oldRule.id);
+ } else if ( JSON.stringify(oldRule) !== JSON.stringify(newRule) ) {
+ removeRuleIds.push(oldRule.id);
+ addRules.push(newRule);
+ dynamicRuleMap.set(oldRule.id, newRule);
+ }
+ }
+
+ for ( const newRule of newRuleMap.values() ) {
+ if ( dynamicRuleMap.has(newRule.id) ) { continue; }
+ addRules.push(newRule);
+ dynamicRuleMap.set(newRule.id, newRule);
+ }
+
+ if ( addRules.length === 0 && removeRuleIds.length === 0 ) { return; }
+
+ if ( removeRuleIds.length !== 0 ) {
+ ubolLog(`Remove ${removeRuleIds.length} DNR modifyHeaders rules`);
+ }
+ if ( addRules.length !== 0 ) {
+ ubolLog(`Add ${addRules.length} DNR modifyHeaders rules`);
+ }
+
+ return dnr.updateDynamicRules({ addRules, removeRuleIds }).catch(reason => {
+ console.error(`updateModifyHeadersRules() / ${reason}`);
+ });
+}
+
+/******************************************************************************/
+
+// TODO: group all omnipotence-related rules into one realm.
+
+async function updateDynamicRules() {
+ return Promise.all([
+ updateRegexRules(),
+ updateRemoveparamRules(),
+ updateRedirectRules(),
+ updateModifyHeadersRules(),
+ ]);
+}
+
+/******************************************************************************/
+
+async function defaultRulesetsFromLanguage() {
+ const out = [ 'default' ];
+
+ const dropCountry = lang => {
+ const pos = lang.indexOf('-');
+ if ( pos === -1 ) { return lang; }
+ return lang.slice(0, pos);
+ };
+
+ const langSet = new Set();
+
+ for ( const lang of navigator.languages.map(dropCountry) ) {
+ langSet.add(lang);
+ }
+ langSet.add(dropCountry(i18n.getUILanguage()));
+
+ const reTargetLang = new RegExp(
+ `\\b(${Array.from(langSet).join('|')})\\b`
+ );
+
+ const rulesetDetails = await getRulesetDetails();
+ for ( const [ id, details ] of rulesetDetails ) {
+ if ( typeof details.lang !== 'string' ) { continue; }
+ if ( reTargetLang.test(details.lang) === false ) { continue; }
+ out.push(id);
+ }
+ return out;
+}
+
+/******************************************************************************/
+
+async function enableRulesets(ids) {
+ const afterIds = new Set(ids);
+ const beforeIds = new Set(await dnr.getEnabledRulesets());
+ const enableRulesetSet = new Set();
+ const disableRulesetSet = new Set();
+ for ( const id of afterIds ) {
+ if ( beforeIds.has(id) ) { continue; }
+ enableRulesetSet.add(id);
+ }
+ for ( const id of beforeIds ) {
+ if ( afterIds.has(id) ) { continue; }
+ disableRulesetSet.add(id);
+ }
+
+ if ( enableRulesetSet.size === 0 && disableRulesetSet.size === 0 ) {
+ return;
+ }
+
+ // Be sure the rulesets to enable/disable do exist in the current version,
+ // otherwise the API throws.
+ const rulesetDetails = await getRulesetDetails();
+ for ( const id of enableRulesetSet ) {
+ if ( rulesetDetails.has(id) ) { continue; }
+ enableRulesetSet.delete(id);
+ }
+ for ( const id of disableRulesetSet ) {
+ if ( rulesetDetails.has(id) ) { continue; }
+ disableRulesetSet.delete(id);
+ }
+ const enableRulesetIds = Array.from(enableRulesetSet);
+ const disableRulesetIds = Array.from(disableRulesetSet);
+
+ if ( enableRulesetIds.length !== 0 ) {
+ ubolLog(`Enable rulesets: ${enableRulesetIds}`);
+ }
+ if ( disableRulesetIds.length !== 0 ) {
+ ubolLog(`Disable ruleset: ${disableRulesetIds}`);
+ }
+ await dnr.updateEnabledRulesets({ enableRulesetIds, disableRulesetIds });
+
+ return updateDynamicRules();
+}
+
+/******************************************************************************/
+
+async function getEnabledRulesetsDetails() {
+ const [
+ ids,
+ rulesetDetails,
+ ] = await Promise.all([
+ dnr.getEnabledRulesets(),
+ getRulesetDetails(),
+ ]);
+ const out = [];
+ for ( const id of ids ) {
+ const ruleset = rulesetDetails.get(id);
+ if ( ruleset === undefined ) { continue; }
+ out.push(ruleset);
+ }
+ return out;
+}
+
+/******************************************************************************/
+
+export {
+ TRUSTED_DIRECTIVE_BASE_RULE_ID,
+ getRulesetDetails,
+ getDynamicRules,
+ enableRulesets,
+ defaultRulesetsFromLanguage,
+ getEnabledRulesetsDetails,
+ updateDynamicRules,
+};
diff --git a/platform/mv3/extension/js/scripting-manager.js b/platform/mv3/extension/js/scripting-manager.js
new file mode 100644
index 0000000..e6eebf2
--- /dev/null
+++ b/platform/mv3/extension/js/scripting-manager.js
@@ -0,0 +1,563 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2022-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint esversion:11 */
+
+'use strict';
+
+/******************************************************************************/
+
+import { browser } from './ext.js';
+import { fetchJSON } from './fetch.js';
+import { getFilteringModeDetails } from './mode-manager.js';
+import { getEnabledRulesetsDetails } from './ruleset-manager.js';
+
+import * as ut from './utils.js';
+
+/******************************************************************************/
+
+const isGecko = browser.runtime.getURL('').startsWith('moz-extension://');
+
+const resourceDetailPromises = new Map();
+
+function getScriptletDetails() {
+ let promise = resourceDetailPromises.get('scriptlet');
+ if ( promise !== undefined ) { return promise; }
+ promise = fetchJSON('/rulesets/scriptlet-details').then(
+ entries => new Map(entries)
+ );
+ resourceDetailPromises.set('scriptlet', promise);
+ return promise;
+}
+
+function getGenericDetails() {
+ let promise = resourceDetailPromises.get('generic');
+ if ( promise !== undefined ) { return promise; }
+ promise = fetchJSON('/rulesets/generic-details').then(
+ entries => new Map(entries)
+ );
+ resourceDetailPromises.set('generic', promise);
+ return promise;
+}
+
+/******************************************************************************/
+
+// Important: We need to sort the arrays for fast comparison
+const arrayEq = (a = [], b = [], sort = true) => {
+ const alen = a.length;
+ if ( alen !== b.length ) { return false; }
+ if ( sort ) { a.sort(); b.sort(); }
+ for ( let i = 0; i < alen; i++ ) {
+ if ( a[i] !== b[i] ) { return false; }
+ }
+ return true;
+};
+
+/******************************************************************************/
+
+// The extensions API does not always return exactly what we fed it, so we
+// need to normalize some entries to be sure we properly detect changes when
+// comparing registered entries vs. entries to register.
+
+const normalizeRegisteredContentScripts = registered => {
+ for ( const entry of registered ) {
+ const { css = [], js = [] } = entry;
+ for ( let i = 0; i < css.length; i++ ) {
+ const path = css[i];
+ if ( path.startsWith('/') ) { continue; }
+ css[i] = `/${path}`;
+ }
+ for ( let i = 0; i < js.length; i++ ) {
+ const path = js[i];
+ if ( path.startsWith('/') ) { continue; }
+ js[i] = `/${path}`;
+ }
+ }
+ return registered;
+};
+
+/******************************************************************************/
+
+function registerHighGeneric(context, genericDetails) {
+ const { before, filteringModeDetails, rulesetsDetails } = context;
+
+ const excludeHostnames = [];
+ const css = [];
+ for ( const details of rulesetsDetails ) {
+ const hostnames = genericDetails.get(details.id);
+ if ( hostnames !== undefined ) {
+ excludeHostnames.push(...hostnames);
+ }
+ const count = details.css?.generichigh || 0;
+ if ( count === 0 ) { continue; }
+ css.push(`/rulesets/scripting/generichigh/${details.id}.css`);
+ }
+
+ if ( css.length === 0 ) { return; }
+
+ const { none, basic, optimal, complete } = filteringModeDetails;
+ const matches = [];
+ const excludeMatches = [];
+ if ( complete.has('all-urls') ) {
+ excludeMatches.push(...ut.matchesFromHostnames(none));
+ excludeMatches.push(...ut.matchesFromHostnames(basic));
+ excludeMatches.push(...ut.matchesFromHostnames(optimal));
+ excludeMatches.push(...ut.matchesFromHostnames(excludeHostnames));
+ matches.push('<all_urls>');
+ } else {
+ matches.push(
+ ...ut.matchesFromHostnames(
+ ut.subtractHostnameIters(
+ Array.from(complete),
+ excludeHostnames
+ )
+ )
+ );
+ }
+
+ if ( matches.length === 0 ) { return; }
+
+ const registered = before.get('css-generichigh');
+ before.delete('css-generichigh'); // Important!
+
+ // https://github.com/w3c/webextensions/issues/414#issuecomment-1623992885
+ // Once supported, add:
+ // cssOrigin: 'USER',
+ const directive = {
+ id: 'css-generichigh',
+ css,
+ matches,
+ excludeMatches,
+ runAt: 'document_end',
+ };
+
+ // register
+ if ( registered === undefined ) {
+ context.toAdd.push(directive);
+ return;
+ }
+
+ // update
+ if (
+ arrayEq(registered.css, css, false) === false ||
+ arrayEq(registered.matches, matches) === false ||
+ arrayEq(registered.excludeMatches, excludeMatches) === false
+ ) {
+ context.toRemove.push('css-generichigh');
+ context.toAdd.push(directive);
+ }
+}
+
+/******************************************************************************/
+
+function registerGeneric(context, genericDetails) {
+ const { before, filteringModeDetails, rulesetsDetails } = context;
+
+ const excludeHostnames = [];
+ const js = [];
+ for ( const details of rulesetsDetails ) {
+ const hostnames = genericDetails.get(details.id);
+ if ( hostnames !== undefined ) {
+ excludeHostnames.push(...hostnames);
+ }
+ const count = details.css?.generic || 0;
+ if ( count === 0 ) { continue; }
+ js.push(`/rulesets/scripting/generic/${details.id}.js`);
+ }
+
+ if ( js.length === 0 ) { return; }
+
+ js.push('/js/scripting/css-generic.js');
+
+ const { none, basic, optimal, complete } = filteringModeDetails;
+ const matches = [];
+ const excludeMatches = [];
+ if ( complete.has('all-urls') ) {
+ excludeMatches.push(...ut.matchesFromHostnames(none));
+ excludeMatches.push(...ut.matchesFromHostnames(basic));
+ excludeMatches.push(...ut.matchesFromHostnames(optimal));
+ excludeMatches.push(...ut.matchesFromHostnames(excludeHostnames));
+ matches.push('<all_urls>');
+ } else {
+ matches.push(
+ ...ut.matchesFromHostnames(
+ ut.subtractHostnameIters(
+ Array.from(complete),
+ excludeHostnames
+ )
+ )
+ );
+ }
+
+ if ( matches.length === 0 ) { return; }
+
+ const registered = before.get('css-generic');
+ before.delete('css-generic'); // Important!
+
+ const directive = {
+ id: 'css-generic',
+ js,
+ matches,
+ excludeMatches,
+ runAt: 'document_idle',
+ };
+
+ // register
+ if ( registered === undefined ) {
+ context.toAdd.push(directive);
+ return;
+ }
+
+ // update
+ if (
+ arrayEq(registered.js, js, false) === false ||
+ arrayEq(registered.matches, matches) === false ||
+ arrayEq(registered.excludeMatches, excludeMatches) === false
+ ) {
+ context.toRemove.push('css-generic');
+ context.toAdd.push(directive);
+ }
+}
+
+/******************************************************************************/
+
+function registerProcedural(context) {
+ const { before, filteringModeDetails, rulesetsDetails } = context;
+
+ const js = [];
+ for ( const rulesetDetails of rulesetsDetails ) {
+ const count = rulesetDetails.css?.procedural || 0;
+ if ( count === 0 ) { continue; }
+ js.push(`/rulesets/scripting/procedural/${rulesetDetails.id}.js`);
+ }
+ if ( js.length === 0 ) { return; }
+
+ const { none, basic, optimal, complete } = filteringModeDetails;
+ const matches = [
+ ...ut.matchesFromHostnames(optimal),
+ ...ut.matchesFromHostnames(complete),
+ ];
+ if ( matches.length === 0 ) { return; }
+
+ js.push('/js/scripting/css-procedural.js');
+
+ const excludeMatches = [];
+ if ( none.has('all-urls') === false ) {
+ excludeMatches.push(...ut.matchesFromHostnames(none));
+ }
+ if ( basic.has('all-urls') === false ) {
+ excludeMatches.push(...ut.matchesFromHostnames(basic));
+ }
+
+ const registered = before.get('css-procedural');
+ before.delete('css-procedural'); // Important!
+
+ const directive = {
+ id: 'css-procedural',
+ js,
+ allFrames: true,
+ matches,
+ excludeMatches,
+ runAt: 'document_end',
+ };
+
+ // register
+ if ( registered === undefined ) {
+ context.toAdd.push(directive);
+ return;
+ }
+
+ // update
+ if (
+ arrayEq(registered.js, js, false) === false ||
+ arrayEq(registered.matches, matches) === false ||
+ arrayEq(registered.excludeMatches, excludeMatches) === false
+ ) {
+ context.toRemove.push('css-procedural');
+ context.toAdd.push(directive);
+ }
+}
+
+/******************************************************************************/
+
+function registerDeclarative(context) {
+ const { before, filteringModeDetails, rulesetsDetails } = context;
+
+ const js = [];
+ for ( const rulesetDetails of rulesetsDetails ) {
+ const count = rulesetDetails.css?.declarative || 0;
+ if ( count === 0 ) { continue; }
+ js.push(`/rulesets/scripting/declarative/${rulesetDetails.id}.js`);
+ }
+ if ( js.length === 0 ) { return; }
+
+ const { none, basic, optimal, complete } = filteringModeDetails;
+ const matches = [
+ ...ut.matchesFromHostnames(optimal),
+ ...ut.matchesFromHostnames(complete),
+ ];
+ if ( matches.length === 0 ) { return; }
+
+ js.push('/js/scripting/css-declarative.js');
+
+ const excludeMatches = [];
+ if ( none.has('all-urls') === false ) {
+ excludeMatches.push(...ut.matchesFromHostnames(none));
+ }
+ if ( basic.has('all-urls') === false ) {
+ excludeMatches.push(...ut.matchesFromHostnames(basic));
+ }
+
+ const registered = before.get('css-declarative');
+ before.delete('css-declarative'); // Important!
+
+ const directive = {
+ id: 'css-declarative',
+ js,
+ allFrames: true,
+ matches,
+ excludeMatches,
+ runAt: 'document_start',
+ };
+
+ // register
+ if ( registered === undefined ) {
+ context.toAdd.push(directive);
+ return;
+ }
+
+ // update
+ if (
+ arrayEq(registered.js, js, false) === false ||
+ arrayEq(registered.matches, matches) === false ||
+ arrayEq(registered.excludeMatches, excludeMatches) === false
+ ) {
+ context.toRemove.push('css-declarative');
+ context.toAdd.push(directive);
+ }
+}
+
+/******************************************************************************/
+
+function registerSpecific(context) {
+ const { before, filteringModeDetails, rulesetsDetails } = context;
+
+ const js = [];
+ for ( const rulesetDetails of rulesetsDetails ) {
+ const count = rulesetDetails.css?.specific || 0;
+ if ( count === 0 ) { continue; }
+ js.push(`/rulesets/scripting/specific/${rulesetDetails.id}.js`);
+ }
+ if ( js.length === 0 ) { return; }
+
+ const { none, basic, optimal, complete } = filteringModeDetails;
+ const matches = [
+ ...ut.matchesFromHostnames(optimal),
+ ...ut.matchesFromHostnames(complete),
+ ];
+ if ( matches.length === 0 ) { return; }
+
+ js.push('/js/scripting/css-specific.js');
+
+ const excludeMatches = [];
+ if ( none.has('all-urls') === false ) {
+ excludeMatches.push(...ut.matchesFromHostnames(none));
+ }
+ if ( basic.has('all-urls') === false ) {
+ excludeMatches.push(...ut.matchesFromHostnames(basic));
+ }
+
+ const registered = before.get('css-specific');
+ before.delete('css-specific'); // Important!
+
+ const directive = {
+ id: 'css-specific',
+ js,
+ allFrames: true,
+ matches,
+ excludeMatches,
+ runAt: 'document_start',
+ };
+
+ // register
+ if ( registered === undefined ) {
+ context.toAdd.push(directive);
+ return;
+ }
+
+ // update
+ if (
+ arrayEq(registered.js, js, false) === false ||
+ arrayEq(registered.matches, matches) === false ||
+ arrayEq(registered.excludeMatches, excludeMatches) === false
+ ) {
+ context.toRemove.push('css-specific');
+ context.toAdd.push(directive);
+ }
+}
+
+/******************************************************************************/
+
+function registerScriptlet(context, scriptletDetails) {
+ const { before, filteringModeDetails, rulesetsDetails } = context;
+
+ const hasBroadHostPermission =
+ filteringModeDetails.optimal.has('all-urls') ||
+ filteringModeDetails.complete.has('all-urls');
+
+ const permissionRevokedMatches = [
+ ...ut.matchesFromHostnames(filteringModeDetails.none),
+ ...ut.matchesFromHostnames(filteringModeDetails.basic),
+ ];
+ const permissionGrantedHostnames = [
+ ...filteringModeDetails.optimal,
+ ...filteringModeDetails.complete,
+ ];
+
+ for ( const rulesetId of rulesetsDetails.map(v => v.id) ) {
+ const scriptletList = scriptletDetails.get(rulesetId);
+ if ( scriptletList === undefined ) { continue; }
+
+ for ( const [ token, scriptletHostnames ] of scriptletList ) {
+ const id = `${rulesetId}.${token}`;
+ const registered = before.get(id);
+
+ const matches = [];
+ const excludeMatches = [];
+ let targetHostnames = [];
+ if ( hasBroadHostPermission ) {
+ excludeMatches.push(...permissionRevokedMatches);
+ if ( scriptletHostnames.length > 100 ) {
+ targetHostnames = [ '*' ];
+ } else {
+ targetHostnames = scriptletHostnames;
+ }
+ } else if ( permissionGrantedHostnames.length !== 0 ) {
+ if ( scriptletHostnames.includes('*') ) {
+ targetHostnames = permissionGrantedHostnames;
+ } else {
+ targetHostnames = ut.intersectHostnameIters(
+ permissionGrantedHostnames,
+ scriptletHostnames
+ );
+ }
+ }
+ if ( targetHostnames.length === 0 ) { continue; }
+ matches.push(...ut.matchesFromHostnames(targetHostnames));
+
+ before.delete(id); // Important!
+
+ const directive = {
+ id,
+ js: [ `/rulesets/scripting/scriptlet/${id}.js` ],
+ allFrames: true,
+ matches,
+ excludeMatches,
+ runAt: 'document_start',
+ };
+
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1736575
+ // `MAIN` world not yet supported in Firefox
+ if ( isGecko === false ) {
+ directive.world = 'MAIN';
+ }
+
+ // register
+ if ( registered === undefined ) {
+ context.toAdd.push(directive);
+ continue;
+ }
+
+ // update
+ if (
+ arrayEq(registered.matches, matches) === false ||
+ arrayEq(registered.excludeMatches, excludeMatches) === false
+ ) {
+ context.toRemove.push(id);
+ context.toAdd.push(directive);
+ }
+ }
+ }
+}
+
+/******************************************************************************/
+
+async function registerInjectables(origins) {
+ void origins;
+
+ if ( browser.scripting === undefined ) { return false; }
+
+ const [
+ filteringModeDetails,
+ rulesetsDetails,
+ scriptletDetails,
+ genericDetails,
+ registered,
+ ] = await Promise.all([
+ getFilteringModeDetails(),
+ getEnabledRulesetsDetails(),
+ getScriptletDetails(),
+ getGenericDetails(),
+ browser.scripting.getRegisteredContentScripts(),
+ ]);
+ const before = new Map(
+ normalizeRegisteredContentScripts(registered).map(
+ entry => [ entry.id, entry ]
+ )
+ );
+ const toAdd = [], toRemove = [];
+ const context = {
+ filteringModeDetails,
+ rulesetsDetails,
+ before,
+ toAdd,
+ toRemove,
+ };
+
+ registerDeclarative(context);
+ registerProcedural(context);
+ registerScriptlet(context, scriptletDetails);
+ registerSpecific(context);
+ registerGeneric(context, genericDetails);
+ registerHighGeneric(context, genericDetails);
+
+ toRemove.push(...Array.from(before.keys()));
+
+ if ( toRemove.length !== 0 ) {
+ ut.ubolLog(`Unregistered ${toRemove} content (css/js)`);
+ await browser.scripting.unregisterContentScripts({ ids: toRemove })
+ .catch(reason => { console.info(reason); });
+ }
+
+ if ( toAdd.length !== 0 ) {
+ ut.ubolLog(`Registered ${toAdd.map(v => v.id)} content (css/js)`);
+ await browser.scripting.registerContentScripts(toAdd)
+ .catch(reason => { console.info(reason); });
+ }
+
+ return true;
+}
+
+/******************************************************************************/
+
+export {
+ registerInjectables
+};
diff --git a/platform/mv3/extension/js/scripting/css-declarative.js b/platform/mv3/extension/js/scripting/css-declarative.js
new file mode 100644
index 0000000..d5c5555
--- /dev/null
+++ b/platform/mv3/extension/js/scripting/css-declarative.js
@@ -0,0 +1,157 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint esversion:11 */
+
+'use strict';
+
+/******************************************************************************/
+
+// Important!
+// Isolate from global scope
+(function uBOL_cssDeclarative() {
+
+/******************************************************************************/
+
+const declarativeImports = self.declarativeImports || [];
+self.declarativeImports = undefined;
+delete self.declarativeImports;
+
+/******************************************************************************/
+
+const hnParts = [];
+try { hnParts.push(...document.location.hostname.split('.')); }
+catch(ex) { }
+const hnpartslen = hnParts.length;
+if ( hnpartslen === 0 ) { return; }
+
+const selectors = [];
+
+for ( const { argsList, exceptionsMap, hostnamesMap, entitiesMap } of declarativeImports ) {
+ const todoIndices = new Set();
+ const tonotdoIndices = [];
+ // Exceptions
+ if ( exceptionsMap.size !== 0 ) {
+ for ( let i = 0; i < hnpartslen; i++ ) {
+ const hn = hnParts.slice(i).join('.');
+ const excepted = exceptionsMap.get(hn);
+ if ( excepted ) { tonotdoIndices.push(...excepted); }
+ }
+ exceptionsMap.clear();
+ }
+ // Hostname-based
+ if ( hostnamesMap.size !== 0 ) {
+ const collectArgIndices = hn => {
+ let argsIndices = hostnamesMap.get(hn);
+ if ( argsIndices === undefined ) { return; }
+ if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; }
+ for ( const argsIndex of argsIndices ) {
+ if ( tonotdoIndices.includes(argsIndex) ) { continue; }
+ todoIndices.add(argsIndex);
+ }
+ };
+ for ( let i = 0; i < hnpartslen; i++ ) {
+ const hn = hnParts.slice(i).join('.');
+ collectArgIndices(hn);
+ }
+ collectArgIndices('*');
+ hostnamesMap.clear();
+ }
+ // Entity-based
+ if ( entitiesMap.size !== 0 ) {
+ const n = hnpartslen - 1;
+ for ( let i = 0; i < n; i++ ) {
+ for ( let j = n; j > i; j-- ) {
+ const en = hnParts.slice(i,j).join('.');
+ let argsIndices = entitiesMap.get(en);
+ if ( argsIndices === undefined ) { continue; }
+ if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; }
+ for ( const argsIndex of argsIndices ) {
+ if ( tonotdoIndices.includes(argsIndex) ) { continue; }
+ todoIndices.add(argsIndex);
+ }
+ }
+ }
+ entitiesMap.clear();
+ }
+ for ( const i of todoIndices ) {
+ selectors.push(...argsList[i].map(json => JSON.parse(json)));
+ }
+ argsList.length = 0;
+}
+declarativeImports.length = 0;
+
+if ( selectors.length === 0 ) { return; }
+
+/******************************************************************************/
+
+const cssRuleFromProcedural = details => {
+ const { tasks, action } = details;
+ let mq, selector;
+ if ( Array.isArray(tasks) ) {
+ if ( tasks[0][0] !== 'matches-media' ) { return; }
+ mq = tasks[0][1];
+ if ( tasks.length > 2 ) { return; }
+ if ( tasks.length === 2 ) {
+ if ( tasks[1][0] !== 'spath' ) { return; }
+ selector = tasks[1][1];
+ }
+ }
+ let style;
+ if ( Array.isArray(action) ) {
+ if ( action[0] !== 'style' ) { return; }
+ selector = selector || details.selector;
+ style = action[1];
+ }
+ if ( mq === undefined && style === undefined && selector === undefined ) { return; }
+ if ( mq === undefined ) {
+ return `${selector}\n{${style}}`;
+ }
+ if ( style === undefined ) {
+ return `@media ${mq} {\n${selector}\n{display:none!important;}\n}`;
+ }
+ return `@media ${mq} {\n${selector}\n{${style}}\n}`;
+};
+
+const sheetText = [];
+for ( const selector of selectors ) {
+ const ruleText = cssRuleFromProcedural(selector);
+ if ( ruleText === undefined ) { continue; }
+ sheetText.push(ruleText);
+}
+
+if ( sheetText.length === 0 ) { return; }
+
+(function uBOL_injectCSS(css, count = 10) {
+ chrome.runtime.sendMessage({ what: 'insertCSS', css }).catch(( ) => {
+ count -= 1;
+ if ( count === 0 ) { return; }
+ uBOL_injectCSS(css, count - 1);
+ });
+})(sheetText.join('\n'));
+
+/******************************************************************************/
+
+})();
+
+/******************************************************************************/
+
+void 0;
diff --git a/platform/mv3/extension/js/scripting/css-generic.js b/platform/mv3/extension/js/scripting/css-generic.js
new file mode 100644
index 0000000..49856ae
--- /dev/null
+++ b/platform/mv3/extension/js/scripting/css-generic.js
@@ -0,0 +1,239 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint esversion:11 */
+
+'use strict';
+
+/******************************************************************************/
+
+// Important!
+// Isolate from global scope
+(function uBOL_cssGeneric() {
+
+const genericSelectorMap = self.genericSelectorMap || new Map();
+delete self.genericSelectorMap;
+
+if ( genericSelectorMap.size === 0 ) { return; }
+
+/******************************************************************************/
+
+const maxSurveyTimeSlice = 4;
+const maxSurveyNodeSlice = 64;
+const styleSheetSelectors = [];
+const stopAllRatio = 0.95; // To be investigated
+
+let surveyCount = 0;
+let surveyMissCount = 0;
+let styleSheetTimer;
+let processTimer;
+let domChangeTimer;
+let lastDomChange = Date.now();
+
+/******************************************************************************/
+
+// http://www.cse.yorku.ca/~oz/hash.html#djb2
+// Must mirror dnrRulesetFromRawLists's version
+
+const hashFromStr = (type, s) => {
+ const len = s.length;
+ const step = len + 7 >>> 3;
+ let hash = (type << 5) + type ^ len;
+ for ( let i = 0; i < len; i += step ) {
+ hash = (hash << 5) + hash ^ s.charCodeAt(i);
+ }
+ return hash & 0xFFFFFF;
+};
+
+/******************************************************************************/
+
+// Extract all classes/ids: these will be passed to the cosmetic
+// filtering engine, and in return we will obtain only the relevant
+// CSS selectors.
+
+// https://github.com/gorhill/uBlock/issues/672
+// http://www.w3.org/TR/2014/REC-html5-20141028/infrastructure.html#space-separated-tokens
+// http://jsperf.com/enumerate-classes/6
+
+const uBOL_idFromNode = (node, out) => {
+ const raw = node.id;
+ if ( typeof raw !== 'string' || raw.length === 0 ) { return; }
+ out.push(hashFromStr(0x23 /* '#' */, raw.trim()));
+};
+
+// https://github.com/uBlockOrigin/uBlock-issues/discussions/2076
+// Performance: avoid using Element.classList
+const uBOL_classesFromNode = (node, out) => {
+ const s = node.getAttribute('class');
+ if ( typeof s !== 'string' ) { return; }
+ const len = s.length;
+ for ( let beg = 0, end = 0; beg < len; beg += 1 ) {
+ end = s.indexOf(' ', beg);
+ if ( end === beg ) { continue; }
+ if ( end === -1 ) { end = len; }
+ out.push(hashFromStr(0x2E /* '.' */, s.slice(beg, end)));
+ beg = end;
+ }
+};
+
+/******************************************************************************/
+
+const pendingNodes = {
+ addedNodes: [],
+ nodeSet: new Set(),
+ add(node) {
+ this.addedNodes.push(node);
+ },
+ next(out) {
+ for ( const added of this.addedNodes ) {
+ if ( this.nodeSet.has(added) ) { continue; }
+ if ( added.nodeType === 1 ) {
+ this.nodeSet.add(added);
+ }
+ if ( added.firstElementChild === null ) { continue; }
+ for ( const descendant of added.querySelectorAll('[id],[class]') ) {
+ this.nodeSet.add(descendant);
+ }
+ }
+ this.addedNodes.length = 0;
+ for ( const node of this.nodeSet ) {
+ this.nodeSet.delete(node);
+ out.push(node);
+ if ( out.length === maxSurveyNodeSlice ) { break; }
+ }
+ },
+ hasNodes() {
+ return this.addedNodes.length !== 0 || this.nodeSet.size !== 0;
+ },
+};
+
+/******************************************************************************/
+
+const uBOL_processNodes = ( ) => {
+ const t0 = Date.now();
+ const hashes = [];
+ const nodes = [];
+ const deadline = t0 + maxSurveyTimeSlice;
+ for (;;) {
+ pendingNodes.next(nodes);
+ if ( nodes.length === 0 ) { break; }
+ for ( const node of nodes ) {
+ uBOL_idFromNode(node, hashes);
+ uBOL_classesFromNode(node, hashes);
+ }
+ nodes.length = 0;
+ if ( performance.now() >= deadline ) { break; }
+ }
+ for ( const hash of hashes ) {
+ const selectorList = genericSelectorMap.get(hash);
+ if ( selectorList === undefined ) { continue; }
+ styleSheetSelectors.push(selectorList);
+ genericSelectorMap.delete(hash);
+ }
+ surveyCount += 1;
+ if ( styleSheetSelectors.length === 0 ) {
+ surveyMissCount += 1;
+ if (
+ surveyCount >= 100 &&
+ (surveyMissCount / surveyCount) >= stopAllRatio
+ ) {
+ stopAll(`too many misses in surveyor (${surveyMissCount}/${surveyCount})`);
+ }
+ return;
+ }
+ if ( styleSheetTimer !== undefined ) { return; }
+ styleSheetTimer = self.requestAnimationFrame(( ) => {
+ styleSheetTimer = undefined;
+ uBOL_injectCSS(`${styleSheetSelectors.join(',')}{display:none!important;}`);
+ styleSheetSelectors.length = 0;
+ });
+};
+
+/******************************************************************************/
+
+const uBOL_processChanges = mutations => {
+ for ( let i = 0; i < mutations.length; i++ ) {
+ const mutation = mutations[i];
+ for ( const added of mutation.addedNodes ) {
+ if ( added.nodeType !== 1 ) { continue; }
+ pendingNodes.add(added);
+ }
+ }
+ if ( pendingNodes.hasNodes() === false ) { return; }
+ lastDomChange = Date.now();
+ if ( processTimer !== undefined ) { return; }
+ processTimer = self.setTimeout(( ) => {
+ processTimer = undefined;
+ uBOL_processNodes();
+ }, 64);
+};
+
+/******************************************************************************/
+
+const uBOL_injectCSS = (css, count = 10) => {
+ chrome.runtime.sendMessage({ what: 'insertCSS', css }).catch(( ) => {
+ count -= 1;
+ if ( count === 0 ) { return; }
+ uBOL_injectCSS(css, count - 1);
+ });
+};
+
+/******************************************************************************/
+
+pendingNodes.add(document);
+uBOL_processNodes();
+
+let domMutationObserver = new MutationObserver(uBOL_processChanges);
+domMutationObserver.observe(document, {
+ childList: true,
+ subtree: true,
+});
+
+const needDomChangeObserver = ( ) => {
+ domChangeTimer = undefined;
+ if ( domMutationObserver === undefined ) { return; }
+ if ( (Date.now() - lastDomChange) > 20000 ) {
+ return stopAll('no more DOM changes');
+ }
+ domChangeTimer = self.setTimeout(needDomChangeObserver, 20000);
+};
+
+needDomChangeObserver();
+
+/******************************************************************************/
+
+const stopAll = reason => {
+ if ( domChangeTimer !== undefined ) {
+ self.clearTimeout(domChangeTimer);
+ domChangeTimer = undefined;
+ }
+ domMutationObserver.disconnect();
+ domMutationObserver.takeRecords();
+ domMutationObserver = undefined;
+ genericSelectorMap.clear();
+ console.info(`uBOL: Generic cosmetic filtering stopped because ${reason}`);
+};
+
+/******************************************************************************/
+
+})();
+
+/******************************************************************************/
diff --git a/platform/mv3/extension/js/scripting/css-procedural.js b/platform/mv3/extension/js/scripting/css-procedural.js
new file mode 100644
index 0000000..818e697
--- /dev/null
+++ b/platform/mv3/extension/js/scripting/css-procedural.js
@@ -0,0 +1,762 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint esversion:11 */
+
+'use strict';
+
+/******************************************************************************/
+
+// Important!
+// Isolate from global scope
+(function uBOL_cssProcedural() {
+
+/******************************************************************************/
+
+const proceduralImports = self.proceduralImports || [];
+self.proceduralImports = undefined;
+delete self.proceduralImports;
+
+/******************************************************************************/
+
+const hnParts = [];
+try { hnParts.push(...document.location.hostname.split('.')); }
+catch(ex) { }
+const hnpartslen = hnParts.length;
+if ( hnpartslen === 0 ) { return; }
+
+const selectors = [];
+
+for ( const { argsList, exceptionsMap, hostnamesMap, entitiesMap } of proceduralImports ) {
+ const todoIndices = new Set();
+ const tonotdoIndices = [];
+ // Exceptions
+ if ( exceptionsMap.size !== 0 ) {
+ for ( let i = 0; i < hnpartslen; i++ ) {
+ const hn = hnParts.slice(i).join('.');
+ const excepted = exceptionsMap.get(hn);
+ if ( excepted ) { tonotdoIndices.push(...excepted); }
+ }
+ exceptionsMap.clear();
+ }
+ // Hostname-based
+ if ( hostnamesMap.size !== 0 ) {
+ const collectArgIndices = hn => {
+ let argsIndices = hostnamesMap.get(hn);
+ if ( argsIndices === undefined ) { return; }
+ if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; }
+ for ( const argsIndex of argsIndices ) {
+ if ( tonotdoIndices.includes(argsIndex) ) { continue; }
+ todoIndices.add(argsIndex);
+ }
+ };
+ for ( let i = 0; i < hnpartslen; i++ ) {
+ const hn = hnParts.slice(i).join('.');
+ collectArgIndices(hn);
+ }
+ collectArgIndices('*');
+ hostnamesMap.clear();
+ }
+ // Entity-based
+ if ( entitiesMap.size !== 0 ) {
+ const n = hnpartslen - 1;
+ for ( let i = 0; i < n; i++ ) {
+ for ( let j = n; j > i; j-- ) {
+ const en = hnParts.slice(i,j).join('.');
+ let argsIndices = entitiesMap.get(en);
+ if ( argsIndices === undefined ) { continue; }
+ if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; }
+ for ( const argsIndex of argsIndices ) {
+ if ( tonotdoIndices.includes(argsIndex) ) { continue; }
+ todoIndices.add(argsIndex);
+ }
+ }
+ }
+ entitiesMap.clear();
+ }
+ for ( const i of todoIndices ) {
+ selectors.push(...argsList[i].map(json => JSON.parse(json)));
+ }
+ argsList.length = 0;
+}
+proceduralImports.length = 0;
+
+if ( selectors.length === 0 ) { return; }
+
+/******************************************************************************/
+
+const uBOL_injectCSS = (css, count = 10) => {
+ chrome.runtime.sendMessage({ what: 'insertCSS', css }).catch(( ) => {
+ count -= 1;
+ if ( count === 0 ) { return; }
+ uBOL_injectCSS(css, count - 1);
+ });
+};
+
+const nonVisualElements = {
+ script: true,
+ style: true,
+};
+
+const regexFromString = (s, exact = false) => {
+ if ( s === '' ) { return /^/; }
+ const match = /^\/(.+)\/([i]?)$/.exec(s);
+ if ( match !== null ) {
+ return new RegExp(match[1], match[2] || undefined);
+ }
+ const reStr = s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
+ return new RegExp(exact ? `^${reStr}$` : reStr, 'i');
+};
+
+/******************************************************************************/
+
+// 'P' stands for 'Procedural'
+
+class PSelectorTask {
+ begin() {
+ }
+ end() {
+ }
+}
+
+/******************************************************************************/
+
+class PSelectorVoidTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ console.info(`uBO: :${task[0]}() operator does not exist`);
+ }
+ transpose() {
+ }
+}
+
+/******************************************************************************/
+
+class PSelectorHasTextTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.needle = regexFromString(task[1]);
+ }
+ transpose(node, output) {
+ if ( this.needle.test(node.textContent) ) {
+ output.push(node);
+ }
+ }
+}
+
+/******************************************************************************/
+
+class PSelectorIfTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.pselector = new PSelector(task[1]);
+ }
+ transpose(node, output) {
+ if ( this.pselector.test(node) === this.target ) {
+ output.push(node);
+ }
+ }
+}
+PSelectorIfTask.prototype.target = true;
+
+class PSelectorIfNotTask extends PSelectorIfTask {
+}
+PSelectorIfNotTask.prototype.target = false;
+
+/******************************************************************************/
+
+class PSelectorMatchesAttrTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.reAttr = regexFromString(task[1].attr, true);
+ this.reValue = regexFromString(task[1].value, true);
+ }
+ transpose(node, output) {
+ const attrs = node.getAttributeNames();
+ for ( const attr of attrs ) {
+ if ( this.reAttr.test(attr) === false ) { continue; }
+ if ( this.reValue.test(node.getAttribute(attr)) === false ) { continue; }
+ output.push(node);
+ }
+ }
+}
+
+/******************************************************************************/
+
+class PSelectorMatchesCSSTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.name = task[1].name;
+ this.pseudo = task[1].pseudo ? `::${task[1].pseudo}` : null;
+ let arg0 = task[1].value, arg1;
+ if ( Array.isArray(arg0) ) {
+ arg1 = arg0[1]; arg0 = arg0[0];
+ }
+ this.value = new RegExp(arg0, arg1);
+ }
+ transpose(node, output) {
+ const style = window.getComputedStyle(node, this.pseudo);
+ if ( style !== null && this.value.test(style[this.name]) ) {
+ output.push(node);
+ }
+ }
+}
+class PSelectorMatchesCSSAfterTask extends PSelectorMatchesCSSTask {
+ constructor(task) {
+ super(task);
+ this.pseudo = '::after';
+ }
+}
+
+class PSelectorMatchesCSSBeforeTask extends PSelectorMatchesCSSTask {
+ constructor(task) {
+ super(task);
+ this.pseudo = '::before';
+ }
+}
+
+/******************************************************************************/
+
+class PSelectorMatchesMediaTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.mql = window.matchMedia(task[1]);
+ if ( this.mql.media === 'not all' ) { return; }
+ this.mql.addEventListener('change', ( ) => {
+ if ( proceduralFilterer instanceof Object === false ) { return; }
+ proceduralFilterer.onDOMChanged([ null ]);
+ });
+ }
+ transpose(node, output) {
+ if ( this.mql.matches === false ) { return; }
+ output.push(node);
+ }
+}
+
+/******************************************************************************/
+
+class PSelectorMatchesPathTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.needle = regexFromString(
+ task[1].replace(/\P{ASCII}/gu, s => encodeURIComponent(s))
+ );
+ }
+ transpose(node, output) {
+ if ( this.needle.test(self.location.pathname + self.location.search) ) {
+ output.push(node);
+ }
+ }
+}
+
+/******************************************************************************/
+
+class PSelectorMinTextLengthTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.min = task[1];
+ }
+ transpose(node, output) {
+ if ( node.textContent.length >= this.min ) {
+ output.push(node);
+ }
+ }
+}
+
+/******************************************************************************/
+
+class PSelectorOthersTask extends PSelectorTask {
+ constructor() {
+ super();
+ this.targets = new Set();
+ }
+ begin() {
+ this.targets.clear();
+ }
+ end(output) {
+ const toKeep = new Set(this.targets);
+ const toDiscard = new Set();
+ const body = document.body;
+ let discard = null;
+ for ( let keep of this.targets ) {
+ while ( keep !== null && keep !== body ) {
+ toKeep.add(keep);
+ toDiscard.delete(keep);
+ discard = keep.previousElementSibling;
+ while ( discard !== null ) {
+ if (
+ nonVisualElements[discard.localName] !== true &&
+ toKeep.has(discard) === false
+ ) {
+ toDiscard.add(discard);
+ }
+ discard = discard.previousElementSibling;
+ }
+ discard = keep.nextElementSibling;
+ while ( discard !== null ) {
+ if (
+ nonVisualElements[discard.localName] !== true &&
+ toKeep.has(discard) === false
+ ) {
+ toDiscard.add(discard);
+ }
+ discard = discard.nextElementSibling;
+ }
+ keep = keep.parentElement;
+ }
+ }
+ for ( discard of toDiscard ) {
+ output.push(discard);
+ }
+ this.targets.clear();
+ }
+ transpose(candidate) {
+ for ( const target of this.targets ) {
+ if ( target.contains(candidate) ) { return; }
+ if ( candidate.contains(target) ) {
+ this.targets.delete(target);
+ }
+ }
+ this.targets.add(candidate);
+ }
+}
+
+/******************************************************************************/
+
+// https://github.com/AdguardTeam/ExtendedCss/issues/31#issuecomment-302391277
+// Prepend `:scope ` if needed.
+class PSelectorSpathTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.spath = task[1];
+ this.nth = /^(?:\s*[+~]|:)/.test(this.spath);
+ if ( this.nth ) { return; }
+ if ( /^\s*>/.test(this.spath) ) {
+ this.spath = `:scope ${this.spath.trim()}`;
+ }
+ }
+ transpose(node, output) {
+ const nodes = this.nth
+ ? PSelectorSpathTask.qsa(node, this.spath)
+ : node.querySelectorAll(this.spath);
+ for ( const node of nodes ) {
+ output.push(node);
+ }
+ }
+ // Helper method for other operators.
+ static qsa(node, selector) {
+ const parent = node.parentElement;
+ if ( parent === null ) { return []; }
+ let pos = 1;
+ for (;;) {
+ node = node.previousElementSibling;
+ if ( node === null ) { break; }
+ pos += 1;
+ }
+ return parent.querySelectorAll(
+ `:scope > :nth-child(${pos})${selector}`
+ );
+ }
+}
+
+/******************************************************************************/
+
+class PSelectorUpwardTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ const arg = task[1];
+ if ( typeof arg === 'number' ) {
+ this.i = arg;
+ } else {
+ this.s = arg;
+ }
+ }
+ transpose(node, output) {
+ if ( this.s !== '' ) {
+ const parent = node.parentElement;
+ if ( parent === null ) { return; }
+ node = parent.closest(this.s);
+ if ( node === null ) { return; }
+ } else {
+ let nth = this.i;
+ for (;;) {
+ node = node.parentElement;
+ if ( node === null ) { return; }
+ nth -= 1;
+ if ( nth === 0 ) { break; }
+ }
+ }
+ output.push(node);
+ }
+}
+PSelectorUpwardTask.prototype.i = 0;
+PSelectorUpwardTask.prototype.s = '';
+
+/******************************************************************************/
+
+class PSelectorWatchAttrs extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.observer = null;
+ this.observed = new WeakSet();
+ this.observerOptions = {
+ attributes: true,
+ subtree: true,
+ };
+ const attrs = task[1];
+ if ( Array.isArray(attrs) && attrs.length !== 0 ) {
+ this.observerOptions.attributeFilter = task[1];
+ }
+ }
+ // TODO: Is it worth trying to re-apply only the current selector?
+ handler() {
+ if ( proceduralFilterer instanceof Object ) {
+ proceduralFilterer.onDOMChanged([ null ]);
+ }
+ }
+ transpose(node, output) {
+ output.push(node);
+ if ( this.observed.has(node) ) { return; }
+ if ( this.observer === null ) {
+ this.observer = new MutationObserver(this.handler);
+ }
+ this.observer.observe(node, this.observerOptions);
+ this.observed.add(node);
+ }
+}
+
+/******************************************************************************/
+
+class PSelectorXpathTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.xpe = document.createExpression(task[1], null);
+ this.xpr = null;
+ }
+ transpose(node, output) {
+ this.xpr = this.xpe.evaluate(
+ node,
+ XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
+ this.xpr
+ );
+ let j = this.xpr.snapshotLength;
+ while ( j-- ) {
+ const node = this.xpr.snapshotItem(j);
+ if ( node.nodeType === 1 ) {
+ output.push(node);
+ }
+ }
+ }
+}
+
+/******************************************************************************/
+
+class PSelector {
+ constructor(o) {
+ this.raw = o.raw;
+ this.selector = o.selector;
+ this.tasks = [];
+ const tasks = [];
+ if ( Array.isArray(o.tasks) === false ) { return; }
+ for ( const task of o.tasks ) {
+ const ctor = this.operatorToTaskMap.get(task[0]) || PSelectorVoidTask;
+ tasks.push(new ctor(task));
+ }
+ this.tasks = tasks;
+ }
+ prime(input) {
+ const root = input || document;
+ if ( this.selector === '' ) { return [ root ]; }
+ if ( input !== document ) {
+ const c0 = this.selector.charCodeAt(0);
+ if ( c0 === 0x2B /* + */ || c0 === 0x7E /* ~ */ ) {
+ return Array.from(PSelectorSpathTask.qsa(input, this.selector));
+ } else if ( c0 === 0x3E /* > */ ) {
+ return Array.from(input.querySelectorAll(`:scope ${this.selector}`));
+ }
+ }
+ return Array.from(root.querySelectorAll(this.selector));
+ }
+ exec(input) {
+ let nodes = this.prime(input);
+ for ( const task of this.tasks ) {
+ if ( nodes.length === 0 ) { break; }
+ const transposed = [];
+ task.begin();
+ for ( const node of nodes ) {
+ task.transpose(node, transposed);
+ }
+ task.end(transposed);
+ nodes = transposed;
+ }
+ return nodes;
+ }
+ test(input) {
+ const nodes = this.prime(input);
+ for ( const node of nodes ) {
+ let output = [ node ];
+ for ( const task of this.tasks ) {
+ const transposed = [];
+ task.begin();
+ for ( const node of output ) {
+ task.transpose(node, transposed);
+ }
+ task.end(transposed);
+ output = transposed;
+ if ( output.length === 0 ) { break; }
+ }
+ if ( output.length !== 0 ) { return true; }
+ }
+ return false;
+ }
+}
+PSelector.prototype.operatorToTaskMap = new Map([
+ [ 'has', PSelectorIfTask ],
+ [ 'has-text', PSelectorHasTextTask ],
+ [ 'if', PSelectorIfTask ],
+ [ 'if-not', PSelectorIfNotTask ],
+ [ 'matches-attr', PSelectorMatchesAttrTask ],
+ [ 'matches-css', PSelectorMatchesCSSTask ],
+ [ 'matches-css-after', PSelectorMatchesCSSAfterTask ],
+ [ 'matches-css-before', PSelectorMatchesCSSBeforeTask ],
+ [ 'matches-media', PSelectorMatchesMediaTask ],
+ [ 'matches-path', PSelectorMatchesPathTask ],
+ [ 'min-text-length', PSelectorMinTextLengthTask ],
+ [ 'not', PSelectorIfNotTask ],
+ [ 'others', PSelectorOthersTask ],
+ [ 'spath', PSelectorSpathTask ],
+ [ 'upward', PSelectorUpwardTask ],
+ [ 'watch-attr', PSelectorWatchAttrs ],
+ [ 'xpath', PSelectorXpathTask ],
+]);
+
+/******************************************************************************/
+
+class PSelectorRoot extends PSelector {
+ constructor(o) {
+ super(o);
+ this.budget = 200; // I arbitrary picked a 1/5 second
+ this.raw = o.raw;
+ this.cost = 0;
+ this.lastAllowanceTime = 0;
+ this.action = o.action;
+ }
+ prime(input) {
+ try {
+ return super.prime(input);
+ } catch (ex) {
+ }
+ return [];
+ }
+}
+
+/******************************************************************************/
+
+class ProceduralFilterer {
+ constructor(selectors) {
+ this.selectors = [];
+ this.masterToken = this.randomToken();
+ this.styleTokenMap = new Map();
+ this.styledNodes = new Set();
+ this.timer = undefined;
+ this.hideStyle = 'display:none!important;';
+ this.addSelectors(selectors);
+ // Important: commit now (do not go through onDOMChanged) to be sure
+ // first pass is going to happen asap.
+ this.uBOL_commitNow();
+ }
+
+ addSelectors() {
+ for ( const selector of selectors ) {
+ const pselector = new PSelectorRoot(selector);
+ this.primeProceduralSelector(pselector);
+ this.selectors.push(pselector);
+ }
+ this.onDOMChanged();
+ }
+
+ // This allows to perform potentially expensive initialization steps
+ // before the filters are ready to be applied.
+ primeProceduralSelector(pselector) {
+ if ( pselector.action === undefined ) {
+ this.styleTokenFromStyle(this.hideStyle);
+ } else if ( pselector.action[0] === 'style' ) {
+ this.styleTokenFromStyle(pselector.action[1]);
+ }
+ return pselector;
+ }
+
+ uBOL_commitNow() {
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/341
+ // Be ready to unhide nodes which no longer matches any of
+ // the procedural selectors.
+ const toUnstyle = this.styledNodes;
+ this.styledNodes = new Set();
+
+ let t0 = Date.now();
+
+ for ( const pselector of this.selectors.values() ) {
+ const allowance = Math.floor((t0 - pselector.lastAllowanceTime) / 2000);
+ if ( allowance >= 1 ) {
+ pselector.budget += allowance * 50;
+ if ( pselector.budget > 200 ) { pselector.budget = 200; }
+ pselector.lastAllowanceTime = t0;
+ }
+ if ( pselector.budget <= 0 ) { continue; }
+ const nodes = pselector.exec();
+ const t1 = Date.now();
+ pselector.budget += t0 - t1;
+ if ( pselector.budget < -500 ) {
+ console.info('uBOL: disabling %s', pselector.raw);
+ pselector.budget = -0x7FFFFFFF;
+ }
+ t0 = t1;
+ if ( nodes.length === 0 ) { continue; }
+ this.processNodes(nodes, pselector.action);
+ }
+
+ this.unprocessNodes(toUnstyle);
+ }
+
+ styleTokenFromStyle(style) {
+ if ( style === undefined ) { return; }
+ let styleToken = this.styleTokenMap.get(style);
+ if ( styleToken !== undefined ) { return styleToken; }
+ styleToken = this.randomToken();
+ this.styleTokenMap.set(style, styleToken);
+ uBOL_injectCSS(`[${this.masterToken}][${styleToken}]\n{${style}}\n`);
+ return styleToken;
+ }
+
+ processNodes(nodes, action) {
+ const op = action && action[0] || '';
+ const arg = op !== '' ? action[1] : '';
+ switch ( op ) {
+ case '':
+ /* fall through */
+ case 'style': {
+ const styleToken = this.styleTokenFromStyle(
+ arg === '' ? this.hideStyle : arg
+ );
+ for ( const node of nodes ) {
+ node.setAttribute(this.masterToken, '');
+ node.setAttribute(styleToken, '');
+ this.styledNodes.add(node);
+ }
+ break;
+ }
+ case 'remove': {
+ for ( const node of nodes ) {
+ node.remove();
+ node.textContent = '';
+ }
+ break;
+ }
+ case 'remove-attr': {
+ const reAttr = regexFromString(arg, true);
+ for ( const node of nodes ) {
+ for ( const name of node.getAttributeNames() ) {
+ if ( reAttr.test(name) === false ) { continue; }
+ node.removeAttribute(name);
+ }
+ }
+ break;
+ }
+ case 'remove-class': {
+ const reClass = regexFromString(arg, true);
+ for ( const node of nodes ) {
+ const cl = node.classList;
+ for ( const name of cl.values() ) {
+ if ( reClass.test(name) === false ) { continue; }
+ cl.remove(name);
+ }
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ // TODO: Current assumption is one style per hit element. Could be an
+ // issue if an element has multiple styling and one styling is
+ // brought back. Possibly too rare to care about this for now.
+ unprocessNodes(nodes) {
+ for ( const node of nodes ) {
+ if ( this.styledNodes.has(node) ) { continue; }
+ node.removeAttribute(this.masterToken);
+ }
+ }
+
+ randomToken() {
+ const n = Math.random();
+ return String.fromCharCode(n * 25 + 97) +
+ Math.floor(
+ (0.25 + n * 0.75) * Number.MAX_SAFE_INTEGER
+ ).toString(36).slice(-8);
+ }
+
+ onDOMChanged() {
+ if ( this.timer !== undefined ) { return; }
+ this.timer = self.requestAnimationFrame(( ) => {
+ this.timer = undefined;
+ this.uBOL_commitNow();
+ });
+ }
+}
+
+/******************************************************************************/
+
+const proceduralFilterer = new ProceduralFilterer(selectors);
+
+const observer = new MutationObserver(mutations => {
+ let domChanged = false;
+ for ( let i = 0; i < mutations.length && !domChanged; i++ ) {
+ const mutation = mutations[i];
+ for ( const added of mutation.addedNodes ) {
+ if ( added.nodeType !== 1 ) { continue; }
+ domChanged = true;
+ break;
+ }
+ if ( domChanged === false ) {
+ for ( const removed of mutation.removedNodes ) {
+ if ( removed.nodeType !== 1 ) { continue; }
+ domChanged = true;
+ break;
+ }
+ }
+ }
+ if ( domChanged === false ) { return; }
+ proceduralFilterer.onDOMChanged();
+});
+
+observer.observe(document, {
+ childList: true,
+ subtree: true,
+});
+
+/******************************************************************************/
+
+})();
+
+/******************************************************************************/
+
+void 0;
diff --git a/platform/mv3/extension/js/scripting/css-specific.js b/platform/mv3/extension/js/scripting/css-specific.js
new file mode 100644
index 0000000..faf997c
--- /dev/null
+++ b/platform/mv3/extension/js/scripting/css-specific.js
@@ -0,0 +1,120 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint esversion:11 */
+
+'use strict';
+
+/******************************************************************************/
+
+// Important!
+// Isolate from global scope
+(function uBOL_cssSpecific() {
+
+/******************************************************************************/
+
+const specificImports = self.specificImports || [];
+self.specificImports = undefined;
+delete self.specificImports;
+
+/******************************************************************************/
+
+const hnParts = [];
+try { hnParts.push(...document.location.hostname.split('.')); }
+catch(ex) { }
+const hnpartslen = hnParts.length;
+if ( hnpartslen === 0 ) { return; }
+
+const selectors = [];
+
+for ( const { argsList, exceptionsMap, hostnamesMap, entitiesMap } of specificImports ) {
+ const todoIndices = new Set();
+ const tonotdoIndices = [];
+ // Exceptions
+ if ( exceptionsMap.size !== 0 ) {
+ for ( let i = 0; i < hnpartslen; i++ ) {
+ const hn = hnParts.slice(i).join('.');
+ const excepted = exceptionsMap.get(hn);
+ if ( excepted ) { tonotdoIndices.push(...excepted); }
+ }
+ exceptionsMap.clear();
+ }
+ // Hostname-based
+ if ( hostnamesMap.size !== 0 ) {
+ const collectArgIndices = hn => {
+ let argsIndices = hostnamesMap.get(hn);
+ if ( argsIndices === undefined ) { return; }
+ if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; }
+ for ( const argsIndex of argsIndices ) {
+ if ( tonotdoIndices.includes(argsIndex) ) { continue; }
+ todoIndices.add(argsIndex);
+ }
+ };
+ for ( let i = 0; i < hnpartslen; i++ ) {
+ const hn = hnParts.slice(i).join('.');
+ collectArgIndices(hn);
+ }
+ collectArgIndices('*');
+ hostnamesMap.clear();
+ }
+ // Entity-based
+ if ( entitiesMap.size !== 0 ) {
+ const n = hnpartslen - 1;
+ for ( let i = 0; i < n; i++ ) {
+ for ( let j = n; j > i; j-- ) {
+ const en = hnParts.slice(i,j).join('.');
+ let argsIndices = entitiesMap.get(en);
+ if ( argsIndices === undefined ) { continue; }
+ if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; }
+ for ( const argsIndex of argsIndices ) {
+ if ( tonotdoIndices.includes(argsIndex) ) { continue; }
+ todoIndices.add(argsIndex);
+ }
+ }
+ }
+ entitiesMap.clear();
+ }
+ for ( const i of todoIndices ) {
+ selectors.push(argsList[i]);
+ }
+ argsList.length = 0;
+}
+specificImports.length = 0;
+
+if ( selectors.length === 0 ) { return; }
+
+/******************************************************************************/
+
+(function uBOL_injectCSS(css, count = 10) {
+ chrome.runtime.sendMessage({ what: 'insertCSS', css }).catch(( ) => {
+ count -= 1;
+ if ( count === 0 ) { return; }
+ uBOL_injectCSS(css, count - 1);
+ });
+})(`${selectors.join(',')}{display:none!important;}`);
+
+/******************************************************************************/
+
+})();
+
+/******************************************************************************/
+
+void 0;
diff --git a/platform/mv3/extension/js/settings.js b/platform/mv3/extension/js/settings.js
new file mode 100644
index 0000000..1a95ac0
--- /dev/null
+++ b/platform/mv3/extension/js/settings.js
@@ -0,0 +1,488 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+import { browser, sendMessage, localRead, localWrite } from './ext.js';
+import { i18n$, i18n } from './i18n.js';
+import { dom, qs$, qsa$ } from './dom.js';
+import punycode from './punycode.js';
+
+/******************************************************************************/
+
+const rulesetMap = new Map();
+let cachedRulesetData = {};
+let hideUnusedSet = new Set([ 'regions' ]);
+
+/******************************************************************************/
+
+function renderNumber(value) {
+ return value.toLocaleString();
+}
+
+function hashFromIterable(iter) {
+ return Array.from(iter).sort().join('\n');
+}
+
+/******************************************************************************/
+
+function rulesetStats(rulesetId) {
+ const hasOmnipotence = cachedRulesetData.defaultFilteringMode > 1;
+ const rulesetDetails = rulesetMap.get(rulesetId);
+ if ( rulesetDetails === undefined ) { return; }
+ const { rules, filters } = rulesetDetails;
+ let ruleCount = rules.plain + rules.regex;
+ if ( hasOmnipotence ) {
+ ruleCount += rules.removeparam + rules.redirect + rules.modifyHeaders;
+ }
+ const filterCount = filters.accepted;
+ return { ruleCount, filterCount };
+}
+
+/******************************************************************************/
+
+function renderFilterLists() {
+ const { enabledRulesets, rulesetDetails } = cachedRulesetData;
+ const listGroupTemplate = qs$('#templates .groupEntry');
+ const listEntryTemplate = qs$('#templates .listEntry');
+ const listStatsTemplate = i18n$('perRulesetStats');
+ const groupNames = new Map([ [ 'user', '' ] ]);
+
+ const liFromListEntry = function(ruleset, li, hideUnused) {
+ if ( !li ) {
+ li = dom.clone(listEntryTemplate);
+ }
+ const on = enabledRulesets.includes(ruleset.id);
+ dom.cl.toggle(li, 'checked', on);
+ dom.cl.toggle(li, 'unused', hideUnused && !on);
+ qs$(li, 'input[type="checkbox"]').checked = on;
+ if ( dom.attr(li, 'data-listkey') !== ruleset.id ) {
+ dom.attr(li, 'data-listkey', ruleset.id);
+ qs$(li, '.listname').append(i18n.patchUnicodeFlags(ruleset.name));
+ dom.cl.remove(li, 'toRemove');
+ if ( ruleset.homeURL ) {
+ dom.cl.add(li, 'support');
+ dom.attr(qs$(li, 'a.support'), 'href', ruleset.homeURL);
+ } else {
+ dom.cl.remove(li, 'support');
+ }
+ if ( ruleset.instructionURL ) {
+ dom.cl.add(li, 'mustread');
+ dom.attr(qs$(li, 'a.mustread'), 'href', ruleset.instructionURL);
+ } else {
+ dom.cl.remove(li, 'mustread');
+ }
+ dom.cl.toggle(li, 'isDefault', ruleset.id === 'default');
+ }
+ const stats = rulesetStats(ruleset.id);
+ li.title = listStatsTemplate
+ .replace('{{ruleCount}}', renderNumber(stats.ruleCount))
+ .replace('{{filterCount}}', renderNumber(stats.filterCount));
+ dom.attr(
+ qs$(li, '.input.checkbox'),
+ 'disabled',
+ stats.ruleCount === 0 ? '' : null
+ );
+ dom.cl.remove(li, 'discard');
+ return li;
+ };
+
+ const listEntryCountFromGroup = function(groupRulesets) {
+ if ( Array.isArray(groupRulesets) === false ) { return ''; }
+ let count = 0,
+ total = 0;
+ for ( const ruleset of groupRulesets ) {
+ if ( enabledRulesets.includes(ruleset.id) ) {
+ count += 1;
+ }
+ total += 1;
+ }
+ return total !== 0 ?
+ `(${count.toLocaleString()}/${total.toLocaleString()})` :
+ '';
+ };
+
+ const liFromListGroup = function(groupKey, groupRulesets) {
+ let liGroup = qs$(`#lists > .groupEntry[data-groupkey="${groupKey}"]`);
+ if ( liGroup === null ) {
+ liGroup = dom.clone(listGroupTemplate);
+ let groupName = groupNames.get(groupKey);
+ if ( groupName === undefined ) {
+ groupName = i18n$('3pGroup' + groupKey.charAt(0).toUpperCase() + groupKey.slice(1));
+ groupNames.set(groupKey, groupName);
+ }
+ if ( groupName !== '' ) {
+ dom.text(qs$(liGroup, '.geName'), groupName);
+ }
+ }
+ if ( qs$(liGroup, '.geName:empty') === null ) {
+ dom.text(
+ qs$(liGroup, '.geCount'),
+ listEntryCountFromGroup(groupRulesets)
+ );
+ }
+ const hideUnused = mustHideUnusedLists(groupKey);
+ dom.cl.toggle(liGroup, 'hideUnused', hideUnused);
+ const ulGroup = qs$(liGroup, '.listEntries');
+ if ( !groupRulesets ) { return liGroup; }
+ groupRulesets.sort(function(a, b) {
+ return (a.name || '').localeCompare(b.name || '');
+ });
+ for ( let i = 0; i < groupRulesets.length; i++ ) {
+ const liEntry = liFromListEntry(
+ groupRulesets[i],
+ ulGroup.children[i],
+ hideUnused
+ );
+ if ( liEntry.parentElement === null ) {
+ ulGroup.appendChild(liEntry);
+ }
+ }
+ return liGroup;
+ };
+
+ // Visually split the filter lists in groups
+ const ulLists = qs$('#lists');
+ const groups = new Map([
+ [
+ 'default',
+ rulesetDetails.filter(ruleset =>
+ ruleset.id === 'default'
+ ),
+ ],
+ [
+ 'annoyances',
+ rulesetDetails.filter(ruleset =>
+ ruleset.group === 'annoyances'
+ ),
+ ],
+ [
+ 'misc',
+ rulesetDetails.filter(ruleset =>
+ ruleset.id !== 'default' &&
+ ruleset.group === undefined &&
+ typeof ruleset.lang !== 'string'
+ ),
+ ],
+ [
+ 'regions',
+ rulesetDetails.filter(ruleset =>
+ typeof ruleset.lang === 'string'
+ ),
+ ],
+ ]);
+
+ dom.cl.toggle(dom.body, 'hideUnused', mustHideUnusedLists('*'));
+
+ for ( const [ groupKey, groupRulesets ] of groups ) {
+ const liGroup = liFromListGroup(groupKey, groupRulesets);
+ dom.attr(liGroup, 'data-groupkey', groupKey);
+ if ( liGroup.parentElement === null ) {
+ ulLists.appendChild(liGroup);
+ }
+ }
+}
+
+/******************************************************************************/
+
+function renderWidgets() {
+ if ( cachedRulesetData.firstRun ) {
+ dom.cl.add(dom.body, 'firstRun');
+ }
+
+ renderDefaultMode();
+ renderTrustedSites();
+
+ qs$('#autoReload input[type="checkbox"').checked = cachedRulesetData.autoReload;
+
+ // Compute total counts
+ let rulesetCount = 0;
+ let filterCount = 0;
+ let ruleCount = 0;
+ for ( const liEntry of qsa$('#lists .listEntry[data-listkey]') ) {
+ if ( qs$(liEntry, 'input[type="checkbox"]:checked') === null ) { continue; }
+ rulesetCount += 1;
+ const stats = rulesetStats(liEntry.dataset.listkey);
+ if ( stats === undefined ) { continue; }
+ ruleCount += stats.ruleCount;
+ filterCount += stats.filterCount;
+ }
+ dom.text('#listsOfBlockedHostsPrompt', i18n$('perRulesetStats')
+ .replace('{{ruleCount}}', ruleCount.toLocaleString())
+ .replace('{{filterCount}}', filterCount.toLocaleString())
+ );
+
+ dom.cl.toggle(dom.body, 'noMoreRuleset',
+ rulesetCount === cachedRulesetData.maxNumberOfEnabledRulesets
+ );
+}
+
+/******************************************************************************/
+
+function renderDefaultMode() {
+ const defaultLevel = cachedRulesetData.defaultFilteringMode;
+ if ( defaultLevel !== 0 ) {
+ qs$(`.filteringModeCard input[type="radio"][value="${defaultLevel}"]`).checked = true;
+ } else {
+ dom.prop('.filteringModeCard input[type="radio"]', 'checked', false);
+ }
+}
+
+/******************************************************************************/
+
+async function onFilteringModeChange(ev) {
+ const input = ev.target;
+ const newLevel = parseInt(input.value, 10);
+
+ switch ( newLevel ) {
+ case 1: { // Revoke broad permissions
+ await browser.permissions.remove({
+ origins: [ '<all_urls>' ]
+ });
+ cachedRulesetData.defaultFilteringMode = 1;
+ break;
+ }
+ case 2:
+ case 3: { // Request broad permissions
+ const granted = await browser.permissions.request({
+ origins: [ '<all_urls>' ]
+ });
+ if ( granted ) {
+ const actualLevel = await sendMessage({
+ what: 'setDefaultFilteringMode',
+ level: newLevel,
+ });
+ cachedRulesetData.defaultFilteringMode = actualLevel;
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ renderFilterLists();
+ renderWidgets();
+}
+
+dom.on(
+ '#defaultFilteringMode',
+ 'change',
+ '.filteringModeCard input[type="radio"]',
+ ev => { onFilteringModeChange(ev); }
+);
+
+/******************************************************************************/
+
+dom.on('#autoReload input[type="checkbox"', 'change', ev => {
+ sendMessage({
+ what: 'setAutoReload',
+ state: ev.target.checked,
+ });
+});
+
+/******************************************************************************/
+
+function renderTrustedSites() {
+ const textarea = qs$('#trustedSites');
+ const hostnames = cachedRulesetData.trustedSites;
+ textarea.value = hostnames.map(hn => punycode.toUnicode(hn)).join('\n');
+ if ( textarea.value !== '' ) {
+ textarea.value += '\n';
+ }
+}
+
+function changeTrustedSites() {
+ const hostnames = getStagedTrustedSites();
+ const hash = hashFromIterable(cachedRulesetData.trustedSites);
+ if ( hashFromIterable(hostnames) === hash ) { return; }
+ sendMessage({
+ what: 'setTrustedSites',
+ hostnames,
+ });
+}
+
+function getStagedTrustedSites() {
+ const textarea = qs$('#trustedSites');
+ return textarea.value.split(/\s/).map(hn => {
+ try {
+ return punycode.toASCII(
+ (new URL(`https://${hn}/`)).hostname
+ );
+ } catch(_) {
+ }
+ return '';
+ }).filter(hn => hn !== '');
+}
+
+dom.on('#trustedSites', 'blur', changeTrustedSites);
+
+self.addEventListener('beforeunload', changeTrustedSites);
+
+/******************************************************************************/
+
+async function applyEnabledRulesets() {
+ const enabledRulesets = [];
+ for ( const liEntry of qsa$('#lists .listEntry[data-listkey]') ) {
+ const checked = qs$(liEntry, 'input[type="checkbox"]:checked') !== null;
+ dom.cl.toggle(liEntry, 'checked', checked);
+ if ( checked === false ) { continue; }
+ enabledRulesets.push(liEntry.dataset.listkey);
+ }
+
+ await sendMessage({
+ what: 'applyRulesets',
+ enabledRulesets,
+ });
+
+ renderWidgets();
+}
+
+dom.on('#lists', 'change', '.listEntry input[type="checkbox"]', ( ) => {
+ applyEnabledRulesets();
+});
+
+/******************************************************************************/
+
+// Collapsing of unused lists.
+
+function mustHideUnusedLists(which) {
+ const hideAll = hideUnusedSet.has('*');
+ if ( which === '*' ) { return hideAll; }
+ return hideUnusedSet.has(which) !== hideAll;
+}
+
+function toggleHideUnusedLists(which) {
+ const doesHideAll = hideUnusedSet.has('*');
+ let groupSelector;
+ let mustHide;
+ if ( which === '*' ) {
+ mustHide = doesHideAll === false;
+ groupSelector = '';
+ hideUnusedSet.clear();
+ if ( mustHide ) {
+ hideUnusedSet.add(which);
+ }
+ dom.cl.toggle(dom.body, 'hideUnused', mustHide);
+ dom.cl.toggle('.groupEntry[data-groupkey]', 'hideUnused', mustHide);
+ } else {
+ const doesHide = hideUnusedSet.has(which);
+ if ( doesHide ) {
+ hideUnusedSet.delete(which);
+ } else {
+ hideUnusedSet.add(which);
+ }
+ mustHide = doesHide === doesHideAll;
+ groupSelector = `.groupEntry[data-groupkey="${which}"]`;
+ dom.cl.toggle(groupSelector, 'hideUnused', mustHide);
+ }
+
+ for ( const elem of qsa$(`#lists ${groupSelector} .listEntry[data-listkey] input[type="checkbox"]:not(:checked)`) ) {
+ dom.cl.toggle(
+ elem.closest('.listEntry[data-listkey]'),
+ 'unused',
+ mustHide
+ );
+ }
+
+ localWrite('hideUnusedFilterLists', Array.from(hideUnusedSet));
+}
+
+dom.on('#lists', 'click', '.groupEntry[data-groupkey] > .geDetails', ev => {
+ toggleHideUnusedLists(
+ dom.attr(ev.target.closest('[data-groupkey]'), 'data-groupkey')
+ );
+});
+
+// Initialize from saved state.
+localRead('hideUnusedFilterLists').then(value => {
+ if ( Array.isArray(value) === false ) { return; }
+ hideUnusedSet = new Set(value);
+});
+
+/******************************************************************************/
+
+const bc = new self.BroadcastChannel('uBOL');
+
+bc.onmessage = ev => {
+ const message = ev.data;
+ if ( message instanceof Object === false ) { return; }
+ const local = cachedRulesetData;
+ let render = false;
+
+ // Keep added sites which have not yet been committed
+ if ( message.trustedSites !== undefined ) {
+ if ( hashFromIterable(message.trustedSites) !== hashFromIterable(local.trustedSites) ) {
+ const current = new Set(local.trustedSites);
+ const staged = new Set(getStagedTrustedSites());
+ for ( const hn of staged ) {
+ if ( current.has(hn) === false ) { continue; }
+ staged.delete(hn);
+ }
+ const combined = Array.from(new Set([ ...message.trustedSites, ...staged ]));
+ local.trustedSites = combined;
+ render = true;
+ }
+ }
+
+ if ( message.defaultFilteringMode !== undefined ) {
+ if ( message.defaultFilteringMode !== local.defaultFilteringMode ) {
+ local.defaultFilteringMode = message.defaultFilteringMode;
+ render = true;
+ }
+ }
+
+ if ( message.autoReload !== undefined ) {
+ if ( message.autoReload !== local.autoReload ) {
+ local.autoReload = message.autoReload;
+ render = true;
+ }
+ }
+
+ if ( message.enabledRulesets !== undefined ) {
+ if ( hashFromIterable(message.enabledRulesets) !== hashFromIterable(local.enabledRulesets) ) {
+ local.enabledRulesets = message.enabledRulesets;
+ render = true;
+ }
+ }
+
+ if ( render === false ) { return; }
+ renderFilterLists();
+ renderWidgets();
+};
+
+/******************************************************************************/
+
+sendMessage({
+ what: 'getOptionsPageData',
+}).then(data => {
+ if ( !data ) { return; }
+ cachedRulesetData = data;
+ rulesetMap.clear();
+ cachedRulesetData.rulesetDetails.forEach(rule => rulesetMap.set(rule.id, rule));
+ try {
+ renderFilterLists();
+ renderWidgets();
+ } catch(ex) {
+ }
+}).catch(reason => {
+ console.trace(reason);
+});
+
+/******************************************************************************/
diff --git a/platform/mv3/extension/js/theme.js b/platform/mv3/extension/js/theme.js
new file mode 100644
index 0000000..a61384e
--- /dev/null
+++ b/platform/mv3/extension/js/theme.js
@@ -0,0 +1,35 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint esversion:11 */
+
+'use strict';
+
+import { dom } from './dom.js';
+
+/******************************************************************************/
+
+const mql = self.matchMedia('(prefers-color-scheme: dark)');
+const theme = mql instanceof Object && mql.matches === true
+ ? 'dark'
+ : 'light';
+dom.cl.toggle(dom.html, 'dark', theme === 'dark');
+dom.cl.toggle(dom.html, 'light', theme !== 'dark');
diff --git a/platform/mv3/extension/js/utils.js b/platform/mv3/extension/js/utils.js
new file mode 100644
index 0000000..b1a463a
--- /dev/null
+++ b/platform/mv3/extension/js/utils.js
@@ -0,0 +1,151 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2022-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint esversion:11 */
+
+'use strict';
+
+/******************************************************************************/
+
+import { browser } from './ext.js';
+
+/******************************************************************************/
+
+function parsedURLromOrigin(origin) {
+ try {
+ return new URL(origin);
+ } catch(ex) {
+ }
+}
+
+/******************************************************************************/
+
+const toBroaderHostname = hn => {
+ if ( hn === '*' ) { return ''; }
+ const pos = hn.indexOf('.');
+ return pos !== -1 ? hn.slice(pos+1) : '*';
+};
+
+/******************************************************************************/
+
+// Is hna descendant hostname of hnb?
+
+const isDescendantHostname = (hna, hnb) => {
+ if ( hnb === 'all-urls' ) { return true; }
+ if ( hna.endsWith(hnb) === false ) { return false; }
+ if ( hna === hnb ) { return false; }
+ return hna.charCodeAt(hna.length - hnb.length - 1) === 0x2E /* '.' */;
+};
+
+const isDescendantHostnameOfIter = (hna, iterb) => {
+ const setb = iterb instanceof Set ? iterb : new Set(iterb);
+ if ( setb.has('all-urls') || setb.has('*') ) { return true; }
+ let hn = hna;
+ while ( hn ) {
+ const pos = hn.indexOf('.');
+ if ( pos === -1 ) { break; }
+ hn = hn.slice(pos + 1);
+ if ( setb.has(hn) ) { return true; }
+ }
+ return false;
+};
+
+const intersectHostnameIters = (itera, iterb) => {
+ const setb = iterb instanceof Set ? iterb : new Set(iterb);
+ if ( setb.has('all-urls') || setb.has('*') ) { return Array.from(itera); }
+ const out = [];
+ for ( const hna of itera ) {
+ if ( setb.has(hna) || isDescendantHostnameOfIter(hna, setb) ) {
+ out.push(hna);
+ }
+ }
+ return out;
+};
+
+const subtractHostnameIters = (itera, iterb) => {
+ const setb = iterb instanceof Set ? iterb : new Set(iterb);
+ if ( setb.has('all-urls') || setb.has('*') ) { return []; }
+ const out = [];
+ for ( const hna of itera ) {
+ if ( setb.has(hna) ) { continue; }
+ if ( isDescendantHostnameOfIter(hna, setb) ) { continue; }
+ out.push(hna);
+ }
+ return out;
+};
+
+/******************************************************************************/
+
+const matchesFromHostnames = hostnames => {
+ const out = [];
+ for ( const hn of hostnames ) {
+ if ( hn === '*' || hn === 'all-urls' ) {
+ out.length = 0;
+ out.push('<all_urls>');
+ break;
+ }
+ out.push(`*://*.${hn}/*`);
+ }
+ return out;
+};
+
+const hostnamesFromMatches = origins => {
+ const out = [];
+ for ( const origin of origins ) {
+ if ( origin === '<all_urls>' ) {
+ out.push('all-urls');
+ continue;
+ }
+ const match = /^\*:\/\/(?:\*\.)?([^\/]+)\/\*/.exec(origin);
+ if ( match === null ) { continue; }
+ out.push(match[1]);
+ }
+ return out;
+};
+
+/******************************************************************************/
+
+export const broadcastMessage = message => {
+ const bc = new self.BroadcastChannel('uBOL');
+ bc.postMessage(message);
+};
+
+/******************************************************************************/
+
+const ubolLog = (...args) => {
+ // Do not pollute dev console in stable release.
+ if ( browser.runtime.id === 'ddkjiahejlhfcafbddmgiahcphecmpfh' ) { return; }
+ console.info('[uBOL]', ...args);
+};
+
+/******************************************************************************/
+
+export {
+ parsedURLromOrigin,
+ toBroaderHostname,
+ isDescendantHostname,
+ isDescendantHostnameOfIter,
+ intersectHostnameIters,
+ subtractHostnameIters,
+ matchesFromHostnames,
+ hostnamesFromMatches,
+ ubolLog,
+};
diff --git a/platform/mv3/extension/managed_storage.json b/platform/mv3/extension/managed_storage.json
new file mode 100644
index 0000000..8571f59
--- /dev/null
+++ b/platform/mv3/extension/managed_storage.json
@@ -0,0 +1,15 @@
+{
+ "$schema": "http://json-schema.org/draft-03/schema#",
+ "type": "object",
+ "properties": {
+ "noFiltering": {
+ "title": "List of domains for which no filtering should occur",
+ "type": "array",
+ "items": { "type": "string" }
+ },
+ "disableFirstRunPage": {
+ "title": "Disable first run page",
+ "type": "boolean"
+ }
+ }
+}
diff --git a/platform/mv3/extension/popup.html b/platform/mv3/extension/popup.html
new file mode 100644
index 0000000..7492469
--- /dev/null
+++ b/platform/mv3/extension/popup.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html id="uBO-popup-panel" class="desktop">
+
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<link rel="stylesheet" href="css/default.css">
+<link rel="stylesheet" href="css/common.css">
+<link rel="stylesheet" href="css/fa-icons.css">
+<link rel="stylesheet" href="css/filtering-mode.css">
+<link rel="stylesheet" href="css/popup.css">
+<title data-i18n="extName"></title>
+</head>
+
+<body class="loading" data-section="">
+<div id="main">
+ <div id="hostname"><span></span>&shy;<span></span></div>
+ <!-- -------- -->
+ <div class="filteringModeSlider">
+ <div class="filteringModeButton"><div></div></div>
+ <span data-level="0"></span>
+ <span data-level="1"></span>
+ <span data-level="2"></span>
+ <span data-level="3"></span>
+ </div>
+ <!-- -------- -->
+ <div id="filteringModeText"><label data-i18n="popupFilteringModeLabel">_</label><br><span>_</span><span></span></div>
+ <div class="toolRibbon pageTools">
+ <span></span>
+ <span></span>
+ <span></span>
+ <span></span>
+ <span class="fa-icon tool enabled" tabindex="0" data-i18n-title="popupTipDashboard">cogs<span class="caption" data-i18n="popupTipDashboard"></span></span>
+ </div>
+ <!-- -------- -->
+ <div id="rulesetStats" data-section="a">
+ </div>
+ <hr data-section="a">
+ <!-- -------- -->
+ <div id="moreOrLess">
+ <span id="moreButton">
+ <span data-i18n="popupMoreButton">_</span>&emsp;<span class="fa-icon">angle-up</span>
+ </span>
+ <span id="lessButton">
+ <span class="fa-icon">angle-up</span>&emsp;<span data-i18n="popupLessButton">_</span>
+ </span>
+ </div>
+</div>
+
+<div id="templates">
+ <div class="rulesetDetails"><h1></h1><p data-section="b"></p></div>
+</div>
+
+<script src="js/theme.js" type="module"></script>
+<script src="js/fa-icons.js" type="module"></script>
+<script src="js/i18n.js" type="module"></script>
+<script src="js/popup.js" type="module"></script>
+
+</body>
+
+</html>
diff --git a/platform/mv3/firefox/background.html b/platform/mv3/firefox/background.html
new file mode 100644
index 0000000..58e9c5e
--- /dev/null
+++ b/platform/mv3/firefox/background.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>uBlock Origin Background Page</title>
+</head>
+<body>
+<script src="js/background.js" type="module"></script>
+</body>
+</html>
diff --git a/platform/mv3/firefox/manifest.json b/platform/mv3/firefox/manifest.json
new file mode 100644
index 0000000..723ef0f
--- /dev/null
+++ b/platform/mv3/firefox/manifest.json
@@ -0,0 +1,54 @@
+{
+ "action": {
+ "default_area": "navbar",
+ "default_icon": {
+ "16": "img/icon_16.png",
+ "32": "img/icon_32.png",
+ "64": "img/icon_64.png"
+ },
+ "default_popup": "popup.html"
+ },
+ "author": "Raymond Hill",
+ "background": {
+ "scripts": [ "/js/background.js" ],
+ "type": "module"
+ },
+ "browser_specific_settings": {
+ "gecko": {
+ "id": "uBOLite@raymondhill.net",
+ "strict_min_version": "114.0"
+ },
+ "gecko_android": {
+ "strict_min_version": "114.0"
+ }
+ },
+ "declarative_net_request": {
+ "rule_resources": [
+ ]
+ },
+ "default_locale": "en",
+ "description": "__MSG_extShortDesc__",
+ "icons": {
+ "16": "img/icon_16.png",
+ "32": "img/icon_32.png",
+ "64": "img/icon_64.png",
+ "128": "img/icon_128.png"
+ },
+ "manifest_version": 3,
+ "name": "__MSG_extName__",
+ "options_ui": {
+ "page": "dashboard.html"
+ },
+ "optional_permissions": [
+ "<all_urls>"
+ ],
+ "permissions": [
+ "activeTab",
+ "declarativeNetRequest",
+ "scripting",
+ "storage"
+ ],
+ "short_name": "uBO Lite",
+ "version": "1.0",
+ "web_accessible_resources": []
+}
diff --git a/platform/mv3/make-rulesets.js b/platform/mv3/make-rulesets.js
new file mode 100644
index 0000000..6b608bf
--- /dev/null
+++ b/platform/mv3/make-rulesets.js
@@ -0,0 +1,1344 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2022-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import fs from 'fs/promises';
+import https from 'https';
+import path from 'path';
+import process from 'process';
+import { createHash, randomBytes } from 'crypto';
+import redirectResourcesMap from './js/redirect-resources.js';
+import { dnrRulesetFromRawLists } from './js/static-dnr-filtering.js';
+import * as sfp from './js/static-filtering-parser.js';
+import * as makeScriptlet from './make-scriptlets.js';
+import { safeReplace } from './safe-replace.js';
+
+/******************************************************************************/
+
+const commandLineArgs = (( ) => {
+ const args = new Map();
+ let name, value;
+ for ( const arg of process.argv.slice(2) ) {
+ const pos = arg.indexOf('=');
+ if ( pos === -1 ) {
+ name = arg;
+ value = '';
+ } else {
+ name = arg.slice(0, pos);
+ value = arg.slice(pos+1);
+ }
+ args.set(name, value);
+ }
+ return args;
+})();
+
+const platform = commandLineArgs.get('platform') || 'chromium';
+const outputDir = commandLineArgs.get('output') || '.';
+const cacheDir = `${outputDir}/../mv3-data`;
+const rulesetDir = `${outputDir}/rulesets`;
+const scriptletDir = `${rulesetDir}/scripting`;
+const env = [
+ platform,
+ 'mv3',
+ 'ublock',
+ 'ubol',
+ 'user_stylesheet',
+];
+
+if ( platform !== 'firefox' ) {
+ env.push('native_css_has');
+}
+
+/******************************************************************************/
+
+const jsonSetMapReplacer = (k, v) => {
+ if ( v instanceof Set || v instanceof Map ) {
+ if ( v.size === 0 ) { return; }
+ return Array.from(v);
+ }
+ return v;
+};
+
+const uidint32 = (s) => {
+ const h = createHash('sha256').update(s).digest('hex').slice(0,8);
+ return parseInt(h,16) & 0x7FFFFFFF;
+};
+
+const hnSort = (a, b) =>
+ a.split('.').reverse().join('.').localeCompare(
+ b.split('.').reverse().join('.')
+ );
+
+/******************************************************************************/
+
+const stdOutput = [];
+
+const log = (text, silent = false) => {
+ stdOutput.push(text);
+ if ( silent === false ) {
+ console.log(text);
+ }
+};
+
+/******************************************************************************/
+
+const urlToFileName = url => {
+ return url
+ .replace(/^https?:\/\//, '')
+ .replace(/\//g, '_')
+ ;
+};
+
+const fetchList = (url, cacheDir) => {
+ return new Promise((resolve, reject) => {
+ const fname = urlToFileName(url);
+ fs.readFile(`${cacheDir}/${fname}`, { encoding: 'utf8' }).then(content => {
+ log(`\tFetched local ${url}`);
+ resolve({ url, content });
+ }).catch(( ) => {
+ log(`\tFetching remote ${url}`);
+ https.get(url, response => {
+ const data = [];
+ response.on('data', chunk => {
+ data.push(chunk.toString());
+ });
+ response.on('end', ( ) => {
+ const content = data.join('');
+ try {
+ writeFile(`${cacheDir}/${fname}`, content);
+ } catch (ex) {
+ }
+ resolve({ url, content });
+ });
+ }).on('error', error => {
+ reject(error);
+ });
+ });
+ });
+};
+
+/******************************************************************************/
+
+const writeFile = async (fname, data) => {
+ const dir = path.dirname(fname);
+ await fs.mkdir(dir, { recursive: true });
+ const promise = fs.writeFile(fname, data);
+ writeOps.push(promise);
+ return promise;
+};
+
+const copyFile = async (from, to) => {
+ const dir = path.dirname(to);
+ await fs.mkdir(dir, { recursive: true });
+ const promise = fs.copyFile(from, to);
+ writeOps.push(promise);
+ return promise;
+};
+
+const writeOps = [];
+
+/******************************************************************************/
+
+const ruleResources = [];
+const rulesetDetails = [];
+const scriptletStats = new Map();
+const genericDetails = new Map();
+const requiredRedirectResources = new Set();
+
+/******************************************************************************/
+
+async function fetchAsset(assetDetails) {
+ // Remember fetched URLs
+ const fetchedURLs = new Set();
+
+ // Fetch list and expand `!#include` directives
+ let parts = assetDetails.urls.map(url => ({ url }));
+ while ( parts.every(v => typeof v === 'string') === false ) {
+ const newParts = [];
+ for ( const part of parts ) {
+ if ( typeof part === 'string' ) {
+ newParts.push(part);
+ continue;
+ }
+ if ( fetchedURLs.has(part.url) ) {
+ newParts.push('');
+ continue;
+ }
+ fetchedURLs.add(part.url);
+ if ( part.url.startsWith('https://ublockorigin.github.io/uAssets/filters/') ) {
+ newParts.push(`!#trusted on ${assetDetails.secret}`);
+ }
+ newParts.push(
+ fetchList(part.url, cacheDir).then(details => {
+ const { url } = details;
+ const content = details.content.trim();
+ if ( typeof content === 'string' && content !== '' ) {
+ if (
+ content.startsWith('<') === false ||
+ content.endsWith('>') === false
+ ) {
+ return { url, content };
+ }
+ }
+ log(`No valid content for ${details.name}`);
+ return { url, content: '' };
+ })
+ );
+ newParts.push(`!#trusted off ${assetDetails.secret}`);
+ }
+ parts = await Promise.all(newParts);
+ parts = sfp.utils.preparser.expandIncludes(parts, env);
+ }
+ const text = parts.join('\n');
+
+ if ( text === '' ) {
+ log('No filterset found');
+ }
+ return text;
+}
+
+/******************************************************************************/
+
+const isUnsupported = rule =>
+ rule._error !== undefined;
+
+const isRegex = rule =>
+ rule.condition !== undefined &&
+ rule.condition.regexFilter !== undefined;
+
+const isRedirect = rule =>
+ rule.action !== undefined &&
+ rule.action.type === 'redirect' &&
+ rule.action.redirect.extensionPath !== undefined;
+
+const isModifyHeaders = rule =>
+ rule.action !== undefined &&
+ rule.action.type === 'modifyHeaders';
+
+const isRemoveparam = rule =>
+ rule.action !== undefined &&
+ rule.action.type === 'redirect' &&
+ rule.action.redirect.transform !== undefined;
+
+const isGood = rule =>
+ isUnsupported(rule) === false &&
+ isRedirect(rule) === false &&
+ isModifyHeaders(rule) === false &&
+ isRemoveparam(rule) === false;
+
+/******************************************************************************/
+
+// Two distinct hostnames:
+// www.example.com
+// example.com
+// Can be reduced to a single one:
+// example.com
+// Since if example.com matches, then www.example.com (or any other subdomain
+// of example.com) will always match.
+
+function pruneHostnameArray(hostnames) {
+ const rootMap = new Map();
+ for ( const hostname of hostnames ) {
+ const labels = hostname.split('.');
+ let currentMap = rootMap;
+ let i = labels.length;
+ while ( i-- ) {
+ const label = labels[i];
+ let nextMap = currentMap.get(label);
+ if ( nextMap === null ) { break; }
+ if ( nextMap === undefined ) {
+ if ( i === 0 ) {
+ currentMap.set(label, (nextMap = null));
+ } else {
+ currentMap.set(label, (nextMap = new Map()));
+ }
+ } else if ( i === 0 ) {
+ currentMap.set(label, null);
+ }
+ currentMap = nextMap;
+ }
+ }
+ const assemble = (currentMap, currentHostname, out) => {
+ for ( const [ label, nextMap ] of currentMap ) {
+ const nextHostname = currentHostname === ''
+ ? label
+ : `${label}.${currentHostname}`;
+ if ( nextMap === null ) {
+ out.push(nextHostname);
+ } else {
+ assemble(nextMap, nextHostname, out);
+ }
+ }
+ return out;
+ };
+ return assemble(rootMap, '', []);
+}
+
+/*******************************************************************************
+ *
+ * For large rulesets, one rule per line for compromise between size and
+ * readability. This also means that the number of lines in resulting file
+ * representative of the number of rules in the ruleset.
+ *
+ * */
+
+function toJSONRuleset(ruleset) {
+ const replacer = (k, v) => {
+ if ( k.startsWith('_') ) { return; }
+ if ( Array.isArray(v) ) {
+ return v.sort();
+ }
+ if ( v instanceof Object ) {
+ const sorted = {};
+ for ( const kk of Object.keys(v).sort() ) {
+ sorted[kk] = v[kk];
+ }
+ return sorted;
+ }
+ return v;
+ };
+ const indent = ruleset.length > 10 ? undefined : 1;
+ const out = [];
+ for ( const rule of ruleset ) {
+ out.push(JSON.stringify(rule, replacer, indent));
+ }
+ return `[\n${out.join(',\n')}\n]\n`;
+}
+
+/******************************************************************************/
+
+async function processNetworkFilters(assetDetails, network) {
+ const { ruleset: rules } = network;
+ log(`Input filter count: ${network.filterCount}`);
+ log(`\tAccepted filter count: ${network.acceptedFilterCount}`);
+ log(`\tRejected filter count: ${network.rejectedFilterCount}`);
+ log(`Output rule count: ${rules.length}`);
+
+ // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/declarativeNetRequest/RuleCondition#browser_compatibility
+ // isUrlFilterCaseSensitive is true by default in Chromium. It will be
+ // false by default in Chromium 118+.
+ if ( platform !== 'firefox' ) {
+ for ( const rule of rules ) {
+ const { condition } = rule;
+ if ( condition === undefined ) { continue; }
+ if ( condition.urlFilter === undefined ) {
+ if ( condition.regexFilter === undefined ) { continue; }
+ }
+ if ( condition.isUrlFilterCaseSensitive === undefined ) {
+ condition.isUrlFilterCaseSensitive = false;
+ } else if ( condition.isUrlFilterCaseSensitive === true ) {
+ condition.isUrlFilterCaseSensitive = undefined;
+ }
+ }
+ }
+
+ // Minimize requestDomains arrays
+ for ( const rule of rules ) {
+ const condition = rule.condition;
+ if ( condition === undefined ) { continue; }
+ const requestDomains = condition.requestDomains;
+ if ( requestDomains === undefined ) { continue; }
+ const beforeCount = requestDomains.length;
+ condition.requestDomains = pruneHostnameArray(requestDomains);
+ const afterCount = condition.requestDomains.length;
+ if ( afterCount !== beforeCount ) {
+ log(`\tPruning requestDomains: from ${beforeCount} to ${afterCount}`);
+ }
+ }
+
+ const plainGood = rules.filter(rule => isGood(rule) && isRegex(rule) === false);
+ log(`\tPlain good: ${plainGood.length}`);
+ log(plainGood
+ .filter(rule => Array.isArray(rule._warning))
+ .map(rule => rule._warning.map(v => `\t\t${v}`))
+ .join('\n'),
+ true
+ );
+
+ const regexes = rules.filter(rule => isGood(rule) && isRegex(rule));
+ log(`\tMaybe good (regexes): ${regexes.length}`);
+
+ const redirects = rules.filter(rule =>
+ isUnsupported(rule) === false &&
+ isRedirect(rule)
+ );
+ redirects.forEach(rule => {
+ requiredRedirectResources.add(
+ rule.action.redirect.extensionPath.replace(/^\/+/, '')
+ );
+ });
+ log(`\tredirect=: ${redirects.length}`);
+
+ const removeparamsGood = rules.filter(rule =>
+ isUnsupported(rule) === false && isRemoveparam(rule)
+ );
+ const removeparamsBad = rules.filter(rule =>
+ isUnsupported(rule) && isRemoveparam(rule)
+ );
+ log(`\tremoveparams= (accepted/discarded): ${removeparamsGood.length}/${removeparamsBad.length}`);
+
+ const modifyHeaders = rules.filter(rule =>
+ isUnsupported(rule) === false &&
+ isModifyHeaders(rule)
+ );
+ log(`\tmodifyHeaders=: ${modifyHeaders.length}`);
+
+ const bad = rules.filter(rule =>
+ isUnsupported(rule)
+ );
+ log(`\tUnsupported: ${bad.length}`);
+ log(bad.map(rule => rule._error.map(v => `\t\t${v}`)).join('\n'), true);
+
+ writeFile(
+ `${rulesetDir}/main/${assetDetails.id}.json`,
+ toJSONRuleset(plainGood)
+ );
+
+ if ( regexes.length !== 0 ) {
+ writeFile(
+ `${rulesetDir}/regex/${assetDetails.id}.json`,
+ toJSONRuleset(regexes)
+ );
+ }
+
+ if ( removeparamsGood.length !== 0 ) {
+ writeFile(
+ `${rulesetDir}/removeparam/${assetDetails.id}.json`,
+ toJSONRuleset(removeparamsGood)
+ );
+ }
+
+ if ( redirects.length !== 0 ) {
+ writeFile(
+ `${rulesetDir}/redirect/${assetDetails.id}.json`,
+ toJSONRuleset(redirects)
+ );
+ }
+
+ if ( modifyHeaders.length !== 0 ) {
+ writeFile(
+ `${rulesetDir}/modify-headers/${assetDetails.id}.json`,
+ toJSONRuleset(modifyHeaders)
+ );
+ }
+
+ return {
+ total: rules.length,
+ plain: plainGood.length,
+ discarded: removeparamsBad.length,
+ rejected: bad.length,
+ regex: regexes.length,
+ removeparam: removeparamsGood.length,
+ redirect: redirects.length,
+ modifyHeaders: modifyHeaders.length,
+ };
+}
+
+/******************************************************************************/
+
+// TODO: unify css/scriptlet processing code since now css styles are
+// injected using scriptlet injection.
+
+// Load all available scriptlets into a key-val map, where the key is the
+// scriptlet token, and val is the whole content of the file.
+
+let scriptletsMapPromise;
+
+function loadAllSourceScriptlets() {
+ if ( scriptletsMapPromise !== undefined ) {
+ return scriptletsMapPromise;
+ }
+
+ scriptletsMapPromise = fs.readdir('./scriptlets').then(files => {
+ const readTemplateFile = file =>
+ fs.readFile(`./scriptlets/${file}`, { encoding: 'utf8' })
+ .then(text => ({ file, text }));
+ const readPromises = [];
+ for ( const file of files ) {
+ readPromises.push(readTemplateFile(file));
+ }
+ return Promise.all(readPromises).then(results => {
+ const originalScriptletMap = new Map();
+ for ( const details of results ) {
+ originalScriptletMap.set(
+ details.file.replace('.template.js', '')
+ .replace('.template.css', ''),
+ details.text
+ );
+ }
+ return originalScriptletMap;
+ });
+ });
+
+ return scriptletsMapPromise;
+}
+
+/******************************************************************************/
+
+async function processGenericCosmeticFilters(assetDetails, bucketsMap, exceptionSet) {
+ if ( bucketsMap === undefined ) { return 0; }
+ if ( exceptionSet ) {
+ for ( const [ hash, selectors ] of bucketsMap ) {
+ let i = selectors.length;
+ while ( i-- ) {
+ const selector = selectors[i];
+ if ( exceptionSet.has(selector) === false ) { continue; }
+ selectors.splice(i, 1);
+ //log(`\tRemoving excepted generic filter ##${selector}`);
+ }
+ if ( selectors.length === 0 ) {
+ bucketsMap.delete(hash);
+ }
+ }
+ }
+ if ( bucketsMap.size === 0 ) { return 0; }
+ const bucketsList = Array.from(bucketsMap);
+ const count = bucketsList.reduce((a, v) => a += v[1].length, 0);
+ if ( count === 0 ) { return 0; }
+ const selectorLists = bucketsList.map(v => [ v[0], v[1].join(',') ]);
+ const originalScriptletMap = await loadAllSourceScriptlets();
+
+ let patchedScriptlet = originalScriptletMap.get('css-generic').replace(
+ '$rulesetId$',
+ assetDetails.id
+ );
+ patchedScriptlet = safeReplace(patchedScriptlet,
+ /\bself\.\$genericSelectorMap\$/,
+ `${JSON.stringify(selectorLists, scriptletJsonReplacer)}`
+ );
+
+ writeFile(
+ `${scriptletDir}/generic/${assetDetails.id}.js`,
+ patchedScriptlet
+ );
+
+ log(`CSS-generic: ${count} plain CSS selectors`);
+
+ return count;
+}
+
+/******************************************************************************/
+
+async function processGenericHighCosmeticFilters(assetDetails, selectorSet, exceptionSet) {
+ if ( selectorSet === undefined ) { return 0; }
+ if ( exceptionSet ) {
+ for ( const selector of selectorSet ) {
+ if ( exceptionSet.has(selector) === false ) { continue; }
+ selectorSet.delete(selector);
+ //log(`\tRemoving excepted generic filter ##${selector}`);
+ }
+ }
+ if ( selectorSet.size === 0 ) { return 0; }
+ const selectorLists = Array.from(selectorSet).sort().join(',\n');
+ const originalScriptletMap = await loadAllSourceScriptlets();
+
+ let patchedScriptlet = originalScriptletMap.get('css-generichigh').replace(
+ '$rulesetId$',
+ assetDetails.id
+ );
+ patchedScriptlet = safeReplace(patchedScriptlet,
+ /\$selectorList\$/,
+ selectorLists
+ );
+
+ writeFile(
+ `${scriptletDir}/generichigh/${assetDetails.id}.css`,
+ patchedScriptlet
+ );
+
+ log(`CSS-generic-high: ${selectorSet.size} plain CSS selectors`);
+
+ return selectorSet.size;
+}
+
+/******************************************************************************/
+
+// This merges selectors which are used by the same hostnames
+
+function groupSelectorsByHostnames(mapin) {
+ if ( mapin === undefined ) { return []; }
+ const merged = new Map();
+ for ( const [ selector, details ] of mapin ) {
+ if ( details.rejected ) { continue; }
+ const json = JSON.stringify(details);
+ let entries = merged.get(json);
+ if ( entries === undefined ) {
+ entries = new Set();
+ merged.set(json, entries);
+ }
+ entries.add(selector);
+ }
+ const out = [];
+ for ( const [ json, entries ] of merged ) {
+ const details = JSON.parse(json);
+ details.selectors = Array.from(entries).sort();
+ out.push(details);
+ }
+ return out;
+}
+
+// This merges hostnames which have the same set of selectors.
+//
+// Also, we sort the hostnames to increase likelihood that selector with
+// same hostnames will end up in same generated scriptlet.
+
+function groupHostnamesBySelectors(arrayin) {
+ const contentMap = new Map();
+ for ( const entry of arrayin ) {
+ const id = uidint32(JSON.stringify(entry.selectors));
+ let details = contentMap.get(id);
+ if ( details === undefined ) {
+ details = { a: entry.selectors };
+ contentMap.set(id, details);
+ }
+ if ( entry.matches !== undefined ) {
+ if ( details.y === undefined ) {
+ details.y = new Set();
+ }
+ for ( const hn of entry.matches ) {
+ details.y.add(hn);
+ }
+ }
+ if ( entry.excludeMatches !== undefined ) {
+ if ( details.n === undefined ) {
+ details.n = new Set();
+ }
+ for ( const hn of entry.excludeMatches ) {
+ details.n.add(hn);
+ }
+ }
+ }
+ const out = Array.from(contentMap).map(a => [
+ a[0], {
+ a: a[1].a,
+ y: a[1].y ? Array.from(a[1].y).sort(hnSort) : '*',
+ n: a[1].n ? Array.from(a[1].n) : undefined,
+ }
+ ]).sort((a, b) => {
+ const ha = Array.isArray(a[1].y) ? a[1].y[0] : '*';
+ const hb = Array.isArray(b[1].y) ? b[1].y[0] : '*';
+ return hnSort(ha, hb);
+ });
+ return out;
+}
+
+const scriptletHostnameToIdMap = (hostnames, id, map) => {
+ for ( const hn of hostnames ) {
+ const existing = map.get(hn);
+ if ( existing === undefined ) {
+ map.set(hn, id);
+ } else if ( Array.isArray(existing) ) {
+ existing.push(id);
+ } else {
+ map.set(hn, [ existing, id ]);
+ }
+ }
+};
+
+const scriptletJsonReplacer = (k, v) => {
+ if ( k === 'n' ) {
+ if ( v === undefined || v.size === 0 ) { return; }
+ return Array.from(v);
+ }
+ if ( v instanceof Set || v instanceof Map ) {
+ if ( v.size === 0 ) { return; }
+ return Array.from(v);
+ }
+ return v;
+};
+
+/******************************************************************************/
+
+function argsMap2List(argsMap, hostnamesMap) {
+ const argsList = [];
+ const indexMap = new Map();
+ for ( const [ id, details ] of argsMap ) {
+ indexMap.set(id, argsList.length);
+ argsList.push(details);
+ }
+ for ( const [ hn, ids ] of hostnamesMap ) {
+ if ( typeof ids === 'number' ) {
+ hostnamesMap.set(hn, indexMap.get(ids));
+ continue;
+ }
+ for ( let i = 0; i < ids.length; i++ ) {
+ ids[i] = indexMap.get(ids[i]);
+ }
+ }
+ return argsList;
+}
+
+/******************************************************************************/
+
+async function processCosmeticFilters(assetDetails, mapin) {
+ if ( mapin === undefined ) { return 0; }
+ if ( mapin.size === 0 ) { return 0; }
+
+ const domainBasedEntries = groupHostnamesBySelectors(
+ groupSelectorsByHostnames(mapin)
+ );
+ // We do not want more than n CSS files per subscription, so we will
+ // group multiple unrelated selectors in the same file, and distinct
+ // css declarations will be injected programmatically according to the
+ // hostname of the current document.
+ //
+ // The cosmetic filters will be injected programmatically as content
+ // script and the decisions to activate the cosmetic filters will be
+ // done at injection time according to the document's hostname.
+ const generatedFiles = [];
+
+ const argsMap = domainBasedEntries.map(entry => [
+ entry[0],
+ {
+ a: entry[1].a ? entry[1].a.join(',\n') : undefined,
+ n: entry[1].n
+ }
+ ]);
+ const hostnamesMap = new Map();
+ for ( const [ id, details ] of domainBasedEntries ) {
+ if ( details.y === undefined ) { continue; }
+ scriptletHostnameToIdMap(details.y, id, hostnamesMap);
+ }
+ const argsList = argsMap2List(argsMap, hostnamesMap);
+ const entitiesMap = new Map();
+ for ( const [ hn, details ] of hostnamesMap ) {
+ if ( hn.endsWith('.*') === false ) { continue; }
+ hostnamesMap.delete(hn);
+ entitiesMap.set(hn.slice(0, -2), details);
+ }
+
+ // Extract exceptions from argsList, simplify argsList entries
+ const exceptionsMap = new Map();
+ for ( let i = 0; i < argsList.length; i++ ) {
+ const details = argsList[i];
+ if ( details.n ) {
+ for ( const hn of details.n ) {
+ if ( exceptionsMap.has(hn) === false ) {
+ exceptionsMap.set(hn, []);
+ }
+ exceptionsMap.get(hn).push(i);
+ }
+ }
+ argsList[i] = details.a;
+ }
+
+ const originalScriptletMap = await loadAllSourceScriptlets();
+ let patchedScriptlet = originalScriptletMap.get('css-specific').replace(
+ '$rulesetId$',
+ assetDetails.id
+ );
+ patchedScriptlet = safeReplace(patchedScriptlet,
+ /\bself\.\$argsList\$/,
+ `${JSON.stringify(argsList, scriptletJsonReplacer)}`
+ );
+ patchedScriptlet = safeReplace(patchedScriptlet,
+ /\bself\.\$hostnamesMap\$/,
+ `${JSON.stringify(hostnamesMap, scriptletJsonReplacer)}`
+ );
+ patchedScriptlet = safeReplace(patchedScriptlet,
+ /\bself\.\$entitiesMap\$/,
+ `${JSON.stringify(entitiesMap, scriptletJsonReplacer)}`
+ );
+ patchedScriptlet = safeReplace(patchedScriptlet,
+ /\bself\.\$exceptionsMap\$/,
+ `${JSON.stringify(exceptionsMap, scriptletJsonReplacer)}`
+ );
+ writeFile(`${scriptletDir}/specific/${assetDetails.id}.js`, patchedScriptlet);
+ generatedFiles.push(`${assetDetails.id}`);
+
+ if ( generatedFiles.length !== 0 ) {
+ log(`CSS-specific: ${mapin.size} distinct filters`);
+ log(`\tCombined into ${hostnamesMap.size} distinct hostnames`);
+ log(`\tCombined into ${entitiesMap.size} distinct entities`);
+ }
+
+ return hostnamesMap.size + entitiesMap.size;
+}
+
+/******************************************************************************/
+
+async function processDeclarativeCosmeticFilters(assetDetails, mapin) {
+ if ( mapin === undefined ) { return 0; }
+ if ( mapin.size === 0 ) { return 0; }
+
+ // Distinguish declarative-compiled-as-procedural from actual procedural.
+ const declaratives = new Map();
+ mapin.forEach((details, jsonSelector) => {
+ const selector = JSON.parse(jsonSelector);
+ if ( selector.cssable !== true ) { return; }
+ selector.cssable = undefined;
+ declaratives.set(JSON.stringify(selector), details);
+ });
+ if ( declaratives.size === 0 ) { return 0; }
+
+ const contentArray = groupHostnamesBySelectors(
+ groupSelectorsByHostnames(declaratives)
+ );
+
+ const argsMap = contentArray.map(entry => [
+ entry[0],
+ {
+ a: entry[1].a,
+ n: entry[1].n,
+ }
+ ]);
+ const hostnamesMap = new Map();
+ for ( const [ id, details ] of contentArray ) {
+ if ( details.y === undefined ) { continue; }
+ scriptletHostnameToIdMap(details.y, id, hostnamesMap);
+ }
+ const argsList = argsMap2List(argsMap, hostnamesMap);
+ const entitiesMap = new Map();
+ for ( const [ hn, details ] of hostnamesMap ) {
+ if ( hn.endsWith('.*') === false ) { continue; }
+ hostnamesMap.delete(hn);
+ entitiesMap.set(hn.slice(0, -2), details);
+ }
+
+ // Extract exceptions from argsList, simplify argsList entries
+ const exceptionsMap = new Map();
+ for ( let i = 0; i < argsList.length; i++ ) {
+ const details = argsList[i];
+ if ( details.n ) {
+ for ( const hn of details.n ) {
+ if ( exceptionsMap.has(hn) === false ) {
+ exceptionsMap.set(hn, []);
+ }
+ exceptionsMap.get(hn).push(i);
+ }
+ }
+ argsList[i] = details.a;
+ }
+
+ const originalScriptletMap = await loadAllSourceScriptlets();
+ let patchedScriptlet = originalScriptletMap.get('css-declarative').replace(
+ '$rulesetId$',
+ assetDetails.id
+ );
+ patchedScriptlet = safeReplace(patchedScriptlet,
+ /\bself\.\$argsList\$/,
+ `${JSON.stringify(argsList, scriptletJsonReplacer)}`
+ );
+ patchedScriptlet = safeReplace(patchedScriptlet,
+ /\bself\.\$hostnamesMap\$/,
+ `${JSON.stringify(hostnamesMap, scriptletJsonReplacer)}`
+ );
+ patchedScriptlet = safeReplace(patchedScriptlet,
+ /\bself\.\$entitiesMap\$/,
+ `${JSON.stringify(entitiesMap, scriptletJsonReplacer)}`
+ );
+ patchedScriptlet = safeReplace(patchedScriptlet,
+ /\bself\.\$exceptionsMap\$/,
+ `${JSON.stringify(exceptionsMap, scriptletJsonReplacer)}`
+ );
+ writeFile(`${scriptletDir}/declarative/${assetDetails.id}.js`, patchedScriptlet);
+
+ if ( contentArray.length !== 0 ) {
+ log(`CSS-declarative: ${declaratives.size} distinct filters`);
+ log(`\tCombined into ${hostnamesMap.size} distinct hostnames`);
+ log(`\tCombined into ${entitiesMap.size} distinct entities`);
+ }
+
+ return hostnamesMap.size + entitiesMap.size;
+}
+
+/******************************************************************************/
+
+async function processProceduralCosmeticFilters(assetDetails, mapin) {
+ if ( mapin === undefined ) { return 0; }
+ if ( mapin.size === 0 ) { return 0; }
+
+ // Distinguish declarative-compiled-as-procedural from actual procedural.
+ const procedurals = new Map();
+ mapin.forEach((details, jsonSelector) => {
+ const selector = JSON.parse(jsonSelector);
+ if ( selector.cssable ) { return; }
+ procedurals.set(jsonSelector, details);
+ });
+ if ( procedurals.size === 0 ) { return 0; }
+
+ const contentArray = groupHostnamesBySelectors(
+ groupSelectorsByHostnames(procedurals)
+ );
+
+ const argsMap = contentArray.map(entry => [
+ entry[0],
+ {
+ a: entry[1].a,
+ n: entry[1].n,
+ }
+ ]);
+ const hostnamesMap = new Map();
+ for ( const [ id, details ] of contentArray ) {
+ if ( details.y === undefined ) { continue; }
+ scriptletHostnameToIdMap(details.y, id, hostnamesMap);
+ }
+ const argsList = argsMap2List(argsMap, hostnamesMap);
+ const entitiesMap = new Map();
+ for ( const [ hn, details ] of hostnamesMap ) {
+ if ( hn.endsWith('.*') === false ) { continue; }
+ hostnamesMap.delete(hn);
+ entitiesMap.set(hn.slice(0, -2), details);
+ }
+
+ // Extract exceptions from argsList, simplify argsList entries
+ const exceptionsMap = new Map();
+ for ( let i = 0; i < argsList.length; i++ ) {
+ const details = argsList[i];
+ if ( details.n ) {
+ for ( const hn of details.n ) {
+ if ( exceptionsMap.has(hn) === false ) {
+ exceptionsMap.set(hn, []);
+ }
+ exceptionsMap.get(hn).push(i);
+ }
+ }
+ argsList[i] = details.a;
+ }
+
+ const originalScriptletMap = await loadAllSourceScriptlets();
+ let patchedScriptlet = originalScriptletMap.get('css-procedural').replace(
+ '$rulesetId$',
+ assetDetails.id
+ );
+ patchedScriptlet = safeReplace(patchedScriptlet,
+ /\bself\.\$argsList\$/,
+ `${JSON.stringify(argsList, scriptletJsonReplacer)}`
+ );
+ patchedScriptlet = safeReplace(patchedScriptlet,
+ /\bself\.\$hostnamesMap\$/,
+ `${JSON.stringify(hostnamesMap, scriptletJsonReplacer)}`
+ );
+ patchedScriptlet = safeReplace(patchedScriptlet,
+ /\bself\.\$entitiesMap\$/,
+ `${JSON.stringify(entitiesMap, scriptletJsonReplacer)}`
+ );
+ patchedScriptlet = safeReplace(patchedScriptlet,
+ /\bself\.\$exceptionsMap\$/,
+ `${JSON.stringify(exceptionsMap, scriptletJsonReplacer)}`
+ );
+ writeFile(`${scriptletDir}/procedural/${assetDetails.id}.js`, patchedScriptlet);
+
+ if ( contentArray.length !== 0 ) {
+ log(`Procedural-related distinct filters: ${procedurals.size} distinct combined selectors`);
+ log(`\tCombined into ${hostnamesMap.size} distinct hostnames`);
+ log(`\tCombined into ${entitiesMap.size} distinct entities`);
+ }
+
+ return hostnamesMap.size + entitiesMap.size;
+}
+
+/******************************************************************************/
+
+async function processScriptletFilters(assetDetails, mapin) {
+ if ( mapin === undefined ) { return 0; }
+ if ( mapin.size === 0 ) { return 0; }
+
+ makeScriptlet.init();
+
+ for ( const details of mapin.values() ) {
+ makeScriptlet.compile(details);
+ }
+ const stats = await makeScriptlet.commit(
+ assetDetails.id,
+ `${scriptletDir}/scriptlet`,
+ writeFile
+ );
+ if ( stats.length !== 0 ) {
+ scriptletStats.set(assetDetails.id, stats);
+ }
+ makeScriptlet.reset();
+ return stats.length;
+}
+
+/******************************************************************************/
+
+async function rulesetFromURLs(assetDetails) {
+ log('============================');
+ log(`Listset for '${assetDetails.id}':`);
+
+ if ( assetDetails.text === undefined ) {
+ const text = await fetchAsset(assetDetails);
+ if ( text === '' ) { return; }
+ assetDetails.text = text;
+ }
+
+ const extensionPaths = [];
+ for ( const [ fname, details ] of redirectResourcesMap ) {
+ const path = `/web_accessible_resources/${fname}`;
+ extensionPaths.push([ fname, path ]);
+ if ( details.alias === undefined ) { continue; }
+ if ( typeof details.alias === 'string' ) {
+ extensionPaths.push([ details.alias, path ]);
+ continue;
+ }
+ if ( Array.isArray(details.alias) === false ) { continue; }
+ for ( const alias of details.alias ) {
+ extensionPaths.push([ alias, path ]);
+ }
+ }
+
+ const results = await dnrRulesetFromRawLists(
+ [ { name: assetDetails.id, text: assetDetails.text } ],
+ { env, extensionPaths, secret: assetDetails.secret }
+ );
+
+ const netStats = await processNetworkFilters(
+ assetDetails,
+ results.network
+ );
+
+ // Split cosmetic filters into two groups: declarative and procedural
+ const declarativeCosmetic = new Map();
+ const proceduralCosmetic = new Map();
+ const rejectedCosmetic = [];
+ if ( results.specificCosmetic ) {
+ for ( const [ selector, details ] of results.specificCosmetic ) {
+ if ( details.rejected ) {
+ rejectedCosmetic.push(selector);
+ continue;
+ }
+ if ( selector.startsWith('{') === false ) {
+ declarativeCosmetic.set(selector, details);
+ continue;
+ }
+ const parsed = JSON.parse(selector);
+ parsed.raw = undefined;
+ proceduralCosmetic.set(JSON.stringify(parsed), details);
+ }
+ }
+ if ( rejectedCosmetic.length !== 0 ) {
+ log(`Rejected cosmetic filters: ${rejectedCosmetic.length}`);
+ log(rejectedCosmetic.map(line => `\t${line}`).join('\n'), true);
+ }
+
+ if (
+ Array.isArray(results.network.generichideExclusions) &&
+ results.network.generichideExclusions.length !== 0
+ ) {
+ genericDetails.set(
+ assetDetails.id,
+ results.network.generichideExclusions.filter(hn => hn.endsWith('.*') === false).sort()
+ );
+ }
+
+ const genericCosmeticStats = await processGenericCosmeticFilters(
+ assetDetails,
+ results.genericCosmetic,
+ results.genericCosmeticExceptions
+ );
+ const genericHighCosmeticStats = await processGenericHighCosmeticFilters(
+ assetDetails,
+ results.genericHighCosmetic,
+ results.genericCosmeticExceptions
+ );
+ const specificCosmeticStats = await processCosmeticFilters(
+ assetDetails,
+ declarativeCosmetic
+ );
+ const declarativeStats = await processDeclarativeCosmeticFilters(
+ assetDetails,
+ proceduralCosmetic
+ );
+ const proceduralStats = await processProceduralCosmeticFilters(
+ assetDetails,
+ proceduralCosmetic
+ );
+ const scriptletStats = await processScriptletFilters(
+ assetDetails,
+ results.scriptlet
+ );
+
+ rulesetDetails.push({
+ id: assetDetails.id,
+ name: assetDetails.name,
+ group: assetDetails.group,
+ enabled: assetDetails.enabled,
+ lang: assetDetails.lang,
+ homeURL: assetDetails.homeURL,
+ filters: {
+ total: results.network.filterCount,
+ accepted: results.network.acceptedFilterCount,
+ rejected: results.network.rejectedFilterCount,
+ },
+ rules: {
+ total: netStats.total,
+ plain: netStats.plain,
+ regex: netStats.regex,
+ removeparam: netStats.removeparam,
+ redirect: netStats.redirect,
+ modifyHeaders: netStats.modifyHeaders,
+ discarded: netStats.discarded,
+ rejected: netStats.rejected,
+ },
+ css: {
+ generic: genericCosmeticStats,
+ generichigh: genericHighCosmeticStats,
+ specific: specificCosmeticStats,
+ declarative: declarativeStats,
+ procedural: proceduralStats,
+ },
+ scriptlets: scriptletStats,
+ });
+
+ ruleResources.push({
+ id: assetDetails.id,
+ enabled: assetDetails.enabled,
+ path: `/rulesets/main/${assetDetails.id}.json`
+ });
+}
+
+/******************************************************************************/
+
+async function main() {
+
+ let version = '';
+ {
+ const now = new Date();
+ const yearPart = now.getUTCFullYear();
+ const monthPart = now.getUTCMonth() + 1;
+ const dayPart = now.getUTCDate();
+ const hourPart = Math.floor(now.getUTCHours());
+ const minutePart = Math.floor(now.getUTCMinutes());
+ version = `${yearPart}.${monthPart}.${dayPart}.${hourPart * 60 + minutePart}`;
+ }
+ log(`Version: ${version}`);
+
+ // Get assets.json content
+ const assets = await fs.readFile(
+ `./assets.json`,
+ { encoding: 'utf8' }
+ ).then(text =>
+ JSON.parse(text)
+ );
+
+ // This will be used to sign our inserted `!#trusted on` directives
+ const secret = createHash('sha256').update(randomBytes(16)).digest('hex').slice(0,16);
+ log(`Secret: ${secret}`);
+
+ // Assemble all default lists as the default ruleset
+ const contentURLs = [
+ 'https://ublockorigin.github.io/uAssets/filters/filters.min.txt',
+ 'https://ublockorigin.github.io/uAssets/filters/badware.txt',
+ 'https://ublockorigin.github.io/uAssets/filters/privacy.min.txt',
+ 'https://ublockorigin.github.io/uAssets/filters/unbreak.min.txt',
+ 'https://ublockorigin.github.io/uAssets/filters/quick-fixes.txt',
+ 'https://ublockorigin.github.io/uAssets/filters/ubol-filters.txt',
+ 'https://ublockorigin.github.io/uAssets/thirdparties/easylist.txt',
+ 'https://ublockorigin.github.io/uAssets/thirdparties/easyprivacy.txt',
+ 'https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext',
+ ];
+ await rulesetFromURLs({
+ id: 'default',
+ name: 'Ads, trackers, miners, and more' ,
+ enabled: true,
+ secret,
+ urls: contentURLs,
+ homeURL: 'https://github.com/uBlockOrigin/uAssets',
+ });
+
+ // Regional rulesets
+ const excludedLists = [
+ 'ara-0',
+ 'EST-0',
+ ];
+ // Merge lists which have same target languages
+ const langToListsMap = new Map();
+ for ( const [ id, asset ] of Object.entries(assets) ) {
+ if ( asset.content !== 'filters' ) { continue; }
+ if ( asset.off !== true ) { continue; }
+ if ( typeof asset.lang !== 'string' ) { continue; }
+ if ( excludedLists.includes(id) ) { continue; }
+ let ids = langToListsMap.get(asset.lang);
+ if ( ids === undefined ) {
+ langToListsMap.set(asset.lang, ids = []);
+ }
+ ids.push(id);
+ }
+ for ( const ids of langToListsMap.values() ) {
+ const urls = [];
+ for ( const id of ids ) {
+ const asset = assets[id];
+ const contentURL = Array.isArray(asset.contentURL)
+ ? asset.contentURL[0]
+ : asset.contentURL;
+ urls.push(contentURL);
+ }
+ const id = ids[0];
+ const asset = assets[id];
+ await rulesetFromURLs({
+ id: id.toLowerCase(),
+ lang: asset.lang,
+ name: asset.title,
+ enabled: false,
+ urls,
+ homeURL: asset.supportURL,
+ });
+ }
+
+ // Handpicked rulesets from assets.json
+ const handpicked = [
+ 'block-lan',
+ 'dpollock-0',
+ 'adguard-spyware-url',
+ ];
+ for ( const id of handpicked ) {
+ const asset = assets[id];
+ if ( asset.content !== 'filters' ) { continue; }
+
+ const contentURL = Array.isArray(asset.contentURL)
+ ? asset.contentURL[0]
+ : asset.contentURL;
+ await rulesetFromURLs({
+ id: id.toLowerCase(),
+ name: asset.title,
+ enabled: false,
+ urls: [ contentURL ],
+ homeURL: asset.supportURL,
+ });
+ }
+
+ // Handpicked annoyance rulesets from assets.json
+ await rulesetFromURLs({
+ id: 'annoyances-cookies',
+ name: 'EasyList/uBO – Cookie Notices',
+ group: 'annoyances',
+ enabled: false,
+ secret,
+ urls: [
+ 'https://ublockorigin.github.io/uAssets/thirdparties/easylist-cookies.txt',
+ 'https://ublockorigin.github.io/uAssets/filters/annoyances-cookies.txt',
+ ],
+ homeURL: 'https://github.com/easylist/easylist#fanboy-lists',
+ });
+ await rulesetFromURLs({
+ id: 'annoyances-overlays',
+ name: 'AdGuard/uBO – Overlays',
+ group: 'annoyances',
+ enabled: false,
+ secret,
+ urls: [
+ 'https://filters.adtidy.org/extension/ublock/filters/19.txt',
+ 'https://ublockorigin.github.io/uAssets/filters/annoyances-others.txt',
+ ],
+ homeURL: 'https://github.com/AdguardTeam/AdguardFilters#adguard-filters',
+ });
+ await rulesetFromURLs({
+ id: 'annoyances-social',
+ name: 'AdGuard – Social Media',
+ group: 'annoyances',
+ enabled: false,
+ urls: [
+ 'https://filters.adtidy.org/extension/ublock/filters/4.txt',
+ ],
+ homeURL: 'https://github.com/AdguardTeam/AdguardFilters#adguard-filters',
+ });
+ await rulesetFromURLs({
+ id: 'annoyances-widgets',
+ name: 'AdGuard – Widgets',
+ group: 'annoyances',
+ enabled: false,
+ urls: [
+ 'https://filters.adtidy.org/extension/ublock/filters/22.txt',
+ ],
+ homeURL: 'https://github.com/AdguardTeam/AdguardFilters#adguard-filters',
+ });
+ await rulesetFromURLs({
+ id: 'annoyances-others',
+ name: 'AdGuard – Other Annoyances',
+ group: 'annoyances',
+ enabled: false,
+ urls: [
+ 'https://filters.adtidy.org/extension/ublock/filters/21.txt',
+ ],
+ homeURL: 'https://github.com/AdguardTeam/AdguardFilters#adguard-filters',
+ });
+
+ // Handpicked rulesets from abroad
+ await rulesetFromURLs({
+ id: 'stevenblack-hosts',
+ name: 'Steven Black\'s hosts file',
+ enabled: false,
+ urls: [ 'https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts' ],
+ homeURL: 'https://github.com/StevenBlack/hosts#readme',
+ });
+
+ writeFile(
+ `${rulesetDir}/ruleset-details.json`,
+ `${JSON.stringify(rulesetDetails, null, 1)}\n`
+ );
+
+ writeFile(
+ `${rulesetDir}/scriptlet-details.json`,
+ `${JSON.stringify(scriptletStats, jsonSetMapReplacer, 1)}\n`
+ );
+
+ writeFile(
+ `${rulesetDir}/generic-details.json`,
+ `${JSON.stringify(genericDetails, jsonSetMapReplacer, 1)}\n`
+ );
+
+ // Copy required redirect resources
+ for ( const path of requiredRedirectResources ) {
+ copyFile(`./${path}`, `${outputDir}/${path}`);
+ }
+
+ await Promise.all(writeOps);
+
+ // Patch manifest
+ // Get manifest content
+ const manifest = await fs.readFile(
+ `${outputDir}/manifest.json`,
+ { encoding: 'utf8' }
+ ).then(text =>
+ JSON.parse(text)
+ );
+ // Patch declarative_net_request key
+ manifest.declarative_net_request = { rule_resources: ruleResources };
+ // Patch web_accessible_resources key
+ const web_accessible_resources = {
+ resources: Array.from(requiredRedirectResources).map(path => `/${path}`),
+ matches: [ '<all_urls>' ],
+ };
+ if ( platform === 'chromium' ) {
+ web_accessible_resources.use_dynamic_url = true;
+ }
+ manifest.web_accessible_resources = [ web_accessible_resources ];
+
+ // Patch manifest version property
+ manifest.version = version;
+ // Commit changes
+ await fs.writeFile(
+ `${outputDir}/manifest.json`,
+ JSON.stringify(manifest, null, 2) + '\n'
+ );
+
+ // Log results
+ const logContent = stdOutput.join('\n') + '\n';
+ await fs.writeFile(`${cacheDir}/log.txt`, logContent);
+}
+
+main();
+
+/******************************************************************************/
diff --git a/platform/mv3/make-scriptlets.js b/platform/mv3/make-scriptlets.js
new file mode 100644
index 0000000..d276a56
--- /dev/null
+++ b/platform/mv3/make-scriptlets.js
@@ -0,0 +1,193 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2017-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import fs from 'fs/promises';
+import { builtinScriptlets } from './scriptlets.js';
+import { safeReplace } from './safe-replace.js';
+
+/******************************************************************************/
+
+const resourceDetails = new Map();
+const resourceAliases = new Map();
+const scriptletFiles = new Map();
+
+/******************************************************************************/
+
+function createScriptletCoreCode(scriptletToken) {
+ const details = resourceDetails.get(scriptletToken);
+ const components = new Map([ [ scriptletToken, details.code ] ]);
+ const dependencies = details.dependencies && details.dependencies.slice() || [];
+ while ( dependencies.length !== 0 ) {
+ const token = dependencies.shift();
+ if ( components.has(token) ) { continue; }
+ const details = resourceDetails.get(token);
+ if ( details === undefined ) { continue; }
+ components.set(token, details.code);
+ if ( Array.isArray(details.dependencies) === false ) { continue; }
+ dependencies.push(...details.dependencies);
+ }
+ return Array.from(components.values()).join('\n\n');
+}
+
+/******************************************************************************/
+
+export function init() {
+ for ( const scriptlet of builtinScriptlets ) {
+ const { name, aliases, fn } = scriptlet;
+ const entry = {
+ name: fn.name,
+ code: fn.toString(),
+ world: scriptlet.world || 'MAIN',
+ dependencies: scriptlet.dependencies,
+ requiresTrust: scriptlet.requiresTrust === true,
+ };
+ resourceDetails.set(name, entry);
+ if ( Array.isArray(aliases) === false ) { continue; }
+ for ( const alias of aliases ) {
+ resourceAliases.set(alias, name);
+ }
+ }
+}
+
+/******************************************************************************/
+
+export function reset() {
+ scriptletFiles.clear();
+}
+
+/******************************************************************************/
+
+export function compile(details) {
+ if ( details.args[0].endsWith('.js') === false ) {
+ details.args[0] += '.js';
+ }
+ if ( resourceAliases.has(details.args[0]) ) {
+ details.args[0] = resourceAliases.get(details.args[0]);
+ }
+ const scriptletToken = details.args[0];
+ const resourceEntry = resourceDetails.get(scriptletToken);
+ if ( resourceEntry === undefined ) { return; }
+ if ( resourceEntry.requiresTrust && details.trustedSource !== true ) {
+ console.log(`Rejecting ${scriptletToken}: source is not trusted`);
+ return;
+ }
+ if ( scriptletFiles.has(scriptletToken) === false ) {
+ scriptletFiles.set(scriptletToken, {
+ name: resourceEntry.name,
+ code: createScriptletCoreCode(scriptletToken),
+ world: resourceEntry.world,
+ args: new Map(),
+ hostnames: new Map(),
+ entities: new Map(),
+ exceptions: new Map(),
+ matches: new Set(),
+ });
+ }
+ const scriptletDetails = scriptletFiles.get(scriptletToken);
+ const argsToken = JSON.stringify(details.args.slice(1));
+ if ( scriptletDetails.args.has(argsToken) === false ) {
+ scriptletDetails.args.set(argsToken, scriptletDetails.args.size);
+ }
+ const iArgs = scriptletDetails.args.get(argsToken);
+ if ( details.matches ) {
+ for ( const hn of details.matches ) {
+ if ( hn.endsWith('.*') ) {
+ scriptletDetails.matches.clear();
+ scriptletDetails.matches.add('*');
+ const entity = hn.slice(0, -2);
+ if ( scriptletDetails.entities.has(entity) === false ) {
+ scriptletDetails.entities.set(entity, new Set());
+ }
+ scriptletDetails.entities.get(entity).add(iArgs);
+ } else {
+ if ( scriptletDetails.matches.has('*') === false ) {
+ scriptletDetails.matches.add(hn);
+ }
+ if ( scriptletDetails.hostnames.has(hn) === false ) {
+ scriptletDetails.hostnames.set(hn, new Set());
+ }
+ scriptletDetails.hostnames.get(hn).add(iArgs);
+ }
+ }
+ } else {
+ scriptletDetails.matches.add('*');
+ }
+ if ( details.excludeMatches ) {
+ for ( const hn of details.excludeMatches ) {
+ if ( scriptletDetails.exceptions.has(hn) === false ) {
+ scriptletDetails.exceptions.set(hn, []);
+ }
+ scriptletDetails.exceptions.get(hn).push(iArgs);
+ }
+ }
+}
+
+/******************************************************************************/
+
+export async function commit(rulesetId, path, writeFn) {
+ const scriptletTemplate = await fs.readFile(
+ './scriptlets/scriptlet.template.js',
+ { encoding: 'utf8' }
+ );
+ const patchHnMap = hnmap => {
+ const out = Array.from(hnmap);
+ out.forEach(a => {
+ const values = Array.from(a[1]);
+ a[1] = values.length === 1 ? values[0] : values;
+ });
+ return out;
+ };
+ const scriptletStats = [];
+ for ( const [ name, details ] of scriptletFiles ) {
+ let content = safeReplace(scriptletTemplate,
+ 'function $scriptletName$(){}',
+ details.code
+ );
+ content = safeReplace(content, /\$rulesetId\$/, rulesetId, 0);
+ content = safeReplace(content, /\$scriptletName\$/, details.name, 0);
+ content = safeReplace(content, '$world$', details.world);
+ content = safeReplace(content,
+ 'self.$argsList$',
+ JSON.stringify(Array.from(details.args.keys()).map(a => JSON.parse(a)))
+ );
+ content = safeReplace(content,
+ 'self.$hostnamesMap$',
+ JSON.stringify(patchHnMap(details.hostnames))
+ );
+ content = safeReplace(content,
+ 'self.$entitiesMap$',
+ JSON.stringify(patchHnMap(details.entities))
+ );
+ content = safeReplace(content,
+ 'self.$exceptionsMap$',
+ JSON.stringify(Array.from(details.exceptions))
+ );
+ writeFn(`${path}/${rulesetId}.${name}`, content);
+ scriptletStats.push([ name.slice(0, -3), Array.from(details.matches).sort() ]);
+ }
+ return scriptletStats;
+}
+
+/******************************************************************************/
diff --git a/platform/mv3/package.json b/platform/mv3/package.json
new file mode 100644
index 0000000..c10527a
--- /dev/null
+++ b/platform/mv3/package.json
@@ -0,0 +1,6 @@
+{
+ "engines": {
+ "node": ">=17.5.0"
+ },
+ "type": "module"
+}
diff --git a/platform/mv3/safe-replace.js b/platform/mv3/safe-replace.js
new file mode 100644
index 0000000..b56e5e5
--- /dev/null
+++ b/platform/mv3/safe-replace.js
@@ -0,0 +1,41 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2017-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+export function safeReplace(text, pattern, replacement, count = 1) {
+ const rePattern = typeof pattern === 'string'
+ ? new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))
+ : pattern;
+ let out = text;
+ for (;;) {
+ const match = rePattern.exec(out);
+ if ( match === null ) { break; }
+ out = out.slice(0, match.index) +
+ replacement +
+ out.slice(match.index + match[0].length);
+ count -= 1;
+ if ( count === 0 ) { break; }
+ }
+ return out;
+}
diff --git a/platform/mv3/scriptlets/css-declarative.template.js b/platform/mv3/scriptlets/css-declarative.template.js
new file mode 100644
index 0000000..c1f480f
--- /dev/null
+++ b/platform/mv3/scriptlets/css-declarative.template.js
@@ -0,0 +1,51 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint esversion:11 */
+
+'use strict';
+
+// ruleset: $rulesetId$
+
+/******************************************************************************/
+
+// Important!
+// Isolate from global scope
+(function uBOL_cssDeclarativeImport() {
+
+/******************************************************************************/
+
+const argsList = self.$argsList$;
+
+const hostnamesMap = new Map(self.$hostnamesMap$);
+
+const entitiesMap = new Map(self.$entitiesMap$);
+
+const exceptionsMap = new Map(self.$exceptionsMap$);
+
+self.declarativeImports = self.declarativeImports || [];
+self.declarativeImports.push({ argsList, hostnamesMap, entitiesMap, exceptionsMap });
+
+/******************************************************************************/
+
+})();
+
+/******************************************************************************/
diff --git a/platform/mv3/scriptlets/css-generic.template.js b/platform/mv3/scriptlets/css-generic.template.js
new file mode 100644
index 0000000..a1f1d6c
--- /dev/null
+++ b/platform/mv3/scriptlets/css-generic.template.js
@@ -0,0 +1,61 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint esversion:11 */
+
+'use strict';
+
+/******************************************************************************/
+
+// Important!
+// Isolate from global scope
+(function uBOL_cssGenericImport() {
+
+/******************************************************************************/
+
+// $rulesetId$
+
+const toImport = self.$genericSelectorMap$;
+
+const genericSelectorMap = self.genericSelectorMap || new Map();
+
+if ( genericSelectorMap.size === 0 ) {
+ self.genericSelectorMap = new Map(toImport);
+ return;
+}
+
+for ( const toImportEntry of toImport ) {
+ const existing = genericSelectorMap.get(toImportEntry[0]);
+ genericSelectorMap.set(
+ toImportEntry[0],
+ existing === undefined
+ ? toImportEntry[1]
+ : `${existing},${toImportEntry[1]}`
+ );
+}
+
+self.genericSelectorMap = genericSelectorMap;
+
+/******************************************************************************/
+
+})();
+
+/******************************************************************************/
diff --git a/platform/mv3/scriptlets/css-generichigh.template.css b/platform/mv3/scriptlets/css-generichigh.template.css
new file mode 100644
index 0000000..370bc4c
--- /dev/null
+++ b/platform/mv3/scriptlets/css-generichigh.template.css
@@ -0,0 +1,26 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* $rulesetId$ */
+
+$selectorList$ {
+ display: none !important;
+}
diff --git a/platform/mv3/scriptlets/css-procedural.template.js b/platform/mv3/scriptlets/css-procedural.template.js
new file mode 100644
index 0000000..61c95e6
--- /dev/null
+++ b/platform/mv3/scriptlets/css-procedural.template.js
@@ -0,0 +1,51 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint esversion:11 */
+
+'use strict';
+
+// ruleset: $rulesetId$
+
+/******************************************************************************/
+
+// Important!
+// Isolate from global scope
+(function uBOL_cssProceduralImport() {
+
+/******************************************************************************/
+
+const argsList = self.$argsList$;
+
+const hostnamesMap = new Map(self.$hostnamesMap$);
+
+const entitiesMap = new Map(self.$entitiesMap$);
+
+const exceptionsMap = new Map(self.$exceptionsMap$);
+
+self.proceduralImports = self.proceduralImports || [];
+self.proceduralImports.push({ argsList, hostnamesMap, entitiesMap, exceptionsMap });
+
+/******************************************************************************/
+
+})();
+
+/******************************************************************************/
diff --git a/platform/mv3/scriptlets/css-specific.template.js b/platform/mv3/scriptlets/css-specific.template.js
new file mode 100644
index 0000000..6858931
--- /dev/null
+++ b/platform/mv3/scriptlets/css-specific.template.js
@@ -0,0 +1,51 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint esversion:11 */
+
+'use strict';
+
+// ruleset: $rulesetId$
+
+/******************************************************************************/
+
+// Important!
+// Isolate from global scope
+(function uBOL_cssSpecificImports() {
+
+/******************************************************************************/
+
+const argsList = self.$argsList$;
+
+const hostnamesMap = new Map(self.$hostnamesMap$);
+
+const entitiesMap = new Map(self.$entitiesMap$);
+
+const exceptionsMap = new Map(self.$exceptionsMap$);
+
+self.specificImports = self.specificImports || [];
+self.specificImports.push({ argsList, hostnamesMap, entitiesMap, exceptionsMap });
+
+/******************************************************************************/
+
+})();
+
+/******************************************************************************/
diff --git a/platform/mv3/scriptlets/scriptlet.template.js b/platform/mv3/scriptlets/scriptlet.template.js
new file mode 100644
index 0000000..b2c4ada
--- /dev/null
+++ b/platform/mv3/scriptlets/scriptlet.template.js
@@ -0,0 +1,175 @@
+/*******************************************************************************
+
+ uBlock Origin Lite - a comprehensive, MV3-compliant content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+
+*/
+
+/* jshint esversion:11 */
+/* global cloneInto */
+
+'use strict';
+
+// ruleset: $rulesetId$
+
+/******************************************************************************/
+
+// Important!
+// Isolate from global scope
+
+// Start of local scope
+(( ) => {
+
+/******************************************************************************/
+
+// Start of code to inject
+const uBOL_$scriptletName$ = function() {
+
+const scriptletGlobals = new Map(); // jshint ignore: line
+
+const argsList = self.$argsList$;
+
+const hostnamesMap = new Map(self.$hostnamesMap$);
+
+const entitiesMap = new Map(self.$entitiesMap$);
+
+const exceptionsMap = new Map(self.$exceptionsMap$);
+
+/******************************************************************************/
+
+function $scriptletName$(){}
+
+/******************************************************************************/
+
+const hnParts = [];
+try { hnParts.push(...document.location.hostname.split('.')); }
+catch(ex) { }
+const hnpartslen = hnParts.length;
+if ( hnpartslen === 0 ) { return; }
+
+const todoIndices = new Set();
+const tonotdoIndices = [];
+
+// Exceptions
+if ( exceptionsMap.size !== 0 ) {
+ for ( let i = 0; i < hnpartslen; i++ ) {
+ const hn = hnParts.slice(i).join('.');
+ const excepted = exceptionsMap.get(hn);
+ if ( excepted ) { tonotdoIndices.push(...excepted); }
+ }
+ exceptionsMap.clear();
+}
+
+// Hostname-based
+if ( hostnamesMap.size !== 0 ) {
+ const collectArgIndices = hn => {
+ let argsIndices = hostnamesMap.get(hn);
+ if ( argsIndices === undefined ) { return; }
+ if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; }
+ for ( const argsIndex of argsIndices ) {
+ if ( tonotdoIndices.includes(argsIndex) ) { continue; }
+ todoIndices.add(argsIndex);
+ }
+ };
+ for ( let i = 0; i < hnpartslen; i++ ) {
+ const hn = hnParts.slice(i).join('.');
+ collectArgIndices(hn);
+ }
+ collectArgIndices('*');
+ hostnamesMap.clear();
+}
+
+// Entity-based
+if ( entitiesMap.size !== 0 ) {
+ const n = hnpartslen - 1;
+ for ( let i = 0; i < n; i++ ) {
+ for ( let j = n; j > i; j-- ) {
+ const en = hnParts.slice(i,j).join('.');
+ let argsIndices = entitiesMap.get(en);
+ if ( argsIndices === undefined ) { continue; }
+ if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; }
+ for ( const argsIndex of argsIndices ) {
+ if ( tonotdoIndices.includes(argsIndex) ) { continue; }
+ todoIndices.add(argsIndex);
+ }
+ }
+ }
+ entitiesMap.clear();
+}
+
+// Apply scriplets
+for ( const i of todoIndices ) {
+ try { $scriptletName$(...argsList[i]); }
+ catch(ex) {}
+}
+argsList.length = 0;
+
+/******************************************************************************/
+
+};
+// End of code to inject
+
+/******************************************************************************/
+
+// Inject code
+
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1736575
+// 'MAIN' world not yet supported in Firefox, so we inject the code into
+// 'MAIN' ourself when environment in Firefox.
+
+const targetWorld = '$world$';
+
+// Not Firefox
+if ( typeof wrappedJSObject !== 'object' || targetWorld === 'ISOLATED' ) {
+ return uBOL_$scriptletName$();
+}
+
+// Firefox
+{
+ const page = self.wrappedJSObject;
+ let script, url;
+ try {
+ page.uBOL_$scriptletName$ = cloneInto([
+ [ '(', uBOL_$scriptletName$.toString(), ')();' ],
+ { type: 'text/javascript; charset=utf-8' },
+ ], self);
+ const blob = new page.Blob(...page.uBOL_$scriptletName$);
+ url = page.URL.createObjectURL(blob);
+ const doc = page.document;
+ script = doc.createElement('script');
+ script.async = false;
+ script.src = url;
+ (doc.head || doc.documentElement || doc).append(script);
+ } catch (ex) {
+ console.error(ex);
+ }
+ if ( url ) {
+ if ( script ) { script.remove(); }
+ page.URL.revokeObjectURL(url);
+ }
+ delete page.uBOL_$scriptletName$;
+}
+
+/******************************************************************************/
+
+// End of local scope
+})();
+
+/******************************************************************************/
+
+void 0;
diff --git a/platform/mv3/ubo-version b/platform/mv3/ubo-version
new file mode 100644
index 0000000..4437cef
--- /dev/null
+++ b/platform/mv3/ubo-version
@@ -0,0 +1 @@
+https://github.com/gorhill/uBlock/tree/4b83101ab9270a5403d66af4ebe08d251ac372ca
diff --git a/platform/nodejs/README.md b/platform/nodejs/README.md
new file mode 100644
index 0000000..0b3e3d8
--- /dev/null
+++ b/platform/nodejs/README.md
@@ -0,0 +1,158 @@
+# uBlock Origin Core
+
+The core filtering engines used in the uBlock Origin ("uBO") extension, and has
+no external dependencies.
+
+## Installation
+
+Install: `npm install @gorhill/ubo-core`
+
+This is a very early version and the API is subject to change at any time.
+
+This package uses [native JavaScript modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules).
+
+
+## Description
+
+The package contains uBO's static network filtering engine ("SNFE"), which
+purpose is to parse and enforce filter lists. The matching algorithm is highly
+efficient, and _especially_ optimized to match against large sets of pure
+hostnames.
+
+The SNFE can be fed filter lists from a variety of sources, such as [EasyList/EasyPrivacy](https://easylist.to/),
+[uBlock filters](https://github.com/uBlockOrigin/uAssets/tree/master/filters),
+and also lists of domain names or hosts file format (i.e. block lists from [The Block List Project](https://github.com/blocklistproject/Lists#the-block-list-project),
+[Steven Black's HOSTS](https://github.com/StevenBlack/hosts#readme), etc).
+
+
+## Usage
+
+At the moment, there can be only one instance of the static network filtering
+engine ("SNFE"), which proxy API must be imported as follow:
+
+```js
+import { StaticNetFilteringEngine } from '@gorhill/ubo-core';
+```
+
+If you must import as a NodeJS module:
+
+```js
+const { StaticNetFilteringEngine } = await import('@gorhill/ubo-core');
+```
+
+
+Create an instance of SNFE:
+
+```js
+const snfe = StaticNetFilteringEngine.create();
+```
+
+Feed the SNFE with filter lists -- `useLists()` accepts an array of
+objects (or promises to object) which expose the raw text of a list
+through the `raw` property, and optionally the name of the list through the
+`name` property (how you fetch the lists is up to you):
+
+```js
+await snfe.useLists([
+ fetch('easylist').then(raw => ({ name: 'easylist', raw })),
+ fetch('easyprivacy').then(raw => ({ name: 'easyprivacy', raw })),
+]);
+```
+
+Now we are ready to match network requests:
+
+```js
+// Not blocked
+if ( snfe.matchRequest({
+ originURL: 'https://www.bloomberg.com/',
+ url: 'https://www.bloomberg.com/tophat/assets/v2.6.1/that.css',
+ type: 'stylesheet'
+}) !== 0 ) {
+ console.log(snfe.toLogData());
+}
+
+// Blocked
+if ( snfe.matchRequest({
+ originURL: 'https://www.bloomberg.com/',
+ url: 'https://securepubads.g.doubleclick.net/tag/js/gpt.js',
+ type: 'script'
+}) !== 0 ) {
+ console.log(snfe.toLogData());
+}
+
+// Unblocked
+if ( snfe.matchRequest({
+ originURL: 'https://www.bloomberg.com/',
+ url: 'https://sourcepointcmp.bloomberg.com/ccpa.js',
+ type: 'script'
+}) !== 0 ) {
+ console.log(snfe.toLogData());
+}
+```
+
+It is possible to pre-parse filter lists and save the intermediate results for
+later use -- useful to speed up the loading of filter lists. This will be
+documented eventually, but if you feel adventurous, you can look at the code
+and use this capability now if you figure out the details.
+
+---
+
+## Extras
+
+You can directly use specific APIs exposed by this package, here are some of
+them, which are used internally by uBO's SNFE.
+
+### HNTrieContainer
+
+A well optimised [compressed trie](https://en.wikipedia.org/wiki/Trie#Compressing_tries)
+container specialized to specifically store and lookup hostnames.
+
+The matching algorithm is designed for hostnames, i.e. the hostname labels
+making up a hostname are matched from right to left, such that `www.example.org`
+with be a match if `example.org` is stored into the trie, while
+`anotherexample.org` won't be a match.
+
+`HNTrieContainer` is designed to store a large number of hostnames with CPU and
+memory efficiency as a main concern -- and is a key component of uBO.
+
+To create and use a standalone `HNTrieContainer` object:
+
+```js
+import HNTrieContainer from '@gorhill/ubo-core/js/hntrie.js';
+
+const trieContainer = new HNTrieContainer();
+
+const aTrie = trieContainer.createOne();
+trieContainer.add(aTrie, 'example.org');
+trieContainer.add(aTrie, 'example.com');
+
+const anotherTrie = trieContainer.createOne();
+trieContainer.add(anotherTrie, 'foo.invalid');
+trieContainer.add(anotherTrie, 'bar.invalid');
+
+// matches() return the position at which the match starts, or -1 when
+// there is no match.
+
+// Matches: return 4
+console.log("trieContainer.matches(aTrie, 'www.example.org')", trieContainer.matches(aTrie, 'www.example.org'));
+
+// Does not match: return -1
+console.log("trieContainer.matches(aTrie, 'www.foo.invalid')", trieContainer.matches(aTrie, 'www.foo.invalid'));
+
+// Does not match: return -1
+console.log("trieContainer.matches(anotherTrie, 'www.example.org')", trieContainer.matches(anotherTrie, 'www.example.org'));
+
+// Matches: return 0
+console.log("trieContainer.matches(anotherTrie, 'foo.invalid')", trieContainer.matches(anotherTrie, 'foo.invalid'));
+```
+
+The `reset()` method must be used to remove all the tries from a trie container,
+you can't remove a single trie from the container.
+
+```js
+trieContainer.reset();
+```
+
+When you reset a trie container, you can't use the reference to prior instances
+of trie, i.e. `aTrie` and `anotherTrie` are no longer valid and shouldn't be
+used following a reset.
diff --git a/platform/nodejs/build.js b/platform/nodejs/build.js
new file mode 100644
index 0000000..dbc0843
--- /dev/null
+++ b/platform/nodejs/build.js
@@ -0,0 +1,34 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import fs from 'fs';
+
+import { pslInit } from './index.js';
+
+/******************************************************************************/
+
+fs.mkdirSync('./build', { recursive: true });
+fs.writeFileSync('./build/publicsuffixlist.json',
+ JSON.stringify(pslInit().toSelfie()));
diff --git a/platform/nodejs/index.js b/platform/nodejs/index.js
new file mode 100644
index 0000000..1d39a7d
--- /dev/null
+++ b/platform/nodejs/index.js
@@ -0,0 +1,281 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* globals WebAssembly */
+
+'use strict';
+
+/******************************************************************************/
+
+import { createRequire } from 'module';
+
+import { readFileSync } from 'fs';
+import { dirname, resolve } from 'path';
+import { domainToASCII, fileURLToPath } from 'url';
+
+const __dirname = dirname(fileURLToPath(import.meta.url));
+
+import publicSuffixList from './lib/publicsuffixlist/publicsuffixlist.js';
+
+import snfe from './js/static-net-filtering.js';
+import { FilteringContext } from './js/filtering-context.js';
+import { LineIterator } from './js/text-utils.js';
+import * as sfp from './js/static-filtering-parser.js';
+
+import {
+ CompiledListReader,
+ CompiledListWriter,
+} from './js/static-filtering-io.js';
+
+/******************************************************************************/
+
+function loadJSON(path) {
+ return JSON.parse(readFileSync(resolve(__dirname, path), 'utf8'));
+}
+
+/******************************************************************************/
+
+async function enableWASM() {
+ const wasmModuleFetcher = function(path) {
+ const require = createRequire(import.meta.url); // jshint ignore:line
+ const wasm = new Uint8Array(require(`${path}.wasm.json`));
+ return WebAssembly.compile(wasm);
+ };
+ try {
+ const results = await Promise.all([
+ publicSuffixList.enableWASM(wasmModuleFetcher, './lib/publicsuffixlist/wasm/'),
+ snfe.enableWASM(wasmModuleFetcher, './js/wasm/'),
+ ]);
+ return results.every(a => a === true);
+ } catch(reason) {
+ console.log(reason);
+ }
+ return false;
+}
+
+/******************************************************************************/
+
+function pslInit(raw) {
+ if ( typeof raw === 'string' && raw.trim() !== '' ) {
+ publicSuffixList.parse(raw, domainToASCII);
+ return publicSuffixList;
+ }
+
+ // Use serialized version if available
+ let serialized = null;
+ try {
+ // Use loadJSON() because require() would keep the string in memory.
+ serialized = loadJSON('build/publicsuffixlist.json');
+ } catch (error) {
+ if ( process.env.npm_lifecycle_event !== 'build' ) {
+ // This should never happen except during package building.
+ console.error(error);
+ }
+ }
+ if ( serialized !== null ) {
+ publicSuffixList.fromSelfie(serialized);
+ return publicSuffixList;
+ }
+
+ raw = readFileSync(
+ resolve(__dirname, './assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat'),
+ 'utf8'
+ );
+ if ( typeof raw !== 'string' || raw.trim() === '' ) {
+ console.error('Unable to populate public suffix list');
+ return;
+ }
+ publicSuffixList.parse(raw, domainToASCII);
+ return publicSuffixList;
+}
+
+/******************************************************************************/
+
+function compileList({ name, raw }, compiler, writer, options = {}) {
+ const lineIter = new LineIterator(raw);
+ const events = Array.isArray(options.events) ? options.events : undefined;
+
+ if ( name ) {
+ writer.properties.set('name', name);
+ }
+
+ const parser = new sfp.AstFilterParser({
+ maxTokenLength: snfe.MAX_TOKEN_LENGTH,
+ });
+
+ while ( lineIter.eot() === false ) {
+ let line = lineIter.next();
+ while ( line.endsWith(' \\') ) {
+ if ( lineIter.peek(4) !== ' ' ) { break; }
+ line = line.slice(0, -2).trim() + lineIter.next().trim();
+ }
+ parser.parse(line);
+ if ( parser.isFilter() === false ) { continue; }
+ if ( parser.isNetworkFilter() === false ) { continue; }
+ if ( compiler.compile(parser, writer) ) { continue; }
+ if ( compiler.error !== undefined && events !== undefined ) {
+ options.events.push({
+ type: 'error',
+ text: compiler.error
+ });
+ }
+ }
+
+ return writer.toString();
+}
+
+/******************************************************************************/
+
+async function useLists(lists, options = {}) {
+ if ( useLists.promise !== null ) {
+ throw new Error('Pending useLists() operation');
+ }
+
+ // Remove all filters
+ snfe.reset();
+
+ if ( Array.isArray(lists) === false || lists.length === 0 ) {
+ return;
+ }
+
+ let compiler = null;
+
+ const consumeList = list => {
+ let { compiled } = list;
+ if ( typeof compiled !== 'string' || compiled === '' ) {
+ const writer = new CompiledListWriter();
+ if ( compiler === null ) {
+ compiler = snfe.createCompiler();
+ }
+ compiled = compileList(list, compiler, writer, options);
+ }
+ snfe.fromCompiled(new CompiledListReader(compiled));
+ };
+
+ // Populate filtering engine with resolved filter lists
+ const promises = [];
+ for ( const list of lists ) {
+ const promise = list instanceof Promise ? list : Promise.resolve(list);
+ promises.push(promise.then(list => consumeList(list)));
+ }
+
+ useLists.promise = Promise.all(promises);
+ await useLists.promise;
+ useLists.promise = null; // eslint-disable-line require-atomic-updates
+
+ // Commit changes
+ snfe.freeze();
+ snfe.optimize();
+}
+
+useLists.promise = null;
+
+/******************************************************************************/
+
+const fctx = new FilteringContext();
+let snfeProxyInstance = null;
+
+class StaticNetFilteringEngine {
+ constructor() {
+ if ( snfeProxyInstance !== null ) {
+ throw new Error('Only a single instance is supported.');
+ }
+ snfeProxyInstance = this;
+ }
+
+ useLists(lists) {
+ return useLists(lists);
+ }
+
+ matchRequest(details) {
+ return snfe.matchRequest(fctx.fromDetails(details));
+ }
+
+ matchAndFetchModifiers(details, modifier) {
+ return snfe.matchAndFetchModifiers(fctx.fromDetails(details), modifier);
+ }
+
+ hasQuery(details) {
+ return snfe.hasQuery(details);
+ }
+
+ filterQuery(details) {
+ const directives = snfe.filterQuery(fctx.fromDetails(details));
+ if ( directives === undefined ) { return; }
+ return { redirectURL: fctx.redirectURL, directives };
+ }
+
+ isBlockImportant() {
+ return snfe.isBlockImportant();
+ }
+
+ toLogData() {
+ return snfe.toLogData();
+ }
+
+ createCompiler(parser) {
+ return snfe.createCompiler(parser);
+ }
+
+ compileList(...args) {
+ return compileList(...args);
+ }
+
+ serialize() {
+ return snfe.serialize();
+ }
+
+ deserialize(serialized) {
+ return snfe.unserialize(serialized);
+ }
+
+ static async create({ noPSL = false } = {}) {
+ const instance = new StaticNetFilteringEngine();
+
+ if ( noPSL !== true && !pslInit() ) {
+ throw new Error('Failed to initialize public suffix list.');
+ }
+
+ return instance;
+ }
+
+ static async release() {
+ if ( snfeProxyInstance === null ) { return; }
+ snfeProxyInstance = null;
+ await useLists([]);
+ }
+}
+
+/******************************************************************************/
+
+// rollup.js needs module.exports to be set back to the local exports object.
+// This is because some of the code (e.g. publicsuffixlist.js) sets
+// module.exports. Once all included files are written like ES modules, using
+// export statements, this should no longer be necessary.
+if ( typeof module !== 'undefined' && typeof exports !== 'undefined' ) {
+ module.exports = exports;
+}
+
+export {
+ enableWASM,
+ pslInit,
+ StaticNetFilteringEngine,
+};
diff --git a/platform/npm/.eslintrc.json b/platform/npm/.eslintrc.json
new file mode 100644
index 0000000..5f7c6b5
--- /dev/null
+++ b/platform/npm/.eslintrc.json
@@ -0,0 +1,38 @@
+{
+ "root": true,
+ "env": {
+ "es2021": true,
+ "node": true
+ },
+ "extends": "eslint:recommended",
+ "parserOptions": {
+ "ecmaVersion": 12,
+ "sourceType": "module"
+ },
+ "rules": {
+ "eqeqeq": [ "warn", "always" ],
+ "indent": [
+ "warn",
+ 4,
+ {
+ "ArrayExpression": "first",
+ "CallExpression": { "arguments": "first" },
+ "MemberExpression": "off",
+ "ObjectExpression": "off",
+ "ignoreComments": true,
+ "ignoredNodes": [
+ "AssignmentExpression:has(Literal)"
+ ]
+ }
+ ],
+ "getter-return": "off",
+ "no-control-regex": "off",
+ "no-empty": [ "error", { "allowEmptyCatch": true } ],
+ "no-promise-executor-return": [ "error" ],
+ "no-template-curly-in-string": [ "error" ],
+ "no-unreachable-loop": [ "error" ],
+ "no-useless-backreference": [ "error" ],
+ "no-useless-escape": "off",
+ "require-atomic-updates": [ "warn" ]
+ }
+}
diff --git a/platform/npm/.npmignore b/platform/npm/.npmignore
new file mode 100644
index 0000000..5c606d4
--- /dev/null
+++ b/platform/npm/.npmignore
@@ -0,0 +1,5 @@
+assets/
+coverage/
+tests/
+.eslintrc.json
+test.js
diff --git a/platform/npm/package-lock.json b/platform/npm/package-lock.json
new file mode 100644
index 0000000..b819bb0
--- /dev/null
+++ b/platform/npm/package-lock.json
@@ -0,0 +1,3038 @@
+{
+ "name": "@gorhill/ubo-core",
+ "version": "0.1.26",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "@gorhill/ubo-core",
+ "version": "0.1.26",
+ "license": "GPL-3.0-or-later",
+ "devDependencies": {
+ "c8": "^7.12.0",
+ "eslint": "^8.29.0",
+ "esm-world": "0.1.3",
+ "mocha": "^10.2.0",
+ "scaling-palm-tree": "github:mjethani/scaling-palm-tree#15cf1ab37e038771e1ff8005edc46d95f176739f"
+ },
+ "engines": {
+ "node": ">=14.0.0",
+ "npm": ">=6.14.4"
+ }
+ },
+ "node_modules/@bcoe/v8-coverage": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
+ "dev": true
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz",
+ "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.4.0",
+ "globals": "^13.15.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.7",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz",
+ "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "node_modules/@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.17",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@types/istanbul-lib-coverage": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
+ "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
+ "dev": true
+ },
+ "node_modules/acorn": {
+ "version": "8.8.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
+ "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+ "dev": true
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "node_modules/browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "dev": true
+ },
+ "node_modules/c8": {
+ "version": "7.12.0",
+ "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz",
+ "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==",
+ "dev": true,
+ "dependencies": {
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@istanbuljs/schema": "^0.1.3",
+ "find-up": "^5.0.0",
+ "foreground-child": "^2.0.0",
+ "istanbul-lib-coverage": "^3.2.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-reports": "^3.1.4",
+ "rimraf": "^3.0.2",
+ "test-exclude": "^6.0.0",
+ "v8-to-istanbul": "^9.0.0",
+ "yargs": "^16.2.0",
+ "yargs-parser": "^20.2.9"
+ },
+ "bin": {
+ "c8": "bin/c8.js"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
+ },
+ "node_modules/c8/node_modules/yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
+ "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
+ "dev": true
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "node_modules/chalk/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "node_modules/chalk/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "node_modules/chalk/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/chalk/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "node_modules/chalk/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
+ "dev": true
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "node_modules/diff": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+ "dev": true
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "node_modules/eslint": {
+ "version": "8.29.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.29.0.tgz",
+ "integrity": "sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg==",
+ "dev": true,
+ "dependencies": {
+ "@eslint/eslintrc": "^1.3.3",
+ "@humanwhocodes/config-array": "^0.11.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.1",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.4.0",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.15.0",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-sdsl": "^4.1.4",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=5"
+ }
+ },
+ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/esm-world": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/esm-world/-/esm-world-0.1.3.tgz",
+ "integrity": "sha512-nzgmXAdSIuKf11R6Y1gFnnVkARCYvDobcPAdt85aKxw8lH5QOkwpdJ/2ezC/FIRSRxuebq/lsXnRVNRtJCyzDQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.0.0",
+ "npm": ">=6.14.4"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz",
+ "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.8.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz",
+ "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "node_modules/flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "dev": true
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
+ "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
+ "dev": true
+ },
+ "node_modules/foreground-child": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz",
+ "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "node_modules/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.19.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
+ "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true
+ },
+ "node_modules/html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true
+ },
+ "node_modules/ignore": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz",
+ "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+ "dev": true
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "node_modules/istanbul-lib-coverage": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "dev": true,
+ "dependencies": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^3.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-report/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-report/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-reports": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
+ "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
+ "dev": true,
+ "dependencies": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/js-sdsl": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz",
+ "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/js-sdsl"
+ }
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/mocha": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz",
+ "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.3",
+ "debug": "4.3.4",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "5.0.1",
+ "ms": "2.1.3",
+ "nanoid": "3.3.3",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "workerpool": "6.2.1",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha.js"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mochajs"
+ }
+ },
+ "node_modules/mocha/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/mocha/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "node_modules/mocha/node_modules/minimatch": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
+ "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "node_modules/mocha/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
+ "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
+ "dev": true,
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
+ "node_modules/punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "node_modules/regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ },
+ "node_modules/scaling-palm-tree": {
+ "resolved": "git+ssh://git@github.com/mjethani/scaling-palm-tree.git#15cf1ab37e038771e1ff8005edc46d95f176739f",
+ "dev": true
+ },
+ "node_modules/serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "dev": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
+ "dev": true
+ },
+ "node_modules/string-width": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
+ "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "node_modules/test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "dev": true,
+ "dependencies": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/v8-to-istanbul": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz",
+ "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.12",
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^1.6.0"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true
+ },
+ "node_modules/workerpool": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
+ "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
+ "dev": true
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true
+ },
+ "node_modules/yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
+ "dev": true
+ },
+ "node_modules/yargs-unparser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true
+ }
+ },
+ "dependencies": {
+ "@bcoe/v8-coverage": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
+ "dev": true
+ },
+ "@eslint/eslintrc": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz",
+ "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.4.0",
+ "globals": "^13.15.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ }
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.11.7",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz",
+ "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ }
+ },
+ "@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+ "dev": true
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+ "dev": true
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
+ "dev": true
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.17",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
+ }
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@types/istanbul-lib-coverage": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
+ "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
+ "dev": true
+ },
+ "acorn": {
+ "version": "8.8.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
+ "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "dev": true
+ },
+ "c8": {
+ "version": "7.12.0",
+ "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz",
+ "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==",
+ "dev": true,
+ "requires": {
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@istanbuljs/schema": "^0.1.3",
+ "find-up": "^5.0.0",
+ "foreground-child": "^2.0.0",
+ "istanbul-lib-coverage": "^3.2.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-reports": "^3.1.4",
+ "rimraf": "^3.0.2",
+ "test-exclude": "^6.0.0",
+ "v8-to-istanbul": "^9.0.0",
+ "yargs": "^16.2.0",
+ "yargs-parser": "^20.2.9"
+ },
+ "dependencies": {
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true
+ }
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
+ "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ }
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "decamelize": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "diff": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+ "dev": true
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "eslint": {
+ "version": "8.29.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.29.0.tgz",
+ "integrity": "sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg==",
+ "dev": true,
+ "requires": {
+ "@eslint/eslintrc": "^1.3.3",
+ "@humanwhocodes/config-array": "^0.11.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.1.1",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.4.0",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.15.0",
+ "grapheme-splitter": "^1.0.4",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-sdsl": "^4.1.4",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
+ "strip-json-comments": "^3.1.0",
+ "text-table": "^0.2.0"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true
+ },
+ "esm-world": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/esm-world/-/esm-world-0.1.3.tgz",
+ "integrity": "sha512-nzgmXAdSIuKf11R6Y1gFnnVkARCYvDobcPAdt85aKxw8lH5QOkwpdJ/2ezC/FIRSRxuebq/lsXnRVNRtJCyzDQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz",
+ "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.8.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fastq": {
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz",
+ "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "dev": true
+ },
+ "flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "flatted": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
+ "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
+ "dev": true
+ },
+ "foreground-child": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz",
+ "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "optional": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globals": {
+ "version": "13.19.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
+ "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true
+ },
+ "html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true
+ },
+ "ignore": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz",
+ "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true
+ },
+ "is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+ "dev": true
+ },
+ "is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "istanbul-lib-coverage": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
+ "dev": true
+ },
+ "istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^3.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-reports": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
+ "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
+ "dev": true,
+ "requires": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ }
+ },
+ "js-sdsl": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz",
+ "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ }
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mocha": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz",
+ "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.3",
+ "debug": "4.3.4",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "5.0.1",
+ "ms": "2.1.3",
+ "nanoid": "3.3.3",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "workerpool": "6.2.1",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
+ "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "nanoid": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
+ "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "requires": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ },
+ "scaling-palm-tree": {
+ "version": "git+ssh://git@github.com/mjethani/scaling-palm-tree.git#15cf1ab37e038771e1ff8005edc46d95f176739f",
+ "dev": true,
+ "from": "scaling-palm-tree@github:mjethani/scaling-palm-tree#15cf1ab37e038771e1ff8005edc46d95f176739f"
+ },
+ "serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
+ "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "dev": true,
+ "requires": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "v8-to-istanbul": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz",
+ "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/trace-mapping": "^0.3.12",
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^1.6.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true
+ },
+ "workerpool": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
+ "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
+ "dev": true
+ },
+ "yargs-unparser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ }
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true
+ }
+ }
+}
diff --git a/platform/npm/package.json b/platform/npm/package.json
new file mode 100644
index 0000000..a505449
--- /dev/null
+++ b/platform/npm/package.json
@@ -0,0 +1,44 @@
+{
+ "name": "@gorhill/ubo-core",
+ "version": "0.1.26",
+ "description": "To create a working instance of uBlock Origin's static network filtering engine",
+ "type": "module",
+ "main": "index.js",
+ "scripts": {
+ "build": "node build.js",
+ "lint": "eslint js/ *.js tests/*.js",
+ "test": "c8 --include=index.js --include=js/**/*.js node test.js --mocha",
+ "test-full-battery": "c8 --include=index.js --include=js/**/*.js node test.js --mocha --full-battery",
+ "check-leaks": "mocha --check-leaks tests/leaks.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/gorhill/uBlock.git"
+ },
+ "keywords": [
+ "uBlock",
+ "uBO",
+ "adblock",
+ "trie"
+ ],
+ "author": "Raymond Hill (https://github.com/gorhill)",
+ "license": "GPL-3.0-or-later",
+ "contributors": [
+ "Manish Jethani <code@manishjethani.io>"
+ ],
+ "bugs": {
+ "url": "https://github.com/uBlockOrigin/uBlock-issues/issues"
+ },
+ "homepage": "https://github.com/gorhill/uBlock#readme",
+ "engines": {
+ "node": ">=14.0.0",
+ "npm": ">=6.14.4"
+ },
+ "devDependencies": {
+ "c8": "^7.12.0",
+ "eslint": "^8.29.0",
+ "esm-world": "0.1.3",
+ "mocha": "^10.2.0",
+ "scaling-palm-tree": "github:mjethani/scaling-palm-tree#15cf1ab37e038771e1ff8005edc46d95f176739f"
+ }
+}
diff --git a/platform/npm/test.js b/platform/npm/test.js
new file mode 100644
index 0000000..5b4401e
--- /dev/null
+++ b/platform/npm/test.js
@@ -0,0 +1,59 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* eslint-disable-next-line no-redeclare */
+/* globals process */
+
+'use strict';
+
+/******************************************************************************/
+
+import { spawn } from "child_process";
+import { promisify } from 'util';
+
+/******************************************************************************/
+
+async function spawnMocha() {
+ const files = [
+ 'tests/wasm.js',
+ 'tests/snfe.js',
+ ];
+
+ const options = [];
+
+ if ( process.argv[3] === '--full-battery' ) {
+ files.push('tests/request-data.js');
+
+ options.push('--reporter', 'progress');
+ }
+
+ await promisify(spawn)('mocha', [ '--experimental-vm-modules', '--no-warnings', ...files, ...options ], { stdio: [ 'inherit', 'inherit', 'inherit' ] });
+}
+
+async function main() {
+ if ( process.argv[2] === '--mocha' ) {
+ await spawnMocha();
+ }
+}
+
+main();
+
+/******************************************************************************/
diff --git a/platform/npm/tests/.eslintrc.json b/platform/npm/tests/.eslintrc.json
new file mode 100644
index 0000000..4668ae7
--- /dev/null
+++ b/platform/npm/tests/.eslintrc.json
@@ -0,0 +1,5 @@
+{
+ "env": {
+ "mocha": true
+ }
+}
diff --git a/platform/npm/tests/_common.js b/platform/npm/tests/_common.js
new file mode 100644
index 0000000..c252113
--- /dev/null
+++ b/platform/npm/tests/_common.js
@@ -0,0 +1,34 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import process from 'process';
+
+process.on('warning', warning => {
+ // Ignore warnings about experimental features like
+ // --experimental-vm-modules
+ if ( warning.name !== 'ExperimentalWarning' ) {
+ console.warn(warning.stack);
+ }
+});
diff --git a/platform/npm/tests/data/bundle.tgz b/platform/npm/tests/data/bundle.tgz
new file mode 100644
index 0000000..e5e3c33
--- /dev/null
+++ b/platform/npm/tests/data/bundle.tgz
Binary files differ
diff --git a/platform/npm/tests/leaks.js b/platform/npm/tests/leaks.js
new file mode 100644
index 0000000..3285398
--- /dev/null
+++ b/platform/npm/tests/leaks.js
@@ -0,0 +1,30 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+describe('Leaks', () => {
+ it('should not leak global variables', async () => {
+ await import('../index.js');
+ });
+});
diff --git a/platform/npm/tests/request-data.js b/platform/npm/tests/request-data.js
new file mode 100644
index 0000000..886fea3
--- /dev/null
+++ b/platform/npm/tests/request-data.js
@@ -0,0 +1,117 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import { strict as assert } from 'assert';
+import { readFile } from 'fs/promises';
+import { createRequire } from 'module';
+import { dirname, resolve } from 'path';
+import { fileURLToPath } from 'url';
+
+import { createWorld } from 'esm-world';
+
+import './_common.js';
+
+const __dirname = dirname(fileURLToPath(import.meta.url));
+
+const require = createRequire(import.meta.url);
+
+const requests = require('scaling-palm-tree/requests.json');
+const results = require('./data/results.json');
+
+async function read(path) {
+ return readFile(resolve(__dirname, path), 'utf8');
+}
+
+describe('Request data', () => {
+ const typeMap = {
+ document: 'sub_frame',
+ stylesheet: 'stylesheet',
+ image: 'image',
+ media: 'media',
+ font: 'font',
+ script: 'script',
+ xhr: 'xmlhttprequest',
+ fetch: 'xmlhttprequest',
+ websocket: 'websocket',
+ ping: 'ping',
+
+ other: 'other',
+ eventsource: 'other',
+ manifest: 'other',
+ texttrack: 'other',
+ };
+
+ for ( let wasm of [ false, true ] ) {
+ context(`${wasm ? 'Wasm on' : 'Wasm off'}`, () => {
+ let engine = null;
+
+ before(async () => {
+ const { StaticNetFilteringEngine, enableWASM } = await createWorld('./index.js', { globals: global });
+
+ if ( wasm ) {
+ assert(await enableWASM());
+ }
+
+ engine = await StaticNetFilteringEngine.create();
+
+ await engine.useLists([
+ read('./data/assets/ublock/badware.txt')
+ .then(raw => ({ name: 'badware', raw })),
+ read('./data/assets/ublock/filters.txt')
+ .then(raw => ({ name: 'filters', raw })),
+ read('./data/assets/ublock/filters-2020.txt')
+ .then(raw => ({ name: 'filters-2020', raw })),
+ read('./data/assets/ublock/filters-2021.txt')
+ .then(raw => ({ name: 'filters-2021', raw })),
+ read('./data/assets/ublock/privacy.txt')
+ .then(raw => ({ name: 'privacy', raw })),
+ read('./data/assets/ublock/resource-abuse.txt')
+ .then(raw => ({ name: 'resource-abuse', raw })),
+ read('./data/assets/ublock/unbreak.txt')
+ .then(raw => ({ name: 'unbreak.txt', raw })),
+ read('./data/assets/thirdparties/easylist-downloads.adblockplus.org/easylist.txt')
+ .then(raw => ({ name: 'easylist', raw })),
+ read('./data/assets/thirdparties/easylist-downloads.adblockplus.org/easyprivacy.txt')
+ .then(raw => ({ name: 'easyprivacy', raw })),
+ read('./data/assets/thirdparties/pgl.yoyo.org/as/serverlist')
+ .then(raw => ({ name: 'PGL', raw })),
+ read('./data/assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt')
+ .then(raw => ({ name: 'urlhaus', raw })),
+ ]);
+ });
+
+ for ( let i = 0; i < requests.length; i++ ) {
+ const { url, frameUrl, cpt } = requests[i];
+ const request = { url, originURL: frameUrl, type: typeMap[cpt] };
+
+ const expected = results[i];
+
+ it(`should ${expected === 1 ? 'block' : 'allow'} ${request.type} URL ${request.url} from origin ${request.originURL}`, () => {
+ assert.equal(engine.matchRequest(request), expected);
+ });
+ }
+ });
+ }
+});
diff --git a/platform/npm/tests/snfe.js b/platform/npm/tests/snfe.js
new file mode 100644
index 0000000..f6f3158
--- /dev/null
+++ b/platform/npm/tests/snfe.js
@@ -0,0 +1,372 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import { strict as assert } from 'assert';
+
+import { createWorld } from 'esm-world';
+
+import './_common.js';
+
+describe('SNFE', () => {
+ for ( let wasm of [ false/*, true*/ ] ) {
+ context(`${wasm ? 'Wasm on' : 'Wasm off'}`, () => {
+ let module = null;
+ let engine = null;
+
+ beforeEach(async () => {
+ module = await createWorld('./index.js', { globals: global });
+
+ if ( wasm ) {
+ assert(await module.enableWASM());
+ }
+ });
+
+ afterEach(() => {
+ engine = null;
+ module = null;
+ });
+
+ describe('Initialization', () => {
+ it('should not reject on first attempt', async () => {
+ await module.StaticNetFilteringEngine.create();
+ });
+
+ it('should reject on second attempt', async () => {
+ await module.StaticNetFilteringEngine.create();
+ await assert.rejects(module.StaticNetFilteringEngine.create());
+ });
+
+ it('should reject on third attempt', async () => {
+ await module.StaticNetFilteringEngine.create();
+
+ try {
+ await module.StaticNetFilteringEngine.create();
+ } catch (error) {
+ }
+
+ await assert.rejects(module.StaticNetFilteringEngine.create());
+ });
+ });
+
+ describe('Filter loading', () => {
+ beforeEach(async () => {
+ engine = await module.StaticNetFilteringEngine.create();
+ });
+
+ it('should not reject on no lists', async () => {
+ await engine.useLists([]);
+ });
+
+ it('should not reject on one empty list', async () => {
+ await engine.useLists([
+ { name: 'easylist', raw: '' },
+ ]);
+ });
+
+ it('should not reject on one list containing one filter', async () => {
+ await engine.useLists([
+ { name: 'easylist', raw: '/foo^' },
+ ]);
+ });
+
+ it('should not reject on one list containing multiple filters', async () => {
+ await engine.useLists([
+ { name: 'easylist', raw: '/foo^\n||example.com^' },
+ ]);
+ });
+
+ it('should not reject on multiple lists containing multiple filters', async () => {
+ await engine.useLists([
+ { name: 'easylist', raw: '/foo^\n||example.com^' },
+ { name: 'easyprivacy', raw: '||example.net/bar/\n^bar.js?' },
+ ]);
+ });
+
+ it('should not reject on promised-based lists', async () => {
+ await engine.useLists([
+ Promise.resolve({ name: 'easylist', raw: '/foo^\n||example.com^' }),
+ Promise.resolve({ name: 'easyprivacy', raw: '||example.net/bar/\n^bar.js?' }),
+ ]);
+ });
+
+ it('should reject on promised-based lists in which a promise is rejected', async () => {
+ await assert.rejects(engine.useLists([
+ Promise.reject({ name: 'easylist', raw: '/foo^\n||example.com^' }),
+ Promise.resolve({ name: 'easyprivacy', raw: '||example.net/bar/\n^bar.js?' }),
+ ]));
+ });
+
+ it('should reject on promised-based lists in which all promises are rejected', async () => {
+ await assert.rejects(engine.useLists([
+ Promise.reject({ name: 'easylist', raw: '/foo^\n||example.com^' }),
+ Promise.reject({ name: 'easyprivacy', raw: '||example.net/bar/\n^bar.js?' }),
+ ]));
+ });
+
+ it('should not reject on second call in sequence', async () => {
+ await engine.useLists([
+ Promise.resolve({ name: 'easylist', raw: '/foo^\n||example.com^' }),
+ Promise.resolve({ name: 'easyprivacy', raw: '||example.net/bar/\n^bar.js?' }),
+ ]);
+
+ await engine.useLists([
+ Promise.resolve({ name: 'easylist', raw: '/foo^\n||example.com^' }),
+ Promise.resolve({ name: 'easyprivacy', raw: '||example.net/bar/\n^bar.js?' }),
+ ]);
+ });
+ });
+
+ describe('Serialization', () => {
+ beforeEach(async () => {
+ engine = await module.StaticNetFilteringEngine.create();
+ });
+
+ it('should not reject with no lists', async () => {
+ await engine.useLists([]);
+
+ await engine.serialize();
+ });
+
+ it('should not reject with one empty list', async () => {
+ await engine.useLists([
+ { name: 'easylist', raw: '' },
+ ]);
+
+ await engine.serialize();
+ });
+
+ it('should not reject with one list containing one filter', async () => {
+ await engine.useLists([
+ { name: 'easylist', raw: '/foo^' },
+ ]);
+
+ await engine.serialize();
+ });
+
+ it('should not reject with one list containing multiple filters', async () => {
+ await engine.useLists([
+ { name: 'easylist', raw: '/foo^\n||example.com^' },
+ ]);
+
+ await engine.serialize();
+ });
+
+ it('should not reject with multiple lists containing multiple filters', async () => {
+ await engine.useLists([
+ { name: 'easylist', raw: '/foo^\n||example.com^' },
+ { name: 'easyprivacy', raw: '||example.net/bar/\n^bar.js?' },
+ ]);
+
+ await engine.serialize();
+ });
+ });
+
+ describe('Deserialization', () => {
+ beforeEach(async () => {
+ engine = await module.StaticNetFilteringEngine.create();
+ });
+
+ it('should not reject with no lists', async () => {
+ await engine.useLists([]);
+
+ const serialized = await engine.serialize();
+ await engine.deserialize(serialized);
+ });
+
+ it('should not reject with one empty list', async () => {
+ await engine.useLists([
+ { name: 'easylist', raw: '' },
+ ]);
+
+ const serialized = await engine.serialize();
+ await engine.deserialize(serialized);
+ });
+
+ it('should not reject with one list containing one filter', async () => {
+ await engine.useLists([
+ { name: 'easylist', raw: '/foo^' },
+ ]);
+
+ const serialized = await engine.serialize();
+ await engine.deserialize(serialized);
+ });
+
+ it('should not reject with one list containing multiple filters', async () => {
+ await engine.useLists([
+ { name: 'easylist', raw: '/foo^\n||example.com^' },
+ ]);
+
+ const serialized = await engine.serialize();
+ await engine.deserialize(serialized);
+ });
+
+ it('should not reject with multiple lists containing multiple filters', async () => {
+ await engine.useLists([
+ { name: 'easylist', raw: '/foo^\n||example.com^' },
+ { name: 'easyprivacy', raw: '||example.net/bar/\n^bar.js?' },
+ ]);
+
+ const serialized = await engine.serialize();
+ await engine.deserialize(serialized);
+ });
+
+ // https://github.com/gorhill/uBlock/commit/8f461072f576cdf72c088a952ef342281a7c44d6
+ it('should correctly remove query parameter following deserialization', async () => {
+ await engine.useLists([
+ { name: 'custom', raw: '*$removeparam=/^utm_/' },
+ ]);
+ const request = {
+ originURL: 'https://www.example.com/?utm_source=1',
+ type: 'document',
+ url: 'https://www.example.com/?utm_source=1',
+ };
+ let result = engine.filterQuery(request);
+ assert.strictEqual(result.redirectURL, 'https://www.example.com/');
+ const serialized = await engine.serialize();
+ await engine.deserialize(serialized);
+ result = engine.filterQuery(request);
+ assert.strictEqual(result.redirectURL, 'https://www.example.com/');
+ });
+ });
+
+ describe('Filter matching', () => {
+ beforeEach(async () => {
+ engine = await module.StaticNetFilteringEngine.create();
+ });
+
+ it('should match pure-hostname block filter', async () => {
+ await engine.useLists([
+ { name: 'test', raw: '||example.net^' },
+ ]);
+ const r = engine.matchRequest({
+ originURL: 'https://www.example.com/',
+ type: 'image',
+ url: 'https://www.example.net/',
+ });
+ assert.strictEqual(r, 1);
+ });
+
+ it('should match pure-hostname exception filter', async () => {
+ await engine.useLists([
+ { name: 'test', raw: '||example.net^\n@@||example.net^' },
+ ]);
+ const r = engine.matchRequest({
+ originURL: 'https://www.example.com/',
+ type: 'image',
+ url: 'https://www.example.net/',
+ });
+ assert.strictEqual(r, 2);
+ });
+
+ it('should match pure-hostname block-important filter', async () => {
+ await engine.useLists([
+ { name: 'test', raw: '@@||example.net^\n||example.net^$important' },
+ ]);
+ const r = engine.matchRequest({
+ originURL: 'https://www.example.com/',
+ type: 'image',
+ url: 'https://www.example.net/',
+ });
+ assert.strictEqual(r, 1);
+ assert(engine.isBlockImportant());
+ });
+
+ it('should detect the filter is block-important', async () => {
+ await engine.useLists([
+ { name: 'test', raw: '||example.net^$important' },
+ ]);
+ engine.matchRequest({
+ originURL: 'https://www.example.com/',
+ type: 'image',
+ url: 'https://www.example.net/',
+ });
+ assert(engine.isBlockImportant());
+ });
+
+ it('should block all except stylesheets #1', async () => {
+ await engine.useLists([
+ { name: 'test', raw: '||example.com^$~stylesheet,all' },
+ ]);
+ const r = engine.matchRequest({
+ originURL: 'https://www.example.com/',
+ type: 'stylesheet',
+ url: 'https://www.example.com/',
+ });
+ assert.strictEqual(r, 0);
+ });
+
+ it('should block all except stylesheets #2', async () => {
+ await engine.useLists([
+ { name: 'test', raw: '||example.com^$all,~stylesheet' },
+ ]);
+ const r = engine.matchRequest({
+ originURL: 'https://www.example.com/',
+ type: 'stylesheet',
+ url: 'https://www.example.com/',
+ });
+ assert.strictEqual(r, 0);
+ });
+
+ // https://github.com/gorhill/uBlock/commit/d66cd1116c0e
+ it('should not match on localhost', async () => {
+ await engine.useLists([
+ { name: 'test', raw: '.js$domain=foo.*|bar.*\n/^/$domain=example.*|foo.*' },
+ ]);
+ const r = engine.matchRequest({
+ originURL: 'https://localhost/',
+ type: 'script',
+ url: 'https://localhost/baz.js',
+ });
+ assert.strictEqual(r, 0);
+ });
+
+ // https://github.com/AdguardTeam/AdguardFilters/issues/88067#issuecomment-1019518277
+ it('should match regex-based filter without `match-case` option', async () => {
+ await engine.useLists([
+ { name: 'test', raw: '/\.com\/[a-z]{9,}\/[a-z]{9,}\.js$/$script,1p' },
+ ]);
+ const r = engine.matchRequest({
+ originURL: 'https://example.com/',
+ type: 'script',
+ url: 'https://example.com/LQMDQSMLDAZAEHERE/LQMDQSMLDAZAEHERE.js',
+ });
+ assert.strictEqual(r, 1);
+ });
+
+ it('should not match regex-based filter with `match-case` option', async () => {
+ await engine.useLists([
+ { name: 'test', raw: '/\.com\/[a-z]{9,}\/[a-z]{9,}\.js$/$script,1p,match-case' },
+ ]);
+ const r = engine.matchRequest({
+ originURL: 'https://example.com/',
+ type: 'script',
+ url: 'https://example.com/LQMDQSMLDAZAEHERE/LQMDQSMLDAZAEHERE.js',
+ });
+ assert.strictEqual(r, 0);
+ });
+ });
+ });
+ }
+});
diff --git a/platform/npm/tests/wasm.js b/platform/npm/tests/wasm.js
new file mode 100644
index 0000000..5e7cbd2
--- /dev/null
+++ b/platform/npm/tests/wasm.js
@@ -0,0 +1,53 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* globals WebAssembly */
+
+'use strict';
+
+/******************************************************************************/
+
+import { strict as assert } from 'assert';
+
+import { createWorld } from 'esm-world';
+
+import './_common.js';
+
+describe('WASM', () => {
+ context('WebAssembly available', () => {
+ it('should fulfill with true', async () => {
+ const { enableWASM } = await createWorld('./index.js', { globals: { URL, WebAssembly } });
+
+ assert.equal(await enableWASM(), true);
+ });
+ });
+
+ context('WebAssembly not available', () => {
+ it('should fulfill with false', async () => {
+ // WebAssembly must be set to undefined explicitly; otherwise
+ // createWorld() ends up using the global WebAssembly object
+ // anyway.
+ const { enableWASM } = await createWorld('./index.js', { globals: { URL, WebAssembly: undefined } });
+
+ assert.equal(await enableWASM(), false);
+ });
+ });
+});
diff --git a/platform/opera/manifest.json b/platform/opera/manifest.json
new file mode 100644
index 0000000..abc0bda
--- /dev/null
+++ b/platform/opera/manifest.json
@@ -0,0 +1,116 @@
+{
+ "author": "Raymond Hill & contributors",
+ "background": {
+ "page": "background.html"
+ },
+ "browser_action": {
+ "default_icon": {
+ "16": "img/icon_16.png",
+ "32": "img/icon_32.png",
+ "64": "img/icon_64.png"
+ },
+ "default_popup": "popup-fenix.html",
+ "default_title": "uBlock Origin"
+ },
+ "commands": {
+ "launch-element-picker": {
+ "description": "__MSG_popupTipPicker__"
+ },
+ "launch-element-zapper": {
+ "description": "__MSG_popupTipZapper__"
+ },
+ "launch-logger": {
+ "description": "__MSG_popupTipLog__"
+ },
+ "open-dashboard": {
+ "description": "__MSG_popupTipDashboard__"
+ },
+ "relax-blocking-mode": {
+ "description": "__MSG_relaxBlockingMode__"
+ },
+ "toggle-cosmetic-filtering": {
+ "description": "__MSG_toggleCosmeticFiltering__"
+ }
+ },
+ "content_scripts": [
+ {
+ "matches": [
+ "http://*/*",
+ "https://*/*"
+ ],
+ "js": [
+ "js/vapi.js",
+ "js/vapi-client.js",
+ "js/contentscript.js"
+ ],
+ "all_frames": true,
+ "match_about_blank": true,
+ "run_at": "document_start"
+ },
+ {
+ "matches": [
+ "https://easylist.to/*",
+ "https://*.fanboy.co.nz/*",
+ "https://filterlists.com/*",
+ "https://forums.lanik.us/*",
+ "https://github.com/*",
+ "https://*.github.io/*",
+ "https://*.letsblock.it/*"
+ ],
+ "js": [
+ "/js/scriptlets/subscriber.js"
+ ],
+ "run_at": "document_idle",
+ "all_frames": false
+ },
+ {
+ "matches": [
+ "https://github.com/uBlockOrigin/*",
+ "https://ublockorigin.github.io/*",
+ "https://*.reddit.com/r/uBlockOrigin/*"
+ ],
+ "js": [
+ "/js/scriptlets/updater.js"
+ ],
+ "run_at": "document_idle",
+ "all_frames": false
+ }
+ ],
+ "default_locale": "en",
+ "description": "__MSG_extShortDesc__",
+ "icons": {
+ "16": "img/icon_16.png",
+ "32": "img/icon_32.png",
+ "64": "img/icon_64.png",
+ "128": "img/icon_128.png"
+ },
+ "incognito": "split",
+ "manifest_version": 2,
+ "minimum_opera_version": "60.0",
+ "name": "uBlock Origin",
+ "options_page": "dashboard.html",
+ "permissions": [
+ "contextMenus",
+ "privacy",
+ "storage",
+ "tabs",
+ "unlimitedStorage",
+ "webNavigation",
+ "webRequest",
+ "webRequestBlocking",
+ "<all_urls>"
+ ],
+ "short_name": "uBlock₀",
+ "sidebar_action": {
+ "default_icon": {
+ "16": "img/icon_16.png",
+ "32": "img/icon_32.png"
+ },
+ "default_panel": "logger-ui.html",
+ "default_title": "__MSG_statsPageName__"
+ },
+ "version": "1.14.23.17",
+ "web_accessible_resources": [
+ "/web_accessible_resources/*"
+ ]
+}
diff --git a/platform/safari/README.md b/platform/safari/README.md
new file mode 100644
index 0000000..769d245
--- /dev/null
+++ b/platform/safari/README.md
@@ -0,0 +1,16 @@
+# Safari platform
+
+The Safari platform does not support the WebExtensions
+framework and thus is no longer supported. Consequently
+the code base has been removed.
+
+Note that the code base here was before the
+[official fork Safari fork](https://github.com/el1t/uBlock-Safari) was
+created, so it does not correspond to the version of
+uBlock Origin which could be installed on Safari.
+
+The last commit which contains the code is
+917f3620e0c08b722bbd4d400bca2735d9f6975f.
+
+You can browse the last state of the removed code base at
+<https://github.com/gorhill/uBlock/tree/917f3620e0c08b722bbd4d400bca2735d9f6975f/platform/safari>.
diff --git a/platform/thunderbird/manifest.json b/platform/thunderbird/manifest.json
new file mode 100644
index 0000000..cb7ccca
--- /dev/null
+++ b/platform/thunderbird/manifest.json
@@ -0,0 +1,94 @@
+{
+ "browser_specific_settings": {
+ "gecko": {
+ "id": "uBlock0@raymondhill.net",
+ "strict_min_version": "91.0"
+ }
+ },
+ "author": "Raymond Hill & contributors",
+ "background": {
+ "page": "background.html"
+ },
+ "browser_action": {
+ "browser_style": false,
+ "default_icon": {
+ "16": "img/icon_16.png",
+ "32": "img/icon_32.png"
+ },
+ "default_title": "uBlock Origin",
+ "default_popup": "popup-fenix.html"
+ },
+ "content_scripts": [
+ {
+ "matches": [
+ "http://*/*",
+ "https://*/*",
+ "file://*/*"
+ ],
+ "js": [
+ "/js/vapi.js",
+ "/js/vapi-client.js",
+ "/js/contentscript.js"
+ ],
+ "all_frames": true,
+ "match_about_blank": true,
+ "run_at": "document_start"
+ },
+ {
+ "matches": [
+ "https://easylist.to/*",
+ "https://*.fanboy.co.nz/*",
+ "https://filterlists.com/*",
+ "https://forums.lanik.us/*",
+ "https://github.com/*",
+ "https://*.github.io/*",
+ "https://*.letsblock.it/*"
+ ],
+ "js": [
+ "/js/scriptlets/subscriber.js"
+ ],
+ "run_at": "document_idle",
+ "all_frames": false
+ },
+ {
+ "matches": [
+ "https://github.com/uBlockOrigin/*",
+ "https://ublockorigin.github.io/*",
+ "https://*.reddit.com/r/uBlockOrigin/*"
+ ],
+ "js": [
+ "/js/scriptlets/updater.js"
+ ],
+ "run_at": "document_idle",
+ "all_frames": false
+ }
+ ],
+ "default_locale": "en",
+ "description": "__MSG_extShortDesc__",
+ "icons": {
+ "16": "img/ublock.svg",
+ "48": "img/ublock.svg",
+ "96": "img/ublock.svg"
+ },
+ "manifest_version": 2,
+ "name": "uBlock Origin",
+ "options_ui": {
+ "page": "dashboard.html",
+ "browser_style": false,
+ "open_in_tab": true
+ },
+ "permissions": [
+ "privacy",
+ "storage",
+ "tabs",
+ "webNavigation",
+ "webRequest",
+ "webRequestBlocking",
+ "<all_urls>"
+ ],
+ "short_name": "uBlock₀",
+ "version": "1.9.15.101",
+ "web_accessible_resources": [
+ "/web_accessible_resources/*"
+ ]
+}
diff --git a/src/1p-filters.html b/src/1p-filters.html
new file mode 100644
index 0000000..bafa992
--- /dev/null
+++ b/src/1p-filters.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>uBlock — Your filters</title>
+
+<link rel="stylesheet" href="lib/codemirror/lib/codemirror.css">
+<link rel="stylesheet" href="lib/codemirror/addon/hint/show-hint.css">
+<link rel="stylesheet" href="lib/codemirror/addon/search/matchesonscrollbar.css">
+
+<link rel="stylesheet" href="css/themes/default.css">
+<link rel="stylesheet" href="css/common.css">
+<link rel="stylesheet" href="css/fa-icons.css">
+<link rel="stylesheet" href="css/dashboard-common.css">
+<link rel="stylesheet" href="css/cloud-ui.css">
+<link rel="stylesheet" href="css/1p-filters.css">
+<link rel="stylesheet" href="css/codemirror.css">
+</head>
+
+<body>
+
+<div class="body">
+ <div id="cloudWidget" class="hide" data-cloud-entry="myFiltersPane"></div>
+
+ <p class="vverbose"><span data-i18n="1pTrustWarning"></span>&ensp;<span data-i18n="1pFormatHint"></span>&thinsp;<a class="fa-icon info" href="https://github.com/gorhill/uBlock/wiki/Dashboard:-My-filters" target="_blank">question-circle</a></p>
+ <p>
+ <button id="userFiltersApply" class="preferred iconified" type="button" disabled><span class="fa-icon">check</span><span data-i18n="1pApplyChanges">_</span><span class="hover"></span></button>
+ <button id="userFiltersRevert" class="iconified" type="button" disabled><span class="fa-icon">undo</span><span data-i18n="genericRevert">_</span><span class="hover"></span></button>
+ &ensp;
+ <button id="importUserFiltersFromFile" class="iconified" type="button"><span class="fa-icon">download-alt</span><span data-i18n="1pImport">_</span><span class="hover"></span></button>
+ <button id="exportUserFiltersToFile" class="iconified" type="button"><span class="fa-icon">upload-alt</span><span data-i18n="1pExport">_</span><span class="hover"></span></button>
+ </p>
+</div>
+<div id="userFilters" class="codeMirrorContainer codeMirrorBreakAll cm-theme-override" spellcheck="false"></div>
+<div class="hidden">
+ <input id="importFilePicker" type="file" accept="text/plain">
+</div>
+
+<script src="lib/codemirror/lib/codemirror.js"></script>
+<script src="lib/codemirror/addon/comment/comment.js"></script>
+<script src="lib/codemirror/addon/display/panel.js"></script>
+<script src="lib/codemirror/addon/edit/closebrackets.js"></script>
+<script src="lib/codemirror/addon/edit/matchbrackets.js"></script>
+<script src="lib/codemirror/addon/fold/foldcode.js"></script>
+<script src="lib/codemirror/addon/hint/show-hint.js"></script>
+<script src="lib/codemirror/addon/scroll/annotatescrollbar.js"></script>
+<script src="lib/codemirror/addon/search/searchcursor.js"></script>
+<script src="lib/codemirror/addon/selection/active-line.js"></script>
+<script src="lib/diff/swatinem_diff.js"></script>
+<script src="lib/hsluv/hsluv-0.1.0.min.js"></script>
+
+<script src="js/vapi.js"></script>
+<script src="js/vapi-common.js"></script>
+<script src="js/vapi-client.js"></script>
+
+<script src="js/codemirror/search.js" type="module"></script>
+<script src="js/codemirror/search-thread.js"></script>
+
+<script src="js/fa-icons.js" type="module"></script>
+<script src="js/theme.js" type="module"></script>
+<script src="js/i18n.js" type="module"></script>
+<script src="js/dashboard-common.js" type="module"></script>
+<script src="js/cloud-ui.js" type="module"></script>
+<script src="js/1p-filters.js" type="module"></script>
+
+</body>
+</html>
diff --git a/src/3p-filters.html b/src/3p-filters.html
new file mode 100644
index 0000000..a779120
--- /dev/null
+++ b/src/3p-filters.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
+<title>uBlock — Filter lists</title>
+<link rel="stylesheet" type="text/css" href="css/themes/default.css">
+<link rel="stylesheet" type="text/css" href="css/common.css">
+<link rel="stylesheet" type="text/css" href="css/fa-icons.css">
+<link rel="stylesheet" type="text/css" href="css/dashboard-common.css">
+<link rel="stylesheet" type="text/css" href="css/cloud-ui.css">
+<link rel="stylesheet" type="text/css" href="css/3p-filters.css">
+</head>
+
+<body>
+
+<div class="body">
+
+<div id="cloudWidget" class="hide" data-cloud-entry="tpFiltersPane"></div>
+<div id="actions">
+ <button id="buttonApply" class="preferred disabled iconified" type="button" data-i18n-title="3pApplyChanges"><span class="fa-icon">check</span><span data-i18n="3pApplyChanges">_</span><span class="hover"></span></button>
+ <button id="buttonUpdate" class="preferred disabled iconified" type="button" data-i18n-title="3pUpdateNow"><span class="fa-icon">refresh</span><span data-i18n="3pUpdateNow">_</span><span class="hover"></span></button>
+</div>
+
+<div>
+ <div class="li">
+ <label><span class="input checkbox"><input type="checkbox" id="autoUpdate"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span data-i18n="3pAutoUpdatePrompt1"></span></label>
+ </div>
+ <div class="li">
+ <label><span class="input checkbox"><input type="checkbox" id="suspendUntilListsAreLoaded"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span data-i18n="3pSuspendUntilListsAreLoaded"></span></label>
+ </div>
+ <div class="li">
+ <label><span class="input checkbox"><input type="checkbox" id="parseCosmeticFilters"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span><span data-i18n="3pParseAllABPHideFiltersPrompt1"></span>&nbsp;<span class="fa-icon info" data-i18n-title="3pParseAllABPHideFiltersInfo">question-circle</span></span></label>
+ </div>
+ <div class="li">
+ <label><span class="input checkbox"><input type="checkbox" id="ignoreGenericCosmeticFilters"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span><span data-i18n="3pIgnoreGenericCosmeticFilters"></span>&nbsp;<span class="fa-icon info" data-i18n-title="3pIgnoreGenericCosmeticFiltersInfo">question-circle</span></span></label>
+ </div>
+</div>
+
+<div>
+</div>
+
+<div id="lists">
+ <div class="rootstats expandable" data-key="*">
+ <span class="fa-icon listExpander">angle-up</span><span id="listsOfBlockedHostsPrompt"></span>
+ </div>
+ <div class="searchbar"><input type="search" spellcheck="false"/><span class="fa-icon">search</span></div>
+ <div class="listEntries"></div>
+ <div class="li listEntry expandable" data-role="import">
+ <span class="detailbar">
+ <label><span class="fa-icon listExpander">angle-up</span><span class="listname" data-i18n="3pImport"></span></label>
+ <a class="fa-icon info towiki" href="https://github.com/gorhill/uBlock/wiki/Filter-lists-from-around-the-web" target="_blank">info-circle</a>
+ </span>
+ <textarea dir="ltr" spellcheck="false" placeholder="3pExternalListsHint"></textarea>
+ </div>
+</div>
+
+</div>
+
+<div id="templates" style="display: none;">
+ <div class="listEntries"></div>
+ <div class="li listEntry" data-role="leaf">
+ <span class="detailbar">
+ <label><span class="input checkbox"><input type="checkbox"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span><span class="listname forinput"></span>
+ </span></label>
+ <span class="iconbar"><!--
+ --><a class="fa-icon content" href="#" type="text/plain" target="_blank" data-i18n-title="3pViewContent">eye-open</a><!--
+ --><a class="fa-icon support" href="#" target="_blank">home</a><!--
+ --><span class="fa-icon remove">trash-o</span><!--
+ --><a class="fa-icon mustread" href="#" target="_blank">info-circle</a><!--
+  --><span class="fa-icon status unsecure" title="http">unlock-alt</span><!--
+  --><span class="fa-icon status obsolete" data-i18n-title="3pExternalListObsolete">exclamation-triangle</span><!--
+  --><span class="fa-icon status cache">clock-o</span><!--
+  --><span class="fa-icon status updating" data-i18n-title="3pUpdating">spinner</span><!--
+  --><span class="fa-icon status failed" data-i18n-title="3pNetworkError">unlink</span>
+ </span>
+ <span class="leafstats"></span>
+ </span>
+ </div>
+ <div class="li listEntry expandable" data-role="node">
+ <span class="detailbar">
+ <label><span class="input checkbox"><input type="checkbox"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span class="listname forinput"></span></label>
+ <span class="nodestats"></span>
+ <span class="fa-icon listExpander">angle-up</span>
+ <span class="iconbar"><!--
+ --><a class="fa-icon support" href="#" target="_blank">home</a><!--
+ --><a class="fa-icon mustread" href="#" target="_blank">info-circle</a><!--
+  --><span class="fa-icon status obsolete" data-i18n-title="3pExternalListObsolete">exclamation-triangle</span><!--
+  --><span class="fa-icon status cache">clock-o</span><!--
+  --><span class="fa-icon status updating" data-i18n-title="3pUpdating">spinner</span><!--
+  --><span class="fa-icon status failed" data-i18n-title="3pNetworkError">unlink</span>
+ </span>
+ <span class="leafstats"></span>
+ </span>
+ </div>
+ <div class="li listEntry expandable" data-parent="root" data-role="node">
+ <span class="detailbar">
+ <label><span class="fa-icon listExpander">angle-up</span><span class="listname"></span></label>
+ <span class="nodestats"></span>
+ </span>
+ </div>
+</div>
+
+<script src="lib/hsluv/hsluv-0.1.0.min.js"></script>
+
+<script src="js/fa-icons.js" type="module"></script>
+<script src="js/vapi.js"></script>
+<script src="js/vapi-common.js"></script>
+<script src="js/vapi-client.js"></script>
+<script src="js/theme.js" type="module"></script>
+<script src="js/i18n.js" type="module"></script>
+<script src="js/dashboard-common.js" type="module"></script>
+<script src="js/cloud-ui.js" type="module"></script>
+<script src="js/3p-filters.js" type="module"></script>
+
+</body>
+</html>
diff --git a/src/_locales/ar/messages.json b/src/_locales/ar/messages.json
new file mode 100644
index 0000000..be9af18
--- /dev/null
+++ b/src/_locales/ar/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "يو بلوك أوريجين",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "وأخيراً, مانع اعلانات كفوء. خفيف على المعالج و الذاكرة.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — لوحة التحكم",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "تنبيه! لديك تغييرات لم تقم بحفظها",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "إبقى",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "تجاهل",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "الإعدادات",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "قوائم الفلاتر",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "الفلاتر الخاصة بي",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "القواعد الخاصة بي",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "المواقع الموثوقة",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "الاختصارات",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "\"uBlock₀\" — سجل الإتصال بالشبكة",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "حول البرنامج",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "الدعم",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — مُعاين العناصر",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "الإعدادات المتقدمة",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "اضغط: لتعطيل/تشغيل ميكروبلوك لهذا الموقع.\n\nCtrl+click لتعطيل ميكروبلوك لهذه الصفحة فقط.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "اضغط لتعطيل uBlock₀ لهذا الموقع.\n\nCtrl+click لتعطيل uBlock₀ لهذه الصفحة فقط.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "اضغط لتفعيل uBlock₀ لهذا الموقع.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "تم منع الطلبات",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "على هذه الصفحة",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} أو {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "منذ التنصيب",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "أو",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "محجوب من هذه الصفحة",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "حُجِب منذ التنصيب",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "النطاقات المتصلة",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "إضغط لفتح لوحة التحكم",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "دخول وضع تحديد العناصر السريع",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "دخول وضع تحديد العناصر",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "إفتح سجل طلبات الشبكة",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "التقرير عن مُشكلة في الموقع",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "تفعيل أو تعطيل النوافذ منبثقة لهذا الموقع",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "اضغط لحجب جميع النوافذ المنبثقة لهذا الموقع",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "أضغط للوقف منع جميع النوافذ المنبثقة لهذا الموقع",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "تفعيل أو تعطيل حجب عناصر الوسائط الكبيرة لهذا الموقع",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "اضغط لحجب عناصر الوسائط الكبيرة لهذا الموقع",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "أضغط للوقف منع عناصر الوسائط الكبيرة لهذا الموقع",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "تفعيل أو تعطيل الفلترة التجميلية لهذا الموقع",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "اضغط لتعطيل الفلترة التجميلية لهذا الموقع",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "اضغط لتشغيل الفلترة التجميلية لهذا الموقع",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "تفعيل أو تعطيل حجب الخطوط الخارجية لهذا الموقع",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "أضغط لحجب الخطوط الخارجية لهذا الموقع",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "أضغط للسماح للخطوط الخارجية لهذا الموقع",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "انقر لتعطيل الجافا سكريبت على هذا الموقع",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "انقر لإلغاء تعطيل الجافا سكريبت على هذا الموقع",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "الإطارات المنبثقة",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "عناصر وسائط كبيرة",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "إعادات الفلاتر التجميلية العمومية",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "الخطوط الخارجية",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "جافا سكريبت",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "المزيد",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "أقل",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "القواعد العامة: هذا العمود يتعلق بالقواعد التي تنطبق على جميع الموقع.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "القواعد الموضعية: هذا العمود يتعلق بالقواعد التي تنطبق فقط على الموقع المزار حاليا.\nالقواعد الموضعية تحل محل القواعد العامة.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "إضغط لحفظ التغييرات بشكل دائم.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "إضغط لإعادة التغييرات للوضع السابق.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "الكل",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "الصور",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "جهة خارجية",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "كود CSS/صورة من مصدر خارجي",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "نصوص برمجة بين السطور",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "سكربتات من الطرف الاول",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "سكربتات من طرف خارجي",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "إطارات من طرف خارجي",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "النطاقات المتصلة",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} من {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "نسخة",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "سكربت",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "إطار",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "إنشاء",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "اختار",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "خروج",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "معاينة",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "فلاتر الشبكة",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "فلاتر تجميلية",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "إضغط، إضغط مع Ctrl",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "إحجب العنصر...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "اخفاء مكان العناصر المحجوبه",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "عرض عدد طلبات المحضوره على الايقونه",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "تعطيل التلميحات",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "إستخدم لائحة السياق في المكان المناسب",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "وضع عمى الألوان",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "مظهر",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "المظاهر",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "لون التمييز المخصص",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "تفعيل دعم سحابة التخزين",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "أنا مستخدم ذو خبرة (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>قراءة إجبارية</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "تعطيل الجلب المسبق على الشبكة (لمنع أي اتصال لطلبات الشبكة المحجوبة)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "تعطيل مراجعة الروابط التشعبية",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "منع WebRTC من كشف عنوان الـ IP المحلي",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "السلوك الإفتراضي",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "هذه السلوكيات الإفتراضية يمكن إستبدالها في كل حالة",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "تعطيل الفلترة التجميلية",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "احجب عناصر الوسائط الأكبر من {{input}} كيلو بايت",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "منع الخطوط البعيدة",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "تعطيل الجافا سكريبت",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "حظر تقارير الـ CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "فك الأسماء المتعارف عليها",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "متقدم",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "ميزات مناسبة فقط للمستخدمين التقنيين",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "الإعدادات المتقدمة",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "آخر إسترجاع:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "آخر نسخ إحتياطي:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} من فلاتر الشبكه + {{cosmeticFilterCount}} فلاتر تجميليه:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} تم استعماله من {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "تحديث تلقائي للستات الفلاتر",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "حدث الان",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "نظف جميع المخابئ",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "تحليل وتطبيق فلاتر التجميليه",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "الفلاتر التجميلية تعمل لإزالة العناصر في صفحة الويب التي تعتبر إزعاج بصريًا و تلك التي لا يمكن حجبها عن طريق محركات التصفية القائمة على طلبات الشبكة.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "تجاهل الفلاتر التجميلية العامة",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "الفلاتر التجميلية العمومية هي الفلاتر التجميلية التي تنطبق على كل مواقع الإنترنت. تفعيل هذا الخيار سوف يترك مساحة أقل من الذاكرة و قوة المعالجة للإستعمال من قبل صفحات الويب كنتيجة لمعالجة الفلاتر التجميلية العمومية.\n\nمن الأفضل تفعيل هذا الخيار على الأجهزة الأقل قوة.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "تعليق نشاط الشبكة حتى يتم تحميل كافة قوائم عوامل التصفية",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "قائمة المواقع المحجوبة",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "حفظ التغيرات",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "مدمج",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "اعلانات",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "خصوصيه",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "مواقع مصابة أو تحتوي على فايروسات",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "عناصر مزعجة",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "متعددة الأغراض",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "المناطق واللغات",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "مخصصه",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "إسترجاع...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "رابط واحد في كل سطر. الروابط الغير الصحيحة سوف يتم تجاهلها بصمت.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "متقادم.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "اظهر المحتوى",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "آخر تحديث: {{ago}}. \nانقر لفرض التحديث.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "جار التحديث...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "حدث خطأ في الشبكة منع تحديث المورد.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "فلتر واحد في كل سطر. يمكن ان يكون الفلتر رابط موقع او فلتر متوافق مع EasyList-compatible. السطور المسبوقة بـ<code>!</code> سوف يتم تجاهلها.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "لا تضف مرشحات من مصادر غير موثوقة.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "استيراد و إضافة",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "تصدير",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "حفظ التغيرات",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "قواعد دائمة",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "قواعد مؤقتة",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "إلغاء",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "تطبق",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "تعديل",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "حفظ",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "إلغاء",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "الاستيراد من ملف...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "تصدير إلى ملف",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "قائمة قواعد الفلترات الديناميكية الخاصة بك.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "صياغة القواعد: <code>مصدر نوع وجهة العمل</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>تعليمات كاملة</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "الفرز:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "نوع القاعدة",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "المصدر",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "الوجهة",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "تحدد توجيهات الموقع الموثوق به صفحات الويب التي يجب تعطيل uBlock Origin عليها.\nأدخل رابط واحد كل سطر. ",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "استيراد و إضافة",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "تصدير",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-whitelist_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "حفظ التغيرات",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "النوع",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "الموقع",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "رابط الموقع",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "فلتر",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "كل",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "بلا تبويب",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "علامة التبويب الحالية",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "إعادة تحميل محتوى علامة التبويب",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "تفعيل أو تعطيل مراقب DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "تفعيل أو تعطيل اللوحة المنبثقة",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "ويكي يو بلوك أوريجين: حافظ السجلات",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "امسح السجلات",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "ايقاف التسجيل مؤقتا (استبعاد كل البيانات الواردة) ",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "استىئناف حافظ السجلات",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "تبديل ترشيح بيانات التسجيل ",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "رشّح محتوى السجل",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "خيارات التصفية للمسجّل",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "ليس",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "محظور",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "مسموح",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "معدّل",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "أول طرف ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "ثالث-طرف ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "تفاصيل",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "فلتر",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "قائمة الفلتر",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "قاعدة",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "السياق",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "سياق الجدر",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "عديمة الطرف",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "النوع",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "قاعدة URL",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "حالة:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "نوع:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "فلتر ثابت",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} طلبات شبكة {{type}} {{br}}اللتي تحتوي عنوان الرابط {{url}} {{br}}من المصدر {{origin}},{{br}}{{importance}} هناك فلتر استثناء مطابق.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "حجب",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "سماح",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "نوع “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "أي نوع",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "من “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "من أي مكان",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "باستثناء إذا",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "حتى لو",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "فلتر ثابت <code>{{filter}}</code> موجود في:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "الفلتر الثابت لا يوجد في أي من قوائم الفلاتر المفعلة",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "مدخلات السجل التي لا تطابق أيا من المعايير ستحذف تلقائيا:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "أبق على المدخلات في آخر {{input}} دقيقة",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "أبقِ بحد أقصى على {{input}} تحميلات للصفحة في كل لسان",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "أبق بحد أقصى على {{input}} مدخلات في كل تبويبة",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "استخدم {{input}} من السطور لكل مدخلة في الوضع الرأسي",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "أخفِ الأعمدة:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} الوقت",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} المرشِّح\\القاعدة",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} السياق",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} الجهة",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "قائمة",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "جدول",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "واضح",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "افتح",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "إنشاء تقرير جديد",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "العثور على تقارير مماثلة",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "وثائق",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "اقرأ الوثائق على <code>uBlock/wiki</code> للتعرف على جميع ميزات يو بلوك أوريجين.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "الأسئلة والدعم",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "يتم توفير إجابات للأسئلة وأنواع أخرى من دعم المساعدة على subreddit <code>/r/uBlockOrigin</code>",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "تصفية المسائل/موقع الويب معطل",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "الإبلاغ عن مشكلات التصفية في مواقع ويب محددة لـ <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> أداة تعقب المشكلات</span>. يتطلب حساب GitHub..",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>هام:</b> تجنب استخدام أدوات الحظر الأخرى ذات الغرض المشابه مع يو بلوك أوريجين، حيث قد يتسبب ذلك في حدوث مشكلات في التصفية على مواقع ويب معينة.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>نصائح:</b> تأكد من تحديث قوائم التصفية. <span data-url=\"logger-ui.html#_\">المُسجِّل</span> هو الأداة الأساسية لتشخيص المشكلات المتعلقة بالفلتر",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "تقرير الأخطاء",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "الإبلاغ عن المشكلات المتعلقة بيو بلوك أوريجين نفسه إلى <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> أداة تعقب المشكلات</span>. يتطلب حساب GitHub.",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "رأس قسم \"معلومات استكشاف الأخطاء وإصلاحها\" في جزء الدعم",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "فيما يلي معلومات فنية قد تكون مفيدة عندما يحاول المتطوعون مساعدتك في حل مشكلة ما.فيما يلي معلومات فنية قد تكون مفيدة عندما يحاول المتطوعون مساعدتك في حل مشكلة ما.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>هام:</b> يتم تنقيح المعلومات التي يُحتمل أن تكون خاصة أو حساسة بشكل افتراضي. المعلومات المنقحة قد تجعل حل مشكلة ما أكثر صعوبة.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "الإبلاغ عن مشكلة في عوامل التصفية",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "لتجنب إثقال كاهل المتطوعين بتقارير مكررة، يرجى التحقق من عدم الإبلاغ عن المشكلة بالفعل.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "يتم تحديث قوائم الفلتر بشكل يومي. تحقق أن مشكلتك لم يتم مواجهتها في أحدث قوائم الفلتر",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "تحقق من أن المشكلة ما تزال موجودة بعد إعادة تحميل صفحة الويب التي بها إشكالية.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "عنوان صفحة الويب:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "صفحة الويب...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- إختر خيارًا --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "ٌيُظهر الإعلانات أو بقايا الإعلانات",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "به تراكبات أو مضايقات أخرى",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "يكتشف يو بلوك أوريجين",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "لديه مشاكل متعلقة بالخصوصية",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "الأعطال عند تمكين يو بلوك أوريجين",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "افتح التبويبات أو النوافذ التي ليس مرغوبًا بها",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "تسمية صفحة الويب باسم \"NSFW\" (<a href=\"https://ar.wikipedia.org/wiki/%D8%BA%D9%8A%D8%B1_%D9%85%D9%86%D8%A7%D8%B3%D8%A8_%D9%84%D9%84%D8%B9%D9%85%D9%84\">\"ليس آمن للعمل\"\n",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "تنقيح",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "غير منقح",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "سياسة الخصوصية",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "سجل التغييرات",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "اكواد البرنامج (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "المساهمين",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "شيفرة المصدر",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "الترجمات",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "القوائم المرشحة",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "الإعتماديات الخارجية (متوافقة مع GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "يتم استضافة قوائم عوامل التصفية الخاصة بـ uBO بحرية على ما يلي <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "يتم استخدام CDN الذي تم اختياره عشوائيًا عند الحاجة إلى تحديث قائمة عوامل التصفية",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "النسخ الإحتياطي إلى ملف",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "إحتياط-ublock-الخاص-بي_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "إسترجع من الملف...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "إعادة الضبط للوضع الافتراضي...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "كل إعداداتك سوف يتم كتابتها بإستعمال البيانات التي تم نسخها إحتياطيا على {{time}}، و سيعيد uBlock₀ التشغيل.\n\nأعد كتابة كل الإعدادات الموجود بإستخدام البيانات التي تم نسخها إحتياطيا؟",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "تعذر قراءة البيانات أو إنها غير صالحة",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "كل إعداداتك سيتم إلغائها، و سيتم إعادة تشغيل \"uBlock₀\".\n\n\nإعادة ضبط \"uBlock₀\" على الإعدادات الأصلية؟",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "خطأ في الشبكة: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "µBlock : أضف الرابط التالي لقائمة الفلترة الخاصة بك؟\n\nعنوان : \"{{title}}\"\nرابط : {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "اشترك",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "منذ دقيقة",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "منذ {{value}} دقائق",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "منذ ساعة",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "منذ {{value}} ساعات",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "قبل يوم واحد",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "منذ {{value}} أيام",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "عرض لوحة التحكم",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "عرض سجل الإتصال بالشبكة",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "تعطيل",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "الصفحة محجوبة",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock₀ منع الصفحة التالية من التحميل:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "بسبب الفلتر التالي",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "دون معلمات",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "موجود في:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "العودة للخلف",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "أغلق هذه النافذة",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "لا تحذرني لهذا الموقع مرة أخرى",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "تعطيل الحجب الصارم على {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "مؤقتا",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "بشكل دائم",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "تقدّم",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "التصدير إلى سحابة التخزين",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "إستيراد من سحابة التخزين",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "إستيراد التخزين من السحابية و دمجه مع الإعدادات الحالية",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "إسم هذا الجهاز:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "تحذير! تغيير هذه الإعدادات المتقدمة يكون على مسؤوليتك.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "تطبيق",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "حفظ التغييرات",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "إلغاء",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "بايت",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "احظر العنصر في البرواز...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "اشترك في قائمة التصفية ...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "السماح مؤقتا لعناصر الوسائط كبيرة",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "عرض المصدر…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "ادخل اختصار",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "بدل حالة التمرير الموصَد",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "نسخ إلى الحافظة",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "اختر الكل",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "تبديل تصفية مستحضرات التجميل",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "وضع الحظر المتراخي",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "مساحة التخزين المستخدمة: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "كيلو بايت",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "ميغا بايت",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "جيغا بايت",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "اضغط للتحميل",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "أخطاء: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "لا يمكن الفلترة بشكل صحيح عند تشغيل المتصفح.\nقم بتحديث الصفحة للتأكد من الفلترة بشكل صحيح.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "يجب أن يكون هذا الإدخال آخر واحد",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/az/messages.json b/src/_locales/az/messages.json
new file mode 100644
index 0000000..e712582
--- /dev/null
+++ b/src/_locales/az/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Axır ki, prosessor və yaddaş yükünü azaldan səmərəli bir əngəlləyici var.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — İdarəetmə paneli",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Xəbərdarlıq! Saxlamadığınız dəyişikliklər var",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Qal",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Əhəmiyyət vermə",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Tənzimləmələr",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filtr siyahıları",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Filtrlərim",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Qaydalarım",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Etibarlı saytlar",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Qısayollar",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Jurnal",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Haqqında",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Dəstək",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Resurslar",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Qabaqcıl tənzimləmələr",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Klikləmə: Bu sayt üçün uBlock₀-u fəallaşdır/sıradan çıxart.\n\nCtrl+klikləmə: Yalnız bu səhifə üçün uBlock₀-u sıradan çıxart.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Bu sayt üçün uBlock₀-u sıradan çıxartmaq üçün klikləyin.\n\nYalnız bu səhifə üçün uBlock₀-u sıradan çıxartmaq üçün Ctrl+klikləyin.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Bu saytda uBlock₀-u fəallaşdırmaq üçün klikləyin.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "tələb(request) bloklandı",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "bu səhifədə",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} və ya {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "quraşdırmadan bəri",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "və ya",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Bu səhifədə əngəllənən",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Quraşdırmadan bəri əngəllənən",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Bağlantı qurulmuş domenlər",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "İdarəetmə panelini aç",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Element silmə rejiminə keç",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Element seçmə rejiminə keç",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Jurnalı aç",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Bu veb-saytdakı problemi bildir",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Bu sayt üçün bütün açılan pəncələri aç/bağla",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Bu saytda bütün açılan pəncərələri əngəlləmək üçün kliklə",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Bu saytdakı bütün açılan pəncələri artıq əngəlləməmək üçün kliklə",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Bu saytda böyük media elemetlərini əngəlləməyi aç/bağla",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Bu saytda böyük media elementlərini əngəlləmək üçün düyməyə basın",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Bu saytda böyük media elementlərini daha əngəlləməmək üçün düyməyə basın",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Bu saytda kosmetik filtrləri qoş/söndür",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Bu saytda kosmetik filtrləri söndürmək üçün düyməyə basın",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Bu saytda kosmetik filtrləri qoşmaq üçün düyməyə basın",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Bu saytda uzaqdan idarə olunan şriftləri qoş/söndür",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Bu saytda uzaqdan idarə olunan şriftləri əngəlləmək üçün düyməyə basın",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Bu saytda uzaqdan idarə olunan şriftləri daha əngəlləməmək üçün düyməyə basın",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Bu saytda JavaScript-i sıradan çıxartmaq üçün kliklə",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Bu saytda JavaScript-i artıq əngəlləməmək üçün düyməyə basın",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Peyda olan pəncərələr",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Böyük ölçülü media elementləri",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Kosmetik filtrləmə",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Kənar şriftlər",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Daha çox",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Daha az",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Qlobal qaydalar: bu sütun bütün saytlarda tətbiq olunan qaydalar üçündür.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Lokal qaydalar: bu sütun yalnız bu saytda tətbiq olunan qaydalar üçündür.\nLokal qaydalar qlobal qaydalardan üstün tutulur.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Dəyişiklikləri daimi etmək üçün klikləyin.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Dəyişiklikləri geri qaytarmaq üçün düyməyə basın.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "hamısı",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "təsvirlər",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "3-cü tərəf",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "3-cü tərəf CSS/təsvirlər",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "sətiriçi skriptlər",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1-ci tərəf skriptlər",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "3-cü tərəf skriptlər",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "3-cü tərəf frame-lər",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "qoşulmuş domen",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} / {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Versiya",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "skript",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "çərçivə",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Yarat",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Seç",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Çıxış",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Önbaxış",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Şəbəkə filtrləri",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Kosmetik filtrlər",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Klik, Ctrl-klik",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Elementi əngəllə...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Əngəllənmiş elementlərin tutduğu yeri gizlə",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Əngəllənən tələb sayını nişan üstündə göstər",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Alət izahlarını söndür",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Uyğun olduqda kontekst menüsündən istifadə et",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Rəng seçmə qabiliyyəti olmayanlar üçün rəngləmə rejimi",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Görünüş",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Mövzu",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Xüsusi vurğu rəngi",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Bulud yaddaşı dəstəyini işə sal",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Mən təcrübəli istifadəçiyəm (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>mütləq oxuyun</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Erkən yükləməni dayandır (əngəllənmiş şəbəkə sorğuları üzrə qoşulmalara yol verməmək üçün)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Hiperkeçidlərin yoxlanılmasını dayandır",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Lokal IP-ünvanların WebRTC vasitəsilə sızmasını əngəllə",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Standart davranış",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Bu standart parametrlər hər bir sayt üçün ayrıca qeyd oluna bilər",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Kosmetik filtrləri söndür",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "{{input}} KB-dan artıq olan media elementlərini əngəllə",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Uzaqdan idarə olunan şriftləri əngəllə",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "JavaScript-i Əngəllə",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "CSP hesabatlarını əngəllə",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Canonical adları ortaya çıxarın",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Təkmil",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Yalnız texniki istifadəçilərə uyğun parametrlər",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "əlavə parametrlər",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Son bərpa əməliyyatının tarixi:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Son ehtiyat nüsxəsinin tarixi:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} şəbəkə filtri + {{cosmeticFilterCount}} kosmetik filtr:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{total}} ədəddən {{used}} ədədi istifadə olundu",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Filtr siyahılarını avtomatik yenilə",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Yenilə",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Bütün keşləri sil",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Kosmetik filtrləri təhlil və tətbiq et",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Kosmetik filtrlər bir veb səhifəsində görüntü rahatsızlığına səbəb olan və şəbəkə sorğularının filtrlənməsi vasitəsilə əngəllənə bilməyən elementləri gizlətmək üçün istifadə olunur.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ümumi kosmetik filtrləri nəzərə alma",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Ümumi kosmetik filtrlərin bütün veb-saytlarda istifadəsi nəzərdə tutulur. Bu seçimi etdiyiniz təqdirdə veb-səhifələrdə ümumi kosmetik filtrlərin işlənməsi ilə əlaqədar yaddaşdan istifadə və prosessor yükü azalacaq.\n\nAz güclü cihazlarda bu seçimin aktivləşdirilməsi tövsiyə olunur.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Filter siyahıları yüklənənə kimi şəbəkə fəaliyyətini dayandır",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Dəyişiklikləri tətbiq et",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Lokal filtrlər",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Reklam",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Məxfilik",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Zərərli domenlər",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Zəhlətökən elementlər əleyhinə filtrlər",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Çoxməqsədli filtrlər",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Bölgələr, dillər",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Fərdi",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Əlavə et...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Hər sətrdə yalnız bir URL. Yanlış URL-lər xəbərdarlıq edilmədən nəzərə alınmayacaq.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Köhnəlmişdir.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "məzmunu nəzərdən keçir",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Sonuncu yeniləmə: {{ago}}.\nYeniləmək üçün düyməyə basın.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Yenilənir...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Şəbəkə xətası üzündən yeniləmə mümkün olmadı.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Hər sətirdə yalnız bir filtr. Bu, ya domen adı, ya da Adblock Plus formatında yazılmış filtr ola bilər. Əvvəli <code>!</code> ilə başlayan sətirlər nəzərə alınmayacaqdır.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Etibarsız mənbələrdən filtrlər əlavə etməyin.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "İdxal və əlavə et",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "İxrac et",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Dəyişiklikləri tətbiq et",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Daimi qaydalar",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Müvəqqəti qaydalar",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Geri qaytar",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Təsdiq et",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Redaktə",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Yadda saxla",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Nəzərə alma",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Fayldan götür...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Fayla yaz",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Dinamik filtr qaydalarınızın siyahısı.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Qaydalar sintaksisi: <code>mənbə təyinat növ əməliyyat</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>bütün sənədlər</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sırala:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Qayda növü",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Mənbə",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Hədəf",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "İstisnalar siyahısındakı təlimatlar uBlock Origin-in hansı veb-səhifələrdə işləyişinin dayandırılmasını təmin edir. Hər sətirdə yalnız bir təlimat ola bilər. Yanlış təlimatlar xəbərdarlıq edilmədən nəzərə alınmayacaq və şərhə çeviriləcəkdir.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "İdxal və əlavə et",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "İxrac et",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-whitelist_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Dəyişiklikləri tətbiq et",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Növü",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domen",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filtr",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Hamısı",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Tabsız",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Cari tab vərəqi",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Tab vərəqinin məzmununu yenidən yüklə",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "DOM müfəttişini işə sal/söndür",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Peyda olan paneli aç/bağla",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin viki: Logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Loggeri təmizlə",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Loggeri dayandır (daxil olan bütün məlumatları rədd et)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Loggeri yenidən işə sal",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Logger filtrləməsini işə sal/dayandır",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "logger qeydlərinin filtrlənməsi",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Logger üçün filtrləmə parametrləri",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Deyil",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "əngəllənmiş",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "icazə verilmiş",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "dəyişdirildi",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1-ci tərəf resurslar",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3-cü tərəf resurslar",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Təfsilatlar",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filtr",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filtr siyahısı",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Qayda",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Məzmun",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Ana məzmun",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Tərəf",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Növü",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL qaydası",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Məzmun:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Növ:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Statik filtr",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "Müvafiq istisna filtri varsa {{importance}},{{br}}URL ünvanı {{url}} {{br}}ilə eyni olan və mənbəyi {{origin}} {{br}}olan {{type}} növlü şəbəkə sorğularını {{action}}.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Əngəllə",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "İcazə ver",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "“{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "istənilən növ",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "“{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "istənilən yerdən",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "halından savayı",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "əgər hətta",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "<code>{{filter}}</code> statik filtrinin mənbəyi:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Statik filtr hal-hazırda aktiv olan filtr siyahılarının heç birində tapılmadı",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Üç şərtin hamısına cavab erməyən aşağıdakı logger qeydləri avtomatik olaraq rədd ediləcək:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Son {{input}} dəq. ərzində edilmiş qeydləri saxla",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Hər tab vərəqi üzrə ən çox {{input}} səh. yükləməsini saxla",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Hər tab vərəqi üzrə ən çox {{input}} qeyd saxla",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Şaquli genişləndirilmiş rejimdə hər qeyd üçün {{input}} sətir istifadə et",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Sütunları gizlə:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Vaxt",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filtr/Qayda",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Məzmun",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Tərəf",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Siyahı",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Cədvəl",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Sadə",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Nişanlı",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Aç",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Yeni hesabat yaradın",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Oxşar hesabat tap",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentasiya",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "UBlock Origin-in bütün xüsusiyyətlərini öyrənmək üçün <code>uBlock/wiki</code> ünvanında sənədləri oxuyun.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Suallar və dəstək",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Suallara və yardım dəstəyinin digər növlərinə cavablar <code>/r/uBlock Origin</Code > - də təqdim olunur.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter problemləri / vebsəhifə işləmir",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Müəyyən vebsaytların filtr problemlərini <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> problem izləyicisinə</span> bildirin. <u>GitHub hesabı tələb edir.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Vacib:</b> uBlock Origin-lə yanaşı, oxşar bloklayıcı genişləndirmələrin istifadəsindən çəkinin. Əks halda bəzi veb-saytlarda filtr problemləri ilə üzləşə bilərsiniz.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>İpuçları:</b> Filtr siyahınızın yenilənmiş olduğundan əmin olun. <span data-url=\"logger-ui.html#_\">Qeydiyyatçı</span>, filtrlərlə bağlı problemləri müəyyənləşdirmək üçün başlıca vasitədir.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Xəta bildirişi",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "uBlock Origin-lə bağlı problemləri <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> problem izləyicisinə</span> bildirin. <u>Github hesabı tələb edir.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Problemlərin Həlli",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Aşağıdaki könüllülər sizə probleminizi aradan qaldırmağa çalışırkən faydalı ola biləcək texniki məlumatdır.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Vacib:</b> Gizli və həssas ola biləcək məlumatlar defolt olaraq qısaldılır. Qısaldılmış məlumatlar, bir problemi aradan qaldırmağı çətinləşdirə bilər.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Filter problemini bildir",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Könüllülərə eyni hesabatların narahatçılıq verməməsi üçün, xahiş olunur problemin əvvəlcədən bildirilmədiyinə əmin olun.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filtr siyahıları hər gün yenilənir. Probleminizin ən son filtr siyahılarında həll edilmədiyinə əmin olun.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Problemli veb-səhifəni yenidən yüklədikdən sonra problemin hələ də qaldığından əmin olun.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Veb-səhifənin ünvanı:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Səhifə...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Bir daxiletmə seçin --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Reklam və ya reklam qalıqları göstərir",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Üst-üstə düşmə və ya digər nasazlıqları var",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "uBlock Origin-i aşkarlayır",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Məxfiliklə bağlı problemləri var",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "uBlock Origin aktiv ikən xarab olur",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Arzuolunmaz tab-vərəqələr və ya pəncərələr açır",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Veb-səhifəni uyğun olmayan (“NSFW”) olaraq işarələ (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Məxfilik siyasəti",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Dəyişikliklər siyahısı",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Mənbə kodu (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Layihəyə töhfə verənlər",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Mənbə kodu",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Tərcümələr",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filtr siyahıları",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Xarici asılılıqlar (GPLv3-uyumlu):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO-nun öz filtr siyahıları ödənişsiz şəkildə bu <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN-lərdə</a> yerləşdirilib:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Bir filtr siyahısının yenilənməsi lazım olduqda təsadüfi seçilən bir CDN istifadə olunur",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Fayla yaz",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Fayldan bərpa et...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Standart parametrləri yüklə...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Bütün parametrləriniz {{time}} tarixində yadda saxlanılmış məlumatlarla əvəz olunacaq və uBlock₀ yenidən başladılacaq.\n\nBütün cari parametrlər ehtiyat nüsxəsindəki məlumatlarla əvəz olunsun?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Məlumat oxunmur yaxud xətalıdır",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Bütün parametrləriniz silinəcək və uBlock₀ yenidən başladılacaq.\n\nuBlock₀ standart parametrlərə qaytarılsın?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Şəbəkə xətası: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: Aşağıdakı URL ünvanı fərdi filtr siyahılarınıza əlavə edilsin?\n\nAdı: \"{{title}}\"\nURL ünvanı: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Abunə ol",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "bir dəqiqə əvvəl",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} dəq. əvvəl",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "bir saat əvvəl",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} saat əvvəl",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "bir gün əvvəl",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} gün əvvəl",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "İdarəetmə panelini göstər",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Loggeri göstər",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "işləmir",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Səhifə əngəlləndi",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin bu səhifənin yüklənməsini əngəllədi:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Bu filtrə görə",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "parametrsiz",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Mənbə:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Geriyə qayıt",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Bu pəncərəni bağla",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Bu sayt barədə məni xəbərdar etmə",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "{{hostname}} üçün sərt əngəlləməni dayandır",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Müvəqqəti",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Daimi",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Davam et",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Bulud yaddaşa göndər",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Bulud yaddaşdan götür",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Bulud yaddaşdan götür və cari parametrlərlə birləşdir",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Bu cihazın adı:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Diqqət! Bu əlavə parametrlərdəki dəyişikliklərə görə siz məsuliyyət daşıyırsınız.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Təsdiqlə",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Dəyişiklikləri tətbiq et",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Geri qaytar",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bayt",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Çərçivədəki elementi əngəllə",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Filter siyahısına abunə ol",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Böyük media elementlərinin yüklənməsinə müvəqqəti icazə ver",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Mənbə kodunu nəzərdən keçir...",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Qısayol yaz",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Məhdud sürüşdürməni işə sal/dayandır",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Lövhəyə kopyala",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Hamısını seç",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Kozmetik filtrləməni yandır/söndür",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Əngəlləmə rejimini yüngülləşdir",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "İstifadə olunan anbar: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Yükləmək üçün düyməyə bas",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Xətalar: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Brauzer açılışında filtrləmə düzgün alınmadı. Düzgün filtrləməni təmin etmək üçün səhifəni yenidən yükləyin.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/be/messages.json b/src/_locales/be/messages.json
new file mode 100644
index 0000000..52ee835
--- /dev/null
+++ b/src/_locales/be/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Нарэшце, эфектыўны блакавальнік. Не нагружае працэсар і памяць.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Панэль кіравання",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Увага! Ёсць незахаваныя змены",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Застацца",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Iгнараваць",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Налады",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Спісы фільтраў",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Мае фільтры",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Мае правілы",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Давераныя сайты",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Спалучэнні клавіш",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Журнал сеткавых запытаў",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Пра пашырэнне",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Падтрымка",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Прагляд рэсурсаў",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Пашыраныя налады",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Націсканне: адключыць/уключыць uBlock₀ для гэтага сайта.\n\nCtrl+націсканне: адключыць uBlock₀ толькі на гэтай старонцы.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Націсніце, каб адключыць uBlock₀ для гэтага сайта.\n\nНацісніце з Ctrl, каб адключыць uBlock₀ толькі на гэтай старонцы.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Націсніце, каб уключыць uBlock₀ для гэтага сайта.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "запытаў заблакавана",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "на гэтай старонцы",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "з моманту ўсталявання",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "або",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Заблакавана на гэтай старонцы",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Заблакавана з моманту ўсталявання",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Даменаў падлучана",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Адкрыць панэль кіравання",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Перайсці ў рэжым імгненнага хавання элементаў",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Перайсці ў рэжым выбару элементаў",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Адкрыць журнал запытаў",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Паведаміць аб праблеме з сайтам",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Пераключыць блакаванне ўсіх выплыўных акон на гэтым сайце",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Націсніце, каб блакаваць усе выплыўныя вокны на гэтым сайце",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Націсніце, каб выключыць блакаванне ўсіх выплыўных акон на гэтым сайце",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Пераключыць блакаванне вялікіх медыя-элементаў на гэтым сайце",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Націсніце, каб блакаваць вялікія медыя-элементы на гэтым сайце",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Націсніце, каб выключыць блакаванне вялікіх медыя-элементаў на гэтым сайце",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Пераключыць касметычнае фільтраванне на гэтым сайце",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Націсніце, каб выключыць касметычнае фільтраванне на гэтым сайце",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Націсніце, каб уключыць касметычнае фільтраванне на гэтым сайце",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Пераключыць блакаванне аддаленых шрыфтоў на гэтым сайце",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Націсніце, каб блакаваць аддаленыя шрыфты на гэтым сайце",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Націсніце, каб выключыць блакаванне аддаленых шрыфтоў на гэтым сайце",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Націсніце, каб выключыць JavaScript на гэтым сайце",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Націсніце, каб JavaScript не быў выключаны на гэтым сайце",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Выплыўныя вокны",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Вялікія медыя-элементы",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Касметычнае фільтраванне",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Аддаленыя шрыфты",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Больш",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Менш",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Глабальныя правілы: гэты слупок для правіл, якія прымяняюцца на ўсіх сайтах.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Лакальныя правілы: гэты слупок для правіл, якія прымяняюцца толькі на гэтым сайце.\nЛакальныя правілы перавызначаюць глабальныя.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Націсніце, каб захаваць змены.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Націсніце, каб скасаваць змены.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "усе",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "відарысы",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "староннія",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "староннія CSS/відарысы",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "убудаваныя скрыпты",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "уласныя скрыпты",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "староннія скрыпты",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "староннія рамкі",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "даменаў падлучана",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} з {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Версія",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "скрыпт",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "рамка",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Стварыць",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Выбраць",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Выйсці",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Папярэдні прагляд",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Сеткавыя фільтры",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Касметычныя фільтры",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Клік, Ctrl-клік",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Блакаваць элемент…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Хаваць контуры заблакаваных элементаў",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Паказваць колькасць заблакаваных запытаў на значцы",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Адключыць выплыўныя падказкі",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Выкарыстоўваць кантэкстнае меню, дзе магчыма",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Колеравая схема для дальтонікаў",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Выгляд",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Тэма",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Уласны колеравы акцэнт",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Уключыць падтрымку воблачнага сховішча",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Я — дасведчаны карыстальнік",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Адключыць папярэднюю загрузку (каб прадухіліць злучэнне для заблакаваных сеткавых запытаў)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Выключыць праверку гіперспасылак",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Прадухіліць уцечку лакальнага IP-адраса праз WebRTC",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Прадвызначаныя паводзіны",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Гэтыя налады могуць быць перавызначаныя для кожнага сайта асобна",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Выключыць касметычныя фільтры",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Блакаваць медыя-элементы большыя за {{input}} КБ",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Блакаваць аддаленыя шрыфты",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Адключыць JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Блакаваць справаздачы CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Раскрываць CNAME назвы",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Пашыраныя налады",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Функцыі, патрэбныя толькі тэхнічным карыстальнікам",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "пашыраныя налады",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Апошняе аднаўленне:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Апошняя рэзервовая копія:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} сеткавых фільтраў + {{cosmeticFilterCount}} касметычных фільтраў з:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} выкарыстана з {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Аўтаматычна абнаўляць спісы фільтраў",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Абнавіць зараз",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Ачысціць усе кэшы",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Разбіраць і прымяняць касметычныя фільтры",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Касметычныя фільтры служаць для хавання элементаў вэб-старонак, якія ствараюць візуальныя нязручнасці, і якія не могуць быць заблакаваныя сродкамі фільтравання сеткавых запытаў.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ігнараваць агульныя касметычныя фільтры",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Агульныя касметычныя фільтры — гэта тыя касметычныя фільтры, якія прызначаны для прымянення на ўсіх вэб-сайтах. Уключэнне гэтай налады знізіць спажыванне памяці і працэсара, дададзенае да вэб-старонак у выніку працы агульных касметычных фільтраў.\n\nРэкамендуецца ўключыць гэту наладу на менш магутных прыладах.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Прыпыніць сеткавую актыўнасць, пакуль не пагрузяцца ўсе спісы фільтраў",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Ужыць змяненні",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Убудаваныя",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Рэклама",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Прыватнасць",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Дамены шкодных праграм",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Надакучлівасці",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Шматмэтавыя",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Рэгіёны, мовы",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Карыстальніцкія",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Імпартаваць…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Адзін URL на радок. Няспраўныя URL-адрасы будуць праігнараваныя.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Неактуальны.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "паглядзець змест",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Апошняе абнаўленне: {{ago}}.\nНацісніце для прымусовага абнаўлення.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Абнаўляецца…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Памылка сеткі не дазволіла абнавіць рэсурс.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Адзін фільтр на радок. Фільтрам можа быць адрас сайта або сумяшчальны з EasyList фільтр. Радкі, што пачынаюцца з <code>!</code>, будуць праігнараваны.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Не дадавайце фільтры з крыніц, якім не давяраеце.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Імпартаваць і дадаць",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Экспартаваць",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Ужыць змяненні",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Пастаянныя правілы",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Часовыя правілы",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Вярнуць",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Зацвердзіць",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Змяніць",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Захаваць",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Адкінуць",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Імпартаваць з файла…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Экспартаваць у файл",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Спіс вашых правіл дынамічнага фільтравання.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Сінтаксіс правіл: <code>крыніца прызначэнне тып дзеянне</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>поўная дакументацыя</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Сартаванне:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Тып правіла",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Крыніца",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Прызначэнне",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Дырэктывы давераных сайтаў указваюць, на якіх вэб-старонках uBlock Origin павінен быць выключаны. Адзін запіс на радок.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Імпартаваць і дадаць",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Экспартаваць",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Ужыць змяненні",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Тып",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Дамен",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Фільтр",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Усе",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Па-за карткамі",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Дзейная картка",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Перазагрузіць змесціва карткі",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Пераключыць інспектар DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Пераключыць выплыўную панэль",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin вікі: Логер",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Ачысціць логер",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Паставіць логер на паўзу (адкідваць усе ўваходныя звесткі)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Зняць логер з паўзы",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Пераключыць фільтраванне логера",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "фільтраваць запісы логера",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Налады фільтравання логера",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Не",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "заблакаваны",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "дазволены",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "мадыфікаваны",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "асноўны",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "старонні",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Падрабязнасці",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Фільтр",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Спіс фільтраў",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Правіла",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Кантэкст",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Кантэкст кораня",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Старана",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Тып",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL-адрас",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL правіла",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Кантэкст:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Тып:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Статычны фільтр",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} сеткавыя запыты {{type}}, {{br}}URL-адрас якіх супадае з {{url}} {{br}}і паходзяць з {{origin}},{{br}}{{importance}} ёсць адпаведны фільтр-вынятак.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Блакаваць",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Дазволіць",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "тыпу “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "любы тып",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "з “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "з любога месца",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "акрамя выпадкаў, калі",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "нават калі",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Статычны фільтр <code>{{filter}}</code> знойдзены ў:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Статычны фільтр не знойдзены ні ў адным з уключаных зараз спісе фільтраў",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Запісы логера, якія не адпавядаюць усім тром дадзеным ніжэй умовам, будуць аўтаматычна адкінуты:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Захоўваць запісы за апошнія {{input}} хвілін",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Захоўваць не больш за {{input}} загрузак старонкі на картцы",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Захоўваць не больш за {{input}} запісаў на картку",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Выкарыстоўваць {{input}} радкоў на запіс пры вертыкальным пашырэнні",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Схаваць слупкі:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Час",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Фільтр/правіла",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Кантэкст",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Старана",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Спіс",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Табліца",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Просты",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Адкрыць",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Стварыць новую справаздачу",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Знайсці падобныя справаздачы",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Дакументацыя",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Прачытайце дакументацыю на <code>uBlock/wiki</code>, каб даведацца пра ўсе магчымасці uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Пытанні і падтрымка",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Адказы на пытанні і іншыя віды падтрымкі даступныя на сабрэддыце <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Праблемы з фільтрамі/няспраўны сайт",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Паведамляйце аб праблемах з фільтрамі на пэўных сайтах на <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\">трэкеры хібаў <code>uBlockOrigin/uAssets</code></span>. <u>Патрабуе ўліковы запіс GitHub.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Важна:</b> Пазбягайце выкарыстання іншых блакавальнікаў аналагічнага прызначэння разам з uBlock Origin, паколькі гэта можа прывесці да праблем з фільтрамі на пэўных сайтах.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Парада:</b> Упэўніцеся, што вашы спісы фільтраў абноўленыя. <span data-url=\"logger-ui.html#_\">Логер</span> — галоўны інструмент для дыягностыкі праблем, звязаных з фільтрамі.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Справаздача пра хібу",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Паведамляйце пра праблемы самога uBlock Origin на <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\">трэкеры хібаў <code>uBlockOrigin/uBlock-issue</code></span>. <u>Патрабуе ўліковы запіс GitHub.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Інфармацыя для выпраўлення непаладак",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Ніжэй - тэхнічная інфармацыя, што можа быць карысная добраахвотнікам, якія паспрабуюць дапамагчы вам вырашыць праблему.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Важна:</b> Патэнцыйна прыватная або адчувальная інфармацыя тыпова рэдагуецца. Адрэдагаваная інфармацыя можа зрабіць цяжэйшым вырашэнне праблемы.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Паведаміць аб праблеме з фільтрам",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Каб не абцяжарваць добраахвотнікаў дубляванымі справаздачамі, калі ласка, праверце, што пра гэтую праблему не паведамлялі раней.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Спісы фільтраў абнаўляюцца штодзённа. Упэўніцеся, што ваша праблема не была вырашана ў найноўшых спісах фільтраў.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Спраўдзіце, ці праблема ўсё яшчэ існуе пасля перазагрузкі праблемнай вэб-старонкі.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Адрас вэб-старонкі:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Вэб-старонка…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Выберыце катэгорыю --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Паказвае рэкламу або яе астачу",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Мае накладанні або іншыя недарэчнасці",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Выяўляе uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Праблемы, звязаныя з прыватнасцю",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Няспраўная, калі ўключаны uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Адкрывае непажаданыя карткі або вокны",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Пазначыць вэб-старонку як “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Палітыка прыватнасці",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Журнал змяненняў",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Зыходны код (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Удзельнікі",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Зыходны код",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Пераклады",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Спісы фільтраў",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Вонкавыя залежнасці (GPLv3-сумяшчальныя):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Уласныя спісы фільтраў uBO свабодна размяшчаюцца ў наступных сетках <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Калі спіс фільтраў патрабуе абнаўлення, выкарыстоўваецца выпадкова выбраная сетка CDN",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Стварыць рэзервовую копію…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Аднавіць з файла…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Скінуць на пачатковыя налады…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Усе вашы налады будуць заменены звесткамі з рэзервовай копіі, створанай {{time}}, затым uBlock₀ будзе перазапушчаны.\n\nПеразапісаць усе налады, выкарыстаўшы рэзервовую копію?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Звесткі немагчыма прачытаць або яны нядзейсныя",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Усе вашы налады будуць выдаленыя, uBlock₀ будзе перазапушчаны.\n\nСкінуць uBlock₀ да прадвызначаных налад?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Памылка сеткі: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Дадаць наступны URL-адрас да вашага спісу фільтраў?\n\nНазва: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Падпісацца",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "хвіліну таму",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} хвілін(ы) таму",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "гадзіну таму назад",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} гадзін(ы) таму",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "дзень таму",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} дні таму",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Паказаць панэль кіравання",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Паказаць логер",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "выключаны",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Старонка заблакавана",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin папярэдзіў чытанне наступнай старонкі:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "З-за наступнага фільтра",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "без параметраў",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Знойдзены ў:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Вярнуцца",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Закрыць гэта акно",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Не папярэджваць больш пра гэты сайт",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Выключыць строгае блакаванне для {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Часова",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Назаўжды",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Працягнуць",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Экспартаваць у воблачнае сховішча",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Імпартаваць з воблачнага сховішча",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Імпартаваць з воблачнага сховішча і аб'яднаць з дзейнымі наладамі",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Назва гэтай прылады:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Увага! Змяняйце гэтыя пашыраныя налады на ўласную рызыку.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Пацвердзіць",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Ужыць змяненні",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Вярнуць",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "байтаў",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Заблакаваць элемент у рамцы…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Падпісацца на спіс фільтраў…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Тымчасова дазволіць вялікія медыя-элементы",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Паглядзець зыходны код…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Упішыце спалучэнне",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Пераключыць агульную пракрутку",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Капіяваць у буфер абмену",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Абраць усе",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Пераключыць касметычнае фільтраванне",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Паслаблены рэжым блакавання",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Памер сховішча: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "КБ",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "МБ",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "ГБ",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Націсніце, каб загрузіць",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Памылак: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Немагчыма фільтраваць належным чынам пры запуску браўзера.\nАбнавіце старонку, каб забяспечыць належнае фільтраванне.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/bg/messages.json b/src/_locales/bg/messages.json
new file mode 100644
index 0000000..fd2b676
--- /dev/null
+++ b/src/_locales/bg/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Най-накрая, ефективен блокер. Щадящ процесора и паметта.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Табло",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Внимание! Има незапазени промени",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Оставане",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Игнориране",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Настройки",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Филтри",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Мои филтри",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Мои правила",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Доверени сайтове",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Клавишни комбинации",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Дневник",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Относно",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Поддръжка",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Активи",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Разширени настройки",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Щракване: изключва/включва uBlock₀ за този сайт.\n\nCtrl + щракване: изключва uBlock₀ само за тази страница.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Щракване: изключва uBlock₀ за този сайт.\n\nCtrl + щракване: изключва uBlock₀ само за тази страница.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Щракнете, за да включите uBlock₀ за този сайт.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "блокирани заявки",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "на тази страница",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} или {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "общо досега",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "или",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Блокирани на тази страница",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Блокирани общо досега",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Свързани домейни",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Табло с настройки",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Временно блокиране на отделен елемент",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Блокиране на отделен елемент",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Преглед на дневника със заявки",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Докладване на проблем с този уебсайт",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Превключване блокирането на всички изскачащи прозорци за този сайт",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Щракнете, за да блокирате всички изскачащи прозорци за този сайт",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Щракнете, за да разрешите всички изскачащи прозорци за този сайт",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Превключване блокирането на големи мултимедийни елементи за този сайт",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Щракнете, за да блокирате големите мултимедийни елементи за този сайт",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Щракнете, за да разрешите големите мултимедийни елементи за този сайт",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Превключване на козметичното филтриране за този сайт",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Щракнете, за да изключите козметичните филтри за този сайт",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Щракнете, за да включите козметичните филтри за този сайт",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Превключване блокирането на външни шрифтове за този сайт",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Щракнете, за да блокирате външните шрифтове за този сайт",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Щракнете, за да разрешите външните шрифтове за този сайт",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Щракнете, за да забраните JavaScript за този сайт",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Щракнете, за да разрешите JavaScript за този сайт",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Изкачащи прозорци",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Големи мултимедийни елементи",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Козметично филтриране",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Външни шрифтове",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Още",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "По-малко",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Глобални правила: колона с правила, приложими към всички сайтове.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Локални правила: колона с правила, приложими само към текущият сайт. Локалните правила заместват глобалните.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Щракнете, за да направите промените постоянни.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Щракнете, за да отмените направените промени.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "Всички",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "Изображения",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "3-ти страни",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/изображения от 3-ти страни",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "Вградени скриптове",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "Скриптове от 1-ви страни",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "Скриптове от 3-ти страни",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "Рамки от 3-ти страни",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "свързани домейни",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} от {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Версия",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "скрипт",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "рамка",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Създаване",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Нов избор",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Отказ",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Преглед",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Мрежови филтри",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Козметични филтри",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Щракване, Ctrl + щракване",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Блокиране на елемент…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Скриване подсказващите текстове на блокираните елементи",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Показване на брояч в иконката за блокираните заявки",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Изключване на поясненията",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Използване на контекстното меню, когато е възможно",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Достъпност за хора с нарушено цветоусещане",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Външен вид",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Тема",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Потребителски цвят на акцента",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Включване на поддръжка за съхранение в облак",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Аз съм опитен потребител",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Изключване на предварителното извличане (за избягване на всяка връзка за блокираните мрежови заявки)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Изключване на проверката за препратки",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Предотвратяване изтичането на локалния IP адрес през WebRTC",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Поведение по подразбиране",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Тези поведения по подразбиране могат да бъдат отменени за отделни сайтове",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Изключване на козметичното филтриране",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Блокиране на мултимедийни елементи, по-големи от {{input}} kB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Блокиране на външни шрифтове",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Забраняване на JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Блокиране на CSP отчетите",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Разкриване на каноничните имена",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Разширени",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Функции, подходящи само за технически грамотни потребители",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "разширени настройки",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Последно възстановяване:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Последно резервно копие:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} мрежови филтри + {{cosmeticFilterCount}} козметични филтри от:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "ползвани {{used}} от общо {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Автоматично обновяване на филтрите",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Обновяване",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Изчистване на кеш паметта",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Анализиране и прилагане на козметичните филтри",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Козметичните филтри служат за скриване на елементи в уебстраницата, които се считат за визуално неприятни и които не могат да бъдат блокирани от механизмите за филтриране, базирани на мрежови заявки.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Игнориране на общите козметични филтри",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Общокозметични са филтрите, предназначени за прилагане във всички сайтове. Разрешаването на тази опция ще премахне натоварването на паметта и процесора, добавено към уеб страниците в резултат на обработката на общите козметични филтри.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Преустановяване на мрежовата дейност, докато се заредят всички списъци с филтри",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Списъци на блокираните хостове",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Прилагане на промените",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Вградени",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Реклами",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Поверителност",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Защита от зловреден софтуер, сигурност",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Досадни неща",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Многоцелеви",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Региони, езици",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Потребителски",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Внасяне...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Един адрес на ред. Невалидните адреси ще бъдат игнорирани.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Остарял",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "Преглед на съдържанието",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Последно обновяване: {{ago}}.\nЩракнете за принудително обновяване.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Обновяване...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Грешка в мрежата възпрепятства обновяването на ресурса.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Един филтър на ред. Това може да бъде обикновен адрес или филтър, съвместим с EasyList. Редовете с представка <code>!</code> ще бъдат игнорирани.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Не добавяйте филтри от ненадеждни източници.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Внасяне и добавяне...",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Изнасяне...",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "ublock-мои-филтри_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Прилагане на промените",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Постоянни правила",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Временни правила",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Връщане",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Приемане",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Редактиране",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Запазване",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Отказ на промените",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Внасяне от файл...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Изнасяне във файл...",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "ublock-мои-правила_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Списък на динамичните правила за филтриране.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Синтаксис на правилото: <code>източник цел тип действие</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>пълна документация</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Сортиране:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Тип правило",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Източник",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Дестинация",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Указанията за доверени сайтове определят кои уеб страници трябва да бъдат изключени от uBlock Origin. По един запис на ред.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Внасяне и добавяне...",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Изнасяне...",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "ublock-доверени_сайтове_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Прилагане на промените",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Тип",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Домейн",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL адрес",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Филтър",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Всички",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Скрити",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Последно активен раздел",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Презареждане съдържанието на раздела",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Превключване на DOM инспектора",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Превключване на изскачащия панел",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: Дневникът със заявки",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Изчистване на заявките",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Пауза на заявките (отхвърляне на входящите данни)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Включване на заявките",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Превключване на филтрирането",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "филтриране на записи",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Опции за филтриране",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Изкл.",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "блокирани",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "позволени",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "променен",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1-ви страни",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3-ти страни",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Детайли",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Филтър",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Списък с филтри",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Правило",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Контекст",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Основен контекст",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Страна",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Тип",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "Адрес",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Правило за адрес",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Контекст:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Тип:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Статично филтриране",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} на мрежови заявки от {{type}} за адрес, съвпадащ с {{br}}{{url}}{{br}}и произлизащ от {{origin}},{{importance}} има филтър със съвпадащи изключения.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Блокиране",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Разрешаване",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "тип \"{{type}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "всеки тип",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "\"{{origin}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "където и да е",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "с изключение, когато",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "дори ако",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Статичният филтър <code>{{filter}}</code> е намерен в:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Статичният филтър не е намерен в никой от активните списъци с филтри",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Записите в дневника, които не отговарят на трите условия по-долу ще бъдат автоматично отхвърлени:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Запазване на записите от последните {{input}} минути",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Запазване най-много на {{input}} зареждания на страница за раздел",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Запазване най-много на {{input}} записа за раздел",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Използване на {{input}} реда за записи в разширен вертикален режим",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Скриване на колони:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Време",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Филтър/правило",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Контекст",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Страна",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Списък",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Таблица",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Обикновен",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Отваряне",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Нов доклад",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Намиране на подобни доклади",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Документация",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Прочетете документацията в <code>uBlock/wiki</code>, за да научите повече за всички функции на uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Въпроси и поддръжка",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Отговори на въпроси и други видове помощ се предоставят в Reddit <code>/r/uBlockOrigin</code>",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Проблеми с филтъра/уебсайтът е счупен",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Докладвайте за проблеми с филтрирането на конкретни уебсайтове в <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> за проследяване на проблеми</span>. <u>Изисква се акаунт в GitHub.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Важно:</b> Избягвайте да използвате други блокери с подобно предназначение заедно с uBlock Origin, тъй като това може да доведе до проблеми с филтрирането на определени уебсайтове.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Съвети:</b> Уверете се, че списъците ви с филтри са актуални. <span data-url=\"logger-ui.html#_\">Дневникът</span> е основният инструмент за диагностициране на проблеми, свързани с филтрите.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Доклад за грешка",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Докладвайте за проблеми със самия uBlock Origin в <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> за проследяване на проблеми</span>. <u>Изисква се акаунт в GitHub.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Информация за отстраняване на неизправности",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "По-долу е представена техническа информация, която може да е полезна, когато доброволците се опитват да ви помогнат да разрешите даден проблем.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Важно:</b> Потенциално лична или чувствителна информация се редактира по подразбиране. Редактираната информация може да затрудни решаването на даден проблем.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Докладване на проблем с филтъра",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "За да се избегне натоварването на доброволците с дублиращи се доклади, моля, проверете дали проблемът все още не е докладван.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Списъците с филтри се актуализират ежедневно. Уверете се, че вашият проблем вече не е решен в най-новите списъци с филтри.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Проверете дали проблемът продължава да съществува след презареждане на проблемната уеб страница.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Адрес на уеб страницата:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Уеб страницата...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Изберете запис --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Показва реклами или остатъци от реклами",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Има наслагвания или други неудобства",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Открива uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Има проблеми, свързани с поверителността",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Функционира неправилно, когато uBlock Origin е активиран",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Отваря нежелани раздели или прозорци",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Маркиране на уеб страницата като &ldquo;NSFW&rdquo; (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">&ldquo;не е безопасна за работа&rdquo;</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Редактиран вид",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Нередактиран вид",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Политика за поверителност",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Списък с промени",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Изходен код (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Сътрудници",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Изходен код",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Преводи",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Списъци с филтри",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Външни зависимости (съвместими с GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Собствените списъци с филтри на uBO се хостват свободно на следните <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN-и</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Ще бъде използван случайно избран CDN, когато трябва да се обнови списък с филтри",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Изнасяне във файл...",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ublock-всички-настройки_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Възстановяване от файл...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Възстановяване на първоначалните настройки...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Всички настройки ще бъдат презаписани с данни, архивирани на {{time}} и uBlock₀ ще се рестартира.\n\nПрезаписване на съществуващите настройки, използвайки архивираните данни?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Данните не могат да бъдат прочетени или са невалидни",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Всички настройки ще бъдат премахнати и uBlock₀ ще се рестартира.\n\nВръщане на uBlock₀ към стандартните настройки?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Грешка в мрежата: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Добавяне на следния адрес към списъците с потребителски филтри?\n\nИме: \"{{title}}\"\nURL адрес: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Абониране",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "преди минута",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "преди {{value}} минути",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "преди час",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "преди {{value}} часа",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "преди ден",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "преди {{value}} дни",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Показване на табло",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Показване на дневник за мрежовите заявки",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "изключен",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Страницата е блокирана",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin предотврати зареждането на страницата:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Блокиращ филтър",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "без параметри",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Намерен в:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Назад",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Затваряне на прозореца",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Без повторно предупреждение за този сайт",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Изключване на строгото блокиране за {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Временно",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Постоянно",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Продължаване",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Изнасяне в облачно хранилище",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Внасяне от облачно хранилище",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Внасяне на настройки от облачно хранилище и обединяване с текущите",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Име на устройството:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Внимание! Променяте настройките на свой собствен риск.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Изпращане",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Прилагане на промените",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Връщане",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "байта",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Блокиране на елемента в рамката...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Абониране за списъка с филтри...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Временно разрешаване на големи мултимедийни елементи",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Преглед на изходния код…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Натиснете клавиши",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Превключване на заключеното превъртане",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Копиране в клипборда",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Избиране на всичко",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Превключване на козметичното филтриране",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Отпуснат режим на блокиране",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Използвано пространство: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "КБ",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "МБ",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "ГБ",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Щракнете, за да се зареди",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Грешки: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Не може да се филтрира правилно при стартиране на браузъра.\nПрезаредете страницата, за да се уверите, че филтрирането е правилно.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Това поле трябва да бъде последното",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/bn/messages.json b/src/_locales/bn/messages.json
new file mode 100644
index 0000000..adbb21a
--- /dev/null
+++ b/src/_locales/bn/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "অবশেষে, একটি সাশ্রয়ী বিজ্ঞাপন রোধক। সিপিইউ এবং মেমরিতে নমনীয়।",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — ড্যাশবোর্ড",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "সতর্কীকরণ! আপনার পরিবর্তনগুলো সংরক্ষণ করা হয়নি।",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "থাকুন",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "অবজ্ঞা করুন",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "সেটিংস",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "ছাঁকন তালিকা",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "আমার ফিল্টার",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "আমার নিয়ম",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "বিশ্বস্ত তালিকা",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "শর্টকাটগুলি",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — ঘটনাবলী",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "সম্পর্কে",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "সাহায্য",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — তথ্য নিরিক্ষক",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "উন্নত সেটিংস",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "ক্লিক: এই সাইটের জন্য uBlock₀ সক্রিয়/নিষ্ক্রিয় করুন\n\nCtrl+ক্লিক: শুধু এই পেজে uBlock₀ নিষ্ক্রিয় করুন",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "এই সাইটে uBlock₀ নিষ্ক্রিয় করুন\n\nCtrl+ক্লিক: শুধু এই পেজে uBlock₀ নিষ্ক্রিয় করুন",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "এই সাইটের জন্য ইউব্লক₀ সক্রিয় করতে ক্লিক করুন।",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "অবরোধের অনুরোধ",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "এই পাতায়",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}}টি বা {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "ইনস্টলের পর থেকে",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "বা",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "এই পাতাটা অবরুদ্ধ হয়েছে",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "ইনস্টল করার পর থেকে অবরুদ্ধ হয়েছে",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "যুক্ত ডোমেন ",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "ড্যাশবোর্ড খুলুন",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "উপাদান অপসারণ মোডে প্রবেশ করুন",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "উপাদান বাছাইকারী মোডে প্রবেশ করুন",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "ঘটনাবলী খুলুন",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "এই ওয়েবসাইট এর একটি সমস্যার ব্যাপারা অভিযোগ যানান",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "এই সাইটের সব পপআপ ব্লকিং চালু/বন্ধ করুন",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "এই সাইটে সব পপআপ অবরুদ্ধ করতে ক্লিক করুন",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "এই সাইটে সব পপআপ আর অবরুদ্ধ না করতে ক্লিক করুন",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "এই সাইটের জন্য বড় মিডিয়া উপাদান অবরোধ চালু/বন্ধ করুন",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "এই সাইটে বড় মিডিয়া উপাদান অবরুদ্ধ করতে ক্লিক করুন",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "এই সাইটের বর মিডিয়া এলিমেন্টগুলি ব্লক করা বন্ধ করতে ক্লিক করুন",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "এই সাইটের জন্য কসমেটিক ছাঁকন চালু/বন্ধ করুন",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "এই সাইটে কসমেটিক ফিল্টার নিষ্ক্রিয় করতে ক্লিক করুন",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "এই সাইটে কসমেটিক ফিল্টার সক্রিয় করতে ক্লিক করুন",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "এই সাইটের রিমোট ফন্টের অবরোধ চালু/বন্ধ করুন",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "এই সাইটে রিমোট ফন্ট অবরুদ্ধ করতে ক্লিক করুন",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "এই সাইটে রিমোট ফন্ট আর অবরুদ্ধ না করতে ক্লিক করুন",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "এই সাইটের জাভাস্ক্রিপ্ট বন্ধ করতে ক্লিক করুণ",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "এই সাইটের জাভাস্ক্রিপ্ট চালু করতে ক্লিক করুণ",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "পপ-আপ উইন্ডোগুলি",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "বড় মিডিয়া এলিমেন্টগুলি",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "সৌন্দর্য্যবর্ধক ছাকন",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "রিমোট ফন্টগুলি",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "জাভাস্ক্রিপ্ট",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "আরো",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "কম",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "সার্বজনীন নিয়ম: এই স্তম্ভ সেইসব নিয়মের জন্য যা সকল সাইটের উপর প্রযোজ্য।",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "অভ্যন্তরীন নিয়ম: এই কলামটি সেইসব নিয়মের জন্য যা শুধু বর্তমান সাইটে প্রয়োগ করা হবে।\nঅভ্যন্তরীন নিয়ম সার্বজনীন নিয়মকে অগ্রাহ্য করবে।",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "আপনার পরিবর্তনগুলি স্থায়ী করতে ক্লিক করুন।",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "আপনার পরিবর্তনগুলি ফেরত নিতে ক্লিক করুন।",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "সব",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "চিত্র",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "৩য়-পক্ষ",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "৩য়-পক্ষের সিএসএস/চিত্র",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "সারির সাথে সঙ্গতিপূর্ণ স্ক্রিপ্ট",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "১ম-পক্ষের স্ক্রিপ্ট",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "৩য়-পক্ষের স্ক্রিপ্ট",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "৩য়-পক্ষের ফ্রেম",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "যুক্ত ডোমেন ",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{total}}টির মধ্যে {{count}}টি",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "সংস্করণ",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "স্ক্রিপ্ট",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "কাঠামো",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "তৈরি করুন",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "চয়ন করুন",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "প্রস্থান",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "প্রাকদর্শন",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "নেটওয়ার্ক ফিল্টার",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "প্রসাধনী ফিল্টার",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "ক্লিক, Ctrl-ক্লিক",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "উপাদান রুদ্ধ করুন",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "অবরুদ্ধ উপাদানের স্থানধারক লুকান",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "আইকনে অবরোধের অনুরোধ সংখ্যা দেখান",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "টুলটিপ নিষ্ক্রিয় করুন",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "উপযুক্ত স্থানে প্রাসঙ্গিক মেনু ব্যবহার করুন",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "বর্ণান্ধ সহযোগী",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "দৃষ্টি",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "থিম",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "কাস্টম অ্যাকসেন্ট রঙ",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "ক্লাউড সংরক্ষণ সক্রিয় করুন",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "আমি একজন উন্নত ব্যবহারকারী (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>পড়া আবশ্যক</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "প্রি-ফেচিং বন্ধ করুন (অবরুদ্ধ নেটওয়ার্ক থেকে যে কোনো সংযোগ প্রতিরোধ করতে)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "হাইপারলিঙ্ক নিরীক্ষণ নিষ্ক্রিয় করুন",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "স্থানীয় আইপি ঠিকানা ফাঁস থেকে ওয়েব আর.টি.সি.কে প্রতিরোধ করুন",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "পূর্বনির্ধারিত আচরণ",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "এই পূর্বনির্ধারিত আচরণ প্রতি সাইট ভিত্তিতে ওভাররাইড করা যেতে পারে",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "প্রসাধন ফিল্টারিং নিষ্ক্রিয় করুন",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "{{input:number}} কেবির থেকে বড় মিডিয়া উপাদান অবরুদ্ধ করুন",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "রিমোট ফন্ট অবরুদ্ধ করুন",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "জাভা স্ক্রিপ্ট বন্ধ করা",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "CSP প্রতিবেদন অবরুদ্ধ করুন",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Canonical Name এর উন্মোচন",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "অ্যাডভান্সড",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "শুধুমাত্র প্রযুক্তিগত ব্যবহারকারীদের জন্য উপযুক্ত ফিচারসমুহ",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "উন্নত সেটিংস",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "সর্বশেষ পুনঃস্থাপন:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "সর্বশেষ ব্যাকআপ:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "এ থেকে {{netFilterCount}}টি নেটওয়ার্ক ফিল্টার + {{cosmeticFilterCount}}টি প্রসাধনী ফিল্টার:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{total}}টির মধ্যে {{used}}টি ব্যবহৃত",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "ফিল্টার তালিকা স্বয়ংক্রিয়-হালনাগাদ করুন।",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "এখনই হালনাগাদ করুন",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "সব ক্যাশে শোধন করুন",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "প্রসাধনী ফিল্টার পার্স ও কার্যকর করুন।",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "<p>এই অপশনটি <a href=\"https://adblockplus.org/en/faq_internal#elemhide\">অ্যাডব্লক-প্লাসের সামঞ্জস্যপূর্ণ &ldquo;উপাদান আড়াল করার&rdquo; ফিল্টারকে</a> সক্রিয় করবে। এই ফিল্টারগুলি মূলত প্রসাধনী, তাদের একটি ওয়েব পাতায় উপাদান আড়াল করতে প্রয়োজন হয় যাকে চাক্ষুষ উত্পাত বলিয়া গণ্য করা হয়, এবং যাদের নেট অনুরোধ ভিত্তিক ফিল্টারিং ইঞ্জিন দ্বারা অবরুদ্ধ করা যায় না।</p><p>এই বৈশিষ্ট্য সক্রিয় করলে uBlock₀-এর মেমরির পদচিহ্ন বৃদ্ধি পাবে।</p>",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "জেরেরিক প্রসাধনী ছাঁকনি উপেক্ষা করুন।",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "<p>জেনেরিক প্রসাধনী ছাঁকনি হচ্ছে সেইসব প্রসাধনী ছাঁকনি যা সব ওয়েবসাইটে প্রয়োগের জন্য অভিপ্রেত।<p>যদিও তা uBlock₀ দ্বারা দক্ষতার সঙ্গে পরিচালনা করে, কিন্তু জেনেরিক প্রসাধন ফিল্টার এখনও কিছু ওয়েব পাতার পরিমাপযোগ্য মেমরি ও CPU-র অত্যাধিক চাপ সৃষ্টিতে অবদান রাখতে পারে, বিশেষ করে বড় এবং দীর্ঘ একটিতে।<p>এই অপশন সক্রিয় করলে জেনেরিক প্রসাধনী ছাঁকনি পরিচালিত হবে যা ওয়েব পাতার পরিমাপযোগ্য মেমরি ও CPU-র অত্যাধিক চাপ সৃষ্টি দূর করবে এবং uBlock₀ নিজেই মেমরি পদাঙ্ক অর্ধ করবে।<p>এটা কম শক্তিশালী ডিভাইসে এই অপশনটি সক্রিয় করার জন্য সুপারিশ করা হচ্ছে।",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "সবগুলি ফিল্টার তালিকা লোড না হওয়া পর্যন্ত নেটওয়ার্ক কার্যকলাপ স্থগিত করুন",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "অবরুদ্ধ হোস্টের তালিকা",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "পরিবর্তনগুলি প্রয়োগ",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "বিল্ট-ইন",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "বিজ্ঞাপন",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "গোপনীয়তা",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "ম্যালওয়্যার ডোমেইন",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "বিরক্তিকর",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "বহুমুখী",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "অঞ্চল, ভাষা",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "স্বনির্ধারিত",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "আমদানি করুন...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "লাইন প্রতি একটি URL। &lsquo;!&rsquo; সহ উপসর্গ লাইন উপেক্ষা করা হবে। অকার্যকর URL গুলি নীরবে উপেক্ষা করা হবে।",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "পুরোনো",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "কন্টেন্ট দেখুন",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "সর্বশেষ হালনাগাদ: {{ago}}",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "হালনাগাদ করা হচ্ছে...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "একটি নেটওয়ার্ক ত্রুটি রিসোর্স বা তথ্য হালনাগাদ হওয়া রোধ করেছে।",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "লাইন প্রতি একটি ফিল্টার। একটি ফিল্টার শুধু হোস্টনেম বা অ্যাডব্লক প্লাস-এর সাথে সামঞ্জস্যপূর্ণ ফিল্টার হতে পারে। <code>!</code> দিয়ে শুরু হওয়া লাইন উপেক্ষা করা হবে।",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "সন্দেহজনক উৎস থেকে ফিল্টারে কোন কিছু যোগ করবেন না।",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "আমদানি করে পরিশেষে যোগ করুন",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "রপ্তানি করুন",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "amar-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "পরিবর্তনগুলি প্রয়োগ",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "স্থায়ী নিয়ম",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "অস্থায়ী নিয়ম",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "প্রত্যাবর্তন",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "কমিট",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "সম্পাদনা",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "সংরক্ষণ",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "বাতিল করুন",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "ফাইল থেকে আমদানি...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "ফাইলে রপ্তানি",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "amar-ublock-dynamic-niyom_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "আপনার গতিশীল ফিল্টারের নিয়মের তালিকা।",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "শব্দবিন্যাসের নিয়ম: <code>source destination type action</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>সম্পূর্ণ নথিপত্র</a>)।",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "সাজাও:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "নিয়মের ধরন",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "উৎস",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "গন্তব্য",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "আপনার হোস্টের তালিকা যাদের জন্য uBlock₀ নিষ্ক্রিয় করা হবে। লাইন প্রতি একটি ভুক্তি। অবৈধ হোস্ট নাম নিশব্দে উপেক্ষা করা হবে।",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "আমদানি ও পরিশেষে যোগ করুন",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "রপ্তানি করুন",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "amar-ublock-whitelist_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "পরিবর্তনগুলি প্রয়োগ",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "ধরন",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "ডোমেইন",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "ফিল্টার",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "সব",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "পর্দার আড়ালে",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "বর্তমান ট্যাব",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "ট্যাবের বিষয় বস্তু রিলোড করুণ",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "ড.অ.ম. পরিদর্শক বোতাম",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "পপআপ এলাকার বোতাম",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "ইউব্লক অরিজিন উইকি: লগার",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "লগার পরিষ্কার করুন",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "লগার থামান (আগত সকল তথ্য বাতিল করুন)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "লগার চালু করুন",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "লগার ছাকন বোতাম",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "ফিল্টার লগের ভুক্তি",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "লগার ছাকন বাছাইকরণ",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "না",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "অবরুদ্ধ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "অনুমোদিত",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "পাল্টানো",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "১ম-পক্ষ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "৩য়-পক্ষ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "বিস্তারিত",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "ছাকন",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "ছাঁকন তালিকা",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "নিয়ম",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "প্রসঙ্গ",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "রুট প্রসঙ্গ",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "দলমত",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "ধরন",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "ইউ.আর.এল.",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "ডায়নামিক URL ফিল্টারিং",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "প্রসঙ্গ:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "ধরন:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "স্থির ফিল্টারিং",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{type}}-এর নেটওয়ার্ক অনুরোধ {{action}} {{br}}যার URL ঠিকানা {{url}}-এর সাথে মিলেছে {{br}}এবং যার মূলভিত্তি {{origin}},{{br}} {{importance}} এখানে একটি মেলানো ব্যতিক্রম ফিল্টার আছে।",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "অবরুদ্ধ করুন",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "মঞ্জুর",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "ধরন “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "যে কোন ধরন",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "“{{origin}}” থেকে",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "যে কোন জায়গা থেকে",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "এছাড়া যখন",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "এমনকি যদি",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "স্থির ফিল্টার <code>{{filter}}</code> পাওয়া গেছে:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "স্থির ফিল্টার বর্তমানে সক্রিয় ফিল্টার তালিকার কোনটিতে পাওয়া যায় নি",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "নীচের যে লগার এন্ট্রিগুলি তিনটি শর্ত সম্পূর্ণ পূরণ করে না তাদেরকে স্বয়ংক্রিয়ভাবে বাতিল হবে:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "শেষ {{input}} মিনিটের এন্ত্রিগুলো সংরক্ষণ করা হবে",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "প্রত্যেক ট্যাবের সর্বোচ্চ {{input}} পেজ লোড সংরক্ষণ করা হবে",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "প্রত্যেক ট্যাবে সর্বোচ্চ {{input}} এন্ট্রি সংরক্ষণ করা হবে",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "প্রত্যেক এন্ট্রির জন্য খাড়াভাবে ছড়ানো মোডে {{input}}গুলো লাইন ব্যবহার করা হবে",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "কলাম লুকানো:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "সময় {{input}}",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "ছাকন/নিয়ম {{input}}",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "অনুবন্ধ {{input}}",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "দলের অন্তর্ভুক্ত",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "তালিকা",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "ছক",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "সমান্তরাল",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "মার্কডাউন",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "খুলুন",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "নতুন অভিযোগ",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "একই রকম অভিযোগ দেখুন",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "ডকুমেন্টেশন",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "uBlock Origin এর সমস্ত ফিচার সম্পর্কে জানতে <code>uBlock/wiki</code> এ ডকুমেন্টেশন পড়ুন।",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "যোগাযোগ এবং সহায়তা",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "প্রশ্নের উত্তর এবং অন্যান্য ধরনের সাহায্য ও সহায়তা <code>/r/uBlockOrigin</code> সাবরেডিট এ দেওয়া আছে।",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "ফিল্টার সমস্যা/ওয়েবসাইট ভেঙে গেছে",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "নির্দিষ্ট ওয়েবসাইটের ফিল্টার সমস্যাগুলি <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> ইস্যু ট্র্যাকারে রিপোর্ট করুন<span> <u>একটি GitHub অ্যাকাউন্ট প্রয়োজন৷</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>গুরুত্বপূর্ণ:</b> uBlock Origin-এর সাথে একই রকম-উদ্দেশ্যযুক্ত ব্লকার ব্যবহার করা এড়িয়ে চলুন, কারণ এটি নির্দিষ্ট ওয়েবসাইটে ফিল্টার এর সমস্যা সৃষ্টি করতে পারে।",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>টিপস:</b> আপনার ফিল্টার তালিকা আপ টু ডেট আছে তা নিশ্চিত করুন। <span data-url=\"logger-ui.html#_\">লগার</span> হল ফিল্টার-সম্পর্কিত সমস্যা নির্ণয়ের প্রাথমিক টুল।",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "বাগ রিপোর্ট",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "<span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> ইস্যু ট্র্যাকার</span> এ uBlock অরিজিন সংক্রান্ত সমস্যাগুলি রিপোর্ট করুন। <u>একটি GitHub অ্যাকাউন্ট প্রয়োজন৷</u>৷",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "সমস্যা সমাধানের তথ্য",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "স্বেচ্ছাসেবকরা যখন কোনো সমস্যা সমাধানের জন্য আপনাকে সাহায্য করার চেষ্টা করছেন তখন প্রযুক্তিগত তথ্য নিচে দেওয়া হল যা কার্যকর হতে পারে।",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>গুরুত্বপূর্ণ:</b> সম্ভাব্য ব্যক্তিগত বা সংবেদনশীল তথ্য ডিফল্টরূপে সংশোধন করা হয়। সংশোধিত তথ্য সমস্যা সমাধান করা আরও কঠিন করে তুলতে পারে।",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "একটি ফিল্টার সমস্যা রিপোর্ট করুন",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "ডুপ্লিকেট রিপোর্ট সহ স্বেচ্ছাসেবকদের বোঝা এড়াতে, অনুগ্রহ করে যাচাই করুন যে সমস্যাটি ইতিমধ্যে রিপোর্ট করা হয়নি।",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "ফিল্টারের লিস্ট প্রতিদিন আপডেট করা হয়। নতুন আপডেটে আপনার সমস্যার সমাধান করা হয়েছে কিনা তা লক্ষ্য করুন। ",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "অভিযোগ দিন যদি আপনার রিলোডের পরও ওয়েবপেজের সমস্যার সমাধান না হয়।",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "ওয়েব পেজের ঠিকানা:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "ওয়েব পেজটি…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- একটি এন্ট্রি চয়ন করুন --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "বিজ্ঞাপন বা বিজ্ঞাপনের অবশিষ্টাংশ দেখায়",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "ওভারলে বা অন্যান্য উপদ্রব আছে",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "uBlock Origin শনাক্ত করে",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "গোপনীয়তা-সম্পর্কিত সমস্যা আছে",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "যখন uBlock Origin চালু করা থাকে তখন সমস্যা দেখা দেয়",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "অবাঞ্ছিত ট্যাব বা উইন্ডো খোলে",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "ওয়েব পৃষ্ঠাটিকে “NSFW” হিসাবে লেবেল করুন (<a href=\"https://bn.wikipedia.org/wiki/নট_সেফ_ফর_ওয়ার্ক\">“কাজের জন্য নিরাপদ নয়”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "গোপনীয়তার নীতি",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "পরিবর্তন লগ",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "উত্স কোড (GPLv৩)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "অবদানকারী",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "সোর্স কোড",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "অনুবাদ সমূহ",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "ফিল্টার লিস্ট",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "বাহ্যিকভাবে নির্ভশীলসমূহ (জিপিএল ভা.৩-সঙ্গতিপূর্ণ)",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO-এর নিজস্ব ফিল্টার তালিকাগুলি নিম্নলিখিত <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN</a> এ অবাধে হোস্ট করা হয়েছে:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "একটি ফিল্টার তালিকা আপডেট করার প্রয়োজন হলে একটি এলোমেলোভাবে বাছাই করা CDN ব্যবহার করা হয়",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "ফাইলে ব্যাকআপ",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "amar-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "ফাইল থেকে পুনরুদ্ধার...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "ডিফল্ট সেটিংসে পুন:স্থাপন করুন...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "{{time}}-এর ডেটা ব্যাকআপ ব্যবহার করে আপনার সেটিংস পুনঃলিখিত হবে, এবং uBlock₀ পুনরায় চালু হবে।\n\nডেটা ব্যাকআপ ব্যবহার করে সমস্ত বিদ্যমান সেটিংস পুনঃলিখবেন?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "উপাত্তটি পড়া যায়নি বা অকার্যকর",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "আপনার সব সেটিংস বাতিল করা হবে, এবং uBlock₀ পুনরায় চালু হবে।\n\nইউব্লক₀ সেটিংস পুনঃস্থাপন করবেন?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "{{url}} -এ সংযোগ করতে অক্ষম",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: আপনার নিজস্ব ফিল্টার তালিকায় নিম্নলিখিত URL যোগ করবেন?\n\nশিরোনাম: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "সদস্যতা নাও",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "এক মিনিট আগে",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} মিনিট আগে",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "এক ঘণ্টা আগে",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} ঘণ্টা আগে",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "এক দিন আগে",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} দিন আগে",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "ড্যাশবোর্ড দেখুন",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "লগার দেখান",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "বন্ধ",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "পেজটি ব্লক করা হয়েছে",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uব্লক অরিজিন নিচের পৃষ্ঠা লোড করাকে প্রতিহত করেছে:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "নিম্নলিখিত ফিল্টারের কারণে",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "প্যারামিটার বিহীন",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "যা এতে পাওয়া গেছে:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "ফিরে যান",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "এই উইন্ডোটি বন্ধ করুন",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "এই সাইটের ব্যাপারে আর সতর্ক করবেন না",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "{{hostname}}-এর জন্য কঠোর অবরোধ নিষ্ক্রিয় করুন",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "সাময়িকভাবে",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "স্থায়ীভাবে",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "এগিয়ে যান",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "ক্লাউড সঞ্চয়ে রপ্তানি করুন",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "ক্লাউড সঞ্চয় থেকে আমদানি করুন",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "ক্লাউড সংগ্রহস্থল থেকে আমদানি করে বর্তমানে সেটিংসের সঙ্গে একত্রীকরণ করুন",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "এই ডিভাইসের নাম:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "সতর্কবাণী! আপনার নিজ ঝুঁকিতে এই উন্নত সেটিংগুলি পরিবর্তন করুন।",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "জমা দিন",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "পরিবর্তনগুলি প্রয়োগ",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "প্রত্যাবর্তন",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "বাইট",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "ফ্রেমের উপাদান রুদ্ধ করো...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "ফিল্টার তালিকায় সাবস্ক্রাইব করুন...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "সাময়িকভাবে বৃহৎ মিডিয়া উপাদান মঞ্জুরি দিন",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "সোর্স কোড দেখুন.... ",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "শর্টকাট লিখুন",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "স্ক্রলিং চালু/বন্ধ করুন",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "ক্লিপবোর্ডে প্রতিলিপি করুন",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "সবগুলো নির্বাচন করুন",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "সৌন্দর্য্যবর্ধক ফিল্টার চালু বা বন্ধ করুন",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "রোধক মোড শিথিল করুন",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "ব্যবহৃত স্টোরেজ: {{value}}{{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "কিলোবাইট",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "মেগাবাইট",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "গিগাবাইট",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "লোড করতে টিপ দাও",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "এরর: {{গণনা}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "ঠিকভাবে ফিল্টার চালু করা যায়নি। পুনরায় আবার পেজ রিলোড করুন ঠিকভাবে ফিল্টার চালু করার জন্য",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/br_FR/messages.json b/src/_locales/br_FR/messages.json
new file mode 100644
index 0000000..58c7dd6
--- /dev/null
+++ b/src/_locales/br_FR/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Erfin, ur stanker saotradurioù efedus hag a zouj d'ho reizhiad korvoiñ ha d'ho memor.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Taolenn-vourzh",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Diwallit! Kemmoù zo ha n'ho peus enrollet anezho",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Chom amañ",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Tremen e-bioù",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Arventennoù",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Roll ar siloù",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Ma siloù",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Ma reolennoù",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Lec'hiennoù sur",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Berradennoù",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Deizlevr ar rekedoù",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Diwar-benn",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Skoazell",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Enseller elfennoù",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Arventennoù araokaet",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Klik: lazhañ/enaouiñ uBlock₀ war al lec'hienn-mañ.\n\nReol+klik: lazhañ uBlock₀ war al lec'hienn-mañ nemetken.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Klikit evit lazhañ uBlock₀ war al lec'hienn-mañ.\n\nReol+klik evit lazhañ uBlock₀ war al lec'hienn-mañ.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Klikit evit enaouiñ uBlock₀ war al lec'hienn-mañ.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "Rekedoù stanket",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "er bajenn-mañ",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} pe {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "abaoe ar staliadur",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "pe",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Stanket er bajenn-mañ",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Stanket abaoe ar staliadur",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domanioù kennasket",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Digeriñ an daolenn-vourzh",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Lemel elfennoù",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Diuzañ elfennoù",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Digeriñ deizlevr ar rekedoù",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Danevelliñ ur gudenn war al lec'hienn-mañ",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Lazhañ/enaouiñ evit stankañ an holl brenestroù pop-up war al lec'hienn-mañ",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Klikit evit stankañ an holl brenestroù pop-up war al lec'hienn-mañ",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Klikit evit aotren an holl brenestroù pop-up war al lec'hienn-mañ",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Stankañ/aotren kargadur an elfennoù media pounner war al lec'hienn-mañ",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Klikit evit stankañ an elfennoù media pounner war al lec'hienn-mañ",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Klikit evit aotren an elfennoù media pounner en-dro war al lec'hienn-mañ",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Lazhañ/enaouiñ ar silañ kenedel war al lec'hienn-mañ",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Klikit evit lazhañ ar silañ kenedel war al lec'hienn-mañ",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Klikit evit enaouiñ ar silañ kenedel war al lec'hienn-mañ",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Lazhañ/enaouiñ evit stankañ an nodrezhioù diavaez war al lec'hienn-mañ",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Klikit evit stankañ an nodrezhioù diavaez war al lec'hienn-mañ",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Klikit evit aotren an nodrezhioù diavaez war al lec'hienn-mañ",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Klikit evit diweredekaat JavaScript war al lec'hienn-mañ",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Klikit evit gweredekaat JavaScript war al lec'hienn-mañ en-dro",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Prenestroù pop-up",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Elfennoù media pounner",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Silañ kenedel",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Nodrezhioù diavaez",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Muioc'h",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Nebeutoc'h",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Reolennoù hollek: er bann-mañ e vez lakaet ar reolennoù a dalvez da gement lec'hienn.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Reolennoù lec'hel: er bann-mañ e vez lakaet ar reolennoù ne dalvezont nemet d'al lec'hienn m'emaoc'h.\nAr reolennoù lec'hel a ya a-raok ar reolennoù hollek.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Klikit evit lakaat ho kemmoù da dalvezout.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Klikit evit nullañ ar c'hemmoù ho peus graet.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "Pep tra",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "Skeudennoù",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "Kevelerien diavaez",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/skeudennoù kevelerien diavaez",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "skriptoù enlakaet",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "Skriptoù domani ar bajenn",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "Skriptoù kevelerien diavaez",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "Frammoù kevelerien diavaez",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domanioù kennasket",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} diwar {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Handelv",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "skript",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "framm",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Krouiñ",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Dibab",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Kuitaat",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Rakwel",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Siloù rouedad",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Siloù kenedel",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Klik, Reol.-klik",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Stankañ an elfenn-mañ…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Kuzhat an esaouennoù lezet gant an elfennoù bet stanket",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Diskouez an niver a rekedoù bet stanket war an arouez",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Diweredekaat an tunioù",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Ober gant al lañser kendestenn pa vez ezhomm",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Mod daltonek",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Neuz",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tem",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Liv splannañ personelaet",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Gweredekaat ar stokañ e-barzh ar goumoulenn (cloud)",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Me zo un implijer araokaet",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Diweredekaat ar \"rak-lenn\", pe diougan an oberoù war ar rouedad (evit ma ne gennaskfe ket ar rekedoù rouedad stanket)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Diweredekaat evezhiañ ar gourliammoù",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Mirout ouzh WebRTC da ziskuilhañ chomlec'hioù IP lec'hel",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Emzalc'h dre ziouer",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Gallout a reer erlec'hiañ an emzalc'hioù-se dre ziouer e lec'hiennoù resis",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Lazhañ ar silañ kenedel",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Stankañ an elfennoù media a zo pounneroc'h evit {{input}} KB ",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Stankañ an nodrezhioù diavaez",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Diweredekaat JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Stankañ an danevelloù CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Diskouez an anvioù gwir (CNAME)",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Araokaet",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Fonksionelezhioù azasaet d'an implijerien araokaet hepken",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "arventennoù araokaet",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Adsavet da ziwezhañ:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Gwaredet da ziwezhañ:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} sil rouedad + {{cosmeticFilterCount}} sil kenedel diouzh:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} anezho implijet diwar {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Hizivaat ar rolloù siloù ent-emgefreek",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Hizivaat diouzhtu",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Riñsañ an holl grubuilhoù",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Dielfennañ ha lakaat ar siloù kenedel da dalvezout",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Ar siloù kenedel a servij da guzhat elfennoù ur bajenn web a c'hallfe bezañ noazadurioù d'ar gwelet ha ne c'hallont ket bezañ stanket gant silañ ar rouedad diazezet war ar rekedoù.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ober fae ouzh ar siloù kenedel hollek",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Name Mar bez gweredekaet an dibarzh-mañ e vo dilemel an memor ha an CPU ouzhpennet d'ar bajennoù web evel ur c'helc'h ar siloù kosmetik generel.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Ehan oberoù ar rouedad betek ma kargo an holl rolloù siloù",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Lakaat da dalvezout",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Enframmet",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Bruderezh",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Prevezded",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Gwarez a-enep ar malware ha surentez",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Saotradurioù",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Siloù lies-implij",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Rannvroioù, broioù",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Personelaet",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Enporzhiañ",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Un URL dre linenn. Graet e vo fae ouzh an URLoù direizh hep kemenn deoc'h.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Diamzeriet.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "gwelet an endalc'had",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Hizivaet da ziwezhañ: {{ago}}.\nKlikit evit hizivaat.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Oc'h hizivaat…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Ur fazi rouedad en deus miret an danvez da vezañ hizivaet.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Ur sil dre linenn. Ur sil a c'hall bezañ un anv ostiz hepken pe ur sil hag a glot gant EasyList.\nAl linennoù a grog gant <code>!</code> a vo dilezet.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Arabat ouzhpennañ siloù a zeu diouzh mammennoù douetus.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Enporzhiañ hag ouzhpennañ",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Ezporzhiañ",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "ma-siloù-statek-ublock_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Lakaat da dalvezout",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Reolennoù da badout",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Reolennoù berrbad",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Nullañ",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Lakaat da dalvezout",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Kemmañ",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Enrollañ",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Nullañ",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Enporzhiañ diouzh ur restr…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Ezporzhiañ etrezek ur restr",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "ma-reolennoù-silañ-dinamek-ublock_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Roll eus ho reolennoù silañ dinamek.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Reolenn ereadurezh: <code>mammenn pal seurt ober</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>Teuliadur klok e saozneg</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Rummañ:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Seurt reolenn",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Mammenn",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Pal",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "En ur dermeniñ peseurt lec'hiennoù a zo sur e lavarit da uBlock Origin e peseurt lec'hiennoù e rank bezañ diweredekaet. Un enmont dre linenn.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Enporzhiañ hag ouzhpennañ",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Ezporzhiañ",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "ma-lec'hiennoù-fizius-ublock_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Lakaat da dalvezout",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Seurt",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domani",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Sil",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Pep tra",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Rekedoù dre guzh",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Ivinell a-vremañ",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Adkargañ endalc'had an ivinell",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Enaouiñ/lazhañ an enseller DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Enaouiñ/lazhañ ar banell pop-up",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "Pajenn wiki uBlock Origin: An Deizlevr",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Skarzhañ an deizlevr",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Ehan an deizlevr (ober fae ouzh an titouroù resevet)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Adstagañ gant an deizlevr",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Stagañ da silañ an deizlevr",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "Silañ endalc'had an deizlevr",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Arventennoù silañ an deizlevr",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Pas",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "stanket",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "aotreet",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "kemmet",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "Domani ar bajenn",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "Kevelerien diavaez",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Munudoù",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Sil",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Roll ar siloù",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Reolenn",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Kontekst",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Kontekst gwrizienn",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Seurt keveler",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Seurt",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Reolenn URL",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Kontekst:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Seurt:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Sil statek",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} ar rekedoù rouedad eus ar seurt {{type}} {{br}}da neuze an URL a glot gant {{url}} {{br}}hag a zeu eus {{origin}},{{br}}{{importance}} bout zo ur sil nemedennoù hag a glot gantañ.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Stankañ",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Aotren",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "seurt \"{{type}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "a bep seurt",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "\"{{origin}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "n'eus forzh pelec'h",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "nemet pa",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "zoken ma",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Kavet e vez ar sil statek <code>{{filter}}</code> e-barzh:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "N'haller ket kavout ar sil statek-mañ e-touez ar rolloù siloù oberiant",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Enmonedoù an deizlevr ha ne glot gant an tri diviz zo amañ dindan a vo skarzhet ent-emgefreek:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Mirout an enmonedoù eus ar/an {{input}} v/munutenn gent",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Mirout {{input}} g/kargadenn pajenn dre ivinell d'ar muiañ",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Mirout {{input}} enmont dre ivinell d'ar muiañ",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Ober gant {{input}} linenn dre enmont er mod dispaket a-blom",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Kuzhat ar bannoù:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Eur",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Sil/reolenn",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Kendestenn",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Seurt keveler",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Listenn",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Taolenn",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Plaen",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Digeriñ",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Sevel ur rentañ-kont nevez",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Klask danevelloù koulz ha homañ",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Teuliadur",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Lennit an teuliadur en <code>uBlock/wiki</code> evit gouzout hiroc'h diwar-benn uBlock Origin ha pep tra a c'hall ober.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Goulennoù ha skor",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Er subreddit <code>/r/uBlockOrigin</code> e c'hallit kavout respontoù d'ho koulennoù hag a bep seurt skoazelloù all.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Kudennoù silañ/lec'hienn sac'het",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Danevellit kudennoù silañ e lec'hiennoù resis zo e-barzh <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\">roll evezhiañ kudennoù <code>uBlockOrigin/uAssets</code></span>. <u>Ur c'hont GitHub zo rekis.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>A-bouez:</b> Chomit hep ober gant meur a stanker a zo heñvel ouzh uBlock Origin war un dro rak kement-se a c'hallfe degas kudennoù e lod lec'hiennoù zo.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tro-bleg:</b> Gwiriit ma'z eo bet hizivaet ho rolloù siloù. <span data-url=\"logger-ui.html#_\">An deizlevr</span> eo an ostilh pennañ evit diagnostikañ kudennoù e-keñver ar silañ.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Danevelliñ un draen",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Danevellit kudennoù gant uBlock Origin e-unan e-barzh <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\">roll evezhiañ kudennoù <code>uBlockOrigin/uBlock-issue</code></span>. <u>Ur c'hont GitHub zo rekis.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Titouroù diagnostikañ kudennoù",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Amañ dindan ez eus titouroù teknikel a c'hallfe sikour an dud a-youl vat a zo o klask diskoulmañ ur gudenn.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Talvoudus:</b> An titouroù a c'hallfe bezañ prevez pe kizidik a zo skarzhet ent-emgefreek. Pa vez skarzhet an titouroù mod-se e c'hall bezañ diaesoc'h da ziskoulmañ ur gudenn.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Danevelliñ ur gudenn gant ur sil",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Evit nompas sammañ ar genlabourerien a-youl vat gant meur a zanevell heñvel, gwiriit ma n'eo ket bet danevellet ho kudenn c'hoazh mar plij.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Bemdez e vez hizivaet ar rolloù siloù. Gwiriit ma n'eo ket bet diskoulmet ho kudenn c'hoazh er rolloù siloù nevesañ.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Gwiriit ma chom ar gudenn goude bezañ adloc'het ar bajenn gudennek.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Chomlec'h ar bajenn web:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Ar bajenn web-mañ…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Dibab ur seurt --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Diskouez a ra bruderezh pa restachoù bruderezh",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Gwiskadoù pe saotradurioù all en deus",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Diskoachañ a ra uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Kudennoù a-fed prevezded he deus",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Ne ya ket mat en-dro p'eo enaouet uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Digeriñ a ra ivinelloù pe prenestroù noazus",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Merkañ ar bejenn evel \"NSFW\" (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>) hag a dalv ez eus danvez noazus pe kizidik enni",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Politikerezh prevezded",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Deizlevr ar cheñchamantoù",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Kod mammenn (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Kenlabourerien",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Kod mammenn",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Troidigezhioù",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Rolloù ar siloù",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dalc'hioù diavaez (a glot gant GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Ar rolloù siloù a zo da uBO e-unan a zo herberc'hiet digoust war ar <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN</a>où-mañ:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Graet e vez gant ur CDN dre zegouezh pa vez ezhomm hizivaat ur roll siloù.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Ezporzhiañ war-zu ur restr…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ma-roadennoù-ublock_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Adsevel diwar ur restr…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Adlakaat an arventennoù dre ziouer…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Hoc'h arventennoù a vo erlec'hiet gant ar roadennoù bet gwaredet d'an/ar {{time}}, goude-se ec'h adloc'ho uBlock₀.\n\nKenderc'hel gant an oberiadenn-se?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "N'haller ket lenn ar roadennoù pe direizh ez int",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Skarzhet e vo hoc'h arventennoù hag adloc'het uBlock₀.\n\nHa fellout a ra deoc'h adderaouekaat arventennoù uBlock₀?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Fazi rouedad: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Fellout a ra deoc'h ouzhpennañ an URL-mañ d'ho rolloù siloù?\n\nTitl: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Koumanantiñ",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "ur vunutenn zo",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} v/munutenn zo",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "un eurvezh zo",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} eur zo",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "un devezh zo",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} deiz zo",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Diskouez an daolenn-vourzh",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Gwelet deizlevr ar rekedoù",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "enaouet",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Pajenn stanket",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin en deus miret ar bajenn-mañ da gargañ:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Stanket eo bet abalamour d'ar sil-mañ:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "kuit a arventennoù",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Hag a vez kavet e-barzh:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Distreiñ",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Serriñ ar prenestr-mañ",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Arabat kemenn din diwar-benn al lec'hienn-mañ en-dro",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Lazhañ ar stankañ strizh evit {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "berrbad",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Da badout",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Kenderc'hel",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Ezporzhiañ etrezek stokañ ar goumoulenn (cloud)",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Enporzhiañ diouzh stokañ ar goumoulenn (cloud)",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Enporzhiañ adalek ar goumoulenn ha kendeuziñ gant an arventennoù a-vremañ",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Anv an ardivink-mañ:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Diwallit! Kemmit an arventennoù araokaet-mañ nemet ma ouifec'h petra emaoc'h oc'h ober.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Kas",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Lakaat da dalvezout",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Nullañ",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "eizhbitoù",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Stankañ an elfenn er framm…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Koumanantiñ d'ar roll siloù…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Aotren elfennoù media pounner evit ar mare",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Diskouez ar c'hod mammenn…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Enankit ur verradenn",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Prennañ/dibrennañ an dibunañ",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Eilañ er golver",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Diuzañ an holl",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Enaouiñ ar silañ kenedel",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Distanañ ar mod stankañ",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Spas stokañ implijet: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Klikañ evit kargañ",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Fazioù: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Ur fazi silañ zo bet en ur lañsañ ar merdeer. Adkargit ar bajenn evit ma vo silet mat.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/bs/messages.json b/src/_locales/bs/messages.json
new file mode 100644
index 0000000..79a2fbe
--- /dev/null
+++ b/src/_locales/bs/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Konačno, efikasan bloker. Štedljiv na procesoru i memoriji.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Kontrolna ploča",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Upozorenje! Imate nesačuvane promjene",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Ostani",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignoriši",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Postavke",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Liste filtera",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Moji filteri",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Moja pravila",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Bijela lista",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Prečice",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Logiranje",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "O aplikaciji",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Podrška",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Pregled sadržaja",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Napredne postavke",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Klik: onemogućite/omogućite uBlock₀ za ovaj sajt.\n\nCtrl+klik: onemogućite µBlock₀ samo za ovu stranicu.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Kliknite da onemogućite uBlock₀ za ovaj sajt.\n\nCtrl+klik da onemogućite uBlock₀ samo za ovu stranicu.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Kliknite da omogućite uBlock₀ za ovaj sajt.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "zahtjeva blokirano",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "na ovoj stranici",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "od instalacije",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "ili",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blokirano na ovoj stranici",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blokirano od instalacije",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domena povezano",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Otvori kontrolnu ploču",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Pokrenite režim za odabiranje i uklanjanje elemenata",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Pokrenite režim za odabiranje elemenata",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Otvorite zapisnik",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Prijavite problem na ovoj web stranici",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Uključite/isključite sve iskačujuće prozore na ovoj stranici",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Kliknite da blokirate sve iskačujuće prozore na ovoj stranici",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Kliknite da više ne blokirate sve iskačujuće prozore na ovoj stranici",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Uključite/isključite blokiranje velikih medijskih elemenata za ovaj sajt",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Kliknite da blokirate velike medijske elemente na ovom sajtu",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Kliknite da više ne blokirate velike medijske elemente na ovom sajtu",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Uključite/isključite estetsko filtriranje za ovaj sajt",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Kliknite da isključite estetsko filtriranje za ovaj sajt",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Kliknite da uključite estetsko filtriranje za ovaj sajt",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Uključite/isključite blokiranje udaljenih fontova za ovaj sajt",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Kliknite da blokirate udaljene fontove na ovom sajtu",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Kliknite da više ne blokirate udaljene fontove na ovom sajtu",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Kliknite da isključite JavaScript na ovom sajtu",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Kliknite da uključite JavaScript na ovom sajtu",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Pop-Up prozor",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Veliki medijski elementi",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Estetsko filtriranje",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Udaljeni fontovi",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Više",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Manje",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Globalna pravila: ovaj stupac je za pravila koja su primjenjena za sve sajtove.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Lokalna pravila: ovaj stupac je za pravila koja su primjenjena samo za ovaj sajt.\nLokalna pravila nadglasaju globalna pravila.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Kliknite da vaše promjene učinite trajnim.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Kliknite da biste vratili promjene.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "sve",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "slike",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "Treće strane",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/slike trećih strana",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "umetnute skripte",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "Korisničke skripte",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "Skripte trećih strana",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "Okviri trećih strana",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "povezane domene",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} od {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Verzija",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "skripta",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "okvir",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Kreiraj",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Odaberi",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Zatvori",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Pregled",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Mrežni filteri",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Estetski filteri",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Klik, Ctrl-klik",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Blokiraj elemenat…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Sakrij držače blokiranih elemenata",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Prikaži broj blokiranih zahtjeva na ikoni",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Isključi savjete",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Koristite kontekstni meni gdje je prikladno",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Mod za daltoniste",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Izgled",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Prilagođena prikazna boja",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Uključi podršku za pohranu u oblaku",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Ja sam napredni korisnik (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>obavezna literatura</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Onemogućite predučitavanje (da bi ste spriječili bilo koju vezu za blokirane mrežne zahtjeve)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Onemogućite provjeravanje hiperlinkova",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Spriječite WebRTC da propušta lokalnu IP adresu",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Podrazumijevano ponašanje",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Ova podrazumijevana ponašanja mogu biti poništena posebno po stranici",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Onemogućite estesko filtriranje",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Blokirajte medijske elemente veće od {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Blokirajte udaljene fontove",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Islkjučite JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Blokirajte CSP izvještaje",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Otkrijte kanonske nazive",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Napredno",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Funkcije prikladne samo za napredne korisnike",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "napredne postavke",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Posljednji prijašnji povratak:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Posljednja rezervna kopija:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} mrežni/ih filter/a + {{cosmeticFilterCount}} estetski/ih filter/a iz:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} iskorišteno od {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Automatski ažuriraj popise filtera",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Ažuriraj sada",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Obriši svu predmemoriju",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Raščlanite i primijenite estetske filtre.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Estetski filteri služe za sakrivanje elementa na web stranici koji se smatraju izglednim smjetnjama, i koji ne mogu biti blokirani filterima zasnovanih od mrežnih zahtjeva.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignorišite opće estetske filtere.",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Opći estetski filteri su onakvi estetski filteri koji su namijenjeni za primjenu na svim sajtovima. Uključivanjem ove postavke će se eliminirati dodatna upotreba memorije i procesora na sajtovima kao rezultat upravljanja općih estetskih filtera.\n\nPreporučeno je omogućiti ovu postavku na slabijim uređajima.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Obustavite mrežnu aktivnost dok se ne učitaju svi popisi filtera",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lista blokiranih hostova",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Primijenite promjene",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Ugrađeno",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Reklame",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privatnost",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Zlonamjerne domene",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Smetnje",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Višenamjenski",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regije, jezici",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Prilagođeno",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Uvezi…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Jedan URL po redu. Neispravni URL-ovi će biti tiho ignorisani.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Zastarjelo.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "prikaži sadržaj",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Posljednje ažuriranje: {{ago}}.\nKliknite za biste prisilili ažuriranje.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Ažuriranje u toku…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Mrežna greška je spriječila ažuriranje resursa.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Jedan filter po redu. Filter može biti običan naziv domaćina/hosta ili filter kompatibilan sa EasyList-om. Redovi sa prefiksom <code>!</code> će biti ignorisani.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Nemojte dodavati filtere iz nepouzdanih izvora.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Uvezi i dodaj",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Izvezi",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "moji-ublock-statični-filteri_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Primijenite promjene",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Trajna/Stalna pravila",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Privremena pravila",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Vrati",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Potvrdi",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Uredi",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Spremi",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Odbaci",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Uvezi iz datoteke…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Izvezi u datoteku",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "moja-ublock-dinamična-pravila_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Lista vaših dinamičkih pravila za filtriranje.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Pravila sintakse: <code>izvor odredište tip akcija</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>sva dokumentacija</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sortiraj:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Vrsta/tip pravila",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Izvor",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destinacija/odredište",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Direktive pouzdanih sajtova kažu na kojim sajtovima bi uBlock Origin trebao biti isključen. Jedna stavka po redu.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Uvezi i dodaj",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Izvezi",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "moji-ublock-pouzdani-sajtovi_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Primijenite izmjene",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Vrsta",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domena",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Sve",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Bez tabova",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Trenutni tab",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Ponovo učitaj sadržaj taba",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Uključite/isključite DOM inspektor",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Uključite/isključite okno za skočne prozore",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: zapisnik",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Očistite zapise",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pauzirajte zapise (odbacite sve dolazne podatke)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Pokrenite zapise",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Uključite/isključite filtriranje zapisa",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtrirajte sadržaj zapisa",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Postavke filtriranja zapisa",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Nije",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "puno događaja",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blokirano",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "dozvoljeno",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "Izmjenjeno:",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "Prve strane",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "Treće strane",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Detalji",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Lista filtera",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Pravilo",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Kontekst",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Korijenski kontekst",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Pripadna informacija",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Vrsta",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL pravilo",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Kontekst:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Vrsta:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Statični filter",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} mrežni zahtjevi {{type}} {{br}} od čiji se URL adresa slaže sa {{url}} {{br}} i koji izvire od {{origin}},{{br}}{{importance}} postoji odgovarajući odstupni filter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Blokiraj",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Dozvoli",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "vrsta “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "bilo koja vrsta",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "od “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "od bilo kuda",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "osim kada",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "čak iako",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Statični filter <code>{{filter}}</code> pronađen u:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Statični filter nije pronađen u nijednoj od trenutno uključenih filterskih listi",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Unosi u bilješku koji ne ispunjavaju sva tri navedena uvjeta/uslova ispod će biti automatski odbačeni:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Spremite unose iz zadnje/ih {{input}} minute/a",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Spremite najviše {{input}} učitavanja stranica po kartici",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Spremite najviše {{input}} unosa po kartici",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Koristi {{input}} linija po unosu u vertikalno proširenom režimu",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Sakrij stubove:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Vrijeme",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/pravilo",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Kontekst",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Strana/Pripadnost",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Popis/Lista",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tablica",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Obično",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Otvori",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Napravite novu prijavu",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Pronađite slične prijave",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentacija",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Pročitajte dokumentaciju na <code>uBlock/wiki</code> da bi ste naučili sve o uBlock Origin-ovim funkcijama.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Pitanja i podrška",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Odgovori na pitanja i druge vrste podrške nalaze se na podreditu <code>r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Problemi sa filterom/website ne radi",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Prijavite probleme s filtriranjem određenih web stranica na <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> stranici za praćenje problema</span>. <u>Potreban će vam biti GitHub račun.</u>\n\n",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Važno:</b> Nemojte koristiti druge blokere slične namjene zajedno sa uBlock Origin-om, jer bi to moglo uzrokovati probleme s filtriranjem na određenim web stranicama.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Savjeti:</b> Provjerite jesu li vaše liste filtera ažurirane. <span data-url=\"logger-ui.html#_\">Zapisnik</span> je primarni alat za dijagnosticiranje problema povezanim sa filterima.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Prijava greške",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Prijavite probleme sa samim uBlock Origin-om na <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-problem</code> stranici za praćenje problema</span>. <u>Potreban če vam biti GitHub račun.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Informacija o rješavanju problema",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Ispod se nalaze tehničke informacije koje bi vam mogle biti korisne kada vam dobrovoljci pokušavaju pomoći s rješenjem problema.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Važno:</b> Moguće privatna ili osjetljiva informacija je prema zadanim postavkama automatski zaklonjena. Zaklonjene informacije mogu otežati rješavanju problema.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Prijavite problem sa filterom",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Da bi ste izbjegli opterećivanje dobrovoljaca sa dupliciranim prijavama, molimo vas da provjerite da li je vaš problem već prijavljen, ili nije.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Liste filtera se ažuriraju svakodnevno. Budite sigurni da vaš problem nije već riješen na najnovijim listama filtera.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Provjerite postoji li problem i nakon ponovnog učitavanja problematične web stranice.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Adresa web stranice:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Web stranica…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Odaberite unos --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Pokaže oglase ili ostatke oglasa",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Ima prekrive ili druge dosade",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Otkrije uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Ima probleme povezane za privatnost",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Kvari se kad je uBlock Origin uključen",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Otvara neželjene kartice ili prozore",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Označite web stranicu kao “NSZP” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Ne-Sigurna-Za-Posao”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Zakloni",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Odzakloni",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Pravila privatnosti",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Popis izmjena",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Izvorni kod (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Saradnici",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Izvorni kod",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Prijevodi",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Liste filtera",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Vanjske zavisnosti (GPLv3-kompatiblini):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Sopstveni zapisi filtera uBO-a su besplatno hostani na sljedećim <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN-ovima</a>:\n",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Slučajno odabrani CDN će biti korišten kada zapis filtera treba biti ažuriran",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Sačuvaj rezervnu kopiju u datoteku",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "moja-ublock-rez_kopija_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Vrati iz datoteke…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Vrati na izvorne postavke…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Sve vaše postavke će je biti prebrisane koristeći rezervnu kopiju sa postavkama sačuvanim {{time}}, i uBlock₀ će se ponovno pokrenuti. \n\nPrepisati sve postojeće postavke sa rezervnom kopijom postavki?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Podatke nije moguće učitati ili su neispravni",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Sve vaše postavke će je biti obrisane i µBlock₀ će se ponovo pokrenuti. \n\nVrati µBlock₀ na izvorne postavke?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Greška sa mrežom: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Dodajte slijedeću URL adresu u vašu listu prilagođenih filtera?\n\nNaziv: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Pretplatite se",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "prije minutu",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "prije {{value}} minute/a",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "prije sat vremena",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "prije {{value}} sata/i",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "prije jedan dan",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "prije {{value}} dana",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Prikaži kontrolnu ploču",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Pokaži zapisnik",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "isključen",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Stranica je blokirana",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin je onemogućio učitavanje sljedeće stranice:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Zbog sljedećeg filtera",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "bez parametara",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Pronađeno u:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Nazad",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Zatvori ovaj prozor",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Ne upozoravaj me ponovo za ovu stranicu",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Isključi strogo blokiranje za {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Privremeno",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Trajno",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Nastavi",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Izvezi u cloud pohranu",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Uvezi iz cloud pohrane",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Uvezite iz cloud pohrane i spojite sa trenutnim postavkama",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Naziv ovog uređaja:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Upozorenje! Napredne postavke mijenjate na vlastitu odgovornost.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Pošalji",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Primijeni promjene",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Vrati",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bajta",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Blokiraj elemenat u okviru…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Pretplatite se na popis filtera…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Privremeno omogući velike medijske elemente",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Pogledaj izvorni kod…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Upišite prečicu",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "(De)aktivacija zaključanog pomicanja",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopiraj u međuspremnik",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Označi sve",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Uključi/isključi estetsko filtriranje",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relaksiran mod blokiranja",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Iskorišten prostor: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Kliknite za učitavanje",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Greške: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Nije moguće ispravno filtrirati pri pokretanju preglednika. Ponovo učitajte stranicu kako biste osigurali pravilno filtriranje.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Ova stavka mora biti posljednja",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/ca/messages.json b/src/_locales/ca/messages.json
new file mode 100644
index 0000000..be806f7
--- /dev/null
+++ b/src/_locales/ca/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Finalment, un blocador eficient que utilitza pocs recursos de memòria i processador.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Tauler de control",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Atenció! Hi ha canvis sense desar",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Roman",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignora",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Configuració",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filtres de tercers",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Els vostres filtres",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Les meves regles",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Llista blanca",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Dreceres",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Registre de peticions de xarxa",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Quant a",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Ajuda",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Visor de recursos",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Configuració avançada",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Clic: habilita/inhabilita l'uBlock₀ per a aquest lloc.\n\nCtrl+clic: inhabilita l'uBlock₀ només en aquesta pàgina.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Feu clic per inhabilitar l'uBlock₀ en aquest lloc.\n\nFeu Ctrl+clic per inhabilitar l'uBlock₀ només en aquesta pàgina.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Feu clic per habilitar l'uBlock₀ en aquest lloc.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "sol·licituds bloquejades",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "en aquesta pàgina",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} o {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "des de la instal·lació",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "o",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blocat en aquesta pàgina",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blocat des de la instal·lació",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Dominis connectats",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Clic per obrir el tauler de control",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Activa el mode d'eliminació d'elements",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Canvia al mode de selecció d'elements",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Obre el registre d'esdeveniments",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Informeu d'un problema en aquest lloc web",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Commuta el bloqueig de totes les finestres emergents d'aquest lloc",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Feu clic per blocar totes les finestres emergents d'aquest lloc",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Feu clic per desblocar les finestres emergents d'aquest lloc",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Commuta el bloqueig d'elements multimèdia grans per a aquest lloc",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Feu clic per blocar elements multimèdia grans en aquest lloc",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Feu clic per desblocar elements multimèdia grans en aquest lloc",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Commuta els filtres cosmètics d'aquest lloc",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Feu clic per inhabilitar els filtres cosmètics en aquest lloc",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Feu clic per habilitar els filtres cosmètics en aquest lloc",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Commuta el bloqueig de fonts remotes per a aquest lloc",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Feu clic per blocar les fonts remotes en aquest lloc",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Feu clic per desblocar les fonts remotes en aquest lloc",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Feu clic per inhabilitar completament el JavaScript en aquest lloc",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Feu clic per no inhabilitar el JavaScript en aquest lloc",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Finestres emergents",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Elements multimèdia grans",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Filtres cosmètics",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Fonts remotes",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Més",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Menys",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Regles globals: les regles d'aquesta columna s'apliquen a tots els llocs.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Regles locals: les regles d'aquesta columna s'apliquen només al lloc actual.\nLes regles locals anul·len les regles globals.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Feu clic per fer els canvis permanents.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Feu clic per desfer els canvis.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "tot",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "imatges",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "de tercers",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "css/imatges de tercers",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "scripts incrustats",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "scripts",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "scripts de tercers",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "marcs de tercers",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "dominis connectats",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} de {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Versió",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "marc",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Crear",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Escollir",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Sortir",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Vista prèvia",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Filtres de xarxa",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Filtres cosmètics",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Clic, Ctrl+clic",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Bloca l'element",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Amaga els marcadors de posició dels elements blocats",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Mostra el número de peticions blocades a l'icona",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Inhabilita els suggeriments",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Utilitzar el menú contextual quan sigui possible",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Configuració per a persones daltòniques",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Aparença",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Color d'accent personalitzat",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Habilita el suport d'emmagatzematge al núvol",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Sóc un usuari avançat (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>lectura necessària</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Inhabilita la cerca prèvia (per evitar qualsevol connexió de xarxa per a sol·licituds blocades)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Inhabilita l'auditoria de l'enllaç",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Evita que el protocol WebRTC divulgui la IP local",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Comportament per defecte",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Es pot anul·lar el comportament per defecte per a qualsevol web",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Inhabilita els filtres cosmètics",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Bloca els fitxers multimèdia més grans que {{input:number}} kB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Bloca les fonts remotes",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Inhabilita el JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Bloca els informes CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Revela els noms canònics",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Avançat",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Característiques adequades només per a usuaris tècnics",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "configuració avançada",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Darrera restauració:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Darrera còpia de seguretat:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} filtres de xarxa + {{cosmeticFilterCount}} filtres cosmètics de:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} utilitzats de {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Actualitzar automàticament la llista de filtres.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Actualitza ara",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Neteja la memòria caché",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Analitzar i aplicar filtres cosmètics.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "<p>Aquesta opció permet l'anàlisi i l'aplicació dels <a href=\"https://adblockplus.org/en/faq_internal#elemhide\">filtres compatibles amb l'Adblock Plus &ldquo;element hiding&rdquo;</a>. Aquests filtres són principalment cosmètics, que serveixen per amagar elements d'una pàgina web molestos que per defecte no es poden amagar.</p><p>Habilitant aquesta opció augmentarà el consum de memòria de l'<i>µBlock</i>.</p>",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignora els filtres cosmètics genèrics",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "<p>Els filtres cosmètics genèrics són filtres que no s'apliquen a tots els llocs web.<p>Tot i que l'uBlock₀ els gestiona de manera eficient, aquests filtres encara poden contribuir a un augment d'ús de la memòria o sobrecàrrega de la CPU en algunes pàgines web, especialment si tenen molt contingut, elements d'animació o temps real.<p>En habilitar aquesta opció s'elimina el risc de sobrecàrrega a la CPU i excés d'ús de la memòria com a resultat de la manipulació de filtres cosmètics genèrics i també es redueix el consum de memòria de l'uBlock₀.<p>Es recomana habilitar aquesta opció en dispositius poc potents.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspèn l'activitat de la xarxa fins a carregar totes les llistes de filtres",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Llistes de servidors bloquejats",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Aplicar canvis",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Local",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Anuncis",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacitat",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Dominis perillosos",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Elements molestos",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Polivalent",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, llengües",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Personalitzat",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importa...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Una URL per línia. S'ignoraran les línies amb el símbol &lsquo;!&rsquo;. Les URL no vàlides s'ignoraran silenciosament.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Obsolet",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "mostra el contingut",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Darrera actualització: {{ago}}",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "S'està actualitzant...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Un error de xarxa va impedir que s'actualitzés el recurs.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Un filtre per línia. Un filtre pot ser un domini, o un filtre compatible amb l'Adblock Plus. S'ignoraran les línies amb el símbol &lsquo;!&rsquo;.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "No afegiu filtres de fonts no confiables.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importa i annexa",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Exporta",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "ublock-custom-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Aplicar canvis",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Normes permanents",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Normes temporals",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Desfer",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Establir",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Editar",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Desar",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Descartar",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importa des del fitxer...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Exporta a...",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Llista de regles de filtrat dinàmic.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Sintaxi de les regles: <code>origen destinació tipus acció</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>documentació</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Ordena:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Tipus de regla",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Origen",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destinació",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Llistat dels noms de servidor amb que s'inhabilitarà l'µBlock. Una entrada per línia. S'ignoraran els noms de servidor no vàlids.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importa i annexa",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Exporta",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "Llista-blanca-de-l'ublock_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Aplicar canvis",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Tipus",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domini",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filtre",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Tot",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Peticions amagades",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Pestanya actual",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Torna a carregar el contingut de la pestanya",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Commuta l'inspector DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Commuta el menú emergent",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "Wiki - uBlock Origin: L'informe",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Neteja l'informe",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pausa el registre de l'informe (descarta qualsevol data entrant)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Continua creant el registre",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Commuta el filtratge del registre",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtra entrades del registre",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Opcions de filtratge del registre",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Cap",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "important",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blocat",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "permès",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modificat",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "primari",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "de tercers",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Detalls",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filtre",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Llista de filtres",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Regla",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Context",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Context arrel",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Petició",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Tipus",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Filtre dinàmic d'URL",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Context:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Tipus:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Filtre estàtic",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} peticions de la xarxa {{type}} {{br}}amb l'URL coincidint {{url}} {{br}}originada des de {{origin}},{{br}}{{importance}} si és una concordança d'un filtre d'excepció.\nhttps://github.com/gorhill/uBlock/issues/235#issuecomment-109745745.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Bloca",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Permet",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "tipus «{{type}}»",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "de qualsevol tipus",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "des de «{{origin}}»",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "des de qualsevol web",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "excepte",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "fins i tot",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "S'ha trobat el filtre estàtic <code>{{filter}}</code> a:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "No s'ha trobat el filtre estàtic <code>{{filter}}</code> a cap de les llistes de filtres actualment habilitades",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Les entrades del registrador que no compleixin les tres condicions següents es rebutjaran automàticament:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Conserva les entrades dels darrers {{input}} minuts",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Conserva com a màxim {{input}} càrregues de pàgina per pestanya",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Conserva com a màxim {{input}} entrades per pestanya",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Utilitza {{input}} línies per entrada en mode expandit verticalment",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Amaga les columnes:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Temps",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filtre/regla",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Context",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "Petició de {{input}}",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Llista",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Taula",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Text pla",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Obre",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Crea un informe nou",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Cerca d'informes semblants",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentació",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Llegiu la documentació a <code>uBlock/wiki</code> per obtenir informació sobre totes les funcions de l'uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Preguntes i suport",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Les respostes a preguntes i altres tipus d’ajuda es proporcionen al subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Problemes de filtre/lloc web trencat",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Informeu de problemes de filtres amb llocs web específics al <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> rastrejador de problemes</span>. Requereix un compte de GitHub.",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important</b>: eviteu utilitzar altres bloquejadors amb propòsits similars juntament amb l'uBlock Origin, ja que això pot causar problemes de filtratge en llocs web específics.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Consells:</b> Assegureu-vos que les vostres llistes de filtres estiguin actualitzades. <span data-url=\"logger-ui.html#_\">El registrador</span> és l’eina principal per diagnosticar problemes relacionats amb els filtres.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Informe d'errors",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Informeu de problemes amb el propi uBlock Origin al <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> rastrejador de problemes </span>. Requereix un compte de GitHub.",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Informació de resolució de problemes",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "A continuació es mostra informació tècnica que pot ser útil quan els voluntaris intenten ajudar-vos a resoldre un problema.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Per defecte es redacta informació potencialment privada o confidencial. La informació redactada pot dificultar la resolució d'un problema.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Informeu d'un problema de filtre",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Per evitar carregar els voluntaris amb informes duplicats, verifiqueu que el problema encara no s'hagi notificat.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Les llistes de filtres s'actualitzen diàriament. Assegureu-vos que el vostre problema encara no s'hagi resolt amb les llistes de filtres més recents.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Comproveu que el problema encara existeix després de recarregar la pàgina web problemàtica.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Adreça de la pàgina web:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "La pàgina web...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Trieu una entrada --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Mostra anuncis o restes d'anuncis",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Té superposicions o altres errors",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detecta l'uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Té problemes relacionats amb la privadesa",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "No funciona amb l'uBlock Origin habilitat",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Obre pestanyes o finestres no desitjades",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Marca aquesta pàgina com a &ldquo;NSFW&rdquo; (<a href=\"https://ca.wikipedia.org/wiki/NSFW\">&ldquo;No segur per al treball&rdquo;</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redacta",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "No redactis",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Política de privadesa",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Registre de canvis",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Codi font (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Col·laboradors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Codi font",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Traduccions",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Llistat de filtres",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dependències externes (compatibles amb GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Les llistes de filtres pròpies d'uBO s'allotgen lliurement als següents <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "S'utilitzarà un CDN triat a l'atzar quan calgui actualitzar una llista de filtres",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Còpia de seguretat a un fitxer",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Restaura des d'un fitxer...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Restaura als valors per defecte...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "La configuració es sobreescriurà amb la còpia de seguretat del {{time}}, i l'uBlock₀ es reiniciarà.\n\nVoleu restaurar la configuració amb la còpia de seguretat?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Les dades no es poden llegir o no son vàlides",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "La configuració serà suprimida i es reiniciarà l'uBlock₀.\n\nVoleu reiniciar l'uBlock₀ als valors per defecte?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Error de xarxa: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: Voleu afegir aquest URL a la llista de filtres personalitzats?\n\nTítol: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Subscriu-me",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "fa un minut",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "fa {{value}} minuts",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "fa una hora",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "fa {{value}} hores",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "fa un dia",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "fa {{value}} dies",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Mostrar Tauler de control",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Mostra el registre d'esdeveniments",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "desactivat",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Pàgina blocada",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "L'uBlock Origin ha impedit que es carregui la pàgina:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Detectat per aquest filtre",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "sense paràmetres",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Trobat a:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Enrere",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Tanca aquesta finestra",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "No em tornis a avisar sobre aquest lloc",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Inhabilita el blocatge estricte per {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Temporalment",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanentment",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Procedeix",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Exporta a un servei al núvol",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importa des d'un servei al núvol",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importa des del núvol i afegeix a la configuració actual",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Nom d'aquest dispositiu:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Atenció! Canvieu aquestes configuracions avançades sota la vostra responsabilitat.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Envia",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Aplica els canvis",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Desfés",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bytes",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Bloca l'element al marc...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Uniu-vos a la llista de filtres... ",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Permet temporalment els fitxers multimèdia grans",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Mostra el codi font…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Escriviu una drecera",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Commuta el desplaçament blocat",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Copia al porta-retalls",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Selecciona-ho tot",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Commuta els filtres cosmètics",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Mode de bloqueig relaxat",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Emmagatzematge utilitzat: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Clic per carregar",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "No s'ha pogut filtrar correctament en iniciar el navegador.\nTorneu a carregar la pàgina per garantir un filtratge correcte",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Aquesta entrada ha de ser l'última",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/cs/messages.json b/src/_locales/cs/messages.json
new file mode 100644
index 0000000..e25baf5
--- /dev/null
+++ b/src/_locales/cs/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Konečně efektivní blokovač. Nezatěžuje CPU a paměť.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Ovládací panel",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Varování! Máte neuložené změny",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Zůstat",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignorovat",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Nastavení",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filtry třetích stran",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Vaše filtry",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Vaše pravidla",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Povolené domény",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Zkratky",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Protokol požadavků",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "O rozšíření",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Podpora",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Prohlížeč zdrojů",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Pokročilá nastavení",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Kliknutí: trvale zakázat uBlock₀ pro celý tento web.\n\nCtrl+kliknutí: zakázat uBlock₀ pouze pro tuto stránku.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Kliknutí: trvale zakázat uBlock₀ pro celý tento web.\n\nCtrl+kliknutí: zakázat uBlock₀ pouze pro tuto stránku.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Kliknutím povolíte uBlock₀ pro tento web.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "zablokované požadavky",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "na této stránce",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} neboli {{percent}} %",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "od instalace",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "neboli",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Zablokováno na této stránce",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Zablokováno od instalace",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Počet připojených domén",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Otevřít ovládací panel",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Zapnout režim likvidace prvků",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Zapnout režim výběru prvků",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Otevřít protokol požadavků",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Nahlásit problém na této webové stránce",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Přepnout blokování všech vyskakovacích oken na tomto webu",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Kliknutím zablokujete všechny popupy pro tento web",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Kliknutím vypnete blokování všech popupů pro tento web",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Přepnout blokování velkých multimediálních prvků na tomto webu",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Kliknutím zablokujete velké multimediální prvky na tomto webu",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Kliknutím vypnete blokování velkých multimediálních prvků na tomto webu",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Přepnout kosmetické filtrování na tomto webu",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Kliknutím zakážete kosmetické filtrování na tomto webu",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Kliknutím povolíte kosmetické filtrování na tomto webu",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Přepnout blokování vzdálených fontů pro tento web",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Kliknutím zablokujete externí/vzdálené fonty na tomto webu",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Kliknutím vypnete blokování externích/vzdálených fontů na tomto webu",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Kliknutím zakážete JavaScript na této stránce",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Kliknutím znovu povolíte JavaScript na této stránce",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Vyskakovací okna",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Velké multimediální prvky",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Kosmetické filtrování",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Vzdálená písma",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Více",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Méně",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Globální pravidla: tento sloupec slouží pro pravidla, která platí pro všechny weby.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Lokální pravidla: tento sloupec slouží pro pravidla, která platí pouze pro aktuální web.\nLokální pravidla přepisují globální pravidla.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Kliknutím natrvalo uložíte provedené změny.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Kliknutím zrušíte provedené změny.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "vše",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "obrázky",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "z třetí strany",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/obrázky třetích stran",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "řádkové skripty",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "skripty první strany",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "skripty třetích stran",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "rámce třetích stran",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domén připojeno",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} z {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Verze",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "skript",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "rámec",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Vytvořit",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Vybrat",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Ukončit",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Náhled",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Síťové filtry",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Kosmetické filtry",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Kliknutí, Ctrl+Kliknutí",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Zablokovat prvek",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Skrýt zástupné objekty zablokovaných prvků",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Zobrazit počet blokovaných požadavků u ikony",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Skrýt nápovědu při najetí",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Využít kontextovou nabídku kde je to možné",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Styl pro barvoslepé",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Vzhled",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Motiv",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Vlastní barva motivu",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Povolit podporu cloudového úložiště",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Jsem pokročilý uživatel (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>nutno přečíst</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Zakázat přednačítání (zakáže jakékoliv spojení pro zablokované síťové požadavky)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Vypnout auditování hypertextových odkazů",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Předejít úniku lokálních IP adres přes WebRTC",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Výchozí chování",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Tato výchozí chování mohou být přepsána u jednotlivých webů",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Zakázat kosmetické filtrování",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Blokovat multimediální prvky větší než {{input}} kB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Blokovat externí fonty",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Zakázat JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Blokovat CSP reporty",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Odkrýt kanonická jména",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Pokročilé",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Funkce vhodné pouze pro pokročilé uživatele",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "pokročilá nastavení",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Poslední obnova:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Poslední záloha:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} síťových filtrů + {{cosmeticFilterCount}} kosmetických filtrů z:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} použito z celkových {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Automaticky aktualizovat seznamy filtrů.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Aktualizovat nyní",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Vyčistit celou mezipaměť",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Zpracovat a použít kosmetické filtry.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "\nKosmetické filtry slouží ke skrytí prvků na webové stránce, které jsou považovány za vizuálně obtěžující a které nemohou být blokovány filtry na základě síťových volání.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignorovat obecné kosmetické filtry",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Obecné kosmetické filtry jsou takové kosmetické filtry, které jsou určeny k použití na všech webových stránkách. Povolení této možnosti odstraní nadbytečnou režii paměti a procesoru, přidanou na webové stránky v důsledku manipulace s obecnými kosmetickými filtry.\n\nTuto možnost doporučujeme povolit na méně výkonných zařízeních.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Pozastavit síťové aktivity, dokud se nenačtou všechny seznamy filtrů.",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Seznamy blokovaných hostitelů",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Použít změny",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Zabudované",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Reklamy",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Soukromí",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Ochrana před malwarem, bezpečnost",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Dotěrnosti",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Víceúčelové",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regionální, jazykové",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Vlastní",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importovat…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Jedna URL adresa na řádek. Neplatné URL adresy budou tiše ignorovány.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Zastaralé.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "Zobrazit obsah",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Poslední aktualizace: {{ago}}.\nKliknutím vynutíte aktualizaci.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Aktualizuji…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Chyba sítě znemožnila aktualizaci tohoto zdroje.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Jeden filtr na řádek. Filtr může být prostý název hostitele nebo filtr kompatibilní s EasyList. Řádky začínající vykřičníkem <code>!</code> budou ignorovány.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Nepřidávejte filtry z nedůvěryhodných zdrojů.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importovat a připojit…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Exportovat…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "ublock-me-vlastni-filtry_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Použít změny",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Permanentní pravidla",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Dočasná pravidla",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Vrátit",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Potvrdit",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Upravit",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Uložit",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Zrušit",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Načíst ze souboru…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Exportovat do souboru…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "ublock-ma-dynamicka-pravidla_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Seznam vašich pravidel pro dynamické filtrování.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Syntaxe pravidel: <code>zdroj destinace typ akce</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>kompletní dokumentace</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Třídit:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Typ pravidla",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Zdroj",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Cíl",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Pravidla v seznamu povolených domén určují, pro které webové stránky bude uBlock Origin vypnutý. Jedna položka na řádek.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importovat a připojit",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Exportovat",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "ublock-muj-whitelist_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Použít změny",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Typ",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Doména",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filtr",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Všechny stránky",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Za oponou",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Aktivní list",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Znovu načíst obsah listu",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Přepnout DOM inspektor",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Přepnout vyskakovací panel",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: Logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Vyčistit logger",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Zastavit logování (ignorovat všechny příchozí údaje)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Pokračovat v logování",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Přepnout filtrování loggeru",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtrovat obsah loggeru",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Možnosti filtrování loggeru",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Není",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blokováno",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "povoleno",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "upraveno",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "vlastní doména",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "třetí strany",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Podrobnosti",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filtr",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Seznam filtrů",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Pravidlo",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Kontext",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Kořenový kontext",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Strana",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Typ",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Dynamické filtrování URL adres",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Kontext:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Typ:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Statický filtr",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} síťové požadavky {{type}} {{br}}jejichž URL adresa se shoduje s {{url}} {{br}}a pochází {{origin}},{{br}}{{importance}} shodný výjimkový filtr.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Blokovat",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Povolit",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "typu “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "jakéhokoliv typu",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "z “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "odkudkoliv",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "pokud neexistuje",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "i když existuje",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Statický filtr <code>{{filter}}</code> nalezen v seznamech:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Statický filtr <code>{{filter}}</code> nebyl nalezen v žádném aktuálně povoleném seznamu filtrů",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Záznamy logu, které nesplní všechny uvedené podmínky, budou automaticky zahozeny:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Zachovat záznamy z posledních {{input}} minut",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Zachovat nejvýše {{input}} načtení stránky pro list",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Zachovat nejvýše {{input}} záznamů pro list",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Použít {{input}} řádků pro jeden záznam v režimu svislého rozbalení",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Skrýt sloupce:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Čas",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filtr/pravidlo",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Kontext",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} strana",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Seznam",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabulka",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Prostý text",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Otevřít",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Vytvořit nové hlášení",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Vyhledat podobná hlášení",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentace",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Přečtěte si dokumentaci na <code>uBlock/wiki</code>, kde se dozvíte o všech funkcích uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Dotazy a podpora",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Odpovědi na otázky a další druhy podpory jsou poskytovány na subredditu <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Problémy s filtrem/web. stránka je nefunkční",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Hlášení problémů s filtrem u učitých web. stránek do <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. Vyžaduje účet GitHub.",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Důležité:</b> Nepoužívejte podobně zaměřené blokátory s uBlock Origin, může to způsobit problémy s filtry na určitých webových stránkách.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tipy:</b> Ověřte, že jsou seznamy filtrů aktuální. <span data-url=\"logger-ui.html#_\">Protokol</span> je hlavní nástroj pro diagnósu problémů s filtry.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Hlášení chyb",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Hlášení problémů se samotným uBlock Origin na <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. Požaduje účet GitHub.",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Informace o řešení problémů",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Níže jsou technické informace, které mohou být užitečné, když vám dobrovolníci pomáhají vyřešit nějaký problém.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Důležité:</b> Potenciálně soukromé nebo citlivé informace jsou ve výchozím nastavení redigovány. Redigované informace mohou ztížit řešení problému.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Nahlásit problém s filtrem",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Abyste dobrovolníky nezatěžovali duplicitními hlášeními, ověřte si, zda již problém nebyl nahlášen.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Seznamy filtrů jsou aktualizovány denně. Ujistěte se, že váš problém již nebyl vyřešen v nejnovějších seznamech filtrů.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Ověřte, že problém přetrvává i po opětovném načtení problematické webové stránky.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Adresa webové stránky:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Webová stránka…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Vyberte položku --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Zobrazuje reklamy nebo zbytky reklam",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Je překrytá nebo má jiné nedostatky",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detekuje uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Má problémy související se soukromím",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Je rozbitá, když je povolen uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Otevírá nechtěné karty nebo okna",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Označit webovou stránku jako &ldquo;NSFW&rdquo; (<a href=\"https://cs.wikipedia.org/wiki/Not_safe_for_work\">Není bezpečné pro práci&rdquo;)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Upravit",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Odstranit",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Ochrana soukromí",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Přehled změn",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Zdrojový kód (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Přispěvatelé",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Zdrojový kód",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Překlady",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Seznam filtrů",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Externí závislosti (kompatibilní s GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Vlastní seznamy filtrů uBO jsou volně hostovány na následujících <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Při aktualizaci seznamu filtrů se použije náhodně vybraná síť CDN.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Zálohovat do souboru…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ublock-moje-zaloha_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Obnovit ze souboru…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Obnovit výchozí nastavení…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Všechna nastavení budou přepsána těmi zálohovanými {{time}} a uBlock₀ se restartuje.\n\nPřepsat všechna existující nastavení zálohovanými daty?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Data nemohla být načtena nebo jsou neplatná",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Všechna nastavení budou smazána a uBlock₀ se restaruje.\n\nObnovit uBlock₀ do továrního nastavení?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Chyba sítě: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: Přidat následující URL adresu do seznamů vlastních filtrů?\n\nNázev: „{{title}}“\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Odebírat",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "před minutou",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "před {{value}} minutami",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "před hodinou",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "před {{value}} hodinami",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "včera",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "před {{value}} dny",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Zobrazit řídící panel",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Zobrazit Zaznamenávač",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "vypnutý",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Zablokována stránka",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin zabránil následující stránce v načtení:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Kvůli následujícímu filtru",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "bez parametrů",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Nalezeno v:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Jít zpět",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Zavřít toto okno",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Znova mě nevarujte ohladně této stránky",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Zakázat striktní blokování pro {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Dočasně",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Trvale",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Pokračovat",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Exportovat do cloudového úložiště",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importovat z cloudového úložiště",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importovat z cloudového úložiště a sloučit se současným nastavením",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Název tohoto zařízení:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Pozor! Tato pokročilá nastavení měníte na vlastní nebezpečí.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Odeslat",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Použít změny",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Vrátit",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bajtů",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Zablokovat prvek v rámečku…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Přihlásit se k odběru seznamu filtrů ...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Dočasně povolit velké multimediální prvky",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Zobrazit zdrojový kód…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Stiskněte zkratku",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Přepnout uzamčení posuvu",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopírovat do schránky",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Vybrat vše",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Zapnout kosmetické filtrování",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Uvolnit režim blokování",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Využití úložiště: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Klikněte pro načtení",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Chyby: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Nebylo možné správně filtrovat při spuštění prohlížeče.\nNačtěte stránku znovu, abyste zajistili správné filtrování.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/cv/messages.json b/src/_locales/cv/messages.json
new file mode 100644
index 0000000..55f9fb5
--- /dev/null
+++ b/src/_locales/cv/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock₀",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Тинех Интернет тишкерӳҫӗ валли хӑвӑрт та витӗмлӗ чаркӑч пур.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "Йӗркелӳ ҫӳлӗкӗ",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Асӑрха! Санӑн упраман улшӑнусем пур",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Stay here",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignore",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Ӗнерлев",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Ют фильтрсем",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Манӑн фильтрсем",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Манӑн йӗрке",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Trusted sites",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Shortcuts",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Logger",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Сарӑм пирки",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Support",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Asset viewer",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Advanced settings",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Click to enable uBlock₀ for this site.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "requests blocked",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "on this page",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} е {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "since install",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "е",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blocked on this page",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blocked since install",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domains connected",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Йӗркелӳ ҫӳлӗкне уҫма пус",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Enter element zapper mode",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Enter element picker mode",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Open the logger",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Report an issue on this website",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Toggle the blocking of all popups for this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Click to block all popups on this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Click to no longer block all popups on this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Toggle the blocking of large media elements for this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Click to block large media elements on this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Click to no longer block large media elements on this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering for this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Click to disable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Click to enable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Toggle the blocking of remote fonts for this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Click to block remote fonts on this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Click to no longer block remote fonts on this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Click to disable JavaScript on this site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Click to no longer disable JavaScript on this site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Pop-up windows",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Large media elements",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Cosmetic filtering",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Remote fonts",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Тата",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Global rules: this column is for rules which apply to all sites.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Click to make your changes permanent.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Click to revert your changes.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "пурте",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "ӳкерчӗксем",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "ют ресурссем",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "ют css/ӳкерчӗксем",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "inline-скриптсем",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "Харпӑр скриптсем",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "ют скриптсем",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "Ют фреймсем",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domains connected",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} out of {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Version",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Create",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Суйласа ил",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Тух",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Preview",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Network filters",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Cosmetic filters",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Click, Ctrl-click",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Block element…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Hide placeholders of blocked elements",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Show the number of blocked requests on the icon",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Disable tooltips",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Make use of context menu where appropriate",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Color-blind friendly",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Appearance",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Theme",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Custom accent color",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Enable cloud storage support",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Эпӗ ӑста усӑҫ (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>Вуламасӑр иртме ҫук</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Disable pre-fetching (to prevent any connection for blocked network requests)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Disable hyperlink auditing",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Prevent WebRTC from leaking local IP addresses",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Default behavior",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Ку ӗнерлеве кашни сайт валли уйрӑм палӑртма май пур",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Disable cosmetic filtering",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "{{input:number}} КБ йывӑртарах медиа-элементсене чар",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Ют шрифтсене чар",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Disable JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Block CSP reports",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Uncloak canonical names",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Advanced",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Features suitable only for technical users",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "advanced settings",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Юлашки тавӑру:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Last backup:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} used out of {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Auto-update filter lists",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Халех ҫӗнет",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Purge all caches",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Parse and enforce cosmetic filters",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignore generic cosmetic filters",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspend network activity until all filter lists are loaded",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Чарнӑ хостсен йышӗ",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Улшӑнӑва ҫирӗплет",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Built-in",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Реклама",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Вӑрттӑнлӑх",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Malware protection, security",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Нумай тӗллевлисем",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Регионсем, чӗлхесем",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Custom",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Import…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "One URL per line. Invalid URLs will be silently ignored.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Кивелнӗ",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "view content",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Юлашки ҫӗнетӳ: {{ago}}",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Updating…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "A network error prevented the resource from being updated.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with <code>!</code> will be ignored.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Import and append…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Куҫар",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "ublock-custom-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Улшӑнӑва ҫирӗплет",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Яланлӑх йӗрке",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Вӑхӑтлӑх йӗрке",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Тавӑр",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Ҫирӗплет",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Улӑштар",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Упра",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Discard",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Import from file…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Export to file…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "List of your dynamic filtering rules.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Rule syntax: <code>source destination type action</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>full documentation</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sort:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Rule type",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Source",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destination",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Import and append…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Export…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Улшӑнӑва ҫирӗплет",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Тĕсĕ",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Домен",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Фильтр",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Пурте",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Tabless",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Current tab",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Reload the tab content",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Toggle the DOM inspector",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Toggle the popup panel",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: The logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Clear logger",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pause logger (discard all incoming data)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Unpause logger",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Toggle logger filtering",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filter logger content",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Logger filtering options",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Not",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blocked",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "allowed",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modified",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1st-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3rd-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Details",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filter list",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Rule",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Context",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Root context",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partyness",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Type",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "Тӗл",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": " URL динамика фильтрацийӗ",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Контекст:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Тĕсĕ:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Статика фильстрацийӗ",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Чар",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Ирӗк пар",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "тĕсĕ “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "any type",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": " “{{origin}}” ран",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "Кирек ӑҫтан та",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "except when",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "even if",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Static filter <code>{{filter}}</code> found in:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Static filter could not be found in any of the currently enabled filter lists",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Preserve entries from the last {{input}} minutes",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preserve at most {{input}} page loads per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Preserve at most {{input}} entries per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Use {{input}} lines per entry in vertically expanded mode",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Hide columns:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Time",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/rule",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Context",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partyness",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "List",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Table",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Plain",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Open",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Create new report",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Find similar reports",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentation",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Read the documentation at <code>uBlock/wiki</code> to learn about all of uBlock Origin's features.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Questions and support",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter issues/website is broken",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Bug report",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Troubleshooting Information",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Report a filter issue",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Address of the web page:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "The web page…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pick an entry --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shows ads or ad leftovers",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Has privacy-related issues",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Malfunctions when uBlock Origin is enabled",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Opens unwanted tabs or windows",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Улшӑнусен йышӗ",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Пайташсем",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO's own filter lists are freely hosted on the following <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "A randomly picked CDN is used when a filter list needs to be updated.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Back up to file…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Restore from file…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Reset to default settings…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "The data could not be read or is invalid",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Network error: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Subscribe",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "пӗр минут каялла",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} минут каялла",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "пӗр сехет каялла",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} сехет каялла",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "пӗр кун каялла",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} кун каялла",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Йӗркелӳ ҫӳлӗкне кӑтарт",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Show Logger",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "off",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Page blocked",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin has prevented the following page from loading:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Тепӗр фильтра пула",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "ӗнерлевсӗр",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Тупӑннӑ:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Таврӑн",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Close this window",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Disable strict blocking for {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Вӑхӑтлӑха",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Яланлăха",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Export to cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Import from cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Import from cloud storage and merge with current settings",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Ку хатӗрӗн ячӗ:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Warning! Change these advanced settings at your own risk.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Йышӑн",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Apply changes",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Тавӑр",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "байт",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Block element in frame…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subscribe to filter list…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Пысӑк медиа-элементсене вӑхӑтлӑха уҫ",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Type a shortcut",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Toggle locked scrolling",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Copy to clipboard",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Select all",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relax blocking mode",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Storage used: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Click to load",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Ку ҫыру юлашки пулмалла",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/da/messages.json b/src/_locales/da/messages.json
new file mode 100644
index 0000000..7714874
--- /dev/null
+++ b/src/_locales/da/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Endelig en effektiv blocker. Lavt CPU- og hukommelsesforbrug.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Kontrolpanel",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Advarsel! Du har ændringer, der ikke er gemt",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Bliv her",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignorér",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Indstillinger",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filterlister",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Mine filtre",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Mine regler",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Betroede websteder",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Genveje",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Logger",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Om",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Support",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Visning af aktiver",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Avancerede indstillinger",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Klik: Deaktivér/aktivér uBlock₀ på dette websted.\n\nCtrl+klik: Deaktivér kun uBlock₀ på denne side.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Klik for at deaktivere uBlock₀ på dette websted.\n\nCtrl+klik for kun at deaktivere uBlock₀ på denne side.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Klik for at aktivere uBlock₀ på dette websted.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "blokerede forespørgsler",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "på denne side",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} eller {{percent}} %",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "siden installation",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "eller",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blokeret på denne side",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blokeret siden installation",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Tilknyttede domæner",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Åbn kontrolpanelet",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Gå til elementdræber­tilstand",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Gå til elementvælger­tilstand",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Åbn loggeren",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Anmeld et problem med dette websted",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Aktivér/deaktivér blokering af alle popups på dette websted",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Klik for at blokere alle popups på dette websted",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Klik for ikke længere at blokere alle popups på dette websted",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Aktivér/deaktivér blokering af store medieelementer på dette websted",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Klik for at blokere store medieelementer på dette websted",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Klik for ikke længere at blokere store medieelementer på dette websted",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Slå kosmetisk filtrering til/fra for dette websted",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Klik for at slå kosmetisk filtrering fra på dette websted",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Klik for at slå kosmetisk filtrering til på dette websted",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Slå blokeringen af fjernskrifttyper til/fra for dette websted",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Klik for at blokere fjernskrifttyper på dette websted",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Klik for ikke længere at blokere fjernskrifttyper på dette websted",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Klik for at deaktivere JavaScript på dette websted",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Klik for ikke længere at deaktivere JavaScript på dette websted",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Popup-vinduer",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Store medieelementer",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Kosmetisk filtrering",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Fjernskrifttyper",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Mere",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Skjul",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Globale regler: Denne kolonne er til regler gældende alle websteder.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Lokale regler: Denne kolonne er til regler kun gældene dette websted.\nLokale regler tilsidesætter globale regler.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Klik for at gøre dine ændringer permanente.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Klik for at fortryde dine ændringer.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "alle",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "billeder",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "Tredjeparts",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "Tredjeparts CSS/billeder",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "indlejrede scripts",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "Førsteparts-scripts",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "Tredjeparts-scripts",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "Tredjeparts-rammer",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "forbundne domæner",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} af {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Version",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Opret",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Vælg",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Afslut",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Forhåndsvisning",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Netværksfiltre",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Kosmetiske filtre",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Klik, Ctrl-klik",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Blokér element...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Skjul blokerede elementers pladsholdere",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Vis antallet af blokerede forespørgsler på ikonet",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Deaktivér værktøjstips",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Benyt kontekstmenuen, hvor det er relevant",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Optimeret til farveblinde",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Udseende",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Tilpasset fremhævningsfarve",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Aktivér understøttelse for Skylagring",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Jeg er en erfaren bruger",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Deaktivér præindlæsning (for at hindre enhver forbindelse for blokerede netværksanmodninger)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Deaktivér hyperlinkrevision",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Forhindr WebRTC i at lække lokale IP-adresser",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Standardadfærd",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Standardadfærd som disse kan tilsidesættes pr. websted",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Deaktivér kosmetisk filtrering",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Blokér medieelementer større end {{input:number}} kB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Blokér fjernskrifttyper",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Deaktivér JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Blokér CSP-rapporter",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Vis kanoniske navne",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Avanceret",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Funktioner kun egnet til tekniske brugere.",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "avancerede indstillinger",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Seneste gendannelse:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Seneste sikkerhedskopi:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} netværksfiltre + {{cosmeticFilterCount}} kosmetiske filtre fra:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} af {{total}} brugt",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Auto-opdatér filterlister",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Opdatér nu",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Ryd alle caches",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Fortolk og benyt kosmetiske filtre",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Kosmetiske filtre tjener til at skjule elementer på en webside, der anses for at være visuel generende, og som ikke kan blokeres af den netværksanmodningsbaserede filtreringsmotor.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignorér generiske kosmetiske filtre",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generiske kosmetiske filtre er de kosmetiske filtre, der er beregnet til at gælde på alle websteder. Aktivering af denne indstilling vil eliminere hukommelse- og CPU-forbrug, der tilføjes til websider som et resultat af håndtering af generiske kosmetiske filtre.\n\nDet anbefales at aktivere denne indstilling på mindre kraftfulde enheder.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspendér netværksaktivitet, indtil alle filterlister er indlæst",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Liste over blokerede værter",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Effektuér ændringer",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Integreret",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Annoncer",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privatliv",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Malware-beskyttelse, sikkerhed",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Gener",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Universalfiltre",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regioner, sprog",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Tilpasset",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importér...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Én URL pr. linje. Ugyldige URL'er ignoreres uden notificering.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Forældet.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "vis indhold",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Seneste opdatering: {{ago}}.\nKlik for at gennemtvinge en opdatering.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Opdaterer...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "En netværksfejl forhindrede opdatering af ressourcen.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Ét filter pr. linje. Et filter kan være et almindeligt værtsnavn eller et EasyList-kompatibelt filter. Linjer startende med <code>!</code> ignoreres.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Tilføj ikke filtre fra ikke-betroede kilder.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importer og tilføj…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Eksporter…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "mine-ublock-statiske-filtre_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Effektuér ændringer",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Permanente regler",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Midlertidige regler",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Gendan",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Gør permanent",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Redigér",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Gem",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Kassér",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importér fra fil...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Eksporter til fil…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "mine-ublock-dynamiske-regler_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Liste over dine dynamiske filtreringsregler.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Regelsyntaks: <code>kilde destination type handling</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>fuld dokumentation</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sortering:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Regeltype",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Kilde",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destination",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "De betroede webstedsdirektiver dikterer, på hvilke websider uBlock Origin skal deaktiveres. En post pr. linje.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importer og tilføj…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Eksporter…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "mine-ublock-betroede-websteder_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Effektuér ændringer",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Type",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domæne",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Alle",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Bag kulisserne",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Aktuel fane",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Genindlæs faneindholdet",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Slå DOM-inspektøren til/fra",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Slå popup-panelet til/fra",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin-wiki: Loggeren",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Ryd logger",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Sæt logger på pause (ignorér alle indgående data)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Fortsæt logger",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Slå logger-filtrering til/fra",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtrér logindhold",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Logger-filtreringsindstillinger",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Ikke",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "begivenhedsrig",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blokerede",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "tilladte",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "ændret",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "førsteparts",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "tredjeparts",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Detaljer",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filterliste",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Regel",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Kontekst",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Root-kontekst",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partsrelation",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Type",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL-regel",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Kontekst:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Type:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Statisk filtrering",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} netværksanmodninger af {{type}} {{br}}, hvis URL matcher {{url}} {{br}}, og som stammer fra {{origin}},{{br}}{{importance}} når der er et matchende undtagelsesfilter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Blokér",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Tillad",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "type \"{{type}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "enhver type",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "fra \"{{origin}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "fra hvor som helst",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "undtagen når",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "selvom",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Statisk filter <code>{{filter}}</code> fundet i:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Statisk filter kunne ikke findes i nogen af de aktuelt aktiverede filterlister",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Loggerposter, som ikke opfylder alle tre betingelser nedenfor, kasseres automatisk:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Bevar poster fra de seneste {{input}} minutter",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Bevar maks. {{input}} sideindlæsninger pr. fane",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Bevar maks. {{input}} poster pr. fane",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Benyt {{input}} linjer pr. post i lodret udvidet tilstand",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Skjul kolonner:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} tid",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/regel",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Kontekst",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partsrelation",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Liste",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabel",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Enkel",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Åbn",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Opret ny anmeldelse",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Find lign. anmeldelser",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentation",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Læs dokumentationen på <code> uBlock/wiki</code> for at få mere at vide om alle uBlock Origin-funktionerne.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Spørgsmål og Support",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Svar på spørgsmål samt andre former for hjælp/support er tilgængelig via subreddit<code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filterproblemer/websted er ødelagt",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Rapportér filterproblemer med bestemte websteder via <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code>-problemsporing</span>. <u>Kræver en GitHub-konto.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Vigtigt:</b> Undgå brug af andre blockere med lign. formål sammen med uBlock Origin, da dette kan medføre filterproblemer på visse websteder.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tip:</b> Sørg for, at dine filterlister er opdaterede. <span data-url=\"logger-ui.html#_\">Loggeren</span> er det primære værktøj til diagnosticering af filterrelaterede problemer.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Fejlrapport",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Rapportér problemer med selve uBlock Origin via <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> problemsporingen</span>. <u>Kræver en GitHub-konto.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Fejlfindingsinformation",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Nedenfor findes tekniske oplysninger, som kan være nyttige, når frivillige forsøger at hjælpe dig med at løse et problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Vigtigt:</b> Potentielt fortrolige eller sensitive oplysninger bortredigeres som standard, hvilket kan gøre problemløsningen vanskeligere.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Anmeld et filterproblem",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "For at undgå at belaste frivillige med dubletanmeldelser, så tjek venligst, at problemet ikke allerede er anmeldt.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filterlister opdateres dagligt. Sørg for, at problematikken ikke allerede er blevet behandlet i de seneste filterlister.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Bekræft problematikkens fortsatte eksistens efter genindlæsning af den problematiske webside.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Websideadressen",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Websiden...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Vælg problemtype --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Viser annoncer eller annoncerester",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Indeholder overlejringer eller andre gener",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detekterer uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Indeholder fortrolighedsrelaterede problemer",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Ødelægges, når uBlock Origin er aktiveret",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Åbner uønskede faner eller vinduer",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Markér websiden som &ldquo;NSFW&rdquo; (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">&ldquo;Ikke sikker til arbejdsbrug&rdquo;</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Bortredigér",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Bortredigér ikke",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Fortrolighedspolitik",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Ændringslog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Kildekode (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Bidragsydere",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Kildekode",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Oversættelser",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filterlister",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Eksterne afhængigheder (GPLv3-kompatible):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBOs egne filterlister hostes frit på flg. <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN'er</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "En tilfældigt valgt CDN anvendes, når en filterliste kræver opdatering.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Sikkerhedskopiér til fil...",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "min-ublock-sikkerhedskopi_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Gendan fra fil...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Nulstil til standardindstillinger...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Alle dine indstillinger overskreves med data sikkerhedskopieret d. {{time}}, hvorefter uBlock₀ genstarter.\n\nOverskriv aktuelle indstillinger med data fra sikkerhedskopien?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Dataene kunne ikke læses eller er ugyldige",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Alle dine indstillinger fjernes, hvorefter uBlock₀ genstarter.\n\nNulstil uBlock₀ til standardindstillingerne?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Netværksfejl: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Føj følgende URL til dine tilpassede filterlister?\n\nTitel: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Abonnér",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "et minut siden",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} minutter siden",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "en time siden",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} timer siden",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "en dag siden",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} dage siden",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Vis Kontrolpanel",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Vis Logger",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "Slået fra",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Side blokeret",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origins har blokeret flg. side fra at hente:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Grundet flg. filter",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "uden parametre",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Fundet i:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Gå tilbage",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Luk dette vindue",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Advar ikke igen om dette websted",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Deaktivér stringent blokering for {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Midlertidig",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanent",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Fortsæt",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Eksportér til Skylager",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importér fra Skylager",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importér fra Skylager og sammenflet med de aktuelle indstillinger",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Denne enheds navn:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Advarsel! Ændring af disse avancerede indstillinger sker på eget ansvar.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Indsend",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Effektuér ændringer",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Gendan",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bytes",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Blokér element i ramme...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Abonnér på filterliste...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Tillad midlertidigt store medieelementer",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Vis kildekode…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Angiv en genvej",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Slå rullelåsning til/fra",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopiér til Udklipsholder",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Vælg alt",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Kosmetisk filtrering til/fra",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Lemp blokeringstilstand",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Lagerplads brugt: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Klik for at indlæse",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Fejl: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Kunne ikke filtrere korrekt ved webbrowserstart. Genindlæs siden for at sikre korrekt filtrering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Denne post skal være den sidste",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/de/messages.json b/src/_locales/de/messages.json
new file mode 100644
index 0000000..80e8706
--- /dev/null
+++ b/src/_locales/de/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Endlich ein effizienter Blocker, der wenig Prozessorleistung und Arbeitsspeicher verbraucht.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Dashboard",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Warnung! Nicht gespeicherte Änderungen",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Bleiben",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignorieren",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Einstellungen",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filterlisten",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Meine Filter",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Meine Regeln",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Ausnahmeregeln",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Tastenkombinationen",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Protokoll der Netzwerkanfragen",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Über",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Unterstützung",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Ressourcenbetrachter",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Erweiterte Einstellungen",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Klick: uBlock₀ für diese Website ein-/ausschalten.\n\nStrg+Klick: uBlock₀ nur für die aktuelle Seite ausschalten.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Hier klicken, um uBlock₀ für diese Website auszuschalten. \n\nStrg+Klick, um uBlock₀ nur auf dieser Seite auszuschalten.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Hier klicken, um uBlock₀ für diese Website einzuschalten.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "Blockierte Anfragen",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "auf dieser Seite",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}} %)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "seit Installation",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "oder",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Auf dieser Seite blockiert",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Seit der Installation blockiert",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Verbundene Domains",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Dashboard öffnen",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Element temporär entfernen",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Element dauerhaft entfernen",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Protokoll der Netzwerkanfragen öffnen",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Ein Problem mit dieser Website melden",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Pop-ups auf dieser Website blockieren/zulassen",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Hier klicken, um alle Pop-ups auf dieser Website zu blockieren",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Hier klicken, um Pop-ups auf dieser Website wieder zuzulassen",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Große Medienelemente auf dieser Website anzeigen/blockieren",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Hier klicken, um große Medienelemente auf dieser Website zu blockieren",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Hier klicken, um große Medienelemente auf dieser Website wieder zuzulassen",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Kosmetisches Filtern für diese Website ein-/ausschalten",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Hier klicken, um kosmetisches Filtern auf dieser Website zu deaktivieren",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Hier klicken, um kosmetisches Filtern auf dieser Website zu aktivieren",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Externe Schriftarten für diese Website zulassen/blockieren",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Hier klicken, um externe Schriftarten auf dieser Website zu blockieren",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Hier klicken, um externe Schriftarten auf dieser Website wieder zuzulassen",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Hier klicken, um JavaScript auf dieser Website zu deaktivieren",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Hier klicken, um JavaScript auf dieser Website wieder zuzulassen",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Pop-up-Fenster",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Große Medienelemente",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Kosmetisches Filtern",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Externe Schriftarten",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Mehr",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Weniger",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Globale Regeln: Diese Spalte ist für Regeln, die für alle Websites gelten.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Lokale Regeln: Diese Spalte ist für Regeln, die nur für die aktuelle Website gelten.\nLokale Regeln überschreiben globale Regeln.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Hier klicken, um die Änderungen dauerhaft zu übernehmen.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Hier klicken, um die Änderungen rückgängig zu machen.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "Alle Ressourcen",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "Bilder",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "Ressourcen aus Drittquellen",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/Bilder aus Drittquellen",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "Inline-Skripte",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "Skripte dieser Domain",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "Skripte aus Drittquellen",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "Frames aus Drittquellen",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "Verbundene Domains",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} von {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Version",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "Skript",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "Frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Erstellen",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Auswählen",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Beenden",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Vorschau",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Netzwerkfilter",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Kosmetische Filter",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Klick, Strg-Klick",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Element blockieren …",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Platzhalter für blockierte Elemente ausblenden",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Anzahl der blockierten Anfragen auf dem Symbol anzeigen",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Tooltips deaktivieren",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Kontextmenü verwenden, falls verfügbar",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Modus für Farbenblinde",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Erscheinungsbild",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Farbschema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Personalisierte Akzentfarbe",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Unterstützung für Cloud-Speicher aktivieren",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Ich bin technisch versiert",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Vorabruf von Webseiten deaktivieren (um jede Verbindung für blockierte Netzwerkanfragen zu verhindern)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Hyperlink-Überwachung deaktivieren",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Freigabe der lokalen IP-Adresse via WebRTC verhindern",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Standardverhalten",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Dieses Standardverhalten kann für jede Website angepasst werden",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Kosmetisches Filtern deaktivieren",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Medienelemente größer als {{input}} KB blockieren",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Externe Schriftarten blockieren",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "JavaScript deaktivieren",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "CSP-Berichte blockieren",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Kanonische Namen auflösen",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Erweitert",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Funktionen, die nur für technisch Versierte bestimmt sind",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "Erweiterte Einstellungen",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Letzte Wiederherstellung:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Letzte Sicherung:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} Netzwerkfilter + {{cosmeticFilterCount}} kosmetische Filter von:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}}/{{total}} verwendet",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Filterlisten automatisch aktualisieren",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Jetzt aktualisieren",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Alle Caches leeren",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Kosmetische Filter auswerten und anwenden",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Kosmetische Filter dienen dazu, Elemente in einer Webseite auszublenden, die als visuell störend empfunden werden und die von den auf Netzwerkanfragen basierenden Filter-Engines nicht blockiert werden können.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Allgemeine kosmetische Filter ignorieren",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Allgemeine kosmetische Filter sind kosmetische Filter, die auf alle Websites angewendet werden sollen. Das Aktivieren dieser Option verhindert die Mehrbelastung des Arbeitsspeichers und der CPU, die durch das Verarbeiten allgemeiner kosmetischer Filter auf Websites entsteht.\n\nEs wird empfohlen, diese Option auf weniger leistungsfähigen Geräten zu aktivieren.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Netzwerkaktivität unterbrechen, bis alle Filterlisten geladen sind",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Listen blockierter Hostnamen",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Änderungen übernehmen",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "uBlock-eigene Filterlisten",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Werbung",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Datenschutz",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Schutz vor Schadsoftware, Sicherheit",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Belästigungen",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Verschiedene Zwecke",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regionen, Sprachen",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Eigene Filterlisten",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importieren …",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Eine URL pro Zeile. Ungültige URLs werden stillschweigend ignoriert.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "veraltet",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "Inhalt anzeigen",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Letzte Aktualisierung: {{ago}}.\nAktualisierung durch Anklicken erzwingen.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Wird aktualisiert …",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Ein Netzwerkfehler verhinderte die Aktualisierung der Ressource.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Ein Filter pro Zeile. Ein Filter kann ein einfacher Hostname oder ein EasyList-kompatibler Filter sein. Zeilen mit vorangestelltem <code>!</code> werden ignoriert.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Verwenden Sie keine Filter aus unseriösen Quellen.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importieren und anfügen …",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Exportieren …",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "ublock-statische-filter_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Änderungen übernehmen",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Dauerhafte Regeln",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Temporäre Regeln",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Rückgängig machen",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Dauerhaft speichern",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Bearbeiten",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Speichern",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Verwerfen",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Aus Datei importieren …",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "In Datei exportieren …",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "ublock-dynamische-regeln_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Liste eigener dynamischer Filterregeln.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Regelsyntax: <code>Quelle Ziel Typ Aktion</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>Ausführliche Dokumentation</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sortieren:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Regeltyp",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Quelle",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Ziel",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Ausnahmeregeln bestimmen, auf welchen Webseiten uBlock Origin deaktiviert werden soll. Ein Eintrag pro Zeile.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importieren und anfügen …",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Exportieren …",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "ublock-ausnahmeregeln_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Änderungen übernehmen",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Typ",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domain",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Alle",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Hintergrund-Netzwerkanfragen",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Aktueller Tab",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Inhalt des Tabs neu laden",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "DOM-Inspektor ein-/ausschalten",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Pop-up-Fenster ein-/ausblenden",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin-Wiki: Protokoll der Netzwerkanfragen",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Protokoll leeren",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Protokollierung anhalten (alle eingehenden Daten verwerfen)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Protokollierung fortsetzen",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Protokollfilter ein-/ausschalten",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "Protokolleinträge filtern",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Protokollfilteroptionen",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Nicht",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "Ereignisreich",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blockiert",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "zugelassen",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "geändert",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "Aktuelle Domain",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "Ressourcen aus Drittquellen",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Details",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filterliste",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Regel",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Kontext",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Wurzelkontext",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Zugehörigkeit",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Typ",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL-Regel",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Kontext:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Typ:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Statischer Filter",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "Netzwerkanfragen {{type}} {{action}},{{br}}deren URL-Adresse mit {{url}} übereinstimmt{{br}}und von {{origin}} stammen,{{br}}{{importance}} ein übereinstimmender Ausnahmefilter existiert.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "blockieren",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "zulassen",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "vom Typ »{{type}}«",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "aller Typen",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "{{origin}}",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "überall",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "außer wenn",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "selbst wenn",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Statischer Filter <code>{{filter}}</code> gefunden in:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Statischer Filter konnte in keiner der derzeit aktivierten Filterlisten gefunden werden",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Protokolleinträge werden automatisch verworfen, wenn sie nicht alle der drei folgenden Bedingungen erfüllen:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Einträge der letzten {{input}} Minuten beibehalten",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Höchstens {{input}} Seitenladevorgänge pro Tab beibehalten",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Höchstens {{input}} Einträge pro Tab beibehalten",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "{{input}} Zeilen pro Eintrag im vertikal erweiterten Modus verwenden",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Spalten ausblenden:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Uhrzeit",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/Regel",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Kontext",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Zugehörigkeit",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Liste",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabelle",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Einfach",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Öffnen",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Neuen Bericht erstellen",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Ähnliche Berichte suchen",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentation",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Lesen Sie die Dokumentation auf <code>uBlock/wiki</code>, um mehr über alle Funktionen von uBlock Origin zu erfahren.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Fragen und Unterstützung",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Antworten auf Fragen und andere Arten der Hilfe werden im Subreddit <code>/r/uBlockOrigin</code> gegeben.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filterprobleme / Website funktioniert nicht",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Bitte melden Sie Filterprobleme mit bestimmten Websites an den <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> Issue Tracker</span>. <u>Erfordert ein GitHub-Konto.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Wichtig:</b> Vermeiden Sie es, andere ähnliche Blocker zusammen mit uBlock Origin zu verwenden, da dies bei einigen Websites zu Filterproblemen führen kann.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tipp:</b> Vergewissern Sie sich, dass die Filterlisten auf dem aktuellen Stand sind. <span data-url=\"logger-ui.html#_\">Protokoll der Netzwerkanfragen</span> ist das primäre Werkzeug, um filterbezogene Fehler zu diagnostizieren.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Fehlerbericht",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Bitte melden Sie Probleme mit uBlock Origin an den <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> Issue Tracker</span>. <u>Erfordert ein GitHub-Konto.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Informationen zur Fehlerbehebung",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Im Folgenden sind einige technische Informationen aufgeführt, die nützlich sein können, wenn Freiwillige versuchen, bei der Lösung eines Problems zu helfen.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Wichtig:</b> Potenziell private oder sensible Informationen werden standardmäßig unkenntlich gemacht. Unkenntlich gemachte Informationen können das Lösen eines Problems erschweren.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Ein Filterproblem melden",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Um die Freiwilligen nicht mit doppelten Meldungen zu belasten, vergewissern Sie sich bitte, dass das Problem nicht schon einmal gemeldet wurde.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filterlisten werden täglich aktualisiert. Bitte vergewissern Sie sich, dass Ihr Problem nicht durch aktuelle Filterlisten behoben wurde.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Bitte überprüfen Sie, ob das Problem nach dem Neuladen der Webseite weiterhin besteht.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Adresse der Webseite:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Die Webseite …",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Einen Eintrag auswählen --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Zeigt Werbung oder Anzeigenreste",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Enthält Überdeckungen oder andere Belästigungen",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Erkennt uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Hat Datenschutzprobleme",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Funktioniert nicht richtig, wenn uBlock Origin aktiviert ist",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Öffnet unerwünschte Tabs oder Fenster",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Webseite als »NSFW« kennzeichnen (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">»Unpassend für den Arbeitsplatz«</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Unkenntlich machen",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Kenntlich machen",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Datenschutzhinweise",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Änderungsprotokoll",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Quellcode (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Mitwirkende",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Quellcode",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Übersetzungen",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filterlisten",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Externe Abhängigkeiten (GPLv3-kompatibel):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Die uBO-eigenen Filterlisten werden auf den folgenden <a href=\"https://de.wikipedia.org/wiki/Content_Delivery_Network\">CDNs</a> frei zur Verfügung gestellt:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Ein zufällig ausgewähltes CDN wird verwendet, wenn eine Filterliste aktualisiert werden muss.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "In Datei sichern …",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ublock-sicherung_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Aus Datei wiederherstellen …",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Auf Werkseinstellungen zurücksetzen …",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Alle Einstellungen werden überschrieben und auf den Stand vom {{time}} gebracht. Anschließend wird uBlock₀ neu gestartet.\n\nSollen die aktuellen Einstellungen durch die Sicherung ersetzt werden?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Die Daten konnten nicht gelesen werden oder sind ungültig",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Alle Einstellungen werden gelöscht und uBlock₀ wird neu gestartet.\n\nSoll uBlock₀ auf Werkseinstellungen zurückgesetzt werden?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Netzwerkfehler: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Folgende URL zu den eigenen Filterlisten hinzufügen?\n\nTitel: »{{title}}«\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Abonnieren",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "vor einer Minute",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "vor {{value}} Minuten",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "vor einer Stunde",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "vor {{value}} Stunden",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "vor einem Tag",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "vor {{value}} Tagen",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Dashboard anzeigen",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Protokoll der Netzwerkanfragen anzeigen",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "aus",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Seite blockiert",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin hat das Laden der folgenden Seite verhindert:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Aufgrund des folgenden Filters:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "ohne Parameter",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Gefunden in:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Zurück",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Dieses Fenster schließen",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Nicht erneut vor dieser Seite warnen",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Striktes Blockieren für {{hostname}} deaktivieren",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Temporär",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Dauerhaft",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Fortfahren",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "In den Cloud-Speicher exportieren",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Aus dem Cloud-Speicher importieren",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Aus dem Cloud-Speicher importieren und mit den aktuellen Einstellungen zusammenführen",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Name dieses Gerätes:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Warnung! Das Ändern der erweiterten Einstellungen erfolgt auf eigenes Risiko.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Absenden",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Änderungen übernehmen",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Rückgängig machen",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "Bytes",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Element im Frame blockieren …",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Filterliste abonnieren …",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Große Medienelemente temporär zulassen",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Quellcode anzeigen …",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Tastenkombination drücken",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Synchrones Scrollen ein-/ausschalten",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "In die Zwischenablage kopieren",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Alles auswählen",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Kosmetisches Filtern ein-/ausschalten",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Blockiermodus lockern",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Genutzter Speicherplatz: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Zum Laden anklicken",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Fehler: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Beim Start des Browsers konnte nicht richtig gefiltert werden. Bitte die Seite neu laden, um ein korrektes Filtern zu gewährleisten.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Dieser Eintrag muss der letzte sein",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/el/messages.json b/src/_locales/el/messages.json
new file mode 100644
index 0000000..cb8595c
--- /dev/null
+++ b/src/_locales/el/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Επιτέλους, ένας αποτελεσματικός blocker. Ελαφρύς για τον επεξεργαστή και τη μνήμη.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ - Πίνακας ελέγχου",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Προειδοποίηση! Έχετε μη αποθηκευμένες αλλαγές",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Παραμονή",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Παράβλεψη",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Ρυθμίσεις",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Λίστες φίλτρων",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Τα φίλτρα μου",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Οι κανόνες μου",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Έμπιστες τοποθεσίες",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Συντομεύσεις",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ - Καταγραφή αιτημάτων δικτύου",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Σχετικά",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Υποστήριξη",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Προβολή πόρων",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Ρυθμίσεις για προχωρημένους",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Κλικ: απενεργοποίηση/ενεργοποίηση του uBlock₀ για αυτόν τον ιστότοπο.\n\nCtrl+κλικ: απενεργοποίηση του uBlock₀ μόνο για αυτήν την σελίδα.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Κάντε κλικ για απενεργοποίηση του uBlock₀ για αυτήν την ιστοσελίδα.\n\nCtrl+κλικ για απενεργοποίηση του uBlock₀ μόνο σε αυτήν τη σελίδα.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Κάντε κλικ για ενεργοποίηση του uBlock₀ για αυτή την ιστοσελίδα.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "αποκλεισμένα αιτήματα",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "σε αυτήν τη σελίδα",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ή {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "από την εγκατάσταση",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "ή",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Αποκλεισμένα σε αυτή τη σελίδα",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Φραγμένο από εγκατάσταση",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Συνδεδεμένοι τομείς",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Κάντε κλικ για να ανοίξετε τον πίνακα εργαλείων",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Είσοδος σε λειτουργία εκτέλεσης στοιχείων",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Είσοδος στη λειτουργία επιλογής στοιχείων",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Πηγαίνετε στο αρχείο καταγραφής αιτημάτων",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Αναφέρετε ένα πρόβλημα σε αυτόν τον ιστότοπο",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Παρεμπόδιση αναδυόμενων παραθύρων για αυτόν τον ιστότοπο",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Κάντε κλικ για φραγή όλων των αναδυόμενων σε αυτή την ιστοσελίδα",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Κάντε κλικ για φραγή όλων των αναδυόμενων σε αυτή την ιστοσελίδα",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Εναλλαγή της φραγής των μεγάλων στοιχείων πολυμέσων για αυτήν την τοποθεσία",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Κάντε κλικ για αποκλεισμό μεγάλων στοιχείων πολυμέσων σε αυτή την ιστοσελίδα",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Κάντε κλικ για αναίρεση φραγής των μεγάλων στοιχείων πολυμέσων σε αυτή την τοποθεσία",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Ενεργοποιήστε διακοσμητικό φιλτράρισμα για αυτήν τη σελίδα",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Κάντε κλικ για να απενεργοποιήσετε το καλλωπιστικό φιλτράρισμα σε αυτή την τοποθεσία",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Κάντε κλικ για να ενεργοποιήσετε το καλλωπιστικό φιλτράρισμα σε αυτή την τοποθεσία",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Ενεργοποιήστε το μπλοκάρισμα απομακρυσμένων γραμματοσειρών για αυτήν την ιστοσελίδα",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Κάντε κλικ για φραγή απομακρυσμένων γραμματοσειρών σε αυτή την ιστοσελίδα",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Κάντε κλικ για να μην μπλοκάρετε πλέον απομακρυσμένες γραμματοσειρές σε αυτήν την ιστοσελίδα",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Κάντε κλικ για να απενεργοποιήσετε το JavaScript σε αυτήν την ιστοσελίδα",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Κάντε κλικ για να μην απενεργοποιείται πλέον η JavaScript σε αυτή την τοποθεσία",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Αναδυόμενα παράθυρα",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Στοιχεία μεγάλων πολυμέσων",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Καλλωπιστικά φίλτρα",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Απομακρυσμένες γραμματοσειρές",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Περισσότερα",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Λιγότερα",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Καθολικοί κανόνες: αυτή η στήλη είναι για κανόνες με εφαρμογή σε όλες τις τοποθεσίες.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Τοπικοί κανόνες: αυτή η στήλη είναι για κανόνες με εφαρμογή στην τρέχουσα τοποθεσία μόνο.\nΟι τοπικοί κανόνες παραμερίζουν τους καθολικούς κανόνες.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Πατήστε για να κάνετε τις αλλαγές σας μόνιμες.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Πατήστε για να αντιστρέψετε τις αλλαγές σας.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "όλα",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "Εικόνες",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "πόροι ιστότοπων τρίτων",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/Εικόνες τρίτων",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "inline scripts",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "scripts τρέχοντος ιστότοπου",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "scripts ιστότοπων τρίτων",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "frames ιστότοπων τρίτων",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "συνδεδεμένοι τομείς",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} από {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Έκδοση",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "δέσμη ενεργειών",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "πλαίσιο",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Δημιουργία",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Επιλογή",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Κλείσιμο",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Προεπισκόπηση",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Φίλτρα δικτύου",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Κοσμητικά φίλτρα",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Κλικ, Ctrl-κλικ",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Φραγή στοιχείου...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Απόκρυψη κρατημένων πεδίων από αποκλεισμένα στοιχεία",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Εμφάνιση του αριθμού αποκλεισμένων αιτημάτων στο εικονίδιο",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Απενεργοποίηση υποδείξεων",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Να γίνεται χρήση του αναδυόμενου μενού, όπου ενδείκνυται",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Λειτουργία φιλική προς χρήστες με αχρωματοψία",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Εμφάνιση",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Θέμα",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Προσαρμοσμένο χρώμα έμφασης",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Ενεργοποίηση υποστήριξης cloud storage",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Είμαι προχωρημένος χρήστης (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>Aπαραίτητη ανάγνωση</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Απενεργοποίηση προ-φόρτωσης (για να αποτραπεί κάθε σύνδεση σε αποκλεισμένες αιτήσεις δικτύου)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Απενεργοποίηση ελέγχου/διόπτευσης υπερσυνδέσμων",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Αποτρέψτε το WebRTC από το να διαρρέει την τοπική διεύθυνση IP",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Προεπιλεγμένη συμπεριφορά",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Αυτές οι προεπιλεγμένες συμπεριφορές μπορούν να παρακαμφθούν ανά τοποθεσία",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Απενεργοποίηση διακοσμητικού φιλτραρίσματος",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Φραγή στοιχείων πολυμέσων μεγαλύτερων από {{input:number}} kB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Φραγή απομακρυσμένων γραμματοσειρών",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Απενεργοποίηση JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Φραγή αναφορών CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Ξεσκέπασμα/εμφάνιση κανονικών ονομάτων CNAME",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Για προχωρημένους",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Χαρακτηριστικά κατάλληλα μόνο για τεχνικούς χρήστες.",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "ρυθμίσεις για προχωρημένους",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Τελευταία ανάκτηση:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Τελευταίο αντίγραφο ασφαλείας:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} φίλτρα δικτύου+ {{cosmeticFilterCount}} κοσμητικά φίλτρα από:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} σε χρήση από {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Αυτόματη ενημέρωση λιστών φίλτρων.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Ενημέρωση τώρα",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Εκκαθάριση προσωρινής μνήμης κάθε λίστας",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Ανάλυση και επιβολή κοσμητικών φίλτρων.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Τα καλλωπιστικά φίλτρα χρησιμεύουν για να κρύβουν εκείνα τα στοιχεία σε μια ιστοσελίδα που οπτικά θεωρούνται ενοχλητικά, και τα οποία δεν μπορούν να αποκλειστούν με τις μηχανές φιλτραρίσματος που βασίζονται σε αιτήματα δικτύου.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Παράβλεψη γενικών κοσμητικών φίλτρων",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "<p>Τα γενικά κοσμητικά φίλτρα είναι εκείνα τα κοσμητικά φίλτρα που εφαρμόζονται σε όλες τις ιστοσελίδες.<p>Αν και γίνεται αποτελεσματική διαχείρισή τους από το uBlock₀, τα γενικά κοσμητικά φίλτρα ενδέχεται να καταναλώσουν σημαντική μνήμη και να υπερφορτώσουν τη CPU σε μερικές ιστοσελίδες, ειδικά για μεγάλες μακροχρόνιες.<p>Η ενεργοποίηση αυτής της επιλογής θα εξαλείψει την υπερφόρτωση μνήμης και CPU στις ιστοσελίδες ως αποτέλεσμα της διαχείρισης γενικών κοσμητικών φίλτρων, ενώ ενδέχεται να μειώσει την κατανάλωση μνήμης του ίδιου του uBlock₀.<p>Προτείνεται η ενεργοποίηση αυτής της επιλογής στις λιγότερο ισχυρές συσκευές.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Αναστολή της δραστηριότητας δικτύου μέχρι να φορτωθούν όλες οι λίστες φίλτρων",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Λίστες αποκλεισμένων hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Εφαρμογή αλλαγών",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Τοπικά",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Διαφημίσεις",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Ιδιωτικό απόρρητο",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Τομείς κακόβουλου λογισμικού",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Ενοχλήσεις",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Πολλαπλών χρήσεων",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Περιοχές, γλώσσες",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Προσαρμοσμένη",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Εισαγωγή...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Ένα URL ανά γραμμή. Γραμμές με το πρόθεμα &lsquo;!&rsquo; θα παραβλέπονται. Άκυρα URL θα παρακάμπτονται σιωπηλά.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "απαρχαιωμένη.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "εμφάνιση περιεχομένου",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Τελευταία ενημέρωση: {{ago}}.\nΚάντε κλικ για επιβολή ενημέρωσης.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Ενημέρωση...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Ένα σφάλμα δικτύου εμπόδισε την ενημέρωση του πόρου.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Ένα φίλτρο ανά γραμμή. Ένα φίλτρο μπορεί να είναι ένα απλό όνομα κεντρικού υπολογιστή ή ένα φίλτρο συμβατό με την EasyList. Οι γραμμές με πρόθεμα <code>!</code> θα παραβλέπονται.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Να μην προστίθενται φίλτρα από μη αξιόπιστες πηγές.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Εισαγωγή και προσάρτηση",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Εξαγωγή",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "τα-στατικά-ublock-φίλτρα-μου_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Εφαρμογή αλλαγών",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Μόνιμοι κανόνες",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Προσωρινοί κανόνες",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Επαναφορά",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Επικύρωση",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Επεξεργασία",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Αποθήκευση",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Απόρριψη",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Εισαγωγή από αρχείο…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Εξαγωγή σε αρχείο…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "οι-δυναμικοί-ublock-κανόνες-μου_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Λίστα δυναμικών κανόνων φιλτραρίσματος.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Συντακτικό κανόνων: <code>προέλευση προορισμός τύπος ενέργεια</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>πλήρης τεκμηρίωση</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Ταξινόμηση:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Τύπος κανόνα",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Προέλευση",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Προορισμός",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Η λίστα σας με τα ονόματα κόμβων (host names) στα οποία το uBlock θα είναι απενεργοποιημένο. Μια καταχώρηση ανά γραμμή. Άκυρα ονόματα κόμβων θα παρακάμπτονται σιωπηλά.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Εισαγωγή και προσάρτηση",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Εξαγωγή",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "ublock-έμπιστες-τοποθεσίες_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Εφαρμογή αλλαγών",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Τύπος",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Τομέας",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Φίλτρο",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Όλα",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Παρασκήνιο",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Τρέχουσα καρτέλα",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Επαναφόρτωση του περιεχόμενου της καρτέλας",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Εναλλαγή του επιθεωρητή DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Εναλλαγή του αναδυόμενου πίνακα",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: Ο καταγραφέας",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Καθαρισμός καταγραφέα",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Παύση καταγραφέα (απόρριψη όλων των εισερχόμενων δεδομένων)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Κατάργηση παύσης καταγραφέα",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Εναλλαγή φίλτρου καταγραφέα",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "φιλτράρισμα των καταχωρήσεων",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Ρυθμίσης φιλτραρίσματος καταγραφέα",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Δεν",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "μπλοκαρισμένο",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "επιτρέπεται",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "επεξεργασμένο",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "Πρωτομερής",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "Τριτομερής",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Λεπτομέρειες",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Φίλτρο",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Λίστα φίλτρων",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Κανόνας",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Συμφραζόμενα",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Πλαίσιο ρίζας",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Μέρος αιτήματος",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Τύπος",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Κανόνας URL",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Περιεχόμενο:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Τύπος:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Στατικό φιλτράρισμα",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} τα δικτυακά αιτήματα {{type}} {{br}} των οποίων η διεύθυνση ταιριάζει με {{url}} {{br}} και προέρχεται από {{origin}},{{br}}{{importance}} υπάρχει ένα ταιριαστό φίλτρο για εξαίρεση.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Φραγή",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Αποδοχή",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "τύπος “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "οποιοσδήποτε τύπος",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "από “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "από οπουδήποτε",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "εκτός όταν",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "ακόμη και αν",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Στατικό φίλτρο <code>{{filter}}</code> βρέθηκε σε:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Το στατικό φίλτρο δεν βρέθηκε σε καμία από τις λίστες φίλτρων που έχουν ενεργοποιηθεί αυτήν τη στιγμή",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Οι καταχωρίσεις στον καταγραφέα που δεν εκπληρούν και τις τρεις συνθήκες θα απορρίπτονται αυτόματα:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Διατηρήσε καταχωρήσεις από τα {{input}} τελευταία λεπτά",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Διατηρήσε το πολύ {{input}} page loads ανά καρτέλα",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Διατηρήσε το πολύ {{input}} καταχωρήσεις ανά καρτέλα",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Χρησιμοποιήστε {{input}} γραμμές ανά καταχώριση σε κατακόρυφη λειτουργία",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Απόκρυψη στηλών:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Ώρα",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Φίλτρο/κανόνας",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Περιεχόμενο",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} μέρος αιτήματος",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Λίστα",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Πίνακας",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Απλό",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Άνοιγμα",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Δημιουργία νέας αναφοράς",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Βρείτε παρόμοιες αναφορές",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Οδηγίες",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Διαβάστε τις οδηγίες στο <code>uBlock/wiki</code> για να μάθετε για όλες τις δυνατότητες του uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Ερωτήσεις και υποστήριξη",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Απαντήσεις σε ερωτήσεις και άλλα είδη υποστήριξης βοήθειας παρέχονται στο subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Προβλήματα φίλτρου/ιστότοπος είναι κατεστραμμένος",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Αναφέρετε προβλήματα φίλτρου με συγκεκριμένους ιστότοπους στο <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. Απαιτείται λογαριασμός GitHub.",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Σημαντικό:</b> Αποφύγετε τη χρήση άλλων blocker με παρόμοιο σκοπό μαζί με το uBlock Origin, καθώς αυτό μπορεί να προκαλέσει προβλήματα φιλτραρίσματος σε συγκεκριμένους ιστότοπους.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Συμβουλές:</b> Βεβαιωθείτε ότι οι λίστες φίλτρων σας είναι ενημερωμένες. <span data-url=\"logger-ui.html#_\">Ο καταγραφέας</span> είναι το κύριο εργαλείο για τη διάγνωση προβλημάτων που σχετίζονται με το φίλτρο.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Αναφορά σφαλμάτων",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Αναφέρετε προβλήματα με το ίδιο το uBlock Origin στο <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. Απαιτείται λογαριασμός GitHub.",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Πληροφορίες αντιμετώπισης προβλημάτων",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Παρακάτω υπάρχουν τεχνικές πληροφορίες που μπορεί να είναι χρήσιμες όταν εθελοντές προσπαθούν να σας βοηθήσουν να λύσετε ένα πρόβλημα.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Σημαντικό:</b> Πιθανώς ιδιωτικές ή ευαίσθητες πληροφορίες αναπροσαρμόζονται από προεπιλογή. Οι αναδιατυπωμένες πληροφορίες ενδέχεται να δυσκολέψουν την επίλυση ενός προβλήματος.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Αναφέρετε ένα πρόβλημα φίλτρου",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Για να αποφύγετε την επιβάρυνση των εθελοντών με διπλές αναφορές, βεβαιωθείτε ότι το ζήτημα δεν έχει ήδη αναφερθεί.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Οι λίστες φίλτρων ενημερώνονται καθημερινά. Βεβαιωθείτε ότι το πρόβλημά σας δεν έχει ήδη αντιμετωπιστεί στις πιο πρόσφατες λίστες φίλτρων.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Βεβαιωθείτε ότι το πρόβλημα εξακολουθεί να υπάρχει μετά τη φόρτωση εκ νέου της προβληματικής ιστοσελίδας.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Διεύθυνση της ιστοσελίδας:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Η ιστοσελίδα...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Επιλέξτε μια καταχώρηση --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Εμφανίζει διαφημίσεις ή υπολείμματα διαφημίσεων",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Έχει επικαλύψεις ή άλλες ενοχλήσεις",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Ανιχνεύει το uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Έχει ζητήματα που σχετίζονται με το απόρρητο",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Μη λειτουργικό όταν το uBlock Origin είναι ενεργοποιημένο",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Ανοίγει ανεπιθύμητες καρτέλες ή παράθυρα",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Επισημάνετε την ιστοσελίδα ως &ldquo;NSFW&rdquo; (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">&ldquo;Not Safe For Work&rdquo;</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Πολιτική απορρήτου",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Αρχείο καταγραφής αλλαγών",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Πηγαίος κώδικας (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Συνεισφέροντες",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Πηγαίος κώδικας",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Μεταφράσεις",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Λίστες φίλτρων",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Εξωτερικές εξαρτήσεις (συμβατές με GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Οι λίστες φίλτρων του uBO φιλοξενούνται ελεύθερα στα ακόλουθα <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Ένα τυχαία επιλεγμένο CDN χρησιμοποιείται όταν πρέπει να ενημερωθεί μια λίστα φίλτρων",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Δημιουργία αντιγράφου ασφαλείας σε αρχείο...",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "το-ublock-αντίγραφο-ασφαλείας-μου_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Επαναφορά από αρχείο…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Επαναφορά στις προεπιλεγμένες ρυθμίσεις…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Όλες οι ρυθμίσεις σας θα αντικατασταθούν χρησιμοποιώντας τα δεδομένα του αντιγράφου ασφαλείας που δημιουργήθηκε κατά ημ/νία και ώρα: {{time}} και θα ακολουθήσει επανεκκίνηση του uBlock.",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Τα δεδομένα ήταν αδύνατο να αναγνωστούν ή είναι άκυρα",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Όλες οι ρυθμίσεις σας θα καταργηθούν και θα γίνει επανεκκίνηση του uBlock.\n\nΕπαναφορά του uBlock στις εργοστασιακές ρυθμίσεις;",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Σφάλμα δικτύου: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Προσθήκη της ακόλουθης διεύθυνσης URL στις λίστες προσαρμοσμένων φίλτρων σας;\n\nΤίτλος: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Εγγραφή",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "πριν από ένα λεπτό",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "πριν από {{value}} λεπτά",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "πριν από μια ώρα",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "πριν από {{value}} ώρες",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "πριν από μια ημέρα",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "πριν από {{value}} ημέρες",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Προβολή Πίνακα Εργαλείων",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Προβολή Αρχείου Καταγραφών Αιτημάτων Δικτύου",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "απενεργοποιημένο",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Η σελίδα αποκλείστηκε",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "Το uBlock₀ έχει αποτρέψει τη φόρτωση της παρακάτω σελίδας:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Εξαιτίας του ακόλουθου φίλτρου",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "χωρίς παραμέτρους",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Βρέθηκε σε:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Επιστροφή",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Κλείσιμο του παραθύρου",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Να μην προειδοποιηθώ ξανά για αυτόν τον ιστότοπο",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Απενεργοποίηση αυστηρής φραγής για το {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Προσωρινά",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Μόνιμα",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Συνέχεια",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Εξαγωγή στο cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Εισαγωγή από cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Εισαγωγή αποθηκευμένων στο νέφος ρυθμίσεων και συγχώνευση στις τρέχουσες ρυθμίσεις",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Όνομα αυτής της συσκευής:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Προειδοποίηση! Αλλάξτε αυτές τις ρυθμίσεις για προχωρημένους με δική σας ευθύνη.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Υποβολή",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Εφαρμογή αλλαγών",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Επαναφορά",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bytes",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Στοιχείο μπλοκ στο πλαίσιο...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Εγγραφή σε λιστα φιλτρων",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Να επιτρέπονται προσωρινά μεγάλα στοιχεία πολυμέσων",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Προβολή πηγαίου κώδικα…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Πληκτρολογήστε μια συντόμευση",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Εναλλαγή κλειδώματος ολίσθησης",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Αντιγραφή στο πρόχειρο",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Επιλογή όλων",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Εναλλαγή διακοσμητικού φιλτραρίσματος",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Χαλάρωση κατάστασης φραγής",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Χώρος σε χρήση: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Κάντε κλικ για φόρτωση",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Σφάλματα: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Δεν ήταν δυνατό το σωστό φιλτράρισμα κατά την εκκίνηση του προγράμματος περιήγησης.\nΦορτώστε ξανά τη σελίδα για να διασφαλίσετε το σωστό φιλτράρισμα",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Αυτή η καταχώρηση θα πρέπει να είναι τελευταία",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json
new file mode 100644
index 0000000..b894121
--- /dev/null
+++ b/src/_locales/en/messages.json
@@ -0,0 +1,1292 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Finally, an efficient blocker. Easy on CPU and memory.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Dashboard",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Warning! You have unsaved changes",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Stay here",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignore",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Settings",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filter lists",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "My filters",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "My rules",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Trusted sites",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Shortcuts",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Logger",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "About",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Support",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Asset viewer",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Advanced settings",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Click to enable uBlock₀ for this site.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "requests blocked",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "on this page",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "since install",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "or",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blocked on this page",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blocked since install",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domains connected",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Enter element zapper mode",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Enter element picker mode",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Open the logger",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Report an issue on this website",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Toggle the blocking of all popups for this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Click to block all popups on this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Click to no longer block all popups on this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Toggle the blocking of large media elements for this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Click to block large media elements on this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Click to no longer block large media elements on this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering for this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Click to disable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Click to enable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Toggle the blocking of remote fonts for this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Click to block remote fonts on this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Click to no longer block remote fonts on this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Click to disable JavaScript on this site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Click to no longer disable JavaScript on this site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Pop-up windows",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Large media elements",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Cosmetic filtering",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Remote fonts",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Global rules: this column is for rules which apply to all sites.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Click to make your changes permanent.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Click to revert your changes.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "all",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "images",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "3rd-party",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "3rd-party CSS/images",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "inline scripts",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1st-party scripts",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "3rd-party scripts",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "3rd-party frames",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domains connected",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} out of {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Version",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Create",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Pick",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Quit",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Preview",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Network filters",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Cosmetic filters",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Click, Ctrl-click",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Block element…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Hide placeholders of blocked elements",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Show the number of blocked requests on the icon",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Disable tooltips",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Make use of context menu where appropriate",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Color-blind friendly",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Appearance",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Theme",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Custom accent color",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Enable cloud storage support",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "I am an advanced user",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Disable pre-fetching (to prevent any connection for blocked network requests)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Disable hyperlink auditing",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Prevent WebRTC from leaking local IP addresses",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Default behavior",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "These default behaviors can be overridden on a per-site basis",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Disable cosmetic filtering",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Block media elements larger than {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Block remote fonts",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Disable JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Block CSP reports",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Uncloak canonical names",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Advanced",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Features suitable only for technical users",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "advanced settings",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Last restore:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Last backup:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} used out of {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Auto-update filter lists",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Update now",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Purge all caches",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Parse and enforce cosmetic filters",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignore generic cosmetic filters",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspend network activity until all filter lists are loaded",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Built-in",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Malware protection, security",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multipurpose",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Custom",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Import…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "One URL per line. Invalid URLs will be silently ignored.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Out of date.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "view content",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Last update: {{ago}}.\nClick to force an update.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Updating…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "A network error prevented the resource from being updated.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with <code>!</code> will be ignored.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Import and append…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Export…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Permanent rules",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Temporary rules",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Revert",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Commit",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Edit",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Save",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Discard",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Import from file…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Export to file…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "List of your dynamic filtering rules.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Rule syntax: <code>source destination type action</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>full documentation</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sort:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Rule type",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Source",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destination",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Import and append…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Export…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Type",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domain",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "All",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Tabless",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Current tab",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Reload the tab content",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Toggle the DOM inspector",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Toggle the popup panel",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: The logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Clear logger",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pause logger (discard all incoming data)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Unpause logger",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Toggle logger filtering",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filter logger content",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Logger filtering options",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Not",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blocked",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "allowed",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modified",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1st-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3rd-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Details",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filter list",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Rule",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Context",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Root context",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partyness",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Type",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL rule",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Context:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Type:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Static filter",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Block",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Allow",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "type “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "any type",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "from “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "from anywhere",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "except when",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "even if",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Static filter <code>{{filter}}</code> found in:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Static filter could not be found in any of the currently enabled filter lists",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Preserve entries from the last {{input}} minutes",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preserve at most {{input}} page loads per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Preserve at most {{input}} entries per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Use {{input}} lines per entry in vertically expanded mode",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Hide columns:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Time",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/rule",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Context",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partyness",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "List",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Table",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Plain",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+
+ "supportOpenButton": {
+ "message": "Open",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Create new report",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Find similar reports",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentation",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Read the documentation at <code>uBlock/wiki</code> to learn about all of uBlock Origin's features.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Questions and support",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter issues/website is broken",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Bug report",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Troubleshooting Information",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Report a filter issue",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Address of the web page:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "The web page…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pick an entry --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shows ads or ad leftovers",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Has privacy-related issues",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Malfunctions when uBlock Origin is enabled",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Opens unwanted tabs or windows",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO's own filter lists are freely hosted on the following <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "A randomly picked CDN is used when a filter list needs to be updated.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Back up to file…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Restore from file…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Reset to default settings…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "The data could not be read or is invalid",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Network error: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Subscribe",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "a minute ago",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} minutes ago",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "an hour ago",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} hours ago",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "a day ago",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} days ago",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Show Dashboard",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Show Logger",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "off",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Page blocked",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin has prevented the following page from loading:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Because of the following filter:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "without parameters",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Found in:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Go back",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Close this window",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Disable strict blocking for {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Temporarily",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanently",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Export to cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Import from cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Import from cloud storage and merge with current settings",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "This device name:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Warning! Change these advanced settings at your own risk.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Submit",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Apply changes",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Revert",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bytes",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Block element in frame…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subscribe to filter list…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Temporarily allow large media elements",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Type a shortcut",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Toggle locked scrolling",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Copy to clipboard",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Select all",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relax blocking mode",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Storage used: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Click to load",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/en_GB/messages.json b/src/_locales/en_GB/messages.json
new file mode 100644
index 0000000..cb79ea5
--- /dev/null
+++ b/src/_locales/en_GB/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Finally, an efficient blocker. Easy on CPU and memory.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Dashboard",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Warning! You have unsaved changes",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Stay",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignore",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Settings",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filter lists",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "My filters",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "My rules",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Trusted sites",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Shortcuts",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Logger",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "About",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Support",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Asset viewer",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Advanced settings",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Click to enable uBlock₀ for this site.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "requests blocked",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "on this page",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "since install",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "or",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blocked on this page",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blocked since install",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domains connected",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Enter element zapper mode",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Enter element picker mode",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Open the logger",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Report an issue on this website",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Toggle the blocking of all pop-ups for this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Click to block all pop-ups on this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Click to no longer block all pop-ups on this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Toggle the blocking of large media elements for this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Click to block large media elements on this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Click to no longer block large media elements on this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering for this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Click to disable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Click to enable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Toggle the blocking of remote fonts for this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Click to block remote fonts on this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Click to no longer block remote fonts on this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Click to disable JavaScript on this site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Click to no longer disable JavaScript on this site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Pop-up windows",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Large media elements",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Cosmetic filtering",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Remote fonts",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Global rules: this column is for rules which apply to all sites.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Click to make your changes permanent.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Click to revert your changes.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "all",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "images",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "3rd-party",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "3rd-party CSS/images",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "inline scripts",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1st-party scripts",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "3rd-party scripts",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "3rd-party frames",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domains connected",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} out of {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Version",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Create",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Pick",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Quit",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Preview",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Network filters",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Cosmetic filters",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Click, Ctrl-click",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Block element…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Hide placeholders of blocked elements",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Show the number of blocked requests on the icon",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Disable tooltips",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Make use of context menu where appropriate",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Colour-blind friendly",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Appearance",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Theme",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Custom accent colour",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Enable cloud storage support",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "I am an advanced user",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Disable pre-fetching (to prevent any connection for blocked network requests)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Disable hyperlink auditing",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Prevent WebRTC from leaking local IP addresses",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Default behaviour",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "These default behaviours can be overridden on a per-site basis",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Disable cosmetic filtering",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Block media elements larger than {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Block remote fonts",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Disable JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Block CSP reports",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Uncloak canonical names",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Advanced",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Features suitable only for technical users",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "advanced settings",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Last restore:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Last backup:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} used out of {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Auto-update filter lists",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Update now",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Purge all caches",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Parse and enforce cosmetic filters",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which cannot be blocked by the network request-based filtering engines.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignore generic cosmetic filters",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspend network activity until all filter lists are loaded",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Built-in",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multi-purpose",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Custom",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Import…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "One URL per line. Invalid URLs will be silently ignored.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Out of date.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "view content",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Last update: {{ago}}.\nClick to force an update.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Updating…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "A network error prevented the resource from being updated.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with <code>!</code> will be ignored.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Import and append",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Export",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Permanent rules",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Temporary rules",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Revert",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Commit",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Edit",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Save",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Discard",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Import from file…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Export to file",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "List of your dynamic filtering rules.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Rule syntax: <code>source destination type action</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>full documentation</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sort:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Rule type",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Source",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destination",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Import and append",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Export",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Type",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domain",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "All",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Tabless",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Current tab",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Reload the tab content",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Toggle the DOM inspector",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Toggle the pop-up panel",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: The logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Clear logger",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pause logger (discard all incoming data)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Unpause logger",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Toggle logger filtering",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filter logger content",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Logger filtering options",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Not",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blocked",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "allowed",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modified",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1st-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3rd-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Details",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filter list",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Rule",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Context",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Root context",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partyness",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Type",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL rule",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Context:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Type:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Static filter",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Block",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Allow",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "type “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "any type",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "from “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "from anywhere",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "except when",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "even if",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Static filter <code>{{filter}}</code> found in:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Static filter could not be found in any of the currently enabled filter lists",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Logger entries which do not fulfil all three conditions below will be automatically discarded:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Preserve entries from the last {{input}} minutes",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preserve at most {{input}} page loads per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Preserve at most {{input}} entries per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Use {{input}} lines per entry in vertically expanded mode",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Hide columns:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Time",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/rule",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Context",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partyness",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "List",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Table",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Plain",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Open",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Create new report",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Find similar reports",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentation",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Read the documentation at <code>uBlock/wiki</code> to learn about all of uBlock Origin's features.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Questions and support",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter issues/website is broken",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Bug report",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Troubleshooting Information",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Report a filter issue",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Address of the web page:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "The web page…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pick an entry --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shows ads or ad leftovers",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Has privacy-related issues",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Malfunctions when uBlock Origin is enabled",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Opens unwanted tabs or windows",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO's own filter lists are freely hosted on the following <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "A randomly picked CDN is used when a filter list needs to be updated",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Back up to file",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Restore from file…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Reset to default settings…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "The data could not be read or is invalid",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Network error: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Subscribe",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "a minute ago",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} minutes ago",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "an hour ago",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} hours ago",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "a day ago",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} days ago",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Show Dashboard",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Show Logger",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "off",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Page blocked",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin has prevented the following page from loading:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Because of the following filter:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "without parameters",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Found in:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Go back",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Close this window",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Disable strict blocking for {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Temporarily",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanently",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Export to cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Import from cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Import from cloud storage and merge with current settings",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "This device name:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Warning! Change these advanced settings at your own risk.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Submit",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Apply changes",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Revert",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bytes",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Block element in frame…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subscribe to filter list…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Temporarily allow large media elements",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Type a shortcut",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Toggle locked scrolling",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Copy to clipboard",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Select all",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relax blocking mode",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Storage used: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Click to load",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/eo/messages.json b/src/_locales/eo/messages.json
new file mode 100644
index 0000000..6e63e04
--- /dev/null
+++ b/src/_locales/eo/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Finfine rendimenta reklamoblokilo. Afabla por ĉefprocesoro kaj memoro.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Panelo",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Averto! Vi havas nekonservitajn ŝanĝojn",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Resti",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignori",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Agordoj",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Listoj de filtriloj",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Miaj filtriloj",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Miaj reguloj",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Permeslisto",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Alirklavoj",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Protokolilo",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Pri",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Subteno",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Montrilo de rimedoj",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Altgradaj agordoj",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Klako: malŝalti/ŝalti uBlock₀ por ĉi tiu retejo.\n\nCtrl+klako: malŝalti uBlock₀ nur en ĉi tiu paĝo.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Alklaku premante la stirklavo por malŝalti uBlock₀ nur en tiu ĉi retejo.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Alklaku por aktivigi uBlock₀ en tiu ĉi retejo.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "blokitaj petoj",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "en ĉi tiu paĝo",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} aŭ {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "ekde instalado",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "aŭ",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blokita ĉe ĉi tiu paĝo",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blokita ekde instalo",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Konektitaj domajnoj",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Klaku por malfermi la panelon",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Eniri la reĝimon de forigo de elementoj",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Malfermi reĝimon de elementoselektilo",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Malfermi la protokolilon",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Raporti problemon ĉe ĉi tiu retejo",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Baskuligi la blokadon de ŝprucfenestroj por ĉi tiu retejo",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Alklaku por bloki ĉiujn ŝprucfenestrojn en tiu ĉi retejo",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Alklaku por ne plu bloki ĉiujn ŝprucfenestrojn en tiu ĉi retejo",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Baskuligi la blokadon de grandaj aŭdvideaj elementoj por ĉi tiu retejo",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Alklaku por bloki grandajn aŭdvidajn elementojn en tiu ĉi retejo",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Alklaku por ne plu bloki grandajn aŭdvidajn elementojn en tiu ĉi retejo",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Baskuligi ornaman filtradon por ĉi tiu retejo",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Alklaku por malaktivigi kosmetikan filtradon en tiu ĉi retejo",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Alklaku por aktivigi kosmetikan filtradon en tiu ĉi retejo",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Baskuligi la blokadon de foraj tiparoj por ĉi tiu retejo",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Alklaku por bloki forajn tiparojn en tiu ĉi retejo",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Alklaku por ne plu bloki forajn tiparojn en tiu ĉi retejo",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Alklaku por malaktivigi JavaScript en tiu ĉi retejo",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Alklaku por ne plu malaktivigi JavaScript en tiu ĉi retejo",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Ŝprucfenestroj",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Grandaj aŭdvidaj elementoj",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Ornama filtrado",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Foraj tiparoj",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Pli",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Malpli",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Ĝeneralaj reguloj: ĉi tiu kolumno estas por reguloj, kiuj aplikas al ĉiuj retejoj.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Lokaj reguloj: ĉi tiu kolumno estas por reguloj, kiuj aplikas nur al la nuna retejo.\nLokaj reguloj transpasas ĝeneralajn regulojn.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Klaku por fari viajn ŝanĝojn konstante.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Klaku por malfari viajn ŝanĝojn.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "ĉio",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "bildoj",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "De eksteraj liverantoj",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/bildoj de eksteraj liverantoj",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "entekstaj skriptoj",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "Skriptoj de propraj liverantoj",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "Skriptoj de eksteraj liverantoj",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "Kadroj de eksteraj liverantoj",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "konektitaj domajnoj",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} de {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Versio",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "skripto",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "kadro",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Krei",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Elekti",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Forlasi",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Antaŭrigardo",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Retaj filtriloj",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Ornamaj filtriloj",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Klako, Stir-klako",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Bloki elementon",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Kaŝi lokokupilojn de blokitaj elementoj",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Montri la nombron de la blokitaj petoj sur la bildsimbolo",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Malŝalti butonajn informojn",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Uzi kuntekstan menuon laŭeble",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Afabla por kolorblinduloj",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Aspekto",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Etoso",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Propra akcenta koloro",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Ŝalti subtenon por nelokdependa konservado",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Mi estas sperta uzanto",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Malŝalti antaŭvenigadon (por preventi ajnan konekton de blokitaj retaj petoj)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Malŝalti ekzamenadon de ligiloj",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Preventi likado de WebRTC de lokaj IP-adresoj",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Norma konduto",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Oni povas superregi la normajn kondutojn depende de la retejo",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Malŝalti ornaman filtradon",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Bloki aŭdvideajn elementojn pli granda ol {{input:number}} kB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Bloki forajn tiparojn",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Malŝalti JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Bloki CSP-raportojn",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Malkaŝi ĉefnomojn",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Altnivelaĵoj",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Funkcioj taŭgaj nur por spertuloj",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "altgradaj agordoj",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Lasta restaŭro:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Lasta savkopio:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} retaj filtriloj kaj {{cosmeticFilterCount}} ornamaj filtriloj de:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} estas uzita de {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Ĝisdatigi listojn de filtriloj aŭtomate.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Ĝisdatigi nun",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Malplenigi ĉiujn kaŝmemorojn",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Analizi kaj eltrudi ornamajn filtrilojn.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "<p>Ĉi tiu opcio ŝaltas la analizadon kaj eltrudadon de la <a href=\"https://adblockplus.org/en/faq_internal#elemhide\">Adblock Plus-kongruaj &ldquo;elementokaŝadaj&rdquo; filtriloj</a>. Ĉi tiuj filtriloj estas nur ornama kaj servas por kaŝi elementojn en retpaĝoj kiuj estas opiniite vidaj ĝenaĵoj kaj ne blokeblaj de la reta peta filtrado.</p><p>Ŝalti ĉi tiun trajton pligrandigas la memoruzadon de uBlock₀.</p>",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignori ĝeneralajn ornamajn filtrilojn",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspend network activity until all filter lists are loaded",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Apliki ŝanĝojn",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Interna",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Reklamoj",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privateco",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Domajno kun fiprogramaro",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Ĝenoj",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Plurcela",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regionoj, lingvoj",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Tajlorita",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importi...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Unu regulo por ĉiu linio. Prefiksitaj linioj kun &lsquo;!&rsquo; estos ignorataj. Nevalidaj ligiloj estos ignorataj silente.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "malaktuala",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "vidi enhavon",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Lasta ĝisdatigo: {{ago}}",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Ĝisdatigo...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Reta eraro malhelpis ĝisdatigon de la resurso.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Unu filtrilo por ĉiu linio. Filtrilo povas esti ordinara gastignomo aŭ Adblock Plus-kongrua filtrilo. Prefiksitaj linioj kun &lsquo;!&rsquo; estos ignorataj.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importi kaj postaldoni",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Eksporti",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "miaj-statikaj-ublock-filtriloj_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Apliki ŝanĝojn",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Daŭraj reguloj",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Nedaŭraj reguloj",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Malfari",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Apliki",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Redakti",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Konservi",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Nuligi",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importi el dosiero...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Eksporti al dosiero",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "miaj-dinamikaj-ublock-reguloj_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Listo de viaj dinamikaj filtradaj reguloj.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Sintakso de reguloj: <code>fonto celo tipo ago</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>kompleta dokumentado</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Ordigi:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Speco de regulo",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Fonto",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Celo",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Via listo de gastignomoj por kiuj uBlock₀ estos malŝaltata. Unu gastignomo por ĉiu linio. Nevalidaj gastignomoj estos ignorataj silente.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importi kaj postaldoni",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Eksporti",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "mia-ublock-blanklisto_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Apliki ŝanĝojn",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Tipo",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domajno",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "Ligilo",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filtrilo",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Ĉio",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Fonaj petoj",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Nuna langeto",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Reŝargi la langetan enhavon",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Baskuligi la DOM-inspektilon",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Baskuligi la ŝprucpanelon",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "Dokumentaro de uBlock Origin: la protokolilo",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Klariĝi protokolilon",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Paŭzigi protokolilon (forĵeti ĉiujn envenantajn datenojn)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Malpaŭzigi protokolilon",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Baskuligi filtradon de protokolilo",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtri protokolerojn",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Opcioj pri filtrado de protokolilo",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Ne",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blokita",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "permesata",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modifita",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "rekta",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "nerekta",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Detaloj",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filtrilo",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Listo de filtriloj",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Regulo",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Kunteksto",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Ĉefa kunteksto",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Nivelo de rekteco",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Tipo",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "Retadreso",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Dinamika filtrado de ligiloj",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Kunteksto:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Tipo:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Statika filtrado",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} retaj petoj de {{type}} {{br}}kiu ligilo estas la sama kiel {{url}} {{br}}kaj kiu devenas el {{origin}},{{br}}{{importance}} estas kongrua escepta filtrilo.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Bloki",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Permesi",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "tipo “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "ajna tipo",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "de “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "de ie ajn",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "krom se",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "eĉ se",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Statika filtrilo <code>{{filter}}</code> estas trovita en:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Static filter could not be found in any of the currently enabled filter lists",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Preserve entries from the last {{input}} minutes",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preserve at most {{input}} page loads per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Preserve at most {{input}} entries per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Use {{input}} lines per entry in vertically expanded mode",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Kaŝi kolumnojn:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} tempo",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} filtrilo/regulo",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} kunteksto",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} rekteco",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Listo",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabulo",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Simpla",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Malfermi",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Krei novan raporton",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Serĉi similajn raportojn",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentaro",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Legu la dokumentaron ĉe <code>uBlock/wiki</code> por lerni ĉiujn funkciojn de uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Demandoj kaj subtenado",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Problemoj pri filtrilo / la retejo misfunkcias",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Raportu problemojn pri specifaj retejoj ĉe la <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\">cimspurilo <code>uBlockOrigin/uAssets</code></span>. <u>Tio postulas konton ĉe GitHub.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Raporto pri cimo",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Raportu problemojn pri uBlock Origin mem ĉe la <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\">cimspurilo <code>uBlockOrigin/uBlock-issue</code></span>. <u>Tio postulas konton ĉe GitHub.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Informoj pri problemsolvado",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Jen teknikaj informoj eble utilaj al tiuj volontuloj, kiuj helpas vin solvi problemon.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Raporti problemon pri filtrado",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Adreso de la retpaĝo:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "La retpaĝo…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Elektu ion --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Montras reklamojn aŭ restaĵojn de reklamoj",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Havas plustavolojn aŭ aliajn ĝenaĵojn",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detektas uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Havas problemojn pri privateco",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Misfunkcias, se uBlock Origin estas ŝaltita ",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Malfermas nedeziratajn langetojn aŭ fenestrojn",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Marki la paĝon kiel «<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">nelabortaŭgan</a>»",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Reguloj pri privateco",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Ŝanĝoprotokolo",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Fontkodo (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Kontribuantoj",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Fontkodo",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Tradukoj",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Listoj de filtriloj",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Eksteraj dependaĵoj (kongruaj kun GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "La proprajn filtrilojn de uBO gastigas la jenaj <a href=\"https://en.wikipedia.org/wiki/Content_delivery_network\">enhavo-liverantaj retoj</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Kiam filtrilo postulas ĝisdatigon, hazarde elektita enhavo-liveranta reto estas uzata.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Savkopii al dosiero",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "mia-ublock-savkopio_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Restaŭri el dosiero...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Remeti normajn agordojn...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Ĉiuj viaj agordoj estos anstataŭigitaj per via savkopio kreita je {{time}} kaj uBlock₀ restartigos.\n\nĈu vi volas anstataŭigi ĉiujn de viaj ekzistantaj agordoj uzita la savkopio?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "La datumoj ne legeblas aŭ ĝi estas nevalida",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Ĉiuj viaj agordoj estos forigita kaj uBlock₀ restartigos.\n\nĈu vi volas reagordi uBlock₀ al la defaŭltaj agordoj?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "{{url}} ne konekteblas",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: Ĉu vi volas aldoni la sekvan ligilon al viaj tajloritaj listoj de filtriloj?\n\nTitolo: \"{{title}}\"\nLigilo: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Sekvi",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "antaŭ 1 minuto",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "antaŭ {{value}} minutoj",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "antaŭ 1 horo",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "antaŭ {{value}} horoj",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "antaŭ 1 tago",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "antaŭ {{value}} tagoj",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Montri panelon",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Montri protokolilon",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "ne aktiva",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Paĝo blokita",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock₀ preventis la ŝarĝadon de la sekva paĝo:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Pro la sekva filtrilo",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "sen parametroj",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Trovita en:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Reen",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Fermi ĉi tiun fenestron",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Malŝalti striktan blokadon por {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Nedaŭra",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Daŭra",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Procedi",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Eksporti al nuba konservado",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importi el nuba konservado",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importi el nuba konservado kaj kunfandi kun nunaj agordoj",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Nomo de ĉi tiu aparato:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Averto! Tiuj altnivelaj opcioj esta eble danĝeraj.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Sendi",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Apliki ŝanĝojn",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Malfari",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bajtoj",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Bloki elementon en kadro…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Aboni filtrilon…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Permesi grandajn aŭdvideajn elementojn nedaŭre",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Vidi fontkodon...",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Tajpu alirklavon",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Baskuligi ŝlositan rulumadon",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopii al tondujo",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Elekti ĉiujn",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Baskuligi ornaman filtradon",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Malstriktigi blokadan reĝimon",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Uzata memoro: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "kB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Alklaku por ŝarĝi",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Eraroj: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/es/messages.json b/src/_locales/es/messages.json
new file mode 100644
index 0000000..17652b9
--- /dev/null
+++ b/src/_locales/es/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Por fin, un bloqueador eficiente con uso mínimo de procesador y memoria.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Panel de control",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "¡Atención! Tienes cambios sin guardar",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Conservar",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignorar",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Configuración",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Listas de filtros",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Mis filtros",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Mis reglas",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Sitios de confianza",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Atajos",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Registro de peticiones",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Acerca de",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Soporte",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Visor de recursos",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Configuración avanzada",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Clic: deshabilitar/habilitar uBlock₀ en este sitio.\n\nCtrl+clic: deshabilitar uBlock₀ solo en esta página.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Clic para deshabilitar uBlock₀ en este sitio.\n\nCtrl+clic para deshabilitar uBlock₀ solo en esta página.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Clic para habilitar uBlock₀ en este sitio.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "peticiones bloqueadas",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "en esta página",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} o {{percent}} %",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "desde que se instaló",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "o",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Bloqueado en esta página",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Bloqueado desde que se instaló",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Dominios conectados",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Abrir panel de control",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Entrar al modo eliminación de elementos",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Entrar al modo selección de elementos",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Ir al registro de peticiones",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Reportar un problema en este sitio web",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Alternar bloqueo de todas las ventanas emergentes en este sitio",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Clic para bloquear todas las ventanas emergentes en este sitio",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Clic para no bloquear más todas las ventanas emergentes en este sitio",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Alternar bloqueo de elementos multimedia grandes en este sitio",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Clic para bloquear elementos multimedia grandes en este sitio",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Clic para no bloquear más elementos multimedia grandes en este sitio",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Alternar el filtrado cosmético en este sitio",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Clic para deshabilitar el filtrado cosmético en este sitio",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Clic para habilitar el filtrado cosmético en este sitio",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Alternar bloqueo de fuentes remotas en este sitio",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Clic para bloquear fuentes remotas en este sitio",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Clic para no bloquear más fuentes remotas en este sitio",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Clic para deshabilitar JavaScript en este sitio",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Clic para no deshabilitar más JavaScript en este sitio",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Ventanas emergentes",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Elementos multimedia grandes",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Filtrado cosmético",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Fuentes remotas",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Más",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Menos",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Reglas globales: las reglas en esta columna se aplican a todos los sitios.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Reglas locales: las reglas en esta columna se aplican solo al sitio actual.\nLas reglas locales anulan las reglas globales.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Haz clic para hacer tus cambios permanentes.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Haz clic para revertir tus cambios.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "todo",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "imágenes",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "peticiones de terceros",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/imágenes de terceros",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "scripts integrados",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "scripts del dominio",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "scripts de terceros",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "frames de terceros",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "dominios conectados",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} de {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Versión",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Crear",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Elegir",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Salir",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Vista previa",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Filtros de red",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Filtros cosméticos",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Clic, Ctrl-clic",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Bloquear elemento…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Ocultar marcadores de posición de los elementos bloqueados",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Mostrar el número de peticiones bloqueadas en el icono",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Deshabilitar las descripciones emergentes",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Hacer uso del menú contextual cuando sea posible",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Accesible para daltónicos",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Apariencia",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Tono de color personalizado",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Habilitar almacenamiento en la nube",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Soy usuario avanzado",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Deshabilitar pre-carga de sitios (previene cualquier conexión para peticiones de red bloqueadas)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Deshabilitar auditoría de hipervínculos",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Impedir que WebRTC divulgue la dirección IP local",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Comportamiento predeterminado",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Es posible anular el comportamiento predeterminado para cada sitio",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Deshabilitar el filtrado cosmético",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Bloquear elementos multimedia mayores que {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Bloquear fuentes remotas",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Deshabilitar JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Bloquear reportes CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Desvelar nombres canónicos",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Avanzado",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Características aptas solo para usuarios técnicos",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "configuración avanzada",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Última restauración:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Último respaldo:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} filtros de red y {{cosmeticFilterCount}} filtros cosméticos de:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} utilizados de {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Actualizar automáticamente las listas de filtros",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Actualizar ahora",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Vaciar todas las memorias caché",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Analizar y aplicar filtros cosméticos",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Los filtros cosméticos sirven para ocultar elementos que se consideran una molestia visual en una página web, y que no pueden ser bloqueados por los motores de filtrado basados ​​en peticiones de red.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignorar los filtros cosméticos genéricos",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Los filtros cosméticos genéricos son aquellos filtros cosméticos que se aplican a todos los sitios web. Al habilitar esta opción se elimina el riesgo de sobrecarga a la CPU y exceso de uso de la memoria que resulta del procesamiento de los filtros cosméticos genéricos.\n\nSe recomienda habilitar esta opción en dispositivos poco potentes.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspender actividad de la red hasta que todas las listas de filtros estén cargadas",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lista de dominios bloqueados",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Aplicar cambios",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Incluidos",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Anuncios",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacidad",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Protección de malware, seguridad",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Elementos molestos",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multiusos",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regiones, idiomas",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Personalizado",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importar…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Una URL por línea. Las URL no válidas serán ignoradas.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Desactualizado.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "ver contenido",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Última actualización: {{ago}}.\nHaz clic para actualizar ahora.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Actualizando…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Un error de red impide que se actualicen los recursos.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Un filtro por línea. El filtro puede ser un nombre de dominio, o un filtro compatible con EasyList. Las líneas que comiencen con <code>!</code> serán ignoradas.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "No añadir filtros de fuentes no confiables.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importar y anexar…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Exportar…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "ublock-mis-filtros-estaticos_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Aplicar cambios",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Reglas permanentes",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Reglas temporales",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Revertir",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Establecer",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Editar",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Guardar",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Descartar",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importar desde archivo…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Exportar a archivo…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "ublock-mis-reglas-dinamicas_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Lista de tus reglas de filtrado dinámico.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Sintaxis de las reglas: <code>origen destino tipo acción</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>documentación completa</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Ordenar:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Tipo de regla",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Fuente",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destino",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Sitios de confianza para los cuales se deshabilitará uBlock Origin. Una entrada por línea.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importar y anexar…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Exportar…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "ublock-mis-sitios-de-confianza_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Aplicar cambios",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Tipo",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Dominio",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filtro",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Todo",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Sin pestaña",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Pestaña actual",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Recargar contenido de la pestaña",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Alternar el inspector DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Alternar el panel emergente",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: Registro de peticiones",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Borrar el registro de peticiones",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pausar registro de peticiones (descarta todos los datos entrantes)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Continuar con el registro de peticiones",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Alternar el filtrado del registro de peticiones",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtrar contenido",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Opciones de filtrado del registro de peticiones",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "No",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "destacado",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "bloqueado",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "permitido",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modificado",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "petición del dominio",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "petición de tercero",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Detalles",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filtro",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Lista de filtros",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Regla",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Contexto",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Contexto raíz",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Tipo de petición",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Tipo",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Regla de URL",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Contexto:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Tipo:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Filtro estático",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} peticiones de red de {{type}} {{br}}cuya dirección URL contenga {{url}} {{br}}y que se origine {{origin}},{{br}}{{importance}} exista una regla de excepción aplicable.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Bloquear",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Permitir",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "tipo “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "cualquier tipo",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "desde “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "desde cualquier lugar",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "excepto cuando",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "incluso cuando",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Filtro estático <code>{{filter}}</code> encontrado en:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "No se pudo encontrar el filtro estático en ninguna de las listas de filtros actualmente habilitadas",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Las entradas del registro de peticiones que no cumplan las tres condiciones a continuación se descartarán automáticamente:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Conservar entradas de los últimos {{input}} minutos",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Conservar como máximo {{input}} cargas de página por pestaña",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Conservar como máximo {{input}} entradas por pestaña",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Usar {{input}} líneas por entrada en modo expandido verticalmente",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Ocultar columnas:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Hora",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filtro/regla",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Contexto",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Tipo de petición",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Lista",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabla",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Sin formato",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Formato markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Abrir",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Crear nuevo reporte",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Encontrar reportes similares",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentación",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Lee la documentación en <code>uBlock/wiki</code> para aprender sobre todas las características de uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Preguntas y soporte",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Respuestas a preguntas y otros tipos de ayuda se proporcionan en el sub-reddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Problemas de filtros/sitio web roto",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Reportar problemas de filtros con sitios web específicos en el registro de problemas <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code></span>. <u>Requiere una cuenta en GitHub</u>.",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Importante:</b> evita utilizar otros bloqueadores con propósito similar junto con uBlock Origin, ya que esto puede causar problemas de filtros en sitios web específicos.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Consejos:</b> asegúrate de que tus listas de filtros estén actualizadas. El <span data-url=\"logger-ui.html#_\">registro de peticiones</span> es la principal herramienta para diagnosticar problemas relacionados con los filtros.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Reportar error",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Reportar problemas con uBlock Origin en el registro de problemas <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code></span>. <u>Requiere una cuenta en GitHub</u>.",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Información para solucionar problemas",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "A continuación encontrarás información técnica que puede ser útil cuando los voluntarios intenten ayudarte a resolver un problema.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Importante:</b> la información potencialmente privada o sensible se redacta de forma predeterminada. La información redactada puede dificultar la resolución de un problema.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Reportar un problema de filtro",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Para evitar sobrecargar a voluntarios con reportes duplicados, verifica que el problema no haya sido reportado.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Las listas de filtros se actualizan diariamente. Asegúrate de que tu problema no haya sido abordado en las listas de filtros más recientes.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verifica que el problema aún exista después de recargar la página web problemática.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Dirección de la página web:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "La página web…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Elige una entrada --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Muestra anuncios o restos de anuncios",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Tiene superposiciones u otras molestias",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detecta uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Tiene problemas relacionados con la privacidad",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Se rompe cuando uBlock Origin está habilitado",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Abre pestañas o ventanas no deseadas",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Etiquetar la página web como “NSFW” (<a href=\"https://es.wikipedia.org/wiki/NSFW\">“no es seguro/apropiado para el trabajo”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redactar",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Sin redactar",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Política de privacidad",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Registro de cambios",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Código fuente (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Colaboradores",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Código fuente",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Traducciones",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Listas de filtros",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dependencias externas (compatibles con GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Las listas de filtros propias de uBO se alojan de forma gratuita en las siguientes <a href=\"https://es.wikipedia.org/wiki/Red_de_distribuci%C3%B3n_de_contenidos\">CDN</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Se utilizará una CDN elegida al azar cuando sea necesario actualizar una lista de filtros.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Respaldar en archivo…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ublock-mi-respaldo_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Restaurar desde archivo…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Restablecer ajustes predeterminados…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Toda la configuración se sobrescribirá utilizando datos respaldados en {{time}} y uBlock₀ se reiniciará.\n\n¿Sobrescribir toda la configuración existente utilizando los datos de respaldo?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Los datos no se pueden leer o no son válidos",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Se borrará todas tus configuraciones y uBlock₀ se reiniciará.\n\n¿Restablecer uBlock₀ a la configuración predeterminada?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Error de red: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "¿Deseas añadir la siguiente URL a tus listas de filtros personalizados?\n\nTítulo: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Suscribirse",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "hace un minuto",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "hace {{value}} minutos",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "hace 1 hora",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "hace {{value}} horas",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "hace un día",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "hace {{value}} días",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Mostrar panel de control",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Mostrar registro de peticiones",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "deshabilitado",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Página bloqueada",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin impidió la carga de la página:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Como resultado del siguiente filtro:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "sin parámetros",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Encontrado en:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Regresar",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Cerrar esta ventana",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "No me adviertas de nuevo sobre este sitio",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Deshabilitar bloqueo estricto para {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Temporalmente",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanentemente",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Continuar",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Exportar datos a la nube",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importar datos de la nube",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importar desde la nube y anexar a la configuración actual",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Nombre de este dispositivo:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "¡Atención! Cambia estas configuraciones avanzadas bajo tu propio riesgo.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Enviar",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Aplicar cambios",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Revertir",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bytes",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Bloquear elemento en frame…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Suscribirse a lista de filtros…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Permitir temporalmente elementos multimedia grandes",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Ver código fuente…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Escribe un atajo",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Alternar bloqueo de desplazamiento",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Copiar al portapapeles",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Seleccionar todo",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Alternar filtrado cosmético",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Modo de bloqueo relajado",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Almacenamiento usado: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Clic para cargar",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errores: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "No se puede filtrar correctamente al iniciar el navegador. Recarga la página para garantizar el filtrado correcto.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Esta entrada debe ser la última",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/et/messages.json b/src/_locales/et/messages.json
new file mode 100644
index 0000000..07d5abd
--- /dev/null
+++ b/src/_locales/et/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Lõpuks on valminud tõhus blokeerija. Protsessori- ja mälusõbralik.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Töölaud",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Hoiatus! Sul on salvestamata muutusi",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Jää lehele",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Eira",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Seaded",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filtriloendid",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Minu filtrid",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Minu reeglid",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Usaldatud saidid",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Kiirklahvid",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Logija",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Teave",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Tugi",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — vara vaatur",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Täpsemad seaded",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Klõps: keela/luba uBlock₀ sellel saidil.\n\nCtrl+klõps: keela uBlock₀ ainult sellel lehel.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Klõpsa, et keelata uBlock₀ sellel saidil.\n\nCtrl+klõps, et keelata uBlock₀ ainult sellel lehel.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Klõpsa, et lubada uBlock₀ sellel saidil.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "blokeeritud taotlusi",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "sellel lehel",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} või {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "paigaldamise algusest",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "või",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Sellel lehel blokeeritud",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Paigaldamise algusest blokeeritud",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domeene ühendatud",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Ava töölaud",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Sisene elemendi hävitusrežiimi",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Sisene elemendi valikuolekusse",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Ava logija",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Teavita selle veebilehe probleemist",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Keela hüpikaknad sellel saidil",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Klõpsa, et keelata kõik hüpikaknad sellel saidil",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Klõpsa, et lõpetada hüpikakende keelamine sellel saidil",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Lülita mahukate meediaelementide blokeerimine siin saidil sisse/välja",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Klõpsa, et keelata mahukad meediaelemendid sellel saidil",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Klõpsa, et lõpetada mahukate meediaelementide keelamine sellel saidil",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Keela ilufiltrid sellel saidil",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Klõpsa, et keelata ilufiltrid sellel saidil",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Klõpsa, et lubada ilufiltrid sellel saidil",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Luba väliste fontide blokeerimine sellel saidil",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Klõpsa, et keelata välisfondid sellel saidil",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Klõpsa, et lõpetada välisfontide keelamine sellel saidil",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Klõpsa, et keelata JavaScript sellel saidil",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Klõpsa, et lõpetada sellel saidil JavaScripti keelamine",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Hüpikaknad",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Suured meediaelemendid",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Ilufiltrid",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Välised fondid",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Rohkem",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Vähem",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Üldised reeglid: selle veeru reeglid kehtivad kõikidele saitidele.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Kohalikud reeglid: selle veeru reeglid kehtivad ainult praegusele saidile.\nKohalikud reeglid kirjutavad üldised reeglid üle.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Klõpsa, et teha oma muudatused püsivaks.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Klõpsa, et võtta muudatused tagasi.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "kõik",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "pildid",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "3. osapool",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "3. osapoole CSS/pildid",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "tekstisisesed skriptid",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1. osapoole skriptid",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "3. osapoole skriptid",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "3. osapoole raamid",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "ühendatud domeene",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}}/{{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Versioon",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "skript",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "raam",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Loo",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Vali",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Välju",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Eelvaade",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Võrgufiltrid",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Ilufiltrid",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Klõps, Ctrl-klõps",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Blokeeri element...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Peida blokeeritud elementide asukohad",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Kuva ikoonil blokeeritud elementide arv",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Keela näpunäited",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Kasuta sobivusel kontekstmenüüd",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Värvipimeduse-sõbralik",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Välimus",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Teema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Kohandatud rõhuvärv",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Luba pilves hoiustamise tugi",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Olen kogenud kasutaja",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Keela eellaadimine (et vältida ühendusi blokeeritud võrgutaotlustele)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Keela hüperlingi auditeerimine",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Tõkesta WebRTC'l kohalike IP-aadresside lekitamist",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Vaikeväärtused",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Neid vaikeväärtusi saab saitide põhiselt eraldi määrata",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Keela ilufiltrid",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Blokeeri meediaelemendid, mis on suuremad kui {{input}} kB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Keela välised fondid",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Keela JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Keela lehe turvareeglite (CSP-de) aruanded",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Kanooniliste nimede tuvastamine",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Täpsemad",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Funktsioonid, mis on sobilikud vaid tehnikas pädevatele kasutajatele.",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "täpsemad seaded",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Viimane taastus:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Viimane varundus:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} võrgufiltrit + {{cosmeticFilterCount}} ilufiltrit:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "kasutusel {{used}}/{{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Uuenda filtriloendeid automaatselt.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Uuenda kohe",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Tühjenda kõik vahemälud",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Tuvasta ja rakenda ilufiltrid.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Ilufiltrid peidavad veebilehe elemente, mis häirivad visuaalselt ning mida ei saa blokeerida võrgutaotlustel põhinevate filtreerimismootoritega.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Eira üldiseid ilufiltreid.",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Üldised ilufiltrid on need ilufiltrid, mis töötavad kõikidel veebisaitidel. Selle valiku lubamine vähendab veebisaitidel üldiste ilufiltrite kasutamisest tulenevat mälu ja protsessori koormust.\n\nSelle valiku lubamine on soovitatav vähem võimekates seadmetes.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Peata võrguliiklus kõikide filtriloendite laadimiseni",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Blokeeritud domeenide loendid",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Kinnita muudatused",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Sisseehitatud",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Reklaamid",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privaatsus",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Pahavara kaitse, turvalisus",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Tüütused",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Mitmeotstarbelised",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regioonid, keeled",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Kohandatud",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Impordi...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Üks URL rea kohta. Vigaseid URLe eiratakse hoiatuseta.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "vananenud",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "vaata sisu",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Viimane uuendus: {{ago}}.\nUuendamiseks vajutage.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Uuendamine...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Ressursi uuendamist takistas võrgu viga.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Üks filter rea kohta. Filtriks võib olla tavaline hostinimi või EasyListiga ühilduv filter. Eesliitega <code>!</code> algavaid ridu eiratakse.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Ära lisa filtreid tundmatutest allikatest.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Impordi ja lisa…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Ekspordi…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "minu-ublocki-staatilised-filtrid_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Kinnita muudatused",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Igavesed reeglid",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Ajutised reeglid",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Ennista",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Rakenda",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Muuda",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Salvesta",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Tühista",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Impordi failist...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Ekspordi faili…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "minu-ublocki-dünaamilised-reeglid_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Sinu dünaamiliste filtrite reeglide nimekiri.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Reegli süntaks: <code>allikas sihtkoht tüüp tegevus</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>kogu dokumentatsioon</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sorteeri:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Reegli tüüp",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Allikas",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Sihtkoht",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Usaldatud saitide direktiivid määravad, millistel veebilehtedel peaks uBlock Origin keelatud olema. Üks kirje rea kohta.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Impordi ja lisa…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Ekspordi…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "minu-ublocki-usaldatud-saidid_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Kinnita muudatused",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Tüüp",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domeen",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Kõik",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Kaardivaba",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Praegune kaart",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Laadi kaardi sisu uuesti",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Lülita sisse DOM-inspektor",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Lülita sisse hüpikpaneel",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin'i viki: Logija",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Tühjenda logija",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Peata logija (ignoreeri sissetulevaid andmeid)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Jätka logimist",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Lülita sisse logija filtreerimine",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtreeri logija sisu",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Logija filtreerimise valikud",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Mitte",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "oluline",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blokeeritud",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "lubatud",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "muudetud",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1. osapool",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3. osapool",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Andmed",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filtriloend",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Reegel",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Kontekst",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Juurkontekst",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Osapool",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Tüüp",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL'i reegel",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Kontekst:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Tüüp:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Staatiline filtreerimine",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} võrgupäringud {{type}} {{br}}mille URL-aadress vastab väärtusele {{url}} {{br}}ja mis pärineb {{origin}},{{br}}{{importance}} on olemas vastav erandfilter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Blokeeri",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Luba",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "tüübiga “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "mistahes tüübiga",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "domeenilt “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "mistahes domeenilt",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "välja arvatud, kui",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "isegi, kui",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Staatiline filter <code>{{filter}}</code> asub:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Staatilist filtrit ei leitud ühegi hetkel lubatud filtrite loendist",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Logija kirjeid, mis ei vasta kõigile kolmele alumisele tingimusele, eiratakse automaatselt:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Säilita viimase {{input}} minuti kirjed",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Säilita kuni {{input}} lehe laadimist vahekaardi kohta",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Säilita kuni {{input}} kirjet vahekaardi kohta",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Kasuta {{input}} rida kirje kohta vertikaalses laiendatud režiimis",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Peida veerud:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} aeg",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} filter/reegel",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} kontekst",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} osapool",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Loend",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabel",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Lihttekst",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Ava",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Loo uus aruanne",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Leia sarnaseid aruandeid",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumendid",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Loe dokumente kohas <code>uBlock/wiki</code>, et avastada kõik uBlock Origini võimalusi.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Küsimused ja tugi",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Vastused küsimustele ja muud sorti kliendituge pakutakse subredditis <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filtrivead/veebileht on katki",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Teata kindlate veebilehtede filtrivigadest <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> veahalduris</span>. <u>Nõuab GitHubi kontot.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Oluline:</b> väldi teiste sarnaselt toimivate blokeerijate kasutamist koos uBlock Originiga, see võib põhjustada teatud lehtedel filtrivigu.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Nõuanne:</b> veendu, et filtrinimekirjad on ajakohased. <span data-url=\"logger-ui.html#_\">Logija</span> on peamine tööriist filtritega seotud vigade diagnoosimiseks.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Veast teatamine",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Teata uBlock Origini vigadest <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\">uBlockOrigin/uBlock-issue</code> veahalduris</span>. <u>Nõuab GitHubi kontot.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Tõrkeotsingu teave",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Allpool on tehniline info, mis võib olla kasulik, kui vabatahtlikud aitavad sul probleemi lahendada.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Oluline:</b> potentsiaalselt privaatne või tundlik info on vaikimisi kaetud. Kaetud info võib probleemi lahendamist raskendada.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Teavita filtri veast",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Vabatahtlike koormuse vähendamiseks veendu, et probleemi pole juba teatatud.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filtriloendeid uuendatakse iga päev. Kindlasti veenduge, kas probleem on juba lahendatud uusimates filtriloendites.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Kontrollige probleemi olemasolu veel kord, laadides muret tekitav veebileht uuesti.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Veebilehe aadress:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Veebileht...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Vali kirje --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Kuvab reklaame või reklaami kohatäitjaid",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Omab ülekatteid või teisi nuhtlusi",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Tuvastab uBlock Origini",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Omab privaatsusega seonduvaid probleeme",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Läheb uBlock Origini olemasolul katki",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Avab soovimatuid kaarte või aknaid",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Sildista veebileht kui „NSFW“ (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">&ldquo;tööks sobimatu&rdquo;</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Kata info",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Ära kata infot",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privaatsusteatis",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Muudatuste logi",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Lähtekood (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Toetajad",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Lähtekood",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Tõlked",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filtriloendid",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Välised sõltuvused (ühilduvad GPLv3-ga):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO enda filtriloendid on vabalt hostitud järgnevates <a href=\"https://et.wikipedia.org/wiki/Sisuedastusv%C3%B5rk\">sisuedastusvõrkudes</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Filtriloendi uuendamiseks kasutatakse juhuslikult valitud sisuedastusvõrku.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Varunda faili…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "minu-ublocki-varundus_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Taasta failist...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Alusta nullist...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Kõik seaded kirjutatakse üle, kasutades varundust kuupäevast {{time}} ning uBlock₀ taaskäivitatakse.\n\nKirjutan üle kõik praegused seaded varundusandmetega?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Andmeid ei suudetud lugeda või on vigased",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Kõik seaded kustutatakse ning uBlock₀ taaskäivitatakse.\n\nTaastan uBlock₀'i algseadetele?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Võrgu viga: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Kas lisada järgnev URL sinu kohandatud filtrite nimekirja?\n\nPealkiri: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Telli",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "minuti eest",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} minuti eest",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "tunni eest",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} tunni eest",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "eile",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} päeva tagasi",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Kuva töölaud",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Kuva logija",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "väljas",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Leht blokeeritud",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin on keelanud järgneva lehe laadimise:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Järgneva filtri tõttu",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "parameetriteta",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Asub filtrites:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Mine tagasi",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Sulge see aken",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Ära selle saidi puhul enam hoiata",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Keela karm blokeerimine {{hostname}} jaoks",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Ajutiselt",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Püsivalt",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Jätka",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Ekspordi pilvehoidlasse",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Impordi pilvehoidlast",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Impordi pilvekettalt ja ühilda praeguste seadetega",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Selle seadme nimi:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Hoiatus! Muuda täpsemaid seadeid oma vastutusel.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Saada",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Kinnita muudatused",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Ennista",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "baiti",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Blokeeri raamis olev element...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Telli filtriloend...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Luba ajutiselt mahukad meediaelemendid",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Vaata lähtekoodi…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Kirjuta kiirklahv",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Lülita sisse lukustatud kerimine",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopeeri lõikelauale",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Vali kõik",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Lülita kosmeetilist filtreerimist",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Rahulik blokeerimisrežiim",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Mahtu kasutatud: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Klõpsa laadimiseks",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Vigu: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Brauseri avamisel korralikult filtreerimine ebaõnnestus. Selle parandamiseks laadi leht uuesti.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "See sisestus peab olema viimane",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/eu/messages.json b/src/_locales/eu/messages.json
new file mode 100644
index 0000000..051bfd9
--- /dev/null
+++ b/src/_locales/eu/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Behingoz, blokeatzaile eraginkor bat. PUZ eta memorian arina.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Kontrol panela",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Abisua! Gorde gabeko aldaketak dituzu",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Geratu",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ezikusi",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Ezarpenak",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Iragazki-zerrendak",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Nire iragazkiak",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Nire arauak",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Konfidantzazko webguneak",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Lasterbideak",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Egunkaria",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Honi buruz",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Laguntza",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Aktibo-ikuslea",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Ezarpen aurreratuak",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Klik: gaitu/ezgaitu uBlock₀ gune honetan.\n\nKtrl+klik: ezgaitu uBlock₀ orri honetan soilik.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Klik: Gaitu/ezgaitu uBlock₀ gune honetan.\n\nKtrl+klik: Desgaitu uBlock₀ orri honetan soilik.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Klik: Gaitu uBlock₀ gune honetan.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "blokeatutako eskariak",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "orri honetan",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} edo %{{percent}}",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "instalaziotik",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "edo",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blokeatuta orri honetan",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blokeatuta instalaziotik",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Konektatutako domeinuak",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Ireki kontrol panela",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Elementuak lekuz aldatzeko modua",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Elementuak hautatzeko modua",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Ireki egunkaria",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Webgune honetan arazo baten berri eman",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Txandakatu laster-leihoen blokeoa gune honetan",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Klik: Blokeatu gune honetako laster leiho guztiak",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Klik: Utzi gune honetako laster-leihoak blokeatzeari",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Txandakatu multimedia elementu handiak blokeatzea gune honetan",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Klik: Blokeatu gune honetako tamaina handiko elementuak",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Klik: Utzi gune honetako tamaina handiko elementuak blokeatzeari",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Txandakatu iragazki kosmetikoa gune honetan",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Klik: Desgaitu iragazki kosmetikoak gune honetan",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Klik: Gaitu iragazki kosmetikoak gune honetan",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Txandakatu urruneko letra tipoen blokeoa gune honetan",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Klik: Blokeatu urruneko letra-tipoak gune honetan",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Klik: Utzi urruneko letra-tipoak gune honetan blokeatzeari",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Egin klik gune honetan JavaScript desgaitzeko",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Egin klik gune honetan JavaScript desgaitzeari uzteko",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Laster-leihoak",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Multimedia elementu handiak",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Iragazki kosmetikoak",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Urruneko tipografiak",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Gehiago",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Gutxiago",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Arau orokorrak: Zutabe hau gune guztietan aplikatzen diren arauentzat da.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Tokiko arauak: Zutabe hau soilik uneko gunean aplikatuko diren arauentzat da. Tokiko arauek arau orokorrak gainidazten dituzte.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Sakatu aldaketak gordetzeko.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Sakatu aldaketak desegiteko.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "guztiak",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "irudiak",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "Hirugarrengoak",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "Hirugarrengoen CSS/Irudiak",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "barne scriptak",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "bertako scriptak",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "hirugarrengoen scriptak",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "hirugarrengoen markoak",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "konektatutako domeinuak",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} / {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Bertsioa",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "scripta",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "markoa",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Sortu",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Hautatu",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Irten",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Aurreikusi",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Sare iragazkiak",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Iragazki kosmetikoak",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Klik, Ktrl-klik",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Blokeatu elementua...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Ezkutatu blokeatutako elementuen hutsuneak",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Bistaratu blokeatutako eskari kopurua ikonoan",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Desgaitu argibideak",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Erabili laster-menua egokia denean",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Kolore-itsuentzat egokia",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Itxura",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Azala",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Azentu-kolore pertsonalizatua",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Gaitu hodei biltegiratzearen euskarria",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Erabiltzaile aurreratua naiz (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>Irakurri beharrekoa</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Desgaitu aurrez-kargatzea (blokeatutako sare eskaeretako edozein konexio galarazteko)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Desgaitu loturen auditoretza",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Galarazi WebRTCk tokiko IP helbidea iragartzea",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Lehenetsitako portaera",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Lehenetsitako portaera hauek gunez gune gainidatzi daitezke",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Desgaitu iragazki kosmetikoa",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Blokeatu {{input:number}} kB baino handiagoak diren multimedia elementuak",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Blokeatu urruneko letra-tipoak",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Desgaitu JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Blokeatu CSP txostenak",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Erakutsi izen kanonikoak",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Aurreratua",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Erabiltzaile teknikoentzat soilik egokiak diren funtzioak",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "ezarpen aurreratuak",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Azken berreskuratzea:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Azken babeskopia:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} sare iragazki + {{cosmeticFilterCount}} iragazki kosmetiko hemendik:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} erabilita, guztira {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Automatikoki eguneratu iragazkien zerrenda.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Eguneratu orain",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Garbitu cache guztiak",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Prozesatu eta ezarri iragazki kosmetikoak.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "<p>Aukera honek <a href=\"https://adblockplus.org/en/faq_internal#elemhide\">Adblock Plusekin bateragarriak diren &ldquo;elementuak ezkutatzeko&rdquo; iragazkiak</a> prozesatzea eta ezartzea gaitzen du. Iragazki hauek nagusiki kosmetikoak dira, web orri batean itsusitzat jo diren eta sare iragazkien bidez blokeatzerik ez dauden elementuak ezkutatzeko balio dute.</p><p>Ezaugarri hau gaitzeak uBlock₀en memoria erabilera handitzen du.</p>",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ezikusi iragazki kosmetiko orokorrak",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "<p>Iragazki kosmetiko orokorrak webgune guztietan aplikatzeko sortu diren iragazki kosmetikoak dira. <p>uBlock₀ aplikazioak ongi kudeatzen baditu ere iragazki kosmetiko orokorrek wegune batzuetan memoria edo PUZ erabilera nabarmena ekar dezakete handiak eta antzinakoak diren horietan gehienbat. <p>Aukera hau gaituz iragazki kosmetiko orokorren erabileraren ondoriozko memoria eta PUZ erabilera gehigarria sahiestuko da, eta baita uBlock₀ beraren memoria erabilera gutxiagotu. <p> Ahalmen gutxiagoko gailuetan aukera hau gaitzea aholkatzen da.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Eten sarearen jarduera iragazki-zerrenda guztiak kargatuta egon arte",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Aplikatu aldaketak",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Barnekoa",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Iragarkiak",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Pribatutasuna",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domeinuak",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Eragozpenak",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Helburu anitzekoak",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Eskualdeak, hizkuntzak",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Pertsonala",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Inportatu...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "URL bat lerroko. Baliogabeko URL-ak ezikusiko dira.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Zaharkituta.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "ikusi edukia",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Azken eguneraketa: {{ago}}.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Eguneratzen...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Sare errore batek baliabidea eguneratzea eragotzi du.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Iragazki bat lerroko. Iragazkia hostalari izen soila izan daiteke, edo Adblock Plusekin bateragarria den iragazki bat. Hasieran <code>!</code> duten lerroak ezikusiko dira.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Inportatu eta gehitu",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Esportatu",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "nire-ublock-iragazki-estatikoak_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Aplikatu aldaketak",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Behin betiko arauak",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Behin behineko arauak",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Baztertu",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Behin betiko bihurtu",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Aldatu",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Gorde",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Baztertu",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Inportatu fitxategitik...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Esportatu fitxategira",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "nire-ublock-arau-dinamikoak_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Zure iragazki dinamikoen arau zerrenda.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Arauen sintaxia: <code>jatorria helburua mota ekintza</code>(<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>Dokumentazio osoa</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Ordena:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Arau mota",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Iturria",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Helburua",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Zerrenda zuriaren direktibek uBlock zeintzu web orrietan desgaituko den zehazten dute. Sarrera bat lerroko. Baliogabeko ostalari izenak ezikusiko dira.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Inportatu eta gehitu",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Esportatu",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "nire-ublock-zerrendazuria_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Aplikatu aldaketak",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Mota",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domeinua",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Iragazkia",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Guztiak",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Atzeko planoan",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Uneko fitxa",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Birkargatu fitxako edukia",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Txandakatu DOM ikuskatzailea",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Txandakatu laster-leiho panela",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: Egunkaria",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Garbitu egunkaria",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pausatu egunkaria (baztertu jasotako informazioa)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Kendu pausa egunkariari",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Txandakatu egunkariaren iragazkia",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "iragazi egunkariko sarrerak",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Egunkaria iragazteko aukerak",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Ez",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blokeatuta",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "baimenduta",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "aldatua",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "Lehen eskukoa",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "Hirugarrengoa",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Xehetasunak",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Iragazkia",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Iragazki-zerrendak",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Araua",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Testuingurua",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Erro testuingurua",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Jatorria",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Mota",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URLa",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL araua",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Testuingurua:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Mota:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Iragazketa estatikoa",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} {{type}} motako sare eskariak {{br}}URL helbidea {{url}} helbidearekin bat datorrenean {{br}}eta jatorria {{origin}} denean,{{br}}{{importance}} bat datorren salbuespen iragazki bat badago.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Blokeatu",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Baimendu",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "mota “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "edozein mota",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "hemendik “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "edonondik",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "kenduta",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "nahiz eta",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "<code>{{filter}}</code> iragazki estatikoa aurkitu da hemen:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "<code>{{filter}}</code> iragazki estatikoa ezin izan da aurkitu orain aktibatutako iragazki zerrendetan",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Beheko hiru baldintzak betetzen ez dituzten egunkariko sarrerak automatikoki ezikusiko dira:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Mantendu azken {{input}} minutuetako sarrerak",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Mantendu gehienez {{input}} orrien kargak fitxako",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Mantendu gehienez {{input}} sarrera fitxako",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Erabili {{input}} errenkada sarrerako bertikalki hedatutako moduan",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Ezkutatu zutabeak:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Denbora",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Iragazkia/araua",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Testuingurua",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} jatorria",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Zerrenda",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Taula",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Laua",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Ireki",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Txosten berri bat sortu",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Antzeko txostenak aurkitu",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentazioa",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Irakurri dokumentazioa <code>uBlock/wiki</code> helbidean, uBlock Originen funtzio guztiak ezagutzeko.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Galderak eta laguntza",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "<code>/r/uBlockOrigin</code> azpidian galderen erantzunak eta beste laguntza mota batzuk eskaintzen dira.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Arazoak iragazkiekin/webguneak ez du funtzionatzen",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Web-gune espezifikoekin iragazteko arazoak jakinaraz iezaguzu hemen: <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\">uBlockOrigin/uAssets</code> issue tracker</span>. <u>GitHub kontu bat behar da</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Kontuan izan:</b> Ez erabili antzeko helburua duten beste blokeatzaile batzuk uBlock Originekin batera, horrek arazoak sor baititzake webgune espezifikoetan iragazteko.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Aholkuak</b> Ziurtatu zure iragazki-zerrendak eguneratuta daudela. <span data-url=\"logger-ui.html#_\">Erregistratzailea</span> da iragazkiekin lotutako arazoak diagnostikatzeko tresna nagusia.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Errore-txostena",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Arazoak jakinarazi uBlock Originekin arazoen erregistroan <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code>issue tracker</span>. <u>GitHub kontua beharrezkoa da.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Arazoen konponbideari buruzko informazioa",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Jarraian, boluntarioek arazo bat konpontzen laguntzen saiatzen direnean baliagarria izan daitekeen informazio teknikoa aurkituko duzu.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Garrantzitsua:</b> Pribatua edo sentikorra izan daitekeen informazioa modu lehenetsian idazten da. Idatzitako informazioak arazo bat konpontzea zaildu dezake.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Iragazkiko arazo baten berri eman",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Txosten bikoiztuak dituzten boluntarioak ez gainkargatzeko, mesedez egiaztatu arazoa ez dela jakinarazi.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Web orriaren helbidea:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Webgunea...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Aukeratu sarrera bat --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Iragarkiak edo iragarkien hondarrak erakusten ditu",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Gainjartzeak edo bestelako eragozpenak ditu",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "uBlock Origin detektatzen du",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Pribatutasun-arazoak ditu",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Funtzionamendu-akatsak uBlock Origin aktibatuta dagoenean",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Ireki nahi ez diren erlaitzak edo leihoak",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Web orria «NSFW» moduan jarri (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work” </a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Erredaktatu",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Desegin erredakzioa",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Pribatutasun politika",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Aldaketa egunkaria",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Iturburu kodea (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Parte-hartzaileak",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Iturburu-kodea",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Itzulpenak",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Iragazki-zerrendak",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Kanpo menpekotasunak (GPLv3 lizentziarekin bateragarriak):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBOren iragazki zerrendan <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN</a> hauetan daude:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Ausaz aukeratutako CDN bat erabiltzen da iragazki zerrenda bat eguneratu behar denean",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Egin babeskopia fitxategian",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "nire-ublock-babeskopia_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Berreskuratu fitxategitik...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Leheneratu lehenetsitako ezarpenetara...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Zure ezarpen guztiak gainidatziko dira {{time}}ko datuak erabiliz, eta uBlock₀ berrabiaraziko da.\n\nGainidatzi ezarpen guztiak babeskopiako datuekin?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Datuak ezin dira irakurri edo baliogabeak dira",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Zure ezarpen guztiak ezabatuko dira, eta uBlock₀ berrabiaraziko da.\n\nLeheneratu uBlock₀ jatorrizko ezarpenetara?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Sare-errorea: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: Gehitu honako URL hauek zure iragazki pertsonalizatuen zerrendara?\n\nIzenburua: \"{{title}}\"\nURLa: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Harpidetu",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "duela minutu bat",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "duela {{value}} minutu",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "duela ordu bat",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "duela {{value}} ordu",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "duela egun bat",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "duela {{value}} egun",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Bistaratu kontrol panela",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Bistaratu egunkaria",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "itzalita",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Blokeatutako orrialdea",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock₀ek orri hau kargatzea galarazi du:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Iragazki hau dela eta",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "parametrorik gabe",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Hemen aurkitua:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Atzera",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Itxi leiho hau",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Ez esan ezer berriz ere orrialde honi buruz",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Ezgaitu blokeatze zorrotza {{hostname}} gunean",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Une batez",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Behin betiko",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Aurrera",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Esportatu hodei biltegiratzera",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Inportatu hodei biltegiratzetik",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Inportatu hodeiko biltegiratzetik eta nahastu oraingo ezarpenekin",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Gailu honen izena:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Abisua! Ez aldatu ezarpen aurreratu hauek zertan ari zaren ez badakizu.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Bidali",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Aplikatu aldaketak",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Baztertu",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "byte",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Marko bateko elementua blokeatu...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Harpidetu iragazki zerrenda batera...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Une batez baimendu multimedia elementu handiak",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Ikusi iturburu kodea…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Idatzi lasterbide bat",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Txandakatu korritze blokeatua",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopiatu arbelera",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Hautatu dena",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Iragazte kosmetikoa txandakatu",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Baretu blokeatze-modua",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Erabilitako biltegiratzea: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Sakatu kargatzeko",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Erroreak: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/fa/messages.json b/src/_locales/fa/messages.json
new file mode 100644
index 0000000..7736f8d
--- /dev/null
+++ b/src/_locales/fa/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "بالاخره، یک بلاکر کارآمد. کم حجم بر روی پردازنده و حافظه.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — داشبورد",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "هشدار! شما تنطیمات ذخیره نشده دارید",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "بمان",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "نادیده بگیر",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "تنظیمات",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "لیست‌های فیلتر",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "فیلترهای من",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "قوانین من",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "لیست سپید",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "میانبرها",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — واقعه‌نگار",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "در باره",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "پشتیبانی",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — نماینگر دارایی",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "تنظیمات پیشرفته",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "کلیک: غیر فعال/ فعال کردن uBlock₀ برای این سایت.\n\nکنترل+کلیک: غیر فعال کردن uBlock₀ فقط برای همین صفحه.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "کلیک کنید تا uBlock₀ برای این سایت غیر فعال شود.\n\nهمزمان کلیدکنترل را نگهدارید و کلیک کنید تا uBlock₀ فقط برای این صفحه غیر فعال شود.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "کلیک کنید تا uBlock₀ برای این سایت فعال شود.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "درخواست مسدود شده",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "در این صفحه",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} یا {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "از زمان نصب",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "یا",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "بلاک‌شده در این صفحه",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "بلاک شده از زمان نصب",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "دامنه‌های متصل‌شده",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "باز کردن داشبورد",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "ورود به حالت له کردن اشیاء",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "ورود به حالت انتخاب اشیاء",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "بازکردن واقعه‌نگار",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "گزارش یک اشکال در خصوص این وبسایت",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "تغییر وضعیت انسداد همه‌ی پنجره های بالاپَر برای این سایت",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "کلیک کنید تا همۀ پنجره های بالاپَر در این سایت مسدود شوند",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "کلیک کنید تا دیگر هیچ کدام از پنجره های بالاپَر این سایت مسدود نشوند",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "تغییر وضعیت مسدود کردن عناصر رسانه ای حجیم برای این سایت",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "کلیک کنید تا عناصر رسانه ای حجیم بر روی این سایت مسدود شوند",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "کلیک کنید تا از این به بعد عناصر رسانه ای حجیم روی این سایت مسدود نشوند",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "تغییر وضعیت فیلترزیباسازی برای این سایت",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "کلیک کنید تا فیلتر زیبا سازی بر روی این سایت غیر فعال شود",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "کلیک کنید تا فیلتر زیبا سازی بر روی این سایت فعال شود",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "تغییر وضعیت انسداد فونت های راه دور برای این سایت",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "کلیک کنید تا فونت های راه دور در این سایت مسدود شوند",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "کلیک کنید تا از این به بعد فونت های راه دور در این سایت مسدود نشوند",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "کلیک کنید تا جاوا اسکریپت در این سایت غیرفعال شود",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "کلیک کنید تا جاوا اسکریپت دیگر در این سایت غیرفعال نشود",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "پنجره‌ی پاپ‌آپ",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "اِلمان‌های دارای مدیای بزرگ",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "فیلترهای انتخابی",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "فونت‌های راه دور",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "جاوااسکریپت",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "بیشتر",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "کمتر",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "قوانین همگانی: این ستون برای قوانینی است که برای همۀ سایت ها اعمال می شوند.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "قوانین محلی: این ستون برای قوانینی است که تنها در این وب‌گاه اعمال می شود.\nقوانین محلی بر قوانین سراسری برتری دارد.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "برای دائمی سازی تغییرات کلیک کنید.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "برای دور انداختن تغییراتی که اعمال کرده اید کلیک کنید.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "همه",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "تصاویر",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "3rd-party",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "تصاویر/css سایت های ثالث",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "اسکریپت های درون خطی",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "اسکریپت های 1st-party",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "اسکریپت های 3rd-party",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "فریم های 3rd-party",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "دامنه های دست خورده",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "تعداد {{count}} از {{total}} تا",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "نگارش",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "اسکریپت",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "چارچوب",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "ایجاد",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "انتخاب",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "خروج",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "پیش نمایش",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "فیلترهای شبکه",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "فیلترهای انتخابی",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "کلیک، کنترل-کلیک",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "بلاک کردن این بخش",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "مخفی کردن نگاهدارنده اشیاء بلاک شده",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "نمایش تعداد درخواست های بلاک شده بر روی آیکون",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "غیر فعال سازی راهنماها",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "استفاده از منوی متنی در زمانهای لازم",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "بهینه سازی کور رنگی",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "ظاهر",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "پوسته",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "رنگ اصلی دلخواه",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "فعال سازی پشتیبانی ذخیره سازی ابری",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "من کاربر حرفه ای هستم (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>لازم است بخوانید</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "غیر فعال کردن واکشی اولیه (برای جلوگیری از هر گونه اتصال برای درخواست های مسدود شدۀ شبکه)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "غیرفعال کردن حسابرسی پیوند",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "جلوگیری کردن از WebRTC از افشاسازی آدرس های IP محلی",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "رفتار پیش فرض",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "تنظیمات مخصوص هر سایت این تنظیمات پیش فرض را لغو می‌کند",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "غیر فعال‌سازی فیلتر زیبا سازی",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "انسداد عناصر رسانه ای حجیم تر از {{input:number}} کیلوبایت",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "انسداد فونت های راه دور",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "غیرفعال کردن جاوا اسکریپت",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "مسدود کردن براساس گزارشات سیاست امنیت محتوا",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "اسامی متعارف را از حالت قفل خارج کنید",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "پیشرفته",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "قابلیت‌های مناسب برای کاربران فنی",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "تنظیمات پیشرفته",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "آخرین بازیابی:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "آخرین پشتیبانی:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} فیلتر های شبکه + {{cosmeticFilterCount}} فرم های فیلتر انتخابی:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "تعداد {{used}} از {{total}} مورد استفاده شده",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "بروز رسانی خودکار لیست فیلتر.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "اکنون به روز رسانی شود",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "پاکسازی تمام انبارها",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "تجزیه و اجرای فیلترهای انتخابی.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "<p>این گزینه <a href=\"https://adblockplus.org/en/faq_internal#elemhide\">فیلترهای &ldquo;مخفی‌کردن اشیا&rdquo; سازگار با ادبلاک پلاس</a> را تجزیه و اجرا میکند. این فیلتر ها اساساً فنی هستند، آنها اشیاء موجود در صفحه وب را که مزاحم تلقی میشوند و با موتور فیلترینگ شبکه قابل بلاک کردن نیستند را حذف میکنند.</p><p>فعال کردن این قابلیت مصرف حافظه ی uBlock را افزایش میدهد.</p>",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "نادیده گرفتن فیلترهای زیبا سازی عمومی",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "<p>فیلترهای زیبا سازی عمومی، آن دسته از فیلترهای زیبا سازی هستند که در همه وب سایت ها کاربرد دارند.\n<p>اگر چه بصورت موثر توسط uBlock₀ انجام شده، ولی فیلترهای عمومی زیبا سازی هنوز هم ممکن است سربار حافظه قابل اندازه گیری و سربار پردازنده در برخی از صفحات وب به جای بگذارد، به ویژه برای صفحات وب بزرگ و طولانی مدت.<p>فعال کردن این گزینه سربارهای حافظه و پردازنده را که به صفحات اضافه شده به عنوان نتیجۀ اجرای فیلترهای عمومی زیبا سازی برطرف می‌کند، و همچنین ردپای حافظۀ خود uBlock₀ را کمتر می‌کند<p>توصیه می شود این گزینه را در دستگاه های با قدرت کمتر فعال کنید.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "تا وقتی همه‌ی فیلترها لود نشده‌اند ارتباط شبکه را قطع کن",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "فهرست میزبان های مسدود شده",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "اعمال تغییرات",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "داخلی",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "تبلیغات",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "حریم خصوصی",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "دامنه های مخرب",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "مزاحم‌ها",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "چند منظوره",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "مناطق، زبانها",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "سفارشی",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "وارد شده",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "هر آدرس در یک خط. خطوطی با پیشوند &lsquo;!&rsquo; در نظر گرفته نمیشوند. آدرس های نامعتبر نیز در سکوت نادیده گرفته میشوند.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "منقضی شده.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "نمایش محتویات",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "آخرین به روز رسانی: {{ago}}.\nبرای یک به روز رسانی اجباری کلیک کنید.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "درحال بروزرسانی...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "یک خطای شبکه از بروزشدن این منبع جلوگیری کرد.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "یک فیلتر در هر خط. یک فیلتر می تواند آدرس هاست ساده یا فیلتر سازگار با Adblock plus باشد. خطوط با پیشوند &lsquo;!&rsquo; نادیده گرفته می شوند.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "وارد کردن و الحاق",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "خروجي گرفتن",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "اعمال تغییرات",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "قوانین دائمی",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "قوانین موقت",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "بازگرداندن",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "ذخیره در منبع",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "ویرایش",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "ذخيره",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "لغو",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "وارد کردن از فایل...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "خروجی گرفتن به فایل...",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "لیست قوانین فیلترینگ پویای شما.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "نحوه استفاده: <code>source destination type action</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>مستندات کامل</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "مرتب‌سازی:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "نوع قانون",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "منبع ",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "مقصد",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "دستور العمل‌های لیست سفید حکم می‌کند که uBlock₀ باید بر روی کدام یک از صفحات وب غیر فعال باشد. در هر خط فقط یک مورد. دستور العمل‌های نامعتبر بدون اشاره ای نادیده گرفته شده و بیرون انداخته می‌شوند.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "وارد کردن و الحاق",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "خروجي گرفتن",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-whitelist_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "اعمال تغییرات",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "نوع",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "دامنه",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "آدرس",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "فیلتر",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "همه",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "پشت صحنه",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "برگۀ فعلی",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "بارگیری مجدد محتوای صفحه",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "تغییر وضعیت جستجوگر DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "تغییر وضعیت پنل پاپ‌آپ",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "ویکی uBlock Origin: ثبت‌کننده رویداد‌ها",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "پاک‌کردن رویداد‌ها",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "توقف ثبت رویداد‌ها (تمام داده‌های ورودی را نادیده بگیر)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "از سرگیری ثبت رویداد‌ها",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "تغییر وضعیت فیلتر ثبت رویداد‌ها",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "فیلتر کردن محتوای لاگ",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "گزینه‌های فیلتر ثبت رویداد‌ها",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "نفی",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "مسدود شده",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "مجاز",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "تغییر کرده",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1st-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "طرف سوم",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "جزئیات",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "فیلتر",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "لیست فیلتر",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "قانون",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "محتوا",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "محتوای ریشه",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partyness",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "نوع",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "آدرس",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "فیلترینگ پویای آدرس اینترنتی",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "زمینه:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "نوع:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "فیلترینگ ایستا",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} درخواست های شبکه از نوع {{type}}{{br}} که مطابقت دارد با آدرس اینترنی {{url}}{{br}} و سرچشمه می‌گیرد از {{origin}}،{{br}}{{importance}} اینها یک فیلتر استثناء از تطبیق هستند.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "انسداد",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "مجاز",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "نوع “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "هر نوعی",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "از “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "از هر جایی",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "بجز وقتی",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "حتی اگر",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "انسداد ایستا <code>{{filter}}</code> یافت شد در:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "فیلتر ایستا <code>{{filter}}</code> در هیچ یک از لیست‌های فیلتر فعال پیدا نشد",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "رویدادهای ورودی که مطابق سه شرط زیر نباشند، بصورت خودکار نادیده گرفته خواهند شد:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "ورودی‌های {{input}} دقیقه اخیر را نگه دار",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preserve at most {{input}} page loads per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "لطفا در هر تب حداکثر {{input}} مدخل نگه‌دارید",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Use {{input}} lines per entry in vertically expanded mode",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "پنهان‌سازی ستون",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} زمان",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} فیلتر/قانون",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Context",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partyness",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "لیست",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "جدول",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "ساده",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "مارک‌داون",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "باز کردن",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "ایجاد گزارش جدید",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "یافتن گزارش‌های مشابه",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "مستندات",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "مستنداتی که در <code>uBlock/wiki</code> هست را بخوانید تا با تمام امکانات uBlock Origin آشنا شوید.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "سوال‌ها و پشتیبانی",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "پاسخ به سوالات و انواع راهنمایی‌ها در ساب‌ردیت <code>/r/uBlockOrigin</code> ارائه می‌شود.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "مشکل فیلترها/وبسایتی ایراد دارد",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>مهم:</b> از مسدودکننده‌های مشابه دیگر در کنار یوبلاک اوریجین استفاده نکنید. این کار ممکن است باعث ایجاد مشکل در فیلترها برای برخی سایت‌ها شود.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "گزارش اشکال",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "اطلاعات مشکل‌گشایی",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "در زیر اطلاعات فنی آمده که ممکن است برای داوطلبانی که می‌خواهند در حل یک مشکل کمک کنند مفید باشد.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>مهم:</b> اطلاعات شخصی یا حساس به طور پیشفرض ویرایش و مبهم می‌شوند. اطلاعات مبهم‌شده ممکن است حل مشکل را سخت‌تر کند.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "گزارش یک اشکال در فیلتر",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "برای این که وقت داوطلبان با گزارش‌های تکراری گرفته نشوند، لطفا مطمئن شوید که این اشکال قبلا گزارش نشده باشد.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "آدرس صفحه‌ی وب:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "این صفحه‌ی وب...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- یک گزینه را انتخاب کنید --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "تبلیغات یا باقی‌مانده‌هایی از آن نشان می‌دهد",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "یوبلاک اوریجین را تشخیص می‌دهد",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "دارای ایراد مربوط به حریم خصوصی است",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "وقتی یوبلاک اوریجین فعال است عملکرد درستی ندارد",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "تب یا پنجره‌ی ناخواسته باز می‌کند",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "علامت زدن صفحه به عنوان \"NSFW\" (<a href=\"https://fa.wikipedia.org/wiki/%D9%86%D8%A7%D9%85%D9%86%D8%A7%D8%B3%D8%A8_%D8%A8%D8%B1%D8%A7%DB%8C_%DA%A9%D8%A7%D8%B1\">\"نامناسب برای کار\"</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "قوانین حریم خصوصی",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "تغییرات اخیر",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "سورس کد (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "مشارکت کنندگان",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "کد منبع",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "ترجمه‌ها",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "لیست‌های فیلتر",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "وابستگی‌های خارجی (سازگار با GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "لیست‌های فیلتر اصلی uBlock Origin به صورت آزاد در <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">این شبکه‌های تحویل محتوا</a> میزبانی می‌شوند.",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "وقتی که لازم باشد تا یک لیست فیلتر به روزرسانی شود، از یکی از شبکه‌های تحویل محتوا به صورت تصادفی استفاده می‌شود",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "پشتیبان گیری در فایل",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "بازیابی از فایل...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "تنظیم مجدد تنظیمات پیش فرض...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "تمام تنظیمات با استفاده از پشتیبان گیری در {{time}}، رونویسی شده و uBlock₀ مجدد راه اندازی میشود.\n\nتمام تنظیمات موجود با استفاده از داده های پشتیبانی رونویسی شود؟",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "داده ها نمی تواند خوانده شوند و یا نامعتبر اند",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "تمام تنظیمات شما حذف شده و uBlock₀ دوباره راه اندازی خواهد شد.\n\nتنظیم مجدد uBlock₀ به تنظیمات کارخانه؟",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "خطای شبکه: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: آدرس اینترنتی زیر به فهرست فیلتر های سفارشی شما اضافه شود؟\n\nعنوان: \"{{title}}\"\nآدرس: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "آبونه شدن",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "1 دقیقه پیش",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} دقیقه پیش",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "یک ساعت پیش",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} ساعت قبل",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "دیروز",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} روز قبل",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "نمایش داشبورد",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "نمایش واقعه‌نگار",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "خاموش",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Page blocked",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock₀ از بارگذاری این صفحات جلوگیری کرده:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "بخاطر فیلتر زیر",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "بدون پارامترها",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "یافته شده در:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "بازگشت به عقب",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "بستن این پنجره",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "غیر فعال کردن بلاک برای {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "موقتا",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "دائمی",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "صدور به فضای ذخیره سازی ابری",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "وارد کردن از فضای ذخیره سازی ابری",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "وارد کردن از فضای ذخیره سازی ابری و ادغام با تنظیمات فعلی",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "نام این وسیله:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "هشدار! این تنظیمات پیشرفته را با مسئولیت خود تغییر دهید.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "ارسال",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "اعمال تغییرات",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "بازگرداندن",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "بایت",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "بلاک‌کردن اِلمان در فریم...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subscribe to filter list...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "اجازه موقت عناصر رسانه‌ای حجیم",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "یک میانبر وارد کنید",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "تغییر وضعیت پیمایش قفل شده",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "کپی به کلیپ‌بورد",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "انتخاب همه",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "حالت بلاک‌کردن غیرسخت‌گیر",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "فضای مصرفی: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "کیلوبایت",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "مگابایت",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "گیگابایت",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "برای بازکردن کلیک نمایید",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "این باید آخرین مطلب باشد",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/fi/messages.json b/src/_locales/fi/messages.json
new file mode 100644
index 0000000..fb3028e
--- /dev/null
+++ b/src/_locales/fi/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Viimeinkin tehokas estotyökalu, joka ei kuormita prosessoria ja muistia.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Hallintapaneeli",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Varoitus! Olet tehnyt muutoksia, joita ei ole vielä tallennettu",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Älä poistu",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ohita",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Asetukset",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Suodatinlistat",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Omat suodattimet",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Omat säännöt",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Luotetut sivustot",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Pikanäppäimet",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Pyyntöhistoria",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Tietoja",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Tuki",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Resurssien katselu",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Lisäasetukset",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Painallus: poista uBlock₀ käytöstä/ota se käyttöön tällä sivustolla.\n\nCtrl+painallus: poista uBlock₀ käytöstä vain tällä sivulla.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Poista uBlock₀ käytöstä tällä sivustolla painamalla tästä.\n\nCtrl+painallus poistaa uBlock₀:n käytöstä vain tällä sivulla.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Ota uBlock₀ käyttöön tällä sivustolla painamalla tästä.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "pyyntöjä estetty",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "tällä sivulla",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "asennuksen jälkeen",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "tai",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Estetty tällä sivulla",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Estetty asennuksen jälkeen",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Verkkotunnuksia yhdistetty",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Avaa hallintapaneeli",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Avaa elementtien piilotustila",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Avaa elementtien valintatila",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Näytä pyyntöhistoria",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Ilmoita ongelmasta tällä verkkosivustolla",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Muuta ponnahduseston tilaa tällä sivustolla",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Estä kaikki ponnahdukset tällä sivustolla painamalla tästä",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Salli kaikki ponnahdukset tällä sivustolla painamalla tästä",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Muuta suurten mediaelementtien eston tilaa tällä sivustolla",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Estä suuret mediaelementit tällä sivustolla painamalla tästä",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Salli suuret mediaelementit tällä sivustolla painamalla tästä",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Muuta kosmeettisen suodatuksen tilaa tällä sivustolla",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Poista kosmeettinen suodatus käytöstä tällä sivustolla painamalla tästä",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Ota kosmeettinen suodatus käyttöön tällä sivustolla painamalla tästä",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Muuta ulkoisten fonttien lataustilaa tällä sivustolla",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Estä ulkoisten fonttien lataus tällä sivustolla painamalla tästä",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Salli ulkoisten fonttien lataus tällä sivustolla painamalla tästä",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Estä JavaScript tällä sivustolla painamalla tästä",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Salli JavaScript tällä sivustolla painamalla tästä",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Ponnahdukset",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Suuret mediaelementit",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Kosmeettinen suodatus",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Ulkoiset fontit",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Enemmän",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Vähemmän",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Yleiset säännöt: Sarake säännöille, joita käytetään kaikilla sivustoilla.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Paikalliset säännöt: Sarake säännöille, joita käytetään vain nykyisellä sivustolla.\nPaikalliset säännöt ohittavat yleiset säännöt.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Tee muutoksistasi pysyviä painamalla tästä.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Kumoa muutoksesi painamalla tästä.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "kaikki",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "kuvat",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "3. osapuoli",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "Kolmannen osapuolen css/kuvat",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "upotetut komentosarjat",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1. osapuolen komentosarjat",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "3. osapuolen komentosarjat",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "3. osapuolen kehykset",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "verkkotunnuksia yhdistetty",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}}/{{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Versio",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "komentosarja",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "kehys",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Luo",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Valitse",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Lopeta",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Esikatsele",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Verkkosuodattimet",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Kosmeettiset suodattimet",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Painallus, Ctrl-painallus",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Estä elementti…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Piilota estettyjen elementtien paikkamerkit",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Näytä estettyjen pyyntöjen määrä",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Älä näytä työkaluvihjeitä",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Käytä kontekstivalikkoa tarvittaessa",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Värisokeille sopiva tila",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Ulkoasu",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Teema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Oma korostusväri",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Käytä pilvitallennusta",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Olen edistynyt käyttäjä",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Älä käytä esihakua (estää kaikki yhteydet estetyiltä verkkopyynnöiltä)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Älä salli hyperlinkkien käytönseurantaa",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Estä paikallisen IP-osoitteen vuoto WebRTC:n välityksellä",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Oletuskäytännöt",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Nämä oletuskäytännöt voidaan ohittaa sivustokohtaisesti",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Älä käytä kosmeetista suodatusta",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Estä mediaelementit, jotka ovat suurempia kuin {{input:number}} kt",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Estä ulkoisten fonttien lataus",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Poista JavaScript käytöstä",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Estä CSP-raportit",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Paljasta kanoniset nimet (CNAME-uncloaking)",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Lisäasetukset",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Teknisille käyttäjille sopivat ominaisuudet",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "Lisäasetukset",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Viimeisin palautus:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Viimeisin varmuuskopio:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} verkkosuodatinta + {{cosmeticFilterCount}} kosmeettista suodatinta:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "Käytössä {{used}}/{{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Päivitä suodatinlistat automaattisesti",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Päivitä nyt",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Tyhjennä kaikki välimuistit",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Jäsennä ja pakota kosmeettiset suodattimet",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Kosmeettisten suodattimien tehtävä on piilottaa sivujen elementtejä, jotka on luokiteltu visuaalisiksi ärsykkeiksi ja joiden esto ei ole mahdollista verkkopyyntöjen estoon perustuvien suodatusmoottoreiden avulla.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ohita kosmeettiset yleissuodattimet",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Kosmeettiset yleissuodattimet ovat sellaisia kosmeettisia suodattimia, jotka on tarkoitettu käytettäväksi kaikilla verkkosivustoilla. Tämä asetus poistaa tällaisten suodattimien käsittelystä verkkosivuille aiheutuvan, korkeamman keskusmuistin ja suorittimen kuormituksen.\n\nAsetuksen käyttö on suositeltavaa heikkotehoisilla laitteilla.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Keskeytä verkon toiminta, kunnes kaikki suodatinlistat on ladattu",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lista estetyistä osoitteista",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Vahvista muutokset",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Laajennukseen sisältyvät",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Mainokset",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Tietosuoja",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Haittaohjelmasuojaus, tietoturva",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Ärsykkeet",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Yleishyödylliset",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Alueet, kielet",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Muut listat",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Tuo…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Yksi URL-osoite riviä kohden. Virheelliset osoitteet ohitetaan huomaamattomasti.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Vanhentunut",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "Näytä sisältö",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Viimeisin päivitys: {{ago}}.\nPakota päivitys painamalla tästä.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Päivitetään…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Verkkovirhe esti resurssin päivityksen.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Yksi suodatin riviä kohden. Suodatin voi olla pelkkä osoite tai EasyList-yhteensopiva suodatin. Rivit, joiden alussa on <code>!</code>, ohitetaan.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Älä lisää suodattimia lähteistä, joihin et luota.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Tuo ja lisää…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Vie…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "omat-staattiset-ublock-suodattimet_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Vahvista muutokset",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Pysyvät säännöt",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Tilapäiset säännöt",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Palauta",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Pysyväksi",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Muokkaa",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Tallenna",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Hylkää",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Tuo tiedostosta…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Vie tiedostoon…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "omat-dynaamiset-ublock-saannot_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Listaus dynaamisista suodatussäännöistä.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Sääntösyntaksi: <code>lähde kohde tyyppi toiminto</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>täysi ohje</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Järjestys:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Säännön tyyppi",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Lähde",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Kohde",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Luotettu sivusto -luokitukset määrittelevät millä sivuilla uBlock Originia ei käytetä. Yksi osoite riviä kohden.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Tuo ja lisää…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Vie…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "omat-luotetut-ublock-sivustot_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Vahvista muutokset",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Tyyppi",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Verkkotunnus",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Suodatin",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Kaikki",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Piilotetut",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Nykyinen välilehti",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Lataa välilehden sisältö uudelleen",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Kytke DOM-rakennenäkymä",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Kytke ponnahduspaneeli",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: Pyyntöhistoria",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Tyhjennä pyyntöhistoria",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pysäytä pyyntöhistoria (ohita kaikki saapuva tietoliikenne)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Käynnistä pyyntöhistoria",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Muuta pyyntöhistorian suodatusta",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "Suodata pyyntöhistoriaa",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Pyyntöhistorian suodatusvalinnat",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Ei",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "tapahtumarikas",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "estetty",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "sallittu",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "muokattu",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1. osapuoli",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3. osapuoli",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Tiedot",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Suodatin",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Suodatinlista",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Sääntö",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Konteksti",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Juurikonteksti",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Osapuoli",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Tyyppi",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL-sääntö",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Konteksti: ",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Tyyppi: ",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Staattinen suodatus",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} verkkopyynnöt, joiden tyyppi on {{type}}, {{br}}URL vastaa osoitetta {{url}} {{br}}ja joiden lähde on {{origin}},{{br}}{{importance}} vastaava poikkeussuodatin.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Estä",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Salli",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "{{type}}",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "mikä tahansa",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "{{origin}}",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "mikä tahansa",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "paitsi, kun löytyy",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "vaikka löytyisi",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Staattinen suodatin <code>{{filter}}</code> löydettiin:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Staattista suodatinta ei löytynyt tällä hetkellä käytössä olevilta suodatinlistoilta",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Merkinnät, jotka eivät täytä alla olevista kolmesta ehdosta jokaista, ohitetaan automaattisesti:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Säilytä merkinnät viimeisten {{input}} minuutin ajalta",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Säilytä enintään {{input}} sivulatausta välilehteä kohden",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Säilytä enintään {{input}} pyyntöä välilehteä kohden",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Näytä pyynnöille {{input}} riviä pystysuutaan laajennetussa tilassa",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Piilota sarakkeita:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Aika",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Suodatin/sääntö",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Konteksti",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Osapuoli",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Lista",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Taulukko",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Pelkkä teksti",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown-kieli",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Avaa",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Luo uusi ilmoitus",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Etsi samankaltaisia ilmoituksia",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Ohje",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Lue ohjeet sijainnista <code>uBlock/wiki</code> tutustuaksesi uBlock Originin kaikkiin ominaisuuksiin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Kysymykset ja tuki",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Vastauksia kysymyksiin ja muuta tukea on saatavilla <code>/r/uBlockOrigin</code>-subredditistä.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Suodatusongelma/sivusto on hajonnut",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Ilmoita ongelmista suodatuksessa tietyillä sivustoilla <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code>-ongelmaseurannassa</span>. <u>Vaatii GitHub-tilin</u>.",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Tärkeää:</b> Vältä muiden vastaavien estotyökalujen samanaikaista käyttöä uBlock Originin kanssa, koska se voi aiheuttaa ongelmia joillakin sivustoilla.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Vinkkejä:</b> Varmista, että suodatinlistasi ovat ajan tasalla. <span data-url=\"logger-ui.html#_\">Pyyntöhistoria</span> on pääasiallinen työkalu suodattimiin liittyvien ongelmien selvityksessä.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Virheilmoitus",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Ilmoita uBlock Origin -laajennuksen ongelmista <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock</code>-ongelmaseurannanssa</span>. <u>Vaatii GitHub-tilin</u>.",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Vianmääritystiedot",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Alla on teknisiä tietoja, joista voi olla hyötyä vapaaehtoisille, jotka pyrkivät auttamaan ongelmasi ratkaisussa.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Tärkeää:</b> Mahdolliset yksityiset ja arkaluonteiset tiedot poistetaan oletusarvoisesti. Tietojen puuttuminen saattaa vaikeuttaa ongelman ratkaisemista.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Ilmoita suodatinongelmasta",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Välttääksesi vapaaehtoisten kuormittamisen ylimääräisillä ilmoituksilla, tarkista ensin onko ongelmasta jo ilmoitettu.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Suodatinlistoja päivitetään päivittäin. Varmista, ettei ongelmaasi ole jo korjattu listojen uusissa versioissa.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Vahvista ongelman edelleen esiintyvän kyseisellä verkkosivulla.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Verkkosivun osoite:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Verkkosivu…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Valitse aihe --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Näyttää mainoksia tai niiden jäänteitä",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Sisältää peiteruutuja tai muita ärsykkeitä",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Havaitsee uBlock Originin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Sisältää tietosuojaan liittyviä ongelmia",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Hajoaa, kun uBlock Origin on käytössä",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Avaa ei-toivottuja välilehtiä tai ikkunoita",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Luokittele verkkosivu ns. työpaikalle sopimattomaksi, \"NSFW\" (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">\"Not Safe For Work\"</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Älä sisällytä",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Sisällytä",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Tietosuojakäytäntö",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Muutoshistoria",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Lähdekoodi (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Avustajat",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Lähdekoodi",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Käännökset",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Suodatinlistat",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Ulkopuoliset riippuvuudet (GPLv3-yhteensopiva):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO:n omat suodatinlistat ovat vapaasti saatavilla seuraavista <a href=\"https://fi.wikipedia.org/wiki/Sis%C3%A4ll%C3%B6njakeluverkko\">sisällönjakeluverkoista</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Suodatinlistat päivitetään satunnaisesti valitusta sisällönjakeluverkosta (CDN).",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Varmuuskopioi tiedostoon…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "oma-ublock-varmuuskopio_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Palauta tiedostosta…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Palauta oletusasetukset…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Kaikki asetuksesi korvataan {{time}} varmuuskopioiduilla tiedoilla ja uBlock₀ käynnistyy uudelleen.\n\nKorvataanko kaikki nykyiset asetukset varmuuskopioduilla tiedoilla?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Tietoja ei voitu lukea tai ne ovat virheellisiä",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Kaikki asetuksesi poistetaan ja uBlock₀ käynnistyy uudelleen. \n\nPalautetaanko uBlock₀ oletusasetuksiin?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Verkkovirhe: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Lisätäänkö seuraava URL-osoite omiin suodatinlistoihisi?\n\nOtsikko: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Tilaa",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "minuutti sitten",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} minuuttia sitten",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "tunti sitten",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} tuntia sitten",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "päivä sitten",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} päivää sitten",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Näytä Hallintapaneeli",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Näytä pyyntöhistoria",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "ei käytössä",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Sivu estetty",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock₀ on estänyt seuraavan sivun latauksen:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Seuraavan suodattimen vuoksi:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "ilman parametrejä",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Sisältyy listoihin:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Palaa takaisin",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Sulje tämä ikkuna",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Älä varoita tästä sivustosta uudelleen",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Älä käytä tiukkaa estoa osoitteelle {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Tilapäisesti",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Pysyvästi",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Jatka",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Vie pilvitallennustilaan",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Tuo pilvitallennustilasta",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Tuo pilvitallennustilasta ja yhdistä nykyisiin asetuksiin",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Tämän laitteen nimi:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Varoitus! Muuta näitä lisäasetuksia omalla vastuullasi.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Lähetä",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Vahvista muutokset",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Palauta",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "tavua",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Estä elementti kehyksestä…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Tilaa suodatinlista…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Salli suuret mediaelementit tilapäisesti",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Näytä lähdekoodi…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Syötä näppäinyhdistelmä",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Kytke puoliskojen välisen vierityksen lukitus",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopioi leikepöydälle",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Valitse kaikki",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Kytke kosmeettinen suodatus",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Kevennetty estotila",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Tallennustilan käyttö: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "kt",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "Mt",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "Gt",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Lataa painamalla tästä",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Virheitä: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Suodatus ei onnistunut kunnolla selaimen käynnistyessä. Päivitä sivu varmistaaksesi kunnollisen suodatuksen.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Tämän on oltava viimeinen merkintä",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/fil/messages.json b/src/_locales/fil/messages.json
new file mode 100644
index 0000000..e5b679d
--- /dev/null
+++ b/src/_locales/fil/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Mainam na pangharang sa content. Magaan sa CPU at memorya.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Dashboard",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Babala! Hindi pa na-save ang ilan mong mga pagbabago",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Manatili",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Balewalain",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Mga Setting",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Listahan ng mga filter",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Mga filter ko",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Mga patakaran ko",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Mga pinagkakatiwalaang site",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Mga Shortcut",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Talaan",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Tungkol",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Suporta",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Tingnan ang mga Asset",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Karagdagang mga setting",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Click: patayin/paandarin ang uBlock₀ para sa site na ito.\n\nCtrl+click: patayin ang uBlock₀ sa pahinang ito lang.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "I-click para patayin ang uBlock₀ sa site na ito.\n\nI-Ctrl+click para patayin ang uBlock₀ sa pahinang ito lang.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "I-click para paandarin ang uBlock₀ sa site na ito.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "mga hinarang na hiling",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "sa pahinang ito",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "mula pagka-install",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "o",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Hinarang sa pahinang ito",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Hinarang mula pagka-install",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Mga konektadong domain",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Buksan ang dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Buksan ang pantanggal sa mga elemento",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Buksan ang tagapili sa mga elemento",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Buksan ang talaan",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Mag-ulat ng isyu sa website na ito",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Paandarin/patayin ang pagharang sa mga popup sa site na ito",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Pindutin upang harangin lahat ng mga popup sa site na ito",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Pindutin upang payagan lahat ng mga popup sa site na ito",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Paandarin/patayin ang pagharang sa mga malalaking elemento ng media sa site na ito",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Pindutin upang harangin ang mga malalaking elemento ng media sa site na ito",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Pindutin upang ihinto ang pagharang sa mga malalaking elemento ng media sa site na ito",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Paandarin/patayin ang kosmetikong pagfi-filter sa site na ito",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Pindutin upang ihinto ang kosmetikong pagfi-filter sa site na ito",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Pindutin upang paandarin ang kosmetikong pagfi-filter sa site na ito",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Paandarin/patayin ang pagharang sa remote fonts sa site na ito",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Pindutin upang harangin ang remote fonts sa site na ito",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Pindutin upang ihinto ang pagharang sa remote fonts sa site na ito",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Pindutin upang harangin ang JavaScript sa site na ito",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Pindutin upang paandarin ang JavaScript sa site na ito",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Mga window na nagpa-pop-up",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Malalaking mga elemento ng media",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Kosmetikong pagfi-filter",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Remote fonts",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Higit pa",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Mas konti",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Mga pangkalahatang patakaran: ang hanay na ito ay para sa mga patakarang ipinapatupad sa lahat ng mga site.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Mga lokal na patakaran: ang hanay na ito ay para sa mga patakarang ipinapatupad sa site site na ito lamang. Mas sinusunod ang mga lokal na patakaran kaysa sa mga pandaigdigang patakaran.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Pindutin upang maging permanente ang mga pagbabago mo.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Pindutin upang kanselahin ang mga pagbabago mo.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "lahat",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "mga larawan",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "3rd-party",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "mga 3rd-party na CSS/larawan",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "mga nakapaloob na script",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "mga 1st-party na script",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "mga 3rd-party na script",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "mga 3rd-party na frame",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "mga konektadong domain",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} sa {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Bersyon",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Lumikha",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Pumili",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Umalis",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Silipin",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Mga filter sa network",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Mga kosmetikong filter",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "I-click, Ctrl-click",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Harangin ang elemento…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Itago ang placeholder ng mga hinarang na mga elemento",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Ipakita kung ilan ang mga naharang na hiling sa icon",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Huwag magpakita ng mga tooltip",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Gamitin ang menu sa konteksto kung naaangkop",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Para sa color-blind",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Hitsura",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Pinasadyang kulay ng accent",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Paandarin ang suporta sa imbakan sa cloud",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Isa akong advanced user",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Pigilan ang browser na mag-preload ng mga pahinang iniisip nito na baka bisitahin mo (upang pigilan ang koneksyon sa mga hinarang na site)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Pigilan ang pag-audit sa hyperlink",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Pigilan ang WebRTC na magkalat ng mga lokal na IP address",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Default na ugali",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Mas sinusunod ang mga per-site na ugali kaysa sa default na ugali",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Ihinto ang kosmetikong pagfi-filter",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Harangin ang mga elemento ng media na mas malaki sa {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Harangin ang remote fonts",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Harangin ang JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Harangin ang mga ulat ng CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Ilantad ang totoong pagkakakilanlan ng mga kanonikal na pangalan (CNAME)",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Advanced",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Mga feature na angkop lang sa mga gumagamit na maraming alam",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "karagdagang mga setting",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Huling pag-restore:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Huling pag-backup:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} (na) mga network filter + {{cosmeticFilterCount}} (na) mga kosmetikong filter mula sa:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} ginagamit sa {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Awtomatikong i-update ang listahan ng mga filter",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "I-update ngayon",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Tanggalin lahat ng mga cache",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Iproseso at ipatupad ang mga kosmetikong filter",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Hinaharang ng kosmetikong filter ang mga elemento sa web page na nakakaabala at hindi maharang ng mga pangharang na nakabase sa mga hiling sa network.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Huwag pansinin ang mga generikong kosmetikong filter",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Ang generikong kosmetikong filter ay ang mga kosmetikong filter na para sa lahat ng mga website. Nakakatipid ito ng memorya at CPU sapagkat ihihinto ang pagproseso sa mga generikong kosmetikong filter.\n\nMainam na gamitin ang opsyong ito sa mga device na hindi ganoon kalakas.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Itigil ang lahat ng mga aktibidad sa network hanggang sa ma-load ang lahat ng mga listahan ng mga filter",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Listahan ng mga naharang na host",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Ilapat ang mga pagbabago",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Built-in",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Mga ad",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Pagkapribado",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Mga domain na may malware",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Mga nakakaabalang bagay",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Maraming-mapaggagamitan",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Mga rehiyon o wika",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Ipinasadya",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Mag-import…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Isang URL kada linya. Hindi papansinin ang mga invalid na URL.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Luma na",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "tingnan ang nilalaman",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Huling update: {{ago}}.\nPindutin upang pilitin ang pag-update.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Ina-update…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Hindi na-update ang resource dahil sa isang network error.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Isang filter kada linya. Pwedeng simpleng hostname o EasyList-compatible ang filter. Hindi papansinin ang mga linyang nagsisimula sa <code>!</code>.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Huwag magdagdag ng pangsala mula sa mga hindi katiwa-tiwalang pinagmulan.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "I-import at idagdag",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "I-export",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "mga-static-filter-ko-sa-ublock_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Ilapat ang mga pagbabago",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Mga permanenteng patakaran",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Mga panandaliang patakaran",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Ibalik",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Ilapat",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Baguhin",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "I-save",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Itapon",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Mag-import mula sa file…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "I-export sa file",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "mga-dynamikong-patakaran-ko-sa-ublock_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Listahan ng mga dynamikong patakaran mo sa pagfi-filter.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Format ng patakaran: <code>pinagmulan patutunguhan uri aksyon</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>kumpletong dokumentasyon [sa Ingles]</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Pagsunud-sunurin:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Uri ng patakaran",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Pinagmulan",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Patutunguhan",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Idinidikta nito kung sa aling mga webpage papatayin ang uBlock Origin. Isang entry kada linya.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "I-import at idagdag",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "I-export",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "mga-pinagkakatiwalaan-kong-site-sa-ublock_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Ilapat ang mga pagbabago",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Uri",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domain",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Lahat",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Walang tab",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Kasalukuyang tab",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "I-reload ang nilalaman ng tab",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Buksan/isara ang inspektor ng DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Buksan/isara ang popup panel",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "wiki ng uBlock Origin: Ang talaan",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Linisin ang talaan",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Ihinto ang tagatala (itapon ang lahat ng papasok na datos)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Ituloy ang pagtatala",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Paandarin/patayin ang pagfi-filter ng talaan",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "nilalaman ng filter sa pagtatala",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Mga opsyon sa pagfi-filter ng talaan",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Hindi",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "inaksyunan",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "hinarang",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "pinayagan",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "binago",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1st-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3rd-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Mga detalye",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Listahan ng filter",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Patakaran",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Konteksto",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Pangunahing konteksto",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Pagkapartido",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Uri",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Patakaran sa URL",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Konteksto:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Uri:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Statikong filter",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} ang mga hiling sa network na {{type}} {{br}}kung tumutugma ang URL address nito sa {{url}} {{br}}at nagmumula ito sa {{origin}},{{br}}{{importance}} may tugmang exception filter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Harangin",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Payagan",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "uri “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "anumang uri",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "mula sa “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "mula saanman",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "maliban na lang kung",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "kahit na",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Statikong filter <code>{{filter}}</code> sa:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Hindi mahanap ang statikong filter sa mga kasalukuyang ipinapatupad na listahan ng mga filter",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Awtomatikong itatapon ang mga entry sa talaan na hindi nakakasunod sa lahat ng mga kondisyon sa ibaba:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Panatilihin ang mga entry mula sa huling {{input}} (na mga) minuto",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Panatilihin ang hanggang sa {{input}} page load kada tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Panatilihin ang hanggang sa {{input}} entry kada tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Gumamit ng {{input}} (na mga) linya kada entry sa mode na pinalaki patayo",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Itago ang mga hanay:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Oras",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/patakaran",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Konteksto",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Pagkapartido",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Listahan",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Talahanayan",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Plain",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Buksan",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Gumawa ng bagong ulat",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Maghanap ng mga magkahawig na ulat",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentasyon",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Basahin ang dokumentasyon sa <code>uBlock/wiki</code> upang matuto tungkol sa lahat ng mga feature ng uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Mga tanong at suporta",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Makakapagtanong at sasagutin ka, o makakahingi ka ng higit pang tulong sa subreddit na <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Mga problema sa filter/may problema sa website",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Iulat ang mga problema sa filter sa iilang mga website sa <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\">issue tracker ng <code>uBlockOrigin/uAssets</code></span>. <u>Kailangan mo ng account sa GitHub.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Mahalaga:</b> Upang maiwasan ang mga problema sa ilang mga website, iwasang gumamit ng iba pang mga katulad na pangharang sa content kasabay ng uBlock Origin.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tip:</b> Siguraduhing updated ang listahan mo ng mga filter. Gamitin mo ang <span data-url=\"logger-ui.html#_\">talaan</span> upang ayusin ang mga problemang naidudulot ng ilang mga filter.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Mag-ulat ng problema",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Iulat ang mga problema ng mismong uBlock Origin sa <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\">issue tracker ng <code>uBlockOrigin/uBlock-issues</code></span>. <u>Kailangan mo ng account sa GitHub.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Impormasyon para sa Pag-aayos ng Problema",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Nasa ibaba ang mga teknikal na impormasyon na maaaring makatulong sa mga volunteer na tumutulong masolusyonan ang problema mo.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Mahalaga:</b> Sa default, nakatago ang mga pribado o sensitibong impormasyon. Maaaring mas mahirap masolusyonan ang mga problema dahil sa pagtatago ng pribadong impormasyon.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Mag-ulat ng problema ng filter",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Siguraduhing wala pang ibang nakakapag-ulat ng problema mo upang hindi bahain ng trabaho ang mga volunteer.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Ang listahan ng pangsala ng kontent ay araw-araw binabago at dinadag-dagan. Siguruhin na ang iyong isyu ay hindi pa napauukulan sa mga pinakabagong update sa listahan ng pangsala. ",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Kumpirmahin na nanatili ang isyu pagkatapos i-reload ang nagkaproblema na pahina ng web.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Address ng web page:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Ang web page…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pumili rito --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Nagpapakita ng mga ad o mga tira-tira ng ad",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "May overlay o iba pang mga panggulo",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Nade-detect ang uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "May mga problema sa pagkapribado",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Nasisira kung umaandar ang uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Kung anu-anong mga tab o window ang binubuksan",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Markahan bilang hindi dapat tinitignan sa pook-trabahuan (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Itago",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Huwag itago",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Patakaran sa pagkapribado",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Talaan ng mga pagbabago",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Mga nag-ambag",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Mga pagsasalin",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Listahan ng mga filter",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Mga panlabas na dependency (angkop sa GPLv3)",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Naka-host sa mga <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN</a> na ito ang mga listahan ng mga filter ng uBO:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Random na pumipili ng CDN ang uBO kung may listahan ng mga filter na kailangang i-update",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "I-back up sa file…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ublock-backup-ko_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Ibalik mula sa file…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "I-reset sa mga default na setting…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Papalitan ng datos na binack-up noong {{time}} ang mga setting mo, at magre-restart ang uBlock₀.\n\nPayagang palitan ng naka-back up na data ang kasalukuyan mong mga setting?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Hindi mabasa o invalid ang datos",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Tatanggalin lahat ng mga setting mo, at magre-restart ang uBlock₀.\n\nI-reset ang uBlock₀ sa default na mga setting?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Error sa network: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Idagdag ang sumusunod na mga URL sa iyong listahan ng mga pinasadyang filter?\n\nPangalan: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Subaybayan",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "isang minuto ang nakalipas",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} (na) mga minuto ang nakalipas",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "isang oras ang nakalipas",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} (na) mga oras ang nakalipas",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "isang araw ang nakalipas",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} (na) mga araw ang nakalipas",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Ipakita ang Dashboard",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Ipakita ang Talaan",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "hindi umaandar",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Hinarang ang pahina",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "Hinarang ng uBlock Origin ang sumusunod na pahina sa paglo-load:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Dahil sa sumusunod na filter:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "kung walang mga parameter",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Nahanap sa:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Bumalik",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Isarado ang window na ito",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Huwag na akong balaan ulit tungkol sa site na ito",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Patayin ang striktong pagharang para sa {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Pansamantala",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanente",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Tumuloy",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "I-export sa imbakan sa cloud",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Mag-export mula sa imbakan sa cloud",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Mag-export mula sa imbakan sa cloud at ihalo sa mga kasalukuyang setting",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Itong pangalan ng device:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Babala! Mag-ingat kung babaguhin mo ang mga advanced na setting.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "I-submit",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Ilapat ang mga pagbabago",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Ibalik",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "(na) mga byte",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Harangin ang elemento sa frame…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subaybayan ang listahan ng filter…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Pansamantalang payagan ang mga malalaking elemento ng media",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Tingnan ang source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Magsulat ng shortcut",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Paandarin/patayin ang naka-lock na pagso-scroll",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopyahin sa clipboard",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Piliin lahat",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Paandarin/patayin ang kosmetikong pagfi-filter",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Babaan ang lebel ng pagharang",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Nagamit na imbakan: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Pindutin upang i-load",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Hindi nakapagsala ng maayos nung binuksan ang browser. I-reload ang pahina upang masiguro ang tamang proseso ng pagsasala.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Dapat mahuli ang entry na ito",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/fr/messages.json b/src/_locales/fr/messages.json
new file mode 100644
index 0000000..8b8cfc5
--- /dev/null
+++ b/src/_locales/fr/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Un bloqueur de nuisances efficace, qui ménagera votre processeur et votre mémoire vive.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Tableau de bord",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Attention, vous avez des changements non enregistrés !",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Rester ici",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignorer",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Paramètres",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Listes de filtres",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Mes filtres",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Mon filtrage dynamique",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Sites Web fiables",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Raccourcis",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Journal des requêtes réseau",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "À propos",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Support",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Visionneuse d'éléments",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Paramètres avancés",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Clic : Désactiver/Activer uBlock₀ pour ce site.\n\nCtrl+clic : Désactiver uBlock₀ uniquement sur cette page.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Cliquez pour désactiver uBlock₀ pour ce site\n\nCtrl+Clic pour désactiver uBlock₀ uniquement pour cette page",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Cliquez pour activer uBlock₀ pour ce site",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "Requêtes bloquées",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "sur cette page :",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}}, soit {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "depuis toujours :",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "soit",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Bloqués sur cette page",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Bloqués depuis l'installation",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domaines connectés",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Ouvrir le Tableau de bord",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Entrer en mode Zappeur",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Entrer en mode Sélecteur",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Ouvrir le journal des requêtes",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Rapporter un problème sur ce site Web",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Activer/Désactiver le blocage des fenêtres pop-ups pour ce site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Cliquez pour bloquer toutes les pop-ups de ce site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Cliquez pour cesser de bloquer toutes les pop-ups de ce site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Bloquer/Autoriser le chargement d'éléments médias à taille plus importante pour ce site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Cliquez pour bloquer les médias de grande taille sur ce site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Cliquez pour cesser de bloquer les médias de grande taille sur ce site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Activer/Désactiver le filtrage esthétique pour ce site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Cliquez pour désactiver le filtrage esthétique sur ce site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Cliquez pour activer le filtrage esthétique sur ce site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Autoriser/Bloquer le téléchargement des polices d'écriture distantes pour ce site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Cliquez pour bloquer les polices d'écriture distantes sur ce site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Cliquez pour cesser de bloquer les polices d'écriture distantes sur ce site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Cliquez pour désactiver JavaScript sur ce site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Cliquez pour cesser de désactiver JavaScript sur ce site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Fenêtres pop-ups",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Médias de grande taille",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Filtrage esthétique",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Polices d'écriture distantes",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Plus",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Moins",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Règles globales : Cette colonne concerne des règles qui s'appliquent partout.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Règles locales : Cette colonne concerne des règles qui ne s'appliquent que sur le site actuellement visité.\nLes règles locales supplantent les règles globales.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Cliquez pour rendre les changements opérés permanents.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Cliquez pour annuler les changements opérés.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "Tout",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "Images",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "Tierce-partie",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/Images de tierce-partie",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "Scripts embarqués",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "Scripts du domaine de la page",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "Scripts de tierce-partie",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "Cadres de tierce-partie",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "Domaines connectés",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} sur un total de {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Version",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "cadre",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Créer",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Cibler",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Quitter",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Aperçu",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Filtres de réseau",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Filtres esthétiques",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Clic, Ctrl-clic",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Bloquer l'élément",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Cacher les espaces réservés aux éléments bloqués",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Afficher le nombre de requêtes bloquées sur l'icône",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Désactiver les infobulles",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Utiliser le menu contextuel si possible",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Mode Daltonien",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Apparence",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Thème",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Couleur d'accentuation personnalisée",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Activer le stockage des paramètres dans le nuage",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Je suis un utilisateur/une utilisatrice avancé(e)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Désactiver la prédiction des actions sur le réseau (afin d'empêcher toute connexion pour les requêtes réseau bloquées)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Désactiver l'audit hyperlien",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Empêcher la fuite des adresses IP locales via WebRTC",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Comportement par défaut",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Ces comportements par défaut peuvent être remplacés au cas par cas",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Désactiver le filtrage esthétique",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Bloquer les éléments médias d'une taille supérieure à {{input}} Ko",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Bloquer les polices d'écriture distantes",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Désactiver JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Bloquer les rapports CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Révéler les noms canoniques",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Avancé",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Fonctionnalités convenant uniquement aux utilisateurs avancés",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "Paramètres avancés",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Date de la dernière restauration :",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Date de la dernière sauvegarde :",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} filtre(s) réseau et {{cosmeticFilterCount}} filtre(s) esthétique(s) sont actuellement en vigueur :",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} utilisé(s) sur un total de {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Mettre à jour les listes de filtres sélectionnées automatiquement",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Mettre à jour maintenant",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Vider tous les caches",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Utiliser en plus les règles esthétiques",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Les filtres esthétiques servent à cacher des éléments d'une page Web considérés comme une nuisance visuelle, et qui ne peuvent pas être bloqués par le filtrage réseau basé sur les requêtes.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignorer les filtres esthétiques génériques",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Les filtres esthétiques génériques sont des filtres esthétiques conçus pour être appliqués sur tous les sites Web. Activer cette option réduira l'utilisation en mémoire et en processeur sur les pages Web.\n\nIl est recommandé d'activer ce paramètre sur des appareils à la puissance modeste.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspendre l'activité réseau jusqu'au chargement de toutes les listes de filtres",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Listes prédéfinies d'hôtes à bloquer",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Appliquer",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Intégrées",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Publicités",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Confidentialité",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Protection anti-malware et sécurité",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Nuisances",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Tout usage",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Régions, langues",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Vos propres listes",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importer",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Une adresse Web par ligne. Les adresses Web invalides seront ignorées sans avertissement.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Obsolète",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "Voir le contenu",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Dernière mise à jour effectuée : {{ago}}\nCliquez pour forcer la mise à jour",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Mise à jour en cours…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Une erreur réseau a empêché la mise à jour de la ressource.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Une règle par ligne. Une règle peut être un simple nom d'hôte, ou encore une règle compatible EasyList. Les lignes débutant par <code>!</code> seront ignorées.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Il est recommandé de ne pas ajouter de filtres en provenance de sources non fiables.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importer",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Exporter",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "mes-filtres-statiques-ublock_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Appliquer",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Règles permanentes",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Règles temporaires",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Rétablir",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Appliquer",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Éditer",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Enregistrer",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Annuler",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importer à partir du fichier…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Exporter vers un fichier",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "mes-regles-de-filtrage-dynamique-ublock_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Liste de vos règles de filtrage dynamique",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Syntaxe : <code>source destination type action</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>Documentation complète en anglais</a>)",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Trier :",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Type de règle",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Source",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destination",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Les directives de site de confiance indiquent sur quelles pages Web uBlock Origin devrait être désactivée. Une entrée par ligne.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importer",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Exporter",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "mes-sites-fiables-ublock-{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Appliquer",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Type",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domaine",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filtre",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Tout",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "En coulisses",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Onglet courant",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Recharger le contenu de l'onglet",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Activer/Désactiver l'Inspecteur DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Activer/Désactiver le panneau pop-up",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "Page Wiki uBlock Origin : Le journal",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Vider le journal",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Mettre en pause le journal (désactive toutes les données entrantes)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Terminer la mise en pause du journal",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Activer le filtrage du journal",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "Filtrer le contenu du journal",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Options de filtrage du journal",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Pas",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "dynamique",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "bloquée",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "autorisée",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "Modifié",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "Domaine de la page",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "Tierce-partie",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Détails",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filtre",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Liste de filtres",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Règle",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Contexte",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Contexte racine",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Niveau de partie",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Type",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "Lien",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Règle de lien",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Contexte :",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Type :",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Filtre statique",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} les requêtes réseau de {{type}} {{br}} dont l'adresse Web correspond à {{url}} {{br}} qui provient du domaine {{origin}}, {{br}}{{importance}} il y a un filtre d'exception correspondant",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Bloquer",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Autoriser",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "type \"{{type}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "tout type",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "\"{{origin}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "de n'importe où",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "sauf quand",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "même s'",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Filtre statique <code>{{filter}}</code> trouvé dans :",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Filtre statique introuvable parmi les listes de filtre actives",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Les entrées du journal ne remplissant aucune des trois conditions ci-dessous seront automatiquement abandonnées :",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Conserver les entrées des {{input}} dernières minutes",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Préserver {{input}} chargements de page maximum par onglet",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Préserver {{input}} entrées maximum par onglet",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Utiliser {{input}} lignes par entrée dans le mode développé verticalement",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Cacher les colonnes :",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Heure",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filtre/Règle",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Contexte",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Niveau de partie",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Liste",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tableau",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Brut",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Ouvrir",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Créer un rapport",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Trouver des rapports similaires",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentation",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Lisez la documentation à <code>uBlock/wiki</code> pour apprendre toutes les fonctionnalités d'uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Questions et support",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Les réponses aux questions et autres formes d'assistance sont fournies dans le subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Problèmes de filtrage/Site Web non fonctionnel",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Rapportez les problèmes de filtrage avec des sites Web spécifiques dans le <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\">suivi des problèmes</span>. <u>Nécessite un compte GitHub.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important :</b> Evitez d'utiliser des bloqueurs similaires à uBlock Origin en même temps que ce dernier, car cela peut causer des problèmes de filtrage sur certains sites Web.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Astuces :</b> Assurez-vous que vos listes de filtres sont à jour. <span data-url=\"logger-ui.html#_\">Le journal des requêtes</span> est l'outil principal pour diagnostiquer des problèmes liés au filtrage.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Rapporter un bogue",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Rapportez des problèmes avec l'extension uBlock Origin elle-même dans le <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\">suivi des problèmes</span>. <u>Nécessite un compte GitHub.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Informations de dépannage",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Veuillez trouver ci-dessous les informations techniques pouvant aider les bénévoles à vous assister dans la résolution de problème.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important :</b> Les informations potentiellement privées ou sensibles sont retirées par défaut. Ainsi éditées, elles peuvent compliquer la résolution de problème.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Rapporter un problème de filtre",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Pour éviter d'encombrer les contributeurs avec des rapports en double, veuillez vérifier que le problème n'a pas déjà été rapporté.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Les listes de filtres sont actualisées tous les jours. Assurez-vous que votre problème n'ait pas déjà été résolu dans les listes de filtres les plus récentes.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Vérifiez que le problème persiste après avoir rechargé la page Web problématique.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Adresse de la page Web :",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "La page Web…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Choisir un type --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "affiche des publicités ou des résidus de publicité",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "a une surcouche ou d'autres nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "détecte uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "a des problèmes de confidentialité",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "ne fonctionne pas correctement quand uBlock Origin est activée",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "ouvre des onglets ou fenêtres indésirables",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Marquer le site Web en tant que \"NSFW\" (<a href=\"https://fr.wikipedia.org/wiki/Not_safe_for_work\">\"Not Safe For Work\", c'est-à-dire pour public averti/inapproprié au travail</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Retirer les informations potentiellement privées ou sensibles",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Restaurer les informations potentiellement privées ou sensibles",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Politique de confidentialité",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Journal des changements",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Code Source (Licence GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributeurs",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Code source",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Traductions",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Listes de filtres",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dépendances externes (compatibles GPLv3) :",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Les propres listes de filtres d'uBO sont hébergées gratuitement sur les <a href=\"https://fr.wikipedia.org/wiki/R%C3%A9seau_de_diffusion_de_contenu\">RDC</a> suivants :",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Un RDC choisi aléatoirement est utilisé lorsqu'une liste de filtres doit être mise à jour.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Exporter vers un fichier",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "mes-donnees-ublock_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Restaurer depuis un fichier…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Réinitialiser les réglages",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Vos paramètres seront remplacés par les données sauvegardées le {{time}}, puis uBlock₀ redémarrera.\n\nProcéder à l'importation ?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Les données ne peuvent être lues ou sont invalides",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Vos paramètres seront effacés, puis uBlock₀ redémarrera.\n\nProcéder à la réinitialisation des paramètres ?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Erreur réseau : {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Ajouter le lien suivant à votre sélection de listes de filtrage ?\n\nTitre : \"{{title}}\"\nLien : {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Souscrire",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "Il y a une minute",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "Il y a {{value}} minutes",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "Il y a une heure",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "Il y a {{value}} heures",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "Il y a un jour",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "Il y a {{value}} jours",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Afficher le Tableau de bord",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Voir le Journal",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "Arrêt",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Page bloquée",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock₀ a empêché le chargement de la page suivante :",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "À cause du filtre suivant :",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "sans paramètres",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Trouvé dans :",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Retour",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Fermer cette fenêtre",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Ne plus m'avertir à propos de ce site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Désactiver le blocage strict du domaine {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "De manière temporaire",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "De manière définitive",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Poursuivre",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Exporter vers le stockage dans le nuage",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importer depuis le stockage dans le nuage",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importer depuis le stockage dans le nuage et fusionner avec les réglages actuels",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Nom de ce périphérique :",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Attention, modifiez ces paramètres avancés à vos risques et périls.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Appliquer",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Appliquer",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Rétablir",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "octets",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Bloquer l'élément dans le cadre",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Souscrire à la liste de filtres",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Autoriser temporairement le chargement d'éléments médias à taille plus importante",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Voir la source…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Saisir un raccourci",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Verrouiller/Déverrouiller le défilement",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Copier vers le presse-papier",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Sélectionner tout",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Commuter le filtrage esthétique",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Détendre le mode de blocage",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Espace de stockage utilisé : {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "Ko",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "Mo",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "Go",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Cliquez pour charger",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Erreurs : {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Échec du filtrage au lancement du navigateur. Rechargez la page pour assurer un filtrage correct.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/fy/messages.json b/src/_locales/fy/messages.json
new file mode 100644
index 0000000..886b764
--- /dev/null
+++ b/src/_locales/fy/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock₀",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Einlik, in effisjinte adblocker. Brûkt hast gjin prosessorkrêft of ûnthâld.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Dashboerd",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Warskôging! Net bewarre wizigingen",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Bliuwe",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Negearje",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Ynstellingen",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filterlisten",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Myn filters",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Myn rigels",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Whitelist",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Fluchtoetsen",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Lochboek",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Oer",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Stipe",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ – Middelenviewer",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Avansearre ynstellingen",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Klikke: uBlock₀ foar dizze website yn-/útskeakelje.\n\nCtrl+klikke: uBlock₀ inkeld foar dizze side útskeakelje.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Klik om uBlock₀ foar dizze website út te skeakeljen.\n\nCtrl+klik om uBlock₀ inkeld foar dizze side út te skeakeljen.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Klik om uBlock₀ foar dizze website yn te skeakeljen.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "blokkearre fersiken",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "op dizze side",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} fan {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "sûnt ynstallaasje",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "of",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blokkearre op dizze side",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blokkearre sûnt ynstallaasje",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Ferbûne domeinen",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Dashboerd iepenje",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Elemintwiskmodus iepenje",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Elemintkiesmodus iepenje",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Lochboek iepenje",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "In probleem op dizze website melde",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Alle pop-ups foar dizze website yn-/útskeakelje",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Klik om alle pop-ups op dizze website te blokkearjen",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Klik om alle pop-ups op dizze website net mear te blokkearjen",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Grutte media-eleminten foar dizze website yn-/útskeakelje",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Klik om grutte media-eleminten op dizze website te blokkearjen",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Klik om grutte media-eleminten op dizze website net mear te blokkearjen",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Kosmetyske filters foar dizze website yn-/útskeakelje",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Klik om kosmetyske filters op dizze website út te skeakeljen",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Klik om kosmetyske filters op dizze website yn te skeakeljen",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Blokkearjen fan eksterne lettertypen foar dizze website yn-/útskeakelje",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Klik om eksterne lettertypen op dizze website te blokkearjen",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Klik om eksterne lettertypen op dizze website net mear te blokkearjen",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Klik om JavaScript op dizze website út te skeakeljen",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Klik om JavaScript op dizze website net mear út te skeakeljen",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Pop-upfinsters",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Grutte media-eleminten",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Kosmetyske filters",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Eksterne lettertypen",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Mear",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Minder",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Globale rigels: dizze kolom is foar rigels dy't op alle websites fan tapassing binne.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Lokale rigels: dizze kolom is foar rigels dy't allinnich op de aktuele website fan tapassing binne.\nLokale rigels hawwe foarrang op globale rigels.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Klik om jo wizigingen permanint te meitsjen.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Klik om jo wizigingen werom te draaien.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "alles",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "ôfbyldingen",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "fan tredden",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/ôfbyldingen fan tredden",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "ynline skripts",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "skripts fan de websites sels",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "skripts fan tredden",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "frames fan tredden",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "ferbûne domeinen",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} fan de {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Ferzje",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Meitsje",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Kieze",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Slute",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Foarbyld",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Netfilters",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Kosmetyske filters",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Klik, Ctrl-klik",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Elemint blokkearje…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Tydlike oantsjutting fan blokkearre eleminten ferstopje",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "It tal blokkearre oanfragen op it ikoan toane",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Tooltips útskeakelje",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Wêr mooglik gebrûk meitsje fan it kontekstmenu",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Kleureblynfreonlik",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Foarmjouwing",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Oanpaste aksintkleur",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Stipe foar cloudûnthâld ynskeakelje",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Ik bin in betûfte brûker (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>Lês dit earst</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Pre-fetching útskeakelje (om eltse ferbining foar blokkearre netwurkfersiken foar te kommen)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Auditing fan keppelingen útskeakelje",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "It lekken fan it lokale IP-adres fia WebRTC opkeare",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Standertgedrach",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Dizze standertgedragingen kinne foar eltse website oerskreaun wurde",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Kosmetyske filters útskeakelje",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Media-eleminten grutter as {{input}} KB blokkearje",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Eksterne lettertypen blokkearje",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "JavaScript útskeakelje",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "CSP-rapporten blokkearje",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Kanonike nammen toane",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Avansearre",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Allinnich foar technyske brûkers geskikte funksjes.",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "avansearre ynstellingen",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Lêste werstel:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Lêste reservekopy:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} netwurkfilters + {{cosmeticFilterCount}} kosmetyske filters fan:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} gebrûk fan {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Filterlisten automatysk fernije.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "No fernije",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Alle buffers leegje",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Kosmetyske filters ynlêze en tapasse.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Kosmetyske filters binne foar it ferstopjen fan eleminten yn in webside dy't fisueel steurend wêze kinne en net troch de op netwurkoanfragen basearre filter-masinen blokkearre wurde kinne.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Algemiene kosmetyske filters negearje",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Algemiene kosmetyske filters binne dy kosmetyske filters dy't bedoeld binne om op alle websites tapast te wurden. It ynskeakeljen fan dizze opsje eliminearret de oan websiden tafoege ûnthâld- en cpu-oerhead as gefolch fan it ferwurkjen fan algemiene kosmetyske filters.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Netwurkaktiviteit ûnderbrekke oant alle filterlisten laden binne",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "List fan blokkearre hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Wizigingen tapasse",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Lokaal",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Advertinsjes",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Malwaredomeinen",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Ungeriif",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multifunksjoneel",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Gebieden, talen",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Oanpast",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Ymportearje…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Ien URL per rigel. Unjildige URL's wurde stil negearre.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Ferâldere.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "ynhâld werjaan",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Lêste fernijing: {{ago}}.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Fernijt…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "In netwurkflater hat opkeard dat de boarne bywurke waard.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Ien filter per rigel. In filter kin in gewoane hostnamme of in Adblock Plus-kompatibel filter wêze. Rigels begjinnend mei <code>!</code> wurde negearre.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Foegje gjin filters fan ûnbekende boarnen ta.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Ymportearje en tafoegje",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Eksportearje",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "myn-ublock-statyske-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Wizigingen tapasse",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Permaninte rigels",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Tydlike rigels",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Tebeksette",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Tapasse",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Bewurkje",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Bewarje",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Annulearje",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Ut bestân ymportearje…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Nei bestân eksportearje",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "myn-ublock-dynamyske-rigels_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "List fan jo dynamyske filterrigels.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Rigelsyntaks: <code>boarne bestimming type aksje</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>folsleine dokumintaasje</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sortearje:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Rigeltype",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Boarne",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Bestimming",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "De fertroude-website-ynstruksjes skriuwe foar op hokker websiden uBlock Origin útskeakele wurde moat. Ien fermelding per rigel.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Ymportearje en tafoegje",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Eksportearje",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "myn-ublock-whitelist_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Wizigingen tapasse",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Type",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domein",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Alles",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Efter de skermen",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Aktuele ljepblêd",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "De ljepblêdynhâld fernije",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "De DOM-inspector yn-/útskeakelje",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "It pop-uppaniel yn-/útskeakelje",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin-wiki: de logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Logger wiskje",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Lochboek pauzearje (alle ynkommende gegevens negearje)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Lochboek ferfetsje",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Loggerfiltering yn-/útskeakelje",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "loggerynhâld filterje",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Opsjes foar loggerfiltering",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Net",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "ôfwikseljend",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blokkearre",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "tastien",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "oanpast",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "aktuele domein",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "fan tredden",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Details",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filterlist",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Rigel",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Kontekst",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Haadkontekst",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "1e/3e partij",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Type",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Dynamyske URL-filtering",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Kontekst:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Type:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Statysk filter",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} netwurkfersiken fan {{type}} {{br}}wêrfan de URL lyk is oan {{url}} {{br}}en dy komme fan {{origin}},{{br}}{{importance}} der is in oerienkomstich útsûnderingsfilter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Blokkearje",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Tastean",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "type “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "elts type",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "fan “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "fan oeral wei",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "útsein as",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "sels as",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Statysk filter <code>{{filter}}</code> fûn yn:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Statysk filter koe net yn ien fan de op dit stuit ynskeakele filterlisten fûn wurde",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Loggerfermeldingen dy't net oan alle trije fan de ûndersteande betingsten foldogge, wurde automatysk negearre:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Fermeldingen fan de lêste {{input}} minuten behâlde",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Maksimaal {{input}} sideladingen per ljepblêd behâlde",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Maksimaal {{input}} fermeldingen per ljepblêd behâlde",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "{{input}} rigels per fermelding yn fertikaal útklappe modus brûke",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Kolommen ferstopje:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Tiid",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/rigel",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Kontekst",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} 1e/3e partij",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "List",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabel",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Plat",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Iepenje",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Nije melding meitsje",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Soartgelikense meldingen sykje",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumintaasje",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Lês de dokumintaasje op <code>uBlock/wiki</code> foar mear ynfo oer alle funksjes fan uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Fragen en stipe",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Antwurden op fragen en oare soarten stipe wurde levere op de subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filterproblemen/website wurket net",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Meld filterproblemen mei spesifike websites op de <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"> probleemtracker</span>. Fereasket in GitHub-account.",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Wichtich:</b> mij it gebrûk fan oare adblockers foar itselde doel yn kombinaasje mei uBlock Origin, omdat dit op bepaalde websites problemen jaan kin.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> soargje derfoar dat jo filterlisten by-de-tiid binne. <span data-url=\"logger-ui.html#_\">De logger</span> is it primêre helpmiddel foar it analysearjen fan filterrelatearre problemen.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Bugmelding",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Meld problemen mei uBlock Origin sels by de <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"> probleemtracker</span>. Fereasket in GitHub-account.",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Probleemoplossingsynformaasje",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Hjirûnder stiet technyske ynformaasje dy't handich wêze kin wannear't frijwilligers jo probearje te helpen by it oplossen fan in probleem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Wichtich:</b> mooglik gefoelige of priveegegevens wurde standert redigearre. Redigearre gegevens kinne it oplossen fan in probleem swierder meitsje.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "In filterprobleem melde",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Kontrolearje oft it probleem net earder meld is om foar te kommen dat frijwilligers mei dûbele meldingen belêst wurde.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filterlisten wurde elke dei bywurke. Kontrolearje oft jo probleem net al yn de meast resinte filterlisten ferholpen is.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Kontrolearje oft it probleem noch hieltyd bestiet nei opnij laden fan de problematyske webside.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Adres fan de webside:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "De webside...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Meitsje in kar --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Toant advertinsjes of restanten",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Hat oerlapingen of oare ûngemakken",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detektearret uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Hat privacy-relatearre problemen",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Wurket net as uBlock Origin ynskeakele is",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Iepenet net-winske ljepblêden of finsters",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "De webside labelje as ‘NSFW’ (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">‘Not Safe For Work’</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redigearje",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Redigearje ûngedien meitsje",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacybelied",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Wizigingenlochboek",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Boarnekoade (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Meiwurkers",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Boarnekoade",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Oersettingen",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filterlisten",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Eksterne ôfhinklikheden (GPLv3-kompatibel):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO’s eigen filterlisten binne fergees beskikber op de folgjende <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN’s</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "As in filterlist bywurke wurde moat, wurdt samar in CDN brûkt",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Reservekopy nei bestân meitsje…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "myn-ublock-reservekopy_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Ut bestân werstelle…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Nei de standertynstellingen weromsette…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Al jo ynstellingen sille oerskreaun wurde mei de reservekopygegevens fan {{time}} en uBlock₀ sil werstart wurde.\n\nBinne jo wis dat jo alle besteande ynstellingen oerskriuwe wolle mei de reservekopygegevens?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "De gegevens koene net lêzen wurde of binne ûnjildich",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Al jo ynstellingen sille fuortsmiten wurde, wêrnei uBlock₀ werstart.\n\nYnstellingen dochs werstelle nei de standertwearden?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Netwurkflater: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: De folgjende URL oan jo oanpaste filterlisten tafoegje?\n\nTitel: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Abonnearje",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "in minút lyn",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} minuten lyn",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "in oere lyn",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} oeren lyn",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "in dei lyn",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} dagen lyn",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Dashboerd toane",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Lochboek toane",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "útskeakele",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Side blokkearre",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin hat it laden fan de folgjende side opkeard:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Fanwege it folgjende filter",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "sûnder parameters",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Fûn yn:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Tebekgean",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Dit finster slute",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "My net mear warskôgje oer dizze website",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Strikte blokkearring foar {{hostname}} útskeakelje",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Tydlik",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanint",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Trochgean",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Eksportearje nei cloudûnthâld",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Ymportearje fan cloudûnthâld",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Ut cloudopslach ymportearje en gearfoegje mei aktuele ynstellingen",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Apparaatnamme:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Warskôging! Wizigje dizze avansearre ynstellingen op eigen risiko.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Ferstjoere",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Wizigingen tapasse",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Tebeksette",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bytes",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Elemint yn frame blokkearje...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Abonnearje op filterlist...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Grutte media-eleminten tydlik tastean",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Boarnekoade besjen…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Typ in fluchtoets",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Beskoattele skowe yn-/útskeakelje",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopiearje nei klamboerd",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Alles selektearje",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Kosmetyske filters yn-/útskeakelje",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Blokkearringsmodus beheine",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Brûkte ûnthâldromte {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Klik om te laden",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Flaters: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Koe net goed filterje by starten fan browser.\nFernij de side foar in goede filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/gl/messages.json b/src/_locales/gl/messages.json
new file mode 100644
index 0000000..b97b2d5
--- /dev/null
+++ b/src/_locales/gl/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Ó fin, un bloqueador eficiente que non chupa toda a memoria e o procesador.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Panel de control",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Aviso! ten cambios sen gardar",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Non saír",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignorar",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Configuración",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filtros de terceiros",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Os meus filtros",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "As miñas regras",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Lista branca",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Atallos",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Rexistro de peticións de rede",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Sobre",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Axuda",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Visor de elementos",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Configuración avanzada",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Click: desactivar/activar o uBlock₀ neste sitio.\n\nCtrl+click: desactivar o Block₀ só nesta páxina.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Click: desactivar/activar o uBlock₀ neste sitio.\n\nCtrl+click: desactivar o Block₀ só nesta páxina.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Click: activar o uBlock₀ neste sitio.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "peticións bloqueadas",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "nesta páxina",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ou {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "dende a instalación",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "ou",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Bloqueado nesta páxina",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Bloqueado desde a instalación",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Dominos conectados",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Fai click para abrir o panel de control",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Activar o modo \"eliminación de elementos\"",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Ir ó modo do selector de elementos",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Ir ó rexistro de peticións",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Informar dun problema nesta web",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Activar todas as xanelas emerxentes nesta páxina",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Click: bloquear todos os elementos emerxentes neste sitio",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Click: deixar de bloquear todos os elementos emerxentes neste sitio",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Activar/desactivar o bloqueo de elementos multimedia grandes para este sitio",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Click: bloquear todos elementos multimedia de gran tamaño neste sitio",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Click: deixar de bloquear todos elementos multimedia de gran tamaño neste sitio",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Activar o filtrado cosmético nesta páxina",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Click: desactivar filtrado cosmético neste sitio",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Click: activar filtrado cosmético neste sitio",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Activar o bloqueo de fontes remotas para esta páxina",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Click: bloquear fontes remotas neste sitio",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Click: deixar de bloquear fontes remotas neste sitio",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Preme para desactivar JavaScript nesta web",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Preme para volver a activar JavaScript nesta web",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Ventás emerxentes",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Elementos multimedia grandes",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Filtrado cosmético",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Tipografías remotas",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Máis",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Menos",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Reglas globais: esta columna é para as reglas que afectan a todos os sitios.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Reglas locais: esta columna é para as reglas que afectan só a un sitio. As reglas locais anteponse ás globais.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Fai click para gardar os cambios.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Fai click para desfacer os cambios.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "todo",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "imaxes",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "de terceiros",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "Imaxes/css de terceiros",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "Scripts embebidos",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "Scripts de dominio",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "Scripts de terceiros",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "Frames de terceiros",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "dominios conectados",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} de {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Versión",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "marco",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Crear",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Escoller",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Saír",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Vista previa",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Filtros da rede",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Filtros cosméticos",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Click, Ctrl-click",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Bloquear elemento…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Agochar marcadores de posición dos elementos bloqueados",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Amosar o número de peticións bloqueadas no icono",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Desactivar axuda emerxente",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Empregar o menú contextual cando sexa posible",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Accesible para daltónicos",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Aspecto",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Decorado",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Cor destacada personalizada",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Activar soporte para almacenamento na nube",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Son unha persoa experta",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Desactivar a precarga de sitios (prevén calquera conexión para peticións de red bloqueadas)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Desactivar a auditoría de hiperligazóns/señais (<i>beacons</i>)",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Impedir que o WebRTC revele os enderezos IP locais",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Comportamento predefinido",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Estes comportamentos predefinidos poden ser modificados para cada páxina en particular",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Desactivar o filtrado cosmético",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Bloquear elementos audiovisuais maiores de {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Bloquear fontes remotas",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Desactivar JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Bloquear reportes CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Descubrir nomes canónicos",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Avanzadas",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Ferramentas orientadas a persoas con coñecemento técnico",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "configuración avanzada",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Última recuperación:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Última copia de seguridade:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} filtros de rede + {{cosmeticFilterCount}} filtros cosméticos:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "Empregados {{used}} de {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Actualización automática das listas de filtros.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Actualizar agora",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Vaciar todas as cachés",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Analizar e aplicar filtros cosméticos.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "<p>Esta opción permitirache a análise e a aplicación de <a href=\"https://adblockplus.org/en/faq_internal#elemhide\">&ldquo;filtros de ocultación de elementos&rdquo; compatibles co Adblock Plus</a>. \nEstes filtros sonche sobre todo cosméticos, serven para agochar elementos visualmente molestos nunha determinada páxina, non sendo posible a súa eliminación cun motor de bloqueo baseado en peticións.</p><p>Activar esta opción incrementará o uso de memoria do <i>uBlock₀</i>.</p>",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignorar os filtros cosméticos xenéricos",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "<p>Os filtros cosméticos xenéricos estanche pensados para seren aplicados en todas as páxinas.<p>Aínda que o uBlock₀ os xestiona dun xeito eficiente, algúns deles precisan de altas cantidades de memoria e sobreemprego da CPU, especialmente nas páxinas grandes e nas máis duradeiras.<p>Activar esta opción suprimirá os requerimentos de memoria e CPU por causa destes filtros cosméticos xenéricos, así como reducirá a cantidade de memoria ocupada polo uBlock₀ mesmo.<p>Recomendámosche activar esta opción sobre todo nos dispositivos menos potentes.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspender actividade da rede ata que se carguen todas as listas de filtrado",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lista dos servidores bloqueados",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Aplicar os cambios",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Local",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Anuncios",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacidade",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Dominios de <i>malware</i>",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Molestias",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multipropósito",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Rexións, linguaxes",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Personalizado",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importar...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Un enderezo por liña. Os enderezos inválidos seranche ignorados.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Desactualizada.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "ver contido",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Última actualización: {{ago}}\nFai click para forzar a actualización.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Actualizando...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Un erro de rede está a impedir que se actualicen os recursos.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Un filtro por cada liña. O filtro pode ser un nome de servidor, ou un filtro compatible co Adblock Plus. As liñas que comecen con <code>!</code> seranche ignoradas.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Non engadir filtros de fontes non confiables.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importar e engadir…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Exportar…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "o-meu-ublock-filtros-estaticos_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Aplicar cambios",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Regras permanentes",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Regras temporais",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Reverter",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Estabelecer",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Editar",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Gardar",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Descartar",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importar dun arquivo...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Exportar a un arquivo…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "o-meu-ublock-regras-dinamicas_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Listado coas túas regras de filtrado dinámico.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Sintaxe das regras: <code>orixe destino tipo acción</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>documentación completa</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Orde:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Tipo de regra",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Orixe",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destino",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "As directivas de sitios de confianza indican as páxinas nas que uBlock Origin estará desactivado. Ten unha entrada por cada liña.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importar e anexar",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Exportar",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "o-meu-ublock-lista-branca_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Aplicar os cambios",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Tipo",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Dominio",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "Enderezo",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filtro",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Todas",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Peticións ocultas",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Lapela activa",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Recargar contido da pestana",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Activar inspector do DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Activar panel emerxente",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "wiki de uBlock Origin: The logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Baleirar rexistro",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pausar rexistro (desbotar todos os datos de entrada)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Reactivar rexistro",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Activar filtrado do rexistro",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtras as entradas de rexistro",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Opcións do filtrado do rexistro",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Non",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "bloqueado",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "permitido",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modificado",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "da orixe",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "de terceiras partes",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Detalles",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filtrar",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Lista de filtrado",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Regra",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Contexto",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Contexto Root",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Orixe do elemento",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Tipo",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Filtrado dinámico do enderezo",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Contexto:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Tipo:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Filtrado estático",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} peticións de rede tipo {{type}} {{br}} nas cales o enderezo contenga {{url}} {{br}}e que teñan como orixe {{origin}},{{br}}{{importance}} haxa un filtro de excepción aplicable.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Bloquear",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Permitir",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "tipo “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "calquera tipo",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "dende “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "dende calquera sitio",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "agás cando",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "aínda cando",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Filtro estático <code>{{filter}}</code>atopado en:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Non atopamos filtro estático <code>{{filter}}</code> en ningunha das listas de filtros activas",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "As entradas no rexistro que non cumpran coas tres condicións inferiores desbotaranse automáticamente:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Manter entradas dos últimos {{input}} minutos",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Manter como máximo {{input}} cargas da páxina por pestana",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Manter como máximo {{input}} entradas por pestana",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Usar {{input}} liñas por entrada en modo vertical despregado",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Agochar columnas:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Hora",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filtro/regra",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Contexto",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Orixe",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Lista",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Táboa",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Plano",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Abrir",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Crear nova denuncia",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Atopar denuncias parecidas",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentación",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Le a documentación en <code>uBlock/wiki</code> para saber máis acerca das ferramentas de uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Preguntas e axuda",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "No subreddit <code>/r/uBlockOrigin</code> hai respostas a preguntas e outro tipo de axuda",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Problemas co filtrado/Esta web non funciona",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Informar de problemas co filtrado en sitios web específicos no <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>.<u>Require unha conta en GitHub.</ul>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Importante:</b> Evitar usar ao mesmo tempo outros bloqueadores semellantes a uBlock Origin, xa que podería causar problemas co filtrado nalgunhas webs en concreto.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Truco:</b> Mira que as listas de filtrado estean actualizadas.<span data-url=\"logger-ui.html#_\">The logger</span> é a ferramenta principal para diagnosticar problemas relacionados co filtrado.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Informar de problemas",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Informar de problemas co filtrado en sitios web específicos no <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>.<u>Require unha conta en GitHub.</ul>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Información para arranxar problemas",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "A información técnica seguinte podería ser útil para que as persoas que intentan axudar poidan resolver o problema.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Importante:</b> A potencial información privada ou sensible está editada por defecto. Ao editar a información poderías dificultar a resolución do problema.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Informar dun problema co filtrado",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Para evitar a sobrecarga de traballo para as persoas voluntarias con duplicados dos problemas, comproba que aínda non se informou acerca do problema.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "As listas de filtrado actualizanse a diario. Comproba que non fose solucionado coa lista de filtrado máis recente.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Comproba que o problema persiste despois de recargar a web problemática.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Enderezo da páxina web:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "A páxina web...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Escolle unha opción --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Mostra publicidade ou restos dela",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Ten capas sobreimpostas ou elementos molestos",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detecta uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Ten problemas relacionados coa privacidade",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Funciona mal cando teño uBlock Origin activado",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Abre ventás ou páxinas non desexadas",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Etiqueta a páxina como \"NSFW\" (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">\"Non é Segura No Traballo\"</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Política de privacidade",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Rexistro de cambios",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Código fonte (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Colaboradores",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Código fonte",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Traducións",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Listas de filtrado",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dependencias externas (GPLv3-compatible)",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "As listas de filtrado de uBO están aloxadas gratuitamente nos seguintes servidores <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Escóllese un CDN ao chou cando se precisa actualizar a lista.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Facer copia de seguridade nun arquivo",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ublock-copia-seguridade_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Recuperar desde arquivo...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Restabelecer os axustes por defecto...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Todas as túas preferencias serán rescritas, usando os datos rexistrados no {{time}}, e o uBlock₀ reiniciará. Queres sobrescribir toda a configuración existente empregando os datos da copia de seguridade?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Os datos son inválidos ou non poden ser lidos",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Eliminaranse todas as túas preferencias, e reiniciará o uBlock₀. Queres resetear o uBlock₀ á configuración por defecto?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Erro da rede: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: Engadir o seguinte enderezo á túa lista de filtros personalizados?\n\nTitle: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Subscribir",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "fai un minuto",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "fai {{value}} minutos",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "fai unha hora",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "fai {{value}} horas",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "fai un día",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "fai {{value}} días",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Amosar no Panel de control",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Amosar o rexistro de peticións da rede",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "desactivado",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Páxina bloqueada",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "O uBlock₀ impediu cargar a seguinte páxina:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Por mor deste filtro:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "sen parámetros",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Atopado en:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Retroceder",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Pechar esta xanela",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Non avisarme máis sobre esta web",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Desactivar o bloqueo estricto en {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Temporalmente",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanentemente",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceder",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Exportar ó almacenamento na nube",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importar dende o almacenamento na nube",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importar dende a nube e combinar coas preferencias actuais",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "... ...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "O nome deste dispositivo:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Ollo! Non cambies estas configuracións avanzadas senón sabes ben o que estás a facer.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Enviar",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Aplicar os cambios",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Reverter",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bytes",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Bloquear elemento no marco...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subscribirse á lista de filtrado...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Permitir temporalmente os elementos multimedia grandes",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Ver código fonte...",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Introduce un atallo",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Cambiar estado desprazamento",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Copiar ao portapapeis",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Seleccionar todo",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Activar filtrado cosmético",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relaxar o modo de bloqueo",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Almacenaxe usada: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Preme para cargar",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Erros: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Non se filtrou correctamente ao inicio do navegador. Recarga a páxina para asegurar un filtrado correcto.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Esta ten que ser a derradeira entrada",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/gu/messages.json b/src/_locales/gu/messages.json
new file mode 100644
index 0000000..3e3b5db
--- /dev/null
+++ b/src/_locales/gu/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "અંતે, એક કાર્યક્ષમ અવરોધક. સીપીયુ અને મેમરી પર સરળ.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Dashboard",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "ચેતવણી! તમારા ફેરફારો સચવાયેલા નથી ",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "રહો\n",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "અવગણો",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "સેટિંગ્સ",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "ફિલ્ટર યાદીઓ",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "મારા ફિલ્ટર ",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "મારા નિયમો",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Trusted sites",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Shortcuts",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Logger",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "About",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Support",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Asset viewer",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Advanced settings",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Click to enable uBlock₀ for this site.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "requests blocked",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "on this page",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "since install",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "or",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blocked on this page",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blocked since install",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domains connected",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Enter element zapper mode",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Enter element picker mode",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Open the logger",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Report an issue on this website",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Toggle the blocking of all popups for this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Click to block all popups on this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Click to no longer block all popups on this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Toggle the blocking of large media elements for this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Click to block large media elements on this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Click to no longer block large media elements on this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering for this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Click to disable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Click to enable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Toggle the blocking of remote fonts for this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Click to block remote fonts on this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Click to no longer block remote fonts on this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Click to disable JavaScript on this site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Click to no longer disable JavaScript on this site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Pop-up windows",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Large media elements",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Cosmetic filtering",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Remote fonts",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Global rules: this column is for rules which apply to all sites.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Click to make your changes permanent.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Click to revert your changes.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "all",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "images",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "3rd-party",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "3rd-party CSS/images",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "inline scripts",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1st-party scripts",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "3rd-party scripts",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "3rd-party frames",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domains connected",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} out of {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Version",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Create",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Pick",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Quit",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Preview",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Network filters",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Cosmetic filters",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Click, Ctrl-click",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Block element…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Hide placeholders of blocked elements",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Show the number of blocked requests on the icon",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Disable tooltips",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Make use of context menu where appropriate",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Color-blind friendly",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Appearance",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Theme",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Custom accent color",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Enable cloud storage support",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "I am an advanced user",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Disable pre-fetching (to prevent any connection for blocked network requests)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Disable hyperlink auditing",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Prevent WebRTC from leaking local IP addresses",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Default behavior",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "These default behaviors can be overridden on a per-site basis",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Disable cosmetic filtering",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Block media elements larger than {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Block remote fonts",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Disable JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Block CSP reports",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Uncloak canonical names",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Advanced",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Features suitable only for technical users",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "advanced settings",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Last restore:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Last backup:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} used out of {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Auto-update filter lists",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Update now",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Purge all caches",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Parse and enforce cosmetic filters",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignore generic cosmetic filters",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspend network activity until all filter lists are loaded",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Built-in",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Malware protection, security",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multipurpose",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Custom",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Import…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "One URL per line. Invalid URLs will be silently ignored.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Out of date.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "view content",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Last update: {{ago}}.\nClick to force an update.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Updating…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "A network error prevented the resource from being updated.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with <code>!</code> will be ignored.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Import and append…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Export…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Permanent rules",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Temporary rules",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Revert",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Commit",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Edit",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Save",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Discard",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Import from file…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Export to file…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "List of your dynamic filtering rules.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Rule syntax: <code>source destination type action</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>full documentation</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sort:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Rule type",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Source",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destination",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Import and append…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Export…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Type",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domain",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "All",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Tabless",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Current tab",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Reload the tab content",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Toggle the DOM inspector",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Toggle the popup panel",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: The logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Clear logger",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pause logger (discard all incoming data)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Unpause logger",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Toggle logger filtering",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filter logger content",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Logger filtering options",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Not",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blocked",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "allowed",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modified",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1st-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3rd-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Details",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filter list",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Rule",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Context",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Root context",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partyness",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Type",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL rule",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Context:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Type:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Static filter",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Block",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Allow",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "type “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "any type",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "from “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "from anywhere",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "except when",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "even if",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Static filter <code>{{filter}}</code> found in:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Static filter could not be found in any of the currently enabled filter lists",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Preserve entries from the last {{input}} minutes",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preserve at most {{input}} page loads per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Preserve at most {{input}} entries per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Use {{input}} lines per entry in vertically expanded mode",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Hide columns:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Time",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/rule",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Context",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partyness",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "List",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Table",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Plain",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Open",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Create new report",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Find similar reports",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentation",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Read the documentation at <code>uBlock/wiki</code> to learn about all of uBlock Origin's features.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Questions and support",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter issues/website is broken",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Bug report",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Troubleshooting Information",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Report a filter issue",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Address of the web page:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "The web page…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pick an entry --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shows ads or ad leftovers",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Has privacy-related issues",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Malfunctions when uBlock Origin is enabled",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Opens unwanted tabs or windows",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO's own filter lists are freely hosted on the following <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "A randomly picked CDN is used when a filter list needs to be updated.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Back up to file…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Restore from file…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Reset to default settings…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "The data could not be read or is invalid",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Network error: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Subscribe",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "a minute ago",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} minutes ago",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "an hour ago",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} hours ago",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "a day ago",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} days ago",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Show Dashboard",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Show Logger",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "off",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Page blocked",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin has prevented the following page from loading:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Because of the following filter:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "without parameters",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Found in:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Go back",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Close this window",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Disable strict blocking for {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Temporarily",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanently",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Export to cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Import from cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Import from cloud storage and merge with current settings",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "This device name:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Warning! Change these advanced settings at your own risk.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Submit",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Apply changes",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Revert",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bytes",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Block element in frame…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subscribe to filter list…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Temporarily allow large media elements",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Type a shortcut",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Toggle locked scrolling",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Copy to clipboard",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Select all",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relax blocking mode",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Storage used: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Click to load",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/he/messages.json b/src/_locales/he/messages.json
new file mode 100644
index 0000000..3bc7bd2
--- /dev/null
+++ b/src/_locales/he/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock₀",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "סוף סוף, חוסם יעיל. קל על המעבד והזיכרון.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — לוח מחוונים",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "אזהרה! יש לך שינויים שלא שמרת עדיין",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "הישאר",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "התעלם",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "הגדרות",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "רשימות מסננים",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "המסננים שלי",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "החוקים שלי",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "אתרים מהימנים",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "קיצורי דרך",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — מתעד הבקשות",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "אודות",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "תמיכה",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — מציג הנכסים",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "הגדרות מתקדמות",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "לחיצה: כבה/הפעל את uBlock₀ לאתר זה לצמיתות.\n\nCtrl+לחיצה: כבה את uBlock₀ רק בדף זה.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "לחיצה: כבה את uBlock₀ לאתר זה.\n\nCtrl+לחיצה: כבה את uBlock₀ רק בדף זה.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "לחץ על מנת להפעיל את uBlock₀ באתר זה.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "בקשות שנחסמו",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "בדף זה",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "מאז ההתקנה",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "או",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "חסומים בדף זה",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "נחסמו מאז ההתקנה",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "דומיינים שהתחברת אליהם",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "פתח את לוח המחוונים",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "היכנס למצב מחיקת אלמנט באופן זמני",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "היכנס למצב בחירת אלמנט",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "פתח את מתעד הבקשות",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "דווח על בעיה באתר אינטרנט זה",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "הפעל/כבה את החסימה של חלונות קופצים באתר זה",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "לחץ על מנת לחסום חלונות קופצים באתר זה",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "לחץ על מנת לבטל את החסימה של חלונות קופצים באתר זה",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "הפעל/כבה את החסימה של אלמנטי מדיה גדולים באתר זה",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "לחץ על מנת לחסום אלמנטי מדיה גדולים באתר זה",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "לחץ על מנת לבטל את החסימה של אלמנטי מדיה גדולים באתר זה",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "הפעל/כבה מסננים קוסמטיים באתר זה",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "לחץ על מנת לכבות מסננים קוסמטיים באתר זה",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "לחץ על מנת להפעיל מסננים קוסמטיים באתר זה",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "הפעל/כבה את החסימה של פונטים חיצוניים באתר זה",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "לחץ על מנת לחסום פונטים חיצוניים באתר זה",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "לחץ על מנת לבטל את החסימה של פונטים חיצוניים באתר זה",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "לחץ על מנת לחסום JavaScript באתר זה",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "לחץ על מנת להפסיק לחסום JavaScript באתר זה",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "חלונות קופצים",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "אלמנטי מדיה גדולים",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "מסננים קוסמטיים",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "פונטים חיצוניים",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "עוד",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "פחות",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "חוקים גלובליים: עמודה זו היא עבור חוקים אשר תקפים לכל האתרים.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "חוקים לוקאליים: עמודה זו היא עבור חוקים אשר תקפים לאתר הנוכחי בלבד.\nחוקים לוקאליים דורסים את החוקים הגלובליים.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "לחץ על מנת להפוך את השינויים שלך לקבועים.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "לחץ על מנת לבטל את השינויים שלך.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "הכל",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "תמונות",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "צד-3",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/תמונות צד-3",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "סקריפטים מוטמעים",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "סקריפטים צד-1",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "סקריפטים צד-3",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "מסגרות צד-3",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "דומיינים שהתחברת אליהם",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} מתוך {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "גרסה",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "סקריפט",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "מסגרת",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "צור",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "בחר",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "צא",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "תצוגה מקדימה",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "מסנני רשת",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "מסננים קוסמטיים",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "לחיצה, Ctrl+לחיצה",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "חסום אלמנט…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "הסתר את המקום שנשאר מחסימה של אלמנטים",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "הראה את מספר הבקשות החסומות על האייקון",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "כבה רמזים צצים",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "הצגת הפריט 'חסום אלמנט' בתפריט הלחצן הימני איפה שאפשר",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "ידידותי לעיוורי צבעים",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "נראות",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "ערכת נושא",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "צבע הדגשה מותאם אישית",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "הפעל אחסון בענן",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "אני משתמש מתקדם",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "כבה אחזור מוקדם של משאבים (על מנת למנוע מחיבורים של בקשות רשת חסומות להישלח)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "חסום Hyperlink auditing",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "מנע מ WebRTC להדליף כתובות IP לוקאליות",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "התנהגות ברירת מחדל",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "התנהגויות ברירת מחדל אלו יכולות להיקבע עבור כל אתר בנפרד",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "כבה מסננים קוסמטיים",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "חסום אלמנטי מדיה הגדולים מ {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "חסום פונטים חיצוניים",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "חסום JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "חסום דיווחי CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "חשוף רשומות DNS מסוג CNAME",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "מתקדם",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "מאפיינים למשתמשים בעלי ידע טכני בלבד",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "הגדרות מתקדמות",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "שחזור אחרון:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "גיבוי אחרון:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} מסנני רשת + {{cosmeticFilterCount}} מסננים קוסמטיים מתוך:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} בשימוש מתוך {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "עדכן אוטומטית את רשימות המסננים.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "עדכן כעת",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "נקה את כל זיכרוני המטמון",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "פרסר ואפשר מסננים קוסמטיים.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "מסננים קוסמטיים נועדו להסתיר אלמנטים בדף אינטרנט אשר נחשבים למטרד חזותי, ואשר לא יכולים להיחסם על ידי מנוע חסימת בקשות רשת.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "התעלם ממסננים קוסמטיים כלליים",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "מסננים קוסמטיים כלליים - אלה הם המסננים הקוסמטיים, אשר מיועדים להיות מוחלים על כל דפי האינטרנט. אפשור הגדרה זו תוריד את צריכת הזיכרון והמעבד אשר מתווספות לדפי אינטרנט כתוצאה משימוש במסננים קוסמטיים כלליים.\n\nמומלץ לאפשר הגדרה זו במכשירים פחות חזקים.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "השהה פעילות רשת עד לסיום טעינת כל רשימות הסינון",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "רשימה של דומיינים חסומים",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "החל שינויים",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "מובנה",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "פרסומות",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "פרטיות",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "ביטחון והגנה מפני נוזקה",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "מטרדים",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "רב תכליתי",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "אזורים, שפות",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "מותאם אישית",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "ייבא…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "כתובת אינטרנט אחת בכל שורה. כתובות אינטרנט שאינן חוקיות לא יפורשו.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "לא עדכני.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "הצג תוכן",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "עדכון אחרון: {{ago}}.\nלחץ על מנת לאלץ עידכון.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "מעדכן…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "בעיית רשת מנעה מהמשאב להתעדכן.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "מסנן אחד לכל שורה. המסנן יכול להיות דומיין פשוט, או מסנן התואם ל- EasyList. שורות עם קידומת <code>!</code> לא יפורשו.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "ייבא וצרף",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "ייצוא",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "החל שינויים",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "חוקים קבועים",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "חוקים זמניים",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "החזר למצב הקודם",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "החל",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "ערוך",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "שמור",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "בטל",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "ייבא מקובץ…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "ייצא לקובץ...",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "רשימת חוקי המסננים הדינאמיים שלך.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "סינטקס חוק: <code>פעולה סוג יעד מקור</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>תיעוד מלא</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "מיין לפי:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "סוג הרשומה",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "מקור",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "יעד",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "הנחיות אתר מהימנות, מכתיבות באילו עמודי מרשתת יש להשבית את uBlock Origin. רשומה אחת לכול שורה.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "ייבא וצרף",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "ייצוא",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "החל שינויים",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "סוג",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "דומיין",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "כתובת",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "מסנן",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "כל הטאבים",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "מאחורי הקלעים",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "לשונית נוכחית",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "טען מחדש את תוכן הלשונית",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "פתח/סגור את ה DOM inspector",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "הצג/הסתר את הפאנל הקופץ",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin וויקי: מתעד הבקשות",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "נקה בקשות",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "עצור תיעוד של בקשות (התעלם מכל בקשה חדשה)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "המשך תיעוד של בקשות",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "הפעל/כבה סינון של מתעד הבקשות",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "סנן רשומות של מתעד הבקשות",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "הגדרות סינון של מתעד הבקשות",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "לא",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "חסום",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "מאופשר",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "השתנה",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "צד-1",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "צד-3",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "פרטים",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "מסנן",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "רשימת מסננים",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "חוק",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "הקשר",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "ההקשר המקורי",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "צד",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "סוג",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "כתובת",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "סינון URL דינאמי",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "הקשר:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "סוג:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "סינון סטאטי",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} בקשות רשת מסוג {{type}} {{br}} שה URL שלהן הוא {{url}} {{br}} ואשר מגיע מהאתר {{origin}},{{br}}{{importance}} קיים כבר מסנן שמתיר להעביר בקשות רשת אלה.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "חסום",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "אפשר",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "מסוג \"{{type}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "כל סוג",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "מתוך \"{{origin}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "מכל מקום",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "אך לא כאשר",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "גם אם",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "המסנן הסטאטי <code>{{filter}}</code> נמצא ב:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "המסנן הסטאטי לא נמצא בשום אחת מרשימות המסננים המופעלות כרגע",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "רשומות של מתעד הבקשות שלא תואמות את כל שלושת התנאים הבאים לא ישמרו:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "שמור היסטוריית רשומות של {{input}} הדקות האחרונות",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "שמור היסטוריה של עד {{input}} טעינות עמוד עבור כל לשונית",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "שמור היסטוריה עד {{input}} רשומות עבור כל לשונית",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "השתמש ב {{input}} שורות עבור כל רשומה במצב פרוס אנכית",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "הסתר עמודות:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} זמן",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} מסנן/חוק",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} הקשר",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} צד",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "רשימה",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "טבלה",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "פשוט",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "פורמט Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "לפתוח",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "צור דוח חדש",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "מצא דוחות דומים",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "דוקומנטציה",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "קרא את הדוקומנטציה ב <code>uBlock/wik</code> על מנת ללמוד על כל היכולות של uBlock Origin",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "שאלות ותמיכה",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "תשובות לשאלות ושאר סוגי העזרה ניתן להיעזר בסאברדיט <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "בעיות סינון/אתר שבור",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "דווח על בעיות סינון באתרים קונקרטיים <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\">בלוח הבעיות <code>uBlockOrigin/uAssets</code></span>. נדרש משתמש GitHub.",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>חשוב:</b> המנע משימוש בחוסמים אחרים שיש להם את אותה המטרה באותו הזמן עם uBlock Origin, שכן זה יכול לגרום לבעיות סינון באתרים ספציפיים.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>טיפים:</b> וודאו כי רשימות המסננים שלכם מעודכנים. <span data-url=\"logger-ui.html#_\">מתעד הבקשות</span> הינו הכלי המרכזי לפענוח בעיות הקשורות לרשימות מסננים.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "דיווח על באג",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "דווח על בעיות ב uBlock Origin עצמו ל <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"> מעקב הסוגייות <code>uBlockOrigin/uBlock-issue</code></span>.\n<u>נידרש חשבון גיטהאב (GitHub)</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "מידע לפתרון בעיות",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "ראה מטה מידע טכני שיכול להיות מועיל למתנדב, כאשר הוא מנסה לעזור לך לפתור בעיה.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>חשוב:</b> מידע שהוא פוטנציאלי רגיש או פרטי מוסר בברירת מחדל. המידע שמוסר יכול לגרום לעיכוב בפתרון בעיות.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "דיווח על בעיית מסנן",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "כדי להימנע מהכבדה על מתנדבים בדווחים כפולים, נא לודא שבעיה דומה טרם דווחה.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "רשימות הסינון מתעדכנות מדי יום. וודא שהבעיה שלך עדיין לא טופלה ברשימות הסינון המעודכנות.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "וודא כי הבעיה עדיין קיימת לאחר רענון הדף הבעייתי.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "כתובת דף האינטרנט:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "דף האינטרנט…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- בחר קטגוריה --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "הצגת פרסומות או שאריות שלהן",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "קיים ריבוד או מטרד אחר",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "מזהה את uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "בעיות הקשורות לפרטיות",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "כשל תפעולי כאשר uBlock Origin פעיל",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "נפתחים לשוניות או חלונות לא רצויים",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "תיוג דף האינטרנט כ- לב\"ל (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">'לא בטוח לעבודה'</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "הסר מידע פרטי או רגיש",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "שחזר מידע פרטי או רגיש",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "מדיניות פרטיות",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "רשימת שינויים",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "קוד מקור (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "תורמים",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "קוד מקור",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "תרגומים",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "רשימות מסננים",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "תלויות חיצוניות (תואם-GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "רשימות המסננים של uBO מופצות בחינם בשירותי ה <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN</a> הבאים:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "שרות CDN אקראי נבחר לשם עדכון רשימת מסננים",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "גבה לקובץ…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "שחזר מקובץ…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "אפס להגדרות ברירת מחדל…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "כל ההגדרות שלך יוחלפו בנתונים שגובו ב {{time}}, ו uBlock₀ יופעל מחדש.\n\nהאם להחליף את כל ההגדרות הקיימות בנתונים המגובים?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "לא הוצלח לקרוא את המידע או שהוא פגום",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "כל ההגדרות שלך יימחקו, ו uBlock₀ יופעל מחדש.\n\nלאפס את uBlock₀ להגדרות ברירת מחדל?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "בעיית רשת: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "הוסף את הכתובת הבאה לרשימת הפילטרים המותאמים אישית שלך?\n\nכותרת: \"{{title}}\"\nכתובת URL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "הירשם כמנוי",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "לפני דקה",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "לפני {{value}} דקות",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "לפני שעה",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "לפני {{value}} שעות",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "לפני יום",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "לפני {{value}} ימים",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "הצג את לוח המחוונים",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "הצג את מתעד הבקשות",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "מכובה",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "הדף חסום",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin מנע מהעמוד הבא להיטען:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "בגלל המסנן הבא",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "ללא פרמטרים",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "נמצא ב:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "חזור אחורה",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "סגור חלון זה",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "אל תתריע לי שוב על אתר זה",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "בטל חסימה נוקשה עבור {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "זמנית",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "לצמיתות",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "המשך",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "ייצא לאחסון ענן",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "ייבא מאחסון ענן",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "ייבא מהגיבוי בענן ומזג עם ההגדרות הקיימות",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "שם המכשיר:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "אזהרה! שינוי הגדרות אלו על אחריותך בלבד.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "שלח",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "החל שינויים",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "החזר למצב הקודם",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "בתים",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "חסום אלמנט בתוך מסגרת…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "הירשם לרשימת המסננים…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "זמנית אפשר אלמנטי מדיה גדולים",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "צפה בקוד המקור…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "הקלד קיצור דרך",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "הפעל/כבה נעילת גלילה",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "העתק ללוח",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "בחר הכל",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "הפעל/כבה מסננים קוסמטיים",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "הרפה את מצב החסימה הנוכחי",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "אחסון בשימוש: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "לחץ על מנת לטעון",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "שגיאות: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "לא ניתן היה לסנן כראוי בעת הפעלת הדפדפן. טען מחדש את הדף כדי להבטיח סינון מתאים.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "ערך זה חייב להיות האחרון",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/hi/messages.json b/src/_locales/hi/messages.json
new file mode 100644
index 0000000..0671acb
--- /dev/null
+++ b/src/_locales/hi/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "आख़िरकार, क्रोमियम-बेस्ड ब्राउज़रों के लिए एक कुशल अवरोधक। CPU और स्मृति पर आसान।",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — डैशबोर्ड",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "चेतावनी! आपके कुछ परिवर्तनों को सहेजना अभी बाकी है",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "रुकें",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "नज़रअंदाज़ करें ",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "सेटिंग्स",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "तृतीय-पक्ष फ़िल्टर",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "मेरे फिल्टर",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "मेरे नियम",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "विश्वस्त साइट सूची",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "शॉर्टकट",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — लॉगर",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "जानकारी",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "सहायता",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — असेट व्यूअर",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "उन्नत सेटिंग्स",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "दबाए : uBlock को इस साईट में बंद/चालु करने के लिए।\n\nCtrl के साथ दबाए : uBlock को सिर्फ इस पेज में बंद करने के लिए।",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "दबाए: uBlock को इस साईट पर बंद करने के लिए।\n\nCtrl के साथ दबाए: uBlock को केवल इस पेज पर बंद करने के लिए।",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "इस साईट में uBlock₀ को चालू करने के लिए क्लिक कीजिये।",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "रुके हुए अनुरोध",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "इस पृष्ठ पर",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} या {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "स्थापना से अब तक",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "या",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "इस पेज पर ब्लॉक किया गया ",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "स्थापना के समय से ब्लॉक किया हुआ",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "कनेक्ट हुई डोमेंस",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "डैशबोर्ड खोलें",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "चीजें मिटाने के मोड में जाएं",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "एलिमेंट पिकर मोड में जाएं ",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "लॉगर खोलें",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "इस वेबसाइट पर किसी समस्या की रिपोर्ट करें",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "इस साईट के लिए कोई पॉपअप नहीं",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "इस वेबसाइट पर सभी पॉप-अप्स को ब्लाक करने के लिए क्लिक करें",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "इस वेबसाइट पर सभी पॉप-अप्स को और ब्लाक न करने के लिए क्लिक करें",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "बड़े मीडिया चीजों को रोक दें",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "इस वेबसाइट पर बड़े मीडिया ऐलिमेंटस को ब्लाक करने के लिए क्लिक करें",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "इस वेबसाइट पर बड़े मीडिया ऐलिमेंटस को ब्लाक न करने के लिए क्लिक करें",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "इस वेबसाइट की खूबसूरत फ़िल्टरिंग करें",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "इस साइट पर कॉस्मेटिक फ़िल्टरिंग बंद करने के लिए क्लिक करें",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "इस साइट पर कॉस्मेटिक फ़िल्टरिंग चालू करने के लिए क्लिक करें",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "बाहरी फ़ॉन्ट्स को ब्लॉक करें",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "इस साइट पर रिमोट फोंट को बंद करने के लिए क्लिक करें",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "इस साइट पर रिमोट फोंट अब और नहीं ब्लॉक करने के क्लिक करें ",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "जावास्क्रिप्ट को रोकने के के लिए दबाएं",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "जावास्क्रिप्ट को अब और न बंद करने के लिए दबाएं",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "पॉप-अप विंडोज",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "बड़े मीडिया एलिमेंट्स ",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "कॉस्मेटिक फिल्टर",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "रिमोट फोंट्स\n",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "जावास्क्रिप्ट ",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "और",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "कम",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "सार्वत्रिक नियम: इस क़तार के नियम सारे साइट्स पर लागु करने के लिए हैं ",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "निन्मलिखित नियमें सिर्फ इस वेबसाइट पर लागू है",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "अपने परिवर्तनों को पक्का बनाने के लिए क्लिक करें।",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "आपके परिवर्तनों को उलटने के लिए क्लिक करें",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "सभी",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "चित्र",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "तृतीय-पक्ष",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "३री-पार्टी CSS/तस्वीरें ",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "लाइन के बीच वाले स्क्रिप्ट्स",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "असली साइट के स्क्रिप्ट्स",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "दूसरी साइट के स्क्रिप्ट्स",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "दूसरी साइट के फ्रेम्स",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "कनेक्ट हुई साइटें ",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{total}} मे से {{count}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "वर्जन",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "स्क्रिप्ट",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "फ़्रेम",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "बनाएँ",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "चयन",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "बंद करें",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "पूर्व दर्शन",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "नेट फिलटर्स",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "कॉस्मेटिक फिल्टर",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "क्लिक, कंट्रोल - क्लिक",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "इस को ब्लॉक करो",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "ब्लॉक किये चीज़ो की प्लेसहोल्डर को हटाओ",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "ब्लॉक कि गयी चीज़ो की गिनती आइकॉन पर दिखाओ",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "टूलटिप्स बंद कीजिऐ",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "जहाँ उपयुक्त हो, संदर्भ मेनू का इस्तेमाल करें",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "वरणांध अनुकूलित ",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "दिखावट",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "थीम",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "निर्मित किए हुए उच्चारण रंग",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "क्लाउड स्टोरेज सपोर्ट चालू करें",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "मैं एक उच्च उपयोगकर्ता हूँ (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>आवश्यक पठन</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "प्री-फ़ेचिंग बंद करें (कोई भी ब्लॉक किये गए कनेक्शंनो से संपर्क न करने लिए)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "हाइपरलिंक जाँच को बंद करें",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "WebRTC को स्थानीय IP पतों लीक करने से रोकें ",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "सामान्य व्यवहार",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "ये सामान्य व्यवहारों को प्रति-पृष्ठ आधार पर बदला जा सकता है",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "कॉस्मेटिक फ़िल्टरिंग बंद करें ",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "{{input}} KB से बड़े मीडिया चीजें को बंद करें ",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "बाहरी फोंट्स को बंद करें ",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "जावास्क्रिप्ट को बंद करें ",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": " CSP रिपोर्ट्स को ब्लॉक करें ",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "विहित नाम अनलॉक करें",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "उन्नत",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "केवल तकनीकी उपयोगकर्ताओं के लिए उपयुक्त सुविधाएँ.",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "उन्नत सेटिंग्स",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": " पिछला रिस्टोर:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "पिछला बैकअप",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} नेटवर्क फिल्टर्स + {{cosmeticFilterCount}} कॉस्मेटिक फिल्टर्स यहां से:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{total}} में से {{used}} का इस्तेमाल किया",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "स्व-अद्यतन फ़िल्टर सूचियां",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "अभी नवीकृत करें",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "सभी अस्थायी मेमोरी को शुद्ध करे",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "कॉस्मेटिक फिल्टर्स को लें और लागू करें",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "यह विकल्प कॉस्मेटिक फिल्टर्स को लेता और उन्हें जारी करता है जो Adblock Plus- \"एलीमेंट हाइड\" से मिलतें-जुलातें हैं। यह उन चीजों को ब्लॉक करतें हैं जो वेब पेज के दिखावत में छोटे- मोटी समस्या पैदा करतें है जो नेटवर्क रिक्वेस्ट-के फिल्टरों से ब्लुक नहीं किए जा सकते। ",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "जेनेरिक कम्सेटिक फिल्टरों को नजरंदाज करें",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "जेनेरिक कॉस्मेटिक फिल्टरस वो कॉस्मेटिक फिल्टरस हैं जो सब वेब साइट्स पर लागू होते हैं। यह विकल्प को चालू कराने से मेमोरी और सीपीयू पर जो उपर का दबाव पड़ता है वो नहीं रहेगा जो कॉस्मेटिक फिल्टरों को जारी करने से हुआ था।\n\nइस विकल्प को कमज़ोर डिवाइसों पर चालू कराने की सलाह दी जाती है।",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "सभी फ़िल्टर सूचियाँ लोड होने तक नेटवर्क गति-विधि को निलंबित करें",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "परिवर्तन लागू करें",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "बिल्ट-इन ",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "विज्ञापन",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "गोपनीयता",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "मैलवेयर डोमेन",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "सतानेवाले विज्ञापन",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "बहुउद्देशीय",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "क्षेत्र, भाषा",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "कस्टम",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "इम्पोर्ट ",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "एक URL हर लाइन में. अमान्य URLs को सीधे से नजरअंदाज किया जायेगा।",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "पुरानी",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "चीजों को देखें ",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "अन्तिम अद्यातन: {{ago}}. कृत्रिम नवीकरण के लिए क्लिक की जिए",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "नवीकरण प्रगति में हैं...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "एक नेटवर्क त्रुटि ने रिसोर्स को अपडेट होने से रोक दिया। ",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "एक लाइन में एक फ़िल्टर। एक फ़िल्टर सीधा होस्टनाम, या एक Adblock Plus- योग्य फ़िल्टर हो सकता है। <code>!<code></code>से शुरू होने वाली लाइनों को नज़रअंदाज किया जायेगा।",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "अविश्वसनीय स्रोतों से फ़िल्टर न जोड़ें.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "इम्पोर्ट करें और जोड़ें",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "निर्यात करें",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "मेरे-ublock-स्‍थिर-फिल्टेरें_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "परिवर्तन लागू करें",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "स्थायी नियम",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "अस्थायी नियम",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "पलटदे",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "पक्का करो",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "एडिट",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "सहेजें",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "रद्द करें",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "फाइल से आयात करे...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "फाइल में एक्सपोर्ट करें ",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "मेरे-ublock-डायनामिक-नियम_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "मेरे डायनामिक रूल्स की लिस्ट।",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "सिंटेक्स नियम: <code>सोर्स डेस्टिनेशन टाइप एक्शन</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'> पूरी डॉक्यूमेंटेशन</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "क्रम में लगाये",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "नियम प्रकार",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "स्रोत",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "गंतव्य",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "वाइटलिस्ट के नियम यह बताते हैं कि uBlock Origin को किस वेब पेज पर बंद करना चाहिए। एक एंट्री हर लाइन में। अमान्य नियमों को सीधे-सीधे नजरअंदाज कर दिया जाएगा।",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "इम्पोर्ट करें और जोड़ें",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "निर्यात करें",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "मेरे-उबलॉक-व्हाइटलिस्ट_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "परिवर्तन लागू करें",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "प्रकार",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "डोमेन",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "यू आर एल",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "फिल्टर",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "सब",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "पर्दे के पीछे",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "वर्तमान टैब",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "टैब की चीज़ों को फिर से लोड करें ",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "DOM इंस्पेक्टर को टॉगल करें ",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "पॉप-उप पैनल को टॉगल करें ",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin विकी: लॉग्गर ",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "लॉगर क्लियर करें ",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "लॉग्गर क्लियर करें",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "लोगेर को फिर से चालू करें ",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "लोगर फ़िल्टर को टॉगल करें ",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "लोगर चीज़ों को फिल्टीर करें ",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "लोगर फ़िल्टर के चुनाव ",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "नही",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "ब्लॉक किया हुआ ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "स्वीकार किया हुआ ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "परिवर्तित",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "१ली-पार्टी ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "तृतीय-पक्ष",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "विवरण",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "फ़िल्टर ",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "फिल्टीर सूची",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "नियम",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "संदर्भ",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "मूल सन्दर्भ ",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "पर्टिनेस",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "प्रकार",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL नियम ",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "सन्दर्भ:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "प्रकार:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "स्थिर फ़िल्टर",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{type}}{{br}} कि नेटवर्क रिक्वेस्ट्स {{action}} जो मिलती है इस URL पते से {{url}}{{br}} और जो आती है यहां से {{origin}},{{br}}{{importance}} मैचिंग एक्सेप्शन फिल्टर मौजूद है।",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "ब्लॉक",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "अनुमति दें",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "प्रकार \"{{type}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "कोई भी प्रकार का",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "\"{{origin}}\" से",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "कहि से भी",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "सिवाय जब ",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "फिर भी ",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "<code>{{filter}}</code> में पाया गया स्थिर फ़िल्टर",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "फिलहाल चालू की गई हुई कोई भी फिल्टर्स सूची में स्थिर फिल्टर नहीं मिल पाया",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "नीचे दी गई तीनों सूचियों से जो नहीं मिलते उनको ऑटोमेटिकली निकाल दिया जाएगा:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "आखरी {{input}} मिनट की जो एंट्रेंस हैं उन्हें बचा कर रखें",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "ज्यादा-से-ज्यादा इतनी पेज लोड्स को बचा कर रखें {{input}}",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "ज्यादा से ज्यादा {{input}} एंट्रीज को रखें",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "{{input}} लाइनों को इस्तेमाल करें पर एंट्री में जो खड़ी स्थिति में हैं",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "कॉलम्स को छिपाएं:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} समय",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} फिल्टर/रूल",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} संदर्भ",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "पर्टीनेस",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "सूची",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "टेबल",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "प्लेन",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "मार्कडाउन",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "खोलें",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "नई रिपोर्ट बनाएं",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "ऐसी ही रिपोर्ट खोजें",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "प्रलेखन",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "uBlock की सभी विशेषताओं के बारे में जानने के लिए <code>uBlock/wiki</code> पर दस्तावेज़ पढ़ें।",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "प्रश्न और समर्थन",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "सबरेडिट <code>/r/uBlockOrigin</code>. पर सवालों के जवाब और अन्य प्रकार की सहायता सहायता प्रदान की जाती है",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "फ़िल्टर समस्याएं/वेबसाइट टूट गई है",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "विशिष्ट वेबसाइटों के साथ फ़िल्टर समस्याओं की रिपोर्ट<span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> इश्यू ट्रैकर</span>. <u>GitHub खाते की आवश्यकता है।</u> ",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>ध्यान दें :</b>uBlock Origin के साथ समान उद्देश्य वाले अन्य अवरोधकों का उपयोग करने से बचें, क्योंकि इससे विशिष्ट वेबसाइटों पर फ़िल्टर समस्याएँ हो सकती हैं।",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>युक्तियाँ :</b> सुनिश्चित करें कि आपकी फ़िल्टर सूचियाँ नवीनतम हैं। <span data-url=\"logger-ui.html#_\">लॉगर</span> आपकी फ़िल्टर से संबंधित समस्याओं के निदान के लिए प्राथमिक टूल है।",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "बग रिपोर्ट",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "uBlock Origin के साथ समस्याओं की रिपोर्ट यहाँ <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code>इश्यू ट्रैकर</span> पर करें। <u>इसके लिए GitHub खाते की आवश्यकता है।</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "समस्या निवारक जानकारी",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "नीचे तकनीकी जानकारी दी गई है जो तब उपयोगी हो सकती है जब स्वयंसेवक किसी समस्या का समाधान करने में आपकी सहायता करने का प्रयास कर रहे हों।",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b> महत्वपूर्ण: </b> संभावित रूप से निजी या संवेदनशील जानकारी को डिफ़ॉल्ट रूप से संशोधित किया जाता है। संशोधित जानकारी किसी समस्या को हल करना अधिक कठिन बना सकती है।",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "फ़िल्टर समस्या की रिपोर्ट करें",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "स्वयंसेवकों पर डुप्लीकेट रिपोर्ट का बोझ डालने से बचने के लिए, कृपया सत्यापित करें कि समस्या की रिपोर्ट पहले ही नहीं की गई है।",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "फ़िल्टर सूचियों को रोजाना अपडेट किया जाता है। सुनिश्चित करें कि आपकी समस्या का समाधान पहले से ही नवीनतम फ़िल्टर सूचियों में नहीं किया गया है।",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "सत्यापित करें कि समस्यात्मक वेबपेज को रीलोड करने के बाद समस्या अभी भी बनी हुई है।",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "वेब पेज का पता:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "वेब पेज...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- एक प्रविष्टि चुनें --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "विज्ञापन या बचा हुआ विज्ञापन दिखाता है",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "ओवरले या अन्य उपद्रव हैं",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "uBlock Origin का पता लगाता है",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "गोपनीयता से संबंधित समस्याएं हैं",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "uBlock Origin सक्षम होने पर खराबी",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "अवांछित टैब या विंडो खोलता है",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "वेब पेज को इस रूप में लेबल करें “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“काम करने के लिए सुरक्षित नहीं”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "संपादन",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "असंशोधित",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "गोपनीयता नीति",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "परिवर्तन सूची",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "सोर्स कोड {GPLv3}",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "योगदानकर्ता",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "सोर्स कोड",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "अनुवाद",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "फिल्टर सूची",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "बाहरी डिपेंडेंसीज (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO's स्वयं की फ़िल्टर सूचियाँ निम्नलिखित पर स्वतंत्र रूप से होस्ट की जाती हैं <a href=\"https://wikipedia.org/wiki/Content_delivery_network\"> CDNs </a>",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "बेतरतीब ढंग से चुनी गई सीडीएन का उपयोग तब किया जाता है जब फ़िल्टर सूची को अद्यतन करने की आवश्यकता होती है",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "फ़ाइल में बैकअप लें",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "मेरे-ublock-बैकअप_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "फाइल से वापस करो",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "सेटिंग्स को पहले की तरह करें...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "{{समय}} पर बैकअप किए गए डेटा इस्तेमाल करके आपकी सभी सेटिंग्स को ओवरराइट कर दिया जाएगा, और uBlock₀ फिर से चालू किया जाएगा।\n\nबैकअप डेटा का इस्तेमाल करके सभी मौजूदा सेटिंग्स को ओवरराइट करें?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "डेटा पढ़ा नहीं जा सका या अमान्य है",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "आपकी सारी सेटिंग्स मिटा दी जाएंगी, और uBlock₀ को फिर से चालू किया जाएगा।\n\nuBlock₀ को फ़ैक्टरी सेटिंग्स पर रीसेट करें?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "नेटवर्क त्रुटि : {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: इस यूआरएल को अपने कस्टम लिस्ट में डालें?\n\nTitle: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "सबˈस्क्राइब्",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "एक मिनट पहले",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} मिनट पहले",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "एक घंटे पहले",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} घंटे पहले",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "एक दिन पहले",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} दिन पहले",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "डैशबोर्ड दिखाओ",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "लॉगर दिखाएं",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "बंद",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "पृष्ठ प्रतिबंधित है",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin ने इस पेज को लोड होने से रोक दिया हैं:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "इस फिल्टर की वजह से ",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "पैरामीटर के बिना",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "इन में पायी है:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "वापस जाएँ",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "इस विंडो को बंद करे",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "इस साइट के बारे में मुझे दोबारा चेतावनी न दें",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "स्ट्रिक्ट ब्लॉकिंग को बंद करें इस साइट पर {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "कुछ समय के लिए",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "स्थायी",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "आगे बढ़ें",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "क्लाउड स्टोरेज में भेजें",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "क्लाउड स्टोरेज से आयात करें",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "क्लाउड स्टोरेज से डाउनलोड करें और मौजूदा सेटिंग्स के साथ मिलाएं ",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "इस साधन का नाम:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "चेतावनी! इन एडवांस सेटिंग्स को अपने जोखिम पर बदलें",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "पक्का",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "परिवर्तन लागू करें",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "पलटदे",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "बाइट्स",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "फ्रेम में तत्व को ब्लॉक करें...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "फ़िल्टर सूची की सदस्यता लें...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "कुछ समय के लिए विशाल तत्वोंको चलने की अनुमति दे",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "स्रोत कोड देखें",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "शॉर्टकट को टाइप करें ",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "लॉक की हुई स्क्रोलिंग को टोगल करें ",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "क्लिपबोर्ड में कॉपी करें",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "सभी चुनें",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "कॉस्मेटिक फ़िल्टरिंग टॉगल करें",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "ब्लैकिंग मोड को ढील दें",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "इस्तेमाल हुई स्टोरेज:{{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "केबी",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "एमबी",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "जीबी",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "लोड करने के लिए क्लिक करें",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "त्रुटियाँ : {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "ब्राउज़र खोलने पर ठीक से फ़िल्टर नहीं कर सका। उचित फ़िल्टरिंग सुनिश्चित करने के लिए वेबपेज को रीलोड करें।",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/hr/messages.json b/src/_locales/hr/messages.json
new file mode 100644
index 0000000..edceb34
--- /dev/null
+++ b/src/_locales/hr/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Konačno, efikasan blokator. Lak na CPU i memoriji.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Nadzorna ploča",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Upozorenje! Niste spremili promjene",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Ostani",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignoriraj",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Postavke",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Liste filtera",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Moji filteri",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Moja pravila",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Pouzdane stranice",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Tipkovni prečaci",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Zapisnik mrežnih zahtjeva",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "O programu",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Podrška",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Preglednik svojstva",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Napredne postavke",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Klik: trajno onemogućiti/omogućiti uBlock₀ za ovaj sajt.\n\nCtrl+klik: onemogućiti µBlock₀ samo za ovu stranicu.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Kliknite za onemogućiti uBlock₀ za ovaj sajt.\n\nCtrl+klik za onemogućiti uBlock₀ samo za ovu stranicu.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Kliknite za omogućiti uBlock₀ za ovaj sajt.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "zahtjeva blokirano",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "na ovoj stranici",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ili {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "od instalacije",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "ili",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blokirano na ovoj stranici",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blokirano od instalacije",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domena povezano",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Otvori upravljačku ploču",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Pokrenite odabir elementa za blokiranje",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Pokrenite odabir elementa",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Odlazak na zapisnik zahtjeva",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Prijavite problem na ovoj web stranici",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Uključi/isključi skočne prozore na ovoj stranici",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Kliknite za blokiranje svih pop-up prozora na ovom sajtu",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Kliknite za ukloniti blokiranje svih pop-up prozora na ovom sajtu",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Namjestite blokiranje velikih medijskih elemenata za ovo mjesto",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Kliknite za blokiranje velikih medijskih elemenata na ovom sajtu",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Kliknite za ukloniti blokiranje velikih medijskih elemenata na ovom sajtu",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Uključi/isključi estestko filtriranje na ovoj stranici",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Kliknite kako biste onemogućili estestko filtriranje na ovom sajtu",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Kliknite kako biste omogućili estestko filtriranje na ovom sajtu",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Uključi/isključi blokiranje udaljenih fontova za ovu stranicu",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Kliknite za blokiranje udaljenih fontova na ovom sajtu",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Kliknite za ukloniti blokiranje udaljenih fontova na ovom sajtu",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Kliknite kako biste onemogućili JavaScript na ovoj stranici",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Kliknite kako biste omogućili JavaScript na ovoj stranici",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Skočni prozori",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Veliki medija elementi",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Estetski filteri",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Udaljeni fontovi",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Više",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Manje",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Globalna pravila: ovaj stupac je za pravila koja vrijede za sve stranice.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Lokalna pravila: ovaj stupac je za pravila koja vrijede samo za trenutnu stranicu.\nLokalna pravila nadjačavaju globalna pravila.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Kliknite kako biste spremili promjene.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Kliknite kako bi vratili promjene.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "sve",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "slike",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "treće strane",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/slike trećih strana",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "skripte u liniji",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "Skripte prve strane",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "Skripte trećih strana",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "Okviri trećih strana",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domena povezan",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} od {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Verzija",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "skripta",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "okvir",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Stvaranje",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Odabir",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Izlaz",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Pregled",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Mrežni filteri",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Estetski filteri",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Klik, Ctrl-klik",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Blokiraj element…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Sakrij rezervirana mjesta blokiranih elemenata",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Pokaži broj blokiranih zahtjeva na ikoni",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Isključi naputke",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Koristite kontekstni izbornik gdje je prikladno",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Ugodan za daltoniste",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Izgled",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Prilagođena glavna boja",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Omogući podršku za pohranu u oblaku",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Ja sam napredni korisnik",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Onemogući pretpreuzimanje (za sprečavanje bilo koje veze blokiranih mrežnih zahtjeva)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Onemogući provjeravanje hiperlinkova",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Spriječi WebRTC da propušta lokalnu IP adresu",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Zadano ponašanje",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Ova zadana ponašanja mogu biti poništena na bazi web-stranice",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Onemogući estesko filtriranje",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Blokiraj medijske elemente veće od {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Blokiraj udaljene fontove",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Onemogući JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Blokiraj CSP izvješća",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Prikaži kanonske nazive",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Napredno",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Značajke prikladne samo za napredne korisnike.",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "napredne postavke",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Posljednji povratak na prijašnje:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Posljednja sigurnosna kopija:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} mrežni/ih filter/a + {{cosmeticFilterCount}} estetski/ih filter/a iz:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} korišteno od {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Automatsko ažuriranje popisa filtera.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Ažuriraj odmah",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Očistiti sve cache-ove",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Raščlaniti i primijeniti estetske filtre.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Estetski filteri služe za skrivanje elementa web stranice koji se smatraju vizualnim smetanjem i koji ne mogu biti blokirani filtriranjem mrežnih zahtjeva.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignoriraj opće estetsko filtriranje.",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generički estetski filteri su takvi filteri koji su namijenjeni svim web stranicama. Omogućavanjem ove postavke eliminirati će se memorijska i procesorska dodatna upotreba na web stranicama kao rezultat korištenja generičkih estetskih filtera.\n\nPreporučeno je omogućiti ovu postavku na slabijim uređajima.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Obustavite mrežnu aktivnost dok se ne učitaju svi popisi filtera",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Popis blokiranih hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Primijeni promjene",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Ugrađeno",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Reklame",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privatnost",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Zaštita od zlonamjernog softvera, sigurnost",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Nametljivost",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Višenamjensko",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regije, jezici",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Prilagođeno",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Uvoz…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Jedan URL po retku. Nevaljani URL-ovi će biti tiho ignorirani.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Zastarjelo.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "vidi sadržaj",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Posljednje ažuriranje: {{ago}}.\nKliknite za ažuriranje.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Ažuriranje u tijeku…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Mrežna pogreška je sprječila ažuriranje resursa.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Jedan filter po retku. Filter može biti običan hostname ili filter kompatibilan sa EasyList-om. Linije sa prefiksom <code>!</code> zanemarit će se.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Nemojte dodavati filtere iz nepouzdanih izvora.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Uvesti i dodati...",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Izvoz...",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "moji-ublock-staticni-filteri_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Primijeni promjene",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Trajna pravila",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Privremena pravila",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Vratiti",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Izvršiti",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Uredi",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Spremi",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Odbaci",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Uvoz iz datoteke…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Izvoz u datoteku...",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "moja-ublock-dinamicna-pravila_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Popis dinamičkih pravila filtriranja.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Pravila sintakse: <code>akcija tipa izvornog odredišta</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>sva dokumentacija</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sortiraj:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Vrsta pravila",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Izvor",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destinacija",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Direktiva pouzdanih stranica govori za koje bi web stranice uBlock Origin trebao biti onemogućen. Jedan zapis po retku.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Uvesti i dodati...",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Izvoz...",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "moje-ublock-pouzdane-stranice_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Primijeni promjene",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Tip",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domena",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Sve",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Iza scene",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Trenutna kartica",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Ponovno učitaj sadržaj kartice",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Uključi/Isključi DOM inspektor",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Uključi/Isključi panel sa skočnim prozorima",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: Zabilješke",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Očisti zabilješke",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pauziraj zabilješke (odbaci sve dolazne podatke)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Uključite zabilješke",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Uključi/Isključi filtriranje zabilješki",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtrirajte zabilješke",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Postavke filtiriranja zabilješki",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Ne",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "sadržajno",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blokirano",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "dopušteno",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "promijenjeno",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "Prve strane",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "Treće strane",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Detalji",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Lista filtera",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Pravilo",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Kontekst",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Korijenski kontekst",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Pripadnost",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Tip",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Dinamično URL filtriranje",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Kontekst:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Tip:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Statičko filtriranje",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} mrežni zahtjev {{type}} {{br}}kojem URL adresa odgovora {{url}} {{br}}i koji dolazi od {{origin}},{{br}}{{importance}} postoji odgovarajući filter izuzetak.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Blokiraj",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Dopusti",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "tip “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "i tip",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "od “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "bilo gdje",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "osim kad",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "čak i ako",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Statični filter <code>{{filter}}</code> pronađen u:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Statični filter nije pronađen u trenutno uključenim listama filtera",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Unosi zapisnika koji ne ispunjavaju sva tri uvjeta navedena ispod bit će automatski odbačeni:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Sačuvajte unose od zadnjih {{input}} minuta",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Sačuvajte najviše {{input}} osvježavanja stranice po kartici",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Sačuvajte najviše {{input}} unosa po kartici",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Koristi {{input}} linija po unosu u vertikalno proširenom načinu",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Sakrij stupce:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Vrijeme",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/pravilo",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Kontekst",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Pripadnost",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Popis",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tablica",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Obično",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Otvori",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Napravi novu prijavu",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Nađi slične prijave",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentacija",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Pročitajte dokumentaciju na <code>uBlock/wiki</code> kako bi ste saznali uBlock Origin mogućnosti.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Pitanja i podrška",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Odgovori na pitanja i druge vrste podrške nalaze se na subreddit <code>r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter problemi/website je pao",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Prijavite probleme s filtriranjem određenih web stranica <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> alatki za praćenje problema</span>. <u>Potreban je GitHub račun.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Važno:</b> Izbjegavajte korištenje drugih blokera slične namjene u isto vrijeme s uBlock Origin-om jer to može uzrokovati probleme s filtriranjem na određenim web stranicama.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Savjeti:</b> Provjerite jesu li vaše liste filtera ažurirane. <span data-url=\"logger-ui.html#_\">Zapisnik</span> je primarni alat za dijagnosticiranje problema povezanih s filterima.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Prijava greške",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Prijavite probleme sa samim uBlock Origin-om na <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-problem</code> alatki za praćenje problema</span>. <u>Potreban je GitHub račun.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Informacije o rješavanju problema",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "U nastavku se nalaze tehničke informacije koje bi mogle biti korisne kada vam volonteri pokušavaju pomoći u rješavanju problema.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Važno:</b> Potencijalno privatni ili osjetljivi podaci redigirani su prema zadanim postavkama. Redaktirane informacije mogu otežati rješavanje problema.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Prijavi problem sa filterom",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Kako biste izbjegli opterećivanje volontera duplim prijavama, provjerite nije li problem već prijavljen.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Popisi filtera ažuriraju se svakodnevno. Provjerite nije li vaš problem već riješen sa najnovijim popisima filtera.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Provjerite postoji li problem i dalje nakon ponovnog učitavanja problematične web stranice.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Adresa web stranice:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Web stranica…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Odaberite unos --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Prikazuje oglase ili ostatke oglasa",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Ima overlaye ili druge smetnje",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detektira uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Ima problema u vezi s privatnošću",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Ruši se kad je uBlock Origin omogućen",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Otvara neželjene kartice ili prozore",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Označite web stranicu kao “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“nije sigurno za pregledavanje na poslu“</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redigiraj",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Vratiti na prijašnje",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Pravila privatnosti",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Popis promjena",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Izvorni kôd (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Suradnici",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Izvorni kod",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Prijevodi",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Liste filtera",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Vanjski korišteni programi (GPLv3-kompatiblini):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Vlastiti popisi filtera uBO-a besplatno su posluženi sa sljedećih <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN-ova</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Koristit će se slučajno odabrani CDN kada treba ažurirati popis filtera",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Sigurnosno kopiranje u datoteku...",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "moja-ublock-sig_kopija_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Vraćanje iz datoteke…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Vraćanje izvornih zadanih postavki…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Sve vaše postavke prebrisat će se sa postavkama spremljenim {{time}}, i uBlock₀ će se ponovno pokrenuti. \n\nPrepisati sve postojeće postavke pomoću sigurnosne kopije postavki?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Podatke nije moguće učitati ili su neispravni",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Sve vaše postavke će biti obrisane i µBlock₀ će se ponovno pokrenuti. \n\nVraćanje µBlock₀ tvorničkih postavki?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Mrežna greška {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Dodajte slijedeći izvor u vaš izbor filter lista?\n\nNaslov: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Prijava",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "prije minutu",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "prije {{value}} minute/a",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "prije jedan sat",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "prije {{value}} sata/i",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "prije jedan dan",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "prije {{value}} dana",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Prikaži kontrolnu ploču",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Prikaži zapis mrežnih zahtjeva",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "isključen",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Stranica blokirana",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin je onemogućio učitavanje sljedeće stranice:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Zbog sljedećeg filtera",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "bez parametara",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Pronađeno u:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Natrag",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Zatvori ovaj prozor",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Ne upozoravaj me više za ovu web stranicu",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Isključi strogo blokiranje za {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Privremeno",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Trajno",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Nastavi",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Izvezi u pohranu u oblaku",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Uvezi iz pohrane u oblaku",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Uvezite iz spremišta u oblaku i spojite sa trenutnim postavkama",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Naziv ovog uređaja:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Upozorenje! Mijenjate ove napredne postavke na vlastitu odgovornost.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Pošalji",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Primijeni promjene",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Vratiti",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bajtovi",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Blokiraj element u okviru…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Prijavite se na popis filtera…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Privremeno dopusti velike medijske elemente",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Pogledaj izvorni kod...",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Utipkajte tipkovni prečac",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Uključi/Isključi zaključano pomicanje",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopiraj u međuspremnik",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Odaberi sve",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Prekidač estetskog filtriranja",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Opušteni način blokiranja",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Korišteno prostora: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Kliknite za pokretanje",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Greške: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Nije moguće pravilno filtrirati pri pokretanju \npreglednika. Ponovno učitajte stranicu \nkako biste osigurali ispravno filtriranje.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Ova stavka mora biti posljednja",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/hu/messages.json b/src/_locales/hu/messages.json
new file mode 100644
index 0000000..f4c8e47
--- /dev/null
+++ b/src/_locales/hu/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Végre egy hatékony reklám- és követésblokkoló böngészőkhöz, amely kíméletes a processzorral és a memóriával.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Vezérlőpult",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Figyelem! Neked még vannak nem mentett változtatásaid",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Tartózkodás",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Figyelmen kívül hagyás",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Beállítások",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Külső szűrők",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Saját szűrők",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Saját szabályok",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Kivételek",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Billentyűparancsok",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Hálózati lekérések naplója",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Névjegy",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Támogatás",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ - Eszköznézet",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Haladó beállítások",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Klikk: uBlock₀ tiltása/engedélyezése ezen a webhelyen.\n\nCtrl+klikk: csak a jelenlegi oldal tiltása/engedélyezése.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Kattints a uBlock₀ letiltásához ezen a webhelyen.\n\nCtrl+kattintás a uBlock₀ letiltásához csak a jelenlegi oldalon.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Kattints az uBlock₀ engedélyezéséhez ezen a webhelyen.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "blokkolt lekérések",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "ezen a lapon",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} vagy {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "telepítés óta",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "vagy",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blokkolva ezen az oldalon",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blokkolva a telepítés óta",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Csatlakoztatott domain-ek",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Vezérlőpult megnyitása",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Belépés az elemeltávolító módba",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Elemválasztó mód aktiválása",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Naplózott lekérések megtekintése",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Az oldalon lévő probléma bejelentése",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Oldal összes felugró ablakának blokkolása/engedélyezése",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Kattints az összes előugró ablak letiltásához ezen a webhelyen",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Kattints, hogy ne legyen többé az összes előugró ablak blokkolva ezen a webhelyen",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Nagyméretű média elemek blokkolásának ki/bekapcsolása",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Kattints a nagyméretű médiaelemek blokkolásához ezen a webhelyen",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Kattints a nagyméretű médiaelemek blokkolásának visszavonásához ezen a webhelyen",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Kozmetikai szűrés ki- és bekapcsolása ezen a weboldalon",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Kattints a kozmetikai szűrés kikapcsolásához ezen a webhelyen",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Kattints a kozmetikai szűrés bekapcsolásához ezen a webhelyen",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Távoli betűkészletek blokkolásának ki/bekapcsolása ezen az oldalon",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Kattints a távoli fontok blokkolásához ezen a webhelyen",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Kattints a távoli betűtípusok blokkolásának visszavonásához ezen a webhelyen",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Kattints a JavaScript teljes letiltásához ezen az oldalon",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Kattints, hogy JavaScript ne legyen teljesen letiltva ezen az oldalon",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Felugró ablakok",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Nagy média elemek",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Kozmetikai szűrés",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Távoli betűtípusok",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Több",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Kevesebb",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Globális szabályok: ebben az oszlopban azok a szabályok vannak, amelyek minden weboldalra vonatkoznak.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Lokális szabályok: ebben az oszlopban azok a szabályok vannak, amelyek csak a jelenlegi weboldalra vonatkoznak.\nA lokális szabályok felülírják a globális szabályokat.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Kattintson a módosítások véglegesítéséhez.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Kattintson ide a módosítások visszavonásához.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "minden",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "képek",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "külső féltől",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "külső féltől származó css/képek",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "inline scriptek",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1st-party scriptek",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "3rd-party scriptek",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "3rd-party frame-ek",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domain csatlakozik",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}}, összesen: {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Verzió",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "szkript",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "keret",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Létrehoz",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Választ",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Kilép",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Előnézet",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Hálózati szűrők",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Kozmetikai szűrők",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Klikk, Ctrl-klikk",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Elem blokkolása",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Blokkolt elemek helyőrzőinek elrejtése",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Jelenjen meg a blokkolt lekérések száma az ikonon",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Buboréksúgó (tooltip) kikapcsolása",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Környezeti menü alkalmazása, ahol lehetséges",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Színvak-barát",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Kinézet",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Téma",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Egyedi akcentus szín",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Felhőben tárolás bekapcsolása",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Haladó felhasználó vagyok (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>További tudnivalók</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Előtöltés kikapcsolása (kapcsolódás megakadályozása blokkolt hálózati lekérésekhez)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Hivatkozás-vizsgálat kikapcsolása",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "WebRTC helyi IP-cím szivárogtatásának megakadályozása",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Alapértelmezett viselkedés",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Ezek az alapértelmezett viselkedések felülírhatóak weboldal-szinten",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Kozmetikai szűrés kikapcsolása",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Média elemek blokkolása, amelyek nagyobbak, mint {{input:number}} kB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Távoli betűkészletek blokkolása",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "JavaScript letiltása",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "CSP jelentések blokkolása",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Kanonikus nevek felfedése",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Haladó",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Funkciók csak haladó felhasználóknak ",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "haladó beállítások",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Utolsó visszaállítás:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Utolsó biztonsági mentés:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} hálózati szűrők + {{cosmeticFilterCount}} kozmetikai szűrők:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} használatban a listában lévő {{total}} szűrő közül",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Szűrőlisták automatikus frissítése.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Frissítés most",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Gyorsítótárak ürítése",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Értelmezze és alkalmazza a kozmetikai szűrőket.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "<p>Ez a beállítás engedélyezi az <a href=\"https://adblockplus.org/en/faq_internal#elemhide\">Adblock Plus-típusú &ldquo;elemelrejtő&rdquo; szűrőket</a>. Ezek kizárólag kozmetikai célokat szolgálnak; elrejtik egy webhely azon elemeit, amelyek vizuálisan zavaróak, de a hálózati lekérések alapján nem szűrhetők ki.</p><p>A beállítás engedélyezése megnöveli a <i>uBlock₀</i> memóriahasználatát.</p>",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Általános kozmetikai szűrők figyelmen kívül hagyása",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "<p>Az általános kozmetikai szűrők azok a kozmetikai szűrők, amelyek minden weboldalra érvényesek.<p>Ugyan a uBlock₀ hatékonyan kezeli őket, az általános kozmetikai szűrők mégis mérhetően magasabb memória és CPU használatot eredményezhetnek néhány weboldalon, főleg nagy, és régóta futóak esetében.<p>Ennek az opciónak a bekapcsolása kiküszöböli az általános kozmetikai szűrők kezeléséből a weboldalakon adódó memória és CPU használat többletet, továbbá csökkenti a uBlock₀ által foglalt memóriát is.<p>Ajánlott bekapcsolni ezt az opciót a gyengébb eszközökön.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Hálózati forgalom szüneteltetése, amíg a szűrőlisták be nem töltődtek",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Blokkolt hostokat tartalmazó listák",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Módosítások alkalmazása",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Beépített",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Hirdetések",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Adatvédelem",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domainek",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Kellemetlenségek",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Többcélú",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Régiók, nyelvek",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Saját",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importálás...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Soronként egy URL. A &lsquo;!&rsquo; kezdetű sorok figyelmen kívül maradnak. A szabálytalan URL-ek szintén figyelmen kívül maradnak, hibajelzés nélkül.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Elavult.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "tartalom megtekintése",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Utolsó frissítés: {{ago}}.\nKattintson a frissítés kényszerítéséhez.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Frissítés...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Egy hálózati hiba megakadályozta az erőforrás frissítését.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Soronként egy szűrő. A szűrő lehet egy hostnév, vagy egy Adblock Plus kompatibilis szűrő.\nA <code>!</code> kezdetű sorok figyelmen kívül maradnak.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Ne adj hozzá szűrőket megbízhatatlan forrásokból.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importál és hozzáad",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Exportál",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "ublock-statikus-szabalyaim_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Módosítások alkalmazása",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Állandó szabályok",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Átmeneti szabályok",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Visszaállítás",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Alkalmaz",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Szerkesztés",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Mentés",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Elvetés",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importálás fájlból…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Exportálás fájlba…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "ublock-dinamikus-szabalyaim_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Saját szűrőszabályok listája.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Szabály szintaxis: <code>forrás cél típus művelet</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>Teljes dokumentáció</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Rendezés:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Szabály típusa",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Forrás",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Cél",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Az alábbi listában felsorolt hostokon a kiegészítő nem fog működni. Soronként egy bejegyzés. Érvénytelen hostnevek figyelmen kívül maradnak.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importál és hozzáad",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Exportál",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "ublock-feherlistam_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Módosítások alkalmazása",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Típus",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domain",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Szűrő",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Összes",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Hálózati forgalom a háttérben",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Jelenlegi lap",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Töltse újra a lap tartalmát",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "DOM ellenőrző kapcsolása",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Felugró panel kapcsolása",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: A naplózó",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Naplózó törlése",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Naplózás szüneteltetése (az összes bejövő adat elvetése)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Naplózó folytatása",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Naplózó szűrőjének kapcsolása",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "naplóbejegyzések szűrése",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Naplózó szűrő beállítások",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Nem",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blokkolva",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "engedélyezve",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "módosított",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1. fél",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3. fél",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Részletek",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Szűrő",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Szűrő lista",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Szabály",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Kontextus",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Gyökér kontextus",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partyness",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Típus",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Dinamikus URL szűrő",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Kontextus:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Típus:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Statikus szűrés",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "Hálózati kérések {{action}} amik {{type}} {{br}} és illeszkednek a(z) {{url}} URL-re {{br}} és amik innen származnak: {{origin}},{{br}}{{importance}} van illeszkedő kivétel szűrő.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "blokkolása",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "engedélyezése",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "„{{type}}” típusúak",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "bármilyen típusúak",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "{{origin}}",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "bárhonnan",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "kivéve ha",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "akkor is, ha",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Statikus filter, amiben <code>{{filter}}</code> benne van:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "A statikus szűrő <code>{{filter}}</code> nem található az aktuálisan engedélyezett szűrőlisták egyikében sem",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "A naplózó bejegyzések, amelyek nem felelnek meg az alábbi három feltételnek, automatikusan eldobásra kerülnek:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "A bejegyzések megőrzése az utolsó {{input}} percből",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Tartsa meg a legtöbb {{input}} lapot betöltéskor laponként",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Tartsa meg a legtöbb {{input}} bejegyzést laponként",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Használja a {{input}} sorokat egy bejegyzésre függőlegesen bővített módban",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Oszlopok elrejtése:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Idő",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Szűrő/szabály",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Kontextus",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partyness",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Lista",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tábla",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Sík",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Megnyitás",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Hiba bejelentése",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Hasonló hibák keresése",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentáció",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Az uBlock Origin további funkcióihoz látogassa meg a dokumentációt itt: <code>uBlock/wiki</code>.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Kérdések és támogatás",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "A felhasználói kérdésekre választ és további segítséget, támogatást az <code>/r/uBlockOrigin</code> subredditen nyújtunk.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Szűrőhibák/a weboldal nem működik megfelelően",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Adott weboldalra vonatkozó szűrőhibákat jelentse a <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> hibakövetőn</span>. GitHub-fiók szükséges.",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Fontos:</b> Ne használjon hasonló célú reklámblokkolókat az uBlock Originnal egyszerre, mert ez szűrőhibákat okozhat bizonyos weboldalakon.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tippek:</b> Bizonyosodjon meg arról, hogy a legfrissebb szűrőlistákat használja. <span data-url=\"logger-ui.html#_\">A napló<span> a legfontosabb eszköz a szűrőkkel kapcsolatos hibák diagnózisában.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Hibajelentés",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Az uBlock Origin hibáit jelentse a <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> hibakövetőn</span>. GitHub-fiók szükséges.",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Hibakeresési információ",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Az alább található technikai információk segíthetnek önkénteseinknek megoldani a problémáját.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Fontos:</b> Az esetlegesen személyes vagy érzékeny adatok alapértelmezésből rejtve vannak. Az elrejtett információk megnehezíthetik a probléma megoldását.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Szűrőhibák bejelentése",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Az önkéntesek terhelésének csökkentése érdekében győződjön meg róla, hogy a hiba még nem lett bejelentve.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "A szűrőlisták naponta frissülnek. Ügyeljen arra, hogy az Ön problémája ne szerepeljen már a legfrissebb szűrőlistákon.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Ellenőrizze, hogy a probléma a problémás weboldal újratöltése után is fennáll-e.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "A weboldal címe:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "A weboldal...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Válasszon egy opciót --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Hirdetéseket vagy hirdetés maradványokat jelenít meg",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Zavaró elemeket tartalmaz",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Érzékeli a uBlock Origin-t",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Adatvédelmi problémákat vet fel",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Hibásan működik, amikor az uBlock Origin be van kapcsolva",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Kéretlen lapokat vagy ablakokat nyit meg",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "A weboldal megjelölése felnőtt tartalomként",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Elrejtés",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Megjelenítés",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Adatvédelmi szabályzat",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Változások listája",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Forráskód (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Közreműködők",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Forráskód",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Fordítások",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Szűrő listák",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Külső függőségek (GPLv3-kompatibilis):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Az uBO saját szűrőlistáit a következő ingyenes <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN-ek (angol)</a> szolgáltatják:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "A szűrőlisták frissítéséhez egy véletlenszerűen kiválasztott CDN-t használ a bővítmény",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Biztonsági mentés fájlba",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ublock-mentesem_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Visszaállítás fájlból...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Alapértelmezett beállítások visszaállítása...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "A jelenlegi beállítások felülíródnak a mentett adatokkal (mentési idő: {{time}}), utána a uBlock₀ újraindul.\n\nFelülírja a jelenlegi beállításokat a biztonsági mentéssel?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Nem olvasható vagy érvénytelen adat",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Az összes beállítás törlődik, utána a uBlock₀ újraindul.\n\nÁllítsa vissza a gyári beállításokat?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Hálózati hiba: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: Hozzáadja a következő URL-t a saját szűrő listákhoz?\n\nNév: \"{{title}}\"\nURL: \"{{url}}\"",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Feliratkozás",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "egy perce",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} perce",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "egy órája",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} órája",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "egy napja",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} napja",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Vezérlőpult megnyitása",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Napló mutatása",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "kikapcsolva",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Oldal blokkolva",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin nem engedte a következő lap betöltését:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "A következő szűrő miatt",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "paraméterek nélkül",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Ezekben található:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Vissza",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Ablak bezárása",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Ne figyelmeztessen újra ennél az oldalnál",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Kapcsolja ki a szigorú tiltást a(z) {{hostname}} részére",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Ideiglenesen",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Véglegesen",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Továbblépés",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Exportálás a felhőszolgáltatásba",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importálás a felhőszolgáltatásból",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importálás a felhőből és egybevonás a jelenlegi beállításokkal",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Ennek az eszköznek a neve:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Figyelem! Haladó beállítások, megváltoztatásuk csak saját felelősségre.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Küldés",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Módosítások alkalmazása",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Visszaállítás",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bájt",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Elem blokkolása a keretben",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Feliratkozás szűrőlistára...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Nagyméretű média elemek ideiglenes engedélyezése",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Forráskód megtekintése…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Billentyűkombináció megadása",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Zárolt görgetés kapcsolása",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Másolás a vágólapra",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Mindent kijelöl",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Kozmetikai szűrés kapcsolása",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relaxáló blokkolási mód",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Használt tárolás: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Kattints a betöltéshez",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Hibák: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Nem sikerült megfelelően szűrni a böngésző indításakor. Töltse újra az oldalt a megfelelő szűrés biztosítása érdekében.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Ez a bejegyzés utolsó kell hogy legyen",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/hy/messages.json b/src/_locales/hy/messages.json
new file mode 100644
index 0000000..291d67c
--- /dev/null
+++ b/src/_locales/hy/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Վերջապե՛ս, արդյունավետ արգելափակիչ։ Խնայում է մշակիչը և հիշողությունը։",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Կառավահան",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Ուշադրությո՛ւն։ Դուք ունեք չպահպանված փոփոխություններ։",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Մնալ",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Անտեսել",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Կարգավորումներ",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Զտիչների ցանկեր",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Իմ զտիչները",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Իս կանոնները",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Վստահված կայքեր",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Դյուրանցումներ",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Մատյան",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Ընդլայնման մասին",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Աջակցություն",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Ակտիվների դիտակ",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Ընդլայնված կարգավորումներ",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Կտտոց՝ անջատել/միացնել uBlock₀-ն այս կայքի համար։\n\nCtrl+կտտոց՝ անջատել uBlock₀-ը միայն այս էջում։",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Կտտացրեք՝ uBlock₀֊ն այս կայքի համար անջատելու համար։\n\nCtrl+կտտոց՝ uBlock₀֊ն միայն այս էջում անջատելու համար։",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "կտտացրեք՝ uBlock₀֊ն այս կայքի համար միացնելու համար։",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "արգելափակված հարցում",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "այս էջում",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "տեղադրման պահից",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "կամ",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Արգելափակվել է այս էջում",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Արգելափակվել է տեղադրման պահից",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Միացվել է տիրույթներ",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Բացել կառավահանը",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Գործարկել տարրերի ջնջման ռեժիմը",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Գործարկել տարրերի ընտրության ռեժիմը",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Բացել մատյանը",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Հաղորդել կայքում առաջացած խնդրի մասին",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Միաց./Անջ. այս կայքի բոլոր ելնող լուսամուտների արգելափակումը",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Կտտացրեք՝ այս կայքի բոլոր ելնող լուսամուտներն արգելափակելու",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Կտտացրեք՝ այս կայքի բոլոր ելնող լուսամուտների արգելափակումն անջատելու",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Միաց./Անջ. այս կայքի խոշոր մեդիա տարրերի արգելափակումը",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Կտտացրեք՝ այս կայքի խոշոր մեդիա տարրերն արգելափակելու",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Կտտացրեք՝ այս կայքի խոշոր մեդիա տարրերի արգելափակումն անջատելու",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Միաց./Անջ. կոսմետիկ զտումն այս կայքի համար",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Կտտացրեք՝ այս կայքում կոսմետիկ զտումն անջատելու",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Կտտացրեք՝ այս կայքում կոսմետիկ զտումը միացնելու",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Միաց./Անջ. կողմնակի տառատեսակների արգելափակումն այս կայքի համար",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Կտտացրեք՝ կողմնակի տառատեսակներն այս կայքում արգելափակելու",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Կտտացրեք՝ այս կայքի համար կողմնակի տառատեսակների արգելափակումն անջատելու",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Կտտացրեք՝ JavaScript֊ն այս կայքում անջատելու",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Կտտացրեք՝ այս կայքում JavaScript֊ն այլևս չանջատելու համար",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Ելնող լուսամուտներ",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Խոշոր մեդիա տարրեր",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Կոսմետիկ զտում",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Կողմնակի տառատեսակներ",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Ավել",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Պակաս",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Համընդհանուր կանոններ. այս սյունակը նախատեսված է բոլոր կայքերի վրա տարածվող կանոնների համար։",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Տեղական կանոններ. այս սյունակը նախատեսված է միայն այս կայքի վրա տարածվող կանոնների համար։\nՏեղական կանոնները վերասահմանում են համընդհանուր կանոնները։",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Կտտացրեք՝ փոփոխությունները պահպանելու համար։",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Կտտացրեք՝ փոփոխությունները հետարկելու համար։",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "բոլորը",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "պատկերներ",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "3-րդ կողմերի ռեսուրսներ",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "3-րդ կողմերի CSS/պատկերներ",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "ներտող սկրիպտներ",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1-ին կողմի սկրիպտներ",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "3-րդ կողմերի սկրիպտներ",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "3-րդ կողմերի շրջանակներ",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "միացված տիրույթներ",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{total}}֊ից {{count}}֊ը",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Տարբերակ",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "սկրիպտ",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "շրջանակ",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Ստեղծել",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Ընտրել",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Դուրս գալ",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Նախադիտում",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Ցանցային զտիչներ",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Կոսմետիկ զտիչներ",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Կտտոց, Ctrl+կտտոց",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Արգելափակել տարրը...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Թաքցնել արգելափակված տարրերի տեղապահները",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Ցուցադրել արգելափակված հայտերի քանակը պատկերակի վրա",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Անջատել գործիքահուշերը",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Օգտվեք համատեքստային ընտրացանկից, երբ դա տեղին է",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Բարեհաճ գույներ գունակուրություն ունեցողների համար",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Արտաքին տեսք",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Թեմա",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Ընտրովի շեշտային գույն",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Միացնել ամպային պահեստի աջակցոմը",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Ես հմուտ օգտվող եմ (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>կարդալը պարտադիր է</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Անջատել նախաբեռնումը՝ արգելափակված ցանցային հայտերի համար միացումները կանխելու",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Անջատել հիպերհղումների ստուգումը",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Կանխել տեղական IP-հասցեների արտահոսքը WebRTC-ի միջոցով",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Լռելյայն վարքագիծ",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Այս կարգավորումները կարող են նշված լինել յուրաքանչյուր կայքի համար ջոկ֊ջոկ",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Անջատել կոսմետիկ զտումը",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Արգելափակել {{input}} ԿԲ-ից մեծ մեդիա տարրերը",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Արգելափակել կողմնակի տառատեսակները",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Անջատել JavaScript֊ը",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Արգելափակել CSP հաշվետվությունները",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Բանալ կանոնական անունները",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Ընդլայնված կարգավորումներ",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Տեխնիկական օգտվողների համար նախատեսված գործառույթներ",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "ընդլայնված կարգավորումներ",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Վերջին վերականգնումը՝",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Վերջին պահուստային պատճենը՝",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} ցանցային զտիչ + {{cosmeticFilterCount}} կոսմետիկ զտիչ այստեղից՝",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{total}}֊ից օգտագործվում է {{used}}֊ը",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Ինքնաշխատորեն թարմացնել զտիչների ցանկերը",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Թարմացնել հիմա",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Մաքրել բոլոր հիշապահեստները",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Վերլուծել և կիրառել կոսմետիկ զտիչներ",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Կոսմետիկ զտիչները ծառայում են կայքէջի այն տարրերը թաքցնելու համար, որոնք պատճառում են տեսողական անհանգստություն և որոնք չեն կարող արգելափակվել ցանցային հայտերի հիման վրա աշխատող զտման մեխանիզմներով։",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Անտեսել ընդհանուր կոսմետիկ զտիչները",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Ընդհանուր կոսմետիկ զտիչներն այն կոսմետիկ զտիչներն են, որոնք նախատեսված են կիրառվել բոլոր կայքերում։ Այս ընտրանքը միացնելը կվերացնի հիշողության և մշակիչի բեռնվածությունը, որը կայքեջերի մոտ ավելանում է ընդհանուր կոսմետիկ զտիչների մշակման արդյունքում։\n\nԽորհուրդ է տրվում միացնել այս ընտրանքը ոչ բավականաչափ հզոր սարքերում։",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Կանգնեցնել ցանցային ակտիվությմւնը մինչև բեռնվեն զտիչների բոլոր ցուցակները",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Կիրառել փոփոխությունները",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Ներկառուցված",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Գովազդ",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Գաղտնիություն",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Վնասակար տիրույթներ",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Ջղայնացնող տարրեր",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Բազմանպատակային",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Տարածաշրջաններ, լեզուներ",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Օգտվողային",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Ներմուծել...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Մեկ URL մեկ տողում։ Անվավեր URL֊ներն անտեսվելու են առանց նախազգուշացման։",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Ժամկետանց։",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "տեսնել բովանդակությունը",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Վերջին թարմացումը՝ {{ago}}։\nԿտտացրեք՝ ստիպողական թարմացման համար։",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Թարմացվում է...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Ցանցի սխալի պատճառով թարմացումը տեղի չունեցավ։",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Մեկ տողում մեկ զտիչ։ Որպես զտիչ կարող է լինել կայքի անուն կամ EasyList-համաեղելի զտիչ։ <code>! </code>-ով սկսվող տողերը կանտեսվեն։",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Մի՛ ավելացրեք զտիչներ անվստահելի աղբյուրներից։",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Ներմուծել և հավելել",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Արտահանել",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Կիրառել փոփոխությունները",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Մշտական կանոններ",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Ժամանակավոր կանոններ",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Հետադարձել",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Հաստատել",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Խմբագրել",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Պահպանել",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Չեղարկել",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Ներմուծել նիշքից...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Արտահանել դեպի նիշք",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Դինամիկական զտման կանոնների Ձեր ցուցակը։",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Կանոնների շարահյուսություն՝ <code>աղբյուր նպատակակետ տեսակ գործողություն</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>բոլոր փաստաթղթերը</a>)։",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Տեսակավորել՝",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Կանոնի տեսակ",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Աղբյուր",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Նպատակակետ",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Վստահված կայքերի ցուցակը սահմանում է, թե որ կայքերում uBlock Origin-ը պիտի անջատված լինի։ Մեկ տողում մեկ գրառում։ Անճիշտ կանոններն առանց նախազգուշացման անտեսվելու և մեկնաբանվելու են։",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Ներմուծել և հավելել",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Արտահանել",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Կիրառել փոփոխությունները",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Տեսակ",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Տիրույթ",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Զտիչ",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Բոլորը",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Անդրկուլիսյան հարցումներ",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Ընթացիկ ներդիր",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Վերաբեռնել ներդիրի բովանդակությունը",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Միաց./Անջատել DOM-տեսուչը",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Միաց./Անջատել ելնող վահանակը",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin վիքի. Մատյան",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Մաքրել մատյանը",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Դադարեցնել մատյանավորումը (մերժել բոլոր մուտքային տվյալները)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Վերսկսել մատյանավորումը",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Միաց./Անջ. մատյանի զտումը",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "մատյանի գրառումների զտում",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Մատյանի զտման ընտրանքներ",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Ոչ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "արգելափակված",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "թույլատրված",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "փոփոխված",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1-ին կողմ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3-րդ կողմ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Մանրամասներ",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Զտիչ",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Զտիչների ցանկ",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Կանոն",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Համատեքստ",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Արմատային համատեքստ",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Պատկանելություն",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Տեսակ",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL-ի կանոն",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Համատեքստ՝",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Տեսակ՝",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Ստատիկ զտիչ",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} {{type}} ցանցային հարցումները,{{br}}որոնց URL-հասցեներն համընկնում են {{url}} {{br}}և որոնք ծագում են {{origin}},{{br}}{{importance}} կա համապատասխան բացառության կանոն։",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Արգելափակել",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Թույլատրել",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "«{{type}}» տեսակի",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "ցանկացած տեսակի",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "«{{origin}}»-ից",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "ցանկացած տեղից",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "բացառությամբ այն դեպքերի, երբ",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "նույնիսկ եթե",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "<code>{{filter}}</code> ստատիկ զտիչը գտնվել է՝",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Ստատիկ զտիչն անհնար է գտնել ներկայումս միացված զտիչների ցանկերից որևէ մեկում",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Մատյանի գրառումները, որոնք չեն բավարարում ցածում նշված բոլոր երեք պայմաններին, ինքնաշխատ կմերժվեն։",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Պահպանել վերջին {{input}} րոպեի գրառումները",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Պահպանել ոչ ավելի, քան {{input}} բեռնում ամեն մի ներդիրում",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Պահպանել ոչ ավելի, քան {{input}} գրառում ամեն մի ներդիրում",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Ուղղահայացորեն ընդլայնված ռեժիմում օգտագործել {{input}} տող ամեն մի գրառման համար",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Թաքցնել սյունակները՝",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Ժամանակ",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Զտիչ/կանոն",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Համատեքստ",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Պատկանելություն",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Ցանկ",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Աղյուսակ",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Պարզ",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Բացել",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Նոր զեկույց ստեղծել",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Գտնել նման զեկույցներ",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Փաստաթղթեր",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Կարդացեք փաստաթղթերը <code>uBlock/wiki</code>-ում՝ uBlock Origin-ի բոլոր հնարավորությունների մասին իմանալու։",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Հարցեր և աջակցություն",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Հարցերի պատասխանները և օգնության այլ տեսակները մատչելի են Reddit-ի <code>/r/uBlockOrigin</code> բաժնում։",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Զտիչի խնդիրներ/կայքը կոտրված է",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Հաղորդեք որոշակի կայքերի հետ կապված զտիչի խնդիրների մասին <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets-ի</code> խնդիրների հետագծիչի բաժնում</span>։ <u>Պահանջվում է GitHub հաշիվ։</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Կարևոր է.</b> Խուսափեք uBlock Origin-ի հետ մեկտեղ նման այլ արգելափակիչներ օգտագործելուց, քանի որ դա կարող է որոշակի կայքերում զտիչի հետ կապված խնդիրներ առաջացնել:",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Խորհուրդներ.</b>Համոզվեք, որ Ձեր զտիչների ցուցակները թարմացված են: <span data-url=\"logger-ui.html#_\">Մատյանը</span> զտիչների հետ կապված խնդիրների ախտորոշման հիմնական գործիքն է։",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Զեկույց սխալի մասին",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Հաղորդեք uBlock Origin-ի սեփական սխալների մասին <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> խնդիրների հետագծիչի բաժնում</span>։ <u>Պահանջվում է GitHub հաշիվ։</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Ախտորոշիչ տեղեկություն",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Ցածում տեխնիկական տեղեկություն է, որը կարող է օգտակար լինել, երբ կամավորները փորձում են օգնել Ձեզ լուծել խնդիրը։",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Կարևոր է.</b> Հնարավոր անձնական կամ զգայուն տեղեկությունները խմբագրվում է լռելյայնորեն։ Վերամշակված տեղեկություները կարող է ավելի բարդացնել խնդրի լուծումը:",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Հաղորդել զտիչի խնդրի մասին",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Կամավորներին կրկնօրինակ զեկույցներով չծանրաբեռնելու համար խնդրում ենք ստուգել, որ խնդիրն արդեն հաղորդված չէ։",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Զտիչների ցուցակները թարմացվում են ամեն օր։ Համոզվեք, որ Ձեր խնդիրը չի լուծվել զտիչների թարմ ցուցակներում։",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Համոզվեք, որ խնդիրը պահպանվում է նույնիսկ խնդրահարույց էջը վերաբեռնելուց հետո։",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Վեբ էջի հասցեն՝",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Վեբ էջը...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Ընտրեք կատեգորիա --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Գովազդ է ցուցադրվում կամ դրա մնացորդներ",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Վրածածկումներ կամ այլ խանգարումներ",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Հայտնաբերվում է uBlock Origin-ը",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Գաղտնիության հետ կապված խնդիրներ",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Անսարքություններ, երբ uBlock Origin-ը միացված է",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Բացում է անցանկալի ներդիրները կամ լուսամուտները",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Նշել վեբ էջը որպես «NSFW» (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">«Աշխատանքի համար անվտանգ չէ»</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Խմբագրել",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Չեղարկել խմբագրումը",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Գաղտնիության քաղաքականություն",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Փոփոխությունների մատյան",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Աղբյուրի կոդ (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Աջակցողներ",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Աղբյուրի կոդ",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Թարգմանություններ",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Զտիչների ցանկեր",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Արտաքին կախվածություններ (GPLv3-համատեղելի)՝",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO-ի սեփական զտիչների ցանկերն ազատորեն տեղաբաշխված են հետևյալ <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN-երում</a>.",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Զտիչների ցանկը թարմացնելիս օգտագործվում է պատահականորեն ընտրված CDN",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Պահուստավորել նիշքում...",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ublock-իմ-պահուստ_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Վերականգնել նիշքից...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Վերականգնել լռելյայն կարգավորումները...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Ընթացիկ կարգավորումները կփոխարինվեն տվյալներով {{time}}-ին ստեղծված պահուստային պատճենից, և uBlock₀-ը կվերագործարկվի։\n\nՓոխարինե՞լ առկա բոլոր կարգավորումները պահուստավորված տվյալներով։",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Տվյալները չեն կարող ընթերցվել կամ անվավեր են",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Ձեր բոլոր կարգավորումները կջնջվեն, uBlock₀֊ը կվերագործարկվի։\n\nՎերականգնե՞լ լռելյայն կարգավորումները։",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Ցանցի սխալ՝ {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Ավելացնե՞լ հետևյալ հասցեն զտիչների օգտվողային ցանկին։\n\nՎերնագիր՝ «{{title}}»\nURL՝ {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Բաժանորդագրվել",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "րոպե առաջ",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} րոպե առաջ",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "ժամ առաջ",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} ժամ առաջ",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "օր առաջ",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} օր առաջ",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Ցույց տալ կառավահանը",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Ցույց տալ մատյանը",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "անջատված է",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Էջն արգելաբացվեց",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin֊ը կանխել է հետևյալ էջի բեռնումը՝",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Հետևյալ զտիչի պատճառով՝",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "առանց չափանիշների",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Գտնվել է այստեղ՝",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Հետ",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Փակել այս լուսամուտը",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Այլևս չզգուշացնե՛լ ինձ այս կայքի մասին",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Անջատեք խիստ արգելափակումը {{hostname}}-ի համար",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Առժամապես",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Մշտապես",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Շարունակել",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Արտահանել առ ամպային պահեստ",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Ներմուծել ամպային պահեստից",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Ներմուծել ամպային պահեստից և միաձուլել ընթացիկ կարգավորումների հետ",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Այս սարքի անունը՝",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Ուշադրությո՛ւն։ Փոխեք այս կարգավորումները Ձեր ռիսկով և պատասխանատվությամբ։",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Հաստատել",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Կիրառել",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Հետադարձել",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "բայթ",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Արգելափակել տարրը շրջանակում...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Բաժնեգրվել զտիչների ցանկի...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Ժամանակավորապես թույլ տալ խոշոր մեդիա տարրերը",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Դիտել աղբյուրի կոդը…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Մուտքագրեք դյուրանցում",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Միաց./Անջատել ընդհանուր ոլորումը",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Պատճենել առ սեղմատախտակ",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Ընտրել բոլորը",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Փոխանջատել կոսմետիկ զտումը",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Արգելափակման թուլացված ռեժիմ",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Պահեստի չափը՝ {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "ԿԲ",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "ՄԲ",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "ԳԲ",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Կտտացրեք՝ բեռնելու համար",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Սխալներ՝ {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Չհաջողվեց կատարել զտումը զննիչի գործարկման ժամանակ։\nՎերաբեռնեք էջը՝ պատշաճ զտումն ապահովելու համար։",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/id/messages.json b/src/_locales/id/messages.json
new file mode 100644
index 0000000..21629c1
--- /dev/null
+++ b/src/_locales/id/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Akhirnya, pemblokir iklan yang efisien. Ringan penggunaan CPU dan memori.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Dasbor",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Peringatan! Anda memiliki ubahan yang belum disimpan",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Tinggal",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Abaikan",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Pengaturan",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Daftar Filter",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Filter Saya",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Aturan Saya",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Situs Terpercaya",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Pintasan",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Pencatat Log",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Tentang",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Dukungan",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Penampil aset",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Pengaturan lanjutan",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Klik: nonaktif/aktifkan uBlock₀ untuk situs ini.\n\nCtrl+klik: nonaktifkan uBlock₀ hanya di laman ini.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Klik untuk menonaktifkan uBlock₀ pada situs ini.\n\nCtrl+klik untuk menonaktifkan uBlock₀ hanya di laman ini.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Klik untuk mengaktifkan uBlock₀ pada situs ini.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "permintaan diblokir",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "di laman ini",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} atau {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "sejak dipasang",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "atau",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Diblokir di laman ini",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Diblokir sejak dipasang",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domain terhubung",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Buka dasbor",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Memasuki mode penghapus elemen",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Memasuki mode pemilihan elemen",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Buka pencatat log",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Laporkan masalah situs web ini",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Alihkan pemblokiran semua popup untuk situs ini",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Klik untuk memblokir semua popup pada situs ini",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Klik untuk tidak lagi memblokir semua popup pada situs ini",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Aktifkan/Nonaktifkan pemblokiran elemen media besar untuk situs ini",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Klik untuk memblokir elemen media berukuran besar pada situs ini",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Klik untuk tidak lagi memblokir elemen media berukuran besar pada situs ini",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Aktif/Nonaktifkan filter tampilan untuk situs ini",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Klik untuk menonaktifkan filter tampilan pada situs ini",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Klik untuk mengaktifkan filter tampilan pada situs ini",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Aktif/Nonaktifkan pemblokiran fon eksternal untuk situs ini",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Klik untuk memblokir fon eksternal pada situs ini",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Klik untuk tidak lagi memblokir fon eksternal pada situs ini",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Klik untuk menonaktifkan total JavaScript di situs ini",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Klik untuk tidak lagi menonaktifkan total JavaScript di situs ini",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Jendela pop-up",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Elemen media besar",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Filter tampilan",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Fon eksternal",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Lebih banyak",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Lebih sedikit",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Aturan global: kolom ini untuk aturan yang diterapkan ke semua situs.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Aturan lokal: kolom ini untuk aturan yang diterapkan ke situs yang sedang dikunjungi saja.\nAturan lokal menimpa aturan global.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Klik untuk membuat ubahan Anda permanen.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Klik untuk membatalkan ubahan Anda.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "semua",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "gambar",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "pihak ketiga",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/gambar pihak ke-3",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "skrip inline",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "skrip pihak pertama",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "skrip pihak ketiga",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "frame pihak ketiga",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domain terhubung",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} dari {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Versi",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "skrip",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Buat",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Pilih",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Keluar",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Pratinjau",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Filter jaringan",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Filter tampilan",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Klik, Ctrl-klik",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Blokir elemen...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Sembunyikan wadah elemen yang diblokir",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Tampilkan jumlah permintaan yang diblokir pada ikon",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Nonaktifkan tip alat",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Pergunakan menu konteks jika sesuai",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Ramah buta warna",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Tampilan",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Warna aksen khusus",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Aktifkan dukungan penyimpanan awan",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Saya pengguna tingkat lanjut",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Nonaktifkan pra-ambil (untuk mencegah sambungan apapun untuk permintaan jaringan yang diblokir)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Nonaktifkan pengauditan pranala",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Cegah WebRTC membocorkan alamat IP lokal",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Perilaku bawaan",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Perilaku bawaan ini bisa ditimpa pada masing-masing aturan situs",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Nonaktifkan filter tampilan",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Blokir elemen media yang lebih besar dari {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Blokir fon eksternal",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Nonaktifkan JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Blokir laporan CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Ungkap nama kanonis",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Tingkat lanjut",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Fitur ditujukan untuk pengguna tingkat lanjut.",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "pengaturan lanjutan",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Pemulihan terakhir:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Pencadangan terakhir:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} filter jaringan + {{cosmeticFilterCount}} filter tampilan dari:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} digunakan dari {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Otomatis perbarui daftar filter",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Perbarui sekarang",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Bersihkan semua tembolok",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Urai dan paksa terapkan filter tampilan",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Filter tampilan berfungsi untuk menyembunyikan elemen di halaman web yang dianggap sebagai gangguan visual, dan tidak bisa diblokir oleh filter berbasis permintaan jaringan.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Abaikan filter tampilan generik",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Filter tampilan generik adalah filter tampilan yang dibuat untuk diterapkan pada semua situs web. Mengaktifkan opsi ini akan menghilangkan peningkatan overhead memori ram dan CPU pada halaman web akibat diterapkannya filter tampilan generik.\n\nDirekomendasikan untuk mengaktifkan opsi ini pada perangkat dengan performa rendah.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Tunda aktivitas jaringan sampai semua daftar filter dimuat",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Daftar host yang diblokir",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Terapkan perubahan",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Bawaan",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Iklan",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privasi",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Perlindungan malware, keamanan",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Gangguan",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Serbaguna",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Wilayah, bahasa",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Khusus",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Impor...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Satu URL per baris. URL yang tidak valid akan diabaikan tanpa peringatan.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Sudah usang.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "lihat konten",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Pembaruan terakhir: {{ago}}.\nKlik untuk memaksa memperbarui.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Memperbarui...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Galat jaringan mencegah sumber daya diperbarui.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Satu filter per baris. Filter dapat berupa nama hos, atau filter yang kompatibel dengan EasyList. Baris yang diawali dengan <code>!</code> akan diabaikan.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Jangan tambah filter dari sumber yang tidak tepercaya.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Impor dan tambahkan…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Ekspor…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Terapkan perubahan",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Aturan permanen",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Aturan sementara",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Urungkan",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Tetapkan",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Sunting",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Simpan",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Batal",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Impor dari berkas...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Ekspor ke berkas…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Daftar aturan filter dinamis Anda.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Aturan sintaksis: <code>sumber tujuan jenis tindakan</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>dokumentasi lengkap</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Urutkan:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Tipe aturan",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Sumber",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Tujuan",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Arahan situs tepercaya menentukan halaman web mana yang uBlock Origin harus dinonaktifkan. Satu entri per baris.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Impor dan tambahkan…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Ekspor…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Terapkan perubahan",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Jenis",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domain",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Semua",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Di balik layar",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Tab saat ini",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Muat ulang konten tab",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Aktif/Nonaktifkan inspeksi DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Aktif/Nonaktifkan panel popup",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: Pencatat log",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Kosongkan pencatat log",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Jeda pencatat log (buang semua data masuk)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Lanjutkan pencatat log",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Aktif/Nonaktifkan penyaringan pencatat log",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filter konten pencatat log",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Opsi filter pencatat log",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Bukan",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "diblokir",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "diizinkan",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "diubah",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "pihak ke-1",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "pihak ke-3",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Detail",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Daftar filter",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Aturan",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Konteks",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Konteks induk",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Hubungan",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Jenis",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Aturan URL",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Konteks:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Jenis:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Filter statis",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} permintaan jaringan dari {{type}} {{br}}yang alamat URLnya cocok dengan {{url}} {{br}}dan yang berasal dari {{origin}},{{br}}{{importance}} ada pengecualian penyaring yang cocok.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Blokir",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Izinkan",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "jenis “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "semua jenis",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "dari “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "dari manapun",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "kecuali ketika",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "meskipun",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Filter statis <code>{{filter}}</code> ditemukan di dalam:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Filter statis tidak dapat ditemukan di semua daftar filter yang aktif saat ini",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Entri pencatat log yang tidak memenuhi ketiga kondisi di bawah akan otomatis dibuang:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Pertahankan entri sejak {{input}} menit terakhir",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Pertahankan maksimal {{input}} pemuatan laman per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Pertahankan maksimal {{input}} entri per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Gunakan {{input}} baris per entri dalam mode perluasan vertikal",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Sembunyikan kolom:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Waktu",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/aturan",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Konteks",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Relasi",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Daftar",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabel",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Biasa",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Buka",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Buat laporan baru",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Temukan laporan serupa",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentasi",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Baca dokumentasi di <code>uBlock/wiki</code> untuk mempelajari semua fitur uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Pertanyaan dan dukungan",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Jawaban pertanyaan dan dukungan bantuan lainnya tersedia di subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Masalah filter/situs web rusak",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Laporkan masalah filter pada situs web ke <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\">pelacak masalah <code>uBlockOrigin/uAssets</code></span>. <u>Membutuhkan akun GitHub.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Penting:</b> Hindari menggunakan pemblokir sejenis bersamaan dengan uBlock Origin, karena mungkin akan mengakibatkan terjadinya masalah filter pada situs web tertentu.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Pastikan filter Anda selalu yang terbaru. <span data-url=\"logger-ui.html#_\">Pencatat log</span> adalah utilitas utama untuk mendiagnosis masalah yang terkait dengan filter.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Laporan bug",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Laporkan masalah ekstensi uBlock Origin ke <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\">pelacak masalah <code>uBlockOrigin/uBlock-issue</code></span>. <u>Membutuhkan akun GitHub.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Informasi penyelesaian masalah",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Di bawah ini adalah informasi teknis yang mungkin berguna saat sukarelawan berusaha membantu memecahkan masalah Anda.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Penting:</b> Informasi yang sifatnya privat dan sensitif disensor secara bawaan. Informasi yang disensor mungkin akan membuat proses memecahkan masalah semakin sulit.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Laporkan masalah filter",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Untuk menghindari membebani sukarelawan dengan laporan duplikat, harap verifikasi bahwa masalah tersebut belum dilaporkan.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Daftar filter diperbarui setiap hari. Pastikan masalah Anda belum teratasi dalam daftar filter terbaru.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verifikasi bahwa masalah masih ada setelah memuat ulang halaman web yang bermasalah.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Alamat laman web:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Laman web…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pilih entri --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Menampilkan iklan atau sejenisnya",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Memiliki overlay atau gangguan lainnya",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Mendeteksi uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Memiliki masalah terkait privasi",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Rusak saat uBlock Origin aktif",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Membuka tab atau jendela yang tidak diinginkan",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Beri label halaman web sebagai “TAUSB” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Tidak Aman Untuk Saat Bekerja”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Sensor",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Batal sensor",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Kebijakan privasi",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Catatan perubahan",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Kode sumber (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Kontributor",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Kode sumber",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Terjemahan",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Daftar filter",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dependensi eksternal (kompatibel GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Daftar filter uBO sendiri dihosting secara gratis di <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN</a> berikut:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "CDN yang dipilih secara acak digunakan saat daftar filter perlu diperbarui",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Cadangkan ke berkas…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Pulihkan dari berkas...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Kembalikan ke pengaturan bawaan...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Semua pengaturan Anda akan ditimpa dengan data yang dicadangkan pada {{time}}, dan uBlock₀ akan memulai ulang.\n\nTimpa semua pengaturan yang ada dengan data cadangan?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Data tidak dapat dibaca atau tidak valid",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Semua pengaturan Anda akan dihapus, dan uBlock₀ akan memulai ulang.\n\nKembalikan uBlock₀ ke pengaturan bawaan?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Galat jaringan: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Tambah URL berikut ke ke daftar filter khusus Anda?\n\nJudul: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Berlangganan",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "semenit yang lalu",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} menit yang lalu",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "sejam yang lalu",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} jam yang lalu",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "sehari yang lalu",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} hari yang lalu",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Tampilkan Dasbor",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Tampilkan Pencatat Log",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "mati",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Halaman diblokir",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin telah mencegah halaman berikut dimuat:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Disebabkan oleh filter berikut",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "tanpa parameter",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Ditemukan di:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Kembali",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Tutup jendela ini",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Jangan ingatkan saya lagi tentang situs ini",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Nonaktifkan pemblokiran ketat untuk {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Sementara",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanen",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Lanjutkan",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Ekspor ke penyimpanan awan",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Impor dari penyimpanan awan",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Impor dari penyimpanan awan dan gabungkan dengan pengaturan saat ini",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Nama perangkat ini:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Peringatan! Ubah pengaturan lanjutan berikut dengan risiko Anda sendiri.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Kirim",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Terapkan perubahan",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Urungkan",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "byte",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Blokir elemen di dalam frame...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Berlangganan daftar filter...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Sementara izinkan elemen media besar",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Lihat kode sumber…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Ketik pintasan",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Aktif/Nonaktifkan bilah gulir",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Salin ke papan klip",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Pilih semua",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Aktif/Nonaktifkan filter tampilan",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Perlonggar mode pemblokiran",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Penyimpanan terpakai: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Klik untuk memuat",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Galat: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Filter tidak dapat bekerja dengan baik saat peramban dimulai.\nMuat ulang halaman agar filter dapat bekerja dengan baik.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Entri ini harus menjadi yang terakhir",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/it/messages.json b/src/_locales/it/messages.json
new file mode 100644
index 0000000..000b19e
--- /dev/null
+++ b/src/_locales/it/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Finalmente, un blocker efficiente. Leggero sulla CPU e sulla memoria.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Dashboard",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Attenzione! Ci sono delle modifiche non ancora salvate",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Attendi",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignora",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Opzioni",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filtri di terze parti",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "I miei filtri",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Le mie regole",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Whitelist",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Scorciatoie",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Cronologia richieste di rete",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Info",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Supporto",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Visualizzatore di risorse",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Impostazioni avanzate",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Click: disabilita/abilita uBlock₀ per questo sito.\n\nCtrl+click: disabilita uBlock₀ solo per questa pagina.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Click per disabilitare uBlock₀ per questo sito.\n\nCtrl+click per disabilitare uBlock₀ solo su questa pagina.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Clicca per attivare uBlock₀ in questo sito.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "richieste bloccate",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "in questa pagina",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} o {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "dall'installazione",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "o",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Bloccati su questa pagina",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Bloccati dall'installazione",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domini connessi",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Apri la dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Accedi alla modalità elimina elemento",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Accedi alla modalità seleziona elemento",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Vai al registro delle richieste",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Segnala un problema su questo sito",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Disabilita/abilita il blocco di tutti i popup per questo sito",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Clicca per bloccare tutti i popup in questo sito",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Clicca per sbloccare tutti i popup in questo sito",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Abilita/disabilita il blocco di elementi multimediali di grandi dimensioni per questo sito",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Clicca per bloccare elementi multimediali di grandi dimensioni in questo sito",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Clicca per sbloccare elementi multimediali di grandi dimensioni in questo sito",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Disabilita/abilita filtraggio cosmetico per questo sito",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Clicca per disattivare il filtraggio cosmetico in questo sito",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Clicca per attivare il filtraggio cosmetico in questo sito",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Attiva o disattiva il blocco dei font remoti per questo sito",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Clicca per bloccare i font remoti in questo sito",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Clicca per sbloccare i font remoti in questo sito",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Clicca per disattivare JavaScript su questo sito",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Clicca per non disabilitare più JavaScript su questo sito",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Finestre pop-up",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Elementi multimediali di grandi dimensioni",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Filtraggio cosmetico",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Caratteri remoti",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Altro",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Meno",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Regole globali: questa colonna è per le regole che si applicano a tutti i siti.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Regole locali: questa colonna è per le regole che si applicano solo al sito corrente.\nLe regole locali hanno la precedenza su quelle globali.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Clicca per rendere le tue scelte permanenti.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Clicca per annullare i cambiamenti.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "Tutto",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "Immagini",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "Di terze parti",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "Immagini/CSS di terze parti",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "Script inline",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "Script di proprietà del sito",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "Script di terze parti",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "Frame di terze parti",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domini connessi",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} di {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Versione",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Crea",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Seleziona",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Esci",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Anteprima",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Filtri di rete",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Filtri cosmetici",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Click, Ctrl-click",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Blocca elemento...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Nascondi lo spazio riservato agli elementi bloccati",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Visualizza il numero degli elementi bloccati sull'icona",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Disabilita suggerimenti",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Usa il menu contestuale quando è possibile",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Adatto ai daltonici",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Aspetto",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Colore di risalto personalizzato",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Abilita supporto salvataggio nel cloud",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Sono un utente avanzato (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>Lettura obbligatoria</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Disattiva pre-fetching (per evitare qualsiasi connessione per le richieste di rete bloccate)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Disattiva la revisione dei collegamenti ipertestuali",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Impedisci a WebRTC di rivelare l'indirizzo IP locale",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Comportamento predefinito",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Questi comportamenti predefiniti possono essere modificati per ogni singolo sito",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Disabilita filtraggio cosmetico",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Blocca elementi multimediali maggiori di {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Blocca font remoti",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Disattiva JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Blocca i report CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Rivela i nomi canonici",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Avanzate",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Caratteristiche adatte solo ad utenti tecnici.",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "impostazioni avanzate",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Ultimo ripristino:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Ultimo backup:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} filtri di rete + {{cosmeticFilterCount}} filtri cosmetici da:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} usati su {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Aggiornamento automatico liste.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Aggiorna ora",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Elimina tutte le cache",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Analizza e applica filtri cosmetici",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "\nI filtri cosmetici servono a nascondere gli elementi in una pagina web che sono considerati un fastidio visivo, e che non possono essere bloccati dai motori di filtraggio basati sulla richiesta di rete.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignora filtri cosmetici generici.",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "<p>I filtri cosmetici generici sono i filtri cosmetici intesi per essere applicati a tutti i siti Web.<p>Benché questi siano gestiti in modo efficiente da uBlock₀, i filtri cosmetici generici potrebbero contribuire a un carico elevato in termini di memoria e CPU su alcune pagine Web, in particolare quelle di notevoli dimensioni e a lunga scadenza.<p>L'attivazione di quest'opzione eliminerà il carico elevato in termini di memoria e CPU aggiunto alle pagine Web in conseguenza della gestione dei filtri cosmetici generici, e inoltre ridurrà l'impatto sulla memoria di uBlock₀ stesso.<p>È raccomandato abilitare quest'opzione sui dispositivi meno potenti.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Sospendi l'attività di rete finché non vengono caricate tutte le liste filtri",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lista degli hosts bloccati",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Salva i cambiamenti",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Integrati",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Pubblicità",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Domini con Malware",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Elementi fastidiosi",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multiuso",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regioni, lingue",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Personalizzate",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importa...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Un URL per riga. URL non validi verranno silenziosamente ignorati.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Obsoleto.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "visualizza contenuto",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Ultimo aggiornamento: {{ago}}.\nClicca per forzare l'aggiornamento.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Aggiornamento in corso...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Un errore di rete ha impedito l'aggiornamento della risorsa.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Un filtro per riga. Un filtro può essere un semplice hostname, o un filtro compatibile con EasyList. Ogni riga che comincia con <code>!</code> verrà ignorata.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Non aggiungere filtri da fonti non attendibili.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importa e aggiungi",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Esporta",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "ublock-filtri-statici-personalizzati_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Salva i cambiamenti",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Regole permanenti",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Regole temporanee",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Ripristina",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Applica",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Modifica",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Salva",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Annulla",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importa da file...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Esporta in file",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "ublock-filtri-dinamici-personalizzati_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Lista delle regole di filtraggio dinamiche personalizzate.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Sintassi per le regole: <code>sorgente destinazione tipo azione</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>documentazione completa</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Ordina:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Tipo regola",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Fonte",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destinazione",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Lista dei siti dove uBlock è disattivato. Un sito per ogni riga. Le voci non valide verranno silenziosamente ignorate.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importa e aggiungi",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Esporta",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "ublock-whitelist_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Salva i cambiamenti",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Tipo",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Dominio",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filtro",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Tutte",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Dietro le quinte",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Scheda corrente",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Ricarica il contenuto della scheda",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Attiva o disattiva l'ispettore DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Attiva o disattiva il pannello popup",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin Wiki: Registro",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Pulisci il registro",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Metti in pausa il registro (scarta tutti i dati in arrivo)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Riattiva il registro",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Attiva o disattiva il filtraggio del registro",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtra il contenuto del registro",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Opzioni di filtraggio del registro",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Non",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "movimentato",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "bloccato",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "Consentito",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modificato",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "Dominio attuale",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "Di terze parti",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Dettagli",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filtro",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Elenco dei filtri",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Regola",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Contesto",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Contesto di root",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Parte della richiesta",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Tipo",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Regola dell'URL",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Contesto:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Tipo:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Filtraggio statico",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} la richiesta di rete di {{type}} {{br}} il cui indirizzo URL corrisponde a {{url}} {{br}}e che proviene da {{origin}},{{br}}{{importance}} c'è una corrispondenza nel filtro delle eccezioni.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Blocca",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Permetti",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "tipo “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "qualsiasi tipo",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "da “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "da ovunque",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "tranne quando",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "anche se",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Filtro statico <code>{{filter}}</code> trovato in:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Non è stato possibile trovare il filtro statico in nessuno degli elenchi di filtri attualmente abilitati",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Le voci del registro che non soddisfano tutte e tre le condizioni seguenti verranno automaticamente scartate:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Mantieni le voci degli ultimi {{input}} minuti",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Conserva al massimo {{input}} caricamenti di pagina per scheda",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Conserva al massimo {{input}} voci per scheda",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Usa {{input}} righe per voce in modalità espansa verticale",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Nascondi colonne:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Tempo",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filtro/regola",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Contesto",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Parte della richiesta",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Lista",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabella",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Semplice",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Apri",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Crea una nuova segnalazione",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Trova segnalazioni simili",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentazione",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Leggi la documentazione su <code>uBlock/wiki</code> per conoscere tutte le funzionalità di uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Domande e supporto",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Le risposte alle domande e ad altri tipi di supporto sono fornite sul subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Problemi dei filtri/siti malfunzionanti",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Segnala problemi dei filtri con siti specifici al <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\">tracciatore di bug <code>uBlockOrigin/uAssets</code></span>. Richiede un account GitHub.",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Importante:</b> Evita di utilizzare altre estensioni simili insieme a uBlock Origin, poiché ciò potrebbe causare problemi di filtro su specifici siti.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Suggerimenti:</b> Assicurati che le tue liste di filtri siano aggiornate. <span data-url=\"logger-ui.html#_\">Il registro</span> è lo strumento principale per diagnosticare i problemi relativi ai filtri.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Segnalazione di errori",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Segnala problemi di uBlock Origin stesso al <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\">tracciatore di bug <code>uBlockOrigin/uBlock-issue</code></span>. Richiede un account GitHub.",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Informazioni sulla risoluzione dei problemi",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Di seguito sono riportate le informazioni tecniche che potrebbero essere utili quando i volontari stanno cercando di aiutarti a risolvere un problema.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Importante:</b> Le informazioni potenzialmente private o sensibili vengono oscurate automaticamente. Le informazioni oscurate possono rendere più difficile risolvere un problema.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Segnala un problema con un filtro",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Per evitare di appesantire i volontari con segnalazioni doppie, verifica che il problema non sia già stato segnalato.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Gli elenchi dei filtri vengono aggiornati quotidianamente. Assicurati che il tuo problema non sia già stato risolto negli elenchi di filtri più recenti.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verifica che il problema sussista ancora dopo aver ricaricato la pagina web problematica.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Indirizzo della pagina web:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "La pagina web...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "Scegli una voce",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Mostra pubblicità o avanzi di pubblicità",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Ha sovrapposizioni o altri fastidi",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Rileva uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Ha problemi relativi alla privacy",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Si rompe quando uBlock Origin è attivato",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Apre schede o finestre indesiderate",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Etichetta la pagina web come &ldquo;NSFW&rdquo; (<a href=\"https://it.wikipedia.org/wiki/NSFW\">&ldquo;Not Safe For Work&rdquo;</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Oscura",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Non oscurare",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Codice di condotta sulla privacy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Codice sorgente (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Collaboratori",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Codice sorgente",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Traduzioni",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Liste filtri",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dipendenze esterne (GPLv3-compatibili):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Gli elenchi di filtri di uBO sono liberamente ospitati sui seguenti <a href=\"https://it.wikipedia.org/wiki/Content_Delivery_Network\">CDN</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Un CDN selezionato a caso verrà utilizzato quando è necessario aggiornare un elenco di filtri",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Crea file di backup...",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Ripristina configurazione",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Ripristina le impostazioni predefinite…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Tutte le impostazioni verranno sovrascritte utilizzando i dati di backup del {{time}} e uBlock sarà riavviato.\n\nSovrascrivere tutte le impostazioni esistenti con quelle del backup?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "I dati non possono essere letti o non sono validi",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Verranno cancellate tutte le impostazioni, e uBlock₀ sarà riavviato.\n\nResettare uBlock alle impostazioni di fabbrica?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Errore di rete: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: Aggiungere il seguente URL alla tua lista dei filtri personalizzata?\n\nTitolo: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Sottoscrivi",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "un minuto fa",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} minuti fa",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "un'ora fa",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} ore fa",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "un giorno fa",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} giorni fa",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Visualizza Dashboard",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Visualizza registro richieste di rete",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "disattivato",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Pagina bloccata",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock₀ ha impedito alla seguente pagina di caricarsi:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "A causa del seguente filtro",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "senza parametri",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Trovato in:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Torna indietro",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Chiudi questa finestra",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Non avvisarmi più per questo sito",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Disabilita blocco assoluto per {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Temporaneamente",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanentemente",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Procedi",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Esporta nel cloud",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importa dal cloud",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importa da archivio cloud ed unisci con le impostazioni attuali",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Nome di questo dispositivo:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Attenzione! Modifica queste impostazioni avanzate a tuo rischio e pericolo.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Invia",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Salva i cambiamenti",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Ripristina",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "byte",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Blocca elemento in un frame",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Iscriviti alla lista dei filtri...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Consenti temporaneamente elementi multimediali di grandi dimensioni",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Visualizza origine...",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Digita una scorciatoia",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Attiva o disattiva il blocco dello scorrimento",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Copia negli appunti",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Seleziona tutto",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Attiva/Disattiva filtri cosmetici",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Rilassa la modalità di blocco",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Spazio utilizzato: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Clicca per caricare",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errori: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Non è stato possibile filtrare correttamente all'avvio del browser.\nRicaricare la pagina per garantire un filtraggio corretto",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/ja/messages.json b/src/_locales/ja/messages.json
new file mode 100644
index 0000000..0293e53
--- /dev/null
+++ b/src/_locales/ja/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "高効率ブロッカーついに登場。CPU とメモリーに負担をかけません。",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — ダッシュボード",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "警告! 保存していない変更があります",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "留まる",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "無視",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "設定",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "フィルターリスト",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "マイフィルター",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "マイルール",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "信頼するサイト",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "ショートカットキー",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — ログ",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "uBlock₀ について",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "サポート",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — アセットビューアー",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "高度な設定",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "クリック: このサイトで uBlock₀ を無効または有効にします。\n\nCtrl+クリック: このページだけで uBlock₀ を無効にします。",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "クリックするとこのサイトで uBlock₀ を無効にします。\n\nCtrl+クリックでこのページだけで uBlock₀ を無効にします。",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "クリックするとこのサイトで uBlock₀ を有効にします。",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "ブロックしたリクエスト数",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "このページ",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} 件 ({{percent}} %)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "インストールしてから",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "/",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "このページでのブロック数",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "インストールからのブロック数",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "接続したドメイン数",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "ダッシュボードを開く",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "要素抹消モードに入る",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "要素選択モードに入る",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "ログを開く",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "このサイト上での問題を報告",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "このサイトに対するポップアップブロックの有効/無効をすべて切り替えます",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "クリックするとこのサイトのポップアップをすべてブロックします",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "クリックするとこのサイトのポップアップをすべてブロックしなくなります",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "このサイトに対する大きなメディア要素のブロックの有効/無効を切り替えます",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "クリックするとこのサイトの大きなメディア要素をブロックします",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "クリックするとこのサイトの大きなメディア要素をブロックしなくなります",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "このサイトに対する整形フィルタリングの有効/無効を切り替えます",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "クリックするとこのサイトでの整形フィルタリングを無効にします",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "クリックするとこのサイトでの整形フィルタリングを有効にします",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "このサイトに対するリモートフォントのブロックの有効/無効を切り替えます",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "クリックするとこのサイトのリモートフォントをブロックします",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "クリックするとこのサイトのリモートフォントをブロックしなくなります",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "クリックするとこのサイトの JavaScript を無効にします",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "クリックするとこのサイトの JavaScript は無効にならなくなります",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "ポップアップウィンドウ",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "大きなメディア要素",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "整形フィルタリング",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "リモートフォント",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "さらに表示",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "折りたたむ",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "グローバルルール: この列のルールはすべてのサイトに適用されます。",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "ローカルルール: この列のルールは現在のサイトだけに適用されます。\nローカルルールはグローバルルールを上書きします。",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "クリックすると変更を確定します。",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "クリックすると変更を元に戻します。",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "すべて",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "画像",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "サードパーティ",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "サードパーティ CSS/画像",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "インラインスクリプト",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "ファーストパーティスクリプト",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "サードパーティスクリプト",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "サードパーティフレーム",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "接続したドメイン数",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} 件 ({{total}} 件中)",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "バージョン",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "スクリプト",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "フレーム",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "作成",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "選択",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "終了",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "プレビュー",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "ネットワークフィルター",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "整形フィルター",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "クリック、Ctrl+クリック",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "要素をブロック...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "ブロックした要素のプレースホルダーを非表示にする",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "ブロックしたリクエストの数をアイコンに表示する",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "ツールチップを無効にする",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "状況に合わせてコンテキストメニューを活用する",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "色覚多様性に配慮した色を使用する",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "外観",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "テーマ",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "カスタムアクセントカラー",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "クラウドストレージのサポートを有効にする",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "私は上級者です",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "先読み機能を無効にする (ブロックしているネットワークリクエストへの接続を完全に防ぐため)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "ハイパーリンクの監査を無効にする",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "WebRTC によるローカル IP アドレスの漏洩を防ぐ",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "既定の動作",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "以下の既定の動作はサイトごとに上書きできます",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "整形フィルタリングを無効にする",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "{{input}} KB より大きいメディア要素をブロックする",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "リモートフォントをブロックする",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "JavaScript を無効にする",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "CSP レポートをブロックする",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "CNAME クローキングを解除する",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "高度な設定",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "技術に詳しいユーザーのみを対象にした機能です",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "高度な設定",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "前回の復元:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "前回のバックアップ:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} 件のネットワークフィルター + {{cosmeticFilterCount}} 件の整形フィルター:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{total}} 件中 {{used}} 件使用",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "フィルターリストを自動更新する",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "今すぐ更新",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "キャッシュをすべて削除",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "整形フィルターを解析して適用する",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "整形フィルターは、ネットワークリクエストに基づいたフィルタリングエンジンではブロックできない、邪魔とみなされる視覚的要素をウェブページ上から隠すという機能を果たします。",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "汎用整形フィルターを無視する",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "汎用整形フィルターとは、すべてのウェブサイトに適用することを目的とした整形フィルターです。このオプションを有効にすると、汎用整形フィルターを処理する結果としてウェブページに加わる、メモリーと CPU のオーバーヘッドが削減されます。\n\n性能の低い端末ではこのオプションを有効にすることをお勧めします。",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "フィルターリストをすべて読み込むまで、ネットワークアクティビティを停止する",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "ブロックしたホストの一覧",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "変更を適用",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "内製",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "広告",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "プライバシー",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "マルウェアドメイン",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "迷惑系",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "多目的",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "地域・言語",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "カスタム",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "インポート...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "1 行につき 1 つの URL です。無効な URL はそのまま無視されます。",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "期限切れです。",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "中身を表示します",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "最終更新: {{ago}}。\nクリックすると強制的に更新できます。",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "更新中...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "ネットワークエラーが発生したため、リソースを更新できませんでした。",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "1 行につき 1 つのフィルターです。フィルターはただのホスト名でも EasyList と同じ形式でも構いません。<code>!</code> を先頭に付けた行は無視されます。",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "信頼できないソースからフィルターを追加しないでください。",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "インポートと追加",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "エクスポート",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "変更を適用",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "永続ルール",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "一時ルール",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "元に戻す",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "確定",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "編集",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "保存",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "破棄",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "ファイルからインポート...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "ファイルへエクスポート",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "動的フィルタリングルールの一覧です。",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "ルールの構文: <code>発信源 通信先 タイプ アクション</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>詳しい解説</a>)",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "並べ替え:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "ルールの種類",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "発信源",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "通信先",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "[信頼するサイト] では uBlock Origin を無効にするウェブページを指定します。1 行につき 1 つです。",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "インポートと追加",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "エクスポート",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "変更を適用",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "タイプ",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "ドメイン",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "フィルター",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "すべて",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "バックグラウンド通信",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "現在のタブ",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "タブを再読み込みします",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "DOM インスペクターの表示/非表示を切り替えます",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "ポップアップパネルの表示/非表示を切り替えます",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: ログ",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "ログを消去します",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "ログの出力を中断します (以後のデータはすべて破棄)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "ログの出力を再開します",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "ログの絞り込みの有効/無効を切り替えます",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "出力するログを絞り込む",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "ログ絞り込みオプション",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "除外",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "フィルタリングした",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "ブロックした",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "許可した",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "変更した",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "ファーストパーティ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "サードパーティ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "詳細",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "フィルター",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "フィルターリスト",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "ルール",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "コンテキスト",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "ルートコンテキスト",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "パーティ種別",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "タイプ",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL ルール",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "コンテキスト:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "タイプ:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "静的フィルター",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "一致する例外フィルター {{importance}}{{br}}{{url}} に URL アドレスが一致し{{br}}{{origin}} 発信された{{br}}{{type}} のネットワークリクエストを {{action}} する。",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "ブロック",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "許可",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "タイプ “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "任意のタイプ",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "“{{origin}}” から",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "任意のサイトから",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "がない場合",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "に関係なく",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "この静的フィルター <code>{{filter}}</code> を含むフィルターリスト:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "この静的フィルターは現在有効なフィルターリストのどれにも含まれていません",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "以下の 3 つの条件から 1 つでも外れたログは自動的に破棄されます:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "過去 {{input}} 分間のログを保持する",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "1 つのタブにつき最大 {{input}} ページの読み込みを保持する",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "1 つのタブにつき最大 {{input}} 件のログを保持する",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "展開表示モードではログ 1 件につき {{input}} 行で表示する",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "非表示にする列:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} 時刻",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} フィルター/ルール",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} コンテキスト",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} パーティ種別",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "リスト形式",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "表形式",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "テキスト形式",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown 形式",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "開く",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "新しい報告を作成",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "似た報告を探す",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "ドキュメント",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "uBlock Origin のすべての機能については <code>uBlock/wiki</code> のドキュメントをお読みください。",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "質問とサポート",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "質問への回答などのヘルプやサポートは <code>/r/uBlockOrigin</code> の subreddit で提供しています。",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "フィルターの問題 / ウェブサイトが正しく動作しない",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "特定のウェブサイトで起きるフィルターの問題は <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> の Issue トラッカー</span>に報告してください。<u>GitHub のアカウントが必要です。</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>重要:</b> 似た機能を持つブロッカーを uBlock Origin と併用することは控えてください。特定のウェブサイトでフィルターの問題を引き起こすことがあります。",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>ヒント:</b> フィルターリストが最新か確認しましょう。<span data-url=\"logger-ui.html#_\">ログ</span>はフィルターに関連する問題の原因を調査するための第一のツールです。",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "バグ報告",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "uBlock Origin 自体の問題は <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> の Issue トラッカー</span>に報告してください。<u>GitHub のアカウントが必要です。</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "トラブルシューティング情報",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "以下の技術情報はボランティアが問題解決の手助けをするときに役立つことがあります。",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>重要:</b> 個人情報や機密情報の可能性のある情報は既定で削除されます。情報が削除されたことによって問題解決が困難になることがあります。",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "フィルターの問題を報告する",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "重複した報告によってボランティアに負担をかけないように、問題がすでに報告されていないか確認してください。",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "フィルターリストは毎日更新されます。まず最新のフィルターリストで問題が修正されていないか確認してください。",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "問題のあるページを再読み込みしても問題がまだ残っているか確認してください。",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "ウェブページのアドレス:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "ウェブページは...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- エントリーを選択する --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "広告またはその消し残りを表示します",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "オーバーレイなど邪魔なものがあります",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "uBlock Origin を検出します",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "プライバシーに関連する問題があります",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "uBlock Origin を有効にすると誤動作します",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "勝手にタブやウィンドウを開きます",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "ウェブページに“NSFW” (閲覧注意、<a href=\"https://ja.wikipedia.org/wiki/NSFW\">“Not Safe For Work”</a>) とラベルをつける",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "編集済にする",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "無編集にする",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "プライバシーポリシー",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "更新履歴",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "ソースコード (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "貢献者",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "ソースコード",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "翻訳",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "フィルターリスト",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "外部依存関係 (GPLv3 と両立):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO の内製フィルターリストは以下の <a href=\"https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E3%83%87%E3%83%AA%E3%83%90%E3%83%AA%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF\">CDN</a> に無料でホストしています:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "フィルターリストの更新が必要なときにはランダムに選択した CDN を使用します",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "ファイルにバックアップ...",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "ファイルから復元...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "初期設定にリセット...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "すべての設定を {{time}} にバックアップしたデータを使用して上書きした後、uBlock₀ が再起動します。\n\nバックアップデータを使用して既存の設定をすべて上書きしますか?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "データが無効、または読み込みができませんでした",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "すべての設定を削除した後、uBlock₀ が再起動します。\n\nuBlock₀ を初期設定にリセットしますか?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "ネットワークエラー: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "以下の URL をカスタムフィルターリストに追加しますか?\n\nフィルター名: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "購読",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "1 分前",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} 分前",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "1 時間前",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} 時間前",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "1 日前",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} 日前",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "ダッシュボードを表示",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "ログを表示",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "オフ",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "ブロックしたページ",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin は、 以下のサイトの読み込みを防止しました:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "以下のフィルターと一致したためです:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "パラメーターなし",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "このフィルターを含むフィルターリスト:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "戻る",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "このウィンドウを閉じる",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "今後このサイトに関する警告を表示しない",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "{{hostname}} への厳格なブロッキングを無効にする",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "一時的",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "永続的",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "続行する",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "クラウドストレージにエクスポートします",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "クラウドストレージからインポートします",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "クラウドストレージからインポートして現在の設定に統合します",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "この端末の名前:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "警告! 以下の高度な設定の変更は自己責任で行ってください。",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "送信",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "変更を適用",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "元に戻す",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "バイト",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "フレーム内の要素をブロック...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "フィルターリストを購読...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "大きなメディア要素を一時的に許可",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "ソースを表示…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "ショートカットキーを入力",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "スクロールの同期/非同期を切り替えます",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "クリップボードにコピー",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "すべて選択",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "整形フィルタリングの有効/無効を切り替える",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "ブロッキングモードを緩和する",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "ストレージ使用量: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "クリックして読み込む",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "エラー: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "ブラウザー起動時に正しくフィルターできませんでした。\nページを再読み込みしてください。",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/ka/messages.json b/src/_locales/ka/messages.json
new file mode 100644
index 0000000..999553c
--- /dev/null
+++ b/src/_locales/ka/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "როგორც იქნა, მძლავრი და შედეგიანი რეკლამების შემზღუდავი. ზოგავს CPU-ს და მეხსიერებას.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — სამართავი დაფა",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "გაფრთხილება! ცვლილებები არ შენახულა",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "დარჩენა",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "უგულებელყოფა",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "პარამეტრები",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "სხვა ფილტრები",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "ჩემი ფილტრები",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "ჩემი წესები",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "გამონაკლისები",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "მალსახმობები",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — აღმრიცხავი",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "შესახებ",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "მხარდაჭერა",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — რესურსები",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "გაფართოებული პარამეტრები",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "დაწკაპუნება: ამ საიტისთვის uBlock-ის ჩართვა/გამორთვა.\n\nCtrl+დაწკაპუნება: uBlock-ის მხოლოდ ამ გვერდზე გამორთვა.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "დააწკაპეთ uBlock₀-ის გამოსართავად ამ საიტზე.\n\nCtrl+დაწკაპებით uBlock₀ მხოლოდ ამ გვერდზე გამოირთვება.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "დააწკაპეთ uBlock₀-ის ჩასართავად ამ საიტზე.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "შეზღუდული მოთხოვნები",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "ამ გვერდზე",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ანუ {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "დაყენების შემდგომ",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "ანუ",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "შეზღუდული ამ გვერდზე",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "შეზღუდული დაყენების შემდგომ",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "დაკავშირებული დომენები",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "სამართავის გახსნა",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "ნაწილების ამოჭრა",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "ნაწილების შერჩევა",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "აღმრიცხავის გახსნა",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "ამ საიტზე ხარვეზის მოხსენება",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "ამ საიტზე ყველა ამომხტომის შეზღუდვის ჩამრთველი",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "დააწკაპეთ ყველა ამომხტომი ფანჯრის შესაზღუდად ამ საიტზე",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "დააწკაპეთ, ამომხტომი ფანჯრების შეზღუდვის გასაუქმებლად ამ საიტზე",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "ამ საიტზე დიდი მედიაფაილების შეზღუდვის ჩამრთველი",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "დააწკაპეთ დიდი მედიაფაილების შესაზღუდად ამ საიტზე",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "დააწკაპეთ დიდი მედიაფაილების შეზღუდვის გასაუქმებლად ამ საიტზე",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "გარეგნული ნაწილების ფილტრის ჩამრთველი",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "დაწკაპეთ გარეგნული ნაწილების ფილტრის გასათიშად ამ საიტზე",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "დააწკაპეთ გარეგნული ნაწილების გასაფილტრად ამ საიტზე",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "ვებშრიფტების შეზღუდვის ჩართვა/გამორთვა ამ საიტზე",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "დააწკაპეთ ვებშრიფტების შესაზღუდად ამ საიტზე",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "დააწკაპეთ ვებშრიფტების შეზღუდვის გასაუქმებლად ამ საიტზე",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "დააწკაპეთ JavaScript-ის გასათიშად ამ საიტზე",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "დააწკაპეთ JavaScript-ზე შეზღუდვის მოსახსნელად ამ საიტზე",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "ამომხტომი ფანჯრები",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "დიდი მედიაფაილები",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "გარეგნული გაფილტვრა",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "ვებშრიფტები",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "ვრცლად",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "მოკლედ",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "გლობალური წესები: ეს სვეტი არის წესებისთვის, რომლებიც მოქმედებს ყველა საიტზე.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "ლოკალური წესები: ეს სვეტი არის წესებისთვის, რომლებიც მოქმედებს მხოლოდ მიმდინარე საიტზე.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "დაწკაპეთ ცვლილებების მუდმივად შენახვისთვის.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "დააწკაპუნეთ შეტანილი ცვლილებების გაუქმებისთვის.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "ყველა",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "სურათები",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "მესამე მხარე",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "მესამე მხრის css/ნახატები",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "ხაზოვანი სკრიპტები",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1-ლი მხრის სკრიპტები",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "მე-3 მხრის სკრიპტები",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "მე-3 მხრის ჩარჩოები",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "დაკავშირებული დომენები",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{total}}-დან {{count}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "ვერსია",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "სკრიპტი",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "ჩარჩო",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "შექმნა",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "გადარჩევა",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "გამოსვლა",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "შეთვალიერება",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "ქსელის ფილტრები",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "გარეგნული ფილტრები",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Click, Ctrl + დაწკაპუნება",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "ამ ნაწილის შეზღუდვა…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "შეზღუდული ნაწილების ადგილის შემავსებლის დამალვა",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "შეზღუდული მოთხოვნების რაოდენობის ჩვენება ხატულაზე",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "მინიშნებების გათიშვა",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "კონტექსტური მენიუს გამოყენება, როდესაც ეს ხელსაყრელია",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "ფერთა გასწორება დაქვეითებულად მხედველთათვის",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "იერსახე",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "თემა",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "სასურველი შეფერილობა",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "ღრუბლოვანი მეხსიერების მხარდაჭერის ჩართვა",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "მე ვარ გამოცდილი მომხმარებელი (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>აუცილებლად წასაკითხი</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "წინასწარი ჩატვირთვის გათიშვა (კავშირის არიდება ქსელის შეზღუდული მოთხოვნებისთვის)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "ბმულებით სარგებლობაზე თვალყურის დევნების არიდება",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "WebRTC-სთვის ხელის შეშლა შიდა IP მისამართის გაჟონვაში",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "ნაგულისხმევი მითითებები",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "ეს ნაგულისხმევი მითითებები შესაძლებელია შეიცვალოს ცალკეული საიტისთვის",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "გარეგნული ნაწილების ფილტრის გათიშვა",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "მედიაფაილების შეზღუდვა, რომლებიც აჭარბებს {{input:number}} კბაიტს",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "ვებშრიფტების შეზღუდვა",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "JavaScript-ის გათიშვა",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "CSP-მოხსენებების აკრძალვა",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "დადგენილი სახელების გამოაშკარავება",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "გაფართოებული",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "შესაძლებლობები მხოლოდ ტექნიკური მომხმარებლებისთვის",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "გაფართოებული პარამეტრები",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "ბოლო აღდგენა:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "ბოლო მარქაფი:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} ქსელის ფილტრი + {{cosmeticFilterCount}} გარეგნული ნაწილების ფილტრი:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{total}}-დან გამოიყენება {{used}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "ფილტრების წესების თვითგანახლება",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "ახლავე განახლება",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "მარაგის გასუფთავება",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "გარეგნული ნაწილების ფილტრების დამუშავება და გამოყენება",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "გარეგნული ფილტრები, ძირითადად, იმ ხილული ნაწილების დასამალად გამოიყენება ვებგვერდზე, რომელთაც ქსელის მოთხოვნაზე დაფუძნებული ფილტრები ვერ ზღუდავს.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "გარეგნული საერთო ფილტრების უგულებელყოფა",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "გარეგნული საერთო ფილტრები ისეთი ფილტრებია, რომლებიც ყველა ვებსაიტზე მოქმედებს. ამ პარამეტრის ჩართვით კი თავიდან აიცილებთ გარეგნული საერთო ფილტრების შედეგად მეხსიერებისა და პროცესორის ზედმეტ დატვირთვას.\n\nამ პარამეტრის ჩართვა სასურველია სუსტ მოწყობილობებზე.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "ქსელის მოქმედებების გადავადება ყველა ფილტრის ჩატვირთვამდე",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "ცვლილებების ასახვა",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "ჩაშენებული",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "რეკლამები",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "პირადულობა",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "მავნე დომენები",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "შემაწუხებელი შიგთავსი",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "უნივერსალური",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "რეგიონები, ენები",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "საკუთარი სიები",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "შემოტანა...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "თითოეული URL ცალკეულ ხაზზე. არამართებული URL-ბმულები უგულებელყოფილი იქნება გაუფრთხილებლად.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "მოძველებული",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "შიგთავსის ნახვა",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "ბოლო განახლება: {{ago}}.\nდააწკაპეთ ახლავე გასაახლებლად.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "ახლდება...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "ქსელის შეცდომის შედეგად, შიგთავსის განახლება ვერ მოხერხდა.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "თითოეული ფილტრი ცალკეულ ხაზზე. ფილტრი შეიძლება იყოს საიტის უბრალო დასახელება ან Adblock Plus-სთან თავსებადი მითითებები. ხაზები &lsquo;!&rsquo; თავსართით უგულებელყოფილი იქნება.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "ფილტრების არიდება არასანდო წყაროებიდან.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "შემოტანა და დამატება",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "შენახვა",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "ჩემი-ublock-მუდმივი-ფილტრები_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "ცვლილებების ასახვა",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "მუდმივი წესები",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "დროებითი წესები",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "დაბრუნება",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "მიბარება",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "შეცვლა",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "შენახვა",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "გაუქმება",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "ფაილიდან შემოტანა...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "ფაილში შენახვა",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "ჩემი-ublock-ცვალებადი-წესები_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "თქვენი ცვალებადი ფილტრების წესები.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "წესის აგებულება: <code>წყარო დანიშნულება მოთხოვნის სახე მოქმედება</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>მასალები სრულად</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "დალაგება:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "წესის სახეობა",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "წყარო",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "დანიშნულება",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "გამონაკლისებში მითითებულ ვებგვერდებზე uBlock Origin გამოირთვება. თითო ჩანაწერი ცალკეულ ხაზზე.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "შემოტანა და დამატება",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "შენახვა",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "ჩემი-ublock-გამონაკლისები_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "ცვლილებების ასახვა",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "სახეობა",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "დომენი",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "ფილტრი",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "ყველა",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "ფარული მოთხოვნები",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "მიმდინარე ჩანართი",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "ჩანართის შიგთავსის ხელახლა ჩატვირთვა",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "DOM-დამკვირვებლის ჩამრთველი",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "ამომხტომი არეს ჩამრთველი",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin-ის ვიკი: აღმრიცხავი",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "აღმრიცხავის გასუფთავება",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "აღმრიცხავის შეჩერება (მიღებული მონაცემების მოცილება)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "აღრიცხვის გაგრძელება",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "აღმრიცხავის გამორჩევის ჩამრთველი",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "აღრიცხული ჩანაწერების გამორჩევა",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "აღრიცხულის გამორჩევის პარამეტრები",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "განურჩევლად",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "საგულისხმო",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "შეზღუდული",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "დაშვებული",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "ჩასწორებული",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "მონახულებული",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "გარეშე მხარის",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "ვრცლად",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "ფილტრი",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "ფილტრების სია",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "წესი",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "კონტექსტი",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "ძირეული კონტექსტი",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "მხარე",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "სახეობა",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "მისამართი",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "ცვალებადი URL ფილტრები",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "კონტექსტი:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "სახეობა:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "მუდმივი ფილტრები",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{type}} ქსელის მოთხოვნების {{action}} {{br}}რომლის URL მისამართიც შეესაბამება ბმულს {{url}} {{br}}და რომლის წყაროცაა {{origin}},{{br}}{{importance}}, როცა არსებობს შესაბამისი გამონაკლისი.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "შეზღუდვა",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "დაშვება",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "„{{type}}“ სახის",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "ნებისმიერი სახის",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "„{{origin}}“",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "ნებისმიერი",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "გარდა იმ შემთხვევისა",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "იმ შემთხვევაშიც კი",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "მუდმივი ფილტრი <code>{{filter}}</code> ნაპოვნია სიაში:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "მუდმივი ფილტრი <code>{{filter}}</code> ვერ მოიძებნა ამჟამად გამოყენებულ ფილტრებს შორის",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "აღრიცხული ჩანაწერი, რომელიც არ აკმაყოფილებს ქვემოთ მოცემულ სამივე პირობას, ავტომატურად ამოიშლება:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "ბოლო {{input}} წუთის ჩანაწერების დატოვება",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "არაუმეტეს {{input}} გვერდის ჩატვირთვის დატოვება თითოეულ ჩანართზე",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "არაუმეტეს {{input}} ჩანაწერის დატოვება თითოეულ ჩანართში",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "თითოეული ჩანაწერისთვის {{input}} ხაზის გამოყენება, შვეულად ჩამოშლის რეჟიმში",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "სვეტების დამალვა:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} დრო",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} ფილტრი/წესი",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} კონტექსტი",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} მხარე",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "სია",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "ცხრილი",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "მარტივი",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "გაფორმებული",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "გახსნა",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "შექმენით ახალი მოსხენება",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "იპოვეთ მსგავსი მოხსენებები",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "მასალები",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "დამატებითი მასალებისთვის იხილეთ <code>uBlock/wiki</code>, რომ უკეთ გაეცნოთ uBlock Origin-ის შესაძლებლობებს.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "შეკითხვები და დახმარება",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "კითხვებზე პასუხისა და სხვა სახის მხარდაჭერის მისაღებად ეწვიეთ Reddit-განყოფილებას <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "ფილტრის ხარვეზი/საიტი დაზიანდა",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "ცალკეულ საიტზე ფილტრების ხარვეზების მოსახსენებლად გამოიყენეთ <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> ხარვეზების აღსარიცხავი</span>. დაგჭირდებათ GitHub-ანგარიში.",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>ყურადღება:</b> ეცადეთ, არ გამოიყენოთ სხვა მსგავსი დანიშნულების შემზღუდავები uBlock Origin-თან ერთად, ვინაიდან წარმოშობს ფილტრების ხარვეზებს ცალკეულ საიტებზე.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>რჩევა:</b> გადაამოწმეთ, რომ ფილტრები განახლებულია. <span data-url=\"logger-ui.html#_\">აღმრიცხავი</span> ხელსაწყო მთავარი საშუალებაა ფილტრების ხარვეზების გამოსავლენად.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "ხარვეზის მოხსენება",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "თავად uBlock Origin-ის ხარვეზების მოსახსენებლად, გამოიყენეთ <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> ხარვეზების აღსარიცხავი</span>. დაგჭირდებათ GitHub-ანგარიში.",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "მონაცემები ხარვეზის მოსაგვარებლად",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "ქვემოთ მოცემულია ტექნიკური ინფორმაცია, რომელიც გამოადგებათ მოხალისეებს, უკეთ დაგეხმარონ ხარვეზის აღმოფხვრაში.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>გაითვალისწინეთ:</b> მონაცემები, რომლებიც შესაძლოა პირადი და მნიშვნელოვანი იყოს, ნაგულისხმევად იკვეცება. ამასთანავე, შეკვეცილი ინფორმაციით სავარაუდოდ გართულდება ხარვეზის გამოსწორება.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "ფილტრის ხარვეზის მოხსენება",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "მოხალისეები რომ არ მოცდნენ ერთნაირი მოსხენებების ნახვით, გთოხვთ გადაამოწმოთ, უკვე ხომ არაა გაგზავნილი საჩივარი ამ ხარვეზზე.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "ფილტრთა სიები ახლდება ყოველდღე. გადაამოწმეთ, ხარვეზი ხომ არ გამოსწორებულა უახლეს სიებში.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "შეამოწმეთ, გაახლებით ხომ არ გამოსწორდა ხარვეზიანი ვებგვერდი. ",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "ვებგვერდის მისამართი",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "ვებგვერდი...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- შეარჩიეთ --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "აჩვენებს რეკლამებს ან მის ნარჩენებს",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "ადებს შემაწუხებელ შრეებსა და მისთანებს",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "ამჩნევს, რომ uBlock Origin ჩართულია",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": " პირადულობის დაცვის ხარვეზებითაა",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "ფუჭდება, როცა uBlock Origin ჩართულია",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "ხსნის არასასურველ ჩანართებს ან ფანჯრებს",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "გვერდი მოინიშნოს, როგორც „NSFW“ (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">„შეუსაბამო“</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "შეკვეცილი",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "შეუკვეცელი",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "პირადულობის დებულება",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "ცვლილებათა ჟურნალი",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "წყაროს კოდი (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "მოხალისეები",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "პირველწყარო კოდი",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "თარგმანები",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "ფილტრების სიები",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "ცალკეული დაქვემდებარებული პროექტები (GPLv3-თან თავსებადი):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO-ს კუთვნილი ფილტრები ღიადაა განთავსებული შემდეგ <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN-ებზე</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "CDN შეირჩევა შემთხვევითობით ფილტრების განახლების დროს",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "ფაილში დამარქაფება",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ჩემი-ublock-მარქაფი_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "აღდგენა ფაილიდან...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "ნაგულისხმევ პარამეტრებზე დაბრუნება...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "თქვენს ყველა პარამეტრს გადაეწერება {{time}} დროინდელი დამარქაფებული მონაცემები და uBlock₀ გაეშვება ხელახლა.\n\nნამდვილად გსურთ არსებული პარამეტრების დამარქაფებული მონაცემებით ჩანაცვლება?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "მონაცემები ვერ იკითხება, ან დაზიანებულია",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "თქვენ მიერ მითითებული ყველა პარამეტრი წაიშლება და uBlock₀ გაეშვება ხელახლა.\n\nნამდვილად გსურთ uBlock₀-ის ნაგულისხმევ პარამეტრებზე დაბრუნება?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "ქსელის შეცდომა: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: გსურთ შემდეგი URL ბმულის საკუთარ ფილტრის წესებში ჩამატება?\n\nდასახელება: „{{title}}“\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "გამოწერა",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "ერთი წუთის წინ",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} წუთის წინ",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "ერთი საათის წინ",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} საათის წინ",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "ერთი დღის წინ",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} დღის წინ",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "ხელსაწყოების გვერდის ჩვენება",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "აღრიცხვის ჩვენება",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "გამორთული",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "გვერდი შეიზღუდა",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin-მა შეზღუდა მოცემული გვერდის ჩატვირთვა:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "მოცემული ფილტრიდან გამომდინარე",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "პარამეტრების გარეშე",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "პოვნა:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "უკან დაბრუნება",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "ფანჯრის დახურვა",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "მომავალში გაფრთხილების გარეშე ამ საიტზე",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "მკაცრი შეზღუდვის მოხსნა საიტისთვის: {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "დროებით",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "მუდმივად",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "მაინც გადასვლა",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "ღრუბლოვან საცავში შენახვა",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "ღრუბლოვანი საცავიდან გადმოტანა",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "ღრუბლოვანი საცავიდან გადმოტანა და არსებულ პარამეტრებთან მისადაგება",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "ამ მოწყობილობის დასახელება:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "გაფრთხილება! გაფართოებული პარამეტრების ცვლილების შედეგებზე, თავად იქნებით პასუხისმგებელი.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "მიღება",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "ცვლილებების ასახვა",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "დაბრუნება",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "ბაიტი",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "ნაწილების შეზღუდვა ჩარჩოში...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "ფილტრის სიის გამოწერა...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "დიდი მედიაფაილების დროებით დაშვება",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "პირველწყარო კოდის ნახვა…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "მალსახმობის მითითება",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "ჩაკეტილად გადაადგილების ჩამრთველი",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "ასლის აღება",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "ყველას მონიშვნა",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "გარეგნული ფილტრის ჩამრთველი",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "მსუბუქი შეზღუდვის რეჟიმი",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "გამოყენებული მოცულობა: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "კბ",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "მბ",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "გბ",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "დაწკაპეთ ჩასატვირთად",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "შეცდომა: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "სათანადოდ ვერ გაიფილტრა ბრაუზერის ჩართვისას.\nახლიდან გახსენით გვერდი უკეთ გასაფილტრად.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/kk/messages.json b/src/_locales/kk/messages.json
new file mode 100644
index 0000000..9cf48a4
--- /dev/null
+++ b/src/_locales/kk/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Жарнамаларды жақсы өшіретін Addon'дардың бірі. Компьютердің қуатың аз алады.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Орнату",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Сізде сақталмаған параметрлер бар!",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Қалу",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Өшіру",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Баптаулар",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "3-ші жақты сүзгілер",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Менің сүзгілерім",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Менің ережелерім",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Рұқсат тізімі",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Жапсырм-р",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Журналшы",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Осы туралы",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Қолдау",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Активтерді қарау",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Кеңейтілген баптаулар",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Жай басу: осы сайт үшін uBlock₀ өшіріңіз / қосыңыз.\n\nCtrl+басу: тек осы бетте uBlock₀ өшіріңіз.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Осы сайт үшін uBlock₀ өшіру үшін басыңыз\n\nТек осы бетте uBlock₀ өшіру үшін Ctrl+Басу.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Осы сайт үшін uBlock₀ қосу үшін басыңыз.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "сұраным блокталды",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "бұл парақта",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} немесе {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "орнатылғаннан бастап",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "немесе",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Жарнамалар жойылды",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Орнатудан бастап құлыптаулы",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Домендар қосылды",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "uBlock₀-ты орнату",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Элементтің режимін енгізу",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Элемент таңдау режиміне өту",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Журналды ашу",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Осы вебсайттағы мәселе жайлы хабарлау",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Осы сайт үшін барлық попаптарды бұғаттау",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Мына сайттағы барлық қалқымалы терезелерді бұғаттау үшін басыңыз",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Мына сайттағы барлық қалқымалы терезелерді бұғаттамау үшін басыңыз",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Мына сайттағы үлкен медиа элементтерді бұғаттауын қосу/сөндіру",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Мына сайттағы үлкен медиа элементтерді бұғаттауын қосу үшін басыңыз",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Мына сайттағы үлкен медиа элементтерді бұғаттауын өшіру үшін басыңыз",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Осы сайт үшін косметикалық сүзуді қосу/өшіру",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Мына сайт үшін косметикалық сүзуді өшіру үшін басыңыз",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Мына сайт үшін косметикалық сүзуді қосу үшін басыңыз",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Осы сайт үшін қашықтан қосылған қаріптерді қосу/өшіру",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Мына сайттағы қашықтан қосылған қаріптерді бұғаттау үшін басыңыз",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Мына сайттағы қашықтан қосылған қаріптерді бұғаттамау үшін басыңыз",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Осы сайт үшін JavaScript-ты өшіру үшін басыңыз",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Осы сайт үшін JavaScript-ты өшірмеу үшін басыңыз",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Қалқымалы терезелер",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Large media elements",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Cosmetic filtering",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Remote fonts",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Global rules: this column is for rules which apply to all sites.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Click to make your changes permanent.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Click to revert your changes.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "барлығы",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "суреттер",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "3-ші жақты",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "3-ші жақты css/суреттер",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "inline scripts",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1st-party scripts",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "3rd-party scripts",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "3rd-party frames",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domains connected",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} out of {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Version",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Жасау",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Таңдау",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Шығу",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Алдын-ала қарау",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Network filters",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Cosmetic filters",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Шерту, Ctrl-шерту",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Элементті блоктау",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Hide placeholders of blocked elements",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Show the number of blocked requests on the icon",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Disable tooltips",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Make use of context menu where appropriate",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Color-blind friendly",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Appearance",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Theme",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Custom accent color",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Enable cloud storage support",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "I am an advanced user",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Disable pre-fetching (to prevent any connection for blocked network requests)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Disable hyperlink auditing",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Prevent WebRTC from leaking local IP addresses",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Default behavior",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "These default behaviors can be overridden on a per-site basis",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Disable cosmetic filtering",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Block media elements larger than {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Block remote fonts",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Disable JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Block CSP reports",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Uncloak canonical names",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Advanced",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Features suitable only for technical users",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "advanced settings",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Last restore:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Last backup:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} used out of {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Auto-update filter lists",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Update now",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Purge all caches",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Parse and enforce cosmetic filters",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignore generic cosmetic filters",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspend network activity until all filter lists are loaded",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Өзерістерді іске асыру",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Built-in",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Жарнамалар",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Жекелік",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Malware protection, security",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multipurpose",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Custom",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Import…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "One URL per line. Invalid URLs will be silently ignored.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Out of date.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "view content",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Last update: {{ago}}.\nClick to force an update.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Updating…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "A network error prevented the resource from being updated.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with <code>!</code> will be ignored.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Import and append…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Export…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Permanent rules",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Temporary rules",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Қайтару",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Commit",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Түзету",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Сақтау",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Елемеу",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Файлдан импорттау...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Файлға экспорттау",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "List of your dynamic filtering rules.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Rule syntax: <code>source destination type action</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>full documentation</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sort:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Rule type",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Source",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destination",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Import and append…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Экспорт",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-whitelist_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Өзерістерді іске асыру",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Түрі",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Домен",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Сүзгі",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Барлығы",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Tabless",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Current tab",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Reload the tab content",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Toggle the DOM inspector",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Toggle the popup panel",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: The logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Clear logger",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Журналды кідірту (барлық кіріс деректерін алып тастау)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Журналды тоқтата тұру",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Журнал тіркеушісі сүзгісін қосу",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "сүзгі журналының мазмұны",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Журнал тіркесімін сүзу параметрлері",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Жоқ:",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "бұғату",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "рұқсаты",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modified",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1-ші тарап",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3-і тарап",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Егжей",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Сүзгі",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Сүзгілер тізімі",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Ереже",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Контекст",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Түбірлік контекст",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Көңілділік",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Түрі",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL ережесі",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Контекст:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Түрі:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Статикалық сүзгі",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} қай URL мекен-жайы {{url}} {{br}} сәйкес келетін және {{Origin}}, {{br}} {{маңыздылығы) қай URL мекен-жайы сәйкес келетін {{type}} {{br}} желілік сұраулары сәйкес ерекше жағдай сүзгісі.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Бұғату",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Рұқсат ету",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "type “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "any type",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "from “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "from anywhere",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "except when",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "even if",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Static filter <code>{{filter}}</code> found in:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Static filter could not be found in any of the currently enabled filter lists",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Preserve entries from the last {{input}} minutes",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preserve at most {{input}} page loads per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Preserve at most {{input}} entries per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Use {{input}} lines per entry in vertically expanded mode",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Hide columns:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Time",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/rule",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Context",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partyness",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "List",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Table",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Plain",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Open",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Create new report",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Find similar reports",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentation",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Read the documentation at <code>uBlock/wiki</code> to learn about all of uBlock Origin's features.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Questions and support",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter issues/website is broken",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Bug report",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Troubleshooting Information",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Report a filter issue",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Address of the web page:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "The web page…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pick an entry --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shows ads or ad leftovers",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Has privacy-related issues",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Malfunctions when uBlock Origin is enabled",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Opens unwanted tabs or windows",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Бастапқы код (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Салымшылар",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Бастапқы код",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Аудармашылар",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Тізімдерді сүзу",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Сыртқы тәуелділіктер (GPLv3 үйлесімді):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO's own filter lists are freely hosted on the following <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "A randomly picked CDN is used when a filter list needs to be updated.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Файлға сақтық көшірме жасау",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Файлдан қалпына келтіру...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Әдепкі параметрлерге қайтару...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Барлық параметрлер {{time}} күні сақтық көшірмесі жасалған деректерді пайдаланып жазылады және uBlock₀ қайта іске қосылады.\n\nСақтық көшірме жасалған деректерді пайдаланып, барлық қолданыстағы параметрлерді қайта жазу керек пе?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Дата оқуға сай емес (жарамсыз)",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Барлық параметрлер жойылып, uBlock₀ қайта қосылады.\n\nUBlock₀ зауыттық параметрлерге қайтарылсын ба?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Желілік қате: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Келесі URL-ді өзіңіздің теңшелетін сүзгілер тізіміне қосыңыз?\n\nТақырып: «{{title}}»\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Жазылу",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "бір минут бұрын",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} минут бұрын",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "бір сағат бұрын",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} сағат бұрын",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "бір күн бұрын",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} күн бұрын",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Орнату-ды көрсету",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Logger-ді көрсету",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "сөнд.",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Page blocked",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin келесі парақтың жүктелуіне жол бермеді:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Келесі сүзгіге байланысты:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "параметрсіз",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Мында табылды:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Артқа",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Терезені жабу",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "{{Hostname}} үшін қатаң блоктауды өшіру",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Уақытша",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Тұрақты",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Бұлтты жадқа экспорттау",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Бұлт қоймасынан импорттау",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Бұлтты сақтау қоймасынан импорттаңыз және ағымдағы параметрлермен біріктіру",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Девайстың аты:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Ескерту! Өзіңіздің тәуекеліңізбен осы кеңейтілген параметрлерді өзгертіңіз.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Жіберу",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Өзгерістерді қолдану",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Қайтару",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "байт",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Block element in frame…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subscribe to filter list…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Үлкен медиа элементтеріне уақытша рұқсат беру",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Жарлық теріңіз",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Құлыпталған айналдыруды қосу",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Аралық сақтағышқа көшіру",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Select all",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Бөгеу режимі",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "{{value}} {{unit}} қолданылды.",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "КБ",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "МБ",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "ГБ",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Click to load",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/kn/messages.json b/src/_locales/kn/messages.json
new file mode 100644
index 0000000..567a8e5
--- /dev/null
+++ b/src/_locales/kn/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "ಯುಬ್ಲಾಕ್",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "ಕೊನೆಗೂ, ಒಂದು ದಕ್ಷ ನಿರ್ಬಂಧಕ. ಮಿತವಾದ ಸಿಪಿಯೂ ಹಾಗು ಮೆಮೊರಿ ಬಳಕೆ.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ - ಡ್ಯಾಶ್ಬೋರ್ಡ",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "ಎಚ್ಚರಿಕೆ! ನೀವು ಉಳಿಸದ ಬದಲಾವಣೆಗಳನ್ನು ಹೊಂದಿದ್ದೀರಿ",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Stay here",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignore",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "ಸೆಟ್ಟಿಂಗ್ಸ್",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "೩ನೇ ವ್ಯಕ್ತಿ ಶೋಧಕಗಳು",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "ನನ್ನ ಶೋಧಕಗಳು",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "ನನ್ನ ನಿಯಮಗಳು",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "ವೈಟ್ ಲಿಸ್ಟ್",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Shortcuts",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — ಲಾಗರ್",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "ಕುರಿತು",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Support",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Asset viewer",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "ಸುಧಾರಿತ ಆಯ್ಕೆಗಳು",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "ಕ್ಲಿಕ್: ಈ ಜಾಲತಾಣಕ್ಕೆ ನಿಷ್ಕ್ರಿಯ/ಸಕ್ರಿಯಗೊಳಿಸಲು.\nಕಂಟ್ರೋಲ್ + ಕ್ಲಿಕ್: ಈ ಜಾಲತಾಣಕ್ಕೆ ಮಾತ್ರ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Click to enable uBlock₀ for this site.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "ಬೇಡಿಕೆಗಳನ್ನು ತಡೆಹಿಡಿಯಲಾಗಿದೆ",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "ಈ ಪುಟದಲ್ಲಿ",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ಅಥವಾ {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "ಅನುಸ್ಥಾಪಿಸಿದ ಈಚೆಗೆ",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "ಅಥವಾ",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blocked on this page",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blocked since install",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domains connected",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "ಡ್ಯಾಶ್ಬೋರ್ಡ ತೆರೆಯಲು ಕ್ಲಿಕಿಸಿ",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Enter element zapper mode",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "ಅಂಶ ಆಯ್ವಿಕೆ ಕ್ರಮಕ್ಕೆ ದಾಖಲಾಗಿ",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "ಲಾಗರ್ ತೆರೆಯಿರಿ",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Report an issue on this website",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "ಈ ಜಾಲತಾಣದ ಎಲ್ಲಾ ಪಾಪ್ಅಪ್ ಗಳ ನಿರ್ಬಂಧವನ್ನು ಟಾಗಲ್ ಮಾಡಿ",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Click to block all popups on this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Click to no longer block all popups on this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Toggle the blocking of large media elements for this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Click to block large media elements on this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Click to no longer block large media elements on this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "ಈ ಜಾಲತಾಣಕ್ಕೆ ಕಾಸ್ಮೆಟಿಕ್ ಫಿಲ್ಟರಿಂಗನ್ನು ಟಾಗಲ್ ಮಾಡಿ",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Click to disable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Click to enable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "ಈ ಜಾಲತಾಣಕ್ಕೆ ದೂರಸ್ಥ ಅಕ್ಷರಶೈಲಿಯ ನಿರ್ಬಂಧವನ್ನು ಟಾಗಲ್ ಮಾಡಿ",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Click to block remote fonts on this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Click to no longer block remote fonts on this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Click to disable JavaScript on this site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Click to no longer disable JavaScript on this site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Pop-up windows",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Large media elements",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Cosmetic filtering",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Remote fonts",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Global rules: this column is for rules which apply to all sites.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Click to make your changes permanent.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Click to revert your changes.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "ಎಲ್ಲಾ",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "ಚಿತ್ರಗಳು",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "೩ನೇ ವ್ಯಕ್ತಿ",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "೩ನೇ ವ್ಯಕ್ತಿ ಸಿಎಸ್ಸೇಸು/ಚಿತ್ರಗಳು",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "ಒಳಸಾಲಿನ ಸ್ಕ್ರಿಪ್ಟುಗಳು",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "೧ನೇ ವ್ಯಕ್ತಿ ಸ್ಕ್ರಿಪ್ಟುಗಳು",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "೩ನೇ ವ್ಯಕ್ತಿ ಸ್ಕ್ರಿಪ್ಟುಗಳು",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "೩ನೇ ವ್ಯಕ್ತಿ ಫ್ರೇಮುಗಳು",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "ಸಂಪರ್ಕ ಹೊಂದಿರುವ ಡೊಮೈನ್ಗಳು",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{total}} ರಲ್ಲಿ {{count}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Version",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "ರಚಿಸಿ",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "ಆಯ್ಕೆ",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "ತ್ಯಜಿಸಿ",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Preview",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "ನಿವ್ವಳ ಫಿಲ್ಟರುಗಳು",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "ಕಾಸ್ಮೆಟಿಕ್ ಫಿಲ್ಟರುಗಳು",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "ಕ್ಲಿಕ್, ಕಂಟ್ರೋಲ್-ಕ್ಲಿಕ್",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "ಭಾಗ ತಡೆಹಿಡಿಯಿರಿ",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "ನಿರ್ಬಂಧಿಸಿದ ಭಾಗಗಳಿರುವ ಪ್ಲೇಸ್ಹೋಲ್ಡರ್ಸ್ ಮರೆಮಾಡಿ",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Show the number of blocked requests on the icon",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Disable tooltips",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Make use of context menu where appropriate",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "ಬಣ್ಣ ಅಂಧತೆ ಉಪಯುಕ್ತ",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Appearance",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Theme",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Custom accent color",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Enable cloud storage support",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "I am an advanced user",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Disable pre-fetching (to prevent any connection for blocked network requests)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Disable hyperlink auditing",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Prevent WebRTC from leaking local IP addresses",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Default behavior",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "These default behaviors can be overridden on a per-site basis",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Disable cosmetic filtering",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Block media elements larger than {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Block remote fonts",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Disable JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Block CSP reports",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Uncloak canonical names",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Advanced",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Features suitable only for technical users",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "advanced settings",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Last restore:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Last backup:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} used out of {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "ಶೋಧಕ ಪಟ್ಟಿಗಳನ್ನು ಸ್ವಯಂ ನವೀಕರಿಸಿ.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "ಈಗ ನವೀಕರಿಸಿ",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Purge all caches",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Parse and enforce cosmetic filters",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignore generic cosmetic filters",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspend network activity until all filter lists are loaded",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "ಬದಲಾವಣೆಗಳನ್ನು ಅನ್ವಯಿಸಿ",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Built-in",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "ಜಾಹಿರಾತು",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "ಗೌಪ್ಯತೆ",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Malware protection, security",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "ಬಹುಪಯೋಗಿ",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "ಪ್ರದೇಶಗಳು, ಭಾಷೆಗಳು",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "ಇಚ್ಛೆಯ",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Import…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "One URL per line. Invalid URLs will be silently ignored.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "ಹಳೆಯದಾಗಿದೆ",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "view content",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Last update: {{ago}}.\nClick to force an update.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Updating…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "A network error prevented the resource from being updated.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with <code>!</code> will be ignored.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "ಆಮದಿಸಿ ಸೇರ್ಪಡಿಸು",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "ರಫ್ತು",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "ಬದಲಾವಣೆಗಳನ್ನು ಅನ್ವಯಿಸಿ",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "ಶಾಶ್ವತ ನಿಯಮಗಳು",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "ತಾತ್ಕಾಲಿಕ ನಿಯಮಗಳು",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "ಹಿಂತಿರುಗಿಸಿ",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "ಕಮಿಟ್",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "ಸಂಪಾದಿಸಿ",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "ಉಳಿಸು",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "ತ್ಯಜಿಸಿ",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Import from file…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Export to file…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "List of your dynamic filtering rules.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Rule syntax: <code>source destination type action</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>full documentation</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sort:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Rule type",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Source",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destination",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Import and append…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Export…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Type",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domain",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "ಎಲ್ಲಾ",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Tabless",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Current tab",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Reload the tab content",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Toggle the DOM inspector",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Toggle the popup panel",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: The logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Clear logger",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pause logger (discard all incoming data)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Unpause logger",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Toggle logger filtering",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filter logger content",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Logger filtering options",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Not",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blocked",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "allowed",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modified",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1st-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3rd-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Details",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filter list",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Rule",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Context",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Root context",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partyness",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Type",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL rule",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Context:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Type:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Static filter",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Block",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Allow",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "type “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "any type",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "from “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "from anywhere",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "except when",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "even if",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Static filter <code>{{filter}}</code> found in:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Static filter could not be found in any of the currently enabled filter lists",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Preserve entries from the last {{input}} minutes",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preserve at most {{input}} page loads per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Preserve at most {{input}} entries per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Use {{input}} lines per entry in vertically expanded mode",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Hide columns:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Time",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/rule",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Context",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partyness",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "List",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Table",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Plain",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Open",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Create new report",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Find similar reports",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentation",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Read the documentation at <code>uBlock/wiki</code> to learn about all of uBlock Origin's features.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Questions and support",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter issues/website is broken",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Bug report",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Troubleshooting Information",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Report a filter issue",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Address of the web page:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "The web page…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pick an entry --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shows ads or ad leftovers",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Has privacy-related issues",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Malfunctions when uBlock Origin is enabled",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Opens unwanted tabs or windows",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "ನೀಡುಗರು",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO's own filter lists are freely hosted on the following <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "A randomly picked CDN is used when a filter list needs to be updated.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Back up to file…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Restore from file…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Reset to default settings…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "The data could not be read or is invalid",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Network error: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Subscribe",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "ಒಂದು ನಿಮಿಷದ ಹಿಂದೆ",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} ನಿಮಿಷದ ಹಿಂದೆ",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "ಒಂದು ತಾಸಿನ ಹಿಂದೆ",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} ತಾಸಿನ ಹಿಂದೆ",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "ಒಂದು ದಿನದ ಹಿಂದೆ",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} ದಿನದ ಹಿಂದೆ",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Show Dashboard",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Show Logger",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "off",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Page blocked",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin has prevented the following page from loading:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Because of the following filter:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "without parameters",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Found in:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "ಹಿಂದೆ ಹೋಗಿ",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "ಈ ವಿಂಡೋವನ್ನು ಮುಚ್ಚಿ",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Disable strict blocking for {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "ತಾತ್ಕಾಲಿಕವಾಗಿ",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "ಶಾಶ್ವತವಾಗಿ",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Export to cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Import from cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Import from cloud storage and merge with current settings",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "ಈ ಸಾಧನದ ಹೆಸರು:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Warning! Change these advanced settings at your own risk.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "ಸಲ್ಲಿಸಿ",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Apply changes",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "ಹಿಂತಿರುಗಿಸಿ",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "ಬೈಟ್ಗಳು",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Block element in frame…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subscribe to filter list…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Temporarily allow large media elements",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Type a shortcut",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Toggle locked scrolling",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Copy to clipboard",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Select all",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relax blocking mode",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Storage used: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Click to load",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/ko/messages.json b/src/_locales/ko/messages.json
new file mode 100644
index 0000000..a43e85c
--- /dev/null
+++ b/src/_locales/ko/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock₀",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "이 부가 기능은 효율적인 차단기입니다. CPU와 메모리에 주는 부담이 적습니다.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — 대시보드",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "경고! 저장되지 않은 변경 사항이 있습니다",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "취소",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "무시",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "설정",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "필터 목록",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "내 필터",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "내 규칙",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "제외 목록",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "단축키",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — 로그",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "정보",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "지원",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Asset 뷰어",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "고급 설정",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "클릭: 이 사이트에서 uBlock₀을 켜고 끕니다.\n\nCtrl+클릭: 이 페이지에서 uBlock₀을 끕니다.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "클릭: 이 사이트에서 uBlock₀을 끕니다.\n\nCtrl+클릭: 이 페이지에서만 uBlock₀을 끕니다.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "클릭하여 이 사이트에서 uBlock₀ 을 켭니다.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "요청 차단됨",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "이 페이지에서",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}}개 / {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "설치된 이후",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "/",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "이 페이지에서 차단됨",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "설치 후 차단됨",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "도메인 연결됨",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "클릭하여 대시보드 열기",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "구성 요소 선택기 모드로 진입",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "구성 요소 선택기 모드로 진입",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "로그로 이동",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "이 사이트의 이슈 신고",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "이 사이트에서 팝업 차단 토글",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "클릭하여 이 사이트에서 모든 팝업을 차단합니다.",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "클릭하여 이 사이트에서 모든 팝업 차단을 해제합니다.",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "이 사이트에서만 적용되는 대형 미디어 구성요소 차단 기능을 켜고 끕니다.",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "클릭하여 이 사이트에서 대용량의 미디어를 차단합니다.",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "클릭하여 이 사이트에서 대용량의 미디어 차단을 해제합니다.",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "이 사이트에서 시각적 필터링 토글",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "클릭하여 이 사이트에서 시각적 필터링을 끕니다.",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "클릭하여 이 사이트에서 시각적 필터링을 켭니다.",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "이 사이트에서 글꼴조정 차단 토글",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "클릭하여 이 사이트에서 외부 폰트를 차단합니다.",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "클릭하여 이 사이트에서 더 이상 외부 폰트를 차단하지 않습니다.",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "클릭하여 이 사이트에서 JavaScript 비활성화",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "클릭하여 이 사이트에서 JavaScript 활성화",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "팝업 창",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "큰 미디어 요소",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "표면 필터링",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "외부 폰트",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "자바스크립트",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "더보기",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "간단히",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "공용 규칙: 이 열은 모든 사이트에 적용되는 규칙 열 입니다.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "로컬 규칙: 이 열은 현재 사이트만 적용되는 규칙 열 입니다.\n로컬 규칙은 공용 규칙보다 우선권을 가지고 있습니다.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "클릭하여 변경사항을 저장합니다.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "클릭하여 변경사항 적용을 되돌립니다.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "전체",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "이미지",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "보조 필터",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "보조 CSS/이미지",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "인라인 스크립트",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "주 스크립트",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "보조 스크립트",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "보조 프레임",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "도메인 연결됨",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{total}}개 중 {{count}}개",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "버전",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "스크립트",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "프레임",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "생성",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "선택",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "종료",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "미리보기",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "넷 필터",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "표면 필터",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "클릭, Ctrl-클릭",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "구성 요소 차단",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "차단된 구성 요소의 자리 감추기",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "차단된 요청 개수를 아이콘에 표시",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "툴팁 비활성화",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "컨텍스트 메뉴를 상황에 맞게 사용",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "색맹 최적화",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "표시",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "테마",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "사용자 지정 강조 색상",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "클라우드 저장소 활성화",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "고급 사용자 모드 (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>필수로 읽어보세요.</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "프리-페칭 비활성화 (차단된 네트워크 요청에 대해 모든 접속요청 방지)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "하이퍼링크 검사 비활성화",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "WebRTC로부터 로컬 IP 주소 유출을 방지",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "기본 동작",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "이 기본 동작들은 사이트 별로 정의 할 수 있습니다.",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "표면 필터 비활성화",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "{{input:number}} KB 보다 큰 미디어 구성요소 차단",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "글꼴 조종 차단",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "JavaScript 비활성화",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "CSP 보고서 차단",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "표준 이름 잠금 해제",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "고급",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "전문적인 사용자에게만 권장되는 설정입니다.",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "고급 설정",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "최근 복원:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "최근 백업:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} 네트워크 필터 + {{cosmeticFilterCount}} 표면 필터:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{total}}개 중 {{used}}개 사용 중",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "필터 목록 자동 업데이트",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "지금 업데이트",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "모든 캐시 제거",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "표면 필터 분석 및 적용",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "<p>이 옵션은 <a href=\"https://adblockplus.org/en/faq_internal#elemhide\">애드블록 플러스-호환 &ldquo;구성 요소 감추기&rdquo; 필터</a>를 분석하고 적용하는 것을 활성화합니다. 이 필터는 기본적으로 웹 페이지에서 시각적 방해 요소들을 숨기는 역할을 하며, 네트워크 요청에 기반한 필터링 엔진에서 차단될 수 없습니다.</p><p>이 기능을 활성화하면 <i>uBlock₀</i>의 메모리 사용량이 증가합니다.</p>",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "전체적 표면 필터 무시",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "<p>전체적 표면 필터들은 방문하는 모든 사이트에 적용하는 표면 필터입니다. <p>uBlock₀는 이를 효율적으로 적용하지만, 전체적 표면 필터들은 사이트의 크기와 유지시간에 따라 확연할 정도의 메모리 및 CPU 오버헤드를 줄 수 있습니다. <p>이 옵션을 활성화하면 전체적 표면 필터 적용으로 메모리 및 CPU 오버헤드를 제거하고, uBlock₀ 자체의 메모리 사용량도 줄입니다. <p>저전력 기기에 사용하는 것을 권장합니다.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "모든 필터 목록을 불러올 때까지 네트워크 일시 중단",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "차단된 호스트 목록",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "변경사항 적용",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Ublock₀ 제공",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "광고",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "개인정보",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "멀웨어 도메인",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "골칫거리",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "다목적",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "지역, 언어",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "사용자 지정",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "불러오기..",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "한 줄에 한 개의 URL을 입력하세요. 시작 부분이 &lsquo;!&rsquo; 로 시작되면 무시됩니다. 존재하지 않는 URL은 자동으로 무시됩니다.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "구버전",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "내용 보기",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "마지막 업데이트: {{ago}}\n업데이트하려면 여기를 클릭하세요.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "업데이트 중...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "네트워크 오류로 인해 리소스가 업데이트되지 못했습니다.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "한 줄에 한 개의 필터를 입력하세요. 필터는 순수 호스트이름, 혹은 Adblock Plus-호환 필터가 될 수 있습니다. 시작 부분이 &lsquo;!&rsquo; 로 시작되면 무시됩니다.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "신뢰할 수 없는 출처의 필터를 추가하지 마십시오.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "가져오기 및 추가하기",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "내보내기",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "ublock-고정필터_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "변경사항 적용",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "영구 규칙",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "임시 규칙",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "되돌리기",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "제출",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "편집",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "저장",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "취소",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "파일로부터 불러오기...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "파일로 내보내기...",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "ublock-동적규칙_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "동적 필터링 규칙 목록입니다.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "규칙 문법: <code>소스 페이지, 필터링 대상, 필터링할 타입, 적용할 조치</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>전체 설명서</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "분류:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "규칙 유형",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "소스",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "목표",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "목록에 있는 호스트들은 uBlock₀에서 비활성화됩니다. 한 줄에 한 개씩 입력하세요. 존재하지 않는 호스트는 자동으로 무시됩니다.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "가져오기 및 추가하기",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "내보내기",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "ublock-제외목록_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "변경사항 적용",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "유형",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "도메인",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "필터",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "전체",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "숨겨진 구성 요소",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "현재 탭",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "탭 내용 새로고침",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "DOM 속성 검사기 토글",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "팝업 패널 토글",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin 위키: 로거",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "로거 초기화",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "로거 일시중지 (들어오는 모든 데이터 무시)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "로거 일시중지 해제",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "로거 필터링 토글",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "필터 로그 항목",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "로거 필터링 옵션",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "제외",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "차단됨",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "허용됨",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "수정됨",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "퍼스트 파티",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "보조",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "상세정보",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "필터",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "필터 목록",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "규칙",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "컨텍스트",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "최상위 컨텍스트",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "파티",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "유형",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "동적 URL 필터링",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "페이지:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "유형:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "고정 필터링",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "네트워크 요청이 {{type}} 일 경우,{{br}}URL 주소가 {{url}} 와 일치하고{{br}}{{origin}} 에서 비롯 되었을 경우 {{action}} 한다.{{br}}그리고 다음 예외 필터와 일치할 경우 {{importance}} 한다.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "차단",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "허용",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "\"{{type}}\" 종류",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "모든 종류",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "\"{{origin}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "전체",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "예외 처리",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "비 예외 처리",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "<code>{{filter}}</code> 에서 찾은 고정 필터:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "활성화된 정적 필터 목록에서 <code>{{filter}}</code>를 찾지 못했습니다",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "아래의 세 가지 조건을 모두 충족하지 않는 항목은 자동으로 삭제됩니다.",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "최근 {{input}} 분의 항목 유지",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "탭 당 최대 {{input}} 페이지로드 유지",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "탭 당 최대 {{input}} 항목 유지",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "수직 확장 모드에서 항목 당 {{input}} 줄 사용",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "숨긴 열:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} 시간",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} 필터/규칙",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} 컨텍스트",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} 파티",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "목록",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "테이블",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "일반",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "마크다운",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "열기",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "새 신고 생성",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "유사한 신고 탐색",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "문서",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "<code>uBlock/wiki</code>의 문서를 읽고 uBlock Origin의 모든 기능에 대해 알아보세요.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "질문 및 지원",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "질문에 대한 답변 및 기타 도움 지원은 <code>/r/uBlockOrigin</code> 서브레딧에서 제공됩니다.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "필터 문제/웹사이트가 망가짐",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "특정 웹사이트에서 발생하는 필터 이슈는 <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> 이슈 트래커</span>에 보고해주세요. GitHub 계정이 필요합니다.",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>중요:</b> uBlock Origin과 유사한 목적의 다른 차단기를 함께 사용하지 마세요. 특정 웹사이트에서 필터 문제가 발생할 수 있습니다.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>팁:</b> 필터 목록이 최신 버전인지 확인하세요. <span data-url=\"logger-ui.html#_\">로거</span>는 필터 관련 문제를 진단하는 데에 사용되는 기본적인 도구입니다.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "오류 신고",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "uBlock Origin 자체에 대한 이슈는 <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> 이슈 트래커</span>에 보고해주세요. GitHub 계정이 필요합니다.",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "문제 해결 정보",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "다음은 자원 봉사자들이 문제를 해결하는 데에 도움을 줄 때 유용할 수 있는 기술적인 정보입니다.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>중요:</b> 잠재적으로 개인 정보이거나 민감한 정보는 기본적으로 지워집니다. 정보가 지워지면 문제 해결이 더 어려워질 수도 있습니다.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "필터 이슈 신고",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "봉사자들이 중복 신고로 인해 부담을 겪지 않도록, 해당 이슈가 이미 신고되지는 않았는지 확인해주시기 바랍니다.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "필터 목록은 매일 갱신됩니다. 최신 필터 목록에서 문제가 이미 해결되진 않았는지 확인하세요.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "문제가 생긴 웹페이지를 새로고침해도 문제가 여전히 남아 있는지 확인하세요.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "웹 페이지의 주소:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "웹 페이지가...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- 주제 선택 --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "광고나 광고 흔적을 보여줍니다",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "오버레이나 기타 성가신 요소를 보여줍니다",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "uBlock Origin 사용을 감지합니다",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "개인정보 보호 관련 이슈가 있습니다",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "uBlock Origin을 켜면 깨집니다",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "원치 않는 탭이나 창을 엽니다",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "웹페이지를 \"NSFW\" (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)로 분류",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "지우기",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "지우지 않기",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "개인정보취급방침",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "변경사항",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "소스 코드 (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "기여자",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "소스 코드",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "번역",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "필터 목록",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "외부 종속성 (GPLv3 호환):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "아래 <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN</a>에서 uBO의 필터 목록을 무료로 호스팅해 줍니다:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "필터 목록을 업데이트할 때 무작위로 선택된 CDN이 쓰입니다.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "파일로 백업하기",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ublock-백업_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "파일로부터 복원하기...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "기본 설정으로 초기화...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "모든 설정은 {{time}}에 백업된 데이터에 덮어씌워지며, uBlock₀이 재시작됩니다.\n\n모든 존재하는 설정을 백업 데이터로 덮어씌우시겠습니까?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "데이터를 읽을 수 없거나 잘못되었습니다.",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "모든 설정이 제거되며, uBlock₀이 재시작됩니다.\n\nuBlock₀의 설정을 처음 설정으로 초기화하시겠습니까?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "네트워크 오류: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: 선택한 URL을 사용자 지정 필터 목록에 추가하시겠습니까?\n\n제목: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "구독",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "1 분 전",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} 분 전",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "1 시간 전",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} 시간 전",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "1 일 전",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} 일 전",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "대쉬보드 보기",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "로그 보기",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "끄기",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "페이지 차단됨",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin이 다음 페이지를 로드하는것을 방지했습니다:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "다음 필터로 인해 방지됨",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "제외 매개 변수",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "다음 필터에서 찾음:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "돌아가기",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "이 창을 닫기",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "더 이상 이 사이트에 대해 경고 하지 않기",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "{{hostname}}에서 엄격 차단기능 끄기",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "이번만",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "항상",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "계속",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "클라우드 저장소로 내보내기",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "클라우드 저장소로부터 가져오기",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "클라우드 저장소의 설정 불러오기 및 현재 설정과 통합",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "현재 기기의 이름:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "경고! 고급 옵션을 변경하여 발생하는 문제는 사용자에게 있습니다.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "제출",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "변경사항 적용",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "되돌리기",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "바이트",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "프레임 내 구성 요소 차단",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "필터 목록 구독...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "이번만 대형 미디어 구성요소 허용",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "소스 코드 보기…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "단축키를 입력하세요",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "스크롤 잠금 토글",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "클립보드에 복사",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "모두 선택",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "표면 필터 토글",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "차단 모드 완화",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "스토리지 사용량: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "불러오려면 클릭하기",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "오류: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "브라우저 시작 시 필터링을 제대로 수행할 수 없습니다.\n정확한 필터링을 위해 페이지를 새로고침해주세요.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/ku/messages.json b/src/_locales/ku/messages.json
new file mode 100644
index 0000000..647fec3
--- /dev/null
+++ b/src/_locales/ku/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Finally, an efficient blocker. Easy on CPU and memory.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Dashboard",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Warning! You have unsaved changes",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Stay here",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignore",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Settings",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filter lists",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "My filters",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "My rules",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Trusted sites",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Shortcuts",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Logger",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "About",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Support",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Asset viewer",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Advanced settings",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Click to enable uBlock₀ for this site.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "requests blocked",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "on this page",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "since install",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "or",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blocked on this page",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blocked since install",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domains connected",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Open the dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Enter element zapper mode",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Enter element picker mode",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Open the logger",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Report an issue on this website",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Toggle the blocking of all popups for this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Click to block all popups on this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Click to no longer block all popups on this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Toggle the blocking of large media elements for this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Click to block large media elements on this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Click to no longer block large media elements on this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering for this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Click to disable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Click to enable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Toggle the blocking of remote fonts for this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Click to block remote fonts on this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Click to no longer block remote fonts on this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Click to disable JavaScript on this site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Click to no longer disable JavaScript on this site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Pop-up windows",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Large media elements",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Cosmetic filtering",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Remote fonts",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Global rules: this column is for rules which apply to all sites.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Click to make your changes permanent.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Click to revert your changes.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "all",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "images",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "3rd-party",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "3rd-party CSS/images",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "inline scripts",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1st-party scripts",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "3rd-party scripts",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "3rd-party frames",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domains connected",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} out of {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Version",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Create",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Pick",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Quit",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Preview",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Network filters",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Cosmetic filters",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Click, Ctrl-click",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Block element…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Hide placeholders of blocked elements",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Show the number of blocked requests on the icon",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Disable tooltips",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Make use of context menu where appropriate",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Color-blind friendly",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Appearance",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Theme",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Custom accent color",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Enable cloud storage support",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "I am an advanced user",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Disable pre-fetching (to prevent any connection for blocked network requests)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Disable hyperlink auditing",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Prevent WebRTC from leaking local IP addresses",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Default behavior",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "These default behaviors can be overridden on a per-site basis",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Disable cosmetic filtering",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Block media elements larger than {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Block remote fonts",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Disable JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Block CSP reports",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Uncloak canonical names",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Advanced",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Features suitable only for technical users",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "advanced settings",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Last restore:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Last backup:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} used out of {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Auto-update filter lists",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Update now",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Purge all caches",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Parse and enforce cosmetic filters",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignore generic cosmetic filters",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspend network activity until all filter lists are loaded",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Built-in",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Ads",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Malware protection, security",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multipurpose",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Custom",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Import…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "One URL per line. Invalid URLs will be silently ignored.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Out of date.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "view content",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Last update: {{ago}}.\nClick to force an update.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Updating…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "A network error prevented the resource from being updated.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with <code>!</code> will be ignored.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Import and append…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Export…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Permanent rules",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Temporary rules",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Revert",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Commit",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Edit",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Save",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Discard",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Import from file…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Export to file…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "List of your dynamic filtering rules.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Rule syntax: <code>source destination type action</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>full documentation</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sort:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Rule type",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Source",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destination",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Import and append…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Export…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Type",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domain",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "All",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Tabless",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Current tab",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Reload the tab content",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Toggle the DOM inspector",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Toggle the popup panel",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: The logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Clear logger",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pause logger (discard all incoming data)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Unpause logger",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Toggle logger filtering",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filter logger content",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Logger filtering options",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Not",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blocked",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "allowed",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modified",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1st-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3rd-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Details",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filter list",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Rule",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Context",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Root context",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partyness",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Type",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL rule",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Context:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Type:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Static filter",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Block",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Allow",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "type “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "any type",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "from “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "from anywhere",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "except when",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "even if",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Static filter <code>{{filter}}</code> found in:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Static filter could not be found in any of the currently enabled filter lists",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Preserve entries from the last {{input}} minutes",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preserve at most {{input}} page loads per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Preserve at most {{input}} entries per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Use {{input}} lines per entry in vertically expanded mode",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Hide columns:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Time",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/rule",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Context",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partyness",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "List",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Table",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Plain",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Open",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Create new report",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Find similar reports",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentation",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Read the documentation at <code>uBlock/wiki</code> to learn about all of uBlock Origin's features.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Questions and support",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter issues/website is broken",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Bug report",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Troubleshooting Information",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Report a filter issue",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Address of the web page:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "The web page…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pick an entry --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shows ads or ad leftovers",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Has privacy-related issues",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Malfunctions when uBlock Origin is enabled",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Opens unwanted tabs or windows",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO's own filter lists are freely hosted on the following <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "A randomly picked CDN is used when a filter list needs to be updated.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Back up to file…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Restore from file…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Reset to default settings…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "The data could not be read or is invalid",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Network error: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Subscribe",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "a minute ago",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} minutes ago",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "an hour ago",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} hours ago",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "a day ago",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} days ago",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Show Dashboard",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Show Logger",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "off",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Page blocked",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin has prevented the following page from loading:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Because of the following filter:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "without parameters",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Found in:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Go back",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Close this window",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Disable strict blocking for {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Temporarily",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanently",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Export to cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Import from cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Import from cloud storage and merge with current settings",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "This device name:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Warning! Change these advanced settings at your own risk.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Submit",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Apply changes",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Revert",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bytes",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Block element in frame…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subscribe to filter list…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Temporarily allow large media elements",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Type a shortcut",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Toggle locked scrolling",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Copy to clipboard",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Select all",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relax blocking mode",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Storage used: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Click to load",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/lt/messages.json b/src/_locales/lt/messages.json
new file mode 100644
index 0000000..3c2358f
--- /dev/null
+++ b/src/_locales/lt/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Pagaliau, efektyvus blokatorius, neapkraunantis nei procesoriaus, nei darbinės atminties.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Prietaisų skydas",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Dėmesio! Turite neišsaugotų pakeitimų",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Pasilikti",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignoruoti",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Nustatymai",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filtrų sąrašai",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Mano filtrai",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Mano taisyklės",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Išimtys",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Nuorodos",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Žurnalas",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Apie",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Pagalba",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — resursų žiūryklė",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Sudėtingesni nustatymai",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Spustelėjimas: įjungti/išjungti uBlock₀ šiam puslapiui.\n\nVald+spustelėjimas: išjungti uBlock₀ tik šiam puslapiui.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Spustelėkite, kad išjungtumėte uBlock₀ šiai svetainei.\n\nVald+spustelėkite, kad išjungtumėte uBlock₀ tik šiam puslapiui.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Spustelėkite, kad įjungtumėte uBlock₀ šiai svetainei.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "blokuotos užklausos",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "šiame puslapyje",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} arba {{percent}} %",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "nuo įdiegimo",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "arba",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blokuojama šiame puslapyje",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Užblokuota nuo įdiegimo",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Prijungti domenai",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Atverti prietaisų skydą",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Atverti elementų trynimo veikseną",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Atverti elementų parinkimo veikseną",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Atverti žurnalą",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Report an issue on this website",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Perjungti visų iškylančiųjų langų blokavimą šiame puslapyje",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Spustelėkite visų iškylančių langų blokavimui šioje svetainėje",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Spustelėkite visų iškylančių langų neblokavimui šioje svetainėje",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Perjungti didelių medijos elementų blokavimą šiame puslapyje",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Spustelėkite didelių medijos elementų blokavimui šioje svetainėje",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Spustelėkite didelių medijos elementų neblokavimui šioje svetainėje",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Perjungti kosmetinį filtravimą šiame puslapyje",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Spustelėkite kosmetinių filtrų išjungimui šioje svetainėje",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Spustelėkite kosmetinių filtrų įjungimui šioje svetainėje",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Perjungti nuotolinių šriftų blokavimą šiame puslapyje",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Spustelėkite nutolusių šriftų blokavimui šioje svetainėje",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Spustelėkite nutolusių šriftų neblokavimui šioje svetainėje",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Spustelėkite JavaScript išjungimui šioje svetainėje",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Spustelėkite JavaScript įjungimui šioje svetainėje",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Iškylantysis langas",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Dideli medijos elementai",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Kosmetinis filtravimas",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Nuotoliniai šriftai",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Daugiau",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Mažiau",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Globalios taisyklės: ši skiltis skirta visiems puslapiams taikomoms taisyklėms.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Vietinės taisyklės: ši skiltis skirta dabartiniam puslapiui taikomoms taisyklėms.\nVietinės taisyklės nustelbia globalias.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Spauskite pakeitimams padaryti pastoviais.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Spauskite pakeitimams atstatyti.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "visi",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "vaizdai",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "trečios šalies",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "3-ios šalies CSS/paveikslai",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "įterptieji scenarijai",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1-os šalies scenarijai",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "3-ios šalies scenarijai",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "3-ios šalies rėmeliai",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "jungtasi prie sričių",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} iš {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Versija",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "Skriptas",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Sukurti",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Parinkti",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Baigti",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Peržiūra",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Tinklo filtrai",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Kosmetiniai filtrai",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Spustelėjimas, Vald-spustelėjimas",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Blokuoti elementą",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Slėpti blokuotų elementų rezervuotą vietą",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Rodyti blokuotų užklausų skaičių piktogramoje",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Išjungti paaiškinimus",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Kur tinka, naudoti kontekstinį meniu",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Draugiškas neskiriantiems spalvų",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Išvaizda",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Custom accent color",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Įjungti nuotolinės saugyklos palaikymą",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Aš esu patyręs naudotojas (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>privaloma perskaityti</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Išjungti išankstinį gavimą (visiems blokuotų tinklo užklausų prisijungimams išvengti)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Išjungti saitų auditą",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Neleisti WebRTC atskleisti vietinio IP adreso",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Numatytoji elgsena",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Šios numatytosios elgsenos gali būti nustelbtos kiekvienam puslapiui atskirai",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Išjungti kosmetinius filtrus",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Blokuoti medijos elementus didesnius nei {{input}} kB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Blokuoti nuotolinius šriftus",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Išjungti JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Blokuoti CSP ataskaitas",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Uncloak canonical names",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Papildomi nustatymai",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Features suitable only for technical users",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "sudėtingesni nustatymai",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Paskutinis atkūrimas:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Paskutinė atsarginė kopija:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "Tinklo filtrų ({{netFilterCount}}) + kosmetinių filtrų ({{cosmeticFilterCount}}) iš:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "naudojama {{used}} iš {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Automatiškai atnaujinti filtrų sąrašus.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Atnaujinti dabar",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Valyti visus podėlius",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Analizuoti ir taikyti kosmetinius filtrus.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "<p>Ši nuostata įjungia <a href=\"https://adblockplus.org/en/faq_internal#elemhide\">Su Adblock Plus suderinamų „elementų slėpimo“ filtrų</a> analizę ir taikymą. Šie filtrai iš esmės yra kosmetiniai, jie naudojami tinklalapio elementams, kurie yra laikomi vaizdiniais nepatogumais ir kurių negalima užblokuoti tinklo užklausomis paremtais filtrais, paslėpti.</p><p>Šios nuostatos įjungimas padidina uBlock₀ atminties naudojimą.</p>",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignoruoti daugybinius kosmetinius filtrus.",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "<p>Daugybiniai kosmetiniai filtrai yra tokie kosmetiniai filtrai, kurie taikomi visoms svetainėms.<p>Nors uBlock₀ juos apdoroja efektyviai, daugybiniai kosmetiniai filtrai vis tiek gali prisidėti prie pamatuojamo atminties ir procesoriaus panaudojimo kai kuriose svetainėse, ypač didelėse ir ilgai gyvuojančiose.<p>Šio nustatymo įjungimas sumažins atminties ir procesoriaus naudojimą, kurį sukelia svetainės dėl daugybinių kosmetinių filtrų apdorojimo, bei sumažins bendrą uBlock₀ atminties naudojimą.<p>Rekomenduojama įjungti šį nustatymą mažiau galinguose įrenginiuose.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspend network activity until all filter lists are loaded",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Blokuotų serverių sąrašas",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Taikyti pakeitimus",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Įtaisyti",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Reklamos",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privatumas",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Kenksmingos sritys",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Erzinimas",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Univarsalūs",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regionai, kalbos",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Adaptuoti",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importuoti...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Vienas URL eilutėje. Neteisingi URL bus tyliai ignoruoti.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Pasenęs.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "peržiūrėti turinį",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Paskutinis atnaujinimas: {{ago}}.\nIeškoti atnaujinimo.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Atnaujinama...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Tinklo klaida sutrukdė atnaujinti resursą.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Vienas filtras eilutėje. Filtras gali būti paprastas serverio adresas, arba su Adblock Plus suderinamas filtras. Eilutės pradėtos <code>!</code> bus ignoruotos.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importuoti ir papildyti",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Eksportuoti",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "mano-ublock-statiniai-filtrai_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Taikyti pakeitimus",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Pastovios taisyklės",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Laikinos taisyklės",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Atstatyti",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Pritaikyti",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Redaguoti",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Įrašyti",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Atmesti",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importuoti iš failo...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Eksportuoti į failą",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "mano-ublock-dinaminės-taisyklės_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Dinaminių filtravimo taisyklių sąrašas.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Taisyklės sintaksė: <code>šaltinis paskirtis tipas veiksmas</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>dokumentacija</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Rikiuoti pagal:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Taisyklės tipas",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Šaltinis",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Tikslas",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Baltojo sąrašo direktyvos nurodo, kurioms svetainėms uBlock Origin turėtų būti išjungtas. Vienas įrašas eilutėje. Neteisingos direktyvos bus tyliai ignoruotos ir užkomentuotos.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importuoti ir papildyti",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Eksportuoti",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "mano-ublock-išimtys_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Taikyti pakeitimus",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Tipas",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Sritis",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filtras",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Visos",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Užkulisiai",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Dabartinė kortelė",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Įkelti kortelės turinį iš naujo",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Įjungti / išjungti DOM tyriklį",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Įjungti/išjungti iššokantį langą",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "„uBlock Origin“ viki: žurnalas",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Valyti žurnalą",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pristabdyti žurnalą (atmesti visus gaunamus duomenis)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Tęsti žurnalą",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Įjungti / išjungti žurnalo filtravimą",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtruoti žurnalo įrašus",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Žurnalo filtravimo nuostatos",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Ne",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "užblokuota",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "leidžiama",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modifikuota",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1-oji šalis",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3-ioji šalis",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Išsamiau",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filtras",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filtrų sąrašas",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Taisyklė",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Kontekstas",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Šakninis kontekstas",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partyness",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Tipas",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL taisyklė",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Kontekstas:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Tipas:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Statinis filtravimas",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} {{type}} tinklo užklausas, {{br}}kur URL adresas atitinka {{url}} {{br}}ir kurios kyla {{origin}},{{br}}{{importance}} yra atitinkantis išimties filtras.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Blokuoti",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Leisti",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "„{{type}}“ tipo",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "bet kokio tipo",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "iš „{{origin}}“",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "bet kur",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "išskyrus kai",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "net jei",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Statinis filtras <code>{{filter}}</code> rastas:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Statinis filtras <code>{{filter}}</code> nerastas jokiame dabar įjungtame filtrų sąraše",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Loggerio įrašai, kurie neatitinka visų trijų žemiau esančių sąlygų bus automatiškai panaikinami",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Išsaugoti įrašus ne senesnius kaip {{input}} min.",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preserve at most {{input}} page loads per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Preserve at most {{input}} entries per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Use {{input}} lines per entry in vertically expanded mode",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Hide columns:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Time",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/rule",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Context",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partyness",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Sąrašas",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Lentelė",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Neformatuotas",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Atidaryti",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Create new report",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Find similar reports",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentacija",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Read the documentation at <code>uBlock/wiki</code> to learn about all of uBlock Origin's features.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Questions and support",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter issues/website is broken",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Bug report",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Troubleshooting Information",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Report a filter issue",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Address of the web page:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "The web page…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pick an entry --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shows ads or ad leftovers",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Has privacy-related issues",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Malfunctions when uBlock Origin is enabled",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Opens unwanted tabs or windows",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privatumo politika",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Pakeitimų žurnalas",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Pirminis tekstas (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Talkininkai",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Programinis kodas",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Vertimai",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filtrų sąrašai",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Išorinės priklausomybės (suderinamos su „GPLv3“):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO's own filter lists are freely hosted on the following <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "A randomly picked CDN is used when a filter list needs to be updated.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Padaryti atsarginę kopiją į failą",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "mano-ublock-atsarginė_kopija_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Atkurti iš failo...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Atkurti numatytuosius nustatymus...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Visi jūsų nustatymai bus perrašyti naudojant duomenis iš {{time}} atsarginės kopijos, o uBlock₀ bus perleistas.\n\nPerrašyti visus nustatymus naudojant atsarginės kopijos duomenis?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Nepavyko nuskaityti duomenų arba jie neteisingi",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Visi jūsų nustatymai bus pašalinti, o uBlock₀ bus perleistas.\n\nAtkurti uBlock₀ pradinius nustatymus?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Tinklo klaida: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: Pridėti šį URL į jūsų adaptuotų filtrų sąrašą?\n\nPavadinimas: „{{title}}“\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Prenumeruoti",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "prieš minutę",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "prieš {{value}} min.",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "prieš valandą",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "prieš {{value}} val.",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "prieš dieną",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "prieš {{value}} d.",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Rodyti prietaisų skydą",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Rodyti žurnalą",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "išjungta",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Puslapis užblokuotas",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin neleido įkelti šio puslapio:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Dėl šio filtro",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "be parametrų",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Rasta:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Grįžti",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Užverti langą",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Išjungti griežtą {{hostname}} blokavimą",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Laikinai",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Negrįžtamai",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Eksportuoti į nuotolinę saugyklą",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importuoti iš nuotolinės saugyklos",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importuoti iš nuotolinės saugyklos ir sulieti su dabartiniais nustatymais",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Šio įrenginio vardas:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Įspėjimas! Keiskite šiuos sudėtingesnius nustatymus savo rizika.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Pateikti",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Taikyti pakeitimus",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Atstatyti",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "baitai",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Block element in frame…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subscribe to filter list…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Laikinai leisti didelius medijos elementus",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Įveskite nuorodą",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Toggle locked scrolling",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopijuoti į iškarpinę",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Select all",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relax blocking mode",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Storage used: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Click to load",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/lv/messages.json b/src/_locales/lv/messages.json
new file mode 100644
index 0000000..6b62cc6
--- /dev/null
+++ b/src/_locales/lv/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock₀",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Beidzot, efektīvs bloķētājs. Nepārslogo procesoru un atmiņu.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Vadības panelis",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Brīdinājums! Veiktās izmaiņas nav saglabātas",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Palikt",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignorēt",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Iestatījumi",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Trešo pušu filtri",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Mani filtri",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Mani noteikumi",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Uzticamas vietnes",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Īsceļi",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Tīkla pieprasījumu žurnāls",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Par",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Atbalsts",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — līdzekļu skatītājs",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Papildu iestatījumi",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Klikšķis: atslēgt/ieslēgt uBlock₀ šajā vietnē.\n\nCtrl+klikšķis: atslēgt uBlock₀ tikai šai lapai.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Noklikšķināt, lai atslēgtu uBlock₀ šajā vietnē.\n\nCtrl + klikšķis, lai atslēgtu uBlock₀ tikai šajā lapā.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Klikšķināt, lai šai vietnei ieslēgtu uBlock₀.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "bloķētie pieprasījumi",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "šajā lapā",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} vai {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "kopš instalācijas brīža",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "vai",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Aizturētas šajā lapā",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Pavisam aizturētas",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Savienotie domēni",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Atvērt vadības paneli",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Ieiet elementa dzēšanas režīmā",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Ienākt elementa atlasītāju režīmā",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Atvērt pieprasījumu žurnālu",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Ziņot par nepilnību šajā vietnē",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Pārslēgt uznirstošo logu bloķēšanu šajā vietnē",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Klikšķināt, lai šajā vietnē aizturētu uznirstošos logus",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Klikšķināt, lai šajā vietnē vairs neaizturētu uznirstošos logus",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Pārslēgt lielu multivides elementu bloķēšanu šajā vietnē",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Klikšķināt, lai šajā vietnē aizturētu lielas informācijas nesēju daļas",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Klikšķināt, lai neaizturētu lielas informācijas nesēju daļas",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Pārslēgt kosmētisko filtrēšanu šajā vietnē",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Klikšķināt, lai šajā vietnē atspējotu vizuālo aizturēšanu",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Klikšķināt, lai šajā vietnē iespējotu vizuālo aizturēšanu",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Pārslēgt ārējo fontu bloķēšanu šajā vietnē",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Klikšķināt, lai šajā vietnē aizturētu attālos fontus",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Klikšķināt, lai šajā vietnē vairs neaizturēt attālos fontus",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Klikšķināt, lai šajā vietnē atspējotu JavaScript",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Klikšķināt, lai šajā vietnē vairs neatspējotu JavaScript",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Uznirstošie logi",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Lielas informācijas nesēju daļas",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Vizuālā aizturēšana",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Attālinātie fonti",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Vairāk",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Mazāk",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Globālie ierobežojumi: šī kolonna paredzēta ierobežojumiem, kas attieksies uz visām mājaslapām.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Vietējie ierobežojumi: šī kolonna paredzēta ierobežojumiem, kas attieksies tikai uz konkrēto mājaslapu.\nVietējie ierobežojumi pārraksta globālos ierobežojumus.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Nokliķšķināt šeit, lai saglabātu izmaiņas.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Klikšķināt, lai atceltu izmaiņas.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "Visi",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "attēli",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "No trešajām pusēm",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "trešo pušu CSS/attēli",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "inline skripti",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1st-party skripti",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "3rd-party skripti",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "3rd-party freimi",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "savienotie domēni",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} no {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Versija",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "skripts",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "rāmis",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Izveidot",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Izvēlēties",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Iziet",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Priekšskatījums",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Resursu filtri",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Vizuālie filtri",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Click, Ctrl-click",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Bloķēt elementu…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Paslēpt vietu no bloķētā elementa",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Parādīt bloķēto pieprasījumu skaitu uz ikonas",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Atslēgt rīka padomus (tooltips)",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Izmantot konteksta izvēlni vajadzības gadījumā",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Daltoniķiem draudzīgs",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Izskats",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Izskats",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Pielāgota izcēluma krāsa",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Aktivizēt mākoņdatu glabāšanas atbalstu",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Es esmu pieredzējis lietotājs (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>Vēlams izlasīt</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Atslēgt pirmsielādi (lai novērstu bloķētus tīkla pieprasījumus)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Atslēgt tīmekļa saišu izsekošanu",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Novērst savas IP adreses noplūdi ar WebRTC",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Noklusējuma darbība",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Šos uzstādījumus var mainīt katrai vietnei atsevišķi",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Atslēgt kosmētiskos filtrus",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Aizturēt informācijas nesēju daļas, kas ir lielākas par {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Bloķēt ārējos fontus",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Atspējot JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Bloķēt CSP atskaites",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Atslēpt kanoniskos nosaukumus",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Paplašināti",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Iespējas, kas piemērotas tikai tehniskiem lietotājiem.",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "papildu iestatījumi",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Pēdējā atjaunošana veikta:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Pēdējā rezerves kopija:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} tīkla filtri + {{cosmeticFilterCount}} kosmētikas filtri no:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} izmanto no {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Automātiski atjaunināt filtra sarakstus.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Atjaunināt tūlīt",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Visas kešatmiņas iztīrīšana",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Apstrādāt un izpildīt kosmētikas filtrus.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "<p>Šī opcija iespējo apstrādāt un ieviest ar <a href=\"https://adblockplus.org/en/faq_internal#elemhide\"> Adblock Plus saderīgus &ldquo;elementu paslēpšanas&rdquo;</a> filtrus. Šie filtri ir būtībā kosmētiski, tie kalpo, lai paslēptu tīmekļa lapu elementus, kas tiek uzskatīti par vizuālu traucējumu, un kas nevar būt nobloķēti ar pieprasījumu balstītu filtrēšanas programmu.</p><p>Šī līdzekļa iespējošana palielina <i>uBlock₀</i> izmantojamās atmiņas daudzumu.</p>",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignorēt vispārīgos kosmētiskos filtrus",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "<p>Vispārīgie kosmētikas filtri ir kosmētikas filtri, kurus paredzēts piemērot visās tīmekļvietnēs.<p>Lai gan uBlock ₀ darbojas efektīvi, vispārīgie kosmētikas filtri dažās tīmekļa lapās var ievērojami noslogot atmiņu un centrālo procesoru.<p>Šīs opcijas izmantošana samazinās vispārīgo kosmētikas filtru izmantotās atmiņas un procesora noslodzi kā arī samazinās paša uBlock₀ izmantoto atmiņu.<p>Ieteicams izmantot zemas veiktspējas ierīcēm.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Atlikt tīkla darbības, līdz visi aizturēšanas saraksti ir ielādēti.",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Bloķēto hostu saraksti",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Lietot izmaiņas",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Iebūvētie",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Reklāmas",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Konfidencialitāte",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Ļaundabīgo programmu domēni",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Traucējoši elementi",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Daudzfunkcionālie",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Reģionālie, valodas",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Lietotāja",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importēt…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Vienu URL katrā rindiņā. Rindiņas, kuras sākas ar &lsquo;!&rsquo; tiks ignorētas. Nederīgs URL tiks ignorēts bez brīdinājuma.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Novecojis.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "skatīt saturu",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Pēdējo reizi atjaunināts: {{ago}}.\nNoklikšķiniet, lai atjauninātu.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Atjaunina…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Tīkla kļūda neļāva atjaunināt resursu.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Vienu filtru katrā rindā. Filtrs var būt vienkārši resursa adrese, vai ar Adblock Plus saderīgs filtrs. Rindiņas, kuras sākas ar &lsquo;!&rsquo; tiks ignorētas.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Nevajag pievienot filtrus no neuzticamiem avotiem.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importēt un pievienot",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Eksportēt",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Lietot izmaiņas",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Pastāvīgie noteikumi",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Pagaidu noteikumi",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Atgriezt",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Ieviest",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Rediģēt",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Saglabāt",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Atsacīties",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importēt no faila…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Eksportēt uz failu",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Dinamisko filtrēšanas noteikumu saraksts.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Noteikumu sintakse: <code>avots mērķis tips rīcība</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>pilna dokumentācija</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Kārtot:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Nosacījuma veids",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Avots",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Mērķis",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Saraksts ar interneta resursiem, kuriem tiks atslēgts uBlock Origin. Viens ieraksts katrā rindiņā. Nederīgi interneta resursu nosaukumi tiks ignorēti bez brīdinājuma.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importēt un pievienot",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Eksportēt",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-whitelist_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Lietot izmaiņas",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Tips",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domēns",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filtrs",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Viss",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Aizkulisēs",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Šī cilne",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Pārlādēt cilnes saturu",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Pārslēgt DOM pārlūku",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Pārslēgt uznirstošo paneli",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: žurnāls",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Iztīrīt žurnālu",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Apturēt žurnalēšanu (atmest visus ienākošos datus)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Atsākt žurnālus",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Pārslēgt žurnāla atlasi",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "žurnāla ierakstu filtrs",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Žurnāla atlases iespējas",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Nav",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "aizturēts",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "atļauts",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "mainīts",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "Pirmā puse",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "Trešā puse",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Izklāsts",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filtrs",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filtru saraksts",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Nosacījums",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Konteksts",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Saknes konteksts",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Ballīte",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Veids",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "Vietnes URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Dinamiskā URL filtrēšana",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Konteksts:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Tips:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Statiskā filtrēšana",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} tīkla pieprasījumiem {{type}} {{br}}kuru URL adrese satur {{url}} {{br}}un kas nāk no {{origin}},{{br}}{{importance}} ir atbilstošs izņēmumu filtrs.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Bloķēt",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Atļaut",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "tips “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "jebkurš tips",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "no “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "no jebkuras vietas",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "izņemot gadījumus, kad",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "pat ja",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Statiskais filtrs <code>{{filter}}</code> atrasts:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Nemainīgs aizturētājs netika atrasts nevienā no pašreiz iespējotajiem aizturēšanas sarakstiem",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Žurnāla ieraksti, kas neatbilsts visiem trim zemāk esošajiem nosacījumiem, tiks atmesti:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Saglabāt pēdējo {{input}} minūšu ierakstus",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Saglabāt ne vairāk kā {{input}} lapu ielādes cilnē",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Saglabāt ne vairāk kā {{input}} ierakstus cilnē",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Izmantot {{input}} rindas ierakstam stateniski izvērstā skatā",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Paslēpt kolonnas:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Laiks",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} aizturētājs/nosacījums",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Konteksts",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Ballīte",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Saraksts",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabula",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Vienkāršs",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Atvērt",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Izveidot jaunu ziņojumu",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Meklēt līdzīgus ziņojumus",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentācija",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Dokumentāciju var lasīt <code>uBlock/wiki</code>, lai uzzinātu par visām uBlock Origin iespējām.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Jautājumi un atbalsts",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Atbildes uz jautājumiem un cita veida atbalsts tiek sniegts <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Aizturēšanas nepilnības/nedarbojas vietne",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Par aizturēšanas nepilnībām noteiktās vietnēs var ziņot nepilnību uzskaitē <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code></span>.",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Svarīgi:</b> ir jāizvairas no līdzīgu aizturētāju izmantošanas vienlaicīgi ar uBlock Origin, jo tas var radīt aizturēšanas kļūmes noteiktās vietnēs.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Ieteikums:</b> jāpārliecinās, ka aizturēšanas saraksti ir atjaunināti. <span data-url=\"logger-ui.html#_\">Žurnāls</span> ir galvenais rīks, lai noteiktu ar aizturēšanu saistītas kļūmes.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Nepilnību ziņojums",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Par uBlock Origin nepilnībām jāziņo <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code></span>.",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Kļūmju noteikšanas informācija",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Zemāk ir tehniskā informācija, kas var būt noderīga, kad brīvprātīgie mēģinās palīdzēt atrisināt sarežģījumus.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Svarīgi:</b> iespējami privāta vai sensitīva informācija pēc noklusējuma tiek izņemta. Aizvākta informācija var apgrūtināt sarežģījuma atrisināšanu.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Ziņot par aizturētāja nepilnībām",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Lai izvairītos no brīvprātīgo noslogošanas ar ziņojumiem, kas atkārtojas, lūgums pārbaudīt, vai par šādu nepilnību jau ir ziņots.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Aizturēšanas saraksti tiek atjaunināti ik dienu. Jāpārliecinās, vai nepilnība jau nav novērsta visjaunākajos aizturēšanas sarakstos.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Jāpārliecinās, vai nepilnība joprojām pastāv pēc tīmekļa vietnes ar sarežģījumiem pārlādēšanas.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Tīmekļa lapas adrese:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Tīmekļa lapa…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Atlasīt ierakstu --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Rāda reklāmas vai to paliekas",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Ir pārklājumi vai citas neērtības",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Nosaka uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Ir ar privātumu saistītas nebūšanas",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Salūzt, kad uBlock Origin ir iespējots",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Atver nevēlamas cilnes vai logus",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Iezīmēt tīmekļa lapu kā \"NSFW\" (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">\"Not Safe for Work</a> (nav droša darbam))",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Izņemt",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Atdarīt izņemšanu",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privātuma nosacījumi",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Izmaiņu žurnāls",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Pirmkods (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Atbalstītāji",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Pirmkods",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Tulkojumi",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filtru saraksti",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Ārējās atkarības (GPLv3 saderīgas):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO pašu aizturēšanas saraksti ir brīvi pieejami šajos <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">SPT (satura piegādes tīklos)</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Nejauši izvēlēts SPT tiks izmantots, kad būs jāatjaunina aizturēšanas saraksts.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Saglabāt iestatījumus failā",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Atjaunot iestatījumus no faila...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Atgriezt noklusējuma iestatījumus…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Tiks pārrakstīti visi iestatījumi izmantojot datus, kas saglabāti {{time}}, un µBlock₀ tiks restartēts. Pārrakstīt visus esošos iestatījumus, izmantojot rezerves kopiju?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Datus nevar nolasīt vai tie nav derīgi",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Tiks atcelti visi Jūsu iestatījumi, un uBlock₀ tiks restartēts. \nAtjaunot rūpnīcas iestatījumus?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Tīkla kļūda: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: Pievienot sekojošo URL Jūsu lietotāja filtru sarakstiem?\n\nNosaukums: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Abonēt",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "pirms minūtes",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "pirms {{value}} minūtēm",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "pirms stundas",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "pirms {{value}} stundām",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "vakar",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "pirms {{value}} dienām",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Parādīt Vadības paneli",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Parādīt tīkla pieprasījumu žurnālu",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "izslēgts",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Lapa aizturēta",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock₀ novērsa šo lapu no ielādes:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Sakarā ar šādu filtru",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "bez parametriem",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Atrodas:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Doties atpakaļ",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Aizvērt šo logu",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Vairs nebrīdināt par šo vietni",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Atslēgt satura bloķēšanu saitnei {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Pagaidu",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Paliekoši",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Turpināt",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Eksports uz mākoņdatu glabātuvi",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Imports no mākoņdatu glabātuves",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importēt no mākoņdatu glabātuves un apvienot ar pašreizējiem iestatījumiem",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Šīs ierīces nosaukums:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Brīdinājums! Mainiet šos iestatījumus uz savu atbildību.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Iesniegt",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Lietot izmaiņas",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Atgriezt",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "baiti",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Aizturēt elementu rāmī…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Abonēt filtru sarakstu…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Īslaicīgi atļaut lielos multivides elementus",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Skatīt pirmkodu…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Ievadīt saīsni",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Pārslēgt slēgto ritināšanu",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopēt starpliktuvē",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Atlasīt visu",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Pārslēgt kosmētisko atlasi",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Atslābinātais aizturēšanas režīms",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Izmantotais krātuves lielums: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Klikšķināt, lai ielādētu",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Kļūdas: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Nevarēja pienācīgi aizturēt pārlūka palaišanas laikā.\nJāpārlādē lapa, lai nodrošinātu pienācīgu aizturēšanu.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Šim ierakstam ir jābūt pēdējam",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/mk/messages.json b/src/_locales/mk/messages.json
new file mode 100644
index 0000000..4a38be4
--- /dev/null
+++ b/src/_locales/mk/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Конечно, ефикасен блокер. Лесен на CPU и меморија.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Табла",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Предупредување! Имате неснимени промени",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Остани",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Игнорирај",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Подесувања",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Филтер листи",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Мои филтери",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Мои правила",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Верувани сајтови",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Кратенки",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Логови",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "За",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Support",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Asset viewer",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Напредни подесувања",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Click to enable uBlock₀ for this site.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "побарувања блокирани",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "на оваа страница",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} или {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "од инсталирање",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "или",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Блокирани на оваа страна",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Блокирани од инсталирање",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Домени конектирани",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Отворија ја таблата",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Влези во елемент западник мод",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Влези во елемент одбирач мод",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Отвоери го логерот",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Report an issue on this website",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Toggle the blocking of all popups for this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Кликни да блокираш сите попапи на оваа страница",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Click to no longer block all popups on this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Toggle the blocking of large media elements for this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Click to block large media elements on this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Click to no longer block large media elements on this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering for this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Кликнете да го исклучите козметичките филтри на оваа страна",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Кликнете да го уклучите козметичките филтри на оваа страна",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Toggle the blocking of remote fonts for this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Click to block remote fonts on this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Click to no longer block remote fonts on this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Кликнете за да се блокира JavaScript на оваа страна",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Кликнете за да не се блокира JavaScript на оваа страна повеќе",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Поп-ап прозорец",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Големи медија елемнти",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Козметичко филтрирање",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Далечни фонтови",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Повеќе",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Помалку",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Глобални правила: оваа колона е за правила што се однесуваат на сите сајтови.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Локални правила: оваа колона е за правила што се однесуваат само на моменталниот сајт.\nЛокални правила надминуваат глобални правила.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Кликни да ги снимиш твоите промени трајно",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Кликни да ги повратиш твоите промени",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "сите",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "слики",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "Трети лица",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "Трети лица css/слики",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "внатрешни скрипти",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "Самострани скрипти",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "Други страни скрипти",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "3rd-party фрејмови",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "домени конектирани",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} од {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Верзија",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Создади",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Одбери",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Исклучи",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Прегледај",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Мрежни филтери",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Козметичко филтрирање",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Клик, Контрол-клик",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Блокирај елемент...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Hide placeholders of blocked elements",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Покажувај ја бројката на блокирани барања на иконата",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": " Исклучи ги советите",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Make use of context menu where appropriate",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Користи бои за слепоболност",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Appearance",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Theme",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Custom accent color",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Уклучи поддршка за складирање во облак",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Јас сум напреден корисник (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>потребно читање</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Disable pre-fetching (to prevent any connection for blocked network requests)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Disable hyperlink auditing",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Prevent WebRTC from leaking local IP addresses",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Стандардно однесување",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Овие стандардни однесувања можат да се променат на база на сајт",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Исклучи козметичо филтрирање",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Блокирај медија елементи поголеми од {{input}} КБ",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Блокирај далечни фонтови",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Исклучи JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Block CSP reports",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Uncloak canonical names",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Advanced",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Features suitable only for technical users",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "напредни подесувања",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Последно ресторирање:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Последно снимено:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} мрежни филтери + {{cosmeticFilterCount}} козметичи филтери од:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} користени од {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Авто-ажурирање филтер листи",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Апдејтирај сега",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Исчисти сите кешови",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Parse and enforce cosmetic filters",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignore generic cosmetic filters",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspend network activity until all filter lists are loaded",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Примени измени",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Вградено",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Реклами",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Приватност",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Домени на малвер",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Досадни",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multipurpose",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Региони, јазици",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Custom",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Импортирај...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Еден УРЛ по линија. Неважечки УРЛи ќе бидат игнорирани во тишина.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Застарени.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "view content",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Last update: {{ago}}.\nClick to force an update.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Ажурирање...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "A network error prevented the resource from being updated.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with <code>!</code> will be ignored.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Внеси и додај",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Ескпортирај",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "мои-ублок-статични-филтери_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Постојани правила",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Привремени правила",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Поврати",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Изврши",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Уреди",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Сними",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Отфрли",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Внеси од фајл",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Изнеси во фајл",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "мои_ублок_динамични_правила_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Листа од твоите динамични филтер правила",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Rule syntax: <code>source destination type action</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>full documentation</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Подреди:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Тип на правило",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Извор",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Дестинација",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Внеси и додади",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Експортирај",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "моите_ублок_верувани_сајтови_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Примени ги измените",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Тип",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Домен",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "УРЛ",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Филтер",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Сите",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Без табови",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Сегашен таб",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Reload the tab content",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Toggle the DOM inspector",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Toggle the popup panel",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: The logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Исчисти логови",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Паузирај логови (отфрли влезни податоци)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Продолжи логирање",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Toggle logger filtering",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filter logger content",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Logger filtering options",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Не",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "блокиран",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "Дозволен",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modified",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1ва-партија",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3та-партија",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Детали",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Филтер",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Филтер листа",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Правило",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Контекст",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Root context",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Партија",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Тип",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "УРЛ",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "УРЛ правило",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Контекст: ",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Тип:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Статичен филтер",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} мрежни барана од {{type}} {{br}} кои УРЛ адреси одговараат на {{url}} {{br}}кои доаѓаат од {{origin}},{{br}}{{importance}} има соодветен филтер за исклучоци.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Блокирај",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Дозволи",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "тип \"{{type}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "било кој тип",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "од \"{{origin}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "од било каде",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "освен кога",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "иако ",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Статичен филтер <code>{{filter}}</code> најден во:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Static filter could not be found in any of the currently enabled filter lists",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Preserve entries from the last {{input}} minutes",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preserve at most {{input}} page loads per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Preserve at most {{input}} entries per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Use {{input}} lines per entry in vertically expanded mode",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Hide columns:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Време",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Филтер/правило",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} контекст",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Партија",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Листа\n",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Табла",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Обично",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Маркдаун",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Open",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Create new report",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Find similar reports",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentation",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Read the documentation at <code>uBlock/wiki</code> to learn about all of uBlock Origin's features.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Questions and support",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter issues/website is broken",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Bug report",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Troubleshooting Information",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Report a filter issue",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Address of the web page:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "The web page…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pick an entry --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shows ads or ad leftovers",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Has privacy-related issues",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Malfunctions when uBlock Origin is enabled",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Opens unwanted tabs or windows",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Дневник на промена",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Сорс Код (ГПЛв3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Соработници",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Сорс код",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Преведувања",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Филтер листи",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO's own filter lists are freely hosted on the following <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "A randomly picked CDN is used when a filter list needs to be updated.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Back up to file…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "мој-ублок-бекап_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Restore from file…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Reset to default settings…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "The data could not be read or is invalid",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Мрежна грешка: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Subscribe",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "пред една минута",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "пред {{value}} минути",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "пред саат време",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "пред {{value}} саати",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "пред еден ден",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "пред {{value}} дена",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Покажи Дешборд",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Покажи Логер",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "исклучи",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Page blocked",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin has prevented the following page from loading:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Because of the following filter:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "без параметри",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Најдено во:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Оди назад",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Затвори го прозорецот",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Disable strict blocking for {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Повремено",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Трајно",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Export to cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Import from cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Import from cloud storage and merge with current settings",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Име на уред:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Warning! Change these advanced settings at your own risk.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Submit",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Примени ги измените",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Поврати",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "бајтови",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Block element in frame…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subscribe to filter list…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Temporarily allow large media elements",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Внесете кратенка",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Toggle locked scrolling",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Копирај во табла со исечоци",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Select all",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Релаксиран мод на блокирање",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Место вземеноЧ {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "КБ",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "МБ",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "ГБ",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Click to load",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/ml/messages.json b/src/_locales/ml/messages.json
new file mode 100644
index 0000000..bd4452e
--- /dev/null
+++ b/src/_locales/ml/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "അവസാനം, ഒരു കാര്യക്ഷമമായ ബ്ലോക്കര്‍. ലഘുവായ CPU, memory ഉപയോഗം.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "യുബ്ലോക്ക്ഒ - ഡാഷ്ബോര്‍ഡ്",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "മുന്നറിയിപ്പ്! നിങ്ങൾക്ക് സംരക്ഷിക്കാത്ത മാറ്റങ്ങളുണ്ട്",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "താമസിക്കുക",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "അവഗണിക്കുക",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "ക്രമീകരണം",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "തേര്‍ഡ് പാര്‍ട്ടി ഫില്‍ട്ടറുകള്‍",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "എന്‍റെ ഫില്‍ട്ടറുകള്‍",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "എന്‍റെ നിയമങ്ങള്‍",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "വൈറ്റ് ലിസ്റ്റ്",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "കുറുക്കുവഴികൾ",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "യുബ്ലോക്ക്ഒ - നെറ്റ്‌വര്‍ക്ക് അപേക്ഷാ ലോഗ്",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "ഇതിനെ കുറിച്ച്",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "സഹായം ",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ - അസറ്റ് വ്യൂവർ",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "വിപുലമായ ക്രമീകരണങ്ങൾ",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "ക്ലിക്ക്: ഈ സൈറ്റില്‍ യുബ്ലോക്ക്ഒ ഡിസേബിള്‍/എനെബിള്‍ ചെയ്യാന്‍.\nCtrl + ക്ലിക്ക്: ഈ പേജില്‍ യുബ്ലോക്ക്ഒ ഡിസേബിള്‍/എനെബിള്‍ ചെയ്യാന്‍.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "ഈ സൈറ്റിനായി uBlock₀ പ്രവർത്തനരഹിതമാക്കാൻ ക്ലിക്കുചെയ്യുക.\n\nഈ പേജിൽ മാത്രം uBlock₀ പ്രവർത്തനരഹിതമാക്കാൻ Ctrl + ക്ലിക്കുചെയ്യുക.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "ഈ സൈറ്റിനായി uBlock₀ പ്രവർത്തനക്ഷമമാക്കാൻ ക്ലിക്കുചെയ്യുക.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "അപേക്ഷകള്‍ ബ്ലോക്ക്‌ ചെയ്യപ്പെട്ടു",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "ഈ പേജില്‍",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} അല്ലെങ്കില്‍ {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "ഇന്‍സ്റ്റാളിനു ശേഷം",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "അല്ലെങ്കില്‍",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "ഈ പേജിൽ തടഞ്ഞു",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "ഇൻസ്റ്റാളുചെയ്‌തതിനുശേഷം തടഞ്ഞു",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "ഡൊമെയ്‌നുകൾ കണക്റ്റുചെയ്‌തു",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "ഡാഷ്ബോര്‍ഡ് തുറക്കാന്‍ ക്ലിക്ക് ചെയ്യുക",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "ഘടക സപ്പർ മോഡ് നൽകുക",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "എലമെന്‍ഡ് പിക്കര്‍ മോഡില്‍ കടക്കുക",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "അപേക്ഷാ ലോഗിലേക്ക് പോകുക",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "ഈ വെബ്‌സൈറ്റിൽ ഉള്ള പ്രശ്നങ്ങൾ അറിയിക്കുക ",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "ഈ സൈറ്റിലെ എല്ലാ പോപ്‌അപ്പുകളും ബ്ലോക്ക്‌ ചെയ്യുന്നത് ടോഗ്ഗിള്‍ ചെയ്യുക",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "ഈ സൈറ്റിലെ എല്ലാ പോപ്പ്അപ്പുകളും തടയാൻ ക്ലിക്കുചെയ്യുക",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "ഈ സൈറ്റിലെ എല്ലാ പോപ്പ്അപ്പുകളും മേലിൽ തടയാൻ ക്ലിക്കുചെയ്യുക",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "ഈ സൈറ്റിനായി വലിയ മീഡിയ ഘടകങ്ങളുടെ തടയൽ ടോഗിൾ ചെയ്യുക",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "ഈ സൈറ്റിലെ വലിയ മീഡിയ ഘടകങ്ങൾ തടയാൻ ക്ലിക്കുചെയ്യുക",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "ഈ സൈറ്റിലെ വലിയ മീഡിയ ഘടകങ്ങളെ മേലിൽ തടയാൻ ക്ലിക്കുചെയ്യുക",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "ഈ സൈറ്റില്‍ സൗന്ദര്യ ഫില്‍ട്ടറുകള്‍ ടോഗ്ഗിള്‍ ചെയ്യുക",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "ഈ സൈറ്റിൽ കോസ്മെറ്റിക് ഫിൽ‌ട്ടറിംഗ് അപ്രാപ്‌തമാക്കാൻ ക്ലിക്കുചെയ്യുക",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "ഈ സൈറ്റിൽ കോസ്മെറ്റിക് ഫിൽ‌ട്ടറിംഗ് പ്രാപ്തമാക്കുന്നതിന് ക്ലിക്കുചെയ്യുക",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "ഈ സൈറ്റില്‍ റിമോട്ട് ഫോണ്ടുകള്‍ ബ്ലോക്ക് ചെയ്യുന്നത് ടോഗ്ഗിള്‍ ചെയ്യുക",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "ഈ സൈറ്റിലെ വിദൂര ഫോണ്ടുകൾ തടയാൻ ക്ലിക്കുചെയ്യുക",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "ഈ സൈറ്റിൽ വിദൂര ഫോണ്ടുകൾ മേലിൽ തടയാൻ ക്ലിക്കുചെയ്യുക",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "ഈ സൈറ്റിൽ JavaScript അപ്രാപ്തമാക്കാൻ ക്ലിക്കുചെയ്യുക",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "ഈ സൈറ്റിൽ‌ ഇനിമുതൽ‌ JavaScript അപ്രാപ്‌തമാക്കുന്നതിന് ക്ലിക്കുചെയ്യുക",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "പോപ്പ്-അപ്പ് വിൻഡോകൾ",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "വലിയ മീഡിയ ഘടകങ്ങൾ",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "കോസ്മെറ്റിക് ഫിൽട്ടറിംഗ്",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "വിദൂര ഫോണ്ടുകൾ",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "ജാവാസ്ക്രിപ്റ്റ്",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "കൂടുതൽ",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "കുറവ്",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "ആഗോള നിയമങ്ങൾ: ഈ കോളത്തിലെ നിയമങ്ങൾ എല്ലാ സൈറ്റുകളിലും പ്രയോഗിക്കുന്ന നിയമങ്ങള് ആണ്.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "പ്രാദേശിക നിയമങ്ങൾ: ഈ കോളത്തിലെ നിയമങ്ങൾ നിലവിലെ സൈറ്റിലെ മാത്രം പ്രയോഗിക്കുന്ന.\nപ്രാദേശിക നിയമങ്ങൾ ആഗോള നിയമങ്ങൾ അതിലംഘിച്ച് പ്രവർത്തിക്കുന്നതായിരിക്കും.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "നിങ്ങളുടെ മാറ്റങ്ങൾ സ്ഥിരപെടുത്താന്‍ ക്ലിക്കുചെയ്യുക.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "നിങ്ങളുടെ മാറ്റങ്ങൾ പഴയപടി ആകാന്‍ ക്ലിക്കുചെയ്യുക.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "എല്ലാം",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "ചിത്രങ്ങള്‍",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "തേര്‍ഡ് പാര്‍ട്ടി",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "മൂന്നാം പാര്‍ട്ടി സിഎസ്എസ്/ ചിത്രങ്ങള്‍",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "ഇന്‍ലൈന്‍ സ്ക്രിപ്റ്റുകള്‍",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "ഫസ്റ്റ് പാര്‍ട്ടി സ്ക്രിപ്റ്റുകള്‍",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "തേര്‍ഡ് പാര്‍ട്ടി സ്ക്രിപ്റ്റുകള്‍",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "തേര്‍ഡ് പാര്‍ട്ടി ഫ്രെയിമുകള്‍",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "കണക്റ്റ് ചെയ്യപ്പെട്ട ഡൊമൈനുകള്‍",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{total}} ല്‍ നിന്നും {{count}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "പതിപ്പ്",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "ക്രിയേറ്റ് ചെയ്യുക",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "പിക്ക് ചെയ്യുക",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "പുറത്ത് കടക്കുക",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "പ്രിവ്യൂ",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "നെറ്റ് ഫില്‍ട്ടറുകള്‍",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "സൗന്ദര്യ ഫില്‍ട്ടറുകള്‍",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "ക്ലിക്ക്, Ctrl - ക്ലിക്ക്",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "എലമെന്‍ഡ് ബ്ലോക്ക് ചെയ്യുക",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "ബ്ലോക്ക് ചെയ്യപ്പെട്ട എലമെന്‍ഡുകള്‍ക്ക് പകരമായുള്ള പ്ലയ്സ്ഹോള്‍ഡറുകള്‍ മറയ്ക്കുക",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "ഐക്കണില്‍ ബ്ലോക്ക് ചെയ്യപ്പെട്ട അപേക്ഷകളുടെ എണ്ണം കാണിക്കുക",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "ടൂള്ടിപ്പ് പ്രവർത്തനരഹിതമാക്കുക",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "ആവശ്യമായ ഇടങ്ങളില്‍ കോണ്‍ടെക്സ്റ്റ്‌ മെനു ഉപയോഗിക്കുക",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "വർണ്ണാന്ധതാ സൗഹാര്‍ദ്ദപരമായത്",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Appearance",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Theme",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Custom accent color",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "ക്ലൌഡ് സ്റ്റോറെജ് സപ്പോര്‍ട്ട് എനേബിള്‍ ചെയ്യുക",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "ഞാന്‍ ഒരു അഡ്വാന്‍സ്ഡ് യൂസര്‍ ആണ് (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'> വായിക്കേണ്ടത്</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "പ്രീ-ഫെച്ചിംഗ് ഡിസേബിള്‍ ചെയ്യുക (ബ്ലോക്ക് ചെയ്ത നെറ്റ്‌വര്‍ക്ക് അപേക്ഷകള്‍ക്ക് കണക്ഷന്‍ ലഭിക്കുന്നത് തടയുന്നതിന്)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "ഹൈപര്‍ ലിങ്ക് ഓഡിറ്റിങ്ങ്/ബീക്കന്‍ ഡിസേബിള്‍ ചെയ്യുക",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "വെബ്‌ആര്‍ടിസി ലോക്കല്‍ ഐ പി അഡ്രസുകള്‍ ലീക്ക് ചെയ്യുന്നത് തടയുക",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "സ്ഥിര രീതി",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "ഓരോ സ്ഥിരസ്ഥിതി അടിസ്ഥാനത്തിലും ഈ സ്ഥിരസ്ഥിതി പെരുമാറ്റങ്ങൾ അസാധുവാക്കാനാകും",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "കോസ്മെറ്റിക് ഫിൽട്ടറിംഗ് പ്രവർത്തനരഹിതമാക്കുക",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "മീഡിയ ഘടകങ്ങളെക്കാൾ വലുത് തടയുക {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "വിദൂര ഫോണ്ടുകൾ തടയുക",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "ജാവാസ്ക്രിപ്റ്റ് അപ്രാപ്തമാക്കുക",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "സി‌എസ്‌പി റിപ്പോർട്ടുകൾ തടയുക",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "കാനോനിക്കൽ പേരുകൾ അൺലോക്ക് ചെയ്യുക",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Advanced",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Features suitable only for technical users",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "വിപുലമായ ക്രമീകരണങ്ങൾ",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "അവസാന റീസ്റ്റോര്‍:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "അവസാന ബാക്ക്അപ്:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} നെറ്റ്‌വര്‍ക്ക് ഫില്‍ട്ടറുകള്‍ + {{cosmeticFilterCount}} സൗന്ദര്യ ഫില്‍ട്ടറുകള്‍ ഇവിടെ നിന്നും:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{total}} ല്‍ നിന്നും {{used}} ഉപയോഗിക്കുന്നു",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "ഫില്‍ട്ടര്‍ ലിസ്റ്റുകള്‍ ഓട്ടോ-അപ്ഡേറ്റ് ചെയ്യുക.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "ഇപ്പോള്‍ അപ്ഡേറ്റ് ചെയ്യുക",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "ക്യാഷ് ശുദ്ധീകരിക്കുക",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "ശുദ്ധീകരിച്ച് സൗന്ദര്യ ഫില്‍ട്ടറുകള്‍ എന്‍ഫോര്‍സ് ചെയ്യുക.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "ഒരു വിഷ്വൽ ശല്യമെന്ന് കരുതപ്പെടുന്നതും നെറ്റ്‌വർക്ക് അഭ്യർത്ഥന അടിസ്ഥാനമാക്കിയുള്ള ഫിൽട്ടറിംഗ് എഞ്ചിനുകൾക്ക് തടയാൻ കഴിയാത്തതുമായ ഒരു വെബ് പേജിലെ ഘടകങ്ങൾ മറയ്ക്കാൻ കോസ്മെറ്റിക് ഫിൽട്ടറുകൾ സഹായിക്കുന്നു.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "ജനറിക് കോസ്മെറ്റിക് ഫിൽട്ടറുകൾ അവഗണിക്കുക",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "എല്ലാ വെബ് സൈറ്റുകളിലും പ്രയോഗിക്കാൻ ഉദ്ദേശിക്കുന്ന കോസ്മെറ്റിക് ഫിൽട്ടറുകളാണ് ജനറിക് കോസ്മെറ്റിക് ഫിൽട്ടറുകൾ. ഈ ഓപ്ഷൻ പ്രവർത്തനക്ഷമമാക്കുന്നത് ജനറിക് കോസ്മെറ്റിക് ഫിൽട്ടറുകൾ കൈകാര്യം ചെയ്യുന്നതിന്റെ ഫലമായി വെബ് പേജുകളിൽ ചേർത്ത മെമ്മറിയും സിപിയു ഓവർഹെഡും ഇല്ലാതാക്കും.\n\nശക്തി കുറഞ്ഞ ഉപകരണങ്ങളിൽ ഈ ഓപ്‌ഷൻ പ്രവർത്തനക്ഷമമാക്കാൻ ശുപാർശ ചെയ്യുന്നു.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspend network activity until all filter lists are loaded",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "മാറ്റങ്ങള്‍ അപ്ലേ ചെയ്യുക",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "അന്തർനിർമ്മിതം",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "പരസ്യങ്ങള്‍",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "സ്വകാര്യത",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "മാല്‍വെയര്‍ ഡൊമൈനുകള്‍",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "ശല്യപ്പെടുത്തലുകൾ",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "മള്‍ട്ടിപര്‍പ്പസ്",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "പ്രാദേശികം, ഭാഷകള്‍",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "കസ്റ്റം",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "ഇറക്കുമതി ചെയ്യുക ...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "ഒരു വരിയില്‍ ഒരു യുആര്‍എല്‍ എന്ന രീതിയില്‍. &lsquo;!&rsquo; എന്നിവയില്‍ തുടങ്ങുന്ന വരികള്‍ ഇഗ്നോര്‍ ചെയ്യപ്പെടും. ഇന്‍വാലിഡ്‌ ആയ യുആര്‍എല്ലുകള്‍ നിശബ്ദമായി ഇഗ്നോര്‍ ചെയ്യപ്പെടും.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "കാലഹരണപ്പെട്ടത്",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "ഉള്ളടക്കം കാണുക",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "അവസാന അപ്ഡേറ്റ്:{{ago}}",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "അപ്‌ഡേറ്റുചെയ്യുന്നു ...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "ഒരു നെറ്റ്‌വർക്ക് പിശക് ഉറവിടം അപ്‌ഡേറ്റുചെയ്യുന്നതിൽ നിന്ന് തടഞ്ഞു.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "ഒരു വരിയില്‍ ഒരു ഫില്‍റ്റര്‍ എന്ന രീതിയില്‍. ഒരു ഫില്‍റ്റര്‍ എന്നത്, ഹോസ്റ്റ് നെയിം, അല്ലെങ്കില്‍ ആഡ് ബ്ലോക്ക് പ്ലസ്‌-നോട്‌ കംപാറ്റബിള്‍ ആയ ഫില്‍റ്റര്‍ എന്നിവ ആകാം. &lsquo;!&rsquo; എന്നിവയില്‍ ആരംഭിക്കുന്ന വരികള്‍ ഇഗ്നോര്‍ ചെയ്യപ്പെടും.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "ഇമ്പോര്‍ട്ടും കൂട്ടിചേര്‍ക്കലും ചെയ്യുക",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "എക്സ്പോര്‍ട്ട്‌",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "എന്‍റെ-യുബ്ലോക്ക്-സ്റ്റാറ്റിക്ക്-ഫില്‍ട്ടറുകള്‍_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "മാറ്റങ്ങള്‍ അപ്ലേ ചെയ്യുക",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "സ്ഥിര നിയമങ്ങള്‍",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "താല്‍ക്കാലിക നിയമങ്ങള്‍",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "റിവേര്‍ട്ട്",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "കമ്മിറ്റ്",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "എഡിറ്റ്‌",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "സേവ്",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "കളയുക",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "ഫയലില്‍ നിന്നും ഇമ്പോര്‍ട്ട് ചെയ്യുക...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "ഫയലിലേക്ക് എക്സ്പോര്‍ട്ട്‌ ചെയ്യുക",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "എന്‍റെ-യുബ്ലോക്ക്-ഡൈനാമിക്-നിയമങ്ങള്‍_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "താങ്കളുടെ ഡൈനാമിക് ഫില്‍റ്റര്‍ നിയമങ്ങളുടെ ലിസ്റ്റ്.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "നിയമത്തിന്‍റെ സിന്‍റ്റാക്സ്‌: <code> സോര്‍സ് ഡെസ്റ്റിനേഷന്‍ ടൈപ്പ് ആക്ഷന്‍</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'> മുഴുനീള പ്രമാണം</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "അടുക്കുക:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "റൂൾ തരം",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "ഉറവിടം",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "ലക്ഷ്യസ്ഥാനം",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "യുബ്ലോക്ക്ഒ ഡിസേബിള്‍ ചെയ്യപ്പെടേണ്ട ഹോസ്റ്റ് നെയിമുകള്‍. ഒരു വരിയില്‍ ഒരു എന്‍ട്രി എന്ന രീതിയില്‍ ചേര്‍ക്കുക. ഇന്‍വാലിഡ്‌ ഹോസ്റ്റ് നെയിമുകള്‍ നിശബ്ദമായി ഇഗ്നോര്‍ ചെയ്യപെടും.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "ഇമ്പോര്‍ട്ടും കൂട്ടിചേര്‍ക്കലും ചെയ്യുക",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "എക്സ്പോര്‍ട്ട്‌",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "എന്‍റെ-യുബ്ലോക്ക്-വൈറ്റ്ലിസ്റ്റ്_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "മാറ്റങ്ങള്‍ അപ്ലേ ചെയ്യുക",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "ടൈപ്പ്",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "ഡൊമൈന്‍",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "യുആര്‍എല്‍",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "ഫില്‍ട്ടര്‍",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "എല്ലാം",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "സീനിനു പിന്നില്‍",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "നിലവിലെ ടാബ്",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "ടാബ് ഉള്ളടക്കം വീണ്ടും ലോഡുചെയ്യുക",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "DOM ഇൻസ്പെക്ടർ ടോഗിൾ ചെയ്യുക",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "പോപ്പ്അപ്പ് പാനൽ ടോഗിൾ ചെയ്യുക",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock ഉറവിട വിക്കി: ലോഗർ",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "ലോഗർ മായ്‌ക്കുക",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "ലോഗർ താൽക്കാലികമായി നിർത്തുക (ഇൻകമിംഗ് ഡാറ്റയെല്ലാം ഉപേക്ഷിക്കുക)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "ലോഗർ അൺപോസ് ചെയ്യുക",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "ലോഗർ ഫിൽട്ടറിംഗ് ടോഗിൾ ചെയ്യുക",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "ലോഗ് എന്‍ട്രി ഫില്‍ട്ടര്‍ ചെയ്യുക",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "ലോഗർ ഫിൽട്ടറിംഗ് ഓപ്ഷനുകൾ",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "അല്ല",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "തടഞ്ഞു",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "അനുവദനീയമാണ്",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "തിരുത്തപ്പെട്ടത്",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "ഒന്നാം കക്ഷി",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "തേര്‍ഡ് പാര്‍ട്ടി",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "വിശദാംശങ്ങൾ",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "ഫിൽട്ടർ ചെയ്യുക",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "ലിസ്റ്റ് ഫിൽട്ടർ ചെയ്യുക",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "ഭരണം",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "സന്ദർഭം",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "റൂട്ട് സന്ദർഭം",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "പാർട്ടിത്വം",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "തരം",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL\n",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "ഡൈനാമിക് യുആര്‍എല്‍ ഫില്‍ട്ടറിങ്ങ്",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "കോണ്‍ടെക്സ്റ്റ്:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "ടൈപ്പ്:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "സ്റ്റാറ്റിക് ഫില്‍ട്ടറിങ്ങ്",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "URL {{action}} നെറ്റ്വർക്ക് അഭ്യർത്ഥനകൾ {{type}} {{br}} ഏത് URL വിലാസം പൊരുത്തപ്പെടുന്നു {{url}} {{br}}, ഒപ്പം {{origin}}, {{br}} {{importance}} an പൊരുത്തപ്പെടുന്ന ഒഴിവാക്കൽ ഫിൽട്ടർ ഉണ്ട്.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "ബ്ലോക്ക്‌ ചെയ്യുക",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "അനുവദിക്കുക",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "ടൈപ്പ് \"{{type}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "ഏതു ടൈപ്പും",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "\"{{origin}}\"ല്‍ നിന്നും",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "എവിടെ നിന്നും",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "അങ്ങിനെ അല്ലെങ്കില്‍",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "എന്നിരുന്നാലും",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "സ്റ്റാറ്റിക് ഫില്‍ട്ടര്‍ <code>{{filter}}</code> ഇതില്‍ കണ്ടെത്തി:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "നിലവിൽ പ്രവർത്തനക്ഷമമാക്കിയ ഏതെങ്കിലും ഫിൽട്ടർ ലിസ്റ്റുകളിൽ സ്റ്റാറ്റിക് ഫിൽട്ടർ കണ്ടെത്താൻ കഴിഞ്ഞില്ല",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "ചുവടെയുള്ള മൂന്ന് നിബന്ധനകളും പാലിക്കാത്ത ലോഗർ എൻ‌ട്രികൾ സ്വപ്രേരിതമായി നിരസിക്കപ്പെടും:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "അവസാന {{input}} മിനിറ്റുകളിൽ നിന്ന് എൻട്രികൾ സംരക്ഷിക്കുക",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "ഒരു ടാബിന് പരമാവധി {{input}} പേജ് ലോഡുകൾ സംരക്ഷിക്കുക",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "ഒരു ടാബിന് പരമാവധി {{input}} എൻ‌ട്രികൾ സംരക്ഷിക്കുക",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "ലംബമായി വികസിപ്പിച്ച മോഡിൽ ഓരോ എൻട്രിക്കും {{input}} വരികൾ ഉപയോഗിക്കുക",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "നിരകൾ മറയ്‌ക്കുക:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} സമയം",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} ഫിൽട്ടർ / റൂൾ",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}}സന്ദർഭം",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} പാർട്ടിത്വം",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "പട്ടിക",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "മേശ",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "പ്ലെയിൻ",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "മാർക്ക്ഡ .ൺ",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Open",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "പുതിയ റിപ്പോർട്ട് നിർമ്മിക്കുക",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "സമാനമായ റിപോർട്ടുകൾ കാണുക",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "പ്രമാണീകരണം",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Read the documentation at <code>uBlock/wiki</code> to learn about all of uBlock Origin's features.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Questions and support",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter issues/website is broken",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Bug report",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Troubleshooting Information",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Report a filter issue",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Address of the web page:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "The web page…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pick an entry --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shows ads or ad leftovers",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Has privacy-related issues",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Malfunctions when uBlock Origin is enabled",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Opens unwanted tabs or windows",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "സ്വകാര്യതാ നയം",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "മാറ്റങ്ങളുടെ ലോഗ്",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "സോര്‍സ് കോഡ് (ജിപിഎല്‍വി3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "കോണ്‍ട്രിബ്യൂട്ടര്‍മാര്‍",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "സോഴ്സ് കോഡ്",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "വിവർത്തനങ്ങൾ",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "ലിസ്റ്റുകൾ ഫിൽട്ടർ ചെയ്യുക",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "ബാഹ്യ ഡിപൻഡൻസികൾ (GPLv3- അനുയോജ്യമാണ്):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO- യുടെ സ്വന്തം ഫിൽട്ടർ ലിസ്റ്റുകൾ ഇനിപ്പറയുന്നവയിൽ സ്വതന്ത്രമായി ഹോസ്റ്റുചെയ്യുന്നു <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "ഒരു ഫിൽട്ടർ ലിസ്റ്റ് അപ്ഡേറ്റ് ചെയ്യേണ്ടിവരുമ്പോൾ ക്രമരഹിതമായി തിരഞ്ഞെടുത്ത CDN ഉപയോഗിക്കുന്നു",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "ഫയലിലേക്ക് ബാക്അപ്",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "എന്‍റെ-യുബ്ലോക്ക്-ബാക്ക്അപ്_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "ഫയലില്‍ നിന്നും റീസ്റ്റോര്‍ ചെയ്യുക...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "ഡീഫാള്‍ട്ട് സെറ്റിംഗ്സിലേക്ക് റീസ്റ്റോര്‍ ചെയ്യുക...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "{{time}}ല്‍ ബാക്ക്അപ് ചെയ്യപ്പെട്ട ഡേറ്റ ഉപയോഗിച്ച് താങ്കളുടെ എല്ലാ സെറ്റിംഗ്സും ഓവര്‍ റൈറ്റ് ചെയ്യപ്പെടും. അതിനു ശേഷം യുബ്ലോക്ക്‌ഒ റീസ്റ്റാര്‍ട്ട്‌ ചെയ്യപ്പെടും.\n\nനിലവിലുള്ള എല്ലാ സെറ്റിങ്ങുകളും ഓവര്‍റൈറ്റ് ചെയ്യട്ടെയോ?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "ഡേറ്റ വായിക്കാന്‍ ഒക്കുന്നില്ല അല്ലെങ്കില്‍ അത് ഇന്‍വാലിഡ്‌ ആണ്",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "എല്ലാ സെറ്റിങ്ങുകളും റിമൂവ് ചെയ്യപ്പെടും. അതിനു ശേഷം യുബ്ലോക്ക്ഒ റീസ്റ്റാര്‍ട്ട്‌ ചെയ്യപ്പെടും.\n\nയുബ്ലോക്ക്ഒ-യെ ഫാക്ടറി സെറ്റിങ്ങുകളിലേക്ക് റീസെറ്റ് ചെയ്യട്ടെയോ?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "{{url}} എന്നതിലേക്ക് കണക്റ്റ് ചെയ്യാനാകുന്നില്ല",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "യുബ്ലോക്ക്ഒ: താഴെ പറയുന്ന യുആര്‍എല്‍ താങ്കളുടെ കസ്റ്റം ഫില്‍റ്ററില്‍ ചേര്‍ക്കട്ടേയോ?\n\nടൈറ്റില്‍: \"{{title}}\"\nയുആര്‍എല്‍: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "സബ്‌സ്‌ക്രൈബുചെയ്യുക",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "ഒരു മിനിറ്റ് മുന്‍പ്",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} മിനിറ്റുകള്‍ മുന്‍പ്",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "ഒരു മണിക്കൂര്‍ മുന്‍പ്",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} മണിക്കൂറുകള്‍ മുന്‍പ്",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "ഒരു ദിവസം മുന്‍പ്",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} ദിവസങ്ങള്‍ക്ക്മുന്‍പ്",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "ഡാഷ്ബോര്‍ഡ് കാണിക്കുക",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "ലോഗ്ഗര്‍ കാണിക്കുക",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "ഓഫ്",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Page blocked",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "താഴെ പറയുന്ന പേജ് ലോഡ് ചെയ്യുന്നത് യുബ്ലോക്ക് ഒറിജിന്‍ തടഞ്ഞിരിക്കുന്നു:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "ഈ ഫില്‍റ്റര്‍ കാരണം",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "പാരാമീറ്ററുകള്‍ ഇല്ലാതെ",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "ഇതില്‍ കണ്ടെത്തി:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "പിന്നിലേക്ക്‌ പോകുക",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "ഈ വിന്‍ഡോ ക്ലോസ് ചെയ്യുക",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "{{hostname}}ലേക്ക് കര്‍ശന ബ്ലോക്കിംഗ് ഡിസേബിള്‍ ചെയ്യുക",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "താല്‍ക്കാലികമായി",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "സ്ഥിരമായി",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "ക്ലൌഡ് സ്റ്റോറേജിലേക്ക് എക്സ്പോര്‍ട്ട്‌ ചെയ്യുക",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "ക്ലൌഡ് സ്റ്റോറേജില്‍ നിന്ന് ഇമ്പോര്‍ട്ട് ചെയ്യുക",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "ക്ലൗഡ് സംഭരനിയില്‍ നിന്ന് ഇറക്കുമതി ചെയ്ത് നിലവിലെ ക്രമീകരണത്തില്‍ ലയിപ്പിക്കും",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "ഈ ഉപകരണത്തിന്‍റെ പേര്:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "മുന്നറിയിപ്പ്! നിങ്ങളുടെ സ്വന്തം ഉത്തരവാദിത്തത്തിൽ ഈ നൂതന ക്രമീകരണങ്ങൾ മാറ്റുക.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "സബ്മിറ്റ്",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "മാറ്റങ്ങൾ വരുത്തു",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "റിവേര്‍ട്ട്",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "ബൈറ്റുകള്‍",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "ഫ്രെയിമിലെ ഘടകം തടയുക ...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "ഫിൽട്ടർ ലിസ്റ്റിലേക്ക് സബ്സ്ക്രൈബ് ചെയ്യുക ...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "താൽക്കാലികമായി വലിയ മീഡിയ അനുവദിക്കുക",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "ഒരു കുറുക്കുവഴി ടൈപ്പുചെയ്യുക",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "ലോക്കുചെയ്‌ത സ്ക്രോളിംഗ് ടോഗിൾ ചെയ്യുക",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "ക്ലിപ്പ്ബോർഡിലേയ്ക്ക് പകർത്തുക",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Select all",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "തടയൽ മോഡ് വിശ്രമിക്കുക",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "ഉപയോഗിച്ച സംഭരണം: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "കെ.ബി.",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "എം.ബി.",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "ജി.ബി.",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "ലോഡുചെയ്യാൻ ക്ലിക്കുചെയ്യുക",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/mr/messages.json b/src/_locales/mr/messages.json
new file mode 100644
index 0000000..9a60cc8
--- /dev/null
+++ b/src/_locales/mr/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "शेवटी, एक कार्यक्षम ब्लॉकर क्रोमियम आधारित ब्राउझरांसाठी. सीपीयू आणि मेमरी वर सोपे जातो.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "म्यूब्लॉक — डैशबोर्ड",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Warning! You have unsaved changes",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Stay here",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignore",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "सेटिंग्ज",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "तृतीय-पक्ष फिल्टर",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "आपले फिल्टर",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "माझे नियम",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "श्वेतसूची",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Shortcuts",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — लॉगर",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "माहिती",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Support",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Asset viewer",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "प्रगत सेटिंग्ज",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "क्लिक करा : या साइटसाठी म्यूब्लॉक अक्षम/सक्षम.\n\nCtrl+क्लिक करा: फक्त या पृष्ठावर म्यूब्लॉक अक्षम.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Ctrl क्लिक करा फक्त या साइटवर म्यूब्लॉक बंद करण्यासाठी.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Ctrl क्लिक करा फक्त या साइटवर म्यूब्लॉक चालू करण्यासाठी.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "विनंत्या अवरोधित",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "या पृष्ठावर",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} किंवा {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "स्थापने पासून",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "किंवा",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blocked on this page",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blocked since install",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domains connected",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "डॅशबोर्ड उघडण्यासाठी क्लिक करा",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Enter element zapper mode",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "घटक निवडक मोड प्रविष्ट करा",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "विनंती लॉग ला जा",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Report an issue on this website",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "या साइटसाठी सर्व पॉपअप अवरोधित करणे टॉगल करा",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Click to block all popups on this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Click to no longer block all popups on this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "या साइटसाठी मोठ्या माध्यम घटक अवरोधित करणे टॉगल करा",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Click to block large media elements on this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Click to no longer block large media elements on this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "या साइटसाठी कॉस्मेटिक फिल्टरिंग टॉगल करा",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Click to disable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Click to enable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Toggle the blocking of remote fonts for this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Click to block remote fonts on this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Click to no longer block remote fonts on this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Click to disable JavaScript on this site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Click to no longer disable JavaScript on this site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Pop-up windows",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Large media elements",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Cosmetic filtering",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Remote fonts",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "More",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Global rules: this column is for rules which apply to all sites.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Click to make your changes permanent.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Click to revert your changes.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "सर्व",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "चित्रे",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "तृतीय पक्ष",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "तृतीय पक्षी css/चित्रे",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "inline scripts",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1st-party scripts",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "3rd-party scripts",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "3rd-party frames",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domains connected",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} पैकी {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Version",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "निर्माण करा",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "निवडा",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "बाहेर पडा",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Preview",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "नेट फिल्टर",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "उटणे फिल्टर",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Ctrl - क्लिक करा",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "घटक अवरोधित करा",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "अवरोधित घटकाचे प्लेसहोल्डर लपवा",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "अवरोधित विनंत्यांची संख्या चिन्हावर दाखवा",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Disable tooltips",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "जेथे योग्य तेथे संदर्भ मेनू याचा वापर करा",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Color-blind friendly",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Appearance",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Theme",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Custom accent color",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Enable cloud storage support",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "I am an advanced user",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Disable pre-fetching (to prevent any connection for blocked network requests)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Disable hyperlink auditing",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Prevent WebRTC from leaking local IP addresses",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Default behavior",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "These default behaviors can be overridden on a per-site basis",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Disable cosmetic filtering",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Block media elements larger than {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Block remote fonts",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Disable JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Block CSP reports",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Uncloak canonical names",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Advanced",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Features suitable only for technical users",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "प्रगत सेटिंग्ज",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "अखेरचे पुनर्संचयित:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "अंतिम बॅकअप:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} नेटवर्क फिल्टर + {{cosmeticFilterCount}} उटणे फिल्टर :",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} वापरले {{total}} पैकी",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "स्वयं-अद्यतन फिल्टर यादी.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "आता अद्यतनित करा",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "सर्व कॅशे साफ करा",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "उटणे फिल्टरना विश्लेषित करा आणि त्यांची अंमलबजावणी करा.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "<p>हा पर्याय <a href=\"https://adblockplus.org/en/faq_internal#elemhide\">अद्ब्लोक प्लस सुसंगत &ldquo;घटक लपवणारे&rdquo; फिल्टर</a>चे विश्लेषण आणि अंमलबजावणी सक्षम करतो. हे फिल्टर मूलत: उटणे आहेत, ते वेब पृष्ठावर घटक लपवतात जें व्हिज्युअल उपद्रव असल्याचे मानण्यात येतात आणि जे निव्वळ विनंती-आधारित फिल्टरिंग इंजिनद्वारे अवरोधित करणे शक्य नाही.</p><p>हे वैशिष्ट्य सक्षम केले तर<i>म्यूब्लॉकचे</i> मेमरी पावलाचा ठसा वाढतो.</p>",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignore generic cosmetic filters",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspend network activity until all filter lists are loaded",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "उअवरोधित होस्ट यांची सूची",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "बदल लागू करा",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Built-in",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "जाहिराती",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "गोपनीयता",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "मालवेअर डोमेन",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "चिडवणाऱ्या गोष्टी",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "बहुउद्देशीय",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "विभाग , भाषा",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "सानुकूल",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Import…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "प्रति ओळ एक युआरएल. ओळी सह प्रिफिक्स &lsquo;!&rsquo; कढे दुर्लक्ष केले जाईल. अवैध युआरएल शांतपणे दुर्लक्ष केले जाईल.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "कालबाह्य",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "view content",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Last update: {{ago}}.\nClick to force an update.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Updating…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "A network error prevented the resource from being updated.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "प्रति ओळ एक फिल्टर. फिल्टर एक साधे होस्ट नावाचा असू शकतो, किंवा एक अद्ब्लोक प्लस सुसंगत फिल्टर असू शकतो. ओळी सह प्रिफिक्स &lsquo;!&rsquo; कढे दुर्लक्ष केले जाईल.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "आयात आणि समावेश करा",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "निर्यात करा",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "बदल लागू करा",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "स्थायी नियम",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "अस्थायी नियम",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "मागे जा",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Commit",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "संपादित करा",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Save",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Discard",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Import from file…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Export to file…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "List of your dynamic filtering rules.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Rule syntax: <code>source destination type action</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>full documentation</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sort:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Rule type",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Source",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destination",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "आपली होस्ट नावांची यादी ज्याचासाठी म्यूब्लॉक अक्षम केले जाईल. प्रति ओळ एक प्रविष्टी. अवैध होस्ट नावांकडे शांतपणे दुर्लक्ष केले जाईल.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "आयात आणि समावेश करा",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "निर्यात करा",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "बदल लागू करा",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "प्रकार",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "डोमेन",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "यूआरएल",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "फिल्टर",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "All",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Tabless",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Current tab",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Reload the tab content",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Toggle the DOM inspector",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Toggle the popup panel",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: The logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Clear logger",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pause logger (discard all incoming data)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Unpause logger",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Toggle logger filtering",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filter logger content",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Logger filtering options",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Not",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blocked",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "allowed",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modified",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1st-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3rd-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Details",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filter list",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Rule",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Context",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Root context",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partyness",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Type",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL rule",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Context:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Type:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Static filter",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Block",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Allow",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "type “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "any type",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "from “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "from anywhere",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "except when",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "even if",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Static filter <code>{{filter}}</code> found in:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Static filter could not be found in any of the currently enabled filter lists",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Preserve entries from the last {{input}} minutes",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preserve at most {{input}} page loads per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Preserve at most {{input}} entries per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Use {{input}} lines per entry in vertically expanded mode",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Hide columns:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Time",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/rule",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Context",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partyness",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "List",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Table",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Plain",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Open",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Create new report",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Find similar reports",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentation",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Read the documentation at <code>uBlock/wiki</code> to learn about all of uBlock Origin's features.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Questions and support",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter issues/website is broken",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Bug report",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Troubleshooting Information",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Report a filter issue",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Address of the web page:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "The web page…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pick an entry --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shows ads or ad leftovers",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Has privacy-related issues",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Malfunctions when uBlock Origin is enabled",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Opens unwanted tabs or windows",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "बदल नोंदी",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "स्त्रोत कोड (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "सहभागी",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO's own filter lists are freely hosted on the following <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "A randomly picked CDN is used when a filter list needs to be updated.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "फाइल वर बॅकअप करा...",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "फाइल पासून पुनर्संचयित करा...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "मुळापासून सुरू करा...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "आपले सर्व सेटिंग्ज ना खोडून {{time}} चा बॅकअप डेटा वापरला जाईल, आणि म्यूब्लॉक रीस्टार्ट होईल.\n\nसर्व विद्यमान सेटिंग्ज ना खोडून बॅकअप डेटा वापरावे का?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "The data could not be read or is invalid",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "आपले सर्व सेटिंग्ज पुसले जातील, आणि म्यूब्लॉक रीस्टार्ट होईल .\n\nम्यूब्लॉक ला फॉक्टोरी सेटिंग्ज ला रीसेट करावे का?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "{{url}} ला कनेक्ट करण्यात अक्षम",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Subscribe",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "a minute ago",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} minutes ago",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "an hour ago",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} hours ago",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "a day ago",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} days ago",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Show Dashboard",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Show Logger",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "off",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Page blocked",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin has prevented the following page from loading:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Because of the following filter:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "without parameters",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Found in:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Go back",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Close this window",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Disable strict blocking for {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Temporarily",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanently",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Export to cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Import from cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Import from cloud storage and merge with current settings",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "This device name:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Warning! Change these advanced settings at your own risk.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Submit",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Apply changes",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Revert",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bytes",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Block element in frame…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subscribe to filter list…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Temporarily allow large media elements",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Type a shortcut",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Toggle locked scrolling",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Copy to clipboard",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Select all",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relax blocking mode",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Storage used: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Click to load",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/ms/messages.json b/src/_locales/ms/messages.json
new file mode 100644
index 0000000..263303d
--- /dev/null
+++ b/src/_locales/ms/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Akhirnya, penyekat yang cekap. Tidak membebankan CPU dan memori.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Papanmuka",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Amaran! Anda mempunyai perubahan yang tidak disimpan",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Kekal",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Abaikan",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Tetapan",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Senarai penapis",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Penapis saya",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Peraturan saya",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Senarai putih",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Pintasan",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Catatan",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Mengenai",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Sokongan",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Pertonton aset",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Tetapan lanjut",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Klik: tutup/aktifkan uBlock₀ untuk laman web ini.\n\nCtrl+klik: tutupkan uBlock₀ pada halaman ini sahaja.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Kilk untuk nyahdayakan uBlock₀ untuk laman web ini.\n\nCtrl+klik untuk nyahdayakan uBlock₀ hanya di halaman ini.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Klik untuk mendayakan uBlock₀ untuk laman web ini.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "permintaan dihalang",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "pada halaman ini",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} atau {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "sejak dipasang",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "atau",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Disekat di halaman ini",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Disekat sejak dipasang",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domain telah dihubungkan",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Klik untuk membuka dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Masuk mod pilihan elemen",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Memasuki mod pemetik elemen",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Membuka catatan",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Laporkan masalah tentang laman web ini",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Togol penghalang untuk segala pop timbul laman ini",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Klik untuk menyekat semua pop timbul di laman ini",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Klik untuk berhenti menyekat semua pop timbul di laman ini",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Togol penghalang semua elemen media besar untuk laman ini",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Klik untuk menyekat elemen media yang besar di laman ini",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Klik untuk berhenti menyekat elemen media yang besar di laman ini",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Togol penapis kosmetik untuk laman ini",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Klik untuk mematikan penapisan kosmetik di laman ini",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Klik untuk mengaktifkan penapisan kosmetik di laman ini",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Togol menyekat fon terpencil untuk laman web ini",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Klik untuk menyekat fon jauh di laman ini",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Klik untuk berhenti menyekat fon jauh di laman ini",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Klik untuk hilangkan keupayaan JavaScript di halaman ini",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Klik untuk berhenti hilangkan keupayaan JavaScript di halaman ini",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Tetingkap pop timbul",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Unsur-unsur media besar",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Tapisan kosmetik",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Fon terpencil",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Lagi",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Kurangkan",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Peraturan global: lajur ini adalah untuk peraturan yang dikuatkuasakan untuk semua laman.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Peraturan tempatan: lajur ini adalah untuk peraturan yang dikuatkuasakan untuk laman semasa sahaja.\nPeraturan tempatan menolak peraturan global.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Klik untuk membuat perubahan anda kekal.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Klik untuk memungkiri perubahan anda.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "semua",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "gambar",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "pihak ketiga",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/imej pihak ketiga",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "Skrip dalam ayat",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "Skrip parti pertama",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "Skrip parti ke-3",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "Kerangka parti ke-3",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "Domain telah dihubungkan",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} daripada {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Versi",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Cipta",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Pilih",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Keluar",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Preview",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Penapis network",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Penapis Kosmetik",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Klik, Ctrl-klik",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Halang elemen",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Sembunyikan simbol unsur-unsur yang disekat",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Tunjukkan nombor permintaan yang disekat di atas ikon",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Menutupkan mesej bantuan",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Gunakan menu konteks yang sesuai",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Mesra buta warna",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Appearance",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Custom accent color",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Membolehkan sokongan storan awangan",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Saya adalah pengguna mahir (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>memerlukan pembacaan</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Lumpuhkan pra-ambilan (untuk mengelakkan apa-apa sambungan untuk permintaan rangkaian yang disekat)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Nyahaktifkan pengauditan hiperpautan",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Mencegah WebRTC dari membocorkan alamat IP tempatan",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Kelakuan lalai",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Tingkah laku lalai ini boleh diatasi secara per-halaman",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Lumpuhkan tapisan kosmetik",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Sekat unsur-unsur media yang lebih besar dari {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Sekat fon terpencil",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Lumpuhkan JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Sekat laporan CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Mendedahkan nama kanonik",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Lanjutan",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Features suitable only for technical users",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "tetapan lanjutan",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Pemulihan lalu:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Sandaran lalu:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} penapis rangkaian + {{cosmeticFilterCount}} penapis kosmetik dari:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} digunakan dari {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Kemas kini auto senarai tapisan",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Kemas kini sekarang",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Bersihkan semua cache",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Hurai dan kuatkuasakan tapisan kosmetik",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Penapis kosmetik berkhidmat untuk menyembunyikan unsur-unsur dalam laman web yang disifatkan sebagai suatu gangguan visual, dan yang tidak mampu disekat oleh enjin tapisan berasaskan permintaan rangkaian.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Abaikan penapis kosmetik generik",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Penapis kosmetik generik adalah penapis kosmetik itu mengubah kesemua laman web. Mendayakan tetapan ini akan mengurangkan penggunaan memori dan overhed CPU dari laman web sebagai hasil pengendalian penapis kosmetik generik.\n\nIa disyorkan untuk mengaktifkan tetapan ini untuk peranti yang lemah.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Gantung aktiviti rangkaian sehingga semua senarai penapis dimuatkan",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Terapkan perubahan",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Terbina dalam",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Iklan",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privasi",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Domain perisian hasad",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Kejengkelan",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Pelbagai guna",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Wilayah, bahasa",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Tersuai",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Import...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Satu URL per garisan. URL yang tidak sah akan diabaikan secara senyap.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Usang.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "melihat kandungan",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Kemaskini terakhir: {{ago}}.\nKlik untuk memaksa kemas kini.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Sedang mengemaskini...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Ralat rangkaian menghalang sumber dikemas kini..",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Satu penapis setiap baris. Penapis boleh menjadi nama hos biasa, atau penapis yang sesuai dengan Daftar Mudah. Garis yang diawali dengan <code>! </code> akan diabaikan.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Import dan melampirkan",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Eksport",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filter _ {{datetime}}. txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Terapkan perubahan",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Peraturan kekal",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Peraturan sementara",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Bebalik",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Keterikatan",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Edit",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Simpan",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Batal",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Import dari fail...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Eksport ke fail",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt\n",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Senaraikan peraturan penapisan dinamik anda.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Sintaks peraturan: <code> tindakan jenis tujuan sumber </code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'> dokumentasi lengkap </a> ).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Susun:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Jenis peraturan",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Sumber",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destinasi",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Arahan laman web yang dipercayai menentukan halaman web mana uBlock Origin harus dilumpuhkan. Satu penyertaan setiap baris. Arahan tidak sah akan diam-diam diabaikan dan dikomentari.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Import dan melampirkan",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Eksport",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt\n",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Terapkan perubahan",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Jenis",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domain",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Penapis",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Semua",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Tanpa tab",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Tab semasa",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Muat semula kandungan tab",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Togol pemeriksa DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Togol panel pop timbul",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: Catatan",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Kosongkan catatan",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Jedakan catatan (singkirkan semua data masuk)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Nyahjeda catatan",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Togol penapis catatan",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "tapis kandungan catatan",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Pilihan tapisan catatan",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Bukan",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "disekat",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "dibenarkan",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "diubah suai",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "pihak pertama",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "pihak ketiga",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Butiran",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Penapis",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Senarai tapisan",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Peraturan",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Konteks",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Konteks akar",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partyness",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Jenis",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Aturan URL",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Konteks:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Jenis:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Penapis statik",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} permintaan rangkaian {{type}} {{br}} alamat URL yang sesuai dengan {{url}} {{br}} dan mana yang berasal {{origin}}, {{br}} {{kepentingan} } ada penapis pengecualian yang sepadan.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Sekat",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Benarkan",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "jenis “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "pelbagai jenis",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "dari “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "dari mana-mana ",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "kecuali bila",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "walaupun",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Penapis statik <code> {{filter}} </code> terdapat di:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Penapis statik tidak dapat dijumpai dalam daftar penapis yang diaktifkan sekarang",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Entri logger yang tidak memenuhi ketiga-tiga syarat di bawah akan dibuang secara automatik:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Simpan entri dari {{input}} minit terakhir",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Simpan paling banyak {{input}} pemuatan halaman setiap tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Simpan paling banyak {{input}} entri setiap tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Gunakan baris {{input}} setiap entri dalam mod yang diluaskan secara menegak",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Sembunyikan lajur:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Masa",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Tapis / peraturan",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Konteks",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Kesopanan",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Senarai",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Jadual",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Kosong",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Penurunan harga",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Buka",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Cipta laporan baru",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Cari laporan yang serupa",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Pendokumenan",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Baca pendokumenan di <code>uBlock/wiki</code> untuk belajar tentang kesemua ciri-ciri uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Soalan dan sokongan",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Menjawab soalan dan pelbagai sokongan disediakan di subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Masalah penapisan/laman web rosak",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Laporkan masalah penapisan di laman web tertentu di <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> pengesan masalah</span>. Memerlukan akaun GitHub.",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Penting:</b> Elakkan menggunakan penyekat-penyekat lain yang serupa dengan uBlock Origin, kerana ia menimbulkan masalah penapis di laman web tertentu.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tip:</b> Pastikan senarai penapis kamu dikemaskinikan <span data-url=\"logger-ui.html#_\">\tPencatat</span> adalah peralatan utama untuk memeriksa masalah yang berkaitan penapis.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Laporan pepijat",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Laporkan masalah dengan uBlock Origin sendiri ke <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> pengesan masalah</span>. Memerlukan akaun GitHub.",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Informasi Pencarisilapan",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Berikut adalah maklumat teknikal yang mungkin berguna ketika sukarelawan berusaha membantu anda menyelesaikan masalah.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Penting:</b>Maklumat yang bersifat sensitif dan peribadi dihitamkan secara lalai. Maklumat yang dihitamkan berkemungkinan sukar untuk menyelesaikan masalah. ",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Laporkan masalah berkaitan penapis",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Untuk menggelakkan bebanan penyumbang dengan laporan pendua, sila mengesahkan bahawa isu itu belum dilaporkan.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Alamat laman web:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Laman web...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pilih entri --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Tunjuk iklan dan baki iklan tertinggal",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Mempunyai panel dan gangguan lain",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Mengesan uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Mempunyai masalah berkaitan privasi",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Rosak pabila uBlock Origin didayakan",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Membuka tab atau tetingkap yang tidak diingini",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Labelkan laman web itu sebagai \"NSFW\" (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Hitamkan",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Nyahhitamkan",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Dasar privasi",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Catatan perubahan",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Kod sumber (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Penyumbang",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Kod sumber",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Terjemahan",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Senarai penapis",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Pergantungan luaran (serasi dengan GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Senarai penapis uBO sendiri dihoskan secara bebas di <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "CDN yang dipilih secara rawak digunakan apabila senarai penapis perlu dikemas kini",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Sandarkan ke fail",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt\n",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Pulihkan dari fail ...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Tetapkan semula ke tetapan lalai ...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Semua tetapan anda akan ditimpa menggunakan data yang disandarkan pada {{time}}, dan uBlock₀ akan dimulakan semula.\n\nMenimpa semua tetapan yang ada menggunakan data yang disandarkan?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Data tidak dapat dibaca atau tidak sah",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Semua tetapan anda akan dikeluarkan, dan uBlock₀ akan dimulakan semula.\n\nTetapkan semula uBlock₀ ke tetapan kilang?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Ralat rangkaian: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Tambahkan URL berikut ke senarai penapis tersuai anda?\n\nTajuk: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Langgan",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "seminit yang lalu",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} minit yang lalu",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "satu jam yang lalu",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} jam yang lalu",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "sehari yang lalu",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} hari yang lalu",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Tunjukkan Papan Pemuka",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Tunjukkan Pencatat",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "mati",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Halaman disekat",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin menghalang halaman berikut memuatkan:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Kerana penapis berikut:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "tanpa parameter",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Dijumpai di:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Kembali",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Tutup tetingkap ini",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Jangan beri amaran kepada saya lagi tentang laman web ini",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Lumpuhkan sekatan ketat untuk {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Sementara",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Kekal",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Teruskan",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Eksport ke storan awan",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Import dari storan awan",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Import dari storan awan dan gabungkan dengan tetapan semasa",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Nama peranti ini:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Amaran! Ubah tetapan lanjutan ini dengan risiko anda sendiri.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Hantar",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Terapkan perubahan",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Membalikkan",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bait",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Blok elemen dalam bingkai ...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Langgan ke senarai tapisan...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Biarkan sementara elemen media besar",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Taipkan jalan pintas",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Togol tatal terkunci",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Salin ke papan keratan",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Pilih semua",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Togol penapis kosmetik",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Tenang mod menyekat",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Storan yang digunakan: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Klik untuk memuatkan",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/nb/messages.json b/src/_locales/nb/messages.json
new file mode 100644
index 0000000..811ab77
--- /dev/null
+++ b/src/_locales/nb/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Endelig en effektiv blokkeringsutvidelse. Lavt CPU- og minnebruk.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Dashbord",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Advarsel! Du har ulagrede endringer",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Bli her",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignorer",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Innstillinger",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filterlister",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Mine filtre",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Mine regler",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Betrodde sider",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Snarveier",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Logg",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Om",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Brukerstøtte",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Ressursviser",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Avanserte innstillinger",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Klikk: Deaktiver/aktiver uBlock₀ for dette nettstedet.\n\nCtrl+klikk: Deaktiver uBlock₀ bare på denne siden.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Klikk for å deaktivere uBlock₀ for dette nettstedet.\n\nCtrl+klikk for å deaktivere uBlock₀ bare på denne siden.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Klikk for å aktivere uBlock₀ for dette nettstedet.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "forespørsler blokkert",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "på denne siden",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "siden installering",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "eller",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blokkert på denne siden",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blokkert siden installering",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domener tilkoblet",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Åpne dashbordet",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Gå til element­fjernings­modus",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Gå til element­velger­modus",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Åpne loggen",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Rapporter om problem på dette nettstedet",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Slå av/på blokkering av alle oppspretts-vinduer for dette nettstedet",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Klikk for å blokkere alle oppspretts-vinduer på dette nettstedet",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Klikk for å ikke lenger blokkere alle oppspretts-vinduer på dette nettstedet",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Slå av/på blokkering av store mediaelementer for dette nettstedet",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Klikk for å blokkere store mediaelementer på dette nettstedet",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Klikk for å ikke lenger blokkere store mediaelementer på dette nettstedet",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Slå av/på kosmetisk filtrering for dette nettstedet",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Klikk for å slå av kosmetisk filtrering på dette nettstedet",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Klikk for å slå på kosmetisk filtrering på dette nettstedet",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Slå av/på blokkering av eksterne skrifttyper for dette nettstedet",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Klikk for å blokkere eksterne skrifttyper på dette nettstedet",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Klikk for å ikke lenger blokkere eksterne skrifttyper på dette nettstedet",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Klikk for å slå av JavaScript på dette nettstedet",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Klikk for å ikke lenger slå av JavaScript på dette nettstedet",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Oppspretts-vinduer",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Store media­elementer",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Kosmetisk filtrering",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Eksterne skrifttyper",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Mer",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Mindre",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Globale regler: Denne kolonnen er for regler som gjelder alle nettsteder.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Lokale regler: Denne kolonnen er for regler som bare gjelder for det gjeldende nettstedet.\nLokale regler har prioritet foran globale regler.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Klikk for å gjøre endringer permanente.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Klikk for å tilbakestille endringer.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "alle",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "bilder",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "tredjepart",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "tredjeparts CSS/bilder",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "integrerte skript",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "førsteparts skript",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "tredjeparts skript",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "tredjeparts rammer",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domener tilkoblet",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} av {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Versjon",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "skript",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "ramme",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Opprett",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Velg",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Avslutt",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Forhåndsvis",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Nettfiltre",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Kosmetiske filtre",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Klikk, Ctrl-klikk",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Blokker element…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Skjul blokkerte elementers plassholdere",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Vis antall blokkerte forespørsler på ikonet",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Deaktiver hjelpetekst (verktøytips)",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Gjør bruk av høyreklikkmeny der det er hensiktsmessig",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Fargeblind-vennlig",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Utseende",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Tilpasset aksentfarge",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Aktiver støtte for nettlagring",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Jeg er en avansert bruker",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Deaktiver forhåndshenting (for å hindre enhver tilkobling for blokkerte nettverksforespørsler)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Deaktiver lenkesporing",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Hindre WebRTC i å lekke lokale IP-adresser",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Standard virkemåte",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Disse standard virkemåtene kan overstyres for hvert enkelt nettsted",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Deaktiver kosmetisk filtrering",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Blokker mediaelementer større enn {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Blokker eksterne skrifttyper",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Deaktiver JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Blokker CSP-rapporter",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "CNAME-avdekking",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Avansert",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Funksjoner kun egnet for tekniske brukere",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "Avanserte innstillinger",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Siste gjenoppretting:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Siste sikkerhetskopi:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} nettverksfiltre + {{cosmeticFilterCount}} kosmetiske filtre fra:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} brukt av {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Automatisk oppdatering av filterlister",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Oppdater nå",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Tøm alle hurtigbuffere",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Analyser og bruk kosmetiske filtre",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Kosmetiske filtre tjener den hensikt å skjule elementer i en nettside som anses for å være en visuell ulempe, og som ikke blokkeres av de nettverkforespørselsbaserte filtreringsmotorene.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignorer generelle kosmetiske filtre",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generelle kosmetiske filtre er de kosmetiske filtrene som er ment å brukes på alle nettsteder. Aktivering av dette alternativet vil eliminere ekstra minne- og prosessorbruk på nettsider grunnet håndteringen av generelle kosmetiske filtre.\n\nDet anbefales å aktivere dette alternativet på mindre kraftige enheter.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Stans nettverksaktivitet inntil alle filterlister er lastet",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Bruk endringer",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Innebygd",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Reklame",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Personvern",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Beskyttelse mot skadelig programvare, sikkerhet",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Irritasjonsmomenter",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multi-formål",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regioner, språk",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Egendefinert",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importer…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "En nettadresse per linje. Ugyldige nettadresser ignoreres stille.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Utgått på dato",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "Vis innhold",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Siste oppdatering: {{ago}}.\nKlikk for å framtvinge en oppdatering.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Oppdaterer…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "En nettverksfeil forhindret ressursen i å bli oppdatert.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Ett filter per linje. Et filter kan være et vanlig vertsnavn eller et EasyList-kompatibelt filter. Linjer med prefikset <code>!</code> blir ignorert.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Ikke legg til filtre fra ikke-betrodde kilder.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importer og legg til…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Eksporter…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "mine-ublock-statiske-filtre_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Bruk endringer",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Permanente regler",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Midlertidige regler",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Tilbakestill",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Send",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Rediger",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Lagre",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Forkast",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importer fra fil…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Eksporter til fil…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "mine-ublock-dynamiske-regler_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Liste over dine dynamiske filtreringsregler.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Regelsyntaks: <code>kilde destinasjon type handling</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>full dokumentasjon</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sorter:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Regeltype",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Kilde",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destinasjon",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Direktivene for betrodde sider bestemmer hvilke nettsider uBlock Origin ikke skal være aktiv på. Én oppføring per linje.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importer og legg til…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Eksporter…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "mine-ublock-betrodde-sider_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Bruk endringer",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Type",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domene",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "Nettadresse",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Alle",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Faneløs",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Gjeldende fane",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Last faneinnholdet på nytt",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Slå av/på DOM-inspektør",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Slå av/på oppsprettspanelet",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: Loggen",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Tøm loggen",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Sett loggen i pausemodus (forkast alle innkommende data)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Gjenoppta logging",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Slå av/på loggfiltrering",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtrer logginnhold",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Alternativer for loggfiltrering",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Ikke",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "hendelsesrik",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blokkert",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "tillatt",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "endret",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "førstepart",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "tredjepart",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Detaljer",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filterliste",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Regel",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Kontekst",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Rotkontekst",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partsrelasjon",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Type",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "Nettadresse",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Nettadresseregel",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Kontekst:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Type:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Statisk filter",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} nettverksforespørsler av {{type}} {{br}}som matcher nettadressen {{url}} {{br}}og som stammer {{origin}},{{br}}{{importance}} det er et matchende unntaksfilter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Blokker",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Tillat",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "type “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "enhver type",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "fra “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "fra hvor som helst",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "unntatt når",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "selv om",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Statisk filter <code>{{filter}}</code> funnet i:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Statisk filter ble ikke funnet i noen av filterlistene som er aktiverte nå",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Loggoppføringer som ikke oppfyller alle tre betingelser nedenfor blir automatisk forkastet:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Bevar oppføringer fra de siste {{input}} minuttene",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Bevar maksimalt {{input}} sideinnlastinger per fane",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Bevar maksimalt {{input}} oppføringer per fane",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Bruk {{input}} linjer per oppføring i vertikalt utvidet modus",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Skjul kolonner:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Tid",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/regel",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Kontekst",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partsrelasjon",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Liste",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabell",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Uformatert",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Åpne",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Opprett ny rapport",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Finn lignende rapporter",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentasjon",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Les dokumentasjonen på <code>uBlock/wiki</code> for å lære om alle uBlock Origins funksjoner.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Spørsmål og brukerstøtte",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Svar på spørsmål og andre typer hjelp er gitt på subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filterproblemer/nettside defekt",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Rapporter filterproblemer med bestemte nettsteder til <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> problemsporing</span>. <u>Krever en GitHub-konto.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Viktig:</b> Unngå å bruke andre blokkerere med lignende formål sammen med uBlock Origin, da dette kan forårsake filterproblemer på bestemte nettsteder.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Sørg for at filterlistene dine er oppdaterte. <span data-url=\"logger-ui.html#_\">Loggen</span> er primærverktøyet for å diagnostisere filterrelaterte problemer.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Feilrapport",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Rapporter problemer med selve uBlock Origin til <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> problemsporing</span>. <u>Krever en GitHub-konto.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Problemløsingsinformasjon",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Nedenfor er teknisk informasjon som kan være nyttig når frivillige prøver å hjelpe deg med å løse et problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Viktig:</b> Potensielt privat eller sensitiv informasjon blir redigert som standard. Redigert informasjon kan gjøre det vanskeligere å løse et problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Rapporter om filterproblem",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "For å unngå å belaste frivillige med duplikate rapporter, kontroller at problemet ikke allerede er rapportert.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filterlister oppdateres daglig. Forsikre deg om at problemet ikke har blitt løst allerede i de nyeste filterlistene.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verifiser at problemet fremdeles eksisterer etter å ha lastet den problematiske nettsiden på nytt.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Nettsidens adresse:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Nettsiden…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Velg en type --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Viser reklame eller reklamerester",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Har overlegg eller andre ulemper",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detekterer uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Har personvernrelaterte problemer",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Fungerer ikke riktig når uBlock Origin er aktivert",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Åpner uønskede faner eller vinduer",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Merk nettsiden som “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>) (advarsel mot sider med upassende innhold)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Rediger",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Ikke rediger",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Personvernpraksis",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Endringslogg",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Kildekode (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Bidragsytere",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Kildekode",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Oversettelser",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filterlister",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Eksterne avhengigheter (GPLv3-kompatible):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBlock Origins egne filterlister finnes fritt tilgjengelig hos følgende <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN-er</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "En tilfeldig valgt CDN blir brukt når en filterliste trenger å bli oppdatert.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Sikkerhetskopier til fil…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "min-ublock-sikkerhetskopi_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Gjenopprett fra fil…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Tilbakestill til standardinnstillinger…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Alle dine innstillinger vil bli overskrevet med data sikkerhetskopiert {{time}}, og uBlock₀ vil starte på nytt.\n\nOverskrive alle eksisterende innstillinger med sikkerhetskopierte data?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Dataene kunne ikke leses eller er ugyldige",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Alle dine innstillinger blir fjernet, og uBlock₀ vil starte på nytt.\n\nTilbakestille uBlock₀ til opprinnelige innstillinger?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Nettverksfeil: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Legge til følgende nettadresse i din egendefinerte filterliste?\n\nTittel: \"{{title}}\"\nNettadresse: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Abonner",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "et minutt siden",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} minutter siden",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "en time siden",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} timer siden",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "en dag siden",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} dager siden",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Vis dashbord",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Vis logg",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "av",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Side blokkert",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin har forhindret lasting av følgende side:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "På grunn av følgende filter:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "uten parametere",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Funnet i:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Gå tilbake",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Lukk dette vinduet",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Ikke varsle igjen om dette nettstedet",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Slå av streng (fullstendig) blokkering for {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Midlertidig",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanent",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Fortsett",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Eksporter til nettlagring",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importer fra nettlagring",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importer fra nettlagring og slå sammen med gjeldende innstillinger",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Denne enhets navn:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Advarsel! Endringer av de avanserte innstillingene skjer på eget ansvar.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Send",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Bruk endringer",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Tilbakestill",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bytes",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Blokker element i ramme…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Abonner på filterliste…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Tillat store mediaelementer midlertidig",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Vis kildekode…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Oppfør en snarvei",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Slå av/på låst rulling",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopier til utklippstavle",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Merk alt",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Slå av/på kosmetisk filtrering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Lemp på blokkeringsmodus",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Brukt lagringsplass: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Klikk for å laste",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Feil: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Kan ikke filtrere riktig ved nettleseroppstart. Last siden på nytt for å sikre riktig filtrering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/nl/messages.json b/src/_locales/nl/messages.json
new file mode 100644
index 0000000..8c50f79
--- /dev/null
+++ b/src/_locales/nl/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Eindelijk, een efficiënte adblocker. Gebruikt weinig processorkracht en geheugen.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ – Dashboard",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Waarschuwing! Niet-opgeslagen wijzigingen",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Hier blijven",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Negeren",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Instellingen",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filterlijsten",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Mijn filters",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Mijn regels",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Vertrouwde websites",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Sneltoetsen",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ – Logger",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Over",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Ondersteuning",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ – Middelenviewer",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Geavanceerde instellingen",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Klikken: uBlock₀ voor deze website in- of uitschakelen.\n\nCtrl+klikken: uBlock₀ alleen voor deze pagina uitschakelen.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Klik om uBlock₀ voor deze website uit te schakelen.\n\nCtrl+klik om uBlock₀ alleen op deze pagina uit te schakelen.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Klik om uBlock₀ voor deze website in te schakelen.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "geblokkeerde aanvragen",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "op deze pagina",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "sinds installatie",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "of",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Geblokkeerd op deze pagina",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Geblokkeerd sinds installatie",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Verbonden domeinen",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Dashboard openen",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Element­wisser­modus openen",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Element­kiezer­modus openen",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Logger openen",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Een probleem op deze website melden",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Alle pop-ups voor deze website in-/uitschakelen",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Klik om alle pop-ups op deze website te blokkeren",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Klik om alle pop-ups op deze website niet meer te blokkeren",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Grote media-elementen voor deze website in-/uitschakelen",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Klik om grote media-elementen op deze website te blokkeren",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Klik om grote media-elementen op deze website niet meer te blokkeren",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Cosmetische filters voor deze website in-/uitschakelen",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Klik om cosmetische filters op deze website uit te schakelen",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Klik om cosmetische filters op deze website in te schakelen",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Blokkeren van externe lettertypen voor deze website in-/uitschakelen",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Klik om externe lettertypen op deze website te blokkeren",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Klik om externe lettertypen op deze website niet meer te blokkeren",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Klik om JavaScript op deze website uit te schakelen",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Klik om JavaScript op deze website niet meer uit te schakelen",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Pop-upvensters",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Grote media-elementen",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Cosmetische filters",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Externe lettertypen",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Meer",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Minder",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Algemene regels: deze kolom is voor regels die op alle websites van toepassing zijn.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Lokale regels: deze kolom is voor regels die alleen op de huidige website van toepassing zijn.\nLokale regels hebben voorrang op algemene regels.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Klik om uw wijzigingen permanent te maken.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Klik om uw wijzigingen ongedaan te maken.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "alles",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "afbeeldingen",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "van derden",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/afbeeldingen van derden",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "inline scripts",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "scripts van de webpagina",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "scripts van derden",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "frames van derden",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "verbonden domeinen",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} van {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Versie",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Aanmaken",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Kiezen",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Afsluiten",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Voorbeeld",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Netwerkfilters",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Cosmetische filters",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Klik, Ctrl-klik",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Element blokkeren…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Aanduidingen van geblokkeerde elementen verbergen",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Het aantal geblokkeerde aanvragen op het pictogram tonen",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Tooltips uitschakelen",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Contextmenu gebruiken waar mogelijk",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Vriendelijk voor kleurenblinden",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Vormgeving",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Thema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Aangepaste accentkleur",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Ondersteuning voor cloudopslag inschakelen",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Ik ben een ervaren gebruiker",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Vooraf ophalen uitschakelen (om verbindingen voor geblokkeerde netwerkaanvragen te voorkomen)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Hyperlink auditing uitschakelen",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Het lekken van lokale IP-adressen via WebRTC voorkomen",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Standaardgedrag",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Van deze standaardgedragingen kan per website worden afgeweken",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Cosmetische filters uitschakelen",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Media-elementen groter dan {{input}} KB blokkeren",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Externe lettertypen blokkeren",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "JavaScript uitschakelen",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "CSP-rapporten blokkeren",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Canonieke namen onthullen",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Geavanceerd",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Alleen voor technische gebruikers geschikte functies",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "geavanceerde instellingen",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Laatste terugzetactie:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Laatste back-up:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} netwerkfilters + {{cosmeticFilterCount}} cosmetische filters van:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} van de {{total}} gebruikt",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Filterlijsten automatisch bijwerken",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Nu bijwerken",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Alle caches legen",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Cosmetische filters inlezen en toepassen",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Cosmetische filters dienen voor het verbergen van elementen in een webpagina die visueel storend kunnen zijn en niet door de op netwerkaanvragen gebaseerde filter-engines kunnen worden geblokkeerd.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Algemene cosmetische filters negeren",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Algemene cosmetische filters zijn die cosmetische filters die zijn bedoeld om op alle websites te worden toegepast. Het inschakelen van deze optie elimineert de aan webpagina’s toegevoegde geheugen- en cpu-overhead als gevolg van het verwerken van algemene cosmetische filters.\n\nHet wordt aanbevolen deze optie op minder krachtige apparaten in te schakelen.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Netwerkactiviteit onderbreken totdat alle filterlijsten zijn geladen",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lijst van geblokkeerde hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Wijzigingen toepassen",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Ingebouwd",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Advertenties",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacy",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Bescherming tegen malware, beveiliging",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Storende elementen",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multifunctioneel",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Gebieden, talen",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Aangepast",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importeren…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Eén URL per regel. Ongeldige URL’s worden zonder mededeling genegeerd.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Verouderd.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "inhoud weergeven",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Laatst bijgewerkt: {{ago}}.\nKlik om een update af te dwingen.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Bijwerken…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Een netwerkfout heeft voorkomen dat de bron werd bijgewerkt.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Eén filter per regel. Een filter kan een gewone hostnaam of een EasyList-compatibel filter zijn. Regels beginnend met <code>!</code> worden genegeerd.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Voeg geen filters van niet-vertrouwde bronnen toe.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importeren en toevoegen…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Exporteren…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "mijn-ublock-statische-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Wijzigingen toepassen",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Permanente regels",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Tijdelijke regels",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Terugzetten",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Vastleggen",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Bewerken",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Opslaan",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Annuleren",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importeren uit bestand…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Exporteren naar bestand…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "mijn-ublock-dynamische-regels_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Lijst van uw dynamische filterregels.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Regelsyntaxis: <code>bron bestemming type actie</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>volledige documentatie</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sorteren:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Regeltype",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Bron",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Bestemming",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "De vertrouwde-website-instructies schrijven voor op welke webpagina’s uBlock Origin dient te worden uitgeschakeld. Eén vermelding per regel.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importeren en toevoegen…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Exporteren…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "mijn-ublock-vertrouwde-websites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Wijzigingen toepassen",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Type",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domein",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Alles",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Achter de schermen",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Huidige tabblad",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "De tabbladinhoud vernieuwen",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "De DOM-inspector in-/uitschakelen",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Het pop-uppaneel in-/uitschakelen",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin-wiki: de logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Logger wissen",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Logger pauzeren (alle inkomende gegevens negeren)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Logger hervatten",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Loggerfiltering in-/uitschakelen",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "loggerinhoud filteren",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Opties voor loggerfiltering",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Niet",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "afwisselend",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "geblokkeerd",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "toegestaan",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "aangepast",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "huidige domein",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "van derden",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Details",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filterlijst",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Regel",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Context",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Hoofdcontext",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "1e/3e partij",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Type",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL-regel",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Context:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Type:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Statisch filter",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "Netwerkaanvragen van {{type}} {{action}}{{br}}waarvan de URL overeenkomt met {{url}} {{br}}en die {{origin}} afkomstig zijn,{{br}}{{importance}} er een overeenkomstig uitzonderingsfilter bestaat.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "blokkeren",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "toestaan",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "type ‘{{type}}’",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "alle typen",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "van ‘{{origin}}’",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "van overal",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "behalve wanneer",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "zelfs als",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Statisch filter <code>{{filter}}</code> gevonden in:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Statisch filter kon niet in een van de momenteel ingeschakelde filterlijsten worden gevonden",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Loggervermeldingen die niet aan alle drie de onderstaande voorwaarden voldoen, worden automatisch genegeerd:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Vermeldingen van de laatste {{input}} minuten behouden",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Maximaal {{input}} paginalaadacties per tabblad behouden",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Maximaal {{input}} vermeldingen per tabblad behouden",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "{{input}} regels per vermelding in verticaal uitgevouwen modus gebruiken",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Kolommen verbergen:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Tijd",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/regel",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Context",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} 1e/3e partij",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Lijst",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabel",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Plat",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Openen",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Nieuwe melding maken",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Soortgelijke meldingen zoeken",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentatie",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Lees de documentatie op <code>uBlock/wiki</code> voor meer info over alle functies van uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Vragen en ondersteuning",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Antwoorden op vragen en andere soorten ondersteuning worden geleverd op de subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filterproblemen/website werkt niet",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Meld filterproblemen met specifieke websites in de <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code>-probleemtracker</span>. <u>Vereist een GitHub-account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Belangrijk:</b> vermijd het gebruik van andere adblockers voor dezelfde doeleinden in combinatie met uBlock Origin, omdat dit op bepaalde websites problemen kan geven.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> zorg ervoor dat uw filterlijsten up-to-date zijn. <span data-url=\"logger-ui.html#_\">De logger</span> is het primaire hulpmiddel voor het analyseren van filtergerelateerde problemen.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Bugmelding",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Meld problemen met uBlock Origin zelf in de <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code>-probleemtracker</span>. <u>Vereist een GitHub-account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Probleemoplossingsinformatie",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Hieronder bevindt zich technische informatie die handig kan zijn wanneer vrijwilligers u proberen te helpen bij het oplossen van een probleem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Belangrijk:</b> mogelijk gevoelige of privégegevens worden standaard geredigeerd. Geredigeerde gegevens kunnen het oplossen van een probleem bemoeilijken.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Een filterprobleem melden",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Controleer of het probleem niet eerder is gemeld om te voorkomen dat vrijwilligers met dubbele meldingen worden belast.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filterlijsten worden dagelijks bijgewerkt. Controleer of uw probleem niet al in de meest recente filterlijsten is verholpen.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Controleer of het probleem nog steeds bestaat na vernieuwen van de problematische webpagina.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Adres van de webpagina:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "De webpagina…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Maak een keuze --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Toont advertenties of restanten",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Heeft overlappingen of andere ongemakken",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detecteert uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Heeft privacy-gerelateerde problemen",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Werkt niet als uBlock Origin is ingeschakeld",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Opent ongewenste tabbladen of vensters",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "De webpagina labelen als ‘NSFW’ (<a href=\"https://nl.wikipedia.org/wiki/NSFW\">‘Not Safe For Work’</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redigeren",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Redigeren ongedaan maken",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacybeleid",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Wijzigingenlogboek",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Broncode (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Medewerkers",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Broncode",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Vertalingen",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filterlijsten",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Externe afhankelijkheden (GPLv3-compatibel):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO’s eigen filterlijsten zijn gratis beschikbaar op de volgende <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN’s</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Als een filterlijst moet worden bijgewerkt, wordt een willekeurig gekozen CDN gebruikt.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Back-up maken naar bestand…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "mijn-ublock-back-up_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Terugzetten uit bestand…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Standaardinstellingen terugzetten…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Al uw instellingen zullen met back-upgegevens van {{time}} worden overschreven, en uBlock₀ zal worden herstart.\n\nWilt u alle bestaande instellingen met back-upgegevens overschrijven?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "De gegevens konden niet worden gelezen of zijn ongeldig",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Al uw instellingen zullen worden verwijderd, waarna uBlock₀ wordt herstart.\n\nStandaardinstellingen van uBlock₀ terugzetten?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Netwerkfout: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "De volgende URL aan uw lijsten met aangepaste filters toevoegen?\n\nTitel: ‘{{title}}’\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Abonneren",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "een minuut geleden",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} minuten geleden",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "een uur geleden",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} uur geleden",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "een dag geleden",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} dagen geleden",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Dashboard tonen",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Logger tonen",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "uitgeschakeld",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Pagina geblokkeerd",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin heeft het laden van de volgende pagina voorkomen:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "vanwege het volgende filter:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "zonder parameters",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Gevonden in:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Teruggaan",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Dit venster sluiten",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Mij niet meer waarschuwen over deze website",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Strenge blokkering voor {{hostname}} uitschakelen",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Tijdelijk",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanent",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Doorgaan",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Exporteren naar cloudopslag",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importeren uit cloudopslag",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importeren uit cloudopslag en samenvoegen met huidige instellingen",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Naam van dit apparaat:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Waarschuwing! Wijzig deze geavanceerde instellingen op eigen risico.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Verzenden",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Wijzigingen toepassen",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Ongedaan maken",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bytes",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Element in frame blokkeren…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Abonneren op filterlijst…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Grote media-elementen tijdelijk toestaan",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Broncode weergeven…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Typ een sneltoets",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Vergrendeld scrollen in-/uitschakelen",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopiëren naar klembord",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Alles selecteren",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Cosmetische filters in-/uitschakelen",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Blokkeringsmodus beperken",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Gebruikte opslagruimte: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Klik om te laden",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Fouten: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Kon niet goed filteren bij het starten van de browser. Vernieuw de pagina voor een juiste filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/oc/messages.json b/src/_locales/oc/messages.json
new file mode 100644
index 0000000..2c4b085
--- /dev/null
+++ b/src/_locales/oc/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Enfin un blocador eficaç. Sollicita pauc lo CPU e la memòria",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Tablèu de bòrd",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Atencion ! Avètz de modificacions pas enregistradas",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Demorar",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignorar",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Paramètres",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Listas de filtre",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Mos filtres",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Mas règlas",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Lista blanca",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Acorchis",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Jornals d’eveniments",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "A prepaus",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Assisténcia",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Visualizaira d’elements",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Paramètres avançats",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Clicatz per desactivar uBlock₀ per aqueste site\n\nCtrl+Clic per desactivar uBlock₀ sonque per aquesta pagina",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Clicatz per activar uBlock₀ per aqueste site",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "requèstas blocadas",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "sus aquesta pagina",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} o {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "dempuèi l’installacion",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "o",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blocats sus aquesta pagina",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blocats dempuèi l’installacion",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domenis connectats",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Dobrir lo tablèu de bòrd",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Passar en mòde Eliminador",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Passar en mòde Selector",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Dobrir la visualizaira d’eveniments",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Senhalar un problèma amb aqueste site web",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Toggle the blocking of all popups for this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Clicatz per blocar las fenèstras sorgissentas d’aqueste site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Clicatz per blocar pas mai las fenèstras sorgissentas d’aqueste site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Toggle the blocking of large media elements for this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Clicatz per blocar los mèdias de granda talha d’aqueste site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Clicatz per blocar pas mai los mèdias de granda talha d’aqueste site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering for this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Click to disable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Click to enable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Toggle the blocking of remote fonts for this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Clicatz per blocar las poliças distantas d’aqueste site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Clicatz per blocar pas mai las poliças distantas d’aqueste site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Clicatz per desactivar JavaScript sus aqueste site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Clicatz per quitar de desactivar JavaScript sus aqueste site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Fenèstras sorgissentas",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Mèdias de granda talha",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Filtres cosmetics",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Poliças distantas",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Mai",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Mens",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Global rules: this column is for rules which apply to all sites.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Click to make your changes permanent.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Click to revert your changes.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "totes",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "imatges",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "Tèrça partida",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "3rd-party CSS/images",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "scripts en una linha",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1st-party scripts",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "3rd-party scripts",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "3rd-party frames",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domenis connectats",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} de {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Version",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Crear",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Causir",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Quitar",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Apercebut",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Filtres ret",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Filtres cosmetics",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Click, Ctrl-click",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Blocar un element...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Hide placeholders of blocked elements",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Show the number of blocked requests on the icon",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Disable tooltips",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Make use of context menu where appropriate",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "De bon usar pels daltonians",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Aparéncia",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tèmas",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Personalizar la color afortida",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Enable cloud storage support",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Soi un-a utilizaire-a avandat-ada",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Disable pre-fetching (to prevent any connection for blocked network requests)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Disable hyperlink auditing",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Prevent WebRTC from leaking local IP addresses",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Compòrtament per defaut",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "These default behaviors can be overridden on a per-site basis",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Disable cosmetic filtering",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Block media elements larger than {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Blocar las poliças distantas",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Desactivar JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Block CSP reports",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Uncloak canonical names",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Avançat",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Features suitable only for technical users",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "paramètres avançats",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Darrièra restauracion :",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Darrièra salvagarda :",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} used out of {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Mesa a jorn auto de las listas",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Metre a jorn ara",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Purgar totes los caches",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Parse and enforce cosmetic filters",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignore generic cosmetic filters",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspend network activity until all filter lists are loaded",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Aplicar las modificacions",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Integrats",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Publicitats",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Confidencialitat",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Domenis malfasents",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multipurpose",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, lengas",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Personalizat",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importar...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "One URL per line. Invalid URLs will be silently ignored.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Obsolèt.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "veire contengut",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Darrièra actualizacion : {{ago}}.\nClicar per forçar la mesa a jorn.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Mesa a jorn...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "A network error prevented the resource from being updated.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with <code>!</code> will be ignored.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importar e apondre",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Exportar",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "mos-filtres-estatics-ublock_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Aplicar las modificacions",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Règlas permanentas",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Règlas temporàrias",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Revert",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Commit",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Modificar",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Enregistrar",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Anullar",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Import from file…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Export to file…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "List of your dynamic filtering rules.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Rule syntax: <code>source destination type action</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>full documentation</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Triar :",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Tipe de règla",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Font",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destinacion",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Import and append…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Exportar",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Aplicar las modificacions",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Tipe",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domeni",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filtre",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Totes",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Tabless",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Onglet actual",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Reload the tab content",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Toggle the DOM inspector",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Toggle the popup panel",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: The logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Clear logger",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pause logger (discard all incoming data)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Unpause logger",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Toggle logger filtering",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filter logger content",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Logger filtering options",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Not",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blocat",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "autorizat",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modificat",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1st-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3rd-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Detalhs",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filtre",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Lista de filtre",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Règla",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Contèxte",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Root context",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partyness",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Tipe",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Règla d’URL",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Contèxte :",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Tipe :",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Static filter",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Blocar",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Autorizar",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "type “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "any type",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "from “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "from anywhere",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "except when",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "even if",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Static filter <code>{{filter}}</code> found in:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Static filter could not be found in any of the currently enabled filter lists",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Preserve entries from the last {{input}} minutes",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preserve at most {{input}} page loads per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Preserve at most {{input}} entries per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Use {{input}} lines per entry in vertically expanded mode",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Hide columns:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Time",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/rule",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Context",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partyness",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Lista",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tablèu",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Brut",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Dobrir",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Create new report",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Find similar reports",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentacion",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Read the documentation at <code>uBlock/wiki</code> to learn about all of uBlock Origin's features.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Questions and support",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter issues/website is broken",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Senhalament d’avarias",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Troubleshooting Information",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Report a filter issue",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Address of the web page:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "The web page…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pick an entry --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shows ads or ad leftovers",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Has privacy-related issues",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Malfunctions when uBlock Origin is enabled",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Opens unwanted tabs or windows",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Politica de confidencialitat",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Jornal de modificacions",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Còdi font (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Còdi font",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Traduccions",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Listas de filtres",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO's own filter lists are freely hosted on the following <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "A randomly picked CDN is used when a filter list needs to be updated.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Back up to file…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Restore from file…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Reset to default settings…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "The data could not be read or is invalid",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Network error: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "S'abonar",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "fa una minuta",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "fa {{value}} minutas",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "fa una ora",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "fa {{value}} oras",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "a un jorn",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "fa {{value}} jorns",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Show Dashboard",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Show Logger",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "off",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Pagina blocada",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin a empachat lo cargament de la pagina seguenta :",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "A causa del filtre seguent :",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "without parameters",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Trobat dins :",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Tornar",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Tampar aquesta fenèstra",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "M’assabentar pas mai per aqueste site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Desactivar lo blocatge estric del domeni {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Temporàriament",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanentament",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Contunhar",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Export to cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Import from cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Import from cloud storage and merge with current settings",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Nom d’aqueste periferic :",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Warning! Change these advanced settings at your own risk.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Mandar",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Aplicar las modificacions",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Restablir",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "octets",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Block element in frame…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subscribe to filter list…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Permetre temporàriament los elements mèdias larges",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Picar un acorchi",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Toggle locked scrolling",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Copiar al quichapapièrs",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Tot seleccionar",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relax blocking mode",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Espaci emmagazinatge : {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "Ko",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "Mo",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "Go",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Clicatz per cargar",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/pa/messages.json b/src/_locales/pa/messages.json
new file mode 100644
index 0000000..10438ef
--- /dev/null
+++ b/src/_locales/pa/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "ਆਖਰਕਾਰ ਪ੍ਰਭਾਵੀ ਬਲੌਕਰ ਹੈ। CPU ਅਤੇ ਮੈਮੋਰੀ ਲਈ ਸੌਖਾ।",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — ਡੈਸ਼ਬੋਰਡ",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "ਸਾਵਧਾਨ! ਤੁਹਾਡੇ ਕੋਲ ਨਾ-ਸੰਭਾਲੀਆਂ ਤਬਦੀਲੀਆਂ ਹਨ",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "ਰਹੋ",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "ਅਣਡਿੱਠਾ",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "ਸੈਟਿੰਗਾਂ",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "ਫਿਲਟਰ ਸੂਚੀਆਂ",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "ਮੇਰੇ ਫਿਲਟਰ",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "ਮੇਰੇ ਨਿਯਮ",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "ਭਰੋਸੇਯੋਗ ਸਾਈਟਾਂ",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "ਸ਼ਾਰਟਕੱਟ",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — ਲੌਗਰ",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "ਇਸ ਬਾਰੇ",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "ਸਹਿਯੋਗ",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — ਸੰਪੱਤੀ ਦਰਸ਼ਕ",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "ਤਕਨੀਕੀ ਸੈਟਿੰਗਾਂ",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "ਕਲਿੱਕ: ਇਸ ਸਾਈਟ ਲਈ uBlock₀ ਨੂੰ ਅਸਮਰੱਥ/ਸਮਰੱਥ ਕਰੋ।\n\nCtrl+ਕਲਿੱਕ: ਸਿਰਫ਼ ਇਸ ਸਫ਼ੇ ਲਈ uBlock₀ ਨੂੰ ਅਸਮਰੱਥ/ਸਮਰੱਥ ਕਰੋ।",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "ਇਸ ਸਾਈਟ ਲਈ uBlock₀ ਨੂੰ ਅਸਮਰੱਥ/ਸਮਰੱਥ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ।\n\nਸਿਰਫ਼ ਇਸ ਸਫ਼ੇ ਲਈ uBlock₀ ਨੂੰ ਅਸਮਰੱਥ/ਸਮਰੱਥ ਕਰਨ ਲਈ Ctrl+ਕਲਿੱਕ ਕਰੋ।",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "ਇਸ ਸਾਈਟ ਲਈ uBlock₀ ਸਮਰੱਥ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ।",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "ਪਾਬੰਦੀ ਲਾਈਆਂ ਬੇਨਤੀਆਂ",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "ਇਸ ਸਫ਼ੇ ਉੱਤੇ",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "ਇੰਸਟਾਲ ਕਰਨ ਤੋਂ ਬਾਅਦ",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "ਜਾਂ",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "ਇਸ ਸਫ਼ੇ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਏ",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "ਇੰਸਟਾਲ ਹੋਣ ਤੋਂ ਬਾਅਦ ਪਾਬੰਦੀ ਲਾਏ",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "ਕਨੈਕਟ ਹੋਈਆਂ ਡੋਮੇਨਾਂ",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "ਡੈਸ਼ਬੋਰਡ ਨੂੰ ਖੋਲ੍ਹੋ",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Enter element zapper mode",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Enter element picker mode",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "ਲੌਗਰ ਖੋਲ੍ਹੋ",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "ਇਸ ਵੈੱਬਸਾਈਟ ਉੱਤੇ ਮਸਲੇ ਬਾਰੇ ਰਿਪੋਰਟ ਕਰੋ",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "ਇਸ ਸਾਈਟ ਲਈ ਸਾਰੇ ਪੌਪ-ਅੱਪ ਉੱਤੇ ਪਾਬੰਦੀਆਂ ਨੂੰ ਬਦਲੋ",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "ਇਸ ਸਾਈਟ ਲਈ ਸਾਰੇ ਪੌਪ-ਅੱਪ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "ਇਸ ਸਾਈਟ ਲਈ ਸਾਰੇ ਪੌਪ-ਅੱਪ ਉੱਤੇ ਪਾਬੰਦੀ ਨਾ ਲਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "ਇਸ ਸਾਈਟ ਲਈ ਵੱਡੇ ਮੀਡਿਆ ਭਾਗਾਂ ਉੱਤੇ ਪਾਬੰਦੀਆਂ ਨੂੰ ਬਦਲੋ",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "ਇਸ ਸਾਈਟ ਲਈ ਵੱਡੇ ਮੀਡੀਆ ਭਾਗਾਂ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "ਇਸ ਸਾਈਟ ਲਈ ਵੱਡੇ ਮੀਡੀਆ ਭਾਗਾਂ ਉੱਤੇ ਪਾਬੰਦੀ ਹਟਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "ਇਸ ਸਾਈਟ ਲਈ ਦਿੱਖ ਫਿਲਟਰ ਕਰਨ ਨੂੰ ਬਦਲੋ",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "ਇਸ ਸਾਈਟ ਉੱਤੇ ਦਿੱਖ ਫਿਲਟਰ ਕਰਨ ਨੂੰ ਅਸਮਰੱਥ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "ਇਸ ਸਾਈਟ ਉੱਤੇ ਦਿੱਖ ਫਿਲਟਰ ਕਰਨ ਨੂੰ ਸਮਰੱਥ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "ਇਸ ਸਾਈਟ ਲਈ ਰਿਮੋਟ ਫ਼ੌਂਟਾਂ ਉੱਤੇ ਪਾਬੰਦੀਆਂ ਨੂੰ ਬਦਲੋ",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "ਇਸ ਸਾਈਟ ਲਈ ਰਿਮੋਟ ਫ਼ੌਂਟਾਂ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "ਇਸ ਸਾਈਟ ਲਈ ਰਿਮੋਟ ਫ਼ੌਂਟਾਂ ਉੱਤੇ ਪਾਬੰਦੀ ਹਟਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "ਇਸ ਸਾਈਟ ਉੱਤੇ JavaScript ਅਸਮਰੱਥ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "ਇਸ ਸਾਈਟ ਉੱਤੇ JavaScript ਅਸਮਰੱਥ ਕਰਨ ਨੂੰ ਹਟਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "ਪੌਪ-ਅੱਪ ਵਿੰਡੋ",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "ਵੱਡੇ ਮੀਡੀਆ ਭਾਗ",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "ਦਿੱਖ ਫਿਲਟਰ ਕਰਨਾ",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "ਰਿਮੋਟ ਫ਼ੌਂਟ",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "ਹੋਰ",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "ਘੱਟ",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "ਗਲੋਬਲ ਨਿਯਮ: ਇਹ ਕਾਲਮ ਸਾਰੀਆਂ ਸਾਈਟਾਂ ਉੱਤੇ ਲਾਗੂ ਹੋਣ ਵਾਲੇ ਨਿਯਮਾਂ ਲਈ ਹੈ।",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "ਲੋਕਲ ਨਿਯਮ: ਇਹ ਕਾਲਮ ਨਿਯਮਾਂ ਲਈ ਹੈ, ਜੋ ਕਿ ਸਿਰਫ਼ ਲੋਕਲ ਸਾਈਟਾਂ ਉੱਤੇ ਹੀ ਲਾਗੂ ਹੁੰਦੇ ਹਨ।\nਲੋਕਲ ਨਿਯਮ ਗਲੋਬਲ ਨਿਯਮਾਂ ਨੂੰ ਅਣਡਿੱਠਾ ਕਰਦੇ ਹਨ।",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "ਆਪਣੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਪੱਕਾ ਬਣਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ।",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "ਆਪਣੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਵਾਪਸ ਲੈਣ ਲਈ ਕਲਿੱਕ ਕਰੋ।",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "ਸਭ",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "ਚਿੱਤਰ",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "ਤੀਜੀ-ਧਿਰ",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "ਤੀਜੀ-ਧਿਰ CSS/ਚਿੱਤਰ",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "ਇਨ-ਲਾਈਨ ਸਕ੍ਰਿਪਟਾਂ",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1ਲੀ-ਧਿਰ ਸਕ੍ਰਿਪਟਾਂ",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "ਤੀਜੀ-ਧਿਰ ਸਕ੍ਰਿਪਟਾਂ",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "ਤੀਜੀ-ਧਿਰ ਫਰੇਮ",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "ਕਨੈਕਟ ਹੋਈਆਂ ਡੋਮੇਨਾਂ",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{total}} ਵਿੱਚੋਂ {{count}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "ਵਰਜ਼ਨ",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "ਸਕ੍ਰਿਪਟ",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "ਫਰੇਮ",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "ਬਣਾਓ",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "ਚੁਣੋ",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "ਬਾਹਰ",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "ਝਲਕ",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "ਨੈੱਟਵਰਕ ਫਿਲਟਰ",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "ਦਿੱਖ ਫਿਲਟਰ ਕਰਨਾ",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "ਕਲਿੱਕ, Ctrl-ਕਲਿੱਕ",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "ਭਾਗ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "ਪਾਬੰਦੀ ਲਾਏ ਭਾਗਾਂ ਲਈ ਸਥਾਨ ਨੂੰ ਓਹਲੇ ਕਰੋ",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "ਆਈਕਾਨ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਈਆਂ ਬੇਨਤੀਆਂ ਦੀ ਗਿਣਤੀ ਦਿਖਾਓ",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "ਟੂਲ-ਟਿੱਪ ਅਸਮਰੱਥ ਕਰੋ",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "ਜਦੋਂ ਵੀ ਵਾਜਬ ਹੋਵੇ ਤਾਂ ਪ੍ਰਸੰਗ ਮੇਨੂ ਨੂੰ ਵਰਤੋਂ",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "ਰੰਗ-ਅੰਨ੍ਹੇਪਣ ਲਈ ਸਰਲ",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "ਦਿੱਖ",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "ਥੀਮ",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Custom accent color",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "ਕਲਾਉਡ ਸਟੋਰੇਜ਼ ਸਹਾਇਤਾ ਸਮਰੱਥ ਕਰੋ",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "ਮੈਂ ਮਾਹਰ ਵਰਤੋਂਕਾਰ ਹਾਂ",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "ਪਹਿਲਾਂ-ਪ੍ਰਾਪਤ ਕਰਨਾ ਅਸਮਰੱਥ (ਪਾਬੰਦੀ ਲਾਈਆਂ ਨੈੱਟਵਰਕ ਬੇਨਤੀਆਂ ਲਈ ਕਿਸੇ ਵੀ ਕਨੈਕਸ਼ਨ ਨੂੰ ਰੋਕਣ ਲਈ)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "ਹਾਈਪਰ-ਲਿੰਕ ਪੜਤਾਲ ਨੂੰ ਅਸਮਰੱਥ ਕਰੋ",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "WebRTC ਨੂੰ ਲੋਕਲ IP ਐਡਰੈਸ ਲੀਕ ਕਰਨ ਤੋਂ ਰੋਕੋ",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "ਮੂਲ ਰਵੱਈਆ",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "ਇਹ ਮੂਲ ਰਵੱਈਏ ਨੂੰ ਹਰ-ਸਟਾਈ ਮੁਤਾਬਕ ਅਣਡਿੱਠਾ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "ਦਿੱਖ ਫਿਲਟਰ ਕਰਨ ਨੂੰ ਅਸਮਰੱਥ ਕਰੋ",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "{{input}} KB ਤੋਂ ਵੱਡੇ ਮੀਡੀਆ ਭਾਗਾਂ ਉੱਤੇ ਪਾਬੰਦੀ",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "ਰਿਮੋਟ ਫ਼ੌਂਟਾਂ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "JavaScript ਅਸਮਰੱਥ ਕਰੋ",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "CSP ਰਿਪੋਰਟਾਂ ਉੱਤੇ ਪਾਬੰਦੀ",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Uncloak canonical names",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "ਤਕਨੀਕੀ",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "ਫ਼ੀਚਰ ਸਿਰਫ਼ ਤਕਨੀਕੀ ਮਾਹਰ ਵਰਤੋਂਕਾਰਾਂ ਲਈ ਢੁੱਕਵੇਂ ਹਨ",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "ਤਕਨੀਕੀ ਸੈਟਿੰਗਾਂ",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "ਪਿਛਲਾ ਰੀ-ਸਟੋਰ:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "ਪਿਛਲਾ ਬੈਕਅੱਪ:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} ਨੈੱਟਵਰਕ ਫਿਲਟਰ + {{cosmeticFilterCount}} ਦਿੱਖ ਫਿਲਟਰ, ਇੱਥੋਂ:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{total}} ਵਿੱਚੋਂ {{used}} ਵਰਤੇ",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "ਫਿਲਟਰ ਸੂਚੀਆਂ ਆਪੇ ਅੱਪਡੇਟ ਕਰੋ",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "ਹੁਣੇ ਅੱਪਡੇਟ ਕਰੋ",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "ਸਭ ਕੈਸ਼ ਮਿਟਾਓ",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "ਦਿੱਖ ਫਿਲਟਰ ਨੂੰ ਪਾਰਸ ਅਤੇ ਲਾਗੂ ਕਰੋ",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "ਦਿੱਖ (cosmetic) ਫਿਲਟਰ ਵੈੱਬ ਸਫ਼ੇ ਉੱਤੇ ਅਜਿਹਾ ਭਾਗਾਂ ਨੂੰ ਲੁਕਾਉਂਦੇ ਹਨ, ਜੋ ਕਿ ਦਿੱਖ ਵਿੱਚ ਰੁਕਾਵਟ ਬਣਦੇ ਹਨ ਅਤੇ ਜਿਹਨਾਂ ਉੱਤੇ ਨੈੱਟਵਰਕ ਅਧਾਰਿਤ ਫਿਲਟਰ ਇੰਜਣਾਂ ਰਾਹੀਂ ਪਾਬੰਦੀ ਨਹੀਂ ਲਾਈ ਜਾ ਸਕਦੀ ਹੈ।",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "ਆਮ ਦਿੱਖ ਆਧਾਰਿਤ ਫਿਲਟਰ ਅਣਡਿੱਠੇ ਕਰੋ",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "ਸਭ ਫਿਲਟਰ ਸੂਚੀਆਂ ਲੋਡ ਹੋਣ ਤੱਕ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਨੂੰ ਸਸਪੈਂਡ ਰੱਖੋ",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "ਤਬਦੀਲੀਆਂ ਲਾਗੂ ਕਰੋ",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "ਬਿਲਟ-ਇਨ",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "ਇਸ਼ਤਿਹਾਰ",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "ਪਰਦੇਦਾਰੀ",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "ਮਾਲਵੇਅਰਾਂ ਤੋਂ ਬਚਾਅ, ਸੁਰੱਖਿਆ",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "ਅਣਚਾਹੇ",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "ਬਹੁ-ਮਕਸਦੀ",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "ਖੇਤਰ, ਭਾਸ਼ਾਵਾਂ",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "ਕਸਟਮ",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "ਇੰਪੋਰਟ…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "ਹਰ ਲਾਈਨ ਵਿੱਚ ਇੱਕ URL। ਗਲਤ URL ਨੂੰ ਬਿਨਾਂ ਰੁਕੇ ਅਣਡਿੱਠਾ ਕੀਤਾ ਜਾਵੇਗਾ।",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "ਪੁਰਾਣਾ।",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "ਸਮੱਗਰੀ ਵੇਖੋ",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "ਆਖਰੀ ਅੱਪਡੇਟ: {{ago}}।\nਅੱਪਡੇਟ ਲਈ ਮਜ਼ਬੂਰ ਕਰਨ ਵਾਸਤੇ ਕਲਿੱਕ ਕਰੋ।",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "…ਅੱਪਡੇਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "ਨੈੱਟਵਰਕ ਗਲਤੀ ਸਰੋਤ ਨੂੰ ਅੱਪਡੇਟ ਹੋਣ ਤੋਂ ਰੋਕਦੀ ਹੈ।",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with <code>!</code> will be ignored.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "ਗ਼ੈਰ-ਭਰੋਸੇਯੋਗ ਸਰੋਤਾਂ ਤੋਂ ਫਿਲਟਰ ਨਾ ਜੋੜੋ।",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "ਇੰਪੋਰਟ ਕਰੋ ਤੇ ਜੋੜੋ…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "ਐਕਸਪੋਰਟ…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "ਤਬਦੀਲੀਆਂ ਲਾਗੂ ਕਰੋ",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "ਪੱਕੇ ਨਿਯਮ",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "ਆਰਜ਼ੀ ਨਿਯਮ",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "ਵਾਪਸ ਲਵੋ",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "ਕਮਿਟ",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "ਸੋਧੋ",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "ਸੰਭਾਲੋ",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "ਖ਼ਾਰਜ",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "…ਫ਼ਾਈਲ ਤੋਂ ਇੰਪੋਰਟ ਕਰੋ",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "…ਫ਼ਾਈਲ ਉੱਤੇ ਐਕਸਪੋਰਟ ਕਰੋ",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "ਤੁਹਾਡੇ ਚਾਲੂ ਫਿਲਟਰ ਕਰਨ ਦੇ ਨਿਯਮਾਂ ਦੀ ਸੂਚੀ ਹੈ।",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Rule syntax: <code>source destination type action</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>full documentation</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "ਲੜੀਬੱਧ:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "ਨਿਯਮ ਦੀ ਕਿਸਮ",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "ਸਰੋਤ",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "ਟਿਕਾਣਾ",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "ਇੰਪੋਰਟ ਕਰੋ ਤੇ ਜੋੜੋ…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "ਐਕਸਪੋਰਟ…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "ਤਬਦੀਲੀਆਂ ਲਾਗੂ ਕਰੋ",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "ਕਿਸਮ",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "ਡੋਮੇਨ",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "ਫਿਲਟਰ",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "ਸਭ",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "ਬਿਨ-ਟੈਬ",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "ਮੌਜੂਦਾ ਟੈਬ",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "ਟੈਬ ਸਮੱਗਰੀ ਮੁੜ-ਲੋਡ ਕਰੋ",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "DOM ਇੰਸਪੈਕਟਰ ਨੂੰ ਬਦਲੋ",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "ਪੌਪ-ਅੱਪ ਪੈਨਲ ਬਦਲੋ",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin ਵਿਕੀ: ਲੌਗਰ",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "ਲੌਗਰ ਮਿਟਾਓ",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "ਲੌਗਰ ਨੂੰ ਰੋਕੋ (ਸਭ ਆਉਣ ਵਾਲੇ ਡਾਟੇ ਨੂੰ ਅਣਡਿੱਠਾ ਕਰੋ)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "ਲੌਗਰ ਨੂੰ ਚਾਲੂ ਕਰੋ",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "ਲੌਗਰ ਫਿਲਟਰਾਂ ਨੂੰ ਬਦਲੋ",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "ਲੌਗਰ ਸਮੱਗਰੀ ਨੂੰ ਫਿਲਟਰ ਕਰੋ",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "ਲੌਗਰ ਫਿਲਟਰ ਕਰਨ ਲਈ ਚੋਣਾਂ",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "ਨਹੀਂ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "ਪਾਬੰਦੀ ਲਾਏ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "ਮਨਜ਼ੂਰ ਕੀਤੇ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "ਸੋਧ ਕੀਤੇ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1ਲੀ-ਧਿਰ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3ਜੀ-ਧਿਰ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "ਵੇਰਵੇ",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "ਫਿਲਟਰ",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "ਫਿਲਟਰ ਸੂਚੀ",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "ਨਿਯਮ",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "ਪਰਸੰਗ",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "ਰੂਟ ਪਰਸੰਗ",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "ਬਿਨ-ਧਿਰ",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "ਕਿਸਮ",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL ਨਿਯਮ",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "ਪਰਸੰਗ:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "ਕਿਸਮ:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "ਟਿਕਾਊ ਫਿਲਟਰ",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "ਪਾਬੰਦੀ",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "ਮਨਜ਼ੂਰ",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "ਕਿਸਮ “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "ਕੋਈ ਵੀ ਕਿਸਮ",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "“{{origin}}” ਤੋਂ",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "ਕਿਸੇ ਵੀ ਥਾਂ ਤੋਂ",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "ਛੋਟ ਜਦੋਂ",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "ਭਾਵੇਂ ਜੇ",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "ਸਥਿਰ ਫਿਲਟਰ <code>{{filter}}</code> ਇਸ ਵਿੱਚ ਮੌਜੂਦ ਹੈ:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Static filter could not be found in any of the currently enabled filter lists",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "ਪਿਛਲੇ {{input}} ਮਿੰਟਾਂ ਤੋਂ ਐਂਟਰੀਆਂ ਰੱਖੋ",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preserve at most {{input}} page loads per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Preserve at most {{input}} entries per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Use {{input}} lines per entry in vertically expanded mode",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "ਕਾਲਮ ਲੁਕਾਓ:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} ਸਮਾਂ",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} ਫਿਲਟਰ/ਨਿਯਮ",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} ਪਰਸੰਗ",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} ਬਿਨ-ਧਿਰ",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "ਸੂਚੀ",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "ਸਾਰਣੀ",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "ਸਰਲ",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "ਮਾਰਕਡਾਊਨ",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "ਖੋਲ੍ਹੋ",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "ਨਵੀਂ ਰਿਪੋਰਟ ਬਣਾਓ",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "ਰਲਦੀਆਂ ਰਿਪੋਰਟਾਂ ਲੱਭੋ",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "ਦਸਤਾਵੇਜ਼",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "uBlock Origin ਦੇ ਸਾਰੇ ਫੀਚਰਾਂ ਬਾਰੇ ਜਾਣਕਾਰੀ ਲੈਣ ਲਈ <code>uBlock/wiki</code> ਤੋਂ ਦਸਤਾਵੇਜ਼ ਪੜ੍ਹੋ।",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "ਸਵਾਲ ਅਤੇ ਸਹਿਯੋਗ",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "ਫਿਲਟਰ ਮਸਲੇ/ਵੈੱਬਸਾਈਟ ਖਰਾਬ ਹੈ",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "ਬੱਗ ਰਿਪੋਰਟ",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "ਸਮੱਸਿਆ ਹੱਲ ਕਰਨ ਸੰਬੰਧੀ ਜਾਣਕਾਰੀ",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "ਹੇਠਾਂ ਤਕਨੀਕੀ ਜਾਣਕਾਰੀ ਦਿੱਤੀ ਹੈ, ਜੋ ਕਿ ਵਲੰਟੀਅਰਾਂ ਲਈ ਮਦਦਗਾਰ ਹੋ ਸਕਦੀ ਹੈ, ਜੋ ਤੁਹਾਡੀ ਸਮੱਸਿਆ ਹੱਲ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ ਕਰਦੇ ਹਨ।",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>ਖਾਸ:</b> ਸੰਭਾਵਿਤ ਤੌਰ ਉੱਤੇ ਪ੍ਰਾਈਵੇਟ ਜਾਂ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਣਕਾਰੀ ਨੂੰ ਮੂਲ ਰੂਪ ਵਿੱਚ ਛਾਂਟ ਦਿੱਤਾ ਗਿਆ ਹੈ। ਛਾਂਂਟੀ ਕੀਤੀ ਜਾਣਕਾਰੀ ਸਮੱਸਿਆ ਨੂੰ ਹੱਲ ਕਰਨਾ ਵੱਧ ਔਖਾ ਬਣਾ ਸਕਦੀ ਹੈ।",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "ਫਿਲਟਰ ਮਸਲੇ ਬਾਰੇ ਰਿਪੋਰਟ ਕਰੋ",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "ਵਲੰਟੀਅਰਾਂ ਕੋਲ ਡੁਪਲੀਕੇਟ ਰਿਪੋਰਟਾਂ ਦਾ ਕੰਮ ਵਧਾਉਣ ਤੋਂ ਬਚਣ ਲਈ ਕਿਰਪਾ ਕਰਕੇ ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਮਸਲਾ ਕਿਤੇ ਪਹਿਲਾਂ ਰਿਪੋਰਟ ਤਾਂ ਨਹੀ ਕੀਤਾ ਹੋਇਆ ਹੈ।",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "ਫਿਲਟਰ ਸੂਚੀਆਂ ਰੋਜ਼ ਅੱਪਡੇਟ ਕੀਤੀਆਂ ਜਾਂਦੀਆਂ ਹਨ। ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਕਿਤੇ ਤੁਹਾਡਾ ਮਸਲਾ ਪਹਿਲਾਂ ਹੀ ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਫਿਲਟਰ ਸੂਚੀਆਂ ਰਾਹੀਂ ਹੱਲ ਤਾਂ ਨਹੀਂ ਹੋ ਚੁੱਕਿਆ ਹੈ।",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "ਸਮੱਸਿਆ ਵਾਲੇ ਵੈੱਬ-ਸਫ਼ੇ ਨੂੰ ਮੁੜ-ਲੋਡ ਕਰਨ ਦੇ ਬਾਅਦ ਜਾਂਚ ਕਰੋ ਕਿ ਕੀ ਮਸਲਾ ਹਾਲੇ ਵੀ ਮੌਜੂਦ ਹੈ।",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "ਵੈੱਬ ਸਾਈਟ ਦਾ ਸਿਰਨਾਵਾਂ:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "ਵੈੱਬ ਸਫ਼ਾ…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- ਐਂਟਰੀ ਚੁਣੋ --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "ਇਸ਼ਤਿਹਾਰ ਜਾਂ ਇਸ਼ਤਿਹਾਰ ਦੀ ਰਹਿੰਦ-ਖੂੰਦ ਦਿਖਾਉਂਦਾ ਹੈ",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "uBlock Origin ਖੋਜਦਾ ਹੈ",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "ਪਰਦੇਦਾਰੀ ਸੰਬੰਧੀ ਮਸਲੇ ਹਨ",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "uBlock Origin ਸਮਰੱਥ ਕਰਨ ਦੇ ਬਾਅਦ ਗੜਬੜ ਹੁੰਦੀ ਹੈ",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "ਬੇਲੋੜੀਆਂ ਟੈਬਾਂ ਜਾਂ ਵਿੰਡੋ ਖੋਲ੍ਹਦਾ ਹੈ",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "ਪਰਦੇਦਾਰੀ ਨੀਤੀ",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "ਤਬਦੀਲੀ-ਸੂਚੀ",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "ਸਰੋਤ ਕੋਡ (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "ਯੋਗਦਾਨੀ",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "ਸਰੋਤ ਕੋਡ",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "ਅਨੁਵਾਦ",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "ਫਿਲਟਰ ਸੂਚੀਆਂ",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "ਬਾਹਰੀ ਨਿਰਭਰਤਾਵਾਂ (GPLv3-ਅਨੁਕੂਲ):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO's own filter lists are freely hosted on the following <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "A randomly picked CDN is used when a filter list needs to be updated.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "ਫ਼ਾਈਲ ਤੋਂ ਬੈਕਅੱਪ ਲਵੋ…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "…ਫ਼ਾਈਲ ਤੋਂ ਬਹਾਲ ਕਰੋ",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "…ਮੂਲ ਸੈਟਿੰਗਾਂ ਬਹਾਲ ਕਰੋ",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "ਡਾਟਾ ਪੜ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ ਜਾਂ ਗ਼ੈਰ-ਵਾਜਬ ਹੈ",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "ਤੁਹਾਡੀਆਂ ਸਾਰੀਆਂ ਸੈਟਿੰਗਾਂ ਨੂੰ ਹਟਾਇਆ ਜਾਵੇਗਾ ਅਤੇ uBlock₀ ਮੁੜ-ਚਾਲੂ ਹੋਵੇਗਾ।\n\nਕੀ uBlock₀ ਨੂੰ ਫੈਕਟਰੀ ਸੈਟਿੰਗਾਂ ਲਈ ਮੁੜ-ਸੈੱਟ ਕਰਨਾ ਹੈ?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "ਨੈੱਟਵਰਕ ਗਲਤੀ: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "ਕੀ ਅੱਗੇ ਦਿੱਤੇ URL ਨੂੰ ਤੁਹਾਡੀਆਂ ਕਸਟਮ ਫਿਲਟਰ ਸੂਚੀਆਂ ਵਿੱਚ ਜੋੜਨਾ ਹੈ?\n\nਨਾਂ: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "ਮੈਂਬਰ ਬਣੋ",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "ਮਿੰਟ ਪਹਿਲਾਂ",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} ਮਿੰਟ ਪਹਿਲਾਂ",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "ਘੰਟਾ ਪਹਿਲਾਂ",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} ਘੰਟੇ ਪਹਿਲਾਂ",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "ਇੱਕ ਦਿਨ ਪਹਿਲਾਂ",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} ਦਿਨ ਪਹਿਲਾਂ",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "ਡੈਸ਼ਬੋਰਡ ਵੇਖਾਓ",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "ਲੌਗਰ ਵੇਖਾਓ",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "ਬੰਦ",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "ਸਫ਼ੇ ਉੱਤੇ ਪਾਬੰਦੀ ਹੈ",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin ਨੇ ਅੱਗੇ ਦਿੱਤੇ ਸਫ਼ੇ ਨੂੰ ਲੋਡ ਹੋਣ ਤੋਂ ਰੋਕਿਆ ਹੈ:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "ਅੱਗੇ ਦਿੱਤੇ ਫਿਲਟਰ ਕਰਕੇ:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "ਬਿਨਾਂ ਪੈਰਾਮੀਟਰ",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "ਲੱਭੋ:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "ਪਿੱਛੇ ਜਾਓ",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "ਇਹ ਵਿੰਡੋ ਬੰਦ ਕਰੋ",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "ਇਸ ਸਾਈਟ ਬਾਰੇ ਮੈਨੂੰ ਮੁੜ ਚੇਤਾਵਨੀ ਨਾ ਦਿਓ",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "{{hostname}} ਲਈ ਸਖ਼ਤ ਪਾਬੰਦੀਆਂ ਲਾਉਣਾ ਅਸਮਰੱਥ ਕਰੋ",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "ਆਰਜ਼ੀ",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "ਪੱਕੇ ਤੌਰ ਉੱਤੇ",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "ਜਾਰੀ ਰੱਖੋ",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "ਕਲਾਉਡ ਸਟੋਰੇਜ਼ ਉੱਤੇ ਐਕਸਪੋਰਟ ਕਰੋ",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "ਕਲਾਉਡ ਸਟੋਰੇਜ਼ ਤੋਂ ਇੰਪੋਰਟ ਕਰੋ",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "ਕਲਾਉਡ ਸਟੋਰੇਜ਼ ਤੋਂ ਇੰਪੋਰਟ ਕਰੋ ਅਤੇ ਮੌਜੂਦਾ ਸੈਟਿੰਗਾਂ ਨਾਲ ਮਿਲਾਓ",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "ਇਸ ਡਿਵਾਈਸ ਦਾ ਨਾਂ:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "ਸਾਵਧਾਨ! ਇਹ ਤਕਨੀਕੀ ਸੈਟਿੰਗਾਂ ਨੂੰ ਆਪਣੇ ਖ਼ਤਰੇ ਮੁਤਾਬਕ ਬਦਲੋ।",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "ਭੇਜੋ",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "ਤਬਦੀਲੀਆਂ ਲਾਗੂ ਕਰੋ",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "ਵਾਪਸ ਲਵੋ",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "ਬਾਈਟ",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "ਫਰੇਮ ਵਿੱਚ ਭਾਗ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਈ…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "ਫਿਲਟਰ ਸੂਚੀ ਲਈ ਮੈਂਬਰ ਬਣੋ…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "ਆਰਜ਼ੀ ਤੌਰ ਉੱਤੇ ਵੱਡੇ ਮੀਡੀਆ ਭਾਗਾਂ ਨੂੰ ਮਨਜ਼ੂਰੀ ਦਿਓ",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "ਸਰੋਤ ਕੋਡ ਵੇਖੋ…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "ਸ਼ਾਰਟਕੱਟ ਲਿਖੋ",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Toggle locked scrolling",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "ਕਲਿੱਪਬੋਰਡ ਵਿੱਚ ਕਾਪੀ ਕਰੋ",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "ਸਭ ਚੁਣੋ",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relax blocking mode",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "ਵਰਤੀ ਗਈ ਸਟੋਰੇਜ਼: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "ਲੋਡ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "ਗਲਤੀਆਂ: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/pl/messages.json b/src/_locales/pl/messages.json
new file mode 100644
index 0000000..3b2d7cf
--- /dev/null
+++ b/src/_locales/pl/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Nareszcie skuteczny bloker charakteryzujący się niskim użyciem procesora i pamięci.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ – Panel sterowania",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Uwaga! Masz niezapisane zmiany",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Zostań",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignoruj",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Ustawienia",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Listy filtrów",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Moje filtry",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Moje reguły",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Zaufane witryny",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Skróty",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ – Rejestrator",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "O rozszerzeniu",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Pomoc techniczna",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ – Podgląd zasobu",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Ustawienia zaawansowane",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Kliknij, aby wyłączyć uBlock₀ dla tej witryny.\n\nKliknij z wciśniętym klawiszem Ctrl,\naby wyłączyć uBlock₀ tylko dla tej strony.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Kliknij, aby wyłączyć uBlock₀ dla tej witryny.\n\nKliknij z wciśniętym klawiszem Ctrl, aby wyłączyć uBlock₀ tylko dla tej strony.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Kliknij, aby włączyć uBlock₀ dla tej witryny.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "zablokowane żądania",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "na tej stronie",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "od instalacji",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "lub",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Zablokowane na tej stronie",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Zablokowane od instalacji",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domeny podłączone",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Otwórz panel sterowania",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Przejdź do trybu usuwania elementów",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Przejdź do trybu zaznaczania elementów",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Otwórz rejestrator",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Zgłoś problem z tą stroną",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Włącz/wyłącz blokowanie wyskakujących okien na tej witrynie",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Kliknij, aby zablokować wszystkie wyskakujące okna na tej witrynie",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Kliknij, aby nie blokować wyskakujących okien na tej witrynie",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Włącz/wyłącz blokowanie dużych elementów multimedialnych na tej witrynie",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Kliknij, aby zablokować duże elementy multimedialne na tej witrynie",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Kliknij, aby nie blokować dużych elementów multimedialnych na tej witrynie",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Włącz/wyłącz kosmetyczne filtrowanie na tej witrynie",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Kliknij, aby wyłączyć filtrowanie kosmetyczne na tej witrynie",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Kliknij, aby włączyć filtrowanie kosmetyczne na tej witrynie",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Włącz/wyłącz blokowanie zdalnych czcionek na tej witrynie",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Kliknij, aby zablokować zdalne czcionki na tej witrynie",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Kliknij, aby nie blokować zdalnych czcionek na tej witrynie",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Kliknij, aby wyłączyć JavaScript na tej witrynie",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Kliknij, aby JavaScript nie był już wyłączony na tej witrynie",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Wyskakujące okna",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Duże elementy multimedialne",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Filtrowanie kosmetyczne",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Zdalne czcionki",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Więcej",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Mniej",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Reguły globalne:\nW tej kolumnie znajdują się reguły stosowane na wszystkich witrynach.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Reguły lokalne:\nW tej kolumnie znajdują się reguły stosowane tylko na bieżącej witrynie.\nReguły lokalne zastępują reguły globalne.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Kliknij, aby zastosować zmiany na stałe.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Kliknij, aby odrzucić zmiany.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "wszystko",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "obrazki",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "domeny zewnętrzne",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "zewnętrzne CSS/obrazki",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "zagnieżdżone skrypty",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "skrypty własne",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "skrypty z domen zewnętrznych",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "ramki z domen zewnętrznych",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "podłączone domeny",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} z {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Wersja",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "skrypt",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "ramka",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Utwórz",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Wybierz",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Zamknij",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Podgląd",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Filtry sieciowe",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Filtry kosmetyczne",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Klik, Ctrl + klik",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Zablokuj element…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Ukrywaj symbole zastępcze zablokowanych elementów",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Wyświetlaj liczbę zablokowanych żądań na ikonie rozszerzenia",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Nie wyświetlaj dymków podpowiedzi",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Używaj menu kontekstowego, gdzie to możliwe",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Interfejs przyjazny osobom z zaburzeniami widzenia kolorów",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Wygląd",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Motyw",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Własny kolor akcentujący",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Włącz obsługę zapisu ustawień w chmurze",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Jestem zaawansowanym użytkownikiem",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Wyłącz wstępne pobieranie (by uniknąć połączeń z zablokowanymi zapytaniami sieciowymi)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Wyłącz śledzenie kliknięć odnośników",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Zapobiegaj ujawnianiu lokalnego adresu IP poprzez interfejs WebRTC",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Działanie domyślne",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Te ustawienia mogą być zastąpione przez ustawienia danej witryny",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Wyłącz filtrowanie kosmetyczne",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Blokuj elementy multimedialne większe niż {{input}} KiB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Blokuj zdalne czcionki",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Wyłącz JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Blokuj raporty CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Pokaż rzeczywistą nazwę domeny (CNAME)",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Zaawansowane",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Funkcje odpowiednie tylko dla użytkowników z przygotowaniem technicznym",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "Ustawienia zaawansowane",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Ostatnie przywrócenie wykonano:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Ostatnią kopię zapasową wykonano:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "Filtry sieciowe: {{netFilterCount}} + filtry kosmetyczne: {{cosmeticFilterCount}} z:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "użytych {{used}} z {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Automatycznie aktualizuj listy filtrów",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Zaktualizuj teraz",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Wyczyść całą pamięć podręczną",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Przetwarzaj i stosuj filtry kosmetyczne",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Filtry kosmetyczne służą do ukrywania elementów stron internetowych uważanych za wizualne uciążliwe, które to nie mogą zostać zablokowane za pomocą filtrów żądań sieciowych.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignoruj ogólne filtry kosmetyczne",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Ogólne filtry kosmetyczne, to filtry które mają być zastosowane na wszystkich stronach internetowych. Włącznie tej funkcji zmniejszy obciążenie procesora i pamięci.\n\nZaleca się włączenie tej funkcji na mniej wydajnych urządzeniach.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Zawieś aktywność sieciową do czasu załadowania wszystkich list filtrów",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Listy zablokowanych hostów",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Zastosuj zmiany",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Wbudowane",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Reklamy",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Prywatność",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Ochrona przed malware, bezpieczeństwo",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Elementy irytujące",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Wielofunkcyjne",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regiony, języki",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Własne",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importuj…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Jeden adres URL listy na linię. Błędne adresy URL będą pomijane.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Nieaktualna.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "zobacz zawartość",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Zaktualizowano: {{ago}}.\nKliknij, aby wymusić aktualizację.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Aktualizowanie…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Błąd sieci uniemożliwił aktualizację zasobów.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "W wierszu może być tylko jeden filtr. Filtrem może być nazwa hosta lub filtr kompatybilny z EasyList. Wiersze poprzedzone znakiem <code>!</code> będą pomijane.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Nie dodawaj filtrów z niezaufanych źródeł.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importuj i dołącz…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Eksportuj…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "ublock-statyczne-filtry_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Zastosuj zmiany",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Stałe reguły",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Tymczasowe reguły",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Przywróć",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Zatwierdź",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Edytuj",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Zapisz",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Odrzuć",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importuj z pliku…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Eksportuj do pliku…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "ublock-dynamiczne-reguly_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Lista reguł dynamicznego filtrowania.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Składnia reguły: <code>źródło cel typ akcja</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>pełna dokumentacja</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sortowanie:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Typ reguły",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Źródło",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Miejsce docelowe",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Wytyczne zaufanych witryn nakazują, na których stronach uBlock Origin powinien zostać wyłączony. Jeden wpis na linię.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importuj i dołącz…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Eksportuj…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "ublock-zaufane-witryny_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Zastosuj zmiany",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Typ",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domena",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "Adres URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filtr",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Wszystkie",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Bez kart",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Aktywna karta",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Przeładuj zawartość karty",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Przełącz inspektor DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Przełącz panel popup",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: Rejestrator (ang.)",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Wyczyść rejestr",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pauzuj rejestrowanie (porzuć wszystkie przychodzące dane)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Wznów rejestrowanie",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Przełącz filtrowanie rejestru",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtruj zawartość rejestru",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Opcje filtrowania rejestru",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Nie",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "akcje",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "zablokowane",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "dozwolone",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "zmodyfikowane",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "własna domena",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "domeny zewnętrzne",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Szczegóły",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filtr",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Lista filtrów",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Reguła",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Kontekst",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Kontekst główny",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Lokalność",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Typ",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "Adres URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Reguła URL",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Kontekst:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Typ:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Filtr statyczny",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} żądania sieciowe {{type}}, których adres URL jest zgodny z: {{url}} {{br}}i pochodzi {{origin}}, {{importance}} filtr znajduje się na liście wyjątków.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Blokuj",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Zezwalaj na",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "typu „{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "każdego typu",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "z „{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "z dowolnego miejsca",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "z wyjątkiem, gdy",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "nawet, jeśli",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Filtr statyczny <code>{{filter}}</code> znajdujący się w:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Filtr statyczny nie został znaleziony w aktualnie włączonych listach filtrów",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Wpisy rejestru niespełniające wszystkich trzech warunków będą automatycznie porzucane:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Zachowuj wpisy z ostatnich {{input}} minut",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Zachowuj nie więcej niż {{input}} przeładowań strony na kartę",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Zachowuj nie więcej niż {{input}} wpisów na kartę",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Użyj {{input}} linie na wpis w widoku poszerzonym",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Ukryj kolumny:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Czas",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filtr/reguła",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Kontekst",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Lokalność",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Lista",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabela",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Bez formatowania",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Otwórz",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Utwórz nowy raport",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Znajdź podobne raporty",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentacja",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Przeczytaj dokumentację na <code>uBlock/wiki</code>, by nauczyć się obsługi uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Pytania oraz pomoc",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Odpowiedzi na pytania oraz inne rodzaje pomocy są udzielane na subreddicie <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Problemy z filtrami/błędy w wyświetlaniu stron",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Zgłoś problemy z filtrami na poszczególnych stronach na <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"> trackerze błędów <code>uBlockOrigin/uAssets</code></span>. <u>Wymaga konta GitHub.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Ważne:</b> Unikaj innych podobnie działających dodatków razem z uBlock Origin, ponieważ może to powodować problemy z filtrami na poszczególnych stronach.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Porada:</b> Upewnij się, że listy filtrów są aktualne. <span data-url=\"logger-ui.html#_\">Rejestrator</span> jest głównym narzędziem do diagnozowania problemów związanych z filtrami.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Zgłaszanie błędów",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Zgłoś problemy związane bezpośrednio z uBlock Origin na <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\">trackerze błędów <code>uBlockOrigin/uBlock-issue</code></span>. <u>Wymaga konta GitHub.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Informacje pomocne w rozwiązywaniu problemów",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Poniżej znajdują się informacje techniczne które mogą być użyteczne gdy wolontariusze próbują pomóc ci w rozwiązaniu problemu.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Ważne:</b> Potencjalnie prywatne lub wrażliwe informacje są domyślnie ocenzurowane. Ocenzurowanie może utrudnić rozwiązanie problemu.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Zgłoś problem z filtrem",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Aby uniknąć obciążania wolontariuszy zduplikowanymi zgłoszeniami, sprawdź, czy problem nie został już zgłoszony.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Listy filtrów są aktualizowane codziennie. Sprawdź, czy twój problem nie został już rozwiązany w najnowszych listach filtrów.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Sprawdź, czy problem nadal występuje po odświeżeniu problematycznej strony internetowej.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Adres strony internetowej:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Strona internetowa…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "— Wybierz pozycję —",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Wyświetla reklamy lub ich pozostałości",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Ma nakładki lub inne niedogodności",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Wykrywa uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Ma problemy związane z prywatnością",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Działa nieprawidłowo, gdy włączony jest uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Otwiera niepożądane karty lub okna",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Oznacz stronę internetową jako „NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">„Not Safe For Work (nieodpowiednią w pracy)”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Ocenzuruj",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Nie cenzuruj",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Polityka prywatności",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Informacje o wydaniu",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Kod źródłowy (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Współtwórcy",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Kod źródłowy",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Tłumaczenia",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Listy filtrów",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Zewnętrzne zależności (kompatybilne z GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Własne listy filtrów uBO są dobrowolnie hostowane w następujących sieciach <a href=\"https://pl.wikipedia.org/wiki/Content_delivery_network\">CDN</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Losowo wybrana sieć CDN zostanie użyta, gdy lista filtrów będzie wymagała aktualizacji.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Utwórz kopię zapasową…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ublock-kopia-zapasowa_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Przywróć kopię z pliku…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Przywróć ustawienia domyślne…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Wszystkie twoje ustawienia zostaną zastąpione ustawieniami z kopii stworzonej {{time}}. Po zakończeniu uBlock₀ zostanie uruchomiony ponownie.\n\nPrzywrócić ustawienia z kopii zapasowej?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Danych nie można odczytać lub są nieprawidłowe",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Wszystkie twoje ustawienia zostaną usunięte i uBlock₀ zostanie ponownie uruchomiony.\n\nCzy chcesz przywrócić ustawienia domyślne?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Błąd sieci: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Dodać następujący URL do twoich list filtrów?\n\nTytuł: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Subskrybuj",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "minutę temu",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} min. temu",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "godzinę temu",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} godz. temu",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "wczoraj",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} dni temu",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Panel sterowania",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Pokaż rejestrator",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "wyłączony",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Strona zablokowana",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin zablokował wczytywanie następującej strony:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Powodem zablokowania jest filtr",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "bez parametrów",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Filtr znajduje się na liście:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Wstecz",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Zamknij to okno",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Nie ostrzegaj mnie ponownie o tej stronie",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Wyłącz rygorystyczne blokowanie dla {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Tymczasowo",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Na stałe",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Kontynuuj",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Eksportuj do chmury",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importuj z chmury",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importuj z chmury i połącz z aktualnymi ustawieniami",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Nazwa urządzenia:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Uwaga! Te ustawienia zmieniasz na własne ryzyko.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Wyślij",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Zastosuj zmiany",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Przywróć",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bajty",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Zablokuj element w ramce…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subskrybuj listę filtrów…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Tymczasowo zezwalaj na wyświetlanie dużych elementów multimedialnych",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Pokaż źródło…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Wprowadź skrót",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Przełącz przewijanie synchroniczne",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopiuj do schowka",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Zaznacz wszystko",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Włącz/wyłącz filtrowanie kosmetyczne",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Rozluźnij tryb blokowania",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Użycie pamięci dyskowej: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Kliknij, aby załadować",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Błędy: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Podczas uruchamiania przeglądarki nie można prawidłowo filtrować.\nAby zapewnić prawidłowe filtrowanie, wczytaj ponownie stronę.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Ten wpis musi być ostatni",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/pt_BR/messages.json b/src/_locales/pt_BR/messages.json
new file mode 100644
index 0000000..e644a4d
--- /dev/null
+++ b/src/_locales/pt_BR/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Finalmente, um bloqueador eficiente. Com baixo uso de memória e CPU.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Painel",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Aviso! Você tem mudanças não salvas",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Ficar",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignorar",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Configurações",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Listas de filtros",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Meus filtros",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Minhas regras",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Sites confiáveis",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Atalhos",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Coletor",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Sobre",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Suporte",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Visualizador de recursos",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Configurações avançadas",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Clique: desativa/ativa o uBlock₀ neste site.\n\nCtrl+clique: desativa o uBlock₀ só nesta página.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Clique pra desativar o uBlock₀ neste site.\n\nCtrl+clique pra desativar o uBlock₀ só nesta página.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Clique pra ativar o uBlock₀ neste site.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "requisições bloqueadas",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "nesta página",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "desde a instalação",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "ou",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Bloqueado(s) nesta página",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Bloqueado(s) desde a instalação",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domínios conectados",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Abrir painel",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Entrar no modo do elemento zapper",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Entrar no modo de seleção de elemento",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Abrir o coletor",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Reportar um problema com este site da web",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Alternar o bloqueio de todos os pop-ups neste site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Clique pra bloquear todos os pop-ups neste site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Clique pra não mais bloquear todos os pop-ups neste site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Alternar o bloqueio de grandes elementos de mídia neste site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Clique pra bloquear grandes elementos de mídia neste site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Clique pra não mais bloquear grandes elementos de mídia neste site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Alternar a filtragem cosmética neste site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Clique pra desativar a filtragem cosmética neste site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Clique pra ativar a filtragem cosmética neste site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Alternar o bloqueio de fontes remotas neste site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Clique pra bloquear fontes remotas neste site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Clique pra não mais bloquear fontes remotas neste site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Clique pra desativar o JavaScript neste site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Clique pra não mais desativar o JavaScript neste site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Janelas pop-up",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Grandes elementos de mídia",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Filtragem cosmética",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Fontes remotas",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Mais",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Menos",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Regras globais: esta coluna é para as regras as quais se aplicam a todos os sites.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Regras locais: esta coluna é para regras as quais se aplicam só ao site atual.\nRegras locais substituem regras globais.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Clique pra tornar suas mudanças permanentes.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Clique pra reverter suas mudanças.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "todos",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "imagens",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "de terceiros",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/Imagens de terceiros",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "scripts inline",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "scripts primários",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "scripts de terceiros",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "frames de terceiros",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domínios conectados",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} de {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Versão",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Criar",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Escolher",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Sair",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Pré-visualizar",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Filtros de rede",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Filtros cosméticos",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Clique, Ctrl-clique",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Bloquear elemento...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Ocultar os espaços reservados dos elementos bloqueados",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Mostrar o número de requisições bloqueadas no ícone",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Desativar dicas das ferramentas",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Fazer uso do menu de contexto aonde apropriado",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Cores amigáveis para daltônicos",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Aparência",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Cor de destaque personalizada",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Ativar suporte de armazenamento na nuvem",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Eu sou um usuário avançado",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Desativar pré-busca (pra impedir quaisquer requisições de redes bloqueadas)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Desativar auditoria dos hyperlinks",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Impedir o WebRTC de vazar endereços de IP locais",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Comportamento padrão",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Estes comportamentos padrão podem ser substituídos numa base por site",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Desativar filtragem cosmética",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Bloquear elementos de mídia maiores do que {{input}} KBs",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Bloquear fontes remotas",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Desativar JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Bloquear relatórios do CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Revelar nomes canônicos",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Avançado",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Recursos adequados só pra usuários técnicos.",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "configurações avançadas",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Última restauração:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Último backup:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} filtros de rede + {{cosmeticFilterCount}} filtros cosméticos de:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} usados de {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Auto-atualizar as listas de filtros",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Atualizar agora",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Limpar todos os caches",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Analisar e impor filtros cosméticos",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Os filtros cosméticos servem pra esconder elementos de uma página da web os quais são considerados um incômodo visual e os quais não podem ser bloqueados pelas engines de filtragem baseadas em requisições de rede.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignorar filtros cosméticos genéricos",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Os filtros cosméticos genéricos são aqueles filtros cosméticos os quais são destinados a serem aplicados em todos os sites da web. Ativar esta opção eliminará a sobrecarga da memória e da CPU adicionada as páginas da web como um resultado de lidar com filtros cosméticos genéricos.\n\nÉ recomendado ativar esta opção em dispositivos menos poderosos.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspender atividade da rede até que todas as listas de filtros estejam carregadas",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Listas de hospedeiros bloqueados",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Aplicar mudanças",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Embutidos",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Anúncios",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacidade",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Proteção contra malware, segurança",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Aborrecimentos",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multi-propósito",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regiões, idiomas",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Personalizar",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importar...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Uma URL por linha. As URLs inválidas serão ignoradas silenciosamente.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Desatualizada.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "visualizar conteúdo",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Última atualização: {{ago}}.\nClique para forçar uma atualização.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Atualizando...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Um erro de rede impediu o recurso de ser atualizado.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Um filtro por linha. Um filtro pode ser um simples nome de hospedeiro ou um filtro compatível com o EasyList. As linhas prefixadas com o <code>!</code> serão ignoradas.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Não adicionar filtros de fontes não confiáveis.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importar e anexar",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Exportar",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "meus-filtros-estáticos-do-ublock_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Aplicar mudanças",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Regras permanentes",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Regras temporárias",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Reverter",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Submeter",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Editar",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Salvar",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Descartar",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importar do arquivo...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Exportar pro arquivo",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "minhas-regras-dinâmicas-do-ublock_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Lista das suas regras de filtragem dinâmica.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Regras da sintaxe: <code>ação do tipo de destino da origem</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>documentação completa</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Organizar:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Tipo de regra",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Fonte",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destino",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "As diretivas dos sites confiáveis ditam em quais páginas da web o uBlock Origin deve ser desativado. Uma entrada por linha. ",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importar e anexar",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Exportar",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "meus-sites-confiaveis-do-ublock_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Aplicar mudanças",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Tipo",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domínio",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filtro",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Todos",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Sem abas",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Aba atual",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Recarregar o conteúdo da aba",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Alternar o inspetor do DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Alternar o painel do pop-up",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "Wiki do uBlock Origin: O coletor",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Limpar coletor",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pausar coletor (descartar todos os dados que entram)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Despausar coletor",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Alternar filtragem do coletor",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtrar conteúdo do coletor",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Opções de filtragem do coletor",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Não",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "importante",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "bloqueado",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "permitido",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modificado",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "primário",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "de terceiros",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Detalhes",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filtro",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Lista de filtros",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Regra",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Contexto",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Contexto raiz",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Grupos",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Tipo",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Regra da URL",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Contexto:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Tipo:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Filtro estático",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} requisições da rede de {{type}} {{br}}cujo endereço de URL corresponde {{url}} {{br}}e o qual se origina em {{origin}},{{br}}{{importance}} há um filtro de exceção correspondente.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Bloquear",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Permitir",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "tipo “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "qualquer tipo",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "de “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "de qualquer lugar",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "exceto quando",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "mesmo se",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Filtro estático <code>{{filter}}</code> achado em:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "O filtro estático não pôde ser achado em nenhuma das listas de filtros ativadas atualmente",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "As entradas do coletor que não preencherem todas as três condições abaixo serão descartadas automaticamente:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Preservar entradas dos últimos {{input}} minutos",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preservar no máximo {{input}} carregamentos de página por aba",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Preservar no máximo {{input}} entradas por aba",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Usar {{input}} linhas por entrada no modo expandido verticalmente",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Ocultar colunas:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Hora",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filtro/regra",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Contexto",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Grupos",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Lista",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabela",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Simples",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Formatação",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Abrir",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Criar um novo relatório",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Achar relatórios similares",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentação",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Leia a documentação em <code>uBlock/wiki</code> para saber sobre todos os recursos do uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Perguntas e suporte",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Respostas a perguntas e outros tipos de suporte de ajuda são fornecidas no subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Problemas com o filtro/o site da web está quebrado",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Reporte problemas com os filtros em sites específicos da web no <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\">rastreador de problemas do <code>uBlockOrigin/uAssets</code></span>. <u>Requer uma conta no GitHub.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Importante:</b> Evite usar outros bloqueadores com propósito similar junto do uBlock Origin pois isto pode causar problemas com filtros em sites da web específicos.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Dicas:</b> Certifique-se que sua lista de filtros está atualizada. <span data-url=\"logger-ui.html#_\">O coletor</span> é a ferramenta primária pra diagnosticar problemas relacionados com os filtros.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Relatório de erro",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Reporte problemas com o próprio uBlock Origin no <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code>rastreador de problemas</span>. <u>Requer uma conta no GitHub.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Informações para solução de problemas",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Abaixo estão informações técnicas que poderiam ser úteis quando voluntários estão tentando ajudar você a resolver um problema.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Atenção:</b> Informações potencialmente privadas ou sensíveis são eliminadas por padrão. As informações eliminadas podem tornar mais difícil resolver um problema.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Reportar um problema com o filtro",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Pra evitar sobrecarregar os voluntários com relatórios duplicados por favor certifique-se que o problema já não foi reportado.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "As listas de filtros são atualizadas diariamente. Certifique-se que seu problema ainda não foi abordado nas listas de filtros mais recentes.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verifique se o problema ainda existe após recarregar a página da Web problemática.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Endereço da página da web:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "A página da web...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "— Escolha uma entrada —",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Mostra os anúncios ou restos de anúncios",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Tem sobreposições ou outros incômodos",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detecta o uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Tem problemas relacionados a privacidade",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Funciona mal quando o uBlock Origin está ativado",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Abre abas ou janelas indesejadas",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Rotula a página da web como \"NSFW\" (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">\"Não é Seguro no Trabalho\"</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redigir",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Não redigir",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Política de privacidade",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Código fonte (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Colaboradores",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Código fonte",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Traduções",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Listas de filtros",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dependências externas (compatíveis com GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "As próprias listas de filtros do uBO estão hospedadas gratuitamente nos seguintes <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>: ",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Um CDN escolhido aleatoriamente é usado quando uma lista de filtros precisa ser atualizada",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Fazer backup no arquivo",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "meu-backup-do-ublock_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Restaurar do arquivo...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Resetar para as configurações padrão…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Todas as suas configurações serão sobrescritas usando dados do backup salvos em {{time}}, e o uBlock₀ reiniciará. \n\nSobrescrever todas as configurações existentes usando os dados do backup?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Os dados não puderam ser lidos ou são inválidos",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Todas as suas configurações serão removidas, e o uBlock₀ reiniciará.\n\nResetar o uBlock₀ para as configurações de fábrica?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Erro da rede: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Adicionar a seguinte URL a sua lista de filtros personalizados?\n\nTítulo: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Subscrever",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "um minuto atrás",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} minutos atrás",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "uma hora atrás",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} horas atrás",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "um dia atrás",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} dias atrás",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Mostrar Painel",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Mostrar Coletor",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "desligado",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Página bloqueada",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "O uBlock Origin impediu a seguinte página de carregar:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Por causa do seguinte filtro:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "sem parâmetros",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Achado em:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Voltar",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Fechar esta janela",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Não me avisar de novo sobre este site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Desativar o bloqueio restrito para {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Temporariamente",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanentemente",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Prosseguir",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Exportar pro armazenamento na nuvem",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importar do armazenamento na nuvem",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importar do armazenamento na nuvem e unir com as configurações atuais",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Este nome de dispositivo:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Aviso! Mude estas configurações avançadas por sua própria conta e risco.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Submeter",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Aplicar mudanças",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Reverter",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bytes",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Bloquear elemento no frame...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subscrever na lista de filtros... ",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Permitir temporariamente grandes elementos de mídia",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Visualizar código fonte…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Digite um atalho",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Alternar bloqueio de rolagem",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Copiar pra área de transferência",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Selecionar tudo",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Alternar filtragem cosmética",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relaxar modo de bloqueio",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Armazenamento usado: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KBs",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MBs",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GBs",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Clique pra carregar",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Erros: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Não conseguiu filtrar apropriadamente na inicialização do navegador. Recarregue a página pra garantir a filtragem apropriada.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Esta entrada deve ser a última",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/pt_PT/messages.json b/src/_locales/pt_PT/messages.json
new file mode 100644
index 0000000..15019cb
--- /dev/null
+++ b/src/_locales/pt_PT/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Finalmente, um bloqueador eficiente. Leve na CPU e memória.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Painel de controlo",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Atenção! Tem alterações não guardadas",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Permanecer",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignorar",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Definições",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Listas de filtros",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Os meus filtros",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "As minhas regras",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Sites fidedignos",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Atalhos",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Registador",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Acerca",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Suporte",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Visualizador de recursos",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Definições avançadas",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Clique: desativar/ativar o uBlock₀ para este site.\n\nCtrl+clique: desativar o uBlock₀ apenas nesta página.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Clique para desativar o uBlock₀ para este site.\n\nCtrl+clique para desativar o uBlock₀ apenas nesta página.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Clique para ativar o uBlock₀ para este site.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "pedidos bloqueados",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "nesta página",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "desde a instalação",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "ou",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Bloqueado(s) nesta página",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Bloqueado(s) desde a instalação",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domínios ligados",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Abrir o painel de controlo",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Entrar no modo \"zapper\" de elemento",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Entrar no modo de seleção de elemento",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Abrir o registador",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Relatar um problema neste website",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Alternar o bloqueio de todos os popups para este site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Clique para bloquear todos os popups neste site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Clique para deixar de bloquear todos os popups neste site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Alternar o bloqueio de elementos multimédia grandes para este site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Clique para bloquear elementos multimédia grandes neste site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Clique para deixar de bloquear elementos multimédia grandes neste site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Alternar a filtragem cosmética para este site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Clique para desativar a filtragem cosmética neste site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Clique para ativar a filtragem cosmética neste site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Alternar o bloqueio de tipos de letra remotos para este site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Clique para bloquear os tipos de letra remotos neste site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Clique para deixar de bloquear os tipos de letra remotos neste site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Clique para desativar JavaScript neste site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Clique para deixar de desativar JavaScript neste site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Janelas pop-up",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Elementos multimédia grandes",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Filtragem cosmética",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Tipos de letra remotos",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Mais",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Menos",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Regras globais: esta coluna é para as regras que se aplicam a todos os sites.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Regras locais: esta coluna é para as regras que se aplicam apenas a este site.\nAs regras locais sobrepõem-se às regras globais.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Clique para tornar as suas alterações permanentes.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Clique para reverter as suas alterações.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "tudo",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "imagens",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "terceiros",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/imagens de terceiros",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "scripts inline",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "scripts primários",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "scripts de terceiros",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "frames de terceiros",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domínios ligados",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} de {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Versão",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Criar",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Escolher",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Sair",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Pré-visualizar",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Filtros de rede",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Filtros cosméticos",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Clique, Ctrl-clique",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Bloquear elemento…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Ocultar espaços ocupados por elementos bloqueados",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Mostrar o número de pedidos bloqueados no ícone",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Desativar dicas",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Fazer uso do menu de contexto onde apropriado",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Cores amigáveis para daltónicos",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Aparência",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Cor de destaque personalizada",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Ativar suporte para armazenamento na nuvem",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Sou um utilizador avançado",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Desativar pré-obtenção (para impedir qualquer ligação para pedidos de rede bloqueados)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Desativar auditoria de hiperligações",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Impedir o WebRTC de vazar endereços IP locais",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Comportamento predefinido",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Estes comportamentos predefinidos podem ser substituídos numa base por site",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Desativar filtragem cosmética",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Bloquear elementos multimédia maiores do que {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Bloquear tipos de letra remotos",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Desativar JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Bloquear relatórios CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Desvendar nomes canónicos",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Avançadas",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Funcionalidades adequadas apenas para utilizadores avançados",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "definições avançadas",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Último restauro:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Última cópia de segurança:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} filtros de rede + {{cosmeticFilterCount}} filtros cosméticos a partir de:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} utilizados de {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Atualizar automaticamente listas de filtros",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Atualizar agora",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Limpar todas as caches",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Analisar e aplicar filtros cosméticos",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Os filtros cosméticos servem para ocultar elementos numa página web que sejam considerados incómodo visual e que não podem ser bloqueados pelo motor de filtragem baseado em pedidos de rede.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignorar filtros cosméticos genéricos",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Os filtros cosméticos genéricos são destinados para aplicação em todos os sites. Se ativar esta opção irá eliminar o excesso de utilização da memória e CPU, como resultado da manipulação dos filtros cosméticos genéricos.\n\nRecomendamos a ativação desta opção em dispositivos mais fracos.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspender a atividade da rede até que todas as listas de filtros sejam carregadas",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Listas de servidores bloqueados",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Aplicar alterações",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Integrados",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Anúncios",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privacidade",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Proteção contra malware, segurança",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Inconveniências",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multifunções",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regiões e idiomas",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Personalizados",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importar…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Um URL por linha. Os URLs inválidos serão ignorados silenciosamente.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Desatualizada.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "ver conteúdo",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Última atualização: {{ago}}.\nClique para forçar uma atualização.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "A atualizar…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Um erro de rede impediu que o recurso fosse atualizado.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Um filtro por linha. Um filtro pode ser um simples nome de anfitrião, ou um filtro compatível com a EasyList. Linhas começadas por <code>!</code> serão ignoradas.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Não adicione filtros de fontes não confiáveis.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importar e anexar…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Exportar…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-custom-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Aplicar alterações",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Regras permanentes",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Regras temporárias",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Reverter",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Aplicar",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Editar",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Guardar",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Descartar",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importar a partir de ficheiro…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Exportar para ficheiro…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Lista das suas regras de filtragem dinâmica.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Regra de sintaxe: <code>origem destino tipo ação</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>documentação completa</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Ordenar:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Tipo de regra",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Origem",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destino",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "As diretivas de sites fidedignos determinam em que páginas web o uBlock Origin deve ser desativado. Uma entrada por linha.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importar e anexar…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Exportar…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Aplicar alterações",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Tipo",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domínio",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filtro",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Todos",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Sem separador",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Separador atual",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Recarregar o conteúdo do separador",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Alternar o inspetor DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Alternar o painel de popup",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: O registador",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Limpar registador",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pausar registador (descartar todos os dados a receber)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Retomar registador",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Alternar filtragem do registador",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtrar conteúdo do registo",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Opções de filtragem do registador",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Não",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "bloqueado",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "permitido",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modificado",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "primário",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "terceiro",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Detalhes",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filtro",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Lista de filtros",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Regra",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Contexto",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Contexto raiz",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Tipo de relação",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Tipo",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Regra do URL",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Contexto:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Tipo:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Filtro estático",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} pedidos de rede de {{type}} {{br}}cujo endereço URL corresponde a {{url}} {{br}}e que origina {{origin}},{{br}}{{importance}} existe um filtro de exceção correspondente.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Bloquear",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Permitir",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "tipo \"{{type}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "qualquer tipo",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "de \"{{origin}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "de qualquer lugar",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "exceto quando",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "mesmo se",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Filtro estático <code>{{filter}}</code> encontrado em:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "O filtro estático não pôde ser encontrado em quaisquer das listas de filtros ativadas atualmente",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Entradas do registador que não preenchem todas as três condições abaixo serão automaticamente descartadas:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Preservar entradas dos últimos {{input}} minutos",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preservar no máximo {{input}} carregamentos de página por separador",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Preservar no máximo {{input}} entradas por separador",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Utilizar {{input}} linhas por entrada no modo verticalmente expandido",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Ocultar colunas:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Hora",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filtro/regra",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Contexto",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Tipo de relação",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Lista",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabela",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Sem formatação",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Abrir",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Criar novo relatório",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Encontrar relatórios semelhantes",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentação",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Leia a documentação em <code>uBlock/wiki</code> para saber mais acerca de todas as funcionalidades do uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Perguntas e suporte",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "As respostas às perguntas e outros tipos de ajuda são fornecidas no subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Problemas de filtros/website está com falhas",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Relate problemas de filtros com websites específicos para o <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\">controlador de problemas <code>uBlockOrigin/uAssets</code></span>. <u>Requer uma conta GitHub.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Importante:</b> evite a utilização de outros bloqueadores com propósitos semelhantes juntamente com o uBlock Origin, dado que isto pode causar problemas com filtros em websites específicos.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Dicas:</b> certifique-se de que as suas listas de filtros estão atualizadas. <span data-url=\"logger-ui.html#_\">O registador</span> é a ferramenta principal para diagnosticar problemas relacionados com filtros.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Relatório de erros",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Relate problemas com o próprio uBlock Origin para o <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\">controlador de problemas <code>uBlockOrigin/uBlock-issue</code></span>. <u>Requer uma conta GitHub.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Informação sobre resolução de problemas",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Abaixo encontra-se informação técnica que pode ser útil quando voluntários estão a tentar ajudar-lhe a resolver um problema.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Importante:</b> a informação potencialmente privada ou sensível é redigida por predefinição. A informação redigida pode tornar mais difícil a resolução de um problema.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Relatar um problema de filtro",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Para evitar sobrecarregar os voluntários com relatórios duplicados, por favor verifique se o problema ainda não foi relatado.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "As listas de filtros são atualizadas diariamente. Certifique-se de que o seu problema ainda não foi abordado nas listas de filtros mais recentes.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verifique se o problema ainda existe após o recarregamento da página web problemática.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Endereço da página web:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "A página web…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Escolha uma entrada --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Mostra anúncios ou restos de anúncios",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Tem sobreposições ou outros incómodos",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Deteta o uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Tem problemas relacionados com a privacidade",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Falha quando o uBlock Origin é ativado",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Abre separadores ou janelas indesejáveis",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Rotular a página web como “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Não seguro para o trabalho”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redigir",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Não redigir",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Política de privacidade",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Registo de alterações",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Código fonte (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contribuidores",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Código fonte",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Traduções",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Listas de filtros",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dependências externas (compatíveis com GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "As listas de filtros do uBO estão livremente hospedadas nas seguintes <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Uma CDN escolhida aleatoriamente é utilizada quando uma lista de filtros precisar de ser atualizada.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Copiar para ficheiro…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Restaurar a partir de ficheiro…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Restaurar predefinições…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Todas as suas definições serão substituídas utilizando os dados da cópia de segurança de {{time}}, e o uBlock₀ irá reiniciar.\n\nSubstituir todas as definições existentes utilizando os dados da cópia de segurança?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Os dados não puderam ser lidos ou são inválidos",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Todas as suas definições serão removidas e o uBlock₀ será reiniciado.\n\nRestaurar predefinições do uBlock₀?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Erro de rede: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Adicionar o seguinte URL à sua lista de filtros personalizados?\n\nTítulo: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Subscrever",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "há um minuto",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "há {{value}} minutos",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "há uma hora",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "há {{value}} horas",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "há um dia",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "há {{value}} dias",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Mostrar painel de controlo",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Mostrar registador",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "desativado",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Página bloqueada",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "O uBlock Origin impediu que a seguinte página fosse carregada:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Devido ao seguinte filtro:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "sem parâmetros",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Encontrado em:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Retroceder",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Fechar esta janela",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Não me avisar novamente acerca deste site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Desativar bloqueio estrito para {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Temporariamente",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanentemente",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceder",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Exportar para a nuvem",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importar a partir da nuvem",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importar a partir da nuvem e juntar às definições atuais",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "... ...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Nome deste dispositivo:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Atenção! Altere estas definições avançadas por sua conta e risco.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Submeter",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Aplicar alterações",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Reverter",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bytes",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Bloquear elemento no frame…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subscrever à lista de filtros…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Permitir temporariamente elementos multimédia grandes",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Ver código fonte…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Digitar um atalho",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Alternar deslocamento bloqueado",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Copiar para a área de transferência",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Selecionar tudo",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Alternar filtragem cosmética",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relaxar modo de bloqueio",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Armazenamento utilizado: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Clique para carregar",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Erros: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Não foi possível filtrar adequadamente no arranque do navegador. Recarregue a página para assegurar uma filtragem adequada.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Esta entrada deve ser a última",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/ro/messages.json b/src/_locales/ro/messages.json
new file mode 100644
index 0000000..a338cbe
--- /dev/null
+++ b/src/_locales/ro/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "În sfârșit, un blocant eficient. Are un impact mic asupra procesorului și memoriei.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Panou de control",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Atenție! Ai modificări nesalvate",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Așteaptă",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignoră",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Opțiuni",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Liste de filtre",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Filtrele mele",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Regulile mele",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Situri de încredere",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Comenzi rapide",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Jurnal",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Despre",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Ajută-ne",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Vizualizator de resurse",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Setări avansate",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Clic: dezactivează/activează uBlock₀ pentru acest sait.\n\nCtrl+clic: dezactivează uBlock₀ doar pe această pagină.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Clic ca să dezactivezi uBlock₀ pe acest site.\n\nCtrl+clic ca să dezactivezi uBlock₀ doar pe această pagină.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Clic pentru a activa uBlock₀ pe acest site.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "cereri blocate",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "pe această pagină",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} sau {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "de la instalare",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "sau",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blocate pe această pagină",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blocate de la instalare",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domenii conectate",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Deschide panoul de control",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Accesați modul de eliminare elemente",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Modul alege element",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Deschide jurnalul",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Raportează o eroare cu acest sit",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Comută blocarea tuturor popup-urilor pentru acest sait",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Clic pentru a bloca toate popup-urile pe acest site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Clic pentru a nu mai bloca toate popup-urile pe acest site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Modifică modul de blocare a elementelor media de mari dimensiuni pentru acest sait",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Clic pentru a bloca elementele media de mari dimensiuni pe acest site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Clic pentru a nu mai bloca elementele media de mari dimensiuni pe acest site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Comută filtrarea vizuală pentru acest sait",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Clic pentru a dezactiva filtrele vizuale pe acest site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Clic pentru a activa filtrele vizuale pe acest site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Comută blocarea fonturilor externe pentru acest sait",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Clic pentru a bloca fonturile externe pe acest site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Clic pentru a nu mai bloca fonturile externe pe acest site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Apasă pentru a dezactiva JavaScript pe acest site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Apasă pentru a nu mai dezactiva JavaScript pe acest site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Ferestre suprapuse",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Elemente media mari",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Filtre vizuale",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Fonturi externe",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Mai multe",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Mai puțin",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Reguli globale: această coloană este pentru regulile care se aplică tuturor site-urilor.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Reguli locale: această coloană este pentru regulile care se aplică doar site-ului curent.\nRegulile locale suprascriu pe cele globale.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Apasă pentru a face modificările permanente.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Apasă pentru a renunța la modificări.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "tot",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "imagini",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "terțe",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/imagini terțe",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "scripturi înglobate",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "scripturi din saitul primar",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "scripturi din saituri terțe",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "cadre din saituri terțe",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domenii conectate",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} din {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Versiune",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "cadru",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Creează",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Alege",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Ieșire",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Previzualizare",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Filtre de rețea",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Filtre vizuale",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Clic, Ctrl-clic",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Blochează elementul…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Ascunde substituenții elementelor blocate",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Arată numărul cererilor blocate pe pictogramă",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Dezactivează indiciile",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Folosește meniul contextual unde este cazul",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Accesibil pentru daltonism",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Aspect",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Aspect",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Culoare de accentuare personalizată",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Activează suportul pentru stocare în cloud",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Sunt un utilizator avansat",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Dezactivează preluarea în avans (pentru a preveni orice conexiune ce s-ar încadra în cereri de rețea blocate)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Dezactivează auditarea hiperlinkurilor",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Previne dezvăluirea adreselor IP locale prin intermediul protocolului WebRTC",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Comportament implicit",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Aceste comportamente implicite pot fi suprascrise pentru fiecare sait în parte",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Dezactivează filtrele cosmetice",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Blochează elementele media mai mari de {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Blochează fonturile de la distanță",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Dezactivare JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Blochează rapoartele CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Dezvăluie numele canonice",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Avansate",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Proprietăți potrivite pentru utilizatorii avansați",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "setări avansate",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Ultima restaurare:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Ultima copie de siguranță:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} filtre rețea + {{cosmeticFilterCount}} filtre vizuale din:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} folosite din {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Actualizare automată a listelor de filtre.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Actualizează acum",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Golește tot din memoria tampon",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Citește și aplică filtrele vizuale.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Filtrele cosmetice servesc la ascunderea elementelor dintr-o pagină web care sunt considerate a fi deranjante din punct de vedere vizual și care nu pot fi blocate de motoarele de filtrare bazate pe solicitări de rețea.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignoră filtrele cosmetice generice",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "<p>FIltrele cosmetice generice sunt acelea care se aplică tuturor site-urilor.<p>Deși sunt folosite eficient de uBlock₀, filtrele cosmetice generice pot contribui semnificativ la creșterea cantității de memorie și a utilizării procesorului pe anumite pagini, în special cele de mari dimensiuni și care sunt încărcate pentru mult timp.<p>Activarea acestei opțiuni va elimina încărcarea suplimentară a memoriei și a procesorului rezultată în urma folosirii filtrelor cosmetice generice, și, de asemenea, va micșora impactul uBlock₀ asupra sistemului.<p>Se recomandă activarea acestei opțiuni pe dispozitivele mai puțin performante.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspendă activitatea în rețea până când se încarcă toate listele cu filtre",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lista adreselor blocate",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Aplică modificările",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Încorporate",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Reclame",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Intimitate",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Domenii malițioase",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Neplăceri",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multifuncționale",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regiuni, limbi",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Personalizare",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importă…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "O adresă pe linie. Adresele nevalide vor fi ignorate fără avertizare.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "învechit",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "vezi conținut",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Ultima actualizare: {{ago}}.\nClic pentru a forța o actualizare.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Se actualizează…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "O eroare de rețea a împiedicat actualizarea resursei.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Un filtru pe linie. Un filtru poate fi un simplu nume de gazdă sau un filtru compatibil EasyList. Liniile precedate de <code>!</code> vor fi ignorate.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Nu adăuga filtre din surse nesigure.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importă și adaugă",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Exportă",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "filtrele-mele-statice-ublock_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Aplică modificările",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Reguli permanente",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Reguli temporare",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Înlătură",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Aplică",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Modifică",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Salvează",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Elimină",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importă din fișier…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Exportă în fișier...",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "regulile-mele-dinamice-ublock_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Lista regulilor tale de filtrare dinamică.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Sintaxa pentru regulă: <code>sursă destinație tip acțiune</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>documentație</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sortare:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Tipul regulei",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Sursa",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destinaţia",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Directivele privind siturile de încredere stabilesc pe ce pagini web trebuie dezactivat uBlock Origin. O intrare pe linie.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importă și adaugă",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Exportă",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "situri-de-încredere-ublock_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Aplică modificările",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Tip",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domeniu",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filtru",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Tot",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Fără tab-uri",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Fila curentă",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Reîncarcă conținutul tab-ului",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Comută inspector DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Comută panou pop-up",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: Jurnal",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Şterge logger-ul",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Oprește logger-ul(ignoră tot traficul primit)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Pornește logger-ul",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Comută filtrarea jurnalierului",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtrează conținutul jurnalierului",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Opțiunile de filtrare ale jurnalierului",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Nu",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "activ",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blocat",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "permis",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modificat",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "primare",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "terțe",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Detalii",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filtru",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Lista filtrelor",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Regulă",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Context",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Context de bază",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Apartenență",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Tip",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Regulă URL",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Context:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Tip:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Filtru static",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} cererile de rețea de {{type}} {{br}}când adresa URL corespunde cu {{url}} {{br}}și care își au originea {{origin}},{{br}}{{importance}} există un filtru corespondent de excepție.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Blochează",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Permite",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "tip “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "orice tip",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "de la “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "de oriunde",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "exceptând când",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "chiar dacă",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Filtrul static <code>{{filter}}</code> găsit în:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Filtrul static <code>{{filter}}</code> nu se găsește în niciuna dintre listele de filtre activate",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Intrările din jurnal care nu îndeplinesc cele trei condiții de mai jos vor fi respinse automat:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Păstrează intrările din ultimele {{input}} minute",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Păstrează cel mult {{input}} încărcări de pagină pe filă",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Păstrează cel mult {{input}} intrări pe filă",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Folosește {{input}} linii pentru intrările în modul vertical expandat",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Ascunde coloanele:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Timp",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filtru/regulă",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Context",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Apartenență",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Listă",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabel",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Simplu",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Marcaj",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Deschide",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Crează o nouă sesizare",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Găsește sesizări similare",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentație",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Citește documentația de la <code>uBlock/wiki</code> pentru a învăța totul despre caracteristicile uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Întrebări și ajutor",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Răspunsuri la întrebări și alte informații de ajutor sunt disponibile pe subreddit-ul <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Probleme cu filtrele/siturile defecte",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Raportează probleme cu filtrele pe anumite situri în <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> centralizatorul de probleme</span>. Necesită un cont GitHub.",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": ">Important:</b> Evită să folosești alte extensii cu același scop ca uBlock Origin, deoarece pot exista probleme cu filtrele pe anumite situri.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Sfat:</b> Asigurați-vă că filtrele sunt actualizate. <span data-url=\"logger-ui.html#_\">Registrul cu înregistrări</span> este unealta principală pentru diagnosticarea problemelor cu filtrele.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Raportare defecte",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Raportați probleme cu uBlock Origin în <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code>centralizatorul de probleme</span>. Necesită un cont GitHub.",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Informații pentru depanare",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Mai jos sunt informații care îi pot ajuta pe voluntarii care încearcă să vă ajute în rezolvarea problemelor.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Informațiile potențial private sau sensibile sunt redactate implicit. Aceasta poate face mai dificilă rezolvarea problemelor.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Raportează o problemăcu filtrele",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Pentru a evita suprasolicitarea voluntarilor, vă rugăm să verificați dacă această problemă nu a fost deja raportată.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Listele cu filtre sunt actualizate zilnic. Verificați că problema dumneavoastră nu a fost rezolvată în cele mai recente liste cu filtre.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verificați că problema există și după reîncărcarea paginii.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Adresa paginii web:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Pagina web…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Alege o intrare --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Arată reclame sau resturi de reclame",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Are acoperiri sau alte neplăceri",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detectează uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Are probleme privind confidențialitatea",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Nu mai funcționează când uBlock Origin este activat",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Deschide file sau ferestre nedorite",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Etichetează pagina ca fiind „NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redactează",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Anulează redactarea",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Politică de confidențialitate",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Jurnal de modificări",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Cod sursă (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contribuitori",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Cod sursă",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Traduceri",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Liste de filtre",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dependențe externe (compatibile GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "FIltrele proprii uBO sunt găzduite gratuit de următoarele <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">rețele de distribuție de conținut</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Un CDN ales aleator va fi folosit când listele de filtre vor trebui actualizate",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Copie de rezervă…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "salvarea-mea-ublock_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Restabilește din fișier…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Restabilește reglările inițiale…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Toate opțiunile vor fi suprascrise cu datele din {{time}} și uBlock₀ va fi repornit.\n\nDorești să suprascrii toate opțiunile folosind datele salvate?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Datele nu au putut fi citite sau sunt nevalide",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Toate configurările tale vor fi eliminate și uBlock₀ va reporni.\n\nRestaurează uBlock₀ la configurările din fabrică?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Eroare de rețea: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock: Adaugă următorul URL în lista ta de filtre personalizate?\n\nTitlu: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Abonează-te",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "acum un minut",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "acum {{value}} minute",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "acum o oră",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "acum {{value}} ore",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "în urmă cu o zi",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "în urmă cu {{value}} zile",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Deschide panoul de control",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Arată jurnalul",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "dezactivat",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Pagină blocată",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin a prevenit încărcarea acestei pagini:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Din cauza următorului filtru",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "fără parametri",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Găsit în:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Înapoi",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Închide această fereastră",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Nu mă avertiza din nou despre acest sit",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Dezactivează blocarea strictă pentru {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Temporar",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanent",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Continuă",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Exportă către stocarea în cloud",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importă din stocarea în cloud",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importă din stocarea în cloud și combină cu setările curente",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Numele acestui dispozitiv:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Atenție: schimbă aceste setări avansate pe propriul risc.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Trimite",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Aplică modificările",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Înlătură",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "octeți",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Blochează un element în cadru…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Înscrie-te la lista de filtre…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Permite temporar elementele media mari",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Vezi sursa",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Tastează o comandă rapidă",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Activează/Dezactivează Blocarea răsfoirii",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Copiază în clipboard",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Alege tot",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Comută filtrele cosmetice",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relaxați modul de blocare",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Spațiu de stocare utilizat: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Apasă pentru a încărca",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Erori: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Nu s-a putut filtra corespunzător in timpul lansării browser-ului. Reîncarcați paginile",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Aceasta intrare trebuie sa fie ultima",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/ru/messages.json b/src/_locales/ru/messages.json
new file mode 100644
index 0000000..1702d1b
--- /dev/null
+++ b/src/_locales/ru/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock₀",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Наконец-то, быстрый и эффективный блокировщик для браузеров.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Панель управления",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Внимание! У вас есть несохраненные изменения",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Остаться",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Игнорировать",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Настройки",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Списки фильтров",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Мои фильтры",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Мои правила",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Доверенные сайты",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Сочетания клавиш",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Логгер",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "О расширении",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Поддержка",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Активы",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Расширенные настройки",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Клик: отключить/включить uBlock₀ для этого сайта.\n\nCtrl+клик: отключить uBlock₀ только на этой странице.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Кликните, чтобы отключить uBlock₀ для этого сайта.\nCtrl+клик, чтобы отключить uBlock₀ только на этой странице.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Кликните, чтобы активировать uBlock₀ для этого сайта.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "запросов заблокировано",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "на этой странице",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "с момента установки",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "или",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Заблокировано на этой странице",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Заблокировано с момента установки",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Доменов подключено",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Открыть панель управления",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Режим мгновенного временного скрытия элемента",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Войти в режим выбора элементов",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Открыть логгер",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Сообщить о проблеме на данном сайте",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Вкл/Выкл блокировку всех всплывающих окон на этом сайте",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Нажмите, чтобы блокировать все всплывающие окна на этом сайте",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Нажмите, чтобы отключить блокировку всех всплывающих окон на этом сайте",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Вкл/Выкл блокировку больших медиа-элементов на этом сайте",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Нажмите для включения блокировки больших медиа-элементов на этом сайте",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Нажмите для отключения блокировки больших медиа-элементов на этом сайте",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Вкл/Выкл косметическую фильтрацию на этом сайте",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Нажмите, чтобы отключить косметическую фильтрацию на этом сайте",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Нажмите, чтобы включить косметическую фильтрацию на этом сайте",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Вкл/Выкл блокировку сторонних шрифтов на этом сайте",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Нажмите для блокировки сторонних шрифтов на этом сайте",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Нажмите для отключения блокировки сторонних шрифтов на этом сайте",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Нажмите, чтобы отключить JavaScript на этом сайте",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Кликните, чтобы перестать блокировать JavaScript на этом сайте",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Всплывающие окна",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Большие медиа-элементы",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Косметическая фильтрация",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Загружаемые шрифты",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Больше",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Меньше",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Глобальные правила: этот столбец предназначен для правил, применяемых ко всем сайтам.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Локальные правила: этот столбец предназначен для правил, применяемых только к текущему сайту.\nЛокальные правила переопределяют глобальные.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Нажмите, чтобы сохранить изменения.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Нажмите, чтобы отменить изменения.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "все",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "изображения",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "3rd-party ресурсы",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "3rd-party CSS/изображения",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "inline-скрипты",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1st-party скрипты",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "3rd-party скрипты",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "3rd-party фреймы",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "доменов подключено",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} из {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Версия",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "скрипт",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "фрейм",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Создать",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Выбрать",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Выйти",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Предпросмотр",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Сетевые фильтры",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Косметические фильтры",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Клик, Ctrl+клик",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Блокировать элемент...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Скрыть оставшееся от заблокированных элементов место",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Показывать количество заблокированных запросов на иконке",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Отключить всплывающие подсказки",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Использовать контекстное меню, где возможно",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Цветовая схема для дальтоников",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Настройки интерфейса",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Тема",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Выбрать акцент цветового оформления",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Включить поддержку облачного хранилища",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Я — опытный пользователь",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Отключить предзагрузку для предотвращения подключений для заблокированных запросов",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Отключить проверку гиперссылок",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Предотвратить утечку локального IP-адреса через WebRTC",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Поведение по умолчанию",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Эти настройки могут быть указаны для каждого сайта отдельно",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Отключить косметические фильтры",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Блокировать медиа-элементы больше {{input}} KБ",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Блокировать сторонние шрифты",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Отключить JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Блокировать CSP-отчёты",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Раскрывать CNAME записи",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Расширенные настройки",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Функции, предназначенные для технических пользователей",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "расширенные настройки",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Последнее восстановление:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Последняя резервная копия:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} сетевых фильтров + {{cosmeticFilterCount}} косметических фильтров из:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} используется из {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Автообновление списков фильтров",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Обновить сейчас",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Очистить все кэши",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Парсить и применять косметические фильтры",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Косметические фильтры применяются на веб-странице для скрытия элементов, которые создают визуальные помехи, и которые не могут быть заблокированы механизмом фильтрации сетевых запросов.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Игнорировать общие косметические фильтры",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Общие косметические фильтры — это те косметические фильтры, которые должны применяться на всех веб-сайтах. Включение этой опции снизит потребление памяти и избавит процессор от обработки общих косметических фильтров на веб-страницах.\n\nРекомендуется включить эту опцию на недостаточно мощных устройствах.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Приостановить сетевую активность, пока не запустятся все списки фильтров",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Список заблокированных хостов",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Применить изменения",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Встроенные",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Реклама",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Приватность",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Защита от вредоносных сайтов, безопасность",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Раздражающие элементы",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Многоцелевые",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Регионы, языки",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Пользовательские",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Импортировать...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Один URL на строку. Неверные URL будут проигнорированы без предупреждения.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Устарел.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "показать содержимое",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Последнее обновление: {{ago}}.\nКликните для принудительного обновления.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Обновление...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "В результате ошибки сети обновление не произошло.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Одно правило на строку. Правилом может быть имя сайта или EasyList-совместимый фильтр. Строки, начинающиеся с <code>!</code>, будут проигнорированы.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Не добавляйте фильтры из ненадёжных источников.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Импортировать и добавить…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Экспортировать…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Применить изменения",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Постоянные правила",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Временные правила",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Вернуть",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Утвердить",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Изменить",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Сохранить",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Сбросить",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Импорт из файла...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Экспортировать в файл…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Список ваших правил динамической фильтрации.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Синтаксис правил: <code>источник назначение тип действие</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>полная документация</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Сортировка:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Тип правила",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Источник",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Цель",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Записи доверенных сайтов указывают на каких веб-страницах uBlock Origin должен быть отключен. Одна запись на строку.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Импортировать и добавить…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Экспортировать…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Применить изменения",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Тип",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Домен",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Фильтр",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Все",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Закулисные запросы",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Текущая вкладка",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Перезагрузить содержимое вкладки",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Вкл/Выкл DOM-инспектор",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Вкл/Выкл всплывающую панель",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin вики: Логгер",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Очистить логгер",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Поставить логгер на паузу (отбрасывать все входящие данные)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Снять логгер с паузы",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Вкл/Выкл фильтрацию логгера",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "фильтрация записей логгера",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Настройки фильтрации логгера",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Not",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blocked",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "allowed",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "модифицировано",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1st-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3rd-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Подробно",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Фильтр",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Список фильтров",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Правило",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Контекст",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Контекст корня",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Сторона",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Тип",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL правило",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Контекст:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Тип:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Статич. фильтр",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} сетевые запросы {{type}}, {{br}}URL которых совпадает с {{url}} {{br}} и которые происходят из {{origin}},{{br}}{{importance}} имеется подходящий фильтр-исключение.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Блокировать",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Разрешить",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "типа “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "любой тип",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "из “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "откуда угодно",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "кроме случаев, когда",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "даже если",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Статический фильтр <code>{{filter}}</code> найден в:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Статический фильтр не найден ни в одном списке фильтров, включенных в данный момент",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Записи логгера, не удовлетворяющие всем трём нижеуказанным условиям, будут автоматически отброшены:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Хранить записи последних {{input}} минут",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Хранить не больше {{input}} загрузок страницы на вкладку",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Хранить не больше {{input}} записей на вкладку",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Использовать {{input}} строк для каждой записи при вертикальном расширении",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Скрыть столбцы:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Время",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Фильтр/правило",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Контекст",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Сторона",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Список",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Таблица",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Простой",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Открыть",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Создать новый отчет",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Найти похожие отчеты",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Документация",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Прочитайте документацию на <code>uBlock/wiki</code>, чтобы узнать обо всех возможностях uBlock Origin. ",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Вопросы и поддержка",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Ответы на вопросы и другая помощь доступны в разделе <code>/r/uBlockOrigin</code> на reddit.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Проблемы фильтрации/сломанный сайт",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Сообщайте о проблемах фильтрации на конкретных сайтах в раздел трекера <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code></span>. <u>Требуется аккаунт GitHub.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Важно:</b> Избегайте использования других блокировщиков схожего назначения совместно с uBlock Origin, так как это может привести к проблемам с фильтрацией на определенных сайтах.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Советы:</b> убедитесь, что ваши списки фильтров обновлены. <span data-url=\"logger-ui.html#_\">Логгер</span> — основной инструмент диагностики проблем, связанных с фильтрами.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Отчет об ошибке",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Сообщайте о собственных ошибках дополнения uBlock Origin в раздел трекера <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code></span>. <u>Требуется GitHub аккаунт.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Диагностика неисправностей",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Ниже представлена техническая информация, которая может быть полезна волонтерам, помогающим вам решить проблему.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Важно:</b> Предположительно конфиденциальная информация редактируется по умолчанию. Отредактированная информация может усложнить диагностику проблемы.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Сообщить о проблемном фильтре",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Чтобы не обременять волонтеров дублированными отчетами, пожалуйста, убедитесь, что о данной проблеме еще не сообщали",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Списки фильтров обновляются ежедневно. Убедитесь, что ваша проблема не была решена в свежих списках фильтров.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Удостоверьтесь, что проблема воспроизводится даже после обновления проблемной страницы.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Адрес веб-страницы:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Веб-страница...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "--Выберите категорию--",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Показывается реклама или ее заполнители",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Всплывающие окна или другие помехи",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Обнаруживается uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Проблемы, связанные с приватностью",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Поломки, когда включен uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Открываются нежелательные вкладки или окна",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Пометить веб-страницу как “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Редактировать",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Отменить редактирование",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Политика конфиденциальности",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Список изменений",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Исходный код (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Участники",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Исходный код",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Переводы",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Списки фильтров",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Внешние зависимости (GPLv3-совместимые):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Собственные списки фильтров uBO свободно размещены на следующих <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "При обновлении списка фильтров используется выбранный случайным образом CDN",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Резервное копирование в файл…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Восстановить из файла...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Восстановить настройки по умолчанию...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Текущие настройки будут заменены данными из резервной копии от {{time}}, и uBlock₀ будет перезапущен.\n\nПерезаписать все существующие параметры данными из резервной копии?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Данные не могут быть прочитаны или ошибочны",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Все ваши настройки будут удалены, uBlock₀ будет перезапущен. \n\nВосстановить настройки по умолчанию?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Ошибка сети: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Добавить следующий адрес к пользовательским спискам фильтров?\n\nЗаголовок: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Подписаться",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "минуту назад",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} минут(-ы) назад",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "час назад",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} часа(-ов) назад",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "день назад",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} дня(-ей) назад",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Показать панель управления",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Показать логгер",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "выключен",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Страница заблокирована",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin предотвратил загрузку следующей страницы:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Из-за следующего фильтра",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "без параметров",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Найден в:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Вернуться",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Закрыть это окно",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Не предупреждать меня больше про этот сайт",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Отключить строгую блокировку для {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Временно",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Навсегда",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Продолжить",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Экспорт в облачное хранилище",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Импорт из облачного хранилища",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Импортировать из облачного хранилища и объединить с текущими настройками",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Имя этого устройства:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Внимание! Изменяйте эти настройки на свой страх и риск.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Принять",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Применить изменения",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Вернуть",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "байт",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Заблокировать элемент во фрейме...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Установить список фильтров...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Временно разрешить большие медиа-элементы",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Показать исходный код...",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Введите сочетание",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Вкл/Выкл общую прокрутку",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Скопировать в буфер",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Выбрать все",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Вкл/Выкл косметическую фильтрацию",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Ослабленный режим блокировки",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Размер хранилища: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KБ",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "МБ",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "ГБ",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Нажмите, чтобы загрузить",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Ошибки: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Не удалось выполнить фильтрацию при запуске браузера.\nПерезагрузите страницу, чтобы обеспечить фильтрацию.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Эта запись должна быть последней",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/si/messages.json b/src/_locales/si/messages.json
new file mode 100644
index 0000000..f414f59
--- /dev/null
+++ b/src/_locales/si/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "අවසානයේදී, මධ්‍ය සැකසුම් ඒකකය සහ මතකය අඩුවෙන් භාවිතා කරන කාර්යක්‍ෂම අවහිරකයක් ඇත.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "යූබ්ලොක්₀ - උපකරණ පුවරුව",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Warning! You have unsaved changes",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "නවතින්න",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "නොසලකන්න",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "සැකසුම්",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filter lists",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "මාගේ පෙරහන්",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "මාගේ නීති",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "විශ්වාසදායී අඩවි",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "කෙටිමං",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Logger",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "පිළිබඳව",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Support",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Asset viewer",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "වැඩිදුර සැකසුම්",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "මෙම අඩවියට යූබ්ලොක්₀ සබල කිරීමට ඔබන්න.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "ඉල්ලීම් අවහිර කර ඇත",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "මෙම පිටුවෙහි",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "since install",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "හෝ",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "මෙම පිටුවේ අවහිර කළ",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "ස්ථාපනයෙන් පසු අවහිර කළ",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "සම්බන්ධිත වසම්",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "උපකරණපුවරුව විවෘත කරන්න",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Enter element zapper mode",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Enter element picker mode",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Open the logger",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Report an issue on this website",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Toggle the blocking of all popups for this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Click to block all popups on this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Click to no longer block all popups on this site",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Toggle the blocking of large media elements for this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Click to block large media elements on this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Click to no longer block large media elements on this site",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering for this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Click to disable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Click to enable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Toggle the blocking of remote fonts for this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Click to block remote fonts on this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Click to no longer block remote fonts on this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Click to disable JavaScript on this site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Click to no longer disable JavaScript on this site",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Pop-up windows",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Large media elements",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Cosmetic filtering",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "දුරස්ථ මුද්‍රණඅකුරු",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "තව",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Less",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "ගෝලීය නීති: මෙම තීරුව සියලුම අඩවි වලට යොදන නීතී සඳහා ය.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Click to make your changes permanent.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Click to revert your changes.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "සියල්ල",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "images",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "තෙවන-පාර්ශවීය",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "3rd-party CSS/images",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "inline scripts",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1st-party scripts",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "3rd-party scripts",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "3rd-party frames",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "සම්බන්ධිත වසම්",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} out of {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "අනුවාදය",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "සාදන්න",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Pick",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "ඉවත් වන්න",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "පෙරදසුන",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "ජාල පෙරහන්",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Cosmetic filters",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Click, Ctrl-click",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Block element…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Hide placeholders of blocked elements",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Show the number of blocked requests on the icon",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Disable tooltips",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Make use of context menu where appropriate",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "වර්ණ-අන්ධ හිතකාමී",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Appearance",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Theme",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Custom accent color",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "මේඝ ආචයන සහාය සබල කරන්න",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "I am an advanced user",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Disable pre-fetching (to prevent any connection for blocked network requests)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Disable hyperlink auditing",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Prevent WebRTC from leaking local IP addresses",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Default behavior",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "These default behaviors can be overridden on a per-site basis",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Disable cosmetic filtering",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Block media elements larger than {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "දුරස්ථ මුද්‍රණඅකුරු බ්ලොක් කරන්න",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Disable JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "අ.ආ.ප්‍ර.(සීඑස්පී) වාර්තා අවහිරකරන්න",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Uncloak canonical names",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Advanced",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Features suitable only for technical users",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "වැඩිදුර සැකසුම්",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Last restore:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Last backup:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} used out of {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Auto-update filter lists",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "දැන් යාවත්කාල කරන්න",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Purge all caches",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Parse and enforce cosmetic filters",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignore generic cosmetic filters",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspend network activity until all filter lists are loaded",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "වෙනස්කම් යොදන්න",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Built-in",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "දැන්වීම්",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "පෞද්ගලිකත්වය",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Malware protection, security",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multipurpose",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regions, languages",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "අභිරුචි",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "ඇතුල් කරන්න...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "One URL per line. Invalid URLs will be silently ignored.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Out of date.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "view content",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Last update: {{ago}}.\nClick to force an update.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "යාවත්කාල වෙමින්...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "A network error prevented the resource from being updated.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with <code>!</code> will be ignored.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Import and append…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "නිර්යාත",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "වෙනස්කම් යොදන්න",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Permanent rules",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "තාවකාලික නීති",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Revert",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Commit",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "සංස්කරණය",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "සුරකින්න",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Discard",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "ගොනුවකින් ඇතුල් කරන්න...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "ගොනුවකට නිර්යාත කරන්න",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "මගේ-ස්ථිර-නීති_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "List of your dynamic filtering rules.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Rule syntax: <code>source destination type action</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>full documentation</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sort:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "නීතියේ වර්ගය",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Source",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destination",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Import and append…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "නිර්යාත",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "මට-විශ්වාස-වෙබ්-අඩවි_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "වෙනස්කම් යොදන්න",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "වර්ගය",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "වසම",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "ඒ.ස.නි.",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "පෙරහන",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "සියල්ල",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Tabless",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Current tab",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Reload the tab content",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Toggle the DOM inspector",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Toggle the popup panel",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: The logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Clear logger",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pause logger (discard all incoming data)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Unpause logger",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Toggle logger filtering",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filter logger content",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Logger filtering options",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Not",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blocked",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "allowed",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modified",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "ප්‍රථම-පාර්ශවීය",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "තෙවන-පාර්ශවීය",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "විස්තර",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "පෙරහන",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filter list",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "නීතිය",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Context",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Root context",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partyness",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "වර්ගය",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "ඒ.ස.නි.",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "ඒ.ස.නි. නීතිය",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Context:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "වර්ගය:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Static filter",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "අවහිර",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "ඉඩදෙන්න",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "වර්ගය “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "ඕනෑම වර්ගයක",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "from “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "from anywhere",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "except when",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "even if",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Static filter <code>{{filter}}</code> found in:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Static filter could not be found in any of the currently enabled filter lists",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Preserve entries from the last {{input}} minutes",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preserve at most {{input}} page loads per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Preserve at most {{input}} entries per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Use {{input}} lines per entry in vertically expanded mode",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "තීරු සඟවන්න:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} වේලාව",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} පෙරහන/නීතිය",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Context",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partyness",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "List",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "වගුව",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Plain",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Open",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Create new report",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Find similar reports",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentation",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Read the documentation at <code>uBlock/wiki</code> to learn about all of uBlock Origin's features.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Questions and support",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter issues/website is broken",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Bug report",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Troubleshooting Information",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Report a filter issue",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Address of the web page:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "The web page…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pick an entry --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shows ads or ad leftovers",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Has privacy-related issues",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Malfunctions when uBlock Origin is enabled",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Opens unwanted tabs or windows",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "රහස්‍යතා ප්‍රතිපත්තිය",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "දායකයින්",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "පරිවර්තන",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO's own filter lists are freely hosted on the following <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "A randomly picked CDN is used when a filter list needs to be updated.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "ගොනුවකට උපස්ථ කරන්න",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "ගොනුවකින් ප්‍රත්‍යර්පණය කරන්න...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Reset to default settings…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "The data could not be read or is invalid",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "ජාලයේ දෝෂය: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Subscribe",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "විනාඩියකට පෙර",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "විනාඩි {{value}} කට පෙර",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "පැයකට පෙර",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "පැය {{value}} කට පෙර",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "දිනකට පෙර",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "දවස් {{value}} කට පෙර",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "උපකරණ පුවරුව පෙන්වන්න",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Show Logger",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "off",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Page blocked",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin has prevented the following page from loading:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Because of the following filter:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "without parameters",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Found in:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "ආපසු යන්න",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "මෙම කවුළුව වසන්න",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Disable strict blocking for {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "තාවකාලිකව",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "සදාකාලිකව",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "මේඝ ආචයනයට නිර්යාත කරන්න",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "මේඝ ආචයනයෙන් ආයාත කරන්න",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "මේඝ ආචයනයෙන් ආයාත කර වත්මන් සැකසුම් සමඟ සංයුක්ත කරන්න",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "මෙම උපාංගයේ නම:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Warning! Change these advanced settings at your own risk.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Submit",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "වෙනස්කම් යොදන්න",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Revert",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "බයිට",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Block element in frame…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subscribe to filter list…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Temporarily allow large media elements",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Type a shortcut",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Toggle locked scrolling",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "පසුරුපුවරුවට පිටපත් කරන්න",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Select all",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relax blocking mode",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Storage used: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "කි.බ.",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "මෙ.බ.",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "ගි.බ.",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "පූරණයට ඔබන්න",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/sk/messages.json b/src/_locales/sk/messages.json
new file mode 100644
index 0000000..d794627
--- /dev/null
+++ b/src/_locales/sk/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Konečne efektívny blokovač. Nezaťažuje CPU ani pamäť.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Ovládací panel",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Upozornenie! Máte neuložené zmeny",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Zostať",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignorovať",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Nastavenia",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Zoznam filtrov",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Moje filtre",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Moje pravidlá",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Dôveryhodné stránky",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Klávesové skratky",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Zaznamenávač",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "O doplnku",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Podpora",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Zobrazenie zdrojov",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Pokročilé nastavenia",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Kliknutie: zakázať/povoliť uBlock pre túto stránku.\n\nCtrl+kliknutie: zakázať uBlock₀ len pre túto stránku.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Kliknutím zakážete uBlock₀ pre túto stránku.\n\nCtrl+kliknutie zakáže uBlock₀ len pre túto stránku.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Kliknutím povolíte uBlock₀ pre túto stránku.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "zablokované požiadavky",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "na tejto stránke",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} alebo {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "od inštalácie",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "alebo",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blokované na tejto stránke",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blokované od inštalácie",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Pripojené domény",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Otvoriť ovládací panel",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Prejsť do režimu výberu prvku",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Prejsť do režimu výberu prvku",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Otvoriť Zaznamenávač",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Nahlásiť problém na tejto webovej stránke",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Žiadne vyskakovacie okná pre túto stránku",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Kliknutím zakážete všetky vyskakovacie okná na tejto stránke",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Kliknutím povolíte všetky vyskakovacie okná na tejto stránke",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Prepnúť blokovanie veľkých multimediálnych prvkov na tejto stránke",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Kliknutím zablokovať veľké multimediálne prvky na tejto stránke",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Kliknutím povolíte veľké multimediálne prvky na tejto stránke",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Prepnúť kozmetické filtrovanie pre túto stránku",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Kliknutím zakážete kozmetické filtrovanie na tejto stránke",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Kliknutím povolíte kozmetické filtrovanie na tejto stránke",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Prepnúť blokovanie vzdialených písiem na tejto stránke",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Kliknutím zakážete vzdialené písma pre túto stránku",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Kliknutím povolíte vzdialené písma pre túto stránku",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Kliknutím úplne zakážete JavaScript na tejto stránke",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Kliknutím už nebude úplne zakázaný JavaScript na tejto stránke",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Vyskakovacie okná",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Veľké mediálne prvky",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Kozmetické filtrovanie",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Vzdialené písma",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Viac",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Menej",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Globálne pravidlá: tento stĺpec slúži pre pravidlá, ktoré platia pre všetky weby.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Lokálne pravidlá: tento stĺpec slúži pre pravidlá, ktoré platia len pre aktuálny web.\nLokálne pravidlá prepisujú globálne pravidlá.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Kliknutím použijete vaše zmeny.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Kliknutím vrátite vaše zmeny.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "všetko",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "obrázky",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "z tretej strany",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/obrázky tretích strán",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "vstavané skripty",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "skripty prvej triedy",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "skripty tretej triedy",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "rámy tretej triedy",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "pripojené domény",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} z {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Verzia",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "skript",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "rámec",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Vytvoriť",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Vybrať",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Ukončiť",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Náhľad",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Sieťové filtre",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Kozmetické filtre",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Kliknutie, Ctrl-kliknutie",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Zablokovať prvok…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Skryť zástupcov zablokovaných prvkov",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Zobraziť počet zablokovaných požiadaviek na ikone",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Zakázať tipy pre nástroje",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Používať kontextovú ponuku v prípade potreby",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Režim pre farboslepých",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Vzhľad",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Téma",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Vlastná farba témy",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Povoliť podporu cloudového úložiska",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Som pokročilý používateľ",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Zakázať prednačítavanie (zakáže akékoľvek pripojenie pre zablokované sieťové požiadavky)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Zakázať auditovanie hypertextových odkazov",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Zabrániť úniku lokálnej IP adresy cez WebRTC",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Predvolené správanie",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Tieto predvolené správania môžu byť prepísané u jednotlivých stránkach",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Vypnúť kozmetické filtrovanie",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Blokovať multimediálne prvky väčšie ako {{input:number}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Blokovať vzdialené písma",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Zakázať JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Zablokovať CSP hlásenia",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Odhaliť kanonické mená",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Pokročilé",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Funkcie vhodné iba pre pokročilých používateľov.",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "pokročilé nastavenia",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Posledná obnova:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Posledná záloha:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} sieťových filtrov + {{cosmeticFilterCount}} kozmetických filtrov z:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} použitých z {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Automaticky aktualizovať zoznamy filtrov.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Aktualizovať teraz",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Vyčistiť celú vyrovnávaciu pamäť",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Spracovať a vynútiť kozmetické filtre",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Kozmetické filtre slúžia na skrytie prvkov na webovej stránke, ktoré sa považujú za vizuálne obťažujúce a ktoré nemôžu byť zablokované filtrovaním sieťových požiadavkov.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignorovať generické kozmetické filtre",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generické kozmetické filtre sú tie kozmetické filtre, ktoré sú určené na použitie na všetkých webových stránkach. Zapnutím tejto možnosti sa zníži zaťaženie pamäte a procesora v dôsledku použitia generických kozmetických filtrov.\n\nOdporúča sa povoliť túto možnosť na menej výkonných zariadeniach.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Pozastaviť sieťovú aktivitu, kým sa nenačítajú všetky zoznamy filtrov",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Zoznamy zablokovaných hostiteľov",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Použiť zmeny",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Vstavané",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Reklamy",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Súkromie",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Domény malvéru",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Obťažujúce",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Viacúčelové",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regióny, jazyky",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Vlastné",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importovať...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Jedna URL adresa na riadok. Neplatné URL adresy budú potichu ignorované.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Zastarané.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "zobraziť obsah",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Posledná aktualizácia: {{ago}}.\nKliknutím vynútite aktualizáciu.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Aktualizácia...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Chyba siete zabránila aktualizácii zdroja.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Jeden filter na riadok. Filter môže byť jednoduchý názov hostiteľa alebo filter kompatibilný s Adblock Plus. Riadky začínajúce s <code>!</code> budú ignorované.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Nepridávajte filtre z nedôveryhodných zdrojov.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importovať a pripojiť",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Exportovať",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "ublock-moje-statické-filtre_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Použiť zmeny",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Trvalé pravidlá",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Dočasné pravidlá",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Vrátiť",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Potvrdiť",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Upraviť",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Uložiť",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Zahodiť",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importovať zo súboru...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Exportovať do súboru",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "ublock-moje-dynamické-pravidlá_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Zoznam vašich dynamických filtrovacích pravidiel.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Syntax pravidla: <code>zdroj cieľ typ akcia</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>úplná dokumentácia</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Zoradiť:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Typ pravidla",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Zdroj",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Cieľ",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Zoznam dôveryhodných stránok pre ktoré bude uBlock Origin zakázaný. Jedna položka na riadok.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importovať a pripojiť",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Exportovať",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "ublock-doveryhodne-stranky_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Použiť zmeny",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Typ",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Doména",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Všetky",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Za oponou",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Aktívna karta",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Obnoviť obsah karty",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Prepnúť DOM inšpektor",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Prepnúť na vyskakovací panel",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: Zaznamenávač",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Vyčistiť zaznamenávač",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pozastaviť zaznamenávač (vymazať všetky prichádzajúce dáta)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Pokračovať v zaznamenávaní",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Prepnúť filtrovanie zaznamenávača",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtrovať obsah zaznamenávača",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Možnosti filtrovania zaznamenávača",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Nie",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blokované",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "povolené",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "zmenené",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "Z prvej strany",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "Z tretej strany",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Podrobnosti",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Zoznam filtrov",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Pravidlo",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Kontext",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Koreňový kontext",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partnerská strana",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Typ",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Dynamické filtrovanie URL",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Kontext:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Typ:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Statické filtrovanie",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} sieťové požiadavky {{type}} {{br}}, ktorých URL adresa sa zhoduje s {{url}} {{br}}a pochádza {{origin}},{{br}}{{importance}} zodpovedajúci výnimkový filter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Zablokovať",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Povoliť",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "typu “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "akéhokoľvek typu",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "z “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "z odkiaľkoľvek",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "pokiaľ neexistuje",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "aj keď existuje",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Statický filter <code>{{filter}}</code> bol nájdený v:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Statický filter sa nepodarilo nájsť v žiadnom momentálne povolenom zozname filtrov",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Záznamy v zaznamenávači, ktoré nespĺňajú všetky 3 podmienky uvedené nižšie budú automatické zamietnuté:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Ponechať záznamy za posledných {{input}} minút",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Ponechať načítaných aspoň {{input}} strán na kartu",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Ponechať načítaných aspoň {{input}} položiek na kartu",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Pre každú položku zobraziť {{input}} riadky vo vertikálnom rozšírenom režime",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Skryť stĺpce:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Čas",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/pravidlo",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Kontext",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Zdroj požiadavky",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Zoznam",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabuľka",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Neformátované",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Formátované",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Otvoriť",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Vytvoriť nové hlásenie",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Vyhľadať podobné hlásenia",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentácia",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Prečítajte si dokumentáciu na <code>uBlock/wiki</code> a dozviete sa o všetkých funkciách uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Otázky a podpora",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Odpovede na otázky a iné druhy podpory pomoci sa poskytujú na subreddite <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Problémy s filtrom/webová stránka je nefunkčná",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Nahlásenie problémov s filtrom s konkrétnymi webovými stránkami na <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. Vyžaduje sa GitHub účet.",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Dôležité:</b> Vyhnite sa používaniu iných podobne zameraných blokátorov spolu s uBlock Origin, pretože to môže spôsobiť problémy s filtrovaním na konkrétnych webových stránkach.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tipy:</b> Uistite sa, že je váš zoznam filtrov aktuálny. <span data-url=\"logger-ui.html#_\">Záznamenávač</span> je primárnym nástrojom na diagnostiku problémov súvisiacich s filtrami.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Nahlásiť chybu",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Nahlásenie problémov so samotným uBlock Origin na<span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Vyžaduje sa GitHub účet.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Informácie o riešení problémov",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Nasledujú technické informácie, ktoré môžu byť užitočné, keď sa vám dobrovoľníci pokúšajú pomôcť vyriešiť problém.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Dôležité:</b> Potenciálne súkromné alebo citlivé informácie sú štandardne upravované. Upravené informácie môžu sťažiť riešenie problému.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Nahlásiť problém s filtrom",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Aby ste dobrovoľníkov nezaťažovali duplicitnými hláseniami, overte si, či už problém nebol nahlásený.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Zoznamy filtrov sa aktualizujú denne. Uistite sa, že váš problém už nebol vyriešený v najnovších zoznamoch filtrov.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Overte, či problém pretrváva aj po opätovnom načítaní problematickej webovej stránky.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Adresa webovej stránky:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Webová stránka…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Vyberte položku --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Zobrazuje reklamy alebo zvyšky reklám",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Je prekrytá alebo má iné nedostatky",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Deteguje uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Má problémy súvisiace so súkromím",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Má problém s funkčnosťou, keď je povolený uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Otvára nechcené karty alebo okná",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Označiť webstránku ako &ldquo;NSFW&rdquo; (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">Nie je bezpečné pre prácu&rdquo;)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Upraviť",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Neupravovať",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Zásady ochrany osobných údajov",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Zoznam zmien",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Zdrojový kód (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Prispievatelia",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Zdrojový kód",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Preklady",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Zoznam filtrov",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Externé závislosti (kompatibilné s GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Vlastné zoznamy filtrov uBO sú voľne dostupné na nasledujúcich <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Pri aktualizácii zoznamu filtrov sa použije náhodne vybraná CDN.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Zálohovať do súboru",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ublock-moja-záloha_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Obnoviť zo súboru...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Obnoviť na predvolené nastavenia...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Všetky vaše nastavenia budú prepísané pomocou dáta zálohovaných dňa {{time}} a uBlock sa reštartne.\n\nPrepísať všetky existujúce nastavenia pomocou zálohovaných dát?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Dáta sa nepodarilo načítať alebo sú neplatné",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Všetky vaše nastavenia budú odstránené a uBlock sa reštartne.\n\nObnoviť uBlock na predvolené nastavenia?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Chyba siete: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: Pridať nasledujúcu URL do zoznamu vlastných filtrov?\n\nNázov: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Pridať",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "pred minútou",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "pred {{value}} minútami",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "pred hodinou",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "pred {{value}} hodinami",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "pred dňom",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "pred {{value}} dňami",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Zobraziť ovládací panel",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Zobraziť Zaznamenávač",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "vypnutý",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Blokovaná stránka",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin zabránil načítaniu nasledujúcej stránky:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Kvôli nasledujúcemu filtru",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "bez parametrov",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Nájdený v:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Naspäť",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Zatvoriť toto okno",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Už ma na túto stránku neupozorňovať",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Zakázať prísne blokovanie pre {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Dočasne",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Natrvalo",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Pokračovať",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Exportovať do cloudového úložiska",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importovať z cloudového úložiska",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importovať z cloudového úložiska a zlúčiť so súčasnými nastaveniami",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Názov tohto zariadenia:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Upozornenie! Zmenu pokročilých nastavení vykonávate na vlastné nebezpečenstvo.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Poslať",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Použiť zmeny",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Vrátiť",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bajtov",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Zablokovať prvok v ráme…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Prihlásiť sa k odberu zoznamu filtrov…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Dočasne povoliť veľké multimediálne prvky",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Zobraziť zdrojový kód",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Zadajte klávesovú skratku",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Prepnúť zámok posúvania",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopírovať do schránky",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Vybrať všetko",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Prepnúť kozmetické filtrovanie",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Zmierniť režim blokovania",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Využité miesto: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Kliknite pre načítanie",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Chyby: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Pri spustení prehliadača sa nepodarilo správne filtrovať.\nZnova načítajte stránku, aby ste zaistili správne filtrovanie.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/sl/messages.json b/src/_locales/sl/messages.json
new file mode 100644
index 0000000..7963d85
--- /dev/null
+++ b/src/_locales/sl/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Končno, učinkovita, procesorju in pomnilniku prijazna razširitev za blokiranje oglasov.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Nadzorna plošča",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Pozor! Spremembe niso shranjene",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Ostani",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Prezri",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Nastavitve",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filtri tretjih oseb",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Moji filtri",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Moja pravila",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Seznam dovoljenih",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Bližnjice",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Dnevnik omrežnih zahtev",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "O razširitvi",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Podpora",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — pregled sredstev",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Napredne nastavitve",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Klik: onemogoči/omogoči uBlock₀ za to stran.\n\nCtrl+klik: onemogoči uBlock₀ samo na tej strani.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Kliknite, da onemogočite uBlock₀ za to stran.\n\nPritisnite Ctrl in kliknite, da onemogočite uBlock₀ samo na tej strani.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Kliknite, da omogočite uBlock₀ za to stran.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "blokirane zahteve",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "na tej strani",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ali {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "od namestitve",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "ali",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blokirano na tej strani",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blokirano od namestitve",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Povezane domene",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Klikni za odpiranje nadzorne plošče",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Vklopi način izbire elementov",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Vklopi način izbire elementov",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Pojdi na dnevnik omrežnih zahtev",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Prijavi napako na tej strani",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Vklop/Izklop blokiranja vseh pojavnih oken za to stran",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Kliknite, da omogičite blokiranje vseh pojavnih oken za to stran",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Kliknite, da onemogočite blokiranje vsah pojavnih oken na tej strani",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Vklop/izklop blokiranja večjih medijev za to stran",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Kliknite, da omogičite blokiranje večjih medijev za to stran",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Kliknite, da onemogočite blokiranje večjih medijev za to stran",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Vklop/Izklop kozmetičnih filtrov za to stran",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Kliknite, da onemogočite kozmetično filtriranje na tej strani",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Kliknite, da omogočite kozmetično filtriranje na tej strani",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Vklopi/izklopi blokiranje oddaljenih pisav za to stran",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Kliknite, da omogočite blokiranje oddaljenih pisav na tej strani",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Kliknite, da onemogočite blokiranje oddaljenih pisav na tej strani",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Klikni, da onemogočiš JavaScript na tej strani",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Klikni, da prenehaš onemogočati JavaScript na tej strani",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Pojavna okna",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Veliki predstavnostni elementi",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Kozmetično filtriranje",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Oddaljene pisave",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Več",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Manj",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Globalna pravila: ta stolpec je za pravila, ki se uveljavljajo za vse strani.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Lokalna pravila: ta stolpec je za pravila, ki se uveljavljajo samo za trenutno stran. Lokalna pravila preglasijo globalna pravila.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Kliknite za uveljavitev sprememb.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Kliknite za preklic sprememb.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "vse",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "slike",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "tretjih oseb",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "css/slike tretje osebe",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "vrinjene skripti",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "strani lastni skripti",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "skripti tretjih oseb",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "okvirji tretjih oseb",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "povezane domene",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} od {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Različica",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Ustvari",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Izberi",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Končaj",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Predogled",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Omrežni filtri",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Kozmetični filtri",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Klik, Ctrl-klik",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Blokiraj element",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Skrij držala blokiranih elementov",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Prikaži število blokiranih zahtevkov na ikoni",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Onemogoči namige",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Izkoristite kontekstni meni, kjer je to primerno",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Način prijazen barvno slepim uporabnikom",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Izgled",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Barva akcenta po meri",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Omogoči podporo za shrambo v oblaku",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Sem napreden uporabnik (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>Potrebno branje</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Onemogoči prednalaganje strani (da se prepreči kakršno koli povezavo za blokirane zahteve omrežja)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Onemogoči revizijo hiperlinkov (Hyperlink-auditing)",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Prepreči izpostavitev lokalnega IP naslova preko WebRTC",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Privzeto ravnanje",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Te privzete nastavitve lahko spremenite za posamezne strani",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Onemogoči kosmetično filtriranje",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Blokiraj medijske elemente večje kot {input:number} kB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Blokiraj oddaljene pisave",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Onemogoči JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Blokiraj CSP poročila",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Uncloak canonical names",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Napredno",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Funkcije primerne zgolj za napredne uporabnike",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "napredne nastavitve",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Zadnja obnovitev:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Zadnja varnostna kopija:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} omrežnih in {{cosmeticFilterCount}} kozmetičnih filtrov od:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "uporabljenih {{used}} od {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Samodejno posodabljanje seznama filtrov.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Posodobi zdaj",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Sprosti celoten predpomnilnik",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Razčleni in uveljavi kozmetične filtre.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "<p>Ta opcija omogoči razčlenjevanje in uveljavljanje <a href=\"https://adblockplus.org/en/faq_internal#elemhide\"> Adblock Plus kompatibilnih filtrov za &ldquo;skrivanje elementov&rdquo;</a> Le-ti filtri so v bistvu kozmetični in služijo skrivanju elementov na spletnih straneh, ki jih lahko obravnavamo kot \"vizualna nadloga\", in taki, ki se jih preko filtrov zahtev omrežja ne da blokirati.</p>\n<p>Vklop te funkcije poveča spominski odtis uBlock₀.</p>",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignoriraj generične kozmetične filtre",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "<p>Generični vizualni filtri so vizualni filtri, ki naj bi bili uporabljeni na vseh spletnih straneh.<p>Kljub temu, da je njihova uporaba v uBlock₀ učinkovita, generični vizualni filtri lahko, na nekaterih spletnih straneh (še posebno na velikih in starih), pripomorejo k opazni dodatni porabi pomnilnika in uporabi CPE.<p>Omogočitev te funkcije bo zmanjšala porabo pomnilnika in uporabo CPE, ki nastane kot rezultat dodajanja generičnih vizualnih filtrov, in tudi zmanjšala porabo pomnilnika dodatka uBlock₀.<p>Priporočeno je, da omogočite to možnost na manj zmogljivih napravah.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Prekini aktivnosti omrežja, dokler niso naloženi vsi filtri",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Seznam blokiranih gostiteljev",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Uveljavi spremembe",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Lokalno",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Oglasi",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Zasebnost",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Zlonamerne domene",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "\t\nNadlegovanje",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Večnamenski",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regije, jeziki",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Po meri",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Uvozi ...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "En URL na vrstico. Vrstice s predpono &lsquo;!&rsquo; in neveljavni URL-ji bodo prezrti.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "zastarelo",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "view content",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Zadnja posodobitev: {{ago}}",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Posodabljanje ...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Omrežna napaka je preprečila posodobitev virov.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "En filter na vrstico. Filter je lahko navadno ime gostitelja, ali pa Adblock Plus kompatibilen filter. Vrstice z znakom &lsquo;!&rsquo; bodo ignorirane.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Uvozi in dodaj",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Izvozi",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "moji-ublock-staticni-filtri_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Uporabi spremembe",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Stalna pravila",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Začasna pravila",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Povrni",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Stori",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Uredi",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Shrani",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Zavrži",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Uvozi iz datoteke...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Izvozi v datoteko",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "moji-ublock-dinamicna-pravila_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Seznam vaših dinamičnih pravil filtriranja.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Sintaksa pravil: <code>vir destinacija tip akcija</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>polna dokumentacija (v angleščini)</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Razvrsti",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Tip pravila",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Vir",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Cilju",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Vaš seznam gostiteljskih naslovov, za katere želite, da je uBlock₀ izklopljen. En vnos na vrstico. Neveljavna gostiteljska imena bodo brez opozoril ignorirana.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Uvozi in dodaj",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Izvozi",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "moj-ublock-seznam-dovoljenih_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Uveljavi spremembe",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Vrsta",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domena",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Vse",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Za zaveso",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Trenutni zavihek",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Ponovno naloži vsebino zavihka",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Preklopi DOM pregledovalnik",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Preklopi pojavno okno",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: Dnevnik omrežnih zahtev",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Počisti dnevnik omrežnih zahtev",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Ustavi dnevnik omrežnih zahtev (zavrne vse prihajajoče zahteve)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Nadaljuj dnevnik omrežnih zahtev",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Preklopi filtriranje dnevnika",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtriraj vnose dnevnika",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Nastavitve filtriranja dnevnika",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Ni",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blokiran",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "dovoljeno",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "spremenjeno",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1. osebni",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3. osebni",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Podrobnosti",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Seznam filtrov",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Pravilo",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Vsebina",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Glavna vsebina",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Pripadnost",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Vrsta",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Dinamično URL filtriranje",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Vsebina:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Vrsta:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Statično filtriranje",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} zahteve omrežja {{type}} {{br}}katerih URL naslov se ujema z {{url}} {{br}}in izvirajo iz {{origin}},{{br}}{{importance}} obstaja ustrezen filter izjeme.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Blokiraj",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Dovoli",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "vrsta {{type}}",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "vsaka vrsta",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "iz “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "iz kjerkoli",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "razen če",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "tudi če",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Statičen filter <code>{{filter}}</code> najden v:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Statični filter <code>{{filter}}</code> ni bil najden v nobenem izmed trenutno izbranih seznamov",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Zapisi, ki ne ustrezajo vsem spodaj podanim pogojem, bodo avtomatsko zavrženi:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Ohrani vnose izpred zadnjih {{input}} minut",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Ohrani največ {{input}} nalaganj strani na zavihek",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Ohrani največ {{input}} vnosov na zavihek",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Uporabi {{input}} vrstic pri vsakem vnosu v navpično razširjenem načinu",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Skrij stolpce:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} čas",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} filter/pravilo",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} vsebina",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Pripadnost",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Seznam",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabela",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Navaden",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Odpri",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Ustvari novo poročilo",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Najdi podobna poročila",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentacija",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Preberi dokumentacijo na <code>uBlock/wiki</code>, da izveš vse o funkcijah uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Vprašanja in podpora",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Odgovori na vprašanja in druga pomoč so na voljo na forumu <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Težave s filtrom/stran ne deluje",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Prijavi težave s filtrom na posameznih straneh v <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> sledilnik težav.",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Pomembno:</b> Izogibajte se sočasni uporabi podobnih orodij za blokiranje, to lahko povzroči težave s filtrom na posameznih straneh.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Preverjajte, da so vaši seznami filtrov redno posodobljeni. <span data-url=\"logger-ui.html#_\">Zapisovalnik</span> je glavno orodje za diagnostiko težav s filtri.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Prijavi napako",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Prijavi težave z uBlock Origin na <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code>sledilnik težav</span>. <u>Potreben je GitHub račun.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Informacije za odpravljanje težav",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Prijavi napako filtra",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Zaradi preprečitve obremenjevanja prostovoljcev s podvojenimi poročili prosim preveri da težava še ni bila sporočena.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Naslov spletne strani:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Spletna stran …",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Izberi vnos --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Prikaže reklame ali ostanke reklam",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Ima probleme povezane z zasebnostjo",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Malfunctions when uBlock Origin is enabled",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Opens unwanted tabs or windows",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Pravilnik o zasebnosti",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Dnevnik sprememb",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Izvorna koda (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Razvijalci",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Izvorna koda",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Prevodi",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Seznami filtrov",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Zunanje odvisnosti (GPLv3-kompatibilne):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO's own filter lists are freely hosted on the following <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Ob posodobitvi seznama filtrov se uporabi naključno izbran CDN",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Naredi varnostno kopijo v datoteko",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "moja-ublock-varnostna-kopija_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Obnovi iz datoteke...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Ponastavi na privzete nastavitve...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Vse vaše nastavitve bodo prepisane s podatki, ki so bili varnostno shranjeni {{time}}. uBlock₀ se bo ponovno zagnal.\n\nPrepišem vse obstoječe nastavitve z varnostno shranjenimi podatki?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Podatki varnostne kopije niso uspeli biti uspešno prebrani oz. so neveljavni",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Vse vaše spremembe bodo izbrisane, uBlock₀ pa se bo ponovno zagnal.\n\nPonastavim uBlock₀ na tovarniške nastavitve?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Ne morem se povezati do {{url}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: Dodam sledeči URL na listo lastnih filtrov?\n\nNaslov: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Naročite se",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "1 minuto nazaj",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} minut nazaj",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "1 uro nazaj",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} ur nazaj",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "1 dan nazaj",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} dni nazaj",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Prikaži nadzorno ploščo",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Prikaži dnevnik",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "izklop",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Page blocked",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock₀ je preprečil nalaganje naslednje strani:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Zaradi sledečega filtra",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "brez parametrov",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Najden v:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Nazaj",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Zapri to okno",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Onemogoči striktno blokiranje za {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Začasno",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Trajno",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Izvozi v shrambe oblaka",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Uvozi iz shrambe oblaka",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Uvozi iz oblaka in spoji s trenutnimi nastavitvami",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Ime te naprave:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Opozorilo! Sprememba teh naprednih nastavitev na lastno odgovornost.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Predloži",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Uveljavi spremembe",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Povrni",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "biti",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Blokiraj element v okvirju",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Naroči se na seznam filtrov..",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Začasno dovoli velike medijske elemente",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Vnesite bližnjico",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Preklopi zaklenjeno drsenje",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopiraj v odložišče",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Izberi vse",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Preklopi lepotno filtriranje",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Sprostite način blokiranja.",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Uporabljena shramba: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Kliknite za prikaz",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/so/messages.json b/src/_locales/so/messages.json
new file mode 100644
index 0000000..08cc0ad
--- /dev/null
+++ b/src/_locales/so/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Ugu dambeyntii, xannibaado hufan. Ku fudud oo ku saabsan CPU iyo xusuusta.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock? - Dashboard",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Digniin! Waxaad leedahay isbedelo aan la keydin",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Joog",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Iska daa",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Dejinta",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Liisaska sifee",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "filtarradayda",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Xeerarkayga",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Goobaha lagu kalsoon yahay",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Jid gaaban",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock? - Logger",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Ku saabsan",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Taageero",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock? - Daawaha hantida",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Dejinta horumarsan",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Guji: dami/damar uBlock? goobtan. ",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Ctrl+guji: dami uBlock? kaliya boggan.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "Guji si aad u joojiso uBlock? ee goobtan. ",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "on this page",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "Ctrl+guji si aad u joojiso uBlock? kaliya boggan.",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "Guji si aad awood ugu siiso uBlock? goobtan.",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "codsiyada la xannibay",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "boggan",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "{{count}} ({{boqolkiiba}}%)",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "tan iyo markii la rakibo",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "ama",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Xiray boggan",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Xirmay tan iyo markii la rakibay",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Domains ku xiran",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Report an issue on this website",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Fur dashboard-ka",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Geli qaabka zapper element",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Geli qaabka xulashada walxaha",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Fur qoraha",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Bedeli xannibaadda dhammaan soo-baxayaasha goobtan",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Guji si aad u xannibto dhammaan popup-yada goobtan",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Guji si aadan mar dambe u xannibin dhammaan soo-bandhigyada goobtan",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "U beddel xannibaadda walxaha waaweyn ee warbaahinta ee goobtan",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Guji si aad u xannibto qaybaha warbaahinta waaweyn ee boggan",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Guji si aanad mar dambe u xannibin qaybaha warbaahinta waaweyn ee boggan",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "U beddel shaandhaynta qurxinta goobtan",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Guji si aad u joojiso shaandhaynta isqurxinta ee goobtan",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Guji si aad awood ugu siiso shaandhaynta goobtan",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "U beddel xannibaadda xarfaha fog ee boggan",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Guji si aad u xannibto farta fog ee goobtan",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Guji si aadan mar dambe u xannibin farta fog ee goobtan",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Guji si aad JavaScript uga joojiso goobtan",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Guji si aad mar dambe u damin JavaScript ee goobtan",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "daaqadaha soo booda",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Qaybaha warbaahinta waaweyn",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Shaandhaynta qurxinta",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Farta fog",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "JavaScript",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Wax badan",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "In ka yar",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "Xeerarka caalamiga ah: tiirkan waxaa loogu talagalay xeerar khuseeya dhammaan bogagga.",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "Xeerarka maxalliga ah: tiirkan waxaa loogu talagalay xeerar khuseeya goobta hadda jirta oo keliya. ",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "Xeerarka maxalliga ah ayaa meesha ka saaraya xeerarka caalamiga ah.",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "Guji si aad isbeddelkaaga uga dhigto mid joogto ah.",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "Guji si aad u soo celiso isbedeladaada",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "dhammaan",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "sawiro",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "xisbiga 3aad",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "CSS/sawirrada xisbiga 3aad",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "xarfaha xariiqda",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Qoraallada xisbiga 1-aad",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "domains ku xiran",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "{{tirinta}} ka baxsan {{ total}}",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Nooca",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "?: Xooga saar safafka leh meeraha xisbiga 3aad",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "?: Xooga saar safafka leh meeraha xisbiga 3aad",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Abuur",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Dooro",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Jooji",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Horudhac",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Shabakadda shabkada",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Shaandhooyinka qurxinta",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Guji, Ctrl-guji",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Cunsurka xannibi...",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Appearance",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Theme",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Custom accent color",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Qari meel-hayeyaasha walxaha xanniban",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Ku muuji tirada codsiyada la xannibay ee sumadda",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Isticmaal macnaha guud marka ay habboon tahay",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Midab-indho la'aan saaxiibtinimo",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Daar taageerada kaydinta daruuraha",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Waxaan ahay isticmaale horumarsan (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>akhris loo baahan yahay</a>)",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "goobaha horumarsan",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Dami soo-keenista ka hor (si looga hortago xidhiidh kasta ee codsiyada shabakada la xidhay)",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Jooji xisaabinta hyperlink",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Ka ilaali WebRTC inay soo daadato cinwaannada IP-ga maxalliga ah",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Dabeecada aan caadiga ahayn",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Dabeecadahan aan caadiga ahayn waa laga gudbi karaa si ku saleysan goob kasta",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Dami shaandhaynta qurxinta",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Advanced",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Features suitable only for technical users",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "Dami tilmaanta aaladaha",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Jooji walxaha warbaahinta ee ka weyn {{input}} KB",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Jooji xarfaha fogfog",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "Dami JavaScript",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "Jooji warbixinnada CSP",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Ka fur magacyada canonical",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Soo celinta u dambaysay:",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Kaydka u dambeeya:",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "filtarrada shabkada {{netFilterCount}} ? {{cosmeticFilterCount}} filtarrada qurxinta ee:",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "{{la isticmaalay}} la isticmaalay {{ total}}",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Si otomaatig ah u cusbooneysii liisaska shaandhada",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Cusbooneysii hadda",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspend network activity until all filter lists are loaded",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Kala saar oo dhaqan geli filtarrada qurxinta",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Shaandhooyinka isqurxintu waxay u adeegaan inay ku qariyaan walxaha ku jira bogga shabakadda kuwaas oo loo arko inay dhib ku yihiin aragga, oo aanay xannibi karin matoorada shaandhaynta ku salaysan codsiga shabakadda.",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Iska daa filtarrada guud ee qurxinta",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Shaandhooyinka isqurxinta guud waa filtarrada qurxinta kuwaas oo loogu talagalay in lagu dabaqo dhammaan shabakadaha internetka. Awood u yeelashada doorashadan waxay meesha ka saaraysaa xusuusta iyo dusha sare ee CPU ee lagu daray boggaga internetka taasoo ka dhalatay maaraynta filtarrada isqurxinta guud. ",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Malware protection, security",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Waxaa lagu talinayaa in lagu suurtageliyo doorashadan aaladaha awoodda yar.",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Liisaska martida la xannibay",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Codso isbeddelada",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Lagu dhex dhisay",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Xayeysiisyada",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Qarsoodi",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Goobaha Malware",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "Cadhada",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Ujeedo badan",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Gobollada, luqadaha",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Caadiyan",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Soo deji...",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Hal URL laynkiiba. URL-yada aan ansax ahayn waa la iska indho-tiraa aamusnaan.",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Waqtigii dhacay",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "fiiri nuxurka",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Cusbooneysii ugu dambeysay: {{ago}} ",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Guji si aad u qasbi cusbooneysiinta",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Cusbooneysiinta...",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Cilad shabakadeed ayaa ka hor istaagtay in kheyraadka la cusboonaysiiyo.",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Hal filter halkii sadar Shaandheeyaha wuxuu noqon karaa magaca martida loo yahay ee cad, ama shaandhada ku habboon Adblock Plus. Khadadka horgalayaasha leh <code>!</code> waa la iska indhatiraa",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Soo deji oo ku dheji",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Dhoofinta",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Codso isbeddelada",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Xeerarka joogtada ah",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "Xeerarka ku meel gaadhka ah",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Soo noqo",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Ballanqaad",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Wax ka beddel",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Badbaadin",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Tuur",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Ka soo deji faylka...",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "U Dhoofinta faylka",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Liiska xeerarka shaandhaynta firfircoon.",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "Xeerka syntax: <code> nooca goobta loo socdo</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>full documents</a> ).",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Kala sooc:",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Nooca qaanuunka",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Xigasho",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "Meesha loo socdo",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Awaamiirta goobta lagu kalsoon yahay ayaa tilmaamaysa boggaga internetka ee uBlock Origin waa in la curyaamiyo. Hal gelitaan halkii sadar. Awaamiirta aan ansax ahayn si aamusnaan ah ayaa loo indhatiraa oo faallo looga bixin doonaa.",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Soo deji oo ku dheji",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Dhoofinta",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Codso isbeddelada",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Nooca",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Domain",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "URL",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Shaandhayso",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Dhammaan",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Shaxda",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "tab hadda",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "Dib u soo rar nuxurka tab",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Bedeli kormeeraha DOM",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Beddel guddiga soo booda",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "Nadiifi logger",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "Jooji logger (ka tuur dhammaan xogta soo socota)",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "Jooji gooyaha",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "Beddel shaandhaynta logger",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "shaandhayso waxa ku jira logger",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Xulashada shaandhaynta Logger",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Maya",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "dhacdo",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "xannibay",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "ogol yahay",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "wax laga beddelay",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "xisbiga 1aad",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "xisbiga 3aad",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "Faahfaahin",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Shaandhayso",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Liiska kala shaandheynta",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Xeer",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Dulucda",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "macnaha guud",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Xaflada",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Nooca",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "URL",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "Xeerka URL",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "Dulucda:",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "Nooca:",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "Shaandheeyaha taagan",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "{{action}} codsiyada shabakada {{type}} {{br}} URL kee u dhigma {{url}} {{br}}oo asal ahaan ka soo jeeda {{asalka}},{{br}}{{{muhiimada} } waxaa jira shaandheyn ka reeban oo ku habboon.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Block",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Allow",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "ku qor \"{{type}}\"",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "nooc kasta",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "ka \"{{asalka}}\"",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "meel kasta ka yimid",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "marka laga reebo",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "xataa haddii",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "Shaandheeyaha taagan <code>{{filter}}</code> ayaa laga helay:",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "Shaandhaynta taagan lagama helin mid ka mid ah liisaska shaandhaynta hadda karti u leh",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "Gelida Logger ee aan buuxin dhammaan saddexda shuruudood ee hoose si toos ah ayaa loo tuurayaa:",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "Kaydi gelida daqiiqadihii ugu dambeeyay {{Input}}",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Ilaali ugu badnaan {{input}} culayska bogga tabkiiba",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Ilaali ugu badnaan {{input}} gelinta tab kasta",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Isticmaal {{input}} khadadka gelistaba qaab si toosan loo fidiyay",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Qari tiirarka:",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "{{Input}} Waqtiga",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Create new report",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Find similar reports",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "{{input}} Shaandhayso/xukun",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "{{Input}} Dulucda",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "{{Input}} Xaflada",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Liiska",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Miis",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Cad",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "Markdown",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "Furan",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Dukumeenti",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Ka akhri dukumeentiga <code>uBlock/wiki</code> si aad wax uga ogaato dhammaan astaamaha uBlock Origin.",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Su'aalo iyo taageero",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Jawaabaha su'aalaha iyo noocyada kale ee taageerada caawimada waxaa lagu bixiyaa subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "Arrimaha shaandhaynta/mareegaha ayaa jabay",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Report a filter issue",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Address of the web page:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "The web page…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pick an entry --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shows ads or ad leftovers",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Has privacy-related issues",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Malfunctions when uBlock Origin is enabled",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Opens unwanted tabs or windows",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Ka warbixi arrimaha shaandhaynta shabakadaha gaarka ah <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> soo saara raadraacayaasha</span >. Wuxuu u baahan yahay akoon GitHub",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "<b>Muhiim:</b> Iska ilaali isticmaalka xannibaadaha kale ee la midka ah oo ay la socdaan uBlock Origin, sababtoo ah tani waxay sababi kartaa arrimo shaandhaynta shabakadaha gaarka ah.",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "<b>Talooyin:</b> Hubi in liisaska shaandhayntaadu ay cusub yihiin. <span data-url=\"logger-ui.html#_\">Logger</span> waa aaladda koowaad ee lagu baadho arrimaha shaandhada la xiriira.",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Warbixinta cayayaanka",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Ka warbixi arrimaha uBlock Origin laftiisa <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> arin tracker</span>. Wuxuu u baahan yahay akoon GitHub",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Macluumaadka Cilad-bixinta",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Hoos waxaa ah macluumaadka farsamada oo laga yaabo inay faa'iido leedahay marka tabaruceyaashu ay isku dayayaan inay kaa caawiyaan xallinta dhibaatada.",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "<b>Muhiim:</b> Macluumaad gaar ah ama mid xasaasi ah ayaa si toos ah wax looga beddelay. Macluumaadka dib loo habeeyey ayaa laga yaabaa inay sii adkeeyaan xallinta mushkiladda.",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Dib u habeyn",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Aan waxba laga beddelin",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Qaanuunka Arrimaha Khaaska ah",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Changelog",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Koodhka isha (GPLv3)",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "Wax ku darsaday",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Source code",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Turjumaada",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Liisaska sifee",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Ku tiirsanaanta dibadda (GPLv3-ku habboon):",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Liisaska shaandhaynta uBO ayaa si xor ah loogu martigaliyay kuwa soo socda <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "CDN si aan kala sooc lahayn loo soo doortay ayaa la isticmaalaa marka liiska shaandhada loo baahan yahay in la cusboonaysiiyo",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Ku soo celi faylka",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "Ka soo celi faylka...",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "Dib u deji dejinta caadiga ah...",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "Dhammaan dejimahaaga waa lagu beddeli doonaa iyadoo la adeegsanayo xogta la xoojiyay {{waqtiga}}, iyo uBlock? ayaa dib u bilaaban doona. ",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} hours ago",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "Dib u qor dhammaan dejimaha jira adiga oo isticmaalaya xogta la taageeray?",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "Xogta lama akhrin karo ama waa khalad",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Dhammaan dejimahaaga waa laga saari doonaa, oo uBlock? dib ayuu u bilaabi doonaa. ",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Show Logger",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "Dib u deji uBlock? u dejisay dejinta warshadda?",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Page blocked",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "Cilada shabakada: {{msg}}",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "uBlock?: Ku dar URL-kan soo socda liisaska shaandhaynta gaarka ah? ",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "without parameters",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Ciwaanka: \"{{ciwaanka}}\" ",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "URL: {{url}}",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Subscribe dheh",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "hal daqiiqo ka hor",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "{{value}} daqiiqo kahor",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "saacad ka hor",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "{{value}} saac kahor",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "maalin ka hor",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "{{value}} maalmo kahor",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Muuji Logger",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "off",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "UBlock Origin ayaa ka diiday bogga soo socda in la soo raro:",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "shaandhada soo socota awgeed",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "aan xuduud lahayn",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "Laga helay:",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Ku noqo",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Xir daaqadan",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Dami xannibaadda adag ee {{hostname}}",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Si ku meel gaar ah",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Si joogto ah",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "U dhoofi kaydinta daruuraha",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Ka soo deji kaydinta daruuraha",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "... ",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "...",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "Qalabkan magaca:",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "Digniin! Beddel goobahan horumarsan khatartaada.",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "Gudbi",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Codso isbeddelada",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/sq/messages.json b/src/_locales/sq/messages.json
new file mode 100644
index 0000000..d6c5a65
--- /dev/null
+++ b/src/_locales/sq/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Më në fund, një bllokues efikas që nuk e rëndon procesorin dhe memorien.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Paneli i kontrollit",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Kujdes! Nuk keni ruajtur ndryshimet",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Qëndroj",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Shpërfill",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Parametrat",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Listat e filtrave",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Filtrat e mi",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Rregullat e mia",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Faqet e besuara",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Shkurtoret",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Regjistri i kërkesave",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Info",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Ndihma teknike",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Ilustruesi i aseteve",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Parametrat e avancuar",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Ç/aktivizoni uBlock₀ te ky uebsajti.\n\nKlikimi+Ctrl e çaktivizon uBlock₀ vetëm te kjo faqja.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Çaktivizoni uBlock₀ te ky uebsajti.\n\nKlikimi+Ctrl e çaktivizon uBlock₀ vetëm te kjo faqja.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Aktivizoni uBlock₀ te ky uebsajti.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "kërkesa të bllokuara",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "te kjo faqe",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ose {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "që prej instalimit",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "ose",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Te kjo faqe janë bllokuar",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Nga fillimi janë bllokuar",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domenet që janë lidhur",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Hapni panelin e kontrollit",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Asgjësuesi i elementeve",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Përzgjedhësi i elementeve",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Regjistri i kërkesave",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Raportoni problemin me uebsajtin",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Zh/Bllokoni të gjitha dritaret modale te uebsajti",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Bllokoni të gjitha dritaret modale te uebsajti",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Zhbllokoni të gjitha dritaret modale te uebsajti",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Zh/Bllokoni elementet e mëdha multimediale te uebsajti",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Bllokoni elementet e mëdha multimediale te uebsajti",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Zbllokoni elementet e mëdha multimediale te uebsajti",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Ç/Aktivizoni filtrat kozmetikë te uebsajti",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Çaktivizoni filtrat kozmetikë te uebsajti",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Aktivizoni filtrat kozmetikë te uebsajti",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Zh/Bllokoni modelet e jashtme shkronjore te uebsajti",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Bllokoni modelet e jashtme shkronjore te uebsajti",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Zhbllokoni modelet e jashtme shkronjore te uebsajti",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Çaktivizoni JavaScript-in te uebsajti",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Aktivizoni JavaScript-in te uebsajti",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Dritaret modale",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Elementet e mëdha multimediale",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Filtrat kozmetikë",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Modelet e jashtme shkronjore",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Më shumë",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Më pak",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Rregullat globale: rregullat në këtë shtyllë aplikohen për të gjitha uebsajtet.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Rregullat lokale: rregullat në këtë shtyllë aplikohen vetëm për këtë uebsajtin. \nKëto kanë përparësi mbi rregullat globale.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Ruani përgjithnjë ndryshimet.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Ktheni ndryshimet.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "të gjitha",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "imazhet",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "palët e treta",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/imazhet nga palët e treta",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "skriptet e integruara",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "skriptet nga pala kryesore",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "skriptet nga palët e treta",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "kuadrot nga palët e treta",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domenet që janë lidhur",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} nga {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Versioni",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "skript",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "kuadër",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Krijoj",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Përzgjedh",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Mbyll",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Parashikoj",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Filtrat e rrjetit",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Filtrat kozmetikë",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Kliko, Kliko me Ctrl",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Bllokoj elementin…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Fsheh treguesin e elementeve të bllokuara",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Shfaq në ikonë numrin e kërkesave të bllokuara",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Çaktivizoj përshkrimet e shkurtra",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Përdor menunë kontekstuale sipas rrethanave",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Përshtat ngjyrat për daltonikët",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Paraqitja",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Motivi",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Personalizoj ngjyrën e theksuar",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Aktivizoj renë informatike",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Kam njohuri të thelluara",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Çaktivizoj kërkesat paraprake (për të shmangur lidhjet me kërkesat e bllokuara)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Çaktivizoj analizën e lidhjeve hipertekstuale",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Nuk lejoj WebRTC-në që të zbulojë adresat IP lokale",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Vlerat standarde",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Këto vlera mund të ndryshohen sipas uebsajtit",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Çaktivizoj filtrat kozmetikë",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Bllokoj elementet multimediale më të mëdha se {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Bllokoj modelet e jashtme shkronjore",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Çaktivizoj JavaScript-in",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Bllokoj raportet e CSP-së",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Demaskoj emrat kanonikë",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Parametrat e avancuar",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Funksione të përshtatshme vetëm për specialistët",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "parametrat e avancuar",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Rindërtimi i fundit:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Kopja e fundit:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} filtra rrjeti + {{cosmeticFilterCount}} filtra kozmetikë nga:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "përdor {{used}} nga {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Përditësoj automatikisht filtrat",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Përditësoj tani",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Heq të gjitha stoqet",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Analizoj dhe zbatoj filtrat kozmetikë",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Filtrat kozmetikë shërbejnë për të fshehur nga ana vizive elementet e padëshirueshme të faqes, të cilat nuk bllokohen me metodën standarde të filtrimit sipas kërkesës.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Nuk marr parasysh filtrat kozmetikë jospecifikë",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Filtrat kozmetikë jospecifikë janë filtra që aplikohen për të gjitha faqet e internetit. Me aktivizimin e këtij opsioni ulet ngarkesa e memories dhe procesorit.\n\nKy opsion rekomandohet për aparatet kompjuterike jo shumë të shpejta.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Pezulloj aktivitetin deri kur të jenë gati të gjitha listat",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lista e hosteve të bllokuara",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Ruaj ndryshimet",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Lokale",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Reklamat",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Privatësia",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Domenet e rrezikshme, siguria",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Elementet e bezdisshme",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Për qëllime të ndryshme",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Sipas rajonit, gjuhës",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Personale",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importoj…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Një URL për rresht. Nuk do të merren parasysh adresat e pasakta.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "E vjetër.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "shfaqni përmbajtjen",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Përditësimi i fundit: {{ago}}.\nKlikoni për ta përditësuar vetë.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Përditëson…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Një problem me rrjetin kompjuterik pengoi përditësimin e informacionit.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Një filtër për rresht. Filtri mund të jetë thjesht emri i një hosti ose si ata që përdor EasyList. Nuk do të merren parasysh rreshtat që fillojnë me <code>!</code>.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Mos shtoni filtra nga burime të pabesueshme.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importoj dhe shtoj…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Eksportoj…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Ruaj ndryshimet",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Rregullat e përhershme",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Rregullat e përkohshme",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Rikthej",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Aplikoj",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Modifikoj",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Regjistroj",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Anuloj",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importoj nga skedari…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Eksportoj në skedar…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Lista e rregullave për filtrimin dinamik.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Rregullat e sintaksës: <code>burimi destinacioni lloji veprimi</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>dokumentimi i plotë</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Rendit:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Lloji i rregullës",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Burimi",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destinacioni",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Kjo listë paraqet faqet e besuara të internetit në të cilat uBlock Origin duhet çaktivizuar. Një element për rresht.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importoj dhe shtoj…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Eksportoj…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Ruaj ndryshimet",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Lloji",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domeni",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filtri",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Të gjitha",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Në prapaskenë",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Skeda aktuale",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Freskoni përmbajtjen e skedës",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Ç/Aktivizoni strukturën DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Ç/Aktivizoni panelin modal",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: Regjistri i kërkesave",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Pastroni regjistrin",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Ndërprisni regjistrimin (e gjithë të dhënave të tjera)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Rifilloni regjistrimin",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Ç/Aktivizoni filtrat e regjistrit",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtroni zërat në regjistër",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Opsionet e filtrimit të regjistrit",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Jo",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "plot ngjarje",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "e bllokuar",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "e lejuar",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "e modifikuar",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "palët kryesore",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "palët e treta",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Detajet",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filtri",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Lista e filtrave",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Rregulla",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Konteksti",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Konteksti bazë",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Palët",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Lloji",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Filtrimi sipas URL",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Konteksti:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Lloji:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Filtrimi statik",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} kërkesat e {{type}} {{br}}që korrespondojnë me adresën {{url}} {{br}}dhe që e kanë origjinën {{origin}},{{br}}{{importance}} ekziston një filtër përjashtues i njëjtë.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Bllokoj",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Lejoj",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "llojit “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "çdo lloji",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "nga “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "ngado",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "përveçse kur",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "edhe kur",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Filtri statik <code>{{filter}}</code> gjendet në:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Nuk u gjet filtri statik në asnjërën prej listave aktive",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Zërat në regjistër do të fshihen automatikisht kur nuk plotësojnë këto tri kushte:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Ruaj zërat e {{input}} minutave të fundit",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Ruaj jo më shumë se {{input}} faqe të reja për skedë",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Ruaj jo më shumë se {{input}} zëra për skedë",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Në pamjen e zgjeruar përdor {{input}} rreshta për zë",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Shtyllat e fshehura:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Ora",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filtri/rregulla",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Konteksti",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Palët",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Listë",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabelë",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "E paformatuar",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Hap",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Krijoj raport të ri",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Gjej raporte të ngjashme",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentacioni",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Lexoni <code>uBlock/wiki</code> që të mësoni më shumë për funksionet e uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Pyetjet dhe ndihma teknike",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Në forumin e dedikuar Reddit <code>/r/uBlockOrigin</code> mund të bëni pyetje dhe të kërkoni çdolloj ndihme tjetër.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Problemet me filtrat/faqet me defekte",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Problemet e disa faqeve me filtrat duhen raportuar në ditarin e problemeve <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code></span>. <u>Duhet një konto GitHub.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Kujdes:</b> uBlock Origin nuk duhet përdorur njëkohësisht me aplikacione të ngjashme bllokuese, pasi mund të keni probleme me filtrat.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Këshilla:</b> Sigurohuni që të përditësoni listat e filtrave. <span data-url=\"logger-ui.html#_\">Regjistri</span> është instrumenti kryesor për diagnostikimin e problemeve me filtrat.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Raportimi i problemeve",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Problemet e uBlock Origin duhen raportuar në ditarin e problemeve <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code></span>. <u>Duhet një konto GitHub.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Diagnostikimi i problemeve",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Informacioni teknik i mëposhtëm u shërben personave të cilët përpiqen të zgjidhin problemin që keni.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Kujdes:</b> Informacionet me sfond privat dhe delikat censurohen automatikisht. Informacioni i censuruar mund ta vështirësojë zgjidhjen e problemit.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Raportoni problemet me filtrat",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Verifikoni a është raportuar më parë problemi që të mos i lodhni vullnetarët e tjerë me të njëjtat gjëra.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Listat e filtrave përditësohen rregullisht. Sigurohuni që problemi qëndron edhe me listat e reja.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verifikoni a qëndron problemi nëse e freskoni sërish faqen në fjalë.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Adresa e faqes:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Faqja…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Zgjidhni --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shfaq reklama ose pjesë reklamash",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Ka mbivendosje ose parregullsi të tjera",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "E di që përdor uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Ka probleme me privatësinë",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Bllokohet kur aktivizoj uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Hap skeda ose dritare të panevojshme",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Etiketoj faqen si “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“E papërshtatshme për punë”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Censuroj",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Nuk censuroj",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Politika e privatësisë",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Ditari i ndryshimeve",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Materiali burimor (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Kontribuesit",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Materiali burimor",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Përkthimet",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Listat e filtrave",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Programet kushtëzuese (sipas GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Listat e filtrave të uBO mundësohen falas në <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN-të</a> e mëposhtme:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Përditësimi i listave do të kryhet nëpërmjet një CDN-je rastësore.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Kopjoj në skedar…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Rindërtoj sipas skedarit…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Kthej parametrat fillestarë…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Të gjithë parametrat do të mbishkruhen me të dhënat e kopjuara më {{time}}, dhe uBlock₀ do të hapet sërish.\n\nDo mbishkruani parametrat aktualë?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Të dhënat nuk lexohen ose mund të jenë dëmtuar",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Të gjithë parametrat do të fshihen dhe uBlock₀ do të hapet sërish.\n\nDo ktheni parametrat origjinalë?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Problem me rrjetin kompjuterik: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Do e shtoni adresën në listën e personalizuar të filtrave?\n\nTitulli: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Abonohem",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "një minutë më parë",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} minuta më parë",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "një orë më parë",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} orë më parë",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "një ditë më parë",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} ditë më parë",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Paneli i kontrollit",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Regjistri i kërkesave",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "fikur",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Faqe e bllokuar",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin po pengon hapjen e faqes:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Për shkak të filtrit",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "pa parametra",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Gjendet në:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Kthehem",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Mbyll dritaren",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Mos më lajmëro për këtë faqen",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Zhbllokoj mënyrën strikte për {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Përkohësisht",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Gjithnjë",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Vazhdoj",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Eksportoni në renë informatike",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importoni nga reja informatike",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importoni nga reja informatike dhe bashkoni me parametrat aktualë",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Emri i aparatit:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Kujdes! Mbani ju përgjegjësi nëse i ndryshoni parametrat e avancuar.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Parashtroj",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Ruaj ndryshimet",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Rikthej",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bajt",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Bllokoj elementin në kuadër…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Abonohem në listën e filtrave…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Lejoj përkohësisht elementet e mëdha multimediale",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Shikoj kodin burimor…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Vendosni kombinimin",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Ç/Aktivizoni lëvizjen me rrëshqitje",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopjoj në memorie",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Përzgjedh të gjitha",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Ç/Aktivizoj filtrat kozmetikë",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Dobësoj mënyrën e bllokimit",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Hapësira e përdorur: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Klikoni për ta hapur",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Probleme: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Kur hapet shfletuesi nuk bëhet filtrimi i duhur. Freskoni faqen për ta filtruar mirë.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/sr/messages.json b/src/_locales/sr/messages.json
new file mode 100644
index 0000000..54ee936
--- /dev/null
+++ b/src/_locales/sr/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Коначно, ефикасан блокатор. Ниски процесорски и меморијски захтеви.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Контролна табла",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Упозорење! Имате промене које нису сачуване",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Остани",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Игнориши",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Подешавања",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Листе филтера",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Моји филтери",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Моја правила",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Поуздани сајтови",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Пречице",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Евиденција",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "О програму",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Подршка",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Прегледач ресурса",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Напредна подешавања",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Клик: онемогући/омогући µBlock₀ за овај сајт.\n\nCtrl+клик: онемогући/омогући µBlock₀ само за ову страницу.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Кликните да бисте онемогућили µBlock₀ за овај сајт.\n\nCtrl+клик да бисте онемогућили µBlock₀ само на овој страници.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Кликните да бисте омогућили µBlock₀ за овај сајт.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "блокирани захтеви",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "на овој страници",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} или {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "од инсталације",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "или",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Блокирано на овој страници",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Блокирано од инсталације",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Повезани домени",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Отвори контролну таблу",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Режим уклањања елемената",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Режим избора елемената",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Отвори евиденцију",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Пријавите проблем на овом веб сајту",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Укључи/искључи блокирање свих искачућих прозора за овај сајт",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Кликните за блокирање свих искачућих прозора на овом сајту",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Кликните да бисте зауставили блокирање свих искачућих прозора на овом сајту",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Укључи/искључи блокирање великих мултимедијалних елемената за овај сајт",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Кликните за блокирање великих мултимедијалних елемената на овом сајту",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Кликните да бисте зауставили блокирање великих мултимедијалних елемената на овом сајту",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Укључи/искључи естетско филтрирање за овај сајт",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Кликните да бисте онемогућили естетско филтрирање на овом сајту",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Кликните да бисте омогућили естетско филтрирање на овом сајту",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Укључи/искључи блокирање удаљених фонтова за овај сајт",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Кликните за блокирање удаљених фонтова на овом сајту",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Кликните да бисте зауставили блокирање удаљених фонтова на овом сајту",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Кликните да онемогућите JavaScript на овом сајту",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Кликните да JavaScript не буде више онемогућен на овом сајту",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Искачући прозори",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Велики мултимедијски елементи",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Естетско филтрирање",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Удаљени фонтови",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Више",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Мање",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Општа правила: ова колона је за правила која се примењују на свим сајтовима.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Локална правила: ова колона је за правила која се примењују само на тренутном сајту.\nЛокална правила имају предност у односу на општа.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Кликните да бисте промене учинили трајним.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Кликните да бисте вратили промене.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "све",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "слике",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "треће стране",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/слике трећих страна",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "уметнуте скрипте",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "Корисничке скрипте",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "Скрипте трећих страна",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "Оквири трећих страна",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "повезани домени",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} од {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Верзија",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "скрипта",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "оквир",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Креирај",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Изабери",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Изађи",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Преглед",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Мрежни филтери",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Естетски филтери",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Клик, Ctrl-клик",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Блокирај елемент...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Сакриј држаче блокираних елемената",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Прикажи број блокираних захтева на иконици",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Онемогући описе алатке",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Користи контекстни мени где је прикладно",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Мод за далтонисте",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Изглед",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Тема",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Прилагођена наглашена боја",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Укључи подршку за складиште у облаку",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Ја сам напредни корисник",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Онемогући оптимизацију учитавања (да би се спречила свака веза блокираних мрежних захтева)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Онемогући проверавање хиперлинкова",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Спречи WebRTC да пропушта локалну IP адресу",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Подразумевано понашање",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Ова подразумевана понашања могу бити поништена за појединачне веб сајтове",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Онемогући естетско филтрирање",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Блокирај мултимедијалне елементе веће од {{input}} kB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Блокирај удаљене фонтове",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Онемогући JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Блокирај CSP извештаје",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Откриј канонска имена",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Напредно",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Функције прикладне само за техничке кориснике",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "напредна подешавања",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Последње враћање:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Последња резервна копија:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "мрежних филтера: {{netFilterCount}} + естетских филтера: {{cosmeticFilterCount}} из:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} искоришћено од {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Аутоматски ажурирај листе филтера",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Ажурирај сада",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Очисти сав кеш",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Рашчлани и примени естетске филтере.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Естетски филтери служе за сакривање елемената на веб страници који се сматрају визуелном сметњом и који не могу бити блокирани од стране мрежних захтева базираних на филтрирању.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Игнориши опште естетске филтере.",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Општи естетски филтери су они естетски филтери који су намењени за примену на свим сајтовима. Омогућавањем ове опције, елиминисаће се повећана потрошња меморије и оптерећење процесора на страницама као резултат руковања општим естетским филтерима.\n\nПрепоручује се да се ова опција омогући на мање моћним уређајима.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Обустави мрежну активност док се не учитају све листе филтера",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Списак блокираних хостова",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Примени промене",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Уграђени",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Рекламе",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Приватност",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Заштита од злонамерног софтвера, безбедност",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Сметње",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Вишенаменски",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Регионални, језички",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Прилагођени",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Увези...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Једна адреса по реду. Неисправне адресе ће бити тихо игнорисане.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Застарело.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "приказ садржаја",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Последње ажурирање: {{ago}}.\nКликните да бисте ажурирали.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Ажурирање...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Грешка на мрежи је спречила ажурирање ресурса.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Један филтер по реду. Филтер може бити назив хоста или филтер компатибилан са EasyList форматом. Редови са префиксом <code>!</code> ће бити игнорисани.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Не додавај филтере из непоузданих извора.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Увези и додај",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Извези",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "моји-ublock-филтери_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Примени промене",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Стална правила",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Привремена правила",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Врати",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Потврди",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Уреди",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Сачувај",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Одбаци",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Увези из датотеке...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Извези у датотеку...",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "моја-ublock-динамичка-правила_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Списак правила за динамичко филтрирање.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Правила синтаксе: <code>извор одредиште тип акција</code>(<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>сва документација</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Сортирај:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Тип правила",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Извор",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Одредиште",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Смернице поузданих сајтова диктирају на којим веб страницама uBlock Origin треба да буде онемогућен. Један унос по реду.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Увези и додај",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Извези",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "моји-ublock-поуздани-сајтови_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Примени промене",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Тип",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Домен",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Филтер",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Све",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Иза сцене",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Тренутна картица",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Поновно учитавање садржаја картице",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Укључи/искључи DOM инспектор",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Укључи/искључи искачући панел",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: Евиденција",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Очисти евиденцију",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Паузирај евиденцвију (одбаци све долазне податке)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Настави евидентирање у дневнику",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Укључи/искључи филтрирање евиденције",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "филтрирај уносе евиденције",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Опције филтрирања евиденције",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Не",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "важно",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "блокирано",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "дозвољено",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "измењено",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "прве стране",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "треће стране",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Детаљи",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Филтер",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Листа филтера",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Правило",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Контекст",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Контекст корена",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Страна",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Тип",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Правило URL адресе",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Контекст:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Тип:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Статички филтер",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} мрежни захтев {{type}} {{br}} чија УРЛ адреса одговара {{url}} {{br}} и која долази од {{origin}},{{br}} {{importance}} постоји одговарајући филтер изузетак.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Блокирај",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Дозволи",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "тип “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "сваки тип",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "од “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "било одакле",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "осим кад",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "чак иако",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Статички филтер <code>{{filter}}</code> пронађен у:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Статички филтер није могуће пронаћи нити у једној тренутно омогућеној листи филтера",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Уноси у евиденцији који не испуњавају сва три услова испод биће аутоматски одбачени:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Задржи уносе из последњих {{input}} минута",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Задржи највише {{input}} учитавања страница по картици",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Задржи највише {{input}} уноса по картици",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Користи {{input}} линија по уносу у усправном проширеном режиму",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Сакриј колоне:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Време",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Филтер/правило",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Контекст",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Страна",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Листа",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Табела",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Обично",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Отвори",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Креирај нови извештај",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Пронађи сличне извештаје",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Документација",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "\nПрочитајте документацију на <code>uBlock/wiki</code> да бисте сазнали све о функцијама uBlock Origin-а.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Питања и подршка",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Одговори на питања и друге врсте подршке налазе се у подредиту <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Проблеми са филтером/веб сајт не фукционише",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Пријавите проблеме са филтерима на одређеним веб сајтовима на <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code>, страници за праћење проблема</span>. <u>Неопходан је GitHub налог.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Важно:</b> Избегавајте коришћење других блокатора сличне намене заједно са uBlock Origin-ом, јер то може изазвати проблеме са филтерима на одређеним веб сајтовима.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Савет:</b> Уверите се да су ваше листе филтера ажуриране. <span data-url=\"logger-ui.html#_\">Управљач евиденцијом</span> је примарни алат за дијагностиковање проблема у вези са филтером.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Пријава грешке",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Пријавите проблеме са самим uBlock Origin-ом на <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code>, страници за праћење проблема</span>. <u>Неопходан је GitHub налог.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Информација о решавању проблема",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Испод су техничке информације које могу бити корисне када волонтери покушавају да вам помогну да решите проблем.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Важно:</b> Потенцијално приватне или осетљиве информације се подразумевано редигују. Редиговане информације могу отежати решавање проблема.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Пријављивање проблема са филтером",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Да не бисте оптерећивали волонтере дуплим извештајима, проверите да ли је проблем већ пријављен.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Листе филтера се ажурирају свакодневно. Уверите се да ваш проблем није већ решен у најновијим листама филтера.\n",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Проверите да ли проблем и даље постоји након поновног учитавања проблематичне веб странице.\n",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Адреса веб странице:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Веб страница...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Изаберите ставку --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Приказује рекламе или остатке реклама",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Има преклапања или друге сметње",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Открива uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Има проблеме у вези са приватношћу",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Фукционише неправилно када је uBlock Origin омогућен",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "\nОтвара нежељене картице или прозоре",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Изначите веб страницу као „NSFW“ (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Није безбедна за рад”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Редигуј",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Поништи редиговање",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Политика приватности",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Списак измена",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Изворни код (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Сарадници",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Изворни код",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Преводи",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Листе филтера",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Спољне зависности (компатибилно са GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Сопствене листе филтера uBO-a се слободно хостују на следећим <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN-овима</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Насумично одабрани CDN се користи када листу филтера треба ажурирати.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Сачувај резервну копију у датотеку...",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Врати из датотеке...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Врати на подразумевана подешавања...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Сва ваша подешавања ће бити прегажена резервном копијом података сачуваним {{time}} и uBlock₀ ће се поново покренути.\n\nПрегазити сва постојећа подешавања резервном копијом података?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Подаци се не могу прочитати или су неисправни",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Сва ваша подешавања ће бити обрисана и µBlock ће се поново покренути.\n\nВрати µBlock на првобитна подешавања?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Грешка на мрежи: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Додати следећу URL адресу у вашу прилагођену листу филтера?\n\nНазив: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Претплати се",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "пре један минут",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "пре {{value}} минута",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "пре један сат",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "пре {{value}} сата/и",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "пре један дан",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "пре {{value}} дана",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Прикажи контролну таблу",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Прикажи евиденцију",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "искључен",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Страница је блокирана",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin је спречио учитавање следеће странице:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "због следећег филтера",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "без параметара",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Пронађен у:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Иди назад",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Затвори овај прозор",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Не упозоравај ме поново на овај сајт",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Искључи строго блокирање за {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Привремено",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Трајно",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Настави",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Извези у складиште у облаку",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Увези из складишта у облаку",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Увези из складишта у облаку и споји са тренутним подешавањима",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Назив овог уређаја:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Упозорење! Мењате ова напредна подешавања на сопствени ризик.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Пошаљи",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Примени промене",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Врати",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "бајтови",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Блокирај елемент у оквиру...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Претплатите се на листу филтера...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Привремено дозволи велике мултимедијалне елементе",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Прикажи изворни код…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Укуцајте пречицу",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Закључај/откључај померање",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Копирај у оставу",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Изабери све",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Укључи/искључи естетско филтрирање",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Опуштени режим блокирања",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Искоришћеност складишта: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "kB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Кликните за учитавање",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Грешака: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Није могуће правилно филтрирати при покретању прегледача. Поново учитајте страницу да бисте осигурали правилно филтрирање.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/sv/messages.json b/src/_locales/sv/messages.json
new file mode 100644
index 0000000..b091a77
--- /dev/null
+++ b/src/_locales/sv/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Äntligen en effektiv blockerare. Snäll mot både processor och minne.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Kontrollpanel",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Varning! Du har inte sparat dina ändringar",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Stanna kvar",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignorera",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Inställningar",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filterlistor",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Mina filter",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Mina regler",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Betrodda webbplatser",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Genvägar",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Loggaren",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Om",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Support",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Tillgångsvisare",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Avancerade inställningar",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Klick: inaktivera/aktivera uBlock₀ för denna webbplats.\n\nCtrl+klick: inaktivera uBlock₀ enbart på denna sida.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Klicka för att inaktivera uBlock₀ för denna webbplats.\n\nCtrl+klicka för att inaktivera uBlock₀ enbart på denna sida.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Klicka för att aktivera uBlock₀ på denna webbplats.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "blockerade förfrågningar",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "på denna sida",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "sedan installationen",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "eller",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blockerat på denna sida",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blockerat sedan installationen",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Anslutna domäner",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Öppna kontrollpanelen",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Gå till elementzapperläge",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Gå till elementväljarläge",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Öppna loggaren",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Rapportera ett problem på denna webbplats",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Växla blockering av popup-fönster för den här webbplatsen",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Klicka för att blockera alla popup-fönster på denna webbplats",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Klicka för att inte längre blockera alla popup-fönster på denna webbplats",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Växla blockering av stora medieelement för denna webbplats",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Klicka för att blockera stora medieelement på denna webbplats",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Klicka för att inte längre blockera stora medieelement på denna webbplats",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Växla kosmetiska filter för denna webbplats",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Klicka för att inaktivera kosmetiska filter på denna webbplats",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Klicka för att aktivera kosmetisk filtrering på denna webbplats",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Växla blockeringen av fjärrtypsnitt på denna webbplats",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Klicka för att blockera fjärrtypsnitt på denna webbplats",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Klicka för att inte längre blockera fjärrtypsnitt på denna webbplats",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Klicka för att inaktivera JavaScript på denna webbplats",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Klicka för att aktivera JavaScript på denna webbplats",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Popup-fönster",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Stora medieelement",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Kosmetisk filtrering",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Fjärrtypsnitt",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Mer",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Mindre",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Globala regler: den här kolumnen avser regler som gäller för alla webbplatser.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Lokala regler: den här kolumnen avser endast regler som gäller för den aktuella webbplatsen.\nLokala regler åsidosätter globala regler.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Klicka för att göra dina ändringar permanenta.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Klicka för att ångra dina ändringar.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "alla",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "bilder",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "Tredjepart",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/bilder från tredjepart",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "inline skript",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "Förstapartskript",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "Tredjepartskript",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "Tredjepartramar",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "anslutna domäner",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} av {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Version",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "skript",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "ram",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Skapa",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Välj",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Avsluta",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Förhandsgranska",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Nätverksfilter",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Kosmetiska filter",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Klick, Ctrl-klick",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Blockera element…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Dölj platshållare för blockerade element",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Visa antalet blockerade förfrågningar på ikonen",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Inaktivera verktygstips",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Använd innehållsmenyn där det är lämpligt",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Färgblindsanpassat",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Utseende",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Anpassad accentfärg",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Aktivera stöd för molnlagring",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Jag är en avancerad användare",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Inaktivera förhämtning (för att förhindra anslutning av blockerade nätverksförfrågningar)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Inaktivera hyperlänksrevidering",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Förhindra WebRTC från att läcka lokala IP-adresser",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Standardbeteende",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Dessa standardbeteenden kan åsidosättas per webbplats",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Inaktivera kosmetisk filtrering",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Blockera medieelement större än {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Blockera fjärrtypsnitt",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Inaktivera JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Blockera CSP-rapporter",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Ta fram kanoniska namn",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Avancerat",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Funktioner som endast är lämpliga för tekniska användare",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "avancerade inställningar",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Senast återställd:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Senaste säkerhetskopia:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} nätverksfilter + {{cosmeticFilterCount}} kosmetiska filter från:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} använda av {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Uppdatera filterlistor automatiskt",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Uppdatera nu",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Rensa alla cachar",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Tolka och tillämpa kosmetiska filter",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Kosmetiska filter tjänar till att dölja element på en webbsida som bedöms vara en visuell olägenhet och som inte kan blockeras av nätverksbegärningsbaserade filtermotorer.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignorera allmänna kosmetiska filter",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Allmänna kosmetiska filter är de kosmetiska filter som är avsedda att tillämpas på alla webbplatser. Att aktivera detta alternativ kommer att eliminera minnes- och processoranvändningen som läggs till på webbsidor som ett resultat av hantering av allmänna kosmetiska filter.\n\nDet rekommenderas att aktivera detta alternativ på mindre kraftfulla enheter.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Stäng av nätverksaktiviteten tills alla filterlistor har laddats",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Listor över blockerade värdar",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Verkställ ändringar",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Inbyggda",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Annonser",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Integritet",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Skydd mot skadlig programvara, säkerhet",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Störande",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Mångsidiga",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Regioner, språk",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Anpassade",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Importera…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "En webbadress per rad. Ogiltiga webbadresser ignoreras tyst.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Föråldrad.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "visa innehåll",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Senast uppdaterad: {{ago}}\nKlicka för att påtvinga en uppdatering.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Uppdaterar…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Ett nätverksproblem har förhindrat resursen från att uppdateras.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Ett filter per rad. Ett filter kan vara ett vanligt värdnamn eller ett EasyList-kompatibelt filter. Rader med prefixet <code>!</code> ignoreras.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Lägg inte till filter från opålitliga källor.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Importera och lägg till…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Exportera…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "mina-ublock-statiska-filter_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Verkställ ändringar",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Permanenta regler",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Temporära regler",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Ångra",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Skicka",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Redigera",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Spara",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Förkasta",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Importera från fil…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Exportera till fil…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "mina-ublock-dynamiska-regler_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Lista över dina dynamiska filterregler.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Regelsyntax: <code>källa mål typ åtgärd</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>full dokumentation</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sortera:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Regeltyp",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Källa",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Mål",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Direktiven för betrodda webbplatser anger vilka webbsidor som uBlock Origin ska inaktiveras på. En post per rad.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Importera och lägg till…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Exportera…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "mina-ublock-betrodda-webbplatser_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Verkställ ändringar",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Typ",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domän",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Alla",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Bakom kulissen",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Aktuell flik",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Uppdatera flikinnehåll",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Växla DOM-inspektören",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Växla popup-panelen",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: Loggaren",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Rensa loggaren",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pausa loggaren (kassera alla inkommande data)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Fortsätt loggaren",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Växla loggarens filtrering",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filtrera loggarens innehåll",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Loggarens filtreringsalternativ",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Inte",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "händelserikt",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blockerad",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "tillåten",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "ändrad",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "Förstapart",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "Tredjepart",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Detaljer",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filter",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filterlista",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Regel",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Innehåll",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Rotinnehåll",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partsrelation",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Typ",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "Webbadress",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Webbadressregel",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Innehåll:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Typ:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Statiskt filter",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} nätverksförfrågningar av {{type}} {{br}}vilkas webbadresser matchar {{url}} {{br}}och som kommer från {{origin}},{{br}}{{importance}} det finns ett matchande undantagsfilter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Blockera",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Tillåt",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "typ \"{{type}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "alla typer",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "från \"{{origin}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "från var som helst",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "utom när",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "även om",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Det statiska filtret <code>{{filter}}</code> hittades i:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Statiskt filter kunde inte hittas i någon av de aktuella aktiverade filterlistorna",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Loggarens poster som inte uppfyller alla tre villkoren nedan kommer automatiskt att kasseras:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Bevara poster från de {{input}} senaste minuterna",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Bevara högst {{input}} sidinläsningar per flik",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Bevara högst {{input}} poster per flik",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Använd {{input}} rader per inmatning i vertikalt expanderat läge",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Dölj kolumner:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Tid",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/regel",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Innehåll",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partsrelation",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Lista",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tabell",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Enkel",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Öppna",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Skapa ny rapport",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Hitta liknande rapporter",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Dokumentation",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Läs dokumentationen på <code>uBlock/wiki</code> för att lära dig allt om uBlock Origins funktioner.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Frågor och support",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Svar på frågor och andra typer av hjälp finns på subredditen <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filterproblem/webbplatsen fungerar inte",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Rapportera filterproblem med specifika webbplatser till <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> problemhanteringssystemet</span>. <u>Kräver ett GitHub-konto.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Viktigt:</b> Undvik att använda andra reklamblockerare tillsammans med uBlock Origin, eftersom detta kan orsaka filterproblem på specifika webbplatser.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Se till att dina filterlistor är uppdaterade. <span data-url=\"logger-ui.html#_\">Loggaren</span> är det primära verktyget för att diagnostisera filterrelaterade problem.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Felrapport",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Rapportera problem med själva uBlock Origin till <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> ärendehanteringssystemet</span>. <u>Kräver ett GitHub-konto.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Felsökningsinformation",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Nedan finns teknisk information som kan vara användbar när volontärer försöker hjälpa dig att lösa ett problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Viktigt:</b> Potentiellt privat eller känslig information redigeras bort som standard. Bortredigerad information kan göra det svårare att lösa ett problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Rapportera ett filterproblem",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "För att undvika att belasta volontärer med dubbletter av rapporter, kontrollera att problemet inte redan har rapporterats.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filterlistor uppdateras dagligen. Se till att ditt problem inte redan har åtgärdats i de senaste filterlistorna.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Kontrollera att problemet kvarstår efter att du har laddat om den krånglande webbsidan.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Hemsidans adress:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Webbsidan…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Välj en post --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Visar annonser eller rester av annonser",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Har överlägg eller andra olägenheter",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Upptäcker uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Har integritetsrelaterade problem",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Fungerar inte när uBlock Origin är aktiverad",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Öppnar oönskade flikar eller fönster",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Märk webbsidan som \"NSFW\" (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Inte lämplig på jobbet”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Bortredigerad",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Oredigerad",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Integritetspolicy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Ändringslogg",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Källkod (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Bidragsgivare",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Källkod",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Översättningar",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filterlistor",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Externa beroenden (GPLv3-kompatibla):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO:s egna filterlistor finns fritt tillgängligt på följande <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN:er</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Ett slumpmässigt valt CDN kommer att användas när en filterlista behöver uppdateras.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Säkerhetskopiera till fil…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "min-ublock-sakerhetskopia_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Återställ från fil…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Återställ till standardinställningarna…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Alla dina inställningar kommer att skrivas över med data som har säkerhetskopierats {{time}} och uBlock₀ kommer att starta om.\n\nVill du skriva över befintliga inställningar med säkerhetskopierad data?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Data kunde inte läsas eller är ogiltiga",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Alla dina inställningar kommer att tas bort och uBlock₀ kommer att starta om.\n\nÅterställ uBlock₀ till fabriksinställningar?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Nätverksfel: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Lägg till följande webbadress till dina anpassade filterlistor?\n\nTitel: \"{{title}}\"\nWebbadress: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Prenumerera",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "en minut sedan",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} minuter sedan",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "en timme sedan",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} timmar sedan",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "en dag sedan",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} dagar sedan",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Visa kontrollpanelen",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Visa loggaren",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "av",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Sidan blockerad",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin har förhindrat följande sida från att läsas in:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "På grund av följande filter",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "utan parametrar",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Hittades i:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Gå tillbaka",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Stäng det här fönstret",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Varna mig inte igen om den här sidan",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Inaktivera strikt blockering av {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Temporärt",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanent",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Fortsätt",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Exportera till molnlagring",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Importera från molnlagring",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Importera från molnlagring och sammanfoga med aktuella inställningar",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Enhetens namn:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Varning! Ändra dessa avancerade inställningar på egen risk.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Skicka",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Verkställ ändringar",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Ångra",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "byte",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Blockera element i ramar…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Prenumerera på filterlista…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Tillåt tillfälligt stora medieelement",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Visa källkoden…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Ange en genväg",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Växla rullningslås",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Kopiera till urklipp",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Markera allt",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Växla kosmetisk filtrering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Lätta på blockeringsläge",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Använt utrymme: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Klicka för att ladda",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Fel: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Det gick inte att filtrera ordentligt vid webbläsarstart. Ladda om sidan för att säkerställa korrekt filtrering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/sw/messages.json b/src/_locales/sw/messages.json
new file mode 100644
index 0000000..a546d80
--- /dev/null
+++ b/src/_locales/sw/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Hatimaye, kizuizi kinachofaa. Nyepesi kwenye CPU na kumbukumbu.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Dashibodi",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Ilani! Una mabadiliko ambazo hazijahifadhika.",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Baki",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Puuza",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Mipangilio",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Chuja orodha",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Vichujio vyangu",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Kanuni zangu",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Orodha-ruhusu",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Njiamikato",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ - Batli",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Kuhusu",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Usaidizi",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ - Kitazama rasilimali",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Mipangilio pevu",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Bofya: lemaza/wezesha uBlock₀ kwenye tovuti hii.\n\nCtrl+bofya: lemaza uBlock₀ kwenye ukurasa huu pekee.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Bofya kulemaza uBlock₀ kwenye tovuti hii.\n\nCtrl+bofya kulemaza uBlock₀ kwenye ukurasa huu pekee.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Bofya kuwezesha uBlock₀ kwenye tovuti hii.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "Maombi yaliyozuiliwa",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "kwenye ukurasa huu",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "tangu usakinishaji",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "au",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Yaliyozuiliwa kwenye ukurasa huu",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Yaliyozuiliwa tangu usakinishaji",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Vikoa vilivyounganishwa",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Fungua dashibodi",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Ingia mtindo wa kufyatua vipengele",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Ingia mtindo wa kuchagua vipengele",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Fungua batli",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Ripoti shida na tovuti hii",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Togoa uzuiaji wa vibukizi kwenye tovuti hii",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Bofya kuzuia vibukizi vyote kwenye tovuti hii",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Bofya kusitisha kuzuia vibukizi vyote kwenye tovuti hii",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Togoa uzuiaji wa vipengele vya midia kubwa kwenye tovuti hii",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Bofya kuzuia vipengele vya midia kubwa kwenye tovuti hii",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Bofya kusitisha kuzuia vipengele vya midia kubwa kwenye tovuti hii",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Togoa uchujaji wa kurembesha kwenye tovuti hii",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Bofya kulemaza uchujaji wa kurembesha kwenye tovuti hii",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Bofya kuwezesha uchujaji wa kurembesha kwenye tovuti hii",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Togoa uzuiaji wa fonti za mbali kwenye tovuti hii",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Bofya kuzuia fonti za mbali kwenye tovuti hii",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Bofya kusitisha kuzuia fonti za mbali kwenye tovuti hii",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Bofya kulemaza JavaScript kwenye tovuti hii",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Bofya kusitisha kulemaza JavaScript kwenye tovuti hii",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Vidirisha ibukizi",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Vipengele vya midia kubwa",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Uchujaji wa kurembesha",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Fonti za mbali",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Zaidi",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Chache",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Kanuni za kila mahali: safuwima hii ni ya kanuni zinazotekelezeka kwenye tovuti zote.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Kanuni za ndani: safuwima hii ni ya kanuni zinazotekelezeka kwenye tovuti ya sasa pekee.\nKanuni za ndani hubatilisha kanuni za kila mahali.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Bofya kufanya mabadiliko yako yadumu.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Bofya kurejelesha mabadiliko yako.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "zote",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "picha",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "Mhusika wa tatu",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS ya mhusika wa tatu/picha",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "hati za mstari wa ndani",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "Hati za mhusika wa kwanza",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "Hati za mhusika wa tatu",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "Fremu za mhusika wa tatu",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "vikoa vilivyounganishwa",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} kati ya {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Toleo",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Unda",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Teua",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Ondoka",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Hakiki",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Vichujio vya mtandao",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Vichujio vya kurembesha",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Bofya, Ctrl+bofya",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Zuia kipengele...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Ficha vishikilia nafasi za vipengele vilivyozuiliwa",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Onyesha idadi ya maombi yaliyozuiliwa kwenye ikoni",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Lemaza vidokezozana",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Tumia menyu muktadha panapofaa",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Rahisi na upofu wa rangi",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Mwonekano",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Mandhari",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Rangi ya lafudhi maalum",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Wezesha auni wa hifadhi ya wingu",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Mimi na mtumiaji mahiri",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Lemaza kuleta-mapema (kuepuka uunganishaji wowote wa maombi yaliyozuiliwa)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Lemaza ukaguzi wa viungo-wavuti",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Zuia WebRTC kuvuja anwani za IP za ndani",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Tabia chaguo-msingi",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Tabia hizi chaguo-msingi zinaweza kubatilishwa kwenye msingi wa kila tovuti",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Lemaza uchujaji wa kurembesha",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Zuia vipengee vya midia vilivyo kubwa kuliko KB {{input}}",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Zua fonti za mbali",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Lemaza JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Zuia ripoti za CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Fichua majina kawaida",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Mahiri",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Vipengele vinawafaa watumiaji maarufu tu.",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "mipangilio pevu",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Rejesho ya mwisho:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Chelezo ya mwisho:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "Vichujio vya mtandao {{netFilterCount}} + vichujio vya kurembesha {{cosmeticFilterCount}} kutoka:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} zimetumika kati ya {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Sasisha kiotomatiki orodha ya vichujio",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Sasisha sasa",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Takasa kashe zote",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Changanua na lazimisha vichujio vya kurembesha",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Vichujio vya kurembesha vinasaidia kuficha vipengele kwenye ukurasa tovuti ambavyo vinaweka kuwa vizuizi vya mwonekano, na ambavyo haviwezi zuiliwa kupitia injini ya vichujio vinavyotegemea maombi ya mtandao.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Puuza vichujio vya kurembesha vya kijeneriki",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Vichujio jeneriki vya kurembesha ni vichujio vya kurembesha ambavyo vinafaa kutumika kwenye tovuti zote. Kuwezesha chaguo hii kutaondoa mzigo wa kumbukumbu na CPU unaoongezwa kwenye kurasa tovuti baada ya kuzingatia vichujio jeneriki vya kurembesha.\n\nUnapendekezwa kuwezesha chaguo hii kwenye vifaa vyenye uwezo zaidi.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Simamisha shughuli za mtandao hadi orodha zote zimepakiwa",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Tekeleza mabadiliko",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Vijengwa ndani",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Mtngzo",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Faragha",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Vikoa vya programu hasidi",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Vikasirisho",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "\nVya anuwai",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Mikoa, lugha",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Inayokufaa",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Leta...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "URL moja kila laini. URL batili zitapuuzwa kimya kimya.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Zilizoisha muda.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "tazama yaliyomo",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Sasisho ya mwisho: {{ago}}.\nBofya kulazimisha sasisho.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Inasasisha...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Tatizo la mtandao imezuia rasilimali kusasishwa.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Chujia moja kila laini. Chujio inaweza kuwa kuwa jina pangishi (hostname), au chujio linalotumika na Adblock Plus. Laini zilizo na viambishi awali za <code>!</code> zitapuuzwa.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Leta na ambatisha",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Hamisha",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "chujio-zangu-tuli-za-ublock_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Tekeleza mabadiliko",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Kanuni za kudumu",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Kanuni za muda",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Rudisha",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Kabidhi",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Hariri",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Hifadhi",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Tupa",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Leta kutoka faili...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Hamisha kuenda faili",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "chujio-zangu-badilifu-za-ublock_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Orodha ya kanuni zako badilifu za uchujaji",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Kanuni za sintaksi: <code>tendo la aina ya chanzo fikio</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>Kumbukumbu kamili</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Panga:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Aina ya kanuni",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Chanzo",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Fikio",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Orodha ya vikubaliwa inaamrisha ni kwenye kurasa zipi uBlock Origin italemazwa. Ingizo moja tu kila laini. Maelekezi batili yatapuuzwa kimyakimya na kufanywa kuwa maoni.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Leta na ambatisha",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Hamisha",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "orodhakubalizi-yangu-ya-ublock_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Tekeleza mabadiliko",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Aina",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Kikoa",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Kichujio",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Zote",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Bila vichupo",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Kichupo cha sasa",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Pakia upya yaliyomo kwenye kichupo",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Togoa kikaguzi cha DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Togoa paneli ibukizi",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "wiki ya uBlock Origin: Batli",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Futa batli",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Sitisha batli (puuza data yote inayoingia)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Wacha kusitisha batli",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Togoa uchujaji batli",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "chuja yaliyomo kwenye batli",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Machaguo ya uchujaji batli",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Sio",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "imezuiliwa",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "imekubaliwa",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "imebadilishwa",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "Mhusika wa kwanza",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "Mhusika wa tatu",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Ufafanuzi",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Kichujio",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Orodha ya vichujio",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Kanuni",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Muktadha",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Muktadha shina",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partyness",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Aina",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Kanuni ya URL",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Muktadha:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Aina:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Chujio tuli",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} maombi ya mtanda ya {{type}} {{br}} ambayo anwani ya URL inafanana na {{url}} {{br}} ambayo asili ni {{origin}},{{br}}{{importance}} kunayo chujio kighairi inayofanana.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Zuia",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Ruhusu",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "aina \"{{type}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "aina yoyote",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "kutoka \"{{origin}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "kutoka popote",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "isipokuwa wakati",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "hata kama",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Chujio tuli <code>{{filter}}</code> ilipatikana kwenye:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Chujio tuli haikupatikana popote kwenye orodha za machujio zilizowezeshwa",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Maingizo ya batli yasiyokamilisha masharti yote matatu hapo chini yatatupiliwa mbali kiotomatiki.",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Hifadhi maingizo za dakika {{input}} zilizopita",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Hifadhi hadi upakiaji-kurasa {{input}} kwenye kila kichupo",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Hifadhi hadi maingizo {{input}} kwenye kila kichupo",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Tumia laini {{input}} kila ingisho katika mtindo ya safuwima iliyopanuliwa.",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Ficha safuwima:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Wakati",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Kichujio/kanuni",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "Muktadha",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partyness",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Orodha",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Meza",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Ghafi",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Fungua",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Unda ripoti mpya",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Pata ripoti sawia",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Kumbukumbu",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Soma mwongozo <code>kwa uBlock</code> kujua vipengele vyote vya uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Maswali na usaidizi",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Majibu ya maswali na usaidizi wote mwingine yanapatikana kwenye subreddit ya <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Shida na vichujio/tovuti imeharibika",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Ripoti shida za vichujio za tovuti maalum kwenye<span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\">uBlockOrigin/uAssets</code>kifuatiliaji cha shida</span>. <u>Itahitaji akaunti ya GitHub.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Muhimu:</b> Epuka kutumia vizuizi vingine pamoja na uBlock Origin, maana shida zinaweza kutokea kwenye tovuti kadhaa.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Vidokezo:</b> Hakikisha orodha zako ni zimesasishwa. <span data-url=\"logger-ui.html#_\">Kirekodi</span> ndicho kifaa kuu cha kutatua shida za vichujio.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Ripoti hitilafu",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Ripoti shida na uBlock Origin yenyewe kwenye<span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code>kifuatiliaji cha shida</span>.<u>Itahitaji akaunti ya Github.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Maelezo ya utafutatuzi",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Ifuatayo ni taarifa ya kiteknolojia inayoweza kuwa ya manufaa wakati waliojitolea wakijaribu kukusaidia.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Muhimu:</b> Taarifa inayoweza kuwa nyeti hutolewa, kama chaguo-msingi. Taarifa iliyotolewa huenda ikanya utatuzi wa shide iwe ngumu zaidi.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Ripoti shida ya kichujio",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Ili usiwasumbue wasaidizi waliojitolea kwa ripoti rudufu, tafadhali hakikisha kuwa shida haijaripotiwa bado.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Anwani ya tovuti:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Tovuti husika…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Chagua ingizo --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Inaonyesha matangazo au mabakshishi yake",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Ina matandazo au sumbufu zingine",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Inagundua uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Ina shida za faragha",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Huenda vibaya uBlock Origin ikiwezeshwa",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Hufungua vichupo au vidirisha visivyotakikana",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Ipe tovuti lebo ya \"NSFW\" (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">\"Haifai Kazini\"</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Sera ya faragha",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Yaliyobadilika",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Msimbo wa chanzo (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Wachangiaji",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Msimbo chanzo",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Tafsiri",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Orodha za vichujio",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Msimbo wa chanzo (inatangamana na GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Orodha za vichujio za uBO hupangishwa kwenye <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN hizi</a>.",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "CDN iliyochaguliwa kwa unasibu hutumika orodha ya kichujio inapohitaji kusasishwa",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Cheleza kwenye faili",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "chelezo-yangu-ya-ublock_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Rejesha kutoka faili...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Weka upya hadi mipangilio chaguo-msingi...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Mipangilio yako yote itaandikwa upya kutumia data iliyochelezwa mnamo {{time}}, na uBlock₀ itaanza upya.\n\nAndika upya mipangilio yote kutumia chelezo ya data?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Data haisomeki au ni batili",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Mipangilio yako yote itaondolewa, na uBlock₀ itaanza upya.\n\nWeka upya uBlock₀ hadi mipangilio ya mwanzo?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Tatizo la mtandao: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: Ongeza URL ifuatayo kwenye orodha za uchujaji zinazokufaa?\n\nKicha: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Jisajili",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "dakika moja iliyopita",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "dakika {{value}} zilizopita",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "saa moja iliyopita",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "masaa {{value}} yaliyopita",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "jana",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "siku {{value}} zilizopita",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Onyesha dashibodi",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Onyesha batli",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "zimwa",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Page blocked",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin imezuia ukurasa huu kupakia:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Kwa sababu ya kichujio kifuatacho",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "bila parameta",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Ilipatwa katika:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Rudi nyuma",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Funga dirisha hii",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Lemaza uzuiaji kali kwa {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Kwa muda",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Daima",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Hamisha hadi hifadhi ya wingu",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Leta kutoka hifadhi ya wingu",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Leta kutoka hifadhi ya wingu na unganisha na mipangilio ya sasa",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Jina la kifaa hiki:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Ilani! Badilisha mipangilio hii mahiri kwa hiari yako.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Wasilisha",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Tekeleza mabadiliko",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Rudisha",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "baiti",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Zuia kipengee kwenye fremu...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Jisajili kwenye orodha hii…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Ruhusu kwa muda vipengele vya midia kubwa",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Charaza njiamkato",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Togoa kubingiriza kuliofungwa",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Nakili hadi ubao-nakili",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Chagua yote",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Pumzisha mtindo wa kuzuia",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Hifadhi iliyotumika: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Bofya kupakia",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/ta/messages.json b/src/_locales/ta/messages.json
new file mode 100644
index 0000000..5a13a9d
--- /dev/null
+++ b/src/_locales/ta/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "இறுதியாக, ஒரு திறமையான விளம்பரத் தடுப்பான். கணினியின் மையச் செயற்பகுதியின் மேலும் நினைவகத்தின் மேலும் இலகுவானது.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ - நிர்வாக மையம்",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "எச்சரிக்கை! உங்களிடம் சேமிக்கப்படாத மாற்றங்கள் உள்ளன",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "இருங்கள்",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "பொருட்படுத்தாதே",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "அமைப்புகள்",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "வடிகட்டி பட்டியல்கள்",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "என் வடிகட்டிகள்",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "என் விதிமுறைகள்",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "அனுமதிப்பட்டியல்",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "குறுக்குவழிகள்",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — பிணையக் கோரிக்கைப் பதிகை",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "எம்மைப் பற்றி",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "ஆதரவு",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock -- உடைமை பார்வையாளர்",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "மேம்பட்ட அமைப்புகள்",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "இந்த தளத்தில் ‍‍‍uBlock₀ ஐ முடக்கவோ/இயக்கவோ: இங்கே சுட்டு.\nCtrl+click: என்ற குறுக்குவிசையின் மூலம் uBlock₀ ஐ இந்தப் பக்கத்தில் மட்டும் முடக்கு.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "இந்த வலைத்தளத்திற்கு uBlock முடக்க, கிளிக் செய்யவும்.\n\nuBlockகை இந்த வலைத்தளத்திற்கு முடக்க Ctrl+click செய்யவும்.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "இந்த வலைத்தளத்திற்கு uBlockகை செயல்படுத்த கிளிக் செய்க.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "தடுக்கப்பட்ட கோரிக்கைகள்",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "இந்த இணையப் பக்கத்தில்",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} அல்லது {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "நிறுவியது முதல்",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "அல்லது",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "இப்பக்கத்தில் தடுக்கப்பட்டது",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "நிறுவியதிலிருந்து தடுக்கப்பட்டது",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "களங்கள் இணைக்கப்பட்டுள்ளன",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "நிர்வாக மையத்தை திறக்க இங்கே சொடுக்கவும்",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "பகுதி தெரிவு முறைமைக்கு நுழை",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "உறுப்புத் தெரிவு முறைமைக்குச் செல்லவும்",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "பிணையக் கோரிக்கைப் பதிவிற்கு செல்",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "இத்தளத்திலொரு சிக்கலைப் புகாரளி",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "இத்தளத்தில் அனைத்து மேல்விரிகளையும் தடுப்பதை மாற்றவும்",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "இந்த தளத்தில் உள்ள அனைத்து பாப்அப்களையும் தடுக்க கிளிக் செய்க",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "இத்தளத்தில் உள்ள எல்லா பாப்அப்களையும் இனி தடுக்காமலிருக்க சொடுக்குக",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "இத்தளத்திற்கான பெரிய ஊடக கூறுகளைத் தடுப்பதை நிலைமாற்று",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "இத்தளத்தில் பெரிய ஊடக கூறுகளைத் தடுக்க சொடுக்குக",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "இத்தளத்தில் பெரிய ஊடக கூறுகளை இனி தடுக்காமலிருக்க சொடுக்குக",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "இத்தளத்திற்கான ஒப்பனை வடிகட்டியை மாற்றவும்",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "இத்தளத்தில் ஒப்பனை வடிகட்டலை முடக்க சொடுக்குக",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "இத்தளத்தில் ஒப்பனை வடிகட்டலை இயக்க சொடுக்குக",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "இத்தளத்திற்கான தொலைநிலை எழுத்துருக்கள் தடையை மாற்றவும்",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "இத்தளத்தில் தொலை எழுத்துருக்களைத் தடுக்க சொடுக்குக",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "இத்தளத்தில் தொலை எழுத்துருக்களை இனி தடுக்காமலிருக்க சொடுக்குக",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "இத்தளத்தில் ஜாவாஸ்கிரிப்டை முடக்க சொடுக்குக",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "இத்தளத்தில் ஜாவாஸ்கிரிப்டை இனி முடக்காமலிருக்க சொடுக்குக",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "பாப்-அப் சாளரங்கள்",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "பெரிய ஊடக கூறுகள்",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "ஒப்பனை வடிகட்டுதல்",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "தொலை எழுத்துருக்கள்",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "ஜாவாஸ்கிரிப்ட்",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "மேலும்",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "குறைந்து",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "உலகளாவிய விதிகள்: இந்நெடுவரிசை அனைத்து தளங்களுக்கும் பொருந்தும் விதிகளுக்கானது.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "அக விதிகள்: இந்நெடுவரிசை தற்போதைய தளத்திற்கு மட்டுமே பொருந்தும் விதிகளுக்கானது.அக விதிகள் உலகளாவிய விதிகளை மீறுகின்றன.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "இங்கே சுட்டி உங்கள் மாற்றங்களை நிரந்தரமாக்கவும்.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "இங்கே சுட்டி உங்கள் மாற்றங்களைப் பழைய நிலைக்குத் திருப்பவும்.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "அனைத்தும்",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "படங்கள்",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "மூன்றாம் தரப்பு",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "மூன்றாம் தரப்பு CSS/படங்கள்",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "உள்வரி உரைகள்",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1‍-ஆம் தரப்பு உரைகள்",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "மூன்றாம் தரப்பு உரைகள்",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "மூன்றாம் தரப்பு சட்டங்கள்",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "ஆள்களங்கள் இணைக்கப்பட்டுள்ளது",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "மொத்தம் {{total}} இல் {{count}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "பதிப்பு",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "உருவாக்கு",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "எடு",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "வெளியேறு",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "முன்னோட்டம்",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "இணைய வடிகட்டிகள்",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "ஒப்பனை வடிகட்டி",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "சொடுக்கு, Ctrl-சொடுக்கு",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "உறுப்பைத் தடு...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "தடுக்கப்பட்ட உறுப்புகளின் பெட்டிகளை மறை",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "தடுக்கப்பட்ட கோரிக்கைகளின் எண்ணிக்கையைப் பாவையில் காட்டவும்",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "உதவிக்குறிப்புக்களை முடக்கு",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "தக்க இடங்களில் சூழல் பட்டியலைக் காட்டு",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "நிறம்-அறியாதோருக்கு ஏதுவாக",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "தோற்றம்",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "நிறவமைவு",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "தனிப்பயன் உரப்பு நிறம்",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "மேகக்கணி சேமிப்பக ஆதரவு இயக்கு",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "நான் ஒரு மேம்பட்ட பயனர் (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>வாசித்தல் தேவை</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "முன்கூட்டியே பெறுவதை முடக்கு (தடுக்கப்பட்ட பிணைய கோரிக்கைகளுக்கான எந்தவொரு தொடர்பையும் தடுக்க)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "உரலியிணைப்புத் தணிக்கையை முடக்கவும்",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "உங்கள் தனிப்பட்ட IP முகவரியை WebRTC வெளிக்காட்டாதபடி தடுக்க",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "இயல்பான நடத்தை",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "இந்த இயல்புநிலை நடத்தைகள் ஒரு தள அடிப்படையில் மீறப்படலாம்",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "ஒப்பனை வடிகட்டியை தடை செய்",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Elements {உள்ளீடு}} KB ஐ விட பெரிய ஊடக உறுப்புகளைத் தடு",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "தொலை எழுத்துருக்களை தடு",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "ஜாவாஸ்கிரிப்டை முடக்கு",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "CSP அறிக்கைகளைத் தடு",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "நியமன பெயர்களை அவிழ்த்து விடுங்கள்",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "உயரமைவு",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "நுட்பமான பயனர்களுக்கு மட்டுமே ஏற்ற அம்சங்கள்.",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "மேம்பட்ட அமைப்புகள்",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "இறுதியாக மீட்பதற்கு:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "கடைசி மறுபிரதி:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} பிணைய வடிகட்டிகள் + {{cosmeticFilterCount}} ஒப்பனை வடிகட்டிகளிலிருந்து:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "மொத்தம் {{total}} இல் {{used}} பயன்படுத்தப்பட்டது",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "வடிகட்டி பட்டியல்களை தானாக புதுப்பி.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "இப்போது புதுப்பிக்கவும்",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "தற்காலிகச் சேமிப்புகள் அனைத்தையும் அகற்று",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "இலக்கணகூறை விவரி மற்றும் ஒப்பனை வடிகட்டிகளை செயல்படுத்து.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "<p>இந்தத் தேர்வு <a href=\"https://adblockplus.org/en/faq_internal#elemhide\">Adblock Plus-க்கு ஏற்ற &ldquo;உறுப்பு மறைக்கும்&rdquo; வடிகட்டிகளைப்</a> படிப்பதையும் பயன்படுத்துவத்தையும் செயல்படுத்தும். இந்த வடிகட்டிகள் அடிப்படையில் மேலோட்டமானவை. இணையப் பக்கத்தின் தோற்றத்தில் தொந்தரவாகக் கருதப்பட்டு, ஆனால் இணையக்கோரிக்கைகளை வடிகட்டும் எஞ்சினின் மூலம் தடுக்கப்பட முடியாத பக்க-உறுப்புகளை, பார்வையிலிருந்து மட்டும் மறைக்கும்</p><p>இந்தத் தேர்வு uBlock₀-இன் நினைவக உபயோகத்தை அதிகரிக்கும்.</p>",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "பொதுவான ஒப்பனை வடிகட்டிகளை புறக்கணி",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "பொதுவான ஒப்பனை வடிப்பான்கள் அனைத்து ஒப்பனை வடிப்பான்களாகும், அவை எல்லா வலைத்தளங்களிலும் பொருந்தும். இந்த விருப்பத்தை இயக்குவது பொதுவான ஒப்பனை வடிப்பான்களைக் கையாளுவதன் விளைவாக வலைப்பக்கங்களில் சேர்க்கப்பட்ட நினைவகம் மற்றும் CPU மேல்நிலை ஆகியவற்றை நீக்கும்.குறைந்த சக்திவாய்ந்த சாதனங்களில் இந்த விருப்பத்தை இயக்க பரிந்துரைக்கப்படுகிறது.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspend network activity until all filter lists are loaded",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "தடைசெய்யப்பட்ட வழங்கிகளின் பட்டியல்",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "மாற்றங்களைச் செயல்படுத்து",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "உள்ளமைக்கப்பட்ட",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "விளம்பரங்கள்",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "தனியுரிமை",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "தீப்பொருள் ஆள்களங்கள்",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "எரிச்சல்கள்",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "பல்நோக்கு வடிகட்டி",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "மாநில பகுதிகள், மொழிகள் வாரியான",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "தனிபயன்",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "இறக்குமதி ...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "ஒரு வரிக்கு ஒரு இணைய முகவரி. &lsquo;!&rsquo; எனும் எழுத்தில் தொடங்கும் வரிகள் புறக்கணிக்கப்படும். தவறான முகவரிகளும் அமைதியாகப் புறக்கணிக்கப்படும்.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "காலாவதியாகிவிட்டது",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "உள்ளடக்கத்தைக் காண்க",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "கடைசி புதுப்பிப்பு: {{முன்பு}}.\nபுதுப்பிப்பை கட்டாயப்படுத்த கிளிக் செய்க.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "புதுப்பிக்கிறது...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "ஒரு பிணைய பிழை வளத்தைப் புதுப்பிப்பதைத் தடுத்தது.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "ஒரு வரிக்கு ஒரு வடிகட்டி. வடிகட்டி என்பது வெறும் வழங்கிப்பெயராக இருக்கலாம், அல்லது Adblock Plus-க்குப் பொருந்தும் வடிகட்டியாக இருக்கலாம். &lsquo;!&rsquo; எனும் எழுத்தில் தொடங்கும் வரிகள் புறக்கணிக்கப்படும்.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "இறக்குமதி செய் மற்றும் இணை",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "ஏற்று",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "மாற்றங்களைச் செயல்படுத்து",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "நிரந்தரமான விதிகள்",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "தற்காலிக விதிகள்",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "முன்நிலையாக்கு",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "உறுதியளி",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "தொகு",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "சேமி",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "நிராகரி",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "கோப்பிலிருந்து இறக்குமதி செய் ...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "கோப்பினுள் ஏற்று",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "உங்களுடைய மாறுநிலை வடிகட்டி விதிப் பட்டியல்கள்.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "விதி தொடரியல்: <code> மூல இலக்கு வகை செயல் </ குறியீடு> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'> முழு ஆவணங்கள் </a> ).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "வகைபடுத்து:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "விதி வகை",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "மூல",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "இலக்கு",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "எந்தெந்தப் பக்கங்களில் uBlock₀ முடக்கப்பட வேண்டுமென்பதை அனுமதிப்பட்ட கட்டளைகள் ஆணையிடுகின்றன. வரிக்கு ஒரு இடுகை மட்டுமே. தவறான கட்டளைகள் அமைதியாகப் புறக்கணிக்கப்படும்.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "இறக்குமதி செய்து சேர்",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "ஏற்று",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "மாற்றங்களைச் செயல்படுத்து",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "வகை",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "ஆள்களம்",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "உரலி",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "வடிகட்டு",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "அனைத்தும்",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "இ.தளங்களின் பின்னால் நடப்பவை",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "தற்போதைய தாவல்",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "தாவல் உள்ளடக்கத்தை மீண்டும் ஏற்றவும்",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "DOM இன்ஸ்பெக்டரை நிலைமாற்று",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "பாப்அப் பலகையை நிலைமாற்று",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock தோற்றம் விக்கி: லாகர்",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "லாகரை அழி",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "லாகரை இடைநிறுத்து (உள்வரும் எல்லா தரவையும் நிராகரி)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "லாகர் இடைநிறுத்தம் தவிர்",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "லாகர் வடிகட்டலை நிலைமாற்று",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "பதிகை உருப்படிகளை வடிகட்டு",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "லாகர் வடிகட்டுதல் விருப்பங்கள்",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "இல்லை",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "தடுக்கப்பட்டது",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "அனுமதிக்கப்படுகிறது",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "மாற்றப்பட்டது",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "முதல் கட்சி",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "மூன்றாம் தரப்பு",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "விவரங்கள்",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "வடிகட்டி",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "வடிகட்டி பட்டியல்",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "விதி",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "சூழல்",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "வேர் சூழல்",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "கட்சித்தன்மை",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "வகை",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "இணைய முகவரி",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "உரலி விதி",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "சூழல்:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "வகை:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "நிலையான வடிகட்டுதல்",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{origin}} தொடங்கும், {{br}}{{url}}-குப் பொருந்தும் முகவரி கொண்ட{{br}}{{type}} பிணையக் கோரிக்கைகளை {{action}},{{br}}பொருந்தும் விதிவிலக்கு வடிகட்டி {{importance}}.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "முடக்கு",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "அனுமதி",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "\"{{type}}\" வகை",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "எந்த வகையும்",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "“{{origin}}”-இல் இருந்து",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "எங்கிருந்தும்",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "இல்லாவிட்டால் மட்டும்",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "இருந்தாலும் கூட‌",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "நிலையான வடிப்பான் <code> {{வடிகட்டி}} </ குறியீடு> இதில் காணப்படுகிறது:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "தற்போது இயக்கப்பட்ட வடிகட்டி பட்டியல்களில் நிலையான வடிப்பானைக் கண்டுபிடிக்க முடியவில்லை",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "கீழே உள்ள மூன்று நிபந்தனைகளையும் பூர்த்தி செய்யாத லாகர் உள்ளீடுகள் தானாக நிராகரிக்கப்படும்:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "கடைசி {{உள்ளீடு} from நிமிடங்களிலிருந்து உள்ளீடுகளைப் பாதுகாக்கவும்",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "ஒரு தாவலுக்கு அதிகபட்சம் {{உள்ளீடு}} பக்க சுமைகளைப் பாதுகாக்கவும்",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "ஒரு தாவலுக்கு அதிகபட்சம் {{உள்ளீடு}} உள்ளீடுகளை பாதுகாக்கவும்",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "செங்குத்தாக விரிவாக்கப்பட்ட பயன்முறையில் ஒரு நுழைவுக்கு {{input}} கோடுகளைப் பயன்படுத்தவும்",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "நெடுவரிசைகளை மறை:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} நேரம்",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} வடிகட்டி/சட்டம்",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} சூழல்",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} கட்சித்தன்மை",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "பட்டியல்",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "பொருளடக்கம்",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "வெற்று",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "மார்க் டவுன்",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "திற",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "புதிய புகாரை உருவாக்கு",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "ஒரேமாதிரியான புகார்களைக் கண்டறி",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "ஆவணமாக்கல்",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Read the documentation at <code>uBlock/wiki</code> to learn about all of uBlock Origin's features.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "கேள்விகள் மற்றும் ஆதரவு",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter issues/website is broken",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "பிழை அறிக்கை",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Troubleshooting Information",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "வடிகட்டி சிக்கலைப் புகாரளி",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "வலைப்பக்கத்தின் முகவரி:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "வலைப்பக்கம்...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pick an entry --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shows ads or ad leftovers",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "தனியுரிமைசார் சிக்கல்களுள்ளன",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "uBlock Origin இயக்கப்பட்டிருந்தால் உடையும்",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "தேவையற்ற தாவல்கள் அ சாளரங்களைத் திறக்கிறது",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "தனியுரிமை கொள்கை",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "மாற்றப்பதிவு",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "மூல நிரல் (பொது மக்கள் உரிமம் பதிப்பு 3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "பங்களிப்பாளர்கள்",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "மூல குறியீடு",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "மொழிபெயர்ப்புகள்",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "பட்டியல்களை வடிகட்டவும்",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "வெளிப்புற சார்புகள் (GPLv3- இணக்கமானது):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO வின் சொந்த வடிகட்டி பட்டியல்கள் பின்வருவனவற்றில் இலவசமாக வழங்கப்படுகின்றன <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "வடிகட்டி பட்டியலைப் புதுப்பிக்க வேண்டியிருக்கும் போது சீரற்ற முறையில் தேர்ந்தெடுக்கப்பட்ட CDN பயன்படுத்தப்படுகிறது",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "கோப்பிற்கு காப்பு பிரதி எடு",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "கோப்பிலிருந்து மீட்டெடு...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "இயல்புநிலை அமைப்புகளுக்கு அகரமாக்கு...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "உங்கள் எல்லா அமைப்புகளும் காப்புப் பதிவைப் {{time}} பயன்படுத்தி மேலெழுதப்படும், பிறகு uBlock மறுதொடக்கம்.\n\nகாப்புப்பட்ட தரவைப் பயன்படுத்தி உள்ள எல்லா அமைப்புகளையும் மேலெழுதவா?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "தரவை வாசிக்க முடியவில்லை அ செல்லாதது",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "உங்கள் எல்லா அமைப்புகளும் அகற்றப்படும், பிறகு uBlock மீண்டும் தொடங்கும்.\n\nuBlockகை தொழிற்சாலை அமைப்புகளை மீட்டமைக்கவ?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "பிணையத்தில் பிழை: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: பின்வரும் உரலியை உங்களுடைய தனிபயன் வடிகட்டியில் சேர்க்கலாமா?\n\nதலைப்பு: \"{{title}}\"\nஉரலி: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "சந்தாதராகு",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "ஒரு நிமிடம் முன்பு",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} நிமிடங்கள் முன்பு",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "ஒரு மணி நேரம் முன்பு",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} மணிநேரம் முன்பு",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "ஒரு நாள் முன்பு",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} நாள் முன்பு",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "நிர்வாக மையத்தைக் காட்டுக",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "பதிவேட்டைக் காண்பி",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "முடக்கத்தில்",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Page blocked",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin பின்வரும் பக்கத்தை ஏற்றுவதில் இருந்து தடுத்தது:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "பின்வரும் வடிகட்டியினால்:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "உரலியில் அளவுருக்கள் இல்லாமல்",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "இதனுள் கண்டறியப்பட்டது:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "பின் செல்",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "இச்சாளரத்தை மூடு",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "{{hostname}}-இல் கண்டிப்பான தடையைச்‌ செயலிழக்கச் செய்",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "தற்காலிகமாக",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "நிரந்தரமாக",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "மேகக்கணினி சேமிப்பகத்திற்கு ஏற்று",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "மேகக்கணினி சேமிப்பகத்திலிருந்து இறக்கு",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "மேகக்கணினி சேமிப்பகத்திலிருந்து இறக்கியபின் நடப்பு அமைப்புகளுடன் இணை",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "இந்தச் சாதனத்தின் பெயர்:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "எச்சரிக்கை! இந்த மேம்பட்ட அமைப்புகளை உங்கள் சொந்த ஆபத்தில் மாற்றவும்.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "சமர்ப்பி",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "மாற்றங்களைச் செயல்படுத்து",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "முன்நிலையாக்கு",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "பைட்டுகள்",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "சட்டத்தில் தொகுதி உறுப்பு ...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "வடிகட்டி பட்டியலுக்கு குழுசேர்...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "தற்காலிகமாகப் பெரிய ஒலி‍-ஒளி-படத்தொகுப்புகளின் கூறுகளை அனுமதி",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "குறுக்குவழியைத் தட்டச்சு செய்க",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "ஸ்க்ரோலிங் பூட்டு மாற்று",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "நினைவிக்கு நகலெடு",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "எல்லாம் தேர்ந்தெடு",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "ஒப்பனை வடிகட்டுதலை மறுநிலைமாற்று",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "தடுப்பு பயன்முறையை தளர்த்தவும்",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "பயன்படுத்தப்பட்ட சேமிப்பகத்தின் அளவு: {{value}} பைட்டுகள்",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "ஏற்ற கிளிக் செய்க",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/te/messages.json b/src/_locales/te/messages.json
new file mode 100644
index 0000000..21797c8
--- /dev/null
+++ b/src/_locales/te/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "మొత్తానికి RAM ఇంకా CPU పై తేలికయిన, ఒక సమర్థవంతమైన నిరోధిని.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — నియంత్రణా వేదిక",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "హెచ్చరిక! మీరు భద్రపరచని మార్పులు ఉన్నాయి",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "ఉండు",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "వదిలేయి",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "ఐచ్చికాలు",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "3వ-పక్ష వడపోతలు",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "నా వడపోతలు",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "నా నియమాలు",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "నమ్మే సైట్లు",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "షార్ట్కట్లు",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — నెట్వర్కు అభ్యర్ధనల చిట్టా",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "మా గురించి",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "సహాయం",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — వనరుల పట్టిక",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "అధునాతన అమరికలు",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "ఈ సైట్లో uBlock₀ను చేతనపరచడానికి లేదా అచేతనపరచడానికి క్లిక్ చేయండి.\n\nకేవలం ఈ పేజిలో uBlock₀ను అచేతనపరచడానికి Ctrl కీ వొత్తి పట్టుకొని క్లిక్ చేయండి.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "ఈ సైట్లో uBlock₀ను అచేతనపరచడానికి క్లిక్ చేయండి.\n\nకేవలం ఈ పేజిలో uBlock₀ను అచేతనపరచడానికి Ctrl కీ వొత్తి పట్టుకొని క్లిక్ చేయండి.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "ఈ సైట్లో uBlock₀ను చేతనపరచడానికి క్లిక్ చేయండి.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "నిలువరించబడిన అభ్యర్ధనలు",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "ఈ వెబ్ పేజిలో",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} లేదా {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "సంస్థాపన నుండి",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "లేదా",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "ఈ పేజిలో నిరోధించినవి",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "స్థాపించినప్పటి నుండి నిరోధించినవి",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "అనుసందానమైన డొమైన్లు",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "నియంత్రణా పట్టికను తెరచుటకు క్లిక్ చేయండి",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "భాగాలను ఎంచుకొని తొలగించు ప్రక్ర్యియనారంభించు",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "భాగాలను ఎంచుకొని తొలగించు ప్రక్ర్యియనారంభించు",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "అభ్యర్ధనల చిట్టా తెరువుము",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "ఈ వెబ్‌సైట్‌లో సమస్యను నివేదించండి",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "ఈ వెబ్సైట్ లో అన్ని పాప్అప్స్ ని నిషేధించు/అనుమతించు",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "ఇకపై ఈ సైట్లో అన్ని పపప్లను నిరోధించుటకు క్లిక్ చేయండి",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "ఇకపై ఈ సైట్లో అన్ని పపప్లను అనుమతించుటకు క్లిక్ చేయండి",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "ఈ సైట్లో వున్న భారి దృశ్య/శ్రవణ అంశాల నిరోధనా స్థితిని మార్చు",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "ఈ సైట్లో పెద్ద పరిమాణం మీడియా అంశాలను నిరోధించుటకు క్లిక్ చేయండి",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "ఇకపై ఈ సైట్లో పెద్ద పరిమాణం మీడియా అంశాలను అనుమతించుటకు క్లిక్ చేయండి",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "ఈ వెబ్ సైట్ లో కాస్మెటిక్ వడపోతల వాడుక స్థితిని మార్చు",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "ఈ వెబ్ సైట్ లో కాస్మెటిక్ ఫిల్టరింగ్ ని అచేతనపరచుటకు క్లిక్ చేయండి",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "ఈ వెబ్ సైట్ లో కాస్మెటిక్ ఫిల్టరింగ్ ని చేతపరచుటకు క్లిక్ చేయండి",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "ఈ సైట్ లో ఖతుల వాడుకని సక్రియ లేదా నిర్వీర్యపరచు",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "ఈ సైట్లోని రిమోట్ ఫాంట్లను నిరోధించుటకు క్లిక్ చేయండి",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "ఇకపై ఈ సైట్లో రిమోట్ ఫాంట్లను అనుమతించుటకు క్లిక్ చేయండి",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "ఈ సైటులో జావాస్క్రిప్టును అచేతనం చేయయానికి నొక్కండి",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "ఈ సైట్‌లో జావాస్క్రిప్ట్‌ను ఇకపై నిలిపివేయడానికి క్లిక్ చేయండి",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "పాప్-అప్ విండోలు",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "పెద్ద మీడియా అంశాలు",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "నిశ్చలాత్మక వడపోత",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "రిమోట్ ఫాంట్‌లు",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "జావాస్క్రిప్ట్",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "మరిన్ని",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "తక్కువ",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "సామాన్య నియమాలు: ఈ నిలువరుసలో వున్న నియమాలు అన్ని సైట్లకు వర్తిస్తాయి.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "స్థానిక నియమాలు: ఈ నిలువరుసలో వున్న నియమాలు కేవలం ప్రస్తుత సైట్ కే వర్తిస్తాయి.\nసామాన్య నియమాలపై స్థానిక నియమాలు అతిక్రమిస్తాయి.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "మీ మార్పులను శాశ్వతపరచడానికి క్లిక్ చేయండి.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "మీ మార్పులను తిరిగి పూర్వావస్థకు చేర్చుటకు క్లిక్ చేయండి.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "అన్ని",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "చిత్రాలు",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "సైట్-ఏతరుల అంశాలు",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "సైట్-ఏతరుల సిఎస్ఎస్/చిత్రాలు",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "లోబడిన స్క్రిప్ట్లు",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "సైట్ యొక్క స్క్రిప్ట్స్",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "సైట్-ఏతరుల స్క్రిప్ట్లు",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "సైట్-ఏతరుల ఫ్రేమ్స్",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "అనుసంధానించబడిన డొమైన్లు",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{total}} లో {{count}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "సంస్కరణ",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "స్క్రిప్ట్",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "ఫ్రేమ్",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "సృష్టించు",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "ఎంచుకోనుము",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "నిశ్క్రమించు",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "పరిశీలించు",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "నెట్వర్క్ అభ్యర్దన వడపోతలు",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "కాస్మెటిక్ వడపోతలు",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "క్లిక్, Ctrl+క్లిక్",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "దీన్ని నిరోధించు",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "నిరోధించబడిన అంశాలయోక్క స్థానసంగ్రాహకాలను దాచుము",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "చిహ్నంపై నిరొధించబడిన అభ్యర్దనల సంఖ్య చూపుము",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "టూల్టిప్స్ ను అచేతనపరచు",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "అనువైనచోట్లలో కుడి-క్లిక్ మెనూని ఉపయోగించుము",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "వర్ణ అంధులకనుకూలమైన",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "స్వరూపం",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "థీమ్",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "అనుకూల యాస రంగు",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "క్లౌడ్ లో పొందుపర్చడాన్న్ది అనుమతించు",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "మీరు నిపుణత కలిగిన వినియోగాదారులైతే (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>అవసరమైన సమాచారం</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "అంశాలను ముందుగానే తీసుకురావడాన్ని నిషేధించు (ఎవైనా అవాంఛనీయ అనుసంధానాలను నివారించడానికి)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "చిరునామాల తానిఖిని దాటవేయు",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "WebRTCని మీ స్థానిక IP చిరునామాలను బహిర్గతపరచనివ్వొద్దు",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "సామాన్య ప్రవర్తన",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "ఈ సామాన్య ప్రవర్తనను ఒక్కో సైట్లో ప్రత్యేకంగా మార్చుకోవోచ్చు",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "కాస్మెటిక్ వడపోతను నిర్వీర్యపరచు",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "పరిమాణంలో {{input:number}} కేబీల కన్నా పెద్దవైన అంశాలను నిరోధించు",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "బయటి ఖతులను నిరోధించు",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "జావాస్క్రిప్ట్‌ను ఆపివేయి",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "CSP నివేదికలను నిరోధించు",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "కానానికల్ పేర్లను తెరవండి",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "ఆధునిక",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "సాంకేతిక వినియోగదారులకు మాత్రమే సరిపోయే ఫీచర్లు",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "అధునాతన అమరికలు",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "గత పునరుద్ధారణ:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "గత నకలు:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "ఈ క్రింది మూలాల నుండి వచ్చిన {{netFilterCount}} నెట్వర్క్ వడపోతలు + {{cosmeticFilterCount}} కాస్మెటిక్ వడపోతలు:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{total}} లో వాడుతున్నది {{used}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "వడపోత జాబితాలను స్వయంచాలకంగా నవీకరించుము.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "జాబితా నవీకరించుము",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "తాత్కాలిక నిలువలను త్యజించు",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "పదనిరుపనచేసి కాస్మెటిక్ వడపోతలను ఉపయోగించు.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "<p>ఈ ఎంపిక <a href=\"https://adblockplus.org/en/faq_internal#elemhide\">Adblock Plus-అనుకూల &ldquo;అంశాల దాచిపెట్టే&rdquo; ఫిల్టర్లు ని</a> పదనిరుపనచేసి అమలుపరుస్తుంది. ఈ వఫిల్టర్లు చాలావరకు కాస్మెటిక్ అయివుంటాయి, అవి నెట్వర్క్ అభ్యర్ధన నిరోదన ద్వారా నిరోధించాబడలేని అవాంఛిథ అంశాలను దాచుటకు ఉపకరిస్తాయి.</p><p>ఈ ఎంపిక ను ఎంచుకున్నయేడల uBlock₀ యొక్క మెమరీ వాడుక పెరిగే ఆస్కారమున్నది</p>",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "కాస్మెటిక్ వడపోతలను విస్మరించు",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "<p>సాధారణ కాస్మెటిక్ ఫిల్టర్లు అన్ని సైట్లపై ఉపయోగించబడుతాయి.<p>వీటిని uBlock₀ సమర్థవంతంగా ఉపయోగించగలిగినా, కొన్ని భారీ లేదా దీర్ఘకాలికంగా వీక్షిస్తున్న పేజీలలో CPU ఇంకా RAM వాడుకను ఇవి పెంచగలవు.<p>ఈ ఎంపికను ఎంచుకోవడంవలన, సాధారణ కాస్మెటిక్ ఫిల్టర్లు కొరకు అదనపు CPU ఉపయోగాన్ని నివారిస్తుంది, పైగా uBlock₀ యొక్క RAM వాడుక తగ్గడానికి తోడ్పడుతుంది.<p>అల్పసామర్ధ్య పరికరాలలో దీన్ని ఎంచుకోవడం శ్రేయస్కరం.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "అన్ని ఫిల్టర్ జాబితాలు లోడ్ అయ్యే వరకు నెట్‌వర్క్ కార్యాచరణను నిలిపివేయండి",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "నిరోధించబడిన చిరునామాల జాబితా",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "మార్పులను అమలుపరచు",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "అంతర్నిర్మితం",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "ప్రకటనలు",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "గోప్యత",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "మాల్వేర్ డొమైన్లు",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "అసౌకర్యాల పట్టిక",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "బహూలార్ధక",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "ప్రాంతాలు, భాషలు",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "సొంత నిర్దేషణ",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "దిగుమతిచేయు...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "ఒక్కో పంక్తిలో ఒక URL. పంక్తిలో మొదట &lsquo;!&rsquo; ఉన్నచో ఆ పంక్తి పరిగనించబడదు. చెల్లని URLలు మౌనంగా విస్మరించబడుతాయి.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "పాతబడింది",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "దీన్ని చూపించు",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "గత నవీకరణ: {{ago}}.\nనవీకరించుటకు క్లిక్ చెయ్యండి.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "నవీకరిస్తోంది...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "ఈ చిట్టా అనుసంధాన వైఫల్యం వలన నవికరించబడలేదు.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "ఒక్కో పంక్తిలో ఒక ఫిల్టర్ నమోదు. పేర్కొనబడే ఫిల్టర్, కేవలం హోస్టుపేరు లేదా Adblock Plusకి అనువైన ఫిల్టర్ కావొచ్చు. పంక్తిలో మొదట &lsquo;!&rsquo; ఉన్నచో ఆ పంక్తి పరిగణలోకి తీసుకొబడదు.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "అవిశ్వసనీయ మూలాల నుండి ఫిల్టర్‌లను జోడించవద్దు.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "దిగుమతిచేసి పోడిగించుము",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "ఎగుమతి చేయు",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "మార్పులను భద్రపరచు",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "శాశ్వత నియమాలు",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "తాత్కాలిక నియమాలు",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "మార్పులను తిరస్కరించు",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "మార్పులను భద్రపరచు",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "చక్కదిడ్డుము",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "భద్రపరచు",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "పారవేయు",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "ఫైల్ నుండి దిగుమతి చేయుము...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "ఫైల్కు ఎగుమతి చేయుము",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "మీ క్రియాశీలక జల్లెడ నియమాల జాబితా.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "నియమనిర్మాన పద్ధతి: <code>మూలం గమ్యం రకం చర్య</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>పూర్తి వివరాలు</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "క్రమబద్ధీకరించు",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "రూల్ రకం",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "మూలం",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "గమ్యం",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "uBlock Origin అచేతనబడించిన హోస్టూల జాబితా, ఇది మీరు కూర్చినది,. ఒక్కో పంక్తికి ఒక్కో నమోదు. చెల్లని నమోదులు మౌనంగా విస్మరించబడుతాయి.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "దిగుమతిచేసి పోడిగించుము",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "ఎగుమతి",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-whitelist_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "మార్పులను భద్రపరచు",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "రకం",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "డొమైన్",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "జల్లెడ",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "అన్ని",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "తెర వెనుక",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "ప్రస్తుత ట్యాబ్",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "టాబ్ కంటెంట్‌ను మళ్లీ లోడ్ చేయండి",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "DOM ఇన్స్పెక్టర్ను టోగుల్ చేయండి",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "పాపప్ ప్యానెల్‌ను టోగుల్ చేయండి",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock మూలం వికీ: లాగర్",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "లాగర్ క్లియర్",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "లాగర్ను పాజ్ చేయండి (అన్ని ఇన్కమింగ్ డేటాను విస్మరించండి)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "లాగర్ను పాజ్ చేయండి",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "లాగర్ ఫిల్టరింగ్‌ను టోగుల్ చేయండి",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "చిట్టాలోని నమోదులను జల్లెడపరచు",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "లాగర్ ఫిల్టరింగ్ ఎంపికలు",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "కాదు",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "నిరోధించబడినవి",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "అనుమతించబడింది",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "సవరించబడింది",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "మొదటి పార్టీ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "మూడవ పార్టీ",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "వివరాలు",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "ఫిల్టర్",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "ఫిల్టర్ జాబితా",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "నియమం",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "సందర్భం",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "రూట్ సందర్భం",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "పార్టీనెస్",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "రకం",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "క్రియాశీలక URL ఫిల్టరింగ్",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "సందర్భం:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "రకం:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "నిశ్చలాత్మక ఫిల్టరింగ్",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{origin}} నుండి మొదలయ్యి, {{br}}{{url}} తో సరిపోలిన url గల {{br}}{{type}} నెట్వర్క్ అభ్యర్ధనలను {{action}}, {{br}}అదీ వడపోతల జాబితాలో {{importance}}.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "తిరస్కరించు",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "అనుమతించు",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "“{{type}}” రకమైన",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "ఏటువంటిదైనా",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "“{{origin}}” నుండి",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "ఎక్కడినుండైనా",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "మినహాయింపు వుంటే",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "మినహాయింపు వున్నా",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "నిశ్చలాత్మక ఫిల్టర్ అయిన <code>{{filter}}</code> క్రింది వాటిలో కలదు:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "నిశ్చలాత్మక ఫిల్టర్ అయిన <code>{{filter}}</code> ప్రస్తుతం ఉత్తేజపరిచిన ఫిల్టర్ జాబితాలలో కనుగొనబడలేదు",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "దిగువ మూడు షరతులను నెరవేర్చని లాగర్ ఎంట్రీలు స్వయంచాలకంగా విస్మరించబడతాయి:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "చివరి {{input}} నిమిషాల నుండి ఎంట్రీలను భద్రపరచండి",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "ప్రతి ట్యాబ్‌కు గరిష్టంగా {{input}} పేజీ లోడ్లను భద్రపరచండి",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "ప్రతి ట్యాబ్‌కు గరిష్టంగా {{input}} ఎంట్రీలను భద్రపరచండి",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "నిలువుగా విస్తరించిన మోడ్‌లో ప్రతి ఎంట్రీకి {{input}} పంక్తులను ఉపయోగించండి",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "నిలువు వరుసలను దాచు:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} సమయం",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} ఫిల్టర్ / నియమం",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} e సందర్భం",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}}పార్టీనెస్",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "జాబితా",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "పట్టిక",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "సాదా",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "మార్క్డౌన్",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "తెరవండి",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "కొత్త నివేదికను సృష్టించండి",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "సారూప్య నివేదికలను కనుగొనండి",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "డాక్యుమెంటేషన్",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "uBlock ఆరిజిన్ యొక్క అన్ని లక్షణాల గురించి తెలుసుకోవడానికి <code>uBlock/wiki</code> వద్ద డాక్యుమెంటేషన్ చదవండి.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "ప్రశ్నలు మరియు మద్దతు",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter issues/website is broken",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Bug report",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Troubleshooting Information",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Report a filter issue",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Address of the web page:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "The web page…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pick an entry --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shows ads or ad leftovers",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Has privacy-related issues",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Malfunctions when uBlock Origin is enabled",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "అనవసరమైన ట్యాబ్‌లు లేదా విండోలను తెరుస్తుంది",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "వెబ్ పేజీని “NSFW”గా లేబుల్ చేయండి (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“పని కోసం సురక్షితం కాదు”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "గోప్యతా విధానం",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "మార్పుల సంచిక",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "మూలం (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "ప్రాజెక్ట్కు సహాయ పడిన వారు",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "మూల కోడ్",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "అనువాదాలు",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "జాబితాలను ఫిల్టర్ చేయండి",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "బాహ్య ఆధారపడటం (GPLv3- అనుకూలమైనది):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO యొక్క సొంత ఫిల్టర్ జాబితాలు కింది వాటిలో ఉచితంగా హోస్ట్ చేయబడతాయి <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "ఫిల్టర్ జాబితాను అప్‌డేట్ చేయాల్సిన అవసరం వచ్చినప్పుడు యాదృచ్ఛికంగా ఎంచుకున్న CDN ఉపయోగించబడుతుంది",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "ఫైల్ లో భద్రపరచు",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "ఫైల్ నుండి పునరుద్దరించు...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "సంస్థాపన అమరికలను పునరుద్దరించు...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "మీరు పేర్కొన్న ఐచ్చిక్కాలన్ని {{time}}నకు తీసుకున్న నకలు డేటాతో తిరగారాయబడుతాయి, ఆ పిమ్మట uBlock₀ పునఃప్రారంభమవుతుంది.\n\nమీ ఐచ్చికాలను తిరగరాయుట మీకు సమ్మతమేనా?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "డేటాను చదవడంలో లోపం సంభవించినది(డేటా పాడైవుంది లేదా అందుబాటులో లేదు)",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "ఐచ్చికాలలో మీరు చేసిన మార్పులన్నీ తొలగించనా పిమ్మట uBlock₀ పునఃప్రారంభిన్చాబాడును.\n\nమరి సంస్థాపన ఐచ్చికాలను పునరుద్ధరించాలా?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "అనుసంధాన వైఫల్యం: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: ఈ URLని మీ నిర్దేశిత ఫిల్టర్ పట్టికకు జతపరచాలా?\n\nశీర్షిక: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "సభ్యత్వాన్ని పొందండి",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "ఒక నిమిషం క్రితం",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} నిమిషాల క్రితం",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "ఒక గంట క్రితం",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} గంటల క్రితం",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "ఒక రోజు క్రితం",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} రోజుల క్రితం",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "నియంత్రణా పట్టికను చూపు",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "నెట్వర్క్ అభ్యర్ధనల చిట్టాను చూపు",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "అచేతనం",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "పేజీ బ్లాక్ చేయబడింది",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "ఈ తరువాయి పేజిని uBlock Origin బ్రౌజరులోకి ఎక్కిన్చనివ్వలేదు:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "ఇది ఈ క్రింది వడపోతననుసారించి తీసుకోబడిన చర్య",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "పారామితులు లేని",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "ఈ వడపోత వున్న జాబితా పేరు:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "వెనక్కి వెళ్ళు",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "విండో మూయుము",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "{{hostname}} తో అనుసంధానాన్ని అనుమతించాలా?",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "తాత్కాలికంగా",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "శాశ్వతంగా",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "క్లౌడ్ లో పొందుపరచు",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "క్లౌడ్ నుండి దిగుమతిపరచు",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "అంతర్జాలంలో భద్రపరచిన ఎంపికలను దిగుమతి చేసి ప్రస్తుత ఎంపికలకు జోడించు",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "ఈ పరికరం పేరు:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "హెచ్చరిక! ఈ అధునాతన అమరికలను జాగ్రత్తతో మార్చండి.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "పంపించు",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "మార్పులను అమలుపరచు",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "మార్పులను తిరస్కరించు",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "బైట్లు",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "ఫ్రేమ్‌లో మూలకాన్ని బ్లాక్ చేయండి ...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "ఫిల్టర్ జాబితాకు సభ్యత్వం పొందండి ...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "భారి దృశ్య/శ్రవణ అంశాలను తాత్కాలికంగా అనుమతించు",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "షార్ట్కట్ టైప్ చేయండి",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "లాక్ చేసిన స్క్రోలింగ్‌ను టోగుల్ చేయండి",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "క్లిప్‌బోర్డ్‌కు కాపీ చేయండి",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Select all",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "నిరోధించే మోడ్‌ను రిలాక్స్ చేయండి",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "ఉపయోగించిన నిల్వ: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "కేబీ",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "ఏంబీ",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "జీబీ",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "లోడ్ చేయడానికి క్లిక్ చేయండి",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "ఇది అంతిమంగా వుండాల్సిన నమోదు",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/th/messages.json b/src/_locales/th/messages.json
new file mode 100644
index 0000000..e812407
--- /dev/null
+++ b/src/_locales/th/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "มาแล้ว! โปรแกรมบล็อกโฆษณาเบาเบา ไม่กิน ซีพียู หรือ แรม",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — หน้าหลัก",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "คำเตือน! คุณมีการเปลี่ยนแปลงที่ยังไม่ได้บันทึก",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "อยู่ต่อ",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "ไม่สนใจ",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "การตั้งค่า",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "ตัวกรองจากที่อื่น",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "ตัวกรองของฉัน",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "กฎของฉัน",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "รายการยกเว้น",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Shortcuts",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — ประวัติ",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "เกี่ยวกับ",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "ช่วยเหลือ",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Asset viewer",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "การตั้งค่าขั้นสูง",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Click: เปิด/ปิดการทำงานของ uBlock₀ สำหรับเว็บไซต์นี้ \nCtrl+click: ปิดการทำงานของ uBlock₀ เฉพาะหน้าเว็บนี้",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "กดเพื่อเปิดใช้่งาน uBlock₀ สำหรับเว็บนี้",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "การร้องขอถูกปฏิเสธ",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "ในหน้านี้",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} or {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "จากวันที่ติดตตั้ง",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "หรือ",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Blocked on this page",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blocked since install",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domains connected",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "เปิด dashboard",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "เข้าสู่โหมดโจมตีองค์ประกอบ",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "เข้าสู่โหมดเลือก element",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "เปิดบันทึกการทำงาน",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Report an issue on this website",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "เปลี่ยนสถานะการบล็อกป็อบอัพบนเว็บไชต์นี้",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "คลิกเพื่อบล็อกป๊อปอัปทั้งหมดในเว็บไซต์นี้",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "คลิกเพื่อยกเลิกการบล็อกป๊อปอัปทั้งหมดในเว็บไซต์นี้",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "เปลี่ยนสถานะการบล็อกองค์ประกอบ media ขนาดใหญ่บนเว็บไชต์นี้",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "คลิกเพื่อปิดกั้นองค์ประกอบชนิด Media ที่มีขนาดใหญ่ในเว็บไซต์นี้",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "คลิกเพื่อยกเลิกการปิดกั้นองค์ประกอบชนิด Media ที่มีขนาดใหญ่ในเว็บไซต์นี้",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering for this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "คลิกเพื่อปิดการใช้ฟิลเตอร์บนเว็บไซต์นี้",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Click to enable cosmetic filtering on this site",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Toggle the blocking of remote fonts for this site",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "คลิกเพื่อบล็อกฟอนต์จากเว็บไซต์นี้",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "คลิกเพื่อยกเลิกการบล็อกป๊อปอัปทั้งหมดในเว็บไซต์นี้",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "กดเพื่อปิดการใช้งาน JavaScript บนเว็บไซต์นี้",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "กดเพื่อยกเลิกการบล็อก JavaScript บนเว็บไซต์นี้",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "หน้าต่าง Pop-up",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "องค์ประกอบ media ขนาดใหญ่",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "ฟิลเตอร์",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "ฟอนต์ที่เว็บไชต์กำหนด",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "เพิ่มเติม",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "แสดงน้อยลง",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "กฏทั่วเว็บ: คอลัมน์นี้มีไว้สำหรับกฏที่ใช้กับทุกเว็บไซต์",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "กฏเว็บเดียว: คอลัมน์นี้มีไว้สําหรับกฏบนเว็บไซต์นี้เท่านั้น\nกฏเว็บเดียวจะถูกใช้งานก่อนกฏครอบคลุม",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "คลิกเพื่อให้ทําให้การเปลี่ยนแปลงถาวร",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "ยกเลิกการเปลี่ยนแปลง",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "ทั้งหมด",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "รูปภาพ",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "บุคคลที่ 3",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/รูปภาพ บุคคลที่ 3",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "สคริปท์อินไลน์",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "สคริปภายใน",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "สคริปท์บุคคลที่3",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "กรอบบุคคลที่3",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "โดเมนที่เชื่อมต่อ",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} ใน {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "เวอร์ชัน",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "สคริปต์",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "กรอบ",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "สร้าง",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "เลือก",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "ออก",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "ตัวอย่าง",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "ฟิลเตอร์เครื่อข่าย",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "ฟิลเตอร์",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "คลิก, Ctrl-คลิก",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "บล็อคองค์ประกอบ",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "ซ่อนตัวยึดตําแหน่งขององค์ประกอบที่ถูกบล็อก",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "แสดงจำนวนคำขอเครือข่ายที่ถูกปฏิเสธบนไอคอน",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "ปิดคำอธิบาย",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Make use of context menu where appropriate",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "เป็นมิตรกับคนตาบอดสี",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "รูปแบบการแสดงผล",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "รูปแบบการแสดงผล",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Custom accent color",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "เปิดการเก็บข้อมูลบน Cloud",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "ฉันเป็นผู้ใช้ขั้นสูง (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>โปรดอ่านเอกสารสำคัญ</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Disable pre-fetching (to prevent any connection for blocked network requests)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Disable hyperlink auditing",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Prevent WebRTC from leaking local IP addresses",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Default behavior",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "These default behaviors can be overridden on a per-site basis",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Disable cosmetic filtering",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "ปิดกั้นองค์ประกอบชนิด Media ที่มีขนาดใหญ่กว่า {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Block remote fonts",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "ปิดการใช้งาน JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Block CSP reports",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Uncloak canonical names",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "ขั้นสูง",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Features suitable only for technical users",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "การตั้งค่าขั้นสูง",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Last restore:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "การสำรองข้อมูลครั้งล่าสุด",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} used out of {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "อัปเดตรายการตัวกรองอัตโนมัติ",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "อัปเดตเดี๋ยวนี้",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "ล้างแคชทั้งหมด",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Parse and enforce cosmetic filters",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignore generic cosmetic filters",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspend network activity until all filter lists are loaded",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Built-in",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "โฆษณา",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "ความเป็นส่วนตัว",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Malware domains",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multipurpose",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "ภูมิภาค, ภาษา",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "กำหนดเอง",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "นำเข้า...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "หนึ่ง URL ต่อบรรทัด URL ที่ไม่ถูกต้องจะถูกละเว้น",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "ล้าสมัย",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "view content",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "อัพเดตล่าสุด: {{ago}}",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "กำลังอัปเดต...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "A network error prevented the resource from being updated.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "หนึ่งตัวกรองต่อบรรทัด ตัวกรองอาจเป็น hostname หรือตัวกรองที่เข้ากันได้กับ EasyList, บรรทัดที่ขึ้นต้นด้วย <code>!</code> จะถูกละเว้น\n",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Import and append…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Export…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Permanent rules",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Temporary rules",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "คืนกลับ",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Commit",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "แก้ไข",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "บันทึก",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "ละทิ้ง",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Import from file…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Export to file…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "List of your dynamic filtering rules.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Rule syntax: <code>source destination type action</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>full documentation</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "เรียง",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Rule type",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "แหล่งที่มา",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destination",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Import and append…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "ส่งออก",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-whitelist_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "ประเภท",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Domain",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filter",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "ทั้งหมด",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Tabless",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Current tab",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Reload the tab content",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Toggle the DOM inspector",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Toggle the popup panel",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: The logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Clear logger",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "หยุดการบันทึก Log (ลบทิ้งทั้งหมด)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Unpause logger",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Toggle logger filtering",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filter logger content",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Logger filtering options",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Not",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "blocked",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "allowed",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modified",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1st-party",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "บุคคลที่ 3",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "รายละเอียด",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "ตัวกรอง",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "รายการตัวกรอง",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "กฎ",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Context",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Root context",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partyness",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Type",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL rule",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Context:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "ประเภท",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Static filter",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "บล็อก",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "อนุญาต",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "type “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "any type",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "from “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "from anywhere",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "except when",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "ถึงแม้ว่า",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Static filter <code>{{filter}}</code> found in:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Static filter could not be found in any of the currently enabled filter lists",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Preserve entries from the last {{input}} minutes",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preserve at most {{input}} page loads per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Preserve at most {{input}} entries per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Use {{input}} lines per entry in vertically expanded mode",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "ซ่อนคอลัมน์",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Time",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filter/rule",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Context",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partyness",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "รายการ",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Table",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Plain",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "เปิด",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "สร้างรายงานใหม่",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Find similar reports",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "เอกสารอ้างอิง",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Read the documentation at <code>uBlock/wiki</code> to learn about all of uBlock Origin's features.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Questions and support",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter issues/website is broken",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "รายงานข้อผิดพลาด",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Troubleshooting Information",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Report a filter issue",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Address of the web page:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "The web page…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- เลือกรายการ --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shows ads or ad leftovers",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Has privacy-related issues",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Malfunctions when uBlock Origin is enabled",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Opens unwanted tabs or windows",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "ผู้ร่วมพัฒนา",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "การแปลภาษา",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO's own filter lists are freely hosted on the following <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "CDN ที่สุ่มเลือกจะถูกใช้เมื่อจำเป็นต้องอัปเดตรายการตัวกรอง",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Back up to file…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Restore from file…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Reset to default settings…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "The data could not be read or is invalid",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Network error: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: เพิ่ม URL ต่อไปนี้ในรายการตัวกรองแบบกำหนดเองของคุณหรือไม่ ?\n\nชื่อ: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Subscribe",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "เมื่อนาทีที่แล้ว",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} นาทีที่แล้ว",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "เมื่อชั่วโมงที่แล้ว",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} ชั่วโมงที่แล้ว",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "เมื่อวันก่อน",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} วันที่แล้ว",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Show Dashboard",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Show Logger",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "off",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "เพจถูกบล็อค",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin ป้องกันไม่ให้โหลดหน้าต่อไปนี้:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "เนื่องจากตัวกรองดังต่อไปนี้",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "without parameters",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "พบใน:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "ย้อนกลับ",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Close this window",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "ปิดใช้งานการปิดกั้นสำหรับ {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "ชั่วคราว",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "ถาวร",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "ดำเนินการ",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Export to cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Import from cloud storage",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Import from cloud storage and merge with current settings",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "ชื่ออุปกรณ์นี้:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Warning! Change these advanced settings at your own risk.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Submit",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Apply changes",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Revert",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "ไบต์",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Block element in frame…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "สมัครรับรายชื่อตัวกรอง...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "อนุญาตองค์ประกอบชนิด Media ขนาดใหญ่ชั่วคราว",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "ดูต้นฉบับ",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Type a shortcut",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Toggle locked scrolling",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Copy to clipboard",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Select all",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relax blocking mode",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "หน่วยความจำที่ใช้: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "กิโลไบต์",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "เมกะไบต์",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "คลิกเพื่อโหลด",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/tr/messages.json b/src/_locales/tr/messages.json
new file mode 100644
index 0000000..f02c332
--- /dev/null
+++ b/src/_locales/tr/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Sonunda, etkili bir engelleyici. İşlemciyi ve belleği yormaz.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Kontrol paneli",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Uyarı! Kaydedilmemiş değişiklikleriniz var",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Kal",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Yok say",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Ayarlar",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Filtre listeleri",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Filtrelerim",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Kurallarım",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Güvenilen siteler",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Kısayollar",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Günlükçü",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Hakkında",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Destek",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — Kaynak görüntüleyici",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Gelişmiş ayarlar",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Tıklama: uBlock₀'i bu site için devre dışı bırak/etkinleştir.\n\nCtrl+tıklama: uBlock₀'i yalnızca bu sayfada devre dışı bırak.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "uBlock₀'i bu sitede devre dışı bırakmak için tıklayın.\n\nuBlock₀'i yalnızca bu sayfada devre dışı bırakmak için Ctrl+tıklayın.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "uBlock₀'i bu sitede etkinleştirmek için tıklayın.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "engellenen istekler",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "bu sayfada",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} (%{{percent}})",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "kurulumdan beri",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "ya da",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Bu sayfada engellenen",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Kurulumdan beri engellenen",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Bağlanılan alan adları",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Kontrol panelini açar",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Öge silme moduna gir",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Öge seçme moduna gir",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Günlükçüyü açar",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Bu web sitesinde bir sorunu bildir",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Bu site için açılır pencere engellemeyi aç/kapat",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Bu sitede açılır pencerelerin tümünü engellemek için tıklayın",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Bu sitede açılır pencerelerin tümünü artık engellememek için tıklayın",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Bu site için büyük medya ögelerini engellemeyi aç/kapat",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Bu sitede büyük medya ögelerini engellemek için tıklayın",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Bu sitede büyük medya ögelerini artık engellememek için tıklayın",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Bu site için kozmetik filtrelemeyi aç/kapat",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Bu sitede, kozmetik filtrelemeyi devre dışı bırakmak için tıklayın",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Bu sitede, kozmetik filtrelemeyi etkinleştirmek için tıklayın",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Bu site için uzak yazı tiplerini engellemeyi aç/kapat",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Bu sitede uzak yazı tiplerini engellemek için tıklayın",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Bu sitede uzak yazı tiplerini artık engellememek için tıklayın",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "JavaScript'i bu sitede devre dışı bırakmak için tıklayın",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Artık bu sitede JavaScript'i devre dışı bırakmamak için tıklayın",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Açılır pencereler",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Büyük medya ögeleri",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Kozmetik filtreleme",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Uzak yazı tipleri",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Daha fazla",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Daha az",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Genel kurallar: bu sütun tüm sitelere uygulanan kurallar içindir.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Yerel kurallar: bu sütun yalnızca geçerli siteye uygulanan kurallar içindir.\nYerel kurallar genel kuralları geçersiz kılar.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Değişikliklerinizi kalıcı kılmak için tıklayın.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Değişikliklerinizi geri almak için tıklayın.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "tümü",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "resimler",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "3. taraf",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "3. taraf CSS/resimler",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "satır içi betikleri",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "1. taraf betikler",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "3. taraf betikler",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "3. taraf çerçeveler",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "bağlanılan adresler",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{total}} taneden {{count}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Sürüm",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "betik",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "çerçeve",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Oluştur",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Seç",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Çık",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Ön İzleme",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Ağ filtreleri",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Kozmetik filtreler",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Tıkla, Ctrl-tıkla",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Ögeyi engelle…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Engellenmiş ögelerin yertutucularını gizle",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Engellenen istek sayısını simge üstünde göster",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "İpuçlarını kapat",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Uygun olduğunda içerik menüsünü kullan",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Renk körü dostu",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Görünüm",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Tema",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Özel vurgu rengi",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Bulut depolama desteğini etkinleştir",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "İleri düzey kullanıcıyım",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Kaynak ön getirimini devre dışı bırak (engellenmiş ağ istekleri için her bağlantıyı engellemek için)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Köprü denetimini devre dışı bırak",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "WebRTC'nin yerel IP adreslerini sızdırmasını engelle",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Varsayılan davranış",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Bu varsayılan davranışlar site bazında geçersiz kılınabilir",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Kozmetik filtreleri devre dışı bırak",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "{{input}} KB'tan büyük medya ögelerini engelle",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Uzak yazı tiplerini engelle",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "JavaScript'i devre dışı bırak",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "CSP raporlarını engelle",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Kuralsal isimleri ortaya çıkar",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Gelişmiş",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Yalnız teknik kullanıcılara uygun ayarlar",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "gelişmiş ayarlar",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Son geri yükleme:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Son yedekleme:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} ağ filtresi + {{cosmeticFilterCount}} kozmetik filtre:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{total}} taneden {{used}} adedi kullanıldı",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Filtre listelerini kendiliğinden güncelle",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Şimdi güncelle",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Tüm önbellekleri temizle",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Kozmetik filtreleri incele ve uygula",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Kozmetik filtreler, bir web sayfasında görsel rahatsızlık yaratan ve ağ isteği-tabanlı filtreleme motorlarınca engellenemeyen ögelerin gizlenmesini sağlar.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Genel kozmetik filtreleri yok say",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Genel kozmetik filtreler tüm web sayfalarına uygulanacak kozmetik filtrelerdir. Bu seçeneğin etkinleştirilmesi, genel kozmetik filtrelerin işlenmesi nedeniyle web sayfalarına eklenen bellek ve işlemci yükünü ortadan kaldırır.\n\nDaha az güçlü aygıtlarda bu seçeneğin etkinleştirilmesi önerilir.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Ağ etkinliğini, tüm filtre listeleri yüklenene kadar askıya al",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Engellenmiş alan adlarının listesi",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Değişiklikleri uygula",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Yerleşik",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Reklamlar",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Gizlilik",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Zararlı alan adları",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Can sıkıcı ögeler",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Çok-amaçlı",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Bölgeler, diller",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Özel",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "İçe aktar…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Her satırda bir URL. Geçersiz URL'ler sessizce yok sayılacaktır.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Güncel değil.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "içeriği görüntüle",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Son güncelleme: {{ago}}.\nGüncelleştirmeye zorlamak için tıklayın.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Güncelleniyor…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Bir ağ hatası kaynağın güncellenmesini engelledi.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Her satırda bir filtre. Bir filtre yalın bir alan adı veya EasyList-uyumlu bir filtre olabilir. <code>!</code> ile başlayan satırlar yok sayılacaktır.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Güvenilmeyen kaynaklardan filtre eklemeyin.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "İçe aktar ve ekle",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Dışa aktar",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "ublock-statik-filtrelerim_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Değişiklikleri uygula",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Kalıcı kurallar",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Geçici kurallar",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Geri al",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "İşle",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Düzenle",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Kaydet",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "İptal et",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Dosyadan al…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Dosyaya aktar",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "ublock-dinamik-kurallarım_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Dinamik filtreleme kurallarınızın listesi.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Kural sözdizimi: <code>kaynak hedefi türü işlemi</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>bütün belgeler</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sıralama:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Kural türü",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Kaynak",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Hedef",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Güvenilen site yönergeleri, uBlock Origin'in devre dışı bırakılması gerektiği web sayfalarını belirler. Her satırda bir girdi.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "İçe aktar ve ekle",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Dışa aktar",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "ublock-güvenilen-sitelerim_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Değişiklikleri uygula",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Tür",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Alan adı",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Filtre",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Tümü",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Sekmesiz",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Geçerli sekme",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Sekme içeriğini tekrar yükle",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "DOM araştırıcısını aç/kapat",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Açılır paneli aç/kapat",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin viki: Günlükçü",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Günlükçüyü temizle",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Günlükçüyü duraklat (tüm gelen veriyi yok say)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Günlükçüyü devam ettir",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Günlük filtrelemeyi aç/kapat",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "günlükçü içeriğini filtrele",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Günlükçü filtreleme seçenekleri",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Değil",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "olaylı",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "engelli",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "izinli",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "düzenlendi",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "1. taraf",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "3. taraf",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Ayrıntılar",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Filtre",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Filtre listesi",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Kural",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Bağlam",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Kök bağlam",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Taraf",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Tür",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL kuralı",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Bağlam:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Tür:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Statik filtre",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{url}} URL adresi ile eşleşen {{br}}ve kaynağı {{origin}} olan,{{br}}eşleşen bir istisna filtresi {{importance}} {{br}}{{type}} ağ isteklerini {{action}} {{br}}.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Engelle",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "İzin ver",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "“{{type}}” türündeki",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "her türdeki",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "“{{origin}}” adresi",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "her yerden",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "olmasa da",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "olsa da",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Statik filtrenin <code>{{filter}}</code> bulunduğu listeler:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Statik filtre, şu anda etkin olan filtre listelerinde bulunamadı",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Aşağıdaki üç koşulu sağlamayan günlükçü girdileri kendiliğinden yok sayılacaktır:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Son {{input}} dakikadaki girdileri sakla",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Her sekme için en çok {{input}} sayfa yüklemesi sakla",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Her sekme için en çok {{input}} girdi sakla",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Dikey genişletilmiş modda, her girdi için {{input}} satır kullan",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Sütunları gizle:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Tarih",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Filtre/kural",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Bağlam",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Taraf",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Liste",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Tablo",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Yalın",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Aç",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Yeni rapor oluştur",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Benzer raporları bul",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Belgeler",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "uBlock Origin'in özelliklerinin tamamı hakkında bilgi edinmek için <code>uBlock/wiki</code> adresindeki belgeri okuyun.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Sorular ve destek",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Sorulara cevaplar ve diğer türlü yardım desteği <code>/r/uBlockOrigin</code> subreddit'inde sunulmaktadır.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filtre sorunları/web sitesi bozuk",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Belirli web siteleriyle ilgili filtre sorunlarını <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> sorun izleyicisine</span> bildirin. <u>Github hesabı gerektirir.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Önemli:</b> uBlock Origin'le birlikte, belirli web sitelerinde filtre sorunlarına neden olabileceği için, diğer benzer amaçlı engelleyicileri kullanmaktan kaçının.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>İpuçları:</b> Filtre listenizin güncelliğinden emin olun. <span data-url=\"logger-ui.html#_\">Günlükçü</span> filtre bağlantılı sorunları tanılamada temel araçtır.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Hata raporu",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "uBlock Origin'in kendisiyle ilgili sorunları <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> sorun izleyicisine</span> bildirin. <u>Github hesabı gerektirir.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Hata Giderme Bilgisi",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Aşağıdaki, gönüllüler size bir sorunu çözmede yardım etmeye çalışırken, faydalı olabilecek teknik bilgidir.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Önemli:</b> Olası gizli ve hassas bilgiler öntanımlı olarak kısaltılır. Kısaltılmış bilgiler bir sorunu çözmeyi zorlaştırabilir.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Bir filtre sorunu bildirin",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Gönüllülere aynı raporlarla sıkıntı vermemek için, lütfen sorunun daha önce bildirilmediğinden emin olun.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filtre listeleri günlük olarak güncellenir. Sorununuzun en son filtre listelerinde zaten ele alınıp alınmadığından emin olun.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Sorunlu web sayfasını yeniden yükleyerek sorunun devam ettiğini doğrulayın.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Web sayfasının adresi:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Web sayfası…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Bir girdi seçin --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Reklam veya reklam artıkları gösteriyor",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Kaplamaları veya diğer sıkıntıları var",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "uBlock Origin’i algılıyor",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Gizlilikle ilgili sorunları var",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "uBlock Origin etkinken bozuluyor",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "İstenmeyen sekme veya pencereler açıyor",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Web sayfasını uygunsuz (“NSFW”) olarak etiketle (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Kısalt",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Kısaltma",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Gizlilik ilkesi",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Değişiklik günlüğü",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Kaynak kodu (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Katkıda bulunanlar",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Kaynak kodu",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Çeviriler",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filtre listeleri",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Dış bağımlılıklar (GPLv3-uyumlu):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO'nun kendi filtre listeleri ücretsiz olarak şu <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN'lerde</a> barındırılır:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Bir filtre listesinin güncellenmesi gerektiğinde rastgele seçilen bir CDN kullanılır",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Dosyaya yedekle…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ublock-yedeğim_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Dosyadan geri yükle…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Varsayılan ayarlara sıfırla…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Tüm ayarlarınız {{time}} tarihinde yedeklenmiş veriler kullanarak değiştirilecek ve uBlock₀ yeniden başlayacak. \n\nYedeklenmiş verileriniz kullanılarak var olan tüm ayarlarınız değiştirilsin mi?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Veri okunamadı veya geçersiz",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Tüm ayarlarınızı silinecek, ve uBlock₀ yeniden başlayacak.\n\nuBlock₀ fabrika ayarlarına sıfırlansın mı?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Ağ hatası: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Bu URL, özel filtre listenize eklensin mi?\n\nBaşlık: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Abone ol",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "bir dakika önce",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} dakika önce",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "bir saat önce",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} saat önce",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "bir gün önce",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} gün önce",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Kontrol Panelini Göster",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Günlükçüyü Göster",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "kapalı",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Sayfa engellendi",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin aşağıdaki sayfanın yüklenmesini engelledi:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Bu filtre nedeniyle:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "değişkensiz",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Bulunduğu liste:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Geri git",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Bu pencereyi kapat",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Bu site için beni bir daha uyarma",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "{{hostname}} için katı engellemeyi devre dışı bırak",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Geçici olarak",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Kalıcı olarak",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Devam et",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Bulut depolamaya aktar",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Bulut depolamadan içe aktar",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Bulut depolamadan içe aktar ve şu anki ayarlarla birleştir",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Bu aygıtın adı:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Uyarı! Bu gelişmiş ayarları değiştirmenin sorumluluğu size aittir.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Gönder",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Değişiklikleri uygula",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Geri al",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "byte",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Çerçevedeki ögeyi engelle…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Filtre listesine abone ol…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Geçici olarak büyük medya ögelerine izin ver",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Kaynağı görüntüle…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Bir kısayol girin",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Kilitli kaydırmayı aç/kapat",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Panoya kopyala",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Tümünü seç",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Kozmetik filtrelemeyi aç/kapat",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Engelleme modunu gevşet",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Kullanılan depolama: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Yüklemek için tıkla",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Hata sayısı: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Tarayıcı açılışında düzgün filtreleme yapılamadı.\nDüzgün filtreleme için sayfayı yenileyin.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Bu girdi en sonda olmalıdır",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/uk/messages.json b/src/_locales/uk/messages.json
new file mode 100644
index 0000000..6145210
--- /dev/null
+++ b/src/_locales/uk/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Ефективний блокувальник реклами таки з’явився. Не навантажує процесор та пам'ять.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "µBlock — Панель керування",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Увага! Є незбережені зміни",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Залишитись",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ігнорувати",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Налаштування",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Списки фільтрів",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Власні фільтри",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Мої правила",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Білий список",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Комбінації клавіш",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Журнал мережевих запитів",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Про програму",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Підтримка",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ – Переглядач ресурсів",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Розширені налаштування",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Натиснення: вимикає/умикає uBlock₀ для поточного сайту.\n\nCtrl+натиснення: вимикає uBlock₀ тільки для цієї сторінки.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Натисніть для вимкнення uBlock₀ для поточного сайту.\n\nНатисніть з Ctrl для вимкнення uBlock₀ лише для цієї сторінки.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Натисніть, щоб увімкнути uBlock₀ для цього сайту.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "запитів заблоковано",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "на цій сторінці",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} або {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "від моменту встановлення",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "або",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Заблоковано на цій сторінці",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Заблоковано з моменту встановлення",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Доменів під'єднано",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Перейти до панелі керування",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Перейти в режим блокування елементів",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Перейти у режим вибору елементів",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Перейти до журналу запитів",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Повідомити про помилку на цьому вебсайті",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Увімкнути блокування всіх виринаючих вікон цього сайту",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Натисніть, щоб заблокувати всі спливні вікна на цьому сайті",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Натисніть для скасування блокування всіх спливних вікон на цьому сайті",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Увімк/Вимк блокування великих медіа елементів на цьому сайті",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Натисніть для блокування великих медіаелементів на цьому сайті",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Натисніть для скасування блокування великих медіаелементів на цьому сайті",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Переключити косметичний фільтр для цього сайту",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Натисніть для вимкнення косметичних фільтрів на цьому сайті",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Натисніть для увімкнення косметичних фільтрів на цьому сайті",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Перемкнути блокування віддалених шрифтів для цього сайту",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Натисніть для блокування віддалених шрифтів на цьому сайті",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Натисніть для скасування блокування віддалених шрифтів на цьому сайті",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Натисніть, щоб повністю вимкнути JavaScript на цьому сайті",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Натисніть, щоб скасувати вимкнення JavaScript на цьому сайті",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Спливні вікна",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Великі медіаелементи",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Косметичне фільтрування",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Віддалені шрифти",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavasScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Більше",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Менше",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Глобальні правила: цей стовпчик для правил, що застосовуються для всіх сайтів.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Локальні правила: цей стовпчик для правил, що застосовуються лише для цього сайту.\nЛокальні правила замінюють глобальні.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Натисніть, щоб зробити ваші зміни постійними.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Натисніть, щоб відкинути ваші зміни.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "всі",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "зображення",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "сторонні",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "Сторонні CSS/зображення",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "вбудовані сценарії",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "Основні скрипти",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "Сторонні скрипти",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "Сторонні фрейми",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "доменів під’єднано",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} з {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Версія",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "скрипт",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "рамка",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Створити",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Вибрати",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Вийти",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Попередній перегляд",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Мережні фільтри",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Косметичні фільтри",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Клік, Ctrl-клік",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Заблокувати елемент",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Ховати заповнювачі заблокованих елементів",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Показувати кількість заблокованих запитів на піктограмі",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Вимкнути підказки",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Використовувати контекстне меню там, де це можливо",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Підтримка дальтонізму",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Вигляд",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Тема",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Акцент кольору користувача",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Увімкнути підтримку хмарного сховища",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Я досвідчений користувач",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Вимкнути передзавантаження (щоб унеможливити будь-які з’єднання для заблокованих мережевих запитів)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Вимкнути перевірку гіперпосилань",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Унеможливити витік локальної IP-адреси через WebRTC",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Типові налаштування",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Усталені налаштування можуть бути перевизначеними для кожного сайту окремо",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Вимкнути косметичні фільтри",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Блокувати медіа елементи розміром від {{input:number}} кБ",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Блокувати сторонні шрифти",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Вимкнути JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Блокувати CSP-звіти",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Показати CNAME назви",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Додатково",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Функції, що потрібні лише технічним користувачам",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "розширені налаштування",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Востаннє відновлено:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Остання резервна копія:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} мережевих фільтрів + {{cosmeticFilterCount}} косметичних фільтрів з:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "використовується {{used}} з {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Автоматично оновити списки фільтрів.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Оновити зараз",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Очистити всі кеші",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Розбір та застосування фільтрів приховування елементів Adblock+.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Косметичні фільтри служать для приховування елементів на вебсторінці, які вважаються візуально неприємними та не можуть бути заблоковані мережевими механізмами фільтрації на основі запитів.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ігнорувати загальні косметичні фільтри",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Загальні косметичні фільтри — це ті косметичні фільтри, які призначені для застосування на всіх вебсайтах. Увімкнення цієї опції усуне навантаження на пам'ять і процесор, що додається до вебсторінок у результаті обробки загальних косметичних фільтрів.\n\nРадимо вмикати цю опцію на менш потужних пристроях.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Призупинити мережеві операції доки всі списки фільтрів не завантажаться",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Перелік заблокованих хостів",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Застосувати зміни",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Вбудовані",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Реклама",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Конфіденційність",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Домени шкідливих програм",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Надокучливості",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Універсальні",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Регіони, мови",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Користувацькі",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Імпорт...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Одне посилання на рядок. Невірні посилання будуть проігноровані без попередження.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Застарілий.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "переглянути вміст",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Останнє оновлення: {{ago}}\nКлацніть для примусового оновлення.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Оновлюється...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Оновлення не вдалося, у зв'язку з помилкою мережі.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Один фільтр на рядок. Фільтром може бути адреса сайту або фільтр у Adblock Plus-сумісному записі. Рядки, що починаються з <code>!</code> будуть проігноровані.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Не додавати фільтри з невідомих джерел.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Імпортувати та додати",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Експортувати",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "ublock-custom-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Застосувати зміни",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Постійні правила",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Тимчасові правила",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Скасувати зміни",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Затвердити",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Редагувати",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Зберегти",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Відкинути",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Імпорт з файлу…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Експорт до файлу...",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Список правил динамічного фільтрування.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Синтаксис правил: <code>джерело призначення тип дія</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>повна документація</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Сортування:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Тип правила",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Джерело",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Призначення",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Ваш список адрес сайтів, для яких µBlock буде неактивним. Додайте по одному запису на рядок. Невірні адреси будуть проігноровані без попереджень та закоментовані.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Імпортувати та додати",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Експортувати",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-whitelist_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Застосувати зміни",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Тип",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Домен",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "Адреса",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Фільтр",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Все",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "За лаштунками",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Поточна вкладка",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Перезавантажити вміст вкладки",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Перемкнути інспектор DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Перемкнути панель, що спливає",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: журнал",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Очистити журнал",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Поставити журнал на паузу (ігнорувати всі вхідні дані)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Увімкнути журнал",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Перемкнути фільтрування журналу",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "фільтр журналу записів",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Опції фільтрування журналу",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Ні",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "насичений",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "заблокований",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "дозволений",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "модифікований",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "основний",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "сторонній",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Деталі",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Фільтр",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Список фільтрів",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Правило",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Контекст",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Кореневий контекст",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Членство",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Тип",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL-адреса",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL правило",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Контекст:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Тип:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Статичний фільтр",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} мережеві запити {{type}}, {{br}}посилання яких збігаються з {{url}} {{br}}та які {{origin}},{{br}}{{importance}} є відповідний фільтр-виняток.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Блокувати",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Дозволити",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "типу „{{type}}“",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "будь-якого типу",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "походять із „{{origin}}“",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "мають будь-яке походження",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "крім випадків, коли",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "навіть якщо",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Статичний фільтр <code>{{filter}}</code> знайден у:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Статичний фільтр не знайдений в жодному списку увімкнених у цей момент фільтрів",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Записи журналу, що не відповідають всім трьом нижченаведеним умовам, будуть автоматично відхилені:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Зберегти записи за останні {{input}} хв",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Зберегти щонайбільше {{input}} завантажень сторінки у вкладці",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Зберегти щонайбільше {{input}} елементів у вкладці",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Використовувати {{input}} рядків на елемент у вертикальному режимі",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Приховати стовпці:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} час",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} фільтр/правило",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} контекст",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} членство",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Список",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Таблиця",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Простий",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Відкрити",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Створити новий звіт",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Знайти подібні звіти",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Документація",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Прочитайте документацію на <code>uBlock/вікі</code>, щоб дізнатися про всі функції uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Запитання та підтримка",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Відповіді на запитання та інші види підтримки довідки надаються на <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Проблеми з фільтрами/сайт не працює",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Повідомити про проблеми фільтра на певних вебсайтах до <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\">відстежувача проблем <code>uBlockOrigin/uAssets</code></span>. <u>Потрібен обліковий запис GitHub.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Важливо:</b> Уникайте використання інших блокувальників аналогічного призначення разом із uBlock Origin, оскільки це може спричинити проблеми з фільтрами на певних вебсайтах.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Поради:</b> Переконайтеся, що списки фільтрів оновлено. <span data-url=\"logger-ui.html#_\">Журнал</span> — основний засіб визначення проблем пов'язаних з фільтром.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Звіт про ваду",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Повідомити про проблеми самого uBlock Origin <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\">відстежувач проблем <code>uBlockOrigin/uBlock-issue</code>. <u>Потрібен обліковий запис GitHub.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Інформація про усунення несправностей",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Внизу наведено технічні дані, які можуть бути корисними, коли волонтери намагатимуться допомогти вам розв'язати проблему.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Важливо:</b> Потенційно приватні або конфіденційні дані типово редаговані. Редаговані дані можуть ускладнити розв'язання проблеми.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Повідомити про ваду фільтра",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Щоб не обтяжувати волонтерів повторюваними звітами, переконайтеся, що про проблему ще не повідомлялося.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Списки фільтрів оновлюються щоденно. Переконайтесь, що ваша проблема все ще не виправлена в найсвіжішому списку фільтрів",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Переконайтесь, що проблема все ще присутня після перезавантаження проблемної сторінки",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Адреса вебсторінки:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Вебсторінка...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Указати проблему --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "З'являється реклама або залишки оголошень",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Накладання або інші прикрощі",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Виявляє uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Пов'язані з приватністю проблеми",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Щось не працює, якщо увімкнено uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Відкриває небажані вкладки або вікна",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Позначити цю сторінку «NSFW» (<a href=\"https://uk.wikipedia.org/wiki/NSFW\">«Небезпечно для роботи»</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Редагувати",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Скасувати редагування",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Політика конфіденційності",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Журнал змін",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Джерельний код (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Учасники",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Вихідний код",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Переклади",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Списки фільтрів",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Зовнішні залежності (сумісні з GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Списки власних фільтрів uBO вільно розміщуються на таких <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "Випадково вибраний CDN застосовуватиметься, коли список фільтрів потрібно оновити",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Зберегти резервну копію у файл...",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Відновити з файлу…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Відновити початкові налаштування...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Всі ваші налаштування будуть перезаписані з резервної копії від {{time}} та µBlock буде перезапущено.\n\nПерезаписати всі налаштування використовуючи резервну копію?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Дані помилкові або не можуть бути прочитані",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Ваші налаштування буде видалено та µBlock буде перезапущено.\n\nПовернути µBlock до початкових налаштувань?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Помилка мережі: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "µBlock: Додати це посилання до списку ваших фільтрів?\n\nНазва: \"{{title}}\"\nПосилання: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Підписатись",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "хвилину тому",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} хвилин(и) тому",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "годину тому",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} годин(и) тому",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "день тому",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} дні(в) тому",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Показати панель керування",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Показати журнал мережевих запитів",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "Відключений",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Сторінка заблокована",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock запобіг завантаженню наступної сторінки:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Через наступний фільтр",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "без параметрів",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Знайдено в:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Повернутись назад",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Зачинити це вікно",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Не нагадуйте мені про цей сайт",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Вимкнути повне блокування для {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Тимчасово",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Завжди",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Продовжити",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Експортувати до хмарного сховища",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Імпортувати із хмарного сховища",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Імпортувати з хмари та об'єднати з чинними налаштуваннями",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Назва цього пристрою:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Увага! Змінюйте ці розширені налаштування на власний ризик.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Надіслати",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Застосувати зміни",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Скасувати зміни",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "байтів",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Заблокувати елемент у фреймі",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Підписатися на список фільтрів...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Тимчасово дозволити великі медіа елементи",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Перегляд джерела...",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Уведіть комбінацію",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Перемкнути замкнуту прокрутку",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Скопіювати до буферу обміну",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Вибрати все",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Увімкнути/вимкнути косметичні фільтри",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Послаблений режим блокування",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Використано: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "КБ",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "МБ",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "ГБ",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Натисніть, щоб завантажити",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Помилки: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Неможливо правильно фільтрувати під час запуску браузера.\nПерезапустіть сторінку для гарантії правильного фільтрування",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Цей запис має бути останнім",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/ur/messages.json b/src/_locales/ur/messages.json
new file mode 100644
index 0000000..1b62e56
--- /dev/null
+++ b/src/_locales/ur/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "آخر کار، ایک مؤثر اشتہار کو روکنے والا، یہ کم cpu اور میموری لیتا ہے.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — کنٹرول پینل",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "خبردار! آپ نے محفوظ نہیں کیا",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Stay here",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Ignore",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "ترتیبات",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "فلٹر کی فہرستیں",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "میرے فلٹر",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "میرے اصول",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "اِن کی اجازت ہے",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "شارٹ کٹ",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — ریکارڈ",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "متعلق",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Support",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — اثاثے",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "اعلیٰ ترتیبات",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "کلک: uBlock اس سائٹ کے لیے فعال/ غیرفعال کریں.\n\nکنٹرول + کلک: uBlock صرف اس صفحہ پر غیرفعال کریں.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "کلک کر کے uBlock اس سائٹ کے لیے غیرفعال کریں.\n\nکنٹرول + کلک: uBlock صرف اس صفحے کے لیے غیرفعال کریں.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "کلک کر کے uBlock اس سائٹ کے لیے فعال کریں.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "درخواستیں بلاک ہیں",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "اس صفحے پر",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} یا {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "تنصیب سے لے کر اب تک",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "یا",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "اس صفحے سےختم کر دیا گیا ہے",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Blocked since install",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Domains connected",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "کنٹرول پینل کھولیں",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "عناصر تباہ کرنے کا موڈ",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "عناصر چننے کا موڈ",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "ریکارڈ کار کھولیں",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Report an issue on this website",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "اس سائٹ پر آنے والے تمام پاپ اپ کو روکیں یا آنے دیں",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "کلِک کر کے اس سائٹ کے تمام پاپ اپ کو روک کریں",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "کلِک کر کے اس سائٹ کے تمام پاپ اپ کی اجازت دیں",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "اس سائٹ پر بڑے میڈیا والی اشیاء کو روک دیں",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "کلک کر کے اس سائٹ پر بڑے میڈیا والی اشیاء کو روک دیں",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "کلک کر کے اس سائٹ پر بڑے میڈیا والی اشیاء کی اجازت د‌یں",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "اس سائٹ کے لئے کاسمیٹک فلٹر کو فعال یا غیر فعال کریں",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "اس سائٹ کے لئے کاسمیٹک فلٹر کو غیر فعال کریں",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "اس سائٹ کے لئے کاسمیٹک فلٹر کو فعال کریں",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "اس سائٹ پر آنے والے تمام remote فانٹ کو روکیں یا آنے دیں",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "کلِک کر کے اس سائٹ کے تمام remote فانٹ کو روک کریں",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "کلِک کر کے اس سائٹ کے تمام remote فانٹ کی اجازت دیں",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "کلک کر کے اس سائٹ پہ جاواسِکرپٹ غیرفعال کریں",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "کلک کر کے اس سائٹ پر جاوا سکرپٹ چلنے دیں",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Pop-up windows",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Large media elements",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Cosmetic filtering",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Remote fonts",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "مزید",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "کم",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "گلوبل اصول: اس کالم میں وہ اصول ہیں جو تمام ویب سائٹوں پر لاگو ہوں گے.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "مقامی اصول: اس کالم میں وہ اصول ہیں جو صرف موجودہ سائٹ پر لاگو ہوں گے.\nمقامی اصول کو گلوبل اصولوں پر ترجیح دی جائے گی.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "اپنی تبدیلیوں کو مستقل کرنے کے لیے کلک کریں.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "اپنی تبدیلیوں کو کالعدم کرنے کے لیے کلک کریں.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "تمام",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "تصاویر",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "فریق ثالث",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "فریق ثالث کی Css/ تصاویر",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "ان لائن سکرپٹس",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "فریق اول کی سکرپٹس",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "فریق ثالث کی سکرپٹس",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "فریق ثالث کے فریم",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "domains connected",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} out of {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Version",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "script",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "frame",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "بنائیں",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "چُنیں",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "بند کریں",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "دیکھیں",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "نیٹورک کے فلٹر",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "کاسمیٹک فلٹر",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "کلک، کنٹرول + کلک",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "عنصر کو روکیں",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "روکے ہوئے عناصر جس جگہ پے تھے اس جگہ کو غائب کر دیں",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "آئکن پر روکی ہوئی درخواستوں کی تعداد دکھائیں",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "مفید معلومات والے پیغامات مت دکھائیں",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Make use of context menu where appropriate",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Color-blind friendly",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Appearance",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Theme",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Custom accent color",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Enable cloud storage support",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "I am an advanced user",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Disable pre-fetching (to prevent any connection for blocked network requests)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Disable hyperlink auditing",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Prevent WebRTC from leaking local IP addresses",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Default behavior",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "These default behaviors can be overridden on a per-site basis",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Disable cosmetic filtering",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Block media elements larger than {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Block remote fonts",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "جاوا سکرپٹ بند کریں",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Block CSP reports",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Uncloak canonical names",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Advanced",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Features suitable only for technical users",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "اعلیٰ ترتیبات",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "آخری ریسٹور:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "آخری بیک اپ:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} used out of {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Auto-update filter lists",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "ابھی اپڈیٹ کریں",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Purge all caches",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Parse and enforce cosmetic filters",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Cosmetic filters serve to hide elements in a web page which are deemed to be a visual nuisance, and which can't be blocked by the network request-based filtering engines.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Ignore generic cosmetic filters",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Generic cosmetic filters are those cosmetic filters which are meant to apply on all web sites. Enabling this option will eliminate the memory and CPU overhead added to web pages as a result of handling generic cosmetic filters.\n\nIt is recommended to enable this option on less powerful devices.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Suspend network activity until all filter lists are loaded",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Lists of blocked hosts",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Built-in",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "اشتہارات",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "رازداری",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Malware protection, security",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Annoyances",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Multipurpose",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "علاقے، زبانیں",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "مخصوص",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "درآمد...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "One URL per line. Invalid URLs will be silently ignored.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Out of date.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "view content",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Last update: {{ago}}.\nClick to force an update.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "اپڈیٹ ہو رہا ہے",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "A network error prevented the resource from being updated.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with <code>!</code> will be ignored.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Do not add filters from untrusted sources.",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Import and append…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "برآمد کریں",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Apply changes",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "مستقل اصول",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "عارضی اصول",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Revert",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Commit",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "تدوین کریں",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "محفوظ کریں",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "مسترد کریں",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "فائل سے درآمد...",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "فائل میں برآمد کریں",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "List of your dynamic filtering rules.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Rule syntax: <code>source destination type action</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>full documentation</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sort:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Rule type",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Source",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Destination",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "The trusted site directives dictate on which web pages uBlock Origin should be disabled. One entry per line.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Import and append…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "برآمد کریں",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "تبدیلیاں لاگو کریں",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "نوعیت",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "ڈومین",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "پته",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "فلٹر",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "تمام",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Tabless",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "موجودہ ٹیب",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Reload the tab content",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Toggle the DOM inspector",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Toggle the popup panel",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: The logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Clear logger",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Pause logger (discard all incoming data)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Unpause logger",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Toggle logger filtering",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "filter logger content",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Logger filtering options",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "نہیں",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "روکے ہوئے",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "اجازت والے",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "modified",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "فریق اول",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "فریق ثالث",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "تفصیلات",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "فلٹر",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "فلٹر کی فہرست",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "اصول",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "سیاق",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Root context",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Partyness",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "نوعیت",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "پته",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL rule",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "سیاق:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "نوعیت:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Static filter",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "روکیں",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "اجازت دیں",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "نوعیت \"{{type}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "کسی بھی نوعیت",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "\"{{origin}}\" سے",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "کہیں سے بھی",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "except when",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "even if",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Static filter <code>{{filter}}</code> found in:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Static filter could not be found in any of the currently enabled filter lists",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Preserve entries from the last {{input}} minutes",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Preserve at most {{input}} page loads per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Preserve at most {{input}} entries per tab",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Use {{input}} lines per entry in vertically expanded mode",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "چھپائیں کالم:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} وقت",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} فلٹر / اصول",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Context",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partyness",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "فہرست",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "ٹیبل",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Plain",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Open",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Create new report",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Find similar reports",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Documentation",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Read the documentation at <code>uBlock/wiki</code> to learn about all of uBlock Origin's features.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Questions and support",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Answers to questions and other kinds of help support is provided on the subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Filter issues/website is broken",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Important:</b> Avoid using other similarly-purposed blockers along with uBlock Origin, as this may cause filter issues on specific websites.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Tips:</b> Be sure your filter lists are up to date. <span data-url=\"logger-ui.html#_\">The logger</span> is the primary tool to diagnose filter-related issues.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Bug report",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "Report issues with uBlock Origin itself to the <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Troubleshooting Information",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Below is technical information that might be useful when volunteers are trying to help you solve a problem.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Important:</b> Potentially private or sensitive information is redacted by default. Redacted information may make it more difficult to solve a problem.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Report a filter issue",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Filter lists are updated daily. Be sure your issue has not already been addressed in the most recent filter lists.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Verify that the issue still exists after reloading the problematic webpage.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Address of the web page:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "The web page…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- Pick an entry --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Shows ads or ad leftovers",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Has overlays or other nuisances",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Detects uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Has privacy-related issues",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Malfunctions when uBlock Origin is enabled",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Opens unwanted tabs or windows",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Label the web page as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Redact",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Unredact",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Privacy policy",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Changelog",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Source code (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Contributors",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Source code",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Translations",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Filter lists",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "External dependencies (GPLv3-compatible):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO's own filter lists are freely hosted on the following <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDNs</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "A randomly picked CDN is used when a filter list needs to be updated.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Back up to file…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Restore from file…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Reset to default settings…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "The data could not be read or is invalid",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "نیٹورک مسئلہ: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Subscribe",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "ایک منٹ پہلے",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} منٹ پہلے",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "ایک گھنٹہ پہلے",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} گھنٹے پہلے",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "ایک دن پہلے",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} دن پہلے",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "کنٹرول پینل دکھائیں",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Show Logger",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "بند",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Page blocked",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin has prevented the following page from loading:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Because of the following filter:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "without parameters",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Found in:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "واپس جائیں",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "اس ونڈو کو بند کریں",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Don't warn me again about this site",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Disable strict blocking for {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "عارضی طور پر",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "مستقل طور پر",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Proceed",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "کلاؤڈ سٹوریج میں برآمد کریں",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "کلاؤڈ سٹوریج میں درآمد کریں",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "کلاؤڈ سٹوریج سے درآمد کر کے موجودہ ترتیبات کے ساتھ ضم کریں",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "اس آلے کا نام:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Warning! Change these advanced settings at your own risk.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "جمع کرائیں",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "تبدیلیاں لاگو کریں",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "کالعدم کریں",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "bytes",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Block element in frame…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Subscribe to filter list…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Temporarily allow large media elements",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "View source code…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Type a shortcut",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Toggle locked scrolling",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "کلپ بورڈ پر نقل کریں",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Select all",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Toggle cosmetic filtering",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Relax blocking mode",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Storage used: {{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Click to load",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Errors: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Could not filter properly at browser launch. Reload the page to ensure proper filtering.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "This entry must be the last one",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/vi/messages.json b/src/_locales/vi/messages.json
new file mode 100644
index 0000000..b358554
--- /dev/null
+++ b/src/_locales/vi/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "Cuối cùng, đã có một công cụ chặn quảng cáo hiệu quả, tiêu tốn ít CPU và bộ nhớ.",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — Bảng điều khiển",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "Cảnh báo! Bạn có các thay đổi chưa được lưu",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "Ở lại",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "Bỏ qua",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "Cài đặt",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "Danh sách bộ lọc",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "Bộ lọc của tôi",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "Quy tắc của tôi",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "Trang tin cậy",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "Phím tắt",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — Nhật ký các yêu cầu",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "Giới thiệu",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "Hỗ trợ",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ - Trình xem nội dung",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "Cài đặt nâng cao",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "Nhấp chuột: vô hiệu/kích hoạt uBlock₀ cho trang này.\nCtrl + nhấp chuột: chỉ vô hiệu uBlock₀ trên trang này.",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "Nhấp chuột để tắt uBlock₀ đối với toàn bộ tên miền này (site). \n\nCtrl + nhấp chuột để tắt uBlock₀ chỉ tại trang này (page).",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "Nhấp để bật uBlock₀ trên trang này.",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "yêu cầu đã chặn",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "trên trang này",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} hoặc {{percent}}%",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "từ lúc cài đặt",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "hoặc",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "Đã chặn trên trang này",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "Đã chặn từ khi cài đặt",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "Tên miền đã kết nối",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "Mở bảng điều khiển",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "Chuyển sang chế độ chặn phần tử tạm thời",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "Chuyển sang chế độ chọn phần tử",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "Mở nhật ký",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "Báo cáo lỗi trên trang này",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "Bật/tắt chặn popup của trang này",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "Nhấp để chặn tất cả cửa sổ bật lên trên trang này",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "Nhấn để bỏ chặn tất cả cửa sổ bật lên trên trang này",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "Bật tắt chặn yếu tố đa phương tiện lớn trên trang này",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "Nhấp để chặn các thành phần đa phương tiện lớn trên trang này",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "Nhấp để ngừng chặn các thành phần đa phương tiện kích thước lớn trên trang này",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "Bật/tắt bộ lọc phần tử trên trang này",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "Nhấn để tắt bộ lọc phần tử ẩn trên trang này",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "Nhấn để bật bộ lọc phần tử ẩn trên trang này",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "Bật tắt chặn font từ xa trên trang này",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "Nhấp để chặn phông tải về trên trang này",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "Nhấp để không chặn phông tải về trên trang này",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "Nhấp để vô hiệu hóa JavaScript trên trang này",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "Nhấp để ngừng vô hiệu hóa JavaScript trên trang này",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "Cửa sổ bật lên",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "Thành phần đa phương tiện kích thước lớn",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "Lọc phần tử hiển thị",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "Phông tải về",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "Mở rộng",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "Ít hơn",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "Quy tắc chung: cột này dành cho quy tắc áp dụng cho mọi trang.",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "Quy tắc nội bộ: cột này dành cho quy tắc chỉ áp dụng cho trang hiện tại.\nQuy tắc nội bộ sẽ thay thế quy tắc chung.",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "Bấm để thay đổi vĩnh viễn.",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "Bấm để hoàn tác thay đổi.",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "tất cả",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "hình ảnh",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "bên thứ ba",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "CSS/hình ảnh từ bên thứ ba",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "script cùng dòng",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "script bên thứ nhất",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "script bên thứ ba",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "khung bên thứ ba",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "tên miền đã kết nối",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} trên tổng {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "Phiên bản",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "tập lệnh",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "khung",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "Tạo",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "Chọn",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "Thoát",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "Xem trước",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "Các bộ lọc mạng",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "Bộ lọc phần tử ẩn",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "Nhấp chuột, Ctrl-nhấp chuột",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "Chặn phần tử...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "Ẩn các phần giữ chỗ của những phần tử bị chặn",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "Hiển thị số lượng yêu cầu bị chặn trên biểu tượng",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "Vô hiệu mách nước",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "Dùng menu ngữ cảnh nơi thích hợp",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "Thân thiện với người mù màu",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "Diện mạo",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "Giao diện",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "Tùy chọn màu nền",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "Kích hoạt hỗ trợ lưu trữ trực tuyến",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "Tôi là một người dùng có kinh nghiệm (<a href='https://github.com/gorhill/uBlock/wiki/Advanced-user-features'>Yêu cầu đọc qua</a>)",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "Vô hiệu tải trước (để chặn bất kỳ kết nối với những yêu cầu mạng đã chặn)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "Vô hiệu giám sát siêu liên kết",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "Ngặn WebRTC làm lộ địa chỉ IP nội bộ",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "Hành vi mặc định",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "Những hành vi này có thể thay thế tiêu chuẩn từng trang",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "Vô hiệu lọc phần tử ẩn",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "Chặn yếu tố đa phương tiện lớn hơn {{input}} KB",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "Chặn font từ xa",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "Vô hiệu hóa JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "Chặn các báo cáo CSP",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "Chặn tên miền theo dõi mạo danh từ bên thứ ba (CNAME Trackers)",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "Nâng cao",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "Những tính năng dành cho người dùng nâng cao",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "cài đặt nâng cao",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "Lần phục hồi trước:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "Lần sao lưu trước:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "{{netFilterCount}} bộ lọc mạng + {{cosmeticFilterCount}} bộ lọc phần tử ẩn từ:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "Đã dùng {{used}} trên {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "Các danh sách bộ lọc tự cập nhật.",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "Cập nhật ngay",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "Dọn tất cả bộ nhớ đệm",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "Phân tích và thi hành bộ lọc phần tử ẩn.",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "Bộ lọc phần tử dùng để ẩn các yếu tố trong một trang web mà gây khó chịu cho người dùng và những yếu tố không thể chặn bằng cách dùng bộ lọc mạng.",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "Bỏ qua bộ lọc phần tử ẩn chung",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "Bộ lọc phần tử chung là những bộ lọc phần tử được áp dụng cho cho mọi trang web. Kích hoạt tùy chọn này sẽ giảm bớt sức nặng lên cpu và bộ nhớ do không còn phải xử lí các bộ lọc phần tử chung.\n\nTùy chọn này được khuyến nghị kích hoạt trên thiết bị cấu hình thấp.",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "Ngắt kết nối mạng cho đến khi tất cả các bộ lọc đã được tải",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "Danh sách những máy chủ bị chặn",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "Áp dụng các thay đổi",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "Dựng sẵn",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "Quảng cáo",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "Riêng tư",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "Bảo mật, bảo vệ khỏi phần mềm nguy hiểm",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "Phiền toái",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "Đa chức năng",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "Khu vực, ngôn ngữ",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "Tuỳ chỉnh",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "Nhập...",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "Một URL cho mỗi dòng. URL không hợp lệ sẽ âm thầm bị bỏ qua.",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "Đã cũ.",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "xem nội dung",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "Cập nhật lần cuối: {{ago}}.\nBấm để buộc cập nhật.",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "Đang cập nhật...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "Lỗi mạng ngăn tài nguyên được cập nhật.",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "Một bộ lọc cho mỗi dòng. Bộ lọc có thể là tên máy chủ thuần hoặc bộ lọc tương thích với EasyList. Các dòng có tiền tố <code>!</code> sẽ bị bỏ qua.",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "Không thêm các bộ lọc từ các nguồn không đáng tin cậy. ",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "Nhập và thêm vào",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "Xuất",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "Áp dụng các thay đổi",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "Quy tắc vĩnh viễn",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "Quy tắc tạm thời",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "Phục hồi",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "Xác nhận",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "Chỉnh sửa",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "Lưu",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "Huỷ",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "Nhập từ tập tin…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "Xuất ra tập tin",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "Danh sách quy tắc lọc chủ động.",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "Quy tắc cú pháp: <code>nguồn đích loại hành động</code> (<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>tài liệu đầy đủ</a>).",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "Sắp xếp:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "Loại quy tắc",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "Nguồn",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "Đích",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "Các chỉ thị trang web đáng tin cậy ra lệnh trên đó các trang web uBlock Origin sẽ bị vô hiệu hóa. Một mục nhập cho mỗi dòng. Chỉ thị không hợp lệ sẽ được âm thầm bỏ qua và nhận xét ra.",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "Nhập và thêm vào",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "Xuất",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-whitelist_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "Áp dụng các thay đổi",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "Loại",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "Tên miền",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "Bộ lọc",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "Tất cả",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "Tabless",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "Thẻ hiện tại",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "Tải lại nội dung thẻ",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "Chuyển đổi trình kiểm tra DOM",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "Đóng/mở hộp thoại popup",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki: Các logger",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "Xoá nhật ký",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "Tạm dừng nhật ký (loại bỏ tất cả dữ liệu đang nhập vào)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "Tiếp tục tác vụ nhật ký",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "Đóng/mở lọc tác vụ log",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "lọc mục ghi nhận",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "Lựa chọn lọc tác vụ log",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "Không phải",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "eventful",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "bị chặn",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "được phép",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "đã sửa đổi",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "Bên thứ nhất",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "Bên thứ ba",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "Chi tiết",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "Bộ lọc",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "Danh sách bộ lọc",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "Quy tắc",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "Ngữ cảnh",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "Ngữ cảnh gốc",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "Nguồn khác bên thứ nhất",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "Kiểu",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "Quy tắc URL",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "Ngữ cảnh:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "Loại:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "Bộ lọc tĩnh",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "{{action}} yêu cầu mạng của {{type}} {{br}}có địa chỉ URL phù hợp {{url}} {{br}}và từ nguồn {{origin}},{{br}}{{importance}} có một bộ lọc loại trừ phù hợp.",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "Chặn",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "Cho phép",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "loại “{{type}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "mọi loại",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "từ “{{origin}}”",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "từ mọi nơi",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "loại trừ khi",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "loại trừ nếu",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "Đã phát hiện bộ lọc tĩnh <code>{{filter}}</code> trong:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "Không tìm thấy bộ lọc tĩnh trong bất kỳ danh sách bộ lọc hiện đang được bật",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "Các mục Logger mà không đáp ứng tất cả ba điều kiện dưới đây sẽ được tự động loại bỏ:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "Bảo tồn các mục từ {{input}} phút trước",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "Bảo tồn nhiều nhất {{input}} trang được tải trên mỗi thẻ",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "Giữ lại tối đa {{input}} mục trên mỗi thẻ",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "Sử dụng {{input}} dòng trên mỗi entry trong chế độ mở rộng theo chiều dọc",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "Ẩn cột:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} Thời gian",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} Bộ lọc/quy tắc",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} Ngữ cảnh",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} Partyness",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "Danh sách",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "Bảng",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "Không có định dạng",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Đánh dấu",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "Mở",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "Tạo báo cáo mới",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "Tìm các báo cáo tương tự",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "Tài liệu hướng dẫn",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "Đọc tài liệu tại <code>uBlock/wiki</code> để tìm hiểu về các tính năng của uBlock Origin.",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "Hỗ trợ trả lời thắc mắc",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "Bạn có thể tìm thấy câu trả lời cho các thắc mắc của mình hoặc sự trợ giúp cho các vấn đề khác tại subreddit <code>/r/uBlockOrigin</code>.",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "Lỗi bộ lọc/ Trang web lỗi",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "<u>Cần tài khoản GitHub:</u> Báo cáo lỗi bộ lọc với tên miền cụ thể cho <code>uBlock Origin</code> tại <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\">đây</span>. ",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>Chú ý:<b> Tránh sử dụng các bộ chặn có chức năng tương tự song song uBlock Origin vì có thể gây ra lỗi bộ lọc trên nhiều trang web.",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>Mẹo:</b> Hãy đảm bảo các bộ lọc của bạn được cập nhật đầy đủ. <span data-url=\"logger-ui.html#_\">Nhật ký</span> là một công cụ hữu hiệu để chẩn đoán các lỗi bộ lọc.",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "Báo cáo lỗi",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "<u>Cần tài khoản GitHub:</u> Báo cáo lỗi bộ lọc với tên miền cụ thể cho <code>uBlock Origin</code> tại <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\">đây</span>. ",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "Thông tin chẩn đoán lỗi",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "Đây là các thông tin kỹ thuật có thể giúp ích khi khắc phục lỗi.",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>Lưu ý:</b> Mặc định, các luật và bộ lọc cá nhân được ẩn. Điều này có thể khiến việc khắc phục lỗi khó khăn hơn.",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "Báo cáo lỗi bộ lọc cụ thể",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "Để tránh tạo thêm gánh nặng cho các tình nguyện viên, hãy chắc chắn rằng chưa từng có vấn đề tương tự được báo cáo.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "Danh sách bộ lọc được cập nhật hàng ngày. Đảm bảo vấn đề của bạn chưa được giải quyết trong danh sách bộ lọc gần đây nhất.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "Xác nhận rằng sự cố vẫn tồn tại kể cả sau khi đã tải lại trong web có vấn đề.",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "Địa chỉ trang web:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "Trang web...",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "--Chọn một lỗi--",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "Vẫn hiện quảng cáo hoặc vùng chứa quảng cáo",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "Xuất hiện lớp phủ hoặc các phần tử phiền toái khác",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "Phát hiện uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "Có các cấn đề về quyền riêng tư",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "Trục trặc khi bật uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "Xuất hiện các tab và cửa sổ ngoài mong muốn",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "Đánh dấu \"NFSW\" - Not Safe For Work cho trang web. <a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">Tìm hiểu về \"Not Safe For Work\"</a>",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "Ẩn bớt",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "Hiện thêm",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "Chính sách bảo mật",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "Nhật ký thay đổi",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "Mã nguồn (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "Những người đóng góp",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "Mã nguồn",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "Bản dịch",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "Danh sách bộ lọc",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "Các phụ thuộc bên ngoài (tương thích GPLv3):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "Danh sách các bộ lọc của riêng uBO được lưu trữ miễn phí tại các <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN</a> sau:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "CDN được chọn ngẫu nhiên khi cần cập nhật danh sách bộ lọc.",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "Sao lưu vào tập tin...",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "Khôi phục từ tập tin...",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "Đặt lại cấu hình mặc định...",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "Các thiết lập của bạn sẽ bị ghi đè bởi dữ liệu đã lưu vào lúc {{time}}, và uBlock₀ sẽ khởi động lại. \n\nGhi đè các thiết lập hiện tại bằng dữ liệu đã lưu?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "Không thể đọc dữ liệu hoặc dữ liệu không hợp lệ",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "Các thiết lập sẽ bị xóa và uBlock₀ sẽ khởi động lại. \n\nThiết lập uBlock₀ về cấu hình ban đầu?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "Lỗi kết nối: {{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "uBlock₀: Thêm URL dưới đây vào bộ lọc tuỳ biến của bạn?\n\nTên: \"{{title}}\"\nURL: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "Đăng ký",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "một phút trước",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} phút trước",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "một giờ trước",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} giờ trước",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "một ngày trước",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} ngày trước",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "Hiện bảng điều khiển",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "Hiện nhật ký",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "tắt",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "Trang bị chặn",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBloc Origin đã chặn tải trang sau:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "Vì bộ lọc sau",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "không có thông số",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "Tìm thấy trong:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "Trở lại",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "Đóng cửa sổ này",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "Đừng cảnh báo tôi lần nữa về trang web này",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "Vô hiệu chặn nghiêm ngặt cho {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Tạm thời",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Vĩnh viễn",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "Tiếp tục",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "Xuất ra lưu trữ trực tuyến",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "Nhập từ lưu trữ trực tuyến",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "Nhập từ bộ lưu trữ trực tuyến và ghép với các thiết lập hiện tại",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "...\n...",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "Tên thiết bị này:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "Cảnh báo! Bạn phải chịu trách nhiệm cho những nguy cơ khi thay đổi các cài đặt nâng cao này.",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "Gửi",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "Áp dụng các thay đổi",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "Phục hồi",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "byte",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "Chặn phần tử trong khung ...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "Đăng ký danh sách bộ lọc ...",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "Tạm thời cho phép yếu tố đa phương tiện lớn",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "Xem mã nguồn",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "Nhập phím tắt",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "Đóng/mở khóa cuộn",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "Sao chép vào bảng tạm",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "Chọn tất cả",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "Bật/tắt lọc phần tử",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "Nới lỏng chế độ chặn",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "Bộ nhớ đã dùng: {{value}} byte",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "Bấm để tải",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "Lỗi: {{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "Không thể lọc đúng cách khi khởi chạy trình duyệt. Tải lại trang để đảm bảo lọc thích hợp.",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "Đây là mục cuối",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/zh_CN/messages.json b/src/_locales/zh_CN/messages.json
new file mode 100644
index 0000000..76ff0e1
--- /dev/null
+++ b/src/_locales/zh_CN/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "一款高效的网络请求过滤工具,占用极低的内存和 CPU。",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — 控制面板",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "警告!您有未保存的更改",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "留下",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "忽略",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "设置",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "规则列表",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "自定义静态规则",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "自定义动态规则",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "白名单",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "快捷键",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — 记录器",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "关于",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "支持",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — 资源查看器",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "高级设置",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "单击:对此网站禁用/启用 uBlock₀。\n\nCtrl + 单击:仅对此页面禁用 uBlock₀。",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "单击:对此网站禁用 uBlock₀ 。\n\nCtrl + 单击:仅在此页面上禁用 uBlock₀ 。",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "单击:对此网站启用 uBlock₀ 。",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "已拦截请求",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "在此页面",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "自安装后",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "或",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "在此页面已拦截",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "自安装后已拦截",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "已连接的域名",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "打开控制面板",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "进入临时移除元素模式",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "进入元素选择器模式",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "打开记录器",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "报告此网站上的问题",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "是否禁止此网站的所有弹出窗口",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "单击屏蔽此网站所有弹窗",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "单击取消屏蔽此网站所有弹窗",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "是否屏蔽此网站上较大的媒体元素",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "单击以屏蔽此网站上较大的媒体元素",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "单击取消屏蔽此网站大型媒体元素",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "是否对此网站应用元素过滤规则",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "单击禁用此网站上的元素过滤",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "单击启用针对此网站的元素过滤规则",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "是否屏蔽此网站的第三方字体",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "单击屏蔽此网站上的远程字体",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "单击取消屏蔽此网站上的远程字体",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "单击禁用此网站的所有脚本",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "单击以取消禁用此网站的所有脚本",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "弹出窗口",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "大型媒体元素",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "页面元素过滤",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "远程字体",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "更多",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "更少",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "全局规则:此列的规则作用于所有网站。",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "本地规则:此列的规则仅作用于当前网站。\n本地规则优先于全局规则。",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "点击以使更改永久生效。",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "点击以撤销更改。",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "全部",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "图片",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "第三方",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "第三方 CSS/图像",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "内联脚本",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "第一方脚本",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "第三方脚本",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "第三方框架",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "已连接域名",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} / {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "版本",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "脚本",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "框架",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "创建",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "选择",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "放弃",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "预览",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "URL 过滤规则",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "元素过滤规则",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "单击,Ctrl + 单击",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "屏蔽元素…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "隐藏已屏蔽元素的占位符",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "在图标上显示拦截请求数",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "不显示悬停提示",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "添加“屏蔽元素”到右键菜单",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "适合色盲人士",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "外观",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "主题",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "自定义强调色",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "启用云端储存",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "我是高级用户",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "禁止预读取(拦截对已屏蔽网络请求的任何连接)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "禁用超链接审计(hyperlink auditing)",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "防止 WebRTC 泄露本地 IP 地址",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "默认行为",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "这些默认行为可被针对各网站的设置取代",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "禁用元素过滤规则",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "屏蔽大于 {{input}} KB 的媒体元素",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "屏蔽远程字体",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "禁用 JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "屏蔽 CSP 报告",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "将代理域名映射至真实域名",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "高级",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "仅适合专家级用户的功能。",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "高级设置",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "上次恢复:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "上次备份:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "当前使用了 {{netFilterCount}} 个 URL 过滤规则和 {{cosmeticFilterCount}} 个元素过滤规则:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} / {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "自动更新过滤规则",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "立即更新",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "清除所有缓存",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "解析并应用元素过滤规则",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "元素过滤规则用于隐藏网页中碍眼,且不能被基于网络请求的过滤引擎屏蔽的元素。",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "忽略通用元素过滤规则",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "通用元素过滤规则是应用到所有网站的元素过滤规则。启用此选项将消除网站因处理通用元素过滤规则而增加的内存和 CPU 占用。\n\n推荐在低性能设备上启用此选项。",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "过滤规则列表全部加载完成前暂停网络连接",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "被屏蔽站点列表",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "应用更改",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "内置",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "广告",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "隐私",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "恶意软件防护、安全",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "骚扰",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "多用途",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "区域、语言",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "自定义",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "导入…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "一行一条网址。无效网址将被忽略。",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "过久未更新。",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "查看内容",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "上次更新:{{ago}}。\n点击此处要求更新。",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "正在更新...",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "资源更新因网络错误受阻。",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "一行一条过滤规则。每条规则可以是一个普通的主机名或者是一条与 EasyList 兼容的过滤规则。以 <code>!</code> 开头的行将被忽略。",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "请勿添加未信任来源的过滤规则。",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "导入并添加…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "导出…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "应用更改",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "永久规则",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "临时规则",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "恢复",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "提交",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "编辑",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "保存",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "取消",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "从文件导入…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "导出到文件...",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "您的动态过滤规则列表。",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "规则语法:<code>来源主机名称 目标主机名称 连接请求类型 操作</code>(<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>完整说明</a>)。",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "排列:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "规则类型",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "来源",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "目标",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "白名单中的规则匹配的页面不会被 uBlock Origin 过滤或阻挡。每行一条规则。",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "导入并添加…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "导出…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "应用更改",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "类型",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "域名",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "URL",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "过滤规则",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "全部",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "后台网络请求",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "当前标签页",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "重新加载此标签页的内容",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "是否打开 DOM 探查器",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "是否打开弹出式面板",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki:记录器",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "清空记录",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "暂停记录(放弃所有传入数据)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "取消暂停记录",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "是否启用记录器筛选",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "筛选记录条目",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "记录器筛选设定",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "非",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "已应用规则",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "已拦截",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "已允许",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "已修改",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "第一方",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "第三方",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "详细资料",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "过滤规则",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "规则列表",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "规则",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "上下文",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "根上下文",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "第一方/第三方",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "类型",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "URL",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "URL 规则",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "上下文:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "类型:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "静态规则",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "当 URL 匹配 {{url}},{{br}}且来源于 {{origin}} 时,{{br}}{{action}} {{type}} 的网络请求,{{br}}{{importance}} 有一个匹配的例外规则。",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "拦截",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "允许",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "“{{type}}”类型",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "任何类型",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "来源于 \"{{origin}}\"",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "任何地方",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "除非",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "即使",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "静态规则 <code>{{filter}}</code> 被包含于:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "无法在当前启用的任何过滤规则列表中找到静态规则",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "不符合以下任一状况的记录将会被自动清除:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "最多保留 {{input}} 分钟以内的记录",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "每个分页最多保留 {{input}} 次内容加载产生的记录",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "每个分页最多保留 {{input}} 条记录",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "垂直扩展模式下每项使用 {{input}} 行",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "隐藏栏位:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} 时间",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} 过滤规则",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} 上下文",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} 第一方/第三方",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "列表",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "表格",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "纯文字",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "打开",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "创建新报告",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "查找类似报告",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "使用说明",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "请至 <code>uBlock/wiki</code> 参阅 uBlock Origin 的所有功用以及使用说明。",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "疑难解答",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "若想进行普通的咨询或是需要其他帮助,请至 Reddit 的 <code>/r/uBlockOrigin</code> 板块寻求解答。",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "过滤规则或者网页的问题",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "将有关特定网站的过滤规则问题反馈至 <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> 问题跟踪器</span>。<u>需要 GitHub 账号。</u>",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>重要:</b>避免同时使用类似 uBlock Origin 的过滤软件,这可能导致在特定的网站上遇到过滤规则问题。",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>小提示:</b>确保在使用最新的过滤规则列表。<span data-url=\"logger-ui.html#_\">日志记录器</span>是诊断过滤规则问题的首选工具。",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "错误报告",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "将 uBlock Origin 本身的问题反馈至 <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> 问题跟踪器</span>。<u>需要 GitHub 账号。</u>",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "故障排查相关信息",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "以下生成的技术报告或有助于他人帮你解决问题。",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>注意:</b>可能涉及隐私的内容已经过删改,需手动取消。删改部分有可能包括解决问题的关键信息。",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "报告过滤规则的问题",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "请确认该问题未有其他人上报过,避免重复提交报告给维护者带来额外负担。",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "过滤规则列表每天都会更新。请确认您的问题无法用最新的过滤规则列表解决。",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "请验证重新加载问题页面后问题依然存在。",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "网址:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "该网页…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- 选择其中一项 --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "显示广告或广告残留",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "存在遮盖或类似问题",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "检测出 uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "存在隐私相关问题",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "启用 uBlock Origin 后出现异常",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "打开不需要的标签页或窗口",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "将该网页标记为 “NSFW”(<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“工作场所不宜”</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "自动删改",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "取消删改",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "隐私政策",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "变更日志",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "源代码 (GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "贡献者",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "源代码",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "翻译",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "过滤规则列表",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "外部依赖(兼容 GPLv3 协议):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO 本身提供的过滤规则列表免费托管于下列 <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN</a>:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "需要更新过滤规则列表时会随机选用一个 CDN。",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "备份到文件…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "从文件还原…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "重置为默认设置",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "您的所有设置将被备份于 {{time}} 的数据覆盖,并且 uBlock₀ 将重新启动。\n确定要用备份的数据覆盖全部现有设置吗?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "无法读取数据,或数据无效",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "您的设置将被清除,uBlock₀ 将重新启动。\n\n确定将 uBlock₀ 重置到初始状态?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "网络错误:{{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "添加下列网址到您的自定义规则列表吗?\n\n标题: “{{title}}”\n网址: {{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "订阅",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "1 分钟前",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} 分钟前",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "1 小时前",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} 小时前",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "1 天前",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} 天前",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "显示控制面板",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "显示记录器",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "关",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "页面已被屏蔽",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin 阻止了下列页面加载:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "因为下列过滤规则:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "不带参数",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "被包含于:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "返回",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "关闭此窗口",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "不再针对此网站作出警告",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "不对 {{hostname}} 进行严格屏蔽",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "暂时",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "永久",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "继续加载",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "导出到云端储存",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "从云端储存导入",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "从云存储导入并与当前设置合并",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "此设备名称:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "警告!更改这些高级设置可能造成问题,请自担风险。",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "提交",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "应用更改",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "还原",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "字节",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "屏蔽框架中的内容…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "订阅规则列表…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "临时允许较大媒体元素",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "查看源代码…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "键入快捷键",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "是否启用同步滚动",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "复制到剪贴板",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "全选",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "是否应用元素过滤规则",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "放宽拦截限制",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "已用存储:{{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "单击以加载",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "错误:{{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "无法在浏览器启动时正常过滤。请重新加载此页面以确保正常过滤。",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "此条目必须是最后一个",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/_locales/zh_TW/messages.json b/src/_locales/zh_TW/messages.json
new file mode 100644
index 0000000..10f947b
--- /dev/null
+++ b/src/_locales/zh_TW/messages.json
@@ -0,0 +1,1290 @@
+{
+ "extName": {
+ "message": "uBlock Origin",
+ "description": "extension name."
+ },
+ "extShortDesc": {
+ "message": "終於有套使用不多的 CPU 及記憶體資源的高效率阻擋器。",
+ "description": "this will be in the Chrome web store: must be 132 characters or less"
+ },
+ "dashboardName": {
+ "message": "uBlock₀ — 控制台",
+ "description": "English: uBlock₀ — Dashboard"
+ },
+ "dashboardUnsavedWarning": {
+ "message": "警告!您有尚未儲存的變更",
+ "description": "A warning in the dashboard when navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningStay": {
+ "message": "留下",
+ "description": "Label for button to prevent navigating away from unsaved changes"
+ },
+ "dashboardUnsavedWarningIgnore": {
+ "message": "忽略",
+ "description": "Label for button to ignore unsaved changes"
+ },
+ "settingsPageName": {
+ "message": "設定",
+ "description": "appears as tab name in dashboard"
+ },
+ "3pPageName": {
+ "message": "過濾規則清單",
+ "description": "appears as tab name in dashboard"
+ },
+ "1pPageName": {
+ "message": "自訂靜態過濾規則",
+ "description": "appears as tab name in dashboard"
+ },
+ "rulesPageName": {
+ "message": "自訂動態過濾規則",
+ "description": "appears as tab name in dashboard"
+ },
+ "whitelistPageName": {
+ "message": "受信任網站",
+ "description": "appears as tab name in dashboard"
+ },
+ "shortcutsPageName": {
+ "message": "快速鍵",
+ "description": "appears as tab name in dashboard"
+ },
+ "statsPageName": {
+ "message": "uBlock₀ — 記錄器",
+ "description": "Title for the logger window"
+ },
+ "aboutPageName": {
+ "message": "關於",
+ "description": "appears as tab name in dashboard"
+ },
+ "supportPageName": {
+ "message": "支援",
+ "description": "appears as tab name in dashboard"
+ },
+ "assetViewerPageName": {
+ "message": "uBlock₀ — 資源檢視器",
+ "description": "Title for the asset viewer page"
+ },
+ "advancedSettingsPageName": {
+ "message": "進階設定",
+ "description": "Title for the advanced settings page"
+ },
+ "popupPowerSwitchInfo": {
+ "message": "點擊:對此網站 停用/啟用 uBlock₀ 。\n\nCtrl + 點擊:僅在此頁面停用 uBlock₀ 。",
+ "description": "English: Click: disable/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page."
+ },
+ "popupPowerSwitchInfo1": {
+ "message": "點擊:在此網站停用 uBlock₀ 。\n\nCtrl + 點擊:僅在此頁面停用 uBlock₀ 。",
+ "description": "Message to be read by screen readers"
+ },
+ "popupPowerSwitchInfo2": {
+ "message": "點擊以在此網站啟用 uBlock₀ 。",
+ "description": "Message to be read by screen readers"
+ },
+ "popupBlockedRequestPrompt": {
+ "message": "已阻擋的連線請求",
+ "description": "English: requests blocked"
+ },
+ "popupBlockedOnThisPagePrompt": {
+ "message": "在此頁面",
+ "description": "English: on this page"
+ },
+ "popupBlockedStats": {
+ "message": "{{count}} ({{percent}}%)",
+ "description": "Example: 15 (13%)"
+ },
+ "popupBlockedSinceInstallPrompt": {
+ "message": "自安裝後",
+ "description": "English: since install"
+ },
+ "popupOr": {
+ "message": "或",
+ "description": "English: or"
+ },
+ "popupBlockedOnThisPage_v2": {
+ "message": "此頁面已阻擋",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupBlockedSinceInstall_v2": {
+ "message": "安裝後已阻擋",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupDomainsConnected_v2": {
+ "message": "已連接的網域",
+ "description": "For the new mobile-friendly popup design"
+ },
+ "popupTipDashboard": {
+ "message": "開啟控制台",
+ "description": "English: Click to open the dashboard"
+ },
+ "popupTipZapper": {
+ "message": "進入元素臨時移除模式",
+ "description": "Tooltip for the element-zapper icon in the popup panel"
+ },
+ "popupTipPicker": {
+ "message": "進入元素選擇器模式",
+ "description": "English: Enter element picker mode"
+ },
+ "popupTipLog": {
+ "message": "開啟記錄器",
+ "description": "Tooltip used for the logger icon in the panel"
+ },
+ "popupTipReport": {
+ "message": "回報此網站的問題",
+ "description": "Tooltip used for the 'chat' icon in the panel"
+ },
+ "popupTipNoPopups": {
+ "message": "切換是否阻擋此網站的所有彈出型視窗",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups1": {
+ "message": "點擊以阻擋此網站的所有彈出式視窗",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoPopups2": {
+ "message": "點擊後將不再封鎖此網站的所有彈出式廣告",
+ "description": "Tooltip for the no-popups per-site switch"
+ },
+ "popupTipNoLargeMedia": {
+ "message": "切換是否封鎖此網站的大型媒體元素",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia1": {
+ "message": "點擊以封鎖此網站的大型媒體元素",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoLargeMedia2": {
+ "message": "點擊以停止封鎖此網站的大型媒體元素",
+ "description": "Tooltip for the no-large-media per-site switch"
+ },
+ "popupTipNoCosmeticFiltering": {
+ "message": "切換是否在此網站過濾網頁元素",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering1": {
+ "message": "點擊以停用此網站的網頁元素過濾",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoCosmeticFiltering2": {
+ "message": "點擊以啟用此網站的網頁元素過濾",
+ "description": "Tooltip for the no-cosmetic-filtering per-site switch"
+ },
+ "popupTipNoRemoteFonts": {
+ "message": "切換是否封鎖此網站的遠端字體",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts1": {
+ "message": "點擊以封鎖此網站的遠端字型",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoRemoteFonts2": {
+ "message": "點擊以停止封鎖此網站的遠端字型",
+ "description": "Tooltip for the no-remote-fonts per-site switch"
+ },
+ "popupTipNoScripting1": {
+ "message": "點擊以停用此網站的 JavaScript",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupTipNoScripting2": {
+ "message": "點擊以重新啟用此網站的 JavaScript ",
+ "description": "Tooltip for the no-scripting per-site switch"
+ },
+ "popupNoPopups_v2": {
+ "message": "彈出式視窗",
+ "description": "Caption for the no-popups per-site switch"
+ },
+ "popupNoLargeMedia_v2": {
+ "message": "大型媒體元素",
+ "description": "Caption for the no-large-media per-site switch"
+ },
+ "popupNoCosmeticFiltering_v2": {
+ "message": "網頁元素過濾",
+ "description": "Caption for the no-cosmetic-filtering per-site switch"
+ },
+ "popupNoRemoteFonts_v2": {
+ "message": "遠端字體",
+ "description": "Caption for the no-remote-fonts per-site switch"
+ },
+ "popupNoScripting_v2": {
+ "message": "JavaScript",
+ "description": "Caption for the no-scripting per-site switch"
+ },
+ "popupMoreButton_v2": {
+ "message": "更多",
+ "description": "Label to be used to show popup panel sections"
+ },
+ "popupLessButton_v2": {
+ "message": "更少",
+ "description": "Label to be used to hide popup panel sections"
+ },
+ "popupTipGlobalRules": {
+ "message": "全域規則:此欄位的規則會套用至所有網站。",
+ "description": "Tooltip when hovering the top-most cell of the global-rules column."
+ },
+ "popupTipLocalRules": {
+ "message": "區域規則:此欄位的規則僅會套用至目前網站。\n區域規則會覆蓋過全域規則。",
+ "description": "Tooltip when hovering the top-most cell of the local-rules column."
+ },
+ "popupTipSaveRules": {
+ "message": "點擊此處讓變更永久生效。",
+ "description": "Tooltip when hovering over the padlock in the dynamic filtering pane."
+ },
+ "popupTipRevertRules": {
+ "message": "點擊以撤銷變更。",
+ "description": "Tooltip when hovering over the eraser in the dynamic filtering pane."
+ },
+ "popupAnyRulePrompt": {
+ "message": "全部",
+ "description": ""
+ },
+ "popupImageRulePrompt": {
+ "message": "圖片",
+ "description": ""
+ },
+ "popup3pAnyRulePrompt": {
+ "message": "第三方",
+ "description": ""
+ },
+ "popup3pPassiveRulePrompt": {
+ "message": "第三方 CSS / 圖片",
+ "description": ""
+ },
+ "popupInlineScriptRulePrompt": {
+ "message": "內聯腳本",
+ "description": ""
+ },
+ "popup1pScriptRulePrompt": {
+ "message": "第一方腳本",
+ "description": ""
+ },
+ "popup3pScriptRulePrompt": {
+ "message": "第三方腳本",
+ "description": ""
+ },
+ "popup3pFrameRulePrompt": {
+ "message": "第三方框架",
+ "description": ""
+ },
+ "popupHitDomainCountPrompt": {
+ "message": "已連結的網域",
+ "description": "appears in popup"
+ },
+ "popupHitDomainCount": {
+ "message": "{{count}} / {{total}}",
+ "description": "appears in popup"
+ },
+ "popupVersion": {
+ "message": "版本",
+ "description": "Example of use: Version 1.26.4"
+ },
+ "popup3pScriptFilter": {
+ "message": "腳本",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "popup3pFrameFilter": {
+ "message": "框架",
+ "description": "Appears as an option to filter out firewall rows"
+ },
+ "pickerCreate": {
+ "message": "建立",
+ "description": "English: Create"
+ },
+ "pickerPick": {
+ "message": "選擇",
+ "description": "English: Pick"
+ },
+ "pickerQuit": {
+ "message": "放棄",
+ "description": "English: Quit"
+ },
+ "pickerPreview": {
+ "message": "預覽",
+ "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page"
+ },
+ "pickerNetFilters": {
+ "message": "網址過濾規則",
+ "description": "English: header for a type of filter in the element picker dialog"
+ },
+ "pickerCosmeticFilters": {
+ "message": "元素隱藏過濾規則",
+ "description": "English: Cosmetic filters"
+ },
+ "pickerCosmeticFiltersHint": {
+ "message": "點擊,按住 Ctrl 鍵點擊",
+ "description": "English: Click, Ctrl-click"
+ },
+ "pickerContextMenuEntry": {
+ "message": "阻擋元素…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "settingsCollapseBlockedPrompt": {
+ "message": "隱藏已阻擋元素的佔位元素",
+ "description": "English: Hide placeholders of blocked elements"
+ },
+ "settingsIconBadgePrompt": {
+ "message": "在圖示上顯示被阻擋的連線請求的數量",
+ "description": "English: Show the number of blocked requests on the icon"
+ },
+ "settingsTooltipsPrompt": {
+ "message": "關閉提示文字功能",
+ "description": "A checkbox in the Settings pane"
+ },
+ "settingsContextMenuPrompt": {
+ "message": "將 uBlock Origin 加入右鍵選單",
+ "description": "English: Make use of context menu where appropriate"
+ },
+ "settingsColorBlindPrompt": {
+ "message": "使用對色盲友善的色彩",
+ "description": "English: Color-blind friendly"
+ },
+ "settingsAppearance": {
+ "message": "外觀",
+ "description": "Section for controlling user interface appearance"
+ },
+ "settingsThemeLabel": {
+ "message": "佈景主題",
+ "description": "Label for checkbox to enable a custom dark theme"
+ },
+ "settingsThemeAccent0Label": {
+ "message": "自訂強調顏色",
+ "description": "Label for checkbox to pick an accent color"
+ },
+ "settingsCloudStorageEnabledPrompt": {
+ "message": "啟用雲端儲存空間的支援",
+ "description": ""
+ },
+ "settingsAdvancedUserPrompt": {
+ "message": "我是進階使用者",
+ "description": "Checkbox to let user access advanced, technical features"
+ },
+ "settingsPrefetchingDisabledPrompt": {
+ "message": "停用預先載入模式(避免連線至已阻擋的網路要求)",
+ "description": "English: "
+ },
+ "settingsHyperlinkAuditingDisabledPrompt": {
+ "message": "停用超連結監測",
+ "description": "English: "
+ },
+ "settingsWebRTCIPAddressHiddenPrompt": {
+ "message": "防止 WebRTC 洩漏本地 IP 位址",
+ "description": "English: "
+ },
+ "settingPerSiteSwitchGroup": {
+ "message": "預設行為",
+ "description": ""
+ },
+ "settingPerSiteSwitchGroupSynopsis": {
+ "message": "這些預設行為可再依各網站調整",
+ "description": ""
+ },
+ "settingsNoCosmeticFilteringPrompt": {
+ "message": "停用元素隱藏過濾規則",
+ "description": ""
+ },
+ "settingsNoLargeMediaPrompt": {
+ "message": "封鎖超過 {{input}} KB 的媒體元素",
+ "description": ""
+ },
+ "settingsNoRemoteFontsPrompt": {
+ "message": "封鎖遠端字型",
+ "description": ""
+ },
+ "settingsNoScriptingPrompt": {
+ "message": "停用 JavaScript",
+ "description": "The default state for the per-site no-scripting switch"
+ },
+ "settingsNoCSPReportsPrompt": {
+ "message": "封鎖內容安全策略報告",
+ "description": "background information: https://github.com/gorhill/uBlock/issues/3150"
+ },
+ "settingsUncloakCnamePrompt": {
+ "message": "揭露網域真實名稱",
+ "description": "background information: https://github.com/uBlockOrigin/uBlock-issues/issues/1513"
+ },
+ "settingsAdvanced": {
+ "message": "進階",
+ "description": "Section for controlling advanced-user settings"
+ },
+ "settingsAdvancedSynopsis": {
+ "message": "僅適合技術使用者的功能",
+ "description": "Description of section controlling advanced-user settings"
+ },
+ "settingsAdvancedUserSettings": {
+ "message": "進階設定",
+ "description": "For the tooltip of a link which gives access to advanced settings"
+ },
+ "settingsLastRestorePrompt": {
+ "message": "上次還原:",
+ "description": "English: Last restore:"
+ },
+ "settingsLastBackupPrompt": {
+ "message": "上次備份:",
+ "description": "English: Last backup:"
+ },
+ "3pListsOfBlockedHostsPrompt": {
+ "message": "目前已使用 {{netFilterCount}} 個網址過濾規則 + {{cosmeticFilterCount}} 個元素隱藏過濾規則:",
+ "description": "Appears at the top of the _3rd-party filters_ pane"
+ },
+ "3pListsOfBlockedHostsPerListStats": {
+ "message": "{{used}} / {{total}}",
+ "description": "Appears aside each filter list in the _3rd-party filters_ pane"
+ },
+ "3pAutoUpdatePrompt1": {
+ "message": "自動更新過濾規則",
+ "description": "A checkbox in the _3rd-party filters_ pane"
+ },
+ "3pUpdateNow": {
+ "message": "立即更新",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pPurgeAll": {
+ "message": "清除所有快取",
+ "description": "A button in the in the _3rd-party filters_ pane"
+ },
+ "3pParseAllABPHideFiltersPrompt1": {
+ "message": "解析並套用元素隱藏過濾規則",
+ "description": "English: Parse and enforce Adblock+ element hiding filters."
+ },
+ "3pParseAllABPHideFiltersInfo": {
+ "message": "元素隱藏過濾規則 用於隱藏網頁中礙眼,且不能被基於網路請求的過濾引擎所阻擋的元素。",
+ "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature."
+ },
+ "3pIgnoreGenericCosmeticFilters": {
+ "message": "忽略一般元素隱藏過濾規則",
+ "description": "This will cause uBO to ignore all generic cosmetic filters."
+ },
+ "3pIgnoreGenericCosmeticFiltersInfo": {
+ "message": "通用元素隱藏過濾規則 是會套用在所有網頁的元素隱藏過濾規則。啟用此選項會減少每個網頁,因處理一般元素隱藏過濾規則,而增加的記憶體與 CPU 使用量。\n\n建議在效能較差的裝置上啟用此選項。",
+ "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature."
+ },
+ "3pSuspendUntilListsAreLoaded": {
+ "message": "在所有過濾器清單載入完成前暫停網路活動",
+ "description": "A checkbox in the 'Filter lists' pane"
+ },
+ "3pListsOfBlockedHostsHeader": {
+ "message": "被阻擋網域的列表",
+ "description": "English: Lists of blocked hosts"
+ },
+ "3pApplyChanges": {
+ "message": "套用變更",
+ "description": "English: Apply changes"
+ },
+ "3pGroupDefault": {
+ "message": "內置",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAds": {
+ "message": "廣告",
+ "description": "Filter lists section name"
+ },
+ "3pGroupPrivacy": {
+ "message": "隱私",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMalware": {
+ "message": "惡意軟體防護及安全性",
+ "description": "Filter lists section name"
+ },
+ "3pGroupAnnoyances": {
+ "message": "嫌惡元素",
+ "description": "Filter lists section name"
+ },
+ "3pGroupMultipurpose": {
+ "message": "多用途",
+ "description": "Filter lists section name"
+ },
+ "3pGroupRegions": {
+ "message": "地區、語言",
+ "description": "Filter lists section name"
+ },
+ "3pGroupCustom": {
+ "message": "自訂",
+ "description": "Filter lists section name"
+ },
+ "3pImport": {
+ "message": "匯入…",
+ "description": "The label for the checkbox used to import external filter lists"
+ },
+ "3pExternalListsHint": {
+ "message": "每行一個網址。無效的網址將被忽略。",
+ "description": "Short information about how to use the textarea to import external filter lists by URL"
+ },
+ "3pExternalListObsolete": {
+ "message": "過久未更新。",
+ "description": "used as a tooltip for the out-of-date icon beside a list"
+ },
+ "3pViewContent": {
+ "message": "查看內容",
+ "description": "used as a tooltip for eye icon beside a list"
+ },
+ "3pLastUpdate": {
+ "message": "上次更新:{{ago}}。\n點擊此處以要求更新。",
+ "description": "used as a tooltip for the clock icon beside a list"
+ },
+ "3pUpdating": {
+ "message": "更新中…",
+ "description": "used as a tooltip for the spinner icon beside a list"
+ },
+ "3pNetworkError": {
+ "message": "因網路錯誤無法更新資源。",
+ "description": "used as a tooltip for error icon beside a list"
+ },
+ "1pFormatHint": {
+ "message": "每行一個過濾規則。規則可以單純是主機名稱,或是與 EasyList 相容的過濾規則。以 <code>!</code> 開頭的行將被忽略。",
+ "description": "Short information about how to create custom filters"
+ },
+ "1pTrustWarning": {
+ "message": "請勿添加未信任來源的過濾規則。",
+ "description": "Warning against copy-pasting filters from random sources"
+ },
+ "1pImport": {
+ "message": "匯入並加入…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExport": {
+ "message": "匯出…",
+ "description": "Button in the 'My filters' pane"
+ },
+ "1pExportFilename": {
+ "message": "my-ublock-static-filters_{{datetime}}.txt",
+ "description": "English: my-ublock-static-filters_{{datetime}}.txt"
+ },
+ "1pApplyChanges": {
+ "message": "套用變更",
+ "description": "English: Apply changes"
+ },
+ "rulesPermanentHeader": {
+ "message": "永久規則",
+ "description": "header"
+ },
+ "rulesTemporaryHeader": {
+ "message": "臨時規則",
+ "description": "header"
+ },
+ "rulesRevert": {
+ "message": "還原",
+ "description": "This will remove all temporary rules"
+ },
+ "rulesCommit": {
+ "message": "提交",
+ "description": "This will persist temporary rules"
+ },
+ "rulesEdit": {
+ "message": "編輯",
+ "description": "Will enable manual-edit mode (textarea)"
+ },
+ "rulesEditSave": {
+ "message": "儲存",
+ "description": "Will save manually-edited content and exit manual-edit mode"
+ },
+ "rulesEditDiscard": {
+ "message": "捨棄",
+ "description": "Will discard manually-edited content and exit manual-edit mode"
+ },
+ "rulesImport": {
+ "message": "從檔案匯入…",
+ "description": ""
+ },
+ "rulesExport": {
+ "message": "匯出至檔案…",
+ "description": "Button in the 'My rules' pane"
+ },
+ "rulesDefaultFileName": {
+ "message": "my-ublock-dynamic-rules_{{datetime}}.txt",
+ "description": "default file name to use"
+ },
+ "rulesHint": {
+ "message": "您的動態過濾規則清單。",
+ "description": "English: List of your dynamic filtering rules."
+ },
+ "rulesFormatHint": {
+ "message": "規則語法:<code>來源主機名稱 目標主機名稱 連線請求類型 操作</code>(<a href='https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax'>完整說明</a>)。",
+ "description": "English: dynamic rule syntax and full documentation."
+ },
+ "rulesSort": {
+ "message": "排序:",
+ "description": "English: label for sort option."
+ },
+ "rulesSortByType": {
+ "message": "規則類型",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortBySource": {
+ "message": "來源",
+ "description": "English: a sort option for list of rules."
+ },
+ "rulesSortByDestination": {
+ "message": "目標",
+ "description": "English: a sort option for list of rules."
+ },
+ "whitelistPrompt": {
+ "message": "信任名單中的規則適用的頁面不會被 uBlock Origin 過濾或阻擋。每行一個規則。",
+ "description": "A concise description of the 'Trusted sites' pane."
+ },
+ "whitelistImport": {
+ "message": "匯入並加入…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExport": {
+ "message": "匯出…",
+ "description": "Button in the 'Trusted sites' pane"
+ },
+ "whitelistExportFilename": {
+ "message": "my-ublock-trusted-sites_{{datetime}}.txt",
+ "description": "The default filename to use for import/export purpose"
+ },
+ "whitelistApply": {
+ "message": "套用變更",
+ "description": "English: Apply changes"
+ },
+ "logRequestsHeaderType": {
+ "message": "類型",
+ "description": "English: Type"
+ },
+ "logRequestsHeaderDomain": {
+ "message": "網域",
+ "description": "English: Domain"
+ },
+ "logRequestsHeaderURL": {
+ "message": "網址",
+ "description": "English: URL"
+ },
+ "logRequestsHeaderFilter": {
+ "message": "過濾規則",
+ "description": "English: Filter"
+ },
+ "logAll": {
+ "message": "全部",
+ "description": "Appears in the logger's tab selector"
+ },
+ "logBehindTheScene": {
+ "message": "背景網路連線請求",
+ "description": "Pretty name for behind-the-scene network requests"
+ },
+ "loggerCurrentTab": {
+ "message": "目前分頁",
+ "description": "Appears in the logger's tab selector"
+ },
+ "loggerReloadTip": {
+ "message": "重新載入分頁內容",
+ "description": "Tooltip for the reload button in the logger page"
+ },
+ "loggerDomInspectorTip": {
+ "message": "切換是否啟用 DOM 檢視器",
+ "description": "Tooltip for the DOM inspector button in the logger page"
+ },
+ "loggerPopupPanelTip": {
+ "message": "切換是否啟用彈出式面板",
+ "description": "Tooltip for the popup panel button in the logger page"
+ },
+ "loggerInfoTip": {
+ "message": "uBlock Origin wiki:記錄器",
+ "description": "Tooltip for the top-right info label in the logger page"
+ },
+ "loggerClearTip": {
+ "message": "清除記錄",
+ "description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
+ },
+ "loggerPauseTip": {
+ "message": "暫停記錄(捨棄所有傳入資料)",
+ "description": "Tooltip for the pause button in the logger page"
+ },
+ "loggerUnpauseTip": {
+ "message": "取消暫停記錄",
+ "description": "Tooltip for the play button in the logger page"
+ },
+ "loggerRowFiltererButtonTip": {
+ "message": "切換是否啟用記錄篩選",
+ "description": "Tooltip for the row filterer button in the logger page"
+ },
+ "logFilterPrompt": {
+ "message": "篩選記錄條目",
+ "description": "Placeholder string for logger output filtering input field"
+ },
+ "loggerRowFiltererBuiltinTip": {
+ "message": "記錄器篩選設定",
+ "description": "Tooltip for the button to bring up logger output filtering options"
+ },
+ "loggerRowFiltererBuiltinNot": {
+ "message": "非",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinEventful": {
+ "message": "已套用規則",
+ "description": "A keyword in the built-in row filtering expression: all items corresponding to uBO doing something (blocked, allowed, redirected, etc.)"
+ },
+ "loggerRowFiltererBuiltinBlocked": {
+ "message": "已封鎖",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinAllowed": {
+ "message": "已允許",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltinModified": {
+ "message": "已修改",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin1p": {
+ "message": "第一方",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerRowFiltererBuiltin3p": {
+ "message": "第三方",
+ "description": "A keyword in the built-in row filtering expression"
+ },
+ "loggerEntryDetailsHeader": {
+ "message": "詳細資料",
+ "description": "Small header to identify the 'Details' pane for a specific logger entry"
+ },
+ "loggerEntryDetailsFilter": {
+ "message": "過濾規則",
+ "description": "Label to identify a filter field"
+ },
+ "loggerEntryDetailsFilterList": {
+ "message": "過濾規則清單",
+ "description": "Label to identify a filter list field"
+ },
+ "loggerEntryDetailsRule": {
+ "message": "規則",
+ "description": "Label to identify a rule field"
+ },
+ "loggerEntryDetailsContext": {
+ "message": "上下文",
+ "description": "Label to identify a context field (typically a hostname)"
+ },
+ "loggerEntryDetailsRootContext": {
+ "message": "根上下文",
+ "description": "Label to identify a root context field (typically a hostname)"
+ },
+ "loggerEntryDetailsPartyness": {
+ "message": "所屬方",
+ "description": "Label to identify a field providing partyness information"
+ },
+ "loggerEntryDetailsType": {
+ "message": "類型",
+ "description": "Label to identify the type of an entry"
+ },
+ "loggerEntryDetailsURL": {
+ "message": "網址",
+ "description": "Label to identify the URL of an entry"
+ },
+ "loggerURLFilteringHeader": {
+ "message": "網址規則",
+ "description": "Small header to identify the dynamic URL filtering section"
+ },
+ "loggerURLFilteringContextLabel": {
+ "message": "上下文:",
+ "description": "Label for the context selector"
+ },
+ "loggerURLFilteringTypeLabel": {
+ "message": "類型:",
+ "description": "Label for the type selector"
+ },
+ "loggerStaticFilteringHeader": {
+ "message": "靜態過濾",
+ "description": "Small header to identify the static filtering section"
+ },
+ "loggerStaticFilteringSentence": {
+ "message": "當網址符合 {{url}},{{br}}並且來自 {{origin}} 時,{{br}}{{action}} {{type}} 的網路請求,{{br}}{{importance}} 已有符合的過濾例外規則。",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartBlock": {
+ "message": "封鎖",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAllow": {
+ "message": "允許",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartType": {
+ "message": "{{type}} 類型",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyType": {
+ "message": "任何類型",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartOrigin": {
+ "message": "來自「{{origin}}」",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartAnyOrigin": {
+ "message": "來自任何地方",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartNotImportant": {
+ "message": "除非",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringSentencePartImportant": {
+ "message": "就算",
+ "description": "Used in the static filtering wizard"
+ },
+ "loggerStaticFilteringFinderSentence1": {
+ "message": "在下列清單中找到靜態過濾規則 <code>{{filter}}</code>:",
+ "description": "Below this sentence, the filter list(s) in which the filter was found"
+ },
+ "loggerStaticFilteringFinderSentence2": {
+ "message": "無法在任何目前已啟用的過濾規則清單中找到靜態過濾規則",
+ "description": "Message to show when a filter cannot be found in any filter lists"
+ },
+ "loggerSettingDiscardPrompt": {
+ "message": "未符合以下所有條件的記錄將會被自動捨棄:",
+ "description": "Logger setting: A sentence to describe the purpose of the settings below"
+ },
+ "loggerSettingPerEntryMaxAge": {
+ "message": "最多保留 {{input}} 分鐘以內的記錄",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxLoads": {
+ "message": "每個分頁最多保留 {{input}} 次重新載入該頁所產生的記錄",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerTabMaxEntries": {
+ "message": "每個分頁最多保留 {{input}} 條記錄",
+ "description": "A logger setting"
+ },
+ "loggerSettingPerEntryLineCount": {
+ "message": "在垂直延展模式中每條記錄顯示 {{input}} 行",
+ "description": "A logger setting"
+ },
+ "loggerSettingHideColumnsPrompt": {
+ "message": "隱藏欄位:",
+ "description": "Logger settings: a sentence to describe the purpose of the checkboxes below"
+ },
+ "loggerSettingHideColumnTime": {
+ "message": "{{input}} 時間",
+ "description": "A label for the time column"
+ },
+ "loggerSettingHideColumnFilter": {
+ "message": "{{input}} 過濾規則",
+ "description": "A label for the filter or rule column"
+ },
+ "loggerSettingHideColumnContext": {
+ "message": "{{input}} 上下文",
+ "description": "A label for the context column"
+ },
+ "loggerSettingHideColumnPartyness": {
+ "message": "{{input}} 所屬方",
+ "description": "A label for the partyness column"
+ },
+ "loggerExportFormatList": {
+ "message": "清單",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportFormatTable": {
+ "message": "表格",
+ "description": "Label for radio-button to pick export format"
+ },
+ "loggerExportEncodePlain": {
+ "message": "純文字",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "loggerExportEncodeMarkdown": {
+ "message": "Markdown",
+ "description": "Label for radio-button to pick export text format"
+ },
+ "supportOpenButton": {
+ "message": "開啟",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportReportSpecificButton": {
+ "message": "發出新報告",
+ "description": "Text for button which open an external webpage in Support pane"
+ },
+ "supportFindSpecificButton": {
+ "message": "尋找類似的報告",
+ "description": "A clickable link in the filter issue reporter section"
+ },
+ "supportS1H": {
+ "message": "文件",
+ "description": "Header of 'Documentation' section in Support pane"
+ },
+ "supportS1P1": {
+ "message": "欲了解 uBlock Origin 所有的功能,請閱讀 <code>uBlock/wiki</code> 中的文件。",
+ "description": "First paragraph of 'Documentation' section in Support pane"
+ },
+ "supportS2H": {
+ "message": "問題與支援",
+ "description": "Header of 'Questions and support' section in Support pane"
+ },
+ "supportS2P1": {
+ "message": "問題及其他類型的求助,可以在 <code>/r/uBlockOrigin</code> subreddit 獲得協助與解答。",
+ "description": "First paragraph of 'Questions and support' section in Support pane"
+ },
+ "supportS3H": {
+ "message": "過濾器問題 / 網站被搞壞",
+ "description": "Header of 'Filter issues' section in Support pane"
+ },
+ "supportS3P1": {
+ "message": "請到 <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> 議題追蹤系統</span>回報特定網站的過濾器問題。需要 GitHub 帳號。",
+ "description": "First paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P2": {
+ "message": "<b>特別注意:</b>不要把其他同性質的阻擋工具跟 uBlock Origin 混用,否則可能會造成特定網站的過濾器問題。",
+ "description": "Second paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS3P3": {
+ "message": "<b>小提示:</b>請確定您的過濾器清單已經更新至最新版本。我們主要用 <span data-url=\"logger-ui.html#_\">記錄器</span> 來分析過濾器相關問題。",
+ "description": "Third paragraph of 'Filter issues' section in Support pane"
+ },
+ "supportS4H": {
+ "message": "錯誤報告",
+ "description": "Header of 'Bug report' section in Support pane"
+ },
+ "supportS4P1": {
+ "message": "請到 <span data-url=\"https://github.com/uBlockOrigin/uBlock-issues/issues?q=is%3Aissue\"><code>uBlockOrigin/uBlock-issue</code> 議題追蹤系統</span>回報 uBlock Origin 本身的問題。需要 GitHub 帳號。",
+ "description": "First paragraph of 'Bug report' section in Support pane"
+ },
+ "supportS5H": {
+ "message": "疑難排解資訊",
+ "description": "Header of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P1": {
+ "message": "以下是志願者嘗試幫您解決問題時,可能會用到的技術資訊:",
+ "description": "First paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS5P2": {
+ "message": "<b>特別注意:</b>預設情況下,潛在隱私或敏感資料會被替換掉。替換過的資訊可能會加大問題解決的難度。",
+ "description": "Second paragraph of 'Troubleshooting Information' section in Support pane"
+ },
+ "supportS6H": {
+ "message": "回報過濾規則的問題",
+ "description": "Header of 'Report a filter issue' section in Support pane"
+ },
+ "supportS6P1S1": {
+ "message": "請先確認是否已經有人回報過此問題,以免重複回報造成維護者的而外負擔。",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S1": {
+ "message": "過濾器清單每天更新。請確認您的問題無法用最新的過濾器清單解決。",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6P2S2": {
+ "message": "重新載入有問題的網頁後,驗證問題是否仍然存在。",
+ "description": "A paragraph in the filter issue reporter section"
+ },
+ "supportS6URL": {
+ "message": "網址:",
+ "description": "Label for the URL of the page"
+ },
+ "supportS6Select1": {
+ "message": "這個網頁…",
+ "description": "Label for widget to select type of issue"
+ },
+ "supportS6Select1Option0": {
+ "message": "-- 挑選一種情況 --",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option1": {
+ "message": "顯示廣告或廣告移除後留下的天窗",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option2": {
+ "message": "會覆蓋內容或有其他煩人的內容",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option3": {
+ "message": "偵測到 uBlock Origin",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option4": {
+ "message": "有隱私權相關問題",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option5": {
+ "message": "開啟 uBlock Origin 的時候網頁運作不正常",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Select1Option6": {
+ "message": "開啟不想出現的分頁或視窗",
+ "description": "An entry in the widget used to select the type of issue"
+ },
+ "supportS6Checkbox1": {
+ "message": "將網頁標記為「NSFW」(<a href=\"https://zh.wikipedia.org/wiki/NSFW\">工作場所不宜</a>)",
+ "description": "A checkbox to use for NSFW sites"
+ },
+ "supportRedact": {
+ "message": "替換",
+ "description": "Text for 'Redact' button"
+ },
+ "supportUnredact": {
+ "message": "不要替換",
+ "description": "Text for 'Unredact' button"
+ },
+ "aboutPrivacyPolicy": {
+ "message": "隱私權條款",
+ "description": "Link to privacy policy on GitHub (English)"
+ },
+ "aboutChangelog": {
+ "message": "更新日誌",
+ "description": ""
+ },
+ "aboutCode": {
+ "message": "原始碼(GPLv3)",
+ "description": "English: Source code (GPLv3)"
+ },
+ "aboutContributors": {
+ "message": "貢獻者",
+ "description": "English: Contributors"
+ },
+ "aboutSourceCode": {
+ "message": "原始碼",
+ "description": "Link text to source code repo"
+ },
+ "aboutTranslations": {
+ "message": "翻譯",
+ "description": "Link text to translations repo"
+ },
+ "aboutFilterLists": {
+ "message": "過濾規則清單",
+ "description": "Link text to uBO's own filter lists repo"
+ },
+ "aboutDependencies": {
+ "message": "外部相依套件(與 GPLv3 相容):",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNs": {
+ "message": "uBO 自家的過濾規則清單由下列 <a href=\"https://wikipedia.org/wiki/Content_delivery_network\">CDN</a> 免費代管:",
+ "description": "Shown in the About pane"
+ },
+ "aboutCDNsInfo": {
+ "message": "當過濾清單需要更新時,將隨機選擇一組 CDN 連線下載",
+ "description": "Shown in the About pane"
+ },
+ "aboutBackupDataButton": {
+ "message": "備份至檔案…",
+ "description": "Text for button to create a backup of all settings"
+ },
+ "aboutBackupFilename": {
+ "message": "my-ublock-backup_{{datetime}}.txt",
+ "description": "English: my-ublock-backup_{{datetime}}.txt"
+ },
+ "aboutRestoreDataButton": {
+ "message": "從檔案還原…",
+ "description": "English: Restore from file..."
+ },
+ "aboutResetDataButton": {
+ "message": "重設為預設設定…",
+ "description": "English: Reset to default settings..."
+ },
+ "aboutRestoreDataConfirm": {
+ "message": "您所有的設定將會被 {{time}} 的備份資料覆蓋,並將重新啟動 uBlock₀。\n\n您確定要用備份資料蓋過目前的所有設定嗎?",
+ "description": "Message asking user to confirm restore"
+ },
+ "aboutRestoreDataError": {
+ "message": "無法讀取資料,或資料無效",
+ "description": "Message to display when an error occurred during restore"
+ },
+ "aboutResetDataConfirm": {
+ "message": "您所有的設定都將被移除,並將重新啟動 uBlock₀。\n\n您確定要將 uBlock₀ 回復為原廠設定?",
+ "description": "Message asking user to confirm reset"
+ },
+ "errorCantConnectTo": {
+ "message": "網路錯誤:{{msg}}",
+ "description": "English: Network error: {{msg}}"
+ },
+ "subscriberConfirm": {
+ "message": "確定要新增下列網址至自訂過濾規則清單?\n\n標題:「{{title}}」\n網址:{{url}}",
+ "description": "No longer used"
+ },
+ "subscribeButton": {
+ "message": "訂閱",
+ "description": "For the button used to subscribe to a filter list"
+ },
+ "elapsedOneMinuteAgo": {
+ "message": "1 分鐘前",
+ "description": "English: a minute ago"
+ },
+ "elapsedManyMinutesAgo": {
+ "message": "{{value}} 分鐘前",
+ "description": "English: {{value}} minutes ago"
+ },
+ "elapsedOneHourAgo": {
+ "message": "1 小時前",
+ "description": "English: an hour ago"
+ },
+ "elapsedManyHoursAgo": {
+ "message": "{{value}} 小時前",
+ "description": "English: {{value}} hours ago"
+ },
+ "elapsedOneDayAgo": {
+ "message": "1 天前",
+ "description": "English: a day ago"
+ },
+ "elapsedManyDaysAgo": {
+ "message": "{{value}} 天前",
+ "description": "English: {{value}} days ago"
+ },
+ "showDashboardButton": {
+ "message": "顯示控制台",
+ "description": "Firefox/Fennec-specific: Show Dashboard"
+ },
+ "showNetworkLogButton": {
+ "message": "顯示記錄器",
+ "description": "Firefox/Fennec-specific: Show Logger"
+ },
+ "fennecMenuItemBlockingOff": {
+ "message": "關閉",
+ "description": "Firefox-specific: appears as 'uBlock₀ (off)'"
+ },
+ "docblockedTitle": {
+ "message": "頁面已阻擋",
+ "description": "Used as a title for the document-blocked page"
+ },
+ "docblockedPrompt1": {
+ "message": "uBlock Origin 已防止下列頁面載入:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedPrompt2": {
+ "message": "因為下列過濾規則:",
+ "description": "Used in the strict-blocking page"
+ },
+ "docblockedNoParamsPrompt": {
+ "message": "不帶參數",
+ "description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
+ },
+ "docblockedFoundIn": {
+ "message": "在下列清單找到:",
+ "description": "English: List of filter list names follows"
+ },
+ "docblockedBack": {
+ "message": "返回",
+ "description": "English: Go back"
+ },
+ "docblockedClose": {
+ "message": "關閉此視窗",
+ "description": "English: Close this window"
+ },
+ "docblockedDontWarn": {
+ "message": "不再針對此網站作出警告",
+ "description": "Label for checkbox in document-blocked page"
+ },
+ "docblockedProceed": {
+ "message": "停止針對 {{hostname}} 的嚴格封鎖",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "暫時",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "永久",
+ "description": "English: Permanently"
+ },
+ "docblockedDisable": {
+ "message": "繼續載入",
+ "description": "Button text to navigate to the blocked page"
+ },
+ "cloudPush": {
+ "message": "匯出至雲端儲存空間",
+ "description": "tooltip"
+ },
+ "cloudPull": {
+ "message": "從雲端儲存空間匯入",
+ "description": "tooltip"
+ },
+ "cloudPullAndMerge": {
+ "message": "自雲端匯入,並與目前設定合併",
+ "description": "tooltip"
+ },
+ "cloudNoData": {
+ "message": "…\n…",
+ "description": ""
+ },
+ "cloudDeviceNamePrompt": {
+ "message": "此裝置的名稱:",
+ "description": "used as a prompt for the user to provide a custom device name"
+ },
+ "advancedSettingsWarning": {
+ "message": "警告!修改進階設定時請自負風險。",
+ "description": "A warning to users at the top of 'Advanced settings' page"
+ },
+ "genericSubmit": {
+ "message": "送出",
+ "description": "for generic 'Submit' buttons"
+ },
+ "genericApplyChanges": {
+ "message": "套用變更",
+ "description": "for generic 'Apply changes' buttons"
+ },
+ "genericRevert": {
+ "message": "還原",
+ "description": "for generic 'Revert' buttons"
+ },
+ "genericBytes": {
+ "message": "位元組",
+ "description": ""
+ },
+ "contextMenuBlockElementInFrame": {
+ "message": "阻擋框架中的內容…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuSubscribeToList": {
+ "message": "訂閱過濾規則清單…",
+ "description": "An entry in the browser's contextual menu"
+ },
+ "contextMenuTemporarilyAllowLargeMediaElements": {
+ "message": "暫時允許大型媒體元素",
+ "description": "A context menu entry, present when large media elements have been blocked on the current site"
+ },
+ "contextMenuViewSource": {
+ "message": "檢視原始碼…",
+ "description": "A context menu entry, to view the source code of the target resource"
+ },
+ "shortcutCapturePlaceholder": {
+ "message": "輸入快捷鍵",
+ "description": "Placeholder string for input field used to capture a keyboard shortcut"
+ },
+ "genericMergeViewScrollLock": {
+ "message": "切換是否啟用同步捲動",
+ "description": "Tooltip for the button used to lock scrolling between the views in the 'My rules' pane"
+ },
+ "genericCopyToClipboard": {
+ "message": "複製到剪貼簿",
+ "description": "Label for buttons used to copy something to the clipboard"
+ },
+ "genericSelectAll": {
+ "message": "全選",
+ "description": "Label for buttons used to select all text in editor"
+ },
+ "toggleCosmeticFiltering": {
+ "message": "切換是否啟用元素隱藏過濾規則",
+ "description": "Label for keyboard shortcut used to toggle cosmetic filtering"
+ },
+ "relaxBlockingMode": {
+ "message": "放寬封鎖量模式",
+ "description": "Label for keyboard shortcut used to relax blocking mode"
+ },
+ "storageUsed": {
+ "message": "儲存空間用量:{{value}} {{unit}}",
+ "description": " In Setting pane, renders as (example): Storage used: 13.2 MB"
+ },
+ "KB": {
+ "message": "KB",
+ "description": "short for 'kilobytes'"
+ },
+ "MB": {
+ "message": "MB",
+ "description": "short for 'megabytes'"
+ },
+ "GB": {
+ "message": "GB",
+ "description": "short for 'gigabytes'"
+ },
+ "clickToLoad": {
+ "message": "點擊以載入",
+ "description": "Message used in frame placeholders"
+ },
+ "linterMainReport": {
+ "message": "錯誤:{{count}}",
+ "description": "Summary of number of errors as reported by the linter "
+ },
+ "unprocessedRequestTooltip": {
+ "message": "無法在瀏覽器啟動的時候正確過濾。請重新載入頁面來確保過濾正確。",
+ "description": "A warning which will appear in the popup panel if needed"
+ },
+ "dummy": {
+ "message": "此條目須為最後一個",
+ "description": "so we dont need to deal with comma for last entry"
+ }
+}
diff --git a/src/about.html b/src/about.html
new file mode 100644
index 0000000..fc98984
--- /dev/null
+++ b/src/about.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>uBlock — About</title>
+<link rel="stylesheet" type="text/css" href="css/themes/default.css">
+<link rel="stylesheet" type="text/css" href="css/common.css">
+<link rel="stylesheet" type="text/css" href="css/dashboard-common.css">
+<link rel="stylesheet" type="text/css" href="css/about.css">
+</head>
+
+<body>
+
+<div class="body">
+ <div id="aboutNameVer" class="li"></div>
+ <div class="liul">
+ <div class="li">Copyright &copy; Raymond Hill 2014-present</div>
+ </div>
+ <div class="li"><a href="https://github.com/gorhill/uBlock/wiki/Privacy-policy" data-i18n="aboutPrivacyPolicy"></a></div>
+ <div class="li"><a href="https://github.com/gorhill/uBlock/releases" data-i18n="aboutChangelog"></a></div>
+ <div class="li"><a href="https://github.com/gorhill/uBlock" data-i18n="aboutCode"></a></div>
+ <div class="li"><span data-i18n="aboutContributors"></span></div>
+ <div class="liul">
+ <div class="li"><a href="https://github.com/gorhill/uBlock/graphs/contributors" data-i18n="aboutSourceCode"></a></div>
+ <div class="li"><a href="https://crowdin.com/project/ublock" data-i18n="aboutTranslations"></a></div>
+ <div class="li"><a href="https://github.com/uBlockOrigin/uAssets/graphs/contributors" data-i18n="aboutFilterLists"></a></div>
+ </div>
+ <div class="li"><span data-i18n="aboutDependencies"></span></div>
+ <div class="liul">
+ <div class="li"><span><a href="https://codemirror.net/" target="_blank">CodeMirror</a> by <a href="https://github.com/marijnh">Marijn Haverbeke</a></span></div>
+ <div class="li"><span><a href="https://github.com/mathiasbynens/punycode.js" target="_blank">Punycode.js</a> by <a href="https://github.com/mathiasbynens">Mathias Bynens</a></span></div>
+ <div class="li"><span><a href="https://web.archive.org/web/20201013225635/https://github.com/chrismsimpson/Metropolis" target="_blank">Metropolis font family</a> by <a href="https://github.com/chrismsimpson">Chris Simpson</a></span></div>
+ <div class="li"><span><a href="https://github.com/rsms/inter" target="_blank">Inter font family</a> by <a href="https://github.com/rsms">Rasmus Andersson</a></span></div>
+ <div class="li"><span><a href="https://fontawesome.com/" target="_blank">FontAwesome font family</a> by <a href="https://github.com/davegandy">Dave Gandy</a></span></div>
+ <div class="li"><span><a href="https://github.com/Swatinem/diff" target="_blank">An implementation of Myers' diff algorithm</a> by <a href="https://github.com/Swatinem">Arpad Borsos</a></span></div>
+ <div class="li"><span><a href="https://github.com/foo123/RegexAnalyzer" target="_blank">Regular Expression Analyzer</a> by <a href="https://github.com/foo123">Nikos M.</a></span></div>
+ <div class="li"><span><a href="https://github.com/hsluv/hsluv" target="_blank">HSLuv - Human-friendly HSL</a> by <a href="https://github.com/boronine">Alexei Boronine</a></span></div>
+ <div class="li"><span><a href="https://searchfox.org/mozilla-central/rev/d317e93d9a59c9e4c06ada85fbff9f6a1ceaaad1/browser/extensions/webcompat/shims/google-ima.js" target="_blank">google-ima.js</a> by <a href="https://www.mozilla.org/">Mozilla</a></span></div>
+ <div class="li"><span><a href="https://github.com/csstree/csstree" target="_blank">CSSTree</a> by <a href="https://github.com/lahmatiy">Roman Dvornov</a></span></div>
+ <div class="li"><span><a href="https://github.com/beautify-web/js-beautify" target="_blank">js-beautify</a> by <a href="https://github.com/einars">Einar Lielmanis</a>, <a href="https://github.com/bitwiseman">Liam Newman</a>, et al.</span></div>
+ <div class="li"><span><a href="https://flagpedia.net/" target="_blank">Flags of the World</a> by <a href="https://www.davidkrmela.com/">David Krmela</a></span></div>
+ </div>
+ <div class="li"><span data-i18n="aboutCDNs"></span></div>
+ <div class="liul">
+ <div class="li"><span><a href="https://pages.cloudflare.com/" target="_blank">Cloudflare Pages</a>, <a href="https://pages.github.com/" target="_blank">GitHub Pages</a>, <a href="https://www.jsdelivr.com/" target="_blank">jsDelivr</a>, <a href="https://statically.io/" target="_blank">Statically</a></span>
+ </div>
+ <div class="li" data-i18n="aboutCDNsInfo"></div>
+ </div>
+</div>
+
+<script src="lib/hsluv/hsluv-0.1.0.min.js"></script>
+
+<script src="js/vapi.js"></script>
+<script src="js/vapi-common.js"></script>
+<script src="js/vapi-client.js"></script>
+<script src="js/theme.js" type="module"></script>
+<script src="js/i18n.js" type="module"></script>
+<script src="js/dashboard-common.js" type="module"></script>
+<script src="js/about.js" type="module"></script>
+
+</body>
+</html>
diff --git a/src/advanced-settings.html b/src/advanced-settings.html
new file mode 100644
index 0000000..22bee72
--- /dev/null
+++ b/src/advanced-settings.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title data-i18n="advancedSettingsPageName"></title>
+
+<link rel="stylesheet" href="lib/codemirror/lib/codemirror.css">
+
+<link rel="stylesheet" href="css/themes/default.css">
+<link rel="stylesheet" href="css/common.css">
+<link rel="stylesheet" href="css/fa-icons.css">
+<link rel="stylesheet" href="css/dashboard-common.css">
+<link rel="stylesheet" href="css/advanced-settings.css">
+<link rel="stylesheet" href="css/codemirror.css">
+<link rel="shortcut icon" type="image/png" href="img/icon_64.png">
+</head>
+
+<body>
+<div class="body">
+ <p><span data-i18n="advancedSettingsWarning"></span> <a class="fa-icon info important" href="https://github.com/gorhill/uBlock/wiki/Advanced-settings" target="_blank">info-circle</a>
+ <p>
+ <button id="advancedSettingsApply" class="preferred" type="button" disabled data-i18n="genericApplyChanges">_<span class="hover"></span></button>&ensp;
+</div>
+
+<div id="advancedSettings" class="codeMirrorContainer cm-theme-override"></div>
+
+<script src="lib/codemirror/lib/codemirror.js"></script>
+<script src="lib/codemirror/addon/selection/active-line.js"></script>
+<script src="lib/hsluv/hsluv-0.1.0.min.js"></script>
+
+<script src="js/fa-icons.js" type="module"></script>
+<script src="js/vapi.js"></script>
+<script src="js/vapi-common.js"></script>
+<script src="js/vapi-client.js"></script>
+<script src="js/theme.js" type="module"></script>
+<script src="js/i18n.js" type="module"></script>
+<script src="js/dashboard-common.js" type="module"></script>
+<script src="js/advanced-settings.js" type="module"></script>
+
+</body>
+</html>
diff --git a/src/asset-viewer.html b/src/asset-viewer.html
new file mode 100644
index 0000000..b30320f
--- /dev/null
+++ b/src/asset-viewer.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title data-i18n="assetViewerPageName"></title>
+<link rel="stylesheet" href="lib/codemirror/lib/codemirror.css">
+<link rel="stylesheet" href="lib/codemirror/addon/search/matchesonscrollbar.css">
+<link rel="stylesheet" href="css/themes/default.css">
+<link rel="stylesheet" href="css/common.css">
+<link rel="stylesheet" href="css/fa-icons.css">
+<link rel="stylesheet" href="css/codemirror.css">
+<link rel="stylesheet" href="css/asset-viewer.css">
+<link rel="shortcut icon" type="image/png" href="img/icon_64.png">
+</head>
+<body class="loading">
+
+<section id="subscribe" class="hide notice">
+ <span class="logo"><img data-i18n-title="extName" src="img/ublock.svg" alt="logo"></span>
+ <span id="subscribePrompt"><span></span><a></a></span>
+ <span class="fa-icon">spinner</span>
+ <button id="subscribeButton" type="button" data-i18n="subscribeButton">_<span class="hover"></span></button>
+</section>
+
+<div id="content" class="codeMirrorContainer codeMirrorBreakAll cm-theme-override"></div>
+
+<script src="lib/codemirror/lib/codemirror.js"></script>
+<script src="lib/codemirror/addon/display/panel.js"></script>
+<script src="lib/codemirror/addon/edit/matchbrackets.js"></script>
+<script src="lib/codemirror/addon/fold/foldcode.js"></script>
+<script src="lib/codemirror/addon/scroll/annotatescrollbar.js"></script>
+<script src="lib/codemirror/addon/search/searchcursor.js"></script>
+<script src="lib/codemirror/addon/selection/active-line.js"></script>
+<script src="lib/hsluv/hsluv-0.1.0.min.js"></script>
+
+<script src="js/vapi.js"></script>
+<script src="js/vapi-common.js"></script>
+<script src="js/vapi-client.js"></script>
+
+<script src="js/codemirror/search.js" type="module"></script>
+<script src="js/codemirror/search-thread.js"></script>
+
+<script src="js/fa-icons.js" type="module"></script>
+<script src="js/theme.js" type="module"></script>
+<script src="js/i18n.js" type="module"></script>
+<script src="js/dashboard-common.js" type="module"></script>
+<script src="js/asset-viewer.js" type="module"></script>
+
+</body>
+</html>
diff --git a/src/background.html b/src/background.html
new file mode 100644
index 0000000..63e27aa
--- /dev/null
+++ b/src/background.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>uBlock Origin Background Page</title>
+</head>
+<body>
+<script src="lib/lz4/lz4-block-codec-any.js"></script>
+<script src="js/vapi.js"></script>
+<script src="js/start.js" type="module"></script>
+</body>
+</html>
diff --git a/src/cloud-ui.html b/src/cloud-ui.html
new file mode 100644
index 0000000..366cf72
--- /dev/null
+++ b/src/cloud-ui.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title></title>
+</head>
+<body>
+<div id="cloudToolbar">
+ <div>
+ <button id="cloudPush" class="iconified notext" type="button" data-i18n-title="cloudPush"><span class="fa-icon">cloud-upload</span><span class="hover"></span></button>
+ <span id="cloudInfo" data-i18n="cloudNoData"></span>
+ <button id="cloudPull" class="iconified notext" type="button" data-i18n-title="cloudPull" disabled><span class="fa-icon">cloud-download</span><span class="hover"></span></button>
+ <button id="cloudPullAndMerge" class="iconified notext" type="button" data-i18n-title="cloudPullAndMerge" disabled><span class="fa-icon">cloud-download</span><span class="fa-icon">plus</span><span class="hover"></span></button>
+ </div>
+ <div id="cloudCog" class="fa-icon">cog</div>
+ <div id="cloudOptions">
+ <label data-i18n="cloudDeviceNamePrompt">_<input id="cloudDeviceName" type="text" value=""></label>&nbsp;<button id="cloudOptionsSubmit" type="button" data-i18n="genericSubmit">_<span class="hover"></span></button>
+ </div>
+</div>
+<div id="cloudError"></div>
+<div id="cloudCapacity"><div><div></div></div></div>
+</body>
+</html>
diff --git a/src/code-viewer.html b/src/code-viewer.html
new file mode 100644
index 0000000..4b699fe
--- /dev/null
+++ b/src/code-viewer.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>Code viewer</title>
+<link rel="stylesheet" href="lib/codemirror/lib/codemirror.css">
+<link rel="stylesheet" href="lib/codemirror/theme/night.css">
+<link rel="stylesheet" href="lib/codemirror/addon/search/matchesonscrollbar.css">
+<link rel="stylesheet" href="css/themes/default.css">
+<link rel="stylesheet" href="css/common.css">
+<link rel="stylesheet" href="css/fa-icons.css">
+<link rel="stylesheet" href="css/codemirror.css">
+<link rel="stylesheet" href="css/code-viewer.css">
+</head>
+<body class="loading">
+
+<div id="header">
+ <div id="currentURL">
+ <input type="url" value="" spellcheck="false" autofocus="false">
+ <span id="reloadURL" class="fa-icon">refresh</span>
+ <span id="removeURL" class="fa-icon">trash-o</span>
+ </div>
+ <div id="pastURLs"></div>
+</div>
+<div id="content" class="codeMirrorContainer codeMirrorBreakAll"></div>
+
+<script src="lib/codemirror/lib/codemirror.js"></script>
+<script src="lib/codemirror/addon/display/panel.js"></script>
+<script src="lib/codemirror/addon/edit/matchbrackets.js"></script>
+<script src="lib/codemirror/addon/scroll/annotatescrollbar.js"></script>
+<script src="lib/codemirror/addon/search/searchcursor.js"></script>
+<script src="lib/codemirror/addon/selection/active-line.js"></script>
+<script src="lib/codemirror/mode/javascript/javascript.js"></script>
+<script src="lib/codemirror/mode/css/css.js"></script>
+<script src="lib/codemirror/mode/xml/xml.js"></script>
+<script src="lib/codemirror/mode/htmlmixed/htmlmixed.js"></script>
+
+<script src="js/vapi.js"></script>
+<script src="js/vapi-common.js"></script>
+<script src="js/vapi-client.js"></script>
+
+<script src="js/codemirror/search.js" type="module"></script>
+<script src="js/codemirror/search-thread.js"></script>
+
+<script src="lib/js-beautify/beautifier.min.js"></script>
+<script src="js/fa-icons.js" type="module"></script>
+<script src="js/theme.js" type="module"></script>
+<script src="js/i18n.js" type="module"></script>
+<script src="js/dashboard-common.js" type="module"></script>
+<script src="js/code-viewer.js" type="module"></script>
+</body>
+</html>
diff --git a/src/css/1p-filters.css b/src/css/1p-filters.css
new file mode 100644
index 0000000..679e4b8
--- /dev/null
+++ b/src/css/1p-filters.css
@@ -0,0 +1,26 @@
+html {
+ height: 100vh;
+ overflow: hidden;
+ width: 100vw;
+ }
+body {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ justify-content: stretch;
+ overflow: hidden;
+ width: 100%;
+ }
+.body {
+ flex-shrink: 0;
+ }
+[data-i18n="1pTrustWarning"] {
+ font-weight: bold;
+ }
+.codeMirrorContainer {
+ flex-grow: 1;
+ }
+#userFilters {
+ text-align: left;
+ word-wrap: normal;
+ }
diff --git a/src/css/3p-filters.css b/src/css/3p-filters.css
new file mode 100644
index 0000000..014dd20
--- /dev/null
+++ b/src/css/3p-filters.css
@@ -0,0 +1,250 @@
+@keyframes spin {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+ }
+body {
+ margin-bottom: 6rem;
+ }
+#actions {
+ background-color: var(--surface-1);
+ padding: var(--default-gap-small) 0 var(--default-gap-xsmall) 0;
+ position: sticky;
+ top: 0;
+ z-index: 10;
+ }
+#buttonUpdate.active {
+ pointer-events: none;
+ }
+#buttonUpdate.active .fa-icon svg {
+ animation: spin 1s linear infinite;
+ transform-origin: 50%;
+ }
+
+body.updating #actions,
+body.working #actions {
+ cursor: progress;
+ }
+body.updating #actions button,
+body.working #actions button {
+ pointer-events: none;
+ }
+
+.listExpander {
+ font-size: 18px;
+ padding: 0;
+ }
+.listExpander:first-child {
+ justify-content: flex-start;
+ min-width: 20px;
+ }
+.listExpander:not(:first-child) {
+ color: var(--checkbox-checked-ink);
+ fill: var(--checkbox-checked-ink);
+ }
+.listExpander svg {
+ transform: rotate(90deg);
+ transform-origin: 50%;
+ }
+
+#lists .fa-icon:hover {
+ transform: scale(1.25);
+ }
+
+#lists .rootstats.expanded .listExpander svg {
+ transform: rotate(180deg);
+ }
+
+#lists .searchbar {
+ align-items: center;
+ column-gap: var(--default-gap-xxsmall);
+ display: inline-flex;
+ margin-block-start: calc(var(--font-size) * 0.75);
+ margin-inline-start: var(--checkbox-size);
+ position: relative;
+ }
+#lists .searchbar input {
+ padding-inline-start: var(--default-gap-large);
+ }
+#lists .searchbar .fa-icon {
+ color: var(--ink-4);
+ fill: var(--ink-4);
+ left: 4px;
+ position: absolute;
+ transform: none;
+ }
+#lists.searchMode > .listEntries .listEntries,
+#lists.searchMode > .listEntries .listEntry.searchMatch {
+ display: flex !important;
+ }
+#lists.searchMode > .listEntries .listEntry {
+ display: none;
+ }
+#lists.searchMode > .listEntries .listExpander {
+ visibility: hidden;
+ }
+
+#listsOfBlockedHostsPrompt {
+ cursor: pointer;
+ }
+
+#lists .listEntries {
+ display: flex;
+ flex-direction: column;
+ margin-inline-start: var(--checkbox-size);
+ }
+#lists > .listEntries {
+ margin-inline-start: 0;
+ }
+#lists .listEntry {
+ align-items: flex-start;
+ flex-direction: column;
+ margin-bottom: 0;
+ margin-inline-start: 0;
+ white-space: nowrap;
+ }
+#lists .listEntry[data-key="user"] {
+ margin-top: 0;
+ }
+#lists .listEntry > .detailbar {
+ column-gap: calc(var(--default-gap-xxsmall) + 2px);
+ display: inline-flex;
+ }
+#lists .listEntry[data-key="user"] > .detailbar {
+ display: none;
+ }
+#lists .listEntry[data-role="node"].expanded > .detailbar .listExpander svg {
+ transform: rotate(180deg);
+ }
+#lists .listEntry[data-parent="root"]:not(.expanded) > .listEntries > .listEntry:not(.checked):not(.isDefault):not(.stickied) {
+ display: none;
+ }
+#lists .listEntry:not([data-parent="root"]):not(.expanded) > .listEntries > .listEntry {
+ display: none;
+ }
+#lists .nodestats {
+ align-self: flex-end;
+ color: var(--info0-ink);
+ fill: var(--info0-ink);
+ cursor: default;
+ font-size: var(--font-size-smaller);
+}
+#lists .iconbar {
+ column-gap: var(--default-gap-xxsmall);
+ color: var(--info0-ink);
+ fill: var(--info0-ink);
+ display: inline-flex;
+ flex-direction: row;
+ font-size: 120%;
+ }
+#lists .iconbar a {
+ color: var(--info0-ink);
+ fill: var(--info0-ink);
+ }
+#lists .iconbar .fa-icon {
+ display: none;
+ }
+#lists .iconbar .content {
+ display: inline-flex;
+ }
+#lists .iconbar a.towiki {
+ display: inline-flex;
+ }
+#lists .listEntry > .detailbar .iconbar a.support {
+ display: inline-flex;
+ }
+#lists .listEntry > .detailbar .iconbar a.support[href="#"] {
+ display: none;
+ }
+#lists .iconbar .remove,
+#lists .iconbar .unsecure,
+#lists .iconbar .failed {
+ color: var(--info3-ink);
+ fill: var(--info3-ink);
+ cursor: pointer;
+ }
+#lists .listEntry.external > .detailbar .iconbar .remove {
+ display: inline-flex;
+ }
+#lists .listEntry > .detailbar .iconbar a.mustread {
+ color: var(--info1-ink);
+ fill: var(--info1-ink);
+ display: inline-flex;
+ }
+#lists .listEntry > .detailbar .iconbar a.mustread[href="#"] {
+ display: none;
+ }
+#lists .listEntry .leafstats {
+ align-items: flex-end;
+ color: var(--info0-ink);
+ fill: var(--info0-ink);
+ display: none;
+ font-size: var(--font-size-xsmall);
+ margin-inline-start: calc(var(--checkbox-size) + var(--checkbox-margin-end));
+}
+#lists .listEntry > .detailbar .leafstats {
+ margin-inline-start: 0;
+ }
+#lists .listEntry.checked > .leafstats,
+#lists .listEntry.checked > .detailbar .leafstats {
+ display: inline-flex;
+}
+#lists .iconbar .status {
+ cursor: default;
+ display: none;
+}
+#lists .listEntry.checked.unsecure > .detailbar .iconbar .unsecure {
+ display: inline-flex;
+ }
+#lists .listEntry.failed > .detailbar .iconbar .failed {
+ display: inline-flex;
+ }
+#lists .iconbar .cache {
+ cursor: pointer;
+ }
+#lists .listEntry.checked.cached:not(.obsolete) > .detailbar .iconbar .cache {
+ display: inline-flex;
+ }
+#lists .listEntry.cached.recent:not(.obsolete) > .detailbar .iconbar .cache {
+ color: var(--dashboard-happy-green);
+ fill: var(--dashboard-happy-green);
+ }
+#lists .iconbar .obsolete {
+ color: var(--info2-ink);
+ fill: var(--info2-ink);
+ }
+body:not(.updating) #lists .listEntry.checked.obsolete > .detailbar .iconbar .obsolete {
+ display: inline-flex;
+ }
+#lists .iconbar .updating {
+ transform-origin: 50%;
+ }
+body.updating #lists .listEntry.checked.obsolete > .detailbar .iconbar .updating {
+ animation: spin 1s steps(8) infinite;
+ display: inline-flex;
+ }
+
+#lists .listEntry.toRemove .checkbox {
+ visibility: hidden;
+ }
+#lists .listEntry.toRemove .listname {
+ text-decoration: line-through;
+ }
+
+#lists .listEntry[data-role="import"].expanded .listExpander svg {
+ transform: rotate(180deg);
+ }
+#lists .listEntry[data-role="import"].expanded textarea {
+ visibility: visible;
+ }
+#lists .listEntry[data-role="import"] textarea {
+ border: 1px solid #ccc;
+ box-sizing: border-box;
+ display: block;
+ font-size: smaller;
+ height: 6em;
+ margin: 0;
+ resize: vertical;
+ visibility: hidden;
+ white-space: pre;
+ width: 100%;
+ }
diff --git a/src/css/about.css b/src/css/about.css
new file mode 100644
index 0000000..8c3afcd
--- /dev/null
+++ b/src/css/about.css
@@ -0,0 +1,3 @@
+body {
+ margin-bottom: 6rem;
+ }
diff --git a/src/css/advanced-settings.css b/src/css/advanced-settings.css
new file mode 100644
index 0000000..c67e750
--- /dev/null
+++ b/src/css/advanced-settings.css
@@ -0,0 +1,26 @@
+html {
+ height: 100vh;
+ overflow: hidden;
+ width: 100vw;
+ }
+body {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ justify-content: stretch;
+ overflow: hidden;
+ width: 100%;
+ }
+.body {
+ flex-shrink: 0;
+ }
+.codeMirrorContainer {
+ flex-grow: 1;
+ }
+#advancedSettings {
+ border: var(--default-gap-xxsmall) solid var(--surface-2);
+ text-align: left;
+ }
+.CodeMirror-wrap pre {
+ word-break: break-all;
+ }
diff --git a/src/css/asset-viewer.css b/src/css/asset-viewer.css
new file mode 100644
index 0000000..8b6f1da
--- /dev/null
+++ b/src/css/asset-viewer.css
@@ -0,0 +1,79 @@
+/**
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+body {
+ border: 0;
+ display: flex;
+ flex-direction: column;
+ height: 100vh;
+ margin: 0;
+ overflow: hidden;
+ padding: 0;
+ width: 100vw;
+ }
+#subscribe {
+ display: flex;
+ flex-shrink: 0;
+ justify-content: space-between;
+ max-height: 6em;
+ padding-inline-end: 0.5em;
+ }
+#subscribe.hide {
+ display: none;
+ }
+.logo {
+ background-color: #fffa;
+ flex-shrink: 0;
+ width: 2em;
+ }
+#subscribePrompt {
+ display: inline-flex;
+ flex-direction: column;
+ padding: 0.5em;
+ }
+#subscribePrompt > span {
+ font-weight: bold;
+ }
+#subscribePrompt > a {
+ font-size: 14px;
+ word-break: break-all;
+ }
+#subscribe > button {
+ align-self: center;
+ }
+#subscribe > .fa-icon {
+ color: var(--accent-ink-1);
+ fill: var(--accent-ink-1);
+ font-size: 20px;
+ }
+body.loading #subscribe > button,
+body:not(.loading) #subscribe > .fa-icon {
+ display: none;
+ }
+@keyframes spin {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+ }
+body.loading #subscribe > .fa-icon > svg {
+ animation: spin 1s steps(8) infinite;
+ }
+#content {
+ flex-grow: 1;
+ }
diff --git a/src/css/click2load.css b/src/css/click2load.css
new file mode 100644
index 0000000..b6d3924
--- /dev/null
+++ b/src/css/click2load.css
@@ -0,0 +1,53 @@
+/**
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+body {
+ align-items: center;
+ border: 1px solid var(--ubo-red);
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ height: 100vh;
+ padding: 0 2px;
+ position: relative;
+ width: 100vw;
+ }
+
+.logo {
+ left: 0;
+ padding: 2px 1px;
+ position: absolute;
+ top: 0;
+ }
+
+#frameURL {
+ font-family: monospace;
+ font-size: 90%;
+ overflow-y: auto;
+ word-break: break-all;
+ }
+#frameURL > a {
+ font-size: 1rem;
+ }
+
+#clickToLoad {
+ cursor: default;
+ margin-bottom: 1em;
+ }
diff --git a/src/css/cloud-ui.css b/src/css/cloud-ui.css
new file mode 100644
index 0000000..1891a1d
--- /dev/null
+++ b/src/css/cloud-ui.css
@@ -0,0 +1,104 @@
+#cloudWidget {
+ background-color: var(--surface-2);
+ margin: 0.5em 0;
+ min-width: max-content;
+ position: relative;
+ }
+#cloudWidget.hide {
+ display: none;
+ }
+#cloudWidget div {
+ display: flex;
+ }
+#cloudToolbar {
+ align-items: flex-start;
+ flex-wrap: nowrap;
+ justify-content: space-between;
+ }
+#cloudToolbar > div:first-of-type {
+ margin: 0.5em;
+ }
+#cloudToolbar button {
+ padding: 0 0.25em;
+ position: relative;
+ }
+#cloudToolbar button .fa-icon {
+ font-size: 180%;
+ }
+#cloudToolbar button[disabled] {
+ visibility: hidden;
+ }
+#cloudToolbar button.error {
+ color: var(--info3-ink);
+ }
+#cloudPullAndMerge {
+ margin-left: 0.25em;
+ }
+#cloudPullAndMerge > span:nth-of-type(2) {
+ font-size: 90%;
+ position: absolute;
+ right: 0;
+ top: 0;
+ }
+#cloudInfo {
+ flex-shrink: 0;
+ font-size: 90%;
+ margin: 0 1em;
+ overflow: hidden;
+ padding: 0;
+ white-space: pre-line;
+ }
+#cloudCapacity {
+ background-color: var(--surface-3);
+ height: 4px;
+ }
+#cloudCapacity > div {
+ background-color: var(--cloud-total-used-surface);
+ }
+#cloudCapacity > div > div {
+ background-color: var(--cloud-used-surface);
+ }
+#cloudError {
+ color: var(--info3-ink);
+ flex-grow: 1;
+ flex-shrink: 2;
+ font-size: small;
+ margin: 0 0.5em 0.5em 0.5em;
+ }
+#cloudError:empty {
+ display: none;
+ }
+#cloudCog {
+ color: var(--ink-3);
+ fill: var(--ink-3);
+ cursor: pointer;
+ font-size: 110%;
+ justify-content: flex-end;
+ padding: 0.4em;
+ }
+#cloudCog:hover {
+ color: inherit;
+ fill: inherit;
+ }
+#cloudWidget #cloudOptions {
+ align-items: center;
+ background-color: var(--surface-1);
+ bottom: 2px;
+ display: none;
+ font-size: small;
+ padding: 0.5em;
+ position: absolute;
+ right: 2px;
+ text-align: center;
+ top: 2px;
+ z-index: 10;
+ }
+#cloudWidget #cloudOptions label {
+ display: inline-flex;
+ flex-direction: column;
+ align-items: flex-start;
+ }
+#cloudWidget #cloudOptions.show {
+ display: flex;
+ white-space: nowrap;
+ }
diff --git a/src/css/code-viewer.css b/src/css/code-viewer.css
new file mode 100644
index 0000000..774fa69
--- /dev/null
+++ b/src/css/code-viewer.css
@@ -0,0 +1,67 @@
+body {
+ border: 0;
+ display: flex;
+ flex-direction: column;
+ height: 100vh;
+ margin: 0;
+ overflow: hidden;
+ padding: 0;
+ width: 100vw;
+ }
+#header {
+ background-color: var(--cm-gutter-surface);
+ border-bottom: 1px solid var(--surface-1);
+ padding: var(--default-gap-xsmall);
+ position: relative;
+ z-index: 1000000;
+ }
+#header input[type="url"] {
+ box-sizing: border-box;
+ font-size: var(--font-size-smaller);
+ width: 100%;
+ }
+#header:focus-within #pastURLs {
+ display: flex;
+ }
+#currentURL {
+ display: flex;
+ gap: 0.5rem;
+ }
+#currentURL > .fa-icon {
+ padding: 0 0.5rem;
+ }
+#currentURL > .fa-icon:hover {
+ background-color: var(--surface-3);
+ }
+#pastURLs {
+ background-color: var(--surface-0);
+ border: 1px solid var(--border-1);
+ display: none;
+ flex-direction: column;
+ font-size: var(--font-size-smaller);
+ position: absolute;
+ }
+#pastURLs > span {
+ cursor: pointer;
+ overflow: hidden;
+ padding: 2px 4px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ width: 75vw;
+ }
+#pastURLs > span.selected {
+ font-weight: bold;
+ }
+#pastURLs > span:hover {
+ background-color: var(--surface-1);
+ }
+#content {
+ flex-grow: 1;
+ }
+
+.cm-href {
+ cursor: pointer;
+ }
+.cm-href:hover {
+ text-decoration: underline;
+ }
diff --git a/src/css/codemirror.css b/src/css/codemirror.css
new file mode 100644
index 0000000..2d15bf8
--- /dev/null
+++ b/src/css/codemirror.css
@@ -0,0 +1,327 @@
+.codeMirrorContainer {
+ line-height: 1.25;
+ overflow: hidden;
+ position: relative;
+ }
+.CodeMirror {
+ background-color: var(--surface-0);
+ box-sizing: border-box;
+ color: var(--ink-1);
+ flex-grow: 1;
+ font-size: var(--monospace-size);
+ height: 100%;
+ width: 100%;
+ }
+.CodeMirror-cursor {
+ border-color: var(--cm-cursor);
+ }
+.CodeMirror-selected {
+ background-color: var(--cm-selection-surface);
+ }
+.CodeMirror-focused .CodeMirror-selected {
+ background-color: var(--cm-selection-focused-surface);
+ }
+.CodeMirror-foldmarker {
+ color: var(--cm-foldmarker-ink);
+ cursor: pointer;
+ font-family: sans-serif;
+ font-weight: bold;
+ }
+.CodeMirror-foldgutter-folded::after {
+ content: '\25B6';
+ }
+.CodeMirror-foldgutter-open::after {
+ content: '\25BC';
+ }
+.CodeMirror-gutters {
+ background-color: var(--cm-gutter-surface);
+ border-color: var(--cm-gutter-border);
+ }
+.CodeMirror-line::selection,
+.CodeMirror-line > span::selection,
+.CodeMirror-line > span > span::selection {
+ background-color: var(--cm-selection-focused-surface);
+ }
+.CodeMirror-linenumber {
+ color: var(--cm-gutter-ink);
+ }
+.CodeMirror-lines {
+ padding-bottom: 6rem;
+ }
+.CodeMirror-matchingbracket {
+ color: unset;
+ }
+.CodeMirror-matchingbracket {
+ background-color: var(--cm-matchingbracket) !important;
+ color: inherit !important;
+ font-weight: bold;
+ }
+
+.CodeMirror-search-match {
+ background: none;
+ background-color: var(--cm-search-match-surface);
+ border: 0;
+ opacity: 1;
+ }
+
+/* For when panels are used */
+.codeMirrorContainer > div:not([class^="CodeMirror"]) {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ }
+
+.codeMirrorContainer.codeMirrorBreakAll .CodeMirror-wrap pre {
+ word-break: break-all;
+ }
+
+.cm-theme-override .cm-s-default .cm-comment {
+ color: var(--sf-comment-ink);
+ }
+.cm-theme-override .cm-s-default .cm-def {
+ color: var(--sf-def-ink);
+ }
+.cm-theme-override .cm-s-default .cm-directive {
+ color: var(--sf-directive-ink);
+ font-weight: bold;
+ }
+.cm-theme-override .cm-s-default .cm-error {
+ color: inherit;
+ }
+.cm-theme-override .cm-s-default .cm-error,
+.CodeMirror-linebackground.error {
+ background-color: var(--sf-error-surface);
+ text-decoration: var(--sf-error-ink) dashed underline;
+ }
+.cm-theme-override .cm-s-default .cm-link {
+ text-decoration: none;
+ }
+.cm-theme-override .cm-s-default .cm-link:hover {
+ color: var(--link-ink);
+ }
+.cm-theme-override .cm-s-default .cm-keyword {
+ color: var(--sf-keyword-ink);
+ }
+.cm-theme-override .cm-s-default .cm-negative {
+ color: var(--cm-negative);
+ }
+.cm-theme-override .cm-s-default .cm-positive {
+ color: var(--cm-positive);
+ }
+.cm-theme-override .cm-s-default .cm-notice {
+ text-decoration-color: var(--sf-notice-ink);
+ text-decoration-style: solid;
+ text-decoration-line: underline;
+ }
+.cm-theme-override .cm-s-default .cm-unicode {
+ text-decoration-color: var(--sf-unicode-ink);
+ text-decoration-style: dashed;
+ text-decoration-line: underline;
+ }
+.cm-theme-override .cm-s-default .cm-tag {
+ color: var(--sf-tag-ink);
+ }
+.cm-theme-override .cm-s-default .cm-value {
+ color: var(--sf-value-ink);
+ }
+.cm-theme-override .cm-s-default .cm-variable {
+ color: var(--sf-variable-ink);
+ }
+.cm-theme-override .cm-s-default .cm-warning {
+ background-color: var(--sf-warning-surface);
+ text-decoration: underline var(--sf-warning-ink);
+ }
+.cm-theme-override .cm-s-default .cm-readonly {
+ color: var(--sf-readonly-ink);
+ }
+
+/* Rules */
+.cm-s-default .cm-allowrule {
+ color: var(--df-allow-ink);
+ font-weight: bold;
+ }
+.cm-s-default .cm-blockrule {
+ color: var(--df-block-ink);
+ font-weight: bold;
+ }
+.cm-s-default .cm-nooprule {
+ color: var(--df-noop-ink);
+ font-weight: bold;
+ }
+.cm-s-default .cm-sortkey {
+ color: var(--sf-keyword-ink);
+ }
+
+.cm-search-widget {
+ align-items: center;
+ background-color: var(--cm-gutter-surface);
+ border-bottom: 1px solid var(--cm-gutter-border);
+ cursor: default;
+ direction: ltr;
+ display: flex;
+ flex-shrink: 0;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ padding: var(--default-gap-xsmall);
+ row-gap: var(--default-gap-xsmall);
+ user-select: none;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ z-index: 1000;
+ }
+.cm-search-widget > * {
+ flex-grow: 1;
+ }
+.cm-search-widget > :last-child {
+ text-align: end;
+ }
+
+.cm-search-widget-input {
+ display: inline-flex;
+ flex-grow: 1;
+ }
+.cm-search-widget .fa-icon {
+ fill: var(--cm-gutter-ink);
+ font-size: 140%;
+ }
+.cm-search-widget .fa-icon:not(.fa-icon-ro):hover {
+ fill: var(--ink-1);
+ }
+.cm-search-widget-input input {
+ border: 1px solid var(--cm-gutter-ink);
+ display: inline-flex;
+ flex-grow: 1;
+ max-width: 16em;
+ }
+.cm-search-widget-count {
+ align-items: center;
+ display: inline-flex;
+ flex-grow: 0;
+ font-size: var(--font-size-smaller);
+ min-width: 6em;
+ visibility: hidden;
+ }
+.cm-search-widget[data-query] .cm-search-widget-count {
+ visibility: visible;
+ }
+.cm-search-widget[data-query] .cm-search-widget-count:empty {
+ visibility: hidden;
+ }
+.cm-search-widget .cm-search-widget-button:hover {
+ color: #000;
+ }
+.cm-search-widget .sourceURL[href=""] {
+ visibility: hidden;
+ }
+:root.mobile .cm-search-widget .sourceURL[href=""] {
+ display: none;
+ }
+
+.cm-linter-widget {
+ align-items: center;
+ display: none;
+ flex-grow: 1;
+ }
+.cm-linter-widget:not([data-lint="0"]) {
+ display: inline-flex;
+ }
+.cm-linter-widget .cm-linter-widget-count {
+ color: var(--accent-surface-1);
+ fill: var(--accent-surface-1);
+ font-size: var(--font-size-smaller);
+ }
+
+.cm-searching.cm-overlay {
+ background-color: var(--cm-searching-surface) !important;
+ border: 0;
+ color: var(--cm-searching-ink) !important;
+ }
+
+.CodeMirror-merge {
+ border-color: var(--cm-gutter-border);
+ }
+.CodeMirror-merge-copy,
+.CodeMirror-merge-copy-reverse {
+ color: var(--cm-merge-copy-ink);
+ }
+.CodeMirror-merge-l-chunk {
+ background-color: var(--cm-merge-chunk-surface);
+ }
+.CodeMirror-merge-l-chunk-start,
+.CodeMirror-merge-l-chunk-end {
+ border-color: var(--cm-merge-chunk-border);
+ }
+.CodeMirror-merge-l-deleted {
+ background-image: none;
+ }
+.CodeMirror-merge-l-inserted {
+ background-image: none;
+ }
+/* This probably needs to be added to CodeMirror repo */
+.CodeMirror-merge-gap {
+ background-color: var(--cm-gutter-surface);
+ border-color: var(--cm-gutter-border);
+ vertical-align: top;
+ }
+.CodeMirror-merge-scrolllock {
+ color: var(--cm-merge-copy-ink);
+ }
+.CodeMirror-merge-spacer {
+ background-color: var(--cm-merge-chunk-surface);
+ }
+
+.CodeMirror-hints {
+ z-index: 10000;
+ }
+
+/* Must appear after other background color declarations to be sure it
+ * overrides them
+ * */
+.CodeMirror-activeline-background {
+ background-color: var(--cm-active-line);
+ }
+
+.CodeMirror-lintmarker {
+ height: calc(var(--font-size) - 2px);
+ margin-top: 1px;
+ position: relative;
+ }
+.CodeMirror-lintmarker > * {
+ position: absolute;
+ }
+.CodeMirror-lintmarker[data-error="y"] {
+ background-color: var(--sf-error-ink);
+ }
+.CodeMirror-lintmarker .msg {
+ background-color: var(--surface-0);
+ border: 1px solid var(--sf-error-ink);
+ color: var(--ink-1);
+ display: none;
+ filter: drop-shadow(2px 2px 4px #0008);
+ left: 100%;
+ padding: var(--default-gap-xsmall);
+ top: -2px;
+ white-space: pre;
+ }
+.CodeMirror-lintmarker svg {
+ height: 70%;
+ left: 15%;
+ top: 15%;
+ width: 70%;
+ }
+.CodeMirror-lintmarker[data-error="y"] svg {
+ display: none;
+ }
+.CodeMirror-lintmarker[data-fold="start"] {
+ fill: var(--cm-foldmarker-ink);
+ }
+.CodeMirror-lintmarker[data-fold="start"].folded svg {
+ transform: rotate(-90deg);
+ }
+.CodeMirror-lintmarker[data-fold="end"] {
+ fill: var(--border-2);
+ }
+.CodeMirror-lintmarker[data-error="y"]:hover > span,
+.CodeMirror-lintmarker[data-error="y"] > span:hover {
+ display: initial;
+ }
diff --git a/src/css/common.css b/src/css/common.css
new file mode 100644
index 0000000..1a8ba0b
--- /dev/null
+++ b/src/css/common.css
@@ -0,0 +1,347 @@
+@charset "UTF-8";
+/* https://protocol.mozilla.org/assets/docs/css/protocol.css */
+@font-face {
+ font-family: Inter;
+ font-style: normal;
+ font-weight: normal;
+ src: url('fonts/Inter/Inter-Regular.woff2') format('woff2');
+}
+@font-face {
+ font-family: Inter;
+ font-style: normal;
+ font-weight: 600;
+ src: url('fonts/Inter/Inter-SemiBold.woff2') format('woff2');
+}
+@font-face {
+ font-family: Metropolis;
+ font-style: normal;
+ font-weight: normal;
+ src: url('fonts/Metropolis/Metropolis-Regular.woff2') format('woff2');
+}
+@font-face {
+ font-family: Metropolis;
+ font-style: normal;
+ font-weight: 600;
+ src: url('fonts/Metropolis/Metropolis-SemiBold.woff2') format('woff2');
+}
+
+/**
+ Common uBO spacing.
+ Ref: https://github.com/uBlockOrigin/uBlock-issues/issues/1005
+*/
+:root {
+ --default-gap-xxlarge: 40px;
+ --default-gap-xlarge: 32px;
+ --default-gap-large: 24px;
+ --default-gap: 16px;
+ --default-gap-small: 12px;
+ --default-gap-xsmall: 8px;
+ --default-gap-xxsmall: 4px;
+ }
+
+/* Common uBO styles */
+body {
+ background-color: var(--surface-1);
+ border: 0;
+ box-sizing: border-box;
+ color: var(--ink-1);
+ fill: var(--ink-1);
+ font-family: var(--font-family);
+ font-size: var(--font-size);
+ line-height: 1.5;
+ margin: 0;
+ padding: 0;
+ }
+a {
+ color: var(--link-ink);
+ fill: var(--link-ink);
+ }
+a:hover {
+ color: var(--link-hover-ink);
+ fill: var(--link-hover-ink);
+ }
+code, .code {
+ background-color: var(--surface-2);
+ font-family: monospace;
+ font-size: var(--monospace-size);
+ padding: 2px 4px;
+ }
+hr {
+ border: 0;
+ border-top: 1px solid var(--surface-2);
+ margin: 1em 0;
+ }
+textarea {
+ font-size: 90%;
+ }
+button {
+ align-items: center;
+ appearance: none;
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ border: 0;
+ border-radius: var(--button-border-radius);
+ background-color: var(--button-surface);
+ color: var(--button-ink);
+ display: inline-flex;
+ fill: var(--button-ink);
+ font-size: max(calc(var(--font-size) * 0.875), 14px);
+ justify-content: center;
+ min-height: 36px;
+ padding: 0 var(--font-size);
+ position: relative;
+ vertical-align: middle;
+ }
+button.vflex {
+ height: 100%;
+ min-height: unset;
+ padding-bottom: 0;
+ padding-top: 0;
+ }
+button > .hover {
+ background-color: var(--elevation-up-surface);
+ border-radius: var(--button-border-radius);
+ height: 100%;
+ left: 0;
+ opacity: 0;
+ pointer-events: none;
+ position: absolute;
+ top: 0;
+ width: 100%;
+ z-index: 100;
+ }
+button:not(.disabled):not([disabled]):hover > .hover {
+ opacity: var(--elevation-up1-opacity);
+ }
+button.notext:not(.disabled):not([disabled]):hover > .hover {
+ opacity: var(--elevation-up2-opacity);
+ }
+button.active {
+ }
+button.disabled,
+button[disabled] {
+ background-color: var(--button-disabled-surface);
+ color: var(--button-ink);
+ fill: var(--button-ink);
+ filter: var(--button-disabled-filter);
+ pointer-events: none;
+ }
+button.preferred:not(.disabled):not([disabled]) {
+ background-color: var(--button-preferred-surface);
+ color: var(--button-preferred-ink);
+ fill: var(--button-preferred-ink);
+ }
+button.preferred:not(.disabled):not([disabled]):hover > .hover {
+ background-color: var(--elevation-down-surface);
+ opacity: var(--elevation-down1-opacity);
+ }
+button.iconified.notext {
+ background-color: transparent;
+ }
+button.iconified > .fa-icon {
+ font-size: 120%;
+ padding-left: 0;
+ padding-right: 0;
+ }
+button.iconified > .fa-icon + [data-i18n] {
+ padding-right: 0;
+ padding-left: 0.4em;
+ }
+body[dir="rtl"] button.iconified > .fa-icon + [data-i18n] {
+ padding-right: 0.4em;
+ padding-left: 0;
+ }
+label {
+ align-items: center;
+ display: inline-flex;
+ position: relative;
+ }
+section.notice {
+ background-color: var(--notice-surface);
+ box-shadow: var(--notice-surface-shadow);
+ color: var(--notice-ink);
+ }
+:root:not(.classic) section.notice a {
+ color: var(--surface-2);
+ }
+
+/**
+ Checkbox design borrowed from:
+ - https://material.io/components/selection-controls
+ Motivation:
+ - To comply with design suggestions to make uBO comply with
+ Firefox Preview design guidelines.
+ - To have a single checkbox design across all platforms.
+*/
+.checkbox {
+ box-sizing: border-box;
+ display: inline-flex;
+ flex-shrink: 0;
+ height: var(--checkbox-size);
+ margin: 0;
+ margin-inline-end: var(--checkbox-margin-end);
+ -webkit-margin-end: var(--checkbox-margin-end);
+ position: relative;
+ width: var(--checkbox-size);
+ }
+label:hover .checkbox:not([disabled]) {
+ background-color: var(--surface-2);
+ }
+.checkbox > input[type="checkbox"] {
+ box-sizing: border-box;
+ height: 100%;
+ margin: 0;
+ min-width: var(--checkbox-size);
+ opacity: 0;
+ position: absolute;
+ width: 100%;
+ }
+.checkbox > input[type="checkbox"] + svg {
+ background-color: transparent;
+ border: 2px solid var(--checkbox-ink);
+ border-radius: 2px;
+ box-sizing: border-box;
+ fill: none;
+ height: 100%;
+ pointer-events: none;
+ position: absolute;
+ stroke: none;
+ stroke-width: 3.12px;
+ width: 100%;
+ }
+.checkbox > input[type="checkbox"]:checked + svg {
+ background-color: var(--checkbox-checked-ink);
+ border-color: var(--checkbox-checked-ink);
+ stroke: var(--surface-1);
+ }
+.checkbox[disabled],
+.checkbox[disabled] ~ span {
+ filter: var(--checkbox-disabled-filter);
+ }
+.checkbox.partial > input[type="checkbox"]:checked + svg {
+ background-color: var(--surface-1);
+ border-color: var(--checkbox-checked-ink);
+ stroke: var(--checkbox-checked-ink);
+ }
+
+.radio {
+ --margin-end: calc(var(--font-size) * 0.75);
+ box-sizing: border-box;
+ display: inline-flex;
+ flex-shrink: 0;
+ height: calc(var(--checkbox-size) + 2px);
+ margin: 0;
+ margin-inline-end: var(--margin-end);
+ -webkit-margin-end: var(--margin-end);
+ position: relative;
+ width: calc(var(--checkbox-size) + 2px);
+ }
+.radio > input[type="radio"] {
+ box-sizing: border-box;
+ height: 100%;
+ margin: 0;
+ min-width: var(--checkbox-size);
+ opacity: 0;
+ position: absolute;
+ width: 100%;
+ }
+.radio > input[type="radio"] + svg {
+ background-color: transparent;
+ box-sizing: border-box;
+ height: 100%;
+ pointer-events: none;
+ position: absolute;
+ width: 100%;
+ }
+.radio > input[type="radio"] + svg > path {
+ fill: var(--checkbox-ink);
+ }
+.radio > input[type="radio"] + svg > circle {
+ fill: transparent;
+ }
+label:hover .radio > input[type="radio"]:not(:checked) + svg > circle {
+ fill: var(--surface-3);
+ }
+.radio > input[type="radio"]:checked + svg > path,
+.radio > input[type="radio"]:checked + svg > circle {
+ fill: var(--checkbox-checked-ink);
+ }
+
+select {
+ padding: 2px;
+ }
+
+.hidden {
+ display: none;
+ height: 0;
+ visibility: hidden;
+ width: 0;
+ }
+.subtil {
+ color: var(--subtil-ink);
+ cursor: default;
+ opacity: 66%;
+ }
+.fieldset {
+ margin: var(--font-size);
+ }
+.fieldset-header {
+ color: var(--fieldset-header-ink);
+ font-size: 14px;
+ font-weight: 600;
+ letter-spacing: 0.5px;
+ }
+.ul {
+ margin: 1em 0;
+ }
+.li {
+ align-items: center;
+ display: flex;
+ margin: calc(var(--font-size) * 0.75) 0;
+ }
+.liul {
+ margin: 0.5em 0;
+ margin-inline-start: 2em;
+ -webkit-margin-start: 2em;
+ }
+@media (max-width: 640px) {
+ button.iconified > .fa-icon {
+ font-size: 1.2rem;
+ padding: 0;
+ }
+ button.iconified > [data-i18n] {
+ display: none;
+ }
+ }
+
+.countryFlag {
+ height: var(--font-size);
+ position: relative;
+ top: calc(var(--font-size) / 7);
+ max-width: calc(var(--font-size) * 1.5);
+ }
+
+.logo {
+ align-items: center;
+ display: inline-flex;
+ padding: 0 0.5em;
+ width: 1.25em;
+ }
+.logo > img {
+ width: 100%;
+ }
+
+/* high dpi devices */
+:root.hidpi button {
+ font-family: Metropolis, sans-serif;
+ font-weight: 600;
+ letter-spacing: 0.5px;
+ }
+:root.hidpi .fieldset-header {
+ font-family: Metropolis, sans-serif;
+ }
+
+/* touch-screen devices */
+:root.mobile label {
+ flex-grow: 1
+ }
diff --git a/src/css/dashboard-common.css b/src/css/dashboard-common.css
new file mode 100644
index 0000000..261aa9a
--- /dev/null
+++ b/src/css/dashboard-common.css
@@ -0,0 +1,55 @@
+body > div.body {
+ padding: 0 0.5em;
+ }
+h2, h3 {
+ margin: 1em 0;
+ }
+h2 {
+ font-size: 18px;
+ }
+h3 {
+ font-size: 16px;
+ }
+a {
+ text-decoration: none;
+ }
+.fa-icon.info {
+ color: var(--info0-ink);
+ fill: var(--info0-ink);
+ font-size: 115%;
+ }
+.fa-icon.info:hover {
+ transform: scale(1.25);
+ }
+.fa-icon.info.important {
+ color: var(--info2-ink);
+ fill: var(--info2-ink);
+ }
+.info.very-important {
+ color: var(--info3-ink);
+ fill: var(--info3-ink);
+ }
+input[type="number"] {
+ width: 5em;
+ }
+@media (max-height: 640px), (max-height: 800px) and (max-width: 480px) {
+ .body > p,
+ .body > ul {
+ margin: 0.5em 0;
+ }
+ .vverbose {
+ display: none !important;
+ }
+ }
+/**
+ On mobile device, the on-screen keyboard may take up
+ so much space that it overlaps the content being edited.
+ The rule below makes it possible to scroll the edited
+ content within view.
+*/
+:root.mobile {
+ overflow: auto;
+ }
+:root.mobile body {
+ min-height: 600px;
+ }
diff --git a/src/css/dashboard.css b/src/css/dashboard.css
new file mode 100644
index 0000000..ba02d97
--- /dev/null
+++ b/src/css/dashboard.css
@@ -0,0 +1,115 @@
+html, body {
+ display: flex;
+ flex-direction: column;
+ height: 100vh;
+ justify-content: stretch;
+ overflow: hidden;
+ position: relative;
+ width: 100vw;
+ }
+body.notReady {
+ display: none;
+ }
+#dashboard-nav {
+ border: 0;
+ border-bottom: 1px solid var(--border-1);
+ display: flex;
+ flex-shrink: 0;
+ flex-wrap: wrap;
+ overflow-x: hidden;
+ padding: 0;
+ position: sticky;
+ top: 0;
+ width: 100%;
+ z-index: 10;
+ }
+.tabButton {
+ background-color: transparent;
+ border: 0;
+ border-bottom: 3px solid transparent;
+ border-radius: 0;
+ color: var(--dashboard-tab-ink);
+ fill: var(--dashboard-tab-ink);
+ font-family: var(--font-family);
+ font-size: var(--font-size);
+ padding: 0.7em 1.4em calc(0.7em - 3px);
+ text-decoration: none;
+ white-space: nowrap;
+ }
+.tabButton:focus {
+ outline: 0;
+ }
+/*
+ * TODO: support keyboard-driven navigation
+ *
+.tabButton:not(:active):focus {
+ background-color: var(--dashboard-tab-focus-surface);
+ }
+ */
+.tabButton.selected {
+ background-color: var(--dashboard-tab-active-surface);
+ border-bottom: 3px solid var(--dashboard-tab-active-ink);
+ color: var(--dashboard-tab-active-ink);
+ fill: var(--dashboard-tab-active-ink);
+ }
+iframe {
+ background-color: transparent;
+ border: 0;
+ flex-grow: 1;
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ }
+#unsavedWarning {
+ display: none;
+ left: 0;
+ position: absolute;
+ width: 100%;
+ z-index: 20;
+ }
+#unsavedWarning.on {
+ display: initial;
+ }
+#unsavedWarning > div:first-of-type {
+ padding: 0.5em;
+ }
+#unsavedWarning > div:last-of-type {
+ height: 100vh;
+ position: absolute;
+ width: 100vw;
+ }
+
+body .tabButton[data-pane="no-dashboard.html"] {
+ display: none;
+ }
+body.noDashboard #dashboard-nav {
+ display: none;
+ }
+
+/* high dpi devices */
+:root.hidpi .tabButton {
+ font-family: Metropolis, sans-serif;
+ font-weight: 600;
+ letter-spacing: 0.5px;
+ }
+
+/* hover-able devices */
+:root.desktop .tabButton {
+ cursor: default;
+ }
+:root.desktop .tabButton:not(.selected) {
+ cursor: pointer;
+ }
+:root.desktop .tabButton:not(.selected):hover {
+ background-color: var(--dashboard-tab-hover-surface);
+ border-bottom-color: var(--dashboard-tab-hover-border);
+ }
+
+/* touch-screen devices */
+:root.mobile #dashboard-nav {
+ flex-wrap: nowrap;
+ overflow-x: auto;
+ }
+:root.mobile #dashboard-nav .logo {
+ display: none;
+ }
diff --git a/src/css/devtools.css b/src/css/devtools.css
new file mode 100644
index 0000000..425aac4
--- /dev/null
+++ b/src/css/devtools.css
@@ -0,0 +1,22 @@
+html {
+ height: 100vh;
+ overflow: hidden;
+ width: 100vw;
+ }
+body {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ justify-content: stretch;
+ overflow: hidden;
+ width: 100%;
+ }
+.body {
+ flex-shrink: 0;
+ }
+.codeMirrorContainer {
+ flex-grow: 1;
+ }
+#console {
+ text-align: left;
+ }
diff --git a/src/css/document-blocked.css b/src/css/document-blocked.css
new file mode 100644
index 0000000..25dd204
--- /dev/null
+++ b/src/css/document-blocked.css
@@ -0,0 +1,146 @@
+/**
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2018-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+body {
+ display: flex;
+ padding: var(--default-gap-xxlarge) var(--default-gap-small);
+ justify-content: center;
+ }
+:root.mobile body {
+ padding: var(--default-gap-small);
+ }
+
+#rootContainer {
+ width: min(100vw, 640px);
+ }
+#rootContainer > * {
+ margin: 0 0 var(--default-gap-xxlarge) 0;
+ }
+
+a {
+ text-decoration: none;
+ }
+.code {
+ font-size: 13px;
+ word-break: break-all;
+ }
+#warningSign {
+ width: 100%;
+ }
+#warningSign > a {
+ font-size: 96px;
+ }
+#theURL {
+ color: var(--ink-2);
+ padding: 0;
+ }
+#theURL > * {
+ margin: 0;
+ }
+#theURL > p {
+ position: relative;
+ z-index: 10;
+ }
+#theURL #toggleParse {
+ background-color: transparent;
+ top: 100%;
+ box-sizing: border-box;
+ color: var(--ink-3);
+ fill: var(--ink-3);
+ cursor: pointer;
+ font-size: 1.2rem;
+ padding: var(--default-gap-xxsmall);
+ position: absolute;
+ transform: translate(0, -50%);
+ }
+#theURL:not(.collapsed) #toggleParse > span:first-of-type {
+ display: none;
+ }
+#theURL.collapsed #toggleParse > span:last-of-type {
+ display: none;
+ }
+body[dir="ltr"] #toggleParse {
+ right: 0;
+ }
+body[dir="rtl"] #toggleParse {
+ left: 0;
+ }
+#theURL > p:hover #toggleParse {
+ transform: translate(0, -50%) scale(1.15);
+ }
+#parsed {
+ background-color: var(--surface-1);
+ border: 4px solid var(--surface-2);
+ font-size: small;
+ overflow-x: auto;
+ padding: var(--default-gap-xxsmall);
+ text-align: initial;
+ text-overflow: ellipsis;
+ }
+#theURL.collapsed > #parsed {
+ display: none;
+ }
+#parsed ul, #parsed li {
+ list-style-type: none;
+ }
+#parsed li {
+ white-space: nowrap;
+ }
+#parsed span {
+ display: inline-block;
+ }
+#parsed span:first-of-type {
+ font-weight: bold;
+ }
+
+#whyex a {
+ white-space: nowrap;
+}
+#whyex ul {
+ display: flex;
+ flex-direction: column;
+ margin: 0;
+ padding-inline-start: var(--default-gap-xsmall);
+ }
+
+#actionContainer {
+ display: flex;
+ justify-content: space-between;
+ }
+:root.mobile #actionContainer {
+ justify-content: center;
+ display: flex;
+ flex-direction: column;
+ }
+#actionContainer > button {
+ margin-bottom: 2rem
+ }
+
+.filterList {
+ display: flex;
+}
+.filterList .filterListSupport[href=""] {
+ display: none;
+ }
+
+/* Small-screen devices */
+:root.mobile button {
+ width: 100%;
+ }
diff --git a/src/css/dom-inspector.css b/src/css/dom-inspector.css
new file mode 100644
index 0000000..71ba348
--- /dev/null
+++ b/src/css/dom-inspector.css
@@ -0,0 +1,40 @@
+html#ublock0-inspector,
+#ublock0-inspector body {
+ background: transparent;
+ box-sizing: border-box;
+ height: 100vh;
+ margin: 0;
+ overflow: hidden;
+ width: 100vw;
+}
+#ublock0-inspector :focus {
+ outline: none;
+}
+#ublock0-inspector svg {
+ box-sizing: border-box;
+ height: 100%;
+ left: 0;
+ pointer-events: none;
+ position: fixed;
+ top: 0;
+ width: 100%;
+}
+#ublock0-inspector svg > path {
+ stroke-width: 1px;
+ }
+#ublock0-inspector svg > path:nth-of-type(1) {
+ fill: rgba(255,0,0,0.2);
+ stroke: #F00;
+}
+#ublock0-inspector svg > path:nth-of-type(2) {
+ fill: rgba(0,255,0,0.2);
+ stroke: #0F0;
+}
+#ublock0-inspector svg > path:nth-of-type(3) {
+ fill: rgba(255,0,0,0.2);
+ stroke: #F00;
+}
+#ublock0-inspector svg > path:nth-of-type(4) {
+ fill: rgba(0,0,255,0.1);
+ stroke: #00F;
+}
diff --git a/src/css/dyna-rules.css b/src/css/dyna-rules.css
new file mode 100644
index 0000000..35e0f8c
--- /dev/null
+++ b/src/css/dyna-rules.css
@@ -0,0 +1,79 @@
+html {
+ height: 100vh;
+ overflow: hidden;
+ width: 100vw;
+ }
+body {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ justify-content: stretch;
+ overflow: hidden;
+ width: 100%;
+ }
+.body {
+ flex-shrink: 0;
+ }
+#diff {
+ border: 0;
+ white-space: nowrap;
+}
+#diff .tools > * {
+ margin-bottom: 1em;
+ }
+#diff .ruleActions {
+ border: 0;
+ box-sizing: border-box;
+ display: inline-block;
+ padding: 0;
+ text-align: center;
+ vertical-align: top;
+ width: 50%;
+ white-space: nowrap;
+ }
+#diff .ruleActions .fieldset-header {
+ margin: 0.5em 0;
+ }
+
+#ruleFilter {
+ align-items: center;
+ background-color: var(--surface-2);
+ direction: ltr;
+ display: flex;
+ justify-content: center;
+ padding: 0.5em 0;
+ }
+#ruleFilter #diffCollapse {
+ padding: 0 0.5em;
+ font-size: 150%;
+ }
+#ruleFilter #diffCollapse.active {
+ transform: scale(1, -1);
+ }
+
+.codeMirrorContainer {
+ flex-grow: 1;
+ }
+.codeMirrorContainer .CodeMirror {
+ background-color: var(--surface-1);
+ }
+.CodeMirror-merge, .CodeMirror-merge-pane, .CodeMirror-merge .CodeMirror {
+ box-sizing: border-box;
+ height: 100%;
+ }
+body.editing .CodeMirror-merge-copy,
+body.editing .CodeMirror-merge-copy-reverse {
+ display: none;
+ }
+body.editing .CodeMirror-merge-editor .CodeMirror {
+ background-color: var(--surface-0);
+ }
+body[dir="rtl"] .CodeMirror-merge-pane-rightmost {
+ right: unset;
+ left: 0;
+}
+
+/* mobile devices */
+:root.mobile #diff .tools {
+ overflow: auto;
+ }
diff --git a/src/css/epicker-ui.css b/src/css/epicker-ui.css
new file mode 100644
index 0000000..d09e1ef
--- /dev/null
+++ b/src/css/epicker-ui.css
@@ -0,0 +1,270 @@
+html#ublock0-epicker,
+#ublock0-epicker body {
+ background: transparent;
+ cursor: not-allowed;
+ height: 100vh;
+ margin: 0;
+ overflow: hidden;
+ width: 100vw;
+}
+#ublock0-epicker :focus {
+ outline: none;
+}
+#ublock0-epicker aside {
+ background-color: var(--surface-1);
+ border: 1px solid var(--border-2);
+ bottom: 2px;
+ box-sizing: border-box;
+ cursor: default;
+ display: none;
+ max-height: calc(100vh - 4px);
+ max-width: 36rem;
+ min-width: 24rem;
+ overflow-y: auto;
+ padding: 4px;
+ position: fixed;
+ right: 2px;
+ width: calc(40% - 2px);
+}
+/* https://github.com/uBlockOrigin/uBlock-issues/discussions/2114 */
+#ublock0-epicker aside {
+ min-width: min(24rem, 100vw - 4px);
+}
+#ublock0-epicker.paused:not(.zap) aside {
+ display: block;
+}
+#ublock0-epicker #toolbar {
+ display: flex;
+}
+#ublock0-epicker ul {
+ margin: 0.25em 0 0 0;
+}
+#ublock0-epicker.preview #preview {
+ background-color: var(--button-preferred-surface);
+ color: var(--button-preferred-ink);
+}
+#ublock0-epicker #move {
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAYAAACtBE5DAAAAFElEQVQI12NgwAfKy8v/M5ANYLoBshgEyQo6H9UAAAAASUVORK5CYII=');
+ cursor: grab;
+ flex-grow: 1;
+ margin: 2px 4px;
+ opacity: 0.8;
+ }
+#ublock0-epicker aside.moving #move {
+ cursor: grabbing;
+}
+#ublock0-epicker section {
+ border: 0;
+ box-sizing: border-box;
+ display: inline-block;
+ width: 100%;
+}
+#ublock0-epicker section > div:first-child {
+ border: 1px solid var(--surface-3);
+ margin: 0;
+ position: relative;
+}
+#ublock0-epicker section.invalidFilter > div:first-child {
+ border-color: var(--error-surface);
+}
+#ublock0-epicker section .codeMirrorContainer {
+ border: none;
+ box-sizing: border-box;
+ height: 8em;
+ max-height: 50vh;
+ min-height: 1em;
+ padding: 2px;
+ width: 100%;
+ }
+.CodeMirror-lines,
+.CodeMirror pre {
+ padding: 0;
+ }
+
+#ublock0-epicker section .resultsetWidgets {
+ display: flex;
+ font-size: var(--font-size-smaller);
+ }
+#resultsetModifiers {
+ align-items: flex-end;
+ display: inline-flex;
+ flex-grow: 1;
+ justify-content: space-evenly;
+ }
+#resultsetModifiers.hide > * {
+ visibility: hidden;
+ }
+.resultsetModifier {
+ border: 0;
+ pointer-events: auto;
+ position: relative;
+ width: 40%;
+ }
+.resultsetModifier > span {
+ align-items: flex-end;
+ display: flex;
+ height: 100%;
+ pointer-events: none;
+ width: 100%;
+ }
+.resultsetModifier > span > span {
+ margin: 2px 0;
+ }
+.resultsetModifier > span > span:nth-of-type(1) {
+ background-color: var(--checkbox-checked-ink);
+ border-inline-end: 1px solid var(--surface-3);
+ display: inline-block;
+ flex-shrink: 0;
+ height: 6px;
+ }
+.resultsetModifier > span > span:nth-of-type(2) {
+ background-color: var(--checkbox-checked-ink);
+ clip-path: polygon(
+ calc(50% - 2px) 0%,
+ 0% calc(100% - 6px),
+ 0% 100%,
+ 100% 100%,
+ 100% calc(100% - 6px),
+ calc(50% + 2px) 0%
+ );
+ display: inline-block;
+ flex-shrink: 0;
+ height: 16px;
+ width: 16px;
+ }
+.resultsetModifier > span > span:nth-of-type(3) {
+ background-color: var(--surface-3);
+ border-inline-start: 1px solid var(--surface-3);
+ display: inline-block;
+ flex-grow: 1;
+ height: 6px;
+ }
+.resultsetModifier input {
+ border: 0;
+ height: 100%;
+ left: 0;
+ margin: 0;
+ opacity: 0;
+ padding: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+ }
+#resultsetCount {
+ align-items: center;
+ background-color: var(--surface-3);
+ color: var(--ink-1);
+ display: inline-flex;
+ justify-content: center;
+ min-width: 2.2em;
+ }
+#ublock0-epicker section.invalidFilter #resultsetCount {
+ background-color: var(--error-surface);
+ color: var(--ink-100);
+}
+#ublock0-epicker section > div:first-child + div {
+ direction: ltr;
+ margin: 2px 0;
+ text-align: right;
+}
+#ublock0-epicker ul {
+ padding: 0;
+ list-style-type: none;
+ text-align: left;
+ overflow: hidden;
+}
+#ublock0-epicker #candidateFilters {
+ max-height: 14em;
+ overflow-y: auto;
+}
+#ublock0-epicker #candidateFilters > li:first-of-type {
+ margin-bottom: 0.5em;
+}
+#ublock0-epicker .changeFilter > li > span:nth-of-type(1) {
+ font-weight: bold;
+}
+#ublock0-epicker .changeFilter > li > span:nth-of-type(2) {
+ font-size: smaller;
+ color: gray;
+}
+#ublock0-epicker #candidateFilters .changeFilter {
+ list-style-type: none;
+ margin: 0 0 0 1em;
+ overflow: hidden;
+ text-align: left;
+}
+#ublock0-epicker #candidateFilters .changeFilter li {
+ border: 1px solid transparent;
+ cursor: pointer;
+ direction: ltr;
+ font: 12px monospace;
+ white-space: nowrap;
+}
+#ublock0-epicker #candidateFilters .changeFilter li.active {
+ border: 1px dotted rgb(var(--blue-50));
+ }
+#ublock0-epicker #candidateFilters .changeFilter li:hover {
+ background-color: var(--surface-2);
+}
+
+/**
+ https://github.com/gorhill/uBlock/issues/3449
+ https://github.com/uBlockOrigin/uBlock-issues/issues/55
+**/
+@keyframes startDialog {
+ 0% { opacity: 1.0; }
+ 60% { opacity: 1.0; }
+ 100% { opacity: 0.1; }
+}
+#ublock0-epicker.paused aside {
+ opacity: 0.1;
+ visibility: visible;
+ z-index: 100;
+}
+#ublock0-epicker.paused:not(.show):not(.hide) aside:not(:hover) {
+ animation-duration: 1.6s;
+ animation-name: startDialog;
+ animation-timing-function: linear;
+}
+#ublock0-epicker.paused aside:hover {
+ opacity: 1;
+}
+#ublock0-epicker.paused.show aside {
+ opacity: 1;
+}
+#ublock0-epicker.paused.hide aside {
+ opacity: 0.1;
+}
+
+#ublock0-epicker svg {
+ cursor: crosshair;
+ box-sizing: border-box;
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+#ublock0-epicker.paused svg {
+ cursor: not-allowed;
+}
+#ublock0-epicker svg > path:first-child {
+ fill: rgba(0,0,0,0.5);
+ fill-rule: evenodd;
+}
+#ublock0-epicker svg > path + path {
+ stroke: #F00;
+ stroke-width: 0.5px;
+ fill: rgba(255,63,63,0.20);
+}
+#ublock0-epicker.zap svg > path + path {
+ stroke: #FF0;
+ stroke-width: 0.5px;
+ fill: rgba(255,255,63,0.20);
+}
+#ublock0-epicker.preview svg > path {
+ fill: rgba(0,0,0,0.10);
+}
+#ublock0-epicker.preview svg > path + path {
+ stroke: none;
+}
diff --git a/src/css/fa-icons.css b/src/css/fa-icons.css
new file mode 100644
index 0000000..f6d517d
--- /dev/null
+++ b/src/css/fa-icons.css
@@ -0,0 +1,149 @@
+.fa-icon {
+ align-items: center;
+ background-color: transparent;
+ border: 0;
+ display: inline-flex;
+ justify-content: center;
+ margin: 0;
+ padding: 0 0.1em;
+ position: relative;
+ user-select: none;
+ vertical-align: text-bottom;
+ -webkit-user-select: none;
+ }
+.fa-icon > * {
+ pointer-events: none;
+ }
+/*
+.fa-icon.disabled,
+.fa-icon[disabled] {
+ color: var(--button-disabled-ink);
+ fill: var(--button-disabled-ink);
+ filter: var(--button-disabled-filter);
+ stroke: var(--button-disabled-ink);
+ pointer-events: none;
+ }
+*/
+.fa-icon > .fa-icon-badge,
+.fa-icon.disabled > .fa-icon-badge {
+ visibility: hidden;
+ }
+.fa-icon.fa-icon-badged > .fa-icon-badge {
+ bottom: -20%;
+ display: inline-block;
+ font: 60% sans-serif;
+ left: calc(100% - 0.2em);
+ position: absolute;
+ visibility: visible;
+ }
+.fa-icon.fa-icon-hflipped > svg {
+ transform: scale(-1, 1);
+ transform-origin: 50%;
+ }
+.fa-icon.fa-icon-vflipped > svg {
+ transform: scale(1, -1);
+ transform-origin: 50%;
+ }
+.fa-icon.fa-icon-rotright > svg {
+ transform: rotate(90deg);
+ transform-origin: 50%;
+ }
+.fa-icon.fa-icon-rotleft > svg {
+ transform: rotate(-90deg);
+ transform-origin: 50%;
+ }
+
+.fa-icon > svg {
+ height: 1em;
+ overflow: visible;
+ width: 1em;
+ }
+
+.fa-icon > .fa-icon_bar-chart {
+ width: calc(1em * 2048 / 1792);
+ }
+.fa-icon > .fa-icon_cloud-download,
+.fa-icon > .fa-icon_cloud-upload,
+.fa-icon > .fa-icon_cogs,
+.fa-icon > .fa-icon_eraser,
+.fa-icon > .fa-icon_film {
+ width: calc(1em * 1920 / 1792);
+ }
+.fa-icon > .fa-icon_code {
+ width: calc(1em * 1830 / 1792);
+ }
+.fa-icon > .fa-icon_exclamation-triangle {
+ width: calc(1em * 1794 / 1792);
+ }
+.fa-icon > .fa-icon_clipboard,
+.fa-icon > .fa-icon_comment-alt,
+.fa-icon > .fa-icon_external-link,
+.fa-icon > .fa-icon_eye-dropper,
+.fa-icon > .fa-icon_eye-open,
+.fa-icon > .fa-icon_eye-slash,
+.fa-icon > .fa-icon_files-o,
+.fa-icon > .fa-icon_list-alt {
+ width: calc(1em * 1792 / 1792);
+ }
+.fa-icon > .fa-icon_sun,
+.fa-icon > .fa-icon_sun-o {
+ width: calc(1em * 1708 / 1792);
+ }
+.fa-icon > .fa-icon_download-alt,
+.fa-icon > .fa-icon_font,
+.fa-icon > .fa-icon_search,
+.fa-icon > .fa-icon_spinner,
+.fa-icon > .fa-icon_unlink,
+.fa-icon > .fa-icon_upload-alt,
+.fa-icon > .fa-icon_zoom-in,
+.fa-icon > .fa-icon_zoom-out {
+ width: calc(1em * 1664 / 1792);
+ }
+.fa-icon > .fa-icon_magic {
+ width: calc(1em * 1637 / 1792);
+ }
+.fa-icon > .fa-icon_home {
+ width: calc(1em * 1612 / 1792);
+ }
+.fa-icon > .fa-icon_check {
+ width: calc(1em * 1550 / 1792);
+ }
+.fa-icon > .fa-icon_cog,
+.fa-icon > .fa-icon_clock-o,
+.fa-icon > .fa-icon_floppy-o,
+.fa-icon > .fa-icon_info-circle,
+.fa-icon > .fa-icon_pause-circle-o,
+.fa-icon > .fa-icon_play-circle-o,
+.fa-icon > .fa-icon_power-off,
+.fa-icon > .fa-icon_question-circle,
+.fa-icon > .fa-icon_refresh,
+.fa-icon > .fa-icon_save,
+.fa-icon > .fa-icon_sliders,
+.fa-icon > .fa-icon_undo {
+ width: calc(1em * 1536 / 1792);
+ }
+.fa-icon > .fa-icon_arrow-right {
+ width: calc(1em * 1472 / 1792);
+ }
+.fa-icon > .fa-icon_filter {
+ width: calc(1em * 1410 / 1792);
+ }
+.fa-icon > .fa-icon_plus,
+.fa-icon > .fa-icon_trash-o {
+ width: calc(1em * 1408 / 1792);
+ }
+.fa-icon > .fa-icon_times {
+ width: calc(1em * 1188 / 1792);
+ }
+.fa-icon > .fa-icon_angle-up,
+.fa-icon > .fa-icon_double-angle-up,
+.fa-icon > .fa-icon_lock,
+.fa-icon > .fa-icon_unlock-alt {
+ width: calc(1em * 1152 / 1792);
+ }
+.fa-icon > .fa-icon_double-angle-left {
+ width: calc(1em * 966 / 1792);
+ }
+.fa-icon > .fa-icon_bolt {
+ width: calc(1em * 896 / 1792);
+ }
diff --git a/src/css/fonts/Inter/Inter-Regular.woff2 b/src/css/fonts/Inter/Inter-Regular.woff2
new file mode 100644
index 0000000..d5ffd2a
--- /dev/null
+++ b/src/css/fonts/Inter/Inter-Regular.woff2
Binary files differ
diff --git a/src/css/fonts/Inter/Inter-SemiBold.woff2 b/src/css/fonts/Inter/Inter-SemiBold.woff2
new file mode 100644
index 0000000..df746af
--- /dev/null
+++ b/src/css/fonts/Inter/Inter-SemiBold.woff2
Binary files differ
diff --git a/src/css/fonts/Inter/LICENSE.txt b/src/css/fonts/Inter/LICENSE.txt
new file mode 100644
index 0000000..d688280
--- /dev/null
+++ b/src/css/fonts/Inter/LICENSE.txt
@@ -0,0 +1,93 @@
+Copyright (c) 2016-2020 The Inter Project Authors
+https://github.com/rsms/inter
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION AND CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/src/css/fonts/Metropolis/Metropolis-Regular.woff2 b/src/css/fonts/Metropolis/Metropolis-Regular.woff2
new file mode 100644
index 0000000..f50bf34
--- /dev/null
+++ b/src/css/fonts/Metropolis/Metropolis-Regular.woff2
Binary files differ
diff --git a/src/css/fonts/Metropolis/Metropolis-SemiBold.woff2 b/src/css/fonts/Metropolis/Metropolis-SemiBold.woff2
new file mode 100644
index 0000000..fad6dfd
--- /dev/null
+++ b/src/css/fonts/Metropolis/Metropolis-SemiBold.woff2
Binary files differ
diff --git a/src/css/fonts/Metropolis/README.md b/src/css/fonts/Metropolis/README.md
new file mode 100644
index 0000000..ce01464
--- /dev/null
+++ b/src/css/fonts/Metropolis/README.md
@@ -0,0 +1,25 @@
+# Metropolis
+
+A modern, geometric typeface. Influenced by other popular geometric, minimalist sans-serif typefaces of the new millennium. Designed for optimal readability at small point sizes while beautiful at large point sizes.
+
+![Metropolis](./Specimens/Metro-1.png)
+
+---
+
+![Metropolis](./Specimens/Metro-2.png)
+
+### Where am I?
+
+See [Documentation](./Documentation/Documentation.md).
+
+### The Unlicense
+
+Contributions welcome.
+
+### Contact
+
+Reachable via chris.m.simpson [at] icloud.com or tweet @ChrisMSimpson.
+
+### Support
+
+There is none. Oh, you meant support me? I dare you to click the sponsor button above.
diff --git a/src/css/fonts/Metropolis/UNLICENSE b/src/css/fonts/Metropolis/UNLICENSE
new file mode 100644
index 0000000..68a49da
--- /dev/null
+++ b/src/css/fonts/Metropolis/UNLICENSE
@@ -0,0 +1,24 @@
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to <http://unlicense.org/>
diff --git a/src/css/logger-ui-inspector.css b/src/css/logger-ui-inspector.css
new file mode 100644
index 0000000..975d90b
--- /dev/null
+++ b/src/css/logger-ui-inspector.css
@@ -0,0 +1,122 @@
+#domInspector {
+ display: none;
+ }
+#inspectors.dom #domInspector {
+ display: flex;
+ }
+#domInspector .permatoolbar .highlightMode.invert {
+ transform: rotate(180deg);
+ }
+#domInspector button.vExpandToggler > .fa-icon {
+ transform: scaleY(-1)
+ }
+#domInspector button.vCompactToggler > .fa-icon {
+ transform: scaleY(1)
+ }
+#domInspector .vscrollable {
+ overflow-x: auto;
+ }
+#domInspector > ul:first-of-type {
+ padding-left: 0.5em;
+ }
+#domInspector ul {
+ background-color: var(--surface-1);
+ margin: 0;
+ padding-left: 1em;
+ }
+#domInspector li {
+ list-style-type: none;
+ white-space: nowrap;
+ }
+#domInspector li.isCosmeticHide,
+#domInspector li.isCosmeticHide ul,
+#domInspector li.isCosmeticHide li {
+ background-color: var(--surface-2);
+ }
+#domInspector li > * {
+ display: inline-block;
+ line-height: 1.2;
+ margin-right: 1em;
+ vertical-align: middle;
+ }
+#domInspector li > span {
+ color: #aaa;
+ }
+#domInspector li > span:first-child {
+ color: var(--ink-1);
+ cursor: default;
+ font-size: 1rem;
+ margin-right: 0;
+ opacity: 0.5;
+ padding: 0 4px 0 1px;
+ visibility: hidden;
+ }
+#domInspector li > span:first-child:hover {
+ opacity: 1;
+ }
+#domInspector li > *:last-child {
+ margin-right: 0;
+ }
+#domInspector li > span:first-child:before {
+ content: '\a0';
+ }
+#domInspector li.branch > span:first-child:before {
+ content: '\25b8';
+ visibility: visible;
+ }
+#domInspector li.branch.show > span:first-child:before {
+ content: '\25be';
+ }
+#domInspector li.branch.hasCosmeticHide > span:first-child:before {
+ color: red;
+ }
+#domInspector li > code {
+ cursor: pointer;
+ font-family: monospace;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+#domInspector li > code.off {
+ text-decoration: line-through;
+ }
+#domInspector li > code.filter {
+ color: var(--cm-negative);
+ }
+
+#domInspector li > ul {
+ display: block;
+ }
+#domInspector li:not(.hasCosmeticHide):not(.isCosmeticHide):not(.show) > ul {
+ display: none;
+ }
+
+#domInspector li:not(.hasCosmeticHide):not(.isCosmeticHide):not(.show) {
+ display: none;
+ }
+#domInspector #domTree > li {
+ display: block;
+ }
+#domInspector:not(.vExpanded) ul {
+ display: block;
+ }
+#domInspector li > ul > li:not(.hasCosmeticHide):not(.isCosmeticHide) {
+ display: none;
+ }
+#domInspector li.show > ul > li:not(.hasCosmeticHide):not(.isCosmeticHide) {
+ display: block;
+ }
+#domInspector li:not(.hasCosmeticHide):not(.isCosmeticHide) {
+ display: block;
+ }
+#domInspector.hCompact li > code:first-of-type {
+ max-width: 12em;
+ }
+
+#cosmeticFilteringDialog .dialog {
+ text-align: center;
+ }
+#cosmeticFilteringDialog .dialog textarea {
+ height: 40vh;
+ white-space: pre;
+ word-wrap: normal;
+ }
diff --git a/src/css/logger-ui.css b/src/css/logger-ui.css
new file mode 100644
index 0000000..8e5065c
--- /dev/null
+++ b/src/css/logger-ui.css
@@ -0,0 +1,985 @@
+body {
+ display: flex;
+ flex-direction: column;
+ height: 100vh;
+ overflow: hidden;
+ width: 100vw;
+ }
+textarea {
+ box-sizing: border-box;
+ direction: ltr;
+ min-height: 6rem;
+ resize: vertical;
+ width: 100%;
+ }
+.permatoolbar {
+ background-color: var(--surface-1);
+ border: 0;
+ box-sizing: border-box;
+ display: flex;
+ flex-shrink: 0;
+ font-size: 120%;
+ justify-content: space-between;
+ margin: 0;
+ padding: 0.25em;
+ }
+.permatoolbar > div {
+ display: flex;
+ }
+.permatoolbar button.iconified {
+ padding-left: var(--default-gap-xsmall);
+ padding-right: var(--default-gap-xsmall);
+ }
+.permatoolbar button.active {
+ fill: rgb(var(--primary-50));
+ }
+.permatoolbar button > .fa-icon {
+ font-size: 180%;
+ }
+#pageSelector {
+ min-width: 10em;
+ padding: 0.25em 0;
+ width: 50vw;
+ }
+#showpopup {
+ display: inline-flex;
+ align-items: center;
+ }
+#showpopup img {
+ filter: grayscale(100%);
+ height: auto;
+ width: 1em;
+ }
+#info {
+ fill: #ccc;
+ }
+#info:hover {
+ fill: #000;
+ }
+
+/*
+ https://github.com/gorhill/uBlock/issues/3293
+ => https://devhints.io/css-system-font-stack
+*/
+#inspectors {
+ flex-grow: 1;
+ font-family: "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+ position: relative;
+ }
+.inspector {
+ border-top: 1px solid #ccc;
+ display: flex;
+ flex-direction: column;
+ }
+.vscrollable {
+ direction: ltr;
+ flex-grow: 1;
+ font-size: var(--font-size-smaller);
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+#domInspector button.vExpandToggler > .fa-icon {
+ transform: scaleY(1)
+ }
+.inspector:not(.vExpanded) button.vCompactToggler > .fa-icon {
+ transform: scaleY(-1)
+ }
+.hCompact button.hCompactToggler > .fa-icon {
+ transform: scaleX(-1)
+ }
+
+#inspectors.dom #netInspector {
+ display: none;
+ }
+
+#netInspector #pause > .fa-icon[data-i18n-title="loggerUnpauseTip"] {
+ display: none;
+}
+#netInspector.paused #pause > .fa-icon[data-i18n-title="loggerPauseTip"] {
+ display: none;
+}
+#netInspector.paused #pause > .fa-icon[data-i18n-title="loggerUnpauseTip"] {
+ display: inline-flex;
+ fill: #5F9EA0;
+}
+#netInspector #filterExprGroup {
+ display: flex;
+ margin: 0 1em;
+ position: relative;
+ }
+#netInspector #filterButton {
+ opacity: 0.25;
+ }
+#netInspector.f #filterButton {
+ opacity: 1;
+ }
+#netInspector #filterInput {
+ border: 1px solid gray;
+ display: inline-flex;
+ }
+#netInspector #filterInput > input {
+ border: 0;
+ min-width: 16em;
+ }
+#netInspector #filterExprButton {
+ transform: scaleY(-1);
+ }
+#netInspector #filterExprButton:hover {
+ background-color: transparent;
+ }
+#netInspector #filterExprButton.expanded {
+ transform: scaleY(1);
+ }
+#netInspector #filterExprPicker {
+ background-color: var(--surface-0);
+ border: 1px solid gray;
+ display: none;
+ position: absolute;
+ flex-direction: column;
+ font-size: small;
+ top: 100%;
+ z-index: 100;
+ }
+body[dir="ltr"] #netInspector #filterExprPicker {
+ right: 0;
+ }
+body[dir="rtl"] #netInspector #filterExprPicker {
+ left: 0;
+ }
+
+#netInspector #filterExprGroup:hover #filterExprButton.expanded ~ #filterExprPicker {
+ display: flex;
+ }
+#netInspector #filterExprPicker > div {
+ border: 1px dotted #ddd;
+ border-left: 0;
+ border-right: 0;
+ display: flex;
+ padding: 0.5em;
+ }
+#netInspector #filterExprPicker > div:first-of-type {
+ border-top: 0;
+ }
+#netInspector #filterExprPicker > div:last-of-type {
+ border-bottom: 0;
+ }
+#netInspector #filterExprPicker div {
+ display: flex;
+ }
+#netInspector #filterExprPicker span[data-filtex] {
+ align-items: center;
+ border: 1px solid transparent;
+ cursor: pointer;
+ display: inline-flex;
+ margin: 0 0.5em 0 0;
+ padding: 0.25em;
+ white-space: nowrap;
+ }
+#netInspector #filterExprPicker span[data-filtex]:last-of-type {
+ margin: 0;
+ }
+#netInspector #filterExprPicker span[data-filtex]:hover {
+ background-color: rgb(var(--primary-70) / 25%);
+ border: 1px solid rgb(var(--primary-70));
+ }
+#netInspector #filterExprPicker span.on[data-filtex],
+#filterExprButton.active {
+ background-color: rgb(var(--primary-70) / 40%);
+ }
+#netInspector #filterExprPicker span.on[data-filtex] {
+ border: 1px solid rgb(var(--primary-70));
+ }
+
+#netInspector .vscrollable {
+ overflow: hidden;
+ }
+#vwRenderer {
+ box-sizing: border-box;
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+ width: 100%;
+ }
+#vwRenderer #vwScroller {
+ height: 100%;
+ overflow-x: hidden;
+ overflow-y: auto;
+ position: absolute;
+ width: 100%;
+ }
+#vwRenderer #vwScroller #vwVirtualContent {
+ overflow: hidden;
+ }
+#vwRenderer #vwContent {
+ left: 0;
+ overflow: hidden;
+ position: absolute;
+ width: 100%;
+ }
+#vwRenderer .logEntry {
+ display: block;
+ left: 0;
+ overflow: hidden;
+ position: absolute;
+ width: 100%;
+ }
+#vwRenderer .logEntry:empty {
+ display: none;
+ }
+#vwRenderer .logEntry > div {
+ height: 100%;
+ white-space: nowrap;
+ }
+#vwRenderer .logEntry > div[data-status="1"],
+.netFilteringDialog > .panes > .details > div[data-status="1"] {
+ background-color: rgb(var(--popup-cell-block-surface-rgb) / 50%);
+ }
+#vwRenderer .logEntry > div[data-status="1"][data-modifier],
+.netFilteringDialog > .panes > .details > div[data-status="1"][data-modifier] {
+ background-color: var(--logger-modified-surface);
+ }
+#vwRenderer .logEntry > div[data-status="3"] {
+ background-color: rgba(108, 108, 108, 0.1);
+ }
+:root.colorBlind #vwRenderer .logEntry > div[data-status="3"] {
+ background-color: rgba(96, 96, 96, 0.1);
+ }
+#vwRenderer .logEntry > div[data-status="2"],
+.netFilteringDialog > .panes > .details > div[data-status="2"] {
+ background-color: rgb(var(--popup-cell-allow-surface-rgb) / 50%);
+ }
+#vwRenderer .logEntry > div[data-tabid="-1"] {
+ text-shadow: 0 0.2em 0.4em #aaa;
+ }
+#vwRenderer .logEntry > div.extendedRealm,
+#vwRenderer .logEntry > div.redirect {
+ background-color: var(--logger-redirected-surface);
+ }
+#vwRenderer .logEntry > div.extendedRealm.scriptlet {
+ background-color: var(--logger-scriptlet-surface);
+ }
+:root.colorBlind #vwRenderer .logEntry > div.extendedRealm,
+:root.colorBlind #vwRenderer .logEntry > div.redirect {
+ background-color: rgba(0, 19, 110, 0.1);
+ }
+#vwRenderer .logEntry > div[data-aliasid] {
+ color: var(--popup-cell-cname-ink);
+ }
+#vwRenderer .logEntry > div[data-type="tabLoad"] {
+ background-color: #666;
+ color: white;
+ }
+#vwRenderer .logEntry > div[data-type="error"] {
+ color: var(--sf-error-ink);
+ }
+#vwRenderer .logEntry > div[data-type="info"] {
+ color: var(--sf-def-ink);
+ }
+#vwRenderer .logEntry > div.voided {
+ opacity: 0.5;
+ }
+#vwRenderer .logEntry > div.voided:hover {
+ opacity: 0.7;
+ }
+
+#vwRenderer .logEntry > div > span {
+ border: 1px dotted var(--border-1);
+ border-top: 0;
+ border-right: 0;
+ box-sizing: border-box;
+ display: inline-block;
+ height: 100%;
+ overflow: hidden;
+ padding: 0.2em;
+ vertical-align: middle;
+ white-space: nowrap;
+ word-break: break-all;
+ }
+#vwRenderer .logEntry > div.canDetails:hover > span {
+ background-color: rgba(0,0,0,0.04);
+ }
+body[dir="ltr"] #vwRenderer .logEntry > div > span:first-child {
+ border-left: 0;
+ }
+body[dir="rtl"] #vwRenderer .logEntry > div > span:first-child {
+ border-right: 0;
+ }
+#vwRenderer .logEntry > div > span:nth-of-type(1) {
+ }
+#vwRenderer .logEntry > div > span:nth-of-type(2) {
+ }
+#vwRenderer .logEntry > div > span:nth-of-type(2) {
+ text-overflow: ellipsis;
+ }
+#vwRenderer .logEntry > div.messageRealm > span:nth-of-type(2) ~ span {
+ display: none;
+ }
+.vExpanded #vwRenderer #vwContent .logEntry > div > span:nth-of-type(2) {
+ overflow-y: auto;
+ white-space: pre-line;
+ }
+#vwRenderer .logEntry > div.messageRealm[data-type="tabLoad"] > span:nth-of-type(2) {
+ text-align: center;
+ }
+#vwRenderer .logEntry > div.extendedRealm > span:nth-of-type(2) > span:first-of-type {
+ display: none;
+ }
+#vwRenderer .logEntry > div.extendedRealm > span:nth-of-type(2) > span:last-of-type {
+ pointer-events: none;
+ }
+#vwRenderer .logEntry > div.extendedRealm.isException > span:nth-of-type(2) > span:last-of-type {
+ text-decoration: line-through rgba(0,0,255,0.7);
+ }
+#vwRenderer .logEntry > div > span:nth-of-type(3) {
+ font-family: monospace;
+ padding-left: 0.3em;
+ padding-right: 0.3em;
+ text-align: center;
+ }
+#vwRenderer .logEntry > div.canDetails:hover > span:not(:nth-of-type(4)):not(:nth-of-type(8)) {
+ background: rgba(0, 0, 255, 0.1);
+ cursor: zoom-in;
+ }
+#netInspector:not(.vExpanded) #vwRenderer .logEntry > div > span:nth-of-type(4) {
+ direction: rtl;
+ text-align: right;
+ unicode-bidi: plaintext;
+ }
+#vwRenderer #vwContent .logEntry > div > span:nth-of-type(4) {
+ text-overflow: ellipsis;
+ }
+.vExpanded #vwRenderer #vwContent .logEntry > div > span:nth-of-type(4) {
+ overflow-y: auto;
+ text-overflow: clip;
+ white-space: pre-line;
+ }
+#vwRenderer .logEntry > div > span:nth-of-type(5) {
+ text-align: center;
+ }
+/* visual for tabless network requests */
+#vwRenderer .logEntry > div > span:nth-of-type(5) {
+ position: relative;
+ }
+#vwRenderer .logEntry > div > span:nth-of-type(7) {
+ }
+#vwRenderer #vwContent .logEntry > div > span:nth-of-type(7) {
+ }
+#vwRenderer .logEntry > div > span:nth-of-type(8) {
+ position: relative;
+ }
+#vwRenderer #vwContent .logEntry > div > span:nth-of-type(8) {
+ text-overflow: ellipsis;
+ }
+.vExpanded #vwRenderer #vwContent .logEntry > div > span:nth-of-type(8) {
+ overflow-y: auto;
+ white-space: pre-line;
+ }
+#vwRenderer .logEntry > div > span:nth-of-type(8) b {
+ font-weight: bold;
+ }
+#vwRenderer .logEntry > div[data-status="1"] > span:nth-of-type(8) b,
+.netFilteringDialog > .panes > .details > div[data-status="1"] b {
+ background-color: rgb(var(--popup-cell-block-surface-rgb) / 100%);
+ }
+#vwRenderer .logEntry > div[data-status="1"][data-modifier] > span:nth-of-type(8) b,
+.netFilteringDialog > .panes > .details > div[data-status="1"][data-modifier] b {
+ background-color: var(--logger-modified-em-surface);
+ }
+#vwRenderer .logEntry > div[data-status="3"] > span:nth-of-type(8) b {
+ background-color: rgba(108, 108, 108, 0.2);
+ }
+:root.colorBlind #vwRenderer .logEntry > div[data-status="3"] > span:nth-of-type(8) b {
+ background-color: rgba(96, 96, 96, 0.2);
+ }
+#vwRenderer .logEntry > div[data-status="2"] > span:nth-of-type(8) b,
+.netFilteringDialog > .panes > .details > div[data-status="2"] b {
+ background-color: rgb(var(--popup-cell-allow-surface-rgb) / 100%);
+ }
+#vwRenderer .logEntry > div > span:nth-of-type(8) a {
+ align-items: center;
+ background-color: dimgray;
+ color: white;
+ display: none;
+ height: 100%;
+ justify-content: center;
+ padding: 0 0.25em;
+ opacity: 0.4;
+ position: absolute;
+ right: 0;
+ text-decoration: none;
+ top: 0;
+ width: 2rem;
+ }
+#netInspector.vExpanded #vwRenderer .logEntry > div > span:nth-of-type(8) a {
+ bottom: 0px;
+ height: unset;
+ padding: 0.25em;
+ top: unset;
+ }
+#vwRenderer .logEntry > div > span:nth-of-type(8) a::after {
+ content: '\2197';
+ }
+#vwRenderer .logEntry > div.networkRealm > span:nth-of-type(8):hover a {
+ display: inline-flex;
+ }
+#vwRenderer .logEntry > div > span:nth-of-type(8) a:hover {
+ opacity: 1;
+ }
+
+#vwRenderer #vwBottom {
+ background-color: #00F;
+ height: 0;
+ overflow: hidden;
+ width: 100%;
+ }
+#vwRenderer #vwLineSizer {
+ left: 0;
+ pointer-events: none;
+ position: absolute;
+ top: 0;
+ visibility: hidden;
+ width: 100%;
+ }
+
+#netInspector .entryTools {
+ background-color: var(--surface-0);
+ filter: drop-shadow(2px 4px 6px black);
+ max-width: 640px;
+ min-width: min(100%, 640px);
+ position: absolute;
+ }
+#netInspector .entryTools:empty {
+ display: none;
+ }
+#netInspector .entryTools .dialogControls {
+ display: flex;
+ justify-content: stretch;
+ }
+
+.closeButton {
+ stroke: var(--ink-1);
+ stroke-width: 3px;
+ width: 1.6em;
+ height: 1.6em;
+ bottom: calc(100% + 2px);
+ }
+body[dir="ltr"] .closeButton {
+ right: 0;
+ }
+body[dir="rtl"] .closeButton {
+ left: 0;
+ }
+.closeButton:hover {
+ background-color: var(--surface-2) !important;
+ }
+.closeButton > * {
+ pointer-events: none;
+ }
+.moveBand {
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAYAAACtBE5DAAAAFElEQVQI12NgwAfKy8v/M5ANYLoBshgEyQo6H9UAAAAASUVORK5CYII=');
+ cursor: grab;
+ flex-grow: 1;
+ opacity: 0.5;
+ }
+.moving .moveBand {
+ cursor: grabbing;
+}
+
+#popupContainer {
+ background-color: var(--surface-1);
+ border: 1px solid gray;
+ bottom: 0;
+ display: none;
+ max-height: min(800px, calc(100vh - 2rem));
+ min-width: 360px;
+ overflow: hidden;
+ position: fixed;
+ right: 0;
+ z-index: 200;
+ }
+#inspectors.popupOn #popupContainer {
+ display: block;
+ }
+
+#modalOverlay {
+ align-items: center;
+ background-color: rgba(0, 0, 0, 0.5);
+ border: 0;
+ bottom: 0;
+ display: none;
+ justify-content: center;
+ left: 0;
+ margin: 0;
+ position: fixed;
+ right: 0;
+ top: 0;
+ z-index: 400;
+ }
+#modalOverlay.on {
+ display: flex;
+ }
+#modalOverlay > div {
+ position: relative;
+ }
+#modalOverlay .closeButton {
+ background-color: var(--surface-1);
+ position: absolute;
+ }
+
+#modalOverlayContainer {
+ background-color: var(--surface-1);
+ border: 0;
+ box-sizing: border-box;
+ padding: 1em;
+ max-height: 90vh;
+ overflow-y: auto;
+ width: 90vw;
+ }
+
+.netFilteringDialog {
+ font-size: var(--font-size-smaller);
+ }
+.netFilteringDialog a {
+ text-decoration: none;
+ }
+.netFilteringDialog select {
+ max-width: 50vw;
+ outline: none;
+ text-overflow: ellipsis;
+}
+.netFilteringDialog > .preview {
+ align-items: center;
+ /* http://lea.verou.me/css3patterns/ */
+ background-color: #aaa;
+ background-image:
+ linear-gradient(
+ 45deg,
+ #666 25%,
+ transparent 25%,
+ transparent 75%,
+ #666 75%,
+ #666
+ ),
+ linear-gradient(
+ 45deg,
+ #666 25%,
+ transparent 25%,
+ transparent 75%,
+ #666 75%,
+ #666
+ );
+ background-position:0 0, 9px 9px;
+ background-size: 18px 18px;
+ display: flex;
+ justify-content: center;
+ margin-bottom: 1em;
+ padding: 0.5em;
+ text-align: center;
+ }
+.netFilteringDialog > .preview > * {
+ max-width: 100%;
+ max-height: 20vh;
+ }
+.netFilteringDialog > .preview > span {
+ background-color: var(--surface-3);
+ cursor: pointer;
+ padding: 1em;
+ }
+
+.netFilteringDialog > .headers {
+ align-items: center;
+ border-bottom: 1px solid var(--border-4);
+ display: flex;
+ line-height: 2;
+ }
+.netFilteringDialog > .headers > .header {
+ border: 1px solid var(--border-2);
+ border-bottom: 1px solid var(--border-4);
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ color: var(--border-2);
+ cursor: pointer;
+ display: inline-block;
+ margin-inline-end: 4px;
+ padding: 0 1em;
+ position: relative;
+ top: 1px;
+ }
+.netFilteringDialog[data-pane="details"] > .headers > [data-pane="details"],
+.netFilteringDialog[data-pane="dynamic"] > .headers > [data-pane="dynamic"],
+.netFilteringDialog[data-pane="static"] > .headers > [data-pane="static"] {
+ background-color: var(--surface-0);
+ border-color: var(--border-4);
+ border-bottom: 1px solid transparent;
+ color: var(--ink-1);
+ }
+.netFilteringDialog > .headers > .tools {
+ bottom: 0;
+ display: flex;
+ height: 100%;
+ margin-inline-start: 2rem;
+ }
+.netFilteringDialog > .headers > .tools > span {
+ color: var(--ink-3);
+ fill: var(--ink-3);
+ cursor: pointer;
+ font-size: 1.5em;
+ padding: 0 0.25em;
+ text-align: center;
+ }
+.netFilteringDialog > .headers > .tools > span:hover {
+ color: var(--ink-1);
+ fill: var(--ink-1);
+ }
+.netFilteringDialog.extendedRealm > .headers > .dynamic,
+.netFilteringDialog.extendedRealm > .panes > .dynamic {
+ display: none;
+ }
+.netFilteringDialog.extendedRealm > .headers > .static,
+.netFilteringDialog.extendedRealm > .panes > .static {
+ display: none;
+ }
+.netFilteringDialog > div.panes {
+ overflow: hidden;
+ overflow-y: auto;
+ padding-top: 1em;
+ }
+.netFilteringDialog > div.panes > div {
+ display: none;
+ }
+.netFilteringDialog[data-pane="details"] > .panes > [data-pane="details"],
+.netFilteringDialog[data-pane="dynamic"] > .panes > [data-pane="dynamic"],
+.netFilteringDialog[data-pane="static"] > .panes > [data-pane="static"] {
+ display: flex;
+ flex-direction: column;
+ padding: 0 var(--default-gap-xsmall) var(--default-gap-xsmall) var(--default-gap-xsmall);
+ }
+.netFilteringDialog > .panes > .details > div {
+ align-items: stretch;
+ background-color: var(--surface-2);
+ border: 0;
+ border-bottom: 1px solid var(--surface-0);
+ display: flex;
+ }
+.netFilteringDialog > .panes > .details > div > span {
+ padding: 0.5em;
+ }
+.netFilteringDialog > .panes > .details > div > span:nth-of-type(1) {
+ border: 0;
+ flex-grow: 0;
+ flex-shrink: 0;
+ text-align: right;
+ width: 8em;
+ }
+body[dir="ltr"] .netFilteringDialog > .panes > .details > div > span:nth-of-type(1) {
+ border-right: 1px solid var(--surface-0);
+ }
+body[dir="rtl"] .netFilteringDialog > .panes > .details > div > span:nth-of-type(1) {
+ border-left: 1px solid var(--surface-0);
+ }
+.netFilteringDialog > .panes > .details > div > span:nth-of-type(2) {
+ flex-grow: 1;
+ max-height: 10vh;
+ overflow: hidden auto;
+ white-space: pre-line
+ }
+.netFilteringDialog > .panes > .details > div > span:nth-of-type(2):not(.prose) {
+ word-break: break-all;
+ }
+.netFilteringDialog > .panes > .details > div > span:nth-of-type(2) .listEntry {
+ display: inline-flex;
+ }
+.netFilteringDialog > .panes > .details > div > span:nth-of-type(2) .fa-icon {
+ font-size: 110%;
+ opacity: 0.5;
+ }
+.netFilteringDialog > .panes > .details > div > span:nth-of-type(2) .fa-icon:hover {
+ opacity: 1;
+ }
+.netFilteringDialog > .panes > .details .exceptor {
+ align-items: center;
+ border-left: 1px solid var(--surface-0);
+ cursor: pointer;
+ display: inline-flex;
+ font-family: monospace;
+ opacity: 0.8;
+ }
+.netFilteringDialog > .panes > .details .exceptor:hover {
+ opacity: 1;
+ }
+.netFilteringDialog > .panes > .details .exceptored .filter {
+ text-decoration: line-through;
+ }
+.netFilteringDialog > .panes > .details .exceptored .exceptor {
+ background-color: rgb(var(--primary-50) / 50%);
+ }
+.netFilteringDialog > .panes > .details .exceptor::before {
+ content: '@@';
+ }
+.netFilteringDialog.extendedRealm > .panes > .details .exceptor::before {
+ content: '#@#';
+ }
+.netFilteringDialog > div.panes > .dynamic > .toolbar {
+ padding-bottom: 1em;
+ }
+.netFilteringDialog > div.panes > .dynamic .row {
+ display: flex;
+ min-height: 2.2em;
+ }
+.netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(1) {
+ align-self: stretch;
+ border: 0;
+ display: inline-flex;
+ flex-grow: 0;
+ flex-shrink: 0;
+ text-align: center;
+ width: 4.5em;
+ }
+body[dir="ltr"] .netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(1) {
+ border-right: 1px solid var(--surface-0);
+ }
+body[dir="rtl"] .netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(1) {
+ border-left: 1px solid var(--surface-0);
+ }
+.netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(2) {
+ align-self: center;
+ padding: 0 0.5em;
+ }
+.netFilteringDialog > div.panes > .dynamic > .toolbar #saveRules {
+ background-color: #ffe;
+ border: 1px solid #ddc;
+ border-radius: 4px;
+ fill: #888;
+ cursor: pointer;
+ font-size: 2em;
+ visibility: hidden;
+ width: 100%;
+ }
+body.dirty .netFilteringDialog > div.panes > .dynamic > .toolbar #saveRules {
+ visibility: visible;
+ }
+.netFilteringDialog > div.panes > .dynamic > .toolbar #saveRules:hover {
+ fill: black;
+ }
+.netFilteringDialog > div.panes > .dynamic > .toolbar .entry {
+ display: none;
+ }
+.netFilteringDialog > div.panes > .dynamic .entry {
+ background-color: var(--surface-2);
+ border: 0;
+ border-bottom: 1px solid var(--surface-0);
+ }
+.netFilteringDialog > div.panes > .dynamic .entry:hover {
+ background-color: var(--surface-3);
+ }
+.netFilteringDialog > div.panes > .dynamic .entry > .action {
+ background-color: transparent;
+ border: 0;
+ cursor: pointer;
+ }
+.netFilteringDialog > div.panes > .dynamic .entry > .action > span {
+ background-color: transparent;
+ border: 0;
+ display: inline-block;
+ height: 100%;
+ opacity: 0.2;
+ visibility: hidden;
+ width: 33.33%;
+ }
+.netFilteringDialog > div.panes > .dynamic .entry > .action.allow {
+ background-color: rgba(0, 160, 0, 0.3);
+ }
+:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action.allow {
+ background-color: rgba(255, 194, 57, 0.4);
+ }
+.netFilteringDialog > div.panes > .dynamic .entry > .action.noop {
+ background-color: rgba(108, 108, 108, 0.3);
+ }
+:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action.noop {
+ background-color: rgba(96, 96, 96, 0.4);
+ }
+.netFilteringDialog > div.panes > .dynamic .entry > .action.block {
+ background-color: rgba(192, 0, 0, 0.3);
+ }
+:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action.block {
+ background-color: rgba(0, 19, 110, 0.4);
+ }
+.netFilteringDialog > div.panes > .dynamic .entry > .action.own.allow {
+ background-color: rgba(0, 160, 0, 1);
+ }
+:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action.own.allow {
+ background-color: rgba(255, 194, 57, 1);
+ }
+.netFilteringDialog > div.panes > .dynamic .entry > .action.own.noop,
+:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action.own.noop {
+ background-color: rgba(108, 108, 108, 1);
+ }
+.netFilteringDialog > div.panes > .dynamic .entry > .action.own.block {
+ background-color: rgba(192, 0, 0, 1);
+ }
+:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action.own.block {
+ background-color: rgba(0, 19, 110, 1);
+ }
+.netFilteringDialog > div.panes > .dynamic .entry > .action:not(.own):hover > span {
+ opacity: 0.2;
+ visibility: visible;
+ }
+.netFilteringDialog > div.panes > .dynamic .entry > .action:not(.own):hover > span:hover {
+ opacity: 0.75;
+ }
+.netFilteringDialog > div.panes > .dynamic .entry > .action > .allow {
+ background-color: rgb(0, 160, 0);
+ }
+:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action > .allow {
+ background-color: rgb(255, 194, 57);
+ }
+.netFilteringDialog > div.panes > .dynamic .entry > .action > .noop {
+ background-color: rgb(108, 108, 108);
+ }
+.netFilteringDialog > div.panes > .dynamic .entry > .action > .block {
+ background-color: rgb(192, 0, 0);
+ }
+:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action > .block {
+ background-color: rgb(0, 19, 110);
+ }
+.netFilteringDialog > div.panes > .dynamic .entry > .url {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+.netFilteringDialog > div.panes > div.static > div {
+ line-height: 2;
+ }
+.netFilteringDialog > div.panes > div.static textarea {
+ height: 6em;
+ max-height: 20vh;
+ min-height: 10vh;
+ word-break: break-all;
+ }
+.netFilteringDialog > div.panes > div.static > div:nth-of-type(2) {
+ text-align: center;
+ }
+
+#filterFinderDialog {
+ word-break: break-all;
+ }
+#filterFinderDialog code {
+ background: #eee;
+ font-size: 85%;
+ padding: 3px;
+ unicode-bidi: plaintext;
+ white-space: pre-wrap;
+ }
+#filterFinderDialog ul {
+ font-size: larger;
+ }
+#filterFinderDialog .filterFinderListEntry {
+ align-items: flex-end;
+ display: flex;
+ }
+#filterFinderDialog .filterFinderListEntry a {
+ text-decoration: none;
+ }
+#filterFinderDialog .filterFinderListEntry a.fa-icon {
+ margin: 0 0.5em;
+ opacity: 0.6;
+ }
+#filterFinderDialog .filterFinderListEntry a.fa-icon:hover {
+ opacity: 1;
+ }
+#filterFinderDialog .filterFinderListEntry a.fa-icon[href=""] {
+ display: none;
+ }
+#filterFinderDialog > *:first-child {
+ margin-top: 0;
+ }
+#filterFinderDialog > *:last-child {
+ margin-bottom: 0;
+ }
+
+#loggerStatsDialog .sortedEntries {
+ display: flex;
+ flex-direction: column;
+ font-size: smaller;
+ }
+#loggerStatsDialog .sortedEntries > div {
+ display: flex;
+ }
+#loggerStatsDialog .sortedEntries > div > span:first-of-type {
+ flex-grow: 0;
+ flex-shrink: 0;
+ padding: 0 2em 0 0;
+ text-align: right;
+ width: 3em;
+ }
+#loggerStatsDialog .sortedEntries > div > span:last-of-type {
+ flex-grow: 1;
+ flex-shrink: 1;
+ white-space: pre;
+ }
+
+#loggerExportDialog {
+ display: flex;
+ flex-direction: column;
+ }
+#loggerExportDialog .options {
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 1em;
+ }
+#loggerExportDialog .options > div {
+ display: inline-flex;
+ }
+#loggerExportDialog .options span[data-i18n] {
+ border: 1px solid rgb(var(--primary-70));
+ cursor: pointer;
+ font-size: 90%;
+ margin: 0;
+ padding: 0.5em;
+ white-space: nowrap;
+ }
+#loggerExportDialog .options span[data-i18n]:hover {
+ background-color: rgb(var(--primary-70) / 40%);
+ }
+#loggerExportDialog .options span.on[data-i18n],
+#loggerExportDialog .options span.pushbutton:active {
+ background-color: rgb(var(--primary-70) / 40%);
+ }
+#loggerExportDialog .output {
+ font: smaller mono;
+ height: 60vh;
+ padding: 0.5em;
+ white-space: pre;
+ }
+
+#loggerSettingsDialog {
+ display: flex;
+ flex-direction: column;
+ }
+#loggerSettingsDialog > div {
+ padding-bottom: 1em;
+ }
+#loggerSettingsDialog > div:last-of-type {
+ padding-bottom: 0;
+ }
+#loggerSettingsDialog ul {
+ padding: 0;
+ }
+body[dir="ltr"] #loggerSettingsDialog ul {
+ padding-left: 2em;
+ }
+body[dir="rtl"] #loggerSettingsDialog ul {
+ padding-right: 2em;
+ }
+#loggerSettingsDialog li {
+ list-style-type: none;
+ margin: 0.5em 0 0 0;
+ }
+#loggerSettingsDialog input {
+ max-width: 6em;
+ }
+
+.hide {
+ display: none !important;
+ }
diff --git a/src/css/popup-fenix.css b/src/css/popup-fenix.css
new file mode 100644
index 0000000..252e371
--- /dev/null
+++ b/src/css/popup-fenix.css
@@ -0,0 +1,778 @@
+ /* External CSS values override */
+.fa-icon.fa-icon-badged > .fa-icon-badge {
+ bottom: auto;
+ top: -20%;
+ }
+
+/* Internal CSS values */
+:root body {
+ overflow: hidden;
+ }
+:root body,
+:root.mobile body {
+ --font-size: 14px;
+ --popup-gap: var(--font-size);
+ --popup-gap-thin: calc(0.5 * var(--popup-gap));
+ --popup-gap-extra-thin: calc(0.25 * var(--popup-gap));
+ --popup-main-min-width: 18em;
+ --popup-firewall-min-width: 30em;
+ --popup-rule-cell-width: 5em;
+ font-size: var(--font-size);
+ line-height: 20px;
+ }
+:root body.loading {
+ opacity: 0;
+ }
+a {
+ color: var(--ink-1);
+ fill: var(--ink-1);
+ text-decoration: none;
+ }
+:focus {
+ outline: 0;
+ }
+
+#panes {
+ align-items: stretch;
+ display: flex;
+ flex-direction: row-reverse;
+ padding: 0;
+ position: relative;
+ }
+#main {
+ align-self: flex-start;
+ max-width: 340px;
+ min-width: var(--popup-main-min-width);
+ }
+:root.portrait #main {
+ align-self: inherit;
+ }
+hr {
+ border: 0;
+ border-top: 1px solid var(--hr-ink);
+ margin: 0;
+ padding: 0;
+ }
+
+#sticky {
+ background-color: var(--surface-1);
+ position: sticky;
+ top: 0;
+ z-index: 100;
+ }
+#stickyTools {
+ align-items: stretch;
+ display: flex;
+ justify-content: space-between;
+ margin: var(--popup-gap-extra-thin) 0;
+ }
+#switch {
+ color: var(--popup-power-ink);
+ cursor: pointer;
+ display: flex;
+ fill: var(--popup-power-ink);
+ flex-grow: 1;
+ font-size: 96px;
+ justify-content: center;
+ margin: var(--popup-gap) 0;
+ padding: 0;
+ stroke: none;
+ stroke-width: 64;
+ }
+body.off #switch {
+ fill: var(--surface-1);
+ stroke: var(--checkbox-ink);
+ }
+.rulesetTools {
+ background-color: transparent;
+ border: 0;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ width: 25%;
+ }
+.rulesetTools [id] {
+ background-color: var(--popup-ruleset-tool-surface);
+ border-radius: 4px;
+ cursor: pointer;
+ fill: var(--popup-ruleset-tool-ink);
+ flex-grow: 1;
+ font-size: 2.2em;
+ padding: 0;
+ visibility: hidden;
+ }
+.rulesetTools [id]:not(:first-of-type) {
+ margin-block-start: 1px;
+ }
+.rulesetTools [id] > svg {
+ fill: var(--ink-4);
+ }
+body.needReload #refresh,
+body.needSave #saveRules,
+body.needSave #revertRules {
+ visibility: visible;
+ }
+#hostname {
+ background-color: var(--popup-toolbar-surface);
+ margin: 0;
+ padding: var(--popup-gap-thin) 0;
+ text-align: center;
+ white-space: normal;
+
+ }
+#hostname > span {
+ word-break: break-all;
+ }
+#hostname > span + span {
+ font-weight: 600;
+ }
+
+#basicStats {
+ column-gap: var(--popup-gap);
+ display: grid;
+ grid-template: auto / auto;
+ margin: var(--popup-gap) var(--popup-gap) var(--popup-gap-thin) var(--popup-gap);
+ }
+#basicStats > span {
+ justify-self: center;
+ white-space: nowrap;
+ }
+#basicStats > [data-i18n] {
+ font-size: 95%;
+ }
+#basicStats > [data-i18n] + span {
+ font-size: 105%;
+ margin-bottom: var(--popup-gap-thin);
+ }
+:root.portrait #basicStats {
+ grid-template: auto / auto auto;
+ margin-bottom: 0;
+ }
+:root.portrait #basicStats > span {
+ font-size: inherit;
+ justify-self: stretch;
+ margin-bottom: var(--popup-gap);
+ white-space: unset;
+ }
+:root.portrait #basicStats > [data-i18n] {
+ }
+:root.portrait #basicStats > [data-i18n] + span {
+ text-align: end;
+ }
+
+.itemRibbon {
+ column-gap: var(--popup-gap);
+ display: grid;
+ grid-auto-columns: 1fr;
+ grid-auto-flow: column;
+ grid-template: auto / 1fr 1fr;
+ margin: var(--popup-gap);
+ }
+.itemRibbon > span + span {
+ text-align: end;
+ }
+
+.toolRibbon {
+ align-items: start;
+ background-color: var(--popup-toolbar-surface);
+ display: grid;
+ grid-auto-columns: 1fr;
+ grid-auto-flow: column;
+ grid-template: auto / repeat(4, 1fr);
+ justify-items: center;
+ margin: 0;
+ white-space: normal;
+ }
+.toolRibbon .tool {
+ cursor: pointer;
+ display: flex;
+ flex-direction: column;
+ font-size: 1.4em;
+ min-width: 32px;
+ padding: var(--popup-gap)
+ var(--popup-gap-thin);
+ unicode-bidi: embed;
+ visibility: hidden;
+ }
+.toolRibbon .tool:hover {
+ color: var(--ink-1);
+ fill: var(--ink-1);
+ }
+.toolRibbon .tool.enabled {
+ visibility: visible;
+ }
+.toolRibbon .tool .caption {
+ font: 10px/12px sans-serif;
+ margin-top: 6px;
+ text-align: center;
+ }
+:root.mobile.no-tooltips .toolRibbon .tool {
+ font-size: 1.6em;
+ }
+
+#basicTools:not(.canPick) .needPick {
+ visibility: hidden;
+ }
+
+#extraTools .fa-icon {
+ align-self: center;
+ position: relative;
+ }
+#extraTools .fa-icon > .nope {
+ height: 1.1em;
+ left: 50%;
+ position: absolute;
+ stroke: var(--popup-icon-x-ink);
+ stroke-width: 2;
+ transform: translateX(-50%);
+ visibility: hidden;
+ width: 1.1em;
+ }
+#extraTools > span.on .fa-icon >.nope {
+ visibility: visible;
+ }
+
+#unprocessedRequestWarning {
+ align-items: center;
+ background-color: #fc0;
+ color: rgb(var(--ink-80));
+ stroke: rgb(var(--ink-80));
+ display: none;
+ font-size: var(--font-size-smaller);
+ padding: var(--popup-gap-thin);
+ }
+:root.warn #unprocessedRequestWarning {
+ display: flex;
+ }
+#unprocessedRequestWarning > .dismiss {
+ flex-shrink: 0;
+ width: calc(var(--font-size) - 2px);
+ }
+#unprocessedRequestWarning > .dismiss > svg {
+ width: 100%;
+ }
+
+#moreOrLess {
+ column-gap: 0;
+ display: grid;
+ grid-template: auto / 1fr 1fr;
+ justify-items: stretch;
+ margin: 1px 0 0 0;
+ }
+#moreOrLess > span {
+ cursor: pointer;
+ margin: 0;
+ padding: var(--popup-gap-thin) var(--popup-gap);
+ user-select: none;
+ white-space: nowrap;
+ }
+:root.mobile #moreOrLess > span {
+ padding: var(--popup-gap);
+ }
+#moreButton .fa-icon {
+ transform: rotate(180deg);
+ }
+#lessButton {
+ border-inline-start: 1px solid var(--surface-1);
+ text-align: end;
+ }
+#moreButton.disabled,
+#lessButton.disabled {
+ pointer-events: none;
+ visibility: hidden;
+ }
+
+#firewall {
+ border: 0;
+ flex-shrink: 1;
+ font-size: 90%;
+ margin: 0;
+ max-height: 600px;
+ max-width: 460px;
+ min-width: var(--popup-firewall-min-width);
+ padding: 0;
+ position: relative;
+ overflow-y: auto;
+ }
+:root.desktop #firewall {
+ margin-inline-start: 1px;
+ }
+:root.desktop body.vMin #firewall {
+ max-height: 100vh;
+ }
+#firewall > * {
+ direction: ltr;
+ }
+#firewall > section {
+ align-items: flex-start;
+ display: flex;
+ left: 0;
+ position: absolute;
+ z-index: 50;
+ }
+#firewall > section .fa-icon {
+ color: var(--ink-4);
+ fill: var(--ink-4);
+ font-size: 150%;
+ padding: var(--popup-gap-thin);
+ }
+#firewall > section:hover .fa-icon {
+ color: var(--ink-1);
+ fill: var(--ink-1);
+ }
+#firewall.showBlocked > section .fa-icon,
+#firewall.showAllowed > section .fa-icon,
+#firewall.hideBlocked > section .fa-icon,
+#firewall.hideAllowed > section .fa-icon,
+#firewall.show3pScript > section .fa-icon,
+#firewall.show3pFrame > section .fa-icon,
+#firewall.hide3pScript > section .fa-icon,
+#firewall.hide3pFrame > section .fa-icon {
+ color: rgb(var(--primary-70));
+ fill: rgb(var(--primary-70));
+ }
+#firewall > section .filterExpressions {
+ background-color: var(--surface-0);
+ border: 1px solid var(--border-4);
+ display: none;
+ }
+#firewall > section:hover .filterExpressions {
+ display: flex;
+ flex-direction: column;
+ }
+#firewall > section .filterExpressions div {
+ border-bottom: 1px dotted #ddd;
+ padding: 0.25em;
+ }
+#firewall > section .filterExpressions div:last-of-type {
+ border-bottom: 0;
+ }
+#firewall > section .filterExpressions span {
+ cursor: default;
+ display: inline-flex;
+ margin: 0 0.25em 0 0;
+ padding: 0.5em;
+ white-space: nowrap;
+ border: 1px solid var(--surface-0);
+ }
+#firewall > section .filterExpressions span:last-of-type {
+ margin: 0;
+ }
+:root:not(.mobile) #firewall > section .filterExpressions span:not(.on):hover {
+ background-color: rgb(var(--primary-70) / 15%);
+ border: 1px solid rgb(var(--primary-70));
+ }
+#firewall > section .filterExpressions span.on {
+ background-color: rgb(var(--primary-70) / 40%);
+ border: 1px solid rgb(var(--primary-70));
+ }
+#firewall > div {
+ border: 0;
+ display: flex;
+ margin: 0;
+ margin-top: 1px;
+ padding: 0;
+ }
+#firewall > div:first-of-type {
+ margin-top: 0;
+ }
+#firewall > div:first-of-type ~ div[data-des="*"] {
+ display: none;
+ }
+#firewall:not(.expanded) > div.isSubdomain:not(.expandException):not(.isRootContext),
+#firewall.expanded > div.isSubdomain.expandException:not(.isRootContext) {
+ display: none;
+ }
+#firewall > div > span,
+#actionSelector > #dynaCounts {
+ background-color: var(--popup-cell-surface);
+ border: none;
+ box-sizing: border-box;
+ display: inline-flex;
+ padding: 0.4em 0;
+ position: relative;
+ }
+#firewall > div:first-of-type span[data-i18n] {
+ cursor: pointer;
+ flex-direction: unset;
+ flex-grow: 1;
+ }
+#firewall > div:first-of-type span[data-i18n]::before {
+ color: var(--ink-3);
+ content: '+';
+ padding-right: 0.25em;
+ }
+#firewall.expanded > div:first-of-type span[data-i18n]::before {
+ content: '\2012';
+ }
+#firewall > div > span:first-of-type {
+ flex-direction: column;
+ flex-grow: 1;
+ justify-content: flex-end;
+ padding-right: 2px;
+ text-align: right;
+ white-space: normal;
+ width: calc(100% - var(--popup-rule-cell-width));
+ word-break: break-word;
+ }
+#firewall > div[data-des="*"] > span:first-of-type {
+ flex-direction: row;
+ }
+#firewall.show3pScript:not(.show3pFrame) > div:not([data-des="*"]).is3p:not(.hasScript),
+#firewall.show3pFrame:not(.show3pScript) > div:not([data-des="*"]).is3p:not(.hasFrame),
+#firewall.show3pScript.show3pFrame > div:not([data-des="*"]).is3p:not(.hasScript):not(.hasFrame),
+#firewall.hide3pScript > div:not([data-des="*"]).is3p.hasScript,
+#firewall.hide3pFrame > div:not([data-des="*"]).is3p.hasFrame,
+#firewall.showBlocked > div:not([data-des="*"]).is3p:not(.totalBlocked):not(.blocked),
+#firewall.showAllowed > div:not([data-des="*"]).is3p:not(.totalAllowed):not(.allowed),
+#firewall.hideBlocked > div:not([data-des="*"]).is3p.totalBlocked,
+#firewall.hideBlocked > div:not([data-des="*"]).is3p.blocked,
+#firewall.hideAllowed > div:not([data-des="*"]).is3p.totalAllowed,
+#firewall.hideAllowed > div:not([data-des="*"]).is3p.allowed {
+ max-height: 4px;
+ overflow-y: hidden;
+ pointer-events: none;
+ user-select: none;
+ }
+#firewall.show3pScript:not(.show3pFrame) > div:not([data-des="*"]).is3p:not(.hasScript) *,
+#firewall.show3pFrame:not(.show3pScript) > div:not([data-des="*"]).is3p:not(.hasFrame) *,
+#firewall.show3pScript.show3pFrame > div:not([data-des="*"]).is3p:not(.hasScript):not(.hasFrame) *,
+#firewall.hide3pScript > div:not([data-des="*"]).is3p.hasScript *,
+#firewall.hide3pFrame > div:not([data-des="*"]).is3p.hasFrame *,
+#firewall.showBlocked > div:not([data-des="*"]).is3p:not(.totalBlocked):not(.blocked) *,
+#firewall.showAllowed > div:not([data-des="*"]).is3p:not(.totalAllowed):not(.allowed) *,
+#firewall.hideBlocked > div:not([data-des="*"]).is3p.totalBlocked *,
+#firewall.hideBlocked > div:not([data-des="*"]).is3p.blocked *,
+#firewall.hideAllowed > div:not([data-des="*"]).is3p.totalAllowed *,
+#firewall.hideAllowed > div:not([data-des="*"]).is3p.allowed * {
+ color: transparent !important;
+ }
+#firewall > div.isCname > span:first-of-type {
+ color: var(--popup-cell-cname-ink);
+ }
+#firewall > div > span:first-of-type > sub {
+ display: inline-block;
+ font-size: 85%;
+ font-weight: normal;
+ padding: 0.25em 0 0 0;
+ }
+#firewall > div > span:first-of-type > sub:empty {
+ display: none;
+ }
+#firewall > div > span:first-of-type ~ span {
+ flex-shrink: 0;
+ margin-left: 1px;
+ width: var(--popup-rule-cell-width);
+ }
+#firewall > div > span:nth-of-type(2) {
+ display: none;
+ }
+#firewall > div > span:nth-of-type(3),
+#firewall > div > span:nth-of-type(4) {
+ color: var(--ink-2);
+ display: none;
+ font-family: monospace;
+ text-align: center;
+ }
+#firewall > div.isDomain > span:first-of-type > span {
+ pointer-events: none;
+ }
+#firewall > div.isDomain > span:first-of-type > span > span {
+ font-weight: 600;
+ pointer-events: auto;
+ }
+#firewall > div.isDomain.hasSubdomains > span:first-of-type > span::before {
+ content: '\2026\A0';
+ opacity: 0.6;
+ }
+#firewall > div[data-des="*"] > span:nth-of-type(3),
+#firewall > div.isSubdomain > span:nth-of-type(3),
+#firewall > div.isSubdomain.isRootContext > span:nth-of-type(3),
+#firewall.expanded > div:not(.expandException) > span:nth-of-type(3),
+#firewall:not(.expanded) > div.expandException > span:nth-of-type(3),
+#firewall:not(.expanded) > div.isDomain:not(.expandException) > span:nth-of-type(4),
+#firewall.expanded > div.isDomain.expandException > span:nth-of-type(4),
+#actionSelector > #dynaCounts {
+ display: inline-flex;
+ justify-content: space-between;
+ }
+#firewall > div > span[data-acount]::before,
+#firewall > div > span[data-bcount]::after,
+#firewall > div > span[data-acount] > #actionSelector > #dynaCounts::before,
+#firewall > div > span[data-acount] > #actionSelector > #dynaCounts::after {
+ content: ' ';
+ }
+#firewall > div > span[data-acount]::before,
+#firewall > div > span[data-acount] > #actionSelector > #dynaCounts::before {
+ padding-left: 0.1em;
+ }
+#firewall > div > span[data-acount="1"]::before,
+#firewall > div > span[data-acount="1"] > #actionSelector > #dynaCounts::before {
+ content: '+';
+ }
+#firewall > div > span[data-acount="2"]::before,
+#firewall > div > span[data-acount="2"] > #actionSelector > #dynaCounts::before {
+ content: '++';
+ }
+#firewall > div > span[data-acount="3"]::before,
+#firewall > div > span[data-acount="3"] > #actionSelector > #dynaCounts::before {
+ content: '+++';
+ }
+#firewall > div > span[data-bcount]::after,
+#firewall > div > span[data-bcount] > #actionSelector > #dynaCounts::after {
+ padding-right: 0.1em;
+ }
+#firewall > div > span[data-bcount="1"]::after,
+#firewall > div > span[data-bcount="1"] > #actionSelector > #dynaCounts::after {
+ content: '\2212';
+ }
+#firewall > div > span[data-bcount="2"]::after,
+#firewall > div > span[data-bcount="2"] > #actionSelector > #dynaCounts::after {
+ content: '\2212\2212';
+ }
+#firewall > div > span[data-bcount="3"]::after,
+#firewall > div > span[data-bcount="3"] > #actionSelector > #dynaCounts::after {
+ content: '\2212\2212\2212';
+ }
+
+body.advancedUser #firewall > div > span:first-of-type {
+ width: calc(100% - 2 * var(--popup-rule-cell-width));
+ }
+body.advancedUser #firewall > div > span:nth-of-type(2) {
+ display: inline-flex;
+ }
+body.advancedUser #firewall > div:first-of-type ~ div[data-des="*"] {
+ display: flex;
+ }
+body.advancedUser #firewall > div > span:first-of-type ~ span {
+ cursor: pointer;
+ }
+
+/**
+ Small coloured label at the left of a row
+ */
+#firewall > div.isRootContext > span:first-of-type::before,
+#firewall > div.allowed > span:first-of-type::before,
+#firewall > div.blocked > span:first-of-type::before,
+#firewall:not(.expanded) > div.isDomain.totalAllowed:not(.expandException) > span:first-of-type::before,
+#firewall:not(.expanded) > div.isDomain.totalBlocked:not(.expandException) > span:first-of-type::before,
+#firewall.expanded > div.isDomain.totalAllowed.expandException > span:first-of-type::before,
+#firewall.expanded > div.isDomain.totalBlocked.expandException > span:first-of-type::before {
+ box-sizing: border-box;
+ content: '';
+ display: inline-block;
+ filter: var(--popup-cell-label-filter);
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 7px;
+ }
+#firewall > div.isRootContext > span:first-of-type::before {
+ background: var(--ink-3);
+ width: 14px !important;
+ }
+#firewall > div.allowed > span:first-of-type::before,
+#firewall > div.isDomain.totalAllowed > span:first-of-type::before {
+ background: var(--popup-cell-allow-own-surface);
+ }
+#firewall > div.blocked > span:first-of-type::before,
+#firewall > div.isDomain.totalBlocked > span:first-of-type::before {
+ background: var(--popup-cell-block-own-surface);
+ }
+#firewall > div.allowed.blocked > span:first-of-type::before,
+#firewall > div.isDomain.totalAllowed.totalBlocked > span:first-of-type::before {
+ background: var(--popup-cell-label-mixed-surface);
+ }
+/* Rule cells */
+body.advancedUser #firewall > div > span.allowRule,
+#actionSelector > #dynaAllow {
+ background: var(--popup-cell-allow-surface);
+ }
+body.advancedUser #firewall > div > span.blockRule,
+#actionSelector > #dynaBlock {
+ background: var(--popup-cell-block-surface);
+ }
+body.advancedUser #firewall > div > span.noopRule,
+#actionSelector > #dynaNoop {
+ background: var(--popup-cell-noop-surface);
+ }
+body.advancedUser #firewall > div > span.ownRule,
+#firewall > div > span.ownRule {
+ color: var(--surface-1);
+ }
+body.advancedUser #firewall > div > span.allowRule.ownRule,
+:root:not(.mobile) #actionSelector > #dynaAllow:hover {
+ background: var(--popup-cell-allow-own-surface);
+ }
+body.advancedUser #firewall > div > span.blockRule.ownRule,
+:root:not(.mobile) #actionSelector > #dynaBlock:hover {
+ background: var(--popup-cell-block-own-surface);
+ }
+body.advancedUser #firewall > div > span.noopRule.ownRule,
+:root:not(.mobile) #actionSelector > #dynaNoop:hover {
+ background: var(--popup-cell-noop-own-surface);
+ }
+
+#actionSelector {
+ box-sizing: border-box;
+ display: flex;
+ height: 100%;
+ justify-items: stretch;
+ left: 0;
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ width: 100%;
+ z-index: 1;
+ }
+#actionSelector > span {
+ display: inline-block;
+ flex-grow: 1;
+ }
+#actionSelector > #dynaAllow {
+ display: none;
+ }
+body.godMode #actionSelector > #dynaAllow {
+ display: inline-block;
+ }
+#actionSelector > #dynaNoop {
+ }
+#actionSelector > #dynaBlock {
+ }
+#actionSelector > #dynaCounts {
+ background-color: transparent;
+ height: 100%;
+ left: 0;
+ pointer-events: none;
+ position: absolute;
+ top: 0;
+ width: 100%;
+ }
+
+/* configurable UI elements */
+:root:not(.mobile) .toolRibbon .caption,
+:root.mobile body.no-tooltips .toolRibbon .caption,
+:root.mobile body[data-ui~="-captions"] .toolRibbon .caption {
+ display: none;
+ }
+:root.mobile .toolRibbon .caption,
+:root:not(.mobile) body[data-ui~="+captions"] .toolRibbon .caption {
+ display: inherit;
+ }
+:root:not(.mobile) .toolRibbon .tool,
+:root.mobile body.no-tooltips .toolRibbon .tool,
+:root.mobile body[data-ui~="-captions"] .toolRibbon .tool {
+ padding: var(--popup-gap) var(--popup-gap-thin);
+ }
+:root.mobile #no-popups,
+:root body[data-ui~="-no-popups"] #no-popups {
+ display: none;
+ }
+:root:not(.mobile) #no-popups,
+:root body[data-ui~="+no-popups"] #no-popups {
+ display: flex;
+ }
+:root.mobile [href="logger-ui.html#_"],
+:root body[data-ui~="-logger"] [href="logger-ui.html#_"] {
+ display: none;
+ }
+:root:not(.mobile) [href="logger-ui.html#_"],
+:root body[data-ui~="+logger"] [href="logger-ui.html#_"] {
+ display: flex;
+ }
+body:not([data-more*="a"]) [data-more="a"],
+body:not([data-more*="b"]) [data-more="b"],
+body:not([data-more*="c"]) [data-more="c"],
+body:not([data-more*="d"]) [data-more="d"],
+body:not([data-more*="f"]) [data-more="f"] {
+ height: 0;
+ margin-bottom: 0 !important;
+ margin-top: 0 !important;
+ overflow-y: hidden;
+ visibility: hidden;
+ }
+body[data-more*="d"] hr[data-more="a"] {
+ display: none;
+ }
+body[data-more*="c"] hr[data-more="f"] {
+ display: none;
+ }
+body[data-more*="c"]:not([data-more*="f"]) hr[data-more="g"] {
+ display: none;
+ }
+body:not([data-more*="e"]) [data-more="e"] {
+ display: none;
+ }
+
+:root #firewall-vspacer {
+ display: none;
+ height: calc(6 * var(--popup-gap));
+ }
+
+/* popup-in-tab mode, useful for screenshots */
+:root.desktop.intab body {
+ overflow: auto;
+ }
+:root.desktop.intab #firewall {
+ max-height: none;
+ }
+
+/* horizontally-constrained viewport */
+:root.portrait:not(.desktop) body {
+ overflow-y: auto;
+ width: 100%;
+ }
+:root.portrait #panes {
+ flex-direction: column;
+ }
+:root.portrait #main {
+ max-width: unset;
+ }
+:root.portrait #firewall {
+ max-height: unset;
+ max-width: unset;
+ min-width: unset;
+ overflow-y: hidden;
+ }
+:root.portrait body[data-more*="e"] #firewall-vspacer {
+ display: block;
+ }
+
+/* touch-driven devices */
+:root.mobile #firewall {
+ line-height: 20px;
+ }
+
+/* mouse-driven devices */
+:root.desktop {
+ display: flex;
+ justify-content: flex-end;
+ }
+:root.desktop body {
+ --popup-gap: calc(var(--font-size) * 0.875);
+ }
+:root.desktop body:not(.off) #switch:hover {
+ fill: rgb(var(--popup-power-ink-rgb) / 90%);
+ }
+:root.desktop body.off #switch:hover {
+ stroke: var(--popup-power-ink);
+ }
+:root.desktop .rulesetTools [id]:hover {
+ background-color: var(--popup-ruleset-tool-surface-hover);
+ }
+:root.desktop .rulesetTools [id]:hover > svg {
+ fill: var(--ink-2);
+ }
+:root.desktop #firewall {
+ direction: rtl;
+ line-height: 1.4;
+ }
+:root.desktop .tool:hover {
+ background-color: var(--popup-toolbar-surface-hover);
+ }
+:root.desktop #moreOrLess > span:hover {
+ background-color: var(--surface-2);
+ /* background-color: var(--popup-toolbar-surface-hover); */
+ }
diff --git a/src/css/settings.css b/src/css/settings.css
new file mode 100644
index 0000000..61a8c0e
--- /dev/null
+++ b/src/css/settings.css
@@ -0,0 +1,74 @@
+body {
+ margin-bottom: 6rem;
+ }
+
+.synopsis {
+ color: var(--ink-0);
+ font-size: var(--font-size-smaller);
+ opacity: var(--medium-em);
+ }
+
+/* surface/ink */
+#themeMood {
+ align-items: stretch;
+ align-self: stretch;
+ display: inline-flex;
+ justify-content: stretch;
+ user-select: none;
+ }
+#themeMood > span {
+ border: 1px solid var(--ink-1);
+ color: var(--ink-1);
+ display: inline-flex;
+ background-color: var(--surface-1);
+ display: inline-block;
+ padding: 0 0.5em;
+ text-align: center;
+ user-select: none;
+ }
+
+/* primary color */
+#themePrimary {
+ align-items: stretch;
+ align-self: stretch;
+ display: inline-flex;
+ justify-content: stretch;
+ position: relative;
+ }
+#themePrimary > span {
+ background-color: rgb(var(--primary-50));
+ display: inline-flex;
+ width: 2em;
+ }
+
+[href="advanced-settings.html"] {
+ display: none;
+ }
+body.advancedUser [href="advanced-settings.html"] {
+ display: inline-flex;
+ }
+
+#localData > div {
+ margin-bottom: var(--default-gap-small);
+ }
+#localData > div:last-of-type {
+ align-items: flex-start;
+ display: flex;
+ flex-direction: column;
+ }
+#localData > div:last-of-type > button {
+ margin-bottom: var(--default-gap-small);
+ min-width: 280px;
+ }
+
+/* Mobile devices */
+
+:root.mobile #localData {
+ max-width: 100vw;
+ }
+:root.mobile #localData > div:last-of-type {
+ align-items: stretch;
+ }
+:root.mobile #localData > div:last-of-type > button {
+ min-width: unset;
+ }
diff --git a/src/css/support.css b/src/css/support.css
new file mode 100644
index 0000000..0afd740
--- /dev/null
+++ b/src/css/support.css
@@ -0,0 +1,110 @@
+@keyframes spin {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+ }
+
+body {
+ margin-bottom: 6rem;
+ }
+
+.body > div {
+ max-width: 800px;
+ }
+h3 {
+ color: var(--fieldset-header-ink);
+ margin-bottom: 0;
+ }
+.supportEntry {
+ display: flex;
+ margin-block: 1em;
+ }
+:root.mobile .supportEntry {
+ flex-direction: column;
+ }
+.supportEntry > * {
+ min-width: 6em;
+ }
+.supportEntry > div:first-of-type {
+ flex-grow: 1;
+ }
+:root:not(.mobile) .supportEntry > div:first-of-type {
+ margin-inline-end: 2em;
+ }
+.supportEntry h3 {
+ margin: 1em 0;
+ }
+
+.e > .supportEntry {
+ flex-direction: column;
+ }
+.e > .supportEntry > div:not(:first-of-type) {
+ margin-top: 1em;
+ }
+.e > .supportEntry select {
+ min-width: 50%;
+ max-width: calc(100% - 1em);
+ }
+body:not(.filterIssue) .body > div.e {
+ display: none;
+}
+body.filterIssue .body > div:not(.e) {
+ display: none;
+}
+body.filterIssue #moreButton {
+ display: none;
+}
+
+body[data-should-update-lists]:not(.updated) .e .createEntry {
+ opacity: 0.25;
+ pointer-events: none;
+}
+
+body:not([data-should-update-lists]) .shouldUpdate {
+ display: none;
+ }
+body.updating {
+ pointer-events: none;
+ }
+body.updating button {
+ filter: grayscale(1);
+ opacity: 0.5;
+ }
+body.updated .shouldUpdate button {
+ display: none;
+ }
+body.updating .shouldUpdate button .fa-icon svg {
+ animation: spin 1s linear infinite;
+ transform-origin: 50%;
+ }
+body .shouldUpdate .updated {
+ align-self: center;
+ }
+body:not(.updated) .shouldUpdate .updated {
+ display: none;
+ }
+
+button {
+ align-self: center;
+ }
+span[data-url] {
+ color: var(--link-ink);
+ cursor: pointer;
+ }
+
+#showSupportInfo {
+ cursor: pointer;
+ }
+
+body.redacted #redactButton {
+ display: none;
+ }
+#unredactButton {
+ display: none;
+ }
+body.redacted #unredactButton {
+ display: inline;
+ }
+
+.cm-string.cm-property {
+ color: black;
+ }
diff --git a/src/css/themes/default.css b/src/css/themes/default.css
new file mode 100644
index 0000000..c37bd28
--- /dev/null
+++ b/src/css/themes/default.css
@@ -0,0 +1,526 @@
+/**
+
+ References:
+ https://protocol.mozilla.org/
+ https://material.io/
+
+ Color names from:
+ https://protocol.mozilla.org/docs/fundamentals/color.html
+
+ Tools:
+ Lightness validator: https://www.hsluv.org/
+ Contrast validator: https://bernaferrari.github.io/color-studio/#/
+*/
+:root {
+ --blue-5: 170 242 255;
+ --blue-10: 128 235 255;
+ --blue-20: 0 221 255;
+ --blue-30: 0 179 244;
+ --blue-40: 0 144 237;
+ --blue-50: 0 96 223;
+ --blue-60: 2 80 187;
+ --blue-70: 5 64 150;
+ --blue-80: 7 48 114;
+ --blue-90: 9 32 77;
+ --dark-gray-10: 82 82 94;
+ --dark-gray-20: 74 74 85;
+ --dark-gray-30: 66 65 77;
+ --dark-gray-40: 58 57 68;
+ --dark-gray-50: 50 49 60;
+ --dark-gray-60: 43 42 51;
+ --dark-gray-70: 35 34 43;
+ --dark-gray-80: 28 27 34;
+ --dark-gray-90: 21 20 26;
+ --green-30: 136 255 209;
+ --green-40: 84 255 189;
+ --green-50: 63 225 176;
+ --green-60: 42 195 162;
+ --green-65: 21 165 149;
+ --green-70: 0 135 135;
+ --green-80: 0 94 94;
+ --ink-10: 57 52 115;
+ --ink-80: 32 18 58;
+ --light-gray-10: 249 249 251;
+ --light-gray-20: 240 240 244;
+ --light-gray-30: 224 224 230;
+ --light-gray-40: 207 207 216;
+ --light-gray-50: 191 191 201;
+ --light-gray-60: 175 175 186;
+ --light-gray-70: 159 159 173;
+ --light-gray-80: 143 143 158;
+ --light-gray-90: 128 128 143;
+ --orange-5: 255 244 222;
+ --orange-10: 255 213 178;
+ --orange-20: 255 181 135;
+ --orange-30: 255 162 102;
+ --orange-40: 255 138 80;
+ --orange-50: 255 113 57;
+ --orange-60: 226 89 32;
+ --orange-70: 204 61 0;
+ --orange-80: 158 40 11;
+ --orange-90: 124 21 4;
+ --purple-5: 247 226 255;
+ --purple-10: 246 184 255;
+ --purple-20: 246 143 255;
+ --purple-30: 247 112 255;
+ --purple-40: 215 76 240;
+ --purple-50: 184 51 225;
+ --purple-60: 149 43 185;
+ --purple-70: 114 34 145;
+ --purple-80: 78 26 105;
+ --purple-90: 43 17 65;
+ --red-20: 255 154 162;
+ --red-30: 255 132 139;
+ --red-40: 255 106 117;
+ --red-50: 255 79 94;
+ --red-60: 226 40 80;
+ --red-70: 197 0 66;
+ --violet-5: 231 223 255;
+ --violet-10: 217 191 255;
+ --violet-20: 203 158 255;
+ --violet-30: 198 137 255;
+ --violet-40: 171 113 255;
+ --violet-50: 144 89 255;
+ --violet-60: 117 66 229;
+ --violet-70: 89 42 203;
+ --violet-80: 69 39 141;
+ --violet-90: 50 28 100;
+ --yellow-5: 255 255 204;
+ --yellow-10: 255 255 152;
+ --yellow-20: 255 234 128;
+ --yellow-30: 255 213 103;
+ --yellow-40: 255 189 79;
+ --yellow-50: 255 164 54;
+ --yellow-60: 226 127 46;
+ --yellow-70: 196 90 39;
+ --yellow-80: 167 52 31;
+ --yellow-90: 150 14 24;
+
+ /*
+ * Reference gray: -light-gray-90, then calibrated with hsluv.org, where
+ * the number is Luv.
+ *
+ * */
+ --gray-5: 16 16 22;
+ --gray-10: 27 27 35;
+ --gray-15: 37 37 47;
+ --gray-20: 47 47 59;
+ --gray-25: 58 58 72;
+ --gray-30: 69 69 85;
+ --gray-35: 81 81 98;
+ --gray-40: 93 93 110;
+ --gray-45: 105 105 121;
+ --gray-50: 118 118 133;
+ --gray-55: 131 131 145;
+ --gray-60: 144 144 156;
+ --gray-65: 157 157 168;
+ --gray-70: 170 170 180;
+ --gray-75: 184 184 192;
+ --gray-80: 198 198 204;
+ --gray-85: 212 212 217;
+ --gray-90: 226 226 229;
+ --gray-95: 240 240 242;
+}
+
+/*
+ * Font
+ *
+ * */
+:root {
+ --font-size: 14px;
+ --font-size-smaller: calc(var(--font-size) - 1px);
+ --font-size-xsmall: calc(var(--font-size) - 3px);
+ --font-size-larger: 15px;
+ --font-family: Inter, sans-serif;
+ --monospace-size: 12px;
+}
+
+:root.mobile {
+ --font-size: 16px;
+ --font-size-smaller: 14px;
+ --monospace-size: 13px;
+}
+
+/*
+ * Default color theme
+ *
+ * Tool: hsluv.org
+ *
+ * */
+:root /* h255 */ {
+ --primary-5: 3 16 40; /* S:90 Luv:5 */
+ --primary-10: 5 27 59; /* S:90 Luv:10 */
+ --primary-20: 14 47 95; /* S:90 Luv:20 */
+ --primary-30: 24 69 134; /* S:90 Luv:30 */
+ --primary-40: 34 93 176; /* S:90 Luv:40 */
+ --primary-50: 45 117 219; /* S:90 Luv:50 */
+ --primary-60: 86 143 244; /* S:90 Luv:60 */
+ --primary-70: 137 170 247; /* S:90 Luv:70 */
+ --primary-80: 179 198 250; /* S:90 Luv:80 */
+ --primary-90: 218 226 252; /* S:90 Luv:90 */
+ --primary-95: 236 240 254; /* S:90 Luv:95 */
+ }
+
+/*
+ * Default dark theme starts here
+ *
+ * https://github.com/uBlockOrigin/uBlock-issues/issues/1027#issuecomment-629641072
+ * Assign a default background color if dark mode is enabled -- hopefully
+ * this will avoid flashes of white background until the document's own CSS
+ * overrides the default color value below.
+ *
+ * */
+@media (prefers-color-scheme: light) {
+ :root {
+ --surface-0-rgb: 255 255 255;
+ --surface-1: rgb(var(--gray-95));
+ --surface-2: rgb(var(--gray-90));
+ --surface-3: rgb(var(--gray-80));
+ }
+}
+@media (prefers-color-scheme: dark) {
+ :root {
+ --surface-0-rgb: 0 0 0;
+ --surface-1: rgb(var(--gray-10));
+ --surface-2: rgb(var(--gray-20));
+ --surface-3: rgb(var(--gray-30));
+ }
+}
+
+:root.light {
+ --surface-0-rgb: 255 255 255;
+ --surface-1: rgb(var(--gray-95));
+ --surface-2: rgb(var(--gray-90));
+ --surface-3: rgb(var(--gray-80));
+}
+
+:root.dark {
+ --surface-0-rgb: 0 0 0;
+ --surface-1: rgb(var(--gray-10));
+ --surface-2: rgb(var(--gray-20));
+ --surface-3: rgb(var(--gray-30));
+}
+
+/*
+ * Components
+ *
+ * */
+:root {
+ --font-size: 14px;
+
+ --ubo-red: #800000;
+
+ --elevation-up-surface: black;
+ --elevation-up1-opacity: 4%;
+ --elevation-up2-opacity: 8%;
+ --elevation-down-surface: white;
+ --elevation-down1-opacity: 16%;
+ --elevation-down2-opacity: 32%;
+
+ /* https://material.io/design/color/text-legibility.html#text-backgrounds */
+ --ink-rgb: var(--ink-80);
+ --ink-0: black;
+ --ink-100: white;
+
+ --border-1: rgb(var(--gray-75));
+ --border-2: rgb(var(--gray-70));
+ --border-3: rgb(var(--gray-65));
+ --border-4: rgb(var(--gray-60));
+
+ --accent-ink-3: var(--ink-1);
+ --accent-surface-1: rgb(var(--primary-40));
+
+ --link-ink: rgb(var(--primary-40));
+ --link-hover-ink: rgb(var(--primary-30));
+
+ /* buttons */
+ --button-surface-rgb: var(--gray-80);
+
+ --dashboard-tab-active-ink-rgb: var(--primary-40);
+ --dashboard-tab-focus-surface-rgb: var(--primary-90);
+ --dashboard-highlight-surface-rgb: var(--primary-90);
+
+ --dashboard-happy-green: rgb(var(--green-65));
+
+ /* popup panel */
+ --popup-cell-cname-ink: #0054d7; /* h260 S:100 Luv:40 */;
+ --popup-cell-label-mixed-surface: #c29100; /* TODO: fix */
+ --popup-icon-x-ink: rgb(var(--red-60));
+ --popup-power-ink-rgb: var(--primary-50);
+
+ /* horizontal line separator */
+ --hr-ink: var(--surface-2);
+
+ /* cloud widget */
+ --cloud-total-used-surface: rgb(var(--violet-60) / 25%);
+ --cloud-used-surface: rgb(var(--violet-60));
+
+ /* misc */
+ --error-surface: #c00004; /* h:12 S:100 Luv:40 */
+
+ /* codemirror */
+ --cm-active-line: rgb(var(--gray-90));
+ --cm-cursor: var(--ink-0);
+ --cm-foldmarker-ink: rgb(var(--blue-40));
+ --cm-gutter-border: var(--surface-1);
+ --cm-gutter-ink: var(--ink-3);
+ --cm-gutter-surface: var(--surface-2);
+ --cm-matchingbracket: rgb(var(--green-30));
+ --cm-merge-copy-ink: rgb(var(--blue-50));
+ --cm-merge-chunk-border: rgb(var(--surface-0-rgb) / 40%);
+ --cm-merge-chunk-surface: rgb(var(--surface-0-rgb) / 40%);
+ --cm-negative: #e32f00; /* h:15 S:100 Luv:50 */
+ --cm-positive: #008a21; /* h:130 S:100 Luv:50 */
+ --cm-selection-surface: rgb(var(--gray-80));
+ --cm-selection-focused-surface: rgb(var(--primary-80));
+ --cm-searching-ink: black;
+ --cm-searching-surface: #fee300cc /* h75 S:100 Luv:90 a:80% */;
+ --cm-search-match-surface: rgb(var(--yellow-40) / 50%);
+
+ /* syntax highlight: static filtering */
+ --sf-comment-ink: var(--ink-3);
+ --sf-def-ink: #3c3aff; /* h:266 S:100 Luv:40 */
+ --sf-directive-ink: var(--ink-1);
+ --sf-error-ink: #ff8981; /* h15 S:100 Luv:70 */
+ --sf-error-surface: #ff898133; /* h15 S:100 Luv:70 @ 20% */
+ --sf-keyword-ink: #9b00ca; /* h:290 S:100 Luv:40 */
+ --sf-notice-ink: var(--ink-4);
+ --sf-readonly-ink: var(--ink-3);
+ --sf-tag-ink: #006e2e /* h:135 S:100 Luv:40 */;
+ --sf-unicode-ink: var(--ink-1);
+ --sf-value-ink: #974900 /* h:30 S:100 Luv:40 */;
+ --sf-variable-ink: var(--ink-1);
+ --sf-warning-ink: #e49d00; /* h:50 S:100 Luv:70 */
+ --sf-warning-surface: #e49d0033; /* h:50 S:100 Luv:70 @ 20% */
+
+ /* syntax highlight: dynamic filtering */
+ --df-allow-ink: var(--cm-positive);
+ --df-block-ink: var(--cm-negative);
+ --df-noop-ink: rgb(var(--dark-gray-10));
+
+ /* logger */
+ --logger-modified-surface: #0000c010;
+ --logger-modified-em-surface: #0000c028;
+ --logger-redirected-surface: rgb(var(--yellow-5) / 50%);
+ --logger-scriptlet-surface: rgb(var(--yellow-30) / 50%);
+}
+
+/* https://material.io/design/color/dark-theme.html */
+:root.dark {
+ --elevation-down-surface: black;
+ --elevation-down1-opacity: 16%;
+ --elevation-down2-opacity: 32%;
+ --elevation-up-surface: white;
+ --elevation-up1-opacity: 12%;
+ --elevation-up2-opacity: 24%;
+
+ --ink-rgb: var(--gray-95);
+ --ink-0: white;
+ --ink-100: black;
+
+ --border-1: rgb(var(--gray-35));
+ --border-2: rgb(var(--gray-40));
+ --border-3: rgb(var(--gray-45));
+ --border-4: rgb(var(--gray-50));
+
+ --accent-surface-1: rgb(var(--primary-70));
+
+ --link-ink: rgb(var(--primary-70));
+ --link-hover-ink: rgb(var(--primary-80));
+
+ /* buttons */
+ --button-surface-rgb: var(--gray-30);
+
+ --dashboard-tab-active-ink-rgb: var(--primary-70);
+ --dashboard-tab-focus-surface-rgb: var(--primary-20);
+ --dashboard-highlight-surface-rgb: var(--primary-20);
+
+ /* popup panel */
+ --popup-cell-cname-ink: #93a6ff; /* h260 S:100 Luv:70 */;
+ --popup-cell-label-mixed-surface: hsla(45, 100%, 38%, 1); /* TODO: fix */
+ --popup-icon-x-ink: rgb(var(--red-50));
+ --popup-power-ink-rgb: var(--primary-60);
+
+ /* cloud widget */
+ --cloud-total-used-surface: rgb(var(--violet-20) / 25%);
+ --cloud-used-surface: rgb(var(--violet-20));
+
+ /* misc */
+ --error-surface: #ff5354; /* h:12 S:100 Luv:60 */
+
+ /* codemirror */
+ --cm-active-line: rgb(var(--gray-20));
+ --cm-merge-copy-ink: rgb(var(--blue-30));
+ --cm-foldmarker-ink: rgb(var(--blue-20));
+ --cm-matchingbracket: rgb(var(--green-30) / 50%);
+ --cm-negative: #ff8982; /* h:15 S:100 Luv:70 */
+ --cm-positive: #00c634; /* h:130 S:100 Luv:70 */
+ --cm-selection-surface: rgb(var(--gray-40));
+ --cm-selection-focused-surface: rgb(var(--primary-40));
+ --cm-searching-ink: black;
+ --cm-searching-surface: #fee300cc /* h75 S:100 Luv:90 a:80% */;
+
+ /* syntax highlight: static filtering */
+ --sf-comment-ink: var(--ink-3);
+ --sf-def-ink: #a2a2ff; /* h:266 S:100 Luv:70 */
+ --sf-error-ink: #ff8981; /* h15 S:100 Luv:70 */
+ --sf-error-surface: #ff898166; /* h15 S:100 Luv:70 @ 40% */
+ --sf-keyword-ink: #d78dff; /* h:290 S:100 Luv:70 */
+ --sf-tag-ink: #00c559 /* h:135 S:100 Luv:70 */;
+ --sf-value-ink: #ff8d48 /* h:30 S:100 Luv:70 */;
+ --sf-variable-ink: var(--ink-1);
+ --sf-warning-ink: #e49d00; /* h:50 S:100 Luv:70 */
+ --sf-warning-surface: #e49d0066; /* h:50 S:100 Luv:50 @ 40% */
+
+ /* syntax highlight: dynamic filtering */
+ --df-noop-ink: var(--ink-3);
+
+ /* logger */
+ --logger-modified-surface: #663efd60;
+ --logger-redirected-surface: rgb(var(--yellow-5) / 40%);
+ --logger-scriptlet-surface: rgb(var(--yellow-30) / 40%);
+}
+
+:root.dark input,
+:root.dark select,
+:root.dark textarea {
+ color-scheme: dark;
+}
+
+/*
+ * Shared declarations
+ * */
+:root {
+ --high-em: 87%;
+ --medium-em: 60%;
+ --low-em: 38%;
+
+ --surface-0: rgb(var(--surface-0-rgb));
+
+ --ink-1: rgb(var(--ink-rgb));
+ --ink-2: rgb(var(--ink-rgb) / var(--high-em));
+ --ink-3: rgb(var(--ink-rgb) / var(--medium-em));
+ --ink-4: rgb(var(--ink-rgb) / var(--low-em));
+
+ --accent-ink-1: var(--surface-0);
+ --accent-ink-3: var(--ink-1);
+
+ --subtil-ink: var(--accent-surface-1);
+
+ --fieldset-header-surface: transparent;
+ --fieldset-header-ink: var(--ink-2);
+
+ --button-ink: var(--ink-1);
+ --button-surface: rgb(var(--button-surface-rgb));
+ --button-border-radius: 5px;
+ --button-preferred-ink: var(--accent-ink-1);
+ --button-preferred-surface: var(--accent-surface-1);
+ --button-disabled-surface: var(--surface-3);
+ --button-disabled-filter: opacity(50%);
+
+ --checkbox-size: calc(var(--font-size) + 2px);
+ --checkbox-ink: var(--ink-3);
+ --checkbox-checked-ink: var(--accent-surface-1);
+ --checkbox-disabled-filter: opacity(50%);
+ --checkbox-margin-end: calc(var(--font-size) * 0.75);
+
+ --notice-ink: var(--accent-ink-1);
+ --notice-surface: var(--accent-surface-1);
+ --notice-surface-shadow: #000 0 2px 8px;
+
+ --dashboard-tab-ink: var(--ink-1);
+ --dashboard-tab-active-ink: rgb(var(--dashboard-tab-active-ink-rgb));
+ --dashboard-tab-active-surface: transparent;
+ --dashboard-tab-focus-surface: rgb(var(--dashboard-tab-focus-surface-rgb));
+ --dashboard-tab-hover-surface: var(--surface-2);
+ --dashboard-tab-hover-border: var(--surface-3);
+
+ /* info levels: normal, fyi, warn, error -- we want same Luv */
+ --info0-ink-rgb: 119 119 119; /* h: 0 S: 0 Luv:60 */
+ --info1-ink-rgb: 72 143 255; /* h:255 S:100 Luv:60 */
+ --info2-ink-rgb: 208 125 0; /* h: 40 S:100 Luv:60 */
+ --info3-ink-rgb: 255 82 94; /* h: 10 S:100 Luv:60 */
+ --info0-ink: rgb(var(--info0-ink-rgb));
+ --info1-ink: rgb(var(--info1-ink-rgb));
+ --info2-ink: rgb(var(--info2-ink-rgb));
+ --info3-ink: rgb(var(--info3-ink-rgb));
+
+ --popup-cell-surface: var(--surface-2);
+ --popup-cell-label-filter: opacity(40%);
+ --popup-cell-allow-own-surface: rgb(var(--popup-cell-allow-own-surface-rgb));
+ --popup-cell-allow-surface: rgb(var(--popup-cell-allow-surface-rgb));
+ --popup-cell-noop-own-surface: rgb(var(--popup-cell-noop-own-surface-rgb));
+ --popup-cell-noop-surface: rgb(var(--popup-cell-noop-surface-rgb));
+ --popup-cell-block-own-surface: rgb(var(--popup-cell-block-own-surface-rgb));
+ --popup-cell-block-surface: rgb(var(--popup-cell-block-surface-rgb));
+ --popup-power-ink: rgb(var(--popup-power-ink-rgb));
+ --popup-toolbar-surface: rgb(var(--primary-80) / 15%);
+ --popup-toolbar-surface-hover: rgb(var(--primary-80) / 20%);
+ --popup-ruleset-tool-ink: var(--ink-1);
+ --popup-ruleset-tool-surface: rgb(var(--primary-80) / 15%);
+ --popup-ruleset-tool-surface-hover: rgb(var(--primary-80) / 20%);
+ --popup-ruleset-tool-shadow: transparent;
+}
+
+/*
+ * Rule colors
+ * */
+:root:not(.dark):not(.colorBlind) {
+ --popup-cell-allow-own-surface-rgb: 0 127 0; /* h:127.7 S:100 Luv:45 */
+ --popup-cell-allow-surface-rgb: 129 202 129; /* h:127.7 S:50 Luv:75 */
+ --popup-cell-block-own-surface-rgb: 216 0 0; /* h:12.2 S:100 Luv:45 */
+ --popup-cell-block-surface-rgb: 224 172 172; /* h:12.2 S:50 Luv:75 */
+ --popup-cell-noop-own-surface-rgb: 107 107 107; /* h:0 S:0 Luv:45 */
+ --popup-cell-noop-surface-rgb: 185 185 185; /* h:0 S:0 Luv:75 */
+}
+
+:root.dark:not(.colorBlind) {
+ --popup-cell-allow-own-surface-rgb: 0 153 0; /* h:127.7 S:100 Luv:55 */
+ --popup-cell-allow-surface-rgb: 73 117 73; /* h:127.7 S:50 Luv:45 */
+ --popup-cell-block-own-surface-rgb: 255 40 40; /* h:12.2 S:100 Luv:55 */
+ --popup-cell-block-surface-rgb: 175 74 74; /* h:12.2 S:50 Luv:45 */
+ --popup-cell-noop-own-surface-rgb: 132 132 132; /* h:0 S:0 Luv:55 */
+ --popup-cell-noop-surface-rgb: 94 94 94; /* h:0 S:0 Luv:40 */
+}
+
+/*
+ * Source for color-blind color scheme:
+ * https://davidmathlogic.com/colorblind/
+ * First pair in "Accessible palettes"
+ *
+ * */
+:root.colorBlind {
+ --popup-cell-allow-own-surface-rgb: 151 113 0; /* h:58.5 S:100 Luv:50 */
+ --popup-cell-block-own-surface-rgb: 0 120 216; /* h:252 S:100 Luv:50 */
+ --popup-cell-noop-own-surface-rgb: 119 119 119; /* h:0 S:0 Luv:50 */
+ --popup-cell-label-mixed-surface: #ff6a00; /* TODO: fix */
+}
+:root.colorBlind:not(.dark) {
+ --popup-cell-allow-surface-rgb: 223 178 92; /* h:58.5 S:75 Luv:75 */
+ --popup-cell-block-surface-rgb: 159 185 238; /* h:252 S:75 Luv:75 */
+ --popup-cell-noop-surface-rgb: 185 185 185; /* h:0 S:0 Luv:75 */
+}
+:root.dark.colorBlind {
+ --popup-cell-allow-surface-rgb: 115 91 44; /* h:58.5 S:75 Luv:40 */
+ --popup-cell-block-surface-rgb: 53 95 154; /* h:252 S:75 Luv:40 */
+ --popup-cell-noop-surface-rgb: 94 94 94; /* h:0 S:0 Luv:40 */
+}
+
+:root.classic:not(.dark) {
+ --notice-ink: rgb(var(--ink-80));
+ --notice-surface: rgb(var(--yellow-5));
+ --popup-power-ink-rgb: 0 110 254;
+ --popup-ruleset-tool-ink: var(--ink-1);
+ --popup-ruleset-tool-surface: rgb(var(--yellow-5) / 50%);
+ --popup-ruleset-tool-surface-hover: rgb(var(--yellow-5) / 75%);
+ --popup-ruleset-tool-shadow: rgb(var(--gray-85));
+}
+
+/*
+ * Experiment: use Firefox for Android dark theme colors
+:root.mobile.dark {
+ --gray-10: 43 42 51;
+ --gray-20: 66 65 77;
+ --ink-rgb: 251 251 254;
+}
+*/
diff --git a/src/css/whitelist.css b/src/css/whitelist.css
new file mode 100644
index 0000000..715c964
--- /dev/null
+++ b/src/css/whitelist.css
@@ -0,0 +1,22 @@
+html {
+ height: 100vh;
+ overflow: hidden;
+ width: 100vw;
+ }
+body {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ justify-content: stretch;
+ overflow: hidden;
+ width: 100%;
+ }
+.body {
+ flex-shrink: 0;
+ }
+.codeMirrorContainer {
+ flex-grow: 1;
+ }
+#whitelist {
+ text-align: left;
+ }
diff --git a/src/dashboard.html b/src/dashboard.html
new file mode 100644
index 0000000..859de58
--- /dev/null
+++ b/src/dashboard.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
+<title data-i18n="dashboardName"></title>
+<link href="css/themes/default.css" rel="stylesheet" type="text/css">
+<link href="css/common.css" rel="stylesheet" type="text/css">
+<link href="css/dashboard.css" rel="stylesheet" type="text/css">
+<link rel="shortcut icon" type="image/png" href="img/icon_64.png">
+</head>
+
+<body class="notReady">
+
+<div id="dashboard-nav">
+ <span class="logo"><img data-i18n-title="extName" src="img/ublock.svg"></span><!--
+ --><button class="tabButton" type="button" data-pane="settings.html" data-i18n="settingsPageName" tabindex="0"></button><!--
+ --><button class="tabButton" type="button" data-pane="3p-filters.html" data-i18n="3pPageName" tabindex="0"></button><!--
+ --><button class="tabButton" type="button" data-pane="1p-filters.html" data-i18n="1pPageName" tabindex="0"></button><!--
+ --><button class="tabButton" type="button" data-pane="dyna-rules.html" data-i18n="rulesPageName" tabindex="0"></button><!--
+ --><button class="tabButton" type="button" data-pane="whitelist.html" data-i18n="whitelistPageName" tabindex="0"></button><!--
+ --><button class="tabButton" type="button" data-pane="support.html" data-i18n="supportPageName" tabindex="0"></button><!--
+ --><button class="tabButton" type="button" data-pane="about.html" data-i18n="aboutPageName" tabindex="0"></button><!--
+ --><button class="tabButton" type="button" data-pane="no-dashboard.html"></button>
+</div>
+<section id="unsavedWarning" class="notice">
+ <div>
+ <span data-i18n="dashboardUnsavedWarning"></span>&emsp;
+ <button type="button" data-i18n="dashboardUnsavedWarningStay">_<span class="hover"></span></button>&ensp;
+ <button type="button" data-i18n="dashboardUnsavedWarningIgnore">_<span class="hover"></span></button>
+ </div>
+ <div></div>
+</section>
+
+<iframe id="iframe" src=""></iframe>
+
+<script src="lib/hsluv/hsluv-0.1.0.min.js"></script>
+
+<script src="js/vapi.js"></script>
+<script src="js/vapi-common.js"></script>
+<script src="js/vapi-client.js"></script>
+<script src="js/theme.js" type="module"></script>
+<script src="js/i18n.js" type="module"></script>
+<script src="js/dashboard.js" type="module"></script>
+
+</body>
+</html>
diff --git a/src/devtools.html b/src/devtools.html
new file mode 100644
index 0000000..af7b972
--- /dev/null
+++ b/src/devtools.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>uBlock — Dev tools</title>
+
+<link rel="stylesheet" href="lib/codemirror/lib/codemirror.css">
+<link rel="stylesheet" href="lib/codemirror/addon/fold/foldgutter.css">
+<link rel="stylesheet" href="lib/codemirror/addon/search/matchesonscrollbar.css">
+
+<link rel="stylesheet" href="css/themes/default.css">
+<link rel="stylesheet" href="css/common.css">
+<link rel="stylesheet" href="css/fa-icons.css">
+<link rel="stylesheet" href="css/dashboard-common.css">
+<link rel="stylesheet" href="css/cloud-ui.css">
+<link rel="stylesheet" href="css/devtools.css">
+<link rel="stylesheet" href="css/codemirror.css">
+</head>
+
+<body>
+
+<div class="body">
+ <p>
+ <button id="console-clear" class="iconified" type="button"><span class="fa-icon">trash-o</span><span class="hover"></span></button>
+ <button id="console-fold" class="iconified" type="button"><span class="fa-icon">double-angle-up</span><span class="hover"></span></button>
+ <button id="console-unfold" class="iconified" type="button"><span class="fa-icon fa-icon-vflipped">double-angle-up</span><span class="hover"></span></button>
+ <button id="snfe-dump" type="button">SNFE: Dump<span class="hover"></span></button>
+ <button id="snfe-todnr" type="button">SNFE: DNR<span class="hover"></span></button>
+ <button id="snfe-benchmark" type="button" disabled>SNFE: Benchmark<span class="hover"></span></button>
+ <button id="cfe-dump" type="button">CFE: Dump<span class="hover"></span></button>
+ <button id="purge-all-caches" type="button" data-i18n-title="3pPurgeAll"><span data-i18n="3pPurgeAll">_</span><span class="hover"></span></button>
+</div>
+<div id="console" class="codeMirrorContainer"></div>
+
+<script src="lib/codemirror/lib/codemirror.js"></script>
+<script src="lib/codemirror/addon/display/panel.js"></script>
+<script src="lib/codemirror/addon/fold/foldcode.js"></script>
+<script src="lib/codemirror/addon/fold/foldgutter.js"></script>
+<script src="lib/codemirror/addon/scroll/annotatescrollbar.js"></script>
+<script src="lib/codemirror/addon/search/searchcursor.js"></script>
+<script src="lib/codemirror/addon/selection/active-line.js"></script>
+<script src="lib/hsluv/hsluv-0.1.0.min.js"></script>
+
+<script src="js/vapi.js"></script>
+<script src="js/vapi-common.js"></script>
+<script src="js/vapi-client.js"></script>
+
+<script src="js/codemirror/search.js" type="module"></script>
+<script src="js/codemirror/search-thread.js"></script>
+
+<script src="js/fa-icons.js" type="module"></script>
+<script src="js/theme.js" type="module"></script>
+<script src="js/i18n.js" type="module"></script>
+<script src="js/dashboard-common.js" type="module"></script>
+<script src="js/devtools.js" type="module"></script>
+
+</body>
+</html>
diff --git a/src/document-blocked.html b/src/document-blocked.html
new file mode 100644
index 0000000..80a4546
--- /dev/null
+++ b/src/document-blocked.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1 user-scalable=yes">
+<title data-i18n="docblockedTitle"></title>
+<link rel="stylesheet" href="css/themes/default.css">
+<link rel="stylesheet" href="css/common.css">
+<link rel="stylesheet" href="css/fa-icons.css">
+<link rel="stylesheet" href="css/document-blocked.css">
+<link rel="shortcut icon" type="image/png" href="img/icon_64.png">
+</head>
+<body>
+<div id="rootContainer">
+ <div id="warningSign">
+ <a class="fa-icon" href="https://github.com/gorhill/uBlock/wiki/Strict-blocking" target="_blank" rel="noopener noreferrer">exclamation-triangle</a>
+ </div>
+
+ <div>
+ <p data-i18n="docblockedPrompt1">_</p>
+ <div id="theURL" class="collapsed">
+ <p class="code"><span>&nbsp;</span><span id="toggleParse" class="hidden"><span class="fa-icon">zoom-in</span><span class="fa-icon">zoom-out</span></span></p>
+ <ul id="parsed"></ul>
+ </div>
+ </div>
+
+ <div>
+ <p data-i18n="docblockedPrompt2">_</p>
+ <p id="why" class="code">&nbsp;</p>
+ <div id="whyex" style="visibility: hidden;">
+ <span data-i18n="docblockedFoundIn">_</span>
+ <ul><li class="filterList">&nbsp;</ul>
+ </div>
+ </div>
+
+ <div class="li">
+ <label><span class="input checkbox"><input type="checkbox" id="disableWarning"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span data-i18n="docblockedDontWarn">_</span></label>
+ </div>
+
+ <div id="actionContainer">
+ <button id="back" data-i18n="docblockedBack" type="button">_<span class="hover"></span></button>
+ <button id="bye" data-i18n="docblockedClose" type="button">_<span class="hover"></span></button>
+ <button id="proceed" class="preferred" data-i18n="docblockedDisable" type="button"><span class="hover"></span></button>
+ </div>
+
+ <div id="templates" style="display: none;">
+ <li class="filterList">
+ <a class="filterListSource" href="asset-viewer.html?url=" target="_blank"></a>&nbsp;<!--
+ --><a class="fa-icon filterListSupport hidden" href="#" target="_blank" rel="noopener noreferrer">home</a>
+ </span>
+ </div>
+</div>
+
+<script src="lib/hsluv/hsluv-0.1.0.min.js"></script>
+
+<script src="js/fa-icons.js" type="module"></script>
+<script src="js/vapi.js"></script>
+<script src="js/vapi-common.js"></script>
+<script src="js/vapi-client.js"></script>
+<script src="js/theme.js" type="module"></script>
+<script src="js/i18n.js" type="module"></script>
+<script src="js/document-blocked.js" type="module"></script>
+</body>
+</html>
diff --git a/src/dyna-rules.html b/src/dyna-rules.html
new file mode 100644
index 0000000..c9dd3bc
--- /dev/null
+++ b/src/dyna-rules.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>uBlock — Dynamic filtering rules</title>
+<link rel="stylesheet" href="lib/codemirror/lib/codemirror.css">
+<link rel="stylesheet" href="lib/codemirror/addon/merge/merge.css">
+
+<link rel="stylesheet" href="css/themes/default.css">
+<link rel="stylesheet" href="css/common.css">
+<link rel="stylesheet" href="css/fa-icons.css">
+<link rel="stylesheet" href="css/dashboard-common.css">
+<link rel="stylesheet" href="css/cloud-ui.css">
+<link rel="stylesheet" href="css/dyna-rules.css">
+<link rel="stylesheet" href="css/codemirror.css">
+</head>
+
+<body>
+
+<div class="body">
+ <div id="cloudWidget" class="hide" data-cloud-entry="myRulesPane"></div>
+ <p class="vverbose"><span data-i18n="rulesHint"></span> <a class="fa-icon info" href="https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-rule-syntax" target="_blank">info-circle</a></p>
+ <div id="diff">
+ <div class="tools">
+ <div class="ruleActions">
+ <div class="fieldset-header" data-i18n="rulesPermanentHeader"></div>
+ <button type="button" class="iconified" id="exportButton"><span class="fa-icon">upload-alt</span><span data-i18n="rulesExport">_</span><span class="hover"></span></button>
+ <button type="button" class="iconified disabled" id="revertButton"><span class="fa-icon">arrow-right</span><span data-i18n="rulesRevert">_</span><span class="hover"></span></button>
+ </div>
+ <div class="ruleActions">
+ <div class="fieldset-header" data-i18n="rulesTemporaryHeader"></div>
+ <button type="button" class="iconified disabled" id="commitButton"><span class="fa-icon fa-icon-hflipped">arrow-right</span><span data-i18n="rulesCommit">_</span><span class="hover"></span></button>
+ <button type="button" class="iconified" id="importButton"><span class="fa-icon">download-alt</span><span data-i18n="rulesImport">_</span><span class="hover"></span></button>
+ <button type="button" class="iconified preferred disabled" id="editSaveButton"><span class="fa-icon">save</span><span data-i18n="rulesEditSave">_</span><span class="hover"></span></button>
+ </div>
+ </div>
+ </div>
+</div>
+<div id="ruleFilter">
+ <span><span class="fa-icon">filter</span>&nbsp;<input type="search" size="16"></span>&emsp;<span data-i18n="rulesSort"></span>&nbsp;<select><option value="0" selected data-i18n="rulesSortByType"><option value="1" data-i18n="rulesSortBySource"><option value="2" data-i18n="rulesSortByDestination"></select>&emsp;<span id="diffCollapse" class="fa-icon">double-angle-up</span>
+</div>
+<div class="codeMirrorContainer codeMirrorMergeContainer"></div>
+
+<div id="templates" style="display: none;">
+ <input class="hidden" id="importFilePicker" type="file" accept="text/plain">
+ <span class="hidden" data-i18n="rulesDefaultFileName"></span>
+</div>
+
+<script src="lib/diff/swatinem_diff.js"></script>
+<script src="lib/codemirror/lib/codemirror.js"></script>
+<script src="lib/codemirror/addon/merge/merge.js"></script>
+<script src="lib/codemirror/addon/selection/active-line.js"></script>
+<script src="lib/hsluv/hsluv-0.1.0.min.js"></script>
+
+<script src="js/fa-icons.js" type="module"></script>
+<script src="js/vapi.js"></script>
+<script src="js/vapi-common.js"></script>
+<script src="js/vapi-client.js"></script>
+<script src="js/theme.js" type="module"></script>
+<script src="js/i18n.js" type="module"></script>
+<script src="js/dashboard-common.js" type="module"></script>
+<script src="js/cloud-ui.js" type="module"></script>
+<script src="js/dyna-rules.js" type="module"></script>
+
+</body>
+</html>
diff --git a/src/img/cloud.png b/src/img/cloud.png
new file mode 100644
index 0000000..6c78dde
--- /dev/null
+++ b/src/img/cloud.png
Binary files differ
diff --git a/src/img/flags-of-the-world/README b/src/img/flags-of-the-world/README
new file mode 100644
index 0000000..d388796
--- /dev/null
+++ b/src/img/flags-of-the-world/README
@@ -0,0 +1,9 @@
+Source of all images in this folder:
+ https://flagpedia.net/
+
+Licence:
+ https://flagpedia.net/about
+
+> Flag images are in the public domain (exempt from copyright).
+> They are completely free for non-commercial and even commercial use.
+> You can also download all flags."
diff --git a/src/img/flags-of-the-world/ad.png b/src/img/flags-of-the-world/ad.png
new file mode 100644
index 0000000..4df2966
--- /dev/null
+++ b/src/img/flags-of-the-world/ad.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ae.png b/src/img/flags-of-the-world/ae.png
new file mode 100644
index 0000000..c182e95
--- /dev/null
+++ b/src/img/flags-of-the-world/ae.png
Binary files differ
diff --git a/src/img/flags-of-the-world/af.png b/src/img/flags-of-the-world/af.png
new file mode 100644
index 0000000..a8fc95d
--- /dev/null
+++ b/src/img/flags-of-the-world/af.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ag.png b/src/img/flags-of-the-world/ag.png
new file mode 100644
index 0000000..4b54da8
--- /dev/null
+++ b/src/img/flags-of-the-world/ag.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ai.png b/src/img/flags-of-the-world/ai.png
new file mode 100644
index 0000000..c536a35
--- /dev/null
+++ b/src/img/flags-of-the-world/ai.png
Binary files differ
diff --git a/src/img/flags-of-the-world/al.png b/src/img/flags-of-the-world/al.png
new file mode 100644
index 0000000..6d70fe9
--- /dev/null
+++ b/src/img/flags-of-the-world/al.png
Binary files differ
diff --git a/src/img/flags-of-the-world/am.png b/src/img/flags-of-the-world/am.png
new file mode 100644
index 0000000..2d9be46
--- /dev/null
+++ b/src/img/flags-of-the-world/am.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ao.png b/src/img/flags-of-the-world/ao.png
new file mode 100644
index 0000000..0b4e533
--- /dev/null
+++ b/src/img/flags-of-the-world/ao.png
Binary files differ
diff --git a/src/img/flags-of-the-world/aq.png b/src/img/flags-of-the-world/aq.png
new file mode 100644
index 0000000..1f1f14a
--- /dev/null
+++ b/src/img/flags-of-the-world/aq.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ar.png b/src/img/flags-of-the-world/ar.png
new file mode 100644
index 0000000..394ac6a
--- /dev/null
+++ b/src/img/flags-of-the-world/ar.png
Binary files differ
diff --git a/src/img/flags-of-the-world/as.png b/src/img/flags-of-the-world/as.png
new file mode 100644
index 0000000..0a2075e
--- /dev/null
+++ b/src/img/flags-of-the-world/as.png
Binary files differ
diff --git a/src/img/flags-of-the-world/at.png b/src/img/flags-of-the-world/at.png
new file mode 100644
index 0000000..f89b8b4
--- /dev/null
+++ b/src/img/flags-of-the-world/at.png
Binary files differ
diff --git a/src/img/flags-of-the-world/au.png b/src/img/flags-of-the-world/au.png
new file mode 100644
index 0000000..e44d53e
--- /dev/null
+++ b/src/img/flags-of-the-world/au.png
Binary files differ
diff --git a/src/img/flags-of-the-world/aw.png b/src/img/flags-of-the-world/aw.png
new file mode 100644
index 0000000..50cd2e8
--- /dev/null
+++ b/src/img/flags-of-the-world/aw.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ax.png b/src/img/flags-of-the-world/ax.png
new file mode 100644
index 0000000..9f49dcc
--- /dev/null
+++ b/src/img/flags-of-the-world/ax.png
Binary files differ
diff --git a/src/img/flags-of-the-world/az.png b/src/img/flags-of-the-world/az.png
new file mode 100644
index 0000000..5eb5088
--- /dev/null
+++ b/src/img/flags-of-the-world/az.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ba.png b/src/img/flags-of-the-world/ba.png
new file mode 100644
index 0000000..31ae9f6
--- /dev/null
+++ b/src/img/flags-of-the-world/ba.png
Binary files differ
diff --git a/src/img/flags-of-the-world/bb.png b/src/img/flags-of-the-world/bb.png
new file mode 100644
index 0000000..a754379
--- /dev/null
+++ b/src/img/flags-of-the-world/bb.png
Binary files differ
diff --git a/src/img/flags-of-the-world/bd.png b/src/img/flags-of-the-world/bd.png
new file mode 100644
index 0000000..9cd5932
--- /dev/null
+++ b/src/img/flags-of-the-world/bd.png
Binary files differ
diff --git a/src/img/flags-of-the-world/be.png b/src/img/flags-of-the-world/be.png
new file mode 100644
index 0000000..5c72923
--- /dev/null
+++ b/src/img/flags-of-the-world/be.png
Binary files differ
diff --git a/src/img/flags-of-the-world/bf.png b/src/img/flags-of-the-world/bf.png
new file mode 100644
index 0000000..ff6d6d2
--- /dev/null
+++ b/src/img/flags-of-the-world/bf.png
Binary files differ
diff --git a/src/img/flags-of-the-world/bg.png b/src/img/flags-of-the-world/bg.png
new file mode 100644
index 0000000..699d315
--- /dev/null
+++ b/src/img/flags-of-the-world/bg.png
Binary files differ
diff --git a/src/img/flags-of-the-world/bh.png b/src/img/flags-of-the-world/bh.png
new file mode 100644
index 0000000..025124d
--- /dev/null
+++ b/src/img/flags-of-the-world/bh.png
Binary files differ
diff --git a/src/img/flags-of-the-world/bi.png b/src/img/flags-of-the-world/bi.png
new file mode 100644
index 0000000..2153878
--- /dev/null
+++ b/src/img/flags-of-the-world/bi.png
Binary files differ
diff --git a/src/img/flags-of-the-world/bj.png b/src/img/flags-of-the-world/bj.png
new file mode 100644
index 0000000..ffc7c29
--- /dev/null
+++ b/src/img/flags-of-the-world/bj.png
Binary files differ
diff --git a/src/img/flags-of-the-world/bl.png b/src/img/flags-of-the-world/bl.png
new file mode 100644
index 0000000..6a9d436
--- /dev/null
+++ b/src/img/flags-of-the-world/bl.png
Binary files differ
diff --git a/src/img/flags-of-the-world/bm.png b/src/img/flags-of-the-world/bm.png
new file mode 100644
index 0000000..9646117
--- /dev/null
+++ b/src/img/flags-of-the-world/bm.png
Binary files differ
diff --git a/src/img/flags-of-the-world/bn.png b/src/img/flags-of-the-world/bn.png
new file mode 100644
index 0000000..0e0cd68
--- /dev/null
+++ b/src/img/flags-of-the-world/bn.png
Binary files differ
diff --git a/src/img/flags-of-the-world/bo.png b/src/img/flags-of-the-world/bo.png
new file mode 100644
index 0000000..9fb5a4e
--- /dev/null
+++ b/src/img/flags-of-the-world/bo.png
Binary files differ
diff --git a/src/img/flags-of-the-world/bq.png b/src/img/flags-of-the-world/bq.png
new file mode 100644
index 0000000..3d7bc43
--- /dev/null
+++ b/src/img/flags-of-the-world/bq.png
Binary files differ
diff --git a/src/img/flags-of-the-world/br.png b/src/img/flags-of-the-world/br.png
new file mode 100644
index 0000000..42a6e99
--- /dev/null
+++ b/src/img/flags-of-the-world/br.png
Binary files differ
diff --git a/src/img/flags-of-the-world/bs.png b/src/img/flags-of-the-world/bs.png
new file mode 100644
index 0000000..a3bdaeb
--- /dev/null
+++ b/src/img/flags-of-the-world/bs.png
Binary files differ
diff --git a/src/img/flags-of-the-world/bt.png b/src/img/flags-of-the-world/bt.png
new file mode 100644
index 0000000..85deabd
--- /dev/null
+++ b/src/img/flags-of-the-world/bt.png
Binary files differ
diff --git a/src/img/flags-of-the-world/bv.png b/src/img/flags-of-the-world/bv.png
new file mode 100644
index 0000000..ae72a77
--- /dev/null
+++ b/src/img/flags-of-the-world/bv.png
Binary files differ
diff --git a/src/img/flags-of-the-world/bw.png b/src/img/flags-of-the-world/bw.png
new file mode 100644
index 0000000..ee7ba62
--- /dev/null
+++ b/src/img/flags-of-the-world/bw.png
Binary files differ
diff --git a/src/img/flags-of-the-world/by.png b/src/img/flags-of-the-world/by.png
new file mode 100644
index 0000000..bd52949
--- /dev/null
+++ b/src/img/flags-of-the-world/by.png
Binary files differ
diff --git a/src/img/flags-of-the-world/bz.png b/src/img/flags-of-the-world/bz.png
new file mode 100644
index 0000000..8165ea0
--- /dev/null
+++ b/src/img/flags-of-the-world/bz.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ca.png b/src/img/flags-of-the-world/ca.png
new file mode 100644
index 0000000..8f7c4a8
--- /dev/null
+++ b/src/img/flags-of-the-world/ca.png
Binary files differ
diff --git a/src/img/flags-of-the-world/cc.png b/src/img/flags-of-the-world/cc.png
new file mode 100644
index 0000000..1f6c7dc
--- /dev/null
+++ b/src/img/flags-of-the-world/cc.png
Binary files differ
diff --git a/src/img/flags-of-the-world/cd.png b/src/img/flags-of-the-world/cd.png
new file mode 100644
index 0000000..1d554fa
--- /dev/null
+++ b/src/img/flags-of-the-world/cd.png
Binary files differ
diff --git a/src/img/flags-of-the-world/cf.png b/src/img/flags-of-the-world/cf.png
new file mode 100644
index 0000000..214a4fb
--- /dev/null
+++ b/src/img/flags-of-the-world/cf.png
Binary files differ
diff --git a/src/img/flags-of-the-world/cg.png b/src/img/flags-of-the-world/cg.png
new file mode 100644
index 0000000..8349522
--- /dev/null
+++ b/src/img/flags-of-the-world/cg.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ch.png b/src/img/flags-of-the-world/ch.png
new file mode 100644
index 0000000..635de7b
--- /dev/null
+++ b/src/img/flags-of-the-world/ch.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ci.png b/src/img/flags-of-the-world/ci.png
new file mode 100644
index 0000000..1093fb9
--- /dev/null
+++ b/src/img/flags-of-the-world/ci.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ck.png b/src/img/flags-of-the-world/ck.png
new file mode 100644
index 0000000..6387808
--- /dev/null
+++ b/src/img/flags-of-the-world/ck.png
Binary files differ
diff --git a/src/img/flags-of-the-world/cl.png b/src/img/flags-of-the-world/cl.png
new file mode 100644
index 0000000..4b9e866
--- /dev/null
+++ b/src/img/flags-of-the-world/cl.png
Binary files differ
diff --git a/src/img/flags-of-the-world/cm.png b/src/img/flags-of-the-world/cm.png
new file mode 100644
index 0000000..5de502c
--- /dev/null
+++ b/src/img/flags-of-the-world/cm.png
Binary files differ
diff --git a/src/img/flags-of-the-world/cn.png b/src/img/flags-of-the-world/cn.png
new file mode 100644
index 0000000..e5b1554
--- /dev/null
+++ b/src/img/flags-of-the-world/cn.png
Binary files differ
diff --git a/src/img/flags-of-the-world/co.png b/src/img/flags-of-the-world/co.png
new file mode 100644
index 0000000..cc189b9
--- /dev/null
+++ b/src/img/flags-of-the-world/co.png
Binary files differ
diff --git a/src/img/flags-of-the-world/cr.png b/src/img/flags-of-the-world/cr.png
new file mode 100644
index 0000000..fcf6783
--- /dev/null
+++ b/src/img/flags-of-the-world/cr.png
Binary files differ
diff --git a/src/img/flags-of-the-world/cu.png b/src/img/flags-of-the-world/cu.png
new file mode 100644
index 0000000..3907e7c
--- /dev/null
+++ b/src/img/flags-of-the-world/cu.png
Binary files differ
diff --git a/src/img/flags-of-the-world/cv.png b/src/img/flags-of-the-world/cv.png
new file mode 100644
index 0000000..35564a2
--- /dev/null
+++ b/src/img/flags-of-the-world/cv.png
Binary files differ
diff --git a/src/img/flags-of-the-world/cw.png b/src/img/flags-of-the-world/cw.png
new file mode 100644
index 0000000..81397ce
--- /dev/null
+++ b/src/img/flags-of-the-world/cw.png
Binary files differ
diff --git a/src/img/flags-of-the-world/cx.png b/src/img/flags-of-the-world/cx.png
new file mode 100644
index 0000000..bc52786
--- /dev/null
+++ b/src/img/flags-of-the-world/cx.png
Binary files differ
diff --git a/src/img/flags-of-the-world/cy.png b/src/img/flags-of-the-world/cy.png
new file mode 100644
index 0000000..f8d39ab
--- /dev/null
+++ b/src/img/flags-of-the-world/cy.png
Binary files differ
diff --git a/src/img/flags-of-the-world/cz.png b/src/img/flags-of-the-world/cz.png
new file mode 100644
index 0000000..7f36814
--- /dev/null
+++ b/src/img/flags-of-the-world/cz.png
Binary files differ
diff --git a/src/img/flags-of-the-world/de.png b/src/img/flags-of-the-world/de.png
new file mode 100644
index 0000000..4d311cc
--- /dev/null
+++ b/src/img/flags-of-the-world/de.png
Binary files differ
diff --git a/src/img/flags-of-the-world/dj.png b/src/img/flags-of-the-world/dj.png
new file mode 100644
index 0000000..806cfdd
--- /dev/null
+++ b/src/img/flags-of-the-world/dj.png
Binary files differ
diff --git a/src/img/flags-of-the-world/dk.png b/src/img/flags-of-the-world/dk.png
new file mode 100644
index 0000000..c5e3711
--- /dev/null
+++ b/src/img/flags-of-the-world/dk.png
Binary files differ
diff --git a/src/img/flags-of-the-world/dm.png b/src/img/flags-of-the-world/dm.png
new file mode 100644
index 0000000..281e48a
--- /dev/null
+++ b/src/img/flags-of-the-world/dm.png
Binary files differ
diff --git a/src/img/flags-of-the-world/do.png b/src/img/flags-of-the-world/do.png
new file mode 100644
index 0000000..d933f8a
--- /dev/null
+++ b/src/img/flags-of-the-world/do.png
Binary files differ
diff --git a/src/img/flags-of-the-world/dz.png b/src/img/flags-of-the-world/dz.png
new file mode 100644
index 0000000..7d1253b
--- /dev/null
+++ b/src/img/flags-of-the-world/dz.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ec.png b/src/img/flags-of-the-world/ec.png
new file mode 100644
index 0000000..6c88f1f
--- /dev/null
+++ b/src/img/flags-of-the-world/ec.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ee.png b/src/img/flags-of-the-world/ee.png
new file mode 100644
index 0000000..6fcf8cf
--- /dev/null
+++ b/src/img/flags-of-the-world/ee.png
Binary files differ
diff --git a/src/img/flags-of-the-world/eg.png b/src/img/flags-of-the-world/eg.png
new file mode 100644
index 0000000..5fb759e
--- /dev/null
+++ b/src/img/flags-of-the-world/eg.png
Binary files differ
diff --git a/src/img/flags-of-the-world/eh.png b/src/img/flags-of-the-world/eh.png
new file mode 100644
index 0000000..c25436d
--- /dev/null
+++ b/src/img/flags-of-the-world/eh.png
Binary files differ
diff --git a/src/img/flags-of-the-world/er.png b/src/img/flags-of-the-world/er.png
new file mode 100644
index 0000000..d921f3f
--- /dev/null
+++ b/src/img/flags-of-the-world/er.png
Binary files differ
diff --git a/src/img/flags-of-the-world/es.png b/src/img/flags-of-the-world/es.png
new file mode 100644
index 0000000..2e01ce9
--- /dev/null
+++ b/src/img/flags-of-the-world/es.png
Binary files differ
diff --git a/src/img/flags-of-the-world/et.png b/src/img/flags-of-the-world/et.png
new file mode 100644
index 0000000..211bb9c
--- /dev/null
+++ b/src/img/flags-of-the-world/et.png
Binary files differ
diff --git a/src/img/flags-of-the-world/fi.png b/src/img/flags-of-the-world/fi.png
new file mode 100644
index 0000000..551de7c
--- /dev/null
+++ b/src/img/flags-of-the-world/fi.png
Binary files differ
diff --git a/src/img/flags-of-the-world/fj.png b/src/img/flags-of-the-world/fj.png
new file mode 100644
index 0000000..8f6d8bf
--- /dev/null
+++ b/src/img/flags-of-the-world/fj.png
Binary files differ
diff --git a/src/img/flags-of-the-world/fk.png b/src/img/flags-of-the-world/fk.png
new file mode 100644
index 0000000..12d316c
--- /dev/null
+++ b/src/img/flags-of-the-world/fk.png
Binary files differ
diff --git a/src/img/flags-of-the-world/fm.png b/src/img/flags-of-the-world/fm.png
new file mode 100644
index 0000000..e5aefda
--- /dev/null
+++ b/src/img/flags-of-the-world/fm.png
Binary files differ
diff --git a/src/img/flags-of-the-world/fo.png b/src/img/flags-of-the-world/fo.png
new file mode 100644
index 0000000..56a99a9
--- /dev/null
+++ b/src/img/flags-of-the-world/fo.png
Binary files differ
diff --git a/src/img/flags-of-the-world/fr.png b/src/img/flags-of-the-world/fr.png
new file mode 100644
index 0000000..8fe5ea4
--- /dev/null
+++ b/src/img/flags-of-the-world/fr.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ga.png b/src/img/flags-of-the-world/ga.png
new file mode 100644
index 0000000..ffb3f72
--- /dev/null
+++ b/src/img/flags-of-the-world/ga.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gb-eng.png b/src/img/flags-of-the-world/gb-eng.png
new file mode 100644
index 0000000..13c606d
--- /dev/null
+++ b/src/img/flags-of-the-world/gb-eng.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gb-nir.png b/src/img/flags-of-the-world/gb-nir.png
new file mode 100644
index 0000000..a633386
--- /dev/null
+++ b/src/img/flags-of-the-world/gb-nir.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gb-sct.png b/src/img/flags-of-the-world/gb-sct.png
new file mode 100644
index 0000000..95dd4f4
--- /dev/null
+++ b/src/img/flags-of-the-world/gb-sct.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gb-wls.png b/src/img/flags-of-the-world/gb-wls.png
new file mode 100644
index 0000000..a10fe43
--- /dev/null
+++ b/src/img/flags-of-the-world/gb-wls.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gb.png b/src/img/flags-of-the-world/gb.png
new file mode 100644
index 0000000..8bffe4e
--- /dev/null
+++ b/src/img/flags-of-the-world/gb.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gd.png b/src/img/flags-of-the-world/gd.png
new file mode 100644
index 0000000..3d1dc86
--- /dev/null
+++ b/src/img/flags-of-the-world/gd.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ge.png b/src/img/flags-of-the-world/ge.png
new file mode 100644
index 0000000..e19f689
--- /dev/null
+++ b/src/img/flags-of-the-world/ge.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gf.png b/src/img/flags-of-the-world/gf.png
new file mode 100644
index 0000000..03b92f9
--- /dev/null
+++ b/src/img/flags-of-the-world/gf.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gg.png b/src/img/flags-of-the-world/gg.png
new file mode 100644
index 0000000..7eb8b17
--- /dev/null
+++ b/src/img/flags-of-the-world/gg.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gh.png b/src/img/flags-of-the-world/gh.png
new file mode 100644
index 0000000..9031733
--- /dev/null
+++ b/src/img/flags-of-the-world/gh.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gi.png b/src/img/flags-of-the-world/gi.png
new file mode 100644
index 0000000..d96bfdb
--- /dev/null
+++ b/src/img/flags-of-the-world/gi.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gl.png b/src/img/flags-of-the-world/gl.png
new file mode 100644
index 0000000..c9f2504
--- /dev/null
+++ b/src/img/flags-of-the-world/gl.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gm.png b/src/img/flags-of-the-world/gm.png
new file mode 100644
index 0000000..5c4f1e7
--- /dev/null
+++ b/src/img/flags-of-the-world/gm.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gn.png b/src/img/flags-of-the-world/gn.png
new file mode 100644
index 0000000..bd100e9
--- /dev/null
+++ b/src/img/flags-of-the-world/gn.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gp.png b/src/img/flags-of-the-world/gp.png
new file mode 100644
index 0000000..404b667
--- /dev/null
+++ b/src/img/flags-of-the-world/gp.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gq.png b/src/img/flags-of-the-world/gq.png
new file mode 100644
index 0000000..159cee8
--- /dev/null
+++ b/src/img/flags-of-the-world/gq.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gr.png b/src/img/flags-of-the-world/gr.png
new file mode 100644
index 0000000..7d782b1
--- /dev/null
+++ b/src/img/flags-of-the-world/gr.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gs.png b/src/img/flags-of-the-world/gs.png
new file mode 100644
index 0000000..f17c180
--- /dev/null
+++ b/src/img/flags-of-the-world/gs.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gt.png b/src/img/flags-of-the-world/gt.png
new file mode 100644
index 0000000..463b40d
--- /dev/null
+++ b/src/img/flags-of-the-world/gt.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gu.png b/src/img/flags-of-the-world/gu.png
new file mode 100644
index 0000000..d7c8b85
--- /dev/null
+++ b/src/img/flags-of-the-world/gu.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gw.png b/src/img/flags-of-the-world/gw.png
new file mode 100644
index 0000000..9f5266f
--- /dev/null
+++ b/src/img/flags-of-the-world/gw.png
Binary files differ
diff --git a/src/img/flags-of-the-world/gy.png b/src/img/flags-of-the-world/gy.png
new file mode 100644
index 0000000..0ad22a7
--- /dev/null
+++ b/src/img/flags-of-the-world/gy.png
Binary files differ
diff --git a/src/img/flags-of-the-world/hk.png b/src/img/flags-of-the-world/hk.png
new file mode 100644
index 0000000..375395c
--- /dev/null
+++ b/src/img/flags-of-the-world/hk.png
Binary files differ
diff --git a/src/img/flags-of-the-world/hm.png b/src/img/flags-of-the-world/hm.png
new file mode 100644
index 0000000..90cce12
--- /dev/null
+++ b/src/img/flags-of-the-world/hm.png
Binary files differ
diff --git a/src/img/flags-of-the-world/hn.png b/src/img/flags-of-the-world/hn.png
new file mode 100644
index 0000000..3bedc54
--- /dev/null
+++ b/src/img/flags-of-the-world/hn.png
Binary files differ
diff --git a/src/img/flags-of-the-world/hr.png b/src/img/flags-of-the-world/hr.png
new file mode 100644
index 0000000..cfee4e4
--- /dev/null
+++ b/src/img/flags-of-the-world/hr.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ht.png b/src/img/flags-of-the-world/ht.png
new file mode 100644
index 0000000..048d613
--- /dev/null
+++ b/src/img/flags-of-the-world/ht.png
Binary files differ
diff --git a/src/img/flags-of-the-world/hu.png b/src/img/flags-of-the-world/hu.png
new file mode 100644
index 0000000..93d8a8f
--- /dev/null
+++ b/src/img/flags-of-the-world/hu.png
Binary files differ
diff --git a/src/img/flags-of-the-world/id.png b/src/img/flags-of-the-world/id.png
new file mode 100644
index 0000000..3efe836
--- /dev/null
+++ b/src/img/flags-of-the-world/id.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ie.png b/src/img/flags-of-the-world/ie.png
new file mode 100644
index 0000000..ae04602
--- /dev/null
+++ b/src/img/flags-of-the-world/ie.png
Binary files differ
diff --git a/src/img/flags-of-the-world/il.png b/src/img/flags-of-the-world/il.png
new file mode 100644
index 0000000..0728e1b
--- /dev/null
+++ b/src/img/flags-of-the-world/il.png
Binary files differ
diff --git a/src/img/flags-of-the-world/im.png b/src/img/flags-of-the-world/im.png
new file mode 100644
index 0000000..7cd7bfa
--- /dev/null
+++ b/src/img/flags-of-the-world/im.png
Binary files differ
diff --git a/src/img/flags-of-the-world/in.png b/src/img/flags-of-the-world/in.png
new file mode 100644
index 0000000..c0fd2a0
--- /dev/null
+++ b/src/img/flags-of-the-world/in.png
Binary files differ
diff --git a/src/img/flags-of-the-world/io.png b/src/img/flags-of-the-world/io.png
new file mode 100644
index 0000000..71c045a
--- /dev/null
+++ b/src/img/flags-of-the-world/io.png
Binary files differ
diff --git a/src/img/flags-of-the-world/iq.png b/src/img/flags-of-the-world/iq.png
new file mode 100644
index 0000000..2e529ab
--- /dev/null
+++ b/src/img/flags-of-the-world/iq.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ir.png b/src/img/flags-of-the-world/ir.png
new file mode 100644
index 0000000..6af8d63
--- /dev/null
+++ b/src/img/flags-of-the-world/ir.png
Binary files differ
diff --git a/src/img/flags-of-the-world/is.png b/src/img/flags-of-the-world/is.png
new file mode 100644
index 0000000..e01f3da
--- /dev/null
+++ b/src/img/flags-of-the-world/is.png
Binary files differ
diff --git a/src/img/flags-of-the-world/it.png b/src/img/flags-of-the-world/it.png
new file mode 100644
index 0000000..c313486
--- /dev/null
+++ b/src/img/flags-of-the-world/it.png
Binary files differ
diff --git a/src/img/flags-of-the-world/je.png b/src/img/flags-of-the-world/je.png
new file mode 100644
index 0000000..8f049c6
--- /dev/null
+++ b/src/img/flags-of-the-world/je.png
Binary files differ
diff --git a/src/img/flags-of-the-world/jm.png b/src/img/flags-of-the-world/jm.png
new file mode 100644
index 0000000..ad9acd9
--- /dev/null
+++ b/src/img/flags-of-the-world/jm.png
Binary files differ
diff --git a/src/img/flags-of-the-world/jo.png b/src/img/flags-of-the-world/jo.png
new file mode 100644
index 0000000..7ba2ecc
--- /dev/null
+++ b/src/img/flags-of-the-world/jo.png
Binary files differ
diff --git a/src/img/flags-of-the-world/jp.png b/src/img/flags-of-the-world/jp.png
new file mode 100644
index 0000000..c1b2f26
--- /dev/null
+++ b/src/img/flags-of-the-world/jp.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ke.png b/src/img/flags-of-the-world/ke.png
new file mode 100644
index 0000000..4c8ae0b
--- /dev/null
+++ b/src/img/flags-of-the-world/ke.png
Binary files differ
diff --git a/src/img/flags-of-the-world/kg.png b/src/img/flags-of-the-world/kg.png
new file mode 100644
index 0000000..a65c900
--- /dev/null
+++ b/src/img/flags-of-the-world/kg.png
Binary files differ
diff --git a/src/img/flags-of-the-world/kh.png b/src/img/flags-of-the-world/kh.png
new file mode 100644
index 0000000..55268b9
--- /dev/null
+++ b/src/img/flags-of-the-world/kh.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ki.png b/src/img/flags-of-the-world/ki.png
new file mode 100644
index 0000000..f000d34
--- /dev/null
+++ b/src/img/flags-of-the-world/ki.png
Binary files differ
diff --git a/src/img/flags-of-the-world/km.png b/src/img/flags-of-the-world/km.png
new file mode 100644
index 0000000..bdd89a0
--- /dev/null
+++ b/src/img/flags-of-the-world/km.png
Binary files differ
diff --git a/src/img/flags-of-the-world/kn.png b/src/img/flags-of-the-world/kn.png
new file mode 100644
index 0000000..5bdd1bd
--- /dev/null
+++ b/src/img/flags-of-the-world/kn.png
Binary files differ
diff --git a/src/img/flags-of-the-world/kp.png b/src/img/flags-of-the-world/kp.png
new file mode 100644
index 0000000..10bc580
--- /dev/null
+++ b/src/img/flags-of-the-world/kp.png
Binary files differ
diff --git a/src/img/flags-of-the-world/kr.png b/src/img/flags-of-the-world/kr.png
new file mode 100644
index 0000000..d8642ca
--- /dev/null
+++ b/src/img/flags-of-the-world/kr.png
Binary files differ
diff --git a/src/img/flags-of-the-world/kw.png b/src/img/flags-of-the-world/kw.png
new file mode 100644
index 0000000..e9f283a
--- /dev/null
+++ b/src/img/flags-of-the-world/kw.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ky.png b/src/img/flags-of-the-world/ky.png
new file mode 100644
index 0000000..ec337e4
--- /dev/null
+++ b/src/img/flags-of-the-world/ky.png
Binary files differ
diff --git a/src/img/flags-of-the-world/kz.png b/src/img/flags-of-the-world/kz.png
new file mode 100644
index 0000000..ac3c0eb
--- /dev/null
+++ b/src/img/flags-of-the-world/kz.png
Binary files differ
diff --git a/src/img/flags-of-the-world/la.png b/src/img/flags-of-the-world/la.png
new file mode 100644
index 0000000..5fc6bdf
--- /dev/null
+++ b/src/img/flags-of-the-world/la.png
Binary files differ
diff --git a/src/img/flags-of-the-world/lb.png b/src/img/flags-of-the-world/lb.png
new file mode 100644
index 0000000..f8bd972
--- /dev/null
+++ b/src/img/flags-of-the-world/lb.png
Binary files differ
diff --git a/src/img/flags-of-the-world/lc.png b/src/img/flags-of-the-world/lc.png
new file mode 100644
index 0000000..f901fa7
--- /dev/null
+++ b/src/img/flags-of-the-world/lc.png
Binary files differ
diff --git a/src/img/flags-of-the-world/li.png b/src/img/flags-of-the-world/li.png
new file mode 100644
index 0000000..8d9246c
--- /dev/null
+++ b/src/img/flags-of-the-world/li.png
Binary files differ
diff --git a/src/img/flags-of-the-world/lk.png b/src/img/flags-of-the-world/lk.png
new file mode 100644
index 0000000..e5a30da
--- /dev/null
+++ b/src/img/flags-of-the-world/lk.png
Binary files differ
diff --git a/src/img/flags-of-the-world/lr.png b/src/img/flags-of-the-world/lr.png
new file mode 100644
index 0000000..6b4e8de
--- /dev/null
+++ b/src/img/flags-of-the-world/lr.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ls.png b/src/img/flags-of-the-world/ls.png
new file mode 100644
index 0000000..257632f
--- /dev/null
+++ b/src/img/flags-of-the-world/ls.png
Binary files differ
diff --git a/src/img/flags-of-the-world/lt.png b/src/img/flags-of-the-world/lt.png
new file mode 100644
index 0000000..d62b622
--- /dev/null
+++ b/src/img/flags-of-the-world/lt.png
Binary files differ
diff --git a/src/img/flags-of-the-world/lu.png b/src/img/flags-of-the-world/lu.png
new file mode 100644
index 0000000..0659461
--- /dev/null
+++ b/src/img/flags-of-the-world/lu.png
Binary files differ
diff --git a/src/img/flags-of-the-world/lv.png b/src/img/flags-of-the-world/lv.png
new file mode 100644
index 0000000..892b6d0
--- /dev/null
+++ b/src/img/flags-of-the-world/lv.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ly.png b/src/img/flags-of-the-world/ly.png
new file mode 100644
index 0000000..4ed1fec
--- /dev/null
+++ b/src/img/flags-of-the-world/ly.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ma.png b/src/img/flags-of-the-world/ma.png
new file mode 100644
index 0000000..6dc87a6
--- /dev/null
+++ b/src/img/flags-of-the-world/ma.png
Binary files differ
diff --git a/src/img/flags-of-the-world/mc.png b/src/img/flags-of-the-world/mc.png
new file mode 100644
index 0000000..a1ea537
--- /dev/null
+++ b/src/img/flags-of-the-world/mc.png
Binary files differ
diff --git a/src/img/flags-of-the-world/md.png b/src/img/flags-of-the-world/md.png
new file mode 100644
index 0000000..0c440b4
--- /dev/null
+++ b/src/img/flags-of-the-world/md.png
Binary files differ
diff --git a/src/img/flags-of-the-world/me.png b/src/img/flags-of-the-world/me.png
new file mode 100644
index 0000000..e591899
--- /dev/null
+++ b/src/img/flags-of-the-world/me.png
Binary files differ
diff --git a/src/img/flags-of-the-world/mf.png b/src/img/flags-of-the-world/mf.png
new file mode 100644
index 0000000..8fe5ea4
--- /dev/null
+++ b/src/img/flags-of-the-world/mf.png
Binary files differ
diff --git a/src/img/flags-of-the-world/mg.png b/src/img/flags-of-the-world/mg.png
new file mode 100644
index 0000000..c181ece
--- /dev/null
+++ b/src/img/flags-of-the-world/mg.png
Binary files differ
diff --git a/src/img/flags-of-the-world/mh.png b/src/img/flags-of-the-world/mh.png
new file mode 100644
index 0000000..8b38bc0
--- /dev/null
+++ b/src/img/flags-of-the-world/mh.png
Binary files differ
diff --git a/src/img/flags-of-the-world/mk.png b/src/img/flags-of-the-world/mk.png
new file mode 100644
index 0000000..bb0c488
--- /dev/null
+++ b/src/img/flags-of-the-world/mk.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ml.png b/src/img/flags-of-the-world/ml.png
new file mode 100644
index 0000000..70b7e8a
--- /dev/null
+++ b/src/img/flags-of-the-world/ml.png
Binary files differ
diff --git a/src/img/flags-of-the-world/mm.png b/src/img/flags-of-the-world/mm.png
new file mode 100644
index 0000000..d533d86
--- /dev/null
+++ b/src/img/flags-of-the-world/mm.png
Binary files differ
diff --git a/src/img/flags-of-the-world/mn.png b/src/img/flags-of-the-world/mn.png
new file mode 100644
index 0000000..dcecc72
--- /dev/null
+++ b/src/img/flags-of-the-world/mn.png
Binary files differ
diff --git a/src/img/flags-of-the-world/mo.png b/src/img/flags-of-the-world/mo.png
new file mode 100644
index 0000000..cbf0a02
--- /dev/null
+++ b/src/img/flags-of-the-world/mo.png
Binary files differ
diff --git a/src/img/flags-of-the-world/mp.png b/src/img/flags-of-the-world/mp.png
new file mode 100644
index 0000000..b2b13f2
--- /dev/null
+++ b/src/img/flags-of-the-world/mp.png
Binary files differ
diff --git a/src/img/flags-of-the-world/mq.png b/src/img/flags-of-the-world/mq.png
new file mode 100644
index 0000000..1e339f8
--- /dev/null
+++ b/src/img/flags-of-the-world/mq.png
Binary files differ
diff --git a/src/img/flags-of-the-world/mr.png b/src/img/flags-of-the-world/mr.png
new file mode 100644
index 0000000..ccd0edf
--- /dev/null
+++ b/src/img/flags-of-the-world/mr.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ms.png b/src/img/flags-of-the-world/ms.png
new file mode 100644
index 0000000..95c4d61
--- /dev/null
+++ b/src/img/flags-of-the-world/ms.png
Binary files differ
diff --git a/src/img/flags-of-the-world/mt.png b/src/img/flags-of-the-world/mt.png
new file mode 100644
index 0000000..7ca7378
--- /dev/null
+++ b/src/img/flags-of-the-world/mt.png
Binary files differ
diff --git a/src/img/flags-of-the-world/mu.png b/src/img/flags-of-the-world/mu.png
new file mode 100644
index 0000000..8dee394
--- /dev/null
+++ b/src/img/flags-of-the-world/mu.png
Binary files differ
diff --git a/src/img/flags-of-the-world/mv.png b/src/img/flags-of-the-world/mv.png
new file mode 100644
index 0000000..2850def
--- /dev/null
+++ b/src/img/flags-of-the-world/mv.png
Binary files differ
diff --git a/src/img/flags-of-the-world/mw.png b/src/img/flags-of-the-world/mw.png
new file mode 100644
index 0000000..8a43fd6
--- /dev/null
+++ b/src/img/flags-of-the-world/mw.png
Binary files differ
diff --git a/src/img/flags-of-the-world/mx.png b/src/img/flags-of-the-world/mx.png
new file mode 100644
index 0000000..e04b9d7
--- /dev/null
+++ b/src/img/flags-of-the-world/mx.png
Binary files differ
diff --git a/src/img/flags-of-the-world/my.png b/src/img/flags-of-the-world/my.png
new file mode 100644
index 0000000..2d23b89
--- /dev/null
+++ b/src/img/flags-of-the-world/my.png
Binary files differ
diff --git a/src/img/flags-of-the-world/mz.png b/src/img/flags-of-the-world/mz.png
new file mode 100644
index 0000000..c360800
--- /dev/null
+++ b/src/img/flags-of-the-world/mz.png
Binary files differ
diff --git a/src/img/flags-of-the-world/na.png b/src/img/flags-of-the-world/na.png
new file mode 100644
index 0000000..9a15ee1
--- /dev/null
+++ b/src/img/flags-of-the-world/na.png
Binary files differ
diff --git a/src/img/flags-of-the-world/nc.png b/src/img/flags-of-the-world/nc.png
new file mode 100644
index 0000000..0e935d7
--- /dev/null
+++ b/src/img/flags-of-the-world/nc.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ne.png b/src/img/flags-of-the-world/ne.png
new file mode 100644
index 0000000..9b602d2
--- /dev/null
+++ b/src/img/flags-of-the-world/ne.png
Binary files differ
diff --git a/src/img/flags-of-the-world/nf.png b/src/img/flags-of-the-world/nf.png
new file mode 100644
index 0000000..05e5089
--- /dev/null
+++ b/src/img/flags-of-the-world/nf.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ng.png b/src/img/flags-of-the-world/ng.png
new file mode 100644
index 0000000..30ddc5f
--- /dev/null
+++ b/src/img/flags-of-the-world/ng.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ni.png b/src/img/flags-of-the-world/ni.png
new file mode 100644
index 0000000..4bd0475
--- /dev/null
+++ b/src/img/flags-of-the-world/ni.png
Binary files differ
diff --git a/src/img/flags-of-the-world/nl.png b/src/img/flags-of-the-world/nl.png
new file mode 100644
index 0000000..724ae2f
--- /dev/null
+++ b/src/img/flags-of-the-world/nl.png
Binary files differ
diff --git a/src/img/flags-of-the-world/no.png b/src/img/flags-of-the-world/no.png
new file mode 100644
index 0000000..ae72a77
--- /dev/null
+++ b/src/img/flags-of-the-world/no.png
Binary files differ
diff --git a/src/img/flags-of-the-world/np.png b/src/img/flags-of-the-world/np.png
new file mode 100644
index 0000000..c47f80e
--- /dev/null
+++ b/src/img/flags-of-the-world/np.png
Binary files differ
diff --git a/src/img/flags-of-the-world/nr.png b/src/img/flags-of-the-world/nr.png
new file mode 100644
index 0000000..983c5c1
--- /dev/null
+++ b/src/img/flags-of-the-world/nr.png
Binary files differ
diff --git a/src/img/flags-of-the-world/nu.png b/src/img/flags-of-the-world/nu.png
new file mode 100644
index 0000000..13771aa
--- /dev/null
+++ b/src/img/flags-of-the-world/nu.png
Binary files differ
diff --git a/src/img/flags-of-the-world/nz.png b/src/img/flags-of-the-world/nz.png
new file mode 100644
index 0000000..d3ecec6
--- /dev/null
+++ b/src/img/flags-of-the-world/nz.png
Binary files differ
diff --git a/src/img/flags-of-the-world/om.png b/src/img/flags-of-the-world/om.png
new file mode 100644
index 0000000..a874081
--- /dev/null
+++ b/src/img/flags-of-the-world/om.png
Binary files differ
diff --git a/src/img/flags-of-the-world/pa.png b/src/img/flags-of-the-world/pa.png
new file mode 100644
index 0000000..5d7efde
--- /dev/null
+++ b/src/img/flags-of-the-world/pa.png
Binary files differ
diff --git a/src/img/flags-of-the-world/pe.png b/src/img/flags-of-the-world/pe.png
new file mode 100644
index 0000000..b64ad9c
--- /dev/null
+++ b/src/img/flags-of-the-world/pe.png
Binary files differ
diff --git a/src/img/flags-of-the-world/pf.png b/src/img/flags-of-the-world/pf.png
new file mode 100644
index 0000000..9828f06
--- /dev/null
+++ b/src/img/flags-of-the-world/pf.png
Binary files differ
diff --git a/src/img/flags-of-the-world/pg.png b/src/img/flags-of-the-world/pg.png
new file mode 100644
index 0000000..db8ee16
--- /dev/null
+++ b/src/img/flags-of-the-world/pg.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ph.png b/src/img/flags-of-the-world/ph.png
new file mode 100644
index 0000000..1c532d7
--- /dev/null
+++ b/src/img/flags-of-the-world/ph.png
Binary files differ
diff --git a/src/img/flags-of-the-world/pk.png b/src/img/flags-of-the-world/pk.png
new file mode 100644
index 0000000..1bc8e64
--- /dev/null
+++ b/src/img/flags-of-the-world/pk.png
Binary files differ
diff --git a/src/img/flags-of-the-world/pl.png b/src/img/flags-of-the-world/pl.png
new file mode 100644
index 0000000..9937d81
--- /dev/null
+++ b/src/img/flags-of-the-world/pl.png
Binary files differ
diff --git a/src/img/flags-of-the-world/pm.png b/src/img/flags-of-the-world/pm.png
new file mode 100644
index 0000000..986d041
--- /dev/null
+++ b/src/img/flags-of-the-world/pm.png
Binary files differ
diff --git a/src/img/flags-of-the-world/pn.png b/src/img/flags-of-the-world/pn.png
new file mode 100644
index 0000000..da91edb
--- /dev/null
+++ b/src/img/flags-of-the-world/pn.png
Binary files differ
diff --git a/src/img/flags-of-the-world/pr.png b/src/img/flags-of-the-world/pr.png
new file mode 100644
index 0000000..bdd1c9d
--- /dev/null
+++ b/src/img/flags-of-the-world/pr.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ps.png b/src/img/flags-of-the-world/ps.png
new file mode 100644
index 0000000..0fd4a8f
--- /dev/null
+++ b/src/img/flags-of-the-world/ps.png
Binary files differ
diff --git a/src/img/flags-of-the-world/pt.png b/src/img/flags-of-the-world/pt.png
new file mode 100644
index 0000000..ec73093
--- /dev/null
+++ b/src/img/flags-of-the-world/pt.png
Binary files differ
diff --git a/src/img/flags-of-the-world/pw.png b/src/img/flags-of-the-world/pw.png
new file mode 100644
index 0000000..8f97c9b
--- /dev/null
+++ b/src/img/flags-of-the-world/pw.png
Binary files differ
diff --git a/src/img/flags-of-the-world/py.png b/src/img/flags-of-the-world/py.png
new file mode 100644
index 0000000..f852e0b
--- /dev/null
+++ b/src/img/flags-of-the-world/py.png
Binary files differ
diff --git a/src/img/flags-of-the-world/qa.png b/src/img/flags-of-the-world/qa.png
new file mode 100644
index 0000000..a4e3f73
--- /dev/null
+++ b/src/img/flags-of-the-world/qa.png
Binary files differ
diff --git a/src/img/flags-of-the-world/re.png b/src/img/flags-of-the-world/re.png
new file mode 100644
index 0000000..7607946
--- /dev/null
+++ b/src/img/flags-of-the-world/re.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ro.png b/src/img/flags-of-the-world/ro.png
new file mode 100644
index 0000000..fde2356
--- /dev/null
+++ b/src/img/flags-of-the-world/ro.png
Binary files differ
diff --git a/src/img/flags-of-the-world/rs.png b/src/img/flags-of-the-world/rs.png
new file mode 100644
index 0000000..94980fd
--- /dev/null
+++ b/src/img/flags-of-the-world/rs.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ru.png b/src/img/flags-of-the-world/ru.png
new file mode 100644
index 0000000..d24f786
--- /dev/null
+++ b/src/img/flags-of-the-world/ru.png
Binary files differ
diff --git a/src/img/flags-of-the-world/rw.png b/src/img/flags-of-the-world/rw.png
new file mode 100644
index 0000000..ea08fbe
--- /dev/null
+++ b/src/img/flags-of-the-world/rw.png
Binary files differ
diff --git a/src/img/flags-of-the-world/sa.png b/src/img/flags-of-the-world/sa.png
new file mode 100644
index 0000000..caa18a5
--- /dev/null
+++ b/src/img/flags-of-the-world/sa.png
Binary files differ
diff --git a/src/img/flags-of-the-world/sb.png b/src/img/flags-of-the-world/sb.png
new file mode 100644
index 0000000..21b93e8
--- /dev/null
+++ b/src/img/flags-of-the-world/sb.png
Binary files differ
diff --git a/src/img/flags-of-the-world/sc.png b/src/img/flags-of-the-world/sc.png
new file mode 100644
index 0000000..3a1e558
--- /dev/null
+++ b/src/img/flags-of-the-world/sc.png
Binary files differ
diff --git a/src/img/flags-of-the-world/sd.png b/src/img/flags-of-the-world/sd.png
new file mode 100644
index 0000000..6234ed3
--- /dev/null
+++ b/src/img/flags-of-the-world/sd.png
Binary files differ
diff --git a/src/img/flags-of-the-world/se.png b/src/img/flags-of-the-world/se.png
new file mode 100644
index 0000000..1156f2f
--- /dev/null
+++ b/src/img/flags-of-the-world/se.png
Binary files differ
diff --git a/src/img/flags-of-the-world/sg.png b/src/img/flags-of-the-world/sg.png
new file mode 100644
index 0000000..4a6e94b
--- /dev/null
+++ b/src/img/flags-of-the-world/sg.png
Binary files differ
diff --git a/src/img/flags-of-the-world/sh.png b/src/img/flags-of-the-world/sh.png
new file mode 100644
index 0000000..6590d02
--- /dev/null
+++ b/src/img/flags-of-the-world/sh.png
Binary files differ
diff --git a/src/img/flags-of-the-world/si.png b/src/img/flags-of-the-world/si.png
new file mode 100644
index 0000000..274cd50
--- /dev/null
+++ b/src/img/flags-of-the-world/si.png
Binary files differ
diff --git a/src/img/flags-of-the-world/sj.png b/src/img/flags-of-the-world/sj.png
new file mode 100644
index 0000000..ae72a77
--- /dev/null
+++ b/src/img/flags-of-the-world/sj.png
Binary files differ
diff --git a/src/img/flags-of-the-world/sk.png b/src/img/flags-of-the-world/sk.png
new file mode 100644
index 0000000..72b8f4a
--- /dev/null
+++ b/src/img/flags-of-the-world/sk.png
Binary files differ
diff --git a/src/img/flags-of-the-world/sl.png b/src/img/flags-of-the-world/sl.png
new file mode 100644
index 0000000..1010c07
--- /dev/null
+++ b/src/img/flags-of-the-world/sl.png
Binary files differ
diff --git a/src/img/flags-of-the-world/sm.png b/src/img/flags-of-the-world/sm.png
new file mode 100644
index 0000000..30c9a7e
--- /dev/null
+++ b/src/img/flags-of-the-world/sm.png
Binary files differ
diff --git a/src/img/flags-of-the-world/sn.png b/src/img/flags-of-the-world/sn.png
new file mode 100644
index 0000000..a2f8197
--- /dev/null
+++ b/src/img/flags-of-the-world/sn.png
Binary files differ
diff --git a/src/img/flags-of-the-world/so.png b/src/img/flags-of-the-world/so.png
new file mode 100644
index 0000000..25b1e1e
--- /dev/null
+++ b/src/img/flags-of-the-world/so.png
Binary files differ
diff --git a/src/img/flags-of-the-world/sr.png b/src/img/flags-of-the-world/sr.png
new file mode 100644
index 0000000..daaf01b
--- /dev/null
+++ b/src/img/flags-of-the-world/sr.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ss.png b/src/img/flags-of-the-world/ss.png
new file mode 100644
index 0000000..95c375c
--- /dev/null
+++ b/src/img/flags-of-the-world/ss.png
Binary files differ
diff --git a/src/img/flags-of-the-world/st.png b/src/img/flags-of-the-world/st.png
new file mode 100644
index 0000000..caca63c
--- /dev/null
+++ b/src/img/flags-of-the-world/st.png
Binary files differ
diff --git a/src/img/flags-of-the-world/sv.png b/src/img/flags-of-the-world/sv.png
new file mode 100644
index 0000000..e5ca956
--- /dev/null
+++ b/src/img/flags-of-the-world/sv.png
Binary files differ
diff --git a/src/img/flags-of-the-world/sx.png b/src/img/flags-of-the-world/sx.png
new file mode 100644
index 0000000..4041b21
--- /dev/null
+++ b/src/img/flags-of-the-world/sx.png
Binary files differ
diff --git a/src/img/flags-of-the-world/sy.png b/src/img/flags-of-the-world/sy.png
new file mode 100644
index 0000000..4b9583a
--- /dev/null
+++ b/src/img/flags-of-the-world/sy.png
Binary files differ
diff --git a/src/img/flags-of-the-world/sz.png b/src/img/flags-of-the-world/sz.png
new file mode 100644
index 0000000..515edc6
--- /dev/null
+++ b/src/img/flags-of-the-world/sz.png
Binary files differ
diff --git a/src/img/flags-of-the-world/tc.png b/src/img/flags-of-the-world/tc.png
new file mode 100644
index 0000000..f66e54f
--- /dev/null
+++ b/src/img/flags-of-the-world/tc.png
Binary files differ
diff --git a/src/img/flags-of-the-world/td.png b/src/img/flags-of-the-world/td.png
new file mode 100644
index 0000000..a1c978a
--- /dev/null
+++ b/src/img/flags-of-the-world/td.png
Binary files differ
diff --git a/src/img/flags-of-the-world/tf.png b/src/img/flags-of-the-world/tf.png
new file mode 100644
index 0000000..72d7a9d
--- /dev/null
+++ b/src/img/flags-of-the-world/tf.png
Binary files differ
diff --git a/src/img/flags-of-the-world/tg.png b/src/img/flags-of-the-world/tg.png
new file mode 100644
index 0000000..5ccbeaf
--- /dev/null
+++ b/src/img/flags-of-the-world/tg.png
Binary files differ
diff --git a/src/img/flags-of-the-world/th.png b/src/img/flags-of-the-world/th.png
new file mode 100644
index 0000000..8a8153a
--- /dev/null
+++ b/src/img/flags-of-the-world/th.png
Binary files differ
diff --git a/src/img/flags-of-the-world/tj.png b/src/img/flags-of-the-world/tj.png
new file mode 100644
index 0000000..1e43ecf
--- /dev/null
+++ b/src/img/flags-of-the-world/tj.png
Binary files differ
diff --git a/src/img/flags-of-the-world/tk.png b/src/img/flags-of-the-world/tk.png
new file mode 100644
index 0000000..939ebd8
--- /dev/null
+++ b/src/img/flags-of-the-world/tk.png
Binary files differ
diff --git a/src/img/flags-of-the-world/tl.png b/src/img/flags-of-the-world/tl.png
new file mode 100644
index 0000000..528bc82
--- /dev/null
+++ b/src/img/flags-of-the-world/tl.png
Binary files differ
diff --git a/src/img/flags-of-the-world/tm.png b/src/img/flags-of-the-world/tm.png
new file mode 100644
index 0000000..65ba21e
--- /dev/null
+++ b/src/img/flags-of-the-world/tm.png
Binary files differ
diff --git a/src/img/flags-of-the-world/tn.png b/src/img/flags-of-the-world/tn.png
new file mode 100644
index 0000000..836bbfe
--- /dev/null
+++ b/src/img/flags-of-the-world/tn.png
Binary files differ
diff --git a/src/img/flags-of-the-world/to.png b/src/img/flags-of-the-world/to.png
new file mode 100644
index 0000000..af3c66e
--- /dev/null
+++ b/src/img/flags-of-the-world/to.png
Binary files differ
diff --git a/src/img/flags-of-the-world/tr.png b/src/img/flags-of-the-world/tr.png
new file mode 100644
index 0000000..3848398
--- /dev/null
+++ b/src/img/flags-of-the-world/tr.png
Binary files differ
diff --git a/src/img/flags-of-the-world/tt.png b/src/img/flags-of-the-world/tt.png
new file mode 100644
index 0000000..76e5e84
--- /dev/null
+++ b/src/img/flags-of-the-world/tt.png
Binary files differ
diff --git a/src/img/flags-of-the-world/tv.png b/src/img/flags-of-the-world/tv.png
new file mode 100644
index 0000000..9c52a93
--- /dev/null
+++ b/src/img/flags-of-the-world/tv.png
Binary files differ
diff --git a/src/img/flags-of-the-world/tw.png b/src/img/flags-of-the-world/tw.png
new file mode 100644
index 0000000..ea1c4bc
--- /dev/null
+++ b/src/img/flags-of-the-world/tw.png
Binary files differ
diff --git a/src/img/flags-of-the-world/tz.png b/src/img/flags-of-the-world/tz.png
new file mode 100644
index 0000000..9fa7dbc
--- /dev/null
+++ b/src/img/flags-of-the-world/tz.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ua.png b/src/img/flags-of-the-world/ua.png
new file mode 100644
index 0000000..a2e58d1
--- /dev/null
+++ b/src/img/flags-of-the-world/ua.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ug.png b/src/img/flags-of-the-world/ug.png
new file mode 100644
index 0000000..72e9898
--- /dev/null
+++ b/src/img/flags-of-the-world/ug.png
Binary files differ
diff --git a/src/img/flags-of-the-world/um.png b/src/img/flags-of-the-world/um.png
new file mode 100644
index 0000000..2083ae3
--- /dev/null
+++ b/src/img/flags-of-the-world/um.png
Binary files differ
diff --git a/src/img/flags-of-the-world/us.png b/src/img/flags-of-the-world/us.png
new file mode 100644
index 0000000..2083ae3
--- /dev/null
+++ b/src/img/flags-of-the-world/us.png
Binary files differ
diff --git a/src/img/flags-of-the-world/uy.png b/src/img/flags-of-the-world/uy.png
new file mode 100644
index 0000000..460cc88
--- /dev/null
+++ b/src/img/flags-of-the-world/uy.png
Binary files differ
diff --git a/src/img/flags-of-the-world/uz.png b/src/img/flags-of-the-world/uz.png
new file mode 100644
index 0000000..a4124a6
--- /dev/null
+++ b/src/img/flags-of-the-world/uz.png
Binary files differ
diff --git a/src/img/flags-of-the-world/va.png b/src/img/flags-of-the-world/va.png
new file mode 100644
index 0000000..b543bd2
--- /dev/null
+++ b/src/img/flags-of-the-world/va.png
Binary files differ
diff --git a/src/img/flags-of-the-world/vc.png b/src/img/flags-of-the-world/vc.png
new file mode 100644
index 0000000..6ec6077
--- /dev/null
+++ b/src/img/flags-of-the-world/vc.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ve.png b/src/img/flags-of-the-world/ve.png
new file mode 100644
index 0000000..3de0f72
--- /dev/null
+++ b/src/img/flags-of-the-world/ve.png
Binary files differ
diff --git a/src/img/flags-of-the-world/vg.png b/src/img/flags-of-the-world/vg.png
new file mode 100644
index 0000000..39cc85d
--- /dev/null
+++ b/src/img/flags-of-the-world/vg.png
Binary files differ
diff --git a/src/img/flags-of-the-world/vi.png b/src/img/flags-of-the-world/vi.png
new file mode 100644
index 0000000..b186225
--- /dev/null
+++ b/src/img/flags-of-the-world/vi.png
Binary files differ
diff --git a/src/img/flags-of-the-world/vn.png b/src/img/flags-of-the-world/vn.png
new file mode 100644
index 0000000..9ba2e9e
--- /dev/null
+++ b/src/img/flags-of-the-world/vn.png
Binary files differ
diff --git a/src/img/flags-of-the-world/vu.png b/src/img/flags-of-the-world/vu.png
new file mode 100644
index 0000000..0bc8fa2
--- /dev/null
+++ b/src/img/flags-of-the-world/vu.png
Binary files differ
diff --git a/src/img/flags-of-the-world/wf.png b/src/img/flags-of-the-world/wf.png
new file mode 100644
index 0000000..db3b768
--- /dev/null
+++ b/src/img/flags-of-the-world/wf.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ws.png b/src/img/flags-of-the-world/ws.png
new file mode 100644
index 0000000..8003387
--- /dev/null
+++ b/src/img/flags-of-the-world/ws.png
Binary files differ
diff --git a/src/img/flags-of-the-world/xk.png b/src/img/flags-of-the-world/xk.png
new file mode 100644
index 0000000..1a6038d
--- /dev/null
+++ b/src/img/flags-of-the-world/xk.png
Binary files differ
diff --git a/src/img/flags-of-the-world/ye.png b/src/img/flags-of-the-world/ye.png
new file mode 100644
index 0000000..1be6876
--- /dev/null
+++ b/src/img/flags-of-the-world/ye.png
Binary files differ
diff --git a/src/img/flags-of-the-world/yt.png b/src/img/flags-of-the-world/yt.png
new file mode 100644
index 0000000..529ea74
--- /dev/null
+++ b/src/img/flags-of-the-world/yt.png
Binary files differ
diff --git a/src/img/flags-of-the-world/za.png b/src/img/flags-of-the-world/za.png
new file mode 100644
index 0000000..994a276
--- /dev/null
+++ b/src/img/flags-of-the-world/za.png
Binary files differ
diff --git a/src/img/flags-of-the-world/zm.png b/src/img/flags-of-the-world/zm.png
new file mode 100644
index 0000000..3c28da4
--- /dev/null
+++ b/src/img/flags-of-the-world/zm.png
Binary files differ
diff --git a/src/img/flags-of-the-world/zw.png b/src/img/flags-of-the-world/zw.png
new file mode 100644
index 0000000..ef397b5
--- /dev/null
+++ b/src/img/flags-of-the-world/zw.png
Binary files differ
diff --git a/src/img/fontawesome/LICENSE.txt b/src/img/fontawesome/LICENSE.txt
new file mode 100644
index 0000000..2784b8c
--- /dev/null
+++ b/src/img/fontawesome/LICENSE.txt
@@ -0,0 +1,25 @@
+# [Font Awesome v4.7.0](http://fontawesome.io)
+### The iconic font and CSS framework
+
+Font Awesome is a full suite of 675 pictographic icons for easy scalable vector graphics on websites,
+created and maintained by [Dave Gandy](https://twitter.com/davegandy).
+Stay up to date with the latest release and announcements on Twitter:
+[@fontawesome](http://twitter.com/fontawesome).
+
+Get started at http://fontawesome.io!
+
+## License
+- The Font Awesome font is licensed under the SIL OFL 1.1:
+ - http://scripts.sil.org/OFL
+- Font Awesome CSS, LESS, and Sass files are licensed under the MIT License:
+ - https://opensource.org/licenses/mit-license.html
+- The Font Awesome documentation is licensed under the CC BY 3.0 License:
+ - http://creativecommons.org/licenses/by/3.0/
+- Attribution is no longer required as of Font Awesome 3.0, but much appreciated:
+ - `Font Awesome by Dave Gandy - http://fontawesome.io`
+- Full details: http://fontawesome.io/license/
+
+## Author
+- Email: dave@fontawesome.io
+- Twitter: http://twitter.com/davegandy
+- GitHub: https://github.com/davegandy
diff --git a/src/img/fontawesome/fontawesome-defs.svg b/src/img/fontawesome/fontawesome-defs.svg
new file mode 100644
index 0000000..75bc67f
--- /dev/null
+++ b/src/img/fontawesome/fontawesome-defs.svg
@@ -0,0 +1,79 @@
+<!--
+
+ The SVG definitions were imported piecemeal from:
+ https://github.com/FortAwesome/Font-Awesome/releases/tag/v4.7.0
+
+-->
+
+<!--
+
+Font Awesome v4.7.0 by Dave Gandy
+https://github.com/FortAwesome/Font-Awesome/tree/a8386aae19e200ddb0f6845b5feeee5eb7013687#font-awesome-v470
+
+License - https://github.com/FortAwesome/Font-Awesome/tree/a8386aae19e200ddb0f6845b5feeee5eb7013687#license:
+
+- The Font Awesome font is licensed under the SIL OFL 1.1:
+ - http://scripts.sil.org/OFL
+- Font Awesome CSS, LESS, and Sass files are licensed under the MIT License:
+ - https://opensource.org/licenses/mit-license.html
+- The Font Awesome documentation is licensed under the CC BY 3.0 License:
+ - http://creativecommons.org/licenses/by/3.0/
+- Attribution is no longer required as of Font Awesome 3.0, but much appreciated:
+ - `Font Awesome by Dave Gandy - http://fontawesome.io`
+- Full details: http://fontawesome.io/license/
+
+-->
+
+<svg xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <symbol id="angle-up" viewBox="0 0 998 582"><path d="m 998,499 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 499,179 106,572 Q 96,582 83,582 70,582 60,572 L 10,522 Q 0,512 0,499 0,486 10,476 L 476,10 q 10,-10 23,-10 13,0 23,10 l 466,466 q 10,10 10,23 z"/></symbol>
+ <symbol id="arrow-right" viewBox="0 0 1472 1558"><path d="m 1472,779 q 0,54 -37,91 l -651,651 q -39,37 -91,37 -51,0 -90,-37 l -75,-75 q -38,-38 -38,-91 0,-53 38,-91 L 821,971 H 117 Q 65,971 32.5,933.5 0,896 0,843 V 715 Q 0,662 32.5,624.5 65,587 117,587 H 821 L 528,293 q -38,-36 -38,-90 0,-54 38,-90 l 75,-75 q 38,-38 90,-38 53,0 91,38 l 651,651 q 37,35 37,90 z"/></symbol>
+ <symbol id="bar-chart" viewBox="0 0 2048 1536"><path d="m 640,768 0,512 -256,0 0,-512 256,0 z m 384,-512 0,1024 -256,0 0,-1024 256,0 z m 1024,1152 0,128 L 0,1536 0,0 l 128,0 0,1408 1920,0 z m -640,-896 0,768 -256,0 0,-768 256,0 z m 384,-384 0,1152 -256,0 0,-1152 256,0 z"/></symbol>
+ <symbol id="bolt" viewBox="0 0 896 1664"><path d="m 885.08696,438 q 18,20 7,44 l -540,1157 q -13,25 -42,25 -4,0 -14,-2 -17,-5 -25.5,-19 -8.5,-14 -4.5,-30 l 197,-808 -406,101 q -4,1 -12,1 -18,0 -31,-11 Q -3.9130435,881 1.0869565,857 L 202.08696,32 q 4,-14 16,-23 12,-9 28,-9 l 328,0 q 19,0 32,12.5 13,12.5 13,29.5 0,8 -5,18 l -171,463 396,-98 q 8,-2 12,-2 19,0 34,15 z"/></symbol>
+ <symbol id="clipboard" viewBox="0 0 1792 1792"><path d="m 768,1664 896,0 0,-640 -416,0 q -40,0 -68,-28 -28,-28 -28,-68 l 0,-416 -384,0 0,1152 z m 256,-1440 0,-64 q 0,-13 -9.5,-22.5 Q 1005,128 992,128 l -704,0 q -13,0 -22.5,9.5 Q 256,147 256,160 l 0,64 q 0,13 9.5,22.5 9.5,9.5 22.5,9.5 l 704,0 q 13,0 22.5,-9.5 9.5,-9.5 9.5,-22.5 z m 256,672 299,0 -299,-299 0,299 z m 512,128 0,672 q 0,40 -28,68 -28,28 -68,28 l -960,0 q -40,0 -68,-28 -28,-28 -28,-68 l 0,-160 -544,0 Q 56,1536 28,1508 0,1480 0,1440 L 0,96 Q 0,56 28,28 56,0 96,0 l 1088,0 q 40,0 68,28 28,28 28,68 l 0,328 q 21,13 36,28 l 408,408 q 28,28 48,76 20,48 20,88 z"/></symbol>
+ <symbol id="clock-o" viewBox="0 0 1536 1536"><path d="m 896,416 v 448 q 0,14 -9,23 -9,9 -23,9 H 544 q -14,0 -23,-9 -9,-9 -9,-23 v -64 q 0,-14 9,-23 9,-9 23,-9 H 768 V 416 q 0,-14 9,-23 9,-9 23,-9 h 64 q 14,0 23,9 9,9 9,23 z m 416,352 q 0,-148 -73,-273 -73,-125 -198,-198 -125,-73 -273,-73 -148,0 -273,73 -125,73 -198,198 -73,125 -73,273 0,148 73,273 73,125 198,198 125,73 273,73 148,0 273,-73 125,-73 198,-198 73,-125 73,-273 z m 224,0 q 0,209 -103,385.5 Q 1330,1330 1153.5,1433 977,1536 768,1536 559,1536 382.5,1433 206,1330 103,1153.5 0,977 0,768 0,559 103,382.5 206,206 382.5,103 559,0 768,0 977,0 1153.5,103 1330,206 1433,382.5 1536,559 1536,768 Z"/></symbol>
+ <symbol id="cloud-download" viewBox="0 0 1920 1408"><path d="m 1280,800 q 0,-14 -9,-23 -9,-9 -23,-9 l -224,0 0,-352 q 0,-13 -9.5,-22.5 Q 1005,384 992,384 l -192,0 q -13,0 -22.5,9.5 Q 768,403 768,416 l 0,352 -224,0 q -13,0 -22.5,9.5 -9.5,9.5 -9.5,22.5 0,14 9,23 l 352,352 q 9,9 23,9 14,0 23,-9 l 351,-351 q 10,-12 10,-24 z m 640,224 q 0,159 -112.5,271.5 Q 1695,1408 1536,1408 l -1088,0 Q 263,1408 131.5,1276.5 0,1145 0,960 0,830 70,720 140,610 258,555 256,525 256,512 256,300 406,150 556,0 768,0 q 156,0 285.5,87 129.5,87 188.5,231 71,-62 166,-62 106,0 181,75 75,75 75,181 0,76 -41,138 130,31 213.5,135.5 Q 1920,890 1920,1024 Z"/></symbol>
+ <symbol id="cloud-upload" viewBox="0 0 1920 1408"><path d="m 1280,736 q 0,-14 -9,-23 L 919,361 q -9,-9 -23,-9 -14,0 -23,9 L 522,712 q -10,12 -10,24 0,14 9,23 9,9 23,9 l 224,0 0,352 q 0,13 9.5,22.5 9.5,9.5 22.5,9.5 l 192,0 q 13,0 22.5,-9.5 9.5,-9.5 9.5,-22.5 l 0,-352 224,0 q 13,0 22.5,-9.5 9.5,-9.5 9.5,-22.5 z m 640,288 q 0,159 -112.5,271.5 Q 1695,1408 1536,1408 l -1088,0 Q 263,1408 131.5,1276.5 0,1145 0,960 0,830 70,720 140,610 258,555 256,525 256,512 256,300 406,150 556,0 768,0 q 156,0 285.5,87 129.5,87 188.5,231 71,-62 166,-62 106,0 181,75 75,75 75,181 0,76 -41,138 130,31 213.5,135.5 Q 1920,890 1920,1024 Z"/></symbol>
+ <symbol id="check" viewBox="0 0 1550 1188"><path d="m 1550,232 q 0,40 -28,68 l -724,724 -136,136 q -28,28 -68,28 -40,0 -68,-28 L 390,1024 28,662 Q 0,634 0,594 0,554 28,526 L 164,390 q 28,-28 68,-28 40,0 68,28 L 594,685 1250,28 q 28,-28 68,-28 40,0 68,28 l 136,136 q 28,28 28,68 z"/></symbol>
+ <symbol id="code" viewBox="0 0 1830 1373"><path d="m 572,1125.5 -50,50 q -10,10 -23,10 -13,0 -23,-10 l -466,-466 q -10,-10 -10,-23 0,-13 10,-23 l 466,-466 q 10,-10 23,-10 13,0 23,10 l 50,50 q 10,10 10,23 0,13 -10,23 l -393,393 393,393 q 10,10 10,23 0,13 -10,23 z M 1163,58.476203 790,1349.4762 q -4,13 -15.5,19.5 -11.5,6.5 -23.5,2.5 l -62,-17 q -13,-4 -19.5,-15.5 -6.5,-11.5 -2.5,-24.5 L 1040,23.5 q 4,-13 15.5,-19.5 11.5,-6.5 23.5,-2.5 l 62,17 q 13,4 19.5,15.5 6.5,11.5 2.5,24.5 z m 657,651 -466,466 q -10,10 -23,10 -13,0 -23,-10 l -50,-50 q -10,-10 -10,-23 0,-13 10,-23 l 393,-393 -393,-393 q -10,-10 -10,-23 0,-13 10,-23 l 50,-50 q 10,-10 23,-10 13,0 23,10 l 466,466 q 10,10 10,23 0,13 -10,23 z"/></symbol>
+ <symbol id="cog" viewBox="0 0 1536 1536"><path d="m 1024,768 q 0,-106 -75,-181 -75,-75 -181,-75 -106,0 -181,75 -75,75 -75,181 0,106 75,181 75,75 181,75 106,0 181,-75 75,-75 75,-181 z m 512,-109 0,222 q 0,12 -8,23 -8,11 -20,13 l -185,28 q -19,54 -39,91 35,50 107,138 10,12 10,25 0,13 -9,23 -27,37 -99,108 -72,71 -94,71 -12,0 -26,-9 l -138,-108 q -44,23 -91,38 -16,136 -29,186 -7,28 -36,28 l -222,0 q -14,0 -24.5,-8.5 Q 622,1519 621,1506 l -28,-184 q -49,-16 -90,-37 l -141,107 q -10,9 -25,9 -14,0 -25,-11 -126,-114 -165,-168 -7,-10 -7,-23 0,-12 8,-23 15,-21 51,-66.5 36,-45.5 54,-70.5 -27,-50 -41,-99 L 29,913 Q 16,911 8,900.5 0,890 0,877 L 0,655 q 0,-12 8,-23 8,-11 19,-13 l 186,-28 q 14,-46 39,-92 -40,-57 -107,-138 -10,-12 -10,-24 0,-10 9,-23 26,-36 98.5,-107.5 Q 315,135 337,135 q 13,0 26,10 L 501,252 Q 545,229 592,214 608,78 621,28 628,0 657,0 L 879,0 Q 893,0 903.5,8.5 914,17 915,30 l 28,184 q 49,16 90,37 l 142,-107 q 9,-9 24,-9 13,0 25,10 129,119 165,170 7,8 7,22 0,12 -8,23 -15,21 -51,66.5 -36,45.5 -54,70.5 26,50 41,98 l 183,28 q 13,2 21,12.5 8,10.5 8,23.5 z"/></symbol>
+ <symbol id="cogs" viewBox="0 0 1920 1761"><path d="m 896,880 q 0,-106 -75,-181 -75,-75 -181,-75 -106,0 -181,75 -75,75 -75,181 0,106 75,181 75,75 181,75 106,0 181,-75 75,-75 75,-181 z m 768,512 q 0,-52 -38,-90 -38,-38 -90,-38 -52,0 -90,38 -38,38 -38,90 0,53 37.5,90.5 37.5,37.5 90.5,37.5 53,0 90.5,-37.5 37.5,-37.5 37.5,-90.5 z m 0,-1024 q 0,-52 -38,-90 -38,-38 -90,-38 -52,0 -90,38 -38,38 -38,90 0,53 37.5,90.5 37.5,37.5 90.5,37.5 53,0 90.5,-37.5 Q 1664,421 1664,368 Z m -384,421 v 185 q 0,10 -7,19.5 -7,9.5 -16,10.5 l -155,24 q -11,35 -32,76 34,48 90,115 7,11 7,20 0,12 -7,19 -23,30 -82.5,89.5 -59.5,59.5 -78.5,59.5 -11,0 -21,-7 l -115,-90 q -37,19 -77,31 -11,108 -23,155 -7,24 -30,24 H 547 q -11,0 -20,-7.5 -9,-7.5 -10,-17.5 l -23,-153 q -34,-10 -75,-31 l -118,89 q -7,7 -20,7 -11,0 -21,-8 -144,-133 -144,-160 0,-9 7,-19 10,-14 41,-53 31,-39 47,-61 -23,-44 -35,-82 L 24,1000 Q 14,999 7,990.5 0,982 0,971 V 786 Q 0,776 7,766.5 14,757 23,756 l 155,-24 q 11,-35 32,-76 -34,-48 -90,-115 -7,-11 -7,-20 0,-12 7,-20 22,-30 82,-89 60,-59 79,-59 11,0 21,7 l 115,90 q 34,-18 77,-32 11,-108 23,-154 7,-24 30,-24 h 186 q 11,0 20,7.5 9,7.5 10,17.5 l 23,153 q 34,10 75,31 l 118,-89 q 8,-7 20,-7 11,0 21,8 144,133 144,160 0,8 -7,19 -12,16 -42,54 -30,38 -45,60 23,48 34,82 l 152,23 q 10,2 17,10.5 7,8.5 7,19.5 z m 640,533 v 140 q 0,16 -149,31 -12,27 -30,52 51,113 51,138 0,4 -4,7 -122,71 -124,71 -8,0 -46,-47 -38,-47 -52,-68 -20,2 -30,2 -10,0 -30,-2 -14,21 -52,68 -38,47 -46,47 -2,0 -124,-71 -4,-3 -4,-7 0,-25 51,-138 -18,-25 -30,-52 -149,-15 -149,-31 v -140 q 0,-16 149,-31 13,-29 30,-52 -51,-113 -51,-138 0,-4 4,-7 4,-2 35,-20 31,-18 59,-34 28,-16 30,-16 8,0 46,46.5 38,46.5 52,67.5 20,-2 30,-2 10,0 30,2 51,-71 92,-112 l 6,-2 q 4,0 124,70 4,3 4,7 0,25 -51,138 17,23 30,52 149,15 149,31 z m 0,-1024 v 140 q 0,16 -149,31 -12,27 -30,52 51,113 51,138 0,4 -4,7 -122,71 -124,71 -8,0 -46,-47 -38,-47 -52,-68 -20,2 -30,2 -10,0 -30,-2 -14,21 -52,68 -38,47 -46,47 -2,0 -124,-71 -4,-3 -4,-7 0,-25 51,-138 -18,-25 -30,-52 -149,-15 -149,-31 V 298 q 0,-16 149,-31 13,-29 30,-52 -51,-113 -51,-138 0,-4 4,-7 4,-2 35,-20 31,-18 59,-34 28,-16 30,-16 8,0 46,46.5 38,46.5 52,67.5 20,-2 30,-2 10,0 30,2 51,-71 92,-112 l 6,-2 q 4,0 124,70 4,3 4,7 0,25 -51,138 17,23 30,52 149,15 149,31 z"/></symbol>
+ <symbol id="comment-alt" viewBox="0 0 1792 1536"><path d="M 896,128 Q 692,128 514.5,197.5 337,267 232.5,385 128,503 128,640 128,752 199.5,853.5 271,955 401,1029 l 87,50 -27,96 q -24,91 -70,172 152,-63 275,-171 l 43,-38 57,6 q 69,8 130,8 204,0 381.5,-69.5 Q 1455,1013 1559.5,895 1664,777 1664,640 1664,503 1559.5,385 1455,267 1277.5,197.5 1100,128 896,128 Z m 896,512 q 0,174 -120,321.5 -120,147.5 -326,233 -206,85.5 -450,85.5 -70,0 -145,-8 -198,175 -460,242 -49,14 -114,22 h -5 q -15,0 -27,-10.5 -12,-10.5 -16,-27.5 v -1 q -3,-4 -0.5,-12 2.5,-8 2,-10 -0.5,-2 4.5,-9.5 l 6,-9 q 0,0 7,-8.5 7,-8.5 8,-9 7,-8 31,-34.5 24,-26.5 34.5,-38 10.5,-11.5 31,-39.5 20.5,-28 32.5,-51 12,-23 27,-59 15,-36 26,-76 Q 181,1052 90.5,921 0,790 0,640 0,466 120,318.5 240,171 446,85.5 652,0 896,0 q 244,0 450,85.5 206,85.5 326,233 120,147.5 120,321.5 z"/></symbol>
+ <symbol id="double-angle-left" viewBox="0 0 966 998"><path d="m 582,915 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 10,522 Q 0,512 0,499 0,486 10,476 L 476,10 q 10,-10 23,-10 13,0 23,10 l 50,50 q 10,10 10,23 0,13 -10,23 L 179,499 572,892 q 10,10 10,23 z m 384,0 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 394,522 q -10,-10 -10,-23 0,-13 10,-23 L 860,10 q 10,-10 23,-10 13,0 23,10 l 50,50 q 10,10 10,23 0,13 -10,23 L 563,499 956,892 q 10,10 10,23 z"/></symbol>
+ <symbol id="double-angle-up" viewBox="0 0 998 966"><path d="m 998,883 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 499,563 106,956 Q 96,966 83,966 70,966 60,956 L 10,906 Q 0,896 0,883 0,870 10,860 L 476,394 q 10,-10 23,-10 13,0 23,10 l 466,466 q 10,10 10,23 z m 0,-384 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 499,179 106,572 Q 96,582 83,582 70,582 60,572 L 10,522 Q 0,512 0,499 0,486 10,476 L 476,10 q 10,-10 23,-10 13,0 23,10 l 466,466 q 10,10 10,23 z"/></symbol>
+ <symbol id="download_alt" viewBox="0 0 1664 1536"><path d="m 1280,1344 q 0,-26 -19,-45 -19,-19 -45,-19 -26,0 -45,19 -19,19 -19,45 0,26 19,45 19,19 45,19 26,0 45,-19 19,-19 19,-45 z m 256,0 q 0,-26 -19,-45 -19,-19 -45,-19 -26,0 -45,19 -19,19 -19,45 0,26 19,45 19,19 45,19 26,0 45,-19 19,-19 19,-45 z m 128,-224 v 320 q 0,40 -28,68 -28,28 -68,28 H 96 q -40,0 -68,-28 -28,-28 -28,-68 v -320 q 0,-40 28,-68 28,-28 68,-28 h 465 l 135,136 q 58,56 136,56 78,0 136,-56 l 136,-136 h 464 q 40,0 68,28 28,28 28,68 z M 1339,551 q 17,41 -14,70 l -448,448 q -18,19 -45,19 -27,0 -45,-19 L 339,621 q -31,-29 -14,-70 17,-39 59,-39 H 640 V 64 Q 640,38 659,19 678,0 704,0 h 256 q 26,0 45,19 19,19 19,45 v 448 h 256 q 42,0 59,39 z"/></symbol>
+ <symbol id="eraser" viewBox="0 0 1920 1280"><path d="M 896,1152 1232,768 l -768,0 -336,384 768,0 z M 1909,75 q 15,34 9.5,71.5 Q 1913,184 1888,212 L 992,1236 q -38,44 -96,44 l -768,0 q -38,0 -69.5,-20.5 -31.5,-20.5 -47.5,-54.5 -15,-34 -9.5,-71.5 5.5,-37.5 30.5,-65.5 L 928,44 Q 966,0 1024,0 l 768,0 q 38,0 69.5,20.5 Q 1893,41 1909,75 Z"/></symbol>
+ <symbol id="exclamation-triangle" viewBox="0 0 1794 1664"><path d="m 1025.0139,1375 0,-190 q 0,-14 -9.5,-23.5 -9.5,-9.5 -22.5,-9.5 l -192,0 q -13,0 -22.5,9.5 -9.5,9.5 -9.5,23.5 l 0,190 q 0,14 9.5,23.5 9.5,9.5 22.5,9.5 l 192,0 q 13,0 22.5,-9.5 9.5,-9.5 9.5,-23.5 z m -2,-374 18,-459 q 0,-12 -10,-19 -13,-11 -24,-11 l -220,0 q -11,0 -24,11 -10,7 -10,21 l 17,457 q 0,10 10,16.5 10,6.5 24,6.5 l 185,0 q 14,0 23.5,-6.5 9.5,-6.5 10.5,-16.5 z m -14,-934 768,1408 q 35,63 -2,126 -17,29 -46.5,46 -29.5,17 -63.5,17 l -1536,0 q -34,0 -63.5,-17 -29.5,-17 -46.5,-46 -37,-63 -2,-126 L 785.01389,67 q 17,-31 47,-49 30,-18 65,-18 35,0 65,18 30,18 47,49 z"/></symbol>
+ <symbol id="external-link" viewBox="0 0 1792 1536"><path d="m 1408,928 0,320 q 0,119 -84.5,203.5 Q 1239,1536 1120,1536 l -832,0 Q 169,1536 84.5,1451.5 0,1367 0,1248 L 0,416 Q 0,297 84.5,212.5 169,128 288,128 l 704,0 q 14,0 23,9 9,9 9,23 l 0,64 q 0,14 -9,23 -9,9 -23,9 l -704,0 q -66,0 -113,47 -47,47 -47,113 l 0,832 q 0,66 47,113 47,47 113,47 l 832,0 q 66,0 113,-47 47,-47 47,-113 l 0,-320 q 0,-14 9,-23 9,-9 23,-9 l 64,0 q 14,0 23,9 9,9 9,23 z m 384,-864 0,512 q 0,26 -19,45 -19,19 -45,19 -26,0 -45,-19 L 1507,445 855,1097 q -10,10 -23,10 -13,0 -23,-10 L 695,983 q -10,-10 -10,-23 0,-13 10,-23 L 1347,285 1171,109 q -19,-19 -19,-45 0,-26 19,-45 19,-19 45,-19 l 512,0 q 26,0 45,19 19,19 19,45 z" /></symbol>
+ <symbol id="eye-dropper" viewBox="0 0 1792 1792"><path d="m 1698,94 q 94,94 94,226.5 0,132.5 -94,225.5 l -225,223 104,104 q 10,10 10,23 0,13 -10,23 l -210,210 q -10,10 -23,10 -13,0 -23,-10 l -105,-105 -603,603 q -37,37 -90,37 l -203,0 -256,128 -64,-64 128,-256 0,-203 q 0,-53 37,-90 L 768,576 663,471 q -10,-10 -10,-23 0,-13 10,-23 L 873,215 q 10,-10 23,-10 13,0 23,10 L 1023,319 1246,94 Q 1339,0 1471.5,0 1604,0 1698,94 Z M 512,1472 1088,896 896,704 l -576,576 0,192 192,0 z"/></symbol>
+ <symbol id="eye-open" viewBox="0 0 1792 1152"><path d="m 1664,576 q -152,-236 -381,-353 61,104 61,225 0,185 -131.5,316.5 Q 1081,896 896,896 711,896 579.5,764.5 448,633 448,448 448,327 509,223 280,340 128,576 261,781 461.5,902.5 662,1024 896,1024 1130,1024 1330.5,902.5 1531,781 1664,576 Z M 944,192 q 0,-20 -14,-34 -14,-14 -34,-14 -125,0 -214.5,89.5 Q 592,323 592,448 q 0,20 14,34 14,14 34,14 20,0 34,-14 14,-14 14,-34 0,-86 61,-147 61,-61 147,-61 20,0 34,-14 14,-14 14,-34 z m 848,384 q 0,34 -20,69 -140,230 -376.5,368.5 Q 1159,1152 896,1152 633,1152 396.5,1013 160,874 20,645 0,610 0,576 0,542 20,507 160,278 396.5,139 633,0 896,0 q 263,0 499.5,139 236.5,139 376.5,368 20,35 20,69 z"/></symbol>
+ <symbol id="eye-slash" viewBox="0 0 1792 1344"><path d="M 555,1047 633,906 Q 546,843 497,747 448,651 448,544 448,423 509,319 280,436 128,672 295,930 555,1047 Z M 944,288 q 0,-20 -14,-34 -14,-14 -34,-14 -125,0 -214.5,89.5 Q 592,419 592,544 q 0,20 14,34 14,14 34,14 20,0 34,-14 14,-14 14,-34 0,-86 61,-147 61,-61 147,-61 20,0 34,-14 14,-14 14,-34 z M 1307,97 q 0,7 -1,9 -106,189 -316,567 -210,378 -315,566 l -49,89 q -10,16 -28,16 -12,0 -134,-70 -16,-10 -16,-28 0,-12 44,-87 Q 349,1094 228.5,986 108,878 20,741 0,710 0,672 0,634 20,603 173,368 400,232 627,96 896,96 q 89,0 180,17 l 54,-97 q 10,-16 28,-16 5,0 18,6 13,6 31,15.5 18,9.5 33,18.5 15,9 31.5,18.5 16.5,9.5 19.5,11.5 16,10 16,27 z m 37,447 q 0,139 -79,253.5 Q 1186,912 1056,962 l 280,-502 q 8,45 8,84 z m 448,128 q 0,35 -20,69 -39,64 -109,145 -150,172 -347.5,267 -197.5,95 -419.5,95 l 74,-132 Q 1182,1098 1362.5,979 1543,860 1664,672 1549,493 1382,378 l 63,-112 q 95,64 182.5,153 87.5,89 144.5,184 20,34 20,69 z"/></symbol>
+ <symbol id="files-o" viewBox="0 0 1792 1792"><path d="m 1696,384 q 40,0 68,28 28,28 28,68 l 0,1216 q 0,40 -28,68 -28,28 -68,28 l -960,0 q -40,0 -68,-28 -28,-28 -28,-68 l 0,-288 -544,0 Q 56,1408 28,1380 0,1352 0,1312 L 0,640 Q 0,600 20,552 40,504 68,476 L 476,68 Q 504,40 552,20 600,0 640,0 l 416,0 q 40,0 68,28 28,28 28,68 l 0,328 q 68,-40 128,-40 l 416,0 z m -544,213 -299,299 299,0 0,-299 z M 512,213 213,512 l 299,0 0,-299 z m 196,647 316,-316 0,-416 -384,0 0,416 q 0,40 -28,68 -28,28 -68,28 l -416,0 0,640 512,0 0,-256 q 0,-40 20,-88 20,-48 48,-76 z m 956,804 0,-1152 -384,0 0,416 q 0,40 -28,68 -28,28 -68,28 l -416,0 0,640 896,0 z"/></symbol>
+ <symbol id="film" viewBox="0 0 1920 1664"><path d="m 384,1472 0,-128 q 0,-26 -19,-45 -19,-19 -45,-19 l -128,0 q -26,0 -45,19 -19,19 -19,45 l 0,128 q 0,26 19,45 19,19 45,19 l 128,0 q 26,0 45,-19 19,-19 19,-45 z m 0,-384 0,-128 q 0,-26 -19,-45 -19,-19 -45,-19 l -128,0 q -26,0 -45,19 -19,19 -19,45 l 0,128 q 0,26 19,45 19,19 45,19 l 128,0 q 26,0 45,-19 19,-19 19,-45 z m 0,-384 0,-128 q 0,-26 -19,-45 -19,-19 -45,-19 l -128,0 q -26,0 -45,19 -19,19 -19,45 l 0,128 q 0,26 19,45 19,19 45,19 l 128,0 q 26,0 45,-19 19,-19 19,-45 z m 1024,768 0,-512 q 0,-26 -19,-45 -19,-19 -45,-19 l -768,0 q -26,0 -45,19 -19,19 -19,45 l 0,512 q 0,26 19,45 19,19 45,19 l 768,0 q 26,0 45,-19 19,-19 19,-45 z M 384,320 384,192 q 0,-26 -19,-45 -19,-19 -45,-19 l -128,0 q -26,0 -45,19 -19,19 -19,45 l 0,128 q 0,26 19,45 19,19 45,19 l 128,0 q 26,0 45,-19 19,-19 19,-45 z m 1408,1152 0,-128 q 0,-26 -19,-45 -19,-19 -45,-19 l -128,0 q -26,0 -45,19 -19,19 -19,45 l 0,128 q 0,26 19,45 19,19 45,19 l 128,0 q 26,0 45,-19 19,-19 19,-45 z m -384,-768 0,-512 q 0,-26 -19,-45 -19,-19 -45,-19 l -768,0 q -26,0 -45,19 -19,19 -19,45 l 0,512 q 0,26 19,45 19,19 45,19 l 768,0 q 26,0 45,-19 19,-19 19,-45 z m 384,384 0,-128 q 0,-26 -19,-45 -19,-19 -45,-19 l -128,0 q -26,0 -45,19 -19,19 -19,45 l 0,128 q 0,26 19,45 19,19 45,19 l 128,0 q 26,0 45,-19 19,-19 19,-45 z m 0,-384 0,-128 q 0,-26 -19,-45 -19,-19 -45,-19 l -128,0 q -26,0 -45,19 -19,19 -19,45 l 0,128 q 0,26 19,45 19,19 45,19 l 128,0 q 26,0 45,-19 19,-19 19,-45 z m 0,-384 0,-128 q 0,-26 -19,-45 -19,-19 -45,-19 l -128,0 q -26,0 -45,19 -19,19 -19,45 l 0,128 q 0,26 19,45 19,19 45,19 l 128,0 q 26,0 45,-19 19,-19 19,-45 z m 128,-160 0,1344 q 0,66 -47,113 -47,47 -113,47 l -1600,0 Q 94,1664 47,1617 0,1570 0,1504 L 0,160 Q 0,94 47,47 94,0 160,0 l 1600,0 q 66,0 113,47 47,47 47,113 z"/></symbol>
+ <symbol id="filter" viewBox="0 0 1410 1408"><path d="m 1404.0208,39 q 17,41 -14,70 l -493,493 0,742 q 0,42 -39,59 -13,5 -25,5 -27,0 -45,-19 l -256,-256 q -19,-19 -19,-45 l 0,-486 L 20.020833,109 q -31,-29 -14,-70 Q 23.020833,0 65.020833,0 L 1345.0208,0 q 42,0 59,39 z"/></symbol>
+ <symbol id="floppy-o" viewBox="0 0 1536 1536"><path d="m 384,1408 768,0 0,-384 -768,0 0,384 z m 896,0 128,0 0,-896 q 0,-14 -10,-38.5 Q 1388,449 1378,439 L 1097,158 q -10,-10 -34,-20 -24,-10 -39,-10 l 0,416 q 0,40 -28,68 -28,28 -68,28 l -576,0 q -40,0 -68,-28 -28,-28 -28,-68 l 0,-416 -128,0 0,1280 128,0 0,-416 q 0,-40 28,-68 28,-28 68,-28 l 832,0 q 40,0 68,28 28,28 28,68 l 0,416 z M 896,480 896,160 q 0,-13 -9.5,-22.5 Q 877,128 864,128 l -192,0 q -13,0 -22.5,9.5 Q 640,147 640,160 l 0,320 q 0,13 9.5,22.5 9.5,9.5 22.5,9.5 l 192,0 q 13,0 22.5,-9.5 Q 896,493 896,480 Z m 640,32 0,928 q 0,40 -28,68 -28,28 -68,28 L 96,1536 Q 56,1536 28,1508 0,1480 0,1440 L 0,96 Q 0,56 28,28 56,0 96,0 l 928,0 q 40,0 88,20 48,20 76,48 l 280,280 q 28,28 48,76 20,48 20,88 z"/></symbol>
+ <symbol id="font" viewBox="0 0 1664 1536"><path d="M 725,431 555,881 q 33,0 136.5,2 103.5,2 160.5,2 19,0 57,-2 Q 822,630 725,431 Z M 0,1536 2,1457 q 23,-7 56,-12.5 33,-5.5 57,-10.5 24,-5 49.5,-14.5 25.5,-9.5 44.5,-29 19,-19.5 31,-50.5 L 477,724 757,0 l 75,0 53,0 q 8,14 11,21 l 205,480 q 33,78 106,257.5 73,179.5 114,274.5 15,34 58,144.5 43,110.5 72,168.5 20,45 35,57 19,15 88,29.5 69,14.5 84,20.5 6,38 6,57 0,5 -0.5,13.5 -0.5,8.5 -0.5,12.5 -63,0 -190,-8 -127,-8 -191,-8 -76,0 -215,7 -139,7 -178,8 0,-43 4,-78 l 131,-28 q 1,0 12.5,-2.5 11.5,-2.5 15.5,-3.5 4,-1 14.5,-4.5 10.5,-3.5 15,-6.5 4.5,-3 11,-8 6.5,-5 9,-11 2.5,-6 2.5,-14 0,-16 -31,-96.5 -31,-80.5 -72,-177.5 -41,-97 -42,-100 l -450,-2 q -26,58 -76.5,195.5 Q 382,1336 382,1361 q 0,22 14,37.5 14,15.5 43.5,24.5 29.5,9 48.5,13.5 19,4.5 57,8.5 38,4 41,4 1,19 1,58 0,9 -2,27 -58,0 -174.5,-10 -116.5,-10 -174.5,-10 -8,0 -26.5,4 -18.5,4 -21.5,4 -80,14 -188,14 z"/></symbol>
+ <symbol id="home" viewBox="0 0 1612 1283"><path d="m 1382.1111,739 v 480 q 0,26 -19,45 -19,19 -45,19 H 934.11111 V 899 h -256 v 384 h -384 q -26,0 -45,-19 -19,-19 -19,-45 V 739 q 0,-1 0.5,-3 0.5,-2 0.5,-3 l 575,-474 574.99999,474 q 1,2 1,6 z m 223,-69 -62,74 q -8,9 -21,11 h -3 q -13,0 -21,-7 l -691.99999,-577 -692,577 q -12,8 -23.999999,7 -13,-2 -21,-11 L 7.1111111,670 Q -0.88888889,660 0.11111111,646.5 1.1111111,633 11.111111,625 L 730.11111,26 q 32,-26 76,-26 44,0 76,26 L 1126.1111,230 V 35 q 0,-14 9,-23 9,-9 23,-9 h 192 q 14,0 23,9 9,9 9,23 v 408 l 219,182 q 10,8 11,21.5 1,13.5 -7,23.5 z"/></symbol>
+ <symbol id="info-circle" viewBox="0 0 1536 1536"><path d="m 1024,1248 0,-160 q 0,-14 -9,-23 -9,-9 -23,-9 l -96,0 0,-512 q 0,-14 -9,-23 -9,-9 -23,-9 l -320,0 q -14,0 -23,9 -9,9 -9,23 l 0,160 q 0,14 9,23 9,9 23,9 l 96,0 0,320 -96,0 q -14,0 -23,9 -9,9 -9,23 l 0,160 q 0,14 9,23 9,9 23,9 l 448,0 q 14,0 23,-9 9,-9 9,-23 z M 896,352 896,192 q 0,-14 -9,-23 -9,-9 -23,-9 l -192,0 q -14,0 -23,9 -9,9 -9,23 l 0,160 q 0,14 9,23 9,9 23,9 l 192,0 q 14,0 23,-9 9,-9 9,-23 z m 640,416 q 0,209 -103,385.5 Q 1330,1330 1153.5,1433 977,1536 768,1536 559,1536 382.5,1433 206,1330 103,1153.5 0,977 0,768 0,559 103,382.5 206,206 382.5,103 559,0 768,0 977,0 1153.5,103 1330,206 1433,382.5 1536,559 1536,768 Z"/></symbol>
+ <symbol id="list-alt" viewBox="0 0 1792 1408"><path d="m 384,1056 0,64 q 0,13 -9.5,22.5 -9.5,9.5 -22.5,9.5 l -64,0 q -13,0 -22.5,-9.5 Q 256,1133 256,1120 l 0,-64 q 0,-13 9.5,-22.5 9.5,-9.5 22.5,-9.5 l 64,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 0,-256 0,64 q 0,13 -9.5,22.5 Q 365,896 352,896 l -64,0 q -13,0 -22.5,-9.5 Q 256,877 256,864 l 0,-64 q 0,-13 9.5,-22.5 Q 275,768 288,768 l 64,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 0,-256 0,64 q 0,13 -9.5,22.5 Q 365,640 352,640 l -64,0 q -13,0 -22.5,-9.5 Q 256,621 256,608 l 0,-64 q 0,-13 9.5,-22.5 Q 275,512 288,512 l 64,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 1152,512 0,64 q 0,13 -9.5,22.5 -9.5,9.5 -22.5,9.5 l -960,0 q -13,0 -22.5,-9.5 Q 512,1133 512,1120 l 0,-64 q 0,-13 9.5,-22.5 9.5,-9.5 22.5,-9.5 l 960,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 0,-256 0,64 q 0,13 -9.5,22.5 -9.5,9.5 -22.5,9.5 l -960,0 q -13,0 -22.5,-9.5 Q 512,877 512,864 l 0,-64 q 0,-13 9.5,-22.5 Q 531,768 544,768 l 960,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 0,-256 0,64 q 0,13 -9.5,22.5 -9.5,9.5 -22.5,9.5 l -960,0 q -13,0 -22.5,-9.5 Q 512,621 512,608 l 0,-64 q 0,-13 9.5,-22.5 Q 531,512 544,512 l 960,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 128,704 0,-832 q 0,-13 -9.5,-22.5 Q 1645,384 1632,384 l -1472,0 q -13,0 -22.5,9.5 Q 128,403 128,416 l 0,832 q 0,13 9.5,22.5 9.5,9.5 22.5,9.5 l 1472,0 q 13,0 22.5,-9.5 9.5,-9.5 9.5,-22.5 z m 128,-1088 0,1088 q 0,66 -47,113 -47,47 -113,47 l -1472,0 Q 94,1408 47,1361 0,1314 0,1248 L 0,160 Q 0,94 47,47 94,0 160,0 l 1472,0 q 66,0 113,47 47,47 47,113 z"/></symbol>
+ <symbol id="lock" viewBox="0 0 1152 1408"><path d="m 320,640 512,0 0,-192 q 0,-106 -75,-181 -75,-75 -181,-75 -106,0 -181,75 -75,75 -75,181 l 0,192 z m 832,96 0,576 q 0,40 -28,68 -28,28 -68,28 l -960,0 Q 56,1408 28,1380 0,1352 0,1312 L 0,736 q 0,-40 28,-68 28,-28 68,-28 l 32,0 0,-192 Q 128,264 260,132 392,0 576,0 q 184,0 316,132 132,132 132,316 l 0,192 32,0 q 40,0 68,28 28,28 28,68 z"/></symbol>
+ <symbol id="pause-circle-o" viewBox="0 0 1536 1536"><path d="M 768,0 Q 977,0 1153.5,103 1330,206 1433,382.5 1536,559 1536,768 1536,977 1433,1153.5 1330,1330 1153.5,1433 977,1536 768,1536 559,1536 382.5,1433 206,1330 103,1153.5 0,977 0,768 0,559 103,382.5 206,206 382.5,103 559,0 768,0 Z m 0,1312 q 148,0 273,-73 125,-73 198,-198 73,-125 73,-273 0,-148 -73,-273 -73,-125 -198,-198 -125,-73 -273,-73 -148,0 -273,73 -125,73 -198,198 -73,125 -73,273 0,148 73,273 73,125 198,198 125,73 273,73 z m 96,-224 q -14,0 -23,-9 -9,-9 -9,-23 l 0,-576 q 0,-14 9,-23 9,-9 23,-9 l 192,0 q 14,0 23,9 9,9 9,23 l 0,576 q 0,14 -9,23 -9,9 -23,9 l -192,0 z m -384,0 q -14,0 -23,-9 -9,-9 -9,-23 l 0,-576 q 0,-14 9,-23 9,-9 23,-9 l 192,0 q 14,0 23,9 9,9 9,23 l 0,576 q 0,14 -9,23 -9,9 -23,9 l -192,0 z"/></symbol>
+ <symbol id="play-circle-o" viewBox="0 0 1536 1536"><path d="m 1184,768 q 0,37 -32,55 l -544,320 q -15,9 -32,9 -16,0 -32,-8 -32,-19 -32,-56 l 0,-640 q 0,-37 32,-56 33,-18 64,1 l 544,320 q 32,18 32,55 z m 128,0 q 0,-148 -73,-273 -73,-125 -198,-198 -125,-73 -273,-73 -148,0 -273,73 -125,73 -198,198 -73,125 -73,273 0,148 73,273 73,125 198,198 125,73 273,73 148,0 273,-73 125,-73 198,-198 73,-125 73,-273 z m 224,0 q 0,209 -103,385.5 Q 1330,1330 1153.5,1433 977,1536 768,1536 559,1536 382.5,1433 206,1330 103,1153.5 0,977 0,768 0,559 103,382.5 206,206 382.5,103 559,0 768,0 977,0 1153.5,103 1330,206 1433,382.5 1536,559 1536,768 Z"/></symbol>
+ <symbol id="plus" viewBox="0 0 1408 1408"><path d="m 1408,608 0,192 q 0,40 -28,68 -28,28 -68,28 l -416,0 0,416 q 0,40 -28,68 -28,28 -68,28 l -192,0 q -40,0 -68,-28 -28,-28 -28,-68 l 0,-416 -416,0 Q 56,896 28,868 0,840 0,800 L 0,608 q 0,-40 28,-68 28,-28 68,-28 l 416,0 0,-416 Q 512,56 540,28 568,0 608,0 l 192,0 q 40,0 68,28 28,28 28,68 l 0,416 416,0 q 40,0 68,28 28,28 28,68 z"/></symbol>
+ <symbol id="power-off" viewBox="0 0 1536 1664"><path d="m 1536,896 q 0,156 -61,298 -61,142 -164,245 -103,103 -245,164 -142,61 -298,61 -156,0 -298,-61 Q 328,1542 225,1439 122,1336 61,1194 0,1052 0,896 0,714 80.5,553 161,392 307,283 q 43,-32 95.5,-25 52.5,7 83.5,50 32,42 24.5,94.5 Q 503,455 461,487 363,561 309.5,668 256,775 256,896 q 0,104 40.5,198.5 40.5,94.5 109.5,163.5 69,69 163.5,109.5 94.5,40.5 198.5,40.5 104,0 198.5,-40.5 Q 1061,1327 1130,1258 1199,1189 1239.5,1094.5 1280,1000 1280,896 1280,775 1226.5,668 1173,561 1075,487 1033,455 1025.5,402.5 1018,350 1050,308 q 31,-43 84,-50 53,-7 95,25 146,109 226.5,270 80.5,161 80.5,343 z m -640,-768 0,640 q 0,52 -38,90 -38,38 -90,38 -52,0 -90,-38 -38,-38 -38,-90 l 0,-640 q 0,-52 38,-90 38,-38 90,-38 52,0 90,38 38,38 38,90 z"/></symbol>
+ <symbol id="question-circle" viewBox="0 0 1536 1536"><path d="m 896,1248 v -192 q 0,-14 -9,-23 -9,-9 -23,-9 H 672 q -14,0 -23,9 -9,9 -9,23 v 192 q 0,14 9,23 9,9 23,9 h 192 q 14,0 23,-9 9,-9 9,-23 z m 256,-672 q 0,-88 -55.5,-163 Q 1041,338 958,297 875,256 788,256 q -243,0 -371,213 -15,24 8,42 l 132,100 q 7,6 19,6 16,0 25,-12 53,-68 86,-92 34,-24 86,-24 48,0 85.5,26 37.5,26 37.5,59 0,38 -20,61 -20,23 -68,45 -63,28 -115.5,86.5 Q 640,825 640,892 v 36 q 0,14 9,23 9,9 23,9 h 192 q 14,0 23,-9 9,-9 9,-23 0,-19 21.5,-49.5 Q 939,848 972,829 q 32,-18 49,-28.5 17,-10.5 46,-35 29,-24.5 44.5,-48 15.5,-23.5 28,-60.5 12.5,-37 12.5,-81 z m 384,192 q 0,209 -103,385.5 Q 1330,1330 1153.5,1433 977,1536 768,1536 559,1536 382.5,1433 206,1330 103,1153.5 0,977 0,768 0,559 103,382.5 206,206 382.5,103 559,0 768,0 977,0 1153.5,103 1330,206 1433,382.5 1536,559 1536,768 Z"/></symbol>
+ <symbol id="refresh" viewBox="0 0 1536 1536"><path d="m 1511,928 q 0,5 -1,7 -64,268 -268,434.5 Q 1038,1536 764,1536 618,1536 481.5,1481 345,1426 238,1324 l -129,129 q -19,19 -45,19 -26,0 -45,-19 Q 0,1434 0,1408 L 0,960 q 0,-26 19,-45 19,-19 45,-19 l 448,0 q 26,0 45,19 19,19 19,45 0,26 -19,45 l -137,137 q 71,66 161,102 90,36 187,36 134,0 250,-65 116,-65 186,-179 11,-17 53,-117 8,-23 30,-23 l 192,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 25,-800 0,448 q 0,26 -19,45 -19,19 -45,19 l -448,0 q -26,0 -45,-19 -19,-19 -19,-45 0,-26 19,-45 L 1117,393 Q 969,256 768,256 q -134,0 -250,65 -116,65 -186,179 -11,17 -53,117 -8,23 -30,23 L 50,640 Q 37,640 27.5,630.5 18,621 18,608 l 0,-7 Q 83,333 288,166.5 493,0 768,0 914,0 1052,55.5 1190,111 1297,212 L 1427,83 q 19,-19 45,-19 26,0 45,19 19,19 19,45 z"/></symbol>
+ <symbol id="save" viewBox="0 0 1536 1536"><path d="m 384,1408 h 768 V 1024 H 384 Z m 896,0 h 128 V 512 q 0,-14 -10,-38.5 Q 1388,449 1378,439 L 1097,158 q -10,-10 -34,-20 -24,-10 -39,-10 v 416 q 0,40 -28,68 -28,28 -68,28 H 352 q -40,0 -68,-28 -28,-28 -28,-68 V 128 H 128 V 1408 H 256 V 992 q 0,-40 28,-68 28,-28 68,-28 h 832 q 40,0 68,28 28,28 28,68 z M 896,480 V 160 q 0,-13 -9.5,-22.5 Q 877,128 864,128 H 672 q -13,0 -22.5,9.5 Q 640,147 640,160 v 320 q 0,13 9.5,22.5 9.5,9.5 22.5,9.5 h 192 q 13,0 22.5,-9.5 Q 896,493 896,480 Z m 640,32 v 928 q 0,40 -28,68 -28,28 -68,28 H 96 Q 56,1536 28,1508 0,1480 0,1440 V 96 Q 0,56 28,28 56,0 96,0 h 928 q 40,0 88,20 48,20 76,48 l 280,280 q 28,28 48,76 20,48 20,88 z"/></symbol>
+ <symbol id="search" viewBox="0 0 1664 1664"><path d="M 1152,704 Q 1152,519 1020.5,387.5 889,256 704,256 519,256 387.5,387.5 256,519 256,704 256,889 387.5,1020.5 519,1152 704,1152 889,1152 1020.5,1020.5 1152,889 1152,704 Z m 512,832 q 0,52 -38,90 -38,38 -90,38 -54,0 -90,-38 L 1103,1284 Q 924,1408 704,1408 561,1408 430.5,1352.5 300,1297 205.5,1202.5 111,1108 55.5,977.5 0,847 0,704 0,561 55.5,430.5 111,300 205.5,205.5 300,111 430.5,55.5 561,0 704,0 q 143,0 273.5,55.5 130.5,55.5 225,150 94.5,94.5 150,225 55.5,130.5 55.5,273.5 0,220 -124,399 l 343,343 q 37,37 37,90 z"/></symbol>
+ <symbol id="sliders" viewBox="0 0 1536 1408"><path d="m 352,1152 0,128 -352,0 0,-128 352,0 z m 352,-128 q 26,0 45,19 19,19 19,45 l 0,256 q 0,26 -19,45 -19,19 -45,19 l -256,0 q -26,0 -45,-19 -19,-19 -19,-45 l 0,-256 q 0,-26 19,-45 19,-19 45,-19 l 256,0 z m 160,-384 0,128 -864,0 0,-128 864,0 z m -640,-512 0,128 -224,0 0,-128 224,0 z m 1312,1024 0,128 -736,0 0,-128 736,0 z M 576,0 q 26,0 45,19 19,19 19,45 l 0,256 q 0,26 -19,45 -19,19 -45,19 l -256,0 q -26,0 -45,-19 -19,-19 -19,-45 L 256,64 Q 256,38 275,19 294,0 320,0 l 256,0 z m 640,512 q 26,0 45,19 19,19 19,45 l 0,256 q 0,26 -19,45 -19,19 -45,19 l -256,0 q -26,0 -45,-19 -19,-19 -19,-45 l 0,-256 q 0,-26 19,-45 19,-19 45,-19 l 256,0 z m 320,128 0,128 -224,0 0,-128 224,0 z m 0,-512 0,128 -864,0 0,-128 864,0 z"/></symbol>
+ <symbol id="spinner" viewBox="0 0 1664 1728"><path d="m 462,1394 q 0,53 -37.5,90.5 -37.5,37.5 -90.5,37.5 -52,0 -90,-38 -38,-38 -38,-90 0,-53 37.5,-90.5 37.5,-37.5 90.5,-37.5 53,0 90.5,37.5 37.5,37.5 37.5,90.5 z m 498,206 q 0,53 -37.5,90.5 Q 885,1728 832,1728 779,1728 741.5,1690.5 704,1653 704,1600 q 0,-53 37.5,-90.5 37.5,-37.5 90.5,-37.5 53,0 90.5,37.5 Q 960,1547 960,1600 Z M 256,896 q 0,53 -37.5,90.5 Q 181,1024 128,1024 75,1024 37.5,986.5 0,949 0,896 0,843 37.5,805.5 75,768 128,768 q 53,0 90.5,37.5 Q 256,843 256,896 Z m 1202,498 q 0,52 -38,90 -38,38 -90,38 -53,0 -90.5,-37.5 -37.5,-37.5 -37.5,-90.5 0,-53 37.5,-90.5 37.5,-37.5 90.5,-37.5 53,0 90.5,37.5 37.5,37.5 37.5,90.5 z M 494,398 q 0,66 -47,113 -47,47 -113,47 -66,0 -113,-47 -47,-47 -47,-113 0,-66 47,-113 47,-47 113,-47 66,0 113,47 47,47 47,113 z m 1170,498 q 0,53 -37.5,90.5 -37.5,37.5 -90.5,37.5 -53,0 -90.5,-37.5 Q 1408,949 1408,896 q 0,-53 37.5,-90.5 37.5,-37.5 90.5,-37.5 53,0 90.5,37.5 Q 1664,843 1664,896 Z M 1024,192 q 0,80 -56,136 -56,56 -136,56 -80,0 -136,-56 -56,-56 -56,-136 0,-80 56,-136 56,-56 136,-56 80,0 136,56 56,56 56,136 z m 530,206 q 0,93 -66,158.5 -66,65.5 -158,65.5 -93,0 -158.5,-65.5 Q 1106,491 1106,398 q 0,-92 65.5,-158 65.5,-66 158.5,-66 92,0 158,66 66,66 66,158 z"/></symbol>
+ <symbol id="times" viewBox="0 0 1188 1188"><path d="m 1188,956 q 0,40 -28,68 l -136,136 q -28,28 -68,28 -40,0 -68,-28 L 594,866 300,1160 q -28,28 -68,28 -40,0 -68,-28 L 28,1024 Q 0,996 0,956 0,916 28,888 L 322,594 28,300 Q 0,272 0,232 0,192 28,164 L 164,28 Q 192,0 232,0 272,0 300,28 L 594,322 888,28 q 28,-28 68,-28 40,0 68,28 l 136,136 q 28,28 28,68 0,40 -28,68 l -294,294 294,294 q 28,28 28,68 z"/></symbol>
+ <symbol id="trash-o" viewBox="0 0 1408 1536"><path d="m 512,608 v 576 q 0,14 -9,23 -9,9 -23,9 h -64 q -14,0 -23,-9 -9,-9 -9,-23 V 608 q 0,-14 9,-23 9,-9 23,-9 h 64 q 14,0 23,9 9,9 9,23 z m 256,0 v 576 q 0,14 -9,23 -9,9 -23,9 h -64 q -14,0 -23,-9 -9,-9 -9,-23 V 608 q 0,-14 9,-23 9,-9 23,-9 h 64 q 14,0 23,9 9,9 9,23 z m 256,0 v 576 q 0,14 -9,23 -9,9 -23,9 h -64 q -14,0 -23,-9 -9,-9 -9,-23 V 608 q 0,-14 9,-23 9,-9 23,-9 h 64 q 14,0 23,9 9,9 9,23 z m 128,724 V 384 H 256 v 948 q 0,22 7,40.5 7,18.5 14.5,27 7.5,8.5 10.5,8.5 h 832 q 3,0 10.5,-8.5 7.5,-8.5 14.5,-27 7,-18.5 7,-40.5 z M 480,256 H 928 L 880,139 q -7,-9 -17,-11 H 546 q -10,2 -17,11 z m 928,32 v 64 q 0,14 -9,23 -9,9 -23,9 h -96 v 948 q 0,83 -47,143.5 -47,60.5 -113,60.5 H 288 q -66,0 -113,-58.5 Q 128,1419 128,1336 V 384 H 32 Q 18,384 9,375 0,366 0,352 v -64 q 0,-14 9,-23 9,-9 23,-9 H 341 L 411,89 Q 426,52 465,26 504,0 544,0 h 320 q 40,0 79,26 39,26 54,63 l 70,167 h 309 q 14,0 23,9 9,9 9,23 z"/></symbol>
+ <symbol id="undo" viewBox="0 0 1536 1536"><path d="m 1536,768 q 0,156 -61,298 -61,142 -164,245 -103,103 -245,164 -142,61 -298,61 -172,0 -327,-72.5 Q 286,1391 177,1259 q -7,-10 -6.5,-22.5 0.5,-12.5 8.5,-20.5 l 137,-138 q 10,-9 25,-9 16,2 23,12 73,95 179,147 106,52 225,52 104,0 198.5,-40.5 Q 1061,1199 1130,1130 1199,1061 1239.5,966.5 1280,872 1280,768 1280,664 1239.5,569.5 1199,475 1130,406 1061,337 966.5,296.5 872,256 768,256 670,256 580,291.5 490,327 420,393 l 137,138 q 31,30 14,69 -17,40 -59,40 H 64 Q 38,640 19,621 0,602 0,576 V 128 Q 0,86 40,69 79,52 109,83 L 239,212 Q 346,111 483.5,55.5 621,0 768,0 q 156,0 298,61 142,61 245,164 103,103 164,245 61,142 61,298 z"/></symbol>
+ <symbol id="unlink" viewBox="0 0 1664 1664"><path d="m 439,1271 -256,256 q -11,9 -23,9 -12,0 -23,-9 -9,-10 -9,-23 0,-13 9,-23 l 256,-256 q 10,-9 23,-9 13,0 23,9 9,10 9,23 0,13 -9,23 z m 169,41 v 320 q 0,14 -9,23 -9,9 -23,9 -14,0 -23,-9 -9,-9 -9,-23 v -320 q 0,-14 9,-23 9,-9 23,-9 14,0 23,9 9,9 9,23 z M 384,1088 q 0,14 -9,23 -9,9 -23,9 H 32 q -14,0 -23,-9 -9,-9 -9,-23 0,-14 9,-23 9,-9 23,-9 h 320 q 14,0 23,9 9,9 9,23 z m 1264,128 q 0,120 -85,203 l -147,146 q -83,83 -203,83 -121,0 -204,-85 L 675,1228 q -21,-21 -42,-56 l 239,-18 273,274 q 27,27 68,27.5 41,0.5 68,-26.5 l 147,-146 q 28,-28 28,-67 0,-40 -28,-68 l -274,-275 18,-239 q 35,21 56,42 l 336,336 q 84,86 84,204 z M 1031,492 792,510 519,236 q -28,-28 -68,-28 -39,0 -68,27 L 236,381 q -28,28 -28,67 0,40 28,68 l 274,274 -18,240 q -35,-21 -56,-42 L 100,652 Q 16,566 16,448 16,328 101,245 L 248,99 q 83,-83 203,-83 121,0 204,85 l 334,335 q 21,21 42,56 z m 633,84 q 0,14 -9,23 -9,9 -23,9 h -320 q -14,0 -23,-9 -9,-9 -9,-23 0,-14 9,-23 9,-9 23,-9 h 320 q 14,0 23,9 9,9 9,23 z M 1120,32 v 320 q 0,14 -9,23 -9,9 -23,9 -14,0 -23,-9 -9,-9 -9,-23 V 32 q 0,-14 9,-23 9,-9 23,-9 14,0 23,9 9,9 9,23 z m 407,151 -256,256 q -11,9 -23,9 -12,0 -23,-9 -9,-10 -9,-23 0,-13 9,-23 l 256,-256 q 10,-9 23,-9 13,0 23,9 9,10 9,23 0,13 -9,23 z"/></symbol>
+ <symbol id="unlock-alt" viewBox="0 0 1152 1536"><path d="m 1056,768 q 40,0 68,28 28,28 28,68 v 576 q 0,40 -28,68 -28,28 -68,28 H 96 Q 56,1536 28,1508 0,1480 0,1440 V 864 q 0,-40 28,-68 28,-28 68,-28 h 32 V 448 Q 128,263 259.5,131.5 391,0 576,0 761,0 892.5,131.5 1024,263 1024,448 q 0,26 -19,45 -19,19 -45,19 h -64 q -26,0 -45,-19 -19,-19 -19,-45 0,-106 -75,-181 -75,-75 -181,-75 -106,0 -181,75 -75,75 -75,181 v 320 z"/></symbol>
+ <symbol id="upload_alt" viewBox="0 0 1664 1600"><path d="m 1280,1408 q 0,-26 -19,-45 -19,-19 -45,-19 -26,0 -45,19 -19,19 -19,45 0,26 19,45 19,19 45,19 26,0 45,-19 19,-19 19,-45 z m 256,0 q 0,-26 -19,-45 -19,-19 -45,-19 -26,0 -45,19 -19,19 -19,45 0,26 19,45 19,19 45,19 26,0 45,-19 19,-19 19,-45 z m 128,-224 v 320 q 0,40 -28,68 -28,28 -68,28 H 96 q -40,0 -68,-28 -28,-28 -28,-68 v -320 q 0,-40 28,-68 28,-28 68,-28 h 427 q 21,56 70.5,92 49.5,36 110.5,36 h 256 q 61,0 110.5,-36 49.5,-36 70.5,-92 h 427 q 40,0 68,28 28,28 28,68 z M 1339,536 q -17,40 -59,40 h -256 v 448 q 0,26 -19,45 -19,19 -45,19 H 704 q -26,0 -45,-19 -19,-19 -19,-45 V 576 H 384 q -42,0 -59,-40 -17,-39 14,-69 L 787,19 q 18,-19 45,-19 27,0 45,19 l 448,448 q 31,30 14,69 z"/></symbol>
+ <symbol id="zoom-in" viewBox="0 0 1664 1664"><path d="m 1024,672 v 64 q 0,13 -9.5,22.5 Q 1005,768 992,768 H 768 v 224 q 0,13 -9.5,22.5 -9.5,9.5 -22.5,9.5 h -64 q -13,0 -22.5,-9.5 Q 640,1005 640,992 V 768 H 416 q -13,0 -22.5,-9.5 Q 384,749 384,736 v -64 q 0,-13 9.5,-22.5 Q 403,640 416,640 H 640 V 416 q 0,-13 9.5,-22.5 Q 659,384 672,384 h 64 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 v 224 h 224 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 128,32 Q 1152,519 1020.5,387.5 889,256 704,256 519,256 387.5,387.5 256,519 256,704 256,889 387.5,1020.5 519,1152 704,1152 889,1152 1020.5,1020.5 1152,889 1152,704 Z m 512,832 q 0,53 -37.5,90.5 -37.5,37.5 -90.5,37.5 -54,0 -90,-38 L 1103,1284 Q 924,1408 704,1408 561,1408 430.5,1352.5 300,1297 205.5,1202.5 111,1108 55.5,977.5 0,847 0,704 0,561 55.5,430.5 111,300 205.5,205.5 300,111 430.5,55.5 561,0 704,0 q 143,0 273.5,55.5 130.5,55.5 225,150 94.5,94.5 150,225 55.5,130.5 55.5,273.5 0,220 -124,399 l 343,343 q 37,37 37,90 z"/></symbol>
+ <symbol id="zoom-out" viewBox="0 0 1664 1664"><path d="m 1024,672 v 64 q 0,13 -9.5,22.5 Q 1005,768 992,768 H 416 q -13,0 -22.5,-9.5 Q 384,749 384,736 v -64 q 0,-13 9.5,-22.5 Q 403,640 416,640 h 576 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 128,32 Q 1152,519 1020.5,387.5 889,256 704,256 519,256 387.5,387.5 256,519 256,704 256,889 387.5,1020.5 519,1152 704,1152 889,1152 1020.5,1020.5 1152,889 1152,704 Z m 512,832 q 0,53 -37.5,90.5 -37.5,37.5 -90.5,37.5 -54,0 -90,-38 L 1103,1284 Q 924,1408 704,1408 561,1408 430.5,1352.5 300,1297 205.5,1202.5 111,1108 55.5,977.5 0,847 0,704 0,561 55.5,430.5 111,300 205.5,205.5 300,111 430.5,55.5 561,0 704,0 q 143,0 273.5,55.5 130.5,55.5 225,150 94.5,94.5 150,225 55.5,130.5 55.5,273.5 0,220 -124,399 l 343,343 q 37,37 37,90 z"/></symbol>
+ </defs>
+</svg>
diff --git a/src/img/help16.png b/src/img/help16.png
new file mode 100644
index 0000000..32a8b44
--- /dev/null
+++ b/src/img/help16.png
Binary files differ
diff --git a/src/img/icon_128.png b/src/img/icon_128.png
new file mode 100644
index 0000000..42f2cb4
--- /dev/null
+++ b/src/img/icon_128.png
Binary files differ
diff --git a/src/img/icon_16-loading.png b/src/img/icon_16-loading.png
new file mode 100644
index 0000000..54d274e
--- /dev/null
+++ b/src/img/icon_16-loading.png
Binary files differ
diff --git a/src/img/icon_16-off.png b/src/img/icon_16-off.png
new file mode 100644
index 0000000..28a7a2a
--- /dev/null
+++ b/src/img/icon_16-off.png
Binary files differ
diff --git a/src/img/icon_16.png b/src/img/icon_16.png
new file mode 100644
index 0000000..d72530a
--- /dev/null
+++ b/src/img/icon_16.png
Binary files differ
diff --git a/src/img/icon_32-loading.png b/src/img/icon_32-loading.png
new file mode 100644
index 0000000..ca3db7e
--- /dev/null
+++ b/src/img/icon_32-loading.png
Binary files differ
diff --git a/src/img/icon_32-off.png b/src/img/icon_32-off.png
new file mode 100644
index 0000000..260df42
--- /dev/null
+++ b/src/img/icon_32-off.png
Binary files differ
diff --git a/src/img/icon_32.png b/src/img/icon_32.png
new file mode 100644
index 0000000..c7c93e3
--- /dev/null
+++ b/src/img/icon_32.png
Binary files differ
diff --git a/src/img/icon_64-loading.png b/src/img/icon_64-loading.png
new file mode 100644
index 0000000..abd0fba
--- /dev/null
+++ b/src/img/icon_64-loading.png
Binary files differ
diff --git a/src/img/icon_64-off.png b/src/img/icon_64-off.png
new file mode 100644
index 0000000..bbd881b
--- /dev/null
+++ b/src/img/icon_64-off.png
Binary files differ
diff --git a/src/img/icon_64.png b/src/img/icon_64.png
new file mode 100644
index 0000000..50dcded
--- /dev/null
+++ b/src/img/icon_64.png
Binary files differ
diff --git a/src/img/material-design.svg b/src/img/material-design.svg
new file mode 100644
index 0000000..3b5e727
--- /dev/null
+++ b/src/img/material-design.svg
@@ -0,0 +1,16 @@
+<!--
+
+ The SVG definitions were imported piecemeal from:
+ checkbox:
+ - https://material.io/develop/web/components/input-controls/checkboxes/
+
+ License:
+ - https://github.com/material-components/material-components-web/blob/master/LICENSE
+
+-->
+
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display: none;">
+ <defs>
+ <symbol id="checkmark" viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></symbol>
+ </defs>
+</svg>
diff --git a/src/img/photon.svg b/src/img/photon.svg
new file mode 100644
index 0000000..e6c42d5
--- /dev/null
+++ b/src/img/photon.svg
@@ -0,0 +1,16 @@
+<!--
+
+ The SVG definitions were imported piecemeal from:
+ - https://design.firefox.com/icons/viewer/#
+
+ License:
+ - [to be determined]
+
+-->
+
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display: none;">
+ <defs>
+ <symbol id="ph-popups" viewBox="0 0 20 20"><path d="m 3.146,1.8546316 a 0.5006316,0.5006316 0 0 0 0.708,-0.708 l -1,-1 a 0.5006316,0.5006316 0 0 0 -0.708,0.708 z m -0.836,2.106 a 0.406,0.406 0 0 0 0.19,0.04 0.5,0.5 0 0 0 0.35,-0.851 0.493,0.493 0 0 0 -0.54,-0.109 0.361,0.361 0 0 0 -0.16,0.109 0.485,0.485 0 0 0 0,0.7 0.372,0.372 0 0 0 0.16,0.111 z m 3,-3 a 0.406,0.406 0 0 0 0.19,0.04 0.513,0.513 0 0 0 0.5,-0.5 0.473,0.473 0 0 0 -0.15,-0.351 0.5,0.5 0 0 0 -0.7,0 0.485,0.485 0 0 0 0,0.7 0.372,0.372 0 0 0 0.16,0.111 z m 13.19,1.04 a 0.5,0.5 0 0 0 0.354,-0.146 l 1,-1 a 0.5006316,0.5006316 0 0 0 -0.708,-0.708 l -1,1 a 0.5,0.5 0 0 0 0.354,0.854 z m 1.35,1.149 a 0.361,0.361 0 0 0 -0.16,-0.109 0.5,0.5 0 0 0 -0.38,0 0.361,0.361 0 0 0 -0.16,0.109 0.485,0.485 0 0 0 0,0.7 0.372,0.372 0 0 0 0.16,0.11 0.471,0.471 0 0 0 0.38,0 0.372,0.372 0 0 0 0.16,-0.11 0.469,0.469 0 0 0 0.15,-0.349 0.43,0.43 0 0 0 -0.04,-0.19 0.358,0.358 0 0 0 -0.11,-0.161 z m -3.54,-2.189 a 0.406,0.406 0 0 0 0.19,0.04 0.469,0.469 0 0 0 0.35,-0.15 0.353,0.353 0 0 0 0.11,-0.161 0.469,0.469 0 0 0 0,-0.379 0.358,0.358 0 0 0 -0.11,-0.161 0.361,0.361 0 0 0 -0.16,-0.109 0.493,0.493 0 0 0 -0.54,0.109 0.358,0.358 0 0 0 -0.11,0.161 0.43,0.43 0 0 0 -0.04,0.19 0.469,0.469 0 0 0 0.15,0.35 0.372,0.372 0 0 0 0.16,0.11 z m 2.544,15.1860004 a 0.5006316,0.5006316 0 0 0 -0.708,0.708 l 1,1 a 0.5006316,0.5006316 0 0 0 0.708,-0.708 z m 0.3,-2 a 0.473,0.473 0 0 0 -0.154,0.354 0.4,0.4 0 0 0 0.04,0.189 0.353,0.353 0 0 0 0.11,0.161 0.469,0.469 0 0 0 0.35,0.15 0.406,0.406 0 0 0 0.19,-0.04 0.372,0.372 0 0 0 0.16,-0.11 0.454,0.454 0 0 0 0.15,-0.35 0.473,0.473 0 0 0 -0.15,-0.351 0.5,0.5 0 0 0 -0.7,0 z m -3,3 a 0.473,0.473 0 0 0 -0.154,0.354 0.454,0.454 0 0 0 0.15,0.35 0.372,0.372 0 0 0 0.16,0.11 0.406,0.406 0 0 0 0.19,0.04 0.469,0.469 0 0 0 0.35,-0.15 0.353,0.353 0 0 0 0.11,-0.161 0.4,0.4 0 0 0 0.04,-0.189 0.473,0.473 0 0 0 -0.15,-0.351 0.5,0.5 0 0 0 -0.7,0 z M 18,5.0006316 a 3,3 0 0 0 -3,-3 H 7 a 3,3 0 0 0 -3,3 v 8.0000004 a 3,3 0 0 0 3,3 h 8 a 3,3 0 0 0 3,-3 z m -2,8.0000004 a 1,1 0 0 1 -1,1 H 7 a 1,1 0 0 1 -1,-1 V 7.0006316 H 16 Z M 16,6.0006316 H 6 v -1 a 1,1 0 0 1 1,-1 h 8 a 1,1 0 0 1 1,1 z M 11,18.000632 H 3 a 1,1 0 0 1 -1,-1 v -6 h 1 v -1 H 2 V 9.0006316 a 1,1 0 0 1 1,-1 v -2 a 3,3 0 0 0 -3,3 v 8.0000004 a 3,3 0 0 0 3,3 h 8 a 3,3 0 0 0 3,-3 h -2 a 1,1 0 0 1 -1,1 z"/></symbol>
+ <symbol id="ph-readermode-text-size" viewBox="0 0 20 12.5"><path d="M 10.422,11.223 A 0.712,0.712 0 0 1 10.295,11.007 L 6.581,0 H 4.68 L 0.933,11.309 0,11.447 V 12.5 H 3.594 V 11.447 L 2.655,11.325 A 0.3,0.3 0 0 1 2.468,11.211 0.214,0.214 0 0 1 2.419,10.974 L 3.341,8.387 h 3.575 l 0.906,2.652 a 0.18,0.18 0 0 1 -0.016,0.18 0.217,0.217 0 0 1 -0.139,0.106 L 6.679,11.447 V 12.5 h 4.62 V 11.447 L 10.663,11.325 A 0.512,0.512 0 0 1 10.422,11.223 Z M 3.659,7.399 5.063,2.57 6.5,7.399 Z M 19.27,11.464 A 0.406,0.406 0 0 1 19.009,11.337 0.368,0.368 0 0 1 18.902,11.072 V 6.779 A 3.838,3.838 0 0 0 18.67,5.318 1.957,1.957 0 0 0 18.01,4.457 2.48,2.48 0 0 0 16.987,4.044 7.582,7.582 0 0 0 15.67,3.938 a 6.505,6.505 0 0 0 -1.325,0.139 5.2,5.2 0 0 0 -1.2,0.4 2.732,2.732 0 0 0 -0.864,0.624 1.215,1.215 0 0 0 -0.331,0.833 0.532,0.532 0 0 0 0.119,0.383 0.665,0.665 0 0 0 0.257,0.172 0.916,0.916 0 0 0 0.375,0.041 h 1.723 V 4.942 A 4.429,4.429 0 0 1 14.611,4.91 2.045,2.045 0 0 1 14.836,4.885 c 0.09,0 0.192,-0.008 0.306,-0.008 a 1.849,1.849 0 0 1 0.808,0.151 1.247,1.247 0 0 1 0.71,0.89 2.164,2.164 0 0 1 0.049,0.51 c 0,0.076 -0.008,0.152 -0.008,0.228 0,0.076 -0.008,0.139 -0.008,0.221 v 0.2 q -1.152,0.252 -1.976,0.489 a 12.973,12.973 0 0 0 -1.391,0.474 4.514,4.514 0 0 0 -0.91,0.485 2.143,2.143 0 0 0 -0.527,0.523 1.594,1.594 0 0 0 -0.245,0.592 3.739,3.739 0 0 0 -0.061,0.693 2.261,2.261 0 0 0 0.171,0.9 2.024,2.024 0 0 0 0.469,0.682 2.084,2.084 0 0 0 0.693,0.432 2.364,2.364 0 0 0 0.852,0.151 3.587,3.587 0 0 0 1.068,-0.159 6.441,6.441 0 0 0 1.835,-0.877 l 0.22,0.832 H 20 v -0.783 z m -2.588,-0.719 a 4.314,4.314 0 0 1 -0.5,0.188 5.909,5.909 0 0 1 -0.493,0.123 2.665,2.665 0 0 1 -0.543,0.057 1.173,1.173 0 0 1 -0.861,-0.363 1.166,1.166 0 0 1 -0.245,-0.392 1.357,1.357 0 0 1 -0.086,-0.486 1.632,1.632 0 0 1 0.123,-0.657 1.215,1.215 0 0 1 0.432,-0.5 3.151,3.151 0 0 1 0.837,-0.392 12.429,12.429 0 0 1 1.334,-0.334 z"/></symbol>
+ </defs>
+</svg>
diff --git a/src/img/ublock-defs.svg b/src/img/ublock-defs.svg
new file mode 100644
index 0000000..dbc59a3
--- /dev/null
+++ b/src/img/ublock-defs.svg
@@ -0,0 +1,27 @@
+<!--
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2018-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+
+-->
+
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display: none;">
+ <defs>
+ <symbol id="ubo-solid" viewBox="0 0 128 128"><path d="M 64,0 C 40,16 32,16 8,16 c 0,80 0,80 56,112 56,-32 56,-32 56,-112 -24,0 -32,0 -56,-16 z m -32,40 8,0 0,24 c 0,7 1,8 8,8 7,0 8,-1 8,-8 l 0,-4 0,-20 8,0 0,4.054688 C 67.350916,41.522675 71.50202,40 76,40 86.998316,40 96,49.001684 96,60 96,70.998316 86.998316,80 76,80 70.442478,80 65.399719,77.696984 61.765625,74.003906 59.318213,78.076852 54.812381,80 48,80 37,80 32,75 32,64 l 0,-24 z m 44,8 c -6.674796,0 -12,5.325204 -12,12 0,6.674796 5.325204,12 12,12 6.674796,0 12,-5.325204 12,-12 0,-6.674796 -5.325204,-12 -12,-12 z"/></symbol>
+ </defs>
+</svg>
diff --git a/src/img/ublock.svg b/src/img/ublock.svg
new file mode 100644
index 0000000..ea2ffd3
--- /dev/null
+++ b/src/img/ublock.svg
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ version="1.1"
+ viewBox="0 0 128 128"
+ height="128"
+ width="128">
+ <g
+ style="display:inline;opacity:1">
+ <g
+ style="fill:#800000;fill-opacity:1;stroke:#ffffff;stroke-width:1.62100744;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+ transform="matrix(0.6778654,0,0,0.56141828,-241.07537,-247.27712)" />
+ <g
+ transform="matrix(-0.6945203,0,0,0.56109687,375.02964,-247.42947)"
+ style="fill:#800000;fill-opacity:1;stroke:#ffffff;stroke-width:1.60191178000000001;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;stroke-linejoin:round">
+ <path
+ d="m 447.83376,669.09921 c -80.63119,-57.03115 -80.63119,-57.03115 -80.63119,-199.60903 34.55623,0 46.07497,0 80.63119,-28.51558 m 0,228.12461 c 80.6312,-57.03115 80.6312,-57.03115 80.6312,-199.60903 -34.55623,0 -46.07497,0 -80.6312,-28.51558"
+ style="fill:#800000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.60191178;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ </g>
+ <g
+ transform="translate(-17.872548,-17.32535)"
+ style="display:inline">
+ <ellipse
+ transform="matrix(1.3333335,0,0,1.3333334,-42.290862,-31.108461)"
+ ry="12"
+ rx="11.999999"
+ cy="81.325356"
+ cx="102.12254"
+ style="fill:none;stroke:#ffffff;stroke-width:5.99999952;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;" />
+ <g
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.99999996999999996;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ transform="scale(1.0018026,0.99820067)">
+ <path
+ d="m 81.72523,81.471945 c 0,11.019828 -4.991003,16.028841 -15.97121,16.028841 -10.980207,0 -15.97121,-5.009013 -15.97121,-16.028841 l 0,-24.043262 7.985605,0 0,24.043262 c 0,7.012618 0.9982,8.014421 7.985605,8.014421 6.987404,0 7.985605,-1.001803 7.985605,-8.014421 l 0,-24.043262 7.985605,0 z"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:0;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;" />
+ </g>
+ </g>
+</svg>
diff --git a/src/js/1p-filters.js b/src/js/1p-filters.js
new file mode 100644
index 0000000..fc50b50
--- /dev/null
+++ b/src/js/1p-filters.js
@@ -0,0 +1,337 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* global CodeMirror, uBlockDashboard */
+
+'use strict';
+
+import { onBroadcast } from './broadcast.js';
+import { dom, qs$ } from './dom.js';
+import { i18n$ } from './i18n.js';
+import './codemirror/ubo-static-filtering.js';
+
+/******************************************************************************/
+
+const cmEditor = new CodeMirror(qs$('#userFilters'), {
+ autoCloseBrackets: true,
+ autofocus: true,
+ extraKeys: {
+ 'Ctrl-Space': 'autocomplete',
+ 'Tab': 'toggleComment',
+ },
+ foldGutter: true,
+ gutters: [
+ 'CodeMirror-linenumbers',
+ { className: 'CodeMirror-lintgutter', style: 'width: 11px' },
+ ],
+ lineNumbers: true,
+ lineWrapping: true,
+ matchBrackets: true,
+ maxScanLines: 1,
+ styleActiveLine: {
+ nonEmpty: true,
+ },
+});
+
+uBlockDashboard.patchCodeMirrorEditor(cmEditor);
+
+let cachedUserFilters = '';
+
+/******************************************************************************/
+
+// Add auto-complete ability to the editor. Polling is used as the suggested
+// hints also depend on the tabs currently opened.
+
+{
+ let hintUpdateToken = 0;
+
+ const getHints = async function() {
+ const hints = await vAPI.messaging.send('dashboard', {
+ what: 'getAutoCompleteDetails',
+ hintUpdateToken
+ });
+ if ( hints instanceof Object === false ) { return; }
+ if ( hints.hintUpdateToken !== undefined ) {
+ cmEditor.setOption('uboHints', hints);
+ hintUpdateToken = hints.hintUpdateToken;
+ }
+ timer.on(2503);
+ };
+
+ const timer = vAPI.defer.create(( ) => {
+ getHints();
+ });
+
+ getHints();
+}
+
+vAPI.messaging.send('dashboard', {
+ what: 'getTrustedScriptletTokens',
+}).then(tokens => {
+ cmEditor.setOption('trustedScriptletTokens', tokens);
+});
+
+/******************************************************************************/
+
+function getEditorText() {
+ const text = cmEditor.getValue().replace(/\s+$/, '');
+ return text === '' ? text : text + '\n';
+}
+
+function setEditorText(text) {
+ cmEditor.setValue(text.replace(/\s+$/, '') + '\n\n');
+}
+
+/******************************************************************************/
+
+function userFiltersChanged(changed) {
+ if ( typeof changed !== 'boolean' ) {
+ changed = self.hasUnsavedData();
+ }
+ qs$('#userFiltersApply').disabled = !changed;
+ qs$('#userFiltersRevert').disabled = !changed;
+}
+
+/******************************************************************************/
+
+// https://github.com/gorhill/uBlock/issues/3704
+// Merge changes to user filters occurring in the background with changes
+// made in the editor. The code assumes that no deletion occurred in the
+// background.
+
+function threeWayMerge(newContent) {
+ const prvContent = cachedUserFilters.trim().split(/\n/);
+ const differ = new self.diff_match_patch();
+ const newChanges = differ.diff(
+ prvContent,
+ newContent.trim().split(/\n/)
+ );
+ const usrChanges = differ.diff(
+ prvContent,
+ getEditorText().trim().split(/\n/)
+ );
+ const out = [];
+ let i = 0, j = 0, k = 0;
+ while ( i < prvContent.length ) {
+ for ( ; j < newChanges.length; j++ ) {
+ const change = newChanges[j];
+ if ( change[0] !== 1 ) { break; }
+ out.push(change[1]);
+ }
+ for ( ; k < usrChanges.length; k++ ) {
+ const change = usrChanges[k];
+ if ( change[0] !== 1 ) { break; }
+ out.push(change[1]);
+ }
+ if ( k === usrChanges.length || usrChanges[k][0] !== -1 ) {
+ out.push(prvContent[i]);
+ }
+ i += 1; j += 1; k += 1;
+ }
+ for ( ; j < newChanges.length; j++ ) {
+ const change = newChanges[j];
+ if ( change[0] !== 1 ) { continue; }
+ out.push(change[1]);
+ }
+ for ( ; k < usrChanges.length; k++ ) {
+ const change = usrChanges[k];
+ if ( change[0] !== 1 ) { continue; }
+ out.push(change[1]);
+ }
+ return out.join('\n');
+}
+
+/******************************************************************************/
+
+async function renderUserFilters(merge = false) {
+ const details = await vAPI.messaging.send('dashboard', {
+ what: 'readUserFilters',
+ });
+ if ( details instanceof Object === false || details.error ) { return; }
+
+ cmEditor.setOption('trustedSource', details.trustedSource === true);
+
+ const newContent = details.content.trim();
+
+ if ( merge && self.hasUnsavedData() ) {
+ setEditorText(threeWayMerge(newContent));
+ userFiltersChanged(true);
+ } else {
+ setEditorText(newContent);
+ userFiltersChanged(false);
+ }
+
+ cachedUserFilters = newContent;
+}
+
+/******************************************************************************/
+
+function handleImportFilePicker(ev) {
+ const file = ev.target.files[0];
+ if ( file === undefined || file.name === '' ) { return; }
+ if ( file.type.indexOf('text') !== 0 ) { return; }
+ const fr = new FileReader();
+ fr.onload = function() {
+ if ( typeof fr.result !== 'string' ) { return; }
+ const content = uBlockDashboard.mergeNewLines(getEditorText(), fr.result);
+ cmEditor.operation(( ) => {
+ const cmPos = cmEditor.getCursor();
+ setEditorText(content);
+ cmEditor.setCursor(cmPos);
+ cmEditor.focus();
+ });
+ };
+ fr.readAsText(file);
+}
+
+dom.on('#importFilePicker', 'change', handleImportFilePicker);
+
+function startImportFilePicker() {
+ const input = qs$('#importFilePicker');
+ // Reset to empty string, this will ensure an change event is properly
+ // triggered if the user pick a file, even if it is the same as the last
+ // one picked.
+ input.value = '';
+ input.click();
+}
+
+dom.on('#importUserFiltersFromFile', 'click', startImportFilePicker);
+
+/******************************************************************************/
+
+function exportUserFiltersToFile() {
+ const val = getEditorText();
+ if ( val === '' ) { return; }
+ const filename = i18n$('1pExportFilename')
+ .replace('{{datetime}}', uBlockDashboard.dateNowToSensibleString())
+ .replace(/ +/g, '_');
+ vAPI.download({
+ 'url': 'data:text/plain;charset=utf-8,' + encodeURIComponent(val + '\n'),
+ 'filename': filename
+ });
+}
+
+/******************************************************************************/
+
+async function applyChanges() {
+ const details = await vAPI.messaging.send('dashboard', {
+ what: 'writeUserFilters',
+ content: getEditorText(),
+ });
+ if ( details instanceof Object === false || details.error ) { return; }
+
+ cachedUserFilters = details.content.trim();
+ userFiltersChanged(false);
+ vAPI.messaging.send('dashboard', {
+ what: 'reloadAllFilters',
+ });
+}
+
+function revertChanges() {
+ setEditorText(cachedUserFilters);
+}
+
+/******************************************************************************/
+
+function getCloudData() {
+ return getEditorText();
+}
+
+function setCloudData(data, append) {
+ if ( typeof data !== 'string' ) { return; }
+ if ( append ) {
+ data = uBlockDashboard.mergeNewLines(getEditorText(), data);
+ }
+ cmEditor.setValue(data);
+}
+
+self.cloud.onPush = getCloudData;
+self.cloud.onPull = setCloudData;
+
+/******************************************************************************/
+
+self.hasUnsavedData = function() {
+ return getEditorText().trim() !== cachedUserFilters;
+};
+
+/******************************************************************************/
+
+// Handle user interaction
+dom.on('#exportUserFiltersToFile', 'click', exportUserFiltersToFile);
+dom.on('#userFiltersApply', 'click', ( ) => { applyChanges(); });
+dom.on('#userFiltersRevert', 'click', revertChanges);
+
+(async ( ) => {
+ await renderUserFilters();
+
+ cmEditor.clearHistory();
+
+ // https://github.com/gorhill/uBlock/issues/3706
+ // Save/restore cursor position
+ {
+ const line = await vAPI.localStorage.getItemAsync('myFiltersCursorPosition');
+ if ( typeof line === 'number' ) {
+ cmEditor.setCursor(line, 0);
+ }
+ cmEditor.focus();
+ }
+
+ // https://github.com/gorhill/uBlock/issues/3706
+ // Save/restore cursor position
+ {
+ let curline = 0;
+ cmEditor.on('cursorActivity', ( ) => {
+ if ( timer.ongoing() ) { return; }
+ if ( cmEditor.getCursor().line === curline ) { return; }
+ timer.on(701);
+ });
+ const timer = vAPI.defer.create(( ) => {
+ curline = cmEditor.getCursor().line;
+ vAPI.localStorage.setItem('myFiltersCursorPosition', curline);
+ });
+ }
+
+ // https://github.com/gorhill/uBlock/issues/3704
+ // Merge changes to user filters occurring in the background
+ onBroadcast(msg => {
+ switch ( msg.what ) {
+ case 'userFiltersUpdated': {
+ cmEditor.startOperation();
+ const scroll = cmEditor.getScrollInfo();
+ const selections = cmEditor.listSelections();
+ renderUserFilters(true).then(( ) => {
+ cmEditor.clearHistory();
+ cmEditor.setSelection(selections[0].anchor, selections[0].head);
+ cmEditor.scrollTo(scroll.left, scroll.top);
+ cmEditor.endOperation();
+ });
+ break;
+ }
+ default:
+ break;
+ }
+ });
+})();
+
+cmEditor.on('changes', userFiltersChanged);
+CodeMirror.commands.save = applyChanges;
+
+/******************************************************************************/
diff --git a/src/js/3p-filters.js b/src/js/3p-filters.js
new file mode 100644
index 0000000..c59365f
--- /dev/null
+++ b/src/js/3p-filters.js
@@ -0,0 +1,861 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+import { onBroadcast } from './broadcast.js';
+import { dom, qs$, qsa$ } from './dom.js';
+import { i18n, i18n$ } from './i18n.js';
+
+/******************************************************************************/
+
+const lastUpdateTemplateString = i18n$('3pLastUpdate');
+const obsoleteTemplateString = i18n$('3pExternalListObsolete');
+const reValidExternalList = /^[a-z-]+:\/\/(?:\S+\/\S*|\/\S+)/m;
+const recentlyUpdated = 1 * 60 * 60 * 1000; // 1 hour
+
+let listsetDetails = {};
+
+/******************************************************************************/
+
+onBroadcast(msg => {
+ switch ( msg.what ) {
+ case 'assetUpdated':
+ updateAssetStatus(msg);
+ break;
+ case 'assetsUpdated':
+ dom.cl.remove(dom.body, 'updating');
+ renderWidgets();
+ break;
+ case 'staticFilteringDataChanged':
+ renderFilterLists();
+ break;
+ default:
+ break;
+ }
+});
+
+/******************************************************************************/
+
+const renderNumber = value => {
+ return value.toLocaleString();
+};
+
+const listStatsTemplate = i18n$('3pListsOfBlockedHostsPerListStats');
+
+const renderLeafStats = (used, total) => {
+ if ( isNaN(used) || isNaN(total) ) { return ''; }
+ return listStatsTemplate
+ .replace('{{used}}', renderNumber(used))
+ .replace('{{total}}', renderNumber(total));
+};
+
+const renderNodeStats = (used, total) => {
+ if ( isNaN(used) || isNaN(total) ) { return ''; }
+ return `${used.toLocaleString()}/${total.toLocaleString()}`;
+};
+
+const i18nGroupName = name => {
+ return i18n$('3pGroup' + name.charAt(0).toUpperCase() + name.slice(1));
+};
+
+/******************************************************************************/
+
+const renderFilterLists = ( ) => {
+ // Assemble a pretty list name if possible
+ const listNameFromListKey = listkey => {
+ const list = listsetDetails.current[listkey] || listsetDetails.available[listkey];
+ const title = list && list.title || '';
+ if ( title !== '' ) { return title; }
+ return listkey;
+ };
+
+ const initializeListEntry = (listDetails, listEntry) => {
+ const listkey = listEntry.dataset.key;
+ const listEntryPrevious =
+ qs$(`[data-key="${listDetails.group}"] [data-key="${listkey}"]`);
+ if ( listEntryPrevious !== null ) {
+ if ( dom.cl.has(listEntryPrevious, 'checked') ) {
+ dom.cl.add(listEntry, 'checked');
+ }
+ if ( dom.cl.has(listEntryPrevious, 'stickied') ) {
+ dom.cl.add(listEntry, 'stickied');
+ }
+ if ( dom.cl.has(listEntryPrevious, 'toRemove') ) {
+ dom.cl.add(listEntry, 'toRemove');
+ }
+ if ( dom.cl.has(listEntryPrevious, 'searchMatch') ) {
+ dom.cl.add(listEntry, 'searchMatch');
+ }
+ } else {
+ dom.cl.toggle(listEntry, 'checked', listDetails.off !== true);
+ }
+ const on = dom.cl.has(listEntry, 'checked');
+ dom.prop(qs$(listEntry, ':scope > .detailbar input'), 'checked', on);
+ let elem = qs$(listEntry, ':scope > .detailbar a.content');
+ dom.attr(elem, 'href', 'asset-viewer.html?url=' + encodeURIComponent(listkey));
+ dom.attr(elem, 'type', 'text/html');
+ dom.cl.remove(listEntry, 'toRemove');
+ if ( listDetails.supportName ) {
+ elem = qs$(listEntry, ':scope > .detailbar a.support');
+ dom.attr(elem, 'href', listDetails.supportURL || '#');
+ dom.attr(elem, 'title', listDetails.supportName);
+ }
+ if ( listDetails.external ) {
+ dom.cl.add(listEntry, 'external');
+ } else {
+ dom.cl.remove(listEntry, 'external');
+ }
+ if ( listDetails.instructionURL ) {
+ elem = qs$(listEntry, ':scope > .detailbar a.mustread');
+ dom.attr(elem, 'href', listDetails.instructionURL || '#');
+ }
+ dom.cl.toggle(listEntry, 'isDefault',
+ listDetails.isDefault === true ||
+ listDetails.isImportant === true ||
+ listkey === 'user-filters'
+ );
+ elem = qs$(listEntry, '.leafstats');
+ dom.text(elem, renderLeafStats(on ? listDetails.entryUsedCount : 0, listDetails.entryCount));
+ // https://github.com/chrisaljoudi/uBlock/issues/104
+ const asset = listsetDetails.cache[listkey] || {};
+ const remoteURL = asset.remoteURL;
+ dom.cl.toggle(listEntry, 'unsecure',
+ typeof remoteURL === 'string' && remoteURL.lastIndexOf('http:', 0) === 0
+ );
+ dom.cl.toggle(listEntry, 'failed', asset.error !== undefined);
+ dom.cl.toggle(listEntry, 'obsolete', asset.obsolete === true);
+ const lastUpdateString = lastUpdateTemplateString.replace('{{ago}}',
+ i18n.renderElapsedTimeToString(asset.writeTime || 0)
+ );
+ if ( asset.obsolete === true ) {
+ let title = obsoleteTemplateString;
+ if ( asset.cached && asset.writeTime !== 0 ) {
+ title += '\n' + lastUpdateString;
+ }
+ dom.attr(qs$(listEntry, ':scope > .detailbar .status.obsolete'), 'title', title);
+ }
+ if ( asset.cached === true ) {
+ dom.cl.add(listEntry, 'cached');
+ dom.attr(qs$(listEntry, ':scope > .detailbar .status.cache'), 'title', lastUpdateString);
+ const timeSinceLastUpdate = Date.now() - asset.writeTime;
+ dom.cl.toggle(listEntry, 'recent', timeSinceLastUpdate < recentlyUpdated);
+ } else {
+ dom.cl.remove(listEntry, 'cached');
+ }
+ };
+
+ const createListEntry = (listDetails, depth) => {
+ if ( listDetails.lists === undefined ) {
+ return dom.clone('#templates .listEntry[data-role="leaf"]');
+ }
+ if ( depth !== 0 ) {
+ return dom.clone('#templates .listEntry[data-role="node"]');
+ }
+ return dom.clone('#templates .listEntry[data-role="node"][data-parent="root"]');
+ };
+
+ const createListEntries = (parentkey, listTree, depth = 0) => {
+ const listEntries = dom.clone('#templates .listEntries');
+ const treeEntries = Object.entries(listTree);
+ if ( depth !== 0 ) {
+ const reEmojis = /\p{Emoji}+/gu;
+ treeEntries.sort((a ,b) => {
+ const as = (a[1].title || a[0]).replace(reEmojis, '');
+ const bs = (b[1].title || b[0]).replace(reEmojis, '');
+ return as.localeCompare(bs);
+ });
+ }
+ for ( const [ listkey, listDetails ] of treeEntries ) {
+ const listEntry = createListEntry(listDetails, depth);
+ if ( dom.cl.has(dom.root, 'mobile') ) {
+ const leafStats = qs$(listEntry, '.leafstats');
+ if ( leafStats ) {
+ listEntry.append(leafStats);
+ }
+ }
+ listEntry.dataset.key = listkey;
+ listEntry.dataset.parent = parentkey;
+ qs$(listEntry, ':scope > .detailbar .listname').append(
+ i18n.patchUnicodeFlags(listDetails.title)
+ );
+ if ( listDetails.lists !== undefined ) {
+ listEntry.append(createListEntries(listEntry.dataset.key, listDetails.lists, depth+1));
+ dom.cl.toggle(listEntry, 'expanded', listIsExpanded(listkey));
+ updateListNode(listEntry);
+ } else {
+ initializeListEntry(listDetails, listEntry);
+ }
+ listEntries.append(listEntry);
+ }
+ return listEntries;
+ };
+
+ const onListsReceived = response => {
+ // Store in global variable
+ listsetDetails = response;
+ hashFromListsetDetails();
+
+ // Build list tree
+ const listTree = {};
+ const groupKeys = [
+ 'user',
+ 'default',
+ 'ads',
+ 'privacy',
+ 'malware',
+ 'multipurpose',
+ 'annoyances',
+ 'regions',
+ 'custom'
+ ];
+ for ( const key of groupKeys ) {
+ listTree[key] = {
+ title: i18nGroupName(key),
+ lists: {},
+ };
+ }
+ for ( const [ listkey, listDetails ] of Object.entries(response.available) ) {
+ let groupKey = listDetails.group;
+ if ( groupKey === 'social' ) {
+ groupKey = 'annoyances';
+ }
+ const groupDetails = listTree[groupKey];
+ if ( listDetails.parent !== undefined ) {
+ let lists = groupDetails.lists;
+ for ( const parent of listDetails.parent.split('|') ) {
+ if ( lists[parent] === undefined ) {
+ lists[parent] = { title: parent, lists: {} };
+ }
+ lists = lists[parent].lists;
+ }
+ lists[listkey] = listDetails;
+ } else {
+ listDetails.title = listNameFromListKey(listkey);
+ groupDetails.lists[listkey] = listDetails;
+ }
+ }
+ const listEntries = createListEntries('root', listTree);
+ qs$('#lists .listEntries').replaceWith(listEntries);
+
+ qs$('#autoUpdate').checked = listsetDetails.autoUpdate === true;
+ dom.text(
+ '#listsOfBlockedHostsPrompt',
+ i18n$('3pListsOfBlockedHostsPrompt')
+ .replace('{{netFilterCount}}', renderNumber(response.netFilterCount))
+ .replace('{{cosmeticFilterCount}}', renderNumber(response.cosmeticFilterCount))
+ );
+ qs$('#parseCosmeticFilters').checked =
+ listsetDetails.parseCosmeticFilters === true;
+ qs$('#ignoreGenericCosmeticFilters').checked =
+ listsetDetails.ignoreGenericCosmeticFilters === true;
+ qs$('#suspendUntilListsAreLoaded').checked =
+ listsetDetails.suspendUntilListsAreLoaded === true;
+
+ // https://github.com/gorhill/uBlock/issues/2394
+ dom.cl.toggle(dom.body, 'updating', listsetDetails.isUpdating);
+
+ renderWidgets();
+ };
+
+ return vAPI.messaging.send('dashboard', {
+ what: 'getLists',
+ }).then(response => {
+ onListsReceived(response);
+ });
+};
+
+/******************************************************************************/
+
+const renderWidgets = ( ) => {
+ dom.cl.toggle('#buttonApply', 'disabled',
+ filteringSettingsHash === hashFromCurrentFromSettings()
+ );
+ const updating = dom.cl.has(dom.body, 'updating');
+ dom.cl.toggle('#buttonUpdate', 'active', updating);
+ dom.cl.toggle('#buttonUpdate', 'disabled',
+ updating === false &&
+ qs$('#lists .listEntry.checked.obsolete:not(.toRemove)') === null
+ );
+};
+
+/******************************************************************************/
+
+const updateAssetStatus = details => {
+ const listEntry = qs$(`#lists .listEntry[data-key="${details.key}"]`);
+ if ( listEntry === null ) { return; }
+ dom.cl.toggle(listEntry, 'failed', !!details.failed);
+ dom.cl.toggle(listEntry, 'obsolete', !details.cached);
+ dom.cl.toggle(listEntry, 'cached', !!details.cached);
+ if ( details.cached ) {
+ dom.attr(qs$(listEntry, '.status.cache'), 'title',
+ lastUpdateTemplateString.replace('{{ago}}', i18n.renderElapsedTimeToString(Date.now()))
+ );
+ dom.cl.add(listEntry, 'recent');
+ }
+ updateAncestorListNodes(listEntry, ancestor => {
+ updateListNode(ancestor);
+ });
+ renderWidgets();
+};
+
+/*******************************************************************************
+
+ Compute a hash from all the settings affecting how filter lists are loaded
+ in memory.
+
+**/
+
+let filteringSettingsHash = '';
+
+const hashFromListsetDetails = ( ) => {
+ const hashParts = [
+ listsetDetails.parseCosmeticFilters === true,
+ listsetDetails.ignoreGenericCosmeticFilters === true,
+ ];
+ const listHashes = [];
+ for ( const [ listkey, listDetails ] of Object.entries(listsetDetails.available) ) {
+ if ( listDetails.off === true ) { continue; }
+ listHashes.push(listkey);
+ }
+ hashParts.push( listHashes.sort().join(), '', false);
+ filteringSettingsHash = hashParts.join();
+};
+
+const hashFromCurrentFromSettings = ( ) => {
+ const hashParts = [
+ qs$('#parseCosmeticFilters').checked,
+ qs$('#ignoreGenericCosmeticFilters').checked,
+ ];
+ const listHashes = [];
+ const listEntries = qsa$('#lists .listEntry[data-key]:not(.toRemove)');
+ for ( const liEntry of listEntries ) {
+ if ( liEntry.dataset.role !== 'leaf' ) { continue; }
+ if ( dom.cl.has(liEntry, 'checked') === false ) { continue; }
+ listHashes.push(liEntry.dataset.key);
+ }
+ const textarea = qs$('#lists .listEntry[data-role="import"].expanded textarea');
+ hashParts.push(
+ listHashes.sort().join(),
+ textarea !== null && textarea.value.trim() || '',
+ qs$('#lists .listEntry.toRemove') !== null
+ );
+ return hashParts.join();
+};
+
+/******************************************************************************/
+
+const onListsetChanged = ev => {
+ const input = ev.target.closest('input');
+ if ( input === null ) { return; }
+ toggleFilterList(input, input.checked, true);
+};
+
+dom.on('#lists', 'change', '.listEntry > .detailbar input', onListsetChanged);
+
+const toggleFilterList = (elem, on, ui = false) => {
+ const listEntry = elem.closest('.listEntry');
+ if ( listEntry === null ) { return; }
+ if ( listEntry.dataset.parent === 'root' ) { return; }
+ const searchMode = dom.cl.has('#lists', 'searchMode');
+ const input = qs$(listEntry, ':scope > .detailbar input');
+ if ( on === undefined ) {
+ on = input.checked === false;
+ }
+ input.checked = on;
+ dom.cl.toggle(listEntry, 'checked', on);
+ dom.cl.toggle(listEntry, 'stickied', ui && !on && !searchMode);
+ // Select/unselect descendants. Twist: if in search-mode, select only
+ // search-matched descendants.
+ const childListEntries = searchMode
+ ? qsa$(listEntry, '.listEntry.searchMatch')
+ : qsa$(listEntry, '.listEntry');
+ for ( const descendantList of childListEntries ) {
+ dom.cl.toggle(descendantList, 'checked', on);
+ qs$(descendantList, ':scope > .detailbar input').checked = on;
+ }
+ updateAncestorListNodes(listEntry, ancestor => {
+ updateListNode(ancestor);
+ });
+ onFilteringSettingsChanged();
+};
+
+const updateListNode = listNode => {
+ if ( listNode === null ) { return; }
+ if ( listNode.dataset.role !== 'node' ) { return; }
+ const checkedListLeaves = qsa$(listNode, '.listEntry[data-role="leaf"].checked');
+ const allListLeaves = qsa$(listNode, '.listEntry[data-role="leaf"]');
+ dom.text(qs$(listNode, '.nodestats'),
+ renderNodeStats(checkedListLeaves.length, allListLeaves.length)
+ );
+ dom.cl.toggle(listNode, 'searchMatch',
+ qs$(listNode, ':scope > .listEntries > .listEntry.searchMatch') !== null
+ );
+ if ( listNode.dataset.parent === 'root' ) { return; }
+ let usedFilterCount = 0;
+ let totalFilterCount = 0;
+ let isCached = false;
+ let isObsolete = false;
+ let latestWriteTime = 0;
+ let oldestWriteTime = Number.MAX_SAFE_INTEGER;
+ for ( const listLeaf of checkedListLeaves ) {
+ const listkey = listLeaf.dataset.key;
+ const listDetails = listsetDetails.available[listkey];
+ usedFilterCount += listDetails.off ? 0 : listDetails.entryUsedCount || 0;
+ totalFilterCount += listDetails.entryCount || 0;
+ const assetCache = listsetDetails.cache[listkey] || {};
+ isCached = isCached || dom.cl.has(listLeaf, 'cached');
+ isObsolete = isObsolete || dom.cl.has(listLeaf, 'obsolete');
+ latestWriteTime = Math.max(latestWriteTime, assetCache.writeTime || 0);
+ oldestWriteTime = Math.min(oldestWriteTime, assetCache.writeTime || Number.MAX_SAFE_INTEGER);
+ }
+ dom.cl.toggle(listNode, 'checked', checkedListLeaves.length !== 0);
+ dom.cl.toggle(qs$(listNode, ':scope > .detailbar .checkbox'),
+ 'partial',
+ checkedListLeaves.length !== allListLeaves.length
+ );
+ dom.prop(qs$(listNode, ':scope > .detailbar input'),
+ 'checked',
+ checkedListLeaves.length !== 0
+ );
+ dom.text(qs$(listNode, '.leafstats'),
+ renderLeafStats(usedFilterCount, totalFilterCount)
+ );
+ const firstLeaf = qs$(listNode, '.listEntry[data-role="leaf"]');
+ if ( firstLeaf !== null ) {
+ dom.attr(qs$(listNode, ':scope > .detailbar a.support'), 'href',
+ dom.attr(qs$(firstLeaf, ':scope > .detailbar a.support'), 'href') || '#'
+ );
+ dom.attr(qs$(listNode, ':scope > .detailbar a.mustread'), 'href',
+ dom.attr(qs$(firstLeaf, ':scope > .detailbar a.mustread'), 'href') || '#'
+ );
+ }
+ dom.cl.toggle(listNode, 'cached', isCached);
+ dom.cl.toggle(listNode, 'obsolete', isObsolete);
+ if ( isCached ) {
+ dom.attr(qs$(listNode, ':scope > .detailbar .cache'), 'title',
+ lastUpdateTemplateString.replace('{{ago}}', i18n.renderElapsedTimeToString(latestWriteTime))
+ );
+ dom.cl.toggle(listNode, 'recent', (Date.now() - oldestWriteTime) < recentlyUpdated);
+ }
+ if ( qs$(listNode, '.listEntry.isDefault') !== null ) {
+ dom.cl.add(listNode, 'isDefault');
+ }
+ if ( qs$(listNode, '.listEntry.stickied') !== null ) {
+ dom.cl.add(listNode, 'stickied');
+ }
+};
+
+const updateAncestorListNodes = (listEntry, fn) => {
+ while ( listEntry !== null ) {
+ fn(listEntry);
+ listEntry = qs$(`.listEntry[data-key="${listEntry.dataset.parent}"]`);
+ }
+};
+
+/******************************************************************************/
+
+const onFilteringSettingsChanged = ( ) => {
+ renderWidgets();
+};
+
+dom.on('#parseCosmeticFilters', 'change', onFilteringSettingsChanged);
+dom.on('#ignoreGenericCosmeticFilters', 'change', onFilteringSettingsChanged);
+dom.on('#lists', 'input', '[data-role="import"] textarea', onFilteringSettingsChanged);
+
+/******************************************************************************/
+
+const onRemoveExternalList = ev => {
+ const listEntry = ev.target.closest('[data-key]');
+ if ( listEntry === null ) { return; }
+ dom.cl.toggle(listEntry, 'toRemove');
+ renderWidgets();
+};
+
+dom.on('#lists', 'click', '.listEntry .remove', onRemoveExternalList);
+
+/******************************************************************************/
+
+const onPurgeClicked = ev => {
+ const liEntry = ev.target.closest('[data-key]');
+ const listkey = liEntry.dataset.key || '';
+ if ( listkey === '' ) { return; }
+
+ const assetKeys = [ listkey ];
+ for ( const listLeaf of qsa$(liEntry, '[data-role="leaf"]') ) {
+ assetKeys.push(listLeaf.dataset.key);
+ dom.cl.add(listLeaf, 'obsolete');
+ dom.cl.remove(listLeaf, 'cached');
+ }
+
+ vAPI.messaging.send('dashboard', {
+ what: 'listsUpdateNow',
+ assetKeys,
+ preferOrigin: ev.shiftKey,
+ });
+
+ // If the cached version is purged, the installed version must be assumed
+ // to be obsolete.
+ // https://github.com/gorhill/uBlock/issues/1733
+ // An external filter list must not be marked as obsolete, they will
+ // always be fetched anyways if there is no cached copy.
+ dom.cl.add(dom.body, 'updating');
+ dom.cl.add(liEntry, 'obsolete');
+
+ if ( qs$(liEntry, 'input[type="checkbox"]').checked ) {
+ renderWidgets();
+ }
+};
+
+dom.on('#lists', 'click', 'span.cache', onPurgeClicked);
+
+/******************************************************************************/
+
+const selectFilterLists = async ( ) => {
+ // Cosmetic filtering switch
+ let checked = qs$('#parseCosmeticFilters').checked;
+ vAPI.messaging.send('dashboard', {
+ what: 'userSettings',
+ name: 'parseAllABPHideFilters',
+ value: checked,
+ });
+ listsetDetails.parseCosmeticFilters = checked;
+
+ checked = qs$('#ignoreGenericCosmeticFilters').checked;
+ vAPI.messaging.send('dashboard', {
+ what: 'userSettings',
+ name: 'ignoreGenericCosmeticFilters',
+ value: checked,
+ });
+ listsetDetails.ignoreGenericCosmeticFilters = checked;
+
+ // Filter lists to remove/select
+ const toSelect = [];
+ const toRemove = [];
+ for ( const liEntry of qsa$('#lists .listEntry[data-role="leaf"]') ) {
+ const listkey = liEntry.dataset.key;
+ if ( listsetDetails.available.hasOwnProperty(listkey) === false ) {
+ continue;
+ }
+ const listDetails = listsetDetails.available[listkey];
+ if ( dom.cl.has(liEntry, 'toRemove') ) {
+ toRemove.push(listkey);
+ listDetails.off = true;
+ continue;
+ }
+ if ( dom.cl.has(liEntry, 'checked') ) {
+ toSelect.push(listkey);
+ listDetails.off = false;
+ } else {
+ listDetails.off = true;
+ }
+ }
+
+ // External filter lists to import
+ const textarea = qs$('#lists .listEntry[data-role="import"].expanded textarea');
+ const toImport = textarea !== null && textarea.value.trim() || '';
+ if ( textarea !== null ) {
+ dom.cl.remove(textarea.closest('.expandable'), 'expanded');
+ textarea.value = '';
+ }
+
+ hashFromListsetDetails();
+
+ await vAPI.messaging.send('dashboard', {
+ what: 'applyFilterListSelection',
+ toSelect,
+ toImport,
+ toRemove,
+ });
+};
+
+/******************************************************************************/
+
+const buttonApplyHandler = async ( ) => {
+ await selectFilterLists();
+ dom.cl.add(dom.body, 'working');
+ dom.cl.remove('#lists .listEntry.stickied', 'stickied');
+ renderWidgets();
+ await vAPI.messaging.send('dashboard', { what: 'reloadAllFilters' });
+ dom.cl.remove(dom.body, 'working');
+};
+
+dom.on('#buttonApply', 'click', ( ) => { buttonApplyHandler(); });
+
+/******************************************************************************/
+
+const buttonUpdateHandler = async ( ) => {
+ dom.cl.remove('#lists .listEntry.stickied', 'stickied');
+ await selectFilterLists();
+ dom.cl.add(dom.body, 'updating');
+ renderWidgets();
+ vAPI.messaging.send('dashboard', { what: 'updateNow' });
+};
+
+dom.on('#buttonUpdate', 'click', ( ) => { buttonUpdateHandler(); });
+
+/******************************************************************************/
+
+const userSettingCheckboxChanged = ( ) => {
+ const target = event.target;
+ vAPI.messaging.send('dashboard', {
+ what: 'userSettings',
+ name: target.id,
+ value: target.checked,
+ });
+ listsetDetails[target.id] = target.checked;
+};
+
+dom.on('#autoUpdate', 'change', userSettingCheckboxChanged);
+dom.on('#suspendUntilListsAreLoaded', 'change', userSettingCheckboxChanged);
+
+/******************************************************************************/
+
+const searchFilterLists = ( ) => {
+ const pattern = dom.prop('.searchbar input', 'value') || '';
+ dom.cl.toggle('#lists', 'searchMode', pattern !== '');
+ if ( pattern === '' ) { return; }
+ const reflectSearchMatches = listEntry => {
+ if ( listEntry.dataset.role !== 'node' ) { return; }
+ dom.cl.toggle(listEntry, 'searchMatch',
+ qs$(listEntry, ':scope > .listEntries > .listEntry.searchMatch') !== null
+ );
+ };
+ const toI18n = tags => {
+ if ( tags === '' ) { return ''; }
+ return tags.toLowerCase().split(/\s+/).reduce((a, v) => {
+ let s = i18n$(v);
+ if ( s === '' ) {
+ s = i18nGroupName(v);
+ if ( s === '' ) { return a; }
+ }
+ return `${a} ${s}`.trim();
+ }, '');
+ };
+ const re = new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'i');
+ for ( const listEntry of qsa$('#lists [data-role="leaf"]') ) {
+ const listkey = listEntry.dataset.key;
+ const listDetails = listsetDetails.available[listkey];
+ if ( listDetails === undefined ) { continue; }
+ let haystack = perListHaystack.get(listDetails);
+ if ( haystack === undefined ) {
+ haystack = [
+ listDetails.title,
+ listDetails.group || '',
+ i18nGroupName(listDetails.group || ''),
+ listDetails.tags || '',
+ toI18n(listDetails.tags || ''),
+ ].join(' ').trim();
+ perListHaystack.set(listDetails, haystack);
+ }
+ dom.cl.toggle(listEntry, 'searchMatch', re.test(haystack));
+ updateAncestorListNodes(listEntry, reflectSearchMatches);
+ }
+};
+
+const perListHaystack = new WeakMap();
+
+dom.on('.searchbar input', 'input', searchFilterLists);
+
+/******************************************************************************/
+
+const expandedListSet = new Set([
+ 'uBlock filters',
+ 'AdGuard – Annoyances',
+ 'EasyList – Annoyances',
+]);
+
+const listIsExpanded = which => {
+ return expandedListSet.has(which);
+};
+
+const applyListExpansion = listkeys => {
+ if ( listkeys === undefined ) {
+ listkeys = Array.from(expandedListSet);
+ }
+ expandedListSet.clear();
+ dom.cl.remove('#lists [data-role="node"]', 'expanded');
+ listkeys.forEach(which => {
+ expandedListSet.add(which);
+ dom.cl.add(`#lists [data-key="${which}"]`, 'expanded');
+ });
+};
+
+const toggleListExpansion = which => {
+ const isExpanded = expandedListSet.has(which);
+ if ( which === '*' ) {
+ if ( isExpanded ) {
+ expandedListSet.clear();
+ dom.cl.remove('#lists .expandable', 'expanded');
+ dom.cl.remove('#lists .stickied', 'stickied');
+ } else {
+ expandedListSet.clear();
+ expandedListSet.add('*');
+ dom.cl.add('#lists .rootstats', 'expanded');
+ for ( const expandable of qsa$('#lists > .listEntries .expandable') ) {
+ const listkey = expandable.dataset.key || '';
+ if ( listkey === '' ) { continue; }
+ expandedListSet.add(listkey);
+ dom.cl.add(expandable, 'expanded');
+ }
+ }
+ } else {
+ if ( isExpanded ) {
+ expandedListSet.delete(which);
+ const listNode = qs$(`#lists > .listEntries [data-key="${which}"]`);
+ dom.cl.remove(listNode, 'expanded');
+ if ( listNode.dataset.parent === 'root' ) {
+ dom.cl.remove(qsa$(listNode, '.stickied'), 'stickied');
+ }
+ } else {
+ expandedListSet.add(which);
+ dom.cl.add(`#lists > .listEntries [data-key="${which}"]`, 'expanded');
+ }
+ }
+ vAPI.localStorage.setItem('expandedListSet', Array.from(expandedListSet));
+ vAPI.localStorage.removeItem('hideUnusedFilterLists');
+};
+
+dom.on('#listsOfBlockedHostsPrompt', 'click', ( ) => {
+ toggleListExpansion('*');
+});
+
+dom.on('#lists', 'click', '.listExpander', ev => {
+ const expandable = ev.target.closest('.expandable');
+ if ( expandable === null ) { return; }
+ const which = expandable.dataset.key;
+ if ( which !== undefined ) {
+ toggleListExpansion(which);
+ } else {
+ dom.cl.toggle(expandable, 'expanded');
+ if ( expandable.dataset.role === 'import' ) {
+ onFilteringSettingsChanged();
+ }
+ }
+ ev.preventDefault();
+});
+
+dom.on('#lists', 'click', '[data-parent="root"] > .detailbar .listname', ev => {
+ const listEntry = ev.target.closest('.listEntry');
+ if ( listEntry === null ) { return; }
+ const listkey = listEntry.dataset.key;
+ if ( listkey === undefined ) { return; }
+ toggleListExpansion(listkey);
+ ev.preventDefault();
+});
+
+dom.on('#lists', 'click', '[data-role="import"] > .detailbar .listname', ev => {
+ const expandable = ev.target.closest('.listEntry');
+ if ( expandable === null ) { return; }
+ dom.cl.toggle(expandable, 'expanded');
+ ev.preventDefault();
+});
+
+dom.on('#lists', 'click', '.listEntry > .detailbar .nodestats', ev => {
+ const listEntry = ev.target.closest('.listEntry');
+ if ( listEntry === null ) { return; }
+ const listkey = listEntry.dataset.key;
+ if ( listkey === undefined ) { return; }
+ toggleListExpansion(listkey);
+ ev.preventDefault();
+});
+
+// Initialize from saved state.
+vAPI.localStorage.getItemAsync('expandedListSet').then(listkeys => {
+ if ( Array.isArray(listkeys) === false ) { return; }
+ applyListExpansion(listkeys);
+});
+
+/******************************************************************************/
+
+// Cloud storage-related.
+
+self.cloud.onPush = function toCloudData() {
+ const bin = {
+ parseCosmeticFilters: qs$('#parseCosmeticFilters').checked,
+ ignoreGenericCosmeticFilters: qs$('#ignoreGenericCosmeticFilters').checked,
+ selectedLists: []
+ };
+
+ const liEntries = qsa$('#lists .listEntry.checked[data-role="leaf"]');
+ for ( const liEntry of liEntries ) {
+ bin.selectedLists.push(liEntry.dataset.key);
+ }
+
+ return bin;
+};
+
+self.cloud.onPull = function fromCloudData(data, append) {
+ if ( typeof data !== 'object' || data === null ) { return; }
+
+ let elem = qs$('#parseCosmeticFilters');
+ let checked = data.parseCosmeticFilters === true || append && elem.checked;
+ elem.checked = listsetDetails.parseCosmeticFilters = checked;
+
+ elem = qs$('#ignoreGenericCosmeticFilters');
+ checked = data.ignoreGenericCosmeticFilters === true || append && elem.checked;
+ elem.checked = listsetDetails.ignoreGenericCosmeticFilters = checked;
+
+ const selectedSet = new Set(data.selectedLists);
+ for ( const listEntry of qsa$('#lists .listEntry[data-role="leaf"]') ) {
+ const listkey = listEntry.dataset.key;
+ const mustEnable = selectedSet.has(listkey);
+ selectedSet.delete(listkey);
+ if ( mustEnable === false && append ) { continue; }
+ toggleFilterList(listEntry, mustEnable);
+ }
+
+ // If there are URL-like list keys left in the selected set, import them.
+ for ( const listkey of selectedSet ) {
+ if ( reValidExternalList.test(listkey) ) { continue; }
+ selectedSet.delete(listkey);
+ }
+ if ( selectedSet.size !== 0 ) {
+ const textarea = qs$('#lists .listEntry[data-role="import"] textarea');
+ const lines = append
+ ? textarea.value.split(/[\n\r]+/)
+ : [];
+ lines.push(...selectedSet);
+ if ( lines.length !== 0 ) { lines.push(''); }
+ textarea.value = lines.join('\n');
+ dom.cl.toggle('#lists .listEntry[data-role="import"]', 'expanded', textarea.value !== '');
+ }
+
+ renderWidgets();
+};
+
+/******************************************************************************/
+
+self.hasUnsavedData = function() {
+ return hashFromCurrentFromSettings() !== filteringSettingsHash;
+};
+
+/******************************************************************************/
+
+renderFilterLists().then(( ) => {
+ const buttonUpdate = qs$('#buttonUpdate');
+ if ( dom.cl.has(buttonUpdate, 'active') ) { return; }
+ if ( dom.cl.has(buttonUpdate, 'disabled') ) { return; }
+ if ( listsetDetails.autoUpdate !== true ) { return; }
+ buttonUpdateHandler();
+});
+
+/******************************************************************************/
diff --git a/src/js/about.js b/src/js/about.js
new file mode 100644
index 0000000..680fab1
--- /dev/null
+++ b/src/js/about.js
@@ -0,0 +1,34 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+import { dom } from './dom.js';
+
+/******************************************************************************/
+
+(async ( ) => {
+ const appData = await vAPI.messaging.send('dashboard', {
+ what: 'getAppData',
+ });
+
+ dom.text('#aboutNameVer', appData.name + ' ' + appData.version);
+})();
diff --git a/src/js/advanced-settings.js b/src/js/advanced-settings.js
new file mode 100644
index 0000000..c21346f
--- /dev/null
+++ b/src/js/advanced-settings.js
@@ -0,0 +1,194 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2016-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* global CodeMirror, uBlockDashboard */
+
+'use strict';
+
+import { dom, qs$ } from './dom.js';
+
+/******************************************************************************/
+
+let defaultSettings = new Map();
+let adminSettings = new Map();
+let beforeHash = '';
+
+/******************************************************************************/
+
+CodeMirror.defineMode('raw-settings', function() {
+ let lastSetting = '';
+
+ return {
+ token: function(stream) {
+ if ( stream.sol() ) {
+ stream.eatSpace();
+ const match = stream.match(/\S+/);
+ if ( match !== null && defaultSettings.has(match[0]) ) {
+ lastSetting = match[0];
+ return adminSettings.has(match[0])
+ ? 'readonly keyword'
+ : 'keyword';
+ }
+ stream.skipToEnd();
+ return 'line-cm-error';
+ }
+ stream.eatSpace();
+ const match = stream.match(/.*$/);
+ if ( match !== null ) {
+ if ( match[0].trim() !== defaultSettings.get(lastSetting) ) {
+ return 'line-cm-strong';
+ }
+ if ( adminSettings.has(lastSetting) ) {
+ return 'readonly';
+ }
+ }
+ stream.skipToEnd();
+ return null;
+ }
+ };
+});
+
+const cmEditor = new CodeMirror(qs$('#advancedSettings'), {
+ autofocus: true,
+ lineNumbers: true,
+ lineWrapping: false,
+ styleActiveLine: true
+});
+
+uBlockDashboard.patchCodeMirrorEditor(cmEditor);
+
+/******************************************************************************/
+
+const hashFromAdvancedSettings = function(raw) {
+ const aa = typeof raw === 'string'
+ ? arrayFromString(raw)
+ : arrayFromObject(raw);
+ aa.sort((a, b) => a[0].localeCompare(b[0]));
+ return JSON.stringify(aa);
+};
+
+/******************************************************************************/
+
+const arrayFromObject = function(o) {
+ const out = [];
+ for ( const k in o ) {
+ if ( o.hasOwnProperty(k) === false ) { continue; }
+ out.push([ k, `${o[k]}` ]);
+ }
+ return out;
+};
+
+const arrayFromString = function(s) {
+ const out = [];
+ for ( let line of s.split(/[\n\r]+/) ) {
+ line = line.trim();
+ if ( line === '' ) { continue; }
+ const pos = line.indexOf(' ');
+ let k, v;
+ if ( pos !== -1 ) {
+ k = line.slice(0, pos);
+ v = line.slice(pos + 1);
+ } else {
+ k = line;
+ v = '';
+ }
+ out.push([ k.trim(), v.trim() ]);
+ }
+ return out;
+};
+
+/******************************************************************************/
+
+const advancedSettingsChanged = (( ) => {
+ const handler = ( ) => {
+ const changed = hashFromAdvancedSettings(cmEditor.getValue()) !== beforeHash;
+ qs$('#advancedSettingsApply').disabled = !changed;
+ CodeMirror.commands.save = changed ? applyChanges : function(){};
+ };
+
+ const timer = vAPI.defer.create(handler);
+
+ return function() {
+ timer.offon(200);
+ };
+})();
+
+cmEditor.on('changes', advancedSettingsChanged);
+
+/******************************************************************************/
+
+const renderAdvancedSettings = async function(first) {
+ const details = await vAPI.messaging.send('dashboard', {
+ what: 'readHiddenSettings',
+ });
+ defaultSettings = new Map(arrayFromObject(details.default));
+ adminSettings = new Map(arrayFromObject(details.admin));
+ beforeHash = hashFromAdvancedSettings(details.current);
+ const pretty = [];
+ const roLines = [];
+ const entries = arrayFromObject(details.current);
+ let max = 0;
+ for ( const [ k ] of entries ) {
+ if ( k.length > max ) { max = k.length; }
+ }
+ for ( let i = 0; i < entries.length; i++ ) {
+ const [ k, v ] = entries[i];
+ pretty.push(' '.repeat(max - k.length) + `${k} ${v}`);
+ if ( adminSettings.has(k) ) {
+ roLines.push(i);
+ }
+ }
+ pretty.push('');
+ cmEditor.setValue(pretty.join('\n'));
+ if ( first ) {
+ cmEditor.clearHistory();
+ }
+ for ( const line of roLines ) {
+ cmEditor.markText(
+ { line, ch: 0 },
+ { line: line + 1, ch: 0 },
+ { readOnly: true }
+ );
+ }
+ advancedSettingsChanged();
+ cmEditor.focus();
+};
+
+/******************************************************************************/
+
+const applyChanges = async function() {
+ await vAPI.messaging.send('dashboard', {
+ what: 'writeHiddenSettings',
+ content: cmEditor.getValue(),
+ });
+ renderAdvancedSettings();
+};
+
+/******************************************************************************/
+
+dom.on('#advancedSettings', 'input', advancedSettingsChanged);
+dom.on('#advancedSettingsApply', 'click', ( ) => {
+ applyChanges();
+});
+
+renderAdvancedSettings(true);
+
+/******************************************************************************/
diff --git a/src/js/asset-viewer.js b/src/js/asset-viewer.js
new file mode 100644
index 0000000..eabe136
--- /dev/null
+++ b/src/js/asset-viewer.js
@@ -0,0 +1,112 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* global CodeMirror, uBlockDashboard */
+
+'use strict';
+
+/******************************************************************************/
+
+import { dom, qs$ } from './dom.js';
+import './codemirror/ubo-static-filtering.js';
+
+/******************************************************************************/
+
+(async ( ) => {
+ const subscribeURL = new URL(document.location);
+ const subscribeParams = subscribeURL.searchParams;
+ const assetKey = subscribeParams.get('url');
+ if ( assetKey === null ) { return; }
+
+ const subscribeElem = subscribeParams.get('subscribe') !== null
+ ? qs$('#subscribe')
+ : null;
+ if ( subscribeElem !== null && subscribeURL.hash !== '#subscribed' ) {
+ const title = subscribeParams.get('title');
+ const promptElem = qs$('#subscribePrompt');
+ dom.text(promptElem.children[0], title);
+ const a = promptElem.children[1];
+ dom.text(a, assetKey);
+ dom.attr(a, 'href', assetKey);
+ dom.cl.remove(subscribeElem, 'hide');
+ }
+
+ const cmEditor = new CodeMirror(qs$('#content'), {
+ autofocus: true,
+ foldGutter: true,
+ gutters: [
+ 'CodeMirror-linenumbers',
+ { className: 'CodeMirror-lintgutter', style: 'width: 11px' },
+ ],
+ lineNumbers: true,
+ lineWrapping: true,
+ matchBrackets: true,
+ maxScanLines: 1,
+ readOnly: true,
+ styleActiveLine: {
+ nonEmpty: true,
+ },
+ });
+
+ uBlockDashboard.patchCodeMirrorEditor(cmEditor);
+
+ vAPI.messaging.send('dashboard', {
+ what: 'getAutoCompleteDetails'
+ }).then(hints => {
+ if ( hints instanceof Object === false ) { return; }
+ cmEditor.setOption('uboHints', hints);
+ });
+
+ vAPI.messaging.send('dashboard', {
+ what: 'getTrustedScriptletTokens',
+ }).then(tokens => {
+ cmEditor.setOption('trustedScriptletTokens', tokens);
+ });
+
+ const details = await vAPI.messaging.send('default', {
+ what : 'getAssetContent',
+ url: assetKey,
+ });
+ cmEditor.setOption('trustedSource', details.trustedSource === true);
+ cmEditor.setValue(details && details.content || '');
+
+ if ( subscribeElem !== null ) {
+ dom.on('#subscribeButton', 'click', ( ) => {
+ dom.cl.add(subscribeElem, 'hide');
+ vAPI.messaging.send('scriptlets', {
+ what: 'applyFilterListSelection',
+ toImport: assetKey,
+ }).then(( ) => {
+ vAPI.messaging.send('scriptlets', {
+ what: 'reloadAllFilters'
+ });
+ });
+ }, { once: true });
+ }
+
+ if ( details.sourceURL ) {
+ const a = qs$('.cm-search-widget .sourceURL');
+ dom.attr(a, 'href', details.sourceURL);
+ dom.attr(a, 'title', details.sourceURL);
+ }
+
+ dom.cl.remove(dom.body, 'loading');
+})();
diff --git a/src/js/assets.js b/src/js/assets.js
new file mode 100644
index 0000000..69c2ef3
--- /dev/null
+++ b/src/js/assets.js
@@ -0,0 +1,1478 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import µb from './background.js';
+import { broadcast } from './broadcast.js';
+import cacheStorage from './cachestorage.js';
+import { ubolog } from './console.js';
+import { i18n$ } from './i18n.js';
+import logger from './logger.js';
+import * as sfp from './static-filtering-parser.js';
+import { orphanizeString, } from './text-utils.js';
+
+/******************************************************************************/
+
+const reIsExternalPath = /^(?:[a-z-]+):\/\//;
+const reIsUserAsset = /^user-/;
+const errorCantConnectTo = i18n$('errorCantConnectTo');
+const MS_PER_HOUR = 60 * 60 * 1000;
+const MS_PER_DAY = 24 * MS_PER_HOUR;
+const MINUTES_PER_DAY = 24 * 60;
+const EXPIRES_DEFAULT = 7;
+
+const assets = {};
+
+// A hint for various pieces of code to take measures if possible to save
+// bandwidth of remote servers.
+let remoteServerFriendly = false;
+
+/******************************************************************************/
+
+const stringIsNotEmpty = s => typeof s === 'string' && s !== '';
+
+const parseExpires = s => {
+ const matches = s.match(/(\d+)\s*([dhm]?)/i);
+ if ( matches === null ) { return; }
+ let updateAfter = parseInt(matches[1], 10);
+ if ( matches[2] === 'h' ) {
+ updateAfter = Math.max(updateAfter, 4) / 24;
+ } else if ( matches[2] === 'm' ) {
+ updateAfter = Math.max(updateAfter, 240) / 1440;
+ }
+ return updateAfter;
+};
+
+const extractMetadataFromList = (content, fields) => {
+ const out = {};
+ const head = content.slice(0, 1024);
+ for ( let field of fields ) {
+ field = field.replace(/\s+/g, '-');
+ const re = new RegExp(`^(?:! *|# +)${field.replace(/-/g, '(?: +|-)')}: *(.+)$`, 'im');
+ const match = re.exec(head);
+ let value = match && match[1].trim() || undefined;
+ if ( value !== undefined && value.startsWith('%') ) {
+ value = undefined;
+ }
+ field = field.toLowerCase().replace(
+ /-[a-z]/g, s => s.charAt(1).toUpperCase()
+ );
+ out[field] = value && orphanizeString(value);
+ }
+ // Pre-process known fields
+ if ( out.lastModified ) {
+ out.lastModified = (new Date(out.lastModified)).getTime() || 0;
+ }
+ if ( out.expires ) {
+ out.expires = parseExpires(out.expires);
+ }
+ if ( out.diffExpires ) {
+ out.diffExpires = parseExpires(out.diffExpires);
+ }
+ return out;
+};
+assets.extractMetadataFromList = extractMetadataFromList;
+
+const resourceTimeFromXhr = xhr => {
+ if ( typeof xhr.response !== 'string' ) { return 0; }
+ const metadata = extractMetadataFromList(xhr.response, [
+ 'Last-Modified'
+ ]);
+ return metadata.lastModified || 0;
+};
+
+const resourceTimeFromParts = (parts, time) => {
+ const goodParts = parts.filter(part => typeof part === 'object');
+ return goodParts.reduce((acc, part) =>
+ ((part.resourceTime || 0) > acc ? part.resourceTime : acc),
+ time
+ );
+};
+
+const resourceIsStale = (networkDetails, cacheDetails) => {
+ if ( typeof networkDetails.resourceTime !== 'number' ) { return false; }
+ if ( networkDetails.resourceTime === 0 ) { return false; }
+ if ( typeof cacheDetails.resourceTime !== 'number' ) { return false; }
+ if ( cacheDetails.resourceTime === 0 ) { return false; }
+ if ( networkDetails.resourceTime < cacheDetails.resourceTime ) {
+ ubolog(`Skip ${networkDetails.url}\n\tolder than ${cacheDetails.remoteURL}`);
+ return true;
+ }
+ return false;
+};
+
+const getUpdateAfterTime = (assetKey, diff = false) => {
+ const entry = assetCacheRegistry[assetKey];
+ if ( entry ) {
+ if ( diff && typeof entry.diffExpires === 'number' ) {
+ return entry.diffExpires * MS_PER_DAY;
+ }
+ if ( typeof entry.expires === 'number' ) {
+ return entry.expires * MS_PER_DAY;
+ }
+ }
+ if ( assetSourceRegistry ) {
+ const entry = assetSourceRegistry[assetKey];
+ if ( entry && typeof entry.updateAfter === 'number' ) {
+ return entry.updateAfter * MS_PER_DAY;
+ }
+ }
+ return EXPIRES_DEFAULT * MS_PER_DAY; // default to 7-day
+};
+
+const getWriteTime = assetKey => {
+ const entry = assetCacheRegistry[assetKey];
+ if ( entry ) { return entry.writeTime || 0; }
+ return 0;
+};
+
+const isDiffUpdatableAsset = content => {
+ if ( typeof content !== 'string' ) { return false; }
+ const data = extractMetadataFromList(content, [
+ 'Diff-Path',
+ ]);
+ return typeof data.diffPath === 'string' &&
+ data.diffPath.startsWith('%') === false;
+};
+
+const computedPatchUpdateTime = assetKey => {
+ const entry = assetCacheRegistry[assetKey];
+ if ( entry === undefined ) { return 0; }
+ if ( typeof entry.diffPath !== 'string' ) { return 0; }
+ if ( typeof entry.diffExpires !== 'number' ) { return 0; }
+ const match = /(\d+)\.(\d+)\.(\d+)\.(\d+)/.exec(entry.diffPath);
+ if ( match === null ) { return getWriteTime(); }
+ const date = new Date();
+ date.setUTCFullYear(
+ parseInt(match[1], 10),
+ parseInt(match[2], 10) - 1,
+ parseInt(match[3], 10)
+ );
+ date.setUTCHours(0, parseInt(match[4], 10) + entry.diffExpires * MINUTES_PER_DAY, 0, 0);
+ return date.getTime();
+};
+
+/******************************************************************************/
+
+// favorLocal: avoid making network requests whenever possible
+// favorOrigin: avoid using CDN URLs whenever possible
+
+const getContentURLs = (assetKey, options = {}) => {
+ const contentURLs = [];
+ const entry = assetSourceRegistry[assetKey];
+ if ( entry instanceof Object === false ) { return contentURLs; }
+ if ( typeof entry.contentURL === 'string' ) {
+ contentURLs.push(entry.contentURL);
+ } else if ( Array.isArray(entry.contentURL) ) {
+ contentURLs.push(...entry.contentURL);
+ } else if ( reIsExternalPath.test(assetKey) ) {
+ contentURLs.push(assetKey);
+ }
+ if ( options.favorLocal ) {
+ contentURLs.sort((a, b) => {
+ if ( reIsExternalPath.test(a) ) { return 1; }
+ if ( reIsExternalPath.test(b) ) { return -1; }
+ return 0;
+ });
+ }
+ if ( options.favorOrigin !== true && Array.isArray(entry.cdnURLs) ) {
+ const cdnURLs = entry.cdnURLs.slice();
+ for ( let i = 0, n = cdnURLs.length; i < n; i++ ) {
+ const j = Math.floor(Math.random() * n);
+ if ( j === i ) { continue; }
+ [ cdnURLs[j], cdnURLs[i] ] = [ cdnURLs[i], cdnURLs[j] ];
+ }
+ if ( options.favorLocal ) {
+ contentURLs.push(...cdnURLs);
+ } else {
+ contentURLs.unshift(...cdnURLs);
+ }
+ }
+ return contentURLs;
+};
+
+/******************************************************************************/
+
+const observers = [];
+
+assets.addObserver = function(observer) {
+ if ( observers.indexOf(observer) === -1 ) {
+ observers.push(observer);
+ }
+};
+
+assets.removeObserver = function(observer) {
+ let pos;
+ while ( (pos = observers.indexOf(observer)) !== -1 ) {
+ observers.splice(pos, 1);
+ }
+};
+
+const fireNotification = function(topic, details) {
+ let result;
+ for ( const observer of observers ) {
+ const r = observer(topic, details);
+ if ( r !== undefined ) { result = r; }
+ }
+ return result;
+};
+
+/******************************************************************************/
+
+assets.fetch = function(url, options = {}) {
+ return new Promise((resolve, reject) => {
+ // Start of executor
+
+ const timeoutAfter = µb.hiddenSettings.assetFetchTimeout || 30;
+ const xhr = new XMLHttpRequest();
+ let contentLoaded = 0;
+
+ const cleanup = function() {
+ xhr.removeEventListener('load', onLoadEvent);
+ xhr.removeEventListener('error', onErrorEvent);
+ xhr.removeEventListener('abort', onErrorEvent);
+ xhr.removeEventListener('progress', onProgressEvent);
+ timeoutTimer.off();
+ };
+
+ const fail = function(details, msg) {
+ logger.writeOne({
+ realm: 'message',
+ type: 'error',
+ text: msg,
+ });
+ details.content = '';
+ details.error = msg;
+ reject(details);
+ };
+
+ // https://github.com/gorhill/uMatrix/issues/15
+ const onLoadEvent = function() {
+ cleanup();
+ // xhr for local files gives status 0, but actually succeeds
+ const details = {
+ url,
+ statusCode: this.status || 200,
+ statusText: this.statusText || ''
+ };
+ if ( details.statusCode < 200 || details.statusCode >= 300 ) {
+ return fail(details, `${url}: ${details.statusCode} ${details.statusText}`);
+ }
+ details.content = this.response;
+ details.resourceTime = resourceTimeFromXhr(this);
+ resolve(details);
+ };
+
+ const onErrorEvent = function() {
+ cleanup();
+ fail({ url }, errorCantConnectTo.replace('{{msg}}', url));
+ };
+
+ const onTimeout = function() {
+ xhr.abort();
+ };
+
+ // https://github.com/gorhill/uBlock/issues/2526
+ // - Timeout only when there is no progress.
+ const onProgressEvent = function(ev) {
+ if ( ev.loaded === contentLoaded ) { return; }
+ contentLoaded = ev.loaded;
+ timeoutTimer.offon({ sec: timeoutAfter });
+ };
+
+ const timeoutTimer = vAPI.defer.create(onTimeout);
+
+ // Be ready for thrown exceptions:
+ // I am pretty sure it used to work, but now using a URL such as
+ // `file:///` on Chromium 40 results in an exception being thrown.
+ try {
+ xhr.open('get', url, true);
+ xhr.addEventListener('load', onLoadEvent);
+ xhr.addEventListener('error', onErrorEvent);
+ xhr.addEventListener('abort', onErrorEvent);
+ xhr.addEventListener('progress', onProgressEvent);
+ xhr.responseType = options.responseType || 'text';
+ xhr.send();
+ timeoutTimer.on({ sec: timeoutAfter });
+ } catch (e) {
+ onErrorEvent.call(xhr);
+ }
+
+ // End of executor
+ });
+};
+
+/******************************************************************************/
+
+assets.fetchText = async function(url) {
+ const isExternal = reIsExternalPath.test(url);
+ let actualUrl = isExternal ? url : vAPI.getURL(url);
+
+ // https://github.com/gorhill/uBlock/issues/2592
+ // Force browser cache to be bypassed, but only for resources which have
+ // been fetched more than one hour ago.
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/682#issuecomment-515197130
+ // Provide filter list authors a way to completely bypass
+ // the browser cache.
+ // https://github.com/gorhill/uBlock/commit/048bfd251c9b#r37972005
+ // Use modulo prime numbers to avoid generating the same token at the
+ // same time across different days.
+ // Do not bypass browser cache if we are asked to be gentle on remote
+ // servers.
+ if ( isExternal && remoteServerFriendly !== true ) {
+ const cacheBypassToken =
+ µb.hiddenSettings.updateAssetBypassBrowserCache
+ ? Math.floor(Date.now() / 1000) % 86413
+ : Math.floor(Date.now() / 3600000) % 13;
+ const queryValue = `_=${cacheBypassToken}`;
+ if ( actualUrl.indexOf('?') === -1 ) {
+ actualUrl += '?';
+ } else {
+ actualUrl += '&';
+ }
+ actualUrl += queryValue;
+ }
+
+ let details = { content: '' };
+ try {
+ details = await assets.fetch(actualUrl);
+
+ // Consider an empty result to be an error
+ if ( stringIsNotEmpty(details.content) === false ) {
+ details.content = '';
+ }
+
+ // We never download anything else than plain text: discard if
+ // response appears to be a HTML document: could happen when server
+ // serves some kind of error page for example.
+ const text = details.content.trim();
+ if ( text.startsWith('<') && text.endsWith('>') ) {
+ details.content = '';
+ details.error = 'assets.fetchText(): Not a text file';
+ }
+ } catch(ex) {
+ details = ex;
+ }
+
+ // We want to return the caller's URL, not our internal one which may
+ // differ from the caller's one.
+ details.url = url;
+
+ return details;
+};
+
+/******************************************************************************/
+
+// https://github.com/gorhill/uBlock/issues/3331
+// Support the seamless loading of sublists.
+
+assets.fetchFilterList = async function(mainlistURL) {
+ const toParsedURL = url => {
+ try {
+ return new URL(url.trim());
+ } catch (ex) {
+ }
+ };
+
+ // https://github.com/NanoAdblocker/NanoCore/issues/239
+ // Anything under URL's root directory is allowed to be fetched. The
+ // URL of a sublist will always be relative to the URL of the parent
+ // list (instead of the URL of the root list).
+ let rootDirectoryURL = toParsedURL(
+ reIsExternalPath.test(mainlistURL)
+ ? mainlistURL
+ : vAPI.getURL(mainlistURL)
+ );
+ if ( rootDirectoryURL !== undefined ) {
+ const pos = rootDirectoryURL.pathname.lastIndexOf('/');
+ if ( pos !== -1 ) {
+ rootDirectoryURL.pathname =
+ rootDirectoryURL.pathname.slice(0, pos + 1);
+ } else {
+ rootDirectoryURL = undefined;
+ }
+ }
+
+ const sublistURLs = new Set();
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1113
+ // Process only `!#include` directives which are not excluded by an
+ // `!#if` directive.
+ const processIncludeDirectives = function(results) {
+ const out = [];
+ const reInclude = /^!#include +(\S+)[^\n\r]*(?:[\n\r]+|$)/gm;
+ for ( const result of results ) {
+ if ( typeof result === 'string' ) {
+ out.push(result);
+ continue;
+ }
+ if ( result instanceof Object === false ) { continue; }
+ const content = result.content;
+ const slices = sfp.utils.preparser.splitter(
+ content,
+ vAPI.webextFlavor.env
+ );
+ for ( let i = 0, n = slices.length - 1; i < n; i++ ) {
+ const slice = content.slice(slices[i+0], slices[i+1]);
+ if ( (i & 1) !== 0 ) {
+ out.push(slice);
+ continue;
+ }
+ let lastIndex = 0;
+ for (;;) {
+ if ( rootDirectoryURL === undefined ) { break; }
+ const match = reInclude.exec(slice);
+ if ( match === null ) { break; }
+ if ( toParsedURL(match[1]) !== undefined ) { continue; }
+ if ( match[1].indexOf('..') !== -1 ) { continue; }
+ // Compute nested list path relative to parent list path
+ const pos = result.url.lastIndexOf('/');
+ if ( pos === -1 ) { continue; }
+ const subURL = result.url.slice(0, pos + 1) + match[1].trim();
+ if ( sublistURLs.has(subURL) ) { continue; }
+ sublistURLs.add(subURL);
+ out.push(
+ slice.slice(lastIndex, match.index + match[0].length),
+ `! >>>>>>>> ${subURL}\n`,
+ assets.fetchText(subURL),
+ `! <<<<<<<< ${subURL}\n`
+ );
+ lastIndex = reInclude.lastIndex;
+ }
+ out.push(lastIndex === 0 ? slice : slice.slice(lastIndex));
+ }
+ }
+ return out;
+ };
+
+ // https://github.com/AdguardTeam/FiltersRegistry/issues/82
+ // Not checking for `errored` status was causing repeated notifications
+ // to the caller. This can happen when more than one out of multiple
+ // sublists can't be fetched.
+
+ let allParts = [
+ this.fetchText(mainlistURL)
+ ];
+ // Abort processing `include` directives if at least one included sublist
+ // can't be fetched.
+ let resourceTime = 0;
+ do {
+ allParts = await Promise.all(allParts);
+ const part = allParts
+ .find(part => typeof part === 'object' && part.error !== undefined);
+ if ( part !== undefined ) {
+ return { url: mainlistURL, content: '', error: part.error };
+ }
+ resourceTime = resourceTimeFromParts(allParts, resourceTime);
+ // Skip pre-parser directives for diff-updatable assets
+ if ( allParts.length === 1 && allParts[0] instanceof Object ) {
+ if ( isDiffUpdatableAsset(allParts[0].content) ) {
+ allParts[0] = allParts[0].content;
+ break;
+ }
+ }
+ allParts = processIncludeDirectives(allParts);
+ } while ( allParts.some(part => typeof part !== 'string') );
+ // If we reach this point, this means all fetches were successful.
+ return {
+ url: mainlistURL,
+ resourceTime,
+ content: allParts.length === 1
+ ? allParts[0]
+ : allParts.join('') + '\n'
+ };
+};
+
+/*******************************************************************************
+
+ The purpose of the asset source registry is to keep key detail information
+ about an asset:
+ - Where to load it from: this may consist of one or more URLs, either local
+ or remote.
+ - After how many days an asset should be deemed obsolete -- i.e. in need of
+ an update.
+ - The origin and type of an asset.
+ - The last time an asset was registered.
+
+**/
+
+let assetSourceRegistryPromise;
+let assetSourceRegistry = Object.create(null);
+
+function getAssetSourceRegistry() {
+ if ( assetSourceRegistryPromise === undefined ) {
+ assetSourceRegistryPromise = cacheStorage.get(
+ 'assetSourceRegistry'
+ ).then(bin => {
+ if (
+ bin instanceof Object &&
+ bin.assetSourceRegistry instanceof Object
+ ) {
+ assetSourceRegistry = bin.assetSourceRegistry;
+ return assetSourceRegistry;
+ }
+ return assets.fetchText(
+ µb.assetsBootstrapLocation || µb.assetsJsonPath
+ ).then(details => {
+ return details.content !== ''
+ ? details
+ : assets.fetchText(µb.assetsJsonPath);
+ }).then(details => {
+ updateAssetSourceRegistry(details.content, true);
+ return assetSourceRegistry;
+ });
+ });
+ }
+
+ return assetSourceRegistryPromise;
+}
+
+function registerAssetSource(assetKey, newDict) {
+ const currentDict = assetSourceRegistry[assetKey] || {};
+ for ( const [ k, v ] of Object.entries(newDict) ) {
+ if ( v === undefined || v === null ) {
+ delete currentDict[k];
+ } else {
+ currentDict[k] = newDict[k];
+ }
+ }
+ let contentURL = newDict.contentURL;
+ if ( contentURL !== undefined ) {
+ if ( typeof contentURL === 'string' ) {
+ contentURL = currentDict.contentURL = [ contentURL ];
+ } else if ( Array.isArray(contentURL) === false ) {
+ contentURL = currentDict.contentURL = [];
+ }
+ let remoteURLCount = 0;
+ for ( let i = 0; i < contentURL.length; i++ ) {
+ if ( reIsExternalPath.test(contentURL[i]) ) {
+ remoteURLCount += 1;
+ }
+ }
+ currentDict.hasLocalURL = remoteURLCount !== contentURL.length;
+ currentDict.hasRemoteURL = remoteURLCount !== 0;
+ } else if ( currentDict.contentURL === undefined ) {
+ currentDict.contentURL = [];
+ }
+ if ( currentDict.submitter ) {
+ currentDict.submitTime = Date.now(); // To detect stale entries
+ }
+ assetSourceRegistry[assetKey] = currentDict;
+}
+
+function unregisterAssetSource(assetKey) {
+ assetCacheRemove(assetKey);
+ delete assetSourceRegistry[assetKey];
+}
+
+const saveAssetSourceRegistry = (( ) => {
+ const save = ( ) => {
+ timer.off();
+ cacheStorage.set({ assetSourceRegistry });
+ };
+ const timer = vAPI.defer.create(save);
+ return function(lazily) {
+ if ( lazily ) {
+ timer.offon(500);
+ } else {
+ save();
+ }
+ };
+})();
+
+async function assetSourceGetDetails(assetKey) {
+ await getAssetSourceRegistry();
+ const entry = assetSourceRegistry[assetKey];
+ if ( entry === undefined ) { return; }
+ return entry;
+}
+
+function updateAssetSourceRegistry(json, silent = false) {
+ let newDict;
+ try {
+ newDict = JSON.parse(json);
+ newDict['assets.json'].defaultListset =
+ Array.from(Object.entries(newDict))
+ .filter(a => a[1].content === 'filters' && a[1].off === undefined)
+ .map(a => a[0]);
+ } catch (ex) {
+ }
+ if ( newDict instanceof Object === false ) { return; }
+
+ const oldDict = assetSourceRegistry;
+
+ fireNotification('assets.json-updated', { newDict, oldDict });
+
+ // Remove obsolete entries (only those which were built-in).
+ for ( const assetKey in oldDict ) {
+ if (
+ newDict[assetKey] === undefined &&
+ oldDict[assetKey].submitter === undefined
+ ) {
+ unregisterAssetSource(assetKey);
+ }
+ }
+ // Add/update existing entries. Notify of new asset sources.
+ for ( const assetKey in newDict ) {
+ if ( oldDict[assetKey] === undefined && !silent ) {
+ fireNotification(
+ 'builtin-asset-source-added',
+ { assetKey: assetKey, entry: newDict[assetKey] }
+ );
+ }
+ registerAssetSource(assetKey, newDict[assetKey]);
+ }
+ saveAssetSourceRegistry();
+}
+
+assets.registerAssetSource = async function(assetKey, details) {
+ await getAssetSourceRegistry();
+ registerAssetSource(assetKey, details);
+ saveAssetSourceRegistry(true);
+};
+
+assets.unregisterAssetSource = async function(assetKey) {
+ await getAssetSourceRegistry();
+ unregisterAssetSource(assetKey);
+ saveAssetSourceRegistry(true);
+};
+
+/*******************************************************************************
+
+ The purpose of the asset cache registry is to keep track of all assets
+ which have been persisted into the local cache.
+
+**/
+
+const assetCacheRegistryStartTime = Date.now();
+let assetCacheRegistryPromise;
+let assetCacheRegistry = {};
+
+function getAssetCacheRegistry() {
+ if ( assetCacheRegistryPromise === undefined ) {
+ assetCacheRegistryPromise = cacheStorage.get(
+ 'assetCacheRegistry'
+ ).then(bin => {
+ if (
+ bin instanceof Object &&
+ bin.assetCacheRegistry instanceof Object
+ ) {
+ if ( Object.keys(assetCacheRegistry).length === 0 ) {
+ assetCacheRegistry = bin.assetCacheRegistry;
+ } else {
+ console.error(
+ 'getAssetCacheRegistry(): assetCacheRegistry reassigned!'
+ );
+ if (
+ Object.keys(bin.assetCacheRegistry).sort().join() !==
+ Object.keys(assetCacheRegistry).sort().join()
+ ) {
+ console.error(
+ 'getAssetCacheRegistry(): assetCacheRegistry changes overwritten!'
+ );
+ }
+ }
+ }
+ return assetCacheRegistry;
+ });
+ }
+
+ return assetCacheRegistryPromise;
+}
+
+const saveAssetCacheRegistry = (( ) => {
+ const save = function() {
+ timer.off();
+ cacheStorage.set({ assetCacheRegistry });
+ };
+ const timer = vAPI.defer.create(save);
+ return function(lazily) {
+ if ( lazily ) {
+ timer.offon({ sec: 30 });
+ } else {
+ save();
+ }
+ };
+})();
+
+async function assetCacheRead(assetKey, updateReadTime = false) {
+ const t0 = Date.now();
+ const internalKey = `cache/${assetKey}`;
+
+ const reportBack = function(content) {
+ if ( content instanceof Blob ) { content = ''; }
+ const details = { assetKey, content };
+ if ( content === '' ) { details.error = 'ENOTFOUND'; }
+ return details;
+ };
+
+ const [ , bin ] = await Promise.all([
+ getAssetCacheRegistry(),
+ cacheStorage.get(internalKey),
+ ]);
+
+ if ( µb.readyToFilter !== true ) {
+ µb.supportStats.maxAssetCacheWait = Math.max(
+ Date.now() - t0,
+ parseInt(µb.supportStats.maxAssetCacheWait, 10) || 0
+ ) + ' ms';
+ }
+
+ if (
+ bin instanceof Object === false ||
+ bin.hasOwnProperty(internalKey) === false
+ ) {
+ return reportBack('');
+ }
+
+ const entry = assetCacheRegistry[assetKey];
+ if ( entry === undefined ) {
+ return reportBack('');
+ }
+
+ entry.readTime = Date.now();
+ if ( updateReadTime ) {
+ saveAssetCacheRegistry(true);
+ }
+
+ return reportBack(bin[internalKey]);
+}
+
+async function assetCacheWrite(assetKey, details) {
+ let content = '';
+ let options = {};
+ if ( typeof details === 'string' ) {
+ content = details;
+ } else if ( details instanceof Object ) {
+ content = details.content || '';
+ options = details;
+ }
+
+ if ( content === '' ) {
+ return assetCacheRemove(assetKey);
+ }
+
+ const cacheDict = await getAssetCacheRegistry();
+
+ let entry = cacheDict[assetKey];
+ if ( entry === undefined ) {
+ entry = cacheDict[assetKey] = {};
+ }
+ entry.writeTime = entry.readTime = Date.now();
+ entry.resourceTime = options.resourceTime || 0;
+ if ( typeof options.url === 'string' ) {
+ entry.remoteURL = options.url;
+ }
+ cacheStorage.set({
+ assetCacheRegistry,
+ [`cache/${assetKey}`]: content
+ });
+
+ const result = { assetKey, content };
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/248
+ if ( options.silent !== true ) {
+ fireNotification('after-asset-updated', result);
+ }
+ return result;
+}
+
+async function assetCacheRemove(pattern) {
+ const cacheDict = await getAssetCacheRegistry();
+ const removedEntries = [];
+ const removedContent = [];
+ for ( const assetKey in cacheDict ) {
+ if ( pattern instanceof RegExp && !pattern.test(assetKey) ) {
+ continue;
+ }
+ if ( typeof pattern === 'string' && assetKey !== pattern ) {
+ continue;
+ }
+ removedEntries.push(assetKey);
+ removedContent.push('cache/' + assetKey);
+ delete cacheDict[assetKey];
+ }
+ if ( removedContent.length !== 0 ) {
+ await Promise.all([
+ cacheStorage.remove(removedContent),
+ cacheStorage.set({ assetCacheRegistry }),
+ ]);
+ }
+ for ( let i = 0; i < removedEntries.length; i++ ) {
+ fireNotification('after-asset-updated', {
+ assetKey: removedEntries[i]
+ });
+ }
+}
+
+async function assetCacheGetDetails(assetKey) {
+ const cacheDict = await getAssetCacheRegistry();
+ const entry = cacheDict[assetKey];
+ if ( entry === undefined ) { return; }
+ return entry;
+}
+
+async function assetCacheSetDetails(assetKey, details) {
+ const cacheDict = await getAssetCacheRegistry();
+ const entry = cacheDict[assetKey];
+ if ( entry === undefined ) { return; }
+ let modified = false;
+ for ( const [ k, v ] of Object.entries(details) ) {
+ if ( v === undefined ) {
+ if ( entry[k] !== undefined ) {
+ delete entry[k];
+ modified = true;
+ continue;
+ }
+ }
+ if ( v !== entry[k] ) {
+ entry[k] = v;
+ modified = true;
+ }
+ }
+ if ( modified ) {
+ saveAssetCacheRegistry();
+ }
+}
+
+async function assetCacheMarkAsDirty(pattern, exclude) {
+ const cacheDict = await getAssetCacheRegistry();
+ let mustSave = false;
+ for ( const assetKey in cacheDict ) {
+ if ( pattern instanceof RegExp ) {
+ if ( pattern.test(assetKey) === false ) { continue; }
+ } else if ( typeof pattern === 'string' ) {
+ if ( assetKey !== pattern ) { continue; }
+ } else if ( Array.isArray(pattern) ) {
+ if ( pattern.indexOf(assetKey) === -1 ) { continue; }
+ }
+ if ( exclude instanceof RegExp ) {
+ if ( exclude.test(assetKey) ) { continue; }
+ } else if ( typeof exclude === 'string' ) {
+ if ( assetKey === exclude ) { continue; }
+ } else if ( Array.isArray(exclude) ) {
+ if ( exclude.indexOf(assetKey) !== -1 ) { continue; }
+ }
+ const cacheEntry = cacheDict[assetKey];
+ if ( !cacheEntry.writeTime ) { continue; }
+ cacheDict[assetKey].writeTime = 0;
+ mustSave = true;
+ }
+ if ( mustSave ) {
+ cacheStorage.set({ assetCacheRegistry });
+ }
+}
+
+/*******************************************************************************
+
+ User assets are NOT persisted in the cache storage. User assets are
+ recognized by the asset key which always starts with 'user-'.
+
+ TODO(seamless migration):
+ Can remove instances of old user asset keys when I am confident all users
+ are using uBO v1.11 and beyond.
+
+**/
+
+/*******************************************************************************
+
+ User assets are NOT persisted in the cache storage. User assets are
+ recognized by the asset key which always starts with 'user-'.
+
+**/
+
+const readUserAsset = async function(assetKey) {
+ const bin = await vAPI.storage.get(assetKey);
+ const content =
+ bin instanceof Object && typeof bin[assetKey] === 'string'
+ ? bin[assetKey]
+ : '';
+ return { assetKey, content };
+};
+
+const saveUserAsset = function(assetKey, content) {
+ return vAPI.storage.set({ [assetKey]: content }).then(( ) => {
+ return { assetKey, content };
+ });
+};
+
+/******************************************************************************/
+
+assets.get = async function(assetKey, options = {}) {
+ if ( assetKey === µb.userFiltersPath ) {
+ return readUserAsset(assetKey);
+ }
+
+ let assetDetails = {};
+
+ const reportBack = (content, url = '', err = undefined) => {
+ const details = { assetKey, content };
+ if ( err !== undefined ) {
+ details.error = assetDetails.lastError = err;
+ } else {
+ assetDetails.lastError = undefined;
+ }
+ if ( options.needSourceURL ) {
+ if (
+ url === '' &&
+ assetCacheRegistry instanceof Object &&
+ assetCacheRegistry[assetKey] instanceof Object
+ ) {
+ details.sourceURL = assetCacheRegistry[assetKey].remoteURL;
+ }
+ if ( reIsExternalPath.test(url) ) {
+ details.sourceURL = url;
+ }
+ }
+ return details;
+ };
+
+ // Skip read-time property for non-updatable assets: the property is
+ // completely unused for such assets and thus there is no point incurring
+ // storage write overhead at launch when reading compiled or selfie assets.
+ const updateReadTime = /^(?:compiled|selfie)\//.test(assetKey) === false;
+
+ const details = await assetCacheRead(assetKey, updateReadTime);
+ if ( details.content !== '' ) {
+ return reportBack(details.content);
+ }
+
+ const assetRegistry = await getAssetSourceRegistry();
+
+ assetDetails = assetRegistry[assetKey] || {};
+
+ const contentURLs = getContentURLs(assetKey, options);
+ if ( contentURLs.length === 0 && reIsExternalPath.test(assetKey) ) {
+ assetDetails.content = 'filters';
+ contentURLs.push(assetKey);
+ }
+
+ let error = 'ENOTFOUND';
+ for ( const contentURL of contentURLs ) {
+ const details = assetDetails.content === 'filters'
+ ? await assets.fetchFilterList(contentURL)
+ : await assets.fetchText(contentURL);
+ if ( details.error !== undefined ) {
+ error = details.error;
+ }
+ if ( details.content === '' ) { continue; }
+ if ( reIsExternalPath.test(contentURL) && options.dontCache !== true ) {
+ assetCacheWrite(assetKey, {
+ content: details.content,
+ url: contentURL,
+ silent: options.silent === true,
+ });
+ registerAssetSource(assetKey, { error: undefined });
+ if ( assetDetails.content === 'filters' ) {
+ const metadata = extractMetadataFromList(details.content, [
+ 'Last-Modified',
+ 'Expires',
+ 'Diff-Name',
+ 'Diff-Path',
+ 'Diff-Expires',
+ ]);
+ metadata.diffUpdated = undefined;
+ assetCacheSetDetails(assetKey, metadata);
+ }
+ }
+ return reportBack(details.content, contentURL);
+ }
+ if ( assetRegistry[assetKey] !== undefined ) {
+ registerAssetSource(assetKey, {
+ error: { time: Date.now(), error }
+ });
+ }
+ return reportBack('', '', error);
+};
+
+/******************************************************************************/
+
+async function getRemote(assetKey, options = {}) {
+ const [
+ assetDetails = {},
+ cacheDetails = {},
+ ] = await Promise.all([
+ assetSourceGetDetails(assetKey),
+ assetCacheGetDetails(assetKey),
+ ]);
+
+ let error;
+ let stale = false;
+
+ const reportBack = function(content, url = '', err = '') {
+ const details = { assetKey, content, url };
+ if ( err !== '') {
+ details.error = assetDetails.lastError = err;
+ } else {
+ assetDetails.lastError = undefined;
+ }
+ return details;
+ };
+
+ for ( const contentURL of getContentURLs(assetKey, options) ) {
+ if ( reIsExternalPath.test(contentURL) === false ) { continue; }
+
+ const result = assetDetails.content === 'filters'
+ ? await assets.fetchFilterList(contentURL)
+ : await assets.fetchText(contentURL);
+
+ // Failure
+ if ( stringIsNotEmpty(result.content) === false ) {
+ error = result.statusText;
+ if ( result.statusCode === 0 ) {
+ error = 'network error';
+ }
+ continue;
+ }
+
+ error = undefined;
+
+ // If fetched resource is older than cached one, ignore
+ if ( options.favorOrigin !== true ) {
+ stale = resourceIsStale(result, cacheDetails);
+ if ( stale ) { continue; }
+ }
+
+ // Success
+ assetCacheWrite(assetKey, {
+ content: result.content,
+ url: contentURL,
+ resourceTime: result.resourceTime || 0,
+ });
+
+ if ( assetDetails.content === 'filters' ) {
+ const metadata = extractMetadataFromList(result.content, [
+ 'Last-Modified',
+ 'Expires',
+ 'Diff-Name',
+ 'Diff-Path',
+ 'Diff-Expires',
+ ]);
+ metadata.diffUpdated = undefined;
+ assetCacheSetDetails(assetKey, metadata);
+ }
+
+ registerAssetSource(assetKey, { birthtime: undefined, error: undefined });
+ return reportBack(result.content, contentURL);
+ }
+
+ if ( error !== undefined ) {
+ registerAssetSource(assetKey, { error: { time: Date.now(), error } });
+ return reportBack('', '', 'ENOTFOUND');
+ }
+
+ if ( stale ) {
+ assetCacheSetDetails(assetKey, { writeTime: cacheDetails.resourceTime });
+ }
+
+ return reportBack('');
+}
+
+/******************************************************************************/
+
+assets.put = async function(assetKey, content) {
+ return reIsUserAsset.test(assetKey)
+ ? await saveUserAsset(assetKey, content)
+ : await assetCacheWrite(assetKey, content);
+};
+
+/******************************************************************************/
+
+assets.metadata = async function() {
+ await Promise.all([
+ getAssetSourceRegistry(),
+ getAssetCacheRegistry(),
+ ]);
+
+ const assetDict = JSON.parse(JSON.stringify(assetSourceRegistry));
+ const cacheDict = assetCacheRegistry;
+ const now = Date.now();
+ for ( const assetKey in assetDict ) {
+ const assetEntry = assetDict[assetKey];
+ const cacheEntry = cacheDict[assetKey];
+ if (
+ assetEntry.content === 'filters' &&
+ assetEntry.external !== true
+ ) {
+ assetEntry.isDefault =
+ assetEntry.off === undefined ||
+ assetEntry.off === true &&
+ µb.listMatchesEnvironment(assetEntry);
+ }
+ if ( cacheEntry ) {
+ assetEntry.cached = true;
+ assetEntry.writeTime = cacheEntry.writeTime;
+ const obsoleteAfter = cacheEntry.writeTime + getUpdateAfterTime(assetKey);
+ assetEntry.obsolete = obsoleteAfter < now;
+ assetEntry.remoteURL = cacheEntry.remoteURL;
+ if ( cacheEntry.diffUpdated ) {
+ assetEntry.diffUpdated = cacheEntry.diffUpdated;
+ }
+ } else if (
+ assetEntry.contentURL &&
+ assetEntry.contentURL.length !== 0
+ ) {
+ assetEntry.writeTime = 0;
+ assetEntry.obsolete = true;
+ }
+ }
+
+ return assetDict;
+};
+
+/******************************************************************************/
+
+assets.purge = assetCacheMarkAsDirty;
+
+assets.remove = function(pattern) {
+ return assetCacheRemove(pattern);
+};
+
+assets.rmrf = function() {
+ return assetCacheRemove(/./);
+};
+
+/******************************************************************************/
+
+assets.getUpdateAges = async function(conditions = {}) {
+ const assetDict = await assets.metadata();
+ const now = Date.now();
+ const out = [];
+ for ( const [ assetKey, asset ] of Object.entries(assetDict) ) {
+ if ( asset.hasRemoteURL !== true ) { continue; }
+ const tokens = conditions[asset.content];
+ if ( Array.isArray(tokens) === false ) { continue; }
+ if ( tokens.includes('*') === false ) {
+ if ( tokens.includes(assetKey) === false ) { continue; }
+ }
+ const age = now - (asset.writeTime || 0);
+ out.push({
+ assetKey,
+ age,
+ ageNormalized: age / Math.max(1, getUpdateAfterTime(assetKey)),
+ });
+ }
+ return out;
+};
+
+/******************************************************************************/
+
+// Asset updater area.
+const updaterAssetDelayDefault = 120000;
+const updaterUpdated = [];
+const updaterFetched = new Set();
+
+let updaterStatus;
+let updaterAssetDelay = updaterAssetDelayDefault;
+let updaterAuto = false;
+
+const getAssetDiffDetails = assetKey => {
+ const out = { assetKey };
+ const cacheEntry = assetCacheRegistry[assetKey];
+ if ( cacheEntry === undefined ) { return; }
+ out.patchPath = cacheEntry.diffPath;
+ if ( out.patchPath === undefined ) { return; }
+ const match = /#.+$/.exec(out.patchPath);
+ if ( match !== null ) {
+ out.diffName = match[0].slice(1);
+ } else {
+ out.diffName = cacheEntry.diffName;
+ }
+ if ( out.diffName === undefined ) { return; }
+ out.diffExpires = getUpdateAfterTime(assetKey, true);
+ out.lastModified = cacheEntry.lastModified;
+ out.writeTime = cacheEntry.writeTime;
+ const assetEntry = assetSourceRegistry[assetKey];
+ if ( assetEntry === undefined ) { return; }
+ if ( assetEntry.content !== 'filters' ) { return; }
+ if ( Array.isArray(assetEntry.cdnURLs) ) {
+ out.cdnURLs = assetEntry.cdnURLs.slice();
+ } else if ( reIsExternalPath.test(assetKey) ) {
+ out.cdnURLs = [ assetKey ];
+ } else if ( typeof assetEntry.contentURL === 'string' ) {
+ out.cdnURLs = [ assetEntry.contentURL ];
+ } else if ( Array.isArray(assetEntry.contentURL) ) {
+ out.cdnURLs = assetEntry.contentURL.slice(0).filter(url =>
+ reIsExternalPath.test(url)
+ );
+ }
+ if ( Array.isArray(out.cdnURLs) === false ) { return; }
+ if ( out.cdnURLs.length === 0 ) { return; }
+ return out;
+};
+
+async function diffUpdater() {
+ if ( updaterAuto === false ) { return; }
+ if ( µb.hiddenSettings.differentialUpdate === false ) { return; }
+ const toUpdate = await getUpdateCandidates();
+ const now = Date.now();
+ const toHardUpdate = [];
+ const toSoftUpdate = [];
+ while ( toUpdate.length !== 0 ) {
+ const assetKey = toUpdate.shift();
+ const assetDetails = getAssetDiffDetails(assetKey);
+ if ( assetDetails === undefined ) { continue; }
+ assetDetails.what = 'update';
+ const computedUpdateTime = computedPatchUpdateTime(assetKey);
+ if ( computedUpdateTime !== 0 && computedUpdateTime <= now ) {
+ assetDetails.fetch = true;
+ toHardUpdate.push(assetDetails);
+ } else {
+ assetDetails.fetch = false;
+ toSoftUpdate.push(assetDetails);
+ }
+ }
+ if ( toHardUpdate.length === 0 ) { return; }
+ ubolog('Diff updater: cycle start');
+ return new Promise(resolve => {
+ let pendingOps = 0;
+ const bc = new globalThis.BroadcastChannel('diffUpdater');
+ const terminate = error => {
+ worker.terminate();
+ bc.close();
+ resolve();
+ if ( typeof error !== 'string' ) { return; }
+ ubolog(`Diff updater: terminate because ${error}`);
+ };
+ const checkAndCorrectDiffPath = data => {
+ if ( typeof data.text !== 'string' ) { return; }
+ if ( data.text === '' ) { return; }
+ const metadata = extractMetadataFromList(data.text, [ 'Diff-Path' ]);
+ if ( metadata instanceof Object === false ) { return; }
+ if ( metadata.diffPath === data.patchPath ) { return; }
+ assetCacheSetDetails(data.assetKey, metadata);
+ };
+ bc.onmessage = ev => {
+ const data = ev.data || {};
+ if ( data.what === 'ready' ) {
+ ubolog('Diff updater: hard updating', toHardUpdate.map(v => v.assetKey).join());
+ while ( toHardUpdate.length !== 0 ) {
+ const assetDetails = toHardUpdate.shift();
+ assetDetails.fetch = true;
+ bc.postMessage(assetDetails);
+ pendingOps += 1;
+ }
+ return;
+ }
+ if ( data.what === 'broken' ) {
+ terminate(data.error);
+ return;
+ }
+ if ( data.status === 'needtext' ) {
+ ubolog('Diff updater: need text for', data.assetKey);
+ assetCacheRead(data.assetKey).then(result => {
+ data.text = result.content;
+ data.status = undefined;
+ checkAndCorrectDiffPath(data);
+ bc.postMessage(data);
+ });
+ return;
+ }
+ if ( data.status === 'updated' ) {
+ ubolog(`Diff updater: successfully patched ${data.assetKey} using ${data.patchURL} (${data.patchSize})`);
+ const metadata = extractMetadataFromList(data.text, [
+ 'Last-Modified',
+ 'Expires',
+ 'Diff-Name',
+ 'Diff-Path',
+ 'Diff-Expires',
+ ]);
+ assetCacheWrite(data.assetKey, {
+ content: data.text,
+ resourceTime: metadata.lastModified || 0,
+ });
+ metadata.diffUpdated = true;
+ assetCacheSetDetails(data.assetKey, metadata);
+ updaterUpdated.push(data.assetKey);
+ } else if ( data.error ) {
+ ubolog(`Diff updater: failed to update ${data.assetKey} using ${data.patchPath}\n\treason: ${data.error}`);
+ } else if ( data.status === 'nopatch-yet' || data.status === 'nodiff' ) {
+ ubolog(`Diff updater: skip update of ${data.assetKey} using ${data.patchPath}\n\treason: ${data.status}`);
+ assetCacheSetDetails(data.assetKey, { writeTime: data.writeTime });
+ broadcast({
+ what: 'assetUpdated',
+ key: data.assetKey,
+ cached: true,
+ });
+ } else {
+ ubolog(`Diff updater: ${data.assetKey} / ${data.patchPath} / ${data.status}`);
+ }
+ pendingOps -= 1;
+ if ( pendingOps === 0 && toSoftUpdate.length !== 0 ) {
+ ubolog('Diff updater: soft updating', toSoftUpdate.map(v => v.assetKey).join());
+ while ( toSoftUpdate.length !== 0 ) {
+ bc.postMessage(toSoftUpdate.shift());
+ pendingOps += 1;
+ }
+ }
+ if ( pendingOps !== 0 ) { return; }
+ ubolog('Diff updater: cycle complete');
+ terminate();
+ };
+ const worker = new Worker('js/diff-updater.js');
+ });
+}
+
+function updateFirst() {
+ ubolog('Updater: cycle start');
+ ubolog('Updater: prefer', updaterAuto ? 'CDNs' : 'origin');
+ updaterStatus = 'updating';
+ updaterFetched.clear();
+ updaterUpdated.length = 0;
+ diffUpdater().catch(reason => {
+ ubolog(reason);
+ }).finally(( ) => {
+ updateNext();
+ });
+}
+
+async function getUpdateCandidates() {
+ const [ assetDict, cacheDict ] = await Promise.all([
+ getAssetSourceRegistry(),
+ getAssetCacheRegistry(),
+ ]);
+ const toUpdate = [];
+ for ( const assetKey in assetDict ) {
+ const assetEntry = assetDict[assetKey];
+ if ( assetEntry.hasRemoteURL !== true ) { continue; }
+ if ( updaterFetched.has(assetKey) ) { continue; }
+ const cacheEntry = cacheDict[assetKey];
+ if (
+ fireNotification('before-asset-updated', {
+ assetKey,
+ type: assetEntry.content
+ }) === true
+ ) {
+ toUpdate.push(assetKey);
+ continue;
+ }
+ // This will remove a cached asset when it's no longer in use.
+ if ( cacheEntry && cacheEntry.readTime < assetCacheRegistryStartTime ) {
+ assetCacheRemove(assetKey);
+ }
+ }
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1165
+ // Update most obsolete asset first.
+ toUpdate.sort((a, b) => {
+ const ta = cacheDict[a] !== undefined ? cacheDict[a].writeTime : 0;
+ const tb = cacheDict[b] !== undefined ? cacheDict[b].writeTime : 0;
+ return ta - tb;
+ });
+ return toUpdate;
+}
+
+async function updateNext() {
+ const toUpdate = await getUpdateCandidates();
+ const now = Date.now();
+ const toHardUpdate = [];
+
+ while ( toUpdate.length !== 0 ) {
+ const assetKey = toUpdate.shift();
+ const writeTime = getWriteTime(assetKey);
+ const updateDelay = getUpdateAfterTime(assetKey);
+ if ( (writeTime + updateDelay) > now ) { continue; }
+ toHardUpdate.push(assetKey);
+ }
+ if ( toHardUpdate.length === 0 ) {
+ return updateDone();
+ }
+
+ const assetKey = toHardUpdate.pop();
+ updaterFetched.add(assetKey);
+
+ // In auto-update context, be gentle on remote servers.
+ remoteServerFriendly = updaterAuto;
+
+ let result;
+ if ( assetKey !== 'assets.json' || µb.hiddenSettings.debugAssetsJson !== true ) {
+ result = await getRemote(assetKey, { favorOrigin: updaterAuto === false });
+ } else {
+ result = await assets.fetchText(µb.assetsJsonPath);
+ result.assetKey = 'assets.json';
+ }
+
+ remoteServerFriendly = false;
+
+ if ( result.error ) {
+ ubolog(`Full updater: failed to update ${assetKey}`);
+ fireNotification('asset-update-failed', { assetKey: result.assetKey });
+ } else {
+ ubolog(`Full updater: successfully updated ${assetKey}`);
+ updaterUpdated.push(result.assetKey);
+ if ( result.assetKey === 'assets.json' && result.content !== '' ) {
+ updateAssetSourceRegistry(result.content);
+ }
+ }
+
+ updaterTimer.on(updaterAssetDelay);
+}
+
+const updaterTimer = vAPI.defer.create(updateNext);
+
+function updateDone() {
+ const assetKeys = updaterUpdated.slice(0);
+ updaterFetched.clear();
+ updaterUpdated.length = 0;
+ updaterStatus = undefined;
+ updaterAuto = false;
+ updaterAssetDelay = updaterAssetDelayDefault;
+ ubolog('Updater: cycle end');
+ if ( assetKeys.length ) {
+ ubolog(`Updater: ${assetKeys.join()} were updated`);
+ }
+ fireNotification('after-assets-updated', { assetKeys });
+}
+
+assets.updateStart = function(details) {
+ const oldUpdateDelay = updaterAssetDelay;
+ const newUpdateDelay = typeof details.fetchDelay === 'number'
+ ? details.fetchDelay
+ : updaterAssetDelayDefault;
+ updaterAssetDelay = Math.min(oldUpdateDelay, newUpdateDelay);
+ updaterAuto = details.auto === true;
+ if ( updaterStatus !== undefined ) {
+ if ( newUpdateDelay < oldUpdateDelay ) {
+ updaterTimer.offon(updaterAssetDelay);
+ }
+ return;
+ }
+ updateFirst();
+};
+
+assets.updateStop = function() {
+ updaterTimer.off();
+ if ( updaterStatus !== undefined ) {
+ updateDone();
+ }
+};
+
+assets.isUpdating = function() {
+ return updaterStatus === 'updating' &&
+ updaterAssetDelay <= µb.hiddenSettings.manualUpdateAssetFetchPeriod;
+};
+
+/******************************************************************************/
+
+export default assets;
+
+/******************************************************************************/
diff --git a/src/js/background.js b/src/js/background.js
new file mode 100644
index 0000000..578d8a6
--- /dev/null
+++ b/src/js/background.js
@@ -0,0 +1,410 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* globals browser */
+
+'use strict';
+
+/******************************************************************************/
+
+import logger from './logger.js';
+import { FilteringContext } from './filtering-context.js';
+import { ubologSet } from './console.js';
+
+import {
+ domainFromHostname,
+ hostnameFromURI,
+ originFromURI,
+} from './uri-utils.js';
+
+/******************************************************************************/
+
+// Not all platforms may have properly declared vAPI.webextFlavor.
+
+if ( vAPI.webextFlavor === undefined ) {
+ vAPI.webextFlavor = { major: 0, soup: new Set([ 'ublock' ]) };
+}
+
+/******************************************************************************/
+
+const hiddenSettingsDefault = {
+ allowGenericProceduralFilters: false,
+ assetFetchTimeout: 30,
+ autoCommentFilterTemplate: '{{date}} {{origin}}',
+ autoUpdateAssetFetchPeriod: 15,
+ autoUpdateDelayAfterLaunch: 105,
+ autoUpdatePeriod: 1,
+ benchmarkDatasetURL: 'unset',
+ blockingProfiles: '11111/#F00 11010/#C0F 11001/#00F 00001',
+ cacheStorageAPI: 'unset',
+ cacheStorageCompression: true,
+ cacheControlForFirefox1376932: 'no-cache, no-store, must-revalidate',
+ cloudStorageCompression: true,
+ cnameIgnoreList: 'unset',
+ cnameIgnore1stParty: true,
+ cnameIgnoreExceptions: true,
+ cnameIgnoreRootDocument: true,
+ cnameMaxTTL: 120,
+ cnameReplayFullURL: false,
+ cnameUncloakProxied: false,
+ consoleLogLevel: 'unset',
+ debugAssetsJson: false,
+ debugScriptlets: false,
+ debugScriptletInjector: false,
+ differentialUpdate: true,
+ disableWebAssembly: false,
+ extensionUpdateForceReload: false,
+ filterAuthorMode: false,
+ loggerPopupType: 'popup',
+ manualUpdateAssetFetchPeriod: 500,
+ modifyWebextFlavor: 'unset',
+ popupFontSize: 'unset',
+ popupPanelDisabledSections: 0,
+ popupPanelLockedSections: 0,
+ popupPanelHeightMode: 0,
+ requestJournalProcessPeriod: 1000,
+ selfieAfter: 2,
+ strictBlockingBypassDuration: 120,
+ toolbarWarningTimeout: 60,
+ trustedListPrefixes: 'ublock-',
+ uiPopupConfig: 'unset',
+ uiStyles: 'unset',
+ updateAssetBypassBrowserCache: false,
+ userResourcesLocation: 'unset',
+};
+
+if ( vAPI.webextFlavor.soup.has('devbuild') ) {
+ hiddenSettingsDefault.consoleLogLevel = 'info';
+ hiddenSettingsDefault.trustedListPrefixes += ' user-';
+ ubologSet(true);
+}
+
+const userSettingsDefault = {
+ advancedUserEnabled: false,
+ alwaysDetachLogger: true,
+ autoUpdate: true,
+ cloudStorageEnabled: false,
+ cnameUncloakEnabled: true,
+ collapseBlocked: true,
+ colorBlindFriendly: false,
+ contextMenuEnabled: true,
+ uiAccentCustom: false,
+ uiAccentCustom0: '#aca0f7',
+ uiTheme: 'auto',
+ externalLists: '',
+ firewallPaneMinimized: true,
+ hyperlinkAuditingDisabled: true,
+ ignoreGenericCosmeticFilters: vAPI.webextFlavor.soup.has('mobile'),
+ importedLists: [],
+ largeMediaSize: 50,
+ parseAllABPHideFilters: true,
+ popupPanelSections: 0b111,
+ prefetchingDisabled: true,
+ requestLogMaxEntries: 1000,
+ showIconBadge: true,
+ suspendUntilListsAreLoaded: vAPI.Net.canSuspend(),
+ tooltipsDisabled: false,
+ webrtcIPAddressHidden: false,
+};
+
+const dynamicFilteringDefault = [
+ 'behind-the-scene * * noop',
+ 'behind-the-scene * image noop',
+ 'behind-the-scene * 3p noop',
+ 'behind-the-scene * inline-script noop',
+ 'behind-the-scene * 1p-script noop',
+ 'behind-the-scene * 3p-script noop',
+ 'behind-the-scene * 3p-frame noop',
+];
+
+const hostnameSwitchesDefault = [
+ 'no-large-media: behind-the-scene false',
+];
+// https://github.com/LiCybora/NanoDefenderFirefox/issues/196
+if ( vAPI.webextFlavor.soup.has('firefox') ) {
+ hostnameSwitchesDefault.push('no-csp-reports: * true');
+}
+
+const µBlock = { // jshint ignore:line
+ wakeupReason: '',
+
+ userSettingsDefault,
+ userSettings: Object.assign({}, userSettingsDefault),
+
+ hiddenSettingsDefault,
+ hiddenSettingsAdmin: {},
+ hiddenSettings: Object.assign({}, hiddenSettingsDefault),
+
+ dynamicFilteringDefault,
+ hostnameSwitchesDefault,
+
+ noDashboard: false,
+
+ // Features detection.
+ privacySettingsSupported: vAPI.browserSettings instanceof Object,
+ cloudStorageSupported: vAPI.cloud instanceof Object,
+ canFilterResponseData: typeof browser.webRequest.filterResponseData === 'function',
+
+ // https://github.com/chrisaljoudi/uBlock/issues/180
+ // Whitelist directives need to be loaded once the PSL is available
+ netWhitelist: new Map(),
+ netWhitelistModifyTime: 0,
+ netWhitelistDefault: [
+ 'about-scheme',
+ 'chrome-extension-scheme',
+ 'chrome-scheme',
+ 'edge-scheme',
+ 'moz-extension-scheme',
+ 'opera-scheme',
+ 'vivaldi-scheme',
+ 'wyciwyg-scheme', // Firefox's "What-You-Cache-Is-What-You-Get"
+ ],
+
+ localSettings: {
+ blockedRequestCount: 0,
+ allowedRequestCount: 0,
+ },
+ localSettingsLastModified: 0,
+
+ // Read-only
+ systemSettings: {
+ compiledMagic: 57, // Increase when compiled format changes
+ selfieMagic: 57, // Increase when selfie format changes
+ },
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/759#issuecomment-546654501
+ // The assumption is that cache storage state reflects whether
+ // compiled or selfie assets are available or not. The properties
+ // below is to no longer rely on this assumption -- though it's still
+ // not clear how the assumption could be wrong, and it's still not
+ // clear whether relying on those properties will really solve the
+ // issue. It's just an attempt at hardening.
+ compiledFormatChanged: false,
+ selfieIsInvalid: false,
+
+ restoreBackupSettings: {
+ lastRestoreFile: '',
+ lastRestoreTime: 0,
+ lastBackupFile: '',
+ lastBackupTime: 0,
+ },
+
+ commandShortcuts: new Map(),
+
+ // Allows to fully customize uBO's assets, typically set through admin
+ // settings. The content of 'assets.json' will also tell which filter
+ // lists to enable by default when uBO is first installed.
+ assetsBootstrapLocation: undefined,
+
+ assetsJsonPath: vAPI.webextFlavor.soup.has('devbuild')
+ ? '/assets/assets.dev.json'
+ : '/assets/assets.json',
+ userFiltersPath: 'user-filters',
+ pslAssetKey: 'public_suffix_list.dat',
+
+ selectedFilterLists: [],
+ availableFilterLists: {},
+ badLists: new Map(),
+
+ inMemoryFilters: [],
+ inMemoryFiltersCompiled: '',
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/974
+ // This can be used to defer filtering decision-making.
+ readyToFilter: false,
+
+ supportStats: {
+ allReadyAfter: '?',
+ maxAssetCacheWait: '?',
+ },
+
+ pageStores: new Map(),
+ pageStoresToken: 0,
+
+ storageQuota: vAPI.storage.QUOTA_BYTES,
+ storageUsed: 0,
+
+ noopFunc: function(){},
+
+ apiErrorCount: 0,
+
+ maybeGoodPopup: {
+ tabId: 0,
+ url: '',
+ },
+
+ epickerArgs: {
+ eprom: null,
+ mouse: false,
+ target: '',
+ zap: false,
+ },
+
+ scriptlets: {},
+
+ cspNoInlineScript: "script-src 'unsafe-eval' * blob: data:",
+ cspNoScripting: 'script-src http: https:',
+ cspNoInlineFont: 'font-src *',
+
+ liveBlockingProfiles: [],
+ blockingProfileColorCache: new Map(),
+ parsedTrustedListPrefixes: [],
+ uiAccentStylesheet: '',
+};
+
+µBlock.isReadyPromise = new Promise(resolve => {
+ µBlock.isReadyResolve = resolve;
+});
+
+µBlock.domainFromHostname = domainFromHostname;
+µBlock.hostnameFromURI = hostnameFromURI;
+
+µBlock.FilteringContext = class extends FilteringContext {
+ duplicate() {
+ return (new µBlock.FilteringContext(this));
+ }
+
+ fromTabId(tabId) {
+ const tabContext = µBlock.tabContextManager.mustLookup(tabId);
+ this.tabOrigin = tabContext.origin;
+ this.tabHostname = tabContext.rootHostname;
+ this.tabDomain = tabContext.rootDomain;
+ this.tabId = tabContext.tabId;
+ return this;
+ }
+
+ maybeFromDocumentURL(documentUrl) {
+ if ( documentUrl === undefined ) { return; }
+ if ( documentUrl.startsWith(this.tabOrigin) ) { return; }
+ this.tabOrigin = originFromURI(µBlock.normalizeTabURL(0, documentUrl));
+ this.tabHostname = hostnameFromURI(this.tabOrigin);
+ this.tabDomain = domainFromHostname(this.tabHostname);
+ }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/459
+ // In case of a request for frame and if ever no context is specified,
+ // assume the origin of the context is the same as the request itself.
+ fromWebrequestDetails(details) {
+ const tabId = details.tabId;
+ this.type = details.type;
+ const isMainFrame = this.itype === this.MAIN_FRAME;
+ if ( isMainFrame && tabId > 0 ) {
+ µBlock.tabContextManager.push(tabId, details.url);
+ }
+ this.fromTabId(tabId); // Must be called AFTER tab context management
+ this.realm = '';
+ this.id = details.requestId;
+ this.setMethod(details.method);
+ this.setURL(details.url);
+ this.aliasURL = details.aliasURL || undefined;
+ this.redirectURL = undefined;
+ this.filter = undefined;
+ if ( this.itype !== this.SUB_FRAME ) {
+ this.docId = details.frameId;
+ this.frameId = -1;
+ } else {
+ this.docId = details.parentFrameId;
+ this.frameId = details.frameId;
+ }
+ if ( this.tabId > 0 ) {
+ if ( this.docId === 0 ) {
+ if ( isMainFrame === false ) {
+ this.maybeFromDocumentURL(details.documentUrl);
+ }
+ this.docOrigin = this.tabOrigin;
+ this.docHostname = this.tabHostname;
+ this.docDomain = this.tabDomain;
+ return this;
+ }
+ if ( details.documentUrl !== undefined ) {
+ this.setDocOriginFromURL(details.documentUrl);
+ return this;
+ }
+ const pageStore = µBlock.pageStoreFromTabId(this.tabId);
+ const docStore = pageStore && pageStore.getFrameStore(this.docId);
+ if ( docStore ) {
+ this.setDocOriginFromURL(docStore.rawURL);
+ } else {
+ this.setDocOrigin(this.tabOrigin);
+ }
+ return this;
+ }
+ if ( details.documentUrl !== undefined ) {
+ const origin = originFromURI(
+ µBlock.normalizeTabURL(0, details.documentUrl)
+ );
+ this.setDocOrigin(origin).setTabOrigin(origin);
+ return this;
+ }
+ const origin = (this.itype & this.FRAME_ANY) !== 0
+ ? originFromURI(this.url)
+ : this.tabOrigin;
+ this.setDocOrigin(origin).setTabOrigin(origin);
+ return this;
+ }
+
+ getTabOrigin() {
+ if ( this.tabOrigin === undefined ) {
+ const tabContext = µBlock.tabContextManager.mustLookup(this.tabId);
+ this.tabOrigin = tabContext.origin;
+ this.tabHostname = tabContext.rootHostname;
+ this.tabDomain = tabContext.rootDomain;
+ }
+ return super.getTabOrigin();
+ }
+
+ toLogger() {
+ const details = {
+ id: this.id,
+ tstamp: Date.now(),
+ realm: this.realm,
+ method: this.getMethodName(),
+ type: this.stype,
+ tabId: this.tabId,
+ tabDomain: this.getTabDomain(),
+ tabHostname: this.getTabHostname(),
+ docDomain: this.getDocDomain(),
+ docHostname: this.getDocHostname(),
+ domain: this.getDomain(),
+ hostname: this.getHostname(),
+ url: this.url,
+ aliasURL: this.aliasURL,
+ filter: undefined,
+ };
+ // Many filters may have been applied to the current context
+ if ( Array.isArray(this.filter) === false ) {
+ details.filter = this.filter;
+ return logger.writeOne(details);
+ }
+ for ( const filter of this.filter ) {
+ details.filter = filter;
+ logger.writeOne(details);
+ }
+ }
+};
+
+µBlock.filteringContext = new µBlock.FilteringContext();
+
+self.µBlock = µBlock;
+
+/******************************************************************************/
+
+export default µBlock;
diff --git a/src/js/base64-custom.js b/src/js/base64-custom.js
new file mode 100644
index 0000000..34141b8
--- /dev/null
+++ b/src/js/base64-custom.js
@@ -0,0 +1,246 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+// Custom base64 codecs. These codecs are meant to encode/decode typed arrays
+// to/from strings.
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/461
+// Provide a fallback encoding for Chromium 59 and less by issuing a plain
+// JSON string. The fallback can be removed once min supported version is
+// above 59.
+
+// TODO: rename µBlock.base64 to µBlock.SparseBase64, now that
+// µBlock.DenseBase64 has been introduced.
+// TODO: Should no longer need to test presence of TextEncoder/TextDecoder.
+
+const valToDigit = new Uint8Array(64);
+const digitToVal = new Uint8Array(128);
+{
+ const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz@%';
+ for ( let i = 0, n = chars.length; i < n; i++ ) {
+ const c = chars.charCodeAt(i);
+ valToDigit[i] = c;
+ digitToVal[c] = i;
+ }
+}
+
+// The sparse base64 codec is best for buffers which contains a lot of
+// small u32 integer values. Those small u32 integer values are better
+// represented with stringified integers, because small values can be
+// represented with fewer bits than the usual base64 codec. For example,
+// 0 become '0 ', i.e. 16 bits instead of 48 bits with official base64
+// codec.
+
+const sparseBase64 = {
+ magic: 'Base64_1',
+
+ encode: function(arrbuf, arrlen) {
+ const inputLength = (arrlen + 3) >>> 2;
+ const inbuf = new Uint32Array(arrbuf, 0, inputLength);
+ const outputLength = this.magic.length + 7 + inputLength * 7;
+ const outbuf = new Uint8Array(outputLength);
+ // magic bytes
+ let j = 0;
+ for ( let i = 0; i < this.magic.length; i++ ) {
+ outbuf[j++] = this.magic.charCodeAt(i);
+ }
+ // array size
+ let v = inputLength;
+ do {
+ outbuf[j++] = valToDigit[v & 0b111111];
+ v >>>= 6;
+ } while ( v !== 0 );
+ outbuf[j++] = 0x20 /* ' ' */;
+ // array content
+ for ( let i = 0; i < inputLength; i++ ) {
+ v = inbuf[i];
+ do {
+ outbuf[j++] = valToDigit[v & 0b111111];
+ v >>>= 6;
+ } while ( v !== 0 );
+ outbuf[j++] = 0x20 /* ' ' */;
+ }
+ if ( typeof TextDecoder === 'undefined' ) {
+ return JSON.stringify(
+ Array.from(new Uint32Array(outbuf.buffer, 0, j >>> 2))
+ );
+ }
+ const textDecoder = new TextDecoder();
+ return textDecoder.decode(new Uint8Array(outbuf.buffer, 0, j));
+ },
+
+ decode: function(instr, arrbuf) {
+ if ( instr.charCodeAt(0) === 0x5B /* '[' */ ) {
+ const inbuf = JSON.parse(instr);
+ if ( arrbuf instanceof ArrayBuffer === false ) {
+ return new Uint32Array(inbuf);
+ }
+ const outbuf = new Uint32Array(arrbuf);
+ outbuf.set(inbuf);
+ return outbuf;
+ }
+ if ( instr.startsWith(this.magic) === false ) {
+ throw new Error('Invalid µBlock.base64 encoding');
+ }
+ const inputLength = instr.length;
+ const outputLength = this.decodeSize(instr) >> 2;
+ const outbuf = arrbuf instanceof ArrayBuffer === false
+ ? new Uint32Array(outputLength)
+ : new Uint32Array(arrbuf);
+ let i = instr.indexOf(' ', this.magic.length) + 1;
+ if ( i === -1 ) {
+ throw new Error('Invalid µBlock.base64 encoding');
+ }
+ // array content
+ let j = 0;
+ for (;;) {
+ if ( j === outputLength || i >= inputLength ) { break; }
+ let v = 0, l = 0;
+ for (;;) {
+ const c = instr.charCodeAt(i++);
+ if ( c === 0x20 /* ' ' */ ) { break; }
+ v += digitToVal[c] << l;
+ l += 6;
+ }
+ outbuf[j++] = v;
+ }
+ if ( i < inputLength || j < outputLength ) {
+ throw new Error('Invalid µBlock.base64 encoding');
+ }
+ return outbuf;
+ },
+
+ decodeSize: function(instr) {
+ if ( instr.startsWith(this.magic) === false ) { return 0; }
+ let v = 0, l = 0, i = this.magic.length;
+ for (;;) {
+ const c = instr.charCodeAt(i++);
+ if ( c === 0x20 /* ' ' */ ) { break; }
+ v += digitToVal[c] << l;
+ l += 6;
+ }
+ return v << 2;
+ },
+};
+
+// The dense base64 codec is best for typed buffers which values are
+// more random. For example, buffer contents as a result of compression
+// contain less repetitive values and thus the content is more
+// random-looking.
+
+// TODO: Investigate that in Firefox, creating a new Uint8Array from the
+// ArrayBuffer fails, the content of the resulting Uint8Array is
+// non-sensical. WASM-related?
+
+const denseBase64 = {
+ magic: 'DenseBase64_1',
+
+ encode: function(input) {
+ const m = input.length % 3;
+ const n = input.length - m;
+ let outputLength = n / 3 * 4;
+ if ( m !== 0 ) {
+ outputLength += m + 1;
+ }
+ const output = new Uint8Array(outputLength);
+ let j = 0;
+ for ( let i = 0; i < n; i += 3) {
+ const i1 = input[i+0];
+ const i2 = input[i+1];
+ const i3 = input[i+2];
+ output[j+0] = valToDigit[ i1 >>> 2];
+ output[j+1] = valToDigit[i1 << 4 & 0b110000 | i2 >>> 4];
+ output[j+2] = valToDigit[i2 << 2 & 0b111100 | i3 >>> 6];
+ output[j+3] = valToDigit[i3 & 0b111111 ];
+ j += 4;
+ }
+ if ( m !== 0 ) {
+ const i1 = input[n];
+ output[j+0] = valToDigit[i1 >>> 2];
+ if ( m === 1 ) { // 1 value
+ output[j+1] = valToDigit[i1 << 4 & 0b110000];
+ } else { // 2 values
+ const i2 = input[n+1];
+ output[j+1] = valToDigit[i1 << 4 & 0b110000 | i2 >>> 4];
+ output[j+2] = valToDigit[i2 << 2 & 0b111100 ];
+ }
+ }
+ const textDecoder = new TextDecoder();
+ const b64str = textDecoder.decode(output);
+ return this.magic + b64str;
+ },
+
+ decode: function(instr, arrbuf) {
+ if ( instr.startsWith(this.magic) === false ) {
+ throw new Error('Invalid µBlock.denseBase64 encoding');
+ }
+ const outputLength = this.decodeSize(instr);
+ const outbuf = arrbuf instanceof ArrayBuffer === false
+ ? new Uint8Array(outputLength)
+ : new Uint8Array(arrbuf);
+ const inputLength = instr.length - this.magic.length;
+ let i = this.magic.length;
+ let j = 0;
+ const m = inputLength & 3;
+ const n = i + inputLength - m;
+ while ( i < n ) {
+ const i1 = digitToVal[instr.charCodeAt(i+0)];
+ const i2 = digitToVal[instr.charCodeAt(i+1)];
+ const i3 = digitToVal[instr.charCodeAt(i+2)];
+ const i4 = digitToVal[instr.charCodeAt(i+3)];
+ i += 4;
+ outbuf[j+0] = i1 << 2 | i2 >>> 4;
+ outbuf[j+1] = i2 << 4 & 0b11110000 | i3 >>> 2;
+ outbuf[j+2] = i3 << 6 & 0b11000000 | i4;
+ j += 3;
+ }
+ if ( m !== 0 ) {
+ const i1 = digitToVal[instr.charCodeAt(i+0)];
+ const i2 = digitToVal[instr.charCodeAt(i+1)];
+ outbuf[j+0] = i1 << 2 | i2 >>> 4;
+ if ( m === 3 ) {
+ const i3 = digitToVal[instr.charCodeAt(i+2)];
+ outbuf[j+1] = i2 << 4 & 0b11110000 | i3 >>> 2;
+ }
+ }
+ return outbuf;
+ },
+
+ decodeSize: function(instr) {
+ if ( instr.startsWith(this.magic) === false ) { return 0; }
+ const inputLength = instr.length - this.magic.length;
+ const m = inputLength & 3;
+ const n = inputLength - m;
+ let outputLength = (n >>> 2) * 3;
+ if ( m !== 0 ) {
+ outputLength += m - 1;
+ }
+ return outputLength;
+ },
+};
+
+/******************************************************************************/
+
+export { denseBase64, sparseBase64 };
diff --git a/src/js/benchmarks.js b/src/js/benchmarks.js
new file mode 100644
index 0000000..8792f03
--- /dev/null
+++ b/src/js/benchmarks.js
@@ -0,0 +1,421 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import cosmeticFilteringEngine from './cosmetic-filtering.js';
+import io from './assets.js';
+import scriptletFilteringEngine from './scriptlet-filtering.js';
+import staticNetFilteringEngine from './static-net-filtering.js';
+import µb from './background.js';
+import webRequest from './traffic.js';
+import { FilteringContext } from './filtering-context.js';
+import { LineIterator } from './text-utils.js';
+import { sessionFirewall } from './filtering-engines.js';
+
+import {
+ domainFromHostname,
+ entityFromDomain,
+ hostnameFromURI,
+} from './uri-utils.js';
+
+/******************************************************************************/
+
+// The requests.json.gz file can be downloaded from:
+// https://cdn.cliqz.com/adblocking/requests_top500.json.gz
+//
+// Which is linked from:
+// https://whotracks.me/blog/adblockers_performance_study.html
+//
+// Copy the file into ./tmp/requests.json.gz
+//
+// If the file is present when you build uBO using `make-[target].sh` from
+// the shell, the resulting package will have `./assets/requests.json`, which
+// will be looked-up by the method below to launch a benchmark session.
+//
+// From uBO's dev console, launch the benchmark:
+// µBlock.staticNetFilteringEngine.benchmark();
+//
+// The usual browser dev tools can be used to obtain useful profiling
+// data, i.e. start the profiler, call the benchmark method from the
+// console, then stop the profiler when it completes.
+//
+// Keep in mind that the measurements at the blog post above where obtained
+// with ONLY EasyList. The CPU reportedly used was:
+// https://www.cpubenchmark.net/cpu.php?cpu=Intel+Core+i7-6600U+%40+2.60GHz&id=2608
+//
+// Rename ./tmp/requests.json.gz to something else if you no longer want
+// ./assets/requests.json in the build.
+
+const loadBenchmarkDataset = (( ) => {
+ let datasetPromise;
+
+ const ttlTimer = vAPI.defer.create(( ) => {
+ datasetPromise = undefined;
+ });
+
+ return function() {
+ ttlTimer.offon({ min: 5 });
+
+ if ( datasetPromise !== undefined ) {
+ return datasetPromise;
+ }
+
+ const datasetURL = µb.hiddenSettings.benchmarkDatasetURL;
+ if ( datasetURL === 'unset' ) {
+ console.info(`No benchmark dataset available.`);
+ return Promise.resolve();
+ }
+ console.info(`Loading benchmark dataset...`);
+ datasetPromise = io.fetchText(datasetURL).then(details => {
+ console.info(`Parsing benchmark dataset...`);
+ let requests = [];
+ if ( details.content.startsWith('[') ) {
+ try {
+ requests = JSON.parse(details.content);
+ } catch(ex) {
+ }
+ } else {
+ const lineIter = new LineIterator(details.content);
+ const parsed = [];
+ while ( lineIter.eot() === false ) {
+ const line = lineIter.next().trim();
+ if ( line === '' ) { continue; }
+ try {
+ parsed.push(JSON.parse(line));
+ } catch(ex) {
+ parsed.length = 0;
+ break;
+ }
+ }
+ requests = parsed;
+ }
+ if ( requests.length === 0 ) { return; }
+ const out = [];
+ for ( const request of requests ) {
+ if ( request instanceof Object === false ) { continue; }
+ if ( !request.frameUrl || !request.url ) { continue; }
+ if ( request.cpt === 'document' ) {
+ request.cpt = 'main_frame';
+ } else if ( request.cpt === 'xhr' ) {
+ request.cpt = 'xmlhttprequest';
+ }
+ out.push(request);
+ }
+ return out;
+ }).catch(details => {
+ console.info(`Not found: ${details.url}`);
+ datasetPromise = undefined;
+ });
+
+ return datasetPromise;
+ };
+})();
+
+/******************************************************************************/
+
+// action: 1=test
+
+µb.benchmarkStaticNetFiltering = async function(options = {}) {
+ const { target, redirectEngine } = options;
+
+ const requests = await loadBenchmarkDataset();
+ if ( Array.isArray(requests) === false || requests.length === 0 ) {
+ const text = 'No dataset found to benchmark';
+ console.info(text);
+ return text;
+ }
+
+ console.info(`Benchmarking staticNetFilteringEngine.matchRequest()...`);
+
+ const fctxt = new FilteringContext();
+
+ if ( typeof target === 'number' ) {
+ const request = requests[target];
+ fctxt.setURL(request.url);
+ fctxt.setDocOriginFromURL(request.frameUrl);
+ fctxt.setType(request.cpt);
+ const r = staticNetFilteringEngine.matchRequest(fctxt);
+ console.info(`Result=${r}:`);
+ console.info(`\ttype=${fctxt.type}`);
+ console.info(`\turl=${fctxt.url}`);
+ console.info(`\tdocOrigin=${fctxt.getDocOrigin()}`);
+ if ( r !== 0 ) {
+ console.info(staticNetFilteringEngine.toLogData());
+ }
+ return;
+ }
+
+ const t0 = performance.now();
+ let matchCount = 0;
+ let blockCount = 0;
+ let allowCount = 0;
+ let redirectCount = 0;
+ let removeparamCount = 0;
+ let cspCount = 0;
+ let permissionsCount = 0;
+ let replaceCount = 0;
+ for ( let i = 0; i < requests.length; i++ ) {
+ const request = requests[i];
+ fctxt.setURL(request.url);
+ fctxt.setDocOriginFromURL(request.frameUrl);
+ fctxt.setType(request.cpt);
+ staticNetFilteringEngine.redirectURL = undefined;
+ const r = staticNetFilteringEngine.matchRequest(fctxt);
+ matchCount += 1;
+ if ( r === 1 ) { blockCount += 1; }
+ else if ( r === 2 ) { allowCount += 1; }
+ if ( r !== 1 ) {
+ if ( staticNetFilteringEngine.transformRequest(fctxt) ) {
+ redirectCount += 1;
+ }
+ if ( fctxt.redirectURL !== undefined && staticNetFilteringEngine.hasQuery(fctxt) ) {
+ if ( staticNetFilteringEngine.filterQuery(fctxt, 'removeparam') ) {
+ removeparamCount += 1;
+ }
+ }
+ if ( fctxt.type === 'main_frame' || fctxt.type === 'sub_frame' ) {
+ if ( staticNetFilteringEngine.matchAndFetchModifiers(fctxt, 'csp') ) {
+ cspCount += 1;
+ }
+ if ( staticNetFilteringEngine.matchAndFetchModifiers(fctxt, 'permissions') ) {
+ permissionsCount += 1;
+ }
+ }
+ staticNetFilteringEngine.matchHeaders(fctxt, []);
+ if ( staticNetFilteringEngine.matchAndFetchModifiers(fctxt, 'replace') ) {
+ replaceCount += 1;
+ }
+ } else if ( redirectEngine !== undefined ) {
+ if ( staticNetFilteringEngine.redirectRequest(redirectEngine, fctxt) ) {
+ redirectCount += 1;
+ }
+ }
+ }
+ const t1 = performance.now();
+ const dur = t1 - t0;
+
+ const output = [
+ 'Benchmarked static network filtering engine:',
+ `\tEvaluated ${matchCount} match calls in ${dur.toFixed(0)} ms`,
+ `\tAverage: ${(dur / matchCount).toFixed(3)} ms per request`,
+ `\tNot blocked: ${matchCount - blockCount - allowCount}`,
+ `\tBlocked: ${blockCount}`,
+ `\tUnblocked: ${allowCount}`,
+ `\tredirect=: ${redirectCount}`,
+ `\tremoveparam=: ${removeparamCount}`,
+ `\tcsp=: ${cspCount}`,
+ `\tpermissions=: ${permissionsCount}`,
+ `\treplace=: ${replaceCount}`,
+ ];
+ const s = output.join('\n');
+ console.info(s);
+ return s;
+};
+
+/******************************************************************************/
+
+µb.tokenHistograms = async function() {
+ const requests = await loadBenchmarkDataset();
+ if ( Array.isArray(requests) === false || requests.length === 0 ) {
+ console.info('No requests found to benchmark');
+ return;
+ }
+
+ console.info(`Computing token histograms...`);
+
+ const fctxt = new FilteringContext();
+ const missTokenMap = new Map();
+ const hitTokenMap = new Map();
+ const reTokens = /[0-9a-z%]{2,}/g;
+
+ for ( let i = 0; i < requests.length; i++ ) {
+ const request = requests[i];
+ fctxt.setURL(request.url);
+ fctxt.setDocOriginFromURL(request.frameUrl);
+ fctxt.setType(request.cpt);
+ const r = staticNetFilteringEngine.matchRequest(fctxt);
+ for ( let [ keyword ] of request.url.toLowerCase().matchAll(reTokens) ) {
+ const token = keyword.slice(0, 7);
+ if ( r === 0 ) {
+ missTokenMap.set(token, (missTokenMap.get(token) || 0) + 1);
+ } else if ( r === 1 ) {
+ hitTokenMap.set(token, (hitTokenMap.get(token) || 0) + 1);
+ }
+ }
+ }
+ const customSort = (a, b) => b[1] - a[1];
+ const topmisses = Array.from(missTokenMap).sort(customSort).slice(0, 100);
+ for ( const [ token ] of topmisses ) {
+ hitTokenMap.delete(token);
+ }
+ const tophits = Array.from(hitTokenMap).sort(customSort).slice(0, 100);
+ console.info('Misses:', JSON.stringify(topmisses));
+ console.info('Hits:', JSON.stringify(tophits));
+};
+
+/******************************************************************************/
+
+µb.benchmarkDynamicNetFiltering = async function() {
+ const requests = await loadBenchmarkDataset();
+ if ( Array.isArray(requests) === false || requests.length === 0 ) {
+ console.info('No requests found to benchmark');
+ return;
+ }
+ console.info(`Benchmarking sessionFirewall.evaluateCellZY()...`);
+ const fctxt = new FilteringContext();
+ const t0 = performance.now();
+ for ( const request of requests ) {
+ fctxt.setURL(request.url);
+ fctxt.setTabOriginFromURL(request.frameUrl);
+ fctxt.setType(request.cpt);
+ sessionFirewall.evaluateCellZY(
+ fctxt.getTabHostname(),
+ fctxt.getHostname(),
+ fctxt.type
+ );
+ }
+ const t1 = performance.now();
+ const dur = t1 - t0;
+ console.info(`Evaluated ${requests.length} requests in ${dur.toFixed(0)} ms`);
+ console.info(`\tAverage: ${(dur / requests.length).toFixed(3)} ms per request`);
+};
+
+/******************************************************************************/
+
+µb.benchmarkCosmeticFiltering = async function() {
+ const requests = await loadBenchmarkDataset();
+ if ( Array.isArray(requests) === false || requests.length === 0 ) {
+ console.info('No requests found to benchmark');
+ return;
+ }
+ console.info('Benchmarking cosmeticFilteringEngine.retrieveSpecificSelectors()...');
+ const details = {
+ tabId: undefined,
+ frameId: undefined,
+ hostname: '',
+ domain: '',
+ entity: '',
+ };
+ const options = {
+ noSpecificCosmeticFiltering: false,
+ noGenericCosmeticFiltering: false,
+ };
+ let count = 0;
+ const t0 = performance.now();
+ for ( let i = 0; i < requests.length; i++ ) {
+ const request = requests[i];
+ if ( request.cpt !== 'main_frame' ) { continue; }
+ count += 1;
+ details.hostname = hostnameFromURI(request.url);
+ details.domain = domainFromHostname(details.hostname);
+ details.entity = entityFromDomain(details.domain);
+ void cosmeticFilteringEngine.retrieveSpecificSelectors(details, options);
+ }
+ const t1 = performance.now();
+ const dur = t1 - t0;
+ console.info(`Evaluated ${count} requests in ${dur.toFixed(0)} ms`);
+ console.info(`\tAverage: ${(dur / count).toFixed(3)} ms per request`);
+};
+
+/******************************************************************************/
+
+µb.benchmarkScriptletFiltering = async function() {
+ const requests = await loadBenchmarkDataset();
+ if ( Array.isArray(requests) === false || requests.length === 0 ) {
+ console.info('No requests found to benchmark');
+ return;
+ }
+ console.info('Benchmarking scriptletFilteringEngine.retrieve()...');
+ const details = {
+ domain: '',
+ entity: '',
+ hostname: '',
+ tabId: 0,
+ url: '',
+ };
+ let count = 0;
+ const t0 = performance.now();
+ for ( let i = 0; i < requests.length; i++ ) {
+ const request = requests[i];
+ if ( request.cpt !== 'main_frame' ) { continue; }
+ count += 1;
+ details.url = request.url;
+ details.hostname = hostnameFromURI(request.url);
+ details.domain = domainFromHostname(details.hostname);
+ details.entity = entityFromDomain(details.domain);
+ void scriptletFilteringEngine.retrieve(details);
+ }
+ const t1 = performance.now();
+ const dur = t1 - t0;
+ console.info(`Evaluated ${count} requests in ${dur.toFixed(0)} ms`);
+ console.info(`\tAverage: ${(dur / count).toFixed(3)} ms per request`);
+};
+
+/******************************************************************************/
+
+µb.benchmarkOnBeforeRequest = async function() {
+ const requests = await loadBenchmarkDataset();
+ if ( Array.isArray(requests) === false || requests.length === 0 ) {
+ console.info('No requests found to benchmark');
+ return;
+ }
+ const mappedTypes = new Map([
+ [ 'document', 'main_frame' ],
+ [ 'subdocument', 'sub_frame' ],
+ ]);
+ console.info('webRequest.onBeforeRequest()...');
+ const t0 = self.performance.now();
+ const promises = [];
+ const details = {
+ documentUrl: '',
+ tabId: -1,
+ parentFrameId: -1,
+ frameId: 0,
+ type: '',
+ url: '',
+ };
+ for ( const request of requests ) {
+ details.documentUrl = request.frameUrl;
+ details.tabId = -1;
+ details.parentFrameId = -1;
+ details.frameId = 0;
+ details.type = mappedTypes.get(request.cpt) || request.cpt;
+ details.url = request.url;
+ if ( details.type === 'main_frame' ) { continue; }
+ promises.push(webRequest.onBeforeRequest(details));
+ }
+ return Promise.all(promises).then(results => {
+ let blockCount = 0;
+ for ( const r of results ) {
+ if ( r !== undefined ) { blockCount += 1; }
+ }
+ const t1 = self.performance.now();
+ const dur = t1 - t0;
+ console.info(`Evaluated ${requests.length} requests in ${dur.toFixed(0)} ms`);
+ console.info(`\tBlocked ${blockCount} requests`);
+ console.info(`\tAverage: ${(dur / requests.length).toFixed(3)} ms per request`);
+ });
+};
+
+/******************************************************************************/
diff --git a/src/js/biditrie.js b/src/js/biditrie.js
new file mode 100644
index 0000000..d0f64ee
--- /dev/null
+++ b/src/js/biditrie.js
@@ -0,0 +1,947 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* globals WebAssembly, vAPI */
+
+'use strict';
+
+/*******************************************************************************
+
+ A BidiTrieContainer is mostly a large buffer in which distinct but related
+ tries are stored. The memory layout of the buffer is as follow:
+
+ 0-2047: haystack section
+ 2048-2051: number of significant characters in the haystack
+ 2052-2055: offset to start of trie data section (=> trie0)
+ 2056-2059: offset to end of trie data section (=> trie1)
+ 2060-2063: offset to start of character data section (=> char0)
+ 2064-2067: offset to end of character data section (=> char1)
+ 2068: start of trie data section
+
+ +--------------+
+ Normal cell: | And | If "Segment info" matches:
+ (aka CELL) +--------------+ Goto "And"
+ | Or | Else
+ +--------------+ Goto "Or"
+ | Segment info |
+ +--------------+
+
+ +--------------+
+ Boundary cell: | Right And | "Right And" and/or "Left And"
+ (aka BCELL) +--------------+ can be 0 in last-segment condition.
+ | Left And |
+ +--------------+
+ | 0 |
+ +--------------+
+
+ Given following filters and assuming token is "ad" for all of them:
+
+ -images/ad-
+ /google_ad.
+ /images_ad.
+ _images/ad.
+
+ We get the following internal representation:
+
+ +-----------+ +-----------+ +---+
+ | |---->| |---->| 0 |
+ +-----------+ +-----------+ +---+ +-----------+
+ | 0 | +--| | | |---->| 0 |
+ +-----------+ | +-----------+ +---+ +-----------+
+ | ad | | | - | | 0 | | 0 |
+ +-----------+ | +-----------+ +---+ +-----------+
+ | | -images/ |
+ | +-----------+ +---+ +-----------+
+ +->| |---->| 0 |
+ +-----------+ +---+ +-----------+ +-----------+
+ | 0 | | |---->| |---->| 0 |
+ +-----------+ +---+ +-----------+ +-----------+
+ | . | | 0 | +--| | +--| |
+ +-----------+ +---+ | +-----------+ | +-----------+
+ | | _ | | | /google |
+ | +-----------+ | +-----------+
+ | |
+ | | +-----------+
+ | +->| 0 |
+ | +-----------+
+ | | 0 |
+ | +-----------+
+ | | /images |
+ | +-----------+
+ |
+ | +-----------+
+ +->| 0 |
+ +-----------+
+ | 0 |
+ +-----------+
+ | _images/ |
+ +-----------+
+
+*/
+
+const PAGE_SIZE = 65536*2;
+const HAYSTACK_START = 0;
+const HAYSTACK_SIZE = 2048; // i32 / i8
+const HAYSTACK_SIZE_SLOT = HAYSTACK_SIZE >>> 2; // 512 / 2048
+const TRIE0_SLOT = HAYSTACK_SIZE_SLOT + 1; // 513 / 2052
+const TRIE1_SLOT = HAYSTACK_SIZE_SLOT + 2; // 514 / 2056
+const CHAR0_SLOT = HAYSTACK_SIZE_SLOT + 3; // 515 / 2060
+const CHAR1_SLOT = HAYSTACK_SIZE_SLOT + 4; // 516 / 2064
+const RESULT_L_SLOT = HAYSTACK_SIZE_SLOT + 5; // 517 / 2068
+const RESULT_R_SLOT = HAYSTACK_SIZE_SLOT + 6; // 518 / 2072
+const RESULT_IU_SLOT = HAYSTACK_SIZE_SLOT + 7; // 519 / 2076
+const TRIE0_START = HAYSTACK_SIZE_SLOT + 8 << 2; // 2080
+
+const CELL_BYTE_LENGTH = 12;
+const MIN_FREE_CELL_BYTE_LENGTH = CELL_BYTE_LENGTH * 8;
+
+const CELL_AND = 0;
+const CELL_OR = 1;
+const SEGMENT_INFO = 2;
+const BCELL_NEXT_AND = 0;
+const BCELL_ALT_AND = 1;
+const BCELL_EXTRA = 2;
+const BCELL_EXTRA_MAX = 0x00FFFFFF;
+
+const toSegmentInfo = (aL, l, r) => ((r - l) << 24) | (aL + l);
+const roundToPageSize = v => (v + PAGE_SIZE-1) & ~(PAGE_SIZE-1);
+
+
+class BidiTrieContainer {
+
+ constructor(extraHandler) {
+ const len = PAGE_SIZE * 4;
+ this.buf8 = new Uint8Array(len);
+ this.buf32 = new Uint32Array(this.buf8.buffer);
+ this.buf32[TRIE0_SLOT] = TRIE0_START;
+ this.buf32[TRIE1_SLOT] = this.buf32[TRIE0_SLOT];
+ this.buf32[CHAR0_SLOT] = len >>> 1;
+ this.buf32[CHAR1_SLOT] = this.buf32[CHAR0_SLOT];
+ this.haystack = this.buf8.subarray(
+ HAYSTACK_START,
+ HAYSTACK_START + HAYSTACK_SIZE
+ );
+ this.extraHandler = extraHandler;
+ this.textDecoder = null;
+ this.wasmMemory = null;
+
+ this.lastStored = '';
+ this.lastStoredLen = this.lastStoredIndex = 0;
+ }
+
+ //--------------------------------------------------------------------------
+ // Public methods
+ //--------------------------------------------------------------------------
+
+ get haystackLen() {
+ return this.buf32[HAYSTACK_SIZE_SLOT];
+ }
+
+ set haystackLen(v) {
+ this.buf32[HAYSTACK_SIZE_SLOT] = v;
+ }
+
+ reset(details) {
+ if (
+ details instanceof Object &&
+ typeof details.byteLength === 'number' &&
+ typeof details.char0 === 'number'
+ ) {
+ if ( details.byteLength > this.buf8.byteLength ) {
+ this.reallocateBuf(details.byteLength);
+ }
+ this.buf32[CHAR0_SLOT] = details.char0;
+ }
+ this.buf32[TRIE1_SLOT] = this.buf32[TRIE0_SLOT];
+ this.buf32[CHAR1_SLOT] = this.buf32[CHAR0_SLOT];
+
+ this.lastStored = '';
+ this.lastStoredLen = this.lastStoredIndex = 0;
+ }
+
+ createTrie() {
+ // grow buffer if needed
+ if ( (this.buf32[CHAR0_SLOT] - this.buf32[TRIE1_SLOT]) < CELL_BYTE_LENGTH ) {
+ this.growBuf(CELL_BYTE_LENGTH, 0);
+ }
+ const iroot = this.buf32[TRIE1_SLOT] >>> 2;
+ this.buf32[TRIE1_SLOT] += CELL_BYTE_LENGTH;
+ this.buf32[iroot+CELL_OR] = 0;
+ this.buf32[iroot+CELL_AND] = 0;
+ this.buf32[iroot+SEGMENT_INFO] = 0;
+ return iroot;
+ }
+
+ matches(icell, ai) {
+ const buf32 = this.buf32;
+ const buf8 = this.buf8;
+ const char0 = buf32[CHAR0_SLOT];
+ const aR = buf32[HAYSTACK_SIZE_SLOT];
+ let al = ai, x = 0, y = 0;
+ for (;;) {
+ x = buf8[al];
+ al += 1;
+ // find matching segment
+ for (;;) {
+ y = buf32[icell+SEGMENT_INFO];
+ let bl = char0 + (y & 0x00FFFFFF);
+ if ( buf8[bl] === x ) {
+ y = (y >>> 24) - 1;
+ if ( y !== 0 ) {
+ x = al + y;
+ if ( x > aR ) { return 0; }
+ for (;;) {
+ bl += 1;
+ if ( buf8[bl] !== buf8[al] ) { return 0; }
+ al += 1;
+ if ( al === x ) { break; }
+ }
+ }
+ break;
+ }
+ icell = buf32[icell+CELL_OR];
+ if ( icell === 0 ) { return 0; }
+ }
+ // next segment
+ icell = buf32[icell+CELL_AND];
+ x = buf32[icell+BCELL_EXTRA];
+ if ( x <= BCELL_EXTRA_MAX ) {
+ if ( x !== 0 && this.matchesExtra(ai, al, x) !== 0 ) {
+ return 1;
+ }
+ x = buf32[icell+BCELL_ALT_AND];
+ if ( x !== 0 && this.matchesLeft(x, ai, al) !== 0 ) {
+ return 1;
+ }
+ icell = buf32[icell+BCELL_NEXT_AND];
+ if ( icell === 0 ) { return 0; }
+ }
+ if ( al === aR ) { return 0; }
+ }
+ return 0; // eslint-disable-line no-unreachable
+ }
+
+ matchesLeft(icell, ar, r) {
+ const buf32 = this.buf32;
+ const buf8 = this.buf8;
+ const char0 = buf32[CHAR0_SLOT];
+ let x = 0, y = 0;
+ for (;;) {
+ if ( ar === 0 ) { return 0; }
+ ar -= 1;
+ x = buf8[ar];
+ // find first segment with a first-character match
+ for (;;) {
+ y = buf32[icell+SEGMENT_INFO];
+ let br = char0 + (y & 0x00FFFFFF);
+ y = (y >>> 24) - 1;
+ br += y;
+ if ( buf8[br] === x ) { // all characters in segment must match
+ if ( y !== 0 ) {
+ x = ar - y;
+ if ( x < 0 ) { return 0; }
+ for (;;) {
+ ar -= 1; br -= 1;
+ if ( buf8[ar] !== buf8[br] ) { return 0; }
+ if ( ar === x ) { break; }
+ }
+ }
+ break;
+ }
+ icell = buf32[icell+CELL_OR];
+ if ( icell === 0 ) { return 0; }
+ }
+ // next segment
+ icell = buf32[icell+CELL_AND];
+ x = buf32[icell+BCELL_EXTRA];
+ if ( x <= BCELL_EXTRA_MAX ) {
+ if ( x !== 0 && this.matchesExtra(ar, r, x) !== 0 ) {
+ return 1;
+ }
+ icell = buf32[icell+BCELL_NEXT_AND];
+ if ( icell === 0 ) { return 0; }
+ }
+ }
+ return 0; // eslint-disable-line no-unreachable
+ }
+
+ matchesExtra(l, r, ix) {
+ let iu = 0;
+ if ( ix !== 1 ) {
+ iu = this.extraHandler(l, r, ix);
+ if ( iu === 0 ) { return 0; }
+ } else {
+ iu = -1;
+ }
+ this.buf32[RESULT_IU_SLOT] = iu;
+ this.buf32[RESULT_L_SLOT] = l;
+ this.buf32[RESULT_R_SLOT] = r;
+ return 1;
+ }
+
+ get $l() { return this.buf32[RESULT_L_SLOT] | 0; }
+ get $r() { return this.buf32[RESULT_R_SLOT] | 0; }
+ get $iu() { return this.buf32[RESULT_IU_SLOT] | 0; }
+
+ add(iroot, aL0, n, pivot = 0) {
+ const aR = n;
+ if ( aR === 0 ) { return 0; }
+ // Grow buffer if needed. The characters are already in our character
+ // data buffer, so we do not need to grow character data buffer.
+ if (
+ (this.buf32[CHAR0_SLOT] - this.buf32[TRIE1_SLOT]) <
+ MIN_FREE_CELL_BYTE_LENGTH
+ ) {
+ this.growBuf(MIN_FREE_CELL_BYTE_LENGTH, 0);
+ }
+ const buf32 = this.buf32;
+ const char0 = buf32[CHAR0_SLOT];
+ let icell = iroot;
+ let aL = char0 + aL0;
+ // special case: first node in trie
+ if ( buf32[icell+SEGMENT_INFO] === 0 ) {
+ buf32[icell+SEGMENT_INFO] = toSegmentInfo(aL0, pivot, aR);
+ return this.addLeft(icell, aL0, pivot);
+ }
+ const buf8 = this.buf8;
+ let al = pivot;
+ let inext;
+ // find a matching cell: move down
+ for (;;) {
+ const binfo = buf32[icell+SEGMENT_INFO];
+ // length of segment
+ const bR = binfo >>> 24;
+ // skip boundary cells
+ if ( bR === 0 ) {
+ icell = buf32[icell+BCELL_NEXT_AND];
+ continue;
+ }
+ let bl = char0 + (binfo & 0x00FFFFFF);
+ // if first character is no match, move to next descendant
+ if ( buf8[bl] !== buf8[aL+al] ) {
+ inext = buf32[icell+CELL_OR];
+ if ( inext === 0 ) {
+ inext = this.addCell(0, 0, toSegmentInfo(aL0, al, aR));
+ buf32[icell+CELL_OR] = inext;
+ return this.addLeft(inext, aL0, pivot);
+ }
+ icell = inext;
+ continue;
+ }
+ // 1st character was tested
+ let bi = 1;
+ al += 1;
+ // find 1st mismatch in rest of segment
+ if ( bR !== 1 ) {
+ for (;;) {
+ if ( bi === bR ) { break; }
+ if ( al === aR ) { break; }
+ if ( buf8[bl+bi] !== buf8[aL+al] ) { break; }
+ bi += 1;
+ al += 1;
+ }
+ }
+ // all segment characters matched
+ if ( bi === bR ) {
+ // needle remainder: no
+ if ( al === aR ) {
+ return this.addLeft(icell, aL0, pivot);
+ }
+ // needle remainder: yes
+ inext = buf32[icell+CELL_AND];
+ if ( buf32[inext+CELL_AND] !== 0 ) {
+ icell = inext;
+ continue;
+ }
+ // add needle remainder
+ icell = this.addCell(0, 0, toSegmentInfo(aL0, al, aR));
+ buf32[inext+CELL_AND] = icell;
+ return this.addLeft(icell, aL0, pivot);
+ }
+ // some characters matched
+ // split current segment
+ bl -= char0;
+ buf32[icell+SEGMENT_INFO] = bi << 24 | bl;
+ inext = this.addCell(
+ buf32[icell+CELL_AND], 0, bR - bi << 24 | bl + bi
+ );
+ buf32[icell+CELL_AND] = inext;
+ // needle remainder: no = need boundary cell
+ if ( al === aR ) {
+ return this.addLeft(icell, aL0, pivot);
+ }
+ // needle remainder: yes = need new cell for remaining characters
+ icell = this.addCell(0, 0, toSegmentInfo(aL0, al, aR));
+ buf32[inext+CELL_OR] = icell;
+ return this.addLeft(icell, aL0, pivot);
+ }
+ }
+
+ addLeft(icell, aL0, pivot) {
+ const buf32 = this.buf32;
+ const char0 = buf32[CHAR0_SLOT];
+ let aL = aL0 + char0;
+ // fetch boundary cell
+ let iboundary = buf32[icell+CELL_AND];
+ // add boundary cell if none exist
+ if (
+ iboundary === 0 ||
+ buf32[iboundary+SEGMENT_INFO] > BCELL_EXTRA_MAX
+ ) {
+ const inext = iboundary;
+ iboundary = this.allocateCell();
+ buf32[icell+CELL_AND] = iboundary;
+ buf32[iboundary+BCELL_NEXT_AND] = inext;
+ if ( pivot === 0 ) { return iboundary; }
+ }
+ // shortest match with no extra conditions will always win
+ if ( buf32[iboundary+BCELL_EXTRA] === 1 ) {
+ return iboundary;
+ }
+ // bail out if no left segment
+ if ( pivot === 0 ) { return iboundary; }
+ // fetch root cell of left segment
+ icell = buf32[iboundary+BCELL_ALT_AND];
+ if ( icell === 0 ) {
+ icell = this.allocateCell();
+ buf32[iboundary+BCELL_ALT_AND] = icell;
+ }
+ // special case: first node in trie
+ if ( buf32[icell+SEGMENT_INFO] === 0 ) {
+ buf32[icell+SEGMENT_INFO] = toSegmentInfo(aL0, 0, pivot);
+ iboundary = this.allocateCell();
+ buf32[icell+CELL_AND] = iboundary;
+ return iboundary;
+ }
+ const buf8 = this.buf8;
+ let ar = pivot, inext;
+ // find a matching cell: move down
+ for (;;) {
+ const binfo = buf32[icell+SEGMENT_INFO];
+ // skip boundary cells
+ if ( binfo <= BCELL_EXTRA_MAX ) {
+ inext = buf32[icell+CELL_AND];
+ if ( inext !== 0 ) {
+ icell = inext;
+ continue;
+ }
+ iboundary = this.allocateCell();
+ buf32[icell+CELL_AND] =
+ this.addCell(iboundary, 0, toSegmentInfo(aL0, 0, ar));
+ // TODO: boundary cell might be last
+ // add remainder + boundary cell
+ return iboundary;
+ }
+ const bL = char0 + (binfo & 0x00FFFFFF);
+ const bR = bL + (binfo >>> 24);
+ let br = bR;
+ // if first character is no match, move to next descendant
+ if ( buf8[br-1] !== buf8[aL+ar-1] ) {
+ inext = buf32[icell+CELL_OR];
+ if ( inext === 0 ) {
+ iboundary = this.allocateCell();
+ inext = this.addCell(
+ iboundary, 0, toSegmentInfo(aL0, 0, ar)
+ );
+ buf32[icell+CELL_OR] = inext;
+ return iboundary;
+ }
+ icell = inext;
+ continue;
+ }
+ // 1st character was tested
+ br -= 1;
+ ar -= 1;
+ // find 1st mismatch in rest of segment
+ if ( br !== bL ) {
+ for (;;) {
+ if ( br === bL ) { break; }
+ if ( ar === 0 ) { break; }
+ if ( buf8[br-1] !== buf8[aL+ar-1] ) { break; }
+ br -= 1;
+ ar -= 1;
+ }
+ }
+ // all segment characters matched
+ // a: ...vvvvvvv
+ // b: vvvvvvv
+ if ( br === bL ) {
+ inext = buf32[icell+CELL_AND];
+ // needle remainder: no
+ // a: vvvvvvv
+ // b: vvvvvvv
+ // r: 0 & vvvvvvv
+ if ( ar === 0 ) {
+ // boundary cell already present
+ if ( buf32[inext+BCELL_EXTRA] <= BCELL_EXTRA_MAX ) {
+ return inext;
+ }
+ // need boundary cell
+ iboundary = this.allocateCell();
+ buf32[iboundary+CELL_AND] = inext;
+ buf32[icell+CELL_AND] = iboundary;
+ return iboundary;
+ }
+ // needle remainder: yes
+ // a: yyyyyyyvvvvvvv
+ // b: vvvvvvv
+ else {
+ if ( inext !== 0 ) {
+ icell = inext;
+ continue;
+ }
+ // TODO: we should never reach here because there will
+ // always be a boundary cell.
+ // eslint-disable-next-line no-debugger
+ debugger; // jshint ignore:line
+ // boundary cell + needle remainder
+ inext = this.addCell(0, 0, 0);
+ buf32[icell+CELL_AND] = inext;
+ buf32[inext+CELL_AND] =
+ this.addCell(0, 0, toSegmentInfo(aL0, 0, ar));
+ }
+ }
+ // some segment characters matched
+ // a: ...vvvvvvv
+ // b: yyyyyyyvvvvvvv
+ else {
+ // split current cell
+ buf32[icell+SEGMENT_INFO] = (bR - br) << 24 | (br - char0);
+ inext = this.addCell(
+ buf32[icell+CELL_AND],
+ 0,
+ (br - bL) << 24 | (bL - char0)
+ );
+ // needle remainder: no = need boundary cell
+ // a: vvvvvvv
+ // b: yyyyyyyvvvvvvv
+ // r: yyyyyyy & 0 & vvvvvvv
+ if ( ar === 0 ) {
+ iboundary = this.allocateCell();
+ buf32[icell+CELL_AND] = iboundary;
+ buf32[iboundary+CELL_AND] = inext;
+ return iboundary;
+ }
+ // needle remainder: yes = need new cell for remaining
+ // characters
+ // a: wwwwvvvvvvv
+ // b: yyyyyyyvvvvvvv
+ // r: (0 & wwww | yyyyyyy) & vvvvvvv
+ else {
+ buf32[icell+CELL_AND] = inext;
+ iboundary = this.allocateCell();
+ buf32[inext+CELL_OR] = this.addCell(
+ iboundary, 0, toSegmentInfo(aL0, 0, ar)
+ );
+ return iboundary;
+ }
+ }
+ //debugger; // jshint ignore:line
+ }
+ }
+
+ getExtra(iboundary) {
+ return this.buf32[iboundary+BCELL_EXTRA];
+ }
+
+ setExtra(iboundary, v) {
+ this.buf32[iboundary+BCELL_EXTRA] = v;
+ }
+
+ optimize(shrink = false) {
+ if ( shrink ) {
+ this.shrinkBuf();
+ }
+ return {
+ byteLength: this.buf8.byteLength,
+ char0: this.buf32[CHAR0_SLOT],
+ };
+ }
+
+ serialize(encoder) {
+ if ( encoder instanceof Object ) {
+ return encoder.encode(
+ this.buf32.buffer,
+ this.buf32[CHAR1_SLOT]
+ );
+ }
+ return Array.from(
+ new Uint32Array(
+ this.buf32.buffer,
+ 0,
+ this.buf32[CHAR1_SLOT] + 3 >>> 2
+ )
+ );
+ }
+
+ unserialize(selfie, decoder) {
+ const shouldDecode = typeof selfie === 'string';
+ let byteLength = shouldDecode
+ ? decoder.decodeSize(selfie)
+ : selfie.length << 2;
+ if ( byteLength === 0 ) { return false; }
+ this.reallocateBuf(byteLength);
+ if ( shouldDecode ) {
+ decoder.decode(selfie, this.buf8.buffer);
+ } else {
+ this.buf32.set(selfie);
+ }
+ return true;
+ }
+
+ storeString(s) {
+ const n = s.length;
+ if ( n === this.lastStoredLen && s === this.lastStored ) {
+ return this.lastStoredIndex;
+ }
+ this.lastStored = s;
+ this.lastStoredLen = n;
+ if ( (this.buf8.length - this.buf32[CHAR1_SLOT]) < n ) {
+ this.growBuf(0, n);
+ }
+ const offset = this.buf32[CHAR1_SLOT];
+ this.buf32[CHAR1_SLOT] = offset + n;
+ const buf8 = this.buf8;
+ for ( let i = 0; i < n; i++ ) {
+ buf8[offset+i] = s.charCodeAt(i);
+ }
+ return (this.lastStoredIndex = offset - this.buf32[CHAR0_SLOT]);
+ }
+
+ extractString(i, n) {
+ if ( this.textDecoder === null ) {
+ this.textDecoder = new TextDecoder();
+ }
+ const offset = this.buf32[CHAR0_SLOT] + i;
+ return this.textDecoder.decode(
+ this.buf8.subarray(offset, offset + n)
+ );
+ }
+
+ // WASMable.
+ startsWith(haystackLeft, haystackRight, needleLeft, needleLen) {
+ if ( haystackLeft < 0 || (haystackLeft + needleLen) > haystackRight ) {
+ return 0;
+ }
+ const charCodes = this.buf8;
+ needleLeft += this.buf32[CHAR0_SLOT];
+ const needleRight = needleLeft + needleLen;
+ while ( charCodes[haystackLeft] === charCodes[needleLeft] ) {
+ needleLeft += 1;
+ if ( needleLeft === needleRight ) { return 1; }
+ haystackLeft += 1;
+ }
+ return 0;
+ }
+
+ // Find the left-most instance of substring in main string
+ // WASMable.
+ indexOf(haystackLeft, haystackEnd, needleLeft, needleLen) {
+ if ( needleLen === 0 ) { return haystackLeft; }
+ haystackEnd -= needleLen;
+ if ( haystackEnd < haystackLeft ) { return -1; }
+ needleLeft += this.buf32[CHAR0_SLOT];
+ const needleRight = needleLeft + needleLen;
+ const charCodes = this.buf8;
+ for (;;) {
+ let i = haystackLeft;
+ let j = needleLeft;
+ while ( charCodes[i] === charCodes[j] ) {
+ j += 1;
+ if ( j === needleRight ) { return haystackLeft; }
+ i += 1;
+ }
+ haystackLeft += 1;
+ if ( haystackLeft > haystackEnd ) { break; }
+ }
+ return -1;
+ }
+
+ // Find the right-most instance of substring in main string.
+ // WASMable.
+ lastIndexOf(haystackBeg, haystackEnd, needleLeft, needleLen) {
+ if ( needleLen === 0 ) { return haystackBeg; }
+ let haystackLeft = haystackEnd - needleLen;
+ if ( haystackLeft < haystackBeg ) { return -1; }
+ needleLeft += this.buf32[CHAR0_SLOT];
+ const needleRight = needleLeft + needleLen;
+ const charCodes = this.buf8;
+ for (;;) {
+ let i = haystackLeft;
+ let j = needleLeft;
+ while ( charCodes[i] === charCodes[j] ) {
+ j += 1;
+ if ( j === needleRight ) { return haystackLeft; }
+ i += 1;
+ }
+ if ( haystackLeft === haystackBeg ) { break; }
+ haystackLeft -= 1;
+ }
+ return -1;
+ }
+
+ dumpTrie(iroot) {
+ for ( const s of this.trieIterator(iroot) ) {
+ console.log(s);
+ }
+ }
+
+ trieIterator(iroot) {
+ return {
+ value: undefined,
+ done: false,
+ next() {
+ if ( this.icell === 0 ) {
+ if ( this.forks.length === 0 ) {
+ this.value = undefined;
+ this.done = true;
+ return this;
+ }
+ this.pattern = this.forks.pop();
+ this.dir = this.forks.pop();
+ this.icell = this.forks.pop();
+ }
+ const buf32 = this.container.buf32;
+ const buf8 = this.container.buf8;
+ for (;;) {
+ const ialt = buf32[this.icell+CELL_OR];
+ const v = buf32[this.icell+SEGMENT_INFO];
+ const offset = v & 0x00FFFFFF;
+ let i0 = buf32[CHAR0_SLOT] + offset;
+ const len = v >>> 24;
+ for ( let i = 0; i < len; i++ ) {
+ this.charBuf[i] = buf8[i0+i];
+ }
+ if ( len !== 0 && ialt !== 0 ) {
+ this.forks.push(ialt, this.dir, this.pattern);
+ }
+ const inext = buf32[this.icell+CELL_AND];
+ if ( len !== 0 ) {
+ const s = this.textDecoder.decode(
+ new Uint8Array(this.charBuf.buffer, 0, len)
+ );
+ if ( this.dir > 0 ) {
+ this.pattern += s;
+ } else if ( this.dir < 0 ) {
+ this.pattern = s + this.pattern;
+ }
+ }
+ this.icell = inext;
+ if ( len !== 0 ) { continue; }
+ // boundary cell
+ if ( ialt !== 0 ) {
+ if ( inext === 0 ) {
+ this.icell = ialt;
+ this.dir = -1;
+ } else {
+ this.forks.push(ialt, -1, this.pattern);
+ }
+ }
+ if ( offset !== 0 ) {
+ this.value = { pattern: this.pattern, iextra: offset };
+ return this;
+ }
+ }
+ },
+ container: this,
+ icell: iroot,
+ charBuf: new Uint8Array(256),
+ pattern: '',
+ dir: 1,
+ forks: [],
+ textDecoder: new TextDecoder(),
+ [Symbol.iterator]() { return this; },
+ };
+ }
+
+ async enableWASM(wasmModuleFetcher, path) {
+ if ( typeof WebAssembly !== 'object' ) { return false; }
+ if ( this.wasmMemory instanceof WebAssembly.Memory ) { return true; }
+ const module = await getWasmModule(wasmModuleFetcher, path);
+ if ( module instanceof WebAssembly.Module === false ) { return false; }
+ const memory = new WebAssembly.Memory({
+ initial: roundToPageSize(this.buf8.length) >>> 16
+ });
+ const instance = await WebAssembly.instantiate(module, {
+ imports: { memory, extraHandler: this.extraHandler }
+ });
+ if ( instance instanceof WebAssembly.Instance === false ) {
+ return false;
+ }
+ this.wasmMemory = memory;
+ const curPageCount = memory.buffer.byteLength >>> 16;
+ const newPageCount = roundToPageSize(this.buf8.byteLength) >>> 16;
+ if ( newPageCount > curPageCount ) {
+ memory.grow(newPageCount - curPageCount);
+ }
+ const buf8 = new Uint8Array(memory.buffer);
+ buf8.set(this.buf8);
+ this.buf8 = buf8;
+ this.buf32 = new Uint32Array(this.buf8.buffer);
+ this.haystack = this.buf8.subarray(
+ HAYSTACK_START,
+ HAYSTACK_START + HAYSTACK_SIZE
+ );
+ this.matches = instance.exports.matches;
+ this.startsWith = instance.exports.startsWith;
+ this.indexOf = instance.exports.indexOf;
+ this.lastIndexOf = instance.exports.lastIndexOf;
+ return true;
+ }
+
+ dumpInfo() {
+ return [
+ `Buffer size (Uint8Array): ${this.buf32[CHAR1_SLOT].toLocaleString('en')}`,
+ `WASM: ${this.wasmMemory === null ? 'disabled' : 'enabled'}`,
+ ].join('\n');
+ }
+
+ //--------------------------------------------------------------------------
+ // Private methods
+ //--------------------------------------------------------------------------
+
+ allocateCell() {
+ let icell = this.buf32[TRIE1_SLOT];
+ this.buf32[TRIE1_SLOT] = icell + CELL_BYTE_LENGTH;
+ icell >>>= 2;
+ this.buf32[icell+0] = 0;
+ this.buf32[icell+1] = 0;
+ this.buf32[icell+2] = 0;
+ return icell;
+ }
+
+ addCell(iand, ior, v) {
+ const icell = this.allocateCell();
+ this.buf32[icell+CELL_AND] = iand;
+ this.buf32[icell+CELL_OR] = ior;
+ this.buf32[icell+SEGMENT_INFO] = v;
+ return icell;
+ }
+
+ growBuf(trieGrow, charGrow) {
+ const char0 = Math.max(
+ roundToPageSize(this.buf32[TRIE1_SLOT] + trieGrow),
+ this.buf32[CHAR0_SLOT]
+ );
+ const char1 = char0 + this.buf32[CHAR1_SLOT] - this.buf32[CHAR0_SLOT];
+ const bufLen = Math.max(
+ roundToPageSize(char1 + charGrow),
+ this.buf8.length
+ );
+ if ( bufLen > this.buf8.length ) {
+ this.reallocateBuf(bufLen);
+ }
+ if ( char0 !== this.buf32[CHAR0_SLOT] ) {
+ this.buf8.copyWithin(
+ char0,
+ this.buf32[CHAR0_SLOT],
+ this.buf32[CHAR1_SLOT]
+ );
+ this.buf32[CHAR0_SLOT] = char0;
+ this.buf32[CHAR1_SLOT] = char1;
+ }
+ }
+
+ shrinkBuf() {
+ const char0 = this.buf32[TRIE1_SLOT] + MIN_FREE_CELL_BYTE_LENGTH;
+ const char1 = char0 + this.buf32[CHAR1_SLOT] - this.buf32[CHAR0_SLOT];
+ const bufLen = char1 + 256;
+ if ( char0 !== this.buf32[CHAR0_SLOT] ) {
+ this.buf8.copyWithin(
+ char0,
+ this.buf32[CHAR0_SLOT],
+ this.buf32[CHAR1_SLOT]
+ );
+ this.buf32[CHAR0_SLOT] = char0;
+ this.buf32[CHAR1_SLOT] = char1;
+ }
+ if ( bufLen < this.buf8.length ) {
+ this.reallocateBuf(bufLen);
+ }
+ }
+
+ reallocateBuf(newSize) {
+ newSize = roundToPageSize(newSize);
+ if ( newSize === this.buf8.length ) { return; }
+ if ( this.wasmMemory === null ) {
+ const newBuf = new Uint8Array(newSize);
+ newBuf.set(
+ newBuf.length < this.buf8.length
+ ? this.buf8.subarray(0, newBuf.length)
+ : this.buf8
+ );
+ this.buf8 = newBuf;
+ } else {
+ const growBy =
+ ((newSize + 0xFFFF) >>> 16) - (this.buf8.length >>> 16);
+ if ( growBy <= 0 ) { return; }
+ this.wasmMemory.grow(growBy);
+ this.buf8 = new Uint8Array(this.wasmMemory.buffer);
+ }
+ this.buf32 = new Uint32Array(this.buf8.buffer);
+ this.haystack = this.buf8.subarray(
+ HAYSTACK_START,
+ HAYSTACK_START + HAYSTACK_SIZE
+ );
+ }
+}
+
+/******************************************************************************/
+
+// Code below is to attempt to load a WASM module which implements:
+//
+// - BidiTrieContainer.startsWith()
+//
+// The WASM module is entirely optional, the JS implementations will be
+// used should the WASM module be unavailable for whatever reason.
+
+const getWasmModule = (( ) => {
+ let wasmModulePromise;
+
+ return async function(wasmModuleFetcher, path) {
+ if ( wasmModulePromise instanceof Promise ) {
+ return wasmModulePromise;
+ }
+
+ if ( typeof WebAssembly !== 'object' ) { return; }
+
+ // Soft-dependency on vAPI so that the code here can be used outside of
+ // uBO (i.e. tests, benchmarks)
+ if ( typeof vAPI === 'object' && vAPI.canWASM !== true ) { return; }
+
+ // The wasm module will work only if CPU is natively little-endian,
+ // as we use native uint32 array in our js code.
+ const uint32s = new Uint32Array(1);
+ const uint8s = new Uint8Array(uint32s.buffer);
+ uint32s[0] = 1;
+ if ( uint8s[0] !== 1 ) { return; }
+
+ wasmModulePromise = wasmModuleFetcher(`${path}biditrie`).catch(reason => {
+ console.info(reason);
+ });
+
+ return wasmModulePromise;
+ };
+})();
+
+/******************************************************************************/
+
+export default BidiTrieContainer;
diff --git a/src/js/broadcast.js b/src/js/broadcast.js
new file mode 100644
index 0000000..0bef46c
--- /dev/null
+++ b/src/js/broadcast.js
@@ -0,0 +1,75 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* globals browser */
+
+'use strict';
+
+/******************************************************************************/
+
+// Broadcast a message to all uBO contexts
+
+let broadcastChannel;
+
+export function broadcast(message) {
+ if ( broadcastChannel === undefined ) {
+ broadcastChannel = new self.BroadcastChannel('uBO');
+ }
+ broadcastChannel.postMessage(message);
+}
+
+/******************************************************************************/
+
+// Broadcast a message to all uBO contexts and all uBO's content scripts
+
+export async function broadcastToAll(message) {
+ broadcast(message);
+ const tabs = await vAPI.tabs.query({
+ discarded: false,
+ });
+ const bcmessage = Object.assign({ broadcast: true }, message);
+ for ( const tab of tabs ) {
+ browser.tabs.sendMessage(tab.id, bcmessage);
+ }
+}
+
+/******************************************************************************/
+
+export function onBroadcast(listener) {
+ const bc = new self.BroadcastChannel('uBO');
+ bc.onmessage = ev => listener(ev.data || {});
+ return bc;
+}
+
+/******************************************************************************/
+
+export function filteringBehaviorChanged(details = {}) {
+ if ( typeof details.direction !== 'number' || details.direction >= 0 ) {
+ filteringBehaviorChanged.throttle.offon(727);
+ }
+ broadcast(Object.assign({ what: 'filteringBehaviorChanged' }, details));
+}
+
+filteringBehaviorChanged.throttle = vAPI.defer.create(( ) => {
+ vAPI.net.handlerBehaviorChanged();
+});
+
+/******************************************************************************/
diff --git a/src/js/cachestorage.js b/src/js/cachestorage.js
new file mode 100644
index 0000000..ef056af
--- /dev/null
+++ b/src/js/cachestorage.js
@@ -0,0 +1,533 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2016-present The uBlock Origin authors
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* global browser, IDBDatabase, indexedDB */
+
+'use strict';
+
+/******************************************************************************/
+
+import lz4Codec from './lz4.js';
+import µb from './background.js';
+import webext from './webext.js';
+
+/******************************************************************************/
+
+// The code below has been originally manually imported from:
+// Commit: https://github.com/nikrolls/uBlock-Edge/commit/d1538ea9bea89d507219d3219592382eee306134
+// Commit date: 29 October 2016
+// Commit author: https://github.com/nikrolls
+// Commit message: "Implement cacheStorage using IndexedDB"
+
+// The original imported code has been subsequently modified as it was not
+// compatible with Firefox.
+// (a Promise thing, see https://github.com/dfahlander/Dexie.js/issues/317)
+// Furthermore, code to migrate from browser.storage.local to vAPI.storage
+// has been added, for seamless migration of cache-related entries into
+// indexedDB.
+
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1371255
+// Firefox-specific: we use indexedDB because browser.storage.local() has
+// poor performance in Firefox.
+// https://github.com/uBlockOrigin/uBlock-issues/issues/328
+// Use IndexedDB for Chromium as well, to take advantage of LZ4
+// compression.
+// https://github.com/uBlockOrigin/uBlock-issues/issues/399
+// Revert Chromium support of IndexedDB, use advanced setting to force
+// IndexedDB.
+// https://github.com/uBlockOrigin/uBlock-issues/issues/409
+// Allow forcing the use of webext storage on Firefox.
+
+const STORAGE_NAME = 'uBlock0CacheStorage';
+
+// Default to webext storage.
+const storageLocal = webext.storage.local;
+
+let storageReadyResolve;
+const storageReadyPromise = new Promise(resolve => {
+ storageReadyResolve = resolve;
+});
+
+const cacheStorage = {
+ name: 'browser.storage.local',
+ get(...args) {
+ return storageReadyPromise.then(( ) =>
+ storageLocal.get(...args).catch(reason => {
+ console.log(reason);
+ })
+ );
+ },
+ set(...args) {
+ return storageReadyPromise.then(( ) =>
+ storageLocal.set(...args).catch(reason => {
+ console.log(reason);
+ })
+ );
+ },
+ remove(...args) {
+ return storageReadyPromise.then(( ) =>
+ storageLocal.remove(...args).catch(reason => {
+ console.log(reason);
+ })
+ );
+ },
+ clear(...args) {
+ return storageReadyPromise.then(( ) =>
+ storageLocal.clear(...args).catch(reason => {
+ console.log(reason);
+ })
+ );
+ },
+ select: function(selectedBackend) {
+ let actualBackend = selectedBackend;
+ if ( actualBackend === undefined || actualBackend === 'unset' ) {
+ actualBackend = vAPI.webextFlavor.soup.has('firefox')
+ ? 'indexedDB'
+ : 'browser.storage.local';
+ }
+ if ( actualBackend === 'indexedDB' ) {
+ return selectIDB().then(success => {
+ if ( success || selectedBackend === 'indexedDB' ) {
+ clearWebext();
+ storageReadyResolve();
+ return 'indexedDB';
+ }
+ clearIDB();
+ storageReadyResolve();
+ return 'browser.storage.local';
+ });
+ }
+ if ( actualBackend === 'browser.storage.local' ) {
+ clearIDB();
+ }
+ storageReadyResolve();
+ return Promise.resolve('browser.storage.local');
+
+ },
+ error: undefined
+};
+
+// Not all platforms support getBytesInUse
+if ( storageLocal.getBytesInUse instanceof Function ) {
+ cacheStorage.getBytesInUse = function(...args) {
+ return storageLocal.getBytesInUse(...args).catch(reason => {
+ console.log(reason);
+ });
+ };
+}
+
+// Reassign API entries to that of indexedDB-based ones
+const selectIDB = async function() {
+ let db;
+ let dbPromise;
+
+ const noopfn = function () {
+ };
+
+ const disconnect = function() {
+ dbTimer.off();
+ if ( db instanceof IDBDatabase ) {
+ db.close();
+ db = undefined;
+ }
+ };
+
+ const dbTimer = vAPI.defer.create(( ) => {
+ disconnect();
+ });
+
+ const keepAlive = function() {
+ dbTimer.offon(Math.max(
+ µb.hiddenSettings.autoUpdateAssetFetchPeriod * 2 * 1000,
+ 180000
+ ));
+ };
+
+ // https://github.com/gorhill/uBlock/issues/3156
+ // I have observed that no event was fired in Tor Browser 7.0.7 +
+ // medium security level after the request to open the database was
+ // created. When this occurs, I have also observed that the `error`
+ // property was already set, so this means uBO can detect here whether
+ // the database can be opened successfully. A try-catch block is
+ // necessary when reading the `error` property because we are not
+ // allowed to read this property outside of event handlers in newer
+ // implementation of IDBRequest (my understanding).
+
+ const getDb = function() {
+ keepAlive();
+ if ( db !== undefined ) {
+ return Promise.resolve(db);
+ }
+ if ( dbPromise !== undefined ) {
+ return dbPromise;
+ }
+ dbPromise = new Promise(resolve => {
+ let req;
+ try {
+ req = indexedDB.open(STORAGE_NAME, 1);
+ if ( req.error ) {
+ console.log(req.error);
+ req = undefined;
+ }
+ } catch(ex) {
+ }
+ if ( req === undefined ) {
+ db = null;
+ dbPromise = undefined;
+ return resolve(null);
+ }
+ req.onupgradeneeded = function(ev) {
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/2725
+ // If context Firefox + incognito mode, fall back to
+ // browser.storage.local for cache storage purpose.
+ if (
+ vAPI.webextFlavor.soup.has('firefox') &&
+ browser.extension.inIncognitoContext === true
+ ) {
+ return req.onerror();
+ }
+ if ( ev.oldVersion === 1 ) { return; }
+ try {
+ const db = ev.target.result;
+ db.createObjectStore(STORAGE_NAME, { keyPath: 'key' });
+ } catch(ex) {
+ req.onerror();
+ }
+ };
+ req.onsuccess = function(ev) {
+ if ( resolve === undefined ) { return; }
+ req = undefined;
+ db = ev.target.result;
+ dbPromise = undefined;
+ resolve(db);
+ resolve = undefined;
+ };
+ req.onerror = req.onblocked = function() {
+ if ( resolve === undefined ) { return; }
+ req = undefined;
+ console.log(this.error);
+ db = null;
+ dbPromise = undefined;
+ resolve(null);
+ resolve = undefined;
+ };
+ vAPI.defer.once(5000).then(( ) => {
+ if ( resolve === undefined ) { return; }
+ db = null;
+ dbPromise = undefined;
+ resolve(null);
+ resolve = undefined;
+ });
+ });
+ return dbPromise;
+ };
+
+ const fromBlob = function(data) {
+ if ( data instanceof Blob === false ) {
+ return Promise.resolve(data);
+ }
+ return new Promise(resolve => {
+ const blobReader = new FileReader();
+ blobReader.onloadend = ev => {
+ resolve(new Uint8Array(ev.target.result));
+ };
+ blobReader.readAsArrayBuffer(data);
+ });
+ };
+
+ const toBlob = function(data) {
+ const value = data instanceof Uint8Array
+ ? new Blob([ data ])
+ : data;
+ return Promise.resolve(value);
+ };
+
+ const compress = function(store, key, data) {
+ return lz4Codec.encode(data, toBlob).then(value => {
+ store.push({ key, value });
+ });
+ };
+
+ const decompress = function(store, key, data) {
+ return lz4Codec.decode(data, fromBlob).then(data => {
+ store[key] = data;
+ });
+ };
+
+ const getFromDb = async function(keys, keyvalStore, callback) {
+ if ( typeof callback !== 'function' ) { return; }
+ if ( keys.length === 0 ) { return callback(keyvalStore); }
+ const promises = [];
+ const gotOne = function() {
+ if ( typeof this.result !== 'object' ) { return; }
+ const { key, value } = this.result;
+ keyvalStore[key] = value;
+ if ( value instanceof Blob === false ) { return; }
+ promises.push(decompress(keyvalStore, key, value));
+ };
+ try {
+ const db = await getDb();
+ if ( !db ) { return callback(); }
+ const transaction = db.transaction(STORAGE_NAME, 'readonly');
+ transaction.oncomplete =
+ transaction.onerror =
+ transaction.onabort = ( ) => {
+ Promise.all(promises).then(( ) => {
+ callback(keyvalStore);
+ });
+ };
+ const table = transaction.objectStore(STORAGE_NAME);
+ for ( const key of keys ) {
+ const req = table.get(key);
+ req.onsuccess = gotOne;
+ req.onerror = noopfn;
+ }
+ }
+ catch(reason) {
+ console.info(`cacheStorage.getFromDb() failed: ${reason}`);
+ callback();
+ }
+ };
+
+ const visitAllFromDb = async function(visitFn) {
+ const db = await getDb();
+ if ( !db ) { return visitFn(); }
+ const transaction = db.transaction(STORAGE_NAME, 'readonly');
+ transaction.oncomplete =
+ transaction.onerror =
+ transaction.onabort = ( ) => visitFn();
+ const table = transaction.objectStore(STORAGE_NAME);
+ const req = table.openCursor();
+ req.onsuccess = function(ev) {
+ let cursor = ev.target && ev.target.result;
+ if ( !cursor ) { return; }
+ let entry = cursor.value;
+ visitFn(entry);
+ cursor.continue();
+ };
+ };
+
+ const getAllFromDb = function(callback) {
+ if ( typeof callback !== 'function' ) { return; }
+ const promises = [];
+ const keyvalStore = {};
+ visitAllFromDb(entry => {
+ if ( entry === undefined ) {
+ Promise.all(promises).then(( ) => {
+ callback(keyvalStore);
+ });
+ return;
+ }
+ const { key, value } = entry;
+ keyvalStore[key] = value;
+ if ( entry.value instanceof Blob === false ) { return; }
+ promises.push(decompress(keyvalStore, key, value));
+ }).catch(reason => {
+ console.info(`cacheStorage.getAllFromDb() failed: ${reason}`);
+ callback();
+ });
+ };
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/141
+ // Mind that IDBDatabase.transaction() and IDBObjectStore.put()
+ // can throw:
+ // https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/transaction
+ // https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/put
+
+ const putToDb = async function(keyvalStore, callback) {
+ if ( typeof callback !== 'function' ) {
+ callback = noopfn;
+ }
+ const keys = Object.keys(keyvalStore);
+ if ( keys.length === 0 ) { return callback(); }
+ const promises = [ getDb() ];
+ const entries = [];
+ const dontCompress =
+ µb.hiddenSettings.cacheStorageCompression !== true;
+ for ( const key of keys ) {
+ const value = keyvalStore[key];
+ const isString = typeof value === 'string';
+ if ( isString === false || dontCompress ) {
+ entries.push({ key, value });
+ continue;
+ }
+ promises.push(compress(entries, key, value));
+ }
+ const finish = ( ) => {
+ if ( callback === undefined ) { return; }
+ let cb = callback;
+ callback = undefined;
+ cb();
+ };
+ try {
+ const results = await Promise.all(promises);
+ const db = results[0];
+ if ( !db ) { return callback(); }
+ const transaction = db.transaction(
+ STORAGE_NAME,
+ 'readwrite'
+ );
+ transaction.oncomplete =
+ transaction.onerror =
+ transaction.onabort = finish;
+ const table = transaction.objectStore(STORAGE_NAME);
+ for ( const entry of entries ) {
+ table.put(entry);
+ }
+ } catch (ex) {
+ finish();
+ }
+ };
+
+ const deleteFromDb = async function(input, callback) {
+ if ( typeof callback !== 'function' ) {
+ callback = noopfn;
+ }
+ const keys = Array.isArray(input) ? input.slice() : [ input ];
+ if ( keys.length === 0 ) { return callback(); }
+ const finish = ( ) => {
+ if ( callback === undefined ) { return; }
+ let cb = callback;
+ callback = undefined;
+ cb();
+ };
+ try {
+ const db = await getDb();
+ if ( !db ) { return callback(); }
+ const transaction = db.transaction(STORAGE_NAME, 'readwrite');
+ transaction.oncomplete =
+ transaction.onerror =
+ transaction.onabort = finish;
+ const table = transaction.objectStore(STORAGE_NAME);
+ for ( const key of keys ) {
+ table.delete(key);
+ }
+ } catch (ex) {
+ finish();
+ }
+ };
+
+ const clearDb = async function(callback) {
+ if ( typeof callback !== 'function' ) {
+ callback = noopfn;
+ }
+ try {
+ const db = await getDb();
+ if ( !db ) { return callback(); }
+ const transaction = db.transaction(STORAGE_NAME, 'readwrite');
+ transaction.oncomplete =
+ transaction.onerror =
+ transaction.onabort = ( ) => {
+ callback();
+ };
+ transaction.objectStore(STORAGE_NAME).clear();
+ }
+ catch(reason) {
+ console.info(`cacheStorage.clearDb() failed: ${reason}`);
+ callback();
+ }
+ };
+
+ await getDb();
+ if ( !db ) { return false; }
+
+ cacheStorage.name = 'indexedDB';
+ cacheStorage.get = function get(keys) {
+ return storageReadyPromise.then(( ) =>
+ new Promise(resolve => {
+ if ( keys === null ) {
+ return getAllFromDb(bin => resolve(bin));
+ }
+ let toRead, output = {};
+ if ( typeof keys === 'string' ) {
+ toRead = [ keys ];
+ } else if ( Array.isArray(keys) ) {
+ toRead = keys;
+ } else /* if ( typeof keys === 'object' ) */ {
+ toRead = Object.keys(keys);
+ output = keys;
+ }
+ getFromDb(toRead, output, bin => resolve(bin));
+ })
+ );
+ };
+ cacheStorage.set = function set(keys) {
+ return storageReadyPromise.then(( ) =>
+ new Promise(resolve => {
+ putToDb(keys, details => resolve(details));
+ })
+ );
+ };
+ cacheStorage.remove = function remove(keys) {
+ return storageReadyPromise.then(( ) =>
+ new Promise(resolve => {
+ deleteFromDb(keys, ( ) => resolve());
+ })
+ );
+ };
+ cacheStorage.clear = function clear() {
+ return storageReadyPromise.then(( ) =>
+ new Promise(resolve => {
+ clearDb(( ) => resolve());
+ })
+ );
+ };
+ cacheStorage.getBytesInUse = function getBytesInUse() {
+ return Promise.resolve(0);
+ };
+ return true;
+};
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/328
+// Delete cache-related entries from webext storage.
+const clearWebext = async function() {
+ let bin;
+ try {
+ bin = await webext.storage.local.get('assetCacheRegistry');
+ } catch(ex) {
+ console.error(ex);
+ }
+ if ( bin instanceof Object === false ) { return; }
+ if ( bin.assetCacheRegistry instanceof Object === false ) { return; }
+ const toRemove = [
+ 'assetCacheRegistry',
+ 'assetSourceRegistry',
+ ];
+ for ( const key in bin.assetCacheRegistry ) {
+ if ( bin.assetCacheRegistry.hasOwnProperty(key) ) {
+ toRemove.push('cache/' + key);
+ }
+ }
+ webext.storage.local.remove(toRemove);
+};
+
+const clearIDB = function() {
+ try {
+ indexedDB.deleteDatabase(STORAGE_NAME);
+ } catch(ex) {
+ }
+};
+
+/******************************************************************************/
+
+export default cacheStorage;
+
+/******************************************************************************/
diff --git a/src/js/click2load.js b/src/js/click2load.js
new file mode 100644
index 0000000..42b7525
--- /dev/null
+++ b/src/js/click2load.js
@@ -0,0 +1,60 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+/******************************************************************************/
+
+(( ) => {
+
+/******************************************************************************/
+
+if ( typeof vAPI !== 'object' ) { return; }
+
+const url = new URL(self.location.href);
+const actualURL = url.searchParams.get('url');
+const frameURL = url.searchParams.get('aliasURL') || actualURL;
+const frameURLElem = document.getElementById('frameURL');
+
+frameURLElem.children[0].textContent = actualURL;
+
+frameURLElem.children[1].href = frameURL;
+frameURLElem.children[1].title = frameURL;
+
+document.body.setAttribute('title', actualURL);
+
+document.body.addEventListener('click', ev => {
+ if ( ev.isTrusted === false ) { return; }
+ if ( ev.target.closest('#frameURL') !== null ) { return; }
+ vAPI.messaging.send('default', {
+ what: 'clickToLoad',
+ frameURL,
+ }).then(ok => {
+ if ( ok ) {
+ self.location.replace(frameURL);
+ }
+ });
+});
+
+/******************************************************************************/
+
+})();
diff --git a/src/js/cloud-ui.js b/src/js/cloud-ui.js
new file mode 100644
index 0000000..228f114
--- /dev/null
+++ b/src/js/cloud-ui.js
@@ -0,0 +1,238 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-2018 Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* global faIconsInit */
+
+'use strict';
+
+import { i18n, i18n$ } from './i18n.js';
+import { dom, qs$ } from './dom.js';
+import { faIconsInit } from './fa-icons.js';
+
+/******************************************************************************/
+
+(( ) => {
+
+/******************************************************************************/
+
+self.cloud = {
+ options: {},
+ datakey: '',
+ data: undefined,
+ onPush: null,
+ onPull: null,
+};
+
+/******************************************************************************/
+
+const widget = qs$('#cloudWidget');
+if ( widget === null ) { return; }
+
+self.cloud.datakey = dom.attr(widget, 'data-cloud-entry') || '';
+if ( self.cloud.datakey === '' ) { return; }
+
+/******************************************************************************/
+
+const fetchStorageUsed = async function() {
+ let elem = qs$(widget, '#cloudCapacity');
+ if ( dom.cl.has(elem, 'hide') ) { return; }
+ const result = await vAPI.messaging.send('cloudWidget', {
+ what: 'cloudUsed',
+ datakey: self.cloud.datakey,
+ });
+ if ( result instanceof Object === false ) {
+ dom.cl.add(elem, 'hide');
+ return;
+ }
+ const units = ' ' + i18n$('genericBytes');
+ elem.title = result.max.toLocaleString() + units;
+ const total = (result.total / result.max * 100).toFixed(1);
+ elem = elem.firstElementChild;
+ elem.style.width = `${total}%`;
+ elem.title = result.total.toLocaleString() + units;
+ const used = (result.used / result.total * 100).toFixed(1);
+ elem = elem.firstElementChild;
+ elem.style.width = `${used}%`;
+ elem.title = result.used.toLocaleString() + units;
+};
+
+/******************************************************************************/
+
+const fetchCloudData = async function() {
+ const info = qs$(widget, '#cloudInfo');
+
+ const entry = await vAPI.messaging.send('cloudWidget', {
+ what: 'cloudPull',
+ datakey: self.cloud.datakey,
+ });
+
+ const hasData = entry instanceof Object;
+ if ( hasData === false ) {
+ dom.attr('#cloudPull', 'disabled', '');
+ dom.attr('#cloudPullAndMerge', 'disabled', '');
+ info.textContent = '...\n...';
+ return entry;
+ }
+
+ self.cloud.data = entry.data;
+
+ dom.attr('#cloudPull', 'disabled', null);
+ dom.attr('#cloudPullAndMerge', 'disabled', null);
+
+ const timeOptions = {
+ weekday: 'short',
+ year: 'numeric',
+ month: 'short',
+ day: 'numeric',
+ hour: 'numeric',
+ minute: 'numeric',
+ second: 'numeric',
+ timeZoneName: 'short'
+ };
+
+ const time = new Date(entry.tstamp);
+ info.textContent =
+ entry.source + '\n' +
+ time.toLocaleString('fullwide', timeOptions);
+};
+
+/******************************************************************************/
+
+const pushData = async function() {
+ if ( typeof self.cloud.onPush !== 'function' ) { return; }
+
+ const error = await vAPI.messaging.send('cloudWidget', {
+ what: 'cloudPush',
+ datakey: self.cloud.datakey,
+ data: self.cloud.onPush(),
+ });
+ const failed = typeof error === 'string';
+ dom.cl.toggle('#cloudPush', 'error', failed);
+ dom.text('#cloudError', failed ? error : '');
+ if ( failed ) { return; }
+ fetchCloudData();
+ fetchStorageUsed();
+};
+
+/******************************************************************************/
+
+const pullData = function() {
+ if ( typeof self.cloud.onPull === 'function' ) {
+ self.cloud.onPull(self.cloud.data, false);
+ }
+ dom.cl.remove('#cloudPush', 'error');
+ dom.text('#cloudError', '');
+};
+
+/******************************************************************************/
+
+const pullAndMergeData = function() {
+ if ( typeof self.cloud.onPull === 'function' ) {
+ self.cloud.onPull(self.cloud.data, true);
+ }
+};
+
+/******************************************************************************/
+
+const openOptions = function() {
+ const input = qs$('#cloudDeviceName');
+ input.value = self.cloud.options.deviceName;
+ dom.attr(input, 'placeholder', self.cloud.options.defaultDeviceName);
+ dom.cl.add('#cloudOptions', 'show');
+};
+
+/******************************************************************************/
+
+const closeOptions = function(ev) {
+ const root = qs$('#cloudOptions');
+ if ( ev.target !== root ) { return; }
+ dom.cl.remove(root, 'show');
+};
+
+/******************************************************************************/
+
+const submitOptions = async function() {
+ dom.cl.remove('#cloudOptions', 'show');
+
+ const options = await vAPI.messaging.send('cloudWidget', {
+ what: 'cloudSetOptions',
+ options: {
+ deviceName: qs$('#cloudDeviceName').value
+ },
+ });
+ if ( options instanceof Object ) {
+ self.cloud.options = options;
+ }
+};
+
+/******************************************************************************/
+
+const onInitialize = function(options) {
+ if ( options instanceof Object === false ) { return; }
+ if ( options.enabled !== true ) { return; }
+ self.cloud.options = options;
+
+ const xhr = new XMLHttpRequest();
+ xhr.open('GET', 'cloud-ui.html', true);
+ xhr.overrideMimeType('text/html;charset=utf-8');
+ xhr.responseType = 'text';
+ xhr.onload = function() {
+ this.onload = null;
+ const parser = new DOMParser(),
+ parsed = parser.parseFromString(this.responseText, 'text/html'),
+ fromParent = parsed.body;
+ while ( fromParent.firstElementChild !== null ) {
+ widget.appendChild(
+ document.adoptNode(fromParent.firstElementChild)
+ );
+ }
+
+ faIconsInit(widget);
+
+ i18n.render(widget);
+ dom.cl.remove(widget, 'hide');
+
+ dom.on('#cloudPush', 'click', ( ) => { pushData(); });
+ dom.on('#cloudPull', 'click', pullData);
+ dom.on('#cloudPullAndMerge', 'click', pullAndMergeData);
+ dom.on('#cloudCog', 'click', openOptions);
+ dom.on('#cloudOptions', 'click', closeOptions);
+ dom.on('#cloudOptionsSubmit', 'click', ( ) => { submitOptions(); });
+
+ fetchCloudData().then(result => {
+ if ( typeof result !== 'string' ) { return; }
+ dom.cl.add('#cloudPush', 'error');
+ dom.text('#cloudError', result);
+ });
+ fetchStorageUsed();
+ };
+ xhr.send();
+};
+
+vAPI.messaging.send('cloudWidget', {
+ what: 'cloudGetOptions',
+}).then(options => {
+ onInitialize(options);
+});
+
+/******************************************************************************/
+
+})();
diff --git a/src/js/code-viewer.js b/src/js/code-viewer.js
new file mode 100644
index 0000000..f11289a
--- /dev/null
+++ b/src/js/code-viewer.js
@@ -0,0 +1,311 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2023-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* globals CodeMirror, uBlockDashboard, beautifier */
+
+'use strict';
+
+/******************************************************************************/
+
+import { dom, qs$ } from './dom.js';
+import { getActualTheme } from './theme.js';
+
+/******************************************************************************/
+
+const urlToDocMap = new Map();
+const params = new URLSearchParams(document.location.search);
+let currentURL = '';
+
+const cmEditor = new CodeMirror(qs$('#content'), {
+ autofocus: true,
+ gutters: [ 'CodeMirror-linenumbers' ],
+ lineNumbers: true,
+ lineWrapping: true,
+ matchBrackets: true,
+ styleActiveLine: {
+ nonEmpty: true,
+ },
+});
+
+uBlockDashboard.patchCodeMirrorEditor(cmEditor);
+
+vAPI.messaging.send('dom', { what: 'uiStyles' }).then(response => {
+ if ( typeof response !== 'object' || response === null ) { return; }
+ if ( getActualTheme(response.uiTheme) === 'dark' ) {
+ dom.cl.add('#content .cm-s-default', 'cm-s-night');
+ dom.cl.remove('#content .cm-s-default', 'cm-s-default');
+ }
+});
+
+// Convert resource URLs into clickable links to code viewer
+cmEditor.addOverlay({
+ re: /\b(?:href|src)=["']([^"']+)["']/g,
+ match: null,
+ token: function(stream) {
+ if ( stream.sol() ) {
+ this.re.lastIndex = 0;
+ this.match = this.re.exec(stream.string);
+ }
+ if ( this.match === null ) {
+ stream.skipToEnd();
+ return null;
+ }
+ const end = this.re.lastIndex - 1;
+ const beg = end - this.match[1].length;
+ if ( stream.pos < beg ) {
+ stream.pos = beg;
+ return null;
+ }
+ if ( stream.pos < end ) {
+ stream.pos = end;
+ return 'href';
+ }
+ if ( stream.pos < this.re.lastIndex ) {
+ stream.pos = this.re.lastIndex;
+ this.match = this.re.exec(stream.string);
+ return null;
+ }
+ stream.skipToEnd();
+ return null;
+ },
+});
+
+urlToDocMap.set('', cmEditor.getDoc());
+
+/******************************************************************************/
+
+async function fetchResource(url) {
+ let response, text;
+ const fetchOptions = {
+ method: 'GET',
+ referrer: '',
+ };
+ if ( urlToDocMap.has(url) ) {
+ fetchOptions.cache = 'reload';
+ }
+ try {
+ response = await fetch(url, fetchOptions);
+ text = await response.text();
+ } catch(reason) {
+ text = String(reason);
+ }
+ let mime = response && response.headers.get('Content-Type') || '';
+ mime = mime.replace(/\s*;.*$/, '').trim();
+ const beautifierOptions = {
+ end_with_newline: true,
+ indent_size: 3,
+ js: {
+ max_preserve_newlines: 3,
+ }
+ };
+ switch ( mime ) {
+ case 'text/css':
+ text = beautifier.css(text, beautifierOptions);
+ break;
+ case 'text/html':
+ case 'application/xhtml+xml':
+ case 'application/xml':
+ case 'image/svg+xml':
+ text = beautifier.html(text, beautifierOptions);
+ break;
+ case 'text/javascript':
+ case 'application/javascript':
+ case 'application/x-javascript':
+ text = beautifier.js(text, beautifierOptions);
+ break;
+ case 'application/json':
+ text = beautifier.js(text, beautifierOptions);
+ break;
+ default:
+ break;
+ }
+ return { mime, text };
+}
+
+/******************************************************************************/
+
+function addPastURLs(url) {
+ const list = qs$('#pastURLs');
+ let current;
+ for ( let i = 0; i < list.children.length; i++ ) {
+ const span = list.children[i];
+ dom.cl.remove(span, 'selected');
+ if ( span.textContent !== url ) { continue; }
+ current = span;
+ }
+ if ( url === '' ) { return; }
+ if ( current === undefined ) {
+ current = document.createElement('span');
+ current.textContent = url;
+ list.prepend(current);
+ }
+ dom.cl.add(current, 'selected');
+}
+
+/******************************************************************************/
+
+function setInputURL(url) {
+ const input = qs$('#header input[type="url"]');
+ if ( url === input.value ) { return; }
+ dom.attr(input, 'value', url);
+ input.value = url;
+}
+
+/******************************************************************************/
+
+async function setURL(resourceURL) {
+ // For convenience, remove potentially existing quotes around the URL
+ if ( /^(["']).+\1$/.test(resourceURL) ) {
+ resourceURL = resourceURL.slice(1, -1);
+ }
+ let afterURL;
+ if ( resourceURL !== '' ) {
+ try {
+ const url = new URL(resourceURL, currentURL || undefined);
+ url.hash = '';
+ afterURL = url.href;
+ } catch(ex) {
+ }
+ if ( afterURL === undefined ) { return; }
+ } else {
+ afterURL = '';
+ }
+ if ( afterURL !== '' && /^https?:\/\/./.test(afterURL) === false ) {
+ return;
+ }
+ if ( afterURL === currentURL ) {
+ if ( afterURL !== resourceURL ) {
+ setInputURL(afterURL);
+ }
+ return;
+ }
+ let afterDoc = urlToDocMap.get(afterURL);
+ if ( afterDoc === undefined ) {
+ const r = await fetchResource(afterURL) || { mime: '', text: '' };
+ afterDoc = new CodeMirror.Doc(r.text, r.mime || '');
+ urlToDocMap.set(afterURL, afterDoc);
+ }
+ swapDoc(afterDoc);
+ currentURL = afterURL;
+ setInputURL(afterURL);
+ const a = qs$('.cm-search-widget .sourceURL');
+ dom.attr(a, 'href', afterURL);
+ dom.attr(a, 'title', afterURL);
+ addPastURLs(afterURL);
+ // For unknown reasons, calling focus() synchronously does not work...
+ vAPI.defer.once(1).then(( ) => { cmEditor.focus(); });
+}
+
+/******************************************************************************/
+
+function removeURL(url) {
+ if ( url === '' ) { return; }
+ const list = qs$('#pastURLs');
+ let foundAt = -1;
+ for ( let i = 0; i < list.children.length; i++ ) {
+ const span = list.children[i];
+ if ( span.textContent !== url ) { continue; }
+ foundAt = i;
+ }
+ if ( foundAt === -1 ) { return; }
+ list.children[foundAt].remove();
+ if ( foundAt >= list.children.length ) {
+ foundAt = list.children.length - 1;
+ }
+ const afterURL = foundAt !== -1
+ ? list.children[foundAt].textContent
+ : '';
+ setURL(afterURL);
+ urlToDocMap.delete(url);
+}
+
+/******************************************************************************/
+
+function swapDoc(doc) {
+ const r = cmEditor.swapDoc(doc);
+ if ( self.searchThread ) {
+ self.searchThread.setHaystack(cmEditor.getValue());
+ }
+ const input = qs$('.cm-search-widget-input input[type="search"]');
+ if ( input.value !== '' ) {
+ qs$('.cm-search-widget').dispatchEvent(new Event('input'));
+ }
+ return r;
+}
+
+/******************************************************************************/
+
+async function start() {
+ await setURL(params.get('url'));
+
+ dom.on('#header input[type="url"]', 'change', ev => {
+ setURL(ev.target.value);
+ });
+
+ dom.on('#reloadURL', 'click', ( ) => {
+ const input = qs$('#header input[type="url"]');
+ const url = input.value;
+ const beforeDoc = swapDoc(new CodeMirror.Doc('', ''));
+ fetchResource(url).then(r => {
+ if ( urlToDocMap.has(url) === false ) { return; }
+ const afterDoc = r !== undefined
+ ? new CodeMirror.Doc(r.text, r.mime || '')
+ : beforeDoc;
+ urlToDocMap.set(url, afterDoc);
+ if ( currentURL !== url ) { return; }
+ swapDoc(afterDoc);
+ });
+ });
+
+ dom.on('#removeURL', 'click', ( ) => {
+ removeURL(qs$('#header input[type="url"]').value);
+ });
+
+ dom.on('#pastURLs', 'mousedown', 'span', ev => {
+ setURL(ev.target.textContent);
+ });
+
+ dom.on('#content', 'click', '.cm-href', ev => {
+ const target = ev.target;
+ const urlParts = [ target.textContent ];
+ let previous = target;
+ for (;;) {
+ previous = previous.previousSibling;
+ if ( previous === null ) { break; }
+ if ( previous.nodeType !== 1 ) { break; }
+ if ( previous.classList.contains('cm-href') === false ) { break; }
+ urlParts.unshift(previous.textContent);
+ }
+ let next = target;
+ for (;;) {
+ next = next.nextSibling;
+ if ( next === null ) { break; }
+ if ( next.nodeType !== 1 ) { break; }
+ if ( next.classList.contains('cm-href') === false ) { break; }
+ urlParts.push(next.textContent);
+ }
+ setURL(urlParts.join(''));
+ });
+}
+
+start();
+
+/******************************************************************************/
diff --git a/src/js/codemirror/search-thread.js b/src/js/codemirror/search-thread.js
new file mode 100644
index 0000000..3a4416f
--- /dev/null
+++ b/src/js/codemirror/search-thread.js
@@ -0,0 +1,199 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2020-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+(( ) => {
+// >>>>> start of local scope
+
+/******************************************************************************/
+
+// Worker context
+
+if (
+ self.WorkerGlobalScope instanceof Object &&
+ self instanceof self.WorkerGlobalScope
+) {
+ let content = '';
+
+ const doSearch = function(details) {
+ const reEOLs = /\n\r|\r\n|\n|\r/g;
+ const t1 = Date.now() + 750;
+
+ let reSearch;
+ try {
+ reSearch = new RegExp(details.pattern, details.flags);
+ } catch(ex) {
+ return;
+ }
+
+ const response = [];
+ const maxOffset = content.length;
+ let iLine = 0;
+ let iOffset = 0;
+ let size = 0;
+ while ( iOffset < maxOffset ) {
+ // Find next match
+ const match = reSearch.exec(content);
+ if ( match === null ) { break; }
+ // Find number of line breaks between last and current match.
+ reEOLs.lastIndex = 0;
+ const eols = content.slice(iOffset, match.index).match(reEOLs);
+ if ( Array.isArray(eols) ) {
+ iLine += eols.length;
+ }
+ // Store line
+ response.push(iLine);
+ size += 1;
+ // Find next line break.
+ reEOLs.lastIndex = reSearch.lastIndex;
+ const eol = reEOLs.exec(content);
+ iOffset = eol !== null
+ ? reEOLs.lastIndex
+ : content.length;
+ reSearch.lastIndex = iOffset;
+ iLine += 1;
+ // Quit if this takes too long
+ if ( (size & 0x3FF) === 0 && Date.now() >= t1 ) { break; }
+ }
+
+ return response;
+ };
+
+ self.onmessage = function(e) {
+ const msg = e.data;
+
+ switch ( msg.what ) {
+ case 'setHaystack':
+ content = msg.content;
+ break;
+
+ case 'doSearch':
+ const response = doSearch(msg);
+ self.postMessage({ id: msg.id, response });
+ break;
+ }
+ };
+
+ return;
+}
+
+/******************************************************************************/
+
+// Main context
+
+{
+ const workerTTL = { min: 5 };
+ const pendingResponses = new Map();
+ const workerTTLTimer = vAPI.defer.create(( ) => {
+ shutdown();
+ });
+
+ let worker;
+ let messageId = 1;
+
+ const onWorkerMessage = function(e) {
+ const msg = e.data;
+ const resolver = pendingResponses.get(msg.id);
+ if ( resolver === undefined ) { return; }
+ pendingResponses.delete(msg.id);
+ resolver(msg.response);
+ };
+
+ const cancelPendingTasks = function() {
+ for ( const resolver of pendingResponses.values() ) {
+ resolver();
+ }
+ pendingResponses.clear();
+ };
+
+ const destroy = function() {
+ shutdown();
+ self.searchThread = undefined;
+ };
+
+ const shutdown = function() {
+ if ( worker === undefined ) { return; }
+ workerTTLTimer.off();
+ worker.terminate();
+ worker.onmessage = undefined;
+ worker = undefined;
+ cancelPendingTasks();
+ };
+
+ const init = function() {
+ if ( self.searchThread instanceof Object === false ) { return; }
+ if ( worker === undefined ) {
+ worker = new Worker('js/codemirror/search-thread.js');
+ worker.onmessage = onWorkerMessage;
+ }
+ workerTTLTimer.offon(workerTTL);
+ };
+
+ const needHaystack = function() {
+ return worker instanceof Object === false;
+ };
+
+ const setHaystack = function(content) {
+ init();
+ worker.postMessage({ what: 'setHaystack', content });
+ };
+
+ const search = function(query, overwrite = true) {
+ init();
+ if ( worker instanceof Object === false ) {
+ return Promise.resolve();
+ }
+ if ( overwrite ) {
+ cancelPendingTasks();
+ }
+ const id = messageId++;
+ worker.postMessage({
+ what: 'doSearch',
+ id,
+ pattern: query.source,
+ flags: query.flags,
+ isRE: query instanceof RegExp
+ });
+ return new Promise(resolve => {
+ pendingResponses.set(id, resolve);
+ });
+ };
+
+ self.addEventListener(
+ 'beforeunload',
+ ( ) => { destroy(); },
+ { once: true }
+ );
+
+ self.searchThread = { needHaystack, setHaystack, search, shutdown };
+}
+
+/******************************************************************************/
+
+// <<<<< end of local scope
+})();
+
+/******************************************************************************/
+
+void 0;
diff --git a/src/js/codemirror/search.js b/src/js/codemirror/search.js
new file mode 100644
index 0000000..477e9cc
--- /dev/null
+++ b/src/js/codemirror/search.js
@@ -0,0 +1,504 @@
+// The following code is heavily based on the standard CodeMirror
+// search addon found at: https://codemirror.net/addon/search/search.js
+// I added/removed and modified code in order to get a closer match to a
+// browser's built-in find-in-page feature which are just enough for
+// uBlock Origin.
+//
+// This file was originally wholly imported from:
+// https://github.com/codemirror/CodeMirror/blob/3e1bb5fff682f8f6cbfaef0e56c61d62403d4798/addon/search/search.js
+//
+// And has been modified over time to better suit uBO's usage and coding style:
+// https://github.com/gorhill/uBlock/commits/master/src/js/codemirror/search.js
+//
+// The original copyright notice is reproduced below:
+
+// =====
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+// Define search commands. Depends on dialog.js or another
+// implementation of the openDialog method.
+
+// Replace works a little oddly -- it will do the replace on the next
+// Ctrl-G (or whatever is bound to findNext) press. You prevent a
+// replace by making sure the match is no longer selected when hitting
+// Ctrl-G.
+// =====
+
+'use strict';
+
+import { dom, qs$ } from '../dom.js';
+import { i18n$ } from '../i18n.js';
+
+{
+ const CodeMirror = self.CodeMirror;
+
+ const searchOverlay = function(query, caseInsensitive) {
+ if ( typeof query === 'string' )
+ query = new RegExp(
+ query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&'),
+ caseInsensitive ? 'gi' : 'g'
+ );
+ else if ( !query.global )
+ query = new RegExp(query.source, query.ignoreCase ? 'gi' : 'g');
+
+ return {
+ token: function(stream) {
+ query.lastIndex = stream.pos;
+ const match = query.exec(stream.string);
+ if ( match && match.index === stream.pos ) {
+ stream.pos += match[0].length || 1;
+ return 'searching';
+ } else if ( match ) {
+ stream.pos = match.index;
+ } else {
+ stream.skipToEnd();
+ }
+ }
+ };
+ };
+
+ const searchWidgetKeydownHandler = function(cm, ev) {
+ const keyName = CodeMirror.keyName(ev);
+ if ( !keyName ) { return; }
+ CodeMirror.lookupKey(
+ keyName,
+ cm.getOption('keyMap'),
+ function(command) {
+ if ( widgetCommandHandler(cm, command) ) {
+ ev.preventDefault();
+ ev.stopPropagation();
+ }
+ }
+ );
+ };
+
+ const searchWidgetInputHandler = function(cm, ev) {
+ const state = getSearchState(cm);
+ if ( ev.isTrusted !== true ) {
+ if ( state.queryText === '' ) {
+ clearSearch(cm);
+ } else {
+ cm.operation(function() {
+ startSearch(cm, state);
+ });
+ }
+ return;
+ }
+ if ( queryTextFromSearchWidget(cm) === state.queryText ) { return; }
+ state.queryTimer.offon(350);
+ };
+
+ const searchWidgetClickHandler = function(cm, ev) {
+ const tcl = ev.target.classList;
+ if ( tcl.contains('cm-search-widget-up') ) {
+ findNext(cm, -1);
+ } else if ( tcl.contains('cm-search-widget-down') ) {
+ findNext(cm, 1);
+ } else if ( tcl.contains('cm-linter-widget-up') ) {
+ findNextError(cm, -1);
+ } else if ( tcl.contains('cm-linter-widget-down') ) {
+ findNextError(cm, 1);
+ }
+ if ( ev.target.localName !== 'input' ) {
+ ev.preventDefault();
+ } else {
+ ev.stopImmediatePropagation();
+ }
+ };
+
+ const queryTextFromSearchWidget = function(cm) {
+ return getSearchState(cm).widget.querySelector('input[type="search"]').value;
+ };
+
+ const queryTextToSearchWidget = function(cm, q) {
+ const input = getSearchState(cm).widget.querySelector('input[type="search"]');
+ if ( typeof q === 'string' && q !== input.value ) {
+ input.value = q;
+ }
+ input.setSelectionRange(0, input.value.length);
+ input.focus();
+ };
+
+ const SearchState = function(cm) {
+ this.query = null;
+ this.panel = null;
+ const widgetParent = document.querySelector('.cm-search-widget-template').cloneNode(true);
+ this.widget = widgetParent.children[0];
+ this.widget.addEventListener('keydown', searchWidgetKeydownHandler.bind(null, cm));
+ this.widget.addEventListener('input', searchWidgetInputHandler.bind(null, cm));
+ this.widget.addEventListener('mousedown', searchWidgetClickHandler.bind(null, cm));
+ if ( typeof cm.addPanel === 'function' ) {
+ this.panel = cm.addPanel(this.widget);
+ }
+ this.queryText = '';
+ this.dirty = true;
+ this.lines = [];
+ cm.on('changes', (cm, changes) => {
+ for ( const change of changes ) {
+ if ( change.text.length !== 0 || change.removed !== 0 ) {
+ this.dirty = true;
+ break;
+ }
+ }
+ });
+ cm.on('cursorActivity', cm => {
+ updateCount(cm);
+ });
+ this.queryTimer = vAPI.defer.create(( ) => {
+ findCommit(cm, 0);
+ });
+ };
+
+ // We want the search widget to behave as if the focus was on the
+ // CodeMirror editor.
+
+ const reSearchCommands = /^(?:find|findNext|findPrev|newlineAndIndent)$/;
+
+ const widgetCommandHandler = function(cm, command) {
+ if ( reSearchCommands.test(command) === false ) { return false; }
+ const queryText = queryTextFromSearchWidget(cm);
+ if ( command === 'find' ) {
+ queryTextToSearchWidget(cm);
+ return true;
+ }
+ if ( queryText.length !== 0 ) {
+ findNext(cm, command === 'findPrev' ? -1 : 1);
+ }
+ return true;
+ };
+
+ const getSearchState = function(cm) {
+ return cm.state.search || (cm.state.search = new SearchState(cm));
+ };
+
+ const queryCaseInsensitive = function(query) {
+ return typeof query === 'string' && query === query.toLowerCase();
+ };
+
+ // Heuristic: if the query string is all lowercase, do a case insensitive search.
+ const getSearchCursor = function(cm, query, pos) {
+ return cm.getSearchCursor(
+ query,
+ pos,
+ { caseFold: queryCaseInsensitive(query), multiline: false }
+ );
+ };
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/658
+ // Modified to backslash-escape ONLY widely-used control characters.
+ const parseString = function(string) {
+ return string.replace(/\\[nrt\\]/g, match => {
+ if ( match === '\\n' ) { return '\n'; }
+ if ( match === '\\r' ) { return '\r'; }
+ if ( match === '\\t' ) { return '\t'; }
+ if ( match === '\\\\' ) { return '\\'; }
+ return match;
+ });
+ };
+
+ const reEscape = /[.*+\-?^${}()|[\]\\]/g;
+
+ // Must always return a RegExp object.
+ //
+ // Assume case-sensitivity if there is at least one uppercase in plain
+ // query text.
+ const parseQuery = function(query) {
+ let flags = 'i';
+ let reParsed = query.match(/^\/(.+)\/([iu]*)$/);
+ if ( reParsed !== null ) {
+ try {
+ const re = new RegExp(reParsed[1], reParsed[2]);
+ query = re.source;
+ flags = re.flags;
+ }
+ catch (e) {
+ reParsed = null;
+ }
+ }
+ if ( reParsed === null ) {
+ if ( /[A-Z]/.test(query) ) { flags = ''; }
+ query = parseString(query).replace(reEscape, '\\$&');
+ }
+ if ( typeof query === 'string' ? query === '' : query.test('') ) {
+ query = 'x^';
+ }
+ return new RegExp(query, 'gm' + flags);
+ };
+
+ let intlNumberFormat;
+
+ const formatNumber = function(n) {
+ if ( intlNumberFormat === undefined ) {
+ intlNumberFormat = null;
+ if ( Intl.NumberFormat instanceof Function ) {
+ const intl = new Intl.NumberFormat(undefined, {
+ notation: 'compact',
+ maximumSignificantDigits: 3
+ });
+ if (
+ intl.resolvedOptions instanceof Function &&
+ intl.resolvedOptions().hasOwnProperty('notation')
+ ) {
+ intlNumberFormat = intl;
+ }
+ }
+ }
+ return n > 10000 && intlNumberFormat instanceof Object
+ ? intlNumberFormat.format(n)
+ : n.toLocaleString();
+ };
+
+ const updateCount = function(cm) {
+ const state = getSearchState(cm);
+ const lines = state.lines;
+ const current = cm.getCursor().line;
+ let l = 0;
+ let r = lines.length;
+ let i = -1;
+ while ( l < r ) {
+ i = l + r >>> 1;
+ const candidate = lines[i];
+ if ( current === candidate ) { break; }
+ if ( current < candidate ) {
+ r = i;
+ } else /* if ( current > candidate ) */ {
+ l = i + 1;
+ }
+ }
+ let text = '';
+ if ( i !== -1 ) {
+ text = formatNumber(i + 1);
+ if ( lines[i] !== current ) {
+ text = '~' + text;
+ }
+ text = text + '\xA0/\xA0';
+ }
+ const count = lines.length;
+ text += formatNumber(count);
+ const span = state.widget.querySelector('.cm-search-widget-count');
+ span.textContent = text;
+ span.title = count.toLocaleString();
+ };
+
+ const startSearch = function(cm, state) {
+ state.query = parseQuery(state.queryText);
+ if ( state.overlay !== undefined ) {
+ cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query));
+ }
+ state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query));
+ cm.addOverlay(state.overlay);
+ if ( state.dirty || self.searchThread.needHaystack() ) {
+ self.searchThread.setHaystack(cm.getValue());
+ state.dirty = false;
+ }
+ self.searchThread.search(state.query).then(lines => {
+ if ( Array.isArray(lines) === false ) { return; }
+ state.lines = lines;
+ const count = lines.length;
+ updateCount(cm);
+ if ( state.annotate !== undefined ) {
+ state.annotate.clear();
+ state.annotate = undefined;
+ }
+ if ( count === 0 ) { return; }
+ state.annotate = cm.annotateScrollbar('CodeMirror-search-match');
+ const annotations = [];
+ let lineBeg = -1;
+ let lineEnd = -1;
+ for ( const line of lines ) {
+ if ( lineBeg === -1 ) {
+ lineBeg = line;
+ lineEnd = line + 1;
+ continue;
+ } else if ( line === lineEnd ) {
+ lineEnd = line + 1;
+ continue;
+ }
+ annotations.push({
+ from: { line: lineBeg, ch: 0 },
+ to: { line: lineEnd, ch: 0 }
+ });
+ lineBeg = -1;
+ }
+ if ( lineBeg !== -1 ) {
+ annotations.push({
+ from: { line: lineBeg, ch: 0 },
+ to: { line: lineEnd, ch: 0 }
+ });
+ }
+ state.annotate.update(annotations);
+ });
+ state.widget.setAttribute('data-query', state.queryText);
+ // Ensure the caret is visible
+ const input = state.widget.querySelector('.cm-search-widget-input input');
+ input.selectionStart = input.selectionStart;
+ };
+
+ const findNext = function(cm, dir, callback) {
+ cm.operation(function() {
+ const state = getSearchState(cm);
+ if ( !state.query ) { return; }
+ let cursor = getSearchCursor(
+ cm,
+ state.query,
+ dir <= 0 ? cm.getCursor('from') : cm.getCursor('to')
+ );
+ const previous = dir < 0;
+ if (!cursor.find(previous)) {
+ cursor = getSearchCursor(
+ cm,
+ state.query,
+ previous
+ ? CodeMirror.Pos(cm.lastLine())
+ : CodeMirror.Pos(cm.firstLine(), 0)
+ );
+ if (!cursor.find(previous)) return;
+ }
+ cm.setSelection(cursor.from(), cursor.to());
+ const { clientHeight } = cm.getScrollInfo();
+ cm.scrollIntoView(
+ { from: cursor.from(), to: cursor.to() },
+ clientHeight >>> 1
+ );
+ if (callback) callback(cursor.from(), cursor.to());
+ });
+ };
+
+ const findNextError = function(cm, dir) {
+ const doc = cm.getDoc();
+ const cursor = cm.getCursor('from');
+ const cursorLine = cursor.line;
+ const start = dir < 0 ? 0 : cursorLine + 1;
+ const end = dir < 0 ? cursorLine : doc.lineCount();
+ let found = -1;
+ doc.eachLine(start, end, lineHandle => {
+ const markers = lineHandle.gutterMarkers || null;
+ if ( markers === null ) { return; }
+ const marker = markers['CodeMirror-lintgutter'];
+ if ( marker === undefined ) { return; }
+ if ( marker.dataset.error !== 'y' ) { return; }
+ const line = lineHandle.lineNo();
+ if ( dir < 0 ) {
+ found = line;
+ return;
+ }
+ found = line;
+ return true;
+ });
+ if ( found === -1 || found === cursorLine ) { return; }
+ cm.getDoc().setCursor(found);
+ const { clientHeight } = cm.getScrollInfo();
+ cm.scrollIntoView({ line: found, ch: 0 }, clientHeight >>> 1);
+ };
+
+ const clearSearch = function(cm, hard) {
+ cm.operation(function() {
+ const state = getSearchState(cm);
+ if ( state.query ) {
+ state.query = state.queryText = null;
+ }
+ state.lines = [];
+ if ( state.overlay !== undefined ) {
+ cm.removeOverlay(state.overlay);
+ state.overlay = undefined;
+ }
+ if ( state.annotate ) {
+ state.annotate.clear();
+ state.annotate = undefined;
+ }
+ state.widget.removeAttribute('data-query');
+ if ( hard ) {
+ state.panel.clear();
+ state.panel = null;
+ state.widget = null;
+ cm.state.search = null;
+ }
+ });
+ };
+
+ const findCommit = function(cm, dir) {
+ const state = getSearchState(cm);
+ state.queryTimer.off();
+ const queryText = queryTextFromSearchWidget(cm);
+ if ( queryText === state.queryText ) { return; }
+ state.queryText = queryText;
+ if ( state.queryText === '' ) {
+ clearSearch(cm);
+ } else {
+ cm.operation(function() {
+ startSearch(cm, state);
+ findNext(cm, dir);
+ });
+ }
+ };
+
+ const findCommand = function(cm) {
+ let queryText = cm.getSelection() || undefined;
+ if ( !queryText ) {
+ const word = cm.findWordAt(cm.getCursor());
+ queryText = cm.getRange(word.anchor, word.head);
+ if ( /^\W|\W$/.test(queryText) ) {
+ queryText = undefined;
+ }
+ cm.setCursor(word.anchor);
+ }
+ queryTextToSearchWidget(cm, queryText);
+ findCommit(cm, 1);
+ };
+
+ const findNextCommand = function(cm) {
+ const state = getSearchState(cm);
+ if ( state.query ) { return findNext(cm, 1); }
+ };
+
+ const findPrevCommand = function(cm) {
+ const state = getSearchState(cm);
+ if ( state.query ) { return findNext(cm, -1); }
+ };
+
+ {
+ const searchWidgetTemplate =
+ '<div class="cm-search-widget-template" style="display:none;">' +
+ '<div class="cm-search-widget">' +
+ '<span class="cm-search-widget-input">' +
+ '<span class="fa-icon fa-icon-ro">search</span>&ensp;' +
+ '<input type="search" spellcheck="false">&emsp;' +
+ '<span class="cm-search-widget-up cm-search-widget-button fa-icon">angle-up</span>&nbsp;' +
+ '<span class="cm-search-widget-down cm-search-widget-button fa-icon fa-icon-vflipped">angle-up</span>&emsp;' +
+ '<span class="cm-search-widget-count"></span>' +
+ '</span>' +
+ '<span class="cm-linter-widget" data-lint="0">' +
+ '<span class="cm-linter-widget-count"></span>&emsp;' +
+ '<span class="cm-linter-widget-up cm-search-widget-button fa-icon">angle-up</span>&nbsp;' +
+ '<span class="cm-linter-widget-down cm-search-widget-button fa-icon fa-icon-vflipped">angle-up</span>&emsp;' +
+ '</span>' +
+ '<span>' +
+ '<a class="fa-icon sourceURL" href>external-link</a>' +
+ '</span>' +
+ '</div>' +
+ '</div>';
+ const domParser = new DOMParser();
+ const doc = domParser.parseFromString(searchWidgetTemplate, 'text/html');
+ const widgetTemplate = document.adoptNode(doc.body.firstElementChild);
+ document.body.appendChild(widgetTemplate);
+ }
+
+ CodeMirror.commands.find = findCommand;
+ CodeMirror.commands.findNext = findNextCommand;
+ CodeMirror.commands.findPrev = findPrevCommand;
+
+ CodeMirror.defineInitHook(function(cm) {
+ getSearchState(cm);
+ cm.on('linterDone', details => {
+ const linterWidget = qs$('.cm-linter-widget');
+ const count = details.errorCount;
+ if ( linterWidget.dataset.lint === `${count}` ) { return; }
+ linterWidget.dataset.lint = `${count}`;
+ dom.text(
+ qs$(linterWidget, '.cm-linter-widget-count'),
+ i18n$('linterMainReport').replace('{{count}}', count.toLocaleString())
+ );
+ });
+ });
+}
diff --git a/src/js/codemirror/ubo-dynamic-filtering.js b/src/js/codemirror/ubo-dynamic-filtering.js
new file mode 100644
index 0000000..d0709a4
--- /dev/null
+++ b/src/js/codemirror/ubo-dynamic-filtering.js
@@ -0,0 +1,239 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* global CodeMirror */
+
+'use strict';
+
+CodeMirror.defineMode('ubo-dynamic-filtering', ( ) => {
+
+ const validSwitches = new Set([
+ 'no-strict-blocking:',
+ 'no-popups:',
+ 'no-cosmetic-filtering:',
+ 'no-remote-fonts:',
+ 'no-large-media:',
+ 'no-csp-reports:',
+ 'no-scripting:',
+ ]);
+ const validSwitcheStates = new Set([
+ 'true',
+ 'false',
+ ]);
+ const validHnRuleTypes = new Set([
+ '*',
+ '3p',
+ 'image',
+ 'inline-script',
+ '1p-script',
+ '3p-script',
+ '3p-frame',
+ ]);
+ const invalidURLRuleTypes = new Set([
+ 'doc',
+ 'main_frame',
+ ]);
+ const validActions = new Set([
+ 'block',
+ 'allow',
+ 'noop',
+ ]);
+ const hnValidator = new URL(self.location.href);
+ const reBadHn = /[%]|^\.|\.$/;
+ const slices = [];
+ let sliceIndex = 0;
+ let sliceCount = 0;
+ let hostnameToDomainMap = new Map();
+ let psl;
+
+ const isValidHostname = hnin => {
+ if ( hnin === '*' ) { return true; }
+ hnValidator.hostname = '_';
+ try {
+ hnValidator.hostname = hnin;
+ } catch(_) {
+ return false;
+ }
+ const hnout = hnValidator.hostname;
+ return hnout !== '_' && hnout !== '' && reBadHn.test(hnout) === false;
+ };
+
+ const addSlice = (len, style = null) => {
+ let i = sliceCount;
+ if ( i === slices.length ) {
+ slices[i] = { len: 0, style: null };
+ }
+ const entry = slices[i];
+ entry.len = len;
+ entry.style = style;
+ sliceCount += 1;
+ };
+
+ const addMatchSlice = (match, style = null) => {
+ const len = match !== null ? match[0].length : 0;
+ addSlice(len, style);
+ return match !== null ? match.input.slice(len) : '';
+ };
+
+ const addMatchHnSlices = (match, style = null) => {
+ const hn = match[0];
+ if ( hn === '*' ) {
+ return addMatchSlice(match, style);
+ }
+ let dn = hostnameToDomainMap.get(hn) || '';
+ if ( dn === '' && psl !== undefined ) {
+ dn = /(\d|\])$/.test(hn) ? hn : (psl.getDomain(hn) || hn);
+ }
+ const entityBeg = hn.length - dn.length;
+ if ( entityBeg !== 0 ) {
+ addSlice(entityBeg, style);
+ }
+ let entityEnd = dn.indexOf('.');
+ if ( entityEnd === -1 ) { entityEnd = dn.length; }
+ addSlice(entityEnd, style !== null ? `${style} strong` : 'strong');
+ if ( entityEnd < dn.length ) {
+ addSlice(dn.length - entityEnd, style);
+ }
+ return match.input.slice(hn.length);
+ };
+
+ const makeSlices = (stream, opts) => {
+ sliceIndex = 0;
+ sliceCount = 0;
+ let { string } = stream;
+ if ( string === '...' ) { return; }
+ const { sortType } = opts;
+ const reNotToken = /^\s+/;
+ const reToken = /^\S+/;
+ const tokens = [];
+ // leading whitespaces
+ let match = reNotToken.exec(string);
+ if ( match !== null ) {
+ string = addMatchSlice(match);
+ }
+ // first token
+ match = reToken.exec(string);
+ if ( match === null ) { return; }
+ tokens.push(match[0]);
+ // hostname or switch
+ const isSwitchRule = validSwitches.has(match[0]);
+ if ( isSwitchRule ) {
+ string = addMatchSlice(match, sortType === 0 ? 'sortkey' : null);
+ } else if ( isValidHostname(match[0]) ) {
+ if ( sortType === 1 ) {
+ string = addMatchHnSlices(match, 'sortkey');
+ } else {
+ string = addMatchHnSlices(match, null);
+ }
+ } else {
+ string = addMatchSlice(match, 'error');
+ }
+ // whitespaces before second token
+ match = reNotToken.exec(string);
+ if ( match === null ) { return; }
+ string = addMatchSlice(match);
+ // second token
+ match = reToken.exec(string);
+ if ( match === null ) { return; }
+ tokens.push(match[0]);
+ // hostname or url
+ const isURLRule = isSwitchRule === false && match[0].indexOf('://') > 0;
+ if ( isURLRule ) {
+ string = addMatchSlice(match, sortType === 2 ? 'sortkey' : null);
+ } else if ( isValidHostname(match[0]) === false ) {
+ string = addMatchSlice(match, 'error');
+ } else if ( sortType === 1 && isSwitchRule || sortType === 2 ) {
+ string = addMatchHnSlices(match, 'sortkey');
+ } else {
+ string = addMatchHnSlices(match, null);
+ }
+ // whitespaces before third token
+ match = reNotToken.exec(string);
+ if ( match === null ) { return; }
+ string = addMatchSlice(match);
+ // third token
+ match = reToken.exec(string);
+ if ( match === null ) { return; }
+ tokens.push(match[0]);
+ // rule type or switch state
+ if ( isSwitchRule ) {
+ string = validSwitcheStates.has(match[0])
+ ? addMatchSlice(match, match[0] === 'true' ? 'blockrule' : 'allowrule')
+ : addMatchSlice(match, 'error');
+ } else if ( isURLRule ) {
+ string = invalidURLRuleTypes.has(match[0])
+ ? addMatchSlice(match, 'error')
+ : addMatchSlice(match);
+ } else if ( tokens[1] === '*' ) {
+ string = validHnRuleTypes.has(match[0])
+ ? addMatchSlice(match)
+ : addMatchSlice(match, 'error');
+ } else {
+ string = match[0] === '*'
+ ? addMatchSlice(match)
+ : addMatchSlice(match, 'error');
+ }
+ // whitespaces before fourth token
+ match = reNotToken.exec(string);
+ if ( match === null ) { return; }
+ string = addMatchSlice(match);
+ // fourth token
+ match = reToken.exec(string);
+ if ( match === null ) { return; }
+ tokens.push(match[0]);
+ string = isSwitchRule || validActions.has(match[0]) === false
+ ? addMatchSlice(match, 'error')
+ : addMatchSlice(match, `${match[0]}rule`);
+ // whitespaces before end of line
+ match = reNotToken.exec(string);
+ if ( match === null ) { return; }
+ string = addMatchSlice(match);
+ // any token beyond fourth token is invalid
+ match = reToken.exec(string);
+ if ( match !== null ) {
+ string = addMatchSlice(null, 'error');
+ }
+ };
+
+ const token = function(stream) {
+ if ( stream.sol() ) {
+ makeSlices(stream, this);
+ }
+ if ( sliceIndex >= sliceCount ) {
+ stream.skipToEnd(stream);
+ return null;
+ }
+ const { len, style } = slices[sliceIndex++];
+ if ( len === 0 ) {
+ stream.skipToEnd();
+ } else {
+ stream.pos += len;
+ }
+ return style;
+ };
+
+ return {
+ token,
+ sortType: 1,
+ setHostnameToDomainMap: a => { hostnameToDomainMap = a; },
+ setPSL: a => { psl = a; },
+ };
+});
diff --git a/src/js/codemirror/ubo-static-filtering.js b/src/js/codemirror/ubo-static-filtering.js
new file mode 100644
index 0000000..ac1b048
--- /dev/null
+++ b/src/js/codemirror/ubo-static-filtering.js
@@ -0,0 +1,1200 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2018-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* global CodeMirror */
+
+'use strict';
+
+/******************************************************************************/
+
+import * as sfp from '../static-filtering-parser.js';
+import { dom, qs$ } from '../dom.js';
+
+/******************************************************************************/
+
+const redirectNames = new Map();
+const scriptletNames = new Map();
+const preparseDirectiveEnv = [];
+const preparseDirectiveHints = [];
+const originHints = [];
+let hintHelperRegistered = false;
+
+/******************************************************************************/
+
+CodeMirror.defineOption('trustedSource', false, (cm, state) => {
+ if ( typeof state !== 'boolean' ) { return; }
+ self.dispatchEvent(new CustomEvent('trustedSource', {
+ detail: state,
+ }));
+});
+
+CodeMirror.defineOption('trustedScriptletTokens', undefined, (cm, tokens) => {
+ if ( tokens === undefined || tokens === null ) { return; }
+ if ( typeof tokens[Symbol.iterator] !== 'function' ) { return; }
+ self.dispatchEvent(new CustomEvent('trustedScriptletTokens', {
+ detail: new Set(tokens),
+ }));
+});
+
+/******************************************************************************/
+
+CodeMirror.defineMode('ubo-static-filtering', function() {
+ const astParser = new sfp.AstFilterParser({
+ interactive: true,
+ nativeCssHas: vAPI.webextFlavor.env.includes('native_css_has'),
+ });
+ const astWalker = astParser.getWalker();
+ let currentWalkerNode = 0;
+ let lastNetOptionType = 0;
+
+ const redirectTokenStyle = node => {
+ const rawToken = astParser.getNodeString(node || currentWalkerNode);
+ const { token } = sfp.parseRedirectValue(rawToken);
+ return redirectNames.has(token) ? 'value' : 'value warning';
+ };
+
+ const nodeHasError = node => {
+ return astParser.getNodeFlags(
+ node || currentWalkerNode, sfp.NODE_FLAG_ERROR
+ ) !== 0;
+ };
+
+ const colorFromAstNode = function() {
+ if ( astParser.nodeIsEmptyString(currentWalkerNode) ) { return '+'; }
+ if ( nodeHasError() ) { return 'error'; }
+ const nodeType = astParser.getNodeType(currentWalkerNode);
+ switch ( nodeType ) {
+ case sfp.NODE_TYPE_WHITESPACE:
+ return '';
+ case sfp.NODE_TYPE_COMMENT:
+ if ( astWalker.canGoDown() ) { break; }
+ return 'comment';
+ case sfp.NODE_TYPE_COMMENT_URL:
+ return 'comment link';
+ case sfp.NODE_TYPE_IGNORE:
+ return 'comment';
+ case sfp.NODE_TYPE_PREPARSE_DIRECTIVE:
+ case sfp.NODE_TYPE_PREPARSE_DIRECTIVE_VALUE:
+ return 'directive';
+ case sfp.NODE_TYPE_PREPARSE_DIRECTIVE_IF_VALUE: {
+ const raw = astParser.getNodeString(currentWalkerNode);
+ const state = sfp.utils.preparser.evaluateExpr(raw, preparseDirectiveEnv);
+ return state ? 'positive strong' : 'negative strong';
+ }
+ case sfp.NODE_TYPE_EXT_OPTIONS_ANCHOR:
+ return astParser.getFlags(sfp.AST_FLAG_IS_EXCEPTION)
+ ? 'tag strong'
+ : 'def strong';
+ case sfp.NODE_TYPE_EXT_DECORATION:
+ return 'def';
+ case sfp.NODE_TYPE_EXT_PATTERN_RAW:
+ if ( astWalker.canGoDown() ) { break; }
+ return 'variable';
+ case sfp.NODE_TYPE_EXT_PATTERN_COSMETIC:
+ case sfp.NODE_TYPE_EXT_PATTERN_HTML:
+ return 'variable';
+ case sfp.NODE_TYPE_EXT_PATTERN_RESPONSEHEADER:
+ case sfp.NODE_TYPE_EXT_PATTERN_SCRIPTLET:
+ if ( astWalker.canGoDown() ) { break; }
+ return 'variable';
+ case sfp.NODE_TYPE_EXT_PATTERN_SCRIPTLET_TOKEN: {
+ const token = astParser.getNodeString(currentWalkerNode);
+ if ( scriptletNames.has(token) === false ) {
+ return 'warning';
+ }
+ return 'variable';
+ }
+ case sfp.NODE_TYPE_EXT_PATTERN_SCRIPTLET_ARG:
+ return 'variable';
+ case sfp.NODE_TYPE_NET_EXCEPTION:
+ return 'tag strong';
+ case sfp.NODE_TYPE_NET_PATTERN:
+ if ( astWalker.canGoDown() ) { break; }
+ if ( astParser.isRegexPattern() ) {
+ if ( astParser.getNodeFlags(currentWalkerNode, sfp.NODE_FLAG_PATTERN_UNTOKENIZABLE) !== 0 ) {
+ return 'variable warning';
+ }
+ return 'variable notice';
+ }
+ return 'variable';
+ case sfp.NODE_TYPE_NET_PATTERN_PART:
+ return 'variable';
+ case sfp.NODE_TYPE_NET_PATTERN_PART_SPECIAL:
+ return 'keyword strong';
+ case sfp.NODE_TYPE_NET_PATTERN_PART_UNICODE:
+ return 'variable unicode';
+ case sfp.NODE_TYPE_NET_PATTERN_LEFT_HNANCHOR:
+ case sfp.NODE_TYPE_NET_PATTERN_LEFT_ANCHOR:
+ case sfp.NODE_TYPE_NET_PATTERN_RIGHT_ANCHOR:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_NOT:
+ return 'keyword strong';
+ case sfp.NODE_TYPE_NET_OPTIONS_ANCHOR:
+ case sfp.NODE_TYPE_NET_OPTION_SEPARATOR:
+ lastNetOptionType = 0;
+ return 'def strong';
+ case sfp.NODE_TYPE_NET_OPTION_NAME_UNKNOWN:
+ lastNetOptionType = 0;
+ return 'error';
+ case sfp.NODE_TYPE_NET_OPTION_NAME_1P:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_STRICT1P:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_3P:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_STRICT3P:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_ALL:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_BADFILTER:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_CNAME:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_CSP:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_CSS:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_DENYALLOW:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_DOC:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_EHIDE:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_EMPTY:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_FONT:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_FRAME:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_FROM:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_GENERICBLOCK:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_GHIDE:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_HEADER:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_IMAGE:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_IMPORTANT:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_INLINEFONT:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_INLINESCRIPT:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_MATCHCASE:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_MEDIA:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_METHOD:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_MP4:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_NOOP:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_OBJECT:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_OTHER:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_PING:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_POPUNDER:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_POPUP:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECT:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_REMOVEPARAM:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_SCRIPT:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_SHIDE:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_TO:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_XHR:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_WEBRTC:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_WEBSOCKET:
+ lastNetOptionType = nodeType;
+ return 'def';
+ case sfp.NODE_TYPE_NET_OPTION_ASSIGN:
+ return 'def';
+ case sfp.NODE_TYPE_NET_OPTION_VALUE:
+ if ( astWalker.canGoDown() ) { break; }
+ switch ( lastNetOptionType ) {
+ case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECT:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE:
+ return redirectTokenStyle();
+ default:
+ break;
+ }
+ return 'value';
+ case sfp.NODE_TYPE_OPTION_VALUE_NOT:
+ return 'keyword strong';
+ case sfp.NODE_TYPE_OPTION_VALUE_DOMAIN:
+ return 'value';
+ case sfp.NODE_TYPE_OPTION_VALUE_SEPARATOR:
+ return 'def';
+ default:
+ break;
+ }
+ return '+';
+ };
+
+ self.addEventListener('trustedSource', ev => {
+ astParser.options.trustedSource = ev.detail;
+ });
+
+ self.addEventListener('trustedScriptletTokens', ev => {
+ astParser.options.trustedScriptletTokens = ev.detail;
+ });
+
+ return {
+ lineComment: '!',
+ token: function(stream) {
+ if ( stream.sol() ) {
+ astParser.parse(stream.string);
+ if ( astParser.getFlags(sfp.AST_FLAG_UNSUPPORTED) !== 0 ) {
+ stream.skipToEnd();
+ return 'error';
+ }
+ if ( astParser.getType() === sfp.AST_TYPE_NONE ) {
+ stream.skipToEnd();
+ return 'comment';
+ }
+ currentWalkerNode = astWalker.reset();
+ } else if ( nodeHasError() ) {
+ currentWalkerNode = astWalker.right();
+ } else {
+ currentWalkerNode = astWalker.next();
+ }
+ let style = '';
+ while ( currentWalkerNode !== 0 ) {
+ style = colorFromAstNode(stream);
+ if ( style !== '+' ) { break; }
+ currentWalkerNode = astWalker.next();
+ }
+ if ( style === '+' ) {
+ stream.skipToEnd();
+ return null;
+ }
+ stream.pos = astParser.getNodeStringEnd(currentWalkerNode);
+ if ( astParser.isNetworkFilter() ) {
+ return style ? `line-cm-net ${style}` : 'line-cm-net';
+ }
+ if ( astParser.isExtendedFilter() ) {
+ let flavor = '';
+ if ( astParser.isCosmeticFilter() ) {
+ flavor = 'line-cm-ext-dom';
+ } else if ( astParser.isScriptletFilter() ) {
+ flavor = 'line-cm-ext-js';
+ } else if ( astParser.isHtmlFilter() ) {
+ flavor = 'line-cm-ext-html';
+ }
+ if ( flavor !== '' ) {
+ style = `${flavor} ${style}`;
+ }
+ }
+ style = style.trim();
+ return style !== '' ? style : null;
+ },
+ parser: astParser,
+ };
+});
+
+/******************************************************************************/
+
+// Following code is for auto-completion. Reference:
+// https://codemirror.net/demo/complete.html
+
+CodeMirror.defineOption('uboHints', null, (cm, hints) => {
+ if ( hints instanceof Object === false ) { return; }
+ if ( Array.isArray(hints.redirectResources) ) {
+ for ( const [ name, desc ] of hints.redirectResources ) {
+ const displayText = desc.aliasOf !== ''
+ ? `${name} (${desc.aliasOf})`
+ : '';
+ if ( desc.canRedirect ) {
+ redirectNames.set(name, displayText);
+ }
+ if ( desc.canInject && name.endsWith('.js') ) {
+ scriptletNames.set(name.slice(0, -3), displayText);
+ }
+ }
+ }
+ if ( Array.isArray(hints.preparseDirectiveEnv)) {
+ preparseDirectiveEnv.length = 0;
+ preparseDirectiveEnv.push(...hints.preparseDirectiveEnv);
+ }
+ if ( Array.isArray(hints.preparseDirectiveHints)) {
+ preparseDirectiveHints.push(...hints.preparseDirectiveHints);
+ }
+ if ( Array.isArray(hints.originHints) ) {
+ originHints.length = 0;
+ for ( const hint of hints.originHints ) {
+ originHints.push(hint);
+ }
+ }
+ if ( hintHelperRegistered ) { return; }
+ hintHelperRegistered = true;
+ initHints();
+});
+
+function initHints() {
+ const astParser = new sfp.AstFilterParser({
+ interactive: true,
+ nativeCssHas: vAPI.webextFlavor.env.includes('native_css_has'),
+ });
+ const proceduralOperatorNames = new Map(
+ Array.from(sfp.proceduralOperatorTokens)
+ .filter(item => (item[1] & 0b01) !== 0)
+ );
+ const excludedHints = new Set([
+ 'genericblock',
+ 'object-subrequest',
+ 'rewrite',
+ 'webrtc',
+ ]);
+
+ const pickBestHints = function(cursor, seedLeft, seedRight, hints) {
+ const seed = (seedLeft + seedRight).trim();
+ const out = [];
+ // First, compare against whole seed
+ for ( const hint of hints ) {
+ const text = hint instanceof Object
+ ? hint.displayText || hint.text
+ : hint;
+ if ( text.startsWith(seed) === false ) { continue; }
+ out.push(hint);
+ }
+ if ( out.length !== 0 ) {
+ return {
+ from: { line: cursor.line, ch: cursor.ch - seedLeft.length },
+ to: { line: cursor.line, ch: cursor.ch + seedRight.length },
+ list: out,
+ };
+ }
+ // If no match, try again with a different heuristic: valid hints are
+ // those matching left seed, not matching right seed but right seed is
+ // found to be a valid hint. This is to take care of cases like:
+ //
+ // *$script,redomain=example.org
+ // ^
+ // + cursor position
+ //
+ // In such case, [ redirect=, redirect-rule= ] should be returned
+ // as valid hints.
+ for ( const hint of hints ) {
+ const text = hint instanceof Object
+ ? hint.displayText || hint.text
+ : hint;
+ if ( seedLeft.length === 0 ) { continue; }
+ if ( text.startsWith(seedLeft) === false ) { continue; }
+ if ( hints.includes(seedRight) === false ) { continue; }
+ out.push(hint);
+ }
+ if ( out.length !== 0 ) {
+ return {
+ from: { line: cursor.line, ch: cursor.ch - seedLeft.length },
+ to: { line: cursor.line, ch: cursor.ch },
+ list: out,
+ };
+ }
+ // If no match, try again with a different heuristic: valid hints are
+ // those containing seed as a substring. This is to take care of cases
+ // like:
+ //
+ // *$script,redirect=gif
+ // ^
+ // + cursor position
+ //
+ // In such case, [ 1x1.gif, 1x1-transparent.gif ] should be returned
+ // as valid hints.
+ for ( const hint of hints ) {
+ const text = hint instanceof Object
+ ? hint.displayText || hint.text
+ : hint;
+ if ( seedLeft.length === 1 ) {
+ if ( text.startsWith(seedLeft) === false ) { continue; }
+ } else if ( text.includes(seed) === false ) { continue; }
+ out.push(hint);
+ }
+ if ( out.length !== 0 ) {
+ return {
+ from: { line: cursor.line, ch: cursor.ch - seedLeft.length },
+ to: { line: cursor.line, ch: cursor.ch + seedRight.length },
+ list: out,
+ };
+ }
+ // If still no match, try again with a different heuristic: valid hints
+ // are those containing left seed as a substring. This is to take care
+ // of cases like:
+ //
+ // *$script,redirect=gifdomain=example.org
+ // ^
+ // + cursor position
+ //
+ // In such case, [ 1x1.gif, 1x1-transparent.gif ] should be returned
+ // as valid hints.
+ for ( const hint of hints ) {
+ const text = hint instanceof Object
+ ? hint.displayText || hint.text
+ : hint;
+ if ( text.includes(seedLeft) === false ) { continue; }
+ out.push(hint);
+ }
+ if ( out.length !== 0 ) {
+ return {
+ from: { line: cursor.line, ch: cursor.ch - seedLeft.length },
+ to: { line: cursor.line, ch: cursor.ch },
+ list: out,
+ };
+ }
+ };
+
+ const getOriginHints = function(cursor, line, suffix = '') {
+ const beg = cursor.ch;
+ const matchLeft = /[^,|=~]*$/.exec(line.slice(0, beg));
+ const matchRight = /^[^#,|]*/.exec(line.slice(beg));
+ if ( matchLeft === null || matchRight === null ) { return; }
+ const hints = [];
+ for ( const text of originHints ) {
+ hints.push(text + suffix);
+ }
+ return pickBestHints(cursor, matchLeft[0], matchRight[0], hints);
+ };
+
+ const getNetPatternHints = function(cursor, line) {
+ if ( /\|\|[\w.-]*$/.test(line.slice(0, cursor.ch)) ) {
+ return getOriginHints(cursor, line, '^');
+ }
+ // Maybe a static extended filter is meant to be crafted.
+ if ( /[^\w\x80-\xF4#,.-]/.test(line) === false ) {
+ return getOriginHints(cursor, line);
+ }
+ };
+
+ const getNetOptionHints = function(cursor, seedLeft, seedRight) {
+ const isNegated = seedLeft.startsWith('~');
+ if ( isNegated ) {
+ seedLeft = seedLeft.slice(1);
+ }
+ const assignPos = seedRight.indexOf('=');
+ if ( assignPos !== -1 ) { seedRight = seedRight.slice(0, assignPos); }
+ const isException = astParser.isException();
+ const hints = [];
+ for ( let [ text, desc ] of sfp.netOptionTokenDescriptors ) {
+ if ( excludedHints.has(text) ) { continue; }
+ if ( isNegated && desc.canNegate !== true ) { continue; }
+ if ( isException ) {
+ if ( desc.blockOnly ) { continue; }
+ } else {
+ if ( desc.allowOnly ) { continue; }
+ if ( (assignPos === -1) && desc.mustAssign ) {
+ text += '=';
+ }
+ }
+ hints.push(text);
+ }
+ return pickBestHints(cursor, seedLeft, seedRight, hints);
+ };
+
+ const getNetRedirectHints = function(cursor, seedLeft, seedRight) {
+ const hints = [];
+ for ( const text of redirectNames.keys() ) {
+ if ( text.startsWith('abp-resource:') ) { continue; }
+ hints.push(text);
+ }
+ return pickBestHints(cursor, seedLeft, seedRight, hints);
+ };
+
+ const getNetHints = function(cursor, line) {
+ const patternNode = astParser.getBranchFromType(sfp.NODE_TYPE_NET_PATTERN_RAW);
+ if ( patternNode === 0 ) { return; }
+ const patternEnd = astParser.getNodeStringEnd(patternNode);
+ const beg = cursor.ch;
+ if ( beg <= patternEnd ) {
+ return getNetPatternHints(cursor, line);
+ }
+ const lineBefore = line.slice(0, beg);
+ const lineAfter = line.slice(beg);
+ let matchLeft = /[^$,]*$/.exec(lineBefore);
+ let matchRight = /^[^,]*/.exec(lineAfter);
+ if ( matchLeft === null || matchRight === null ) { return; }
+ const assignPos = matchLeft[0].indexOf('=');
+ if ( assignPos === -1 ) {
+ return getNetOptionHints(cursor, matchLeft[0], matchRight[0]);
+ }
+ if ( /^(redirect(-rule)?|rewrite)=/.test(matchLeft[0]) ) {
+ return getNetRedirectHints(
+ cursor,
+ matchLeft[0].slice(assignPos + 1),
+ matchRight[0]
+ );
+ }
+ if ( /^(domain|from)=/.test(matchLeft[0]) ) {
+ return getOriginHints(cursor, line);
+ }
+ };
+
+ const getExtSelectorHints = function(cursor, line) {
+ const beg = cursor.ch;
+ // Special selector case: `^responseheader`
+ {
+ const match = /#\^([a-z]+)$/.exec(line.slice(0, beg));
+ if (
+ match !== null &&
+ 'responseheader'.startsWith(match[1]) &&
+ line.slice(beg) === ''
+ ) {
+ return pickBestHints(
+ cursor,
+ match[1],
+ '',
+ [ 'responseheader()' ]
+ );
+ }
+ }
+ // Procedural operators
+ const matchLeft = /#\^?.*:([^:]*)$/.exec(line.slice(0, beg));
+ const matchRight = /^([a-z-]*)\(?/.exec(line.slice(beg));
+ if ( matchLeft === null || matchRight === null ) { return; }
+ const isStaticDOM = matchLeft[0].indexOf('^') !== -1;
+ const hints = [];
+ for ( let [ text, bits ] of proceduralOperatorNames ) {
+ if ( isStaticDOM && (bits & 0b10) !== 0 ) { continue; }
+ hints.push(text);
+ }
+ return pickBestHints(cursor, matchLeft[1], matchRight[1], hints);
+ };
+
+ const getExtHeaderHints = function(cursor, line) {
+ const beg = cursor.ch;
+ const matchLeft = /#\^responseheader\((.*)$/.exec(line.slice(0, beg));
+ const matchRight = /^([^)]*)/.exec(line.slice(beg));
+ if ( matchLeft === null || matchRight === null ) { return; }
+ const hints = [];
+ for ( const hint of sfp.removableHTTPHeaders ) {
+ hints.push(hint);
+ }
+ return pickBestHints(cursor, matchLeft[1], matchRight[1], hints);
+ };
+
+ const getExtScriptletHints = function(cursor, line) {
+ const beg = cursor.ch;
+ const matchLeft = /#\+\js\(([^,]*)$/.exec(line.slice(0, beg));
+ const matchRight = /^([^,)]*)/.exec(line.slice(beg));
+ if ( matchLeft === null || matchRight === null ) { return; }
+ const hints = [];
+ for ( const [ text, displayText ] of scriptletNames ) {
+ const hint = { text };
+ if ( displayText !== '' ) {
+ hint.displayText = displayText;
+ }
+ hints.push(hint);
+ }
+ return pickBestHints(cursor, matchLeft[1], matchRight[1], hints);
+ };
+
+ const getCommentHints = function(cursor, line) {
+ const beg = cursor.ch;
+ if ( line.startsWith('!#if ') ) {
+ const matchLeft = /^!#if !?(\w*)$/.exec(line.slice(0, beg));
+ const matchRight = /^\w*/.exec(line.slice(beg));
+ if ( matchLeft === null || matchRight === null ) { return; }
+ return pickBestHints(
+ cursor,
+ matchLeft[1],
+ matchRight[0],
+ preparseDirectiveHints
+ );
+ }
+ if ( line.startsWith('!#') && line !== '!#endif' ) {
+ const matchLeft = /^!#(\w*)$/.exec(line.slice(0, beg));
+ const matchRight = /^\w*/.exec(line.slice(beg));
+ if ( matchLeft === null || matchRight === null ) { return; }
+ const hints = [ 'if ', 'endif\n', 'include ' ];
+ return pickBestHints(cursor, matchLeft[1], matchRight[0], hints);
+ }
+ };
+
+ CodeMirror.registerHelper('hint', 'ubo-static-filtering', function(cm) {
+ const cursor = cm.getCursor();
+ const line = cm.getLine(cursor.line);
+ astParser.parse(line);
+ if ( astParser.isExtendedFilter() ) {
+ const anchorNode = astParser.getBranchFromType(sfp.NODE_TYPE_EXT_OPTIONS_ANCHOR);
+ if ( anchorNode === 0 ) { return; }
+ let hints;
+ if ( cursor.ch <= astParser.getNodeStringBeg(anchorNode) ) {
+ hints = getOriginHints(cursor, line);
+ } else if ( astParser.isScriptletFilter() ) {
+ hints = getExtScriptletHints(cursor, line);
+ } else if ( astParser.isResponseheaderFilter() ) {
+ hints = getExtHeaderHints(cursor, line);
+ } else {
+ hints = getExtSelectorHints(cursor, line);
+ }
+ return hints;
+ }
+ if ( astParser.isNetworkFilter() ) {
+ return getNetHints(cursor, line);
+ }
+ if ( astParser.isComment() ) {
+ return getCommentHints(cursor, line);
+ }
+ return getOriginHints(cursor, line);
+ });
+}
+
+/******************************************************************************/
+
+CodeMirror.registerHelper('fold', 'ubo-static-filtering', (( ) => {
+ const foldIfEndif = function(startLineNo, startLine, cm) {
+ const lastLineNo = cm.lastLine();
+ let endLineNo = startLineNo;
+ let depth = 1;
+ while ( endLineNo < lastLineNo ) {
+ endLineNo += 1;
+ const line = cm.getLine(endLineNo);
+ if ( line.startsWith('!#endif') ) {
+ depth -= 1;
+ if ( depth === 0 ) {
+ return {
+ from: CodeMirror.Pos(startLineNo, startLine.length),
+ to: CodeMirror.Pos(endLineNo, 0)
+ };
+ }
+ }
+ if ( line.startsWith('!#if') ) {
+ depth += 1;
+ }
+ }
+ };
+
+ const foldInclude = function(startLineNo, startLine, cm) {
+ const lastLineNo = cm.lastLine();
+ let endLineNo = startLineNo + 1;
+ if ( endLineNo >= lastLineNo ) { return; }
+ if ( cm.getLine(endLineNo).startsWith('! >>>>>>>> ') === false ) {
+ return;
+ }
+ while ( endLineNo < lastLineNo ) {
+ endLineNo += 1;
+ const line = cm.getLine(endLineNo);
+ if ( line.startsWith('! <<<<<<<< ') ) {
+ return {
+ from: CodeMirror.Pos(startLineNo, startLine.length),
+ to: CodeMirror.Pos(endLineNo, line.length)
+ };
+ }
+ }
+ };
+
+ return function(cm, start) {
+ const startLineNo = start.line;
+ const startLine = cm.getLine(startLineNo);
+ if ( startLine.startsWith('!#if') ) {
+ return foldIfEndif(startLineNo, startLine, cm);
+ }
+ if ( startLine.startsWith('!#include ') ) {
+ return foldInclude(startLineNo, startLine, cm);
+ }
+ };
+})());
+
+/******************************************************************************/
+
+// Linter
+
+{
+ const astParser = new sfp.AstFilterParser({
+ interactive: true,
+ nativeCssHas: vAPI.webextFlavor.env.includes('native_css_has'),
+ });
+
+ const changeset = [];
+ let changesetTimer;
+
+ const includeset = new Set();
+ let errorCount = 0;
+
+ const ifendifSet = new Set();
+ let ifendifSetChanged = false;
+
+ const extractMarkerDetails = (doc, lineHandle) => {
+ if ( astParser.isUnsupported() ) {
+ return { lint: 'error', msg: 'Unsupported filter syntax' };
+ }
+ if ( astParser.hasError() ) {
+ let msg = 'Invalid filter';
+ switch ( astParser.astError ) {
+ case sfp.AST_ERROR_UNSUPPORTED:
+ msg = `${msg}: Unsupported filter syntax`;
+ break;
+ case sfp.AST_ERROR_REGEX:
+ msg = `${msg}: Bad regular expression`;
+ break;
+ case sfp.AST_ERROR_PATTERN:
+ msg = `${msg}: Bad pattern`;
+ break;
+ case sfp.AST_ERROR_DOMAIN_NAME:
+ msg = `${msg}: Bad domain name`;
+ break;
+ case sfp.AST_ERROR_OPTION_BADVALUE:
+ msg = `${msg}: Bad value assigned to a valid option`;
+ break;
+ case sfp.AST_ERROR_OPTION_DUPLICATE:
+ msg = `${msg}: Duplicate filter option`;
+ break;
+ case sfp.AST_ERROR_OPTION_UNKNOWN:
+ msg = `${msg}: Unsupported filter option`;
+ break;
+ case sfp.AST_ERROR_IF_TOKEN_UNKNOWN:
+ msg = `${msg}: Unknown preparsing token`;
+ break;
+ case sfp.AST_ERROR_UNTRUSTED_SOURCE:
+ msg = `${msg}: Filter requires trusted source`;
+ break;
+ default:
+ if ( astParser.isCosmeticFilter() && astParser.result.error ) {
+ msg = `${msg}: ${astParser.result.error}`;
+ }
+ break;
+ }
+ return { lint: 'error', msg };
+ }
+ if ( astParser.astType !== sfp.AST_TYPE_COMMENT ) { return; }
+ if ( astParser.astTypeFlavor !== sfp.AST_TYPE_COMMENT_PREPARSER ) {
+ if ( astParser.raw.startsWith('! <<<<<<<< ') === false ) { return; }
+ for ( const include of includeset ) {
+ if ( astParser.raw.endsWith(include) === false ) { continue; }
+ includeset.delete(include);
+ return { lint: 'include-end' };
+ }
+ return;
+ }
+ if ( /^\s*!#if \S+/.test(astParser.raw) ) {
+ return {
+ lint: 'if-start',
+ data: {
+ state: sfp.utils.preparser.evaluateExpr(
+ astParser.getTypeString(sfp.NODE_TYPE_PREPARSE_DIRECTIVE_IF_VALUE),
+ preparseDirectiveEnv
+ ) ? 'y' : 'n'
+ }
+ };
+ }
+ if ( /^\s*!#endif\b/.test(astParser.raw) ) {
+ return { lint: 'if-end' };
+ }
+ const match = /^\s*!#include\s*(\S+)/.exec(astParser.raw);
+ if ( match === null ) { return; }
+ const nextLineHandle = doc.getLineHandle(lineHandle.lineNo() + 1);
+ if ( nextLineHandle === undefined ) { return; }
+ if ( nextLineHandle.text.startsWith('! >>>>>>>> ') === false ) { return; }
+ const includeToken = `/${match[1]}`;
+ if ( nextLineHandle.text.endsWith(includeToken) === false ) { return; }
+ includeset.add(includeToken);
+ return { lint: 'include-start' };
+ };
+
+ const extractMarker = lineHandle => {
+ const markers = lineHandle.gutterMarkers || null;
+ return markers !== null
+ ? markers['CodeMirror-lintgutter'] || null
+ : null;
+ };
+
+ const markerTemplates = {
+ 'error': {
+ node: null,
+ html: [
+ '<div class="CodeMirror-lintmarker" data-lint="error" data-error="y">&nbsp;',
+ '<span class="msg"></span>',
+ '</div>',
+ ],
+ },
+ 'if-start': {
+ node: null,
+ html: [
+ '<div class="CodeMirror-lintmarker" data-lint="if" data-fold="start" data-state="">&nbsp;',
+ '<svg viewBox="0 0 100 100">',
+ '<polygon points="0,0 100,0 50,100" />',
+ '</svg>',
+ '<span class="msg">Mismatched if-endif directive</span>',
+ '</div>',
+ ],
+ },
+ 'if-end': {
+ node: null,
+ html: [
+ '<div class="CodeMirror-lintmarker" data-lint="if" data-fold="end">&nbsp;',
+ '<svg viewBox="0 0 100 100">',
+ '<polygon points="50,0 100,100 0,100" />',
+ '</svg>',
+ '<span class="msg">Mismatched if-endif directive</span>',
+ '</div>',
+ ],
+ },
+ 'include-start': {
+ node: null,
+ html: [
+ '<div class="CodeMirror-lintmarker" data-lint="include" data-fold="start">&nbsp;',
+ '<svg viewBox="0 0 100 100">',
+ '<polygon points="0,0 100,0 50,100" />',
+ '</svg>',
+ '</div>',
+ ],
+ },
+ 'include-end': {
+ node: null,
+ html: [
+ '<div class="CodeMirror-lintmarker" data-lint="include" data-fold="end">&nbsp;',
+ '<svg viewBox="0 0 100 100">',
+ '<polygon points="50,0 100,100 0,100" />',
+ '</svg>',
+ '</div>',
+ ],
+ },
+ };
+
+ const markerFromTemplate = details => {
+ const template = markerTemplates[details.lint];
+ if ( template.node === null ) {
+ const domParser = new DOMParser();
+ const doc = domParser.parseFromString(template.html.join(''), 'text/html');
+ template.node = document.adoptNode(qs$(doc, '.CodeMirror-lintmarker'));
+ }
+ const node = template.node.cloneNode(true);
+ if ( details.data instanceof Object ) {
+ for ( const [ k, v ] of Object.entries(details.data) ) {
+ node.dataset[k] = `${v}`;
+ }
+ }
+ return node;
+ };
+
+ const addMarker = (doc, lineHandle, marker, details) => {
+ if ( marker && marker.dataset.lint !== details.lint ) {
+ doc.setGutterMarker(lineHandle, 'CodeMirror-lintgutter', null);
+ if ( marker.dataset.error === 'y' ) {
+ errorCount -= 1;
+ }
+ if ( marker.dataset.lint === 'if' ) {
+ ifendifSet.delete(lineHandle);
+ ifendifSetChanged = true;
+ }
+ marker = null;
+ }
+ if ( marker === null ) {
+ marker = markerFromTemplate(details);
+ doc.setGutterMarker(lineHandle, 'CodeMirror-lintgutter', marker);
+ if ( marker.dataset.error === 'y' ) {
+ errorCount += 1;
+ }
+ if ( marker.dataset.lint === 'if' ) {
+ ifendifSet.add(lineHandle);
+ ifendifSetChanged = true;
+ }
+ }
+ if ( typeof details.msg !== 'string' || details.msg === '' ) { return; }
+ const msgElem = qs$(marker, '.msg');
+ if ( msgElem === null ) { return; }
+ msgElem.textContent = details.msg;
+ };
+
+ const removeMarker = (doc, lineHandle, marker) => {
+ doc.setGutterMarker(lineHandle, 'CodeMirror-lintgutter', null);
+ if ( marker.dataset.error === 'y' ) {
+ errorCount -= 1;
+ }
+ if ( marker.dataset.lint === 'if' ) {
+ ifendifSet.delete(lineHandle);
+ ifendifSetChanged = true;
+ }
+ };
+
+ // Analyze whether all if-endif are properly paired
+ const processIfendifs = ( ) => {
+ if ( ifendifSet.size === 0 ) { return; }
+ if ( ifendifSetChanged !== true ) { return; }
+ const sortFn = (a, b) => a.lineNo() - b.lineNo();
+ const sorted = Array.from(ifendifSet).sort(sortFn);
+ const bad = [];
+ const stack = [];
+ for ( const line of sorted ) {
+ const marker = extractMarker(line);
+ const fold = marker.dataset.fold;
+ if ( fold === 'start' ) {
+ stack.push(line);
+ } else if ( fold === 'end' ) {
+ if ( stack.length !== 0 ) {
+ if ( marker.dataset.error === 'y' ) {
+ marker.dataset.error = '';
+ errorCount -= 1;
+ }
+ const ifstart = extractMarker(stack.pop());
+ if ( ifstart.dataset.error === 'y' ) {
+ ifstart.dataset.error = '';
+ errorCount -= 1;
+ }
+ } else {
+ bad.push(line);
+ }
+ }
+ }
+ bad.push(...stack);
+ for ( const line of bad ) {
+ const marker = extractMarker(line);
+ marker.dataset.error = 'y';
+ errorCount += 1;
+ }
+ ifendifSetChanged = false;
+ };
+
+ const processDeletion = (doc, change) => {
+ let { from, to } = change;
+ doc.eachLine(from.line, to.line, lineHandle => {
+ const marker = extractMarker(lineHandle);
+ if ( marker === null ) { return; }
+ if ( marker.dataset.error === 'y' ) {
+ marker.dataset.error = '';
+ errorCount -= 1;
+ }
+ ifendifSet.delete(lineHandle);
+ ifendifSetChanged = true;
+ });
+ };
+
+ const processInsertion = (doc, deadline, change) => {
+ let { from, to } = change;
+ doc.eachLine(from, to, lineHandle => {
+ astParser.parse(lineHandle.text);
+ const markerDetails = extractMarkerDetails(doc, lineHandle);
+ const marker = extractMarker(lineHandle);
+ if ( markerDetails !== undefined ) {
+ addMarker(doc, lineHandle, marker, markerDetails);
+ } else if ( marker !== null ) {
+ removeMarker(doc, lineHandle, marker);
+ }
+ from += 1;
+ if ( (from & 0x0F) !== 0 ) { return; }
+ if ( deadline.timeRemaining() !== 0 ) { return; }
+ return true;
+ });
+ if ( from !== to ) {
+ return { from, to };
+ }
+ };
+
+ const processChangeset = (doc, deadline) => {
+ const cm = doc.getEditor();
+ cm.startOperation();
+ while ( changeset.length !== 0 ) {
+ const change = processInsertion(doc, deadline, changeset.shift());
+ if ( change === undefined ) { continue; }
+ changeset.unshift(change);
+ break;
+ }
+ cm.endOperation();
+ if ( changeset.length !== 0 ) {
+ return processChangesetAsync(doc);
+ }
+ includeset.clear();
+ processIfendifs(doc);
+ CodeMirror.signal(doc.getEditor(), 'linterDone', { errorCount });
+ };
+
+ const processChangesetAsync = doc => {
+ if ( changesetTimer !== undefined ) { return; }
+ changesetTimer = self.requestIdleCallback(deadline => {
+ changesetTimer = undefined;
+ processChangeset(doc, deadline);
+ });
+ };
+
+ const onChanges = (cm, changes) => {
+ if ( changes.length === 0 ) { return; }
+ const doc = cm.getDoc();
+ for ( const change of changes ) {
+ const from = change.from.line;
+ const to = from + change.text.length;
+ changeset.push({ from, to });
+ }
+ processChangesetAsync(doc);
+ };
+
+ const onBeforeChanges = (cm, change) => {
+ const doc = cm.getDoc();
+ processDeletion(doc, change);
+ };
+
+ const foldRangeFinder = (cm, from) => {
+ const lineNo = from.line;
+ const lineHandle = cm.getDoc().getLineHandle(lineNo);
+ const marker = extractMarker(lineHandle);
+ if ( marker === null ) { return; }
+ if ( marker.dataset.fold === undefined ) { return; }
+ const foldName = marker.dataset.lint;
+ from.ch = lineHandle.text.length;
+ const to = { line: 0, ch: 0 };
+ const doc = cm.getDoc();
+ let depth = 0;
+ doc.eachLine(from.line, doc.lineCount(), lineHandle => {
+ const marker = extractMarker(lineHandle);
+ if ( marker === null ) { return; }
+ if ( marker.dataset.lint === foldName && marker.dataset.fold === 'start' ) {
+ depth += 1;
+ return;
+ }
+ if ( marker.dataset.lint !== foldName ) { return; }
+ if ( marker.dataset.fold !== 'end' ) { return; }
+ depth -= 1;
+ if ( depth !== 0 ) { return; }
+ to.line = lineHandle.lineNo();
+ return true;
+ });
+ return { from, to };
+ };
+
+ const onGutterClick = (cm, lineNo, gutterId, ev) => {
+ if ( ev.button !== 0 ) { return; }
+ if ( gutterId !== 'CodeMirror-lintgutter' ) { return; }
+ const doc = cm.getDoc();
+ const lineHandle = doc.getLineHandle(lineNo);
+ const marker = extractMarker(lineHandle);
+ if ( marker === null ) { return; }
+ if ( marker.dataset.fold === 'start' ) {
+ if ( ev.ctrlKey ) {
+ if ( dom.cl.has(marker, 'folded') ) {
+ CodeMirror.commands.unfoldAll(cm);
+ } else {
+ CodeMirror.commands.foldAll(cm);
+ }
+ doc.setCursor(lineNo);
+ return;
+ }
+ cm.foldCode(lineNo, {
+ widget: '\u00A0\u22EF\u00A0',
+ rangeFinder: foldRangeFinder,
+ });
+ return;
+ }
+ if ( marker.dataset.fold === 'end' ) {
+ let depth = 1;
+ let lineNo = lineHandle.lineNo();
+ while ( lineNo-- ) {
+ const prevLineHandle = doc.getLineHandle(lineNo);
+ const markerFrom = extractMarker(prevLineHandle);
+ if ( markerFrom === null ) { continue; }
+ if ( markerFrom.dataset.fold === 'end' ) {
+ depth += 1;
+ } else if ( markerFrom.dataset.fold === 'start' ) {
+ depth -= 1;
+ if ( depth === 0 ) {
+ doc.setCursor(lineNo);
+ break;
+ }
+ }
+ }
+ return;
+ }
+ };
+
+ self.addEventListener('trustedSource', ev => {
+ astParser.options.trustedSource = ev.detail;
+ });
+
+ self.addEventListener('trustedScriptletTokens', ev => {
+ astParser.options.trustedScriptletTokens = ev.detail;
+ });
+
+ CodeMirror.defineInitHook(cm => {
+ cm.on('changes', onChanges);
+ cm.on('beforeChange', onBeforeChanges);
+ cm.on('gutterClick', onGutterClick);
+ cm.on('fold', function(cm, from) {
+ const doc = cm.getDoc();
+ const lineHandle = doc.getLineHandle(from.line);
+ const marker = extractMarker(lineHandle);
+ dom.cl.add(marker, 'folded');
+ });
+ cm.on('unfold', function(cm, from) {
+ const doc = cm.getDoc();
+ const lineHandle = doc.getLineHandle(from.line);
+ const marker = extractMarker(lineHandle);
+ dom.cl.remove(marker, 'folded');
+ });
+ });
+}
+
+/******************************************************************************/
+
+// Enhanced word selection
+
+{
+ const selectWordAt = function(cm, pos) {
+ const { line, ch } = pos;
+ const s = cm.getLine(line);
+ const { type: token } = cm.getTokenAt(pos);
+ let beg, end;
+
+ // Select URL in comments
+ if ( /\bcomment\b/.test(token) && /\blink\b/.test(token) ) {
+ const l = /\S+$/.exec(s.slice(0, ch));
+ if ( l && /^https?:\/\//.test(s.slice(l.index)) ) {
+ const r = /^\S+/.exec(s.slice(ch));
+ if ( r ) {
+ beg = l.index;
+ end = ch + r[0].length;
+ }
+ }
+ }
+
+ // Better word selection for extended filters: prefix
+ else if (
+ /\bline-cm-ext-(?:dom|html|js)\b/.test(token) &&
+ /\bvalue\b/.test(token)
+ ) {
+ const l = /[^,.]*$/i.exec(s.slice(0, ch));
+ const r = /^[^#,]*/i.exec(s.slice(ch));
+ if ( l && r ) {
+ beg = l.index;
+ end = ch + r[0].length;
+ }
+ }
+
+ // Better word selection for cosmetic and HTML filters: suffix
+ else if ( /\bline-cm-ext-(?:dom|html)\b/.test(token) ) {
+ const l = /[#.]?[a-z0-9_-]+$/i.exec(s.slice(0, ch));
+ const r = /^[a-z0-9_-]+/i.exec(s.slice(ch));
+ if ( l && r ) {
+ beg = l.index;
+ end = ch + r[0].length;
+ if ( /\bdef\b/.test(cm.getTokenTypeAt({ line, ch: beg + 1 })) ) {
+ beg += 1;
+ }
+ }
+ }
+
+ // Better word selection for network filters
+ else if ( /\bline-cm-net\b/.test(token) ) {
+ if ( /\bvalue\b/.test(token) ) {
+ const l = /[^ ,.=|]*$/i.exec(s.slice(0, ch));
+ const r = /^[^ #,|]*/i.exec(s.slice(ch));
+ if ( l && r ) {
+ beg = l.index;
+ end = ch + r[0].length;
+ }
+ } else if ( /\bdef\b/.test(token) ) {
+ const l = /[a-z0-9-]+$/i.exec(s.slice(0, ch));
+ const r = /^[^,]*=[^,]+/i.exec(s.slice(ch));
+ if ( l && r ) {
+ beg = l.index;
+ end = ch + r[0].length;
+ }
+ }
+ }
+
+ if ( beg === undefined ) {
+ const { anchor, head } = cm.findWordAt(pos);
+ return { from: anchor, to: head };
+ }
+
+ return {
+ from: { line, ch: beg },
+ to: { line, ch: end },
+ };
+ };
+
+ CodeMirror.defineInitHook(cm => {
+ cm.setOption('configureMouse', function(cm, repeat) {
+ return {
+ unit: repeat === 'double' ? selectWordAt : null,
+ };
+ });
+ });
+}
+
+/******************************************************************************/
diff --git a/src/js/commands.js b/src/js/commands.js
new file mode 100644
index 0000000..8fd6341
--- /dev/null
+++ b/src/js/commands.js
@@ -0,0 +1,181 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2017-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import µb from './background.js';
+import { hostnameFromURI } from './uri-utils.js';
+
+/******************************************************************************/
+
+(( ) => {
+
+// *****************************************************************************
+// start of local namespace
+
+if ( vAPI.commands instanceof Object === false ) { return; }
+
+const relaxBlockingMode = (( ) => {
+ const reloadTimers = new Map();
+
+ return function(tab) {
+ if ( tab instanceof Object === false || tab.id <= 0 ) { return; }
+
+ const normalURL = µb.normalizeTabURL(tab.id, tab.url);
+
+ if ( µb.getNetFilteringSwitch(normalURL) === false ) { return; }
+
+ const hn = hostnameFromURI(normalURL);
+ const curProfileBits = µb.blockingModeFromHostname(hn);
+ let newProfileBits;
+ for ( const profile of µb.liveBlockingProfiles ) {
+ if ( (curProfileBits & profile.bits & ~1) !== curProfileBits ) {
+ newProfileBits = profile.bits;
+ break;
+ }
+ }
+
+ // TODO: Reset to original blocking profile?
+ if ( newProfileBits === undefined ) { return; }
+
+ const noReload = (newProfileBits & 0b00000001) === 0;
+
+ if (
+ (curProfileBits & 0b00000010) !== 0 &&
+ (newProfileBits & 0b00000010) === 0
+ ) {
+ µb.toggleHostnameSwitch({
+ name: 'no-scripting',
+ hostname: hn,
+ state: false,
+ });
+ }
+ if ( µb.userSettings.advancedUserEnabled ) {
+ if (
+ (curProfileBits & 0b00000100) !== 0 &&
+ (newProfileBits & 0b00000100) === 0
+ ) {
+ µb.toggleFirewallRule({
+ tabId: noReload ? tab.id : undefined,
+ srcHostname: hn,
+ desHostname: '*',
+ requestType: '3p',
+ action: 3,
+ });
+ }
+ if (
+ (curProfileBits & 0b00001000) !== 0 &&
+ (newProfileBits & 0b00001000) === 0
+ ) {
+ µb.toggleFirewallRule({
+ srcHostname: hn,
+ desHostname: '*',
+ requestType: '3p-script',
+ action: 3,
+ });
+ }
+ if (
+ (curProfileBits & 0b00010000) !== 0 &&
+ (newProfileBits & 0b00010000) === 0
+ ) {
+ µb.toggleFirewallRule({
+ srcHostname: hn,
+ desHostname: '*',
+ requestType: '3p-frame',
+ action: 3,
+ });
+ }
+ }
+
+ // Reload the target tab?
+ if ( noReload ) { return; }
+
+ // Reload: use a timer to coalesce bursts of reload commands.
+ const timer = reloadTimers.get(tab.id) || (( ) => {
+ const t = vAPI.defer.create(tabId => {
+ reloadTimers.delete(tabId);
+ vAPI.tabs.reload(tabId);
+ });
+ reloadTimers.set(tab.id, t);
+ return t;
+ })();
+ timer.offon(547, tab.id);
+ };
+})();
+
+vAPI.commands.onCommand.addListener(async command => {
+ // Generic commands
+ if ( command === 'open-dashboard' ) {
+ µb.openNewTab({
+ url: 'dashboard.html',
+ select: true,
+ index: -1,
+ });
+ return;
+ }
+ // Tab-specific commands
+ const tab = await vAPI.tabs.getCurrent();
+ if ( tab instanceof Object === false ) { return; }
+ switch ( command ) {
+ case 'launch-element-picker':
+ case 'launch-element-zapper': {
+ µb.epickerArgs.mouse = false;
+ µb.elementPickerExec(
+ tab.id,
+ 0,
+ undefined,
+ command === 'launch-element-zapper'
+ );
+ break;
+ }
+ case 'launch-logger': {
+ const hash = tab.url.startsWith(vAPI.getURL(''))
+ ? ''
+ : `#_+${tab.id}`;
+ µb.openNewTab({
+ url: `logger-ui.html${hash}`,
+ select: true,
+ index: -1,
+ });
+ break;
+ }
+ case 'relax-blocking-mode':
+ relaxBlockingMode(tab);
+ break;
+ case 'toggle-cosmetic-filtering':
+ µb.toggleHostnameSwitch({
+ name: 'no-cosmetic-filtering',
+ hostname: hostnameFromURI(µb.normalizeTabURL(tab.id, tab.url)),
+ });
+ break;
+ default:
+ break;
+ }
+});
+
+// end of local namespace
+// *****************************************************************************
+
+})();
+
+/******************************************************************************/
diff --git a/src/js/console.js b/src/js/console.js
new file mode 100644
index 0000000..410abbd
--- /dev/null
+++ b/src/js/console.js
@@ -0,0 +1,59 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+function ubologSet(state = false) {
+ if ( state ) {
+ if ( ubolog.process instanceof Function ) {
+ ubolog.process();
+ }
+ ubolog = ubologDo;
+ } else {
+ ubolog = ubologIgnore;
+ }
+}
+
+function ubologDo(...args) {
+ console.info('[uBO]', ...args);
+}
+
+function ubologIgnore() {
+}
+
+let ubolog = (( ) => {
+ const pending = [];
+ const store = function(...args) {
+ pending.push(args);
+ };
+ store.process = function() {
+ for ( const args of pending ) {
+ ubologDo(...args);
+ }
+ };
+ return store;
+})();
+
+/******************************************************************************/
+
+export { ubolog, ubologSet };
diff --git a/src/js/contentscript-extra.js b/src/js/contentscript-extra.js
new file mode 100644
index 0000000..45c5262
--- /dev/null
+++ b/src/js/contentscript-extra.js
@@ -0,0 +1,662 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+if (
+ typeof vAPI === 'object' &&
+ typeof vAPI.DOMProceduralFilterer !== 'object'
+) {
+// >>>>>>>> start of local scope
+
+/******************************************************************************/
+
+const nonVisualElements = {
+ script: true,
+ style: true,
+};
+
+const regexFromString = (s, exact = false) => {
+ if ( s === '' ) { return /^/; }
+ const match = /^\/(.+)\/([imu]*)$/.exec(s);
+ if ( match !== null ) {
+ return new RegExp(match[1], match[2] || undefined);
+ }
+ const reStr = s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
+ return new RegExp(exact ? `^${reStr}$` : reStr);
+};
+
+// 'P' stands for 'Procedural'
+
+class PSelectorTask {
+ begin() {
+ }
+ end() {
+ }
+}
+
+class PSelectorVoidTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ console.info(`uBO: :${task[0]}() operator does not exist`);
+ }
+ transpose() {
+ }
+}
+
+class PSelectorHasTextTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.needle = regexFromString(task[1]);
+ }
+ transpose(node, output) {
+ if ( this.needle.test(node.textContent) ) {
+ output.push(node);
+ }
+ }
+}
+
+class PSelectorIfTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.pselector = new PSelector(task[1]);
+ }
+ transpose(node, output) {
+ if ( this.pselector.test(node) === this.target ) {
+ output.push(node);
+ }
+ }
+}
+PSelectorIfTask.prototype.target = true;
+
+class PSelectorIfNotTask extends PSelectorIfTask {
+}
+PSelectorIfNotTask.prototype.target = false;
+
+class PSelectorMatchesAttrTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.reAttr = regexFromString(task[1].attr, true);
+ this.reValue = regexFromString(task[1].value, true);
+ }
+ transpose(node, output) {
+ const attrs = node.getAttributeNames();
+ for ( const attr of attrs ) {
+ if ( this.reAttr.test(attr) === false ) { continue; }
+ if ( this.reValue.test(node.getAttribute(attr)) === false ) { continue; }
+ output.push(node);
+ }
+ }
+}
+
+class PSelectorMatchesCSSTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.name = task[1].name;
+ this.pseudo = task[1].pseudo ? `::${task[1].pseudo}` : null;
+ let arg0 = task[1].value, arg1;
+ if ( Array.isArray(arg0) ) {
+ arg1 = arg0[1]; arg0 = arg0[0];
+ }
+ this.value = new RegExp(arg0, arg1);
+ }
+ transpose(node, output) {
+ const style = window.getComputedStyle(node, this.pseudo);
+ if ( style !== null && this.value.test(style[this.name]) ) {
+ output.push(node);
+ }
+ }
+}
+class PSelectorMatchesCSSAfterTask extends PSelectorMatchesCSSTask {
+ constructor(task) {
+ super(task);
+ this.pseudo = '::after';
+ }
+}
+
+class PSelectorMatchesCSSBeforeTask extends PSelectorMatchesCSSTask {
+ constructor(task) {
+ super(task);
+ this.pseudo = '::before';
+ }
+}
+
+class PSelectorMatchesMediaTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.mql = window.matchMedia(task[1]);
+ if ( this.mql.media === 'not all' ) { return; }
+ this.mql.addEventListener('change', ( ) => {
+ if ( typeof vAPI !== 'object' ) { return; }
+ if ( vAPI === null ) { return; }
+ const filterer = vAPI.domFilterer && vAPI.domFilterer.proceduralFilterer;
+ if ( filterer instanceof Object === false ) { return; }
+ filterer.onDOMChanged([ null ]);
+ });
+ }
+ transpose(node, output) {
+ if ( this.mql.matches === false ) { return; }
+ output.push(node);
+ }
+}
+
+class PSelectorMatchesPathTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.needle = regexFromString(
+ task[1].replace(/\P{ASCII}/gu, s => encodeURIComponent(s))
+ );
+ }
+ transpose(node, output) {
+ if ( this.needle.test(self.location.pathname + self.location.search) ) {
+ output.push(node);
+ }
+ }
+}
+
+class PSelectorMinTextLengthTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.min = task[1];
+ }
+ transpose(node, output) {
+ if ( node.textContent.length >= this.min ) {
+ output.push(node);
+ }
+ }
+}
+
+class PSelectorOthersTask extends PSelectorTask {
+ constructor() {
+ super();
+ this.targets = new Set();
+ }
+ begin() {
+ this.targets.clear();
+ }
+ end(output) {
+ const toKeep = new Set(this.targets);
+ const toDiscard = new Set();
+ const body = document.body;
+ let discard = null;
+ for ( let keep of this.targets ) {
+ while ( keep !== null && keep !== body ) {
+ toKeep.add(keep);
+ toDiscard.delete(keep);
+ discard = keep.previousElementSibling;
+ while ( discard !== null ) {
+ if (
+ nonVisualElements[discard.localName] !== true &&
+ toKeep.has(discard) === false
+ ) {
+ toDiscard.add(discard);
+ }
+ discard = discard.previousElementSibling;
+ }
+ discard = keep.nextElementSibling;
+ while ( discard !== null ) {
+ if (
+ nonVisualElements[discard.localName] !== true &&
+ toKeep.has(discard) === false
+ ) {
+ toDiscard.add(discard);
+ }
+ discard = discard.nextElementSibling;
+ }
+ keep = keep.parentElement;
+ }
+ }
+ for ( discard of toDiscard ) {
+ output.push(discard);
+ }
+ this.targets.clear();
+ }
+ transpose(candidate) {
+ for ( const target of this.targets ) {
+ if ( target.contains(candidate) ) { return; }
+ if ( candidate.contains(target) ) {
+ this.targets.delete(target);
+ }
+ }
+ this.targets.add(candidate);
+ }
+}
+
+// https://github.com/AdguardTeam/ExtendedCss/issues/31#issuecomment-302391277
+// Prepend `:scope ` if needed.
+class PSelectorSpathTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.spath = task[1];
+ this.nth = /^(?:\s*[+~]|:)/.test(this.spath);
+ if ( this.nth ) { return; }
+ if ( /^\s*>/.test(this.spath) ) {
+ this.spath = `:scope ${this.spath.trim()}`;
+ }
+ }
+ transpose(node, output) {
+ const nodes = this.nth
+ ? PSelectorSpathTask.qsa(node, this.spath)
+ : node.querySelectorAll(this.spath);
+ for ( const node of nodes ) {
+ output.push(node);
+ }
+ }
+ // Helper method for other operators.
+ static qsa(node, selector) {
+ const parent = node.parentElement;
+ if ( parent === null ) { return []; }
+ let pos = 1;
+ for (;;) {
+ node = node.previousElementSibling;
+ if ( node === null ) { break; }
+ pos += 1;
+ }
+ return parent.querySelectorAll(
+ `:scope > :nth-child(${pos})${selector}`
+ );
+ }
+}
+
+class PSelectorUpwardTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ const arg = task[1];
+ if ( typeof arg === 'number' ) {
+ this.i = arg;
+ } else {
+ this.s = arg;
+ }
+ }
+ transpose(node, output) {
+ if ( this.s !== '' ) {
+ const parent = node.parentElement;
+ if ( parent === null ) { return; }
+ node = parent.closest(this.s);
+ if ( node === null ) { return; }
+ } else {
+ let nth = this.i;
+ for (;;) {
+ node = node.parentElement;
+ if ( node === null ) { return; }
+ nth -= 1;
+ if ( nth === 0 ) { break; }
+ }
+ }
+ output.push(node);
+ }
+}
+PSelectorUpwardTask.prototype.i = 0;
+PSelectorUpwardTask.prototype.s = '';
+
+class PSelectorWatchAttrs extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.observer = null;
+ this.observed = new WeakSet();
+ this.observerOptions = {
+ attributes: true,
+ subtree: true,
+ };
+ const attrs = task[1];
+ if ( Array.isArray(attrs) && attrs.length !== 0 ) {
+ this.observerOptions.attributeFilter = task[1];
+ }
+ }
+ // TODO: Is it worth trying to re-apply only the current selector?
+ handler() {
+ const filterer =
+ vAPI.domFilterer && vAPI.domFilterer.proceduralFilterer;
+ if ( filterer instanceof Object ) {
+ filterer.onDOMChanged([ null ]);
+ }
+ }
+ transpose(node, output) {
+ output.push(node);
+ if ( this.observed.has(node) ) { return; }
+ if ( this.observer === null ) {
+ this.observer = new MutationObserver(this.handler);
+ }
+ this.observer.observe(node, this.observerOptions);
+ this.observed.add(node);
+ }
+}
+
+class PSelectorXpathTask extends PSelectorTask {
+ constructor(task) {
+ super();
+ this.xpe = document.createExpression(task[1], null);
+ this.xpr = null;
+ }
+ transpose(node, output) {
+ this.xpr = this.xpe.evaluate(
+ node,
+ XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
+ this.xpr
+ );
+ let j = this.xpr.snapshotLength;
+ while ( j-- ) {
+ const node = this.xpr.snapshotItem(j);
+ if ( node.nodeType === 1 ) {
+ output.push(node);
+ }
+ }
+ }
+}
+
+class PSelector {
+ constructor(o) {
+ this.raw = o.raw;
+ this.selector = o.selector;
+ this.tasks = [];
+ const tasks = [];
+ if ( Array.isArray(o.tasks) === false ) { return; }
+ for ( const task of o.tasks ) {
+ const ctor = this.operatorToTaskMap.get(task[0]) || PSelectorVoidTask;
+ tasks.push(new ctor(task));
+ }
+ this.tasks = tasks;
+ }
+ prime(input) {
+ const root = input || document;
+ if ( this.selector === '' ) { return [ root ]; }
+ if ( input !== document ) {
+ const c0 = this.selector.charCodeAt(0);
+ if ( c0 === 0x2B /* + */ || c0 === 0x7E /* ~ */ ) {
+ return Array.from(PSelectorSpathTask.qsa(input, this.selector));
+ } else if ( c0 === 0x3E /* > */ ) {
+ return Array.from(input.querySelectorAll(`:scope ${this.selector}`));
+ }
+ }
+ return Array.from(root.querySelectorAll(this.selector));
+ }
+ exec(input) {
+ let nodes = this.prime(input);
+ for ( const task of this.tasks ) {
+ if ( nodes.length === 0 ) { break; }
+ const transposed = [];
+ task.begin();
+ for ( const node of nodes ) {
+ task.transpose(node, transposed);
+ }
+ task.end(transposed);
+ nodes = transposed;
+ }
+ return nodes;
+ }
+ test(input) {
+ const nodes = this.prime(input);
+ for ( const node of nodes ) {
+ let output = [ node ];
+ for ( const task of this.tasks ) {
+ const transposed = [];
+ task.begin();
+ for ( const node of output ) {
+ task.transpose(node, transposed);
+ }
+ task.end(transposed);
+ output = transposed;
+ if ( output.length === 0 ) { break; }
+ }
+ if ( output.length !== 0 ) { return true; }
+ }
+ return false;
+ }
+}
+PSelector.prototype.operatorToTaskMap = new Map([
+ [ 'has', PSelectorIfTask ],
+ [ 'has-text', PSelectorHasTextTask ],
+ [ 'if', PSelectorIfTask ],
+ [ 'if-not', PSelectorIfNotTask ],
+ [ 'matches-attr', PSelectorMatchesAttrTask ],
+ [ 'matches-css', PSelectorMatchesCSSTask ],
+ [ 'matches-css-after', PSelectorMatchesCSSAfterTask ],
+ [ 'matches-css-before', PSelectorMatchesCSSBeforeTask ],
+ [ 'matches-media', PSelectorMatchesMediaTask ],
+ [ 'matches-path', PSelectorMatchesPathTask ],
+ [ 'min-text-length', PSelectorMinTextLengthTask ],
+ [ 'not', PSelectorIfNotTask ],
+ [ 'others', PSelectorOthersTask ],
+ [ 'spath', PSelectorSpathTask ],
+ [ 'upward', PSelectorUpwardTask ],
+ [ 'watch-attr', PSelectorWatchAttrs ],
+ [ 'xpath', PSelectorXpathTask ],
+]);
+
+class PSelectorRoot extends PSelector {
+ constructor(o) {
+ super(o);
+ this.budget = 200; // I arbitrary picked a 1/5 second
+ this.raw = o.raw;
+ this.cost = 0;
+ this.lastAllowanceTime = 0;
+ this.action = o.action;
+ }
+ prime(input) {
+ try {
+ return super.prime(input);
+ } catch (ex) {
+ }
+ return [];
+ }
+}
+PSelectorRoot.prototype.hit = false;
+
+class ProceduralFilterer {
+ constructor(domFilterer) {
+ this.domFilterer = domFilterer;
+ this.mustApplySelectors = false;
+ this.selectors = new Map();
+ this.masterToken = vAPI.randomToken();
+ this.styleTokenMap = new Map();
+ this.styledNodes = new Set();
+ if ( vAPI.domWatcher instanceof Object ) {
+ vAPI.domWatcher.addListener(this);
+ }
+ }
+
+ addProceduralSelectors(selectors) {
+ const addedSelectors = [];
+ let mustCommit = false;
+ for ( const selector of selectors ) {
+ if ( this.selectors.has(selector.raw) ) { continue; }
+ const pselector = new PSelectorRoot(selector);
+ this.primeProceduralSelector(pselector);
+ this.selectors.set(selector.raw, pselector);
+ addedSelectors.push(pselector);
+ mustCommit = true;
+ }
+ if ( mustCommit === false ) { return; }
+ this.mustApplySelectors = this.selectors.size !== 0;
+ this.domFilterer.commit();
+ if ( this.domFilterer.hasListeners() ) {
+ this.domFilterer.triggerListeners({
+ procedural: addedSelectors
+ });
+ }
+ }
+
+ // This allows to perform potentially expensive initialization steps
+ // before the filters are ready to be applied.
+ primeProceduralSelector(pselector) {
+ if ( pselector.action === undefined ) {
+ this.styleTokenFromStyle(vAPI.hideStyle);
+ } else if ( pselector.action[0] === 'style' ) {
+ this.styleTokenFromStyle(pselector.action[1]);
+ }
+ return pselector;
+ }
+
+ commitNow() {
+ if ( this.selectors.size === 0 ) { return; }
+
+ this.mustApplySelectors = false;
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/341
+ // Be ready to unhide nodes which no longer matches any of
+ // the procedural selectors.
+ const toUnstyle = this.styledNodes;
+ this.styledNodes = new Set();
+
+ let t0 = Date.now();
+
+ for ( const pselector of this.selectors.values() ) {
+ const allowance = Math.floor((t0 - pselector.lastAllowanceTime) / 2000);
+ if ( allowance >= 1 ) {
+ pselector.budget += allowance * 50;
+ if ( pselector.budget > 200 ) { pselector.budget = 200; }
+ pselector.lastAllowanceTime = t0;
+ }
+ if ( pselector.budget <= 0 ) { continue; }
+ const nodes = pselector.exec();
+ const t1 = Date.now();
+ pselector.budget += t0 - t1;
+ if ( pselector.budget < -500 ) {
+ console.info('uBO: disabling %s', pselector.raw);
+ pselector.budget = -0x7FFFFFFF;
+ }
+ t0 = t1;
+ if ( nodes.length === 0 ) { continue; }
+ pselector.hit = true;
+ this.processNodes(nodes, pselector.action);
+ }
+
+ this.unprocessNodes(toUnstyle);
+ }
+
+ styleTokenFromStyle(style) {
+ if ( style === undefined ) { return; }
+ let styleToken = this.styleTokenMap.get(style);
+ if ( styleToken !== undefined ) { return styleToken; }
+ styleToken = vAPI.randomToken();
+ this.styleTokenMap.set(style, styleToken);
+ this.domFilterer.addCSS(
+ `[${this.masterToken}][${styleToken}]\n{${style}}`,
+ { silent: true, mustInject: true }
+ );
+ return styleToken;
+ }
+
+ processNodes(nodes, action) {
+ const op = action && action[0] || '';
+ const arg = op !== '' ? action[1] : '';
+ switch ( op ) {
+ case '':
+ /* fall through */
+ case 'style': {
+ const styleToken = this.styleTokenFromStyle(
+ arg === '' ? vAPI.hideStyle : arg
+ );
+ for ( const node of nodes ) {
+ node.setAttribute(this.masterToken, '');
+ node.setAttribute(styleToken, '');
+ this.styledNodes.add(node);
+ }
+ break;
+ }
+ case 'remove': {
+ for ( const node of nodes ) {
+ node.remove();
+ node.textContent = '';
+ }
+ break;
+ }
+ case 'remove-attr': {
+ const reAttr = regexFromString(arg, true);
+ for ( const node of nodes ) {
+ for ( const name of node.getAttributeNames() ) {
+ if ( reAttr.test(name) === false ) { continue; }
+ node.removeAttribute(name);
+ }
+ }
+ break;
+ }
+ case 'remove-class': {
+ const reClass = regexFromString(arg, true);
+ for ( const node of nodes ) {
+ const cl = node.classList;
+ for ( const name of cl.values() ) {
+ if ( reClass.test(name) === false ) { continue; }
+ cl.remove(name);
+ }
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ // TODO: Current assumption is one style per hit element. Could be an
+ // issue if an element has multiple styling and one styling is
+ // brought back. Possibly too rare to care about this for now.
+ unprocessNodes(nodes) {
+ for ( const node of nodes ) {
+ if ( this.styledNodes.has(node) ) { continue; }
+ node.removeAttribute(this.masterToken);
+ }
+ }
+
+ createProceduralFilter(o) {
+ return this.primeProceduralSelector(
+ new PSelectorRoot(typeof o === 'string' ? JSON.parse(o) : o)
+ );
+ }
+
+ onDOMCreated() {
+ }
+
+ onDOMChanged(addedNodes, removedNodes) {
+ if ( this.selectors.size === 0 ) { return; }
+ this.mustApplySelectors =
+ this.mustApplySelectors ||
+ addedNodes.length !== 0 ||
+ removedNodes;
+ this.domFilterer.commit();
+ }
+}
+
+vAPI.DOMProceduralFilterer = ProceduralFilterer;
+
+/******************************************************************************/
+
+// >>>>>>>> end of local scope
+}
+
+
+
+
+
+
+
+
+/*******************************************************************************
+
+ DO NOT:
+ - Remove the following code
+ - Add code beyond the following code
+ Reason:
+ - https://github.com/gorhill/uBlock/pull/3721
+ - uBO never uses the return value from injected content scripts
+
+**/
+
+void 0;
diff --git a/src/js/contentscript.js b/src/js/contentscript.js
new file mode 100644
index 0000000..8f3a4cf
--- /dev/null
+++ b/src/js/contentscript.js
@@ -0,0 +1,1364 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/*******************************************************************************
+
+ +--> domCollapser
+ |
+ |
+ domWatcher--+
+ | +-- domSurveyor
+ | |
+ +--> domFilterer --+-- [domLogger]
+ | |
+ | +-- [domInspector]
+ |
+ [domProceduralFilterer]
+
+ domWatcher:
+ Watches for changes in the DOM, and notify the other components about these
+ changes.
+
+ domCollapser:
+ Enforces the collapsing of DOM elements for which a corresponding
+ resource was blocked through network filtering.
+
+ domFilterer:
+ Enforces the filtering of DOM elements, by feeding it cosmetic filters.
+
+ domProceduralFilterer:
+ Enforce the filtering of DOM elements through procedural cosmetic filters.
+ Loaded on demand, only when needed.
+
+ domSurveyor:
+ Surveys the DOM to find new cosmetic filters to apply to the current page.
+
+ domLogger:
+ Surveys the page to find and report the injected cosmetic filters blocking
+ actual elements on the current page. This component is dynamically loaded
+ IF AND ONLY IF uBO's logger is opened.
+
+ If page is whitelisted:
+ - domWatcher: off
+ - domCollapser: off
+ - domFilterer: off
+ - domSurveyor: off
+ - domLogger: off
+
+ I verified that the code in this file is completely flushed out of memory
+ when a page is whitelisted.
+
+ If cosmetic filtering is disabled:
+ - domWatcher: on
+ - domCollapser: on
+ - domFilterer: off
+ - domSurveyor: off
+ - domLogger: off
+
+ If generic cosmetic filtering is disabled:
+ - domWatcher: on
+ - domCollapser: on
+ - domFilterer: on
+ - domSurveyor: off
+ - domLogger: on if uBO logger is opened
+
+ If generic cosmetic filtering is enabled:
+ - domWatcher: on
+ - domCollapser: on
+ - domFilterer: on
+ - domSurveyor: on
+ - domLogger: on if uBO logger is opened
+
+ Additionally, the domSurveyor can turn itself off once it decides that
+ it has become pointless (repeatedly not finding new cosmetic filters).
+
+ The domFilterer makes use of platform-dependent user stylesheets[1].
+
+ [1] "user stylesheets" refer to local CSS rules which have priority over,
+ and can't be overridden by a web page's own CSS rules.
+
+*/
+
+// Abort execution if our global vAPI object does not exist.
+// https://github.com/chrisaljoudi/uBlock/issues/456
+// https://github.com/gorhill/uBlock/issues/2029
+
+ // >>>>>>>> start of HUGE-IF-BLOCK
+if ( typeof vAPI === 'object' && !vAPI.contentScript ) {
+
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+
+vAPI.contentScript = true;
+
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/688#issuecomment-663657508
+{
+ let context = self;
+ try {
+ while (
+ context !== self.top &&
+ context.location.href.startsWith('about:blank') &&
+ context.parent.location.href
+ ) {
+ context = context.parent;
+ }
+ } catch(ex) {
+ }
+ vAPI.effectiveSelf = context;
+}
+
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+
+vAPI.userStylesheet = {
+ added: new Set(),
+ removed: new Set(),
+ apply: function(callback) {
+ if ( this.added.size === 0 && this.removed.size === 0 ) { return; }
+ vAPI.messaging.send('vapi', {
+ what: 'userCSS',
+ add: Array.from(this.added),
+ remove: Array.from(this.removed),
+ }).then(( ) => {
+ if ( callback instanceof Function === false ) { return; }
+ callback();
+ });
+ this.added.clear();
+ this.removed.clear();
+ },
+ add: function(cssText, now) {
+ if ( cssText === '' ) { return; }
+ this.added.add(cssText);
+ if ( now ) { this.apply(); }
+ },
+ remove: function(cssText, now) {
+ if ( cssText === '' ) { return; }
+ this.removed.add(cssText);
+ if ( now ) { this.apply(); }
+ }
+};
+
+/******************************************************************************/
+/******************************************************************************/
+/*******************************************************************************
+
+ The purpose of SafeAnimationFrame is to take advantage of the behavior of
+ window.requestAnimationFrame[1]. If we use an animation frame as a timer,
+ then this timer is described as follow:
+
+ - time events are throttled by the browser when the viewport is not visible --
+ there is no point for uBO to play with the DOM if the document is not
+ visible.
+ - time events are micro tasks[2].
+ - time events are synchronized to monitor refresh, meaning that they can fire
+ at most 1/60 (typically).
+
+ If a delay value is provided, a plain timer is first used. Plain timers are
+ macro-tasks, so this is good when uBO wants to yield to more important tasks
+ on a page. Once the plain timer elapse, an animation frame is used to trigger
+ the next time at which to execute the job.
+
+ [1] https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame
+ [2] https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/
+
+*/
+
+// https://github.com/gorhill/uBlock/issues/2147
+
+vAPI.SafeAnimationFrame = class {
+ constructor(callback) {
+ this.fid = this.tid = undefined;
+ this.callback = callback;
+ }
+ start(delay) {
+ if ( self.vAPI instanceof Object === false ) { return; }
+ if ( delay === undefined ) {
+ if ( this.fid === undefined ) {
+ this.fid = requestAnimationFrame(( ) => { this.onRAF(); } );
+ }
+ if ( this.tid === undefined ) {
+ this.tid = vAPI.setTimeout(( ) => { this.onSTO(); }, 20000);
+ }
+ return;
+ }
+ if ( this.fid === undefined && this.tid === undefined ) {
+ this.tid = vAPI.setTimeout(( ) => { this.macroToMicro(); }, delay);
+ }
+ }
+ clear() {
+ if ( this.fid !== undefined ) {
+ cancelAnimationFrame(this.fid);
+ this.fid = undefined;
+ }
+ if ( this.tid !== undefined ) {
+ clearTimeout(this.tid);
+ this.tid = undefined;
+ }
+ }
+ macroToMicro() {
+ this.tid = undefined;
+ this.start();
+ }
+ onRAF() {
+ if ( this.tid !== undefined ) {
+ clearTimeout(this.tid);
+ this.tid = undefined;
+ }
+ this.fid = undefined;
+ this.callback();
+ }
+ onSTO() {
+ if ( this.fid !== undefined ) {
+ cancelAnimationFrame(this.fid);
+ this.fid = undefined;
+ }
+ this.tid = undefined;
+ this.callback();
+ }
+};
+
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/552
+// Listen and report CSP violations so that blocked resources through CSP
+// are properly reported in the logger.
+
+{
+ const newEvents = new Set();
+ const allEvents = new Set();
+ let timer;
+
+ const send = function() {
+ if ( self.vAPI instanceof Object === false ) { return; }
+ vAPI.messaging.send('scriptlets', {
+ what: 'securityPolicyViolation',
+ type: 'net',
+ docURL: document.location.href,
+ violations: Array.from(newEvents),
+ }).then(response => {
+ if ( response === true ) { return; }
+ stop();
+ });
+ for ( const event of newEvents ) {
+ allEvents.add(event);
+ }
+ newEvents.clear();
+ };
+
+ const sendAsync = function() {
+ if ( timer !== undefined ) { return; }
+ timer = self.requestIdleCallback(
+ ( ) => { timer = undefined; send(); },
+ { timeout: 2063 }
+ );
+ };
+
+ const listener = function(ev) {
+ if ( ev.isTrusted !== true ) { return; }
+ if ( ev.disposition !== 'enforce' ) { return; }
+ const json = JSON.stringify({
+ url: ev.blockedURL || ev.blockedURI,
+ policy: ev.originalPolicy,
+ directive: ev.effectiveDirective || ev.violatedDirective,
+ });
+ if ( allEvents.has(json) ) { return; }
+ newEvents.add(json);
+ sendAsync();
+ };
+
+ const stop = function() {
+ newEvents.clear();
+ allEvents.clear();
+ if ( timer !== undefined ) {
+ self.cancelIdleCallback(timer);
+ timer = undefined;
+ }
+ document.removeEventListener('securitypolicyviolation', listener);
+ if ( vAPI ) { vAPI.shutdown.remove(stop); }
+ };
+
+ document.addEventListener('securitypolicyviolation', listener);
+ vAPI.shutdown.add(stop);
+
+ // We need to call at least once to find out whether we really need to
+ // listen to CSP violations.
+ sendAsync();
+}
+
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+
+// vAPI.domWatcher
+
+{
+ vAPI.domMutationTime = Date.now();
+
+ const addedNodeLists = [];
+ const removedNodeLists = [];
+ const addedNodes = [];
+ const ignoreTags = new Set([ 'br', 'head', 'link', 'meta', 'script', 'style' ]);
+ const listeners = [];
+
+ let domLayoutObserver;
+ let listenerIterator = [];
+ let listenerIteratorDirty = false;
+ let removedNodes = false;
+ let safeObserverHandlerTimer;
+
+ const safeObserverHandler = function() {
+ let i = addedNodeLists.length;
+ while ( i-- ) {
+ const nodeList = addedNodeLists[i];
+ let iNode = nodeList.length;
+ while ( iNode-- ) {
+ const node = nodeList[iNode];
+ if ( node.nodeType !== 1 ) { continue; }
+ if ( ignoreTags.has(node.localName) ) { continue; }
+ if ( node.parentElement === null ) { continue; }
+ addedNodes.push(node);
+ }
+ }
+ addedNodeLists.length = 0;
+ i = removedNodeLists.length;
+ while ( i-- && removedNodes === false ) {
+ const nodeList = removedNodeLists[i];
+ let iNode = nodeList.length;
+ while ( iNode-- ) {
+ if ( nodeList[iNode].nodeType !== 1 ) { continue; }
+ removedNodes = true;
+ break;
+ }
+ }
+ removedNodeLists.length = 0;
+ if ( addedNodes.length === 0 && removedNodes === false ) { return; }
+ for ( const listener of getListenerIterator() ) {
+ try { listener.onDOMChanged(addedNodes, removedNodes); }
+ catch (ex) { }
+ }
+ addedNodes.length = 0;
+ removedNodes = false;
+ vAPI.domMutationTime = Date.now();
+ };
+
+ // https://github.com/chrisaljoudi/uBlock/issues/205
+ // Do not handle added node directly from within mutation observer.
+ const observerHandler = function(mutations) {
+ let i = mutations.length;
+ while ( i-- ) {
+ const mutation = mutations[i];
+ let nodeList = mutation.addedNodes;
+ if ( nodeList.length !== 0 ) {
+ addedNodeLists.push(nodeList);
+ }
+ nodeList = mutation.removedNodes;
+ if ( nodeList.length !== 0 ) {
+ removedNodeLists.push(nodeList);
+ }
+ }
+ if ( addedNodeLists.length !== 0 || removedNodeLists.length !== 0 ) {
+ safeObserverHandlerTimer.start(
+ addedNodeLists.length < 100 ? 1 : undefined
+ );
+ }
+ };
+
+ const startMutationObserver = function() {
+ if ( domLayoutObserver !== undefined ) { return; }
+ domLayoutObserver = new MutationObserver(observerHandler);
+ domLayoutObserver.observe(document, {
+ //attributeFilter: [ 'class', 'id' ],
+ //attributes: true,
+ childList: true,
+ subtree: true
+ });
+ safeObserverHandlerTimer = new vAPI.SafeAnimationFrame(safeObserverHandler);
+ vAPI.shutdown.add(cleanup);
+ };
+
+ const stopMutationObserver = function() {
+ if ( domLayoutObserver === undefined ) { return; }
+ cleanup();
+ vAPI.shutdown.remove(cleanup);
+ };
+
+ const getListenerIterator = function() {
+ if ( listenerIteratorDirty ) {
+ listenerIterator = listeners.slice();
+ listenerIteratorDirty = false;
+ }
+ return listenerIterator;
+ };
+
+ const addListener = function(listener) {
+ if ( listeners.indexOf(listener) !== -1 ) { return; }
+ listeners.push(listener);
+ listenerIteratorDirty = true;
+ if ( domLayoutObserver === undefined ) { return; }
+ try { listener.onDOMCreated(); }
+ catch (ex) { }
+ startMutationObserver();
+ };
+
+ const removeListener = function(listener) {
+ const pos = listeners.indexOf(listener);
+ if ( pos === -1 ) { return; }
+ listeners.splice(pos, 1);
+ listenerIteratorDirty = true;
+ if ( listeners.length === 0 ) {
+ stopMutationObserver();
+ }
+ };
+
+ const cleanup = function() {
+ if ( domLayoutObserver !== undefined ) {
+ domLayoutObserver.disconnect();
+ domLayoutObserver = undefined;
+ }
+ if ( safeObserverHandlerTimer !== undefined ) {
+ safeObserverHandlerTimer.clear();
+ safeObserverHandlerTimer = undefined;
+ }
+ };
+
+ const start = function() {
+ for ( const listener of getListenerIterator() ) {
+ try { listener.onDOMCreated(); }
+ catch (ex) { }
+ }
+ startMutationObserver();
+ };
+
+ vAPI.domWatcher = { start, addListener, removeListener };
+}
+
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+
+vAPI.injectScriptlet = function(doc, text) {
+ if ( !doc ) { return; }
+ let script, url;
+ try {
+ const blob = new self.Blob([ text ], { type: 'text/javascript; charset=utf-8' });
+ url = self.URL.createObjectURL(blob);
+ script = doc.createElement('script');
+ script.async = false;
+ script.src = url;
+ (doc.head || doc.documentElement || doc).appendChild(script);
+ } catch (ex) {
+ }
+ if ( url ) {
+ if ( script ) { script.remove(); }
+ self.URL.revokeObjectURL(url);
+ }
+};
+
+/******************************************************************************/
+/******************************************************************************/
+/*******************************************************************************
+
+ The DOM filterer is the heart of uBO's cosmetic filtering.
+
+ DOMFilterer: adds procedural cosmetic filtering
+
+*/
+
+vAPI.hideStyle = 'display:none!important;';
+
+vAPI.DOMFilterer = class {
+ constructor() {
+ this.commitTimer = new vAPI.SafeAnimationFrame(
+ ( ) => { this.commitNow(); }
+ );
+ this.disabled = false;
+ this.listeners = [];
+ this.stylesheets = [];
+ this.exceptedCSSRules = [];
+ this.exceptions = [];
+ this.convertedProceduralFilters = [];
+ this.proceduralFilterer = null;
+ }
+
+ explodeCSS(css) {
+ const out = [];
+ const cssHide = `{${vAPI.hideStyle}}`;
+ const blocks = css.trim().split(/\n\n+/);
+ for ( const block of blocks ) {
+ if ( block.endsWith(cssHide) === false ) { continue; }
+ out.push(block.slice(0, -cssHide.length).trim());
+ }
+ return out;
+ }
+
+ addCSS(css, details = {}) {
+ if ( typeof css !== 'string' || css.length === 0 ) { return; }
+ if ( this.stylesheets.includes(css) ) { return; }
+ this.stylesheets.push(css);
+ if ( details.mustInject && this.disabled === false ) {
+ vAPI.userStylesheet.add(css);
+ }
+ if ( this.hasListeners() === false ) { return; }
+ if ( details.silent ) { return; }
+ this.triggerListeners({ declarative: this.explodeCSS(css) });
+ }
+
+ exceptCSSRules(exceptions) {
+ if ( exceptions.length === 0 ) { return; }
+ this.exceptedCSSRules.push(...exceptions);
+ if ( this.hasListeners() ) {
+ this.triggerListeners({ exceptions });
+ }
+ }
+
+ addListener(listener) {
+ if ( this.listeners.indexOf(listener) !== -1 ) { return; }
+ this.listeners.push(listener);
+ }
+
+ removeListener(listener) {
+ const pos = this.listeners.indexOf(listener);
+ if ( pos === -1 ) { return; }
+ this.listeners.splice(pos, 1);
+ }
+
+ hasListeners() {
+ return this.listeners.length !== 0;
+ }
+
+ triggerListeners(changes) {
+ for ( const listener of this.listeners ) {
+ listener.onFiltersetChanged(changes);
+ }
+ }
+
+ toggle(state, callback) {
+ if ( state === undefined ) { state = this.disabled; }
+ if ( state !== this.disabled ) { return; }
+ this.disabled = !state;
+ const uss = vAPI.userStylesheet;
+ for ( const css of this.stylesheets ) {
+ if ( this.disabled ) {
+ uss.remove(css);
+ } else {
+ uss.add(css);
+ }
+ }
+ uss.apply(callback);
+ }
+
+ // Here we will deal with:
+ // - Injecting low priority user styles;
+ // - Notifying listeners about changed filterset.
+ // https://www.reddit.com/r/uBlockOrigin/comments/9jj0y1/no_longer_blocking_ads/
+ // Ensure vAPI is still valid -- it can go away by the time we are
+ // called, since the port could be force-disconnected from the main
+ // process. Another approach would be to have vAPI.SafeAnimationFrame
+ // register a shutdown job: to evaluate. For now I will keep the fix
+ // trivial.
+ commitNow() {
+ this.commitTimer.clear();
+ if ( vAPI instanceof Object === false ) { return; }
+ vAPI.userStylesheet.apply();
+ if ( this.proceduralFilterer instanceof Object ) {
+ this.proceduralFilterer.commitNow();
+ }
+ }
+
+ commit(commitNow) {
+ if ( commitNow ) {
+ this.commitTimer.clear();
+ this.commitNow();
+ } else {
+ this.commitTimer.start();
+ }
+ }
+
+ proceduralFiltererInstance() {
+ if ( this.proceduralFilterer instanceof Object === false ) {
+ if ( vAPI.DOMProceduralFilterer instanceof Object === false ) {
+ return null;
+ }
+ this.proceduralFilterer = new vAPI.DOMProceduralFilterer(this);
+ }
+ return this.proceduralFilterer;
+ }
+
+ addProceduralSelectors(selectors) {
+ const procedurals = [];
+ for ( const raw of selectors ) {
+ procedurals.push(JSON.parse(raw));
+ }
+ if ( procedurals.length === 0 ) { return; }
+ const pfilterer = this.proceduralFiltererInstance();
+ if ( pfilterer !== null ) {
+ pfilterer.addProceduralSelectors(procedurals);
+ }
+ }
+
+ createProceduralFilter(o) {
+ const pfilterer = this.proceduralFiltererInstance();
+ if ( pfilterer === null ) { return; }
+ return pfilterer.createProceduralFilter(o);
+ }
+
+ getAllSelectors(bits = 0) {
+ const out = {
+ declarative: [],
+ exceptions: this.exceptedCSSRules,
+ };
+ const hasProcedural = this.proceduralFilterer instanceof Object;
+ const includePrivateSelectors = (bits & 0b01) !== 0;
+ const masterToken = hasProcedural
+ ? `[${this.proceduralFilterer.masterToken}]`
+ : undefined;
+ for ( const css of this.stylesheets ) {
+ for ( const block of this.explodeCSS(css) ) {
+ if (
+ includePrivateSelectors === false &&
+ masterToken !== undefined &&
+ block.startsWith(masterToken)
+ ) {
+ continue;
+ }
+ out.declarative.push(block);
+ }
+ }
+ const excludeProcedurals = (bits & 0b10) !== 0;
+ if ( excludeProcedurals === false ) {
+ out.procedural = [];
+ if ( hasProcedural ) {
+ out.procedural.push(
+ ...this.proceduralFilterer.selectors.values()
+ );
+ }
+ const proceduralFilterer = this.proceduralFiltererInstance();
+ if ( proceduralFilterer !== null ) {
+ for ( const json of this.convertedProceduralFilters ) {
+ const pfilter = proceduralFilterer.createProceduralFilter(json);
+ pfilter.converted = true;
+ out.procedural.push(pfilter);
+ }
+ }
+ }
+ return out;
+ }
+
+ getAllExceptionSelectors() {
+ return this.exceptions.join(',\n');
+ }
+};
+
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+
+// vAPI.domCollapser
+
+{
+ const messaging = vAPI.messaging;
+ const toCollapse = new Map();
+ const src1stProps = {
+ audio: 'currentSrc',
+ embed: 'src',
+ iframe: 'src',
+ img: 'currentSrc',
+ object: 'data',
+ video: 'currentSrc',
+ };
+ const src2ndProps = {
+ audio: 'src',
+ img: 'src',
+ video: 'src',
+ };
+ const tagToTypeMap = {
+ audio: 'media',
+ embed: 'object',
+ iframe: 'sub_frame',
+ img: 'image',
+ object: 'object',
+ video: 'media',
+ };
+ let requestIdGenerator = 1,
+ processTimer,
+ cachedBlockedSet,
+ cachedBlockedSetHash,
+ cachedBlockedSetTimer,
+ toProcess = [],
+ toFilter = [],
+ netSelectorCacheCount = 0;
+
+ const cachedBlockedSetClear = function() {
+ cachedBlockedSet =
+ cachedBlockedSetHash =
+ cachedBlockedSetTimer = undefined;
+ };
+
+ // https://github.com/chrisaljoudi/uBlock/issues/399
+ // https://github.com/gorhill/uBlock/issues/2848
+ // Use a user stylesheet to collapse placeholders.
+ const getCollapseToken = ( ) => {
+ if ( collapseToken === undefined ) {
+ collapseToken = vAPI.randomToken();
+ vAPI.userStylesheet.add(
+ `[${collapseToken}]\n{display:none!important;}`,
+ true
+ );
+ }
+ return collapseToken;
+ };
+ let collapseToken;
+
+ // https://github.com/chrisaljoudi/uBlock/issues/174
+ // Do not remove fragment from src URL
+ const onProcessed = function(response) {
+ // This happens if uBO is disabled or restarted.
+ if ( response instanceof Object === false ) {
+ toCollapse.clear();
+ return;
+ }
+
+ const targets = toCollapse.get(response.id);
+ if ( targets === undefined ) { return; }
+
+ toCollapse.delete(response.id);
+ if ( cachedBlockedSetHash !== response.hash ) {
+ cachedBlockedSet = new Set(response.blockedResources);
+ cachedBlockedSetHash = response.hash;
+ if ( cachedBlockedSetTimer !== undefined ) {
+ clearTimeout(cachedBlockedSetTimer);
+ }
+ cachedBlockedSetTimer = vAPI.setTimeout(cachedBlockedSetClear, 30000);
+ }
+ if ( cachedBlockedSet === undefined || cachedBlockedSet.size === 0 ) {
+ return;
+ }
+
+ const selectors = [];
+ let netSelectorCacheCountMax = response.netSelectorCacheCountMax;
+
+ for ( const target of targets ) {
+ const tag = target.localName;
+ let prop = src1stProps[tag];
+ if ( prop === undefined ) { continue; }
+ let src = target[prop];
+ if ( typeof src !== 'string' || src.length === 0 ) {
+ prop = src2ndProps[tag];
+ if ( prop === undefined ) { continue; }
+ src = target[prop];
+ if ( typeof src !== 'string' || src.length === 0 ) { continue; }
+ }
+ if ( cachedBlockedSet.has(tagToTypeMap[tag] + ' ' + src) === false ) {
+ continue;
+ }
+ target.setAttribute(getCollapseToken(), '');
+ // https://github.com/chrisaljoudi/uBlock/issues/1048
+ // Use attribute to construct CSS rule
+ if ( netSelectorCacheCount > netSelectorCacheCountMax ) { continue; }
+ const value = target.getAttribute(prop);
+ if ( value ) {
+ selectors.push(`${tag}[${prop}="${CSS.escape(value)}"]`);
+ netSelectorCacheCount += 1;
+ }
+ }
+
+ if ( selectors.length === 0 ) { return; }
+ messaging.send('contentscript', {
+ what: 'cosmeticFiltersInjected',
+ type: 'net',
+ hostname: window.location.hostname,
+ selectors,
+ });
+ };
+
+ const send = function() {
+ processTimer = undefined;
+ toCollapse.set(requestIdGenerator, toProcess);
+ messaging.send('contentscript', {
+ what: 'getCollapsibleBlockedRequests',
+ id: requestIdGenerator,
+ frameURL: window.location.href,
+ resources: toFilter,
+ hash: cachedBlockedSetHash,
+ }).then(response => {
+ onProcessed(response);
+ });
+ toProcess = [];
+ toFilter = [];
+ requestIdGenerator += 1;
+ };
+
+ const process = function(delay) {
+ if ( toProcess.length === 0 ) { return; }
+ if ( delay === 0 ) {
+ if ( processTimer !== undefined ) {
+ clearTimeout(processTimer);
+ }
+ send();
+ } else if ( processTimer === undefined ) {
+ processTimer = vAPI.setTimeout(send, delay || 20);
+ }
+ };
+
+ const add = function(target) {
+ toProcess[toProcess.length] = target;
+ };
+
+ const addMany = function(targets) {
+ for ( const target of targets ) {
+ add(target);
+ }
+ };
+
+ const iframeSourceModified = function(mutations) {
+ for ( const mutation of mutations ) {
+ addIFrame(mutation.target, true);
+ }
+ process();
+ };
+ const iframeSourceObserver = new MutationObserver(iframeSourceModified);
+ const iframeSourceObserverOptions = {
+ attributes: true,
+ attributeFilter: [ 'src' ]
+ };
+
+ // https://github.com/gorhill/uBlock/issues/162
+ // Be prepared to deal with possible change of src attribute.
+ const addIFrame = function(iframe, dontObserve) {
+ if ( dontObserve !== true ) {
+ iframeSourceObserver.observe(iframe, iframeSourceObserverOptions);
+ }
+ const src = iframe.src;
+ if ( typeof src !== 'string' || src === '' ) { return; }
+ if ( src.startsWith('http') === false ) { return; }
+ toFilter.push({ type: 'sub_frame', url: iframe.src });
+ add(iframe);
+ };
+
+ const addIFrames = function(iframes) {
+ for ( const iframe of iframes ) {
+ addIFrame(iframe);
+ }
+ };
+
+ const onResourceFailed = function(ev) {
+ if ( tagToTypeMap[ev.target.localName] !== undefined ) {
+ add(ev.target);
+ process();
+ }
+ };
+
+ const stop = function() {
+ document.removeEventListener('error', onResourceFailed, true);
+ if ( processTimer !== undefined ) {
+ clearTimeout(processTimer);
+ }
+ if ( vAPI.domWatcher instanceof Object ) {
+ vAPI.domWatcher.removeListener(domWatcherInterface);
+ }
+ vAPI.shutdown.remove(stop);
+ vAPI.domCollapser = null;
+ };
+
+ const start = function() {
+ if ( vAPI.domWatcher instanceof Object ) {
+ vAPI.domWatcher.addListener(domWatcherInterface);
+ }
+ };
+
+ const domWatcherInterface = {
+ onDOMCreated: function() {
+ if ( self.vAPI instanceof Object === false ) { return; }
+ if ( vAPI.domCollapser instanceof Object === false ) {
+ if ( vAPI.domWatcher instanceof Object ) {
+ vAPI.domWatcher.removeListener(domWatcherInterface);
+ }
+ return;
+ }
+ // Listener to collapse blocked resources.
+ // - Future requests not blocked yet
+ // - Elements dynamically added to the page
+ // - Elements which resource URL changes
+ // https://github.com/chrisaljoudi/uBlock/issues/7
+ // Preferring getElementsByTagName over querySelectorAll:
+ // http://jsperf.com/queryselectorall-vs-getelementsbytagname/145
+ const elems = document.images ||
+ document.getElementsByTagName('img');
+ for ( const elem of elems ) {
+ if ( elem.complete ) {
+ add(elem);
+ }
+ }
+ addMany(document.embeds || document.getElementsByTagName('embed'));
+ addMany(document.getElementsByTagName('object'));
+ addIFrames(document.getElementsByTagName('iframe'));
+ process(0);
+
+ document.addEventListener('error', onResourceFailed, true);
+
+ vAPI.shutdown.add(stop);
+ },
+ onDOMChanged: function(addedNodes) {
+ if ( addedNodes.length === 0 ) { return; }
+ for ( const node of addedNodes ) {
+ if ( node.localName === 'iframe' ) {
+ addIFrame(node);
+ }
+ if ( node.firstElementChild === null ) { continue; }
+ const iframes = node.getElementsByTagName('iframe');
+ if ( iframes.length !== 0 ) {
+ addIFrames(iframes);
+ }
+ }
+ process();
+ }
+ };
+
+ vAPI.domCollapser = { start };
+}
+
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+
+// vAPI.domSurveyor
+
+{
+ // http://www.cse.yorku.ca/~oz/hash.html#djb2
+ // Must mirror cosmetic filtering compiler's version
+ const hashFromStr = (type, s) => {
+ const len = s.length;
+ const step = len + 7 >>> 3;
+ let hash = (type << 5) + type ^ len;
+ for ( let i = 0; i < len; i += step ) {
+ hash = (hash << 5) + hash ^ s.charCodeAt(i);
+ }
+ return hash & 0xFFFFFF;
+ };
+
+ const addHashes = hashes => {
+ for ( const hash of hashes ) {
+ queriedHashes.add(hash);
+ }
+ };
+
+ const queriedHashes = new Set();
+ const maxSurveyNodes = 65536;
+ const pendingLists = [];
+ const pendingNodes = [];
+ const processedSet = new Set();
+ let domFilterer;
+ let hostname = '';
+ let domChanged = false;
+ let scannedCount = 0;
+ let stopped = false;
+
+ const addPendingList = list => {
+ if ( list.length === 0 ) { return; }
+ pendingLists.push(Array.from(list));
+ };
+
+ const nextPendingNodes = ( ) => {
+ if ( pendingLists.length === 0 ) { return 0; }
+ const bufferSize = 256;
+ let j = 0;
+ do {
+ const nodeList = pendingLists[0];
+ let n = bufferSize - j;
+ if ( n > nodeList.length ) {
+ n = nodeList.length;
+ }
+ for ( let i = 0; i < n; i++ ) {
+ pendingNodes[j+i] = nodeList[i];
+ }
+ j += n;
+ if ( n !== nodeList.length ) {
+ pendingLists[0] = nodeList.slice(n);
+ break;
+ }
+ pendingLists.shift();
+ } while ( j < bufferSize && pendingLists.length !== 0 );
+ return j;
+ };
+
+ const hasPendingNodes = ( ) => {
+ return pendingLists.length !== 0;
+ };
+
+ // Extract all classes/ids: these will be passed to the cosmetic
+ // filtering engine, and in return we will obtain only the relevant
+ // CSS selectors.
+
+ // https://github.com/gorhill/uBlock/issues/672
+ // http://www.w3.org/TR/2014/REC-html5-20141028/infrastructure.html#space-separated-tokens
+ // http://jsperf.com/enumerate-classes/6
+
+ const idFromNode = (node, out) => {
+ const raw = node.id;
+ if ( typeof raw !== 'string' || raw.length === 0 ) { return; }
+ const hash = hashFromStr(0x23 /* '#' */, raw.trim());
+ if ( queriedHashes.has(hash) ) { return; }
+ queriedHashes.add(hash);
+ out.push(hash);
+ };
+
+ // https://github.com/uBlockOrigin/uBlock-issues/discussions/2076
+ // Performance: avoid using Element.classList
+ const classesFromNode = (node, out) => {
+ const s = node.getAttribute('class');
+ if ( typeof s !== 'string' ) { return; }
+ const len = s.length;
+ for ( let beg = 0, end = 0; beg < len; beg += 1 ) {
+ end = s.indexOf(' ', beg);
+ if ( end === beg ) { continue; }
+ if ( end === -1 ) { end = len; }
+ const hash = hashFromStr(0x2E /* '.' */, s.slice(beg, end));
+ beg = end;
+ if ( queriedHashes.has(hash) ) { continue; }
+ queriedHashes.add(hash);
+ out.push(hash);
+ }
+ };
+
+ const getSurveyResults = (hashes, safeOnly) => {
+ if ( self.vAPI.messaging instanceof Object === false ) {
+ stop(); return;
+ }
+ const promise = hashes.length === 0
+ ? Promise.resolve(null)
+ : self.vAPI.messaging.send('contentscript', {
+ what: 'retrieveGenericCosmeticSelectors',
+ hostname,
+ hashes,
+ exceptions: domFilterer.exceptions,
+ safeOnly,
+ });
+ promise.then(response => {
+ processSurveyResults(response);
+ });
+ };
+
+ const doSurvey = ( ) => {
+ if ( self.vAPI instanceof Object === false ) { return; }
+ const t0 = performance.now();
+ const hashes = [];
+ const nodes = pendingNodes;
+ const deadline = t0 + 4;
+ let processed = 0;
+ let scanned = 0;
+ for (;;) {
+ const n = nextPendingNodes();
+ if ( n === 0 ) { break; }
+ for ( let i = 0; i < n; i++ ) {
+ const node = nodes[i]; nodes[i] = null;
+ if ( domChanged ) {
+ if ( processedSet.has(node) ) { continue; }
+ processedSet.add(node);
+ }
+ idFromNode(node, hashes);
+ classesFromNode(node, hashes);
+ scanned += 1;
+ }
+ processed += n;
+ if ( performance.now() >= deadline ) { break; }
+ }
+ //console.info(`[domSurveyor][${hostname}] Surveyed ${scanned}/${processed} nodes in ${(performance.now()-t0).toFixed(2)} ms: ${hashes.length} hashes`);
+ scannedCount += scanned;
+ if ( scannedCount >= maxSurveyNodes ) {
+ stop();
+ }
+ processedSet.clear();
+ getSurveyResults(hashes);
+ };
+
+ const surveyTimer = new vAPI.SafeAnimationFrame(doSurvey);
+
+ // This is to shutdown the surveyor if result of surveying keeps being
+ // fruitless. This is useful on long-lived web page. I arbitrarily
+ // picked 5 minutes before the surveyor is allowed to shutdown. I also
+ // arbitrarily picked 256 misses before the surveyor is allowed to
+ // shutdown.
+ let canShutdownAfter = Date.now() + 300000;
+ let surveyResultMissCount = 0;
+
+ // Handle main process' response.
+
+ const processSurveyResults = response => {
+ if ( stopped ) { return; }
+ const result = response && response.result;
+ let mustCommit = false;
+ if ( result ) {
+ const css = result.injectedCSS;
+ if ( typeof css === 'string' && css.length !== 0 ) {
+ domFilterer.addCSS(css);
+ mustCommit = true;
+ }
+ const selectors = result.excepted;
+ if ( Array.isArray(selectors) && selectors.length !== 0 ) {
+ domFilterer.exceptCSSRules(selectors);
+ }
+ }
+ if ( hasPendingNodes() ) {
+ surveyTimer.start(1);
+ }
+ if ( mustCommit ) {
+ surveyResultMissCount = 0;
+ canShutdownAfter = Date.now() + 300000;
+ return;
+ }
+ surveyResultMissCount += 1;
+ if ( surveyResultMissCount < 256 || Date.now() < canShutdownAfter ) {
+ return;
+ }
+ //console.info(`[domSurveyor][${hostname}] Shutting down, too many misses`);
+ stop();
+ self.vAPI.messaging.send('contentscript', {
+ what: 'disableGenericCosmeticFilteringSurveyor',
+ hostname,
+ });
+ };
+
+ const domWatcherInterface = {
+ onDOMCreated: function() {
+ domFilterer = vAPI.domFilterer;
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1692
+ // Look-up safe-only selectors to mitigate probability of
+ // html/body elements of erroneously being targeted.
+ const hashes = [];
+ if ( document.documentElement !== null ) {
+ idFromNode(document.documentElement, hashes);
+ classesFromNode(document.documentElement, hashes);
+ }
+ if ( document.body !== null ) {
+ idFromNode(document.body, hashes);
+ classesFromNode(document.body, hashes);
+ }
+ if ( hashes.length !== 0 ) {
+ getSurveyResults(hashes, true);
+ }
+ addPendingList(document.querySelectorAll(
+ '[id]:not(html):not(body),[class]:not(html):not(body)'
+ ));
+ if ( hasPendingNodes() ) {
+ surveyTimer.start();
+ }
+ },
+ onDOMChanged: function(addedNodes) {
+ if ( addedNodes.length === 0 ) { return; }
+ domChanged = true;
+ for ( const node of addedNodes ) {
+ addPendingList([ node ]);
+ if ( node.firstElementChild === null ) { continue; }
+ addPendingList(
+ node.querySelectorAll(
+ '[id]:not(html):not(body),[class]:not(html):not(body)'
+ )
+ );
+ }
+ if ( hasPendingNodes() ) {
+ surveyTimer.start(1);
+ }
+ }
+ };
+
+ const start = details => {
+ if ( self.vAPI instanceof Object === false ) { return; }
+ if ( self.vAPI.domFilterer instanceof Object === false ) { return; }
+ if ( self.vAPI.domWatcher instanceof Object === false ) { return; }
+ hostname = details.hostname;
+ self.vAPI.domWatcher.addListener(domWatcherInterface);
+ };
+
+ const stop = ( ) => {
+ stopped = true;
+ pendingLists.length = 0;
+ surveyTimer.clear();
+ if ( self.vAPI instanceof Object === false ) { return; }
+ if ( self.vAPI.domWatcher instanceof Object ) {
+ self.vAPI.domWatcher.removeListener(domWatcherInterface);
+ }
+ self.vAPI.domSurveyor = null;
+ };
+
+ self.vAPI.domSurveyor = { start, addHashes };
+}
+
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+
+// vAPI.bootstrap:
+// Bootstrapping allows all components of the content script
+// to be launched if/when needed.
+
+{
+ const onDomReady = ( ) => {
+ // This can happen on Firefox. For instance:
+ // https://github.com/gorhill/uBlock/issues/1893
+ if ( window.location === null ) { return; }
+ if ( self.vAPI instanceof Object === false ) { return; }
+
+ vAPI.messaging.send('contentscript', {
+ what: 'shouldRenderNoscriptTags',
+ });
+
+ if ( vAPI.domFilterer instanceof Object ) {
+ vAPI.domFilterer.commitNow();
+ }
+
+ if ( vAPI.domWatcher instanceof Object ) {
+ vAPI.domWatcher.start();
+ }
+
+ // Element picker works only in top window for now.
+ if (
+ window !== window.top ||
+ vAPI.domFilterer instanceof Object === false
+ ) {
+ return;
+ }
+
+ // To be used by element picker/zapper.
+ vAPI.mouseClick = { x: -1, y: -1 };
+
+ const onMouseClick = function(ev) {
+ if ( ev.isTrusted === false ) { return; }
+ vAPI.mouseClick.x = ev.clientX;
+ vAPI.mouseClick.y = ev.clientY;
+
+ // https://github.com/chrisaljoudi/uBlock/issues/1143
+ // Find a link under the mouse, to try to avoid confusing new tabs
+ // as nuisance popups.
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/777
+ // Mind that href may not be a string.
+ const elem = ev.target.closest('a[href]');
+ if ( elem === null || typeof elem.href !== 'string' ) { return; }
+ vAPI.messaging.send('contentscript', {
+ what: 'maybeGoodPopup',
+ url: elem.href || '',
+ });
+ };
+
+ document.addEventListener('mousedown', onMouseClick, true);
+
+ // https://github.com/gorhill/uMatrix/issues/144
+ vAPI.shutdown.add(function() {
+ document.removeEventListener('mousedown', onMouseClick, true);
+ });
+ };
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/403
+ // If there was a spurious port disconnection -- in which case the
+ // response is expressly set to `null`, rather than undefined or
+ // an object -- let's stay around, we may be given the opportunity
+ // to try bootstrapping again later.
+
+ const onResponseReady = response => {
+ if ( response instanceof Object === false ) { return; }
+ vAPI.bootstrap = undefined;
+
+ // cosmetic filtering engine aka 'cfe'
+ const cfeDetails = response && response.specificCosmeticFilters;
+ if ( !cfeDetails || !cfeDetails.ready ) {
+ vAPI.domWatcher = vAPI.domCollapser = vAPI.domFilterer =
+ vAPI.domSurveyor = vAPI.domIsLoaded = null;
+ return;
+ }
+
+ vAPI.domCollapser.start();
+
+ const {
+ noSpecificCosmeticFiltering,
+ noGenericCosmeticFiltering,
+ scriptletDetails,
+ } = response;
+
+ vAPI.noSpecificCosmeticFiltering = noSpecificCosmeticFiltering;
+ vAPI.noGenericCosmeticFiltering = noGenericCosmeticFiltering;
+
+ if ( noSpecificCosmeticFiltering && noGenericCosmeticFiltering ) {
+ vAPI.domFilterer = null;
+ vAPI.domSurveyor = null;
+ } else {
+ const domFilterer = vAPI.domFilterer = new vAPI.DOMFilterer();
+ if ( noGenericCosmeticFiltering || cfeDetails.disableSurveyor ) {
+ vAPI.domSurveyor = null;
+ }
+ domFilterer.exceptions = cfeDetails.exceptionFilters;
+ domFilterer.addCSS(cfeDetails.injectedCSS);
+ domFilterer.addProceduralSelectors(cfeDetails.proceduralFilters);
+ domFilterer.exceptCSSRules(cfeDetails.exceptedFilters);
+ domFilterer.convertedProceduralFilters = cfeDetails.convertedProceduralFilters;
+ vAPI.userStylesheet.apply();
+ }
+
+ if ( scriptletDetails && typeof self.uBO_scriptletsInjected !== 'string' ) {
+ self.uBO_scriptletsInjected = scriptletDetails.filters;
+ if ( scriptletDetails.mainWorld ) {
+ vAPI.injectScriptlet(document, scriptletDetails.mainWorld);
+ vAPI.injectedScripts = scriptletDetails.mainWorld;
+ }
+ }
+
+ if ( vAPI.domSurveyor ) {
+ if ( Array.isArray(cfeDetails.genericCosmeticHashes) ) {
+ vAPI.domSurveyor.addHashes(cfeDetails.genericCosmeticHashes);
+ }
+ vAPI.domSurveyor.start(cfeDetails);
+ }
+
+ const readyState = document.readyState;
+ if ( readyState === 'interactive' || readyState === 'complete' ) {
+ return onDomReady();
+ }
+ document.addEventListener('DOMContentLoaded', onDomReady, { once: true });
+ };
+
+ vAPI.bootstrap = function() {
+ vAPI.messaging.send('contentscript', {
+ what: 'retrieveContentScriptParameters',
+ url: vAPI.effectiveSelf.location.href,
+ needScriptlets: typeof self.uBO_scriptletsInjected !== 'string',
+ }).then(response => {
+ onResponseReady(response);
+ });
+ };
+}
+
+// This starts bootstrap process.
+vAPI.bootstrap();
+
+/******************************************************************************/
+/******************************************************************************/
+/******************************************************************************/
+
+}
+// <<<<<<<< end of HUGE-IF-BLOCK
diff --git a/src/js/contextmenu.js b/src/js/contextmenu.js
new file mode 100644
index 0000000..abf0582
--- /dev/null
+++ b/src/js/contextmenu.js
@@ -0,0 +1,270 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import µb from './background.js';
+import { i18n$ } from './i18n.js';
+
+/******************************************************************************/
+
+const contextMenu = (( ) => {
+
+/******************************************************************************/
+
+if ( vAPI.contextMenu === undefined ) {
+ return {
+ update: function() {}
+ };
+}
+
+/******************************************************************************/
+
+const BLOCK_ELEMENT_BIT = 0b00001;
+const BLOCK_RESOURCE_BIT = 0b00010;
+const TEMP_ALLOW_LARGE_MEDIA_BIT = 0b00100;
+const SUBSCRIBE_TO_LIST_BIT = 0b01000;
+const VIEW_SOURCE_BIT = 0b10000;
+
+/******************************************************************************/
+
+const onBlockElement = function(details, tab) {
+ if ( tab === undefined ) { return; }
+ if ( /^https?:\/\//.test(tab.url) === false ) { return; }
+ let tagName = details.tagName || '';
+ let src = details.frameUrl || details.srcUrl || details.linkUrl || '';
+
+ if ( !tagName ) {
+ if ( typeof details.frameUrl === 'string' ) {
+ tagName = 'iframe';
+ } else if ( typeof details.srcUrl === 'string' ) {
+ if ( details.mediaType === 'image' ) {
+ tagName = 'img';
+ } else if ( details.mediaType === 'video' ) {
+ tagName = 'video';
+ } else if ( details.mediaType === 'audio' ) {
+ tagName = 'audio';
+ }
+ } else if ( typeof details.linkUrl === 'string' ) {
+ tagName = 'a';
+ }
+ }
+
+ µb.epickerArgs.mouse = true;
+ µb.elementPickerExec(tab.id, 0, `${tagName}\t${src}`);
+};
+
+/******************************************************************************/
+
+const onBlockElementInFrame = function(details, tab) {
+ if ( tab === undefined ) { return; }
+ if ( /^https?:\/\//.test(details.frameUrl) === false ) { return; }
+ µb.epickerArgs.mouse = false;
+ µb.elementPickerExec(tab.id, details.frameId);
+};
+
+/******************************************************************************/
+
+const onSubscribeToList = function(details) {
+ let parsedURL;
+ try {
+ parsedURL = new URL(details.linkUrl);
+ }
+ catch(ex) {
+ }
+ if ( parsedURL instanceof URL === false ) { return; }
+ const url = parsedURL.searchParams.get('location');
+ if ( url === null ) { return; }
+ const title = parsedURL.searchParams.get('title') || '?';
+ const hash = µb.selectedFilterLists.indexOf(parsedURL) !== -1
+ ? '#subscribed'
+ : '';
+ vAPI.tabs.open({
+ url:
+ `/asset-viewer.html` +
+ `?url=${encodeURIComponent(url)}` +
+ `&title=${encodeURIComponent(title)}` +
+ `&subscribe=1${hash}`,
+ select: true,
+ });
+};
+
+/******************************************************************************/
+
+const onTemporarilyAllowLargeMediaElements = function(details, tab) {
+ if ( tab === undefined ) { return; }
+ const pageStore = µb.pageStoreFromTabId(tab.id);
+ if ( pageStore === null ) { return; }
+ pageStore.temporarilyAllowLargeMediaElements(true);
+};
+
+/******************************************************************************/
+
+const onViewSource = function(details, tab) {
+ if ( tab === undefined ) { return; }
+ const url = details.linkUrl || details.frameUrl || details.pageUrl || '';
+ if ( /^https?:\/\//.test(url) === false ) { return; }
+ µb.openNewTab({
+ url: `code-viewer.html?url=${self.encodeURIComponent(url)}`,
+ select: true,
+ });
+};
+
+/******************************************************************************/
+
+const onEntryClicked = function(details, tab) {
+ if ( details.menuItemId === 'uBlock0-blockElement' ) {
+ return onBlockElement(details, tab);
+ }
+ if ( details.menuItemId === 'uBlock0-blockElementInFrame' ) {
+ return onBlockElementInFrame(details, tab);
+ }
+ if ( details.menuItemId === 'uBlock0-blockResource' ) {
+ return onBlockElement(details, tab);
+ }
+ if ( details.menuItemId === 'uBlock0-subscribeToList' ) {
+ return onSubscribeToList(details);
+ }
+ if ( details.menuItemId === 'uBlock0-temporarilyAllowLargeMediaElements' ) {
+ return onTemporarilyAllowLargeMediaElements(details, tab);
+ }
+ if ( details.menuItemId === 'uBlock0-viewSource' ) {
+ return onViewSource(details, tab);
+ }
+};
+
+/******************************************************************************/
+
+const menuEntries = {
+ blockElement: {
+ id: 'uBlock0-blockElement',
+ title: i18n$('pickerContextMenuEntry'),
+ contexts: [ 'all' ],
+ documentUrlPatterns: [ 'http://*/*', 'https://*/*' ],
+ },
+ blockElementInFrame: {
+ id: 'uBlock0-blockElementInFrame',
+ title: i18n$('contextMenuBlockElementInFrame'),
+ contexts: [ 'frame' ],
+ documentUrlPatterns: [ 'http://*/*', 'https://*/*' ],
+ },
+ blockResource: {
+ id: 'uBlock0-blockResource',
+ title: i18n$('pickerContextMenuEntry'),
+ contexts: [ 'audio', 'frame', 'image', 'video' ],
+ documentUrlPatterns: [ 'http://*/*', 'https://*/*' ],
+ },
+ subscribeToList: {
+ id: 'uBlock0-subscribeToList',
+ title: i18n$('contextMenuSubscribeToList'),
+ contexts: [ 'link' ],
+ targetUrlPatterns: [ 'abp:*', 'https://subscribe.adblockplus.org/*' ],
+ },
+ temporarilyAllowLargeMediaElements: {
+ id: 'uBlock0-temporarilyAllowLargeMediaElements',
+ title: i18n$('contextMenuTemporarilyAllowLargeMediaElements'),
+ contexts: [ 'all' ],
+ documentUrlPatterns: [ 'http://*/*', 'https://*/*' ],
+ },
+ viewSource: {
+ id: 'uBlock0-viewSource',
+ title: i18n$('contextMenuViewSource'),
+ contexts: [ 'page', 'frame', 'link' ],
+ documentUrlPatterns: [ 'http://*/*', 'https://*/*' ],
+ },
+};
+
+/******************************************************************************/
+
+let currentBits = 0;
+
+const update = function(tabId = undefined) {
+ let newBits = 0;
+ if ( µb.userSettings.contextMenuEnabled && tabId !== undefined ) {
+ const pageStore = µb.pageStoreFromTabId(tabId);
+ if ( pageStore && pageStore.getNetFilteringSwitch() ) {
+ if ( pageStore.shouldApplySpecificCosmeticFilters(0) ) {
+ newBits |= BLOCK_ELEMENT_BIT;
+ } else {
+ newBits |= BLOCK_RESOURCE_BIT;
+ }
+ if ( pageStore.largeMediaCount !== 0 ) {
+ newBits |= TEMP_ALLOW_LARGE_MEDIA_BIT;
+ }
+ }
+ newBits |= SUBSCRIBE_TO_LIST_BIT;
+ }
+ if ( µb.hiddenSettings.filterAuthorMode ) {
+ newBits |= VIEW_SOURCE_BIT;
+ }
+ if ( newBits === currentBits ) { return; }
+ currentBits = newBits;
+ const usedEntries = [];
+ if ( (newBits & BLOCK_ELEMENT_BIT) !== 0 ) {
+ usedEntries.push(menuEntries.blockElement);
+ usedEntries.push(menuEntries.blockElementInFrame);
+ }
+ if ( (newBits & BLOCK_RESOURCE_BIT) !== 0 ) {
+ usedEntries.push(menuEntries.blockResource);
+ }
+ if ( (newBits & TEMP_ALLOW_LARGE_MEDIA_BIT) !== 0 ) {
+ usedEntries.push(menuEntries.temporarilyAllowLargeMediaElements);
+ }
+ if ( (newBits & SUBSCRIBE_TO_LIST_BIT) !== 0 ) {
+ usedEntries.push(menuEntries.subscribeToList);
+ }
+ if ( (newBits & VIEW_SOURCE_BIT) !== 0 ) {
+ usedEntries.push(menuEntries.viewSource);
+ }
+ vAPI.contextMenu.setEntries(usedEntries, onEntryClicked);
+};
+
+/******************************************************************************/
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/151
+// For unknown reasons, the currently active tab will not be successfully
+// looked up after closing a window.
+
+vAPI.contextMenu.onMustUpdate = async function(tabId = undefined) {
+ if ( µb.userSettings.contextMenuEnabled === false ) {
+ return update();
+ }
+ if ( tabId !== undefined ) {
+ return update(tabId);
+ }
+ const tab = await vAPI.tabs.getCurrent();
+ if ( tab instanceof Object === false ) { return; }
+ update(tab.id);
+};
+
+return { update: vAPI.contextMenu.onMustUpdate };
+
+/******************************************************************************/
+
+})();
+
+/******************************************************************************/
+
+export default contextMenu;
+
+/******************************************************************************/
diff --git a/src/js/cosmetic-filtering.js b/src/js/cosmetic-filtering.js
new file mode 100644
index 0000000..f4782bc
--- /dev/null
+++ b/src/js/cosmetic-filtering.js
@@ -0,0 +1,983 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import logger from './logger.js';
+import µb from './background.js';
+
+import { MRUCache } from './mrucache.js';
+import { StaticExtFilteringHostnameDB } from './static-ext-filtering-db.js';
+
+/******************************************************************************/
+/******************************************************************************/
+
+const SelectorCacheEntry = class {
+ constructor() {
+ this.reset();
+ }
+
+ reset() {
+ this.cosmetic = new Set();
+ this.cosmeticHashes = new Set();
+ this.disableSurveyor = false;
+ this.net = new Map();
+ this.accessId = SelectorCacheEntry.accessId++;
+ return this;
+ }
+
+ dispose() {
+ this.cosmetic = this.cosmeticHashes = this.net = null;
+ if ( SelectorCacheEntry.junkyard.length < 25 ) {
+ SelectorCacheEntry.junkyard.push(this);
+ }
+ }
+
+ addCosmetic(details) {
+ const selectors = details.selectors.join(',\n');
+ if ( selectors.length !== 0 ) {
+ this.cosmetic.add(selectors);
+ }
+ for ( const hash of details.hashes ) {
+ this.cosmeticHashes.add(hash);
+ }
+ }
+
+ addNet(selectors) {
+ if ( typeof selectors === 'string' ) {
+ this.net.set(selectors, this.accessId);
+ } else {
+ this.net.set(selectors.join(',\n'), this.accessId);
+ }
+ // Net request-derived selectors: I limit the number of cached
+ // selectors, as I expect cases where the blocked network requests
+ // are never the exact same URL.
+ if ( this.net.size < SelectorCacheEntry.netHighWaterMark ) { return; }
+ const keys = Array.from(this.net)
+ .sort((a, b) => b[1] - a[1])
+ .slice(SelectorCacheEntry.netLowWaterMark)
+ .map(a => a[0]);
+ for ( const key of keys ) {
+ this.net.delete(key);
+ }
+ }
+
+ addNetOne(selector, token) {
+ this.net.set(selector, token);
+ }
+
+ add(details) {
+ this.accessId = SelectorCacheEntry.accessId++;
+ if ( details.type === 'cosmetic' ) {
+ this.addCosmetic(details);
+ } else {
+ this.addNet(details.selectors);
+ }
+ }
+
+ // https://github.com/chrisaljoudi/uBlock/issues/420
+ remove(type) {
+ this.accessId = SelectorCacheEntry.accessId++;
+ if ( type === undefined || type === 'cosmetic' ) {
+ this.cosmetic.clear();
+ }
+ if ( type === undefined || type === 'net' ) {
+ this.net.clear();
+ }
+ }
+
+ retrieveToArray(iterator, out) {
+ for ( const selector of iterator ) {
+ out.push(selector);
+ }
+ }
+
+ retrieveToSet(iterator, out) {
+ for ( const selector of iterator ) {
+ out.add(selector);
+ }
+ }
+
+ retrieveNet(out) {
+ this.accessId = SelectorCacheEntry.accessId++;
+ if ( this.net.size === 0 ) { return false; }
+ this.retrieveToArray(this.net.keys(), out);
+ return true;
+ }
+
+ retrieveCosmetic(selectors, hashes) {
+ this.accessId = SelectorCacheEntry.accessId++;
+ if ( this.cosmetic.size === 0 ) { return false; }
+ this.retrieveToSet(this.cosmetic, selectors);
+ this.retrieveToArray(this.cosmeticHashes, hashes);
+ return true;
+ }
+
+ static factory() {
+ const entry = SelectorCacheEntry.junkyard.pop();
+ return entry
+ ? entry.reset()
+ : new SelectorCacheEntry();
+ }
+};
+
+SelectorCacheEntry.accessId = 1;
+SelectorCacheEntry.netLowWaterMark = 20;
+SelectorCacheEntry.netHighWaterMark = 30;
+SelectorCacheEntry.junkyard = [];
+
+/******************************************************************************/
+/******************************************************************************/
+
+// http://www.cse.yorku.ca/~oz/hash.html#djb2
+// Must mirror content script surveyor's version
+
+const hashFromStr = (type, s) => {
+ const len = s.length;
+ const step = len + 7 >>> 3;
+ let hash = (type << 5) + type ^ len;
+ for ( let i = 0; i < len; i += step ) {
+ hash = (hash << 5) + hash ^ s.charCodeAt(i);
+ }
+ return hash & 0xFFFFFF;
+};
+
+// https://github.com/gorhill/uBlock/issues/1668
+// The key must be literal: unescape escaped CSS before extracting key.
+// It's an uncommon case, so it's best to unescape only when needed.
+
+const keyFromSelector = selector => {
+ let key = '';
+ let matches = rePlainSelector.exec(selector);
+ if ( matches !== null ) {
+ key = matches[0];
+ } else {
+ matches = rePlainSelectorEx.exec(selector);
+ if ( matches === null ) { return; }
+ key = matches[1] || matches[2];
+ }
+ if ( key.includes('\\') === false ) { return key; }
+ matches = rePlainSelectorEscaped.exec(selector);
+ if ( matches === null ) { return; }
+ key = '';
+ const escaped = matches[0];
+ let beg = 0;
+ reEscapeSequence.lastIndex = 0;
+ for (;;) {
+ matches = reEscapeSequence.exec(escaped);
+ if ( matches === null ) {
+ return key + escaped.slice(beg);
+ }
+ key += escaped.slice(beg, matches.index);
+ beg = reEscapeSequence.lastIndex;
+ if ( matches[1].length === 1 ) {
+ key += matches[1];
+ } else {
+ key += String.fromCharCode(parseInt(matches[1], 16));
+ }
+ }
+};
+
+const rePlainSelector = /^[#.][\w\\-]+/;
+const rePlainSelectorEx = /^[^#.\[(]+([#.][\w-]+)|([#.][\w-]+)$/;
+const rePlainSelectorEscaped = /^[#.](?:\\[0-9A-Fa-f]+ |\\.|\w|-)+/;
+const reEscapeSequence = /\\([0-9A-Fa-f]+ |.)/g;
+
+/******************************************************************************/
+/******************************************************************************/
+
+// Cosmetic filter family tree:
+//
+// Generic
+// Low generic simple: class or id only
+// Low generic complex: class or id + extra stuff after
+// High generic:
+// High-low generic: [alt="..."],[title="..."]
+// High-medium generic: [href^="..."]
+// High-high generic: everything else
+// Specific
+// Specific hostname
+// Specific entity
+// Generic filters can only be enforced once the main document is loaded.
+// Specific filers can be enforced before the main document is loaded.
+
+const FilterContainer = function() {
+ this.reSimpleHighGeneric = /^(?:[a-z]*\[[^\]]+\]|\S+)$/;
+
+ this.selectorCache = new Map();
+ this.selectorCachePruneDelay = 10; // 10 minutes
+ this.selectorCacheCountMin = 40;
+ this.selectorCacheCountMax = 50;
+ this.selectorCacheTimer = vAPI.defer.create(( ) => {
+ this.pruneSelectorCacheAsync();
+ });
+
+ // specific filters
+ this.specificFilters = new StaticExtFilteringHostnameDB(2);
+
+ // low generic cosmetic filters: map of hash => stringified selector list
+ this.lowlyGeneric = new Map();
+
+ // highly generic selectors sets
+ this.highlyGeneric = Object.create(null);
+ this.highlyGeneric.simple = {
+ canonical: 'highGenericHideSimple',
+ dict: new Set(),
+ str: '',
+ mru: new MRUCache(16)
+ };
+ this.highlyGeneric.complex = {
+ canonical: 'highGenericHideComplex',
+ dict: new Set(),
+ str: '',
+ mru: new MRUCache(16)
+ };
+
+ // Short-lived: content is valid only during one function call. These
+ // is to prevent repeated allocation/deallocation overheads -- the
+ // constructors/destructors of javascript Set/Map is assumed to be costlier
+ // than just calling clear() on these.
+ this.$specificSet = new Set();
+ this.$exceptionSet = new Set();
+ this.$proceduralSet = new Set();
+ this.$dummySet = new Set();
+
+ this.reset();
+};
+
+/******************************************************************************/
+
+// Reset all, thus reducing to a minimum memory footprint of the context.
+
+FilterContainer.prototype.reset = function() {
+ this.frozen = false;
+ this.acceptedCount = 0;
+ this.discardedCount = 0;
+ this.duplicateBuster = new Set();
+
+ this.selectorCache.clear();
+ this.selectorCacheTimer.off();
+
+ // hostname, entity-based filters
+ this.specificFilters.clear();
+
+ // low generic cosmetic filters
+ this.lowlyGeneric.clear();
+
+ // highly generic selectors sets
+ this.highlyGeneric.simple.dict.clear();
+ this.highlyGeneric.simple.str = '';
+ this.highlyGeneric.simple.mru.reset();
+ this.highlyGeneric.complex.dict.clear();
+ this.highlyGeneric.complex.str = '';
+ this.highlyGeneric.complex.mru.reset();
+
+ this.selfieVersion = 1;
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.freeze = function() {
+ this.duplicateBuster.clear();
+ this.specificFilters.collectGarbage();
+
+ this.highlyGeneric.simple.str = Array.from(this.highlyGeneric.simple.dict).join(',\n');
+ this.highlyGeneric.simple.mru.reset();
+ this.highlyGeneric.complex.str = Array.from(this.highlyGeneric.complex.dict).join(',\n');
+ this.highlyGeneric.complex.mru.reset();
+
+ this.frozen = true;
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.compile = function(parser, writer) {
+ if ( parser.hasOptions() === false ) {
+ this.compileGenericSelector(parser, writer);
+ return true;
+ }
+
+ // https://github.com/chrisaljoudi/uBlock/issues/151
+ // Negated hostname means the filter applies to all non-negated hostnames
+ // of same filter OR globally if there is no non-negated hostnames.
+ let applyGlobally = true;
+ for ( const { hn, not, bad } of parser.getExtFilterDomainIterator() ) {
+ if ( bad ) { continue; }
+ if ( not === false ) {
+ applyGlobally = false;
+ }
+ this.compileSpecificSelector(parser, hn, not, writer);
+ }
+ if ( applyGlobally ) {
+ this.compileGenericSelector(parser, writer);
+ }
+
+ return true;
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.compileGenericSelector = function(parser, writer) {
+ if ( parser.isException() ) {
+ this.compileGenericUnhideSelector(parser, writer);
+ } else {
+ this.compileGenericHideSelector(parser, writer);
+ }
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.compileGenericHideSelector = function(
+ parser,
+ writer
+) {
+ const { raw, compiled } = parser.result;
+ if ( compiled === undefined ) {
+ const who = writer.properties.get('name') || '?';
+ logger.writeOne({
+ realm: 'message',
+ type: 'error',
+ text: `Invalid generic cosmetic filter in ${who}: ${raw}`
+ });
+ return;
+ }
+
+ writer.select('COSMETIC_FILTERS:GENERIC');
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/131
+ // Support generic procedural filters as per advanced settings.
+ if ( compiled.charCodeAt(0) === 0x7B /* '{' */ ) {
+ if ( µb.hiddenSettings.allowGenericProceduralFilters === true ) {
+ return this.compileSpecificSelector(parser, '', false, writer);
+ }
+ const who = writer.properties.get('name') || '?';
+ logger.writeOne({
+ realm: 'message',
+ type: 'error',
+ text: `Invalid generic cosmetic filter in ${who}: ##${raw}`
+ });
+ return;
+ }
+
+ const key = keyFromSelector(compiled);
+ if ( key !== undefined ) {
+ writer.push([
+ 0,
+ hashFromStr(key.charCodeAt(0), key.slice(1)),
+ compiled,
+ ]);
+ return;
+ }
+
+ // Pass this point, we are dealing with highly-generic cosmetic filters.
+ //
+ // For efficiency purpose, we will distinguish between simple and complex
+ // selectors.
+
+ if ( this.reSimpleHighGeneric.test(compiled) ) {
+ writer.push([ 4 /* simple */, compiled ]);
+ } else {
+ writer.push([ 5 /* complex */, compiled ]);
+ }
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.compileGenericUnhideSelector = function(
+ parser,
+ writer
+) {
+ // Procedural cosmetic filters are acceptable as generic exception filters.
+ const { raw, compiled } = parser.result;
+ if ( compiled === undefined ) {
+ const who = writer.properties.get('name') || '?';
+ logger.writeOne({
+ realm: 'message',
+ type: 'error',
+ text: `Invalid cosmetic filter in ${who}: #@#${raw}`
+ });
+ return;
+ }
+
+ writer.select('COSMETIC_FILTERS:SPECIFIC');
+
+ // https://github.com/chrisaljoudi/uBlock/issues/497
+ // All generic exception filters are stored as hostname-based filter
+ // whereas the hostname is the empty string (which matches all
+ // hostnames). No distinction is made between declarative and
+ // procedural selectors, since they really exist only to cancel
+ // out other cosmetic filters.
+ writer.push([ 8, '', 0b001, compiled ]);
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.compileSpecificSelector = function(
+ parser,
+ hostname,
+ not,
+ writer
+) {
+ const { raw, compiled, exception } = parser.result;
+ if ( compiled === undefined ) {
+ const who = writer.properties.get('name') || '?';
+ logger.writeOne({
+ realm: 'message',
+ type: 'error',
+ text: `Invalid cosmetic filter in ${who}: ##${raw}`
+ });
+ return;
+ }
+
+ writer.select('COSMETIC_FILTERS:SPECIFIC');
+
+ // https://github.com/chrisaljoudi/uBlock/issues/145
+ let unhide = exception ? 1 : 0;
+ if ( not ) { unhide ^= 1; }
+
+ let kind = 0;
+ if ( unhide === 1 ) {
+ kind |= 0b001; // Exception
+ }
+ if ( compiled.charCodeAt(0) === 0x7B /* '{' */ ) {
+ kind |= 0b010; // Procedural
+ }
+ if ( hostname === '*' ) {
+ kind |= 0b100; // Applies everywhere
+ }
+
+ writer.push([ 8, hostname, kind, compiled ]);
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.fromCompiledContent = function(reader, options) {
+ if ( options.skipCosmetic ) {
+ this.skipCompiledContent(reader, 'SPECIFIC');
+ this.skipCompiledContent(reader, 'GENERIC');
+ return;
+ }
+
+ // Specific cosmetic filter section
+ reader.select('COSMETIC_FILTERS:SPECIFIC');
+ while ( reader.next() ) {
+ this.acceptedCount += 1;
+ const fingerprint = reader.fingerprint();
+ if ( this.duplicateBuster.has(fingerprint) ) {
+ this.discardedCount += 1;
+ continue;
+ }
+ this.duplicateBuster.add(fingerprint);
+ const args = reader.args();
+ switch ( args[0] ) {
+ // hash, example.com, .promoted-tweet
+ // hash, example.*, .promoted-tweet
+ //
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/803
+ // Handle specific filters meant to apply everywhere, i.e. selectors
+ // not to be injected conditionally through the DOM surveyor.
+ // hash, *, .promoted-tweet
+ case 8:
+ if ( args[2] === 0b100 ) {
+ if ( this.reSimpleHighGeneric.test(args[3]) )
+ this.highlyGeneric.simple.dict.add(args[3]);
+ else {
+ this.highlyGeneric.complex.dict.add(args[3]);
+ }
+ break;
+ }
+ this.specificFilters.store(args[1], args[2] & 0b011, args[3]);
+ break;
+ default:
+ this.discardedCount += 1;
+ break;
+ }
+ }
+
+ if ( options.skipGenericCosmetic ) {
+ this.skipCompiledContent(reader, 'GENERIC');
+ return;
+ }
+
+ // Generic cosmetic filter section
+ reader.select('COSMETIC_FILTERS:GENERIC');
+ while ( reader.next() ) {
+ this.acceptedCount += 1;
+ const fingerprint = reader.fingerprint();
+ if ( this.duplicateBuster.has(fingerprint) ) {
+ this.discardedCount += 1;
+ continue;
+ }
+ this.duplicateBuster.add(fingerprint);
+ const args = reader.args();
+ switch ( args[0] ) {
+ // low generic
+ case 0: {
+ if ( this.lowlyGeneric.has(args[1]) ) {
+ const selector = this.lowlyGeneric.get(args[1]);
+ this.lowlyGeneric.set(args[1], `${selector},\n${args[2]}`);
+ } else {
+ this.lowlyGeneric.set(args[1], args[2]);
+ }
+ break;
+ }
+ // High-high generic hide/simple selectors
+ // div[id^="allo"]
+ case 4:
+ this.highlyGeneric.simple.dict.add(args[1]);
+ break;
+ // High-high generic hide/complex selectors
+ // div[id^="allo"] > span
+ case 5:
+ this.highlyGeneric.complex.dict.add(args[1]);
+ break;
+ default:
+ this.discardedCount += 1;
+ break;
+ }
+ }
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.skipCompiledContent = function(reader, sectionId) {
+ reader.select(`COSMETIC_FILTERS:${sectionId}`);
+ while ( reader.next() ) {
+ this.acceptedCount += 1;
+ this.discardedCount += 1;
+ }
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.toSelfie = function() {
+ return {
+ version: this.selfieVersion,
+ acceptedCount: this.acceptedCount,
+ discardedCount: this.discardedCount,
+ specificFilters: this.specificFilters.toSelfie(),
+ lowlyGeneric: Array.from(this.lowlyGeneric),
+ highSimpleGenericHideArray: Array.from(this.highlyGeneric.simple.dict),
+ highComplexGenericHideArray: Array.from(this.highlyGeneric.complex.dict),
+ };
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.fromSelfie = function(selfie) {
+ if ( selfie.version !== this.selfieVersion ) {
+ throw new Error(
+ `cosmeticFilteringEngine: mismatched selfie version, ${selfie.version}, expected ${this.selfieVersion}`
+ );
+ }
+ this.acceptedCount = selfie.acceptedCount;
+ this.discardedCount = selfie.discardedCount;
+ this.specificFilters.fromSelfie(selfie.specificFilters);
+ this.lowlyGeneric = new Map(selfie.lowlyGeneric);
+ this.highlyGeneric.simple.dict = new Set(selfie.highSimpleGenericHideArray);
+ this.highlyGeneric.simple.str = selfie.highSimpleGenericHideArray.join(',\n');
+ this.highlyGeneric.complex.dict = new Set(selfie.highComplexGenericHideArray);
+ this.highlyGeneric.complex.str = selfie.highComplexGenericHideArray.join(',\n');
+ this.frozen = true;
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.addToSelectorCache = function(details) {
+ const hostname = details.hostname;
+ if ( typeof hostname !== 'string' || hostname === '' ) { return; }
+ const selectors = details.selectors;
+ if ( Array.isArray(selectors) === false ) { return; }
+ let entry = this.selectorCache.get(hostname);
+ if ( entry === undefined ) {
+ entry = SelectorCacheEntry.factory();
+ this.selectorCache.set(hostname, entry);
+ if ( this.selectorCache.size > this.selectorCacheCountMax ) {
+ this.selectorCacheTimer.on({ min: this.selectorCachePruneDelay });
+ }
+ }
+ entry.add(details);
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.removeFromSelectorCache = function(
+ targetHostname = '*',
+ type = undefined
+) {
+ const targetHostnameLength = targetHostname.length;
+ for ( let entry of this.selectorCache ) {
+ let hostname = entry[0];
+ let item = entry[1];
+ if ( targetHostname !== '*' ) {
+ if ( hostname.endsWith(targetHostname) === false ) { continue; }
+ if (
+ hostname.length !== targetHostnameLength &&
+ hostname.charAt(hostname.length - targetHostnameLength - 1) !== '.'
+ ) {
+ continue;
+ }
+ }
+ item.remove(type);
+ }
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.pruneSelectorCacheAsync = function() {
+ if ( this.selectorCache.size <= this.selectorCacheCountMax ) { return; }
+ const cache = this.selectorCache;
+ const hostnames = Array.from(cache.keys())
+ .sort((a, b) => cache.get(b).accessId - cache.get(a).accessId)
+ .slice(this.selectorCacheCountMin);
+ for ( const hn of hostnames ) {
+ cache.get(hn).dispose();
+ cache.delete(hn);
+ }
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.disableSurveyor = function(details) {
+ const hostname = details.hostname;
+ if ( typeof hostname !== 'string' || hostname === '' ) { return; }
+ const cacheEntry = this.selectorCache.get(hostname);
+ if ( cacheEntry === undefined ) { return; }
+ cacheEntry.disableSurveyor = true;
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.cssRuleFromProcedural = function(pfilter) {
+ if ( pfilter.cssable !== true ) { return; }
+ const { tasks, action } = pfilter;
+ let mq, selector;
+ if ( Array.isArray(tasks) ) {
+ if ( tasks[0][0] !== 'matches-media' ) { return; }
+ mq = tasks[0][1];
+ if ( tasks.length > 2 ) { return; }
+ if ( tasks.length === 2 ) {
+ if ( tasks[1][0] !== 'spath' ) { return; }
+ selector = tasks[1][1];
+ }
+ }
+ let style;
+ if ( Array.isArray(action) ) {
+ if ( action[0] !== 'style' ) { return; }
+ selector = selector || pfilter.selector;
+ style = action[1];
+ }
+ if ( mq === undefined && style === undefined && selector === undefined ) { return; }
+ if ( mq === undefined ) {
+ return `${selector}\n{${style}}`;
+ }
+ if ( style === undefined ) {
+ return `@media ${mq} {\n${selector}\n{display:none!important;}\n}`;
+ }
+ return `@media ${mq} {\n${selector}\n{${style}}\n}`;
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.retrieveGenericSelectors = function(request) {
+ if ( this.lowlyGeneric.size === 0 ) { return; }
+ if ( Array.isArray(request.hashes) === false ) { return; }
+ if ( request.hashes.length === 0 ) { return; }
+
+ const selectorsSet = new Set();
+ const hashes = [];
+ const safeOnly = request.safeOnly === true;
+ for ( const hash of request.hashes ) {
+ const bucket = this.lowlyGeneric.get(hash);
+ if ( bucket === undefined ) { continue; }
+ for ( const selector of bucket.split(',\n') ) {
+ if ( safeOnly && selector === keyFromSelector(selector) ) { continue; }
+ selectorsSet.add(selector);
+ }
+ hashes.push(hash);
+ }
+
+ // Apply exceptions: it is the responsibility of the caller to provide
+ // the exceptions to be applied.
+ const excepted = [];
+ if ( selectorsSet.size !== 0 && Array.isArray(request.exceptions) ) {
+ for ( const exception of request.exceptions ) {
+ if ( selectorsSet.delete(exception) ) {
+ excepted.push(exception);
+ }
+ }
+ }
+
+ if ( selectorsSet.size === 0 && excepted.length === 0 ) { return; }
+
+ const out = { injectedCSS: '', excepted, };
+ const selectors = Array.from(selectorsSet);
+
+ if ( typeof request.hostname === 'string' && request.hostname !== '' ) {
+ this.addToSelectorCache({
+ hostname: request.hostname,
+ selectors,
+ hashes,
+ type: 'cosmetic',
+ });
+ }
+
+ if ( selectors.length === 0 ) { return out; }
+
+ out.injectedCSS = `${selectors.join(',\n')}\n{display:none!important;}`;
+ vAPI.tabs.insertCSS(request.tabId, {
+ code: out.injectedCSS,
+ frameId: request.frameId,
+ matchAboutBlank: true,
+ runAt: 'document_start',
+ });
+
+ return out;
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.retrieveSpecificSelectors = function(
+ request,
+ options
+) {
+ const hostname = request.hostname;
+ const cacheEntry = this.selectorCache.get(hostname);
+
+ // https://github.com/chrisaljoudi/uBlock/issues/587
+ // out.ready will tell the content script the cosmetic filtering engine is
+ // up and ready.
+
+ // https://github.com/chrisaljoudi/uBlock/issues/497
+ // Generic exception filters are to be applied on all pages.
+
+ const out = {
+ ready: this.frozen,
+ hostname: hostname,
+ domain: request.domain,
+ exceptionFilters: [],
+ exceptedFilters: [],
+ proceduralFilters: [],
+ convertedProceduralFilters: [],
+ disableSurveyor: this.lowlyGeneric.size === 0,
+ };
+ const injectedCSS = [];
+
+ if (
+ options.noSpecificCosmeticFiltering !== true ||
+ options.noGenericCosmeticFiltering !== true
+ ) {
+ const specificSet = this.$specificSet;
+ const proceduralSet = this.$proceduralSet;
+ const exceptionSet = this.$exceptionSet;
+ const dummySet = this.$dummySet;
+
+ // Cached cosmetic filters: these are always declarative.
+ if ( cacheEntry !== undefined ) {
+ cacheEntry.retrieveCosmetic(specificSet, out.genericCosmeticHashes = []);
+ if ( cacheEntry.disableSurveyor ) {
+ out.disableSurveyor = true;
+ }
+ }
+
+ // Retrieve filters with a non-empty hostname
+ const retrieveSets = [ specificSet, exceptionSet, proceduralSet, exceptionSet ];
+ const discardSets = [ dummySet, exceptionSet ];
+ this.specificFilters.retrieve(
+ hostname,
+ options.noSpecificCosmeticFiltering ? discardSets : retrieveSets,
+ 1
+ );
+ // Retrieve filters with a regex-based hostname value
+ this.specificFilters.retrieve(
+ hostname,
+ options.noSpecificCosmeticFiltering ? discardSets : retrieveSets,
+ 3
+ );
+ // Retrieve filters with a entity-based hostname value
+ if ( request.entity !== '' ) {
+ this.specificFilters.retrieve(
+ `${hostname.slice(0, -request.domain.length)}${request.entity}`,
+ options.noSpecificCosmeticFiltering ? discardSets : retrieveSets,
+ 1
+ );
+ }
+ // Retrieve filters with an empty hostname
+ this.specificFilters.retrieve(
+ hostname,
+ options.noGenericCosmeticFiltering ? discardSets : retrieveSets,
+ 2
+ );
+
+ // Apply exceptions to specific filterset
+ if ( exceptionSet.size !== 0 ) {
+ out.exceptionFilters = Array.from(exceptionSet);
+ for ( const selector of specificSet ) {
+ if ( exceptionSet.has(selector) === false ) { continue; }
+ specificSet.delete(selector);
+ out.exceptedFilters.push(selector);
+ }
+ }
+
+ if ( specificSet.size !== 0 ) {
+ injectedCSS.push(
+ `${Array.from(specificSet).join(',\n')}\n{display:none!important;}`
+ );
+ }
+
+ // Apply exceptions to procedural filterset.
+ // Also, some procedural filters are really declarative cosmetic
+ // filters, so we extract and inject them immediately.
+ if ( proceduralSet.size !== 0 ) {
+ for ( const json of proceduralSet ) {
+ const pfilter = JSON.parse(json);
+ if ( exceptionSet.has(json) ) {
+ proceduralSet.delete(json);
+ out.exceptedFilters.push(json);
+ continue;
+ }
+ if ( exceptionSet.has(pfilter.raw) ) {
+ proceduralSet.delete(json);
+ out.exceptedFilters.push(pfilter.raw);
+ continue;
+ }
+ const cssRule = this.cssRuleFromProcedural(pfilter);
+ if ( cssRule === undefined ) { continue; }
+ injectedCSS.push(cssRule);
+ proceduralSet.delete(json);
+ out.convertedProceduralFilters.push(json);
+ }
+ out.proceduralFilters.push(...proceduralSet);
+ }
+
+ // Highly generic cosmetic filters: sent once along with specific ones.
+ // A most-recent-used cache is used to skip computing the resulting set
+ // of high generics for a given set of exceptions.
+ // The resulting set of high generics is stored as a string, ready to
+ // be used as-is by the content script. The string is stored
+ // indirectly in the mru cache: this is to prevent duplication of the
+ // string in memory, which I have observed occurs when the string is
+ // stored directly as a value in a Map.
+ if ( options.noGenericCosmeticFiltering !== true ) {
+ const exceptionSetHash = out.exceptionFilters.join();
+ for ( const key in this.highlyGeneric ) {
+ const entry = this.highlyGeneric[key];
+ let str = entry.mru.lookup(exceptionSetHash);
+ if ( str === undefined ) {
+ str = { s: entry.str, excepted: [] };
+ let genericSet = entry.dict;
+ let hit = false;
+ for ( const exception of exceptionSet ) {
+ if ( (hit = genericSet.has(exception)) ) { break; }
+ }
+ if ( hit ) {
+ genericSet = new Set(entry.dict);
+ for ( const exception of exceptionSet ) {
+ if ( genericSet.delete(exception) ) {
+ str.excepted.push(exception);
+ }
+ }
+ str.s = Array.from(genericSet).join(',\n');
+ }
+ entry.mru.add(exceptionSetHash, str);
+ }
+ if ( str.excepted.length !== 0 ) {
+ out.exceptedFilters.push(...str.excepted);
+ }
+ if ( str.s.length !== 0 ) {
+ injectedCSS.push(`${str.s}\n{display:none!important;}`);
+ }
+ }
+ }
+
+ // Important: always clear used registers before leaving.
+ specificSet.clear();
+ proceduralSet.clear();
+ exceptionSet.clear();
+ dummySet.clear();
+ }
+
+ const details = {
+ code: '',
+ frameId: request.frameId,
+ matchAboutBlank: true,
+ runAt: 'document_start',
+ };
+
+ // Inject all declarative-based filters as a single stylesheet.
+ if ( injectedCSS.length !== 0 ) {
+ out.injectedCSS = injectedCSS.join('\n\n');
+ details.code = out.injectedCSS;
+ if ( request.tabId !== undefined ) {
+ vAPI.tabs.insertCSS(request.tabId, details);
+ }
+ }
+
+ // CSS selectors for collapsible blocked elements
+ if ( cacheEntry ) {
+ const networkFilters = [];
+ if ( cacheEntry.retrieveNet(networkFilters) ) {
+ details.code = `${networkFilters.join('\n')}\n{display:none!important;}`;
+ if ( request.tabId !== undefined ) {
+ vAPI.tabs.insertCSS(request.tabId, details);
+ }
+ }
+ }
+
+ return out;
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.getFilterCount = function() {
+ return this.acceptedCount - this.discardedCount;
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.dump = function() {
+ const lowlyGenerics = [];
+ for ( const selectors of this.lowlyGeneric.values() ) {
+ lowlyGenerics.push(...selectors.split(',\n'));
+ }
+ lowlyGenerics.sort();
+ const highlyGenerics = Array.from(this.highlyGeneric.simple.dict).sort();
+ highlyGenerics.push(...Array.from(this.highlyGeneric.complex.dict).sort());
+ return [
+ 'Cosmetic Filtering Engine internals:',
+ `specific: ${this.specificFilters.size}`,
+ `generic: ${lowlyGenerics.length + highlyGenerics.length}`,
+ `+ lowly generic: ${lowlyGenerics.length}`,
+ ...lowlyGenerics.map(a => ` ${a}`),
+ `+ highly generic: ${highlyGenerics.length}`,
+ ...highlyGenerics.map(a => ` ${a}`),
+ ].join('\n');
+};
+
+/******************************************************************************/
+
+const cosmeticFilteringEngine = new FilterContainer();
+
+export default cosmeticFilteringEngine;
+
+/******************************************************************************/
diff --git a/src/js/dashboard-common.js b/src/js/dashboard-common.js
new file mode 100644
index 0000000..feceb1f
--- /dev/null
+++ b/src/js/dashboard-common.js
@@ -0,0 +1,215 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+import { dom } from './dom.js';
+
+/******************************************************************************/
+
+self.uBlockDashboard = self.uBlockDashboard || {};
+
+/******************************************************************************/
+
+// Helper for client panes:
+// Remove literal duplicate lines from a set based on another set.
+
+self.uBlockDashboard.mergeNewLines = function(text, newText) {
+ // Step 1: build dictionary for existing lines.
+ const fromDict = new Map();
+ let lineBeg = 0;
+ let textEnd = text.length;
+ while ( lineBeg < textEnd ) {
+ let lineEnd = text.indexOf('\n', lineBeg);
+ if ( lineEnd === -1 ) {
+ lineEnd = text.indexOf('\r', lineBeg);
+ if ( lineEnd === -1 ) {
+ lineEnd = textEnd;
+ }
+ }
+ const line = text.slice(lineBeg, lineEnd).trim();
+ lineBeg = lineEnd + 1;
+ if ( line.length === 0 ) { continue; }
+ const hash = line.slice(0, 8);
+ const bucket = fromDict.get(hash);
+ if ( bucket === undefined ) {
+ fromDict.set(hash, line);
+ } else if ( typeof bucket === 'string' ) {
+ fromDict.set(hash, [ bucket, line ]);
+ } else /* if ( Array.isArray(bucket) ) */ {
+ bucket.push(line);
+ }
+ }
+
+ // Step 2: use above dictionary to filter out duplicate lines.
+ const out = [ '' ];
+ lineBeg = 0;
+ textEnd = newText.length;
+ while ( lineBeg < textEnd ) {
+ let lineEnd = newText.indexOf('\n', lineBeg);
+ if ( lineEnd === -1 ) {
+ lineEnd = newText.indexOf('\r', lineBeg);
+ if ( lineEnd === -1 ) {
+ lineEnd = textEnd;
+ }
+ }
+ const line = newText.slice(lineBeg, lineEnd).trim();
+ lineBeg = lineEnd + 1;
+ if ( line.length === 0 ) {
+ if ( out[out.length - 1] !== '' ) {
+ out.push('');
+ }
+ continue;
+ }
+ const bucket = fromDict.get(line.slice(0, 8));
+ if ( bucket === undefined ) {
+ out.push(line);
+ continue;
+ }
+ if ( typeof bucket === 'string' && line !== bucket ) {
+ out.push(line);
+ continue;
+ }
+ if ( bucket.indexOf(line) === -1 ) {
+ out.push(line);
+ /* continue; */
+ }
+ }
+
+ const append = out.join('\n').trim();
+ if ( text !== '' && append !== '' ) {
+ text += '\n\n';
+ }
+ return text + append;
+};
+
+/******************************************************************************/
+
+self.uBlockDashboard.dateNowToSensibleString = function() {
+ const now = new Date(Date.now() - (new Date()).getTimezoneOffset() * 60000);
+ return now.toISOString().replace(/\.\d+Z$/, '')
+ .replace(/:/g, '.')
+ .replace('T', '_');
+};
+
+/******************************************************************************/
+
+self.uBlockDashboard.patchCodeMirrorEditor = (function() {
+ let grabFocusTarget;
+
+ const grabFocus = function() {
+ grabFocusTarget.focus();
+ grabFocusTarget = undefined;
+ };
+
+ const grabFocusTimer = vAPI.defer.create(grabFocus);
+
+ const grabFocusAsync = function(cm) {
+ grabFocusTarget = cm;
+ grabFocusTimer.on(1);
+ };
+
+ // https://github.com/gorhill/uBlock/issues/3646
+ const patchSelectAll = function(cm, details) {
+ var vp = cm.getViewport();
+ if ( details.ranges.length !== 1 ) { return; }
+ var range = details.ranges[0],
+ lineFrom = range.anchor.line,
+ lineTo = range.head.line;
+ if ( lineTo === lineFrom ) { return; }
+ if ( range.head.ch !== 0 ) { lineTo += 1; }
+ if ( lineFrom !== vp.from || lineTo !== vp.to ) { return; }
+ details.update([
+ {
+ anchor: { line: 0, ch: 0 },
+ head: { line: cm.lineCount(), ch: 0 }
+ }
+ ]);
+ grabFocusAsync(cm);
+ };
+
+ let lastGutterClick = 0;
+ let lastGutterLine = 0;
+
+ const onGutterClicked = function(cm, line, gutter) {
+ if ( gutter !== 'CodeMirror-linenumbers' ) { return; }
+ grabFocusAsync(cm);
+ const delta = Date.now() - lastGutterClick;
+ // Single click
+ if ( delta >= 500 || line !== lastGutterLine ) {
+ cm.setSelection(
+ { line, ch: 0 },
+ { line: line + 1, ch: 0 }
+ );
+ lastGutterClick = Date.now();
+ lastGutterLine = line;
+ return;
+ }
+ // Double click: select fold-able block or all
+ let lineFrom = 0;
+ let lineTo = cm.lineCount();
+ const foldFn = cm.getHelper({ line, ch: 0 }, 'fold');
+ if ( foldFn instanceof Function ) {
+ const range = foldFn(cm, { line, ch: 0 });
+ if ( range !== undefined ) {
+ lineFrom = range.from.line;
+ lineTo = range.to.line + 1;
+ }
+ }
+ cm.setSelection(
+ { line: lineFrom, ch: 0 },
+ { line: lineTo, ch: 0 },
+ { scroll: false }
+ );
+ lastGutterClick = 0;
+ };
+
+ return function(cm) {
+ if ( cm.options.inputStyle === 'contenteditable' ) {
+ cm.on('beforeSelectionChange', patchSelectAll);
+ }
+ cm.on('gutterClick', onGutterClicked);
+ };
+})();
+
+/******************************************************************************/
+
+self.uBlockDashboard.openOrSelectPage = function(url, options = {}) {
+ let ev;
+ if ( url instanceof MouseEvent ) {
+ ev = url;
+ url = dom.attr(ev.target, 'href');
+ }
+ const details = Object.assign({ url, select: true, index: -1 }, options);
+ vAPI.messaging.send('default', {
+ what: 'gotoURL',
+ details,
+ });
+ if ( ev ) {
+ ev.preventDefault();
+ }
+};
+
+/******************************************************************************/
+
+// Open links in the proper window
+dom.attr('a', 'target', '_blank');
+dom.attr('a[href*="dashboard.html"]', 'target', '_parent');
diff --git a/src/js/dashboard.js b/src/js/dashboard.js
new file mode 100644
index 0000000..e82ec28
--- /dev/null
+++ b/src/js/dashboard.js
@@ -0,0 +1,166 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+import { dom, qs$ } from './dom.js';
+
+/******************************************************************************/
+
+const discardUnsavedData = function(synchronous = false) {
+ const paneFrame = qs$('#iframe');
+ const paneWindow = paneFrame.contentWindow;
+ if (
+ typeof paneWindow.hasUnsavedData !== 'function' ||
+ paneWindow.hasUnsavedData() === false
+ ) {
+ return true;
+ }
+
+ if ( synchronous ) {
+ return false;
+ }
+
+ return new Promise(resolve => {
+ const modal = qs$('#unsavedWarning');
+ dom.cl.add(modal, 'on');
+ modal.focus();
+
+ const onDone = status => {
+ dom.cl.remove(modal, 'on');
+ dom.off(document, 'click', onClick, true);
+ resolve(status);
+ };
+
+ const onClick = ev => {
+ const target = ev.target;
+ if ( target.matches('[data-i18n="dashboardUnsavedWarningStay"]') ) {
+ return onDone(false);
+ }
+ if ( target.matches('[data-i18n="dashboardUnsavedWarningIgnore"]') ) {
+ return onDone(true);
+ }
+ if ( qs$(modal, '[data-i18n="dashboardUnsavedWarning"]').contains(target) ) {
+ return;
+ }
+ onDone(false);
+ };
+
+ dom.on(document, 'click', onClick, true);
+ });
+};
+
+const loadDashboardPanel = function(pane, first) {
+ const tabButton = qs$(`[data-pane="${pane}"]`);
+ if ( tabButton === null || dom.cl.has(tabButton, 'selected') ) { return; }
+ const loadPane = ( ) => {
+ self.location.replace(`#${pane}`);
+ dom.cl.remove('.tabButton.selected', 'selected');
+ dom.cl.add(tabButton, 'selected');
+ tabButton.scrollIntoView();
+ qs$('#iframe').contentWindow.location.replace(pane);
+ if ( pane !== 'no-dashboard.html' ) {
+ vAPI.localStorage.setItem('dashboardLastVisitedPane', pane);
+ }
+ };
+ if ( first ) {
+ return loadPane();
+ }
+ const r = discardUnsavedData();
+ if ( r === false ) { return; }
+ if ( r === true ) { return loadPane(); }
+ r.then(status => {
+ if ( status === false ) { return; }
+ loadPane();
+ });
+};
+
+const onTabClickHandler = function(ev) {
+ loadDashboardPanel(dom.attr(ev.target, 'data-pane'));
+};
+
+if ( self.location.hash.slice(1) === 'no-dashboard.html' ) {
+ dom.cl.add(dom.body, 'noDashboard');
+}
+
+(async ( ) => {
+ // Wait for uBO's main process to be ready
+ await new Promise(resolve => {
+ const check = async ( ) => {
+ try {
+ const response = await vAPI.messaging.send('dashboard', {
+ what: 'readyToFilter'
+ });
+ if ( response ) { return resolve(true); }
+ const iframe = qs$('#iframe');
+ if ( iframe.src !== '' ) {
+ iframe.src = '';
+ }
+ } catch(ex) {
+ }
+ vAPI.defer.once(250).then(( ) => check());
+ };
+ check();
+ });
+
+ dom.cl.remove(dom.body, 'notReady');
+
+ const results = await Promise.all([
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/106
+ vAPI.messaging.send('dashboard', { what: 'dashboardConfig' }),
+ vAPI.localStorage.getItemAsync('dashboardLastVisitedPane'),
+ ]);
+
+ {
+ const details = results[0] || {};
+ if ( details.noDashboard ) {
+ self.location.hash = '#no-dashboard.html';
+ dom.cl.add(dom.body, 'noDashboard');
+ } else if ( self.location.hash === '#no-dashboard.html' ) {
+ self.location.hash = '';
+ }
+ }
+
+ {
+ let pane = results[1] || null;
+ if ( self.location.hash !== '' ) {
+ pane = self.location.hash.slice(1) || null;
+ }
+ loadDashboardPanel(pane !== null ? pane : 'settings.html', true);
+
+ dom.on('.tabButton', 'click', onTabClickHandler);
+
+ // https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
+ dom.on(self, 'beforeunload', ( ) => {
+ if ( discardUnsavedData(true) ) { return; }
+ event.preventDefault();
+ event.returnValue = '';
+ });
+
+ // https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
+ dom.on(self, 'hashchange', ( ) => {
+ const pane = self.location.hash.slice(1);
+ if ( pane === '' ) { return; }
+ loadDashboardPanel(pane);
+ });
+
+ }
+})();
diff --git a/src/js/devtools.js b/src/js/devtools.js
new file mode 100644
index 0000000..93b2697
--- /dev/null
+++ b/src/js/devtools.js
@@ -0,0 +1,192 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* global CodeMirror, uBlockDashboard */
+
+'use strict';
+
+import { dom, qs$ } from './dom.js';
+
+/******************************************************************************/
+
+const reFoldable = /^ *(?=\+ \S)/;
+
+/******************************************************************************/
+
+CodeMirror.registerGlobalHelper(
+ 'fold',
+ 'ubo-dump',
+ ( ) => true,
+ (cm, start) => {
+ const startLineNo = start.line;
+ const startLine = cm.getLine(startLineNo);
+ let endLineNo = startLineNo;
+ let endLine = startLine;
+ const match = reFoldable.exec(startLine);
+ if ( match === null ) { return; }
+ const foldCandidate = ' ' + match[0];
+ const lastLineNo = cm.lastLine();
+ let nextLineNo = startLineNo + 1;
+ while ( nextLineNo < lastLineNo ) {
+ const nextLine = cm.getLine(nextLineNo);
+ // TODO: use regex to find folding end
+ if ( nextLine.startsWith(foldCandidate) === false && nextLine !== ']' ) {
+ if ( startLineNo >= endLineNo ) { return; }
+ return {
+ from: CodeMirror.Pos(startLineNo, startLine.length),
+ to: CodeMirror.Pos(endLineNo, endLine.length)
+ };
+ }
+ endLine = nextLine;
+ endLineNo = nextLineNo;
+ nextLineNo += 1;
+ }
+ }
+);
+
+const cmEditor = new CodeMirror(qs$('#console'), {
+ autofocus: true,
+ foldGutter: true,
+ gutters: [ 'CodeMirror-linenumbers', 'CodeMirror-foldgutter' ],
+ lineNumbers: true,
+ lineWrapping: true,
+ mode: 'ubo-dump',
+ styleActiveLine: true,
+ undoDepth: 5,
+});
+
+uBlockDashboard.patchCodeMirrorEditor(cmEditor);
+
+/******************************************************************************/
+
+function log(text) {
+ cmEditor.replaceRange(text.trim() + '\n\n', { line: 0, ch: 0 });
+}
+
+/******************************************************************************/
+
+dom.on('#console-clear', 'click', ( ) => {
+ cmEditor.setValue('');
+});
+
+dom.on('#console-fold', 'click', ( ) => {
+ const unfolded = [];
+ let maxUnfolded = -1;
+ cmEditor.eachLine(handle => {
+ const match = reFoldable.exec(handle.text);
+ if ( match === null ) { return; }
+ const depth = match[0].length;
+ const line = handle.lineNo();
+ const isFolded = cmEditor.isFolded({ line, ch: handle.text.length });
+ if ( isFolded === true ) { return; }
+ unfolded.push({ line, depth });
+ maxUnfolded = Math.max(maxUnfolded, depth);
+ });
+ if ( maxUnfolded === -1 ) { return; }
+ cmEditor.startOperation();
+ for ( const details of unfolded ) {
+ if ( details.depth !== maxUnfolded ) { continue; }
+ cmEditor.foldCode(details.line, null, 'fold');
+ }
+ cmEditor.endOperation();
+});
+
+dom.on('#console-unfold', 'click', ( ) => {
+ const folded = [];
+ let minFolded = Number.MAX_SAFE_INTEGER;
+ cmEditor.eachLine(handle => {
+ const match = reFoldable.exec(handle.text);
+ if ( match === null ) { return; }
+ const depth = match[0].length;
+ const line = handle.lineNo();
+ const isFolded = cmEditor.isFolded({ line, ch: handle.text.length });
+ if ( isFolded !== true ) { return; }
+ folded.push({ line, depth });
+ minFolded = Math.min(minFolded, depth);
+ });
+ if ( minFolded === Number.MAX_SAFE_INTEGER ) { return; }
+ cmEditor.startOperation();
+ for ( const details of folded ) {
+ if ( details.depth !== minFolded ) { continue; }
+ cmEditor.foldCode(details.line, null, 'unfold');
+ }
+ cmEditor.endOperation();
+});
+
+dom.on('#snfe-dump', 'click', ev => {
+ const button = ev.target;
+ dom.attr(button, 'disabled', '');
+ vAPI.messaging.send('devTools', {
+ what: 'snfeDump',
+ }).then(result => {
+ log(result);
+ dom.attr(button, 'disabled', null);
+ });
+});
+
+dom.on('#snfe-todnr', 'click', ev => {
+ const button = ev.target;
+ dom.attr(button, 'disabled', '');
+ vAPI.messaging.send('devTools', {
+ what: 'snfeToDNR',
+ }).then(result => {
+ log(result);
+ dom.attr(button, 'disabled', null);
+ });
+});
+
+dom.on('#cfe-dump', 'click', ev => {
+ const button = ev.target;
+ dom.attr(button, 'disabled', '');
+ vAPI.messaging.send('devTools', {
+ what: 'cfeDump',
+ }).then(result => {
+ log(result);
+ dom.attr(button, 'disabled', null);
+ });
+});
+
+dom.on('#purge-all-caches', 'click', ( ) => {
+ vAPI.messaging.send('devTools', {
+ what: 'purgeAllCaches'
+ }).then(result => {
+ log(result);
+ });
+});
+
+vAPI.messaging.send('dashboard', {
+ what: 'getAppData',
+}).then(appData => {
+ if ( appData.canBenchmark !== true ) { return; }
+ dom.attr('#snfe-benchmark', 'disabled', null);
+ dom.on('#snfe-benchmark', 'click', ev => {
+ const button = ev.target;
+ dom.attr(button, 'disabled', '');
+ vAPI.messaging.send('devTools', {
+ what: 'snfeBenchmark',
+ }).then(result => {
+ log(result);
+ dom.attr(button, 'disabled', null);
+ });
+ });
+});
+
+/******************************************************************************/
diff --git a/src/js/diff-updater.js b/src/js/diff-updater.js
new file mode 100644
index 0000000..4e6ece1
--- /dev/null
+++ b/src/js/diff-updater.js
@@ -0,0 +1,288 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+// This module can be dynamically loaded or spun off as a worker.
+
+/******************************************************************************/
+
+const patches = new Map();
+const encoder = new TextEncoder();
+const reFileName = /([^\/]+?)(?:#.+)?$/;
+const EMPTYLINE = '';
+
+/******************************************************************************/
+
+const suffleArray = arr => {
+ const out = arr.slice();
+ for ( let i = 0, n = out.length; i < n; i++ ) {
+ const j = Math.floor(Math.random() * n);
+ if ( j === i ) { continue; }
+ [ out[j], out[i] ] = [ out[i], out[j] ];
+ }
+ return out;
+};
+
+const basename = url => {
+ const match = reFileName.exec(url);
+ return match && match[1] || '';
+};
+
+const resolveURL = (path, url) => {
+ try {
+ return new URL(path, url);
+ }
+ catch(_) {
+ }
+};
+
+const expectedTimeFromPatch = assetDetails => {
+ const match = /(\d+)\.(\d+)\.(\d+)\.(\d+)/.exec(assetDetails.patchPath);
+ if ( match === null ) { return 0; }
+ const date = new Date();
+ date.setUTCFullYear(
+ parseInt(match[1], 10),
+ parseInt(match[2], 10) - 1,
+ parseInt(match[3], 10)
+ );
+ date.setUTCHours(0, parseInt(match[4], 10), 0, 0);
+ return date.getTime() + assetDetails.diffExpires;
+};
+
+function parsePatch(patch) {
+ const patchDetails = new Map();
+ const diffLines = patch.split('\n');
+ let i = 0, n = diffLines.length;
+ while ( i < n ) {
+ const line = diffLines[i++];
+ if ( line.startsWith('diff ') === false ) { continue; }
+ const fields = line.split(/\s+/);
+ const diffBlock = {};
+ for ( let j = 0; j < fields.length; j++ ) {
+ const field = fields[j];
+ const pos = field.indexOf(':');
+ if ( pos === -1 ) { continue; }
+ const name = field.slice(0, pos);
+ if ( name === '' ) { continue; }
+ const value = field.slice(pos+1);
+ switch ( name ) {
+ case 'name':
+ case 'checksum':
+ diffBlock[name] = value;
+ break;
+ case 'lines':
+ diffBlock.lines = parseInt(value, 10);
+ break;
+ default:
+ break;
+ }
+ }
+ if ( diffBlock.name === undefined ) { return; }
+ if ( isNaN(diffBlock.lines) || diffBlock.lines <= 0 ) { return; }
+ if ( diffBlock.checksum === undefined ) { return; }
+ patchDetails.set(diffBlock.name, diffBlock);
+ diffBlock.diff = diffLines.slice(i, i + diffBlock.lines).join('\n');
+ i += diffBlock.lines;
+ }
+ if ( patchDetails.size === 0 ) { return; }
+ return patchDetails;
+}
+
+function applyPatch(text, diff) {
+ // Inspired from (Perl) "sub _patch" at:
+ // https://twiki.org/p/pub/Codev/RcsLite/RcsLite.pm
+ // Apparently authored by John Talintyre in Jan. 2002
+ // https://twiki.org/cgi-bin/view/Codev/RcsLite
+ const lines = text.split('\n');
+ const diffLines = diff.split('\n');
+ let iAdjust = 0;
+ let iDiff = 0, nDiff = diffLines.length;
+ while ( iDiff < nDiff ) {
+ const diffLine = diffLines[iDiff++];
+ if ( diffLine === '' ) { break; }
+ const diffParsed = /^([ad])(\d+) (\d+)$/.exec(diffLine);
+ if ( diffParsed === null ) { return; }
+ const op = diffParsed[1];
+ const iOp = parseInt(diffParsed[2], 10);
+ const nOp = parseInt(diffParsed[3], 10);
+ const iOpAdj = iOp + iAdjust;
+ if ( iOpAdj > lines.length ) { return; }
+ // Delete lines
+ if ( op === 'd' ) {
+ lines.splice(iOpAdj-1, nOp);
+ iAdjust -= nOp;
+ continue;
+ }
+ // Add lines: Don't use splice() to avoid stack limit issues
+ for ( let i = 0; i < nOp; i++ ) {
+ lines.push(EMPTYLINE);
+ }
+ lines.copyWithin(iOpAdj+nOp, iOpAdj);
+ for ( let i = 0; i < nOp; i++ ) {
+ lines[iOpAdj+i] = diffLines[iDiff+i];
+ }
+ iAdjust += nOp;
+ iDiff += nOp;
+ }
+ return lines.join('\n');
+}
+
+function hasPatchDetails(assetDetails) {
+ const { patchPath } = assetDetails;
+ const patchFile = basename(patchPath);
+ return patchFile !== '' && patches.has(patchFile);
+}
+
+/******************************************************************************/
+
+// Async
+
+async function applyPatchAndValidate(assetDetails, diffDetails) {
+ const { text } = assetDetails;
+ const { diff, checksum } = diffDetails;
+ const textAfter = applyPatch(text, diff);
+ if ( typeof textAfter !== 'string' ) {
+ assetDetails.error = 'baddiff';
+ return false;
+ }
+ const crypto = globalThis.crypto;
+ if ( typeof crypto !== 'object' ) {
+ assetDetails.error = 'nocrypto';
+ return false;
+ }
+ const arrayin = encoder.encode(textAfter);
+ const arraybuffer = await crypto.subtle.digest('SHA-1', arrayin);
+ const arrayout = new Uint8Array(arraybuffer);
+ const sha1Full = Array.from(arrayout).map(i =>
+ i.toString(16).padStart(2, '0')
+ ).join('');
+ if ( sha1Full.startsWith(checksum) === false ) {
+ assetDetails.error = `badchecksum: expected ${checksum}, computed ${sha1Full.slice(0, checksum.length)}`;
+ return false;
+ }
+ assetDetails.text = textAfter;
+ return true;
+}
+
+async function fetchPatchDetailsFromCDNs(assetDetails) {
+ const { patchPath, cdnURLs } = assetDetails;
+ if ( Array.isArray(cdnURLs) === false ) { return null; }
+ if ( cdnURLs.length === 0 ) { return null; }
+ for ( const cdnURL of suffleArray(cdnURLs) ) {
+ const patchURL = resolveURL(patchPath, cdnURL);
+ if ( patchURL === undefined ) { continue; }
+ const response = await fetch(patchURL).catch(reason => {
+ console.error(reason, patchURL);
+ });
+ if ( response === undefined ) { continue; }
+ if ( response.status === 404 ) { break; }
+ if ( response.ok !== true ) { continue; }
+ const patchText = await response.text();
+ const patchDetails = parsePatch(patchText);
+ if ( patchURL.hash.length > 1 ) {
+ assetDetails.diffName = patchURL.hash.slice(1);
+ patchURL.hash = '';
+ }
+ return {
+ patchURL: patchURL.href,
+ patchSize: `${(patchText.length / 1000).toFixed(1)} KB`,
+ patchDetails,
+ };
+ }
+ return null;
+}
+
+async function fetchPatchDetails(assetDetails) {
+ const { patchPath } = assetDetails;
+ const patchFile = basename(patchPath);
+ if ( patchFile === '' ) { return null; }
+ if ( patches.has(patchFile) ) {
+ return patches.get(patchFile);
+ }
+ const patchDetailsPromise = fetchPatchDetailsFromCDNs(assetDetails);
+ patches.set(patchFile, patchDetailsPromise);
+ return patchDetailsPromise;
+}
+
+async function fetchAndApplyAllPatches(assetDetails) {
+ if ( assetDetails.fetch === false ) {
+ if ( hasPatchDetails(assetDetails) === false ) {
+ assetDetails.status = 'nodiff';
+ return assetDetails;
+ }
+ }
+ // uBO-specific, to avoid pointless fetches which are likely to fail
+ // because the patch has not yet been created
+ const patchTime = expectedTimeFromPatch(assetDetails);
+ if ( patchTime > Date.now() ) {
+ assetDetails.status = 'nopatch-yet';
+ return assetDetails;
+ }
+ const patchData = await fetchPatchDetails(assetDetails);
+ if ( patchData === null ) {
+ assetDetails.status = (Date.now() - patchTime) < (4 * assetDetails.diffExpires)
+ ? 'nopatch-yet'
+ : 'nopatch';
+ return assetDetails;
+ }
+ const { patchDetails } = patchData;
+ if ( patchDetails instanceof Map === false ) {
+ assetDetails.status = 'nodiff';
+ return assetDetails;
+ }
+ const diffDetails = patchDetails.get(assetDetails.diffName);
+ if ( diffDetails === undefined ) {
+ assetDetails.status = 'nodiff';
+ return assetDetails;
+ }
+ if ( assetDetails.text === undefined ) {
+ assetDetails.status = 'needtext';
+ return assetDetails;
+ }
+ const outcome = await applyPatchAndValidate(assetDetails, diffDetails);
+ if ( outcome !== true ) { return assetDetails; }
+ assetDetails.status = 'updated';
+ assetDetails.patchURL = patchData.patchURL;
+ assetDetails.patchSize = patchData.patchSize;
+ return assetDetails;
+}
+
+/******************************************************************************/
+
+const bc = new globalThis.BroadcastChannel('diffUpdater');
+
+bc.onmessage = ev => {
+ const message = ev.data || {};
+ switch ( message.what ) {
+ case 'update':
+ fetchAndApplyAllPatches(message).then(response => {
+ bc.postMessage(response);
+ }).catch(error => {
+ bc.postMessage({ what: 'broken', error });
+ });
+ break;
+ }
+};
+
+bc.postMessage({ what: 'ready' });
+
+/******************************************************************************/
diff --git a/src/js/document-blocked.js b/src/js/document-blocked.js
new file mode 100644
index 0000000..59a6bc8
--- /dev/null
+++ b/src/js/document-blocked.js
@@ -0,0 +1,230 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+import { i18n, i18n$ } from './i18n.js';
+import { dom, qs$ } from './dom.js';
+
+/******************************************************************************/
+
+const messaging = vAPI.messaging;
+let details = {};
+
+{
+ const matches = /details=([^&]+)/.exec(window.location.search);
+ if ( matches !== null ) {
+ details = JSON.parse(decodeURIComponent(matches[1]));
+ }
+}
+
+/******************************************************************************/
+
+(async ( ) => {
+ const response = await messaging.send('documentBlocked', {
+ what: 'listsFromNetFilter',
+ rawFilter: details.fs,
+ });
+ if ( response instanceof Object === false ) { return; }
+
+ let lists;
+ for ( const rawFilter in response ) {
+ if ( response.hasOwnProperty(rawFilter) ) {
+ lists = response[rawFilter];
+ break;
+ }
+ }
+
+ if ( Array.isArray(lists) === false || lists.length === 0 ) {
+ qs$('#whyex').style.setProperty('visibility', 'collapse');
+ return;
+ }
+
+ const parent = qs$('#whyex > ul');
+ parent.firstElementChild.remove(); // remove placeholder element
+ for ( const list of lists ) {
+ const listElem = dom.clone('#templates .filterList');
+ const sourceElem = qs$(listElem, '.filterListSource');
+ sourceElem.href += encodeURIComponent(list.assetKey);
+ sourceElem.append(i18n.patchUnicodeFlags(list.title));
+ if ( typeof list.supportURL === 'string' && list.supportURL !== '' ) {
+ const supportElem = qs$(listElem, '.filterListSupport');
+ dom.attr(supportElem, 'href', list.supportURL);
+ dom.cl.remove(supportElem, 'hidden');
+ }
+ parent.appendChild(listElem);
+ }
+ qs$('#whyex').style.removeProperty('visibility');
+})();
+
+/******************************************************************************/
+
+dom.text('#theURL > p > span:first-of-type', details.url);
+dom.text('#why', details.fs);
+
+/******************************************************************************/
+
+// https://github.com/gorhill/uBlock/issues/691
+// Parse URL to extract as much useful information as possible. This is
+// useful to assist the user in deciding whether to navigate to the web page.
+(( ) => {
+ if ( typeof URL !== 'function' ) { return; }
+
+ const reURL = /^https?:\/\//;
+
+ const liFromParam = function(name, value) {
+ if ( value === '' ) {
+ value = name;
+ name = '';
+ }
+ const li = dom.create('li');
+ let span = dom.create('span');
+ dom.text(span, name);
+ li.appendChild(span);
+ if ( name !== '' && value !== '' ) {
+ li.appendChild(document.createTextNode(' = '));
+ }
+ span = dom.create('span');
+ if ( reURL.test(value) ) {
+ const a = dom.create('a');
+ dom.attr(a, 'href', value);
+ dom.text(a, value);
+ span.appendChild(a);
+ } else {
+ dom.text(span, value);
+ }
+ li.appendChild(span);
+ return li;
+ };
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1649
+ // Limit recursion.
+ const renderParams = function(parentNode, rawURL, depth = 0) {
+ let url;
+ try {
+ url = new URL(rawURL);
+ } catch(ex) {
+ return false;
+ }
+
+ const search = url.search.slice(1);
+ if ( search === '' ) { return false; }
+
+ url.search = '';
+ const li = liFromParam(i18n$('docblockedNoParamsPrompt'), url.href);
+ parentNode.appendChild(li);
+
+ const params = new self.URLSearchParams(search);
+ for ( const [ name, value ] of params ) {
+ const li = liFromParam(name, value);
+ if ( depth < 2 && reURL.test(value) ) {
+ const ul = dom.create('ul');
+ renderParams(ul, value, depth + 1);
+ li.appendChild(ul);
+ }
+ parentNode.appendChild(li);
+ }
+
+ return true;
+ };
+
+ if ( renderParams(qs$('#parsed'), details.url) === false ) {
+ return;
+ }
+
+ dom.cl.remove('#toggleParse', 'hidden');
+
+ dom.on('#toggleParse', 'click', ( ) => {
+ dom.cl.toggle('#theURL', 'collapsed');
+ vAPI.localStorage.setItem(
+ 'document-blocked-expand-url',
+ (dom.cl.has('#theURL', 'collapsed') === false).toString()
+ );
+ });
+
+ vAPI.localStorage.getItemAsync('document-blocked-expand-url').then(value => {
+ dom.cl.toggle('#theURL', 'collapsed', value !== 'true' && value !== true);
+ });
+})();
+
+/******************************************************************************/
+
+// https://www.reddit.com/r/uBlockOrigin/comments/breeux/close_this_window_doesnt_work_on_firefox/
+
+if ( window.history.length > 1 ) {
+ dom.on('#back', 'click', ( ) => {
+ window.history.back();
+ });
+ qs$('#bye').style.display = 'none';
+} else {
+ dom.on('#bye', 'click', ( ) => {
+ messaging.send('documentBlocked', {
+ what: 'closeThisTab',
+ });
+ });
+ qs$('#back').style.display = 'none';
+}
+
+/******************************************************************************/
+
+const getTargetHostname = function() {
+ return details.hn;
+};
+
+const proceedToURL = function() {
+ window.location.replace(details.url);
+};
+
+const proceedTemporary = async function() {
+ await messaging.send('documentBlocked', {
+ what: 'temporarilyWhitelistDocument',
+ hostname: getTargetHostname(),
+ });
+ proceedToURL();
+};
+
+const proceedPermanent = async function() {
+ await messaging.send('documentBlocked', {
+ what: 'toggleHostnameSwitch',
+ name: 'no-strict-blocking',
+ hostname: getTargetHostname(),
+ deep: true,
+ state: true,
+ persist: true,
+ });
+ proceedToURL();
+};
+
+dom.on('#disableWarning', 'change', ev => {
+ const checked = ev.target.checked;
+ dom.cl.toggle('[data-i18n="docblockedBack"]', 'disabled', checked);
+ dom.cl.toggle('[data-i18n="docblockedClose"]', 'disabled', checked);
+});
+
+dom.on('#proceed', 'click', ( ) => {
+ if ( qs$('#disableWarning').checked ) {
+ proceedPermanent();
+ } else {
+ proceedTemporary();
+ }
+});
+
+/******************************************************************************/
diff --git a/src/js/dom-inspector.js b/src/js/dom-inspector.js
new file mode 100644
index 0000000..a0d334b
--- /dev/null
+++ b/src/js/dom-inspector.js
@@ -0,0 +1,68 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+/******************************************************************************/
+
+const svgRoot = document.querySelector('svg');
+let inspectorContentPort;
+
+const shutdown = ( ) => {
+ inspectorContentPort.close();
+ inspectorContentPort.onmessage = inspectorContentPort.onmessageerror = null;
+ inspectorContentPort = undefined;
+};
+
+const contentInspectorChannel = ev => {
+ const msg = ev.data || {};
+ switch ( msg.what ) {
+ case 'quitInspector': {
+ shutdown();
+ break;
+ }
+ case 'svgPaths': {
+ const paths = svgRoot.children;
+ paths[0].setAttribute('d', msg.paths[0]);
+ paths[1].setAttribute('d', msg.paths[1]);
+ paths[2].setAttribute('d', msg.paths[2]);
+ paths[3].setAttribute('d', msg.paths[3]);
+ break;
+ }
+ default:
+ break;
+ }
+};
+
+// Wait for the content script to establish communication
+globalThis.addEventListener('message', ev => {
+ const msg = ev.data || {};
+ if ( msg.what !== 'startInspector' ) { return; }
+ if ( Array.isArray(ev.ports) === false ) { return; }
+ if ( ev.ports.length === 0 ) { return; }
+ inspectorContentPort = ev.ports[0];
+ inspectorContentPort.onmessage = contentInspectorChannel;
+ inspectorContentPort.onmessageerror = shutdown;
+ inspectorContentPort.postMessage({ what: 'startInspector' });
+}, { once: true });
+
+/******************************************************************************/
diff --git a/src/js/dom.js b/src/js/dom.js
new file mode 100644
index 0000000..3d2f517
--- /dev/null
+++ b/src/js/dom.js
@@ -0,0 +1,213 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint esversion:11 */
+
+'use strict';
+
+/******************************************************************************/
+
+const normalizeTarget = target => {
+ if ( typeof target === 'string' ) { return Array.from(qsa$(target)); }
+ if ( target instanceof Element ) { return [ target ]; }
+ if ( target === null ) { return []; }
+ if ( Array.isArray(target) ) { return target; }
+ return Array.from(target);
+};
+
+const makeEventHandler = (selector, callback) => {
+ return function(event) {
+ const dispatcher = event.currentTarget;
+ if (
+ dispatcher instanceof HTMLElement === false ||
+ typeof dispatcher.querySelectorAll !== 'function'
+ ) {
+ return;
+ }
+ const receiver = event.target;
+ const ancestor = receiver.closest(selector);
+ if (
+ ancestor === receiver &&
+ ancestor !== dispatcher &&
+ dispatcher.contains(ancestor)
+ ) {
+ callback.call(receiver, event);
+ }
+ };
+};
+
+/******************************************************************************/
+
+class dom {
+ static attr(target, attr, value = undefined) {
+ for ( const elem of normalizeTarget(target) ) {
+ if ( value === undefined ) {
+ return elem.getAttribute(attr);
+ }
+ if ( value === null ) {
+ elem.removeAttribute(attr);
+ } else {
+ elem.setAttribute(attr, value);
+ }
+ }
+ }
+
+ static clear(target) {
+ for ( const elem of normalizeTarget(target) ) {
+ while ( elem.firstChild !== null ) {
+ elem.removeChild(elem.firstChild);
+ }
+ }
+ }
+
+ static clone(target) {
+ const elements = normalizeTarget(target);
+ if ( elements.length === 0 ) { return null; }
+ return elements[0].cloneNode(true);
+ }
+
+ static create(a) {
+ if ( typeof a === 'string' ) {
+ return document.createElement(a);
+ }
+ }
+
+ static prop(target, prop, value = undefined) {
+ for ( const elem of normalizeTarget(target) ) {
+ if ( value === undefined ) { return elem[prop]; }
+ elem[prop] = value;
+ }
+ }
+
+ static text(target, text) {
+ const targets = normalizeTarget(target);
+ if ( text === undefined ) {
+ return targets.length !== 0 ? targets[0].textContent : undefined;
+ }
+ for ( const elem of targets ) {
+ elem.textContent = text;
+ }
+ }
+
+ static remove(target) {
+ for ( const elem of normalizeTarget(target) ) {
+ elem.remove();
+ }
+ }
+
+ // target, type, callback, [options]
+ // target, type, subtarget, callback, [options]
+
+ static on(target, type, subtarget, callback, options) {
+ if ( typeof subtarget === 'function' ) {
+ options = callback;
+ callback = subtarget;
+ subtarget = undefined;
+ if ( typeof options === 'boolean' ) {
+ options = { capture: true };
+ }
+ } else {
+ callback = makeEventHandler(subtarget, callback);
+ if ( options === undefined || typeof options === 'boolean' ) {
+ options = { capture: true };
+ } else {
+ options.capture = true;
+ }
+ }
+ const targets = target instanceof Window || target instanceof Document
+ ? [ target ]
+ : normalizeTarget(target);
+ for ( const elem of targets ) {
+ elem.addEventListener(type, callback, options);
+ }
+ }
+
+ static off(target, type, callback, options) {
+ if ( typeof callback !== 'function' ) { return; }
+ if ( typeof options === 'boolean' ) {
+ options = { capture: true };
+ }
+ const targets = target instanceof Window || target instanceof Document
+ ? [ target ]
+ : normalizeTarget(target);
+ for ( const elem of targets ) {
+ elem.removeEventListener(type, callback, options);
+ }
+ }
+}
+
+dom.cl = class {
+ static add(target, name) {
+ for ( const elem of normalizeTarget(target) ) {
+ elem.classList.add(name);
+ }
+ }
+
+ static remove(target, name) {
+ for ( const elem of normalizeTarget(target) ) {
+ elem.classList.remove(name);
+ }
+ }
+
+ static toggle(target, name, state) {
+ let r;
+ for ( const elem of normalizeTarget(target) ) {
+ r = elem.classList.toggle(name, state);
+ }
+ return r;
+ }
+
+ static has(target, name) {
+ for ( const elem of normalizeTarget(target) ) {
+ if ( elem.classList.contains(name) ) {
+ return true;
+ }
+ }
+ return false;
+ }
+};
+
+/******************************************************************************/
+
+function qs$(a, b) {
+ if ( typeof a === 'string') {
+ return document.querySelector(a);
+ }
+ if ( a === null ) { return null; }
+ return a.querySelector(b);
+}
+
+function qsa$(a, b) {
+ if ( typeof a === 'string') {
+ return document.querySelectorAll(a);
+ }
+ if ( a === null ) { return []; }
+ return a.querySelectorAll(b);
+}
+
+dom.root = qs$(':root');
+dom.html = document.documentElement;
+dom.head = document.head;
+dom.body = document.body;
+
+/******************************************************************************/
+
+export { dom, qs$, qsa$ };
diff --git a/src/js/dyna-rules.js b/src/js/dyna-rules.js
new file mode 100644
index 0000000..ea79742
--- /dev/null
+++ b/src/js/dyna-rules.js
@@ -0,0 +1,678 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uMatrix
+*/
+
+/* global CodeMirror, diff_match_patch, uBlockDashboard */
+
+'use strict';
+
+import publicSuffixList from '../lib/publicsuffixlist/publicsuffixlist.js';
+
+import { hostnameFromURI } from './uri-utils.js';
+import { i18n$ } from './i18n.js';
+import { dom, qs$, qsa$ } from './dom.js';
+
+import './codemirror/ubo-dynamic-filtering.js';
+
+/******************************************************************************/
+
+const hostnameToDomainMap = new Map();
+
+const mergeView = new CodeMirror.MergeView(
+ qs$('.codeMirrorMergeContainer'),
+ {
+ allowEditingOriginals: true,
+ connect: 'align',
+ inputStyle: 'contenteditable',
+ lineNumbers: true,
+ lineWrapping: false,
+ origLeft: '',
+ revertButtons: true,
+ value: '',
+ }
+);
+mergeView.editor().setOption('styleActiveLine', true);
+mergeView.editor().setOption('lineNumbers', false);
+mergeView.leftOriginal().setOption('readOnly', 'nocursor');
+
+uBlockDashboard.patchCodeMirrorEditor(mergeView.editor());
+
+const thePanes = {
+ orig: {
+ doc: mergeView.leftOriginal(),
+ original: [],
+ modified: [],
+ },
+ edit: {
+ doc: mergeView.editor(),
+ original: [],
+ modified: [],
+ },
+};
+
+let cleanEditToken = 0;
+let cleanEditText = '';
+let isCollapsed = false;
+
+/******************************************************************************/
+
+// The following code is to take care of properly internationalizing
+// the tooltips of the arrows used by the CodeMirror merge view. These
+// are hard-coded by CodeMirror ("Push to left", "Push to right"). An
+// observer is necessary because there is no hook for uBO to overwrite
+// reliably the default title attribute assigned by CodeMirror.
+
+{
+ const i18nCommitStr = i18n$('rulesCommit');
+ const i18nRevertStr = i18n$('rulesRevert');
+ const commitArrowSelector = '.CodeMirror-merge-copybuttons-left .CodeMirror-merge-copy-reverse:not([title="' + i18nCommitStr + '"])';
+ const revertArrowSelector = '.CodeMirror-merge-copybuttons-left .CodeMirror-merge-copy:not([title="' + i18nRevertStr + '"])';
+
+ dom.attr('.CodeMirror-merge-scrolllock', 'title', i18n$('genericMergeViewScrollLock'));
+
+ const translate = function() {
+ let elems = qsa$(commitArrowSelector);
+ for ( const elem of elems ) {
+ dom.attr(elem, 'title', i18nCommitStr);
+ }
+ elems = qsa$(revertArrowSelector);
+ for ( const elem of elems ) {
+ dom.attr(elem, 'title', i18nRevertStr);
+ }
+ };
+
+ const mergeGapObserver = new MutationObserver(translate);
+
+ mergeGapObserver.observe(
+ qs$('.CodeMirror-merge-copybuttons-left'),
+ { attributes: true, attributeFilter: [ 'title' ], subtree: true }
+ );
+
+}
+
+/******************************************************************************/
+
+const getDiffer = (( ) => {
+ let differ;
+ return ( ) => {
+ if ( differ === undefined ) { differ = new diff_match_patch(); }
+ return differ;
+ };
+})();
+
+/******************************************************************************/
+
+// Borrowed from...
+// https://github.com/codemirror/CodeMirror/blob/3e1bb5fff682f8f6cbfaef0e56c61d62403d4798/addon/search/search.js#L22
+// ... and modified as needed.
+
+const updateOverlay = (( ) => {
+ let reFilter;
+ const mode = {
+ token: function(stream) {
+ if ( reFilter !== undefined ) {
+ reFilter.lastIndex = stream.pos;
+ let match = reFilter.exec(stream.string);
+ if ( match !== null ) {
+ if ( match.index === stream.pos ) {
+ stream.pos += match[0].length || 1;
+ return 'searching';
+ }
+ stream.pos = match.index;
+ return;
+ }
+ }
+ stream.skipToEnd();
+ }
+ };
+ return function(filter) {
+ reFilter = typeof filter === 'string' && filter !== '' ?
+ new RegExp(filter.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'gi') :
+ undefined;
+ return mode;
+ };
+})();
+
+/******************************************************************************/
+
+// Incrementally update text in a CodeMirror editor for best user experience:
+// - Scroll position preserved
+// - Minimum amount of text updated
+
+const rulesToDoc = function(clearHistory) {
+ const orig = thePanes.orig.doc;
+ const edit = thePanes.edit.doc;
+ orig.startOperation();
+ edit.startOperation();
+
+ for ( const key in thePanes ) {
+ if ( thePanes.hasOwnProperty(key) === false ) { continue; }
+ const doc = thePanes[key].doc;
+ const rules = filterRules(key);
+ if (
+ clearHistory ||
+ doc.lineCount() === 1 && doc.getValue() === '' ||
+ rules.length === 0
+ ) {
+ doc.setValue(rules.length !== 0 ? rules.join('\n') + '\n' : '');
+ continue;
+ }
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/593
+ // Ensure the text content always ends with an empty line to avoid
+ // spurious diff entries.
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/657
+ // Diff against unmodified beforeText so that the last newline can
+ // be reported in the diff and thus appended if needed.
+ let beforeText = doc.getValue();
+ let afterText = rules.join('\n').trim();
+ if ( afterText !== '' ) { afterText += '\n'; }
+ const diffs = getDiffer().diff_main(beforeText, afterText);
+ let i = diffs.length;
+ let iedit = beforeText.length;
+ while ( i-- ) {
+ const diff = diffs[i];
+ if ( diff[0] === 0 ) {
+ iedit -= diff[1].length;
+ continue;
+ }
+ const end = doc.posFromIndex(iedit);
+ if ( diff[0] === 1 ) {
+ doc.replaceRange(diff[1], end, end);
+ continue;
+ }
+ /* diff[0] === -1 */
+ iedit -= diff[1].length;
+ const beg = doc.posFromIndex(iedit);
+ doc.replaceRange('', beg, end);
+ }
+ }
+
+ // Mark ellipses as read-only
+ const marks = edit.getAllMarks();
+ for ( const mark of marks ) {
+ if ( mark.uboEllipsis !== true ) { continue; }
+ mark.clear();
+ }
+ if ( isCollapsed ) {
+ for ( let iline = 0, n = edit.lineCount(); iline < n; iline++ ) {
+ if ( edit.getLine(iline) !== '...' ) { continue; }
+ const mark = edit.markText(
+ { line: iline, ch: 0 },
+ { line: iline + 1, ch: 0 },
+ { atomic: true, readOnly: true }
+ );
+ mark.uboEllipsis = true;
+ }
+ }
+
+ orig.endOperation();
+ edit.endOperation();
+ cleanEditText = mergeView.editor().getValue().trim();
+ cleanEditToken = mergeView.editor().changeGeneration();
+
+ if ( clearHistory !== true ) { return; }
+
+ mergeView.editor().clearHistory();
+ const chunks = mergeView.leftChunks();
+ if ( chunks.length === 0 ) { return; }
+ const ldoc = thePanes.orig.doc;
+ const { clientHeight } = ldoc.getScrollInfo();
+ const line = Math.min(chunks[0].editFrom, chunks[0].origFrom);
+ ldoc.setCursor(line, 0);
+ ldoc.scrollIntoView(
+ { line, ch: 0 },
+ (clientHeight - ldoc.defaultTextHeight()) / 2
+ );
+};
+
+/******************************************************************************/
+
+const filterRules = function(key) {
+ const filter = qs$('#ruleFilter input').value;
+ const rules = thePanes[key].modified;
+ if ( filter === '' ) { return rules; }
+ const out = [];
+ for ( const rule of rules ) {
+ if ( rule.indexOf(filter) === -1 ) { continue; }
+ out.push(rule);
+ }
+ return out;
+};
+
+/******************************************************************************/
+
+const applyDiff = async function(permanent, toAdd, toRemove) {
+ const details = await vAPI.messaging.send('dashboard', {
+ what: 'modifyRuleset',
+ permanent: permanent,
+ toAdd: toAdd,
+ toRemove: toRemove,
+ });
+ thePanes.orig.original = details.permanentRules;
+ thePanes.edit.original = details.sessionRules;
+ onPresentationChanged();
+};
+
+/******************************************************************************/
+
+// CodeMirror quirk: sometimes fromStart.ch and/or toStart.ch is undefined.
+// When this happens, use 0.
+
+mergeView.options.revertChunk = function(
+ mv,
+ from, fromStart, fromEnd,
+ to, toStart, toEnd
+) {
+ // https://github.com/gorhill/uBlock/issues/3611
+ if ( dom.attr(dom.body, 'dir') === 'rtl' ) {
+ let tmp = from; from = to; to = tmp;
+ tmp = fromStart; fromStart = toStart; toStart = tmp;
+ tmp = fromEnd; fromEnd = toEnd; toEnd = tmp;
+ }
+ if ( typeof fromStart.ch !== 'number' ) { fromStart.ch = 0; }
+ if ( fromEnd.ch !== 0 ) { fromEnd.line += 1; }
+ const toAdd = from.getRange(
+ { line: fromStart.line, ch: 0 },
+ { line: fromEnd.line, ch: 0 }
+ );
+ if ( typeof toStart.ch !== 'number' ) { toStart.ch = 0; }
+ if ( toEnd.ch !== 0 ) { toEnd.line += 1; }
+ const toRemove = to.getRange(
+ { line: toStart.line, ch: 0 },
+ { line: toEnd.line, ch: 0 }
+ );
+ applyDiff(from === mv.editor(), toAdd, toRemove);
+};
+
+/******************************************************************************/
+
+function handleImportFilePicker() {
+ const fileReaderOnLoadHandler = function() {
+ if ( typeof this.result !== 'string' || this.result === '' ) { return; }
+ // https://github.com/chrisaljoudi/uBlock/issues/757
+ // Support RequestPolicy rule syntax
+ let result = this.result;
+ let matches = /\[origins-to-destinations\]([^\[]+)/.exec(result);
+ if ( matches && matches.length === 2 ) {
+ result = matches[1].trim()
+ .replace(/\|/g, ' ')
+ .replace(/\n/g, ' * noop\n');
+ }
+ applyDiff(false, result, '');
+ };
+ const file = this.files[0];
+ if ( file === undefined || file.name === '' ) { return; }
+ if ( file.type.indexOf('text') !== 0 ) { return; }
+ const fr = new FileReader();
+ fr.onload = fileReaderOnLoadHandler;
+ fr.readAsText(file);
+}
+
+/******************************************************************************/
+
+const startImportFilePicker = function() {
+ const input = qs$('#importFilePicker');
+ // Reset to empty string, this will ensure an change event is properly
+ // triggered if the user pick a file, even if it is the same as the last
+ // one picked.
+ input.value = '';
+ input.click();
+};
+
+/******************************************************************************/
+
+function exportUserRulesToFile() {
+ const filename = i18n$('rulesDefaultFileName')
+ .replace('{{datetime}}', uBlockDashboard.dateNowToSensibleString())
+ .replace(/ +/g, '_');
+ vAPI.download({
+ url: 'data:text/plain,' + encodeURIComponent(
+ mergeView.leftOriginal().getValue().trim() + '\n'
+ ),
+ filename: filename,
+ saveAs: true
+ });
+}
+
+/******************************************************************************/
+
+const onFilterChanged = (( ) => {
+ let timer;
+ let overlay = null;
+ let last = '';
+
+ const process = function() {
+ timer = undefined;
+ if ( mergeView.editor().isClean(cleanEditToken) === false ) { return; }
+ const filter = qs$('#ruleFilter input').value;
+ if ( filter === last ) { return; }
+ last = filter;
+ if ( overlay !== null ) {
+ mergeView.leftOriginal().removeOverlay(overlay);
+ mergeView.editor().removeOverlay(overlay);
+ overlay = null;
+ }
+ if ( filter !== '' ) {
+ overlay = updateOverlay(filter);
+ mergeView.leftOriginal().addOverlay(overlay);
+ mergeView.editor().addOverlay(overlay);
+ }
+ rulesToDoc(true);
+ };
+
+ return function() {
+ if ( timer !== undefined ) { self.cancelIdleCallback(timer); }
+ timer = self.requestIdleCallback(process, { timeout: 773 });
+ };
+})();
+
+/******************************************************************************/
+
+const onPresentationChanged = (( ) => {
+ let sortType = 1;
+
+ const reSwRule = /^([^/]+): ([^/ ]+) ([^ ]+)/;
+ const reRule = /^([^ ]+) ([^/ ]+) ([^ ]+ [^ ]+)/;
+ const reUrlRule = /^([^ ]+) ([^ ]+) ([^ ]+ [^ ]+)/;
+
+ const sortNormalizeHn = function(hn) {
+ let domain = hostnameToDomainMap.get(hn);
+ if ( domain === undefined ) {
+ domain = /(\d|\])$/.test(hn)
+ ? hn
+ : publicSuffixList.getDomain(hn);
+ hostnameToDomainMap.set(hn, domain);
+ }
+ let normalized = domain || hn;
+ if ( hn.length !== domain.length ) {
+ const subdomains = hn.slice(0, hn.length - domain.length - 1);
+ normalized += '.' + (
+ subdomains.includes('.')
+ ? subdomains.split('.').reverse().join('.')
+ : subdomains
+ );
+ }
+ return normalized;
+ };
+
+ const slotFromRule = rule => {
+ let type, srcHn, desHn, extra;
+ let match = reSwRule.exec(rule);
+ if ( match !== null ) {
+ type = ' ' + match[1];
+ srcHn = sortNormalizeHn(match[2]);
+ desHn = srcHn;
+ extra = match[3];
+ } else if ( (match = reRule.exec(rule)) !== null ) {
+ type = '\x10FFFE';
+ srcHn = sortNormalizeHn(match[1]);
+ desHn = sortNormalizeHn(match[2]);
+ extra = match[3];
+ } else if ( (match = reUrlRule.exec(rule)) !== null ) {
+ type = '\x10FFFF';
+ srcHn = sortNormalizeHn(match[1]);
+ desHn = sortNormalizeHn(hostnameFromURI(match[2]));
+ extra = match[3];
+ }
+ if ( sortType === 0 ) {
+ return { rule, token: `${type} ${srcHn} ${desHn} ${extra}` };
+ }
+ if ( sortType === 1 ) {
+ return { rule, token: `${srcHn} ${type} ${desHn} ${extra}` };
+ }
+ return { rule, token: `${desHn} ${type} ${srcHn} ${extra}` };
+ };
+
+ const sort = rules => {
+ const slots = [];
+ for ( let i = 0; i < rules.length; i++ ) {
+ slots.push(slotFromRule(rules[i], 1));
+ }
+ slots.sort((a, b) => a.token.localeCompare(b.token));
+ for ( let i = 0; i < rules.length; i++ ) {
+ rules[i] = slots[i].rule;
+ }
+ };
+
+ const collapse = ( ) => {
+ if ( isCollapsed !== true ) { return; }
+ const diffs = getDiffer().diff_main(
+ thePanes.orig.modified.join('\n'),
+ thePanes.edit.modified.join('\n')
+ );
+ const ll = []; let il = 0, lellipsis = false;
+ const rr = []; let ir = 0, rellipsis = false;
+ for ( let i = 0; i < diffs.length; i++ ) {
+ const diff = diffs[i];
+ if ( diff[0] === 0 ) {
+ lellipsis = rellipsis = true;
+ il += 1; ir += 1;
+ continue;
+ }
+ if ( diff[0] < 0 ) {
+ if ( lellipsis ) {
+ ll.push('...');
+ if ( rellipsis ) { rr.push('...'); }
+ lellipsis = rellipsis = false;
+ }
+ ll.push(diff[1].trim());
+ il += 1;
+ continue;
+ }
+ /* diff[0] > 0 */
+ if ( rellipsis ) {
+ rr.push('...');
+ if ( lellipsis ) { ll.push('...'); }
+ lellipsis = rellipsis = false;
+ }
+ rr.push(diff[1].trim());
+ ir += 1;
+ }
+ if ( lellipsis ) { ll.push('...'); }
+ if ( rellipsis ) { rr.push('...'); }
+ thePanes.orig.modified = ll;
+ thePanes.edit.modified = rr;
+ };
+
+ return function(clearHistory) {
+ const origPane = thePanes.orig;
+ const editPane = thePanes.edit;
+ origPane.modified = origPane.original.slice();
+ editPane.modified = editPane.original.slice();
+ const select = qs$('#ruleFilter select');
+ sortType = parseInt(select.value, 10);
+ if ( isNaN(sortType) ) { sortType = 1; }
+ {
+ const mode = origPane.doc.getMode();
+ mode.sortType = sortType;
+ mode.setHostnameToDomainMap(hostnameToDomainMap);
+ mode.setPSL(publicSuffixList);
+ }
+ {
+ const mode = editPane.doc.getMode();
+ mode.sortType = sortType;
+ mode.setHostnameToDomainMap(hostnameToDomainMap);
+ mode.setPSL(publicSuffixList);
+ }
+ sort(origPane.modified);
+ sort(editPane.modified);
+ collapse();
+ rulesToDoc(clearHistory);
+ onTextChanged(clearHistory);
+ };
+})();
+
+/******************************************************************************/
+
+const onTextChanged = (( ) => {
+ let timer;
+
+ const process = details => {
+ timer = undefined;
+ const diff = qs$('#diff');
+ let isClean = mergeView.editor().isClean(cleanEditToken);
+ if (
+ details === undefined &&
+ isClean === false &&
+ mergeView.editor().getValue().trim() === cleanEditText
+ ) {
+ cleanEditToken = mergeView.editor().changeGeneration();
+ isClean = true;
+ }
+ const isDirty = mergeView.leftChunks().length !== 0;
+ dom.cl.toggle(dom.body, 'editing', isClean === false);
+ dom.cl.toggle(diff, 'dirty', isDirty);
+ dom.cl.toggle('#editSaveButton', 'disabled', isClean);
+ dom.cl.toggle('#exportButton,#importButton', 'disabled', isClean === false);
+ dom.cl.toggle('#revertButton,#commitButton', 'disabled', isClean === false || isDirty === false);
+ const input = qs$('#ruleFilter input');
+ if ( isClean ) {
+ dom.attr(input, 'disabled', null);
+ CodeMirror.commands.save = undefined;
+ } else {
+ dom.attr(input, 'disabled', '');
+ CodeMirror.commands.save = editSaveHandler;
+ }
+ };
+
+ return function(now) {
+ if ( timer !== undefined ) { self.cancelIdleCallback(timer); }
+ timer = now ? process() : self.requestIdleCallback(process, { timeout: 57 });
+ };
+})();
+
+/******************************************************************************/
+
+const revertAllHandler = function() {
+ const toAdd = [], toRemove = [];
+ const left = mergeView.leftOriginal();
+ const edit = mergeView.editor();
+ for ( const chunk of mergeView.leftChunks() ) {
+ const addedLines = left.getRange(
+ { line: chunk.origFrom, ch: 0 },
+ { line: chunk.origTo, ch: 0 }
+ );
+ const removedLines = edit.getRange(
+ { line: chunk.editFrom, ch: 0 },
+ { line: chunk.editTo, ch: 0 }
+ );
+ toAdd.push(addedLines.trim());
+ toRemove.push(removedLines.trim());
+ }
+ applyDiff(false, toAdd.join('\n'), toRemove.join('\n'));
+};
+
+/******************************************************************************/
+
+const commitAllHandler = function() {
+ const toAdd = [], toRemove = [];
+ const left = mergeView.leftOriginal();
+ const edit = mergeView.editor();
+ for ( const chunk of mergeView.leftChunks() ) {
+ const addedLines = edit.getRange(
+ { line: chunk.editFrom, ch: 0 },
+ { line: chunk.editTo, ch: 0 }
+ );
+ const removedLines = left.getRange(
+ { line: chunk.origFrom, ch: 0 },
+ { line: chunk.origTo, ch: 0 }
+ );
+ toAdd.push(addedLines.trim());
+ toRemove.push(removedLines.trim());
+ }
+ applyDiff(true, toAdd.join('\n'), toRemove.join('\n'));
+};
+
+/******************************************************************************/
+
+const editSaveHandler = function() {
+ const editor = mergeView.editor();
+ const editText = editor.getValue().trim();
+ if ( editText === cleanEditText ) {
+ onTextChanged(true);
+ return;
+ }
+ const toAdd = [], toRemove = [];
+ const diffs = getDiffer().diff_main(cleanEditText, editText);
+ for ( const diff of diffs ) {
+ if ( diff[0] === 1 ) {
+ toAdd.push(diff[1]);
+ } else if ( diff[0] === -1 ) {
+ toRemove.push(diff[1]);
+ }
+ }
+ applyDiff(false, toAdd.join(''), toRemove.join(''));
+};
+
+/******************************************************************************/
+
+self.cloud.onPush = function() {
+ return thePanes.orig.original.join('\n');
+};
+
+self.cloud.onPull = function(data, append) {
+ if ( typeof data !== 'string' ) { return; }
+ applyDiff(
+ false,
+ data,
+ append ? '' : mergeView.editor().getValue().trim()
+ );
+};
+
+/******************************************************************************/
+
+self.hasUnsavedData = function() {
+ return mergeView.editor().isClean(cleanEditToken) === false;
+};
+
+/******************************************************************************/
+
+vAPI.messaging.send('dashboard', {
+ what: 'getRules',
+}).then(details => {
+ thePanes.orig.original = details.permanentRules;
+ thePanes.edit.original = details.sessionRules;
+ publicSuffixList.fromSelfie(details.pslSelfie);
+ onPresentationChanged(true);
+});
+
+// Handle user interaction
+dom.on('#importButton', 'click', startImportFilePicker);
+dom.on('#importFilePicker', 'change', handleImportFilePicker);
+dom.on('#exportButton', 'click', exportUserRulesToFile);
+dom.on('#revertButton', 'click', revertAllHandler);
+dom.on('#commitButton', 'click', commitAllHandler);
+dom.on('#editSaveButton', 'click', editSaveHandler);
+dom.on('#ruleFilter input', 'input', onFilterChanged);
+dom.on('#ruleFilter select', 'input', ( ) => {
+ onPresentationChanged(true);
+});
+dom.on('#ruleFilter #diffCollapse', 'click', ev => {
+ isCollapsed = dom.cl.toggle(ev.target, 'active');
+ onPresentationChanged(true);
+});
+
+// https://groups.google.com/forum/#!topic/codemirror/UQkTrt078Vs
+mergeView.editor().on('updateDiff', ( ) => {
+ onTextChanged();
+});
+
+/******************************************************************************/
+
diff --git a/src/js/dynamic-net-filtering.js b/src/js/dynamic-net-filtering.js
new file mode 100644
index 0000000..ec7a7c9
--- /dev/null
+++ b/src/js/dynamic-net-filtering.js
@@ -0,0 +1,488 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-2018 Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import punycode from '../lib/punycode.js';
+
+import { LineIterator } from './text-utils.js';
+
+import {
+ decomposeHostname,
+ domainFromHostname,
+} from './uri-utils.js';
+
+/******************************************************************************/
+
+// Object.create(null) is used below to eliminate worries about unexpected
+// property names in prototype chain -- and this way we don't have to use
+// hasOwnProperty() to avoid this.
+
+const supportedDynamicTypes = Object.create(null);
+Object.assign(supportedDynamicTypes, {
+ '3p': true,
+ 'image': true,
+'inline-script': true,
+ '1p-script': true,
+ '3p-script': true,
+ '3p-frame': true
+});
+
+const typeBitOffsets = Object.create(null);
+Object.assign(typeBitOffsets, {
+ '*': 0,
+'inline-script': 2,
+ '1p-script': 4,
+ '3p-script': 6,
+ '3p-frame': 8,
+ 'image': 10,
+ '3p': 12
+});
+
+const nameToActionMap = Object.create(null);
+Object.assign(nameToActionMap, {
+ 'block': 1,
+ 'allow': 2,
+ 'noop': 3
+});
+
+const intToActionMap = new Map([
+ [ 1, 'block' ],
+ [ 2, 'allow' ],
+ [ 3, 'noop' ]
+]);
+
+// For performance purpose, as simple tests as possible
+const reBadHostname = /[^0-9a-z_.\[\]:%-]/;
+const reNotASCII = /[^\x20-\x7F]/;
+const decomposedSource = [];
+const decomposedDestination = [];
+
+/******************************************************************************/
+
+function is3rdParty(srcHostname, desHostname) {
+ // If at least one is party-less, the relation can't be labelled
+ // "3rd-party"
+ if ( desHostname === '*' || srcHostname === '*' || srcHostname === '' ) {
+ return false;
+ }
+
+ // No domain can very well occurs, for examples:
+ // - localhost
+ // - file-scheme
+ // etc.
+ const srcDomain = domainFromHostname(srcHostname) || srcHostname;
+
+ if ( desHostname.endsWith(srcDomain) === false ) {
+ return true;
+ }
+ // Do not confuse 'example.com' with 'anotherexample.com'
+ return desHostname.length !== srcDomain.length &&
+ desHostname.charAt(desHostname.length - srcDomain.length - 1) !== '.';
+}
+
+/******************************************************************************/
+
+class DynamicHostRuleFiltering {
+
+ constructor() {
+ this.reset();
+ }
+
+ reset() {
+ this.r = 0;
+ this.type = '';
+ this.y = '';
+ this.z = '';
+ this.rules = new Map();
+ this.changed = false;
+ }
+
+ assign(other) {
+ // Remove rules not in other
+ for ( const k of this.rules.keys() ) {
+ if ( other.rules.has(k) === false ) {
+ this.rules.delete(k);
+ this.changed = true;
+ }
+ }
+ // Add/change rules in other
+ for ( const entry of other.rules ) {
+ if ( this.rules.get(entry[0]) !== entry[1] ) {
+ this.rules.set(entry[0], entry[1]);
+ this.changed = true;
+ }
+ }
+ }
+
+ copyRules(from, srcHostname, desHostnames) {
+ // Specific types
+ let thisBits = this.rules.get('* *');
+ let fromBits = from.rules.get('* *');
+ if ( fromBits !== thisBits ) {
+ if ( fromBits !== undefined ) {
+ this.rules.set('* *', fromBits);
+ } else {
+ this.rules.delete('* *');
+ }
+ this.changed = true;
+ }
+
+ let key = `${srcHostname} *`;
+ thisBits = this.rules.get(key);
+ fromBits = from.rules.get(key);
+ if ( fromBits !== thisBits ) {
+ if ( fromBits !== undefined ) {
+ this.rules.set(key, fromBits);
+ } else {
+ this.rules.delete(key);
+ }
+ this.changed = true;
+ }
+
+ // Specific destinations
+ for ( const desHostname in desHostnames ) {
+ key = `* ${desHostname}`;
+ thisBits = this.rules.get(key);
+ fromBits = from.rules.get(key);
+ if ( fromBits !== thisBits ) {
+ if ( fromBits !== undefined ) {
+ this.rules.set(key, fromBits);
+ } else {
+ this.rules.delete(key);
+ }
+ this.changed = true;
+ }
+ key = `${srcHostname} ${desHostname}` ;
+ thisBits = this.rules.get(key);
+ fromBits = from.rules.get(key);
+ if ( fromBits !== thisBits ) {
+ if ( fromBits !== undefined ) {
+ this.rules.set(key, fromBits);
+ } else {
+ this.rules.delete(key);
+ }
+ this.changed = true;
+ }
+ }
+
+ return this.changed;
+ }
+
+ // - * * type
+ // - from * type
+ // - * to *
+ // - from to *
+
+ hasSameRules(other, srcHostname, desHostnames) {
+ // Specific types
+ let key = '* *';
+ if ( this.rules.get(key) !== other.rules.get(key) ) { return false; }
+ key = `${srcHostname} *`;
+ if ( this.rules.get(key) !== other.rules.get(key) ) { return false; }
+ // Specific destinations
+ for ( const desHostname in desHostnames ) {
+ key = `* ${desHostname}`;
+ if ( this.rules.get(key) !== other.rules.get(key) ) {
+ return false;
+ }
+ key = `${srcHostname} ${desHostname}`;
+ if ( this.rules.get(key) !== other.rules.get(key) ) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ setCell(srcHostname, desHostname, type, state) {
+ const bitOffset = typeBitOffsets[type];
+ const k = `${srcHostname} ${desHostname}`;
+ const oldBitmap = this.rules.get(k) || 0;
+ const newBitmap = oldBitmap & ~(3 << bitOffset) | (state << bitOffset);
+ if ( newBitmap === oldBitmap ) { return false; }
+ if ( newBitmap === 0 ) {
+ this.rules.delete(k);
+ } else {
+ this.rules.set(k, newBitmap);
+ }
+ this.changed = true;
+ return true;
+ }
+
+ unsetCell(srcHostname, desHostname, type) {
+ this.evaluateCellZY(srcHostname, desHostname, type);
+ if ( this.r === 0 ) { return false; }
+ this.setCell(srcHostname, desHostname, type, 0);
+ this.changed = true;
+ return true;
+ }
+
+ evaluateCell(srcHostname, desHostname, type) {
+ const key = `${srcHostname} ${desHostname}`;
+ const bitmap = this.rules.get(key);
+ if ( bitmap === undefined ) { return 0; }
+ return bitmap >> typeBitOffsets[type] & 3;
+ }
+
+ clearRegisters() {
+ this.r = 0;
+ this.type = this.y = this.z = '';
+ return this;
+ }
+
+ evaluateCellZ(srcHostname, desHostname, type) {
+ decomposeHostname(srcHostname, decomposedSource);
+ this.type = type;
+ const bitOffset = typeBitOffsets[type];
+ for ( const srchn of decomposedSource ) {
+ this.z = srchn;
+ let v = this.rules.get(`${srchn} ${desHostname}`);
+ if ( v === undefined ) { continue; }
+ v = v >>> bitOffset & 3;
+ if ( v === 0 ) { continue; }
+ return (this.r = v);
+ }
+ // srcHostname is '*' at this point
+ this.r = 0;
+ return 0;
+ }
+
+ evaluateCellZY(srcHostname, desHostname, type) {
+ // Pathological cases.
+ if ( desHostname === '' ) {
+ this.r = 0;
+ return 0;
+ }
+
+ // Precedence: from most specific to least specific
+
+ // Specific-destination, any party, any type
+ decomposeHostname(desHostname, decomposedDestination);
+ for ( const deshn of decomposedDestination ) {
+ if ( deshn === '*' ) { break; }
+ this.y = deshn;
+ if ( this.evaluateCellZ(srcHostname, deshn, '*') !== 0 ) {
+ return this.r;
+ }
+ }
+
+ const thirdParty = is3rdParty(srcHostname, desHostname);
+
+ // Any destination
+ this.y = '*';
+
+ // Specific party
+ if ( thirdParty ) {
+ // 3rd-party, specific type
+ if ( type === 'script' ) {
+ if ( this.evaluateCellZ(srcHostname, '*', '3p-script') !== 0 ) {
+ return this.r;
+ }
+ } else if ( type === 'sub_frame' || type === 'object' ) {
+ if ( this.evaluateCellZ(srcHostname, '*', '3p-frame') !== 0 ) {
+ return this.r;
+ }
+ }
+ // 3rd-party, any type
+ if ( this.evaluateCellZ(srcHostname, '*', '3p') !== 0 ) {
+ return this.r;
+ }
+ } else if ( type === 'script' ) {
+ // 1st party, specific type
+ if ( this.evaluateCellZ(srcHostname, '*', '1p-script') !== 0 ) {
+ return this.r;
+ }
+ }
+
+ // Any destination, any party, specific type
+ if ( supportedDynamicTypes[type] !== undefined ) {
+ if ( this.evaluateCellZ(srcHostname, '*', type) !== 0 ) {
+ return this.r;
+ }
+ if ( type.startsWith('3p-') ) {
+ if ( this.evaluateCellZ(srcHostname, '*', '3p') !== 0 ) {
+ return this.r;
+ }
+ }
+ }
+
+ // Any destination, any party, any type
+ if ( this.evaluateCellZ(srcHostname, '*', '*') !== 0 ) {
+ return this.r;
+ }
+
+ this.type = '';
+ return 0;
+ }
+
+ mustAllowCellZY(srcHostname, desHostname, type) {
+ return this.evaluateCellZY(srcHostname, desHostname, type) === 2;
+ }
+
+ mustBlockOrAllow() {
+ return this.r === 1 || this.r === 2;
+ }
+
+ mustBlock() {
+ return this.r === 1;
+ }
+
+ mustAbort() {
+ return this.r === 3;
+ }
+
+ lookupRuleData(src, des, type) {
+ const r = this.evaluateCellZY(src, des, type);
+ if ( r === 0 ) { return; }
+ return `${this.z} ${this.y} ${this.type} ${r}`;
+ }
+
+ toLogData() {
+ if ( this.r === 0 || this.type === '' ) { return; }
+ return {
+ source: 'dynamicHost',
+ result: this.r,
+ raw: `${this.z} ${this.y} ${this.type} ${intToActionMap.get(this.r)}`
+ };
+ }
+
+ srcHostnameFromRule(rule) {
+ return rule.slice(0, rule.indexOf(' '));
+ }
+
+ desHostnameFromRule(rule) {
+ return rule.slice(rule.indexOf(' ') + 1);
+ }
+
+ toArray() {
+ const out = [];
+ for ( const key of this.rules.keys() ) {
+ const srchn = this.srcHostnameFromRule(key);
+ const deshn = this.desHostnameFromRule(key);
+ const srchnPretty = srchn.includes('xn--') && punycode
+ ? punycode.toUnicode(srchn)
+ : srchn;
+ const deshnPretty = deshn.includes('xn--') && punycode
+ ? punycode.toUnicode(deshn)
+ : deshn;
+ for ( const type in typeBitOffsets ) {
+ if ( typeBitOffsets[type] === undefined ) { continue; }
+ const val = this.evaluateCell(srchn, deshn, type);
+ if ( val === 0 ) { continue; }
+ const action = intToActionMap.get(val);
+ if ( action === undefined ) { continue; }
+ out.push(`${srchnPretty} ${deshnPretty} ${type} ${action}`);
+ }
+ }
+ return out;
+ }
+
+ toString() {
+ return this.toArray().join('\n');
+ }
+
+ fromString(text, append) {
+ const lineIter = new LineIterator(text);
+ if ( append !== true ) { this.reset(); }
+ while ( lineIter.eot() === false ) {
+ this.addFromRuleParts(lineIter.next().trim().split(/\s+/));
+ }
+ }
+
+ validateRuleParts(parts) {
+ if ( parts.length < 4 ) { return; }
+
+ // Ignore hostname-based switch rules
+ if ( parts[0].endsWith(':') ) { return; }
+
+ // Ignore URL-based rules
+ if ( parts[1].includes('/') ) { return; }
+
+ if ( typeBitOffsets[parts[2]] === undefined ) { return; }
+
+ if ( nameToActionMap[parts[3]] === undefined ) { return; }
+
+ // https://github.com/chrisaljoudi/uBlock/issues/840
+ // Discard invalid rules
+ if ( parts[1] !== '*' && parts[2] !== '*' ) { return; }
+
+ // Performance: avoid punycoding when only ASCII chars
+ if ( punycode !== undefined ) {
+ if ( reNotASCII.test(parts[0]) ) {
+ parts[0] = punycode.toASCII(parts[0]);
+ }
+ if ( reNotASCII.test(parts[1]) ) {
+ parts[1] = punycode.toASCII(parts[1]);
+ }
+ }
+
+ // https://github.com/chrisaljoudi/uBlock/issues/1082
+ // Discard rules with invalid hostnames
+ if (
+ (parts[0] !== '*' && reBadHostname.test(parts[0])) ||
+ (parts[1] !== '*' && reBadHostname.test(parts[1]))
+ ) {
+ return;
+ }
+
+ return parts;
+ }
+
+ addFromRuleParts(parts) {
+ if ( this.validateRuleParts(parts) !== undefined ) {
+ this.setCell(parts[0], parts[1], parts[2], nameToActionMap[parts[3]]);
+ return true;
+ }
+ return false;
+ }
+
+ removeFromRuleParts(parts) {
+ if ( this.validateRuleParts(parts) !== undefined ) {
+ this.setCell(parts[0], parts[1], parts[2], 0);
+ return true;
+ }
+ return false;
+ }
+
+ toSelfie() {
+ return {
+ magicId: this.magicId,
+ rules: Array.from(this.rules)
+ };
+ }
+
+ fromSelfie(selfie) {
+ if ( selfie.magicId !== this.magicId ) { return false; }
+ this.rules = new Map(selfie.rules);
+ this.changed = true;
+ return true;
+ }
+}
+
+DynamicHostRuleFiltering.prototype.magicId = 1;
+
+/******************************************************************************/
+
+export default DynamicHostRuleFiltering;
+
+/******************************************************************************/
diff --git a/src/js/epicker-ui.js b/src/js/epicker-ui.js
new file mode 100644
index 0000000..49fc116
--- /dev/null
+++ b/src/js/epicker-ui.js
@@ -0,0 +1,900 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* global CodeMirror */
+
+'use strict';
+
+import './codemirror/ubo-static-filtering.js';
+
+import { hostnameFromURI } from './uri-utils.js';
+import punycode from '../lib/punycode.js';
+import * as sfp from './static-filtering-parser.js';
+
+/******************************************************************************/
+/******************************************************************************/
+
+(( ) => {
+
+/******************************************************************************/
+
+if ( typeof vAPI !== 'object' ) { return; }
+
+const $id = id => document.getElementById(id);
+const $stor = selector => document.querySelector(selector);
+const $storAll = selector => document.querySelectorAll(selector);
+
+const pickerRoot = document.documentElement;
+const dialog = $stor('aside');
+let staticFilteringParser;
+
+const svgRoot = $stor('svg');
+const svgOcean = svgRoot.children[0];
+const svgIslands = svgRoot.children[1];
+const NoPaths = 'M0 0';
+
+const reCosmeticAnchor = /^#(\$|\?|\$\?)?#/;
+
+{
+ const url = new URL(self.location.href);
+ if ( url.searchParams.has('zap') ) {
+ pickerRoot.classList.add('zap');
+ }
+}
+
+const docURL = new URL(vAPI.getURL(''));
+
+let resultsetOpt;
+
+let netFilterCandidates = [];
+let cosmeticFilterCandidates = [];
+let computedCandidateSlot = 0;
+let computedCandidate = '';
+const computedSpecificityCandidates = new Map();
+let needBody = false;
+
+/******************************************************************************/
+
+const cmEditor = new CodeMirror(document.querySelector('.codeMirrorContainer'), {
+ autoCloseBrackets: true,
+ autofocus: true,
+ extraKeys: {
+ 'Ctrl-Space': 'autocomplete',
+ },
+ lineWrapping: true,
+ matchBrackets: true,
+ maxScanLines: 1,
+});
+
+vAPI.messaging.send('dashboard', {
+ what: 'getAutoCompleteDetails'
+}).then(hints => {
+ // For unknown reasons, `instanceof Object` does not work here in Firefox.
+ if ( hints instanceof Object === false ) { return; }
+ cmEditor.setOption('uboHints', hints);
+});
+
+/******************************************************************************/
+
+const rawFilterFromTextarea = function() {
+ const text = cmEditor.getValue();
+ const pos = text.indexOf('\n');
+ return pos === -1 ? text : text.slice(0, pos);
+};
+
+/******************************************************************************/
+
+const filterFromTextarea = function() {
+ const filter = rawFilterFromTextarea();
+ if ( filter === '' ) { return ''; }
+ const parser = staticFilteringParser;
+ parser.parse(filter);
+ if ( parser.isFilter() === false ) { return '!'; }
+ if ( parser.isExtendedFilter() ) {
+ if ( parser.isCosmeticFilter() === false ) { return '!'; }
+ } else if ( parser.isNetworkFilter() === false ) {
+ return '!';
+ }
+ return filter;
+};
+
+/******************************************************************************/
+
+const renderRange = function(id, value, invert = false) {
+ const input = $stor(`#${id} input`);
+ const max = parseInt(input.max, 10);
+ if ( typeof value !== 'number' ) {
+ value = parseInt(input.value, 10);
+ }
+ if ( invert ) {
+ value = max - value;
+ }
+ input.value = value;
+ const slider = $stor(`#${id} > span`);
+ const lside = slider.children[0];
+ const thumb = slider.children[1];
+ const sliderWidth = slider.offsetWidth;
+ const maxPercent = (sliderWidth - thumb.offsetWidth) / sliderWidth * 100;
+ const widthPercent = value / max * maxPercent;
+ lside.style.width = `${widthPercent}%`;
+};
+
+/******************************************************************************/
+
+const userFilterFromCandidate = function(filter) {
+ if ( filter === '' || filter === '!' ) { return; }
+
+ let hn = hostnameFromURI(docURL.href);
+ if ( hn.startsWith('xn--') ) {
+ hn = punycode.toUnicode(hn);
+ }
+
+ // Cosmetic filter?
+ if ( reCosmeticAnchor.test(filter) ) {
+ return hn + filter;
+ }
+
+ // Assume net filter
+ const opts = [];
+
+ // If no domain included in filter, we need domain option
+ if ( filter.startsWith('||') === false ) {
+ opts.push(`domain=${hn}`);
+ }
+
+ if ( resultsetOpt !== undefined ) {
+ opts.push(resultsetOpt);
+ }
+
+ if ( opts.length ) {
+ filter += '$' + opts.join(',');
+ }
+
+ return filter;
+};
+
+/******************************************************************************/
+
+const candidateFromFilterChoice = function(filterChoice) {
+ let { slot, filters } = filterChoice;
+ let filter = filters[slot];
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/47
+ for ( const elem of $storAll('#candidateFilters li') ) {
+ elem.classList.remove('active');
+ }
+
+ computedCandidateSlot = slot;
+ computedCandidate = '';
+
+ if ( filter === undefined ) { return ''; }
+
+ // For net filters there no such thing as a path
+ if ( filter.startsWith('##') === false ) {
+ $stor(`#netFilters li:nth-of-type(${slot+1})`)
+ .classList.add('active');
+ return filter;
+ }
+
+ // At this point, we have a cosmetic filter
+
+ $stor(`#cosmeticFilters li:nth-of-type(${slot+1})`)
+ .classList.add('active');
+
+ return cosmeticCandidatesFromFilterChoice(filterChoice);
+};
+
+/******************************************************************************/
+
+const cosmeticCandidatesFromFilterChoice = function(filterChoice) {
+ let { slot, filters } = filterChoice;
+
+ renderRange('resultsetDepth', slot, true);
+ renderRange('resultsetSpecificity');
+
+ if ( computedSpecificityCandidates.has(slot) ) {
+ onCandidatesOptimized({ slot });
+ return;
+ }
+
+ const specificities = [
+ 0b0000, // remove hierarchy; remove id, nth-of-type, attribute values
+ 0b0010, // remove hierarchy; remove id, nth-of-type
+ 0b0011, // remove hierarchy
+ 0b1000, // trim hierarchy; remove id, nth-of-type, attribute values
+ 0b1010, // trim hierarchy; remove id, nth-of-type
+ 0b1100, // remove id, nth-of-type, attribute values
+ 0b1110, // remove id, nth-of-type
+ 0b1111, // keep all = most specific
+ ];
+
+ const candidates = [];
+
+ let filter = filters[slot];
+
+ for ( const specificity of specificities ) {
+ // Return path: the target element, then all siblings prepended
+ const paths = [];
+ for ( let i = slot; i < filters.length; i++ ) {
+ filter = filters[i].slice(2);
+ // Remove id, nth-of-type
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/162
+ // Mind escaped periods: they do not denote a class identifier.
+ if ( (specificity & 0b0001) === 0 ) {
+ filter = filter.replace(/:nth-of-type\(\d+\)/, '');
+ if (
+ filter.charAt(0) === '#' && (
+ (specificity & 0b1000) === 0 || i === slot
+ )
+ ) {
+ const pos = filter.search(/[^\\]\./);
+ if ( pos !== -1 ) {
+ filter = filter.slice(pos + 1);
+ }
+ }
+ }
+ // Remove attribute values.
+ if ( (specificity & 0b0010) === 0 ) {
+ const match = /^\[([^^*$=]+)[\^*$]?=.+\]$/.exec(filter);
+ if ( match !== null ) {
+ filter = `[${match[1]}]`;
+ }
+ }
+ // Remove all classes when an id exists.
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/162
+ // Mind escaped periods: they do not denote a class identifier.
+ if ( filter.charAt(0) === '#' ) {
+ filter = filter.replace(/([^\\])\..+$/, '$1');
+ }
+ if ( paths.length !== 0 ) {
+ filter += ' > ';
+ }
+ paths.unshift(filter);
+ // Stop at any element with an id: these are unique in a web page
+ if ( (specificity & 0b1000) === 0 || filter.startsWith('#') ) {
+ break;
+ }
+ }
+
+ // Trim hierarchy: remove generic elements from path
+ if ( (specificity & 0b1100) === 0b1000 ) {
+ let i = 0;
+ while ( i < paths.length - 1 ) {
+ if ( /^[a-z0-9]+ > $/.test(paths[i+1]) ) {
+ if ( paths[i].endsWith(' > ') ) {
+ paths[i] = paths[i].slice(0, -2);
+ }
+ paths.splice(i + 1, 1);
+ } else {
+ i += 1;
+ }
+ }
+ }
+
+ if (
+ needBody &&
+ paths.length !== 0 &&
+ paths[0].startsWith('#') === false &&
+ paths[0].startsWith('body ') === false &&
+ (specificity & 0b1100) !== 0
+ ) {
+ paths.unshift('body > ');
+ }
+
+ candidates.push(paths);
+ }
+
+ pickerContentPort.postMessage({
+ what: 'optimizeCandidates',
+ candidates,
+ slot,
+ });
+};
+
+/******************************************************************************/
+
+const onCandidatesOptimized = function(details) {
+ $id('resultsetModifiers').classList.remove('hide');
+ const i = parseInt($stor('#resultsetSpecificity input').value, 10);
+ if ( Array.isArray(details.candidates) ) {
+ computedSpecificityCandidates.set(details.slot, details.candidates);
+ }
+ const candidates = computedSpecificityCandidates.get(details.slot);
+ computedCandidate = candidates[i];
+ cmEditor.setValue(computedCandidate);
+ cmEditor.clearHistory();
+ onCandidateChanged();
+};
+
+/******************************************************************************/
+
+const onSvgClicked = function(ev) {
+ // If zap mode, highlight element under mouse, this makes the zapper usable
+ // on touch screens.
+ if ( pickerRoot.classList.contains('zap') ) {
+ pickerContentPort.postMessage({
+ what: 'zapElementAtPoint',
+ mx: ev.clientX,
+ my: ev.clientY,
+ options: {
+ stay: ev.shiftKey || ev.type === 'touch',
+ highlight: ev.target !== svgIslands,
+ },
+ });
+ return;
+ }
+ // https://github.com/chrisaljoudi/uBlock/issues/810#issuecomment-74600694
+ // Unpause picker if:
+ // - click outside dialog AND
+ // - not in preview mode
+ if ( pickerRoot.classList.contains('paused') ) {
+ if ( pickerRoot.classList.contains('preview') === false ) {
+ unpausePicker();
+ }
+ return;
+ }
+ // Force dialog to always be visible when using a touch-driven device.
+ if ( ev.type === 'touch' ) {
+ pickerRoot.classList.add('show');
+ }
+ pickerContentPort.postMessage({
+ what: 'filterElementAtPoint',
+ mx: ev.clientX,
+ my: ev.clientY,
+ broad: ev.ctrlKey,
+ });
+};
+
+/*******************************************************************************
+
+ Swipe right:
+ If picker not paused: quit picker
+ If picker paused and dialog visible: hide dialog
+ If picker paused and dialog not visible: quit picker
+
+ Swipe left:
+ If picker paused and dialog not visible: show dialog
+
+*/
+
+const onSvgTouch = (( ) => {
+ let startX = 0, startY = 0;
+ let t0 = 0;
+ return ev => {
+ if ( ev.type === 'touchstart' ) {
+ startX = ev.touches[0].screenX;
+ startY = ev.touches[0].screenY;
+ t0 = ev.timeStamp;
+ return;
+ }
+ if ( startX === undefined ) { return; }
+ const stopX = ev.changedTouches[0].screenX;
+ const stopY = ev.changedTouches[0].screenY;
+ const angle = Math.abs(Math.atan2(stopY - startY, stopX - startX));
+ const distance = Math.sqrt(
+ Math.pow(stopX - startX, 2),
+ Math.pow(stopY - startY, 2)
+ );
+ // Interpret touch events as a tap if:
+ // - Swipe is not valid; and
+ // - The time between start and stop was less than 200ms.
+ const duration = ev.timeStamp - t0;
+ if ( distance < 32 && duration < 200 ) {
+ onSvgClicked({
+ type: 'touch',
+ target: ev.target,
+ clientX: ev.changedTouches[0].pageX,
+ clientY: ev.changedTouches[0].pageY,
+ });
+ ev.preventDefault();
+ return;
+ }
+ if ( distance < 64 ) { return; }
+ const angleUpperBound = Math.PI * 0.25 * 0.5;
+ const swipeRight = angle < angleUpperBound;
+ if ( swipeRight === false && angle < Math.PI - angleUpperBound ) {
+ return;
+ }
+ if ( ev.cancelable ) {
+ ev.preventDefault();
+ }
+ // Swipe left.
+ if ( swipeRight === false ) {
+ if ( pickerRoot.classList.contains('paused') ) {
+ pickerRoot.classList.remove('hide');
+ pickerRoot.classList.add('show');
+ }
+ return;
+ }
+ // Swipe right.
+ if (
+ pickerRoot.classList.contains('zap') &&
+ svgIslands.getAttribute('d') !== NoPaths
+ ) {
+ pickerContentPort.postMessage({
+ what: 'unhighlight'
+ });
+ return;
+ }
+ else if (
+ pickerRoot.classList.contains('paused') &&
+ pickerRoot.classList.contains('show')
+ ) {
+ pickerRoot.classList.remove('show');
+ pickerRoot.classList.add('hide');
+ return;
+ }
+ quitPicker();
+ };
+})();
+
+/******************************************************************************/
+
+const onCandidateChanged = function() {
+ const filter = filterFromTextarea();
+ const bad = filter === '!';
+ $stor('section').classList.toggle('invalidFilter', bad);
+ if ( bad ) {
+ $id('resultsetCount').textContent = 'E';
+ $id('create').setAttribute('disabled', '');
+ }
+ const text = rawFilterFromTextarea();
+ $id('resultsetModifiers').classList.toggle(
+ 'hide', text === '' || text !== computedCandidate
+ );
+ pickerContentPort.postMessage({
+ what: 'dialogSetFilter',
+ filter,
+ compiled: reCosmeticAnchor.test(filter)
+ ? staticFilteringParser.result.compiled
+ : undefined,
+ });
+};
+
+/******************************************************************************/
+
+const onPreviewClicked = function() {
+ const state = pickerRoot.classList.toggle('preview');
+ pickerContentPort.postMessage({
+ what: 'togglePreview',
+ state,
+ });
+};
+
+/******************************************************************************/
+
+const onCreateClicked = function() {
+ const candidate = filterFromTextarea();
+ const filter = userFilterFromCandidate(candidate);
+ if ( filter !== undefined ) {
+ vAPI.messaging.send('elementPicker', {
+ what: 'createUserFilter',
+ autoComment: true,
+ filters: filter,
+ docURL: docURL.href,
+ killCache: reCosmeticAnchor.test(candidate) === false,
+ });
+ }
+ pickerContentPort.postMessage({
+ what: 'dialogCreate',
+ filter: candidate,
+ compiled: reCosmeticAnchor.test(candidate)
+ ? staticFilteringParser.result.compiled
+ : undefined,
+ });
+};
+
+/******************************************************************************/
+
+const onPickClicked = function() {
+ unpausePicker();
+};
+
+/******************************************************************************/
+
+const onQuitClicked = function() {
+ quitPicker();
+};
+
+/******************************************************************************/
+
+const onDepthChanged = function() {
+ const input = $stor('#resultsetDepth input');
+ const max = parseInt(input.max, 10);
+ const value = parseInt(input.value, 10);
+ const text = candidateFromFilterChoice({
+ filters: cosmeticFilterCandidates,
+ slot: max - value,
+ });
+ if ( text === undefined ) { return; }
+ cmEditor.setValue(text);
+ cmEditor.clearHistory();
+ onCandidateChanged();
+};
+
+/******************************************************************************/
+
+const onSpecificityChanged = function() {
+ renderRange('resultsetSpecificity');
+ if ( rawFilterFromTextarea() !== computedCandidate ) { return; }
+ const depthInput = $stor('#resultsetDepth input');
+ const slot = parseInt(depthInput.max, 10) - parseInt(depthInput.value, 10);
+ const i = parseInt($stor('#resultsetSpecificity input').value, 10);
+ const candidates = computedSpecificityCandidates.get(slot);
+ computedCandidate = candidates[i];
+ cmEditor.setValue(computedCandidate);
+ cmEditor.clearHistory();
+ onCandidateChanged();
+};
+
+/******************************************************************************/
+
+const onCandidateClicked = function(ev) {
+ let li = ev.target.closest('li');
+ if ( li === null ) { return; }
+ const ul = li.closest('.changeFilter');
+ if ( ul === null ) { return; }
+ const choice = {
+ filters: Array.from(ul.querySelectorAll('li')).map(a => a.textContent),
+ slot: 0,
+ };
+ while ( li.previousElementSibling !== null ) {
+ li = li.previousElementSibling;
+ choice.slot += 1;
+ }
+ const text = candidateFromFilterChoice(choice);
+ if ( text === undefined ) { return; }
+ cmEditor.setValue(text);
+ cmEditor.clearHistory();
+ onCandidateChanged();
+};
+
+/******************************************************************************/
+
+const onKeyPressed = function(ev) {
+ // Delete
+ if (
+ (ev.key === 'Delete' || ev.key === 'Backspace') &&
+ pickerRoot.classList.contains('zap')
+ ) {
+ pickerContentPort.postMessage({
+ what: 'zapElementAtPoint',
+ options: { stay: true },
+ });
+ return;
+ }
+ // Esc
+ if ( ev.key === 'Escape' || ev.which === 27 ) {
+ onQuitClicked();
+ return;
+ }
+};
+
+/******************************************************************************/
+
+const onStartMoving = (( ) => {
+ let isTouch = false;
+ let mx0 = 0, my0 = 0;
+ let mx1 = 0, my1 = 0;
+ let r0 = 0, b0 = 0;
+ let rMax = 0, bMax = 0;
+ let timer;
+
+ const eatEvent = function(ev) {
+ ev.stopPropagation();
+ ev.preventDefault();
+ };
+
+ const move = ( ) => {
+ timer = undefined;
+ const r1 = Math.min(Math.max(r0 - mx1 + mx0, 2), rMax);
+ const b1 = Math.min(Math.max(b0 - my1 + my0, 2), bMax);
+ dialog.style.setProperty('right', `${r1}px`);
+ dialog.style.setProperty('bottom', `${b1}px`);
+ };
+
+ const moveAsync = ev => {
+ if ( timer !== undefined ) { return; }
+ if ( isTouch ) {
+ const touch = ev.touches[0];
+ mx1 = touch.pageX;
+ my1 = touch.pageY;
+ } else {
+ mx1 = ev.pageX;
+ my1 = ev.pageY;
+ }
+ timer = self.requestAnimationFrame(move);
+ };
+
+ const stop = ev => {
+ if ( dialog.classList.contains('moving') === false ) { return; }
+ dialog.classList.remove('moving');
+ if ( isTouch ) {
+ self.removeEventListener('touchmove', moveAsync, { capture: true });
+ } else {
+ self.removeEventListener('mousemove', moveAsync, { capture: true });
+ }
+ eatEvent(ev);
+ };
+
+ return function(ev) {
+ const target = dialog.querySelector('#move');
+ if ( ev.target !== target ) { return; }
+ if ( dialog.classList.contains('moving') ) { return; }
+ isTouch = ev.type.startsWith('touch');
+ if ( isTouch ) {
+ const touch = ev.touches[0];
+ mx0 = touch.pageX;
+ my0 = touch.pageY;
+ } else {
+ mx0 = ev.pageX;
+ my0 = ev.pageY;
+ }
+ const style = self.getComputedStyle(dialog);
+ r0 = parseInt(style.right, 10);
+ b0 = parseInt(style.bottom, 10);
+ const rect = dialog.getBoundingClientRect();
+ rMax = pickerRoot.clientWidth - 2 - rect.width ;
+ bMax = pickerRoot.clientHeight - 2 - rect.height;
+ dialog.classList.add('moving');
+ if ( isTouch ) {
+ self.addEventListener('touchmove', moveAsync, { capture: true });
+ self.addEventListener('touchend', stop, { capture: true, once: true });
+ } else {
+ self.addEventListener('mousemove', moveAsync, { capture: true });
+ self.addEventListener('mouseup', stop, { capture: true, once: true });
+ }
+ eatEvent(ev);
+ };
+})();
+
+/******************************************************************************/
+
+const svgListening = (( ) => {
+ let on = false;
+ let timer;
+ let mx = 0, my = 0;
+
+ const onTimer = ( ) => {
+ timer = undefined;
+ pickerContentPort.postMessage({
+ what: 'highlightElementAtPoint',
+ mx,
+ my,
+ });
+ };
+
+ const onHover = ev => {
+ mx = ev.clientX;
+ my = ev.clientY;
+ if ( timer === undefined ) {
+ timer = self.requestAnimationFrame(onTimer);
+ }
+ };
+
+ return state => {
+ if ( state === on ) { return; }
+ on = state;
+ if ( on ) {
+ document.addEventListener('mousemove', onHover, { passive: true });
+ return;
+ }
+ document.removeEventListener('mousemove', onHover, { passive: true });
+ if ( timer !== undefined ) {
+ self.cancelAnimationFrame(timer);
+ timer = undefined;
+ }
+ };
+})();
+
+/******************************************************************************/
+
+// Create lists of candidate filters. This takes into account whether the
+// current mode is narrow or broad.
+
+const populateCandidates = function(candidates, selector) {
+
+ const root = dialog.querySelector(selector);
+ const ul = root.querySelector('ul');
+ while ( ul.firstChild !== null ) {
+ ul.firstChild.remove();
+ }
+ for ( let i = 0; i < candidates.length; i++ ) {
+ const li = document.createElement('li');
+ li.textContent = candidates[i];
+ ul.appendChild(li);
+ }
+ if ( candidates.length !== 0 ) {
+ root.style.removeProperty('display');
+ } else {
+ root.style.setProperty('display', 'none');
+ }
+};
+
+/******************************************************************************/
+
+const showDialog = function(details) {
+ pausePicker();
+
+ const { netFilters, cosmeticFilters, filter } = details;
+
+ netFilterCandidates = netFilters;
+
+ needBody =
+ cosmeticFilters.length !== 0 &&
+ cosmeticFilters[cosmeticFilters.length - 1] === '##body';
+ if ( needBody ) {
+ cosmeticFilters.pop();
+ }
+ cosmeticFilterCandidates = cosmeticFilters;
+
+ docURL.href = details.url;
+
+ populateCandidates(netFilters, '#netFilters');
+ populateCandidates(cosmeticFilters, '#cosmeticFilters');
+ computedSpecificityCandidates.clear();
+
+ const depthInput = $stor('#resultsetDepth input');
+ depthInput.max = cosmeticFilters.length - 1;
+ depthInput.value = depthInput.max;
+
+ dialog.querySelector('ul').style.display =
+ netFilters.length || cosmeticFilters.length ? '' : 'none';
+ $id('create').setAttribute('disabled', '');
+
+ // Auto-select a candidate filter
+
+ // 2020-09-01:
+ // In Firefox, `details instanceof Object` resolves to `false` despite
+ // `details` being a valid object. Consequently, falling back to use
+ // `typeof details`.
+ // This is an issue which surfaced when the element picker code was
+ // revisited to isolate the picker dialog DOM from the page DOM.
+ if ( typeof filter !== 'object' || filter === null ) {
+ cmEditor.setValue('');
+ return;
+ }
+
+ const filterChoice = {
+ filters: filter.filters,
+ slot: filter.slot,
+ };
+
+ const text = candidateFromFilterChoice(filterChoice);
+ if ( text === undefined ) { return; }
+ cmEditor.setValue(text);
+ onCandidateChanged();
+};
+
+/******************************************************************************/
+
+const pausePicker = function() {
+ pickerRoot.classList.add('paused');
+ svgListening(false);
+};
+
+/******************************************************************************/
+
+const unpausePicker = function() {
+ pickerRoot.classList.remove('paused', 'preview');
+ pickerContentPort.postMessage({
+ what: 'togglePreview',
+ state: false,
+ });
+ svgListening(true);
+};
+
+/******************************************************************************/
+
+const startPicker = function() {
+ self.addEventListener('keydown', onKeyPressed, true);
+ const svg = $stor('svg');
+ svg.addEventListener('click', onSvgClicked);
+ svg.addEventListener('touchstart', onSvgTouch);
+ svg.addEventListener('touchend', onSvgTouch);
+
+ unpausePicker();
+
+ if ( pickerRoot.classList.contains('zap') ) { return; }
+
+ cmEditor.on('changes', onCandidateChanged);
+
+ $id('preview').addEventListener('click', onPreviewClicked);
+ $id('create').addEventListener('click', onCreateClicked);
+ $id('pick').addEventListener('click', onPickClicked);
+ $id('quit').addEventListener('click', onQuitClicked);
+ $id('move').addEventListener('mousedown', onStartMoving);
+ $id('move').addEventListener('touchstart', onStartMoving);
+ $id('candidateFilters').addEventListener('click', onCandidateClicked);
+ $stor('#resultsetDepth input').addEventListener('input', onDepthChanged);
+ $stor('#resultsetSpecificity input').addEventListener('input', onSpecificityChanged);
+ staticFilteringParser = new sfp.AstFilterParser({
+ interactive: true,
+ nativeCssHas: vAPI.webextFlavor.env.includes('native_css_has'),
+ });
+};
+
+/******************************************************************************/
+
+const quitPicker = function() {
+ pickerContentPort.postMessage({ what: 'quitPicker' });
+ pickerContentPort.close();
+ pickerContentPort = undefined;
+};
+
+/******************************************************************************/
+
+const onPickerMessage = function(msg) {
+ switch ( msg.what ) {
+ case 'candidatesOptimized':
+ onCandidatesOptimized(msg);
+ break;
+ case 'showDialog':
+ showDialog(msg);
+ break;
+ case 'resultsetDetails': {
+ resultsetOpt = msg.opt;
+ $id('resultsetCount').textContent = msg.count;
+ if ( msg.count !== 0 ) {
+ $id('create').removeAttribute('disabled');
+ } else {
+ $id('create').setAttribute('disabled', '');
+ }
+ break;
+ }
+ case 'svgPaths': {
+ let { ocean, islands } = msg;
+ ocean += islands;
+ svgOcean.setAttribute('d', ocean);
+ svgIslands.setAttribute('d', islands || NoPaths);
+ break;
+ }
+ default:
+ break;
+ }
+};
+
+/******************************************************************************/
+
+// Wait for the content script to establish communication
+
+let pickerContentPort;
+
+globalThis.addEventListener('message', ev => {
+ const msg = ev.data || {};
+ if ( msg.what !== 'epickerStart' ) { return; }
+ if ( Array.isArray(ev.ports) === false ) { return; }
+ if ( ev.ports.length === 0 ) { return; }
+ pickerContentPort = ev.ports[0];
+ pickerContentPort.onmessage = ev => {
+ const msg = ev.data || {};
+ onPickerMessage(msg);
+ };
+ pickerContentPort.onmessageerror = ( ) => {
+ quitPicker();
+ };
+ startPicker();
+ pickerContentPort.postMessage({ what: 'start' });
+}, { once: true });
+
+/******************************************************************************/
+
+})();
diff --git a/src/js/fa-icons.js b/src/js/fa-icons.js
new file mode 100644
index 0000000..79968d0
--- /dev/null
+++ b/src/js/fa-icons.js
@@ -0,0 +1,129 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2018-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uMatrix
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+export const faIconsInit = (( ) => {
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1196
+ const svgIcons = new Map([
+ // See /img/fontawesome/fontawesome-defs.svg
+ [ 'angle-up', { viewBox: '0 0 998 582', path: 'm 998,499 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 499,179 106,572 Q 96,582 83,582 70,582 60,572 L 10,522 Q 0,512 0,499 0,486 10,476 L 476,10 q 10,-10 23,-10 13,0 23,10 l 466,466 q 10,10 10,23 z' } ],
+ [ 'arrow-right', { viewBox: '0 0 1472 1558', path: 'm 1472,779 q 0,54 -37,91 l -651,651 q -39,37 -91,37 -51,0 -90,-37 l -75,-75 q -38,-38 -38,-91 0,-53 38,-91 L 821,971 H 117 Q 65,971 32.5,933.5 0,896 0,843 V 715 Q 0,662 32.5,624.5 65,587 117,587 H 821 L 528,293 q -38,-36 -38,-90 0,-54 38,-90 l 75,-75 q 38,-38 90,-38 53,0 91,38 l 651,651 q 37,35 37,90 z' } ],
+ [ 'bar-chart', { viewBox: '0 0 2048 1536', path: 'm 640,768 0,512 -256,0 0,-512 256,0 z m 384,-512 0,1024 -256,0 0,-1024 256,0 z m 1024,1152 0,128 L 0,1536 0,0 l 128,0 0,1408 1920,0 z m -640,-896 0,768 -256,0 0,-768 256,0 z m 384,-384 0,1152 -256,0 0,-1152 256,0 z' } ],
+ [ 'bolt', { viewBox: '0 0 896 1664', path: 'm 885.08696,438 q 18,20 7,44 l -540,1157 q -13,25 -42,25 -4,0 -14,-2 -17,-5 -25.5,-19 -8.5,-14 -4.5,-30 l 197,-808 -406,101 q -4,1 -12,1 -18,0 -31,-11 Q -3.9130435,881 1.0869565,857 L 202.08696,32 q 4,-14 16,-23 12,-9 28,-9 l 328,0 q 19,0 32,12.5 13,12.5 13,29.5 0,8 -5,18 l -171,463 396,-98 q 8,-2 12,-2 19,0 34,15 z' } ],
+ [ 'clipboard', { viewBox: '0 0 1792 1792', path: 'm 768,1664 896,0 0,-640 -416,0 q -40,0 -68,-28 -28,-28 -28,-68 l 0,-416 -384,0 0,1152 z m 256,-1440 0,-64 q 0,-13 -9.5,-22.5 Q 1005,128 992,128 l -704,0 q -13,0 -22.5,9.5 Q 256,147 256,160 l 0,64 q 0,13 9.5,22.5 9.5,9.5 22.5,9.5 l 704,0 q 13,0 22.5,-9.5 9.5,-9.5 9.5,-22.5 z m 256,672 299,0 -299,-299 0,299 z m 512,128 0,672 q 0,40 -28,68 -28,28 -68,28 l -960,0 q -40,0 -68,-28 -28,-28 -28,-68 l 0,-160 -544,0 Q 56,1536 28,1508 0,1480 0,1440 L 0,96 Q 0,56 28,28 56,0 96,0 l 1088,0 q 40,0 68,28 28,28 28,68 l 0,328 q 21,13 36,28 l 408,408 q 28,28 48,76 20,48 20,88 z' } ],
+ [ 'clock-o', { viewBox: '0 0 1536 1536', path: 'm 896,416 v 448 q 0,14 -9,23 -9,9 -23,9 H 544 q -14,0 -23,-9 -9,-9 -9,-23 v -64 q 0,-14 9,-23 9,-9 23,-9 H 768 V 416 q 0,-14 9,-23 9,-9 23,-9 h 64 q 14,0 23,9 9,9 9,23 z m 416,352 q 0,-148 -73,-273 -73,-125 -198,-198 -125,-73 -273,-73 -148,0 -273,73 -125,73 -198,198 -73,125 -73,273 0,148 73,273 73,125 198,198 125,73 273,73 148,0 273,-73 125,-73 198,-198 73,-125 73,-273 z m 224,0 q 0,209 -103,385.5 Q 1330,1330 1153.5,1433 977,1536 768,1536 559,1536 382.5,1433 206,1330 103,1153.5 0,977 0,768 0,559 103,382.5 206,206 382.5,103 559,0 768,0 977,0 1153.5,103 1330,206 1433,382.5 1536,559 1536,768 Z' } ],
+ [ 'cloud-download', { viewBox: '0 0 1920 1408', path: 'm 1280,800 q 0,-14 -9,-23 -9,-9 -23,-9 l -224,0 0,-352 q 0,-13 -9.5,-22.5 Q 1005,384 992,384 l -192,0 q -13,0 -22.5,9.5 Q 768,403 768,416 l 0,352 -224,0 q -13,0 -22.5,9.5 -9.5,9.5 -9.5,22.5 0,14 9,23 l 352,352 q 9,9 23,9 14,0 23,-9 l 351,-351 q 10,-12 10,-24 z m 640,224 q 0,159 -112.5,271.5 Q 1695,1408 1536,1408 l -1088,0 Q 263,1408 131.5,1276.5 0,1145 0,960 0,830 70,720 140,610 258,555 256,525 256,512 256,300 406,150 556,0 768,0 q 156,0 285.5,87 129.5,87 188.5,231 71,-62 166,-62 106,0 181,75 75,75 75,181 0,76 -41,138 130,31 213.5,135.5 Q 1920,890 1920,1024 Z' } ],
+ [ 'cloud-upload', { viewBox: '0 0 1920 1408', path: 'm 1280,736 q 0,-14 -9,-23 L 919,361 q -9,-9 -23,-9 -14,0 -23,9 L 522,712 q -10,12 -10,24 0,14 9,23 9,9 23,9 l 224,0 0,352 q 0,13 9.5,22.5 9.5,9.5 22.5,9.5 l 192,0 q 13,0 22.5,-9.5 9.5,-9.5 9.5,-22.5 l 0,-352 224,0 q 13,0 22.5,-9.5 9.5,-9.5 9.5,-22.5 z m 640,288 q 0,159 -112.5,271.5 Q 1695,1408 1536,1408 l -1088,0 Q 263,1408 131.5,1276.5 0,1145 0,960 0,830 70,720 140,610 258,555 256,525 256,512 256,300 406,150 556,0 768,0 q 156,0 285.5,87 129.5,87 188.5,231 71,-62 166,-62 106,0 181,75 75,75 75,181 0,76 -41,138 130,31 213.5,135.5 Q 1920,890 1920,1024 Z' } ],
+ [ 'check', { viewBox: '0 0 1550 1188', path: 'm 1550,232 q 0,40 -28,68 l -724,724 -136,136 q -28,28 -68,28 -40,0 -68,-28 L 390,1024 28,662 Q 0,634 0,594 0,554 28,526 L 164,390 q 28,-28 68,-28 40,0 68,28 L 594,685 1250,28 q 28,-28 68,-28 40,0 68,28 l 136,136 q 28,28 28,68 z' } ],
+ [ 'code', { viewBox: '0 0 1830 1373', path: 'm 572,1125.5 -50,50 q -10,10 -23,10 -13,0 -23,-10 l -466,-466 q -10,-10 -10,-23 0,-13 10,-23 l 466,-466 q 10,-10 23,-10 13,0 23,10 l 50,50 q 10,10 10,23 0,13 -10,23 l -393,393 393,393 q 10,10 10,23 0,13 -10,23 z M 1163,58.476203 790,1349.4762 q -4,13 -15.5,19.5 -11.5,6.5 -23.5,2.5 l -62,-17 q -13,-4 -19.5,-15.5 -6.5,-11.5 -2.5,-24.5 L 1040,23.5 q 4,-13 15.5,-19.5 11.5,-6.5 23.5,-2.5 l 62,17 q 13,4 19.5,15.5 6.5,11.5 2.5,24.5 z m 657,651 -466,466 q -10,10 -23,10 -13,0 -23,-10 l -50,-50 q -10,-10 -10,-23 0,-13 10,-23 l 393,-393 -393,-393 q -10,-10 -10,-23 0,-13 10,-23 l 50,-50 q 10,-10 23,-10 13,0 23,10 l 466,466 q 10,10 10,23 0,13 -10,23 z' } ],
+ [ 'cog', { viewBox: '0 0 1536 1536', path: 'm 1024,768 q 0,-106 -75,-181 -75,-75 -181,-75 -106,0 -181,75 -75,75 -75,181 0,106 75,181 75,75 181,75 106,0 181,-75 75,-75 75,-181 z m 512,-109 0,222 q 0,12 -8,23 -8,11 -20,13 l -185,28 q -19,54 -39,91 35,50 107,138 10,12 10,25 0,13 -9,23 -27,37 -99,108 -72,71 -94,71 -12,0 -26,-9 l -138,-108 q -44,23 -91,38 -16,136 -29,186 -7,28 -36,28 l -222,0 q -14,0 -24.5,-8.5 Q 622,1519 621,1506 l -28,-184 q -49,-16 -90,-37 l -141,107 q -10,9 -25,9 -14,0 -25,-11 -126,-114 -165,-168 -7,-10 -7,-23 0,-12 8,-23 15,-21 51,-66.5 36,-45.5 54,-70.5 -27,-50 -41,-99 L 29,913 Q 16,911 8,900.5 0,890 0,877 L 0,655 q 0,-12 8,-23 8,-11 19,-13 l 186,-28 q 14,-46 39,-92 -40,-57 -107,-138 -10,-12 -10,-24 0,-10 9,-23 26,-36 98.5,-107.5 Q 315,135 337,135 q 13,0 26,10 L 501,252 Q 545,229 592,214 608,78 621,28 628,0 657,0 L 879,0 Q 893,0 903.5,8.5 914,17 915,30 l 28,184 q 49,16 90,37 l 142,-107 q 9,-9 24,-9 13,0 25,10 129,119 165,170 7,8 7,22 0,12 -8,23 -15,21 -51,66.5 -36,45.5 -54,70.5 26,50 41,98 l 183,28 q 13,2 21,12.5 8,10.5 8,23.5 z' } ],
+ [ 'cogs', { viewBox: '0 0 1920 1761', path: 'm 896,880 q 0,-106 -75,-181 -75,-75 -181,-75 -106,0 -181,75 -75,75 -75,181 0,106 75,181 75,75 181,75 106,0 181,-75 75,-75 75,-181 z m 768,512 q 0,-52 -38,-90 -38,-38 -90,-38 -52,0 -90,38 -38,38 -38,90 0,53 37.5,90.5 37.5,37.5 90.5,37.5 53,0 90.5,-37.5 37.5,-37.5 37.5,-90.5 z m 0,-1024 q 0,-52 -38,-90 -38,-38 -90,-38 -52,0 -90,38 -38,38 -38,90 0,53 37.5,90.5 37.5,37.5 90.5,37.5 53,0 90.5,-37.5 Q 1664,421 1664,368 Z m -384,421 v 185 q 0,10 -7,19.5 -7,9.5 -16,10.5 l -155,24 q -11,35 -32,76 34,48 90,115 7,11 7,20 0,12 -7,19 -23,30 -82.5,89.5 -59.5,59.5 -78.5,59.5 -11,0 -21,-7 l -115,-90 q -37,19 -77,31 -11,108 -23,155 -7,24 -30,24 H 547 q -11,0 -20,-7.5 -9,-7.5 -10,-17.5 l -23,-153 q -34,-10 -75,-31 l -118,89 q -7,7 -20,7 -11,0 -21,-8 -144,-133 -144,-160 0,-9 7,-19 10,-14 41,-53 31,-39 47,-61 -23,-44 -35,-82 L 24,1000 Q 14,999 7,990.5 0,982 0,971 V 786 Q 0,776 7,766.5 14,757 23,756 l 155,-24 q 11,-35 32,-76 -34,-48 -90,-115 -7,-11 -7,-20 0,-12 7,-20 22,-30 82,-89 60,-59 79,-59 11,0 21,7 l 115,90 q 34,-18 77,-32 11,-108 23,-154 7,-24 30,-24 h 186 q 11,0 20,7.5 9,7.5 10,17.5 l 23,153 q 34,10 75,31 l 118,-89 q 8,-7 20,-7 11,0 21,8 144,133 144,160 0,8 -7,19 -12,16 -42,54 -30,38 -45,60 23,48 34,82 l 152,23 q 10,2 17,10.5 7,8.5 7,19.5 z m 640,533 v 140 q 0,16 -149,31 -12,27 -30,52 51,113 51,138 0,4 -4,7 -122,71 -124,71 -8,0 -46,-47 -38,-47 -52,-68 -20,2 -30,2 -10,0 -30,-2 -14,21 -52,68 -38,47 -46,47 -2,0 -124,-71 -4,-3 -4,-7 0,-25 51,-138 -18,-25 -30,-52 -149,-15 -149,-31 v -140 q 0,-16 149,-31 13,-29 30,-52 -51,-113 -51,-138 0,-4 4,-7 4,-2 35,-20 31,-18 59,-34 28,-16 30,-16 8,0 46,46.5 38,46.5 52,67.5 20,-2 30,-2 10,0 30,2 51,-71 92,-112 l 6,-2 q 4,0 124,70 4,3 4,7 0,25 -51,138 17,23 30,52 149,15 149,31 z m 0,-1024 v 140 q 0,16 -149,31 -12,27 -30,52 51,113 51,138 0,4 -4,7 -122,71 -124,71 -8,0 -46,-47 -38,-47 -52,-68 -20,2 -30,2 -10,0 -30,-2 -14,21 -52,68 -38,47 -46,47 -2,0 -124,-71 -4,-3 -4,-7 0,-25 51,-138 -18,-25 -30,-52 -149,-15 -149,-31 V 298 q 0,-16 149,-31 13,-29 30,-52 -51,-113 -51,-138 0,-4 4,-7 4,-2 35,-20 31,-18 59,-34 28,-16 30,-16 8,0 46,46.5 38,46.5 52,67.5 20,-2 30,-2 10,0 30,2 51,-71 92,-112 l 6,-2 q 4,0 124,70 4,3 4,7 0,25 -51,138 17,23 30,52 149,15 149,31 z' } ],
+ [ 'comment-alt', { viewBox: '0 0 1792 1536', path: 'M 896,128 Q 692,128 514.5,197.5 337,267 232.5,385 128,503 128,640 128,752 199.5,853.5 271,955 401,1029 l 87,50 -27,96 q -24,91 -70,172 152,-63 275,-171 l 43,-38 57,6 q 69,8 130,8 204,0 381.5,-69.5 Q 1455,1013 1559.5,895 1664,777 1664,640 1664,503 1559.5,385 1455,267 1277.5,197.5 1100,128 896,128 Z m 896,512 q 0,174 -120,321.5 -120,147.5 -326,233 -206,85.5 -450,85.5 -70,0 -145,-8 -198,175 -460,242 -49,14 -114,22 h -5 q -15,0 -27,-10.5 -12,-10.5 -16,-27.5 v -1 q -3,-4 -0.5,-12 2.5,-8 2,-10 -0.5,-2 4.5,-9.5 l 6,-9 q 0,0 7,-8.5 7,-8.5 8,-9 7,-8 31,-34.5 24,-26.5 34.5,-38 10.5,-11.5 31,-39.5 20.5,-28 32.5,-51 12,-23 27,-59 15,-36 26,-76 Q 181,1052 90.5,921 0,790 0,640 0,466 120,318.5 240,171 446,85.5 652,0 896,0 q 244,0 450,85.5 206,85.5 326,233 120,147.5 120,321.5 z' } ],
+ [ 'double-angle-left', { viewBox: '0 0 966 998', path: 'm 582,915 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 10,522 Q 0,512 0,499 0,486 10,476 L 476,10 q 10,-10 23,-10 13,0 23,10 l 50,50 q 10,10 10,23 0,13 -10,23 L 179,499 572,892 q 10,10 10,23 z m 384,0 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 394,522 q -10,-10 -10,-23 0,-13 10,-23 L 860,10 q 10,-10 23,-10 13,0 23,10 l 50,50 q 10,10 10,23 0,13 -10,23 L 563,499 956,892 q 10,10 10,23 z' } ],
+ [ 'double-angle-up', { viewBox: '0 0 998 966', path: 'm 998,883 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 499,563 106,956 Q 96,966 83,966 70,966 60,956 L 10,906 Q 0,896 0,883 0,870 10,860 L 476,394 q 10,-10 23,-10 13,0 23,10 l 466,466 q 10,10 10,23 z m 0,-384 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 499,179 106,572 Q 96,582 83,582 70,582 60,572 L 10,522 Q 0,512 0,499 0,486 10,476 L 476,10 q 10,-10 23,-10 13,0 23,10 l 466,466 q 10,10 10,23 z' } ],
+ [ 'download-alt', { viewBox: '0 0 1664 1536', path: 'm 1280,1344 q 0,-26 -19,-45 -19,-19 -45,-19 -26,0 -45,19 -19,19 -19,45 0,26 19,45 19,19 45,19 26,0 45,-19 19,-19 19,-45 z m 256,0 q 0,-26 -19,-45 -19,-19 -45,-19 -26,0 -45,19 -19,19 -19,45 0,26 19,45 19,19 45,19 26,0 45,-19 19,-19 19,-45 z m 128,-224 v 320 q 0,40 -28,68 -28,28 -68,28 H 96 q -40,0 -68,-28 -28,-28 -28,-68 v -320 q 0,-40 28,-68 28,-28 68,-28 h 465 l 135,136 q 58,56 136,56 78,0 136,-56 l 136,-136 h 464 q 40,0 68,28 28,28 28,68 z M 1339,551 q 17,41 -14,70 l -448,448 q -18,19 -45,19 -27,0 -45,-19 L 339,621 q -31,-29 -14,-70 17,-39 59,-39 H 640 V 64 Q 640,38 659,19 678,0 704,0 h 256 q 26,0 45,19 19,19 19,45 v 448 h 256 q 42,0 59,39 z' } ],
+ [ 'eraser', { viewBox: '0 0 1920 1280', path: 'M 896,1152 1232,768 l -768,0 -336,384 768,0 z M 1909,75 q 15,34 9.5,71.5 Q 1913,184 1888,212 L 992,1236 q -38,44 -96,44 l -768,0 q -38,0 -69.5,-20.5 -31.5,-20.5 -47.5,-54.5 -15,-34 -9.5,-71.5 5.5,-37.5 30.5,-65.5 L 928,44 Q 966,0 1024,0 l 768,0 q 38,0 69.5,20.5 Q 1893,41 1909,75 Z' } ],
+ [ 'exclamation-triangle', { viewBox: '0 0 1794 1664', path: 'm 1025.0139,1375 0,-190 q 0,-14 -9.5,-23.5 -9.5,-9.5 -22.5,-9.5 l -192,0 q -13,0 -22.5,9.5 -9.5,9.5 -9.5,23.5 l 0,190 q 0,14 9.5,23.5 9.5,9.5 22.5,9.5 l 192,0 q 13,0 22.5,-9.5 9.5,-9.5 9.5,-23.5 z m -2,-374 18,-459 q 0,-12 -10,-19 -13,-11 -24,-11 l -220,0 q -11,0 -24,11 -10,7 -10,21 l 17,457 q 0,10 10,16.5 10,6.5 24,6.5 l 185,0 q 14,0 23.5,-6.5 9.5,-6.5 10.5,-16.5 z m -14,-934 768,1408 q 35,63 -2,126 -17,29 -46.5,46 -29.5,17 -63.5,17 l -1536,0 q -34,0 -63.5,-17 -29.5,-17 -46.5,-46 -37,-63 -2,-126 L 785.01389,67 q 17,-31 47,-49 30,-18 65,-18 35,0 65,18 30,18 47,49 z' } ],
+ [ 'external-link', { viewBox: '0 0 1792 1536', path: 'm 1408,928 0,320 q 0,119 -84.5,203.5 Q 1239,1536 1120,1536 l -832,0 Q 169,1536 84.5,1451.5 0,1367 0,1248 L 0,416 Q 0,297 84.5,212.5 169,128 288,128 l 704,0 q 14,0 23,9 9,9 9,23 l 0,64 q 0,14 -9,23 -9,9 -23,9 l -704,0 q -66,0 -113,47 -47,47 -47,113 l 0,832 q 0,66 47,113 47,47 113,47 l 832,0 q 66,0 113,-47 47,-47 47,-113 l 0,-320 q 0,-14 9,-23 9,-9 23,-9 l 64,0 q 14,0 23,9 9,9 9,23 z m 384,-864 0,512 q 0,26 -19,45 -19,19 -45,19 -26,0 -45,-19 L 1507,445 855,1097 q -10,10 -23,10 -13,0 -23,-10 L 695,983 q -10,-10 -10,-23 0,-13 10,-23 L 1347,285 1171,109 q -19,-19 -19,-45 0,-26 19,-45 19,-19 45,-19 l 512,0 q 26,0 45,19 19,19 19,45 z' } ],
+ [ 'eye-dropper', { viewBox: '0 0 1792 1792', path: 'm 1698,94 q 94,94 94,226.5 0,132.5 -94,225.5 l -225,223 104,104 q 10,10 10,23 0,13 -10,23 l -210,210 q -10,10 -23,10 -13,0 -23,-10 l -105,-105 -603,603 q -37,37 -90,37 l -203,0 -256,128 -64,-64 128,-256 0,-203 q 0,-53 37,-90 L 768,576 663,471 q -10,-10 -10,-23 0,-13 10,-23 L 873,215 q 10,-10 23,-10 13,0 23,10 L 1023,319 1246,94 Q 1339,0 1471.5,0 1604,0 1698,94 Z M 512,1472 1088,896 896,704 l -576,576 0,192 192,0 z' } ],
+ [ 'eye-open', { viewBox: '0 0 1792 1152', path: 'm 1664,576 q -152,-236 -381,-353 61,104 61,225 0,185 -131.5,316.5 Q 1081,896 896,896 711,896 579.5,764.5 448,633 448,448 448,327 509,223 280,340 128,576 261,781 461.5,902.5 662,1024 896,1024 1130,1024 1330.5,902.5 1531,781 1664,576 Z M 944,192 q 0,-20 -14,-34 -14,-14 -34,-14 -125,0 -214.5,89.5 Q 592,323 592,448 q 0,20 14,34 14,14 34,14 20,0 34,-14 14,-14 14,-34 0,-86 61,-147 61,-61 147,-61 20,0 34,-14 14,-14 14,-34 z m 848,384 q 0,34 -20,69 -140,230 -376.5,368.5 Q 1159,1152 896,1152 633,1152 396.5,1013 160,874 20,645 0,610 0,576 0,542 20,507 160,278 396.5,139 633,0 896,0 q 263,0 499.5,139 236.5,139 376.5,368 20,35 20,69 z' } ],
+ [ 'eye-slash', { viewBox: '0 0 1792 1344', path: 'M 555,1047 633,906 Q 546,843 497,747 448,651 448,544 448,423 509,319 280,436 128,672 295,930 555,1047 Z M 944,288 q 0,-20 -14,-34 -14,-14 -34,-14 -125,0 -214.5,89.5 Q 592,419 592,544 q 0,20 14,34 14,14 34,14 20,0 34,-14 14,-14 14,-34 0,-86 61,-147 61,-61 147,-61 20,0 34,-14 14,-14 14,-34 z M 1307,97 q 0,7 -1,9 -106,189 -316,567 -210,378 -315,566 l -49,89 q -10,16 -28,16 -12,0 -134,-70 -16,-10 -16,-28 0,-12 44,-87 Q 349,1094 228.5,986 108,878 20,741 0,710 0,672 0,634 20,603 173,368 400,232 627,96 896,96 q 89,0 180,17 l 54,-97 q 10,-16 28,-16 5,0 18,6 13,6 31,15.5 18,9.5 33,18.5 15,9 31.5,18.5 16.5,9.5 19.5,11.5 16,10 16,27 z m 37,447 q 0,139 -79,253.5 Q 1186,912 1056,962 l 280,-502 q 8,45 8,84 z m 448,128 q 0,35 -20,69 -39,64 -109,145 -150,172 -347.5,267 -197.5,95 -419.5,95 l 74,-132 Q 1182,1098 1362.5,979 1543,860 1664,672 1549,493 1382,378 l 63,-112 q 95,64 182.5,153 87.5,89 144.5,184 20,34 20,69 z' } ],
+ [ 'files-o', { viewBox: '0 0 1792 1792', path: 'm 1696,384 q 40,0 68,28 28,28 28,68 l 0,1216 q 0,40 -28,68 -28,28 -68,28 l -960,0 q -40,0 -68,-28 -28,-28 -28,-68 l 0,-288 -544,0 Q 56,1408 28,1380 0,1352 0,1312 L 0,640 Q 0,600 20,552 40,504 68,476 L 476,68 Q 504,40 552,20 600,0 640,0 l 416,0 q 40,0 68,28 28,28 28,68 l 0,328 q 68,-40 128,-40 l 416,0 z m -544,213 -299,299 299,0 0,-299 z M 512,213 213,512 l 299,0 0,-299 z m 196,647 316,-316 0,-416 -384,0 0,416 q 0,40 -28,68 -28,28 -68,28 l -416,0 0,640 512,0 0,-256 q 0,-40 20,-88 20,-48 48,-76 z m 956,804 0,-1152 -384,0 0,416 q 0,40 -28,68 -28,28 -68,28 l -416,0 0,640 896,0 z' } ],
+ [ 'film', { viewBox: '0 0 1920 1664', path: 'm 384,1472 0,-128 q 0,-26 -19,-45 -19,-19 -45,-19 l -128,0 q -26,0 -45,19 -19,19 -19,45 l 0,128 q 0,26 19,45 19,19 45,19 l 128,0 q 26,0 45,-19 19,-19 19,-45 z m 0,-384 0,-128 q 0,-26 -19,-45 -19,-19 -45,-19 l -128,0 q -26,0 -45,19 -19,19 -19,45 l 0,128 q 0,26 19,45 19,19 45,19 l 128,0 q 26,0 45,-19 19,-19 19,-45 z m 0,-384 0,-128 q 0,-26 -19,-45 -19,-19 -45,-19 l -128,0 q -26,0 -45,19 -19,19 -19,45 l 0,128 q 0,26 19,45 19,19 45,19 l 128,0 q 26,0 45,-19 19,-19 19,-45 z m 1024,768 0,-512 q 0,-26 -19,-45 -19,-19 -45,-19 l -768,0 q -26,0 -45,19 -19,19 -19,45 l 0,512 q 0,26 19,45 19,19 45,19 l 768,0 q 26,0 45,-19 19,-19 19,-45 z M 384,320 384,192 q 0,-26 -19,-45 -19,-19 -45,-19 l -128,0 q -26,0 -45,19 -19,19 -19,45 l 0,128 q 0,26 19,45 19,19 45,19 l 128,0 q 26,0 45,-19 19,-19 19,-45 z m 1408,1152 0,-128 q 0,-26 -19,-45 -19,-19 -45,-19 l -128,0 q -26,0 -45,19 -19,19 -19,45 l 0,128 q 0,26 19,45 19,19 45,19 l 128,0 q 26,0 45,-19 19,-19 19,-45 z m -384,-768 0,-512 q 0,-26 -19,-45 -19,-19 -45,-19 l -768,0 q -26,0 -45,19 -19,19 -19,45 l 0,512 q 0,26 19,45 19,19 45,19 l 768,0 q 26,0 45,-19 19,-19 19,-45 z m 384,384 0,-128 q 0,-26 -19,-45 -19,-19 -45,-19 l -128,0 q -26,0 -45,19 -19,19 -19,45 l 0,128 q 0,26 19,45 19,19 45,19 l 128,0 q 26,0 45,-19 19,-19 19,-45 z m 0,-384 0,-128 q 0,-26 -19,-45 -19,-19 -45,-19 l -128,0 q -26,0 -45,19 -19,19 -19,45 l 0,128 q 0,26 19,45 19,19 45,19 l 128,0 q 26,0 45,-19 19,-19 19,-45 z m 0,-384 0,-128 q 0,-26 -19,-45 -19,-19 -45,-19 l -128,0 q -26,0 -45,19 -19,19 -19,45 l 0,128 q 0,26 19,45 19,19 45,19 l 128,0 q 26,0 45,-19 19,-19 19,-45 z m 128,-160 0,1344 q 0,66 -47,113 -47,47 -113,47 l -1600,0 Q 94,1664 47,1617 0,1570 0,1504 L 0,160 Q 0,94 47,47 94,0 160,0 l 1600,0 q 66,0 113,47 47,47 47,113 z' } ],
+ [ 'filter', { viewBox: '0 0 1410 1408', path: 'm 1404.0208,39 q 17,41 -14,70 l -493,493 0,742 q 0,42 -39,59 -13,5 -25,5 -27,0 -45,-19 l -256,-256 q -19,-19 -19,-45 l 0,-486 L 20.020833,109 q -31,-29 -14,-70 Q 23.020833,0 65.020833,0 L 1345.0208,0 q 42,0 59,39 z' } ],
+ [ 'floppy-o', { viewBox: '0 0 1536 1536', path: 'm 384,1408 768,0 0,-384 -768,0 0,384 z m 896,0 128,0 0,-896 q 0,-14 -10,-38.5 Q 1388,449 1378,439 L 1097,158 q -10,-10 -34,-20 -24,-10 -39,-10 l 0,416 q 0,40 -28,68 -28,28 -68,28 l -576,0 q -40,0 -68,-28 -28,-28 -28,-68 l 0,-416 -128,0 0,1280 128,0 0,-416 q 0,-40 28,-68 28,-28 68,-28 l 832,0 q 40,0 68,28 28,28 28,68 l 0,416 z M 896,480 896,160 q 0,-13 -9.5,-22.5 Q 877,128 864,128 l -192,0 q -13,0 -22.5,9.5 Q 640,147 640,160 l 0,320 q 0,13 9.5,22.5 9.5,9.5 22.5,9.5 l 192,0 q 13,0 22.5,-9.5 Q 896,493 896,480 Z m 640,32 0,928 q 0,40 -28,68 -28,28 -68,28 L 96,1536 Q 56,1536 28,1508 0,1480 0,1440 L 0,96 Q 0,56 28,28 56,0 96,0 l 928,0 q 40,0 88,20 48,20 76,48 l 280,280 q 28,28 48,76 20,48 20,88 z' } ],
+ [ 'font', { viewBox: '0 0 1664 1536', path: 'M 725,431 555,881 q 33,0 136.5,2 103.5,2 160.5,2 19,0 57,-2 Q 822,630 725,431 Z M 0,1536 2,1457 q 23,-7 56,-12.5 33,-5.5 57,-10.5 24,-5 49.5,-14.5 25.5,-9.5 44.5,-29 19,-19.5 31,-50.5 L 477,724 757,0 l 75,0 53,0 q 8,14 11,21 l 205,480 q 33,78 106,257.5 73,179.5 114,274.5 15,34 58,144.5 43,110.5 72,168.5 20,45 35,57 19,15 88,29.5 69,14.5 84,20.5 6,38 6,57 0,5 -0.5,13.5 -0.5,8.5 -0.5,12.5 -63,0 -190,-8 -127,-8 -191,-8 -76,0 -215,7 -139,7 -178,8 0,-43 4,-78 l 131,-28 q 1,0 12.5,-2.5 11.5,-2.5 15.5,-3.5 4,-1 14.5,-4.5 10.5,-3.5 15,-6.5 4.5,-3 11,-8 6.5,-5 9,-11 2.5,-6 2.5,-14 0,-16 -31,-96.5 -31,-80.5 -72,-177.5 -41,-97 -42,-100 l -450,-2 q -26,58 -76.5,195.5 Q 382,1336 382,1361 q 0,22 14,37.5 14,15.5 43.5,24.5 29.5,9 48.5,13.5 19,4.5 57,8.5 38,4 41,4 1,19 1,58 0,9 -2,27 -58,0 -174.5,-10 -116.5,-10 -174.5,-10 -8,0 -26.5,4 -18.5,4 -21.5,4 -80,14 -188,14 z' } ],
+ [ 'home', { viewBox: '0 0 1612 1283', path: 'm 1382.1111,739 v 480 q 0,26 -19,45 -19,19 -45,19 H 934.11111 V 899 h -256 v 384 h -384 q -26,0 -45,-19 -19,-19 -19,-45 V 739 q 0,-1 0.5,-3 0.5,-2 0.5,-3 l 575,-474 574.99999,474 q 1,2 1,6 z m 223,-69 -62,74 q -8,9 -21,11 h -3 q -13,0 -21,-7 l -691.99999,-577 -692,577 q -12,8 -23.999999,7 -13,-2 -21,-11 L 7.1111111,670 Q -0.88888889,660 0.11111111,646.5 1.1111111,633 11.111111,625 L 730.11111,26 q 32,-26 76,-26 44,0 76,26 L 1126.1111,230 V 35 q 0,-14 9,-23 9,-9 23,-9 h 192 q 14,0 23,9 9,9 9,23 v 408 l 219,182 q 10,8 11,21.5 1,13.5 -7,23.5 z' } ],
+ [ 'info-circle', { viewBox: '0 0 1536 1536', path: 'm 1024,1248 0,-160 q 0,-14 -9,-23 -9,-9 -23,-9 l -96,0 0,-512 q 0,-14 -9,-23 -9,-9 -23,-9 l -320,0 q -14,0 -23,9 -9,9 -9,23 l 0,160 q 0,14 9,23 9,9 23,9 l 96,0 0,320 -96,0 q -14,0 -23,9 -9,9 -9,23 l 0,160 q 0,14 9,23 9,9 23,9 l 448,0 q 14,0 23,-9 9,-9 9,-23 z M 896,352 896,192 q 0,-14 -9,-23 -9,-9 -23,-9 l -192,0 q -14,0 -23,9 -9,9 -9,23 l 0,160 q 0,14 9,23 9,9 23,9 l 192,0 q 14,0 23,-9 9,-9 9,-23 z m 640,416 q 0,209 -103,385.5 Q 1330,1330 1153.5,1433 977,1536 768,1536 559,1536 382.5,1433 206,1330 103,1153.5 0,977 0,768 0,559 103,382.5 206,206 382.5,103 559,0 768,0 977,0 1153.5,103 1330,206 1433,382.5 1536,559 1536,768 Z' } ],
+ [ 'list-alt', { viewBox: '0 0 1792 1408', path: 'm 384,1056 0,64 q 0,13 -9.5,22.5 -9.5,9.5 -22.5,9.5 l -64,0 q -13,0 -22.5,-9.5 Q 256,1133 256,1120 l 0,-64 q 0,-13 9.5,-22.5 9.5,-9.5 22.5,-9.5 l 64,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 0,-256 0,64 q 0,13 -9.5,22.5 Q 365,896 352,896 l -64,0 q -13,0 -22.5,-9.5 Q 256,877 256,864 l 0,-64 q 0,-13 9.5,-22.5 Q 275,768 288,768 l 64,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 0,-256 0,64 q 0,13 -9.5,22.5 Q 365,640 352,640 l -64,0 q -13,0 -22.5,-9.5 Q 256,621 256,608 l 0,-64 q 0,-13 9.5,-22.5 Q 275,512 288,512 l 64,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 1152,512 0,64 q 0,13 -9.5,22.5 -9.5,9.5 -22.5,9.5 l -960,0 q -13,0 -22.5,-9.5 Q 512,1133 512,1120 l 0,-64 q 0,-13 9.5,-22.5 9.5,-9.5 22.5,-9.5 l 960,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 0,-256 0,64 q 0,13 -9.5,22.5 -9.5,9.5 -22.5,9.5 l -960,0 q -13,0 -22.5,-9.5 Q 512,877 512,864 l 0,-64 q 0,-13 9.5,-22.5 Q 531,768 544,768 l 960,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 0,-256 0,64 q 0,13 -9.5,22.5 -9.5,9.5 -22.5,9.5 l -960,0 q -13,0 -22.5,-9.5 Q 512,621 512,608 l 0,-64 q 0,-13 9.5,-22.5 Q 531,512 544,512 l 960,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 128,704 0,-832 q 0,-13 -9.5,-22.5 Q 1645,384 1632,384 l -1472,0 q -13,0 -22.5,9.5 Q 128,403 128,416 l 0,832 q 0,13 9.5,22.5 9.5,9.5 22.5,9.5 l 1472,0 q 13,0 22.5,-9.5 9.5,-9.5 9.5,-22.5 z m 128,-1088 0,1088 q 0,66 -47,113 -47,47 -113,47 l -1472,0 Q 94,1408 47,1361 0,1314 0,1248 L 0,160 Q 0,94 47,47 94,0 160,0 l 1472,0 q 66,0 113,47 47,47 47,113 z' } ],
+ [ 'lock', { viewBox: '0 0 1152 1408', path: 'm 320,640 512,0 0,-192 q 0,-106 -75,-181 -75,-75 -181,-75 -106,0 -181,75 -75,75 -75,181 l 0,192 z m 832,96 0,576 q 0,40 -28,68 -28,28 -68,28 l -960,0 Q 56,1408 28,1380 0,1352 0,1312 L 0,736 q 0,-40 28,-68 28,-28 68,-28 l 32,0 0,-192 Q 128,264 260,132 392,0 576,0 q 184,0 316,132 132,132 132,316 l 0,192 32,0 q 40,0 68,28 28,28 28,68 z' } ],
+ [ 'magic', { viewBox: '0 0 1637 1637', path: 'M 1163,581 1456,288 1349,181 1056,474 Z m 447,-293 q 0,27 -18,45 L 306,1619 q -18,18 -45,18 -27,0 -45,-18 L 18,1421 Q 0,1403 0,1376 0,1349 18,1331 L 1304,45 q 18,-18 45,-18 27,0 45,18 l 198,198 q 18,18 18,45 z M 259,98 l 98,30 -98,30 -30,98 -30,-98 -98,-30 98,-30 30,-98 z M 609,260 805,320 609,380 549,576 489,380 293,320 489,260 549,64 Z m 930,478 98,30 -98,30 -30,98 -30,-98 -98,-30 98,-30 30,-98 z M 899,98 l 98,30 -98,30 -30,98 -30,-98 -98,-30 98,-30 30,-98 z' } ],
+ [ 'pause-circle-o', { viewBox: '0 0 1536 1536', path: 'M 768,0 Q 977,0 1153.5,103 1330,206 1433,382.5 1536,559 1536,768 1536,977 1433,1153.5 1330,1330 1153.5,1433 977,1536 768,1536 559,1536 382.5,1433 206,1330 103,1153.5 0,977 0,768 0,559 103,382.5 206,206 382.5,103 559,0 768,0 Z m 0,1312 q 148,0 273,-73 125,-73 198,-198 73,-125 73,-273 0,-148 -73,-273 -73,-125 -198,-198 -125,-73 -273,-73 -148,0 -273,73 -125,73 -198,198 -73,125 -73,273 0,148 73,273 73,125 198,198 125,73 273,73 z m 96,-224 q -14,0 -23,-9 -9,-9 -9,-23 l 0,-576 q 0,-14 9,-23 9,-9 23,-9 l 192,0 q 14,0 23,9 9,9 9,23 l 0,576 q 0,14 -9,23 -9,9 -23,9 l -192,0 z m -384,0 q -14,0 -23,-9 -9,-9 -9,-23 l 0,-576 q 0,-14 9,-23 9,-9 23,-9 l 192,0 q 14,0 23,9 9,9 9,23 l 0,576 q 0,14 -9,23 -9,9 -23,9 l -192,0 z' } ],
+ [ 'play-circle-o', { viewBox: '0 0 1536 1536', path: 'm 1184,768 q 0,37 -32,55 l -544,320 q -15,9 -32,9 -16,0 -32,-8 -32,-19 -32,-56 l 0,-640 q 0,-37 32,-56 33,-18 64,1 l 544,320 q 32,18 32,55 z m 128,0 q 0,-148 -73,-273 -73,-125 -198,-198 -125,-73 -273,-73 -148,0 -273,73 -125,73 -198,198 -73,125 -73,273 0,148 73,273 73,125 198,198 125,73 273,73 148,0 273,-73 125,-73 198,-198 73,-125 73,-273 z m 224,0 q 0,209 -103,385.5 Q 1330,1330 1153.5,1433 977,1536 768,1536 559,1536 382.5,1433 206,1330 103,1153.5 0,977 0,768 0,559 103,382.5 206,206 382.5,103 559,0 768,0 977,0 1153.5,103 1330,206 1433,382.5 1536,559 1536,768 Z' } ],
+ [ 'plus', { viewBox: '0 0 1408 1408', path: 'm 1408,608 0,192 q 0,40 -28,68 -28,28 -68,28 l -416,0 0,416 q 0,40 -28,68 -28,28 -68,28 l -192,0 q -40,0 -68,-28 -28,-28 -28,-68 l 0,-416 -416,0 Q 56,896 28,868 0,840 0,800 L 0,608 q 0,-40 28,-68 28,-28 68,-28 l 416,0 0,-416 Q 512,56 540,28 568,0 608,0 l 192,0 q 40,0 68,28 28,28 28,68 l 0,416 416,0 q 40,0 68,28 28,28 28,68 z' } ],
+ [ 'power-off', { viewBox: '0 0 1536 1664', path: 'm 1536,896 q 0,156 -61,298 -61,142 -164,245 -103,103 -245,164 -142,61 -298,61 -156,0 -298,-61 Q 328,1542 225,1439 122,1336 61,1194 0,1052 0,896 0,714 80.5,553 161,392 307,283 q 43,-32 95.5,-25 52.5,7 83.5,50 32,42 24.5,94.5 Q 503,455 461,487 363,561 309.5,668 256,775 256,896 q 0,104 40.5,198.5 40.5,94.5 109.5,163.5 69,69 163.5,109.5 94.5,40.5 198.5,40.5 104,0 198.5,-40.5 Q 1061,1327 1130,1258 1199,1189 1239.5,1094.5 1280,1000 1280,896 1280,775 1226.5,668 1173,561 1075,487 1033,455 1025.5,402.5 1018,350 1050,308 q 31,-43 84,-50 53,-7 95,25 146,109 226.5,270 80.5,161 80.5,343 z m -640,-768 0,640 q 0,52 -38,90 -38,38 -90,38 -52,0 -90,-38 -38,-38 -38,-90 l 0,-640 q 0,-52 38,-90 38,-38 90,-38 52,0 90,38 38,38 38,90 z' } ],
+ [ 'question-circle', { viewBox: '0 0 1536 1536', path: 'm 896,1248 v -192 q 0,-14 -9,-23 -9,-9 -23,-9 H 672 q -14,0 -23,9 -9,9 -9,23 v 192 q 0,14 9,23 9,9 23,9 h 192 q 14,0 23,-9 9,-9 9,-23 z m 256,-672 q 0,-88 -55.5,-163 Q 1041,338 958,297 875,256 788,256 q -243,0 -371,213 -15,24 8,42 l 132,100 q 7,6 19,6 16,0 25,-12 53,-68 86,-92 34,-24 86,-24 48,0 85.5,26 37.5,26 37.5,59 0,38 -20,61 -20,23 -68,45 -63,28 -115.5,86.5 Q 640,825 640,892 v 36 q 0,14 9,23 9,9 23,9 h 192 q 14,0 23,-9 9,-9 9,-23 0,-19 21.5,-49.5 Q 939,848 972,829 q 32,-18 49,-28.5 17,-10.5 46,-35 29,-24.5 44.5,-48 15.5,-23.5 28,-60.5 12.5,-37 12.5,-81 z m 384,192 q 0,209 -103,385.5 Q 1330,1330 1153.5,1433 977,1536 768,1536 559,1536 382.5,1433 206,1330 103,1153.5 0,977 0,768 0,559 103,382.5 206,206 382.5,103 559,0 768,0 977,0 1153.5,103 1330,206 1433,382.5 1536,559 1536,768 Z' } ],
+ [ 'refresh', { viewBox: '0 0 1536 1536', path: 'm 1511,928 q 0,5 -1,7 -64,268 -268,434.5 Q 1038,1536 764,1536 618,1536 481.5,1481 345,1426 238,1324 l -129,129 q -19,19 -45,19 -26,0 -45,-19 Q 0,1434 0,1408 L 0,960 q 0,-26 19,-45 19,-19 45,-19 l 448,0 q 26,0 45,19 19,19 19,45 0,26 -19,45 l -137,137 q 71,66 161,102 90,36 187,36 134,0 250,-65 116,-65 186,-179 11,-17 53,-117 8,-23 30,-23 l 192,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 25,-800 0,448 q 0,26 -19,45 -19,19 -45,19 l -448,0 q -26,0 -45,-19 -19,-19 -19,-45 0,-26 19,-45 L 1117,393 Q 969,256 768,256 q -134,0 -250,65 -116,65 -186,179 -11,17 -53,117 -8,23 -30,23 L 50,640 Q 37,640 27.5,630.5 18,621 18,608 l 0,-7 Q 83,333 288,166.5 493,0 768,0 914,0 1052,55.5 1190,111 1297,212 L 1427,83 q 19,-19 45,-19 26,0 45,19 19,19 19,45 z' } ],
+ [ 'save', { viewBox: '0 0 1536 1536', path: 'm 384,1408 h 768 V 1024 H 384 Z m 896,0 h 128 V 512 q 0,-14 -10,-38.5 Q 1388,449 1378,439 L 1097,158 q -10,-10 -34,-20 -24,-10 -39,-10 v 416 q 0,40 -28,68 -28,28 -68,28 H 352 q -40,0 -68,-28 -28,-28 -28,-68 V 128 H 128 V 1408 H 256 V 992 q 0,-40 28,-68 28,-28 68,-28 h 832 q 40,0 68,28 28,28 28,68 z M 896,480 V 160 q 0,-13 -9.5,-22.5 Q 877,128 864,128 H 672 q -13,0 -22.5,9.5 Q 640,147 640,160 v 320 q 0,13 9.5,22.5 9.5,9.5 22.5,9.5 h 192 q 13,0 22.5,-9.5 Q 896,493 896,480 Z m 640,32 v 928 q 0,40 -28,68 -28,28 -68,28 H 96 Q 56,1536 28,1508 0,1480 0,1440 V 96 Q 0,56 28,28 56,0 96,0 h 928 q 40,0 88,20 48,20 76,48 l 280,280 q 28,28 48,76 20,48 20,88 z' } ],
+ [ 'search', { viewBox: '0 0 1664 1664', path: 'M 1152,704 Q 1152,519 1020.5,387.5 889,256 704,256 519,256 387.5,387.5 256,519 256,704 256,889 387.5,1020.5 519,1152 704,1152 889,1152 1020.5,1020.5 1152,889 1152,704 Z m 512,832 q 0,52 -38,90 -38,38 -90,38 -54,0 -90,-38 L 1103,1284 Q 924,1408 704,1408 561,1408 430.5,1352.5 300,1297 205.5,1202.5 111,1108 55.5,977.5 0,847 0,704 0,561 55.5,430.5 111,300 205.5,205.5 300,111 430.5,55.5 561,0 704,0 q 143,0 273.5,55.5 130.5,55.5 225,150 94.5,94.5 150,225 55.5,130.5 55.5,273.5 0,220 -124,399 l 343,343 q 37,37 37,90 z' } ],
+ [ 'sliders', { viewBox: '0 0 1536 1408', path: 'm 352,1152 0,128 -352,0 0,-128 352,0 z m 352,-128 q 26,0 45,19 19,19 19,45 l 0,256 q 0,26 -19,45 -19,19 -45,19 l -256,0 q -26,0 -45,-19 -19,-19 -19,-45 l 0,-256 q 0,-26 19,-45 19,-19 45,-19 l 256,0 z m 160,-384 0,128 -864,0 0,-128 864,0 z m -640,-512 0,128 -224,0 0,-128 224,0 z m 1312,1024 0,128 -736,0 0,-128 736,0 z M 576,0 q 26,0 45,19 19,19 19,45 l 0,256 q 0,26 -19,45 -19,19 -45,19 l -256,0 q -26,0 -45,-19 -19,-19 -19,-45 L 256,64 Q 256,38 275,19 294,0 320,0 l 256,0 z m 640,512 q 26,0 45,19 19,19 19,45 l 0,256 q 0,26 -19,45 -19,19 -45,19 l -256,0 q -26,0 -45,-19 -19,-19 -19,-45 l 0,-256 q 0,-26 19,-45 19,-19 45,-19 l 256,0 z m 320,128 0,128 -224,0 0,-128 224,0 z m 0,-512 0,128 -864,0 0,-128 864,0 z' } ],
+ [ 'spinner', { viewBox: '0 0 1664 1728', path: 'm 462,1394 q 0,53 -37.5,90.5 -37.5,37.5 -90.5,37.5 -52,0 -90,-38 -38,-38 -38,-90 0,-53 37.5,-90.5 37.5,-37.5 90.5,-37.5 53,0 90.5,37.5 37.5,37.5 37.5,90.5 z m 498,206 q 0,53 -37.5,90.5 Q 885,1728 832,1728 779,1728 741.5,1690.5 704,1653 704,1600 q 0,-53 37.5,-90.5 37.5,-37.5 90.5,-37.5 53,0 90.5,37.5 Q 960,1547 960,1600 Z M 256,896 q 0,53 -37.5,90.5 Q 181,1024 128,1024 75,1024 37.5,986.5 0,949 0,896 0,843 37.5,805.5 75,768 128,768 q 53,0 90.5,37.5 Q 256,843 256,896 Z m 1202,498 q 0,52 -38,90 -38,38 -90,38 -53,0 -90.5,-37.5 -37.5,-37.5 -37.5,-90.5 0,-53 37.5,-90.5 37.5,-37.5 90.5,-37.5 53,0 90.5,37.5 37.5,37.5 37.5,90.5 z M 494,398 q 0,66 -47,113 -47,47 -113,47 -66,0 -113,-47 -47,-47 -47,-113 0,-66 47,-113 47,-47 113,-47 66,0 113,47 47,47 47,113 z m 1170,498 q 0,53 -37.5,90.5 -37.5,37.5 -90.5,37.5 -53,0 -90.5,-37.5 Q 1408,949 1408,896 q 0,-53 37.5,-90.5 37.5,-37.5 90.5,-37.5 53,0 90.5,37.5 Q 1664,843 1664,896 Z M 1024,192 q 0,80 -56,136 -56,56 -136,56 -80,0 -136,-56 -56,-56 -56,-136 0,-80 56,-136 56,-56 136,-56 80,0 136,56 56,56 56,136 z m 530,206 q 0,93 -66,158.5 -66,65.5 -158,65.5 -93,0 -158.5,-65.5 Q 1106,491 1106,398 q 0,-92 65.5,-158 65.5,-66 158.5,-66 92,0 158,66 66,66 66,158 z' } ],
+ [ 'sun', { viewBox: '0 0 1708 1792', path: 'm 1706,1172.5 c -3,10 -11,17 -20,20 l -292,96 v 306 c 0,10 -5,20 -13,26 -9,6 -19,8 -29,4 l -292,-94 -180,248 c -6,8 -16,13 -26,13 -10,0 -20,-5 -26,-13 l -180,-248 -292,94 c -10,4 -20,2 -29,-4 -8,-6 -13,-16 -13,-26 v -306 l -292,-96 c -9,-3 -17,-10 -20,-20 -3,-10 -2,-21 4,-29 l 180,-248 -180,-248 c -6,-9 -7,-19 -4,-29 3,-10 11,-17 20,-20 l 292,-96 v -306 c 0,-10 5,-20 13,-26 9,-6 19,-8 29,-4 l 292,94 180,-248 c 12,-16 40,-16 52,0 L 1060,260.5 l 292,-94 c 10,-4 20,-2 29,4 8,6 13,16 13,26 v 306 l 292,96 c 9,3 17,10 20,20 3,10 2,20 -4,29 l -180,248 180,248 c 6,8 7,19 4,29 z' } ],
+ [ 'sun-o', { viewBox: '0 0 1708 1792', path: 'm 1430,895.5 c 0,-318 -258,-576 -576,-576 -318,0 -576,258 -576,576 0,318 258,576 576,576 C 1172,1471.5 1430,1213.5 1430,895.5 Z m 276,277 c -3,10 -11,17 -20,20 l -292,96 v 306 c 0,10 -5,20 -13,26 -9,6 -19,8 -29,4 l -292,-94 -180,248 c -6,8 -16,13 -26,13 -10,0 -20,-5 -26,-13 l -180,-248 -292,94 c -10,4 -20,2 -29,-4 -8,-6 -13,-16 -13,-26 v -306 l -292,-96 c -9,-3 -17,-10 -20,-20 -3,-10 -2,-21 4,-29 l 180,-248 -180,-248 c -6,-9 -7,-19 -4,-29 3,-10 11,-17 20,-20 l 292,-96 v -306 c 0,-10 5,-20 13,-26 9,-6 19,-8 29,-4 l 292,94 180,-248 c 12,-16 40,-16 52,0 L 1060,260.5 l 292,-94 c 10,-4 20,-2 29,4 8,6 13,16 13,26 v 306 l 292,96 c 9,3 17,10 20,20 3,10 2,20 -4,29 l -180,248 180,248 c 6,8 7,19 4,29 z' } ],
+ [ 'times', { viewBox: '0 0 1188 1188', path: 'm 1188,956 q 0,40 -28,68 l -136,136 q -28,28 -68,28 -40,0 -68,-28 L 594,866 300,1160 q -28,28 -68,28 -40,0 -68,-28 L 28,1024 Q 0,996 0,956 0,916 28,888 L 322,594 28,300 Q 0,272 0,232 0,192 28,164 L 164,28 Q 192,0 232,0 272,0 300,28 L 594,322 888,28 q 28,-28 68,-28 40,0 68,28 l 136,136 q 28,28 28,68 0,40 -28,68 l -294,294 294,294 q 28,28 28,68 z' } ],
+ [ 'trash-o', { viewBox: '0 0 1408 1536', path: 'm 512,608 v 576 q 0,14 -9,23 -9,9 -23,9 h -64 q -14,0 -23,-9 -9,-9 -9,-23 V 608 q 0,-14 9,-23 9,-9 23,-9 h 64 q 14,0 23,9 9,9 9,23 z m 256,0 v 576 q 0,14 -9,23 -9,9 -23,9 h -64 q -14,0 -23,-9 -9,-9 -9,-23 V 608 q 0,-14 9,-23 9,-9 23,-9 h 64 q 14,0 23,9 9,9 9,23 z m 256,0 v 576 q 0,14 -9,23 -9,9 -23,9 h -64 q -14,0 -23,-9 -9,-9 -9,-23 V 608 q 0,-14 9,-23 9,-9 23,-9 h 64 q 14,0 23,9 9,9 9,23 z m 128,724 V 384 H 256 v 948 q 0,22 7,40.5 7,18.5 14.5,27 7.5,8.5 10.5,8.5 h 832 q 3,0 10.5,-8.5 7.5,-8.5 14.5,-27 7,-18.5 7,-40.5 z M 480,256 H 928 L 880,139 q -7,-9 -17,-11 H 546 q -10,2 -17,11 z m 928,32 v 64 q 0,14 -9,23 -9,9 -23,9 h -96 v 948 q 0,83 -47,143.5 -47,60.5 -113,60.5 H 288 q -66,0 -113,-58.5 Q 128,1419 128,1336 V 384 H 32 Q 18,384 9,375 0,366 0,352 v -64 q 0,-14 9,-23 9,-9 23,-9 H 341 L 411,89 Q 426,52 465,26 504,0 544,0 h 320 q 40,0 79,26 39,26 54,63 l 70,167 h 309 q 14,0 23,9 9,9 9,23 z' } ],
+ [ 'undo', { viewBox: '0 0 1536 1536', path: 'm 1536,768 q 0,156 -61,298 -61,142 -164,245 -103,103 -245,164 -142,61 -298,61 -172,0 -327,-72.5 Q 286,1391 177,1259 q -7,-10 -6.5,-22.5 0.5,-12.5 8.5,-20.5 l 137,-138 q 10,-9 25,-9 16,2 23,12 73,95 179,147 106,52 225,52 104,0 198.5,-40.5 Q 1061,1199 1130,1130 1199,1061 1239.5,966.5 1280,872 1280,768 1280,664 1239.5,569.5 1199,475 1130,406 1061,337 966.5,296.5 872,256 768,256 670,256 580,291.5 490,327 420,393 l 137,138 q 31,30 14,69 -17,40 -59,40 H 64 Q 38,640 19,621 0,602 0,576 V 128 Q 0,86 40,69 79,52 109,83 L 239,212 Q 346,111 483.5,55.5 621,0 768,0 q 156,0 298,61 142,61 245,164 103,103 164,245 61,142 61,298 z' } ],
+ [ 'unlink', { viewBox: '0 0 1664 1664', path: 'm 439,1271 -256,256 q -11,9 -23,9 -12,0 -23,-9 -9,-10 -9,-23 0,-13 9,-23 l 256,-256 q 10,-9 23,-9 13,0 23,9 9,10 9,23 0,13 -9,23 z m 169,41 v 320 q 0,14 -9,23 -9,9 -23,9 -14,0 -23,-9 -9,-9 -9,-23 v -320 q 0,-14 9,-23 9,-9 23,-9 14,0 23,9 9,9 9,23 z M 384,1088 q 0,14 -9,23 -9,9 -23,9 H 32 q -14,0 -23,-9 -9,-9 -9,-23 0,-14 9,-23 9,-9 23,-9 h 320 q 14,0 23,9 9,9 9,23 z m 1264,128 q 0,120 -85,203 l -147,146 q -83,83 -203,83 -121,0 -204,-85 L 675,1228 q -21,-21 -42,-56 l 239,-18 273,274 q 27,27 68,27.5 41,0.5 68,-26.5 l 147,-146 q 28,-28 28,-67 0,-40 -28,-68 l -274,-275 18,-239 q 35,21 56,42 l 336,336 q 84,86 84,204 z M 1031,492 792,510 519,236 q -28,-28 -68,-28 -39,0 -68,27 L 236,381 q -28,28 -28,67 0,40 28,68 l 274,274 -18,240 q -35,-21 -56,-42 L 100,652 Q 16,566 16,448 16,328 101,245 L 248,99 q 83,-83 203,-83 121,0 204,85 l 334,335 q 21,21 42,56 z m 633,84 q 0,14 -9,23 -9,9 -23,9 h -320 q -14,0 -23,-9 -9,-9 -9,-23 0,-14 9,-23 9,-9 23,-9 h 320 q 14,0 23,9 9,9 9,23 z M 1120,32 v 320 q 0,14 -9,23 -9,9 -23,9 -14,0 -23,-9 -9,-9 -9,-23 V 32 q 0,-14 9,-23 9,-9 23,-9 14,0 23,9 9,9 9,23 z m 407,151 -256,256 q -11,9 -23,9 -12,0 -23,-9 -9,-10 -9,-23 0,-13 9,-23 l 256,-256 q 10,-9 23,-9 13,0 23,9 9,10 9,23 0,13 -9,23 z' } ],
+ [ 'unlock-alt', { viewBox: '0 0 1152 1536', path: 'm 1056,768 q 40,0 68,28 28,28 28,68 v 576 q 0,40 -28,68 -28,28 -68,28 H 96 Q 56,1536 28,1508 0,1480 0,1440 V 864 q 0,-40 28,-68 28,-28 68,-28 h 32 V 448 Q 128,263 259.5,131.5 391,0 576,0 761,0 892.5,131.5 1024,263 1024,448 q 0,26 -19,45 -19,19 -45,19 h -64 q -26,0 -45,-19 -19,-19 -19,-45 0,-106 -75,-181 -75,-75 -181,-75 -106,0 -181,75 -75,75 -75,181 v 320 z' } ],
+ [ 'upload-alt', { viewBox: '0 0 1664 1600', path: 'm 1280,1408 q 0,-26 -19,-45 -19,-19 -45,-19 -26,0 -45,19 -19,19 -19,45 0,26 19,45 19,19 45,19 26,0 45,-19 19,-19 19,-45 z m 256,0 q 0,-26 -19,-45 -19,-19 -45,-19 -26,0 -45,19 -19,19 -19,45 0,26 19,45 19,19 45,19 26,0 45,-19 19,-19 19,-45 z m 128,-224 v 320 q 0,40 -28,68 -28,28 -68,28 H 96 q -40,0 -68,-28 -28,-28 -28,-68 v -320 q 0,-40 28,-68 28,-28 68,-28 h 427 q 21,56 70.5,92 49.5,36 110.5,36 h 256 q 61,0 110.5,-36 49.5,-36 70.5,-92 h 427 q 40,0 68,28 28,28 28,68 z M 1339,536 q -17,40 -59,40 h -256 v 448 q 0,26 -19,45 -19,19 -45,19 H 704 q -26,0 -45,-19 -19,-19 -19,-45 V 576 H 384 q -42,0 -59,-40 -17,-39 14,-69 L 787,19 q 18,-19 45,-19 27,0 45,19 l 448,448 q 31,30 14,69 z' } ],
+ [ 'zoom-in', { viewBox: '0 0 1664 1664', path: 'm 1024,672 v 64 q 0,13 -9.5,22.5 Q 1005,768 992,768 H 768 v 224 q 0,13 -9.5,22.5 -9.5,9.5 -22.5,9.5 h -64 q -13,0 -22.5,-9.5 Q 640,1005 640,992 V 768 H 416 q -13,0 -22.5,-9.5 Q 384,749 384,736 v -64 q 0,-13 9.5,-22.5 Q 403,640 416,640 H 640 V 416 q 0,-13 9.5,-22.5 Q 659,384 672,384 h 64 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 v 224 h 224 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 128,32 Q 1152,519 1020.5,387.5 889,256 704,256 519,256 387.5,387.5 256,519 256,704 256,889 387.5,1020.5 519,1152 704,1152 889,1152 1020.5,1020.5 1152,889 1152,704 Z m 512,832 q 0,53 -37.5,90.5 -37.5,37.5 -90.5,37.5 -54,0 -90,-38 L 1103,1284 Q 924,1408 704,1408 561,1408 430.5,1352.5 300,1297 205.5,1202.5 111,1108 55.5,977.5 0,847 0,704 0,561 55.5,430.5 111,300 205.5,205.5 300,111 430.5,55.5 561,0 704,0 q 143,0 273.5,55.5 130.5,55.5 225,150 94.5,94.5 150,225 55.5,130.5 55.5,273.5 0,220 -124,399 l 343,343 q 37,37 37,90 z' } ],
+ [ 'zoom-out', { viewBox: '0 0 1664 1664', path: 'm 1024,672 v 64 q 0,13 -9.5,22.5 Q 1005,768 992,768 H 416 q -13,0 -22.5,-9.5 Q 384,749 384,736 v -64 q 0,-13 9.5,-22.5 Q 403,640 416,640 h 576 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 128,32 Q 1152,519 1020.5,387.5 889,256 704,256 519,256 387.5,387.5 256,519 256,704 256,889 387.5,1020.5 519,1152 704,1152 889,1152 1020.5,1020.5 1152,889 1152,704 Z m 512,832 q 0,53 -37.5,90.5 -37.5,37.5 -90.5,37.5 -54,0 -90,-38 L 1103,1284 Q 924,1408 704,1408 561,1408 430.5,1352.5 300,1297 205.5,1202.5 111,1108 55.5,977.5 0,847 0,704 0,561 55.5,430.5 111,300 205.5,205.5 300,111 430.5,55.5 561,0 704,0 q 143,0 273.5,55.5 130.5,55.5 225,150 94.5,94.5 150,225 55.5,130.5 55.5,273.5 0,220 -124,399 l 343,343 q 37,37 37,90 z' } ],
+ // See /img/photon.svg
+ [ 'ph-popups', { viewBox: '0 0 20 20', path: 'm 3.146,1.8546316 a 0.5006316,0.5006316 0 0 0 0.708,-0.708 l -1,-1 a 0.5006316,0.5006316 0 0 0 -0.708,0.708 z m -0.836,2.106 a 0.406,0.406 0 0 0 0.19,0.04 0.5,0.5 0 0 0 0.35,-0.851 0.493,0.493 0 0 0 -0.54,-0.109 0.361,0.361 0 0 0 -0.16,0.109 0.485,0.485 0 0 0 0,0.7 0.372,0.372 0 0 0 0.16,0.111 z m 3,-3 a 0.406,0.406 0 0 0 0.19,0.04 0.513,0.513 0 0 0 0.5,-0.5 0.473,0.473 0 0 0 -0.15,-0.351 0.5,0.5 0 0 0 -0.7,0 0.485,0.485 0 0 0 0,0.7 0.372,0.372 0 0 0 0.16,0.111 z m 13.19,1.04 a 0.5,0.5 0 0 0 0.354,-0.146 l 1,-1 a 0.5006316,0.5006316 0 0 0 -0.708,-0.708 l -1,1 a 0.5,0.5 0 0 0 0.354,0.854 z m 1.35,1.149 a 0.361,0.361 0 0 0 -0.16,-0.109 0.5,0.5 0 0 0 -0.38,0 0.361,0.361 0 0 0 -0.16,0.109 0.485,0.485 0 0 0 0,0.7 0.372,0.372 0 0 0 0.16,0.11 0.471,0.471 0 0 0 0.38,0 0.372,0.372 0 0 0 0.16,-0.11 0.469,0.469 0 0 0 0.15,-0.349 0.43,0.43 0 0 0 -0.04,-0.19 0.358,0.358 0 0 0 -0.11,-0.161 z m -3.54,-2.189 a 0.406,0.406 0 0 0 0.19,0.04 0.469,0.469 0 0 0 0.35,-0.15 0.353,0.353 0 0 0 0.11,-0.161 0.469,0.469 0 0 0 0,-0.379 0.358,0.358 0 0 0 -0.11,-0.161 0.361,0.361 0 0 0 -0.16,-0.109 0.493,0.493 0 0 0 -0.54,0.109 0.358,0.358 0 0 0 -0.11,0.161 0.43,0.43 0 0 0 -0.04,0.19 0.469,0.469 0 0 0 0.15,0.35 0.372,0.372 0 0 0 0.16,0.11 z m 2.544,15.1860004 a 0.5006316,0.5006316 0 0 0 -0.708,0.708 l 1,1 a 0.5006316,0.5006316 0 0 0 0.708,-0.708 z m 0.3,-2 a 0.473,0.473 0 0 0 -0.154,0.354 0.4,0.4 0 0 0 0.04,0.189 0.353,0.353 0 0 0 0.11,0.161 0.469,0.469 0 0 0 0.35,0.15 0.406,0.406 0 0 0 0.19,-0.04 0.372,0.372 0 0 0 0.16,-0.11 0.454,0.454 0 0 0 0.15,-0.35 0.473,0.473 0 0 0 -0.15,-0.351 0.5,0.5 0 0 0 -0.7,0 z m -3,3 a 0.473,0.473 0 0 0 -0.154,0.354 0.454,0.454 0 0 0 0.15,0.35 0.372,0.372 0 0 0 0.16,0.11 0.406,0.406 0 0 0 0.19,0.04 0.469,0.469 0 0 0 0.35,-0.15 0.353,0.353 0 0 0 0.11,-0.161 0.4,0.4 0 0 0 0.04,-0.189 0.473,0.473 0 0 0 -0.15,-0.351 0.5,0.5 0 0 0 -0.7,0 z M 18,5.0006316 a 3,3 0 0 0 -3,-3 H 7 a 3,3 0 0 0 -3,3 v 8.0000004 a 3,3 0 0 0 3,3 h 8 a 3,3 0 0 0 3,-3 z m -2,8.0000004 a 1,1 0 0 1 -1,1 H 7 a 1,1 0 0 1 -1,-1 V 7.0006316 H 16 Z M 16,6.0006316 H 6 v -1 a 1,1 0 0 1 1,-1 h 8 a 1,1 0 0 1 1,1 z M 11,18.000632 H 3 a 1,1 0 0 1 -1,-1 v -6 h 1 v -1 H 2 V 9.0006316 a 1,1 0 0 1 1,-1 v -2 a 3,3 0 0 0 -3,3 v 8.0000004 a 3,3 0 0 0 3,3 h 8 a 3,3 0 0 0 3,-3 h -2 a 1,1 0 0 1 -1,1 z' } ],
+ [ 'ph-readermode-text-size', { viewBox: '0 0 20 12.5', path: 'M 10.422,11.223 A 0.712,0.712 0 0 1 10.295,11.007 L 6.581,0 H 4.68 L 0.933,11.309 0,11.447 V 12.5 H 3.594 V 11.447 L 2.655,11.325 A 0.3,0.3 0 0 1 2.468,11.211 0.214,0.214 0 0 1 2.419,10.974 L 3.341,8.387 h 3.575 l 0.906,2.652 a 0.18,0.18 0 0 1 -0.016,0.18 0.217,0.217 0 0 1 -0.139,0.106 L 6.679,11.447 V 12.5 h 4.62 V 11.447 L 10.663,11.325 A 0.512,0.512 0 0 1 10.422,11.223 Z M 3.659,7.399 5.063,2.57 6.5,7.399 Z M 19.27,11.464 A 0.406,0.406 0 0 1 19.009,11.337 0.368,0.368 0 0 1 18.902,11.072 V 6.779 A 3.838,3.838 0 0 0 18.67,5.318 1.957,1.957 0 0 0 18.01,4.457 2.48,2.48 0 0 0 16.987,4.044 7.582,7.582 0 0 0 15.67,3.938 a 6.505,6.505 0 0 0 -1.325,0.139 5.2,5.2 0 0 0 -1.2,0.4 2.732,2.732 0 0 0 -0.864,0.624 1.215,1.215 0 0 0 -0.331,0.833 0.532,0.532 0 0 0 0.119,0.383 0.665,0.665 0 0 0 0.257,0.172 0.916,0.916 0 0 0 0.375,0.041 h 1.723 V 4.942 A 4.429,4.429 0 0 1 14.611,4.91 2.045,2.045 0 0 1 14.836,4.885 c 0.09,0 0.192,-0.008 0.306,-0.008 a 1.849,1.849 0 0 1 0.808,0.151 1.247,1.247 0 0 1 0.71,0.89 2.164,2.164 0 0 1 0.049,0.51 c 0,0.076 -0.008,0.152 -0.008,0.228 0,0.076 -0.008,0.139 -0.008,0.221 v 0.2 q -1.152,0.252 -1.976,0.489 a 12.973,12.973 0 0 0 -1.391,0.474 4.514,4.514 0 0 0 -0.91,0.485 2.143,2.143 0 0 0 -0.527,0.523 1.594,1.594 0 0 0 -0.245,0.592 3.739,3.739 0 0 0 -0.061,0.693 2.261,2.261 0 0 0 0.171,0.9 2.024,2.024 0 0 0 0.469,0.682 2.084,2.084 0 0 0 0.693,0.432 2.364,2.364 0 0 0 0.852,0.151 3.587,3.587 0 0 0 1.068,-0.159 6.441,6.441 0 0 0 1.835,-0.877 l 0.22,0.832 H 20 v -0.783 z m -2.588,-0.719 a 4.314,4.314 0 0 1 -0.5,0.188 5.909,5.909 0 0 1 -0.493,0.123 2.665,2.665 0 0 1 -0.543,0.057 1.173,1.173 0 0 1 -0.861,-0.363 1.166,1.166 0 0 1 -0.245,-0.392 1.357,1.357 0 0 1 -0.086,-0.486 1.632,1.632 0 0 1 0.123,-0.657 1.215,1.215 0 0 1 0.432,-0.5 3.151,3.151 0 0 1 0.837,-0.392 12.429,12.429 0 0 1 1.334,-0.334 z' } ],
+ ]);
+
+ return function(root) {
+ const icons = (root || document).querySelectorAll('.fa-icon');
+ if ( icons.length === 0 ) { return; }
+ const svgNS = 'http://www.w3.org/2000/svg';
+ for ( const icon of icons ) {
+ if ( icon.firstChild === null || icon.firstChild.nodeType !== 3 ) {
+ continue;
+ }
+ const name = icon.firstChild.nodeValue.trim();
+ if ( name === '' ) { continue; }
+ const svg = document.createElementNS(svgNS, 'svg');
+ svg.classList.add('fa-icon_' + name);
+ const details = svgIcons.get(name);
+ if ( details === undefined ) {
+ let file;
+ if ( name.startsWith('ph-') ) {
+ file = 'photon';
+ } else if ( name.startsWith('md-') ) {
+ file = 'material-design';
+ } else {
+ continue;
+ }
+ const use = document.createElementNS(svgNS, 'use');
+ use.setAttribute('href', `/img/${file}.svg#${name}`);
+ svg.appendChild(use);
+ } else {
+ svg.setAttribute('viewBox', details.viewBox);
+ const path = document.createElementNS(svgNS, 'path');
+ path.setAttribute('d', details.path);
+ svg.appendChild(path);
+ }
+ icon.replaceChild(svg, icon.firstChild);
+ if ( icon.classList.contains('fa-icon-badged') ) {
+ const badge = document.createElement('span');
+ badge.className = 'fa-icon-badge';
+ icon.insertBefore(badge, icon.firstChild.nextSibling);
+ }
+ }
+ };
+})();
+
+faIconsInit();
diff --git a/src/js/filtering-context.js b/src/js/filtering-context.js
new file mode 100644
index 0000000..5bc9aa1
--- /dev/null
+++ b/src/js/filtering-context.js
@@ -0,0 +1,461 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2018-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import {
+ hostnameFromURI,
+ domainFromHostname,
+ originFromURI,
+} from './uri-utils.js';
+
+/******************************************************************************/
+
+// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType
+
+// Long term, convert code wherever possible to work with integer-based type
+// values -- the assumption being that integer operations are faster than
+// string operations.
+
+export const NO_TYPE = 0;
+export const BEACON = 1 << 0;
+export const CSP_REPORT = 1 << 1;
+export const FONT = 1 << 2;
+export const IMAGE = 1 << 4;
+export const IMAGESET = 1 << 4;
+export const MAIN_FRAME = 1 << 5;
+export const MEDIA = 1 << 6;
+export const OBJECT = 1 << 7;
+export const OBJECT_SUBREQUEST = 1 << 7;
+export const PING = 1 << 8;
+export const SCRIPT = 1 << 9;
+export const STYLESHEET = 1 << 10;
+export const SUB_FRAME = 1 << 11;
+export const WEBSOCKET = 1 << 12;
+export const XMLHTTPREQUEST = 1 << 13;
+export const INLINE_FONT = 1 << 14;
+export const INLINE_SCRIPT = 1 << 15;
+export const OTHER = 1 << 16;
+export const FRAME_ANY = MAIN_FRAME | SUB_FRAME;
+export const FONT_ANY = FONT | INLINE_FONT;
+export const INLINE_ANY = INLINE_FONT | INLINE_SCRIPT;
+export const PING_ANY = BEACON | CSP_REPORT | PING;
+export const SCRIPT_ANY = SCRIPT | INLINE_SCRIPT;
+
+const typeStrToIntMap = {
+ 'no_type': NO_TYPE,
+ 'beacon': BEACON,
+ 'csp_report': CSP_REPORT,
+ 'font': FONT,
+ 'image': IMAGE,
+ 'imageset': IMAGESET,
+ 'main_frame': MAIN_FRAME,
+ 'media': MEDIA,
+ 'object': OBJECT,
+ 'object_subrequest': OBJECT_SUBREQUEST,
+ 'ping': PING,
+ 'script': SCRIPT,
+ 'stylesheet': STYLESHEET,
+ 'sub_frame': SUB_FRAME,
+ 'websocket': WEBSOCKET,
+ 'xmlhttprequest': XMLHTTPREQUEST,
+ 'inline-font': INLINE_FONT,
+ 'inline-script': INLINE_SCRIPT,
+ 'other': OTHER,
+};
+
+export const METHOD_NONE = 0;
+export const METHOD_CONNECT = 1 << 1;
+export const METHOD_DELETE = 1 << 2;
+export const METHOD_GET = 1 << 3;
+export const METHOD_HEAD = 1 << 4;
+export const METHOD_OPTIONS = 1 << 5;
+export const METHOD_PATCH = 1 << 6;
+export const METHOD_POST = 1 << 7;
+export const METHOD_PUT = 1 << 8;
+
+const methodStrToBitMap = {
+ '': METHOD_NONE,
+ 'connect': METHOD_CONNECT,
+ 'delete': METHOD_DELETE,
+ 'get': METHOD_GET,
+ 'head': METHOD_HEAD,
+ 'options': METHOD_OPTIONS,
+ 'patch': METHOD_PATCH,
+ 'post': METHOD_POST,
+ 'put': METHOD_PUT,
+ 'CONNECT': METHOD_CONNECT,
+ 'DELETE': METHOD_DELETE,
+ 'GET': METHOD_GET,
+ 'HEAD': METHOD_HEAD,
+ 'OPTIONS': METHOD_OPTIONS,
+ 'PATCH': METHOD_PATCH,
+ 'POST': METHOD_POST,
+ 'PUT': METHOD_PUT,
+};
+
+const methodBitToStrMap = new Map([
+ [ METHOD_NONE, '' ],
+ [ METHOD_CONNECT, 'connect' ],
+ [ METHOD_DELETE, 'delete' ],
+ [ METHOD_GET, 'get' ],
+ [ METHOD_HEAD, 'head' ],
+ [ METHOD_OPTIONS, 'options' ],
+ [ METHOD_PATCH, 'patch' ],
+ [ METHOD_POST, 'post' ],
+ [ METHOD_PUT, 'put' ],
+]);
+
+/******************************************************************************/
+
+export const FilteringContext = class {
+ constructor(other) {
+ if ( other instanceof FilteringContext ) {
+ return this.fromFilteringContext(other);
+ }
+ this.tstamp = 0;
+ this.realm = '';
+ this.id = undefined;
+ this.method = 0;
+ this.itype = NO_TYPE;
+ this.stype = undefined;
+ this.url = undefined;
+ this.aliasURL = undefined;
+ this.hostname = undefined;
+ this.domain = undefined;
+ this.docId = -1;
+ this.frameId = -1;
+ this.docOrigin = undefined;
+ this.docHostname = undefined;
+ this.docDomain = undefined;
+ this.tabId = undefined;
+ this.tabOrigin = undefined;
+ this.tabHostname = undefined;
+ this.tabDomain = undefined;
+ this.redirectURL = undefined;
+ this.filter = undefined;
+ }
+
+ get type() {
+ return this.stype;
+ }
+
+ set type(a) {
+ this.itype = typeStrToIntMap[a] || NO_TYPE;
+ this.stype = a;
+ }
+
+ isDocument() {
+ return (this.itype & FRAME_ANY) !== 0;
+ }
+
+ isFont() {
+ return (this.itype & FONT_ANY) !== 0;
+ }
+
+ fromFilteringContext(other) {
+ this.realm = other.realm;
+ this.id = other.id;
+ this.type = other.type;
+ this.method = other.method;
+ this.url = other.url;
+ this.hostname = other.hostname;
+ this.domain = other.domain;
+ this.docId = other.docId;
+ this.frameId = other.frameId;
+ this.docOrigin = other.docOrigin;
+ this.docHostname = other.docHostname;
+ this.docDomain = other.docDomain;
+ this.tabId = other.tabId;
+ this.tabOrigin = other.tabOrigin;
+ this.tabHostname = other.tabHostname;
+ this.tabDomain = other.tabDomain;
+ this.redirectURL = other.redirectURL;
+ this.filter = undefined;
+ return this;
+ }
+
+ fromDetails({ originURL, url, type }) {
+ this.setDocOriginFromURL(originURL)
+ .setURL(url)
+ .setType(type);
+ return this;
+ }
+
+ duplicate() {
+ return (new FilteringContext(this));
+ }
+
+ setRealm(a) {
+ this.realm = a;
+ return this;
+ }
+
+ setType(a) {
+ this.type = a;
+ return this;
+ }
+
+ setURL(a) {
+ if ( a !== this.url ) {
+ this.hostname = this.domain = undefined;
+ this.url = a;
+ }
+ return this;
+ }
+
+ getHostname() {
+ if ( this.hostname === undefined ) {
+ this.hostname = hostnameFromURI(this.url);
+ }
+ return this.hostname;
+ }
+
+ setHostname(a) {
+ if ( a !== this.hostname ) {
+ this.domain = undefined;
+ this.hostname = a;
+ }
+ return this;
+ }
+
+ getDomain() {
+ if ( this.domain === undefined ) {
+ this.domain = domainFromHostname(this.getHostname());
+ }
+ return this.domain;
+ }
+
+ setDomain(a) {
+ this.domain = a;
+ return this;
+ }
+
+ getDocOrigin() {
+ if ( this.docOrigin === undefined ) {
+ this.docOrigin = this.tabOrigin;
+ }
+ return this.docOrigin;
+ }
+
+ setDocOrigin(a) {
+ if ( a !== this.docOrigin ) {
+ this.docHostname = this.docDomain = undefined;
+ this.docOrigin = a;
+ }
+ return this;
+ }
+
+ setDocOriginFromURL(a) {
+ return this.setDocOrigin(originFromURI(a));
+ }
+
+ getDocHostname() {
+ if ( this.docHostname === undefined ) {
+ this.docHostname = hostnameFromURI(this.getDocOrigin());
+ }
+ return this.docHostname;
+ }
+
+ setDocHostname(a) {
+ if ( a !== this.docHostname ) {
+ this.docDomain = undefined;
+ this.docHostname = a;
+ }
+ return this;
+ }
+
+ getDocDomain() {
+ if ( this.docDomain === undefined ) {
+ this.docDomain = domainFromHostname(this.getDocHostname());
+ }
+ return this.docDomain;
+ }
+
+ setDocDomain(a) {
+ this.docDomain = a;
+ return this;
+ }
+
+ // The idea is to minimize the amount of work done to figure out whether
+ // the resource is 3rd-party to the document.
+ is3rdPartyToDoc() {
+ let docDomain = this.getDocDomain();
+ if ( docDomain === '' ) { docDomain = this.docHostname; }
+ if ( this.domain !== undefined && this.domain !== '' ) {
+ return this.domain !== docDomain;
+ }
+ const hostname = this.getHostname();
+ if ( hostname.endsWith(docDomain) === false ) { return true; }
+ const i = hostname.length - docDomain.length;
+ if ( i === 0 ) { return false; }
+ return hostname.charCodeAt(i - 1) !== 0x2E /* '.' */;
+ }
+
+ setTabId(a) {
+ this.tabId = a;
+ return this;
+ }
+
+ getTabOrigin() {
+ return this.tabOrigin;
+ }
+
+ setTabOrigin(a) {
+ if ( a !== this.tabOrigin ) {
+ this.tabHostname = this.tabDomain = undefined;
+ this.tabOrigin = a;
+ }
+ return this;
+ }
+
+ setTabOriginFromURL(a) {
+ return this.setTabOrigin(originFromURI(a));
+ }
+
+ getTabHostname() {
+ if ( this.tabHostname === undefined ) {
+ this.tabHostname = hostnameFromURI(this.getTabOrigin());
+ }
+ return this.tabHostname;
+ }
+
+ setTabHostname(a) {
+ if ( a !== this.tabHostname ) {
+ this.tabDomain = undefined;
+ this.tabHostname = a;
+ }
+ return this;
+ }
+
+ getTabDomain() {
+ if ( this.tabDomain === undefined ) {
+ this.tabDomain = domainFromHostname(this.getTabHostname());
+ }
+ return this.tabDomain;
+ }
+
+ setTabDomain(a) {
+ this.docDomain = a;
+ return this;
+ }
+
+ // The idea is to minimize the amount of work done to figure out whether
+ // the resource is 3rd-party to the top document.
+ is3rdPartyToTab() {
+ let tabDomain = this.getTabDomain();
+ if ( tabDomain === '' ) { tabDomain = this.tabHostname; }
+ if ( this.domain !== undefined && this.domain !== '' ) {
+ return this.domain !== tabDomain;
+ }
+ const hostname = this.getHostname();
+ if ( hostname.endsWith(tabDomain) === false ) { return true; }
+ const i = hostname.length - tabDomain.length;
+ if ( i === 0 ) { return false; }
+ return hostname.charCodeAt(i - 1) !== 0x2E /* '.' */;
+ }
+
+ setFilter(a) {
+ this.filter = a;
+ return this;
+ }
+
+ pushFilter(a) {
+ if ( this.filter === undefined ) {
+ return this.setFilter(a);
+ }
+ if ( Array.isArray(this.filter) ) {
+ this.filter.push(a);
+ } else {
+ this.filter = [ this.filter, a ];
+ }
+ return this;
+ }
+
+ pushFilters(a) {
+ if ( this.filter === undefined ) {
+ return this.setFilter(a);
+ }
+ if ( Array.isArray(this.filter) ) {
+ this.filter.push(...a);
+ } else {
+ this.filter = [ this.filter, ...a ];
+ }
+ return this;
+ }
+
+ setMethod(a) {
+ this.method = methodStrToBitMap[a] || 0;
+ return this;
+ }
+
+ getMethodName() {
+ return FilteringContext.getMethodName(this.method);
+ }
+
+ static getMethod(a) {
+ return methodStrToBitMap[a] || 0;
+ }
+
+ static getMethodName(a) {
+ return methodBitToStrMap.get(a) || '';
+ }
+};
+
+/******************************************************************************/
+
+FilteringContext.prototype.BEACON = FilteringContext.BEACON = BEACON;
+FilteringContext.prototype.CSP_REPORT = FilteringContext.CSP_REPORT = CSP_REPORT;
+FilteringContext.prototype.FONT = FilteringContext.FONT = FONT;
+FilteringContext.prototype.IMAGE = FilteringContext.IMAGE = IMAGE;
+FilteringContext.prototype.IMAGESET = FilteringContext.IMAGESET = IMAGESET;
+FilteringContext.prototype.MAIN_FRAME = FilteringContext.MAIN_FRAME = MAIN_FRAME;
+FilteringContext.prototype.MEDIA = FilteringContext.MEDIA = MEDIA;
+FilteringContext.prototype.OBJECT = FilteringContext.OBJECT = OBJECT;
+FilteringContext.prototype.OBJECT_SUBREQUEST = FilteringContext.OBJECT_SUBREQUEST = OBJECT_SUBREQUEST;
+FilteringContext.prototype.PING = FilteringContext.PING = PING;
+FilteringContext.prototype.SCRIPT = FilteringContext.SCRIPT = SCRIPT;
+FilteringContext.prototype.STYLESHEET = FilteringContext.STYLESHEET = STYLESHEET;
+FilteringContext.prototype.SUB_FRAME = FilteringContext.SUB_FRAME = SUB_FRAME;
+FilteringContext.prototype.WEBSOCKET = FilteringContext.WEBSOCKET = WEBSOCKET;
+FilteringContext.prototype.XMLHTTPREQUEST = FilteringContext.XMLHTTPREQUEST = XMLHTTPREQUEST;
+FilteringContext.prototype.INLINE_FONT = FilteringContext.INLINE_FONT = INLINE_FONT;
+FilteringContext.prototype.INLINE_SCRIPT = FilteringContext.INLINE_SCRIPT = INLINE_SCRIPT;
+FilteringContext.prototype.OTHER = FilteringContext.OTHER = OTHER;
+FilteringContext.prototype.FRAME_ANY = FilteringContext.FRAME_ANY = FRAME_ANY;
+FilteringContext.prototype.FONT_ANY = FilteringContext.FONT_ANY = FONT_ANY;
+FilteringContext.prototype.INLINE_ANY = FilteringContext.INLINE_ANY = INLINE_ANY;
+FilteringContext.prototype.PING_ANY = FilteringContext.PING_ANY = PING_ANY;
+FilteringContext.prototype.SCRIPT_ANY = FilteringContext.SCRIPT_ANY = SCRIPT_ANY;
+
+FilteringContext.prototype.METHOD_NONE = FilteringContext.METHOD_NONE = METHOD_NONE;
+FilteringContext.prototype.METHOD_CONNECT = FilteringContext.METHOD_CONNECT = METHOD_CONNECT;
+FilteringContext.prototype.METHOD_DELETE = FilteringContext.METHOD_DELETE = METHOD_DELETE;
+FilteringContext.prototype.METHOD_GET = FilteringContext.METHOD_GET = METHOD_GET;
+FilteringContext.prototype.METHOD_HEAD = FilteringContext.METHOD_HEAD = METHOD_HEAD;
+FilteringContext.prototype.METHOD_OPTIONS = FilteringContext.METHOD_OPTIONS = METHOD_OPTIONS;
+FilteringContext.prototype.METHOD_PATCH = FilteringContext.METHOD_PATCH = METHOD_PATCH;
+FilteringContext.prototype.METHOD_POST = FilteringContext.METHOD_POST = METHOD_POST;
+FilteringContext.prototype.METHOD_PUT = FilteringContext.METHOD_PUT = METHOD_PUT;
+
+/******************************************************************************/
diff --git a/src/js/filtering-engines.js b/src/js/filtering-engines.js
new file mode 100644
index 0000000..d72ff9d
--- /dev/null
+++ b/src/js/filtering-engines.js
@@ -0,0 +1,50 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import DynamicHostRuleFiltering from './dynamic-net-filtering.js';
+import DynamicSwitchRuleFiltering from './hnswitches.js';
+import DynamicURLRuleFiltering from './url-net-filtering.js';
+
+/******************************************************************************/
+
+const permanentFirewall = new DynamicHostRuleFiltering();
+const sessionFirewall = new DynamicHostRuleFiltering();
+
+const permanentURLFiltering = new DynamicURLRuleFiltering();
+const sessionURLFiltering = new DynamicURLRuleFiltering();
+
+const permanentSwitches = new DynamicSwitchRuleFiltering();
+const sessionSwitches = new DynamicSwitchRuleFiltering();
+
+/******************************************************************************/
+
+export {
+ permanentFirewall,
+ sessionFirewall,
+ permanentURLFiltering,
+ sessionURLFiltering,
+ permanentSwitches,
+ sessionSwitches,
+};
diff --git a/src/js/hnswitches.js b/src/js/hnswitches.js
new file mode 100644
index 0000000..9e94a8e
--- /dev/null
+++ b/src/js/hnswitches.js
@@ -0,0 +1,289 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* jshint bitwise: false */
+
+'use strict';
+
+/******************************************************************************/
+
+import punycode from '../lib/punycode.js';
+
+import { decomposeHostname } from './uri-utils.js';
+import { LineIterator } from './text-utils.js';
+
+/******************************************************************************/
+
+const decomposedSource = [];
+
+// Object.create(null) is used below to eliminate worries about unexpected
+// property names in prototype chain -- and this way we don't have to use
+// hasOwnProperty() to avoid this.
+
+const switchBitOffsets = Object.create(null);
+Object.assign(switchBitOffsets, {
+ 'no-strict-blocking': 0,
+ 'no-popups': 2,
+ 'no-cosmetic-filtering': 4,
+ 'no-remote-fonts': 6,
+ 'no-large-media': 8,
+ 'no-csp-reports': 10,
+ 'no-scripting': 12,
+});
+
+const switchStateToNameMap = Object.create(null);
+Object.assign(switchStateToNameMap, {
+ '1': 'true',
+ '2': 'false',
+});
+
+const nameToSwitchStateMap = Object.create(null);
+Object.assign(nameToSwitchStateMap, {
+ 'true': 1,
+ 'false': 2,
+ 'on': 1,
+ 'off': 2,
+});
+
+/******************************************************************************/
+
+// For performance purpose, as simple test as possible
+const reNotASCII = /[^\x20-\x7F]/;
+
+// http://tools.ietf.org/html/rfc5952
+// 4.3: "MUST be represented in lowercase"
+// Also: http://en.wikipedia.org/wiki/IPv6_address#Literal_IPv6_addresses_in_network_resource_identifiers
+
+/******************************************************************************/
+
+class DynamicSwitchRuleFiltering {
+ constructor() {
+ this.reset();
+ }
+
+ reset() {
+ this.switches = new Map();
+ this.n = '';
+ this.z = '';
+ this.r = 0;
+ this.changed = true;
+ }
+
+ assign(from) {
+ // Remove rules not in other
+ for ( const hn of this.switches.keys() ) {
+ if ( from.switches.has(hn) === false ) {
+ this.switches.delete(hn);
+ this.changed = true;
+ }
+ }
+ // Add/change rules in other
+ for ( const [hn, bits] of from.switches ) {
+ if ( this.switches.get(hn) !== bits ) {
+ this.switches.set(hn, bits);
+ this.changed = true;
+ }
+ }
+ }
+
+ copyRules(from, srcHostname) {
+ const thisBits = this.switches.get(srcHostname);
+ const fromBits = from.switches.get(srcHostname);
+ if ( fromBits !== thisBits ) {
+ if ( fromBits !== undefined ) {
+ this.switches.set(srcHostname, fromBits);
+ } else {
+ this.switches.delete(srcHostname);
+ }
+ this.changed = true;
+ }
+ return this.changed;
+ }
+
+ hasSameRules(other, srcHostname) {
+ return this.switches.get(srcHostname) === other.switches.get(srcHostname);
+ }
+
+ toggle(switchName, hostname, newVal) {
+ const bitOffset = switchBitOffsets[switchName];
+ if ( bitOffset === undefined ) { return false; }
+ if ( newVal === this.evaluate(switchName, hostname) ) { return false; }
+ let bits = this.switches.get(hostname) || 0;
+ bits &= ~(3 << bitOffset);
+ bits |= newVal << bitOffset;
+ if ( bits === 0 ) {
+ this.switches.delete(hostname);
+ } else {
+ this.switches.set(hostname, bits);
+ }
+ this.changed = true;
+ return true;
+ }
+
+ toggleOneZ(switchName, hostname, newState) {
+ const bitOffset = switchBitOffsets[switchName];
+ if ( bitOffset === undefined ) { return false; }
+ let state = this.evaluateZ(switchName, hostname);
+ if ( newState === state ) { return false; }
+ if ( newState === undefined ) {
+ newState = !state;
+ }
+ let bits = this.switches.get(hostname) || 0;
+ bits &= ~(3 << bitOffset);
+ if ( bits === 0 ) {
+ this.switches.delete(hostname);
+ } else {
+ this.switches.set(hostname, bits);
+ }
+ state = this.evaluateZ(switchName, hostname);
+ if ( state !== newState ) {
+ this.switches.set(hostname, bits | ((newState ? 1 : 2) << bitOffset));
+ }
+ this.changed = true;
+ return true;
+ }
+
+ toggleBranchZ(switchName, targetHostname, newState) {
+ this.toggleOneZ(switchName, targetHostname, newState);
+
+ // Turn off all descendant switches, they will inherit the state of the
+ // branch's origin.
+ const targetLen = targetHostname.length;
+ for ( const hostname of this.switches.keys() ) {
+ if ( hostname === targetHostname ) { continue; }
+ if ( hostname.length <= targetLen ) { continue; }
+ if ( hostname.endsWith(targetHostname) === false ) { continue; }
+ if ( hostname.charAt(hostname.length - targetLen - 1) !== '.' ) {
+ continue;
+ }
+ this.toggle(switchName, hostname, 0);
+ }
+
+ return this.changed;
+ }
+
+ toggleZ(switchName, hostname, deep, newState) {
+ if ( deep === true ) {
+ return this.toggleBranchZ(switchName, hostname, newState);
+ }
+ return this.toggleOneZ(switchName, hostname, newState);
+ }
+
+ // 0 = inherit from broader scope, up to default state
+ // 1 = non-default state
+ // 2 = forced default state (to override a broader non-default state)
+
+ evaluate(switchName, hostname) {
+ const bits = this.switches.get(hostname);
+ if ( bits === undefined ) { return 0; }
+ let bitOffset = switchBitOffsets[switchName];
+ if ( bitOffset === undefined ) { return 0; }
+ return (bits >>> bitOffset) & 3;
+ }
+
+ evaluateZ(switchName, hostname) {
+ const bitOffset = switchBitOffsets[switchName];
+ if ( bitOffset === undefined ) {
+ this.r = 0;
+ return false;
+ }
+ this.n = switchName;
+ for ( const shn of decomposeHostname(hostname, decomposedSource) ) {
+ let bits = this.switches.get(shn);
+ if ( bits === undefined ) { continue; }
+ bits = bits >>> bitOffset & 3;
+ if ( bits === 0 ) { continue; }
+ this.z = shn;
+ this.r = bits;
+ return bits === 1;
+ }
+ this.r = 0;
+ return false;
+ }
+
+ toLogData() {
+ return {
+ source: 'switch',
+ result: this.r,
+ raw: `${this.n}: ${this.z} true`
+ };
+ }
+
+ toArray() {
+ const out = [];
+ for ( const hostname of this.switches.keys() ) {
+ const prettyHn = hostname.includes('xn--') && punycode
+ ? punycode.toUnicode(hostname)
+ : hostname;
+ for ( const switchName in switchBitOffsets ) {
+ if ( switchBitOffsets[switchName] === undefined ) { continue; }
+ const val = this.evaluate(switchName, hostname);
+ if ( val === 0 ) { continue; }
+ out.push(`${switchName}: ${prettyHn} ${switchStateToNameMap[val]}`);
+ }
+ }
+ return out;
+ }
+
+ toString() {
+ return this.toArray().join('\n');
+ }
+
+ fromString(text, append) {
+ const lineIter = new LineIterator(text);
+ if ( append !== true ) { this.reset(); }
+ while ( lineIter.eot() === false ) {
+ this.addFromRuleParts(lineIter.next().trim().split(/\s+/));
+ }
+ }
+
+ validateRuleParts(parts) {
+ if ( parts.length < 3 ) { return; }
+ if ( parts[0].endsWith(':') === false ) { return; }
+ if ( nameToSwitchStateMap[parts[2]] === undefined ) { return; }
+ if ( reNotASCII.test(parts[1]) && punycode !== undefined ) {
+ parts[1] = punycode.toASCII(parts[1]);
+ }
+ return parts;
+ }
+
+ addFromRuleParts(parts) {
+ if ( this.validateRuleParts(parts) === undefined ) { return false; }
+ const switchName = parts[0].slice(0, -1);
+ if ( switchBitOffsets[switchName] === undefined ) { return false; }
+ this.toggle(switchName, parts[1], nameToSwitchStateMap[parts[2]]);
+ return true;
+ }
+
+ removeFromRuleParts(parts) {
+ if ( this.validateRuleParts(parts) !== undefined ) {
+ this.toggle(parts[0].slice(0, -1), parts[1], 0);
+ return true;
+ }
+ return false;
+ }
+}
+
+/******************************************************************************/
+
+export default DynamicSwitchRuleFiltering;
+
+/******************************************************************************/
diff --git a/src/js/hntrie.js b/src/js/hntrie.js
new file mode 100644
index 0000000..e8031a6
--- /dev/null
+++ b/src/js/hntrie.js
@@ -0,0 +1,780 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2017-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* globals WebAssembly */
+
+'use strict';
+
+/*******************************************************************************
+
+ The original prototype was to develop an idea I had about using jump indices
+ in a TypedArray for quickly matching hostnames (or more generally strings)[1].
+ Once I had a working, un-optimized prototype, I realized I had ended up
+ with something formally named a "trie": <https://en.wikipedia.org/wiki/Trie>,
+ hence the name. I have no idea whether the implementation here or one
+ resembling it has been done elsewhere.
+
+ "HN" in HNTrieContainer stands for "HostName", because the trie is
+ specialized to deal with matching hostnames -- which is a bit more
+ complicated than matching plain strings.
+
+ For example, `www.abc.com` is deemed matching `abc.com`, because the former
+ is a subdomain of the latter. The opposite is of course not true.
+
+ The resulting read-only tries created as a result of using HNTrieContainer
+ are simply just typed arrays filled with integers. The matching algorithm is
+ just a matter of reading/comparing these integers, and further using them as
+ indices in the array as a way to move around in the trie.
+
+ [1] To solve <https://github.com/gorhill/uBlock/issues/3193>
+
+ Since this trie is specialized for matching hostnames, the stored
+ strings are reversed internally, because of hostname comparison logic:
+
+ Correct matching:
+ index 0123456
+ abc.com
+ |
+ www.abc.com
+ index 01234567890
+
+ Incorrect matching (typically used for plain strings):
+ index 0123456
+ abc.com
+ |
+ www.abc.com
+ index 01234567890
+
+ ------------------------------------------------------------------------------
+
+ 1st iteration:
+ - https://github.com/gorhill/uBlock/blob/ff58107dac3a32607f8113e39ed5015584506813/src/js/hntrie.js
+ - Suitable for small to medium set of hostnames
+ - One buffer per trie
+
+ 2nd iteration: goal was to make matches() method wasm-able
+ - https://github.com/gorhill/uBlock/blob/c3b0fd31f64bd7ffecdd282fb1208fe07aac3eb0/src/js/hntrie.js
+ - Suitable for small to medium set of hostnames
+ - Distinct tries all share same buffer:
+ - Reduced memory footprint
+ - https://stackoverflow.com/questions/45803829/memory-overhead-of-typed-arrays-vs-strings/45808835#45808835
+ - Reusing needle character lookups for all tries
+ - This significantly reduce the number of String.charCodeAt() calls
+ - Slightly improved creation time
+
+ This is the 3rd iteration: goal was to make add() method wasm-able and
+ further improve memory/CPU efficiency.
+
+ This 3rd iteration has the following new traits:
+ - Suitable for small to large set of hostnames
+ - Support multiple trie containers (instanciable)
+ - Designed to hold large number of hostnames
+ - Hostnames can be added at any time (instead of all at once)
+ - This means pre-sorting is no longer a requirement
+ - The trie is always compact
+ - There is no longer a need for a `vacuum` method
+ - This makes the add() method wasm-able
+ - It can return the exact hostname which caused the match
+ - serializable/unserializable available for fast loading
+ - Distinct trie reference support the iteration protocol, thus allowing
+ to extract all the hostnames in the trie
+
+ Its primary purpose is to replace the use of Set() as a mean to hold
+ large number of hostnames (ex. FilterHostnameDict in static filtering
+ engine).
+
+ A HNTrieContainer is mostly a large buffer in which distinct but related
+ tries are stored. The memory layout of the buffer is as follow:
+
+ 0-254: needle being processed
+ 255: length of needle
+ 256-259: offset to start of trie data section (=> trie0)
+ 260-263: offset to end of trie data section (=> trie1)
+ 264-267: offset to start of character data section (=> char0)
+ 268-271: offset to end of character data section (=> char1)
+ 272: start of trie data section
+
+*/
+
+const PAGE_SIZE = 65536;
+ // i32 / i8
+const TRIE0_SLOT = 256 >>> 2; // 64 / 256
+const TRIE1_SLOT = TRIE0_SLOT + 1; // 65 / 260
+const CHAR0_SLOT = TRIE0_SLOT + 2; // 66 / 264
+const CHAR1_SLOT = TRIE0_SLOT + 3; // 67 / 268
+const TRIE0_START = TRIE0_SLOT + 4 << 2; // 272
+
+const roundToPageSize = v => (v + PAGE_SIZE-1) & ~(PAGE_SIZE-1);
+
+class HNTrieContainer {
+
+ constructor() {
+ const len = PAGE_SIZE * 2;
+ this.buf = new Uint8Array(len);
+ this.buf32 = new Uint32Array(this.buf.buffer);
+ this.needle = '';
+ this.buf32[TRIE0_SLOT] = TRIE0_START;
+ this.buf32[TRIE1_SLOT] = this.buf32[TRIE0_SLOT];
+ this.buf32[CHAR0_SLOT] = len >>> 1;
+ this.buf32[CHAR1_SLOT] = this.buf32[CHAR0_SLOT];
+ this.wasmMemory = null;
+
+ this.lastStored = '';
+ this.lastStoredLen = this.lastStoredIndex = 0;
+ }
+
+ //--------------------------------------------------------------------------
+ // Public methods
+ //--------------------------------------------------------------------------
+
+ reset(details) {
+ if (
+ details instanceof Object &&
+ typeof details.byteLength === 'number' &&
+ typeof details.char0 === 'number'
+ ) {
+ if ( details.byteLength > this.buf.byteLength ) {
+ this.reallocateBuf(details.byteLength);
+ }
+ this.buf32[CHAR0_SLOT] = details.char0;
+ }
+ this.buf32[TRIE1_SLOT] = this.buf32[TRIE0_SLOT];
+ this.buf32[CHAR1_SLOT] = this.buf32[CHAR0_SLOT];
+
+ this.lastStored = '';
+ this.lastStoredLen = this.lastStoredIndex = 0;
+ }
+
+ setNeedle(needle) {
+ if ( needle !== this.needle ) {
+ const buf = this.buf;
+ let i = needle.length;
+ if ( i > 255 ) { i = 255; }
+ buf[255] = i;
+ while ( i-- ) {
+ buf[i] = needle.charCodeAt(i);
+ }
+ this.needle = needle;
+ }
+ return this;
+ }
+
+ matchesJS(iroot) {
+ const buf32 = this.buf32;
+ const buf8 = this.buf;
+ const char0 = buf32[CHAR0_SLOT];
+ let ineedle = buf8[255];
+ let icell = buf32[iroot+0];
+ if ( icell === 0 ) { return -1; }
+ let c = 0, v = 0, i0 = 0, n = 0;
+ for (;;) {
+ if ( ineedle === 0 ) { return -1; }
+ ineedle -= 1;
+ c = buf8[ineedle];
+ // find first segment with a first-character match
+ for (;;) {
+ v = buf32[icell+2];
+ i0 = char0 + (v >>> 8);
+ if ( buf8[i0] === c ) { break; }
+ icell = buf32[icell+0];
+ if ( icell === 0 ) { return -1; }
+ }
+ // all characters in segment must match
+ n = v & 0x7F;
+ if ( n > 1 ) {
+ n -= 1;
+ if ( n > ineedle ) { return -1; }
+ i0 += 1;
+ const i1 = i0 + n;
+ do {
+ ineedle -= 1;
+ if ( buf8[i0] !== buf8[ineedle] ) { return -1; }
+ i0 += 1;
+ } while ( i0 < i1 );
+ }
+ // boundary at end of segment?
+ if ( (v & 0x80) !== 0 ) {
+ if ( ineedle === 0 || buf8[ineedle-1] === 0x2E /* '.' */ ) {
+ return ineedle;
+ }
+ }
+ // next segment
+ icell = buf32[icell+1];
+ if ( icell === 0 ) { break; }
+ }
+ return -1;
+ }
+
+ createTrie() {
+ // grow buffer if needed
+ if ( (this.buf32[CHAR0_SLOT] - this.buf32[TRIE1_SLOT]) < 12 ) {
+ this.growBuf(12, 0);
+ }
+ const iroot = this.buf32[TRIE1_SLOT] >>> 2;
+ this.buf32[TRIE1_SLOT] += 12;
+ this.buf32[iroot+0] = 0;
+ this.buf32[iroot+1] = 0;
+ this.buf32[iroot+2] = 0;
+ return iroot;
+ }
+
+ createTrieFromIterable(hostnames) {
+ const itrie = this.createTrie();
+ for ( const hn of hostnames ) {
+ if ( hn === '' ) { continue; }
+ this.setNeedle(hn).add(itrie);
+ }
+ return itrie;
+ }
+
+ createTrieFromStoredDomainOpt(i, n) {
+ const itrie = this.createTrie();
+ const jend = i + n;
+ let j = i, offset = 0, k = 0, c = 0;
+ while ( j !== jend ) {
+ offset = this.buf32[CHAR0_SLOT]; // Important
+ k = 0;
+ for (;;) {
+ if ( j === jend ) { break; }
+ c = this.buf[offset+j];
+ j += 1;
+ if ( c === 0x7C /* '|' */ ) { break; }
+ if ( k === 255 ) { continue; }
+ this.buf[k] = c;
+ k += 1;
+ }
+ if ( k !== 0 ) {
+ this.buf[255] = k;
+ this.add(itrie);
+ }
+ }
+ this.needle = ''; // Important
+ this.buf[255] = 0; // Important
+ return itrie;
+ }
+
+ dumpTrie(iroot) {
+ let hostnames = Array.from(this.trieIterator(iroot));
+ if ( String.prototype.padStart instanceof Function ) {
+ const maxlen = Math.min(
+ hostnames.reduce((maxlen, hn) => Math.max(maxlen, hn.length), 0),
+ 64
+ );
+ hostnames = hostnames.map(hn => hn.padStart(maxlen));
+ }
+ for ( const hn of hostnames ) {
+ console.log(hn);
+ }
+ }
+
+ trieIterator(iroot) {
+ return {
+ value: undefined,
+ done: false,
+ next() {
+ if ( this.icell === 0 ) {
+ if ( this.forks.length === 0 ) {
+ this.value = undefined;
+ this.done = true;
+ return this;
+ }
+ this.charPtr = this.forks.pop();
+ this.icell = this.forks.pop();
+ }
+ for (;;) {
+ const idown = this.container.buf32[this.icell+0];
+ if ( idown !== 0 ) {
+ this.forks.push(idown, this.charPtr);
+ }
+ const v = this.container.buf32[this.icell+2];
+ let i0 = this.container.buf32[CHAR0_SLOT] + (v >>> 8);
+ const i1 = i0 + (v & 0x7F);
+ while ( i0 < i1 ) {
+ this.charPtr -= 1;
+ this.charBuf[this.charPtr] = this.container.buf[i0];
+ i0 += 1;
+ }
+ this.icell = this.container.buf32[this.icell+1];
+ if ( (v & 0x80) !== 0 ) {
+ return this.toHostname();
+ }
+ }
+ },
+ toHostname() {
+ this.value = this.textDecoder.decode(
+ new Uint8Array(this.charBuf.buffer, this.charPtr)
+ );
+ return this;
+ },
+ container: this,
+ icell: this.buf32[iroot],
+ charBuf: new Uint8Array(256),
+ charPtr: 256,
+ forks: [],
+ textDecoder: new TextDecoder(),
+ [Symbol.iterator]() { return this; },
+ };
+ }
+
+ // TODO:
+ // Rework code to add from a string already present in the character
+ // buffer, i.e. not having to go through setNeedle() when adding a new
+ // hostname to a trie. This will require much work though, and probably
+ // changing the order in which string segments are stored in the
+ // character buffer.
+ addJS(iroot) {
+ let lhnchar = this.buf[255];
+ if ( lhnchar === 0 ) { return 0; }
+ // grow buffer if needed
+ if (
+ (this.buf32[CHAR0_SLOT] - this.buf32[TRIE1_SLOT]) < 24 ||
+ (this.buf.length - this.buf32[CHAR1_SLOT]) < 256
+ ) {
+ this.growBuf(24, 256);
+ }
+ let icell = this.buf32[iroot+0];
+ // special case: first node in trie
+ if ( icell === 0 ) {
+ this.buf32[iroot+0] = this.addLeafCell(lhnchar);
+ return 1;
+ }
+ //
+ const char0 = this.buf32[CHAR0_SLOT];
+ let isegchar, lsegchar, boundaryBit, inext;
+ // find a matching cell: move down
+ for (;;) {
+ const v = this.buf32[icell+2];
+ let isegchar0 = char0 + (v >>> 8);
+ // if first character is no match, move to next descendant
+ if ( this.buf[isegchar0] !== this.buf[lhnchar-1] ) {
+ inext = this.buf32[icell+0];
+ if ( inext === 0 ) {
+ this.buf32[icell+0] = this.addLeafCell(lhnchar);
+ return 1;
+ }
+ icell = inext;
+ continue;
+ }
+ // 1st character was tested
+ isegchar = 1;
+ lhnchar -= 1;
+ // find 1st mismatch in rest of segment
+ lsegchar = v & 0x7F;
+ if ( lsegchar !== 1 ) {
+ for (;;) {
+ if ( isegchar === lsegchar ) { break; }
+ if ( lhnchar === 0 ) { break; }
+ if ( this.buf[isegchar0+isegchar] !== this.buf[lhnchar-1] ) { break; }
+ isegchar += 1;
+ lhnchar -= 1;
+ }
+ }
+ boundaryBit = v & 0x80;
+ // all segment characters matched
+ if ( isegchar === lsegchar ) {
+ // needle remainder: no
+ if ( lhnchar === 0 ) {
+ // boundary: yes, already present
+ if ( boundaryBit !== 0 ) { return 0; }
+ // boundary: no, mark as boundary
+ this.buf32[icell+2] = v | 0x80;
+ }
+ // needle remainder: yes
+ else {
+ // remainder is at label boundary? if yes, no need to add
+ // the rest since the shortest match is always reported
+ if ( boundaryBit !== 0 ) {
+ if ( this.buf[lhnchar-1] === 0x2E /* '.' */ ) { return -1; }
+ }
+ inext = this.buf32[icell+1];
+ if ( inext !== 0 ) {
+ icell = inext;
+ continue;
+ }
+ // add needle remainder
+ this.buf32[icell+1] = this.addLeafCell(lhnchar);
+ }
+ }
+ // some segment characters matched
+ else {
+ // split current cell
+ isegchar0 -= char0;
+ this.buf32[icell+2] = isegchar0 << 8 | isegchar;
+ inext = this.addCell(
+ 0,
+ this.buf32[icell+1],
+ isegchar0 + isegchar << 8 | boundaryBit | lsegchar - isegchar
+ );
+ this.buf32[icell+1] = inext;
+ // needle remainder: yes, need new cell for remaining characters
+ if ( lhnchar !== 0 ) {
+ this.buf32[inext+0] = this.addLeafCell(lhnchar);
+ }
+ // needle remainder: no, need boundary cell
+ else {
+ this.buf32[icell+2] |= 0x80;
+ }
+ }
+ return 1;
+ }
+ }
+
+ optimize() {
+ this.shrinkBuf();
+ return {
+ byteLength: this.buf.byteLength,
+ char0: this.buf32[CHAR0_SLOT],
+ };
+ }
+
+ serialize(encoder) {
+ if ( encoder instanceof Object ) {
+ return encoder.encode(
+ this.buf32.buffer,
+ this.buf32[CHAR1_SLOT]
+ );
+ }
+ return Array.from(
+ new Uint32Array(
+ this.buf32.buffer,
+ 0,
+ this.buf32[CHAR1_SLOT] + 3 >>> 2
+ )
+ );
+ }
+
+ unserialize(selfie, decoder) {
+ this.needle = '';
+ const shouldDecode = typeof selfie === 'string';
+ let byteLength = shouldDecode
+ ? decoder.decodeSize(selfie)
+ : selfie.length << 2;
+ if ( byteLength === 0 ) { return false; }
+ byteLength = roundToPageSize(byteLength);
+ if ( this.wasmMemory !== null ) {
+ const pageCountBefore = this.buf.length >>> 16;
+ const pageCountAfter = byteLength >>> 16;
+ if ( pageCountAfter > pageCountBefore ) {
+ this.wasmMemory.grow(pageCountAfter - pageCountBefore);
+ this.buf = new Uint8Array(this.wasmMemory.buffer);
+ this.buf32 = new Uint32Array(this.buf.buffer);
+ }
+ } else if ( byteLength > this.buf.length ) {
+ this.buf = new Uint8Array(byteLength);
+ this.buf32 = new Uint32Array(this.buf.buffer);
+ }
+ if ( shouldDecode ) {
+ decoder.decode(selfie, this.buf.buffer);
+ } else {
+ this.buf32.set(selfie);
+ }
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/2925
+ this.buf[255] = 0;
+ return true;
+ }
+
+ // The following *Hostname() methods can be used to store hostname strings
+ // outside the trie. This is useful to store/match hostnames which are
+ // not part of a collection, and yet still benefit from storing the strings
+ // into a trie container's character buffer.
+ // TODO: WASM version of matchesHostname()
+
+ storeHostname(hn) {
+ let n = hn.length;
+ if ( n > 255 ) {
+ hn = hn.slice(-255);
+ n = 255;
+ }
+ if ( n === this.lastStoredLen && hn === this.lastStored ) {
+ return this.lastStoredIndex;
+ }
+ this.lastStored = hn;
+ this.lastStoredLen = n;
+ if ( (this.buf.length - this.buf32[CHAR1_SLOT]) < n ) {
+ this.growBuf(0, n);
+ }
+ const offset = this.buf32[CHAR1_SLOT];
+ this.buf32[CHAR1_SLOT] = offset + n;
+ const buf8 = this.buf;
+ for ( let i = 0; i < n; i++ ) {
+ buf8[offset+i] = hn.charCodeAt(i);
+ }
+ return (this.lastStoredIndex = offset - this.buf32[CHAR0_SLOT]);
+ }
+
+ extractHostname(i, n) {
+ const textDecoder = new TextDecoder();
+ const offset = this.buf32[CHAR0_SLOT] + i;
+ return textDecoder.decode(this.buf.subarray(offset, offset + n));
+ }
+
+ storeDomainOpt(s) {
+ let n = s.length;
+ if ( n === this.lastStoredLen && s === this.lastStored ) {
+ return this.lastStoredIndex;
+ }
+ this.lastStored = s;
+ this.lastStoredLen = n;
+ if ( (this.buf.length - this.buf32[CHAR1_SLOT]) < n ) {
+ this.growBuf(0, n);
+ }
+ const offset = this.buf32[CHAR1_SLOT];
+ this.buf32[CHAR1_SLOT] = offset + n;
+ const buf8 = this.buf;
+ for ( let i = 0; i < n; i++ ) {
+ buf8[offset+i] = s.charCodeAt(i);
+ }
+ return (this.lastStoredIndex = offset - this.buf32[CHAR0_SLOT]);
+ }
+
+ extractDomainOpt(i, n) {
+ const textDecoder = new TextDecoder();
+ const offset = this.buf32[CHAR0_SLOT] + i;
+ return textDecoder.decode(this.buf.subarray(offset, offset + n));
+ }
+
+ matchesHostname(hn, i, n) {
+ this.setNeedle(hn);
+ const buf8 = this.buf;
+ const hr = buf8[255];
+ if ( n > hr ) { return false; }
+ const hl = hr - n;
+ const nl = this.buf32[CHAR0_SLOT] + i;
+ for ( let j = 0; j < n; j++ ) {
+ if ( buf8[nl+j] !== buf8[hl+j] ) { return false; }
+ }
+ return n === hr || hn.charCodeAt(hl-1) === 0x2E /* '.' */;
+ }
+
+ async enableWASM(wasmModuleFetcher, path) {
+ if ( typeof WebAssembly === 'undefined' ) { return false; }
+ if ( this.wasmMemory instanceof WebAssembly.Memory ) { return true; }
+ const module = await getWasmModule(wasmModuleFetcher, path);
+ if ( module instanceof WebAssembly.Module === false ) { return false; }
+ const memory = new WebAssembly.Memory({ initial: 2 });
+ const instance = await WebAssembly.instantiate(module, {
+ imports: {
+ memory,
+ growBuf: this.growBuf.bind(this, 24, 256)
+ }
+ });
+ if ( instance instanceof WebAssembly.Instance === false ) { return false; }
+ this.wasmMemory = memory;
+ const curPageCount = memory.buffer.byteLength >>> 16;
+ const newPageCount = roundToPageSize(this.buf.byteLength) >>> 16;
+ if ( newPageCount > curPageCount ) {
+ memory.grow(newPageCount - curPageCount);
+ }
+ const buf = new Uint8Array(memory.buffer);
+ buf.set(this.buf);
+ this.buf = buf;
+ this.buf32 = new Uint32Array(this.buf.buffer);
+ this.matches = this.matchesWASM = instance.exports.matches;
+ this.add = this.addWASM = instance.exports.add;
+ return true;
+ }
+
+ dumpInfo() {
+ return [
+ `Buffer size (Uint8Array): ${this.buf32[CHAR1_SLOT].toLocaleString('en')}`,
+ `WASM: ${this.wasmMemory === null ? 'disabled' : 'enabled'}`,
+ ].join('\n');
+ }
+
+ //--------------------------------------------------------------------------
+ // Private methods
+ //--------------------------------------------------------------------------
+
+ addCell(idown, iright, v) {
+ let icell = this.buf32[TRIE1_SLOT];
+ this.buf32[TRIE1_SLOT] = icell + 12;
+ icell >>>= 2;
+ this.buf32[icell+0] = idown;
+ this.buf32[icell+1] = iright;
+ this.buf32[icell+2] = v;
+ return icell;
+ }
+
+ addLeafCell(lsegchar) {
+ const r = this.buf32[TRIE1_SLOT] >>> 2;
+ let i = r;
+ while ( lsegchar > 127 ) {
+ this.buf32[i+0] = 0;
+ this.buf32[i+1] = i + 3;
+ this.buf32[i+2] = this.addSegment(lsegchar, lsegchar - 127);
+ lsegchar -= 127;
+ i += 3;
+ }
+ this.buf32[i+0] = 0;
+ this.buf32[i+1] = 0;
+ this.buf32[i+2] = this.addSegment(lsegchar, 0) | 0x80;
+ this.buf32[TRIE1_SLOT] = i + 3 << 2;
+ return r;
+ }
+
+ addSegment(lsegchar, lsegend) {
+ if ( lsegchar === 0 ) { return 0; }
+ let char1 = this.buf32[CHAR1_SLOT];
+ const isegchar = char1 - this.buf32[CHAR0_SLOT];
+ let i = lsegchar;
+ do {
+ this.buf[char1++] = this.buf[--i];
+ } while ( i !== lsegend );
+ this.buf32[CHAR1_SLOT] = char1;
+ return isegchar << 8 | lsegchar - lsegend;
+ }
+
+ growBuf(trieGrow, charGrow) {
+ const char0 = Math.max(
+ roundToPageSize(this.buf32[TRIE1_SLOT] + trieGrow),
+ this.buf32[CHAR0_SLOT]
+ );
+ const char1 = char0 + this.buf32[CHAR1_SLOT] - this.buf32[CHAR0_SLOT];
+ const bufLen = Math.max(
+ roundToPageSize(char1 + charGrow),
+ this.buf.length
+ );
+ this.resizeBuf(bufLen, char0);
+ }
+
+ shrinkBuf() {
+ // Can't shrink WebAssembly.Memory
+ if ( this.wasmMemory !== null ) { return; }
+ const char0 = this.buf32[TRIE1_SLOT] + 24;
+ const char1 = char0 + this.buf32[CHAR1_SLOT] - this.buf32[CHAR0_SLOT];
+ const bufLen = char1 + 256;
+ this.resizeBuf(bufLen, char0);
+ }
+
+ resizeBuf(bufLen, char0) {
+ bufLen = roundToPageSize(bufLen);
+ if ( bufLen === this.buf.length && char0 === this.buf32[CHAR0_SLOT] ) {
+ return;
+ }
+ const charDataLen = this.buf32[CHAR1_SLOT] - this.buf32[CHAR0_SLOT];
+ if ( this.wasmMemory !== null ) {
+ const pageCount = (bufLen >>> 16) - (this.buf.byteLength >>> 16);
+ if ( pageCount > 0 ) {
+ this.wasmMemory.grow(pageCount);
+ this.buf = new Uint8Array(this.wasmMemory.buffer);
+ this.buf32 = new Uint32Array(this.wasmMemory.buffer);
+ }
+ } else if ( bufLen !== this.buf.length ) {
+ const newBuf = new Uint8Array(bufLen);
+ newBuf.set(
+ new Uint8Array(
+ this.buf.buffer,
+ 0,
+ this.buf32[TRIE1_SLOT]
+ ),
+ 0
+ );
+ newBuf.set(
+ new Uint8Array(
+ this.buf.buffer,
+ this.buf32[CHAR0_SLOT],
+ charDataLen
+ ),
+ char0
+ );
+ this.buf = newBuf;
+ this.buf32 = new Uint32Array(this.buf.buffer);
+ this.buf32[CHAR0_SLOT] = char0;
+ this.buf32[CHAR1_SLOT] = char0 + charDataLen;
+ }
+ if ( char0 !== this.buf32[CHAR0_SLOT] ) {
+ this.buf.set(
+ new Uint8Array(
+ this.buf.buffer,
+ this.buf32[CHAR0_SLOT],
+ charDataLen
+ ),
+ char0
+ );
+ this.buf32[CHAR0_SLOT] = char0;
+ this.buf32[CHAR1_SLOT] = char0 + charDataLen;
+ }
+ }
+
+ reallocateBuf(newSize) {
+ newSize = roundToPageSize(newSize);
+ if ( newSize === this.buf.length ) { return; }
+ if ( this.wasmMemory === null ) {
+ const newBuf = new Uint8Array(newSize);
+ newBuf.set(
+ newBuf.length < this.buf.length
+ ? this.buf.subarray(0, newBuf.length)
+ : this.buf
+ );
+ this.buf = newBuf;
+ } else {
+ const growBy =
+ ((newSize + 0xFFFF) >>> 16) - (this.buf.length >>> 16);
+ if ( growBy <= 0 ) { return; }
+ this.wasmMemory.grow(growBy);
+ this.buf = new Uint8Array(this.wasmMemory.buffer);
+ }
+ this.buf32 = new Uint32Array(this.buf.buffer);
+ }
+}
+
+HNTrieContainer.prototype.matches = HNTrieContainer.prototype.matchesJS;
+HNTrieContainer.prototype.matchesWASM = null;
+
+HNTrieContainer.prototype.add = HNTrieContainer.prototype.addJS;
+HNTrieContainer.prototype.addWASM = null;
+
+/******************************************************************************/
+
+// Code below is to attempt to load a WASM module which implements:
+//
+// - HNTrieContainer.add()
+// - HNTrieContainer.matches()
+//
+// The WASM module is entirely optional, the JS implementations will be
+// used should the WASM module be unavailable for whatever reason.
+
+const getWasmModule = (( ) => {
+ let wasmModulePromise;
+
+ return async function(wasmModuleFetcher, path) {
+ if ( wasmModulePromise instanceof Promise ) {
+ return wasmModulePromise;
+ }
+
+ // The wasm module will work only if CPU is natively little-endian,
+ // as we use native uint32 array in our js code.
+ const uint32s = new Uint32Array(1);
+ const uint8s = new Uint8Array(uint32s.buffer);
+ uint32s[0] = 1;
+ if ( uint8s[0] !== 1 ) { return; }
+
+ wasmModulePromise = wasmModuleFetcher(`${path}hntrie`).catch(reason => {
+ console.info(reason);
+ });
+
+ return wasmModulePromise;
+ };
+})();
+
+/******************************************************************************/
+
+export default HNTrieContainer;
diff --git a/src/js/html-filtering.js b/src/js/html-filtering.js
new file mode 100644
index 0000000..81d66ee
--- /dev/null
+++ b/src/js/html-filtering.js
@@ -0,0 +1,465 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2017-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import logger from './logger.js';
+import µb from './background.js';
+import { sessionFirewall } from './filtering-engines.js';
+import { StaticExtFilteringHostnameDB } from './static-ext-filtering-db.js';
+import { entityFromDomain } from './uri-utils.js';
+
+/******************************************************************************/
+
+const pselectors = new Map();
+const duplicates = new Set();
+
+const filterDB = new StaticExtFilteringHostnameDB(2);
+
+let acceptedCount = 0;
+let discardedCount = 0;
+let docRegister;
+
+const htmlFilteringEngine = {
+ get acceptedCount() {
+ return acceptedCount;
+ },
+ get discardedCount() {
+ return discardedCount;
+ },
+ getFilterCount() {
+ return filterDB.size;
+ },
+};
+
+const regexFromString = (s, exact = false) => {
+ if ( s === '' ) { return /^/; }
+ const match = /^\/(.+)\/([i]?)$/.exec(s);
+ if ( match !== null ) {
+ return new RegExp(match[1], match[2] || undefined);
+ }
+ const reStr = s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
+ return new RegExp(exact ? `^${reStr}$` : reStr, 'i');
+};
+
+class PSelectorVoidTask {
+ constructor(task) {
+ console.info(`[uBO] HTML filtering: :${task[0]}() operator is not supported`);
+ }
+ transpose() {
+ }
+}
+class PSelectorHasTextTask {
+ constructor(task) {
+ this.needle = regexFromString(task[1]);
+ }
+ transpose(node, output) {
+ if ( this.needle.test(node.textContent) ) {
+ output.push(node);
+ }
+ }
+}
+
+const PSelectorIfTask = class {
+ constructor(task) {
+ this.pselector = new PSelector(task[1]);
+ }
+ transpose(node, output) {
+ if ( this.pselector.test(node) === this.target ) {
+ output.push(node);
+ }
+ }
+};
+PSelectorIfTask.prototype.target = true;
+
+class PSelectorIfNotTask extends PSelectorIfTask {
+}
+PSelectorIfNotTask.prototype.target = false;
+
+class PSelectorMinTextLengthTask {
+ constructor(task) {
+ this.min = task[1];
+ }
+ transpose(node, output) {
+ if ( node.textContent.length >= this.min ) {
+ output.push(node);
+ }
+ }
+}
+
+class PSelectorSpathTask {
+ constructor(task) {
+ this.spath = task[1];
+ this.nth = /^(?:\s*[+~]|:)/.test(this.spath);
+ if ( this.nth ) { return; }
+ if ( /^\s*>/.test(this.spath) ) {
+ this.spath = `:scope ${this.spath.trim()}`;
+ }
+ }
+ transpose(node, output) {
+ const nodes = this.nth
+ ? PSelectorSpathTask.qsa(node, this.spath)
+ : node.querySelectorAll(this.spath);
+ for ( const node of nodes ) {
+ output.push(node);
+ }
+ }
+ // Helper method for other operators.
+ static qsa(node, selector) {
+ const parent = node.parentElement;
+ if ( parent === null ) { return []; }
+ let pos = 1;
+ for (;;) {
+ node = node.previousElementSibling;
+ if ( node === null ) { break; }
+ pos += 1;
+ }
+ return parent.querySelectorAll(
+ `:scope > :nth-child(${pos})${selector}`
+ );
+ }
+}
+
+class PSelectorUpwardTask {
+ constructor(task) {
+ const arg = task[1];
+ if ( typeof arg === 'number' ) {
+ this.i = arg;
+ } else {
+ this.s = arg;
+ }
+ }
+ transpose(node, output) {
+ if ( this.s !== '' ) {
+ const parent = node.parentElement;
+ if ( parent === null ) { return; }
+ node = parent.closest(this.s);
+ if ( node === null ) { return; }
+ } else {
+ let nth = this.i;
+ for (;;) {
+ node = node.parentElement;
+ if ( node === null ) { return; }
+ nth -= 1;
+ if ( nth === 0 ) { break; }
+ }
+ }
+ output.push(node);
+ }
+}
+PSelectorUpwardTask.prototype.i = 0;
+PSelectorUpwardTask.prototype.s = '';
+
+class PSelectorXpathTask {
+ constructor(task) {
+ this.xpe = task[1];
+ }
+ transpose(node, output) {
+ const xpr = docRegister.evaluate(
+ this.xpe,
+ node,
+ null,
+ XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
+ null
+ );
+ let j = xpr.snapshotLength;
+ while ( j-- ) {
+ const node = xpr.snapshotItem(j);
+ if ( node.nodeType === 1 ) {
+ output.push(node);
+ }
+ }
+ }
+}
+
+class PSelector {
+ constructor(o) {
+ this.raw = o.raw;
+ this.selector = o.selector;
+ this.tasks = [];
+ if ( !o.tasks ) { return; }
+ for ( const task of o.tasks ) {
+ const ctor = this.operatorToTaskMap.get(task[0]) || PSelectorVoidTask;
+ const pselector = new ctor(task);
+ this.tasks.push(pselector);
+ }
+ }
+ prime(input) {
+ const root = input || docRegister;
+ if ( this.selector === '' ) { return [ root ]; }
+ if ( input !== docRegister && /^ ?[>+~]/.test(this.selector) ) {
+ return Array.from(PSelectorSpathTask.qsa(input, this.selector));
+ }
+ return Array.from(root.querySelectorAll(this.selector));
+ }
+ exec(input) {
+ let nodes = this.prime(input);
+ for ( const task of this.tasks ) {
+ if ( nodes.length === 0 ) { break; }
+ const transposed = [];
+ for ( const node of nodes ) {
+ task.transpose(node, transposed);
+ }
+ nodes = transposed;
+ }
+ return nodes;
+ }
+ test(input) {
+ const nodes = this.prime(input);
+ for ( const node of nodes ) {
+ let output = [ node ];
+ for ( const task of this.tasks ) {
+ const transposed = [];
+ for ( const node of output ) {
+ task.transpose(node, transposed);
+ }
+ output = transposed;
+ if ( output.length === 0 ) { break; }
+ }
+ if ( output.length !== 0 ) { return true; }
+ }
+ return false;
+ }
+}
+PSelector.prototype.operatorToTaskMap = new Map([
+ [ 'has', PSelectorIfTask ],
+ [ 'has-text', PSelectorHasTextTask ],
+ [ 'if', PSelectorIfTask ],
+ [ 'if-not', PSelectorIfNotTask ],
+ [ 'min-text-length', PSelectorMinTextLengthTask ],
+ [ 'not', PSelectorIfNotTask ],
+ [ 'nth-ancestor', PSelectorUpwardTask ],
+ [ 'spath', PSelectorSpathTask ],
+ [ 'upward', PSelectorUpwardTask ],
+ [ 'xpath', PSelectorXpathTask ],
+]);
+
+function logOne(details, exception, selector) {
+ µb.filteringContext
+ .duplicate()
+ .fromTabId(details.tabId)
+ .setRealm('extended')
+ .setType('dom')
+ .setURL(details.url)
+ .setDocOriginFromURL(details.url)
+ .setFilter({
+ source: 'extended',
+ raw: `${exception === 0 ? '##' : '#@#'}^${selector}`
+ })
+ .toLogger();
+}
+
+function applyProceduralSelector(details, selector) {
+ let pselector = pselectors.get(selector);
+ if ( pselector === undefined ) {
+ pselector = new PSelector(JSON.parse(selector));
+ pselectors.set(selector, pselector);
+ }
+ const nodes = pselector.exec();
+ let modified = false;
+ for ( const node of nodes ) {
+ node.remove();
+ modified = true;
+ }
+ if ( modified && logger.enabled ) {
+ logOne(details, 0, pselector.raw);
+ }
+ return modified;
+}
+
+function applyCSSSelector(details, selector) {
+ const nodes = docRegister.querySelectorAll(selector);
+ let modified = false;
+ for ( const node of nodes ) {
+ node.remove();
+ modified = true;
+ }
+ if ( modified && logger.enabled ) {
+ logOne(details, 0, selector);
+ }
+ return modified;
+}
+
+function logError(writer, msg) {
+ logger.writeOne({
+ realm: 'message',
+ type: 'error',
+ text: msg.replace('{who}', writer.properties.get('name') || '?')
+ });
+}
+
+htmlFilteringEngine.reset = function() {
+ filterDB.clear();
+ pselectors.clear();
+ duplicates.clear();
+ acceptedCount = 0;
+ discardedCount = 0;
+};
+
+htmlFilteringEngine.freeze = function() {
+ duplicates.clear();
+ filterDB.collectGarbage();
+};
+
+htmlFilteringEngine.compile = function(parser, writer) {
+ const isException = parser.isException();
+ const { raw, compiled } = parser.result;
+ if ( compiled === undefined ) {
+ return logError(writer, `Invalid HTML filter in {who}: ##${raw}`);
+ }
+
+ writer.select('HTML_FILTERS');
+
+ // Only exception filters are allowed to be global.
+ if ( parser.hasOptions() === false ) {
+ if ( isException ) {
+ writer.push([ 64, '', 1, compiled ]);
+ }
+ return;
+ }
+
+ const compiledFilters = [];
+ let hasOnlyNegated = true;
+ for ( const { hn, not, bad } of parser.getExtFilterDomainIterator() ) {
+ if ( bad ) { continue; }
+ let kind = isException ? 0b01 : 0b00;
+ if ( not ) {
+ kind ^= 0b01;
+ } else {
+ hasOnlyNegated = false;
+ }
+ if ( compiled.charCodeAt(0) === 0x7B /* '{' */ ) {
+ kind |= 0b10;
+ }
+ compiledFilters.push([ 64, hn, kind, compiled ]);
+ }
+
+ // Not allowed since it's equivalent to forbidden generic HTML filters
+ if ( isException === false && hasOnlyNegated ) {
+ return logError(writer, `Invalid HTML filter in {who}: ##${raw}`);
+ }
+
+ writer.pushMany(compiledFilters);
+};
+
+htmlFilteringEngine.fromCompiledContent = function(reader) {
+ // Don't bother loading filters if stream filtering is not supported.
+ if ( µb.canFilterResponseData === false ) { return; }
+
+ reader.select('HTML_FILTERS');
+
+ while ( reader.next() ) {
+ acceptedCount += 1;
+ const fingerprint = reader.fingerprint();
+ if ( duplicates.has(fingerprint) ) {
+ discardedCount += 1;
+ continue;
+ }
+ duplicates.add(fingerprint);
+ const args = reader.args();
+ filterDB.store(args[1], args[2], args[3]);
+ }
+};
+
+htmlFilteringEngine.retrieve = function(fctxt) {
+ const plains = new Set();
+ const procedurals = new Set();
+ const exceptions = new Set();
+ const retrieveSets = [ plains, exceptions, procedurals, exceptions ];
+
+ const hostname = fctxt.getHostname();
+ filterDB.retrieve(hostname, retrieveSets);
+
+ const domain = fctxt.getDomain();
+ const entity = entityFromDomain(domain);
+ const hostnameEntity = entity !== ''
+ ? `${hostname.slice(0, -domain.length)}${entity}`
+ : '*';
+ filterDB.retrieve(hostnameEntity, retrieveSets, 1);
+
+ if ( plains.size === 0 && procedurals.size === 0 ) { return; }
+
+ // https://github.com/gorhill/uBlock/issues/2835
+ // Do not filter if the site is under an `allow` rule.
+ if (
+ µb.userSettings.advancedUserEnabled &&
+ sessionFirewall.evaluateCellZY(hostname, hostname, '*') === 2
+ ) {
+ return;
+ }
+
+ const out = { plains, procedurals };
+
+ if ( exceptions.size === 0 ) {
+ return out;
+ }
+
+ for ( const selector of exceptions ) {
+ if ( plains.has(selector) ) {
+ plains.delete(selector);
+ logOne(fctxt, 1, selector);
+ continue;
+ }
+ if ( procedurals.has(selector) ) {
+ procedurals.delete(selector);
+ logOne(fctxt, 1, JSON.parse(selector).raw);
+ continue;
+ }
+ }
+
+ if ( plains.size !== 0 || procedurals.size !== 0 ) {
+ return out;
+ }
+};
+
+htmlFilteringEngine.apply = function(doc, details, selectors) {
+ docRegister = doc;
+ let modified = false;
+ for ( const selector of selectors.plains ) {
+ if ( applyCSSSelector(details, selector) ) {
+ modified = true;
+ }
+ }
+ for ( const selector of selectors.procedurals ) {
+ if ( applyProceduralSelector(details, selector) ) {
+ modified = true;
+ }
+ }
+ docRegister = undefined;
+ return modified;
+};
+
+htmlFilteringEngine.toSelfie = function() {
+ return filterDB.toSelfie();
+};
+
+htmlFilteringEngine.fromSelfie = function(selfie) {
+ filterDB.fromSelfie(selfie);
+ pselectors.clear();
+};
+
+/******************************************************************************/
+
+export default htmlFilteringEngine;
+
+/******************************************************************************/
diff --git a/src/js/httpheader-filtering.js b/src/js/httpheader-filtering.js
new file mode 100644
index 0000000..522ea21
--- /dev/null
+++ b/src/js/httpheader-filtering.js
@@ -0,0 +1,213 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2021-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import logger from './logger.js';
+import µb from './background.js';
+import { entityFromDomain } from './uri-utils.js';
+import { sessionFirewall } from './filtering-engines.js';
+import { StaticExtFilteringHostnameDB } from './static-ext-filtering-db.js';
+import * as sfp from './static-filtering-parser.js';
+
+/******************************************************************************/
+
+const duplicates = new Set();
+const filterDB = new StaticExtFilteringHostnameDB(1);
+
+const $headers = new Set();
+const $exceptions = new Set();
+
+let acceptedCount = 0;
+let discardedCount = 0;
+
+const headerIndexFromName = function(name, headers, start = 0) {
+ for ( let i = start; i < headers.length; i++ ) {
+ if ( headers[i].name.toLowerCase() !== name ) { continue; }
+ return i;
+ }
+ return -1;
+};
+
+const logOne = function(isException, token, fctxt) {
+ fctxt.duplicate()
+ .setRealm('extended')
+ .setType('header')
+ .setFilter({
+ modifier: true,
+ result: isException ? 2 : 1,
+ source: 'extended',
+ raw: `${(isException ? '#@#' : '##')}^responseheader(${token})`
+ })
+ .toLogger();
+};
+
+const httpheaderFilteringEngine = {
+ get acceptedCount() {
+ return acceptedCount;
+ },
+ get discardedCount() {
+ return discardedCount;
+ }
+};
+
+httpheaderFilteringEngine.reset = function() {
+ filterDB.clear();
+ duplicates.clear();
+ acceptedCount = 0;
+ discardedCount = 0;
+};
+
+httpheaderFilteringEngine.freeze = function() {
+ duplicates.clear();
+ filterDB.collectGarbage();
+};
+
+httpheaderFilteringEngine.compile = function(parser, writer) {
+ writer.select('HTTPHEADER_FILTERS');
+
+ const isException = parser.isException();
+ const root = parser.getBranchFromType(sfp.NODE_TYPE_EXT_PATTERN_RESPONSEHEADER);
+ const headerName = parser.getNodeString(root);
+
+ // Tokenless is meaningful only for exception filters.
+ if ( headerName === '' && isException === false ) { return; }
+
+ // Only exception filters are allowed to be global.
+ if ( parser.hasOptions() === false ) {
+ if ( isException ) {
+ writer.push([ 64, '', 1, headerName ]);
+ }
+ return;
+ }
+
+ // https://github.com/gorhill/uBlock/issues/3375
+ // Ignore instances of exception filter with negated hostnames,
+ // because there is no way to create an exception to an exception.
+
+ for ( const { hn, not, bad } of parser.getExtFilterDomainIterator() ) {
+ if ( bad ) { continue; }
+ let kind = 0;
+ if ( isException ) {
+ if ( not ) { continue; }
+ kind |= 1;
+ } else if ( not ) {
+ kind |= 1;
+ }
+ writer.push([ 64, hn, kind, headerName ]);
+ }
+};
+
+// 01234567890123456789
+// responseheader(name)
+// ^ ^
+// 15 -1
+
+httpheaderFilteringEngine.fromCompiledContent = function(reader) {
+ reader.select('HTTPHEADER_FILTERS');
+
+ while ( reader.next() ) {
+ acceptedCount += 1;
+ const fingerprint = reader.fingerprint();
+ if ( duplicates.has(fingerprint) ) {
+ discardedCount += 1;
+ continue;
+ }
+ duplicates.add(fingerprint);
+ const args = reader.args();
+ if ( args.length < 4 ) { continue; }
+ filterDB.store(args[1], args[2], args[3]);
+ }
+};
+
+httpheaderFilteringEngine.apply = function(fctxt, headers) {
+ if ( filterDB.size === 0 ) { return; }
+
+ const hostname = fctxt.getHostname();
+ if ( hostname === '' ) { return; }
+
+ const domain = fctxt.getDomain();
+ let entity = entityFromDomain(domain);
+ if ( entity !== '' ) {
+ entity = `${hostname.slice(0, -domain.length)}${entity}`;
+ } else {
+ entity = '*';
+ }
+
+ $headers.clear();
+ $exceptions.clear();
+
+ filterDB.retrieve(hostname, [ $headers, $exceptions ]);
+ filterDB.retrieve(entity, [ $headers, $exceptions ], 1);
+ if ( $headers.size === 0 ) { return; }
+
+ // https://github.com/gorhill/uBlock/issues/2835
+ // Do not filter response headers if the site is under an `allow` rule.
+ if (
+ µb.userSettings.advancedUserEnabled &&
+ sessionFirewall.evaluateCellZY(hostname, hostname, '*') === 2
+ ) {
+ return;
+ }
+
+ const hasGlobalException = $exceptions.has('');
+
+ let modified = false;
+ let i = 0;
+
+ for ( const name of $headers ) {
+ const isExcepted = hasGlobalException || $exceptions.has(name);
+ if ( isExcepted ) {
+ if ( logger.enabled ) {
+ logOne(true, hasGlobalException ? '' : name, fctxt);
+ }
+ continue;
+ }
+ i = 0;
+ for (;;) {
+ i = headerIndexFromName(name, headers, i);
+ if ( i === -1 ) { break; }
+ headers.splice(i, 1);
+ if ( logger.enabled ) {
+ logOne(false, name, fctxt);
+ }
+ modified = true;
+ }
+ }
+
+ return modified;
+};
+
+httpheaderFilteringEngine.toSelfie = function() {
+ return filterDB.toSelfie();
+};
+
+httpheaderFilteringEngine.fromSelfie = function(selfie) {
+ filterDB.fromSelfie(selfie);
+};
+
+/******************************************************************************/
+
+export default httpheaderFilteringEngine;
+
+/******************************************************************************/
diff --git a/src/js/i18n.js b/src/js/i18n.js
new file mode 100644
index 0000000..6302b35
--- /dev/null
+++ b/src/js/i18n.js
@@ -0,0 +1,346 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+const i18n =
+ self.browser instanceof Object &&
+ self.browser instanceof Element === false
+ ? self.browser.i18n
+ : self.chrome.i18n;
+
+/******************************************************************************/
+
+function i18n$(...args) {
+ return i18n.getMessage(...args);
+}
+
+/******************************************************************************/
+
+const isBackgroundProcess = document.title === 'uBlock Origin Background Page';
+
+if ( isBackgroundProcess !== true ) {
+
+ // http://www.w3.org/International/questions/qa-scripts#directions
+ document.body.setAttribute(
+ 'dir',
+ ['ar', 'he', 'fa', 'ps', 'ur'].indexOf(i18n$('@@ui_locale')) !== -1
+ ? 'rtl'
+ : 'ltr'
+ );
+
+ // https://github.com/gorhill/uBlock/issues/2084
+ // Anything else than <a>, <b>, <code>, <em>, <i>, and <span> will
+ // be rendered as plain text.
+ // For <a>, only href attribute must be present, and it MUST starts with
+ // `https://`, and includes no single- or double-quotes.
+ // No HTML entities are allowed, there is code to handle existing HTML
+ // entities already present in translation files until they are all gone.
+
+ const allowedTags = new Set([
+ 'a',
+ 'b',
+ 'code',
+ 'em',
+ 'i',
+ 'span',
+ 'u',
+ ]);
+
+ const expandHtmlEntities = (( ) => {
+ const entities = new Map([
+ // TODO: Remove quote entities once no longer present in translation
+ // files. Other entities must stay.
+ [ '&shy;', '\u00AD' ],
+ [ '&ldquo;', '“' ],
+ [ '&rdquo;', '”' ],
+ [ '&lsquo;', '‘' ],
+ [ '&rsquo;', '’' ],
+ [ '&lt;', '<' ],
+ [ '&gt;', '>' ],
+ ]);
+ const decodeEntities = match => {
+ return entities.get(match) || match;
+ };
+ return function(text) {
+ if ( text.indexOf('&') !== -1 ) {
+ text = text.replace(/&[a-z]+;/g, decodeEntities);
+ }
+ return text;
+ };
+ })();
+
+ const safeTextToTextNode = function(text) {
+ return document.createTextNode(expandHtmlEntities(text));
+ };
+
+ const sanitizeElement = function(node) {
+ if ( allowedTags.has(node.localName) === false ) { return null; }
+ node.removeAttribute('style');
+ let child = node.firstElementChild;
+ while ( child !== null ) {
+ const next = child.nextElementSibling;
+ if ( sanitizeElement(child) === null ) {
+ child.remove();
+ }
+ child = next;
+ }
+ return node;
+ };
+
+ const safeTextToDOM = function(text, parent) {
+ if ( text === '' ) { return; }
+
+ // Fast path (most common).
+ if ( text.indexOf('<') === -1 ) {
+ const toInsert = safeTextToTextNode(text);
+ let toReplace = parent.childCount !== 0
+ ? parent.firstChild
+ : null;
+ while ( toReplace !== null ) {
+ if ( toReplace.nodeType === 3 && toReplace.nodeValue === '_' ) {
+ break;
+ }
+ toReplace = toReplace.nextSibling;
+ }
+ if ( toReplace !== null ) {
+ parent.replaceChild(toInsert, toReplace);
+ } else {
+ parent.appendChild(toInsert);
+ }
+ return;
+ }
+
+ // Slow path.
+ // `<p>` no longer allowed. Code below can be removed once all <p>'s are
+ // gone from translation files.
+ text = text.replace(/^<p>|<\/p>/g, '')
+ .replace(/<p>/g, '\n\n');
+ // Parse allowed HTML tags.
+ const domParser = new DOMParser();
+ const parsedDoc = domParser.parseFromString(text, 'text/html');
+ let node = parsedDoc.body.firstChild;
+ while ( node !== null ) {
+ const next = node.nextSibling;
+ switch ( node.nodeType ) {
+ case 1: // element
+ if ( sanitizeElement(node) === null ) { break; }
+ parent.appendChild(node);
+ break;
+ case 3: // text
+ parent.appendChild(node);
+ break;
+ default:
+ break;
+ }
+ node = next;
+ }
+ };
+
+ i18n.safeTemplateToDOM = function(id, dict, parent) {
+ if ( parent === undefined ) {
+ parent = document.createDocumentFragment();
+ }
+ let textin = i18n$(id);
+ if ( textin === '' ) {
+ return parent;
+ }
+ if ( textin.indexOf('{{') === -1 ) {
+ safeTextToDOM(textin, parent);
+ return parent;
+ }
+ const re = /\{\{\w+\}\}/g;
+ let textout = '';
+ for (;;) {
+ let match = re.exec(textin);
+ if ( match === null ) {
+ textout += textin;
+ break;
+ }
+ textout += textin.slice(0, match.index);
+ let prop = match[0].slice(2, -2);
+ if ( dict.hasOwnProperty(prop) ) {
+ textout += dict[prop].replace(/</g, '&lt;')
+ .replace(/>/g, '&gt;');
+ } else {
+ textout += prop;
+ }
+ textin = textin.slice(re.lastIndex);
+ }
+ safeTextToDOM(textout, parent);
+ return parent;
+ };
+
+ // Helper to deal with the i18n'ing of HTML files.
+ i18n.render = function(context) {
+ const docu = document;
+ const root = context || docu;
+
+ for ( const elem of root.querySelectorAll('[data-i18n]') ) {
+ let text = i18n$(elem.getAttribute('data-i18n'));
+ if ( !text ) { continue; }
+ if ( text.indexOf('{{') === -1 ) {
+ safeTextToDOM(text, elem);
+ continue;
+ }
+ // Handle selector-based placeholders: these placeholders tell where
+ // existing child DOM element are to be positioned relative to the
+ // localized text nodes.
+ const parts = text.split(/(\{\{[^}]+\}\})/);
+ const fragment = document.createDocumentFragment();
+ let textBefore = '';
+ for ( let part of parts ) {
+ if ( part === '' ) { continue; }
+ if ( part.startsWith('{{') && part.endsWith('}}') ) {
+ // TODO: remove detection of ':' once it no longer appears
+ // in translation files.
+ const pos = part.indexOf(':');
+ if ( pos !== -1 ) {
+ part = part.slice(0, pos) + part.slice(-2);
+ }
+ const selector = part.slice(2, -2);
+ let node;
+ // Ideally, the i18n strings explicitly refer to the
+ // class of the element to insert. However for now we
+ // will create a class from what is currently found in
+ // the placeholder and first try to lookup the resulting
+ // selector. This way we don't have to revisit all
+ // translations just for the sake of declaring the proper
+ // selector in the placeholder field.
+ if ( selector.charCodeAt(0) !== 0x2E /* '.' */ ) {
+ node = elem.querySelector(`.${selector}`);
+ }
+ if ( node instanceof Element === false ) {
+ node = elem.querySelector(selector);
+ }
+ if ( node instanceof Element ) {
+ safeTextToDOM(textBefore, fragment);
+ fragment.appendChild(node);
+ textBefore = '';
+ continue;
+ }
+ }
+ textBefore += part;
+ }
+ if ( textBefore !== '' ) {
+ safeTextToDOM(textBefore, fragment);
+ }
+ elem.appendChild(fragment);
+ }
+
+ for ( const elem of root.querySelectorAll('[data-i18n-title]') ) {
+ const text = i18n$(elem.getAttribute('data-i18n-title'));
+ if ( !text ) { continue; }
+ elem.setAttribute('title', expandHtmlEntities(text));
+ }
+
+ for ( const elem of root.querySelectorAll('[placeholder]') ) {
+ const text = i18n$(elem.getAttribute('placeholder'));
+ if ( text === '' ) { continue; }
+ elem.setAttribute('placeholder', text);
+ }
+
+ for ( const elem of root.querySelectorAll('[data-i18n-tip]') ) {
+ const text = i18n$(elem.getAttribute('data-i18n-tip'))
+ .replace(/<br>/g, '\n')
+ .replace(/\n{3,}/g, '\n\n');
+ elem.setAttribute('data-tip', text);
+ if ( elem.getAttribute('aria-label') === 'data-tip' ) {
+ elem.setAttribute('aria-label', text);
+ }
+ }
+ };
+
+ i18n.renderElapsedTimeToString = function(tstamp) {
+ let value = (Date.now() - tstamp) / 60000;
+ if ( value < 2 ) {
+ return i18n$('elapsedOneMinuteAgo');
+ }
+ if ( value < 60 ) {
+ return i18n$('elapsedManyMinutesAgo').replace('{{value}}', Math.floor(value).toLocaleString());
+ }
+ value /= 60;
+ if ( value < 2 ) {
+ return i18n$('elapsedOneHourAgo');
+ }
+ if ( value < 24 ) {
+ return i18n$('elapsedManyHoursAgo').replace('{{value}}', Math.floor(value).toLocaleString());
+ }
+ value /= 24;
+ if ( value < 2 ) {
+ return i18n$('elapsedOneDayAgo');
+ }
+ return i18n$('elapsedManyDaysAgo').replace('{{value}}', Math.floor(value).toLocaleString());
+ };
+
+ const unicodeFlagToImageSrc = new Map([
+ [ '🇦🇱', 'al' ], [ '🇦🇷', 'ar' ], [ '🇦🇹', 'at' ], [ '🇧🇦', 'ba' ],
+ [ '🇧🇬', 'bg' ], [ '🇧🇷', 'br' ], [ '🇨🇦', 'ca' ], [ '🇨🇭', 'ch' ],
+ [ '🇨🇳', 'cn' ], [ '🇨🇴', 'co' ], [ '🇨🇾', 'cy' ], [ '🇨🇿', 'cz' ],
+ [ '🇩🇪', 'de' ], [ '🇩🇰', 'dk' ], [ '🇩🇿', 'dz' ], [ '🇪🇪', 'ee' ],
+ [ '🇪🇬', 'eg' ], [ '🇪🇸', 'es' ], [ '🇫🇮', 'fi' ], [ '🇫🇴', 'fo' ],
+ [ '🇫🇷', 'fr' ], [ '🇬🇷', 'gr' ], [ '🇭🇷', 'hr' ], [ '🇭🇺', 'hu' ],
+ [ '🇮🇩', 'id' ], [ '🇮🇱', 'il' ], [ '🇮🇳', 'in' ], [ '🇮🇷', 'ir' ],
+ [ '🇮🇸', 'is' ], [ '🇮🇹', 'it' ], [ '🇯🇵', 'jp' ], [ '🇰🇷', 'kr' ],
+ [ '🇰🇿', 'kz' ], [ '🇱🇰', 'lk' ], [ '🇱🇹', 'lt' ], [ '🇱🇻', 'lv' ],
+ [ '🇲🇦', 'ma' ], [ '🇲🇩', 'md' ], [ '🇲🇰', 'mk' ], [ '🇲🇽', 'mx' ],
+ [ '🇲🇾', 'my' ], [ '🇳🇱', 'nl' ], [ '🇳🇴', 'no' ], [ '🇳🇵', 'np' ],
+ [ '🇵🇱', 'pl' ], [ '🇵🇹', 'pt' ], [ '🇷🇴', 'ro' ], [ '🇷🇸', 'rs' ],
+ [ '🇷🇺', 'ru' ], [ '🇸🇦', 'sa' ], [ '🇸🇮', 'si' ], [ '🇸🇰', 'sk' ],
+ [ '🇸🇪', 'se' ], [ '🇸🇷', 'sr' ], [ '🇹🇭', 'th' ], [ '🇹🇯', 'tj' ],
+ [ '🇹🇼', 'tw' ], [ '🇹🇷', 'tr' ], [ '🇺🇦', 'ua' ], [ '🇺🇿', 'uz' ],
+ [ '🇻🇳', 'vn' ], [ '🇽🇰', 'xk' ],
+ ]);
+ const reUnicodeFlags = new RegExp(
+ Array.from(unicodeFlagToImageSrc).map(a => a[0]).join('|'),
+ 'gu'
+ );
+ i18n.patchUnicodeFlags = function(text) {
+ const fragment = document.createDocumentFragment();
+ let i = 0;
+ for (;;) {
+ const match = reUnicodeFlags.exec(text);
+ if ( match === null ) { break; }
+ if ( match.index > i ) {
+ fragment.append(text.slice(i, match.index));
+ }
+ const img = document.createElement('img');
+ const countryCode = unicodeFlagToImageSrc.get(match[0]);
+ img.src = `/img/flags-of-the-world/${countryCode}.png`;
+ img.title = countryCode;
+ img.classList.add('countryFlag');
+ fragment.append(img, '\u200A');
+ i = reUnicodeFlags.lastIndex;
+ }
+ if ( i < text.length ) {
+ fragment.append(text.slice(i));
+ }
+ return fragment;
+ };
+
+ i18n.render();
+}
+
+/******************************************************************************/
+
+export { i18n, i18n$ };
diff --git a/src/js/logger-ui-inspector.js b/src/js/logger-ui-inspector.js
new file mode 100644
index 0000000..092baf8
--- /dev/null
+++ b/src/js/logger-ui-inspector.js
@@ -0,0 +1,710 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* globals browser */
+
+'use strict';
+
+import { dom, qs$, qsa$ } from './dom.js';
+
+/******************************************************************************/
+
+(( ) => {
+
+/******************************************************************************/
+
+const logger = self.logger;
+const showdomButton = qs$('#showdom');
+const inspector = qs$('#domInspector');
+const domTree = qs$('#domTree');
+const filterToIdMap = new Map();
+
+let inspectedTabId = 0;
+let inspectedURL = '';
+let inspectedHostname = '';
+let uidGenerator = 1;
+
+/*******************************************************************************
+ *
+ * How it works:
+ *
+ * 1. The logger/inspector is enabled from the logger window
+ *
+ * 2. The inspector content script is injected in the root frame of the tab
+ * currently selected in the logger
+ *
+ * 3. The inspector content script asks the logger/inspector to establish
+ * a two-way communication channel
+ *
+ * 3. The inspector content script embed an inspector frame in the document
+ * being inspected and waits for the inspector frame to be fully loaded
+ *
+ * 4. The inspector content script sends a messaging port object to the
+ * embedded inspector frame for a two-way communication channel between
+ * the inspector frame and the inspector content script
+ *
+ * 5. The inspector content script sends dom information to the
+ * logger/inspector
+ *
+ * */
+
+const contentInspectorChannel = (( ) => {
+ let bcChannel;
+ let toContentPort;
+
+ const start = ( ) => {
+ bcChannel = new globalThis.BroadcastChannel('contentInspectorChannel');
+ bcChannel.onmessage = ev => {
+ const msg = ev.data || {};
+ connect(msg.tabId, msg.frameId);
+ };
+ browser.webNavigation.onDOMContentLoaded.addListener(onContentLoaded);
+ };
+
+ const shutdown = ( ) => {
+ browser.webNavigation.onDOMContentLoaded.removeListener(onContentLoaded);
+ disconnect();
+ bcChannel.close();
+ bcChannel.onmessage = null;
+ bcChannel = undefined;
+ };
+
+ const connect = (tabId, frameId) => {
+ disconnect();
+ try {
+ toContentPort = browser.tabs.connect(tabId, { frameId });
+ toContentPort.onMessage.addListener(onContentMessage);
+ toContentPort.onDisconnect.addListener(onContentDisconnect);
+ } catch(_) {
+ }
+ };
+
+ const disconnect = ( ) => {
+ if ( toContentPort === undefined ) { return; }
+ toContentPort.onMessage.removeListener(onContentMessage);
+ toContentPort.onDisconnect.removeListener(onContentDisconnect);
+ toContentPort.disconnect();
+ toContentPort = undefined;
+ };
+
+ const send = msg => {
+ if ( toContentPort === undefined ) { return; }
+ toContentPort.postMessage(msg);
+ };
+
+ const onContentMessage = msg => {
+ if ( msg.what === 'domLayoutFull' ) {
+ inspectedURL = msg.url;
+ inspectedHostname = msg.hostname;
+ renderDOMFull(msg);
+ } else if ( msg.what === 'domLayoutIncremental' ) {
+ renderDOMIncremental(msg);
+ }
+ };
+
+ const onContentDisconnect = ( ) => {
+ disconnect();
+ };
+
+ const onContentLoaded = details => {
+ if ( details.tabId !== inspectedTabId ) { return; }
+ if ( details.frameId !== 0 ) { return; }
+ disconnect();
+ injectInspector();
+ };
+
+ return { start, disconnect, send, shutdown };
+})();
+
+/******************************************************************************/
+
+const nodeFromDomEntry = entry => {
+ const li = document.createElement('li');
+ dom.attr(li, 'id', entry.nid);
+ // expander/collapser
+ li.appendChild(document.createElement('span'));
+ // selector
+ let node = document.createElement('code');
+ node.textContent = entry.sel;
+ li.appendChild(node);
+ // descendant count
+ let value = entry.cnt || 0;
+ node = document.createElement('span');
+ node.textContent = value !== 0 ? value.toLocaleString() : '';
+ dom.attr(node, 'data-cnt', value);
+ li.appendChild(node);
+ // cosmetic filter
+ if ( entry.filter === undefined ) {
+ return li;
+ }
+ node = document.createElement('code');
+ dom.cl.add(node, 'filter');
+ value = filterToIdMap.get(entry.filter);
+ if ( value === undefined ) {
+ value = `${uidGenerator}`;
+ filterToIdMap.set(entry.filter, value);
+ uidGenerator += 1;
+ }
+ dom.attr(node, 'data-filter-id', value);
+ node.textContent = entry.filter;
+ li.appendChild(node);
+ dom.cl.add(li, 'isCosmeticHide');
+ return li;
+};
+
+/******************************************************************************/
+
+const appendListItem = (ul, li) => {
+ ul.appendChild(li);
+ // Ancestor nodes of a node which is affected by a cosmetic filter will
+ // be marked as "containing cosmetic filters", for user convenience.
+ if ( dom.cl.has(li, 'isCosmeticHide') === false ) { return; }
+ for (;;) {
+ li = li.parentElement.parentElement;
+ if ( li === null ) { break; }
+ dom.cl.add(li, 'hasCosmeticHide');
+ }
+};
+
+/******************************************************************************/
+
+const renderDOMFull = response => {
+ const domTreeParent = domTree.parentElement;
+ let ul = domTreeParent.removeChild(domTree);
+ logger.removeAllChildren(domTree);
+
+ filterToIdMap.clear();
+
+ let lvl = 0;
+ let li;
+ for ( const entry of response.layout ) {
+ if ( entry.lvl === lvl ) {
+ li = nodeFromDomEntry(entry);
+ appendListItem(ul, li);
+ continue;
+ }
+ if ( entry.lvl > lvl ) {
+ ul = document.createElement('ul');
+ li.appendChild(ul);
+ dom.cl.add(li, 'branch');
+ li = nodeFromDomEntry(entry);
+ appendListItem(ul, li);
+ lvl = entry.lvl;
+ continue;
+ }
+ // entry.lvl < lvl
+ while ( entry.lvl < lvl ) {
+ ul = li.parentNode;
+ li = ul.parentNode;
+ ul = li.parentNode;
+ lvl -= 1;
+ }
+ li = nodeFromDomEntry(entry);
+ appendListItem(ul, li);
+ }
+ while ( ul.parentNode !== null ) {
+ ul = ul.parentNode;
+ }
+ dom.cl.add(ul.firstElementChild, 'show');
+
+ domTreeParent.appendChild(domTree);
+};
+
+/******************************************************************************/
+
+const patchIncremental = (from, delta) => {
+ let li = from.parentElement.parentElement;
+ const patchCosmeticHide = delta >= 0 &&
+ dom.cl.has(from, 'isCosmeticHide') &&
+ dom.cl.has(li, 'hasCosmeticHide') === false;
+ // Include descendants count when removing a node
+ if ( delta < 0 ) {
+ delta -= countFromNode(from);
+ }
+ for ( ; li.localName === 'li'; li = li.parentElement.parentElement ) {
+ const span = li.children[2];
+ if ( delta !== 0 ) {
+ const cnt = countFromNode(li) + delta;
+ span.textContent = cnt !== 0 ? cnt.toLocaleString() : '';
+ dom.attr(span, 'data-cnt', cnt);
+ }
+ if ( patchCosmeticHide ) {
+ dom.cl.add(li, 'hasCosmeticHide');
+ }
+ }
+};
+
+/******************************************************************************/
+
+const renderDOMIncremental = response => {
+ // Process each journal entry:
+ // 1 = node added
+ // -1 = node removed
+ const nodes = new Map(response.nodes);
+ let li = null;
+ let ul = null;
+ for ( const entry of response.journal ) {
+ // Remove node
+ if ( entry.what === -1 ) {
+ li = qs$(`#${entry.nid}`);
+ if ( li === null ) { continue; }
+ patchIncremental(li, -1);
+ li.parentNode.removeChild(li);
+ continue;
+ }
+ // Modify node
+ if ( entry.what === 0 ) {
+ // TODO: update selector/filter
+ continue;
+ }
+ // Add node as sibling
+ if ( entry.what === 1 && entry.l ) {
+ const previous = qs$(`#${entry.l}`);
+ // This should not happen
+ if ( previous === null ) {
+ // throw new Error('No left sibling!?');
+ continue;
+ }
+ ul = previous.parentElement;
+ li = nodeFromDomEntry(nodes.get(entry.nid));
+ ul.insertBefore(li, previous.nextElementSibling);
+ patchIncremental(li, 1);
+ continue;
+ }
+ // Add node as child
+ if ( entry.what === 1 && entry.u ) {
+ li = qs$(`#${entry.u}`);
+ // This should not happen
+ if ( li === null ) {
+ // throw new Error('No parent!?');
+ continue;
+ }
+ ul = qs$(li, 'ul');
+ if ( ul === null ) {
+ ul = document.createElement('ul');
+ li.appendChild(ul);
+ dom.cl.add(li, 'branch');
+ }
+ li = nodeFromDomEntry(nodes.get(entry.nid));
+ ul.appendChild(li);
+ patchIncremental(li, 1);
+ continue;
+ }
+ }
+};
+
+/******************************************************************************/
+
+const countFromNode = li => {
+ const span = li.children[2];
+ const cnt = parseInt(dom.attr(span, 'data-cnt'), 10);
+ return isNaN(cnt) ? 0 : cnt;
+};
+
+/******************************************************************************/
+
+const selectorFromNode = node => {
+ let selector = '';
+ while ( node !== null ) {
+ if ( node.localName === 'li' ) {
+ const code = qs$(node, 'code');
+ if ( code !== null ) {
+ selector = `${code.textContent} > ${selector}`;
+ if ( selector.includes('#') ) { break; }
+ }
+ }
+ node = node.parentElement;
+ }
+ return selector.slice(0, -3);
+};
+
+/******************************************************************************/
+
+const selectorFromFilter = node => {
+ while ( node !== null ) {
+ if ( node.localName === 'li' ) {
+ const code = qs$(node, 'code:nth-of-type(2)');
+ if ( code !== null ) {
+ return code.textContent;
+ }
+ }
+ node = node.parentElement;
+ }
+ return '';
+};
+
+/******************************************************************************/
+
+const nidFromNode = node => {
+ let li = node;
+ while ( li !== null ) {
+ if ( li.localName === 'li' ) {
+ return li.id || '';
+ }
+ li = li.parentElement;
+ }
+ return '';
+};
+
+/******************************************************************************/
+
+const startDialog = (( ) => {
+ let dialog;
+ let textarea;
+ let hideSelectors = [];
+ let unhideSelectors = [];
+
+ const parse = function() {
+ hideSelectors = [];
+ unhideSelectors = [];
+
+ const re = /^([^#]*)(#@?#)(.+)$/;
+ for ( let line of textarea.value.split(/\s*\n\s*/) ) {
+ line = line.trim();
+ if ( line === '' || line.charAt(0) === '!' ) { continue; }
+ const matches = re.exec(line);
+ if ( matches === null || matches.length !== 4 ) { continue; }
+ if ( inspectedHostname.lastIndexOf(matches[1]) === -1 ) {
+ continue;
+ }
+ if ( matches[2] === '##' ) {
+ hideSelectors.push(matches[3]);
+ } else {
+ unhideSelectors.push(matches[3]);
+ }
+ }
+
+ showCommitted();
+ };
+
+ const inputTimer = vAPI.defer.create(parse);
+
+ const onInputChanged = ( ) => {
+ inputTimer.on(743);
+ };
+
+ const onClicked = function(ev) {
+ const target = ev.target;
+
+ ev.stopPropagation();
+
+ if ( target.id === 'createCosmeticFilters' ) {
+ vAPI.messaging.send('loggerUI', {
+ what: 'createUserFilter',
+ filters: textarea.value,
+ });
+ // Force a reload for the new cosmetic filter(s) to take effect
+ vAPI.messaging.send('loggerUI', {
+ what: 'reloadTab',
+ tabId: inspectedTabId,
+ });
+ return stop();
+ }
+ };
+
+ const showCommitted = function() {
+ contentInspectorChannel.send({
+ what: 'showCommitted',
+ hide: hideSelectors.join(',\n'),
+ unhide: unhideSelectors.join(',\n')
+ });
+ };
+
+ const showInteractive = function() {
+ contentInspectorChannel.send({
+ what: 'showInteractive',
+ hide: hideSelectors.join(',\n'),
+ unhide: unhideSelectors.join(',\n')
+ });
+ };
+
+ const start = function() {
+ dialog = logger.modalDialog.create('#cosmeticFilteringDialog', stop);
+ textarea = qs$(dialog, 'textarea');
+ hideSelectors = [];
+ for ( const node of qsa$(domTree, 'code.off') ) {
+ if ( dom.cl.has(node, 'filter') ) { continue; }
+ hideSelectors.push(selectorFromNode(node));
+ }
+ const taValue = [];
+ for ( const selector of hideSelectors ) {
+ taValue.push(inspectedHostname + '##' + selector);
+ }
+ const ids = new Set();
+ for ( const node of qsa$(domTree, 'code.filter.off') ) {
+ const id = dom.attr(node, 'data-filter-id');
+ if ( ids.has(id) ) { continue; }
+ ids.add(id);
+ unhideSelectors.push(node.textContent);
+ taValue.push(inspectedHostname + '#@#' + node.textContent);
+ }
+ textarea.value = taValue.join('\n');
+ textarea.addEventListener('input', onInputChanged);
+ dialog.addEventListener('click', onClicked, true);
+ showCommitted();
+ logger.modalDialog.show();
+ };
+
+ const stop = function() {
+ inputTimer.off();
+ showInteractive();
+ textarea.removeEventListener('input', onInputChanged);
+ dialog.removeEventListener('click', onClicked, true);
+ dialog = undefined;
+ textarea = undefined;
+ hideSelectors = [];
+ unhideSelectors = [];
+ };
+
+ return start;
+})();
+
+/******************************************************************************/
+
+const onClicked = ev => {
+ ev.stopPropagation();
+
+ if ( inspectedTabId === 0 ) { return; }
+
+ const target = ev.target;
+ const parent = target.parentElement;
+
+ // Expand/collapse branch
+ if (
+ target.localName === 'span' &&
+ parent instanceof HTMLLIElement &&
+ dom.cl.has(parent, 'branch') &&
+ target === parent.firstElementChild
+ ) {
+ const state = dom.cl.toggle(parent, 'show');
+ if ( !state ) {
+ for ( const node of qsa$(parent, '.branch') ) {
+ dom.cl.remove(node, 'show');
+ }
+ }
+ return;
+ }
+
+ // Not a node or filter
+ if ( target.localName !== 'code' ) { return; }
+
+ // Toggle cosmetic filter
+ if ( dom.cl.has(target, 'filter') ) {
+ contentInspectorChannel.send({
+ what: 'toggleFilter',
+ original: false,
+ target: dom.cl.toggle(target, 'off'),
+ selector: selectorFromNode(target),
+ filter: selectorFromFilter(target),
+ nid: nidFromNode(target)
+ });
+ dom.cl.toggle(
+ qsa$(inspector, `[data-filter-id="${dom.attr(target, 'data-filter-id')}"]`),
+ 'off',
+ dom.cl.has(target, 'off')
+ );
+ }
+ // Toggle node
+ else {
+ contentInspectorChannel.send({
+ what: 'toggleNodes',
+ original: true,
+ target: dom.cl.toggle(target, 'off') === false,
+ selector: selectorFromNode(target),
+ nid: nidFromNode(target)
+ });
+ }
+
+ const cantCreate = qs$(domTree, '.off') === null;
+ dom.cl.toggle(qs$(inspector, '.permatoolbar .revert'), 'disabled', cantCreate);
+ dom.cl.toggle(qs$(inspector, '.permatoolbar .commit'), 'disabled', cantCreate);
+};
+
+/******************************************************************************/
+
+const onMouseOver = (( ) => {
+ let mouseoverTarget = null;
+
+ const mouseoverTimer = vAPI.defer.create(( ) => {
+ contentInspectorChannel.send({
+ what: 'highlightOne',
+ selector: selectorFromNode(mouseoverTarget),
+ nid: nidFromNode(mouseoverTarget),
+ scrollTo: true
+ });
+ });
+
+ return ev => {
+ if ( inspectedTabId === 0 ) { return; }
+ // Convenience: skip real-time highlighting if shift key is pressed.
+ if ( ev.shiftKey ) { return; }
+ // Find closest `li`
+ const target = ev.target.closest('li');
+ if ( target === mouseoverTarget ) { return; }
+ mouseoverTarget = target;
+ mouseoverTimer.on(50);
+ };
+})();
+
+/******************************************************************************/
+
+const currentTabId = ( ) => {
+ if ( dom.cl.has(showdomButton, 'active') === false ) { return 0; }
+ return logger.tabIdFromPageSelector();
+};
+
+/******************************************************************************/
+
+const injectInspector = (( ) => {
+ const timer = vAPI.defer.create(( ) => {
+ const tabId = currentTabId();
+ if ( tabId <= 0 ) { return; }
+ inspectedTabId = tabId;
+ vAPI.messaging.send('loggerUI', {
+ what: 'scriptlet',
+ tabId,
+ scriptlet: 'dom-inspector',
+ });
+ });
+ return ( ) => {
+ shutdownInspector();
+ timer.offon(353);
+ };
+})();
+
+/******************************************************************************/
+
+const shutdownInspector = ( ) => {
+ contentInspectorChannel.disconnect();
+ logger.removeAllChildren(domTree);
+ dom.cl.remove(inspector, 'vExpanded');
+ inspectedTabId = 0;
+};
+
+/******************************************************************************/
+
+const onTabIdChanged = ( ) => {
+ const tabId = currentTabId();
+ if ( tabId <= 0 ) {
+ return toggleOff();
+ }
+ if ( inspectedTabId !== tabId ) {
+ injectInspector();
+ }
+};
+
+/******************************************************************************/
+
+const toggleVExpandView = ( ) => {
+ const branches = qsa$('#domTree li.branch.show > ul > li.branch:not(.show)');
+ for ( const branch of branches ) {
+ dom.cl.add(branch, 'show');
+ }
+};
+
+const toggleVCompactView = ( ) => {
+ const branches = qsa$('#domTree li.branch.show > ul > li:not(.show)');
+ const tohideSet = new Set();
+ for ( const branch of branches ) {
+ const node = branch.closest('li.branch.show');
+ if ( node.id === 'n1' ) { continue; }
+ tohideSet.add(node);
+ }
+ const tohideList = Array.from(tohideSet);
+ let i = tohideList.length - 1;
+ while ( i > 0 ) {
+ if ( tohideList[i-1].contains(tohideList[i]) ) {
+ tohideList.splice(i-1, 1);
+ } else if ( tohideList[i].contains(tohideList[i-1]) ) {
+ tohideList.splice(i, 1);
+ }
+ i -= 1;
+ }
+ for ( const node of tohideList ) {
+ dom.cl.remove(node, 'show');
+ }
+};
+
+const toggleHCompactView = ( ) => {
+ dom.cl.toggle(inspector, 'hCompact');
+};
+
+/******************************************************************************/
+
+const revert = ( ) => {
+ dom.cl.remove('#domTree .off', 'off');
+ contentInspectorChannel.send({ what: 'resetToggledNodes' });
+ dom.cl.add(qs$(inspector, '.permatoolbar .revert'), 'disabled');
+ dom.cl.add(qs$(inspector, '.permatoolbar .commit'), 'disabled');
+};
+
+/******************************************************************************/
+
+const toggleOn = ( ) => {
+ dom.cl.add('#inspectors', 'dom');
+ window.addEventListener('beforeunload', toggleOff);
+ document.addEventListener('tabIdChanged', onTabIdChanged);
+ domTree.addEventListener('click', onClicked, true);
+ domTree.addEventListener('mouseover', onMouseOver, true);
+ dom.on('#domInspector .vExpandToggler', 'click', toggleVExpandView);
+ dom.on('#domInspector .vCompactToggler', 'click', toggleVCompactView);
+ dom.on('#domInspector .hCompactToggler', 'click', toggleHCompactView);
+ dom.on('#domInspector .permatoolbar .revert', 'click', revert);
+ dom.on('#domInspector .permatoolbar .commit', 'click', startDialog);
+ contentInspectorChannel.start();
+ injectInspector();
+};
+
+/******************************************************************************/
+
+const toggleOff = ( ) => {
+ dom.cl.remove(showdomButton, 'active');
+ dom.cl.remove('#inspectors', 'dom');
+ shutdownInspector();
+ window.removeEventListener('beforeunload', toggleOff);
+ document.removeEventListener('tabIdChanged', onTabIdChanged);
+ domTree.removeEventListener('click', onClicked, true);
+ domTree.removeEventListener('mouseover', onMouseOver, true);
+ dom.off('#domInspector .vExpandToggler', 'click', toggleVExpandView);
+ dom.off('#domInspector .vCompactToggler', 'click', toggleVCompactView);
+ dom.off('#domInspector .hCompactToggler', 'click', toggleHCompactView);
+ dom.off('#domInspector .permatoolbar .revert', 'click', revert);
+ dom.off('#domInspector .permatoolbar .commit', 'click', startDialog);
+ contentInspectorChannel.shutdown();
+ inspectedTabId = 0;
+};
+
+/******************************************************************************/
+
+const toggle = ( ) => {
+ if ( dom.cl.toggle(showdomButton, 'active') ) {
+ toggleOn();
+ } else {
+ toggleOff();
+ }
+ logger.resize();
+};
+
+dom.on(showdomButton, 'click', toggle);
+
+/******************************************************************************/
+
+})();
diff --git a/src/js/logger-ui.js b/src/js/logger-ui.js
new file mode 100644
index 0000000..177632e
--- /dev/null
+++ b/src/js/logger-ui.js
@@ -0,0 +1,3044 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+import { hostnameFromURI } from './uri-utils.js';
+import { i18n, i18n$ } from './i18n.js';
+import { dom, qs$, qsa$ } from './dom.js';
+
+/******************************************************************************/
+
+// TODO: fix the inconsistencies re. realm vs. filter source which have
+// accumulated over time.
+
+const messaging = vAPI.messaging;
+const logger = self.logger = { ownerId: Date.now() };
+const logDate = new Date();
+const logDateTimezoneOffset = logDate.getTimezoneOffset() * 60000;
+const loggerEntries = [];
+
+const COLUMN_TIMESTAMP = 0;
+const COLUMN_FILTER = 1;
+const COLUMN_MESSAGE = 1;
+const COLUMN_RESULT = 2;
+const COLUMN_INITIATOR = 3;
+const COLUMN_PARTYNESS = 4;
+const COLUMN_METHOD = 5;
+const COLUMN_TYPE = 6;
+const COLUMN_URL = 7;
+
+let filteredLoggerEntries = [];
+let filteredLoggerEntryVoidedCount = 0;
+
+let popupLoggerBox;
+let popupLoggerTooltips;
+let activeTabId = 0;
+let selectedTabId = 0;
+let netInspectorPaused = false;
+let cnameOfEnabled = false;
+
+/******************************************************************************/
+
+// Various helpers.
+
+const tabIdFromPageSelector = logger.tabIdFromPageSelector = function() {
+ const value = qs$('#pageSelector').value;
+ return value !== '_' ? (parseInt(value, 10) || 0) : activeTabId;
+};
+
+const tabIdFromAttribute = function(elem) {
+ const value = dom.attr(elem, 'data-tabid') || '';
+ const tabId = parseInt(value, 10);
+ return isNaN(tabId) ? 0 : tabId;
+};
+
+
+/******************************************************************************/
+/******************************************************************************/
+
+const onStartMovingWidget = (( ) => {
+ let widget = null;
+ let ondone = null;
+ let mx0 = 0, my0 = 0;
+ let mx1 = 0, my1 = 0;
+ let l0 = 0, t0 = 0;
+ let pw = 0, ph = 0;
+ let cw = 0, ch = 0;
+ let timer;
+
+ const xyFromEvent = ev => {
+ if ( ev.type.startsWith('mouse') ) {
+ return { x: ev.pageX, y: ev.pageY };
+ }
+ const touch = ev.touches[0];
+ return { x: touch.pageX, y: touch.pageY };
+ };
+
+ const eatEvent = function(ev) {
+ ev.stopPropagation();
+ if ( ev.touches !== undefined ) { return; }
+ ev.preventDefault();
+ };
+
+ const move = ( ) => {
+ timer = undefined;
+ const l1 = Math.min(Math.max(l0 + mx1 - mx0, 0), Math.max(pw - cw, 0));
+ if ( (l1+cw/2) < (pw/2) ) {
+ widget.style.left = `${l1/pw*100}%`;
+ widget.style.right = '';
+ } else {
+ widget.style.right = `${(pw-l1-cw)/pw*100}%`;
+ widget.style.left = '';
+ }
+ const t1 = Math.min(Math.max(t0 + my1 - my0, 0), Math.max(ph - ch, 0));
+ widget.style.top = `${t1/ph*100}%`;
+ widget.style.bottom = '';
+ };
+
+ const moveAsync = ev => {
+ if ( timer !== undefined ) { return; }
+ const coord = xyFromEvent(ev);
+ mx1 = coord.x; my1 = coord.y;
+ timer = self.requestAnimationFrame(move);
+ eatEvent(ev);
+ };
+
+ const stop = ev => {
+ if ( timer !== undefined ) {
+ self.cancelAnimationFrame(timer);
+ timer = undefined;
+ }
+ if ( widget === null ) { return; }
+ if ( widget.classList.contains('moving') === false ) { return; }
+ widget.classList.remove('moving');
+ self.removeEventListener('mousemove', moveAsync, { capture: true });
+ self.removeEventListener('touchmove', moveAsync, { capture: true });
+ eatEvent(ev);
+ widget = null;
+ if ( ondone !== null ) {
+ ondone();
+ ondone = null;
+ }
+ };
+
+ return function(ev, target, callback) {
+ if ( dom.cl.has(target, 'moving') ) { return; }
+ widget = target;
+ ondone = callback || null;
+ const coord = xyFromEvent(ev);
+ mx0 = coord.x; my0 = coord.y;
+ const widgetParent = widget.parentElement;
+ const crect = widget.getBoundingClientRect();
+ const prect = widgetParent.getBoundingClientRect();
+ pw = prect.width; ph = prect.height;
+ cw = crect.width; ch = crect.height;
+ l0 = crect.x - prect.x; t0 = crect.y - prect.y;
+ widget.classList.add('moving');
+ self.addEventListener('mousemove', moveAsync, { capture: true });
+ self.addEventListener('mouseup', stop, { capture: true, once: true });
+ self.addEventListener('touchmove', moveAsync, { capture: true });
+ self.addEventListener('touchend', stop, { capture: true, once: true });
+ eatEvent(ev);
+ };
+})();
+
+/******************************************************************************/
+/******************************************************************************/
+
+// Current design allows for only one modal DOM-based dialog at any given time.
+//
+const modalDialog = (( ) => {
+ const overlay = qs$('#modalOverlay');
+ const container = qs$('#modalOverlayContainer');
+ const closeButton = qs$(overlay, ':scope .closeButton');
+ let onDestroyed;
+
+ const removeChildren = logger.removeAllChildren = function(node) {
+ while ( node.firstChild ) {
+ node.removeChild(node.firstChild);
+ }
+ };
+
+ const create = function(selector, destroyListener) {
+ const template = qs$(selector);
+ const dialog = dom.clone(template);
+ removeChildren(container);
+ container.appendChild(dialog);
+ onDestroyed = destroyListener;
+ return dialog;
+ };
+
+ const show = function() {
+ dom.cl.add(overlay, 'on');
+ };
+
+ const destroy = function() {
+ dom.cl.remove(overlay, 'on');
+ const dialog = container.firstElementChild;
+ removeChildren(container);
+ if ( typeof onDestroyed === 'function' ) {
+ onDestroyed(dialog);
+ }
+ onDestroyed = undefined;
+ };
+
+ const onClose = function(ev) {
+ if ( ev.target === overlay || ev.target === closeButton ) {
+ destroy();
+ }
+ };
+ dom.on(overlay, 'click', onClose);
+ dom.on(closeButton, 'click', onClose);
+
+ return { create, show, destroy };
+})();
+
+self.logger.modalDialog = modalDialog;
+
+
+/******************************************************************************/
+/******************************************************************************/
+
+const prettyRequestTypes = {
+ 'main_frame': 'doc',
+ 'stylesheet': 'css',
+ 'sub_frame': 'frame',
+ 'xmlhttprequest': 'xhr'
+};
+
+const uglyRequestTypes = {
+ 'doc': 'main_frame',
+ 'css': 'stylesheet',
+ 'frame': 'sub_frame',
+ 'xhr': 'xmlhttprequest'
+};
+
+let allTabIds = new Map();
+let allTabIdsToken;
+
+/******************************************************************************/
+/******************************************************************************/
+
+const regexFromURLFilteringResult = function(result) {
+ const beg = result.indexOf(' ');
+ const end = result.indexOf(' ', beg + 1);
+ const url = result.slice(beg + 1, end);
+ if ( url === '*' ) {
+ return new RegExp('^.*$', 'gi');
+ }
+ return new RegExp('^' + url.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'gi');
+};
+
+/******************************************************************************/
+
+// Emphasize hostname in URL, as this is what matters in uMatrix's rules.
+
+const nodeFromURL = function(parent, url, re, type) {
+ const fragment = document.createDocumentFragment();
+ if ( re === undefined ) {
+ fragment.textContent = url;
+ } else {
+ if ( typeof re === 'string' ) {
+ re = new RegExp(re.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g');
+ }
+ const matches = re.exec(url);
+ if ( matches === null || matches[0].length === 0 ) {
+ fragment.textContent = url;
+ } else {
+ if ( matches.index !== 0 ) {
+ fragment.appendChild(
+ document.createTextNode(url.slice(0, matches.index))
+ );
+ }
+ const b = document.createElement('b');
+ b.textContent = url.slice(matches.index, re.lastIndex);
+ fragment.appendChild(b);
+ if ( re.lastIndex !== url.length ) {
+ fragment.appendChild(
+ document.createTextNode(url.slice(re.lastIndex))
+ );
+ }
+ }
+ }
+ if ( /^https?:\/\//.test(url) ) {
+ const a = document.createElement('a');
+ let href = url;
+ switch ( type ) {
+ case 'css':
+ case 'doc':
+ case 'frame':
+ case 'object':
+ case 'other':
+ case 'script':
+ case 'xhr':
+ href = `code-viewer.html?url=${encodeURIComponent(href)}`;
+ break;
+ default:
+ break;
+ }
+ dom.attr(a, 'href', href);
+ dom.attr(a, 'target', '_blank');
+ fragment.appendChild(a);
+ }
+ parent.appendChild(fragment);
+};
+
+/******************************************************************************/
+
+const padTo2 = function(v) {
+ return v < 10 ? '0' + v : v;
+};
+
+const normalizeToStr = function(s) {
+ return typeof s === 'string' && s !== '' ? s : '';
+};
+
+/******************************************************************************/
+
+const LogEntry = function(details) {
+ if ( details instanceof Object === false ) { return; }
+ const receiver = LogEntry.prototype;
+ for ( const prop in receiver ) {
+ if (
+ details.hasOwnProperty(prop) &&
+ details[prop] !== receiver[prop]
+ ) {
+ this[prop] = details[prop];
+ }
+ }
+ if ( details.aliasURL !== undefined ) {
+ this.aliased = true;
+ }
+ if ( this.tabDomain === '' ) {
+ this.tabDomain = this.tabHostname || '';
+ }
+ if ( this.docDomain === '' ) {
+ this.docDomain = this.docHostname || '';
+ }
+ if ( this.domain === '' ) {
+ this.domain = details.hostname || '';
+ }
+};
+LogEntry.prototype = {
+ aliased: false,
+ dead: false,
+ docDomain: '',
+ docHostname: '',
+ domain: '',
+ filter: undefined,
+ id: '',
+ method: '',
+ realm: '',
+ tabDomain: '',
+ tabHostname: '',
+ tabId: undefined,
+ textContent: '',
+ tstamp: 0,
+ type: '',
+ voided: false,
+};
+
+/******************************************************************************/
+
+const createLogSeparator = function(details, text) {
+ const separator = new LogEntry();
+ separator.tstamp = details.tstamp;
+ separator.realm = 'message';
+ separator.tabId = details.tabId;
+ separator.type = 'tabLoad';
+ separator.textContent = '';
+
+ const textContent = [];
+ logDate.setTime(separator.tstamp - logDateTimezoneOffset);
+ textContent.push(
+ // cell 0
+ padTo2(logDate.getUTCHours()) + ':' +
+ padTo2(logDate.getUTCMinutes()) + ':' +
+ padTo2(logDate.getSeconds()),
+ // cell 1
+ text
+ );
+ separator.textContent = textContent.join('\t');
+
+ if ( details.voided ) {
+ separator.voided = true;
+ }
+
+ return separator;
+};
+
+/******************************************************************************/
+
+// TODO: once refactoring is mature, consider using push() instead of
+// unshift(). This will require inverting the access logic
+// throughout the code.
+//
+const processLoggerEntries = function(response) {
+ const entries = response.entries;
+ if ( entries.length === 0 ) { return; }
+
+ const autoDeleteVoidedRows = qs$('#pageSelector').value === '_';
+ const previousCount = filteredLoggerEntries.length;
+
+ for ( const entry of entries ) {
+ const unboxed = JSON.parse(entry);
+ if ( unboxed.filter instanceof Object ){
+ loggerStats.processFilter(unboxed.filter);
+ }
+ if ( netInspectorPaused ) { continue; }
+ const parsed = parseLogEntry(unboxed);
+ if (
+ parsed.tabId !== undefined &&
+ allTabIds.has(parsed.tabId) === false
+ ) {
+ if ( autoDeleteVoidedRows ) { continue; }
+ parsed.voided = true;
+ }
+ if (
+ parsed.type === 'main_frame' &&
+ parsed.aliased === false && (
+ parsed.filter === undefined ||
+ parsed.filter.modifier !== true
+ )
+ ) {
+ const separator = createLogSeparator(parsed, unboxed.url);
+ loggerEntries.unshift(separator);
+ if ( rowFilterer.filterOne(separator) ) {
+ filteredLoggerEntries.unshift(separator);
+ if ( separator.voided ) {
+ filteredLoggerEntryVoidedCount += 1;
+ }
+ }
+ }
+ if ( cnameOfEnabled === false && parsed.aliased ) {
+ qs$('#filterExprCnameOf').style.display = '';
+ cnameOfEnabled = true;
+ }
+ loggerEntries.unshift(parsed);
+ if ( rowFilterer.filterOne(parsed) ) {
+ filteredLoggerEntries.unshift(parsed);
+ if ( parsed.voided ) {
+ filteredLoggerEntryVoidedCount += 1;
+ }
+ }
+ }
+
+ const addedCount = filteredLoggerEntries.length - previousCount;
+ if ( addedCount !== 0 ) {
+ viewPort.updateContent(addedCount);
+ rowJanitor.inserted(addedCount);
+ }
+};
+
+/******************************************************************************/
+
+const parseLogEntry = function(details) {
+ // Patch realm until changed all over codebase to make this unnecessary
+ if ( details.realm === 'cosmetic' ) {
+ details.realm = 'extended';
+ }
+
+ const entry = new LogEntry(details);
+
+ // Assemble the text content, i.e. the pre-built string which will be
+ // used to match logger output filtering expressions.
+ const textContent = [];
+
+ // Cell 0
+ logDate.setTime(details.tstamp - logDateTimezoneOffset);
+ textContent.push(
+ padTo2(logDate.getUTCHours()) + ':' +
+ padTo2(logDate.getUTCMinutes()) + ':' +
+ padTo2(logDate.getSeconds())
+ );
+
+ // Cell 1
+ if ( details.realm === 'message' ) {
+ textContent.push(details.text);
+ entry.textContent = textContent.join('\t');
+ return entry;
+ }
+
+ // Cell 1, 2
+ if ( entry.filter !== undefined ) {
+ textContent.push(entry.filter.raw);
+ if ( entry.filter.result === 1 ) {
+ textContent.push('--');
+ } else if ( entry.filter.result === 2 ) {
+ textContent.push('++');
+ } else if ( entry.filter.result === 3 ) {
+ textContent.push('**');
+ } else if ( entry.filter.source === 'redirect' ) {
+ textContent.push('<<');
+ } else {
+ textContent.push('');
+ }
+ } else {
+ textContent.push('', '');
+ }
+
+ // Cell 3
+ textContent.push(normalizeToStr(entry.docHostname));
+
+ // Cell 4: partyness
+ if (
+ entry.realm === 'network' &&
+ typeof entry.domain === 'string' &&
+ entry.domain !== ''
+ ) {
+ let partyness = '';
+ if ( entry.tabDomain !== undefined ) {
+ if ( entry.tabId < 0 ) {
+ partyness += '0,';
+ }
+ partyness += entry.domain === entry.tabDomain ? '1' : '3';
+ } else {
+ partyness += '?';
+ }
+ if ( entry.docDomain !== entry.tabDomain ) {
+ partyness += ',';
+ if ( entry.docDomain !== undefined ) {
+ partyness += entry.domain === entry.docDomain ? '1' : '3';
+ } else {
+ partyness += '?';
+ }
+ }
+ textContent.push(partyness);
+ } else {
+ textContent.push('');
+ }
+
+ // Cell 5: method
+ textContent.push(entry.method || '');
+
+ // Cell 6
+ textContent.push(
+ normalizeToStr(prettyRequestTypes[entry.type] || entry.type)
+ );
+
+ // Cell 7
+ textContent.push(normalizeToStr(details.url));
+
+ // Hidden cells -- useful for row-filtering purpose
+
+ // Cell 8
+ if ( entry.aliased ) {
+ textContent.push(`aliasURL=${details.aliasURL}`);
+ }
+
+ entry.textContent = textContent.join('\t');
+ return entry;
+};
+
+/******************************************************************************/
+
+const viewPort = (( ) => {
+ const vwRenderer = qs$('#vwRenderer');
+ const vwScroller = qs$('#vwScroller');
+ const vwVirtualContent = qs$('#vwVirtualContent');
+ const vwContent = qs$('#vwContent');
+ const vwLineSizer = qs$('#vwLineSizer');
+ const vwLogEntryTemplate = qs$('#logEntryTemplate > div');
+ const vwEntries = [];
+
+ const detailableRealms = new Set([ 'network', 'extended' ]);
+
+ let vwHeight = 0;
+ let lineHeight = 0;
+ let wholeHeight = 0;
+ let lastTopPix = 0;
+ let lastTopRow = 0;
+
+ const ViewEntry = function() {
+ this.div = document.createElement('div');
+ this.div.className = 'logEntry';
+ vwContent.appendChild(this.div);
+ this.logEntry = undefined;
+ };
+ ViewEntry.prototype = {
+ dispose: function() {
+ vwContent.removeChild(this.div);
+ },
+ };
+
+ const rowFromScrollTopPix = function(px) {
+ return lineHeight !== 0 ? Math.floor(px / lineHeight) : 0;
+ };
+
+ // This is called when the browser fired scroll events
+ const onScrollChanged = function() {
+ const newScrollTopPix = vwScroller.scrollTop;
+ const delta = newScrollTopPix - lastTopPix;
+ if ( delta === 0 ) { return; }
+ lastTopPix = newScrollTopPix;
+ if ( filteredLoggerEntries.length <= 2 ) { return; }
+ // No entries were rolled = all entries keep their current details
+ if ( rollLines(rowFromScrollTopPix(newScrollTopPix)) ) {
+ fillLines();
+ }
+ positionLines();
+ vwContent.style.top = `${lastTopPix}px`;
+ };
+
+ // Coalesce scroll events
+ const scrollTimer = vAPI.defer.create(onScrollChanged);
+ const onScroll = ( ) => {
+ scrollTimer.onvsync(1000/32);
+ };
+ dom.on(vwScroller, 'scroll', onScroll, { passive: true });
+
+ const onLayoutChanged = function() {
+ vwHeight = vwRenderer.clientHeight;
+ vwContent.style.height = `${vwScroller.clientHeight}px`;
+
+ const vExpanded =
+ dom.cl.has('#netInspector .vCompactToggler', 'vExpanded');
+
+ let newLineHeight = qs$(vwLineSizer, '.oneLine').clientHeight;
+
+ if ( vExpanded ) {
+ newLineHeight *= loggerSettings.linesPerEntry;
+ }
+
+ const lineCount = newLineHeight !== 0
+ ? Math.ceil(vwHeight / newLineHeight) + 1
+ : 0;
+ if ( lineCount > vwEntries.length ) {
+ do {
+ vwEntries.push(new ViewEntry());
+ } while ( lineCount > vwEntries.length );
+ } else if ( lineCount < vwEntries.length ) {
+ do {
+ vwEntries.pop().dispose();
+ } while ( lineCount < vwEntries.length );
+ }
+
+ const cellWidths = Array.from(
+ qsa$(vwLineSizer, '.oneLine span')
+ ).map((el, i) => {
+ return loggerSettings.columns[i] !== false
+ ? el.clientWidth + 1
+ : 0;
+ });
+ const reservedWidth =
+ cellWidths[COLUMN_TIMESTAMP] +
+ cellWidths[COLUMN_RESULT] +
+ cellWidths[COLUMN_PARTYNESS] +
+ cellWidths[COLUMN_METHOD] +
+ cellWidths[COLUMN_TYPE];
+ cellWidths[COLUMN_URL] = 0.5;
+ if ( cellWidths[COLUMN_FILTER] === 0 && cellWidths[COLUMN_INITIATOR] === 0 ) {
+ cellWidths[COLUMN_URL] = 1;
+ } else if ( cellWidths[COLUMN_FILTER] === 0 ) {
+ cellWidths[COLUMN_INITIATOR] = 0.35;
+ cellWidths[COLUMN_URL] = 0.65;
+ } else if ( cellWidths[COLUMN_INITIATOR] === 0 ) {
+ cellWidths[COLUMN_FILTER] = 0.35;
+ cellWidths[COLUMN_URL] = 0.65;
+ } else {
+ cellWidths[COLUMN_FILTER] = 0.25;
+ cellWidths[COLUMN_INITIATOR] = 0.25;
+ cellWidths[COLUMN_URL] = 0.5;
+ }
+ const style = qs$('#vwRendererRuntimeStyles');
+ const cssRules = [
+ '#vwContent .logEntry {',
+ ` height: ${newLineHeight}px;`,
+ '}',
+ `#vwContent .logEntry > div > span:nth-of-type(${COLUMN_TIMESTAMP+1}) {`,
+ ` width: ${cellWidths[COLUMN_TIMESTAMP]}px;`,
+ '}',
+ `#vwContent .logEntry > div > span:nth-of-type(${COLUMN_FILTER+1}) {`,
+ ` width: calc(calc(100% - ${reservedWidth}px) * ${cellWidths[COLUMN_FILTER]});`,
+ '}',
+ `#vwContent .logEntry > div.messageRealm > span:nth-of-type(${COLUMN_MESSAGE+1}) {`,
+ ` width: calc(100% - ${cellWidths[COLUMN_TIMESTAMP]}px);`,
+ '}',
+ `#vwContent .logEntry > div > span:nth-of-type(${COLUMN_RESULT+1}) {`,
+ ` width: ${cellWidths[COLUMN_RESULT]}px;`,
+ '}',
+ `#vwContent .logEntry > div > span:nth-of-type(${COLUMN_INITIATOR+1}) {`,
+ ` width: calc(calc(100% - ${reservedWidth}px) * ${cellWidths[COLUMN_INITIATOR]});`,
+ '}',
+ `#vwContent .logEntry > div > span:nth-of-type(${COLUMN_PARTYNESS+1}) {`,
+ ` width: ${cellWidths[COLUMN_PARTYNESS]}px;`,
+ '}',
+ `#vwContent .logEntry > div > span:nth-of-type(${COLUMN_METHOD+1}) {`,
+ ` width: ${cellWidths[COLUMN_METHOD]}px;`,
+ '}',
+ `#vwContent .logEntry > div > span:nth-of-type(${COLUMN_TYPE+1}) {`,
+ ` width: ${cellWidths[COLUMN_TYPE]}px;`,
+ '}',
+ `#vwContent .logEntry > div > span:nth-of-type(${COLUMN_URL+1}) {`,
+ ` width: calc(calc(100% - ${reservedWidth}px) * ${cellWidths[COLUMN_URL]});`,
+ '}',
+ '',
+ ];
+ for ( let i = 0; i < cellWidths.length; i++ ) {
+ if ( cellWidths[i] !== 0 ) { continue; }
+ cssRules.push(
+ `#vwContent .logEntry > div > span:nth-of-type(${i + 1}) {`,
+ ' display: none;',
+ '}'
+ );
+ }
+ style.textContent = cssRules.join('\n');
+
+ lineHeight = newLineHeight;
+ positionLines();
+ dom.cl.toggle('#netInspector', 'vExpanded', vExpanded);
+
+ updateContent(0);
+ };
+
+ const resizeTimer = vAPI.defer.create(onLayoutChanged);
+ const updateLayout = function() {
+ resizeTimer.onvsync(1000/8);
+ };
+ dom.on(window, 'resize', updateLayout, { passive: true });
+
+ updateLayout();
+
+ const renderFilterToSpan = function(span, filter) {
+ if ( filter.charCodeAt(0) !== 0x23 /* '#' */ ) { return false; }
+ const match = /^#@?#/.exec(filter);
+ if ( match === null ) { return false; }
+ let child = document.createElement('span');
+ child.textContent = match[0];
+ span.appendChild(child);
+ child = document.createElement('span');
+ child.textContent = filter.slice(match[0].length);
+ span.appendChild(child);
+ return true;
+ };
+
+ const renderToDiv = function(vwEntry, i) {
+ if ( i >= filteredLoggerEntries.length ) {
+ vwEntry.logEntry = undefined;
+ return null;
+ }
+
+ const details = filteredLoggerEntries[i];
+ if ( vwEntry.logEntry === details ) {
+ return vwEntry.div.firstElementChild;
+ }
+
+ vwEntry.logEntry = details;
+
+ const cells = details.textContent.split('\t');
+ const div = dom.clone(vwLogEntryTemplate);
+ const divcl = div.classList;
+ let span;
+
+ // Realm
+ if ( details.realm !== undefined ) {
+ divcl.add(details.realm + 'Realm');
+ }
+
+ // Timestamp
+ span = div.children[COLUMN_TIMESTAMP];
+ span.textContent = cells[COLUMN_TIMESTAMP];
+
+ // Tab id
+ if ( details.tabId !== undefined ) {
+ dom.attr(div, 'data-tabid', details.tabId);
+ if ( details.voided ) {
+ divcl.add('voided');
+ }
+ }
+
+ if ( details.realm === 'message' ) {
+ if ( details.type !== undefined ) {
+ dom.attr(div, 'data-type', details.type);
+ }
+ span = div.children[COLUMN_MESSAGE];
+ span.textContent = cells[COLUMN_MESSAGE];
+ return div;
+ }
+
+ if ( detailableRealms.has(details.realm) ) {
+ divcl.add('canDetails');
+ }
+
+ // Filter
+ const filter = details.filter || undefined;
+ let filteringType;
+ if ( filter !== undefined ) {
+ if ( typeof filter.source === 'string' ) {
+ filteringType = filter.source;
+ }
+ if ( filteringType === 'static' ) {
+ divcl.add('canLookup');
+ } else if ( details.realm === 'extended' ) {
+ divcl.toggle('canLookup', /^#@?#/.test(filter.raw));
+ divcl.toggle('isException', filter.raw.startsWith('#@#'));
+ }
+ if ( filter.modifier === true ) {
+ dom.attr(div, 'data-modifier', '');
+ }
+ }
+ span = div.children[COLUMN_FILTER];
+ if ( renderFilterToSpan(span, cells[COLUMN_FILTER]) ) {
+ if ( /^\+js\(.*\)$/.test(span.children[1].textContent) ) {
+ divcl.add('scriptlet');
+ }
+ } else {
+ span.textContent = cells[COLUMN_FILTER];
+ }
+
+ // Event
+ if ( cells[COLUMN_RESULT] === '--' ) {
+ dom.attr(div, 'data-status', '1');
+ } else if ( cells[COLUMN_RESULT] === '++' ) {
+ dom.attr(div, 'data-status', '2');
+ } else if ( cells[COLUMN_RESULT] === '**' ) {
+ dom.attr(div, 'data-status', '3');
+ } else if ( cells[COLUMN_RESULT] === '<<' ) {
+ divcl.add('redirect');
+ }
+ span = div.children[COLUMN_RESULT];
+ span.textContent = cells[COLUMN_RESULT];
+
+ // Origins
+ if ( details.tabHostname ) {
+ dom.attr(div, 'data-tabhn', details.tabHostname);
+ }
+ if ( details.docHostname ) {
+ dom.attr(div, 'data-dochn', details.docHostname);
+ }
+ span = div.children[COLUMN_INITIATOR];
+ span.textContent = cells[COLUMN_INITIATOR];
+
+ // Partyness
+ if (
+ cells[COLUMN_PARTYNESS] !== '' &&
+ details.realm === 'network' &&
+ details.domain !== undefined
+ ) {
+ let text = `${details.tabDomain}`;
+ if ( details.docDomain !== details.tabDomain ) {
+ text += ` \u22ef ${details.docDomain}`;
+ }
+ text += ` \u21d2 ${details.domain}`;
+ dom.attr(div, 'data-parties', text);
+ }
+ span = div.children[COLUMN_PARTYNESS];
+ span.textContent = cells[COLUMN_PARTYNESS];
+
+ // Method
+ span = div.children[COLUMN_METHOD];
+ span.textContent = cells[COLUMN_METHOD];
+
+ // Type
+ span = div.children[COLUMN_TYPE];
+ span.textContent = cells[COLUMN_TYPE];
+
+ // URL
+ let re;
+ if ( filteringType === 'static' ) {
+ re = new RegExp(filter.regex, 'gi');
+ } else if ( filteringType === 'dynamicUrl' ) {
+ re = regexFromURLFilteringResult(filter.rule.join(' '));
+ }
+ nodeFromURL(div.children[COLUMN_URL], cells[COLUMN_URL], re, cells[COLUMN_TYPE]);
+
+ // Alias URL (CNAME, etc.)
+ if ( cells.length > 8 ) {
+ const pos = details.textContent.lastIndexOf('\taliasURL=');
+ if ( pos !== -1 ) {
+ dom.attr(div, 'data-aliasid', details.id);
+ }
+ }
+
+ return div;
+ };
+
+ // The idea is that positioning DOM elements is faster than
+ // removing/inserting DOM elements.
+ const positionLines = function() {
+ if ( lineHeight === 0 ) { return; }
+ let y = -(lastTopPix % lineHeight);
+ for ( const vwEntry of vwEntries ) {
+ vwEntry.div.style.top = `${y}px`;
+ y += lineHeight;
+ }
+ };
+
+ const rollLines = function(topRow) {
+ let delta = topRow - lastTopRow;
+ let deltaLength = Math.abs(delta);
+ // No point rolling if no rows can be reused
+ if ( deltaLength > 0 && deltaLength < vwEntries.length ) {
+ if ( delta < 0 ) { // Move bottom rows to the top
+ vwEntries.unshift(...vwEntries.splice(delta));
+ } else { // Move top rows to the bottom
+ vwEntries.push(...vwEntries.splice(0, delta));
+ }
+ }
+ lastTopRow = topRow;
+ return delta;
+ };
+
+ const fillLines = function() {
+ let rowBeg = lastTopRow;
+ for ( const vwEntry of vwEntries ) {
+ const newDiv = renderToDiv(vwEntry, rowBeg);
+ const container = vwEntry.div;
+ const oldDiv = container.firstElementChild;
+ if ( newDiv !== null ) {
+ if ( oldDiv === null ) {
+ container.appendChild(newDiv);
+ } else if ( newDiv !== oldDiv ) {
+ container.removeChild(oldDiv);
+ container.appendChild(newDiv);
+ }
+ } else if ( oldDiv !== null ) {
+ container.removeChild(oldDiv);
+ }
+ rowBeg += 1;
+ }
+ };
+
+ const contentChanged = function(addedCount) {
+ lastTopRow += addedCount;
+ const newWholeHeight = Math.max(
+ filteredLoggerEntries.length * lineHeight,
+ vwRenderer.clientHeight
+ );
+ if ( newWholeHeight !== wholeHeight ) {
+ vwVirtualContent.style.height = `${newWholeHeight}px`;
+ wholeHeight = newWholeHeight;
+ }
+ };
+
+ const updateContent = function(addedCount) {
+ contentChanged(addedCount);
+ // Content changed
+ if ( addedCount === 0 ) {
+ if (
+ lastTopRow !== 0 &&
+ lastTopRow + vwEntries.length > filteredLoggerEntries.length
+ ) {
+ lastTopRow = filteredLoggerEntries.length - vwEntries.length;
+ if ( lastTopRow < 0 ) { lastTopRow = 0; }
+ lastTopPix = lastTopRow * lineHeight;
+ vwContent.style.top = `${lastTopPix}px`;
+ vwScroller.scrollTop = lastTopPix;
+ positionLines();
+ }
+ fillLines();
+ return;
+ }
+
+ // Content added
+ // Preserve scroll position
+ if ( lastTopPix === 0 ) {
+ rollLines(0);
+ positionLines();
+ fillLines();
+ return;
+ }
+
+ // Preserve row position
+ lastTopPix += lineHeight * addedCount;
+ vwContent.style.top = `${lastTopPix}px`;
+ vwScroller.scrollTop = lastTopPix;
+ };
+
+ return { updateContent, updateLayout, };
+})();
+
+/******************************************************************************/
+
+const updateCurrentTabTitle = (( ) => {
+ const i18nCurrentTab = i18n$('loggerCurrentTab');
+
+ return ( ) => {
+ const select = qs$('#pageSelector');
+ if ( select.value !== '_' || activeTabId === 0 ) { return; }
+ const opt0 = qs$(select, '[value="_"]');
+ const opt1 = qs$(select, `[value="${activeTabId}"]`);
+ let text = i18nCurrentTab;
+ if ( opt1 !== null ) {
+ text += ' / ' + opt1.textContent;
+ }
+ opt0.textContent = text;
+ };
+})();
+
+/******************************************************************************/
+
+const synchronizeTabIds = function(newTabIds) {
+ const select = qs$('#pageSelector');
+ const selectedTabValue = select.value;
+ const oldTabIds = allTabIds;
+
+ // Collate removed tab ids.
+ const toVoid = new Set();
+ for ( const tabId of oldTabIds.keys() ) {
+ if ( newTabIds.has(tabId) ) { continue; }
+ toVoid.add(tabId);
+ }
+ allTabIds = newTabIds;
+
+ // Mark as "void" all logger entries which are linked to now invalid
+ // tab ids.
+ // When an entry is voided without being removed, we re-create a new entry
+ // in order to ensure the entry has a new identity. A new identify ensures
+ // that identity-based associations elsewhere are automatically
+ // invalidated.
+ if ( toVoid.size !== 0 ) {
+ const autoDeleteVoidedRows = selectedTabValue === '_';
+ let rowVoided = false;
+ for ( let i = 0, n = loggerEntries.length; i < n; i++ ) {
+ const entry = loggerEntries[i];
+ if ( toVoid.has(entry.tabId) === false ) { continue; }
+ if ( entry.voided ) { continue; }
+ rowVoided = entry.voided = true;
+ if ( autoDeleteVoidedRows ) {
+ entry.dead = true;
+ }
+ loggerEntries[i] = new LogEntry(entry);
+ }
+ if ( rowVoided ) {
+ rowFilterer.filterAll();
+ }
+ }
+
+ // Remove popup if it is currently bound to a removed tab.
+ if ( toVoid.has(popupManager.tabId) ) {
+ popupManager.toggleOff();
+ }
+
+ const tabIds = Array.from(newTabIds.keys()).sort(function(a, b) {
+ return newTabIds.get(a).localeCompare(newTabIds.get(b));
+ });
+ let j = 3;
+ for ( const tabId of tabIds ) {
+ if ( tabId <= 0 ) { continue; }
+ if ( j === select.options.length ) {
+ select.appendChild(document.createElement('option'));
+ }
+ const option = select.options[j];
+ // Truncate too long labels.
+ option.textContent = newTabIds.get(tabId).slice(0, 80);
+ dom.attr(option, 'value', tabId);
+ if ( option.value === selectedTabValue ) {
+ select.selectedIndex = j;
+ dom.attr(option, 'selected', '');
+ } else {
+ dom.attr(option, 'selected', null);
+ }
+ j += 1;
+ }
+ while ( j < select.options.length ) {
+ select.removeChild(select.options[j]);
+ }
+ if ( select.value !== selectedTabValue ) {
+ select.selectedIndex = 0;
+ select.value = '';
+ dom.attr(select.options[0], 'selected', '');
+ pageSelectorChanged();
+ }
+
+ updateCurrentTabTitle();
+};
+
+/******************************************************************************/
+
+const onLogBufferRead = function(response) {
+ if ( !response || response.unavailable ) { return; }
+
+ // Disable tooltips?
+ if (
+ popupLoggerTooltips === undefined &&
+ response.tooltips !== undefined
+ ) {
+ popupLoggerTooltips = response.tooltips;
+ if ( popupLoggerTooltips === false ) {
+ dom.attr('[data-i18n-title]', 'title', '');
+ }
+ }
+
+ // Tab id of currently active tab
+ let activeTabIdChanged = false;
+ if ( response.activeTabId ) {
+ activeTabIdChanged = response.activeTabId !== activeTabId;
+ activeTabId = response.activeTabId;
+ }
+
+ if ( Array.isArray(response.tabIds) ) {
+ response.tabIds = new Map(response.tabIds);
+ }
+
+ // List of tab ids has changed
+ if ( response.tabIds !== undefined ) {
+ synchronizeTabIds(response.tabIds);
+ allTabIdsToken = response.tabIdsToken;
+ }
+
+ if ( activeTabIdChanged ) {
+ pageSelectorFromURLHash();
+ }
+
+ processLoggerEntries(response);
+
+ // Synchronize DOM with sent logger data
+ dom.cl.toggle(dom.html, 'colorBlind', response.colorBlind === true);
+ dom.cl.toggle('#clean', 'disabled', filteredLoggerEntryVoidedCount === 0);
+ dom.cl.toggle('#clear', 'disabled', filteredLoggerEntries.length === 0);
+};
+
+/******************************************************************************/
+
+const readLogBuffer = (( ) => {
+ let reading = false;
+
+ const readLogBufferNow = async function() {
+ if ( logger.ownerId === undefined ) { return; }
+ if ( reading ) { return; }
+
+ reading = true;
+
+ const msg = {
+ what: 'readAll',
+ ownerId: logger.ownerId,
+ tabIdsToken: allTabIdsToken,
+ };
+
+ // This is to detect changes in the position or size of the logger
+ // popup window (if in use).
+ if (
+ popupLoggerBox instanceof Object &&
+ (
+ self.screenX !== popupLoggerBox.x ||
+ self.screenY !== popupLoggerBox.y ||
+ self.outerWidth !== popupLoggerBox.w ||
+ self.outerHeight !== popupLoggerBox.h
+ )
+ ) {
+ popupLoggerBox.x = self.screenX;
+ popupLoggerBox.y = self.screenY;
+ popupLoggerBox.w = self.outerWidth;
+ popupLoggerBox.h = self.outerHeight;
+ msg.popupLoggerBoxChanged = true;
+ }
+
+ const response = await vAPI.messaging.send('loggerUI', msg);
+
+ onLogBufferRead(response);
+
+ reading = false;
+
+ timer.on(1200);
+ };
+
+ const timer = vAPI.defer.create(readLogBufferNow);
+
+ readLogBufferNow();
+
+ return ( ) => {
+ timer.on(1200);
+ };
+})();
+
+/******************************************************************************/
+
+const pageSelectorChanged = function() {
+ const select = qs$('#pageSelector');
+ window.location.replace('#' + select.value);
+ pageSelectorFromURLHash();
+};
+
+const pageSelectorFromURLHash = (( ) => {
+ let lastHash;
+ let lastSelectedTabId;
+
+ return function() {
+ let hash = window.location.hash.slice(1);
+ let match = /^([^+]+)\+(.+)$/.exec(hash);
+ if ( match !== null ) {
+ hash = match[1];
+ activeTabId = parseInt(match[2], 10) || 0;
+ window.location.hash = '#' + hash;
+ }
+
+ if ( hash !== lastHash ) {
+ const select = qs$('#pageSelector');
+ let option = qs$(select, `option[value="${hash}"]`);
+ if ( option === null ) {
+ hash = '0';
+ option = select.options[0];
+ }
+ select.selectedIndex = option.index;
+ select.value = option.value;
+ lastHash = hash;
+ }
+
+ selectedTabId = hash === '_'
+ ? activeTabId
+ : parseInt(hash, 10) || 0;
+
+ if ( lastSelectedTabId === selectedTabId ) { return; }
+
+ rowFilterer.filterAll();
+ document.dispatchEvent(new Event('tabIdChanged'));
+ updateCurrentTabTitle();
+ dom.cl.toggle('.needdom', 'disabled', selectedTabId <= 0);
+ dom.cl.toggle('.needscope', 'disabled', selectedTabId <= 0);
+ lastSelectedTabId = selectedTabId;
+ };
+})();
+
+/******************************************************************************/
+
+const reloadTab = function(bypassCache = false) {
+ const tabId = tabIdFromPageSelector();
+ if ( tabId <= 0 ) { return; }
+ messaging.send('loggerUI', {
+ what: 'reloadTab',
+ tabId,
+ bypassCache,
+ });
+};
+
+dom.on('#refresh', 'click', ev => {
+ reloadTab(ev.ctrlKey || ev.metaKey || ev.shiftKey);
+});
+
+dom.on(document, 'keydown', ev => {
+ if ( ev.isComposing ) { return; }
+ let bypassCache = false;
+ switch ( ev.key ) {
+ case 'F5':
+ bypassCache = ev.ctrlKey || ev.metaKey || ev.shiftKey;
+ break;
+ case 'r':
+ if ( (ev.ctrlKey || ev.metaKey) !== true ) { return; }
+ break;
+ case 'R':
+ if ( (ev.ctrlKey || ev.metaKey) !== true ) { return; }
+ bypassCache = true;
+ break;
+ default:
+ return;
+ }
+ reloadTab(bypassCache);
+ ev.preventDefault();
+ ev.stopPropagation();
+}, { capture: true });
+
+/******************************************************************************/
+/******************************************************************************/
+
+(( ) => {
+ const reRFC3986 = /^([^:\/?#]+:)?(\/\/[^\/?#]*)?([^?#]*)(\?[^#]*)?(#.*)?/;
+ const reSchemeOnly = /^[\w-]+:$/;
+ const staticFilterTypes = {
+ 'beacon': 'ping',
+ 'doc': 'document',
+ 'css': 'stylesheet',
+ 'frame': 'subdocument',
+ 'object_subrequest': 'object',
+ 'csp_report': 'other',
+ };
+ const createdStaticFilters = {};
+ const reIsExceptionFilter = /^@@|^[\w.-]*?#@#/;
+
+ let dialog = null;
+ let targetRow = null;
+ let targetType;
+ let targetURLs = [];
+ let targetFrameHostname;
+ let targetPageHostname;
+ let targetTabId;
+ let targetDomain;
+ let targetPageDomain;
+ let targetFrameDomain;
+
+ const uglyTypeFromSelector = pane => {
+ const prettyType = selectValue('select.type.' + pane);
+ if ( pane === 'static' ) {
+ return staticFilterTypes[prettyType] || prettyType;
+ }
+ return uglyRequestTypes[prettyType] || prettyType;
+ };
+
+ const selectNode = selector => {
+ return qs$(dialog, selector);
+ };
+
+ const selectValue = selector => {
+ return selectNode(selector).value || '';
+ };
+
+ const staticFilterNode = ( ) => {
+ return qs$(dialog, 'div.panes > div.static textarea');
+ };
+
+ const toExceptionFilter = (filter, extended) => {
+ if ( reIsExceptionFilter.test(filter) ) { return filter; }
+ return extended ? filter.replace('##', '#@#') : `@@${filter}`;
+ };
+
+ const onColorsReady = function(response) {
+ dom.cl.toggle(dom.body, 'dirty', response.dirty);
+ for ( const url in response.colors ) {
+ if ( response.colors.hasOwnProperty(url) === false ) { continue; }
+ const colorEntry = response.colors[url];
+ const node = qs$(dialog, `.dynamic .entry .action[data-url="${url}"]`);
+ if ( node === null ) { continue; }
+ dom.cl.toggle(node, 'allow', colorEntry.r === 2);
+ dom.cl.toggle(node, 'noop', colorEntry.r === 3);
+ dom.cl.toggle(node, 'block', colorEntry.r === 1);
+ dom.cl.toggle(node, 'own', colorEntry.own);
+ }
+ };
+
+ const colorize = async function() {
+ const response = await messaging.send('loggerUI', {
+ what: 'getURLFilteringData',
+ context: selectValue('select.dynamic.origin'),
+ urls: targetURLs,
+ type: uglyTypeFromSelector('dynamic'),
+ });
+ onColorsReady(response);
+ };
+
+ const parseStaticInputs = function() {
+ const options = [];
+ const block = selectValue('select.static.action') === '';
+ let filter = '';
+ if ( !block ) {
+ filter = '@@';
+ }
+ let value = selectValue('select.static.url');
+ if ( value !== '' ) {
+ if ( reSchemeOnly.test(value) ) {
+ value = `|${value}`;
+ } else {
+ if ( value.endsWith('/') ) {
+ value += '*';
+ } else if ( /[/?]/.test(value) === false ) {
+ value += '^';
+ }
+ value = `||${value}`;
+ }
+ }
+ filter += value;
+ value = selectValue('select.static.type');
+ if ( value !== '' ) {
+ options.push(uglyTypeFromSelector('static'));
+ }
+ value = selectValue('select.static.origin');
+ if ( value !== '' ) {
+ if ( value === targetDomain ) {
+ options.push('1p');
+ } else {
+ options.push('domain=' + value);
+ }
+ }
+ if ( block && selectValue('select.static.importance') !== '' ) {
+ options.push('important');
+ }
+ if ( options.length ) {
+ filter += '$' + options.join(',');
+ }
+ staticFilterNode().value = filter;
+ updateWidgets();
+ };
+
+ const updateWidgets = function() {
+ const value = staticFilterNode().value;
+ dom.cl.toggle(
+ qs$(dialog, '#createStaticFilter'),
+ 'disabled',
+ createdStaticFilters.hasOwnProperty(value) || value === ''
+ );
+ };
+
+ const onClick = async function(ev) {
+ const target = ev.target;
+ const tcl = target.classList;
+
+ // Close entry tools
+ if ( tcl.contains('closeButton') ) {
+ ev.stopPropagation();
+ toggleOff();
+ return;
+ }
+
+ // Select a pane
+ if ( tcl.contains('header') ) {
+ ev.stopPropagation();
+ dom.attr(dialog, 'data-pane', dom.attr(target, 'data-pane'));
+ return;
+ }
+
+ // Toggle temporary exception filter
+ if ( tcl.contains('exceptor') ) {
+ ev.stopPropagation();
+ const filter = filterFromTargetRow();
+ const status = await messaging.send('loggerUI', {
+ what: 'toggleInMemoryFilter',
+ filter: toExceptionFilter(filter, dom.cl.has(targetRow, 'extendedRealm')),
+ });
+ const row = target.closest('div');
+ dom.cl.toggle(row, 'exceptored', status);
+ return;
+ }
+
+ // Create static filter
+ if ( target.id === 'createStaticFilter' ) {
+ ev.stopPropagation();
+ const value = staticFilterNode().value;
+ // Avoid duplicates
+ if ( createdStaticFilters.hasOwnProperty(value) ) { return; }
+ createdStaticFilters[value] = true;
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1281#issuecomment-704217175
+ // TODO:
+ // Figure a way to use the actual document URL. Currently using
+ // a synthetic URL derived from the document hostname.
+ if ( value !== '' ) {
+ messaging.send('loggerUI', {
+ what: 'createUserFilter',
+ autoComment: true,
+ filters: value,
+ docURL: `https://${targetFrameHostname}/`,
+ });
+ }
+ updateWidgets();
+ return;
+ }
+
+ // Save url filtering rule(s)
+ if ( target.id === 'saveRules' ) {
+ ev.stopPropagation();
+ await messaging.send('loggerUI', {
+ what: 'saveURLFilteringRules',
+ context: selectValue('select.dynamic.origin'),
+ urls: targetURLs,
+ type: uglyTypeFromSelector('dynamic'),
+ });
+ colorize();
+ return;
+ }
+
+ const persist = !!ev.ctrlKey || !!ev.metaKey;
+
+ // Remove url filtering rule
+ if ( tcl.contains('action') ) {
+ ev.stopPropagation();
+ await messaging.send('loggerUI', {
+ what: 'setURLFilteringRule',
+ context: selectValue('select.dynamic.origin'),
+ url: dom.attr(target, 'data-url'),
+ type: uglyTypeFromSelector('dynamic'),
+ action: 0,
+ persist: persist,
+ });
+ colorize();
+ return;
+ }
+
+ // add "allow" url filtering rule
+ if ( tcl.contains('allow') ) {
+ ev.stopPropagation();
+ await messaging.send('loggerUI', {
+ what: 'setURLFilteringRule',
+ context: selectValue('select.dynamic.origin'),
+ url: dom.attr(target.parentNode, 'data-url'),
+ type: uglyTypeFromSelector('dynamic'),
+ action: 2,
+ persist: persist,
+ });
+ colorize();
+ return;
+ }
+
+ // add "block" url filtering rule
+ if ( tcl.contains('noop') ) {
+ ev.stopPropagation();
+ await messaging.send('loggerUI', {
+ what: 'setURLFilteringRule',
+ context: selectValue('select.dynamic.origin'),
+ url: dom.attr(target.parentNode, 'data-url'),
+ type: uglyTypeFromSelector('dynamic'),
+ action: 3,
+ persist: persist,
+ });
+ colorize();
+ return;
+ }
+
+ // add "block" url filtering rule
+ if ( tcl.contains('block') ) {
+ ev.stopPropagation();
+ await messaging.send('loggerUI', {
+ what: 'setURLFilteringRule',
+ context: selectValue('select.dynamic.origin'),
+ url: dom.attr(target.parentNode, 'data-url'),
+ type: uglyTypeFromSelector('dynamic'),
+ action: 1,
+ persist: persist,
+ });
+ colorize();
+ return;
+ }
+
+ // Highlight corresponding element in target web page
+ if ( tcl.contains('picker') ) {
+ ev.stopPropagation();
+ messaging.send('loggerUI', {
+ what: 'launchElementPicker',
+ tabId: targetTabId,
+ targetURL: 'img\t' + targetURLs[0],
+ select: true,
+ });
+ return;
+ }
+
+ // Reload tab associated with event
+ if ( tcl.contains('reload') ) {
+ ev.stopPropagation();
+ messaging.send('loggerUI', {
+ what: 'reloadTab',
+ tabId: targetTabId,
+ bypassCache: ev.ctrlKey || ev.metaKey || ev.shiftKey,
+ });
+ return;
+ }
+ };
+
+ const onSelectChange = function(ev) {
+ const tcl = ev.target.classList;
+
+ if ( tcl.contains('dynamic') ) {
+ colorize();
+ return;
+ }
+
+ if ( tcl.contains('static') ) {
+ parseStaticInputs();
+ return;
+ }
+ };
+
+ const onInputChange = function() {
+ updateWidgets();
+ };
+
+ const createPreview = function(type, url) {
+ const cantPreview =
+ type !== 'image' ||
+ dom.cl.has(targetRow, 'networkRealm') === false ||
+ dom.attr(targetRow, 'data-status') === '1';
+
+ // Whether picker can be used
+ dom.cl.toggle(
+ qs$(dialog, '.picker'),
+ 'hide',
+ targetTabId < 0 || cantPreview
+ );
+
+ // Whether the resource can be previewed
+ if ( cantPreview ) { return; }
+
+ const container = qs$(dialog, '.preview');
+ dom.on(qs$(container, 'span'), 'click', ( ) => {
+ const preview = dom.create('img');
+ dom.attr(preview, 'src', url);
+ container.replaceChild(preview, container.firstElementChild);
+ }, { once: true });
+
+ dom.cl.remove(container, 'hide');
+ };
+
+ // https://github.com/gorhill/uBlock/issues/1511
+ const shortenLongString = function(url, max) {
+ const urlLen = url.length;
+ if ( urlLen <= max ) {
+ return url;
+ }
+ const n = urlLen - max - 1;
+ const i = (urlLen - n) / 2 | 0;
+ return url.slice(0, i) + '…' + url.slice(i + n);
+ };
+
+ // Build list of candidate URLs
+ const createTargetURLs = function(url) {
+ const matches = reRFC3986.exec(url);
+ if ( matches === null ) { return []; }
+ if ( typeof matches[2] !== 'string' || matches[2].length === 0 ) {
+ return [ matches[1] ];
+ }
+ // Shortest URL for a valid URL filtering rule
+ const urls = [];
+ const rootURL = matches[1] + matches[2];
+ urls.unshift(rootURL);
+ const path = matches[3] || '';
+ let pos = path.charAt(0) === '/' ? 1 : 0;
+ while ( pos < path.length ) {
+ pos = path.indexOf('/', pos);
+ if ( pos === -1 ) {
+ pos = path.length;
+ } else {
+ pos += 1;
+ }
+ urls.unshift(rootURL + path.slice(0, pos));
+ }
+ const query = matches[4] || '';
+ if ( query !== '' ) {
+ urls.unshift(rootURL + path + query);
+ }
+ return urls;
+ };
+
+ const filterFromTargetRow = function() {
+ return dom.text(targetRow.children[COLUMN_FILTER]);
+ };
+
+ const aliasURLFromID = function(id) {
+ if ( id === '' ) { return ''; }
+ for ( const entry of loggerEntries ) {
+ if ( entry.id !== id || entry.aliased ) { continue; }
+ const fields = entry.textContent.split('\t');
+ return fields[COLUMN_URL] || '';
+ }
+ return '';
+ };
+
+ const toSummaryPaneFilterNode = async function(receiver, filter) {
+ receiver.children[COLUMN_FILTER].textContent = filter;
+ if ( dom.cl.has(targetRow, 'canLookup') === false ) { return; }
+ const isException = reIsExceptionFilter.test(filter);
+ let isExcepted = false;
+ if ( isException ) {
+ isExcepted = await messaging.send('loggerUI', {
+ what: 'hasInMemoryFilter',
+ filter: toExceptionFilter(filter, dom.cl.has(targetRow, 'extendedRealm')),
+ });
+ }
+ if ( isException && isExcepted === false ) { return; }
+ dom.cl.toggle(receiver, 'exceptored', isExcepted);
+ receiver.children[2].style.visibility = '';
+ };
+
+ const fillSummaryPaneFilterList = async function(rows) {
+ const rawFilter = targetRow.children[COLUMN_FILTER].textContent;
+
+ const nodeFromFilter = function(filter, lists) {
+ const fragment = document.createDocumentFragment();
+ const template = qs$('#filterFinderListEntry > span');
+ for ( const list of lists ) {
+ const span = dom.clone(template);
+ let a = qs$(span, 'a:nth-of-type(1)');
+ a.href += encodeURIComponent(list.assetKey);
+ a.append(i18n.patchUnicodeFlags(list.title));
+ a = qs$(span, 'a:nth-of-type(2)');
+ if ( list.supportURL ) {
+ dom.attr(a, 'href', list.supportURL);
+ } else {
+ a.style.display = 'none';
+ }
+ if ( fragment.childElementCount !== 0 ) {
+ fragment.appendChild(document.createTextNode('\n'));
+ }
+ fragment.appendChild(span);
+ }
+ return fragment;
+ };
+
+ const handleResponse = function(response) {
+ if ( response instanceof Object === false ) {
+ response = {};
+ }
+ let bestMatchFilter = '';
+ for ( const filter in response ) {
+ if ( filter.length > bestMatchFilter.length ) {
+ bestMatchFilter = filter;
+ }
+ }
+ if (
+ bestMatchFilter !== '' &&
+ Array.isArray(response[bestMatchFilter])
+ ) {
+ toSummaryPaneFilterNode(rows[0], bestMatchFilter);
+ rows[1].children[1].appendChild(nodeFromFilter(
+ bestMatchFilter,
+ response[bestMatchFilter]
+ ));
+ }
+ // https://github.com/gorhill/uBlock/issues/2179
+ if ( rows[1].children[1].childElementCount === 0 ) {
+ i18n.safeTemplateToDOM(
+ 'loggerStaticFilteringFinderSentence2',
+ { filter: rawFilter },
+ rows[1].children[1]
+ );
+ }
+ };
+
+ if ( dom.cl.has(targetRow, 'networkRealm') ) {
+ const response = await messaging.send('loggerUI', {
+ what: 'listsFromNetFilter',
+ rawFilter: rawFilter,
+ });
+ handleResponse(response);
+ } else if ( dom.cl.has(targetRow, 'extendedRealm') ) {
+ const response = await messaging.send('loggerUI', {
+ what: 'listsFromCosmeticFilter',
+ url: targetRow.children[COLUMN_URL].textContent,
+ rawFilter: rawFilter,
+ });
+ handleResponse(response);
+ }
+ };
+
+ const fillSummaryPane = function() {
+ const rows = qsa$(dialog, '.pane.details > div');
+ const tr = targetRow;
+ const trcl = tr.classList;
+ const trch = tr.children;
+ let text;
+ // Filter and context
+ text = filterFromTargetRow();
+ if (
+ (text !== '') &&
+ (trcl.contains('extendedRealm') || trcl.contains('networkRealm'))
+ ) {
+ toSummaryPaneFilterNode(rows[0], text);
+ } else {
+ rows[0].style.display = 'none';
+ }
+ // Rule
+ if (
+ (text !== '') &&
+ (
+ trcl.contains('dynamicHost') ||
+ trcl.contains('dynamicUrl') ||
+ trcl.contains('switchRealm')
+ )
+ ) {
+ rows[2].children[1].textContent = text;
+ } else {
+ rows[2].style.display = 'none';
+ }
+ // Filter list
+ if ( trcl.contains('canLookup') ) {
+ fillSummaryPaneFilterList(rows);
+ } else {
+ rows[1].style.display = 'none';
+ }
+ // Root and immediate contexts
+ const tabhn = dom.attr(tr, 'data-tabhn') || '';
+ const dochn = dom.attr(tr, 'data-dochn') || '';
+ if ( tabhn !== '' && tabhn !== dochn ) {
+ rows[3].children[1].textContent = tabhn;
+ } else {
+ rows[3].style.display = 'none';
+ }
+ if ( dochn !== '' ) {
+ rows[4].children[1].textContent = dochn;
+ } else {
+ rows[4].style.display = 'none';
+ }
+ // Partyness
+ text = dom.attr(tr, 'data-parties') || '';
+ if ( text !== '' ) {
+ rows[5].children[1].textContent = `(${trch[COLUMN_PARTYNESS].textContent})\u2002${text}`;
+ } else {
+ rows[5].style.display = 'none';
+ }
+ // Type
+ text = trch[COLUMN_TYPE].textContent;
+ if ( text !== '' ) {
+ rows[6].children[1].textContent = text;
+ } else {
+ rows[6].style.display = 'none';
+ }
+ // URL
+ const canonicalURL = trch[COLUMN_URL].textContent;
+ if ( canonicalURL !== '' ) {
+ const attr = dom.attr(tr, 'data-status') || '';
+ if ( attr !== '' ) {
+ dom.attr(rows[7], 'data-status', attr);
+ if ( tr.hasAttribute('data-modifier') ) {
+ dom.attr(rows[7], 'data-modifier', '');
+ }
+ }
+ rows[7].children[1].appendChild(dom.clone(trch[COLUMN_URL]));
+ } else {
+ rows[7].style.display = 'none';
+ }
+ // Alias URL
+ text = dom.attr(tr, 'data-aliasid');
+ const aliasURL = text ? aliasURLFromID(text) : '';
+ if ( aliasURL !== '' ) {
+ rows[8].children[1].textContent =
+ hostnameFromURI(aliasURL) + ' \u21d2\n\u2003' +
+ hostnameFromURI(canonicalURL);
+ rows[9].children[1].textContent = aliasURL;
+ } else {
+ rows[8].style.display = 'none';
+ rows[9].style.display = 'none';
+ }
+ };
+
+ // Fill dynamic URL filtering pane
+ const fillDynamicPane = function() {
+ if ( dom.cl.has(targetRow, 'extendedRealm') ) { return; }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/662#issuecomment-509220702
+ if ( targetType === 'doc' ) { return; }
+
+ // https://github.com/gorhill/uBlock/issues/2469
+ if ( targetURLs.length === 0 || reSchemeOnly.test(targetURLs[0]) ) {
+ return;
+ }
+
+ // Fill context selector
+ let select = selectNode('select.dynamic.origin');
+ fillOriginSelect(select, targetPageHostname, targetPageDomain);
+ const option = document.createElement('option');
+ option.textContent = '*';
+ dom.attr(option, 'value', '*');
+ select.appendChild(option);
+
+ // Fill type selector
+ select = selectNode('select.dynamic.type');
+ select.options[0].textContent = targetType;
+ dom.attr(select.options[0], 'value', targetType);
+ select.selectedIndex = 0;
+
+ // Fill entries
+ const menuEntryTemplate = qs$(dialog, '.dynamic .toolbar .entry');
+ const tbody = qs$(dialog, '.dynamic .entries');
+ for ( const targetURL of targetURLs ) {
+ const menuEntry = dom.clone(menuEntryTemplate);
+ dom.attr(menuEntry.children[0], 'data-url', targetURL);
+ menuEntry.children[1].textContent = shortenLongString(targetURL, 128);
+ tbody.appendChild(menuEntry);
+ }
+
+ colorize();
+ };
+
+ const fillOriginSelect = function(select, hostname, domain) {
+ const template = i18n$('loggerStaticFilteringSentencePartOrigin');
+ let value = hostname;
+ for (;;) {
+ const option = document.createElement('option');
+ dom.attr(option, 'value', value);
+ option.textContent = template.replace('{{origin}}', value);
+ select.appendChild(option);
+ if ( value === domain ) { break; }
+ const pos = value.indexOf('.');
+ if ( pos === -1 ) { break; }
+ value = value.slice(pos + 1);
+ }
+ };
+
+ // Fill static filtering pane
+ const fillStaticPane = function() {
+ if ( dom.cl.has(targetRow, 'extendedRealm') ) { return; }
+
+ const template = i18n$('loggerStaticFilteringSentence');
+ const rePlaceholder = /\{\{[^}]+?\}\}/g;
+ const nodes = [];
+ let pos = 0;
+ for (;;) {
+ const match = rePlaceholder.exec(template);
+ if ( match === null ) { break; }
+ if ( pos !== match.index ) {
+ nodes.push(document.createTextNode(template.slice(pos, match.index)));
+ }
+ pos = rePlaceholder.lastIndex;
+ let select, option;
+ switch ( match[0] ) {
+ case '{{br}}':
+ nodes.push(document.createElement('br'));
+ break;
+
+ case '{{action}}':
+ select = document.createElement('select');
+ select.className = 'static action';
+ option = document.createElement('option');
+ dom.attr(option, 'value', '');
+ option.textContent = i18n$('loggerStaticFilteringSentencePartBlock');
+ select.appendChild(option);
+ option = document.createElement('option');
+ dom.attr(option, 'value', '@@');
+ option.textContent = i18n$('loggerStaticFilteringSentencePartAllow');
+ select.appendChild(option);
+ nodes.push(select);
+ break;
+
+ case '{{type}}': {
+ const filterType = staticFilterTypes[targetType] || targetType;
+ select = document.createElement('select');
+ select.className = 'static type';
+ option = document.createElement('option');
+ dom.attr(option, 'value', filterType);
+ option.textContent = i18n$('loggerStaticFilteringSentencePartType').replace('{{type}}', filterType);
+ select.appendChild(option);
+ option = document.createElement('option');
+ dom.attr(option, 'value', '');
+ option.textContent = i18n$('loggerStaticFilteringSentencePartAnyType');
+ select.appendChild(option);
+ nodes.push(select);
+ break;
+ }
+ case '{{url}}':
+ select = document.createElement('select');
+ select.className = 'static url';
+ for ( const targetURL of targetURLs ) {
+ const value = targetURL.replace(/^[a-z-]+:\/\//, '');
+ option = document.createElement('option');
+ dom.attr(option, 'value', value);
+ option.textContent = shortenLongString(value, 128);
+ select.appendChild(option);
+ }
+ nodes.push(select);
+ break;
+
+ case '{{origin}}':
+ select = document.createElement('select');
+ select.className = 'static origin';
+ fillOriginSelect(select, targetFrameHostname, targetFrameDomain);
+ option = document.createElement('option');
+ dom.attr(option, 'value', '');
+ option.textContent = i18n$('loggerStaticFilteringSentencePartAnyOrigin');
+ select.appendChild(option);
+ nodes.push(select);
+ break;
+
+ case '{{importance}}':
+ select = document.createElement('select');
+ select.className = 'static importance';
+ option = document.createElement('option');
+ dom.attr(option, 'value', '');
+ option.textContent = i18n$('loggerStaticFilteringSentencePartNotImportant');
+ select.appendChild(option);
+ option = document.createElement('option');
+ dom.attr(option, 'value', 'important');
+ option.textContent = i18n$('loggerStaticFilteringSentencePartImportant');
+ select.appendChild(option);
+ nodes.push(select);
+ break;
+
+ default:
+ break;
+ }
+ }
+ if ( pos < template.length ) {
+ nodes.push(document.createTextNode(template.slice(pos)));
+ }
+ const parent = qs$(dialog, 'div.panes > .static > div:first-of-type');
+ for ( let i = 0; i < nodes.length; i++ ) {
+ parent.appendChild(nodes[i]);
+ }
+ parseStaticInputs();
+ };
+
+ const moveDialog = ev => {
+ if ( ev.button !== 0 && ev.touches === undefined ) { return; }
+ const widget = qs$('#netInspector .entryTools');
+ onStartMovingWidget(ev, widget, ( ) => {
+ vAPI.localStorage.setItem(
+ 'loggerUI.entryTools',
+ JSON.stringify({
+ bottom: widget.style.bottom,
+ left: widget.style.left,
+ right: widget.style.right,
+ top: widget.style.top,
+ })
+ );
+ });
+ };
+
+ const fillDialog = function(domains) {
+ dialog = dom.clone('#templates .netFilteringDialog');
+ dom.cl.toggle(
+ dialog,
+ 'extendedRealm',
+ dom.cl.has(targetRow, 'extendedRealm')
+ );
+ targetDomain = domains[0];
+ targetPageDomain = domains[1];
+ targetFrameDomain = domains[2];
+ createPreview(targetType, targetURLs[0]);
+ fillSummaryPane();
+ fillDynamicPane();
+ fillStaticPane();
+ dom.on(dialog, 'click', ev => { onClick(ev); }, true);
+ dom.on(dialog, 'change', onSelectChange, true);
+ dom.on(dialog, 'input', onInputChange, true);
+ const container = qs$('#netInspector .entryTools');
+ if ( container.firstChild ) {
+ container.replaceChild(dialog, container.firstChild);
+ } else {
+ container.append(dialog);
+ }
+ const moveBand = qs$(dialog, '.moveBand');
+ dom.on(moveBand, 'mousedown', moveDialog);
+ dom.on(moveBand, 'touchstart', moveDialog);
+ };
+
+ const toggleOn = async function(ev) {
+ targetRow = ev.target.closest('.canDetails');
+ if ( targetRow === null ) { return; }
+ ev.stopPropagation();
+ targetTabId = tabIdFromAttribute(targetRow);
+ targetType = targetRow.children[COLUMN_TYPE].textContent.trim() || '';
+ targetURLs = createTargetURLs(targetRow.children[COLUMN_URL].textContent);
+ targetPageHostname = dom.attr(targetRow, 'data-tabhn') || '';
+ targetFrameHostname = dom.attr(targetRow, 'data-dochn') || '';
+
+ // We need the root domain names for best user experience.
+ const domains = await messaging.send('loggerUI', {
+ what: 'getDomainNames',
+ targets: [
+ targetURLs[0],
+ targetPageHostname,
+ targetFrameHostname
+ ],
+ });
+ fillDialog(domains);
+ };
+
+ const toggleOff = function() {
+ const container = qs$('#netInspector .entryTools');
+ if ( container.firstChild ) {
+ container.firstChild.remove();
+ }
+ targetURLs = [];
+ targetRow = null;
+ dialog = null;
+ };
+
+ // Restore position of entry tools dialog
+ vAPI.localStorage.getItemAsync(
+ 'loggerUI.entryTools',
+ ).then(response => {
+ if ( typeof response !== 'string' ) { return; }
+ const settings = JSON.parse(response);
+ const widget = qs$('#netInspector .entryTools');
+ widget.style.bottom = '';
+ widget.style.left = settings.left || '';
+ widget.style.right = settings.right || '';
+ widget.style.top = settings.top || '';
+ if ( /^-/.test(widget.style.top) ) {
+ widget.style.top = '0';
+ }
+ });
+
+ dom.on(
+ '#netInspector',
+ 'click',
+ '.canDetails > span:not(:nth-of-type(4)):not(:nth-of-type(8))',
+ ev => { toggleOn(ev); }
+ );
+
+ dom.on(
+ '#netInspector',
+ 'click',
+ '.logEntry > div > span:nth-of-type(8) a',
+ ev => {
+ vAPI.messaging.send('codeViewer', {
+ what: 'gotoURL',
+ details: {
+ url: ev.target.getAttribute('href'),
+ select: true,
+ },
+ });
+ ev.preventDefault();
+ ev.stopPropagation();
+ }
+ );
+})();
+
+/******************************************************************************/
+/******************************************************************************/
+
+const rowFilterer = (( ) => {
+ const userFilters = [];
+ const builtinFilters = [];
+
+ let masterFilterSwitch = true;
+ let filters = [];
+
+ const parseInput = function() {
+ userFilters.length = 0;
+
+ const rawParts = qs$('#filterInput > input').value.trim().split(/\s+/);
+ const n = rawParts.length;
+ const reStrs = [];
+ let not = false;
+ for ( let i = 0; i < n; i++ ) {
+ let rawPart = rawParts[i];
+ if ( rawPart.charAt(0) === '!' ) {
+ if ( reStrs.length === 0 ) {
+ not = true;
+ }
+ rawPart = rawPart.slice(1);
+ }
+ let reStr = '';
+ if ( rawPart.startsWith('/') && rawPart.endsWith('/') ) {
+ reStr = rawPart.slice(1, -1);
+ try {
+ new RegExp(reStr);
+ } catch(ex) {
+ reStr = '';
+ }
+ }
+ if ( reStr === '' ) {
+ const hardBeg = rawPart.startsWith('|');
+ if ( hardBeg ) {
+ rawPart = rawPart.slice(1);
+ }
+ const hardEnd = rawPart.endsWith('|');
+ if ( hardEnd ) {
+ rawPart = rawPart.slice(0, -1);
+ }
+ // https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions
+ reStr = rawPart.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
+ // https://github.com/orgs/uBlockOrigin/teams/ublock-issues-volunteers/discussions/51
+ // Be more flexible when interpreting leading/trailing pipes,
+ // as leading/trailing pipes are often used in static filters.
+ if ( hardBeg ) {
+ reStr = reStr !== '' ? '(?:^|\\s|\\|)' + reStr : '\\|';
+ }
+ if ( hardEnd ) {
+ reStr += '(?:\\||\\s|$)';
+ }
+ }
+ if ( reStr === '' ) { continue; }
+ reStrs.push(reStr);
+ if ( i < (n - 1) && rawParts[i + 1] === '||' ) {
+ i += 1;
+ continue;
+ }
+ reStr = reStrs.length === 1 ? reStrs[0] : reStrs.join('|');
+ userFilters.push({
+ re: new RegExp(reStr, 'i'),
+ r: !not
+ });
+ reStrs.length = 0;
+ not = false;
+ }
+ filters = builtinFilters.concat(userFilters);
+ };
+
+ const filterOne = function(logEntry) {
+ if (
+ logEntry.dead ||
+ selectedTabId !== 0 &&
+ (
+ logEntry.tabId === undefined ||
+ logEntry.tabId > 0 && logEntry.tabId !== selectedTabId
+ )
+ ) {
+ return false;
+ }
+
+ if ( masterFilterSwitch === false || filters.length === 0 ) {
+ return true;
+ }
+
+ // Do not filter out tab load event, they help separate key sections
+ // of logger.
+ if ( logEntry.type === 'tabLoad' ) { return true; }
+
+ for ( const f of filters ) {
+ if ( f.re.test(logEntry.textContent) !== f.r ) { return false; }
+ }
+ return true;
+ };
+
+ const filterAll = function() {
+ filteredLoggerEntries = [];
+ filteredLoggerEntryVoidedCount = 0;
+ for ( const entry of loggerEntries ) {
+ if ( filterOne(entry) === false ) { continue; }
+ filteredLoggerEntries.push(entry);
+ if ( entry.voided ) {
+ filteredLoggerEntryVoidedCount += 1;
+ }
+ }
+ viewPort.updateContent(0);
+ dom.cl.toggle('#filterButton', 'active', filters.length !== 0);
+ dom.cl.toggle('#clean', 'disabled', filteredLoggerEntryVoidedCount === 0);
+ dom.cl.toggle('#clear', 'disabled', filteredLoggerEntries.length === 0);
+ };
+
+ const onFilterChangedAsync = (( ) => {
+ const commit = ( ) => {
+ parseInput();
+ filterAll();
+ };
+ const timer = vAPI.defer.create(commit);
+ return ( ) => {
+ timer.offon(750);
+ };
+ })();
+
+ const onFilterButton = function() {
+ masterFilterSwitch = !masterFilterSwitch;
+ dom.cl.toggle('#netInspector', 'f', masterFilterSwitch);
+ filterAll();
+ };
+
+ const onToggleExtras = function(ev) {
+ dom.cl.toggle(ev.target, 'expanded');
+ };
+
+ const builtinFilterExpression = function() {
+ builtinFilters.length = 0;
+ const filtexElems = qsa$('#filterExprPicker [data-filtex]');
+ const orExprs = [];
+ let not = false;
+ for ( const filtexElem of filtexElems ) {
+ const filtex = filtexElem.dataset.filtex;
+ const active = dom.cl.has(filtexElem, 'on');
+ if ( filtex === '!' ) {
+ if ( orExprs.length !== 0 ) {
+ builtinFilters.push({
+ re: new RegExp(orExprs.join('|')),
+ r: !not
+ });
+ orExprs.length = 0;
+ }
+ not = active;
+ } else if ( active ) {
+ orExprs.push(filtex);
+ }
+ }
+ if ( orExprs.length !== 0 ) {
+ builtinFilters.push({
+ re: new RegExp(orExprs.join('|')),
+ r: !not
+ });
+ }
+ filters = builtinFilters.concat(userFilters);
+ dom.cl.toggle('#filterExprButton', 'active', builtinFilters.length !== 0);
+ filterAll();
+ };
+
+ dom.on('#filterButton', 'click', onFilterButton);
+ dom.on('#filterInput > input', 'input', onFilterChangedAsync);
+ dom.on('#filterExprButton', 'click', onToggleExtras);
+ dom.on('#filterExprPicker', 'click', '[data-filtex]', ev => {
+ dom.cl.toggle(ev.target, 'on');
+ builtinFilterExpression();
+ });
+ dom.on('#filterInput > input', 'drop', ev => {
+ const dropItem = item => {
+ if ( item.kind !== 'string' ) { return false; }
+ if ( item.type !== 'text/plain' ) { return false; }
+ item.getAsString(s => {
+ qs$('#filterInput > input').value = s;
+ parseInput();
+ filterAll();
+ });
+ return true;
+ };
+ for ( const item of ev.dataTransfer.items ) {
+ if ( dropItem(item) === false ) { continue; }
+ ev.preventDefault();
+ break;
+ }
+ });
+
+ // https://github.com/gorhill/uBlock/issues/404
+ // Ensure page state is in sync with the state of its various widgets.
+ parseInput();
+ builtinFilterExpression();
+ filterAll();
+
+ return { filterOne, filterAll };
+})();
+
+/******************************************************************************/
+
+// Discard logger entries to prevent undue memory usage growth. The criteria
+// to discard are multiple and user configurable:
+//
+// - Max number of page load per distinct tab
+// - Max number of entry per distinct tab
+// - Max entry age
+
+const rowJanitor = (( ) => {
+ const tabIdToDiscard = new Set();
+ const tabIdToLoadCountMap = new Map();
+ const tabIdToEntryCountMap = new Map();
+
+ let rowIndex = 0;
+
+ const discard = function(deadline) {
+ const opts = loggerSettings.discard;
+ const maxLoadCount = typeof opts.maxLoadCount === 'number'
+ ? opts.maxLoadCount
+ : 0;
+ const maxEntryCount = typeof opts.maxEntryCount === 'number'
+ ? opts.maxEntryCount
+ : 0;
+ const obsolete = typeof opts.maxAge === 'number'
+ ? Date.now() - opts.maxAge * 60000
+ : 0;
+
+ let i = rowIndex;
+ // TODO: below should not happen -- remove when confirmed.
+ if ( i >= loggerEntries.length ) {
+ i = 0;
+ }
+
+ if ( i === 0 ) {
+ tabIdToDiscard.clear();
+ tabIdToLoadCountMap.clear();
+ tabIdToEntryCountMap.clear();
+ }
+
+ let idel = -1;
+ let bufferedTabId = 0;
+ let bufferedEntryCount = 0;
+ let modified = false;
+
+ while ( i < loggerEntries.length ) {
+
+ if ( i % 64 === 0 && deadline.timeRemaining() === 0 ) { break; }
+
+ const entry = loggerEntries[i];
+ const tabId = entry.tabId || 0;
+
+ if ( entry.dead || tabIdToDiscard.has(tabId) ) {
+ if ( idel === -1 ) { idel = i; }
+ i += 1;
+ continue;
+ }
+
+ if ( maxLoadCount !== 0 && entry.type === 'tabLoad' ) {
+ let count = (tabIdToLoadCountMap.get(tabId) || 0) + 1;
+ tabIdToLoadCountMap.set(tabId, count);
+ if ( count >= maxLoadCount ) {
+ tabIdToDiscard.add(tabId);
+ }
+ }
+
+ if ( maxEntryCount !== 0 ) {
+ if ( bufferedTabId !== tabId ) {
+ if ( bufferedEntryCount !== 0 ) {
+ tabIdToEntryCountMap.set(bufferedTabId, bufferedEntryCount);
+ }
+ bufferedTabId = tabId;
+ bufferedEntryCount = tabIdToEntryCountMap.get(tabId) || 0;
+ }
+ bufferedEntryCount += 1;
+ if ( bufferedEntryCount >= maxEntryCount ) {
+ tabIdToDiscard.add(bufferedTabId);
+ }
+ }
+
+ // Since entries in the logger are chronologically ordered,
+ // everything below obsolete is to be discarded.
+ if ( obsolete !== 0 && entry.tstamp <= obsolete ) {
+ if ( idel === -1 ) { idel = i; }
+ break;
+ }
+
+ if ( idel !== -1 ) {
+ loggerEntries.copyWithin(idel, i);
+ loggerEntries.length -= i - idel;
+ idel = -1;
+ modified = true;
+ }
+
+ i += 1;
+ }
+
+ if ( idel !== -1 ) {
+ loggerEntries.length = idel;
+ modified = true;
+ }
+
+ if ( i >= loggerEntries.length ) { i = 0; }
+ rowIndex = i;
+
+ if ( rowIndex === 0 ) {
+ tabIdToDiscard.clear();
+ tabIdToLoadCountMap.clear();
+ tabIdToEntryCountMap.clear();
+ }
+
+ if ( modified === false ) { return; }
+
+ rowFilterer.filterAll();
+ };
+
+ const discardAsync = function(deadline) {
+ if ( deadline ) {
+ discard(deadline);
+ }
+ janitorTimer.onidle(1889);
+ };
+
+ const janitorTimer = vAPI.defer.create(discardAsync);
+
+ // Clear voided entries from the logger's visible content.
+ //
+ // Voided entries should be visible only from the "All" option of the
+ // tab selector.
+ //
+ const clean = function() {
+ if ( filteredLoggerEntries.length === 0 ) { return; }
+
+ let j = 0;
+ let targetEntry = filteredLoggerEntries[0];
+ for ( const entry of loggerEntries ) {
+ if ( entry !== targetEntry ) { continue; }
+ if ( entry.voided ) {
+ entry.dead = true;
+ }
+ j += 1;
+ if ( j === filteredLoggerEntries.length ) { break; }
+ targetEntry = filteredLoggerEntries[j];
+ }
+ rowFilterer.filterAll();
+ };
+
+ // Clear the logger's visible content.
+ //
+ // "Unrelated" entries -- shown for convenience -- will be also cleared
+ // if and only if the filtered logger content is made entirely of unrelated
+ // entries. In effect, this means clicking a second time on the eraser will
+ // cause unrelated entries to also be cleared.
+ //
+ const clear = function() {
+ if ( filteredLoggerEntries.length === 0 ) { return; }
+
+ let clearUnrelated = true;
+ if ( selectedTabId !== 0 ) {
+ for ( const entry of filteredLoggerEntries ) {
+ if ( entry.tabId === selectedTabId ) {
+ clearUnrelated = false;
+ break;
+ }
+ }
+ }
+
+ let j = 0;
+ let targetEntry = filteredLoggerEntries[0];
+ for ( const entry of loggerEntries ) {
+ if ( entry !== targetEntry ) { continue; }
+ if ( entry.tabId === selectedTabId || clearUnrelated ) {
+ entry.dead = true;
+ }
+ j += 1;
+ if ( j === filteredLoggerEntries.length ) { break; }
+ targetEntry = filteredLoggerEntries[j];
+ }
+ rowFilterer.filterAll();
+ };
+
+ discardAsync();
+
+ dom.on('#clean', 'click', clean);
+ dom.on('#clear', 'click', clear);
+
+ return {
+ inserted: function(count) {
+ if ( rowIndex !== 0 ) {
+ rowIndex += count;
+ }
+ },
+ };
+})();
+
+/******************************************************************************/
+
+const pauseNetInspector = function() {
+ netInspectorPaused = dom.cl.toggle('#netInspector', 'paused');
+};
+
+/******************************************************************************/
+
+const toggleVCompactView = function() {
+ dom.cl.toggle('#netInspector .vCompactToggler', 'vExpanded');
+ viewPort.updateLayout();
+};
+
+/******************************************************************************/
+
+const popupManager = (( ) => {
+ let realTabId = 0;
+ let popup = null;
+ let popupObserver = null;
+
+ const resizePopup = function() {
+ if ( popup === null ) { return; }
+ const popupBody = popup.contentWindow.document.body;
+ if ( popupBody.clientWidth !== 0 && popup.clientWidth !== popupBody.clientWidth ) {
+ popup.style.setProperty('width', popupBody.clientWidth + 'px');
+ }
+ if ( popupBody.clientHeight !== 0 && popup.clientHeight !== popupBody.clientHeight ) {
+ popup.style.setProperty('height', popupBody.clientHeight + 'px');
+ }
+ };
+
+ const onLoad = function() {
+ resizePopup();
+ popupObserver.observe(popup.contentDocument.body, {
+ subtree: true,
+ attributes: true
+ });
+ };
+
+ const setTabId = function(tabId) {
+ if ( popup === null ) { return; }
+ dom.attr(popup, 'src', `popup-fenix.html?portrait=1&tabId=${tabId}`);
+ };
+
+ const onTabIdChanged = function() {
+ const tabId = tabIdFromPageSelector();
+ if ( tabId === 0 ) { return toggleOff(); }
+ realTabId = tabId;
+ setTabId(realTabId);
+ };
+
+ const toggleOn = function() {
+ const tabId = tabIdFromPageSelector();
+ if ( tabId === 0 ) { return; }
+ realTabId = tabId;
+
+ popup = qs$('#popupContainer');
+
+ dom.on(popup, 'load', onLoad);
+ popupObserver = new MutationObserver(resizePopup);
+
+ const parent = qs$('#inspectors');
+ const rect = parent.getBoundingClientRect();
+ popup.style.setProperty('right', `${rect.right - parent.clientWidth}px`);
+ dom.cl.add(parent, 'popupOn');
+
+ dom.on(document, 'tabIdChanged', onTabIdChanged);
+
+ setTabId(realTabId);
+ dom.cl.add('#showpopup', 'active');
+ };
+
+ const toggleOff = function() {
+ dom.cl.remove('#showpopup', 'active');
+ dom.off(document, 'tabIdChanged', onTabIdChanged);
+ dom.cl.remove('#inspectors', 'popupOn');
+ dom.off(popup, 'load', onLoad);
+ popupObserver.disconnect();
+ popupObserver = null;
+ dom.attr(popup, 'src', '');
+
+ realTabId = 0;
+ };
+
+ const api = {
+ get tabId() { return realTabId || 0; },
+ toggleOff: function() {
+ if ( realTabId !== 0 ) {
+ toggleOff();
+ }
+ }
+ };
+
+ dom.on('#showpopup', 'click', ( ) => {
+ void (realTabId === 0 ? toggleOn() : toggleOff());
+ });
+
+ return api;
+})();
+
+/******************************************************************************/
+
+// Filter hit stats' MVP ("minimum viable product")
+//
+const loggerStats = (( ) => {
+ const enabled = false;
+ const filterHits = new Map();
+ let dialog;
+ let timer;
+ const makeRow = function() {
+ const div = document.createElement('div');
+ div.appendChild(document.createElement('span'));
+ div.appendChild(document.createElement('span'));
+ return div;
+ };
+
+ const fillRow = function(div, entry) {
+ div.children[0].textContent = entry[1].toLocaleString();
+ div.children[1].textContent = entry[0];
+ };
+
+ const updateList = function() {
+ const sortedHits = Array.from(filterHits).sort((a, b) => {
+ return b[1] - a[1];
+ });
+
+ const doc = document;
+ const parent = qs$(dialog, '.sortedEntries');
+ let i = 0;
+
+ // Reuse existing rows
+ for ( let iRow = 0; iRow < parent.childElementCount; iRow++ ) {
+ if ( i === sortedHits.length ) { break; }
+ fillRow(parent.children[iRow], sortedHits[i]);
+ i += 1;
+ }
+
+ // Append new rows
+ if ( i < sortedHits.length ) {
+ const list = doc.createDocumentFragment();
+ for ( ; i < sortedHits.length; i++ ) {
+ const div = makeRow();
+ fillRow(div, sortedHits[i]);
+ list.appendChild(div);
+ }
+ parent.appendChild(list);
+ }
+
+ // Remove extraneous rows
+ // [Should never happen at this point in this current
+ // bare-bone implementation]
+ };
+
+ const toggleOn = function() {
+ dialog = modalDialog.create(
+ '#loggerStatsDialog',
+ ( ) => {
+ dialog = undefined;
+ if ( timer !== undefined ) {
+ self.cancelIdleCallback(timer);
+ timer = undefined;
+ }
+ }
+ );
+ updateList();
+ modalDialog.show();
+ };
+
+ dom.on('#loggerStats', 'click', toggleOn);
+
+ return {
+ processFilter: function(filter) {
+ if ( enabled !== true ) { return; }
+ if ( filter.source !== 'static' && filter.source !== 'cosmetic' ) {
+ return;
+ }
+ filterHits.set(filter.raw, (filterHits.get(filter.raw) || 0) + 1);
+ if ( dialog === undefined || timer !== undefined ) { return; }
+ timer = self.requestIdleCallback(
+ ( ) => {
+ timer = undefined;
+ updateList();
+ },
+ { timeout: 2001 }
+ );
+ }
+ };
+})();
+
+/******************************************************************************/
+
+(( ) => {
+ const lines = [];
+ const options = {
+ format: 'list',
+ encoding: 'markdown',
+ time: 'anonymous',
+ };
+ let dialog;
+
+ const collectLines = function() {
+ lines.length = 0;
+ let t0 = filteredLoggerEntries.length !== 0
+ ? filteredLoggerEntries[filteredLoggerEntries.length - 1].tstamp
+ : 0;
+ for ( const entry of filteredLoggerEntries ) {
+ const text = entry.textContent;
+ const fields = [];
+ let i = 0;
+ let beg = text.indexOf('\t');
+ if ( beg === 0 ) { continue; }
+ let timeField = text.slice(0, beg);
+ if ( options.time === 'anonymous' ) {
+ timeField = '+' + Math.round((entry.tstamp - t0) / 1000).toString();
+ }
+ fields.push(timeField);
+ beg += 1;
+ while ( beg < text.length ) {
+ let end = text.indexOf('\t', beg);
+ if ( end === -1 ) { end = text.length; }
+ fields.push(text.slice(beg, end));
+ beg = end + 1;
+ i += 1;
+ }
+ lines.push(fields);
+ }
+ };
+
+ const formatAsPlainTextTable = function() {
+ const outputAll = [];
+ for ( const fields of lines ) {
+ outputAll.push(fields.join('\t'));
+ }
+ outputAll.push('');
+ return outputAll.join('\n');
+ };
+
+ const formatAsMarkdownTable = function() {
+ const outputAll = [];
+ let fieldCount = 0;
+ for ( const fields of lines ) {
+ if ( fields.length <= 2 ) { continue; }
+ if ( fields.length > fieldCount ) {
+ fieldCount = fields.length;
+ }
+ const outputOne = [];
+ for ( let i = 0; i < fields.length; i++ ) {
+ const field = fields[i];
+ let code = /\b(?:www\.|https?:\/\/)/.test(field) ? '`' : '';
+ outputOne.push(` ${code}${field.replace(/\|/g, '\\|')}${code} `);
+ }
+ outputAll.push(outputOne.join('|'));
+ }
+ if ( fieldCount !== 0 ) {
+ outputAll.unshift(
+ `${' |'.repeat(fieldCount-1)} `,
+ `${':--- |'.repeat(fieldCount-1)}:--- `
+ );
+ }
+ return `<details><summary>Logger output</summary>\n\n|${outputAll.join('|\n|')}|\n</details>\n`;
+ };
+
+ const formatAsTable = function() {
+ if ( options.encoding === 'plain' ) {
+ return formatAsPlainTextTable();
+ }
+ return formatAsMarkdownTable();
+ };
+
+ const formatAsList = function() {
+ const outputAll = [];
+ for ( const fields of lines ) {
+ const outputOne = [];
+ for ( let i = 0; i < fields.length; i++ ) {
+ let str = fields[i];
+ if ( str.length === 0 ) { continue; }
+ outputOne.push(str);
+ }
+ outputAll.push(outputOne.join('\n'));
+ }
+ let before, between, after;
+ if ( options.encoding === 'markdown' ) {
+ const code = '```';
+ before = `<details><summary>Logger output</summary>\n\n${code}\n`;
+ between = `\n${code}\n${code}\n`;
+ after = `\n${code}\n</details>\n`;
+ } else {
+ before = '';
+ between = '\n\n';
+ after = '\n';
+ }
+ return `${before}${outputAll.join(between)}${after}`;
+ };
+
+ const format = function() {
+ const output = qs$(dialog, '.output');
+ if ( options.format === 'list' ) {
+ output.textContent = formatAsList();
+ } else {
+ output.textContent = formatAsTable();
+ }
+ };
+
+ const setRadioButton = function(group, value) {
+ if ( options.hasOwnProperty(group) === false ) { return; }
+ const groupEl = qs$(dialog, `[data-radio="${group}"]`);
+ const buttonEls = qsa$(groupEl, '[data-radio-item]');
+ for ( const buttonEl of buttonEls ) {
+ dom.cl.toggle(
+ buttonEl,
+ 'on',
+ dom.attr(buttonEl, 'data-radio-item') === value
+ );
+ }
+ options[group] = value;
+ };
+
+ const onOption = function(ev) {
+ const target = ev.target.closest('span[data-i18n]');
+ if ( target === null ) { return; }
+
+ // Copy to clipboard
+ if ( target.matches('.pushbutton') ) {
+ const textarea = qs$(dialog, 'textarea');
+ textarea.focus();
+ if ( textarea.selectionEnd === textarea.selectionStart ) {
+ textarea.select();
+ }
+ document.execCommand('copy');
+ ev.stopPropagation();
+ return;
+ }
+
+ // Radio buttons
+ const group = target.closest('[data-radio]');
+ if ( group === null ) { return; }
+ if ( target.matches('span.on') ) { return; }
+ const item = target.closest('[data-radio-item]');
+ if ( item === null ) { return; }
+ setRadioButton(
+ dom.attr(group, 'data-radio'),
+ dom.attr(item, 'data-radio-item')
+ );
+ format();
+ ev.stopPropagation();
+ };
+
+ const toggleOn = function() {
+ dialog = modalDialog.create(
+ '#loggerExportDialog',
+ ( ) => {
+ dialog = undefined;
+ lines.length = 0;
+ }
+ );
+
+ setRadioButton('format', options.format);
+ setRadioButton('encoding', options.encoding);
+
+ collectLines();
+ format();
+
+ dom.on(qs$(dialog, '.options'), 'click', onOption, { capture: true });
+
+ modalDialog.show();
+ };
+
+ dom.on('#loggerExport', 'click', toggleOn);
+})();
+
+/******************************************************************************/
+
+// TODO:
+// - Give some thoughts to:
+// - an option to discard immediately filtered out new entries
+// - max entry count _per load_
+//
+const loggerSettings = (( ) => {
+ const settings = {
+ discard: {
+ maxAge: 240, // global
+ maxEntryCount: 2000, // per-tab
+ maxLoadCount: 20, // per-tab
+ },
+ columns: [ true, true, true, true, true, true, true, true, true ],
+ linesPerEntry: 4,
+ };
+
+ vAPI.localStorage.getItemAsync('loggerSettings').then(value => {
+ try {
+ const stored = JSON.parse(value);
+ if ( typeof stored.discard.maxAge === 'number' ) {
+ settings.discard.maxAge = stored.discard.maxAge;
+ }
+ if ( typeof stored.discard.maxEntryCount === 'number' ) {
+ settings.discard.maxEntryCount = stored.discard.maxEntryCount;
+ }
+ if ( typeof stored.discard.maxLoadCount === 'number' ) {
+ settings.discard.maxLoadCount = stored.discard.maxLoadCount;
+ }
+ if ( typeof stored.linesPerEntry === 'number' ) {
+ settings.linesPerEntry = stored.linesPerEntry;
+ }
+ if ( Array.isArray(stored.columns) ) {
+ settings.columns = stored.columns;
+ }
+ } catch(ex) {
+ }
+ });
+
+ const valueFromInput = function(input, def) {
+ let value = parseInt(input.value, 10);
+ if ( isNaN(value) ) { value = def; }
+ const min = parseInt(dom.attr(input, 'min'), 10);
+ if ( isNaN(min) === false ) {
+ value = Math.max(value, min);
+ }
+ const max = parseInt(dom.attr(input, 'max'), 10);
+ if ( isNaN(max) === false ) {
+ value = Math.min(value, max);
+ }
+ return value;
+ };
+
+ const toggleOn = function() {
+ const dialog = modalDialog.create(
+ '#loggerSettingsDialog',
+ dialog => {
+ toggleOff(dialog);
+ }
+ );
+
+ // Number inputs
+ let inputs = qsa$(dialog, 'input[type="number"]');
+ inputs[0].value = settings.discard.maxAge;
+ inputs[1].value = settings.discard.maxLoadCount;
+ inputs[2].value = settings.discard.maxEntryCount;
+ inputs[3].value = settings.linesPerEntry;
+ dom.on(inputs[3], 'input', ev => {
+ settings.linesPerEntry = valueFromInput(ev.target, 4);
+ viewPort.updateLayout();
+ });
+
+ // Column checkboxs
+ const onColumnChanged = ev => {
+ const input = ev.target;
+ const i = parseInt(dom.attr(input, 'data-column'), 10);
+ settings.columns[i] = input.checked !== true;
+ viewPort.updateLayout();
+ };
+ inputs = qsa$(dialog, 'input[type="checkbox"][data-column]');
+ for ( const input of inputs ) {
+ const i = parseInt(dom.attr(input, 'data-column'), 10);
+ input.checked = settings.columns[i] === false;
+ dom.on(input, 'change', onColumnChanged);
+ }
+
+ modalDialog.show();
+ };
+
+ const toggleOff = function(dialog) {
+ // Number inputs
+ let inputs = qsa$(dialog, 'input[type="number"]');
+ settings.discard.maxAge = valueFromInput(inputs[0], 240);
+ settings.discard.maxLoadCount = valueFromInput(inputs[1], 25);
+ settings.discard.maxEntryCount = valueFromInput(inputs[2], 2000);
+ settings.linesPerEntry = valueFromInput(inputs[3], 4);
+
+ // Column checkboxs
+ inputs = qsa$(dialog, 'input[type="checkbox"][data-column]');
+ for ( const input of inputs ) {
+ const i = parseInt(dom.attr(input, 'data-column'), 10);
+ settings.columns[i] = input.checked !== true;
+ }
+
+ vAPI.localStorage.setItem(
+ 'loggerSettings',
+ JSON.stringify(settings)
+ );
+
+ viewPort.updateLayout();
+ };
+
+ dom.on('#loggerSettings', 'click', toggleOn);
+
+ return settings;
+})();
+
+/******************************************************************************/
+
+logger.resize = (function() {
+ let timer;
+
+ const resize = function() {
+ const vrect = dom.body.getBoundingClientRect();
+ for ( const elem of qsa$('.vscrollable') ) {
+ const crect = elem.getBoundingClientRect();
+ const dh = crect.bottom - vrect.bottom;
+ if ( dh === 0 ) { continue; }
+ elem.style.height = Math.ceil(crect.height - dh) + 'px';
+ }
+ };
+
+ const resizeAsync = function() {
+ if ( timer !== undefined ) { return; }
+ timer = self.requestAnimationFrame(( ) => {
+ timer = undefined;
+ resize();
+ });
+ };
+
+ resizeAsync();
+
+ dom.on(window, 'resize', resizeAsync, { passive: true });
+
+ return resizeAsync;
+})();
+
+/******************************************************************************/
+
+const grabView = function() {
+ if ( logger.ownerId === undefined ) {
+ logger.ownerId = Date.now();
+ }
+ readLogBuffer();
+};
+
+const releaseView = function() {
+ if ( logger.ownerId === undefined ) { return; }
+ vAPI.messaging.send('loggerUI', {
+ what: 'releaseView',
+ ownerId: logger.ownerId,
+ });
+ logger.ownerId = undefined;
+};
+
+dom.on(window, 'pagehide', releaseView);
+dom.on(window, 'pageshow', grabView);
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1398625
+dom.on(window, 'beforeunload', releaseView);
+
+/******************************************************************************/
+
+dom.on('#pageSelector', 'change', pageSelectorChanged);
+dom.on('#netInspector .vCompactToggler', 'click', toggleVCompactView);
+dom.on('#pause', 'click', pauseNetInspector);
+
+// https://github.com/gorhill/uBlock/issues/507
+// Ensure tab selector is in sync with URL hash
+pageSelectorFromURLHash();
+dom.on(window, 'hashchange', pageSelectorFromURLHash);
+
+// Start to watch the current window geometry 2 seconds after the document
+// is loaded, to be sure no spurious geometry changes will be triggered due
+// to the window geometry pontentially not settling fast enough.
+if ( self.location.search.includes('popup=1') ) {
+ dom.on(window, 'load', ( ) => {
+ vAPI.defer.once(2000).then(( ) => {
+ popupLoggerBox = {
+ x: self.screenX,
+ y: self.screenY,
+ w: self.outerWidth,
+ h: self.outerHeight,
+ };
+ });
+ }, { once: true });
+}
+
+/******************************************************************************/
diff --git a/src/js/logger.js b/src/js/logger.js
new file mode 100644
index 0000000..5d1114f
--- /dev/null
+++ b/src/js/logger.js
@@ -0,0 +1,88 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import { broadcastToAll } from './broadcast.js';
+
+/******************************************************************************/
+
+let buffer = null;
+let lastReadTime = 0;
+let writePtr = 0;
+
+// After 30 seconds without being read, the logger buffer will be considered
+// unused, and thus disabled.
+const logBufferObsoleteAfter = 30 * 1000;
+
+const janitorTimer = vAPI.defer.create(( ) => {
+ if ( buffer === null ) { return; }
+ if ( lastReadTime >= (Date.now() - logBufferObsoleteAfter) ) {
+ return janitorTimer.on(logBufferObsoleteAfter);
+ }
+ logger.enabled = false;
+ buffer = null;
+ writePtr = 0;
+ logger.ownerId = undefined;
+ broadcastToAll({ what: 'loggerDisabled' });
+});
+
+const boxEntry = function(details) {
+ if ( details.tstamp === undefined ) {
+ details.tstamp = Date.now();
+ }
+ return JSON.stringify(details);
+};
+
+const logger = {
+ enabled: false,
+ ownerId: undefined,
+ writeOne: function(details) {
+ if ( buffer === null ) { return; }
+ const box = boxEntry(details);
+ if ( writePtr === buffer.length ) {
+ buffer.push(box);
+ } else {
+ buffer[writePtr] = box;
+ }
+ writePtr += 1;
+ },
+ readAll: function(ownerId) {
+ this.ownerId = ownerId;
+ if ( buffer === null ) {
+ this.enabled = true;
+ buffer = [];
+ janitorTimer.on(logBufferObsoleteAfter);
+ }
+ const out = buffer.slice(0, writePtr);
+ writePtr = 0;
+ lastReadTime = Date.now();
+ return out;
+ },
+};
+
+/******************************************************************************/
+
+export default logger;
+
+/******************************************************************************/
diff --git a/src/js/lz4.js b/src/js/lz4.js
new file mode 100644
index 0000000..608cdd8
--- /dev/null
+++ b/src/js/lz4.js
@@ -0,0 +1,190 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2018-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* global lz4BlockCodec */
+
+'use strict';
+
+/******************************************************************************/
+
+import µb from './background.js';
+
+/*******************************************************************************
+
+ Experimental support for storage compression.
+
+ For background information on the topic, see:
+ https://github.com/uBlockOrigin/uBlock-issues/issues/141#issuecomment-407737186
+
+**/
+
+/******************************************************************************/
+
+let promisedInstance;
+let textEncoder, textDecoder;
+let ttlCount = 0;
+let ttlDelay = 60000;
+
+const init = function() {
+ ttlDelay = µb.hiddenSettings.autoUpdateAssetFetchPeriod * 2 * 1000;
+ if ( promisedInstance === undefined ) {
+ let flavor;
+ if ( µb.hiddenSettings.disableWebAssembly === true ) {
+ flavor = 'js';
+ }
+ promisedInstance = lz4BlockCodec.createInstance(flavor);
+ }
+ return promisedInstance;
+};
+
+// We can't shrink memory usage of lz4 codec instances, and in the
+// current case memory usage can grow to a significant amount given
+// that a single contiguous memory buffer is required to accommodate
+// both input and output data. Thus a time-to-live implementation
+// which will cause the wasm instance to be forgotten after enough
+// time elapse without the instance being used.
+
+const destroy = function() {
+ //if ( lz4CodecInstance !== undefined ) {
+ // console.info(
+ // 'uBO: freeing lz4-block-codec instance (%s KB)',
+ // lz4CodecInstance.bytesInUse() >>> 10
+ // );
+ //}
+ promisedInstance = undefined;
+ textEncoder = textDecoder = undefined;
+ ttlCount = 0;
+};
+
+const ttlTimer = vAPI.defer.create(destroy);
+
+const ttlManage = function(count) {
+ ttlTimer.off();
+ ttlCount += count;
+ if ( ttlCount > 0 ) { return; }
+ ttlTimer.on(ttlDelay);
+};
+
+const encodeValue = function(lz4CodecInstance, dataIn) {
+ if ( !lz4CodecInstance ) { return; }
+ //let t0 = window.performance.now();
+ if ( textEncoder === undefined ) {
+ textEncoder = new TextEncoder();
+ }
+ const inputArray = textEncoder.encode(dataIn);
+ const inputSize = inputArray.byteLength;
+ const outputArray = lz4CodecInstance.encodeBlock(inputArray, 8);
+ if ( outputArray instanceof Uint8Array === false ) { return; }
+ outputArray[0] = 0x18;
+ outputArray[1] = 0x4D;
+ outputArray[2] = 0x22;
+ outputArray[3] = 0x04;
+ outputArray[4] = (inputSize >>> 0) & 0xFF;
+ outputArray[5] = (inputSize >>> 8) & 0xFF;
+ outputArray[6] = (inputSize >>> 16) & 0xFF;
+ outputArray[7] = (inputSize >>> 24) & 0xFF;
+ //console.info(
+ // 'uBO: [%s] compressed %d KB => %d KB (%s%%) in %s ms',
+ // inputArray.byteLength >> 10,
+ // outputArray.byteLength >> 10,
+ // (outputArray.byteLength / inputArray.byteLength * 100).toFixed(0),
+ // (window.performance.now() - t0).toFixed(1)
+ //);
+ return outputArray;
+};
+
+const decodeValue = function(lz4CodecInstance, inputArray) {
+ if ( !lz4CodecInstance ) { return; }
+ //let t0 = window.performance.now();
+ if (
+ inputArray[0] !== 0x18 || inputArray[1] !== 0x4D ||
+ inputArray[2] !== 0x22 || inputArray[3] !== 0x04
+ ) {
+ console.error('decodeValue: invalid input array');
+ return;
+ }
+ const outputSize =
+ (inputArray[4] << 0) | (inputArray[5] << 8) |
+ (inputArray[6] << 16) | (inputArray[7] << 24);
+ const outputArray = lz4CodecInstance.decodeBlock(inputArray, 8, outputSize);
+ if ( outputArray instanceof Uint8Array === false ) { return; }
+ if ( textDecoder === undefined ) {
+ textDecoder = new TextDecoder();
+ }
+ const s = textDecoder.decode(outputArray);
+ //console.info(
+ // 'uBO: [%s] decompressed %d KB => %d KB (%s%%) in %s ms',
+ // inputArray.byteLength >>> 10,
+ // outputSize >>> 10,
+ // (inputArray.byteLength / outputSize * 100).toFixed(0),
+ // (window.performance.now() - t0).toFixed(1)
+ //);
+ return s;
+};
+
+const lz4Codec = {
+ // Arguments:
+ // dataIn: must be a string
+ // Returns:
+ // A Uint8Array, or the input string as is if compression is not
+ // possible.
+ encode: async function(dataIn, serialize = undefined) {
+ if ( typeof dataIn !== 'string' || dataIn.length < 4096 ) {
+ return dataIn;
+ }
+ ttlManage(1);
+ const lz4CodecInstance = await init();
+ let dataOut = encodeValue(lz4CodecInstance, dataIn);
+ ttlManage(-1);
+ if ( serialize instanceof Function ) {
+ dataOut = await serialize(dataOut);
+ }
+ return dataOut || dataIn;
+ },
+ // Arguments:
+ // dataIn: must be a Uint8Array
+ // Returns:
+ // A string, or the input argument as is if decompression is not
+ // possible.
+ decode: async function(dataIn, deserialize = undefined) {
+ if ( deserialize instanceof Function ) {
+ dataIn = await deserialize(dataIn);
+ }
+ if ( dataIn instanceof Uint8Array === false ) {
+ return dataIn;
+ }
+ ttlManage(1);
+ const lz4CodecInstance = await init();
+ const dataOut = decodeValue(lz4CodecInstance, dataIn);
+ ttlManage(-1);
+ return dataOut || dataIn;
+ },
+ relinquish: function() {
+ ttlDelay = 1;
+ ttlManage(0);
+ },
+};
+
+/******************************************************************************/
+
+export default lz4Codec;
+
+/******************************************************************************/
diff --git a/src/js/messaging.js b/src/js/messaging.js
new file mode 100644
index 0000000..52242b3
--- /dev/null
+++ b/src/js/messaging.js
@@ -0,0 +1,2195 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* globals browser */
+
+'use strict';
+
+/******************************************************************************/
+
+import publicSuffixList from '../lib/publicsuffixlist/publicsuffixlist.js';
+import punycode from '../lib/punycode.js';
+
+import { filteringBehaviorChanged } from './broadcast.js';
+import cacheStorage from './cachestorage.js';
+import cosmeticFilteringEngine from './cosmetic-filtering.js';
+import htmlFilteringEngine from './html-filtering.js';
+import logger from './logger.js';
+import lz4Codec from './lz4.js';
+import io from './assets.js';
+import scriptletFilteringEngine from './scriptlet-filtering.js';
+import staticFilteringReverseLookup from './reverselookup.js';
+import staticNetFilteringEngine from './static-net-filtering.js';
+import µb from './background.js';
+import webRequest from './traffic.js';
+import { denseBase64 } from './base64-custom.js';
+import { dnrRulesetFromRawLists } from './static-dnr-filtering.js';
+import { i18n$ } from './i18n.js';
+import { redirectEngine } from './redirect-engine.js';
+import * as sfp from './static-filtering-parser.js';
+
+import {
+ permanentFirewall,
+ sessionFirewall,
+ permanentSwitches,
+ sessionSwitches,
+ permanentURLFiltering,
+ sessionURLFiltering,
+} from './filtering-engines.js';
+
+import {
+ domainFromHostname,
+ domainFromURI,
+ entityFromDomain,
+ hostnameFromURI,
+ isNetworkURI,
+} from './uri-utils.js';
+
+import './benchmarks.js';
+
+/******************************************************************************/
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/710
+// Listeners have a name and a "privileged" status.
+// The nameless default handler is always deemed "privileged".
+// Messages from privileged ports must never relayed to listeners
+// which are not privileged.
+
+/******************************************************************************/
+/******************************************************************************/
+
+// Default handler
+// privileged
+
+{
+// >>>>> start of local scope
+
+const clickToLoad = function(request, sender) {
+ const { tabId, frameId } = sender;
+ if ( tabId === undefined || frameId === undefined ) { return false; }
+ const pageStore = µb.pageStoreFromTabId(tabId);
+ if ( pageStore === null ) { return false; }
+ pageStore.clickToLoad(frameId, request.frameURL);
+ return true;
+};
+
+const getDomainNames = function(targets) {
+ return targets.map(target => {
+ if ( typeof target !== 'string' ) { return ''; }
+ return target.indexOf('/') !== -1
+ ? domainFromURI(target) || ''
+ : domainFromHostname(target) || target;
+ });
+};
+
+const onMessage = function(request, sender, callback) {
+ // Async
+ switch ( request.what ) {
+ case 'getAssetContent':
+ // https://github.com/chrisaljoudi/uBlock/issues/417
+ io.get(request.url, {
+ dontCache: true,
+ needSourceURL: true,
+ }).then(result => {
+ result.trustedSource = µb.isTrustedList(result.assetKey);
+ callback(result);
+ });
+ return;
+
+ case 'listsFromNetFilter':
+ staticFilteringReverseLookup.fromNetFilter(
+ request.rawFilter
+ ).then(response => {
+ callback(response);
+ });
+ return;
+
+ case 'listsFromCosmeticFilter':
+ staticFilteringReverseLookup.fromExtendedFilter(
+ request
+ ).then(response => {
+ callback(response);
+ });
+ return;
+
+ case 'reloadAllFilters':
+ µb.loadFilterLists().then(( ) => { callback(); });
+ return;
+
+ case 'scriptlet':
+ vAPI.tabs.executeScript(request.tabId, {
+ file: `/js/scriptlets/${request.scriptlet}.js`
+ }).then(result => {
+ callback(result);
+ });
+ return;
+
+ default:
+ break;
+ }
+
+ // Sync
+ let response;
+
+ switch ( request.what ) {
+ case 'applyFilterListSelection':
+ response = µb.applyFilterListSelection(request);
+ break;
+
+ case 'clickToLoad':
+ response = clickToLoad(request, sender);
+ break;
+
+ case 'createUserFilter':
+ µb.createUserFilters(request);
+ break;
+
+ case 'getAppData':
+ response = {
+ name: browser.runtime.getManifest().name,
+ version: vAPI.app.version,
+ canBenchmark: µb.hiddenSettings.benchmarkDatasetURL !== 'unset',
+ };
+ break;
+
+ case 'getDomainNames':
+ response = getDomainNames(request.targets);
+ break;
+
+ case 'getTrustedScriptletTokens':
+ response = redirectEngine.getTrustedScriptletTokens();
+ break;
+
+ case 'getWhitelist':
+ response = {
+ whitelist: µb.arrayFromWhitelist(µb.netWhitelist),
+ whitelistDefault: µb.netWhitelistDefault,
+ reBadHostname: µb.reWhitelistBadHostname.source,
+ reHostnameExtractor: µb.reWhitelistHostnameExtractor.source
+ };
+ break;
+
+ case 'launchElementPicker':
+ // Launched from some auxiliary pages, clear context menu coords.
+ µb.epickerArgs.mouse = false;
+ µb.elementPickerExec(request.tabId, 0, request.targetURL, request.zap);
+ break;
+
+ case 'loggerDisabled':
+ µb.clearInMemoryFilters();
+ break;
+
+ case 'gotoURL':
+ µb.openNewTab(request.details);
+ break;
+
+ case 'readyToFilter':
+ response = µb.readyToFilter;
+ break;
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1954
+ // In case of document-blocked page, navigate to blocked URL instead
+ // of forcing a reload.
+ case 'reloadTab': {
+ if ( vAPI.isBehindTheSceneTabId(request.tabId) ) { break; }
+ const { tabId, bypassCache, url, select } = request;
+ vAPI.tabs.get(tabId).then(tab => {
+ if ( url && tab && url !== tab.url ) {
+ vAPI.tabs.replace(tabId, url);
+ } else {
+ vAPI.tabs.reload(tabId, bypassCache === true);
+ }
+ });
+ if ( select && vAPI.tabs.select ) {
+ vAPI.tabs.select(tabId);
+ }
+ break;
+ }
+ case 'setWhitelist':
+ µb.netWhitelist = µb.whitelistFromString(request.whitelist);
+ µb.saveWhitelist();
+ filteringBehaviorChanged();
+ break;
+
+ case 'toggleHostnameSwitch':
+ µb.toggleHostnameSwitch(request);
+ break;
+
+ case 'uiAccentStylesheet':
+ µb.uiAccentStylesheet = request.stylesheet;
+ break;
+
+ case 'uiStyles':
+ response = {
+ uiAccentCustom: µb.userSettings.uiAccentCustom,
+ uiAccentCustom0: µb.userSettings.uiAccentCustom0,
+ uiAccentStylesheet: µb.uiAccentStylesheet,
+ uiStyles: µb.hiddenSettings.uiStyles,
+ uiTheme: µb.userSettings.uiTheme,
+ };
+ break;
+
+ case 'userSettings':
+ response = µb.changeUserSettings(request.name, request.value);
+ if ( response instanceof Object ) {
+ if ( vAPI.net.canUncloakCnames !== true ) {
+ response.cnameUncloakEnabled = undefined;
+ }
+ response.canLeakLocalIPAddresses =
+ vAPI.browserSettings.canLeakLocalIPAddresses === true;
+ }
+ break;
+
+ default:
+ return vAPI.messaging.UNHANDLED;
+ }
+
+ callback(response);
+};
+
+vAPI.messaging.setup(onMessage);
+
+// <<<<< end of local scope
+}
+
+/******************************************************************************/
+/******************************************************************************/
+
+// Channel:
+// popupPanel
+// privileged
+
+{
+// >>>>> start of local scope
+
+const createCounts = ( ) => {
+ return {
+ blocked: { any: 0, frame: 0, script: 0 },
+ allowed: { any: 0, frame: 0, script: 0 },
+ };
+};
+
+const getHostnameDict = function(hostnameDetailsMap, out) {
+ const hnDict = Object.create(null);
+ const cnMap = [];
+
+ const createDictEntry = (domain, hostname, details) => {
+ const cname = vAPI.net.canonicalNameFromHostname(hostname);
+ if ( cname !== undefined ) {
+ cnMap.push([ cname, hostname ]);
+ }
+ hnDict[hostname] = { domain, counts: details.counts };
+ };
+
+ for ( const hnDetails of hostnameDetailsMap.values() ) {
+ const hostname = hnDetails.hostname;
+ if ( hnDict[hostname] !== undefined ) { continue; }
+ const domain = domainFromHostname(hostname) || hostname;
+ const dnDetails =
+ hostnameDetailsMap.get(domain) || { counts: createCounts() };
+ if ( hnDict[domain] === undefined ) {
+ createDictEntry(domain, domain, dnDetails);
+ }
+ if ( hostname === domain ) { continue; }
+ createDictEntry(domain, hostname, hnDetails);
+ }
+
+ out.hostnameDict = hnDict;
+ out.cnameMap = cnMap;
+};
+
+const firewallRuleTypes = [
+ '*',
+ 'image',
+ '3p',
+ 'inline-script',
+ '1p-script',
+ '3p-script',
+ '3p-frame',
+];
+
+const getFirewallRules = function(src, out) {
+ const ruleset = out.firewallRules = {};
+ const df = sessionFirewall;
+
+ for ( const type of firewallRuleTypes ) {
+ const r = df.lookupRuleData('*', '*', type);
+ if ( r === undefined ) { continue; }
+ ruleset[`/ * ${type}`] = r;
+ }
+ if ( typeof src !== 'string' ) { return; }
+
+ for ( const type of firewallRuleTypes ) {
+ const r = df.lookupRuleData(src, '*', type);
+ if ( r === undefined ) { continue; }
+ ruleset[`. * ${type}`] = r;
+ }
+
+ const { hostnameDict } = out;
+ for ( const des in hostnameDict ) {
+ let r = df.lookupRuleData('*', des, '*');
+ if ( r !== undefined ) { ruleset[`/ ${des} *`] = r; }
+ r = df.lookupRuleData(src, des, '*');
+ if ( r !== undefined ) { ruleset[`. ${des} *`] = r; }
+ }
+};
+
+const popupDataFromTabId = function(tabId, tabTitle) {
+ const tabContext = µb.tabContextManager.mustLookup(tabId);
+ const rootHostname = tabContext.rootHostname;
+ const µbus = µb.userSettings;
+ const µbhs = µb.hiddenSettings;
+ const r = {
+ advancedUserEnabled: µbus.advancedUserEnabled,
+ appName: vAPI.app.name,
+ appVersion: vAPI.app.version,
+ colorBlindFriendly: µbus.colorBlindFriendly,
+ cosmeticFilteringSwitch: false,
+ firewallPaneMinimized: µbus.firewallPaneMinimized,
+ globalAllowedRequestCount: µb.localSettings.allowedRequestCount,
+ globalBlockedRequestCount: µb.localSettings.blockedRequestCount,
+ fontSize: µbhs.popupFontSize,
+ godMode: µbhs.filterAuthorMode,
+ netFilteringSwitch: false,
+ rawURL: tabContext.rawURL,
+ pageURL: tabContext.normalURL,
+ pageHostname: rootHostname,
+ pageDomain: tabContext.rootDomain,
+ popupBlockedCount: 0,
+ popupPanelSections: µbus.popupPanelSections,
+ popupPanelDisabledSections: µbhs.popupPanelDisabledSections,
+ popupPanelLockedSections: µbhs.popupPanelLockedSections,
+ popupPanelHeightMode: µbhs.popupPanelHeightMode,
+ tabId,
+ tabTitle,
+ tooltipsDisabled: µbus.tooltipsDisabled,
+ hasUnprocessedRequest: vAPI.net && vAPI.net.hasUnprocessedRequest(tabId),
+ };
+
+ if ( µbhs.uiPopupConfig !== 'unset' ) {
+ r.uiPopupConfig = µbhs.uiPopupConfig;
+ }
+
+ const pageStore = µb.pageStoreFromTabId(tabId);
+ if ( pageStore ) {
+ r.pageCounts = pageStore.counts;
+ r.netFilteringSwitch = pageStore.getNetFilteringSwitch();
+ getHostnameDict(pageStore.getAllHostnameDetails(), r);
+ r.contentLastModified = pageStore.contentLastModified;
+ getFirewallRules(rootHostname, r);
+ r.canElementPicker = isNetworkURI(r.rawURL);
+ r.noPopups = sessionSwitches.evaluateZ(
+ 'no-popups',
+ rootHostname
+ );
+ r.popupBlockedCount = pageStore.popupBlockedCount;
+ r.noCosmeticFiltering = sessionSwitches.evaluateZ(
+ 'no-cosmetic-filtering',
+ rootHostname
+ );
+ r.noLargeMedia = sessionSwitches.evaluateZ(
+ 'no-large-media',
+ rootHostname
+ );
+ r.largeMediaCount = pageStore.largeMediaCount;
+ r.noRemoteFonts = sessionSwitches.evaluateZ(
+ 'no-remote-fonts',
+ rootHostname
+ );
+ r.remoteFontCount = pageStore.remoteFontCount;
+ r.noScripting = sessionSwitches.evaluateZ(
+ 'no-scripting',
+ rootHostname
+ );
+ } else {
+ r.hostnameDict = {};
+ getFirewallRules(undefined, r);
+ }
+
+ r.matrixIsDirty = sessionFirewall.hasSameRules(
+ permanentFirewall,
+ rootHostname,
+ r.hostnameDict
+ ) === false;
+ if ( r.matrixIsDirty === false ) {
+ r.matrixIsDirty = sessionSwitches.hasSameRules(
+ permanentSwitches,
+ rootHostname
+ ) === false;
+ }
+ return r;
+};
+
+const popupDataFromRequest = async function(request) {
+ if ( request.tabId ) {
+ return popupDataFromTabId(request.tabId, '');
+ }
+
+ // Still no target tab id? Use currently selected tab.
+ const tab = await vAPI.tabs.getCurrent();
+ let tabId = '';
+ let tabTitle = '';
+ if ( tab instanceof Object ) {
+ tabId = tab.id;
+ tabTitle = tab.title || '';
+ }
+ return popupDataFromTabId(tabId, tabTitle);
+};
+
+const getElementCount = async function(tabId, what) {
+ const results = await vAPI.tabs.executeScript(tabId, {
+ allFrames: true,
+ file: `/js/scriptlets/dom-survey-${what}.js`,
+ runAt: 'document_end',
+ });
+
+ let total = 0;
+ for ( const count of results ) {
+ if ( typeof count !== 'number' ) { continue; }
+ if ( count === -1 ) { return -1; }
+ total += count;
+ }
+
+ return total;
+};
+
+const launchReporter = async function(request) {
+ const pageStore = µb.pageStoreFromTabId(request.tabId);
+ if ( pageStore === null ) { return; }
+ if ( pageStore.hasUnprocessedRequest ) {
+ request.popupPanel.hasUnprocessedRequest = true;
+ }
+
+ const entries = await io.getUpdateAges({
+ filters: µb.selectedFilterLists.slice()
+ });
+ const shouldUpdateLists = [];
+ for ( const entry of entries ) {
+ if ( entry.age < (2 * 60 * 60 * 1000) ) { continue; }
+ shouldUpdateLists.push(entry.assetKey);
+ }
+
+ // https://github.com/gorhill/uBlock/commit/6efd8eb#commitcomment-107523558
+ // Important: for whatever reason, not using `document_start` causes the
+ // Promise returned by `tabs.executeScript()` to resolve only when the
+ // associated tab is closed.
+ const cosmeticSurveyResults = await vAPI.tabs.executeScript(request.tabId, {
+ allFrames: true,
+ file: '/js/scriptlets/cosmetic-report.js',
+ matchAboutBlank: true,
+ runAt: 'document_start',
+ });
+
+ const filters = cosmeticSurveyResults.reduce((a, v) => {
+ if ( Array.isArray(v) ) { a.push(...v); }
+ return a;
+ }, []);
+ // Remove duplicate, truncate too long filters.
+ if ( filters.length !== 0 ) {
+ request.popupPanel.extended = Array.from(
+ new Set(filters.map(s => s.length <= 64 ? s : `${s.slice(0, 64)}…`))
+ );
+ }
+
+ const supportURL = new URL(vAPI.getURL('support.html'));
+ supportURL.searchParams.set('pageURL', request.pageURL);
+ supportURL.searchParams.set('popupPanel', JSON.stringify(request.popupPanel));
+ if ( shouldUpdateLists.length ) {
+ supportURL.searchParams.set('shouldUpdateLists', JSON.stringify(shouldUpdateLists));
+ }
+ return supportURL.href;
+};
+
+const onMessage = function(request, sender, callback) {
+ // Async
+ switch ( request.what ) {
+ case 'getHiddenElementCount':
+ getElementCount(request.tabId, 'elements').then(count => {
+ callback(count);
+ });
+ return;
+
+ case 'getScriptCount':
+ getElementCount(request.tabId, 'scripts').then(count => {
+ callback(count);
+ });
+ return;
+
+ case 'getPopupData':
+ popupDataFromRequest(request).then(popupData => {
+ callback(popupData);
+ });
+ return;
+
+ default:
+ break;
+ }
+
+ // Sync
+ let response;
+
+ switch ( request.what ) {
+ case 'dismissUnprocessedRequest':
+ vAPI.net.removeUnprocessedRequest(request.tabId);
+ µb.updateToolbarIcon(request.tabId, 0b110);
+ break;
+
+ case 'hasPopupContentChanged': {
+ const pageStore = µb.pageStoreFromTabId(request.tabId);
+ const lastModified = pageStore ? pageStore.contentLastModified : 0;
+ response = lastModified !== request.contentLastModified;
+ break;
+ }
+
+ case 'launchReporter': {
+ launchReporter(request).then(url => {
+ if ( typeof url !== 'string' ) { return; }
+ µb.openNewTab({ url, select: true, index: -1 });
+ });
+ break;
+ }
+
+ case 'revertFirewallRules':
+ // TODO: use Set() to message around sets of hostnames
+ sessionFirewall.copyRules(
+ permanentFirewall,
+ request.srcHostname,
+ Object.assign(Object.create(null), request.desHostnames)
+ );
+ sessionSwitches.copyRules(
+ permanentSwitches,
+ request.srcHostname
+ );
+ // https://github.com/gorhill/uBlock/issues/188
+ cosmeticFilteringEngine.removeFromSelectorCache(
+ request.srcHostname,
+ 'net'
+ );
+ µb.updateToolbarIcon(request.tabId, 0b100);
+ response = popupDataFromTabId(request.tabId);
+ break;
+
+ case 'saveFirewallRules':
+ // TODO: use Set() to message around sets of hostnames
+ if (
+ permanentFirewall.copyRules(
+ sessionFirewall,
+ request.srcHostname,
+ Object.assign(Object.create(null), request.desHostnames)
+ )
+ ) {
+ µb.savePermanentFirewallRules();
+ }
+ if (
+ permanentSwitches.copyRules(
+ sessionSwitches,
+ request.srcHostname
+ )
+ ) {
+ µb.saveHostnameSwitches();
+ }
+ break;
+
+ case 'toggleHostnameSwitch':
+ µb.toggleHostnameSwitch(request);
+ response = popupDataFromTabId(request.tabId);
+ break;
+
+ case 'toggleFirewallRule':
+ µb.toggleFirewallRule(request);
+ response = popupDataFromTabId(request.tabId);
+ break;
+
+ case 'toggleNetFiltering': {
+ const pageStore = µb.pageStoreFromTabId(request.tabId);
+ if ( pageStore ) {
+ pageStore.toggleNetFilteringSwitch(
+ request.url,
+ request.scope,
+ request.state
+ );
+ µb.updateToolbarIcon(request.tabId, 0b111);
+ }
+ break;
+ }
+ default:
+ return vAPI.messaging.UNHANDLED;
+ }
+
+ callback(response);
+};
+
+vAPI.messaging.listen({
+ name: 'popupPanel',
+ listener: onMessage,
+ privileged: true,
+});
+
+// <<<<< end of local scope
+}
+
+/******************************************************************************/
+/******************************************************************************/
+
+// Channel:
+// contentscript
+// unprivileged
+
+{
+// >>>>> start of local scope
+
+const retrieveContentScriptParameters = async function(sender, request) {
+ if ( µb.readyToFilter !== true ) { return; }
+ const { tabId, frameId } = sender;
+ if ( tabId === undefined || frameId === undefined ) { return; }
+
+ const pageStore = µb.pageStoreFromTabId(tabId);
+ if ( pageStore === null || pageStore.getNetFilteringSwitch() === false ) {
+ return;
+ }
+
+ // A content script may not always be able to successfully look up the
+ // effective context, hence in such case we try again to look up here
+ // using cached information about embedded frames.
+ if ( frameId !== 0 && request.url.startsWith('about:') ) {
+ request.url = pageStore.getEffectiveFrameURL(sender);
+ }
+
+ const noSpecificCosmeticFiltering =
+ pageStore.shouldApplySpecificCosmeticFilters(frameId) === false;
+ const noGenericCosmeticFiltering =
+ pageStore.shouldApplyGenericCosmeticFilters(frameId) === false;
+
+ const response = {
+ collapseBlocked: µb.userSettings.collapseBlocked,
+ noGenericCosmeticFiltering,
+ noSpecificCosmeticFiltering,
+ };
+
+ request.tabId = tabId;
+ request.frameId = frameId;
+ request.hostname = hostnameFromURI(request.url);
+ request.domain = domainFromHostname(request.hostname);
+ request.entity = entityFromDomain(request.domain);
+
+ const scf = response.specificCosmeticFilters =
+ cosmeticFilteringEngine.retrieveSpecificSelectors(request, response);
+
+ // The procedural filterer's code is loaded only when needed and must be
+ // present before returning response to caller.
+ if (
+ scf.proceduralFilters.length !== 0 || (
+ logger.enabled && (
+ scf.convertedProceduralFilters.length !== 0 ||
+ scf.exceptedFilters.length !== 0
+ )
+ )
+ ) {
+ await vAPI.tabs.executeScript(tabId, {
+ allFrames: false,
+ file: '/js/contentscript-extra.js',
+ frameId,
+ matchAboutBlank: true,
+ runAt: 'document_start',
+ });
+ }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/688#issuecomment-748179731
+ // For non-network URIs, scriptlet injection is deferred to here. The
+ // effective URL is available here in `request.url`.
+ if ( logger.enabled || request.needScriptlets ) {
+ const scriptletDetails = scriptletFilteringEngine.injectNow(request);
+ if ( scriptletDetails !== undefined ) {
+ scriptletFilteringEngine.toLogger(request, scriptletDetails);
+ if ( request.needScriptlets ) {
+ response.scriptletDetails = scriptletDetails;
+ }
+ }
+ }
+
+ // https://github.com/NanoMeow/QuickReports/issues/6#issuecomment-414516623
+ // Inject as early as possible to make the cosmetic logger code less
+ // sensitive to the removal of DOM nodes which may match injected
+ // cosmetic filters.
+ if ( logger.enabled ) {
+ if (
+ noSpecificCosmeticFiltering === false ||
+ noGenericCosmeticFiltering === false
+ ) {
+ vAPI.tabs.executeScript(tabId, {
+ allFrames: false,
+ file: '/js/scriptlets/cosmetic-logger.js',
+ frameId,
+ matchAboutBlank: true,
+ runAt: 'document_start',
+ });
+ }
+ }
+
+ return response;
+};
+
+const onMessage = function(request, sender, callback) {
+ // Async
+ switch ( request.what ) {
+ case 'retrieveContentScriptParameters':
+ return retrieveContentScriptParameters(
+ sender,
+ request
+ ).then(response => {
+ callback(response);
+ });
+ default:
+ break;
+ }
+
+ const pageStore = µb.pageStoreFromTabId(sender.tabId);
+
+ // Sync
+ let response;
+
+ switch ( request.what ) {
+ case 'cosmeticFiltersInjected':
+ cosmeticFilteringEngine.addToSelectorCache(request);
+ break;
+
+ case 'disableGenericCosmeticFilteringSurveyor':
+ cosmeticFilteringEngine.disableSurveyor(request);
+ break;
+
+ case 'getCollapsibleBlockedRequests':
+ response = {
+ id: request.id,
+ hash: request.hash,
+ netSelectorCacheCountMax:
+ cosmeticFilteringEngine.netSelectorCacheCountMax,
+ };
+ if (
+ µb.userSettings.collapseBlocked &&
+ pageStore && pageStore.getNetFilteringSwitch()
+ ) {
+ pageStore.getBlockedResources(request, response);
+ }
+ break;
+
+ case 'maybeGoodPopup':
+ µb.maybeGoodPopup.tabId = sender.tabId;
+ µb.maybeGoodPopup.url = request.url;
+ break;
+
+ case 'shouldRenderNoscriptTags':
+ if ( pageStore === null ) { break; }
+ const fctxt = µb.filteringContext.fromTabId(sender.tabId);
+ if ( pageStore.filterScripting(fctxt, undefined) ) {
+ vAPI.tabs.executeScript(sender.tabId, {
+ file: '/js/scriptlets/noscript-spoof.js',
+ frameId: sender.frameId,
+ runAt: 'document_end',
+ });
+ }
+ break;
+
+ case 'retrieveGenericCosmeticSelectors':
+ request.tabId = sender.tabId;
+ request.frameId = sender.frameId;
+ response = {
+ result: cosmeticFilteringEngine.retrieveGenericSelectors(request),
+ };
+ break;
+
+ default:
+ return vAPI.messaging.UNHANDLED;
+ }
+
+ callback(response);
+};
+
+vAPI.messaging.listen({
+ name: 'contentscript',
+ listener: onMessage,
+});
+
+// <<<<< end of local scope
+}
+
+/******************************************************************************/
+/******************************************************************************/
+
+// Channel:
+// elementPicker
+// unprivileged
+
+{
+// >>>>> start of local scope
+
+const onMessage = function(request, sender, callback) {
+ // Async
+ switch ( request.what ) {
+ // The procedural filterer must be present in case the user wants to
+ // type-in custom filters.
+ case 'elementPickerArguments':
+ return vAPI.tabs.executeScript(sender.tabId, {
+ allFrames: false,
+ file: '/js/contentscript-extra.js',
+ frameId: sender.frameId,
+ matchAboutBlank: true,
+ runAt: 'document_start',
+ }).then(( ) => {
+ callback({
+ target: µb.epickerArgs.target,
+ mouse: µb.epickerArgs.mouse,
+ zap: µb.epickerArgs.zap,
+ eprom: µb.epickerArgs.eprom,
+ pickerURL: vAPI.getURL(
+ `/web_accessible_resources/epicker-ui.html?secret=${vAPI.warSecret.short()}`
+ ),
+ });
+ µb.epickerArgs.target = '';
+ });
+ default:
+ break;
+ }
+
+ // Sync
+ let response;
+
+ switch ( request.what ) {
+ case 'elementPickerEprom':
+ µb.epickerArgs.eprom = request;
+ break;
+
+ default:
+ return vAPI.messaging.UNHANDLED;
+ }
+
+ callback(response);
+};
+
+vAPI.messaging.listen({
+ name: 'elementPicker',
+ listener: onMessage,
+});
+
+// <<<<< end of local scope
+}
+
+/******************************************************************************/
+/******************************************************************************/
+
+// Channel:
+// cloudWidget
+// privileged
+
+{
+// >>>>> start of local scope
+
+const fromBase64 = function(encoded) {
+ if ( typeof encoded !== 'string' ) {
+ return Promise.resolve(encoded);
+ }
+ let u8array;
+ try {
+ u8array = denseBase64.decode(encoded);
+ } catch(ex) {
+ }
+ return Promise.resolve(u8array !== undefined ? u8array : encoded);
+};
+
+const toBase64 = function(data) {
+ const value = data instanceof Uint8Array
+ ? denseBase64.encode(data)
+ : data;
+ return Promise.resolve(value);
+};
+
+const compress = function(json) {
+ return lz4Codec.encode(json, toBase64);
+};
+
+const decompress = function(encoded) {
+ return lz4Codec.decode(encoded, fromBase64);
+};
+
+const onMessage = function(request, sender, callback) {
+ // Cloud storage support is optional.
+ if ( µb.cloudStorageSupported !== true ) {
+ callback();
+ return;
+ }
+
+ // Async
+ switch ( request.what ) {
+ case 'cloudGetOptions':
+ vAPI.cloud.getOptions(function(options) {
+ options.enabled = µb.userSettings.cloudStorageEnabled === true;
+ callback(options);
+ });
+ return;
+
+ case 'cloudSetOptions':
+ vAPI.cloud.setOptions(request.options, callback);
+ return;
+
+ case 'cloudPull':
+ request.decode = decompress;
+ return vAPI.cloud.pull(request).then(result => {
+ callback(result);
+ });
+
+ case 'cloudPush':
+ if ( µb.hiddenSettings.cloudStorageCompression ) {
+ request.encode = compress;
+ }
+ return vAPI.cloud.push(request).then(result => {
+ callback(result);
+ });
+
+ case 'cloudUsed':
+ return vAPI.cloud.used(request.datakey).then(result => {
+ callback(result);
+ });
+
+ default:
+ break;
+ }
+
+ // Sync
+ let response;
+
+ switch ( request.what ) {
+ // For when cloud storage is disabled.
+ case 'cloudPull':
+ // fallthrough
+ case 'cloudPush':
+ break;
+
+ default:
+ return vAPI.messaging.UNHANDLED;
+ }
+
+ callback(response);
+};
+
+vAPI.messaging.listen({
+ name: 'cloudWidget',
+ listener: onMessage,
+ privileged: true,
+});
+
+// <<<<< end of local scope
+}
+
+/******************************************************************************/
+/******************************************************************************/
+
+// Channel:
+// dashboard
+// privileged
+
+{
+// >>>>> start of local scope
+
+// Settings
+const getLocalData = async function() {
+ const data = Object.assign({}, µb.restoreBackupSettings);
+ data.storageUsed = await µb.getBytesInUse();
+ data.cloudStorageSupported = µb.cloudStorageSupported;
+ data.privacySettingsSupported = µb.privacySettingsSupported;
+ return data;
+};
+
+const backupUserData = async function() {
+ const userFilters = await µb.loadUserFilters();
+
+ const userData = {
+ timeStamp: Date.now(),
+ version: vAPI.app.version,
+ userSettings:
+ µb.getModifiedSettings(µb.userSettings, µb.userSettingsDefault),
+ selectedFilterLists: µb.selectedFilterLists,
+ hiddenSettings:
+ µb.getModifiedSettings(µb.hiddenSettings, µb.hiddenSettingsDefault),
+ whitelist: µb.arrayFromWhitelist(µb.netWhitelist),
+ dynamicFilteringString: permanentFirewall.toString(),
+ urlFilteringString: permanentURLFiltering.toString(),
+ hostnameSwitchesString: permanentSwitches.toString(),
+ userFilters: userFilters.content,
+ };
+
+ const filename = i18n$('aboutBackupFilename')
+ .replace('{{datetime}}', µb.dateNowToSensibleString())
+ .replace(/ +/g, '_');
+ µb.restoreBackupSettings.lastBackupFile = filename;
+ µb.restoreBackupSettings.lastBackupTime = Date.now();
+ vAPI.storage.set(µb.restoreBackupSettings);
+
+ const localData = await getLocalData();
+
+ return { localData, userData };
+};
+
+const restoreUserData = async function(request) {
+ const userData = request.userData;
+
+ // https://github.com/LiCybora/NanoDefenderFirefox/issues/196
+ // Backup data could be from Chromium platform or from an older
+ // Firefox version.
+ if (
+ vAPI.webextFlavor.soup.has('firefox') &&
+ vAPI.app.intFromVersion(userData.version) <= 1031003011
+ ) {
+ userData.hostnameSwitchesString += '\nno-csp-reports: * true';
+ }
+
+ // List of external lists is meant to be a string.
+ if ( Array.isArray(userData.externalLists) ) {
+ userData.externalLists = userData.externalLists.join('\n');
+ }
+
+ // https://github.com/chrisaljoudi/uBlock/issues/1102
+ // Ensure all currently cached assets are flushed from storage AND memory.
+ io.rmrf();
+
+ // If we are going to restore all, might as well wipe out clean local
+ // storages
+ await Promise.all([
+ cacheStorage.clear(),
+ vAPI.storage.clear(),
+ ]);
+
+ // Restore block stats
+ µb.saveLocalSettings();
+
+ // Restore user data
+ vAPI.storage.set(userData.userSettings);
+
+ // Restore advanced settings.
+ let hiddenSettings = userData.hiddenSettings;
+ if ( hiddenSettings instanceof Object === false ) {
+ hiddenSettings = µb.hiddenSettingsFromString(
+ userData.hiddenSettingsString || ''
+ );
+ }
+ // Discard unknown setting or setting with default value.
+ for ( const key in hiddenSettings ) {
+ if (
+ µb.hiddenSettingsDefault.hasOwnProperty(key) === false ||
+ hiddenSettings[key] === µb.hiddenSettingsDefault[key]
+ ) {
+ delete hiddenSettings[key];
+ }
+ }
+
+ // Whitelist directives can be represented as an array or as a
+ // (eventually to be deprecated) string.
+ let whitelist = userData.whitelist;
+ if (
+ Array.isArray(whitelist) === false &&
+ typeof userData.netWhitelist === 'string' &&
+ userData.netWhitelist !== ''
+ ) {
+ whitelist = userData.netWhitelist.split('\n');
+ }
+ vAPI.storage.set({
+ hiddenSettings,
+ netWhitelist: whitelist || [],
+ dynamicFilteringString: userData.dynamicFilteringString || '',
+ urlFilteringString: userData.urlFilteringString || '',
+ hostnameSwitchesString: userData.hostnameSwitchesString || '',
+ lastRestoreFile: request.file || '',
+ lastRestoreTime: Date.now(),
+ lastBackupFile: '',
+ lastBackupTime: 0
+ });
+ µb.saveUserFilters(userData.userFilters);
+ if ( Array.isArray(userData.selectedFilterLists) ) {
+ await µb.saveSelectedFilterLists(userData.selectedFilterLists);
+ }
+
+ vAPI.app.restart();
+};
+
+// Remove all stored data but keep global counts, people can become
+// quite attached to numbers
+const resetUserData = async function() {
+ await Promise.all([
+ cacheStorage.clear(),
+ vAPI.storage.clear(),
+ ]);
+
+ await µb.saveLocalSettings();
+
+ vAPI.app.restart();
+};
+
+// Filter lists
+const prepListEntries = function(entries) {
+ for ( const k in entries ) {
+ if ( entries.hasOwnProperty(k) === false ) { continue; }
+ const entry = entries[k];
+ if ( typeof entry.supportURL === 'string' && entry.supportURL !== '' ) {
+ entry.supportName = hostnameFromURI(entry.supportURL);
+ } else if ( typeof entry.homeURL === 'string' && entry.homeURL !== '' ) {
+ const hn = hostnameFromURI(entry.homeURL);
+ entry.supportURL = `http://${hn}/`;
+ entry.supportName = domainFromHostname(hn);
+ }
+ }
+};
+
+const getLists = async function(callback) {
+ const r = {
+ autoUpdate: µb.userSettings.autoUpdate,
+ available: null,
+ cache: null,
+ cosmeticFilterCount: cosmeticFilteringEngine.getFilterCount(),
+ current: µb.availableFilterLists,
+ ignoreGenericCosmeticFilters: µb.userSettings.ignoreGenericCosmeticFilters,
+ isUpdating: io.isUpdating(),
+ netFilterCount: staticNetFilteringEngine.getFilterCount(),
+ parseCosmeticFilters: µb.userSettings.parseAllABPHideFilters,
+ suspendUntilListsAreLoaded: µb.userSettings.suspendUntilListsAreLoaded,
+ userFiltersPath: µb.userFiltersPath
+ };
+ const [ lists, metadata ] = await Promise.all([
+ µb.getAvailableLists(),
+ io.metadata(),
+ ]);
+ r.available = lists;
+ prepListEntries(r.available);
+ r.cache = metadata;
+ prepListEntries(r.cache);
+ callback(r);
+};
+
+// My filters
+
+// TODO: also return origin of embedded frames?
+const getOriginHints = function() {
+ const out = new Set();
+ for ( const tabId of µb.pageStores.keys() ) {
+ if ( tabId === -1 ) { continue; }
+ const tabContext = µb.tabContextManager.lookup(tabId);
+ if ( tabContext === null ) { continue; }
+ let { rootDomain, rootHostname } = tabContext;
+ if ( rootDomain.endsWith('-scheme') ) { continue; }
+ const isPunycode = rootHostname.includes('xn--');
+ out.add(isPunycode ? punycode.toUnicode(rootDomain) : rootDomain);
+ if ( rootHostname === rootDomain ) { continue; }
+ out.add(isPunycode ? punycode.toUnicode(rootHostname) : rootHostname);
+ }
+ return Array.from(out);
+};
+
+// My rules
+const getRules = function() {
+ return {
+ permanentRules:
+ permanentFirewall.toArray().concat(
+ permanentSwitches.toArray(),
+ permanentURLFiltering.toArray()
+ ),
+ sessionRules:
+ sessionFirewall.toArray().concat(
+ sessionSwitches.toArray(),
+ sessionURLFiltering.toArray()
+ ),
+ pslSelfie: publicSuffixList.toSelfie(),
+ };
+};
+
+const modifyRuleset = function(details) {
+ let swRuleset, hnRuleset, urlRuleset;
+ if ( details.permanent ) {
+ swRuleset = permanentSwitches;
+ hnRuleset = permanentFirewall;
+ urlRuleset = permanentURLFiltering;
+ } else {
+ swRuleset = sessionSwitches;
+ hnRuleset = sessionFirewall;
+ urlRuleset = sessionURLFiltering;
+ }
+ let toRemove = new Set(details.toRemove.trim().split(/\s*[\n\r]+\s*/));
+ for ( let rule of toRemove ) {
+ if ( rule === '' ) { continue; }
+ let parts = rule.split(/\s+/);
+ if ( hnRuleset.removeFromRuleParts(parts) === false ) {
+ if ( swRuleset.removeFromRuleParts(parts) === false ) {
+ urlRuleset.removeFromRuleParts(parts);
+ }
+ }
+ }
+ let toAdd = new Set(details.toAdd.trim().split(/\s*[\n\r]+\s*/));
+ for ( let rule of toAdd ) {
+ if ( rule === '' ) { continue; }
+ let parts = rule.split(/\s+/);
+ if ( hnRuleset.addFromRuleParts(parts) === false ) {
+ if ( swRuleset.addFromRuleParts(parts) === false ) {
+ urlRuleset.addFromRuleParts(parts);
+ }
+ }
+ }
+ if ( details.permanent ) {
+ if ( swRuleset.changed ) {
+ µb.saveHostnameSwitches();
+ swRuleset.changed = false;
+ }
+ if ( hnRuleset.changed ) {
+ µb.savePermanentFirewallRules();
+ hnRuleset.changed = false;
+ }
+ if ( urlRuleset.changed ) {
+ µb.savePermanentURLFilteringRules();
+ urlRuleset.changed = false;
+ }
+ }
+};
+
+// Support
+const getSupportData = async function() {
+ const diffArrays = function(modified, original) {
+ const modifiedSet = new Set(modified);
+ const originalSet = new Set(original);
+ let added = [];
+ let removed = [];
+ for ( const item of modifiedSet ) {
+ if ( originalSet.has(item) ) { continue; }
+ added.push(item);
+ }
+ for ( const item of originalSet ) {
+ if ( modifiedSet.has(item) ) { continue; }
+ removed.push(item);
+ }
+ if ( added.length === 0 ) {
+ added = undefined;
+ }
+ if ( removed.length === 0 ) {
+ removed = undefined;
+ }
+ if ( added !== undefined || removed !== undefined ) {
+ return { added, removed };
+ }
+ };
+
+ const modifiedUserSettings = µb.getModifiedSettings(
+ µb.userSettings,
+ µb.userSettingsDefault
+ );
+
+ const modifiedHiddenSettings = µb.getModifiedSettings(
+ µb.hiddenSettings,
+ µb.hiddenSettingsDefault
+ );
+
+ let filterset = [];
+ const userFilters = await µb.loadUserFilters();
+ for ( const line of userFilters.content.split(/\s*\n+\s*/) ) {
+ if ( /^($|![^#])/.test(line) ) { continue; }
+ filterset.push(line);
+ }
+
+ const now = Date.now();
+
+ const formatDelayFromNow = list => {
+ const time = list.writeTime;
+ if ( typeof time !== 'number' || time === 0 ) { return 'never'; }
+ if ( (time || 0) === 0 ) { return '?'; }
+ const delayInSec = (now - time) / 1000;
+ const days = (delayInSec / 86400) | 0;
+ const hours = (delayInSec % 86400) / 3600 | 0;
+ const minutes = (delayInSec % 3600) / 60 | 0;
+ const parts = [];
+ if ( days > 0 ) { parts.push(`${days}d`); }
+ if ( hours > 0 ) { parts.push(`${hours}h`); }
+ if ( minutes > 0 ) { parts.push(`${minutes}m`); }
+ if ( parts.length === 0 ) { parts.push('now'); }
+ const out = parts.join('.');
+ if ( list.diffUpdated ) { return `${out} Δ`; }
+ return out;
+ };
+
+ const lists = µb.availableFilterLists;
+ let defaultListset = {};
+ let addedListset = {};
+ let removedListset = {};
+ for ( const listKey in lists ) {
+ if ( lists.hasOwnProperty(listKey) === false ) { continue; }
+ const list = lists[listKey];
+ if ( list.content !== 'filters' ) { continue; }
+ const used = µb.selectedFilterLists.includes(listKey);
+ const listDetails = [];
+ if ( used ) {
+ if ( typeof list.entryCount === 'number' ) {
+ listDetails.push(`${list.entryCount}-${list.entryCount-list.entryUsedCount}`);
+ }
+ listDetails.push(formatDelayFromNow(list));
+ }
+ if ( list.isDefault || listKey === µb.userFiltersPath ) {
+ if ( used ) {
+ defaultListset[listKey] = listDetails.join(', ');
+ } else {
+ removedListset[listKey] = null;
+ }
+ } else if ( used ) {
+ addedListset[listKey] = listDetails.join(', ');
+ }
+ }
+ if ( Object.keys(defaultListset).length === 0 ) {
+ defaultListset = undefined;
+ }
+ if ( Object.keys(addedListset).length === 0 ) {
+ addedListset = undefined;
+ } else {
+ const added = Object.keys(addedListset);
+ const truncated = added.slice(12);
+ for ( const key of truncated ) {
+ delete addedListset[key];
+ }
+ if ( truncated.length !== 0 ) {
+ addedListset[`[${truncated.length} lists not shown]`] = '[too many]';
+ }
+ }
+ if ( Object.keys(removedListset).length === 0 ) {
+ removedListset = undefined;
+ }
+
+ let browserFamily = (( ) => {
+ if ( vAPI.webextFlavor.soup.has('firefox') ) { return 'Firefox'; }
+ if ( vAPI.webextFlavor.soup.has('chromium') ) { return 'Chromium'; }
+ return 'Unknown';
+ })();
+ if ( vAPI.webextFlavor.soup.has('mobile') ) {
+ browserFamily += ' Mobile';
+ }
+
+ return {
+ [`${vAPI.app.name}`]: `${vAPI.app.version}`,
+ [`${browserFamily}`]: `${vAPI.webextFlavor.major}`,
+ 'filterset (summary)': {
+ network: staticNetFilteringEngine.getFilterCount(),
+ cosmetic: cosmeticFilteringEngine.getFilterCount(),
+ scriptlet: scriptletFilteringEngine.getFilterCount(),
+ html: htmlFilteringEngine.getFilterCount(),
+ },
+ 'listset (total-discarded, last-updated)': {
+ removed: removedListset,
+ added: addedListset,
+ default: defaultListset,
+ },
+ 'filterset (user)': filterset,
+ trustedset: diffArrays(
+ µb.arrayFromWhitelist(µb.netWhitelist),
+ µb.netWhitelistDefault
+ ),
+ switchRuleset: diffArrays(
+ sessionSwitches.toArray(),
+ µb.hostnameSwitchesDefault
+ ),
+ hostRuleset: diffArrays(
+ sessionFirewall.toArray(),
+ µb.dynamicFilteringDefault
+ ),
+ urlRuleset: diffArrays(
+ sessionURLFiltering.toArray(),
+ []
+ ),
+ 'userSettings': modifiedUserSettings,
+ 'hiddenSettings': modifiedHiddenSettings,
+ supportStats: µb.supportStats,
+ };
+};
+
+const onMessage = function(request, sender, callback) {
+ // Async
+ switch ( request.what ) {
+ case 'backupUserData':
+ return backupUserData().then(data => {
+ callback(data);
+ });
+
+ case 'getLists':
+ return µb.isReadyPromise.then(( ) => {
+ getLists(callback);
+ });
+
+ case 'getLocalData':
+ return getLocalData().then(localData => {
+ callback(localData);
+ });
+
+ case 'getSupportData': {
+ getSupportData().then(response => {
+ callback(response);
+ });
+ return;
+ }
+
+ case 'readUserFilters':
+ return µb.loadUserFilters().then(result => {
+ result.trustedSource = µb.isTrustedList(µb.userFiltersPath);
+ callback(result);
+ });
+
+ case 'writeUserFilters':
+ return µb.saveUserFilters(request.content).then(result => {
+ callback(result);
+ });
+
+ default:
+ break;
+ }
+
+ // Sync
+ let response;
+
+ switch ( request.what ) {
+ case 'dashboardConfig':
+ response = {
+ noDashboard: µb.noDashboard,
+ };
+ break;
+
+ case 'getAutoCompleteDetails':
+ response = {};
+ if ( (request.hintUpdateToken || 0) === 0 ) {
+ response.redirectResources = redirectEngine.getResourceDetails();
+ response.preparseDirectiveEnv = vAPI.webextFlavor.env.slice();
+ response.preparseDirectiveHints = sfp.utils.preparser.getHints();
+ }
+ if ( request.hintUpdateToken !== µb.pageStoresToken ) {
+ response.originHints = getOriginHints();
+ response.hintUpdateToken = µb.pageStoresToken;
+ }
+ break;
+
+ case 'getRules':
+ response = getRules();
+ break;
+
+ case 'modifyRuleset':
+ // https://github.com/chrisaljoudi/uBlock/issues/772
+ cosmeticFilteringEngine.removeFromSelectorCache('*');
+ modifyRuleset(request);
+ response = getRules();
+ break;
+
+ case 'supportUpdateNow': {
+ const { assetKeys } = request;
+ if ( assetKeys.length === 0 ) { return; }
+ for ( const assetKey of assetKeys ) {
+ io.purge(assetKey);
+ }
+ µb.scheduleAssetUpdater({ now: true, fetchDelay: 100 });
+ break;
+ }
+
+ case 'listsUpdateNow': {
+ const { assetKeys, preferOrigin = false } = request;
+ if ( assetKeys.length === 0 ) { return; }
+ for ( const assetKey of assetKeys ) {
+ io.purge(assetKey);
+ }
+ µb.scheduleAssetUpdater({ now: true, fetchDelay: 100, auto: preferOrigin !== true });
+ break;
+ }
+
+ case 'readHiddenSettings':
+ response = {
+ 'default': µb.hiddenSettingsDefault,
+ 'admin': µb.hiddenSettingsAdmin,
+ 'current': µb.hiddenSettings,
+ };
+ break;
+
+ case 'restoreUserData':
+ restoreUserData(request);
+ break;
+
+ case 'resetUserData':
+ resetUserData();
+ break;
+
+ case 'updateNow':
+ µb.scheduleAssetUpdater({ now: true, fetchDelay: 100, auto: true });
+ break;
+
+ case 'writeHiddenSettings':
+ µb.changeHiddenSettings(µb.hiddenSettingsFromString(request.content));
+ break;
+
+ default:
+ return vAPI.messaging.UNHANDLED;
+ }
+
+ callback(response);
+};
+
+vAPI.messaging.listen({
+ name: 'dashboard',
+ listener: onMessage,
+ privileged: true,
+});
+
+// <<<<< end of local scope
+}
+
+/******************************************************************************/
+/******************************************************************************/
+
+// Channel:
+// loggerUI
+// privileged
+
+{
+// >>>>> start of local scope
+
+const extensionOriginURL = vAPI.getURL('');
+const documentBlockedURL = vAPI.getURL('document-blocked.html');
+
+const getLoggerData = async function(details, activeTabId, callback) {
+ const response = {
+ activeTabId,
+ colorBlind: µb.userSettings.colorBlindFriendly,
+ entries: logger.readAll(details.ownerId),
+ tabIdsToken: µb.pageStoresToken,
+ tooltips: µb.userSettings.tooltipsDisabled === false
+ };
+ if ( µb.pageStoresToken !== details.tabIdsToken ) {
+ response.tabIds = [];
+ for ( const [ tabId, pageStore ] of µb.pageStores ) {
+ const { rawURL, title } = pageStore;
+ if ( rawURL.startsWith(extensionOriginURL) ) {
+ if ( rawURL.startsWith(documentBlockedURL) === false ) { continue; }
+ }
+ response.tabIds.push([ tabId, title ]);
+ }
+ }
+ if ( activeTabId ) {
+ const pageStore = µb.pageStoreFromTabId(activeTabId);
+ const rawURL = pageStore && pageStore.rawURL;
+ if (
+ rawURL === null ||
+ rawURL.startsWith(extensionOriginURL) &&
+ rawURL.startsWith(documentBlockedURL) === false
+ ) {
+ response.activeTabId = undefined;
+ }
+ }
+ if ( details.popupLoggerBoxChanged && vAPI.windows instanceof Object ) {
+ const tabs = await vAPI.tabs.query({
+ url: vAPI.getURL('/logger-ui.html?popup=1')
+ });
+ if ( tabs.length !== 0 ) {
+ const win = await vAPI.windows.get(tabs[0].windowId);
+ if ( win === null ) { return; }
+ vAPI.localStorage.setItem('popupLoggerBox', JSON.stringify({
+ left: win.left,
+ top: win.top,
+ width: win.width,
+ height: win.height,
+ }));
+ }
+ }
+ callback(response);
+};
+
+const getURLFilteringData = function(details) {
+ const colors = {};
+ const response = {
+ dirty: false,
+ colors: colors
+ };
+ const suf = sessionURLFiltering;
+ const puf = permanentURLFiltering;
+ const urls = details.urls;
+ const context = details.context;
+ const type = details.type;
+ for ( const url of urls ) {
+ const colorEntry = colors[url] = { r: 0, own: false };
+ if ( suf.evaluateZ(context, url, type).r !== 0 ) {
+ colorEntry.r = suf.r;
+ colorEntry.own = suf.r !== 0 &&
+ suf.context === context &&
+ suf.url === url &&
+ suf.type === type;
+ }
+ if ( response.dirty ) { continue; }
+ puf.evaluateZ(context, url, type);
+ const pown = (
+ puf.r !== 0 &&
+ puf.context === context &&
+ puf.url === url &&
+ puf.type === type
+ );
+ response.dirty = colorEntry.own !== pown || colorEntry.r !== puf.r;
+ }
+ return response;
+};
+
+const onMessage = function(request, sender, callback) {
+ // Async
+ switch ( request.what ) {
+ case 'readAll':
+ if ( logger.ownerId !== undefined && logger.ownerId !== request.ownerId ) {
+ return callback({ unavailable: true });
+ }
+ vAPI.tabs.getCurrent().then(tab => {
+ getLoggerData(request, tab && tab.id, callback);
+ });
+ return;
+
+ case 'toggleInMemoryFilter': {
+ const promise = µb.hasInMemoryFilter(request.filter)
+ ? µb.removeInMemoryFilter(request.filter)
+ : µb.addInMemoryFilter(request.filter);
+ promise.then(status => { callback(status); });
+ return;
+ }
+ default:
+ break;
+ }
+
+ // Sync
+ let response;
+
+ switch ( request.what ) {
+ case 'hasInMemoryFilter':
+ response = µb.hasInMemoryFilter(request.filter);
+ break;
+
+ case 'releaseView':
+ if ( request.ownerId !== logger.ownerId ) { break; }
+ logger.ownerId = undefined;
+ µb.clearInMemoryFilters();
+ break;
+
+ case 'saveURLFilteringRules':
+ response = permanentURLFiltering.copyRules(
+ sessionURLFiltering,
+ request.context,
+ request.urls,
+ request.type
+ );
+ if ( response ) {
+ µb.savePermanentURLFilteringRules();
+ }
+ break;
+
+ case 'setURLFilteringRule':
+ µb.toggleURLFilteringRule(request);
+ break;
+
+ case 'getURLFilteringData':
+ response = getURLFilteringData(request);
+ break;
+
+ default:
+ return vAPI.messaging.UNHANDLED;
+ }
+
+ callback(response);
+};
+
+vAPI.messaging.listen({
+ name: 'loggerUI',
+ listener: onMessage,
+ privileged: true,
+});
+
+// <<<<< end of local scope
+}
+
+/******************************************************************************/
+/******************************************************************************/
+
+// Channel:
+// domInspectorContent
+// unprivileged
+
+{
+// >>>>> start of local scope
+
+const onMessage = (request, sender, callback) => {
+ // Async
+ switch ( request.what ) {
+ default:
+ break;
+ }
+ // Sync
+ let response;
+ switch ( request.what ) {
+ case 'getInspectorArgs':
+ const bc = new globalThis.BroadcastChannel('contentInspectorChannel');
+ bc.postMessage({
+ what: 'contentInspectorChannel',
+ tabId: sender.tabId || 0,
+ frameId: sender.frameId || 0,
+ });
+ response = {
+ inspectorURL: vAPI.getURL(
+ `/web_accessible_resources/dom-inspector.html?secret=${vAPI.warSecret.short()}`
+ ),
+ };
+ break;
+ default:
+ return vAPI.messaging.UNHANDLED;
+ }
+
+ callback(response);
+};
+
+vAPI.messaging.listen({
+ name: 'domInspectorContent',
+ listener: onMessage,
+ privileged: false,
+});
+
+// <<<<< end of local scope
+}
+
+/******************************************************************************/
+/******************************************************************************/
+
+// Channel:
+// documentBlocked
+// privileged
+
+{
+// >>>>> start of local scope
+
+const onMessage = function(request, sender, callback) {
+ const tabId = sender.tabId || 0;
+
+ // Async
+ switch ( request.what ) {
+ default:
+ break;
+ }
+
+ // Sync
+ let response;
+
+ switch ( request.what ) {
+ case 'closeThisTab':
+ vAPI.tabs.remove(tabId);
+ break;
+
+ case 'temporarilyWhitelistDocument':
+ webRequest.strictBlockBypass(request.hostname);
+ break;
+
+ default:
+ return vAPI.messaging.UNHANDLED;
+ }
+
+ callback(response);
+};
+
+vAPI.messaging.listen({
+ name: 'documentBlocked',
+ listener: onMessage,
+ privileged: true,
+});
+
+// <<<<< end of local scope
+}
+
+/******************************************************************************/
+/******************************************************************************/
+
+// Channel:
+// devTools
+// privileged
+
+{
+// >>>>> start of local scope
+
+const onMessage = function(request, sender, callback) {
+ // Async
+ switch ( request.what ) {
+ case 'purgeAllCaches':
+ µb.getBytesInUse().then(bytesInUseBefore =>
+ io.remove(/./).then(( ) =>
+ µb.getBytesInUse().then(bytesInUseAfter => {
+ callback([
+ `Storage used before: ${µb.formatCount(bytesInUseBefore)}B`,
+ `Storage used after: ${µb.formatCount(bytesInUseAfter)}B`,
+ ].join('\n'));
+ })
+ )
+ );
+ return;
+
+ case 'snfeBenchmark':
+ µb.benchmarkStaticNetFiltering({ redirectEngine }).then(result => {
+ callback(result);
+ });
+ return;
+
+ case 'snfeToDNR': {
+ const listPromises = [];
+ const listNames = [];
+ for ( const assetKey of µb.selectedFilterLists ) {
+ listPromises.push(
+ io.get(assetKey, { dontCache: true }).then(details => {
+ listNames.push(assetKey);
+ return { name: assetKey, text: details.content };
+ })
+ );
+ }
+ const options = {
+ extensionPaths: redirectEngine.getResourceDetails().filter(e =>
+ typeof e[1].extensionPath === 'string' && e[1].extensionPath !== ''
+ ).map(e =>
+ [ e[0], e[1].extensionPath ]
+ ),
+ env: vAPI.webextFlavor.env,
+ };
+ const t0 = Date.now();
+ dnrRulesetFromRawLists(listPromises, options).then(result => {
+ const { network } = result;
+ const replacer = (k, v) => {
+ if ( k.startsWith('__') ) { return; }
+ if ( Array.isArray(v) ) {
+ return v.sort();
+ }
+ if ( v instanceof Object ) {
+ const sorted = {};
+ for ( const kk of Object.keys(v).sort() ) {
+ sorted[kk] = v[kk];
+ }
+ return sorted;
+ }
+ return v;
+ };
+ const isUnsupported = rule =>
+ rule._error !== undefined;
+ const isRegex = rule =>
+ rule.condition !== undefined &&
+ rule.condition.regexFilter !== undefined;
+ const isRedirect = rule =>
+ rule.action !== undefined &&
+ rule.action.type === 'redirect' &&
+ rule.action.redirect.extensionPath !== undefined;
+ const isCsp = rule =>
+ rule.action !== undefined &&
+ rule.action.type === 'modifyHeaders';
+ const isRemoveparam = rule =>
+ rule.action !== undefined &&
+ rule.action.type === 'redirect' &&
+ rule.action.redirect.transform !== undefined;
+ const runtime = Date.now() - t0;
+ const { ruleset } = network;
+ const good = ruleset.filter(rule =>
+ isUnsupported(rule) === false &&
+ isRegex(rule) === false &&
+ isRedirect(rule) === false &&
+ isCsp(rule) === false &&
+ isRemoveparam(rule) === false
+ );
+ const unsupported = ruleset.filter(rule =>
+ isUnsupported(rule)
+ );
+ const regexes = ruleset.filter(rule =>
+ isUnsupported(rule) === false &&
+ isRegex(rule) &&
+ isRedirect(rule) === false &&
+ isCsp(rule) === false &&
+ isRemoveparam(rule) === false
+ );
+ const redirects = ruleset.filter(rule =>
+ isUnsupported(rule) === false &&
+ isRedirect(rule)
+ );
+ const headers = ruleset.filter(rule =>
+ isUnsupported(rule) === false &&
+ isCsp(rule)
+ );
+ const removeparams = ruleset.filter(rule =>
+ isUnsupported(rule) === false &&
+ isRemoveparam(rule)
+ );
+ const out = [
+ `dnrRulesetFromRawLists(${JSON.stringify(listNames, null, 2)})`,
+ `Run time: ${runtime} ms`,
+ `Filters count: ${network.filterCount}`,
+ `Accepted filter count: ${network.acceptedFilterCount}`,
+ `Rejected filter count: ${network.rejectedFilterCount}`,
+ `Un-DNR-able filter count: ${unsupported.length}`,
+ `Resulting DNR rule count: ${ruleset.length}`,
+ ];
+ out.push(`+ Good filters (${good.length}): ${JSON.stringify(good, replacer, 2)}`);
+ out.push(`+ Regex-based filters (${regexes.length}): ${JSON.stringify(regexes, replacer, 2)}`);
+ out.push(`+ 'redirect=' filters (${redirects.length}): ${JSON.stringify(redirects, replacer, 2)}`);
+ out.push(`+ 'csp=' filters (${headers.length}): ${JSON.stringify(headers, replacer, 2)}`);
+ out.push(`+ 'removeparam=' filters (${removeparams.length}): ${JSON.stringify(removeparams, replacer, 2)}`);
+ out.push(`+ Unsupported filters (${unsupported.length}): ${JSON.stringify(unsupported, replacer, 2)}`);
+ out.push(`+ generichide exclusions (${network.generichideExclusions.length}): ${JSON.stringify(network.generichideExclusions, replacer, 2)}`);
+ if ( result.specificCosmetic ) {
+ out.push(`+ Cosmetic filters: ${result.specificCosmetic.size}`);
+ for ( const details of result.specificCosmetic ) {
+ out.push(` ${JSON.stringify(details)}`);
+ }
+ } else {
+ out.push(' Cosmetic filters: 0');
+ }
+ callback(out.join('\n'));
+ });
+ return;
+ }
+ default:
+ break;
+ }
+
+ // Sync
+ let response;
+
+ switch ( request.what ) {
+ case 'snfeDump':
+ response = staticNetFilteringEngine.dump();
+ break;
+
+ case 'cfeDump':
+ response = cosmeticFilteringEngine.dump();
+ break;
+
+ default:
+ return vAPI.messaging.UNHANDLED;
+ }
+
+ callback(response);
+};
+
+vAPI.messaging.listen({
+ name: 'devTools',
+ listener: onMessage,
+ privileged: true,
+});
+
+// <<<<< end of local scope
+}
+
+/******************************************************************************/
+/******************************************************************************/
+
+// Channel:
+// scriptlets
+// unprivileged
+
+{
+// >>>>> start of local scope
+
+const logCosmeticFilters = function(tabId, details) {
+ if ( logger.enabled === false ) { return; }
+
+ const filter = { source: 'cosmetic', raw: '' };
+ const fctxt = µb.filteringContext.duplicate();
+ fctxt.fromTabId(tabId)
+ .setRealm('cosmetic')
+ .setType('dom')
+ .setURL(details.frameURL)
+ .setDocOriginFromURL(details.frameURL)
+ .setFilter(filter);
+ for ( const selector of details.matchedSelectors.sort() ) {
+ filter.raw = selector;
+ fctxt.toLogger();
+ }
+};
+
+const logCSPViolations = function(pageStore, request) {
+ if ( logger.enabled === false || pageStore === null ) {
+ return false;
+ }
+ if ( request.violations.length === 0 ) {
+ return true;
+ }
+
+ const fctxt = µb.filteringContext.duplicate();
+ fctxt.fromTabId(pageStore.tabId)
+ .setRealm('network')
+ .setDocOriginFromURL(request.docURL)
+ .setURL(request.docURL);
+
+ let cspData = pageStore.extraData.get('cspData');
+ if ( cspData === undefined ) {
+ cspData = new Map();
+
+ const staticDirectives =
+ staticNetFilteringEngine.matchAndFetchModifiers(fctxt, 'csp');
+ if ( staticDirectives !== undefined ) {
+ for ( const directive of staticDirectives ) {
+ if ( directive.result !== 1 ) { continue; }
+ cspData.set(directive.value, directive.logData());
+ }
+ }
+
+ fctxt.type = 'inline-script';
+ fctxt.filter = undefined;
+ if ( pageStore.filterRequest(fctxt) === 1 ) {
+ cspData.set(µb.cspNoInlineScript, fctxt.filter);
+ }
+
+ fctxt.type = 'script';
+ fctxt.filter = undefined;
+ if ( pageStore.filterScripting(fctxt, true) === 1 ) {
+ cspData.set(µb.cspNoScripting, fctxt.filter);
+ }
+
+ fctxt.type = 'inline-font';
+ fctxt.filter = undefined;
+ if ( pageStore.filterRequest(fctxt) === 1 ) {
+ cspData.set(µb.cspNoInlineFont, fctxt.filter);
+ }
+
+ if ( cspData.size === 0 ) { return false; }
+
+ pageStore.extraData.set('cspData', cspData);
+ }
+
+ const typeMap = logCSPViolations.policyDirectiveToTypeMap;
+ for ( const json of request.violations ) {
+ const violation = JSON.parse(json);
+ let type = typeMap.get(violation.directive);
+ if ( type === undefined ) { continue; }
+ const logData = cspData.get(violation.policy);
+ if ( logData === undefined ) { continue; }
+ if ( /^[\w.+-]+:\/\//.test(violation.url) === false ) {
+ violation.url = request.docURL;
+ if ( type === 'script' ) { type = 'inline-script'; }
+ else if ( type === 'font' ) { type = 'inline-font'; }
+ }
+ // The resource was blocked as a result of applying a CSP directive
+ // elsewhere rather than to the resource itself.
+ logData.modifier = undefined;
+ fctxt.setURL(violation.url)
+ .setType(type)
+ .setFilter(logData)
+ .toLogger();
+ }
+
+ return true;
+};
+
+logCSPViolations.policyDirectiveToTypeMap = new Map([
+ [ 'img-src', 'image' ],
+ [ 'connect-src', 'xmlhttprequest' ],
+ [ 'font-src', 'font' ],
+ [ 'frame-src', 'sub_frame' ],
+ [ 'media-src', 'media' ],
+ [ 'object-src', 'object' ],
+ [ 'script-src', 'script' ],
+ [ 'script-src-attr', 'script' ],
+ [ 'script-src-elem', 'script' ],
+ [ 'style-src', 'stylesheet' ],
+ [ 'style-src-attr', 'stylesheet' ],
+ [ 'style-src-elem', 'stylesheet' ],
+]);
+
+const onMessage = function(request, sender, callback) {
+ const tabId = sender.tabId || 0;
+ const pageStore = µb.pageStoreFromTabId(tabId);
+
+ // Async
+ switch ( request.what ) {
+ default:
+ break;
+ }
+
+ // Sync
+ let response;
+
+ switch ( request.what ) {
+ case 'inlinescriptFound':
+ if ( logger.enabled && pageStore !== null ) {
+ const fctxt = µb.filteringContext.duplicate();
+ fctxt.fromTabId(tabId)
+ .setType('inline-script')
+ .setURL(request.docURL)
+ .setDocOriginFromURL(request.docURL);
+ if ( pageStore.filterRequest(fctxt) === 0 ) {
+ fctxt.setRealm('network').toLogger();
+ }
+ }
+ break;
+
+ case 'logCosmeticFilteringData':
+ logCosmeticFilters(tabId, request);
+ break;
+
+ case 'securityPolicyViolation':
+ response = logCSPViolations(pageStore, request);
+ break;
+
+ case 'temporarilyAllowLargeMediaElement':
+ if ( pageStore !== null ) {
+ pageStore.allowLargeMediaElementsUntil = Date.now() + 5000;
+ }
+ break;
+
+ case 'subscribeTo':
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1797
+ if ( /^(file|https?):\/\//.test(request.location) === false ) { break; }
+ const url = encodeURIComponent(request.location);
+ const title = encodeURIComponent(request.title);
+ const hash = µb.selectedFilterLists.indexOf(request.location) !== -1
+ ? '#subscribed'
+ : '';
+ vAPI.tabs.open({
+ url: `/asset-viewer.html?url=${url}&title=${title}&subscribe=1${hash}`,
+ select: true,
+ });
+ break;
+
+ case 'updateLists':
+ const listkeys = request.listkeys.split(',').filter(s => s !== '');
+ if ( listkeys.length === 0 ) { return; }
+ if ( listkeys.includes('all') ) {
+ io.purge(/./, 'public_suffix_list.dat');
+ } else {
+ for ( const listkey of listkeys ) {
+ io.purge(listkey);
+ }
+ }
+ µb.openNewTab({
+ url: 'dashboard.html#3p-filters.html',
+ select: true,
+ });
+ µb.scheduleAssetUpdater({ now: true, fetchDelay: 100, auto: request.auto });
+ break;
+
+ default:
+ return vAPI.messaging.UNHANDLED;
+ }
+
+ callback(response);
+};
+
+vAPI.messaging.listen({
+ name: 'scriptlets',
+ listener: onMessage,
+});
+
+// <<<<< end of local scope
+}
+
+
+/******************************************************************************/
+/******************************************************************************/
diff --git a/src/js/mrucache.js b/src/js/mrucache.js
new file mode 100644
index 0000000..9a16047
--- /dev/null
+++ b/src/js/mrucache.js
@@ -0,0 +1,58 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+export class MRUCache {
+ constructor(maxSize) {
+ this.maxSize = maxSize;
+ this.array = [];
+ this.map = new Map();
+ this.resetTime = Date.now();
+ }
+ add(key, value) {
+ const found = this.map.has(key);
+ this.map.set(key, value);
+ if ( found ) { return; }
+ if ( this.array.length === this.maxSize ) {
+ this.map.delete(this.array.pop());
+ }
+ this.array.unshift(key);
+ }
+ remove(key) {
+ if ( this.map.delete(key) === false ) { return; }
+ this.array.splice(this.array.indexOf(key), 1);
+ }
+ lookup(key) {
+ const value = this.map.get(key);
+ if ( value === undefined ) { return; }
+ if ( this.array[0] === key ) { return value; }
+ const i = this.array.indexOf(key);
+ this.array.copyWithin(1, 0, i);
+ this.array[0] = key;
+ return value;
+ }
+ reset() {
+ this.array = [];
+ this.map.clear();
+ this.resetTime = Date.now();
+ }
+}
diff --git a/src/js/pagestore.js b/src/js/pagestore.js
new file mode 100644
index 0000000..907e747
--- /dev/null
+++ b/src/js/pagestore.js
@@ -0,0 +1,1140 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import contextMenu from './contextmenu.js';
+import logger from './logger.js';
+import staticNetFilteringEngine from './static-net-filtering.js';
+import µb from './background.js';
+import webext from './webext.js';
+import { orphanizeString } from './text-utils.js';
+import { redirectEngine } from './redirect-engine.js';
+
+import {
+ sessionFirewall,
+ sessionSwitches,
+ sessionURLFiltering,
+} from './filtering-engines.js';
+
+import {
+ domainFromHostname,
+ hostnameFromURI,
+ isNetworkURI,
+} from './uri-utils.js';
+
+/*******************************************************************************
+
+A PageRequestStore object is used to store net requests in two ways:
+
+To record distinct net requests
+To create a log of net requests
+
+**/
+
+/******************************************************************************/
+
+const NetFilteringResultCache = class {
+ constructor() {
+ this.pruneTimer = vAPI.defer.create(( ) => {
+ this.prune();
+ });
+ this.init();
+ }
+
+ init() {
+ this.blocked = new Map();
+ this.results = new Map();
+ this.hash = 0;
+ return this;
+ }
+
+ // https://github.com/gorhill/uBlock/issues/3619
+ // Don't collapse redirected resources
+ rememberResult(fctxt, result) {
+ if ( fctxt.tabId <= 0 ) { return; }
+ if ( this.results.size === 0 ) {
+ this.pruneAsync();
+ }
+ const key = `${fctxt.getDocHostname()} ${fctxt.type} ${fctxt.url}`;
+ this.results.set(key, {
+ result,
+ redirectURL: fctxt.redirectURL,
+ logData: fctxt.filter,
+ tstamp: Date.now()
+ });
+ if ( result !== 1 || fctxt.redirectURL !== undefined ) { return; }
+ const now = Date.now();
+ this.blocked.set(key, now);
+ this.hash = now;
+ }
+
+ rememberBlock(fctxt) {
+ if ( fctxt.tabId <= 0 ) { return; }
+ if ( this.blocked.size === 0 ) {
+ this.pruneAsync();
+ }
+ if ( fctxt.redirectURL !== undefined ) { return; }
+ const now = Date.now();
+ this.blocked.set(
+ `${fctxt.getDocHostname()} ${fctxt.type} ${fctxt.url}`,
+ now
+ );
+ this.hash = now;
+ }
+
+ forgetResult(docHostname, type, url) {
+ const key = `${docHostname} ${type} ${url}`;
+ this.results.delete(key);
+ this.blocked.delete(key);
+ }
+
+ empty() {
+ this.blocked.clear();
+ this.results.clear();
+ this.hash = 0;
+ this.pruneTimer.off();
+ }
+
+ prune() {
+ const obsolete = Date.now() - this.shelfLife;
+ for ( const entry of this.blocked ) {
+ if ( entry[1] <= obsolete ) {
+ this.results.delete(entry[0]);
+ this.blocked.delete(entry[0]);
+ }
+ }
+ for ( const entry of this.results ) {
+ if ( entry[1].tstamp <= obsolete ) {
+ this.results.delete(entry[0]);
+ }
+ }
+ if ( this.blocked.size !== 0 || this.results.size !== 0 ) {
+ this.pruneAsync();
+ }
+ }
+
+ pruneAsync() {
+ this.pruneTimer.on(this.shelfLife);
+ }
+
+ lookupResult(fctxt) {
+ const entry = this.results.get(
+ fctxt.getDocHostname() + ' ' +
+ fctxt.type + ' ' +
+ fctxt.url
+ );
+ if ( entry === undefined ) { return; }
+ // We need to use a new WAR secret if one is present since WAR secrets
+ // can only be used once.
+ if (
+ entry.redirectURL !== undefined &&
+ entry.redirectURL.startsWith(this.extensionOriginURL)
+ ) {
+ const redirectURL = new URL(entry.redirectURL);
+ redirectURL.searchParams.set('secret', vAPI.warSecret.short());
+ entry.redirectURL = redirectURL.href;
+ }
+ return entry;
+ }
+
+ lookupAllBlocked(hostname) {
+ const result = [];
+ for ( const entry of this.blocked ) {
+ const pos = entry[0].indexOf(' ');
+ if ( entry[0].slice(0, pos) === hostname ) {
+ result[result.length] = entry[0].slice(pos + 1);
+ }
+ }
+ return result;
+ }
+
+ static factory() {
+ return new NetFilteringResultCache();
+ }
+};
+
+NetFilteringResultCache.prototype.shelfLife = 15000;
+NetFilteringResultCache.prototype.extensionOriginURL = vAPI.getURL('/');
+
+/******************************************************************************/
+
+// Frame stores are used solely to associate a URL with a frame id.
+
+const FrameStore = class {
+ constructor(frameURL, parentId) {
+ this.init(frameURL, parentId);
+ }
+
+ init(frameURL, parentId) {
+ this.t0 = Date.now();
+ this.parentId = parentId;
+ this.exceptCname = undefined;
+ this.clickToLoad = false;
+ this.rawURL = frameURL;
+ if ( frameURL !== undefined ) {
+ this.hostname = hostnameFromURI(frameURL);
+ this.domain = domainFromHostname(this.hostname) || this.hostname;
+ }
+ // Evaluated on-demand
+ // - 0b01: specific cosmetic filtering
+ // - 0b10: generic cosmetic filtering
+ this._cosmeticFilteringBits = undefined;
+ return this;
+ }
+
+ dispose() {
+ this.rawURL = this.hostname = this.domain = '';
+ if ( FrameStore.junkyard.length < FrameStore.junkyardMax ) {
+ FrameStore.junkyard.push(this);
+ }
+ return null;
+ }
+
+ updateURL(url) {
+ if ( typeof url !== 'string' ) { return; }
+ this.rawURL = url;
+ this.hostname = hostnameFromURI(url);
+ this.domain = domainFromHostname(this.hostname) || this.hostname;
+ this._cosmeticFilteringBits = undefined;
+ }
+
+ getCosmeticFilteringBits(tabId) {
+ if ( this._cosmeticFilteringBits !== undefined ) {
+ return this._cosmeticFilteringBits;
+ }
+ this._cosmeticFilteringBits = 0b11;
+ {
+ const result = staticNetFilteringEngine.matchRequestReverse(
+ 'specifichide',
+ this.rawURL
+ );
+ if ( result !== 0 && logger.enabled ) {
+ µb.filteringContext
+ .duplicate()
+ .fromTabId(tabId)
+ .setURL(this.rawURL)
+ .setDocOriginFromURL(this.rawURL)
+ .setRealm('network')
+ .setType('specifichide')
+ .setFilter(staticNetFilteringEngine.toLogData())
+ .toLogger();
+ }
+ if ( result === 2 ) {
+ this._cosmeticFilteringBits &= ~0b01;
+ }
+ }
+ {
+ const result = staticNetFilteringEngine.matchRequestReverse(
+ 'generichide',
+ this.rawURL
+ );
+ if ( result !== 0 && logger.enabled ) {
+ µb.filteringContext
+ .duplicate()
+ .fromTabId(tabId)
+ .setURL(this.rawURL)
+ .setDocOriginFromURL(this.rawURL)
+ .setRealm('network')
+ .setType('generichide')
+ .setFilter(staticNetFilteringEngine.toLogData())
+ .toLogger();
+ }
+ if ( result === 2 ) {
+ this._cosmeticFilteringBits &= ~0b10;
+ }
+ }
+ return this._cosmeticFilteringBits;
+ }
+
+ shouldApplySpecificCosmeticFilters(tabId) {
+ return (this.getCosmeticFilteringBits(tabId) & 0b01) !== 0;
+ }
+
+ shouldApplyGenericCosmeticFilters(tabId) {
+ return (this.getCosmeticFilteringBits(tabId) & 0b10) !== 0;
+ }
+
+ static factory(frameURL, parentId = -1) {
+ const entry = FrameStore.junkyard.pop();
+ if ( entry === undefined ) {
+ return new FrameStore(frameURL, parentId);
+ }
+ return entry.init(frameURL, parentId);
+ }
+};
+
+// To mitigate memory churning
+FrameStore.junkyard = [];
+FrameStore.junkyardMax = 50;
+
+/******************************************************************************/
+
+const CountDetails = class {
+ constructor() {
+ this.allowed = { any: 0, frame: 0, script: 0 };
+ this.blocked = { any: 0, frame: 0, script: 0 };
+ }
+ reset() {
+ const { allowed, blocked } = this;
+ blocked.any = blocked.frame = blocked.script =
+ allowed.any = allowed.frame = allowed.script = 0;
+ }
+ inc(blocked, type = undefined) {
+ const stat = blocked ? this.blocked : this.allowed;
+ if ( type !== undefined ) { stat[type] += 1; }
+ stat.any += 1;
+ }
+};
+
+const HostnameDetails = class {
+ constructor(hostname) {
+ this.counts = new CountDetails();
+ this.init(hostname);
+ }
+ init(hostname) {
+ this.hostname = hostname;
+ this.counts.reset();
+ }
+ dispose() {
+ this.hostname = '';
+ if ( HostnameDetails.junkyard.length < HostnameDetails.junkyardMax ) {
+ HostnameDetails.junkyard.push(this);
+ }
+ }
+};
+
+HostnameDetails.junkyard = [];
+HostnameDetails.junkyardMax = 100;
+
+const HostnameDetailsMap = class extends Map {
+ reset() {
+ this.clear();
+ }
+ dispose() {
+ for ( const item of this.values() ) {
+ item.dispose();
+ }
+ this.reset();
+ }
+};
+
+/******************************************************************************/
+
+const PageStore = class {
+ constructor(tabId, details) {
+ this.extraData = new Map();
+ this.journal = [];
+ this.journalLastCommitted = this.journalLastUncommitted = -1;
+ this.journalLastUncommittedOrigin = undefined;
+ this.netFilteringCache = NetFilteringResultCache.factory();
+ this.hostnameDetailsMap = new HostnameDetailsMap();
+ this.counts = new CountDetails();
+ this.journalTimer = vAPI.defer.create(( ) => {
+ this.journalProcess();
+ });
+ this.largeMediaTimer = vAPI.defer.create(( ) => {
+ this.injectLargeMediaElementScriptlet();
+ });
+ this.init(tabId, details);
+ }
+
+ static factory(tabId, details) {
+ let entry = PageStore.junkyard.pop();
+ if ( entry === undefined ) {
+ entry = new PageStore(tabId, details);
+ } else {
+ entry.init(tabId, details);
+ }
+ return entry;
+ }
+
+ // https://github.com/gorhill/uBlock/issues/3201
+ // The context is used to determine whether we report behavior change
+ // to the logger.
+
+ init(tabId, details) {
+ const tabContext = µb.tabContextManager.mustLookup(tabId);
+ this.tabId = tabId;
+
+ // If we are navigating from-to same site, remember whether large
+ // media elements were temporarily allowed.
+ if (
+ typeof this.allowLargeMediaElementsUntil !== 'number' ||
+ tabContext.rootHostname !== this.tabHostname
+ ) {
+ this.allowLargeMediaElementsUntil = Date.now();
+ }
+
+ this.tabHostname = tabContext.rootHostname;
+ this.rawURL = tabContext.rawURL;
+ this.hostnameDetailsMap.reset();
+ this.contentLastModified = 0;
+ this.logData = undefined;
+ this.counts.reset();
+ this.remoteFontCount = 0;
+ this.popupBlockedCount = 0;
+ this.largeMediaCount = 0;
+ this.allowLargeMediaElementsRegex = undefined;
+ this.extraData.clear();
+
+ this.frameAddCount = 0;
+ this.frames = new Map();
+ this.setFrameURL({ url: tabContext.rawURL });
+
+ if ( this.titleFromDetails(details) === false ) {
+ this.title = tabContext.rawURL;
+ }
+
+ // Evaluated on-demand
+ this._noCosmeticFiltering = undefined;
+
+ // Remember if the webpage was potentially improperly filtered, for
+ // reporting purpose.
+ this.hasUnprocessedRequest = vAPI.net.hasUnprocessedRequest(tabId);
+
+ return this;
+ }
+
+ reuse(context, details) {
+ // When force refreshing a page, the page store data needs to be reset.
+
+ // If the hostname changes, we can't merely just update the context.
+ const tabContext = µb.tabContextManager.mustLookup(this.tabId);
+ if ( tabContext.rootHostname !== this.tabHostname ) {
+ context = '';
+ }
+
+ // If URL changes without a page reload (more and more common), then
+ // we need to keep all that we collected for reuse. In particular,
+ // not doing so was causing a problem in `videos.foxnews.com`:
+ // clicking a video thumbnail would not work, because the frame
+ // hierarchy structure was flushed from memory, while not really being
+ // flushed on the page.
+ if ( context === 'tabUpdated' ) {
+ // As part of https://github.com/chrisaljoudi/uBlock/issues/405
+ // URL changed, force a re-evaluation of filtering switch
+ this.rawURL = tabContext.rawURL;
+ this.setFrameURL({ url: this.rawURL });
+ this.titleFromDetails(details);
+ return this;
+ }
+
+ // A new page is completely reloaded from scratch, reset all.
+ this.largeMediaTimer.off();
+ this.disposeFrameStores();
+ this.init(this.tabId, details);
+ return this;
+ }
+
+ dispose() {
+ this.tabHostname = '';
+ this.title = '';
+ this.rawURL = '';
+ this.hostnameDetailsMap.dispose();
+ this.netFilteringCache.empty();
+ this.allowLargeMediaElementsUntil = Date.now();
+ this.allowLargeMediaElementsRegex = undefined;
+ this.largeMediaTimer.off();
+ this.disposeFrameStores();
+ this.journalTimer.off();
+ this.journal = [];
+ this.journalLastUncommittedOrigin = undefined;
+ this.journalLastCommitted = this.journalLastUncommitted = -1;
+ if ( PageStore.junkyard.length < PageStore.junkyardMax ) {
+ PageStore.junkyard.push(this);
+ }
+ return null;
+ }
+
+ titleFromDetails(details) {
+ if (
+ details instanceof Object === false ||
+ details.title === undefined
+ ) {
+ return false;
+ }
+ this.title = orphanizeString(details.title.slice(0, 128));
+ return true;
+ }
+
+ disposeFrameStores() {
+ for ( const frameStore of this.frames.values() ) {
+ frameStore.dispose();
+ }
+ this.frames.clear();
+ }
+
+ getFrameStore(frameId) {
+ return this.frames.get(frameId) || null;
+ }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1858
+ // Mind that setFrameURL() can be called from navigation event handlers.
+ setFrameURL(details) {
+ let { frameId, url, parentFrameId } = details;
+ if ( frameId === undefined ) { frameId = 0; }
+ if ( parentFrameId === undefined ) { parentFrameId = -1; }
+ let frameStore = this.frames.get(frameId);
+ if ( frameStore !== undefined ) {
+ if ( url === frameStore.rawURL ) {
+ frameStore.parentId = parentFrameId;
+ } else {
+ frameStore.init(url, parentFrameId);
+ }
+ return frameStore;
+ }
+ frameStore = FrameStore.factory(url, parentFrameId);
+ this.frames.set(frameId, frameStore);
+ this.frameAddCount += 1;
+ if ( url.startsWith('about:') ) {
+ frameStore.updateURL(this.getEffectiveFrameURL({ frameId }));
+ }
+ if ( (this.frameAddCount & 0b111111) === 0 ) {
+ this.pruneFrames();
+ }
+ return frameStore;
+ }
+
+ getEffectiveFrameURL(sender) {
+ let { frameId } = sender;
+ for (;;) {
+ const frameStore = this.getFrameStore(frameId);
+ if ( frameStore === null ) { break; }
+ if ( frameStore.rawURL.startsWith('about:') === false ) {
+ return frameStore.rawURL;
+ }
+ frameId = frameStore.parentId;
+ if ( frameId === -1 ) { break; }
+ }
+ return sender.frameURL;
+ }
+
+ // There is no event to tell us a specific subframe has been removed from
+ // the main document. The code below will remove subframes which are no
+ // longer present in the root document. Removing obsolete subframes is
+ // not a critical task, so this is executed just once on a while, to avoid
+ // bloated dictionary of subframes.
+ // A TTL is used to avoid race conditions when new iframes are added
+ // through the webRequest API but still not yet visible through the
+ // webNavigation API.
+ async pruneFrames() {
+ let entries;
+ try {
+ entries = await webext.webNavigation.getAllFrames({
+ tabId: this.tabId
+ });
+ } catch(ex) {
+ }
+ if ( Array.isArray(entries) === false ) { return; }
+ const toKeep = new Set();
+ for ( const { frameId } of entries ) {
+ toKeep.add(frameId);
+ }
+ const obsolete = Date.now() - 60000;
+ for ( const [ frameId, { t0 } ] of this.frames ) {
+ if ( toKeep.has(frameId) || t0 >= obsolete ) { continue; }
+ this.frames.delete(frameId);
+ }
+ }
+
+ getNetFilteringSwitch() {
+ return µb.tabContextManager
+ .mustLookup(this.tabId)
+ .getNetFilteringSwitch();
+ }
+
+ toggleNetFilteringSwitch(url, scope, state) {
+ µb.toggleNetFilteringSwitch(url, scope, state);
+ this.netFilteringCache.empty();
+ }
+
+ shouldApplyCosmeticFilters(frameId = 0) {
+ if ( this._noCosmeticFiltering === undefined ) {
+ this._noCosmeticFiltering = this.getNetFilteringSwitch() === false;
+ if ( this._noCosmeticFiltering === false ) {
+ this._noCosmeticFiltering = sessionSwitches.evaluateZ(
+ 'no-cosmetic-filtering',
+ this.tabHostname
+ ) === true;
+ if ( this._noCosmeticFiltering && logger.enabled ) {
+ µb.filteringContext
+ .duplicate()
+ .fromTabId(this.tabId)
+ .setURL(this.rawURL)
+ .setRealm('cosmetic')
+ .setType('dom')
+ .setFilter(sessionSwitches.toLogData())
+ .toLogger();
+ }
+ }
+ }
+ if ( this._noCosmeticFiltering ) { return false; }
+ if ( frameId === -1 ) { return true; }
+ // Cosmetic filtering can be effectively disabled when both specific
+ // and generic cosmetic filters are disabled.
+ return this.shouldApplySpecificCosmeticFilters(frameId) ||
+ this.shouldApplyGenericCosmeticFilters(frameId);
+ }
+
+ shouldApplySpecificCosmeticFilters(frameId) {
+ if ( this.shouldApplyCosmeticFilters(-1) === false ) { return false; }
+ const frameStore = this.getFrameStore(frameId);
+ if ( frameStore === null ) { return false; }
+ return frameStore.shouldApplySpecificCosmeticFilters(this.tabId);
+ }
+
+ shouldApplyGenericCosmeticFilters(frameId) {
+ if ( this.shouldApplyCosmeticFilters(-1) === false ) { return false; }
+ const frameStore = this.getFrameStore(frameId);
+ if ( frameStore === null ) { return false; }
+ return frameStore.shouldApplyGenericCosmeticFilters(this.tabId);
+ }
+
+ // https://github.com/gorhill/uBlock/issues/2105
+ // Be sure to always include the current page's hostname -- it might not
+ // be present when the page itself is pulled from the browser's
+ // short-term memory cache.
+ getAllHostnameDetails() {
+ if (
+ this.hostnameDetailsMap.has(this.tabHostname) === false &&
+ isNetworkURI(this.rawURL)
+ ) {
+ this.hostnameDetailsMap.set(
+ this.tabHostname,
+ new HostnameDetails(this.tabHostname)
+ );
+ }
+ return this.hostnameDetailsMap;
+ }
+
+ injectLargeMediaElementScriptlet() {
+ vAPI.tabs.executeScript(this.tabId, {
+ file: '/js/scriptlets/load-large-media-interactive.js',
+ allFrames: true,
+ runAt: 'document_idle',
+ });
+ contextMenu.update(this.tabId);
+ }
+
+ temporarilyAllowLargeMediaElements(state) {
+ this.largeMediaCount = 0;
+ contextMenu.update(this.tabId);
+ if ( state ) {
+ this.allowLargeMediaElementsUntil = 0;
+ this.allowLargeMediaElementsRegex = undefined;
+ } else {
+ this.allowLargeMediaElementsUntil = Date.now();
+ }
+ vAPI.tabs.executeScript(this.tabId, {
+ file: '/js/scriptlets/load-large-media-all.js',
+ allFrames: true,
+ });
+ }
+
+ // https://github.com/gorhill/uBlock/issues/2053
+ // There is no way around using journaling to ensure we deal properly with
+ // potentially out of order navigation events vs. network request events.
+ journalAddRequest(fctxt, result) {
+ const hostname = fctxt.getHostname();
+ if ( hostname === '' ) { return; }
+ this.journal.push(hostname, result, fctxt.itype);
+ this.journalTimer.on(µb.hiddenSettings.requestJournalProcessPeriod);
+ }
+
+ journalAddRootFrame(type, url) {
+ if ( type === 'committed' ) {
+ this.journalLastCommitted = this.journal.length;
+ if (
+ this.journalLastUncommitted !== -1 &&
+ this.journalLastUncommitted < this.journalLastCommitted &&
+ this.journalLastUncommittedOrigin === hostnameFromURI(url)
+ ) {
+ this.journalLastCommitted = this.journalLastUncommitted;
+ }
+ } else if ( type === 'uncommitted' ) {
+ const newOrigin = hostnameFromURI(url);
+ if (
+ this.journalLastUncommitted === -1 ||
+ this.journalLastUncommittedOrigin !== newOrigin
+ ) {
+ this.journalLastUncommitted = this.journal.length;
+ this.journalLastUncommittedOrigin = newOrigin;
+ }
+ }
+ this.journalTimer.offon(µb.hiddenSettings.requestJournalProcessPeriod);
+ }
+
+ journalProcess() {
+ this.journalTimer.off();
+
+ const journal = this.journal;
+ const pivot = Math.max(0, this.journalLastCommitted);
+ const now = Date.now();
+ const { SCRIPT, SUB_FRAME, OBJECT } = µb.FilteringContext;
+ let aggregateAllowed = 0;
+ let aggregateBlocked = 0;
+
+ // Everything after pivot originates from current page.
+ for ( let i = pivot; i < journal.length; i += 3 ) {
+ const hostname = journal[i+0];
+ let hnDetails = this.hostnameDetailsMap.get(hostname);
+ if ( hnDetails === undefined ) {
+ hnDetails = new HostnameDetails(hostname);
+ this.hostnameDetailsMap.set(hostname, hnDetails);
+ this.contentLastModified = now;
+ }
+ const blocked = journal[i+1] === 1;
+ const itype = journal[i+2];
+ if ( itype === SCRIPT ) {
+ hnDetails.counts.inc(blocked, 'script');
+ this.counts.inc(blocked, 'script');
+ } else if ( itype === SUB_FRAME || itype === OBJECT ) {
+ hnDetails.counts.inc(blocked, 'frame');
+ this.counts.inc(blocked, 'frame');
+ } else {
+ hnDetails.counts.inc(blocked);
+ this.counts.inc(blocked);
+ }
+ if ( blocked ) {
+ aggregateBlocked += 1;
+ } else {
+ aggregateAllowed += 1;
+ }
+ }
+ this.journalLastUncommitted = this.journalLastCommitted = -1;
+
+ // https://github.com/chrisaljoudi/uBlock/issues/905#issuecomment-76543649
+ // No point updating the badge if it's not being displayed.
+ if ( aggregateBlocked !== 0 && µb.userSettings.showIconBadge ) {
+ µb.updateToolbarIcon(this.tabId, 0x02);
+ }
+
+ // Everything before pivot does not originate from current page -- we
+ // still need to bump global blocked/allowed counts.
+ for ( let i = 0; i < pivot; i += 3 ) {
+ if ( journal[i+1] === 1 ) {
+ aggregateBlocked += 1;
+ } else {
+ aggregateAllowed += 1;
+ }
+ }
+ if ( aggregateAllowed !== 0 || aggregateBlocked !== 0 ) {
+ µb.localSettings.blockedRequestCount += aggregateBlocked;
+ µb.localSettings.allowedRequestCount += aggregateAllowed;
+ µb.localSettingsLastModified = now;
+ }
+ journal.length = 0;
+ }
+
+ filterRequest(fctxt) {
+ fctxt.filter = undefined;
+ fctxt.redirectURL = undefined;
+
+ if ( this.getNetFilteringSwitch(fctxt) === false ) {
+ return 0;
+ }
+
+ if (
+ fctxt.itype === fctxt.CSP_REPORT &&
+ this.filterCSPReport(fctxt) === 1
+ ) {
+ return 1;
+ }
+
+ if (
+ (fctxt.itype & fctxt.FONT_ANY) !== 0 &&
+ this.filterFont(fctxt) === 1 )
+ {
+ return 1;
+ }
+
+ if (
+ fctxt.itype === fctxt.SCRIPT &&
+ this.filterScripting(fctxt, true) === 1
+ ) {
+ return 1;
+ }
+
+ const cacheableResult =
+ this.cacheableResults.has(fctxt.itype) &&
+ fctxt.aliasURL === undefined;
+
+ if ( cacheableResult ) {
+ const entry = this.netFilteringCache.lookupResult(fctxt);
+ if ( entry !== undefined ) {
+ fctxt.redirectURL = entry.redirectURL;
+ fctxt.filter = entry.logData;
+ return entry.result;
+ }
+ }
+
+ const requestType = fctxt.type;
+ const loggerEnabled = logger.enabled;
+
+ // Dynamic URL filtering.
+ let result = sessionURLFiltering.evaluateZ(
+ fctxt.getTabHostname(),
+ fctxt.url,
+ requestType
+ );
+ if ( result !== 0 && loggerEnabled ) {
+ fctxt.filter = sessionURLFiltering.toLogData();
+ }
+
+ // Dynamic hostname/type filtering.
+ if ( result === 0 && µb.userSettings.advancedUserEnabled ) {
+ result = sessionFirewall.evaluateCellZY(
+ fctxt.getTabHostname(),
+ fctxt.getHostname(),
+ requestType
+ );
+ if ( result !== 0 && result !== 3 && loggerEnabled ) {
+ fctxt.filter = sessionFirewall.toLogData();
+ }
+ }
+
+ // Static filtering has lowest precedence.
+ const snfe = staticNetFilteringEngine;
+ if ( result === 0 || result === 3 ) {
+ result = snfe.matchRequest(fctxt);
+ if ( result !== 0 ) {
+ if ( loggerEnabled ) {
+ fctxt.setFilter(snfe.toLogData());
+ }
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/943
+ // Blanket-except blocked aliased canonical hostnames?
+ if (
+ result === 1 &&
+ fctxt.aliasURL !== undefined &&
+ snfe.isBlockImportant() === false &&
+ this.shouldExceptCname(fctxt)
+ ) {
+ return 2;
+ }
+ }
+ }
+
+ // Click-to-load?
+ // When frameId is not -1, the resource is always sub_frame.
+ if ( result === 1 && fctxt.frameId !== -1 ) {
+ const frameStore = this.getFrameStore(fctxt.frameId);
+ if ( frameStore !== null && frameStore.clickToLoad ) {
+ result = 2;
+ if ( loggerEnabled ) {
+ fctxt.pushFilter({
+ result,
+ source: 'network',
+ raw: 'click-to-load',
+ });
+ }
+ }
+ }
+
+ // Modifier(s)?
+ // A modifier is an action which transform the original network request.
+ // https://github.com/gorhill/uBlock/issues/949
+ // Redirect blocked request?
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/760
+ // Redirect non-blocked request?
+ if ( (fctxt.itype & fctxt.INLINE_ANY) === 0 ) {
+ if ( result === 1 ) {
+ this.redirectBlockedRequest(fctxt);
+ } else {
+ this.redirectNonBlockedRequest(fctxt);
+ }
+ }
+
+ if ( cacheableResult ) {
+ this.netFilteringCache.rememberResult(fctxt, result);
+ } else if ( result === 1 && this.collapsibleResources.has(fctxt.itype) ) {
+ this.netFilteringCache.rememberBlock(fctxt);
+ }
+
+ return result;
+ }
+
+ filterOnHeaders(fctxt, headers) {
+ fctxt.filter = undefined;
+
+ if ( this.getNetFilteringSwitch(fctxt) === false ) { return 0; }
+
+ let result = staticNetFilteringEngine.matchHeaders(fctxt, headers);
+ if ( result === 0 ) { return 0; }
+
+ const loggerEnabled = logger.enabled;
+ if ( loggerEnabled ) {
+ fctxt.filter = staticNetFilteringEngine.toLogData();
+ }
+
+ // Dynamic filtering allow rules
+ // URL filtering
+ if (
+ result === 1 &&
+ sessionURLFiltering.evaluateZ(
+ fctxt.getTabHostname(),
+ fctxt.url,
+ fctxt.type
+ ) === 2
+ ) {
+ result = 2;
+ if ( loggerEnabled ) {
+ fctxt.filter = sessionURLFiltering.toLogData();
+ }
+ }
+ // Hostname filtering
+ if (
+ result === 1 &&
+ µb.userSettings.advancedUserEnabled &&
+ sessionFirewall.evaluateCellZY(
+ fctxt.getTabHostname(),
+ fctxt.getHostname(),
+ fctxt.type
+ ) === 2
+ ) {
+ result = 2;
+ if ( loggerEnabled ) {
+ fctxt.filter = sessionFirewall.toLogData();
+ }
+ }
+
+ return result;
+ }
+
+ redirectBlockedRequest(fctxt) {
+ const directives = staticNetFilteringEngine.redirectRequest(redirectEngine, fctxt);
+ if ( directives === undefined ) { return; }
+ if ( logger.enabled !== true ) { return; }
+ fctxt.pushFilters(directives.map(a => a.logData()));
+ if ( fctxt.redirectURL === undefined ) { return; }
+ fctxt.pushFilter({
+ source: 'redirect',
+ raw: directives[directives.length-1].value
+ });
+ }
+
+ redirectNonBlockedRequest(fctxt) {
+ const transformDirectives = staticNetFilteringEngine.transformRequest(fctxt);
+ const pruneDirectives = fctxt.redirectURL === undefined &&
+ staticNetFilteringEngine.hasQuery(fctxt) &&
+ staticNetFilteringEngine.filterQuery(fctxt) ||
+ undefined;
+ if ( transformDirectives === undefined && pruneDirectives === undefined ) { return; }
+ if ( logger.enabled !== true ) { return; }
+ if ( transformDirectives !== undefined ) {
+ fctxt.pushFilters(transformDirectives.map(a => a.logData()));
+ }
+ if ( pruneDirectives !== undefined ) {
+ fctxt.pushFilters(pruneDirectives.map(a => a.logData()));
+ }
+ if ( fctxt.redirectURL === undefined ) { return; }
+ fctxt.pushFilter({
+ source: 'redirect',
+ raw: fctxt.redirectURL
+ });
+ }
+
+ filterCSPReport(fctxt) {
+ if (
+ sessionSwitches.evaluateZ(
+ 'no-csp-reports',
+ fctxt.getHostname()
+ )
+ ) {
+ if ( logger.enabled ) {
+ fctxt.filter = sessionSwitches.toLogData();
+ }
+ return 1;
+ }
+ return 0;
+ }
+
+ filterFont(fctxt) {
+ if ( fctxt.itype === fctxt.FONT ) {
+ this.remoteFontCount += 1;
+ }
+ if (
+ sessionSwitches.evaluateZ(
+ 'no-remote-fonts',
+ fctxt.getTabHostname()
+ ) !== false
+ ) {
+ if ( logger.enabled ) {
+ fctxt.filter = sessionSwitches.toLogData();
+ }
+ return 1;
+ }
+ return 0;
+ }
+
+ filterScripting(fctxt, netFiltering) {
+ fctxt.filter = undefined;
+ if ( netFiltering === undefined ) {
+ netFiltering = this.getNetFilteringSwitch(fctxt);
+ }
+ if (
+ netFiltering === false ||
+ sessionSwitches.evaluateZ(
+ 'no-scripting',
+ fctxt.getTabHostname()
+ ) === false
+ ) {
+ return 0;
+ }
+ if ( logger.enabled ) {
+ fctxt.filter = sessionSwitches.toLogData();
+ }
+ return 1;
+ }
+
+ // The caller is responsible to check whether filtering is enabled or not.
+ filterLargeMediaElement(fctxt, size) {
+ fctxt.filter = undefined;
+
+ if ( this.allowLargeMediaElementsUntil === 0 ) {
+ return 0;
+ }
+ // Disregard large media elements previously allowed: for example, to
+ // seek inside a previously allowed audio/video.
+ if (
+ this.allowLargeMediaElementsRegex instanceof RegExp &&
+ this.allowLargeMediaElementsRegex.test(fctxt.url)
+ ) {
+ return 0;
+ }
+ if ( Date.now() < this.allowLargeMediaElementsUntil ) {
+ const sources = this.allowLargeMediaElementsRegex instanceof RegExp
+ ? [ this.allowLargeMediaElementsRegex.source ]
+ : [];
+ sources.push('^' + µb.escapeRegex(fctxt.url));
+ this.allowLargeMediaElementsRegex = new RegExp(sources.join('|'));
+ return 0;
+ }
+ if (
+ sessionSwitches.evaluateZ(
+ 'no-large-media',
+ fctxt.getTabHostname()
+ ) !== true
+ ) {
+ this.allowLargeMediaElementsUntil = 0;
+ return 0;
+ }
+ if ( (size >>> 10) < µb.userSettings.largeMediaSize ) {
+ return 0;
+ }
+
+ this.largeMediaCount += 1;
+ this.largeMediaTimer.on(500);
+
+ if ( logger.enabled ) {
+ fctxt.filter = sessionSwitches.toLogData();
+ }
+
+ return 1;
+ }
+
+ clickToLoad(frameId, frameURL) {
+ let frameStore = this.getFrameStore(frameId);
+ if ( frameStore === null ) {
+ frameStore = this.setFrameURL({ frameId, url: frameURL });
+ }
+ this.netFilteringCache.forgetResult(
+ this.tabHostname,
+ 'sub_frame',
+ frameURL
+ );
+ frameStore.clickToLoad = true;
+ }
+
+ shouldExceptCname(fctxt) {
+ let exceptCname;
+ let frameStore;
+ if ( fctxt.docId !== undefined ) {
+ frameStore = this.getFrameStore(fctxt.docId);
+ if ( frameStore instanceof Object ) {
+ exceptCname = frameStore.exceptCname;
+ }
+ }
+ if ( exceptCname === undefined ) {
+ const result = staticNetFilteringEngine.matchRequestReverse(
+ 'cname',
+ frameStore instanceof Object
+ ? frameStore.rawURL
+ : fctxt.getDocOrigin()
+ );
+ exceptCname = result === 2
+ ? staticNetFilteringEngine.toLogData()
+ : false;
+ if ( frameStore instanceof Object ) {
+ frameStore.exceptCname = exceptCname;
+ }
+ }
+ if ( exceptCname === false ) { return false; }
+ if ( exceptCname instanceof Object ) {
+ fctxt.setFilter(exceptCname);
+ }
+ return true;
+ }
+
+ getBlockedResources(request, response) {
+ const normalURL = µb.normalizeTabURL(this.tabId, request.frameURL);
+ const resources = request.resources;
+ const fctxt = µb.filteringContext;
+ fctxt.fromTabId(this.tabId)
+ .setDocOriginFromURL(normalURL);
+ // Force some resources to go through the filtering engine in order to
+ // populate the blocked-resources cache. This is required because for
+ // some resources it's not possible to detect whether they were blocked
+ // content script-side (i.e. `iframes` -- unlike `img`).
+ if ( Array.isArray(resources) && resources.length !== 0 ) {
+ for ( const resource of resources ) {
+ this.filterRequest(
+ fctxt.setType(resource.type).setURL(resource.url)
+ );
+ }
+ }
+ if ( this.netFilteringCache.hash === response.hash ) { return; }
+ response.hash = this.netFilteringCache.hash;
+ response.blockedResources =
+ this.netFilteringCache.lookupAllBlocked(fctxt.getDocHostname());
+ }
+};
+
+PageStore.prototype.cacheableResults = new Set([
+ µb.FilteringContext.SUB_FRAME,
+]);
+
+PageStore.prototype.collapsibleResources = new Set([
+ µb.FilteringContext.IMAGE,
+ µb.FilteringContext.MEDIA,
+ µb.FilteringContext.OBJECT,
+ µb.FilteringContext.SUB_FRAME,
+]);
+
+// To mitigate memory churning
+PageStore.junkyard = [];
+PageStore.junkyardMax = 10;
+
+/******************************************************************************/
+
+export { PageStore };
diff --git a/src/js/popup-fenix.js b/src/js/popup-fenix.js
new file mode 100644
index 0000000..b44b923
--- /dev/null
+++ b/src/js/popup-fenix.js
@@ -0,0 +1,1530 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+import punycode from '../lib/punycode.js';
+import { i18n$ } from './i18n.js';
+import { dom, qs$, qsa$ } from './dom.js';
+
+/******************************************************************************/
+
+let popupFontSize = 'unset';
+vAPI.localStorage.getItemAsync('popupFontSize').then(value => {
+ if ( typeof value !== 'string' || value === 'unset' ) { return; }
+ document.body.style.setProperty('--font-size', value);
+ popupFontSize = value;
+});
+
+// https://github.com/chrisaljoudi/uBlock/issues/996
+// Experimental: mitigate glitchy popup UI: immediately set the firewall
+// pane visibility to its last known state. By default the pane is hidden.
+vAPI.localStorage.getItemAsync('popupPanelSections').then(bits => {
+ if ( typeof bits !== 'number' ) { return; }
+ setSections(bits);
+});
+
+/******************************************************************************/
+
+const messaging = vAPI.messaging;
+const scopeToSrcHostnameMap = {
+ '/': '*',
+ '.': ''
+};
+const hostnameToSortableTokenMap = new Map();
+const statsStr = i18n$('popupBlockedStats');
+const domainsHitStr = i18n$('popupHitDomainCount');
+
+let popupData = {};
+let dfPaneBuilt = false;
+let dfHotspots = null;
+const allHostnameRows = [];
+let cachedPopupHash = '';
+
+// https://github.com/gorhill/uBlock/issues/2550
+// Solution inspired from
+// - https://bugs.chromium.org/p/chromium/issues/detail?id=683314
+// - https://bugzilla.mozilla.org/show_bug.cgi?id=1332714#c17
+// Confusable character set from:
+// - http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5B%D0%B0%D1%81%D4%81%D0%B5%D2%BB%D1%96%D1%98%D3%8F%D0%BE%D1%80%D4%9B%D1%95%D4%9D%D1%85%D1%83%D1%8A%D0%AC%D2%BD%D0%BF%D0%B3%D1%B5%D1%A1%5D&g=gc&i=
+// Linked from:
+// - https://www.chromium.org/developers/design-documents/idn-in-google-chrome
+const reCyrillicNonAmbiguous = /[\u0400-\u042b\u042d-\u042f\u0431\u0432\u0434\u0436-\u043d\u0442\u0444\u0446-\u0449\u044b-\u0454\u0457\u0459-\u0460\u0462-\u0474\u0476-\u04ba\u04bc\u04be-\u04ce\u04d0-\u0500\u0502-\u051a\u051c\u051e-\u052f]/;
+const reCyrillicAmbiguous = /[\u042c\u0430\u0433\u0435\u043e\u043f\u0440\u0441\u0443\u0445\u044a\u0455\u0456\u0458\u0461\u0475\u04bb\u04bd\u04cf\u0501\u051b\u051d]/;
+
+/******************************************************************************/
+
+const cachePopupData = function(data) {
+ popupData = {};
+ scopeToSrcHostnameMap['.'] = '';
+ hostnameToSortableTokenMap.clear();
+
+ if ( typeof data !== 'object' ) {
+ return popupData;
+ }
+ popupData = data;
+ popupData.cnameMap = new Map(popupData.cnameMap);
+ scopeToSrcHostnameMap['.'] = popupData.pageHostname || '';
+ const hostnameDict = popupData.hostnameDict;
+ if ( typeof hostnameDict !== 'object' ) {
+ return popupData;
+ }
+ for ( const hostname in hostnameDict ) {
+ if ( hostnameDict.hasOwnProperty(hostname) === false ) { continue; }
+ let domain = hostnameDict[hostname].domain;
+ let prefix = hostname.slice(0, 0 - domain.length - 1);
+ // Prefix with space char for 1st-party hostnames: this ensure these
+ // will come first in list.
+ if ( domain === popupData.pageDomain ) {
+ domain = '\u0020';
+ }
+ hostnameToSortableTokenMap.set(
+ hostname,
+ domain + ' ' + prefix.split('.').reverse().join('.')
+ );
+ }
+ return popupData;
+};
+
+/******************************************************************************/
+
+const hashFromPopupData = function(reset = false) {
+ // It makes no sense to offer to refresh the behind-the-scene scope
+ if ( popupData.pageHostname === 'behind-the-scene' ) {
+ dom.cl.remove(dom.body, 'needReload');
+ return;
+ }
+
+ const hasher = [];
+ const rules = popupData.firewallRules;
+ for ( const key in rules ) {
+ const rule = rules[key];
+ if ( rule === undefined ) { continue; }
+ hasher.push(rule);
+ }
+ hasher.sort();
+ hasher.push(
+ dom.cl.has('body', 'off'),
+ dom.cl.has('#no-large-media', 'on'),
+ dom.cl.has('#no-cosmetic-filtering', 'on'),
+ dom.cl.has('#no-remote-fonts', 'on'),
+ dom.cl.has('#no-scripting', 'on')
+ );
+
+ const hash = hasher.join('');
+ if ( reset ) {
+ cachedPopupHash = hash;
+ }
+ dom.cl.toggle(dom.body, 'needReload',
+ hash !== cachedPopupHash || popupData.hasUnprocessedRequest === true
+ );
+};
+
+/******************************************************************************/
+
+// greater-than-zero test
+
+const gtz = n => typeof n === 'number' && n > 0;
+
+/******************************************************************************/
+
+const formatNumber = function(count) {
+ if ( typeof count !== 'number' ) { return ''; }
+ if ( count < 1e6 ) { return count.toLocaleString(); }
+
+ if (
+ intlNumberFormat === undefined &&
+ Intl.NumberFormat instanceof Function
+ ) {
+ const intl = new Intl.NumberFormat(undefined, {
+ notation: 'compact',
+ maximumSignificantDigits: 4
+ });
+ if (
+ intl.resolvedOptions instanceof Function &&
+ intl.resolvedOptions().hasOwnProperty('notation')
+ ) {
+ intlNumberFormat = intl;
+ }
+ }
+
+ if ( intlNumberFormat ) {
+ return intlNumberFormat.format(count);
+ }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1027#issuecomment-629696676
+ // For platforms which do not support proper number formatting, use
+ // a poor's man compact form, which unfortunately is not i18n-friendly.
+ count /= 1000000;
+ if ( count >= 100 ) {
+ count = Math.floor(count * 10) / 10;
+ } else if ( count > 10 ) {
+ count = Math.floor(count * 100) / 100;
+ } else {
+ count = Math.floor(count * 1000) / 1000;
+ }
+ return (count).toLocaleString(undefined) + '\u2009M';
+};
+
+let intlNumberFormat;
+
+/******************************************************************************/
+
+const safePunycodeToUnicode = function(hn) {
+ const pretty = punycode.toUnicode(hn);
+ return pretty === hn ||
+ reCyrillicAmbiguous.test(pretty) === false ||
+ reCyrillicNonAmbiguous.test(pretty)
+ ? pretty
+ : hn;
+};
+
+/******************************************************************************/
+
+const updateFirewallCellCount = function(cells, allowed, blocked) {
+ for ( const cell of cells ) {
+ if ( gtz(allowed) ) {
+ dom.attr(cell, 'data-acount',
+ Math.min(Math.ceil(Math.log(allowed + 1) / Math.LN10), 3)
+ );
+ } else {
+ dom.attr(cell, 'data-acount', '0');
+ }
+ if ( gtz(blocked) ) {
+ dom.attr(cell, 'data-bcount',
+ Math.min(Math.ceil(Math.log(blocked + 1) / Math.LN10), 3)
+ );
+ } else {
+ dom.attr(cell, 'data-bcount', '0');
+ }
+ }
+};
+
+/******************************************************************************/
+
+const updateFirewallCellRule = function(cells, scope, des, type, rule) {
+ const ruleParts = rule !== undefined ? rule.split(' ') : undefined;
+
+ for ( const cell of cells ) {
+ if ( ruleParts === undefined ) {
+ dom.attr(cell, 'class', null);
+ continue;
+ }
+
+ const action = updateFirewallCellRule.actionNames[ruleParts[3]];
+ dom.attr(cell, 'class', `${action}Rule`);
+
+ // Use dark shade visual cue if the rule is specific to the cell.
+ if (
+ (ruleParts[1] !== '*' || ruleParts[2] === type) &&
+ (ruleParts[1] === des) &&
+ (ruleParts[0] === scopeToSrcHostnameMap[scope])
+
+ ) {
+ dom.cl.add(cell, 'ownRule');
+ }
+ }
+};
+
+updateFirewallCellRule.actionNames = { '1': 'block', '2': 'allow', '3': 'noop' };
+
+/******************************************************************************/
+
+const updateAllFirewallCells = function(doRules = true, doCounts = true) {
+ const { pageDomain } = popupData;
+ const rowContainer = qs$('#firewall');
+ const rows = qsa$(rowContainer, '#firewall > [data-des][data-type]');
+
+ let a1pScript = 0, b1pScript = 0;
+ let a3pScript = 0, b3pScript = 0;
+ let a3pFrame = 0, b3pFrame = 0;
+
+ for ( const row of rows ) {
+ const des = dom.attr(row, 'data-des');
+ const type = dom.attr(row, 'data-type');
+ if ( doRules ) {
+ updateFirewallCellRule(
+ qsa$(row, ':scope > span[data-src="/"]'),
+ '/',
+ des,
+ type,
+ popupData.firewallRules[`/ ${des} ${type}`]
+ );
+ }
+ const cells = qsa$(row, ':scope > span[data-src="."]');
+ if ( doRules ) {
+ updateFirewallCellRule(
+ cells,
+ '.',
+ des,
+ type,
+ popupData.firewallRules[`. ${des} ${type}`]
+ );
+ }
+ if ( des === '*' || type !== '*' ) { continue; }
+ if ( doCounts === false ) { continue; }
+ const hnDetails = popupData.hostnameDict[des];
+ if ( hnDetails === undefined ) {
+ updateFirewallCellCount(cells);
+ continue;
+ }
+ const { allowed, blocked } = hnDetails.counts;
+ updateFirewallCellCount([ cells[0] ], allowed.any, blocked.any);
+ const { totals } = hnDetails;
+ if ( totals !== undefined ) {
+ updateFirewallCellCount([ cells[1] ], totals.allowed.any, totals.blocked.any);
+ }
+ if ( hnDetails.domain === pageDomain ) {
+ a1pScript += allowed.script; b1pScript += blocked.script;
+ } else {
+ a3pScript += allowed.script; b3pScript += blocked.script;
+ a3pFrame += allowed.frame; b3pFrame += blocked.frame;
+ }
+ }
+
+ if ( doCounts ) {
+ const fromType = type =>
+ qsa$(`#firewall > [data-des="*"][data-type="${type}"] > [data-src="."]`);
+ updateFirewallCellCount(fromType('1p-script'), a1pScript, b1pScript);
+ updateFirewallCellCount(fromType('3p-script'), a3pScript, b3pScript);
+ dom.cl.toggle(rowContainer, 'has3pScript', a3pScript !== 0 || b3pScript !== 0);
+ updateFirewallCellCount(fromType('3p-frame'), a3pFrame, b3pFrame);
+ dom.cl.toggle(rowContainer, 'has3pFrame', a3pFrame !== 0 || b3pFrame !== 0);
+ }
+
+ dom.cl.toggle(dom.body, 'needSave', popupData.matrixIsDirty === true);
+};
+
+/******************************************************************************/
+
+// Compute statistics useful only to firewall entries -- we need to call
+// this only when overview pane needs to be rendered.
+
+const expandHostnameStats = ( ) => {
+ let dnDetails;
+ for ( const des of allHostnameRows ) {
+ const hnDetails = popupData.hostnameDict[des];
+ const { domain, counts } = hnDetails;
+ const isDomain = des === domain;
+ const { allowed: hnAllowed, blocked: hnBlocked } = counts;
+ if ( isDomain ) {
+ dnDetails = hnDetails;
+ dnDetails.totals = JSON.parse(JSON.stringify(dnDetails.counts));
+ } else {
+ const { allowed: dnAllowed, blocked: dnBlocked } = dnDetails.totals;
+ dnAllowed.any += hnAllowed.any;
+ dnBlocked.any += hnBlocked.any;
+ }
+ hnDetails.hasScript = hnAllowed.script !== 0 || hnBlocked.script !== 0;
+ dnDetails.hasScript = dnDetails.hasScript || hnDetails.hasScript;
+ hnDetails.hasFrame = hnAllowed.frame !== 0 || hnBlocked.frame !== 0;
+ dnDetails.hasFrame = dnDetails.hasFrame || hnDetails.hasFrame;
+ }
+};
+
+/******************************************************************************/
+
+const buildAllFirewallRows = function() {
+ // Do this before removing the rows
+ if ( dfHotspots === null ) {
+ dfHotspots = qs$('#actionSelector');
+ dom.on(dfHotspots, 'click', setFirewallRuleHandler);
+ }
+ dfHotspots.remove();
+
+ // This must be called before we create the rows.
+ expandHostnameStats();
+
+ // Update incrementally: reuse existing rows if possible.
+ const rowContainer = qs$('#firewall');
+ const toAppend = document.createDocumentFragment();
+ const rowTemplate = qs$('#templates > div[data-des=""][data-type="*"]');
+ const { cnameMap, hostnameDict, pageDomain, pageHostname } = popupData;
+
+ let row = qs$(rowContainer, 'div[data-des="*"][data-type="3p-frame"] + div');
+
+ for ( const des of allHostnameRows ) {
+ if ( row === null ) {
+ row = dom.clone(rowTemplate);
+ toAppend.appendChild(row);
+ }
+ dom.attr(row, 'data-des', des);
+
+ const hnDetails = hostnameDict[des] || {};
+ const isDomain = des === hnDetails.domain;
+ const prettyDomainName = des.includes('xn--')
+ ? punycode.toUnicode(des)
+ : des;
+ const isPunycoded = prettyDomainName !== des;
+
+ if ( isDomain && row.childElementCount < 4 ) {
+ row.append(dom.clone(row.children[2]));
+ } else if ( isDomain === false && row.childElementCount === 4 ) {
+ row.children[3].remove();
+ }
+
+ const span = qs$(row, 'span:first-of-type');
+ dom.text(qs$(span, ':scope > span > span'), prettyDomainName);
+
+ const classList = row.classList;
+
+ let desExtra = '';
+ if ( classList.toggle('isCname', cnameMap.has(des)) ) {
+ desExtra = punycode.toUnicode(cnameMap.get(des));
+ } else if (
+ isDomain && isPunycoded &&
+ reCyrillicAmbiguous.test(prettyDomainName) &&
+ reCyrillicNonAmbiguous.test(prettyDomainName) === false
+ ) {
+ desExtra = des;
+ }
+ dom.text(qs$(span, 'sub'), desExtra);
+
+ classList.toggle('isRootContext', des === pageHostname);
+ classList.toggle('is3p', hnDetails.domain !== pageDomain);
+ classList.toggle('isDomain', isDomain);
+ classList.toggle('hasSubdomains', isDomain && hnDetails.hasSubdomains);
+ classList.toggle('isSubdomain', !isDomain);
+ const { counts } = hnDetails;
+ classList.toggle('allowed', gtz(counts.allowed.any));
+ classList.toggle('blocked', gtz(counts.blocked.any));
+ const { totals } = hnDetails;
+ classList.toggle('totalAllowed', gtz(totals && totals.allowed.any));
+ classList.toggle('totalBlocked', gtz(totals && totals.blocked.any));
+ classList.toggle('hasScript', hnDetails.hasScript === true);
+ classList.toggle('hasFrame', hnDetails.hasFrame === true);
+ classList.toggle('expandException', expandExceptions.has(hnDetails.domain));
+
+ row = row.nextElementSibling;
+ }
+
+ // Remove unused trailing rows
+ if ( row !== null ) {
+ while ( row.nextElementSibling !== null ) {
+ row.nextElementSibling.remove();
+ }
+ row.remove();
+ }
+
+ // Add new rows all at once
+ if ( toAppend.childElementCount !== 0 ) {
+ rowContainer.append(toAppend);
+ }
+
+ if ( dfPaneBuilt !== true && popupData.advancedUserEnabled ) {
+ dom.on('#firewall', 'click', 'span[data-src]', unsetFirewallRuleHandler);
+ dom.on('#firewall', 'mouseenter', 'span[data-src]', mouseenterCellHandler);
+ dom.on('#firewall', 'mouseleave', 'span[data-src]', mouseleaveCellHandler);
+ dfPaneBuilt = true;
+ }
+
+ updateAllFirewallCells();
+};
+
+/******************************************************************************/
+
+const hostnameCompare = function(a, b) {
+ let ha = a;
+ if ( !reIP.test(ha) ) {
+ ha = hostnameToSortableTokenMap.get(ha) || ' ';
+ }
+ let hb = b;
+ if ( !reIP.test(hb) ) {
+ hb = hostnameToSortableTokenMap.get(hb) || ' ';
+ }
+ const ca = ha.charCodeAt(0);
+ const cb = hb.charCodeAt(0);
+ return ca !== cb ? ca - cb : ha.localeCompare(hb);
+};
+
+const reIP = /(\d|\])$/;
+
+/******************************************************************************/
+
+function filterFirewallRows() {
+ const firewallElem = qs$('#firewall');
+ const elems = qsa$('#firewall .filterExpressions span[data-expr]');
+ let not = false;
+ for ( const elem of elems ) {
+ const on = dom.cl.has(elem, 'on');
+ switch ( elem.dataset.expr ) {
+ case 'not':
+ not = on;
+ break;
+ case 'blocked':
+ dom.cl.toggle(firewallElem, 'showBlocked', !not && on);
+ dom.cl.toggle(firewallElem, 'hideBlocked', not && on);
+ break;
+ case 'allowed':
+ dom.cl.toggle(firewallElem, 'showAllowed', !not && on);
+ dom.cl.toggle(firewallElem, 'hideAllowed', not && on);
+ break;
+ case 'script':
+ dom.cl.toggle(firewallElem, 'show3pScript', !not && on);
+ dom.cl.toggle(firewallElem, 'hide3pScript', not && on);
+ break;
+ case 'frame':
+ dom.cl.toggle(firewallElem, 'show3pFrame', !not && on);
+ dom.cl.toggle(firewallElem, 'hide3pFrame', not && on);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+dom.on('#firewall .filterExpressions', 'click', 'span[data-expr]', ev => {
+ const target = ev.target;
+ dom.cl.toggle(target, 'on');
+ switch ( target.dataset.expr ) {
+ case 'blocked':
+ if ( dom.cl.has(target, 'on') === false ) { break; }
+ dom.cl.remove('#firewall .filterExpressions span[data-expr="allowed"]', 'on');
+ break;
+ case 'allowed':
+ if ( dom.cl.has(target, 'on') === false ) { break; }
+ dom.cl.remove('#firewall .filterExpressions span[data-expr="blocked"]', 'on');
+ break;
+ }
+ filterFirewallRows();
+ const elems = qsa$('#firewall .filterExpressions span[data-expr]');
+ const filters = Array.from(elems) .map(el => dom.cl.has(el, 'on') ? '1' : '0');
+ filters.unshift('00');
+ vAPI.localStorage.setItem('firewallFilters', filters.join(' '));
+});
+
+{
+ vAPI.localStorage.getItemAsync('firewallFilters').then(v => {
+ if ( v === null ) { return; }
+ const filters = v.split(' ');
+ if ( filters.shift() !== '00' ) { return; }
+ if ( filters.every(v => v === '0') ) { return; }
+ const elems = qsa$('#firewall .filterExpressions span[data-expr]');
+ for ( let i = 0; i < elems.length; i++ ) {
+ if ( filters[i] === '0' ) { continue; }
+ dom.cl.add(elems[i], 'on');
+ }
+ filterFirewallRows();
+ });
+}
+
+/******************************************************************************/
+
+const renderPrivacyExposure = function() {
+ const allDomains = {};
+ let allDomainCount = 0;
+ let touchedDomainCount = 0;
+
+ allHostnameRows.length = 0;
+
+ // Sort hostnames. First-party hostnames must always appear at the top
+ // of the list.
+ const { hostnameDict } = popupData;
+ const desHostnameDone = new Set();
+ const keys = Object.keys(hostnameDict).sort(hostnameCompare);
+ for ( const des of keys ) {
+ // Specific-type rules -- these are built-in
+ if ( des === '*' || desHostnameDone.has(des) ) { continue; }
+ const hnDetails = hostnameDict[des];
+ const { domain, counts } = hnDetails;
+ if ( allDomains.hasOwnProperty(domain) === false ) {
+ allDomains[domain] = false;
+ allDomainCount += 1;
+ }
+ if ( gtz(counts.allowed.any) ) {
+ if ( allDomains[domain] === false ) {
+ allDomains[domain] = true;
+ touchedDomainCount += 1;
+ }
+ }
+ const dnDetails = hostnameDict[domain];
+ if ( dnDetails !== undefined ) {
+ if ( des !== domain ) {
+ dnDetails.hasSubdomains = true;
+ } else if ( dnDetails.hasSubdomains === undefined ) {
+ dnDetails.hasSubdomains = false;
+ }
+ }
+ allHostnameRows.push(des);
+ desHostnameDone.add(des);
+ }
+
+ const summary = domainsHitStr
+ .replace('{{count}}', touchedDomainCount.toLocaleString())
+ .replace('{{total}}', allDomainCount.toLocaleString());
+ dom.text('[data-i18n^="popupDomainsConnected"] + span', summary);
+};
+
+/******************************************************************************/
+
+const updateHnSwitches = function() {
+ dom.cl.toggle('#no-popups', 'on', popupData.noPopups === true);
+ dom.cl.toggle('#no-large-media', 'on', popupData.noLargeMedia === true);
+ dom.cl.toggle('#no-cosmetic-filtering', 'on',popupData.noCosmeticFiltering === true);
+ dom.cl.toggle('#no-remote-fonts', 'on', popupData.noRemoteFonts === true);
+ dom.cl.toggle('#no-scripting', 'on', popupData.noScripting === true);
+};
+
+/******************************************************************************/
+
+// Assume everything has to be done incrementally.
+
+const renderPopup = function() {
+ if ( popupData.tabTitle ) {
+ document.title = popupData.appName + ' - ' + popupData.tabTitle;
+ }
+
+ const isFiltering = popupData.netFilteringSwitch;
+
+ dom.cl.toggle(dom.body, 'advancedUser', popupData.advancedUserEnabled === true);
+ dom.cl.toggle(dom.body, 'off', popupData.pageURL === '' || isFiltering !== true);
+ dom.cl.toggle(dom.body, 'needSave', popupData.matrixIsDirty === true);
+
+ // The hostname information below the power switch
+ {
+ const [ elemHn, elemDn ] = qs$('#hostname').children;
+ const { pageDomain, pageHostname } = popupData;
+ if ( pageDomain !== '' ) {
+ dom.text(elemDn, safePunycodeToUnicode(pageDomain));
+ dom.text(elemHn, pageHostname !== pageDomain
+ ? safePunycodeToUnicode(pageHostname.slice(0, -pageDomain.length - 1)) + '.'
+ : ''
+ );
+ } else {
+ dom.text(elemDn, '');
+ dom.text(elemHn, '');
+ }
+ }
+
+ dom.cl.toggle(
+ '#basicTools',
+ 'canPick',
+ popupData.canElementPicker === true && isFiltering
+ );
+
+ let blocked, total;
+ if ( popupData.pageCounts !== undefined ) {
+ const counts = popupData.pageCounts;
+ blocked = counts.blocked.any;
+ total = blocked + counts.allowed.any;
+ } else {
+ blocked = 0;
+ total = 0;
+ }
+ let text;
+ if ( total === 0 ) {
+ text = formatNumber(0);
+ } else {
+ text = statsStr.replace('{{count}}', formatNumber(blocked))
+ .replace('{{percent}}', formatNumber(Math.floor(blocked * 100 / total)));
+ }
+ dom.text('[data-i18n^="popupBlockedOnThisPage"] + span', text);
+
+ blocked = popupData.globalBlockedRequestCount;
+ total = popupData.globalAllowedRequestCount + blocked;
+ if ( total === 0 ) {
+ text = formatNumber(0);
+ } else {
+ text = statsStr.replace('{{count}}', formatNumber(blocked))
+ .replace('{{percent}}', formatNumber(Math.floor(blocked * 100 / total)));
+ }
+ dom.text('[data-i18n^="popupBlockedSinceInstall"] + span', text);
+
+ // This will collate all domains, touched or not
+ renderPrivacyExposure();
+
+ // Extra tools
+ updateHnSwitches();
+
+ // Report popup count on badge
+ total = popupData.popupBlockedCount;
+ dom.text(
+ '#no-popups .fa-icon-badge',
+ total ? Math.min(total, 99).toLocaleString() : ''
+ );
+
+ // Report large media count on badge
+ total = popupData.largeMediaCount;
+ dom.text(
+ '#no-large-media .fa-icon-badge',
+ total ? Math.min(total, 99).toLocaleString() : ''
+ );
+
+ // Report remote font count on badge
+ total = popupData.remoteFontCount;
+ dom.text(
+ '#no-remote-fonts .fa-icon-badge',
+ total ? Math.min(total, 99).toLocaleString() : ''
+ );
+
+ // Unprocesseed request(s) warning
+ dom.cl.toggle(dom.root, 'warn', popupData.hasUnprocessedRequest === true);
+
+ dom.cl.toggle(dom.html, 'colorBlind', popupData.colorBlindFriendly === true);
+
+ setGlobalExpand(popupData.firewallPaneMinimized === false, true);
+
+ // Build dynamic filtering pane only if in use
+ if ( (computedSections() & sectionFirewallBit) !== 0 ) {
+ buildAllFirewallRows();
+ }
+
+ renderTooltips();
+};
+
+/******************************************************************************/
+
+dom.on('.dismiss', 'click', ( ) => {
+ messaging.send('popupPanel', {
+ what: 'dismissUnprocessedRequest',
+ tabId: popupData.tabId,
+ }).then(( ) => {
+ popupData.hasUnprocessedRequest = false;
+ dom.cl.remove(dom.root, 'warn');
+ });
+});
+
+/******************************************************************************/
+
+// https://github.com/gorhill/uBlock/issues/2889
+// Use tooltip for ARIA purpose.
+
+const renderTooltips = function(selector) {
+ for ( const [ key, details ] of tooltipTargetSelectors ) {
+ if ( selector !== undefined && key !== selector ) { continue; }
+ const elem = qs$(key);
+ if ( elem.hasAttribute('title') === false ) { continue; }
+ const text = i18n$(
+ details.i18n +
+ (qs$(details.state) === null ? '1' : '2')
+ );
+ dom.attr(elem, 'aria-label', text);
+ dom.attr(elem, 'title', text);
+ }
+};
+
+const tooltipTargetSelectors = new Map([
+ [
+ '#switch',
+ {
+ state: 'body.off',
+ i18n: 'popupPowerSwitchInfo',
+ }
+ ],
+ [
+ '#no-popups',
+ {
+ state: '#no-popups.on',
+ i18n: 'popupTipNoPopups'
+ }
+ ],
+ [
+ '#no-large-media',
+ {
+ state: '#no-large-media.on',
+ i18n: 'popupTipNoLargeMedia'
+ }
+ ],
+ [
+ '#no-cosmetic-filtering',
+ {
+ state: '#no-cosmetic-filtering.on',
+ i18n: 'popupTipNoCosmeticFiltering'
+ }
+ ],
+ [
+ '#no-remote-fonts',
+ {
+ state: '#no-remote-fonts.on',
+ i18n: 'popupTipNoRemoteFonts'
+ }
+ ],
+ [
+ '#no-scripting',
+ {
+ state: '#no-scripting.on',
+ i18n: 'popupTipNoScripting'
+ }
+ ],
+]);
+
+/******************************************************************************/
+
+// All rendering code which need to be executed only once.
+
+let renderOnce = function() {
+ renderOnce = function(){};
+
+ if ( popupData.fontSize !== popupFontSize ) {
+ popupFontSize = popupData.fontSize;
+ if ( popupFontSize !== 'unset' ) {
+ dom.body.style.setProperty('--font-size', popupFontSize);
+ vAPI.localStorage.setItem('popupFontSize', popupFontSize);
+ } else {
+ dom.body.style.removeProperty('--font-size');
+ vAPI.localStorage.removeItem('popupFontSize');
+ }
+ }
+
+ dom.text('#version', popupData.appVersion);
+
+ setSections(computedSections());
+
+ if ( popupData.uiPopupConfig !== undefined ) {
+ dom.attr(dom.body, 'data-ui', popupData.uiPopupConfig);
+ }
+
+ dom.cl.toggle(dom.body, 'no-tooltips', popupData.tooltipsDisabled === true);
+ if ( popupData.tooltipsDisabled === true ) {
+ dom.attr('[title]', 'title', null);
+ }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/22
+ if ( popupData.advancedUserEnabled !== true ) {
+ dom.attr('#firewall [title][data-src]', 'title', null);
+ }
+
+ // This must be done the firewall is populated
+ if ( popupData.popupPanelHeightMode === 1 ) {
+ dom.cl.add(dom.body, 'vMin');
+ }
+
+ // Prevent non-advanced user opting into advanced user mode from harming
+ // themselves by disabling by default features generally suitable to
+ // filter list maintainers and actual advanced users.
+ if ( popupData.godMode ) {
+ dom.cl.add(dom.body, 'godMode');
+ }
+};
+
+/******************************************************************************/
+
+const renderPopupLazy = (( ) => {
+ let mustRenderCosmeticFilteringBadge = true;
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/756
+ // Launch potentially expensive hidden elements-counting scriptlet on
+ // demand only.
+ {
+ const sw = qs$('#no-cosmetic-filtering');
+ const badge = qs$(sw, ':scope .fa-icon-badge');
+ dom.text(badge, '\u22EF');
+
+ const render = ( ) => {
+ if ( mustRenderCosmeticFilteringBadge === false ) { return; }
+ mustRenderCosmeticFilteringBadge = false;
+ if ( dom.cl.has(sw, 'hnSwitchBusy') ) { return; }
+ dom.cl.add(sw, 'hnSwitchBusy');
+ messaging.send('popupPanel', {
+ what: 'getHiddenElementCount',
+ tabId: popupData.tabId,
+ }).then(count => {
+ let text;
+ if ( (count || 0) === 0 ) {
+ text = '';
+ } else if ( count === -1 ) {
+ text = '?';
+ } else {
+ text = Math.min(count, 99).toLocaleString();
+ }
+ dom.text(badge, text);
+ dom.cl.remove(sw, 'hnSwitchBusy');
+ });
+ };
+
+ dom.on(sw, 'mouseenter', render, { passive: true });
+ }
+
+ return async function() {
+ const count = await messaging.send('popupPanel', {
+ what: 'getScriptCount',
+ tabId: popupData.tabId,
+ });
+ dom.text(
+ '#no-scripting .fa-icon-badge',
+ (count || 0) !== 0 ? Math.min(count, 99).toLocaleString() : ''
+ );
+ mustRenderCosmeticFilteringBadge = true;
+ };
+})();
+
+/******************************************************************************/
+
+const toggleNetFilteringSwitch = function(ev) {
+ if ( !popupData || !popupData.pageURL ) { return; }
+ messaging.send('popupPanel', {
+ what: 'toggleNetFiltering',
+ url: popupData.pageURL,
+ scope: ev.ctrlKey || ev.metaKey ? 'page' : '',
+ state: dom.cl.toggle(dom.body, 'off') === false,
+ tabId: popupData.tabId,
+ });
+ renderTooltips('#switch');
+ hashFromPopupData();
+};
+
+/******************************************************************************/
+
+const gotoZap = function() {
+ messaging.send('popupPanel', {
+ what: 'launchElementPicker',
+ tabId: popupData.tabId,
+ zap: true,
+ });
+
+ vAPI.closePopup();
+};
+
+/******************************************************************************/
+
+const gotoPick = function() {
+ messaging.send('popupPanel', {
+ what: 'launchElementPicker',
+ tabId: popupData.tabId,
+ });
+
+ vAPI.closePopup();
+};
+
+/******************************************************************************/
+
+const gotoReport = function() {
+ const popupPanel = {
+ blocked: popupData.pageCounts.blocked.any,
+ };
+ const reportedStates = [
+ { name: 'enabled', prop: 'netFilteringSwitch', expected: true },
+ { name: 'no-cosmetic-filtering', prop: 'noCosmeticFiltering', expected: false },
+ { name: 'no-large-media', prop: 'noLargeMedia', expected: false },
+ { name: 'no-popups', prop: 'noPopups', expected: false },
+ { name: 'no-remote-fonts', prop: 'noRemoteFonts', expected: false },
+ { name: 'no-scripting', prop: 'noScripting', expected: false },
+ { name: 'can-element-picker', prop: 'canElementPicker', expected: true },
+ ];
+ for ( const { name, prop, expected } of reportedStates ) {
+ if ( popupData[prop] === expected ) { continue; }
+ popupPanel[name] = !expected;
+ }
+ if ( hostnameToSortableTokenMap.size !== 0 ) {
+ const network = {};
+ const hostnames =
+ Array.from(hostnameToSortableTokenMap.keys()).sort(hostnameCompare);
+ for ( const hostname of hostnames ) {
+ const entry = popupData.hostnameDict[hostname];
+ const count = entry.counts.blocked.any;
+ if ( count === 0 ) { continue; }
+ const domain = entry.domain;
+ if ( network[domain] === undefined ) {
+ network[domain] = 0;
+ }
+ network[domain] += count;
+ }
+ if ( Object.keys(network).length !== 0 ) {
+ popupPanel.network = network;
+ }
+ }
+ messaging.send('popupPanel', {
+ what: 'launchReporter',
+ tabId: popupData.tabId,
+ pageURL: popupData.rawURL,
+ popupPanel,
+ });
+
+ vAPI.closePopup();
+};
+
+/******************************************************************************/
+
+const gotoURL = function(ev) {
+ if ( this.hasAttribute('href') === false ) { return; }
+
+ ev.preventDefault();
+
+ let url = dom.attr(ev.target, 'href');
+ if (
+ url === 'logger-ui.html#_' &&
+ typeof popupData.tabId === 'number'
+ ) {
+ url += '+' + popupData.tabId;
+ }
+
+ messaging.send('popupPanel', {
+ what: 'gotoURL',
+ details: {
+ url: url,
+ select: true,
+ index: -1,
+ shiftKey: ev.shiftKey
+ },
+ });
+
+ vAPI.closePopup();
+};
+
+/******************************************************************************/
+
+// The popup panel is made of sections. Visibility of sections can
+// be toggled on/off.
+
+const maxNumberOfSections = 6;
+const sectionFirewallBit = 0b10000;
+
+const computedSections = ( ) =>
+ popupData.popupPanelSections &
+ ~popupData.popupPanelDisabledSections |
+ popupData.popupPanelLockedSections;
+
+const sectionBitsFromAttribute = function() {
+ const attr = document.body.dataset.more;
+ if ( attr === '' ) { return 0; }
+ let bits = 0;
+ for ( const c of attr ) {
+ bits |= 1 << (c.charCodeAt(0) - 97);
+ }
+ return bits;
+};
+
+const sectionBitsToAttribute = function(bits) {
+ const attr = [];
+ for ( let i = 0; i < maxNumberOfSections; i++ ) {
+ const bit = 1 << i;
+ if ( (bits & bit) === 0 ) { continue; }
+ attr.push(String.fromCharCode(97 + i));
+ }
+ return attr.join('');
+};
+
+const setSections = function(bits) {
+ const value = sectionBitsToAttribute(bits);
+ const min = sectionBitsToAttribute(popupData.popupPanelLockedSections);
+ const max = sectionBitsToAttribute(
+ (1 << maxNumberOfSections) - 1 & ~popupData.popupPanelDisabledSections
+ );
+ document.body.dataset.more = value;
+ dom.cl.toggle('#lessButton', 'disabled', value === min);
+ dom.cl.toggle('#moreButton', 'disabled', value === max);
+};
+
+const toggleSections = function(more) {
+ const offbits = ~popupData.popupPanelDisabledSections;
+ const onbits = popupData.popupPanelLockedSections;
+ let currentBits = sectionBitsFromAttribute();
+ let newBits = currentBits;
+ for ( let i = 0; i < maxNumberOfSections; i++ ) {
+ const bit = 1 << (more ? i : maxNumberOfSections - i - 1);
+ if ( more ) {
+ newBits |= bit;
+ } else {
+ newBits &= ~bit;
+ }
+ newBits = newBits & offbits | onbits;
+ if ( newBits !== currentBits ) { break; }
+ }
+ if ( newBits === currentBits ) { return; }
+
+ setSections(newBits);
+
+ popupData.popupPanelSections = newBits;
+ messaging.send('popupPanel', {
+ what: 'userSettings',
+ name: 'popupPanelSections',
+ value: newBits,
+ });
+
+ // https://github.com/chrisaljoudi/uBlock/issues/996
+ // Remember the last state of the firewall pane. This allows to
+ // configure the popup size early next time it is opened, which means a
+ // less glitchy popup at open time.
+ vAPI.localStorage.setItem('popupPanelSections', newBits);
+
+ // Dynamic filtering pane may not have been built yet
+ if ( (newBits & sectionFirewallBit) !== 0 && dfPaneBuilt === false ) {
+ buildAllFirewallRows();
+ }
+};
+
+dom.on('#moreButton', 'click', ( ) => { toggleSections(true); });
+dom.on('#lessButton', 'click', ( ) => { toggleSections(false); });
+
+/******************************************************************************/
+
+const mouseenterCellHandler = function(ev) {
+ const target = ev.target;
+ if ( dom.cl.has(target, 'ownRule') ) { return; }
+ target.appendChild(dfHotspots);
+};
+
+const mouseleaveCellHandler = function() {
+ dfHotspots.remove();
+};
+
+/******************************************************************************/
+
+const setFirewallRule = async function(src, des, type, action, persist) {
+ // This can happen on pages where uBlock does not work
+ if (
+ typeof popupData.pageHostname !== 'string' ||
+ popupData.pageHostname === ''
+ ) {
+ return;
+ }
+
+ const response = await messaging.send('popupPanel', {
+ what: 'toggleFirewallRule',
+ tabId: popupData.tabId,
+ pageHostname: popupData.pageHostname,
+ srcHostname: src,
+ desHostname: des,
+ requestType: type,
+ action: action,
+ persist: persist,
+ });
+
+ // Remove action widget if an own rule has been set, this allows to click
+ // again immediately to remove the rule.
+ if ( action !== 0 ) {
+ dfHotspots.remove();
+ }
+
+ cachePopupData(response);
+ updateAllFirewallCells(true, false);
+ hashFromPopupData();
+};
+
+/******************************************************************************/
+
+const unsetFirewallRuleHandler = function(ev) {
+ const cell = ev.target;
+ const row = cell.closest('[data-des]');
+ setFirewallRule(
+ dom.attr(cell, 'data-src') === '/' ? '*' : popupData.pageHostname,
+ dom.attr(row, 'data-des'),
+ dom.attr(row, 'data-type'),
+ 0,
+ ev.ctrlKey || ev.metaKey
+ );
+ cell.appendChild(dfHotspots);
+};
+
+/******************************************************************************/
+
+const setFirewallRuleHandler = function(ev) {
+ const hotspot = ev.target;
+ const cell = hotspot.closest('[data-src]');
+ if ( cell === null ) { return; }
+ const row = cell.closest('[data-des]');
+ let action = 0;
+ if ( hotspot.id === 'dynaAllow' ) {
+ action = 2;
+ } else if ( hotspot.id === 'dynaNoop' ) {
+ action = 3;
+ } else {
+ action = 1;
+ }
+ setFirewallRule(
+ dom.attr(cell, 'data-src') === '/' ? '*' : popupData.pageHostname,
+ dom.attr(row, 'data-des'),
+ dom.attr(row, 'data-type'),
+ action,
+ ev.ctrlKey || ev.metaKey
+ );
+ dfHotspots.remove();
+};
+
+/******************************************************************************/
+
+const reloadTab = function(bypassCache = false) {
+ // Preemptively clear the unprocessed-requests status since we know for sure
+ // the page is being reloaded in this code path.
+ if ( popupData.hasUnprocessedRequest === true ) {
+ messaging.send('popupPanel', {
+ what: 'dismissUnprocessedRequest',
+ tabId: popupData.tabId,
+ }).then(( ) => {
+ popupData.hasUnprocessedRequest = false;
+ dom.cl.remove(dom.root, 'warn');
+ });
+ }
+
+ messaging.send('popupPanel', {
+ what: 'reloadTab',
+ tabId: popupData.tabId,
+ url: popupData.rawURL,
+ select: vAPI.webextFlavor.soup.has('mobile'),
+ bypassCache,
+ });
+
+ // Polling will take care of refreshing the popup content
+ // https://github.com/chrisaljoudi/uBlock/issues/748
+ // User forces a reload, assume the popup has to be updated regardless
+ // if there were changes or not.
+ popupData.contentLastModified = -1;
+
+ // Reset popup state hash to current state.
+ hashFromPopupData(true);
+};
+
+dom.on('#refresh', 'click', ev => {
+ reloadTab(ev.ctrlKey || ev.metaKey || ev.shiftKey);
+});
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/672
+dom.on(document, 'keydown', ev => {
+ if ( ev.isComposing ) { return; }
+ let bypassCache = false;
+ switch ( ev.key ) {
+ case 'F5':
+ bypassCache = ev.ctrlKey || ev.metaKey || ev.shiftKey;
+ break;
+ case 'r':
+ if ( (ev.ctrlKey || ev.metaKey) !== true ) { return; }
+ break;
+ case 'R':
+ if ( (ev.ctrlKey || ev.metaKey) !== true ) { return; }
+ bypassCache = true;
+ break;
+ default:
+ return;
+ }
+ reloadTab(bypassCache);
+ ev.preventDefault();
+ ev.stopPropagation();
+}, { capture: true });
+
+/******************************************************************************/
+
+const expandExceptions = new Set();
+
+vAPI.localStorage.getItemAsync('popupExpandExceptions').then(exceptions => {
+ try {
+ if ( Array.isArray(exceptions) === false ) { return; }
+ for ( const exception of exceptions ) {
+ expandExceptions.add(exception);
+ }
+ }
+ catch(ex) {
+ }
+});
+
+const saveExpandExceptions = function() {
+ vAPI.localStorage.setItem(
+ 'popupExpandExceptions',
+ Array.from(expandExceptions)
+ );
+};
+
+const setGlobalExpand = function(state, internal = false) {
+ dom.cl.remove('.expandException', 'expandException');
+ if ( state ) {
+ dom.cl.add('#firewall', 'expanded');
+ } else {
+ dom.cl.remove('#firewall', 'expanded');
+ }
+ if ( internal ) { return; }
+ popupData.firewallPaneMinimized = !state;
+ expandExceptions.clear();
+ saveExpandExceptions();
+ messaging.send('popupPanel', {
+ what: 'userSettings',
+ name: 'firewallPaneMinimized',
+ value: popupData.firewallPaneMinimized,
+ });
+};
+
+const setSpecificExpand = function(domain, state, internal = false) {
+ const elems = qsa$(`[data-des="${domain}"],[data-des$=".${domain}"]`);
+ if ( state ) {
+ dom.cl.add(elems, 'expandException');
+ } else {
+ dom.cl.remove(elems, 'expandException');
+ }
+ if ( internal ) { return; }
+ if ( state ) {
+ expandExceptions.add(domain);
+ } else {
+ expandExceptions.delete(domain);
+ }
+ saveExpandExceptions();
+};
+
+dom.on('[data-i18n="popupAnyRulePrompt"]', 'click', ev => {
+ // Special display mode: in its own tab/window, with no vertical restraint.
+ // Useful to take snapshots of the whole list of domains -- example:
+ // https://github.com/gorhill/uBlock/issues/736#issuecomment-178879944
+ if ( ev.shiftKey && ev.ctrlKey ) {
+ messaging.send('popupPanel', {
+ what: 'gotoURL',
+ details: {
+ url: `popup-fenix.html?tabId=${popupData.tabId}&intab=1`,
+ select: true,
+ index: -1,
+ },
+ });
+ vAPI.closePopup();
+ return;
+ }
+
+ setGlobalExpand(dom.cl.has('#firewall', 'expanded') === false);
+});
+
+dom.on('#firewall', 'click', '.isDomain[data-type="*"] > span:first-of-type', ev => {
+ const div = ev.target.closest('[data-des]');
+ if ( div === null ) { return; }
+ setSpecificExpand(
+ dom.attr(div, 'data-des'),
+ dom.cl.has(div, 'expandException') === false
+ );
+});
+
+/******************************************************************************/
+
+const saveFirewallRules = function() {
+ messaging.send('popupPanel', {
+ what: 'saveFirewallRules',
+ srcHostname: popupData.pageHostname,
+ desHostnames: popupData.hostnameDict,
+ });
+ dom.cl.remove(dom.body, 'needSave');
+};
+
+/******************************************************************************/
+
+const revertFirewallRules = async function() {
+ dom.cl.remove(dom.body, 'needSave');
+ const response = await messaging.send('popupPanel', {
+ what: 'revertFirewallRules',
+ srcHostname: popupData.pageHostname,
+ desHostnames: popupData.hostnameDict,
+ tabId: popupData.tabId,
+ });
+ cachePopupData(response);
+ updateAllFirewallCells(true, false);
+ updateHnSwitches();
+ hashFromPopupData();
+};
+
+/******************************************************************************/
+
+const toggleHostnameSwitch = async function(ev) {
+ const target = ev.currentTarget;
+ const switchName = dom.attr(target, 'id');
+ if ( !switchName ) { return; }
+ // For touch displays, process click only if the switch is not "busy".
+ if (
+ vAPI.webextFlavor.soup.has('mobile') &&
+ dom.cl.has(target, 'hnSwitchBusy')
+ ) {
+ return;
+ }
+ dom.cl.toggle(target, 'on');
+ renderTooltips(`#${switchName}`);
+
+ const response = await messaging.send('popupPanel', {
+ what: 'toggleHostnameSwitch',
+ name: switchName,
+ hostname: popupData.pageHostname,
+ state: dom.cl.has(target, 'on'),
+ tabId: popupData.tabId,
+ persist: ev.ctrlKey || ev.metaKey,
+ });
+
+ cachePopupData(response);
+ hashFromPopupData();
+
+ dom.cl.toggle(dom.body, 'needSave', popupData.matrixIsDirty === true);
+};
+
+/*******************************************************************************
+
+ Double tap ctrl key: toggle god mode
+
+*/
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/2145
+// Ignore events from auto-repeating keys
+
+{
+ let eventCount = 0;
+ let eventTime = 0;
+
+ dom.on(document, 'keydown', ev => {
+ if ( ev.key !== 'Control' ) {
+ eventCount = 0;
+ return;
+ }
+ if ( ev.repeat ) { return; }
+ const now = Date.now();
+ if ( (now - eventTime) >= 500 ) {
+ eventCount = 0;
+ }
+ eventCount += 1;
+ eventTime = now;
+ if ( eventCount < 2 ) { return; }
+ eventCount = 0;
+ dom.cl.toggle(dom.body, 'godMode');
+ });
+}
+
+
+/******************************************************************************/
+
+// Poll for changes.
+//
+// I couldn't find a better way to be notified of changes which can affect
+// popup content, as the messaging API doesn't support firing events accurately
+// from the main extension process to a specific auxiliary extension process:
+//
+// - broadcasting() is not an option given there could be a lot of tabs opened,
+// and maybe even many frames within these tabs, i.e. unacceptable overhead
+// regardless of whether the popup is opened or not.
+//
+// - Modifying the messaging API is not an option, as this would require
+// revisiting all platform-specific code to support targeted broadcasting,
+// which who knows could be not so trivial for some platforms.
+//
+// A well done polling is a better anyways IMO, I prefer that data is pulled
+// on demand rather than forcing the main process to assume a client may need
+// it and thus having to push it all the time unconditionally.
+
+const pollForContentChange = (( ) => {
+ const pollCallback = async function() {
+ const response = await messaging.send('popupPanel', {
+ what: 'hasPopupContentChanged',
+ tabId: popupData.tabId,
+ contentLastModified: popupData.contentLastModified,
+ });
+ if ( response ) {
+ await getPopupData(popupData.tabId);
+ return;
+ }
+ poll();
+ };
+
+ const pollTimer = vAPI.defer.create(pollCallback);
+
+ const poll = function() {
+ pollTimer.on(1500);
+ };
+
+ return poll;
+})();
+
+/******************************************************************************/
+
+const getPopupData = async function(tabId, first = false) {
+ const response = await messaging.send('popupPanel', {
+ what: 'getPopupData',
+ tabId,
+ });
+
+ cachePopupData(response);
+ renderOnce();
+ renderPopup();
+ renderPopupLazy(); // low priority rendering
+ hashFromPopupData(first);
+ pollForContentChange();
+};
+
+/******************************************************************************/
+
+// Popup DOM is assumed to be loaded at this point -- because this script
+// is loaded after everything else.
+
+{
+ // Extract the tab id of the page for this popup. If there's no tab id
+ // specified in the query string, it will default to current tab.
+ const selfURL = new URL(self.location.href);
+ const tabId = parseInt(selfURL.searchParams.get('tabId'), 10) || null;
+
+ const nextFrames = async n => {
+ for ( let i = 0; i < n; i++ ) {
+ await new Promise(resolve => {
+ self.requestAnimationFrame(( ) => { resolve(); });
+ });
+ }
+ };
+
+ // The purpose of the following code is to reset to a vertical layout
+ // should the viewport not be enough wide to accommodate the horizontal
+ // layout.
+ // To avoid querying a spurious viewport width -- it happens sometimes,
+ // somehow -- we delay layout-changing operations to the next paint
+ // frames.
+ // Force a layout recalculation by querying the body width. To be
+ // honest, I have no clue if this makes a difference in the end.
+ // https://gist.github.com/paulirish/5d52fb081b3570c81e3a
+ // Use a tolerance proportional to the sum of the width of the panes
+ // when testing against viewport width.
+ const checkViewport = async function() {
+ if (
+ dom.cl.has(dom.root, 'mobile') ||
+ selfURL.searchParams.get('portrait')
+ ) {
+ dom.cl.add(dom.root, 'portrait');
+ dom.cl.remove(dom.root, 'desktop');
+ } else if ( dom.cl.has(dom.root, 'desktop') ) {
+ await nextFrames(8);
+ const main = qs$('#main');
+ const firewall = qs$('#firewall');
+ const minWidth = (main.offsetWidth + firewall.offsetWidth) / 1.1;
+ if (
+ selfURL.searchParams.get('portrait') ||
+ window.innerWidth < minWidth
+ ) {
+ dom.cl.add(dom.root, 'portrait');
+ }
+ }
+ if ( dom.cl.has(dom.root, 'portrait') ) {
+ const panes = qs$('#panes');
+ const sticky = qs$('#sticky');
+ const stickyParent = sticky.parentElement;
+ if ( stickyParent !== panes ) {
+ panes.prepend(sticky);
+ }
+ }
+ if ( selfURL.searchParams.get('intab') !== null ) {
+ dom.cl.add(dom.root, 'intab');
+ }
+ await nextFrames(1);
+ dom.cl.remove(dom.body, 'loading');
+ };
+
+ getPopupData(tabId, true).then(( ) => {
+ if ( document.readyState !== 'complete' ) {
+ dom.on(self, 'load', ( ) => { checkViewport(); }, { once: true });
+ } else {
+ checkViewport();
+ }
+ });
+}
+
+/******************************************************************************/
+
+dom.on('#switch', 'click', toggleNetFilteringSwitch);
+dom.on('#gotoZap', 'click', gotoZap);
+dom.on('#gotoPick', 'click', gotoPick);
+dom.on('#gotoReport', 'click', gotoReport);
+dom.on('.hnSwitch', 'click', ev => { toggleHostnameSwitch(ev); });
+dom.on('#saveRules', 'click', saveFirewallRules);
+dom.on('#revertRules', 'click', ( ) => { revertFirewallRules(); });
+dom.on('a[href]', 'click', gotoURL);
+
+/******************************************************************************/
diff --git a/src/js/redirect-engine.js b/src/js/redirect-engine.js
new file mode 100644
index 0000000..2f58066
--- /dev/null
+++ b/src/js/redirect-engine.js
@@ -0,0 +1,494 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import redirectableResources from './redirect-resources.js';
+
+import {
+ LineIterator,
+ orphanizeString,
+} from './text-utils.js';
+
+/******************************************************************************/
+
+const extToMimeMap = new Map([
+ [ 'css', 'text/css' ],
+ [ 'fn', 'fn/javascript' ], // invented mime type for internal use
+ [ 'gif', 'image/gif' ],
+ [ 'html', 'text/html' ],
+ [ 'js', 'text/javascript' ],
+ [ 'json', 'application/json' ],
+ [ 'mp3', 'audio/mp3' ],
+ [ 'mp4', 'video/mp4' ],
+ [ 'png', 'image/png' ],
+ [ 'txt', 'text/plain' ],
+ [ 'xml', 'text/xml' ],
+]);
+
+const typeToMimeMap = new Map([
+ [ 'main_frame', 'text/html' ],
+ [ 'other', 'text/plain' ],
+ [ 'script', 'text/javascript' ],
+ [ 'stylesheet', 'text/css' ],
+ [ 'sub_frame', 'text/html' ],
+ [ 'xmlhttprequest', 'text/plain' ],
+]);
+
+const validMimes = new Set(extToMimeMap.values());
+
+const mimeFromName = name => {
+ const match = /\.([^.]+)$/.exec(name);
+ if ( match === null ) { return ''; }
+ return extToMimeMap.get(match[1]);
+};
+
+const removeTopCommentBlock = text => {
+ return text.replace(/^\/\*[\S\s]+?\n\*\/\s*/, '');
+};
+
+// vAPI.warSecret is optional, it could be absent in some environments,
+// i.e. nodejs for example. Probably the best approach is to have the
+// "web_accessible_resources secret" added outside by the client of this
+// module, but for now I just want to remove an obstacle to modularization.
+const warSecret = typeof vAPI === 'object' && vAPI !== null
+ ? vAPI.warSecret.short
+ : ( ) => '';
+
+const RESOURCES_SELFIE_VERSION = 7;
+const RESOURCES_SELFIE_NAME = 'compiled/redirectEngine/resources';
+
+/******************************************************************************/
+/******************************************************************************/
+
+class RedirectEntry {
+ constructor() {
+ this.mime = '';
+ this.data = '';
+ this.warURL = undefined;
+ this.params = undefined;
+ this.requiresTrust = false;
+ this.world = 'MAIN';
+ this.dependencies = [];
+ }
+
+ // Prevent redirection to web accessible resources when the request is
+ // of type 'xmlhttprequest', because XMLHttpRequest.responseURL would
+ // cause leakage of extension id. See:
+ // - https://stackoverflow.com/a/8056313
+ // - https://bugzilla.mozilla.org/show_bug.cgi?id=998076
+ // https://www.reddit.com/r/uBlockOrigin/comments/cpxm1v/
+ // User-supplied resources may already be base64 encoded.
+
+ toURL(fctxt, asDataURI = false) {
+ if (
+ this.warURL !== undefined &&
+ asDataURI !== true &&
+ fctxt instanceof Object &&
+ fctxt.type !== 'xmlhttprequest'
+ ) {
+ const params = [];
+ const secret = warSecret();
+ if ( secret !== '' ) { params.push(`secret=${secret}`); }
+ if ( this.params !== undefined ) {
+ for ( const name of this.params ) {
+ const value = fctxt[name];
+ if ( value === undefined ) { continue; }
+ params.push(`${name}=${encodeURIComponent(value)}`);
+ }
+ }
+ let url = `${this.warURL}`;
+ if ( params.length !== 0 ) {
+ url += `?${params.join('&')}`;
+ }
+ return url;
+ }
+ if ( this.data === undefined ) { return; }
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/701
+ if ( this.data === '' ) {
+ const mime = typeToMimeMap.get(fctxt.type);
+ if ( mime === '' ) { return; }
+ return `data:${mime},`;
+ }
+ if ( this.data.startsWith('data:') === false ) {
+ if ( this.mime.indexOf(';') === -1 ) {
+ this.data = `data:${this.mime};base64,${btoa(this.data)}`;
+ } else {
+ this.data = `data:${this.mime},${this.data}`;
+ }
+ }
+ return this.data;
+ }
+
+ toContent() {
+ if ( this.data.startsWith('data:') ) {
+ const pos = this.data.indexOf(',');
+ const base64 = this.data.endsWith(';base64', pos);
+ this.data = this.data.slice(pos + 1);
+ if ( base64 ) {
+ this.data = atob(this.data);
+ }
+ }
+ return this.data;
+ }
+
+ static fromDetails(details) {
+ const r = new RedirectEntry();
+ Object.assign(r, details);
+ return r;
+ }
+}
+
+/******************************************************************************/
+/******************************************************************************/
+
+class RedirectEngine {
+ constructor() {
+ this.aliases = new Map();
+ this.resources = new Map();
+ this.reset();
+ this.modifyTime = Date.now();
+ }
+
+ reset() {
+ }
+
+ freeze() {
+ }
+
+ tokenToURL(
+ fctxt,
+ token,
+ asDataURI = false
+ ) {
+ const entry = this.resources.get(this.aliases.get(token) || token);
+ if ( entry === undefined ) { return; }
+ return entry.toURL(fctxt, asDataURI);
+ }
+
+ tokenToDNR(token) {
+ const entry = this.resources.get(this.aliases.get(token) || token);
+ if ( entry === undefined ) { return; }
+ if ( entry.warURL === undefined ) { return; }
+ return entry.warURL;
+ }
+
+ hasToken(token) {
+ if ( token === 'none' ) { return true; }
+ const asDataURI = token.charCodeAt(0) === 0x25 /* '%' */;
+ if ( asDataURI ) {
+ token = token.slice(1);
+ }
+ return this.resources.get(this.aliases.get(token) || token) !== undefined;
+ }
+
+ tokenRequiresTrust(token) {
+ const entry = this.resources.get(this.aliases.get(token) || token);
+ return entry && entry.requiresTrust === true || false;
+ }
+
+ async toSelfie() {
+ }
+
+ async fromSelfie() {
+ return true;
+ }
+
+ contentFromName(name, mime = '') {
+ const entry = this.resources.get(this.aliases.get(name) || name);
+ if ( entry === undefined ) { return; }
+ if ( entry.mime.startsWith(mime) === false ) { return; }
+ return {
+ js: entry.toContent(),
+ world: entry.world,
+ dependencies: entry.dependencies.slice(),
+ };
+ }
+
+ // https://github.com/uBlockOrigin/uAssets/commit/deefe8755511
+ // Consider 'none' a reserved keyword, to be used to disable redirection.
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1419
+ // Append newlines to raw text to ensure processing of trailing resource.
+
+ resourcesFromString(text) {
+ const lineIter = new LineIterator(
+ removeTopCommentBlock(text) + '\n\n'
+ );
+ const reNonEmptyLine = /\S/;
+ let fields, encoded, details;
+
+ while ( lineIter.eot() === false ) {
+ const line = lineIter.next();
+ if ( line.startsWith('#') ) { continue; }
+ if ( line.startsWith('// ') ) { continue; }
+
+ if ( fields === undefined ) {
+ if ( line === '' ) { continue; }
+ // Modern parser
+ if ( line.startsWith('/// ') ) {
+ const name = line.slice(4).trim();
+ fields = [ name, mimeFromName(name) ];
+ continue;
+ }
+ // Legacy parser
+ const head = line.trim().split(/\s+/);
+ if ( head.length !== 2 ) { continue; }
+ if ( head[0] === 'none' ) { continue; }
+ let pos = head[1].indexOf(';');
+ if ( pos === -1 ) { pos = head[1].length; }
+ if ( validMimes.has(head[1].slice(0, pos)) === false ) {
+ continue;
+ }
+ encoded = head[1].indexOf(';') !== -1;
+ fields = head;
+ continue;
+ }
+
+ if ( line.startsWith('/// ') ) {
+ if ( details === undefined ) {
+ details = [];
+ }
+ const [ prop, value ] = line.slice(4).trim().split(/\s+/);
+ if ( value !== undefined ) {
+ details.push({ prop, value });
+ }
+ continue;
+ }
+
+ if ( reNonEmptyLine.test(line) ) {
+ fields.push(encoded ? line.trim() : line);
+ continue;
+ }
+
+ // No more data, add the resource.
+ const name = this.aliases.get(fields[0]) || fields[0];
+ const mime = fields[1];
+ const data = orphanizeString(
+ fields.slice(2).join(encoded ? '' : '\n')
+ );
+ this.resources.set(name, RedirectEntry.fromDetails({ mime, data }));
+ if ( Array.isArray(details) ) {
+ const resource = this.resources.get(name);
+ for ( const { prop, value } of details ) {
+ switch ( prop ) {
+ case 'alias':
+ this.aliases.set(value, name);
+ break;
+ case 'world':
+ if ( /^isolated$/i.test(value) === false ) { break; }
+ resource.world = 'ISOLATED';
+ break;
+ case 'dependency':
+ if ( this.resources.has(value) === false ) { break; }
+ resource.dependencies.push(value);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ fields = undefined;
+ details = undefined;
+ }
+
+ this.modifyTime = Date.now();
+ }
+
+ loadBuiltinResources(fetcher) {
+ this.resources = new Map();
+ this.aliases = new Map();
+
+ const fetches = [
+ import('/assets/resources/scriptlets.js').then(module => {
+ for ( const scriptlet of module.builtinScriptlets ) {
+ const details = {};
+ details.mime = mimeFromName(scriptlet.name);
+ details.data = scriptlet.fn.toString();
+ for ( const [ k, v ] of Object.entries(scriptlet) ) {
+ if ( k === 'fn' ) { continue; }
+ details[k] = v;
+ }
+ const entry = RedirectEntry.fromDetails(details);
+ this.resources.set(details.name, entry);
+ if ( Array.isArray(details.aliases) === false ) { continue; }
+ for ( const alias of details.aliases ) {
+ this.aliases.set(alias, details.name);
+ }
+ }
+ this.modifyTime = Date.now();
+ }),
+ ];
+
+ const store = (name, data = undefined) => {
+ const details = redirectableResources.get(name);
+ const entry = RedirectEntry.fromDetails({
+ mime: mimeFromName(name),
+ data,
+ warURL: `/web_accessible_resources/${name}`,
+ params: details.params,
+ });
+ this.resources.set(name, entry);
+ if ( details.alias === undefined ) { return; }
+ if ( Array.isArray(details.alias) ) {
+ for ( const alias of details.alias ) {
+ this.aliases.set(alias, name);
+ }
+ } else {
+ this.aliases.set(details.alias, name);
+ }
+ };
+
+ const processBlob = (name, blob) => {
+ return new Promise(resolve => {
+ const reader = new FileReader();
+ reader.onload = ( ) => {
+ store(name, reader.result);
+ resolve();
+ };
+ reader.onabort = reader.onerror = ( ) => {
+ resolve();
+ };
+ reader.readAsDataURL(blob);
+ });
+ };
+
+ const processText = (name, text) => {
+ store(name, removeTopCommentBlock(text));
+ };
+
+ const process = result => {
+ const match = /^\/web_accessible_resources\/([^?]+)/.exec(result.url);
+ if ( match === null ) { return; }
+ const name = match[1];
+ return result.content instanceof Blob
+ ? processBlob(name, result.content)
+ : processText(name, result.content);
+ };
+
+ for ( const [ name, details ] of redirectableResources ) {
+ if ( typeof details.data !== 'string' ) {
+ store(name);
+ continue;
+ }
+ fetches.push(
+ fetcher(`/web_accessible_resources/${name}`, {
+ responseType: details.data
+ }).then(
+ result => process(result)
+ )
+ );
+ }
+
+ return Promise.all(fetches);
+ }
+
+ getResourceDetails() {
+ const out = new Map([
+ [ 'none', { canInject: false, canRedirect: true, aliasOf: '' } ],
+ ]);
+ for ( const [ name, entry ] of this.resources ) {
+ out.set(name, {
+ canInject: typeof entry.data === 'string',
+ canRedirect: entry.warURL !== undefined,
+ aliasOf: '',
+ extensionPath: entry.warURL,
+ });
+ }
+ for ( const [ alias, name ] of this.aliases ) {
+ const original = out.get(name);
+ if ( original === undefined ) { continue; }
+ const aliased = Object.assign({}, original);
+ aliased.aliasOf = name;
+ out.set(alias, aliased);
+ }
+ return Array.from(out).sort((a, b) => {
+ return a[0].localeCompare(b[0]);
+ });
+ }
+
+ getTrustedScriptletTokens() {
+ const out = [];
+ const isTrustedScriptlet = entry => {
+ if ( entry.requiresTrust !== true ) { return false; }
+ if ( entry.warURL !== undefined ) { return false; }
+ if ( typeof entry.data !== 'string' ) { return false; }
+ if ( entry.name.endsWith('.js') === false ) { return false; }
+ return true;
+ };
+ for ( const [ name, entry ] of this.resources ) {
+ if ( isTrustedScriptlet(entry) === false ) { continue; }
+ out.push(name.slice(0, -3));
+ }
+ for ( const [ alias, name ] of this.aliases ) {
+ if ( out.includes(name.slice(0, -3)) === false ) { continue; }
+ out.push(alias.slice(0, -3));
+ }
+ return out;
+ }
+
+ selfieFromResources(storage) {
+ storage.put(
+ RESOURCES_SELFIE_NAME,
+ JSON.stringify({
+ version: RESOURCES_SELFIE_VERSION,
+ aliases: Array.from(this.aliases),
+ resources: Array.from(this.resources),
+ })
+ );
+ }
+
+ async resourcesFromSelfie(storage) {
+ const result = await storage.get(RESOURCES_SELFIE_NAME);
+ let selfie;
+ try {
+ selfie = JSON.parse(result.content);
+ } catch(ex) {
+ }
+ if (
+ selfie instanceof Object === false ||
+ selfie.version !== RESOURCES_SELFIE_VERSION ||
+ Array.isArray(selfie.resources) === false
+ ) {
+ return false;
+ }
+ this.aliases = new Map(selfie.aliases);
+ this.resources = new Map();
+ for ( const [ token, entry ] of selfie.resources ) {
+ this.resources.set(token, RedirectEntry.fromDetails(entry));
+ }
+ return true;
+ }
+
+ invalidateResourcesSelfie(storage) {
+ storage.remove(RESOURCES_SELFIE_NAME);
+ }
+}
+
+/******************************************************************************/
+
+const redirectEngine = new RedirectEngine();
+
+export { redirectEngine };
+
+/******************************************************************************/
diff --git a/src/js/redirect-resources.js b/src/js/redirect-resources.js
new file mode 100644
index 0000000..b8577e3
--- /dev/null
+++ b/src/js/redirect-resources.js
@@ -0,0 +1,182 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+// The resources referenced below are found in ./web_accessible_resources/
+//
+// The content of the resources which declare a `data` property will be loaded
+// in memory, and converted to a suitable internal format depending on the
+// type of the loaded data. The `data` property allows for manual injection
+// through `+js(...)`, or for redirection to a data: URI when a redirection
+// to a web accessible resource is not desirable.
+
+export default new Map([
+ [ '1x1.gif', {
+ alias: '1x1-transparent.gif',
+ data: 'blob',
+ } ],
+ [ '2x2.png', {
+ alias: '2x2-transparent.png',
+ data: 'blob',
+ } ],
+ [ '3x2.png', {
+ alias: '3x2-transparent.png',
+ data: 'blob',
+ } ],
+ [ '32x32.png', {
+ alias: '32x32-transparent.png',
+ data: 'blob',
+ } ],
+ [ 'amazon_ads.js', {
+ alias: 'amazon-adsystem.com/aax2/amzn_ads.js',
+ data: 'text',
+ } ],
+ [ 'amazon_apstag.js', {
+ } ],
+ [ 'ampproject_v0.js', {
+ alias: 'ampproject.org/v0.js',
+ } ],
+ [ 'chartbeat.js', {
+ alias: 'static.chartbeat.com/chartbeat.js',
+ } ],
+ [ 'click2load.html', {
+ params: [ 'aliasURL', 'url' ],
+ } ],
+ [ 'doubleclick_instream_ad_status.js', {
+ alias: 'doubleclick.net/instream/ad_status.js',
+ data: 'text',
+ } ],
+ [ 'empty', {
+ data: 'text', // Important!
+ } ],
+ [ 'fingerprint2.js', {
+ data: 'text',
+ } ],
+ [ 'fingerprint3.js', {
+ data: 'text',
+ } ],
+ [ 'google-analytics_analytics.js', {
+ alias: [
+ 'google-analytics.com/analytics.js',
+ 'googletagmanager_gtm.js',
+ 'googletagmanager.com/gtm.js'
+ ],
+ data: 'text',
+ } ],
+ [ 'google-analytics_cx_api.js', {
+ alias: 'google-analytics.com/cx/api.js',
+ } ],
+ [ 'google-analytics_ga.js', {
+ alias: 'google-analytics.com/ga.js',
+ data: 'text',
+ } ],
+ [ 'google-analytics_inpage_linkid.js', {
+ alias: 'google-analytics.com/inpage_linkid.js',
+ } ],
+ [ 'google-ima.js', {
+ alias: 'google-ima3', /* adguard compatibility */
+ } ],
+ [ 'googlesyndication_adsbygoogle.js', {
+ alias: [
+ 'googlesyndication.com/adsbygoogle.js',
+ 'googlesyndication-adsbygoogle', /* adguard compatibility */
+ ],
+ data: 'text',
+ } ],
+ [ 'googletagservices_gpt.js', {
+ alias: [
+ 'googletagservices.com/gpt.js',
+ 'googletagservices-gpt', /* adguard compatibility */
+ ],
+ data: 'text',
+ } ],
+ [ 'hd-main.js', {
+ } ],
+ [ 'nobab.js', {
+ alias: [ 'bab-defuser.js', 'prevent-bab.js' ],
+ data: 'text',
+ } ],
+ [ 'nobab2.js', {
+ data: 'text',
+ } ],
+ [ 'noeval.js', {
+ data: 'text',
+ } ],
+ [ 'noeval-silent.js', {
+ alias: 'silent-noeval.js',
+ data: 'text',
+ } ],
+ [ 'nofab.js', {
+ alias: 'fuckadblock.js-3.2.0',
+ data: 'text',
+ } ],
+ [ 'noop-0.1s.mp3', {
+ alias: [ 'noopmp3-0.1s', 'abp-resource:blank-mp3' ],
+ data: 'blob',
+ } ],
+ [ 'noop-0.5s.mp3', {
+ } ],
+ [ 'noop-1s.mp4', {
+ alias: [ 'noopmp4-1s', 'abp-resource:blank-mp4' ],
+ data: 'blob',
+ } ],
+ [ 'noop.css', {
+ data: 'text',
+ } ],
+ [ 'noop.html', {
+ alias: 'noopframe',
+ } ],
+ [ 'noop.js', {
+ alias: [ 'noopjs', 'abp-resource:blank-js' ],
+ data: 'text',
+ } ],
+ [ 'noop.json', {
+ alias: [ 'noopjson' ],
+ data: 'text',
+ } ],
+ [ 'noop.txt', {
+ alias: 'nooptext',
+ data: 'text',
+ } ],
+ [ 'noop-vmap1.0.xml', {
+ alias: 'noopvmap-1.0',
+ data: 'text',
+ } ],
+ [ 'outbrain-widget.js', {
+ alias: 'widgets.outbrain.com/outbrain.js',
+ } ],
+ [ 'popads.js', {
+ alias: [ 'popads.net.js', 'prevent-popads-net.js' ],
+ data: 'text',
+ } ],
+ [ 'popads-dummy.js', {
+ data: 'text',
+ } ],
+ [ 'prebid-ads.js', {
+ data: 'text',
+ } ],
+ [ 'scorecardresearch_beacon.js', {
+ alias: 'scorecardresearch.com/beacon.js',
+ } ],
+]);
diff --git a/src/js/reverselookup-worker.js b/src/js/reverselookup-worker.js
new file mode 100644
index 0000000..37b8b65
--- /dev/null
+++ b/src/js/reverselookup-worker.js
@@ -0,0 +1,287 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+let listEntries = Object.create(null);
+
+/******************************************************************************/
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/2092
+// Order of ids matters
+
+const extractBlocks = function(content, ...ids) {
+ const out = [];
+ for ( const id of ids ) {
+ const pattern = `#block-start-${id}\n`;
+ let beg = content.indexOf(pattern);
+ if ( beg === -1 ) { continue; }
+ beg += pattern.length;
+ const end = content.indexOf(`#block-end-${id}`, beg);
+ out.push(content.slice(beg, end));
+ }
+ return out.join('\n');
+};
+
+/******************************************************************************/
+
+// https://github.com/MajkiIT/polish-ads-filter/issues/14768#issuecomment-536006312
+// Avoid reporting badfilter-ed filters.
+
+const fromNetFilter = function(details) {
+ const lists = [];
+ const compiledFilter = details.compiledFilter;
+
+ for ( const assetKey in listEntries ) {
+ const entry = listEntries[assetKey];
+ if ( entry === undefined ) { continue; }
+ if ( entry.networkContent === undefined ) {
+ entry.networkContent = extractBlocks(entry.content, 'NETWORK_FILTERS:GOOD');
+ }
+ const content = entry.networkContent;
+ let pos = 0;
+ for (;;) {
+ pos = content.indexOf(compiledFilter, pos);
+ if ( pos === -1 ) { break; }
+ // We need an exact match.
+ // https://github.com/gorhill/uBlock/issues/1392
+ // https://github.com/gorhill/uBlock/issues/835
+ const notFound = pos !== 0 && content.charCodeAt(pos - 1) !== 0x0A;
+ pos += compiledFilter.length;
+ if (
+ notFound ||
+ pos !== content.length && content.charCodeAt(pos) !== 0x0A
+ ) {
+ continue;
+ }
+ lists.push({
+ assetKey: assetKey,
+ title: entry.title,
+ supportURL: entry.supportURL
+ });
+ break;
+ }
+ }
+
+ const response = {};
+ response[details.rawFilter] = lists;
+
+ self.postMessage({ id: details.id, response });
+};
+
+/******************************************************************************/
+
+// Looking up filter lists from a cosmetic filter is a bit more complicated
+// than with network filters:
+//
+// The filter is its raw representation, not its compiled version. This is
+// because the cosmetic filtering engine can't translate a live cosmetic
+// filter into its compiled version. Reason is I do not want to burden
+// cosmetic filtering with the resource overhead of being able to recompile
+// live cosmetic filters. I want the cosmetic filtering code to be left
+// completely unaffected by reverse lookup requirements.
+//
+// Mainly, given a CSS selector and a hostname as context, we will derive
+// various versions of compiled filters and see if there are matches. This
+// way the whole CPU cost is incurred by the reverse lookup code -- in a
+// worker thread, and the cosmetic filtering engine incurs no cost at all.
+//
+// For this though, the reverse lookup code here needs some knowledge of
+// the inners of the cosmetic filtering engine.
+// FilterContainer.fromCompiledContent() is our reference code to create
+// the various compiled versions.
+
+const fromExtendedFilter = function(details) {
+ const match = /^#@?#\^?/.exec(details.rawFilter);
+ const prefix = match[0];
+ const exception = prefix.charAt(1) === '@';
+ const selector = details.rawFilter.slice(prefix.length);
+ const isHtmlFilter = prefix.endsWith('^');
+ const hostname = details.hostname;
+
+ // The longer the needle, the lower the number of false positives.
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1139
+ // Mind that there is no guarantee a selector has `\w` characters.
+ const needle = selector.match(/\w+|\*/g).reduce(function(a, b) {
+ return a.length > b.length ? a : b;
+ });
+
+ const regexFromLabels = (prefix, hn, suffix) =>
+ new RegExp(
+ prefix +
+ hn.split('.').reduce((acc, item) => `(${acc}\\.)?${item}`) +
+ suffix
+ );
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/803
+ // Support looking up selectors of the form `*##...`
+ const reHostname = regexFromLabels('^', hostname, '$');
+ let reEntity;
+ {
+ const domain = details.domain;
+ const pos = domain.indexOf('.');
+ if ( pos !== -1 ) {
+ reEntity = regexFromLabels(
+ '^(',
+ hostname.slice(0, pos + hostname.length - domain.length),
+ '\\.)?\\*$'
+ );
+ }
+ }
+
+ const hostnameMatches = hn => {
+ if ( hn === '' ) { return true; }
+ if ( hn.charCodeAt(0) === 0x2F /* / */ ) {
+ return (new RegExp(hn.slice(1,-1))).test(hostname);
+ }
+ if ( reHostname.test(hn) ) { return true; }
+ if ( reEntity === undefined ) { return false; }
+ if ( reEntity.test(hn) ) { return true; }
+ return false;
+ };
+
+ const response = Object.create(null);
+
+ for ( const assetKey in listEntries ) {
+ const entry = listEntries[assetKey];
+ if ( entry === undefined ) { continue; }
+ if ( entry.extendedContent === undefined ) {
+ entry.extendedContent = extractBlocks(
+ entry.content,
+ 'COSMETIC_FILTERS:SPECIFIC',
+ 'COSMETIC_FILTERS:GENERIC',
+ 'SCRIPTLET_FILTERS',
+ 'HTML_FILTERS',
+ 'HTTPHEADER_FILTERS'
+ );
+ }
+ const content = entry.extendedContent;
+ let found;
+ let pos = 0;
+ while ( (pos = content.indexOf(needle, pos)) !== -1 ) {
+ let beg = content.lastIndexOf('\n', pos);
+ if ( beg === -1 ) { beg = 0; }
+ let end = content.indexOf('\n', pos);
+ if ( end === -1 ) { end = content.length; }
+ pos = end;
+ const fargs = JSON.parse(content.slice(beg, end));
+ const filterType = fargs[0];
+
+ // https://github.com/gorhill/uBlock/issues/2763
+ if ( filterType === 0 && details.ignoreGeneric ) { continue; }
+
+ // Do not confuse cosmetic filters with HTML ones.
+ if ( (filterType === 64) !== isHtmlFilter ) { continue; }
+
+ switch ( filterType ) {
+ // Lowly generic cosmetic filters
+ case 0:
+ if ( exception ) { break; }
+ if ( fargs[2] !== selector ) { break; }
+ found = prefix + selector;
+ break;
+ // Highly generic cosmetic filters
+ case 4: // simple highly generic
+ case 5: // complex highly generic
+ if ( exception ) { break; }
+ if ( fargs[1] !== selector ) { break; }
+ found = prefix + selector;
+ break;
+ // Specific cosmetic filtering
+ // Generic exception
+ case 8:
+ // HTML filtering
+ // Response header filtering
+ case 64: {
+ if ( exception !== ((fargs[2] & 0b001) !== 0) ) { break; }
+ const isProcedural = (fargs[2] & 0b010) !== 0;
+ if (
+ isProcedural === false && fargs[3] !== selector ||
+ isProcedural && JSON.parse(fargs[3]).raw !== selector
+ ) {
+ break;
+ }
+ if ( hostnameMatches(fargs[1]) === false ) { break; }
+ // https://www.reddit.com/r/uBlockOrigin/comments/d6vxzj/
+ // Ignore match if specific cosmetic filters are disabled
+ if (
+ filterType === 8 &&
+ exception === false &&
+ details.ignoreSpecific
+ ) {
+ break;
+ }
+ found = fargs[1] + prefix + selector;
+ break;
+ }
+ // Scriptlet injection
+ case 32:
+ if ( exception !== ((fargs[2] & 0b001) !== 0) ) { break; }
+ if ( fargs[3] !== details.compiled ) { break; }
+ if ( hostnameMatches(fargs[1]) ) {
+ found = fargs[1] + prefix + selector;
+ }
+ break;
+ }
+ if ( found !== undefined ) {
+ if ( response[found] === undefined ) {
+ response[found] = [];
+ }
+ response[found].push({
+ assetKey: assetKey,
+ title: entry.title,
+ supportURL: entry.supportURL
+ });
+ break;
+ }
+ }
+ }
+
+ self.postMessage({ id: details.id, response });
+};
+
+/******************************************************************************/
+
+self.onmessage = function(e) {
+ const msg = e.data;
+
+ switch ( msg.what ) {
+ case 'resetLists':
+ listEntries = Object.create(null);
+ break;
+
+ case 'setList':
+ listEntries[msg.details.assetKey] = msg.details;
+ break;
+
+ case 'fromNetFilter':
+ fromNetFilter(msg);
+ break;
+
+ case 'fromExtendedFilter':
+ fromExtendedFilter(msg);
+ break;
+ }
+};
+
+/******************************************************************************/
diff --git a/src/js/reverselookup.js b/src/js/reverselookup.js
new file mode 100644
index 0000000..c21ca4b
--- /dev/null
+++ b/src/js/reverselookup.js
@@ -0,0 +1,223 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import staticNetFilteringEngine from './static-net-filtering.js';
+import µb from './background.js';
+import { CompiledListWriter } from './static-filtering-io.js';
+import { i18n$ } from './i18n.js';
+import * as sfp from './static-filtering-parser.js';
+
+import {
+ domainFromHostname,
+ hostnameFromURI,
+} from './uri-utils.js';
+
+/******************************************************************************/
+
+const pendingResponses = new Map();
+
+let worker = null;
+let needLists = true;
+let messageId = 1;
+
+const onWorkerMessage = function(e) {
+ const msg = e.data;
+ const resolver = pendingResponses.get(msg.id);
+ pendingResponses.delete(msg.id);
+ resolver(msg.response);
+};
+
+const stopWorker = function() {
+ workerTTLTimer.off();
+ if ( worker === null ) { return; }
+ worker.terminate();
+ worker = null;
+ needLists = true;
+ for ( const resolver of pendingResponses.values() ) {
+ resolver();
+ }
+ pendingResponses.clear();
+};
+
+const workerTTLTimer = vAPI.defer.create(stopWorker);
+const workerTTL = { min: 5 };
+
+const initWorker = function() {
+ if ( worker === null ) {
+ worker = new Worker('js/reverselookup-worker.js');
+ worker.onmessage = onWorkerMessage;
+ }
+
+ // The worker will be shutdown after n minutes without being used.
+ workerTTLTimer.offon(workerTTL);
+
+ if ( needLists === false ) {
+ return Promise.resolve();
+ }
+ needLists = false;
+
+ const entries = new Map();
+
+ const onListLoaded = function(details) {
+ const entry = entries.get(details.assetKey);
+
+ // https://github.com/gorhill/uBlock/issues/536
+ // Use assetKey when there is no filter list title.
+
+ worker.postMessage({
+ what: 'setList',
+ details: {
+ assetKey: details.assetKey,
+ title: entry.title || details.assetKey,
+ supportURL: entry.supportURL,
+ content: details.content
+ }
+ });
+ };
+
+ for ( const listKey in µb.availableFilterLists ) {
+ if ( µb.availableFilterLists.hasOwnProperty(listKey) === false ) {
+ continue;
+ }
+ const entry = µb.availableFilterLists[listKey];
+ if ( entry.off === true ) { continue; }
+ entries.set(listKey, {
+ title: listKey !== µb.userFiltersPath ?
+ entry.title :
+ i18n$('1pPageName'),
+ supportURL: entry.supportURL || ''
+ });
+ }
+ if ( entries.size === 0 ) {
+ return Promise.resolve();
+ }
+
+ const promises = [];
+ for ( const listKey of entries.keys() ) {
+ promises.push(
+ µb.getCompiledFilterList(listKey).then(details => {
+ onListLoaded(details);
+ })
+ );
+ }
+ return Promise.all(promises);
+};
+
+const fromNetFilter = async function(rawFilter) {
+ if ( typeof rawFilter !== 'string' || rawFilter === '' ) { return; }
+
+ const writer = new CompiledListWriter();
+ const parser = new sfp.AstFilterParser({
+ trustedSource: true,
+ maxTokenLength: staticNetFilteringEngine.MAX_TOKEN_LENGTH,
+ nativeCssHas: vAPI.webextFlavor.env.includes('native_css_has'),
+ });
+ parser.parse(rawFilter);
+
+ const compiler = staticNetFilteringEngine.createCompiler();
+ if ( compiler.compile(parser, writer) === false ) { return; }
+
+ await initWorker();
+
+ const id = messageId++;
+ worker.postMessage({
+ what: 'fromNetFilter',
+ id,
+ compiledFilter: writer.last(),
+ rawFilter,
+ });
+
+ return new Promise(resolve => {
+ pendingResponses.set(id, resolve);
+ });
+};
+
+const fromExtendedFilter = async function(details) {
+ if (
+ typeof details.rawFilter !== 'string' ||
+ details.rawFilter === ''
+ ) {
+ return;
+ }
+
+ await initWorker();
+
+ const id = messageId++;
+ const hostname = hostnameFromURI(details.url);
+
+ const parser = new sfp.AstFilterParser({
+ trustedSource: true,
+ nativeCssHas: vAPI.webextFlavor.env.includes('native_css_has'),
+ });
+ parser.parse(details.rawFilter);
+ let compiled;
+ if ( parser.isScriptletFilter() ) {
+ compiled = JSON.stringify(parser.getScriptletArgs());
+ }
+
+ worker.postMessage({
+ what: 'fromExtendedFilter',
+ id,
+ domain: domainFromHostname(hostname),
+ hostname,
+ ignoreGeneric:
+ staticNetFilteringEngine.matchRequestReverse(
+ 'generichide',
+ details.url
+ ) === 2,
+ ignoreSpecific:
+ staticNetFilteringEngine.matchRequestReverse(
+ 'specifichide',
+ details.url
+ ) === 2,
+ rawFilter: details.rawFilter,
+ compiled,
+ });
+
+ return new Promise(resolve => {
+ pendingResponses.set(id, resolve);
+ });
+};
+
+// This tells the worker that filter lists may have changed.
+
+const resetLists = function() {
+ needLists = true;
+ if ( worker === null ) { return; }
+ worker.postMessage({ what: 'resetLists' });
+};
+
+/******************************************************************************/
+
+const staticFilteringReverseLookup = {
+ fromNetFilter,
+ fromExtendedFilter,
+ resetLists,
+ shutdown: stopWorker
+};
+
+export default staticFilteringReverseLookup;
+
+/******************************************************************************/
diff --git a/src/js/scriptlet-filtering-core.js b/src/js/scriptlet-filtering-core.js
new file mode 100644
index 0000000..125eb87
--- /dev/null
+++ b/src/js/scriptlet-filtering-core.js
@@ -0,0 +1,300 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2017-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import { redirectEngine as reng } from './redirect-engine.js';
+import { StaticExtFilteringHostnameDB } from './static-ext-filtering-db.js';
+
+/******************************************************************************/
+
+// Increment when internal representation changes
+const VERSION = 1;
+
+const $scriptlets = new Set();
+const $exceptions = new Set();
+const $mainWorldMap = new Map();
+const $isolatedWorldMap = new Map();
+
+/******************************************************************************/
+
+const normalizeRawFilter = (parser, sourceIsTrusted = false) => {
+ const args = parser.getScriptletArgs();
+ if ( args.length !== 0 ) {
+ let token = `${args[0]}.js`;
+ if ( reng.aliases.has(token) ) {
+ token = reng.aliases.get(token);
+ }
+ if ( parser.isException() !== true ) {
+ if ( sourceIsTrusted !== true ) {
+ if ( reng.tokenRequiresTrust(token) ) { return; }
+ }
+ }
+ args[0] = token.slice(0, -3);
+ }
+ return JSON.stringify(args);
+};
+
+const lookupScriptlet = (rawToken, mainMap, isolatedMap, debug = false) => {
+ if ( mainMap.has(rawToken) || isolatedMap.has(rawToken) ) { return; }
+ const args = JSON.parse(rawToken);
+ const token = `${args[0]}.js`;
+ const details = reng.contentFromName(token, 'text/javascript');
+ if ( details === undefined ) { return; }
+ const targetWorldMap = details.world !== 'ISOLATED' ? mainMap : isolatedMap;
+ const content = patchScriptlet(details.js, args.slice(1));
+ const dependencies = details.dependencies || [];
+ while ( dependencies.length !== 0 ) {
+ const token = dependencies.shift();
+ if ( targetWorldMap.has(token) ) { continue; }
+ const details = reng.contentFromName(token, 'fn/javascript') ||
+ reng.contentFromName(token, 'text/javascript');
+ if ( details === undefined ) { continue; }
+ targetWorldMap.set(token, details.js);
+ if ( Array.isArray(details.dependencies) === false ) { continue; }
+ dependencies.push(...details.dependencies);
+ }
+ targetWorldMap.set(rawToken, [
+ 'try {',
+ '// >>>> scriptlet start',
+ content,
+ '// <<<< scriptlet end',
+ '} catch (e) {',
+ debug ? 'console.error(e);' : '',
+ '}',
+ ].join('\n'));
+};
+
+// Fill-in scriptlet argument placeholders.
+const patchScriptlet = (content, arglist) => {
+ if ( content.startsWith('function') && content.endsWith('}') ) {
+ content = `(${content})({{args}});`;
+ }
+ for ( let i = 0; i < arglist.length; i++ ) {
+ content = content.replace(`{{${i+1}}}`, arglist[i]);
+ }
+ return content.replace('{{args}}',
+ JSON.stringify(arglist).slice(1,-1).replace(/\$/g, '$$$')
+ );
+};
+
+const decompile = json => {
+ const args = JSON.parse(json).map(s => s.replace(/,/g, '\\,'));
+ if ( args.length === 0 ) { return '+js()'; }
+ return `+js(${args.join(', ')})`;
+};
+
+/******************************************************************************/
+
+export class ScriptletFilteringEngine {
+ constructor() {
+ this.acceptedCount = 0;
+ this.discardedCount = 0;
+ this.scriptletDB = new StaticExtFilteringHostnameDB(1, VERSION);
+ this.duplicates = new Set();
+ }
+
+ getFilterCount() {
+ return this.scriptletDB.size;
+ }
+
+ reset() {
+ this.scriptletDB.clear();
+ this.duplicates.clear();
+ this.acceptedCount = 0;
+ this.discardedCount = 0;
+ }
+
+ freeze() {
+ this.duplicates.clear();
+ this.scriptletDB.collectGarbage();
+ }
+
+ // parser: instance of AstFilterParser from static-filtering-parser.js
+ // writer: instance of CompiledListWriter from static-filtering-io.js
+ compile(parser, writer) {
+ writer.select('SCRIPTLET_FILTERS');
+
+ // Only exception filters are allowed to be global.
+ const isException = parser.isException();
+ const normalized = normalizeRawFilter(parser, writer.properties.get('trustedSource'));
+
+ // Can fail if there is a mismatch with trust requirement
+ if ( normalized === undefined ) { return; }
+
+ // Tokenless is meaningful only for exception filters.
+ if ( normalized === '[]' && isException === false ) { return; }
+
+ if ( parser.hasOptions() === false ) {
+ if ( isException ) {
+ writer.push([ 32, '', 1, normalized ]);
+ }
+ return;
+ }
+
+ // https://github.com/gorhill/uBlock/issues/3375
+ // Ignore instances of exception filter with negated hostnames,
+ // because there is no way to create an exception to an exception.
+
+ for ( const { hn, not, bad } of parser.getExtFilterDomainIterator() ) {
+ if ( bad ) { continue; }
+ let kind = 0;
+ if ( isException ) {
+ if ( not ) { continue; }
+ kind |= 1;
+ } else if ( not ) {
+ kind |= 1;
+ }
+ writer.push([ 32, hn, kind, normalized ]);
+ }
+ }
+
+ // writer: instance of CompiledListReader from static-filtering-io.js
+ fromCompiledContent(reader) {
+ reader.select('SCRIPTLET_FILTERS');
+
+ while ( reader.next() ) {
+ this.acceptedCount += 1;
+ const fingerprint = reader.fingerprint();
+ if ( this.duplicates.has(fingerprint) ) {
+ this.discardedCount += 1;
+ continue;
+ }
+ this.duplicates.add(fingerprint);
+ const args = reader.args();
+ if ( args.length < 4 ) { continue; }
+ this.scriptletDB.store(args[1], args[2], args[3]);
+ }
+ }
+
+ toSelfie() {
+ return this.scriptletDB.toSelfie();
+ }
+
+ fromSelfie(selfie) {
+ if ( selfie instanceof Object === false ) { return false; }
+ if ( selfie.version !== VERSION ) { return false; }
+ this.scriptletDB.fromSelfie(selfie);
+ return true;
+ }
+
+ retrieve(request, options = {}) {
+ if ( this.scriptletDB.size === 0 ) { return; }
+
+ $scriptlets.clear();
+ $exceptions.clear();
+
+ const { hostname } = request;
+
+ this.scriptletDB.retrieve(hostname, [ $scriptlets, $exceptions ]);
+ const entity = request.entity !== ''
+ ? `${hostname.slice(0, -request.domain.length)}${request.entity}`
+ : '*';
+ this.scriptletDB.retrieve(entity, [ $scriptlets, $exceptions ], 1);
+ if ( $scriptlets.size === 0 ) { return; }
+
+ // Wholly disable scriptlet injection?
+ if ( $exceptions.has('[]') ) {
+ return { filters: '#@#+js()' };
+ }
+
+ for ( const token of $exceptions ) {
+ if ( $scriptlets.has(token) ) {
+ $scriptlets.delete(token);
+ } else {
+ $exceptions.delete(token);
+ }
+ }
+
+ for ( const token of $scriptlets ) {
+ lookupScriptlet(token, $mainWorldMap, $isolatedWorldMap, options.debug);
+ }
+
+ const mainWorldCode = [];
+ for ( const js of $mainWorldMap.values() ) {
+ mainWorldCode.push(js);
+ }
+
+ const isolatedWorldCode = [];
+ for ( const js of $isolatedWorldMap.values() ) {
+ isolatedWorldCode.push(js);
+ }
+
+ const scriptletDetails = {
+ mainWorld: mainWorldCode.join('\n\n'),
+ isolatedWorld: isolatedWorldCode.join('\n\n'),
+ filters: [
+ ...Array.from($scriptlets).map(s => `##${decompile(s)}`),
+ ...Array.from($exceptions).map(s => `#@#${decompile(s)}`),
+ ].join('\n'),
+ };
+ $mainWorldMap.clear();
+ $isolatedWorldMap.clear();
+
+ if ( scriptletDetails.mainWorld === '' ) {
+ if ( scriptletDetails.isolatedWorld === '' ) {
+ return { filters: scriptletDetails.filters };
+ }
+ }
+
+ const scriptletGlobals = options.scriptletGlobals || [];
+
+ if ( options.debug ) {
+ scriptletGlobals.push([ 'canDebug', true ]);
+ }
+
+ return {
+ mainWorld: scriptletDetails.mainWorld === '' ? '' : [
+ '(function() {',
+ '// >>>> start of private namespace',
+ '',
+ options.debugScriptlets ? 'debugger;' : ';',
+ '',
+ // For use by scriptlets to share local data among themselves
+ `const scriptletGlobals = new Map(${JSON.stringify(scriptletGlobals, null, 2)});`,
+ '',
+ scriptletDetails.mainWorld,
+ '',
+ '// <<<< end of private namespace',
+ '})();',
+ ].join('\n'),
+ isolatedWorld: scriptletDetails.isolatedWorld === '' ? '' : [
+ 'function() {',
+ '// >>>> start of private namespace',
+ '',
+ options.debugScriptlets ? 'debugger;' : ';',
+ '',
+ // For use by scriptlets to share local data among themselves
+ `const scriptletGlobals = new Map(${JSON.stringify(scriptletGlobals, null, 2)});`,
+ '',
+ scriptletDetails.isolatedWorld,
+ '',
+ '// <<<< end of private namespace',
+ '}',
+ ].join('\n'),
+ filters: scriptletDetails.filters,
+ };
+ }
+}
+
+/******************************************************************************/
diff --git a/src/js/scriptlet-filtering.js b/src/js/scriptlet-filtering.js
new file mode 100644
index 0000000..10da19f
--- /dev/null
+++ b/src/js/scriptlet-filtering.js
@@ -0,0 +1,328 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2017-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* globals browser */
+
+'use strict';
+
+/******************************************************************************/
+
+import µb from './background.js';
+import logger from './logger.js';
+import { onBroadcast } from './broadcast.js';
+import { redirectEngine as reng } from './redirect-engine.js';
+import { sessionFirewall } from './filtering-engines.js';
+import { MRUCache } from './mrucache.js';
+import { ScriptletFilteringEngine } from './scriptlet-filtering-core.js';
+
+import {
+ domainFromHostname,
+ entityFromDomain,
+ hostnameFromURI,
+} from './uri-utils.js';
+
+/******************************************************************************/
+
+const contentScriptRegisterer = new (class {
+ constructor() {
+ this.hostnameToDetails = new Map();
+ if ( browser.contentScripts === undefined ) { return; }
+ onBroadcast(msg => {
+ if ( msg.what !== 'filteringBehaviorChanged' ) { return; }
+ if ( msg.direction > 0 ) { return; }
+ if ( msg.hostname ) { return this.flush(msg.hostname); }
+ this.reset();
+ });
+ }
+ register(hostname, code) {
+ if ( browser.contentScripts === undefined ) { return false; }
+ if ( hostname === '' ) { return false; }
+ const details = this.hostnameToDetails.get(hostname);
+ if ( details !== undefined ) {
+ if ( code === details.code ) {
+ return details.handle instanceof Promise === false;
+ }
+ details.handle.unregister();
+ this.hostnameToDetails.delete(hostname);
+ }
+ const promise = browser.contentScripts.register({
+ js: [ { code } ],
+ allFrames: true,
+ matches: [ `*://*.${hostname}/*` ],
+ matchAboutBlank: true,
+ runAt: 'document_start',
+ }).then(handle => {
+ this.hostnameToDetails.set(hostname, { handle, code });
+ }).catch(( ) => {
+ this.hostnameToDetails.delete(hostname);
+ });
+ this.hostnameToDetails.set(hostname, { handle: promise, code });
+ return false;
+ }
+ unregister(hostname) {
+ if ( this.hostnameToDetails.size === 0 ) { return; }
+ const details = this.hostnameToDetails.get(hostname);
+ if ( details === undefined ) { return; }
+ this.hostnameToDetails.delete(hostname);
+ this.unregisterHandle(details.handle);
+ }
+ flush(hostname) {
+ if ( hostname === '*' ) { return this.reset(); }
+ for ( const hn of this.hostnameToDetails.keys() ) {
+ if ( hn.endsWith(hostname) === false ) { continue; }
+ const pos = hn.length - hostname.length;
+ if ( pos !== 0 && hn.charCodeAt(pos-1) !== 0x2E /* . */ ) { continue; }
+ this.unregister(hn);
+ }
+ }
+ reset() {
+ if ( this.hostnameToDetails.size === 0 ) { return; }
+ for ( const details of this.hostnameToDetails.values() ) {
+ this.unregisterHandle(details.handle);
+ }
+ this.hostnameToDetails.clear();
+ }
+ unregisterHandle(handle) {
+ if ( handle instanceof Promise ) {
+ handle.then(handle => { handle.unregister(); });
+ } else {
+ handle.unregister();
+ }
+ }
+})();
+
+/******************************************************************************/
+
+const mainWorldInjector = (( ) => {
+ const parts = [
+ '(',
+ function(injector, details) {
+ if ( typeof self.uBO_scriptletsInjected === 'string' ) { return; }
+ const doc = document;
+ if ( doc.location === null ) { return; }
+ const hostname = doc.location.hostname;
+ if ( hostname !== '' && details.hostname !== hostname ) { return; }
+ injector(doc, details);
+ return 0;
+ }.toString(),
+ ')(',
+ vAPI.scriptletsInjector, ', ',
+ 'json-slot',
+ ');',
+ ];
+ return {
+ parts,
+ jsonSlot: parts.indexOf('json-slot'),
+ assemble: function(hostname, scriptlets, filters) {
+ this.parts[this.jsonSlot] = JSON.stringify({
+ hostname,
+ scriptlets,
+ filters,
+ });
+ return this.parts.join('');
+ },
+ };
+})();
+
+const isolatedWorldInjector = (( ) => {
+ const parts = [
+ '(',
+ function(details) {
+ if ( self.uBO_isolatedScriptlets === 'done' ) { return; }
+ const doc = document;
+ if ( doc.location === null ) { return; }
+ const hostname = doc.location.hostname;
+ if ( hostname !== '' && details.hostname !== hostname ) { return; }
+ const isolatedScriptlets = function(){};
+ isolatedScriptlets();
+ self.uBO_isolatedScriptlets = 'done';
+ return 0;
+ }.toString(),
+ ')(',
+ 'json-slot',
+ ');',
+ ];
+ return {
+ parts,
+ jsonSlot: parts.indexOf('json-slot'),
+ assemble: function(hostname, scriptlets) {
+ this.parts[this.jsonSlot] = JSON.stringify({ hostname });
+ const code = this.parts.join('');
+ // Manually substitute noop function with scriptlet wrapper
+ // function, so as to not suffer instances of special
+ // replacement characters `$`,`\` when using String.replace()
+ // with scriptlet code.
+ const match = /function\(\)\{\}/.exec(code);
+ return code.slice(0, match.index) +
+ scriptlets +
+ code.slice(match.index + match[0].length);
+ },
+ };
+})();
+
+/******************************************************************************/
+
+export class ScriptletFilteringEngineEx extends ScriptletFilteringEngine {
+ constructor() {
+ super();
+ this.warOrigin = vAPI.getURL('/web_accessible_resources');
+ this.warSecret = undefined;
+ this.scriptletCache = new MRUCache(32);
+ this.isDevBuild = undefined;
+ onBroadcast(msg => {
+ if ( msg.what !== 'hiddenSettingsChanged' ) { return; }
+ this.scriptletCache.reset();
+ this.isDevBuild = undefined;
+ });
+ }
+
+ reset() {
+ super.reset();
+ this.warSecret = vAPI.warSecret.long(this.warSecret);
+ this.scriptletCache.reset();
+ contentScriptRegisterer.reset();
+ }
+
+ freeze() {
+ super.freeze();
+ this.warSecret = vAPI.warSecret.long(this.warSecret);
+ this.scriptletCache.reset();
+ contentScriptRegisterer.reset();
+ }
+
+ retrieve(request) {
+ const { hostname } = request;
+
+ // https://github.com/gorhill/uBlock/issues/2835
+ // Do not inject scriptlets if the site is under an `allow` rule.
+ if ( µb.userSettings.advancedUserEnabled ) {
+ if ( sessionFirewall.evaluateCellZY(hostname, hostname, '*') === 2 ) {
+ return;
+ }
+ }
+
+ if ( this.scriptletCache.resetTime < reng.modifyTime ) {
+ this.warSecret = vAPI.warSecret.long(this.warSecret);
+ this.scriptletCache.reset();
+ }
+
+ let scriptletDetails = this.scriptletCache.lookup(hostname);
+ if ( scriptletDetails !== undefined ) {
+ return scriptletDetails || undefined;
+ }
+
+ if ( this.isDevBuild === undefined ) {
+ this.isDevBuild = vAPI.webextFlavor.soup.has('devbuild') ||
+ µb.hiddenSettings.filterAuthorMode;
+ }
+
+ if ( this.warSecret === undefined ) {
+ this.warSecret = vAPI.warSecret.long();
+ }
+
+ const options = {
+ scriptletGlobals: [
+ [ 'warOrigin', this.warOrigin ],
+ [ 'warSecret', this.warSecret ],
+ ],
+ debug: this.isDevBuild,
+ debugScriptlets: µb.hiddenSettings.debugScriptlets,
+ };
+
+ scriptletDetails = super.retrieve(request, options);
+
+ this.scriptletCache.add(hostname, scriptletDetails || null);
+
+ return scriptletDetails;
+ }
+
+ injectNow(details) {
+ if ( typeof details.frameId !== 'number' ) { return; }
+
+ const request = {
+ tabId: details.tabId,
+ frameId: details.frameId,
+ url: details.url,
+ hostname: hostnameFromURI(details.url),
+ domain: undefined,
+ entity: undefined
+ };
+
+ request.domain = domainFromHostname(request.hostname);
+ request.entity = entityFromDomain(request.domain);
+
+ const scriptletDetails = this.retrieve(request);
+ if ( scriptletDetails === undefined ) {
+ contentScriptRegisterer.unregister(request.hostname);
+ return;
+ }
+
+ const contentScript = [];
+ if ( µb.hiddenSettings.debugScriptletInjector ) {
+ contentScript.push('debugger');
+ }
+ const { mainWorld = '', isolatedWorld = '', filters } = scriptletDetails;
+ if ( mainWorld !== '' ) {
+ contentScript.push(mainWorldInjector.assemble(request.hostname, mainWorld, filters));
+ }
+ if ( isolatedWorld !== '' ) {
+ contentScript.push(isolatedWorldInjector.assemble(request.hostname, isolatedWorld));
+ }
+
+ const code = contentScript.join('\n\n');
+
+ const isAlreadyInjected = contentScriptRegisterer.register(request.hostname, code);
+ if ( isAlreadyInjected !== true ) {
+ vAPI.tabs.executeScript(details.tabId, {
+ code,
+ frameId: details.frameId,
+ matchAboutBlank: true,
+ runAt: 'document_start',
+ });
+ }
+
+ return scriptletDetails;
+ }
+
+ toLogger(request, details) {
+ if ( details === undefined ) { return; }
+ if ( logger.enabled !== true ) { return; }
+ if ( typeof details.filters !== 'string' ) { return; }
+ const fctxt = µb.filteringContext
+ .duplicate()
+ .fromTabId(request.tabId)
+ .setRealm('extended')
+ .setType('scriptlet')
+ .setURL(request.url)
+ .setDocOriginFromURL(request.url);
+ for ( const raw of details.filters.split('\n') ) {
+ fctxt.setFilter({ source: 'extended', raw }).toLogger();
+ }
+ }
+}
+
+/******************************************************************************/
+
+const scriptletFilteringEngine = new ScriptletFilteringEngineEx();
+
+export default scriptletFilteringEngine;
+
+/******************************************************************************/
diff --git a/src/js/scriptlets/cosmetic-logger.js b/src/js/scriptlets/cosmetic-logger.js
new file mode 100644
index 0000000..5d1f1b9
--- /dev/null
+++ b/src/js/scriptlets/cosmetic-logger.js
@@ -0,0 +1,365 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* globals browser */
+
+'use strict';
+
+/******************************************************************************/
+
+(( ) => {
+// >>>>>>>> start of private namespace
+
+/******************************************************************************/
+
+if ( typeof vAPI !== 'object' ) { return; }
+if ( vAPI.domWatcher instanceof Object === false ) { return; }
+
+const reHasCSSCombinators = /[ >+~]/;
+const simpleDeclarativeSet = new Set();
+let simpleDeclarativeStr;
+const complexDeclarativeSet = new Set();
+let complexDeclarativeStr;
+const proceduralDict = new Map();
+const exceptionDict = new Map();
+let exceptionStr;
+const proceduralExceptionDict = new Map();
+const nodesToProcess = new Set();
+const loggedSelectors = new Set();
+
+/******************************************************************************/
+
+const rePseudoElements = /:(?::?after|:?before|:[a-z-]+)$/;
+
+function hasSelector(selector, context = document) {
+ try {
+ return context.querySelector(selector) !== null;
+ }
+ catch(ex) {
+ }
+ return false;
+}
+
+function safeMatchSelector(selector, context) {
+ const safeSelector = rePseudoElements.test(selector)
+ ? selector.replace(rePseudoElements, '')
+ : selector;
+ try {
+ return context.matches(safeSelector);
+ }
+ catch(ex) {
+ }
+ return false;
+}
+
+function safeQuerySelector(selector, context = document) {
+ const safeSelector = rePseudoElements.test(selector)
+ ? selector.replace(rePseudoElements, '')
+ : selector;
+ try {
+ return context.querySelector(safeSelector);
+ }
+ catch(ex) {
+ }
+ return null;
+}
+
+function safeGroupSelectors(selectors) {
+ const arr = Array.isArray(selectors)
+ ? selectors
+ : Array.from(selectors);
+ return arr.map(s => {
+ return rePseudoElements.test(s)
+ ? s.replace(rePseudoElements, '')
+ : s;
+ }).join(',\n');
+}
+
+/******************************************************************************/
+
+function processDeclarativeSimple(node, out) {
+ if ( simpleDeclarativeSet.size === 0 ) { return; }
+ if ( simpleDeclarativeStr === undefined ) {
+ simpleDeclarativeStr = safeGroupSelectors(simpleDeclarativeSet);
+ }
+ if (
+ (node === document || node.matches(simpleDeclarativeStr) === false) &&
+ (hasSelector(simpleDeclarativeStr, node) === false)
+ ) {
+ return;
+ }
+ for ( const selector of simpleDeclarativeSet ) {
+ if (
+ (node === document || safeMatchSelector(selector, node) === false) &&
+ (safeQuerySelector(selector, node) === null)
+ ) {
+ continue;
+ }
+ out.push(`##${selector}`);
+ simpleDeclarativeSet.delete(selector);
+ simpleDeclarativeStr = undefined;
+ loggedSelectors.add(selector);
+ }
+}
+
+/******************************************************************************/
+
+function processDeclarativeComplex(out) {
+ if ( complexDeclarativeSet.size === 0 ) { return; }
+ if ( complexDeclarativeStr === undefined ) {
+ complexDeclarativeStr = safeGroupSelectors(complexDeclarativeSet);
+ }
+ if ( hasSelector(complexDeclarativeStr) === false ) { return; }
+ for ( const selector of complexDeclarativeSet ) {
+ if ( safeQuerySelector(selector) === null ) { continue; }
+ out.push(`##${selector}`);
+ complexDeclarativeSet.delete(selector);
+ complexDeclarativeStr = undefined;
+ loggedSelectors.add(selector);
+ }
+}
+
+/******************************************************************************/
+
+function processProcedural(out) {
+ if ( proceduralDict.size === 0 ) { return; }
+ for ( const [ raw, pselector ] of proceduralDict ) {
+ if ( pselector.converted ) {
+ if ( safeQuerySelector(pselector.selector) === null ) { continue; }
+ } else if ( pselector.hit === false && pselector.exec().length === 0 ) {
+ continue;
+ }
+ out.push(`##${raw}`);
+ proceduralDict.delete(raw);
+ }
+}
+
+/******************************************************************************/
+
+function processExceptions(out) {
+ if ( exceptionDict.size === 0 ) { return; }
+ if ( exceptionStr === undefined ) {
+ exceptionStr = safeGroupSelectors(exceptionDict.keys());
+ }
+ if ( hasSelector(exceptionStr) === false ) { return; }
+ for ( const [ selector, raw ] of exceptionDict ) {
+ if ( safeQuerySelector(selector) === null ) { continue; }
+ out.push(`#@#${raw}`);
+ exceptionDict.delete(selector);
+ exceptionStr = undefined;
+ loggedSelectors.add(raw);
+ }
+}
+
+/******************************************************************************/
+
+function processProceduralExceptions(out) {
+ if ( proceduralExceptionDict.size === 0 ) { return; }
+ for ( const exception of proceduralExceptionDict.values() ) {
+ if ( exception.test() === false ) { continue; }
+ out.push(`#@#${exception.raw}`);
+ proceduralExceptionDict.delete(exception.raw);
+ }
+}
+
+/******************************************************************************/
+
+const processTimer = new vAPI.SafeAnimationFrame(( ) => {
+ //console.time('dom logger/scanning for matches');
+ processTimer.clear();
+ if ( nodesToProcess.size === 0 ) { return; }
+
+ if ( nodesToProcess.size !== 1 && nodesToProcess.has(document) ) {
+ nodesToProcess.clear();
+ nodesToProcess.add(document);
+ }
+
+ const toLog = [];
+ if ( simpleDeclarativeSet.size !== 0 ) {
+ for ( const node of nodesToProcess ) {
+ processDeclarativeSimple(node, toLog);
+ }
+ }
+
+ processDeclarativeComplex(toLog);
+ processProcedural(toLog);
+ processExceptions(toLog);
+ processProceduralExceptions(toLog);
+
+ nodesToProcess.clear();
+
+ if ( toLog.length === 0 ) { return; }
+
+ const location = vAPI.effectiveSelf.location;
+
+ vAPI.messaging.send('scriptlets', {
+ what: 'logCosmeticFilteringData',
+ frameURL: location.href,
+ frameHostname: location.hostname,
+ matchedSelectors: toLog,
+ });
+ //console.timeEnd('dom logger/scanning for matches');
+});
+
+/******************************************************************************/
+
+const attributeObserver = new MutationObserver(mutations => {
+ if ( nodesToProcess.has(document) ) { return; }
+ for ( const mutation of mutations ) {
+ const node = mutation.target;
+ if ( node.nodeType !== 1 ) { continue; }
+ nodesToProcess.add(node);
+ }
+ if ( nodesToProcess.size !== 0 ) {
+ processTimer.start(100);
+ }
+});
+
+/******************************************************************************/
+
+const handlers = {
+ onFiltersetChanged: function(changes) {
+ //console.time('dom logger/filterset changed');
+ for ( const block of (changes.declarative || []) ) {
+ for ( const selector of block.split(',\n') ) {
+ if ( loggedSelectors.has(selector) ) { continue; }
+ if ( reHasCSSCombinators.test(selector) ) {
+ complexDeclarativeSet.add(selector);
+ complexDeclarativeStr = undefined;
+ } else {
+ simpleDeclarativeSet.add(selector);
+ simpleDeclarativeStr = undefined;
+ }
+ }
+ }
+ if (
+ Array.isArray(changes.procedural) &&
+ changes.procedural.length !== 0
+ ) {
+ for ( const selector of changes.procedural ) {
+ proceduralDict.set(selector.raw, selector);
+ }
+ }
+ if ( Array.isArray(changes.exceptions) ) {
+ for ( const selector of changes.exceptions ) {
+ if ( loggedSelectors.has(selector) ) { continue; }
+ if ( selector.charCodeAt(0) !== 0x7B /* '{' */ ) {
+ exceptionDict.set(selector, selector);
+ continue;
+ }
+ const details = JSON.parse(selector);
+ if (
+ details.action !== undefined &&
+ details.tasks === undefined &&
+ details.action[0] === 'style'
+ ) {
+ exceptionDict.set(details.selector, details.raw);
+ continue;
+ }
+ proceduralExceptionDict.set(
+ details.raw,
+ vAPI.domFilterer.createProceduralFilter(details)
+ );
+ }
+ exceptionStr = undefined;
+ }
+ nodesToProcess.clear();
+ nodesToProcess.add(document);
+ processTimer.start(1);
+ //console.timeEnd('dom logger/filterset changed');
+ },
+
+ onDOMCreated: function() {
+ if ( vAPI.domFilterer instanceof Object === false ) {
+ return shutdown();
+ }
+ handlers.onFiltersetChanged(vAPI.domFilterer.getAllSelectors());
+ vAPI.domFilterer.addListener(handlers);
+ attributeObserver.observe(document.body, {
+ attributes: true,
+ subtree: true
+ });
+ },
+
+ onDOMChanged: function(addedNodes) {
+ if ( nodesToProcess.has(document) ) { return; }
+ for ( const node of addedNodes ) {
+ if ( node.parentNode === null ) { continue; }
+ nodesToProcess.add(node);
+ }
+ if ( nodesToProcess.size !== 0 ) {
+ processTimer.start(100);
+ }
+ }
+};
+
+vAPI.domWatcher.addListener(handlers);
+
+/******************************************************************************/
+
+const broadcastHandler = msg => {
+ if ( msg.what === 'loggerDisabled' ) {
+ shutdown();
+ }
+};
+
+browser.runtime.onMessage.addListener(broadcastHandler);
+
+/******************************************************************************/
+
+function shutdown() {
+ browser.runtime.onMessage.removeListener(broadcastHandler);
+ processTimer.clear();
+ attributeObserver.disconnect();
+ if ( typeof vAPI !== 'object' ) { return; }
+ if ( vAPI.domFilterer instanceof Object ) {
+ vAPI.domFilterer.removeListener(handlers);
+ }
+ if ( vAPI.domWatcher instanceof Object ) {
+ vAPI.domWatcher.removeListener(handlers);
+ }
+}
+
+/******************************************************************************/
+
+// <<<<<<<< end of private namespace
+})();
+
+
+
+
+
+
+
+
+/*******************************************************************************
+
+ DO NOT:
+ - Remove the following code
+ - Add code beyond the following code
+ Reason:
+ - https://github.com/gorhill/uBlock/pull/3721
+ - uBO never uses the return value from injected content scripts
+
+**/
+
+void 0;
+
diff --git a/src/js/scriptlets/cosmetic-off.js b/src/js/scriptlets/cosmetic-off.js
new file mode 100644
index 0000000..f1301e2
--- /dev/null
+++ b/src/js/scriptlets/cosmetic-off.js
@@ -0,0 +1,48 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-2018 Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+if ( typeof vAPI === 'object' && vAPI.domFilterer ) {
+ vAPI.domFilterer.toggle(false);
+}
+
+
+
+
+
+
+
+
+/*******************************************************************************
+
+ DO NOT:
+ - Remove the following code
+ - Add code beyond the following code
+ Reason:
+ - https://github.com/gorhill/uBlock/pull/3721
+ - uBO never uses the return value from injected content scripts
+
+**/
+
+void 0;
diff --git a/src/js/scriptlets/cosmetic-on.js b/src/js/scriptlets/cosmetic-on.js
new file mode 100644
index 0000000..7b30976
--- /dev/null
+++ b/src/js/scriptlets/cosmetic-on.js
@@ -0,0 +1,48 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-2018 Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+if ( typeof vAPI === 'object' && vAPI.domFilterer ) {
+ vAPI.domFilterer.toggle(true);
+}
+
+
+
+
+
+
+
+
+/*******************************************************************************
+
+ DO NOT:
+ - Remove the following code
+ - Add code beyond the following code
+ Reason:
+ - https://github.com/gorhill/uBlock/pull/3721
+ - uBO never uses the return value from injected content scripts
+
+**/
+
+void 0;
diff --git a/src/js/scriptlets/cosmetic-report.js b/src/js/scriptlets/cosmetic-report.js
new file mode 100644
index 0000000..a968d4d
--- /dev/null
+++ b/src/js/scriptlets/cosmetic-report.js
@@ -0,0 +1,142 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+(( ) => {
+// >>>>>>>> start of private namespace
+
+/******************************************************************************/
+
+if ( typeof vAPI !== 'object' ) { return; }
+if ( typeof vAPI.domFilterer !== 'object' ) { return; }
+if ( vAPI.domFilterer === null ) { return; }
+
+/******************************************************************************/
+
+const rePseudoElements = /:(?::?after|:?before|:[a-z-]+)$/;
+
+const hasSelector = selector => {
+ try {
+ return document.querySelector(selector) !== null;
+ }
+ catch(ex) {
+ }
+ return false;
+};
+
+const safeQuerySelector = selector => {
+ const safeSelector = rePseudoElements.test(selector)
+ ? selector.replace(rePseudoElements, '')
+ : selector;
+ try {
+ return document.querySelector(safeSelector);
+ }
+ catch(ex) {
+ }
+ return null;
+};
+
+const safeGroupSelectors = selectors => {
+ const arr = Array.isArray(selectors)
+ ? selectors
+ : Array.from(selectors);
+ return arr.map(s => {
+ return rePseudoElements.test(s)
+ ? s.replace(rePseudoElements, '')
+ : s;
+ }).join(',\n');
+};
+
+const allSelectors = vAPI.domFilterer.getAllSelectors();
+const matchedSelectors = [];
+
+if ( Array.isArray(allSelectors.declarative) ) {
+ const declarativeSet = new Set();
+ for ( const block of allSelectors.declarative ) {
+ for ( const selector of block.split(',\n') ) {
+ declarativeSet.add(selector);
+ }
+ }
+ if ( hasSelector(safeGroupSelectors(declarativeSet)) ) {
+ for ( const selector of declarativeSet ) {
+ if ( safeQuerySelector(selector) === null ) { continue; }
+ matchedSelectors.push(`##${selector}`);
+ }
+ }
+}
+
+if (
+ Array.isArray(allSelectors.procedural) &&
+ allSelectors.procedural.length !== 0
+) {
+ for ( const pselector of allSelectors.procedural ) {
+ if ( pselector.hit === false && pselector.exec().length === 0 ) { continue; }
+ matchedSelectors.push(`##${pselector.raw}`);
+ }
+}
+
+if ( Array.isArray(allSelectors.exceptions) ) {
+ const exceptionDict = new Map();
+ for ( const selector of allSelectors.exceptions ) {
+ if ( selector.charCodeAt(0) !== 0x7B /* '{' */ ) {
+ exceptionDict.set(selector, selector);
+ continue;
+ }
+ const details = JSON.parse(selector);
+ if (
+ details.action !== undefined &&
+ details.tasks === undefined &&
+ details.action[0] === 'style'
+ ) {
+ exceptionDict.set(details.selector, details.raw);
+ continue;
+ }
+ const pselector = vAPI.domFilterer.createProceduralFilter(details);
+ if ( pselector.test() === false ) { continue; }
+ matchedSelectors.push(`#@#${pselector.raw}`);
+ }
+ if (
+ exceptionDict.size !== 0 &&
+ hasSelector(safeGroupSelectors(exceptionDict.keys()))
+ ) {
+ for ( const [ selector, raw ] of exceptionDict ) {
+ if ( safeQuerySelector(selector) === null ) { continue; }
+ matchedSelectors.push(`#@#${raw}`);
+ }
+ }
+}
+
+if ( typeof self.uBO_scriptletsInjected === 'string' ) {
+ matchedSelectors.push(...self.uBO_scriptletsInjected.split('\n'));
+}
+
+if ( matchedSelectors.length === 0 ) { return; }
+
+return matchedSelectors;
+
+/******************************************************************************/
+
+// <<<<<<<< end of private namespace
+})();
+
diff --git a/src/js/scriptlets/dom-inspector.js b/src/js/scriptlets/dom-inspector.js
new file mode 100644
index 0000000..b5317d5
--- /dev/null
+++ b/src/js/scriptlets/dom-inspector.js
@@ -0,0 +1,924 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* globals browser */
+
+'use strict';
+
+/******************************************************************************/
+/******************************************************************************/
+
+(async ( ) => {
+
+/******************************************************************************/
+
+if ( typeof vAPI !== 'object' ) { return; }
+if ( typeof vAPI === null ) { return; }
+if ( vAPI.domFilterer instanceof Object === false ) { return; }
+
+if ( vAPI.inspectorFrame ) { return; }
+vAPI.inspectorFrame = true;
+
+const inspectorUniqueId = vAPI.randomToken();
+
+const nodeToIdMap = new WeakMap(); // No need to iterate
+
+let blueNodes = [];
+const roRedNodes = new Map(); // node => current cosmetic filter
+const rwRedNodes = new Set(); // node => new cosmetic filter (toggle node)
+const rwGreenNodes = new Set(); // node => new exception cosmetic filter (toggle filter)
+//const roGreenNodes = new Map(); // node => current exception cosmetic filter (can't toggle)
+
+const reHasCSSCombinators = /[ >+~]/;
+
+/******************************************************************************/
+
+const domLayout = (( ) => {
+ const skipTagNames = new Set([
+ 'br', 'head', 'link', 'meta', 'script', 'style', 'title'
+ ]);
+ const resourceAttrNames = new Map([
+ [ 'a', 'href' ],
+ [ 'iframe', 'src' ],
+ [ 'img', 'src' ],
+ [ 'object', 'data' ]
+ ]);
+
+ let idGenerator = 1;
+
+ // This will be used to uniquely identify nodes across process.
+
+ const newNodeId = node => {
+ const nid = `n${(idGenerator++).toString(36)}`;
+ nodeToIdMap.set(node, nid);
+ return nid;
+ };
+
+ const selectorFromNode = node => {
+ const tag = node.localName;
+ let selector = CSS.escape(tag);
+ // Id
+ if ( typeof node.id === 'string' ) {
+ let str = node.id.trim();
+ if ( str !== '' ) {
+ selector += `#${CSS.escape(str)}`;
+ }
+ }
+ // Class
+ const cl = node.classList;
+ if ( cl ) {
+ for ( let i = 0; i < cl.length; i++ ) {
+ selector += `.${CSS.escape(cl[i])}`;
+ }
+ }
+ // Tag-specific attributes
+ const attr = resourceAttrNames.get(tag);
+ if ( attr !== undefined ) {
+ let str = node.getAttribute(attr) || '';
+ str = str.trim();
+ const pos = str.startsWith('data:') ? 5 : str.search(/[#?]/);
+ let sw = '';
+ if ( pos !== -1 ) {
+ str = str.slice(0, pos);
+ sw = '^';
+ }
+ if ( str !== '' ) {
+ selector += `[${attr}${sw}="${CSS.escape(str, true)}"]`;
+ }
+ }
+ return selector;
+ };
+
+ function DomRoot() {
+ this.nid = newNodeId(document.body);
+ this.lvl = 0;
+ this.sel = 'body';
+ this.cnt = 0;
+ this.filter = roRedNodes.get(document.body);
+ }
+
+ function DomNode(node, level) {
+ this.nid = newNodeId(node);
+ this.lvl = level;
+ this.sel = selectorFromNode(node);
+ this.cnt = 0;
+ this.filter = roRedNodes.get(node);
+ }
+
+ const domNodeFactory = (level, node) => {
+ const localName = node.localName;
+ if ( skipTagNames.has(localName) ) { return null; }
+ // skip uBlock's own nodes
+ if ( node === inspectorFrame ) { return null; }
+ if ( level === 0 && localName === 'body' ) {
+ return new DomRoot();
+ }
+ return new DomNode(node, level);
+ };
+
+ // Collect layout data
+
+ const getLayoutData = ( ) => {
+ const layout = [];
+ const stack = [];
+ let lvl = 0;
+ let node = document.documentElement;
+ if ( node === null ) { return layout; }
+
+ for (;;) {
+ const domNode = domNodeFactory(lvl, node);
+ if ( domNode !== null ) {
+ layout.push(domNode);
+ }
+ // children
+ if ( domNode !== null && node.firstElementChild !== null ) {
+ stack.push(node);
+ lvl += 1;
+ node = node.firstElementChild;
+ continue;
+ }
+ // sibling
+ if ( node instanceof Element ) {
+ if ( node.nextElementSibling === null ) {
+ do {
+ node = stack.pop();
+ if ( !node ) { break; }
+ lvl -= 1;
+ } while ( node.nextElementSibling === null );
+ if ( !node ) { break; }
+ }
+ node = node.nextElementSibling;
+ }
+ }
+
+ return layout;
+ };
+
+ // Descendant count for each node.
+
+ const patchLayoutData = layout => {
+ const stack = [];
+ let ptr;
+ let lvl = 0;
+ let i = layout.length;
+
+ while ( i-- ) {
+ const domNode = layout[i];
+ if ( domNode.lvl === lvl ) {
+ stack[ptr] += 1;
+ continue;
+ }
+ if ( domNode.lvl > lvl ) {
+ while ( lvl < domNode.lvl ) {
+ stack.push(0);
+ lvl += 1;
+ }
+ ptr = lvl - 1;
+ stack[ptr] += 1;
+ continue;
+ }
+ // domNode.lvl < lvl
+ const cnt = stack.pop();
+ domNode.cnt = cnt;
+ lvl -= 1;
+ ptr = lvl - 1;
+ stack[ptr] += cnt + 1;
+ }
+ return layout;
+ };
+
+ // Track and report mutations of the DOM
+
+ let mutationObserver = null;
+ let mutationTimer;
+ let addedNodelists = [];
+ let removedNodelist = [];
+
+ const previousElementSiblingId = node => {
+ let sibling = node;
+ for (;;) {
+ sibling = sibling.previousElementSibling;
+ if ( sibling === null ) { return null; }
+ if ( skipTagNames.has(sibling.localName) ) { continue; }
+ return nodeToIdMap.get(sibling);
+ }
+ };
+
+ const journalFromBranch = (root, newNodes, newNodeToIdMap) => {
+ let node = root.firstElementChild;
+ while ( node !== null ) {
+ const domNode = domNodeFactory(undefined, node);
+ if ( domNode !== null ) {
+ newNodeToIdMap.set(domNode.nid, domNode);
+ newNodes.push(node);
+ }
+ // down
+ if ( node.firstElementChild !== null ) {
+ node = node.firstElementChild;
+ continue;
+ }
+ // right
+ if ( node.nextElementSibling !== null ) {
+ node = node.nextElementSibling;
+ continue;
+ }
+ // up then right
+ for (;;) {
+ if ( node.parentElement === root ) { return; }
+ node = node.parentElement;
+ if ( node.nextElementSibling !== null ) {
+ node = node.nextElementSibling;
+ break;
+ }
+ }
+ }
+ };
+
+ const journalFromMutations = ( ) => {
+ mutationTimer = undefined;
+
+ // This is used to temporarily hold all added nodes, before resolving
+ // their node id and relative position.
+ const newNodes = [];
+ const journalEntries = [];
+ const newNodeToIdMap = new Map();
+
+ for ( const nodelist of addedNodelists ) {
+ for ( const node of nodelist ) {
+ if ( node.nodeType !== 1 ) { continue; }
+ if ( node.parentElement === null ) { continue; }
+ cosmeticFilterMapper.incremental(node);
+ const domNode = domNodeFactory(undefined, node);
+ if ( domNode !== null ) {
+ newNodeToIdMap.set(domNode.nid, domNode);
+ newNodes.push(node);
+ }
+ journalFromBranch(node, newNodes, newNodeToIdMap);
+ }
+ }
+ addedNodelists = [];
+ for ( const nodelist of removedNodelist ) {
+ for ( const node of nodelist ) {
+ if ( node.nodeType !== 1 ) { continue; }
+ const nid = nodeToIdMap.get(node);
+ if ( nid === undefined ) { continue; }
+ journalEntries.push({ what: -1, nid });
+ }
+ }
+ removedNodelist = [];
+ for ( const node of newNodes ) {
+ journalEntries.push({
+ what: 1,
+ nid: nodeToIdMap.get(node),
+ u: nodeToIdMap.get(node.parentElement),
+ l: previousElementSiblingId(node)
+ });
+ }
+
+ if ( journalEntries.length === 0 ) { return; }
+
+ contentInspectorChannel.toLogger({
+ what: 'domLayoutIncremental',
+ url: window.location.href,
+ hostname: window.location.hostname,
+ journal: journalEntries,
+ nodes: Array.from(newNodeToIdMap)
+ });
+ };
+
+ const onMutationObserved = mutationRecords => {
+ for ( const record of mutationRecords ) {
+ if ( record.addedNodes.length !== 0 ) {
+ addedNodelists.push(record.addedNodes);
+ }
+ if ( record.removedNodes.length !== 0 ) {
+ removedNodelist.push(record.removedNodes);
+ }
+ }
+ if ( mutationTimer === undefined ) {
+ mutationTimer = vAPI.setTimeout(journalFromMutations, 1000);
+ }
+ };
+
+ // API
+
+ const getLayout = ( ) => {
+ cosmeticFilterMapper.reset();
+ mutationObserver = new MutationObserver(onMutationObserved);
+ mutationObserver.observe(document.body, {
+ childList: true,
+ subtree: true
+ });
+
+ return {
+ what: 'domLayoutFull',
+ url: window.location.href,
+ hostname: window.location.hostname,
+ layout: patchLayoutData(getLayoutData())
+ };
+ };
+
+ const reset = ( ) => {
+ shutdown();
+ };
+
+ const shutdown = ( ) => {
+ if ( mutationTimer !== undefined ) {
+ clearTimeout(mutationTimer);
+ mutationTimer = undefined;
+ }
+ if ( mutationObserver !== null ) {
+ mutationObserver.disconnect();
+ mutationObserver = null;
+ }
+ addedNodelists = [];
+ removedNodelist = [];
+ };
+
+ return {
+ get: getLayout,
+ reset,
+ shutdown,
+ };
+})();
+
+/******************************************************************************/
+/******************************************************************************/
+
+const cosmeticFilterMapper = (( ) => {
+ const nodesFromStyleTag = rootNode => {
+ const filterMap = roRedNodes;
+ const details = vAPI.domFilterer.getAllSelectors();
+
+ // Declarative selectors.
+ for ( const block of (details.declarative || []) ) {
+ for ( const selector of block.split(',\n') ) {
+ let nodes;
+ if ( reHasCSSCombinators.test(selector) ) {
+ nodes = document.querySelectorAll(selector);
+ } else {
+ if (
+ filterMap.has(rootNode) === false &&
+ rootNode.matches(selector)
+ ) {
+ filterMap.set(rootNode, selector);
+ }
+ nodes = rootNode.querySelectorAll(selector);
+ }
+ for ( const node of nodes ) {
+ if ( filterMap.has(node) ) { continue; }
+ filterMap.set(node, selector);
+ }
+ }
+ }
+
+ // Procedural selectors.
+ for ( const entry of (details.procedural || []) ) {
+ const nodes = entry.exec();
+ for ( const node of nodes ) {
+ // Upgrade declarative selector to procedural one
+ filterMap.set(node, entry.raw);
+ }
+ }
+ };
+
+ const incremental = rootNode => {
+ nodesFromStyleTag(rootNode);
+ };
+
+ const reset = ( ) => {
+ roRedNodes.clear();
+ if ( document.documentElement !== null ) {
+ incremental(document.documentElement);
+ }
+ };
+
+ const shutdown = ( ) => {
+ vAPI.domFilterer.toggle(true);
+ };
+
+ return {
+ incremental,
+ reset,
+ shutdown,
+ };
+})();
+
+/******************************************************************************/
+
+const elementsFromSelector = function(selector, context) {
+ if ( !context ) {
+ context = document;
+ }
+ if ( selector.indexOf(':') !== -1 ) {
+ const out = elementsFromSpecialSelector(selector);
+ if ( out !== undefined ) { return out; }
+ }
+ // plain CSS selector
+ try {
+ return context.querySelectorAll(selector);
+ } catch (ex) {
+ }
+ return [];
+};
+
+const elementsFromSpecialSelector = function(selector) {
+ const out = [];
+ let matches = /^(.+?):has\((.+?)\)$/.exec(selector);
+ if ( matches !== null ) {
+ let nodes;
+ try {
+ nodes = document.querySelectorAll(matches[1]);
+ } catch(ex) {
+ nodes = [];
+ }
+ for ( const node of nodes ) {
+ if ( node.querySelector(matches[2]) === null ) { continue; }
+ out.push(node);
+ }
+ return out;
+ }
+
+ matches = /^:xpath\((.+?)\)$/.exec(selector);
+ if ( matches === null ) { return; }
+ const xpr = document.evaluate(
+ matches[1],
+ document,
+ null,
+ XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
+ null
+ );
+ let i = xpr.snapshotLength;
+ while ( i-- ) {
+ out.push(xpr.snapshotItem(i));
+ }
+ return out;
+};
+
+/******************************************************************************/
+
+const highlightElements = ( ) => {
+ const paths = [];
+
+ const path = [];
+ for ( const elem of rwRedNodes.keys() ) {
+ if ( elem === inspectorFrame ) { continue; }
+ if ( rwGreenNodes.has(elem) ) { continue; }
+ if ( typeof elem.getBoundingClientRect !== 'function' ) { continue; }
+ const rect = elem.getBoundingClientRect();
+ const xl = rect.left;
+ const w = rect.width;
+ const yt = rect.top;
+ const h = rect.height;
+ const ws = w.toFixed(1);
+ const poly = 'M' + xl.toFixed(1) + ' ' + yt.toFixed(1) +
+ 'h' + ws +
+ 'v' + h.toFixed(1) +
+ 'h-' + ws +
+ 'z';
+ path.push(poly);
+ }
+ paths.push(path.join('') || 'M0 0');
+
+ path.length = 0;
+ for ( const elem of rwGreenNodes ) {
+ if ( typeof elem.getBoundingClientRect !== 'function' ) { continue; }
+ const rect = elem.getBoundingClientRect();
+ const xl = rect.left;
+ const w = rect.width;
+ const yt = rect.top;
+ const h = rect.height;
+ const ws = w.toFixed(1);
+ const poly = 'M' + xl.toFixed(1) + ' ' + yt.toFixed(1) +
+ 'h' + ws +
+ 'v' + h.toFixed(1) +
+ 'h-' + ws +
+ 'z';
+ path.push(poly);
+ }
+ paths.push(path.join('') || 'M0 0');
+
+ path.length = 0;
+ for ( const elem of roRedNodes.keys() ) {
+ if ( elem === inspectorFrame ) { continue; }
+ if ( rwGreenNodes.has(elem) ) { continue; }
+ if ( typeof elem.getBoundingClientRect !== 'function' ) { continue; }
+ const rect = elem.getBoundingClientRect();
+ const xl = rect.left;
+ const w = rect.width;
+ const yt = rect.top;
+ const h = rect.height;
+ const ws = w.toFixed(1);
+ const poly = 'M' + xl.toFixed(1) + ' ' + yt.toFixed(1) +
+ 'h' + ws +
+ 'v' + h.toFixed(1) +
+ 'h-' + ws +
+ 'z';
+ path.push(poly);
+ }
+ paths.push(path.join('') || 'M0 0');
+
+ path.length = 0;
+ for ( const elem of blueNodes ) {
+ if ( elem === inspectorFrame ) { continue; }
+ if ( typeof elem.getBoundingClientRect !== 'function' ) { continue; }
+ const rect = elem.getBoundingClientRect();
+ const xl = rect.left;
+ const w = rect.width;
+ const yt = rect.top;
+ const h = rect.height;
+ const ws = w.toFixed(1);
+ const poly = 'M' + xl.toFixed(1) + ' ' + yt.toFixed(1) +
+ 'h' + ws +
+ 'v' + h.toFixed(1) +
+ 'h-' + ws +
+ 'z';
+ path.push(poly);
+ }
+ paths.push(path.join('') || 'M0 0');
+
+ contentInspectorChannel.toFrame({
+ what: 'svgPaths',
+ paths,
+ });
+};
+
+/******************************************************************************/
+
+const onScrolled = (( ) => {
+ let timer;
+ return ( ) => {
+ if ( timer ) { return; }
+ timer = window.requestAnimationFrame(( ) => {
+ timer = undefined;
+ highlightElements();
+ });
+ };
+})();
+
+const onMouseOver = ( ) => {
+ if ( blueNodes.length === 0 ) { return; }
+ blueNodes = [];
+ highlightElements();
+};
+
+/******************************************************************************/
+
+const selectNodes = (selector, nid) => {
+ const nodes = elementsFromSelector(selector);
+ if ( nid === '' ) { return nodes; }
+ for ( const node of nodes ) {
+ if ( nodeToIdMap.get(node) === nid ) {
+ return [ node ];
+ }
+ }
+ return [];
+};
+
+/******************************************************************************/
+
+const nodesFromFilter = selector => {
+ const out = [];
+ for ( const entry of roRedNodes ) {
+ if ( entry[1] === selector ) {
+ out.push(entry[0]);
+ }
+ }
+ return out;
+};
+
+/******************************************************************************/
+
+const toggleExceptions = (nodes, targetState) => {
+ for ( const node of nodes ) {
+ if ( targetState ) {
+ rwGreenNodes.add(node);
+ } else {
+ rwGreenNodes.delete(node);
+ }
+ }
+};
+
+const toggleFilter = (nodes, targetState) => {
+ for ( const node of nodes ) {
+ if ( targetState ) {
+ rwRedNodes.delete(node);
+ } else {
+ rwRedNodes.add(node);
+ }
+ }
+};
+
+const resetToggledNodes = ( ) => {
+ rwGreenNodes.clear();
+ rwRedNodes.clear();
+};
+
+/******************************************************************************/
+
+const startInspector = ( ) => {
+ const onReady = ( ) => {
+ window.addEventListener('scroll', onScrolled, {
+ capture: true,
+ passive: true,
+ });
+ window.addEventListener('mouseover', onMouseOver, {
+ capture: true,
+ passive: true,
+ });
+ contentInspectorChannel.toLogger(domLayout.get());
+ vAPI.domFilterer.toggle(false, highlightElements);
+ };
+ if ( document.readyState === 'loading' ) {
+ document.addEventListener('DOMContentLoaded', onReady, { once: true });
+ } else {
+ onReady();
+ }
+};
+
+/******************************************************************************/
+
+const shutdownInspector = ( ) => {
+ cosmeticFilterMapper.shutdown();
+ domLayout.shutdown();
+ window.removeEventListener('scroll', onScrolled, {
+ capture: true,
+ passive: true,
+ });
+ window.removeEventListener('mouseover', onMouseOver, {
+ capture: true,
+ passive: true,
+ });
+ contentInspectorChannel.shutdown();
+ if ( inspectorFrame ) {
+ inspectorFrame.remove();
+ inspectorFrame = null;
+ }
+ vAPI.userStylesheet.remove(inspectorCSS);
+ vAPI.userStylesheet.apply();
+ vAPI.inspectorFrame = false;
+};
+
+/******************************************************************************/
+/******************************************************************************/
+
+const onMessage = request => {
+ switch ( request.what ) {
+ case 'startInspector':
+ startInspector();
+ break;
+
+ case 'quitInspector':
+ shutdownInspector();
+ break;
+
+ case 'commitFilters':
+ highlightElements();
+ break;
+
+ case 'domLayout':
+ domLayout.get();
+ highlightElements();
+ break;
+
+ case 'highlightMode':
+ break;
+
+ case 'highlightOne':
+ blueNodes = selectNodes(request.selector, request.nid);
+ if ( blueNodes.length !== 0 ) {
+ blueNodes[0].scrollIntoView({
+ behavior: 'smooth',
+ block: 'nearest',
+ inline: 'nearest',
+ });
+ }
+ highlightElements();
+ break;
+
+ case 'resetToggledNodes':
+ resetToggledNodes();
+ highlightElements();
+ break;
+
+ case 'showCommitted':
+ blueNodes = [];
+ // TODO: show only the new filters and exceptions.
+ highlightElements();
+ break;
+
+ case 'showInteractive':
+ blueNodes = [];
+ highlightElements();
+ break;
+
+ case 'toggleFilter': {
+ const nodes = selectNodes(request.selector, request.nid);
+ if ( nodes.length !== 0 ) {
+ nodes[0].scrollIntoView({
+ behavior: 'smooth',
+ block: 'nearest',
+ inline: 'nearest',
+ });
+ }
+ toggleExceptions(nodesFromFilter(request.filter), request.target);
+ highlightElements();
+ break;
+ }
+ case 'toggleNodes': {
+ const nodes = selectNodes(request.selector, request.nid);
+ if ( nodes.length !== 0 ) {
+ nodes[0].scrollIntoView({
+ behavior: 'smooth',
+ block: 'nearest',
+ inline: 'nearest',
+ });
+ }
+ toggleFilter(nodes, request.target);
+ highlightElements();
+ break;
+ }
+ default:
+ break;
+ }
+};
+
+/*******************************************************************************
+ *
+ * Establish two-way communication with logger/inspector window and
+ * inspector frame
+ *
+ * */
+
+const contentInspectorChannel = (( ) => {
+ let toLoggerPort;
+ let toFramePort;
+
+ const toLogger = msg => {
+ if ( toLoggerPort === undefined ) { return; }
+ try {
+ toLoggerPort.postMessage(msg);
+ } catch(_) {
+ shutdownInspector();
+ }
+ };
+
+ const onLoggerMessage = msg => {
+ onMessage(msg);
+ };
+
+ const onLoggerDisconnect = ( ) => {
+ shutdownInspector();
+ };
+
+ const onLoggerConnect = port => {
+ browser.runtime.onConnect.removeListener(onLoggerConnect);
+ toLoggerPort = port;
+ port.onMessage.addListener(onLoggerMessage);
+ port.onDisconnect.addListener(onLoggerDisconnect);
+ };
+
+ const toFrame = msg => {
+ if ( toFramePort === undefined ) { return; }
+ toFramePort.postMessage(msg);
+ };
+
+ const shutdown = ( ) => {
+ if ( toFramePort !== undefined ) {
+ toFrame({ what: 'quitInspector' });
+ toFramePort.onmessage = null;
+ toFramePort.close();
+ toFramePort = undefined;
+ }
+ if ( toLoggerPort !== undefined ) {
+ toLoggerPort.onMessage.removeListener(onLoggerMessage);
+ toLoggerPort.onDisconnect.removeListener(onLoggerDisconnect);
+ toLoggerPort.disconnect();
+ toLoggerPort = undefined;
+ }
+ browser.runtime.onConnect.removeListener(onLoggerConnect);
+ };
+
+ const start = async ( ) => {
+ browser.runtime.onConnect.addListener(onLoggerConnect);
+ const inspectorArgs = await vAPI.messaging.send('domInspectorContent', {
+ what: 'getInspectorArgs',
+ });
+ if ( typeof inspectorArgs !== 'object' ) { return; }
+ if ( inspectorArgs === null ) { return; }
+ return new Promise(resolve => {
+ const iframe = document.createElement('iframe');
+ iframe.setAttribute(inspectorUniqueId, '');
+ document.documentElement.append(iframe);
+ iframe.addEventListener('load', ( ) => {
+ iframe.setAttribute(`${inspectorUniqueId}-loaded`, '');
+ const channel = new MessageChannel();
+ toFramePort = channel.port1;
+ toFramePort.onmessage = ev => {
+ const msg = ev.data || {};
+ if ( msg.what !== 'startInspector' ) { return; }
+ };
+ iframe.contentWindow.postMessage(
+ { what: 'startInspector' },
+ inspectorArgs.inspectorURL,
+ [ channel.port2 ]
+ );
+ resolve(iframe);
+ }, { once: true });
+ iframe.contentWindow.location = inspectorArgs.inspectorURL;
+ });
+ };
+
+ return { start, toLogger, toFrame, shutdown };
+})();
+
+
+// Install DOM inspector widget
+const inspectorCSSStyle = [
+ 'background: transparent',
+ 'border: 0',
+ 'border-radius: 0',
+ 'box-shadow: none',
+ 'color-scheme: light dark',
+ 'display: block',
+ 'filter: none',
+ 'height: 100%',
+ 'left: 0',
+ 'margin: 0',
+ 'max-height: none',
+ 'max-width: none',
+ 'min-height: unset',
+ 'min-width: unset',
+ 'opacity: 1',
+ 'outline: 0',
+ 'padding: 0',
+ 'pointer-events: none',
+ 'position: fixed',
+ 'top: 0',
+ 'transform: none',
+ 'visibility: hidden',
+ 'width: 100%',
+ 'z-index: 2147483647',
+ ''
+].join(' !important;\n');
+
+const inspectorCSS = `
+:root > [${inspectorUniqueId}] {
+ ${inspectorCSSStyle}
+}
+:root > [${inspectorUniqueId}-loaded] {
+ visibility: visible !important;
+}
+`;
+
+vAPI.userStylesheet.add(inspectorCSS);
+vAPI.userStylesheet.apply();
+
+let inspectorFrame = await contentInspectorChannel.start();
+if ( inspectorFrame instanceof HTMLIFrameElement === false ) {
+ return shutdownInspector();
+}
+
+startInspector();
+
+/******************************************************************************/
+
+})();
+
+
+
+
+
+
+
+
+/*******************************************************************************
+
+ DO NOT:
+ - Remove the following code
+ - Add code beyond the following code
+ Reason:
+ - https://github.com/gorhill/uBlock/pull/3721
+ - uBO never uses the return value from injected content scripts
+
+**/
+
+void 0;
diff --git a/src/js/scriptlets/dom-survey-elements.js b/src/js/scriptlets/dom-survey-elements.js
new file mode 100644
index 0000000..1582596
--- /dev/null
+++ b/src/js/scriptlets/dom-survey-elements.js
@@ -0,0 +1,72 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/756
+// Keep in mind CPU usage with large DOM and/or filterset.
+
+(( ) => {
+ if ( typeof vAPI !== 'object' ) { return; }
+
+ const t0 = Date.now();
+
+ if ( vAPI.domSurveyElements instanceof Object === false ) {
+ vAPI.domSurveyElements = {
+ busy: false,
+ hiddenElementCount: Number.NaN,
+ surveyTime: t0,
+ };
+ }
+ const surveyResults = vAPI.domSurveyElements;
+
+ if ( surveyResults.busy ) { return; }
+ surveyResults.busy = true;
+
+ if ( surveyResults.surveyTime < vAPI.domMutationTime ) {
+ surveyResults.hiddenElementCount = Number.NaN;
+ }
+ surveyResults.surveyTime = t0;
+
+ if ( isNaN(surveyResults.hiddenElementCount) ) {
+ surveyResults.hiddenElementCount = (( ) => {
+ if ( vAPI.domFilterer instanceof Object === false ) { return 0; }
+ const details = vAPI.domFilterer.getAllSelectors(0b11);
+ if (
+ Array.isArray(details.declarative) === false ||
+ details.declarative.length === 0
+ ) {
+ return 0;
+ }
+ return document.querySelectorAll(
+ details.declarative.join(',\n')
+ ).length;
+ })();
+ }
+
+ surveyResults.busy = false;
+
+ // IMPORTANT: This is returned to the injector, so this MUST be
+ // the last statement.
+ return surveyResults.hiddenElementCount;
+})();
diff --git a/src/js/scriptlets/dom-survey-scripts.js b/src/js/scriptlets/dom-survey-scripts.js
new file mode 100644
index 0000000..e5300ff
--- /dev/null
+++ b/src/js/scriptlets/dom-survey-scripts.js
@@ -0,0 +1,126 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+// Scriptlets to count the number of script tags in a document.
+
+(( ) => {
+ if ( typeof vAPI !== 'object' ) { return; }
+
+ const t0 = Date.now();
+
+ if ( vAPI.domSurveyScripts instanceof Object === false ) {
+ vAPI.domSurveyScripts = {
+ busy: false,
+ scriptCount: -1,
+ surveyTime: t0,
+ };
+ }
+ const surveyResults = vAPI.domSurveyScripts;
+
+ if ( surveyResults.busy ) { return; }
+ surveyResults.busy = true;
+
+ if ( surveyResults.surveyTime < vAPI.domMutationTime ) {
+ surveyResults.scriptCount = -1;
+ }
+ surveyResults.surveyTime = t0;
+
+ if ( surveyResults.scriptCount === -1 ) {
+ const reInlineScript = /^(data:|blob:|$)/;
+ let inlineScriptCount = 0;
+ let scriptCount = 0;
+ for ( const script of document.scripts ) {
+ if ( reInlineScript.test(script.src) ) {
+ inlineScriptCount = 1;
+ continue;
+ }
+ scriptCount += 1;
+ if ( scriptCount === 99 ) { break; }
+ }
+ scriptCount += inlineScriptCount;
+ if ( scriptCount !== 0 ) {
+ surveyResults.scriptCount = scriptCount;
+ }
+ }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/756
+ // Keep trying to find inline script-like instances but only if we
+ // have the time-budget to do so.
+ if ( surveyResults.scriptCount === -1 ) {
+ if ( document.querySelector('a[href^="javascript:"]') !== null ) {
+ surveyResults.scriptCount = 1;
+ }
+ }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1756
+ // Mind that there might be no body element.
+ if ( surveyResults.scriptCount === -1 && document.body !== null ) {
+ surveyResults.scriptCount = 0;
+ const onHandlers = new Set([
+ 'onabort', 'onblur', 'oncancel', 'oncanplay',
+ 'oncanplaythrough', 'onchange', 'onclick', 'onclose',
+ 'oncontextmenu', 'oncuechange', 'ondblclick', 'ondrag',
+ 'ondragend', 'ondragenter', 'ondragexit', 'ondragleave',
+ 'ondragover', 'ondragstart', 'ondrop', 'ondurationchange',
+ 'onemptied', 'onended', 'onerror', 'onfocus',
+ 'oninput', 'oninvalid', 'onkeydown', 'onkeypress',
+ 'onkeyup', 'onload', 'onloadeddata', 'onloadedmetadata',
+ 'onloadstart', 'onmousedown', 'onmouseenter', 'onmouseleave',
+ 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup',
+ 'onwheel', 'onpause', 'onplay', 'onplaying',
+ 'onprogress', 'onratechange', 'onreset', 'onresize',
+ 'onscroll', 'onseeked', 'onseeking', 'onselect',
+ 'onshow', 'onstalled', 'onsubmit', 'onsuspend',
+ 'ontimeupdate', 'ontoggle', 'onvolumechange', 'onwaiting',
+ 'onafterprint', 'onbeforeprint', 'onbeforeunload', 'onhashchange',
+ 'onlanguagechange', 'onmessage', 'onoffline', 'ononline',
+ 'onpagehide', 'onpageshow', 'onrejectionhandled', 'onpopstate',
+ 'onstorage', 'onunhandledrejection', 'onunload',
+ 'oncopy', 'oncut', 'onpaste'
+ ]);
+ const nodeIter = document.createNodeIterator(
+ document.body,
+ NodeFilter.SHOW_ELEMENT
+ );
+ for (;;) {
+ const node = nodeIter.nextNode();
+ if ( node === null ) { break; }
+ if ( node.hasAttributes() === false ) { continue; }
+ for ( const attr of node.getAttributeNames() ) {
+ if ( onHandlers.has(attr) === false ) { continue; }
+ surveyResults.scriptCount = 1;
+ break;
+ }
+ }
+ }
+
+ surveyResults.busy = false;
+
+ // IMPORTANT: This is returned to the injector, so this MUST be
+ // the last statement.
+ if ( surveyResults.scriptCount !== -1 ) {
+ return surveyResults.scriptCount;
+ }
+})();
diff --git a/src/js/scriptlets/epicker.js b/src/js/scriptlets/epicker.js
new file mode 100644
index 0000000..80489e8
--- /dev/null
+++ b/src/js/scriptlets/epicker.js
@@ -0,0 +1,1356 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* global CSS */
+
+'use strict';
+
+/******************************************************************************/
+/******************************************************************************/
+
+(async ( ) => {
+
+/******************************************************************************/
+
+if ( typeof vAPI !== 'object' ) { return; }
+if ( typeof vAPI === null ) { return; }
+
+if ( vAPI.pickerFrame ) { return; }
+vAPI.pickerFrame = true;
+
+const pickerUniqueId = vAPI.randomToken();
+
+const reCosmeticAnchor = /^#(\$|\?|\$\?)?#/;
+
+const netFilterCandidates = [];
+const cosmeticFilterCandidates = [];
+
+let targetElements = [];
+let candidateElements = [];
+let bestCandidateFilter = null;
+
+const lastNetFilterSession = window.location.host + window.location.pathname;
+let lastNetFilterHostname = '';
+let lastNetFilterUnion = '';
+
+const hideBackgroundStyle = 'background-image:none!important;';
+
+/******************************************************************************/
+
+const safeQuerySelectorAll = function(node, selector) {
+ if ( node !== null ) {
+ try {
+ return node.querySelectorAll(selector);
+ } catch (e) {
+ }
+ }
+ return [];
+};
+
+/******************************************************************************/
+
+const getElementBoundingClientRect = function(elem) {
+ let rect = typeof elem.getBoundingClientRect === 'function'
+ ? elem.getBoundingClientRect()
+ : { height: 0, left: 0, top: 0, width: 0 };
+
+ // https://github.com/gorhill/uBlock/issues/1024
+ // Try not returning an empty bounding rect.
+ if ( rect.width !== 0 && rect.height !== 0 ) {
+ return rect;
+ }
+ if ( elem.shadowRoot instanceof DocumentFragment ) {
+ return getElementBoundingClientRect(elem.shadowRoot);
+ }
+
+ let left = rect.left,
+ right = left + rect.width,
+ top = rect.top,
+ bottom = top + rect.height;
+
+ for ( const child of elem.children ) {
+ rect = getElementBoundingClientRect(child);
+ if ( rect.width === 0 || rect.height === 0 ) { continue; }
+ if ( rect.left < left ) { left = rect.left; }
+ if ( rect.right > right ) { right = rect.right; }
+ if ( rect.top < top ) { top = rect.top; }
+ if ( rect.bottom > bottom ) { bottom = rect.bottom; }
+ }
+
+ return {
+ bottom,
+ height: bottom - top,
+ left,
+ right,
+ top,
+ width: right - left
+ };
+};
+
+/******************************************************************************/
+
+const highlightElements = function(elems, force) {
+ // To make mouse move handler more efficient
+ if (
+ (force !== true) &&
+ (elems.length === targetElements.length) &&
+ (elems.length === 0 || elems[0] === targetElements[0])
+ ) {
+ return;
+ }
+ targetElements = [];
+
+ const ow = self.innerWidth;
+ const oh = self.innerHeight;
+ const islands = [];
+
+ for ( const elem of elems ) {
+ if ( elem === pickerFrame ) { continue; }
+ targetElements.push(elem);
+ const rect = getElementBoundingClientRect(elem);
+ // Ignore offscreen areas
+ if (
+ rect.left > ow || rect.top > oh ||
+ rect.left + rect.width < 0 || rect.top + rect.height < 0
+ ) {
+ continue;
+ }
+ islands.push(
+ `M${rect.left} ${rect.top}h${rect.width}v${rect.height}h-${rect.width}z`
+ );
+ }
+
+ pickerFramePort.postMessage({
+ what: 'svgPaths',
+ ocean: `M0 0h${ow}v${oh}h-${ow}z`,
+ islands: islands.join(''),
+ });
+};
+
+/******************************************************************************/
+
+const mergeStrings = function(urls) {
+ if ( urls.length === 0 ) { return ''; }
+ if (
+ urls.length === 1 ||
+ self.diff_match_patch instanceof Function === false
+ ) {
+ return urls[0];
+ }
+ const differ = new self.diff_match_patch();
+ let merged = urls[0];
+ for ( let i = 1; i < urls.length; i++ ) {
+ // The differ works at line granularity: we insert a linefeed after
+ // each character to trick the differ to work at character granularity.
+ const diffs = differ.diff_main(
+ urls[i].split('').join('\n'),
+ merged.split('').join('\n')
+ );
+ const result = [];
+ for ( const diff of diffs ) {
+ if ( diff[0] !== 0 ) {
+ result.push('*');
+ } else {
+ result.push(diff[1].replace(/\n+/g, ''));
+ }
+ merged = result.join('');
+ }
+ }
+ // Keep usage of wildcards to a sane level, too many of them can cause
+ // high overhead filters
+ merged = merged.replace(/^\*+$/, '')
+ .replace(/\*{2,}/g, '*')
+ .replace(/([^*]{1,3}\*)(?:[^*]{1,3}\*)+/g, '$1');
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1494
+ let pos = merged.indexOf('/');
+ if ( pos === -1 ) { pos = merged.length; }
+ return merged.slice(0, pos).includes('*') ? urls[0] : merged;
+};
+
+/******************************************************************************/
+
+// Remove fragment part from a URL.
+
+const trimFragmentFromURL = function(url) {
+ const pos = url.indexOf('#');
+ return pos !== -1 ? url.slice(0, pos) : url;
+};
+
+/******************************************************************************/
+
+// https://github.com/gorhill/uBlock/issues/1897
+// Ignore `data:` URI, they can't be handled by an HTTP observer.
+
+const backgroundImageURLFromElement = function(elem) {
+ const style = window.getComputedStyle(elem);
+ const bgImg = style.backgroundImage || '';
+ const matches = /^url\((["']?)([^"']+)\1\)$/.exec(bgImg);
+ const url = matches !== null && matches.length === 3 ? matches[2] : '';
+ return url.lastIndexOf('data:', 0) === -1
+ ? trimFragmentFromURL(url.slice(0, 1024))
+ : '';
+};
+
+/******************************************************************************/
+
+// https://github.com/gorhill/uBlock/issues/1725#issuecomment-226479197
+// Limit returned string to 1024 characters.
+// Also, return only URLs which will be seen by an HTTP observer.
+// https://github.com/uBlockOrigin/uBlock-issues/issues/2260
+// Maybe get to the actual URL indirectly.
+const resourceURLsFromElement = function(elem) {
+ const urls = [];
+ const tagName = elem.localName;
+ const prop = netFilter1stSources[tagName];
+ if ( prop === undefined ) {
+ const url = backgroundImageURLFromElement(elem);
+ if ( url !== '' ) { urls.push(url); }
+ return urls;
+ }
+ let s = elem[prop];
+ if ( s instanceof SVGAnimatedString ) {
+ s = s.baseVal;
+ }
+ if ( typeof s === 'string' && /^https?:\/\//.test(s) ) {
+ urls.push(trimFragmentFromURL(s.slice(0, 1024)));
+ }
+ resourceURLsFromSrcset(elem, urls);
+ resourceURLsFromPicture(elem, urls);
+ return urls;
+};
+
+// https://html.spec.whatwg.org/multipage/images.html#parsing-a-srcset-attribute
+// https://github.com/uBlockOrigin/uBlock-issues/issues/1071
+const resourceURLsFromSrcset = function(elem, out) {
+ let srcset = elem.srcset;
+ if ( typeof srcset !== 'string' || srcset === '' ) { return; }
+ for(;;) {
+ // trim whitespace
+ srcset = srcset.trim();
+ if ( srcset.length === 0 ) { break; }
+ // abort in case of leading comma
+ if ( /^,/.test(srcset) ) { break; }
+ // collect and consume all non-whitespace characters
+ let match = /^\S+/.exec(srcset);
+ if ( match === null ) { break; }
+ srcset = srcset.slice(match.index + match[0].length);
+ let url = match[0];
+ // consume descriptor, if any
+ if ( /,$/.test(url) ) {
+ url = url.replace(/,$/, '');
+ if ( /,$/.test(url) ) { break; }
+ } else {
+ match = /^[^,]*(?:\(.+?\))?[^,]*(?:,|$)/.exec(srcset);
+ if ( match === null ) { break; }
+ srcset = srcset.slice(match.index + match[0].length);
+ }
+ const parsedURL = new URL(url, document.baseURI);
+ if ( parsedURL.pathname.length === 0 ) { continue; }
+ out.push(trimFragmentFromURL(parsedURL.href));
+ }
+};
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/2069#issuecomment-1080600661
+// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture
+const resourceURLsFromPicture = function(elem, out) {
+ if ( elem.localName === 'source' ) { return; }
+ const picture = elem.parentElement;
+ if ( picture === null || picture.localName !== 'picture' ) { return; }
+ const sources = picture.querySelectorAll(':scope > source');
+ for ( const source of sources ) {
+ const urls = resourceURLsFromElement(source);
+ if ( urls.length === 0 ) { continue; }
+ out.push(...urls);
+ }
+};
+
+/******************************************************************************/
+
+const netFilterFromUnion = function(patternIn, out) {
+ // Reset reference filter when dealing with unrelated URLs
+ const currentHostname = self.location.hostname;
+ if (
+ lastNetFilterUnion === '' ||
+ currentHostname === '' ||
+ currentHostname !== lastNetFilterHostname
+ ) {
+ lastNetFilterHostname = currentHostname;
+ lastNetFilterUnion = patternIn;
+ vAPI.messaging.send('elementPicker', {
+ what: 'elementPickerEprom',
+ lastNetFilterSession,
+ lastNetFilterHostname,
+ lastNetFilterUnion,
+ });
+ return;
+ }
+
+ // Related URLs
+ lastNetFilterHostname = currentHostname;
+ let patternOut = mergeStrings([ patternIn, lastNetFilterUnion ]);
+ if ( patternOut !== '/*' && patternOut !== patternIn ) {
+ const filter = `||${patternOut}`;
+ if ( out.indexOf(filter) === -1 ) {
+ out.push(filter);
+ }
+ lastNetFilterUnion = patternOut;
+ }
+
+ // Remember across element picker sessions
+ vAPI.messaging.send('elementPicker', {
+ what: 'elementPickerEprom',
+ lastNetFilterSession,
+ lastNetFilterHostname,
+ lastNetFilterUnion,
+ });
+};
+
+/******************************************************************************/
+
+// Extract the best possible net filter, i.e. as specific as possible.
+
+const netFilterFromElement = function(elem) {
+ if ( elem === null ) { return 0; }
+ if ( elem.nodeType !== 1 ) { return 0; }
+ const urls = resourceURLsFromElement(elem);
+ if ( urls.length === 0 ) { return 0; }
+
+ if ( candidateElements.indexOf(elem) === -1 ) {
+ candidateElements.push(elem);
+ }
+
+ const candidates = netFilterCandidates;
+ const len = candidates.length;
+
+ for ( let i = 0; i < urls.length; i++ ) {
+ urls[i] = urls[i].replace(/^https?:\/\//, '');
+ }
+ const pattern = mergeStrings(urls);
+
+
+ if ( bestCandidateFilter === null && elem.matches('html,body') === false ) {
+ bestCandidateFilter = {
+ type: 'net',
+ filters: candidates,
+ slot: candidates.length
+ };
+ }
+
+ candidates.push(`||${pattern}`);
+
+ // Suggest a less narrow filter if possible
+ const pos = pattern.indexOf('?');
+ if ( pos !== -1 ) {
+ candidates.push(`||${pattern.slice(0, pos)}`);
+ }
+
+ // Suggest a filter which is a result of combining more than one URL.
+ netFilterFromUnion(pattern, candidates);
+
+ return candidates.length - len;
+};
+
+const netFilter1stSources = {
+ 'audio': 'src',
+ 'embed': 'src',
+ 'iframe': 'src',
+ 'img': 'src',
+ 'image': 'href',
+ 'object': 'data',
+ 'source': 'src',
+ 'video': 'src'
+};
+
+const filterTypes = {
+ 'audio': 'media',
+ 'embed': 'object',
+ 'iframe': 'subdocument',
+ 'img': 'image',
+ 'object': 'object',
+ 'video': 'media',
+};
+
+/******************************************************************************/
+
+// Extract the best possible cosmetic filter, i.e. as specific as possible.
+
+// https://github.com/gorhill/uBlock/issues/1725
+// Also take into account the `src` attribute for `img` elements -- and limit
+// the value to the 1024 first characters.
+
+const cosmeticFilterFromElement = function(elem) {
+ if ( elem === null ) { return 0; }
+ if ( elem.nodeType !== 1 ) { return 0; }
+ if ( noCosmeticFiltering ) { return 0; }
+
+ if ( candidateElements.indexOf(elem) === -1 ) {
+ candidateElements.push(elem);
+ }
+
+ let selector = '';
+
+ // Id
+ let v = typeof elem.id === 'string' && CSS.escape(elem.id);
+ if ( v ) {
+ selector = '#' + v;
+ }
+
+ // Class(es)
+ v = elem.classList;
+ if ( v ) {
+ let i = v.length || 0;
+ while ( i-- ) {
+ selector += '.' + CSS.escape(v.item(i));
+ }
+ }
+
+ // Tag name
+ const tagName = CSS.escape(elem.localName);
+
+ // Use attributes if still no selector found.
+ // https://github.com/gorhill/uBlock/issues/1901
+ // Trim attribute value, this may help in case of malformed HTML.
+ //
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1923
+ // Escape unescaped `"` in attribute values
+ if ( selector === '' ) {
+ let attributes = [], attr;
+ switch ( tagName ) {
+ case 'a':
+ v = elem.getAttribute('href');
+ if ( v ) {
+ v = v.trim().replace(/\?.*$/, '');
+ if ( v.length ) {
+ attributes.push({ k: 'href', v: v });
+ }
+ }
+ break;
+ case 'iframe':
+ case 'img':
+ v = elem.getAttribute('src');
+ if ( v && v.length !== 0 ) {
+ v = v.trim();
+ if ( v.startsWith('data:') ) {
+ let pos = v.indexOf(',');
+ if ( pos !== -1 ) {
+ v = v.slice(0, pos + 1);
+ }
+ } else if ( v.startsWith('blob:') ) {
+ v = new URL(v.slice(5));
+ v.pathname = '';
+ v = 'blob:' + v.href;
+ }
+ attributes.push({ k: 'src', v: v.slice(0, 256) });
+ break;
+ }
+ v = elem.getAttribute('alt');
+ if ( v && v.length !== 0 ) {
+ attributes.push({ k: 'alt', v: v });
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ while ( (attr = attributes.pop()) ) {
+ if ( attr.v.length === 0 ) { continue; }
+ const w = attr.v.replace(/([^\\])"/g, '$1\\"');
+ v = elem.getAttribute(attr.k);
+ if ( attr.v === v ) {
+ selector += `[${attr.k}="${w}"]`;
+ } else if ( v.startsWith(attr.v) ) {
+ selector += `[${attr.k}^="${w}"]`;
+ } else {
+ selector += `[${attr.k}*="${w}"]`;
+ }
+ }
+ }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/17
+ // If selector is ambiguous at this point, add the element name to
+ // further narrow it down.
+ const parentNode = elem.parentNode;
+ if (
+ selector === '' ||
+ safeQuerySelectorAll(parentNode, `:scope > ${selector}`).length > 1
+ ) {
+ selector = tagName + selector;
+ }
+
+ // https://github.com/chrisaljoudi/uBlock/issues/637
+ // If the selector is still ambiguous at this point, further narrow using
+ // `nth-of-type`. It is preferable to use `nth-of-type` as opposed to
+ // `nth-child`, as `nth-of-type` is less volatile.
+ if ( safeQuerySelectorAll(parentNode, `:scope > ${selector}`).length > 1 ) {
+ let i = 1;
+ while ( elem.previousSibling !== null ) {
+ elem = elem.previousSibling;
+ if (
+ typeof elem.localName === 'string' &&
+ elem.localName === tagName
+ ) {
+ i++;
+ }
+ }
+ selector += `:nth-of-type(${i})`;
+ }
+
+ if ( bestCandidateFilter === null ) {
+ bestCandidateFilter = {
+ type: 'cosmetic',
+ filters: cosmeticFilterCandidates,
+ slot: cosmeticFilterCandidates.length
+ };
+ }
+
+ cosmeticFilterCandidates.push(`##${selector}`);
+
+ return 1;
+};
+
+/******************************************************************************/
+
+const filtersFrom = function(x, y) {
+ bestCandidateFilter = null;
+ netFilterCandidates.length = 0;
+ cosmeticFilterCandidates.length = 0;
+ candidateElements.length = 0;
+
+ // We need at least one element.
+ let first = null;
+ if ( typeof x === 'number' ) {
+ first = elementFromPoint(x, y);
+ } else if ( x instanceof HTMLElement ) {
+ first = x;
+ x = undefined;
+ }
+
+ // https://github.com/gorhill/uBlock/issues/1545
+ // Network filter candidates from all other elements found at [x,y].
+ // https://www.reddit.com/r/uBlockOrigin/comments/qmjk36/
+ // Extract network candidates first.
+ if ( typeof x === 'number' ) {
+ const magicAttr = `${pickerUniqueId}-clickblind`;
+ pickerFrame.setAttribute(magicAttr, '');
+ const elems = document.elementsFromPoint(x, y);
+ pickerFrame.removeAttribute(magicAttr);
+ for ( const elem of elems ) {
+ netFilterFromElement(elem);
+ }
+ } else if ( first !== null ) {
+ netFilterFromElement(first);
+ }
+
+ // Cosmetic filter candidates from ancestors.
+ // https://github.com/gorhill/uBlock/issues/2519
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/17
+ // Prepend `body` if full selector is ambiguous.
+ let elem = first;
+ while ( elem && elem !== document.body ) {
+ cosmeticFilterFromElement(elem);
+ elem = elem.parentNode;
+ }
+ // The body tag is needed as anchor only when the immediate child
+ // uses `nth-of-type`.
+ let i = cosmeticFilterCandidates.length;
+ if ( i !== 0 ) {
+ const selector = cosmeticFilterCandidates[i-1].slice(2);
+ if ( safeQuerySelectorAll(document.body, selector).length > 1 ) {
+ cosmeticFilterCandidates.push('##body');
+ }
+ }
+
+ // https://github.com/gorhill/uBlock/commit/ebaa8a8bb28aef043a68c99965fe6c128a3fe5e4#commitcomment-63818019
+ // If still no best candidate, just use whatever is available in network
+ // filter candidates -- which may have been previously skipped in favor
+ // of cosmetic filters.
+ if ( bestCandidateFilter === null && netFilterCandidates.length !== 0 ) {
+ bestCandidateFilter = {
+ type: 'net',
+ filters: netFilterCandidates,
+ slot: 0
+ };
+ }
+
+ return netFilterCandidates.length + cosmeticFilterCandidates.length;
+};
+
+/*******************************************************************************
+
+ filterToDOMInterface.queryAll
+ @desc Look-up all the HTML elements matching the filter passed in
+ argument.
+ @param string, a cosmetic or network filter.
+ @param function, called once all items matching the filter have been
+ collected.
+ @return array, or undefined if the filter is invalid.
+
+ filterToDOMInterface.preview
+ @desc Apply/unapply filter to the DOM.
+ @param string, a cosmetic of network filter, or literal false to remove
+ the effects of the filter on the DOM.
+ @return undefined.
+
+ TODO: need to be revised once I implement chained cosmetic operators.
+
+*/
+
+const filterToDOMInterface = (( ) => {
+ const reHnAnchorPrefix = '^[\\w-]+://(?:[^/?#]+\\.)?';
+ const reCaret = '(?:[^%.0-9a-z_-]|$)';
+ const rePseudoElements = /:(?::?after|:?before|:[a-z-]+)$/;
+
+ // Net filters: we need to lookup manually -- translating into a foolproof
+ // CSS selector is just not possible.
+ //
+ // https://github.com/chrisaljoudi/uBlock/issues/945
+ // Transform into a regular expression, this allows the user to
+ // edit and insert wildcard(s) into the proposed filter.
+ // https://www.reddit.com/r/uBlockOrigin/comments/c5do7w/
+ // Better handling of pure hostname filters. Also, discard single
+ // alphanumeric character filters.
+ const fromNetworkFilter = function(filter) {
+ const out = [];
+ if ( /^[0-9a-z]$/i.test(filter) ) { return out; }
+ let reStr = '';
+ if (
+ filter.length > 2 &&
+ filter.startsWith('/') &&
+ filter.endsWith('/')
+ ) {
+ reStr = filter.slice(1, -1);
+ } else if ( /^\w[\w.-]*[a-z]$/i.test(filter) ) {
+ reStr = reHnAnchorPrefix +
+ filter.toLowerCase().replace(/\./g, '\\.') +
+ reCaret;
+ } else {
+ let rePrefix = '', reSuffix = '';
+ if ( filter.startsWith('||') ) {
+ rePrefix = reHnAnchorPrefix;
+ filter = filter.slice(2);
+ } else if ( filter.startsWith('|') ) {
+ rePrefix = '^';
+ filter = filter.slice(1);
+ }
+ if ( filter.endsWith('|') ) {
+ reSuffix = '$';
+ filter = filter.slice(0, -1);
+ }
+ reStr = rePrefix +
+ filter.replace(/[.+?${}()|[\]\\]/g, '\\$&')
+ .replace(/\*+/g, '.*')
+ .replace(/\^/g, reCaret) +
+ reSuffix;
+ }
+ let reFilter = null;
+ try {
+ reFilter = new RegExp(reStr, 'i');
+ }
+ catch (e) {
+ return out;
+ }
+
+ // Lookup by tag names.
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/2260
+ // Maybe get to the actual URL indirectly.
+ const elems = document.querySelectorAll(
+ Object.keys(netFilter1stSources).join()
+ );
+ for ( const elem of elems ) {
+ const srcProp = netFilter1stSources[elem.localName];
+ let src = elem[srcProp];
+ if ( src instanceof SVGAnimatedString ) {
+ src = src.baseVal;
+ }
+ if (
+ typeof src === 'string' &&
+ reFilter.test(src) ||
+ typeof elem.currentSrc === 'string' &&
+ reFilter.test(elem.currentSrc)
+ ) {
+ out.push({
+ elem,
+ src: srcProp,
+ opt: filterTypes[elem.localName],
+ style: vAPI.hideStyle,
+ });
+ }
+ }
+
+ // Find matching background image in current set of candidate elements.
+ for ( const elem of candidateElements ) {
+ if ( reFilter.test(backgroundImageURLFromElement(elem)) ) {
+ out.push({
+ elem,
+ bg: true,
+ opt: 'image',
+ style: hideBackgroundStyle,
+ });
+ }
+ }
+
+ return out;
+ };
+
+ // Cosmetic filters: these are straight CSS selectors.
+ //
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/389
+ // Test filter using comma-separated list to better detect invalid CSS
+ // selectors.
+ //
+ // https://github.com/gorhill/uBlock/issues/2515
+ // Remove trailing pseudo-element when querying.
+ const fromPlainCosmeticFilter = function(raw) {
+ let elems;
+ try {
+ document.documentElement.matches(`${raw},\na`);
+ elems = document.querySelectorAll(
+ raw.replace(rePseudoElements, '')
+ );
+ }
+ catch (e) {
+ return;
+ }
+ const out = [];
+ for ( const elem of elems ) {
+ if ( elem === pickerFrame ) { continue; }
+ out.push({ elem, raw, style: vAPI.hideStyle });
+ }
+ return out;
+ };
+
+ // https://github.com/gorhill/uBlock/issues/1772
+ // Handle procedural cosmetic filters.
+ //
+ // https://github.com/gorhill/uBlock/issues/2515
+ // Remove trailing pseudo-element when querying.
+ const fromCompiledCosmeticFilter = function(raw) {
+ if ( noCosmeticFiltering ) { return; }
+ if ( typeof raw !== 'string' ) { return; }
+ let elems, style;
+ try {
+ const o = JSON.parse(raw);
+ elems = vAPI.domFilterer.createProceduralFilter(o).exec();
+ switch ( o.action && o.action[0] || '' ) {
+ case '':
+ case 'remove':
+ style = vAPI.hideStyle;
+ break;
+ case 'style':
+ style = o.action[1];
+ break;
+ default:
+ break;
+ }
+ } catch(ex) {
+ return;
+ }
+ if ( !elems ) { return; }
+ const out = [];
+ for ( const elem of elems ) {
+ out.push({ elem, raw, style });
+ }
+ return out;
+ };
+
+ vAPI.epickerStyleProxies = vAPI.epickerStyleProxies || new Map();
+
+ let lastFilter;
+ let lastResultset;
+ let previewing = false;
+
+ const queryAll = function(details) {
+ let { filter, compiled } = details;
+ filter = filter.trim();
+ if ( filter === lastFilter ) { return lastResultset; }
+ unapply();
+ if ( filter === '' || filter === '!' ) {
+ lastFilter = '';
+ lastResultset = undefined;
+ return;
+ }
+ lastFilter = filter;
+ if ( reCosmeticAnchor.test(filter) === false ) {
+ lastResultset = fromNetworkFilter(filter);
+ if ( previewing ) { apply(); }
+ return lastResultset;
+ }
+ lastResultset = fromPlainCosmeticFilter(compiled);
+ if ( lastResultset ) {
+ if ( previewing ) { apply(); }
+ return lastResultset;
+ }
+ // Procedural cosmetic filter
+ lastResultset = fromCompiledCosmeticFilter(compiled);
+ if ( previewing ) { apply(); }
+ return lastResultset;
+ };
+
+ const apply = function() {
+ unapply();
+ if ( Array.isArray(lastResultset) === false ) { return; }
+ const rootElem = document.documentElement;
+ for ( const { elem, style } of lastResultset ) {
+ if ( elem === pickerFrame ) { continue; }
+ if ( style === undefined ) { continue; }
+ if ( elem === rootElem && style === vAPI.hideStyle ) { continue; }
+ let styleToken = vAPI.epickerStyleProxies.get(style);
+ if ( styleToken === undefined ) {
+ styleToken = vAPI.randomToken();
+ vAPI.epickerStyleProxies.set(style, styleToken);
+ vAPI.userStylesheet.add(`[${styleToken}]\n{${style}}`, true);
+ }
+ elem.setAttribute(styleToken, '');
+ }
+ };
+
+ const unapply = function() {
+ for ( const styleToken of vAPI.epickerStyleProxies.values() ) {
+ for ( const elem of document.querySelectorAll(`[${styleToken}]`) ) {
+ elem.removeAttribute(styleToken);
+ }
+ }
+ };
+
+ // https://www.reddit.com/r/uBlockOrigin/comments/c62irc/
+ // Support injecting the cosmetic filters into the DOM filterer
+ // immediately rather than wait for the next page load.
+ const preview = function(state, permanent = false) {
+ previewing = state !== false;
+ if ( previewing === false ) {
+ return unapply();
+ }
+ if ( Array.isArray(lastResultset) === false ) { return; }
+ if ( permanent === false || reCosmeticAnchor.test(lastFilter) === false ) {
+ return apply();
+ }
+ if ( noCosmeticFiltering ) { return; }
+ const cssSelectors = new Set();
+ const proceduralSelectors = new Set();
+ for ( const { raw } of lastResultset ) {
+ if ( raw.startsWith('{') ) {
+ proceduralSelectors.add(raw);
+ } else {
+ cssSelectors.add(raw);
+ }
+ }
+ if ( cssSelectors.size !== 0 ) {
+ vAPI.domFilterer.addCSS(
+ `${Array.from(cssSelectors).join('\n')}\n{${vAPI.hideStyle}}`,
+ { mustInject: true }
+ );
+ }
+ if ( proceduralSelectors.size !== 0 ) {
+ vAPI.domFilterer.addProceduralSelectors(
+ Array.from(proceduralSelectors)
+ );
+ }
+ };
+
+ return { preview, queryAll };
+})();
+
+/******************************************************************************/
+
+const onOptimizeCandidates = function(details) {
+ const { candidates } = details;
+ const results = [];
+ for ( const paths of candidates ) {
+ let count = Number.MAX_SAFE_INTEGER;
+ let selector = '';
+ for ( let i = 0, n = paths.length; i < n; i++ ) {
+ const s = paths.slice(n - i - 1).join('');
+ const elems = document.querySelectorAll(s);
+ if ( elems.length < count ) {
+ selector = s;
+ count = elems.length;
+ }
+ }
+ results.push({ selector: `##${selector}`, count });
+ }
+ // Sort by most match count and shortest selector to least match count and
+ // longest selector.
+ results.sort((a, b) => {
+ const r = b.count - a.count;
+ if ( r !== 0 ) { return r; }
+ return a.selector.length - b.selector.length;
+ });
+ pickerFramePort.postMessage({
+ what: 'candidatesOptimized',
+ candidates: results.map(a => a.selector),
+ slot: details.slot,
+ });
+};
+
+/******************************************************************************/
+
+const showDialog = function(options) {
+ pickerFramePort.postMessage({
+ what: 'showDialog',
+ url: self.location.href,
+ netFilters: netFilterCandidates,
+ cosmeticFilters: cosmeticFilterCandidates,
+ filter: bestCandidateFilter,
+ options,
+ });
+};
+
+/******************************************************************************/
+
+const elementFromPoint = (( ) => {
+ let lastX, lastY;
+
+ return (x, y) => {
+ if ( x !== undefined ) {
+ lastX = x; lastY = y;
+ } else if ( lastX !== undefined ) {
+ x = lastX; y = lastY;
+ } else {
+ return null;
+ }
+ if ( !pickerFrame ) { return null; }
+ const magicAttr = `${pickerUniqueId}-clickblind`;
+ pickerFrame.setAttribute(magicAttr, '');
+ let elem = document.elementFromPoint(x, y);
+ if (
+ elem === null || /* to skip following tests */
+ elem === document.body ||
+ elem === document.documentElement || (
+ pickerBootArgs.zap !== true &&
+ noCosmeticFiltering &&
+ resourceURLsFromElement(elem).length === 0
+ )
+ ) {
+ elem = null;
+ }
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/380
+ pickerFrame.removeAttribute(magicAttr);
+ return elem;
+ };
+})();
+
+/******************************************************************************/
+
+const highlightElementAtPoint = function(mx, my) {
+ const elem = elementFromPoint(mx, my);
+ highlightElements(elem ? [ elem ] : []);
+};
+
+/******************************************************************************/
+
+const filterElementAtPoint = function(mx, my, broad) {
+ if ( filtersFrom(mx, my) === 0 ) { return; }
+ showDialog({ broad });
+};
+
+/******************************************************************************/
+
+// https://www.reddit.com/r/uBlockOrigin/comments/bktxtb/scrolling_doesnt_work/emn901o
+// Override 'fixed' position property on body element if present.
+
+// With touch-driven devices, first highlight the element and remove only
+// when tapping again the highlighted area.
+
+const zapElementAtPoint = function(mx, my, options) {
+ if ( options.highlight ) {
+ const elem = elementFromPoint(mx, my);
+ if ( elem ) {
+ highlightElements([ elem ]);
+ }
+ return;
+ }
+
+ let elemToRemove = targetElements.length !== 0 && targetElements[0] || null;
+ if ( elemToRemove === null && mx !== undefined ) {
+ elemToRemove = elementFromPoint(mx, my);
+ }
+
+ if ( elemToRemove instanceof Element === false ) { return; }
+
+ const getStyleValue = (elem, prop) => {
+ const style = window.getComputedStyle(elem);
+ return style ? style[prop] : '';
+ };
+
+ // Heuristic to detect scroll-locking: remove such lock when detected.
+ let maybeScrollLocked = elemToRemove.shadowRoot instanceof DocumentFragment;
+ if ( maybeScrollLocked === false ) {
+ let elem = elemToRemove;
+ do {
+ maybeScrollLocked =
+ parseInt(getStyleValue(elem, 'zIndex'), 10) >= 1000 ||
+ getStyleValue(elem, 'position') === 'fixed';
+ elem = elem.parentElement;
+ } while ( elem !== null && maybeScrollLocked === false );
+ }
+ if ( maybeScrollLocked ) {
+ const doc = document;
+ if ( getStyleValue(doc.body, 'overflowY') === 'hidden' ) {
+ doc.body.style.setProperty('overflow', 'auto', 'important');
+ }
+ if ( getStyleValue(doc.body, 'position') === 'fixed' ) {
+ doc.body.style.setProperty('position', 'initial', 'important');
+ }
+ if ( getStyleValue(doc.documentElement, 'position') === 'fixed' ) {
+ doc.documentElement.style.setProperty('position', 'initial', 'important');
+ }
+ if ( getStyleValue(doc.documentElement, 'overflowY') === 'hidden' ) {
+ doc.documentElement.style.setProperty('overflow', 'auto', 'important');
+ }
+ }
+ elemToRemove.remove();
+ highlightElementAtPoint(mx, my);
+};
+
+/******************************************************************************/
+
+const onKeyPressed = function(ev) {
+ // Delete
+ if (
+ (ev.key === 'Delete' || ev.key === 'Backspace') &&
+ pickerBootArgs.zap
+ ) {
+ ev.stopPropagation();
+ ev.preventDefault();
+ zapElementAtPoint();
+ return;
+ }
+ // Esc
+ if ( ev.key === 'Escape' || ev.which === 27 ) {
+ ev.stopPropagation();
+ ev.preventDefault();
+ filterToDOMInterface.preview(false);
+ quitPicker();
+ return;
+ }
+};
+
+/******************************************************************************/
+
+// https://github.com/chrisaljoudi/uBlock/issues/190
+// May need to dynamically adjust the height of the overlay + new position
+// of highlighted elements.
+
+const onViewportChanged = function() {
+ highlightElements(targetElements, true);
+};
+
+/******************************************************************************/
+
+// Auto-select a specific target, if any, and if possible
+
+const startPicker = function() {
+ pickerFrame.focus();
+
+ self.addEventListener('scroll', onViewportChanged, { passive: true });
+ self.addEventListener('resize', onViewportChanged, { passive: true });
+ self.addEventListener('keydown', onKeyPressed, true);
+
+ // Try using mouse position
+ if (
+ pickerBootArgs.mouse &&
+ vAPI.mouseClick instanceof Object &&
+ typeof vAPI.mouseClick.x === 'number' &&
+ vAPI.mouseClick.x > 0
+ ) {
+ if ( filtersFrom(vAPI.mouseClick.x, vAPI.mouseClick.y) !== 0 ) {
+ return showDialog();
+ }
+ }
+
+ // No mouse position available, use suggested target
+ const target = pickerBootArgs.target || '';
+ const pos = target.indexOf('\t');
+ if ( pos === -1 ) { return; }
+
+ const srcAttrMap = {
+ 'a': 'href',
+ 'audio': 'src',
+ 'embed': 'src',
+ 'iframe': 'src',
+ 'img': 'src',
+ 'video': 'src',
+ };
+ const tagName = target.slice(0, pos);
+ const url = target.slice(pos + 1);
+ const attr = srcAttrMap[tagName];
+ if ( attr === undefined ) { return; }
+ const elems = document.getElementsByTagName(tagName);
+ for ( const elem of elems ) {
+ if ( elem === pickerFrame ) { continue; }
+ const srcs = resourceURLsFromElement(elem);
+ if (
+ (srcs.length !== 0 && srcs.includes(url) === false) ||
+ (srcs.length === 0 && url !== 'about:blank')
+ ) {
+ continue;
+ }
+ filtersFrom(elem);
+ if (
+ netFilterCandidates.length !== 0 ||
+ cosmeticFilterCandidates.length !== 0
+ ) {
+ if ( pickerBootArgs.mouse !== true ) {
+ elem.scrollIntoView({
+ behavior: 'smooth',
+ block: 'center',
+ inline: 'center'
+ });
+ }
+ showDialog({ broad: true });
+ }
+ return;
+ }
+
+ // A target was specified, but it wasn't found: abort.
+ quitPicker();
+};
+
+/******************************************************************************/
+
+// Let's have the element picker code flushed from memory when no longer
+// in use: to ensure this, release all local references.
+
+const quitPicker = function() {
+ self.removeEventListener('scroll', onViewportChanged, { passive: true });
+ self.removeEventListener('resize', onViewportChanged, { passive: true });
+ self.removeEventListener('keydown', onKeyPressed, true);
+ vAPI.shutdown.remove(quitPicker);
+ if ( pickerFramePort ) {
+ pickerFramePort.close();
+ pickerFramePort = null;
+ }
+ if ( pickerFrame ) {
+ pickerFrame.remove();
+ pickerFrame = null;
+ }
+ vAPI.userStylesheet.remove(pickerCSS);
+ vAPI.userStylesheet.apply();
+ vAPI.pickerFrame = false;
+ self.focus();
+};
+
+vAPI.shutdown.add(quitPicker);
+
+/******************************************************************************/
+
+const onDialogMessage = function(msg) {
+ switch ( msg.what ) {
+ case 'start':
+ startPicker();
+ if ( pickerFramePort === null ) { break; }
+ if ( targetElements.length === 0 ) {
+ highlightElements([], true);
+ }
+ break;
+ case 'optimizeCandidates':
+ onOptimizeCandidates(msg);
+ break;
+ case 'dialogCreate':
+ filterToDOMInterface.queryAll(msg);
+ filterToDOMInterface.preview(true, true);
+ quitPicker();
+ break;
+ case 'dialogSetFilter': {
+ const resultset = filterToDOMInterface.queryAll(msg) || [];
+ highlightElements(resultset.map(a => a.elem), true);
+ if ( msg.filter === '!' ) { break; }
+ pickerFramePort.postMessage({
+ what: 'resultsetDetails',
+ count: resultset.length,
+ opt: resultset.length !== 0 ? resultset[0].opt : undefined,
+ });
+ break;
+ }
+ case 'quitPicker':
+ filterToDOMInterface.preview(false);
+ quitPicker();
+ break;
+ case 'highlightElementAtPoint':
+ highlightElementAtPoint(msg.mx, msg.my);
+ break;
+ case 'unhighlight':
+ highlightElements([]);
+ break;
+ case 'filterElementAtPoint':
+ filterElementAtPoint(msg.mx, msg.my, msg.broad);
+ break;
+ case 'zapElementAtPoint':
+ zapElementAtPoint(msg.mx, msg.my, msg.options);
+ if ( msg.options.highlight !== true && msg.options.stay !== true ) {
+ quitPicker();
+ }
+ break;
+ case 'togglePreview':
+ filterToDOMInterface.preview(msg.state);
+ if ( msg.state === false ) {
+ highlightElements(targetElements, true);
+ }
+ break;
+ default:
+ break;
+ }
+};
+
+/******************************************************************************/
+
+// epicker-ui.html will be injected in the page through an iframe, and
+// is a sandboxed so as to prevent the page from interfering with its
+// content and behavior.
+//
+// The purpose of epicker.js is to:
+// - Install the element picker UI, and wait for the component to establish
+// a direct communication channel.
+// - Lookup candidate filters from elements at a specific position.
+// - Highlight element(s) at a specific position or according to whether
+// they match candidate filters;
+// - Preview the result of applying a candidate filter;
+//
+// When the element picker is installed on a page, the only change the page
+// sees is an iframe with a random attribute. The page can't see the content
+// of the iframe, and cannot interfere with its style properties. However the
+// page can remove the iframe.
+
+// The DOM filterer will not be present when cosmetic filtering is disabled.
+const noCosmeticFiltering =
+ vAPI.domFilterer instanceof Object === false ||
+ vAPI.noSpecificCosmeticFiltering === true;
+
+// https://github.com/gorhill/uBlock/issues/1529
+// In addition to inline styles, harden the element picker styles by using
+// dedicated CSS rules.
+const pickerCSSStyle = [
+ 'background: transparent',
+ 'border: 0',
+ 'border-radius: 0',
+ 'box-shadow: none',
+ 'color-scheme: light dark',
+ 'display: block',
+ 'filter: none',
+ 'height: 100vh',
+ 'left: 0',
+ 'margin: 0',
+ 'max-height: none',
+ 'max-width: none',
+ 'min-height: unset',
+ 'min-width: unset',
+ 'opacity: 1',
+ 'outline: 0',
+ 'padding: 0',
+ 'pointer-events: auto',
+ 'position: fixed',
+ 'top: 0',
+ 'transform: none',
+ 'visibility: hidden',
+ 'width: 100%',
+ 'z-index: 2147483647',
+ ''
+].join(' !important;\n');
+
+
+const pickerCSS = `
+:root > [${pickerUniqueId}] {
+ ${pickerCSSStyle}
+}
+:root > [${pickerUniqueId}-loaded] {
+ visibility: visible !important;
+}
+:root [${pickerUniqueId}-clickblind] {
+ pointer-events: none !important;
+}
+`;
+
+vAPI.userStylesheet.add(pickerCSS);
+vAPI.userStylesheet.apply();
+
+let pickerBootArgs;
+let pickerFramePort = null;
+
+const bootstrap = async ( ) => {
+ pickerBootArgs = await vAPI.messaging.send('elementPicker', {
+ what: 'elementPickerArguments',
+ });
+ if ( typeof pickerBootArgs !== 'object' ) { return; }
+ if ( pickerBootArgs === null ) { return; }
+ // Restore net filter union data if origin is the same.
+ const eprom = pickerBootArgs.eprom || null;
+ if ( eprom !== null && eprom.lastNetFilterSession === lastNetFilterSession ) {
+ lastNetFilterHostname = eprom.lastNetFilterHostname || '';
+ lastNetFilterUnion = eprom.lastNetFilterUnion || '';
+ }
+ const url = new URL(pickerBootArgs.pickerURL);
+ if ( pickerBootArgs.zap ) {
+ url.searchParams.set('zap', '1');
+ }
+ return new Promise(resolve => {
+ const iframe = document.createElement('iframe');
+ iframe.setAttribute(pickerUniqueId, '');
+ document.documentElement.append(iframe);
+ iframe.addEventListener('load', ( ) => {
+ iframe.setAttribute(`${pickerUniqueId}-loaded`, '');
+ const channel = new MessageChannel();
+ pickerFramePort = channel.port1;
+ pickerFramePort.onmessage = ev => {
+ onDialogMessage(ev.data || {});
+ };
+ pickerFramePort.onmessageerror = ( ) => {
+ quitPicker();
+ };
+ iframe.contentWindow.postMessage(
+ { what: 'epickerStart' },
+ url.href,
+ [ channel.port2 ]
+ );
+ resolve(iframe);
+ }, { once: true });
+ iframe.contentWindow.location = url.href;
+ });
+};
+
+let pickerFrame = await bootstrap();
+if ( Boolean(pickerFrame) === false ) {
+ quitPicker();
+}
+
+/******************************************************************************/
+
+})();
+
+
+
+
+
+
+
+
+/*******************************************************************************
+
+ DO NOT:
+ - Remove the following code
+ - Add code beyond the following code
+ Reason:
+ - https://github.com/gorhill/uBlock/pull/3721
+ - uBO never uses the return value from injected content scripts
+
+**/
+
+void 0;
diff --git a/src/js/scriptlets/load-3p-css.js b/src/js/scriptlets/load-3p-css.js
new file mode 100644
index 0000000..bb7d542
--- /dev/null
+++ b/src/js/scriptlets/load-3p-css.js
@@ -0,0 +1,67 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2020-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+(( ) => {
+ if ( typeof vAPI !== 'object' ) { return; }
+
+ if ( vAPI.dynamicReloadToken === undefined ) {
+ vAPI.dynamicReloadToken = vAPI.randomToken();
+ }
+
+ for ( const sheet of Array.from(document.styleSheets) ) {
+ let loaded = false;
+ try {
+ loaded = sheet.rules.length !== 0;
+ } catch(ex) {
+ }
+ if ( loaded ) { continue; }
+ const link = sheet.ownerNode || null;
+ if ( link === null || link.localName !== 'link' ) { continue; }
+ if ( link.hasAttribute(vAPI.dynamicReloadToken) ) { continue; }
+ const clone = link.cloneNode(true);
+ clone.setAttribute(vAPI.dynamicReloadToken, '');
+ link.replaceWith(clone);
+ }
+})();
+
+
+
+
+
+
+
+
+/*******************************************************************************
+
+ DO NOT:
+ - Remove the following code
+ - Add code beyond the following code
+ Reason:
+ - https://github.com/gorhill/uBlock/pull/3721
+ - uBO never uses the return value from injected content scripts
+
+**/
+
+void 0;
diff --git a/src/js/scriptlets/load-large-media-all.js b/src/js/scriptlets/load-large-media-all.js
new file mode 100644
index 0000000..a44539e
--- /dev/null
+++ b/src/js/scriptlets/load-large-media-all.js
@@ -0,0 +1,62 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-2018 Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+(( ) => {
+
+/******************************************************************************/
+
+if (
+ typeof vAPI !== 'object' ||
+ vAPI.loadAllLargeMedia instanceof Function === false
+) {
+ return;
+}
+
+vAPI.loadAllLargeMedia();
+vAPI.loadAllLargeMedia = undefined;
+
+/******************************************************************************/
+
+})();
+
+
+
+
+
+
+
+
+/*******************************************************************************
+
+ DO NOT:
+ - Remove the following code
+ - Add code beyond the following code
+ Reason:
+ - https://github.com/gorhill/uBlock/pull/3721
+ - uBO never uses the return value from injected content scripts
+
+**/
+
+void 0;
diff --git a/src/js/scriptlets/load-large-media-interactive.js b/src/js/scriptlets/load-large-media-interactive.js
new file mode 100644
index 0000000..57198e4
--- /dev/null
+++ b/src/js/scriptlets/load-large-media-interactive.js
@@ -0,0 +1,299 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+(( ) => {
+
+/******************************************************************************/
+
+// This can happen
+if ( typeof vAPI !== 'object' || vAPI.loadAllLargeMedia instanceof Function ) {
+ return;
+}
+
+/******************************************************************************/
+
+const largeMediaElementAttribute = 'data-' + vAPI.sessionId;
+const largeMediaElementSelector =
+ ':root audio[' + largeMediaElementAttribute + '],\n' +
+ ':root img[' + largeMediaElementAttribute + '],\n' +
+ ':root picture[' + largeMediaElementAttribute + '],\n' +
+ ':root video[' + largeMediaElementAttribute + ']';
+
+/******************************************************************************/
+
+const isMediaElement = function(elem) {
+ return /^(?:audio|img|picture|video)$/.test(elem.localName);
+};
+
+/******************************************************************************/
+
+const mediaNotLoaded = function(elem) {
+ switch ( elem.localName ) {
+ case 'audio':
+ case 'video': {
+ const src = elem.src || '';
+ if ( src.startsWith('blob:') ) {
+ elem.autoplay = false;
+ elem.pause();
+ }
+ return elem.readyState === 0 || elem.error !== null;
+ }
+ case 'img': {
+ if ( elem.naturalWidth !== 0 || elem.naturalHeight !== 0 ) {
+ break;
+ }
+ const style = window.getComputedStyle(elem);
+ // For some reason, style can be null with Pale Moon.
+ return style !== null ?
+ style.getPropertyValue('display') !== 'none' :
+ elem.offsetHeight !== 0 && elem.offsetWidth !== 0;
+ }
+ default:
+ break;
+ }
+ return false;
+};
+
+/******************************************************************************/
+
+// For all media resources which have failed to load, trigger a reload.
+
+// <audio> and <video> elements.
+// https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement
+
+const surveyMissingMediaElements = function() {
+ let largeMediaElementCount = 0;
+ for ( const elem of document.querySelectorAll('audio,img,video') ) {
+ if ( mediaNotLoaded(elem) === false ) { continue; }
+ elem.setAttribute(largeMediaElementAttribute, '');
+ largeMediaElementCount += 1;
+ switch ( elem.localName ) {
+ case 'img': {
+ const picture = elem.closest('picture');
+ if ( picture !== null ) {
+ picture.setAttribute(largeMediaElementAttribute, '');
+ }
+ } break;
+ default:
+ break;
+ }
+ }
+ return largeMediaElementCount;
+};
+
+if ( surveyMissingMediaElements() === 0 ) { return; }
+
+// Insert CSS to highlight blocked media elements.
+if ( vAPI.largeMediaElementStyleSheet === undefined ) {
+ vAPI.largeMediaElementStyleSheet = [
+ largeMediaElementSelector + ' {',
+ 'border: 2px dotted red !important;',
+ 'box-sizing: border-box !important;',
+ 'cursor: zoom-in !important;',
+ 'display: inline-block;',
+ 'filter: none !important;',
+ 'font-size: 1rem !important;',
+ 'min-height: 1em !important;',
+ 'min-width: 1em !important;',
+ 'opacity: 1 !important;',
+ 'outline: none !important;',
+ 'transform: none !important;',
+ 'visibility: visible !important;',
+ 'z-index: 2147483647',
+ '}',
+ ].join('\n');
+ vAPI.userStylesheet.add(vAPI.largeMediaElementStyleSheet);
+ vAPI.userStylesheet.apply();
+}
+
+/******************************************************************************/
+
+const loadMedia = async function(elem) {
+ const src = elem.getAttribute('src') || '';
+ elem.removeAttribute('src');
+
+ await vAPI.messaging.send('scriptlets', {
+ what: 'temporarilyAllowLargeMediaElement',
+ });
+
+ if ( src !== '' ) {
+ elem.setAttribute('src', src);
+ }
+ elem.load();
+};
+
+/******************************************************************************/
+
+const loadImage = async function(elem) {
+ const src = elem.getAttribute('src') || '';
+ elem.removeAttribute('src');
+
+ await vAPI.messaging.send('scriptlets', {
+ what: 'temporarilyAllowLargeMediaElement',
+ });
+
+ if ( src !== '' ) {
+ elem.setAttribute('src', src);
+ }
+};
+
+/******************************************************************************/
+
+const loadMany = function(elems) {
+ for ( const elem of elems ) {
+ switch ( elem.localName ) {
+ case 'audio':
+ case 'video':
+ loadMedia(elem);
+ break;
+ case 'img':
+ loadImage(elem);
+ break;
+ default:
+ break;
+ }
+ }
+};
+
+/******************************************************************************/
+
+const onMouseClick = function(ev) {
+ if ( ev.button !== 0 || ev.isTrusted === false ) { return; }
+
+ const toLoad = [];
+ const elems = document.elementsFromPoint instanceof Function
+ ? document.elementsFromPoint(ev.clientX, ev.clientY)
+ : [ ev.target ];
+ for ( const elem of elems ) {
+ if ( elem.matches(largeMediaElementSelector) === false ) { continue; }
+ elem.removeAttribute(largeMediaElementAttribute);
+ if ( mediaNotLoaded(elem) ) {
+ toLoad.push(elem);
+ }
+ }
+
+ if ( toLoad.length === 0 ) { return; }
+
+ loadMany(toLoad);
+
+ ev.preventDefault();
+ ev.stopPropagation();
+};
+
+document.addEventListener('click', onMouseClick, true);
+
+/******************************************************************************/
+
+const onLoadedData = function(ev) {
+ const media = ev.target;
+ if ( media.localName !== 'audio' && media.localName !== 'video' ) {
+ return;
+ }
+ const src = media.src;
+ if ( typeof src === 'string' && src.startsWith('blob:') === false ) {
+ return;
+ }
+ media.autoplay = false;
+ media.pause();
+};
+
+// https://www.reddit.com/r/uBlockOrigin/comments/mxgpmc/
+// Support cases where the media source is not yet set.
+for ( const media of document.querySelectorAll('audio,video') ) {
+ const src = media.src;
+ if (
+ (typeof src === 'string') &&
+ (src === '' || src.startsWith('blob:'))
+ ) {
+ media.autoplay = false;
+ media.pause();
+ }
+}
+
+document.addEventListener('loadeddata', onLoadedData);
+
+/******************************************************************************/
+
+const onLoad = function(ev) {
+ const elem = ev.target;
+ if ( isMediaElement(elem) === false ) { return; }
+ elem.removeAttribute(largeMediaElementAttribute);
+};
+
+document.addEventListener('load', onLoad, true);
+
+/******************************************************************************/
+
+const onLoadError = function(ev) {
+ const elem = ev.target;
+ if ( isMediaElement(elem) === false ) { return; }
+ if ( mediaNotLoaded(elem) ) {
+ elem.setAttribute(largeMediaElementAttribute, '');
+ }
+};
+
+document.addEventListener('error', onLoadError, true);
+
+/******************************************************************************/
+
+vAPI.loadAllLargeMedia = function() {
+ document.removeEventListener('click', onMouseClick, true);
+ document.removeEventListener('loadeddata', onLoadedData, true);
+ document.removeEventListener('load', onLoad, true);
+ document.removeEventListener('error', onLoadError, true);
+
+ const toLoad = [];
+ for ( const elem of document.querySelectorAll(largeMediaElementSelector) ) {
+ elem.removeAttribute(largeMediaElementAttribute);
+ if ( mediaNotLoaded(elem) ) {
+ toLoad.push(elem);
+ }
+ }
+ loadMany(toLoad);
+};
+
+/******************************************************************************/
+
+})();
+
+
+
+
+
+
+
+
+/*******************************************************************************
+
+ DO NOT:
+ - Remove the following code
+ - Add code beyond the following code
+ Reason:
+ - https://github.com/gorhill/uBlock/pull/3721
+ - uBO never uses the return value from injected content scripts
+
+**/
+
+void 0;
diff --git a/src/js/scriptlets/noscript-spoof.js b/src/js/scriptlets/noscript-spoof.js
new file mode 100644
index 0000000..49e9093
--- /dev/null
+++ b/src/js/scriptlets/noscript-spoof.js
@@ -0,0 +1,89 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+// Code below has been imported from uMatrix and modified to fit uBO:
+// https://github.com/gorhill/uMatrix/blob/3f8794dd899a05e066c24066c6c0a2515d5c60d2/src/js/contentscript.js#L464-L531
+
+'use strict';
+
+/******************************************************************************/
+
+// https://github.com/gorhill/uMatrix/issues/232
+// Force `display` property, Firefox is still affected by the issue.
+
+(( ) => {
+ const noscripts = document.querySelectorAll('noscript');
+ if ( noscripts.length === 0 ) { return; }
+
+ const reMetaContent = /^\s*(\d+)\s*;\s*url=(?:"([^"]+)"|'([^']+)'|(.+))/i;
+ const reSafeURL = /^https?:\/\//;
+ let redirectTimer;
+
+ const autoRefresh = function(root) {
+ const meta = root.querySelector('meta[http-equiv="refresh"][content]');
+ if ( meta === null ) { return; }
+ const match = reMetaContent.exec(meta.getAttribute('content'));
+ if ( match === null ) { return; }
+ const refreshURL = (match[2] || match[3] || match[4] || '').trim();
+ let url;
+ try {
+ url = new URL(refreshURL, document.baseURI);
+ } catch(ex) {
+ return;
+ }
+ if ( reSafeURL.test(url.href) === false ) { return; }
+ redirectTimer = setTimeout(( ) => {
+ location.assign(url.href);
+ },
+ parseInt(match[1], 10) * 1000 + 1
+ );
+ meta.parentNode.removeChild(meta);
+ };
+
+ const morphNoscript = function(from) {
+ if ( /^application\/(?:xhtml\+)?xml/.test(document.contentType) ) {
+ const to = document.createElement('span');
+ while ( from.firstChild !== null ) {
+ to.appendChild(from.firstChild);
+ }
+ return to;
+ }
+ const parser = new DOMParser();
+ const doc = parser.parseFromString(
+ '<span>' + from.textContent + '</span>',
+ 'text/html'
+ );
+ return document.adoptNode(doc.querySelector('span'));
+ };
+
+ for ( const noscript of noscripts ) {
+ const parent = noscript.parentNode;
+ if ( parent === null ) { continue; }
+ const span = morphNoscript(noscript);
+ span.style.setProperty('display', 'inline', 'important');
+ if ( redirectTimer === undefined ) {
+ autoRefresh(span);
+ }
+ parent.replaceChild(span, noscript);
+ }
+})();
+
+/******************************************************************************/
diff --git a/src/js/scriptlets/should-inject-contentscript.js b/src/js/scriptlets/should-inject-contentscript.js
new file mode 100644
index 0000000..b9a2658
--- /dev/null
+++ b/src/js/scriptlets/should-inject-contentscript.js
@@ -0,0 +1,40 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2018-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+// If content scripts are already injected, we need to respond with `false`,
+// to "should inject content scripts?"
+//
+// https://github.com/uBlockOrigin/uBlock-issues/issues/403
+// If the content script was not bootstrapped, give it another try.
+
+(( ) => {
+ try {
+ let status = vAPI.uBO !== true;
+ if ( status === false && vAPI.bootstrap ) {
+ self.requestIdleCallback(( ) => vAPI && vAPI.bootstrap());
+ }
+ return status;
+ } catch(ex) {
+ }
+ return true;
+})();
diff --git a/src/js/scriptlets/subscriber.js b/src/js/scriptlets/subscriber.js
new file mode 100644
index 0000000..ea7b209
--- /dev/null
+++ b/src/js/scriptlets/subscriber.js
@@ -0,0 +1,113 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* global HTMLDocument */
+
+'use strict';
+
+/******************************************************************************/
+
+// Injected into specific web pages, those which have been pre-selected
+// because they are known to contains `abp:subscribe` links.
+
+/******************************************************************************/
+
+(( ) => {
+// >>>>> start of local scope
+
+/******************************************************************************/
+
+// https://github.com/chrisaljoudi/uBlock/issues/464
+if ( document instanceof HTMLDocument === false ) { return; }
+
+// Maybe uBO has gone away meanwhile.
+if ( typeof vAPI !== 'object' || vAPI === null ) { return; }
+
+const onMaybeSubscriptionLinkClicked = function(target) {
+ if ( vAPI instanceof Object === false ) {
+ document.removeEventListener('click', onMaybeSubscriptionLinkClicked);
+ return;
+ }
+
+ try {
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/763#issuecomment-691696716
+ // Remove replacement patch if/when filterlists.com fixes encoded '&'.
+ const subscribeURL = new URL(
+ target.href.replace('&amp;title=', '&title=')
+ );
+ if (
+ /^(abp|ubo):$/.test(subscribeURL.protocol) === false &&
+ subscribeURL.hostname !== 'subscribe.adblockplus.org'
+ ) {
+ return;
+ }
+ const location = subscribeURL.searchParams.get('location') || '';
+ const title = subscribeURL.searchParams.get('title') || '';
+ if ( location === '' || title === '' ) { return true; }
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1797
+ if ( /^(file|https?):\/\//.test(location) === false ) { return true; }
+ vAPI.messaging.send('scriptlets', {
+ what: 'subscribeTo',
+ location,
+ title,
+ });
+ return true;
+ } catch (_) {
+ }
+};
+
+// https://github.com/easylist/EasyListHebrew/issues/89
+// Ensure trusted events only.
+
+document.addEventListener('click', ev => {
+ if ( ev.button !== 0 || ev.isTrusted === false ) { return; }
+ const target = ev.target.closest('a');
+ if ( target instanceof HTMLAnchorElement === false ) { return; }
+ if ( onMaybeSubscriptionLinkClicked(target) === true ) {
+ ev.stopPropagation();
+ ev.preventDefault();
+ }
+});
+
+/******************************************************************************/
+
+// <<<<< end of local scope
+})();
+
+
+
+
+
+
+
+
+/*******************************************************************************
+
+ DO NOT:
+ - Remove the following code
+ - Add code beyond the following code
+ Reason:
+ - https://github.com/gorhill/uBlock/pull/3721
+ - uBO never uses the return value from injected content scripts
+
+**/
+
+void 0;
diff --git a/src/js/scriptlets/updater.js b/src/js/scriptlets/updater.js
new file mode 100644
index 0000000..006b663
--- /dev/null
+++ b/src/js/scriptlets/updater.js
@@ -0,0 +1,118 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* global HTMLDocument */
+
+'use strict';
+
+/******************************************************************************/
+
+// Injected into specific webpages, those which have been pre-selected
+// because they are known to contain:
+// https://ublockorigin.github.io/uAssets/update-lists?listkeys=[...]
+
+/******************************************************************************/
+
+(( ) => {
+// >>>>> start of local scope
+
+/******************************************************************************/
+
+if ( document instanceof HTMLDocument === false ) { return; }
+
+// Maybe uBO has gone away meanwhile.
+if ( typeof vAPI !== 'object' || vAPI === null ) { return; }
+
+function updateStockLists(target) {
+ if ( vAPI instanceof Object === false ) {
+ document.removeEventListener('click', updateStockLists);
+ return;
+ }
+ try {
+ const updateURL = new URL(target.href);
+ if ( updateURL.hostname !== 'ublockorigin.github.io') { return; }
+ if ( updateURL.pathname !== '/uAssets/update-lists.html') { return; }
+ const listkeys = updateURL.searchParams.get('listkeys') || '';
+ if ( listkeys === '' ) { return; }
+ let auto = true;
+ const manual = updateURL.searchParams.get('manual');
+ if ( manual === '1' ) {
+ auto = false;
+ } else if ( /^\d{6}$/.test(`${manual}`) ) {
+ const year = parseInt(manual.slice(0,2)) || 0;
+ const month = parseInt(manual.slice(2,4)) || 0;
+ const day = parseInt(manual.slice(4,6)) || 0;
+ if ( year !== 0 && month !== 0 && day !== 0 ) {
+ const date = new Date();
+ date.setUTCFullYear(2000 + year, month - 1, day);
+ date.setUTCHours(0);
+ const then = date.getTime() / 1000 / 3600;
+ const now = Date.now() / 1000 / 3600;
+ auto = then < (now - 48) || then > (now + 48);
+ }
+ }
+ vAPI.messaging.send('scriptlets', {
+ what: 'updateLists',
+ listkeys,
+ auto,
+ });
+ return true;
+ } catch (_) {
+ }
+}
+
+// https://github.com/easylist/EasyListHebrew/issues/89
+// Ensure trusted events only.
+
+document.addEventListener('click', ev => {
+ if ( ev.button !== 0 || ev.isTrusted === false ) { return; }
+ const target = ev.target.closest('a');
+ if ( target instanceof HTMLAnchorElement === false ) { return; }
+ if ( updateStockLists(target) === true ) {
+ ev.stopPropagation();
+ ev.preventDefault();
+ }
+});
+
+/******************************************************************************/
+
+// <<<<< end of local scope
+})();
+
+
+
+
+
+
+
+
+/*******************************************************************************
+
+ DO NOT:
+ - Remove the following code
+ - Add code beyond the following code
+ Reason:
+ - https://github.com/gorhill/uBlock/pull/3721
+ - uBO never uses the return value from injected content scripts
+
+**/
+
+void 0;
diff --git a/src/js/settings.js b/src/js/settings.js
new file mode 100644
index 0000000..deb033f
--- /dev/null
+++ b/src/js/settings.js
@@ -0,0 +1,317 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+import { i18n$ } from './i18n.js';
+import { dom, qs$, qsa$ } from './dom.js';
+import { setAccentColor, setTheme } from './theme.js';
+
+/******************************************************************************/
+
+const handleImportFilePicker = function() {
+ const file = this.files[0];
+ if ( file === undefined || file.name === '' ) { return; }
+
+ const reportError = ( ) => {
+ window.alert(i18n$('aboutRestoreDataError'));
+ };
+
+ const expectedFileTypes = [
+ 'text/plain',
+ 'application/json',
+ ];
+ if ( expectedFileTypes.includes(file.type) === false ) {
+ return reportError();
+ }
+
+ const filename = file.name;
+ const fr = new FileReader();
+
+ fr.onload = function() {
+ let userData;
+ try {
+ userData = JSON.parse(this.result);
+ if ( typeof userData !== 'object' ) {
+ throw 'Invalid';
+ }
+ if ( typeof userData.userSettings !== 'object' ) {
+ throw 'Invalid';
+ }
+ if (
+ Array.isArray(userData.whitelist) === false &&
+ typeof userData.netWhitelist !== 'string'
+ ) {
+ throw 'Invalid';
+ }
+ if (
+ typeof userData.filterLists !== 'object' &&
+ Array.isArray(userData.selectedFilterLists) === false
+ ) {
+ throw 'Invalid';
+ }
+ }
+ catch (e) {
+ userData = undefined;
+ }
+ if ( userData === undefined ) {
+ return reportError();
+ }
+ const time = new Date(userData.timeStamp);
+ const msg = i18n$('aboutRestoreDataConfirm')
+ .replace('{{time}}', time.toLocaleString());
+ const proceed = window.confirm(msg);
+ if ( proceed !== true ) { return; }
+ vAPI.messaging.send('dashboard', {
+ what: 'restoreUserData',
+ userData,
+ file: filename,
+ });
+ };
+
+ fr.readAsText(file);
+};
+
+/******************************************************************************/
+
+const startImportFilePicker = function() {
+ const input = qs$('#restoreFilePicker');
+ // Reset to empty string, this will ensure an change event is properly
+ // triggered if the user pick a file, even if it is the same as the last
+ // one picked.
+ input.value = '';
+ input.click();
+};
+
+/******************************************************************************/
+
+const exportToFile = async function() {
+ const response = await vAPI.messaging.send('dashboard', {
+ what: 'backupUserData',
+ });
+ if (
+ response instanceof Object === false ||
+ response.userData instanceof Object === false
+ ) {
+ return;
+ }
+ vAPI.download({
+ 'url': 'data:text/plain;charset=utf-8,' +
+ encodeURIComponent(JSON.stringify(response.userData, null, ' ')),
+ 'filename': response.localData.lastBackupFile
+ });
+ onLocalDataReceived(response.localData);
+};
+
+/******************************************************************************/
+
+const onLocalDataReceived = function(details) {
+ let v, unit;
+ if ( typeof details.storageUsed === 'number' ) {
+ v = details.storageUsed;
+ if ( v < 1e3 ) {
+ unit = 'genericBytes';
+ } else if ( v < 1e6 ) {
+ v /= 1e3;
+ unit = 'KB';
+ } else if ( v < 1e9 ) {
+ v /= 1e6;
+ unit = 'MB';
+ } else {
+ v /= 1e9;
+ unit = 'GB';
+ }
+ } else {
+ v = '?';
+ unit = '';
+ }
+ dom.text(
+ '#storageUsed',
+ i18n$('storageUsed')
+ .replace('{{value}}', v.toLocaleString(undefined, { maximumSignificantDigits: 3 }))
+ .replace('{{unit}}', unit && i18n$(unit) || '')
+ );
+
+ const timeOptions = {
+ weekday: 'long',
+ year: 'numeric',
+ month: 'long',
+ day: 'numeric',
+ hour: 'numeric',
+ minute: 'numeric',
+ timeZoneName: 'short'
+ };
+
+ const lastBackupFile = details.lastBackupFile || '';
+ if ( lastBackupFile !== '' ) {
+ const dt = new Date(details.lastBackupTime);
+ const text = i18n$('settingsLastBackupPrompt');
+ const node = qs$('#settingsLastBackupPrompt');
+ node.textContent = text + '\xA0' + dt.toLocaleString('fullwide', timeOptions);
+ node.style.display = '';
+ }
+
+ const lastRestoreFile = details.lastRestoreFile || '';
+ if ( lastRestoreFile !== '' ) {
+ const dt = new Date(details.lastRestoreTime);
+ const text = i18n$('settingsLastRestorePrompt');
+ const node = qs$('#settingsLastRestorePrompt');
+ node.textContent = text + '\xA0' + dt.toLocaleString('fullwide', timeOptions);
+ node.style.display = '';
+ }
+
+ if ( details.cloudStorageSupported === false ) {
+ dom.attr('[data-setting-name="cloudStorageEnabled"]', 'disabled', '');
+ }
+
+ if ( details.privacySettingsSupported === false ) {
+ dom.attr('[data-setting-name="prefetchingDisabled"]', 'disabled', '');
+ dom.attr('[data-setting-name="hyperlinkAuditingDisabled"]', 'disabled', '');
+ dom.attr('[data-setting-name="webrtcIPAddressHidden"]', 'disabled', '');
+ }
+};
+
+/******************************************************************************/
+
+const resetUserData = function() {
+ const msg = i18n$('aboutResetDataConfirm');
+ const proceed = window.confirm(msg);
+ if ( proceed !== true ) { return; }
+ vAPI.messaging.send('dashboard', {
+ what: 'resetUserData',
+ });
+};
+
+/******************************************************************************/
+
+const synchronizeDOM = function() {
+ dom.cl.toggle(
+ dom.body,
+ 'advancedUser',
+ qs$('[data-setting-name="advancedUserEnabled"]').checked === true
+ );
+};
+
+/******************************************************************************/
+
+const changeUserSettings = function(name, value) {
+ vAPI.messaging.send('dashboard', {
+ what: 'userSettings',
+ name,
+ value,
+ });
+
+ // Maybe reflect some changes immediately
+ switch ( name ) {
+ case 'uiTheme':
+ setTheme(value, true);
+ break;
+ case 'uiAccentCustom':
+ case 'uiAccentCustom0':
+ setAccentColor(
+ qs$('[data-setting-name="uiAccentCustom"]').checked,
+ qs$('[data-setting-name="uiAccentCustom0"]').value,
+ true
+ );
+ break;
+ default:
+ break;
+ }
+};
+
+/******************************************************************************/
+
+const onValueChanged = function(ev) {
+ const input = ev.target;
+ const name = dom.attr(input, 'data-setting-name');
+ let value = input.value;
+ // Maybe sanitize value
+ switch ( name ) {
+ case 'largeMediaSize':
+ value = Math.min(Math.max(Math.floor(parseInt(value, 10) || 0), 0), 1000000);
+ break;
+ default:
+ break;
+ }
+ if ( value !== input.value ) {
+ input.value = value;
+ }
+
+ changeUserSettings(name, value);
+};
+
+/******************************************************************************/
+
+// TODO: use data-* to declare simple settings
+
+const onUserSettingsReceived = function(details) {
+ const checkboxes = qsa$('[data-setting-type="bool"]');
+ for ( const checkbox of checkboxes ) {
+ const name = dom.attr(checkbox, 'data-setting-name') || '';
+ if ( details[name] === undefined ) {
+ dom.attr(checkbox.closest('.checkbox'), 'disabled', '');
+ dom.attr(checkbox, 'disabled', '');
+ continue;
+ }
+ checkbox.checked = details[name] === true;
+ dom.on(checkbox, 'change', ( ) => {
+ changeUserSettings(name, checkbox.checked);
+ synchronizeDOM();
+ });
+ }
+
+ if ( details.canLeakLocalIPAddresses === true ) {
+ qs$('[data-setting-name="webrtcIPAddressHidden"]')
+ .closest('div.li')
+ .style.display = '';
+ }
+
+ qsa$('[data-setting-type="value"]').forEach(function(elem) {
+ elem.value = details[dom.attr(elem, 'data-setting-name')];
+ dom.on(elem, 'change', onValueChanged);
+ });
+
+ dom.on('#export', 'click', ( ) => { exportToFile(); });
+ dom.on('#import', 'click', startImportFilePicker);
+ dom.on('#reset', 'click', resetUserData);
+ dom.on('#restoreFilePicker', 'change', handleImportFilePicker);
+
+ synchronizeDOM();
+};
+
+/******************************************************************************/
+
+vAPI.messaging.send('dashboard', { what: 'userSettings' }).then(result => {
+ onUserSettingsReceived(result);
+});
+
+vAPI.messaging.send('dashboard', { what: 'getLocalData' }).then(result => {
+ onLocalDataReceived(result);
+});
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/591
+dom.on(
+ '[data-i18n-title="settingsAdvancedUserSettings"]',
+ 'click',
+ self.uBlockDashboard.openOrSelectPage
+);
+
+/******************************************************************************/
diff --git a/src/js/start.js b/src/js/start.js
new file mode 100644
index 0000000..5762619
--- /dev/null
+++ b/src/js/start.js
@@ -0,0 +1,508 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* globals browser */
+
+'use strict';
+
+/******************************************************************************/
+
+import './vapi-common.js';
+import './vapi-background.js';
+import './vapi-background-ext.js';
+
+/******************************************************************************/
+
+// The following modules are loaded here until their content is better organized
+import './commands.js';
+import './messaging.js';
+import './storage.js';
+import './tab.js';
+import './ublock.js';
+import './utils.js';
+
+import io from './assets.js';
+import µb from './background.js';
+import { filteringBehaviorChanged } from './broadcast.js';
+import cacheStorage from './cachestorage.js';
+import { ubolog } from './console.js';
+import contextMenu from './contextmenu.js';
+import lz4Codec from './lz4.js';
+import { redirectEngine } from './redirect-engine.js';
+import staticFilteringReverseLookup from './reverselookup.js';
+import staticExtFilteringEngine from './static-ext-filtering.js';
+import staticNetFilteringEngine from './static-net-filtering.js';
+import webRequest from './traffic.js';
+
+import {
+ permanentFirewall,
+ sessionFirewall,
+ permanentSwitches,
+ sessionSwitches,
+ permanentURLFiltering,
+ sessionURLFiltering,
+} from './filtering-engines.js';
+
+/******************************************************************************/
+
+vAPI.app.onShutdown = ( ) => {
+ staticFilteringReverseLookup.shutdown();
+ io.updateStop();
+ staticNetFilteringEngine.reset();
+ staticExtFilteringEngine.reset();
+ sessionFirewall.reset();
+ permanentFirewall.reset();
+ sessionURLFiltering.reset();
+ permanentURLFiltering.reset();
+ sessionSwitches.reset();
+ permanentSwitches.reset();
+};
+
+/******************************************************************************/
+
+// This is called only once, when everything has been loaded in memory after
+// the extension was launched. It can be used to inject content scripts
+// in already opened web pages, to remove whatever nuisance could make it to
+// the web pages before uBlock was ready.
+//
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1652925#c19
+// Mind discarded tabs.
+
+const initializeTabs = async ( ) => {
+ const manifest = browser.runtime.getManifest();
+ if ( manifest instanceof Object === false ) { return; }
+
+ const toCheck = [];
+ const tabIds = [];
+ {
+ const checker = { file: 'js/scriptlets/should-inject-contentscript.js' };
+ const tabs = await vAPI.tabs.query({ url: '<all_urls>' });
+ for ( const tab of tabs ) {
+ if ( tab.discarded === true ) { continue; }
+ if ( tab.status === 'unloaded' ) { continue; }
+ const { id, url } = tab;
+ µb.tabContextManager.commit(id, url);
+ µb.bindTabToPageStore(id, 'tabCommitted', tab);
+ // https://github.com/chrisaljoudi/uBlock/issues/129
+ // Find out whether content scripts need to be injected
+ // programmatically. This may be necessary for web pages which
+ // were loaded before uBO launched.
+ toCheck.push(
+ /^https?:\/\//.test(url)
+ ? vAPI.tabs.executeScript(id, checker)
+ : false
+ );
+ tabIds.push(id);
+ }
+ }
+ // We do not want to block on content scripts injection
+ Promise.all(toCheck).then(results => {
+ for ( let i = 0; i < results.length; i++ ) {
+ const result = results[i];
+ if ( result.length === 0 || result[0] !== true ) { continue; }
+ // Inject declarative content scripts programmatically.
+ for ( const contentScript of manifest.content_scripts ) {
+ for ( const file of contentScript.js ) {
+ vAPI.tabs.executeScript(tabIds[i], {
+ file: file,
+ allFrames: contentScript.all_frames,
+ runAt: contentScript.run_at
+ });
+ }
+ }
+ }
+ });
+};
+
+/******************************************************************************/
+
+// To bring older versions up to date
+//
+// https://www.reddit.com/r/uBlockOrigin/comments/s7c9go/
+// Abort suspending network requests when uBO is merely being installed.
+
+const onVersionReady = lastVersion => {
+ if ( lastVersion === vAPI.app.version ) { return; }
+
+ vAPI.storage.set({
+ version: vAPI.app.version,
+ versionUpdateTime: Date.now(),
+ });
+
+ const lastVersionInt = vAPI.app.intFromVersion(lastVersion);
+
+ // Special case: first installation
+ if ( lastVersionInt === 0 ) {
+ vAPI.net.unsuspend({ all: true, discard: true });
+ return;
+ }
+
+ // Since built-in resources may have changed since last version, we
+ // force a reload of all resources.
+ redirectEngine.invalidateResourcesSelfie(io);
+};
+
+/******************************************************************************/
+
+// https://github.com/chrisaljoudi/uBlock/issues/226
+// Whitelist in memory.
+// Whitelist parser needs PSL to be ready.
+// gorhill 2014-12-15: not anymore
+//
+// https://github.com/uBlockOrigin/uBlock-issues/issues/1433
+// Allow admins to add their own trusted-site directives.
+
+const onNetWhitelistReady = (netWhitelistRaw, adminExtra) => {
+ if ( typeof netWhitelistRaw === 'string' ) {
+ netWhitelistRaw = netWhitelistRaw.split('\n');
+ }
+ // Append admin-controlled trusted-site directives
+ if (
+ adminExtra instanceof Object &&
+ Array.isArray(adminExtra.trustedSiteDirectives)
+ ) {
+ for ( const directive of adminExtra.trustedSiteDirectives ) {
+ µb.netWhitelistDefault.push(directive);
+ netWhitelistRaw.push(directive);
+ }
+ }
+ µb.netWhitelist = µb.whitelistFromArray(netWhitelistRaw);
+ µb.netWhitelistModifyTime = Date.now();
+};
+
+/******************************************************************************/
+
+// User settings are in memory
+
+const onUserSettingsReady = fetched => {
+ // Terminate suspended state?
+ const tnow = Date.now() - vAPI.T0;
+ if (
+ vAPI.Net.canSuspend() &&
+ fetched.suspendUntilListsAreLoaded === false
+ ) {
+ vAPI.net.unsuspend({ all: true, discard: true });
+ ubolog(`Unsuspend network activity listener at ${tnow} ms`);
+ µb.supportStats.unsuspendAfter = `${tnow} ms`;
+ } else if (
+ vAPI.Net.canSuspend() === false &&
+ fetched.suspendUntilListsAreLoaded
+ ) {
+ vAPI.net.suspend();
+ ubolog(`Suspend network activity listener at ${tnow} ms`);
+ }
+
+ // `externalLists` will be deprecated in some future, it is kept around
+ // for forward compatibility purpose, and should reflect the content of
+ // `importedLists`.
+ if ( Array.isArray(fetched.externalLists) ) {
+ fetched.externalLists = fetched.externalLists.join('\n');
+ vAPI.storage.set({ externalLists: fetched.externalLists });
+ }
+ if (
+ fetched.importedLists.length === 0 &&
+ fetched.externalLists !== ''
+ ) {
+ fetched.importedLists =
+ fetched.externalLists.trim().split(/[\n\r]+/);
+ }
+
+ fromFetch(µb.userSettings, fetched);
+
+ if ( µb.privacySettingsSupported ) {
+ vAPI.browserSettings.set({
+ 'hyperlinkAuditing': !µb.userSettings.hyperlinkAuditingDisabled,
+ 'prefetching': !µb.userSettings.prefetchingDisabled,
+ 'webrtcIPAddress': !µb.userSettings.webrtcIPAddressHidden
+ });
+ }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1513
+ if (
+ vAPI.net.canUncloakCnames &&
+ µb.userSettings.cnameUncloakEnabled === false
+ ) {
+ vAPI.net.setOptions({ cnameUncloakEnabled: false });
+ }
+};
+
+/******************************************************************************/
+
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1588916
+// Save magic format numbers into the cache storage itself.
+// https://github.com/uBlockOrigin/uBlock-issues/issues/1365
+// Wait for removal of invalid cached data to be completed.
+
+const onCacheSettingsReady = async (fetched = {}) => {
+ if ( fetched.compiledMagic !== µb.systemSettings.compiledMagic ) {
+ µb.compiledFormatChanged = true;
+ µb.selfieIsInvalid = true;
+ ubolog(`Serialized format of static filter lists changed`);
+ }
+ if ( fetched.selfieMagic !== µb.systemSettings.selfieMagic ) {
+ µb.selfieIsInvalid = true;
+ ubolog(`Serialized format of selfie changed`);
+ }
+ if ( µb.selfieIsInvalid ) {
+ µb.selfieManager.destroy();
+ cacheStorage.set(µb.systemSettings);
+ }
+};
+
+/******************************************************************************/
+
+const onHiddenSettingsReady = async ( ) => {
+ // Maybe customize webext flavor
+ if ( µb.hiddenSettings.modifyWebextFlavor !== 'unset' ) {
+ const tokens = µb.hiddenSettings.modifyWebextFlavor.split(/\s+/);
+ for ( const token of tokens ) {
+ switch ( token[0] ) {
+ case '+':
+ vAPI.webextFlavor.soup.add(token.slice(1));
+ break;
+ case '-':
+ vAPI.webextFlavor.soup.delete(token.slice(1));
+ break;
+ default:
+ vAPI.webextFlavor.soup.add(token);
+ break;
+ }
+ }
+ ubolog(`Override default webext flavor with ${tokens}`);
+ }
+
+ // Maybe disable WebAssembly
+ if ( vAPI.canWASM && µb.hiddenSettings.disableWebAssembly !== true ) {
+ const wasmModuleFetcher = function(path) {
+ return fetch(`${path}.wasm`, { mode: 'same-origin' }).then(
+ WebAssembly.compileStreaming
+ ).catch(reason => {
+ ubolog(reason);
+ });
+ };
+ staticNetFilteringEngine.enableWASM(wasmModuleFetcher, './js/wasm/').then(result => {
+ if ( result !== true ) { return; }
+ ubolog(`WASM modules ready ${Date.now()-vAPI.T0} ms after launch`);
+ });
+ }
+
+ // Maybe override default cache storage
+ µb.supportStats.cacheBackend = await cacheStorage.select(
+ µb.hiddenSettings.cacheStorageAPI
+ );
+ ubolog(`Backend storage for cache will be ${µb.supportStats.cacheBackend}`);
+};
+
+/******************************************************************************/
+
+const onFirstFetchReady = (fetched, adminExtra) => {
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/507
+ // Firefox-specific: somehow `fetched` is undefined under certain
+ // circumstances even though we asked to load with default values.
+ if ( fetched instanceof Object === false ) {
+ fetched = createDefaultProps();
+ }
+
+ // Order is important -- do not change:
+ fromFetch(µb.localSettings, fetched);
+ fromFetch(µb.restoreBackupSettings, fetched);
+
+ permanentFirewall.fromString(fetched.dynamicFilteringString);
+ sessionFirewall.assign(permanentFirewall);
+ permanentURLFiltering.fromString(fetched.urlFilteringString);
+ sessionURLFiltering.assign(permanentURLFiltering);
+ permanentSwitches.fromString(fetched.hostnameSwitchesString);
+ sessionSwitches.assign(permanentSwitches);
+
+ onNetWhitelistReady(fetched.netWhitelist, adminExtra);
+ onVersionReady(fetched.version);
+};
+
+/******************************************************************************/
+
+const toFetch = (from, fetched) => {
+ for ( const k in from ) {
+ if ( from.hasOwnProperty(k) === false ) { continue; }
+ fetched[k] = from[k];
+ }
+};
+
+const fromFetch = (to, fetched) => {
+ for ( const k in to ) {
+ if ( to.hasOwnProperty(k) === false ) { continue; }
+ if ( fetched.hasOwnProperty(k) === false ) { continue; }
+ to[k] = fetched[k];
+ }
+};
+
+const createDefaultProps = ( ) => {
+ const fetchableProps = {
+ 'dynamicFilteringString': µb.dynamicFilteringDefault.join('\n'),
+ 'urlFilteringString': '',
+ 'hostnameSwitchesString': µb.hostnameSwitchesDefault.join('\n'),
+ 'lastRestoreFile': '',
+ 'lastRestoreTime': 0,
+ 'lastBackupFile': '',
+ 'lastBackupTime': 0,
+ 'netWhitelist': µb.netWhitelistDefault,
+ 'version': '0.0.0.0'
+ };
+ toFetch(µb.localSettings, fetchableProps);
+ toFetch(µb.restoreBackupSettings, fetchableProps);
+ return fetchableProps;
+};
+
+/******************************************************************************/
+
+(async ( ) => {
+// >>>>> start of async/await scope
+
+try {
+ ubolog(`Start sequence of loading storage-based data ${Date.now()-vAPI.T0} ms after launch`);
+
+ // https://github.com/gorhill/uBlock/issues/531
+ await µb.restoreAdminSettings();
+ ubolog(`Admin settings ready ${Date.now()-vAPI.T0} ms after launch`);
+
+ await µb.loadHiddenSettings();
+ await onHiddenSettingsReady();
+ ubolog(`Hidden settings ready ${Date.now()-vAPI.T0} ms after launch`);
+
+ const adminExtra = await vAPI.adminStorage.get('toAdd');
+ ubolog(`Extra admin settings ready ${Date.now()-vAPI.T0} ms after launch`);
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1365
+ // Wait for onCacheSettingsReady() to be fully ready.
+ const [ , , lastVersion ] = await Promise.all([
+ µb.loadSelectedFilterLists().then(( ) => {
+ ubolog(`List selection ready ${Date.now()-vAPI.T0} ms after launch`);
+ }),
+ cacheStorage.get(
+ { compiledMagic: 0, selfieMagic: 0 }
+ ).then(fetched => {
+ ubolog(`Cache magic numbers ready ${Date.now()-vAPI.T0} ms after launch`);
+ onCacheSettingsReady(fetched);
+ }),
+ vAPI.storage.get(createDefaultProps()).then(fetched => {
+ ubolog(`First fetch ready ${Date.now()-vAPI.T0} ms after launch`);
+ onFirstFetchReady(fetched, adminExtra);
+ return fetched.version;
+ }),
+ µb.loadUserSettings().then(fetched => {
+ ubolog(`User settings ready ${Date.now()-vAPI.T0} ms after launch`);
+ onUserSettingsReady(fetched);
+ }),
+ µb.loadPublicSuffixList().then(( ) => {
+ ubolog(`PSL ready ${Date.now()-vAPI.T0} ms after launch`);
+ }),
+ ]);
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1547
+ if ( lastVersion === '0.0.0.0' && vAPI.webextFlavor.soup.has('chromium') ) {
+ vAPI.app.restart();
+ return;
+ }
+} catch (ex) {
+ console.trace(ex);
+}
+
+// Prime the filtering engines before first use.
+staticNetFilteringEngine.prime();
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/817#issuecomment-565730122
+// Still try to load filter lists regardless of whether a serious error
+// occurred in the previous initialization steps.
+let selfieIsValid = false;
+try {
+ selfieIsValid = await µb.selfieManager.load();
+ if ( selfieIsValid === true ) {
+ ubolog(`Selfie ready ${Date.now()-vAPI.T0} ms after launch`);
+ }
+} catch (ex) {
+ console.trace(ex);
+}
+if ( selfieIsValid !== true ) {
+ try {
+ await µb.loadFilterLists();
+ ubolog(`Filter lists ready ${Date.now()-vAPI.T0} ms after launch`);
+ } catch (ex) {
+ console.trace(ex);
+ }
+}
+
+// Flush memory cache -- unsure whether the browser does this internally
+// when loading a new extension.
+filteringBehaviorChanged();
+
+// Final initialization steps after all needed assets are in memory.
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/974
+// This can be used to defer filtering decision-making.
+µb.readyToFilter = true;
+
+// Initialize internal state with maybe already existing tabs.
+await initializeTabs();
+
+// Start network observers.
+webRequest.start();
+
+// Ensure that the resources allocated for decompression purpose (likely
+// large buffers) are garbage-collectable immediately after launch.
+// Otherwise I have observed that it may take quite a while before the
+// garbage collection of these resources kicks in. Relinquishing as soon
+// as possible ensure minimal memory usage baseline.
+lz4Codec.relinquish();
+
+// https://github.com/chrisaljoudi/uBlock/issues/184
+// Check for updates not too far in the future.
+io.addObserver(µb.assetObserver.bind(µb));
+µb.scheduleAssetUpdater({
+ updateDelay: µb.userSettings.autoUpdate
+ ? µb.hiddenSettings.autoUpdateDelayAfterLaunch * 1000
+ : 0
+});
+
+// Force an update of the context menu according to the currently
+// active tab.
+contextMenu.update();
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/717
+// Prevent the extension from being restarted mid-session.
+browser.runtime.onUpdateAvailable.addListener(details => {
+ const toInt = vAPI.app.intFromVersion;
+ if (
+ µb.hiddenSettings.extensionUpdateForceReload === true ||
+ toInt(details.version) <= toInt(vAPI.app.version)
+ ) {
+ vAPI.app.restart();
+ }
+});
+
+µb.supportStats.allReadyAfter = `${Date.now() - vAPI.T0} ms`;
+if ( selfieIsValid ) {
+ µb.supportStats.allReadyAfter += ' (selfie)';
+}
+ubolog(`All ready ${µb.supportStats.allReadyAfter} after launch`);
+
+µb.isReadyResolve();
+
+// <<<<< end of async/await scope
+})();
diff --git a/src/js/static-dnr-filtering.js b/src/js/static-dnr-filtering.js
new file mode 100644
index 0000000..fb677ad
--- /dev/null
+++ b/src/js/static-dnr-filtering.js
@@ -0,0 +1,497 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import staticNetFilteringEngine from './static-net-filtering.js';
+import { LineIterator } from './text-utils.js';
+import * as sfp from './static-filtering-parser.js';
+
+import {
+ CompiledListReader,
+ CompiledListWriter,
+} from './static-filtering-io.js';
+
+/******************************************************************************/
+
+// http://www.cse.yorku.ca/~oz/hash.html#djb2
+// Must mirror content script surveyor's version
+
+const hashFromStr = (type, s) => {
+ const len = s.length;
+ const step = len + 7 >>> 3;
+ let hash = (type << 5) + type ^ len;
+ for ( let i = 0; i < len; i += step ) {
+ hash = (hash << 5) + hash ^ s.charCodeAt(i);
+ }
+ return hash & 0xFFFFFF;
+};
+
+/******************************************************************************/
+
+// Copied from cosmetic-filter.js for the time being to avoid unwanted
+// dependencies
+
+const rePlainSelector = /^[#.][\w\\-]+/;
+const rePlainSelectorEx = /^[^#.\[(]+([#.][\w-]+)|([#.][\w-]+)$/;
+const rePlainSelectorEscaped = /^[#.](?:\\[0-9A-Fa-f]+ |\\.|\w|-)+/;
+const reEscapeSequence = /\\([0-9A-Fa-f]+ |.)/g;
+
+const keyFromSelector = selector => {
+ let key = '';
+ let matches = rePlainSelector.exec(selector);
+ if ( matches ) {
+ key = matches[0];
+ } else {
+ matches = rePlainSelectorEx.exec(selector);
+ if ( matches === null ) { return; }
+ key = matches[1] || matches[2];
+ }
+ if ( key.indexOf('\\') === -1 ) { return key; }
+ matches = rePlainSelectorEscaped.exec(selector);
+ if ( matches === null ) { return; }
+ key = '';
+ const escaped = matches[0];
+ let beg = 0;
+ reEscapeSequence.lastIndex = 0;
+ for (;;) {
+ matches = reEscapeSequence.exec(escaped);
+ if ( matches === null ) {
+ return key + escaped.slice(beg);
+ }
+ key += escaped.slice(beg, matches.index);
+ beg = reEscapeSequence.lastIndex;
+ if ( matches[1].length === 1 ) {
+ key += matches[1];
+ } else {
+ key += String.fromCharCode(parseInt(matches[1], 16));
+ }
+ }
+};
+
+/******************************************************************************/
+
+function addExtendedToDNR(context, parser) {
+ if ( parser.isExtendedFilter() === false ) { return false; }
+
+ // Scriptlet injection
+ if ( parser.isScriptletFilter() ) {
+ if ( parser.hasOptions() === false ) { return; }
+ if ( context.scriptletFilters === undefined ) {
+ context.scriptletFilters = new Map();
+ }
+ const exception = parser.isException();
+ const args = parser.getScriptletArgs();
+ const argsToken = JSON.stringify(args);
+ for ( const { hn, not, bad } of parser.getExtFilterDomainIterator() ) {
+ if ( bad ) { continue; }
+ if ( exception ) { continue; }
+ let details = context.scriptletFilters.get(argsToken);
+ if ( details === undefined ) {
+ context.scriptletFilters.set(argsToken, details = { args });
+ if ( context.trustedSource ) {
+ details.trustedSource = true;
+ }
+ }
+ if ( not ) {
+ if ( details.excludeMatches === undefined ) {
+ details.excludeMatches = [];
+ }
+ details.excludeMatches.push(hn);
+ continue;
+ }
+ if ( details.matches === undefined ) {
+ details.matches = [];
+ }
+ if ( details.matches.includes('*') ) { continue; }
+ if ( hn === '*' ) {
+ details.matches = [ '*' ];
+ continue;
+ }
+ details.matches.push(hn);
+ }
+ return;
+ }
+
+ // Response header filtering
+ if ( parser.isResponseheaderFilter() ) {
+ if ( parser.hasError() ) { return; }
+ if ( parser.hasOptions() === false ) { return; }
+ if ( parser.isException() ) { return; }
+ const node = parser.getBranchFromType(sfp.NODE_TYPE_EXT_PATTERN_RESPONSEHEADER);
+ if ( node === 0 ) { return; }
+ const header = parser.getNodeString(node);
+ if ( context.responseHeaderRules === undefined ) {
+ context.responseHeaderRules = [];
+ }
+ const rule = {
+ action: {
+ responseHeaders: [
+ {
+ header,
+ operation: 'remove',
+ }
+ ],
+ type: 'modifyHeaders'
+ },
+ condition: {
+ resourceTypes: [
+ 'main_frame',
+ 'sub_frame'
+ ]
+ },
+ };
+ for ( const { hn, not, bad } of parser.getExtFilterDomainIterator() ) {
+ if ( bad ) { continue; }
+ if ( not ) {
+ if ( rule.condition.excludedInitiatorDomains === undefined ) {
+ rule.condition.excludedInitiatorDomains = [];
+ }
+ rule.condition.excludedInitiatorDomains.push(hn);
+ continue;
+ }
+ if ( hn === '*' ) {
+ if ( rule.condition.initiatorDomains !== undefined ) {
+ rule.condition.initiatorDomains = undefined;
+ }
+ continue;
+ }
+ if ( rule.condition.initiatorDomains === undefined ) {
+ rule.condition.initiatorDomains = [];
+ }
+ rule.condition.initiatorDomains.push(hn);
+ }
+ context.responseHeaderRules.push(rule);
+ return;
+ }
+
+ // HTML filtering
+ if ( (parser.flavorBits & parser.BITFlavorExtHTML) !== 0 ) {
+ return;
+ }
+
+ // Cosmetic filtering
+
+ // Generic cosmetic filtering
+ if ( parser.hasOptions() === false ) {
+ const { compiled } = parser.result;
+ if ( compiled === undefined ) { return; }
+ if ( compiled.length <= 1 ) { return; }
+ if ( parser.isException() ) {
+ if ( context.genericCosmeticExceptions === undefined ) {
+ context.genericCosmeticExceptions = new Set();
+ }
+ context.genericCosmeticExceptions.add(compiled);
+ return;
+ }
+ if ( compiled.charCodeAt(0) === 0x7B /* '{' */ ) { return; }
+ const key = keyFromSelector(compiled);
+ if ( key === undefined ) {
+ if ( context.genericHighCosmeticFilters === undefined ) {
+ context.genericHighCosmeticFilters = new Set();
+ }
+ context.genericHighCosmeticFilters.add(compiled);
+ return;
+ }
+ const type = key.charCodeAt(0);
+ const hash = hashFromStr(type, key.slice(1));
+ if ( context.genericCosmeticFilters === undefined ) {
+ context.genericCosmeticFilters = new Map();
+ }
+ let bucket = context.genericCosmeticFilters.get(hash);
+ if ( bucket === undefined ) {
+ context.genericCosmeticFilters.set(hash, bucket = []);
+ }
+ bucket.push(compiled);
+ return;
+ }
+
+ // Specific cosmetic filtering
+ // https://github.com/chrisaljoudi/uBlock/issues/151
+ // Negated hostname means the filter applies to all non-negated hostnames
+ // of same filter OR globally if there is no non-negated hostnames.
+ if ( context.specificCosmeticFilters === undefined ) {
+ context.specificCosmeticFilters = new Map();
+ }
+ for ( const { hn, not, bad } of parser.getExtFilterDomainIterator() ) {
+ if ( bad ) { continue; }
+ let { compiled, exception, raw } = parser.result;
+ if ( exception ) { continue; }
+ let rejected;
+ if ( compiled === undefined ) {
+ rejected = `Invalid filter: ${hn}##${raw}`;
+ }
+ if ( rejected ) {
+ compiled = rejected;
+ }
+ let details = context.specificCosmeticFilters.get(compiled);
+ if ( details === undefined ) {
+ details = {};
+ if ( rejected ) { details.rejected = true; }
+ context.specificCosmeticFilters.set(compiled, details);
+ }
+ if ( rejected ) { continue; }
+ if ( not ) {
+ if ( details.excludeMatches === undefined ) {
+ details.excludeMatches = [];
+ }
+ details.excludeMatches.push(hn);
+ continue;
+ }
+ if ( details.matches === undefined ) {
+ details.matches = [];
+ }
+ if ( details.matches.includes('*') ) { continue; }
+ if ( hn === '*' ) {
+ details.matches = [ '*' ];
+ continue;
+ }
+ details.matches.push(hn);
+ }
+}
+
+/******************************************************************************/
+
+function addToDNR(context, list) {
+ const env = context.env || [];
+ const writer = new CompiledListWriter();
+ const lineIter = new LineIterator(
+ sfp.utils.preparser.prune(list.text, env)
+ );
+ const parser = new sfp.AstFilterParser({
+ toDNR: true,
+ nativeCssHas: env.includes('native_css_has'),
+ badTypes: [ sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE ],
+ });
+ const compiler = staticNetFilteringEngine.createCompiler();
+
+ writer.properties.set('name', list.name);
+ compiler.start(writer);
+
+ while ( lineIter.eot() === false ) {
+ let line = lineIter.next();
+ while ( line.endsWith(' \\') ) {
+ if ( lineIter.peek(4) !== ' ' ) { break; }
+ line = line.slice(0, -2).trim() + lineIter.next().trim();
+ }
+
+ parser.parse(line);
+
+ if ( parser.isComment() ) {
+ if ( line === `!#trusted on ${context.secret}` ) {
+ parser.trustedSource = true;
+ context.trustedSource = true;
+ } else if ( line === `!#trusted off ${context.secret}` ) {
+ parser.trustedSource = false;
+ context.trustedSource = false;
+ }
+ continue;
+ }
+
+ if ( parser.isFilter() === false ) { continue; }
+ if ( parser.hasError() ) {
+ if ( parser.astError === sfp.AST_ERROR_OPTION_EXCLUDED ) {
+ context.invalid.add(`Incompatible with DNR: ${line}`);
+ }
+ continue;
+ }
+
+ if ( parser.isExtendedFilter() ) {
+ addExtendedToDNR(context, parser);
+ continue;
+ }
+ if ( parser.isNetworkFilter() === false ) { continue; }
+
+ if ( compiler.compile(parser, writer) ) { continue; }
+
+ if ( compiler.error !== undefined ) {
+ context.invalid.add(compiler.error);
+ }
+ }
+
+ compiler.finish(writer);
+
+ staticNetFilteringEngine.dnrFromCompiled(
+ 'add',
+ context,
+ new CompiledListReader(writer.toString())
+ );
+}
+
+/******************************************************************************/
+
+function finalizeRuleset(context, network) {
+ const ruleset = network.ruleset;
+
+ // Assign rule ids
+ const rulesetMap = new Map();
+ {
+ let ruleId = 1;
+ for ( const rule of ruleset ) {
+ rulesetMap.set(ruleId++, rule);
+ }
+ }
+ // Merge rules where possible by merging arrays of a specific property.
+ //
+ // https://github.com/uBlockOrigin/uBOL-home/issues/10#issuecomment-1304822579
+ // Do not merge rules which have errors.
+ const mergeRules = (rulesetMap, mergeTarget) => {
+ const mergeMap = new Map();
+ const sorter = (_, v) => {
+ if ( Array.isArray(v) ) {
+ return typeof v[0] === 'string' ? v.sort() : v;
+ }
+ if ( v instanceof Object ) {
+ const sorted = {};
+ for ( const kk of Object.keys(v).sort() ) {
+ sorted[kk] = v[kk];
+ }
+ return sorted;
+ }
+ return v;
+ };
+ const ruleHasher = (rule, target) => {
+ return JSON.stringify(rule, (k, v) => {
+ if ( k.startsWith('_') ) { return; }
+ if ( k === target ) { return; }
+ return sorter(k, v);
+ });
+ };
+ const extractTargetValue = (obj, target) => {
+ for ( const [ k, v ] of Object.entries(obj) ) {
+ if ( Array.isArray(v) && k === target ) { return v; }
+ if ( v instanceof Object ) {
+ const r = extractTargetValue(v, target);
+ if ( r !== undefined ) { return r; }
+ }
+ }
+ };
+ const extractTargetOwner = (obj, target) => {
+ for ( const [ k, v ] of Object.entries(obj) ) {
+ if ( Array.isArray(v) && k === target ) { return obj; }
+ if ( v instanceof Object ) {
+ const r = extractTargetOwner(v, target);
+ if ( r !== undefined ) { return r; }
+ }
+ }
+ };
+ for ( const [ id, rule ] of rulesetMap ) {
+ if ( rule._error !== undefined ) { continue; }
+ const hash = ruleHasher(rule, mergeTarget);
+ if ( mergeMap.has(hash) === false ) {
+ mergeMap.set(hash, []);
+ }
+ mergeMap.get(hash).push(id);
+ }
+ for ( const ids of mergeMap.values() ) {
+ if ( ids.length === 1 ) { continue; }
+ const leftHand = rulesetMap.get(ids[0]);
+ const leftHandSet = new Set(
+ extractTargetValue(leftHand, mergeTarget) || []
+ );
+ for ( let i = 1; i < ids.length; i++ ) {
+ const rightHandId = ids[i];
+ const rightHand = rulesetMap.get(rightHandId);
+ const rightHandArray = extractTargetValue(rightHand, mergeTarget);
+ if ( rightHandArray !== undefined ) {
+ if ( leftHandSet.size !== 0 ) {
+ for ( const item of rightHandArray ) {
+ leftHandSet.add(item);
+ }
+ }
+ } else {
+ leftHandSet.clear();
+ }
+ rulesetMap.delete(rightHandId);
+ }
+ const leftHandOwner = extractTargetOwner(leftHand, mergeTarget);
+ if ( leftHandSet.size > 1 ) {
+ //if ( leftHandOwner === undefined ) { debugger; }
+ leftHandOwner[mergeTarget] = Array.from(leftHandSet).sort();
+ } else if ( leftHandSet.size === 0 ) {
+ if ( leftHandOwner !== undefined ) {
+ leftHandOwner[mergeTarget] = undefined;
+ }
+ }
+ }
+ };
+ mergeRules(rulesetMap, 'resourceTypes');
+ mergeRules(rulesetMap, 'initiatorDomains');
+ mergeRules(rulesetMap, 'requestDomains');
+ mergeRules(rulesetMap, 'removeParams');
+ mergeRules(rulesetMap, 'responseHeaders');
+
+ // Patch id
+ const rulesetFinal = [];
+ {
+ let ruleId = 1;
+ for ( const rule of rulesetMap.values() ) {
+ if ( rule._error === undefined ) {
+ rule.id = ruleId++;
+ } else {
+ rule.id = 0;
+ }
+ rulesetFinal.push(rule);
+ }
+ for ( const invalid of context.invalid ) {
+ rulesetFinal.push({ _error: [ invalid ] });
+ }
+ }
+
+ network.ruleset = rulesetFinal;
+}
+
+/******************************************************************************/
+
+async function dnrRulesetFromRawLists(lists, options = {}) {
+ const context = Object.assign({}, options);
+ staticNetFilteringEngine.dnrFromCompiled('begin', context);
+ context.extensionPaths = new Map(context.extensionPaths || []);
+ const toLoad = [];
+ const toDNR = (context, list) => addToDNR(context, list);
+ for ( const list of lists ) {
+ if ( list instanceof Promise ) {
+ toLoad.push(list.then(list => toDNR(context, list)));
+ } else {
+ toLoad.push(toDNR(context, list));
+ }
+ }
+ await Promise.all(toLoad);
+ const result = {
+ network: staticNetFilteringEngine.dnrFromCompiled('end', context),
+ genericCosmetic: context.genericCosmeticFilters,
+ genericHighCosmetic: context.genericHighCosmeticFilters,
+ genericCosmeticExceptions: context.genericCosmeticExceptions,
+ specificCosmetic: context.specificCosmeticFilters,
+ scriptlet: context.scriptletFilters,
+ };
+ if ( context.responseHeaderRules ) {
+ result.network.ruleset.push(...context.responseHeaderRules);
+ }
+ finalizeRuleset(context, result.network);
+ return result;
+}
+
+/******************************************************************************/
+
+export { dnrRulesetFromRawLists };
diff --git a/src/js/static-ext-filtering-db.js b/src/js/static-ext-filtering-db.js
new file mode 100644
index 0000000..64a9c8d
--- /dev/null
+++ b/src/js/static-ext-filtering-db.js
@@ -0,0 +1,171 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2017-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+const StaticExtFilteringHostnameDB = class {
+ constructor(nBits, version = 0) {
+ this.version = version;
+ this.nBits = nBits;
+ this.strToIdMap = new Map();
+ this.hostnameToSlotIdMap = new Map();
+ this.regexToSlotIdMap = new Map();
+ this.regexMap = new Map();
+ // Array of integer pairs
+ this.hostnameSlots = [];
+ // Array of strings (selectors and pseudo-selectors)
+ this.strSlots = [];
+ this.size = 0;
+ this.cleanupTimer = vAPI.defer.create(( ) => {
+ this.strToIdMap.clear();
+ });
+ }
+
+ store(hn, bits, s) {
+ this.size += 1;
+ let iStr = this.strToIdMap.get(s);
+ if ( iStr === undefined ) {
+ iStr = this.strSlots.length;
+ this.strSlots.push(s);
+ this.strToIdMap.set(s, iStr);
+ if ( this.cleanupTimer.ongoing() === false ) {
+ this.collectGarbage(true);
+ }
+ }
+ const strId = iStr << this.nBits | bits;
+ const hnIsNotRegex = hn.charCodeAt(0) !== 0x2F /* / */;
+ let iHn = hnIsNotRegex
+ ? this.hostnameToSlotIdMap.get(hn)
+ : this.regexToSlotIdMap.get(hn);
+ if ( iHn === undefined ) {
+ if ( hnIsNotRegex ) {
+ this.hostnameToSlotIdMap.set(hn, this.hostnameSlots.length);
+ } else {
+ this.regexToSlotIdMap.set(hn, this.hostnameSlots.length);
+ }
+ this.hostnameSlots.push(strId, 0);
+ return;
+ }
+ // Add as last item.
+ while ( this.hostnameSlots[iHn+1] !== 0 ) {
+ iHn = this.hostnameSlots[iHn+1];
+ }
+ this.hostnameSlots[iHn+1] = this.hostnameSlots.length;
+ this.hostnameSlots.push(strId, 0);
+ }
+
+ clear() {
+ this.hostnameToSlotIdMap.clear();
+ this.regexToSlotIdMap.clear();
+ this.hostnameSlots.length = 0;
+ this.strSlots.length = 0;
+ this.strToIdMap.clear();
+ this.regexMap.clear();
+ this.size = 0;
+ }
+
+ collectGarbage(later = false) {
+ if ( later ) {
+ return this.cleanupTimer.onidle(5000, { timeout: 5000 });
+ }
+ this.cleanupTimer.off();
+ this.strToIdMap.clear();
+ }
+
+ // modifiers = 0: all items
+ // modifiers = 1: only specific items
+ // modifiers = 2: only generic items
+ // modifiers = 3: only regex-based items
+ //
+ retrieve(hostname, out, modifiers = 0) {
+ let hn = hostname;
+ if ( modifiers === 2 ) { hn = ''; }
+ for (;;) {
+ const hnSlot = this.hostnameToSlotIdMap.get(hn);
+ if ( hnSlot !== undefined ) {
+ this.retrieveFromSlot(hnSlot, out);
+ }
+ if ( hn === '' ) { break; }
+ const pos = hn.indexOf('.');
+ if ( pos === -1 ) {
+ if ( modifiers === 1 ) { break; }
+ hn = '';
+ } else {
+ hn = hn.slice(pos + 1);
+ }
+ }
+ if ( modifiers !== 0 && modifiers !== 3 ) { return; }
+ if ( this.regexToSlotIdMap.size === 0 ) { return; }
+ // TODO: consider using a combined regex to test once for whether
+ // iterating is worth it.
+ for ( const restr of this.regexToSlotIdMap.keys() ) {
+ let re = this.regexMap.get(restr);
+ if ( re === undefined ) {
+ this.regexMap.set(restr, (re = new RegExp(restr.slice(1,-1))));
+ }
+ if ( re.test(hostname) === false ) { continue; }
+ this.retrieveFromSlot(this.regexToSlotIdMap.get(restr), out);
+ }
+ }
+
+ retrieveFromSlot(hnSlot, out) {
+ if ( hnSlot === undefined ) { return; }
+ const mask = out.length - 1; // out.length must be power of two
+ do {
+ const strId = this.hostnameSlots[hnSlot+0];
+ out[strId & mask].add(this.strSlots[strId >>> this.nBits]);
+ hnSlot = this.hostnameSlots[hnSlot+1];
+ } while ( hnSlot !== 0 );
+ }
+
+ toSelfie() {
+ return {
+ version: this.version,
+ hostnameToSlotIdMap: Array.from(this.hostnameToSlotIdMap),
+ regexToSlotIdMap: Array.from(this.regexToSlotIdMap),
+ hostnameSlots: this.hostnameSlots,
+ strSlots: this.strSlots,
+ size: this.size
+ };
+ }
+
+ fromSelfie(selfie) {
+ if ( selfie === undefined ) { return; }
+ this.hostnameToSlotIdMap = new Map(selfie.hostnameToSlotIdMap);
+ // Regex-based lookup available in uBO 1.47.0 and above
+ if ( Array.isArray(selfie.regexToSlotIdMap) ) {
+ this.regexToSlotIdMap = new Map(selfie.regexToSlotIdMap);
+ }
+ this.hostnameSlots = selfie.hostnameSlots;
+ this.strSlots = selfie.strSlots;
+ this.size = selfie.size;
+ }
+};
+
+/******************************************************************************/
+
+export {
+ StaticExtFilteringHostnameDB,
+};
+
+/******************************************************************************/
diff --git a/src/js/static-ext-filtering.js b/src/js/static-ext-filtering.js
new file mode 100644
index 0000000..8a2905e
--- /dev/null
+++ b/src/js/static-ext-filtering.js
@@ -0,0 +1,184 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2017-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import cosmeticFilteringEngine from './cosmetic-filtering.js';
+import htmlFilteringEngine from './html-filtering.js';
+import httpheaderFilteringEngine from './httpheader-filtering.js';
+import io from './assets.js';
+import logger from './logger.js';
+import scriptletFilteringEngine from './scriptlet-filtering.js';
+
+/*******************************************************************************
+
+ All static extended filters are of the form:
+
+ field 1: one hostname, or a list of comma-separated hostnames
+ field 2: `##` or `#@#`
+ field 3: selector
+
+ The purpose of the static extended filtering engine is to coarse-parse and
+ dispatch to appropriate specialized filtering engines. There are currently
+ three specialized filtering engines:
+
+ - cosmetic filtering (aka "element hiding" in Adblock Plus)
+ - scriptlet injection: selector starts with `script:inject`
+ - New shorter syntax (1.15.12): `example.com##+js(bab-defuser.js)`
+ - html filtering: selector starts with `^`
+
+ Depending on the specialized filtering engine, field 1 may or may not be
+ optional.
+
+ The static extended filtering engine also offers parsing capabilities which
+ are available to all other specialized filtering engines. For example,
+ cosmetic and html filtering can ask the extended filtering engine to
+ compile/validate selectors.
+
+**/
+
+//--------------------------------------------------------------------------
+// Public API
+//--------------------------------------------------------------------------
+
+const staticExtFilteringEngine = {
+ get acceptedCount() {
+ return cosmeticFilteringEngine.acceptedCount +
+ scriptletFilteringEngine.acceptedCount +
+ httpheaderFilteringEngine.acceptedCount +
+ htmlFilteringEngine.acceptedCount;
+ },
+ get discardedCount() {
+ return cosmeticFilteringEngine.discardedCount +
+ scriptletFilteringEngine.discardedCount +
+ httpheaderFilteringEngine.discardedCount +
+ htmlFilteringEngine.discardedCount;
+ },
+};
+
+//--------------------------------------------------------------------------
+// Public methods
+//--------------------------------------------------------------------------
+
+staticExtFilteringEngine.reset = function() {
+ cosmeticFilteringEngine.reset();
+ scriptletFilteringEngine.reset();
+ httpheaderFilteringEngine.reset();
+ htmlFilteringEngine.reset();
+};
+
+staticExtFilteringEngine.freeze = function() {
+ cosmeticFilteringEngine.freeze();
+ scriptletFilteringEngine.freeze();
+ httpheaderFilteringEngine.freeze();
+ htmlFilteringEngine.freeze();
+};
+
+staticExtFilteringEngine.compile = function(parser, writer) {
+ if ( parser.isExtendedFilter() === false ) { return false; }
+
+ if ( parser.hasError() ) {
+ logger.writeOne({
+ realm: 'message',
+ type: 'error',
+ text: `Invalid extended filter in ${writer.properties.get('name') || '?'}: ${parser.raw}`
+ });
+ return true;
+ }
+
+ // Scriptlet injection
+ if ( parser.isScriptletFilter() ) {
+ scriptletFilteringEngine.compile(parser, writer);
+ return true;
+ }
+
+ // Response header filtering
+ if ( parser.isResponseheaderFilter() ) {
+ httpheaderFilteringEngine.compile(parser, writer);
+ return true;
+ }
+
+ // HTML filtering
+ // TODO: evaluate converting Adguard's `$$` syntax into uBO's HTML
+ // filtering syntax.
+ if ( parser.isHtmlFilter() ) {
+ htmlFilteringEngine.compile(parser, writer);
+ return true;
+ }
+
+ // Cosmetic filtering
+ if ( parser.isCosmeticFilter() ) {
+ cosmeticFilteringEngine.compile(parser, writer);
+ return true;
+ }
+
+ logger.writeOne({
+ realm: 'message',
+ type: 'error',
+ text: `Unknown extended filter in ${writer.properties.get('name') || '?'}: ${parser.raw}`
+ });
+ return true;
+};
+
+staticExtFilteringEngine.fromCompiledContent = function(reader, options) {
+ cosmeticFilteringEngine.fromCompiledContent(reader, options);
+ scriptletFilteringEngine.fromCompiledContent(reader, options);
+ httpheaderFilteringEngine.fromCompiledContent(reader, options);
+ htmlFilteringEngine.fromCompiledContent(reader, options);
+};
+
+staticExtFilteringEngine.toSelfie = function(path) {
+ return io.put(
+ `${path}/main`,
+ JSON.stringify({
+ cosmetic: cosmeticFilteringEngine.toSelfie(),
+ scriptlets: scriptletFilteringEngine.toSelfie(),
+ httpHeaders: httpheaderFilteringEngine.toSelfie(),
+ html: htmlFilteringEngine.toSelfie(),
+ })
+ );
+};
+
+staticExtFilteringEngine.fromSelfie = function(path) {
+ return io.get(`${path}/main`).then(details => {
+ let selfie;
+ try {
+ selfie = JSON.parse(details.content);
+ } catch (ex) {
+ }
+ if ( selfie instanceof Object === false ) { return false; }
+ cosmeticFilteringEngine.fromSelfie(selfie.cosmetic);
+ httpheaderFilteringEngine.fromSelfie(selfie.httpHeaders);
+ htmlFilteringEngine.fromSelfie(selfie.html);
+ if ( scriptletFilteringEngine.fromSelfie(selfie.scriptlets) === false ) {
+ return false;
+ }
+ return true;
+ });
+};
+
+/******************************************************************************/
+
+export default staticExtFilteringEngine;
+
+/******************************************************************************/
diff --git a/src/js/static-filtering-io.js b/src/js/static-filtering-io.js
new file mode 100644
index 0000000..3f016ab
--- /dev/null
+++ b/src/js/static-filtering-io.js
@@ -0,0 +1,144 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+// https://www.reddit.com/r/uBlockOrigin/comments/oq6kt5/ubo_loads_generic_filter_instead_of_specific/
+// Ensure blocks of content are sorted in ascending id order, such that the
+// specific cosmetic filters will be found (and thus reported) before the
+// generic ones.
+
+const serialize = JSON.stringify;
+const unserialize = JSON.parse;
+
+const blockStartPrefix = '#block-start-'; // ensure no special regex characters
+const blockEndPrefix = '#block-end-'; // ensure no special regex characters
+
+class CompiledListWriter {
+ constructor() {
+ this.blockId = undefined;
+ this.block = undefined;
+ this.blocks = new Map();
+ this.properties = new Map();
+ }
+ push(args) {
+ this.block.push(serialize(args));
+ }
+ pushMany(many) {
+ for ( const args of many ) {
+ this.block.push(serialize(args));
+ }
+ }
+ last() {
+ if ( Array.isArray(this.block) && this.block.length !== 0 ) {
+ return this.block[this.block.length - 1];
+ }
+ }
+ select(blockId) {
+ if ( blockId === this.blockId ) { return; }
+ this.blockId = blockId;
+ this.block = this.blocks.get(blockId);
+ if ( this.block === undefined ) {
+ this.blocks.set(blockId, (this.block = []));
+ }
+ return this;
+ }
+ toString() {
+ const result = [];
+ const sortedBlocks =
+ Array.from(this.blocks).sort((a, b) => a[0] - b[0]);
+ for ( const [ id, lines ] of sortedBlocks ) {
+ if ( lines.length === 0 ) { continue; }
+ result.push(
+ blockStartPrefix + id,
+ lines.join('\n'),
+ blockEndPrefix + id
+ );
+ }
+ return result.join('\n');
+ }
+ static serialize(arg) {
+ return serialize(arg);
+ }
+}
+
+class CompiledListReader {
+ constructor(raw, blockId) {
+ this.block = '';
+ this.len = 0;
+ this.offset = 0;
+ this.line = '';
+ this.blocks = new Map();
+ this.properties = new Map();
+ const reBlockStart = new RegExp(`^${blockStartPrefix}([\\w:]+)\\n`, 'gm');
+ let match = reBlockStart.exec(raw);
+ while ( match !== null ) {
+ const sectionId = match[1];
+ const beg = match.index + match[0].length;
+ const end = raw.indexOf(blockEndPrefix + sectionId, beg);
+ this.blocks.set(sectionId, raw.slice(beg, end));
+ reBlockStart.lastIndex = end;
+ match = reBlockStart.exec(raw);
+ }
+ if ( blockId !== undefined ) {
+ this.select(blockId);
+ }
+ }
+ next() {
+ if ( this.offset === this.len ) {
+ this.line = '';
+ return false;
+ }
+ let pos = this.block.indexOf('\n', this.offset);
+ if ( pos !== -1 ) {
+ this.line = this.block.slice(this.offset, pos);
+ this.offset = pos + 1;
+ } else {
+ this.line = this.block.slice(this.offset);
+ this.offset = this.len;
+ }
+ return true;
+ }
+ select(blockId) {
+ this.block = this.blocks.get(blockId) || '';
+ this.len = this.block.length;
+ this.offset = 0;
+ return this;
+ }
+ fingerprint() {
+ return this.line;
+ }
+ args() {
+ return unserialize(this.line);
+ }
+ static unserialize(arg) {
+ return unserialize(arg);
+ }
+}
+
+/******************************************************************************/
+
+export {
+ CompiledListReader,
+ CompiledListWriter,
+};
diff --git a/src/js/static-filtering-parser.js b/src/js/static-filtering-parser.js
new file mode 100644
index 0000000..eb8988b
--- /dev/null
+++ b/src/js/static-filtering-parser.js
@@ -0,0 +1,4461 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2020-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import Regex from '../lib/regexanalyzer/regex.js';
+import * as cssTree from '../lib/csstree/css-tree.js';
+
+/*******************************************************************************
+ *
+ * The parser creates a simple unidirectional AST from a raw line of text.
+ * Each node in the AST is a sequence of numbers, so as to avoid the need to
+ * make frequent memory allocation to represent the AST.
+ *
+ * All the AST nodes are allocated in the same integer-only array, which
+ * array is reused when parsing new lines.
+ *
+ * The AST can only be walked from top to bottom, then left to right.
+ *
+ * Each node typically refer to a corresponding string slice in the source
+ * text.
+ *
+ * It may happens a node requires to normalize the corresponding source slice,
+ * in which case there will be a reference in the AST to a transformed source
+ * string. (For example, a domain name might contain unicode characters, in
+ * which case the corresponding node will contain a reference to the
+ * (transformed) punycoded version of the domain name.)
+ *
+ * The AST can be easily used for syntax coloring purpose, in which case it's
+ * just a matter of walking through all the nodes in natural order.
+ *
+ * A tree walking utility class exists for compilation and syntax coloring
+ * purpose.
+ *
+**/
+
+/******************************************************************************/
+
+let iota = 0;
+
+iota = 0;
+export const AST_TYPE_NONE = iota++;
+export const AST_TYPE_UNKNOWN = iota++;
+export const AST_TYPE_COMMENT = iota++;
+export const AST_TYPE_NETWORK = iota++;
+export const AST_TYPE_EXTENDED = iota++;
+
+iota = 0;
+export const AST_TYPE_NETWORK_PATTERN_ANY = iota++;
+export const AST_TYPE_NETWORK_PATTERN_HOSTNAME = iota++;
+export const AST_TYPE_NETWORK_PATTERN_PLAIN = iota++;
+export const AST_TYPE_NETWORK_PATTERN_REGEX = iota++;
+export const AST_TYPE_NETWORK_PATTERN_GENERIC = iota++;
+export const AST_TYPE_NETWORK_PATTERN_BAD = iota++;
+export const AST_TYPE_EXTENDED_COSMETIC = iota++;
+export const AST_TYPE_EXTENDED_SCRIPTLET = iota++;
+export const AST_TYPE_EXTENDED_HTML = iota++;
+export const AST_TYPE_EXTENDED_RESPONSEHEADER = iota++;
+export const AST_TYPE_COMMENT_PREPARSER = iota++;
+
+iota = 0;
+export const AST_FLAG_UNSUPPORTED = 1 << iota++;
+export const AST_FLAG_IGNORE = 1 << iota++;
+export const AST_FLAG_HAS_ERROR = 1 << iota++;
+export const AST_FLAG_IS_EXCEPTION = 1 << iota++;
+export const AST_FLAG_EXT_STRONG = 1 << iota++;
+export const AST_FLAG_EXT_STYLE = 1 << iota++;
+export const AST_FLAG_EXT_SCRIPTLET_ADG = 1 << iota++;
+export const AST_FLAG_NET_PATTERN_LEFT_HNANCHOR = 1 << iota++;
+export const AST_FLAG_NET_PATTERN_RIGHT_PATHANCHOR = 1 << iota++;
+export const AST_FLAG_NET_PATTERN_LEFT_ANCHOR = 1 << iota++;
+export const AST_FLAG_NET_PATTERN_RIGHT_ANCHOR = 1 << iota++;
+export const AST_FLAG_HAS_OPTIONS = 1 << iota++;
+
+iota = 0;
+export const AST_ERROR_NONE = 1 << iota++;
+export const AST_ERROR_REGEX = 1 << iota++;
+export const AST_ERROR_PATTERN = 1 << iota++;
+export const AST_ERROR_DOMAIN_NAME = 1 << iota++;
+export const AST_ERROR_OPTION_DUPLICATE = 1 << iota++;
+export const AST_ERROR_OPTION_UNKNOWN = 1 << iota++;
+export const AST_ERROR_OPTION_BADVALUE = 1 << iota++;
+export const AST_ERROR_OPTION_EXCLUDED = 1 << iota++;
+export const AST_ERROR_IF_TOKEN_UNKNOWN = 1 << iota++;
+export const AST_ERROR_UNTRUSTED_SOURCE = 1 << iota++;
+
+iota = 0;
+const NODE_RIGHT_INDEX = iota++;
+const NOOP_NODE_SIZE = iota;
+const NODE_TYPE_INDEX = iota++;
+const NODE_DOWN_INDEX = iota++;
+const NODE_BEG_INDEX = iota++;
+const NODE_END_INDEX = iota++;
+const NODE_FLAGS_INDEX = iota++;
+const NODE_TRANSFORM_INDEX = iota++;
+const FULL_NODE_SIZE = iota;
+
+iota = 0;
+export const NODE_TYPE_NOOP = iota++;
+export const NODE_TYPE_LINE_RAW = iota++;
+export const NODE_TYPE_LINE_BODY = iota++;
+export const NODE_TYPE_WHITESPACE = iota++;
+export const NODE_TYPE_COMMENT = iota++;
+export const NODE_TYPE_IGNORE = iota++;
+export const NODE_TYPE_EXT_RAW = iota++;
+export const NODE_TYPE_EXT_OPTIONS_ANCHOR = iota++;
+export const NODE_TYPE_EXT_OPTIONS = iota++;
+export const NODE_TYPE_EXT_DECORATION = iota++;
+export const NODE_TYPE_EXT_PATTERN_RAW = iota++;
+export const NODE_TYPE_EXT_PATTERN_COSMETIC = iota++;
+export const NODE_TYPE_EXT_PATTERN_HTML = iota++;
+export const NODE_TYPE_EXT_PATTERN_RESPONSEHEADER = iota++;
+export const NODE_TYPE_EXT_PATTERN_SCRIPTLET = iota++;
+export const NODE_TYPE_EXT_PATTERN_SCRIPTLET_TOKEN = iota++;
+export const NODE_TYPE_EXT_PATTERN_SCRIPTLET_ARGS = iota++;
+export const NODE_TYPE_EXT_PATTERN_SCRIPTLET_ARG = iota++;
+export const NODE_TYPE_NET_RAW = iota++;
+export const NODE_TYPE_NET_EXCEPTION = iota++;
+export const NODE_TYPE_NET_PATTERN_RAW = iota++;
+export const NODE_TYPE_NET_PATTERN = iota++;
+export const NODE_TYPE_NET_PATTERN_PART = iota++;
+export const NODE_TYPE_NET_PATTERN_PART_SPECIAL = iota++;
+export const NODE_TYPE_NET_PATTERN_PART_UNICODE = iota++;
+export const NODE_TYPE_NET_PATTERN_LEFT_HNANCHOR = iota++;
+export const NODE_TYPE_NET_PATTERN_LEFT_ANCHOR = iota++;
+export const NODE_TYPE_NET_PATTERN_RIGHT_ANCHOR = iota++;
+export const NODE_TYPE_NET_OPTIONS_ANCHOR = iota++;
+export const NODE_TYPE_NET_OPTIONS = iota++;
+export const NODE_TYPE_NET_OPTION_SEPARATOR = iota++;
+export const NODE_TYPE_NET_OPTION_SENTINEL = iota++;
+export const NODE_TYPE_NET_OPTION_RAW = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_NOT = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_UNKNOWN = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_1P = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_STRICT1P = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_3P = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_STRICT3P = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_ALL = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_BADFILTER = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_CNAME = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_CSP = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_CSS = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_DENYALLOW = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_DOC = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_EHIDE = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_EMPTY = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_FONT = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_FRAME = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_FROM = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_GENERICBLOCK = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_GHIDE = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_HEADER = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_IMAGE = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_IMPORTANT = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_INLINEFONT = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_INLINESCRIPT = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_MATCHCASE = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_MEDIA = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_METHOD = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_MP4 = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_NOOP = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_OBJECT = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_OTHER = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_PERMISSIONS = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_PING = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_POPUNDER = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_POPUP = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_REDIRECT = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_REMOVEPARAM = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_REPLACE = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_SCRIPT = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_SHIDE = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_TO = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_XHR = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_WEBRTC = iota++;
+export const NODE_TYPE_NET_OPTION_NAME_WEBSOCKET = iota++;
+export const NODE_TYPE_NET_OPTION_ASSIGN = iota++;
+export const NODE_TYPE_NET_OPTION_VALUE = iota++;
+export const NODE_TYPE_OPTION_VALUE_DOMAIN_LIST = iota++;
+export const NODE_TYPE_OPTION_VALUE_DOMAIN_RAW = iota++;
+export const NODE_TYPE_OPTION_VALUE_NOT = iota++;
+export const NODE_TYPE_OPTION_VALUE_DOMAIN = iota++;
+export const NODE_TYPE_OPTION_VALUE_SEPARATOR = iota++;
+export const NODE_TYPE_PREPARSE_DIRECTIVE = iota++;
+export const NODE_TYPE_PREPARSE_DIRECTIVE_VALUE = iota++;
+export const NODE_TYPE_PREPARSE_DIRECTIVE_IF = iota++;
+export const NODE_TYPE_PREPARSE_DIRECTIVE_IF_VALUE = iota++;
+export const NODE_TYPE_COMMENT_URL = iota++;
+export const NODE_TYPE_COUNT = iota;
+
+iota = 0;
+export const NODE_FLAG_IGNORE = 1 << iota++;
+export const NODE_FLAG_ERROR = 1 << iota++;
+export const NODE_FLAG_IS_NEGATED = 1 << iota++;
+export const NODE_FLAG_OPTION_HAS_VALUE = 1 << iota++;
+export const NODE_FLAG_PATTERN_UNTOKENIZABLE = 1 << iota++;
+
+export const nodeTypeFromOptionName = new Map([
+ [ '', NODE_TYPE_NET_OPTION_NAME_UNKNOWN ],
+ [ '1p', NODE_TYPE_NET_OPTION_NAME_1P ],
+ /* synonym */ [ 'first-party', NODE_TYPE_NET_OPTION_NAME_1P ],
+ [ 'strict1p', NODE_TYPE_NET_OPTION_NAME_STRICT1P ],
+ [ '3p', NODE_TYPE_NET_OPTION_NAME_3P ],
+ /* synonym */ [ 'third-party', NODE_TYPE_NET_OPTION_NAME_3P ],
+ [ 'strict3p', NODE_TYPE_NET_OPTION_NAME_STRICT3P ],
+ [ 'all', NODE_TYPE_NET_OPTION_NAME_ALL ],
+ [ 'badfilter', NODE_TYPE_NET_OPTION_NAME_BADFILTER ],
+ [ 'cname', NODE_TYPE_NET_OPTION_NAME_CNAME ],
+ [ 'csp', NODE_TYPE_NET_OPTION_NAME_CSP ],
+ [ 'css', NODE_TYPE_NET_OPTION_NAME_CSS ],
+ /* synonym */ [ 'stylesheet', NODE_TYPE_NET_OPTION_NAME_CSS ],
+ [ 'denyallow', NODE_TYPE_NET_OPTION_NAME_DENYALLOW ],
+ [ 'doc', NODE_TYPE_NET_OPTION_NAME_DOC ],
+ /* synonym */ [ 'document', NODE_TYPE_NET_OPTION_NAME_DOC ],
+ [ 'ehide', NODE_TYPE_NET_OPTION_NAME_EHIDE ],
+ /* synonym */ [ 'elemhide', NODE_TYPE_NET_OPTION_NAME_EHIDE ],
+ [ 'empty', NODE_TYPE_NET_OPTION_NAME_EMPTY ],
+ [ 'font', NODE_TYPE_NET_OPTION_NAME_FONT ],
+ [ 'frame', NODE_TYPE_NET_OPTION_NAME_FRAME ],
+ /* synonym */ [ 'subdocument', NODE_TYPE_NET_OPTION_NAME_FRAME ],
+ [ 'from', NODE_TYPE_NET_OPTION_NAME_FROM ],
+ /* synonym */ [ 'domain', NODE_TYPE_NET_OPTION_NAME_FROM ],
+ [ 'genericblock', NODE_TYPE_NET_OPTION_NAME_GENERICBLOCK ],
+ [ 'ghide', NODE_TYPE_NET_OPTION_NAME_GHIDE ],
+ /* synonym */ [ 'generichide', NODE_TYPE_NET_OPTION_NAME_GHIDE ],
+ [ 'header', NODE_TYPE_NET_OPTION_NAME_HEADER ],
+ [ 'image', NODE_TYPE_NET_OPTION_NAME_IMAGE ],
+ [ 'important', NODE_TYPE_NET_OPTION_NAME_IMPORTANT ],
+ [ 'inline-font', NODE_TYPE_NET_OPTION_NAME_INLINEFONT ],
+ [ 'inline-script', NODE_TYPE_NET_OPTION_NAME_INLINESCRIPT ],
+ [ 'match-case', NODE_TYPE_NET_OPTION_NAME_MATCHCASE ],
+ [ 'media', NODE_TYPE_NET_OPTION_NAME_MEDIA ],
+ [ 'method', NODE_TYPE_NET_OPTION_NAME_METHOD ],
+ [ 'mp4', NODE_TYPE_NET_OPTION_NAME_MP4 ],
+ [ '_', NODE_TYPE_NET_OPTION_NAME_NOOP ],
+ [ 'object', NODE_TYPE_NET_OPTION_NAME_OBJECT ],
+ /* synonym */ [ 'object-subrequest', NODE_TYPE_NET_OPTION_NAME_OBJECT ],
+ [ 'other', NODE_TYPE_NET_OPTION_NAME_OTHER ],
+ [ 'permissions', NODE_TYPE_NET_OPTION_NAME_PERMISSIONS ],
+ [ 'ping', NODE_TYPE_NET_OPTION_NAME_PING ],
+ /* synonym */ [ 'beacon', NODE_TYPE_NET_OPTION_NAME_PING ],
+ [ 'popunder', NODE_TYPE_NET_OPTION_NAME_POPUNDER ],
+ [ 'popup', NODE_TYPE_NET_OPTION_NAME_POPUP ],
+ [ 'redirect', NODE_TYPE_NET_OPTION_NAME_REDIRECT ],
+ /* synonym */ [ 'rewrite', NODE_TYPE_NET_OPTION_NAME_REDIRECT ],
+ [ 'redirect-rule', NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE ],
+ [ 'removeparam', NODE_TYPE_NET_OPTION_NAME_REMOVEPARAM ],
+ [ 'replace', NODE_TYPE_NET_OPTION_NAME_REPLACE ],
+ /* synonym */ [ 'queryprune', NODE_TYPE_NET_OPTION_NAME_REMOVEPARAM ],
+ [ 'script', NODE_TYPE_NET_OPTION_NAME_SCRIPT ],
+ [ 'shide', NODE_TYPE_NET_OPTION_NAME_SHIDE ],
+ /* synonym */ [ 'specifichide', NODE_TYPE_NET_OPTION_NAME_SHIDE ],
+ [ 'to', NODE_TYPE_NET_OPTION_NAME_TO ],
+ [ 'uritransform', NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM ],
+ [ 'xhr', NODE_TYPE_NET_OPTION_NAME_XHR ],
+ /* synonym */ [ 'xmlhttprequest', NODE_TYPE_NET_OPTION_NAME_XHR ],
+ [ 'webrtc', NODE_TYPE_NET_OPTION_NAME_WEBRTC ],
+ [ 'websocket', NODE_TYPE_NET_OPTION_NAME_WEBSOCKET ],
+]);
+
+export const nodeNameFromNodeType = new Map([
+ [ NODE_TYPE_NOOP, 'noop' ],
+ [ NODE_TYPE_LINE_RAW, 'lineRaw' ],
+ [ NODE_TYPE_LINE_BODY, 'lineBody' ],
+ [ NODE_TYPE_WHITESPACE, 'whitespace' ],
+ [ NODE_TYPE_COMMENT, 'comment' ],
+ [ NODE_TYPE_IGNORE, 'ignore' ],
+ [ NODE_TYPE_EXT_RAW, 'extRaw' ],
+ [ NODE_TYPE_EXT_OPTIONS_ANCHOR, 'extOptionsAnchor' ],
+ [ NODE_TYPE_EXT_OPTIONS, 'extOptions' ],
+ [ NODE_TYPE_EXT_DECORATION, 'extDecoration' ],
+ [ NODE_TYPE_EXT_PATTERN_RAW, 'extPatternRaw' ],
+ [ NODE_TYPE_EXT_PATTERN_COSMETIC, 'extPatternCosmetic' ],
+ [ NODE_TYPE_EXT_PATTERN_HTML, 'extPatternHtml' ],
+ [ NODE_TYPE_EXT_PATTERN_RESPONSEHEADER, 'extPatternResponseheader' ],
+ [ NODE_TYPE_EXT_PATTERN_SCRIPTLET, 'extPatternScriptlet' ],
+ [ NODE_TYPE_EXT_PATTERN_SCRIPTLET_TOKEN, 'extPatternScriptletToken' ],
+ [ NODE_TYPE_EXT_PATTERN_SCRIPTLET_ARGS, 'extPatternScriptletArgs' ],
+ [ NODE_TYPE_EXT_PATTERN_SCRIPTLET_ARG, 'extPatternScriptletArg' ],
+ [ NODE_TYPE_NET_RAW, 'netRaw' ],
+ [ NODE_TYPE_NET_EXCEPTION, 'netException' ],
+ [ NODE_TYPE_NET_PATTERN_RAW, 'netPatternRaw' ],
+ [ NODE_TYPE_NET_PATTERN, 'netPattern' ],
+ [ NODE_TYPE_NET_PATTERN_PART, 'netPatternPart' ],
+ [ NODE_TYPE_NET_PATTERN_PART_SPECIAL, 'netPatternPartSpecial' ],
+ [ NODE_TYPE_NET_PATTERN_PART_UNICODE, 'netPatternPartUnicode' ],
+ [ NODE_TYPE_NET_PATTERN_LEFT_HNANCHOR, 'netPatternLeftHnanchor' ],
+ [ NODE_TYPE_NET_PATTERN_LEFT_ANCHOR, 'netPatternLeftAnchor' ],
+ [ NODE_TYPE_NET_PATTERN_RIGHT_ANCHOR, 'netPatternRightAnchor' ],
+ [ NODE_TYPE_NET_OPTIONS_ANCHOR, 'netOptionsAnchor' ],
+ [ NODE_TYPE_NET_OPTIONS, 'netOptions' ],
+ [ NODE_TYPE_NET_OPTION_RAW, 'netOptionRaw' ],
+ [ NODE_TYPE_NET_OPTION_SEPARATOR, 'netOptionSeparator'],
+ [ NODE_TYPE_NET_OPTION_SENTINEL, 'netOptionSentinel' ],
+ [ NODE_TYPE_NET_OPTION_NAME_NOT, 'netOptionNameNot'],
+ [ NODE_TYPE_NET_OPTION_ASSIGN, 'netOptionAssign' ],
+ [ NODE_TYPE_NET_OPTION_VALUE, 'netOptionValue' ],
+ [ NODE_TYPE_OPTION_VALUE_DOMAIN_LIST, 'netOptionValueDomainList' ],
+ [ NODE_TYPE_OPTION_VALUE_DOMAIN_RAW, 'netOptionValueDomainRaw' ],
+ [ NODE_TYPE_OPTION_VALUE_NOT, 'netOptionValueNot' ],
+ [ NODE_TYPE_OPTION_VALUE_DOMAIN, 'netOptionValueDomain' ],
+ [ NODE_TYPE_OPTION_VALUE_SEPARATOR, 'netOptionsValueSeparator' ],
+]);
+{
+ for ( const [ name, type ] of nodeTypeFromOptionName ) {
+ nodeNameFromNodeType.set(type, name);
+ }
+}
+
+/******************************************************************************/
+
+// Precomputed AST layouts for most common filters.
+
+const astTemplates = {
+ // ||example.com^
+ netHnAnchoredHostnameAscii: {
+ flags: AST_FLAG_NET_PATTERN_LEFT_HNANCHOR |
+ AST_FLAG_NET_PATTERN_RIGHT_PATHANCHOR,
+ type: NODE_TYPE_LINE_BODY,
+ beg: 0,
+ end: 0,
+ children: [{
+ type: NODE_TYPE_NET_RAW,
+ beg: 0,
+ end: 0,
+ children: [{
+ type: NODE_TYPE_NET_PATTERN_RAW,
+ beg: 0,
+ end: 0,
+ register: true,
+ children: [{
+ type: NODE_TYPE_NET_PATTERN_LEFT_HNANCHOR,
+ beg: 0,
+ end: 2,
+ }, {
+ type: NODE_TYPE_NET_PATTERN,
+ beg: 2,
+ end: -1,
+ register: true,
+ }, {
+ type: NODE_TYPE_NET_PATTERN_PART_SPECIAL,
+ beg: -1,
+ end: 0,
+ }],
+ }],
+ }],
+ },
+ // ||example.com^$third-party
+ net3pHnAnchoredHostnameAscii: {
+ flags: AST_FLAG_NET_PATTERN_LEFT_HNANCHOR |
+ AST_FLAG_NET_PATTERN_RIGHT_PATHANCHOR |
+ AST_FLAG_HAS_OPTIONS,
+ type: NODE_TYPE_LINE_BODY,
+ beg: 0,
+ end: 0,
+ children: [{
+ type: NODE_TYPE_NET_RAW,
+ beg: 0,
+ end: 0,
+ children: [{
+ type: NODE_TYPE_NET_PATTERN_RAW,
+ beg: 0,
+ end: 0,
+ register: true,
+ children: [{
+ type: NODE_TYPE_NET_PATTERN_LEFT_HNANCHOR,
+ beg: 0,
+ end: 2,
+ }, {
+ type: NODE_TYPE_NET_PATTERN,
+ beg: 2,
+ end: -13,
+ register: true,
+ }, {
+ type: NODE_TYPE_NET_PATTERN_PART_SPECIAL,
+ beg: -13,
+ end: -12,
+ }],
+ }, {
+ type: NODE_TYPE_NET_OPTIONS_ANCHOR,
+ beg: -12,
+ end: -11,
+ }, {
+ type: NODE_TYPE_NET_OPTIONS,
+ beg: -11,
+ end: 0,
+ register: true,
+ children: [{
+ type: NODE_TYPE_NET_OPTION_RAW,
+ beg: 0,
+ end: 0,
+ children: [{
+ type: NODE_TYPE_NET_OPTION_NAME_3P,
+ beg: 0,
+ end: 0,
+ register: true,
+ }],
+ }],
+ }],
+ }],
+ },
+ // ||example.com/path/to/resource
+ netHnAnchoredPlainAscii: {
+ flags: AST_FLAG_NET_PATTERN_LEFT_HNANCHOR,
+ type: NODE_TYPE_LINE_BODY,
+ beg: 0,
+ end: 0,
+ children: [{
+ type: NODE_TYPE_NET_RAW,
+ beg: 0,
+ end: 0,
+ children: [{
+ type: NODE_TYPE_NET_PATTERN_RAW,
+ beg: 0,
+ end: 0,
+ register: true,
+ children: [{
+ type: NODE_TYPE_NET_PATTERN_LEFT_HNANCHOR,
+ beg: 0,
+ end: 2,
+ }, {
+ type: NODE_TYPE_NET_PATTERN,
+ beg: 2,
+ end: 0,
+ register: true,
+ }],
+ }],
+ }],
+ },
+ // example.com
+ // -resource.
+ netPlainAscii: {
+ type: NODE_TYPE_LINE_BODY,
+ beg: 0,
+ end: 0,
+ children: [{
+ type: NODE_TYPE_NET_RAW,
+ beg: 0,
+ end: 0,
+ children: [{
+ type: NODE_TYPE_NET_PATTERN_RAW,
+ beg: 0,
+ end: 0,
+ register: true,
+ children: [{
+ type: NODE_TYPE_NET_PATTERN,
+ beg: 0,
+ end: 0,
+ register: true,
+ }],
+ }],
+ }],
+ },
+ // 127.0.0.1 example.com
+ netHosts1: {
+ type: NODE_TYPE_LINE_BODY,
+ beg: 0,
+ end: 0,
+ children: [{
+ type: NODE_TYPE_NET_RAW,
+ beg: 0,
+ end: 0,
+ children: [{
+ type: NODE_TYPE_NET_PATTERN_RAW,
+ beg: 0,
+ end: 0,
+ register: true,
+ children: [{
+ type: NODE_TYPE_IGNORE,
+ beg: 0,
+ end: 10,
+ }, {
+ type: NODE_TYPE_NET_PATTERN,
+ beg: 10,
+ end: 0,
+ register: true,
+ }],
+ }],
+ }],
+ },
+ // 0.0.0.0 example.com
+ netHosts2: {
+ type: NODE_TYPE_LINE_BODY,
+ beg: 0,
+ end: 0,
+ children: [{
+ type: NODE_TYPE_NET_RAW,
+ beg: 0,
+ end: 0,
+ children: [{
+ type: NODE_TYPE_NET_PATTERN_RAW,
+ beg: 0,
+ end: 0,
+ register: true,
+ children: [{
+ type: NODE_TYPE_IGNORE,
+ beg: 0,
+ end: 8,
+ }, {
+ type: NODE_TYPE_NET_PATTERN,
+ beg: 8,
+ end: 0,
+ register: true,
+ }],
+ }],
+ }],
+ },
+ // ##.ads-container
+ extPlainGenericSelector: {
+ type: NODE_TYPE_LINE_BODY,
+ beg: 0,
+ end: 0,
+ children: [{
+ type: NODE_TYPE_EXT_RAW,
+ beg: 0,
+ end: 0,
+ children: [{
+ type: NODE_TYPE_EXT_OPTIONS_ANCHOR,
+ beg: 0,
+ end: 2,
+ register: true,
+ }, {
+ type: NODE_TYPE_EXT_PATTERN_RAW,
+ beg: 2,
+ end: 0,
+ register: true,
+ children: [{
+ type: NODE_TYPE_EXT_PATTERN_COSMETIC,
+ beg: 0,
+ end: 0,
+ }],
+ }],
+ }],
+ },
+};
+
+/******************************************************************************/
+
+export const removableHTTPHeaders = new Set([
+ 'location',
+ 'refresh',
+ 'report-to',
+ 'set-cookie',
+]);
+
+export const preparserIfTokens = new Set([
+ 'ext_ublock',
+ 'ext_ubol',
+ 'ext_devbuild',
+ 'env_chromium',
+ 'env_edge',
+ 'env_firefox',
+ 'env_legacy',
+ 'env_mobile',
+ 'env_mv3',
+ 'env_safari',
+ 'cap_html_filtering',
+ 'cap_user_stylesheet',
+ 'false',
+ 'ext_abp',
+ 'adguard',
+ 'adguard_app_android',
+ 'adguard_app_ios',
+ 'adguard_app_mac',
+ 'adguard_app_windows',
+ 'adguard_ext_android_cb',
+ 'adguard_ext_chromium',
+ 'adguard_ext_edge',
+ 'adguard_ext_firefox',
+ 'adguard_ext_opera',
+ 'adguard_ext_safari',
+]);
+
+/******************************************************************************/
+
+const exCharCodeAt = (s, i) => {
+ const pos = i >= 0 ? i : s.length + i;
+ return pos >= 0 ? s.charCodeAt(pos) : -1;
+};
+
+/******************************************************************************/
+
+class ArgListParser {
+ constructor(separatorChar = ',', mustQuote = false) {
+ this.separatorChar = this.actualSeparatorChar = separatorChar;
+ this.separatorCode = this.actualSeparatorCode = separatorChar.charCodeAt(0);
+ this.mustQuote = mustQuote;
+ this.quoteBeg = 0; this.quoteEnd = 0;
+ this.argBeg = 0; this.argEnd = 0;
+ this.separatorBeg = 0; this.separatorEnd = 0;
+ this.transform = false;
+ this.failed = false;
+ this.reWhitespaceStart = /^\s+/;
+ this.reWhitespaceEnd = /\s+$/;
+ this.reOddTrailingEscape = /(?:^|[^\\])(?:\\\\)*\\$/;
+ this.reTrailingEscapeChars = /\\+$/;
+ }
+ nextArg(pattern, beg = 0) {
+ const len = pattern.length;
+ this.quoteBeg = beg + this.leftWhitespaceCount(pattern.slice(beg));
+ this.failed = false;
+ const qc = pattern.charCodeAt(this.quoteBeg);
+ if ( qc === 0x22 /* " */ || qc === 0x27 /* ' */ || qc === 0x60 /* ` */ ) {
+ this.indexOfNextArgSeparator(pattern, qc);
+ if ( this.argEnd !== len ) {
+ this.quoteEnd = this.argEnd + 1;
+ this.separatorBeg = this.separatorEnd = this.quoteEnd;
+ this.separatorEnd += this.leftWhitespaceCount(pattern.slice(this.quoteEnd));
+ if ( this.separatorEnd === len ) { return this; }
+ if ( pattern.charCodeAt(this.separatorEnd) === this.separatorCode ) {
+ this.separatorEnd += 1;
+ return this;
+ }
+ }
+ }
+ this.indexOfNextArgSeparator(pattern, this.separatorCode);
+ this.separatorBeg = this.separatorEnd = this.argEnd;
+ if ( this.separatorBeg < len ) {
+ this.separatorEnd += 1;
+ }
+ this.argEnd -= this.rightWhitespaceCount(pattern.slice(0, this.separatorBeg));
+ this.quoteEnd = this.argEnd;
+ if ( this.mustQuote ) {
+ this.failed = true;
+ }
+ return this;
+ }
+ normalizeArg(s, char = '') {
+ if ( char === '' ) { char = this.actualSeparatorChar; }
+ let out = '';
+ let pos = 0;
+ while ( (pos = s.lastIndexOf(char)) !== -1 ) {
+ out = s.slice(pos) + out;
+ s = s.slice(0, pos);
+ const match = this.reTrailingEscapeChars.exec(s);
+ if ( match === null ) { continue; }
+ const tail = (match[0].length & 1) !== 0
+ ? match[0].slice(0, -1)
+ : match[0];
+ out = tail + out;
+ s = s.slice(0, -match[0].length);
+ }
+ if ( out === '' ) { return s; }
+ return s + out;
+ }
+ leftWhitespaceCount(s) {
+ const match = this.reWhitespaceStart.exec(s);
+ return match === null ? 0 : match[0].length;
+ }
+ rightWhitespaceCount(s) {
+ const match = this.reWhitespaceEnd.exec(s);
+ return match === null ? 0 : match[0].length;
+ }
+ indexOfNextArgSeparator(pattern, separatorCode) {
+ this.argBeg = this.argEnd = separatorCode !== this.separatorCode
+ ? this.quoteBeg + 1
+ : this.quoteBeg;
+ this.transform = false;
+ if ( separatorCode !== this.actualSeparatorCode ) {
+ this.actualSeparatorCode = separatorCode;
+ this.actualSeparatorChar = String.fromCharCode(separatorCode);
+ }
+ while ( this.argEnd < pattern.length ) {
+ const pos = pattern.indexOf(this.actualSeparatorChar, this.argEnd);
+ if ( pos === -1 ) {
+ return (this.argEnd = pattern.length);
+ }
+ if ( this.reOddTrailingEscape.test(pattern.slice(0, pos)) === false ) {
+ return (this.argEnd = pos);
+ }
+ this.transform = true;
+ this.argEnd = pos + 1;
+ }
+ }
+}
+
+/******************************************************************************/
+
+class AstWalker {
+ constructor(parser, from = 0) {
+ this.parser = parser;
+ this.stack = [];
+ this.reset(from);
+ }
+ get depth() {
+ return this.stackPtr;
+ }
+ reset(from = 0) {
+ this.nodes = this.parser.nodes;
+ this.stackPtr = 0;
+ return (this.current = from || this.parser.rootNode);
+ }
+ next() {
+ const current = this.current;
+ if ( current === 0 ) { return 0; }
+ const down = this.nodes[current+NODE_DOWN_INDEX];
+ if ( down !== 0 ) {
+ this.stack[this.stackPtr++] = this.current;
+ return (this.current = down);
+ }
+ const right = this.nodes[current+NODE_RIGHT_INDEX];
+ if ( right !== 0 && this.stackPtr !== 0 ) {
+ return (this.current = right);
+ }
+ while ( this.stackPtr !== 0 ) {
+ const parent = this.stack[--this.stackPtr];
+ const right = this.nodes[parent+NODE_RIGHT_INDEX];
+ if ( right !== 0 ) {
+ return (this.current = right);
+ }
+ }
+ return (this.current = 0);
+ }
+ right() {
+ const current = this.current;
+ if ( current === 0 ) { return 0; }
+ const right = this.nodes[current+NODE_RIGHT_INDEX];
+ if ( right !== 0 && this.stackPtr !== 0 ) {
+ return (this.current = right);
+ }
+ while ( this.stackPtr !== 0 ) {
+ const parent = this.stack[--this.stackPtr];
+ const right = this.nodes[parent+NODE_RIGHT_INDEX];
+ if ( right !== 0 ) {
+ return (this.current = right);
+ }
+ }
+ return (this.current = 0);
+ }
+ until(which) {
+ let node = this.next();
+ while ( node !== 0 ) {
+ if ( this.nodes[node+NODE_TYPE_INDEX] === which ) { return node; }
+ node = this.next();
+ }
+ return 0;
+ }
+ canGoDown() {
+ return this.nodes[this.current+NODE_DOWN_INDEX] !== 0;
+ }
+ dispose() {
+ this.parser.walkerJunkyard.push(this);
+ }
+}
+
+/******************************************************************************/
+
+class DomainListIterator {
+ constructor(parser, root) {
+ this.parser = parser;
+ this.walker = parser.getWalker();
+ this.value = undefined;
+ this.item = { hn: '', not: false, bad: false };
+ this.reuse(root);
+ }
+ next() {
+ if ( this.done ) { return this.value; }
+ let node = this.walker.current;
+ let ready = false;
+ while ( node !== 0 ) {
+ switch ( this.parser.getNodeType(node) ) {
+ case NODE_TYPE_OPTION_VALUE_DOMAIN_RAW:
+ this.item.hn = '';
+ this.item.not = false;
+ this.item.bad = this.parser.getNodeFlags(node, NODE_FLAG_ERROR) !== 0;
+ break;
+ case NODE_TYPE_OPTION_VALUE_NOT:
+ this.item.not = true;
+ break;
+ case NODE_TYPE_OPTION_VALUE_DOMAIN:
+ this.item.hn = this.parser.getNodeTransform(node);
+ this.value = this.item;
+ ready = true;
+ break;
+ default:
+ break;
+ }
+ node = this.walker.next();
+ if ( ready ) { return this; }
+ }
+ return this.stop();
+ }
+ reuse(root) {
+ this.walker.reset(root);
+ this.done = false;
+ return this;
+ }
+ stop() {
+ this.done = true;
+ this.value = undefined;
+ this.parser.domainListIteratorJunkyard.push(this);
+ return this;
+ }
+ [Symbol.iterator]() {
+ return this;
+ }
+}
+
+/******************************************************************************/
+
+export class AstFilterParser {
+ constructor(options = {}) {
+ this.raw = '';
+ this.rawEnd = 0;
+ this.nodes = new Uint32Array(16384);
+ this.nodePoolPtr = FULL_NODE_SIZE;
+ this.nodePoolEnd = this.nodes.length;
+ this.astTransforms = [ null ];
+ this.astTransformPtr = 1;
+ this.rootNode = 0;
+ this.astType = AST_TYPE_NONE;
+ this.astTypeFlavor = AST_TYPE_NONE;
+ this.astFlags = 0;
+ this.astError = 0;
+ this.nodeTypeRegister = [];
+ this.nodeTypeRegisterPtr = 0;
+ this.nodeTypeLookupTable = new Uint32Array(NODE_TYPE_COUNT);
+ this.punycoder = new URL('https://ublock0.invalid/');
+ this.domainListIteratorJunkyard = [];
+ this.walkerJunkyard = [];
+ this.hasWhitespace = false;
+ this.hasUnicode = false;
+ this.hasUppercase = false;
+ // Options
+ this.options = options;
+ this.interactive = options.interactive || false;
+ this.badTypes = new Set(options.badTypes || []);
+ this.maxTokenLength = options.maxTokenLength || 7;
+ // TODO: rethink this
+ this.result = { exception: false, raw: '', compiled: '', error: undefined };
+ this.selectorCompiler = new ExtSelectorCompiler(options);
+ // Regexes
+ this.reWhitespaceStart = /^\s+/;
+ this.reWhitespaceEnd = /\s+$/;
+ this.reCommentLine = /^(?:!|#\s|####|\[adblock)/i;
+ this.reExtAnchor = /(#@?(?:\$\?|\$|%|\?)?#).{1,2}/;
+ this.reInlineComment = /(?:\s+#).*?$/;
+ this.reNetException = /^@@/;
+ this.reNetAnchor = /(?:)\$[^,\w~]/;
+ this.reHnAnchoredPlainAscii = /^\|\|[0-9a-z%&,\-.\/:;=?_]+$/;
+ this.reHnAnchoredHostnameAscii = /^\|\|(?:[\da-z][\da-z_-]*\.)*[\da-z_-]*[\da-z]\^$/;
+ this.reHnAnchoredHostnameUnicode = /^\|\|(?:[\p{L}\p{N}][\p{L}\p{N}\u{2d}]*\.)*[\p{L}\p{N}\u{2d}]*[\p{L}\p{N}]\^$/u;
+ this.reHn3pAnchoredHostnameAscii = /^\|\|(?:[\da-z][\da-z_-]*\.)*[\da-z_-]*[\da-z]\^\$third-party$/;
+ this.rePlainAscii = /^[0-9a-z%&\-.\/:;=?_]{2,}$/;
+ this.reNetHosts1 = /^127\.0\.0\.1 (?:[\da-z][\da-z_-]*\.)+[\da-z-]*[a-z]$/;
+ this.reNetHosts2 = /^0\.0\.0\.0 (?:[\da-z][\da-z_-]*\.)+[\da-z-]*[a-z]$/;
+ this.rePlainGenericCosmetic = /^##[.#][A-Za-z_][\w-]*$/;
+ this.reHostnameAscii = /^(?:[\da-z][\da-z_-]*\.)*[\da-z][\da-z-]*[\da-z]$/;
+ this.rePlainEntity = /^(?:[\da-z][\da-z_-]*\.)+\*$/;
+ this.reHostsSink = /^[\w%.:\[\]-]+\s+/;
+ this.reHostsRedirect = /(?:0\.0\.0\.0|broadcasthost|local|localhost(?:\.localdomain)?|ip6-\w+)(?:[^\w.-]|$)/;
+ this.reNetOptionComma = /,(?:~?[13a-z-]+(?:=.*?)?|_+)(?:,|$)/;
+ this.rePointlessLeftAnchor = /^\|\|?\*+/;
+ this.reIsTokenChar = /^[%0-9A-Za-z]/;
+ this.rePointlessLeadingWildcards = /^(\*+)[^%0-9A-Za-z\u{a0}-\u{10FFFF}]/u;
+ this.rePointlessTrailingSeparator = /\*(\^\**)$/;
+ this.rePointlessTrailingWildcards = /(?:[^%0-9A-Za-z]|[%0-9A-Za-z]{7,})(\*+)$/;
+ this.reHasWhitespaceChar = /\s/;
+ this.reHasUppercaseChar = /[A-Z]/;
+ this.reHasUnicodeChar = /[^\x00-\x7F]/;
+ this.reUnicodeChars = /\P{ASCII}/gu;
+ this.reBadHostnameChars = /[\x00-\x24\x26-\x29\x2b\x2c\x2f\x3b-\x40\x5c\x5e\x60\x7b-\x7f]/;
+ this.reIsEntity = /^[^*]+\.\*$/;
+ this.rePreparseDirectiveIf = /^!#if /;
+ this.rePreparseDirectiveAny = /^!#(?:else|endif|if |include )/;
+ this.reURL = /\bhttps?:\/\/\S+/;
+ this.reHasPatternSpecialChars = /[\*\^]/;
+ this.rePatternAllSpecialChars = /[\*\^]+|[^\x00-\x7f]+/g;
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1146
+ // From https://codemirror.net/doc/manual.html#option_specialChars
+ this.reHasInvalidChar = /[\x00-\x1F\x7F-\x9F\xAD\u061C\u200B-\u200F\u2028\u2029\uFEFF\uFFF9-\uFFFC]/;
+ this.reHostnamePatternPart = /^[^\x00-\x24\x26-\x29\x2B\x2C\x2F\x3A-\x40\x5B-\x5E\x60\x7B-\x7F]+/;
+ this.reHostnameLabel = /[^.]+/g;
+ this.reResponseheaderPattern = /^\^responseheader\(.*\)$/;
+ this.rePatternScriptletJsonArgs = /^\{.*\}$/;
+ this.reGoodRegexToken = /[^\x01%0-9A-Za-z][%0-9A-Za-z]{7,}|[^\x01%0-9A-Za-z][%0-9A-Za-z]{1,6}[^\x01%0-9A-Za-z]/;
+ this.reBadCSP = /(?:=|;)\s*report-(?:to|uri)\b/;
+ this.reNoopOption = /^_+$/;
+ this.scriptletArgListParser = new ArgListParser(',');
+ }
+
+ finish() {
+ this.selectorCompiler.finish();
+ }
+
+ parse(raw) {
+ this.raw = raw;
+ this.rawEnd = raw.length;
+ this.nodePoolPtr = FULL_NODE_SIZE;
+ this.nodeTypeRegisterPtr = 0;
+ this.astTransformPtr = 1;
+ this.astType = AST_TYPE_NONE;
+ this.astTypeFlavor = AST_TYPE_NONE;
+ this.astFlags = 0;
+ this.astError = 0;
+ this.rootNode = this.allocTypedNode(NODE_TYPE_LINE_RAW, 0, this.rawEnd);
+ if ( this.rawEnd === 0 ) { return; }
+
+ // Fast-track very common simple filters using pre-computed AST layouts
+ // to skip parsing and validation.
+ const c1st = this.raw.charCodeAt(0);
+ const clast = exCharCodeAt(this.raw, -1);
+ if ( c1st === 0x7C /* | */ ) {
+ if (
+ clast === 0x5E /* ^ */ &&
+ this.reHnAnchoredHostnameAscii.test(this.raw)
+ ) {
+ // ||example.com^
+ this.astType = AST_TYPE_NETWORK;
+ this.astTypeFlavor = AST_TYPE_NETWORK_PATTERN_HOSTNAME;
+ const node = this.astFromTemplate(this.rootNode,
+ astTemplates.netHnAnchoredHostnameAscii
+ );
+ this.linkDown(this.rootNode, node);
+ return;
+ }
+ if (
+ this.raw.endsWith('$third-party') &&
+ this.reHn3pAnchoredHostnameAscii.test(this.raw)
+ ) {
+ // ||example.com^$third-party
+ this.astType = AST_TYPE_NETWORK;
+ this.astTypeFlavor = AST_TYPE_NETWORK_PATTERN_HOSTNAME;
+ const node = this.astFromTemplate(this.rootNode,
+ astTemplates.net3pHnAnchoredHostnameAscii
+ );
+ this.linkDown(this.rootNode, node);
+ return;
+ }
+ if ( this.reHnAnchoredPlainAscii.test(this.raw) ) {
+ // ||example.com/path/to/resource
+ this.astType = AST_TYPE_NETWORK;
+ this.astTypeFlavor = AST_TYPE_NETWORK_PATTERN_PLAIN;
+ const node = this.astFromTemplate(this.rootNode,
+ astTemplates.netHnAnchoredPlainAscii
+ );
+ this.linkDown(this.rootNode, node);
+ return;
+ }
+ } else if ( c1st === 0x23 /* # */ ) {
+ if ( this.rePlainGenericCosmetic.test(this.raw) ) {
+ // ##.ads-container
+ this.astType = AST_TYPE_EXTENDED;
+ this.astTypeFlavor = AST_TYPE_EXTENDED_COSMETIC;
+ const node = this.astFromTemplate(this.rootNode,
+ astTemplates.extPlainGenericSelector
+ );
+ this.linkDown(this.rootNode, node);
+ this.result.exception = false;
+ this.result.raw = this.raw.slice(2);
+ this.result.compiled = this.raw.slice(2);
+ return;
+ }
+ } else if ( c1st === 0x31 /* 1 */ ) {
+ if ( this.reNetHosts1.test(this.raw) ) {
+ // 127.0.0.1 example.com
+ this.astType = AST_TYPE_NETWORK;
+ this.astTypeFlavor = AST_TYPE_NETWORK_PATTERN_HOSTNAME;
+ const node = this.astFromTemplate(this.rootNode,
+ astTemplates.netHosts1
+ );
+ this.linkDown(this.rootNode, node);
+ return;
+ }
+ } else if ( c1st === 0x30 /* 0 */ ) {
+ if ( this.reNetHosts2.test(this.raw) ) {
+ // 0.0.0.0 example.com
+ this.astType = AST_TYPE_NETWORK;
+ this.astTypeFlavor = AST_TYPE_NETWORK_PATTERN_HOSTNAME;
+ const node = this.astFromTemplate(this.rootNode,
+ astTemplates.netHosts2
+ );
+ this.linkDown(this.rootNode, node);
+ return;
+ }
+ } else if (
+ (c1st !== 0x2F /* / */ || clast !== 0x2F /* / */) &&
+ (this.rePlainAscii.test(this.raw))
+ ) {
+ // example.com
+ // -resource.
+ this.astType = AST_TYPE_NETWORK;
+ this.astTypeFlavor = this.reHostnameAscii.test(this.raw)
+ ? AST_TYPE_NETWORK_PATTERN_HOSTNAME
+ : AST_TYPE_NETWORK_PATTERN_PLAIN;
+ const node = this.astFromTemplate(this.rootNode,
+ astTemplates.netPlainAscii
+ );
+ this.linkDown(this.rootNode, node);
+ return;
+ }
+
+ // All else: full parsing and validation.
+ this.hasWhitespace = this.reHasWhitespaceChar.test(raw);
+ this.linkDown(this.rootNode, this.parseRaw(this.rootNode));
+ }
+
+ astFromTemplate(parent, template) {
+ const parentBeg = this.nodes[parent+NODE_BEG_INDEX];
+ const parentEnd = this.nodes[parent+NODE_END_INDEX];
+ const beg = template.beg + (template.beg >= 0 ? parentBeg : parentEnd);
+ const end = template.end + (template.end <= 0 ? parentEnd : parentBeg);
+ const node = this.allocTypedNode(template.type, beg, end);
+ if ( template.register ) {
+ this.addNodeToRegister(template.type, node);
+ }
+ if ( template.flags ) {
+ this.addFlags(template.flags);
+ }
+ if ( template.nodeFlags ) {
+ this.addNodeFlags(node, template.nodeFlags);
+ }
+ const children = template.children;
+ if ( children === undefined ) { return node; }
+ const head = this.astFromTemplate(node, children[0]);
+ this.linkDown(node, head);
+ const n = children.length;
+ if ( n === 1 ) { return node; }
+ let prev = head;
+ for ( let i = 1; i < n; i++ ) {
+ prev = this.linkRight(prev, this.astFromTemplate(node, children[i]));
+ }
+ return node;
+ }
+
+ getType() {
+ return this.astType;
+ }
+
+ isComment() {
+ return this.astType === AST_TYPE_COMMENT;
+ }
+
+ isFilter() {
+ return this.isNetworkFilter() || this.isExtendedFilter();
+ }
+
+ isNetworkFilter() {
+ return this.astType === AST_TYPE_NETWORK;
+ }
+
+ isExtendedFilter() {
+ return this.astType === AST_TYPE_EXTENDED;
+ }
+
+ isCosmeticFilter() {
+ return this.astType === AST_TYPE_EXTENDED &&
+ this.astTypeFlavor === AST_TYPE_EXTENDED_COSMETIC;
+ }
+
+ isScriptletFilter() {
+ return this.astType === AST_TYPE_EXTENDED &&
+ this.astTypeFlavor === AST_TYPE_EXTENDED_SCRIPTLET;
+ }
+
+ isHtmlFilter() {
+ return this.astType === AST_TYPE_EXTENDED &&
+ this.astTypeFlavor === AST_TYPE_EXTENDED_HTML;
+ }
+
+ isResponseheaderFilter() {
+ return this.astType === AST_TYPE_EXTENDED &&
+ this.astTypeFlavor === AST_TYPE_EXTENDED_RESPONSEHEADER;
+ }
+
+ getFlags(flags = 0xFFFFFFFF) {
+ return this.astFlags & flags;
+ }
+
+ addFlags(flags) {
+ this.astFlags |= flags;
+ }
+
+ parseRaw(parent) {
+ const head = this.allocHeadNode();
+ let prev = head, next = 0;
+ const parentBeg = this.nodes[parent+NODE_BEG_INDEX];
+ const parentEnd = this.nodes[parent+NODE_END_INDEX];
+ const l1 = this.hasWhitespace
+ ? this.leftWhitespaceCount(this.getNodeString(parent))
+ : 0;
+ if ( l1 !== 0 ) {
+ next = this.allocTypedNode(
+ NODE_TYPE_WHITESPACE,
+ parentBeg,
+ parentBeg + l1
+ );
+ prev = this.linkRight(prev, next);
+ if ( l1 === parentEnd ) { return this.throwHeadNode(head); }
+ }
+ const r0 = this.hasWhitespace
+ ? parentEnd - this.rightWhitespaceCount(this.getNodeString(parent))
+ : parentEnd;
+ if ( r0 !== l1 ) {
+ next = this.allocTypedNode(
+ NODE_TYPE_LINE_BODY,
+ parentBeg + l1,
+ parentBeg + r0
+ );
+ this.linkDown(next, this.parseFilter(next));
+ prev = this.linkRight(prev, next);
+ }
+ if ( r0 !== parentEnd ) {
+ next = this.allocTypedNode(
+ NODE_TYPE_WHITESPACE,
+ parentBeg + r0,
+ parentEnd
+ );
+ this.linkRight(prev, next);
+ }
+ return this.throwHeadNode(head);
+ }
+
+ parseFilter(parent) {
+ const parentBeg = this.nodes[parent+NODE_BEG_INDEX];
+ const parentEnd = this.nodes[parent+NODE_END_INDEX];
+ const parentStr = this.getNodeString(parent);
+
+ // A comment?
+ if ( this.reCommentLine.test(parentStr) ) {
+ const head = this.allocTypedNode(NODE_TYPE_COMMENT, parentBeg, parentEnd);
+ this.astType = AST_TYPE_COMMENT;
+ if ( this.interactive ) {
+ this.linkDown(head, this.parseComment(head));
+ }
+ return head;
+ }
+
+ // An extended filter? (or rarely, a comment)
+ if ( this.reExtAnchor.test(parentStr) ) {
+ const match = this.reExtAnchor.exec(parentStr);
+ const matchLen = match[1].length;
+ const head = this.allocTypedNode(NODE_TYPE_EXT_RAW, parentBeg, parentEnd);
+ this.linkDown(head, this.parseExt(head, parentBeg + match.index, matchLen));
+ return head;
+ } else if ( parentStr.charCodeAt(0) === 0x23 /* # */ ) {
+ const head = this.allocTypedNode(NODE_TYPE_COMMENT, parentBeg, parentEnd);
+ this.astType = AST_TYPE_COMMENT;
+ return head;
+ }
+
+ // Good to know in advance to avoid costly tests later on
+ this.hasUppercase = this.reHasUppercaseChar.test(parentStr);
+ this.hasUnicode = this.reHasUnicodeChar.test(parentStr);
+
+ // A network filter (probably)
+ this.astType = AST_TYPE_NETWORK;
+
+ // Parse inline comment if any
+ let tail = 0, tailStart = parentEnd;
+ if ( this.hasWhitespace && this.reInlineComment.test(parentStr) ) {
+ const match = this.reInlineComment.exec(parentStr);
+ tailStart = parentBeg + match.index;
+ tail = this.allocTypedNode(NODE_TYPE_COMMENT, tailStart, parentEnd);
+ }
+
+ const head = this.allocTypedNode(NODE_TYPE_NET_RAW, parentBeg, tailStart);
+ if ( this.linkDown(head, this.parseNet(head)) === 0 ) {
+ this.astType = AST_TYPE_UNKNOWN;
+ this.addFlags(AST_FLAG_UNSUPPORTED | AST_FLAG_HAS_ERROR);
+ }
+ if ( tail !== 0 ) {
+ this.linkRight(head, tail);
+ }
+ return head;
+ }
+
+ parseComment(parent) {
+ const parentStr = this.getNodeString(parent);
+ if ( this.rePreparseDirectiveAny.test(parentStr) ) {
+ this.astTypeFlavor = AST_TYPE_COMMENT_PREPARSER;
+ return this.parsePreparseDirective(parent, parentStr);
+ }
+ if ( this.reURL.test(parentStr) === false ) { return 0; }
+ const parentBeg = this.nodes[parent+NODE_BEG_INDEX];
+ const parentEnd = this.nodes[parent+NODE_END_INDEX];
+ const match = this.reURL.exec(parentStr);
+ const urlBeg = parentBeg + match.index;
+ const urlEnd = urlBeg + match[0].length;
+ const head = this.allocTypedNode(NODE_TYPE_COMMENT, parentBeg, urlBeg);
+ let next = this.allocTypedNode(NODE_TYPE_COMMENT_URL, urlBeg, urlEnd);
+ let prev = this.linkRight(head, next);
+ if ( urlEnd !== parentEnd ) {
+ next = this.allocTypedNode(NODE_TYPE_COMMENT, urlEnd, parentEnd);
+ this.linkRight(prev, next);
+ }
+ return head;
+ }
+
+ parsePreparseDirective(parent, s) {
+ const parentBeg = this.nodes[parent+NODE_BEG_INDEX];
+ const parentEnd = this.nodes[parent+NODE_END_INDEX];
+ const match = this.rePreparseDirectiveAny.exec(s);
+ const directiveEnd = parentBeg + match[0].length;
+ const head = this.allocTypedNode(
+ NODE_TYPE_PREPARSE_DIRECTIVE,
+ parentBeg,
+ directiveEnd
+ );
+ if ( directiveEnd !== parentEnd ) {
+ const type = s.startsWith('!#if ')
+ ? NODE_TYPE_PREPARSE_DIRECTIVE_IF_VALUE
+ : NODE_TYPE_PREPARSE_DIRECTIVE_VALUE;
+ const next = this.allocTypedNode(type, directiveEnd, parentEnd);
+ this.addNodeToRegister(type, next);
+ this.linkRight(head, next);
+ if ( type === NODE_TYPE_PREPARSE_DIRECTIVE_IF_VALUE ) {
+ const rawToken = this.getNodeString(next).trim();
+ if ( utils.preparser.evaluateExpr(rawToken) === undefined ) {
+ this.addNodeFlags(next, NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ this.astError = AST_ERROR_IF_TOKEN_UNKNOWN;
+ }
+ }
+ }
+ return head;
+ }
+
+ // Very common, look into fast-tracking such plain pattern:
+ // /^[^!#\$\*\^][^#\$\*\^]*[^\$\*\|]$/
+ parseNet(parent) {
+ const parentBeg = this.nodes[parent+NODE_BEG_INDEX];
+ const parentEnd = this.nodes[parent+NODE_END_INDEX];
+ const parentStr = this.getNodeString(parent);
+ const head = this.allocHeadNode();
+ let patternBeg = parentBeg;
+ let prev = head, next = 0, tail = 0;
+ if ( this.reNetException.test(parentStr) ) {
+ this.addFlags(AST_FLAG_IS_EXCEPTION);
+ next = this.allocTypedNode(NODE_TYPE_NET_EXCEPTION, parentBeg, parentBeg+2);
+ prev = this.linkRight(prev, next);
+ patternBeg += 2;
+ }
+ let anchorBeg = this.indexOfNetAnchor(parentStr, patternBeg);
+ if ( anchorBeg === -1 ) { return 0; }
+ anchorBeg += parentBeg;
+ if ( anchorBeg !== parentEnd ) {
+ tail = this.allocTypedNode(
+ NODE_TYPE_NET_OPTIONS_ANCHOR,
+ anchorBeg,
+ anchorBeg + 1
+ );
+ next = this.allocTypedNode(
+ NODE_TYPE_NET_OPTIONS,
+ anchorBeg + 1,
+ parentEnd
+ );
+ this.addFlags(AST_FLAG_HAS_OPTIONS);
+ this.addNodeToRegister(NODE_TYPE_NET_OPTIONS, next);
+ this.linkDown(next, this.parseNetOptions(next));
+ this.linkRight(tail, next);
+ }
+ next = this.allocTypedNode(
+ NODE_TYPE_NET_PATTERN_RAW,
+ patternBeg,
+ anchorBeg
+ );
+ this.addNodeToRegister(NODE_TYPE_NET_PATTERN_RAW, next);
+ this.linkDown(next, this.parseNetPattern(next));
+ prev = this.linkRight(prev, next);
+ if ( tail !== 0 ) {
+ this.linkRight(prev, tail);
+ }
+ if ( this.astType === AST_TYPE_NETWORK ) {
+ this.validateNet();
+ }
+ return this.throwHeadNode(head);
+ }
+
+ validateNet() {
+ const isException = this.isException();
+ let bad = false, realBad = false;
+ let abstractTypeCount = 0;
+ let behaviorTypeCount = 0;
+ let docTypeCount = 0;
+ let modifierType = 0;
+ let requestTypeCount = 0;
+ let unredirectableTypeCount = 0;
+ for ( let i = 0, n = this.nodeTypeRegisterPtr; i < n; i++ ) {
+ const type = this.nodeTypeRegister[i];
+ const targetNode = this.nodeTypeLookupTable[type];
+ if ( targetNode === 0 ) { continue; }
+ if ( this.badTypes.has(type) ) {
+ this.addNodeFlags(NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ this.astError = AST_ERROR_OPTION_EXCLUDED;
+ }
+ const flags = this.getNodeFlags(targetNode);
+ if ( (flags & NODE_FLAG_ERROR) !== 0 ) { continue; }
+ const isNegated = (flags & NODE_FLAG_IS_NEGATED) !== 0;
+ const hasValue = (flags & NODE_FLAG_OPTION_HAS_VALUE) !== 0;
+ bad = false; realBad = false;
+ switch ( type ) {
+ case NODE_TYPE_NET_OPTION_NAME_ALL:
+ realBad = isNegated || hasValue || modifierType !== 0;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_1P:
+ case NODE_TYPE_NET_OPTION_NAME_3P:
+ realBad = hasValue;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_BADFILTER:
+ case NODE_TYPE_NET_OPTION_NAME_NOOP:
+ realBad = isNegated || hasValue;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_CSS:
+ case NODE_TYPE_NET_OPTION_NAME_FONT:
+ case NODE_TYPE_NET_OPTION_NAME_IMAGE:
+ case NODE_TYPE_NET_OPTION_NAME_MEDIA:
+ case NODE_TYPE_NET_OPTION_NAME_OBJECT:
+ case NODE_TYPE_NET_OPTION_NAME_OTHER:
+ case NODE_TYPE_NET_OPTION_NAME_SCRIPT:
+ case NODE_TYPE_NET_OPTION_NAME_XHR:
+ realBad = hasValue;
+ if ( realBad ) { break; }
+ requestTypeCount += 1;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_CNAME:
+ realBad = isException === false || isNegated || hasValue;
+ if ( realBad ) { break; }
+ modifierType = type;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_CSP:
+ realBad = (hasValue || isException) === false ||
+ modifierType !== 0 ||
+ this.reBadCSP.test(
+ this.getNetOptionValue(NODE_TYPE_NET_OPTION_NAME_CSP)
+ );
+ if ( realBad ) { break; }
+ modifierType = type;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_DENYALLOW:
+ realBad = isNegated || hasValue === false ||
+ this.getBranchFromType(NODE_TYPE_NET_OPTION_NAME_FROM) === 0;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_DOC:
+ case NODE_TYPE_NET_OPTION_NAME_FRAME:
+ realBad = hasValue;
+ if ( realBad ) { break; }
+ docTypeCount += 1;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_EHIDE:
+ case NODE_TYPE_NET_OPTION_NAME_GHIDE:
+ case NODE_TYPE_NET_OPTION_NAME_SHIDE:
+ realBad = isNegated || hasValue || modifierType !== 0;
+ if ( realBad ) { break; }
+ behaviorTypeCount += 1;
+ unredirectableTypeCount += 1;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_EMPTY:
+ case NODE_TYPE_NET_OPTION_NAME_MP4:
+ realBad = isNegated || hasValue || modifierType !== 0;
+ if ( realBad ) { break; }
+ modifierType = type;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_FROM:
+ case NODE_TYPE_NET_OPTION_NAME_METHOD:
+ case NODE_TYPE_NET_OPTION_NAME_TO:
+ realBad = isNegated || hasValue === false;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_GENERICBLOCK:
+ bad = true;
+ realBad = isException === false || isNegated || hasValue;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_HEADER:
+ realBad = isNegated || hasValue === false;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_IMPORTANT:
+ realBad = isException || isNegated || hasValue;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_INLINEFONT:
+ case NODE_TYPE_NET_OPTION_NAME_INLINESCRIPT:
+ realBad = hasValue;
+ if ( realBad ) { break; }
+ modifierType = type;
+ unredirectableTypeCount += 1;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_MATCHCASE:
+ realBad = this.isRegexPattern() === false;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_PERMISSIONS:
+ realBad = modifierType !== 0 || (hasValue || isException) === false;
+ if ( realBad ) { break; }
+ modifierType = type;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_PING:
+ case NODE_TYPE_NET_OPTION_NAME_WEBSOCKET:
+ realBad = hasValue;
+ if ( realBad ) { break; }
+ requestTypeCount += 1;
+ unredirectableTypeCount += 1;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_POPUNDER:
+ case NODE_TYPE_NET_OPTION_NAME_POPUP:
+ realBad = hasValue;
+ if ( realBad ) { break; }
+ abstractTypeCount += 1;
+ unredirectableTypeCount += 1;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_REDIRECT:
+ case NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE:
+ case NODE_TYPE_NET_OPTION_NAME_REPLACE:
+ case NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM:
+ realBad = isNegated || (isException || hasValue) === false ||
+ modifierType !== 0;
+ if ( realBad ) { break; }
+ modifierType = type;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_REMOVEPARAM:
+ realBad = isNegated || modifierType !== 0;
+ if ( realBad ) { break; }
+ modifierType = type;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_STRICT1P:
+ case NODE_TYPE_NET_OPTION_NAME_STRICT3P:
+ realBad = isNegated || hasValue;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_UNKNOWN:
+ this.astError = AST_ERROR_OPTION_UNKNOWN;
+ realBad = true;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_WEBRTC:
+ realBad = true;
+ break;
+ case NODE_TYPE_NET_PATTERN_RAW:
+ realBad = this.hasOptions() === false &&
+ this.getNetPattern().length <= 1;
+ break;
+ default:
+ break;
+ }
+ if ( bad || realBad ) {
+ this.addNodeFlags(targetNode, NODE_FLAG_ERROR);
+ }
+ if ( realBad ) {
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ }
+ }
+ switch ( modifierType ) {
+ case NODE_TYPE_NET_OPTION_NAME_CNAME:
+ realBad = abstractTypeCount || behaviorTypeCount || requestTypeCount;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_CSP:
+ case NODE_TYPE_NET_OPTION_NAME_PERMISSIONS:
+ realBad = abstractTypeCount || behaviorTypeCount || requestTypeCount;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_INLINEFONT:
+ case NODE_TYPE_NET_OPTION_NAME_INLINESCRIPT:
+ realBad = behaviorTypeCount;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_EMPTY:
+ realBad = abstractTypeCount || behaviorTypeCount;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_MEDIA:
+ case NODE_TYPE_NET_OPTION_NAME_MP4:
+ realBad = abstractTypeCount || behaviorTypeCount || docTypeCount || requestTypeCount;
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_REDIRECT:
+ case NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE: {
+ realBad = abstractTypeCount || behaviorTypeCount || unredirectableTypeCount;
+ break;
+ }
+ case NODE_TYPE_NET_OPTION_NAME_REPLACE: {
+ realBad = abstractTypeCount || behaviorTypeCount || unredirectableTypeCount;
+ if ( realBad ) { break; }
+ if ( isException !== true && this.options.trustedSource !== true ) {
+ this.astError = AST_ERROR_UNTRUSTED_SOURCE;
+ realBad = true;
+ break;
+ }
+ const value = this.getNetOptionValue(NODE_TYPE_NET_OPTION_NAME_REPLACE);
+ if ( parseReplaceValue(value) === undefined ) {
+ this.astError = AST_ERROR_OPTION_BADVALUE;
+ realBad = true;
+ }
+ break;
+ }
+ case NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM:
+ realBad = abstractTypeCount || behaviorTypeCount || unredirectableTypeCount;
+ if ( realBad ) { break; }
+ if ( isException !== true && this.options.trustedSource !== true ) {
+ this.astError = AST_ERROR_UNTRUSTED_SOURCE;
+ realBad = true;
+ break;
+ }
+ const value = this.getNetOptionValue(NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM);
+ if ( parseReplaceValue(value) === undefined ) {
+ this.astError = AST_ERROR_OPTION_BADVALUE;
+ realBad = true;
+ }
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_REMOVEPARAM:
+ realBad = abstractTypeCount || behaviorTypeCount;
+ break;
+ default:
+ break;
+ }
+ if ( realBad ) {
+ const targetNode = this.getBranchFromType(modifierType);
+ this.addNodeFlags(targetNode, NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ }
+ }
+
+ indexOfNetAnchor(s, start = 0) {
+ const end = s.length;
+ if ( end === start ) { return end; }
+ let j = s.lastIndexOf('$');
+ if ( j === -1 ) { return end; }
+ if ( (j+1) === end ) { return end; }
+ for (;;) {
+ const before = s.charCodeAt(j-1);
+ if ( j !== start && before === 0x24 /* $ */ ) { return -1; }
+ const after = s.charCodeAt(j+1);
+ if (
+ after !== 0x29 /* ) */ &&
+ after !== 0x2F /* / */ &&
+ after !== 0x7C /* | */ &&
+ before !== 0x5C /* \ */
+ ) {
+ return j;
+ }
+ if ( j <= start ) { break; }
+ j = s.lastIndexOf('$', j-1);
+ if ( j === -1 ) { break; }
+ }
+ return end;
+ }
+
+ parseNetPattern(parent) {
+ const parentBeg = this.nodes[parent+NODE_BEG_INDEX];
+ const parentEnd = this.nodes[parent+NODE_END_INDEX];
+
+ // Empty pattern
+ if ( parentEnd === parentBeg ) {
+ this.astTypeFlavor = AST_TYPE_NETWORK_PATTERN_ANY;
+ const node = this.allocTypedNode(
+ NODE_TYPE_NET_PATTERN,
+ parentBeg,
+ parentEnd
+ );
+ this.addNodeToRegister(NODE_TYPE_NET_PATTERN, node);
+ this.setNodeTransform(node, '*');
+ return node;
+ }
+
+ const head = this.allocHeadNode();
+ let prev = head, next = 0, tail = 0;
+ let pattern = this.getNodeString(parent);
+ const hasWildcard = pattern.includes('*');
+ const c1st = pattern.charCodeAt(0);
+ const c2nd = pattern.charCodeAt(1) || 0;
+ const clast = exCharCodeAt(pattern, -1);
+
+ // Common case: Easylist syntax-based hostname
+ if (
+ hasWildcard === false &&
+ c1st === 0x7C /* | */ && c2nd === 0x7C /* | */ &&
+ clast === 0x5E /* ^ */ &&
+ this.isAdblockHostnamePattern(pattern)
+ ) {
+ this.astTypeFlavor = AST_TYPE_NETWORK_PATTERN_HOSTNAME;
+ this.addFlags(
+ AST_FLAG_NET_PATTERN_LEFT_HNANCHOR |
+ AST_FLAG_NET_PATTERN_RIGHT_PATHANCHOR
+ );
+ next = this.allocTypedNode(
+ NODE_TYPE_NET_PATTERN_LEFT_HNANCHOR,
+ parentBeg,
+ parentBeg + 2
+ );
+ prev = this.linkRight(prev, next);
+ next = this.allocTypedNode(
+ NODE_TYPE_NET_PATTERN,
+ parentBeg + 2,
+ parentEnd - 1
+ );
+ pattern = pattern.slice(2, -1);
+ const normal = this.hasUnicode
+ ? this.normalizeHostnameValue(pattern)
+ : pattern;
+ if ( normal !== undefined && normal !== pattern ) {
+ this.setNodeTransform(next, normal);
+ }
+ this.addNodeToRegister(NODE_TYPE_NET_PATTERN, next);
+ prev = this.linkRight(prev, next);
+ next = this.allocTypedNode(
+ NODE_TYPE_NET_PATTERN_PART_SPECIAL,
+ parentEnd - 1,
+ parentEnd
+ );
+ this.linkRight(prev, next);
+ return this.throwHeadNode(head);
+ }
+
+ let patternBeg = parentBeg;
+ let patternEnd = parentEnd;
+
+ // Hosts file entry?
+ if (
+ this.hasWhitespace &&
+ this.isException() === false &&
+ this.hasOptions() === false &&
+ this.reHostsSink.test(pattern)
+ ) {
+ const match = this.reHostsSink.exec(pattern);
+ patternBeg += match[0].length;
+ pattern = pattern.slice(patternBeg);
+ next = this.allocTypedNode(NODE_TYPE_IGNORE, parentBeg, patternBeg);
+ prev = this.linkRight(prev, next);
+ if (
+ this.reHostsRedirect.test(pattern) ||
+ this.reHostnameAscii.test(pattern) === false
+ ) {
+ this.astType = AST_TYPE_NONE;
+ this.addFlags(AST_FLAG_IGNORE);
+ next = this.allocTypedNode(NODE_TYPE_IGNORE, patternBeg, parentEnd);
+ prev = this.linkRight(prev, next);
+ return this.throwHeadNode(head);
+ }
+ this.astTypeFlavor = AST_TYPE_NETWORK_PATTERN_HOSTNAME;
+ this.addFlags(
+ AST_FLAG_NET_PATTERN_LEFT_HNANCHOR |
+ AST_FLAG_NET_PATTERN_RIGHT_PATHANCHOR
+ );
+ next = this.allocTypedNode(
+ NODE_TYPE_NET_PATTERN,
+ patternBeg,
+ parentEnd
+ );
+ this.addNodeToRegister(NODE_TYPE_NET_PATTERN, next);
+ this.linkRight(prev, next);
+ return this.throwHeadNode(head);
+ }
+
+ // Regex?
+ if (
+ c1st === 0x2F /* / */ && clast === 0x2F /* / */ &&
+ pattern.length > 2
+ ) {
+ this.astTypeFlavor = AST_TYPE_NETWORK_PATTERN_REGEX;
+ const normal = this.normalizeRegexPattern(pattern);
+ next = this.allocTypedNode(
+ NODE_TYPE_NET_PATTERN,
+ patternBeg,
+ patternEnd
+ );
+ this.addNodeToRegister(NODE_TYPE_NET_PATTERN, next);
+ if ( normal !== '' ) {
+ if ( normal !== pattern ) {
+ this.setNodeTransform(next, normal);
+ }
+ if ( this.interactive ) {
+ const tokenizable = utils.regex.toTokenizableStr(normal);
+ if ( this.reGoodRegexToken.test(tokenizable) === false ) {
+ this.addNodeFlags(next, NODE_FLAG_PATTERN_UNTOKENIZABLE);
+ }
+ }
+ } else {
+ this.astTypeFlavor = AST_TYPE_NETWORK_PATTERN_BAD;
+ this.astError = AST_ERROR_REGEX;
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ this.addNodeFlags(next, NODE_FLAG_ERROR);
+ }
+ this.linkRight(prev, next);
+ return this.throwHeadNode(head);
+ }
+
+ // Left anchor
+ if ( c1st === 0x7C /* '|' */ ) {
+ if ( c2nd === 0x7C /* '|' */ ) {
+ const type = this.isTokenCharCode(pattern.charCodeAt(2) || 0)
+ ? NODE_TYPE_NET_PATTERN_LEFT_HNANCHOR
+ : NODE_TYPE_IGNORE;
+ next = this.allocTypedNode(type, patternBeg, patternBeg+2);
+ if ( type === NODE_TYPE_NET_PATTERN_LEFT_HNANCHOR ) {
+ this.addFlags(AST_FLAG_NET_PATTERN_LEFT_HNANCHOR);
+ }
+ patternBeg += 2;
+ pattern = pattern.slice(2);
+ } else {
+ const type = this.isTokenCharCode(c2nd)
+ ? NODE_TYPE_NET_PATTERN_LEFT_ANCHOR
+ : NODE_TYPE_IGNORE;
+ next = this.allocTypedNode(type, patternBeg, patternBeg+1);
+ if ( type === NODE_TYPE_NET_PATTERN_LEFT_ANCHOR ) {
+ this.addFlags(AST_FLAG_NET_PATTERN_LEFT_ANCHOR);
+ }
+ patternBeg += 1;
+ pattern = pattern.slice(1);
+ }
+ prev = this.linkRight(prev, next);
+ if ( patternBeg === patternEnd ) {
+ this.addNodeFlags(next, NODE_FLAG_IGNORE);
+ }
+ }
+
+ // Right anchor
+ if ( exCharCodeAt(pattern, -1) === 0x7C /* | */ ) {
+ const type = exCharCodeAt(pattern, -2) !== 0x2A /* * */
+ ? NODE_TYPE_NET_PATTERN_RIGHT_ANCHOR
+ : NODE_TYPE_IGNORE;
+ tail = this.allocTypedNode(type, patternEnd-1, patternEnd);
+ if ( type === NODE_TYPE_NET_PATTERN_RIGHT_ANCHOR ) {
+ this.addFlags(AST_FLAG_NET_PATTERN_RIGHT_ANCHOR);
+ }
+ patternEnd -= 1;
+ pattern = pattern.slice(0, -1);
+ if ( patternEnd === patternBeg ) {
+ this.addNodeFlags(tail, NODE_FLAG_IGNORE);
+ }
+ }
+
+ // Ignore pointless leading wildcards
+ if ( hasWildcard && this.rePointlessLeadingWildcards.test(pattern) ) {
+ const match = this.rePointlessLeadingWildcards.exec(pattern);
+ const ignoreLen = match[1].length;
+ next = this.allocTypedNode(
+ NODE_TYPE_IGNORE,
+ patternBeg,
+ patternBeg + ignoreLen
+ );
+ prev = this.linkRight(prev, next);
+ patternBeg += ignoreLen;
+ pattern = pattern.slice(ignoreLen);
+ }
+
+ // Ignore pointless trailing separators
+ if ( this.rePointlessTrailingSeparator.test(pattern) ) {
+ const match = this.rePointlessTrailingSeparator.exec(pattern);
+ const ignoreLen = match[1].length;
+ next = this.allocTypedNode(
+ NODE_TYPE_IGNORE,
+ patternEnd - ignoreLen,
+ patternEnd
+ );
+ patternEnd -= ignoreLen;
+ pattern = pattern.slice(0, -ignoreLen);
+ if ( tail !== 0 ) { this.linkRight(next, tail); }
+ tail = next;
+ }
+
+ // Ignore pointless trailing wildcards. Exception: when removing the
+ // trailing wildcard make the pattern look like a regex.
+ if ( hasWildcard && this.rePointlessTrailingWildcards.test(pattern) ) {
+ const match = this.rePointlessTrailingWildcards.exec(pattern);
+ const ignoreLen = match[1].length;
+ const needWildcard = pattern.charCodeAt(0) === 0x2F &&
+ exCharCodeAt(pattern, -ignoreLen-1) === 0x2F;
+ const goodWildcardBeg = patternEnd - ignoreLen;
+ const badWildcardBeg = goodWildcardBeg + (needWildcard ? 1 : 0);
+ if ( badWildcardBeg !== patternEnd ) {
+ next = this.allocTypedNode(
+ NODE_TYPE_IGNORE,
+ badWildcardBeg,
+ patternEnd
+ );
+ if ( tail !== 0 ) {this.linkRight(next, tail); }
+ tail = next;
+ }
+ if ( goodWildcardBeg !== badWildcardBeg ) {
+ next = this.allocTypedNode(
+ NODE_TYPE_NET_PATTERN_PART_SPECIAL,
+ goodWildcardBeg,
+ badWildcardBeg
+ );
+ if ( tail !== 0 ) { this.linkRight(next, tail); }
+ tail = next;
+ }
+ patternEnd -= ignoreLen;
+ pattern = pattern.slice(0, -ignoreLen);
+ }
+
+ const patternHasWhitespace = this.hasWhitespace &&
+ this.reHasWhitespaceChar.test(pattern);
+ const needNormalization = this.needPatternNormalization(pattern);
+ const normal = needNormalization
+ ? this.normalizePattern(pattern)
+ : pattern;
+ next = this.allocTypedNode(NODE_TYPE_NET_PATTERN, patternBeg, patternEnd);
+ if ( patternHasWhitespace || normal === undefined ) {
+ this.astTypeFlavor = AST_TYPE_NETWORK_PATTERN_BAD;
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ this.astError = AST_ERROR_PATTERN;
+ this.addNodeFlags(next, NODE_FLAG_ERROR);
+ } else if ( normal === '*' ) {
+ this.astTypeFlavor = AST_TYPE_NETWORK_PATTERN_ANY;
+ } else if ( this.reHostnameAscii.test(normal) ) {
+ this.astTypeFlavor = AST_TYPE_NETWORK_PATTERN_HOSTNAME;
+ } else if ( this.reHasPatternSpecialChars.test(normal) ) {
+ this.astTypeFlavor = AST_TYPE_NETWORK_PATTERN_GENERIC;
+ } else {
+ this.astTypeFlavor = AST_TYPE_NETWORK_PATTERN_PLAIN;
+ }
+ this.addNodeToRegister(NODE_TYPE_NET_PATTERN, next);
+ if ( needNormalization && normal !== undefined ) {
+ this.setNodeTransform(next, normal);
+ }
+ if ( this.interactive ) {
+ this.linkDown(next, this.parsePatternParts(next, pattern));
+ }
+ prev = this.linkRight(prev, next);
+
+ if ( tail !== 0 ) {
+ this.linkRight(prev, tail);
+ }
+ return this.throwHeadNode(head);
+ }
+
+ isAdblockHostnamePattern(pattern) {
+ if ( this.hasUnicode ) {
+ return this.reHnAnchoredHostnameUnicode.test(pattern);
+ }
+ return this.reHnAnchoredHostnameAscii.test(pattern);
+ }
+
+ parsePatternParts(parent, pattern) {
+ if ( pattern.length === 0 ) { return 0; }
+ const parentBeg = this.nodes[parent+NODE_BEG_INDEX];
+ const matches = pattern.matchAll(this.rePatternAllSpecialChars);
+ const head = this.allocHeadNode();
+ let prev = head, next = 0;
+ let plainPartBeg = 0;
+ for ( const match of matches ) {
+ const plainPartEnd = match.index;
+ if ( plainPartEnd !== plainPartBeg ) {
+ next = this.allocTypedNode(
+ NODE_TYPE_NET_PATTERN_PART,
+ parentBeg + plainPartBeg,
+ parentBeg + plainPartEnd
+ );
+ prev = this.linkRight(prev, next);
+ }
+ plainPartBeg = plainPartEnd + match[0].length;
+ const type = match[0].charCodeAt(0) < 0x80
+ ? NODE_TYPE_NET_PATTERN_PART_SPECIAL
+ : NODE_TYPE_NET_PATTERN_PART_UNICODE;
+ next = this.allocTypedNode(
+ type,
+ parentBeg + plainPartEnd,
+ parentBeg + plainPartBeg
+ );
+ prev = this.linkRight(prev, next);
+ }
+ if ( plainPartBeg !== pattern.length ) {
+ next = this.allocTypedNode(
+ NODE_TYPE_NET_PATTERN_PART,
+ parentBeg + plainPartBeg,
+ parentBeg + pattern.length
+ );
+ this.linkRight(prev, next);
+ }
+ return this.throwHeadNode(head);
+ }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1118#issuecomment-650730158
+ // Be ready to deal with non-punycode-able Unicode characters.
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/772
+ // Encode Unicode characters beyond the hostname part.
+ // Prepend with '*' character to prevent the browser API from refusing to
+ // punycode -- this occurs when the extracted label starts with a dash.
+ needPatternNormalization(pattern) {
+ return pattern.length === 0 || this.hasUppercase || this.hasUnicode;
+ }
+
+ normalizePattern(pattern) {
+ if ( pattern.length === 0 ) { return '*'; }
+ if ( this.reHasInvalidChar.test(pattern) ) { return; }
+ let normal = pattern.toLowerCase();
+ if ( this.hasUnicode === false ) { return normal; }
+ // Punycode hostname part of the pattern.
+ if ( this.reHostnamePatternPart.test(normal) ) {
+ const match = this.reHostnamePatternPart.exec(normal);
+ const hn = match[0].replace(this.reHostnameLabel, s => {
+ if ( this.reHasUnicodeChar.test(s) === false ) { return s; }
+ if ( s.charCodeAt(0) === 0x2D /* - */ ) { s = '*' + s; }
+ return this.normalizeHostnameValue(s, 0b0001) || s;
+ });
+ normal = hn + normal.slice(match.index + match[0].length);
+ }
+ if ( this.reHasUnicodeChar.test(normal) === false ) { return normal; }
+ // Percent-encode remaining Unicode characters.
+ try {
+ normal = normal.replace(this.reUnicodeChars, s =>
+ encodeURIComponent(s).toLowerCase()
+ );
+ } catch (ex) {
+ return;
+ }
+ return normal;
+ }
+
+ getNetPattern() {
+ const node = this.nodeTypeLookupTable[NODE_TYPE_NET_PATTERN];
+ return this.getNodeTransform(node);
+ }
+
+ isAnyPattern() {
+ return this.astTypeFlavor === AST_TYPE_NETWORK_PATTERN_ANY;
+ }
+
+ isHostnamePattern() {
+ return this.astTypeFlavor === AST_TYPE_NETWORK_PATTERN_HOSTNAME;
+ }
+
+ isRegexPattern() {
+ return this.astTypeFlavor === AST_TYPE_NETWORK_PATTERN_REGEX;
+ }
+
+ isPlainPattern() {
+ return this.astTypeFlavor === AST_TYPE_NETWORK_PATTERN_PLAIN;
+ }
+
+ isGenericPattern() {
+ return this.astTypeFlavor === AST_TYPE_NETWORK_PATTERN_GENERIC;
+ }
+
+ isBadPattern() {
+ return this.astTypeFlavor === AST_TYPE_NETWORK_PATTERN_BAD;
+ }
+
+ parseNetOptions(parent) {
+ const parentBeg = this.nodes[parent+NODE_BEG_INDEX];
+ const parentEnd = this.nodes[parent+NODE_END_INDEX];
+ if ( parentEnd === parentBeg ) { return 0; }
+ const s = this.getNodeString(parent);
+ const optionsEnd = s.length;
+ const head = this.allocHeadNode();
+ let prev = head, next = 0;
+ let optionBeg = 0, optionEnd = 0;
+ let emptyOption = false, badComma = false;
+ while ( optionBeg !== optionsEnd ) {
+ optionEnd = this.endOfNetOption(s, optionBeg);
+ next = this.allocTypedNode(
+ NODE_TYPE_NET_OPTION_RAW,
+ parentBeg + optionBeg,
+ parentBeg + optionEnd
+ );
+ emptyOption = optionEnd === optionBeg;
+ this.linkDown(next, this.parseNetOption(next));
+ prev = this.linkRight(prev, next);
+ if ( optionEnd === optionsEnd ) { break; }
+ optionBeg = optionEnd + 1;
+ next = this.allocTypedNode(
+ NODE_TYPE_NET_OPTION_SEPARATOR,
+ parentBeg + optionEnd,
+ parentBeg + optionBeg
+ );
+ badComma = optionBeg === optionsEnd;
+ prev = this.linkRight(prev, next);
+ if ( emptyOption || badComma ) {
+ this.addNodeFlags(next, NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ }
+ }
+ this.linkRight(prev,
+ this.allocSentinelNode(NODE_TYPE_NET_OPTION_SENTINEL, parentEnd)
+ );
+ return this.throwHeadNode(head);
+ }
+
+ endOfNetOption(s, beg) {
+ const match = this.reNetOptionComma.exec(s.slice(beg));
+ return match !== null ? beg + match.index : s.length;
+ }
+
+ parseNetOption(parent) {
+ const parentBeg = this.nodes[parent+NODE_BEG_INDEX];
+ const s = this.getNodeString(parent);
+ const optionEnd = s.length;
+ const head = this.allocHeadNode();
+ let prev = head, next = 0;
+ let nameBeg = 0;
+ if ( s.charCodeAt(0) === 0x7E ) {
+ this.addNodeFlags(parent, NODE_FLAG_IS_NEGATED);
+ next = this.allocTypedNode(
+ NODE_TYPE_NET_OPTION_NAME_NOT,
+ parentBeg,
+ parentBeg+1
+ );
+ prev = this.linkRight(prev, next);
+ nameBeg += 1;
+ }
+ const equalPos = s.indexOf('=');
+ const nameEnd = equalPos !== -1 ? equalPos : s.length;
+ const name = s.slice(nameBeg, nameEnd);
+ let nodeOptionType = nodeTypeFromOptionName.get(name);
+ if ( nodeOptionType === undefined ) {
+ nodeOptionType = this.reNoopOption.test(name)
+ ? NODE_TYPE_NET_OPTION_NAME_NOOP
+ : NODE_TYPE_NET_OPTION_NAME_UNKNOWN;
+ }
+ next = this.allocTypedNode(
+ nodeOptionType,
+ parentBeg + nameBeg,
+ parentBeg + nameEnd
+ );
+ if (
+ nodeOptionType !== NODE_TYPE_NET_OPTION_NAME_NOOP &&
+ this.getBranchFromType(nodeOptionType) !== 0
+ ) {
+ this.addNodeFlags(parent, NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ this.astError = AST_ERROR_OPTION_DUPLICATE;
+ } else {
+ this.addNodeToRegister(nodeOptionType, parent);
+ }
+ prev = this.linkRight(prev, next);
+ if ( equalPos === -1 ) {
+ return this.throwHeadNode(head);
+ }
+ const valueBeg = equalPos + 1;
+ next = this.allocTypedNode(
+ NODE_TYPE_NET_OPTION_ASSIGN,
+ parentBeg + equalPos,
+ parentBeg + valueBeg
+ );
+ prev = this.linkRight(prev, next);
+ if ( (equalPos+1) === optionEnd ) {
+ this.addNodeFlags(parent, NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ return this.throwHeadNode(head);
+ }
+ this.addNodeFlags(parent, NODE_FLAG_OPTION_HAS_VALUE);
+ next = this.allocTypedNode(
+ NODE_TYPE_NET_OPTION_VALUE,
+ parentBeg + valueBeg,
+ parentBeg + optionEnd
+ );
+ switch ( nodeOptionType ) {
+ case NODE_TYPE_NET_OPTION_NAME_DENYALLOW:
+ this.linkDown(next, this.parseDomainList(next, '|'), 0b00000);
+ break;
+ case NODE_TYPE_NET_OPTION_NAME_FROM:
+ case NODE_TYPE_NET_OPTION_NAME_TO:
+ this.linkDown(next, this.parseDomainList(next, '|', 0b11010));
+ break;
+ default:
+ break;
+ }
+ this.linkRight(prev, next);
+ return this.throwHeadNode(head);
+ }
+
+ getNetOptionValue(type) {
+ if ( this.nodeTypeRegister.includes(type) === false ) { return ''; }
+ const optionNode = this.nodeTypeLookupTable[type];
+ if ( optionNode === 0 ) { return ''; }
+ const valueNode = this.findDescendantByType(optionNode, NODE_TYPE_NET_OPTION_VALUE);
+ if ( valueNode === 0 ) { return ''; }
+ return this.getNodeTransform(valueNode);
+ }
+
+ parseDomainList(parent, separator, mode = 0b00000) {
+ const parentBeg = this.nodes[parent+NODE_BEG_INDEX];
+ const parentEnd = this.nodes[parent+NODE_END_INDEX];
+ const containerNode = this.allocTypedNode(
+ NODE_TYPE_OPTION_VALUE_DOMAIN_LIST,
+ parentBeg,
+ parentEnd
+ );
+ if ( parentEnd === parentBeg ) { return containerNode; }
+ const separatorCode = separator.charCodeAt(0);
+ const listNode = this.allocHeadNode();
+ let prev = listNode;
+ let domainNode = 0;
+ let separatorNode = 0;
+ const s = this.getNodeString(parent);
+ const listEnd = s.length;
+ let beg = 0, end = 0, c = 0;
+ while ( beg < listEnd ) {
+ c = s.charCodeAt(beg);
+ if ( c === 0x7E /* ~ */ ) {
+ c = s.charCodeAt(beg+1) || 0;
+ }
+ if ( c !== 0x2F /* / */ ) {
+ end = s.indexOf(separator, beg);
+ } else {
+ end = s.indexOf('/', beg+1);
+ end = s.indexOf(separator, end !== -1 ? end+1 : beg);
+ }
+ if ( end === -1 ) { end = listEnd; }
+ if ( end !== beg ) {
+ domainNode = this.allocTypedNode(
+ NODE_TYPE_OPTION_VALUE_DOMAIN_RAW,
+ parentBeg + beg,
+ parentBeg + end
+ );
+ this.linkDown(domainNode, this.parseDomain(domainNode, mode));
+ prev = this.linkRight(prev, domainNode);
+ } else {
+ domainNode = 0;
+ if ( separatorNode !== 0 ) {
+ this.addNodeFlags(separatorNode, NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ }
+ }
+ if ( s.charCodeAt(end) === separatorCode ) {
+ beg = end;
+ end += 1;
+ separatorNode = this.allocTypedNode(
+ NODE_TYPE_OPTION_VALUE_SEPARATOR,
+ parentBeg + beg,
+ parentBeg + end
+ );
+ prev = this.linkRight(prev, separatorNode);
+ if ( domainNode === 0 ) {
+ this.addNodeFlags(separatorNode, NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ }
+ } else {
+ separatorNode = 0;
+ }
+ beg = end;
+ }
+ // Dangling separator node
+ if ( separatorNode !== 0 ) {
+ this.addNodeFlags(separatorNode, NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ }
+ this.linkDown(containerNode, this.throwHeadNode(listNode));
+ return containerNode;
+ }
+
+ parseDomain(parent, mode = 0b0000) {
+ const parentBeg = this.nodes[parent+NODE_BEG_INDEX];
+ const parentEnd = this.nodes[parent+NODE_END_INDEX];
+ let head = 0, next = 0;
+ let beg = parentBeg;
+ const c = this.charCodeAt(beg);
+ if ( c === 0x7E /* ~ */ ) {
+ this.addNodeFlags(parent, NODE_FLAG_IS_NEGATED);
+ head = this.allocTypedNode(NODE_TYPE_OPTION_VALUE_NOT, beg, beg + 1);
+ if ( (mode & 0b1000) === 0 ) {
+ this.addNodeFlags(parent, NODE_FLAG_ERROR);
+ }
+ beg += 1;
+ }
+ if ( beg !== parentEnd ) {
+ next = this.allocTypedNode(NODE_TYPE_OPTION_VALUE_DOMAIN, beg, parentEnd);
+ const hn = this.normalizeDomainValue(this.getNodeString(next), mode);
+ if ( hn !== undefined ) {
+ if ( hn !== '' ) {
+ this.setNodeTransform(next, hn);
+ } else {
+ this.addNodeFlags(parent, NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ this.astError = AST_ERROR_DOMAIN_NAME;
+ }
+ }
+ if ( head === 0 ) {
+ head = next;
+ } else {
+ this.linkRight(head, next);
+ }
+ } else {
+ this.addNodeFlags(parent, NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ }
+ return head;
+ }
+
+ // mode bits:
+ // 0b00001: can use wildcard at any position
+ // 0b00010: can use entity-based hostnames
+ // 0b00100: can use single wildcard
+ // 0b01000: can be negated
+ // 0b10000: can be a regex
+ normalizeDomainValue(s, modeBits) {
+ if ( (modeBits & 0b10000) === 0 ||
+ s.length <= 2 ||
+ s.charCodeAt(0) !== 0x2F /* / */ ||
+ exCharCodeAt(s, -1) !== 0x2F /* / */
+ ) {
+ return this.normalizeHostnameValue(s, modeBits);
+ }
+ const source = this.normalizeRegexPattern(s);
+ if ( source === '' ) { return ''; }
+ return `/${source}/`;
+ }
+
+ parseExt(parent, anchorBeg, anchorLen) {
+ const parentBeg = this.nodes[parent+NODE_BEG_INDEX];
+ const parentEnd = this.nodes[parent+NODE_END_INDEX];
+ const head = this.allocHeadNode();
+ let prev = head, next = 0;
+ this.astType = AST_TYPE_EXTENDED;
+ this.addFlags(this.extFlagsFromAnchor(anchorBeg));
+ if ( anchorBeg > parentBeg ) {
+ next = this.allocTypedNode(
+ NODE_TYPE_EXT_OPTIONS,
+ parentBeg,
+ anchorBeg
+ );
+ this.addFlags(AST_FLAG_HAS_OPTIONS);
+ this.addNodeToRegister(NODE_TYPE_EXT_OPTIONS, next);
+ this.linkDown(next, this.parseDomainList(next, ',', 0b11110));
+ prev = this.linkRight(prev, next);
+ }
+ next = this.allocTypedNode(
+ NODE_TYPE_EXT_OPTIONS_ANCHOR,
+ anchorBeg,
+ anchorBeg + anchorLen
+ );
+ this.addNodeToRegister(NODE_TYPE_EXT_OPTIONS_ANCHOR, next);
+ prev = this.linkRight(prev, next);
+ next = this.allocTypedNode(
+ NODE_TYPE_EXT_PATTERN_RAW,
+ anchorBeg + anchorLen,
+ parentEnd
+ );
+ this.addNodeToRegister(NODE_TYPE_EXT_PATTERN_RAW, next);
+ const down = this.parseExtPattern(next);
+ if ( down !== 0 ) {
+ this.linkDown(next, down);
+ } else {
+ this.addNodeFlags(next, NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ }
+ this.linkRight(prev, next);
+ this.validateExt();
+ return this.throwHeadNode(head);
+ }
+
+ extFlagsFromAnchor(anchorBeg) {
+ let c = this.charCodeAt(anchorBeg+1) ;
+ if ( c === 0x23 /* # */ ) { return 0; }
+ if ( c === 0x25 /* % */ ) { return AST_FLAG_EXT_SCRIPTLET_ADG; }
+ if ( c === 0x3F /* ? */ ) { return AST_FLAG_EXT_STRONG; }
+ if ( c === 0x24 /* $ */ ) {
+ c = this.charCodeAt(anchorBeg+2);
+ if ( c === 0x23 /* # */ ) { return AST_FLAG_EXT_STYLE; }
+ if ( c === 0x3F /* ? */ ) {
+ return AST_FLAG_EXT_STYLE | AST_FLAG_EXT_STRONG;
+ }
+ }
+ if ( c === 0x40 /* @ */ ) {
+ return AST_FLAG_IS_EXCEPTION | this.extFlagsFromAnchor(anchorBeg+1);
+ }
+ return AST_FLAG_UNSUPPORTED | AST_FLAG_HAS_ERROR;
+ }
+
+ validateExt() {
+ const isException = this.isException();
+ let realBad = false;
+ for ( let i = 0, n = this.nodeTypeRegisterPtr; i < n; i++ ) {
+ const type = this.nodeTypeRegister[i];
+ const targetNode = this.nodeTypeLookupTable[type];
+ if ( targetNode === 0 ) { continue; }
+ const flags = this.getNodeFlags(targetNode);
+ if ( (flags & NODE_FLAG_ERROR) !== 0 ) { continue; }
+ realBad = false;
+ switch ( type ) {
+ case NODE_TYPE_EXT_PATTERN_RESPONSEHEADER: {
+ const pattern = this.getNodeString(targetNode);
+ realBad =
+ pattern !== '' && removableHTTPHeaders.has(pattern) === false ||
+ pattern === '' && isException === false;
+ break;
+ }
+ case NODE_TYPE_EXT_PATTERN_SCRIPTLET_TOKEN: {
+ if ( this.interactive !== true ) { break; }
+ if ( isException ) { break; }
+ const { trustedSource, trustedScriptletTokens } = this.options;
+ if ( trustedScriptletTokens instanceof Set === false ) { break; }
+ const token = this.getNodeString(targetNode);
+ if ( trustedScriptletTokens.has(token) && trustedSource !== true ) {
+ this.astError = AST_ERROR_UNTRUSTED_SOURCE;
+ realBad = true;
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ if ( realBad ) {
+ this.addNodeFlags(targetNode, NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ }
+ }
+ }
+
+ parseExtPattern(parent) {
+ const c = this.charCodeAt(this.nodes[parent+NODE_BEG_INDEX]);
+ // ##+js(...)
+ if ( c === 0x2B /* + */ ) {
+ const s = this.getNodeString(parent);
+ if ( /^\+js\(.*\)$/.exec(s) !== null ) {
+ this.astTypeFlavor = AST_TYPE_EXTENDED_SCRIPTLET;
+ return this.parseExtPatternScriptlet(parent);
+ }
+ }
+ // #%#//scriptlet(...)
+ if ( this.getFlags(AST_FLAG_EXT_SCRIPTLET_ADG) ) {
+ const s = this.getNodeString(parent);
+ if ( /^\/\/scriptlet\(.*\)$/.exec(s) !== null ) {
+ this.astTypeFlavor = AST_TYPE_EXTENDED_SCRIPTLET;
+ return this.parseExtPatternScriptlet(parent);
+ }
+ return 0;
+ }
+ // ##^... | ##^responseheader(...)
+ if ( c === 0x5E /* ^ */ ) {
+ const s = this.getNodeString(parent);
+ if ( this.reResponseheaderPattern.test(s) ) {
+ this.astTypeFlavor = AST_TYPE_EXTENDED_RESPONSEHEADER;
+ return this.parseExtPatternResponseheader(parent);
+ }
+ this.astTypeFlavor = AST_TYPE_EXTENDED_HTML;
+ return this.parseExtPatternHtml(parent);
+ }
+ // ##...
+ this.astTypeFlavor = AST_TYPE_EXTENDED_COSMETIC;
+ return this.parseExtPatternCosmetic(parent);
+ }
+
+ parseExtPatternScriptlet(parent) {
+ const beg = this.nodes[parent+NODE_BEG_INDEX];
+ const end = this.nodes[parent+NODE_END_INDEX];
+ const s = this.getNodeString(parent);
+ const rawArg0 = beg + (s.startsWith('+js') ? 4 : 12);
+ const rawArg1 = end - 1;
+ const head = this.allocTypedNode(NODE_TYPE_EXT_DECORATION, beg, rawArg0);
+ let prev = head, next = 0;
+ next = this.allocTypedNode(NODE_TYPE_EXT_PATTERN_SCRIPTLET, rawArg0, rawArg1);
+ this.addNodeToRegister(NODE_TYPE_EXT_PATTERN_SCRIPTLET, next);
+ this.linkDown(next, this.parseExtPatternScriptletArgs(next));
+ prev = this.linkRight(prev, next);
+ next = this.allocTypedNode(NODE_TYPE_EXT_DECORATION, rawArg1, end);
+ this.linkRight(prev, next);
+ return head;
+ }
+
+ parseExtPatternScriptletArgs(parent) {
+ const parentBeg = this.nodes[parent+NODE_BEG_INDEX];
+ const parentEnd = this.nodes[parent+NODE_END_INDEX];
+ if ( parentEnd === parentBeg ) { return 0; }
+ const head = this.allocHeadNode();
+ let prev = head, next = 0;
+ const s = this.getNodeString(parent);
+ const argsEnd = s.length;
+ // token
+ this.scriptletArgListParser.mustQuote =
+ this.getFlags(AST_FLAG_EXT_SCRIPTLET_ADG) !== 0;
+ const details = this.scriptletArgListParser.nextArg(s, 0);
+ if ( details.argBeg > 0 ) {
+ next = this.allocTypedNode(
+ NODE_TYPE_EXT_DECORATION,
+ parentBeg,
+ parentBeg + details.argBeg
+ );
+ prev = this.linkRight(prev, next);
+ }
+ const token = s.slice(details.argBeg, details.argEnd);
+ const tokenEnd = details.argEnd - (token.endsWith('.js') ? 3 : 0);
+ next = this.allocTypedNode(
+ NODE_TYPE_EXT_PATTERN_SCRIPTLET_TOKEN,
+ parentBeg + details.argBeg,
+ parentBeg + tokenEnd
+ );
+ this.addNodeToRegister(NODE_TYPE_EXT_PATTERN_SCRIPTLET_TOKEN, next);
+ if ( details.failed ) {
+ this.addNodeFlags(next, NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ }
+ prev = this.linkRight(prev, next);
+ if ( tokenEnd < details.argEnd ) {
+ next = this.allocTypedNode(
+ NODE_TYPE_IGNORE,
+ parentBeg + tokenEnd,
+ parentBeg + details.argEnd
+ );
+ prev = this.linkRight(prev, next);
+ }
+ if ( details.quoteEnd < argsEnd ) {
+ next = this.allocTypedNode(
+ NODE_TYPE_EXT_DECORATION,
+ parentBeg + details.argEnd,
+ parentBeg + details.separatorEnd
+ );
+ prev = this.linkRight(prev, next);
+ }
+ // all args
+ next = this.allocTypedNode(
+ NODE_TYPE_EXT_PATTERN_SCRIPTLET_ARGS,
+ parentBeg + details.separatorEnd,
+ parentBeg + argsEnd
+ );
+ this.linkDown(next, this.parseExtPatternScriptletArglist(next));
+ prev = this.linkRight(prev, next);
+ return this.throwHeadNode(head);
+ }
+
+ parseExtPatternScriptletArglist(parent) {
+ const parentBeg = this.nodes[parent+NODE_BEG_INDEX];
+ const parentEnd = this.nodes[parent+NODE_END_INDEX];
+ if ( parentEnd === parentBeg ) { return 0; }
+ const s = this.getNodeString(parent);
+ const argsEnd = s.length;
+ const head = this.allocHeadNode();
+ let prev = head, next = 0;
+ let decorationBeg = 0;
+ let i = 0;
+ for (;;) {
+ const details = this.scriptletArgListParser.nextArg(s, i);
+ if ( decorationBeg < details.argBeg ) {
+ next = this.allocTypedNode(
+ NODE_TYPE_EXT_DECORATION,
+ parentBeg + decorationBeg,
+ parentBeg + details.argBeg
+ );
+ prev = this.linkRight(prev, next);
+ }
+ if ( i === argsEnd ) { break; }
+ next = this.allocTypedNode(
+ NODE_TYPE_EXT_PATTERN_SCRIPTLET_ARG,
+ parentBeg + details.argBeg,
+ parentBeg + details.argEnd
+ );
+ if ( details.transform ) {
+ const arg = s.slice(details.argBeg, details.argEnd);
+ this.setNodeTransform(next,
+ this.scriptletArgListParser.normalizeArg(arg)
+ );
+ }
+ prev = this.linkRight(prev, next);
+ if ( details.failed ) {
+ this.addNodeFlags(next, NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ }
+ decorationBeg = details.argEnd;
+ i = details.separatorEnd;
+ }
+ return this.throwHeadNode(head);
+ }
+
+ getScriptletArgs() {
+ const args = [];
+ if ( this.isScriptletFilter() === false ) { return args; }
+ const root = this.getBranchFromType(NODE_TYPE_EXT_PATTERN_SCRIPTLET);
+ const walker = this.getWalker(root);
+ for ( let node = walker.next(); node !== 0; node = walker.next() ) {
+ switch ( this.getNodeType(node) ) {
+ case NODE_TYPE_EXT_PATTERN_SCRIPTLET_TOKEN:
+ case NODE_TYPE_EXT_PATTERN_SCRIPTLET_ARG:
+ args.push(this.getNodeTransform(node));
+ break;
+ default:
+ break;
+ }
+ }
+ walker.dispose();
+ return args;
+ }
+
+ parseExtPatternResponseheader(parent) {
+ const beg = this.nodes[parent+NODE_BEG_INDEX];
+ const end = this.nodes[parent+NODE_END_INDEX];
+ const s = this.getNodeString(parent);
+ const rawArg0 = beg + 16;
+ const rawArg1 = end - 1;
+ const head = this.allocTypedNode(NODE_TYPE_EXT_DECORATION, beg, rawArg0);
+ let prev = head, next = 0;
+ const trimmedArg0 = rawArg0 + this.leftWhitespaceCount(s);
+ const trimmedArg1 = rawArg1 - this.rightWhitespaceCount(s);
+ if ( trimmedArg0 !== rawArg0 ) {
+ next = this.allocTypedNode(NODE_TYPE_WHITESPACE, rawArg0, trimmedArg0);
+ prev = this.linkRight(prev, next);
+ }
+ next = this.allocTypedNode(NODE_TYPE_EXT_PATTERN_RESPONSEHEADER, rawArg0, rawArg1);
+ this.addNodeToRegister(NODE_TYPE_EXT_PATTERN_RESPONSEHEADER, next);
+ if ( rawArg1 === rawArg0 && this.isException() === false ) {
+ this.addNodeFlags(parent, NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ }
+ prev = this.linkRight(prev, next);
+ if ( trimmedArg1 !== rawArg1 ) {
+ next = this.allocTypedNode(NODE_TYPE_WHITESPACE, trimmedArg1, rawArg1);
+ prev = this.linkRight(prev, next);
+ }
+ next = this.allocTypedNode(NODE_TYPE_EXT_DECORATION, rawArg1, end);
+ this.linkRight(prev, next);
+ return head;
+ }
+
+ parseExtPatternHtml(parent) {
+ const beg = this.nodes[parent+NODE_BEG_INDEX];
+ const end = this.nodes[parent+NODE_END_INDEX];
+ const head = this.allocTypedNode(NODE_TYPE_EXT_DECORATION, beg, beg + 1);
+ let prev = head, next = 0;
+ next = this.allocTypedNode(NODE_TYPE_EXT_PATTERN_HTML, beg + 1, end);
+ this.linkRight(prev, next);
+ if ( (this.hasOptions() || this.isException()) === false ) {
+ this.addNodeFlags(parent, NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ return head;
+ }
+ this.result.exception = this.isException();
+ this.result.raw = this.getNodeString(next);
+ this.result.compiled = undefined;
+ const success = this.selectorCompiler.compile(
+ this.result.raw,
+ this.result, {
+ asProcedural: this.getFlags(AST_FLAG_EXT_STRONG) !== 0
+ }
+ );
+ if ( success !== true ) {
+ this.addNodeFlags(next, NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ }
+ return head;
+ }
+
+ parseExtPatternCosmetic(parent) {
+ const parentBeg = this.nodes[parent+NODE_BEG_INDEX];
+ const parentEnd = this.nodes[parent+NODE_END_INDEX];
+ const head = this.allocTypedNode(
+ NODE_TYPE_EXT_PATTERN_COSMETIC,
+ parentBeg,
+ parentEnd
+ );
+ this.result.exception = this.isException();
+ this.result.raw = this.getNodeString(head);
+ this.result.compiled = undefined;
+ const success = this.selectorCompiler.compile(
+ this.result.raw,
+ this.result, {
+ asProcedural: this.getFlags(AST_FLAG_EXT_STRONG) !== 0,
+ adgStyleSyntax: this.getFlags(AST_FLAG_EXT_STYLE) !== 0,
+ }
+ );
+ if ( success !== true ) {
+ this.addNodeFlags(head, NODE_FLAG_ERROR);
+ this.addFlags(AST_FLAG_HAS_ERROR);
+ }
+ return head;
+ }
+
+ hasError() {
+ return (this.astFlags & AST_FLAG_HAS_ERROR) !== 0;
+ }
+
+ isUnsupported() {
+ return (this.astFlags & AST_FLAG_UNSUPPORTED) !== 0;
+ }
+
+ hasOptions() {
+ return (this.astFlags & AST_FLAG_HAS_OPTIONS) !== 0;
+ }
+
+ isNegatedOption(type) {
+ const node = this.nodeTypeLookupTable[type];
+ const flags = this.nodes[node+NODE_FLAGS_INDEX];
+ return (flags & NODE_FLAG_IS_NEGATED) !== 0;
+ }
+
+ isException() {
+ return (this.astFlags & AST_FLAG_IS_EXCEPTION) !== 0;
+ }
+
+ isLeftHnAnchored() {
+ return (this.astFlags & AST_FLAG_NET_PATTERN_LEFT_HNANCHOR) !== 0;
+ }
+
+ isLeftAnchored() {
+ return (this.astFlags & AST_FLAG_NET_PATTERN_LEFT_ANCHOR) !== 0;
+ }
+
+ isRightAnchored() {
+ return (this.astFlags & AST_FLAG_NET_PATTERN_RIGHT_ANCHOR) !== 0;
+ }
+
+ linkRight(prev, next) {
+ return (this.nodes[prev+NODE_RIGHT_INDEX] = next);
+ }
+
+ linkDown(node, down) {
+ return (this.nodes[node+NODE_DOWN_INDEX] = down);
+ }
+
+ makeChain(nodes) {
+ for ( let i = 1; i < nodes.length; i++ ) {
+ this.nodes[nodes[i-1]+NODE_RIGHT_INDEX] = nodes[i];
+ }
+ return nodes[0];
+ }
+
+ allocHeadNode() {
+ const node = this.nodePoolPtr;
+ this.nodePoolPtr += NOOP_NODE_SIZE;
+ if ( this.nodePoolPtr > this.nodePoolEnd ) {
+ this.growNodePool(this.nodePoolPtr);
+ }
+ this.nodes[node+NODE_RIGHT_INDEX] = 0;
+ return node;
+ }
+
+ throwHeadNode(head) {
+ return this.nodes[head+NODE_RIGHT_INDEX];
+ }
+
+ allocTypedNode(type, beg, end) {
+ const node = this.nodePoolPtr;
+ this.nodePoolPtr += FULL_NODE_SIZE;
+ if ( this.nodePoolPtr > this.nodePoolEnd ) {
+ this.growNodePool(this.nodePoolPtr);
+ }
+ this.nodes[node+NODE_RIGHT_INDEX] = 0;
+ this.nodes[node+NODE_TYPE_INDEX] = type;
+ this.nodes[node+NODE_DOWN_INDEX] = 0;
+ this.nodes[node+NODE_BEG_INDEX] = beg;
+ this.nodes[node+NODE_END_INDEX] = end;
+ this.nodes[node+NODE_TRANSFORM_INDEX] = 0;
+ this.nodes[node+NODE_FLAGS_INDEX] = 0;
+ return node;
+ }
+
+ allocSentinelNode(type, beg) {
+ return this.allocTypedNode(type, beg, beg);
+ }
+
+ growNodePool(min) {
+ const oldSize = this.nodes.length;
+ const newSize = (min + 16383) & ~16383;
+ if ( newSize === oldSize ) { return; }
+ const newArray = new Uint32Array(newSize);
+ newArray.set(this.nodes);
+ this.nodes = newArray;
+ this.nodePoolEnd = newSize;
+ }
+
+ getNodeTypes() {
+ return this.nodeTypeRegister.slice(0, this.nodeTypeRegisterPtr);
+ }
+
+ getNodeType(node) {
+ return node !== 0 ? this.nodes[node+NODE_TYPE_INDEX] : 0;
+ }
+
+ getNodeFlags(node, flags = 0xFFFFFFFF) {
+ return this.nodes[node+NODE_FLAGS_INDEX] & flags;
+ }
+
+ setNodeFlags(node, flags) {
+ this.nodes[node+NODE_FLAGS_INDEX] = flags;
+ }
+
+ addNodeFlags(node, flags) {
+ if ( node === 0 ) { return; }
+ this.nodes[node+NODE_FLAGS_INDEX] |= flags;
+ }
+
+ removeNodeFlags(node, flags) {
+ this.nodes[node+NODE_FLAGS_INDEX] &= ~flags;
+ }
+
+ addNodeToRegister(type, node) {
+ this.nodeTypeRegister[this.nodeTypeRegisterPtr++] = type;
+ this.nodeTypeLookupTable[type] = node;
+ }
+
+ getBranchFromType(type) {
+ const ptr = this.nodeTypeRegisterPtr;
+ if ( ptr === 0 ) { return 0; }
+ return this.nodeTypeRegister.lastIndexOf(type, ptr-1) !== -1
+ ? this.nodeTypeLookupTable[type]
+ : 0;
+ }
+
+ nodeIsEmptyString(node) {
+ return this.nodes[node+NODE_END_INDEX] ===
+ this.nodes[node+NODE_BEG_INDEX];
+ }
+
+ getNodeString(node) {
+ const beg = this.nodes[node+NODE_BEG_INDEX];
+ const end = this.nodes[node+NODE_END_INDEX];
+ if ( end === beg ) { return ''; }
+ if ( beg === 0 && end === this.rawEnd ) {
+ return this.raw;
+ }
+ return this.raw.slice(beg, end);
+ }
+
+ getNodeStringBeg(node) {
+ return this.nodes[node+NODE_BEG_INDEX];
+ }
+
+ getNodeStringEnd(node) {
+ return this.nodes[node+NODE_END_INDEX];
+ }
+
+ getNodeStringLen(node) {
+ if ( node === 0 ) { return ''; }
+ return this.nodes[node+NODE_END_INDEX] - this.nodes[node+NODE_BEG_INDEX];
+ }
+
+ isNodeTransformed(node) {
+ return this.nodes[node+NODE_TRANSFORM_INDEX] !== 0;
+ }
+
+ getNodeTransform(node) {
+ if ( node === 0 ) { return ''; }
+ const slot = this.nodes[node+NODE_TRANSFORM_INDEX];
+ return slot !== 0 ? this.astTransforms[slot] : this.getNodeString(node);
+ }
+
+ setNodeTransform(node, value) {
+ const slot = this.astTransformPtr++;
+ this.astTransforms[slot] = value;
+ this.nodes[node+NODE_TRANSFORM_INDEX] = slot;
+ }
+
+ getTypeString(type) {
+ const node = this.getBranchFromType(type);
+ if ( node === 0 ) { return; }
+ return this.getNodeString(node);
+ }
+
+ leftWhitespaceCount(s) {
+ const match = this.reWhitespaceStart.exec(s);
+ return match === null ? 0 : match[0].length;
+ }
+
+ rightWhitespaceCount(s) {
+ const match = this.reWhitespaceEnd.exec(s);
+ return match === null ? 0 : match[0].length;
+ }
+
+ nextCommaInCommaSeparatedListString(s, start) {
+ const n = s.length;
+ if ( n === 0 ) { return -1; }
+ const ilastchar = n - 1;
+ let i = start;
+ while ( i < n ) {
+ const c = s.charCodeAt(i);
+ if ( c === 0x2C /* ',' */ ) { return i + 1; }
+ if ( c === 0x5C /* '\\' */ ) {
+ if ( i < ilastchar ) { i += 1; }
+ }
+ }
+ return -1;
+ }
+
+ endOfLiteralRegex(s, start) {
+ const n = s.length;
+ if ( n === 0 ) { return -1; }
+ const ilastchar = n - 1;
+ let i = start + 1;
+ while ( i < n ) {
+ const c = s.charCodeAt(i);
+ if ( c === 0x2F /* '/' */ ) { return i + 1; }
+ if ( c === 0x5C /* '\\' */ ) {
+ if ( i < ilastchar ) { i += 1; }
+ }
+ i += 1;
+ }
+ return -1;
+ }
+
+ charCodeAt(pos) {
+ return pos < this.rawEnd ? this.raw.charCodeAt(pos) : -1;
+ }
+
+ isTokenCharCode(c) {
+ return c === 0x25 ||
+ c >= 0x30 && c <= 0x39 ||
+ c >= 0x41 && c <= 0x5A ||
+ c >= 0x61 && c <= 0x7A;
+ }
+
+ // Ultimately, let the browser API do the hostname normalization, after
+ // making some other trivial checks.
+ //
+ // mode bits:
+ // 0b00001: can use wildcard at any position
+ // 0b00010: can use entity-based hostnames
+ // 0b00100: can use single wildcard
+ // 0b01000: can be negated
+ //
+ // returns:
+ // undefined: no normalization needed, use original hostname
+ // empty string: hostname is invalid
+ // non-empty string: normalized hostname
+ normalizeHostnameValue(s, modeBits = 0b00000) {
+ if ( this.reHostnameAscii.test(s) ) { return; }
+ if ( this.reBadHostnameChars.test(s) ) { return ''; }
+ let hn = s;
+ const hasWildcard = hn.includes('*');
+ if ( hasWildcard ) {
+ if ( modeBits === 0 ) { return ''; }
+ if ( hn.length === 1 ) {
+ if ( (modeBits & 0b0100) === 0 ) { return ''; }
+ return;
+ }
+ if ( (modeBits & 0b0010) !== 0 ) {
+ if ( this.rePlainEntity.test(hn) ) { return; }
+ if ( this.reIsEntity.test(hn) === false ) { return ''; }
+ } else if ( (modeBits & 0b0001) === 0 ) {
+ return '';
+ }
+ hn = hn.replace(/\*/g, '__asterisk__');
+ }
+ this.punycoder.hostname = '_';
+ try {
+ this.punycoder.hostname = hn;
+ hn = this.punycoder.hostname;
+ } catch (_) {
+ return '';
+ }
+ if ( hn === '_' || hn === '' ) { return ''; }
+ if ( hasWildcard ) {
+ hn = this.punycoder.hostname.replace(/__asterisk__/g, '*');
+ }
+ if (
+ (modeBits & 0b0001) === 0 && (
+ hn.charCodeAt(0) === 0x2E /* . */ ||
+ exCharCodeAt(hn, -1) === 0x2E /* . */
+ )
+ ) {
+ return '';
+ }
+ return hn;
+ }
+
+ normalizeRegexPattern(s) {
+ try {
+ const source = /^\/.+\/$/.test(s) ? s.slice(1,-1) : s;
+ const regex = new RegExp(source);
+ return regex.source;
+ } catch (ex) {
+ this.normalizeRegexPattern.message = ex.toString();
+ }
+ return '';
+ }
+
+ getDomainListIterator(root) {
+ const iter = this.domainListIteratorJunkyard.length !== 0
+ ? this.domainListIteratorJunkyard.pop().reuse(root)
+ : new DomainListIterator(this, root);
+ return root !== 0 ? iter : iter.stop();
+ }
+
+ getNetFilterFromOptionIterator() {
+ return this.getDomainListIterator(
+ this.getBranchFromType(NODE_TYPE_NET_OPTION_NAME_FROM)
+ );
+ }
+
+ getNetFilterToOptionIterator() {
+ return this.getDomainListIterator(
+ this.getBranchFromType(NODE_TYPE_NET_OPTION_NAME_TO)
+ );
+ }
+
+ getNetFilterDenyallowOptionIterator() {
+ return this.getDomainListIterator(
+ this.getBranchFromType(NODE_TYPE_NET_OPTION_NAME_DENYALLOW)
+ );
+ }
+
+ getExtFilterDomainIterator() {
+ return this.getDomainListIterator(
+ this.getBranchFromType(NODE_TYPE_EXT_OPTIONS)
+ );
+ }
+
+ getWalker(from) {
+ if ( this.walkerJunkyard.length === 0 ) {
+ return new AstWalker(this, from);
+ }
+ const walker = this.walkerJunkyard.pop();
+ walker.reset(from);
+ return walker;
+ }
+
+ findDescendantByType(from, type) {
+ const walker = this.getWalker(from);
+ let node = walker.next();
+ while ( node !== 0 ) {
+ if ( this.getNodeType(node) === type ) { return node; }
+ node = walker.next();
+ }
+ return 0;
+ }
+
+ dump() {
+ if ( this.astType === AST_TYPE_COMMENT ) { return; }
+ const walker = this.getWalker();
+ for ( let node = walker.reset(); node !== 0; node = walker.next() ) {
+ const type = this.nodes[node+NODE_TYPE_INDEX];
+ const value = this.getNodeString(node);
+ const name = nodeNameFromNodeType.get(type) || `${type}`;
+ const bits = this.getNodeFlags(node).toString(2).padStart(4, '0');
+ const indent = ' '.repeat(walker.depth);
+ console.log(`${indent}type=${name} "${value}" 0b${bits}`);
+ if ( this.isNodeTransformed(node) ) {
+ console.log(`${indent} transform="${this.getNodeTransform(node)}`);
+ }
+ }
+ }
+}
+
+/******************************************************************************/
+
+export function parseRedirectValue(arg) {
+ let token = arg.trim();
+ let priority = 0;
+ const asDataURI = token.charCodeAt(0) === 0x25 /* '%' */;
+ if ( asDataURI ) { token = token.slice(1); }
+ const match = /:-?\d+$/.exec(token);
+ if ( match !== null ) {
+ priority = parseInt(token.slice(match.index + 1), 10);
+ token = token.slice(0, match.index);
+ }
+ return { token, priority, asDataURI };
+}
+
+export function parseQueryPruneValue(arg) {
+ let s = arg.trim();
+ if ( s === '' ) { return { all: true }; }
+ const out = { };
+ out.not = s.charCodeAt(0) === 0x7E /* '~' */;
+ if ( out.not ) {
+ s = s.slice(1);
+ }
+ const match = /^\/(.+)\/(i)?$/.exec(s);
+ if ( match !== null ) {
+ try {
+ out.re = new RegExp(match[1], match[2] || '');
+ }
+ catch(ex) {
+ out.bad = true;
+ }
+ return out;
+ }
+ // TODO: remove once no longer used in filter lists
+ if ( s.startsWith('|') ) {
+ try {
+ out.re = new RegExp('^' + s.slice(1), 'i');
+ } catch(ex) {
+ out.bad = true;
+ }
+ return out;
+ }
+ // Multiple values not supported (because very inefficient)
+ if ( s.includes('|') ) {
+ out.bad = true;
+ return out;
+ }
+ out.name = s;
+ return out;
+}
+
+export function parseHeaderValue(arg) {
+ let s = arg.trim();
+ const out = { };
+ let pos = s.indexOf(':');
+ if ( pos === -1 ) { pos = s.length; }
+ out.name = s.slice(0, pos);
+ out.bad = out.name === '';
+ s = s.slice(pos + 1);
+ out.not = s.charCodeAt(0) === 0x7E /* '~' */;
+ if ( out.not ) { s = s.slice(1); }
+ out.value = s;
+ const match = /^\/(.+)\/(i)?$/.exec(s);
+ if ( match !== null ) {
+ try {
+ out.re = new RegExp(match[1], match[2] || '');
+ }
+ catch(ex) {
+ out.bad = true;
+ }
+ }
+ return out;
+}
+
+
+// https://adguard.com/kb/general/ad-filtering/create-own-filters/#replace-modifier
+
+export function parseReplaceValue(s) {
+ if ( s.charCodeAt(0) !== 0x2F /* / */ ) { return; }
+ const parser = new ArgListParser('/');
+ parser.nextArg(s, 1);
+ let pattern = s.slice(parser.argBeg, parser.argEnd);
+ if ( parser.transform ) {
+ pattern = parser.normalizeArg(pattern);
+ }
+ if ( pattern === '' ) { return; }
+ pattern = parser.normalizeArg(pattern, '$');
+ pattern = parser.normalizeArg(pattern, ',');
+ parser.nextArg(s, parser.separatorEnd);
+ let replacement = s.slice(parser.argBeg, parser.argEnd);
+ if ( parser.separatorEnd === parser.separatorBeg ) { return; }
+ if ( parser.transform ) {
+ replacement = parser.normalizeArg(replacement);
+ }
+ replacement = parser.normalizeArg(replacement, '$');
+ replacement = parser.normalizeArg(replacement, ',');
+ const flags = s.slice(parser.separatorEnd);
+ try {
+ return { re: new RegExp(pattern, flags), replacement };
+ } catch(_) {
+ }
+}
+
+/******************************************************************************/
+
+export const netOptionTokenDescriptors = new Map([
+ [ '1p', { canNegate: true } ],
+ /* synonym */ [ 'first-party', { canNegate: true } ],
+ [ 'strict1p', { } ],
+ [ '3p', { canNegate: true } ],
+ /* synonym */ [ 'third-party', { canNegate: true } ],
+ [ 'strict3p', { } ],
+ [ 'all', { } ],
+ [ 'badfilter', { } ],
+ [ 'cname', { allowOnly: true } ],
+ [ 'csp', { mustAssign: true } ],
+ [ 'css', { canNegate: true } ],
+ /* synonym */ [ 'stylesheet', { canNegate: true } ],
+ [ 'denyallow', { mustAssign: true } ],
+ [ 'doc', { canNegate: true } ],
+ /* synonym */ [ 'document', { canNegate: true } ],
+ [ 'ehide', { } ],
+ /* synonym */ [ 'elemhide', { } ],
+ [ 'empty', { blockOnly: true } ],
+ [ 'frame', { canNegate: true } ],
+ /* synonym */ [ 'subdocument', { canNegate: true } ],
+ [ 'from', { mustAssign: true } ],
+ /* synonym */ [ 'domain', { mustAssign: true } ],
+ [ 'font', { canNegate: true } ],
+ [ 'genericblock', { } ],
+ [ 'ghide', { } ],
+ /* synonym */ [ 'generichide', { } ],
+ [ 'header', { mustAssign: true } ],
+ [ 'image', { canNegate: true } ],
+ [ 'important', { blockOnly: true } ],
+ [ 'inline-font', { canNegate: true } ],
+ [ 'inline-script', { canNegate: true } ],
+ [ 'match-case', { } ],
+ [ 'media', { canNegate: true } ],
+ [ 'method', { mustAssign: true } ],
+ [ 'mp4', { blockOnly: true } ],
+ [ '_', { } ],
+ [ 'object', { canNegate: true } ],
+ /* synonym */ [ 'object-subrequest', { canNegate: true } ],
+ [ 'other', { canNegate: true } ],
+ [ 'permissions', { mustAssign: true } ],
+ [ 'ping', { canNegate: true } ],
+ /* synonym */ [ 'beacon', { canNegate: true } ],
+ [ 'popunder', { } ],
+ [ 'popup', { canNegate: true } ],
+ [ 'redirect', { mustAssign: true } ],
+ /* synonym */ [ 'rewrite', { mustAssign: true } ],
+ [ 'redirect-rule', { mustAssign: true } ],
+ [ 'removeparam', { } ],
+ [ 'replace', { mustAssign: true } ],
+ /* synonym */ [ 'queryprune', { } ],
+ [ 'script', { canNegate: true } ],
+ [ 'shide', { } ],
+ /* synonym */ [ 'specifichide', { } ],
+ [ 'to', { mustAssign: true } ],
+ [ 'uritransform', { mustAssign: true } ],
+ [ 'xhr', { canNegate: true } ],
+ /* synonym */ [ 'xmlhttprequest', { canNegate: true } ],
+ [ 'webrtc', { } ],
+ [ 'websocket', { canNegate: true } ],
+]);
+
+/******************************************************************************/
+
+// https://github.com/chrisaljoudi/uBlock/issues/1004
+// Detect and report invalid CSS selectors.
+
+// Discard new ABP's `-abp-properties` directive until it is
+// implemented (if ever). Unlikely, see:
+// https://github.com/gorhill/uBlock/issues/1752
+
+// https://github.com/gorhill/uBlock/issues/2624
+// Convert Adguard's `-ext-has='...'` into uBO's `:has(...)`.
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/89
+// Do not discard unknown pseudo-elements.
+
+class ExtSelectorCompiler {
+ constructor(instanceOptions) {
+ this.reParseRegexLiteral = /^\/(.+)\/([imu]+)?$/;
+
+ // Use a regex for most common CSS selectors known to be valid in any
+ // context.
+ const cssIdentifier = '[A-Za-z_][\\w-]*';
+ const cssClassOrId = `[.#]${cssIdentifier}`;
+ const cssAttribute = `\\[${cssIdentifier}(?:[*^$]?="[^"\\]\\\\]+")?\\]`;
+ const cssSimple =
+ '(?:' +
+ `${cssIdentifier}(?:${cssClassOrId})*(?:${cssAttribute})*` + '|' +
+ `${cssClassOrId}(?:${cssClassOrId})*(?:${cssAttribute})*` + '|' +
+ `${cssAttribute}(?:${cssAttribute})*` +
+ ')';
+ const cssCombinator = '(?: | [+>~] )';
+ this.reCommonSelector = new RegExp(
+ `^${cssSimple}(?:${cssCombinator}${cssSimple})*$`
+ );
+ // Resulting regex literal:
+ // /^(?:[A-Za-z_][\w-]*(?:[.#][A-Za-z_][\w-]*)*(?:\[[A-Za-z_][\w-]*(?:[*^$]?="[^"\]\\]+")?\])*|[.#][A-Za-z_][\w-]*(?:[.#][A-Za-z_][\w-]*)*(?:\[[A-Za-z_][\w-]*(?:[*^$]?="[^"\]\\]+")?\])*|\[[A-Za-z_][\w-]*(?:[*^$]?="[^"\]\\]+")?\](?:\[[A-Za-z_][\w-]*(?:[*^$]?="[^"\]\\]+")?\])*)(?:(?:\s+|\s*[>+~]\s*)(?:[A-Za-z_][\w-]*(?:[.#][A-Za-z_][\w-]*)*(?:\[[A-Za-z_][\w-]*(?:[*^$]?="[^"\]\\]+")?\])*|[.#][A-Za-z_][\w-]*(?:[.#][A-Za-z_][\w-]*)*(?:\[[A-Za-z_][\w-]*(?:[*^$]?="[^"\]\\]+")?\])*|\[[A-Za-z_][\w-]*(?:[*^$]?="[^"\]\\]+")?\](?:\[[A-Za-z_][\w-]*(?:[*^$]?="[^"\]\\]+")?\])*))*$/
+
+ this.reEatBackslashes = /\\([()])/g;
+ this.reEscapeRegex = /[.*+?^${}()|[\]\\]/g;
+ // https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes
+ this.knownPseudoClasses = new Set([
+ 'active', 'any-link', 'autofill',
+ 'blank',
+ 'checked', 'current',
+ 'default', 'defined', 'dir', 'disabled',
+ 'empty', 'enabled',
+ 'first', 'first-child', 'first-of-type', 'fullscreen', 'future', 'focus', 'focus-visible', 'focus-within',
+ 'has', 'host', 'host-context', 'hover',
+ 'indeterminate', 'in-range', 'invalid', 'is',
+ 'lang', 'last-child', 'last-of-type', 'left', 'link', 'local-link',
+ 'modal',
+ 'not', 'nth-child', 'nth-col', 'nth-last-child', 'nth-last-col', 'nth-last-of-type', 'nth-of-type',
+ 'only-child', 'only-of-type', 'optional', 'out-of-range',
+ 'past', 'picture-in-picture', 'placeholder-shown', 'paused', 'playing',
+ 'read-only', 'read-write', 'required', 'right', 'root',
+ 'scope', 'state', 'target', 'target-within',
+ 'user-invalid', 'valid', 'visited',
+ 'where',
+ ]);
+ this.knownPseudoClassesWithArgs = new Set([
+ 'dir',
+ 'has', 'host-context',
+ 'is',
+ 'lang',
+ 'not', 'nth-child', 'nth-col', 'nth-last-child', 'nth-last-col', 'nth-last-of-type', 'nth-of-type',
+ 'state',
+ 'where',
+ ]);
+ // https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements
+ this.knownPseudoElements = new Set([
+ 'after',
+ 'backdrop', 'before',
+ 'cue', 'cue-region',
+ 'first-letter', 'first-line', 'file-selector-button',
+ 'grammar-error', 'marker',
+ 'part', 'placeholder',
+ 'selection', 'slotted', 'spelling-error',
+ 'target-text',
+ ]);
+ this.knownPseudoElementsWithArgs = new Set([
+ 'part',
+ 'slotted',
+ ]);
+ // https://github.com/gorhill/uBlock/issues/2793
+ this.normalizedOperators = new Map([
+ [ '-abp-has', 'has' ],
+ [ '-abp-contains', 'has-text' ],
+ [ 'contains', 'has-text' ],
+ [ 'nth-ancestor', 'upward' ],
+ [ 'watch-attrs', 'watch-attr' ],
+ ]);
+ this.actionOperators = new Set([
+ ':remove',
+ ':style',
+ ]);
+ this.proceduralOperatorNames = new Set([
+ 'has-text',
+ 'if',
+ 'if-not',
+ 'matches-attr',
+ 'matches-css',
+ 'matches-css-after',
+ 'matches-css-before',
+ 'matches-media',
+ 'matches-path',
+ 'min-text-length',
+ 'others',
+ 'upward',
+ 'watch-attr',
+ 'xpath',
+ ]);
+ this.maybeProceduralOperatorNames = new Set([
+ 'has',
+ 'not',
+ ]);
+ this.proceduralActionNames = new Set([
+ 'remove',
+ 'remove-attr',
+ 'remove-class',
+ 'style',
+ ]);
+ this.normalizedExtendedSyntaxOperators = new Map([
+ [ 'contains', 'has-text' ],
+ [ 'has', 'has' ],
+ ]);
+ this.reIsRelativeSelector = /^\s*[+>~]/;
+ this.reExtendedSyntax = /\[-(?:abp|ext)-[a-z-]+=(['"])(?:.+?)(?:\1)\]/;
+ this.reExtendedSyntaxReplacer = /\[-(?:abp|ext)-([a-z-]+)=(['"])(.+?)\2\]/g;
+ this.abpProceduralOpReplacer = /:-abp-(?:[a-z]+)\(/g;
+ this.nativeCssHas = instanceOptions.nativeCssHas === true;
+ // https://www.w3.org/TR/css-syntax-3/#typedef-ident-token
+ this.reInvalidIdentifier = /^\d/;
+ this.error = undefined;
+ }
+
+ // CSSTree library holds onto last string parsed, and this is problematic
+ // when the string is a slice of a huge parent string (typically a whole
+ // filter list), it causes the huge parent string to stay in memory.
+ // Asking CSSTree to parse an empty string resolves this issue.
+ finish() {
+ cssTree.parse('');
+ }
+
+ compile(raw, out, compileOptions = {}) {
+ this.asProcedural = compileOptions.asProcedural === true;
+
+ // https://github.com/gorhill/uBlock/issues/952
+ // Find out whether we are dealing with an Adguard-specific cosmetic
+ // filter, and if so, translate it if supported, or discard it if not
+ // supported.
+ // We have an Adguard/ABP cosmetic filter if and only if the
+ // character is `$`, `%` or `?`, otherwise it's not a cosmetic
+ // filter.
+ // Adguard's style injection: translate to uBO's format.
+ if ( compileOptions.adgStyleSyntax === true ) {
+ raw = this.translateAdguardCSSInjectionFilter(raw);
+ if ( raw === '' ) { return false; }
+ }
+
+ // Normalize AdGuard's attribute-based procedural operators.
+ // Normalize ABP's procedural operator names
+ if ( this.asProcedural ) {
+ if ( this.reExtendedSyntax.test(raw) ) {
+ raw = raw.replace(this.reExtendedSyntaxReplacer, (a, a1, a2, a3) => {
+ const op = this.normalizedExtendedSyntaxOperators.get(a1);
+ if ( op === undefined ) { return a; }
+ return `:${op}(${a3})`;
+ });
+ } else {
+ let asProcedural = false;
+ raw = raw.replace(this.abpProceduralOpReplacer, match => {
+ if ( match === ':-abp-contains(' ) { return ':has-text('; }
+ if ( match === ':-abp-has(' ) { return ':has('; }
+ asProcedural = true;
+ return match;
+ });
+ this.asProcedural = asProcedural;
+ }
+ }
+
+ // Relative selectors not allowed at top level.
+ if ( this.reIsRelativeSelector.test(raw) ) { return false; }
+
+ if ( this.reCommonSelector.test(raw) ) {
+ out.compiled = raw;
+ return true;
+ }
+
+ this.error = undefined;
+ out.compiled = this.compileSelector(raw);
+ if ( out.compiled === undefined ) {
+ out.error = this.error;
+ return false;
+ }
+
+ if ( out.compiled instanceof Object ) {
+ out.compiled.raw = raw;
+ out.compiled = JSON.stringify(out.compiled);
+ }
+ return true;
+ }
+
+ compileSelector(raw) {
+ const parts = this.astFromRaw(raw, 'selectorList');
+ if ( parts === undefined ) { return; }
+ if ( this.astHasType(parts, 'Error') ) { return; }
+ if ( this.astHasType(parts, 'Selector') === false ) { return; }
+ if ( this.astIsValidSelectorList(parts) === false ) { return; }
+ if (
+ this.astHasType(parts, 'ProceduralSelector') === false &&
+ this.astHasType(parts, 'ActionSelector') === false
+ ) {
+ return this.astSerialize(parts);
+ }
+ const r = this.astCompile(parts);
+ if ( this.isCssable(r) ) {
+ r.cssable = true;
+ }
+ return r;
+ }
+
+ isCssable(r) {
+ if ( r instanceof Object === false ) { return false; }
+ if ( Array.isArray(r.action) && r.action[0] !== 'style' ) { return false; }
+ if ( Array.isArray(r.tasks) === false ) { return true; }
+ if ( r.tasks[0][0] === 'matches-media' ) {
+ if ( r.tasks.length === 1 ) { return true; }
+ if ( r.tasks.length === 2 ) {
+ if ( r.selector !== '' ) { return false; }
+ if ( r.tasks[1][0] === 'spath' ) { return true; }
+ }
+ }
+ return false;
+ }
+
+ astFromRaw(raw, type) {
+ let ast;
+ try {
+ ast = cssTree.parse(raw, {
+ context: type,
+ parseValue: false,
+ });
+ } catch(reason) {
+ const lines = [ reason.message ];
+ const extra = reason.sourceFragment().split('\n');
+ if ( extra.length !== 0 ) { lines.push(''); }
+ const match = /^[^|]+\|/.exec(extra[0]);
+ const beg = match !== null ? match[0].length : 0;
+ lines.push(...extra.map(a => a.slice(beg)));
+ this.error = lines.join('\n');
+ return;
+ }
+ const parts = [];
+ this.astFlatten(ast, parts);
+ return parts;
+ }
+
+ astFlatten(data, out) {
+ const head = data.children && data.children.head;
+ let args;
+ switch ( data.type ) {
+ case 'AttributeSelector':
+ case 'ClassSelector':
+ case 'Combinator':
+ case 'IdSelector':
+ case 'MediaFeature':
+ case 'Nth':
+ case 'Raw':
+ case 'TypeSelector':
+ out.push({ data });
+ break;
+ case 'Declaration':
+ if ( data.value ) {
+ this.astFlatten(data.value, args = []);
+ }
+ out.push({ data, args });
+ args = undefined;
+ break;
+ case 'DeclarationList':
+ case 'Identifier':
+ case 'MediaQueryList':
+ case 'Selector':
+ case 'SelectorList':
+ args = out;
+ out.push({ data });
+ break;
+ case 'MediaQuery':
+ case 'PseudoClassSelector':
+ case 'PseudoElementSelector':
+ if ( head ) { args = []; }
+ out.push({ data, args });
+ break;
+ case 'Value':
+ args = out;
+ break;
+ default:
+ break;
+ }
+ if ( head ) {
+ if ( args ) {
+ this.astFlatten(head.data, args);
+ }
+ let next = head.next;
+ while ( next ) {
+ this.astFlatten(next.data, args);
+ next = next.next;
+ }
+ }
+ if ( data.type !== 'PseudoClassSelector' ) { return; }
+ if ( data.name.startsWith('-abp-') && this.asProcedural === false ) {
+ this.error = `${data.name} requires '#?#' separator syntax`;
+ return;
+ }
+ // Post-analysis, mind:
+ // - https://w3c.github.io/csswg-drafts/selectors-4/#has-pseudo
+ // - https://w3c.github.io/csswg-drafts/selectors-4/#negation
+ data.name = this.normalizedOperators.get(data.name) || data.name;
+ if ( this.proceduralOperatorNames.has(data.name) ) {
+ data.type = 'ProceduralSelector';
+ } else if ( this.proceduralActionNames.has(data.name) ) {
+ data.type = 'ActionSelector';
+ } else if ( data.name.startsWith('-abp-') ) {
+ data.type = 'Error';
+ this.error = `${data.name} is not supported`;
+ return;
+ }
+ if ( this.maybeProceduralOperatorNames.has(data.name) === false ) {
+ return;
+ }
+ if ( this.astHasType(args, 'ActionSelector') ) {
+ data.type = 'Error';
+ this.error = 'invalid use of action operator';
+ return;
+ }
+ if ( this.astHasType(args, 'ProceduralSelector') ) {
+ data.type = 'ProceduralSelector';
+ return;
+ }
+ switch ( data.name ) {
+ case 'has':
+ if (
+ this.asProcedural ||
+ this.nativeCssHas !== true ||
+ this.astHasName(args, 'has')
+ ) {
+ data.type = 'ProceduralSelector';
+ } else if ( this.astHasType(args, 'PseudoElementSelector') ) {
+ data.type = 'Error';
+ }
+ break;
+ case 'not': {
+ if ( this.astHasType(args, 'Combinator', 0) === false ) { break; }
+ if ( this.astIsValidSelectorList(args) !== true ) {
+ data.type = 'Error';
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/2300
+ // Unquoted attribute values are parsed as Identifier instead of String.
+ astSerializePart(part) {
+ const out = [];
+ const { data } = part;
+ switch ( data.type ) {
+ case 'AttributeSelector': {
+ const name = data.name.name;
+ if ( this.reInvalidIdentifier.test(name) ) { return; }
+ if ( data.matcher === null ) {
+ out.push(`[${name}]`);
+ break;
+ }
+ let value = data.value.value;
+ if ( typeof value !== 'string' ) {
+ value = data.value.name;
+ }
+ value = value.replace(/["\\]/g, '\\$&');
+ let flags = '';
+ if ( typeof data.flags === 'string' ) {
+ if ( /^(is?|si?)$/.test(data.flags) === false ) { return; }
+ flags = ` ${data.flags}`;
+ }
+ out.push(`[${name}${data.matcher}"${value}"${flags}]`);
+ break;
+ }
+ case 'ClassSelector':
+ if ( this.reInvalidIdentifier.test(data.name) ) { return; }
+ out.push(`.${data.name}`);
+ break;
+ case 'Combinator':
+ out.push(data.name);
+ break;
+ case 'Identifier':
+ if ( this.reInvalidIdentifier.test(data.name) ) { return; }
+ out.push(data.name);
+ break;
+ case 'IdSelector':
+ if ( this.reInvalidIdentifier.test(data.name) ) { return; }
+ out.push(`#${data.name}`);
+ break;
+ case 'Nth': {
+ if ( data.selector !== null ) { return; }
+ if ( data.nth.type === 'AnPlusB' ) {
+ const a = parseInt(data.nth.a, 10) || null;
+ const b = parseInt(data.nth.b, 10) || null;
+ if ( a !== null ) {
+ out.push(`${a}n`);
+ if ( b === null ) { break; }
+ if ( b < 0 ) {
+ out.push(`${b}`);
+ } else {
+ out.push(`+${b}`);
+ }
+ } else if ( b !== null ) {
+ out.push(`${b}`);
+ }
+ } else if ( data.nth.type === 'Identifier' ) {
+ out.push(data.nth.name);
+ }
+ break;
+ }
+ case 'PseudoElementSelector': {
+ const hasArgs = Array.isArray(part.args);
+ if ( data.name.charCodeAt(0) !== 0x2D /* '-' */ ) {
+ if ( this.knownPseudoElements.has(data.name) === false ) { return; }
+ if ( this.knownPseudoElementsWithArgs.has(data.name) && hasArgs === false ) { return; }
+ }
+ out.push(`::${data.name}`);
+ if ( hasArgs ) {
+ const arg = this.astSerialize(part.args);
+ if ( typeof arg !== 'string' ) { return; }
+ out.push(`(${arg})`);
+ }
+ break;
+ }
+ case 'PseudoClassSelector': {
+ const hasArgs = Array.isArray(part.args);
+ if ( data.name.charCodeAt(0) !== 0x2D /* '-' */ ) {
+ if ( this.knownPseudoClasses.has(data.name) === false ) { return; }
+ if ( this.knownPseudoClassesWithArgs.has(data.name) && hasArgs === false ) { return; }
+ }
+ out.push(`:${data.name}`);
+ if ( hasArgs ) {
+ const arg = this.astSerialize(part.args);
+ if ( typeof arg !== 'string' ) { return; }
+ out.push(`(${arg.trim()})`);
+ }
+ break;
+ }
+ case 'Raw':
+ out.push(data.value);
+ break;
+ case 'TypeSelector':
+ if ( this.reInvalidIdentifier.test(data.name) ) { return; }
+ out.push(data.name);
+ break;
+ default:
+ break;
+ }
+ return out.join('');
+ }
+
+ astSerialize(parts, plainCSS = true) {
+ const out = [];
+ for ( const part of parts ) {
+ const { data } = part;
+ switch ( data.type ) {
+ case 'AttributeSelector':
+ case 'ClassSelector':
+ case 'Identifier':
+ case 'IdSelector':
+ case 'Nth':
+ case 'PseudoClassSelector':
+ case 'PseudoElementSelector': {
+ const s = this.astSerializePart(part);
+ if ( s === undefined ) { return; }
+ out.push(s);
+ break;
+ }
+ case 'Combinator': {
+ const s = this.astSerializePart(part);
+ if ( s === undefined ) { return; }
+ if ( out.length !== 0 ) { out.push(' '); }
+ if ( s !== ' ' ) { out.push(s, ' '); }
+ break;
+ }
+ case 'TypeSelector': {
+ const s = this.astSerializePart(part);
+ if ( s === undefined ) { return; }
+ if ( s === '*' && out.length !== 0 ) {
+ const before = out[out.length-1];
+ if ( before.endsWith(' ') === false ) { return; }
+ }
+ out.push(s);
+ break;
+ }
+ case 'Raw':
+ if ( plainCSS ) { return; }
+ out.push(this.astSerializePart(part));
+ break;
+ case 'Selector':
+ if ( out.length !== 0 ) { out.push(', '); }
+ break;
+ case 'SelectorList':
+ break;
+ default:
+ return;
+ }
+ }
+ return out.join('');
+ }
+
+ astCompile(parts, details = {}) {
+ if ( Array.isArray(parts) === false ) { return; }
+ if ( parts.length === 0 ) { return; }
+ if ( parts[0].data.type !== 'SelectorList' ) { return; }
+ const out = { selector: '' };
+ const prelude = [];
+ const tasks = [];
+ let startOfSelector = true;
+ for ( const part of parts ) {
+ if ( out.action !== undefined ) { return; }
+ const { data } = part;
+ switch ( data.type ) {
+ case 'ActionSelector': {
+ if ( details.noaction ) { return; }
+ if ( prelude.length !== 0 ) {
+ if ( tasks.length === 0 ) {
+ out.selector = prelude.join('');
+ } else {
+ tasks.push(this.createSpathTask(prelude.join('')));
+ }
+ prelude.length = 0;
+ }
+ const args = this.compileArgumentAst(data.name, part.args);
+ if ( args === undefined ) { return; }
+ out.action = [ data.name, args ];
+ break;
+ }
+ case 'AttributeSelector':
+ case 'ClassSelector':
+ case 'IdSelector':
+ case 'PseudoClassSelector':
+ case 'PseudoElementSelector':
+ case 'TypeSelector': {
+ const s = this.astSerializePart(part);
+ if ( s === undefined ) { return; }
+ prelude.push(s);
+ startOfSelector = false;
+ break;
+ }
+ case 'Combinator': {
+ const s = this.astSerializePart(part);
+ if ( s === undefined ) { return; }
+ if ( startOfSelector === false || prelude.length !== 0 ) {
+ prelude.push(' ');
+ }
+ if ( s !== ' ' ) { prelude.push(s, ' '); }
+ startOfSelector = false;
+ break;
+ }
+ case 'ProceduralSelector': {
+ if ( prelude.length !== 0 ) {
+ let spath = prelude.join('');
+ prelude.length = 0;
+ if ( spath.endsWith(' ') ) { spath += '*'; }
+ if ( tasks.length === 0 ) {
+ out.selector = spath;
+ } else {
+ tasks.push(this.createSpathTask(spath));
+ }
+ }
+ const args = this.compileArgumentAst(data.name, part.args);
+ if ( args === undefined ) { return; }
+ tasks.push([ data.name, args ]);
+ startOfSelector = false;
+ break;
+ }
+ case 'Selector':
+ if ( prelude.length !== 0 ) {
+ prelude.push(', ');
+ }
+ startOfSelector = true;
+ break;
+ case 'SelectorList':
+ startOfSelector = true;
+ break;
+ default:
+ return;
+ }
+ }
+ if ( tasks.length === 0 && out.action === undefined ) {
+ if ( prelude.length === 0 ) { return; }
+ return prelude.join('').trim();
+ }
+ if ( prelude.length !== 0 ) {
+ tasks.push(this.createSpathTask(prelude.join('')));
+ }
+ if ( tasks.length !== 0 ) {
+ out.tasks = tasks;
+ }
+ return out;
+ }
+
+ astHasType(parts, type, depth = 0x7FFFFFFF) {
+ if ( Array.isArray(parts) === false ) { return false; }
+ for ( const part of parts ) {
+ if ( part.data.type === type ) { return true; }
+ if (
+ Array.isArray(part.args) &&
+ depth !== 0 &&
+ this.astHasType(part.args, type, depth-1)
+ ) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ astHasName(parts, name) {
+ if ( Array.isArray(parts) === false ) { return false; }
+ for ( const part of parts ) {
+ if ( part.data.name === name ) { return true; }
+ if ( Array.isArray(part.args) && this.astHasName(part.args, name) ) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ astSelectorsFromSelectorList(args) {
+ if ( Array.isArray(args) === false ) { return; }
+ if ( args.length < 3 ) { return; }
+ if ( args[0].data instanceof Object === false ) { return; }
+ if ( args[0].data.type !== 'SelectorList' ) { return; }
+ if ( args[1].data instanceof Object === false ) { return; }
+ if ( args[1].data.type !== 'Selector' ) { return; }
+ const out = [];
+ let beg = 1, end = 0, i = 2;
+ for (;;) {
+ if ( i < args.length ) {
+ const type = args[i].data instanceof Object && args[i].data.type;
+ if ( type === 'Selector' ) {
+ end = i;
+ }
+ } else {
+ end = args.length;
+ }
+ if ( end !== 0 ) {
+ const components = args.slice(beg+1, end);
+ if ( components.length === 0 ) { return; }
+ out.push(components);
+ if ( end === args.length ) { break; }
+ beg = end; end = 0;
+ }
+ if ( i === args.length ) { break; }
+ i += 1;
+ }
+ return out;
+ }
+
+ astIsValidSelector(components) {
+ const len = components.length;
+ if ( len === 0 ) { return false; }
+ if ( components[0].data.type === 'Combinator' ) { return false; }
+ if ( len === 1 ) { return true; }
+ if ( components[len-1].data.type === 'Combinator' ) { return false; }
+ return true;
+ }
+
+ astIsValidSelectorList(args) {
+ const selectors = this.astSelectorsFromSelectorList(args);
+ if ( Array.isArray(selectors) === false || selectors.length === 0 ) {
+ return false;
+ }
+ for ( const selector of selectors ) {
+ if ( this.astIsValidSelector(selector) !== true ) { return false; }
+ }
+ return true;
+ }
+
+ translateAdguardCSSInjectionFilter(suffix) {
+ const matches = /^(.*)\s*\{([^}]+)\}\s*$/.exec(suffix);
+ if ( matches === null ) { return ''; }
+ const selector = matches[1].trim();
+ const style = matches[2].trim();
+ // Special style directive `remove: true` is converted into a
+ // `:remove()` operator.
+ if ( /^\s*remove:\s*true[; ]*$/.test(style) ) {
+ return `${selector}:remove()`;
+ }
+ // For some reasons, many of Adguard's plain cosmetic filters are
+ // "disguised" as style-based cosmetic filters: convert such filters
+ // to plain cosmetic filters.
+ return /display\s*:\s*none\s*!important;?$/.test(style)
+ ? selector
+ : `${selector}:style(${style})`;
+ }
+
+ createSpathTask(selector) {
+ return [ 'spath', selector ];
+ }
+
+ compileArgumentAst(operator, parts) {
+ switch ( operator ) {
+ case 'has': {
+ let r = this.astCompile(parts, { noaction: true });
+ if ( typeof r === 'string' ) {
+ r = { selector: r.replace(/^\s*:scope\s*/, '') };
+ }
+ return r;
+ }
+ case 'not': {
+ return this.astCompile(parts, { noaction: true });
+ }
+ default:
+ break;
+ }
+ if ( Array.isArray(parts) === false || parts.length === 0 ) { return; }
+ const arg = this.astSerialize(parts, false);
+ if ( arg === undefined ) { return; }
+ switch ( operator ) {
+ case 'has-text':
+ return this.compileText(arg);
+ case 'if':
+ return this.compileSelector(arg);
+ case 'if-not':
+ return this.compileSelector(arg);
+ case 'matches-attr':
+ return this.compileMatchAttrArgument(arg);
+ case 'matches-css':
+ return this.compileCSSDeclaration(arg);
+ case 'matches-css-after':
+ return this.compileCSSDeclaration(`after, ${arg}`);
+ case 'matches-css-before':
+ return this.compileCSSDeclaration(`before, ${arg}`);
+ case 'matches-media':
+ return this.compileMediaQuery(arg);
+ case 'matches-path':
+ return this.compileText(arg);
+ case 'min-text-length':
+ return this.compileInteger(arg);
+ case 'others':
+ return this.compileNoArgument(arg);
+ case 'remove':
+ return this.compileNoArgument(arg);
+ case 'remove-attr':
+ return this.compileText(arg);
+ case 'remove-class':
+ return this.compileText(arg);
+ case 'style':
+ return this.compileStyleProperties(arg);
+ case 'upward':
+ return this.compileUpwardArgument(arg);
+ case 'watch-attr':
+ return this.compileAttrList(arg);
+ case 'xpath':
+ return this.compileXpathExpression(arg);
+ default:
+ break;
+ }
+ }
+
+ isBadRegex(s) {
+ try {
+ void new RegExp(s);
+ } catch (ex) {
+ this.isBadRegex.message = ex.toString();
+ return true;
+ }
+ return false;
+ }
+
+ unquoteString(s) {
+ const end = s.length;
+ if ( end === 0 ) {
+ return { s: '', end };
+ }
+ if ( /^['"]/.test(s) === false ) {
+ return { s, i: end };
+ }
+ const quote = s.charCodeAt(0);
+ const out = [];
+ let i = 1, c = 0;
+ for (;;) {
+ c = s.charCodeAt(i);
+ if ( c === quote ) {
+ i += 1;
+ break;
+ }
+ if ( c === 0x5C /* '\\' */ ) {
+ i += 1;
+ if ( i === end ) { break; }
+ c = s.charCodeAt(i);
+ if ( c !== 0x5C && c !== quote ) {
+ out.push(0x5C);
+ }
+ }
+ out.push(c);
+ i += 1;
+ if ( i === end ) { break; }
+ }
+ return { s: String.fromCharCode(...out), i };
+ }
+
+ compileMatchAttrArgument(s) {
+ if ( s === '' ) { return; }
+ let attr = '', value = '';
+ let r = this.unquoteString(s);
+ if ( r.i === s.length ) {
+ const pos = r.s.indexOf('=');
+ if ( pos === -1 ) {
+ attr = r.s;
+ } else {
+ attr = r.s.slice(0, pos);
+ value = r.s.slice(pos+1);
+ }
+ } else {
+ attr = r.s;
+ if ( s.charCodeAt(r.i) !== 0x3D ) { return; }
+ value = s.slice(r.i+1);
+ }
+ if ( attr === '' ) { return; }
+ if ( value.length !== 0 ) {
+ r = this.unquoteString(value);
+ if ( r.i !== value.length ) { return; }
+ value = r.s;
+ }
+ return { attr, value };
+ }
+
+ // Remove potentially present quotes before processing.
+ compileText(s) {
+ if ( s === '' ) {
+ this.error = 'argument missing';
+ return;
+ }
+ const r = this.unquoteString(s);
+ if ( r.i !== s.length ) { return; }
+ return r.s;
+ }
+
+ compileCSSDeclaration(s) {
+ let pseudo; {
+ const match = /^[a-z-]+,/.exec(s);
+ if ( match !== null ) {
+ pseudo = match[0].slice(0, -1);
+ s = s.slice(match[0].length).trim();
+ }
+ }
+ const pos = s.indexOf(':');
+ if ( pos === -1 ) { return; }
+ const name = s.slice(0, pos).trim();
+ const value = s.slice(pos + 1).trim();
+ const match = this.reParseRegexLiteral.exec(value);
+ let regexDetails;
+ if ( match !== null ) {
+ regexDetails = match[1];
+ if ( this.isBadRegex(regexDetails) ) { return; }
+ if ( match[2] ) {
+ regexDetails = [ regexDetails, match[2] ];
+ }
+ } else {
+ regexDetails = '^' + value.replace(this.reEscapeRegex, '\\$&') + '$';
+ }
+ return { name, pseudo, value: regexDetails };
+ }
+
+ compileInteger(s, min = 0, max = 0x7FFFFFFF) {
+ if ( /^\d+$/.test(s) === false ) { return; }
+ const n = parseInt(s, 10);
+ if ( n < min || n >= max ) { return; }
+ return n;
+ }
+
+ compileMediaQuery(s) {
+ const parts = this.astFromRaw(s, 'mediaQueryList');
+ if ( parts === undefined ) { return; }
+ if ( this.astHasType(parts, 'Raw') ) { return; }
+ if ( this.astHasType(parts, 'MediaQuery') === false ) { return; }
+ // TODO: normalize by serializing resulting AST
+ return s;
+ }
+
+ compileUpwardArgument(s) {
+ const i = this.compileInteger(s, 1, 256);
+ if ( i !== undefined ) { return i; }
+ const parts = this.astFromRaw(s, 'selectorList' );
+ if ( this.astIsValidSelectorList(parts) !== true ) { return; }
+ if ( this.astHasType(parts, 'ProceduralSelector') ) { return; }
+ if ( this.astHasType(parts, 'ActionSelector') ) { return; }
+ if ( this.astHasType(parts, 'Error') ) { return; }
+ return s;
+ }
+
+ compileNoArgument(s) {
+ if ( s === '' ) { return s; }
+ }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/668
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1693
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1811
+ // Forbid instances of:
+ // - `image-set(`
+ // - `url(`
+ // - any instance of `//`
+ // - backslashes `\`
+ // - opening comment `/*`
+ compileStyleProperties(s) {
+ if ( /image-set\(|url\(|\/\s*\/|\\|\/\*/i.test(s) ) { return; }
+ const parts = this.astFromRaw(s, 'declarationList');
+ if ( parts === undefined ) { return; }
+ if ( this.astHasType(parts, 'Declaration') === false ) { return; }
+ return s;
+ }
+
+ compileAttrList(s) {
+ if ( s === '' ) { return s; }
+ const attrs = s.split('\s*,\s*');
+ const out = [];
+ for ( const attr of attrs ) {
+ if ( attr !== '' ) {
+ out.push(attr);
+ }
+ }
+ return out;
+ }
+
+ compileXpathExpression(s) {
+ const r = this.unquoteString(s);
+ if ( r.i !== s.length ) { return; }
+ try {
+ globalThis.document.createExpression(r.s, null);
+ } catch (e) {
+ return;
+ }
+ return r.s;
+ }
+}
+
+// bit 0: can be used as auto-completion hint
+// bit 1: can not be used in HTML filtering
+//
+export const proceduralOperatorTokens = new Map([
+ [ '-abp-contains', 0b00 ],
+ [ '-abp-has', 0b00, ],
+ [ 'contains', 0b00, ],
+ [ 'has', 0b01 ],
+ [ 'has-text', 0b01 ],
+ [ 'if', 0b00 ],
+ [ 'if-not', 0b00 ],
+ [ 'matches-attr', 0b11 ],
+ [ 'matches-css', 0b11 ],
+ [ 'matches-media', 0b11 ],
+ [ 'matches-path', 0b11 ],
+ [ 'min-text-length', 0b01 ],
+ [ 'not', 0b01 ],
+ [ 'nth-ancestor', 0b00 ],
+ [ 'others', 0b11 ],
+ [ 'remove', 0b11 ],
+ [ 'remove-attr', 0b11 ],
+ [ 'remove-class', 0b11 ],
+ [ 'style', 0b11 ],
+ [ 'upward', 0b01 ],
+ [ 'watch-attr', 0b11 ],
+ [ 'watch-attrs', 0b00 ],
+ [ 'xpath', 0b01 ],
+]);
+
+/******************************************************************************/
+
+export const utils = (( ) => {
+
+ // Depends on:
+ // https://github.com/foo123/RegexAnalyzer
+ const regexAnalyzer = Regex && Regex.Analyzer || null;
+
+ class regex {
+ static firstCharCodeClass(s) {
+ return /^[\x01\x03%0-9A-Za-z]/.test(s) ? 1 : 0;
+ }
+
+ static lastCharCodeClass(s) {
+ return /[\x01\x03%0-9A-Za-z]$/.test(s) ? 1 : 0;
+ }
+
+ static tokenizableStrFromNode(node) {
+ switch ( node.type ) {
+ case 1: /* T_SEQUENCE, 'Sequence' */ {
+ let s = '';
+ for ( let i = 0; i < node.val.length; i++ ) {
+ s += this.tokenizableStrFromNode(node.val[i]);
+ }
+ return s;
+ }
+ case 2: /* T_ALTERNATION, 'Alternation' */
+ case 8: /* T_CHARGROUP, 'CharacterGroup' */ {
+ if ( node.flags.NegativeMatch ) { return '\x01'; }
+ let firstChar = 0;
+ let lastChar = 0;
+ for ( let i = 0; i < node.val.length; i++ ) {
+ const s = this.tokenizableStrFromNode(node.val[i]);
+ if ( firstChar === 0 && this.firstCharCodeClass(s) === 1 ) {
+ firstChar = 1;
+ }
+ if ( lastChar === 0 && this.lastCharCodeClass(s) === 1 ) {
+ lastChar = 1;
+ }
+ if ( firstChar === 1 && lastChar === 1 ) { break; }
+ }
+ return String.fromCharCode(firstChar, lastChar);
+ }
+ case 4: /* T_GROUP, 'Group' */ {
+ if (
+ node.flags.NegativeLookAhead === 1 ||
+ node.flags.NegativeLookBehind === 1
+ ) {
+ return '';
+ }
+ return this.tokenizableStrFromNode(node.val);
+ }
+ case 16: /* T_QUANTIFIER, 'Quantifier' */ {
+ if ( node.flags.max === 0 ) { return ''; }
+ const s = this.tokenizableStrFromNode(node.val);
+ const first = this.firstCharCodeClass(s);
+ const last = this.lastCharCodeClass(s);
+ if ( node.flags.min !== 0 ) {
+ return String.fromCharCode(first, last);
+ }
+ return String.fromCharCode(first+2, last+2);
+ }
+ case 64: /* T_HEXCHAR, 'HexChar' */ {
+ if (
+ node.flags.Code === '01' ||
+ node.flags.Code === '02' ||
+ node.flags.Code === '03'
+ ) {
+ return '\x00';
+ }
+ return node.flags.Char;
+ }
+ case 128: /* T_SPECIAL, 'Special' */ {
+ const flags = node.flags;
+ if (
+ flags.EndCharGroup === 1 || // dangling `]`
+ flags.EndGroup === 1 || // dangling `)`
+ flags.EndRepeats === 1 // dangling `}`
+ ) {
+ throw new Error('Unmatched bracket');
+ }
+ return flags.MatchEnd === 1 ||
+ flags.MatchStart === 1 ||
+ flags.MatchWordBoundary === 1
+ ? '\x00'
+ : '\x01';
+ }
+ case 256: /* T_CHARS, 'Characters' */ {
+ for ( let i = 0; i < node.val.length; i++ ) {
+ if ( this.firstCharCodeClass(node.val[i]) === 1 ) {
+ return '\x01';
+ }
+ }
+ return '\x00';
+ }
+ // Ranges are assumed to always involve token-related characters.
+ case 512: /* T_CHARRANGE, 'CharacterRange' */ {
+ return '\x01';
+ }
+ case 1024: /* T_STRING, 'String' */ {
+ return node.val;
+ }
+ case 2048: /* T_COMMENT, 'Comment' */ {
+ return '';
+ }
+ default:
+ break;
+ }
+ return '\x01';
+ }
+
+ static isValid(reStr) {
+ try {
+ void new RegExp(reStr);
+ if ( regexAnalyzer !== null ) {
+ void this.tokenizableStrFromNode(
+ regexAnalyzer(reStr, false).tree()
+ );
+ }
+ } catch(ex) {
+ return false;
+ }
+ return true;
+ }
+
+ static isRE2(reStr) {
+ if ( regexAnalyzer === null ) { return true; }
+ let tree;
+ try {
+ tree = regexAnalyzer(reStr, false).tree();
+ } catch(ex) {
+ return;
+ }
+ const isRE2 = node => {
+ if ( node instanceof Object === false ) { return true; }
+ if ( node.flags instanceof Object ) {
+ if ( node.flags.LookAhead === 1 ) { return false; }
+ if ( node.flags.NegativeLookAhead === 1 ) { return false; }
+ if ( node.flags.LookBehind === 1 ) { return false; }
+ if ( node.flags.NegativeLookBehind === 1 ) { return false; }
+ }
+ if ( Array.isArray(node.val) ) {
+ for ( const entry of node.val ) {
+ if ( isRE2(entry) === false ) { return false; }
+ }
+ }
+ if ( node.val instanceof Object ) {
+ return isRE2(node.val);
+ }
+ return true;
+ };
+ return isRE2(tree);
+ }
+
+ static toTokenizableStr(reStr) {
+ if ( regexAnalyzer === null ) { return ''; }
+ let s = '';
+ try {
+ s = this.tokenizableStrFromNode(
+ regexAnalyzer(reStr, false).tree()
+ );
+ } catch(ex) {
+ }
+ // Process optional sequences
+ const reOptional = /[\x02\x03]+/;
+ for (;;) {
+ const match = reOptional.exec(s);
+ if ( match === null ) { break; }
+ const left = s.slice(0, match.index);
+ const middle = match[0];
+ const right = s.slice(match.index + middle.length);
+ s = left;
+ s += this.firstCharCodeClass(right) === 1 ||
+ this.firstCharCodeClass(middle) === 1
+ ? '\x01'
+ : '\x00';
+ s += this.lastCharCodeClass(left) === 1 ||
+ this.lastCharCodeClass(middle) === 1
+ ? '\x01'
+ : '\x00';
+ s += right;
+ }
+ return s;
+ }
+ }
+
+ const preparserTokens = new Map([
+ [ 'ext_ublock', 'ublock' ],
+ [ 'ext_ubol', 'ubol' ],
+ [ 'ext_devbuild', 'devbuild' ],
+ [ 'env_chromium', 'chromium' ],
+ [ 'env_edge', 'edge' ],
+ [ 'env_firefox', 'firefox' ],
+ [ 'env_legacy', 'legacy' ],
+ [ 'env_mobile', 'mobile' ],
+ [ 'env_mv3', 'mv3' ],
+ [ 'env_safari', 'safari' ],
+ [ 'cap_html_filtering', 'html_filtering' ],
+ [ 'cap_user_stylesheet', 'user_stylesheet' ],
+ [ 'false', 'false' ],
+ // Hoping ABP-only list maintainers can at least make use of it to
+ // help non-ABP content blockers better deal with filters benefiting
+ // only ABP.
+ [ 'ext_abp', 'false' ],
+ // Compatibility with other blockers
+ // https://kb.adguard.com/en/general/how-to-create-your-own-ad-filters#adguard-specific
+ [ 'adguard', 'adguard' ],
+ [ 'adguard_app_android', 'false' ],
+ [ 'adguard_app_ios', 'false' ],
+ [ 'adguard_app_mac', 'false' ],
+ [ 'adguard_app_windows', 'false' ],
+ [ 'adguard_ext_android_cb', 'false' ],
+ [ 'adguard_ext_chromium', 'chromium' ],
+ [ 'adguard_ext_edge', 'edge' ],
+ [ 'adguard_ext_firefox', 'firefox' ],
+ [ 'adguard_ext_opera', 'chromium' ],
+ [ 'adguard_ext_safari', 'false' ],
+ ]);
+
+ const toURL = url => {
+ try {
+ return new URL(url.trim());
+ } catch (ex) {
+ }
+ };
+
+ // Useful reference:
+ // https://adguard.com/kb/general/ad-filtering/create-own-filters/#conditions-directive
+
+ class preparser {
+ static evaluateExprToken(token, env = []) {
+ const not = token.charCodeAt(0) === 0x21 /* ! */;
+ if ( not ) { token = token.slice(1); }
+ const state = preparserTokens.get(token);
+ if ( state === undefined ) { return; }
+ return state === 'false' && not || env.includes(state) !== not;
+ }
+
+ static evaluateExpr(expr, env = []) {
+ if ( expr.startsWith('(') && expr.endsWith(')') ) {
+ expr = expr.slice(1, -1);
+ }
+ const matches = Array.from(expr.matchAll(/(?:(?:&&|\|\|)\s+)?\S+/g));
+ if ( matches.length === 0 ) { return; }
+ if ( matches[0][0].startsWith('|') || matches[0][0].startsWith('&') ) { return; }
+ let result = this.evaluateExprToken(matches[0][0], env);
+ for ( let i = 1; i < matches.length; i++ ) {
+ const parts = matches[i][0].split(/ +/);
+ if ( parts.length !== 2 ) { return; }
+ const state = this.evaluateExprToken(parts[1], env);
+ if ( state === undefined ) { return; }
+ if ( parts[0] === '||' ) {
+ result = result || state;
+ } else if ( parts[0] === '&&' ) {
+ result = result && state;
+ } else {
+ return;
+ }
+ }
+ return result;
+ }
+
+ // This method returns an array of indices, corresponding to position in
+ // the content string which should alternatively be parsed and discarded.
+ static splitter(content, env = []) {
+ const reIf = /^!#(if|else|endif)\b([^\n]*)(?:[\n\r]+|$)/gm;
+ const stack = [];
+ const parts = [ 0 ];
+ let discard = false;
+
+ const shouldDiscard = ( ) => stack.some(v => v);
+
+ const begif = (startDiscard, match) => {
+ if ( discard === false && startDiscard ) {
+ parts.push(match.index);
+ discard = true;
+ }
+ stack.push(startDiscard);
+ };
+
+ const endif = match => {
+ stack.pop();
+ const stopDiscard = shouldDiscard() === false;
+ if ( discard && stopDiscard ) {
+ parts.push(match.index + match[0].length);
+ discard = false;
+ }
+ };
+
+ for (;;) {
+ const match = reIf.exec(content);
+ if ( match === null ) { break; }
+
+ switch ( match[1] ) {
+ case 'if': {
+ const startDiscard = this.evaluateExpr(match[2].trim(), env) === false;
+ begif(startDiscard, match);
+ break;
+ }
+ case 'else': {
+ if ( stack.length === 0 ) { break; }
+ const startDiscard = stack[stack.length-1] === false;
+ endif(match);
+ begif(startDiscard, match);
+ break;
+ }
+ case 'endif': {
+ endif(match);
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ parts.push(content.length);
+ return parts;
+ }
+
+ static expandIncludes(parts, env = []) {
+ const out = [];
+ const reInclude = /^!#include +(\S+)[^\n\r]*(?:[\n\r]+|$)/gm;
+ for ( const part of parts ) {
+ if ( typeof part === 'string' ) {
+ out.push(part);
+ continue;
+ }
+ if ( part instanceof Object === false ) { continue; }
+ const content = part.content;
+ const slices = this.splitter(content, env);
+ for ( let i = 0, n = slices.length - 1; i < n; i++ ) {
+ const slice = content.slice(slices[i+0], slices[i+1]);
+ if ( (i & 1) !== 0 ) {
+ out.push(slice);
+ continue;
+ }
+ let lastIndex = 0;
+ for (;;) {
+ const match = reInclude.exec(slice);
+ if ( match === null ) { break; }
+ if ( toURL(match[1]) !== undefined ) { continue; }
+ if ( match[1].indexOf('..') !== -1 ) { continue; }
+ // Compute nested list path relative to parent list path
+ const pos = part.url.lastIndexOf('/');
+ if ( pos === -1 ) { continue; }
+ const subURL = part.url.slice(0, pos + 1) + match[1].trim();
+ out.push(
+ slice.slice(lastIndex, match.index + match[0].length),
+ `! >>>>>>>> ${subURL}\n`,
+ { url: subURL },
+ `! <<<<<<<< ${subURL}\n`
+ );
+ lastIndex = reInclude.lastIndex;
+ }
+ out.push(lastIndex === 0 ? slice : slice.slice(lastIndex));
+ }
+ }
+ return out;
+ }
+
+ static prune(content, env) {
+ const parts = this.splitter(content, env);
+ const out = [];
+ for ( let i = 0, n = parts.length - 1; i < n; i += 2 ) {
+ const beg = parts[i+0];
+ const end = parts[i+1];
+ out.push(content.slice(beg, end));
+ }
+ return out.join('\n');
+ }
+
+ static getHints() {
+ const out = [];
+ const vals = new Set();
+ for ( const [ key, val ] of preparserTokens ) {
+ if ( vals.has(val) ) { continue; }
+ vals.add(val);
+ out.push(key);
+ }
+ return out;
+ }
+
+ static getTokens(env) {
+ const out = new Map();
+ for ( const [ key, val ] of preparserTokens ) {
+ out.set(key, val !== 'false' && env.includes(val));
+ }
+ return Array.from(out);
+ }
+ }
+
+ return {
+ preparser,
+ regex,
+ };
+})();
+
+/******************************************************************************/
diff --git a/src/js/static-net-filtering.js b/src/js/static-net-filtering.js
new file mode 100644
index 0000000..d1e9a70
--- /dev/null
+++ b/src/js/static-net-filtering.js
@@ -0,0 +1,5651 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* globals vAPI */
+
+'use strict';
+
+/******************************************************************************/
+
+import { queueTask, dropTask } from './tasks.js';
+import BidiTrieContainer from './biditrie.js';
+import HNTrieContainer from './hntrie.js';
+import { sparseBase64 } from './base64-custom.js';
+import { CompiledListReader } from './static-filtering-io.js';
+import * as sfp from './static-filtering-parser.js';
+
+import {
+ domainFromHostname,
+ hostnameFromNetworkURL,
+} from './uri-utils.js';
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#browser_compatibility
+//
+// This import would be best done dynamically, but since dynamic imports are
+// not supported by older browsers, for now a static import is necessary.
+import { FilteringContext } from './filtering-context.js';
+
+/******************************************************************************/
+
+// Access to a key-val store is optional and useful only for optimal
+// initialization at module load time. Probably could re-arrange code
+// to export an init() function with optimization parameters which would
+// need to be called by module clients. For now, I want modularizing with
+// minimal amount of changes.
+
+const keyvalStore = typeof vAPI !== 'undefined'
+ ? vAPI.localStorage
+ : { getItem() { return null; }, setItem() {}, removeItem() {} };
+
+/******************************************************************************/
+
+// 0fedcba9876543210
+// ||||||| | || |
+// ||||||| | || |
+// ||||||| | || |
+// ||||||| | || |
+// ||||||| | || +---- bit 0- 1: block=0, allow=1, block important=2
+// ||||||| | |+------ bit 2: unused
+// ||||||| | +------- bit 3- 4: party [0-3]
+// ||||||| +--------- bit 5- 9: type [0-31]
+// ||||||+-------------- bit 10: headers-based filters
+// |||||+--------------- bit 11: redirect filters
+// ||||+---------------- bit 12: removeparam filters
+// |||+----------------- bit 13: csp filters
+// ||+------------------ bit 14: permissions filters
+// |+------------------- bit 15: uritransform filters
+// +-------------------- bit 16: replace filters
+// TODO: bit 11-16 can be converted into 3-bit value, as these options are not
+// meant to be combined.
+
+const RealmBitsMask = 0b00000000111;
+const ActionBitsMask = 0b00000000011;
+const TypeBitsMask = 0b01111100000;
+const TypeBitsOffset = 5;
+
+const BLOCK_REALM = 0b00000000000000000;
+const ALLOW_REALM = 0b00000000000000001;
+const IMPORTANT_REALM = 0b00000000000000010;
+const BLOCKIMPORTANT_REALM = BLOCK_REALM | IMPORTANT_REALM;
+const ANYPARTY_REALM = 0b00000000000000000;
+const FIRSTPARTY_REALM = 0b00000000000001000;
+const THIRDPARTY_REALM = 0b00000000000010000;
+const ALLPARTIES_REALM = FIRSTPARTY_REALM | THIRDPARTY_REALM;
+const HEADERS_REALM = 0b00000010000000000;
+const REDIRECT_REALM = 0b00000100000000000;
+const REMOVEPARAM_REALM = 0b00001000000000000;
+const CSP_REALM = 0b00010000000000000;
+const PERMISSIONS_REALM = 0b00100000000000000;
+const URLTRANSFORM_REALM = 0b01000000000000000;
+const REPLACE_REALM = 0b10000000000000000;
+const MODIFY_REALMS = REDIRECT_REALM | CSP_REALM |
+ REMOVEPARAM_REALM | PERMISSIONS_REALM |
+ URLTRANSFORM_REALM | REPLACE_REALM;
+
+const typeNameToTypeValue = {
+ 'no_type': 0 << TypeBitsOffset,
+ 'stylesheet': 1 << TypeBitsOffset,
+ 'image': 2 << TypeBitsOffset,
+ 'object': 3 << TypeBitsOffset,
+ 'object_subrequest': 3 << TypeBitsOffset,
+ 'script': 4 << TypeBitsOffset,
+ 'fetch': 5 << TypeBitsOffset,
+ 'xmlhttprequest': 5 << TypeBitsOffset,
+ 'sub_frame': 6 << TypeBitsOffset,
+ 'font': 7 << TypeBitsOffset,
+ 'media': 8 << TypeBitsOffset,
+ 'websocket': 9 << TypeBitsOffset,
+ 'beacon': 10 << TypeBitsOffset,
+ 'ping': 10 << TypeBitsOffset,
+ 'other': 11 << TypeBitsOffset,
+ 'popup': 12 << TypeBitsOffset, // start of behavioral filtering
+ 'popunder': 13 << TypeBitsOffset,
+ 'main_frame': 14 << TypeBitsOffset, // start of 1p behavioral filtering
+ 'generichide': 15 << TypeBitsOffset,
+ 'specifichide': 16 << TypeBitsOffset,
+ 'inline-font': 17 << TypeBitsOffset,
+ 'inline-script': 18 << TypeBitsOffset,
+ 'cname': 19 << TypeBitsOffset,
+ 'webrtc': 20 << TypeBitsOffset,
+ 'unsupported': 21 << TypeBitsOffset,
+};
+
+const otherTypeBitValue = typeNameToTypeValue.other;
+
+const bitFromType = type =>
+ 1 << ((typeNameToTypeValue[type] >>> TypeBitsOffset) - 1);
+
+// All network request types to bitmap
+// bring origin to 0 (from TypeBitsOffset -- see typeNameToTypeValue)
+// left-shift 1 by the above-calculated value
+// subtract 1 to set all type bits
+const allNetworkTypesBits =
+ (1 << (otherTypeBitValue >>> TypeBitsOffset)) - 1;
+
+const allTypesBits =
+ allNetworkTypesBits |
+ 1 << (typeNameToTypeValue['popup'] >>> TypeBitsOffset) - 1 |
+ 1 << (typeNameToTypeValue['main_frame'] >>> TypeBitsOffset) - 1 |
+ 1 << (typeNameToTypeValue['inline-font'] >>> TypeBitsOffset) - 1 |
+ 1 << (typeNameToTypeValue['inline-script'] >>> TypeBitsOffset) - 1;
+const unsupportedTypeBit =
+ 1 << (typeNameToTypeValue['unsupported'] >>> TypeBitsOffset) - 1;
+
+const typeValueToTypeName = [
+ '',
+ 'stylesheet',
+ 'image',
+ 'object',
+ 'script',
+ 'xhr',
+ 'frame',
+ 'font',
+ 'media',
+ 'websocket',
+ 'ping',
+ 'other',
+ 'popup',
+ 'popunder',
+ 'document',
+ 'generichide',
+ 'specifichide',
+ 'inline-font',
+ 'inline-script',
+ 'cname',
+ '',
+ '',
+ 'webrtc',
+ 'unsupported',
+];
+
+const typeValueToDNRTypeName = [
+ '',
+ 'stylesheet',
+ 'image',
+ 'object',
+ 'script',
+ 'xmlhttprequest',
+ 'sub_frame',
+ 'font',
+ 'media',
+ 'websocket',
+ 'ping',
+ 'other',
+];
+
+// Do not change order. Compiled filter lists rely on this order being
+// consistent across sessions.
+const MODIFIER_TYPE_REDIRECT = 1;
+const MODIFIER_TYPE_REDIRECTRULE = 2;
+const MODIFIER_TYPE_REMOVEPARAM = 3;
+const MODIFIER_TYPE_CSP = 4;
+const MODIFIER_TYPE_PERMISSIONS = 5;
+const MODIFIER_TYPE_URLTRANSFORM = 6;
+const MODIFIER_TYPE_REPLACE = 7;
+
+const modifierBitsFromType = new Map([
+ [ MODIFIER_TYPE_REDIRECT, REDIRECT_REALM ],
+ [ MODIFIER_TYPE_REDIRECTRULE, REDIRECT_REALM ],
+ [ MODIFIER_TYPE_REMOVEPARAM, REMOVEPARAM_REALM ],
+ [ MODIFIER_TYPE_CSP, CSP_REALM ],
+ [ MODIFIER_TYPE_PERMISSIONS, PERMISSIONS_REALM ],
+ [ MODIFIER_TYPE_URLTRANSFORM, URLTRANSFORM_REALM ],
+ [ MODIFIER_TYPE_REPLACE, REPLACE_REALM ],
+]);
+
+const modifierTypeFromName = new Map([
+ [ 'redirect', MODIFIER_TYPE_REDIRECT ],
+ [ 'redirect-rule', MODIFIER_TYPE_REDIRECTRULE ],
+ [ 'removeparam', MODIFIER_TYPE_REMOVEPARAM ],
+ [ 'csp', MODIFIER_TYPE_CSP ],
+ [ 'permissions', MODIFIER_TYPE_PERMISSIONS ],
+ [ 'uritransform', MODIFIER_TYPE_URLTRANSFORM ],
+ [ 'replace', MODIFIER_TYPE_REPLACE ],
+]);
+
+const modifierNameFromType = new Map([
+ [ MODIFIER_TYPE_REDIRECT, 'redirect' ],
+ [ MODIFIER_TYPE_REDIRECTRULE, 'redirect-rule' ],
+ [ MODIFIER_TYPE_REMOVEPARAM, 'removeparam' ],
+ [ MODIFIER_TYPE_CSP, 'csp' ],
+ [ MODIFIER_TYPE_PERMISSIONS, 'permissions' ],
+ [ MODIFIER_TYPE_URLTRANSFORM, 'uritransform' ],
+ [ MODIFIER_TYPE_REPLACE, 'replace' ],
+]);
+
+//const typeValueFromCatBits = catBits => (catBits >>> TypeBitsOffset) & 0b11111;
+
+const MAX_TOKEN_LENGTH = 7;
+
+// Four upper bits of token hash are reserved for built-in predefined
+// token hashes, which should never end up being used when tokenizing
+// any arbitrary string.
+const NO_TOKEN_HASH = 0x50000000;
+const DOT_TOKEN_HASH = 0x10000000;
+const ANY_TOKEN_HASH = 0x20000000;
+const ANY_HTTPS_TOKEN_HASH = 0x30000000;
+const ANY_HTTP_TOKEN_HASH = 0x40000000;
+const EMPTY_TOKEN_HASH = 0xF0000000;
+const INVALID_TOKEN_HASH = 0xFFFFFFFF;
+
+/******************************************************************************/
+
+// See the following as short-lived registers, used during evaluation. They are
+// valid until the next evaluation.
+
+let $requestMethodBit = 0;
+let $requestTypeValue = 0;
+let $requestURL = '';
+let $requestURLRaw = '';
+let $requestHostname = '';
+let $docHostname = '';
+let $docDomain = '';
+let $tokenBeg = 0;
+let $patternMatchLeft = 0;
+let $patternMatchRight = 0;
+let $isBlockImportant = false;
+
+const $docEntity = {
+ entity: '',
+ last: '',
+ compute() {
+ if ( this.last !== $docHostname ) {
+ this.last = $docHostname;
+ const pos = $docDomain.indexOf('.');
+ this.entity = pos !== -1
+ ? `${$docHostname.slice(0, pos - $docDomain.length)}.*`
+ : '';
+ }
+ return this.entity;
+ },
+};
+
+const $requestEntity = {
+ entity: '',
+ last: '',
+ compute() {
+ if ( this.last !== $requestHostname ) {
+ this.last = $requestHostname;
+ const requestDomain = domainFromHostname($requestHostname);
+ const pos = requestDomain.indexOf('.');
+ this.entity = pos !== -1
+ ? `${$requestHostname.slice(0, pos - requestDomain.length)}.*`
+ : '';
+ }
+ return this.entity;
+ },
+};
+
+const $httpHeaders = {
+ init(headers) {
+ this.headers = headers;
+ this.parsed.clear();
+ },
+ reset() {
+ this.headers = [];
+ this.parsed.clear();
+ },
+ lookup(name) {
+ if ( this.parsed.size === 0 ) {
+ for ( let i = 0, n = this.headers.length; i < n; i++ ) {
+ const { name, value } = this.headers[i];
+ this.parsed.set(name, value);
+ }
+ }
+ return this.parsed.get(name);
+ },
+ headers: [],
+ parsed: new Map(),
+};
+
+/******************************************************************************/
+
+// Local helpers
+
+const restrSeparator = '(?:[^%.0-9a-z_-]|$)';
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
+const reEscape = /[.*+?^${}()|[\]\\]/g;
+
+// Convert a plain string (devoid of special characters) into a regex.
+const restrFromPlainPattern = s => s.replace(reEscape, '\\$&');
+
+const restrFromGenericPattern = function(s, anchor = 0) {
+ let reStr = s.replace(restrFromGenericPattern.rePlainChars, '\\$&')
+ .replace(restrFromGenericPattern.reSeparators, restrSeparator)
+ .replace(restrFromGenericPattern.reDanglingAsterisks, '')
+ .replace(restrFromGenericPattern.reAsterisks, '\\S*?');
+ if ( anchor & 0b100 ) {
+ reStr = (
+ reStr.startsWith('\\.') ?
+ restrFromGenericPattern.restrHostnameAnchor2 :
+ restrFromGenericPattern.restrHostnameAnchor1
+ ) + reStr;
+ } else if ( anchor & 0b010 ) {
+ reStr = '^' + reStr;
+ }
+ if ( anchor & 0b001 ) {
+ reStr += '$';
+ }
+ return reStr;
+};
+restrFromGenericPattern.rePlainChars = /[.+?${}()|[\]\\]/g;
+restrFromGenericPattern.reSeparators = /\^/g;
+restrFromGenericPattern.reDanglingAsterisks = /^\*+|\*+$/g;
+restrFromGenericPattern.reAsterisks = /\*+/g;
+restrFromGenericPattern.restrHostnameAnchor1 = '^[a-z-]+://(?:[^/?#]+\\.)?';
+restrFromGenericPattern.restrHostnameAnchor2 = '^[a-z-]+://(?:[^/?#]+)?';
+
+/******************************************************************************/
+
+class LogData {
+ constructor(categoryBits, tokenHash, iunit) {
+ this.result = 0;
+ this.source = 'static';
+ this.tokenHash = tokenHash;
+ if ( iunit === 0 ) {
+ this.raw = this.regex = '';
+ return;
+ }
+ this.result = (categoryBits & ALLOW_REALM) === 0 ? 1 : 2;
+ const pattern = [];
+ const regex = [];
+ const options = [];
+ const denyallow = [];
+ const fromDomains = [];
+ const toDomains = [];
+ const logData = {
+ pattern,
+ regex,
+ denyallow,
+ fromDomains,
+ toDomains,
+ options,
+ isRegex: false,
+ };
+ filterLogData(iunit, logData);
+ if ( (categoryBits & THIRDPARTY_REALM) !== 0 ) {
+ logData.options.unshift('3p');
+ } else if ( (categoryBits & FIRSTPARTY_REALM) !== 0 ) {
+ logData.options.unshift('1p');
+ }
+ const type = categoryBits & TypeBitsMask;
+ if ( type !== 0 ) {
+ logData.options.unshift(typeValueToTypeName[type >>> TypeBitsOffset]);
+ }
+ let raw = logData.pattern.join('');
+ if (
+ logData.isRegex === false &&
+ raw.charCodeAt(0) === 0x2F /* '/' */ &&
+ raw.charCodeAt(raw.length - 1) === 0x2F /* '/' */
+ ) {
+ raw += '*';
+ }
+ if ( (categoryBits & ALLOW_REALM) !== 0 ) {
+ raw = '@@' + raw;
+ }
+ if ( denyallow.length !== 0 ) {
+ options.push(`denyallow=${denyallow.join('|')}`);
+ }
+ if ( fromDomains.length !== 0 ) {
+ options.push(`from=${fromDomains.join('|')}`);
+ }
+ if ( toDomains.length !== 0 ) {
+ options.push(`to=${toDomains.join('|')}`);
+ }
+ if ( options.length !== 0 ) {
+ raw += '$' + options.join(',');
+ }
+ this.raw = raw;
+ this.regex = logData.regex.join('');
+ }
+ isUntokenized() {
+ return this.tokenHash === NO_TOKEN_HASH;
+ }
+ isPureHostname() {
+ return this.tokenHash === DOT_TOKEN_HASH;
+ }
+}
+
+/******************************************************************************/
+
+const charClassMap = new Uint32Array(128);
+const CHAR_CLASS_SEPARATOR = 0b00000001;
+
+{
+ const reSeparators = /[^\w%.-]/;
+ for ( let i = 0; i < 128; i++ ) {
+ if ( reSeparators.test(String.fromCharCode(i)) ) {
+ charClassMap[i] |= CHAR_CLASS_SEPARATOR;
+ }
+ }
+}
+
+const isSeparatorChar = c => (charClassMap[c] & CHAR_CLASS_SEPARATOR) !== 0;
+
+/******************************************************************************/
+
+const FILTER_DATA_PAGE_SIZE = 65536;
+
+const roundToFilterDataPageSize =
+ len => (len + FILTER_DATA_PAGE_SIZE-1) & ~(FILTER_DATA_PAGE_SIZE-1);
+
+let filterData = new Int32Array(FILTER_DATA_PAGE_SIZE * 5);
+let filterDataWritePtr = 2;
+const filterDataGrow = len => {
+ if ( len <= filterData.length ) { return; }
+ const newLen = roundToFilterDataPageSize(len);
+ const newBuf = new Int32Array(newLen);
+ newBuf.set(filterData);
+ filterData = newBuf;
+};
+const filterDataShrink = ( ) => {
+ const newLen = Math.max(
+ roundToFilterDataPageSize(filterDataWritePtr),
+ FILTER_DATA_PAGE_SIZE
+ );
+ if ( newLen >= filterData.length ) { return; }
+ const newBuf = new Int32Array(newLen);
+ newBuf.set(filterData.subarray(0, filterDataWritePtr));
+ filterData = newBuf;
+};
+const filterDataAlloc = (...args) => {
+ const len = args.length;
+ const idata = filterDataAllocLen(len);
+ for ( let i = 0; i < len; i++ ) {
+ filterData[idata+i] = args[i];
+ }
+ return idata;
+};
+const filterDataAllocLen = len => {
+ const idata = filterDataWritePtr;
+ filterDataWritePtr += len;
+ if ( filterDataWritePtr > filterData.length ) {
+ filterDataGrow(filterDataWritePtr);
+ }
+ return idata;
+};
+const filterSequenceAdd = (a, b) => {
+ const iseq = filterDataAllocLen(2);
+ filterData[iseq+0] = a;
+ filterData[iseq+1] = b;
+ return iseq;
+};
+const filterDataReset = ( ) => {
+ filterData.fill(0);
+ filterDataWritePtr = 2;
+};
+const filterDataToSelfie = ( ) => {
+ return JSON.stringify(Array.from(filterData.subarray(0, filterDataWritePtr)));
+};
+const filterDataFromSelfie = selfie => {
+ if ( typeof selfie !== 'string' || selfie === '' ) { return false; }
+ const data = JSON.parse(selfie);
+ if ( Array.isArray(data) === false ) { return false; }
+ filterDataGrow(data.length);
+ filterDataWritePtr = data.length;
+ filterData.set(data);
+ filterDataShrink();
+ return true;
+};
+
+const filterRefs = [ null ];
+let filterRefsWritePtr = 1;
+const filterRefAdd = ref => {
+ const i = filterRefsWritePtr;
+ filterRefs[i] = ref;
+ filterRefsWritePtr += 1;
+ return i;
+};
+const filterRefsReset = ( ) => {
+ filterRefs.fill(null);
+ filterRefsWritePtr = 1;
+};
+const filterRefsToSelfie = ( ) => {
+ const refs = [];
+ for ( let i = 0; i < filterRefsWritePtr; i++ ) {
+ const v = filterRefs[i];
+ if ( v instanceof RegExp ) {
+ refs.push({ t: 1, s: v.source, f: v.flags });
+ continue;
+ }
+ if ( Array.isArray(v) ) {
+ refs.push({ t: 2, v });
+ continue;
+ }
+ if ( typeof v !== 'object' || v === null ) {
+ refs.push({ t: 0, v });
+ continue;
+ }
+ const out = Object.create(null);
+ for ( const prop of Object.keys(v) ) {
+ const value = v[prop];
+ out[prop] = prop.startsWith('$')
+ ? (typeof value === 'string' ? '' : null)
+ : value;
+ }
+ refs.push({ t: 3, v: out });
+ }
+ return JSON.stringify(refs);
+};
+const filterRefsFromSelfie = selfie => {
+ if ( typeof selfie !== 'string' || selfie === '' ) { return false; }
+ const refs = JSON.parse(selfie);
+ if ( Array.isArray(refs) === false ) { return false; }
+ for ( let i = 0; i < refs.length; i++ ) {
+ const v = refs[i];
+ switch ( v.t ) {
+ case 0:
+ case 2:
+ case 3:
+ filterRefs[i] = v.v;
+ break;
+ case 1:
+ filterRefs[i] = new RegExp(v.s, v.f);
+ break;
+ default:
+ throw new Error('Unknown filter reference!');
+ }
+ }
+ filterRefsWritePtr = refs.length;
+ return true;
+};
+
+/******************************************************************************/
+
+const origHNTrieContainer = new HNTrieContainer();
+const destHNTrieContainer = new HNTrieContainer();
+
+/******************************************************************************/
+
+const bidiTrieMatchExtra = (l, r, ix) => {
+ for (;;) {
+ $patternMatchLeft = l;
+ $patternMatchRight = r;
+ const iu = filterData[ix+0];
+ if ( filterMatch(iu) ) { return iu; }
+ ix = filterData[ix+1];
+ if ( ix === 0 ) { break; }
+ }
+ return 0;
+};
+
+const bidiTrie = new BidiTrieContainer(bidiTrieMatchExtra);
+
+const bidiTriePrime = ( ) => {
+ bidiTrie.reset(keyvalStore.getItem('SNFE.bidiTrie'));
+};
+
+const bidiTrieOptimize = (shrink = false) => {
+ keyvalStore.setItem('SNFE.bidiTrie', bidiTrie.optimize(shrink));
+};
+
+/*******************************************************************************
+
+ Each filter class will register itself in the map.
+
+ IMPORTANT: any change which modifies the mapping will have to be
+ reflected with µBlock.systemSettings.compiledMagic.
+
+*/
+
+const filterClasses = [];
+const filterArgsToUnit = new Map();
+let filterClassIdGenerator = 0;
+
+const registerFilterClass = fc => {
+ const fid = filterClassIdGenerator++;
+ fc.fid = fid;
+ fc.fidstr = `${fid}`;
+ filterClasses[fid] = fc;
+};
+
+const filterFromCompiled = args => {
+ const fc = filterClasses[args[0]];
+ const keygen = fc.keyFromArgs;
+ if ( keygen === undefined ) {
+ return fc.fromCompiled(args);
+ }
+ const key = `${fc.fidstr} ${(keygen(args) || '')}`;
+ let idata = filterArgsToUnit.get(key);
+ if ( idata !== undefined ) { return idata; }
+ idata = fc.fromCompiled(args);
+ filterArgsToUnit.set(key, idata);
+ return idata;
+};
+
+const filterGetClass = idata => {
+ return filterClasses[filterData[idata+0]];
+};
+
+const filterMatch = idata => filterClasses[filterData[idata+0]].match(idata);
+
+const filterHasOriginHit = idata => {
+ const fc = filterClasses[filterData[idata+0]];
+ return fc.hasOriginHit !== undefined && fc.hasOriginHit(idata);
+};
+
+const filterGetDomainOpt = (idata, out) => {
+ const fc = filterClasses[filterData[idata+0]];
+ if ( fc.getDomainOpt === undefined ) { return; }
+ const fromOpt = fc.getDomainOpt(idata);
+ if ( out === undefined ) { return fromOpt; }
+ out.push(fromOpt);
+};
+
+const filterGetRegexPattern = (idata, out) => {
+ const fc = filterClasses[filterData[idata+0]];
+ if ( fc.hasRegexPattern === undefined ) { return; }
+ const reStr = fc.getRegexPattern(idata);
+ if ( out === undefined ) { return reStr; }
+ out.push(reStr);
+};
+
+const filterIsBidiTrieable = idata => {
+ const fc = filterClasses[filterData[idata+0]];
+ if ( fc.isBidiTrieable === undefined ) { return false; }
+ return fc.isBidiTrieable(idata) === true;
+};
+
+const filterToBidiTrie = idata => {
+ const fc = filterClasses[filterData[idata+0]];
+ if ( fc.toBidiTrie === undefined ) { return; }
+ return fc.toBidiTrie(idata);
+};
+
+const filterMatchAndFetchModifiers = (idata, env) => {
+ const fc = filterClasses[filterData[idata+0]];
+ if ( fc.matchAndFetchModifiers === undefined ) { return; }
+ return fc.matchAndFetchModifiers(idata, env);
+};
+
+const filterGetModifierType = idata => {
+ const fc = filterClasses[filterData[idata+0]];
+ if ( fc.getModifierType === undefined ) { return; }
+ return fc.getModifierType(idata);
+};
+
+const filterLogData = (idata, details) => {
+ const fc = filterClasses[filterData[idata+0]];
+ if ( fc.logData === undefined ) { return; }
+ fc.logData(idata, details);
+};
+
+const filterDumpInfo = (idata) => {
+ const fc = filterGetClass(idata);
+ if ( fc.dumpInfo === undefined ) { return; }
+ return fc.dumpInfo(idata);
+};
+
+const dnrRuleFromCompiled = (args, rule) => {
+ const fc = filterClasses[args[0]];
+ if ( fc.dnrFromCompiled === undefined ) { return false; }
+ fc.dnrFromCompiled(args, rule);
+ return true;
+};
+
+const dnrAddRuleError = (rule, msg) => {
+ rule._error = rule._error || [];
+ rule._error.push(msg);
+};
+
+const dnrAddRuleWarning = (rule, msg) => {
+ rule._warning = rule._warning || [];
+ rule._warning.push(msg);
+};
+
+/*******************************************************************************
+
+ Filter classes
+
+ Pattern:
+ FilterPatternAny
+ FilterPatternPlain
+ FilterPatternPlain1
+ FilterPatternPlainX
+ FilterPatternGeneric
+ FilterRegex
+ FilterPlainTrie
+ FilterHostnameDict
+
+ Pattern modifiers:
+ FilterAnchorHnLeft
+ FilterAnchorHn
+ FilterAnchorRight
+ FilterAnchorLeft
+ FilterTrailingSeparator
+
+ Context, immediate:
+ FilterOriginHit
+ FilterOriginMiss
+ FilterOriginEntityMiss
+ FilterOriginEntityHit
+ FilterOriginHitSet
+ FilterOriginMissSet
+ FilterJustOrigin
+ FilterHTTPJustOrigin
+ FilterHTTPSJustOrigin
+
+ Other options:
+ FilterDenyAllow
+ FilterImportant
+ FilterNotType
+ FilterStrictParty
+ FilterModifier
+
+ Collection:
+ FilterCollection
+ FilterCompositeAll
+ FilterBucket
+ FilterBucketIf
+ FilterBucketIfOriginHits
+ FilterBucketIfRegexHits
+ FilterDomainHitAny
+
+ A single filter can be made of many parts, in which case FilterCompositeAll
+ is used to hold all the parts, and where all the parts must be a match in
+ order for the filter to be a match.
+
+**/
+
+/******************************************************************************/
+
+class FilterPatternAny {
+ static match() {
+ return true;
+ }
+
+ static compile() {
+ return [ FilterPatternAny.fid ];
+ }
+
+ static fromCompiled(args) {
+ return filterDataAlloc(args[0]);
+ }
+
+ static keyFromArgs() {
+ }
+
+ static logData(idata, details) {
+ details.pattern.push('*');
+ details.regex.push('^');
+ }
+}
+
+registerFilterClass(FilterPatternAny);
+
+/******************************************************************************/
+
+class FilterImportant {
+ static match() {
+ return ($isBlockImportant = true);
+ }
+
+ static compile() {
+ return [ FilterImportant.fid ];
+ }
+
+ static fromCompiled(args) {
+ return filterDataAlloc(args[0]);
+ }
+
+ static dnrFromCompiled(args, rule) {
+ rule.priority = (rule.priority || 1) + 10;
+ }
+
+ static keyFromArgs() {
+ }
+
+ static logData(idata, details) {
+ details.options.unshift('important');
+ }
+}
+
+registerFilterClass(FilterImportant);
+
+/******************************************************************************/
+
+class FilterPatternPlain {
+ static isBidiTrieable(idata) {
+ return filterData[idata+2] <= 255;
+ }
+
+ static toBidiTrie(idata) {
+ return {
+ i: filterData[idata+1],
+ n: filterData[idata+2],
+ itok: filterData[idata+3],
+ };
+ }
+
+ static match(idata) {
+ const left = $tokenBeg;
+ const n = filterData[idata+2];
+ if (
+ bidiTrie.startsWith(
+ left,
+ bidiTrie.haystackLen,
+ filterData[idata+1],
+ n
+ ) === 0
+ ) {
+ return false;
+ }
+ $patternMatchLeft = left;
+ $patternMatchRight = left + n;
+ return true;
+ }
+
+ static compile(details) {
+ const { tokenBeg } = details;
+ if ( tokenBeg === 0 ) {
+ return [ FilterPatternPlain.fid, details.pattern, 0 ];
+ }
+ if ( tokenBeg === 1 ) {
+ return [ FilterPatternPlain1.fid, details.pattern, 1 ];
+ }
+ return [ FilterPatternPlainX.fid, details.pattern, tokenBeg ];
+ }
+
+ static fromCompiled(args) {
+ const idata = filterDataAllocLen(4);
+ filterData[idata+0] = args[0]; // fid
+ filterData[idata+1] = bidiTrie.storeString(args[1]); // i
+ filterData[idata+2] = args[1].length; // n
+ filterData[idata+3] = args[2]; // tokenBeg
+ return idata;
+ }
+
+ static dnrFromCompiled(args, rule) {
+ if ( rule.condition === undefined ) {
+ rule.condition = {};
+ } else if ( rule.condition.urlFilter !== undefined ) {
+ dnrAddRuleError(rule, `urlFilter already defined: ${rule.condition.urlFilter}`);
+ }
+ rule.condition.urlFilter = args[1];
+ }
+
+ static logData(idata, details) {
+ const s = bidiTrie.extractString(
+ filterData[idata+1],
+ filterData[idata+2]
+ );
+ details.pattern.push(s);
+ details.regex.push(restrFromPlainPattern(s));
+ // https://github.com/gorhill/uBlock/issues/3037
+ // Make sure the logger reflects accurately internal match, taking
+ // into account MAX_TOKEN_LENGTH.
+ if ( /^[0-9a-z%]{1,6}$/i.exec(s.slice(filterData[idata+3])) !== null ) {
+ details.regex.push('(?![0-9A-Za-z%])');
+ }
+ }
+
+ static dumpInfo(idata) {
+ const pattern = bidiTrie.extractString(
+ filterData[idata+1],
+ filterData[idata+2]
+ );
+ return `${pattern} ${filterData[idata+3]}`;
+ }
+}
+
+FilterPatternPlain.isPatternPlain = true;
+
+registerFilterClass(FilterPatternPlain);
+
+
+class FilterPatternPlain1 extends FilterPatternPlain {
+ static match(idata) {
+ const left = $tokenBeg - 1;
+ const n = filterData[idata+2];
+ if (
+ bidiTrie.startsWith(
+ left,
+ bidiTrie.haystackLen,
+ filterData[idata+1],
+ n
+ ) === 0
+ ) {
+ return false;
+ }
+ $patternMatchLeft = left;
+ $patternMatchRight = left + n;
+ return true;
+ }
+}
+
+registerFilterClass(FilterPatternPlain1);
+
+
+class FilterPatternPlainX extends FilterPatternPlain {
+ static match(idata) {
+ const left = $tokenBeg - filterData[idata+3];
+ const n = filterData[idata+2];
+ if (
+ bidiTrie.startsWith(
+ left,
+ bidiTrie.haystackLen,
+ filterData[idata+1],
+ n
+ ) === 0
+ ) {
+ return false;
+ }
+ $patternMatchLeft = left;
+ $patternMatchRight = left + n;
+ return true;
+ }
+}
+
+registerFilterClass(FilterPatternPlainX);
+
+/******************************************************************************/
+
+class FilterPatternGeneric {
+ static hasRegexPattern() {
+ return true;
+ }
+
+ static getRegexPattern(idata) {
+ return restrFromGenericPattern(
+ bidiTrie.extractString(
+ filterData[idata+1],
+ filterData[idata+2]
+ ),
+ filterData[idata+3]
+ );
+ }
+
+ static match(idata) {
+ const refs = filterRefs[filterData[idata+4]];
+ if ( refs.$re === null ) {
+ refs.$re = new RegExp(this.getRegexPattern(idata));
+ }
+ return refs.$re.test($requestURL);
+ }
+
+ static compile(details) {
+ const out = [
+ FilterPatternGeneric.fid,
+ details.pattern,
+ details.anchor,
+ ];
+ details.anchor = 0;
+ return out;
+ }
+
+ static fromCompiled(args) {
+ const idata = filterDataAllocLen(5);
+ filterData[idata+0] = args[0]; // fid
+ filterData[idata+1] = bidiTrie.storeString(args[1]); // i
+ filterData[idata+2] = args[1].length; // n
+ filterData[idata+3] = args[2]; // anchor
+ filterData[idata+4] = filterRefAdd({ $re: null });
+ return idata;
+ }
+
+ static dnrFromCompiled(args, rule) {
+ if ( rule.condition === undefined ) {
+ rule.condition = {};
+ } else if ( rule.condition.urlFilter !== undefined ) {
+ dnrAddRuleError(rule, `urlFilter already defined: ${rule.condition.urlFilter}`);
+ }
+ let pattern = args[1];
+ if ( args[2] & 0b100 ) {
+ if ( pattern.startsWith('.') ) {
+ pattern = `*${pattern}`;
+ }
+ pattern = `||${pattern}`;
+ } else if ( args[2] & 0b010 ) {
+ pattern = `|${pattern}`;
+ }
+ if ( args[2] & 0b001 ) {
+ pattern += '|';
+ }
+ rule.condition.urlFilter = pattern;
+ }
+
+ static keyFromArgs(args) {
+ return `${args[1]}\t${args[2]}`;
+ }
+
+ static logData(idata, details) {
+ details.pattern.length = 0;
+ const anchor = filterData[idata+3];
+ if ( (anchor & 0b100) !== 0 ) {
+ details.pattern.push('||');
+ } else if ( (anchor & 0b010) !== 0 ) {
+ details.pattern.push('|');
+ }
+ const s = bidiTrie.extractString(
+ filterData[idata+1],
+ filterData[idata+2]
+ );
+ details.pattern.push(s);
+ if ( (anchor & 0b001) !== 0 ) {
+ details.pattern.push('|');
+ }
+ details.regex.length = 0;
+ details.regex.push(restrFromGenericPattern(s, anchor & ~0b100));
+ }
+
+ static dumpInfo(idata) {
+ return bidiTrie.extractString(
+ filterData[idata+1],
+ filterData[idata+2]
+ );
+ }
+}
+
+FilterPatternGeneric.isSlow = true;
+
+registerFilterClass(FilterPatternGeneric);
+
+/******************************************************************************/
+
+class FilterAnchorHnLeft {
+ static match(idata) {
+ const len = $requestHostname.length;
+ const haystackCodes = bidiTrie.haystack;
+ let lastBeg = filterData[idata+2];
+ let lastEnd = filterData[idata+3];
+ if (
+ len !== filterData[idata+1] ||
+ lastBeg === -1 ||
+ haystackCodes[lastBeg-3] !== 0x3A /* ':' */ ||
+ haystackCodes[lastBeg-2] !== 0x2F /* '/' */ ||
+ haystackCodes[lastBeg-1] !== 0x2F /* '/' */
+ ) {
+ lastBeg = len !== 0 ? haystackCodes.indexOf(0x3A) : -1;
+ if ( lastBeg !== -1 ) {
+ if (
+ lastBeg >= bidiTrie.haystackLen ||
+ haystackCodes[lastBeg+1] !== 0x2F ||
+ haystackCodes[lastBeg+2] !== 0x2F
+ ) {
+ lastBeg = -1;
+ }
+ }
+ if ( lastBeg !== -1 ) {
+ lastBeg += 3;
+ lastEnd = lastBeg + len;
+ } else {
+ lastEnd = -1;
+ }
+ filterData[idata+1] = len;
+ filterData[idata+2] = lastBeg;
+ filterData[idata+3] = lastEnd;
+ }
+ const left = $patternMatchLeft;
+ return left < lastEnd && (
+ left === lastBeg ||
+ left > lastBeg && haystackCodes[left-1] === 0x2E /* '.' */
+ );
+ }
+
+ static compile() {
+ return [ FilterAnchorHnLeft.fid ];
+ }
+
+ static fromCompiled(args) {
+ const idata = filterDataAllocLen(4);
+ filterData[idata+0] = args[0]; // fid
+ filterData[idata+1] = 0; // lastLen
+ filterData[idata+2] = -1; // lastBeg
+ filterData[idata+3] = -1; // lastEnd
+ return idata;
+ }
+
+ static dnrFromCompiled(args, rule) {
+ rule.condition.urlFilter = `||${rule.condition.urlFilter}`;
+ }
+
+ static keyFromArgs() {
+ }
+
+ static logData(idata, details) {
+ details.pattern.unshift('||');
+ }
+}
+
+registerFilterClass(FilterAnchorHnLeft);
+
+/******************************************************************************/
+
+class FilterAnchorHn extends FilterAnchorHnLeft {
+ static match(idata) {
+ return super.match(idata) && filterData[idata+3] === $patternMatchRight;
+ }
+
+ static compile() {
+ return [ FilterAnchorHn.fid ];
+ }
+
+ static dnrFromCompiled(args, rule) {
+ rule.condition.requestDomains = [ rule.condition.urlFilter ];
+ rule.condition.urlFilter = undefined;
+ }
+
+ static keyFromArgs() {
+ }
+
+ static logData(idata, details) {
+ super.logData(idata, details);
+ details.pattern.push('^');
+ details.regex.push('\\.?', restrSeparator);
+ }
+}
+
+registerFilterClass(FilterAnchorHn);
+
+/******************************************************************************/
+
+class FilterAnchorLeft {
+ static match() {
+ return $patternMatchLeft === 0;
+ }
+
+ static compile() {
+ return [ FilterAnchorLeft.fid ];
+ }
+
+ static fromCompiled(args) {
+ return filterDataAlloc(args[0]);
+ }
+
+ static dnrFromCompiled(args, rule) {
+ rule.condition.urlFilter = `|${rule.condition.urlFilter}`;
+ }
+
+ static keyFromArgs() {
+ }
+
+ static logData(idata, details) {
+ details.pattern.unshift('|');
+ details.regex.unshift('^');
+ }
+}
+
+registerFilterClass(FilterAnchorLeft);
+
+/******************************************************************************/
+
+class FilterAnchorRight {
+ static match() {
+ return $patternMatchRight === $requestURL.length;
+ }
+
+ static compile() {
+ return [ FilterAnchorRight.fid ];
+ }
+
+ static fromCompiled(args) {
+ return filterDataAlloc(args[0]);
+ }
+
+ static dnrFromCompiled(args, rule) {
+ rule.condition.urlFilter = `${rule.condition.urlFilter}|`;
+ }
+
+ static keyFromArgs() {
+ }
+
+ static logData(idata, details) {
+ details.pattern.push('|');
+ details.regex.push('$');
+ }
+}
+
+registerFilterClass(FilterAnchorRight);
+
+/******************************************************************************/
+
+class FilterTrailingSeparator {
+ static match() {
+ if ( $patternMatchRight === $requestURL.length ) { return true; }
+ if ( isSeparatorChar(bidiTrie.haystack[$patternMatchRight]) ) {
+ $patternMatchRight += 1;
+ return true;
+ }
+ return false;
+ }
+
+ static compile() {
+ return [ FilterTrailingSeparator.fid ];
+ }
+
+ static fromCompiled(args) {
+ return filterDataAlloc(args[0]);
+ }
+
+ static dnrFromCompiled(args, rule) {
+ rule.condition.urlFilter = `${rule.condition.urlFilter}^`;
+ }
+
+ static keyFromArgs() {
+ }
+
+ static logData(idata, details) {
+ details.pattern.push('^');
+ details.regex.push(restrSeparator);
+ }
+}
+
+registerFilterClass(FilterTrailingSeparator);
+
+/******************************************************************************/
+
+class FilterRegex {
+ static hasRegexPattern() {
+ return true;
+ }
+
+ static getRegexPattern(idata) {
+ return bidiTrie.extractString(
+ filterData[idata+1],
+ filterData[idata+2]
+ );
+ }
+
+ static match(idata) {
+ const refs = filterRefs[filterData[idata+4]];
+ if ( refs.$re === null ) {
+ refs.$re = new RegExp(
+ this.getRegexPattern(idata),
+ filterData[idata+3] === 0 ? 'i' : ''
+ );
+ }
+ if ( refs.$re.test($requestURLRaw) === false ) { return false; }
+ $patternMatchLeft = $requestURLRaw.search(refs.$re);
+ return true;
+ }
+
+ static compile(details) {
+ return [
+ FilterRegex.fid,
+ details.pattern,
+ details.patternMatchCase ? 1 : 0
+ ];
+ }
+
+ static fromCompiled(args) {
+ const idata = filterDataAllocLen(5);
+ filterData[idata+0] = args[0]; // fid
+ filterData[idata+1] = bidiTrie.storeString(args[1]); // i
+ filterData[idata+2] = args[1].length; // n
+ filterData[idata+3] = args[2]; // match-case
+ filterData[idata+4] = filterRefAdd({ $re: null });
+ return idata;
+ }
+
+ static dnrFromCompiled(args, rule) {
+ if ( rule.condition === undefined ) {
+ rule.condition = {};
+ }
+ if ( sfp.utils.regex.isRE2(args[1]) === false ) {
+ dnrAddRuleError(rule, `regexFilter is not RE2-compatible: ${args[1]}`);
+ }
+ rule.condition.regexFilter = args[1];
+ if ( args[2] === 1 ) {
+ rule.condition.isUrlFilterCaseSensitive = true;
+ }
+ }
+
+ static keyFromArgs(args) {
+ return `${args[1]}\t${args[2]}`;
+ }
+
+ static logData(idata, details) {
+ const s = bidiTrie.extractString(
+ filterData[idata+1],
+ filterData[idata+2]
+ );
+ details.pattern.push('/', s, '/');
+ details.regex.push(s);
+ details.isRegex = true;
+ if ( filterData[idata+3] !== 0 ) {
+ details.options.push('match-case');
+ }
+ }
+
+ static dumpInfo(idata) {
+ return [
+ '/',
+ bidiTrie.extractString(
+ filterData[idata+1],
+ filterData[idata+2]
+ ),
+ '/',
+ filterData[idata+3] !== 0 ? ' (match-case)' : '',
+ ].join('');
+ }
+}
+
+FilterRegex.isSlow = true;
+
+registerFilterClass(FilterRegex);
+
+/******************************************************************************/
+
+class FilterMethod {
+ static match(idata) {
+ if ( $requestMethodBit === 0 ) { return false; }
+ const methodBits = filterData[idata+1];
+ const notMethodBits = filterData[idata+2];
+ return (methodBits !== 0 && ($requestMethodBit & methodBits) !== 0) ||
+ (notMethodBits !== 0 && ($requestMethodBit & notMethodBits) === 0);
+ }
+
+ static compile(details) {
+ return [ FilterMethod.fid, details.methodBits, details.notMethodBits ];
+ }
+
+ static fromCompiled(args) {
+ const idata = filterDataAllocLen(3);
+ filterData[idata+0] = args[0]; // fid
+ filterData[idata+1] = args[1]; // methodBits
+ filterData[idata+2] = args[2]; // notMethodBits
+ return idata;
+ }
+
+ static dnrFromCompiled(args, rule) {
+ rule.condition = rule.condition || {};
+ const rc = rule.condition;
+ let methodBits = args[1];
+ let notMethodBits = args[2];
+ if ( methodBits !== 0 && rc.requestMethods === undefined ) {
+ rc.requestMethods = [];
+ }
+ if ( notMethodBits !== 0 && rc.excludedRequestMethods === undefined ) {
+ rc.excludedRequestMethods = [];
+ }
+ for ( let i = 1; methodBits !== 0 || notMethodBits !== 0; i++ ) {
+ const bit = 1 << i;
+ const methodName = FilteringContext.getMethodName(bit);
+ if ( (methodBits & bit) !== 0 ) {
+ methodBits &= ~bit;
+ rc.requestMethods.push(methodName);
+ } else if ( (notMethodBits & bit) !== 0 ) {
+ notMethodBits &= ~bit;
+ rc.excludedRequestMethods.push(methodName);
+ }
+ }
+ }
+
+ static keyFromArgs(args) {
+ return `${args[1]} ${args[2]}`;
+ }
+
+ static logData(idata, details) {
+ const methods = [];
+ let methodBits = filterData[idata+1];
+ let notMethodBits = filterData[idata+2];
+ for ( let i = 0; methodBits !== 0 || notMethodBits !== 0; i++ ) {
+ const bit = 1 << i;
+ const methodName = FilteringContext.getMethodName(bit);
+ if ( (methodBits & bit) !== 0 ) {
+ methodBits &= ~bit;
+ methods.push(methodName);
+ } else if ( (notMethodBits & bit) !== 0 ) {
+ notMethodBits &= ~bit;
+ methods.push(`~${methodName}`);
+ }
+ }
+ details.options.push(`method=${methods.join('|')}`);
+ }
+
+ static dumpInfo(idata) {
+ return `0b${filterData[idata+1].toString(2)} 0b${filterData[idata+2].toString(2)}`;
+ }
+}
+
+registerFilterClass(FilterMethod);
+
+/******************************************************************************/
+
+// stylesheet: 1 => bit 0
+// image: 2 => bit 1
+// object: 3 => bit 2
+// script: 4 => bit 3
+// ...
+
+class FilterNotType {
+ static match(idata) {
+ return $requestTypeValue !== 0 &&
+ (filterData[idata+1] & (1 << ($requestTypeValue - 1))) === 0;
+ }
+
+ static compile(details) {
+ return [ FilterNotType.fid, details.notTypeBits ];
+ }
+
+ static fromCompiled(args) {
+ const idata = filterDataAllocLen(2);
+ filterData[idata+0] = args[0]; // fid
+ filterData[idata+1] = args[1]; // notTypeBits
+ return idata;
+ }
+
+ static dnrFromCompiled(args, rule) {
+ rule.condition = rule.condition || {};
+ const rc = rule.condition;
+ if ( rc.excludedResourceTypes === undefined ) {
+ rc.excludedResourceTypes = [ 'main_frame' ];
+ }
+ let bits = args[1];
+ for ( let i = 1; bits !== 0 && i < typeValueToDNRTypeName.length; i++ ) {
+ const bit = 1 << (i - 1);
+ if ( (bits & bit) === 0 ) { continue; }
+ bits &= ~bit;
+ const type = typeValueToDNRTypeName[i];
+ if ( type === undefined ) { continue; }
+ if ( rc.excludedResourceTypes.includes(type) ) { continue; }
+ rc.excludedResourceTypes.push(type);
+ }
+ }
+
+ static keyFromArgs(args) {
+ return `${args[1]}`;
+ }
+
+ static logData(idata, details) {
+ let bits = filterData[idata+1];
+ for ( let i = 1; bits !== 0 && i < typeValueToTypeName.length; i++ ) {
+ const bit = 1 << (i - 1);
+ if ( (bits & bit) === 0 ) { continue; }
+ bits &= ~bit;
+ details.options.push(`~${typeValueToTypeName[i]}`);
+ }
+ }
+
+ static dumpInfo(idata) {
+ return `0b${filterData[idata+1].toString(2)}`;
+ }
+}
+
+registerFilterClass(FilterNotType);
+
+/******************************************************************************/
+
+// A helper class to parse `domain=` option.
+
+class DomainOptIterator {
+ constructor(domainOpt) {
+ this.reset(domainOpt);
+ }
+ reset(domainOpt) {
+ this.domainOpt = domainOpt;
+ this.i = 0;
+ this.value = undefined;
+ this.done = false;
+ return this;
+ }
+ next() {
+ if ( this.i === -1 ) {
+ this.domainOpt = '';
+ this.value = undefined;
+ this.done = true;
+ return this;
+ }
+ const pos = this.domainOpt.indexOf('|', this.i);
+ if ( pos !== -1 ) {
+ this.value = this.domainOpt.slice(this.i, pos);
+ this.i = pos + 1;
+ } else {
+ this.value = this.domainOpt.slice(this.i);
+ this.i = -1;
+ }
+ return this;
+ }
+ [Symbol.iterator]() {
+ return this;
+ }
+}
+
+// A helper instance to reuse throughout
+const domainOptIterator = new DomainOptIterator('');
+
+/******************************************************************************/
+
+// The optimal class is picked according to the content of the `from=`
+// filter option.
+const compileDomainOpt = (ctors, iterable, prepend, units) => {
+ const hostnameHits = [];
+ const hostnameMisses = [];
+ const entityHits = [];
+ const entityMisses = [];
+ const regexHits = [];
+ const regexMisses = [];
+ for ( const s of iterable ) {
+ const len = s.length;
+ const beg = len > 1 && s.charCodeAt(0) === 0x7E /* '~' */ ? 1 : 0;
+ if ( len <= beg ) { continue; }
+ if ( s.charCodeAt(beg) === 0x2F /* / */ ) {
+ if ( beg === 0 ) { regexHits.push(s); continue; }
+ regexMisses.push(s.slice(1)); continue;
+ }
+ if ( s.endsWith('.*') === false ) {
+ if ( beg === 0 ) { hostnameHits.push(s); continue; }
+ hostnameMisses.push(s.slice(1)); continue;
+ }
+ if ( beg === 0 ) { entityHits.push(s); continue; }
+ entityMisses.push(s.slice(1)); continue;
+ }
+ const toTrie = [];
+ let trieWhich = 0b00;
+ if ( hostnameHits.length > 1 ) {
+ toTrie.push(...hostnameHits);
+ hostnameHits.length = 0;
+ trieWhich |= 0b01;
+ }
+ if ( entityHits.length > 1 ) {
+ toTrie.push(...entityHits);
+ entityHits.length = 0;
+ trieWhich |= 0b10;
+ }
+ const compiledHit = [];
+ if ( toTrie.length !== 0 ) {
+ compiledHit.push(
+ ctors[2].compile(toTrie.sort(), trieWhich)
+ );
+ }
+ for ( const hn of hostnameHits ) {
+ compiledHit.push(ctors[0].compile(hn));
+ }
+ for ( const hn of entityHits ) {
+ compiledHit.push(ctors[1].compile(hn));
+ }
+ for ( const hn of regexHits ) {
+ compiledHit.push(ctors[3].compile(hn));
+ }
+ if ( compiledHit.length > 1 ) {
+ compiledHit[0] = FilterDomainHitAny.compile(compiledHit.slice());
+ compiledHit.length = 1;
+ }
+ toTrie.length = trieWhich = 0;
+ if ( hostnameMisses.length > 1 ) {
+ toTrie.push(...hostnameMisses);
+ hostnameMisses.length = 0;
+ trieWhich |= 0b01;
+ }
+ if ( entityMisses.length > 1 ) {
+ toTrie.push(...entityMisses);
+ entityMisses.length = 0;
+ trieWhich |= 0b10;
+ }
+ const compiledMiss = [];
+ if ( toTrie.length !== 0 ) {
+ compiledMiss.push(
+ ctors[6].compile(toTrie.sort(), trieWhich)
+ );
+ }
+ for ( const hn of hostnameMisses ) {
+ compiledMiss.push(ctors[4].compile(hn));
+ }
+ for ( const hn of entityMisses ) {
+ compiledMiss.push(ctors[5].compile(hn));
+ }
+ for ( const hn of regexMisses ) {
+ compiledMiss.push(ctors[7].compile(hn));
+ }
+ if ( prepend ) {
+ if ( compiledHit.length !== 0 ) {
+ units.unshift(compiledHit[0]);
+ }
+ if ( compiledMiss.length !== 0 ) {
+ units.unshift(...compiledMiss);
+ }
+ } else {
+ if ( compiledMiss.length !== 0 ) {
+ units.push(...compiledMiss);
+ }
+ if ( compiledHit.length !== 0 ) {
+ units.push(compiledHit[0]);
+ }
+ }
+};
+
+/******************************************************************************/
+
+class FilterDomainHit {
+ static getDomainOpt(idata) {
+ return this.hntrieContainer.extractHostname(
+ filterData[idata+1],
+ filterData[idata+2]
+ );
+ }
+
+ static match(idata) {
+ return this.hntrieContainer.matchesHostname(
+ this.getMatchTarget(),
+ filterData[idata+1],
+ filterData[idata+2]
+ );
+ }
+
+ static compile(hostname) {
+ return [ this.fid, hostname ];
+ }
+
+ static fromCompiled(args) {
+ const idata = filterDataAllocLen(3);
+ filterData[idata+0] = args[0]; // fid
+ filterData[idata+1] = this.hntrieContainer.storeHostname(args[1]); // i
+ filterData[idata+2] = args[1].length; // n
+ return idata;
+ }
+
+ static dnrFromCompiled(args, rule) {
+ rule.condition = rule.condition || {};
+ const prop = this.dnrConditionName;
+ if ( rule.condition[prop] === undefined ) {
+ rule.condition[prop] = [];
+ }
+ rule.condition[prop].push(args[1]);
+ }
+
+ static dumpInfo(idata) {
+ return this.getDomainOpt(idata);
+ }
+}
+
+/******************************************************************************/
+
+class FilterDomainHitSet {
+ static getDomainOpt(idata) {
+ return this.hntrieContainer.extractDomainOpt(
+ filterData[idata+1],
+ filterData[idata+2]
+ );
+ }
+
+ static getTrieCount(idata) {
+ const itrie = filterData[idata+4];
+ if ( itrie === 0 ) { return 0; }
+ return Array.from(
+ this.hntrieContainer.trieIterator(filterData[idata+4])
+ ).length;
+ }
+
+ static getLastResult(idata) {
+ return filterData[idata+5];
+ }
+
+ static getMatchedHostname(idata) {
+ const lastResult = filterData[idata+5];
+ if ( lastResult === -1 ) { return ''; }
+ return this.getMatchTarget(lastResult >>> 8).slice(lastResult & 0xFF);
+ }
+
+ static match(idata) {
+ const refs = filterRefs[filterData[idata+6]];
+ const docHostname = this.getMatchTarget(0b01);
+ if ( docHostname === refs.$last ) {
+ return filterData[idata+5] !== -1;
+ }
+ refs.$last = docHostname;
+ const which = filterData[idata+3];
+ const itrie = filterData[idata+4] || this.toTrie(idata);
+ if ( itrie === 0 ) { return false; }
+ if ( (which & 0b01) !== 0 ) {
+ const pos = this.hntrieContainer
+ .setNeedle(docHostname)
+ .matches(itrie);
+ if ( pos !== -1 ) {
+ filterData[idata+5] = 0b01 << 8 | pos;
+ return true;
+ }
+ }
+ if ( (which & 0b10) !== 0 ) {
+ const pos = this.hntrieContainer
+ .setNeedle(this.getMatchTarget(0b10))
+ .matches(itrie);
+ if ( pos !== -1 ) {
+ filterData[idata+5] = 0b10 << 8 | pos;
+ return true;
+ }
+ }
+ filterData[idata+5] = -1;
+ return false;
+ }
+
+ static add(idata, hn) {
+ this.hntrieContainer.setNeedle(hn).add(filterData[idata+4]);
+ filterData[idata+3] |= hn.charCodeAt(hn.length - 1) !== 0x2A /* '*' */
+ ? 0b01
+ : 0b10;
+ filterData[idata+5] = -1;
+ filterRefs[filterData[idata+6]].$last = '';
+ }
+
+ static create(fid = -1) {
+ const idata = filterDataAllocLen(7);
+ filterData[idata+0] = fid !== -1 ? fid : this.fid;
+ filterData[idata+1] = 0;
+ filterData[idata+2] = 0;
+ filterData[idata+3] = 0;
+ filterData[idata+4] = this.hntrieContainer.createTrie();
+ filterData[idata+5] = -1; // $lastResult
+ filterData[idata+6] = filterRefAdd({ $last: '' });
+ return idata;
+ }
+
+ static compile(hostnames, which) {
+ const stringified = Array.isArray(hostnames)
+ ? hostnames.join('|')
+ : hostnames;
+ return [ this.fid, stringified, which ];
+ }
+
+ static fromCompiled(args) {
+ const idata = filterDataAllocLen(7);
+ filterData[idata+0] = args[0]; // fid
+ filterData[idata+1] = this.hntrieContainer.storeDomainOpt(args[1]);
+ filterData[idata+2] = args[1].length;
+ filterData[idata+3] = args[2]; // which
+ filterData[idata+4] = 0; // itrie
+ filterData[idata+5] = -1; // $lastResult
+ filterData[idata+6] = filterRefAdd({ $last: '' });
+ return idata;
+ }
+
+ static dnrFromCompiled(args, rule) {
+ rule.condition = rule.condition || {};
+ const prop = this.dnrConditionName;
+ if ( rule.condition[prop] === undefined ) {
+ rule.condition[prop] = [];
+ }
+ rule.condition[prop].push(...args[1].split('|'));
+ }
+
+ static toTrie(idata) {
+ if ( filterData[idata+2] === 0 ) { return 0; }
+ const itrie = filterData[idata+4] =
+ this.hntrieContainer.createTrieFromStoredDomainOpt(
+ filterData[idata+1],
+ filterData[idata+2]
+ );
+ return itrie;
+ }
+
+ static keyFromArgs(args) {
+ return args[1];
+ }
+
+ static dumpInfo(idata) {
+ return `0b${filterData[idata+3].toString(2)} ${this.getDomainOpt(idata)}`;
+ }
+}
+
+/******************************************************************************/
+
+class FilterDomainRegexHit {
+ static getDomainOpt(idata) {
+ const ref = filterRefs[filterData[idata+1]];
+ return ref.restr;
+ }
+
+ static match(idata) {
+ const ref = filterRefs[filterData[idata+1]];
+ if ( ref.$re === null ) {
+ ref.$re = new RegExp(ref.restr.slice(1,-1));
+ }
+ return ref.$re.test(this.getMatchTarget());
+ }
+
+ static compile(restr) {
+ return [ this.fid, restr ];
+ }
+
+ static fromCompiled(args) {
+ const idata = filterDataAllocLen(2);
+ filterData[idata+0] = args[0]; // fid
+ filterData[idata+1] = filterRefAdd({ restr: args[1], $re: null });
+ return idata;
+ }
+
+ static dnrFromCompiled(args, rule) {
+ rule.condition = rule.condition || {};
+ const prop = this.dnrConditionName;
+ if ( rule.condition[prop] === undefined ) {
+ rule.condition[prop] = [];
+ }
+ rule.condition[prop].push(args[1]);
+ }
+
+ static dumpInfo(idata) {
+ return this.getDomainOpt(idata);
+ }
+}
+
+/******************************************************************************/
+
+// Implement the following filter option:
+// - domain=
+// - from=
+
+class FilterFromDomainHit extends FilterDomainHit {
+ static hasOriginHit() {
+ return true;
+ }
+
+ static getMatchTarget() {
+ return $docHostname;
+ }
+
+ static get dnrConditionName() {
+ return 'initiatorDomains';
+ }
+
+ static logData(idata, details) {
+ details.fromDomains.push(this.getDomainOpt(idata));
+ }
+}
+Object.defineProperty(FilterFromDomainHit, 'hntrieContainer', {
+ value: origHNTrieContainer
+});
+
+class FilterFromDomainMiss extends FilterFromDomainHit {
+ static hasOriginHit() {
+ return false;
+ }
+
+ static get dnrConditionName() {
+ return 'excludedInitiatorDomains';
+ }
+
+ static match(idata) {
+ return super.match(idata) === false;
+ }
+
+ static logData(idata, details) {
+ details.fromDomains.push(`~${this.getDomainOpt(idata)}`);
+ }
+}
+
+class FilterFromEntityHit extends FilterFromDomainHit {
+ static getMatchTarget() {
+ return $docEntity.compute();
+ }
+}
+
+class FilterFromEntityMiss extends FilterFromDomainMiss {
+ static getMatchTarget() {
+ return $docEntity.compute();
+ }
+}
+
+class FilterFromDomainHitSet extends FilterDomainHitSet {
+ static hasOriginHit() {
+ return true;
+ }
+
+ static getMatchTarget(which) {
+ return (which & 0b01) !== 0
+ ? $docHostname
+ : $docEntity.compute();
+ }
+
+ static get dnrConditionName() {
+ return 'initiatorDomains';
+ }
+
+ static logData(idata, details) {
+ details.fromDomains.push(this.getDomainOpt(idata));
+ }
+}
+Object.defineProperty(FilterFromDomainHitSet, 'hntrieContainer', {
+ value: origHNTrieContainer
+});
+
+class FilterFromDomainMissSet extends FilterFromDomainHitSet {
+ static hasOriginHit() {
+ return false;
+ }
+
+ static match(idata) {
+ return super.match(idata) === false;
+ }
+
+ static get dnrConditionName() {
+ return 'excludedInitiatorDomains';
+ }
+
+ static logData(idata, details) {
+ details.fromDomains.push('~' + this.getDomainOpt(idata).replace(/\|/g, '|~'));
+ }
+}
+
+class FilterFromRegexHit extends FilterDomainRegexHit {
+ static getMatchTarget() {
+ return $docHostname;
+ }
+
+ static get dnrConditionName() {
+ return 'initiatorDomains';
+ }
+
+ static logData(idata, details) {
+ details.fromDomains.push(`${this.getDomainOpt(idata)}`);
+ }
+}
+
+class FilterFromRegexMiss extends FilterFromRegexHit {
+ static match(idata) {
+ return super.match(idata) === false;
+ }
+
+ static get dnrConditionName() {
+ return 'excludedInitiatorDomains';
+ }
+
+ static logData(idata, details) {
+ details.fromDomains.push(`~${this.getDomainOpt(idata)}`);
+ }
+}
+
+registerFilterClass(FilterFromDomainHit);
+registerFilterClass(FilterFromDomainMiss);
+registerFilterClass(FilterFromEntityHit);
+registerFilterClass(FilterFromEntityMiss);
+registerFilterClass(FilterFromDomainHitSet);
+registerFilterClass(FilterFromDomainMissSet);
+registerFilterClass(FilterFromRegexHit);
+registerFilterClass(FilterFromRegexMiss);
+
+const fromOptClasses = [
+ FilterFromDomainHit,
+ FilterFromEntityHit,
+ FilterFromDomainHitSet,
+ FilterFromRegexHit,
+ FilterFromDomainMiss,
+ FilterFromEntityMiss,
+ FilterFromDomainMissSet,
+ FilterFromRegexMiss,
+];
+
+const compileFromDomainOpt = (...args) => {
+ return compileDomainOpt(fromOptClasses, ...args);
+};
+
+/******************************************************************************/
+
+// Implement the following filter option:
+// - to=
+
+class FilterToDomainHit extends FilterDomainHit {
+ static getMatchTarget() {
+ return $requestHostname;
+ }
+
+ static get dnrConditionName() {
+ return 'requestDomains';
+ }
+
+ static logData(idata, details) {
+ details.toDomains.push(this.getDomainOpt(idata));
+ }
+}
+Object.defineProperty(FilterToDomainHit, 'hntrieContainer', {
+ value: destHNTrieContainer
+});
+
+class FilterToDomainMiss extends FilterToDomainHit {
+ static get dnrConditionName() {
+ return 'excludedRequestDomains';
+ }
+
+ static match(idata) {
+ return super.match(idata) === false;
+ }
+
+ static logData(idata, details) {
+ details.toDomains.push(`~${this.getDomainOpt(idata)}`);
+ }
+}
+
+class FilterToEntityHit extends FilterToDomainHit {
+ static getMatchTarget() {
+ return $requestEntity.compute();
+ }
+}
+
+class FilterToEntityMiss extends FilterToDomainMiss {
+ static getMatchTarget() {
+ return $requestEntity.compute();
+ }
+}
+
+class FilterToDomainHitSet extends FilterDomainHitSet {
+ static getMatchTarget(which) {
+ return (which & 0b01) !== 0
+ ? $requestHostname
+ : $requestEntity.compute();
+ }
+
+ static get dnrConditionName() {
+ return 'requestDomains';
+ }
+
+ static logData(idata, details) {
+ details.toDomains.push(this.getDomainOpt(idata));
+ }
+}
+Object.defineProperty(FilterToDomainHitSet, 'hntrieContainer', {
+ value: destHNTrieContainer
+});
+
+class FilterToDomainMissSet extends FilterToDomainHitSet {
+ static match(idata) {
+ return super.match(idata) === false;
+ }
+
+ static get dnrConditionName() {
+ return 'excludedRequestDomains';
+ }
+
+ static logData(idata, details) {
+ details.toDomains.push('~' + this.getDomainOpt(idata).replace(/\|/g, '|~'));
+ }
+}
+
+class FilterToRegexHit extends FilterDomainRegexHit {
+ static getMatchTarget() {
+ return $requestHostname;
+ }
+
+ static get dnrConditionName() {
+ return 'requestDomains';
+ }
+
+ static logData(idata, details) {
+ details.toDomains.push(`${this.getDomainOpt(idata)}`);
+ }
+}
+
+class FilterToRegexMiss extends FilterToRegexHit {
+ static match(idata) {
+ return super.match(idata) === false;
+ }
+
+ static get dnrConditionName() {
+ return 'excludedRequestDomains';
+ }
+
+ static logData(idata, details) {
+ details.toDomains.push(`~${this.getDomainOpt(idata)}`);
+ }
+}
+
+registerFilterClass(FilterToDomainHit);
+registerFilterClass(FilterToDomainMiss);
+registerFilterClass(FilterToEntityHit);
+registerFilterClass(FilterToEntityMiss);
+registerFilterClass(FilterToDomainHitSet);
+registerFilterClass(FilterToDomainMissSet);
+registerFilterClass(FilterToRegexHit);
+registerFilterClass(FilterToRegexMiss);
+
+const toOptClasses = [
+ FilterToDomainHit,
+ FilterToEntityHit,
+ FilterToDomainHitSet,
+ FilterToRegexHit,
+ FilterToDomainMiss,
+ FilterToEntityMiss,
+ FilterToDomainMissSet,
+ FilterToRegexMiss,
+];
+
+const compileToDomainOpt = (...args) => {
+ return compileDomainOpt(toOptClasses, ...args);
+};
+
+/******************************************************************************/
+
+class FilterDenyAllow extends FilterToDomainMissSet {
+ static compile(details) {
+ return super.compile(details.denyallowOpt, 0b01);
+ }
+
+ static logData(idata, details) {
+ details.denyallow.push(this.getDomainOpt(idata));
+ }
+}
+
+registerFilterClass(FilterDenyAllow);
+
+/******************************************************************************/
+
+class FilterModifier {
+ static getModifierType(idata) {
+ return filterData[idata+2];
+ }
+
+ static match() {
+ return true;
+ }
+
+ static matchAndFetchModifiers(idata, env) {
+ if ( this.getModifierType(idata) !== env.type ) { return; }
+ env.results.push(new FilterModifierResult(idata, env));
+ }
+
+ static compile(details) {
+ return [
+ FilterModifier.fid,
+ details.action,
+ details.modifyType,
+ details.modifyValue || '',
+ ];
+ }
+
+ static fromCompiled(args) {
+ const idata = filterDataAllocLen(4);
+ filterData[idata+0] = args[0]; // fid
+ filterData[idata+1] = args[1]; // actionBits
+ filterData[idata+2] = args[2]; // type
+ filterData[idata+3] = filterRefAdd({
+ value: args[3],
+ $cache: null,
+ });
+ return idata;
+ }
+
+ static dnrFromCompiled(args, rule) {
+ rule.__modifierAction = args[1];
+ rule.__modifierType = modifierNameFromType.get(args[2]);
+ rule.__modifierValue = args[3];
+ }
+
+ static keyFromArgs(args) {
+ return `${args[1]}\t${args[2]}\t${args[3]}`;
+ }
+
+ static logData(idata, details) {
+ let opt = modifierNameFromType.get(filterData[idata+2]);
+ const refs = filterRefs[filterData[idata+3]];
+ if ( refs.value !== '' ) {
+ opt += `=${refs.value}`;
+ }
+ details.options.push(opt);
+ }
+
+ static dumpInfo(idata) {
+ const s = modifierNameFromType.get(filterData[idata+2]);
+ const refs = filterRefs[filterData[idata+3]];
+ if ( refs.value === '' ) { return s; }
+ return `${s}=${refs.value}`;
+ }
+}
+
+registerFilterClass(FilterModifier);
+
+// Helper class for storing instances of FilterModifier which were found to
+// be a match.
+
+class FilterModifierResult {
+ constructor(imodifierunit, env) {
+ this.imodifierunit = imodifierunit;
+ this.refs = filterRefs[filterData[imodifierunit+3]];
+ this.ireportedunit = env.iunit;
+ this.th = env.th;
+ this.bits = (env.bits & ~RealmBitsMask) | filterData[imodifierunit+1];
+ }
+
+ get result() {
+ return (this.bits & ALLOW_REALM) === 0 ? 1 : 2;
+ }
+
+ get value() {
+ return this.refs.value;
+ }
+
+ get cache() {
+ return this.refs.$cache;
+ }
+
+ set cache(a) {
+ this.refs.$cache = a;
+ }
+
+ logData() {
+ const r = new LogData(this.bits, this.th, this.ireportedunit);
+ r.result = this.result;
+ r.modifier = true;
+ return r;
+ }
+}
+
+/******************************************************************************/
+
+class FilterCollection {
+ static getCount(idata) {
+ let n = 0;
+ this.forEach(idata, ( ) => { n += 1; });
+ return n;
+ }
+
+ static forEach(idata, fn) {
+ let i = filterData[idata+1];
+ if ( i === 0 ) { return; }
+ do {
+ const iunit = filterData[i+0];
+ const r = fn(iunit);
+ if ( r !== undefined ) { return r; }
+ i = filterData[i+1];
+ } while ( i !== 0 );
+ }
+
+ static unshift(idata, iunit) {
+ filterData[idata+1] = filterSequenceAdd(iunit, filterData[idata+1]);
+ }
+
+ static shift(idata) {
+ filterData[idata+1] = filterData[filterData[idata+1]+1];
+ }
+
+ static create(fid = -1) {
+ return filterDataAlloc(
+ fid !== -1 ? fid : FilterCollection.fid,
+ 0
+ );
+ }
+
+ static compile(fc, fdata) {
+ return [ fc.fid, fdata ];
+ }
+
+ static fromCompiled(args) {
+ const units = args[1];
+ const n = units.length;
+ let iunit, inext = 0;
+ let i = n;
+ while ( i-- ) {
+ iunit = filterFromCompiled(units[i]);
+ inext = filterSequenceAdd(iunit, inext);
+ }
+ const idata = filterDataAllocLen(2);
+ filterData[idata+0] = args[0]; // fid
+ filterData[idata+1] = inext; // i
+ return idata;
+ }
+
+ static dnrFromCompiled(args, rule) {
+ for ( const unit of args[1] ) {
+ dnrRuleFromCompiled(unit, rule);
+ }
+ }
+
+ static logData(idata, details) {
+ this.forEach(idata, iunit => {
+ filterLogData(iunit, details);
+ });
+ }
+
+ static dumpInfo(idata) {
+ return this.getCount(idata);
+ }
+}
+
+registerFilterClass(FilterCollection);
+
+/******************************************************************************/
+
+class FilterDomainHitAny extends FilterCollection {
+ static getDomainOpt(idata) {
+ const domainOpts = [];
+ this.forEach(idata, iunit => {
+ if ( filterHasOriginHit(iunit) !== true ) { return; }
+ filterGetDomainOpt(iunit, domainOpts);
+ });
+ return domainOpts.join('|');
+ }
+
+ static hasOriginHit(idata) {
+ this.forEach(idata, iunit => {
+ if ( filterHasOriginHit(iunit) ) { return true; }
+ });
+ return false;
+ }
+
+ static match(idata) {
+ let i = filterData[idata+1];
+ while ( i !== 0 ) {
+ if ( filterMatch(filterData[i+0]) ) { return true; }
+ i = filterData[i+1];
+ }
+ return false;
+ }
+
+ static compile(fdata) {
+ return super.compile(FilterDomainHitAny, fdata);
+ }
+
+ static fromCompiled(args) {
+ return super.fromCompiled(args);
+ }
+}
+
+registerFilterClass(FilterDomainHitAny);
+
+/******************************************************************************/
+
+class FilterCompositeAll extends FilterCollection {
+ // FilterPatternPlain is assumed to be first filter in sequence. This can
+ // be revisited if needed.
+ static isBidiTrieable(idata) {
+ return filterIsBidiTrieable(filterData[filterData[idata+1]+0]);
+ }
+
+ static toBidiTrie(idata) {
+ const iseq = filterData[idata+1];
+ const details = filterToBidiTrie(filterData[iseq+0]);
+ this.shift(idata);
+ return details;
+ }
+
+ static getDomainOpt(idata) {
+ return this.forEach(idata, iunit => {
+ if ( filterHasOriginHit(iunit) !== true ) { return; }
+ return filterGetDomainOpt(iunit);
+ });
+ }
+
+ static hasOriginHit(idata) {
+ return this.forEach(idata, iunit => {
+ if ( filterHasOriginHit(iunit) === true ) { return true; }
+ }) || false;
+ }
+
+ static hasRegexPattern(idata) {
+ return this.forEach(idata, iunit => {
+ const fc = filterGetClass(iunit);
+ if ( fc.hasRegexPattern === undefined ) { return; }
+ if ( fc.hasRegexPattern(iunit) === true ) { return true; }
+ }) || false;
+ }
+
+ static getRegexPattern(idata) {
+ return this.forEach(idata, iunit => {
+ const fc = filterGetClass(iunit);
+ if ( fc.getRegexPattern === undefined ) { return; }
+ return fc.getRegexPattern(iunit);
+ });
+ }
+
+ static match(idata) {
+ let i = filterData[idata+1];
+ while ( i !== 0 ) {
+ if ( filterMatch(filterData[i+0]) !== true ) {
+ return false;
+ }
+ i = filterData[i+1];
+ }
+ return true;
+ }
+
+ // IMPORTANT: the modifier filter unit is assumed to be ALWAYS the
+ // first unit in the sequence. This requirement ensures that we do
+ // not have to traverse the sequence to find the modifier filter
+ // unit.
+ static getModifierType(idata) {
+ const iseq = filterData[idata+1];
+ const iunit = filterData[iseq+0];
+ return filterGetModifierType(iunit);
+ }
+
+ static matchAndFetchModifiers(idata, env) {
+ const iseq = filterData[idata+1];
+ const iunit = filterData[iseq+0];
+ if (
+ filterGetModifierType(iunit) === env.type &&
+ this.match(idata)
+ ) {
+ filterMatchAndFetchModifiers(iunit, env);
+ }
+ }
+
+ static compile(fdata) {
+ return super.compile(FilterCompositeAll, fdata);
+ }
+
+ static fromCompiled(args) {
+ return super.fromCompiled(args);
+ }
+}
+
+registerFilterClass(FilterCompositeAll);
+
+/******************************************************************************/
+
+// Dictionary of hostnames
+
+class FilterHostnameDict {
+ static getCount(idata) {
+ const itrie = filterData[idata+1];
+ if ( itrie !== 0 ) {
+ return Array.from(destHNTrieContainer.trieIterator(itrie)).length;
+ }
+ return filterRefs[filterData[idata+3]].length;
+ }
+
+ static match(idata) {
+ const itrie = filterData[idata+1] || this.optimize(idata);
+ return (
+ filterData[idata+2] = destHNTrieContainer
+ .setNeedle($requestHostname)
+ .matches(itrie)
+ ) !== -1;
+ }
+
+ static add(idata, hn) {
+ const itrie = filterData[idata+1];
+ if ( itrie === 0 ) {
+ filterRefs[filterData[idata+3]].push(hn);
+ } else {
+ destHNTrieContainer.setNeedle(hn).add(itrie);
+ }
+ }
+
+ static optimize(idata) {
+ const itrie = filterData[idata+1];
+ if ( itrie !== 0 ) { return itrie; }
+ const hostnames = filterRefs[filterData[idata+3]];
+ filterData[idata+1] = destHNTrieContainer.createTrieFromIterable(hostnames);
+ filterRefs[filterData[idata+3]] = null;
+ return filterData[idata+1];
+ }
+
+ static create() {
+ const idata = filterDataAllocLen(4);
+ filterData[idata+0] = FilterHostnameDict.fid; // fid
+ filterData[idata+1] = 0; // itrie
+ filterData[idata+2] = -1; // lastResult
+ filterData[idata+3] = filterRefAdd([]); // []: hostnames
+ return idata;
+ }
+
+ static logData(idata, details) {
+ const hostname = $requestHostname.slice(filterData[idata+2]);
+ details.pattern.push('||', hostname, '^');
+ details.regex.push(
+ restrFromPlainPattern(hostname),
+ '\\.?',
+ restrSeparator
+ );
+ }
+
+ static dumpInfo(idata) {
+ return this.getCount(idata);
+ }
+}
+
+registerFilterClass(FilterHostnameDict);
+
+/******************************************************************************/
+
+// Dictionary of hostnames for filters which only purpose is to match
+// the document origin.
+
+class FilterJustOrigin extends FilterFromDomainHitSet {
+ static create(fid = -1) {
+ return super.create(fid !== -1 ? fid : FilterJustOrigin.fid);
+ }
+
+ static logPattern(idata, details) {
+ details.pattern.push('*');
+ details.regex.push('^');
+ }
+
+ static logData(idata, details) {
+ this.logPattern(idata, details);
+ details.fromDomains.push(this.getMatchedHostname(idata));
+ }
+
+ static dumpInfo(idata) {
+ return this.getTrieCount(idata);
+ }
+}
+
+registerFilterClass(FilterJustOrigin);
+
+/******************************************************************************/
+
+class FilterHTTPSJustOrigin extends FilterJustOrigin {
+ static match(idata) {
+ return $requestURL.startsWith('https://') && super.match(idata);
+ }
+
+ static create() {
+ return super.create(FilterHTTPSJustOrigin.fid);
+ }
+
+ static logPattern(idata, details) {
+ details.pattern.push('|https://');
+ details.regex.push('^https://');
+ }
+}
+
+registerFilterClass(FilterHTTPSJustOrigin);
+
+/******************************************************************************/
+
+class FilterHTTPJustOrigin extends FilterJustOrigin {
+ static match(idata) {
+ return $requestURL.startsWith('http://') && super.match(idata);
+ }
+
+ static create() {
+ return super.create(FilterHTTPJustOrigin.fid);
+ }
+
+ static logPattern(idata, details) {
+ details.pattern.push('|http://');
+ details.regex.push('^http://');
+ }
+}
+
+registerFilterClass(FilterHTTPJustOrigin);
+
+/******************************************************************************/
+
+class FilterPlainTrie {
+ static match(idata) {
+ if ( bidiTrie.matches(filterData[idata+1], $tokenBeg) !== 0 ) {
+ filterData[idata+2] = bidiTrie.$iu;
+ return true;
+ }
+ return false;
+ }
+
+ static create() {
+ const idata = filterDataAllocLen(3);
+ filterData[idata+0] = FilterPlainTrie.fid; // fid
+ filterData[idata+1] = bidiTrie.createTrie(); // itrie
+ filterData[idata+2] = 0; // matchedUnit
+ return idata;
+ }
+
+ static addUnitToTrie(idata, iunit) {
+ const trieDetails = filterToBidiTrie(iunit);
+ const itrie = filterData[idata+1];
+ const id = bidiTrie.add(
+ itrie,
+ trieDetails.i,
+ trieDetails.n,
+ trieDetails.itok
+ );
+ // No point storing a pattern with conditions if the bidi-trie already
+ // contain a pattern with no conditions.
+ const ix = bidiTrie.getExtra(id);
+ if ( ix === 1 ) { return; }
+ // If the newly stored pattern has no condition, short-circuit existing
+ // ones since they will always be short-circuited by the condition-less
+ // pattern.
+ const fc = filterGetClass(iunit);
+ if ( fc.isPatternPlain ) {
+ bidiTrie.setExtra(id, 1);
+ return;
+ }
+ // FilterCompositeAll is assumed here, i.e. with conditions.
+ if ( fc === FilterCompositeAll && fc.getCount(iunit) === 1 ) {
+ iunit = filterData[filterData[iunit+1]+0];
+ }
+ bidiTrie.setExtra(id, filterSequenceAdd(iunit, ix));
+ }
+
+ static logData(idata, details) {
+ const s = $requestURL.slice(bidiTrie.$l, bidiTrie.$r);
+ details.pattern.push(s);
+ details.regex.push(restrFromPlainPattern(s));
+ if ( filterData[idata+2] !== -1 ) {
+ filterLogData(filterData[idata+2], details);
+ }
+ }
+
+ static dumpInfo(idata) {
+ return `${Array.from(bidiTrie.trieIterator(filterData[idata+1])).length}`;
+ }
+}
+
+registerFilterClass(FilterPlainTrie);
+
+/******************************************************************************/
+
+class FilterBucket extends FilterCollection {
+ static getCount(idata) {
+ return filterData[idata+2];
+ }
+
+ static forEach(idata, fn) {
+ return super.forEach(filterData[idata+1], fn);
+ }
+
+ static match(idata) {
+ const icollection = filterData[idata+1];
+ let iseq = filterData[icollection+1];
+ while ( iseq !== 0 ) {
+ const iunit = filterData[iseq+0];
+ if ( filterMatch(iunit) ) {
+ filterData[idata+3] = iunit;
+ return true;
+ }
+ iseq = filterData[iseq+1];
+ }
+ return false;
+ }
+
+ static matchAndFetchModifiers(idata, env) {
+ const icollection = filterData[idata+1];
+ let iseq = filterData[icollection+1];
+ while ( iseq !== 0 ) {
+ const iunit = filterData[iseq+0];
+ env.iunit = iunit;
+ filterMatchAndFetchModifiers(iunit, env);
+ iseq = filterData[iseq+1];
+ }
+ }
+
+ static unshift(idata, iunit) {
+ super.unshift(filterData[idata+1], iunit);
+ filterData[idata+2] += 1;
+ }
+
+ static shift(idata) {
+ super.shift(filterData[idata+1]);
+ filterData[idata+2] -= 1;
+ }
+
+ static create() {
+ const idata = filterDataAllocLen(4);
+ filterData[idata+0] = FilterBucket.fid; // fid
+ filterData[idata+1] = FilterCollection.create(); // icollection
+ filterData[idata+2] = 0; // n
+ filterData[idata+3] = 0; // $matchedUnit
+ return idata;
+ }
+
+ static logData(idata, details) {
+ filterLogData(filterData[idata+3], details);
+ }
+
+ static optimize(idata, optimizeBits = 0b11) {
+ if ( (optimizeBits & 0b01) !== 0 ) {
+ if ( filterData[idata+2] >= 3 ) {
+ const iplaintrie = this.optimizePatternTests(idata);
+ if ( iplaintrie !== 0 ) {
+ const icollection = filterData[idata+1];
+ const i = filterData[icollection+1];
+ if ( i === 0 ) { return iplaintrie; }
+ this.unshift(idata, iplaintrie);
+ }
+ }
+ }
+ if ( (optimizeBits & 0b10) !== 0 ) {
+ if ( filterData[idata+2] >= 5 ) {
+ const ioptimized = this.optimizeMatch(
+ idata,
+ FilterBucketIfOriginHits,
+ 5
+ );
+ if ( ioptimized !== 0 ) {
+ const icollection = filterData[idata+1];
+ const i = filterData[icollection+1];
+ if ( i === 0 ) { return ioptimized; }
+ this.unshift(idata, ioptimized);
+ }
+ }
+ if ( filterData[idata+2] >= 5 ) {
+ const ioptimized = this.optimizeMatch(
+ idata,
+ FilterBucketIfRegexHits,
+ 5
+ );
+ if ( ioptimized !== 0 ) {
+ const icollection = filterData[idata+1];
+ const i = filterData[icollection+1];
+ if ( i === 0 ) { return ioptimized; }
+ this.unshift(idata, ioptimized);
+ }
+ }
+ }
+ return 0;
+ }
+
+ static optimizePatternTests(idata) {
+ const isrccollection = filterData[idata+1];
+ let n = 0;
+ let iseq = filterData[isrccollection+1];
+ do {
+ if ( filterIsBidiTrieable(filterData[iseq+0]) ) { n += 1; }
+ iseq = filterData[iseq+1];
+ } while ( iseq !== 0 && n < 3 );
+ if ( n < 3 ) { return 0; }
+ const iplaintrie = FilterPlainTrie.create();
+ iseq = filterData[isrccollection+1];
+ let iprev = 0;
+ for (;;) {
+ const iunit = filterData[iseq+0];
+ const inext = filterData[iseq+1];
+ if ( filterIsBidiTrieable(iunit) ) {
+ FilterPlainTrie.addUnitToTrie(iplaintrie, iunit);
+ if ( iprev !== 0 ) {
+ filterData[iprev+1] = inext;
+ } else {
+ filterData[isrccollection+1] = inext;
+ }
+ filterData[idata+2] -= 1;
+ } else {
+ iprev = iseq;
+ }
+ if ( inext === 0 ) { break; }
+ iseq = inext;
+ }
+ return iplaintrie;
+ }
+
+ static optimizeMatch(idata, fc, min) {
+ const isrccollection = filterData[idata+1];
+ const candidates = [];
+ this.forEach(idata, iunit => {
+ if ( fc.canCoalesce(iunit) === false ) { return; }
+ candidates.push(iunit);
+ });
+ if ( candidates.length < min ) { return 0; }
+ const idesbucket = FilterBucket.create();
+ const idescollection = filterData[idesbucket+1];
+ let coalesced;
+ let isrcseq = filterData[isrccollection+1];
+ let iprev = 0;
+ for (;;) {
+ const iunit = filterData[isrcseq+0];
+ const inext = filterData[isrcseq+1];
+ if ( candidates.includes(iunit) ) {
+ coalesced = fc.coalesce(iunit, coalesced);
+ // move the sequence slot to new bucket
+ filterData[isrcseq+1] = filterData[idescollection+1];
+ filterData[idescollection+1] = isrcseq;
+ filterData[idesbucket+2] += 1;
+ if ( iprev !== 0 ) {
+ filterData[iprev+1] = inext;
+ } else {
+ filterData[isrccollection+1] = inext;
+ }
+ filterData[idata+2] -= 1;
+ } else {
+ iprev = isrcseq;
+ }
+ if ( inext === 0 ) { break; }
+ isrcseq = inext;
+ }
+ return fc.create(coalesced, idesbucket);
+ }
+
+ static dumpInfo(idata) {
+ return this.getCount(idata);
+ }
+}
+
+registerFilterClass(FilterBucket);
+
+/******************************************************************************/
+
+// Filter bucket objects which have a pre-test method before being treated
+// as a plain filter bucket -- the pre-test method should be fast as it is
+// used to avoid having to iterate through the content of the filter bucket.
+
+class FilterBucketIf extends FilterBucket {
+ static getCount(idata) {
+ return super.getCount(filterData[idata+1]);
+ }
+
+ static forEach(idata, fn) {
+ return super.forEach(filterData[idata+1], fn);
+ }
+
+ static match(idata) {
+ return this.preTest(idata) && super.match(filterData[idata+1]);
+ }
+
+ static matchAndFetchModifiers(idata, env) {
+ if ( this.preTest(idata) ) {
+ super.matchAndFetchModifiers(filterData[idata+1], env);
+ }
+ }
+
+ static create(fid, ibucket, itest) {
+ const idata = filterDataAllocLen(3);
+ filterData[idata+0] = fid;
+ filterData[idata+1] = ibucket;
+ filterData[idata+2] = itest;
+ return idata;
+ }
+
+ static logData(idata, details) {
+ filterLogData(filterData[idata+1], details);
+ }
+}
+
+registerFilterClass(FilterBucketIf);
+
+/******************************************************************************/
+
+class FilterBucketIfOriginHits extends FilterBucketIf {
+ static preTest(idata) {
+ return filterMatch(filterData[idata+2]);
+ }
+
+ static canCoalesce(iunit) {
+ return filterHasOriginHit(iunit);
+ }
+
+ static coalesce(iunit, coalesced) {
+ if ( coalesced === undefined ) {
+ coalesced = new Set();
+ }
+ const domainOpt = filterGetDomainOpt(iunit);
+ if ( domainOpt.includes('|') ) {
+ for ( const hn of domainOptIterator.reset(domainOpt) ) {
+ coalesced.add(hn);
+ }
+ } else {
+ coalesced.add(domainOpt);
+ }
+ return coalesced;
+ }
+
+ static create(coalesced, ibucket) {
+ const units = [];
+ compileFromDomainOpt(coalesced, false, units);
+ const ihittest = filterFromCompiled(units[0]);
+ const ipretest = super.create(
+ FilterBucketIfOriginHits.fid,
+ ibucket,
+ ihittest
+ );
+ return ipretest;
+ }
+}
+
+registerFilterClass(FilterBucketIfOriginHits);
+
+/******************************************************************************/
+
+class FilterBucketIfRegexHits extends FilterBucketIf {
+ static preTest(idata) {
+ return filterRefs[filterData[idata+2]].test($requestURLRaw);
+ }
+
+ static canCoalesce(iunit) {
+ const fc = filterGetClass(iunit);
+ if ( fc.hasRegexPattern === undefined ) { return false; }
+ if ( fc.hasRegexPattern(iunit) !== true ) { return false; }
+ return true;
+ }
+
+ static coalesce(iunit, coalesced) {
+ if ( coalesced === undefined ) {
+ coalesced = new Set();
+ }
+ coalesced.add(filterGetRegexPattern(iunit));
+ return coalesced;
+ }
+
+ static create(coalesced, ibucket) {
+ const reString = Array.from(coalesced).join('|');
+ return super.create(
+ FilterBucketIfRegexHits.fid,
+ ibucket,
+ filterRefAdd(new RegExp(reString, 'i'))
+ );
+ }
+
+ static dumpInfo(idata) {
+ return filterRefs[filterData[idata+2]].source;
+ }
+}
+
+registerFilterClass(FilterBucketIfRegexHits);
+
+/******************************************************************************/
+
+class FilterStrictParty {
+ // TODO: disregard `www.`?
+ static match(idata) {
+ return ($requestHostname === $docHostname) === (filterData[idata+1] === 0);
+ }
+
+ static compile(details) {
+ return [
+ FilterStrictParty.fid,
+ details.strictParty > 0 ? 0 : 1
+ ];
+ }
+
+ static fromCompiled(args) {
+ return filterDataAlloc(
+ args[0], // fid
+ args[1]
+ );
+ }
+
+ static dnrFromCompiled(args, rule) {
+ const partyness = args[1] === 0 ? 1 : 3;
+ dnrAddRuleError(rule, `FilterStrictParty: Strict partyness strict${partyness}p not supported`);
+ }
+
+ static keyFromArgs(args) {
+ return `${args[1]}`;
+ }
+
+ static logData(idata, details) {
+ details.options.push(
+ filterData[idata+1] === 0 ? 'strict1p' : 'strict3p'
+ );
+ }
+}
+
+registerFilterClass(FilterStrictParty);
+
+/******************************************************************************/
+
+class FilterOnHeaders {
+ static match(idata) {
+ const refs = filterRefs[filterData[idata+1]];
+ if ( refs.$parsed === null ) {
+ refs.$parsed = sfp.parseHeaderValue(refs.headerOpt);
+ }
+ const { bad, name, not, re, value } = refs.$parsed;
+ if ( bad ) { return false; }
+ const headerValue = $httpHeaders.lookup(name);
+ if ( headerValue === undefined ) { return false; }
+ if ( value === '' ) { return true; }
+ return re === undefined
+ ? (headerValue === value) !== not
+ : re.test(headerValue) !== not;
+ }
+
+ static compile(details) {
+ return [ FilterOnHeaders.fid, details.headerOpt ];
+ }
+
+ static fromCompiled(args) {
+ return filterDataAlloc(
+ args[0], // fid
+ filterRefAdd({
+ headerOpt: args[1],
+ $parsed: null,
+ })
+ );
+ }
+
+ static logData(idata, details) {
+ const irefs = filterData[idata+1];
+ const headerOpt = filterRefs[irefs].headerOpt;
+ let opt = 'header';
+ if ( headerOpt !== '' ) {
+ opt += `=${headerOpt}`;
+ }
+ details.options.push(opt);
+ }
+}
+
+registerFilterClass(FilterOnHeaders);
+
+/******************************************************************************/
+/******************************************************************************/
+
+// https://github.com/gorhill/uBlock/issues/2630
+// Slice input URL into a list of safe-integer token values, instead of a list
+// of substrings. The assumption is that with dealing only with numeric
+// values, less underlying memory allocations, and also as a consequence
+// less work for the garbage collector down the road.
+// Another assumption is that using a numeric-based key value for Map() is
+// more efficient than string-based key value (but that is something I would
+// have to benchmark).
+// Benchmark for string-based tokens vs. safe-integer token values:
+// https://gorhill.github.io/obj-vs-set-vs-map/tokenize-to-str-vs-to-int.html
+
+// http://www.cse.yorku.ca/~oz/hash.html#djb2
+// Use above algorithm to generate token hash.
+
+const urlTokenizer = new (class {
+ constructor() {
+ this._chars = '0123456789%abcdefghijklmnopqrstuvwxyz';
+ this._validTokenChars = new Uint8Array(128);
+ for ( let i = 0, n = this._chars.length; i < n; i++ ) {
+ this._validTokenChars[this._chars.charCodeAt(i)] = i + 1;
+ }
+
+ this._urlIn = '';
+ this._urlOut = '';
+ this._tokenized = false;
+ this._hasQuery = 0;
+ // https://www.reddit.com/r/uBlockOrigin/comments/dzw57l/
+ // Remember: 1 token needs two slots
+ this._tokens = new Uint32Array(2064);
+
+ this.knownTokens = new Uint8Array(65536);
+ this.resetKnownTokens();
+ }
+
+ setURL(url) {
+ if ( url !== this._urlIn ) {
+ this._urlIn = url;
+ this._urlOut = url.toLowerCase();
+ this._hasQuery = 0;
+ this._tokenized = false;
+ }
+ return this._urlOut;
+ }
+
+ resetKnownTokens() {
+ this.knownTokens.fill(0);
+ this.addKnownToken(DOT_TOKEN_HASH);
+ this.addKnownToken(ANY_TOKEN_HASH);
+ this.addKnownToken(ANY_HTTPS_TOKEN_HASH);
+ this.addKnownToken(ANY_HTTP_TOKEN_HASH);
+ this.addKnownToken(NO_TOKEN_HASH);
+ }
+
+ addKnownToken(th) {
+ this.knownTokens[th & 0xFFFF] = 1;
+ }
+
+ // Tokenize on demand.
+ getTokens(encodeInto) {
+ if ( this._tokenized ) { return this._tokens; }
+ let i = this._tokenize(encodeInto);
+ this._tokens[i+0] = ANY_TOKEN_HASH;
+ this._tokens[i+1] = 0;
+ i += 2;
+ if ( this._urlOut.startsWith('https://') ) {
+ this._tokens[i+0] = ANY_HTTPS_TOKEN_HASH;
+ this._tokens[i+1] = 0;
+ i += 2;
+ } else if ( this._urlOut.startsWith('http://') ) {
+ this._tokens[i+0] = ANY_HTTP_TOKEN_HASH;
+ this._tokens[i+1] = 0;
+ i += 2;
+ }
+ this._tokens[i+0] = NO_TOKEN_HASH;
+ this._tokens[i+1] = 0;
+ this._tokens[i+2] = INVALID_TOKEN_HASH;
+ this._tokenized = true;
+ return this._tokens;
+ }
+
+ hasQuery() {
+ if ( this._hasQuery === 0 ) {
+ const i = this._urlOut.indexOf('?');
+ this._hasQuery = i !== -1 ? i + 1 : -1;
+ }
+ return this._hasQuery > 0;
+ }
+
+ // http://www.cse.yorku.ca/~oz/hash.html#djb2
+
+ tokenHashFromString(s) {
+ const l = s.length;
+ if ( l === 0 ) { return EMPTY_TOKEN_HASH; }
+ const vtc = this._validTokenChars;
+ let th = vtc[s.charCodeAt(0)];
+ for ( let i = 1; i !== 7 /* MAX_TOKEN_LENGTH */ && i !== l; i++ ) {
+ th = (th << 5) + th ^ vtc[s.charCodeAt(i)];
+ }
+ return th & 0xFFFFFFF;
+ }
+
+ stringFromTokenHash(th) {
+ if ( th === 0 ) { return ''; }
+ return th.toString(16);
+ }
+
+ toSelfie() {
+ return sparseBase64.encode(
+ this.knownTokens.buffer,
+ this.knownTokens.byteLength
+ );
+ }
+
+ fromSelfie(selfie) {
+ return sparseBase64.decode(selfie, this.knownTokens.buffer);
+ }
+
+ // https://github.com/chrisaljoudi/uBlock/issues/1118
+ // We limit to a maximum number of tokens.
+
+ _tokenize(encodeInto) {
+ const tokens = this._tokens;
+ let url = this._urlOut;
+ let l = url.length;
+ if ( l === 0 ) { return 0; }
+ if ( l > 2048 ) {
+ url = url.slice(0, 2048);
+ l = 2048;
+ }
+ encodeInto.haystackLen = l;
+ let j = 0;
+ let hasq = -1;
+ mainLoop: {
+ const knownTokens = this.knownTokens;
+ const vtc = this._validTokenChars;
+ const charCodes = encodeInto.haystack;
+ let i = 0, n = 0, ti = 0, th = 0;
+ for (;;) {
+ for (;;) {
+ if ( i === l ) { break mainLoop; }
+ const cc = url.charCodeAt(i);
+ charCodes[i] = cc;
+ i += 1;
+ th = vtc[cc];
+ if ( th !== 0 ) { break; }
+ if ( cc === 0x3F /* '?' */ ) { hasq = i; }
+ }
+ ti = i - 1; n = 1;
+ for (;;) {
+ if ( i === l ) { break; }
+ const cc = url.charCodeAt(i);
+ charCodes[i] = cc;
+ i += 1;
+ const v = vtc[cc];
+ if ( v === 0 ) {
+ if ( cc === 0x3F /* '?' */ ) { hasq = i; }
+ break;
+ }
+ if ( n === 7 /* MAX_TOKEN_LENGTH */ ) { continue; }
+ th = (th << 5) + th ^ v;
+ n += 1;
+ }
+ if ( knownTokens[th & 0xFFFF] !== 0 ) {
+ tokens[j+0] = th & 0xFFFFFFF;
+ tokens[j+1] = ti;
+ j += 2;
+ }
+ }
+ }
+ this._hasQuery = hasq;
+ return j;
+ }
+})();
+
+/******************************************************************************/
+/******************************************************************************/
+
+class FilterCompiler {
+ constructor(other = undefined) {
+ if ( other !== undefined ) {
+ return Object.assign(this, other);
+ }
+ this.reToken = /[%0-9A-Za-z]+/g;
+ this.fromDomainOptList = [];
+ this.toDomainOptList = [];
+ this.tokenIdToNormalizedType = new Map([
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_CNAME, bitFromType('cname') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_CSS, bitFromType('stylesheet') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_DOC, bitFromType('main_frame') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_FONT, bitFromType('font') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_FRAME, bitFromType('sub_frame') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_GENERICBLOCK, bitFromType('unsupported') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_GHIDE, bitFromType('generichide') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_IMAGE, bitFromType('image') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_INLINEFONT, bitFromType('inline-font') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_INLINESCRIPT, bitFromType('inline-script') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_MEDIA, bitFromType('media') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_OBJECT, bitFromType('object') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_OTHER, bitFromType('other') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_PING, bitFromType('ping') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_POPUNDER, bitFromType('popunder') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_POPUP, bitFromType('popup') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_SCRIPT, bitFromType('script') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_SHIDE, bitFromType('specifichide') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_XHR, bitFromType('xmlhttprequest') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_WEBRTC, bitFromType('unsupported') ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_WEBSOCKET, bitFromType('websocket') ],
+ ]);
+ this.modifierIdToNormalizedId = new Map([
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_CSP, MODIFIER_TYPE_CSP ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_PERMISSIONS, MODIFIER_TYPE_PERMISSIONS ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECT, MODIFIER_TYPE_REDIRECT ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE, MODIFIER_TYPE_REDIRECTRULE ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_REMOVEPARAM, MODIFIER_TYPE_REMOVEPARAM ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM, MODIFIER_TYPE_URLTRANSFORM ],
+ [ sfp.NODE_TYPE_NET_OPTION_NAME_REPLACE, MODIFIER_TYPE_REPLACE ],
+ ]);
+ // These top 100 "bad tokens" are collated using the "miss" histogram
+ // from tokenHistograms(). The "score" is their occurrence among the
+ // 200K+ URLs used in the benchmark and executed against default
+ // filter lists.
+ this.badTokens = new Map([
+ [ 'https',123617 ],
+ [ 'com',76987 ],
+ [ 'js',43620 ],
+ [ 'www',33129 ],
+ [ 'jpg',32221 ],
+ [ 'images',31812 ],
+ [ 'css',19715 ],
+ [ 'png',19140 ],
+ [ 'static',15724 ],
+ [ 'net',15239 ],
+ [ 'de',13155 ],
+ [ 'img',11109 ],
+ [ 'assets',10746 ],
+ [ 'min',7807 ],
+ [ 'cdn',7568 ],
+ [ 'content',6900 ],
+ [ 'wp',6444 ],
+ [ 'fonts',6095 ],
+ [ 'svg',5976 ],
+ [ 'http',5813 ],
+ [ 'ssl',5735 ],
+ [ 'amazon',5440 ],
+ [ 'ru',5427 ],
+ [ 'fr',5199 ],
+ [ 'facebook',5178 ],
+ [ 'en',5146 ],
+ [ 'image',5028 ],
+ [ 'html',4837 ],
+ [ 'media',4833 ],
+ [ 'co',4783 ],
+ [ 'php',3972 ],
+ [ '2019',3943 ],
+ [ 'org',3924 ],
+ [ 'jquery',3531 ],
+ [ '02',3438 ],
+ [ 'api',3382 ],
+ [ 'gif',3350 ],
+ [ 'eu',3322 ],
+ [ 'prod',3289 ],
+ [ 'woff2',3200 ],
+ [ 'logo',3194 ],
+ [ 'themes',3107 ],
+ [ 'icon',3048 ],
+ [ 'google',3026 ],
+ [ 'v1',3019 ],
+ [ 'uploads',2963 ],
+ [ 'googleapis',2860 ],
+ [ 'v3',2816 ],
+ [ 'tv',2762 ],
+ [ 'icons',2748 ],
+ [ 'core',2601 ],
+ [ 'gstatic',2581 ],
+ [ 'ac',2509 ],
+ [ 'utag',2466 ],
+ [ 'id',2459 ],
+ [ 'ver',2448 ],
+ [ 'rsrc',2387 ],
+ [ 'files',2361 ],
+ [ 'uk',2357 ],
+ [ 'us',2271 ],
+ [ 'pl',2262 ],
+ [ 'common',2205 ],
+ [ 'public',2076 ],
+ [ '01',2016 ],
+ [ 'na',1957 ],
+ [ 'v2',1954 ],
+ [ '12',1914 ],
+ [ 'thumb',1895 ],
+ [ 'web',1853 ],
+ [ 'ui',1841 ],
+ [ 'default',1825 ],
+ [ 'main',1737 ],
+ [ 'false',1715 ],
+ [ '2018',1697 ],
+ [ 'embed',1639 ],
+ [ 'player',1634 ],
+ [ 'dist',1599 ],
+ [ 'woff',1593 ],
+ [ 'global',1593 ],
+ [ 'json',1572 ],
+ [ '11',1566 ],
+ [ '600',1559 ],
+ [ 'app',1556 ],
+ [ 'styles',1533 ],
+ [ 'plugins',1526 ],
+ [ '274',1512 ],
+ [ 'random',1505 ],
+ [ 'sites',1505 ],
+ [ 'imasdk',1501 ],
+ [ 'bridge3',1501 ],
+ [ 'news',1496 ],
+ [ 'width',1494 ],
+ [ 'thumbs',1485 ],
+ [ 'ttf',1470 ],
+ [ 'ajax',1463 ],
+ [ 'user',1454 ],
+ [ 'scripts',1446 ],
+ [ 'twitter',1440 ],
+ [ 'crop',1431 ],
+ [ 'new',1412],
+ ]);
+ this.reset();
+ }
+
+ reset() {
+ this.action = BLOCK_REALM;
+ // anchor: bit vector
+ // 0000 (0x0): no anchoring
+ // 0001 (0x1): anchored to the end of the URL.
+ // 0010 (0x2): anchored to the start of the URL.
+ // 0011 (0x3): anchored to the start and end of the URL.
+ // 0100 (0x4): anchored to the hostname of the URL.
+ // 0101 (0x5): anchored to the hostname and end of the URL.
+ this.anchor = 0;
+ this.badFilter = false;
+ this.error = undefined;
+ this.modifyType = undefined;
+ this.modifyValue = undefined;
+ this.pattern = '';
+ this.patternMatchCase = false;
+ this.party = ANYPARTY_REALM;
+ this.optionUnitBits = 0;
+ this.fromDomainOpt = '';
+ this.toDomainOpt = '';
+ this.denyallowOpt = '';
+ this.headerOpt = undefined;
+ this.isPureHostname = false;
+ this.isGeneric = false;
+ this.isRegex = false;
+ this.strictParty = 0;
+ this.token = '*';
+ this.tokenHash = NO_TOKEN_HASH;
+ this.tokenBeg = 0;
+ this.typeBits = 0;
+ this.notTypeBits = 0;
+ this.methodBits = 0;
+ this.notMethodBits = 0;
+ this.wildcardPos = -1;
+ this.caretPos = -1;
+ return this;
+ }
+
+ start(/* writer */) {
+ }
+
+ finish(/* writer */) {
+ }
+
+ clone() {
+ return new FilterCompiler(this);
+ }
+
+ normalizeRegexSource(s) {
+ try {
+ const re = new RegExp(s);
+ return re.source;
+ } catch (ex) {
+ }
+ return '';
+ }
+
+ processMethodOption(value) {
+ for ( const method of value.split('|') ) {
+ if ( method.charCodeAt(0) === 0x7E /* '~' */ ) {
+ const bit = FilteringContext.getMethod(method.slice(1)) || 0;
+ if ( bit === 0 ) { continue; }
+ this.notMethodBits |= bit;
+ } else {
+ const bit = FilteringContext.getMethod(method) || 0;
+ if ( bit === 0 ) { continue; }
+ this.methodBits |= bit;
+ }
+ }
+ this.methodBits &= ~this.notMethodBits;
+ }
+
+ // https://github.com/chrisaljoudi/uBlock/issues/589
+ // Be ready to handle multiple negated types
+
+ processTypeOption(id, not) {
+ if ( id !== -1 ) {
+ const typeBit = this.tokenIdToNormalizedType.get(id);
+ if ( not ) {
+ this.notTypeBits |= typeBit;
+ } else {
+ this.typeBits |= typeBit;
+ }
+ return;
+ }
+ // `all` option
+ if ( not ) {
+ this.notTypeBits |= allTypesBits;
+ } else {
+ this.typeBits |= allTypesBits;
+ }
+ }
+
+ processPartyOption(firstParty, not) {
+ if ( not ) {
+ firstParty = !firstParty;
+ }
+ this.party |= firstParty ? FIRSTPARTY_REALM : THIRDPARTY_REALM;
+ }
+
+ processHostnameList(iter, out = []) {
+ let i = 0;
+ for ( const { hn, not, bad } of iter ) {
+ if ( bad ) { return ''; }
+ out[i] = not ? `~${hn}` : hn;
+ i += 1;
+ }
+ out.length = i;
+ return i === 1 ? out[0] : out.join('|');
+ }
+
+ processModifierOption(modifier, value) {
+ if ( this.modifyType !== undefined ) { return false; }
+ const normalized = this.modifierIdToNormalizedId.get(modifier);
+ if ( normalized === undefined ) { return false; }
+ this.modifyType = normalized;
+ this.modifyValue = value || '';
+ return true;
+ }
+
+ processCspOption(value) {
+ this.modifyType = MODIFIER_TYPE_CSP;
+ this.modifyValue = value || '';
+ this.optionUnitBits |= MODIFY_BIT;
+ return true;
+ }
+
+ processOptionWithValue(parser, id) {
+ switch ( id ) {
+ case sfp.NODE_TYPE_NET_OPTION_NAME_CSP:
+ if ( this.processCspOption(parser.getNetOptionValue(id)) === false ) { return false; }
+ break;
+ case sfp.NODE_TYPE_NET_OPTION_NAME_DENYALLOW:
+ this.denyallowOpt = this.processHostnameList(
+ parser.getNetFilterDenyallowOptionIterator(),
+ );
+ if ( this.denyallowOpt === '' ) { return false; }
+ this.optionUnitBits |= DENYALLOW_BIT;
+ break;
+ case sfp.NODE_TYPE_NET_OPTION_NAME_FROM:
+ this.fromDomainOpt = this.processHostnameList(
+ parser.getNetFilterFromOptionIterator(),
+ this.fromDomainOptList
+ );
+ if ( this.fromDomainOpt === '' ) { return false; }
+ this.optionUnitBits |= FROM_BIT;
+ break;
+ case sfp.NODE_TYPE_NET_OPTION_NAME_HEADER: {
+ this.headerOpt = parser.getNetOptionValue(id) || '';
+ this.optionUnitBits |= HEADER_BIT;
+ break;
+ }
+ case sfp.NODE_TYPE_NET_OPTION_NAME_METHOD:
+ this.processMethodOption(parser.getNetOptionValue(id));
+ this.optionUnitBits |= METHOD_BIT;
+ break;
+ case sfp.NODE_TYPE_NET_OPTION_NAME_PERMISSIONS:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_REMOVEPARAM:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_REPLACE:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM:
+ if ( this.processModifierOption(id, parser.getNetOptionValue(id)) === false ) {
+ return false;
+ }
+ this.optionUnitBits |= MODIFY_BIT;
+ break;
+ case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECT: {
+ const actualId = this.action === ALLOW_REALM
+ ? sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE
+ : id;
+ if ( this.processModifierOption(actualId, parser.getNetOptionValue(id)) === false ) {
+ return false;
+ }
+ this.optionUnitBits |= MODIFY_BIT;
+ break;
+ }
+ case sfp.NODE_TYPE_NET_OPTION_NAME_TO:
+ this.toDomainOpt = this.processHostnameList(
+ parser.getNetFilterToOptionIterator(),
+ this.toDomainOptList
+ );
+ if ( this.toDomainOpt === '' ) { return false; }
+ this.optionUnitBits |= TO_BIT;
+ break;
+ default:
+ break;
+ }
+ return true;
+ }
+
+ process(parser) {
+ // important!
+ this.reset();
+
+ if ( parser.hasError() ) {
+ return this.FILTER_INVALID;
+ }
+
+ if ( parser.isException() ) {
+ this.action = ALLOW_REALM;
+ }
+
+ if ( parser.isLeftHnAnchored() ) {
+ this.anchor |= 0b100;
+ } else if ( parser.isLeftAnchored() ) {
+ this.anchor |= 0b010;
+ }
+ if ( parser.isRightAnchored() ) {
+ this.anchor |= 0b001;
+ }
+
+ this.pattern = parser.getNetPattern();
+ if ( parser.isHostnamePattern() ) {
+ this.isPureHostname = true;
+ } else if ( parser.isGenericPattern() ) {
+ this.isGeneric = true;
+ } else if ( parser.isRegexPattern() ) {
+ this.isRegex = true;
+ }
+
+ for ( const type of parser.getNodeTypes() ) {
+ switch ( type ) {
+ case sfp.NODE_TYPE_NET_OPTION_NAME_1P:
+ this.processPartyOption(true, parser.isNegatedOption(type));
+ break;
+ case sfp.NODE_TYPE_NET_OPTION_NAME_STRICT1P:
+ this.strictParty = this.strictParty === -1 ? 0 : 1;
+ this.optionUnitBits |= STRICT_PARTY_BIT;
+ break;
+ case sfp.NODE_TYPE_NET_OPTION_NAME_3P:
+ this.processPartyOption(false, parser.isNegatedOption(type));
+ break;
+ case sfp.NODE_TYPE_NET_OPTION_NAME_STRICT3P:
+ this.strictParty = this.strictParty === 1 ? 0 : -1;
+ this.optionUnitBits |= STRICT_PARTY_BIT;
+ break;
+ case sfp.NODE_TYPE_NET_OPTION_NAME_ALL:
+ this.processTypeOption(-1);
+ break;
+ case sfp.NODE_TYPE_NET_OPTION_NAME_BADFILTER:
+ this.badFilter = true;
+ break;
+ case sfp.NODE_TYPE_NET_OPTION_NAME_CNAME:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_CSS:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_DOC:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_FONT:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_FRAME:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_GENERICBLOCK:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_GHIDE:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_IMAGE:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_INLINEFONT:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_INLINESCRIPT:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_MEDIA:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_OBJECT:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_OTHER:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_PING:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_POPUNDER:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_POPUP:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_SCRIPT:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_SHIDE:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_XHR:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_WEBRTC:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_WEBSOCKET:
+ this.processTypeOption(type, parser.isNegatedOption(type));
+ break;
+ case sfp.NODE_TYPE_NET_OPTION_NAME_CSP:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_DENYALLOW:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_FROM:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_HEADER:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_METHOD:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_PERMISSIONS:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECT:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_REMOVEPARAM:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_REPLACE:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_TO:
+ case sfp.NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM:
+ if ( this.processOptionWithValue(parser, type) === false ) {
+ return this.FILTER_INVALID;
+ }
+ break;
+ case sfp.NODE_TYPE_NET_OPTION_NAME_EHIDE: {
+ const not = parser.isNegatedOption(type);
+ this.processTypeOption(sfp.NODE_TYPE_NET_OPTION_NAME_SHIDE, not);
+ this.processTypeOption(sfp.NODE_TYPE_NET_OPTION_NAME_GHIDE, not);
+ break;
+ }
+ case sfp.NODE_TYPE_NET_OPTION_NAME_EMPTY: {
+ const id = this.action === ALLOW_REALM
+ ? sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE
+ : sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECT;
+ if ( this.processModifierOption(id, 'empty') === false ) {
+ return this.FILTER_INVALID;
+ }
+ this.optionUnitBits |= MODIFY_BIT;
+ break;
+ }
+ case sfp.NODE_TYPE_NET_OPTION_NAME_IMPORTANT:
+ this.optionUnitBits |= IMPORTANT_BIT;
+ this.action = BLOCKIMPORTANT_REALM;
+ break;
+ case sfp.NODE_TYPE_NET_OPTION_NAME_MATCHCASE:
+ this.patternMatchCase = true;
+ break;
+ case sfp.NODE_TYPE_NET_OPTION_NAME_MP4: {
+ const id = this.action === ALLOW_REALM
+ ? sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECTRULE
+ : sfp.NODE_TYPE_NET_OPTION_NAME_REDIRECT;
+ if ( this.processModifierOption(id, 'noopmp4-1s') === false ) {
+ return this.FILTER_INVALID;
+ }
+ this.processTypeOption(sfp.NODE_TYPE_NET_OPTION_NAME_MEDIA, false);
+ this.optionUnitBits |= MODIFY_BIT;
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ if ( this.party === ALLPARTIES_REALM ) {
+ this.party = ANYPARTY_REALM;
+ }
+
+ // Negated network types? Toggle on all network type bits.
+ // Negated non-network types can only toggle themselves.
+ //
+ // https://github.com/gorhill/uBlock/issues/2385
+ // Toggle on all network types if:
+ // - at least one network type is negated; or
+ // - no network type is present -- i.e. all network types are
+ // implicitly toggled on
+ if ( this.notTypeBits !== 0 ) {
+ if ( (this.typeBits && allNetworkTypesBits) === allNetworkTypesBits ) {
+ this.typeBits &= ~this.notTypeBits | allNetworkTypesBits;
+ } else {
+ this.typeBits &= ~this.notTypeBits;
+ }
+ this.optionUnitBits |= NOT_TYPE_BIT;
+ }
+
+ // CSP/permissions options implicitly apply only to
+ // document/subdocument.
+ if (
+ this.modifyType === MODIFIER_TYPE_CSP ||
+ this.modifyType === MODIFIER_TYPE_PERMISSIONS
+ ) {
+ if ( this.typeBits === 0 ) {
+ this.processTypeOption(sfp.NODE_TYPE_NET_OPTION_NAME_DOC, false);
+ this.processTypeOption(sfp.NODE_TYPE_NET_OPTION_NAME_FRAME, false);
+ }
+ }
+
+ // https://github.com/gorhill/uBlock/issues/2283
+ // Abort if type is only for unsupported types, otherwise
+ // toggle off `unsupported` bit.
+ if ( this.typeBits & unsupportedTypeBit ) {
+ this.typeBits &= ~unsupportedTypeBit;
+ if ( this.typeBits === 0 ) { return this.FILTER_UNSUPPORTED; }
+ }
+
+ // Plain hostname? (from HOSTS file)
+ if ( this.isPureHostname && parser.hasOptions() === false ) {
+ this.anchor |= 0b100;
+ return this.FILTER_OK;
+ }
+
+ // regex?
+ if ( this.isRegex ) {
+ return this.FILTER_OK;
+ }
+
+ if ( this.isGeneric ) {
+ this.wildcardPos = this.pattern.indexOf('*');
+ this.caretPos = this.pattern.indexOf('^');
+ }
+
+ if ( this.pattern.length > 1024 ) {
+ return this.FILTER_UNSUPPORTED;
+ }
+
+ return this.FILTER_OK;
+ }
+
+ // Given a string, find a good token. Tokens which are too generic,
+ // i.e. very common with a high probability of ending up as a miss,
+ // are not good. Avoid if possible. This has a significant positive
+ // impact on performance.
+ //
+ // For pattern-less removeparam filters, try to derive a pattern from
+ // the removeparam value.
+
+ makeToken() {
+ if ( this.pattern === '*' ) {
+ if ( this.modifyType !== MODIFIER_TYPE_REMOVEPARAM ) { return; }
+ return this.extractTokenFromQuerypruneValue();
+ }
+ if ( this.isRegex ) {
+ return this.extractTokenFromRegex(this.pattern);
+ }
+ this.extractTokenFromPattern(this.pattern);
+ }
+
+ // Note: a one-char token is better than a documented bad token.
+ extractTokenFromPattern(pattern) {
+ this.reToken.lastIndex = 0;
+ let bestMatch = null;
+ let bestBadness = 0x7FFFFFFF;
+ for (;;) {
+ const match = this.reToken.exec(pattern);
+ if ( match === null ) { break; }
+ const token = match[0];
+ const badness = token.length > 1 ? this.badTokens.get(token) || 0 : 1;
+ if ( badness >= bestBadness ) { continue; }
+ if ( match.index > 0 ) {
+ const c = pattern.charCodeAt(match.index - 1);
+ if ( c === 0x2A /* '*' */ ) { continue; }
+ }
+ if ( token.length < MAX_TOKEN_LENGTH ) {
+ const lastIndex = this.reToken.lastIndex;
+ if ( lastIndex < pattern.length ) {
+ const c = pattern.charCodeAt(lastIndex);
+ if ( c === 0x2A /* '*' */ ) { continue; }
+ }
+ }
+ bestMatch = match;
+ if ( badness === 0 ) { break; }
+ bestBadness = badness;
+ }
+ if ( bestMatch !== null ) {
+ this.token = bestMatch[0];
+ this.tokenHash = urlTokenizer.tokenHashFromString(this.token);
+ this.tokenBeg = bestMatch.index;
+ }
+ }
+
+ // https://github.com/gorhill/uBlock/issues/2781
+ // For efficiency purpose, try to extract a token from a regex-based
+ // filter.
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1145#issuecomment-657036902
+ // Mind `\b` directives: `/\bads\b/` should result in token being `ads`,
+ // not `bads`.
+ extractTokenFromRegex(pattern) {
+ pattern = sfp.utils.regex.toTokenizableStr(pattern);
+ this.reToken.lastIndex = 0;
+ let bestToken;
+ let bestBadness = 0x7FFFFFFF;
+ for (;;) {
+ const matches = this.reToken.exec(pattern);
+ if ( matches === null ) { break; }
+ const { 0: token, index } = matches;
+ if ( index === 0 || pattern.charAt(index - 1) === '\x01' ) {
+ continue;
+ }
+ const { lastIndex } = this.reToken;
+ if (
+ token.length < MAX_TOKEN_LENGTH && (
+ lastIndex === pattern.length ||
+ pattern.charAt(lastIndex) === '\x01'
+ )
+ ) {
+ continue;
+ }
+ const badness = token.length > 1
+ ? this.badTokens.get(token) || 0
+ : 1;
+ if ( badness < bestBadness ) {
+ bestToken = token;
+ if ( badness === 0 ) { break; }
+ bestBadness = badness;
+ }
+ }
+ if ( bestToken !== undefined ) {
+ this.token = bestToken.toLowerCase();
+ this.tokenHash = urlTokenizer.tokenHashFromString(this.token);
+ }
+ }
+
+ // https://github.com/uBlockOrigin/uAssets/discussions/14683#discussioncomment-3559284
+ // If the removeparam value is a regex, unescape escaped commas
+ extractTokenFromQuerypruneValue() {
+ const pattern = this.modifyValue;
+ if ( pattern === '*' || pattern.charCodeAt(0) === 0x7E /* '~' */ ) {
+ return;
+ }
+ const match = /^\/(.+)\/i?$/.exec(pattern);
+ if ( match !== null ) {
+ return this.extractTokenFromRegex(
+ match[1].replace(/(\{\d*)\\,/, '$1,')
+ );
+ }
+ if ( pattern.startsWith('|') ) {
+ return this.extractTokenFromRegex('\\b' + pattern.slice(1));
+ }
+ this.extractTokenFromPattern(pattern.toLowerCase());
+ }
+
+ hasNoOptionUnits() {
+ return this.optionUnitBits === 0;
+ }
+
+ isJustOrigin() {
+ if ( this.optionUnitBits !== FROM_BIT ) { return false; }
+ if ( this.isRegex ) { return false; }
+ if ( /[\/~]/.test(this.fromDomainOpt) ) { return false; }
+ if ( this.pattern === '*' ) { return true; }
+ if ( this.anchor !== 0b010 ) { return false; }
+ if ( /^(?:http[s*]?:(?:\/\/)?)$/.test(this.pattern) ) { return true; }
+ return false;
+ }
+
+ domainIsEntity(s) {
+ const l = s.length;
+ return l > 2 &&
+ s.charCodeAt(l-1) === 0x2A /* '*' */ &&
+ s.charCodeAt(l-2) === 0x2E /* '.' */;
+ }
+
+ compile(parser, writer) {
+ const r = this.process(parser);
+
+ // Ignore non-static network filters
+ if ( r === this.FILTER_INVALID ) { return false; }
+
+ // Ignore filters with unsupported options
+ if ( r === this.FILTER_UNSUPPORTED ) {
+ const who = writer.properties.get('name') || '?';
+ this.error = `Invalid network filter in ${who}: ${parser.raw}`;
+ return false;
+ }
+
+ writer.select(
+ this.badFilter
+ ? 'NETWORK_FILTERS:BAD'
+ : 'NETWORK_FILTERS:GOOD'
+ );
+
+ // Reminder:
+ // `redirect=` is a combination of a `redirect-rule` filter and a
+ // block filter.
+ if ( this.modifyType === MODIFIER_TYPE_REDIRECT ) {
+ this.modifyType = MODIFIER_TYPE_REDIRECTRULE;
+ // Do not generate block rule when compiling to DNR ruleset
+ if ( parser.options.toDNR !== true ) {
+ const parsedBlock = this.clone();
+ parsedBlock.modifyType = undefined;
+ parsedBlock.optionUnitBits &= ~MODIFY_BIT;
+ parsedBlock.compileToFilter(writer);
+ }
+ }
+
+ this.compileToFilter(writer);
+
+ return true;
+ }
+
+ compileToFilter(writer) {
+ // Pure hostnames, use more efficient dictionary lookup
+ if ( this.isPureHostname && this.hasNoOptionUnits() ) {
+ this.tokenHash = DOT_TOKEN_HASH;
+ this.compileToAtomicFilter(this.pattern, writer);
+ return;
+ }
+
+ this.makeToken();
+
+ // Special pattern/option cases:
+ // - `*$domain=...`
+ // - `|http://$domain=...`
+ // - `|https://$domain=...`
+ // The semantic of "just-origin" filters is that contrary to normal
+ // filters, the original filter is split into as many filters as there
+ // are entries in the `domain=` option.
+ if ( this.isJustOrigin() ) {
+ if ( this.pattern === '*' || this.pattern.startsWith('http*') ) {
+ this.tokenHash = ANY_TOKEN_HASH;
+ } else if /* 'https:' */ ( this.pattern.startsWith('https') ) {
+ this.tokenHash = ANY_HTTPS_TOKEN_HASH;
+ } else /* 'http:' */ {
+ this.tokenHash = ANY_HTTP_TOKEN_HASH;
+ }
+ for ( const hn of this.fromDomainOptList ) {
+ this.compileToAtomicFilter(hn, writer);
+ }
+ return;
+ }
+
+ const units = [];
+
+ // Pattern
+ const patternClass = this.compilePattern(units);
+
+ // Anchor: must never appear before pattern unit
+ if ( (this.anchor & 0b100) !== 0 ) {
+ if ( this.isPureHostname ) {
+ units.push(FilterAnchorHn.compile());
+ } else {
+ units.push(FilterAnchorHnLeft.compile());
+ }
+ } else if ( (this.anchor & 0b010) !== 0 ) {
+ units.push(FilterAnchorLeft.compile());
+ }
+ if ( (this.anchor & 0b001) !== 0 ) {
+ units.push(FilterAnchorRight.compile());
+ }
+
+ // Method(s)
+ if ( this.methodBits !== 0 || this.notMethodBits !== 0 ) {
+ units.push(FilterMethod.compile(this));
+ }
+
+ // Not types
+ if ( this.notTypeBits !== 0 ) {
+ units.push(FilterNotType.compile(this));
+ }
+
+ // Strict partiness
+ if ( this.strictParty !== 0 ) {
+ units.push(FilterStrictParty.compile(this));
+ }
+
+ // Origin
+ if ( this.fromDomainOpt !== '' ) {
+ compileFromDomainOpt(
+ this.fromDomainOptList,
+ units.length !== 0 && patternClass.isSlow === true,
+ units
+ );
+ }
+
+ // Destination
+ if ( this.toDomainOpt !== '' ) {
+ compileToDomainOpt(
+ this.toDomainOptList,
+ units.length !== 0 && patternClass.isSlow === true,
+ units
+ );
+ }
+
+ // Deny-allow
+ if ( this.denyallowOpt !== '' ) {
+ units.push(FilterDenyAllow.compile(this));
+ }
+
+ // Header
+ if ( this.headerOpt !== undefined ) {
+ units.push(FilterOnHeaders.compile(this));
+ this.action |= HEADERS_REALM;
+ }
+
+ // Important
+ //
+ // IMPORTANT: must always appear at the end of the sequence, so as to
+ // ensure $isBlockImportant is set only for matching filters.
+ if ( (this.optionUnitBits & IMPORTANT_BIT) !== 0 ) {
+ units.push(FilterImportant.compile());
+ }
+
+ // Modifier
+ //
+ // IMPORTANT: the modifier unit MUST always appear first in a sequence
+ if ( this.modifyType !== undefined ) {
+ units.unshift(FilterModifier.compile(this));
+ this.action = (this.action & ~ActionBitsMask) |
+ modifierBitsFromType.get(this.modifyType);
+ }
+
+ this.compileToAtomicFilter(
+ units.length === 1
+ ? units[0]
+ : FilterCompositeAll.compile(units),
+ writer
+ );
+ }
+
+ compilePattern(units) {
+ if ( this.isRegex ) {
+ units.push(FilterRegex.compile(this));
+ return FilterRegex;
+ }
+ if ( this.pattern === '*' ) {
+ units.push(FilterPatternAny.compile());
+ return FilterPatternAny;
+ }
+ if ( this.tokenHash === NO_TOKEN_HASH ) {
+ units.push(FilterPatternGeneric.compile(this));
+ return FilterPatternGeneric;
+ }
+ if ( this.wildcardPos === -1 ) {
+ if ( this.caretPos === -1 ) {
+ units.push(FilterPatternPlain.compile(this));
+ return FilterPatternPlain;
+ }
+ if ( this.caretPos === (this.pattern.length - 1) ) {
+ this.pattern = this.pattern.slice(0, -1);
+ units.push(FilterPatternPlain.compile(this));
+ units.push(FilterTrailingSeparator.compile());
+ return FilterPatternPlain;
+ }
+ }
+ units.push(FilterPatternGeneric.compile(this));
+ return FilterPatternGeneric;
+ }
+
+ compileToAtomicFilter(fdata, writer) {
+ const catBits = this.action | this.party;
+ let { typeBits } = this;
+
+ // Typeless
+ if ( typeBits === 0 ) {
+ writer.push([ catBits, this.tokenHash, fdata ]);
+ return;
+ }
+ // If all network types are set, create a typeless filter. Excluded
+ // network types are tested at match time, se we act as if they are
+ // set.
+ if ( (typeBits & allNetworkTypesBits) === allNetworkTypesBits ) {
+ writer.push([ catBits, this.tokenHash, fdata ]);
+ typeBits &= ~allNetworkTypesBits;
+ if ( typeBits === 0 ) { return; }
+ }
+ // One filter per specific types
+ let bitOffset = 1;
+ do {
+ if ( typeBits & 1 ) {
+ writer.push([
+ catBits | (bitOffset << TypeBitsOffset),
+ this.tokenHash,
+ fdata
+ ]);
+ }
+ bitOffset += 1;
+ typeBits >>>= 1;
+ } while ( typeBits !== 0 );
+ }
+}
+
+// These are to quickly test whether a filter is composite
+const FROM_BIT = 0b000000001;
+const TO_BIT = 0b000000010;
+const DENYALLOW_BIT = 0b000000100;
+const HEADER_BIT = 0b000001000;
+const STRICT_PARTY_BIT = 0b000010000;
+const MODIFY_BIT = 0b000100000;
+const NOT_TYPE_BIT = 0b001000000;
+const IMPORTANT_BIT = 0b010000000;
+const METHOD_BIT = 0b100000000;
+
+FilterCompiler.prototype.FILTER_OK = 0;
+FilterCompiler.prototype.FILTER_INVALID = 1;
+FilterCompiler.prototype.FILTER_UNSUPPORTED = 2;
+
+/******************************************************************************/
+/******************************************************************************/
+
+const FilterContainer = function() {
+ this.compilerVersion = '10';
+ this.selfieVersion = '10';
+
+ this.MAX_TOKEN_LENGTH = MAX_TOKEN_LENGTH;
+ this.optimizeTaskId = undefined;
+ // As long as CategoryCount is reasonably low, we will use an array to
+ // store buckets using category bits as index. If ever CategoryCount
+ // becomes too large, we can just go back to using a Map.
+ this.bitsToBucket = new Map();
+ this.goodFilters = new Set();
+ this.badFilters = new Set();
+ this.unitsToOptimize = [];
+ this.reset();
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.prime = function() {
+ origHNTrieContainer.reset(
+ keyvalStore.getItem('SNFE.origHNTrieContainer.trieDetails')
+ );
+ destHNTrieContainer.reset(
+ keyvalStore.getItem('SNFE.destHNTrieContainer.trieDetails')
+ );
+ bidiTriePrime();
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.reset = function() {
+ this.processedFilterCount = 0;
+ this.acceptedCount = 0;
+ this.discardedCount = 0;
+ this.goodFilters.clear();
+ this.badFilters.clear();
+ this.unitsToOptimize.length = 0;
+ this.bitsToBucket.clear();
+
+ urlTokenizer.resetKnownTokens();
+
+ filterDataReset();
+ filterRefsReset();
+ origHNTrieContainer.reset();
+ destHNTrieContainer.reset();
+ bidiTrie.reset();
+ filterArgsToUnit.clear();
+
+ // Cancel potentially pending optimization run.
+ if ( this.optimizeTaskId !== undefined ) {
+ dropTask(this.optimizeTaskId);
+ this.optimizeTaskId = undefined;
+ }
+
+ this.notReady = false;
+
+ // Runtime registers
+ this.$catBits = 0;
+ this.$tokenHash = 0;
+ this.$filterUnit = 0;
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.freeze = function() {
+ const unserialize = CompiledListReader.unserialize;
+
+ for ( const line of this.goodFilters ) {
+ if ( this.badFilters.has(line) ) {
+ this.discardedCount += 1;
+ continue;
+ }
+
+ const args = unserialize(line);
+
+ const bits = args[0];
+ const bucket = this.bitsToBucket.get(bits) || (new Map());
+ if ( bucket.size === 0 ) {
+ this.bitsToBucket.set(bits, bucket);
+ }
+
+ const tokenHash = args[1];
+ const fdata = args[2];
+
+ let iunit = bucket.get(tokenHash) || 0;
+
+ if ( tokenHash === DOT_TOKEN_HASH ) {
+ if ( iunit === 0 ) {
+ iunit = FilterHostnameDict.create();
+ bucket.set(DOT_TOKEN_HASH, iunit);
+ this.unitsToOptimize.push({ bits, tokenHash });
+ }
+ FilterHostnameDict.add(iunit, fdata);
+ continue;
+ }
+
+ if ( tokenHash === ANY_TOKEN_HASH ) {
+ if ( iunit === 0 ) {
+ iunit = FilterJustOrigin.create();
+ bucket.set(ANY_TOKEN_HASH, iunit);
+ }
+ FilterJustOrigin.add(iunit, fdata);
+ continue;
+ }
+
+ if ( tokenHash === ANY_HTTPS_TOKEN_HASH ) {
+ if ( iunit === 0 ) {
+ iunit = FilterHTTPSJustOrigin.create();
+ bucket.set(ANY_HTTPS_TOKEN_HASH, iunit);
+ }
+ FilterHTTPSJustOrigin.add(iunit, fdata);
+ continue;
+ }
+
+ if ( tokenHash === ANY_HTTP_TOKEN_HASH ) {
+ if ( iunit === 0 ) {
+ iunit = FilterHTTPJustOrigin.create();
+ bucket.set(ANY_HTTP_TOKEN_HASH, iunit);
+ }
+ FilterHTTPJustOrigin.add(iunit, fdata);
+ continue;
+ }
+
+ urlTokenizer.addKnownToken(tokenHash);
+
+ this.addFilterUnit(bits, tokenHash, filterFromCompiled(fdata));
+
+ // Add block-important filters to the block realm, so as to avoid
+ // to unconditionally match against the block-important realm for
+ // every network request. Block-important filters are quite rare so
+ // the block-important realm should be checked when and only when
+ // there is a matched exception filter, which important filters are
+ // meant to override.
+ if ( (bits & ActionBitsMask) === BLOCKIMPORTANT_REALM ) {
+ this.addFilterUnit(
+ bits & ~IMPORTANT_REALM,
+ tokenHash,
+ filterFromCompiled(fdata)
+ );
+ }
+ }
+
+ this.badFilters.clear();
+ this.goodFilters.clear();
+ filterArgsToUnit.clear();
+
+ this.notReady = false;
+
+ // Optimizing is not critical for the static network filtering engine to
+ // work properly, so defer this until later to allow for reduced delay to
+ // readiness when no valid selfie is available.
+ if ( this.optimizeTaskId !== undefined ) { return; }
+
+ this.optimizeTaskId = queueTask(( ) => {
+ this.optimizeTaskId = undefined;
+ this.optimize(30);
+ }, 2000);
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.dnrFromCompiled = function(op, context, ...args) {
+ if ( op === 'begin' ) {
+ Object.assign(context, {
+ good: new Set(),
+ bad: new Set(),
+ invalid: new Set(),
+ filterCount: 0,
+ acceptedFilterCount: 0,
+ rejectedFilterCount: 0,
+ });
+ return;
+ }
+
+ if ( op === 'add' ) {
+ const reader = args[0];
+ reader.select('NETWORK_FILTERS:GOOD');
+ while ( reader.next() ) {
+ context.filterCount += 1;
+ if ( context.good.has(reader.line) === false ) {
+ context.good.add(reader.line);
+ }
+ }
+ reader.select('NETWORK_FILTERS:BAD');
+ while ( reader.next() ) {
+ context.bad.add(reader.line);
+ }
+ return;
+ }
+
+ if ( op !== 'end' ) { return; }
+
+ const { good, bad } = context;
+ const unserialize = CompiledListReader.unserialize;
+ const buckets = new Map();
+
+ for ( const line of good ) {
+ if ( bad.has(line) ) {
+ context.rejectedFilterCount += 1;
+ continue;
+ }
+ context.acceptedFilterCount += 1;
+
+ const args = unserialize(line);
+ const bits = args[0];
+ const tokenHash = args[1];
+ const fdata = args[2];
+
+ if ( buckets.has(bits) === false ) {
+ buckets.set(bits, new Map());
+ }
+ const bucket = buckets.get(bits);
+
+ switch ( tokenHash ) {
+ case DOT_TOKEN_HASH: {
+ if ( bucket.has(DOT_TOKEN_HASH) === false ) {
+ bucket.set(DOT_TOKEN_HASH, [{
+ condition: {
+ requestDomains: []
+ }
+ }]);
+ }
+ const rule = bucket.get(DOT_TOKEN_HASH)[0];
+ rule.condition.requestDomains.push(fdata);
+ break;
+ }
+ case ANY_TOKEN_HASH: {
+ if ( bucket.has(ANY_TOKEN_HASH) === false ) {
+ bucket.set(ANY_TOKEN_HASH, [{
+ condition: {
+ initiatorDomains: []
+ }
+ }]);
+ }
+ const rule = bucket.get(ANY_TOKEN_HASH)[0];
+ rule.condition.initiatorDomains.push(fdata);
+ break;
+ }
+ case ANY_HTTPS_TOKEN_HASH: {
+ if ( bucket.has(ANY_HTTPS_TOKEN_HASH) === false ) {
+ bucket.set(ANY_HTTPS_TOKEN_HASH, [{
+ condition: {
+ urlFilter: '|https://',
+ initiatorDomains: []
+ }
+ }]);
+ }
+ const rule = bucket.get(ANY_HTTPS_TOKEN_HASH)[0];
+ rule.condition.initiatorDomains.push(fdata);
+ break;
+ }
+ case ANY_HTTP_TOKEN_HASH: {
+ if ( bucket.has(ANY_HTTP_TOKEN_HASH) === false ) {
+ bucket.set(ANY_HTTP_TOKEN_HASH, [{
+ condition: {
+ urlFilter: '|http://',
+ initiatorDomains: []
+ }
+ }]);
+ }
+ const rule = bucket.get(ANY_HTTP_TOKEN_HASH)[0];
+ rule.condition.initiatorDomains.push(fdata);
+ break;
+ }
+ default: {
+ if ( bucket.has(EMPTY_TOKEN_HASH) === false ) {
+ bucket.set(EMPTY_TOKEN_HASH, []);
+ }
+ const rule = {};
+ dnrRuleFromCompiled(fdata, rule);
+ bucket.get(EMPTY_TOKEN_HASH).push(rule);
+ break;
+ }
+ }
+ }
+
+ const realms = new Map([
+ [ BLOCK_REALM, 'block' ],
+ [ ALLOW_REALM, 'allow' ],
+ [ REDIRECT_REALM, 'redirect' ],
+ [ REMOVEPARAM_REALM, 'removeparam' ],
+ [ CSP_REALM, 'csp' ],
+ [ PERMISSIONS_REALM, 'permissions' ],
+ [ URLTRANSFORM_REALM, 'uritransform' ],
+ ]);
+ const partyness = new Map([
+ [ ANYPARTY_REALM, '' ],
+ [ FIRSTPARTY_REALM, 'firstParty' ],
+ [ THIRDPARTY_REALM, 'thirdParty' ],
+ ]);
+ const types = new Set([
+ 'no_type',
+ 'stylesheet',
+ 'image',
+ 'object',
+ 'script',
+ 'xmlhttprequest',
+ 'sub_frame',
+ 'main_frame',
+ 'font',
+ 'media',
+ 'websocket',
+ 'ping',
+ 'other',
+ ]);
+ const ruleset = [];
+ for ( const [ realmBits, realmName ] of realms ) {
+ for ( const [ partyBits, partyName ] of partyness ) {
+ for ( const typeName in typeNameToTypeValue ) {
+ if ( types.has(typeName) === false ) { continue; }
+ const typeBits = typeNameToTypeValue[typeName];
+ const bits = realmBits | partyBits | typeBits;
+ const bucket = buckets.get(bits);
+ if ( bucket === undefined ) { continue; }
+ for ( const rules of bucket.values() ) {
+ for ( const rule of rules ) {
+ rule.action = rule.action || {};
+ rule.action.type = realmName;
+ if ( partyName !== '' ) {
+ rule.condition = rule.condition || {};
+ rule.condition.domainType = partyName;
+ }
+ if ( typeName !== 'no_type' ) {
+ rule.condition = rule.condition || {};
+ rule.condition.resourceTypes = [ typeName ];
+ }
+ ruleset.push(rule);
+ }
+ }
+ }
+ }
+ }
+
+ // Collect generichide filters
+ const generichideExclusions = [];
+ {
+ const bucket = buckets.get(ALLOW_REALM | typeNameToTypeValue['generichide']);
+ if ( bucket ) {
+ for ( const rules of bucket.values() ) {
+ for ( const rule of rules ) {
+ if ( rule.condition === undefined ) { continue; }
+ if ( rule.condition.initiatorDomains ) {
+ generichideExclusions.push(...rule.condition.initiatorDomains);
+ } else if ( rule.condition.requestDomains ) {
+ generichideExclusions.push(...rule.condition.requestDomains);
+ }
+ }
+ }
+ }
+ }
+
+ // Detect and attempt salvage of rules with entity-based hostnames and/or
+ // regex-based domains.
+ const isUnsupportedDomain = hn => hn.endsWith('.*') || hn.startsWith('/');
+ for ( const rule of ruleset ) {
+ if ( rule.condition === undefined ) { continue; }
+ for ( const prop of [ 'Initiator', 'Request' ] ) {
+ const hitProp = `${prop.toLowerCase()}Domains`;
+ if ( Array.isArray(rule.condition[hitProp]) ) {
+ if ( rule.condition[hitProp].some(hn => isUnsupportedDomain(hn)) ) {
+ const domains = rule.condition[hitProp].filter(
+ hn => isUnsupportedDomain(hn) === false
+ );
+ if ( domains.length === 0 ) {
+ dnrAddRuleError(rule, `Can't salvage rule with unsupported domain= option: ${rule.condition[hitProp].join('|')}`);
+ } else {
+ dnrAddRuleWarning(rule, `Salvaged rule by ignoring ${rule.condition[hitProp].length - domains.length} unsupported domain= option: ${rule.condition[hitProp].join('|')}`);
+ rule.condition[hitProp] = domains;
+ }
+ }
+ }
+ const missProp = `excluded${prop}Domains`;
+ if ( Array.isArray(rule.condition[missProp]) ) {
+ if ( rule.condition[missProp].some(hn => isUnsupportedDomain(hn)) ) {
+ const domains = rule.condition[missProp].filter(
+ hn => isUnsupportedDomain(hn) === false
+ );
+ rule.condition[missProp] =
+ domains.length !== 0
+ ? domains
+ : undefined;
+ }
+ }
+ }
+ }
+
+ // Patch modifier filters
+ for ( const rule of ruleset ) {
+ if ( rule.__modifierType === undefined ) { continue; }
+ switch ( rule.__modifierType ) {
+ case 'csp':
+ rule.action.type = 'modifyHeaders';
+ rule.action.responseHeaders = [{
+ header: 'content-security-policy',
+ operation: 'append',
+ value: rule.__modifierValue,
+ }];
+ if ( rule.__modifierAction === ALLOW_REALM ) {
+ dnrAddRuleError(rule, `Unsupported csp exception: ${rule.__modifierValue}`);
+ }
+ break;
+ case 'permissions':
+ rule.action.type = 'modifyHeaders';
+ rule.action.responseHeaders = [{
+ header: 'permissions-policy',
+ operation: 'append',
+ value: rule.__modifierValue.split('|').join(', '),
+ }];
+ if ( rule.__modifierAction === ALLOW_REALM ) {
+ dnrAddRuleError(rule, `Unsupported permissions exception: ${rule.__modifierValue}`);
+ }
+ break;
+ case 'redirect-rule': {
+ let priority = rule.priority || 1;
+ let token = rule.__modifierValue;
+ if ( token !== '' ) {
+ const match = /:(\d+)$/.exec(token);
+ if ( match !== null ) {
+ priority += parseInt(match[1], 10);
+ token = token.slice(0, match.index);
+ }
+ }
+ const resource = context.extensionPaths.get(token);
+ if ( rule.__modifierValue !== '' && resource === undefined ) {
+ dnrAddRuleError(rule, `Unpatchable redirect filter: ${rule.__modifierValue}`);
+ }
+ if ( rule.__modifierAction !== ALLOW_REALM ) {
+ const extensionPath = resource || token;
+ rule.action.type = 'redirect';
+ rule.action.redirect = { extensionPath };
+ rule.priority = priority + 1;
+ } else {
+ rule.action.type = 'block';
+ rule.priority = priority + 2;
+ }
+ break;
+ }
+ case 'removeparam':
+ rule.action.type = 'redirect';
+ if ( rule.__modifierValue === '|' ) {
+ rule.__modifierValue = '';
+ }
+ if ( rule.__modifierValue !== '' ) {
+ rule.action.redirect = {
+ transform: {
+ queryTransform: {
+ removeParams: [ rule.__modifierValue ]
+ }
+ }
+ };
+ if ( /^~?\/.+\/$/.test(rule.__modifierValue) ) {
+ dnrAddRuleError(rule, `Unsupported regex-based removeParam: ${rule.__modifierValue}`);
+ }
+ } else {
+ rule.action.redirect = {
+ transform: {
+ query: ''
+ }
+ };
+ }
+ if ( rule.condition === undefined ) {
+ rule.condition = {
+ };
+ }
+ if ( rule.condition.resourceTypes === undefined ) {
+ rule.condition.resourceTypes = [
+ 'main_frame',
+ 'sub_frame',
+ 'xmlhttprequest',
+ ];
+ }
+ if ( rule.__modifierAction === ALLOW_REALM ) {
+ dnrAddRuleError(rule, `Unsupported removeparam exception: ${rule.__modifierValue}`);
+ }
+ break;
+ case 'uritransform': {
+ const path = rule.__modifierValue;
+ let priority = rule.priority || 1;
+ if ( rule.__modifierAction !== ALLOW_REALM ) {
+ const transform = { path };
+ rule.action.type = 'redirect';
+ rule.action.redirect = { transform };
+ rule.priority = priority + 1;
+ } else {
+ rule.action.type = 'block';
+ rule.priority = priority + 2;
+ }
+ break;
+ }
+ default:
+ dnrAddRuleError(rule, `Unsupported modifier ${rule.__modifierType}`);
+ break;
+ }
+ }
+
+ return {
+ ruleset,
+ filterCount: context.filterCount,
+ acceptedFilterCount: context.acceptedFilterCount,
+ rejectedFilterCount: context.rejectedFilterCount,
+ generichideExclusions: Array.from(new Set(generichideExclusions)),
+ };
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.addFilterUnit = function(
+ bits,
+ tokenHash,
+ inewunit
+) {
+ const bucket = this.bitsToBucket.get(bits) || (new Map());
+ if ( bucket.size === 0 ) {
+ this.bitsToBucket.set(bits, bucket);
+ }
+ const istoredunit = bucket.get(tokenHash) || 0;
+ if ( istoredunit === 0 ) {
+ bucket.set(tokenHash, inewunit);
+ return;
+ }
+ if ( filterData[istoredunit+0] === FilterBucket.fid ) {
+ FilterBucket.unshift(istoredunit, inewunit);
+ return;
+ }
+ const ibucketunit = FilterBucket.create();
+ FilterBucket.unshift(ibucketunit, istoredunit);
+ FilterBucket.unshift(ibucketunit, inewunit);
+ bucket.set(tokenHash, ibucketunit);
+ this.unitsToOptimize.push({ bits, tokenHash });
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.optimize = function(throttle = 0) {
+ if ( this.optimizeTaskId !== undefined ) {
+ dropTask(this.optimizeTaskId);
+ this.optimizeTaskId = undefined;
+ }
+
+ const later = throttle => {
+ this.optimizeTaskId = queueTask(( ) => {
+ this.optimizeTaskId = undefined;
+ this.optimize(throttle);
+ }, 1000);
+ };
+
+ const t0 = Date.now();
+ while ( this.unitsToOptimize.length !== 0 ) {
+ const { bits, tokenHash } = this.unitsToOptimize.pop();
+ const bucket = this.bitsToBucket.get(bits);
+ const iunit = bucket.get(tokenHash);
+ const fc = filterGetClass(iunit);
+ switch ( fc ) {
+ case FilterHostnameDict:
+ FilterHostnameDict.optimize(iunit);
+ break;
+ case FilterBucket: {
+ const optimizeBits =
+ (tokenHash === NO_TOKEN_HASH) || (bits & MODIFY_REALMS) !== 0
+ ? 0b10
+ : 0b01;
+ const inewunit = FilterBucket.optimize(iunit, optimizeBits);
+ if ( inewunit !== 0 ) {
+ bucket.set(tokenHash, inewunit);
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ if ( throttle > 0 && (Date.now() - t0) > 40 ) {
+ return later(throttle - 1);
+ }
+ }
+
+ filterArgsToUnit.clear();
+
+ // Here we do not optimize origHNTrieContainer because many origin-related
+ // tries are instantiated on demand.
+ keyvalStore.setItem(
+ 'SNFE.destHNTrieContainer.trieDetails',
+ destHNTrieContainer.optimize()
+ );
+ bidiTrieOptimize();
+ filterDataShrink();
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.toSelfie = async function(storage, path) {
+ if ( typeof storage !== 'object' || storage === null ) { return; }
+ if ( typeof storage.put !== 'function' ) { return; }
+
+ bidiTrieOptimize(true);
+ keyvalStore.setItem(
+ 'SNFE.origHNTrieContainer.trieDetails',
+ origHNTrieContainer.optimize()
+ );
+
+ return Promise.all([
+ storage.put(
+ `${path}/destHNTrieContainer`,
+ destHNTrieContainer.serialize(sparseBase64)
+ ),
+ storage.put(
+ `${path}/origHNTrieContainer`,
+ origHNTrieContainer.serialize(sparseBase64)
+ ),
+ storage.put(
+ `${path}/bidiTrie`,
+ bidiTrie.serialize(sparseBase64)
+ ),
+ storage.put(
+ `${path}/filterData`,
+ filterDataToSelfie()
+ ),
+ storage.put(
+ `${path}/filterRefs`,
+ filterRefsToSelfie()
+ ),
+ storage.put(
+ `${path}/main`,
+ JSON.stringify({
+ version: this.selfieVersion,
+ processedFilterCount: this.processedFilterCount,
+ acceptedCount: this.acceptedCount,
+ discardedCount: this.discardedCount,
+ bitsToBucket: Array.from(this.bitsToBucket).map(kv => {
+ kv[1] = Array.from(kv[1]);
+ return kv;
+ }),
+ urlTokenizer: urlTokenizer.toSelfie(),
+ })
+ )
+ ]);
+};
+
+FilterContainer.prototype.serialize = async function() {
+ const selfie = [];
+ const storage = {
+ put(name, data) {
+ selfie.push([ name, data ]);
+ }
+ };
+ await this.toSelfie(storage, '');
+ return JSON.stringify(selfie);
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.fromSelfie = async function(storage, path) {
+ if ( typeof storage !== 'object' || storage === null ) { return; }
+ if ( typeof storage.get !== 'function' ) { return; }
+
+ this.reset();
+
+ this.notReady = true;
+
+ const results = await Promise.all([
+ storage.get(`${path}/main`),
+ storage.get(`${path}/destHNTrieContainer`).then(details =>
+ destHNTrieContainer.unserialize(details.content, sparseBase64)
+ ),
+ storage.get(`${path}/origHNTrieContainer`).then(details =>
+ origHNTrieContainer.unserialize(details.content, sparseBase64)
+ ),
+ storage.get(`${path}/bidiTrie`).then(details =>
+ bidiTrie.unserialize(details.content, sparseBase64)
+ ),
+ storage.get(`${path}/filterData`).then(details =>
+ filterDataFromSelfie(details.content)
+ ),
+ storage.get(`${path}/filterRefs`).then(details =>
+ filterRefsFromSelfie(details.content)
+ ),
+ ]);
+
+ if ( results.slice(1).every(v => v === true) === false ) { return false; }
+
+ const details = results[0];
+ if ( typeof details !== 'object' || details === null ) { return false; }
+ if ( typeof details.content !== 'string' ) { return false; }
+ if ( details.content === '' ) { return false; }
+ let selfie;
+ try {
+ selfie = JSON.parse(details.content);
+ } catch (ex) {
+ }
+ if ( typeof selfie !== 'object' || selfie === null ) { return false; }
+ if ( selfie.version !== this.selfieVersion ) { return false; }
+ this.processedFilterCount = selfie.processedFilterCount;
+ this.acceptedCount = selfie.acceptedCount;
+ this.discardedCount = selfie.discardedCount;
+ this.bitsToBucket = new Map(selfie.bitsToBucket.map(kv => {
+ kv[1] = new Map(kv[1]);
+ return kv;
+ }));
+ urlTokenizer.fromSelfie(selfie.urlTokenizer);
+
+ // If this point is never reached, it means the internal state is
+ // unreliable, and the caller is then responsible for resetting the
+ // engine and populate properly, in which case the `notReady` barrier
+ // will be properly reset.
+
+ this.notReady = false;
+
+ return true;
+};
+
+FilterContainer.prototype.unserialize = async function(s) {
+ const selfie = new Map(JSON.parse(s));
+ const storage = {
+ async get(name) {
+ return { content: selfie.get(name) };
+ }
+ };
+ return this.fromSelfie(storage, '');
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.createCompiler = function() {
+ return new FilterCompiler();
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.fromCompiled = function(reader) {
+ reader.select('NETWORK_FILTERS:GOOD');
+ while ( reader.next() ) {
+ this.acceptedCount += 1;
+ if ( this.goodFilters.has(reader.line) ) {
+ this.discardedCount += 1;
+ } else {
+ this.goodFilters.add(reader.line);
+ }
+ }
+
+ reader.select('NETWORK_FILTERS:BAD');
+ while ( reader.next() ) {
+ this.badFilters.add(reader.line);
+ }
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.matchAndFetchModifiers = function(
+ fctxt,
+ modifierName
+) {
+ if ( this.notReady ) { return; }
+
+ const typeBits = typeNameToTypeValue[fctxt.type] || otherTypeBitValue;
+
+ $requestURL = urlTokenizer.setURL(fctxt.url);
+ $requestURLRaw = fctxt.url;
+ $docHostname = fctxt.getDocHostname();
+ $docDomain = fctxt.getDocDomain();
+ $requestHostname = fctxt.getHostname();
+ $requestMethodBit = fctxt.method || 0;
+ $requestTypeValue = (typeBits & TypeBitsMask) >>> TypeBitsOffset;
+
+ const modifierType = modifierTypeFromName.get(modifierName);
+ const modifierBits = modifierBitsFromType.get(modifierType);
+
+ const partyBits = fctxt.is3rdPartyToDoc() ? THIRDPARTY_REALM : FIRSTPARTY_REALM;
+
+ const catBits00 = modifierBits;
+ const catBits01 = modifierBits | typeBits;
+ const catBits10 = modifierBits | partyBits;
+ const catBits11 = modifierBits | typeBits | partyBits;
+
+ const bucket00 = this.bitsToBucket.get(catBits00);
+ const bucket01 = typeBits !== 0
+ ? this.bitsToBucket.get(catBits01)
+ : undefined;
+ const bucket10 = partyBits !== 0
+ ? this.bitsToBucket.get(catBits10)
+ : undefined;
+ const bucket11 = typeBits !== 0 && partyBits !== 0
+ ? this.bitsToBucket.get(catBits11)
+ : undefined;
+
+ if (
+ bucket00 === undefined && bucket01 === undefined &&
+ bucket10 === undefined && bucket11 === undefined
+ ) {
+ return;
+ }
+
+ const results = [];
+ const env = {
+ type: modifierType || 0,
+ bits: 0,
+ th: 0,
+ iunit: 0,
+ results,
+ };
+
+ const tokenHashes = urlTokenizer.getTokens(bidiTrie);
+ let i = 0;
+ let th = 0, iunit = 0;
+ for (;;) {
+ th = tokenHashes[i];
+ if ( th === INVALID_TOKEN_HASH ) { break; }
+ env.th = th;
+ $tokenBeg = tokenHashes[i+1];
+ if (
+ (bucket00 !== undefined) &&
+ (iunit = bucket00.get(th) || 0) !== 0
+ ) {
+ env.bits = catBits00; env.iunit = iunit;
+ filterMatchAndFetchModifiers(iunit, env);
+ }
+ if (
+ (bucket01 !== undefined) &&
+ (iunit = bucket01.get(th) || 0) !== 0
+ ) {
+ env.bits = catBits01; env.iunit = iunit;
+ filterMatchAndFetchModifiers(iunit, env);
+ }
+ if (
+ (bucket10 !== undefined) &&
+ (iunit = bucket10.get(th) || 0) !== 0
+ ) {
+ env.bits = catBits10; env.iunit = iunit;
+ filterMatchAndFetchModifiers(iunit, env);
+ }
+ if (
+ (bucket11 !== undefined) &&
+ (iunit = bucket11.get(th) || 0) !== 0
+ ) {
+ env.bits = catBits11; env.iunit = iunit;
+ filterMatchAndFetchModifiers(iunit, env);
+ }
+ i += 2;
+ }
+
+ if ( results.length === 0 ) { return; }
+
+ // One single result is expected to be a common occurrence, and in such
+ // case there is no need to process exception vs. block, block important
+ // occurrences.
+ if ( results.length === 1 ) {
+ const result = results[0];
+ if ( (result.bits & ALLOW_REALM) !== 0 ) { return; }
+ return [ result ];
+ }
+
+ const toAddImportant = new Map();
+ const toAdd = new Map();
+ const toRemove = new Map();
+
+ for ( const result of results ) {
+ const actionBits = result.bits & ActionBitsMask;
+ const modifyValue = result.value;
+ if ( actionBits === BLOCKIMPORTANT_REALM ) {
+ toAddImportant.set(modifyValue, result);
+ } else if ( actionBits === BLOCK_REALM ) {
+ toAdd.set(modifyValue, result);
+ } else {
+ toRemove.set(modifyValue, result);
+ }
+ }
+ if ( toAddImportant.size === 0 && toAdd.size === 0 ) { return; }
+
+ // Remove entries overridden by important block filters.
+ if ( toAddImportant.size !== 0 ) {
+ for ( const key of toAddImportant.keys() ) {
+ toAdd.delete(key);
+ toRemove.delete(key);
+ }
+ }
+
+ // Exception filters
+ //
+ // Remove excepted block filters and unused exception filters.
+ //
+ // Special case, except-all:
+ // - Except-all applies only if there is at least one normal block filters.
+ // - Except-all does not apply to important block filters.
+ if ( toRemove.size !== 0 ) {
+ if ( toRemove.has('') === false ) {
+ for ( const key of toRemove.keys() ) {
+ if ( toAdd.has(key) ) {
+ toAdd.delete(key);
+ } else {
+ toRemove.delete(key);
+ }
+ }
+ }
+ else if ( toAdd.size !== 0 ) {
+ toAdd.clear();
+ if ( toRemove.size !== 1 ) {
+ const entry = toRemove.get('');
+ toRemove.clear();
+ toRemove.set('', entry);
+ }
+ } else {
+ toRemove.clear();
+ }
+ }
+
+ if (
+ toAdd.size === 0 &&
+ toAddImportant.size === 0 &&
+ toRemove.size === 0
+ ) {
+ return;
+ }
+
+ const out = Array.from(toAdd.values());
+ if ( toAddImportant.size !== 0 ) {
+ out.push(...toAddImportant.values());
+ }
+ if ( toRemove.size !== 0 ) {
+ out.push(...toRemove.values());
+ }
+ return out;
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.realmMatchString = function(
+ realmBits,
+ typeBits,
+ partyBits
+) {
+ if ( this.notReady ) { return false; }
+
+ const exactType = typeBits & 0x80000000;
+ typeBits &= 0x7FFFFFFF;
+
+ const catBits00 = realmBits;
+ const catBits01 = realmBits | typeBits;
+ const catBits10 = realmBits | partyBits;
+ const catBits11 = realmBits | typeBits | partyBits;
+
+ const bucket00 = exactType === 0
+ ? this.bitsToBucket.get(catBits00)
+ : undefined;
+ const bucket01 = exactType !== 0 || typeBits !== 0
+ ? this.bitsToBucket.get(catBits01)
+ : undefined;
+ const bucket10 = exactType === 0 && partyBits !== 0
+ ? this.bitsToBucket.get(catBits10)
+ : undefined;
+ const bucket11 = (exactType !== 0 || typeBits !== 0) && partyBits !== 0
+ ? this.bitsToBucket.get(catBits11)
+ : undefined;
+
+ if (
+ bucket00 === undefined && bucket01 === undefined &&
+ bucket10 === undefined && bucket11 === undefined
+ ) {
+ return false;
+ }
+
+ let catBits = 0, iunit = 0;
+
+ // Pure hostname-based filters
+ let tokenHash = DOT_TOKEN_HASH;
+ if (
+ (bucket00 !== undefined) &&
+ (iunit = bucket00.get(DOT_TOKEN_HASH) || 0) !== 0 &&
+ (filterMatch(iunit) === true)
+ ) {
+ catBits = catBits00;
+ } else if (
+ (bucket01 !== undefined) &&
+ (iunit = bucket01.get(DOT_TOKEN_HASH) || 0) !== 0 &&
+ (filterMatch(iunit) === true)
+ ) {
+ catBits = catBits01;
+ } else if (
+ (bucket10 !== undefined) &&
+ (iunit = bucket10.get(DOT_TOKEN_HASH) || 0) !== 0 &&
+ (filterMatch(iunit) === true)
+ ) {
+ catBits = catBits10;
+ } else if (
+ (bucket11 !== undefined) &&
+ (iunit = bucket11.get(DOT_TOKEN_HASH) || 0) !== 0 &&
+ (filterMatch(iunit) === true)
+ ) {
+ catBits = catBits11;
+ }
+ // Pattern-based filters
+ else {
+ const tokenHashes = urlTokenizer.getTokens(bidiTrie);
+ let i = 0;
+ for (;;) {
+ tokenHash = tokenHashes[i];
+ if ( tokenHash === INVALID_TOKEN_HASH ) { return false; }
+ $tokenBeg = tokenHashes[i+1];
+ if (
+ (bucket00 !== undefined) &&
+ (iunit = bucket00.get(tokenHash) || 0) !== 0 &&
+ (filterMatch(iunit) === true)
+ ) {
+ catBits = catBits00;
+ break;
+ }
+ if (
+ (bucket01 !== undefined) &&
+ (iunit = bucket01.get(tokenHash) || 0) !== 0 &&
+ (filterMatch(iunit) === true)
+ ) {
+ catBits = catBits01;
+ break;
+ }
+ if (
+ (bucket10 !== undefined) &&
+ (iunit = bucket10.get(tokenHash) || 0) !== 0 &&
+ (filterMatch(iunit) === true)
+ ) {
+ catBits = catBits10;
+ break;
+ }
+ if (
+ (bucket11 !== undefined) &&
+ (iunit = bucket11.get(tokenHash) || 0) !== 0 &&
+ (filterMatch(iunit) === true)
+ ) {
+ catBits = catBits11;
+ break;
+ }
+ i += 2;
+ }
+ }
+
+ this.$catBits = catBits;
+ this.$tokenHash = tokenHash;
+ this.$filterUnit = iunit;
+ return true;
+};
+
+/******************************************************************************/
+
+// Specialized handler
+
+// https://github.com/gorhill/uBlock/issues/1477
+// Special case: blocking-generichide filter ALWAYS exists, it is implicit --
+// thus we always first check for exception filters, then for important block
+// filter if and only if there was a hit on an exception filter.
+// https://github.com/gorhill/uBlock/issues/2103
+// User may want to override `generichide` exception filters.
+// https://www.reddit.com/r/uBlockOrigin/comments/d6vxzj/
+// Add support for `specifichide`.
+
+FilterContainer.prototype.matchRequestReverse = function(type, url) {
+ const typeBits = typeNameToTypeValue[type] | 0x80000000;
+
+ // Prime tokenizer: we get a normalized URL in return.
+ $requestURL = urlTokenizer.setURL(url);
+ $requestURLRaw = url;
+ $requestMethodBit = 0;
+ $requestTypeValue = (typeBits & TypeBitsMask) >>> TypeBitsOffset;
+ $isBlockImportant = false;
+ this.$filterUnit = 0;
+
+ // These registers will be used by various filters
+ $docHostname = $requestHostname = hostnameFromNetworkURL(url);
+ $docDomain = domainFromHostname($docHostname);
+
+ // Exception filters
+ if ( this.realmMatchString(ALLOW_REALM, typeBits, FIRSTPARTY_REALM) ) {
+ // Important block filters.
+ if ( this.realmMatchString(BLOCKIMPORTANT_REALM, typeBits, FIRSTPARTY_REALM) ) {
+ return 1;
+ }
+ return 2;
+ }
+ return 0;
+
+};
+
+/******************************************************************************/
+
+// https://github.com/chrisaljoudi/uBlock/issues/116
+// Some type of requests are exceptional, they need custom handling,
+// not the generic handling.
+// https://github.com/chrisaljoudi/uBlock/issues/519
+// Use exact type match for anything beyond `other`. Also, be prepared to
+// support unknown types.
+// https://github.com/uBlockOrigin/uBlock-issues/issues/1501
+// Add support to evaluate allow realm before block realm.
+
+/**
+ * Matches a URL string using filtering context.
+ * @param {FilteringContext} fctxt - The filtering context
+ * @param {integer} [modifier=0] - A bit vector modifying the behavior of the
+ * matching algorithm:
+ * Bit 0: match exact type.
+ * Bit 1: lookup allow realm regardless of whether there was a match in
+ * block realm.
+ *
+ * @returns {integer} 0=no match, 1=block, 2=allow (exception)
+ */
+FilterContainer.prototype.matchRequest = function(fctxt, modifiers = 0) {
+ let typeBits = typeNameToTypeValue[fctxt.type];
+ if ( modifiers === 0 ) {
+ if ( typeBits === undefined ) {
+ typeBits = otherTypeBitValue;
+ } else if ( typeBits === 0 || typeBits > otherTypeBitValue ) {
+ modifiers |= 0b0001;
+ }
+ }
+ if ( (modifiers & 0b0001) !== 0 ) {
+ if ( typeBits === undefined ) { return 0; }
+ typeBits |= 0x80000000;
+ }
+
+ const partyBits = fctxt.is3rdPartyToDoc() ? THIRDPARTY_REALM : FIRSTPARTY_REALM;
+
+ // Prime tokenizer: we get a normalized URL in return.
+ $requestURL = urlTokenizer.setURL(fctxt.url);
+ $requestURLRaw = fctxt.url;
+ this.$filterUnit = 0;
+
+ // These registers will be used by various filters
+ $docHostname = fctxt.getDocHostname();
+ $docDomain = fctxt.getDocDomain();
+ $requestHostname = fctxt.getHostname();
+ $requestMethodBit = fctxt.method || 0;
+ $requestTypeValue = (typeBits & TypeBitsMask) >>> TypeBitsOffset;
+ $isBlockImportant = false;
+
+ // Evaluate block realm before allow realm, and allow realm before
+ // block-important realm, i.e. by order of likelihood of a match.
+ const r = this.realmMatchString(BLOCK_REALM, typeBits, partyBits);
+ if ( r || (modifiers & 0b0010) !== 0 ) {
+ if ( $isBlockImportant ) { return 1; }
+ if ( this.realmMatchString(ALLOW_REALM, typeBits, partyBits) ) {
+ if ( this.realmMatchString(BLOCKIMPORTANT_REALM, typeBits, partyBits) ) {
+ return 1;
+ }
+ return 2;
+ }
+ if ( r ) { return 1; }
+ }
+ return 0;
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.matchHeaders = function(fctxt, headers) {
+ const typeBits = typeNameToTypeValue[fctxt.type] || otherTypeBitValue;
+ const partyBits = fctxt.is3rdPartyToDoc() ? THIRDPARTY_REALM : FIRSTPARTY_REALM;
+
+ // Prime tokenizer: we get a normalized URL in return.
+ $requestURL = urlTokenizer.setURL(fctxt.url);
+ $requestURLRaw = fctxt.url;
+ this.$filterUnit = 0;
+
+ // These registers will be used by various filters
+ $docHostname = fctxt.getDocHostname();
+ $docDomain = fctxt.getDocDomain();
+ $requestHostname = fctxt.getHostname();
+ $requestMethodBit = fctxt.method || 0;
+ $requestTypeValue = (typeBits & TypeBitsMask) >>> TypeBitsOffset;
+ $httpHeaders.init(headers);
+
+ let r = 0;
+ if ( this.realmMatchString(HEADERS_REALM | BLOCK_REALM, typeBits, partyBits) ) {
+ r = 1;
+ }
+ if ( r !== 0 && $isBlockImportant !== true ) {
+ if ( this.realmMatchString(HEADERS_REALM | ALLOW_REALM, typeBits, partyBits) ) {
+ r = 2;
+ if ( this.realmMatchString(HEADERS_REALM | BLOCKIMPORTANT_REALM, typeBits, partyBits) ) {
+ r = 1;
+ }
+ }
+ }
+
+ $httpHeaders.reset();
+
+ return r;
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.redirectRequest = function(redirectEngine, fctxt) {
+ const directives = this.matchAndFetchModifiers(fctxt, 'redirect-rule');
+ // No directive is the most common occurrence.
+ if ( directives === undefined ) { return; }
+ const highest = directives.length - 1;
+ // More than a single directive means more work.
+ if ( highest !== 0 ) {
+ directives.sort((a, b) => compareRedirectRequests(redirectEngine, a, b));
+ }
+ // Redirect to highest-ranked directive
+ const directive = directives[highest];
+ if ( (directive.bits & ALLOW_REALM) !== 0 ) { return directives; }
+ const { token } = parseRedirectRequestValue(directive);
+ fctxt.redirectURL = redirectEngine.tokenToURL(fctxt, token);
+ if ( fctxt.redirectURL === undefined ) { return; }
+ return directives;
+};
+
+FilterContainer.prototype.transformRequest = function(fctxt) {
+ const directives = this.matchAndFetchModifiers(fctxt, 'uritransform');
+ if ( directives === undefined ) { return; }
+ const directive = directives[directives.length-1];
+ if ( (directive.bits & ALLOW_REALM) !== 0 ) { return directives; }
+ if ( directive.refs instanceof Object === false ) { return; }
+ const { refs } = directive;
+ if ( refs.$cache === null ) {
+ refs.$cache = sfp.parseReplaceValue(refs.value);
+ }
+ const cache = refs.$cache;
+ if ( cache === undefined ) { return; }
+ const redirectURL = new URL(fctxt.url);
+ const before = redirectURL.pathname + redirectURL.search;
+ if ( cache.re.test(before) !== true ) { return; }
+ const after = before.replace(cache.re, cache.replacement);
+ if ( after === before ) { return; }
+ const searchPos = after.includes('?') && after.indexOf('?') || after.length;
+ redirectURL.pathname = after.slice(0, searchPos);
+ redirectURL.search = after.slice(searchPos);
+ fctxt.redirectURL = redirectURL.href;
+ return directives;
+};
+
+function parseRedirectRequestValue(directive) {
+ if ( directive.cache === null ) {
+ directive.cache = sfp.parseRedirectValue(directive.value);
+ }
+ return directive.cache;
+}
+
+function compareRedirectRequests(redirectEngine, a, b) {
+ const { token: atok, priority: aint, bits: abits } =
+ parseRedirectRequestValue(a);
+ if ( redirectEngine.hasToken(atok) === false ) { return -1; }
+ const { token: btok, priority: bint, bits: bbits } =
+ parseRedirectRequestValue(b);
+ if ( redirectEngine.hasToken(btok) === false ) { return 1; }
+ if ( abits !== bbits ) {
+ if ( (abits & IMPORTANT_REALM) !== 0 ) { return 1; }
+ if ( (bbits & IMPORTANT_REALM) !== 0 ) { return -1; }
+ if ( (abits & ALLOW_REALM) !== 0 ) { return -1; }
+ if ( (bbits & ALLOW_REALM) !== 0 ) { return 1; }
+ }
+ return aint - bint;
+}
+
+/******************************************************************************/
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/1626
+// Do not redirect when the number of query parameters does not change.
+
+FilterContainer.prototype.filterQuery = function(fctxt) {
+ const directives = this.matchAndFetchModifiers(fctxt, 'removeparam');
+ if ( directives === undefined ) { return; }
+ const url = fctxt.url;
+ const qpos = url.indexOf('?');
+ if ( qpos === -1 ) { return; }
+ let hpos = url.indexOf('#', qpos + 1);
+ if ( hpos === -1 ) { hpos = url.length; }
+ const params = new Map();
+ const query = url.slice(qpos + 1, hpos);
+ for ( let i = 0; i < query.length; ) {
+ let pos = query.indexOf('&', i);
+ if ( pos === -1 ) { pos = query.length; }
+ const kv = query.slice(i, pos);
+ i = pos + 1;
+ pos = kv.indexOf('=');
+ if ( pos !== -1 ) {
+ params.set(kv.slice(0, pos), kv.slice(pos + 1));
+ } else {
+ params.set(kv, '');
+ }
+ }
+ const inParamCount = params.size;
+ const out = [];
+ for ( const directive of directives ) {
+ if ( params.size === 0 ) { break; }
+ const isException = (directive.bits & ALLOW_REALM) !== 0;
+ if ( isException && directive.value === '' ) {
+ out.push(directive);
+ break;
+ }
+ const { all, bad, name, not, re } = parseQueryPruneValue(directive);
+ if ( bad ) { continue; }
+ if ( all ) {
+ if ( isException === false ) { params.clear(); }
+ out.push(directive);
+ break;
+ }
+ if ( name !== undefined ) {
+ const value = params.get(name);
+ if ( not === false ) {
+ if ( value !== undefined ) {
+ if ( isException === false ) { params.delete(name); }
+ out.push(directive);
+ }
+ continue;
+ }
+ if ( value !== undefined ) { params.delete(name); }
+ if ( params.size !== 0 ) {
+ if ( isException === false ) { params.clear(); }
+ out.push(directive);
+ }
+ if ( value !== undefined ) { params.set(name, value); }
+ continue;
+ }
+ if ( re === undefined ) { continue; }
+ let filtered = false;
+ for ( const [ key, raw ] of params ) {
+ let value = raw;
+ try { value = decodeURIComponent(value); }
+ catch(ex) { }
+ if ( re.test(`${key}=${value}`) === not ) { continue; }
+ if ( isException === false ) { params.delete(key); }
+ filtered = true;
+ }
+ if ( filtered ) {
+ out.push(directive);
+ }
+ }
+ if ( out.length === 0 ) { return; }
+ if ( params.size !== inParamCount ) {
+ fctxt.redirectURL = url.slice(0, qpos);
+ if ( params.size !== 0 ) {
+ fctxt.redirectURL += '?' + Array.from(params).map(a =>
+ a[1] === '' ? a[0] : `${a[0]}=${a[1]}`
+ ).join('&');
+ }
+ if ( hpos !== url.length ) {
+ fctxt.redirectURL += url.slice(hpos);
+ }
+ }
+ return out;
+};
+
+function parseQueryPruneValue(directive) {
+ if ( directive.cache === null ) {
+ directive.cache =
+ sfp.parseQueryPruneValue(directive.value);
+ }
+ return directive.cache;
+}
+
+/******************************************************************************/
+
+FilterContainer.prototype.hasQuery = function(fctxt) {
+ urlTokenizer.setURL(fctxt.url);
+ return urlTokenizer.hasQuery();
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.toLogData = function() {
+ if ( this.$filterUnit !== 0 ) {
+ return new LogData(this.$catBits, this.$tokenHash, this.$filterUnit);
+ }
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.isBlockImportant = function() {
+ return this.$filterUnit !== 0 && $isBlockImportant;
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.getFilterCount = function() {
+ return this.acceptedCount - this.discardedCount;
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.enableWASM = function(wasmModuleFetcher, path) {
+ return Promise.all([
+ bidiTrie.enableWASM(wasmModuleFetcher, path),
+ origHNTrieContainer.enableWASM(wasmModuleFetcher, path),
+ destHNTrieContainer.enableWASM(wasmModuleFetcher, path),
+ ]).then(results => {
+ return results.every(a => a === true);
+ });
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.test = async function(docURL, type, url) {
+ const fctxt = new FilteringContext();
+ fctxt.setDocOriginFromURL(docURL);
+ fctxt.setType(type);
+ fctxt.setURL(url);
+ const r = this.matchRequest(fctxt);
+ console.info(`${r}`);
+ if ( r !== 0 ) {
+ console.info(this.toLogData());
+ }
+};
+
+/******************************************************************************/
+
+FilterContainer.prototype.bucketHistogram = function() {
+ const results = [];
+ for ( const [ bits, bucket ] of this.bitsToBucket ) {
+ for ( const [ th, iunit ] of bucket ) {
+ const token = urlTokenizer.stringFromTokenHash(th);
+ const fc = filterGetClass(iunit);
+ const count = fc.getCount !== undefined ? fc.getCount(iunit) : 1;
+ results.push({ bits: bits.toString(16), token, count, f: fc.name });
+ }
+ }
+ results.sort((a, b) => {
+ return b.count - a.count;
+ });
+ console.info(results);
+};
+
+/******************************************************************************/
+
+// Dump the internal state of the filtering engine to the console.
+// Useful to make development decisions and investigate issues.
+
+FilterContainer.prototype.dump = function() {
+ const thConstants = new Map([
+ [ NO_TOKEN_HASH, 'NO_TOKEN_HASH' ],
+ [ DOT_TOKEN_HASH, 'DOT_TOKEN_HASH' ],
+ [ ANY_TOKEN_HASH, 'ANY_TOKEN_HASH' ],
+ [ ANY_HTTPS_TOKEN_HASH, 'ANY_HTTPS_TOKEN_HASH' ],
+ [ ANY_HTTP_TOKEN_HASH, 'ANY_HTTP_TOKEN_HASH' ],
+ [ EMPTY_TOKEN_HASH, 'EMPTY_TOKEN_HASH' ],
+ ]);
+
+ const out = [];
+
+ const toOutput = (depth, line) => {
+ out.push(`${' '.repeat(depth*2)}${line}`);
+ };
+
+ const dumpUnit = (idata, depth = 0) => {
+ const fc = filterGetClass(idata);
+ fcCounts.set(fc.name, (fcCounts.get(fc.name) || 0) + 1);
+ const info = filterDumpInfo(idata) || '';
+ toOutput(depth, info !== '' ? `${fc.name}: ${info}` : fc.name);
+ switch ( fc ) {
+ case FilterBucket:
+ case FilterCompositeAll:
+ case FilterDomainHitAny: {
+ fc.forEach(idata, i => {
+ dumpUnit(i, depth+1);
+ });
+ break;
+ }
+ case FilterBucketIfOriginHits: {
+ dumpUnit(filterData[idata+2], depth+1);
+ dumpUnit(filterData[idata+1], depth+1);
+ break;
+ }
+ case FilterBucketIfRegexHits: {
+ dumpUnit(filterData[idata+1], depth+1);
+ break;
+ }
+ case FilterPlainTrie: {
+ for ( const details of bidiTrie.trieIterator(filterData[idata+1]) ) {
+ toOutput(depth+1, details.pattern);
+ let ix = details.iextra;
+ if ( ix === 1 ) { continue; }
+ for (;;) {
+ if ( ix === 0 ) { break; }
+ dumpUnit(filterData[ix+0], depth+2);
+ ix = filterData[ix+1];
+ }
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ };
+
+ const fcCounts = new Map();
+ const thCounts = new Set();
+
+ const realms = new Map([
+ [ BLOCK_REALM, 'block' ],
+ [ BLOCKIMPORTANT_REALM, 'block-important' ],
+ [ ALLOW_REALM, 'unblock' ],
+ [ REDIRECT_REALM, 'redirect' ],
+ [ REMOVEPARAM_REALM, 'removeparam' ],
+ [ CSP_REALM, 'csp' ],
+ [ PERMISSIONS_REALM, 'permissions' ],
+ [ URLTRANSFORM_REALM, 'uritransform' ],
+ [ REPLACE_REALM, 'replace' ],
+ ]);
+ const partyness = new Map([
+ [ ANYPARTY_REALM, 'any-party' ],
+ [ FIRSTPARTY_REALM, '1st-party' ],
+ [ THIRDPARTY_REALM, '3rd-party' ],
+ ]);
+ for ( const [ realmBits, realmName ] of realms ) {
+ toOutput(1, `+ realm: ${realmName}`);
+ for ( const [ partyBits, partyName ] of partyness ) {
+ toOutput(2, `+ party: ${partyName}`);
+ const processedTypeBits = new Set();
+ for ( const typeName in typeNameToTypeValue ) {
+ const typeBits = typeNameToTypeValue[typeName];
+ if ( processedTypeBits.has(typeBits) ) { continue; }
+ processedTypeBits.add(typeBits);
+ const bits = realmBits | partyBits | typeBits;
+ const bucket = this.bitsToBucket.get(bits);
+ if ( bucket === undefined ) { continue; }
+ const thCount = bucket.size;
+ toOutput(3, `+ type: ${typeName} (${thCount})`);
+ for ( const [ th, iunit ] of bucket) {
+ thCounts.add(th);
+ const ths = thConstants.has(th)
+ ? thConstants.get(th)
+ : `0x${th.toString(16)}`;
+ toOutput(4, `+ th: ${ths}`);
+ dumpUnit(iunit, 5);
+ }
+ }
+ }
+ }
+
+ const knownTokens =
+ urlTokenizer.knownTokens
+ .reduce((a, b) => b !== 0 ? a+1 : a, 0);
+
+ out.unshift([
+ 'Static Network Filtering Engine internals:',
+ ` Distinct token hashes: ${thCounts.size.toLocaleString('en')}`,
+ ` Known-token sieve (Uint8Array): ${knownTokens.toLocaleString('en')} out of 65,536`,
+ ` Filter data (Int32Array): ${filterDataWritePtr.toLocaleString('en')}`,
+ ` Filter refs (JS array): ${filterRefsWritePtr.toLocaleString('en')}`,
+ ' Origin trie container:',
+ origHNTrieContainer.dumpInfo().split('\n').map(a => ` ${a}`).join('\n'),
+ ' Request trie container:',
+ destHNTrieContainer.dumpInfo().split('\n').map(a => ` ${a}`).join('\n'),
+ ' Pattern trie container:',
+ bidiTrie.dumpInfo().split('\n').map(a => ` ${a}`).join('\n'),
+ '+ Filter class stats:',
+ Array.from(fcCounts)
+ .sort((a, b) => b[1] - a[1])
+ .map(a => ` ${a[0]}: ${a[1].toLocaleString('en')}`)
+ .join('\n'),
+ '+ Filter tree:',
+ ].join('\n'));
+ return out.join('\n');
+};
+
+/******************************************************************************/
+
+const staticNetFilteringEngine = new FilterContainer();
+
+export default staticNetFilteringEngine;
diff --git a/src/js/storage.js b/src/js/storage.js
new file mode 100644
index 0000000..151717c
--- /dev/null
+++ b/src/js/storage.js
@@ -0,0 +1,1703 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import publicSuffixList from '../lib/publicsuffixlist/publicsuffixlist.js';
+import punycode from '../lib/punycode.js';
+
+import io from './assets.js';
+import { broadcast, filteringBehaviorChanged, onBroadcast } from './broadcast.js';
+import cosmeticFilteringEngine from './cosmetic-filtering.js';
+import logger from './logger.js';
+import lz4Codec from './lz4.js';
+import staticExtFilteringEngine from './static-ext-filtering.js';
+import staticFilteringReverseLookup from './reverselookup.js';
+import staticNetFilteringEngine from './static-net-filtering.js';
+import µb from './background.js';
+import { hostnameFromURI } from './uri-utils.js';
+import { i18n, i18n$ } from './i18n.js';
+import { redirectEngine } from './redirect-engine.js';
+import { sparseBase64 } from './base64-custom.js';
+import { ubolog, ubologSet } from './console.js';
+import * as sfp from './static-filtering-parser.js';
+
+import {
+ permanentFirewall,
+ permanentSwitches,
+ permanentURLFiltering,
+} from './filtering-engines.js';
+
+import {
+ CompiledListReader,
+ CompiledListWriter,
+} from './static-filtering-io.js';
+
+import {
+ LineIterator,
+ orphanizeString,
+} from './text-utils.js';
+
+/******************************************************************************/
+
+µb.getBytesInUse = async function() {
+ const promises = [];
+ let bytesInUse;
+
+ // Not all platforms implement this method.
+ promises.push(
+ vAPI.storage.getBytesInUse instanceof Function
+ ? vAPI.storage.getBytesInUse(null)
+ : undefined
+ );
+
+ if (
+ navigator.storage instanceof Object &&
+ navigator.storage.estimate instanceof Function
+ ) {
+ promises.push(navigator.storage.estimate());
+ }
+
+ const results = await Promise.all(promises);
+
+ const processCount = count => {
+ if ( typeof count !== 'number' ) { return; }
+ if ( bytesInUse === undefined ) { bytesInUse = 0; }
+ bytesInUse += count;
+ return bytesInUse;
+ };
+
+ processCount(results[0]);
+ if ( results.length > 1 && results[1] instanceof Object ) {
+ processCount(results[1].usage);
+ }
+ µb.storageUsed = bytesInUse;
+ return bytesInUse;
+};
+
+/******************************************************************************/
+
+{
+ let localSettingsLastSaved = Date.now();
+
+ const shouldSave = ( ) => {
+ if ( µb.localSettingsLastModified > localSettingsLastSaved ) {
+ µb.saveLocalSettings();
+ }
+ saveTimer.on(saveDelay);
+ };
+
+ const saveTimer = vAPI.defer.create(shouldSave);
+ const saveDelay = { sec: 23 };
+
+ saveTimer.onidle(saveDelay);
+
+ µb.saveLocalSettings = function() {
+ localSettingsLastSaved = Date.now();
+ return vAPI.storage.set(this.localSettings);
+ };
+}
+
+/******************************************************************************/
+
+µb.loadUserSettings = async function() {
+ const usDefault = this.userSettingsDefault;
+
+ const results = await Promise.all([
+ vAPI.storage.get(Object.assign(usDefault)),
+ vAPI.adminStorage.get('userSettings'),
+ ]);
+
+ const usUser = results[0] instanceof Object && results[0] ||
+ Object.assign(usDefault);
+
+ if ( Array.isArray(results[1]) ) {
+ const adminSettings = results[1];
+ for ( const entry of adminSettings ) {
+ if ( entry.length < 1 ) { continue; }
+ const name = entry[0];
+ if ( usDefault.hasOwnProperty(name) === false ) { continue; }
+ const value = entry.length < 2
+ ? usDefault[name]
+ : this.settingValueFromString(usDefault, name, entry[1]);
+ if ( value === undefined ) { continue; }
+ usUser[name] = usDefault[name] = value;
+ }
+ }
+
+ return usUser;
+};
+
+µb.saveUserSettings = function() {
+ // `externalLists` will be deprecated in some future, it is kept around
+ // for forward compatibility purpose, and should reflect the content of
+ // `importedLists`.
+ //
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1803
+ // Do this before computing modified settings.
+ this.userSettings.externalLists =
+ this.userSettings.importedLists.join('\n');
+
+ const toSave = this.getModifiedSettings(
+ this.userSettings,
+ this.userSettingsDefault
+ );
+
+ const toRemove = [];
+ for ( const key in this.userSettings ) {
+ if ( this.userSettings.hasOwnProperty(key) === false ) { continue; }
+ if ( toSave.hasOwnProperty(key) ) { continue; }
+ toRemove.push(key);
+ }
+ if ( toRemove.length !== 0 ) {
+ vAPI.storage.remove(toRemove);
+ }
+ vAPI.storage.set(toSave);
+};
+
+/******************************************************************************/
+
+// Admin hidden settings have precedence over user hidden settings.
+
+µb.loadHiddenSettings = async function() {
+ const hsDefault = this.hiddenSettingsDefault;
+ const hsAdmin = this.hiddenSettingsAdmin;
+ const hsUser = this.hiddenSettings;
+
+ const results = await Promise.all([
+ vAPI.adminStorage.get([
+ 'advancedSettings',
+ 'disableDashboard',
+ 'disabledPopupPanelParts',
+ ]),
+ vAPI.storage.get('hiddenSettings'),
+ ]);
+
+ if ( results[0] instanceof Object ) {
+ const {
+ advancedSettings,
+ disableDashboard,
+ disabledPopupPanelParts
+ } = results[0];
+ if ( Array.isArray(advancedSettings) ) {
+ for ( const entry of advancedSettings ) {
+ if ( entry.length < 1 ) { continue; }
+ const name = entry[0];
+ if ( hsDefault.hasOwnProperty(name) === false ) { continue; }
+ const value = entry.length < 2
+ ? hsDefault[name]
+ : this.hiddenSettingValueFromString(name, entry[1]);
+ if ( value === undefined ) { continue; }
+ hsDefault[name] = hsAdmin[name] = hsUser[name] = value;
+ }
+ }
+ µb.noDashboard = disableDashboard === true;
+ if ( Array.isArray(disabledPopupPanelParts) ) {
+ const partNameToBit = new Map([
+ [ 'globalStats', 0b00010 ],
+ [ 'basicTools', 0b00100 ],
+ [ 'extraTools', 0b01000 ],
+ [ 'overviewPane', 0b10000 ],
+ ]);
+ let bits = hsDefault.popupPanelDisabledSections;
+ for ( const part of disabledPopupPanelParts ) {
+ const bit = partNameToBit.get(part);
+ if ( bit === undefined ) { continue; }
+ bits |= bit;
+ }
+ hsDefault.popupPanelDisabledSections =
+ hsAdmin.popupPanelDisabledSections =
+ hsUser.popupPanelDisabledSections = bits;
+ }
+ }
+
+ const hs = results[1] instanceof Object && results[1].hiddenSettings || {};
+ if ( Object.keys(hsAdmin).length === 0 && Object.keys(hs).length === 0 ) {
+ return;
+ }
+
+ for ( const key in hsDefault ) {
+ if ( hsDefault.hasOwnProperty(key) === false ) { continue; }
+ if ( hsAdmin.hasOwnProperty(name) ) { continue; }
+ if ( typeof hs[key] !== typeof hsDefault[key] ) { continue; }
+ this.hiddenSettings[key] = hs[key];
+ }
+ broadcast({ what: 'hiddenSettingsChanged' });
+};
+
+// Note: Save only the settings which values differ from the default ones.
+// This way the new default values in the future will properly apply for
+// those which were not modified by the user.
+
+µb.saveHiddenSettings = function() {
+ vAPI.storage.set({
+ hiddenSettings: this.getModifiedSettings(
+ this.hiddenSettings,
+ this.hiddenSettingsDefault
+ )
+ });
+};
+
+onBroadcast(msg => {
+ if ( msg.what !== 'hiddenSettingsChanged' ) { return; }
+ const µbhs = µb.hiddenSettings;
+ ubologSet(µbhs.consoleLogLevel === 'info');
+ vAPI.net.setOptions({
+ cnameIgnoreList: µbhs.cnameIgnoreList,
+ cnameIgnore1stParty: µbhs.cnameIgnore1stParty,
+ cnameIgnoreExceptions: µbhs.cnameIgnoreExceptions,
+ cnameIgnoreRootDocument: µbhs.cnameIgnoreRootDocument,
+ cnameMaxTTL: µbhs.cnameMaxTTL,
+ cnameReplayFullURL: µbhs.cnameReplayFullURL,
+ cnameUncloakProxied: µbhs.cnameUncloakProxied,
+ });
+});
+
+/******************************************************************************/
+
+µb.hiddenSettingsFromString = function(raw) {
+ const out = Object.assign({}, this.hiddenSettingsDefault);
+ const lineIter = new LineIterator(raw);
+ while ( lineIter.eot() === false ) {
+ const line = lineIter.next();
+ const matches = /^\s*(\S+)\s+(.+)$/.exec(line);
+ if ( matches === null || matches.length !== 3 ) { continue; }
+ const name = matches[1];
+ if ( out.hasOwnProperty(name) === false ) { continue; }
+ if ( this.hiddenSettingsAdmin.hasOwnProperty(name) ) { continue; }
+ const value = this.hiddenSettingValueFromString(name, matches[2]);
+ if ( value !== undefined ) {
+ out[name] = value;
+ }
+ }
+ return out;
+};
+
+µb.hiddenSettingValueFromString = function(name, value) {
+ if ( typeof name !== 'string' || typeof value !== 'string' ) { return; }
+ const hsDefault = this.hiddenSettingsDefault;
+ if ( hsDefault.hasOwnProperty(name) === false ) { return; }
+ let r;
+ switch ( typeof hsDefault[name] ) {
+ case 'boolean':
+ if ( value === 'true' ) {
+ r = true;
+ } else if ( value === 'false' ) {
+ r = false;
+ }
+ break;
+ case 'string':
+ r = value.trim();
+ break;
+ case 'number':
+ if ( value.startsWith('0b') ) {
+ r = parseInt(value.slice(2), 2);
+ } else if ( value.startsWith('0x') ) {
+ r = parseInt(value.slice(2), 16);
+ } else {
+ r = parseInt(value, 10);
+ }
+ if ( isNaN(r) ) { r = undefined; }
+ break;
+ default:
+ break;
+ }
+ return r;
+};
+
+µb.stringFromHiddenSettings = function() {
+ const out = [];
+ for ( const key of Object.keys(this.hiddenSettings).sort() ) {
+ out.push(key + ' ' + this.hiddenSettings[key]);
+ }
+ return out.join('\n');
+};
+
+/******************************************************************************/
+
+µb.savePermanentFirewallRules = function() {
+ vAPI.storage.set({
+ dynamicFilteringString: permanentFirewall.toString()
+ });
+};
+
+/******************************************************************************/
+
+µb.savePermanentURLFilteringRules = function() {
+ vAPI.storage.set({
+ urlFilteringString: permanentURLFiltering.toString()
+ });
+};
+
+/******************************************************************************/
+
+µb.saveHostnameSwitches = function() {
+ vAPI.storage.set({
+ hostnameSwitchesString: permanentSwitches.toString()
+ });
+};
+
+/******************************************************************************/
+
+µb.saveWhitelist = function() {
+ vAPI.storage.set({
+ netWhitelist: this.arrayFromWhitelist(this.netWhitelist)
+ });
+ this.netWhitelistModifyTime = Date.now();
+};
+
+/******************************************************************************/
+
+µb.isTrustedList = function(assetKey) {
+ if ( this.parsedTrustedListPrefixes.length === 0 ) {
+ this.parsedTrustedListPrefixes =
+ µb.hiddenSettings.trustedListPrefixes.split(/ +/).map(prefix => {
+ if ( prefix === '' ) { return; }
+ if ( prefix.startsWith('http://') ) { return; }
+ if ( prefix.startsWith('file:///') ) { return prefix; }
+ if ( prefix.startsWith('https://') === false ) {
+ return prefix.includes('://') ? undefined : prefix;
+ }
+ try {
+ const url = new URL(prefix);
+ if ( url.hostname.length > 0 ) { return url.href; }
+ } catch(_) {
+ }
+ }).filter(prefix => prefix !== undefined);
+ }
+ for ( const prefix of this.parsedTrustedListPrefixes ) {
+ if ( assetKey.startsWith(prefix) ) { return true; }
+ }
+ return false;
+};
+
+onBroadcast(msg => {
+ if ( msg.what !== 'hiddenSettingsChanged' ) { return; }
+ µb.parsedTrustedListPrefixes = [];
+});
+
+/******************************************************************************/
+
+µb.loadSelectedFilterLists = async function() {
+ const bin = await vAPI.storage.get('selectedFilterLists');
+ if ( bin instanceof Object && Array.isArray(bin.selectedFilterLists) ) {
+ this.selectedFilterLists = bin.selectedFilterLists;
+ return;
+ }
+
+ // https://github.com/gorhill/uBlock/issues/747
+ // Select default filter lists if first-time launch.
+ const lists = await io.metadata();
+ this.saveSelectedFilterLists(this.autoSelectRegionalFilterLists(lists));
+};
+
+µb.saveSelectedFilterLists = function(newKeys, append = false) {
+ const oldKeys = this.selectedFilterLists.slice();
+ if ( append ) {
+ newKeys = newKeys.concat(oldKeys);
+ }
+ const newSet = new Set(newKeys);
+ // Purge unused filter lists from cache.
+ for ( const oldKey of oldKeys ) {
+ if ( newSet.has(oldKey) === false ) {
+ this.removeFilterList(oldKey);
+ }
+ }
+ newKeys = Array.from(newSet);
+ this.selectedFilterLists = newKeys;
+ return vAPI.storage.set({ selectedFilterLists: newKeys });
+};
+
+/******************************************************************************/
+
+µb.applyFilterListSelection = function(details) {
+ let selectedListKeySet = new Set(this.selectedFilterLists);
+ let importedLists = this.userSettings.importedLists.slice();
+
+ // Filter lists to select
+ if ( Array.isArray(details.toSelect) ) {
+ if ( details.merge ) {
+ for ( let i = 0, n = details.toSelect.length; i < n; i++ ) {
+ selectedListKeySet.add(details.toSelect[i]);
+ }
+ } else {
+ selectedListKeySet = new Set(details.toSelect);
+ }
+ }
+
+ // Imported filter lists to remove
+ if ( Array.isArray(details.toRemove) ) {
+ for ( let i = 0, n = details.toRemove.length; i < n; i++ ) {
+ const assetKey = details.toRemove[i];
+ selectedListKeySet.delete(assetKey);
+ const pos = importedLists.indexOf(assetKey);
+ if ( pos !== -1 ) {
+ importedLists.splice(pos, 1);
+ }
+ this.removeFilterList(assetKey);
+ }
+ }
+
+ // Filter lists to import
+ if ( typeof details.toImport === 'string' ) {
+ // https://github.com/gorhill/uBlock/issues/1181
+ // Try mapping the URL of an imported filter list to the assetKey
+ // of an existing stock list.
+ const assetKeyFromURL = url => {
+ const needle = url.replace(/^https?:/, '');
+ const assets = this.availableFilterLists;
+ for ( const assetKey in assets ) {
+ const asset = assets[assetKey];
+ if ( asset.content !== 'filters' ) { continue; }
+ if ( typeof asset.contentURL === 'string' ) {
+ if ( asset.contentURL.endsWith(needle) ) { return assetKey; }
+ continue;
+ }
+ if ( Array.isArray(asset.contentURL) === false ) { continue; }
+ for ( let i = 0, n = asset.contentURL.length; i < n; i++ ) {
+ if ( asset.contentURL[i].endsWith(needle) ) {
+ return assetKey;
+ }
+ }
+ }
+ return url;
+ };
+ const importedSet = new Set(this.listKeysFromCustomFilterLists(importedLists));
+ const toImportSet = new Set(this.listKeysFromCustomFilterLists(details.toImport));
+ for ( const urlKey of toImportSet ) {
+ if ( importedSet.has(urlKey) ) {
+ selectedListKeySet.add(urlKey);
+ continue;
+ }
+ const assetKey = assetKeyFromURL(urlKey);
+ if ( assetKey === urlKey ) {
+ importedSet.add(urlKey);
+ }
+ selectedListKeySet.add(assetKey);
+ }
+ importedLists = Array.from(importedSet).sort();
+ }
+
+ const result = Array.from(selectedListKeySet);
+ if ( importedLists.join() !== this.userSettings.importedLists.join() ) {
+ this.userSettings.importedLists = importedLists;
+ this.saveUserSettings();
+ }
+ this.saveSelectedFilterLists(result);
+};
+
+/******************************************************************************/
+
+µb.listKeysFromCustomFilterLists = function(raw) {
+ const urls = typeof raw === 'string'
+ ? raw.trim().split(/[\n\r]+/)
+ : raw;
+ const out = new Set();
+ const reIgnore = /^[!#]/;
+ const reValid = /^[a-z-]+:\/\/\S+/;
+ for ( const url of urls ) {
+ if ( reIgnore.test(url) || !reValid.test(url) ) { continue; }
+ // Ignore really bad lists.
+ if ( this.badLists.get(url) === true ) { continue; }
+ out.add(url);
+ }
+ return Array.from(out);
+};
+
+/******************************************************************************/
+
+µb.saveUserFilters = function(content) {
+ // https://github.com/gorhill/uBlock/issues/1022
+ // Be sure to end with an empty line.
+ content = content.trim();
+ if ( content !== '' ) { content += '\n'; }
+ this.removeCompiledFilterList(this.userFiltersPath);
+ return io.put(this.userFiltersPath, content);
+};
+
+µb.loadUserFilters = function() {
+ return io.get(this.userFiltersPath);
+};
+
+µb.appendUserFilters = async function(filters, options) {
+ filters = filters.trim();
+ if ( filters.length === 0 ) { return; }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/372
+ // Auto comment using user-defined template.
+ let comment = '';
+ if (
+ options instanceof Object &&
+ options.autoComment === true &&
+ this.hiddenSettings.autoCommentFilterTemplate.indexOf('{{') !== -1
+ ) {
+ const d = new Date();
+ // Date in YYYY-MM-DD format - https://stackoverflow.com/a/50130338
+ const ISO8601Date = new Date(d.getTime() +
+ (d.getTimezoneOffset()*60000)).toISOString().split('T')[0];
+ const url = new URL(options.docURL);
+ comment =
+ '! ' +
+ this.hiddenSettings.autoCommentFilterTemplate
+ .replace('{{date}}', ISO8601Date)
+ .replace('{{time}}', d.toLocaleTimeString())
+ .replace('{{hostname}}', url.hostname)
+ .replace('{{origin}}', url.origin)
+ .replace('{{url}}', url.href);
+ }
+
+ const details = await this.loadUserFilters();
+ if ( details.error ) { return; }
+
+ // The comment, if any, will be applied if and only if it is different
+ // from the last comment found in the user filter list.
+ if ( comment !== '' ) {
+ const beg = details.content.lastIndexOf(comment);
+ const end = beg === -1 ? -1 : beg + comment.length;
+ if (
+ end === -1 ||
+ details.content.startsWith('\n', end) === false ||
+ details.content.includes('\n!', end)
+ ) {
+ filters = '\n' + comment + '\n' + filters;
+ }
+ }
+
+ // https://github.com/chrisaljoudi/uBlock/issues/976
+ // If we reached this point, the filter quite probably needs to be
+ // added for sure: do not try to be too smart, trying to avoid
+ // duplicates at this point may lead to more issues.
+ await this.saveUserFilters(details.content.trim() + '\n' + filters);
+
+ const compiledFilters = this.compileFilters(filters, {
+ assetKey: this.userFiltersPath,
+ trustedSource: true,
+ });
+ const snfe = staticNetFilteringEngine;
+ const cfe = cosmeticFilteringEngine;
+ const acceptedCount = snfe.acceptedCount + cfe.acceptedCount;
+ const discardedCount = snfe.discardedCount + cfe.discardedCount;
+ this.applyCompiledFilters(compiledFilters, true);
+ const entry = this.availableFilterLists[this.userFiltersPath];
+ const deltaEntryCount =
+ snfe.acceptedCount +
+ cfe.acceptedCount - acceptedCount;
+ const deltaEntryUsedCount =
+ deltaEntryCount -
+ (snfe.discardedCount + cfe.discardedCount - discardedCount);
+ entry.entryCount += deltaEntryCount;
+ entry.entryUsedCount += deltaEntryUsedCount;
+ vAPI.storage.set({ 'availableFilterLists': this.availableFilterLists });
+ staticNetFilteringEngine.freeze();
+ redirectEngine.freeze();
+ staticExtFilteringEngine.freeze();
+ this.selfieManager.destroy();
+
+ // https://www.reddit.com/r/uBlockOrigin/comments/cj7g7m/
+ // https://www.reddit.com/r/uBlockOrigin/comments/cnq0bi/
+ filteringBehaviorChanged();
+ broadcast({ what: 'userFiltersUpdated' });
+};
+
+µb.createUserFilters = function(details) {
+ this.appendUserFilters(details.filters, details);
+ // https://github.com/gorhill/uBlock/issues/1786
+ if ( details.docURL === undefined ) { return; }
+ cosmeticFilteringEngine.removeFromSelectorCache(
+ hostnameFromURI(details.docURL)
+ );
+};
+
+/******************************************************************************/
+
+µb.autoSelectRegionalFilterLists = function(lists) {
+ const selectedListKeys = [ this.userFiltersPath ];
+ for ( const key in lists ) {
+ if ( lists.hasOwnProperty(key) === false ) { continue; }
+ const list = lists[key];
+ if ( list.content !== 'filters' ) { continue; }
+ if ( list.off !== true ) {
+ selectedListKeys.push(key);
+ continue;
+ }
+ if ( this.listMatchesEnvironment(list) ) {
+ selectedListKeys.push(key);
+ list.off = false;
+ }
+ }
+ return selectedListKeys;
+};
+
+/******************************************************************************/
+
+µb.hasInMemoryFilter = function(raw) {
+ return this.inMemoryFilters.includes(raw);
+};
+
+µb.addInMemoryFilter = async function(raw) {
+ if ( this.inMemoryFilters.includes(raw) ){ return true; }
+ this.inMemoryFilters.push(raw);
+ this.inMemoryFiltersCompiled = '';
+ await this.loadFilterLists();
+ return true;
+};
+
+µb.removeInMemoryFilter = async function(raw) {
+ const pos = this.inMemoryFilters.indexOf(raw);
+ if ( pos === -1 ) { return false; }
+ this.inMemoryFilters.splice(pos, 1);
+ this.inMemoryFiltersCompiled = '';
+ await this.loadFilterLists();
+ return false;
+};
+
+µb.clearInMemoryFilters = async function() {
+ if ( this.inMemoryFilters.length === 0 ) { return; }
+ this.inMemoryFilters = [];
+ this.inMemoryFiltersCompiled = '';
+ await this.loadFilterLists();
+};
+
+/******************************************************************************/
+
+µb.getAvailableLists = async function() {
+ const newAvailableLists = {};
+
+ // User filter list
+ newAvailableLists[this.userFiltersPath] = {
+ content: 'filters',
+ group: 'user',
+ title: i18n$('1pPageName'),
+ };
+
+ // Custom filter lists
+ const importedListKeys = new Set(
+ this.listKeysFromCustomFilterLists(this.userSettings.importedLists)
+ );
+ for ( const listKey of importedListKeys ) {
+ const asset = {
+ content: 'filters',
+ contentURL: listKey,
+ external: true,
+ group: 'custom',
+ submitter: 'user',
+ title: '',
+ };
+ newAvailableLists[listKey] = asset;
+ io.registerAssetSource(listKey, asset);
+ }
+
+ // Load previously saved available lists -- these contains data
+ // computed at run-time, we will reuse this data if possible
+ const [ bin, registeredAssets, badlists ] = await Promise.all([
+ Object.keys(this.availableFilterLists).length !== 0
+ ? { availableFilterLists: this.availableFilterLists }
+ : vAPI.storage.get('availableFilterLists'),
+ io.metadata(),
+ this.badLists.size === 0 ? io.get('ublock-badlists') : false,
+ ]);
+
+ if ( badlists instanceof Object ) {
+ for ( const line of badlists.content.split(/\s*[\n\r]+\s*/) ) {
+ if ( line === '' || line.startsWith('#') ) { continue; }
+ const fields = line.split(/\s+/);
+ const remove = fields.length === 2;
+ this.badLists.set(fields[0], remove);
+ }
+ }
+
+ const oldAvailableLists = bin && bin.availableFilterLists || {};
+
+ for ( const [ assetKey, asset ] of Object.entries(registeredAssets) ) {
+ if ( asset.content !== 'filters' ) { continue; }
+ newAvailableLists[assetKey] = Object.assign({}, asset);
+ }
+
+ // Load set of currently selected filter lists
+ const selectedListset = new Set(this.selectedFilterLists);
+
+ // Remove imported filter lists which are already present in stock lists
+ for ( const [ stockAssetKey, stockEntry ] of Object.entries(newAvailableLists) ) {
+ if ( stockEntry.content !== 'filters' ) { continue; }
+ if ( stockEntry.group === 'user' ) { continue; }
+ if ( stockEntry.submitter === 'user' ) { continue; }
+ if ( stockAssetKey.includes('://') ) { continue; }
+ const contentURLs = Array.isArray(stockEntry.contentURL)
+ ? stockEntry.contentURL
+ : [ stockEntry.contentURL ];
+ for ( const importedAssetKey of contentURLs ) {
+ const importedEntry = newAvailableLists[importedAssetKey];
+ if ( importedEntry === undefined ) { continue; }
+ delete newAvailableLists[importedAssetKey];
+ io.unregisterAssetSource(importedAssetKey);
+ this.removeFilterList(importedAssetKey);
+ if ( selectedListset.has(importedAssetKey) ) {
+ selectedListset.add(stockAssetKey);
+ selectedListset.delete(importedAssetKey);
+ }
+ importedListKeys.delete(importedAssetKey);
+ break;
+ }
+ }
+
+ // Unregister lists in old listset not present in new listset.
+ // Convert a no longer existing stock list into an imported list, except
+ // when the removed stock list is deemed a "bad list".
+ for ( const [ assetKey, oldEntry ] of Object.entries(oldAvailableLists) ) {
+ if ( newAvailableLists[assetKey] !== undefined ) { continue; }
+ const on = selectedListset.delete(assetKey);
+ this.removeFilterList(assetKey);
+ io.unregisterAssetSource(assetKey);
+ if ( assetKey.includes('://') ) { continue; }
+ if ( on === false ) { continue; }
+ const listURL = Array.isArray(oldEntry.contentURL)
+ ? oldEntry.contentURL[0]
+ : oldEntry.contentURL;
+ if ( this.badLists.has(listURL) ) { continue; }
+ const newEntry = {
+ content: 'filters',
+ contentURL: listURL,
+ external: true,
+ group: 'custom',
+ submitter: 'user',
+ title: oldEntry.title || ''
+ };
+ newAvailableLists[listURL] = newEntry;
+ io.registerAssetSource(listURL, newEntry);
+ importedListKeys.add(listURL);
+ selectedListset.add(listURL);
+ }
+
+ // Remove unreferenced imported filter lists
+ for ( const [ assetKey, asset ] of Object.entries(newAvailableLists) ) {
+ if ( asset.submitter !== 'user' ) { continue; }
+ if ( importedListKeys.has(assetKey) ) { continue; }
+ selectedListset.delete(assetKey);
+ delete newAvailableLists[assetKey];
+ this.removeFilterList(assetKey);
+ io.unregisterAssetSource(assetKey);
+ }
+
+ // Mark lists as disabled/enabled according to selected listset
+ for ( const [ assetKey, asset ] of Object.entries(newAvailableLists) ) {
+ asset.off = selectedListset.has(assetKey) === false;
+ }
+
+ // Reuse existing metadata
+ for ( const [ assetKey, oldEntry ] of Object.entries(oldAvailableLists) ) {
+ const newEntry = newAvailableLists[assetKey];
+ if ( newEntry === undefined ) { continue; }
+ if ( oldEntry.entryCount !== undefined ) {
+ newEntry.entryCount = oldEntry.entryCount;
+ }
+ if ( oldEntry.entryUsedCount !== undefined ) {
+ newEntry.entryUsedCount = oldEntry.entryUsedCount;
+ }
+ // This may happen if the list name was pulled from the list content
+ // https://github.com/chrisaljoudi/uBlock/issues/982
+ // There is no guarantee the title was successfully extracted from
+ // the list content
+ if (
+ newEntry.title === '' &&
+ typeof oldEntry.title === 'string' &&
+ oldEntry.title !== ''
+ ) {
+ newEntry.title = oldEntry.title;
+ }
+ }
+
+ if ( Array.from(importedListKeys).join('\n') !== this.userSettings.importedLists.join('\n') ) {
+ this.userSettings.importedLists = Array.from(importedListKeys);
+ this.saveUserSettings();
+ }
+
+ if ( Array.from(selectedListset).join() !== this.selectedFilterLists.join() ) {
+ this.saveSelectedFilterLists(Array.from(selectedListset));
+ }
+
+ return newAvailableLists;
+};
+
+/******************************************************************************/
+
+{
+ const loadedListKeys = [];
+ let loadingPromise;
+ let t0 = 0;
+
+ const onDone = ( ) => {
+ ubolog(`loadFilterLists() took ${Date.now()-t0} ms`);
+
+ staticNetFilteringEngine.freeze();
+ staticExtFilteringEngine.freeze();
+ redirectEngine.freeze();
+ vAPI.net.unsuspend();
+ filteringBehaviorChanged();
+
+ vAPI.storage.set({ 'availableFilterLists': µb.availableFilterLists });
+
+ logger.writeOne({
+ realm: 'message',
+ type: 'info',
+ text: 'Reloading all filter lists: done'
+ });
+
+ broadcast({
+ what: 'staticFilteringDataChanged',
+ parseCosmeticFilters: µb.userSettings.parseAllABPHideFilters,
+ ignoreGenericCosmeticFilters: µb.userSettings.ignoreGenericCosmeticFilters,
+ listKeys: loadedListKeys
+ });
+
+ µb.selfieManager.destroy();
+ lz4Codec.relinquish();
+ µb.compiledFormatChanged = false;
+
+ loadingPromise = undefined;
+ };
+
+ const applyCompiledFilters = (assetKey, compiled) => {
+ const snfe = staticNetFilteringEngine;
+ const sxfe = staticExtFilteringEngine;
+ let acceptedCount = snfe.acceptedCount + sxfe.acceptedCount;
+ let discardedCount = snfe.discardedCount + sxfe.discardedCount;
+ µb.applyCompiledFilters(compiled, assetKey === µb.userFiltersPath);
+ if ( µb.availableFilterLists.hasOwnProperty(assetKey) ) {
+ const entry = µb.availableFilterLists[assetKey];
+ entry.entryCount = snfe.acceptedCount + sxfe.acceptedCount -
+ acceptedCount;
+ entry.entryUsedCount = entry.entryCount -
+ (snfe.discardedCount + sxfe.discardedCount - discardedCount);
+ }
+ loadedListKeys.push(assetKey);
+ };
+
+ const onFilterListsReady = lists => {
+ logger.writeOne({
+ realm: 'message',
+ type: 'info',
+ text: 'Reloading all filter lists: start'
+ });
+
+ µb.availableFilterLists = lists;
+
+ if ( vAPI.Net.canSuspend() ) {
+ vAPI.net.suspend();
+ }
+ redirectEngine.reset();
+ staticExtFilteringEngine.reset();
+ staticNetFilteringEngine.reset();
+ µb.selfieManager.destroy();
+ staticFilteringReverseLookup.resetLists();
+
+ // We need to build a complete list of assets to pull first: this is
+ // because it *may* happens that some load operations are synchronous:
+ // This happens for assets which do not exist, or assets with no
+ // content.
+ const toLoad = [];
+ for ( const assetKey in lists ) {
+ if ( lists.hasOwnProperty(assetKey) === false ) { continue; }
+ if ( lists[assetKey].off ) { continue; }
+ toLoad.push(
+ µb.getCompiledFilterList(assetKey).then(details => {
+ applyCompiledFilters(details.assetKey, details.content);
+ })
+ );
+ }
+
+ if ( µb.inMemoryFilters.length !== 0 ) {
+ if ( µb.inMemoryFiltersCompiled === '' ) {
+ µb.inMemoryFiltersCompiled =
+ µb.compileFilters(µb.inMemoryFilters.join('\n'), {
+ assetKey: 'in-memory',
+ trustedSource: true,
+ });
+ }
+ if ( µb.inMemoryFiltersCompiled !== '' ) {
+ toLoad.push(
+ µb.applyCompiledFilters(µb.inMemoryFiltersCompiled, true)
+ );
+ }
+ }
+
+ return Promise.all(toLoad);
+ };
+
+ µb.loadFilterLists = function() {
+ if ( loadingPromise instanceof Promise ) { return loadingPromise; }
+ t0 = Date.now();
+ loadedListKeys.length = 0;
+ loadingPromise = Promise.all([
+ this.getAvailableLists().then(lists => onFilterListsReady(lists)),
+ this.loadRedirectResources(),
+ ]).then(( ) => {
+ onDone();
+ });
+ return loadingPromise;
+ };
+}
+
+/******************************************************************************/
+
+µb.getCompiledFilterList = async function(assetKey) {
+ const compiledPath = 'compiled/' + assetKey;
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1365
+ // Verify that the list version matches that of the current compiled
+ // format.
+ if (
+ this.compiledFormatChanged === false &&
+ this.badLists.has(assetKey) === false
+ ) {
+ const compiledDetails = await io.get(compiledPath);
+ const compilerVersion = `${this.systemSettings.compiledMagic}\n`;
+ if ( compiledDetails.content.startsWith(compilerVersion) ) {
+ compiledDetails.assetKey = assetKey;
+ return compiledDetails;
+ }
+ }
+
+ // Skip downloading really bad lists.
+ if ( this.badLists.get(assetKey) ) {
+ return { assetKey, content: '' };
+ }
+
+ const rawDetails = await io.get(assetKey, {
+ favorLocal: this.readyToFilter !== true,
+ silent: true,
+ });
+ // Compiling an empty string results in an empty string.
+ if ( rawDetails.content === '' ) {
+ rawDetails.assetKey = assetKey;
+ return rawDetails;
+ }
+
+ this.extractFilterListMetadata(assetKey, rawDetails.content);
+
+ // Skip compiling bad lists.
+ if ( this.badLists.has(assetKey) ) {
+ return { assetKey, content: '' };
+ }
+
+ const compiledContent = this.compileFilters(rawDetails.content, {
+ assetKey,
+ trustedSource: this.isTrustedList(assetKey),
+ });
+ io.put(compiledPath, compiledContent);
+
+ return { assetKey, content: compiledContent };
+};
+
+/******************************************************************************/
+
+µb.extractFilterListMetadata = function(assetKey, raw) {
+ const listEntry = this.availableFilterLists[assetKey];
+ if ( listEntry === undefined ) { return; }
+ // https://github.com/gorhill/uBlock/issues/313
+ // Always try to fetch the name if this is an external filter list.
+ if ( listEntry.group !== 'custom' ) { return; }
+ const data = io.extractMetadataFromList(raw, [ 'Title', 'Homepage' ]);
+ const props = {};
+ if ( data.title && data.title !== listEntry.title ) {
+ props.title = listEntry.title = orphanizeString(data.title);
+ }
+ if ( data.homepage && /^https?:\/\/\S+/.test(data.homepage) ) {
+ if ( data.homepage !== listEntry.supportURL ) {
+ props.supportURL = listEntry.supportURL = orphanizeString(data.homepage);
+ }
+ }
+ io.registerAssetSource(assetKey, props);
+};
+
+/******************************************************************************/
+
+µb.removeCompiledFilterList = function(assetKey) {
+ io.remove('compiled/' + assetKey);
+};
+
+µb.removeFilterList = function(assetKey) {
+ this.removeCompiledFilterList(assetKey);
+ io.remove(assetKey);
+};
+
+/******************************************************************************/
+
+µb.compileFilters = function(rawText, details = {}) {
+ const writer = new CompiledListWriter();
+
+ // Populate the writer with information potentially useful to the
+ // client compilers.
+ const trustedSource = details.trustedSource === true;
+ if ( details.assetKey ) {
+ writer.properties.set('name', details.assetKey);
+ writer.properties.set('trustedSource', trustedSource);
+ }
+ const assetName = details.assetKey ? details.assetKey : '?';
+ const parser = new sfp.AstFilterParser({
+ trustedSource,
+ maxTokenLength: staticNetFilteringEngine.MAX_TOKEN_LENGTH,
+ nativeCssHas: vAPI.webextFlavor.env.includes('native_css_has'),
+ });
+ const compiler = staticNetFilteringEngine.createCompiler(parser);
+ const lineIter = new LineIterator(
+ sfp.utils.preparser.prune(rawText, vAPI.webextFlavor.env)
+ );
+
+ compiler.start(writer);
+
+ while ( lineIter.eot() === false ) {
+ let line = lineIter.next();
+
+ while ( line.endsWith(' \\') ) {
+ if ( lineIter.peek(4) !== ' ' ) { break; }
+ line = line.slice(0, -2).trim() + lineIter.next().trim();
+ }
+
+ parser.parse(line);
+
+ if ( parser.isFilter() === false ) { continue; }
+ if ( parser.hasError() ) {
+ logger.writeOne({
+ realm: 'message',
+ type: 'error',
+ text: `Invalid filter (${assetName}): ${parser.raw}`
+ });
+ continue;
+ }
+
+ if ( parser.isExtendedFilter() ) {
+ staticExtFilteringEngine.compile(parser, writer);
+ continue;
+ }
+
+ if ( parser.isNetworkFilter() === false ) { continue; }
+
+ if ( compiler.compile(parser, writer) ) { continue; }
+ if ( compiler.error !== undefined ) {
+ logger.writeOne({
+ realm: 'message',
+ type: 'error',
+ text: compiler.error
+ });
+ }
+ }
+
+ compiler.finish(writer);
+ parser.finish();
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1365
+ // Embed version into compiled list itself: it is encoded in as the
+ // first digits followed by a whitespace.
+ const compiledContent
+ = `${this.systemSettings.compiledMagic}\n` + writer.toString();
+
+ return compiledContent;
+};
+
+/******************************************************************************/
+
+// https://github.com/gorhill/uBlock/issues/1395
+// Added `firstparty` argument: to avoid discarding cosmetic filters when
+// applying 1st-party filters.
+
+µb.applyCompiledFilters = function(rawText, firstparty) {
+ if ( rawText === '' ) { return; }
+ const reader = new CompiledListReader(rawText);
+ staticNetFilteringEngine.fromCompiled(reader);
+ staticExtFilteringEngine.fromCompiledContent(reader, {
+ skipGenericCosmetic: this.userSettings.ignoreGenericCosmeticFilters,
+ skipCosmetic: !firstparty && !this.userSettings.parseAllABPHideFilters
+ });
+};
+
+/******************************************************************************/
+
+µb.loadRedirectResources = async function() {
+ try {
+ const success = await redirectEngine.resourcesFromSelfie(io);
+ if ( success === true ) { return true; }
+
+ const fetcher = (path, options = undefined) => {
+ if ( path.startsWith('/web_accessible_resources/') ) {
+ path += `?secret=${vAPI.warSecret.short()}`;
+ return io.fetch(path, options);
+ }
+ return io.fetchText(path);
+ };
+
+ const fetchPromises = [
+ redirectEngine.loadBuiltinResources(fetcher)
+ ];
+
+ const userResourcesLocation = this.hiddenSettings.userResourcesLocation;
+ if ( userResourcesLocation !== 'unset' ) {
+ for ( const url of userResourcesLocation.split(/\s+/) ) {
+ fetchPromises.push(io.fetchText(url));
+ }
+ }
+
+ const results = await Promise.all(fetchPromises);
+ if ( Array.isArray(results) === false ) { return results; }
+
+ let content = '';
+ for ( let i = 1; i < results.length; i++ ) {
+ const result = results[i];
+ if (
+ result instanceof Object === false ||
+ typeof result.content !== 'string' ||
+ result.content === ''
+ ) {
+ continue;
+ }
+ content += '\n\n' + result.content;
+ }
+
+ redirectEngine.resourcesFromString(content);
+ redirectEngine.selfieFromResources(io);
+ } catch(ex) {
+ ubolog(ex);
+ return false;
+ }
+ return true;
+};
+
+/******************************************************************************/
+
+µb.loadPublicSuffixList = async function() {
+ const psl = publicSuffixList;
+
+ // WASM is nice but not critical
+ if ( vAPI.canWASM && this.hiddenSettings.disableWebAssembly !== true ) {
+ const wasmModuleFetcher = function(path) {
+ return fetch( `${path}.wasm`, {
+ mode: 'same-origin'
+ }).then(
+ WebAssembly.compileStreaming
+ ).catch(reason => {
+ ubolog(reason);
+ });
+ };
+ let result = false;
+ try {
+ result = await psl.enableWASM(wasmModuleFetcher,
+ './lib/publicsuffixlist/wasm/'
+ );
+ } catch(reason) {
+ ubolog(reason);
+ }
+ if ( result ) {
+ ubolog(`WASM PSL ready ${Date.now()-vAPI.T0} ms after launch`);
+ }
+ }
+
+ try {
+ const result = await io.get(`compiled/${this.pslAssetKey}`);
+ if ( psl.fromSelfie(result.content, sparseBase64) ) { return; }
+ } catch (reason) {
+ ubolog(reason);
+ }
+
+ const result = await io.get(this.pslAssetKey);
+ if ( result.content !== '' ) {
+ this.compilePublicSuffixList(result.content);
+ }
+};
+
+µb.compilePublicSuffixList = function(content) {
+ const psl = publicSuffixList;
+ psl.parse(content, punycode.toASCII);
+ io.put(`compiled/${this.pslAssetKey}`, psl.toSelfie(sparseBase64));
+};
+
+/******************************************************************************/
+
+// This is to be sure the selfie is generated in a sane manner: the selfie will
+// be generated if the user doesn't change his filter lists selection for
+// some set time.
+
+{
+ // As of 2018-05-31:
+ // JSON.stringify-ing ourselves results in a better baseline
+ // memory usage at selfie-load time. For some reasons.
+
+ const create = async function() {
+ vAPI.alarms.clear('createSelfie');
+ createTimer.off();
+ if ( µb.inMemoryFilters.length !== 0 ) { return; }
+ if ( Object.keys(µb.availableFilterLists).length === 0 ) { return; }
+ await Promise.all([
+ io.put(
+ 'selfie/main',
+ JSON.stringify({
+ magic: µb.systemSettings.selfieMagic,
+ availableFilterLists: µb.availableFilterLists,
+ })
+ ),
+ redirectEngine.toSelfie('selfie/redirectEngine'),
+ staticExtFilteringEngine.toSelfie(
+ 'selfie/staticExtFilteringEngine'
+ ),
+ staticNetFilteringEngine.toSelfie(io,
+ 'selfie/staticNetFilteringEngine'
+ ),
+ ]);
+ lz4Codec.relinquish();
+ µb.selfieIsInvalid = false;
+ };
+
+ const loadMain = async function() {
+ const details = await io.get('selfie/main');
+ if (
+ details instanceof Object === false ||
+ typeof details.content !== 'string' ||
+ details.content === ''
+ ) {
+ return false;
+ }
+ let selfie;
+ try {
+ selfie = JSON.parse(details.content);
+ } catch(ex) {
+ }
+ if ( selfie instanceof Object === false ) { return false; }
+ if ( selfie.magic !== µb.systemSettings.selfieMagic ) { return false; }
+ if ( selfie.availableFilterLists instanceof Object === false ) { return false; }
+ if ( Object.keys(selfie.availableFilterLists).length === 0 ) { return false; }
+ µb.availableFilterLists = selfie.availableFilterLists;
+ return true;
+ };
+
+ const load = async function() {
+ if ( µb.selfieIsInvalid ) { return false; }
+ try {
+ const results = await Promise.all([
+ loadMain(),
+ redirectEngine.fromSelfie('selfie/redirectEngine'),
+ staticExtFilteringEngine.fromSelfie(
+ 'selfie/staticExtFilteringEngine'
+ ),
+ staticNetFilteringEngine.fromSelfie(io,
+ 'selfie/staticNetFilteringEngine'
+ ),
+ ]);
+ if ( results.every(v => v) ) {
+ return µb.loadRedirectResources();
+ }
+ }
+ catch (reason) {
+ ubolog(reason);
+ }
+ destroy();
+ return false;
+ };
+
+ const destroy = function() {
+ if ( µb.selfieIsInvalid === false ) {
+ io.remove(/^selfie\//);
+ µb.selfieIsInvalid = true;
+ }
+ if ( µb.wakeupReason === 'createSelfie' ) {
+ µb.wakeupReason = '';
+ return createTimer.offon({ sec: 27 });
+ }
+ vAPI.alarms.create('createSelfie', {
+ delayInMinutes: µb.hiddenSettings.selfieAfter
+ });
+ createTimer.offon({ min: µb.hiddenSettings.selfieAfter });
+ };
+
+ const createTimer = vAPI.defer.create(create);
+
+ vAPI.alarms.onAlarm.addListener(alarm => {
+ if ( alarm.name !== 'createSelfie') { return; }
+ µb.wakeupReason = 'createSelfie';
+ });
+
+ µb.selfieManager = { load, destroy };
+}
+
+/******************************************************************************/
+
+// https://github.com/gorhill/uBlock/issues/531
+// Overwrite user settings with admin settings if present.
+//
+// Admin settings match layout of a uBlock backup. Not all data is
+// necessarily present, i.e. administrators may removed entries which
+// values are left to the user's choice.
+
+µb.restoreAdminSettings = async function() {
+ let toOverwrite = {};
+ let data;
+ try {
+ const store = await vAPI.adminStorage.get([
+ 'adminSettings',
+ 'toOverwrite',
+ ]) || {};
+ if ( store.toOverwrite instanceof Object ) {
+ toOverwrite = store.toOverwrite;
+ }
+ const json = store.adminSettings;
+ if ( typeof json === 'string' && json !== '' ) {
+ data = JSON.parse(json);
+ } else if ( json instanceof Object ) {
+ data = json;
+ }
+ } catch (ex) {
+ console.error(ex);
+ }
+
+ if ( data instanceof Object === false ) { data = {}; }
+
+ const bin = {};
+ let binNotEmpty = false;
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/666
+ // Allows an admin to set their own 'assets.json' file, with their
+ // own set of stock assets.
+ if (
+ typeof data.assetsBootstrapLocation === 'string' &&
+ data.assetsBootstrapLocation !== ''
+ ) {
+ µb.assetsBootstrapLocation = data.assetsBootstrapLocation;
+ }
+
+ if ( typeof data.userSettings === 'object' ) {
+ const µbus = this.userSettings;
+ const adminus = data.userSettings;
+ for ( const name in µbus ) {
+ if ( µbus.hasOwnProperty(name) === false ) { continue; }
+ if ( adminus.hasOwnProperty(name) === false ) { continue; }
+ bin[name] = adminus[name];
+ binNotEmpty = true;
+ }
+ }
+
+ // 'selectedFilterLists' is an array of filter list tokens. Each token
+ // is a reference to an asset in 'assets.json', or a URL for lists not
+ // present in 'assets.json'.
+ if (
+ Array.isArray(toOverwrite.filterLists) &&
+ toOverwrite.filterLists.length !== 0
+ ) {
+ const importedLists = [];
+ for ( const list of toOverwrite.filterLists ) {
+ if ( /^[a-z-]+:\/\//.test(list) === false ) { continue; }
+ importedLists.push(list);
+ }
+ if ( importedLists.length !== 0 ) {
+ bin.importedLists = importedLists;
+ bin.externalLists = importedLists.join('\n');
+ }
+ bin.selectedFilterLists = toOverwrite.filterLists;
+ binNotEmpty = true;
+ } else if ( Array.isArray(data.selectedFilterLists) ) {
+ bin.selectedFilterLists = data.selectedFilterLists;
+ binNotEmpty = true;
+ }
+
+ if (
+ Array.isArray(toOverwrite.trustedSiteDirectives) &&
+ toOverwrite.trustedSiteDirectives.length !== 0
+ ) {
+ µb.netWhitelistDefault = toOverwrite.trustedSiteDirectives.slice();
+ bin.netWhitelist = toOverwrite.trustedSiteDirectives.slice();
+ binNotEmpty = true;
+ } else if ( Array.isArray(data.whitelist) ) {
+ bin.netWhitelist = data.whitelist;
+ binNotEmpty = true;
+ } else if ( typeof data.netWhitelist === 'string' ) {
+ bin.netWhitelist = data.netWhitelist.split('\n');
+ binNotEmpty = true;
+ }
+
+ if ( typeof data.dynamicFilteringString === 'string' ) {
+ bin.dynamicFilteringString = data.dynamicFilteringString;
+ binNotEmpty = true;
+ }
+
+ if ( typeof data.urlFilteringString === 'string' ) {
+ bin.urlFilteringString = data.urlFilteringString;
+ binNotEmpty = true;
+ }
+
+ if ( typeof data.hostnameSwitchesString === 'string' ) {
+ bin.hostnameSwitchesString = data.hostnameSwitchesString;
+ binNotEmpty = true;
+ }
+
+ if ( binNotEmpty ) {
+ vAPI.storage.set(bin);
+ }
+
+ if (
+ Array.isArray(toOverwrite.filters) &&
+ toOverwrite.filters.length !== 0
+ ) {
+ this.saveUserFilters(toOverwrite.filters.join('\n'));
+ } else if ( typeof data.userFilters === 'string' ) {
+ this.saveUserFilters(data.userFilters);
+ }
+};
+
+/******************************************************************************/
+
+// https://github.com/gorhill/uBlock/issues/2344
+// Support multiple locales per filter list.
+// https://github.com/gorhill/uBlock/issues/3210
+// Support ability to auto-enable a filter list based on user agent.
+// https://github.com/gorhill/uBlock/pull/3860
+// Get current language using extensions API (instead of `navigator.language`)
+
+µb.listMatchesEnvironment = function(details) {
+ // Matches language?
+ if ( typeof details.lang === 'string' ) {
+ let re = this.listMatchesEnvironment.reLang;
+ if ( re === undefined ) {
+ const match = /^[a-z]+/.exec(i18n.getUILanguage());
+ if ( match !== null ) {
+ re = new RegExp('\\b' + match[0] + '\\b');
+ this.listMatchesEnvironment.reLang = re;
+ }
+ }
+ if ( re !== undefined && re.test(details.lang) ) { return true; }
+ }
+ // Matches user agent?
+ if ( typeof details.ua === 'string' ) {
+ let re = new RegExp('\\b' + this.escapeRegex(details.ua) + '\\b', 'i');
+ if ( re.test(self.navigator.userAgent) ) { return true; }
+ }
+ return false;
+};
+
+/******************************************************************************/
+
+{
+ let next = 0;
+ let lastEmergencyUpdate = 0;
+
+ const launchTimer = vAPI.defer.create(fetchDelay => {
+ next = 0;
+ io.updateStart({ fetchDelay, auto: true });
+ });
+
+ µb.scheduleAssetUpdater = async function(details = {}) {
+ launchTimer.off();
+
+ if ( details.now ) {
+ next = 0;
+ io.updateStart(details);
+ return;
+ }
+
+ if ( µb.userSettings.autoUpdate === false ) {
+ if ( Boolean(details.updateDelay) === false ) {
+ next = 0;
+ return;
+ }
+ }
+
+ let updateDelay = details.updateDelay ||
+ this.hiddenSettings.autoUpdatePeriod * 3600000;
+
+ const now = Date.now();
+ let needEmergencyUpdate = false;
+
+ // Respect cooldown period before launching an emergency update.
+ const timeSinceLastEmergencyUpdate = (now - lastEmergencyUpdate) / 3600000;
+ if ( timeSinceLastEmergencyUpdate > 1 ) {
+ const entries = await io.getUpdateAges({
+ filters: µb.selectedFilterLists,
+ internal: [ '*' ],
+ });
+ for ( const entry of entries ) {
+ if ( entry.ageNormalized < 2 ) { continue; }
+ needEmergencyUpdate = true;
+ lastEmergencyUpdate = now;
+ break;
+ }
+ }
+
+ // Use the new schedule if and only if it is earlier than the previous
+ // one.
+ if ( next !== 0 ) {
+ updateDelay = Math.min(updateDelay, Math.max(next - now, 0));
+ }
+
+ if ( needEmergencyUpdate ) {
+ updateDelay = Math.min(updateDelay, 15000);
+ }
+
+ next = now + updateDelay;
+
+ const fetchDelay = needEmergencyUpdate
+ ? 2000
+ : this.hiddenSettings.autoUpdateAssetFetchPeriod * 1000 || 60000;
+
+ launchTimer.on(updateDelay, fetchDelay);
+ };
+}
+
+/******************************************************************************/
+
+µb.assetObserver = function(topic, details) {
+ // Do not update filter list if not in use.
+ // Also, ignore really bad lists, i.e. those which should not even be
+ // fetched from a remote server.
+ if ( topic === 'before-asset-updated' ) {
+ if ( details.type === 'filters' ) {
+ if (
+ this.availableFilterLists.hasOwnProperty(details.assetKey) === false ||
+ this.selectedFilterLists.indexOf(details.assetKey) === -1 ||
+ this.badLists.get(details.assetKey)
+ ) {
+ return;
+ }
+ }
+ return true;
+ }
+
+ // Compile the list while we have the raw version in memory
+ if ( topic === 'after-asset-updated' ) {
+ // Skip selfie-related content.
+ if ( details.assetKey.startsWith('selfie/') ) { return; }
+ const cached = typeof details.content === 'string' &&
+ details.content !== '';
+ if ( this.availableFilterLists.hasOwnProperty(details.assetKey) ) {
+ if ( cached ) {
+ if ( this.selectedFilterLists.indexOf(details.assetKey) !== -1 ) {
+ this.extractFilterListMetadata(
+ details.assetKey,
+ details.content
+ );
+ if ( this.badLists.has(details.assetKey) === false ) {
+ io.put(
+ 'compiled/' + details.assetKey,
+ this.compileFilters(details.content, {
+ assetKey: details.assetKey,
+ trustedSource: this.isTrustedList(details.assetKey),
+ })
+ );
+ }
+ }
+ } else {
+ this.removeCompiledFilterList(details.assetKey);
+ }
+ } else if ( details.assetKey === this.pslAssetKey ) {
+ if ( cached ) {
+ this.compilePublicSuffixList(details.content);
+ }
+ } else if ( details.assetKey === 'ublock-badlists' ) {
+ this.badLists = new Map();
+ }
+ broadcast({
+ what: 'assetUpdated',
+ key: details.assetKey,
+ cached,
+ });
+ // https://github.com/gorhill/uBlock/issues/2585
+ // Whenever an asset is overwritten, the current selfie is quite
+ // likely no longer valid.
+ this.selfieManager.destroy();
+ return;
+ }
+
+ // Update failed.
+ if ( topic === 'asset-update-failed' ) {
+ broadcast({
+ what: 'assetUpdated',
+ key: details.assetKey,
+ failed: true,
+ });
+ return;
+ }
+
+ // Reload all filter lists if needed.
+ if ( topic === 'after-assets-updated' ) {
+ if ( details.assetKeys.length !== 0 ) {
+ // https://github.com/gorhill/uBlock/pull/2314#issuecomment-278716960
+ if (
+ this.hiddenSettings.userResourcesLocation !== 'unset' ||
+ vAPI.webextFlavor.soup.has('devbuild')
+ ) {
+ redirectEngine.invalidateResourcesSelfie(io);
+ }
+ this.loadFilterLists();
+ }
+ this.scheduleAssetUpdater();
+ broadcast({
+ what: 'assetsUpdated',
+ assetKeys: details.assetKeys
+ });
+ return;
+ }
+
+ // New asset source became available, if it's a filter list, should we
+ // auto-select it?
+ if ( topic === 'builtin-asset-source-added' ) {
+ if ( details.entry.content === 'filters' ) {
+ if (
+ details.entry.off === true &&
+ this.listMatchesEnvironment(details.entry)
+ ) {
+ this.saveSelectedFilterLists([ details.assetKey ], true);
+ }
+ }
+ return;
+ }
+
+ if ( topic === 'assets.json-updated' ) {
+ const { newDict, oldDict } = details;
+ if ( newDict['assets.json'] === undefined ) { return; }
+ if ( oldDict['assets.json'] === undefined ) { return; }
+ const newDefaultListset = new Set(newDict['assets.json'].defaultListset || []);
+ const oldDefaultListset = new Set(oldDict['assets.json'].defaultListset || []);
+ if ( newDefaultListset.size === 0 ) { return; }
+ if ( oldDefaultListset.size === 0 ) {
+ Array.from(Object.entries(oldDict))
+ .filter(a =>
+ a[1].content === 'filters' &&
+ a[1].off === undefined &&
+ /^https?:\/\//.test(a[0]) === false
+ )
+ .map(a => a[0])
+ .forEach(a => oldDefaultListset.add(a));
+ if ( oldDefaultListset.size === 0 ) { return; }
+ }
+ const selectedListset = new Set(this.selectedFilterLists);
+ let selectedListModified = false;
+ for ( const assetKey of oldDefaultListset ) {
+ if ( newDefaultListset.has(assetKey) ) { continue; }
+ selectedListset.delete(assetKey);
+ selectedListModified = true;
+ }
+ for ( const assetKey of newDefaultListset ) {
+ if ( oldDefaultListset.has(assetKey) ) { continue; }
+ selectedListset.add(assetKey);
+ selectedListModified = true;
+ }
+ if ( selectedListModified ) {
+ this.saveSelectedFilterLists(Array.from(selectedListset));
+ }
+ return;
+ }
+};
diff --git a/src/js/support.js b/src/js/support.js
new file mode 100644
index 0000000..9bfd7cb
--- /dev/null
+++ b/src/js/support.js
@@ -0,0 +1,335 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* global CodeMirror, uBlockDashboard */
+
+'use strict';
+
+import { onBroadcast } from './broadcast.js';
+import { dom, qs$ } from './dom.js';
+
+/******************************************************************************/
+
+const uselessKeys = [
+ 'hiddenSettings.benchmarkDatasetURL',
+ 'hiddenSettings.blockingProfiles',
+ 'hiddenSettings.consoleLogLevel',
+ 'hiddenSettings.uiPopupConfig',
+ 'userSettings.alwaysDetachLogger',
+ 'userSettings.firewallPaneMinimized',
+ 'userSettings.externalLists',
+ 'userSettings.importedLists',
+ 'userSettings.popupPanelSections',
+ 'userSettings.uiAccentCustom',
+ 'userSettings.uiAccentCustom0',
+ 'userSettings.uiTheme',
+];
+
+const sensitiveValues = [
+ 'filterset (user)',
+ 'userSettings.popupPanelSections',
+ 'hiddenSettings.userResourcesLocation',
+ 'trustedset.added',
+ 'hostRuleset.added',
+ 'switchRuleset.added',
+ 'urlRuleset.added',
+];
+
+const sensitiveKeys = [
+ 'listset.added',
+];
+
+/******************************************************************************/
+
+function removeKey(data, prop) {
+ if ( data instanceof Object === false ) { return; }
+ const pos = prop.indexOf('.');
+ if ( pos !== -1 ) {
+ const key = prop.slice(0, pos);
+ return removeKey(data[key], prop.slice(pos + 1));
+ }
+ delete data[prop];
+}
+
+function redactValue(data, prop) {
+ if ( data instanceof Object === false ) { return; }
+ const pos = prop.indexOf('.');
+ if ( pos !== -1 ) {
+ return redactValue(data[prop.slice(0, pos)], prop.slice(pos + 1));
+ }
+ let value = data[prop];
+ if ( value === undefined ) { return; }
+ if ( Array.isArray(value) ) {
+ if ( value.length !== 0 ) {
+ value = `[array of ${value.length} redacted]`;
+ } else {
+ value = '[empty]';
+ }
+ } else {
+ value = '[redacted]';
+ }
+ data[prop] = value;
+}
+
+function redactKeys(data, prop) {
+ if ( data instanceof Object === false ) { return; }
+ const pos = prop.indexOf('.');
+ if ( pos !== -1 ) {
+ return redactKeys(data[prop.slice(0, pos)], prop.slice(pos + 1));
+ }
+ const obj = data[prop];
+ if ( obj instanceof Object === false ) { return; }
+ let count = 1;
+ for ( const key in obj ) {
+ if ( key.startsWith('file://') === false ) { continue; }
+ const newkey = `[list name ${count} redacted]`;
+ obj[newkey] = obj[key];
+ obj[key] = undefined;
+ count += 1;
+ }
+}
+
+function patchEmptiness(data, prop) {
+ const entry = data[prop];
+ if ( Array.isArray(entry) && entry.length === 0 ) {
+ data[prop] = '[empty]';
+ return;
+ }
+ if ( entry instanceof Object === false ) { return; }
+ if ( Object.keys(entry).length === 0 ) {
+ data[prop] = '[none]';
+ return;
+ }
+ for ( const key in entry ) {
+ patchEmptiness(entry, key);
+ }
+}
+
+function configToMarkdown(collapse = false) {
+ const text = cmEditor.getValue().trim();
+ return collapse
+ ? '<details>\n\n```yaml\n' + text + '\n```\n</details>'
+ : '```yaml\n' + text + '\n```\n';
+}
+
+function addDetailsToReportURL(id, collapse = false) {
+ const elem = qs$(`#${id}`);
+ const url = new URL(dom.attr(elem, 'data-url'));
+ url.searchParams.set('configuration', configToMarkdown(collapse));
+ dom.attr(elem, 'data-url', url);
+}
+
+function renderData(data, depth = 0) {
+ const indent = ' '.repeat(depth);
+ if ( Array.isArray(data) ) {
+ const out = [];
+ for ( const value of data ) {
+ out.push(renderData(value, depth));
+ }
+ return out.join('\n');
+ }
+ if ( typeof data !== 'object' || data === null ) {
+ return `${indent}${data}`;
+ }
+ const out = [];
+ for ( const [ name, value ] of Object.entries(data) ) {
+ if ( typeof value === 'object' && value !== null ) {
+ out.push(`${indent}${name}:`);
+ out.push(renderData(value, depth + 1));
+ continue;
+ }
+ out.push(`${indent}${name}: ${value}`);
+ }
+ return out.join('\n');
+}
+
+async function showSupportData() {
+ const supportData = await vAPI.messaging.send('dashboard', {
+ what: 'getSupportData',
+ });
+ const shownData = JSON.parse(JSON.stringify(supportData));
+ uselessKeys.forEach(prop => { removeKey(shownData, prop); });
+ const redacted = true;
+ if ( redacted ) {
+ sensitiveValues.forEach(prop => { redactValue(shownData, prop); });
+ sensitiveKeys.forEach(prop => { redactKeys(shownData, prop); });
+ }
+ for ( const prop in shownData ) {
+ patchEmptiness(shownData, prop);
+ }
+ if ( reportedPage !== null ) {
+ shownData.popupPanel = reportedPage.popupPanel;
+ }
+ const text = renderData(shownData);
+ cmEditor.setValue(text);
+ cmEditor.clearHistory();
+
+ addDetailsToReportURL('filterReport', true);
+ addDetailsToReportURL('bugReport', true);
+}
+
+/******************************************************************************/
+
+const reportedPage = (( ) => {
+ const url = new URL(window.location.href);
+ try {
+ const pageURL = url.searchParams.get('pageURL');
+ if ( pageURL === null ) { return null; }
+ const parsedURL = new URL(pageURL);
+ parsedURL.username = '';
+ parsedURL.password = '';
+ parsedURL.hash = '';
+ const select = qs$('select[name="url"]');
+ dom.text(select.options[0], parsedURL.href);
+ if ( parsedURL.search !== '' ) {
+ const option = dom.create('option');
+ parsedURL.search = '';
+ dom.text(option, parsedURL.href);
+ select.append(option);
+ }
+ if ( parsedURL.pathname !== '/' ) {
+ const option = dom.create('option');
+ parsedURL.pathname = '';
+ dom.text(option, parsedURL.href);
+ select.append(option);
+ }
+ const shouldUpdateLists = url.searchParams.get('shouldUpdateLists');
+ if ( shouldUpdateLists !== null ) {
+ dom.body.dataset.shouldUpdateLists = shouldUpdateLists;
+ }
+ dom.cl.add(dom.body, 'filterIssue');
+ return {
+ hostname: parsedURL.hostname.replace(/^(m|mobile|www)\./, ''),
+ popupPanel: JSON.parse(url.searchParams.get('popupPanel')),
+ };
+ } catch(ex) {
+ }
+ return null;
+})();
+
+function reportSpecificFilterType() {
+ return qs$('select[name="type"]').value;
+}
+
+function reportSpecificFilterIssue() {
+ const githubURL = new URL(
+ 'https://github.com/uBlockOrigin/uAssets/issues/new?template=specific_report_from_ubo.yml'
+ );
+ const issueType = reportSpecificFilterType();
+ let title = `${reportedPage.hostname}: ${issueType}`;
+ if ( qs$('#isNSFW').checked ) {
+ title = `[nsfw] ${title}`;
+ }
+ githubURL.searchParams.set('title', title);
+ githubURL.searchParams.set(
+ 'url_address_of_the_web_page',
+ '`' + qs$('select[name="url"]').value + '`'
+ );
+ githubURL.searchParams.set('category', issueType);
+ githubURL.searchParams.set('configuration', configToMarkdown(true));
+ vAPI.messaging.send('default', {
+ what: 'gotoURL',
+ details: { url: githubURL.href, select: true, index: -1 },
+ });
+}
+
+async function updateFilterLists() {
+ if ( dom.body.dataset.shouldUpdateLists === undefined ) { return false; }
+ dom.cl.add(dom.body, 'updating');
+ const assetKeys = JSON.parse(dom.body.dataset.shouldUpdateLists);
+ vAPI.messaging.send('dashboard', { what: 'supportUpdateNow', assetKeys });
+ return true;
+}
+
+/******************************************************************************/
+
+const cmEditor = new CodeMirror(qs$('#supportData'), {
+ autofocus: true,
+ readOnly: true,
+ styleActiveLine: true,
+});
+
+uBlockDashboard.patchCodeMirrorEditor(cmEditor);
+
+/******************************************************************************/
+
+(async ( ) => {
+ await showSupportData();
+
+ dom.on('[data-url]', 'click', ev => {
+ const elem = ev.target.closest('[data-url]');
+ const url = dom.attr(elem, 'data-url');
+ if ( typeof url !== 'string' || url === '' ) { return; }
+ vAPI.messaging.send('default', {
+ what: 'gotoURL',
+ details: { url, select: true, index: -1, shiftKey: ev.shiftKey },
+ });
+ ev.preventDefault();
+ });
+
+ if ( reportedPage !== null ) {
+ if ( dom.body.dataset.shouldUpdateLists ) {
+ dom.on('.supportEntry.shouldUpdate button', 'click', ev => {
+ if ( updateFilterLists() === false ) { return; }
+ ev.preventDefault();
+ });
+ }
+
+ dom.on('[data-i18n="supportReportSpecificButton"]', 'click', ev => {
+ reportSpecificFilterIssue();
+ ev.preventDefault();
+ });
+
+ dom.on('[data-i18n="supportFindSpecificButton"]', 'click', ev => {
+ const url = new URL('https://github.com/uBlockOrigin/uAssets/issues');
+ url.searchParams.set('q', `is:issue sort:updated-desc "${reportedPage.hostname}" in:title`);
+ vAPI.messaging.send('default', {
+ what: 'gotoURL',
+ details: { url: url.href, select: true, index: -1 },
+ });
+ ev.preventDefault();
+ });
+
+ dom.on('#showSupportInfo', 'click', ev => {
+ const button = ev.target.closest('#showSupportInfo');
+ dom.cl.add(button, 'hidden');
+ dom.cl.add('.a.b.c.d', 'e');
+ cmEditor.refresh();
+ });
+ }
+
+ onBroadcast(msg => {
+ if ( msg.what === 'assetsUpdated' ) {
+ dom.cl.remove(dom.body, 'updating');
+ dom.cl.add(dom.body, 'updated');
+ return;
+ }
+ if ( msg.what === 'staticFilteringDataChanged' ) {
+ showSupportData();
+ return;
+ }
+ });
+
+ dom.on('#selectAllButton', 'click', ( ) => {
+ cmEditor.focus();
+ cmEditor.execCommand('selectAll');
+ });
+})();
diff --git a/src/js/tab.js b/src/js/tab.js
new file mode 100644
index 0000000..c505e5a
--- /dev/null
+++ b/src/js/tab.js
@@ -0,0 +1,1178 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import contextMenu from './contextmenu.js';
+import logger from './logger.js';
+import scriptletFilteringEngine from './scriptlet-filtering.js';
+import staticNetFilteringEngine from './static-net-filtering.js';
+import µb from './background.js';
+import webext from './webext.js';
+import { PageStore } from './pagestore.js';
+import { i18n$ } from './i18n.js';
+
+import {
+ sessionFirewall,
+ sessionSwitches,
+ sessionURLFiltering,
+} from './filtering-engines.js';
+
+import {
+ domainFromHostname,
+ hostnameFromURI,
+ originFromURI,
+} from './uri-utils.js';
+
+/******************************************************************************/
+/******************************************************************************/
+
+// https://github.com/gorhill/httpswitchboard/issues/303
+// Any scheme other than 'http' and 'https' is remapped into a fake
+// URL which trick the rest of µBlock into being able to process an
+// otherwise unmanageable scheme. µBlock needs web page to have a proper
+// hostname to work properly, so just like the 'chromium-behind-the-scene'
+// fake domain name, we map unknown schemes into a fake '{scheme}-scheme'
+// hostname. This way, for a specific scheme you can create scope with
+// rules which will apply only to that scheme.
+
+µb.normalizeTabURL = (( ) => {
+ const tabURLNormalizer = new URL('about:blank');
+
+ return (tabId, tabURL) => {
+ if ( tabId < 0 ) {
+ return 'http://behind-the-scene/';
+ }
+ try {
+ tabURLNormalizer.href = tabURL;
+ } catch(ex) {
+ return tabURL;
+ }
+ const protocol = tabURLNormalizer.protocol.slice(0, -1);
+ if ( protocol === 'https' || protocol === 'http' ) {
+ return tabURLNormalizer.href;
+ }
+
+ let fakeHostname = protocol + '-scheme';
+
+ if ( tabURLNormalizer.hostname !== '' ) {
+ fakeHostname = tabURLNormalizer.hostname + '.' + fakeHostname;
+ } else if ( protocol === 'about' && protocol.pathname !== '' ) {
+ fakeHostname = tabURLNormalizer.pathname + '.' + fakeHostname;
+ }
+
+ return `http://${fakeHostname}/`;
+ };
+})();
+
+/******************************************************************************/
+
+// https://github.com/gorhill/uBlock/issues/99
+// https://github.com/gorhill/uBlock/issues/991
+//
+// popup:
+// Test/close target URL
+// popunder:
+// Test/close opener URL
+//
+// popup filter match:
+// 0 = false
+// 1 = true
+//
+// opener: 0 0 1 1
+// target: 0 1 0 1
+// ---- ---- ---- ----
+// result: a b c d
+//
+// a: do nothing
+// b: close target
+// c: close opener
+// d: close target
+
+const onPopupUpdated = (( ) => {
+ // https://github.com/gorhill/uBlock/commit/1d448b85b2931412508aa01bf899e0b6f0033626#commitcomment-14944764
+ // See if two URLs are different, disregarding scheme -- because the
+ // scheme can be unilaterally changed by the browser.
+ // https://github.com/gorhill/uBlock/issues/1378
+ // Maybe no link element was clicked.
+ // https://github.com/gorhill/uBlock/issues/3287
+ // Do not bail out if the target URL has no hostname.
+ const areDifferentURLs = function(a, b) {
+ if ( b === '' ) { return true; }
+ if ( b.startsWith('about:') ) { return false; }
+ let pos = a.indexOf('://');
+ if ( pos === -1 ) { return false; }
+ a = a.slice(pos);
+ pos = b.indexOf('://');
+ if ( pos !== -1 ) {
+ b = b.slice(pos);
+ }
+ return b !== a;
+ };
+
+ const popupMatch = function(
+ fctxt,
+ rootOpenerURL,
+ localOpenerURL,
+ targetURL,
+ popupType = 'popup'
+ ) {
+ // https://github.com/chrisaljoudi/uBlock/issues/323
+ // https://github.com/chrisaljoudi/uBlock/issues/1142
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1616
+ // Don't block if uBO is turned off in popup's context
+ if (
+ µb.getNetFilteringSwitch(targetURL) === false ||
+ µb.getNetFilteringSwitch(µb.normalizeTabURL(0, targetURL)) === false
+ ) {
+ return 0;
+ }
+
+ fctxt.setTabOriginFromURL(rootOpenerURL)
+ .setDocOriginFromURL(localOpenerURL || rootOpenerURL)
+ .setURL(targetURL)
+ .setType('popup');
+
+ // https://github.com/gorhill/uBlock/issues/1735
+ // Do not bail out on `data:` URI, they are commonly used for popups.
+ // https://github.com/uBlockOrigin/uAssets/issues/255
+ // Do not bail out on `about:blank`: an `about:blank` popup can be
+ // opened, with the sole purpose to serve as an intermediary in
+ // a sequence of chained popups.
+ // https://github.com/uBlockOrigin/uAssets/issues/263#issuecomment-272615772
+ // Do not bail out, period: the static filtering engine must be
+ // able to examine all sorts of URLs for popup filtering purpose.
+
+ // Dynamic filtering makes sense only when we have a valid opener
+ // hostname.
+ // https://github.com/gorhill/uBlock/commit/1d448b85b2931412508aa01bf899e0b6f0033626#commitcomment-14944764
+ // Ignore bad target URL. On Firefox, an `about:blank` tab may be
+ // opened for a new tab before it is filled in with the real target
+ // URL.
+ if ( fctxt.getTabHostname() !== '' && targetURL !== 'about:blank' ) {
+ // Check per-site switch first
+ // https://github.com/gorhill/uBlock/issues/3060
+ // - The no-popups switch must apply only to popups, not to
+ // popunders.
+ if (
+ popupType === 'popup' &&
+ sessionSwitches.evaluateZ(
+ 'no-popups',
+ fctxt.getTabHostname()
+ )
+ ) {
+ fctxt.filter = {
+ raw: 'no-popups: ' + sessionSwitches.z + ' true',
+ result: 1,
+ source: 'switch'
+ };
+ return 1;
+ }
+
+ // https://github.com/gorhill/uBlock/issues/581
+ // Take into account popup-specific rules in dynamic URL
+ // filtering, OR generic allow rules.
+ let result = sessionURLFiltering.evaluateZ(
+ fctxt.getTabHostname(),
+ targetURL,
+ popupType
+ );
+ if (
+ result === 1 && sessionURLFiltering.type === popupType ||
+ result === 2
+ ) {
+ fctxt.filter = sessionURLFiltering.toLogData();
+ return result;
+ }
+
+ // https://github.com/gorhill/uBlock/issues/581
+ // Take into account `allow` rules in dynamic filtering: `block`
+ // rules are ignored, as block rules are not meant to block
+ // specific types like `popup` (just like with static filters).
+ result = sessionFirewall.evaluateCellZY(
+ fctxt.getTabHostname(),
+ fctxt.getHostname(),
+ popupType
+ );
+ if ( result === 2 ) {
+ fctxt.filter = sessionFirewall.toLogData();
+ return 2;
+ }
+ }
+
+ fctxt.type = popupType;
+ const result = staticNetFilteringEngine.matchRequest(fctxt, 0b0001);
+ if ( result !== 0 ) {
+ fctxt.filter = staticNetFilteringEngine.toLogData();
+ return result;
+ }
+
+ return 0;
+ };
+
+ const mapPopunderResult = function(
+ fctxt,
+ popunderURL,
+ popunderHostname,
+ result
+ ) {
+ if ( fctxt.filter === undefined || fctxt.filter !== 'static' ) {
+ return 0;
+ }
+ if ( fctxt.filter.isUntokenized() ) {
+ return 0;
+ }
+ if ( fctxt.filter.isPureHostname() ) {
+ return result;
+ }
+ const re = new RegExp(fctxt.filter.regex, 'i');
+ const matches = re.exec(popunderURL);
+ if ( matches === null ) { return 0; }
+ const beg = matches.index;
+ const end = beg + matches[0].length;
+ const pos = popunderURL.indexOf(popunderHostname);
+ if ( pos === -1 ) { return 0; }
+ // https://github.com/gorhill/uBlock/issues/1471
+ // We test whether the opener hostname as at least one character
+ // within matched portion of URL.
+ // https://github.com/gorhill/uBlock/issues/1903
+ // Ignore filters which cause a match before the start of the
+ // hostname in the URL.
+ return beg >= pos && beg < pos + popunderHostname.length && end > pos
+ ? result
+ : 0;
+ };
+
+ const popunderMatch = function(
+ fctxt,
+ rootOpenerURL,
+ localOpenerURL,
+ targetURL
+ ) {
+ let result = popupMatch(
+ fctxt,
+ targetURL,
+ undefined,
+ rootOpenerURL,
+ 'popunder'
+ );
+ if ( result === 1 ) { return result; }
+
+ // https://github.com/gorhill/uBlock/issues/1010#issuecomment-186824878
+ // Check the opener tab as if it were the newly opened tab: if there
+ // is a hit against a popup filter, and if the matching filter is not
+ // a broad one, we will consider the opener tab to be a popunder tab.
+ // For now, a "broad" filter is one which does not touch any part of
+ // the hostname part of the opener URL.
+ let popunderURL = rootOpenerURL,
+ popunderHostname = hostnameFromURI(popunderURL);
+ if ( popunderHostname === '' ) { return 0; }
+
+ result = mapPopunderResult(
+ fctxt,
+ popunderURL,
+ popunderHostname,
+ popupMatch(fctxt, targetURL, undefined, popunderURL)
+ );
+ if ( result !== 0 ) { return result; }
+
+ // https://github.com/gorhill/uBlock/issues/1598
+ // Try to find a match against origin part of the opener URL.
+ popunderURL = originFromURI(popunderURL);
+ if ( popunderURL === '' ) { return 0; }
+
+ return mapPopunderResult(
+ fctxt,
+ popunderURL,
+ popunderHostname,
+ popupMatch(fctxt, targetURL, undefined, popunderURL)
+ );
+ };
+
+ return function(targetTabId, openerDetails) {
+ // Opener details.
+ const openerTabId = openerDetails.tabId;
+ let tabContext = µb.tabContextManager.lookup(openerTabId);
+ if ( tabContext === null ) { return; }
+ const rootOpenerURL = tabContext.rawURL;
+ if ( rootOpenerURL === '' ) { return; }
+ const pageStore = µb.pageStoreFromTabId(openerTabId);
+
+ // https://github.com/uBlockOrigin/uBlock-issues/discussions/2534#discussioncomment-5264792
+ // An `about:blank` frame's context is that of the parent context
+ let localOpenerURL = openerDetails.frameId !== 0
+ ? openerDetails.frameURL
+ : undefined;
+ if ( localOpenerURL === 'about:blank' && pageStore !== null ) {
+ let openerFrameId = openerDetails.frameId;
+ do {
+ const frame = pageStore.getFrameStore(openerFrameId);
+ if ( frame === null ) { break; }
+ openerFrameId = frame.parentId;
+ const parentFrame = pageStore.getFrameStore(openerFrameId);
+ if ( parentFrame === null ) { break; }
+ localOpenerURL = parentFrame.frameURL;
+ } while ( localOpenerURL === 'about:blank' && openerFrameId !== 0 );
+ }
+
+ // Popup details.
+ tabContext = µb.tabContextManager.lookup(targetTabId);
+ if ( tabContext === null ) { return; }
+ let targetURL = tabContext.rawURL;
+ if ( targetURL === '' ) { return; }
+
+ // https://github.com/gorhill/uBlock/issues/341
+ // Allow popups if uBlock is turned off in opener's context.
+ if ( µb.getNetFilteringSwitch(rootOpenerURL) === false ) { return; }
+
+ // https://github.com/gorhill/uBlock/issues/1538
+ if (
+ µb.getNetFilteringSwitch(
+ µb.normalizeTabURL(openerTabId, rootOpenerURL)
+ ) === false
+ ) {
+ return;
+ }
+
+ // If the page URL is that of our document-blocked URL, extract the URL
+ // of the page which was blocked.
+ targetURL = µb.pageURLFromMaybeDocumentBlockedURL(targetURL);
+
+ // MUST be reset before code below is called.
+ const fctxt = µb.filteringContext.duplicate();
+
+ // Popup test.
+ let popupType = 'popup',
+ result = 0;
+ // https://github.com/gorhill/uBlock/issues/2919
+ // If the target tab matches a clicked link, assume it's legit.
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1912
+ // If the target also matches the last clicked link, assume it's
+ // legit.
+ if (
+ areDifferentURLs(targetURL, openerDetails.trustedURL) &&
+ areDifferentURLs(targetURL, µb.maybeGoodPopup.url)
+ ) {
+ result = popupMatch(fctxt, rootOpenerURL, localOpenerURL, targetURL);
+ }
+
+ // Popunder test.
+ if ( result === 0 && openerDetails.popunder ) {
+ result = popunderMatch(fctxt, rootOpenerURL, localOpenerURL, targetURL);
+ if ( result === 1 ) {
+ popupType = 'popunder';
+ }
+ }
+
+ // Log only for when there was a hit against an actual filter (allow or block).
+ // https://github.com/gorhill/uBlock/issues/2776
+ if ( logger.enabled ) {
+ fctxt.setRealm('network').setType(popupType);
+ if ( popupType === 'popup' ) {
+ fctxt.setURL(targetURL)
+ .setTabId(openerTabId)
+ .setTabOriginFromURL(rootOpenerURL)
+ .setDocOriginFromURL(localOpenerURL || rootOpenerURL);
+ } else {
+ fctxt.setURL(rootOpenerURL)
+ .setTabId(targetTabId)
+ .setTabOriginFromURL(targetURL)
+ .setDocOriginFromURL(targetURL);
+ }
+ fctxt.toLogger();
+ }
+
+ // Not blocked
+ if ( result !== 1 ) { return; }
+
+ // Only if a popup was blocked do we report it in the dynamic
+ // filtering pane.
+ if ( pageStore ) {
+ pageStore.journalAddRequest(fctxt, result);
+ pageStore.popupBlockedCount += 1;
+ }
+
+ // Blocked
+ if ( µb.userSettings.showIconBadge ) {
+ µb.updateToolbarIcon(openerTabId, 0b010);
+ }
+
+ // It is a popup, block and remove the tab.
+ if ( popupType === 'popup' ) {
+ µb.unbindTabFromPageStore(targetTabId);
+ vAPI.tabs.remove(targetTabId, false);
+ } else {
+ µb.unbindTabFromPageStore(openerTabId);
+ vAPI.tabs.remove(openerTabId, true);
+ }
+
+ return true;
+ };
+})();
+
+/******************************************************************************/
+/******************************************************************************
+
+To keep track from which context *exactly* network requests are made. This is
+often tricky for various reasons, and the challenge is not specific to one
+browser.
+
+The time at which a URL is assigned to a tab and the time when a network
+request for a root document is made must be assumed to be unrelated: it's all
+asynchronous. There is no guaranteed order in which the two events are fired.
+
+Also, other "anomalies" can occur:
+
+- a network request for a root document is fired without the corresponding
+tab being really assigned a new URL
+<https://github.com/chrisaljoudi/uBlock/issues/516>
+
+- a network request for a secondary resource is labeled with a tab id for
+which no root document was pulled for that tab.
+<https://github.com/chrisaljoudi/uBlock/issues/1001>
+
+- a network request for a secondary resource is made without the root
+document to which it belongs being formally bound yet to the proper tab id,
+causing a bad scope to be used for filtering purpose.
+<https://github.com/chrisaljoudi/uBlock/issues/1205>
+<https://github.com/chrisaljoudi/uBlock/issues/1140>
+
+So the solution here is to keep a lightweight data structure which only
+purpose is to keep track as accurately as possible of which root document
+belongs to which tab. That's the only purpose, and because of this, there are
+no restrictions for when the URL of a root document can be associated to a tab.
+
+Before, the PageStore object was trying to deal with this, but it had to
+enforce some restrictions so as to not descend into one of the above issues, or
+other issues. The PageStore object can only be associated with a tab for which
+a definitive navigation event occurred, because it collects information about
+what occurred in the tab (for example, the number of requests blocked for a
+page).
+
+The TabContext objects do not suffer this restriction, and as a result they
+offer the most reliable picture of which root document URL is really associated
+to which tab. Moreover, the TabObject can undo an association from a root
+document, and automatically re-associate with the next most recent. This takes
+care of <https://github.com/chrisaljoudi/uBlock/issues/516>.
+
+The PageStore object no longer cache the various information about which
+root document it is currently bound. When it needs to find out, it will always
+defer to the TabContext object, which will provide the real answer. This takes
+case of <https://github.com/chrisaljoudi/uBlock/issues/1205>. In effect, the
+master switch and dynamic filtering rules can be evaluated now properly even
+in the absence of a PageStore object, this was not the case before.
+
+Also, the TabContext object will try its best to find a good candidate root
+document URL for when none exists. This takes care of
+<https://github.com/chrisaljoudi/uBlock/issues/1001>.
+
+The TabContext manager is self-contained, and it takes care to properly
+housekeep itself.
+
+*/
+
+µb.tabContextManager = (( ) => {
+ const tabContexts = new Map();
+
+ // https://github.com/chrisaljoudi/uBlock/issues/1001
+ // This is to be used as last-resort fallback in case a tab is found to not
+ // be bound while network requests are fired for the tab.
+ let mostRecentRootDocURL = '';
+ let mostRecentRootDocURLTimestamp = 0;
+
+ const popupCandidates = new Map();
+
+ const PopupCandidate = class {
+ constructor(createDetails, openerDetails) {
+ this.targetTabId = createDetails.tabId;
+ this.opener = {
+ tabId: createDetails.sourceTabId,
+ tabURL: openerDetails[0].url,
+ frameId: createDetails.sourceFrameId,
+ frameURL: openerDetails[1].url,
+ popunder: false,
+ trustedURL: createDetails.sourceTabId === µb.maybeGoodPopup.tabId
+ ? µb.maybeGoodPopup.url
+ : ''
+ };
+ this.selfDestructionTimer = vAPI.defer.create(( ) => {
+ this.destroy();
+ });
+ this.launchSelfDestruction();
+ }
+
+ destroy() {
+ this.selfDestructionTimer.off();
+ popupCandidates.delete(this.targetTabId);
+ }
+
+ launchSelfDestruction() {
+ this.selfDestructionTimer.offon(10000);
+ }
+ };
+
+ const popupCandidateTest = async function(targetTabId) {
+ for ( const [ tabId, candidate ] of popupCandidates ) {
+ if (
+ targetTabId !== tabId &&
+ targetTabId !== candidate.opener.tabId
+ ) {
+ continue;
+ }
+ // https://github.com/gorhill/uBlock/issues/3129
+ // If the trigger is a change in the opener's URL, mark the entry
+ // as candidate for popunder filtering.
+ if ( targetTabId === candidate.opener.tabId ) {
+ candidate.opener.popunder = true;
+ }
+ const result = onPopupUpdated(tabId, candidate.opener);
+ if ( result === true ) {
+ candidate.destroy();
+ } else {
+ candidate.launchSelfDestruction();
+ }
+ }
+ };
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1184
+ // Do not consider a tab opened from `about:newtab` to be a popup
+ // candidate.
+
+ const onTabCreated = async function(createDetails) {
+ const { sourceTabId, sourceFrameId, tabId } = createDetails;
+ const popup = popupCandidates.get(tabId);
+ if ( popup === undefined ) {
+ let openerDetails;
+ try {
+ openerDetails = await Promise.all([
+ webext.webNavigation.getFrame({
+ tabId: createDetails.sourceTabId,
+ frameId: 0,
+ }),
+ webext.webNavigation.getFrame({
+ tabId: sourceTabId,
+ frameId: sourceFrameId,
+ }),
+ ]);
+ }
+ catch (reason) {
+ return;
+ }
+ if (
+ Array.isArray(openerDetails) === false ||
+ openerDetails.length !== 2 ||
+ openerDetails[1] === null ||
+ openerDetails[1].url === 'about:newtab'
+ ) {
+ return;
+ }
+ popupCandidates.set(
+ tabId,
+ new PopupCandidate(createDetails, openerDetails)
+ );
+ }
+ popupCandidateTest(tabId);
+ };
+
+ const gcPeriod = 10 * 60 * 1000;
+
+ // A pushed entry is removed from the stack unless it is committed with
+ // a set time.
+ const StackEntry = function(url, commit) {
+ this.url = url;
+ this.committed = commit;
+ this.tstamp = Date.now();
+ };
+
+ const TabContext = function(tabId) {
+ this.tabId = tabId;
+ this.stack = [];
+ this.rawURL =
+ this.normalURL =
+ this.origin =
+ this.rootHostname =
+ this.rootDomain = '';
+ this.commitTimer = vAPI.defer.create(( ) => {
+ this.onCommit();
+ });
+ this.gcTimer = vAPI.defer.create(( ) => {
+ this.onGC();
+ });
+ this.onGCBarrier = false;
+ this.netFiltering = true;
+ this.netFilteringReadTime = 0;
+
+ tabContexts.set(tabId, this);
+ };
+
+ TabContext.prototype.destroy = function() {
+ if ( vAPI.isBehindTheSceneTabId(this.tabId) ) { return; }
+ this.gcTimer.off();
+ tabContexts.delete(this.tabId);
+ };
+
+ TabContext.prototype.onGC = async function() {
+ if ( vAPI.isBehindTheSceneTabId(this.tabId) ) { return; }
+ if ( this.onGCBarrier ) { return; }
+ this.onGCBarrier = true;
+ this.gcTimer.off();
+ const tab = await vAPI.tabs.get(this.tabId);
+ if ( tab instanceof Object === false || tab.discarded === true ) {
+ this.destroy();
+ } else {
+ this.gcTimer.on(gcPeriod);
+ }
+ this.onGCBarrier = false;
+ };
+
+ // https://github.com/gorhill/uBlock/issues/248
+ // Stack entries have to be committed to stick. Non-committed stack
+ // entries are removed after a set delay.
+ TabContext.prototype.onCommit = function() {
+ if ( vAPI.isBehindTheSceneTabId(this.tabId) ) { return; }
+ this.commitTimer.off();
+ // Remove uncommitted entries at the top of the stack.
+ let i = this.stack.length;
+ while ( i-- ) {
+ if ( this.stack[i].committed ) { break; }
+ }
+ // https://github.com/gorhill/uBlock/issues/300
+ // If no committed entry was found, fall back on the bottom-most one
+ // as being the committed one by default.
+ if ( i === -1 && this.stack.length !== 0 ) {
+ this.stack[0].committed = true;
+ i = 0;
+ }
+ i += 1;
+ if ( i < this.stack.length ) {
+ this.stack.length = i;
+ this.update();
+ }
+ };
+
+ // This takes care of orphanized tab contexts. Can't be started for all
+ // contexts, as the behind-the-scene context is permanent -- so we do not
+ // want to flush it.
+ TabContext.prototype.autodestroy = function() {
+ if ( vAPI.isBehindTheSceneTabId(this.tabId) ) { return; }
+ this.gcTimer.on(gcPeriod);
+ };
+
+ // Update just force all properties to be updated to match the most recent
+ // root URL.
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1954
+ // In case of document-blocked page, use the blocked page URL as the
+ // context.
+ TabContext.prototype.update = function() {
+ this.netFilteringReadTime = 0;
+ if ( this.stack.length === 0 ) {
+ this.rawURL =
+ this.normalURL =
+ this.origin =
+ this.rootHostname =
+ this.rootDomain = '';
+ return;
+ }
+ const stackEntry = this.stack[this.stack.length - 1];
+ this.rawURL = µb.pageURLFromMaybeDocumentBlockedURL(stackEntry.url);
+ this.normalURL = µb.normalizeTabURL(this.tabId, this.rawURL);
+ this.origin = originFromURI(this.normalURL);
+ this.rootHostname = hostnameFromURI(this.origin);
+ this.rootDomain =
+ domainFromHostname(this.rootHostname) ||
+ this.rootHostname;
+ };
+
+ // Called whenever a candidate root URL is spotted for the tab.
+ TabContext.prototype.push = function(url) {
+ if ( vAPI.isBehindTheSceneTabId(this.tabId) ) {
+ return;
+ }
+ const count = this.stack.length;
+ if ( count !== 0 && this.stack[count - 1].url === url ) {
+ return;
+ }
+ this.stack.push(new StackEntry(url));
+ this.update();
+ popupCandidateTest(this.tabId);
+ this.commitTimer.offon(500);
+ };
+
+ // This tells that the url is definitely the one to be associated with the
+ // tab, there is no longer any ambiguity about which root URL is really
+ // sitting in which tab.
+ TabContext.prototype.commit = function(url) {
+ if ( vAPI.isBehindTheSceneTabId(this.tabId) ) { return; }
+ if ( this.stack.length !== 0 ) {
+ const top = this.stack[this.stack.length - 1];
+ if ( top.url === url && top.committed ) { return false; }
+ }
+ this.stack = [new StackEntry(url, true)];
+ this.update();
+ return true;
+ };
+
+ TabContext.prototype.getNetFilteringSwitch = function() {
+ if ( this.netFilteringReadTime > µb.netWhitelistModifyTime ) {
+ return this.netFiltering;
+ }
+ // https://github.com/chrisaljoudi/uBlock/issues/1078
+ // Use both the raw and normalized URLs.
+ this.netFiltering = µb.getNetFilteringSwitch(this.normalURL);
+ if (
+ this.netFiltering &&
+ this.rawURL !== this.normalURL &&
+ this.rawURL !== ''
+ ) {
+ this.netFiltering = µb.getNetFilteringSwitch(this.rawURL);
+ }
+ this.netFilteringReadTime = Date.now();
+ return this.netFiltering;
+ };
+
+ // These are to be used for the API of the tab context manager.
+
+ const push = function(tabId, url) {
+ let entry = tabContexts.get(tabId);
+ if ( entry === undefined ) {
+ entry = new TabContext(tabId);
+ entry.autodestroy();
+ }
+ entry.push(url);
+ mostRecentRootDocURL = url;
+ mostRecentRootDocURLTimestamp = Date.now();
+ return entry;
+ };
+
+ // Find a tab context for a specific tab.
+ const lookup = function(tabId) {
+ return tabContexts.get(tabId) || null;
+ };
+
+ // Find a tab context for a specific tab. If none is found, attempt to
+ // fix this. When all fail, the behind-the-scene context is returned.
+ const mustLookup = function(tabId) {
+ const entry = tabContexts.get(tabId);
+ if ( entry !== undefined ) {
+ return entry;
+ }
+ // https://github.com/chrisaljoudi/uBlock/issues/1025
+ // Google Hangout popup opens without a root frame. So for now we will
+ // just discard that best-guess root frame if it is too far in the
+ // future, at which point it ceases to be a "best guess".
+ if (
+ mostRecentRootDocURL !== '' &&
+ mostRecentRootDocURLTimestamp + 500 < Date.now()
+ ) {
+ mostRecentRootDocURL = '';
+ }
+ // https://github.com/chrisaljoudi/uBlock/issues/1001
+ // Not a behind-the-scene request, yet no page store found for the
+ // tab id: we will thus bind the last-seen root document to the
+ // unbound tab. It's a guess, but better than ending up filtering
+ // nothing at all.
+ if ( mostRecentRootDocURL !== '' ) {
+ return push(tabId, mostRecentRootDocURL);
+ }
+ // If all else fail at finding a page store, re-categorize the
+ // request as behind-the-scene. At least this ensures that ultimately
+ // the user can still inspect/filter those net requests which were
+ // about to fall through the cracks.
+ // Example: Chromium + case #12 at
+ // http://raymondhill.net/ublock/popup.html
+ return tabContexts.get(vAPI.noTabId);
+ };
+
+ // https://github.com/gorhill/uBlock/issues/1735
+ // Filter for popups if actually committing.
+ const commit = function(tabId, url) {
+ let entry = tabContexts.get(tabId);
+ if ( entry === undefined ) {
+ entry = push(tabId, url);
+ } else if ( entry.commit(url) ) {
+ popupCandidateTest(tabId);
+ }
+ return entry;
+ };
+
+ const exists = function(tabId) {
+ return tabContexts.get(tabId) !== undefined;
+ };
+
+ // Behind-the-scene tab context
+ {
+ const entry = new TabContext(vAPI.noTabId);
+ entry.stack.push(new StackEntry('', true));
+ entry.rawURL = '';
+ entry.normalURL = µb.normalizeTabURL(entry.tabId);
+ entry.origin = originFromURI(entry.normalURL);
+ entry.rootHostname = hostnameFromURI(entry.origin);
+ entry.rootDomain = domainFromHostname(entry.rootHostname);
+ }
+
+ // Context object, typically to be used to feed filtering engines.
+ const contextJunkyard = [];
+ const Context = class {
+ constructor(tabId) {
+ this.init(tabId);
+ }
+ init(tabId) {
+ const tabContext = lookup(tabId);
+ this.rootHostname = tabContext.rootHostname;
+ this.rootDomain = tabContext.rootDomain;
+ this.pageHostname =
+ this.pageDomain =
+ this.requestURL =
+ this.origin =
+ this.requestHostname =
+ this.requestDomain = '';
+ return this;
+ }
+ dispose() {
+ contextJunkyard.push(this);
+ }
+ };
+
+ const createContext = function(tabId) {
+ if ( contextJunkyard.length ) {
+ return contextJunkyard.pop().init(tabId);
+ }
+ return new Context(tabId);
+ };
+
+ return {
+ push,
+ commit,
+ lookup,
+ mustLookup,
+ exists,
+ createContext,
+ onTabCreated,
+ };
+})();
+
+/******************************************************************************/
+/******************************************************************************/
+
+vAPI.Tabs = class extends vAPI.Tabs {
+ onActivated(details) {
+ const { tabId } = details;
+ if ( vAPI.isBehindTheSceneTabId(tabId) ) { return; }
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/757
+ const pageStore = µb.pageStoreFromTabId(tabId);
+ if ( pageStore === null ) {
+ this.onNewTab(tabId);
+ return;
+ }
+ super.onActivated(details);
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/680
+ µb.updateToolbarIcon(tabId);
+ contextMenu.update(tabId);
+ }
+
+ onClosed(tabId) {
+ super.onClosed(tabId);
+ if ( vAPI.isBehindTheSceneTabId(tabId) ) { return; }
+ µb.unbindTabFromPageStore(tabId);
+ contextMenu.update();
+ }
+
+ onCreated(details) {
+ super.onCreated(details);
+ µb.tabContextManager.onTabCreated(details);
+ }
+
+ // When the DOM content of root frame is loaded, this means the tab
+ // content has changed.
+ //
+ // The webRequest.onBeforeRequest() won't be called for everything
+ // else than http/https. Thus, in such case, we will bind the tab as
+ // early as possible in order to increase the likelihood of a context
+ // properly setup if network requests are fired from within the tab.
+ // Example: Chromium + case #6 at
+ // http://raymondhill.net/ublock/popup.html
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/688#issuecomment-748179731
+ // For non-network URIs, defer scriptlet injection to content script. The
+ // reason for this is that we need the effective URL and this information
+ // is not available at this point.
+ //
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/2343
+ // uBO's isolated world in Firefox just does not work as expected at
+ // point, so we have to wait before injecting scriptlets.
+ onNavigation(details) {
+ super.onNavigation(details);
+ const { frameId, tabId, url } = details;
+ if ( frameId === 0 ) {
+ µb.tabContextManager.commit(tabId, url);
+ const pageStore = µb.bindTabToPageStore(tabId, 'tabCommitted', details);
+ if ( pageStore !== null ) {
+ pageStore.journalAddRootFrame('committed', url);
+ }
+ }
+ const pageStore = µb.pageStoreFromTabId(tabId);
+ if ( pageStore === null ) { return; }
+ pageStore.setFrameURL(details);
+ if ( pageStore.getNetFilteringSwitch() ) {
+ scriptletFilteringEngine.injectNow(details);
+ }
+ }
+
+ async onNewTab(tabId) {
+ const tab = await vAPI.tabs.get(tabId);
+ if ( tab === null ) { return; }
+ const { id, url = '' } = tab;
+ if ( url === '' ) { return; }
+ µb.tabContextManager.commit(id, url);
+ µb.bindTabToPageStore(id, 'tabUpdated', tab);
+ contextMenu.update(id);
+ }
+
+ // It may happen the URL in the tab changes, while the page's document
+ // stays the same (for instance, Google Maps). Without this listener,
+ // the extension icon won't be properly refreshed.
+ onUpdated(tabId, changeInfo, tab) {
+ super.onUpdated(tabId, changeInfo, tab);
+ if ( !tab.url || tab.url === '' ) { return; }
+ if ( !changeInfo.url ) { return; }
+ µb.tabContextManager.commit(tabId, changeInfo.url);
+ µb.bindTabToPageStore(tabId, 'tabUpdated', tab);
+ }
+};
+
+vAPI.tabs = new vAPI.Tabs();
+
+/******************************************************************************/
+/******************************************************************************/
+
+// Create an entry for the tab if it doesn't exist.
+
+µb.bindTabToPageStore = function(tabId, context, details = undefined) {
+ this.updateToolbarIcon(tabId, 0b111);
+
+ // Do not create a page store for URLs which are of no interests
+ if ( this.tabContextManager.exists(tabId) === false ) {
+ this.unbindTabFromPageStore(tabId);
+ return null;
+ }
+
+ // Reuse page store if one exists: this allows to guess if a tab is a popup
+ let pageStore = this.pageStores.get(tabId);
+
+ // Tab is not bound
+ if ( pageStore === undefined ) {
+ pageStore = PageStore.factory(tabId, details);
+ this.pageStores.set(tabId, pageStore);
+ this.pageStoresToken = Date.now();
+ return pageStore;
+ }
+
+ // https://github.com/chrisaljoudi/uBlock/issues/516
+ // Never rebind behind-the-scene scope.
+ if ( vAPI.isBehindTheSceneTabId(tabId) ) {
+ return pageStore;
+ }
+
+ // https://github.com/chrisaljoudi/uBlock/issues/516
+ // If context is 'beforeRequest', do not rebind, wait for confirmation.
+ if ( context === 'beforeRequest' ) {
+ pageStore.netFilteringCache.empty();
+ return pageStore;
+ }
+
+ // Rebind according to context. We rebind even if the URL did not change,
+ // as maybe the tab was force-reloaded, in which case the page stats must
+ // be all reset.
+ pageStore.reuse(context, details);
+
+ this.pageStoresToken = Date.now();
+
+ return pageStore;
+};
+
+/******************************************************************************/
+
+µb.unbindTabFromPageStore = function(tabId) {
+ const pageStore = this.pageStores.get(tabId);
+ if ( pageStore === undefined ) { return; }
+ pageStore.dispose();
+ this.pageStores.delete(tabId);
+ this.pageStoresToken = Date.now();
+};
+
+/******************************************************************************/
+
+µb.pageStoreFromTabId = function(tabId) {
+ return this.pageStores.get(tabId) || null;
+};
+
+µb.mustPageStoreFromTabId = function(tabId) {
+ return this.pageStores.get(tabId) || this.pageStores.get(vAPI.noTabId);
+};
+
+/******************************************************************************/
+
+// Permanent page store for behind-the-scene requests. Must never be removed.
+//
+// https://github.com/uBlockOrigin/uBlock-issues/issues/651
+// The whitelist status of the tabless page store will be determined by
+// the document context (if present) of the network request.
+
+{
+ const NoPageStore = class extends PageStore {
+ getNetFilteringSwitch(fctxt) {
+ if ( fctxt ) {
+ const docOrigin = fctxt.getDocOrigin();
+ if ( docOrigin ) {
+ return µb.getNetFilteringSwitch(docOrigin);
+ }
+ }
+ return super.getNetFilteringSwitch();
+ }
+ };
+ const pageStore = new NoPageStore(vAPI.noTabId);
+ µb.pageStores.set(pageStore.tabId, pageStore);
+ pageStore.title = i18n$('logBehindTheScene');
+}
+
+/******************************************************************************/
+
+// Update visual of extension icon.
+
+{
+ const tabIdToDetails = new Map();
+
+ const computeBadgeColor = (bits) => {
+ let color = µb.blockingProfileColorCache.get(bits);
+ if ( color !== undefined ) { return color; }
+ let max = 0;
+ for ( const profile of µb.liveBlockingProfiles ) {
+ const v = bits & (profile.bits & ~1);
+ if ( v < max ) { break; }
+ color = profile.color;
+ max = v;
+ }
+ if ( color === undefined ) {
+ color = '#666';
+ }
+ µb.blockingProfileColorCache.set(bits, color);
+ return color;
+ };
+
+ const updateBadge = (tabId) => {
+ let parts = tabIdToDetails.get(tabId);
+ tabIdToDetails.delete(tabId);
+
+ let state = 0;
+ let badge = '';
+ let color = '#666';
+
+ const pageStore = µb.pageStoreFromTabId(tabId);
+ if ( pageStore !== null ) {
+ state = pageStore.getNetFilteringSwitch() ? 1 : 0;
+ if ( state === 1 ) {
+ if ( (parts & 0b0010) !== 0 ) {
+ const blockCount = pageStore.counts.blocked.any;
+ if ( blockCount !== 0 ) {
+ badge = µb.formatCount(blockCount);
+ }
+ }
+ if ( (parts & 0b0100) !== 0 ) {
+ color = computeBadgeColor(
+ µb.blockingModeFromHostname(pageStore.tabHostname)
+ );
+ }
+ }
+ }
+
+ // https://www.reddit.com/r/uBlockOrigin/comments/d33d37/
+ if ( µb.userSettings.showIconBadge === false ) {
+ parts |= 0b1000;
+ }
+
+ vAPI.setIcon(tabId, { parts, state, badge, color });
+ };
+
+ // parts: bit 0 = icon
+ // bit 1 = badge text
+ // bit 2 = badge color
+ // bit 3 = hide badge
+
+ µb.updateToolbarIcon = function(tabId, newParts = 0b0111) {
+ if ( this.readyToFilter === false ) { return; }
+ if ( typeof tabId !== 'number' ) { return; }
+ if ( vAPI.isBehindTheSceneTabId(tabId) ) { return; }
+ const currentParts = tabIdToDetails.get(tabId);
+ if ( currentParts === newParts ) { return; }
+ if ( currentParts === undefined ) {
+ self.requestIdleCallback(
+ ( ) => updateBadge(tabId),
+ { timeout: 701 }
+ );
+ } else {
+ newParts |= currentParts;
+ }
+ tabIdToDetails.set(tabId, newParts);
+ };
+}
+
+/******************************************************************************/
+
+// https://github.com/chrisaljoudi/uBlock/issues/455
+// Stale page store entries janitor
+
+{
+ let pageStoreJanitorSampleAt = 0;
+ let pageStoreJanitorSampleSize = 10;
+
+ const checkTab = async tabId => {
+ const tab = await vAPI.tabs.get(tabId);
+ if ( tab instanceof Object && tab.discarded !== true ) { return; }
+ µb.unbindTabFromPageStore(tabId);
+ };
+
+ const pageStoreJanitor = function() {
+ const tabIds = Array.from(µb.pageStores.keys()).sort();
+ if ( pageStoreJanitorSampleAt >= tabIds.length ) {
+ pageStoreJanitorSampleAt = 0;
+ }
+ const n = Math.min(
+ pageStoreJanitorSampleAt + pageStoreJanitorSampleSize,
+ tabIds.length
+ );
+ for ( let i = pageStoreJanitorSampleAt; i < n; i++ ) {
+ const tabId = tabIds[i];
+ if ( vAPI.isBehindTheSceneTabId(tabId) ) { continue; }
+ checkTab(tabId);
+ }
+ pageStoreJanitorSampleAt = n;
+
+ pageStoreJanitorTimer.on(pageStoreJanitorPeriod);
+ };
+
+ const pageStoreJanitorTimer = vAPI.defer.create(pageStoreJanitor);
+ const pageStoreJanitorPeriod = { min: 15 };
+
+ pageStoreJanitorTimer.on(pageStoreJanitorPeriod);
+}
+
+/******************************************************************************/
diff --git a/src/js/tasks.js b/src/js/tasks.js
new file mode 100644
index 0000000..8358fd8
--- /dev/null
+++ b/src/js/tasks.js
@@ -0,0 +1,42 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* globals requestIdleCallback, cancelIdleCallback */
+
+'use strict';
+
+/******************************************************************************/
+
+export function queueTask(func, timeout = 5000) {
+ if ( typeof requestIdleCallback === 'undefined' ) {
+ return setTimeout(func, 1);
+ }
+
+ return requestIdleCallback(func, { timeout });
+}
+
+export function dropTask(id) {
+ if ( typeof cancelIdleCallback === 'undefined' ) {
+ return clearTimeout(id);
+ }
+
+ return cancelIdleCallback(id);
+}
diff --git a/src/js/text-encode.js b/src/js/text-encode.js
new file mode 100644
index 0000000..06c7b2c
--- /dev/null
+++ b/src/js/text-encode.js
@@ -0,0 +1,275 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2018 Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import µb from './background.js';
+
+/******************************************************************************/
+
+const textEncode = (( ) => {
+
+ if ( µb.canFilterResponseData !== true ) { return; }
+
+ // charset aliases extracted from:
+ // https://github.com/inexorabletash/text-encoding/blob/b4e5bc26e26e51f56e3daa9f13138c79f49d3c34/lib/encoding.js#L342
+ const normalizedCharset = new Map([
+ [ 'utf8', 'utf-8' ],
+ [ 'unicode-1-1-utf-8', 'utf-8' ],
+ [ 'utf-8', 'utf-8' ],
+
+ [ 'windows-1250', 'windows-1250' ],
+ [ 'cp1250', 'windows-1250' ],
+ [ 'x-cp1250', 'windows-1250' ],
+
+ [ 'windows-1251', 'windows-1251' ],
+ [ 'cp1251', 'windows-1251' ],
+ [ 'x-cp1251', 'windows-1251' ],
+
+ [ 'windows-1252', 'windows-1252' ],
+ [ 'ansi_x3.4-1968', 'windows-1252' ],
+ [ 'ascii', 'windows-1252' ],
+ [ 'cp1252', 'windows-1252' ],
+ [ 'cp819', 'windows-1252' ],
+ [ 'csisolatin1', 'windows-1252' ],
+ [ 'ibm819', 'windows-1252' ],
+ [ 'iso-8859-1', 'windows-1252' ],
+ [ 'iso-ir-100', 'windows-1252' ],
+ [ 'iso8859-1', 'windows-1252' ],
+ [ 'iso88591', 'windows-1252' ],
+ [ 'iso_8859-1', 'windows-1252' ],
+ [ 'iso_8859-1:1987', 'windows-1252' ],
+ [ 'l1', 'windows-1252' ],
+ [ 'latin1', 'windows-1252' ],
+ [ 'us-ascii', 'windows-1252' ],
+ [ 'x-cp1252', 'windows-1252' ],
+ ]);
+
+ // http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1250.TXT
+ const cp1250_range0 = new Uint8Array([
+ /* 0x0100 */ 0x00, 0x00, 0xC3, 0xE3, 0xA5, 0xB9, 0xC6, 0xE6,
+ /* 0x0108 */ 0x00, 0x00, 0x00, 0x00, 0xC8, 0xE8, 0xCF, 0xEF,
+ /* 0x0110 */ 0xD0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* 0x0118 */ 0xCA, 0xEA, 0xCC, 0xEC, 0x00, 0x00, 0x00, 0x00,
+ /* 0x0120 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* 0x0128 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* 0x0130 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* 0x0138 */ 0x00, 0xC5, 0xE5, 0x00, 0x00, 0xBC, 0xBE, 0x00,
+ /* 0x0140 */ 0x00, 0xA3, 0xB3, 0xD1, 0xF1, 0x00, 0x00, 0xD2,
+ /* 0x0148 */ 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* 0x0150 */ 0xD5, 0xF5, 0x00, 0x00, 0xC0, 0xE0, 0x00, 0x00,
+ /* 0x0158 */ 0xD8, 0xF8, 0x8C, 0x9C, 0x00, 0x00, 0xAA, 0xBA,
+ /* 0x0160 */ 0x8A, 0x9A, 0xDE, 0xFE, 0x8D, 0x9D, 0x00, 0x00,
+ /* 0x0168 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xF9,
+ /* 0x0170 */ 0xDB, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* 0x0178 */ 0x00, 0x8F, 0x9F, 0xAF, 0xBF, 0x8E, 0x9E, 0x00
+ ]);
+
+ // http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1251.TXT
+ const cp1251_range0 = new Uint8Array([
+ /* 0x0400 */ 0x00, 0xA8, 0x80, 0x81, 0xAA, 0xBD, 0xB2, 0xAF,
+ /* 0x0408 */ 0xA3, 0x8A, 0x8C, 0x8E, 0x8D, 0x00, 0xA1, 0x8F,
+ /* 0x0410 */ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
+ /* 0x0418 */ 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
+ /* 0x0420 */ 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
+ /* 0x0428 */ 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
+ /* 0x0430 */ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
+ /* 0x0438 */ 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
+ /* 0x0440 */ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
+ /* 0x0448 */ 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
+ /* 0x0450 */ 0x00, 0xB8, 0x90, 0x83, 0xBA, 0xBE, 0xB3, 0xBF,
+ /* 0x0458 */ 0xBC, 0x9A, 0x9C, 0x9E, 0x9D, 0x00, 0xA2, 0x9F,
+ /* 0x0460 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* 0x0468 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* 0x0470 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* 0x0478 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* 0x0480 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* 0x0488 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* 0x0490 */ 0xA5, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ]);
+
+ // https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT
+ const cp1252_range0 = new Uint8Array([
+ /* 0x0150 */ 0x00, 0x00, 0x8C, 0x9C, 0x00, 0x00, 0x00, 0x00,
+ /* 0x0158 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* 0x0160 */ 0x8A, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* 0x0168 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* 0x0170 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* 0x0178 */ 0x9F, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x9E, 0x00
+ ]);
+
+ const cp125x_range0 = new Uint8Array([
+ /* 0x2010 */ 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00,
+ /* 0x2018 */ 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00,
+ /* 0x2020 */ 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00,
+ /* 0x2028 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* 0x2030 */ 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ /* 0x2038 */ 0x00, 0x8B, 0x9B, 0x00, 0x00, 0x00, 0x00, 0x00
+ ]);
+
+ const encoders = {
+ 'windows-1250': function(buf) {
+ let i = 0, n = buf.byteLength, o = 0, c;
+ while ( i < n ) {
+ c = buf[i++];
+ if ( c < 0x80 ) {
+ buf[o++] = c;
+ } else {
+ if ( (c & 0xE0) === 0xC0 ) {
+ c = (c & 0x1F) << 6;
+ c |= (buf[i++] & 0x3F);
+ } else if ( (c & 0xF0) === 0xE0 ) {
+ c = (c & 0x0F) << 12;
+ c |= (buf[i++] & 0x3F) << 6;
+ c |= (buf[i++] & 0x3F);
+ } else if ( (c & 0xF8) === 0xF0 ) {
+ c = (c & 0x07) << 18;
+ c |= (buf[i++] & 0x3F) << 12;
+ c |= (buf[i++] & 0x3F) << 6;
+ c |= (buf[i++] & 0x3F);
+ }
+ if ( c < 0x100 ) {
+ buf[o++] = c;
+ } else if ( c < 0x180 ) {
+ buf[o++] = cp1250_range0[c - 0x100];
+ } else if ( c >= 0x2010 && c < 0x2040 ) {
+ buf[o++] = cp125x_range0[c - 0x2010];
+ } else if ( c === 0x02C7 ) {
+ buf[o++] = 0xA1;
+ } else if ( c === 0x02D8 ) {
+ buf[o++] = 0xA2;
+ } else if ( c === 0x02D9 ) {
+ buf[o++] = 0xFF;
+ } else if ( c === 0x02DB ) {
+ buf[o++] = 0xB2;
+ } else if ( c === 0x02DD ) {
+ buf[o++] = 0xBD;
+ } else if ( c === 0x20AC ) {
+ buf[o++] = 0x88;
+ } else if ( c === 0x2122 ) {
+ buf[o++] = 0x99;
+ }
+ }
+ }
+ return buf.slice(0, o);
+ },
+ 'windows-1251': function(buf) {
+ let i = 0, n = buf.byteLength, o = 0, c;
+ while ( i < n ) {
+ c = buf[i++];
+ if ( c < 0x80 ) {
+ buf[o++] = c;
+ } else {
+ if ( (c & 0xE0) === 0xC0 ) {
+ c = (c & 0x1F) << 6;
+ c |= (buf[i++] & 0x3F);
+ } else if ( (c & 0xF0) === 0xE0 ) {
+ c = (c & 0x0F) << 12;
+ c |= (buf[i++] & 0x3F) << 6;
+ c |= (buf[i++] & 0x3F);
+ } else if ( (c & 0xF8) === 0xF0 ) {
+ c = (c & 0x07) << 18;
+ c |= (buf[i++] & 0x3F) << 12;
+ c |= (buf[i++] & 0x3F) << 6;
+ c |= (buf[i++] & 0x3F);
+ }
+ if ( c < 0x100 ) {
+ buf[o++] = c;
+ } else if ( c >= 0x400 && c < 0x4A0 ) {
+ buf[o++] = cp1251_range0[c - 0x400];
+ } else if ( c >= 0x2010 && c < 0x2040 ) {
+ buf[o++] = cp125x_range0[c - 0x2010];
+ } else if ( c === 0x20AC ) {
+ buf[o++] = 0x88;
+ } else if ( c === 0x2116 ) {
+ buf[o++] = 0xB9;
+ } else if ( c === 0x2122 ) {
+ buf[o++] = 0x99;
+ }
+ }
+ }
+ return buf.slice(0, o);
+ },
+ 'windows-1252': function(buf) {
+ let i = 0, n = buf.byteLength, o = 0, c;
+ while ( i < n ) {
+ c = buf[i++];
+ if ( c < 0x80 ) {
+ buf[o++] = c;
+ } else {
+ if ( (c & 0xE0) === 0xC0 ) {
+ c = (c & 0x1F) << 6;
+ c |= (buf[i++] & 0x3F);
+ } else if ( (c & 0xF0) === 0xE0 ) {
+ c = (c & 0x0F) << 12;
+ c |= (buf[i++] & 0x3F) << 6;
+ c |= (buf[i++] & 0x3F);
+ } else if ( (c & 0xF8) === 0xF0 ) {
+ c = (c & 0x07) << 18;
+ c |= (buf[i++] & 0x3F) << 12;
+ c |= (buf[i++] & 0x3F) << 6;
+ c |= (buf[i++] & 0x3F);
+ }
+ if ( c < 0x100 ) {
+ buf[o++] = c;
+ } else if ( c >= 0x150 && c < 0x180 ) {
+ buf[o++] = cp1252_range0[c - 0x150];
+ } else if ( c >= 0x2010 && c < 0x2040 ) {
+ buf[o++] = cp125x_range0[c - 0x2010];
+ } else if ( c === 0x192 ) {
+ buf[o++] = 0x83;
+ } else if ( c === 0x2C6 ) {
+ buf[o++] = 0x88;
+ } else if ( c === 0x2DC ) {
+ buf[o++] = 0x98;
+ } else if ( c === 0x20AC ) {
+ buf[o++] = 0x80;
+ } else if ( c === 0x2122 ) {
+ buf[o++] = 0x99;
+ }
+ }
+ }
+ return buf.slice(0, o);
+ }
+ };
+
+ return {
+ encode: function(charset, buf) {
+ return encoders.hasOwnProperty(charset) ?
+ encoders[charset](buf) :
+ buf;
+ },
+ normalizeCharset: function(charset) {
+ if ( charset === undefined ) {
+ return 'utf-8';
+ }
+ return normalizedCharset.get(charset.toLowerCase());
+ }
+ };
+})();
+
+/******************************************************************************/
+
+export default textEncode;
+
+/******************************************************************************/
diff --git a/src/js/text-utils.js b/src/js/text-utils.js
new file mode 100644
index 0000000..198a433
--- /dev/null
+++ b/src/js/text-utils.js
@@ -0,0 +1,107 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+// https://bugs.chromium.org/p/v8/issues/detail?id=2869
+// orphanizeString is to work around String.slice() potentially causing
+// the whole raw filter list to be held in memory just because we cut out
+// the title as a substring.
+
+function orphanizeString(s) {
+ return JSON.parse(JSON.stringify(s));
+}
+
+/******************************************************************************/
+
+class LineIterator {
+ constructor(text, offset) {
+ this.text = text;
+ this.textLen = this.text.length;
+ this.offset = offset || 0;
+ }
+ next(offset) {
+ if ( offset !== undefined ) {
+ this.offset += offset;
+ }
+ let lineEnd = this.text.indexOf('\n', this.offset);
+ if ( lineEnd === -1 ) {
+ lineEnd = this.text.indexOf('\r', this.offset);
+ if ( lineEnd === -1 ) {
+ lineEnd = this.textLen;
+ }
+ }
+ const line = this.text.slice(this.offset, lineEnd);
+ this.offset = lineEnd + 1;
+ return line;
+ }
+ peek(n) {
+ const offset = this.offset;
+ return this.text.slice(offset, offset + n);
+ }
+ charCodeAt(offset) {
+ return this.text.charCodeAt(this.offset + offset);
+ }
+ eot() {
+ return this.offset >= this.textLen;
+ }
+}
+
+/******************************************************************************/
+
+// The field iterator is less CPU-intensive than when using native
+// String.split().
+
+class FieldIterator {
+ constructor(sep) {
+ this.text = '';
+ this.sep = sep;
+ this.sepLen = sep.length;
+ this.offset = 0;
+ }
+ first(text) {
+ this.text = text;
+ this.offset = 0;
+ return this.next();
+ }
+ next() {
+ let end = this.text.indexOf(this.sep, this.offset);
+ if ( end === -1 ) {
+ end = this.text.length;
+ }
+ const field = this.text.slice(this.offset, end);
+ this.offset = end + this.sepLen;
+ return field;
+ }
+ remainder() {
+ return this.text.slice(this.offset);
+ }
+}
+
+/******************************************************************************/
+
+export {
+ FieldIterator,
+ LineIterator,
+ orphanizeString,
+};
diff --git a/src/js/theme.js b/src/js/theme.js
new file mode 100644
index 0000000..d3f9b00
--- /dev/null
+++ b/src/js/theme.js
@@ -0,0 +1,151 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+function getActualTheme(nominalTheme) {
+ let theme = nominalTheme || 'light';
+ if ( nominalTheme === 'auto' ) {
+ if ( typeof self.matchMedia === 'function' ) {
+ const mql = self.matchMedia('(prefers-color-scheme: dark)');
+ theme = mql instanceof Object && mql.matches === true
+ ? 'dark'
+ : 'light';
+ } else {
+ theme = 'light';
+ }
+ }
+ return theme;
+}
+
+function setTheme(theme, propagate = false) {
+ theme = getActualTheme(theme);
+ let w = self;
+ for (;;) {
+ const rootcl = w.document.documentElement.classList;
+ if ( theme === 'dark' ) {
+ rootcl.add('dark');
+ rootcl.remove('light');
+ } else /* if ( theme === 'light' ) */ {
+ rootcl.add('light');
+ rootcl.remove('dark');
+ }
+ if ( propagate === false ) { break; }
+ if ( w === w.parent ) { break; }
+ w = w.parent;
+ try { void w.document; } catch(ex) { return; }
+ }
+}
+
+function setAccentColor(
+ accentEnabled,
+ accentColor,
+ propagate,
+ stylesheet = ''
+) {
+ if ( accentEnabled && stylesheet === '' && self.hsluv !== undefined ) {
+ const toRGB = hsl => self.hsluv.hsluvToRgb(hsl).map(a => Math.round(a * 255)).join(' ');
+ // Normalize first
+ const hsl = self.hsluv.hexToHsluv(accentColor);
+ hsl[0] = Math.round(hsl[0] * 10) / 10;
+ hsl[1] = Math.round(Math.min(100, Math.max(0, hsl[1])));
+ // Use normalized result to derive all shades
+ const shades = [ 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 95 ];
+ const text = [];
+ text.push(':root.accented {');
+ for ( const shade of shades ) {
+ hsl[2] = shade;
+ text.push(` --primary-${shade}: ${toRGB(hsl)};`);
+ }
+ text.push('}');
+ hsl[1] = Math.min(25, hsl[1]);
+ hsl[2] = 80;
+ text.push(
+ ':root.light.accented {',
+ ` --button-surface-rgb: ${toRGB(hsl)};`,
+ '}',
+ );
+ hsl[2] = 30;
+ text.push(
+ ':root.dark.accented {',
+ ` --button-surface-rgb: ${toRGB(hsl)};`,
+ '}',
+ );
+ text.push('');
+ stylesheet = text.join('\n');
+ vAPI.messaging.send('dom', { what: 'uiAccentStylesheet', stylesheet });
+ }
+ let w = self;
+ for (;;) {
+ const wdoc = w.document;
+ let style = wdoc.querySelector('style#accentColors');
+ if ( style !== null ) { style.remove(); }
+ if ( accentEnabled ) {
+ style = wdoc.createElement('style');
+ style.id = 'accentColors';
+ style.textContent = stylesheet;
+ wdoc.head.append(style);
+ wdoc.documentElement.classList.add('accented');
+ } else {
+ wdoc.documentElement.classList.remove('accented');
+ }
+ if ( propagate === false ) { break; }
+ if ( w === w.parent ) { break; }
+ w = w.parent;
+ try { void w.document; } catch(ex) { break; }
+ }
+}
+
+{
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1044
+ // Offer the possibility to bypass uBO's default styling
+ vAPI.messaging.send('dom', { what: 'uiStyles' }).then(response => {
+ if ( typeof response !== 'object' || response === null ) { return; }
+ setTheme(response.uiTheme);
+ if ( response.uiAccentCustom ) {
+ setAccentColor(
+ true,
+ response.uiAccentCustom0,
+ false,
+ response.uiAccentStylesheet
+ );
+ }
+ if ( response.uiStyles !== 'unset' ) {
+ document.body.style.cssText = response.uiStyles;
+ }
+ });
+
+ const rootcl = document.documentElement.classList;
+ if ( vAPI.webextFlavor.soup.has('mobile') ) {
+ rootcl.add('mobile');
+ } else {
+ rootcl.add('desktop');
+ }
+ if ( window.matchMedia('(min-resolution: 150dpi)').matches ) {
+ rootcl.add('hidpi');
+ }
+}
+
+export {
+ getActualTheme,
+ setTheme,
+ setAccentColor,
+};
diff --git a/src/js/traffic.js b/src/js/traffic.js
new file mode 100644
index 0000000..bf34fd4
--- /dev/null
+++ b/src/js/traffic.js
@@ -0,0 +1,1261 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* globals browser */
+
+'use strict';
+
+/******************************************************************************/
+
+import htmlFilteringEngine from './html-filtering.js';
+import httpheaderFilteringEngine from './httpheader-filtering.js';
+import logger from './logger.js';
+import scriptletFilteringEngine from './scriptlet-filtering.js';
+import staticNetFilteringEngine from './static-net-filtering.js';
+import textEncode from './text-encode.js';
+import µb from './background.js';
+import * as sfp from './static-filtering-parser.js';
+import * as fc from './filtering-context.js';
+import { isNetworkURI } from './uri-utils.js';
+
+import {
+ sessionFirewall,
+ sessionSwitches,
+ sessionURLFiltering,
+} from './filtering-engines.js';
+
+
+/******************************************************************************/
+
+// Platform-specific behavior.
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/42
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1376932
+// Add proper version number detection once issue is fixed in Firefox.
+let dontCacheResponseHeaders =
+ vAPI.webextFlavor.soup.has('firefox');
+
+// The real actual webextFlavor value may not be set in stone, so listen
+// for possible future changes.
+window.addEventListener('webextFlavor', function() {
+ dontCacheResponseHeaders =
+ vAPI.webextFlavor.soup.has('firefox');
+}, { once: true });
+
+/******************************************************************************/
+
+const patchLocalRedirectURL = url => url.charCodeAt(0) === 0x2F /* '/' */
+ ? vAPI.getURL(url)
+ : url;
+
+/******************************************************************************/
+
+// Intercept and filter web requests.
+
+const onBeforeRequest = function(details) {
+ const fctxt = µb.filteringContext.fromWebrequestDetails(details);
+
+ // Special handling for root document.
+ // https://github.com/chrisaljoudi/uBlock/issues/1001
+ // This must be executed regardless of whether the request is
+ // behind-the-scene
+ if ( fctxt.itype === fctxt.MAIN_FRAME ) {
+ return onBeforeRootFrameRequest(fctxt);
+ }
+
+ // Special treatment: behind-the-scene requests
+ const tabId = details.tabId;
+ if ( tabId < 0 ) {
+ return onBeforeBehindTheSceneRequest(fctxt);
+ }
+
+ // Lookup the page store associated with this tab id.
+ let pageStore = µb.pageStoreFromTabId(tabId);
+ if ( pageStore === null ) {
+ const tabContext = µb.tabContextManager.mustLookup(tabId);
+ if ( tabContext.tabId < 0 ) {
+ return onBeforeBehindTheSceneRequest(fctxt);
+ }
+ vAPI.tabs.onNavigation({ tabId, frameId: 0, url: tabContext.rawURL });
+ pageStore = µb.pageStoreFromTabId(tabId);
+ }
+
+ const result = pageStore.filterRequest(fctxt);
+
+ pageStore.journalAddRequest(fctxt, result);
+
+ if ( logger.enabled ) {
+ fctxt.setRealm('network').toLogger();
+ }
+
+ // Redirected
+
+ if ( fctxt.redirectURL !== undefined ) {
+ return { redirectUrl: patchLocalRedirectURL(fctxt.redirectURL) };
+ }
+
+ // Not redirected
+
+ // Blocked
+ if ( result === 1 ) {
+ return { cancel: true };
+ }
+
+ // Not blocked
+ if (
+ fctxt.itype === fctxt.SUB_FRAME &&
+ details.parentFrameId !== -1 &&
+ details.aliasURL === undefined
+ ) {
+ pageStore.setFrameURL(details);
+ }
+
+ if ( result === 2 ) {
+ return { cancel: false };
+ }
+};
+
+/******************************************************************************/
+
+const onBeforeRootFrameRequest = function(fctxt) {
+ const requestURL = fctxt.url;
+
+ // Special handling for root document.
+ // https://github.com/chrisaljoudi/uBlock/issues/1001
+ // This must be executed regardless of whether the request is
+ // behind-the-scene
+ const requestHostname = fctxt.getHostname();
+ let result = 0;
+ let logData;
+
+ // If the site is whitelisted, disregard strict blocking
+ const trusted = µb.getNetFilteringSwitch(requestURL) === false;
+ if ( trusted ) {
+ result = 2;
+ if ( logger.enabled ) {
+ logData = { engine: 'u', result: 2, raw: 'whitelisted' };
+ }
+ }
+
+ // Permanently unrestricted?
+ if (
+ result === 0 &&
+ sessionSwitches.evaluateZ('no-strict-blocking', requestHostname)
+ ) {
+ result = 2;
+ if ( logger.enabled ) {
+ logData = {
+ engine: 'u',
+ result: 2,
+ raw: `no-strict-blocking: ${sessionSwitches.z} true`
+ };
+ }
+ }
+
+ // Temporarily whitelisted?
+ if ( result === 0 && strictBlockBypasser.isBypassed(requestHostname) ) {
+ result = 2;
+ if ( logger.enabled ) {
+ logData = {
+ engine: 'u',
+ result: 2,
+ raw: 'no-strict-blocking: true (temporary)'
+ };
+ }
+ }
+
+ // Static filtering
+ if ( result === 0 ) {
+ ({ result, logData } = shouldStrictBlock(fctxt, logger.enabled));
+ }
+
+ const pageStore = µb.bindTabToPageStore(fctxt.tabId, 'beforeRequest');
+ if ( pageStore !== null ) {
+ pageStore.journalAddRootFrame('uncommitted', requestURL);
+ pageStore.journalAddRequest(fctxt, result);
+ }
+
+ if ( logger.enabled ) {
+ fctxt.setFilter(logData);
+ }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/760
+ // Redirect non-blocked request?
+ if ( result !== 1 && trusted === false && pageStore !== null ) {
+ pageStore.redirectNonBlockedRequest(fctxt);
+ }
+
+ if ( logger.enabled ) {
+ fctxt.setRealm('network').toLogger();
+ }
+
+ // Redirected
+
+ if ( fctxt.redirectURL !== undefined ) {
+ return { redirectUrl: patchLocalRedirectURL(fctxt.redirectURL) };
+ }
+
+ // Not blocked
+
+ if ( result !== 1 ) { return; }
+
+ // No log data means no strict blocking (because we need to report why
+ // the blocking occurs.
+ if ( logData === undefined ) { return; }
+
+ // Blocked
+
+ const query = encodeURIComponent(JSON.stringify({
+ url: requestURL,
+ hn: requestHostname,
+ dn: fctxt.getDomain() || requestHostname,
+ fs: logData.raw
+ }));
+
+ vAPI.tabs.replace(
+ fctxt.tabId,
+ vAPI.getURL('document-blocked.html?details=') + query
+ );
+
+ return { cancel: true };
+};
+
+/******************************************************************************/
+
+// Strict blocking through static filtering
+//
+// https://github.com/chrisaljoudi/uBlock/issues/1128
+// Do not block if the match begins after the hostname,
+// except when the filter is specifically of type `other`.
+// https://github.com/gorhill/uBlock/issues/490
+// Removing this for the time being, will need a new, dedicated type.
+// https://github.com/uBlockOrigin/uBlock-issues/issues/1501
+// Support explicit exception filters.
+//
+// Let result of match for specific `document` type be `rs`
+// Let result of match for no specific type be `rg` *after* going through
+// confirmation necessary for implicit matches
+// Let `important` be `i`
+// Let final result be logical combination of `rs` and `rg` as follow:
+//
+// | rs |
+// +--------+--------+--------+--------|
+// | 0 | 1 | 1i | 2 |
+// --------+--------+--------+--------+--------+--------|
+// | 0 | rg | rs | rs | rs |
+// rg | 1 | rg | rs | rs | rs |
+// | 1i | rg | rg | rs | rg |
+// | 2 | rg | rg | rs | rs |
+// --------+--------+--------+--------+--------+--------+
+
+const shouldStrictBlock = function(fctxt, loggerEnabled) {
+ const snfe = staticNetFilteringEngine;
+
+ // Explicit filtering: `document` option
+ const rs = snfe.matchRequest(fctxt, 0b0011);
+ const is = rs === 1 && snfe.isBlockImportant();
+ let lds;
+ if ( rs !== 0 || loggerEnabled ) {
+ lds = snfe.toLogData();
+ }
+
+ // | rs |
+ // +--------+--------+--------+--------|
+ // | 0 | 1 | 1i | 2 |
+ // --------+--------+--------+--------+--------+--------|
+ // | 0 | rg | rs | x | rs |
+ // rg | 1 | rg | rs | x | rs |
+ // | 1i | rg | rg | x | rg |
+ // | 2 | rg | rg | x | rs |
+ // --------+--------+--------+--------+--------+--------+
+ if ( rs === 1 && is ) {
+ return { result: rs, logData: lds };
+ }
+
+ // Implicit filtering: no `document` option
+ fctxt.type = 'no_type';
+ let rg = snfe.matchRequest(fctxt, 0b0011);
+ fctxt.type = 'main_frame';
+ const ig = rg === 1 && snfe.isBlockImportant();
+ let ldg;
+ if ( rg !== 0 || loggerEnabled ) {
+ ldg = snfe.toLogData();
+ if ( rg === 1 && validateStrictBlock(fctxt, ldg) === false ) {
+ rg = 0; ldg = undefined;
+ }
+ }
+
+ // | rs |
+ // +--------+--------+--------+--------|
+ // | 0 | 1 | 1i | 2 |
+ // --------+--------+--------+--------+--------+--------|
+ // | 0 | x | rs | - | rs |
+ // rg | 1 | x | rs | - | rs |
+ // | 1i | x | x | - | x |
+ // | 2 | x | x | - | rs |
+ // --------+--------+--------+--------+--------+--------+
+ if ( rs === 0 || rg === 1 && ig || rg === 2 && rs !== 2 ) {
+ return { result: rg, logData: ldg };
+ }
+
+ // | rs |
+ // +--------+--------+--------+--------|
+ // | 0 | 1 | 1i | 2 |
+ // --------+--------+--------+--------+--------+--------|
+ // | 0 | - | x | - | x |
+ // rg | 1 | - | x | - | x |
+ // | 1i | - | - | - | - |
+ // | 2 | - | - | - | x |
+ // --------+--------+--------+--------+--------+--------+
+ return { result: rs, logData: lds };
+};
+
+/******************************************************************************/
+
+// https://github.com/gorhill/uBlock/issues/3208
+// Mind case insensitivity.
+// https://github.com/uBlockOrigin/uBlock-issues/issues/1147
+// Do not strict-block if the filter pattern does not contain at least one
+// token character.
+
+const validateStrictBlock = function(fctxt, logData) {
+ if ( typeof logData.regex !== 'string' ) { return false; }
+ if ( typeof logData.raw === 'string' && /\w/.test(logData.raw) === false ) {
+ return false;
+ }
+ const url = fctxt.url;
+ const re = new RegExp(logData.regex, 'i');
+ const match = re.exec(url.toLowerCase());
+ if ( match === null ) { return false; }
+
+ // https://github.com/chrisaljoudi/uBlock/issues/1128
+ // https://github.com/chrisaljoudi/uBlock/issues/1212
+ // Verify that the end of the match is anchored to the end of the
+ // hostname.
+ // https://github.com/uBlockOrigin/uAssets/issues/7619#issuecomment-653010310
+ // Also match FQDN.
+ const hostname = fctxt.getHostname();
+ const hnpos = url.indexOf(hostname);
+ const hnlen = hostname.length;
+ const end = match.index + match[0].length - hnpos - hnlen;
+ return end === 0 || end === 1 ||
+ end === 2 && url.charCodeAt(hnpos + hnlen) === 0x2E /* '.' */;
+};
+
+/******************************************************************************/
+
+// Intercept and filter behind-the-scene requests.
+
+const onBeforeBehindTheSceneRequest = function(fctxt) {
+ const pageStore = µb.pageStoreFromTabId(fctxt.tabId);
+ if ( pageStore === null ) { return; }
+
+ // https://github.com/gorhill/uBlock/issues/3150
+ // Ability to globally block CSP reports MUST also apply to
+ // behind-the-scene network requests.
+
+ let result = 0;
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/339
+ // Need to also test against `-scheme` since tabOrigin is normalized.
+ // Not especially elegant but for now this accomplishes the purpose of
+ // not dealing with network requests fired from a synthetic scope,
+ // that is unless advanced user mode is enabled.
+
+ if (
+ fctxt.tabOrigin.endsWith('-scheme') === false &&
+ isNetworkURI(fctxt.tabOrigin) ||
+ µb.userSettings.advancedUserEnabled ||
+ fctxt.itype === fctxt.CSP_REPORT
+ ) {
+ result = pageStore.filterRequest(fctxt);
+
+ // The "any-tab" scope is not whitelist-able, and in such case we must
+ // use the origin URL as the scope. Most such requests aren't going to
+ // be blocked, so we test for whitelisting and modify the result only
+ // when the request is being blocked.
+ //
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1478
+ // Also remove potential redirection when request is to be
+ // whitelisted.
+ if (
+ result === 1 &&
+ µb.getNetFilteringSwitch(fctxt.tabOrigin) === false
+ ) {
+ result = 2;
+ fctxt.redirectURL = undefined;
+ fctxt.filter = { engine: 'u', result: 2, raw: 'whitelisted' };
+ }
+ }
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1204
+ onBeforeBehindTheSceneRequest.journalAddRequest(fctxt, result);
+
+ if ( logger.enabled ) {
+ fctxt.setRealm('network').toLogger();
+ }
+
+ // Redirected
+
+ if ( fctxt.redirectURL !== undefined ) {
+ return { redirectUrl: patchLocalRedirectURL(fctxt.redirectURL) };
+ }
+
+ // Blocked?
+
+ if ( result === 1 ) {
+ return { cancel: true };
+ }
+};
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/1204
+// Report the tabless network requests to all page stores matching the
+// document origin. This is an approximation, there is unfortunately no
+// way to know for sure which exact page triggered a tabless network
+// request.
+
+{
+ const pageStores = new Set();
+ let hostname = '';
+ let pageStoresToken = 0;
+
+ const reset = function() {
+ hostname = '';
+ pageStores.clear();
+ pageStoresToken = 0;
+ };
+
+ const gc = ( ) => {
+ if ( pageStoresToken !== µb.pageStoresToken ) { return reset(); }
+ gcTimer.on(30011);
+ };
+
+ const gcTimer = vAPI.defer.create(gc);
+
+ onBeforeBehindTheSceneRequest.journalAddRequest = (fctxt, result) => {
+ const docHostname = fctxt.getDocHostname();
+ if (
+ docHostname !== hostname ||
+ pageStoresToken !== µb.pageStoresToken
+ ) {
+ hostname = docHostname;
+ pageStores.clear();
+ for ( const pageStore of µb.pageStores.values() ) {
+ if ( pageStore.tabHostname !== docHostname ) { continue; }
+ pageStores.add(pageStore);
+ }
+ pageStoresToken = µb.pageStoresToken;
+ gcTimer.offon(30011);
+ }
+ for ( const pageStore of pageStores ) {
+ pageStore.journalAddRequest(fctxt, result);
+ }
+ };
+}
+
+/******************************************************************************/
+
+// To handle:
+// - Media elements larger than n kB
+// - Scriptlet injection (requires ability to modify response body)
+// - HTML filtering (requires ability to modify response body)
+// - CSP injection
+
+const onHeadersReceived = function(details) {
+
+ const fctxt = µb.filteringContext.fromWebrequestDetails(details);
+ const isRootDoc = fctxt.itype === fctxt.MAIN_FRAME;
+
+ let pageStore = µb.pageStoreFromTabId(fctxt.tabId);
+ if ( pageStore === null ) {
+ if ( isRootDoc === false ) { return; }
+ pageStore = µb.bindTabToPageStore(fctxt.tabId, 'beforeRequest');
+ }
+ if ( pageStore.getNetFilteringSwitch(fctxt) === false ) { return; }
+
+ if ( fctxt.itype === fctxt.IMAGE || fctxt.itype === fctxt.MEDIA ) {
+ const result = foilLargeMediaElement(details, fctxt, pageStore);
+ if ( result !== undefined ) { return result; }
+ }
+
+ // Keep in mind response headers will be modified in-place if needed, so
+ // `details.responseHeaders` will always point to the modified response
+ // headers.
+ const { responseHeaders } = details;
+ if ( Array.isArray(responseHeaders) === false ) { return; }
+
+ if ( isRootDoc === false ) {
+ const result = pageStore.filterOnHeaders(fctxt, responseHeaders);
+ if ( result !== 0 ) {
+ if ( logger.enabled ) {
+ fctxt.setRealm('network').toLogger();
+ }
+ if ( result === 1 ) {
+ pageStore.journalAddRequest(fctxt, 1);
+ return { cancel: true };
+ }
+ }
+ }
+
+ const mime = mimeFromHeaders(responseHeaders);
+
+ // https://github.com/gorhill/uBlock/issues/2813
+ // Disable the blocking of large media elements if the document is itself
+ // a media element: the resource was not prevented from loading so no
+ // point to further block large media elements for the current document.
+ if ( isRootDoc ) {
+ if ( reMediaContentTypes.test(mime) ) {
+ pageStore.allowLargeMediaElementsUntil = 0;
+ // Fall-through: this could be an SVG document, which supports
+ // script tags.
+ }
+ }
+
+ if ( bodyFilterer.canFilter(fctxt, details) ) {
+ const jobs = [];
+ // `replace=` filter option
+ const replaceDirectives =
+ staticNetFilteringEngine.matchAndFetchModifiers(fctxt, 'replace');
+ if ( replaceDirectives ) {
+ jobs.push({
+ fn: textResponseFilterer,
+ args: [ replaceDirectives ],
+ });
+ }
+ // html filtering
+ if ( mime === 'text/html' || mime === 'application/xhtml+xml' ) {
+ const selectors = htmlFilteringEngine.retrieve(fctxt);
+ if ( selectors ) {
+ jobs.push({
+ fn: htmlResponseFilterer,
+ args: [ selectors ],
+ });
+ }
+ }
+ if ( jobs.length !== 0 ) {
+ bodyFilterer.doFilter(fctxt, jobs);
+ }
+ }
+
+ let modifiedHeaders = false;
+ if ( httpheaderFilteringEngine.apply(fctxt, responseHeaders) === true ) {
+ modifiedHeaders = true;
+ }
+ if ( injectCSP(fctxt, pageStore, responseHeaders) === true ) {
+ modifiedHeaders = true;
+ }
+ if ( injectPP(fctxt, pageStore, responseHeaders) === true ) {
+ modifiedHeaders = true;
+ }
+
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1376932
+ // Prevent document from being cached by the browser if we modified it,
+ // either through HTML filtering and/or modified response headers.
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/229
+ // Use `no-cache` instead of `no-cache, no-store, must-revalidate`, this
+ // allows Firefox's offline mode to work as expected.
+ if ( modifiedHeaders && dontCacheResponseHeaders ) {
+ const cacheControl = µb.hiddenSettings.cacheControlForFirefox1376932;
+ if ( cacheControl !== 'unset' ) {
+ let i = headerIndexFromName('cache-control', responseHeaders);
+ if ( i !== -1 ) {
+ responseHeaders[i].value = cacheControl;
+ } else {
+ responseHeaders.push({ name: 'Cache-Control', value: cacheControl });
+ }
+ modifiedHeaders = true;
+ }
+ }
+
+ if ( modifiedHeaders ) {
+ return { responseHeaders };
+ }
+};
+
+const reMediaContentTypes = /^(?:audio|image|video)\//;
+
+/******************************************************************************/
+
+const mimeFromHeaders = headers => {
+ if ( Array.isArray(headers) === false ) { return ''; }
+ return mimeFromContentType(headerValueFromName('content-type', headers));
+};
+
+const mimeFromContentType = contentType => {
+ const match = reContentTypeMime.exec(contentType);
+ if ( match === null ) { return ''; }
+ return match[0].toLowerCase();
+};
+
+const reContentTypeMime = /^[^;]+/i;
+
+/******************************************************************************/
+
+function textResponseFilterer(session, directives) {
+ const applied = [];
+ for ( const directive of directives ) {
+ if ( directive.refs instanceof Object === false ) { continue; }
+ if ( directive.result !== 1 ) {
+ applied.push(directive);
+ continue;
+ }
+ const { refs } = directive;
+ if ( refs.$cache === null ) {
+ refs.$cache = sfp.parseReplaceValue(refs.value);
+ }
+ const cache = refs.$cache;
+ if ( cache === undefined ) { continue; }
+ cache.re.lastIndex = 0;
+ if ( cache.re.test(session.getString()) !== true ) { continue; }
+ cache.re.lastIndex = 0;
+ session.setString(session.getString().replace(
+ cache.re,
+ cache.replacement
+ ));
+ applied.push(directive);
+ }
+ if ( applied.length === 0 ) { return; }
+ if ( logger.enabled !== true ) { return; }
+ session.setRealm('network')
+ .pushFilters(applied.map(a => a.logData()))
+ .toLogger();
+}
+
+/******************************************************************************/
+
+function htmlResponseFilterer(session, selectors) {
+ if ( htmlResponseFilterer.domParser === null ) {
+ htmlResponseFilterer.domParser = new DOMParser();
+ htmlResponseFilterer.xmlSerializer = new XMLSerializer();
+ }
+
+ const doc = htmlResponseFilterer.domParser.parseFromString(
+ session.getString(),
+ session.mime
+ );
+
+ if ( selectors === undefined ) { return; }
+ if ( htmlFilteringEngine.apply(doc, session, selectors) !== true ) { return; }
+
+ // https://stackoverflow.com/questions/6088972/get-doctype-of-an-html-as-string-with-javascript/10162353#10162353
+ const doctypeStr = [
+ doc.doctype instanceof Object ?
+ htmlResponseFilterer.xmlSerializer.serializeToString(doc.doctype) + '\n' :
+ '',
+ doc.documentElement.outerHTML,
+ ].join('\n');
+ session.setString(doctypeStr);
+}
+htmlResponseFilterer.domParser = null;
+htmlResponseFilterer.xmlSerializer = null;
+
+
+/*******************************************************************************
+
+ The response body filterer is responsible for:
+
+ - Realize static network filter option `replace=`
+ - HTML filtering
+
+**/
+
+const bodyFilterer = (( ) => {
+ const sessions = new Map();
+ const reContentTypeCharset = /charset=['"]?([^'" ]+)/i;
+ const otherValidMimes = new Set([
+ 'application/javascript',
+ 'application/json',
+ 'application/mpegurl',
+ 'application/vnd.api+json',
+ 'application/vnd.apple.mpegurl',
+ 'application/vnd.apple.mpegurl.audio',
+ 'application/x-javascript',
+ 'application/x-mpegurl',
+ 'application/xhtml+xml',
+ 'application/xml',
+ 'audio/mpegurl',
+ 'audio/x-mpegurl',
+ ]);
+ const BINARY_TYPES = fc.FONT | fc.IMAGE | fc.MEDIA | fc.WEBSOCKET;
+ const MAX_BUFFER_LENGTH = 3 * 1024 * 1024;
+
+ let textDecoder, textEncoder;
+ let mime = '';
+ let charset = '';
+
+ const contentTypeFromDetails = details => {
+ switch ( details.type ) {
+ case 'script':
+ return 'text/javascript; charset=utf-8';
+ case 'stylesheet':
+ return 'text/css';
+ default:
+ break;
+ }
+ return '';
+ };
+
+ const charsetFromContentType = contentType => {
+ const match = reContentTypeCharset.exec(contentType);
+ if ( match === null ) { return; }
+ return match[1].toLowerCase();
+ };
+
+ const charsetFromMime = mime => {
+ switch ( mime ) {
+ case 'application/xml':
+ case 'application/xhtml+xml':
+ case 'text/html':
+ case 'text/css':
+ return;
+ default:
+ break;
+ }
+ return 'utf-8';
+ };
+
+ const charsetFromStream = bytes => {
+ if ( bytes.length < 3 ) { return; }
+ if ( bytes[0] === 0xEF && bytes[1] === 0xBB && bytes[2] === 0xBF ) {
+ return 'utf-8';
+ }
+ let i = -1;
+ while ( i < 65536 ) {
+ i += 1;
+ /* c */ if ( bytes[i+0] !== 0x63 ) { continue; }
+ /* h */ if ( bytes[i+1] !== 0x68 ) { continue; }
+ /* a */ if ( bytes[i+2] !== 0x61 ) { continue; }
+ /* r */ if ( bytes[i+3] !== 0x72 ) { continue; }
+ /* s */ if ( bytes[i+4] !== 0x73 ) { continue; }
+ /* e */ if ( bytes[i+5] !== 0x65 ) { continue; }
+ /* t */ if ( bytes[i+6] !== 0x74 ) { continue; }
+ break;
+ }
+ if ( (i - 40) >= 65536 ) { return; }
+ i += 8;
+ // find first alpha character
+ let j = -1;
+ while ( j < 8 ) {
+ j += 1;
+ const c = bytes[i+j];
+ if ( c >= 0x41 && c <= 0x5A ) { break; }
+ if ( c >= 0x61 && c <= 0x7A ) { break; }
+ }
+ if ( j === 8 ) { return; }
+ i += j;
+ // Collect characters until first non charset-name-character
+ const chars = [];
+ j = 0;
+ while ( j < 24 ) {
+ const c = bytes[i+j];
+ if ( c < 0x2D ) { break; }
+ if ( c > 0x2D && c < 0x30 ) { break; }
+ if ( c > 0x39 && c < 0x41 ) { break; }
+ if ( c > 0x5A && c < 0x61 ) { break; }
+ if ( c > 0x7A ) { break; }
+ chars.push(c);
+ j += 1;
+ }
+ if ( j === 20 ) { return; }
+ return String.fromCharCode(...chars).toLowerCase();
+ };
+
+ const streamClose = (session, buffer) => {
+ if ( buffer !== undefined ) {
+ session.stream.write(buffer);
+ } else if ( session.buffer !== undefined ) {
+ session.stream.write(session.buffer);
+ }
+ session.stream.close();
+ };
+
+ const onStreamData = function(ev) {
+ const session = sessions.get(this);
+ if ( session === undefined ) {
+ this.write(ev.data);
+ this.disconnect();
+ return;
+ }
+ if ( this.status !== 'transferringdata' ) {
+ if ( this.status !== 'finishedtransferringdata' ) {
+ sessions.delete(this);
+ this.disconnect();
+ return;
+ }
+ }
+ if ( session.buffer === null ) {
+ session.buffer = new Uint8Array(ev.data);
+ return;
+ }
+ const buffer = new Uint8Array(
+ session.buffer.byteLength + ev.data.byteLength
+ );
+ buffer.set(session.buffer);
+ buffer.set(new Uint8Array(ev.data), session.buffer.byteLength);
+ session.buffer = buffer;
+ if ( session.buffer.length >= MAX_BUFFER_LENGTH ) {
+ sessions.delete(this);
+ this.write(session.buffer);
+ this.disconnect();
+ }
+ };
+
+ const onStreamStop = function() {
+ const session = sessions.get(this);
+ sessions.delete(this);
+ if ( session === undefined || session.buffer === null ) {
+ this.close();
+ return;
+ }
+ if ( this.status !== 'finishedtransferringdata' ) { return; }
+
+ // If encoding is still unknown, try to extract from stream data
+ if ( session.charset === undefined ) {
+ const charsetFound = charsetFromStream(session.buffer);
+ if ( charsetFound === undefined ) { return streamClose(session); }
+ const charsetUsed = textEncode.normalizeCharset(charsetFound);
+ if ( charsetUsed === undefined ) { return streamClose(session); }
+ session.charset = charsetUsed;
+ }
+
+ while ( session.jobs.length !== 0 ) {
+ const job = session.jobs.shift();
+ job.fn(session, ...job.args);
+ }
+ if ( session.modified !== true ) { return streamClose(session); }
+
+ if ( textEncoder === undefined ) {
+ textEncoder = new TextEncoder();
+ }
+ let encodedStream = textEncoder.encode(session.str);
+
+ if ( session.charset !== 'utf-8' ) {
+ encodedStream = textEncode.encode(session.charset, encodedStream);
+ }
+
+ streamClose(session, encodedStream);
+ };
+
+ const onStreamError = function() {
+ sessions.delete(this);
+ };
+
+ return class Session extends µb.FilteringContext {
+ constructor(fctxt, mime, charset, jobs) {
+ super(fctxt);
+ this.stream = null;
+ this.buffer = null;
+ this.mime = mime;
+ this.charset = charset;
+ this.str = null;
+ this.modified = false;
+ this.jobs = jobs;
+ }
+ getString() {
+ if ( this.str !== null ) { return this.str; }
+ if ( textDecoder !== undefined ) {
+ if ( textDecoder.encoding !== this.charset ) {
+ textDecoder = undefined;
+ }
+ }
+ if ( textDecoder === undefined ) {
+ textDecoder = new TextDecoder(this.charset);
+ }
+ this.str = textDecoder.decode(this.buffer);
+ return this.str;
+ }
+ setString(s) {
+ this.str = s;
+ this.modified = true;
+ }
+ static doFilter(fctxt, jobs) {
+ if ( jobs.length === 0 ) { return; }
+ const session = new Session(fctxt, mime, charset, jobs);
+ session.stream = browser.webRequest.filterResponseData(session.id);
+ session.stream.ondata = onStreamData;
+ session.stream.onstop = onStreamStop;
+ session.stream.onerror = onStreamError;
+ sessions.set(session.stream, session);
+ }
+ static canFilter(fctxt, details) {
+ if ( µb.canFilterResponseData !== true ) { return; }
+
+ if ( (fctxt.itype & BINARY_TYPES) !== 0 ) { return; }
+
+ if ( fctxt.method !== fc.METHOD_GET ) {
+ if ( fctxt.method !== fc.METHOD_POST ) {
+ return;
+ }
+ }
+
+ // https://github.com/gorhill/uBlock/issues/3478
+ const statusCode = details.statusCode || 0;
+ if ( statusCode === 0 ) { return; }
+
+ const hostname = fctxt.getHostname();
+ if ( hostname === '' ) { return; }
+
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1426789
+ const headers = details.responseHeaders;
+ const disposition = headerValueFromName('content-disposition', headers);
+ if ( disposition !== '' ) {
+ if ( disposition.startsWith('inline') === false ) { return; }
+ }
+
+ mime = 'text/plain';
+ charset = 'utf-8';
+ const contentType = headerValueFromName('content-type', headers) ||
+ contentTypeFromDetails(details);
+ if ( contentType !== '' ) {
+ mime = mimeFromContentType(contentType);
+ if ( mime === undefined ) { return; }
+ if ( mime.startsWith('text/') === false ) {
+ if ( otherValidMimes.has(mime) === false ) { return; }
+ }
+ charset = charsetFromContentType(contentType);
+ if ( charset !== undefined ) {
+ charset = textEncode.normalizeCharset(charset);
+ if ( charset === undefined ) { return; }
+ } else {
+ charset = charsetFromMime(mime);
+ }
+ }
+
+ return true;
+ }
+ };
+})();
+
+/******************************************************************************/
+
+const injectCSP = function(fctxt, pageStore, responseHeaders) {
+ const cspSubsets = [];
+ const requestType = fctxt.type;
+
+ // Start collecting policies >>>>>>>>
+
+ // ======== built-in policies
+
+ const builtinDirectives = [];
+
+ if ( pageStore.filterScripting(fctxt, true) === 1 ) {
+ builtinDirectives.push(µb.cspNoScripting);
+ if ( logger.enabled ) {
+ fctxt.setRealm('network').setType('scripting').toLogger();
+ }
+ }
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/422
+ // We need to derive a special context for filtering `inline-script`,
+ // as the embedding document for this "resource" will always be the
+ // frame itself, not that of the parent of the frame.
+ else {
+ const fctxt2 = fctxt.duplicate();
+ fctxt2.type = 'inline-script';
+ fctxt2.setDocOriginFromURL(fctxt.url);
+ const result = pageStore.filterRequest(fctxt2);
+ if ( result === 1 ) {
+ builtinDirectives.push(µb.cspNoInlineScript);
+ }
+ if ( result === 2 && logger.enabled ) {
+ fctxt2.setRealm('network').toLogger();
+ }
+ }
+
+ // https://github.com/gorhill/uBlock/issues/1539
+ // - Use a CSP to also forbid inline fonts if remote fonts are blocked.
+ fctxt.type = 'inline-font';
+ if ( pageStore.filterRequest(fctxt) === 1 ) {
+ builtinDirectives.push(µb.cspNoInlineFont);
+ if ( logger.enabled ) {
+ fctxt.setRealm('network').toLogger();
+ }
+ }
+
+ if ( builtinDirectives.length !== 0 ) {
+ cspSubsets[0] = builtinDirectives.join(', ');
+ }
+
+ // ======== filter-based policies
+
+ // Static filtering.
+
+ fctxt.type = requestType;
+ const staticDirectives =
+ staticNetFilteringEngine.matchAndFetchModifiers(fctxt, 'csp');
+ if ( staticDirectives !== undefined ) {
+ for ( const directive of staticDirectives ) {
+ if ( directive.result !== 1 ) { continue; }
+ cspSubsets.push(directive.value);
+ }
+ }
+
+ // URL filtering `allow` rules override static filtering.
+ if (
+ cspSubsets.length !== 0 &&
+ sessionURLFiltering.evaluateZ(
+ fctxt.getTabHostname(),
+ fctxt.url,
+ 'csp'
+ ) === 2
+ ) {
+ if ( logger.enabled ) {
+ fctxt.setRealm('network')
+ .setType('csp')
+ .setFilter(sessionURLFiltering.toLogData())
+ .toLogger();
+ }
+ return;
+ }
+
+ // Dynamic filtering `allow` rules override static filtering.
+ if (
+ cspSubsets.length !== 0 &&
+ µb.userSettings.advancedUserEnabled &&
+ sessionFirewall.evaluateCellZY(
+ fctxt.getTabHostname(),
+ fctxt.getTabHostname(),
+ '*'
+ ) === 2
+ ) {
+ if ( logger.enabled ) {
+ fctxt.setRealm('network')
+ .setType('csp')
+ .setFilter(sessionFirewall.toLogData())
+ .toLogger();
+ }
+ return;
+ }
+
+ // <<<<<<<< All policies have been collected
+
+ // Static CSP policies will be applied.
+
+ if ( logger.enabled && staticDirectives !== undefined ) {
+ fctxt.setRealm('network')
+ .pushFilters(staticDirectives.map(a => a.logData()))
+ .toLogger();
+ }
+
+ if ( cspSubsets.length === 0 ) { return; }
+
+ µb.updateToolbarIcon(fctxt.tabId, 0b0010);
+
+ // Use comma to merge CSP directives.
+ // Ref.: https://www.w3.org/TR/CSP2/#implementation-considerations
+ //
+ // https://github.com/gorhill/uMatrix/issues/967
+ // Inject a new CSP header rather than modify an existing one, except
+ // if the current environment does not support merging headers:
+ // Firefox 58/webext and less can't merge CSP headers, so we will merge
+ // them here.
+
+ responseHeaders.push({
+ name: 'Content-Security-Policy',
+ value: cspSubsets.join(', ')
+ });
+
+ return true;
+};
+
+/******************************************************************************/
+
+const injectPP = function(fctxt, pageStore, responseHeaders) {
+ const permissions = [];
+ const directives = staticNetFilteringEngine.matchAndFetchModifiers(fctxt, 'permissions');
+ if ( directives !== undefined ) {
+ for ( const directive of directives ) {
+ if ( directive.result !== 1 ) { continue; }
+ permissions.push(directive.value.replace('|', ', '));
+ }
+ }
+
+ if ( logger.enabled && directives !== undefined ) {
+ fctxt.setRealm('network')
+ .pushFilters(directives.map(a => a.logData()))
+ .toLogger();
+ }
+
+ if ( permissions.length === 0 ) { return; }
+
+ µb.updateToolbarIcon(fctxt.tabId, 0x02);
+
+ responseHeaders.push({
+ name: 'permissions-policy',
+ value: permissions.join(', ')
+ });
+
+ return true;
+};
+
+/******************************************************************************/
+
+// https://github.com/gorhill/uBlock/issues/1163
+// "Block elements by size".
+// https://github.com/gorhill/uBlock/issues/1390#issuecomment-187310719
+// Do not foil when the media element is fetched from the browser
+// cache. This works only when the webext API supports the `fromCache`
+// property (Firefox).
+
+const foilLargeMediaElement = function(details, fctxt, pageStore) {
+ if ( details.fromCache === true ) { return; }
+
+ let size = 0;
+ if ( µb.userSettings.largeMediaSize !== 0 ) {
+ const headers = details.responseHeaders;
+ const i = headerIndexFromName('content-length', headers);
+ if ( i === -1 ) { return; }
+ size = parseInt(headers[i].value, 10) || 0;
+ }
+
+ const result = pageStore.filterLargeMediaElement(fctxt, size);
+ if ( result === 0 ) { return; }
+
+ if ( logger.enabled ) {
+ fctxt.setRealm('network').toLogger();
+ }
+
+ return { cancel: true };
+};
+
+/******************************************************************************/
+
+// Caller must ensure headerName is normalized to lower case.
+
+const headerIndexFromName = function(headerName, headers) {
+ let i = headers.length;
+ while ( i-- ) {
+ if ( headers[i].name.toLowerCase() === headerName ) {
+ return i;
+ }
+ }
+ return -1;
+};
+
+const headerValueFromName = function(headerName, headers) {
+ const i = headerIndexFromName(headerName, headers);
+ return i !== -1 ? headers[i].value : '';
+};
+
+/******************************************************************************/
+
+const strictBlockBypasser = {
+ hostnameToDeadlineMap: new Map(),
+ cleanupTimer: vAPI.defer.create(( ) => {
+ strictBlockBypasser.cleanup();
+ }),
+
+ cleanup: function() {
+ for ( const [ hostname, deadline ] of this.hostnameToDeadlineMap ) {
+ if ( deadline <= Date.now() ) {
+ this.hostnameToDeadlineMap.delete(hostname);
+ }
+ }
+ },
+
+ revokeTime: function() {
+ return Date.now() + µb.hiddenSettings.strictBlockingBypassDuration * 1000;
+ },
+
+ bypass: function(hostname) {
+ if ( typeof hostname !== 'string' || hostname === '' ) { return; }
+ this.hostnameToDeadlineMap.set(hostname, this.revokeTime());
+ },
+
+ isBypassed: function(hostname) {
+ if ( this.hostnameToDeadlineMap.size === 0 ) { return false; }
+ this.cleanupTimer.on({ sec: µb.hiddenSettings.strictBlockingBypassDuration + 10 });
+ for (;;) {
+ const deadline = this.hostnameToDeadlineMap.get(hostname);
+ if ( deadline !== undefined ) {
+ if ( deadline > Date.now() ) {
+ this.hostnameToDeadlineMap.set(hostname, this.revokeTime());
+ return true;
+ }
+ this.hostnameToDeadlineMap.delete(hostname);
+ }
+ const pos = hostname.indexOf('.');
+ if ( pos === -1 ) { break; }
+ hostname = hostname.slice(pos + 1);
+ }
+ return false;
+ }
+};
+
+/******************************************************************************/
+
+// https://github.com/uBlockOrigin/uBlock-issues/issues/2350
+// Added scriptlet injection attempt at onResponseStarted time as per
+// https://github.com/AdguardTeam/AdguardBrowserExtension/issues/1029 and
+// https://github.com/AdguardTeam/AdguardBrowserExtension/blob/9ab85be5/Extension/src/background/webrequest.js#L620
+
+const webRequest = {
+ onBeforeRequest,
+
+ start: (( ) => {
+ vAPI.net = new vAPI.Net();
+ if ( vAPI.Net.canSuspend() ) {
+ vAPI.net.suspend();
+ }
+
+ return ( ) => {
+ vAPI.net.setSuspendableListener(onBeforeRequest);
+ vAPI.net.addListener(
+ 'onHeadersReceived',
+ onHeadersReceived,
+ { urls: [ 'http://*/*', 'https://*/*' ] },
+ [ 'blocking', 'responseHeaders' ]
+ );
+ vAPI.net.addListener(
+ 'onResponseStarted',
+ details => {
+ if ( details.tabId === -1 ) { return; }
+ const pageStore = µb.pageStoreFromTabId(details.tabId);
+ if ( pageStore === null ) { return; }
+ if ( pageStore.getNetFilteringSwitch() === false ) { return; }
+ scriptletFilteringEngine.injectNow(details);
+ },
+ {
+ types: [ 'main_frame', 'sub_frame' ],
+ urls: [ 'http://*/*', 'https://*/*' ]
+ }
+ );
+ vAPI.defer.once({ sec: µb.hiddenSettings.toolbarWarningTimeout }).then(( ) => {
+ if ( vAPI.net.hasUnprocessedRequest() === false ) { return; }
+ vAPI.net.removeUnprocessedRequest();
+ return vAPI.tabs.getCurrent();
+ }).then(tab => {
+ if ( tab instanceof Object === false ) { return; }
+ µb.updateToolbarIcon(tab.id, 0b0110);
+ });
+ vAPI.net.unsuspend({ all: true });
+ };
+ })(),
+
+ strictBlockBypass: hostname => {
+ strictBlockBypasser.bypass(hostname);
+ },
+};
+
+/******************************************************************************/
+
+export default webRequest;
+
+/******************************************************************************/
diff --git a/src/js/ublock.js b/src/js/ublock.js
new file mode 100644
index 0000000..e963377
--- /dev/null
+++ b/src/js/ublock.js
@@ -0,0 +1,700 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import io from './assets.js';
+import µb from './background.js';
+import { broadcast, filteringBehaviorChanged, onBroadcast } from './broadcast.js';
+import contextMenu from './contextmenu.js';
+import cosmeticFilteringEngine from './cosmetic-filtering.js';
+import { redirectEngine } from './redirect-engine.js';
+import { hostnameFromURI } from './uri-utils.js';
+
+import {
+ permanentFirewall,
+ sessionFirewall,
+ permanentSwitches,
+ sessionSwitches,
+ permanentURLFiltering,
+ sessionURLFiltering,
+} from './filtering-engines.js';
+
+/******************************************************************************/
+/******************************************************************************/
+
+// https://github.com/chrisaljoudi/uBlock/issues/405
+// Be more flexible with whitelist syntax
+
+// Any special regexp char will be escaped
+const whitelistDirectiveEscape = /[-\/\\^$+?.()|[\]{}]/g;
+
+// All `*` will be expanded into `.*`
+const whitelistDirectiveEscapeAsterisk = /\*/g;
+
+// Remember encountered regexps for reuse.
+const directiveToRegexpMap = new Map();
+
+// Probably manually entered whitelist directive
+const isHandcraftedWhitelistDirective = function(directive) {
+ return directive.startsWith('/') && directive.endsWith('/') ||
+ directive.indexOf('/') !== -1 && directive.indexOf('*') !== -1;
+};
+
+const matchDirective = function(url, hostname, directive) {
+ // Directive is a plain hostname.
+ if ( directive.indexOf('/') === -1 ) {
+ return hostname.endsWith(directive) &&
+ (hostname.length === directive.length ||
+ hostname.charAt(hostname.length - directive.length - 1) === '.');
+ }
+ // Match URL exactly.
+ if (
+ directive.startsWith('/') === false &&
+ directive.indexOf('*') === -1
+ ) {
+ return url === directive;
+ }
+ // Transpose into a regular expression.
+ let re = directiveToRegexpMap.get(directive);
+ if ( re === undefined ) {
+ let reStr;
+ if ( directive.startsWith('/') && directive.endsWith('/') ) {
+ reStr = directive.slice(1, -1);
+ } else {
+ reStr = directive.replace(whitelistDirectiveEscape, '\\$&')
+ .replace(whitelistDirectiveEscapeAsterisk, '.*');
+ }
+ re = new RegExp(reStr);
+ directiveToRegexpMap.set(directive, re);
+ }
+ return re.test(url);
+};
+
+const matchBucket = function(url, hostname, bucket, start) {
+ if ( bucket ) {
+ for ( let i = start || 0, n = bucket.length; i < n; i++ ) {
+ if ( matchDirective(url, hostname, bucket[i]) ) {
+ return i;
+ }
+ }
+ }
+ return -1;
+};
+
+/******************************************************************************/
+
+µb.getNetFilteringSwitch = function(url) {
+ const hostname = hostnameFromURI(url);
+ let key = hostname;
+ for (;;) {
+ if ( matchBucket(url, hostname, this.netWhitelist.get(key)) !== -1 ) {
+ return false;
+ }
+ const pos = key.indexOf('.');
+ if ( pos === -1 ) { break; }
+ key = key.slice(pos + 1);
+ }
+ if ( matchBucket(url, hostname, this.netWhitelist.get('//')) !== -1 ) {
+ return false;
+ }
+ return true;
+};
+
+/******************************************************************************/
+
+µb.toggleNetFilteringSwitch = function(url, scope, newState) {
+ const currentState = this.getNetFilteringSwitch(url);
+ if ( newState === undefined ) {
+ newState = !currentState;
+ }
+ if ( newState === currentState ) {
+ return currentState;
+ }
+
+ const netWhitelist = this.netWhitelist;
+ const pos = url.indexOf('#');
+ let targetURL = pos !== -1 ? url.slice(0, pos) : url;
+ const targetHostname = hostnameFromURI(targetURL);
+ let key = targetHostname;
+ let directive = scope === 'page' ? targetURL : targetHostname;
+
+ // Add to directive list
+ if ( newState === false ) {
+ let bucket = netWhitelist.get(key);
+ if ( bucket === undefined ) {
+ bucket = [];
+ netWhitelist.set(key, bucket);
+ }
+ bucket.push(directive);
+ this.saveWhitelist();
+ filteringBehaviorChanged({ hostname: targetHostname });
+ return true;
+ }
+
+ // Remove all directives which cause current URL to be whitelisted
+ for (;;) {
+ const bucket = netWhitelist.get(key);
+ if ( bucket !== undefined ) {
+ let i;
+ for (;;) {
+ i = matchBucket(targetURL, targetHostname, bucket, i);
+ if ( i === -1 ) { break; }
+ directive = bucket.splice(i, 1)[0];
+ if ( isHandcraftedWhitelistDirective(directive) ) {
+ netWhitelist.get('#').push(`# ${directive}`);
+ }
+ }
+ if ( bucket.length === 0 ) {
+ netWhitelist.delete(key);
+ }
+ }
+ const pos = key.indexOf('.');
+ if ( pos === -1 ) { break; }
+ key = key.slice(pos + 1);
+ }
+ const bucket = netWhitelist.get('//');
+ if ( bucket !== undefined ) {
+ let i;
+ for (;;) {
+ i = matchBucket(targetURL, targetHostname, bucket, i);
+ if ( i === -1 ) { break; }
+ directive = bucket.splice(i, 1)[0];
+ if ( isHandcraftedWhitelistDirective(directive) ) {
+ netWhitelist.get('#').push(`# ${directive}`);
+ }
+ }
+ if ( bucket.length === 0 ) {
+ netWhitelist.delete('//');
+ }
+ }
+ this.saveWhitelist();
+ filteringBehaviorChanged({ direction: 1 });
+ return true;
+};
+
+/******************************************************************************/
+
+µb.arrayFromWhitelist = function(whitelist) {
+ const out = new Set();
+ for ( const bucket of whitelist.values() ) {
+ for ( const directive of bucket ) {
+ out.add(directive);
+ }
+ }
+ return Array.from(out).sort((a, b) => a.localeCompare(b));
+};
+
+µb.stringFromWhitelist = function(whitelist) {
+ return this.arrayFromWhitelist(whitelist).join('\n');
+};
+
+/******************************************************************************/
+
+µb.whitelistFromArray = function(lines) {
+ const whitelist = new Map();
+
+ // Comment bucket must always be ready to be used.
+ whitelist.set('#', []);
+
+ // New set of directives, scrap cached data.
+ directiveToRegexpMap.clear();
+
+ for ( let line of lines ) {
+ line = line.trim();
+
+ // https://github.com/gorhill/uBlock/issues/171
+ // Skip empty lines
+ if ( line === '' ) { continue; }
+
+ let key, directive;
+
+ // Don't throw out commented out lines: user might want to fix them
+ if ( line.startsWith('#') ) {
+ key = '#';
+ directive = line;
+ }
+ // Plain hostname
+ else if ( line.indexOf('/') === -1 ) {
+ if ( this.reWhitelistBadHostname.test(line) ) {
+ key = '#';
+ directive = '# ' + line;
+ } else {
+ key = directive = line;
+ }
+ }
+ // Regex-based (ensure it is valid)
+ else if (
+ line.length > 2 &&
+ line.startsWith('/') &&
+ line.endsWith('/')
+ ) {
+ key = '//';
+ directive = line;
+ try {
+ const re = new RegExp(directive.slice(1, -1));
+ directiveToRegexpMap.set(directive, re);
+ } catch(ex) {
+ key = '#';
+ directive = '# ' + line;
+ }
+ }
+ // URL, possibly wildcarded: there MUST be at least one hostname
+ // label (or else it would be just impossible to make an efficient
+ // dict.
+ else {
+ const matches = this.reWhitelistHostnameExtractor.exec(line);
+ if ( !matches || matches.length !== 2 ) {
+ key = '#';
+ directive = '# ' + line;
+ } else {
+ key = matches[1];
+ directive = line;
+ }
+ }
+
+ // https://github.com/gorhill/uBlock/issues/171
+ // Skip empty keys
+ if ( key === '' ) { continue; }
+
+ // Be sure this stays fixed:
+ // https://github.com/chrisaljoudi/uBlock/issues/185
+ let bucket = whitelist.get(key);
+ if ( bucket === undefined ) {
+ bucket = [];
+ whitelist.set(key, bucket);
+ }
+ bucket.push(directive);
+ }
+ return whitelist;
+};
+
+µb.whitelistFromString = function(s) {
+ return this.whitelistFromArray(s.split('\n'));
+};
+
+// https://github.com/gorhill/uBlock/issues/3717
+µb.reWhitelistBadHostname = /[^a-z0-9.\-_\[\]:]/;
+µb.reWhitelistHostnameExtractor = /([a-z0-9.\-_\[\]]+)(?::[\d*]+)?\/(?:[^\x00-\x20\/]|$)[^\x00-\x20]*$/;
+
+/******************************************************************************/
+
+µb.changeUserSettings = function(name, value) {
+ let us = this.userSettings;
+
+ // Return all settings if none specified.
+ if ( name === undefined ) {
+ us = JSON.parse(JSON.stringify(us));
+ us.noCosmeticFiltering = sessionSwitches.evaluate('no-cosmetic-filtering', '*') === 1;
+ us.noLargeMedia = sessionSwitches.evaluate('no-large-media', '*') === 1;
+ us.noRemoteFonts = sessionSwitches.evaluate('no-remote-fonts', '*') === 1;
+ us.noScripting = sessionSwitches.evaluate('no-scripting', '*') === 1;
+ us.noCSPReports = sessionSwitches.evaluate('no-csp-reports', '*') === 1;
+ return us;
+ }
+
+ if ( typeof name !== 'string' || name === '' ) { return; }
+
+ if ( value === undefined ) {
+ return us[name];
+ }
+
+ // Pre-change
+ switch ( name ) {
+ case 'largeMediaSize':
+ if ( typeof value !== 'number' ) {
+ value = parseInt(value, 10) || 0;
+ }
+ value = Math.ceil(Math.max(value, 0));
+ break;
+ default:
+ break;
+ }
+
+ // Change -- but only if the user setting actually exists.
+ const mustSave = us.hasOwnProperty(name) && value !== us[name];
+ if ( mustSave ) {
+ us[name] = value;
+ }
+
+ // Post-change
+ switch ( name ) {
+ case 'advancedUserEnabled':
+ if ( value === true ) {
+ us.popupPanelSections |= 0b11111;
+ }
+ break;
+ case 'autoUpdate':
+ this.scheduleAssetUpdater({ updateDelay: value ? 2000 : 0 });
+ break;
+ case 'cnameUncloakEnabled':
+ if ( vAPI.net.canUncloakCnames === true ) {
+ vAPI.net.setOptions({ cnameUncloakEnabled: value === true });
+ }
+ break;
+ case 'collapseBlocked':
+ if ( value === false ) {
+ cosmeticFilteringEngine.removeFromSelectorCache('*', 'net');
+ }
+ break;
+ case 'contextMenuEnabled':
+ contextMenu.update(null);
+ break;
+ case 'hyperlinkAuditingDisabled':
+ if ( this.privacySettingsSupported ) {
+ vAPI.browserSettings.set({ 'hyperlinkAuditing': !value });
+ }
+ break;
+ case 'noCosmeticFiltering':
+ case 'noLargeMedia':
+ case 'noRemoteFonts':
+ case 'noScripting':
+ case 'noCSPReports':
+ let switchName;
+ switch ( name ) {
+ case 'noCosmeticFiltering':
+ switchName = 'no-cosmetic-filtering'; break;
+ case 'noLargeMedia':
+ switchName = 'no-large-media'; break;
+ case 'noRemoteFonts':
+ switchName = 'no-remote-fonts'; break;
+ case 'noScripting':
+ switchName = 'no-scripting'; break;
+ case 'noCSPReports':
+ switchName = 'no-csp-reports'; break;
+ default:
+ break;
+ }
+ if ( switchName === undefined ) { break; }
+ let switchState = value ? 1 : 0;
+ sessionSwitches.toggle(switchName, '*', switchState);
+ if ( permanentSwitches.toggle(switchName, '*', switchState) ) {
+ this.saveHostnameSwitches();
+ }
+ break;
+ case 'prefetchingDisabled':
+ if ( this.privacySettingsSupported ) {
+ vAPI.browserSettings.set({ 'prefetching': !value });
+ }
+ break;
+ case 'webrtcIPAddressHidden':
+ if ( this.privacySettingsSupported ) {
+ vAPI.browserSettings.set({ 'webrtcIPAddress': !value });
+ }
+ break;
+ default:
+ break;
+ }
+
+ if ( mustSave ) {
+ this.saveUserSettings();
+ }
+};
+
+/******************************************************************************/
+
+// https://www.reddit.com/r/uBlockOrigin/comments/8524cf/my_custom_scriptlets_doesnt_work_what_am_i_doing/
+
+µb.changeHiddenSettings = function(hs) {
+ const mustReloadResources =
+ hs.userResourcesLocation !== this.hiddenSettings.userResourcesLocation;
+ this.hiddenSettings = hs;
+ this.saveHiddenSettings();
+ if ( mustReloadResources ) {
+ redirectEngine.invalidateResourcesSelfie(io);
+ this.loadRedirectResources();
+ }
+ broadcast({ what: 'hiddenSettingsChanged' });
+};
+
+/******************************************************************************/
+
+µb.elementPickerExec = async function(
+ tabId,
+ frameId,
+ targetElement,
+ zap = false,
+) {
+ if ( vAPI.isBehindTheSceneTabId(tabId) ) { return; }
+
+ this.epickerArgs.target = targetElement || '';
+ this.epickerArgs.zap = zap;
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/40
+ // The element picker needs this library
+ if ( zap !== true ) {
+ vAPI.tabs.executeScript(tabId, {
+ file: '/lib/diff/swatinem_diff.js',
+ runAt: 'document_end',
+ });
+ }
+
+ await vAPI.tabs.executeScript(tabId, {
+ file: '/js/scriptlets/epicker.js',
+ frameId,
+ runAt: 'document_end',
+ });
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/168
+ // Force activate the target tab once the element picker has been
+ // injected.
+ vAPI.tabs.select(tabId);
+};
+
+/******************************************************************************/
+
+// https://github.com/gorhill/uBlock/issues/2033
+// Always set own rules, trying to be fancy to avoid setting seemingly
+// (but not really) redundant rules led to this issue.
+
+µb.toggleFirewallRule = function(details) {
+ const { desHostname, requestType, action } = details;
+ let { srcHostname } = details;
+
+ if ( action !== 0 ) {
+ sessionFirewall.setCell(
+ srcHostname,
+ desHostname,
+ requestType,
+ action
+ );
+ } else {
+ sessionFirewall.unsetCell(
+ srcHostname,
+ desHostname,
+ requestType
+ );
+ }
+
+ // https://github.com/chrisaljoudi/uBlock/issues/731#issuecomment-73937469
+ if ( details.persist ) {
+ if ( action !== 0 ) {
+ permanentFirewall.setCell(
+ srcHostname,
+ desHostname,
+ requestType,
+ action
+ );
+ } else {
+ permanentFirewall.unsetCell(
+ srcHostname,
+ desHostname,
+ requestType
+ );
+ }
+ this.savePermanentFirewallRules();
+ }
+
+ // https://github.com/gorhill/uBlock/issues/1662
+ // Flush all cached `net` cosmetic filters if we are dealing with a
+ // collapsible type: any of the cached entries could be a resource on the
+ // target page.
+ if (
+ (srcHostname !== '*') &&
+ (
+ requestType === '*' ||
+ requestType === 'image' ||
+ requestType === '3p' ||
+ requestType === '3p-frame'
+ )
+ ) {
+ srcHostname = '*';
+ }
+
+ // https://github.com/chrisaljoudi/uBlock/issues/420
+ cosmeticFilteringEngine.removeFromSelectorCache(srcHostname, 'net');
+
+ // Flush caches
+ filteringBehaviorChanged({
+ direction: action === 1 ? 1 : 0,
+ hostname: srcHostname,
+ });
+
+ if ( details.tabId === undefined ) { return; }
+
+ if ( requestType.startsWith('3p') ) {
+ this.updateToolbarIcon(details.tabId, 0b100);
+ }
+
+ if ( requestType === '3p' && action === 3 ) {
+ vAPI.tabs.executeScript(details.tabId, {
+ file: '/js/scriptlets/load-3p-css.js',
+ allFrames: true,
+ runAt: 'document_idle',
+ });
+ }
+};
+
+/******************************************************************************/
+
+µb.toggleURLFilteringRule = function(details) {
+ let changed = sessionURLFiltering.setRule(
+ details.context,
+ details.url,
+ details.type,
+ details.action
+ );
+ if ( changed === false ) { return; }
+
+ cosmeticFilteringEngine.removeFromSelectorCache(details.context, 'net');
+
+ if ( details.persist !== true ) { return; }
+
+ changed = permanentURLFiltering.setRule(
+ details.context,
+ details.url,
+ details.type,
+ details.action
+ );
+
+ if ( changed ) {
+ this.savePermanentFirewallRules();
+ }
+};
+
+/******************************************************************************/
+
+µb.toggleHostnameSwitch = function(details) {
+ const newState = typeof details.state === 'boolean'
+ ? details.state
+ : sessionSwitches.evaluateZ(details.name, details.hostname) === false;
+ let changed = sessionSwitches.toggleZ(
+ details.name,
+ details.hostname,
+ !!details.deep,
+ newState
+ );
+ if ( changed === false ) { return; }
+
+ // Take per-switch action if needed
+ switch ( details.name ) {
+ case 'no-scripting':
+ this.updateToolbarIcon(details.tabId, 0b100);
+ break;
+ case 'no-cosmetic-filtering': {
+ const scriptlet = newState ? 'cosmetic-off' : 'cosmetic-on';
+ vAPI.tabs.executeScript(details.tabId, {
+ file: `/js/scriptlets/${scriptlet}.js`,
+ allFrames: true,
+ });
+ break;
+ }
+ case 'no-large-media':
+ const pageStore = this.pageStoreFromTabId(details.tabId);
+ if ( pageStore !== null ) {
+ pageStore.temporarilyAllowLargeMediaElements(!newState);
+ }
+ break;
+ default:
+ break;
+ }
+
+ // Flush caches if needed
+ if ( newState ) {
+ switch ( details.name ) {
+ case 'no-scripting':
+ case 'no-remote-fonts':
+ filteringBehaviorChanged({
+ direction: details.state ? 1 : 0,
+ hostname: details.hostname,
+ });
+ break;
+ default:
+ break;
+ }
+ }
+
+ if ( details.persist !== true ) { return; }
+
+ changed = permanentSwitches.toggleZ(
+ details.name,
+ details.hostname,
+ !!details.deep,
+ newState
+ );
+ if ( changed ) {
+ this.saveHostnameSwitches();
+ }
+};
+
+/******************************************************************************/
+
+µb.blockingModeFromHostname = function(hn) {
+ let bits = 0;
+ if ( sessionSwitches.evaluateZ('no-scripting', hn) ) {
+ bits |= 0b00000010;
+ }
+ if ( this.userSettings.advancedUserEnabled ) {
+ if ( sessionFirewall.evaluateCellZY(hn, '*', '3p') === 1 ) {
+ bits |= 0b00000100;
+ }
+ if ( sessionFirewall.evaluateCellZY(hn, '*', '3p-script') === 1 ) {
+ bits |= 0b00001000;
+ }
+ if ( sessionFirewall.evaluateCellZY(hn, '*', '3p-frame') === 1 ) {
+ bits |= 0b00010000;
+ }
+ }
+ return bits;
+};
+
+{
+ const parse = function() {
+ const s = µb.hiddenSettings.blockingProfiles;
+ const profiles = [];
+ s.split(/\s+/).forEach(s => {
+ let pos = s.indexOf('/');
+ if ( pos === -1 ) {
+ pos = s.length;
+ }
+ const bits = parseInt(s.slice(0, pos), 2);
+ if ( isNaN(bits) ) { return; }
+ const color = s.slice(pos + 1);
+ profiles.push({ bits, color: color !== '' ? color : '#666' });
+ });
+ µb.liveBlockingProfiles = profiles;
+ µb.blockingProfileColorCache.clear();
+ };
+
+ parse();
+
+ onBroadcast(msg => {
+ if ( msg.what !== 'hiddenSettingsChanged' ) { return; }
+ parse();
+ });
+}
+
+/******************************************************************************/
+
+µb.pageURLFromMaybeDocumentBlockedURL = function(pageURL) {
+ if ( pageURL.startsWith(vAPI.getURL('/document-blocked.html?')) ) {
+ try {
+ const url = new URL(pageURL);
+ return JSON.parse(url.searchParams.get('details')).url;
+ } catch(ex) {
+ }
+ }
+ return pageURL;
+};
+
+/******************************************************************************/
diff --git a/src/js/uri-utils.js b/src/js/uri-utils.js
new file mode 100644
index 0000000..273b151
--- /dev/null
+++ b/src/js/uri-utils.js
@@ -0,0 +1,175 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import publicSuffixList from '../lib/publicsuffixlist/publicsuffixlist.js';
+import punycode from '../lib/punycode.js';
+
+/******************************************************************************/
+
+// Originally:
+// https://github.com/gorhill/uBlock/blob/8b5733a58d3acf9fb62815e14699c986bd1c2fdc/src/js/uritools.js
+
+const reHostnameFromCommonURL =
+ /^https:\/\/[0-9a-z._-]+[0-9a-z]\//;
+const reAuthorityFromURI =
+ /^(?:[^:\/?#]+:)?(\/\/[^\/?#]+)/;
+const reHostFromNakedAuthority =
+ /^[0-9a-z._-]+[0-9a-z]$/i;
+const reHostFromAuthority =
+ /^(?:[^@]*@)?([^:]+)(?::\d*)?$/;
+const reIPv6FromAuthority =
+ /^(?:[^@]*@)?(\[[0-9a-f:]+\])(?::\d*)?$/i;
+const reMustNormalizeHostname =
+ /[^0-9a-z._-]/;
+const reOriginFromURI =
+ /^[^:\/?#]+:\/\/[^\/?#]+/;
+const reHostnameFromNetworkURL =
+ /^(?:http|ws|ftp)s?:\/\/([0-9a-z_][0-9a-z._-]*[0-9a-z])(?::\d+)?\//;
+const reIPAddressNaive =
+ /^\d+\.\d+\.\d+\.\d+$|^\[[\da-zA-Z:]+\]$/;
+const reNetworkURI =
+ /^(?:ftps?|https?|wss?):\/\//;
+
+// For performance purpose, as simple tests as possible
+const reIPv4VeryCoarse = /\.\d+$/;
+const reHostnameVeryCoarse = /[g-z_\-]/;
+
+/******************************************************************************/
+
+function domainFromHostname(hostname) {
+ return reIPAddressNaive.test(hostname)
+ ? hostname
+ : publicSuffixList.getDomain(hostname);
+}
+
+function domainFromURI(uri) {
+ if ( !uri ) { return ''; }
+ return domainFromHostname(hostnameFromURI(uri));
+}
+
+function entityFromDomain(domain) {
+ const pos = domain.indexOf('.');
+ return pos !== -1 ? domain.slice(0, pos) + '.*' : '';
+}
+
+function hostnameFromURI(uri) {
+ let match = reHostnameFromCommonURL.exec(uri);
+ if ( match !== null ) { return match[0].slice(8, -1); }
+ match = reAuthorityFromURI.exec(uri);
+ if ( match === null ) { return ''; }
+ const authority = match[1].slice(2);
+ if ( reHostFromNakedAuthority.test(authority) ) {
+ return authority.toLowerCase();
+ }
+ match = reHostFromAuthority.exec(authority);
+ if ( match === null ) {
+ match = reIPv6FromAuthority.exec(authority);
+ if ( match === null ) { return ''; }
+ }
+ let hostname = match[1];
+ while ( hostname.endsWith('.') ) {
+ hostname = hostname.slice(0, -1);
+ }
+ if ( reMustNormalizeHostname.test(hostname) ) {
+ hostname = punycode.toASCII(hostname.toLowerCase());
+ }
+ return hostname;
+}
+
+function hostnameFromNetworkURL(url) {
+ const matches = reHostnameFromNetworkURL.exec(url);
+ return matches !== null ? matches[1] : '';
+}
+
+function originFromURI(uri) {
+ let match = reHostnameFromCommonURL.exec(uri);
+ if ( match !== null ) { return match[0].slice(0, -1); }
+ match = reOriginFromURI.exec(uri);
+ return match !== null ? match[0].toLowerCase() : '';
+}
+
+function isNetworkURI(uri) {
+ return reNetworkURI.test(uri);
+}
+
+/******************************************************************************/
+
+function toBroaderHostname(hostname) {
+ const pos = hostname.indexOf('.');
+ if ( pos !== -1 ) {
+ return hostname.slice(pos + 1);
+ }
+ return hostname !== '*' && hostname !== '' ? '*' : '';
+}
+
+function toBroaderIPv4Address(ipaddress) {
+ if ( ipaddress === '*' || ipaddress === '' ) { return ''; }
+ const pos = ipaddress.lastIndexOf('.');
+ if ( pos === -1 ) { return '*'; }
+ return ipaddress.slice(0, pos);
+}
+
+function toBroaderIPv6Address(ipaddress) {
+ return ipaddress !== '*' && ipaddress !== '' ? '*' : '';
+}
+
+function decomposeHostname(hostname, out) {
+ if ( out.length !== 0 && out[0] === hostname ) {
+ return out;
+ }
+ let broadenFn;
+ if ( reHostnameVeryCoarse.test(hostname) === false ) {
+ if ( reIPv4VeryCoarse.test(hostname) ) {
+ broadenFn = toBroaderIPv4Address;
+ } else if ( hostname.startsWith('[') ) {
+ broadenFn = toBroaderIPv6Address;
+ }
+ }
+ if ( broadenFn === undefined ) {
+ broadenFn = toBroaderHostname;
+ }
+ out[0] = hostname;
+ let i = 1;
+ for (;;) {
+ hostname = broadenFn(hostname);
+ if ( hostname === '' ) { break; }
+ out[i++] = hostname;
+ }
+ out.length = i;
+ return out;
+}
+
+/******************************************************************************/
+
+export {
+ decomposeHostname,
+ domainFromHostname,
+ domainFromURI,
+ entityFromDomain,
+ hostnameFromNetworkURL,
+ hostnameFromURI,
+ isNetworkURI,
+ originFromURI,
+};
diff --git a/src/js/url-net-filtering.js b/src/js/url-net-filtering.js
new file mode 100644
index 0000000..39befc7
--- /dev/null
+++ b/src/js/url-net-filtering.js
@@ -0,0 +1,336 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2015-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import { LineIterator } from './text-utils.js';
+import { decomposeHostname } from './uri-utils.js';
+
+/*******************************************************************************
+
+ The purpose of log filtering is to create ad hoc filtering rules, to
+ diagnose and assist in the creation of custom filters.
+
+ buckets: map of [hostname + type]
+ bucket: array of rule entries, sorted from shorter to longer url
+ rule entry: { url, action }
+
+*******************************************************************************/
+
+const actionToNameMap = {
+ 1: 'block',
+ 2: 'allow',
+ 3: 'noop'
+};
+
+const nameToActionMap = Object.create(null);
+Object.assign(nameToActionMap, {
+ 'block': 1,
+ 'allow': 2,
+ 'noop': 3
+});
+
+const knownInvalidTypes = new Set([
+ 'doc',
+ 'main_frame',
+]);
+
+const intToActionMap = new Map([
+ [ 1, ' block' ],
+ [ 2, ' allow' ],
+ [ 3, ' noop' ]
+]);
+
+const decomposedSource = [];
+
+/******************************************************************************/
+
+class RuleEntry {
+ constructor(url, action) {
+ this.url = url;
+ this.action = action;
+ }
+}
+
+/******************************************************************************/
+
+function indexOfURL(entries, url) {
+ // TODO: binary search -- maybe, depends on common use cases
+ const urlLen = url.length;
+ // URLs must be ordered by increasing length.
+ for ( let i = 0; i < entries.length; i++ ) {
+ const entry = entries[i];
+ if ( entry.url.length > urlLen ) { break; }
+ if ( entry.url === url ) { return i; }
+ }
+ return -1;
+}
+
+/******************************************************************************/
+
+function indexOfMatch(entries, url) {
+ const urlLen = url.length;
+ let i = entries.length;
+ while ( i-- ) {
+ if ( entries[i].url.length <= urlLen ) {
+ break;
+ }
+ }
+ if ( i !== -1 ) {
+ do {
+ if ( url.startsWith(entries[i].url) ) {
+ return i;
+ }
+ } while ( i-- );
+ }
+ return -1;
+}
+
+/******************************************************************************/
+
+function indexFromLength(entries, len) {
+ // TODO: binary search -- maybe, depends on common use cases
+ // URLs must be ordered by increasing length.
+ for ( let i = 0; i < entries.length; i++ ) {
+ if ( entries[i].url.length > len ) { return i; }
+ }
+ return -1;
+}
+
+/******************************************************************************/
+
+function addRuleEntry(entries, url, action) {
+ const entry = new RuleEntry(url, action);
+ const i = indexFromLength(entries, url.length);
+ if ( i === -1 ) {
+ entries.push(entry);
+ } else {
+ entries.splice(i, 0, entry);
+ }
+}
+
+/******************************************************************************/
+
+class DynamicURLRuleFiltering {
+ constructor() {
+ this.reset();
+ }
+
+ reset() {
+ this.rules = new Map();
+ // registers, filled with result of last evaluation
+ this.context = '';
+ this.url = '';
+ this.type = '';
+ this.r = 0;
+ this.changed = false;
+ }
+
+ assign(other) {
+ // Remove rules not in other
+ for ( const key of this.rules.keys() ) {
+ if ( other.rules.has(key) === false ) {
+ this.rules.delete(key);
+ }
+ }
+ // Add/change rules in other
+ for ( const entry of other.rules ) {
+ this.rules.set(entry[0], entry[1].slice());
+ }
+ this.changed = true;
+ }
+
+ setRule(srcHostname, url, type, action) {
+ if ( action === 0 ) {
+ return this.removeRule(srcHostname, url, type);
+ }
+ const bucketKey = srcHostname + ' ' + type;
+ let entries = this.rules.get(bucketKey);
+ if ( entries === undefined ) {
+ entries = [];
+ this.rules.set(bucketKey, entries);
+ }
+ const i = indexOfURL(entries, url);
+ if ( i !== -1 ) {
+ const entry = entries[i];
+ if ( entry.action === action ) { return false; }
+ entry.action = action;
+ } else {
+ addRuleEntry(entries, url, action);
+ }
+ this.changed = true;
+ return true;
+ }
+
+ removeRule(srcHostname, url, type) {
+ const bucketKey = srcHostname + ' ' + type;
+ const entries = this.rules.get(bucketKey);
+ if ( entries === undefined ) { return false; }
+ const i = indexOfURL(entries, url);
+ if ( i === -1 ) { return false; }
+ entries.splice(i, 1);
+ if ( entries.length === 0 ) {
+ this.rules.delete(bucketKey);
+ }
+ this.changed = true;
+ return true;
+ }
+
+ evaluateZ(context, target, type) {
+ this.r = 0;
+ if ( this.rules.size === 0 ) { return 0; }
+ decomposeHostname(context, decomposedSource);
+ for ( const srchn of decomposedSource ) {
+ this.context = srchn;
+ let entries = this.rules.get(`${srchn} ${type}`);
+ if ( entries !== undefined ) {
+ const i = indexOfMatch(entries, target);
+ if ( i !== -1 ) {
+ const entry = entries[i];
+ this.url = entry.url;
+ this.type = type;
+ this.r = entry.action;
+ return this.r;
+ }
+ }
+ entries = this.rules.get(`${srchn} *`);
+ if ( entries !== undefined ) {
+ const i = indexOfMatch(entries, target);
+ if ( i !== -1 ) {
+ const entry = entries[i];
+ this.url = entry.url;
+ this.type = '*';
+ this.r = entry.action;
+ return this.r;
+ }
+ }
+ }
+ return 0;
+ }
+
+ mustAllowCellZ(context, target, type) {
+ return this.evaluateZ(context, target, type).r === 2;
+ }
+
+ mustBlockOrAllow() {
+ return this.r === 1 || this.r === 2;
+ }
+
+ toLogData() {
+ if ( this.r === 0 ) { return; }
+ const { context, url, type } = this;
+ return {
+ source: 'dynamicUrl',
+ result: this.r,
+ rule: [ context, url, type, intToActionMap.get(this.r) ],
+ raw: `${context} ${url} ${type} ${intToActionMap.get(this.r)}`,
+ };
+ }
+
+ copyRules(other, context, urls, type) {
+ let i = urls.length;
+ while ( i-- ) {
+ const url = urls[i];
+ other.evaluateZ(context, url, type);
+ const otherOwn = other.r !== 0 &&
+ other.context === context &&
+ other.url === url &&
+ other.type === type;
+ this.evaluateZ(context, url, type);
+ const thisOwn = this.r !== 0 &&
+ this.context === context &&
+ this.url === url &&
+ this.type === type;
+ if ( otherOwn && !thisOwn || other.r !== this.r ) {
+ this.setRule(context, url, type, other.r);
+ this.changed = true;
+ }
+ if ( !otherOwn && thisOwn ) {
+ this.removeRule(context, url, type);
+ this.changed = true;
+ }
+ }
+ return this.changed;
+ }
+
+ toArray() {
+ const out = [];
+ for ( const [ key, entries ] of this.rules ) {
+ let pos = key.indexOf(' ');
+ const hn = key.slice(0, pos);
+ pos = key.lastIndexOf(' ');
+ const type = key.slice(pos + 1);
+ for ( const { url, action } of entries ) {
+ out.push(`${hn} ${url} ${type} ${actionToNameMap[action]}`);
+ }
+ }
+ return out;
+ }
+
+ toString() {
+ return this.toArray().sort().join('\n');
+ }
+
+ fromString(text) {
+ this.reset();
+ const lineIter = new LineIterator(text);
+ while ( lineIter.eot() === false ) {
+ this.addFromRuleParts(lineIter.next().trim().split(/\s+/));
+ }
+ }
+
+ validateRuleParts(parts) {
+ if ( parts.length !== 4 ) { return; }
+ if ( parts[1].indexOf('://') <= 0 ) { return; }
+ if (
+ /[^a-z_-]/.test(parts[2]) && parts[2] !== '*' ||
+ knownInvalidTypes.has(parts[2])
+ ) {
+ return;
+ }
+ if ( nameToActionMap[parts[3]] === undefined ) { return; }
+ return parts;
+ }
+
+ addFromRuleParts(parts) {
+ if ( this.validateRuleParts(parts) !== undefined ) {
+ this.setRule(parts[0], parts[1], parts[2], nameToActionMap[parts[3]]);
+ return true;
+ }
+ return false;
+ }
+
+ removeFromRuleParts(parts) {
+ if ( this.validateRuleParts(parts) !== undefined ) {
+ this.removeRule(parts[0], parts[1], parts[2]);
+ return true;
+ }
+ return false;
+ }
+}
+
+/******************************************************************************/
+
+export default DynamicURLRuleFiltering;
+
+/******************************************************************************/
diff --git a/src/js/utils.js b/src/js/utils.js
new file mode 100644
index 0000000..e48e963
--- /dev/null
+++ b/src/js/utils.js
@@ -0,0 +1,136 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+import µb from './background.js';
+
+/******************************************************************************/
+
+µb.formatCount = function(count) {
+ if ( typeof count !== 'number' ) { return ''; }
+ const s = `${count}`;
+ if ( count < 1000 ) { return s; }
+ if ( count < 10000 ) {
+ return '>' + s.slice(0,1) + 'k';
+ }
+ if ( count < 100000 ) {
+ return s.slice(0,2) + 'k';
+ }
+ if ( count < 1000000 ) {
+ return s.slice(0,3) + 'k';
+ }
+ return s.slice(0,-6) + 'M';
+};
+
+/******************************************************************************/
+
+µb.dateNowToSensibleString = function() {
+ const now = new Date(Date.now() - (new Date()).getTimezoneOffset() * 60000);
+ return now.toISOString().replace(/\.\d+Z$/, '')
+ .replace(/:/g, '.')
+ .replace('T', '_');
+};
+
+/******************************************************************************/
+
+µb.openNewTab = function(details) {
+ if ( details.url.startsWith('logger-ui.html') ) {
+ if ( details.shiftKey ) {
+ this.changeUserSettings(
+ 'alwaysDetachLogger',
+ !this.userSettings.alwaysDetachLogger
+ );
+ }
+ if ( this.userSettings.alwaysDetachLogger ) {
+ details.popup = this.hiddenSettings.loggerPopupType;
+ const url = new URL(vAPI.getURL(details.url));
+ url.searchParams.set('popup', '1');
+ details.url = url.href;
+ let popupLoggerBox;
+ try {
+ popupLoggerBox = JSON.parse(
+ vAPI.localStorage.getItem('popupLoggerBox')
+ );
+ } catch(ex) {
+ }
+ if ( popupLoggerBox !== undefined ) {
+ details.box = popupLoggerBox;
+ }
+ }
+ }
+ vAPI.tabs.open(details);
+};
+
+/******************************************************************************/
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
+
+µb.escapeRegex = function(s) {
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
+};
+
+/******************************************************************************/
+
+// TODO: properly compare arrays
+
+µb.getModifiedSettings = function(edit, orig = {}) {
+ const out = {};
+ for ( const prop in edit ) {
+ if ( orig.hasOwnProperty(prop) && edit[prop] !== orig[prop] ) {
+ out[prop] = edit[prop];
+ }
+ }
+ return out;
+};
+
+µb.settingValueFromString = function(orig, name, s) {
+ if ( typeof name !== 'string' || typeof s !== 'string' ) { return; }
+ if ( orig.hasOwnProperty(name) === false ) { return; }
+ let r;
+ switch ( typeof orig[name] ) {
+ case 'boolean':
+ if ( s === 'true' ) {
+ r = true;
+ } else if ( s === 'false' ) {
+ r = false;
+ }
+ break;
+ case 'string':
+ r = s.trim();
+ break;
+ case 'number':
+ if ( s.startsWith('0b') ) {
+ r = parseInt(s.slice(2), 2);
+ } else if ( s.startsWith('0x') ) {
+ r = parseInt(s.slice(2), 16);
+ } else {
+ r = parseInt(s, 10);
+ }
+ if ( isNaN(r) ) { r = undefined; }
+ break;
+ default:
+ break;
+ }
+ return r;
+};
diff --git a/src/js/wasm/README.md b/src/js/wasm/README.md
new file mode 100644
index 0000000..32aef07
--- /dev/null
+++ b/src/js/wasm/README.md
@@ -0,0 +1,24 @@
+### For code reviewers
+
+All `wasm` files in that directory where created by compiling the
+corresponding `wat` file using the command (using `hntrie.wat`/`hntrie.wasm`
+as example):
+
+ wat2wasm hntrie.wat -o hntrie.wasm
+
+Assuming:
+
+- The command is executed from within the present directory.
+
+### `wat2wasm` tool
+
+The `wat2wasm` tool can be downloaded from an official WebAssembly project:
+<https://github.com/WebAssembly/wabt/releases>.
+
+### `wat2wasm` tool online
+
+You can also use the following online `wat2wasm` tool:
+<https://webassembly.github.io/wabt/demo/wat2wasm/>.
+
+Just paste the whole content of the `wat` file to compile into the WAT pane.
+Click "Download" button to retrieve the resulting `wasm` file. \ No newline at end of file
diff --git a/src/js/wasm/biditrie.wasm b/src/js/wasm/biditrie.wasm
new file mode 100644
index 0000000..5bfc6b7
--- /dev/null
+++ b/src/js/wasm/biditrie.wasm
Binary files differ
diff --git a/src/js/wasm/biditrie.wat b/src/js/wasm/biditrie.wat
new file mode 100644
index 0000000..a6c80ba
--- /dev/null
+++ b/src/js/wasm/biditrie.wat
@@ -0,0 +1,728 @@
+;;
+;; uBlock Origin - a comprehensive, efficient content blocker
+;; Copyright (C) 2019-present Raymond Hill
+;;
+;; This program is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see {http://www.gnu.org/licenses/}.
+;;
+;; Home: https://github.com/gorhill/uBlock
+;; File: biditrie.wat
+;; Description: WebAssembly code used by src/js/biditrie.js
+;; How to compile: See README.md in this directory.
+
+(module
+;;
+;; module start
+;;
+
+(memory (import "imports" "memory") 1)
+(func $extraHandler (import "imports" "extraHandler") (param i32 i32 i32) (result i32))
+
+;; Trie container
+;;
+;; Memory layout, byte offset:
+;; const HAYSTACK_START = 0;
+;; const HAYSTACK_SIZE = 2048; // i32 / i8
+;; const HAYSTACK_SIZE_SLOT = HAYSTACK_SIZE >>> 2; // 512 / 2048
+;; const TRIE0_SLOT = HAYSTACK_SIZE_SLOT + 1; // 513 / 2052
+;; const TRIE1_SLOT = HAYSTACK_SIZE_SLOT + 2; // 514 / 2056
+;; const CHAR0_SLOT = HAYSTACK_SIZE_SLOT + 3; // 515 / 2060
+;; const CHAR1_SLOT = HAYSTACK_SIZE_SLOT + 4; // 516 / 2064
+;; const RESULT_L_SLOT = HAYSTACK_SIZE_SLOT + 5; // 517 / 2068
+;; const RESULT_R_SLOT = HAYSTACK_SIZE_SLOT + 6; // 518 / 2072
+;; const RESULT_IU_SLOT = HAYSTACK_SIZE_SLOT + 7; // 519 / 2076
+;; const TRIE0_START = HAYSTACK_SIZE_SLOT + 8 << 2; // 2080
+;;
+
+;;
+;; Public functions
+;;
+
+;;
+;; unsigned int matches(icell, ai)
+;;
+;; Test whether the trie at icell matches the haystack content at position ai.
+;;
+(func (export "matches")
+ (param $icell i32) ;; start offset in haystack
+ (param $ai i32) ;; offset in haystack
+ (result i32) ;; result: 0 = no match, 1 = match
+ (local $char0 i32)
+ (local $aR i32)
+ (local $al i32)
+ (local $bl i32)
+ (local $x i32)
+ (local $y i32)
+ ;; trie index is a uint32 offset, need to convert to uint8 offset
+ local.get $icell
+ i32.const 2
+ i32.shl
+ local.set $icell
+ ;; const buf32 = this.buf32;
+ ;; const buf8 = this.buf8;
+ ;; const char0 = buf32[CHAR0_SLOT];
+ i32.const 2060
+ i32.load align=4
+ local.set $char0
+ ;; const aR = buf32[HAYSTACK_SIZE_SLOT];
+ i32.const 2048
+ i32.load align=4
+ local.set $aR
+ ;; let al = ai;
+ local.get $ai
+ local.set $al
+ block $matchFound
+ block $matchNotFound
+ ;; for (;;) {
+ loop $mainLoop
+ ;; x = buf8[al];
+ local.get $al
+ i32.load8_u
+ local.set $x
+ ;; al += 1;
+ local.get $al
+ i32.const 1
+ i32.add
+ local.set $al
+ ;; // find matching segment
+ ;; for (;;) {
+ block $nextSegment loop $findSegment
+ ;; y = buf32[icell+SEGMENT_INFO];
+ local.get $icell
+ i32.load offset=8 align=4
+ local.tee $y
+ ;; bl = char0 + (y & 0x00FFFFFF);
+ i32.const 0x00FFFFFF
+ i32.and
+ local.get $char0
+ i32.add
+ local.tee $bl
+ ;; if ( buf8[bl] === x ) {
+ i32.load8_u
+ local.get $x
+ i32.eq
+ if
+ ;; y = (y >>> 24) - 1;
+ local.get $y
+ i32.const 24
+ i32.shr_u
+ i32.const 1
+ i32.sub
+ local.tee $y
+ ;; if ( n !== 0 ) {
+ if
+ ;; x = al + y;
+ local.get $y
+ local.get $al
+ i32.add
+ local.tee $x
+ ;; if ( x > aR ) { return 0; }
+ local.get $aR
+ i32.gt_u
+ br_if $matchNotFound
+ ;; for (;;) {
+ loop
+ ;; bl += 1;
+ local.get $bl
+ i32.const 1
+ i32.add
+ local.tee $bl
+ ;; if ( buf8[bl] !== buf8[al] ) { return 0; }
+ i32.load8_u
+ local.get $al
+ i32.load8_u
+ i32.ne
+ br_if $matchNotFound
+ ;; al += 1;
+ local.get $al
+ i32.const 1
+ i32.add
+ local.tee $al
+ ;; if ( al === x ) { break; }
+ local.get $x
+ i32.ne
+ br_if 0
+ end
+ ;; }
+ end
+ br $nextSegment
+ end
+ ;; icell = buf32[icell+CELL_OR];
+ local.get $icell
+ i32.load offset=4 align=4
+ i32.const 2
+ i32.shl
+ local.tee $icell
+ ;; if ( icell === 0 ) { return 0; }
+ i32.eqz
+ br_if $matchNotFound
+ br $findSegment
+ ;; }
+ end end
+ ;; // next segment
+ ;; icell = buf32[icell+CELL_AND];
+ local.get $icell
+ i32.load align=4
+ i32.const 2
+ i32.shl
+ local.tee $icell
+ ;; const x = buf32[icell+BCELL_EXTRA];
+ i32.load offset=8 align=4
+ local.tee $x
+ ;; if ( x <= BCELL_EXTRA_MAX ) {
+ i32.const 0x00FFFFFF
+ i32.le_u
+ if
+ ;; if ( x !== 0 && this.matchesExtra(ai, al, x) !== 0 ) {
+ ;; return 1;
+ ;; }
+ local.get $x
+ if
+ local.get $ai
+ local.get $al
+ local.get $x
+ call $matchesExtra
+ br_if $matchFound
+ end
+ ;; x = buf32[icell+BCELL_ALT_AND];
+ local.get $icell
+ i32.load offset=4 align=4
+ i32.const 2
+ i32.shl
+ local.tee $x
+ ;; if ( x !== 0 && this.matchesLeft(x, ai, al) !== 0 ) {
+ if
+ local.get $x
+ local.get $ai
+ local.get $al
+ call $matchesLeft
+ br_if $matchFound
+ ;; }
+ end
+ ;; icell = buf32[icell+BCELL_NEXT_AND];
+ local.get $icell
+ i32.load align=4
+ i32.const 2
+ i32.shl
+ local.tee $icell
+ ;; if ( icell === 0 ) { return 0; }
+ i32.eqz
+ br_if $matchNotFound
+ ;; }
+ end
+ ;; if ( al === aR ) { return 0; }
+ local.get $al
+ local.get $aR
+ i32.ne
+ br_if $mainLoop
+ ;; }
+ end ;; $mainLoop
+ end ;; $matchNotFound
+ i32.const 0
+ return
+ end ;; $matchFound
+ i32.const 1
+ return
+)
+
+;;
+;; unsigned int matchesLeft(icell, ar, r)
+;;
+;; Test whether the trie at icell matches the haystack content at position ai.
+;;
+(func $matchesLeft
+ (param $icell i32) ;; start offset in haystack
+ (param $ar i32) ;; offset of where to start in haystack
+ (param $r i32) ;; right bound of match so far
+ (result i32) ;; result: 0 = no match, 1 = match
+ (local $char0 i32)
+ (local $bl i32)
+ (local $br i32)
+ (local $x i32)
+ (local $y i32)
+ ;; const buf32 = this.buf32;
+ ;; const buf8 = this.buf8;
+ ;; const char0 = buf32[CHAR0_SLOT];
+ i32.const 2060
+ i32.load align=4
+ local.set $char0
+ block $matchFound
+ block $matchNotFound
+ ;; for (;;) {
+ loop $mainLoop
+ ;; if ( ar === 0 ) { return 0; }
+ local.get $ar
+ i32.eqz
+ br_if $matchNotFound
+ ;; ar -= 1;
+ local.get $ar
+ i32.const 1
+ i32.sub
+ local.tee $ar
+ ;; x = buf8[ar];
+ i32.load8_u
+ local.set $x
+ ;; // find matching segment
+ ;; for (;;) {
+ block $nextSegment loop $findSegment
+ ;; y = buf32[icell+SEGMENT_INFO];
+ local.get $icell
+ i32.load offset=8 align=4
+ local.tee $y
+ ;; br = char0 + (y & 0x00FFFFFF);
+ i32.const 0x00FFFFFF
+ i32.and
+ local.get $char0
+ i32.add
+ local.tee $br
+ ;; y = (y >>> 24) - 1;
+ local.get $y
+ i32.const 24
+ i32.shr_u
+ i32.const 1
+ i32.sub
+ local.tee $y
+ ;; br += y;
+ i32.add
+ local.tee $br
+ ;; if ( buf8[br] === x ) {
+ i32.load8_u
+ local.get $x
+ i32.eq
+ if
+ ;; // all characters in segment must match
+ ;; if ( y !== 0 ) {
+ local.get $y
+ if
+ ;; x = ar - y;
+ local.get $ar
+ local.get $y
+ i32.sub
+ local.tee $x
+ ;; if ( x < 0 ) { return 0; }
+ i32.const 0
+ i32.lt_s
+ br_if $matchNotFound
+ ;; for (;;) {
+ loop
+ ;; ar -= 1; br -= 1;
+ ;; if ( buf8[ar] !== buf8[br] ) { return 0; }
+ local.get $ar
+ i32.const 1
+ i32.sub
+ local.tee $ar
+ i32.load8_u
+ local.get $br
+ i32.const 1
+ i32.sub
+ local.tee $br
+ i32.load8_u
+ i32.ne
+ br_if $matchNotFound
+ ;; if ( ar === x ) { break; }
+ local.get $ar
+ local.get $x
+ i32.ne
+ br_if 0
+ end
+ ;; }
+ end
+ br $nextSegment
+ end
+ ;; icell = buf32[icell+CELL_OR];
+ local.get $icell
+ i32.load offset=4 align=4
+ i32.const 2
+ i32.shl
+ local.tee $icell
+ ;; if ( icell === 0 ) { return 0; }
+ i32.eqz
+ br_if $matchNotFound
+ br $findSegment
+ ;; }
+ end end
+ ;; // next segment
+ ;; icell = buf32[icell+CELL_AND];
+ local.get $icell
+ i32.load align=4
+ i32.const 2
+ i32.shl
+ local.tee $icell
+ ;; const x = buf32[icell+BCELL_EXTRA];
+ i32.load offset=8 align=4
+ local.tee $x
+ ;; if ( x <= BCELL_EXTRA_MAX ) {
+ i32.const 0x00FFFFFF
+ i32.le_u
+ if
+ ;; if ( x !== 0 && this.matchesExtra(ar, r, x) !== 0 ) {
+ ;; return 1;
+ ;; }
+ local.get $x
+ if
+ local.get $ar
+ local.get $r
+ local.get $x
+ call $matchesExtra
+ br_if $matchFound
+ end
+ ;; icell = buf32[icell+BCELL_NEXT_AND];
+ local.get $icell
+ i32.load align=4
+ i32.const 2
+ i32.shl
+ local.tee $icell
+ ;; if ( icell === 0 ) { return 0; }
+ i32.eqz
+ br_if $matchNotFound
+ ;; }
+ end
+ br $mainLoop
+ ;; }
+ end ;; $mainLoop
+ end ;; $matchNotFound
+ i32.const 0
+ return
+ end ;; $matchFound
+ i32.const 1
+ return
+)
+
+;;
+;; int matchExtra(l, r, ix)
+;;
+;; Test whether extra handler returns a match.
+;;
+(func $matchesExtra
+ (param $l i32) ;; left bound of match so far
+ (param $r i32) ;; right bound of match so far
+ (param $ix i32) ;; extra token
+ (result i32) ;; result: 0 = no match, 1 = match
+ (local $iu i32) ;; filter unit
+ block $fail
+ block $succeed
+ ;; if ( ix !== 1 ) {
+ ;; const iu = this.extraHandler(l, r, ix);
+ ;; if ( iu === 0 ) { return 0; }
+ local.get $ix
+ i32.const 1
+ i32.ne
+ if
+ local.get $l
+ local.get $r
+ local.get $ix
+ call $extraHandler
+ local.tee $iu
+ i32.eqz
+ br_if $fail
+ ;; } else {
+ ;; iu = -1;
+ else
+ i32.const -1
+ local.set $iu
+ ;; }
+ end
+ ;; this.buf32[RESULT_IU_SLOT] = iu;
+ i32.const 2076
+ local.get $iu
+ i32.store align=4
+ ;; this.buf32[RESULT_L_SLOT] = l;
+ i32.const 2068
+ local.get $l
+ i32.store align=4
+ ;; this.buf32[RESULT_R_SLOT] = r;
+ i32.const 2072
+ local.get $r
+ i32.store align=4
+ end ;; $succeed
+ i32.const 1
+ return
+ end ;; $fail
+ i32.const 0
+)
+
+;;
+;; unsigned int startsWith(haystackLeft, haystackRight, needleLeft, needleLen)
+;;
+;; Test whether the string at needleOffset and of length needleLen matches
+;; the haystack at offset haystackOffset.
+;;
+(func (export "startsWith")
+ (param $haystackLeft i32) ;; start offset in haystack
+ (param $haystackRight i32) ;; end offset in haystack
+ (param $needleLeft i32) ;; start of needle in character buffer
+ (param $needleLen i32) ;; number of characters to match
+ (result i32) ;; result: 0 = no match, 1 = match
+ (local $needleRight i32)
+ block $fail
+ block $succeed
+ ;;
+ ;; if ( haystackLeft < 0 || (haystackLeft + needleLen) > haystackRight ) {
+ ;; return 0;
+ ;; }
+ local.get $haystackLeft
+ i32.const 0
+ i32.lt_s
+ br_if $fail
+ local.get $haystackLeft
+ local.get $needleLen
+ i32.add
+ local.get $haystackRight
+ i32.gt_u
+ br_if $fail
+ ;; const charCodes = this.buf8;
+ ;; needleLeft += this.buf32[CHAR0_SLOT];
+ local.get $needleLeft
+ i32.const 2060 ;; CHAR0_SLOT memory address
+ i32.load align=4 ;; CHAR0 memory address
+ i32.add ;; needle memory address
+ local.tee $needleLeft
+ ;; const needleRight = needleLeft + needleLen;
+ local.get $needleLen
+ i32.add
+ local.set $needleRight
+ ;; while ( charCodes[haystackLeft] === charCodes[needleLeft] ) {
+ loop $compare
+ local.get $haystackLeft
+ i32.load8_u
+ local.get $needleLeft
+ i32.load8_u
+ i32.ne
+ br_if $fail
+ ;; needleLeft += 1;
+ local.get $needleLeft
+ i32.const 1
+ i32.add
+ local.tee $needleLeft
+ ;; if ( needleLeft === needleRight ) { return 1; }
+ local.get $needleRight
+ i32.eq
+ br_if $succeed
+ ;; haystackLeft += 1;
+ i32.const 1
+ local.get $haystackLeft
+ i32.add
+ local.set $haystackLeft
+ br $compare
+ end
+ ;; }
+ ;; return 1;
+ end ;; $succeed
+ i32.const 1
+ return
+ ;; return 0;
+ end ;; $fail
+ i32.const 0
+)
+
+;;
+;; int indexOf(haystackLeft, haystackEnd, needleLeft, needleLen)
+;;
+;; Test whether the string at needleOffset and of length needleLen is found in
+;; the haystack at or to the left of haystackLeft, but not farther than
+;; haystackEnd.
+;;
+(func (export "indexOf")
+ (param $haystackLeft i32) ;; start offset in haystack
+ (param $haystackEnd i32) ;; end offset in haystack
+ (param $needleLeft i32) ;; start of needle in character buffer
+ (param $needleLen i32) ;; number of characters to match
+ (result i32) ;; result: index of match, -1 = no match
+ (local $needleRight i32)
+ (local $i i32)
+ (local $j i32)
+ (local $c0 i32)
+ block $fail
+ block $succeed
+ ;; if ( needleLen === 0 ) { return haystackLeft; }
+ local.get $needleLen
+ i32.eqz
+ br_if $succeed
+ ;; haystackEnd -= needleLen;
+ local.get $haystackEnd
+ local.get $needleLen
+ i32.sub
+ local.tee $haystackEnd
+ ;; if ( haystackEnd < haystackLeft ) { return -1; }
+ local.get $haystackLeft
+ i32.lt_s
+ br_if $fail
+ ;; needleLeft += this.buf32[CHAR0_SLOT];
+ local.get $needleLeft
+ i32.const 2060 ;; CHAR0_SLOT memory address
+ i32.load align=4 ;; CHAR0 memory address
+ i32.add ;; needle memory address
+ local.tee $needleLeft
+ ;; const needleRight = needleLeft + needleLen;
+ local.get $needleLen
+ i32.add
+ local.set $needleRight
+ ;; const charCodes = this.buf8;
+ ;; for (;;) {
+ loop $mainLoop
+ ;; let i = haystackLeft;
+ ;; let j = needleLeft;
+ local.get $haystackLeft
+ local.set $i
+ local.get $needleLeft
+ local.set $j
+ ;; while ( charCodes[i] === charCodes[j] ) {
+ block $breakMatchChars loop $matchChars
+ local.get $i
+ i32.load8_u
+ local.get $j
+ i32.load8_u
+ i32.ne
+ br_if $breakMatchChars
+ ;; j += 1;
+ local.get $j
+ i32.const 1
+ i32.add
+ local.tee $j
+ ;; if ( j === needleRight ) { return haystackLeft; }
+ local.get $needleRight
+ i32.eq
+ br_if $succeed
+ ;; i += 1;
+ local.get $i
+ i32.const 1
+ i32.add
+ local.set $i
+ br $matchChars
+ ;; }
+ end end
+ ;; haystackLeft += 1;
+ local.get $haystackLeft
+ i32.const 1
+ i32.add
+ local.tee $haystackLeft
+ ;; if ( haystackLeft > haystackEnd ) { break; }
+ local.get $haystackEnd
+ i32.gt_u
+ br_if $fail
+ br $mainLoop
+ ;; }
+ end
+ end ;; $succeed
+ local.get $haystackLeft
+ return
+ end ;; $fail
+ ;; return -1;
+ i32.const -1
+)
+
+;;
+;; int lastIndexOf(haystackBeg, haystackEnd, needleLeft, needleLen)
+;;
+;; Test whether the string at needleOffset and of length needleLen is found in
+;; the haystack at or to the right of haystackBeg, but not farther than
+;; haystackEnd.
+;;
+(func (export "lastIndexOf")
+ (param $haystackBeg i32) ;; start offset in haystack
+ (param $haystackEnd i32) ;; end offset in haystack
+ (param $needleLeft i32) ;; start of needle in character buffer
+ (param $needleLen i32) ;; number of characters to match
+ (result i32) ;; result: index of match, -1 = no match
+ (local $haystackLeft i32)
+ (local $needleRight i32)
+ (local $i i32)
+ (local $j i32)
+ (local $c0 i32)
+ ;; if ( needleLen === 0 ) { return haystackBeg; }
+ local.get $needleLen
+ i32.eqz
+ if
+ local.get $haystackBeg
+ return
+ end
+ block $fail
+ block $succeed
+ ;; let haystackLeft = haystackEnd - needleLen;
+ local.get $haystackEnd
+ local.get $needleLen
+ i32.sub
+ local.tee $haystackLeft
+ ;; if ( haystackLeft < haystackBeg ) { return -1; }
+ local.get $haystackBeg
+ i32.lt_s
+ br_if $fail
+ ;; needleLeft += this.buf32[CHAR0_SLOT];
+ local.get $needleLeft
+ i32.const 2060 ;; CHAR0_SLOT memory address
+ i32.load align=4 ;; CHAR0 memory address
+ i32.add ;; needle memory address
+ local.tee $needleLeft
+ ;; const needleRight = needleLeft + needleLen;
+ local.get $needleLen
+ i32.add
+ local.set $needleRight
+ ;; const charCodes = this.buf8;
+ ;; for (;;) {
+ loop $mainLoop
+ ;; let i = haystackLeft;
+ ;; let j = needleLeft;
+ local.get $haystackLeft
+ local.set $i
+ local.get $needleLeft
+ local.set $j
+ ;; while ( charCodes[i] === charCodes[j] ) {
+ block $breakMatchChars loop $matchChars
+ local.get $i
+ i32.load8_u
+ local.get $j
+ i32.load8_u
+ i32.ne
+ br_if $breakMatchChars
+ ;; j += 1;
+ local.get $j
+ i32.const 1
+ i32.add
+ local.tee $j
+ ;; if ( j === needleRight ) { return haystackLeft; }
+ local.get $needleRight
+ i32.eq
+ br_if $succeed
+ ;; i += 1;
+ local.get $i
+ i32.const 1
+ i32.add
+ local.set $i
+ br $matchChars
+ ;; }
+ end end
+ ;; if ( haystackLeft === haystackBeg ) { break; }
+ ;; haystackLeft -= 1;
+ local.get $haystackLeft
+ local.get $haystackBeg
+ i32.eq
+ br_if $fail
+ local.get $haystackLeft
+ i32.const 1
+ i32.sub
+ local.set $haystackLeft
+ br $mainLoop
+ ;; }
+ end
+ end ;; $succeed
+ local.get $haystackLeft
+ return
+ end ;; $fail
+ ;; return -1;
+ i32.const -1
+)
+
+;;
+;; module end
+;;
+)
diff --git a/src/js/wasm/hntrie.wasm b/src/js/wasm/hntrie.wasm
new file mode 100644
index 0000000..9067f42
--- /dev/null
+++ b/src/js/wasm/hntrie.wasm
Binary files differ
diff --git a/src/js/wasm/hntrie.wat b/src/js/wasm/hntrie.wat
new file mode 100644
index 0000000..666c44e
--- /dev/null
+++ b/src/js/wasm/hntrie.wat
@@ -0,0 +1,724 @@
+;;
+;; uBlock Origin - a comprehensive, efficient content blocker
+;; Copyright (C) 2018-present Raymond Hill
+;;
+;; This program is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see {http://www.gnu.org/licenses/}.
+;;
+;; Home: https://github.com/gorhill/uBlock
+;; File: hntrie.wat
+;; Description: WebAssembly code used by src/js/hntrie.js
+;; How to compile: See README.md in this directory.
+
+(module
+;;
+;; module start
+;;
+
+(func $growBuf (import "imports" "growBuf"))
+(memory (import "imports" "memory") 1)
+
+;; Trie container
+;;
+;; Memory layout, byte offset:
+;; 0-254: needle being processed
+;; 255: length of needle
+;; 256-259: offset to start of trie data section (=> trie0)
+;; 260-263: offset to end of trie data section (=> trie1)
+;; 264-267: offset to start of character data section (=> char0)
+;; 268-271: offset to end of character data section (=> char1)
+;; 272: start of trie data section
+;;
+
+;;
+;; Public functions
+;;
+
+;;
+;; unsigned int matches(icell)
+;;
+;; Test whether the currently set needle matches the trie at specified trie
+;; offset.
+;;
+(func (export "matches")
+ (param $iroot i32) ;; offset to root cell of the trie
+ (result i32) ;; result = match index, -1 = miss
+ (local $icell i32) ;; offset to the current cell
+ (local $char0 i32) ;; offset to first character data
+ (local $ineedle i32) ;; current needle offset
+ (local $c i32)
+ (local $v i32)
+ (local $n i32)
+ (local $i0 i32)
+ (local $i1 i32)
+ ;;
+ i32.const 264 ;; start of char section is stored at addr 264
+ i32.load
+ local.set $char0
+ ;; let ineedle = this.buf[255];
+ i32.const 255 ;; addr of needle is stored at addr 255
+ i32.load8_u
+ local.set $ineedle
+ ;; let icell = this.buf32[iroot+0];
+ local.get $iroot
+ i32.const 2
+ i32.shl
+ i32.load
+ i32.const 2
+ i32.shl
+ local.tee $icell
+ ;; if ( icell === 0 ) { return -1; }
+ i32.eqz
+ if
+ i32.const -1
+ return
+ end
+ ;; for (;;) {
+ block $noSegment loop $nextSegment
+ ;; if ( ineedle === 0 ) { return -1; }
+ local.get $ineedle
+ i32.eqz
+ if
+ i32.const -1
+ return
+ end
+ ;; ineedle -= 1;
+ local.get $ineedle
+ i32.const -1
+ i32.add
+ local.tee $ineedle
+ ;; let c = this.buf[ineedle];
+ i32.load8_u
+ local.set $c
+ ;; for (;;) {
+ block $foundSegment loop $findSegment
+ ;; v = this.buf32[icell+2];
+ local.get $icell
+ i32.load offset=8
+ local.tee $v
+ ;; i0 = char0 + (v >>> 8);
+ i32.const 8
+ i32.shr_u
+ local.get $char0
+ i32.add
+ local.tee $i0
+ ;; if ( this.buf[i0] === c ) { break; }
+ i32.load8_u
+ local.get $c
+ i32.eq
+ br_if $foundSegment
+ ;; icell = this.buf32[icell+0];
+ local.get $icell
+ i32.load
+ i32.const 2
+ i32.shl
+ local.tee $icell
+ i32.eqz
+ if
+ i32.const -1
+ return
+ end
+ br 0
+ end end
+ ;; let n = v & 0x7F;
+ local.get $v
+ i32.const 0x7F
+ i32.and
+ local.tee $n
+ ;; if ( n > 1 ) {
+ i32.const 1
+ i32.gt_u
+ if
+ ;; n -= 1;
+ local.get $n
+ i32.const -1
+ i32.add
+ local.tee $n
+ ;; if ( n > ineedle ) { return -1; }
+ local.get $ineedle
+ i32.gt_u
+ if
+ i32.const -1
+ return
+ end
+ local.get $i0
+ i32.const 1
+ i32.add
+ local.tee $i0
+ ;; const i1 = i0 + n;
+ local.get $n
+ i32.add
+ local.set $i1
+ ;; do {
+ loop
+ ;; ineedle -= 1;
+ local.get $ineedle
+ i32.const -1
+ i32.add
+ local.tee $ineedle
+ ;; if ( this.buf[i0] !== this.buf[ineedle] ) { return -1; }
+ i32.load8_u
+ local.get $i0
+ i32.load8_u
+ i32.ne
+ if
+ i32.const -1
+ return
+ end
+ ;; i0 += 1;
+ local.get $i0
+ i32.const 1
+ i32.add
+ local.tee $i0
+ ;; } while ( i0 < i1 );
+ local.get $i1
+ i32.lt_u
+ br_if 0
+ end
+ end
+ ;; if ( (v & 0x80) !== 0 ) {
+ local.get $v
+ i32.const 0x80
+ i32.and
+ if
+ ;; if ( ineedle === 0 || buf8[ineedle-1] === 0x2E /* '.' */ ) {
+ ;; return ineedle;
+ ;; }
+ local.get $ineedle
+ i32.eqz
+ if
+ i32.const 0
+ return
+ end
+ local.get $ineedle
+ i32.const -1
+ i32.add
+ i32.load8_u
+ i32.const 0x2E
+ i32.eq
+ if
+ local.get $ineedle
+ return
+ end
+ end
+ ;; icell = this.buf32[icell+1];
+ local.get $icell
+ i32.load offset=4
+ i32.const 2
+ i32.shl
+ local.tee $icell
+ ;; if ( icell === 0 ) { break; }
+ br_if 0
+ end end
+ ;; return -1;
+ i32.const -1
+)
+
+;;
+;; unsigned int add(icell)
+;;
+;; Add a new hostname to a trie which root cell is passed as argument.
+;;
+(func (export "add")
+ (param $iroot i32) ;; index of root cell of the trie
+ (result i32) ;; result: 0 not added, 1 = added
+ (local $icell i32) ;; index of current cell in the trie
+ (local $lhnchar i32) ;; number of characters left to process in hostname
+ (local $char0 i32) ;; offset to start of character data section
+ (local $v i32) ;; integer value describing a segment
+ (local $isegchar0 i32) ;; offset to start of current segment's character data
+ (local $isegchar i32)
+ (local $lsegchar i32) ;; number of character in current segment
+ (local $inext i32) ;; index of next cell to process
+ (local $boundaryBit i32) ;; the boundary bit state of the current cell
+ ;;
+ ;; let lhnchar = this.buf[255];
+ i32.const 255
+ i32.load8_u
+ local.tee $lhnchar
+ ;; if ( lhnchar === 0 ) { return 0; }
+ i32.eqz
+ if
+ i32.const 0
+ return
+ end
+ ;; if (
+ ;; (this.buf32[HNBIGTRIE_CHAR0_SLOT] - this.buf32[HNBIGTRIE_TRIE1_SLOT]) < 24 ||
+ ;; (this.buf.length - this.buf32[HNBIGTRIE_CHAR1_SLOT]) < 256
+ ;; ) {
+ ;; this.growBuf();
+ ;; }
+ i32.const 264
+ i32.load
+ i32.const 260
+ i32.load
+ i32.sub
+ i32.const 24
+ i32.lt_u
+ if
+ call $growBuf
+ else
+ memory.size
+ i32.const 16
+ i32.shl
+ i32.const 268
+ i32.load
+ i32.sub
+ i32.const 256
+ i32.lt_u
+ if
+ call $growBuf
+ end
+ end
+ ;; let icell = this.buf32[iroot+0];
+ local.get $iroot
+ i32.const 2
+ i32.shl
+ local.tee $iroot
+ i32.load
+ i32.const 2
+ i32.shl
+ local.tee $icell
+ ;; if ( this.buf32[icell+2] === 0 ) {
+ i32.eqz
+ if
+ ;; this.buf32[iroot+0] = this.addLeafCell(lhnchar);
+ ;; return 1;
+ local.get $iroot
+ local.get $lhnchar
+ call $addLeafCell
+ i32.store
+ i32.const 1
+ return
+ end
+ ;; const char0 = this.buf32[HNBIGTRIE_CHAR0_SLOT];
+ i32.const 264
+ i32.load
+ local.set $char0
+ ;; for (;;) {
+ loop $nextSegment
+ ;; const v = this.buf32[icell+2];
+ local.get $icell
+ i32.load offset=8
+ local.tee $v
+ ;; let isegchar0 = char0 + (v >>> 8);
+ i32.const 8
+ i32.shr_u
+ local.get $char0
+ i32.add
+ local.tee $isegchar0
+ ;; if ( this.buf[isegchar0] !== this.buf[lhnchar-1] ) {
+ i32.load8_u
+ local.get $lhnchar
+ i32.const -1
+ i32.add
+ i32.load8_u
+ i32.ne
+ if
+ ;; inext = this.buf32[icell+0];
+ local.get $icell
+ i32.load
+ local.tee $inext
+ ;; if ( inext === 0 ) {
+ i32.eqz
+ if
+ ;; this.buf32[icell+0] = this.addLeafCell(lhnchar);
+ local.get $icell
+ local.get $lhnchar
+ call $addLeafCell
+ i32.store
+ ;; return 1;
+ i32.const 1
+ return
+ end
+ ;; icell = inext;
+ local.get $inext
+ i32.const 2
+ i32.shl
+ local.set $icell
+ br $nextSegment
+ end
+ ;; let isegchar = 1;
+ i32.const 1
+ local.set $isegchar
+ ;; lhnchar -= 1;
+ local.get $lhnchar
+ i32.const -1
+ i32.add
+ local.set $lhnchar
+ ;; const lsegchar = v & 0x7F;
+ local.get $v
+ i32.const 0x7F
+ i32.and
+ local.tee $lsegchar
+ ;; if ( lsegchar !== 1 ) {
+ i32.const 1
+ i32.ne
+ if
+ ;; for (;;) {
+ block $mismatch loop
+ ;; if ( isegchar === lsegchar ) { break; }
+ local.get $isegchar
+ local.get $lsegchar
+ i32.eq
+ br_if $mismatch
+ local.get $lhnchar
+ i32.eqz
+ br_if $mismatch
+ ;; if ( this.buf[isegchar0+isegchar] !== this.buf[lhnchar-1] ) { break; }
+ local.get $isegchar0
+ local.get $isegchar
+ i32.add
+ i32.load8_u
+ local.get $lhnchar
+ i32.const -1
+ i32.add
+ i32.load8_u
+ i32.ne
+ br_if $mismatch
+ ;; isegchar += 1;
+ local.get $isegchar
+ i32.const 1
+ i32.add
+ local.set $isegchar
+ ;; lhnchar -= 1;
+ local.get $lhnchar
+ i32.const -1
+ i32.add
+ local.set $lhnchar
+ br 0
+ end end
+ end
+ ;; const boundaryBit = v & 0x80;
+ local.get $v
+ i32.const 0x80
+ i32.and
+ local.set $boundaryBit
+ ;; if ( isegchar === lsegchar ) {
+ local.get $isegchar
+ local.get $lsegchar
+ i32.eq
+ if
+ ;; if ( lhnchar === 0 ) {
+ local.get $lhnchar
+ i32.eqz
+ if
+ ;; if ( boundaryBit !== 0 ) { return 0; }
+ local.get $boundaryBit
+ if
+ i32.const 0
+ return
+ end
+ ;; this.buf32[icell+2] = v | 0x80;
+ local.get $icell
+ local.get $v
+ i32.const 0x80
+ i32.or
+ i32.store offset=8
+ else
+ ;; if ( boundaryBit !== 0 ) {
+ local.get $boundaryBit
+ if
+ ;; if ( this.buf[lhnchar-1] === 0x2E /* '.' */ ) { return -1; }
+ local.get $lhnchar
+ i32.const -1
+ i32.add
+ i32.load8_u
+ i32.const 0x2E
+ i32.eq
+ if
+ i32.const -1
+ return
+ end
+ end
+ ;; inext = this.buf32[icell+1];
+ local.get $icell
+ i32.load offset=4
+ local.tee $inext
+ ;; if ( inext !== 0 ) {
+ if
+ ;; icell = inext;
+ local.get $inext
+ i32.const 2
+ i32.shl
+ local.set $icell
+ ;; continue;
+ br $nextSegment
+ end
+ ;; this.buf32[icell+1] = this.addLeafCell(lhnchar);
+ local.get $icell
+ local.get $lhnchar
+ call $addLeafCell
+ i32.store offset=4
+ end
+ else
+ ;; isegchar0 -= char0;
+ local.get $icell
+ local.get $isegchar0
+ local.get $char0
+ i32.sub
+ local.tee $isegchar0
+ ;; this.buf32[icell+2] = isegchar0 << 8 | isegchar;
+ i32.const 8
+ i32.shl
+ local.get $isegchar
+ i32.or
+ i32.store offset=8
+ ;; inext = this.addCell(
+ ;; 0,
+ ;; this.buf32[icell+1],
+ ;; isegchar0 + isegchar << 8 | boundaryBit | lsegchar - isegchar
+ ;; );
+ local.get $icell
+ i32.const 0
+ local.get $icell
+ i32.load offset=4
+ local.get $isegchar0
+ local.get $isegchar
+ i32.add
+ i32.const 8
+ i32.shl
+ local.get $boundaryBit
+ i32.or
+ local.get $lsegchar
+ local.get $isegchar
+ i32.sub
+ i32.or
+ call $addCell
+ local.tee $inext
+ ;; this.buf32[icell+1] = inext;
+ i32.store offset=4
+ ;; if ( lhnchar !== 0 ) {
+ local.get $lhnchar
+ if
+ ;; this.buf32[inext+0] = this.addLeafCell(lhnchar);
+ local.get $inext
+ i32.const 2
+ i32.shl
+ local.get $lhnchar
+ call $addLeafCell
+ i32.store
+ else
+ ;; this.buf32[icell+2] |= 0x80;
+ local.get $icell
+ local.get $icell
+ i32.load offset=8
+ i32.const 0x80
+ i32.or
+ i32.store offset=8
+ end
+ end
+ ;; return 1;
+ i32.const 1
+ return
+ end
+ ;;
+ i32.const 1
+)
+
+;;
+;; Private functions
+;;
+
+;;
+;; unsigned int addCell(idown, iright, v)
+;;
+;; Add a new cell, return cell index.
+;;
+(func $addCell
+ (param $idown i32)
+ (param $iright i32)
+ (param $v i32)
+ (result i32) ;; result: index of added cell
+ (local $icell i32)
+ ;;
+ ;; let icell = this.buf32[HNBIGTRIE_TRIE1_SLOT];
+ ;; this.buf32[HNBIGTRIE_TRIE1_SLOT] = icell + 12;
+ i32.const 260
+ i32.const 260
+ i32.load
+ local.tee $icell
+ i32.const 12
+ i32.add
+ i32.store
+ ;; this.buf32[icell+0] = idown;
+ local.get $icell
+ local.get $idown
+ i32.store
+ ;; this.buf32[icell+1] = iright;
+ local.get $icell
+ local.get $iright
+ i32.store offset=4
+ ;; this.buf32[icell+2] = v;
+ local.get $icell
+ local.get $v
+ i32.store offset=8
+ ;; return icell;
+ local.get $icell
+ i32.const 2
+ i32.shr_u
+)
+
+;;
+;; unsigned int addLeafCell(lsegchar)
+;;
+;; Add a new cell, return cell index.
+;;
+(func $addLeafCell
+ (param $lsegchar i32)
+ (result i32) ;; result: index of added cell
+ (local $r i32)
+ (local $i i32)
+ ;; const r = this.buf32[TRIE1_SLOT] >>> 2;
+ i32.const 260
+ i32.load
+ local.tee $r
+ ;; let i = r;
+ local.set $i
+ ;; while ( lsegchar > 127 ) {
+ block $lastSegment loop
+ local.get $lsegchar
+ i32.const 127
+ i32.le_u
+ br_if $lastSegment
+ ;; this.buf32[i+0] = 0;
+ local.get $i
+ i32.const 0
+ i32.store
+ ;; this.buf32[i+1] = i + 3;
+ local.get $i
+ local.get $i
+ i32.const 12
+ i32.add
+ i32.const 2
+ i32.shr_u
+ i32.store offset=4
+ ;; this.buf32[i+2] = this.addSegment(lsegchar, lsegchar - 127);
+ local.get $i
+ local.get $lsegchar
+ local.get $lsegchar
+ i32.const 127
+ i32.sub
+ call $addSegment
+ i32.store offset=8
+ ;; lsegchar -= 127;
+ local.get $lsegchar
+ i32.const 127
+ i32.sub
+ local.set $lsegchar
+ ;; i += 3;
+ local.get $i
+ i32.const 12
+ i32.add
+ local.set $i
+ br 0
+ end end
+ ;; this.buf32[i+0] = 0;
+ local.get $i
+ i32.const 0
+ i32.store
+ ;; this.buf32[i+1] = 0;
+ local.get $i
+ i32.const 0
+ i32.store offset=4
+ ;; this.buf32[i+2] = this.addSegment(lsegchar, 0) | 0x80;
+ local.get $i
+ local.get $lsegchar
+ i32.const 0
+ call $addSegment
+ i32.const 0x80
+ i32.or
+ i32.store offset=8
+ ;; this.buf32[TRIE1_SLOT] = i + 3 << 2;
+ i32.const 260
+ local.get $i
+ i32.const 12
+ i32.add
+ i32.store
+ ;; return r;
+ local.get $r
+ i32.const 2
+ i32.shr_u
+)
+
+;;
+;; unsigned int addSegment(lsegchar, lsegend)
+;;
+;; Store a segment of characters and return a segment descriptor. The segment
+;; is created from the character data in the needle buffer.
+;;
+(func $addSegment
+ (param $lsegchar i32)
+ (param $lsegend i32)
+ (result i32) ;; result: segment descriptor
+ (local $char1 i32) ;; offset to end of character data section
+ (local $isegchar i32) ;; relative offset to first character of segment
+ (local $i i32) ;; iterator
+ ;;
+ ;; if ( lsegchar === 0 ) { return 0; }
+ local.get $lsegchar
+ i32.eqz
+ if
+ i32.const 0
+ return
+ end
+ ;; let char1 = this.buf32[HNBIGTRIE_CHAR1_SLOT];
+ i32.const 268
+ i32.load
+ local.tee $char1
+ ;; const isegchar = char1 - this.buf32[HNBIGTRIE_CHAR0_SLOT];
+ i32.const 264
+ i32.load
+ i32.sub
+ local.set $isegchar
+ ;; let i = lsegchar;
+ local.get $lsegchar
+ local.set $i
+ ;; do {
+ loop
+ ;; this.buf[char1++] = this.buf[--i];
+ local.get $char1
+ local.get $i
+ i32.const -1
+ i32.add
+ local.tee $i
+ i32.load8_u
+ i32.store8
+ local.get $char1
+ i32.const 1
+ i32.add
+ local.set $char1
+ ;; } while ( i !== lsegend );
+ local.get $i
+ local.get $lsegend
+ i32.ne
+ br_if 0
+ end
+ ;; this.buf32[HNBIGTRIE_CHAR1_SLOT] = char1;
+ i32.const 268
+ local.get $char1
+ i32.store
+ ;; return isegchar << 8 | lsegchar - lsegend;
+ local.get $isegchar
+ i32.const 8
+ i32.shl
+ local.get $lsegchar
+ local.get $lsegend
+ i32.sub
+ i32.or
+)
+
+;;
+;; module end
+;;
+)
diff --git a/src/js/whitelist.js b/src/js/whitelist.js
new file mode 100644
index 0000000..e7905ee
--- /dev/null
+++ b/src/js/whitelist.js
@@ -0,0 +1,258 @@
+/*******************************************************************************
+
+ uBlock Origin - a comprehensive, efficient content blocker
+ Copyright (C) 2014-2018 Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+/* global CodeMirror, uBlockDashboard */
+
+'use strict';
+
+import { i18n$ } from './i18n.js';
+import { dom, qs$ } from './dom.js';
+
+/******************************************************************************/
+
+const reComment = /^\s*#\s*/;
+
+const directiveFromLine = function(line) {
+ const match = reComment.exec(line);
+ return match === null
+ ? line.trim()
+ : line.slice(match.index + match[0].length).trim();
+};
+
+/******************************************************************************/
+
+CodeMirror.defineMode("ubo-whitelist-directives", function() {
+ const reRegex = /^\/.+\/$/;
+
+ return {
+ token: function(stream) {
+ const line = stream.string.trim();
+ stream.skipToEnd();
+ if ( reBadHostname === undefined ) {
+ return null;
+ }
+ if ( reComment.test(line) ) {
+ return 'comment';
+ }
+ if ( line.indexOf('/') === -1 ) {
+ if ( reBadHostname.test(line) ) { return 'error'; }
+ if ( whitelistDefaultSet.has(line.trim()) ) {
+ return 'keyword';
+ }
+ return null;
+ }
+ if ( reRegex.test(line) ) {
+ try {
+ new RegExp(line.slice(1, -1));
+ } catch(ex) {
+ return 'error';
+ }
+ return null;
+ }
+ if ( reHostnameExtractor.test(line) === false ) {
+ return 'error';
+ }
+ if ( whitelistDefaultSet.has(line.trim()) ) {
+ return 'keyword';
+ }
+ return null;
+ }
+ };
+});
+
+let reBadHostname;
+let reHostnameExtractor;
+let whitelistDefaultSet = new Set();
+
+/******************************************************************************/
+
+const messaging = vAPI.messaging;
+const noopFunc = function(){};
+
+let cachedWhitelist = '';
+
+const cmEditor = new CodeMirror(qs$('#whitelist'), {
+ autofocus: true,
+ lineNumbers: true,
+ lineWrapping: true,
+ styleActiveLine: true,
+});
+
+uBlockDashboard.patchCodeMirrorEditor(cmEditor);
+
+/******************************************************************************/
+
+const getEditorText = function() {
+ let text = cmEditor.getValue().replace(/\s+$/, '');
+ return text === '' ? text : text + '\n';
+};
+
+const setEditorText = function(text) {
+ cmEditor.setValue(text.replace(/\s+$/, '') + '\n');
+};
+
+/******************************************************************************/
+
+const whitelistChanged = function() {
+ const whitelistElem = qs$('#whitelist');
+ const bad = qs$(whitelistElem, '.cm-error') !== null;
+ const changedWhitelist = getEditorText().trim();
+ const changed = changedWhitelist !== cachedWhitelist;
+ qs$('#whitelistApply').disabled = !changed || bad;
+ qs$('#whitelistRevert').disabled = !changed;
+ CodeMirror.commands.save = changed && !bad ? applyChanges : noopFunc;
+};
+
+cmEditor.on('changes', whitelistChanged);
+
+/******************************************************************************/
+
+const renderWhitelist = async function() {
+ const details = await messaging.send('dashboard', {
+ what: 'getWhitelist',
+ });
+
+ const first = reBadHostname === undefined;
+ if ( first ) {
+ reBadHostname = new RegExp(details.reBadHostname);
+ reHostnameExtractor = new RegExp(details.reHostnameExtractor);
+ whitelistDefaultSet = new Set(details.whitelistDefault);
+ }
+ const toAdd = new Set(whitelistDefaultSet);
+ for ( const line of details.whitelist ) {
+ const directive = directiveFromLine(line);
+ if ( whitelistDefaultSet.has(directive) === false ) { continue; }
+ toAdd.delete(directive);
+ if ( toAdd.size === 0 ) { break; }
+ }
+ if ( toAdd.size !== 0 ) {
+ details.whitelist.push(...Array.from(toAdd).map(a => `# ${a}`));
+ }
+ details.whitelist.sort((a, b) => {
+ const ad = directiveFromLine(a);
+ const bd = directiveFromLine(b);
+ const abuiltin = whitelistDefaultSet.has(ad);
+ if ( abuiltin !== whitelistDefaultSet.has(bd) ) {
+ return abuiltin ? -1 : 1;
+ }
+ return ad.localeCompare(bd);
+ });
+ const whitelistStr = details.whitelist.join('\n').trim();
+ cachedWhitelist = whitelistStr;
+ setEditorText(whitelistStr);
+ if ( first ) {
+ cmEditor.clearHistory();
+ }
+};
+
+/******************************************************************************/
+
+const handleImportFilePicker = function() {
+ const file = this.files[0];
+ if ( file === undefined || file.name === '' ) { return; }
+ if ( file.type.indexOf('text') !== 0 ) { return; }
+ const fr = new FileReader();
+ fr.onload = ev => {
+ if ( ev.type !== 'load' ) { return; }
+ const content = uBlockDashboard.mergeNewLines(
+ getEditorText().trim(),
+ fr.result.trim()
+ );
+ setEditorText(content);
+ };
+ fr.readAsText(file);
+};
+
+/******************************************************************************/
+
+const startImportFilePicker = function() {
+ const input = qs$('#importFilePicker');
+ // Reset to empty string, this will ensure an change event is properly
+ // triggered if the user pick a file, even if it is the same as the last
+ // one picked.
+ input.value = '';
+ input.click();
+};
+
+/******************************************************************************/
+
+const exportWhitelistToFile = function() {
+ const val = getEditorText();
+ if ( val === '' ) { return; }
+ const filename =
+ i18n$('whitelistExportFilename')
+ .replace('{{datetime}}', uBlockDashboard.dateNowToSensibleString())
+ .replace(/ +/g, '_');
+ vAPI.download({
+ 'url': `data:text/plain;charset=utf-8,${encodeURIComponent(val + '\n')}`,
+ 'filename': filename
+ });
+};
+
+/******************************************************************************/
+
+const applyChanges = async function() {
+ cachedWhitelist = getEditorText().trim();
+ await messaging.send('dashboard', {
+ what: 'setWhitelist',
+ whitelist: cachedWhitelist,
+ });
+ renderWhitelist();
+};
+
+const revertChanges = function() {
+ setEditorText(cachedWhitelist);
+};
+
+/******************************************************************************/
+
+const getCloudData = function() {
+ return getEditorText();
+};
+
+const setCloudData = function(data, append) {
+ if ( typeof data !== 'string' ) { return; }
+ if ( append ) {
+ data = uBlockDashboard.mergeNewLines(getEditorText().trim(), data);
+ }
+ setEditorText(data.trim());
+};
+
+self.cloud.onPush = getCloudData;
+self.cloud.onPull = setCloudData;
+
+/******************************************************************************/
+
+self.hasUnsavedData = function() {
+ return getEditorText().trim() !== cachedWhitelist;
+};
+
+/******************************************************************************/
+
+dom.on('#importWhitelistFromFile', 'click', startImportFilePicker);
+dom.on('#importFilePicker', 'change', handleImportFilePicker);
+dom.on('#exportWhitelistToFile', 'click', exportWhitelistToFile);
+dom.on('#whitelistApply', 'click', ( ) => { applyChanges(); });
+dom.on('#whitelistRevert', 'click', revertChanges);
+
+renderWhitelist();
+
+/******************************************************************************/
diff --git a/src/lib/codemirror/LICENSE b/src/lib/codemirror/LICENSE
new file mode 100644
index 0000000..ff7db4b
--- /dev/null
+++ b/src/lib/codemirror/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (C) 2017 by Marijn Haverbeke <marijnh@gmail.com> and others
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/src/lib/codemirror/README.md b/src/lib/codemirror/README.md
new file mode 100644
index 0000000..92debf4
--- /dev/null
+++ b/src/lib/codemirror/README.md
@@ -0,0 +1,47 @@
+# CodeMirror
+
+[![Build Status](https://travis-ci.org/codemirror/CodeMirror.svg)](https://travis-ci.org/codemirror/CodeMirror)
+[![NPM version](https://img.shields.io/npm/v/codemirror.svg)](https://www.npmjs.org/package/codemirror)
+
+CodeMirror is a versatile text editor implemented in JavaScript for
+the browser. It is specialized for editing code, and comes with over
+100 language modes and various addons that implement more advanced
+editing functionality. Every language comes with fully-featured code
+and syntax highlighting to help with reading and editing complex code.
+
+A rich programming API and a CSS theming system are available for
+customizing CodeMirror to fit your application, and extending it with
+new functionality.
+
+You can find more information (and the
+[manual](https://codemirror.net/doc/manual.html)) on the [project
+page](https://codemirror.net). For questions and discussion, use the
+[discussion forum](https://discuss.codemirror.net/).
+
+See
+[CONTRIBUTING.md](https://github.com/codemirror/CodeMirror/blob/master/CONTRIBUTING.md)
+for contributing guidelines.
+
+The CodeMirror community aims to be welcoming to everybody. We use the
+[Contributor Covenant
+(1.1)](http://contributor-covenant.org/version/1/1/0/) as our code of
+conduct.
+
+### Installation
+
+Either get the [zip file](https://codemirror.net/codemirror.zip) with
+the latest version, or make sure you have [Node](https://nodejs.org/)
+installed and run:
+
+ npm install codemirror
+
+**NOTE**: This is the source repository for the library, and not the
+distribution channel. Cloning it is not the recommended way to install
+the library, and will in fact not work unless you also run the build
+step.
+
+### Quickstart
+
+To build the project, make sure you have Node.js installed (at least version 6)
+and then `npm install`. To run, just open `index.html` in your
+browser (you don't need to run a webserver). Run the tests with `npm test`.
diff --git a/src/lib/codemirror/addon/comment/comment.js b/src/lib/codemirror/addon/comment/comment.js
new file mode 100644
index 0000000..dac48d0
--- /dev/null
+++ b/src/lib/codemirror/addon/comment/comment.js
@@ -0,0 +1,211 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+ "use strict";
+
+ var noOptions = {};
+ var nonWS = /[^\s\u00a0]/;
+ var Pos = CodeMirror.Pos, cmp = CodeMirror.cmpPos;
+
+ function firstNonWS(str) {
+ var found = str.search(nonWS);
+ return found == -1 ? 0 : found;
+ }
+
+ CodeMirror.commands.toggleComment = function(cm) {
+ cm.toggleComment();
+ };
+
+ CodeMirror.defineExtension("toggleComment", function(options) {
+ if (!options) options = noOptions;
+ var cm = this;
+ var minLine = Infinity, ranges = this.listSelections(), mode = null;
+ for (var i = ranges.length - 1; i >= 0; i--) {
+ var from = ranges[i].from(), to = ranges[i].to();
+ if (from.line >= minLine) continue;
+ if (to.line >= minLine) to = Pos(minLine, 0);
+ minLine = from.line;
+ if (mode == null) {
+ if (cm.uncomment(from, to, options)) mode = "un";
+ else { cm.lineComment(from, to, options); mode = "line"; }
+ } else if (mode == "un") {
+ cm.uncomment(from, to, options);
+ } else {
+ cm.lineComment(from, to, options);
+ }
+ }
+ });
+
+ // Rough heuristic to try and detect lines that are part of multi-line string
+ function probablyInsideString(cm, pos, line) {
+ return /\bstring\b/.test(cm.getTokenTypeAt(Pos(pos.line, 0))) && !/^[\'\"\`]/.test(line)
+ }
+
+ function getMode(cm, pos) {
+ var mode = cm.getMode()
+ return mode.useInnerComments === false || !mode.innerMode ? mode : cm.getModeAt(pos)
+ }
+
+ CodeMirror.defineExtension("lineComment", function(from, to, options) {
+ if (!options) options = noOptions;
+ var self = this, mode = getMode(self, from);
+ var firstLine = self.getLine(from.line);
+ if (firstLine == null || probablyInsideString(self, from, firstLine)) return;
+
+ var commentString = options.lineComment || mode.lineComment;
+ if (!commentString) {
+ if (options.blockCommentStart || mode.blockCommentStart) {
+ options.fullLines = true;
+ self.blockComment(from, to, options);
+ }
+ return;
+ }
+
+ var end = Math.min(to.ch != 0 || to.line == from.line ? to.line + 1 : to.line, self.lastLine() + 1);
+ var pad = options.padding == null ? " " : options.padding;
+ var blankLines = options.commentBlankLines || from.line == to.line;
+
+ self.operation(function() {
+ if (options.indent) {
+ var baseString = null;
+ for (var i = from.line; i < end; ++i) {
+ var line = self.getLine(i);
+ var whitespace = line.slice(0, firstNonWS(line));
+ if (baseString == null || baseString.length > whitespace.length) {
+ baseString = whitespace;
+ }
+ }
+ for (var i = from.line; i < end; ++i) {
+ var line = self.getLine(i), cut = baseString.length;
+ if (!blankLines && !nonWS.test(line)) continue;
+ if (line.slice(0, cut) != baseString) cut = firstNonWS(line);
+ self.replaceRange(baseString + commentString + pad, Pos(i, 0), Pos(i, cut));
+ }
+ } else {
+ for (var i = from.line; i < end; ++i) {
+ if (blankLines || nonWS.test(self.getLine(i)))
+ self.replaceRange(commentString + pad, Pos(i, 0));
+ }
+ }
+ });
+ });
+
+ CodeMirror.defineExtension("blockComment", function(from, to, options) {
+ if (!options) options = noOptions;
+ var self = this, mode = getMode(self, from);
+ var startString = options.blockCommentStart || mode.blockCommentStart;
+ var endString = options.blockCommentEnd || mode.blockCommentEnd;
+ if (!startString || !endString) {
+ if ((options.lineComment || mode.lineComment) && options.fullLines != false)
+ self.lineComment(from, to, options);
+ return;
+ }
+ if (/\bcomment\b/.test(self.getTokenTypeAt(Pos(from.line, 0)))) return
+
+ var end = Math.min(to.line, self.lastLine());
+ if (end != from.line && to.ch == 0 && nonWS.test(self.getLine(end))) --end;
+
+ var pad = options.padding == null ? " " : options.padding;
+ if (from.line > end) return;
+
+ self.operation(function() {
+ if (options.fullLines != false) {
+ var lastLineHasText = nonWS.test(self.getLine(end));
+ self.replaceRange(pad + endString, Pos(end));
+ self.replaceRange(startString + pad, Pos(from.line, 0));
+ var lead = options.blockCommentLead || mode.blockCommentLead;
+ if (lead != null) for (var i = from.line + 1; i <= end; ++i)
+ if (i != end || lastLineHasText)
+ self.replaceRange(lead + pad, Pos(i, 0));
+ } else {
+ var atCursor = cmp(self.getCursor("to"), to) == 0, empty = !self.somethingSelected()
+ self.replaceRange(endString, to);
+ if (atCursor) self.setSelection(empty ? to : self.getCursor("from"), to)
+ self.replaceRange(startString, from);
+ }
+ });
+ });
+
+ CodeMirror.defineExtension("uncomment", function(from, to, options) {
+ if (!options) options = noOptions;
+ var self = this, mode = getMode(self, from);
+ var end = Math.min(to.ch != 0 || to.line == from.line ? to.line : to.line - 1, self.lastLine()), start = Math.min(from.line, end);
+
+ // Try finding line comments
+ var lineString = options.lineComment || mode.lineComment, lines = [];
+ var pad = options.padding == null ? " " : options.padding, didSomething;
+ lineComment: {
+ if (!lineString) break lineComment;
+ for (var i = start; i <= end; ++i) {
+ var line = self.getLine(i);
+ var found = line.indexOf(lineString);
+ if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1;
+ if (found == -1 && nonWS.test(line)) break lineComment;
+ if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment;
+ lines.push(line);
+ }
+ self.operation(function() {
+ for (var i = start; i <= end; ++i) {
+ var line = lines[i - start];
+ var pos = line.indexOf(lineString), endPos = pos + lineString.length;
+ if (pos < 0) continue;
+ if (line.slice(endPos, endPos + pad.length) == pad) endPos += pad.length;
+ didSomething = true;
+ self.replaceRange("", Pos(i, pos), Pos(i, endPos));
+ }
+ });
+ if (didSomething) return true;
+ }
+
+ // Try block comments
+ var startString = options.blockCommentStart || mode.blockCommentStart;
+ var endString = options.blockCommentEnd || mode.blockCommentEnd;
+ if (!startString || !endString) return false;
+ var lead = options.blockCommentLead || mode.blockCommentLead;
+ var startLine = self.getLine(start), open = startLine.indexOf(startString)
+ if (open == -1) return false
+ var endLine = end == start ? startLine : self.getLine(end)
+ var close = endLine.indexOf(endString, end == start ? open + startString.length : 0);
+ var insideStart = Pos(start, open + 1), insideEnd = Pos(end, close + 1)
+ if (close == -1 ||
+ !/comment/.test(self.getTokenTypeAt(insideStart)) ||
+ !/comment/.test(self.getTokenTypeAt(insideEnd)) ||
+ self.getRange(insideStart, insideEnd, "\n").indexOf(endString) > -1)
+ return false;
+
+ // Avoid killing block comments completely outside the selection.
+ // Positions of the last startString before the start of the selection, and the first endString after it.
+ var lastStart = startLine.lastIndexOf(startString, from.ch);
+ var firstEnd = lastStart == -1 ? -1 : startLine.slice(0, from.ch).indexOf(endString, lastStart + startString.length);
+ if (lastStart != -1 && firstEnd != -1 && firstEnd + endString.length != from.ch) return false;
+ // Positions of the first endString after the end of the selection, and the last startString before it.
+ firstEnd = endLine.indexOf(endString, to.ch);
+ var almostLastStart = endLine.slice(to.ch).lastIndexOf(startString, firstEnd - to.ch);
+ lastStart = (firstEnd == -1 || almostLastStart == -1) ? -1 : to.ch + almostLastStart;
+ if (firstEnd != -1 && lastStart != -1 && lastStart != to.ch) return false;
+
+ self.operation(function() {
+ self.replaceRange("", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)),
+ Pos(end, close + endString.length));
+ var openEnd = open + startString.length;
+ if (pad && startLine.slice(openEnd, openEnd + pad.length) == pad) openEnd += pad.length;
+ self.replaceRange("", Pos(start, open), Pos(start, openEnd));
+ if (lead) for (var i = start + 1; i <= end; ++i) {
+ var line = self.getLine(i), found = line.indexOf(lead);
+ if (found == -1 || nonWS.test(line.slice(0, found))) continue;
+ var foundEnd = found + lead.length;
+ if (pad && line.slice(foundEnd, foundEnd + pad.length) == pad) foundEnd += pad.length;
+ self.replaceRange("", Pos(i, found), Pos(i, foundEnd));
+ }
+ });
+ return true;
+ });
+});
diff --git a/src/lib/codemirror/addon/display/panel.js b/src/lib/codemirror/addon/display/panel.js
new file mode 100644
index 0000000..29f7e0b
--- /dev/null
+++ b/src/lib/codemirror/addon/display/panel.js
@@ -0,0 +1,133 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function (mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function (CodeMirror) {
+ CodeMirror.defineExtension("addPanel", function (node, options) {
+ options = options || {};
+
+ if (!this.state.panels) initPanels(this);
+
+ var info = this.state.panels;
+ var wrapper = info.wrapper;
+ var cmWrapper = this.getWrapperElement();
+ var replace = options.replace instanceof Panel && !options.replace.cleared;
+
+ if (options.after instanceof Panel && !options.after.cleared) {
+ wrapper.insertBefore(node, options.before.node.nextSibling);
+ } else if (options.before instanceof Panel && !options.before.cleared) {
+ wrapper.insertBefore(node, options.before.node);
+ } else if (replace) {
+ wrapper.insertBefore(node, options.replace.node);
+ options.replace.clear(true);
+ } else if (options.position == "bottom") {
+ wrapper.appendChild(node);
+ } else if (options.position == "before-bottom") {
+ wrapper.insertBefore(node, cmWrapper.nextSibling);
+ } else if (options.position == "after-top") {
+ wrapper.insertBefore(node, cmWrapper);
+ } else {
+ wrapper.insertBefore(node, wrapper.firstChild);
+ }
+
+ var height = (options && options.height) || node.offsetHeight;
+
+ var panel = new Panel(this, node, options, height);
+ info.panels.push(panel);
+
+ this.setSize();
+ if (options.stable && isAtTop(this, node))
+ this.scrollTo(null, this.getScrollInfo().top + height);
+
+ return panel;
+ });
+
+ function Panel(cm, node, options, height) {
+ this.cm = cm;
+ this.node = node;
+ this.options = options;
+ this.height = height;
+ this.cleared = false;
+ }
+
+ /* when skipRemove is true, clear() was called from addPanel().
+ * Thus removePanels() should not be called (issue 5518) */
+ Panel.prototype.clear = function (skipRemove) {
+ if (this.cleared) return;
+ this.cleared = true;
+ var info = this.cm.state.panels;
+ info.panels.splice(info.panels.indexOf(this), 1);
+ this.cm.setSize();
+ if (this.options.stable && isAtTop(this.cm, this.node))
+ this.cm.scrollTo(null, this.cm.getScrollInfo().top - this.height)
+ info.wrapper.removeChild(this.node);
+ if (info.panels.length == 0 && !skipRemove) removePanels(this.cm);
+ };
+
+ Panel.prototype.changed = function () {
+ this.height = this.node.getBoundingClientRect().height;
+ this.cm.setSize();
+ };
+
+ function initPanels(cm) {
+ var wrap = cm.getWrapperElement()
+ var style = window.getComputedStyle ? window.getComputedStyle(wrap) : wrap.currentStyle;
+ var height = parseInt(style.height);
+ var info = cm.state.panels = {
+ setHeight: wrap.style.height,
+ panels: [],
+ wrapper: document.createElement("div")
+ };
+ var hasFocus = cm.hasFocus(), scrollPos = cm.getScrollInfo()
+ wrap.parentNode.insertBefore(info.wrapper, wrap);
+ info.wrapper.appendChild(wrap);
+ cm.scrollTo(scrollPos.left, scrollPos.top)
+ if (hasFocus) cm.focus();
+
+ cm._setSize = cm.setSize;
+ if (height != null) cm.setSize = function (width, newHeight) {
+ if (!newHeight) newHeight = info.wrapper.offsetHeight;
+ info.setHeight = newHeight;
+ if (typeof newHeight != "number") {
+ var px = /^(\d+\.?\d*)px$/.exec(newHeight);
+ if (px) {
+ newHeight = Number(px[1]);
+ } else {
+ info.wrapper.style.height = newHeight;
+ newHeight = info.wrapper.offsetHeight;
+ }
+ }
+ var editorheight = newHeight - info.panels
+ .map(function (p) { return p.node.getBoundingClientRect().height; })
+ .reduce(function (a, b) { return a + b; }, 0);
+ cm._setSize(width, editorheight);
+ height = newHeight;
+ };
+ }
+
+ function removePanels(cm) {
+ var info = cm.state.panels;
+ cm.state.panels = null;
+
+ var wrap = cm.getWrapperElement()
+ var hasFocus = cm.hasFocus(), scrollPos = cm.getScrollInfo()
+ info.wrapper.parentNode.replaceChild(wrap, info.wrapper);
+ cm.scrollTo(scrollPos.left, scrollPos.top)
+ if (hasFocus) cm.focus();
+ wrap.style.height = info.setHeight;
+ cm.setSize = cm._setSize;
+ cm.setSize();
+ }
+
+ function isAtTop(cm, dom) {
+ for (var sibling = dom.nextSibling; sibling; sibling = sibling.nextSibling)
+ if (sibling == cm.getWrapperElement()) return true
+ return false
+ }
+});
diff --git a/src/lib/codemirror/addon/edit/closebrackets.js b/src/lib/codemirror/addon/edit/closebrackets.js
new file mode 100644
index 0000000..593d443
--- /dev/null
+++ b/src/lib/codemirror/addon/edit/closebrackets.js
@@ -0,0 +1,201 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+ var defaults = {
+ pairs: "()[]{}''\"\"",
+ closeBefore: ")]}'\":;>",
+ triples: "",
+ explode: "[]{}"
+ };
+
+ var Pos = CodeMirror.Pos;
+
+ CodeMirror.defineOption("autoCloseBrackets", false, function(cm, val, old) {
+ if (old && old != CodeMirror.Init) {
+ cm.removeKeyMap(keyMap);
+ cm.state.closeBrackets = null;
+ }
+ if (val) {
+ ensureBound(getOption(val, "pairs"))
+ cm.state.closeBrackets = val;
+ cm.addKeyMap(keyMap);
+ }
+ });
+
+ function getOption(conf, name) {
+ if (name == "pairs" && typeof conf == "string") return conf;
+ if (typeof conf == "object" && conf[name] != null) return conf[name];
+ return defaults[name];
+ }
+
+ var keyMap = {Backspace: handleBackspace, Enter: handleEnter};
+ function ensureBound(chars) {
+ for (var i = 0; i < chars.length; i++) {
+ var ch = chars.charAt(i), key = "'" + ch + "'"
+ if (!keyMap[key]) keyMap[key] = handler(ch)
+ }
+ }
+ ensureBound(defaults.pairs + "`")
+
+ function handler(ch) {
+ return function(cm) { return handleChar(cm, ch); };
+ }
+
+ function getConfig(cm) {
+ var deflt = cm.state.closeBrackets;
+ if (!deflt || deflt.override) return deflt;
+ var mode = cm.getModeAt(cm.getCursor());
+ return mode.closeBrackets || deflt;
+ }
+
+ function handleBackspace(cm) {
+ var conf = getConfig(cm);
+ if (!conf || cm.getOption("disableInput")) return CodeMirror.Pass;
+
+ var pairs = getOption(conf, "pairs");
+ var ranges = cm.listSelections();
+ for (var i = 0; i < ranges.length; i++) {
+ if (!ranges[i].empty()) return CodeMirror.Pass;
+ var around = charsAround(cm, ranges[i].head);
+ if (!around || pairs.indexOf(around) % 2 != 0) return CodeMirror.Pass;
+ }
+ for (var i = ranges.length - 1; i >= 0; i--) {
+ var cur = ranges[i].head;
+ cm.replaceRange("", Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1), "+delete");
+ }
+ }
+
+ function handleEnter(cm) {
+ var conf = getConfig(cm);
+ var explode = conf && getOption(conf, "explode");
+ if (!explode || cm.getOption("disableInput")) return CodeMirror.Pass;
+
+ var ranges = cm.listSelections();
+ for (var i = 0; i < ranges.length; i++) {
+ if (!ranges[i].empty()) return CodeMirror.Pass;
+ var around = charsAround(cm, ranges[i].head);
+ if (!around || explode.indexOf(around) % 2 != 0) return CodeMirror.Pass;
+ }
+ cm.operation(function() {
+ var linesep = cm.lineSeparator() || "\n";
+ cm.replaceSelection(linesep + linesep, null);
+ moveSel(cm, -1)
+ ranges = cm.listSelections();
+ for (var i = 0; i < ranges.length; i++) {
+ var line = ranges[i].head.line;
+ cm.indentLine(line, null, true);
+ cm.indentLine(line + 1, null, true);
+ }
+ });
+ }
+
+ function moveSel(cm, dir) {
+ var newRanges = [], ranges = cm.listSelections(), primary = 0
+ for (var i = 0; i < ranges.length; i++) {
+ var range = ranges[i]
+ if (range.head == cm.getCursor()) primary = i
+ var pos = range.head.ch || dir > 0 ? {line: range.head.line, ch: range.head.ch + dir} : {line: range.head.line - 1}
+ newRanges.push({anchor: pos, head: pos})
+ }
+ cm.setSelections(newRanges, primary)
+ }
+
+ function contractSelection(sel) {
+ var inverted = CodeMirror.cmpPos(sel.anchor, sel.head) > 0;
+ return {anchor: new Pos(sel.anchor.line, sel.anchor.ch + (inverted ? -1 : 1)),
+ head: new Pos(sel.head.line, sel.head.ch + (inverted ? 1 : -1))};
+ }
+
+ function handleChar(cm, ch) {
+ var conf = getConfig(cm);
+ if (!conf || cm.getOption("disableInput")) return CodeMirror.Pass;
+
+ var pairs = getOption(conf, "pairs");
+ var pos = pairs.indexOf(ch);
+ if (pos == -1) return CodeMirror.Pass;
+
+ var closeBefore = getOption(conf,"closeBefore");
+
+ var triples = getOption(conf, "triples");
+
+ var identical = pairs.charAt(pos + 1) == ch;
+ var ranges = cm.listSelections();
+ var opening = pos % 2 == 0;
+
+ var type;
+ for (var i = 0; i < ranges.length; i++) {
+ var range = ranges[i], cur = range.head, curType;
+ var next = cm.getRange(cur, Pos(cur.line, cur.ch + 1));
+ if (opening && !range.empty()) {
+ curType = "surround";
+ } else if ((identical || !opening) && next == ch) {
+ if (identical && stringStartsAfter(cm, cur))
+ curType = "both";
+ else if (triples.indexOf(ch) >= 0 && cm.getRange(cur, Pos(cur.line, cur.ch + 3)) == ch + ch + ch)
+ curType = "skipThree";
+ else
+ curType = "skip";
+ } else if (identical && cur.ch > 1 && triples.indexOf(ch) >= 0 &&
+ cm.getRange(Pos(cur.line, cur.ch - 2), cur) == ch + ch) {
+ if (cur.ch > 2 && /\bstring/.test(cm.getTokenTypeAt(Pos(cur.line, cur.ch - 2)))) return CodeMirror.Pass;
+ curType = "addFour";
+ } else if (identical) {
+ var prev = cur.ch == 0 ? " " : cm.getRange(Pos(cur.line, cur.ch - 1), cur)
+ if (!CodeMirror.isWordChar(next) && prev != ch && !CodeMirror.isWordChar(prev)) curType = "both";
+ else return CodeMirror.Pass;
+ } else if (opening && (next.length === 0 || /\s/.test(next) || closeBefore.indexOf(next) > -1)) {
+ curType = "both";
+ } else {
+ return CodeMirror.Pass;
+ }
+ if (!type) type = curType;
+ else if (type != curType) return CodeMirror.Pass;
+ }
+
+ var left = pos % 2 ? pairs.charAt(pos - 1) : ch;
+ var right = pos % 2 ? ch : pairs.charAt(pos + 1);
+ cm.operation(function() {
+ if (type == "skip") {
+ moveSel(cm, 1)
+ } else if (type == "skipThree") {
+ moveSel(cm, 3)
+ } else if (type == "surround") {
+ var sels = cm.getSelections();
+ for (var i = 0; i < sels.length; i++)
+ sels[i] = left + sels[i] + right;
+ cm.replaceSelections(sels, "around");
+ sels = cm.listSelections().slice();
+ for (var i = 0; i < sels.length; i++)
+ sels[i] = contractSelection(sels[i]);
+ cm.setSelections(sels);
+ } else if (type == "both") {
+ cm.replaceSelection(left + right, null);
+ cm.triggerElectric(left + right);
+ moveSel(cm, -1)
+ } else if (type == "addFour") {
+ cm.replaceSelection(left + left + left + left, "before");
+ moveSel(cm, 1)
+ }
+ });
+ }
+
+ function charsAround(cm, pos) {
+ var str = cm.getRange(Pos(pos.line, pos.ch - 1),
+ Pos(pos.line, pos.ch + 1));
+ return str.length == 2 ? str : null;
+ }
+
+ function stringStartsAfter(cm, pos) {
+ var token = cm.getTokenAt(Pos(pos.line, pos.ch + 1))
+ return /\bstring/.test(token.type) && token.start == pos.ch &&
+ (pos.ch == 0 || !/\bstring/.test(cm.getTokenTypeAt(pos)))
+ }
+});
diff --git a/src/lib/codemirror/addon/edit/matchbrackets.js b/src/lib/codemirror/addon/edit/matchbrackets.js
new file mode 100644
index 0000000..43dc884
--- /dev/null
+++ b/src/lib/codemirror/addon/edit/matchbrackets.js
@@ -0,0 +1,160 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+ var ie_lt8 = /MSIE \d/.test(navigator.userAgent) &&
+ (document.documentMode == null || document.documentMode < 8);
+
+ var Pos = CodeMirror.Pos;
+
+ var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<", "<": ">>", ">": "<<"};
+
+ function bracketRegex(config) {
+ return config && config.bracketRegex || /[(){}[\]]/
+ }
+
+ function findMatchingBracket(cm, where, config) {
+ var line = cm.getLineHandle(where.line), pos = where.ch - 1;
+ var afterCursor = config && config.afterCursor
+ if (afterCursor == null)
+ afterCursor = /(^| )cm-fat-cursor($| )/.test(cm.getWrapperElement().className)
+ var re = bracketRegex(config)
+
+ // A cursor is defined as between two characters, but in in vim command mode
+ // (i.e. not insert mode), the cursor is visually represented as a
+ // highlighted box on top of the 2nd character. Otherwise, we allow matches
+ // from before or after the cursor.
+ var match = (!afterCursor && pos >= 0 && re.test(line.text.charAt(pos)) && matching[line.text.charAt(pos)]) ||
+ re.test(line.text.charAt(pos + 1)) && matching[line.text.charAt(++pos)];
+ if (!match) return null;
+ var dir = match.charAt(1) == ">" ? 1 : -1;
+ if (config && config.strict && (dir > 0) != (pos == where.ch)) return null;
+ var style = cm.getTokenTypeAt(Pos(where.line, pos + 1));
+
+ var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style, config);
+ if (found == null) return null;
+ return {from: Pos(where.line, pos), to: found && found.pos,
+ match: found && found.ch == match.charAt(0), forward: dir > 0};
+ }
+
+ // bracketRegex is used to specify which type of bracket to scan
+ // should be a regexp, e.g. /[[\]]/
+ //
+ // Note: If "where" is on an open bracket, then this bracket is ignored.
+ //
+ // Returns false when no bracket was found, null when it reached
+ // maxScanLines and gave up
+ function scanForBracket(cm, where, dir, style, config) {
+ var maxScanLen = (config && config.maxScanLineLength) || 10000;
+ var maxScanLines = (config && config.maxScanLines) || 1000;
+
+ var stack = [];
+ var re = bracketRegex(config)
+ var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1)
+ : Math.max(cm.firstLine() - 1, where.line - maxScanLines);
+ for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) {
+ var line = cm.getLine(lineNo);
+ if (!line) continue;
+ var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1;
+ if (line.length > maxScanLen) continue;
+ if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0);
+ for (; pos != end; pos += dir) {
+ var ch = line.charAt(pos);
+ if (re.test(ch) && (style === undefined ||
+ (cm.getTokenTypeAt(Pos(lineNo, pos + 1)) || "") == (style || ""))) {
+ var match = matching[ch];
+ if (match && (match.charAt(1) == ">") == (dir > 0)) stack.push(ch);
+ else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch};
+ else stack.pop();
+ }
+ }
+ }
+ return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null;
+ }
+
+ function matchBrackets(cm, autoclear, config) {
+ // Disable brace matching in long lines, since it'll cause hugely slow updates
+ var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000,
+ highlightNonMatching = config && config.highlightNonMatching;
+ var marks = [], ranges = cm.listSelections();
+ for (var i = 0; i < ranges.length; i++) {
+ var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, config);
+ if (match && (match.match || highlightNonMatching !== false) && cm.getLine(match.from.line).length <= maxHighlightLen) {
+ var style = match.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket";
+ marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style}));
+ if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen)
+ marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style}));
+ }
+ }
+
+ if (marks.length) {
+ // Kludge to work around the IE bug from issue #1193, where text
+ // input stops going to the textarea whenever this fires.
+ if (ie_lt8 && cm.state.focused) cm.focus();
+
+ var clear = function() {
+ cm.operation(function() {
+ for (var i = 0; i < marks.length; i++) marks[i].clear();
+ });
+ };
+ if (autoclear) setTimeout(clear, 800);
+ else return clear;
+ }
+ }
+
+ function doMatchBrackets(cm) {
+ cm.operation(function() {
+ if (cm.state.matchBrackets.currentlyHighlighted) {
+ cm.state.matchBrackets.currentlyHighlighted();
+ cm.state.matchBrackets.currentlyHighlighted = null;
+ }
+ cm.state.matchBrackets.currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets);
+ });
+ }
+
+ function clearHighlighted(cm) {
+ if (cm.state.matchBrackets && cm.state.matchBrackets.currentlyHighlighted) {
+ cm.state.matchBrackets.currentlyHighlighted();
+ cm.state.matchBrackets.currentlyHighlighted = null;
+ }
+ }
+
+ CodeMirror.defineOption("matchBrackets", false, function(cm, val, old) {
+ if (old && old != CodeMirror.Init) {
+ cm.off("cursorActivity", doMatchBrackets);
+ cm.off("focus", doMatchBrackets)
+ cm.off("blur", clearHighlighted)
+ clearHighlighted(cm);
+ }
+ if (val) {
+ cm.state.matchBrackets = typeof val == "object" ? val : {};
+ cm.on("cursorActivity", doMatchBrackets);
+ cm.on("focus", doMatchBrackets)
+ cm.on("blur", clearHighlighted)
+ }
+ });
+
+ CodeMirror.defineExtension("matchBrackets", function() {matchBrackets(this, true);});
+ CodeMirror.defineExtension("findMatchingBracket", function(pos, config, oldConfig){
+ // Backwards-compatibility kludge
+ if (oldConfig || typeof config == "boolean") {
+ if (!oldConfig) {
+ config = config ? {strict: true} : null
+ } else {
+ oldConfig.strict = config
+ config = oldConfig
+ }
+ }
+ return findMatchingBracket(this, pos, config)
+ });
+ CodeMirror.defineExtension("scanForBracket", function(pos, dir, style, config){
+ return scanForBracket(this, pos, dir, style, config);
+ });
+});
diff --git a/src/lib/codemirror/addon/fold/foldcode.js b/src/lib/codemirror/addon/fold/foldcode.js
new file mode 100644
index 0000000..887df3f
--- /dev/null
+++ b/src/lib/codemirror/addon/fold/foldcode.js
@@ -0,0 +1,157 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+ "use strict";
+
+ function doFold(cm, pos, options, force) {
+ if (options && options.call) {
+ var finder = options;
+ options = null;
+ } else {
+ var finder = getOption(cm, options, "rangeFinder");
+ }
+ if (typeof pos == "number") pos = CodeMirror.Pos(pos, 0);
+ var minSize = getOption(cm, options, "minFoldSize");
+
+ function getRange(allowFolded) {
+ var range = finder(cm, pos);
+ if (!range || range.to.line - range.from.line < minSize) return null;
+ var marks = cm.findMarksAt(range.from);
+ for (var i = 0; i < marks.length; ++i) {
+ if (marks[i].__isFold && force !== "fold") {
+ if (!allowFolded) return null;
+ range.cleared = true;
+ marks[i].clear();
+ }
+ }
+ return range;
+ }
+
+ var range = getRange(true);
+ if (getOption(cm, options, "scanUp")) while (!range && pos.line > cm.firstLine()) {
+ pos = CodeMirror.Pos(pos.line - 1, 0);
+ range = getRange(false);
+ }
+ if (!range || range.cleared || force === "unfold") return;
+
+ var myWidget = makeWidget(cm, options, range);
+ CodeMirror.on(myWidget, "mousedown", function(e) {
+ myRange.clear();
+ CodeMirror.e_preventDefault(e);
+ });
+ var myRange = cm.markText(range.from, range.to, {
+ replacedWith: myWidget,
+ clearOnEnter: getOption(cm, options, "clearOnEnter"),
+ __isFold: true
+ });
+ myRange.on("clear", function(from, to) {
+ CodeMirror.signal(cm, "unfold", cm, from, to);
+ });
+ CodeMirror.signal(cm, "fold", cm, range.from, range.to);
+ }
+
+ function makeWidget(cm, options, range) {
+ var widget = getOption(cm, options, "widget");
+
+ if (typeof widget == "function") {
+ widget = widget(range.from, range.to);
+ }
+
+ if (typeof widget == "string") {
+ var text = document.createTextNode(widget);
+ widget = document.createElement("span");
+ widget.appendChild(text);
+ widget.className = "CodeMirror-foldmarker";
+ } else if (widget) {
+ widget = widget.cloneNode(true)
+ }
+ return widget;
+ }
+
+ // Clumsy backwards-compatible interface
+ CodeMirror.newFoldFunction = function(rangeFinder, widget) {
+ return function(cm, pos) { doFold(cm, pos, {rangeFinder: rangeFinder, widget: widget}); };
+ };
+
+ // New-style interface
+ CodeMirror.defineExtension("foldCode", function(pos, options, force) {
+ doFold(this, pos, options, force);
+ });
+
+ CodeMirror.defineExtension("isFolded", function(pos) {
+ var marks = this.findMarksAt(pos);
+ for (var i = 0; i < marks.length; ++i)
+ if (marks[i].__isFold) return true;
+ });
+
+ CodeMirror.commands.toggleFold = function(cm) {
+ cm.foldCode(cm.getCursor());
+ };
+ CodeMirror.commands.fold = function(cm) {
+ cm.foldCode(cm.getCursor(), null, "fold");
+ };
+ CodeMirror.commands.unfold = function(cm) {
+ cm.foldCode(cm.getCursor(), null, "unfold");
+ };
+ CodeMirror.commands.foldAll = function(cm) {
+ cm.operation(function() {
+ for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++)
+ cm.foldCode(CodeMirror.Pos(i, 0), null, "fold");
+ });
+ };
+ CodeMirror.commands.unfoldAll = function(cm) {
+ cm.operation(function() {
+ for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++)
+ cm.foldCode(CodeMirror.Pos(i, 0), null, "unfold");
+ });
+ };
+
+ CodeMirror.registerHelper("fold", "combine", function() {
+ var funcs = Array.prototype.slice.call(arguments, 0);
+ return function(cm, start) {
+ for (var i = 0; i < funcs.length; ++i) {
+ var found = funcs[i](cm, start);
+ if (found) return found;
+ }
+ };
+ });
+
+ CodeMirror.registerHelper("fold", "auto", function(cm, start) {
+ var helpers = cm.getHelpers(start, "fold");
+ for (var i = 0; i < helpers.length; i++) {
+ var cur = helpers[i](cm, start);
+ if (cur) return cur;
+ }
+ });
+
+ var defaultOptions = {
+ rangeFinder: CodeMirror.fold.auto,
+ widget: "\u2194",
+ minFoldSize: 0,
+ scanUp: false,
+ clearOnEnter: true
+ };
+
+ CodeMirror.defineOption("foldOptions", null);
+
+ function getOption(cm, options, name) {
+ if (options && options[name] !== undefined)
+ return options[name];
+ var editorOptions = cm.options.foldOptions;
+ if (editorOptions && editorOptions[name] !== undefined)
+ return editorOptions[name];
+ return defaultOptions[name];
+ }
+
+ CodeMirror.defineExtension("foldOption", function(options, name) {
+ return getOption(this, options, name);
+ });
+});
diff --git a/src/lib/codemirror/addon/fold/foldgutter.css b/src/lib/codemirror/addon/fold/foldgutter.css
new file mode 100644
index 0000000..ad19ae2
--- /dev/null
+++ b/src/lib/codemirror/addon/fold/foldgutter.css
@@ -0,0 +1,20 @@
+.CodeMirror-foldmarker {
+ color: blue;
+ text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px;
+ font-family: arial;
+ line-height: .3;
+ cursor: pointer;
+}
+.CodeMirror-foldgutter {
+ width: .7em;
+}
+.CodeMirror-foldgutter-open,
+.CodeMirror-foldgutter-folded {
+ cursor: pointer;
+}
+.CodeMirror-foldgutter-open:after {
+ content: "\25BE";
+}
+.CodeMirror-foldgutter-folded:after {
+ content: "\25B8";
+}
diff --git a/src/lib/codemirror/addon/fold/foldgutter.js b/src/lib/codemirror/addon/fold/foldgutter.js
new file mode 100644
index 0000000..7d46a60
--- /dev/null
+++ b/src/lib/codemirror/addon/fold/foldgutter.js
@@ -0,0 +1,163 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"), require("./foldcode"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror", "./foldcode"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+ "use strict";
+
+ CodeMirror.defineOption("foldGutter", false, function(cm, val, old) {
+ if (old && old != CodeMirror.Init) {
+ cm.clearGutter(cm.state.foldGutter.options.gutter);
+ cm.state.foldGutter = null;
+ cm.off("gutterClick", onGutterClick);
+ cm.off("changes", onChange);
+ cm.off("viewportChange", onViewportChange);
+ cm.off("fold", onFold);
+ cm.off("unfold", onFold);
+ cm.off("swapDoc", onChange);
+ }
+ if (val) {
+ cm.state.foldGutter = new State(parseOptions(val));
+ updateInViewport(cm);
+ cm.on("gutterClick", onGutterClick);
+ cm.on("changes", onChange);
+ cm.on("viewportChange", onViewportChange);
+ cm.on("fold", onFold);
+ cm.on("unfold", onFold);
+ cm.on("swapDoc", onChange);
+ }
+ });
+
+ var Pos = CodeMirror.Pos;
+
+ function State(options) {
+ this.options = options;
+ this.from = this.to = 0;
+ }
+
+ function parseOptions(opts) {
+ if (opts === true) opts = {};
+ if (opts.gutter == null) opts.gutter = "CodeMirror-foldgutter";
+ if (opts.indicatorOpen == null) opts.indicatorOpen = "CodeMirror-foldgutter-open";
+ if (opts.indicatorFolded == null) opts.indicatorFolded = "CodeMirror-foldgutter-folded";
+ return opts;
+ }
+
+ function isFolded(cm, line) {
+ var marks = cm.findMarks(Pos(line, 0), Pos(line + 1, 0));
+ for (var i = 0; i < marks.length; ++i) {
+ if (marks[i].__isFold) {
+ var fromPos = marks[i].find(-1);
+ if (fromPos && fromPos.line === line)
+ return marks[i];
+ }
+ }
+ }
+
+ function marker(spec) {
+ if (typeof spec == "string") {
+ var elt = document.createElement("div");
+ elt.className = spec + " CodeMirror-guttermarker-subtle";
+ return elt;
+ } else {
+ return spec.cloneNode(true);
+ }
+ }
+
+ function updateFoldInfo(cm, from, to) {
+ var opts = cm.state.foldGutter.options, cur = from - 1;
+ var minSize = cm.foldOption(opts, "minFoldSize");
+ var func = cm.foldOption(opts, "rangeFinder");
+ // we can reuse the built-in indicator element if its className matches the new state
+ var clsFolded = typeof opts.indicatorFolded == "string" && classTest(opts.indicatorFolded);
+ var clsOpen = typeof opts.indicatorOpen == "string" && classTest(opts.indicatorOpen);
+ cm.eachLine(from, to, function(line) {
+ ++cur;
+ var mark = null;
+ var old = line.gutterMarkers;
+ if (old) old = old[opts.gutter];
+ if (isFolded(cm, cur)) {
+ if (clsFolded && old && clsFolded.test(old.className)) return;
+ mark = marker(opts.indicatorFolded);
+ } else {
+ var pos = Pos(cur, 0);
+ var range = func && func(cm, pos);
+ if (range && range.to.line - range.from.line >= minSize) {
+ if (clsOpen && old && clsOpen.test(old.className)) return;
+ mark = marker(opts.indicatorOpen);
+ }
+ }
+ if (!mark && !old) return;
+ cm.setGutterMarker(line, opts.gutter, mark);
+ });
+ }
+
+ // copied from CodeMirror/src/util/dom.js
+ function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") }
+
+ function updateInViewport(cm) {
+ var vp = cm.getViewport(), state = cm.state.foldGutter;
+ if (!state) return;
+ cm.operation(function() {
+ updateFoldInfo(cm, vp.from, vp.to);
+ });
+ state.from = vp.from; state.to = vp.to;
+ }
+
+ function onGutterClick(cm, line, gutter) {
+ var state = cm.state.foldGutter;
+ if (!state) return;
+ var opts = state.options;
+ if (gutter != opts.gutter) return;
+ var folded = isFolded(cm, line);
+ if (folded) folded.clear();
+ else cm.foldCode(Pos(line, 0), opts);
+ }
+
+ function onChange(cm) {
+ var state = cm.state.foldGutter;
+ if (!state) return;
+ var opts = state.options;
+ state.from = state.to = 0;
+ clearTimeout(state.changeUpdate);
+ state.changeUpdate = setTimeout(function() { updateInViewport(cm); }, opts.foldOnChangeTimeSpan || 600);
+ }
+
+ function onViewportChange(cm) {
+ var state = cm.state.foldGutter;
+ if (!state) return;
+ var opts = state.options;
+ clearTimeout(state.changeUpdate);
+ state.changeUpdate = setTimeout(function() {
+ var vp = cm.getViewport();
+ if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) {
+ updateInViewport(cm);
+ } else {
+ cm.operation(function() {
+ if (vp.from < state.from) {
+ updateFoldInfo(cm, vp.from, state.from);
+ state.from = vp.from;
+ }
+ if (vp.to > state.to) {
+ updateFoldInfo(cm, state.to, vp.to);
+ state.to = vp.to;
+ }
+ });
+ }
+ }, opts.updateViewportTimeSpan || 400);
+ }
+
+ function onFold(cm, from) {
+ var state = cm.state.foldGutter;
+ if (!state) return;
+ var line = from.line;
+ if (line >= state.from && line < state.to)
+ updateFoldInfo(cm, line, line + 1);
+ }
+});
diff --git a/src/lib/codemirror/addon/hint/show-hint.css b/src/lib/codemirror/addon/hint/show-hint.css
new file mode 100644
index 0000000..5617ccc
--- /dev/null
+++ b/src/lib/codemirror/addon/hint/show-hint.css
@@ -0,0 +1,36 @@
+.CodeMirror-hints {
+ position: absolute;
+ z-index: 10;
+ overflow: hidden;
+ list-style: none;
+
+ margin: 0;
+ padding: 2px;
+
+ -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
+ -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
+ box-shadow: 2px 3px 5px rgba(0,0,0,.2);
+ border-radius: 3px;
+ border: 1px solid silver;
+
+ background: white;
+ font-size: 90%;
+ font-family: monospace;
+
+ max-height: 20em;
+ overflow-y: auto;
+}
+
+.CodeMirror-hint {
+ margin: 0;
+ padding: 0 4px;
+ border-radius: 2px;
+ white-space: pre;
+ color: black;
+ cursor: pointer;
+}
+
+li.CodeMirror-hint-active {
+ background: #08f;
+ color: white;
+}
diff --git a/src/lib/codemirror/addon/hint/show-hint.js b/src/lib/codemirror/addon/hint/show-hint.js
new file mode 100644
index 0000000..a9f2ded
--- /dev/null
+++ b/src/lib/codemirror/addon/hint/show-hint.js
@@ -0,0 +1,509 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+// declare global: DOMRect
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+ "use strict";
+
+ var HINT_ELEMENT_CLASS = "CodeMirror-hint";
+ var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active";
+
+ // This is the old interface, kept around for now to stay
+ // backwards-compatible.
+ CodeMirror.showHint = function(cm, getHints, options) {
+ if (!getHints) return cm.showHint(options);
+ if (options && options.async) getHints.async = true;
+ var newOpts = {hint: getHints};
+ if (options) for (var prop in options) newOpts[prop] = options[prop];
+ return cm.showHint(newOpts);
+ };
+
+ CodeMirror.defineExtension("showHint", function(options) {
+ options = parseOptions(this, this.getCursor("start"), options);
+ var selections = this.listSelections()
+ if (selections.length > 1) return;
+ // By default, don't allow completion when something is selected.
+ // A hint function can have a `supportsSelection` property to
+ // indicate that it can handle selections.
+ if (this.somethingSelected()) {
+ if (!options.hint.supportsSelection) return;
+ // Don't try with cross-line selections
+ for (var i = 0; i < selections.length; i++)
+ if (selections[i].head.line != selections[i].anchor.line) return;
+ }
+
+ if (this.state.completionActive) this.state.completionActive.close();
+ var completion = this.state.completionActive = new Completion(this, options);
+ if (!completion.options.hint) return;
+
+ CodeMirror.signal(this, "startCompletion", this);
+ completion.update(true);
+ });
+
+ CodeMirror.defineExtension("closeHint", function() {
+ if (this.state.completionActive) this.state.completionActive.close()
+ })
+
+ function Completion(cm, options) {
+ this.cm = cm;
+ this.options = options;
+ this.widget = null;
+ this.debounce = 0;
+ this.tick = 0;
+ this.startPos = this.cm.getCursor("start");
+ this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length;
+
+ if (this.options.updateOnCursorActivity) {
+ var self = this;
+ cm.on("cursorActivity", this.activityFunc = function() { self.cursorActivity(); });
+ }
+ }
+
+ var requestAnimationFrame = window.requestAnimationFrame || function(fn) {
+ return setTimeout(fn, 1000/60);
+ };
+ var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout;
+
+ Completion.prototype = {
+ close: function() {
+ if (!this.active()) return;
+ this.cm.state.completionActive = null;
+ this.tick = null;
+ if (this.options.updateOnCursorActivity) {
+ this.cm.off("cursorActivity", this.activityFunc);
+ }
+
+ if (this.widget && this.data) CodeMirror.signal(this.data, "close");
+ if (this.widget) this.widget.close();
+ CodeMirror.signal(this.cm, "endCompletion", this.cm);
+ },
+
+ active: function() {
+ return this.cm.state.completionActive == this;
+ },
+
+ pick: function(data, i) {
+ var completion = data.list[i], self = this;
+ this.cm.operation(function() {
+ if (completion.hint)
+ completion.hint(self.cm, data, completion);
+ else
+ self.cm.replaceRange(getText(completion), completion.from || data.from,
+ completion.to || data.to, "complete");
+ CodeMirror.signal(data, "pick", completion);
+ self.cm.scrollIntoView();
+ });
+ if (this.options.closeOnPick) {
+ this.close();
+ }
+ },
+
+ cursorActivity: function() {
+ if (this.debounce) {
+ cancelAnimationFrame(this.debounce);
+ this.debounce = 0;
+ }
+
+ var identStart = this.startPos;
+ if(this.data) {
+ identStart = this.data.from;
+ }
+
+ var pos = this.cm.getCursor(), line = this.cm.getLine(pos.line);
+ if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch ||
+ pos.ch < identStart.ch || this.cm.somethingSelected() ||
+ (!pos.ch || this.options.closeCharacters.test(line.charAt(pos.ch - 1)))) {
+ this.close();
+ } else {
+ var self = this;
+ this.debounce = requestAnimationFrame(function() {self.update();});
+ if (this.widget) this.widget.disable();
+ }
+ },
+
+ update: function(first) {
+ if (this.tick == null) return
+ var self = this, myTick = ++this.tick
+ fetchHints(this.options.hint, this.cm, this.options, function(data) {
+ if (self.tick == myTick) self.finishUpdate(data, first)
+ })
+ },
+
+ finishUpdate: function(data, first) {
+ if (this.data) CodeMirror.signal(this.data, "update");
+
+ var picked = (this.widget && this.widget.picked) || (first && this.options.completeSingle);
+ if (this.widget) this.widget.close();
+
+ this.data = data;
+
+ if (data && data.list.length) {
+ if (picked && data.list.length == 1) {
+ this.pick(data, 0);
+ } else {
+ this.widget = new Widget(this, data);
+ CodeMirror.signal(data, "shown");
+ }
+ }
+ }
+ };
+
+ function parseOptions(cm, pos, options) {
+ var editor = cm.options.hintOptions;
+ var out = {};
+ for (var prop in defaultOptions) out[prop] = defaultOptions[prop];
+ if (editor) for (var prop in editor)
+ if (editor[prop] !== undefined) out[prop] = editor[prop];
+ if (options) for (var prop in options)
+ if (options[prop] !== undefined) out[prop] = options[prop];
+ if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos)
+ return out;
+ }
+
+ function getText(completion) {
+ if (typeof completion == "string") return completion;
+ else return completion.text;
+ }
+
+ function buildKeyMap(completion, handle) {
+ var baseMap = {
+ Up: function() {handle.moveFocus(-1);},
+ Down: function() {handle.moveFocus(1);},
+ PageUp: function() {handle.moveFocus(-handle.menuSize() + 1, true);},
+ PageDown: function() {handle.moveFocus(handle.menuSize() - 1, true);},
+ Home: function() {handle.setFocus(0);},
+ End: function() {handle.setFocus(handle.length - 1);},
+ Enter: handle.pick,
+ Tab: handle.pick,
+ Esc: handle.close
+ };
+
+ var mac = /Mac/.test(navigator.platform);
+
+ if (mac) {
+ baseMap["Ctrl-P"] = function() {handle.moveFocus(-1);};
+ baseMap["Ctrl-N"] = function() {handle.moveFocus(1);};
+ }
+
+ var custom = completion.options.customKeys;
+ var ourMap = custom ? {} : baseMap;
+ function addBinding(key, val) {
+ var bound;
+ if (typeof val != "string")
+ bound = function(cm) { return val(cm, handle); };
+ // This mechanism is deprecated
+ else if (baseMap.hasOwnProperty(val))
+ bound = baseMap[val];
+ else
+ bound = val;
+ ourMap[key] = bound;
+ }
+ if (custom)
+ for (var key in custom) if (custom.hasOwnProperty(key))
+ addBinding(key, custom[key]);
+ var extra = completion.options.extraKeys;
+ if (extra)
+ for (var key in extra) if (extra.hasOwnProperty(key))
+ addBinding(key, extra[key]);
+ return ourMap;
+ }
+
+ function getHintElement(hintsElement, el) {
+ while (el && el != hintsElement) {
+ if (el.nodeName.toUpperCase() === "LI" && el.parentNode == hintsElement) return el;
+ el = el.parentNode;
+ }
+ }
+
+ function Widget(completion, data) {
+ this.completion = completion;
+ this.data = data;
+ this.picked = false;
+ var widget = this, cm = completion.cm;
+ var ownerDocument = cm.getInputField().ownerDocument;
+ var parentWindow = ownerDocument.defaultView || ownerDocument.parentWindow;
+
+ var hints = this.hints = ownerDocument.createElement("ul");
+ var theme = completion.cm.options.theme;
+ hints.className = "CodeMirror-hints " + theme;
+ this.selectedHint = data.selectedHint || 0;
+
+ var completions = data.list;
+ for (var i = 0; i < completions.length; ++i) {
+ var elt = hints.appendChild(ownerDocument.createElement("li")), cur = completions[i];
+ var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? "" : " " + ACTIVE_HINT_ELEMENT_CLASS);
+ if (cur.className != null) className = cur.className + " " + className;
+ elt.className = className;
+ if (cur.render) cur.render(elt, data, cur);
+ else elt.appendChild(ownerDocument.createTextNode(cur.displayText || getText(cur)));
+ elt.hintId = i;
+ }
+
+ var container = completion.options.container || ownerDocument.body;
+ var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null);
+ var left = pos.left, top = pos.bottom, below = true;
+ var offsetLeft = 0, offsetTop = 0;
+ if (container !== ownerDocument.body) {
+ // We offset the cursor position because left and top are relative to the offsetParent's top left corner.
+ var isContainerPositioned = ['absolute', 'relative', 'fixed'].indexOf(parentWindow.getComputedStyle(container).position) !== -1;
+ var offsetParent = isContainerPositioned ? container : container.offsetParent;
+ var offsetParentPosition = offsetParent.getBoundingClientRect();
+ var bodyPosition = ownerDocument.body.getBoundingClientRect();
+ offsetLeft = (offsetParentPosition.left - bodyPosition.left - offsetParent.scrollLeft);
+ offsetTop = (offsetParentPosition.top - bodyPosition.top - offsetParent.scrollTop);
+ }
+ hints.style.left = (left - offsetLeft) + "px";
+ hints.style.top = (top - offsetTop) + "px";
+
+ // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor.
+ var winW = parentWindow.innerWidth || Math.max(ownerDocument.body.offsetWidth, ownerDocument.documentElement.offsetWidth);
+ var winH = parentWindow.innerHeight || Math.max(ownerDocument.body.offsetHeight, ownerDocument.documentElement.offsetHeight);
+ container.appendChild(hints);
+
+ var box = completion.options.moveOnOverlap ? hints.getBoundingClientRect() : new DOMRect();
+ var scrolls = completion.options.paddingForScrollbar ? hints.scrollHeight > hints.clientHeight + 1 : false;
+
+ // Compute in the timeout to avoid reflow on init
+ var startScroll;
+ setTimeout(function() { startScroll = cm.getScrollInfo(); });
+
+ var overlapY = box.bottom - winH;
+ if (overlapY > 0) {
+ var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top);
+ if (curTop - height > 0) { // Fits above cursor
+ hints.style.top = (top = pos.top - height - offsetTop) + "px";
+ below = false;
+ } else if (height > winH) {
+ hints.style.height = (winH - 5) + "px";
+ hints.style.top = (top = pos.bottom - box.top - offsetTop) + "px";
+ var cursor = cm.getCursor();
+ if (data.from.ch != cursor.ch) {
+ pos = cm.cursorCoords(cursor);
+ hints.style.left = (left = pos.left - offsetLeft) + "px";
+ box = hints.getBoundingClientRect();
+ }
+ }
+ }
+ var overlapX = box.right - winW;
+ if (overlapX > 0) {
+ if (box.right - box.left > winW) {
+ hints.style.width = (winW - 5) + "px";
+ overlapX -= (box.right - box.left) - winW;
+ }
+ hints.style.left = (left = pos.left - overlapX - offsetLeft) + "px";
+ }
+ if (scrolls) for (var node = hints.firstChild; node; node = node.nextSibling)
+ node.style.paddingRight = cm.display.nativeBarWidth + "px"
+
+ cm.addKeyMap(this.keyMap = buildKeyMap(completion, {
+ moveFocus: function(n, avoidWrap) { widget.changeActive(widget.selectedHint + n, avoidWrap); },
+ setFocus: function(n) { widget.changeActive(n); },
+ menuSize: function() { return widget.screenAmount(); },
+ length: completions.length,
+ close: function() { completion.close(); },
+ pick: function() { widget.pick(); },
+ data: data
+ }));
+
+ if (completion.options.closeOnUnfocus) {
+ var closingOnBlur;
+ cm.on("blur", this.onBlur = function() { closingOnBlur = setTimeout(function() { completion.close(); }, 100); });
+ cm.on("focus", this.onFocus = function() { clearTimeout(closingOnBlur); });
+ }
+
+ cm.on("scroll", this.onScroll = function() {
+ var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect();
+ var newTop = top + startScroll.top - curScroll.top;
+ var point = newTop - (parentWindow.pageYOffset || (ownerDocument.documentElement || ownerDocument.body).scrollTop);
+ if (!below) point += hints.offsetHeight;
+ if (point <= editor.top || point >= editor.bottom) return completion.close();
+ hints.style.top = newTop + "px";
+ hints.style.left = (left + startScroll.left - curScroll.left) + "px";
+ });
+
+ CodeMirror.on(hints, "dblclick", function(e) {
+ var t = getHintElement(hints, e.target || e.srcElement);
+ if (t && t.hintId != null) {widget.changeActive(t.hintId); widget.pick();}
+ });
+
+ CodeMirror.on(hints, "click", function(e) {
+ var t = getHintElement(hints, e.target || e.srcElement);
+ if (t && t.hintId != null) {
+ widget.changeActive(t.hintId);
+ if (completion.options.completeOnSingleClick) widget.pick();
+ }
+ });
+
+ CodeMirror.on(hints, "mousedown", function() {
+ setTimeout(function(){cm.focus();}, 20);
+ });
+
+ // The first hint doesn't need to be scrolled to on init
+ var selectedHintRange = this.getSelectedHintRange();
+ if (selectedHintRange.from !== 0 || selectedHintRange.to !== 0) {
+ this.scrollToActive();
+ }
+
+ CodeMirror.signal(data, "select", completions[this.selectedHint], hints.childNodes[this.selectedHint]);
+ return true;
+ }
+
+ Widget.prototype = {
+ close: function() {
+ if (this.completion.widget != this) return;
+ this.completion.widget = null;
+ this.hints.parentNode.removeChild(this.hints);
+ this.completion.cm.removeKeyMap(this.keyMap);
+
+ var cm = this.completion.cm;
+ if (this.completion.options.closeOnUnfocus) {
+ cm.off("blur", this.onBlur);
+ cm.off("focus", this.onFocus);
+ }
+ cm.off("scroll", this.onScroll);
+ },
+
+ disable: function() {
+ this.completion.cm.removeKeyMap(this.keyMap);
+ var widget = this;
+ this.keyMap = {Enter: function() { widget.picked = true; }};
+ this.completion.cm.addKeyMap(this.keyMap);
+ },
+
+ pick: function() {
+ this.completion.pick(this.data, this.selectedHint);
+ },
+
+ changeActive: function(i, avoidWrap) {
+ if (i >= this.data.list.length)
+ i = avoidWrap ? this.data.list.length - 1 : 0;
+ else if (i < 0)
+ i = avoidWrap ? 0 : this.data.list.length - 1;
+ if (this.selectedHint == i) return;
+ var node = this.hints.childNodes[this.selectedHint];
+ if (node) node.className = node.className.replace(" " + ACTIVE_HINT_ELEMENT_CLASS, "");
+ node = this.hints.childNodes[this.selectedHint = i];
+ node.className += " " + ACTIVE_HINT_ELEMENT_CLASS;
+ this.scrollToActive()
+ CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node);
+ },
+
+ scrollToActive: function() {
+ var selectedHintRange = this.getSelectedHintRange();
+ var node1 = this.hints.childNodes[selectedHintRange.from];
+ var node2 = this.hints.childNodes[selectedHintRange.to];
+ var firstNode = this.hints.firstChild;
+ if (node1.offsetTop < this.hints.scrollTop)
+ this.hints.scrollTop = node1.offsetTop - firstNode.offsetTop;
+ else if (node2.offsetTop + node2.offsetHeight > this.hints.scrollTop + this.hints.clientHeight)
+ this.hints.scrollTop = node2.offsetTop + node2.offsetHeight - this.hints.clientHeight + firstNode.offsetTop;
+ },
+
+ screenAmount: function() {
+ return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1;
+ },
+
+ getSelectedHintRange: function() {
+ var margin = this.completion.options.scrollMargin || 0;
+ return {
+ from: Math.max(0, this.selectedHint - margin),
+ to: Math.min(this.data.list.length - 1, this.selectedHint + margin),
+ };
+ }
+ };
+
+ function applicableHelpers(cm, helpers) {
+ if (!cm.somethingSelected()) return helpers
+ var result = []
+ for (var i = 0; i < helpers.length; i++)
+ if (helpers[i].supportsSelection) result.push(helpers[i])
+ return result
+ }
+
+ function fetchHints(hint, cm, options, callback) {
+ if (hint.async) {
+ hint(cm, callback, options)
+ } else {
+ var result = hint(cm, options)
+ if (result && result.then) result.then(callback)
+ else callback(result)
+ }
+ }
+
+ function resolveAutoHints(cm, pos) {
+ var helpers = cm.getHelpers(pos, "hint"), words
+ if (helpers.length) {
+ var resolved = function(cm, callback, options) {
+ var app = applicableHelpers(cm, helpers);
+ function run(i) {
+ if (i == app.length) return callback(null)
+ fetchHints(app[i], cm, options, function(result) {
+ if (result && result.list.length > 0) callback(result)
+ else run(i + 1)
+ })
+ }
+ run(0)
+ }
+ resolved.async = true
+ resolved.supportsSelection = true
+ return resolved
+ } else if (words = cm.getHelper(cm.getCursor(), "hintWords")) {
+ return function(cm) { return CodeMirror.hint.fromList(cm, {words: words}) }
+ } else if (CodeMirror.hint.anyword) {
+ return function(cm, options) { return CodeMirror.hint.anyword(cm, options) }
+ } else {
+ return function() {}
+ }
+ }
+
+ CodeMirror.registerHelper("hint", "auto", {
+ resolve: resolveAutoHints
+ });
+
+ CodeMirror.registerHelper("hint", "fromList", function(cm, options) {
+ var cur = cm.getCursor(), token = cm.getTokenAt(cur)
+ var term, from = CodeMirror.Pos(cur.line, token.start), to = cur
+ if (token.start < cur.ch && /\w/.test(token.string.charAt(cur.ch - token.start - 1))) {
+ term = token.string.substr(0, cur.ch - token.start)
+ } else {
+ term = ""
+ from = cur
+ }
+ var found = [];
+ for (var i = 0; i < options.words.length; i++) {
+ var word = options.words[i];
+ if (word.slice(0, term.length) == term)
+ found.push(word);
+ }
+
+ if (found.length) return {list: found, from: from, to: to};
+ });
+
+ CodeMirror.commands.autocomplete = CodeMirror.showHint;
+
+ var defaultOptions = {
+ hint: CodeMirror.hint.auto,
+ completeSingle: true,
+ alignWithWord: true,
+ closeCharacters: /[\s()\[\]{};:>,]/,
+ closeOnPick: true,
+ closeOnUnfocus: true,
+ updateOnCursorActivity: true,
+ completeOnSingleClick: true,
+ container: null,
+ customKeys: null,
+ extraKeys: null,
+ paddingForScrollbar: true,
+ moveOnOverlap: true,
+ };
+
+ CodeMirror.defineOption("hintOptions", null);
+});
diff --git a/src/lib/codemirror/addon/merge/merge.css b/src/lib/codemirror/addon/merge/merge.css
new file mode 100644
index 0000000..dadd7f5
--- /dev/null
+++ b/src/lib/codemirror/addon/merge/merge.css
@@ -0,0 +1,119 @@
+.CodeMirror-merge {
+ position: relative;
+ border: 1px solid #ddd;
+ white-space: pre;
+}
+
+.CodeMirror-merge, .CodeMirror-merge .CodeMirror {
+ height: 350px;
+}
+
+.CodeMirror-merge-2pane .CodeMirror-merge-pane { width: 47%; }
+.CodeMirror-merge-2pane .CodeMirror-merge-gap { width: 6%; }
+.CodeMirror-merge-3pane .CodeMirror-merge-pane { width: 31%; }
+.CodeMirror-merge-3pane .CodeMirror-merge-gap { width: 3.5%; }
+
+.CodeMirror-merge-pane {
+ display: inline-block;
+ white-space: normal;
+ vertical-align: top;
+}
+.CodeMirror-merge-pane-rightmost {
+ position: absolute;
+ right: 0px;
+ z-index: 1;
+}
+
+.CodeMirror-merge-gap {
+ z-index: 2;
+ display: inline-block;
+ height: 100%;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ overflow: hidden;
+ border-left: 1px solid #ddd;
+ border-right: 1px solid #ddd;
+ position: relative;
+ background: #f8f8f8;
+}
+
+.CodeMirror-merge-scrolllock-wrap {
+ position: absolute;
+ bottom: 0; left: 50%;
+}
+.CodeMirror-merge-scrolllock {
+ position: relative;
+ left: -50%;
+ cursor: pointer;
+ color: #555;
+ line-height: 1;
+}
+.CodeMirror-merge-scrolllock:after {
+ content: "\21db\00a0\00a0\21da";
+}
+.CodeMirror-merge-scrolllock.CodeMirror-merge-scrolllock-enabled:after {
+ content: "\21db\21da";
+}
+
+.CodeMirror-merge-copybuttons-left, .CodeMirror-merge-copybuttons-right {
+ position: absolute;
+ left: 0; top: 0;
+ right: 0; bottom: 0;
+ line-height: 1;
+}
+
+.CodeMirror-merge-copy {
+ position: absolute;
+ cursor: pointer;
+ color: #44c;
+ z-index: 3;
+}
+
+.CodeMirror-merge-copy-reverse {
+ position: absolute;
+ cursor: pointer;
+ color: #44c;
+}
+
+.CodeMirror-merge-copybuttons-left .CodeMirror-merge-copy { left: 2px; }
+.CodeMirror-merge-copybuttons-right .CodeMirror-merge-copy { right: 2px; }
+
+.CodeMirror-merge-r-inserted, .CodeMirror-merge-l-inserted {
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12MwuCXy3+CWyH8GBgYGJgYkAABZbAQ9ELXurwAAAABJRU5ErkJggg==);
+ background-position: bottom left;
+ background-repeat: repeat-x;
+}
+
+.CodeMirror-merge-r-deleted, .CodeMirror-merge-l-deleted {
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12M4Kyb2/6yY2H8GBgYGJgYkAABURgPz6Ks7wQAAAABJRU5ErkJggg==);
+ background-position: bottom left;
+ background-repeat: repeat-x;
+}
+
+.CodeMirror-merge-r-chunk { background: #ffffe0; }
+.CodeMirror-merge-r-chunk-start { border-top: 1px solid #ee8; }
+.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #ee8; }
+.CodeMirror-merge-r-connect { fill: #ffffe0; stroke: #ee8; stroke-width: 1px; }
+
+.CodeMirror-merge-l-chunk { background: #eef; }
+.CodeMirror-merge-l-chunk-start { border-top: 1px solid #88e; }
+.CodeMirror-merge-l-chunk-end { border-bottom: 1px solid #88e; }
+.CodeMirror-merge-l-connect { fill: #eef; stroke: #88e; stroke-width: 1px; }
+
+.CodeMirror-merge-l-chunk.CodeMirror-merge-r-chunk { background: #dfd; }
+.CodeMirror-merge-l-chunk-start.CodeMirror-merge-r-chunk-start { border-top: 1px solid #4e4; }
+.CodeMirror-merge-l-chunk-end.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #4e4; }
+
+.CodeMirror-merge-collapsed-widget:before {
+ content: "(...)";
+}
+.CodeMirror-merge-collapsed-widget {
+ cursor: pointer;
+ color: #88b;
+ background: #eef;
+ border: 1px solid #ddf;
+ font-size: 90%;
+ padding: 0 3px;
+ border-radius: 4px;
+}
+.CodeMirror-merge-collapsed-line .CodeMirror-gutter-elt { display: none; }
diff --git a/src/lib/codemirror/addon/merge/merge.js b/src/lib/codemirror/addon/merge/merge.js
new file mode 100644
index 0000000..827edb7
--- /dev/null
+++ b/src/lib/codemirror/addon/merge/merge.js
@@ -0,0 +1,1006 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+// declare global: diff_match_patch, DIFF_INSERT, DIFF_DELETE, DIFF_EQUAL
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror")); // Note non-packaged dependency diff_match_patch
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror", "diff_match_patch"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+ "use strict";
+ var Pos = CodeMirror.Pos;
+ var svgNS = "http://www.w3.org/2000/svg";
+
+ function DiffView(mv, type) {
+ this.mv = mv;
+ this.type = type;
+ this.classes = type == "left"
+ ? {chunk: "CodeMirror-merge-l-chunk",
+ start: "CodeMirror-merge-l-chunk-start",
+ end: "CodeMirror-merge-l-chunk-end",
+ insert: "CodeMirror-merge-l-inserted",
+ del: "CodeMirror-merge-l-deleted",
+ connect: "CodeMirror-merge-l-connect"}
+ : {chunk: "CodeMirror-merge-r-chunk",
+ start: "CodeMirror-merge-r-chunk-start",
+ end: "CodeMirror-merge-r-chunk-end",
+ insert: "CodeMirror-merge-r-inserted",
+ del: "CodeMirror-merge-r-deleted",
+ connect: "CodeMirror-merge-r-connect"};
+ }
+
+ DiffView.prototype = {
+ constructor: DiffView,
+ init: function(pane, orig, options) {
+ this.edit = this.mv.edit;
+ ;(this.edit.state.diffViews || (this.edit.state.diffViews = [])).push(this);
+ this.orig = CodeMirror(pane, copyObj({value: orig, readOnly: !this.mv.options.allowEditingOriginals}, copyObj(options)));
+ if (this.mv.options.connect == "align") {
+ if (!this.edit.state.trackAlignable) this.edit.state.trackAlignable = new TrackAlignable(this.edit)
+ this.orig.state.trackAlignable = new TrackAlignable(this.orig)
+ }
+ this.lockButton.title = this.edit.phrase("Toggle locked scrolling");
+
+ this.orig.state.diffViews = [this];
+ var classLocation = options.chunkClassLocation || "background";
+ if (Object.prototype.toString.call(classLocation) != "[object Array]") classLocation = [classLocation]
+ this.classes.classLocation = classLocation
+
+ this.diff = getDiff(asString(orig), asString(options.value), this.mv.options.ignoreWhitespace);
+ this.chunks = getChunks(this.diff);
+ this.diffOutOfDate = this.dealigned = false;
+ this.needsScrollSync = null
+
+ this.showDifferences = options.showDifferences !== false;
+ },
+ registerEvents: function(otherDv) {
+ this.forceUpdate = registerUpdate(this);
+ setScrollLock(this, true, false);
+ registerScroll(this, otherDv);
+ },
+ setShowDifferences: function(val) {
+ val = val !== false;
+ if (val != this.showDifferences) {
+ this.showDifferences = val;
+ this.forceUpdate("full");
+ }
+ }
+ };
+
+ function ensureDiff(dv) {
+ if (dv.diffOutOfDate) {
+ dv.diff = getDiff(dv.orig.getValue(), dv.edit.getValue(), dv.mv.options.ignoreWhitespace);
+ dv.chunks = getChunks(dv.diff);
+ dv.diffOutOfDate = false;
+ CodeMirror.signal(dv.edit, "updateDiff", dv.diff);
+ }
+ }
+
+ var updating = false;
+ function registerUpdate(dv) {
+ var edit = {from: 0, to: 0, marked: []};
+ var orig = {from: 0, to: 0, marked: []};
+ var debounceChange, updatingFast = false;
+ function update(mode) {
+ updating = true;
+ updatingFast = false;
+ if (mode == "full") {
+ if (dv.svg) clear(dv.svg);
+ if (dv.copyButtons) clear(dv.copyButtons);
+ clearMarks(dv.edit, edit.marked, dv.classes);
+ clearMarks(dv.orig, orig.marked, dv.classes);
+ edit.from = edit.to = orig.from = orig.to = 0;
+ }
+ ensureDiff(dv);
+ if (dv.showDifferences) {
+ updateMarks(dv.edit, dv.diff, edit, DIFF_INSERT, dv.classes);
+ updateMarks(dv.orig, dv.diff, orig, DIFF_DELETE, dv.classes);
+ }
+
+ if (dv.mv.options.connect == "align")
+ alignChunks(dv);
+ makeConnections(dv);
+ if (dv.needsScrollSync != null) syncScroll(dv, dv.needsScrollSync)
+
+ updating = false;
+ }
+ function setDealign(fast) {
+ if (updating) return;
+ dv.dealigned = true;
+ set(fast);
+ }
+ function set(fast) {
+ if (updating || updatingFast) return;
+ clearTimeout(debounceChange);
+ if (fast === true) updatingFast = true;
+ debounceChange = setTimeout(update, fast === true ? 20 : 250);
+ }
+ function change(_cm, change) {
+ if (!dv.diffOutOfDate) {
+ dv.diffOutOfDate = true;
+ edit.from = edit.to = orig.from = orig.to = 0;
+ }
+ // Update faster when a line was added/removed
+ setDealign(change.text.length - 1 != change.to.line - change.from.line);
+ }
+ function swapDoc() {
+ dv.diffOutOfDate = true;
+ dv.dealigned = true;
+ update("full");
+ }
+ dv.edit.on("change", change);
+ dv.orig.on("change", change);
+ dv.edit.on("swapDoc", swapDoc);
+ dv.orig.on("swapDoc", swapDoc);
+ if (dv.mv.options.connect == "align") {
+ CodeMirror.on(dv.edit.state.trackAlignable, "realign", setDealign)
+ CodeMirror.on(dv.orig.state.trackAlignable, "realign", setDealign)
+ }
+ dv.edit.on("viewportChange", function() { set(false); });
+ dv.orig.on("viewportChange", function() { set(false); });
+ update();
+ return update;
+ }
+
+ function registerScroll(dv, otherDv) {
+ dv.edit.on("scroll", function() {
+ syncScroll(dv, true) && makeConnections(dv);
+ });
+ dv.orig.on("scroll", function() {
+ syncScroll(dv, false) && makeConnections(dv);
+ if (otherDv) syncScroll(otherDv, true) && makeConnections(otherDv);
+ });
+ }
+
+ function syncScroll(dv, toOrig) {
+ // Change handler will do a refresh after a timeout when diff is out of date
+ if (dv.diffOutOfDate) {
+ if (dv.lockScroll && dv.needsScrollSync == null) dv.needsScrollSync = toOrig
+ return false
+ }
+ dv.needsScrollSync = null
+ if (!dv.lockScroll) return true;
+ var editor, other, now = +new Date;
+ if (toOrig) { editor = dv.edit; other = dv.orig; }
+ else { editor = dv.orig; other = dv.edit; }
+ // Don't take action if the position of this editor was recently set
+ // (to prevent feedback loops)
+ if (editor.state.scrollSetBy == dv && (editor.state.scrollSetAt || 0) + 250 > now) return false;
+
+ var sInfo = editor.getScrollInfo();
+ if (dv.mv.options.connect == "align") {
+ targetPos = sInfo.top;
+ } else {
+ var halfScreen = .5 * sInfo.clientHeight, midY = sInfo.top + halfScreen;
+ var mid = editor.lineAtHeight(midY, "local");
+ var around = chunkBoundariesAround(dv.chunks, mid, toOrig);
+ var off = getOffsets(editor, toOrig ? around.edit : around.orig);
+ var offOther = getOffsets(other, toOrig ? around.orig : around.edit);
+ var ratio = (midY - off.top) / (off.bot - off.top);
+ var targetPos = (offOther.top - halfScreen) + ratio * (offOther.bot - offOther.top);
+
+ var botDist, mix;
+ // Some careful tweaking to make sure no space is left out of view
+ // when scrolling to top or bottom.
+ if (targetPos > sInfo.top && (mix = sInfo.top / halfScreen) < 1) {
+ targetPos = targetPos * mix + sInfo.top * (1 - mix);
+ } else if ((botDist = sInfo.height - sInfo.clientHeight - sInfo.top) < halfScreen) {
+ var otherInfo = other.getScrollInfo();
+ var botDistOther = otherInfo.height - otherInfo.clientHeight - targetPos;
+ if (botDistOther > botDist && (mix = botDist / halfScreen) < 1)
+ targetPos = targetPos * mix + (otherInfo.height - otherInfo.clientHeight - botDist) * (1 - mix);
+ }
+ }
+
+ other.scrollTo(sInfo.left, targetPos);
+ other.state.scrollSetAt = now;
+ other.state.scrollSetBy = dv;
+ return true;
+ }
+
+ function getOffsets(editor, around) {
+ var bot = around.after;
+ if (bot == null) bot = editor.lastLine() + 1;
+ return {top: editor.heightAtLine(around.before || 0, "local"),
+ bot: editor.heightAtLine(bot, "local")};
+ }
+
+ function setScrollLock(dv, val, action) {
+ dv.lockScroll = val;
+ if (val && action != false) syncScroll(dv, DIFF_INSERT) && makeConnections(dv);
+ (val ? CodeMirror.addClass : CodeMirror.rmClass)(dv.lockButton, "CodeMirror-merge-scrolllock-enabled");
+ }
+
+ // Updating the marks for editor content
+
+ function removeClass(editor, line, classes) {
+ var locs = classes.classLocation
+ for (var i = 0; i < locs.length; i++) {
+ editor.removeLineClass(line, locs[i], classes.chunk);
+ editor.removeLineClass(line, locs[i], classes.start);
+ editor.removeLineClass(line, locs[i], classes.end);
+ }
+ }
+
+ function clearMarks(editor, arr, classes) {
+ for (var i = 0; i < arr.length; ++i) {
+ var mark = arr[i];
+ if (mark instanceof CodeMirror.TextMarker)
+ mark.clear();
+ else if (mark.parent)
+ removeClass(editor, mark, classes);
+ }
+ arr.length = 0;
+ }
+
+ // FIXME maybe add a margin around viewport to prevent too many updates
+ function updateMarks(editor, diff, state, type, classes) {
+ var vp = editor.getViewport();
+ editor.operation(function() {
+ if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) {
+ clearMarks(editor, state.marked, classes);
+ markChanges(editor, diff, type, state.marked, vp.from, vp.to, classes);
+ state.from = vp.from; state.to = vp.to;
+ } else {
+ if (vp.from < state.from) {
+ markChanges(editor, diff, type, state.marked, vp.from, state.from, classes);
+ state.from = vp.from;
+ }
+ if (vp.to > state.to) {
+ markChanges(editor, diff, type, state.marked, state.to, vp.to, classes);
+ state.to = vp.to;
+ }
+ }
+ });
+ }
+
+ function addClass(editor, lineNr, classes, main, start, end) {
+ var locs = classes.classLocation, line = editor.getLineHandle(lineNr);
+ for (var i = 0; i < locs.length; i++) {
+ if (main) editor.addLineClass(line, locs[i], classes.chunk);
+ if (start) editor.addLineClass(line, locs[i], classes.start);
+ if (end) editor.addLineClass(line, locs[i], classes.end);
+ }
+ return line;
+ }
+
+ function markChanges(editor, diff, type, marks, from, to, classes) {
+ var pos = Pos(0, 0);
+ var top = Pos(from, 0), bot = editor.clipPos(Pos(to - 1));
+ var cls = type == DIFF_DELETE ? classes.del : classes.insert;
+ function markChunk(start, end) {
+ var bfrom = Math.max(from, start), bto = Math.min(to, end);
+ for (var i = bfrom; i < bto; ++i)
+ marks.push(addClass(editor, i, classes, true, i == start, i == end - 1));
+ // When the chunk is empty, make sure a horizontal line shows up
+ if (start == end && bfrom == end && bto == end) {
+ if (bfrom)
+ marks.push(addClass(editor, bfrom - 1, classes, false, false, true));
+ else
+ marks.push(addClass(editor, bfrom, classes, false, true, false));
+ }
+ }
+
+ var chunkStart = 0, pending = false;
+ for (var i = 0; i < diff.length; ++i) {
+ var part = diff[i], tp = part[0], str = part[1];
+ if (tp == DIFF_EQUAL) {
+ var cleanFrom = pos.line + (startOfLineClean(diff, i) ? 0 : 1);
+ moveOver(pos, str);
+ var cleanTo = pos.line + (endOfLineClean(diff, i) ? 1 : 0);
+ if (cleanTo > cleanFrom) {
+ if (pending) { markChunk(chunkStart, cleanFrom); pending = false }
+ chunkStart = cleanTo;
+ }
+ } else {
+ pending = true
+ if (tp == type) {
+ var end = moveOver(pos, str, true);
+ var a = posMax(top, pos), b = posMin(bot, end);
+ if (!posEq(a, b))
+ marks.push(editor.markText(a, b, {className: cls}));
+ pos = end;
+ }
+ }
+ }
+ if (pending) markChunk(chunkStart, pos.line + 1);
+ }
+
+ // Updating the gap between editor and original
+
+ function makeConnections(dv) {
+ if (!dv.showDifferences) return;
+
+ if (dv.svg) {
+ clear(dv.svg);
+ var w = dv.gap.offsetWidth;
+ attrs(dv.svg, "width", w, "height", dv.gap.offsetHeight);
+ }
+ if (dv.copyButtons) clear(dv.copyButtons);
+
+ var vpEdit = dv.edit.getViewport(), vpOrig = dv.orig.getViewport();
+ var outerTop = dv.mv.wrap.getBoundingClientRect().top
+ var sTopEdit = outerTop - dv.edit.getScrollerElement().getBoundingClientRect().top + dv.edit.getScrollInfo().top
+ var sTopOrig = outerTop - dv.orig.getScrollerElement().getBoundingClientRect().top + dv.orig.getScrollInfo().top;
+ for (var i = 0; i < dv.chunks.length; i++) {
+ var ch = dv.chunks[i];
+ if (ch.editFrom <= vpEdit.to && ch.editTo >= vpEdit.from &&
+ ch.origFrom <= vpOrig.to && ch.origTo >= vpOrig.from)
+ drawConnectorsForChunk(dv, ch, sTopOrig, sTopEdit, w);
+ }
+ }
+
+ function getMatchingOrigLine(editLine, chunks) {
+ var editStart = 0, origStart = 0;
+ for (var i = 0; i < chunks.length; i++) {
+ var chunk = chunks[i];
+ if (chunk.editTo > editLine && chunk.editFrom <= editLine) return null;
+ if (chunk.editFrom > editLine) break;
+ editStart = chunk.editTo;
+ origStart = chunk.origTo;
+ }
+ return origStart + (editLine - editStart);
+ }
+
+ // Combines information about chunks and widgets/markers to return
+ // an array of lines, in a single editor, that probably need to be
+ // aligned with their counterparts in the editor next to it.
+ function alignableFor(cm, chunks, isOrig) {
+ var tracker = cm.state.trackAlignable
+ var start = cm.firstLine(), trackI = 0
+ var result = []
+ for (var i = 0;; i++) {
+ var chunk = chunks[i]
+ var chunkStart = !chunk ? 1e9 : isOrig ? chunk.origFrom : chunk.editFrom
+ for (; trackI < tracker.alignable.length; trackI += 2) {
+ var n = tracker.alignable[trackI] + 1
+ if (n <= start) continue
+ if (n <= chunkStart) result.push(n)
+ else break
+ }
+ if (!chunk) break
+ result.push(start = isOrig ? chunk.origTo : chunk.editTo)
+ }
+ return result
+ }
+
+ // Given information about alignable lines in two editors, fill in
+ // the result (an array of three-element arrays) to reflect the
+ // lines that need to be aligned with each other.
+ function mergeAlignable(result, origAlignable, chunks, setIndex) {
+ var rI = 0, origI = 0, chunkI = 0, diff = 0
+ outer: for (;; rI++) {
+ var nextR = result[rI], nextO = origAlignable[origI]
+ if (!nextR && nextO == null) break
+
+ var rLine = nextR ? nextR[0] : 1e9, oLine = nextO == null ? 1e9 : nextO
+ while (chunkI < chunks.length) {
+ var chunk = chunks[chunkI]
+ if (chunk.origFrom <= oLine && chunk.origTo > oLine) {
+ origI++
+ rI--
+ continue outer;
+ }
+ if (chunk.editTo > rLine) {
+ if (chunk.editFrom <= rLine) continue outer;
+ break
+ }
+ diff += (chunk.origTo - chunk.origFrom) - (chunk.editTo - chunk.editFrom)
+ chunkI++
+ }
+ if (rLine == oLine - diff) {
+ nextR[setIndex] = oLine
+ origI++
+ } else if (rLine < oLine - diff) {
+ nextR[setIndex] = rLine + diff
+ } else {
+ var record = [oLine - diff, null, null]
+ record[setIndex] = oLine
+ result.splice(rI, 0, record)
+ origI++
+ }
+ }
+ }
+
+ function findAlignedLines(dv, other) {
+ var alignable = alignableFor(dv.edit, dv.chunks, false), result = []
+ if (other) for (var i = 0, j = 0; i < other.chunks.length; i++) {
+ var n = other.chunks[i].editTo
+ while (j < alignable.length && alignable[j] < n) j++
+ if (j == alignable.length || alignable[j] != n) alignable.splice(j++, 0, n)
+ }
+ for (var i = 0; i < alignable.length; i++)
+ result.push([alignable[i], null, null])
+
+ mergeAlignable(result, alignableFor(dv.orig, dv.chunks, true), dv.chunks, 1)
+ if (other)
+ mergeAlignable(result, alignableFor(other.orig, other.chunks, true), other.chunks, 2)
+
+ return result
+ }
+
+ function alignChunks(dv, force) {
+ if (!dv.dealigned && !force) return;
+ if (!dv.orig.curOp) return dv.orig.operation(function() {
+ alignChunks(dv, force);
+ });
+
+ dv.dealigned = false;
+ var other = dv.mv.left == dv ? dv.mv.right : dv.mv.left;
+ if (other) {
+ ensureDiff(other);
+ other.dealigned = false;
+ }
+ var linesToAlign = findAlignedLines(dv, other);
+
+ // Clear old aligners
+ var aligners = dv.mv.aligners;
+ for (var i = 0; i < aligners.length; i++)
+ aligners[i].clear();
+ aligners.length = 0;
+
+ var cm = [dv.edit, dv.orig], scroll = [], offset = []
+ if (other) cm.push(other.orig);
+ for (var i = 0; i < cm.length; i++) {
+ scroll.push(cm[i].getScrollInfo().top);
+ offset.push(-cm[i].getScrollerElement().getBoundingClientRect().top)
+ }
+
+ if (offset[0] != offset[1] || cm.length == 3 && offset[1] != offset[2])
+ alignLines(cm, offset, [0, 0, 0], aligners)
+ for (var ln = 0; ln < linesToAlign.length; ln++)
+ alignLines(cm, offset, linesToAlign[ln], aligners);
+
+ for (var i = 0; i < cm.length; i++)
+ cm[i].scrollTo(null, scroll[i]);
+ }
+
+ function alignLines(cm, cmOffset, lines, aligners) {
+ var maxOffset = -1e8, offset = [];
+ for (var i = 0; i < cm.length; i++) if (lines[i] != null) {
+ var off = cm[i].heightAtLine(lines[i], "local") - cmOffset[i];
+ offset[i] = off;
+ maxOffset = Math.max(maxOffset, off);
+ }
+ for (var i = 0; i < cm.length; i++) if (lines[i] != null) {
+ var diff = maxOffset - offset[i];
+ if (diff > 1)
+ aligners.push(padAbove(cm[i], lines[i], diff));
+ }
+ }
+
+ function padAbove(cm, line, size) {
+ var above = true;
+ if (line > cm.lastLine()) {
+ line--;
+ above = false;
+ }
+ var elt = document.createElement("div");
+ elt.className = "CodeMirror-merge-spacer";
+ elt.style.height = size + "px"; elt.style.minWidth = "1px";
+ return cm.addLineWidget(line, elt, {height: size, above: above, mergeSpacer: true, handleMouseEvents: true});
+ }
+
+ function drawConnectorsForChunk(dv, chunk, sTopOrig, sTopEdit, w) {
+ var flip = dv.type == "left";
+ var top = dv.orig.heightAtLine(chunk.origFrom, "local", true) - sTopOrig;
+ if (dv.svg) {
+ var topLpx = top;
+ var topRpx = dv.edit.heightAtLine(chunk.editFrom, "local", true) - sTopEdit;
+ if (flip) { var tmp = topLpx; topLpx = topRpx; topRpx = tmp; }
+ var botLpx = dv.orig.heightAtLine(chunk.origTo, "local", true) - sTopOrig;
+ var botRpx = dv.edit.heightAtLine(chunk.editTo, "local", true) - sTopEdit;
+ if (flip) { var tmp = botLpx; botLpx = botRpx; botRpx = tmp; }
+ var curveTop = " C " + w/2 + " " + topRpx + " " + w/2 + " " + topLpx + " " + (w + 2) + " " + topLpx;
+ var curveBot = " C " + w/2 + " " + botLpx + " " + w/2 + " " + botRpx + " -1 " + botRpx;
+ attrs(dv.svg.appendChild(document.createElementNS(svgNS, "path")),
+ "d", "M -1 " + topRpx + curveTop + " L " + (w + 2) + " " + botLpx + curveBot + " z",
+ "class", dv.classes.connect);
+ }
+ if (dv.copyButtons) {
+ var copy = dv.copyButtons.appendChild(elt("div", dv.type == "left" ? "\u21dd" : "\u21dc",
+ "CodeMirror-merge-copy"));
+ var editOriginals = dv.mv.options.allowEditingOriginals;
+ copy.title = dv.edit.phrase(editOriginals ? "Push to left" : "Revert chunk");
+ copy.chunk = chunk;
+ copy.style.top = (chunk.origTo > chunk.origFrom ? top : dv.edit.heightAtLine(chunk.editFrom, "local") - sTopEdit) + "px";
+
+ if (editOriginals) {
+ var topReverse = dv.edit.heightAtLine(chunk.editFrom, "local") - sTopEdit;
+ var copyReverse = dv.copyButtons.appendChild(elt("div", dv.type == "right" ? "\u21dd" : "\u21dc",
+ "CodeMirror-merge-copy-reverse"));
+ copyReverse.title = "Push to right";
+ copyReverse.chunk = {editFrom: chunk.origFrom, editTo: chunk.origTo,
+ origFrom: chunk.editFrom, origTo: chunk.editTo};
+ copyReverse.style.top = topReverse + "px";
+ dv.type == "right" ? copyReverse.style.left = "2px" : copyReverse.style.right = "2px";
+ }
+ }
+ }
+
+ function copyChunk(dv, to, from, chunk) {
+ if (dv.diffOutOfDate) return;
+ var origStart = chunk.origTo > from.lastLine() ? Pos(chunk.origFrom - 1) : Pos(chunk.origFrom, 0)
+ var origEnd = Pos(chunk.origTo, 0)
+ var editStart = chunk.editTo > to.lastLine() ? Pos(chunk.editFrom - 1) : Pos(chunk.editFrom, 0)
+ var editEnd = Pos(chunk.editTo, 0)
+ var handler = dv.mv.options.revertChunk
+ if (handler)
+ handler(dv.mv, from, origStart, origEnd, to, editStart, editEnd)
+ else
+ to.replaceRange(from.getRange(origStart, origEnd), editStart, editEnd)
+ }
+
+ // Merge view, containing 0, 1, or 2 diff views.
+
+ var MergeView = CodeMirror.MergeView = function(node, options) {
+ if (!(this instanceof MergeView)) return new MergeView(node, options);
+
+ this.options = options;
+ var origLeft = options.origLeft, origRight = options.origRight == null ? options.orig : options.origRight;
+
+ var hasLeft = origLeft != null, hasRight = origRight != null;
+ var panes = 1 + (hasLeft ? 1 : 0) + (hasRight ? 1 : 0);
+ var wrap = [], left = this.left = null, right = this.right = null;
+ var self = this;
+
+ if (hasLeft) {
+ left = this.left = new DiffView(this, "left");
+ var leftPane = elt("div", null, "CodeMirror-merge-pane CodeMirror-merge-left");
+ wrap.push(leftPane);
+ wrap.push(buildGap(left));
+ }
+
+ var editPane = elt("div", null, "CodeMirror-merge-pane CodeMirror-merge-editor");
+ wrap.push(editPane);
+
+ if (hasRight) {
+ right = this.right = new DiffView(this, "right");
+ wrap.push(buildGap(right));
+ var rightPane = elt("div", null, "CodeMirror-merge-pane CodeMirror-merge-right");
+ wrap.push(rightPane);
+ }
+
+ (hasRight ? rightPane : editPane).className += " CodeMirror-merge-pane-rightmost";
+
+ wrap.push(elt("div", null, null, "height: 0; clear: both;"));
+
+ var wrapElt = this.wrap = node.appendChild(elt("div", wrap, "CodeMirror-merge CodeMirror-merge-" + panes + "pane"));
+ this.edit = CodeMirror(editPane, copyObj(options));
+
+ if (left) left.init(leftPane, origLeft, options);
+ if (right) right.init(rightPane, origRight, options);
+ if (options.collapseIdentical)
+ this.editor().operation(function() {
+ collapseIdenticalStretches(self, options.collapseIdentical);
+ });
+ if (options.connect == "align") {
+ this.aligners = [];
+ alignChunks(this.left || this.right, true);
+ }
+ if (left) left.registerEvents(right)
+ if (right) right.registerEvents(left)
+
+
+ var onResize = function() {
+ if (left) makeConnections(left);
+ if (right) makeConnections(right);
+ };
+ CodeMirror.on(window, "resize", onResize);
+ var resizeInterval = setInterval(function() {
+ for (var p = wrapElt.parentNode; p && p != document.body; p = p.parentNode) {}
+ if (!p) { clearInterval(resizeInterval); CodeMirror.off(window, "resize", onResize); }
+ }, 5000);
+ };
+
+ function buildGap(dv) {
+ var lock = dv.lockButton = elt("div", null, "CodeMirror-merge-scrolllock");
+ var lockWrap = elt("div", [lock], "CodeMirror-merge-scrolllock-wrap");
+ CodeMirror.on(lock, "click", function() { setScrollLock(dv, !dv.lockScroll); });
+ var gapElts = [lockWrap];
+ if (dv.mv.options.revertButtons !== false) {
+ dv.copyButtons = elt("div", null, "CodeMirror-merge-copybuttons-" + dv.type);
+ CodeMirror.on(dv.copyButtons, "click", function(e) {
+ var node = e.target || e.srcElement;
+ if (!node.chunk) return;
+ if (node.className == "CodeMirror-merge-copy-reverse") {
+ copyChunk(dv, dv.orig, dv.edit, node.chunk);
+ return;
+ }
+ copyChunk(dv, dv.edit, dv.orig, node.chunk);
+ });
+ gapElts.unshift(dv.copyButtons);
+ }
+ if (dv.mv.options.connect != "align") {
+ var svg = document.createElementNS && document.createElementNS(svgNS, "svg");
+ if (svg && !svg.createSVGRect) svg = null;
+ dv.svg = svg;
+ if (svg) gapElts.push(svg);
+ }
+
+ return dv.gap = elt("div", gapElts, "CodeMirror-merge-gap");
+ }
+
+ MergeView.prototype = {
+ constructor: MergeView,
+ editor: function() { return this.edit; },
+ rightOriginal: function() { return this.right && this.right.orig; },
+ leftOriginal: function() { return this.left && this.left.orig; },
+ setShowDifferences: function(val) {
+ if (this.right) this.right.setShowDifferences(val);
+ if (this.left) this.left.setShowDifferences(val);
+ },
+ rightChunks: function() {
+ if (this.right) { ensureDiff(this.right); return this.right.chunks; }
+ },
+ leftChunks: function() {
+ if (this.left) { ensureDiff(this.left); return this.left.chunks; }
+ }
+ };
+
+ function asString(obj) {
+ if (typeof obj == "string") return obj;
+ else return obj.getValue();
+ }
+
+ // Operations on diffs
+ var dmp;
+ function getDiff(a, b, ignoreWhitespace) {
+ if (!dmp) dmp = new diff_match_patch();
+
+ var diff = dmp.diff_main(a, b);
+ // The library sometimes leaves in empty parts, which confuse the algorithm
+ for (var i = 0; i < diff.length; ++i) {
+ var part = diff[i];
+ if (ignoreWhitespace ? !/[^ \t]/.test(part[1]) : !part[1]) {
+ diff.splice(i--, 1);
+ } else if (i && diff[i - 1][0] == part[0]) {
+ diff.splice(i--, 1);
+ diff[i][1] += part[1];
+ }
+ }
+ return diff;
+ }
+
+ function getChunks(diff) {
+ var chunks = [];
+ if (!diff.length) return chunks;
+ var startEdit = 0, startOrig = 0;
+ var edit = Pos(0, 0), orig = Pos(0, 0);
+ for (var i = 0; i < diff.length; ++i) {
+ var part = diff[i], tp = part[0];
+ if (tp == DIFF_EQUAL) {
+ var startOff = !startOfLineClean(diff, i) || edit.line < startEdit || orig.line < startOrig ? 1 : 0;
+ var cleanFromEdit = edit.line + startOff, cleanFromOrig = orig.line + startOff;
+ moveOver(edit, part[1], null, orig);
+ var endOff = endOfLineClean(diff, i) ? 1 : 0;
+ var cleanToEdit = edit.line + endOff, cleanToOrig = orig.line + endOff;
+ if (cleanToEdit > cleanFromEdit) {
+ if (i) chunks.push({origFrom: startOrig, origTo: cleanFromOrig,
+ editFrom: startEdit, editTo: cleanFromEdit});
+ startEdit = cleanToEdit; startOrig = cleanToOrig;
+ }
+ } else {
+ moveOver(tp == DIFF_INSERT ? edit : orig, part[1]);
+ }
+ }
+ if (startEdit <= edit.line || startOrig <= orig.line)
+ chunks.push({origFrom: startOrig, origTo: orig.line + 1,
+ editFrom: startEdit, editTo: edit.line + 1});
+ return chunks;
+ }
+
+ function endOfLineClean(diff, i) {
+ if (i == diff.length - 1) return true;
+ var next = diff[i + 1][1];
+ if ((next.length == 1 && i < diff.length - 2) || next.charCodeAt(0) != 10) return false;
+ if (i == diff.length - 2) return true;
+ next = diff[i + 2][1];
+ return (next.length > 1 || i == diff.length - 3) && next.charCodeAt(0) == 10;
+ }
+
+ function startOfLineClean(diff, i) {
+ if (i == 0) return true;
+ var last = diff[i - 1][1];
+ if (last.charCodeAt(last.length - 1) != 10) return false;
+ if (i == 1) return true;
+ last = diff[i - 2][1];
+ return last.charCodeAt(last.length - 1) == 10;
+ }
+
+ function chunkBoundariesAround(chunks, n, nInEdit) {
+ var beforeE, afterE, beforeO, afterO;
+ for (var i = 0; i < chunks.length; i++) {
+ var chunk = chunks[i];
+ var fromLocal = nInEdit ? chunk.editFrom : chunk.origFrom;
+ var toLocal = nInEdit ? chunk.editTo : chunk.origTo;
+ if (afterE == null) {
+ if (fromLocal > n) { afterE = chunk.editFrom; afterO = chunk.origFrom; }
+ else if (toLocal > n) { afterE = chunk.editTo; afterO = chunk.origTo; }
+ }
+ if (toLocal <= n) { beforeE = chunk.editTo; beforeO = chunk.origTo; }
+ else if (fromLocal <= n) { beforeE = chunk.editFrom; beforeO = chunk.origFrom; }
+ }
+ return {edit: {before: beforeE, after: afterE}, orig: {before: beforeO, after: afterO}};
+ }
+
+ function collapseSingle(cm, from, to) {
+ cm.addLineClass(from, "wrap", "CodeMirror-merge-collapsed-line");
+ var widget = document.createElement("span");
+ widget.className = "CodeMirror-merge-collapsed-widget";
+ widget.title = cm.phrase("Identical text collapsed. Click to expand.");
+ var mark = cm.markText(Pos(from, 0), Pos(to - 1), {
+ inclusiveLeft: true,
+ inclusiveRight: true,
+ replacedWith: widget,
+ clearOnEnter: true
+ });
+ function clear() {
+ mark.clear();
+ cm.removeLineClass(from, "wrap", "CodeMirror-merge-collapsed-line");
+ }
+ if (mark.explicitlyCleared) clear();
+ CodeMirror.on(widget, "click", clear);
+ mark.on("clear", clear);
+ CodeMirror.on(widget, "click", clear);
+ return {mark: mark, clear: clear};
+ }
+
+ function collapseStretch(size, editors) {
+ var marks = [];
+ function clear() {
+ for (var i = 0; i < marks.length; i++) marks[i].clear();
+ }
+ for (var i = 0; i < editors.length; i++) {
+ var editor = editors[i];
+ var mark = collapseSingle(editor.cm, editor.line, editor.line + size);
+ marks.push(mark);
+ mark.mark.on("clear", clear);
+ }
+ return marks[0].mark;
+ }
+
+ function unclearNearChunks(dv, margin, off, clear) {
+ for (var i = 0; i < dv.chunks.length; i++) {
+ var chunk = dv.chunks[i];
+ for (var l = chunk.editFrom - margin; l < chunk.editTo + margin; l++) {
+ var pos = l + off;
+ if (pos >= 0 && pos < clear.length) clear[pos] = false;
+ }
+ }
+ }
+
+ function collapseIdenticalStretches(mv, margin) {
+ if (typeof margin != "number") margin = 2;
+ var clear = [], edit = mv.editor(), off = edit.firstLine();
+ for (var l = off, e = edit.lastLine(); l <= e; l++) clear.push(true);
+ if (mv.left) unclearNearChunks(mv.left, margin, off, clear);
+ if (mv.right) unclearNearChunks(mv.right, margin, off, clear);
+
+ for (var i = 0; i < clear.length; i++) {
+ if (clear[i]) {
+ var line = i + off;
+ for (var size = 1; i < clear.length - 1 && clear[i + 1]; i++, size++) {}
+ if (size > margin) {
+ var editors = [{line: line, cm: edit}];
+ if (mv.left) editors.push({line: getMatchingOrigLine(line, mv.left.chunks), cm: mv.left.orig});
+ if (mv.right) editors.push({line: getMatchingOrigLine(line, mv.right.chunks), cm: mv.right.orig});
+ var mark = collapseStretch(size, editors);
+ if (mv.options.onCollapse) mv.options.onCollapse(mv, line, size, mark);
+ }
+ }
+ }
+ }
+
+ // General utilities
+
+ function elt(tag, content, className, style) {
+ var e = document.createElement(tag);
+ if (className) e.className = className;
+ if (style) e.style.cssText = style;
+ if (typeof content == "string") e.appendChild(document.createTextNode(content));
+ else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]);
+ return e;
+ }
+
+ function clear(node) {
+ for (var count = node.childNodes.length; count > 0; --count)
+ node.removeChild(node.firstChild);
+ }
+
+ function attrs(elt) {
+ for (var i = 1; i < arguments.length; i += 2)
+ elt.setAttribute(arguments[i], arguments[i+1]);
+ }
+
+ function copyObj(obj, target) {
+ if (!target) target = {};
+ for (var prop in obj) if (obj.hasOwnProperty(prop)) target[prop] = obj[prop];
+ return target;
+ }
+
+ function moveOver(pos, str, copy, other) {
+ var out = copy ? Pos(pos.line, pos.ch) : pos, at = 0;
+ for (;;) {
+ var nl = str.indexOf("\n", at);
+ if (nl == -1) break;
+ ++out.line;
+ if (other) ++other.line;
+ at = nl + 1;
+ }
+ out.ch = (at ? 0 : out.ch) + (str.length - at);
+ if (other) other.ch = (at ? 0 : other.ch) + (str.length - at);
+ return out;
+ }
+
+ // Tracks collapsed markers and line widgets, in order to be able to
+ // accurately align the content of two editors.
+
+ var F_WIDGET = 1, F_WIDGET_BELOW = 2, F_MARKER = 4
+
+ function TrackAlignable(cm) {
+ this.cm = cm
+ this.alignable = []
+ this.height = cm.doc.height
+ var self = this
+ cm.on("markerAdded", function(_, marker) {
+ if (!marker.collapsed) return
+ var found = marker.find(1)
+ if (found != null) self.set(found.line, F_MARKER)
+ })
+ cm.on("markerCleared", function(_, marker, _min, max) {
+ if (max != null && marker.collapsed)
+ self.check(max, F_MARKER, self.hasMarker)
+ })
+ cm.on("markerChanged", this.signal.bind(this))
+ cm.on("lineWidgetAdded", function(_, widget, lineNo) {
+ if (widget.mergeSpacer) return
+ if (widget.above) self.set(lineNo - 1, F_WIDGET_BELOW)
+ else self.set(lineNo, F_WIDGET)
+ })
+ cm.on("lineWidgetCleared", function(_, widget, lineNo) {
+ if (widget.mergeSpacer) return
+ if (widget.above) self.check(lineNo - 1, F_WIDGET_BELOW, self.hasWidgetBelow)
+ else self.check(lineNo, F_WIDGET, self.hasWidget)
+ })
+ cm.on("lineWidgetChanged", this.signal.bind(this))
+ cm.on("change", function(_, change) {
+ var start = change.from.line, nBefore = change.to.line - change.from.line
+ var nAfter = change.text.length - 1, end = start + nAfter
+ if (nBefore || nAfter) self.map(start, nBefore, nAfter)
+ self.check(end, F_MARKER, self.hasMarker)
+ if (nBefore || nAfter) self.check(change.from.line, F_MARKER, self.hasMarker)
+ })
+ cm.on("viewportChange", function() {
+ if (self.cm.doc.height != self.height) self.signal()
+ })
+ }
+
+ TrackAlignable.prototype = {
+ signal: function() {
+ CodeMirror.signal(this, "realign")
+ this.height = this.cm.doc.height
+ },
+
+ set: function(n, flags) {
+ var pos = -1
+ for (; pos < this.alignable.length; pos += 2) {
+ var diff = this.alignable[pos] - n
+ if (diff == 0) {
+ if ((this.alignable[pos + 1] & flags) == flags) return
+ this.alignable[pos + 1] |= flags
+ this.signal()
+ return
+ }
+ if (diff > 0) break
+ }
+ this.signal()
+ this.alignable.splice(pos, 0, n, flags)
+ },
+
+ find: function(n) {
+ for (var i = 0; i < this.alignable.length; i += 2)
+ if (this.alignable[i] == n) return i
+ return -1
+ },
+
+ check: function(n, flag, pred) {
+ var found = this.find(n)
+ if (found == -1 || !(this.alignable[found + 1] & flag)) return
+ if (!pred.call(this, n)) {
+ this.signal()
+ var flags = this.alignable[found + 1] & ~flag
+ if (flags) this.alignable[found + 1] = flags
+ else this.alignable.splice(found, 2)
+ }
+ },
+
+ hasMarker: function(n) {
+ var handle = this.cm.getLineHandle(n)
+ if (handle.markedSpans) for (var i = 0; i < handle.markedSpans.length; i++)
+ if (handle.markedSpans[i].marker.collapsed && handle.markedSpans[i].to != null)
+ return true
+ return false
+ },
+
+ hasWidget: function(n) {
+ var handle = this.cm.getLineHandle(n)
+ if (handle.widgets) for (var i = 0; i < handle.widgets.length; i++)
+ if (!handle.widgets[i].above && !handle.widgets[i].mergeSpacer) return true
+ return false
+ },
+
+ hasWidgetBelow: function(n) {
+ if (n == this.cm.lastLine()) return false
+ var handle = this.cm.getLineHandle(n + 1)
+ if (handle.widgets) for (var i = 0; i < handle.widgets.length; i++)
+ if (handle.widgets[i].above && !handle.widgets[i].mergeSpacer) return true
+ return false
+ },
+
+ map: function(from, nBefore, nAfter) {
+ var diff = nAfter - nBefore, to = from + nBefore, widgetFrom = -1, widgetTo = -1
+ for (var i = 0; i < this.alignable.length; i += 2) {
+ var n = this.alignable[i]
+ if (n == from && (this.alignable[i + 1] & F_WIDGET_BELOW)) widgetFrom = i
+ if (n == to && (this.alignable[i + 1] & F_WIDGET_BELOW)) widgetTo = i
+ if (n <= from) continue
+ else if (n < to) this.alignable.splice(i--, 2)
+ else this.alignable[i] += diff
+ }
+ if (widgetFrom > -1) {
+ var flags = this.alignable[widgetFrom + 1]
+ if (flags == F_WIDGET_BELOW) this.alignable.splice(widgetFrom, 2)
+ else this.alignable[widgetFrom + 1] = flags & ~F_WIDGET_BELOW
+ }
+ if (widgetTo > -1 && nAfter)
+ this.set(from + nAfter, F_WIDGET_BELOW)
+ }
+ }
+
+ function posMin(a, b) { return (a.line - b.line || a.ch - b.ch) < 0 ? a : b; }
+ function posMax(a, b) { return (a.line - b.line || a.ch - b.ch) > 0 ? a : b; }
+ function posEq(a, b) { return a.line == b.line && a.ch == b.ch; }
+
+ function findPrevDiff(chunks, start, isOrig) {
+ for (var i = chunks.length - 1; i >= 0; i--) {
+ var chunk = chunks[i];
+ var to = (isOrig ? chunk.origTo : chunk.editTo) - 1;
+ if (to < start) return to;
+ }
+ }
+
+ function findNextDiff(chunks, start, isOrig) {
+ for (var i = 0; i < chunks.length; i++) {
+ var chunk = chunks[i];
+ var from = (isOrig ? chunk.origFrom : chunk.editFrom);
+ if (from > start) return from;
+ }
+ }
+
+ function goNearbyDiff(cm, dir) {
+ var found = null, views = cm.state.diffViews, line = cm.getCursor().line;
+ if (views) for (var i = 0; i < views.length; i++) {
+ var dv = views[i], isOrig = cm == dv.orig;
+ ensureDiff(dv);
+ var pos = dir < 0 ? findPrevDiff(dv.chunks, line, isOrig) : findNextDiff(dv.chunks, line, isOrig);
+ if (pos != null && (found == null || (dir < 0 ? pos > found : pos < found)))
+ found = pos;
+ }
+ if (found != null)
+ cm.setCursor(found, 0);
+ else
+ return CodeMirror.Pass;
+ }
+
+ CodeMirror.commands.goNextDiff = function(cm) {
+ return goNearbyDiff(cm, 1);
+ };
+ CodeMirror.commands.goPrevDiff = function(cm) {
+ return goNearbyDiff(cm, -1);
+ };
+});
diff --git a/src/lib/codemirror/addon/scroll/annotatescrollbar.js b/src/lib/codemirror/addon/scroll/annotatescrollbar.js
new file mode 100644
index 0000000..c12e44c
--- /dev/null
+++ b/src/lib/codemirror/addon/scroll/annotatescrollbar.js
@@ -0,0 +1,128 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+ "use strict";
+
+ CodeMirror.defineExtension("annotateScrollbar", function(options) {
+ if (typeof options == "string") options = {className: options};
+ return new Annotation(this, options);
+ });
+
+ CodeMirror.defineOption("scrollButtonHeight", 0);
+
+ function Annotation(cm, options) {
+ this.cm = cm;
+ this.options = options;
+ this.buttonHeight = options.scrollButtonHeight || cm.getOption("scrollButtonHeight");
+ this.annotations = [];
+ this.doRedraw = this.doUpdate = null;
+ this.div = cm.getWrapperElement().appendChild(document.createElement("div"));
+ this.div.style.cssText = "position: absolute; right: 0; top: 0; z-index: 7; pointer-events: none";
+ this.computeScale();
+
+ function scheduleRedraw(delay) {
+ clearTimeout(self.doRedraw);
+ self.doRedraw = setTimeout(function() { self.redraw(); }, delay);
+ }
+
+ var self = this;
+ cm.on("refresh", this.resizeHandler = function() {
+ clearTimeout(self.doUpdate);
+ self.doUpdate = setTimeout(function() {
+ if (self.computeScale()) scheduleRedraw(20);
+ }, 100);
+ });
+ cm.on("markerAdded", this.resizeHandler);
+ cm.on("markerCleared", this.resizeHandler);
+ if (options.listenForChanges !== false)
+ cm.on("changes", this.changeHandler = function() {
+ scheduleRedraw(250);
+ });
+ }
+
+ Annotation.prototype.computeScale = function() {
+ var cm = this.cm;
+ var hScale = (cm.getWrapperElement().clientHeight - cm.display.barHeight - this.buttonHeight * 2) /
+ cm.getScrollerElement().scrollHeight
+ if (hScale != this.hScale) {
+ this.hScale = hScale;
+ return true;
+ }
+ };
+
+ Annotation.prototype.update = function(annotations) {
+ this.annotations = annotations;
+ this.redraw();
+ };
+
+ Annotation.prototype.redraw = function(compute) {
+ if (compute !== false) this.computeScale();
+ var cm = this.cm, hScale = this.hScale;
+
+ var frag = document.createDocumentFragment(), anns = this.annotations;
+
+ var wrapping = cm.getOption("lineWrapping");
+ var singleLineH = wrapping && cm.defaultTextHeight() * 1.5;
+ var curLine = null, curLineObj = null;
+
+ function getY(pos, top) {
+ if (curLine != pos.line) {
+ curLine = pos.line
+ curLineObj = cm.getLineHandle(pos.line)
+ var visual = cm.getLineHandleVisualStart(curLineObj)
+ if (visual != curLineObj) {
+ curLine = cm.getLineNumber(visual)
+ curLineObj = visual
+ }
+ }
+ if ((curLineObj.widgets && curLineObj.widgets.length) ||
+ (wrapping && curLineObj.height > singleLineH))
+ return cm.charCoords(pos, "local")[top ? "top" : "bottom"];
+ var topY = cm.heightAtLine(curLineObj, "local");
+ return topY + (top ? 0 : curLineObj.height);
+ }
+
+ var lastLine = cm.lastLine()
+ if (cm.display.barWidth) for (var i = 0, nextTop; i < anns.length; i++) {
+ var ann = anns[i];
+ if (ann.to.line > lastLine) continue;
+ var top = nextTop || getY(ann.from, true) * hScale;
+ var bottom = getY(ann.to, false) * hScale;
+ while (i < anns.length - 1) {
+ if (anns[i + 1].to.line > lastLine) break;
+ nextTop = getY(anns[i + 1].from, true) * hScale;
+ if (nextTop > bottom + .9) break;
+ ann = anns[++i];
+ bottom = getY(ann.to, false) * hScale;
+ }
+ if (bottom == top) continue;
+ var height = Math.max(bottom - top, 3);
+
+ var elt = frag.appendChild(document.createElement("div"));
+ elt.style.cssText = "position: absolute; right: 0px; width: " + Math.max(cm.display.barWidth - 1, 2) + "px; top: "
+ + (top + this.buttonHeight) + "px; height: " + height + "px";
+ elt.className = this.options.className;
+ if (ann.id) {
+ elt.setAttribute("annotation-id", ann.id);
+ }
+ }
+ this.div.textContent = "";
+ this.div.appendChild(frag);
+ };
+
+ Annotation.prototype.clear = function() {
+ this.cm.off("refresh", this.resizeHandler);
+ this.cm.off("markerAdded", this.resizeHandler);
+ this.cm.off("markerCleared", this.resizeHandler);
+ if (this.changeHandler) this.cm.off("changes", this.changeHandler);
+ this.div.parentNode.removeChild(this.div);
+ };
+});
diff --git a/src/lib/codemirror/addon/search/matchesonscrollbar.css b/src/lib/codemirror/addon/search/matchesonscrollbar.css
new file mode 100644
index 0000000..77932cc
--- /dev/null
+++ b/src/lib/codemirror/addon/search/matchesonscrollbar.css
@@ -0,0 +1,8 @@
+.CodeMirror-search-match {
+ background: gold;
+ border-top: 1px solid orange;
+ border-bottom: 1px solid orange;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ opacity: .5;
+}
diff --git a/src/lib/codemirror/addon/search/searchcursor.js b/src/lib/codemirror/addon/search/searchcursor.js
new file mode 100644
index 0000000..d586957
--- /dev/null
+++ b/src/lib/codemirror/addon/search/searchcursor.js
@@ -0,0 +1,296 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"))
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod)
+ else // Plain browser env
+ mod(CodeMirror)
+})(function(CodeMirror) {
+ "use strict"
+ var Pos = CodeMirror.Pos
+
+ function regexpFlags(regexp) {
+ var flags = regexp.flags
+ return flags != null ? flags : (regexp.ignoreCase ? "i" : "")
+ + (regexp.global ? "g" : "")
+ + (regexp.multiline ? "m" : "")
+ }
+
+ function ensureFlags(regexp, flags) {
+ var current = regexpFlags(regexp), target = current
+ for (var i = 0; i < flags.length; i++) if (target.indexOf(flags.charAt(i)) == -1)
+ target += flags.charAt(i)
+ return current == target ? regexp : new RegExp(regexp.source, target)
+ }
+
+ function maybeMultiline(regexp) {
+ return /\\s|\\n|\n|\\W|\\D|\[\^/.test(regexp.source)
+ }
+
+ function searchRegexpForward(doc, regexp, start) {
+ regexp = ensureFlags(regexp, "g")
+ for (var line = start.line, ch = start.ch, last = doc.lastLine(); line <= last; line++, ch = 0) {
+ regexp.lastIndex = ch
+ var string = doc.getLine(line), match = regexp.exec(string)
+ if (match)
+ return {from: Pos(line, match.index),
+ to: Pos(line, match.index + match[0].length),
+ match: match}
+ }
+ }
+
+ function searchRegexpForwardMultiline(doc, regexp, start) {
+ if (!maybeMultiline(regexp)) return searchRegexpForward(doc, regexp, start)
+
+ regexp = ensureFlags(regexp, "gm")
+ var string, chunk = 1
+ for (var line = start.line, last = doc.lastLine(); line <= last;) {
+ // This grows the search buffer in exponentially-sized chunks
+ // between matches, so that nearby matches are fast and don't
+ // require concatenating the whole document (in case we're
+ // searching for something that has tons of matches), but at the
+ // same time, the amount of retries is limited.
+ for (var i = 0; i < chunk; i++) {
+ if (line > last) break
+ var curLine = doc.getLine(line++)
+ string = string == null ? curLine : string + "\n" + curLine
+ }
+ chunk = chunk * 2
+ regexp.lastIndex = start.ch
+ var match = regexp.exec(string)
+ if (match) {
+ var before = string.slice(0, match.index).split("\n"), inside = match[0].split("\n")
+ var startLine = start.line + before.length - 1, startCh = before[before.length - 1].length
+ return {from: Pos(startLine, startCh),
+ to: Pos(startLine + inside.length - 1,
+ inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),
+ match: match}
+ }
+ }
+ }
+
+ function lastMatchIn(string, regexp, endMargin) {
+ var match, from = 0
+ while (from <= string.length) {
+ regexp.lastIndex = from
+ var newMatch = regexp.exec(string)
+ if (!newMatch) break
+ var end = newMatch.index + newMatch[0].length
+ if (end > string.length - endMargin) break
+ if (!match || end > match.index + match[0].length)
+ match = newMatch
+ from = newMatch.index + 1
+ }
+ return match
+ }
+
+ function searchRegexpBackward(doc, regexp, start) {
+ regexp = ensureFlags(regexp, "g")
+ for (var line = start.line, ch = start.ch, first = doc.firstLine(); line >= first; line--, ch = -1) {
+ var string = doc.getLine(line)
+ var match = lastMatchIn(string, regexp, ch < 0 ? 0 : string.length - ch)
+ if (match)
+ return {from: Pos(line, match.index),
+ to: Pos(line, match.index + match[0].length),
+ match: match}
+ }
+ }
+
+ function searchRegexpBackwardMultiline(doc, regexp, start) {
+ if (!maybeMultiline(regexp)) return searchRegexpBackward(doc, regexp, start)
+ regexp = ensureFlags(regexp, "gm")
+ var string, chunkSize = 1, endMargin = doc.getLine(start.line).length - start.ch
+ for (var line = start.line, first = doc.firstLine(); line >= first;) {
+ for (var i = 0; i < chunkSize && line >= first; i++) {
+ var curLine = doc.getLine(line--)
+ string = string == null ? curLine : curLine + "\n" + string
+ }
+ chunkSize *= 2
+
+ var match = lastMatchIn(string, regexp, endMargin)
+ if (match) {
+ var before = string.slice(0, match.index).split("\n"), inside = match[0].split("\n")
+ var startLine = line + before.length, startCh = before[before.length - 1].length
+ return {from: Pos(startLine, startCh),
+ to: Pos(startLine + inside.length - 1,
+ inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),
+ match: match}
+ }
+ }
+ }
+
+ var doFold, noFold
+ if (String.prototype.normalize) {
+ doFold = function(str) { return str.normalize("NFD").toLowerCase() }
+ noFold = function(str) { return str.normalize("NFD") }
+ } else {
+ doFold = function(str) { return str.toLowerCase() }
+ noFold = function(str) { return str }
+ }
+
+ // Maps a position in a case-folded line back to a position in the original line
+ // (compensating for codepoints increasing in number during folding)
+ function adjustPos(orig, folded, pos, foldFunc) {
+ if (orig.length == folded.length) return pos
+ for (var min = 0, max = pos + Math.max(0, orig.length - folded.length);;) {
+ if (min == max) return min
+ var mid = (min + max) >> 1
+ var len = foldFunc(orig.slice(0, mid)).length
+ if (len == pos) return mid
+ else if (len > pos) max = mid
+ else min = mid + 1
+ }
+ }
+
+ function searchStringForward(doc, query, start, caseFold) {
+ // Empty string would match anything and never progress, so we
+ // define it to match nothing instead.
+ if (!query.length) return null
+ var fold = caseFold ? doFold : noFold
+ var lines = fold(query).split(/\r|\n\r?/)
+
+ search: for (var line = start.line, ch = start.ch, last = doc.lastLine() + 1 - lines.length; line <= last; line++, ch = 0) {
+ var orig = doc.getLine(line).slice(ch), string = fold(orig)
+ if (lines.length == 1) {
+ var found = string.indexOf(lines[0])
+ if (found == -1) continue search
+ var start = adjustPos(orig, string, found, fold) + ch
+ return {from: Pos(line, adjustPos(orig, string, found, fold) + ch),
+ to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold) + ch)}
+ } else {
+ var cutFrom = string.length - lines[0].length
+ if (string.slice(cutFrom) != lines[0]) continue search
+ for (var i = 1; i < lines.length - 1; i++)
+ if (fold(doc.getLine(line + i)) != lines[i]) continue search
+ var end = doc.getLine(line + lines.length - 1), endString = fold(end), lastLine = lines[lines.length - 1]
+ if (endString.slice(0, lastLine.length) != lastLine) continue search
+ return {from: Pos(line, adjustPos(orig, string, cutFrom, fold) + ch),
+ to: Pos(line + lines.length - 1, adjustPos(end, endString, lastLine.length, fold))}
+ }
+ }
+ }
+
+ function searchStringBackward(doc, query, start, caseFold) {
+ if (!query.length) return null
+ var fold = caseFold ? doFold : noFold
+ var lines = fold(query).split(/\r|\n\r?/)
+
+ search: for (var line = start.line, ch = start.ch, first = doc.firstLine() - 1 + lines.length; line >= first; line--, ch = -1) {
+ var orig = doc.getLine(line)
+ if (ch > -1) orig = orig.slice(0, ch)
+ var string = fold(orig)
+ if (lines.length == 1) {
+ var found = string.lastIndexOf(lines[0])
+ if (found == -1) continue search
+ return {from: Pos(line, adjustPos(orig, string, found, fold)),
+ to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold))}
+ } else {
+ var lastLine = lines[lines.length - 1]
+ if (string.slice(0, lastLine.length) != lastLine) continue search
+ for (var i = 1, start = line - lines.length + 1; i < lines.length - 1; i++)
+ if (fold(doc.getLine(start + i)) != lines[i]) continue search
+ var top = doc.getLine(line + 1 - lines.length), topString = fold(top)
+ if (topString.slice(topString.length - lines[0].length) != lines[0]) continue search
+ return {from: Pos(line + 1 - lines.length, adjustPos(top, topString, top.length - lines[0].length, fold)),
+ to: Pos(line, adjustPos(orig, string, lastLine.length, fold))}
+ }
+ }
+ }
+
+ function SearchCursor(doc, query, pos, options) {
+ this.atOccurrence = false
+ this.doc = doc
+ pos = pos ? doc.clipPos(pos) : Pos(0, 0)
+ this.pos = {from: pos, to: pos}
+
+ var caseFold
+ if (typeof options == "object") {
+ caseFold = options.caseFold
+ } else { // Backwards compat for when caseFold was the 4th argument
+ caseFold = options
+ options = null
+ }
+
+ if (typeof query == "string") {
+ if (caseFold == null) caseFold = false
+ this.matches = function(reverse, pos) {
+ return (reverse ? searchStringBackward : searchStringForward)(doc, query, pos, caseFold)
+ }
+ } else {
+ query = ensureFlags(query, "gm")
+ if (!options || options.multiline !== false)
+ this.matches = function(reverse, pos) {
+ return (reverse ? searchRegexpBackwardMultiline : searchRegexpForwardMultiline)(doc, query, pos)
+ }
+ else
+ this.matches = function(reverse, pos) {
+ return (reverse ? searchRegexpBackward : searchRegexpForward)(doc, query, pos)
+ }
+ }
+ }
+
+ SearchCursor.prototype = {
+ findNext: function() {return this.find(false)},
+ findPrevious: function() {return this.find(true)},
+
+ find: function(reverse) {
+ var result = this.matches(reverse, this.doc.clipPos(reverse ? this.pos.from : this.pos.to))
+
+ // Implements weird auto-growing behavior on null-matches for
+ // backwards-compatibility with the vim code (unfortunately)
+ while (result && CodeMirror.cmpPos(result.from, result.to) == 0) {
+ if (reverse) {
+ if (result.from.ch) result.from = Pos(result.from.line, result.from.ch - 1)
+ else if (result.from.line == this.doc.firstLine()) result = null
+ else result = this.matches(reverse, this.doc.clipPos(Pos(result.from.line - 1)))
+ } else {
+ if (result.to.ch < this.doc.getLine(result.to.line).length) result.to = Pos(result.to.line, result.to.ch + 1)
+ else if (result.to.line == this.doc.lastLine()) result = null
+ else result = this.matches(reverse, Pos(result.to.line + 1, 0))
+ }
+ }
+
+ if (result) {
+ this.pos = result
+ this.atOccurrence = true
+ return this.pos.match || true
+ } else {
+ var end = Pos(reverse ? this.doc.firstLine() : this.doc.lastLine() + 1, 0)
+ this.pos = {from: end, to: end}
+ return this.atOccurrence = false
+ }
+ },
+
+ from: function() {if (this.atOccurrence) return this.pos.from},
+ to: function() {if (this.atOccurrence) return this.pos.to},
+
+ replace: function(newText, origin) {
+ if (!this.atOccurrence) return
+ var lines = CodeMirror.splitLines(newText)
+ this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin)
+ this.pos.to = Pos(this.pos.from.line + lines.length - 1,
+ lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0))
+ }
+ }
+
+ CodeMirror.defineExtension("getSearchCursor", function(query, pos, caseFold) {
+ return new SearchCursor(this.doc, query, pos, caseFold)
+ })
+ CodeMirror.defineDocExtension("getSearchCursor", function(query, pos, caseFold) {
+ return new SearchCursor(this, query, pos, caseFold)
+ })
+
+ CodeMirror.defineExtension("selectMatches", function(query, caseFold) {
+ var ranges = []
+ var cur = this.getSearchCursor(query, this.getCursor("from"), caseFold)
+ while (cur.findNext()) {
+ if (CodeMirror.cmpPos(cur.to(), this.getCursor("to")) > 0) break
+ ranges.push({anchor: cur.from(), head: cur.to()})
+ }
+ if (ranges.length)
+ this.setSelections(ranges, 0)
+ })
+});
diff --git a/src/lib/codemirror/addon/selection/active-line.js b/src/lib/codemirror/addon/selection/active-line.js
new file mode 100644
index 0000000..c7b14ce
--- /dev/null
+++ b/src/lib/codemirror/addon/selection/active-line.js
@@ -0,0 +1,72 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+ "use strict";
+ var WRAP_CLASS = "CodeMirror-activeline";
+ var BACK_CLASS = "CodeMirror-activeline-background";
+ var GUTT_CLASS = "CodeMirror-activeline-gutter";
+
+ CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) {
+ var prev = old == CodeMirror.Init ? false : old;
+ if (val == prev) return
+ if (prev) {
+ cm.off("beforeSelectionChange", selectionChange);
+ clearActiveLines(cm);
+ delete cm.state.activeLines;
+ }
+ if (val) {
+ cm.state.activeLines = [];
+ updateActiveLines(cm, cm.listSelections());
+ cm.on("beforeSelectionChange", selectionChange);
+ }
+ });
+
+ function clearActiveLines(cm) {
+ for (var i = 0; i < cm.state.activeLines.length; i++) {
+ cm.removeLineClass(cm.state.activeLines[i], "wrap", WRAP_CLASS);
+ cm.removeLineClass(cm.state.activeLines[i], "background", BACK_CLASS);
+ cm.removeLineClass(cm.state.activeLines[i], "gutter", GUTT_CLASS);
+ }
+ }
+
+ function sameArray(a, b) {
+ if (a.length != b.length) return false;
+ for (var i = 0; i < a.length; i++)
+ if (a[i] != b[i]) return false;
+ return true;
+ }
+
+ function updateActiveLines(cm, ranges) {
+ var active = [];
+ for (var i = 0; i < ranges.length; i++) {
+ var range = ranges[i];
+ var option = cm.getOption("styleActiveLine");
+ if (typeof option == "object" && option.nonEmpty ? range.anchor.line != range.head.line : !range.empty())
+ continue
+ var line = cm.getLineHandleVisualStart(range.head.line);
+ if (active[active.length - 1] != line) active.push(line);
+ }
+ if (sameArray(cm.state.activeLines, active)) return;
+ cm.operation(function() {
+ clearActiveLines(cm);
+ for (var i = 0; i < active.length; i++) {
+ cm.addLineClass(active[i], "wrap", WRAP_CLASS);
+ cm.addLineClass(active[i], "background", BACK_CLASS);
+ cm.addLineClass(active[i], "gutter", GUTT_CLASS);
+ }
+ cm.state.activeLines = active;
+ });
+ }
+
+ function selectionChange(cm, sel) {
+ updateActiveLines(cm, sel.ranges);
+ }
+});
diff --git a/src/lib/codemirror/lib/codemirror.css b/src/lib/codemirror/lib/codemirror.css
new file mode 100644
index 0000000..5ea2d2b
--- /dev/null
+++ b/src/lib/codemirror/lib/codemirror.css
@@ -0,0 +1,350 @@
+/* BASICS */
+
+.CodeMirror {
+ /* Set height, width, borders, and global font properties here */
+ font-family: monospace;
+ height: 300px;
+ color: black;
+ direction: ltr;
+}
+
+/* PADDING */
+
+.CodeMirror-lines {
+ padding: 4px 0; /* Vertical padding around content */
+}
+.CodeMirror pre.CodeMirror-line,
+.CodeMirror pre.CodeMirror-line-like {
+ padding: 0 4px; /* Horizontal padding of content */
+}
+
+.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
+ background-color: transparent; /* The little square between H and V scrollbars */
+}
+
+/* GUTTER */
+
+.CodeMirror-gutters {
+ border-right: 1px solid #ddd;
+ background-color: #f7f7f7;
+ white-space: nowrap;
+}
+.CodeMirror-linenumbers {}
+.CodeMirror-linenumber {
+ padding: 0 3px 0 5px;
+ min-width: 20px;
+ text-align: right;
+ color: #999;
+ white-space: nowrap;
+}
+
+.CodeMirror-guttermarker { color: black; }
+.CodeMirror-guttermarker-subtle { color: #999; }
+
+/* CURSOR */
+
+.CodeMirror-cursor {
+ border-left: 1px solid black;
+ border-right: none;
+ width: 0;
+}
+/* Shown when moving in bi-directional text */
+.CodeMirror div.CodeMirror-secondarycursor {
+ border-left: 1px solid silver;
+}
+.cm-fat-cursor .CodeMirror-cursor {
+ width: auto;
+ border: 0 !important;
+ background: #7e7;
+}
+.cm-fat-cursor div.CodeMirror-cursors {
+ z-index: 1;
+}
+.cm-fat-cursor-mark {
+ background-color: rgba(20, 255, 20, 0.5);
+ -webkit-animation: blink 1.06s steps(1) infinite;
+ -moz-animation: blink 1.06s steps(1) infinite;
+ animation: blink 1.06s steps(1) infinite;
+}
+.cm-animate-fat-cursor {
+ width: auto;
+ border: 0;
+ -webkit-animation: blink 1.06s steps(1) infinite;
+ -moz-animation: blink 1.06s steps(1) infinite;
+ animation: blink 1.06s steps(1) infinite;
+ background-color: #7e7;
+}
+@-moz-keyframes blink {
+ 0% {}
+ 50% { background-color: transparent; }
+ 100% {}
+}
+@-webkit-keyframes blink {
+ 0% {}
+ 50% { background-color: transparent; }
+ 100% {}
+}
+@keyframes blink {
+ 0% {}
+ 50% { background-color: transparent; }
+ 100% {}
+}
+
+/* Can style cursor different in overwrite (non-insert) mode */
+.CodeMirror-overwrite .CodeMirror-cursor {}
+
+.cm-tab { display: inline-block; text-decoration: inherit; }
+
+.CodeMirror-rulers {
+ position: absolute;
+ left: 0; right: 0; top: -50px; bottom: 0;
+ overflow: hidden;
+}
+.CodeMirror-ruler {
+ border-left: 1px solid #ccc;
+ top: 0; bottom: 0;
+ position: absolute;
+}
+
+/* DEFAULT THEME */
+
+.cm-s-default .cm-header {color: blue;}
+.cm-s-default .cm-quote {color: #090;}
+.cm-negative {color: #d44;}
+.cm-positive {color: #292;}
+.cm-header, .cm-strong {font-weight: bold;}
+.cm-em {font-style: italic;}
+.cm-link {text-decoration: underline;}
+.cm-strikethrough {text-decoration: line-through;}
+
+.cm-s-default .cm-keyword {color: #708;}
+.cm-s-default .cm-atom {color: #219;}
+.cm-s-default .cm-number {color: #164;}
+.cm-s-default .cm-def {color: #00f;}
+.cm-s-default .cm-variable,
+.cm-s-default .cm-punctuation,
+.cm-s-default .cm-property,
+.cm-s-default .cm-operator {}
+.cm-s-default .cm-variable-2 {color: #05a;}
+.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;}
+.cm-s-default .cm-comment {color: #a50;}
+.cm-s-default .cm-string {color: #a11;}
+.cm-s-default .cm-string-2 {color: #f50;}
+.cm-s-default .cm-meta {color: #555;}
+.cm-s-default .cm-qualifier {color: #555;}
+.cm-s-default .cm-builtin {color: #30a;}
+.cm-s-default .cm-bracket {color: #997;}
+.cm-s-default .cm-tag {color: #170;}
+.cm-s-default .cm-attribute {color: #00c;}
+.cm-s-default .cm-hr {color: #999;}
+.cm-s-default .cm-link {color: #00c;}
+
+.cm-s-default .cm-error {color: #f00;}
+.cm-invalidchar {color: #f00;}
+
+.CodeMirror-composing { border-bottom: 2px solid; }
+
+/* Default styles for common addons */
+
+div.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;}
+div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;}
+.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
+.CodeMirror-activeline-background {background: #e8f2ff;}
+
+/* STOP */
+
+/* The rest of this file contains styles related to the mechanics of
+ the editor. You probably shouldn't touch them. */
+
+.CodeMirror {
+ position: relative;
+ overflow: hidden;
+ background: white;
+}
+
+.CodeMirror-scroll {
+ overflow: scroll !important; /* Things will break if this is overridden */
+ /* 50px is the magic margin used to hide the element's real scrollbars */
+ /* See overflow: hidden in .CodeMirror */
+ margin-bottom: -50px; margin-right: -50px;
+ padding-bottom: 50px;
+ height: 100%;
+ outline: none; /* Prevent dragging from highlighting the element */
+ position: relative;
+}
+.CodeMirror-sizer {
+ position: relative;
+ border-right: 50px solid transparent;
+}
+
+/* The fake, visible scrollbars. Used to force redraw during scrolling
+ before actual scrolling happens, thus preventing shaking and
+ flickering artifacts. */
+.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
+ position: absolute;
+ z-index: 6;
+ display: none;
+ outline: none;
+}
+.CodeMirror-vscrollbar {
+ right: 0; top: 0;
+ overflow-x: hidden;
+ overflow-y: scroll;
+}
+.CodeMirror-hscrollbar {
+ bottom: 0; left: 0;
+ overflow-y: hidden;
+ overflow-x: scroll;
+}
+.CodeMirror-scrollbar-filler {
+ right: 0; bottom: 0;
+}
+.CodeMirror-gutter-filler {
+ left: 0; bottom: 0;
+}
+
+.CodeMirror-gutters {
+ position: absolute; left: 0; top: 0;
+ min-height: 100%;
+ z-index: 3;
+}
+.CodeMirror-gutter {
+ white-space: normal;
+ height: 100%;
+ display: inline-block;
+ vertical-align: top;
+ margin-bottom: -50px;
+}
+.CodeMirror-gutter-wrapper {
+ position: absolute;
+ z-index: 4;
+ background: none !important;
+ border: none !important;
+}
+.CodeMirror-gutter-background {
+ position: absolute;
+ top: 0; bottom: 0;
+ z-index: 4;
+}
+.CodeMirror-gutter-elt {
+ position: absolute;
+ cursor: default;
+ z-index: 4;
+}
+.CodeMirror-gutter-wrapper ::selection { background-color: transparent }
+.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }
+
+.CodeMirror-lines {
+ cursor: text;
+ min-height: 1px; /* prevents collapsing before first draw */
+}
+.CodeMirror pre.CodeMirror-line,
+.CodeMirror pre.CodeMirror-line-like {
+ /* Reset some styles that the rest of the page might have set */
+ -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
+ border-width: 0;
+ background: transparent;
+ font-family: inherit;
+ font-size: inherit;
+ margin: 0;
+ white-space: pre;
+ word-wrap: normal;
+ line-height: inherit;
+ color: inherit;
+ z-index: 2;
+ position: relative;
+ overflow: visible;
+ -webkit-tap-highlight-color: transparent;
+ -webkit-font-variant-ligatures: contextual;
+ font-variant-ligatures: contextual;
+}
+.CodeMirror-wrap pre.CodeMirror-line,
+.CodeMirror-wrap pre.CodeMirror-line-like {
+ word-wrap: break-word;
+ white-space: pre-wrap;
+ word-break: normal;
+}
+
+.CodeMirror-linebackground {
+ position: absolute;
+ left: 0; right: 0; top: 0; bottom: 0;
+ z-index: 0;
+}
+
+.CodeMirror-linewidget {
+ position: relative;
+ z-index: 2;
+ padding: 0.1px; /* Force widget margins to stay inside of the container */
+}
+
+.CodeMirror-widget {}
+
+.CodeMirror-rtl pre { direction: rtl; }
+
+.CodeMirror-code {
+ outline: none;
+}
+
+/* Force content-box sizing for the elements where we expect it */
+.CodeMirror-scroll,
+.CodeMirror-sizer,
+.CodeMirror-gutter,
+.CodeMirror-gutters,
+.CodeMirror-linenumber {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+.CodeMirror-measure {
+ position: absolute;
+ width: 100%;
+ height: 0;
+ overflow: hidden;
+ visibility: hidden;
+}
+
+.CodeMirror-cursor {
+ position: absolute;
+ pointer-events: none;
+}
+.CodeMirror-measure pre { position: static; }
+
+div.CodeMirror-cursors {
+ visibility: hidden;
+ position: relative;
+ z-index: 3;
+}
+div.CodeMirror-dragcursors {
+ visibility: visible;
+}
+
+.CodeMirror-focused div.CodeMirror-cursors {
+ visibility: visible;
+}
+
+.CodeMirror-selected { background: #d9d9d9; }
+.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
+.CodeMirror-crosshair { cursor: crosshair; }
+.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }
+.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }
+
+.cm-searching {
+ background-color: #ffa;
+ background-color: rgba(255, 255, 0, .4);
+}
+
+/* Used to force a border model for a node */
+.cm-force-border { padding-right: .1px; }
+
+@media print {
+ /* Hide the cursor when printing */
+ .CodeMirror div.CodeMirror-cursors {
+ visibility: hidden;
+ }
+}
+
+/* See issue #2901 */
+.cm-tab-wrap-hack:after { content: ''; }
+
+/* Help users use markselection to safely style text background */
+span.CodeMirror-selectedtext { background: none; }
diff --git a/src/lib/codemirror/lib/codemirror.js b/src/lib/codemirror/lib/codemirror.js
new file mode 100644
index 0000000..9aa6da5
--- /dev/null
+++ b/src/lib/codemirror/lib/codemirror.js
@@ -0,0 +1,9800 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+// This is CodeMirror (https://codemirror.net), a code editor
+// implemented in JavaScript on top of the browser's DOM.
+//
+// You can find some technical background for some of the code below
+// at http://marijnhaverbeke.nl/blog/#cm-internals .
+
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global = global || self, global.CodeMirror = factory());
+}(this, (function () { 'use strict';
+
+ // Kludges for bugs and behavior differences that can't be feature
+ // detected are enabled based on userAgent etc sniffing.
+ var userAgent = navigator.userAgent;
+ var platform = navigator.platform;
+
+ var gecko = /gecko\/\d/i.test(userAgent);
+ var ie_upto10 = /MSIE \d/.test(userAgent);
+ var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent);
+ var edge = /Edge\/(\d+)/.exec(userAgent);
+ var ie = ie_upto10 || ie_11up || edge;
+ var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);
+ var webkit = !edge && /WebKit\//.test(userAgent);
+ var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent);
+ var chrome = !edge && /Chrome\//.test(userAgent);
+ var presto = /Opera\//.test(userAgent);
+ var safari = /Apple Computer/.test(navigator.vendor);
+ var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent);
+ var phantom = /PhantomJS/.test(userAgent);
+
+ var ios = safari && (/Mobile\/\w+/.test(userAgent) || navigator.maxTouchPoints > 2);
+ var android = /Android/.test(userAgent);
+ // This is woefully incomplete. Suggestions for alternative methods welcome.
+ var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);
+ var mac = ios || /Mac/.test(platform);
+ var chromeOS = /\bCrOS\b/.test(userAgent);
+ var windows = /win/i.test(platform);
+
+ var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/);
+ if (presto_version) { presto_version = Number(presto_version[1]); }
+ if (presto_version && presto_version >= 15) { presto = false; webkit = true; }
+ // Some browsers use the wrong event properties to signal cmd/ctrl on OS X
+ var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));
+ var captureRightClick = gecko || (ie && ie_version >= 9);
+
+ function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") }
+
+ var rmClass = function(node, cls) {
+ var current = node.className;
+ var match = classTest(cls).exec(current);
+ if (match) {
+ var after = current.slice(match.index + match[0].length);
+ node.className = current.slice(0, match.index) + (after ? match[1] + after : "");
+ }
+ };
+
+ function removeChildren(e) {
+ for (var count = e.childNodes.length; count > 0; --count)
+ { e.removeChild(e.firstChild); }
+ return e
+ }
+
+ function removeChildrenAndAdd(parent, e) {
+ return removeChildren(parent).appendChild(e)
+ }
+
+ function elt(tag, content, className, style) {
+ var e = document.createElement(tag);
+ if (className) { e.className = className; }
+ if (style) { e.style.cssText = style; }
+ if (typeof content == "string") { e.appendChild(document.createTextNode(content)); }
+ else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }
+ return e
+ }
+ // wrapper for elt, which removes the elt from the accessibility tree
+ function eltP(tag, content, className, style) {
+ var e = elt(tag, content, className, style);
+ e.setAttribute("role", "presentation");
+ return e
+ }
+
+ var range;
+ if (document.createRange) { range = function(node, start, end, endNode) {
+ var r = document.createRange();
+ r.setEnd(endNode || node, end);
+ r.setStart(node, start);
+ return r
+ }; }
+ else { range = function(node, start, end) {
+ var r = document.body.createTextRange();
+ try { r.moveToElementText(node.parentNode); }
+ catch(e) { return r }
+ r.collapse(true);
+ r.moveEnd("character", end);
+ r.moveStart("character", start);
+ return r
+ }; }
+
+ function contains(parent, child) {
+ if (child.nodeType == 3) // Android browser always returns false when child is a textnode
+ { child = child.parentNode; }
+ if (parent.contains)
+ { return parent.contains(child) }
+ do {
+ if (child.nodeType == 11) { child = child.host; }
+ if (child == parent) { return true }
+ } while (child = child.parentNode)
+ }
+
+ function activeElt() {
+ // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement.
+ // IE < 10 will throw when accessed while the page is loading or in an iframe.
+ // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.
+ var activeElement;
+ try {
+ activeElement = document.activeElement;
+ } catch(e) {
+ activeElement = document.body || null;
+ }
+ while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)
+ { activeElement = activeElement.shadowRoot.activeElement; }
+ return activeElement
+ }
+
+ function addClass(node, cls) {
+ var current = node.className;
+ if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls; }
+ }
+ function joinClasses(a, b) {
+ var as = a.split(" ");
+ for (var i = 0; i < as.length; i++)
+ { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i]; } }
+ return b
+ }
+
+ var selectInput = function(node) { node.select(); };
+ if (ios) // Mobile Safari apparently has a bug where select() is broken.
+ { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }
+ else if (ie) // Suppress mysterious IE10 errors
+ { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }
+
+ function bind(f) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return function(){return f.apply(null, args)}
+ }
+
+ function copyObj(obj, target, overwrite) {
+ if (!target) { target = {}; }
+ for (var prop in obj)
+ { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))
+ { target[prop] = obj[prop]; } }
+ return target
+ }
+
+ // Counts the column offset in a string, taking tabs into account.
+ // Used mostly to find indentation.
+ function countColumn(string, end, tabSize, startIndex, startValue) {
+ if (end == null) {
+ end = string.search(/[^\s\u00a0]/);
+ if (end == -1) { end = string.length; }
+ }
+ for (var i = startIndex || 0, n = startValue || 0;;) {
+ var nextTab = string.indexOf("\t", i);
+ if (nextTab < 0 || nextTab >= end)
+ { return n + (end - i) }
+ n += nextTab - i;
+ n += tabSize - (n % tabSize);
+ i = nextTab + 1;
+ }
+ }
+
+ var Delayed = function() {
+ this.id = null;
+ this.f = null;
+ this.time = 0;
+ this.handler = bind(this.onTimeout, this);
+ };
+ Delayed.prototype.onTimeout = function (self) {
+ self.id = 0;
+ if (self.time <= +new Date) {
+ self.f();
+ } else {
+ setTimeout(self.handler, self.time - +new Date);
+ }
+ };
+ Delayed.prototype.set = function (ms, f) {
+ this.f = f;
+ var time = +new Date + ms;
+ if (!this.id || time < this.time) {
+ clearTimeout(this.id);
+ this.id = setTimeout(this.handler, ms);
+ this.time = time;
+ }
+ };
+
+ function indexOf(array, elt) {
+ for (var i = 0; i < array.length; ++i)
+ { if (array[i] == elt) { return i } }
+ return -1
+ }
+
+ // Number of pixels added to scroller and sizer to hide scrollbar
+ var scrollerGap = 50;
+
+ // Returned or thrown by various protocols to signal 'I'm not
+ // handling this'.
+ var Pass = {toString: function(){return "CodeMirror.Pass"}};
+
+ // Reused option objects for setSelection & friends
+ var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"};
+
+ // The inverse of countColumn -- find the offset that corresponds to
+ // a particular column.
+ function findColumn(string, goal, tabSize) {
+ for (var pos = 0, col = 0;;) {
+ var nextTab = string.indexOf("\t", pos);
+ if (nextTab == -1) { nextTab = string.length; }
+ var skipped = nextTab - pos;
+ if (nextTab == string.length || col + skipped >= goal)
+ { return pos + Math.min(skipped, goal - col) }
+ col += nextTab - pos;
+ col += tabSize - (col % tabSize);
+ pos = nextTab + 1;
+ if (col >= goal) { return pos }
+ }
+ }
+
+ var spaceStrs = [""];
+ function spaceStr(n) {
+ while (spaceStrs.length <= n)
+ { spaceStrs.push(lst(spaceStrs) + " "); }
+ return spaceStrs[n]
+ }
+
+ function lst(arr) { return arr[arr.length-1] }
+
+ function map(array, f) {
+ var out = [];
+ for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }
+ return out
+ }
+
+ function insertSorted(array, value, score) {
+ var pos = 0, priority = score(value);
+ while (pos < array.length && score(array[pos]) <= priority) { pos++; }
+ array.splice(pos, 0, value);
+ }
+
+ function nothing() {}
+
+ function createObj(base, props) {
+ var inst;
+ if (Object.create) {
+ inst = Object.create(base);
+ } else {
+ nothing.prototype = base;
+ inst = new nothing();
+ }
+ if (props) { copyObj(props, inst); }
+ return inst
+ }
+
+ var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;
+ function isWordCharBasic(ch) {
+ return /\w/.test(ch) || ch > "\x80" &&
+ (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))
+ }
+ function isWordChar(ch, helper) {
+ if (!helper) { return isWordCharBasic(ch) }
+ if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true }
+ return helper.test(ch)
+ }
+
+ function isEmpty(obj) {
+ for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }
+ return true
+ }
+
+ // Extending unicode characters. A series of a non-extending char +
+ // any number of extending chars is treated as a single unit as far
+ // as editing and measuring is concerned. This is not fully correct,
+ // since some scripts/fonts/browsers also treat other configurations
+ // of code points as a group.
+ var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;
+ function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }
+
+ // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.
+ function skipExtendingChars(str, pos, dir) {
+ while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }
+ return pos
+ }
+
+ // Returns the value from the range [`from`; `to`] that satisfies
+ // `pred` and is closest to `from`. Assumes that at least `to`
+ // satisfies `pred`. Supports `from` being greater than `to`.
+ function findFirst(pred, from, to) {
+ // At any point we are certain `to` satisfies `pred`, don't know
+ // whether `from` does.
+ var dir = from > to ? -1 : 1;
+ for (;;) {
+ if (from == to) { return from }
+ var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);
+ if (mid == from) { return pred(mid) ? from : to }
+ if (pred(mid)) { to = mid; }
+ else { from = mid + dir; }
+ }
+ }
+
+ // BIDI HELPERS
+
+ function iterateBidiSections(order, from, to, f) {
+ if (!order) { return f(from, to, "ltr", 0) }
+ var found = false;
+ for (var i = 0; i < order.length; ++i) {
+ var part = order[i];
+ if (part.from < to && part.to > from || from == to && part.to == from) {
+ f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i);
+ found = true;
+ }
+ }
+ if (!found) { f(from, to, "ltr"); }
+ }
+
+ var bidiOther = null;
+ function getBidiPartAt(order, ch, sticky) {
+ var found;
+ bidiOther = null;
+ for (var i = 0; i < order.length; ++i) {
+ var cur = order[i];
+ if (cur.from < ch && cur.to > ch) { return i }
+ if (cur.to == ch) {
+ if (cur.from != cur.to && sticky == "before") { found = i; }
+ else { bidiOther = i; }
+ }
+ if (cur.from == ch) {
+ if (cur.from != cur.to && sticky != "before") { found = i; }
+ else { bidiOther = i; }
+ }
+ }
+ return found != null ? found : bidiOther
+ }
+
+ // Bidirectional ordering algorithm
+ // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm
+ // that this (partially) implements.
+
+ // One-char codes used for character types:
+ // L (L): Left-to-Right
+ // R (R): Right-to-Left
+ // r (AL): Right-to-Left Arabic
+ // 1 (EN): European Number
+ // + (ES): European Number Separator
+ // % (ET): European Number Terminator
+ // n (AN): Arabic Number
+ // , (CS): Common Number Separator
+ // m (NSM): Non-Spacing Mark
+ // b (BN): Boundary Neutral
+ // s (B): Paragraph Separator
+ // t (S): Segment Separator
+ // w (WS): Whitespace
+ // N (ON): Other Neutrals
+
+ // Returns null if characters are ordered as they appear
+ // (left-to-right), or an array of sections ({from, to, level}
+ // objects) in the order in which they occur visually.
+ var bidiOrdering = (function() {
+ // Character types for codepoints 0 to 0xff
+ var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN";
+ // Character types for codepoints 0x600 to 0x6f9
+ var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";
+ function charType(code) {
+ if (code <= 0xf7) { return lowTypes.charAt(code) }
+ else if (0x590 <= code && code <= 0x5f4) { return "R" }
+ else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }
+ else if (0x6ee <= code && code <= 0x8ac) { return "r" }
+ else if (0x2000 <= code && code <= 0x200b) { return "w" }
+ else if (code == 0x200c) { return "b" }
+ else { return "L" }
+ }
+
+ var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;
+ var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;
+
+ function BidiSpan(level, from, to) {
+ this.level = level;
+ this.from = from; this.to = to;
+ }
+
+ return function(str, direction) {
+ var outerType = direction == "ltr" ? "L" : "R";
+
+ if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { return false }
+ var len = str.length, types = [];
+ for (var i = 0; i < len; ++i)
+ { types.push(charType(str.charCodeAt(i))); }
+
+ // W1. Examine each non-spacing mark (NSM) in the level run, and
+ // change the type of the NSM to the type of the previous
+ // character. If the NSM is at the start of the level run, it will
+ // get the type of sor.
+ for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {
+ var type = types[i$1];
+ if (type == "m") { types[i$1] = prev; }
+ else { prev = type; }
+ }
+
+ // W2. Search backwards from each instance of a European number
+ // until the first strong type (R, L, AL, or sor) is found. If an
+ // AL is found, change the type of the European number to Arabic
+ // number.
+ // W3. Change all ALs to R.
+ for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {
+ var type$1 = types[i$2];
+ if (type$1 == "1" && cur == "r") { types[i$2] = "n"; }
+ else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R"; } }
+ }
+
+ // W4. A single European separator between two European numbers
+ // changes to a European number. A single common separator between
+ // two numbers of the same type changes to that type.
+ for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {
+ var type$2 = types[i$3];
+ if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1"; }
+ else if (type$2 == "," && prev$1 == types[i$3+1] &&
+ (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1; }
+ prev$1 = type$2;
+ }
+
+ // W5. A sequence of European terminators adjacent to European
+ // numbers changes to all European numbers.
+ // W6. Otherwise, separators and terminators change to Other
+ // Neutral.
+ for (var i$4 = 0; i$4 < len; ++i$4) {
+ var type$3 = types[i$4];
+ if (type$3 == ",") { types[i$4] = "N"; }
+ else if (type$3 == "%") {
+ var end = (void 0);
+ for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {}
+ var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N";
+ for (var j = i$4; j < end; ++j) { types[j] = replace; }
+ i$4 = end - 1;
+ }
+ }
+
+ // W7. Search backwards from each instance of a European number
+ // until the first strong type (R, L, or sor) is found. If an L is
+ // found, then change the type of the European number to L.
+ for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {
+ var type$4 = types[i$5];
+ if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L"; }
+ else if (isStrong.test(type$4)) { cur$1 = type$4; }
+ }
+
+ // N1. A sequence of neutrals takes the direction of the
+ // surrounding strong text if the text on both sides has the same
+ // direction. European and Arabic numbers act as if they were R in
+ // terms of their influence on neutrals. Start-of-level-run (sor)
+ // and end-of-level-run (eor) are used at level run boundaries.
+ // N2. Any remaining neutrals take the embedding direction.
+ for (var i$6 = 0; i$6 < len; ++i$6) {
+ if (isNeutral.test(types[i$6])) {
+ var end$1 = (void 0);
+ for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}
+ var before = (i$6 ? types[i$6-1] : outerType) == "L";
+ var after = (end$1 < len ? types[end$1] : outerType) == "L";
+ var replace$1 = before == after ? (before ? "L" : "R") : outerType;
+ for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }
+ i$6 = end$1 - 1;
+ }
+ }
+
+ // Here we depart from the documented algorithm, in order to avoid
+ // building up an actual levels array. Since there are only three
+ // levels (0, 1, 2) in an implementation that doesn't take
+ // explicit embedding into account, we can build up the order on
+ // the fly, without following the level-based algorithm.
+ var order = [], m;
+ for (var i$7 = 0; i$7 < len;) {
+ if (countsAsLeft.test(types[i$7])) {
+ var start = i$7;
+ for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}
+ order.push(new BidiSpan(0, start, i$7));
+ } else {
+ var pos = i$7, at = order.length, isRTL = direction == "rtl" ? 1 : 0;
+ for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {}
+ for (var j$2 = pos; j$2 < i$7;) {
+ if (countsAsNum.test(types[j$2])) {
+ if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; }
+ var nstart = j$2;
+ for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}
+ order.splice(at, 0, new BidiSpan(2, nstart, j$2));
+ at += isRTL;
+ pos = j$2;
+ } else { ++j$2; }
+ }
+ if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }
+ }
+ }
+ if (direction == "ltr") {
+ if (order[0].level == 1 && (m = str.match(/^\s+/))) {
+ order[0].from = m[0].length;
+ order.unshift(new BidiSpan(0, 0, m[0].length));
+ }
+ if (lst(order).level == 1 && (m = str.match(/\s+$/))) {
+ lst(order).to -= m[0].length;
+ order.push(new BidiSpan(0, len - m[0].length, len));
+ }
+ }
+
+ return direction == "rtl" ? order.reverse() : order
+ }
+ })();
+
+ // Get the bidi ordering for the given line (and cache it). Returns
+ // false for lines that are fully left-to-right, and an array of
+ // BidiSpan objects otherwise.
+ function getOrder(line, direction) {
+ var order = line.order;
+ if (order == null) { order = line.order = bidiOrdering(line.text, direction); }
+ return order
+ }
+
+ // EVENT HANDLING
+
+ // Lightweight event framework. on/off also work on DOM nodes,
+ // registering native DOM handlers.
+
+ var noHandlers = [];
+
+ var on = function(emitter, type, f) {
+ if (emitter.addEventListener) {
+ emitter.addEventListener(type, f, false);
+ } else if (emitter.attachEvent) {
+ emitter.attachEvent("on" + type, f);
+ } else {
+ var map = emitter._handlers || (emitter._handlers = {});
+ map[type] = (map[type] || noHandlers).concat(f);
+ }
+ };
+
+ function getHandlers(emitter, type) {
+ return emitter._handlers && emitter._handlers[type] || noHandlers
+ }
+
+ function off(emitter, type, f) {
+ if (emitter.removeEventListener) {
+ emitter.removeEventListener(type, f, false);
+ } else if (emitter.detachEvent) {
+ emitter.detachEvent("on" + type, f);
+ } else {
+ var map = emitter._handlers, arr = map && map[type];
+ if (arr) {
+ var index = indexOf(arr, f);
+ if (index > -1)
+ { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }
+ }
+ }
+ }
+
+ function signal(emitter, type /*, values...*/) {
+ var handlers = getHandlers(emitter, type);
+ if (!handlers.length) { return }
+ var args = Array.prototype.slice.call(arguments, 2);
+ for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }
+ }
+
+ // The DOM events that CodeMirror handles can be overridden by
+ // registering a (non-DOM) handler on the editor for the event name,
+ // and preventDefault-ing the event in that handler.
+ function signalDOMEvent(cm, e, override) {
+ if (typeof e == "string")
+ { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }
+ signal(cm, override || e.type, cm, e);
+ return e_defaultPrevented(e) || e.codemirrorIgnore
+ }
+
+ function signalCursorActivity(cm) {
+ var arr = cm._handlers && cm._handlers.cursorActivity;
+ if (!arr) { return }
+ var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);
+ for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)
+ { set.push(arr[i]); } }
+ }
+
+ function hasHandler(emitter, type) {
+ return getHandlers(emitter, type).length > 0
+ }
+
+ // Add on and off methods to a constructor's prototype, to make
+ // registering events on such objects more convenient.
+ function eventMixin(ctor) {
+ ctor.prototype.on = function(type, f) {on(this, type, f);};
+ ctor.prototype.off = function(type, f) {off(this, type, f);};
+ }
+
+ // Due to the fact that we still support jurassic IE versions, some
+ // compatibility wrappers are needed.
+
+ function e_preventDefault(e) {
+ if (e.preventDefault) { e.preventDefault(); }
+ else { e.returnValue = false; }
+ }
+ function e_stopPropagation(e) {
+ if (e.stopPropagation) { e.stopPropagation(); }
+ else { e.cancelBubble = true; }
+ }
+ function e_defaultPrevented(e) {
+ return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false
+ }
+ function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}
+
+ function e_target(e) {return e.target || e.srcElement}
+ function e_button(e) {
+ var b = e.which;
+ if (b == null) {
+ if (e.button & 1) { b = 1; }
+ else if (e.button & 2) { b = 3; }
+ else if (e.button & 4) { b = 2; }
+ }
+ if (mac && e.ctrlKey && b == 1) { b = 3; }
+ return b
+ }
+
+ // Detect drag-and-drop
+ var dragAndDrop = function() {
+ // There is *some* kind of drag-and-drop support in IE6-8, but I
+ // couldn't get it to work yet.
+ if (ie && ie_version < 9) { return false }
+ var div = elt('div');
+ return "draggable" in div || "dragDrop" in div
+ }();
+
+ var zwspSupported;
+ function zeroWidthElement(measure) {
+ if (zwspSupported == null) {
+ var test = elt("span", "\u200b");
+ removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")]));
+ if (measure.firstChild.offsetHeight != 0)
+ { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }
+ }
+ var node = zwspSupported ? elt("span", "\u200b") :
+ elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px");
+ node.setAttribute("cm-text", "");
+ return node
+ }
+
+ // Feature-detect IE's crummy client rect reporting for bidi text
+ var badBidiRects;
+ function hasBadBidiRects(measure) {
+ if (badBidiRects != null) { return badBidiRects }
+ var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA"));
+ var r0 = range(txt, 0, 1).getBoundingClientRect();
+ var r1 = range(txt, 1, 2).getBoundingClientRect();
+ removeChildren(measure);
+ if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)
+ return badBidiRects = (r1.right - r0.right < 3)
+ }
+
+ // See if "".split is the broken IE version, if so, provide an
+ // alternative way to split lines.
+ var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) {
+ var pos = 0, result = [], l = string.length;
+ while (pos <= l) {
+ var nl = string.indexOf("\n", pos);
+ if (nl == -1) { nl = string.length; }
+ var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl);
+ var rt = line.indexOf("\r");
+ if (rt != -1) {
+ result.push(line.slice(0, rt));
+ pos += rt + 1;
+ } else {
+ result.push(line);
+ pos = nl + 1;
+ }
+ }
+ return result
+ } : function (string) { return string.split(/\r\n?|\n/); };
+
+ var hasSelection = window.getSelection ? function (te) {
+ try { return te.selectionStart != te.selectionEnd }
+ catch(e) { return false }
+ } : function (te) {
+ var range;
+ try {range = te.ownerDocument.selection.createRange();}
+ catch(e) {}
+ if (!range || range.parentElement() != te) { return false }
+ return range.compareEndPoints("StartToEnd", range) != 0
+ };
+
+ var hasCopyEvent = (function () {
+ var e = elt("div");
+ if ("oncopy" in e) { return true }
+ e.setAttribute("oncopy", "return;");
+ return typeof e.oncopy == "function"
+ })();
+
+ var badZoomedRects = null;
+ function hasBadZoomedRects(measure) {
+ if (badZoomedRects != null) { return badZoomedRects }
+ var node = removeChildrenAndAdd(measure, elt("span", "x"));
+ var normal = node.getBoundingClientRect();
+ var fromRange = range(node, 0, 1).getBoundingClientRect();
+ return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1
+ }
+
+ // Known modes, by name and by MIME
+ var modes = {}, mimeModes = {};
+
+ // Extra arguments are stored as the mode's dependencies, which is
+ // used by (legacy) mechanisms like loadmode.js to automatically
+ // load a mode. (Preferred mechanism is the require/define calls.)
+ function defineMode(name, mode) {
+ if (arguments.length > 2)
+ { mode.dependencies = Array.prototype.slice.call(arguments, 2); }
+ modes[name] = mode;
+ }
+
+ function defineMIME(mime, spec) {
+ mimeModes[mime] = spec;
+ }
+
+ // Given a MIME type, a {name, ...options} config object, or a name
+ // string, return a mode config object.
+ function resolveMode(spec) {
+ if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) {
+ spec = mimeModes[spec];
+ } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) {
+ var found = mimeModes[spec.name];
+ if (typeof found == "string") { found = {name: found}; }
+ spec = createObj(found, spec);
+ spec.name = found.name;
+ } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) {
+ return resolveMode("application/xml")
+ } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) {
+ return resolveMode("application/json")
+ }
+ if (typeof spec == "string") { return {name: spec} }
+ else { return spec || {name: "null"} }
+ }
+
+ // Given a mode spec (anything that resolveMode accepts), find and
+ // initialize an actual mode object.
+ function getMode(options, spec) {
+ spec = resolveMode(spec);
+ var mfactory = modes[spec.name];
+ if (!mfactory) { return getMode(options, "text/plain") }
+ var modeObj = mfactory(options, spec);
+ if (modeExtensions.hasOwnProperty(spec.name)) {
+ var exts = modeExtensions[spec.name];
+ for (var prop in exts) {
+ if (!exts.hasOwnProperty(prop)) { continue }
+ if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop]; }
+ modeObj[prop] = exts[prop];
+ }
+ }
+ modeObj.name = spec.name;
+ if (spec.helperType) { modeObj.helperType = spec.helperType; }
+ if (spec.modeProps) { for (var prop$1 in spec.modeProps)
+ { modeObj[prop$1] = spec.modeProps[prop$1]; } }
+
+ return modeObj
+ }
+
+ // This can be used to attach properties to mode objects from
+ // outside the actual mode definition.
+ var modeExtensions = {};
+ function extendMode(mode, properties) {
+ var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});
+ copyObj(properties, exts);
+ }
+
+ function copyState(mode, state) {
+ if (state === true) { return state }
+ if (mode.copyState) { return mode.copyState(state) }
+ var nstate = {};
+ for (var n in state) {
+ var val = state[n];
+ if (val instanceof Array) { val = val.concat([]); }
+ nstate[n] = val;
+ }
+ return nstate
+ }
+
+ // Given a mode and a state (for that mode), find the inner mode and
+ // state at the position that the state refers to.
+ function innerMode(mode, state) {
+ var info;
+ while (mode.innerMode) {
+ info = mode.innerMode(state);
+ if (!info || info.mode == mode) { break }
+ state = info.state;
+ mode = info.mode;
+ }
+ return info || {mode: mode, state: state}
+ }
+
+ function startState(mode, a1, a2) {
+ return mode.startState ? mode.startState(a1, a2) : true
+ }
+
+ // STRING STREAM
+
+ // Fed to the mode parsers, provides helper functions to make
+ // parsers more succinct.
+
+ var StringStream = function(string, tabSize, lineOracle) {
+ this.pos = this.start = 0;
+ this.string = string;
+ this.tabSize = tabSize || 8;
+ this.lastColumnPos = this.lastColumnValue = 0;
+ this.lineStart = 0;
+ this.lineOracle = lineOracle;
+ };
+
+ StringStream.prototype.eol = function () {return this.pos >= this.string.length};
+ StringStream.prototype.sol = function () {return this.pos == this.lineStart};
+ StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};
+ StringStream.prototype.next = function () {
+ if (this.pos < this.string.length)
+ { return this.string.charAt(this.pos++) }
+ };
+ StringStream.prototype.eat = function (match) {
+ var ch = this.string.charAt(this.pos);
+ var ok;
+ if (typeof match == "string") { ok = ch == match; }
+ else { ok = ch && (match.test ? match.test(ch) : match(ch)); }
+ if (ok) {++this.pos; return ch}
+ };
+ StringStream.prototype.eatWhile = function (match) {
+ var start = this.pos;
+ while (this.eat(match)){}
+ return this.pos > start
+ };
+ StringStream.prototype.eatSpace = function () {
+ var start = this.pos;
+ while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; }
+ return this.pos > start
+ };
+ StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};
+ StringStream.prototype.skipTo = function (ch) {
+ var found = this.string.indexOf(ch, this.pos);
+ if (found > -1) {this.pos = found; return true}
+ };
+ StringStream.prototype.backUp = function (n) {this.pos -= n;};
+ StringStream.prototype.column = function () {
+ if (this.lastColumnPos < this.start) {
+ this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);
+ this.lastColumnPos = this.start;
+ }
+ return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)
+ };
+ StringStream.prototype.indentation = function () {
+ return countColumn(this.string, null, this.tabSize) -
+ (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)
+ };
+ StringStream.prototype.match = function (pattern, consume, caseInsensitive) {
+ if (typeof pattern == "string") {
+ var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };
+ var substr = this.string.substr(this.pos, pattern.length);
+ if (cased(substr) == cased(pattern)) {
+ if (consume !== false) { this.pos += pattern.length; }
+ return true
+ }
+ } else {
+ var match = this.string.slice(this.pos).match(pattern);
+ if (match && match.index > 0) { return null }
+ if (match && consume !== false) { this.pos += match[0].length; }
+ return match
+ }
+ };
+ StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};
+ StringStream.prototype.hideFirstChars = function (n, inner) {
+ this.lineStart += n;
+ try { return inner() }
+ finally { this.lineStart -= n; }
+ };
+ StringStream.prototype.lookAhead = function (n) {
+ var oracle = this.lineOracle;
+ return oracle && oracle.lookAhead(n)
+ };
+ StringStream.prototype.baseToken = function () {
+ var oracle = this.lineOracle;
+ return oracle && oracle.baseToken(this.pos)
+ };
+
+ // Find the line object corresponding to the given line number.
+ function getLine(doc, n) {
+ n -= doc.first;
+ if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") }
+ var chunk = doc;
+ while (!chunk.lines) {
+ for (var i = 0;; ++i) {
+ var child = chunk.children[i], sz = child.chunkSize();
+ if (n < sz) { chunk = child; break }
+ n -= sz;
+ }
+ }
+ return chunk.lines[n]
+ }
+
+ // Get the part of a document between two positions, as an array of
+ // strings.
+ function getBetween(doc, start, end) {
+ var out = [], n = start.line;
+ doc.iter(start.line, end.line + 1, function (line) {
+ var text = line.text;
+ if (n == end.line) { text = text.slice(0, end.ch); }
+ if (n == start.line) { text = text.slice(start.ch); }
+ out.push(text);
+ ++n;
+ });
+ return out
+ }
+ // Get the lines between from and to, as array of strings.
+ function getLines(doc, from, to) {
+ var out = [];
+ doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value
+ return out
+ }
+
+ // Update the height of a line, propagating the height change
+ // upwards to parent nodes.
+ function updateLineHeight(line, height) {
+ var diff = height - line.height;
+ if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }
+ }
+
+ // Given a line object, find its line number by walking up through
+ // its parent links.
+ function lineNo(line) {
+ if (line.parent == null) { return null }
+ var cur = line.parent, no = indexOf(cur.lines, line);
+ for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {
+ for (var i = 0;; ++i) {
+ if (chunk.children[i] == cur) { break }
+ no += chunk.children[i].chunkSize();
+ }
+ }
+ return no + cur.first
+ }
+
+ // Find the line at the given vertical position, using the height
+ // information in the document tree.
+ function lineAtHeight(chunk, h) {
+ var n = chunk.first;
+ outer: do {
+ for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {
+ var child = chunk.children[i$1], ch = child.height;
+ if (h < ch) { chunk = child; continue outer }
+ h -= ch;
+ n += child.chunkSize();
+ }
+ return n
+ } while (!chunk.lines)
+ var i = 0;
+ for (; i < chunk.lines.length; ++i) {
+ var line = chunk.lines[i], lh = line.height;
+ if (h < lh) { break }
+ h -= lh;
+ }
+ return n + i
+ }
+
+ function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}
+
+ function lineNumberFor(options, i) {
+ return String(options.lineNumberFormatter(i + options.firstLineNumber))
+ }
+
+ // A Pos instance represents a position within the text.
+ function Pos(line, ch, sticky) {
+ if ( sticky === void 0 ) sticky = null;
+
+ if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }
+ this.line = line;
+ this.ch = ch;
+ this.sticky = sticky;
+ }
+
+ // Compare two positions, return 0 if they are the same, a negative
+ // number when a is less, and a positive number otherwise.
+ function cmp(a, b) { return a.line - b.line || a.ch - b.ch }
+
+ function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }
+
+ function copyPos(x) {return Pos(x.line, x.ch)}
+ function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }
+ function minPos(a, b) { return cmp(a, b) < 0 ? a : b }
+
+ // Most of the external API clips given positions to make sure they
+ // actually exist within the document.
+ function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}
+ function clipPos(doc, pos) {
+ if (pos.line < doc.first) { return Pos(doc.first, 0) }
+ var last = doc.first + doc.size - 1;
+ if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }
+ return clipToLen(pos, getLine(doc, pos.line).text.length)
+ }
+ function clipToLen(pos, linelen) {
+ var ch = pos.ch;
+ if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }
+ else if (ch < 0) { return Pos(pos.line, 0) }
+ else { return pos }
+ }
+ function clipPosArray(doc, array) {
+ var out = [];
+ for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }
+ return out
+ }
+
+ var SavedContext = function(state, lookAhead) {
+ this.state = state;
+ this.lookAhead = lookAhead;
+ };
+
+ var Context = function(doc, state, line, lookAhead) {
+ this.state = state;
+ this.doc = doc;
+ this.line = line;
+ this.maxLookAhead = lookAhead || 0;
+ this.baseTokens = null;
+ this.baseTokenPos = 1;
+ };
+
+ Context.prototype.lookAhead = function (n) {
+ var line = this.doc.getLine(this.line + n);
+ if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }
+ return line
+ };
+
+ Context.prototype.baseToken = function (n) {
+ if (!this.baseTokens) { return null }
+ while (this.baseTokens[this.baseTokenPos] <= n)
+ { this.baseTokenPos += 2; }
+ var type = this.baseTokens[this.baseTokenPos + 1];
+ return {type: type && type.replace(/( |^)overlay .*/, ""),
+ size: this.baseTokens[this.baseTokenPos] - n}
+ };
+
+ Context.prototype.nextLine = function () {
+ this.line++;
+ if (this.maxLookAhead > 0) { this.maxLookAhead--; }
+ };
+
+ Context.fromSaved = function (doc, saved, line) {
+ if (saved instanceof SavedContext)
+ { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }
+ else
+ { return new Context(doc, copyState(doc.mode, saved), line) }
+ };
+
+ Context.prototype.save = function (copy) {
+ var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;
+ return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state
+ };
+
+
+ // Compute a style array (an array starting with a mode generation
+ // -- for invalidation -- followed by pairs of end positions and
+ // style strings), which is used to highlight the tokens on the
+ // line.
+ function highlightLine(cm, line, context, forceToEnd) {
+ // A styles array always starts with a number identifying the
+ // mode/overlays that it is based on (for easy invalidation).
+ var st = [cm.state.modeGen], lineClasses = {};
+ // Compute the base array of styles
+ runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },
+ lineClasses, forceToEnd);
+ var state = context.state;
+
+ // Run overlays, adjust style array.
+ var loop = function ( o ) {
+ context.baseTokens = st;
+ var overlay = cm.state.overlays[o], i = 1, at = 0;
+ context.state = true;
+ runMode(cm, line.text, overlay.mode, context, function (end, style) {
+ var start = i;
+ // Ensure there's a token end at the current position, and that i points at it
+ while (at < end) {
+ var i_end = st[i];
+ if (i_end > end)
+ { st.splice(i, 1, end, st[i+1], i_end); }
+ i += 2;
+ at = Math.min(end, i_end);
+ }
+ if (!style) { return }
+ if (overlay.opaque) {
+ st.splice(start, i - start, end, "overlay " + style);
+ i = start + 2;
+ } else {
+ for (; start < i; start += 2) {
+ var cur = st[start+1];
+ st[start+1] = (cur ? cur + " " : "") + "overlay " + style;
+ }
+ }
+ }, lineClasses);
+ context.state = state;
+ context.baseTokens = null;
+ context.baseTokenPos = 1;
+ };
+
+ for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );
+
+ return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}
+ }
+
+ function getLineStyles(cm, line, updateFrontier) {
+ if (!line.styles || line.styles[0] != cm.state.modeGen) {
+ var context = getContextBefore(cm, lineNo(line));
+ var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);
+ var result = highlightLine(cm, line, context);
+ if (resetState) { context.state = resetState; }
+ line.stateAfter = context.save(!resetState);
+ line.styles = result.styles;
+ if (result.classes) { line.styleClasses = result.classes; }
+ else if (line.styleClasses) { line.styleClasses = null; }
+ if (updateFrontier === cm.doc.highlightFrontier)
+ { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }
+ }
+ return line.styles
+ }
+
+ function getContextBefore(cm, n, precise) {
+ var doc = cm.doc, display = cm.display;
+ if (!doc.mode.startState) { return new Context(doc, true, n) }
+ var start = findStartLine(cm, n, precise);
+ var saved = start > doc.first && getLine(doc, start - 1).stateAfter;
+ var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);
+
+ doc.iter(start, n, function (line) {
+ processLine(cm, line.text, context);
+ var pos = context.line;
+ line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;
+ context.nextLine();
+ });
+ if (precise) { doc.modeFrontier = context.line; }
+ return context
+ }
+
+ // Lightweight form of highlight -- proceed over this line and
+ // update state, but don't save a style array. Used for lines that
+ // aren't currently visible.
+ function processLine(cm, text, context, startAt) {
+ var mode = cm.doc.mode;
+ var stream = new StringStream(text, cm.options.tabSize, context);
+ stream.start = stream.pos = startAt || 0;
+ if (text == "") { callBlankLine(mode, context.state); }
+ while (!stream.eol()) {
+ readToken(mode, stream, context.state);
+ stream.start = stream.pos;
+ }
+ }
+
+ function callBlankLine(mode, state) {
+ if (mode.blankLine) { return mode.blankLine(state) }
+ if (!mode.innerMode) { return }
+ var inner = innerMode(mode, state);
+ if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }
+ }
+
+ function readToken(mode, stream, state, inner) {
+ for (var i = 0; i < 10; i++) {
+ if (inner) { inner[0] = innerMode(mode, state).mode; }
+ var style = mode.token(stream, state);
+ if (stream.pos > stream.start) { return style }
+ }
+ throw new Error("Mode " + mode.name + " failed to advance stream.")
+ }
+
+ var Token = function(stream, type, state) {
+ this.start = stream.start; this.end = stream.pos;
+ this.string = stream.current();
+ this.type = type || null;
+ this.state = state;
+ };
+
+ // Utility for getTokenAt and getLineTokens
+ function takeToken(cm, pos, precise, asArray) {
+ var doc = cm.doc, mode = doc.mode, style;
+ pos = clipPos(doc, pos);
+ var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);
+ var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;
+ if (asArray) { tokens = []; }
+ while ((asArray || stream.pos < pos.ch) && !stream.eol()) {
+ stream.start = stream.pos;
+ style = readToken(mode, stream, context.state);
+ if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }
+ }
+ return asArray ? tokens : new Token(stream, style, context.state)
+ }
+
+ function extractLineClasses(type, output) {
+ if (type) { for (;;) {
+ var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/);
+ if (!lineClass) { break }
+ type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);
+ var prop = lineClass[1] ? "bgClass" : "textClass";
+ if (output[prop] == null)
+ { output[prop] = lineClass[2]; }
+ else if (!(new RegExp("(?:^|\\s)" + lineClass[2] + "(?:$|\\s)")).test(output[prop]))
+ { output[prop] += " " + lineClass[2]; }
+ } }
+ return type
+ }
+
+ // Run the given mode's parser over a line, calling f for each token.
+ function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {
+ var flattenSpans = mode.flattenSpans;
+ if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }
+ var curStart = 0, curStyle = null;
+ var stream = new StringStream(text, cm.options.tabSize, context), style;
+ var inner = cm.options.addModeClass && [null];
+ if (text == "") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }
+ while (!stream.eol()) {
+ if (stream.pos > cm.options.maxHighlightLength) {
+ flattenSpans = false;
+ if (forceToEnd) { processLine(cm, text, context, stream.pos); }
+ stream.pos = text.length;
+ style = null;
+ } else {
+ style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);
+ }
+ if (inner) {
+ var mName = inner[0].name;
+ if (mName) { style = "m-" + (style ? mName + " " + style : mName); }
+ }
+ if (!flattenSpans || curStyle != style) {
+ while (curStart < stream.start) {
+ curStart = Math.min(stream.start, curStart + 5000);
+ f(curStart, curStyle);
+ }
+ curStyle = style;
+ }
+ stream.start = stream.pos;
+ }
+ while (curStart < stream.pos) {
+ // Webkit seems to refuse to render text nodes longer than 57444
+ // characters, and returns inaccurate measurements in nodes
+ // starting around 5000 chars.
+ var pos = Math.min(stream.pos, curStart + 5000);
+ f(pos, curStyle);
+ curStart = pos;
+ }
+ }
+
+ // Finds the line to start with when starting a parse. Tries to
+ // find a line with a stateAfter, so that it can start with a
+ // valid state. If that fails, it returns the line with the
+ // smallest indentation, which tends to need the least context to
+ // parse correctly.
+ function findStartLine(cm, n, precise) {
+ var minindent, minline, doc = cm.doc;
+ var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);
+ for (var search = n; search > lim; --search) {
+ if (search <= doc.first) { return doc.first }
+ var line = getLine(doc, search - 1), after = line.stateAfter;
+ if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))
+ { return search }
+ var indented = countColumn(line.text, null, cm.options.tabSize);
+ if (minline == null || minindent > indented) {
+ minline = search - 1;
+ minindent = indented;
+ }
+ }
+ return minline
+ }
+
+ function retreatFrontier(doc, n) {
+ doc.modeFrontier = Math.min(doc.modeFrontier, n);
+ if (doc.highlightFrontier < n - 10) { return }
+ var start = doc.first;
+ for (var line = n - 1; line > start; line--) {
+ var saved = getLine(doc, line).stateAfter;
+ // change is on 3
+ // state on line 1 looked ahead 2 -- so saw 3
+ // test 1 + 2 < 3 should cover this
+ if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {
+ start = line + 1;
+ break
+ }
+ }
+ doc.highlightFrontier = Math.min(doc.highlightFrontier, start);
+ }
+
+ // Optimize some code when these features are not used.
+ var sawReadOnlySpans = false, sawCollapsedSpans = false;
+
+ function seeReadOnlySpans() {
+ sawReadOnlySpans = true;
+ }
+
+ function seeCollapsedSpans() {
+ sawCollapsedSpans = true;
+ }
+
+ // TEXTMARKER SPANS
+
+ function MarkedSpan(marker, from, to) {
+ this.marker = marker;
+ this.from = from; this.to = to;
+ }
+
+ // Search an array of spans for a span matching the given marker.
+ function getMarkedSpanFor(spans, marker) {
+ if (spans) { for (var i = 0; i < spans.length; ++i) {
+ var span = spans[i];
+ if (span.marker == marker) { return span }
+ } }
+ }
+ // Remove a span from an array, returning undefined if no spans are
+ // left (we don't store arrays for lines without spans).
+ function removeMarkedSpan(spans, span) {
+ var r;
+ for (var i = 0; i < spans.length; ++i)
+ { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }
+ return r
+ }
+ // Add a span to a line.
+ function addMarkedSpan(line, span) {
+ line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];
+ span.marker.attachLine(line);
+ }
+
+ // Used for the algorithm that adjusts markers for a change in the
+ // document. These functions cut an array of spans at a given
+ // character position, returning an array of remaining chunks (or
+ // undefined if nothing remains).
+ function markedSpansBefore(old, startCh, isInsert) {
+ var nw;
+ if (old) { for (var i = 0; i < old.length; ++i) {
+ var span = old[i], marker = span.marker;
+ var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);
+ if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) {
+ var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)
+ ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));
+ }
+ } }
+ return nw
+ }
+ function markedSpansAfter(old, endCh, isInsert) {
+ var nw;
+ if (old) { for (var i = 0; i < old.length; ++i) {
+ var span = old[i], marker = span.marker;
+ var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);
+ if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) {
+ var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)
+ ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,
+ span.to == null ? null : span.to - endCh));
+ }
+ } }
+ return nw
+ }
+
+ // Given a change object, compute the new set of marker spans that
+ // cover the line in which the change took place. Removes spans
+ // entirely within the change, reconnects spans belonging to the
+ // same marker that appear on both sides of the change, and cuts off
+ // spans partially within the change. Returns an array of span
+ // arrays with one element for each line in (after) the change.
+ function stretchSpansOverChange(doc, change) {
+ if (change.full) { return null }
+ var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;
+ var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;
+ if (!oldFirst && !oldLast) { return null }
+
+ var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;
+ // Get the spans that 'stick out' on both sides
+ var first = markedSpansBefore(oldFirst, startCh, isInsert);
+ var last = markedSpansAfter(oldLast, endCh, isInsert);
+
+ // Next, merge those two ends
+ var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);
+ if (first) {
+ // Fix up .to properties of first
+ for (var i = 0; i < first.length; ++i) {
+ var span = first[i];
+ if (span.to == null) {
+ var found = getMarkedSpanFor(last, span.marker);
+ if (!found) { span.to = startCh; }
+ else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }
+ }
+ }
+ }
+ if (last) {
+ // Fix up .from in last (or move them into first in case of sameLine)
+ for (var i$1 = 0; i$1 < last.length; ++i$1) {
+ var span$1 = last[i$1];
+ if (span$1.to != null) { span$1.to += offset; }
+ if (span$1.from == null) {
+ var found$1 = getMarkedSpanFor(first, span$1.marker);
+ if (!found$1) {
+ span$1.from = offset;
+ if (sameLine) { (first || (first = [])).push(span$1); }
+ }
+ } else {
+ span$1.from += offset;
+ if (sameLine) { (first || (first = [])).push(span$1); }
+ }
+ }
+ }
+ // Make sure we didn't create any zero-length spans
+ if (first) { first = clearEmptySpans(first); }
+ if (last && last != first) { last = clearEmptySpans(last); }
+
+ var newMarkers = [first];
+ if (!sameLine) {
+ // Fill gap with whole-line-spans
+ var gap = change.text.length - 2, gapMarkers;
+ if (gap > 0 && first)
+ { for (var i$2 = 0; i$2 < first.length; ++i$2)
+ { if (first[i$2].to == null)
+ { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }
+ for (var i$3 = 0; i$3 < gap; ++i$3)
+ { newMarkers.push(gapMarkers); }
+ newMarkers.push(last);
+ }
+ return newMarkers
+ }
+
+ // Remove spans that are empty and don't have a clearWhenEmpty
+ // option of false.
+ function clearEmptySpans(spans) {
+ for (var i = 0; i < spans.length; ++i) {
+ var span = spans[i];
+ if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)
+ { spans.splice(i--, 1); }
+ }
+ if (!spans.length) { return null }
+ return spans
+ }
+
+ // Used to 'clip' out readOnly ranges when making a change.
+ function removeReadOnlyRanges(doc, from, to) {
+ var markers = null;
+ doc.iter(from.line, to.line + 1, function (line) {
+ if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {
+ var mark = line.markedSpans[i].marker;
+ if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))
+ { (markers || (markers = [])).push(mark); }
+ } }
+ });
+ if (!markers) { return null }
+ var parts = [{from: from, to: to}];
+ for (var i = 0; i < markers.length; ++i) {
+ var mk = markers[i], m = mk.find(0);
+ for (var j = 0; j < parts.length; ++j) {
+ var p = parts[j];
+ if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }
+ var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);
+ if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)
+ { newParts.push({from: p.from, to: m.from}); }
+ if (dto > 0 || !mk.inclusiveRight && !dto)
+ { newParts.push({from: m.to, to: p.to}); }
+ parts.splice.apply(parts, newParts);
+ j += newParts.length - 3;
+ }
+ }
+ return parts
+ }
+
+ // Connect or disconnect spans from a line.
+ function detachMarkedSpans(line) {
+ var spans = line.markedSpans;
+ if (!spans) { return }
+ for (var i = 0; i < spans.length; ++i)
+ { spans[i].marker.detachLine(line); }
+ line.markedSpans = null;
+ }
+ function attachMarkedSpans(line, spans) {
+ if (!spans) { return }
+ for (var i = 0; i < spans.length; ++i)
+ { spans[i].marker.attachLine(line); }
+ line.markedSpans = spans;
+ }
+
+ // Helpers used when computing which overlapping collapsed span
+ // counts as the larger one.
+ function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }
+ function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }
+
+ // Returns a number indicating which of two overlapping collapsed
+ // spans is larger (and thus includes the other). Falls back to
+ // comparing ids when the spans cover exactly the same range.
+ function compareCollapsedMarkers(a, b) {
+ var lenDiff = a.lines.length - b.lines.length;
+ if (lenDiff != 0) { return lenDiff }
+ var aPos = a.find(), bPos = b.find();
+ var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);
+ if (fromCmp) { return -fromCmp }
+ var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);
+ if (toCmp) { return toCmp }
+ return b.id - a.id
+ }
+
+ // Find out whether a line ends or starts in a collapsed span. If
+ // so, return the marker for that span.
+ function collapsedSpanAtSide(line, start) {
+ var sps = sawCollapsedSpans && line.markedSpans, found;
+ if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {
+ sp = sps[i];
+ if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&
+ (!found || compareCollapsedMarkers(found, sp.marker) < 0))
+ { found = sp.marker; }
+ } }
+ return found
+ }
+ function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }
+ function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }
+
+ function collapsedSpanAround(line, ch) {
+ var sps = sawCollapsedSpans && line.markedSpans, found;
+ if (sps) { for (var i = 0; i < sps.length; ++i) {
+ var sp = sps[i];
+ if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&
+ (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }
+ } }
+ return found
+ }
+
+ // Test whether there exists a collapsed span that partially
+ // overlaps (covers the start or end, but not both) of a new span.
+ // Such overlap is not allowed.
+ function conflictingCollapsedRange(doc, lineNo, from, to, marker) {
+ var line = getLine(doc, lineNo);
+ var sps = sawCollapsedSpans && line.markedSpans;
+ if (sps) { for (var i = 0; i < sps.length; ++i) {
+ var sp = sps[i];
+ if (!sp.marker.collapsed) { continue }
+ var found = sp.marker.find(0);
+ var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);
+ var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);
+ if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }
+ if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||
+ fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))
+ { return true }
+ } }
+ }
+
+ // A visual line is a line as drawn on the screen. Folding, for
+ // example, can cause multiple logical lines to appear on the same
+ // visual line. This finds the start of the visual line that the
+ // given line is part of (usually that is the line itself).
+ function visualLine(line) {
+ var merged;
+ while (merged = collapsedSpanAtStart(line))
+ { line = merged.find(-1, true).line; }
+ return line
+ }
+
+ function visualLineEnd(line) {
+ var merged;
+ while (merged = collapsedSpanAtEnd(line))
+ { line = merged.find(1, true).line; }
+ return line
+ }
+
+ // Returns an array of logical lines that continue the visual line
+ // started by the argument, or undefined if there are no such lines.
+ function visualLineContinued(line) {
+ var merged, lines;
+ while (merged = collapsedSpanAtEnd(line)) {
+ line = merged.find(1, true).line
+ ;(lines || (lines = [])).push(line);
+ }
+ return lines
+ }
+
+ // Get the line number of the start of the visual line that the
+ // given line number is part of.
+ function visualLineNo(doc, lineN) {
+ var line = getLine(doc, lineN), vis = visualLine(line);
+ if (line == vis) { return lineN }
+ return lineNo(vis)
+ }
+
+ // Get the line number of the start of the next visual line after
+ // the given line.
+ function visualLineEndNo(doc, lineN) {
+ if (lineN > doc.lastLine()) { return lineN }
+ var line = getLine(doc, lineN), merged;
+ if (!lineIsHidden(doc, line)) { return lineN }
+ while (merged = collapsedSpanAtEnd(line))
+ { line = merged.find(1, true).line; }
+ return lineNo(line) + 1
+ }
+
+ // Compute whether a line is hidden. Lines count as hidden when they
+ // are part of a visual line that starts with another line, or when
+ // they are entirely covered by collapsed, non-widget span.
+ function lineIsHidden(doc, line) {
+ var sps = sawCollapsedSpans && line.markedSpans;
+ if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {
+ sp = sps[i];
+ if (!sp.marker.collapsed) { continue }
+ if (sp.from == null) { return true }
+ if (sp.marker.widgetNode) { continue }
+ if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))
+ { return true }
+ } }
+ }
+ function lineIsHiddenInner(doc, line, span) {
+ if (span.to == null) {
+ var end = span.marker.find(1, true);
+ return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))
+ }
+ if (span.marker.inclusiveRight && span.to == line.text.length)
+ { return true }
+ for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {
+ sp = line.markedSpans[i];
+ if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&
+ (sp.to == null || sp.to != span.from) &&
+ (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&
+ lineIsHiddenInner(doc, line, sp)) { return true }
+ }
+ }
+
+ // Find the height above the given line.
+ function heightAtLine(lineObj) {
+ lineObj = visualLine(lineObj);
+
+ var h = 0, chunk = lineObj.parent;
+ for (var i = 0; i < chunk.lines.length; ++i) {
+ var line = chunk.lines[i];
+ if (line == lineObj) { break }
+ else { h += line.height; }
+ }
+ for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {
+ for (var i$1 = 0; i$1 < p.children.length; ++i$1) {
+ var cur = p.children[i$1];
+ if (cur == chunk) { break }
+ else { h += cur.height; }
+ }
+ }
+ return h
+ }
+
+ // Compute the character length of a line, taking into account
+ // collapsed ranges (see markText) that might hide parts, and join
+ // other lines onto it.
+ function lineLength(line) {
+ if (line.height == 0) { return 0 }
+ var len = line.text.length, merged, cur = line;
+ while (merged = collapsedSpanAtStart(cur)) {
+ var found = merged.find(0, true);
+ cur = found.from.line;
+ len += found.from.ch - found.to.ch;
+ }
+ cur = line;
+ while (merged = collapsedSpanAtEnd(cur)) {
+ var found$1 = merged.find(0, true);
+ len -= cur.text.length - found$1.from.ch;
+ cur = found$1.to.line;
+ len += cur.text.length - found$1.to.ch;
+ }
+ return len
+ }
+
+ // Find the longest line in the document.
+ function findMaxLine(cm) {
+ var d = cm.display, doc = cm.doc;
+ d.maxLine = getLine(doc, doc.first);
+ d.maxLineLength = lineLength(d.maxLine);
+ d.maxLineChanged = true;
+ doc.iter(function (line) {
+ var len = lineLength(line);
+ if (len > d.maxLineLength) {
+ d.maxLineLength = len;
+ d.maxLine = line;
+ }
+ });
+ }
+
+ // LINE DATA STRUCTURE
+
+ // Line objects. These hold state related to a line, including
+ // highlighting info (the styles array).
+ var Line = function(text, markedSpans, estimateHeight) {
+ this.text = text;
+ attachMarkedSpans(this, markedSpans);
+ this.height = estimateHeight ? estimateHeight(this) : 1;
+ };
+
+ Line.prototype.lineNo = function () { return lineNo(this) };
+ eventMixin(Line);
+
+ // Change the content (text, markers) of a line. Automatically
+ // invalidates cached information and tries to re-estimate the
+ // line's height.
+ function updateLine(line, text, markedSpans, estimateHeight) {
+ line.text = text;
+ if (line.stateAfter) { line.stateAfter = null; }
+ if (line.styles) { line.styles = null; }
+ if (line.order != null) { line.order = null; }
+ detachMarkedSpans(line);
+ attachMarkedSpans(line, markedSpans);
+ var estHeight = estimateHeight ? estimateHeight(line) : 1;
+ if (estHeight != line.height) { updateLineHeight(line, estHeight); }
+ }
+
+ // Detach a line from the document tree and its markers.
+ function cleanUpLine(line) {
+ line.parent = null;
+ detachMarkedSpans(line);
+ }
+
+ // Convert a style as returned by a mode (either null, or a string
+ // containing one or more styles) to a CSS style. This is cached,
+ // and also looks for line-wide styles.
+ var styleToClassCache = {}, styleToClassCacheWithMode = {};
+ function interpretTokenStyle(style, options) {
+ if (!style || /^\s*$/.test(style)) { return null }
+ var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;
+ return cache[style] ||
+ (cache[style] = style.replace(/\S+/g, "cm-$&"))
+ }
+
+ // Render the DOM representation of the text of a line. Also builds
+ // up a 'line map', which points at the DOM nodes that represent
+ // specific stretches of text, and is used by the measuring code.
+ // The returned object contains the DOM node, this map, and
+ // information about line-wide styles that were set by the mode.
+ function buildLineContent(cm, lineView) {
+ // The padding-right forces the element to have a 'border', which
+ // is needed on Webkit to be able to get line-level bounding
+ // rectangles for it (in measureChar).
+ var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null);
+ var builder = {pre: eltP("pre", [content], "CodeMirror-line"), content: content,
+ col: 0, pos: 0, cm: cm,
+ trailingSpace: false,
+ splitSpaces: cm.getOption("lineWrapping")};
+ lineView.measure = {};
+
+ // Iterate over the logical lines that make up this visual line.
+ for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {
+ var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);
+ builder.pos = 0;
+ builder.addToken = buildToken;
+ // Optionally wire in some hacks into the token-rendering
+ // algorithm, to deal with browser quirks.
+ if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))
+ { builder.addToken = buildTokenBadBidi(builder.addToken, order); }
+ builder.map = [];
+ var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);
+ insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));
+ if (line.styleClasses) {
+ if (line.styleClasses.bgClass)
+ { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); }
+ if (line.styleClasses.textClass)
+ { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); }
+ }
+
+ // Ensure at least a single node is present, for measuring.
+ if (builder.map.length == 0)
+ { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }
+
+ // Store the map and a cache object for the current logical line
+ if (i == 0) {
+ lineView.measure.map = builder.map;
+ lineView.measure.cache = {};
+ } else {
+ (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)
+ ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});
+ }
+ }
+
+ // See issue #2901
+ if (webkit) {
+ var last = builder.content.lastChild;
+ if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab")))
+ { builder.content.className = "cm-tab-wrap-hack"; }
+ }
+
+ signal(cm, "renderLine", cm, lineView.line, builder.pre);
+ if (builder.pre.className)
+ { builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); }
+
+ return builder
+ }
+
+ function defaultSpecialCharPlaceholder(ch) {
+ var token = elt("span", "\u2022", "cm-invalidchar");
+ token.title = "\\u" + ch.charCodeAt(0).toString(16);
+ token.setAttribute("aria-label", token.title);
+ return token
+ }
+
+ // Build up the DOM representation for a single token, and add it to
+ // the line map. Takes care to render special characters separately.
+ function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {
+ if (!text) { return }
+ var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;
+ var special = builder.cm.state.specialChars, mustWrap = false;
+ var content;
+ if (!special.test(text)) {
+ builder.col += text.length;
+ content = document.createTextNode(displayText);
+ builder.map.push(builder.pos, builder.pos + text.length, content);
+ if (ie && ie_version < 9) { mustWrap = true; }
+ builder.pos += text.length;
+ } else {
+ content = document.createDocumentFragment();
+ var pos = 0;
+ while (true) {
+ special.lastIndex = pos;
+ var m = special.exec(text);
+ var skipped = m ? m.index - pos : text.length - pos;
+ if (skipped) {
+ var txt = document.createTextNode(displayText.slice(pos, pos + skipped));
+ if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])); }
+ else { content.appendChild(txt); }
+ builder.map.push(builder.pos, builder.pos + skipped, txt);
+ builder.col += skipped;
+ builder.pos += skipped;
+ }
+ if (!m) { break }
+ pos += skipped + 1;
+ var txt$1 = (void 0);
+ if (m[0] == "\t") {
+ var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;
+ txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab"));
+ txt$1.setAttribute("role", "presentation");
+ txt$1.setAttribute("cm-text", "\t");
+ builder.col += tabWidth;
+ } else if (m[0] == "\r" || m[0] == "\n") {
+ txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar"));
+ txt$1.setAttribute("cm-text", m[0]);
+ builder.col += 1;
+ } else {
+ txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);
+ txt$1.setAttribute("cm-text", m[0]);
+ if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])); }
+ else { content.appendChild(txt$1); }
+ builder.col += 1;
+ }
+ builder.map.push(builder.pos, builder.pos + 1, txt$1);
+ builder.pos++;
+ }
+ }
+ builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;
+ if (style || startStyle || endStyle || mustWrap || css || attributes) {
+ var fullStyle = style || "";
+ if (startStyle) { fullStyle += startStyle; }
+ if (endStyle) { fullStyle += endStyle; }
+ var token = elt("span", [content], fullStyle, css);
+ if (attributes) {
+ for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != "style" && attr != "class")
+ { token.setAttribute(attr, attributes[attr]); } }
+ }
+ return builder.content.appendChild(token)
+ }
+ builder.content.appendChild(content);
+ }
+
+ // Change some spaces to NBSP to prevent the browser from collapsing
+ // trailing spaces at the end of a line when rendering text (issue #1362).
+ function splitSpaces(text, trailingBefore) {
+ if (text.length > 1 && !/ /.test(text)) { return text }
+ var spaceBefore = trailingBefore, result = "";
+ for (var i = 0; i < text.length; i++) {
+ var ch = text.charAt(i);
+ if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))
+ { ch = "\u00a0"; }
+ result += ch;
+ spaceBefore = ch == " ";
+ }
+ return result
+ }
+
+ // Work around nonsense dimensions being reported for stretches of
+ // right-to-left text.
+ function buildTokenBadBidi(inner, order) {
+ return function (builder, text, style, startStyle, endStyle, css, attributes) {
+ style = style ? style + " cm-force-border" : "cm-force-border";
+ var start = builder.pos, end = start + text.length;
+ for (;;) {
+ // Find the part that overlaps with the start of this text
+ var part = (void 0);
+ for (var i = 0; i < order.length; i++) {
+ part = order[i];
+ if (part.to > start && part.from <= start) { break }
+ }
+ if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }
+ inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);
+ startStyle = null;
+ text = text.slice(part.to - start);
+ start = part.to;
+ }
+ }
+ }
+
+ function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
+ var widget = !ignoreWidget && marker.widgetNode;
+ if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }
+ if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {
+ if (!widget)
+ { widget = builder.content.appendChild(document.createElement("span")); }
+ widget.setAttribute("cm-marker", marker.id);
+ }
+ if (widget) {
+ builder.cm.display.input.setUneditable(widget);
+ builder.content.appendChild(widget);
+ }
+ builder.pos += size;
+ builder.trailingSpace = false;
+ }
+
+ // Outputs a number of spans to make up a line, taking highlighting
+ // and marked text into account.
+ function insertLineContent(line, builder, styles) {
+ var spans = line.markedSpans, allText = line.text, at = 0;
+ if (!spans) {
+ for (var i$1 = 1; i$1 < styles.length; i$1+=2)
+ { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }
+ return
+ }
+
+ var len = allText.length, pos = 0, i = 1, text = "", style, css;
+ var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;
+ for (;;) {
+ if (nextChange == pos) { // Update current marker set
+ spanStyle = spanEndStyle = spanStartStyle = css = "";
+ attributes = null;
+ collapsed = null; nextChange = Infinity;
+ var foundBookmarks = [], endStyles = (void 0);
+ for (var j = 0; j < spans.length; ++j) {
+ var sp = spans[j], m = sp.marker;
+ if (m.type == "bookmark" && sp.from == pos && m.widgetNode) {
+ foundBookmarks.push(m);
+ } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {
+ if (sp.to != null && sp.to != pos && nextChange > sp.to) {
+ nextChange = sp.to;
+ spanEndStyle = "";
+ }
+ if (m.className) { spanStyle += " " + m.className; }
+ if (m.css) { css = (css ? css + ";" : "") + m.css; }
+ if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle; }
+ if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }
+ // support for the old title property
+ // https://github.com/codemirror/CodeMirror/pull/5673
+ if (m.title) { (attributes || (attributes = {})).title = m.title; }
+ if (m.attributes) {
+ for (var attr in m.attributes)
+ { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }
+ }
+ if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))
+ { collapsed = sp; }
+ } else if (sp.from > pos && nextChange > sp.from) {
+ nextChange = sp.from;
+ }
+ }
+ if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)
+ { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1]; } } }
+
+ if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)
+ { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }
+ if (collapsed && (collapsed.from || 0) == pos) {
+ buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,
+ collapsed.marker, collapsed.from == null);
+ if (collapsed.to == null) { return }
+ if (collapsed.to == pos) { collapsed = false; }
+ }
+ }
+ if (pos >= len) { break }
+
+ var upto = Math.min(len, nextChange);
+ while (true) {
+ if (text) {
+ var end = pos + text.length;
+ if (!collapsed) {
+ var tokenText = end > upto ? text.slice(0, upto - pos) : text;
+ builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,
+ spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", css, attributes);
+ }
+ if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}
+ pos = end;
+ spanStartStyle = "";
+ }
+ text = allText.slice(at, at = styles[i++]);
+ style = interpretTokenStyle(styles[i++], builder.cm.options);
+ }
+ }
+ }
+
+
+ // These objects are used to represent the visible (currently drawn)
+ // part of the document. A LineView may correspond to multiple
+ // logical lines, if those are connected by collapsed ranges.
+ function LineView(doc, line, lineN) {
+ // The starting line
+ this.line = line;
+ // Continuing lines, if any
+ this.rest = visualLineContinued(line);
+ // Number of logical lines in this visual line
+ this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;
+ this.node = this.text = null;
+ this.hidden = lineIsHidden(doc, line);
+ }
+
+ // Create a range of LineView objects for the given lines.
+ function buildViewArray(cm, from, to) {
+ var array = [], nextPos;
+ for (var pos = from; pos < to; pos = nextPos) {
+ var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);
+ nextPos = pos + view.size;
+ array.push(view);
+ }
+ return array
+ }
+
+ var operationGroup = null;
+
+ function pushOperation(op) {
+ if (operationGroup) {
+ operationGroup.ops.push(op);
+ } else {
+ op.ownsGroup = operationGroup = {
+ ops: [op],
+ delayedCallbacks: []
+ };
+ }
+ }
+
+ function fireCallbacksForOps(group) {
+ // Calls delayed callbacks and cursorActivity handlers until no
+ // new ones appear
+ var callbacks = group.delayedCallbacks, i = 0;
+ do {
+ for (; i < callbacks.length; i++)
+ { callbacks[i].call(null); }
+ for (var j = 0; j < group.ops.length; j++) {
+ var op = group.ops[j];
+ if (op.cursorActivityHandlers)
+ { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)
+ { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }
+ }
+ } while (i < callbacks.length)
+ }
+
+ function finishOperation(op, endCb) {
+ var group = op.ownsGroup;
+ if (!group) { return }
+
+ try { fireCallbacksForOps(group); }
+ finally {
+ operationGroup = null;
+ endCb(group);
+ }
+ }
+
+ var orphanDelayedCallbacks = null;
+
+ // Often, we want to signal events at a point where we are in the
+ // middle of some work, but don't want the handler to start calling
+ // other methods on the editor, which might be in an inconsistent
+ // state or simply not expect any other events to happen.
+ // signalLater looks whether there are any handlers, and schedules
+ // them to be executed when the last operation ends, or, if no
+ // operation is active, when a timeout fires.
+ function signalLater(emitter, type /*, values...*/) {
+ var arr = getHandlers(emitter, type);
+ if (!arr.length) { return }
+ var args = Array.prototype.slice.call(arguments, 2), list;
+ if (operationGroup) {
+ list = operationGroup.delayedCallbacks;
+ } else if (orphanDelayedCallbacks) {
+ list = orphanDelayedCallbacks;
+ } else {
+ list = orphanDelayedCallbacks = [];
+ setTimeout(fireOrphanDelayed, 0);
+ }
+ var loop = function ( i ) {
+ list.push(function () { return arr[i].apply(null, args); });
+ };
+
+ for (var i = 0; i < arr.length; ++i)
+ loop( i );
+ }
+
+ function fireOrphanDelayed() {
+ var delayed = orphanDelayedCallbacks;
+ orphanDelayedCallbacks = null;
+ for (var i = 0; i < delayed.length; ++i) { delayed[i](); }
+ }
+
+ // When an aspect of a line changes, a string is added to
+ // lineView.changes. This updates the relevant part of the line's
+ // DOM structure.
+ function updateLineForChanges(cm, lineView, lineN, dims) {
+ for (var j = 0; j < lineView.changes.length; j++) {
+ var type = lineView.changes[j];
+ if (type == "text") { updateLineText(cm, lineView); }
+ else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims); }
+ else if (type == "class") { updateLineClasses(cm, lineView); }
+ else if (type == "widget") { updateLineWidgets(cm, lineView, dims); }
+ }
+ lineView.changes = null;
+ }
+
+ // Lines with gutter elements, widgets or a background class need to
+ // be wrapped, and have the extra elements added to the wrapper div
+ function ensureLineWrapped(lineView) {
+ if (lineView.node == lineView.text) {
+ lineView.node = elt("div", null, null, "position: relative");
+ if (lineView.text.parentNode)
+ { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }
+ lineView.node.appendChild(lineView.text);
+ if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }
+ }
+ return lineView.node
+ }
+
+ function updateLineBackground(cm, lineView) {
+ var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass;
+ if (cls) { cls += " CodeMirror-linebackground"; }
+ if (lineView.background) {
+ if (cls) { lineView.background.className = cls; }
+ else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }
+ } else if (cls) {
+ var wrap = ensureLineWrapped(lineView);
+ lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild);
+ cm.display.input.setUneditable(lineView.background);
+ }
+ }
+
+ // Wrapper around buildLineContent which will reuse the structure
+ // in display.externalMeasured when possible.
+ function getLineContent(cm, lineView) {
+ var ext = cm.display.externalMeasured;
+ if (ext && ext.line == lineView.line) {
+ cm.display.externalMeasured = null;
+ lineView.measure = ext.measure;
+ return ext.built
+ }
+ return buildLineContent(cm, lineView)
+ }
+
+ // Redraw the line's text. Interacts with the background and text
+ // classes because the mode may output tokens that influence these
+ // classes.
+ function updateLineText(cm, lineView) {
+ var cls = lineView.text.className;
+ var built = getLineContent(cm, lineView);
+ if (lineView.text == lineView.node) { lineView.node = built.pre; }
+ lineView.text.parentNode.replaceChild(built.pre, lineView.text);
+ lineView.text = built.pre;
+ if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {
+ lineView.bgClass = built.bgClass;
+ lineView.textClass = built.textClass;
+ updateLineClasses(cm, lineView);
+ } else if (cls) {
+ lineView.text.className = cls;
+ }
+ }
+
+ function updateLineClasses(cm, lineView) {
+ updateLineBackground(cm, lineView);
+ if (lineView.line.wrapClass)
+ { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }
+ else if (lineView.node != lineView.text)
+ { lineView.node.className = ""; }
+ var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass;
+ lineView.text.className = textClass || "";
+ }
+
+ function updateLineGutter(cm, lineView, lineN, dims) {
+ if (lineView.gutter) {
+ lineView.node.removeChild(lineView.gutter);
+ lineView.gutter = null;
+ }
+ if (lineView.gutterBackground) {
+ lineView.node.removeChild(lineView.gutterBackground);
+ lineView.gutterBackground = null;
+ }
+ if (lineView.line.gutterClass) {
+ var wrap = ensureLineWrapped(lineView);
+ lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass,
+ ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px"));
+ cm.display.input.setUneditable(lineView.gutterBackground);
+ wrap.insertBefore(lineView.gutterBackground, lineView.text);
+ }
+ var markers = lineView.line.gutterMarkers;
+ if (cm.options.lineNumbers || markers) {
+ var wrap$1 = ensureLineWrapped(lineView);
+ var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"));
+ cm.display.input.setUneditable(gutterWrap);
+ wrap$1.insertBefore(gutterWrap, lineView.text);
+ if (lineView.line.gutterClass)
+ { gutterWrap.className += " " + lineView.line.gutterClass; }
+ if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
+ { lineView.lineNumber = gutterWrap.appendChild(
+ elt("div", lineNumberFor(cm.options, lineN),
+ "CodeMirror-linenumber CodeMirror-gutter-elt",
+ ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))); }
+ if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {
+ var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];
+ if (found)
+ { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt",
+ ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))); }
+ } }
+ }
+ }
+
+ function updateLineWidgets(cm, lineView, dims) {
+ if (lineView.alignable) { lineView.alignable = null; }
+ var isWidget = classTest("CodeMirror-linewidget");
+ for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {
+ next = node.nextSibling;
+ if (isWidget.test(node.className)) { lineView.node.removeChild(node); }
+ }
+ insertLineWidgets(cm, lineView, dims);
+ }
+
+ // Build a line's DOM representation from scratch
+ function buildLineElement(cm, lineView, lineN, dims) {
+ var built = getLineContent(cm, lineView);
+ lineView.text = lineView.node = built.pre;
+ if (built.bgClass) { lineView.bgClass = built.bgClass; }
+ if (built.textClass) { lineView.textClass = built.textClass; }
+
+ updateLineClasses(cm, lineView);
+ updateLineGutter(cm, lineView, lineN, dims);
+ insertLineWidgets(cm, lineView, dims);
+ return lineView.node
+ }
+
+ // A lineView may contain multiple logical lines (when merged by
+ // collapsed spans). The widgets for all of them need to be drawn.
+ function insertLineWidgets(cm, lineView, dims) {
+ insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);
+ if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)
+ { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }
+ }
+
+ function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {
+ if (!line.widgets) { return }
+ var wrap = ensureLineWrapped(lineView);
+ for (var i = 0, ws = line.widgets; i < ws.length; ++i) {
+ var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget" + (widget.className ? " " + widget.className : ""));
+ if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true"); }
+ positionLineWidget(widget, node, lineView, dims);
+ cm.display.input.setUneditable(node);
+ if (allowAbove && widget.above)
+ { wrap.insertBefore(node, lineView.gutter || lineView.text); }
+ else
+ { wrap.appendChild(node); }
+ signalLater(widget, "redraw");
+ }
+ }
+
+ function positionLineWidget(widget, node, lineView, dims) {
+ if (widget.noHScroll) {
+ (lineView.alignable || (lineView.alignable = [])).push(node);
+ var width = dims.wrapperWidth;
+ node.style.left = dims.fixedPos + "px";
+ if (!widget.coverGutter) {
+ width -= dims.gutterTotalWidth;
+ node.style.paddingLeft = dims.gutterTotalWidth + "px";
+ }
+ node.style.width = width + "px";
+ }
+ if (widget.coverGutter) {
+ node.style.zIndex = 5;
+ node.style.position = "relative";
+ if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px"; }
+ }
+ }
+
+ function widgetHeight(widget) {
+ if (widget.height != null) { return widget.height }
+ var cm = widget.doc.cm;
+ if (!cm) { return 0 }
+ if (!contains(document.body, widget.node)) {
+ var parentStyle = "position: relative;";
+ if (widget.coverGutter)
+ { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; }
+ if (widget.noHScroll)
+ { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; }
+ removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle));
+ }
+ return widget.height = widget.node.parentNode.offsetHeight
+ }
+
+ // Return true when the given mouse event happened in a widget
+ function eventInWidget(display, e) {
+ for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {
+ if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") ||
+ (n.parentNode == display.sizer && n != display.mover))
+ { return true }
+ }
+ }
+
+ // POSITION MEASUREMENT
+
+ function paddingTop(display) {return display.lineSpace.offsetTop}
+ function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}
+ function paddingH(display) {
+ if (display.cachedPaddingH) { return display.cachedPaddingH }
+ var e = removeChildrenAndAdd(display.measure, elt("pre", "x", "CodeMirror-line-like"));
+ var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;
+ var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};
+ if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }
+ return data
+ }
+
+ function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }
+ function displayWidth(cm) {
+ return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth
+ }
+ function displayHeight(cm) {
+ return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight
+ }
+
+ // Ensure the lineView.wrapping.heights array is populated. This is
+ // an array of bottom offsets for the lines that make up a drawn
+ // line. When lineWrapping is on, there might be more than one
+ // height.
+ function ensureLineHeights(cm, lineView, rect) {
+ var wrapping = cm.options.lineWrapping;
+ var curWidth = wrapping && displayWidth(cm);
+ if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {
+ var heights = lineView.measure.heights = [];
+ if (wrapping) {
+ lineView.measure.width = curWidth;
+ var rects = lineView.text.firstChild.getClientRects();
+ for (var i = 0; i < rects.length - 1; i++) {
+ var cur = rects[i], next = rects[i + 1];
+ if (Math.abs(cur.bottom - next.bottom) > 2)
+ { heights.push((cur.bottom + next.top) / 2 - rect.top); }
+ }
+ }
+ heights.push(rect.bottom - rect.top);
+ }
+ }
+
+ // Find a line map (mapping character offsets to text nodes) and a
+ // measurement cache for the given line number. (A line view might
+ // contain multiple lines when collapsed ranges are present.)
+ function mapFromLineView(lineView, line, lineN) {
+ if (lineView.line == line)
+ { return {map: lineView.measure.map, cache: lineView.measure.cache} }
+ for (var i = 0; i < lineView.rest.length; i++)
+ { if (lineView.rest[i] == line)
+ { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }
+ for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)
+ { if (lineNo(lineView.rest[i$1]) > lineN)
+ { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }
+ }
+
+ // Render a line into the hidden node display.externalMeasured. Used
+ // when measurement is needed for a line that's not in the viewport.
+ function updateExternalMeasurement(cm, line) {
+ line = visualLine(line);
+ var lineN = lineNo(line);
+ var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);
+ view.lineN = lineN;
+ var built = view.built = buildLineContent(cm, view);
+ view.text = built.pre;
+ removeChildrenAndAdd(cm.display.lineMeasure, built.pre);
+ return view
+ }
+
+ // Get a {top, bottom, left, right} box (in line-local coordinates)
+ // for a given character.
+ function measureChar(cm, line, ch, bias) {
+ return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)
+ }
+
+ // Find a line view that corresponds to the given line number.
+ function findViewForLine(cm, lineN) {
+ if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)
+ { return cm.display.view[findViewIndex(cm, lineN)] }
+ var ext = cm.display.externalMeasured;
+ if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)
+ { return ext }
+ }
+
+ // Measurement can be split in two steps, the set-up work that
+ // applies to the whole line, and the measurement of the actual
+ // character. Functions like coordsChar, that need to do a lot of
+ // measurements in a row, can thus ensure that the set-up work is
+ // only done once.
+ function prepareMeasureForLine(cm, line) {
+ var lineN = lineNo(line);
+ var view = findViewForLine(cm, lineN);
+ if (view && !view.text) {
+ view = null;
+ } else if (view && view.changes) {
+ updateLineForChanges(cm, view, lineN, getDimensions(cm));
+ cm.curOp.forceUpdate = true;
+ }
+ if (!view)
+ { view = updateExternalMeasurement(cm, line); }
+
+ var info = mapFromLineView(view, line, lineN);
+ return {
+ line: line, view: view, rect: null,
+ map: info.map, cache: info.cache, before: info.before,
+ hasHeights: false
+ }
+ }
+
+ // Given a prepared measurement object, measures the position of an
+ // actual character (or fetches it from the cache).
+ function measureCharPrepared(cm, prepared, ch, bias, varHeight) {
+ if (prepared.before) { ch = -1; }
+ var key = ch + (bias || ""), found;
+ if (prepared.cache.hasOwnProperty(key)) {
+ found = prepared.cache[key];
+ } else {
+ if (!prepared.rect)
+ { prepared.rect = prepared.view.text.getBoundingClientRect(); }
+ if (!prepared.hasHeights) {
+ ensureLineHeights(cm, prepared.view, prepared.rect);
+ prepared.hasHeights = true;
+ }
+ found = measureCharInner(cm, prepared, ch, bias);
+ if (!found.bogus) { prepared.cache[key] = found; }
+ }
+ return {left: found.left, right: found.right,
+ top: varHeight ? found.rtop : found.top,
+ bottom: varHeight ? found.rbottom : found.bottom}
+ }
+
+ var nullRect = {left: 0, right: 0, top: 0, bottom: 0};
+
+ function nodeAndOffsetInLineMap(map, ch, bias) {
+ var node, start, end, collapse, mStart, mEnd;
+ // First, search the line map for the text node corresponding to,
+ // or closest to, the target character.
+ for (var i = 0; i < map.length; i += 3) {
+ mStart = map[i];
+ mEnd = map[i + 1];
+ if (ch < mStart) {
+ start = 0; end = 1;
+ collapse = "left";
+ } else if (ch < mEnd) {
+ start = ch - mStart;
+ end = start + 1;
+ } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {
+ end = mEnd - mStart;
+ start = end - 1;
+ if (ch >= mEnd) { collapse = "right"; }
+ }
+ if (start != null) {
+ node = map[i + 2];
+ if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right"))
+ { collapse = bias; }
+ if (bias == "left" && start == 0)
+ { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {
+ node = map[(i -= 3) + 2];
+ collapse = "left";
+ } }
+ if (bias == "right" && start == mEnd - mStart)
+ { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {
+ node = map[(i += 3) + 2];
+ collapse = "right";
+ } }
+ break
+ }
+ }
+ return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}
+ }
+
+ function getUsefulRect(rects, bias) {
+ var rect = nullRect;
+ if (bias == "left") { for (var i = 0; i < rects.length; i++) {
+ if ((rect = rects[i]).left != rect.right) { break }
+ } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {
+ if ((rect = rects[i$1]).left != rect.right) { break }
+ } }
+ return rect
+ }
+
+ function measureCharInner(cm, prepared, ch, bias) {
+ var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);
+ var node = place.node, start = place.start, end = place.end, collapse = place.collapse;
+
+ var rect;
+ if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.
+ for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned
+ while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }
+ while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }
+ if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)
+ { rect = node.parentNode.getBoundingClientRect(); }
+ else
+ { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }
+ if (rect.left || rect.right || start == 0) { break }
+ end = start;
+ start = start - 1;
+ collapse = "right";
+ }
+ if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }
+ } else { // If it is a widget, simply get the box for the whole widget.
+ if (start > 0) { collapse = bias = "right"; }
+ var rects;
+ if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)
+ { rect = rects[bias == "right" ? rects.length - 1 : 0]; }
+ else
+ { rect = node.getBoundingClientRect(); }
+ }
+ if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {
+ var rSpan = node.parentNode.getClientRects()[0];
+ if (rSpan)
+ { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }
+ else
+ { rect = nullRect; }
+ }
+
+ var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;
+ var mid = (rtop + rbot) / 2;
+ var heights = prepared.view.measure.heights;
+ var i = 0;
+ for (; i < heights.length - 1; i++)
+ { if (mid < heights[i]) { break } }
+ var top = i ? heights[i - 1] : 0, bot = heights[i];
+ var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left,
+ right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left,
+ top: top, bottom: bot};
+ if (!rect.left && !rect.right) { result.bogus = true; }
+ if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }
+
+ return result
+ }
+
+ // Work around problem with bounding client rects on ranges being
+ // returned incorrectly when zoomed on IE10 and below.
+ function maybeUpdateRectForZooming(measure, rect) {
+ if (!window.screen || screen.logicalXDPI == null ||
+ screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))
+ { return rect }
+ var scaleX = screen.logicalXDPI / screen.deviceXDPI;
+ var scaleY = screen.logicalYDPI / screen.deviceYDPI;
+ return {left: rect.left * scaleX, right: rect.right * scaleX,
+ top: rect.top * scaleY, bottom: rect.bottom * scaleY}
+ }
+
+ function clearLineMeasurementCacheFor(lineView) {
+ if (lineView.measure) {
+ lineView.measure.cache = {};
+ lineView.measure.heights = null;
+ if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)
+ { lineView.measure.caches[i] = {}; } }
+ }
+ }
+
+ function clearLineMeasurementCache(cm) {
+ cm.display.externalMeasure = null;
+ removeChildren(cm.display.lineMeasure);
+ for (var i = 0; i < cm.display.view.length; i++)
+ { clearLineMeasurementCacheFor(cm.display.view[i]); }
+ }
+
+ function clearCaches(cm) {
+ clearLineMeasurementCache(cm);
+ cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;
+ if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }
+ cm.display.lineNumChars = null;
+ }
+
+ function pageScrollX() {
+ // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206
+ // which causes page_Offset and bounding client rects to use
+ // different reference viewports and invalidate our calculations.
+ if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }
+ return window.pageXOffset || (document.documentElement || document.body).scrollLeft
+ }
+ function pageScrollY() {
+ if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }
+ return window.pageYOffset || (document.documentElement || document.body).scrollTop
+ }
+
+ function widgetTopHeight(lineObj) {
+ var height = 0;
+ if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)
+ { height += widgetHeight(lineObj.widgets[i]); } } }
+ return height
+ }
+
+ // Converts a {top, bottom, left, right} box from line-local
+ // coordinates into another coordinate system. Context may be one of
+ // "line", "div" (display.lineDiv), "local"./null (editor), "window",
+ // or "page".
+ function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {
+ if (!includeWidgets) {
+ var height = widgetTopHeight(lineObj);
+ rect.top += height; rect.bottom += height;
+ }
+ if (context == "line") { return rect }
+ if (!context) { context = "local"; }
+ var yOff = heightAtLine(lineObj);
+ if (context == "local") { yOff += paddingTop(cm.display); }
+ else { yOff -= cm.display.viewOffset; }
+ if (context == "page" || context == "window") {
+ var lOff = cm.display.lineSpace.getBoundingClientRect();
+ yOff += lOff.top + (context == "window" ? 0 : pageScrollY());
+ var xOff = lOff.left + (context == "window" ? 0 : pageScrollX());
+ rect.left += xOff; rect.right += xOff;
+ }
+ rect.top += yOff; rect.bottom += yOff;
+ return rect
+ }
+
+ // Coverts a box from "div" coords to another coordinate system.
+ // Context may be "window", "page", "div", or "local"./null.
+ function fromCoordSystem(cm, coords, context) {
+ if (context == "div") { return coords }
+ var left = coords.left, top = coords.top;
+ // First move into "page" coordinate system
+ if (context == "page") {
+ left -= pageScrollX();
+ top -= pageScrollY();
+ } else if (context == "local" || !context) {
+ var localBox = cm.display.sizer.getBoundingClientRect();
+ left += localBox.left;
+ top += localBox.top;
+ }
+
+ var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();
+ return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}
+ }
+
+ function charCoords(cm, pos, context, lineObj, bias) {
+ if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }
+ return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)
+ }
+
+ // Returns a box for a given cursor position, which may have an
+ // 'other' property containing the position of the secondary cursor
+ // on a bidi boundary.
+ // A cursor Pos(line, char, "before") is on the same visual line as `char - 1`
+ // and after `char - 1` in writing order of `char - 1`
+ // A cursor Pos(line, char, "after") is on the same visual line as `char`
+ // and before `char` in writing order of `char`
+ // Examples (upper-case letters are RTL, lower-case are LTR):
+ // Pos(0, 1, ...)
+ // before after
+ // ab a|b a|b
+ // aB a|B aB|
+ // Ab |Ab A|b
+ // AB B|A B|A
+ // Every position after the last character on a line is considered to stick
+ // to the last character on the line.
+ function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {
+ lineObj = lineObj || getLine(cm.doc, pos.line);
+ if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }
+ function get(ch, right) {
+ var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight);
+ if (right) { m.left = m.right; } else { m.right = m.left; }
+ return intoCoordSystem(cm, lineObj, m, context)
+ }
+ var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;
+ if (ch >= lineObj.text.length) {
+ ch = lineObj.text.length;
+ sticky = "before";
+ } else if (ch <= 0) {
+ ch = 0;
+ sticky = "after";
+ }
+ if (!order) { return get(sticky == "before" ? ch - 1 : ch, sticky == "before") }
+
+ function getBidi(ch, partPos, invert) {
+ var part = order[partPos], right = part.level == 1;
+ return get(invert ? ch - 1 : ch, right != invert)
+ }
+ var partPos = getBidiPartAt(order, ch, sticky);
+ var other = bidiOther;
+ var val = getBidi(ch, partPos, sticky == "before");
+ if (other != null) { val.other = getBidi(ch, other, sticky != "before"); }
+ return val
+ }
+
+ // Used to cheaply estimate the coordinates for a position. Used for
+ // intermediate scroll updates.
+ function estimateCoords(cm, pos) {
+ var left = 0;
+ pos = clipPos(cm.doc, pos);
+ if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }
+ var lineObj = getLine(cm.doc, pos.line);
+ var top = heightAtLine(lineObj) + paddingTop(cm.display);
+ return {left: left, right: left, top: top, bottom: top + lineObj.height}
+ }
+
+ // Positions returned by coordsChar contain some extra information.
+ // xRel is the relative x position of the input coordinates compared
+ // to the found position (so xRel > 0 means the coordinates are to
+ // the right of the character position, for example). When outside
+ // is true, that means the coordinates lie outside the line's
+ // vertical range.
+ function PosWithInfo(line, ch, sticky, outside, xRel) {
+ var pos = Pos(line, ch, sticky);
+ pos.xRel = xRel;
+ if (outside) { pos.outside = outside; }
+ return pos
+ }
+
+ // Compute the character position closest to the given coordinates.
+ // Input must be lineSpace-local ("div" coordinate system).
+ function coordsChar(cm, x, y) {
+ var doc = cm.doc;
+ y += cm.display.viewOffset;
+ if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) }
+ var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;
+ if (lineN > last)
+ { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) }
+ if (x < 0) { x = 0; }
+
+ var lineObj = getLine(doc, lineN);
+ for (;;) {
+ var found = coordsCharInner(cm, lineObj, lineN, x, y);
+ var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));
+ if (!collapsed) { return found }
+ var rangeEnd = collapsed.find(1);
+ if (rangeEnd.line == lineN) { return rangeEnd }
+ lineObj = getLine(doc, lineN = rangeEnd.line);
+ }
+ }
+
+ function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {
+ y -= widgetTopHeight(lineObj);
+ var end = lineObj.text.length;
+ var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);
+ end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);
+ return {begin: begin, end: end}
+ }
+
+ function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {
+ if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }
+ var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top;
+ return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)
+ }
+
+ // Returns true if the given side of a box is after the given
+ // coordinates, in top-to-bottom, left-to-right order.
+ function boxIsAfter(box, x, y, left) {
+ return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x
+ }
+
+ function coordsCharInner(cm, lineObj, lineNo, x, y) {
+ // Move y into line-local coordinate space
+ y -= heightAtLine(lineObj);
+ var preparedMeasure = prepareMeasureForLine(cm, lineObj);
+ // When directly calling `measureCharPrepared`, we have to adjust
+ // for the widgets at this line.
+ var widgetHeight = widgetTopHeight(lineObj);
+ var begin = 0, end = lineObj.text.length, ltr = true;
+
+ var order = getOrder(lineObj, cm.doc.direction);
+ // If the line isn't plain left-to-right text, first figure out
+ // which bidi section the coordinates fall into.
+ if (order) {
+ var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)
+ (cm, lineObj, lineNo, preparedMeasure, order, x, y);
+ ltr = part.level != 1;
+ // The awkward -1 offsets are needed because findFirst (called
+ // on these below) will treat its first bound as inclusive,
+ // second as exclusive, but we want to actually address the
+ // characters in the part's range
+ begin = ltr ? part.from : part.to - 1;
+ end = ltr ? part.to : part.from - 1;
+ }
+
+ // A binary search to find the first character whose bounding box
+ // starts after the coordinates. If we run across any whose box wrap
+ // the coordinates, store that.
+ var chAround = null, boxAround = null;
+ var ch = findFirst(function (ch) {
+ var box = measureCharPrepared(cm, preparedMeasure, ch);
+ box.top += widgetHeight; box.bottom += widgetHeight;
+ if (!boxIsAfter(box, x, y, false)) { return false }
+ if (box.top <= y && box.left <= x) {
+ chAround = ch;
+ boxAround = box;
+ }
+ return true
+ }, begin, end);
+
+ var baseX, sticky, outside = false;
+ // If a box around the coordinates was found, use that
+ if (boxAround) {
+ // Distinguish coordinates nearer to the left or right side of the box
+ var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;
+ ch = chAround + (atStart ? 0 : 1);
+ sticky = atStart ? "after" : "before";
+ baseX = atLeft ? boxAround.left : boxAround.right;
+ } else {
+ // (Adjust for extended bound, if necessary.)
+ if (!ltr && (ch == end || ch == begin)) { ch++; }
+ // To determine which side to associate with, get the box to the
+ // left of the character and compare it's vertical position to the
+ // coordinates
+ sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" :
+ (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ?
+ "after" : "before";
+ // Now get accurate coordinates for this place, in order to get a
+ // base X position
+ var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), "line", lineObj, preparedMeasure);
+ baseX = coords.left;
+ outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;
+ }
+
+ ch = skipExtendingChars(lineObj.text, ch, 1);
+ return PosWithInfo(lineNo, ch, sticky, outside, x - baseX)
+ }
+
+ function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {
+ // Bidi parts are sorted left-to-right, and in a non-line-wrapping
+ // situation, we can take this ordering to correspond to the visual
+ // ordering. This finds the first part whose end is after the given
+ // coordinates.
+ var index = findFirst(function (i) {
+ var part = order[i], ltr = part.level != 1;
+ return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? "before" : "after"),
+ "line", lineObj, preparedMeasure), x, y, true)
+ }, 0, order.length - 1);
+ var part = order[index];
+ // If this isn't the first part, the part's start is also after
+ // the coordinates, and the coordinates aren't on the same line as
+ // that start, move one part back.
+ if (index > 0) {
+ var ltr = part.level != 1;
+ var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? "after" : "before"),
+ "line", lineObj, preparedMeasure);
+ if (boxIsAfter(start, x, y, true) && start.top > y)
+ { part = order[index - 1]; }
+ }
+ return part
+ }
+
+ function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {
+ // In a wrapped line, rtl text on wrapping boundaries can do things
+ // that don't correspond to the ordering in our `order` array at
+ // all, so a binary search doesn't work, and we want to return a
+ // part that only spans one line so that the binary search in
+ // coordsCharInner is safe. As such, we first find the extent of the
+ // wrapped line, and then do a flat search in which we discard any
+ // spans that aren't on the line.
+ var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);
+ var begin = ref.begin;
+ var end = ref.end;
+ if (/\s/.test(lineObj.text.charAt(end - 1))) { end--; }
+ var part = null, closestDist = null;
+ for (var i = 0; i < order.length; i++) {
+ var p = order[i];
+ if (p.from >= end || p.to <= begin) { continue }
+ var ltr = p.level != 1;
+ var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;
+ // Weigh against spans ending before this, so that they are only
+ // picked if nothing ends after
+ var dist = endX < x ? x - endX + 1e9 : endX - x;
+ if (!part || closestDist > dist) {
+ part = p;
+ closestDist = dist;
+ }
+ }
+ if (!part) { part = order[order.length - 1]; }
+ // Clip the part to the wrapped line.
+ if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }
+ if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }
+ return part
+ }
+
+ var measureText;
+ // Compute the default text height.
+ function textHeight(display) {
+ if (display.cachedTextHeight != null) { return display.cachedTextHeight }
+ if (measureText == null) {
+ measureText = elt("pre", null, "CodeMirror-line-like");
+ // Measure a bunch of lines, for browsers that compute
+ // fractional heights.
+ for (var i = 0; i < 49; ++i) {
+ measureText.appendChild(document.createTextNode("x"));
+ measureText.appendChild(elt("br"));
+ }
+ measureText.appendChild(document.createTextNode("x"));
+ }
+ removeChildrenAndAdd(display.measure, measureText);
+ var height = measureText.offsetHeight / 50;
+ if (height > 3) { display.cachedTextHeight = height; }
+ removeChildren(display.measure);
+ return height || 1
+ }
+
+ // Compute the default character width.
+ function charWidth(display) {
+ if (display.cachedCharWidth != null) { return display.cachedCharWidth }
+ var anchor = elt("span", "xxxxxxxxxx");
+ var pre = elt("pre", [anchor], "CodeMirror-line-like");
+ removeChildrenAndAdd(display.measure, pre);
+ var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;
+ if (width > 2) { display.cachedCharWidth = width; }
+ return width || 10
+ }
+
+ // Do a bulk-read of the DOM positions and sizes needed to draw the
+ // view, so that we don't interleave reading and writing to the DOM.
+ function getDimensions(cm) {
+ var d = cm.display, left = {}, width = {};
+ var gutterLeft = d.gutters.clientLeft;
+ for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {
+ var id = cm.display.gutterSpecs[i].className;
+ left[id] = n.offsetLeft + n.clientLeft + gutterLeft;
+ width[id] = n.clientWidth;
+ }
+ return {fixedPos: compensateForHScroll(d),
+ gutterTotalWidth: d.gutters.offsetWidth,
+ gutterLeft: left,
+ gutterWidth: width,
+ wrapperWidth: d.wrapper.clientWidth}
+ }
+
+ // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,
+ // but using getBoundingClientRect to get a sub-pixel-accurate
+ // result.
+ function compensateForHScroll(display) {
+ return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left
+ }
+
+ // Returns a function that estimates the height of a line, to use as
+ // first approximation until the line becomes visible (and is thus
+ // properly measurable).
+ function estimateHeight(cm) {
+ var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;
+ var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);
+ return function (line) {
+ if (lineIsHidden(cm.doc, line)) { return 0 }
+
+ var widgetsHeight = 0;
+ if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {
+ if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }
+ } }
+
+ if (wrapping)
+ { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }
+ else
+ { return widgetsHeight + th }
+ }
+ }
+
+ function estimateLineHeights(cm) {
+ var doc = cm.doc, est = estimateHeight(cm);
+ doc.iter(function (line) {
+ var estHeight = est(line);
+ if (estHeight != line.height) { updateLineHeight(line, estHeight); }
+ });
+ }
+
+ // Given a mouse event, find the corresponding position. If liberal
+ // is false, it checks whether a gutter or scrollbar was clicked,
+ // and returns null if it was. forRect is used by rectangular
+ // selections, and tries to estimate a character position even for
+ // coordinates beyond the right of the text.
+ function posFromMouse(cm, e, liberal, forRect) {
+ var display = cm.display;
+ if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null }
+
+ var x, y, space = display.lineSpace.getBoundingClientRect();
+ // Fails unpredictably on IE[67] when mouse is dragged around quickly.
+ try { x = e.clientX - space.left; y = e.clientY - space.top; }
+ catch (e$1) { return null }
+ var coords = coordsChar(cm, x, y), line;
+ if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {
+ var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;
+ coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));
+ }
+ return coords
+ }
+
+ // Find the view element corresponding to a given line. Return null
+ // when the line isn't visible.
+ function findViewIndex(cm, n) {
+ if (n >= cm.display.viewTo) { return null }
+ n -= cm.display.viewFrom;
+ if (n < 0) { return null }
+ var view = cm.display.view;
+ for (var i = 0; i < view.length; i++) {
+ n -= view[i].size;
+ if (n < 0) { return i }
+ }
+ }
+
+ // Updates the display.view data structure for a given change to the
+ // document. From and to are in pre-change coordinates. Lendiff is
+ // the amount of lines added or subtracted by the change. This is
+ // used for changes that span multiple lines, or change the way
+ // lines are divided into visual lines. regLineChange (below)
+ // registers single-line changes.
+ function regChange(cm, from, to, lendiff) {
+ if (from == null) { from = cm.doc.first; }
+ if (to == null) { to = cm.doc.first + cm.doc.size; }
+ if (!lendiff) { lendiff = 0; }
+
+ var display = cm.display;
+ if (lendiff && to < display.viewTo &&
+ (display.updateLineNumbers == null || display.updateLineNumbers > from))
+ { display.updateLineNumbers = from; }
+
+ cm.curOp.viewChanged = true;
+
+ if (from >= display.viewTo) { // Change after
+ if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)
+ { resetView(cm); }
+ } else if (to <= display.viewFrom) { // Change before
+ if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {
+ resetView(cm);
+ } else {
+ display.viewFrom += lendiff;
+ display.viewTo += lendiff;
+ }
+ } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap
+ resetView(cm);
+ } else if (from <= display.viewFrom) { // Top overlap
+ var cut = viewCuttingPoint(cm, to, to + lendiff, 1);
+ if (cut) {
+ display.view = display.view.slice(cut.index);
+ display.viewFrom = cut.lineN;
+ display.viewTo += lendiff;
+ } else {
+ resetView(cm);
+ }
+ } else if (to >= display.viewTo) { // Bottom overlap
+ var cut$1 = viewCuttingPoint(cm, from, from, -1);
+ if (cut$1) {
+ display.view = display.view.slice(0, cut$1.index);
+ display.viewTo = cut$1.lineN;
+ } else {
+ resetView(cm);
+ }
+ } else { // Gap in the middle
+ var cutTop = viewCuttingPoint(cm, from, from, -1);
+ var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);
+ if (cutTop && cutBot) {
+ display.view = display.view.slice(0, cutTop.index)
+ .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))
+ .concat(display.view.slice(cutBot.index));
+ display.viewTo += lendiff;
+ } else {
+ resetView(cm);
+ }
+ }
+
+ var ext = display.externalMeasured;
+ if (ext) {
+ if (to < ext.lineN)
+ { ext.lineN += lendiff; }
+ else if (from < ext.lineN + ext.size)
+ { display.externalMeasured = null; }
+ }
+ }
+
+ // Register a change to a single line. Type must be one of "text",
+ // "gutter", "class", "widget"
+ function regLineChange(cm, line, type) {
+ cm.curOp.viewChanged = true;
+ var display = cm.display, ext = cm.display.externalMeasured;
+ if (ext && line >= ext.lineN && line < ext.lineN + ext.size)
+ { display.externalMeasured = null; }
+
+ if (line < display.viewFrom || line >= display.viewTo) { return }
+ var lineView = display.view[findViewIndex(cm, line)];
+ if (lineView.node == null) { return }
+ var arr = lineView.changes || (lineView.changes = []);
+ if (indexOf(arr, type) == -1) { arr.push(type); }
+ }
+
+ // Clear the view.
+ function resetView(cm) {
+ cm.display.viewFrom = cm.display.viewTo = cm.doc.first;
+ cm.display.view = [];
+ cm.display.viewOffset = 0;
+ }
+
+ function viewCuttingPoint(cm, oldN, newN, dir) {
+ var index = findViewIndex(cm, oldN), diff, view = cm.display.view;
+ if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)
+ { return {index: index, lineN: newN} }
+ var n = cm.display.viewFrom;
+ for (var i = 0; i < index; i++)
+ { n += view[i].size; }
+ if (n != oldN) {
+ if (dir > 0) {
+ if (index == view.length - 1) { return null }
+ diff = (n + view[index].size) - oldN;
+ index++;
+ } else {
+ diff = n - oldN;
+ }
+ oldN += diff; newN += diff;
+ }
+ while (visualLineNo(cm.doc, newN) != newN) {
+ if (index == (dir < 0 ? 0 : view.length - 1)) { return null }
+ newN += dir * view[index - (dir < 0 ? 1 : 0)].size;
+ index += dir;
+ }
+ return {index: index, lineN: newN}
+ }
+
+ // Force the view to cover a given range, adding empty view element
+ // or clipping off existing ones as needed.
+ function adjustView(cm, from, to) {
+ var display = cm.display, view = display.view;
+ if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {
+ display.view = buildViewArray(cm, from, to);
+ display.viewFrom = from;
+ } else {
+ if (display.viewFrom > from)
+ { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }
+ else if (display.viewFrom < from)
+ { display.view = display.view.slice(findViewIndex(cm, from)); }
+ display.viewFrom = from;
+ if (display.viewTo < to)
+ { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }
+ else if (display.viewTo > to)
+ { display.view = display.view.slice(0, findViewIndex(cm, to)); }
+ }
+ display.viewTo = to;
+ }
+
+ // Count the number of lines in the view whose DOM representation is
+ // out of date (or nonexistent).
+ function countDirtyView(cm) {
+ var view = cm.display.view, dirty = 0;
+ for (var i = 0; i < view.length; i++) {
+ var lineView = view[i];
+ if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }
+ }
+ return dirty
+ }
+
+ function updateSelection(cm) {
+ cm.display.input.showSelection(cm.display.input.prepareSelection());
+ }
+
+ function prepareSelection(cm, primary) {
+ if ( primary === void 0 ) primary = true;
+
+ var doc = cm.doc, result = {};
+ var curFragment = result.cursors = document.createDocumentFragment();
+ var selFragment = result.selection = document.createDocumentFragment();
+
+ for (var i = 0; i < doc.sel.ranges.length; i++) {
+ if (!primary && i == doc.sel.primIndex) { continue }
+ var range = doc.sel.ranges[i];
+ if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue }
+ var collapsed = range.empty();
+ if (collapsed || cm.options.showCursorWhenSelecting)
+ { drawSelectionCursor(cm, range.head, curFragment); }
+ if (!collapsed)
+ { drawSelectionRange(cm, range, selFragment); }
+ }
+ return result
+ }
+
+ // Draws a cursor for the given range
+ function drawSelectionCursor(cm, head, output) {
+ var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine);
+
+ var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor"));
+ cursor.style.left = pos.left + "px";
+ cursor.style.top = pos.top + "px";
+ cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px";
+
+ if (pos.other) {
+ // Secondary cursor, shown when on a 'jump' in bi-directional text
+ var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor"));
+ otherCursor.style.display = "";
+ otherCursor.style.left = pos.other.left + "px";
+ otherCursor.style.top = pos.other.top + "px";
+ otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px";
+ }
+ }
+
+ function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }
+
+ // Draws the given range as a highlighted selection
+ function drawSelectionRange(cm, range, output) {
+ var display = cm.display, doc = cm.doc;
+ var fragment = document.createDocumentFragment();
+ var padding = paddingH(cm.display), leftSide = padding.left;
+ var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;
+ var docLTR = doc.direction == "ltr";
+
+ function add(left, top, width, bottom) {
+ if (top < 0) { top = 0; }
+ top = Math.round(top);
+ bottom = Math.round(bottom);
+ fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px")));
+ }
+
+ function drawForLine(line, fromArg, toArg) {
+ var lineObj = getLine(doc, line);
+ var lineLen = lineObj.text.length;
+ var start, end;
+ function coords(ch, bias) {
+ return charCoords(cm, Pos(line, ch), "div", lineObj, bias)
+ }
+
+ function wrapX(pos, dir, side) {
+ var extent = wrappedLineExtentChar(cm, lineObj, null, pos);
+ var prop = (dir == "ltr") == (side == "after") ? "left" : "right";
+ var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);
+ return coords(ch, prop)[prop]
+ }
+
+ var order = getOrder(lineObj, doc.direction);
+ iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {
+ var ltr = dir == "ltr";
+ var fromPos = coords(from, ltr ? "left" : "right");
+ var toPos = coords(to - 1, ltr ? "right" : "left");
+
+ var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;
+ var first = i == 0, last = !order || i == order.length - 1;
+ if (toPos.top - fromPos.top <= 3) { // Single line
+ var openLeft = (docLTR ? openStart : openEnd) && first;
+ var openRight = (docLTR ? openEnd : openStart) && last;
+ var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;
+ var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;
+ add(left, fromPos.top, right - left, fromPos.bottom);
+ } else { // Multiple lines
+ var topLeft, topRight, botLeft, botRight;
+ if (ltr) {
+ topLeft = docLTR && openStart && first ? leftSide : fromPos.left;
+ topRight = docLTR ? rightSide : wrapX(from, dir, "before");
+ botLeft = docLTR ? leftSide : wrapX(to, dir, "after");
+ botRight = docLTR && openEnd && last ? rightSide : toPos.right;
+ } else {
+ topLeft = !docLTR ? leftSide : wrapX(from, dir, "before");
+ topRight = !docLTR && openStart && first ? rightSide : fromPos.right;
+ botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;
+ botRight = !docLTR ? rightSide : wrapX(to, dir, "after");
+ }
+ add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);
+ if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }
+ add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);
+ }
+
+ if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }
+ if (cmpCoords(toPos, start) < 0) { start = toPos; }
+ if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }
+ if (cmpCoords(toPos, end) < 0) { end = toPos; }
+ });
+ return {start: start, end: end}
+ }
+
+ var sFrom = range.from(), sTo = range.to();
+ if (sFrom.line == sTo.line) {
+ drawForLine(sFrom.line, sFrom.ch, sTo.ch);
+ } else {
+ var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);
+ var singleVLine = visualLine(fromLine) == visualLine(toLine);
+ var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;
+ var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;
+ if (singleVLine) {
+ if (leftEnd.top < rightStart.top - 2) {
+ add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);
+ add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);
+ } else {
+ add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);
+ }
+ }
+ if (leftEnd.bottom < rightStart.top)
+ { add(leftSide, leftEnd.bottom, null, rightStart.top); }
+ }
+
+ output.appendChild(fragment);
+ }
+
+ // Cursor-blinking
+ function restartBlink(cm) {
+ if (!cm.state.focused) { return }
+ var display = cm.display;
+ clearInterval(display.blinker);
+ var on = true;
+ display.cursorDiv.style.visibility = "";
+ if (cm.options.cursorBlinkRate > 0)
+ { display.blinker = setInterval(function () {
+ if (!cm.hasFocus()) { onBlur(cm); }
+ display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden";
+ }, cm.options.cursorBlinkRate); }
+ else if (cm.options.cursorBlinkRate < 0)
+ { display.cursorDiv.style.visibility = "hidden"; }
+ }
+
+ function ensureFocus(cm) {
+ if (!cm.hasFocus()) {
+ cm.display.input.focus();
+ if (!cm.state.focused) { onFocus(cm); }
+ }
+ }
+
+ function delayBlurEvent(cm) {
+ cm.state.delayingBlurEvent = true;
+ setTimeout(function () { if (cm.state.delayingBlurEvent) {
+ cm.state.delayingBlurEvent = false;
+ if (cm.state.focused) { onBlur(cm); }
+ } }, 100);
+ }
+
+ function onFocus(cm, e) {
+ if (cm.state.delayingBlurEvent && !cm.state.draggingText) { cm.state.delayingBlurEvent = false; }
+
+ if (cm.options.readOnly == "nocursor") { return }
+ if (!cm.state.focused) {
+ signal(cm, "focus", cm, e);
+ cm.state.focused = true;
+ addClass(cm.display.wrapper, "CodeMirror-focused");
+ // This test prevents this from firing when a context
+ // menu is closed (since the input reset would kill the
+ // select-all detection hack)
+ if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {
+ cm.display.input.reset();
+ if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730
+ }
+ cm.display.input.receivedFocus();
+ }
+ restartBlink(cm);
+ }
+ function onBlur(cm, e) {
+ if (cm.state.delayingBlurEvent) { return }
+
+ if (cm.state.focused) {
+ signal(cm, "blur", cm, e);
+ cm.state.focused = false;
+ rmClass(cm.display.wrapper, "CodeMirror-focused");
+ }
+ clearInterval(cm.display.blinker);
+ setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);
+ }
+
+ // Read the actual heights of the rendered lines, and update their
+ // stored heights to match.
+ function updateHeightsInViewport(cm) {
+ var display = cm.display;
+ var prevBottom = display.lineDiv.offsetTop;
+ for (var i = 0; i < display.view.length; i++) {
+ var cur = display.view[i], wrapping = cm.options.lineWrapping;
+ var height = (void 0), width = 0;
+ if (cur.hidden) { continue }
+ if (ie && ie_version < 8) {
+ var bot = cur.node.offsetTop + cur.node.offsetHeight;
+ height = bot - prevBottom;
+ prevBottom = bot;
+ } else {
+ var box = cur.node.getBoundingClientRect();
+ height = box.bottom - box.top;
+ // Check that lines don't extend past the right of the current
+ // editor width
+ if (!wrapping && cur.text.firstChild)
+ { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }
+ }
+ var diff = cur.line.height - height;
+ if (diff > .005 || diff < -.005) {
+ updateLineHeight(cur.line, height);
+ updateWidgetHeight(cur.line);
+ if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)
+ { updateWidgetHeight(cur.rest[j]); } }
+ }
+ if (width > cm.display.sizerWidth) {
+ var chWidth = Math.ceil(width / charWidth(cm.display));
+ if (chWidth > cm.display.maxLineLength) {
+ cm.display.maxLineLength = chWidth;
+ cm.display.maxLine = cur.line;
+ cm.display.maxLineChanged = true;
+ }
+ }
+ }
+ }
+
+ // Read and store the height of line widgets associated with the
+ // given line.
+ function updateWidgetHeight(line) {
+ if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {
+ var w = line.widgets[i], parent = w.node.parentNode;
+ if (parent) { w.height = parent.offsetHeight; }
+ } }
+ }
+
+ // Compute the lines that are visible in a given viewport (defaults
+ // the the current scroll position). viewport may contain top,
+ // height, and ensure (see op.scrollToPos) properties.
+ function visibleLines(display, doc, viewport) {
+ var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;
+ top = Math.floor(top - paddingTop(display));
+ var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;
+
+ var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);
+ // Ensure is a {from: {line, ch}, to: {line, ch}} object, and
+ // forces those lines into the viewport (if possible).
+ if (viewport && viewport.ensure) {
+ var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;
+ if (ensureFrom < from) {
+ from = ensureFrom;
+ to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);
+ } else if (Math.min(ensureTo, doc.lastLine()) >= to) {
+ from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);
+ to = ensureTo;
+ }
+ }
+ return {from: from, to: Math.max(to, from + 1)}
+ }
+
+ // SCROLLING THINGS INTO VIEW
+
+ // If an editor sits on the top or bottom of the window, partially
+ // scrolled out of view, this ensures that the cursor is visible.
+ function maybeScrollWindow(cm, rect) {
+ if (signalDOMEvent(cm, "scrollCursorIntoView")) { return }
+
+ var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;
+ if (rect.top + box.top < 0) { doScroll = true; }
+ else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }
+ if (doScroll != null && !phantom) {
+ var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;"));
+ cm.display.lineSpace.appendChild(scrollNode);
+ scrollNode.scrollIntoView(doScroll);
+ cm.display.lineSpace.removeChild(scrollNode);
+ }
+ }
+
+ // Scroll a given position into view (immediately), verifying that
+ // it actually became visible (as line heights are accurately
+ // measured, the position of something may 'drift' during drawing).
+ function scrollPosIntoView(cm, pos, end, margin) {
+ if (margin == null) { margin = 0; }
+ var rect;
+ if (!cm.options.lineWrapping && pos == end) {
+ // Set pos and end to the cursor positions around the character pos sticks to
+ // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch
+ // If pos == Pos(_, 0, "before"), pos and end are unchanged
+ pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos;
+ end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos;
+ }
+ for (var limit = 0; limit < 5; limit++) {
+ var changed = false;
+ var coords = cursorCoords(cm, pos);
+ var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);
+ rect = {left: Math.min(coords.left, endCoords.left),
+ top: Math.min(coords.top, endCoords.top) - margin,
+ right: Math.max(coords.left, endCoords.left),
+ bottom: Math.max(coords.bottom, endCoords.bottom) + margin};
+ var scrollPos = calculateScrollPos(cm, rect);
+ var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;
+ if (scrollPos.scrollTop != null) {
+ updateScrollTop(cm, scrollPos.scrollTop);
+ if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }
+ }
+ if (scrollPos.scrollLeft != null) {
+ setScrollLeft(cm, scrollPos.scrollLeft);
+ if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }
+ }
+ if (!changed) { break }
+ }
+ return rect
+ }
+
+ // Scroll a given set of coordinates into view (immediately).
+ function scrollIntoView(cm, rect) {
+ var scrollPos = calculateScrollPos(cm, rect);
+ if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }
+ if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }
+ }
+
+ // Calculate a new scroll position needed to scroll the given
+ // rectangle into view. Returns an object with scrollTop and
+ // scrollLeft properties. When these are undefined, the
+ // vertical/horizontal position does not need to be adjusted.
+ function calculateScrollPos(cm, rect) {
+ var display = cm.display, snapMargin = textHeight(cm.display);
+ if (rect.top < 0) { rect.top = 0; }
+ var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;
+ var screen = displayHeight(cm), result = {};
+ if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }
+ var docBottom = cm.doc.height + paddingVert(display);
+ var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;
+ if (rect.top < screentop) {
+ result.scrollTop = atTop ? 0 : rect.top;
+ } else if (rect.bottom > screentop + screen) {
+ var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);
+ if (newTop != screentop) { result.scrollTop = newTop; }
+ }
+
+ var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth;
+ var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace;
+ var screenw = displayWidth(cm) - display.gutters.offsetWidth;
+ var tooWide = rect.right - rect.left > screenw;
+ if (tooWide) { rect.right = rect.left + screenw; }
+ if (rect.left < 10)
+ { result.scrollLeft = 0; }
+ else if (rect.left < screenleft)
+ { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); }
+ else if (rect.right > screenw + screenleft - 3)
+ { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }
+ return result
+ }
+
+ // Store a relative adjustment to the scroll position in the current
+ // operation (to be applied when the operation finishes).
+ function addToScrollTop(cm, top) {
+ if (top == null) { return }
+ resolveScrollToPos(cm);
+ cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;
+ }
+
+ // Make sure that at the end of the operation the current cursor is
+ // shown.
+ function ensureCursorVisible(cm) {
+ resolveScrollToPos(cm);
+ var cur = cm.getCursor();
+ cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};
+ }
+
+ function scrollToCoords(cm, x, y) {
+ if (x != null || y != null) { resolveScrollToPos(cm); }
+ if (x != null) { cm.curOp.scrollLeft = x; }
+ if (y != null) { cm.curOp.scrollTop = y; }
+ }
+
+ function scrollToRange(cm, range) {
+ resolveScrollToPos(cm);
+ cm.curOp.scrollToPos = range;
+ }
+
+ // When an operation has its scrollToPos property set, and another
+ // scroll action is applied before the end of the operation, this
+ // 'simulates' scrolling that position into view in a cheap way, so
+ // that the effect of intermediate scroll commands is not ignored.
+ function resolveScrollToPos(cm) {
+ var range = cm.curOp.scrollToPos;
+ if (range) {
+ cm.curOp.scrollToPos = null;
+ var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);
+ scrollToCoordsRange(cm, from, to, range.margin);
+ }
+ }
+
+ function scrollToCoordsRange(cm, from, to, margin) {
+ var sPos = calculateScrollPos(cm, {
+ left: Math.min(from.left, to.left),
+ top: Math.min(from.top, to.top) - margin,
+ right: Math.max(from.right, to.right),
+ bottom: Math.max(from.bottom, to.bottom) + margin
+ });
+ scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);
+ }
+
+ // Sync the scrollable area and scrollbars, ensure the viewport
+ // covers the visible area.
+ function updateScrollTop(cm, val) {
+ if (Math.abs(cm.doc.scrollTop - val) < 2) { return }
+ if (!gecko) { updateDisplaySimple(cm, {top: val}); }
+ setScrollTop(cm, val, true);
+ if (gecko) { updateDisplaySimple(cm); }
+ startWorker(cm, 100);
+ }
+
+ function setScrollTop(cm, val, forceScroll) {
+ val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));
+ if (cm.display.scroller.scrollTop == val && !forceScroll) { return }
+ cm.doc.scrollTop = val;
+ cm.display.scrollbars.setScrollTop(val);
+ if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }
+ }
+
+ // Sync scroller and scrollbar, ensure the gutter elements are
+ // aligned.
+ function setScrollLeft(cm, val, isScroller, forceScroll) {
+ val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));
+ if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }
+ cm.doc.scrollLeft = val;
+ alignHorizontally(cm);
+ if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }
+ cm.display.scrollbars.setScrollLeft(val);
+ }
+
+ // SCROLLBARS
+
+ // Prepare DOM reads needed to update the scrollbars. Done in one
+ // shot to minimize update/measure roundtrips.
+ function measureForScrollbars(cm) {
+ var d = cm.display, gutterW = d.gutters.offsetWidth;
+ var docH = Math.round(cm.doc.height + paddingVert(cm.display));
+ return {
+ clientHeight: d.scroller.clientHeight,
+ viewHeight: d.wrapper.clientHeight,
+ scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,
+ viewWidth: d.wrapper.clientWidth,
+ barLeft: cm.options.fixedGutter ? gutterW : 0,
+ docHeight: docH,
+ scrollHeight: docH + scrollGap(cm) + d.barHeight,
+ nativeBarWidth: d.nativeBarWidth,
+ gutterWidth: gutterW
+ }
+ }
+
+ var NativeScrollbars = function(place, scroll, cm) {
+ this.cm = cm;
+ var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar");
+ var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar");
+ vert.tabIndex = horiz.tabIndex = -1;
+ place(vert); place(horiz);
+
+ on(vert, "scroll", function () {
+ if (vert.clientHeight) { scroll(vert.scrollTop, "vertical"); }
+ });
+ on(horiz, "scroll", function () {
+ if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal"); }
+ });
+
+ this.checkedZeroWidth = false;
+ // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).
+ if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; }
+ };
+
+ NativeScrollbars.prototype.update = function (measure) {
+ var needsH = measure.scrollWidth > measure.clientWidth + 1;
+ var needsV = measure.scrollHeight > measure.clientHeight + 1;
+ var sWidth = measure.nativeBarWidth;
+
+ if (needsV) {
+ this.vert.style.display = "block";
+ this.vert.style.bottom = needsH ? sWidth + "px" : "0";
+ var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);
+ // A bug in IE8 can cause this value to be negative, so guard it.
+ this.vert.firstChild.style.height =
+ Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px";
+ } else {
+ this.vert.style.display = "";
+ this.vert.firstChild.style.height = "0";
+ }
+
+ if (needsH) {
+ this.horiz.style.display = "block";
+ this.horiz.style.right = needsV ? sWidth + "px" : "0";
+ this.horiz.style.left = measure.barLeft + "px";
+ var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);
+ this.horiz.firstChild.style.width =
+ Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px";
+ } else {
+ this.horiz.style.display = "";
+ this.horiz.firstChild.style.width = "0";
+ }
+
+ if (!this.checkedZeroWidth && measure.clientHeight > 0) {
+ if (sWidth == 0) { this.zeroWidthHack(); }
+ this.checkedZeroWidth = true;
+ }
+
+ return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}
+ };
+
+ NativeScrollbars.prototype.setScrollLeft = function (pos) {
+ if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }
+ if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); }
+ };
+
+ NativeScrollbars.prototype.setScrollTop = function (pos) {
+ if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }
+ if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); }
+ };
+
+ NativeScrollbars.prototype.zeroWidthHack = function () {
+ var w = mac && !mac_geMountainLion ? "12px" : "18px";
+ this.horiz.style.height = this.vert.style.width = w;
+ this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none";
+ this.disableHoriz = new Delayed;
+ this.disableVert = new Delayed;
+ };
+
+ NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {
+ bar.style.pointerEvents = "auto";
+ function maybeDisable() {
+ // To find out whether the scrollbar is still visible, we
+ // check whether the element under the pixel in the bottom
+ // right corner of the scrollbar box is the scrollbar box
+ // itself (when the bar is still visible) or its filler child
+ // (when the bar is hidden). If it is still visible, we keep
+ // it enabled, if it's hidden, we disable pointer events.
+ var box = bar.getBoundingClientRect();
+ var elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)
+ : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);
+ if (elt != bar) { bar.style.pointerEvents = "none"; }
+ else { delay.set(1000, maybeDisable); }
+ }
+ delay.set(1000, maybeDisable);
+ };
+
+ NativeScrollbars.prototype.clear = function () {
+ var parent = this.horiz.parentNode;
+ parent.removeChild(this.horiz);
+ parent.removeChild(this.vert);
+ };
+
+ var NullScrollbars = function () {};
+
+ NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };
+ NullScrollbars.prototype.setScrollLeft = function () {};
+ NullScrollbars.prototype.setScrollTop = function () {};
+ NullScrollbars.prototype.clear = function () {};
+
+ function updateScrollbars(cm, measure) {
+ if (!measure) { measure = measureForScrollbars(cm); }
+ var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;
+ updateScrollbarsInner(cm, measure);
+ for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {
+ if (startWidth != cm.display.barWidth && cm.options.lineWrapping)
+ { updateHeightsInViewport(cm); }
+ updateScrollbarsInner(cm, measureForScrollbars(cm));
+ startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;
+ }
+ }
+
+ // Re-synchronize the fake scrollbars with the actual size of the
+ // content.
+ function updateScrollbarsInner(cm, measure) {
+ var d = cm.display;
+ var sizes = d.scrollbars.update(measure);
+
+ d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px";
+ d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px";
+ d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent";
+
+ if (sizes.right && sizes.bottom) {
+ d.scrollbarFiller.style.display = "block";
+ d.scrollbarFiller.style.height = sizes.bottom + "px";
+ d.scrollbarFiller.style.width = sizes.right + "px";
+ } else { d.scrollbarFiller.style.display = ""; }
+ if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
+ d.gutterFiller.style.display = "block";
+ d.gutterFiller.style.height = sizes.bottom + "px";
+ d.gutterFiller.style.width = measure.gutterWidth + "px";
+ } else { d.gutterFiller.style.display = ""; }
+ }
+
+ var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars};
+
+ function initScrollbars(cm) {
+ if (cm.display.scrollbars) {
+ cm.display.scrollbars.clear();
+ if (cm.display.scrollbars.addClass)
+ { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }
+ }
+
+ cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {
+ cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);
+ // Prevent clicks in the scrollbars from killing focus
+ on(node, "mousedown", function () {
+ if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }
+ });
+ node.setAttribute("cm-not-content", "true");
+ }, function (pos, axis) {
+ if (axis == "horizontal") { setScrollLeft(cm, pos); }
+ else { updateScrollTop(cm, pos); }
+ }, cm);
+ if (cm.display.scrollbars.addClass)
+ { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }
+ }
+
+ // Operations are used to wrap a series of changes to the editor
+ // state in such a way that each change won't have to update the
+ // cursor and display (which would be awkward, slow, and
+ // error-prone). Instead, display updates are batched and then all
+ // combined and executed at once.
+
+ var nextOpId = 0;
+ // Start a new operation.
+ function startOperation(cm) {
+ cm.curOp = {
+ cm: cm,
+ viewChanged: false, // Flag that indicates that lines might need to be redrawn
+ startHeight: cm.doc.height, // Used to detect need to update scrollbar
+ forceUpdate: false, // Used to force a redraw
+ updateInput: 0, // Whether to reset the input textarea
+ typing: false, // Whether this reset should be careful to leave existing text (for compositing)
+ changeObjs: null, // Accumulated changes, for firing change events
+ cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on
+ cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already
+ selectionChanged: false, // Whether the selection needs to be redrawn
+ updateMaxLine: false, // Set when the widest line needs to be determined anew
+ scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet
+ scrollToPos: null, // Used to scroll to a specific position
+ focus: false,
+ id: ++nextOpId // Unique ID
+ };
+ pushOperation(cm.curOp);
+ }
+
+ // Finish an operation, updating the display and signalling delayed events
+ function endOperation(cm) {
+ var op = cm.curOp;
+ if (op) { finishOperation(op, function (group) {
+ for (var i = 0; i < group.ops.length; i++)
+ { group.ops[i].cm.curOp = null; }
+ endOperations(group);
+ }); }
+ }
+
+ // The DOM updates done when an operation finishes are batched so
+ // that the minimum number of relayouts are required.
+ function endOperations(group) {
+ var ops = group.ops;
+ for (var i = 0; i < ops.length; i++) // Read DOM
+ { endOperation_R1(ops[i]); }
+ for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)
+ { endOperation_W1(ops[i$1]); }
+ for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM
+ { endOperation_R2(ops[i$2]); }
+ for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)
+ { endOperation_W2(ops[i$3]); }
+ for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM
+ { endOperation_finish(ops[i$4]); }
+ }
+
+ function endOperation_R1(op) {
+ var cm = op.cm, display = cm.display;
+ maybeClipScrollbars(cm);
+ if (op.updateMaxLine) { findMaxLine(cm); }
+
+ op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||
+ op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||
+ op.scrollToPos.to.line >= display.viewTo) ||
+ display.maxLineChanged && cm.options.lineWrapping;
+ op.update = op.mustUpdate &&
+ new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);
+ }
+
+ function endOperation_W1(op) {
+ op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);
+ }
+
+ function endOperation_R2(op) {
+ var cm = op.cm, display = cm.display;
+ if (op.updatedDisplay) { updateHeightsInViewport(cm); }
+
+ op.barMeasure = measureForScrollbars(cm);
+
+ // If the max line changed since it was last measured, measure it,
+ // and ensure the document's width matches it.
+ // updateDisplay_W2 will use these properties to do the actual resizing
+ if (display.maxLineChanged && !cm.options.lineWrapping) {
+ op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;
+ cm.display.sizerWidth = op.adjustWidthTo;
+ op.barMeasure.scrollWidth =
+ Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);
+ op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));
+ }
+
+ if (op.updatedDisplay || op.selectionChanged)
+ { op.preparedSelection = display.input.prepareSelection(); }
+ }
+
+ function endOperation_W2(op) {
+ var cm = op.cm;
+
+ if (op.adjustWidthTo != null) {
+ cm.display.sizer.style.minWidth = op.adjustWidthTo + "px";
+ if (op.maxScrollLeft < cm.doc.scrollLeft)
+ { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }
+ cm.display.maxLineChanged = false;
+ }
+
+ var takeFocus = op.focus && op.focus == activeElt();
+ if (op.preparedSelection)
+ { cm.display.input.showSelection(op.preparedSelection, takeFocus); }
+ if (op.updatedDisplay || op.startHeight != cm.doc.height)
+ { updateScrollbars(cm, op.barMeasure); }
+ if (op.updatedDisplay)
+ { setDocumentHeight(cm, op.barMeasure); }
+
+ if (op.selectionChanged) { restartBlink(cm); }
+
+ if (cm.state.focused && op.updateInput)
+ { cm.display.input.reset(op.typing); }
+ if (takeFocus) { ensureFocus(op.cm); }
+ }
+
+ function endOperation_finish(op) {
+ var cm = op.cm, display = cm.display, doc = cm.doc;
+
+ if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }
+
+ // Abort mouse wheel delta measurement, when scrolling explicitly
+ if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))
+ { display.wheelStartX = display.wheelStartY = null; }
+
+ // Propagate the scroll position to the actual DOM scroller
+ if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }
+
+ if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }
+ // If we need to scroll a specific position into view, do so.
+ if (op.scrollToPos) {
+ var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),
+ clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);
+ maybeScrollWindow(cm, rect);
+ }
+
+ // Fire events for markers that are hidden/unidden by editing or
+ // undoing
+ var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;
+ if (hidden) { for (var i = 0; i < hidden.length; ++i)
+ { if (!hidden[i].lines.length) { signal(hidden[i], "hide"); } } }
+ if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)
+ { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide"); } } }
+
+ if (display.wrapper.offsetHeight)
+ { doc.scrollTop = cm.display.scroller.scrollTop; }
+
+ // Fire change events, and delayed event handlers
+ if (op.changeObjs)
+ { signal(cm, "changes", cm, op.changeObjs); }
+ if (op.update)
+ { op.update.finish(); }
+ }
+
+ // Run the given function in an operation
+ function runInOp(cm, f) {
+ if (cm.curOp) { return f() }
+ startOperation(cm);
+ try { return f() }
+ finally { endOperation(cm); }
+ }
+ // Wraps a function in an operation. Returns the wrapped function.
+ function operation(cm, f) {
+ return function() {
+ if (cm.curOp) { return f.apply(cm, arguments) }
+ startOperation(cm);
+ try { return f.apply(cm, arguments) }
+ finally { endOperation(cm); }
+ }
+ }
+ // Used to add methods to editor and doc instances, wrapping them in
+ // operations.
+ function methodOp(f) {
+ return function() {
+ if (this.curOp) { return f.apply(this, arguments) }
+ startOperation(this);
+ try { return f.apply(this, arguments) }
+ finally { endOperation(this); }
+ }
+ }
+ function docMethodOp(f) {
+ return function() {
+ var cm = this.cm;
+ if (!cm || cm.curOp) { return f.apply(this, arguments) }
+ startOperation(cm);
+ try { return f.apply(this, arguments) }
+ finally { endOperation(cm); }
+ }
+ }
+
+ // HIGHLIGHT WORKER
+
+ function startWorker(cm, time) {
+ if (cm.doc.highlightFrontier < cm.display.viewTo)
+ { cm.state.highlight.set(time, bind(highlightWorker, cm)); }
+ }
+
+ function highlightWorker(cm) {
+ var doc = cm.doc;
+ if (doc.highlightFrontier >= cm.display.viewTo) { return }
+ var end = +new Date + cm.options.workTime;
+ var context = getContextBefore(cm, doc.highlightFrontier);
+ var changedLines = [];
+
+ doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {
+ if (context.line >= cm.display.viewFrom) { // Visible
+ var oldStyles = line.styles;
+ var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;
+ var highlighted = highlightLine(cm, line, context, true);
+ if (resetState) { context.state = resetState; }
+ line.styles = highlighted.styles;
+ var oldCls = line.styleClasses, newCls = highlighted.classes;
+ if (newCls) { line.styleClasses = newCls; }
+ else if (oldCls) { line.styleClasses = null; }
+ var ischange = !oldStyles || oldStyles.length != line.styles.length ||
+ oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);
+ for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }
+ if (ischange) { changedLines.push(context.line); }
+ line.stateAfter = context.save();
+ context.nextLine();
+ } else {
+ if (line.text.length <= cm.options.maxHighlightLength)
+ { processLine(cm, line.text, context); }
+ line.stateAfter = context.line % 5 == 0 ? context.save() : null;
+ context.nextLine();
+ }
+ if (+new Date > end) {
+ startWorker(cm, cm.options.workDelay);
+ return true
+ }
+ });
+ doc.highlightFrontier = context.line;
+ doc.modeFrontier = Math.max(doc.modeFrontier, context.line);
+ if (changedLines.length) { runInOp(cm, function () {
+ for (var i = 0; i < changedLines.length; i++)
+ { regLineChange(cm, changedLines[i], "text"); }
+ }); }
+ }
+
+ // DISPLAY DRAWING
+
+ var DisplayUpdate = function(cm, viewport, force) {
+ var display = cm.display;
+
+ this.viewport = viewport;
+ // Store some values that we'll need later (but don't want to force a relayout for)
+ this.visible = visibleLines(display, cm.doc, viewport);
+ this.editorIsHidden = !display.wrapper.offsetWidth;
+ this.wrapperHeight = display.wrapper.clientHeight;
+ this.wrapperWidth = display.wrapper.clientWidth;
+ this.oldDisplayWidth = displayWidth(cm);
+ this.force = force;
+ this.dims = getDimensions(cm);
+ this.events = [];
+ };
+
+ DisplayUpdate.prototype.signal = function (emitter, type) {
+ if (hasHandler(emitter, type))
+ { this.events.push(arguments); }
+ };
+ DisplayUpdate.prototype.finish = function () {
+ for (var i = 0; i < this.events.length; i++)
+ { signal.apply(null, this.events[i]); }
+ };
+
+ function maybeClipScrollbars(cm) {
+ var display = cm.display;
+ if (!display.scrollbarsClipped && display.scroller.offsetWidth) {
+ display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;
+ display.heightForcer.style.height = scrollGap(cm) + "px";
+ display.sizer.style.marginBottom = -display.nativeBarWidth + "px";
+ display.sizer.style.borderRightWidth = scrollGap(cm) + "px";
+ display.scrollbarsClipped = true;
+ }
+ }
+
+ function selectionSnapshot(cm) {
+ if (cm.hasFocus()) { return null }
+ var active = activeElt();
+ if (!active || !contains(cm.display.lineDiv, active)) { return null }
+ var result = {activeElt: active};
+ if (window.getSelection) {
+ var sel = window.getSelection();
+ if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {
+ result.anchorNode = sel.anchorNode;
+ result.anchorOffset = sel.anchorOffset;
+ result.focusNode = sel.focusNode;
+ result.focusOffset = sel.focusOffset;
+ }
+ }
+ return result
+ }
+
+ function restoreSelection(snapshot) {
+ if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }
+ snapshot.activeElt.focus();
+ if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) &&
+ snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {
+ var sel = window.getSelection(), range = document.createRange();
+ range.setEnd(snapshot.anchorNode, snapshot.anchorOffset);
+ range.collapse(false);
+ sel.removeAllRanges();
+ sel.addRange(range);
+ sel.extend(snapshot.focusNode, snapshot.focusOffset);
+ }
+ }
+
+ // Does the actual updating of the line display. Bails out
+ // (returning false) when there is nothing to be done and forced is
+ // false.
+ function updateDisplayIfNeeded(cm, update) {
+ var display = cm.display, doc = cm.doc;
+
+ if (update.editorIsHidden) {
+ resetView(cm);
+ return false
+ }
+
+ // Bail out if the visible area is already rendered and nothing changed.
+ if (!update.force &&
+ update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&
+ (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&
+ display.renderedView == display.view && countDirtyView(cm) == 0)
+ { return false }
+
+ if (maybeUpdateLineNumberWidth(cm)) {
+ resetView(cm);
+ update.dims = getDimensions(cm);
+ }
+
+ // Compute a suitable new viewport (from & to)
+ var end = doc.first + doc.size;
+ var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);
+ var to = Math.min(end, update.visible.to + cm.options.viewportMargin);
+ if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }
+ if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }
+ if (sawCollapsedSpans) {
+ from = visualLineNo(cm.doc, from);
+ to = visualLineEndNo(cm.doc, to);
+ }
+
+ var different = from != display.viewFrom || to != display.viewTo ||
+ display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;
+ adjustView(cm, from, to);
+
+ display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));
+ // Position the mover div to align with the current scroll position
+ cm.display.mover.style.top = display.viewOffset + "px";
+
+ var toUpdate = countDirtyView(cm);
+ if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&
+ (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))
+ { return false }
+
+ // For big changes, we hide the enclosing element during the
+ // update, since that speeds up the operations on most browsers.
+ var selSnapshot = selectionSnapshot(cm);
+ if (toUpdate > 4) { display.lineDiv.style.display = "none"; }
+ patchDisplay(cm, display.updateLineNumbers, update.dims);
+ if (toUpdate > 4) { display.lineDiv.style.display = ""; }
+ display.renderedView = display.view;
+ // There might have been a widget with a focused element that got
+ // hidden or updated, if so re-focus it.
+ restoreSelection(selSnapshot);
+
+ // Prevent selection and cursors from interfering with the scroll
+ // width and height.
+ removeChildren(display.cursorDiv);
+ removeChildren(display.selectionDiv);
+ display.gutters.style.height = display.sizer.style.minHeight = 0;
+
+ if (different) {
+ display.lastWrapHeight = update.wrapperHeight;
+ display.lastWrapWidth = update.wrapperWidth;
+ startWorker(cm, 400);
+ }
+
+ display.updateLineNumbers = null;
+
+ return true
+ }
+
+ function postUpdateDisplay(cm, update) {
+ var viewport = update.viewport;
+
+ for (var first = true;; first = false) {
+ if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {
+ // Clip forced viewport to actual scrollable area.
+ if (viewport && viewport.top != null)
+ { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }
+ // Updated line heights might result in the drawn area not
+ // actually covering the viewport. Keep looping until it does.
+ update.visible = visibleLines(cm.display, cm.doc, viewport);
+ if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)
+ { break }
+ } else if (first) {
+ update.visible = visibleLines(cm.display, cm.doc, viewport);
+ }
+ if (!updateDisplayIfNeeded(cm, update)) { break }
+ updateHeightsInViewport(cm);
+ var barMeasure = measureForScrollbars(cm);
+ updateSelection(cm);
+ updateScrollbars(cm, barMeasure);
+ setDocumentHeight(cm, barMeasure);
+ update.force = false;
+ }
+
+ update.signal(cm, "update", cm);
+ if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {
+ update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo);
+ cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;
+ }
+ }
+
+ function updateDisplaySimple(cm, viewport) {
+ var update = new DisplayUpdate(cm, viewport);
+ if (updateDisplayIfNeeded(cm, update)) {
+ updateHeightsInViewport(cm);
+ postUpdateDisplay(cm, update);
+ var barMeasure = measureForScrollbars(cm);
+ updateSelection(cm);
+ updateScrollbars(cm, barMeasure);
+ setDocumentHeight(cm, barMeasure);
+ update.finish();
+ }
+ }
+
+ // Sync the actual display DOM structure with display.view, removing
+ // nodes for lines that are no longer in view, and creating the ones
+ // that are not there yet, and updating the ones that are out of
+ // date.
+ function patchDisplay(cm, updateNumbersFrom, dims) {
+ var display = cm.display, lineNumbers = cm.options.lineNumbers;
+ var container = display.lineDiv, cur = container.firstChild;
+
+ function rm(node) {
+ var next = node.nextSibling;
+ // Works around a throw-scroll bug in OS X Webkit
+ if (webkit && mac && cm.display.currentWheelTarget == node)
+ { node.style.display = "none"; }
+ else
+ { node.parentNode.removeChild(node); }
+ return next
+ }
+
+ var view = display.view, lineN = display.viewFrom;
+ // Loop over the elements in the view, syncing cur (the DOM nodes
+ // in display.lineDiv) with the view as we go.
+ for (var i = 0; i < view.length; i++) {
+ var lineView = view[i];
+ if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet
+ var node = buildLineElement(cm, lineView, lineN, dims);
+ container.insertBefore(node, cur);
+ } else { // Already drawn
+ while (cur != lineView.node) { cur = rm(cur); }
+ var updateNumber = lineNumbers && updateNumbersFrom != null &&
+ updateNumbersFrom <= lineN && lineView.lineNumber;
+ if (lineView.changes) {
+ if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false; }
+ updateLineForChanges(cm, lineView, lineN, dims);
+ }
+ if (updateNumber) {
+ removeChildren(lineView.lineNumber);
+ lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));
+ }
+ cur = lineView.node.nextSibling;
+ }
+ lineN += lineView.size;
+ }
+ while (cur) { cur = rm(cur); }
+ }
+
+ function updateGutterSpace(display) {
+ var width = display.gutters.offsetWidth;
+ display.sizer.style.marginLeft = width + "px";
+ }
+
+ function setDocumentHeight(cm, measure) {
+ cm.display.sizer.style.minHeight = measure.docHeight + "px";
+ cm.display.heightForcer.style.top = measure.docHeight + "px";
+ cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px";
+ }
+
+ // Re-align line numbers and gutter marks to compensate for
+ // horizontal scrolling.
+ function alignHorizontally(cm) {
+ var display = cm.display, view = display.view;
+ if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }
+ var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;
+ var gutterW = display.gutters.offsetWidth, left = comp + "px";
+ for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {
+ if (cm.options.fixedGutter) {
+ if (view[i].gutter)
+ { view[i].gutter.style.left = left; }
+ if (view[i].gutterBackground)
+ { view[i].gutterBackground.style.left = left; }
+ }
+ var align = view[i].alignable;
+ if (align) { for (var j = 0; j < align.length; j++)
+ { align[j].style.left = left; } }
+ } }
+ if (cm.options.fixedGutter)
+ { display.gutters.style.left = (comp + gutterW) + "px"; }
+ }
+
+ // Used to ensure that the line number gutter is still the right
+ // size for the current document size. Returns true when an update
+ // is needed.
+ function maybeUpdateLineNumberWidth(cm) {
+ if (!cm.options.lineNumbers) { return false }
+ var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;
+ if (last.length != display.lineNumChars) {
+ var test = display.measure.appendChild(elt("div", [elt("div", last)],
+ "CodeMirror-linenumber CodeMirror-gutter-elt"));
+ var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;
+ display.lineGutter.style.width = "";
+ display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;
+ display.lineNumWidth = display.lineNumInnerWidth + padding;
+ display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;
+ display.lineGutter.style.width = display.lineNumWidth + "px";
+ updateGutterSpace(cm.display);
+ return true
+ }
+ return false
+ }
+
+ function getGutters(gutters, lineNumbers) {
+ var result = [], sawLineNumbers = false;
+ for (var i = 0; i < gutters.length; i++) {
+ var name = gutters[i], style = null;
+ if (typeof name != "string") { style = name.style; name = name.className; }
+ if (name == "CodeMirror-linenumbers") {
+ if (!lineNumbers) { continue }
+ else { sawLineNumbers = true; }
+ }
+ result.push({className: name, style: style});
+ }
+ if (lineNumbers && !sawLineNumbers) { result.push({className: "CodeMirror-linenumbers", style: null}); }
+ return result
+ }
+
+ // Rebuild the gutter elements, ensure the margin to the left of the
+ // code matches their width.
+ function renderGutters(display) {
+ var gutters = display.gutters, specs = display.gutterSpecs;
+ removeChildren(gutters);
+ display.lineGutter = null;
+ for (var i = 0; i < specs.length; ++i) {
+ var ref = specs[i];
+ var className = ref.className;
+ var style = ref.style;
+ var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className));
+ if (style) { gElt.style.cssText = style; }
+ if (className == "CodeMirror-linenumbers") {
+ display.lineGutter = gElt;
+ gElt.style.width = (display.lineNumWidth || 1) + "px";
+ }
+ }
+ gutters.style.display = specs.length ? "" : "none";
+ updateGutterSpace(display);
+ }
+
+ function updateGutters(cm) {
+ renderGutters(cm.display);
+ regChange(cm);
+ alignHorizontally(cm);
+ }
+
+ // The display handles the DOM integration, both for input reading
+ // and content drawing. It holds references to DOM nodes and
+ // display-related state.
+
+ function Display(place, doc, input, options) {
+ var d = this;
+ this.input = input;
+
+ // Covers bottom-right square when both scrollbars are present.
+ d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler");
+ d.scrollbarFiller.setAttribute("cm-not-content", "true");
+ // Covers bottom of gutter when coverGutterNextToScrollbar is on
+ // and h scrollbar is present.
+ d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler");
+ d.gutterFiller.setAttribute("cm-not-content", "true");
+ // Will contain the actual code, positioned to cover the viewport.
+ d.lineDiv = eltP("div", null, "CodeMirror-code");
+ // Elements are added to these to represent selection and cursors.
+ d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1");
+ d.cursorDiv = elt("div", null, "CodeMirror-cursors");
+ // A visibility: hidden element used to find the size of things.
+ d.measure = elt("div", null, "CodeMirror-measure");
+ // When lines outside of the viewport are measured, they are drawn in this.
+ d.lineMeasure = elt("div", null, "CodeMirror-measure");
+ // Wraps everything that needs to exist inside the vertically-padded coordinate system
+ d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],
+ null, "position: relative; outline: none");
+ var lines = eltP("div", [d.lineSpace], "CodeMirror-lines");
+ // Moved around its parent to cover visible view.
+ d.mover = elt("div", [lines], null, "position: relative");
+ // Set to the height of the document, allowing scrolling.
+ d.sizer = elt("div", [d.mover], "CodeMirror-sizer");
+ d.sizerWidth = null;
+ // Behavior of elts with overflow: auto and padding is
+ // inconsistent across browsers. This is used to ensure the
+ // scrollable area is big enough.
+ d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;");
+ // Will contain the gutters, if any.
+ d.gutters = elt("div", null, "CodeMirror-gutters");
+ d.lineGutter = null;
+ // Actual scrollable element.
+ d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll");
+ d.scroller.setAttribute("tabIndex", "-1");
+ // The element in which the editor lives.
+ d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror");
+
+ // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)
+ if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }
+ if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }
+
+ if (place) {
+ if (place.appendChild) { place.appendChild(d.wrapper); }
+ else { place(d.wrapper); }
+ }
+
+ // Current rendered range (may be bigger than the view window).
+ d.viewFrom = d.viewTo = doc.first;
+ d.reportedViewFrom = d.reportedViewTo = doc.first;
+ // Information about the rendered lines.
+ d.view = [];
+ d.renderedView = null;
+ // Holds info about a single rendered line when it was rendered
+ // for measurement, while not in view.
+ d.externalMeasured = null;
+ // Empty space (in pixels) above the view
+ d.viewOffset = 0;
+ d.lastWrapHeight = d.lastWrapWidth = 0;
+ d.updateLineNumbers = null;
+
+ d.nativeBarWidth = d.barHeight = d.barWidth = 0;
+ d.scrollbarsClipped = false;
+
+ // Used to only resize the line number gutter when necessary (when
+ // the amount of lines crosses a boundary that makes its width change)
+ d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;
+ // Set to true when a non-horizontal-scrolling line widget is
+ // added. As an optimization, line widget aligning is skipped when
+ // this is false.
+ d.alignWidgets = false;
+
+ d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;
+
+ // Tracks the maximum line length so that the horizontal scrollbar
+ // can be kept static when scrolling.
+ d.maxLine = null;
+ d.maxLineLength = 0;
+ d.maxLineChanged = false;
+
+ // Used for measuring wheel scrolling granularity
+ d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;
+
+ // True when shift is held down.
+ d.shift = false;
+
+ // Used to track whether anything happened since the context menu
+ // was opened.
+ d.selForContextMenu = null;
+
+ d.activeTouch = null;
+
+ d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);
+ renderGutters(d);
+
+ input.init(d);
+ }
+
+ // Since the delta values reported on mouse wheel events are
+ // unstandardized between browsers and even browser versions, and
+ // generally horribly unpredictable, this code starts by measuring
+ // the scroll effect that the first few mouse wheel events have,
+ // and, from that, detects the way it can convert deltas to pixel
+ // offsets afterwards.
+ //
+ // The reason we want to know the amount a wheel event will scroll
+ // is that it gives us a chance to update the display before the
+ // actual scrolling happens, reducing flickering.
+
+ var wheelSamples = 0, wheelPixelsPerUnit = null;
+ // Fill in a browser-detected starting value on browsers where we
+ // know one. These don't have to be accurate -- the result of them
+ // being wrong would just be a slight flicker on the first wheel
+ // scroll (if it is large enough).
+ if (ie) { wheelPixelsPerUnit = -.53; }
+ else if (gecko) { wheelPixelsPerUnit = 15; }
+ else if (chrome) { wheelPixelsPerUnit = -.7; }
+ else if (safari) { wheelPixelsPerUnit = -1/3; }
+
+ function wheelEventDelta(e) {
+ var dx = e.wheelDeltaX, dy = e.wheelDeltaY;
+ if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }
+ if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }
+ else if (dy == null) { dy = e.wheelDelta; }
+ return {x: dx, y: dy}
+ }
+ function wheelEventPixels(e) {
+ var delta = wheelEventDelta(e);
+ delta.x *= wheelPixelsPerUnit;
+ delta.y *= wheelPixelsPerUnit;
+ return delta
+ }
+
+ function onScrollWheel(cm, e) {
+ var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;
+
+ var display = cm.display, scroll = display.scroller;
+ // Quit if there's nothing to scroll here
+ var canScrollX = scroll.scrollWidth > scroll.clientWidth;
+ var canScrollY = scroll.scrollHeight > scroll.clientHeight;
+ if (!(dx && canScrollX || dy && canScrollY)) { return }
+
+ // Webkit browsers on OS X abort momentum scrolls when the target
+ // of the scroll event is removed from the scrollable element.
+ // This hack (see related code in patchDisplay) makes sure the
+ // element is kept around.
+ if (dy && mac && webkit) {
+ outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {
+ for (var i = 0; i < view.length; i++) {
+ if (view[i].node == cur) {
+ cm.display.currentWheelTarget = cur;
+ break outer
+ }
+ }
+ }
+ }
+
+ // On some browsers, horizontal scrolling will cause redraws to
+ // happen before the gutter has been realigned, causing it to
+ // wriggle around in a most unseemly way. When we have an
+ // estimated pixels/delta value, we just handle horizontal
+ // scrolling entirely here. It'll be slightly off from native, but
+ // better than glitching out.
+ if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {
+ if (dy && canScrollY)
+ { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); }
+ setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit));
+ // Only prevent default scrolling if vertical scrolling is
+ // actually possible. Otherwise, it causes vertical scroll
+ // jitter on OSX trackpads when deltaX is small and deltaY
+ // is large (issue #3579)
+ if (!dy || (dy && canScrollY))
+ { e_preventDefault(e); }
+ display.wheelStartX = null; // Abort measurement, if in progress
+ return
+ }
+
+ // 'Project' the visible viewport to cover the area that is being
+ // scrolled into view (if we know enough to estimate it).
+ if (dy && wheelPixelsPerUnit != null) {
+ var pixels = dy * wheelPixelsPerUnit;
+ var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;
+ if (pixels < 0) { top = Math.max(0, top + pixels - 50); }
+ else { bot = Math.min(cm.doc.height, bot + pixels + 50); }
+ updateDisplaySimple(cm, {top: top, bottom: bot});
+ }
+
+ if (wheelSamples < 20) {
+ if (display.wheelStartX == null) {
+ display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;
+ display.wheelDX = dx; display.wheelDY = dy;
+ setTimeout(function () {
+ if (display.wheelStartX == null) { return }
+ var movedX = scroll.scrollLeft - display.wheelStartX;
+ var movedY = scroll.scrollTop - display.wheelStartY;
+ var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||
+ (movedX && display.wheelDX && movedX / display.wheelDX);
+ display.wheelStartX = display.wheelStartY = null;
+ if (!sample) { return }
+ wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);
+ ++wheelSamples;
+ }, 200);
+ } else {
+ display.wheelDX += dx; display.wheelDY += dy;
+ }
+ }
+ }
+
+ // Selection objects are immutable. A new one is created every time
+ // the selection changes. A selection is one or more non-overlapping
+ // (and non-touching) ranges, sorted, and an integer that indicates
+ // which one is the primary selection (the one that's scrolled into
+ // view, that getCursor returns, etc).
+ var Selection = function(ranges, primIndex) {
+ this.ranges = ranges;
+ this.primIndex = primIndex;
+ };
+
+ Selection.prototype.primary = function () { return this.ranges[this.primIndex] };
+
+ Selection.prototype.equals = function (other) {
+ if (other == this) { return true }
+ if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }
+ for (var i = 0; i < this.ranges.length; i++) {
+ var here = this.ranges[i], there = other.ranges[i];
+ if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }
+ }
+ return true
+ };
+
+ Selection.prototype.deepCopy = function () {
+ var out = [];
+ for (var i = 0; i < this.ranges.length; i++)
+ { out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); }
+ return new Selection(out, this.primIndex)
+ };
+
+ Selection.prototype.somethingSelected = function () {
+ for (var i = 0; i < this.ranges.length; i++)
+ { if (!this.ranges[i].empty()) { return true } }
+ return false
+ };
+
+ Selection.prototype.contains = function (pos, end) {
+ if (!end) { end = pos; }
+ for (var i = 0; i < this.ranges.length; i++) {
+ var range = this.ranges[i];
+ if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)
+ { return i }
+ }
+ return -1
+ };
+
+ var Range = function(anchor, head) {
+ this.anchor = anchor; this.head = head;
+ };
+
+ Range.prototype.from = function () { return minPos(this.anchor, this.head) };
+ Range.prototype.to = function () { return maxPos(this.anchor, this.head) };
+ Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };
+
+ // Take an unsorted, potentially overlapping set of ranges, and
+ // build a selection out of it. 'Consumes' ranges array (modifying
+ // it).
+ function normalizeSelection(cm, ranges, primIndex) {
+ var mayTouch = cm && cm.options.selectionsMayTouch;
+ var prim = ranges[primIndex];
+ ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });
+ primIndex = indexOf(ranges, prim);
+ for (var i = 1; i < ranges.length; i++) {
+ var cur = ranges[i], prev = ranges[i - 1];
+ var diff = cmp(prev.to(), cur.from());
+ if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {
+ var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());
+ var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;
+ if (i <= primIndex) { --primIndex; }
+ ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));
+ }
+ }
+ return new Selection(ranges, primIndex)
+ }
+
+ function simpleSelection(anchor, head) {
+ return new Selection([new Range(anchor, head || anchor)], 0)
+ }
+
+ // Compute the position of the end of a change (its 'to' property
+ // refers to the pre-change end).
+ function changeEnd(change) {
+ if (!change.text) { return change.to }
+ return Pos(change.from.line + change.text.length - 1,
+ lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))
+ }
+
+ // Adjust a position to refer to the post-change position of the
+ // same text, or the end of the change if the change covers it.
+ function adjustForChange(pos, change) {
+ if (cmp(pos, change.from) < 0) { return pos }
+ if (cmp(pos, change.to) <= 0) { return changeEnd(change) }
+
+ var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;
+ if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }
+ return Pos(line, ch)
+ }
+
+ function computeSelAfterChange(doc, change) {
+ var out = [];
+ for (var i = 0; i < doc.sel.ranges.length; i++) {
+ var range = doc.sel.ranges[i];
+ out.push(new Range(adjustForChange(range.anchor, change),
+ adjustForChange(range.head, change)));
+ }
+ return normalizeSelection(doc.cm, out, doc.sel.primIndex)
+ }
+
+ function offsetPos(pos, old, nw) {
+ if (pos.line == old.line)
+ { return Pos(nw.line, pos.ch - old.ch + nw.ch) }
+ else
+ { return Pos(nw.line + (pos.line - old.line), pos.ch) }
+ }
+
+ // Used by replaceSelections to allow moving the selection to the
+ // start or around the replaced test. Hint may be "start" or "around".
+ function computeReplacedSel(doc, changes, hint) {
+ var out = [];
+ var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;
+ for (var i = 0; i < changes.length; i++) {
+ var change = changes[i];
+ var from = offsetPos(change.from, oldPrev, newPrev);
+ var to = offsetPos(changeEnd(change), oldPrev, newPrev);
+ oldPrev = change.to;
+ newPrev = to;
+ if (hint == "around") {
+ var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;
+ out[i] = new Range(inv ? to : from, inv ? from : to);
+ } else {
+ out[i] = new Range(from, from);
+ }
+ }
+ return new Selection(out, doc.sel.primIndex)
+ }
+
+ // Used to get the editor into a consistent state again when options change.
+
+ function loadMode(cm) {
+ cm.doc.mode = getMode(cm.options, cm.doc.modeOption);
+ resetModeState(cm);
+ }
+
+ function resetModeState(cm) {
+ cm.doc.iter(function (line) {
+ if (line.stateAfter) { line.stateAfter = null; }
+ if (line.styles) { line.styles = null; }
+ });
+ cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;
+ startWorker(cm, 100);
+ cm.state.modeGen++;
+ if (cm.curOp) { regChange(cm); }
+ }
+
+ // DOCUMENT DATA STRUCTURE
+
+ // By default, updates that start and end at the beginning of a line
+ // are treated specially, in order to make the association of line
+ // widgets and marker elements with the text behave more intuitive.
+ function isWholeLineUpdate(doc, change) {
+ return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" &&
+ (!doc.cm || doc.cm.options.wholeLineUpdateBefore)
+ }
+
+ // Perform a change on the document data structure.
+ function updateDoc(doc, change, markedSpans, estimateHeight) {
+ function spansFor(n) {return markedSpans ? markedSpans[n] : null}
+ function update(line, text, spans) {
+ updateLine(line, text, spans, estimateHeight);
+ signalLater(line, "change", line, change);
+ }
+ function linesFor(start, end) {
+ var result = [];
+ for (var i = start; i < end; ++i)
+ { result.push(new Line(text[i], spansFor(i), estimateHeight)); }
+ return result
+ }
+
+ var from = change.from, to = change.to, text = change.text;
+ var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);
+ var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;
+
+ // Adjust the line structure
+ if (change.full) {
+ doc.insert(0, linesFor(0, text.length));
+ doc.remove(text.length, doc.size - text.length);
+ } else if (isWholeLineUpdate(doc, change)) {
+ // This is a whole-line replace. Treated specially to make
+ // sure line objects move the way they are supposed to.
+ var added = linesFor(0, text.length - 1);
+ update(lastLine, lastLine.text, lastSpans);
+ if (nlines) { doc.remove(from.line, nlines); }
+ if (added.length) { doc.insert(from.line, added); }
+ } else if (firstLine == lastLine) {
+ if (text.length == 1) {
+ update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);
+ } else {
+ var added$1 = linesFor(1, text.length - 1);
+ added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));
+ update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
+ doc.insert(from.line + 1, added$1);
+ }
+ } else if (text.length == 1) {
+ update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));
+ doc.remove(from.line + 1, nlines);
+ } else {
+ update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
+ update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);
+ var added$2 = linesFor(1, text.length - 1);
+ if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }
+ doc.insert(from.line + 1, added$2);
+ }
+
+ signalLater(doc, "change", doc, change);
+ }
+
+ // Call f for all linked documents.
+ function linkedDocs(doc, f, sharedHistOnly) {
+ function propagate(doc, skip, sharedHist) {
+ if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {
+ var rel = doc.linked[i];
+ if (rel.doc == skip) { continue }
+ var shared = sharedHist && rel.sharedHist;
+ if (sharedHistOnly && !shared) { continue }
+ f(rel.doc, shared);
+ propagate(rel.doc, doc, shared);
+ } }
+ }
+ propagate(doc, null, true);
+ }
+
+ // Attach a document to an editor.
+ function attachDoc(cm, doc) {
+ if (doc.cm) { throw new Error("This document is already in use.") }
+ cm.doc = doc;
+ doc.cm = cm;
+ estimateLineHeights(cm);
+ loadMode(cm);
+ setDirectionClass(cm);
+ if (!cm.options.lineWrapping) { findMaxLine(cm); }
+ cm.options.mode = doc.modeOption;
+ regChange(cm);
+ }
+
+ function setDirectionClass(cm) {
+ (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl");
+ }
+
+ function directionChanged(cm) {
+ runInOp(cm, function () {
+ setDirectionClass(cm);
+ regChange(cm);
+ });
+ }
+
+ function History(startGen) {
+ // Arrays of change events and selections. Doing something adds an
+ // event to done and clears undo. Undoing moves events from done
+ // to undone, redoing moves them in the other direction.
+ this.done = []; this.undone = [];
+ this.undoDepth = Infinity;
+ // Used to track when changes can be merged into a single undo
+ // event
+ this.lastModTime = this.lastSelTime = 0;
+ this.lastOp = this.lastSelOp = null;
+ this.lastOrigin = this.lastSelOrigin = null;
+ // Used by the isClean() method
+ this.generation = this.maxGeneration = startGen || 1;
+ }
+
+ // Create a history change event from an updateDoc-style change
+ // object.
+ function historyChangeFromChange(doc, change) {
+ var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};
+ attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);
+ linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);
+ return histChange
+ }
+
+ // Pop all selection events off the end of a history array. Stop at
+ // a change event.
+ function clearSelectionEvents(array) {
+ while (array.length) {
+ var last = lst(array);
+ if (last.ranges) { array.pop(); }
+ else { break }
+ }
+ }
+
+ // Find the top change event in the history. Pop off selection
+ // events that are in the way.
+ function lastChangeEvent(hist, force) {
+ if (force) {
+ clearSelectionEvents(hist.done);
+ return lst(hist.done)
+ } else if (hist.done.length && !lst(hist.done).ranges) {
+ return lst(hist.done)
+ } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {
+ hist.done.pop();
+ return lst(hist.done)
+ }
+ }
+
+ // Register a change in the history. Merges changes that are within
+ // a single operation, or are close together with an origin that
+ // allows merging (starting with "+") into a single event.
+ function addChangeToHistory(doc, change, selAfter, opId) {
+ var hist = doc.history;
+ hist.undone.length = 0;
+ var time = +new Date, cur;
+ var last;
+
+ if ((hist.lastOp == opId ||
+ hist.lastOrigin == change.origin && change.origin &&
+ ((change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||
+ change.origin.charAt(0) == "*")) &&
+ (cur = lastChangeEvent(hist, hist.lastOp == opId))) {
+ // Merge this change into the last event
+ last = lst(cur.changes);
+ if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {
+ // Optimized case for simple insertion -- don't want to add
+ // new changesets for every character typed
+ last.to = changeEnd(change);
+ } else {
+ // Add new sub-event
+ cur.changes.push(historyChangeFromChange(doc, change));
+ }
+ } else {
+ // Can not be merged, start a new event.
+ var before = lst(hist.done);
+ if (!before || !before.ranges)
+ { pushSelectionToHistory(doc.sel, hist.done); }
+ cur = {changes: [historyChangeFromChange(doc, change)],
+ generation: hist.generation};
+ hist.done.push(cur);
+ while (hist.done.length > hist.undoDepth) {
+ hist.done.shift();
+ if (!hist.done[0].ranges) { hist.done.shift(); }
+ }
+ }
+ hist.done.push(selAfter);
+ hist.generation = ++hist.maxGeneration;
+ hist.lastModTime = hist.lastSelTime = time;
+ hist.lastOp = hist.lastSelOp = opId;
+ hist.lastOrigin = hist.lastSelOrigin = change.origin;
+
+ if (!last) { signal(doc, "historyAdded"); }
+ }
+
+ function selectionEventCanBeMerged(doc, origin, prev, sel) {
+ var ch = origin.charAt(0);
+ return ch == "*" ||
+ ch == "+" &&
+ prev.ranges.length == sel.ranges.length &&
+ prev.somethingSelected() == sel.somethingSelected() &&
+ new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)
+ }
+
+ // Called whenever the selection changes, sets the new selection as
+ // the pending selection in the history, and pushes the old pending
+ // selection into the 'done' array when it was significantly
+ // different (in number of selected ranges, emptiness, or time).
+ function addSelectionToHistory(doc, sel, opId, options) {
+ var hist = doc.history, origin = options && options.origin;
+
+ // A new event is started when the previous origin does not match
+ // the current, or the origins don't allow matching. Origins
+ // starting with * are always merged, those starting with + are
+ // merged when similar and close together in time.
+ if (opId == hist.lastSelOp ||
+ (origin && hist.lastSelOrigin == origin &&
+ (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||
+ selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))
+ { hist.done[hist.done.length - 1] = sel; }
+ else
+ { pushSelectionToHistory(sel, hist.done); }
+
+ hist.lastSelTime = +new Date;
+ hist.lastSelOrigin = origin;
+ hist.lastSelOp = opId;
+ if (options && options.clearRedo !== false)
+ { clearSelectionEvents(hist.undone); }
+ }
+
+ function pushSelectionToHistory(sel, dest) {
+ var top = lst(dest);
+ if (!(top && top.ranges && top.equals(sel)))
+ { dest.push(sel); }
+ }
+
+ // Used to store marked span information in the history.
+ function attachLocalSpans(doc, change, from, to) {
+ var existing = change["spans_" + doc.id], n = 0;
+ doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {
+ if (line.markedSpans)
+ { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; }
+ ++n;
+ });
+ }
+
+ // When un/re-doing restores text containing marked spans, those
+ // that have been explicitly cleared should not be restored.
+ function removeClearedSpans(spans) {
+ if (!spans) { return null }
+ var out;
+ for (var i = 0; i < spans.length; ++i) {
+ if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }
+ else if (out) { out.push(spans[i]); }
+ }
+ return !out ? spans : out.length ? out : null
+ }
+
+ // Retrieve and filter the old marked spans stored in a change event.
+ function getOldSpans(doc, change) {
+ var found = change["spans_" + doc.id];
+ if (!found) { return null }
+ var nw = [];
+ for (var i = 0; i < change.text.length; ++i)
+ { nw.push(removeClearedSpans(found[i])); }
+ return nw
+ }
+
+ // Used for un/re-doing changes from the history. Combines the
+ // result of computing the existing spans with the set of spans that
+ // existed in the history (so that deleting around a span and then
+ // undoing brings back the span).
+ function mergeOldSpans(doc, change) {
+ var old = getOldSpans(doc, change);
+ var stretched = stretchSpansOverChange(doc, change);
+ if (!old) { return stretched }
+ if (!stretched) { return old }
+
+ for (var i = 0; i < old.length; ++i) {
+ var oldCur = old[i], stretchCur = stretched[i];
+ if (oldCur && stretchCur) {
+ spans: for (var j = 0; j < stretchCur.length; ++j) {
+ var span = stretchCur[j];
+ for (var k = 0; k < oldCur.length; ++k)
+ { if (oldCur[k].marker == span.marker) { continue spans } }
+ oldCur.push(span);
+ }
+ } else if (stretchCur) {
+ old[i] = stretchCur;
+ }
+ }
+ return old
+ }
+
+ // Used both to provide a JSON-safe object in .getHistory, and, when
+ // detaching a document, to split the history in two
+ function copyHistoryArray(events, newGroup, instantiateSel) {
+ var copy = [];
+ for (var i = 0; i < events.length; ++i) {
+ var event = events[i];
+ if (event.ranges) {
+ copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);
+ continue
+ }
+ var changes = event.changes, newChanges = [];
+ copy.push({changes: newChanges});
+ for (var j = 0; j < changes.length; ++j) {
+ var change = changes[j], m = (void 0);
+ newChanges.push({from: change.from, to: change.to, text: change.text});
+ if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) {
+ if (indexOf(newGroup, Number(m[1])) > -1) {
+ lst(newChanges)[prop] = change[prop];
+ delete change[prop];
+ }
+ } } }
+ }
+ }
+ return copy
+ }
+
+ // The 'scroll' parameter given to many of these indicated whether
+ // the new cursor position should be scrolled into view after
+ // modifying the selection.
+
+ // If shift is held or the extend flag is set, extends a range to
+ // include a given position (and optionally a second position).
+ // Otherwise, simply returns the range between the given positions.
+ // Used for cursor motion and such.
+ function extendRange(range, head, other, extend) {
+ if (extend) {
+ var anchor = range.anchor;
+ if (other) {
+ var posBefore = cmp(head, anchor) < 0;
+ if (posBefore != (cmp(other, anchor) < 0)) {
+ anchor = head;
+ head = other;
+ } else if (posBefore != (cmp(head, other) < 0)) {
+ head = other;
+ }
+ }
+ return new Range(anchor, head)
+ } else {
+ return new Range(other || head, head)
+ }
+ }
+
+ // Extend the primary selection range, discard the rest.
+ function extendSelection(doc, head, other, options, extend) {
+ if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }
+ setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);
+ }
+
+ // Extend all selections (pos is an array of selections with length
+ // equal the number of selections)
+ function extendSelections(doc, heads, options) {
+ var out = [];
+ var extend = doc.cm && (doc.cm.display.shift || doc.extend);
+ for (var i = 0; i < doc.sel.ranges.length; i++)
+ { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }
+ var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);
+ setSelection(doc, newSel, options);
+ }
+
+ // Updates a single range in the selection.
+ function replaceOneSelection(doc, i, range, options) {
+ var ranges = doc.sel.ranges.slice(0);
+ ranges[i] = range;
+ setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);
+ }
+
+ // Reset the selection to a single range.
+ function setSimpleSelection(doc, anchor, head, options) {
+ setSelection(doc, simpleSelection(anchor, head), options);
+ }
+
+ // Give beforeSelectionChange handlers a change to influence a
+ // selection update.
+ function filterSelectionChange(doc, sel, options) {
+ var obj = {
+ ranges: sel.ranges,
+ update: function(ranges) {
+ this.ranges = [];
+ for (var i = 0; i < ranges.length; i++)
+ { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),
+ clipPos(doc, ranges[i].head)); }
+ },
+ origin: options && options.origin
+ };
+ signal(doc, "beforeSelectionChange", doc, obj);
+ if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj); }
+ if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }
+ else { return sel }
+ }
+
+ function setSelectionReplaceHistory(doc, sel, options) {
+ var done = doc.history.done, last = lst(done);
+ if (last && last.ranges) {
+ done[done.length - 1] = sel;
+ setSelectionNoUndo(doc, sel, options);
+ } else {
+ setSelection(doc, sel, options);
+ }
+ }
+
+ // Set a new selection.
+ function setSelection(doc, sel, options) {
+ setSelectionNoUndo(doc, sel, options);
+ addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);
+ }
+
+ function setSelectionNoUndo(doc, sel, options) {
+ if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange"))
+ { sel = filterSelectionChange(doc, sel, options); }
+
+ var bias = options && options.bias ||
+ (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);
+ setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));
+
+ if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption("readOnly") != "nocursor")
+ { ensureCursorVisible(doc.cm); }
+ }
+
+ function setSelectionInner(doc, sel) {
+ if (sel.equals(doc.sel)) { return }
+
+ doc.sel = sel;
+
+ if (doc.cm) {
+ doc.cm.curOp.updateInput = 1;
+ doc.cm.curOp.selectionChanged = true;
+ signalCursorActivity(doc.cm);
+ }
+ signalLater(doc, "cursorActivity", doc);
+ }
+
+ // Verify that the selection does not partially select any atomic
+ // marked ranges.
+ function reCheckSelection(doc) {
+ setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));
+ }
+
+ // Return a selection that does not partially select any atomic
+ // ranges.
+ function skipAtomicInSelection(doc, sel, bias, mayClear) {
+ var out;
+ for (var i = 0; i < sel.ranges.length; i++) {
+ var range = sel.ranges[i];
+ var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];
+ var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);
+ var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);
+ if (out || newAnchor != range.anchor || newHead != range.head) {
+ if (!out) { out = sel.ranges.slice(0, i); }
+ out[i] = new Range(newAnchor, newHead);
+ }
+ }
+ return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel
+ }
+
+ function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {
+ var line = getLine(doc, pos.line);
+ if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {
+ var sp = line.markedSpans[i], m = sp.marker;
+
+ // Determine if we should prevent the cursor being placed to the left/right of an atomic marker
+ // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it
+ // is with selectLeft/Right
+ var preventCursorLeft = ("selectLeft" in m) ? !m.selectLeft : m.inclusiveLeft;
+ var preventCursorRight = ("selectRight" in m) ? !m.selectRight : m.inclusiveRight;
+
+ if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&
+ (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {
+ if (mayClear) {
+ signal(m, "beforeCursorEnter");
+ if (m.explicitlyCleared) {
+ if (!line.markedSpans) { break }
+ else {--i; continue}
+ }
+ }
+ if (!m.atomic) { continue }
+
+ if (oldPos) {
+ var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);
+ if (dir < 0 ? preventCursorRight : preventCursorLeft)
+ { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }
+ if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))
+ { return skipAtomicInner(doc, near, pos, dir, mayClear) }
+ }
+
+ var far = m.find(dir < 0 ? -1 : 1);
+ if (dir < 0 ? preventCursorLeft : preventCursorRight)
+ { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }
+ return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null
+ }
+ } }
+ return pos
+ }
+
+ // Ensure a given position is not inside an atomic range.
+ function skipAtomic(doc, pos, oldPos, bias, mayClear) {
+ var dir = bias || 1;
+ var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||
+ (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||
+ skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||
+ (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));
+ if (!found) {
+ doc.cantEdit = true;
+ return Pos(doc.first, 0)
+ }
+ return found
+ }
+
+ function movePos(doc, pos, dir, line) {
+ if (dir < 0 && pos.ch == 0) {
+ if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }
+ else { return null }
+ } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {
+ if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }
+ else { return null }
+ } else {
+ return new Pos(pos.line, pos.ch + dir)
+ }
+ }
+
+ function selectAll(cm) {
+ cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);
+ }
+
+ // UPDATING
+
+ // Allow "beforeChange" event handlers to influence a change
+ function filterChange(doc, change, update) {
+ var obj = {
+ canceled: false,
+ from: change.from,
+ to: change.to,
+ text: change.text,
+ origin: change.origin,
+ cancel: function () { return obj.canceled = true; }
+ };
+ if (update) { obj.update = function (from, to, text, origin) {
+ if (from) { obj.from = clipPos(doc, from); }
+ if (to) { obj.to = clipPos(doc, to); }
+ if (text) { obj.text = text; }
+ if (origin !== undefined) { obj.origin = origin; }
+ }; }
+ signal(doc, "beforeChange", doc, obj);
+ if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj); }
+
+ if (obj.canceled) {
+ if (doc.cm) { doc.cm.curOp.updateInput = 2; }
+ return null
+ }
+ return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}
+ }
+
+ // Apply a change to a document, and add it to the document's
+ // history, and propagating it to all linked documents.
+ function makeChange(doc, change, ignoreReadOnly) {
+ if (doc.cm) {
+ if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }
+ if (doc.cm.state.suppressEdits) { return }
+ }
+
+ if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) {
+ change = filterChange(doc, change, true);
+ if (!change) { return }
+ }
+
+ // Possibly split or suppress the update based on the presence
+ // of read-only spans in its range.
+ var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);
+ if (split) {
+ for (var i = split.length - 1; i >= 0; --i)
+ { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text, origin: change.origin}); }
+ } else {
+ makeChangeInner(doc, change);
+ }
+ }
+
+ function makeChangeInner(doc, change) {
+ if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return }
+ var selAfter = computeSelAfterChange(doc, change);
+ addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);
+
+ makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));
+ var rebased = [];
+
+ linkedDocs(doc, function (doc, sharedHist) {
+ if (!sharedHist && indexOf(rebased, doc.history) == -1) {
+ rebaseHist(doc.history, change);
+ rebased.push(doc.history);
+ }
+ makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));
+ });
+ }
+
+ // Revert a change stored in a document's history.
+ function makeChangeFromHistory(doc, type, allowSelectionOnly) {
+ var suppress = doc.cm && doc.cm.state.suppressEdits;
+ if (suppress && !allowSelectionOnly) { return }
+
+ var hist = doc.history, event, selAfter = doc.sel;
+ var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done;
+
+ // Verify that there is a useable event (so that ctrl-z won't
+ // needlessly clear selection events)
+ var i = 0;
+ for (; i < source.length; i++) {
+ event = source[i];
+ if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)
+ { break }
+ }
+ if (i == source.length) { return }
+ hist.lastOrigin = hist.lastSelOrigin = null;
+
+ for (;;) {
+ event = source.pop();
+ if (event.ranges) {
+ pushSelectionToHistory(event, dest);
+ if (allowSelectionOnly && !event.equals(doc.sel)) {
+ setSelection(doc, event, {clearRedo: false});
+ return
+ }
+ selAfter = event;
+ } else if (suppress) {
+ source.push(event);
+ return
+ } else { break }
+ }
+
+ // Build up a reverse change object to add to the opposite history
+ // stack (redo when undoing, and vice versa).
+ var antiChanges = [];
+ pushSelectionToHistory(selAfter, dest);
+ dest.push({changes: antiChanges, generation: hist.generation});
+ hist.generation = event.generation || ++hist.maxGeneration;
+
+ var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange");
+
+ var loop = function ( i ) {
+ var change = event.changes[i];
+ change.origin = type;
+ if (filter && !filterChange(doc, change, false)) {
+ source.length = 0;
+ return {}
+ }
+
+ antiChanges.push(historyChangeFromChange(doc, change));
+
+ var after = i ? computeSelAfterChange(doc, change) : lst(source);
+ makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));
+ if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }
+ var rebased = [];
+
+ // Propagate to the linked documents
+ linkedDocs(doc, function (doc, sharedHist) {
+ if (!sharedHist && indexOf(rebased, doc.history) == -1) {
+ rebaseHist(doc.history, change);
+ rebased.push(doc.history);
+ }
+ makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));
+ });
+ };
+
+ for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {
+ var returned = loop( i$1 );
+
+ if ( returned ) return returned.v;
+ }
+ }
+
+ // Sub-views need their line numbers shifted when text is added
+ // above or below them in the parent document.
+ function shiftDoc(doc, distance) {
+ if (distance == 0) { return }
+ doc.first += distance;
+ doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(
+ Pos(range.anchor.line + distance, range.anchor.ch),
+ Pos(range.head.line + distance, range.head.ch)
+ ); }), doc.sel.primIndex);
+ if (doc.cm) {
+ regChange(doc.cm, doc.first, doc.first - distance, distance);
+ for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)
+ { regLineChange(doc.cm, l, "gutter"); }
+ }
+ }
+
+ // More lower-level change function, handling only a single document
+ // (not linked ones).
+ function makeChangeSingleDoc(doc, change, selAfter, spans) {
+ if (doc.cm && !doc.cm.curOp)
+ { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }
+
+ if (change.to.line < doc.first) {
+ shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));
+ return
+ }
+ if (change.from.line > doc.lastLine()) { return }
+
+ // Clip the change to the size of this doc
+ if (change.from.line < doc.first) {
+ var shift = change.text.length - 1 - (doc.first - change.from.line);
+ shiftDoc(doc, shift);
+ change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),
+ text: [lst(change.text)], origin: change.origin};
+ }
+ var last = doc.lastLine();
+ if (change.to.line > last) {
+ change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),
+ text: [change.text[0]], origin: change.origin};
+ }
+
+ change.removed = getBetween(doc, change.from, change.to);
+
+ if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }
+ if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }
+ else { updateDoc(doc, change, spans); }
+ setSelectionNoUndo(doc, selAfter, sel_dontScroll);
+
+ if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))
+ { doc.cantEdit = false; }
+ }
+
+ // Handle the interaction of a change to a document with the editor
+ // that this document is part of.
+ function makeChangeSingleDocInEditor(cm, change, spans) {
+ var doc = cm.doc, display = cm.display, from = change.from, to = change.to;
+
+ var recomputeMaxLength = false, checkWidthStart = from.line;
+ if (!cm.options.lineWrapping) {
+ checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));
+ doc.iter(checkWidthStart, to.line + 1, function (line) {
+ if (line == display.maxLine) {
+ recomputeMaxLength = true;
+ return true
+ }
+ });
+ }
+
+ if (doc.sel.contains(change.from, change.to) > -1)
+ { signalCursorActivity(cm); }
+
+ updateDoc(doc, change, spans, estimateHeight(cm));
+
+ if (!cm.options.lineWrapping) {
+ doc.iter(checkWidthStart, from.line + change.text.length, function (line) {
+ var len = lineLength(line);
+ if (len > display.maxLineLength) {
+ display.maxLine = line;
+ display.maxLineLength = len;
+ display.maxLineChanged = true;
+ recomputeMaxLength = false;
+ }
+ });
+ if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }
+ }
+
+ retreatFrontier(doc, from.line);
+ startWorker(cm, 400);
+
+ var lendiff = change.text.length - (to.line - from.line) - 1;
+ // Remember that these lines changed, for updating the display
+ if (change.full)
+ { regChange(cm); }
+ else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))
+ { regLineChange(cm, from.line, "text"); }
+ else
+ { regChange(cm, from.line, to.line + 1, lendiff); }
+
+ var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change");
+ if (changeHandler || changesHandler) {
+ var obj = {
+ from: from, to: to,
+ text: change.text,
+ removed: change.removed,
+ origin: change.origin
+ };
+ if (changeHandler) { signalLater(cm, "change", cm, obj); }
+ if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }
+ }
+ cm.display.selForContextMenu = null;
+ }
+
+ function replaceRange(doc, code, from, to, origin) {
+ var assign;
+
+ if (!to) { to = from; }
+ if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }
+ if (typeof code == "string") { code = doc.splitLines(code); }
+ makeChange(doc, {from: from, to: to, text: code, origin: origin});
+ }
+
+ // Rebasing/resetting history to deal with externally-sourced changes
+
+ function rebaseHistSelSingle(pos, from, to, diff) {
+ if (to < pos.line) {
+ pos.line += diff;
+ } else if (from < pos.line) {
+ pos.line = from;
+ pos.ch = 0;
+ }
+ }
+
+ // Tries to rebase an array of history events given a change in the
+ // document. If the change touches the same lines as the event, the
+ // event, and everything 'behind' it, is discarded. If the change is
+ // before the event, the event's positions are updated. Uses a
+ // copy-on-write scheme for the positions, to avoid having to
+ // reallocate them all on every rebase, but also avoid problems with
+ // shared position objects being unsafely updated.
+ function rebaseHistArray(array, from, to, diff) {
+ for (var i = 0; i < array.length; ++i) {
+ var sub = array[i], ok = true;
+ if (sub.ranges) {
+ if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }
+ for (var j = 0; j < sub.ranges.length; j++) {
+ rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);
+ rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);
+ }
+ continue
+ }
+ for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {
+ var cur = sub.changes[j$1];
+ if (to < cur.from.line) {
+ cur.from = Pos(cur.from.line + diff, cur.from.ch);
+ cur.to = Pos(cur.to.line + diff, cur.to.ch);
+ } else if (from <= cur.to.line) {
+ ok = false;
+ break
+ }
+ }
+ if (!ok) {
+ array.splice(0, i + 1);
+ i = 0;
+ }
+ }
+ }
+
+ function rebaseHist(hist, change) {
+ var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;
+ rebaseHistArray(hist.done, from, to, diff);
+ rebaseHistArray(hist.undone, from, to, diff);
+ }
+
+ // Utility for applying a change to a line by handle or number,
+ // returning the number and optionally registering the line as
+ // changed.
+ function changeLine(doc, handle, changeType, op) {
+ var no = handle, line = handle;
+ if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)); }
+ else { no = lineNo(handle); }
+ if (no == null) { return null }
+ if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }
+ return line
+ }
+
+ // The document is represented as a BTree consisting of leaves, with
+ // chunk of lines in them, and branches, with up to ten leaves or
+ // other branch nodes below them. The top node is always a branch
+ // node, and is the document object itself (meaning it has
+ // additional methods and properties).
+ //
+ // All nodes have parent links. The tree is used both to go from
+ // line numbers to line objects, and to go from objects to numbers.
+ // It also indexes by height, and is used to convert between height
+ // and line object, and to find the total height of the document.
+ //
+ // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html
+
+ function LeafChunk(lines) {
+ this.lines = lines;
+ this.parent = null;
+ var height = 0;
+ for (var i = 0; i < lines.length; ++i) {
+ lines[i].parent = this;
+ height += lines[i].height;
+ }
+ this.height = height;
+ }
+
+ LeafChunk.prototype = {
+ chunkSize: function() { return this.lines.length },
+
+ // Remove the n lines at offset 'at'.
+ removeInner: function(at, n) {
+ for (var i = at, e = at + n; i < e; ++i) {
+ var line = this.lines[i];
+ this.height -= line.height;
+ cleanUpLine(line);
+ signalLater(line, "delete");
+ }
+ this.lines.splice(at, n);
+ },
+
+ // Helper used to collapse a small branch into a single leaf.
+ collapse: function(lines) {
+ lines.push.apply(lines, this.lines);
+ },
+
+ // Insert the given array of lines at offset 'at', count them as
+ // having the given height.
+ insertInner: function(at, lines, height) {
+ this.height += height;
+ this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));
+ for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; }
+ },
+
+ // Used to iterate over a part of the tree.
+ iterN: function(at, n, op) {
+ for (var e = at + n; at < e; ++at)
+ { if (op(this.lines[at])) { return true } }
+ }
+ };
+
+ function BranchChunk(children) {
+ this.children = children;
+ var size = 0, height = 0;
+ for (var i = 0; i < children.length; ++i) {
+ var ch = children[i];
+ size += ch.chunkSize(); height += ch.height;
+ ch.parent = this;
+ }
+ this.size = size;
+ this.height = height;
+ this.parent = null;
+ }
+
+ BranchChunk.prototype = {
+ chunkSize: function() { return this.size },
+
+ removeInner: function(at, n) {
+ this.size -= n;
+ for (var i = 0; i < this.children.length; ++i) {
+ var child = this.children[i], sz = child.chunkSize();
+ if (at < sz) {
+ var rm = Math.min(n, sz - at), oldHeight = child.height;
+ child.removeInner(at, rm);
+ this.height -= oldHeight - child.height;
+ if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }
+ if ((n -= rm) == 0) { break }
+ at = 0;
+ } else { at -= sz; }
+ }
+ // If the result is smaller than 25 lines, ensure that it is a
+ // single leaf node.
+ if (this.size - n < 25 &&
+ (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {
+ var lines = [];
+ this.collapse(lines);
+ this.children = [new LeafChunk(lines)];
+ this.children[0].parent = this;
+ }
+ },
+
+ collapse: function(lines) {
+ for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); }
+ },
+
+ insertInner: function(at, lines, height) {
+ this.size += lines.length;
+ this.height += height;
+ for (var i = 0; i < this.children.length; ++i) {
+ var child = this.children[i], sz = child.chunkSize();
+ if (at <= sz) {
+ child.insertInner(at, lines, height);
+ if (child.lines && child.lines.length > 50) {
+ // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.
+ // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.
+ var remaining = child.lines.length % 25 + 25;
+ for (var pos = remaining; pos < child.lines.length;) {
+ var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));
+ child.height -= leaf.height;
+ this.children.splice(++i, 0, leaf);
+ leaf.parent = this;
+ }
+ child.lines = child.lines.slice(0, remaining);
+ this.maybeSpill();
+ }
+ break
+ }
+ at -= sz;
+ }
+ },
+
+ // When a node has grown, check whether it should be split.
+ maybeSpill: function() {
+ if (this.children.length <= 10) { return }
+ var me = this;
+ do {
+ var spilled = me.children.splice(me.children.length - 5, 5);
+ var sibling = new BranchChunk(spilled);
+ if (!me.parent) { // Become the parent node
+ var copy = new BranchChunk(me.children);
+ copy.parent = me;
+ me.children = [copy, sibling];
+ me = copy;
+ } else {
+ me.size -= sibling.size;
+ me.height -= sibling.height;
+ var myIndex = indexOf(me.parent.children, me);
+ me.parent.children.splice(myIndex + 1, 0, sibling);
+ }
+ sibling.parent = me.parent;
+ } while (me.children.length > 10)
+ me.parent.maybeSpill();
+ },
+
+ iterN: function(at, n, op) {
+ for (var i = 0; i < this.children.length; ++i) {
+ var child = this.children[i], sz = child.chunkSize();
+ if (at < sz) {
+ var used = Math.min(n, sz - at);
+ if (child.iterN(at, used, op)) { return true }
+ if ((n -= used) == 0) { break }
+ at = 0;
+ } else { at -= sz; }
+ }
+ }
+ };
+
+ // Line widgets are block elements displayed above or below a line.
+
+ var LineWidget = function(doc, node, options) {
+ if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))
+ { this[opt] = options[opt]; } } }
+ this.doc = doc;
+ this.node = node;
+ };
+
+ LineWidget.prototype.clear = function () {
+ var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);
+ if (no == null || !ws) { return }
+ for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } }
+ if (!ws.length) { line.widgets = null; }
+ var height = widgetHeight(this);
+ updateLineHeight(line, Math.max(0, line.height - height));
+ if (cm) {
+ runInOp(cm, function () {
+ adjustScrollWhenAboveVisible(cm, line, -height);
+ regLineChange(cm, no, "widget");
+ });
+ signalLater(cm, "lineWidgetCleared", cm, this, no);
+ }
+ };
+
+ LineWidget.prototype.changed = function () {
+ var this$1 = this;
+
+ var oldH = this.height, cm = this.doc.cm, line = this.line;
+ this.height = null;
+ var diff = widgetHeight(this) - oldH;
+ if (!diff) { return }
+ if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }
+ if (cm) {
+ runInOp(cm, function () {
+ cm.curOp.forceUpdate = true;
+ adjustScrollWhenAboveVisible(cm, line, diff);
+ signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line));
+ });
+ }
+ };
+ eventMixin(LineWidget);
+
+ function adjustScrollWhenAboveVisible(cm, line, diff) {
+ if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))
+ { addToScrollTop(cm, diff); }
+ }
+
+ function addLineWidget(doc, handle, node, options) {
+ var widget = new LineWidget(doc, node, options);
+ var cm = doc.cm;
+ if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }
+ changeLine(doc, handle, "widget", function (line) {
+ var widgets = line.widgets || (line.widgets = []);
+ if (widget.insertAt == null) { widgets.push(widget); }
+ else { widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); }
+ widget.line = line;
+ if (cm && !lineIsHidden(doc, line)) {
+ var aboveVisible = heightAtLine(line) < doc.scrollTop;
+ updateLineHeight(line, line.height + widgetHeight(widget));
+ if (aboveVisible) { addToScrollTop(cm, widget.height); }
+ cm.curOp.forceUpdate = true;
+ }
+ return true
+ });
+ if (cm) { signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); }
+ return widget
+ }
+
+ // TEXTMARKERS
+
+ // Created with markText and setBookmark methods. A TextMarker is a
+ // handle that can be used to clear or find a marked position in the
+ // document. Line objects hold arrays (markedSpans) containing
+ // {from, to, marker} object pointing to such marker objects, and
+ // indicating that such a marker is present on that line. Multiple
+ // lines may point to the same marker when it spans across lines.
+ // The spans will have null for their from/to properties when the
+ // marker continues beyond the start/end of the line. Markers have
+ // links back to the lines they currently touch.
+
+ // Collapsed markers have unique ids, in order to be able to order
+ // them, which is needed for uniquely determining an outer marker
+ // when they overlap (they may nest, but not partially overlap).
+ var nextMarkerId = 0;
+
+ var TextMarker = function(doc, type) {
+ this.lines = [];
+ this.type = type;
+ this.doc = doc;
+ this.id = ++nextMarkerId;
+ };
+
+ // Clear the marker.
+ TextMarker.prototype.clear = function () {
+ if (this.explicitlyCleared) { return }
+ var cm = this.doc.cm, withOp = cm && !cm.curOp;
+ if (withOp) { startOperation(cm); }
+ if (hasHandler(this, "clear")) {
+ var found = this.find();
+ if (found) { signalLater(this, "clear", found.from, found.to); }
+ }
+ var min = null, max = null;
+ for (var i = 0; i < this.lines.length; ++i) {
+ var line = this.lines[i];
+ var span = getMarkedSpanFor(line.markedSpans, this);
+ if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), "text"); }
+ else if (cm) {
+ if (span.to != null) { max = lineNo(line); }
+ if (span.from != null) { min = lineNo(line); }
+ }
+ line.markedSpans = removeMarkedSpan(line.markedSpans, span);
+ if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)
+ { updateLineHeight(line, textHeight(cm.display)); }
+ }
+ if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {
+ var visual = visualLine(this.lines[i$1]), len = lineLength(visual);
+ if (len > cm.display.maxLineLength) {
+ cm.display.maxLine = visual;
+ cm.display.maxLineLength = len;
+ cm.display.maxLineChanged = true;
+ }
+ } }
+
+ if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }
+ this.lines.length = 0;
+ this.explicitlyCleared = true;
+ if (this.atomic && this.doc.cantEdit) {
+ this.doc.cantEdit = false;
+ if (cm) { reCheckSelection(cm.doc); }
+ }
+ if (cm) { signalLater(cm, "markerCleared", cm, this, min, max); }
+ if (withOp) { endOperation(cm); }
+ if (this.parent) { this.parent.clear(); }
+ };
+
+ // Find the position of the marker in the document. Returns a {from,
+ // to} object by default. Side can be passed to get a specific side
+ // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the
+ // Pos objects returned contain a line object, rather than a line
+ // number (used to prevent looking up the same line twice).
+ TextMarker.prototype.find = function (side, lineObj) {
+ if (side == null && this.type == "bookmark") { side = 1; }
+ var from, to;
+ for (var i = 0; i < this.lines.length; ++i) {
+ var line = this.lines[i];
+ var span = getMarkedSpanFor(line.markedSpans, this);
+ if (span.from != null) {
+ from = Pos(lineObj ? line : lineNo(line), span.from);
+ if (side == -1) { return from }
+ }
+ if (span.to != null) {
+ to = Pos(lineObj ? line : lineNo(line), span.to);
+ if (side == 1) { return to }
+ }
+ }
+ return from && {from: from, to: to}
+ };
+
+ // Signals that the marker's widget changed, and surrounding layout
+ // should be recomputed.
+ TextMarker.prototype.changed = function () {
+ var this$1 = this;
+
+ var pos = this.find(-1, true), widget = this, cm = this.doc.cm;
+ if (!pos || !cm) { return }
+ runInOp(cm, function () {
+ var line = pos.line, lineN = lineNo(pos.line);
+ var view = findViewForLine(cm, lineN);
+ if (view) {
+ clearLineMeasurementCacheFor(view);
+ cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;
+ }
+ cm.curOp.updateMaxLine = true;
+ if (!lineIsHidden(widget.doc, line) && widget.height != null) {
+ var oldHeight = widget.height;
+ widget.height = null;
+ var dHeight = widgetHeight(widget) - oldHeight;
+ if (dHeight)
+ { updateLineHeight(line, line.height + dHeight); }
+ }
+ signalLater(cm, "markerChanged", cm, this$1);
+ });
+ };
+
+ TextMarker.prototype.attachLine = function (line) {
+ if (!this.lines.length && this.doc.cm) {
+ var op = this.doc.cm.curOp;
+ if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)
+ { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }
+ }
+ this.lines.push(line);
+ };
+
+ TextMarker.prototype.detachLine = function (line) {
+ this.lines.splice(indexOf(this.lines, line), 1);
+ if (!this.lines.length && this.doc.cm) {
+ var op = this.doc.cm.curOp
+ ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);
+ }
+ };
+ eventMixin(TextMarker);
+
+ // Create a marker, wire it up to the right lines, and
+ function markText(doc, from, to, options, type) {
+ // Shared markers (across linked documents) are handled separately
+ // (markTextShared will call out to this again, once per
+ // document).
+ if (options && options.shared) { return markTextShared(doc, from, to, options, type) }
+ // Ensure we are in an operation.
+ if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }
+
+ var marker = new TextMarker(doc, type), diff = cmp(from, to);
+ if (options) { copyObj(options, marker, false); }
+ // Don't connect empty markers unless clearWhenEmpty is false
+ if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)
+ { return marker }
+ if (marker.replacedWith) {
+ // Showing up as a widget implies collapsed (widget replaces text)
+ marker.collapsed = true;
+ marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget");
+ if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true"); }
+ if (options.insertLeft) { marker.widgetNode.insertLeft = true; }
+ }
+ if (marker.collapsed) {
+ if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||
+ from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))
+ { throw new Error("Inserting collapsed marker partially overlapping an existing one") }
+ seeCollapsedSpans();
+ }
+
+ if (marker.addToHistory)
+ { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); }
+
+ var curLine = from.line, cm = doc.cm, updateMaxLine;
+ doc.iter(curLine, to.line + 1, function (line) {
+ if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)
+ { updateMaxLine = true; }
+ if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }
+ addMarkedSpan(line, new MarkedSpan(marker,
+ curLine == from.line ? from.ch : null,
+ curLine == to.line ? to.ch : null));
+ ++curLine;
+ });
+ // lineIsHidden depends on the presence of the spans, so needs a second pass
+ if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {
+ if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }
+ }); }
+
+ if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }); }
+
+ if (marker.readOnly) {
+ seeReadOnlySpans();
+ if (doc.history.done.length || doc.history.undone.length)
+ { doc.clearHistory(); }
+ }
+ if (marker.collapsed) {
+ marker.id = ++nextMarkerId;
+ marker.atomic = true;
+ }
+ if (cm) {
+ // Sync editor state
+ if (updateMaxLine) { cm.curOp.updateMaxLine = true; }
+ if (marker.collapsed)
+ { regChange(cm, from.line, to.line + 1); }
+ else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||
+ marker.attributes || marker.title)
+ { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text"); } }
+ if (marker.atomic) { reCheckSelection(cm.doc); }
+ signalLater(cm, "markerAdded", cm, marker);
+ }
+ return marker
+ }
+
+ // SHARED TEXTMARKERS
+
+ // A shared marker spans multiple linked documents. It is
+ // implemented as a meta-marker-object controlling multiple normal
+ // markers.
+ var SharedTextMarker = function(markers, primary) {
+ this.markers = markers;
+ this.primary = primary;
+ for (var i = 0; i < markers.length; ++i)
+ { markers[i].parent = this; }
+ };
+
+ SharedTextMarker.prototype.clear = function () {
+ if (this.explicitlyCleared) { return }
+ this.explicitlyCleared = true;
+ for (var i = 0; i < this.markers.length; ++i)
+ { this.markers[i].clear(); }
+ signalLater(this, "clear");
+ };
+
+ SharedTextMarker.prototype.find = function (side, lineObj) {
+ return this.primary.find(side, lineObj)
+ };
+ eventMixin(SharedTextMarker);
+
+ function markTextShared(doc, from, to, options, type) {
+ options = copyObj(options);
+ options.shared = false;
+ var markers = [markText(doc, from, to, options, type)], primary = markers[0];
+ var widget = options.widgetNode;
+ linkedDocs(doc, function (doc) {
+ if (widget) { options.widgetNode = widget.cloneNode(true); }
+ markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));
+ for (var i = 0; i < doc.linked.length; ++i)
+ { if (doc.linked[i].isParent) { return } }
+ primary = lst(markers);
+ });
+ return new SharedTextMarker(markers, primary)
+ }
+
+ function findSharedMarkers(doc) {
+ return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })
+ }
+
+ function copySharedMarkers(doc, markers) {
+ for (var i = 0; i < markers.length; i++) {
+ var marker = markers[i], pos = marker.find();
+ var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);
+ if (cmp(mFrom, mTo)) {
+ var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);
+ marker.markers.push(subMark);
+ subMark.parent = marker;
+ }
+ }
+ }
+
+ function detachSharedMarkers(markers) {
+ var loop = function ( i ) {
+ var marker = markers[i], linked = [marker.primary.doc];
+ linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });
+ for (var j = 0; j < marker.markers.length; j++) {
+ var subMarker = marker.markers[j];
+ if (indexOf(linked, subMarker.doc) == -1) {
+ subMarker.parent = null;
+ marker.markers.splice(j--, 1);
+ }
+ }
+ };
+
+ for (var i = 0; i < markers.length; i++) loop( i );
+ }
+
+ var nextDocId = 0;
+ var Doc = function(text, mode, firstLine, lineSep, direction) {
+ if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }
+ if (firstLine == null) { firstLine = 0; }
+
+ BranchChunk.call(this, [new LeafChunk([new Line("", null)])]);
+ this.first = firstLine;
+ this.scrollTop = this.scrollLeft = 0;
+ this.cantEdit = false;
+ this.cleanGeneration = 1;
+ this.modeFrontier = this.highlightFrontier = firstLine;
+ var start = Pos(firstLine, 0);
+ this.sel = simpleSelection(start);
+ this.history = new History(null);
+ this.id = ++nextDocId;
+ this.modeOption = mode;
+ this.lineSep = lineSep;
+ this.direction = (direction == "rtl") ? "rtl" : "ltr";
+ this.extend = false;
+
+ if (typeof text == "string") { text = this.splitLines(text); }
+ updateDoc(this, {from: start, to: start, text: text});
+ setSelection(this, simpleSelection(start), sel_dontScroll);
+ };
+
+ Doc.prototype = createObj(BranchChunk.prototype, {
+ constructor: Doc,
+ // Iterate over the document. Supports two forms -- with only one
+ // argument, it calls that for each line in the document. With
+ // three, it iterates over the range given by the first two (with
+ // the second being non-inclusive).
+ iter: function(from, to, op) {
+ if (op) { this.iterN(from - this.first, to - from, op); }
+ else { this.iterN(this.first, this.first + this.size, from); }
+ },
+
+ // Non-public interface for adding and removing lines.
+ insert: function(at, lines) {
+ var height = 0;
+ for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }
+ this.insertInner(at - this.first, lines, height);
+ },
+ remove: function(at, n) { this.removeInner(at - this.first, n); },
+
+ // From here, the methods are part of the public interface. Most
+ // are also available from CodeMirror (editor) instances.
+
+ getValue: function(lineSep) {
+ var lines = getLines(this, this.first, this.first + this.size);
+ if (lineSep === false) { return lines }
+ return lines.join(lineSep || this.lineSeparator())
+ },
+ setValue: docMethodOp(function(code) {
+ var top = Pos(this.first, 0), last = this.first + this.size - 1;
+ makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),
+ text: this.splitLines(code), origin: "setValue", full: true}, true);
+ if (this.cm) { scrollToCoords(this.cm, 0, 0); }
+ setSelection(this, simpleSelection(top), sel_dontScroll);
+ }),
+ replaceRange: function(code, from, to, origin) {
+ from = clipPos(this, from);
+ to = to ? clipPos(this, to) : from;
+ replaceRange(this, code, from, to, origin);
+ },
+ getRange: function(from, to, lineSep) {
+ var lines = getBetween(this, clipPos(this, from), clipPos(this, to));
+ if (lineSep === false) { return lines }
+ return lines.join(lineSep || this.lineSeparator())
+ },
+
+ getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},
+
+ getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},
+ getLineNumber: function(line) {return lineNo(line)},
+
+ getLineHandleVisualStart: function(line) {
+ if (typeof line == "number") { line = getLine(this, line); }
+ return visualLine(line)
+ },
+
+ lineCount: function() {return this.size},
+ firstLine: function() {return this.first},
+ lastLine: function() {return this.first + this.size - 1},
+
+ clipPos: function(pos) {return clipPos(this, pos)},
+
+ getCursor: function(start) {
+ var range = this.sel.primary(), pos;
+ if (start == null || start == "head") { pos = range.head; }
+ else if (start == "anchor") { pos = range.anchor; }
+ else if (start == "end" || start == "to" || start === false) { pos = range.to(); }
+ else { pos = range.from(); }
+ return pos
+ },
+ listSelections: function() { return this.sel.ranges },
+ somethingSelected: function() {return this.sel.somethingSelected()},
+
+ setCursor: docMethodOp(function(line, ch, options) {
+ setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options);
+ }),
+ setSelection: docMethodOp(function(anchor, head, options) {
+ setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);
+ }),
+ extendSelection: docMethodOp(function(head, other, options) {
+ extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);
+ }),
+ extendSelections: docMethodOp(function(heads, options) {
+ extendSelections(this, clipPosArray(this, heads), options);
+ }),
+ extendSelectionsBy: docMethodOp(function(f, options) {
+ var heads = map(this.sel.ranges, f);
+ extendSelections(this, clipPosArray(this, heads), options);
+ }),
+ setSelections: docMethodOp(function(ranges, primary, options) {
+ if (!ranges.length) { return }
+ var out = [];
+ for (var i = 0; i < ranges.length; i++)
+ { out[i] = new Range(clipPos(this, ranges[i].anchor),
+ clipPos(this, ranges[i].head)); }
+ if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }
+ setSelection(this, normalizeSelection(this.cm, out, primary), options);
+ }),
+ addSelection: docMethodOp(function(anchor, head, options) {
+ var ranges = this.sel.ranges.slice(0);
+ ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));
+ setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);
+ }),
+
+ getSelection: function(lineSep) {
+ var ranges = this.sel.ranges, lines;
+ for (var i = 0; i < ranges.length; i++) {
+ var sel = getBetween(this, ranges[i].from(), ranges[i].to());
+ lines = lines ? lines.concat(sel) : sel;
+ }
+ if (lineSep === false) { return lines }
+ else { return lines.join(lineSep || this.lineSeparator()) }
+ },
+ getSelections: function(lineSep) {
+ var parts = [], ranges = this.sel.ranges;
+ for (var i = 0; i < ranges.length; i++) {
+ var sel = getBetween(this, ranges[i].from(), ranges[i].to());
+ if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); }
+ parts[i] = sel;
+ }
+ return parts
+ },
+ replaceSelection: function(code, collapse, origin) {
+ var dup = [];
+ for (var i = 0; i < this.sel.ranges.length; i++)
+ { dup[i] = code; }
+ this.replaceSelections(dup, collapse, origin || "+input");
+ },
+ replaceSelections: docMethodOp(function(code, collapse, origin) {
+ var changes = [], sel = this.sel;
+ for (var i = 0; i < sel.ranges.length; i++) {
+ var range = sel.ranges[i];
+ changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin};
+ }
+ var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse);
+ for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)
+ { makeChange(this, changes[i$1]); }
+ if (newSel) { setSelectionReplaceHistory(this, newSel); }
+ else if (this.cm) { ensureCursorVisible(this.cm); }
+ }),
+ undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}),
+ redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}),
+ undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}),
+ redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}),
+
+ setExtending: function(val) {this.extend = val;},
+ getExtending: function() {return this.extend},
+
+ historySize: function() {
+ var hist = this.history, done = 0, undone = 0;
+ for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }
+ for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }
+ return {undo: done, redo: undone}
+ },
+ clearHistory: function() {
+ var this$1 = this;
+
+ this.history = new History(this.history.maxGeneration);
+ linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true);
+ },
+
+ markClean: function() {
+ this.cleanGeneration = this.changeGeneration(true);
+ },
+ changeGeneration: function(forceSplit) {
+ if (forceSplit)
+ { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }
+ return this.history.generation
+ },
+ isClean: function (gen) {
+ return this.history.generation == (gen || this.cleanGeneration)
+ },
+
+ getHistory: function() {
+ return {done: copyHistoryArray(this.history.done),
+ undone: copyHistoryArray(this.history.undone)}
+ },
+ setHistory: function(histData) {
+ var hist = this.history = new History(this.history.maxGeneration);
+ hist.done = copyHistoryArray(histData.done.slice(0), null, true);
+ hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);
+ },
+
+ setGutterMarker: docMethodOp(function(line, gutterID, value) {
+ return changeLine(this, line, "gutter", function (line) {
+ var markers = line.gutterMarkers || (line.gutterMarkers = {});
+ markers[gutterID] = value;
+ if (!value && isEmpty(markers)) { line.gutterMarkers = null; }
+ return true
+ })
+ }),
+
+ clearGutter: docMethodOp(function(gutterID) {
+ var this$1 = this;
+
+ this.iter(function (line) {
+ if (line.gutterMarkers && line.gutterMarkers[gutterID]) {
+ changeLine(this$1, line, "gutter", function () {
+ line.gutterMarkers[gutterID] = null;
+ if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }
+ return true
+ });
+ }
+ });
+ }),
+
+ lineInfo: function(line) {
+ var n;
+ if (typeof line == "number") {
+ if (!isLine(this, line)) { return null }
+ n = line;
+ line = getLine(this, line);
+ if (!line) { return null }
+ } else {
+ n = lineNo(line);
+ if (n == null) { return null }
+ }
+ return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,
+ textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,
+ widgets: line.widgets}
+ },
+
+ addLineClass: docMethodOp(function(handle, where, cls) {
+ return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
+ var prop = where == "text" ? "textClass"
+ : where == "background" ? "bgClass"
+ : where == "gutter" ? "gutterClass" : "wrapClass";
+ if (!line[prop]) { line[prop] = cls; }
+ else if (classTest(cls).test(line[prop])) { return false }
+ else { line[prop] += " " + cls; }
+ return true
+ })
+ }),
+ removeLineClass: docMethodOp(function(handle, where, cls) {
+ return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
+ var prop = where == "text" ? "textClass"
+ : where == "background" ? "bgClass"
+ : where == "gutter" ? "gutterClass" : "wrapClass";
+ var cur = line[prop];
+ if (!cur) { return false }
+ else if (cls == null) { line[prop] = null; }
+ else {
+ var found = cur.match(classTest(cls));
+ if (!found) { return false }
+ var end = found.index + found[0].length;
+ line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null;
+ }
+ return true
+ })
+ }),
+
+ addLineWidget: docMethodOp(function(handle, node, options) {
+ return addLineWidget(this, handle, node, options)
+ }),
+ removeLineWidget: function(widget) { widget.clear(); },
+
+ markText: function(from, to, options) {
+ return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range")
+ },
+ setBookmark: function(pos, options) {
+ var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),
+ insertLeft: options && options.insertLeft,
+ clearWhenEmpty: false, shared: options && options.shared,
+ handleMouseEvents: options && options.handleMouseEvents};
+ pos = clipPos(this, pos);
+ return markText(this, pos, pos, realOpts, "bookmark")
+ },
+ findMarksAt: function(pos) {
+ pos = clipPos(this, pos);
+ var markers = [], spans = getLine(this, pos.line).markedSpans;
+ if (spans) { for (var i = 0; i < spans.length; ++i) {
+ var span = spans[i];
+ if ((span.from == null || span.from <= pos.ch) &&
+ (span.to == null || span.to >= pos.ch))
+ { markers.push(span.marker.parent || span.marker); }
+ } }
+ return markers
+ },
+ findMarks: function(from, to, filter) {
+ from = clipPos(this, from); to = clipPos(this, to);
+ var found = [], lineNo = from.line;
+ this.iter(from.line, to.line + 1, function (line) {
+ var spans = line.markedSpans;
+ if (spans) { for (var i = 0; i < spans.length; i++) {
+ var span = spans[i];
+ if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||
+ span.from == null && lineNo != from.line ||
+ span.from != null && lineNo == to.line && span.from >= to.ch) &&
+ (!filter || filter(span.marker)))
+ { found.push(span.marker.parent || span.marker); }
+ } }
+ ++lineNo;
+ });
+ return found
+ },
+ getAllMarks: function() {
+ var markers = [];
+ this.iter(function (line) {
+ var sps = line.markedSpans;
+ if (sps) { for (var i = 0; i < sps.length; ++i)
+ { if (sps[i].from != null) { markers.push(sps[i].marker); } } }
+ });
+ return markers
+ },
+
+ posFromIndex: function(off) {
+ var ch, lineNo = this.first, sepSize = this.lineSeparator().length;
+ this.iter(function (line) {
+ var sz = line.text.length + sepSize;
+ if (sz > off) { ch = off; return true }
+ off -= sz;
+ ++lineNo;
+ });
+ return clipPos(this, Pos(lineNo, ch))
+ },
+ indexFromPos: function (coords) {
+ coords = clipPos(this, coords);
+ var index = coords.ch;
+ if (coords.line < this.first || coords.ch < 0) { return 0 }
+ var sepSize = this.lineSeparator().length;
+ this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value
+ index += line.text.length + sepSize;
+ });
+ return index
+ },
+
+ copy: function(copyHistory) {
+ var doc = new Doc(getLines(this, this.first, this.first + this.size),
+ this.modeOption, this.first, this.lineSep, this.direction);
+ doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;
+ doc.sel = this.sel;
+ doc.extend = false;
+ if (copyHistory) {
+ doc.history.undoDepth = this.history.undoDepth;
+ doc.setHistory(this.getHistory());
+ }
+ return doc
+ },
+
+ linkedDoc: function(options) {
+ if (!options) { options = {}; }
+ var from = this.first, to = this.first + this.size;
+ if (options.from != null && options.from > from) { from = options.from; }
+ if (options.to != null && options.to < to) { to = options.to; }
+ var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);
+ if (options.sharedHist) { copy.history = this.history
+ ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});
+ copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];
+ copySharedMarkers(copy, findSharedMarkers(this));
+ return copy
+ },
+ unlinkDoc: function(other) {
+ if (other instanceof CodeMirror) { other = other.doc; }
+ if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {
+ var link = this.linked[i];
+ if (link.doc != other) { continue }
+ this.linked.splice(i, 1);
+ other.unlinkDoc(this);
+ detachSharedMarkers(findSharedMarkers(this));
+ break
+ } }
+ // If the histories were shared, split them again
+ if (other.history == this.history) {
+ var splitIds = [other.id];
+ linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);
+ other.history = new History(null);
+ other.history.done = copyHistoryArray(this.history.done, splitIds);
+ other.history.undone = copyHistoryArray(this.history.undone, splitIds);
+ }
+ },
+ iterLinkedDocs: function(f) {linkedDocs(this, f);},
+
+ getMode: function() {return this.mode},
+ getEditor: function() {return this.cm},
+
+ splitLines: function(str) {
+ if (this.lineSep) { return str.split(this.lineSep) }
+ return splitLinesAuto(str)
+ },
+ lineSeparator: function() { return this.lineSep || "\n" },
+
+ setDirection: docMethodOp(function (dir) {
+ if (dir != "rtl") { dir = "ltr"; }
+ if (dir == this.direction) { return }
+ this.direction = dir;
+ this.iter(function (line) { return line.order = null; });
+ if (this.cm) { directionChanged(this.cm); }
+ })
+ });
+
+ // Public alias.
+ Doc.prototype.eachLine = Doc.prototype.iter;
+
+ // Kludge to work around strange IE behavior where it'll sometimes
+ // re-fire a series of drag-related events right after the drop (#1551)
+ var lastDrop = 0;
+
+ function onDrop(e) {
+ var cm = this;
+ clearDragCursor(cm);
+ if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))
+ { return }
+ e_preventDefault(e);
+ if (ie) { lastDrop = +new Date; }
+ var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;
+ if (!pos || cm.isReadOnly()) { return }
+ // Might be a file drop, in which case we simply extract the text
+ // and insert it.
+ if (files && files.length && window.FileReader && window.File) {
+ var n = files.length, text = Array(n), read = 0;
+ var markAsReadAndPasteIfAllFilesAreRead = function () {
+ if (++read == n) {
+ operation(cm, function () {
+ pos = clipPos(cm.doc, pos);
+ var change = {from: pos, to: pos,
+ text: cm.doc.splitLines(
+ text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())),
+ origin: "paste"};
+ makeChange(cm.doc, change);
+ setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change))));
+ })();
+ }
+ };
+ var readTextFromFile = function (file, i) {
+ if (cm.options.allowDropFileTypes &&
+ indexOf(cm.options.allowDropFileTypes, file.type) == -1) {
+ markAsReadAndPasteIfAllFilesAreRead();
+ return
+ }
+ var reader = new FileReader;
+ reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); };
+ reader.onload = function () {
+ var content = reader.result;
+ if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) {
+ markAsReadAndPasteIfAllFilesAreRead();
+ return
+ }
+ text[i] = content;
+ markAsReadAndPasteIfAllFilesAreRead();
+ };
+ reader.readAsText(file);
+ };
+ for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); }
+ } else { // Normal drop
+ // Don't do a replace if the drop happened inside of the selected text.
+ if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {
+ cm.state.draggingText(e);
+ // Ensure the editor is re-focused
+ setTimeout(function () { return cm.display.input.focus(); }, 20);
+ return
+ }
+ try {
+ var text$1 = e.dataTransfer.getData("Text");
+ if (text$1) {
+ var selected;
+ if (cm.state.draggingText && !cm.state.draggingText.copy)
+ { selected = cm.listSelections(); }
+ setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));
+ if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)
+ { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag"); } }
+ cm.replaceSelection(text$1, "around", "paste");
+ cm.display.input.focus();
+ }
+ }
+ catch(e$1){}
+ }
+ }
+
+ function onDragStart(cm, e) {
+ if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }
+ if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }
+
+ e.dataTransfer.setData("Text", cm.getSelection());
+ e.dataTransfer.effectAllowed = "copyMove";
+
+ // Use dummy image instead of default browsers image.
+ // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.
+ if (e.dataTransfer.setDragImage && !safari) {
+ var img = elt("img", null, null, "position: fixed; left: 0; top: 0;");
+ img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
+ if (presto) {
+ img.width = img.height = 1;
+ cm.display.wrapper.appendChild(img);
+ // Force a relayout, or Opera won't use our image for some obscure reason
+ img._top = img.offsetTop;
+ }
+ e.dataTransfer.setDragImage(img, 0, 0);
+ if (presto) { img.parentNode.removeChild(img); }
+ }
+ }
+
+ function onDragOver(cm, e) {
+ var pos = posFromMouse(cm, e);
+ if (!pos) { return }
+ var frag = document.createDocumentFragment();
+ drawSelectionCursor(cm, pos, frag);
+ if (!cm.display.dragCursor) {
+ cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors");
+ cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);
+ }
+ removeChildrenAndAdd(cm.display.dragCursor, frag);
+ }
+
+ function clearDragCursor(cm) {
+ if (cm.display.dragCursor) {
+ cm.display.lineSpace.removeChild(cm.display.dragCursor);
+ cm.display.dragCursor = null;
+ }
+ }
+
+ // These must be handled carefully, because naively registering a
+ // handler for each editor will cause the editors to never be
+ // garbage collected.
+
+ function forEachCodeMirror(f) {
+ if (!document.getElementsByClassName) { return }
+ var byClass = document.getElementsByClassName("CodeMirror"), editors = [];
+ for (var i = 0; i < byClass.length; i++) {
+ var cm = byClass[i].CodeMirror;
+ if (cm) { editors.push(cm); }
+ }
+ if (editors.length) { editors[0].operation(function () {
+ for (var i = 0; i < editors.length; i++) { f(editors[i]); }
+ }); }
+ }
+
+ var globalsRegistered = false;
+ function ensureGlobalHandlers() {
+ if (globalsRegistered) { return }
+ registerGlobalHandlers();
+ globalsRegistered = true;
+ }
+ function registerGlobalHandlers() {
+ // When the window resizes, we need to refresh active editors.
+ var resizeTimer;
+ on(window, "resize", function () {
+ if (resizeTimer == null) { resizeTimer = setTimeout(function () {
+ resizeTimer = null;
+ forEachCodeMirror(onResize);
+ }, 100); }
+ });
+ // When the window loses focus, we want to show the editor as blurred
+ on(window, "blur", function () { return forEachCodeMirror(onBlur); });
+ }
+ // Called when the window resizes
+ function onResize(cm) {
+ var d = cm.display;
+ // Might be a text scaling operation, clear size caches.
+ d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;
+ d.scrollbarsClipped = false;
+ cm.setSize();
+ }
+
+ var keyNames = {
+ 3: "Pause", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt",
+ 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End",
+ 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert",
+ 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod",
+ 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 145: "ScrollLock",
+ 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\",
+ 221: "]", 222: "'", 224: "Mod", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete",
+ 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"
+ };
+
+ // Number keys
+ for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }
+ // Alphabetic keys
+ for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }
+ // Function keys
+ for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; }
+
+ var keyMap = {};
+
+ keyMap.basic = {
+ "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown",
+ "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown",
+ "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore",
+ "Tab": "defaultTab", "Shift-Tab": "indentAuto",
+ "Enter": "newlineAndIndent", "Insert": "toggleOverwrite",
+ "Esc": "singleSelection"
+ };
+ // Note that the save and find-related commands aren't defined by
+ // default. User code or addons can define them. Unknown commands
+ // are simply ignored.
+ keyMap.pcDefault = {
+ "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo",
+ "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown",
+ "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd",
+ "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find",
+ "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll",
+ "Ctrl-[": "indentLess", "Ctrl-]": "indentMore",
+ "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection",
+ "fallthrough": "basic"
+ };
+ // Very basic readline/emacs-style bindings, which are standard on Mac.
+ keyMap.emacsy = {
+ "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
+ "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd",
+ "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore",
+ "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars",
+ "Ctrl-O": "openLine"
+ };
+ keyMap.macDefault = {
+ "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo",
+ "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft",
+ "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore",
+ "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find",
+ "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll",
+ "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight",
+ "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd",
+ "fallthrough": ["basic", "emacsy"]
+ };
+ keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault;
+
+ // KEYMAP DISPATCH
+
+ function normalizeKeyName(name) {
+ var parts = name.split(/-(?!$)/);
+ name = parts[parts.length - 1];
+ var alt, ctrl, shift, cmd;
+ for (var i = 0; i < parts.length - 1; i++) {
+ var mod = parts[i];
+ if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }
+ else if (/^a(lt)?$/i.test(mod)) { alt = true; }
+ else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }
+ else if (/^s(hift)?$/i.test(mod)) { shift = true; }
+ else { throw new Error("Unrecognized modifier name: " + mod) }
+ }
+ if (alt) { name = "Alt-" + name; }
+ if (ctrl) { name = "Ctrl-" + name; }
+ if (cmd) { name = "Cmd-" + name; }
+ if (shift) { name = "Shift-" + name; }
+ return name
+ }
+
+ // This is a kludge to keep keymaps mostly working as raw objects
+ // (backwards compatibility) while at the same time support features
+ // like normalization and multi-stroke key bindings. It compiles a
+ // new normalized keymap, and then updates the old object to reflect
+ // this.
+ function normalizeKeyMap(keymap) {
+ var copy = {};
+ for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {
+ var value = keymap[keyname];
+ if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }
+ if (value == "...") { delete keymap[keyname]; continue }
+
+ var keys = map(keyname.split(" "), normalizeKeyName);
+ for (var i = 0; i < keys.length; i++) {
+ var val = (void 0), name = (void 0);
+ if (i == keys.length - 1) {
+ name = keys.join(" ");
+ val = value;
+ } else {
+ name = keys.slice(0, i + 1).join(" ");
+ val = "...";
+ }
+ var prev = copy[name];
+ if (!prev) { copy[name] = val; }
+ else if (prev != val) { throw new Error("Inconsistent bindings for " + name) }
+ }
+ delete keymap[keyname];
+ } }
+ for (var prop in copy) { keymap[prop] = copy[prop]; }
+ return keymap
+ }
+
+ function lookupKey(key, map, handle, context) {
+ map = getKeyMap(map);
+ var found = map.call ? map.call(key, context) : map[key];
+ if (found === false) { return "nothing" }
+ if (found === "...") { return "multi" }
+ if (found != null && handle(found)) { return "handled" }
+
+ if (map.fallthrough) {
+ if (Object.prototype.toString.call(map.fallthrough) != "[object Array]")
+ { return lookupKey(key, map.fallthrough, handle, context) }
+ for (var i = 0; i < map.fallthrough.length; i++) {
+ var result = lookupKey(key, map.fallthrough[i], handle, context);
+ if (result) { return result }
+ }
+ }
+ }
+
+ // Modifier key presses don't count as 'real' key presses for the
+ // purpose of keymap fallthrough.
+ function isModifierKey(value) {
+ var name = typeof value == "string" ? value : keyNames[value.keyCode];
+ return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"
+ }
+
+ function addModifierNames(name, event, noShift) {
+ var base = name;
+ if (event.altKey && base != "Alt") { name = "Alt-" + name; }
+ if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name; }
+ if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Mod") { name = "Cmd-" + name; }
+ if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name; }
+ return name
+ }
+
+ // Look up the name of a key as indicated by an event object.
+ function keyName(event, noShift) {
+ if (presto && event.keyCode == 34 && event["char"]) { return false }
+ var name = keyNames[event.keyCode];
+ if (name == null || event.altGraphKey) { return false }
+ // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,
+ // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)
+ if (event.keyCode == 3 && event.code) { name = event.code; }
+ return addModifierNames(name, event, noShift)
+ }
+
+ function getKeyMap(val) {
+ return typeof val == "string" ? keyMap[val] : val
+ }
+
+ // Helper for deleting text near the selection(s), used to implement
+ // backspace, delete, and similar functionality.
+ function deleteNearSelection(cm, compute) {
+ var ranges = cm.doc.sel.ranges, kill = [];
+ // Build up a set of ranges to kill first, merging overlapping
+ // ranges.
+ for (var i = 0; i < ranges.length; i++) {
+ var toKill = compute(ranges[i]);
+ while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {
+ var replaced = kill.pop();
+ if (cmp(replaced.from, toKill.from) < 0) {
+ toKill.from = replaced.from;
+ break
+ }
+ }
+ kill.push(toKill);
+ }
+ // Next, remove those actual ranges.
+ runInOp(cm, function () {
+ for (var i = kill.length - 1; i >= 0; i--)
+ { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); }
+ ensureCursorVisible(cm);
+ });
+ }
+
+ function moveCharLogically(line, ch, dir) {
+ var target = skipExtendingChars(line.text, ch + dir, dir);
+ return target < 0 || target > line.text.length ? null : target
+ }
+
+ function moveLogically(line, start, dir) {
+ var ch = moveCharLogically(line, start.ch, dir);
+ return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before")
+ }
+
+ function endOfLine(visually, cm, lineObj, lineNo, dir) {
+ if (visually) {
+ if (cm.doc.direction == "rtl") { dir = -dir; }
+ var order = getOrder(lineObj, cm.doc.direction);
+ if (order) {
+ var part = dir < 0 ? lst(order) : order[0];
+ var moveInStorageOrder = (dir < 0) == (part.level == 1);
+ var sticky = moveInStorageOrder ? "after" : "before";
+ var ch;
+ // With a wrapped rtl chunk (possibly spanning multiple bidi parts),
+ // it could be that the last bidi part is not on the last visual line,
+ // since visual lines contain content order-consecutive chunks.
+ // Thus, in rtl, we are looking for the first (content-order) character
+ // in the rtl chunk that is on the last line (that is, the same line
+ // as the last (content-order) character).
+ if (part.level > 0 || cm.doc.direction == "rtl") {
+ var prep = prepareMeasureForLine(cm, lineObj);
+ ch = dir < 0 ? lineObj.text.length - 1 : 0;
+ var targetTop = measureCharPrepared(cm, prep, ch).top;
+ ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);
+ if (sticky == "before") { ch = moveCharLogically(lineObj, ch, 1); }
+ } else { ch = dir < 0 ? part.to : part.from; }
+ return new Pos(lineNo, ch, sticky)
+ }
+ }
+ return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after")
+ }
+
+ function moveVisually(cm, line, start, dir) {
+ var bidi = getOrder(line, cm.doc.direction);
+ if (!bidi) { return moveLogically(line, start, dir) }
+ if (start.ch >= line.text.length) {
+ start.ch = line.text.length;
+ start.sticky = "before";
+ } else if (start.ch <= 0) {
+ start.ch = 0;
+ start.sticky = "after";
+ }
+ var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];
+ if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {
+ // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,
+ // nothing interesting happens.
+ return moveLogically(line, start, dir)
+ }
+
+ var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };
+ var prep;
+ var getWrappedLineExtent = function (ch) {
+ if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }
+ prep = prep || prepareMeasureForLine(cm, line);
+ return wrappedLineExtentChar(cm, line, prep, ch)
+ };
+ var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch);
+
+ if (cm.doc.direction == "rtl" || part.level == 1) {
+ var moveInStorageOrder = (part.level == 1) == (dir < 0);
+ var ch = mv(start, moveInStorageOrder ? 1 : -1);
+ if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {
+ // Case 2: We move within an rtl part or in an rtl editor on the same visual line
+ var sticky = moveInStorageOrder ? "before" : "after";
+ return new Pos(start.line, ch, sticky)
+ }
+ }
+
+ // Case 3: Could not move within this bidi part in this visual line, so leave
+ // the current bidi part
+
+ var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {
+ var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder
+ ? new Pos(start.line, mv(ch, 1), "before")
+ : new Pos(start.line, ch, "after"); };
+
+ for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {
+ var part = bidi[partPos];
+ var moveInStorageOrder = (dir > 0) == (part.level != 1);
+ var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);
+ if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }
+ ch = moveInStorageOrder ? part.from : mv(part.to, -1);
+ if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }
+ }
+ };
+
+ // Case 3a: Look for other bidi parts on the same visual line
+ var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);
+ if (res) { return res }
+
+ // Case 3b: Look for other bidi parts on the next visual line
+ var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);
+ if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {
+ res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));
+ if (res) { return res }
+ }
+
+ // Case 4: Nowhere to move
+ return null
+ }
+
+ // Commands are parameter-less actions that can be performed on an
+ // editor, mostly used for keybindings.
+ var commands = {
+ selectAll: selectAll,
+ singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); },
+ killLine: function (cm) { return deleteNearSelection(cm, function (range) {
+ if (range.empty()) {
+ var len = getLine(cm.doc, range.head.line).text.length;
+ if (range.head.ch == len && range.head.line < cm.lastLine())
+ { return {from: range.head, to: Pos(range.head.line + 1, 0)} }
+ else
+ { return {from: range.head, to: Pos(range.head.line, len)} }
+ } else {
+ return {from: range.from(), to: range.to()}
+ }
+ }); },
+ deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({
+ from: Pos(range.from().line, 0),
+ to: clipPos(cm.doc, Pos(range.to().line + 1, 0))
+ }); }); },
+ delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({
+ from: Pos(range.from().line, 0), to: range.from()
+ }); }); },
+ delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {
+ var top = cm.charCoords(range.head, "div").top + 5;
+ var leftPos = cm.coordsChar({left: 0, top: top}, "div");
+ return {from: leftPos, to: range.from()}
+ }); },
+ delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {
+ var top = cm.charCoords(range.head, "div").top + 5;
+ var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div");
+ return {from: range.from(), to: rightPos }
+ }); },
+ undo: function (cm) { return cm.undo(); },
+ redo: function (cm) { return cm.redo(); },
+ undoSelection: function (cm) { return cm.undoSelection(); },
+ redoSelection: function (cm) { return cm.redoSelection(); },
+ goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },
+ goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },
+ goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },
+ {origin: "+move", bias: 1}
+ ); },
+ goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },
+ {origin: "+move", bias: 1}
+ ); },
+ goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },
+ {origin: "+move", bias: -1}
+ ); },
+ goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {
+ var top = cm.cursorCoords(range.head, "div").top + 5;
+ return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div")
+ }, sel_move); },
+ goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {
+ var top = cm.cursorCoords(range.head, "div").top + 5;
+ return cm.coordsChar({left: 0, top: top}, "div")
+ }, sel_move); },
+ goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {
+ var top = cm.cursorCoords(range.head, "div").top + 5;
+ var pos = cm.coordsChar({left: 0, top: top}, "div");
+ if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) }
+ return pos
+ }, sel_move); },
+ goLineUp: function (cm) { return cm.moveV(-1, "line"); },
+ goLineDown: function (cm) { return cm.moveV(1, "line"); },
+ goPageUp: function (cm) { return cm.moveV(-1, "page"); },
+ goPageDown: function (cm) { return cm.moveV(1, "page"); },
+ goCharLeft: function (cm) { return cm.moveH(-1, "char"); },
+ goCharRight: function (cm) { return cm.moveH(1, "char"); },
+ goColumnLeft: function (cm) { return cm.moveH(-1, "column"); },
+ goColumnRight: function (cm) { return cm.moveH(1, "column"); },
+ goWordLeft: function (cm) { return cm.moveH(-1, "word"); },
+ goGroupRight: function (cm) { return cm.moveH(1, "group"); },
+ goGroupLeft: function (cm) { return cm.moveH(-1, "group"); },
+ goWordRight: function (cm) { return cm.moveH(1, "word"); },
+ delCharBefore: function (cm) { return cm.deleteH(-1, "codepoint"); },
+ delCharAfter: function (cm) { return cm.deleteH(1, "char"); },
+ delWordBefore: function (cm) { return cm.deleteH(-1, "word"); },
+ delWordAfter: function (cm) { return cm.deleteH(1, "word"); },
+ delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); },
+ delGroupAfter: function (cm) { return cm.deleteH(1, "group"); },
+ indentAuto: function (cm) { return cm.indentSelection("smart"); },
+ indentMore: function (cm) { return cm.indentSelection("add"); },
+ indentLess: function (cm) { return cm.indentSelection("subtract"); },
+ insertTab: function (cm) { return cm.replaceSelection("\t"); },
+ insertSoftTab: function (cm) {
+ var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;
+ for (var i = 0; i < ranges.length; i++) {
+ var pos = ranges[i].from();
+ var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);
+ spaces.push(spaceStr(tabSize - col % tabSize));
+ }
+ cm.replaceSelections(spaces);
+ },
+ defaultTab: function (cm) {
+ if (cm.somethingSelected()) { cm.indentSelection("add"); }
+ else { cm.execCommand("insertTab"); }
+ },
+ // Swap the two chars left and right of each selection's head.
+ // Move cursor behind the two swapped characters afterwards.
+ //
+ // Doesn't consider line feeds a character.
+ // Doesn't scan more than one line above to find a character.
+ // Doesn't do anything on an empty line.
+ // Doesn't do anything with non-empty selections.
+ transposeChars: function (cm) { return runInOp(cm, function () {
+ var ranges = cm.listSelections(), newSel = [];
+ for (var i = 0; i < ranges.length; i++) {
+ if (!ranges[i].empty()) { continue }
+ var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;
+ if (line) {
+ if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }
+ if (cur.ch > 0) {
+ cur = new Pos(cur.line, cur.ch + 1);
+ cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),
+ Pos(cur.line, cur.ch - 2), cur, "+transpose");
+ } else if (cur.line > cm.doc.first) {
+ var prev = getLine(cm.doc, cur.line - 1).text;
+ if (prev) {
+ cur = new Pos(cur.line, 1);
+ cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +
+ prev.charAt(prev.length - 1),
+ Pos(cur.line - 1, prev.length - 1), cur, "+transpose");
+ }
+ }
+ }
+ newSel.push(new Range(cur, cur));
+ }
+ cm.setSelections(newSel);
+ }); },
+ newlineAndIndent: function (cm) { return runInOp(cm, function () {
+ var sels = cm.listSelections();
+ for (var i = sels.length - 1; i >= 0; i--)
+ { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input"); }
+ sels = cm.listSelections();
+ for (var i$1 = 0; i$1 < sels.length; i$1++)
+ { cm.indentLine(sels[i$1].from().line, null, true); }
+ ensureCursorVisible(cm);
+ }); },
+ openLine: function (cm) { return cm.replaceSelection("\n", "start"); },
+ toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }
+ };
+
+
+ function lineStart(cm, lineN) {
+ var line = getLine(cm.doc, lineN);
+ var visual = visualLine(line);
+ if (visual != line) { lineN = lineNo(visual); }
+ return endOfLine(true, cm, visual, lineN, 1)
+ }
+ function lineEnd(cm, lineN) {
+ var line = getLine(cm.doc, lineN);
+ var visual = visualLineEnd(line);
+ if (visual != line) { lineN = lineNo(visual); }
+ return endOfLine(true, cm, line, lineN, -1)
+ }
+ function lineStartSmart(cm, pos) {
+ var start = lineStart(cm, pos.line);
+ var line = getLine(cm.doc, start.line);
+ var order = getOrder(line, cm.doc.direction);
+ if (!order || order[0].level == 0) {
+ var firstNonWS = Math.max(start.ch, line.text.search(/\S/));
+ var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;
+ return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)
+ }
+ return start
+ }
+
+ // Run a handler that was bound to a key.
+ function doHandleBinding(cm, bound, dropShift) {
+ if (typeof bound == "string") {
+ bound = commands[bound];
+ if (!bound) { return false }
+ }
+ // Ensure previous input has been read, so that the handler sees a
+ // consistent view of the document
+ cm.display.input.ensurePolled();
+ var prevShift = cm.display.shift, done = false;
+ try {
+ if (cm.isReadOnly()) { cm.state.suppressEdits = true; }
+ if (dropShift) { cm.display.shift = false; }
+ done = bound(cm) != Pass;
+ } finally {
+ cm.display.shift = prevShift;
+ cm.state.suppressEdits = false;
+ }
+ return done
+ }
+
+ function lookupKeyForEditor(cm, name, handle) {
+ for (var i = 0; i < cm.state.keyMaps.length; i++) {
+ var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);
+ if (result) { return result }
+ }
+ return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))
+ || lookupKey(name, cm.options.keyMap, handle, cm)
+ }
+
+ // Note that, despite the name, this function is also used to check
+ // for bound mouse clicks.
+
+ var stopSeq = new Delayed;
+
+ function dispatchKey(cm, name, e, handle) {
+ var seq = cm.state.keySeq;
+ if (seq) {
+ if (isModifierKey(name)) { return "handled" }
+ if (/\'$/.test(name))
+ { cm.state.keySeq = null; }
+ else
+ { stopSeq.set(50, function () {
+ if (cm.state.keySeq == seq) {
+ cm.state.keySeq = null;
+ cm.display.input.reset();
+ }
+ }); }
+ if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { return true }
+ }
+ return dispatchKeyInner(cm, name, e, handle)
+ }
+
+ function dispatchKeyInner(cm, name, e, handle) {
+ var result = lookupKeyForEditor(cm, name, handle);
+
+ if (result == "multi")
+ { cm.state.keySeq = name; }
+ if (result == "handled")
+ { signalLater(cm, "keyHandled", cm, name, e); }
+
+ if (result == "handled" || result == "multi") {
+ e_preventDefault(e);
+ restartBlink(cm);
+ }
+
+ return !!result
+ }
+
+ // Handle a key from the keydown event.
+ function handleKeyBinding(cm, e) {
+ var name = keyName(e, true);
+ if (!name) { return false }
+
+ if (e.shiftKey && !cm.state.keySeq) {
+ // First try to resolve full name (including 'Shift-'). Failing
+ // that, see if there is a cursor-motion command (starting with
+ // 'go') bound to the keyname without 'Shift-'.
+ return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); })
+ || dispatchKey(cm, name, e, function (b) {
+ if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion)
+ { return doHandleBinding(cm, b) }
+ })
+ } else {
+ return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })
+ }
+ }
+
+ // Handle a key from the keypress event
+ function handleCharBinding(cm, e, ch) {
+ return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); })
+ }
+
+ var lastStoppedKey = null;
+ function onKeyDown(e) {
+ var cm = this;
+ if (e.target && e.target != cm.display.input.getField()) { return }
+ cm.curOp.focus = activeElt();
+ if (signalDOMEvent(cm, e)) { return }
+ // IE does strange things with escape.
+ if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }
+ var code = e.keyCode;
+ cm.display.shift = code == 16 || e.shiftKey;
+ var handled = handleKeyBinding(cm, e);
+ if (presto) {
+ lastStoppedKey = handled ? code : null;
+ // Opera has no cut event... we try to at least catch the key combo
+ if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))
+ { cm.replaceSelection("", null, "cut"); }
+ }
+ if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand)
+ { document.execCommand("cut"); }
+
+ // Turn mouse into crosshair when Alt is held on Mac.
+ if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className))
+ { showCrossHair(cm); }
+ }
+
+ function showCrossHair(cm) {
+ var lineDiv = cm.display.lineDiv;
+ addClass(lineDiv, "CodeMirror-crosshair");
+
+ function up(e) {
+ if (e.keyCode == 18 || !e.altKey) {
+ rmClass(lineDiv, "CodeMirror-crosshair");
+ off(document, "keyup", up);
+ off(document, "mouseover", up);
+ }
+ }
+ on(document, "keyup", up);
+ on(document, "mouseover", up);
+ }
+
+ function onKeyUp(e) {
+ if (e.keyCode == 16) { this.doc.sel.shift = false; }
+ signalDOMEvent(this, e);
+ }
+
+ function onKeyPress(e) {
+ var cm = this;
+ if (e.target && e.target != cm.display.input.getField()) { return }
+ if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }
+ var keyCode = e.keyCode, charCode = e.charCode;
+ if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}
+ if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }
+ var ch = String.fromCharCode(charCode == null ? keyCode : charCode);
+ // Some browsers fire keypress events for backspace
+ if (ch == "\x08") { return }
+ if (handleCharBinding(cm, e, ch)) { return }
+ cm.display.input.onKeyPress(e);
+ }
+
+ var DOUBLECLICK_DELAY = 400;
+
+ var PastClick = function(time, pos, button) {
+ this.time = time;
+ this.pos = pos;
+ this.button = button;
+ };
+
+ PastClick.prototype.compare = function (time, pos, button) {
+ return this.time + DOUBLECLICK_DELAY > time &&
+ cmp(pos, this.pos) == 0 && button == this.button
+ };
+
+ var lastClick, lastDoubleClick;
+ function clickRepeat(pos, button) {
+ var now = +new Date;
+ if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {
+ lastClick = lastDoubleClick = null;
+ return "triple"
+ } else if (lastClick && lastClick.compare(now, pos, button)) {
+ lastDoubleClick = new PastClick(now, pos, button);
+ lastClick = null;
+ return "double"
+ } else {
+ lastClick = new PastClick(now, pos, button);
+ lastDoubleClick = null;
+ return "single"
+ }
+ }
+
+ // A mouse down can be a single click, double click, triple click,
+ // start of selection drag, start of text drag, new cursor
+ // (ctrl-click), rectangle drag (alt-drag), or xwin
+ // middle-click-paste. Or it might be a click on something we should
+ // not interfere with, such as a scrollbar or widget.
+ function onMouseDown(e) {
+ var cm = this, display = cm.display;
+ if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }
+ display.input.ensurePolled();
+ display.shift = e.shiftKey;
+
+ if (eventInWidget(display, e)) {
+ if (!webkit) {
+ // Briefly turn off draggability, to allow widgets to do
+ // normal dragging things.
+ display.scroller.draggable = false;
+ setTimeout(function () { return display.scroller.draggable = true; }, 100);
+ }
+ return
+ }
+ if (clickInGutter(cm, e)) { return }
+ var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : "single";
+ window.focus();
+
+ // #3261: make sure, that we're not starting a second selection
+ if (button == 1 && cm.state.selectingText)
+ { cm.state.selectingText(e); }
+
+ if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }
+
+ if (button == 1) {
+ if (pos) { leftButtonDown(cm, pos, repeat, e); }
+ else if (e_target(e) == display.scroller) { e_preventDefault(e); }
+ } else if (button == 2) {
+ if (pos) { extendSelection(cm.doc, pos); }
+ setTimeout(function () { return display.input.focus(); }, 20);
+ } else if (button == 3) {
+ if (captureRightClick) { cm.display.input.onContextMenu(e); }
+ else { delayBlurEvent(cm); }
+ }
+ }
+
+ function handleMappedButton(cm, button, pos, repeat, event) {
+ var name = "Click";
+ if (repeat == "double") { name = "Double" + name; }
+ else if (repeat == "triple") { name = "Triple" + name; }
+ name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name;
+
+ return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {
+ if (typeof bound == "string") { bound = commands[bound]; }
+ if (!bound) { return false }
+ var done = false;
+ try {
+ if (cm.isReadOnly()) { cm.state.suppressEdits = true; }
+ done = bound(cm, pos) != Pass;
+ } finally {
+ cm.state.suppressEdits = false;
+ }
+ return done
+ })
+ }
+
+ function configureMouse(cm, repeat, event) {
+ var option = cm.getOption("configureMouse");
+ var value = option ? option(cm, repeat, event) : {};
+ if (value.unit == null) {
+ var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;
+ value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line";
+ }
+ if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }
+ if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }
+ if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }
+ return value
+ }
+
+ function leftButtonDown(cm, pos, repeat, event) {
+ if (ie) { setTimeout(bind(ensureFocus, cm), 0); }
+ else { cm.curOp.focus = activeElt(); }
+
+ var behavior = configureMouse(cm, repeat, event);
+
+ var sel = cm.doc.sel, contained;
+ if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&
+ repeat == "single" && (contained = sel.contains(pos)) > -1 &&
+ (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&
+ (cmp(contained.to(), pos) > 0 || pos.xRel < 0))
+ { leftButtonStartDrag(cm, event, pos, behavior); }
+ else
+ { leftButtonSelect(cm, event, pos, behavior); }
+ }
+
+ // Start a text drag. When it ends, see if any dragging actually
+ // happen, and treat as a click if it didn't.
+ function leftButtonStartDrag(cm, event, pos, behavior) {
+ var display = cm.display, moved = false;
+ var dragEnd = operation(cm, function (e) {
+ if (webkit) { display.scroller.draggable = false; }
+ cm.state.draggingText = false;
+ if (cm.state.delayingBlurEvent) {
+ if (cm.hasFocus()) { cm.state.delayingBlurEvent = false; }
+ else { delayBlurEvent(cm); }
+ }
+ off(display.wrapper.ownerDocument, "mouseup", dragEnd);
+ off(display.wrapper.ownerDocument, "mousemove", mouseMove);
+ off(display.scroller, "dragstart", dragStart);
+ off(display.scroller, "drop", dragEnd);
+ if (!moved) {
+ e_preventDefault(e);
+ if (!behavior.addNew)
+ { extendSelection(cm.doc, pos, null, null, behavior.extend); }
+ // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)
+ if ((webkit && !safari) || ie && ie_version == 9)
+ { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); }
+ else
+ { display.input.focus(); }
+ }
+ });
+ var mouseMove = function(e2) {
+ moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;
+ };
+ var dragStart = function () { return moved = true; };
+ // Let the drag handler handle this.
+ if (webkit) { display.scroller.draggable = true; }
+ cm.state.draggingText = dragEnd;
+ dragEnd.copy = !behavior.moveOnDrag;
+ on(display.wrapper.ownerDocument, "mouseup", dragEnd);
+ on(display.wrapper.ownerDocument, "mousemove", mouseMove);
+ on(display.scroller, "dragstart", dragStart);
+ on(display.scroller, "drop", dragEnd);
+
+ cm.state.delayingBlurEvent = true;
+ setTimeout(function () { return display.input.focus(); }, 20);
+ // IE's approach to draggable
+ if (display.scroller.dragDrop) { display.scroller.dragDrop(); }
+ }
+
+ function rangeForUnit(cm, pos, unit) {
+ if (unit == "char") { return new Range(pos, pos) }
+ if (unit == "word") { return cm.findWordAt(pos) }
+ if (unit == "line") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }
+ var result = unit(cm, pos);
+ return new Range(result.from, result.to)
+ }
+
+ // Normal selection, as opposed to text dragging.
+ function leftButtonSelect(cm, event, start, behavior) {
+ if (ie) { delayBlurEvent(cm); }
+ var display = cm.display, doc = cm.doc;
+ e_preventDefault(event);
+
+ var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;
+ if (behavior.addNew && !behavior.extend) {
+ ourIndex = doc.sel.contains(start);
+ if (ourIndex > -1)
+ { ourRange = ranges[ourIndex]; }
+ else
+ { ourRange = new Range(start, start); }
+ } else {
+ ourRange = doc.sel.primary();
+ ourIndex = doc.sel.primIndex;
+ }
+
+ if (behavior.unit == "rectangle") {
+ if (!behavior.addNew) { ourRange = new Range(start, start); }
+ start = posFromMouse(cm, event, true, true);
+ ourIndex = -1;
+ } else {
+ var range = rangeForUnit(cm, start, behavior.unit);
+ if (behavior.extend)
+ { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); }
+ else
+ { ourRange = range; }
+ }
+
+ if (!behavior.addNew) {
+ ourIndex = 0;
+ setSelection(doc, new Selection([ourRange], 0), sel_mouse);
+ startSel = doc.sel;
+ } else if (ourIndex == -1) {
+ ourIndex = ranges.length;
+ setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),
+ {scroll: false, origin: "*mouse"});
+ } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) {
+ setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),
+ {scroll: false, origin: "*mouse"});
+ startSel = doc.sel;
+ } else {
+ replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);
+ }
+
+ var lastPos = start;
+ function extendTo(pos) {
+ if (cmp(lastPos, pos) == 0) { return }
+ lastPos = pos;
+
+ if (behavior.unit == "rectangle") {
+ var ranges = [], tabSize = cm.options.tabSize;
+ var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);
+ var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);
+ var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);
+ for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));
+ line <= end; line++) {
+ var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);
+ if (left == right)
+ { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }
+ else if (text.length > leftPos)
+ { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }
+ }
+ if (!ranges.length) { ranges.push(new Range(start, start)); }
+ setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),
+ {origin: "*mouse", scroll: false});
+ cm.scrollIntoView(pos);
+ } else {
+ var oldRange = ourRange;
+ var range = rangeForUnit(cm, pos, behavior.unit);
+ var anchor = oldRange.anchor, head;
+ if (cmp(range.anchor, anchor) > 0) {
+ head = range.head;
+ anchor = minPos(oldRange.from(), range.anchor);
+ } else {
+ head = range.anchor;
+ anchor = maxPos(oldRange.to(), range.head);
+ }
+ var ranges$1 = startSel.ranges.slice(0);
+ ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));
+ setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);
+ }
+ }
+
+ var editorSize = display.wrapper.getBoundingClientRect();
+ // Used to ensure timeout re-tries don't fire when another extend
+ // happened in the meantime (clearTimeout isn't reliable -- at
+ // least on Chrome, the timeouts still happen even when cleared,
+ // if the clear happens after their scheduled firing time).
+ var counter = 0;
+
+ function extend(e) {
+ var curCount = ++counter;
+ var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle");
+ if (!cur) { return }
+ if (cmp(cur, lastPos) != 0) {
+ cm.curOp.focus = activeElt();
+ extendTo(cur);
+ var visible = visibleLines(display, doc);
+ if (cur.line >= visible.to || cur.line < visible.from)
+ { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }
+ } else {
+ var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;
+ if (outside) { setTimeout(operation(cm, function () {
+ if (counter != curCount) { return }
+ display.scroller.scrollTop += outside;
+ extend(e);
+ }), 50); }
+ }
+ }
+
+ function done(e) {
+ cm.state.selectingText = false;
+ counter = Infinity;
+ // If e is null or undefined we interpret this as someone trying
+ // to explicitly cancel the selection rather than the user
+ // letting go of the mouse button.
+ if (e) {
+ e_preventDefault(e);
+ display.input.focus();
+ }
+ off(display.wrapper.ownerDocument, "mousemove", move);
+ off(display.wrapper.ownerDocument, "mouseup", up);
+ doc.history.lastSelOrigin = null;
+ }
+
+ var move = operation(cm, function (e) {
+ if (e.buttons === 0 || !e_button(e)) { done(e); }
+ else { extend(e); }
+ });
+ var up = operation(cm, done);
+ cm.state.selectingText = up;
+ on(display.wrapper.ownerDocument, "mousemove", move);
+ on(display.wrapper.ownerDocument, "mouseup", up);
+ }
+
+ // Used when mouse-selecting to adjust the anchor to the proper side
+ // of a bidi jump depending on the visual position of the head.
+ function bidiSimplify(cm, range) {
+ var anchor = range.anchor;
+ var head = range.head;
+ var anchorLine = getLine(cm.doc, anchor.line);
+ if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range }
+ var order = getOrder(anchorLine);
+ if (!order) { return range }
+ var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];
+ if (part.from != anchor.ch && part.to != anchor.ch) { return range }
+ var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);
+ if (boundary == 0 || boundary == order.length) { return range }
+
+ // Compute the relative visual position of the head compared to the
+ // anchor (<0 is to the left, >0 to the right)
+ var leftSide;
+ if (head.line != anchor.line) {
+ leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0;
+ } else {
+ var headIndex = getBidiPartAt(order, head.ch, head.sticky);
+ var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);
+ if (headIndex == boundary - 1 || headIndex == boundary)
+ { leftSide = dir < 0; }
+ else
+ { leftSide = dir > 0; }
+ }
+
+ var usePart = order[boundary + (leftSide ? -1 : 0)];
+ var from = leftSide == (usePart.level == 1);
+ var ch = from ? usePart.from : usePart.to, sticky = from ? "after" : "before";
+ return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head)
+ }
+
+
+ // Determines whether an event happened in the gutter, and fires the
+ // handlers for the corresponding event.
+ function gutterEvent(cm, e, type, prevent) {
+ var mX, mY;
+ if (e.touches) {
+ mX = e.touches[0].clientX;
+ mY = e.touches[0].clientY;
+ } else {
+ try { mX = e.clientX; mY = e.clientY; }
+ catch(e$1) { return false }
+ }
+ if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }
+ if (prevent) { e_preventDefault(e); }
+
+ var display = cm.display;
+ var lineBox = display.lineDiv.getBoundingClientRect();
+
+ if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }
+ mY -= lineBox.top - display.viewOffset;
+
+ for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {
+ var g = display.gutters.childNodes[i];
+ if (g && g.getBoundingClientRect().right >= mX) {
+ var line = lineAtHeight(cm.doc, mY);
+ var gutter = cm.display.gutterSpecs[i];
+ signal(cm, type, cm, line, gutter.className, e);
+ return e_defaultPrevented(e)
+ }
+ }
+ }
+
+ function clickInGutter(cm, e) {
+ return gutterEvent(cm, e, "gutterClick", true)
+ }
+
+ // CONTEXT MENU HANDLING
+
+ // To make the context menu work, we need to briefly unhide the
+ // textarea (making it as unobtrusive as possible) to let the
+ // right-click take effect on it.
+ function onContextMenu(cm, e) {
+ if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }
+ if (signalDOMEvent(cm, e, "contextmenu")) { return }
+ if (!captureRightClick) { cm.display.input.onContextMenu(e); }
+ }
+
+ function contextMenuInGutter(cm, e) {
+ if (!hasHandler(cm, "gutterContextMenu")) { return false }
+ return gutterEvent(cm, e, "gutterContextMenu", false)
+ }
+
+ function themeChanged(cm) {
+ cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") +
+ cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-");
+ clearCaches(cm);
+ }
+
+ var Init = {toString: function(){return "CodeMirror.Init"}};
+
+ var defaults = {};
+ var optionHandlers = {};
+
+ function defineOptions(CodeMirror) {
+ var optionHandlers = CodeMirror.optionHandlers;
+
+ function option(name, deflt, handle, notOnInit) {
+ CodeMirror.defaults[name] = deflt;
+ if (handle) { optionHandlers[name] =
+ notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }
+ }
+
+ CodeMirror.defineOption = option;
+
+ // Passed to option handlers when there is no old value.
+ CodeMirror.Init = Init;
+
+ // These two are, on init, called from the constructor because they
+ // have to be initialized before the editor can start at all.
+ option("value", "", function (cm, val) { return cm.setValue(val); }, true);
+ option("mode", null, function (cm, val) {
+ cm.doc.modeOption = val;
+ loadMode(cm);
+ }, true);
+
+ option("indentUnit", 2, loadMode, true);
+ option("indentWithTabs", false);
+ option("smartIndent", true);
+ option("tabSize", 4, function (cm) {
+ resetModeState(cm);
+ clearCaches(cm);
+ regChange(cm);
+ }, true);
+
+ option("lineSeparator", null, function (cm, val) {
+ cm.doc.lineSep = val;
+ if (!val) { return }
+ var newBreaks = [], lineNo = cm.doc.first;
+ cm.doc.iter(function (line) {
+ for (var pos = 0;;) {
+ var found = line.text.indexOf(val, pos);
+ if (found == -1) { break }
+ pos = found + val.length;
+ newBreaks.push(Pos(lineNo, found));
+ }
+ lineNo++;
+ });
+ for (var i = newBreaks.length - 1; i >= 0; i--)
+ { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }
+ });
+ option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200c\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g, function (cm, val, old) {
+ cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g");
+ if (old != Init) { cm.refresh(); }
+ });
+ option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);
+ option("electricChars", true);
+ option("inputStyle", mobile ? "contenteditable" : "textarea", function () {
+ throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME
+ }, true);
+ option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);
+ option("autocorrect", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);
+ option("autocapitalize", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);
+ option("rtlMoveVisually", !windows);
+ option("wholeLineUpdateBefore", true);
+
+ option("theme", "default", function (cm) {
+ themeChanged(cm);
+ updateGutters(cm);
+ }, true);
+ option("keyMap", "default", function (cm, val, old) {
+ var next = getKeyMap(val);
+ var prev = old != Init && getKeyMap(old);
+ if (prev && prev.detach) { prev.detach(cm, next); }
+ if (next.attach) { next.attach(cm, prev || null); }
+ });
+ option("extraKeys", null);
+ option("configureMouse", null);
+
+ option("lineWrapping", false, wrappingChanged, true);
+ option("gutters", [], function (cm, val) {
+ cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);
+ updateGutters(cm);
+ }, true);
+ option("fixedGutter", true, function (cm, val) {
+ cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0";
+ cm.refresh();
+ }, true);
+ option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true);
+ option("scrollbarStyle", "native", function (cm) {
+ initScrollbars(cm);
+ updateScrollbars(cm);
+ cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);
+ cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);
+ }, true);
+ option("lineNumbers", false, function (cm, val) {
+ cm.display.gutterSpecs = getGutters(cm.options.gutters, val);
+ updateGutters(cm);
+ }, true);
+ option("firstLineNumber", 1, updateGutters, true);
+ option("lineNumberFormatter", function (integer) { return integer; }, updateGutters, true);
+ option("showCursorWhenSelecting", false, updateSelection, true);
+
+ option("resetSelectionOnContextMenu", true);
+ option("lineWiseCopyCut", true);
+ option("pasteLinesPerSelection", true);
+ option("selectionsMayTouch", false);
+
+ option("readOnly", false, function (cm, val) {
+ if (val == "nocursor") {
+ onBlur(cm);
+ cm.display.input.blur();
+ }
+ cm.display.input.readOnlyChanged(val);
+ });
+
+ option("screenReaderLabel", null, function (cm, val) {
+ val = (val === '') ? null : val;
+ cm.display.input.screenReaderLabelChanged(val);
+ });
+
+ option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);
+ option("dragDrop", true, dragDropChanged);
+ option("allowDropFileTypes", null);
+
+ option("cursorBlinkRate", 530);
+ option("cursorScrollMargin", 0);
+ option("cursorHeight", 1, updateSelection, true);
+ option("singleCursorHeightPerLine", true, updateSelection, true);
+ option("workTime", 100);
+ option("workDelay", 100);
+ option("flattenSpans", true, resetModeState, true);
+ option("addModeClass", false, resetModeState, true);
+ option("pollInterval", 100);
+ option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });
+ option("historyEventDelay", 1250);
+ option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true);
+ option("maxHighlightLength", 10000, resetModeState, true);
+ option("moveInputWithCursor", true, function (cm, val) {
+ if (!val) { cm.display.input.resetPosition(); }
+ });
+
+ option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; });
+ option("autofocus", null);
+ option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true);
+ option("phrases", null);
+ }
+
+ function dragDropChanged(cm, value, old) {
+ var wasOn = old && old != Init;
+ if (!value != !wasOn) {
+ var funcs = cm.display.dragFunctions;
+ var toggle = value ? on : off;
+ toggle(cm.display.scroller, "dragstart", funcs.start);
+ toggle(cm.display.scroller, "dragenter", funcs.enter);
+ toggle(cm.display.scroller, "dragover", funcs.over);
+ toggle(cm.display.scroller, "dragleave", funcs.leave);
+ toggle(cm.display.scroller, "drop", funcs.drop);
+ }
+ }
+
+ function wrappingChanged(cm) {
+ if (cm.options.lineWrapping) {
+ addClass(cm.display.wrapper, "CodeMirror-wrap");
+ cm.display.sizer.style.minWidth = "";
+ cm.display.sizerWidth = null;
+ } else {
+ rmClass(cm.display.wrapper, "CodeMirror-wrap");
+ findMaxLine(cm);
+ }
+ estimateLineHeights(cm);
+ regChange(cm);
+ clearCaches(cm);
+ setTimeout(function () { return updateScrollbars(cm); }, 100);
+ }
+
+ // A CodeMirror instance represents an editor. This is the object
+ // that user code is usually dealing with.
+
+ function CodeMirror(place, options) {
+ var this$1 = this;
+
+ if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }
+
+ this.options = options = options ? copyObj(options) : {};
+ // Determine effective options based on given values and defaults.
+ copyObj(defaults, options, false);
+
+ var doc = options.value;
+ if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }
+ else if (options.mode) { doc.modeOption = options.mode; }
+ this.doc = doc;
+
+ var input = new CodeMirror.inputStyles[options.inputStyle](this);
+ var display = this.display = new Display(place, doc, input, options);
+ display.wrapper.CodeMirror = this;
+ themeChanged(this);
+ if (options.lineWrapping)
+ { this.display.wrapper.className += " CodeMirror-wrap"; }
+ initScrollbars(this);
+
+ this.state = {
+ keyMaps: [], // stores maps added by addKeyMap
+ overlays: [], // highlighting overlays, as added by addOverlay
+ modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info
+ overwrite: false,
+ delayingBlurEvent: false,
+ focused: false,
+ suppressEdits: false, // used to disable editing during key handlers when in readOnly mode
+ pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll
+ selectingText: false,
+ draggingText: false,
+ highlight: new Delayed(), // stores highlight worker timeout
+ keySeq: null, // Unfinished key sequence
+ specialChars: null
+ };
+
+ if (options.autofocus && !mobile) { display.input.focus(); }
+
+ // Override magic textarea content restore that IE sometimes does
+ // on our hidden textarea on reload
+ if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }
+
+ registerEventHandlers(this);
+ ensureGlobalHandlers();
+
+ startOperation(this);
+ this.curOp.forceUpdate = true;
+ attachDoc(this, doc);
+
+ if ((options.autofocus && !mobile) || this.hasFocus())
+ { setTimeout(function () {
+ if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); }
+ }, 20); }
+ else
+ { onBlur(this); }
+
+ for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))
+ { optionHandlers[opt](this, options[opt], Init); } }
+ maybeUpdateLineNumberWidth(this);
+ if (options.finishInit) { options.finishInit(this); }
+ for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); }
+ endOperation(this);
+ // Suppress optimizelegibility in Webkit, since it breaks text
+ // measuring on line wrapping boundaries.
+ if (webkit && options.lineWrapping &&
+ getComputedStyle(display.lineDiv).textRendering == "optimizelegibility")
+ { display.lineDiv.style.textRendering = "auto"; }
+ }
+
+ // The default configuration options.
+ CodeMirror.defaults = defaults;
+ // Functions to run when options are changed.
+ CodeMirror.optionHandlers = optionHandlers;
+
+ // Attach the necessary event handlers when initializing the editor
+ function registerEventHandlers(cm) {
+ var d = cm.display;
+ on(d.scroller, "mousedown", operation(cm, onMouseDown));
+ // Older IE's will not fire a second mousedown for a double click
+ if (ie && ie_version < 11)
+ { on(d.scroller, "dblclick", operation(cm, function (e) {
+ if (signalDOMEvent(cm, e)) { return }
+ var pos = posFromMouse(cm, e);
+ if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }
+ e_preventDefault(e);
+ var word = cm.findWordAt(pos);
+ extendSelection(cm.doc, word.anchor, word.head);
+ })); }
+ else
+ { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }
+ // Some browsers fire contextmenu *after* opening the menu, at
+ // which point we can't mess with it anymore. Context menu is
+ // handled in onMouseDown for these browsers.
+ on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); });
+ on(d.input.getField(), "contextmenu", function (e) {
+ if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); }
+ });
+
+ // Used to suppress mouse event handling when a touch happens
+ var touchFinished, prevTouch = {end: 0};
+ function finishTouch() {
+ if (d.activeTouch) {
+ touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);
+ prevTouch = d.activeTouch;
+ prevTouch.end = +new Date;
+ }
+ }
+ function isMouseLikeTouchEvent(e) {
+ if (e.touches.length != 1) { return false }
+ var touch = e.touches[0];
+ return touch.radiusX <= 1 && touch.radiusY <= 1
+ }
+ function farAway(touch, other) {
+ if (other.left == null) { return true }
+ var dx = other.left - touch.left, dy = other.top - touch.top;
+ return dx * dx + dy * dy > 20 * 20
+ }
+ on(d.scroller, "touchstart", function (e) {
+ if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {
+ d.input.ensurePolled();
+ clearTimeout(touchFinished);
+ var now = +new Date;
+ d.activeTouch = {start: now, moved: false,
+ prev: now - prevTouch.end <= 300 ? prevTouch : null};
+ if (e.touches.length == 1) {
+ d.activeTouch.left = e.touches[0].pageX;
+ d.activeTouch.top = e.touches[0].pageY;
+ }
+ }
+ });
+ on(d.scroller, "touchmove", function () {
+ if (d.activeTouch) { d.activeTouch.moved = true; }
+ });
+ on(d.scroller, "touchend", function (e) {
+ var touch = d.activeTouch;
+ if (touch && !eventInWidget(d, e) && touch.left != null &&
+ !touch.moved && new Date - touch.start < 300) {
+ var pos = cm.coordsChar(d.activeTouch, "page"), range;
+ if (!touch.prev || farAway(touch, touch.prev)) // Single tap
+ { range = new Range(pos, pos); }
+ else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap
+ { range = cm.findWordAt(pos); }
+ else // Triple tap
+ { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }
+ cm.setSelection(range.anchor, range.head);
+ cm.focus();
+ e_preventDefault(e);
+ }
+ finishTouch();
+ });
+ on(d.scroller, "touchcancel", finishTouch);
+
+ // Sync scrolling between fake scrollbars and real scrollable
+ // area, ensure viewport is updated when scrolling.
+ on(d.scroller, "scroll", function () {
+ if (d.scroller.clientHeight) {
+ updateScrollTop(cm, d.scroller.scrollTop);
+ setScrollLeft(cm, d.scroller.scrollLeft, true);
+ signal(cm, "scroll", cm);
+ }
+ });
+
+ // Listen to wheel events in order to try and update the viewport on time.
+ on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); });
+ on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); });
+
+ // Prevent wrapper from ever scrolling
+ on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });
+
+ d.dragFunctions = {
+ enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},
+ over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},
+ start: function (e) { return onDragStart(cm, e); },
+ drop: operation(cm, onDrop),
+ leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}
+ };
+
+ var inp = d.input.getField();
+ on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); });
+ on(inp, "keydown", operation(cm, onKeyDown));
+ on(inp, "keypress", operation(cm, onKeyPress));
+ on(inp, "focus", function (e) { return onFocus(cm, e); });
+ on(inp, "blur", function (e) { return onBlur(cm, e); });
+ }
+
+ var initHooks = [];
+ CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };
+
+ // Indent the given line. The how parameter can be "smart",
+ // "add"/null, "subtract", or "prev". When aggressive is false
+ // (typically set to true for forced single-line indents), empty
+ // lines are not indented, and places where the mode returns Pass
+ // are left alone.
+ function indentLine(cm, n, how, aggressive) {
+ var doc = cm.doc, state;
+ if (how == null) { how = "add"; }
+ if (how == "smart") {
+ // Fall back to "prev" when the mode doesn't have an indentation
+ // method.
+ if (!doc.mode.indent) { how = "prev"; }
+ else { state = getContextBefore(cm, n).state; }
+ }
+
+ var tabSize = cm.options.tabSize;
+ var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);
+ if (line.stateAfter) { line.stateAfter = null; }
+ var curSpaceString = line.text.match(/^\s*/)[0], indentation;
+ if (!aggressive && !/\S/.test(line.text)) {
+ indentation = 0;
+ how = "not";
+ } else if (how == "smart") {
+ indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);
+ if (indentation == Pass || indentation > 150) {
+ if (!aggressive) { return }
+ how = "prev";
+ }
+ }
+ if (how == "prev") {
+ if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }
+ else { indentation = 0; }
+ } else if (how == "add") {
+ indentation = curSpace + cm.options.indentUnit;
+ } else if (how == "subtract") {
+ indentation = curSpace - cm.options.indentUnit;
+ } else if (typeof how == "number") {
+ indentation = curSpace + how;
+ }
+ indentation = Math.max(0, indentation);
+
+ var indentString = "", pos = 0;
+ if (cm.options.indentWithTabs)
+ { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} }
+ if (pos < indentation) { indentString += spaceStr(indentation - pos); }
+
+ if (indentString != curSpaceString) {
+ replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input");
+ line.stateAfter = null;
+ return true
+ } else {
+ // Ensure that, if the cursor was in the whitespace at the start
+ // of the line, it is moved to the end of that space.
+ for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {
+ var range = doc.sel.ranges[i$1];
+ if (range.head.line == n && range.head.ch < curSpaceString.length) {
+ var pos$1 = Pos(n, curSpaceString.length);
+ replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));
+ break
+ }
+ }
+ }
+ }
+
+ // This will be set to a {lineWise: bool, text: [string]} object, so
+ // that, when pasting, we know what kind of selections the copied
+ // text was made out of.
+ var lastCopied = null;
+
+ function setLastCopied(newLastCopied) {
+ lastCopied = newLastCopied;
+ }
+
+ function applyTextInput(cm, inserted, deleted, sel, origin) {
+ var doc = cm.doc;
+ cm.display.shift = false;
+ if (!sel) { sel = doc.sel; }
+
+ var recent = +new Date - 200;
+ var paste = origin == "paste" || cm.state.pasteIncoming > recent;
+ var textLines = splitLinesAuto(inserted), multiPaste = null;
+ // When pasting N lines into N selections, insert one line per selection
+ if (paste && sel.ranges.length > 1) {
+ if (lastCopied && lastCopied.text.join("\n") == inserted) {
+ if (sel.ranges.length % lastCopied.text.length == 0) {
+ multiPaste = [];
+ for (var i = 0; i < lastCopied.text.length; i++)
+ { multiPaste.push(doc.splitLines(lastCopied.text[i])); }
+ }
+ } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {
+ multiPaste = map(textLines, function (l) { return [l]; });
+ }
+ }
+
+ var updateInput = cm.curOp.updateInput;
+ // Normal behavior is to insert the new text into every selection
+ for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {
+ var range = sel.ranges[i$1];
+ var from = range.from(), to = range.to();
+ if (range.empty()) {
+ if (deleted && deleted > 0) // Handle deletion
+ { from = Pos(from.line, from.ch - deleted); }
+ else if (cm.state.overwrite && !paste) // Handle overwrite
+ { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }
+ else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == textLines.join("\n"))
+ { from = to = Pos(from.line, 0); }
+ }
+ var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,
+ origin: origin || (paste ? "paste" : cm.state.cutIncoming > recent ? "cut" : "+input")};
+ makeChange(cm.doc, changeEvent);
+ signalLater(cm, "inputRead", cm, changeEvent);
+ }
+ if (inserted && !paste)
+ { triggerElectric(cm, inserted); }
+
+ ensureCursorVisible(cm);
+ if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }
+ cm.curOp.typing = true;
+ cm.state.pasteIncoming = cm.state.cutIncoming = -1;
+ }
+
+ function handlePaste(e, cm) {
+ var pasted = e.clipboardData && e.clipboardData.getData("Text");
+ if (pasted) {
+ e.preventDefault();
+ if (!cm.isReadOnly() && !cm.options.disableInput)
+ { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }); }
+ return true
+ }
+ }
+
+ function triggerElectric(cm, inserted) {
+ // When an 'electric' character is inserted, immediately trigger a reindent
+ if (!cm.options.electricChars || !cm.options.smartIndent) { return }
+ var sel = cm.doc.sel;
+
+ for (var i = sel.ranges.length - 1; i >= 0; i--) {
+ var range = sel.ranges[i];
+ if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue }
+ var mode = cm.getModeAt(range.head);
+ var indented = false;
+ if (mode.electricChars) {
+ for (var j = 0; j < mode.electricChars.length; j++)
+ { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {
+ indented = indentLine(cm, range.head.line, "smart");
+ break
+ } }
+ } else if (mode.electricInput) {
+ if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))
+ { indented = indentLine(cm, range.head.line, "smart"); }
+ }
+ if (indented) { signalLater(cm, "electricInput", cm, range.head.line); }
+ }
+ }
+
+ function copyableRanges(cm) {
+ var text = [], ranges = [];
+ for (var i = 0; i < cm.doc.sel.ranges.length; i++) {
+ var line = cm.doc.sel.ranges[i].head.line;
+ var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};
+ ranges.push(lineRange);
+ text.push(cm.getRange(lineRange.anchor, lineRange.head));
+ }
+ return {text: text, ranges: ranges}
+ }
+
+ function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {
+ field.setAttribute("autocorrect", autocorrect ? "" : "off");
+ field.setAttribute("autocapitalize", autocapitalize ? "" : "off");
+ field.setAttribute("spellcheck", !!spellcheck);
+ }
+
+ function hiddenTextarea() {
+ var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none");
+ var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;");
+ // The textarea is kept positioned near the cursor to prevent the
+ // fact that it'll be scrolled into view on input from scrolling
+ // our fake cursor out of view. On webkit, when wrap=off, paste is
+ // very slow. So make the area wide instead.
+ if (webkit) { te.style.width = "1000px"; }
+ else { te.setAttribute("wrap", "off"); }
+ // If border: 0; -- iOS fails to open keyboard (issue #1287)
+ if (ios) { te.style.border = "1px solid black"; }
+ disableBrowserMagic(te);
+ return div
+ }
+
+ // The publicly visible API. Note that methodOp(f) means
+ // 'wrap f in an operation, performed on its `this` parameter'.
+
+ // This is not the complete set of editor methods. Most of the
+ // methods defined on the Doc type are also injected into
+ // CodeMirror.prototype, for backwards compatibility and
+ // convenience.
+
+ function addEditorMethods(CodeMirror) {
+ var optionHandlers = CodeMirror.optionHandlers;
+
+ var helpers = CodeMirror.helpers = {};
+
+ CodeMirror.prototype = {
+ constructor: CodeMirror,
+ focus: function(){window.focus(); this.display.input.focus();},
+
+ setOption: function(option, value) {
+ var options = this.options, old = options[option];
+ if (options[option] == value && option != "mode") { return }
+ options[option] = value;
+ if (optionHandlers.hasOwnProperty(option))
+ { operation(this, optionHandlers[option])(this, value, old); }
+ signal(this, "optionChange", this, option);
+ },
+
+ getOption: function(option) {return this.options[option]},
+ getDoc: function() {return this.doc},
+
+ addKeyMap: function(map, bottom) {
+ this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map));
+ },
+ removeKeyMap: function(map) {
+ var maps = this.state.keyMaps;
+ for (var i = 0; i < maps.length; ++i)
+ { if (maps[i] == map || maps[i].name == map) {
+ maps.splice(i, 1);
+ return true
+ } }
+ },
+
+ addOverlay: methodOp(function(spec, options) {
+ var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);
+ if (mode.startState) { throw new Error("Overlays may not be stateful.") }
+ insertSorted(this.state.overlays,
+ {mode: mode, modeSpec: spec, opaque: options && options.opaque,
+ priority: (options && options.priority) || 0},
+ function (overlay) { return overlay.priority; });
+ this.state.modeGen++;
+ regChange(this);
+ }),
+ removeOverlay: methodOp(function(spec) {
+ var overlays = this.state.overlays;
+ for (var i = 0; i < overlays.length; ++i) {
+ var cur = overlays[i].modeSpec;
+ if (cur == spec || typeof spec == "string" && cur.name == spec) {
+ overlays.splice(i, 1);
+ this.state.modeGen++;
+ regChange(this);
+ return
+ }
+ }
+ }),
+
+ indentLine: methodOp(function(n, dir, aggressive) {
+ if (typeof dir != "string" && typeof dir != "number") {
+ if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev"; }
+ else { dir = dir ? "add" : "subtract"; }
+ }
+ if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }
+ }),
+ indentSelection: methodOp(function(how) {
+ var ranges = this.doc.sel.ranges, end = -1;
+ for (var i = 0; i < ranges.length; i++) {
+ var range = ranges[i];
+ if (!range.empty()) {
+ var from = range.from(), to = range.to();
+ var start = Math.max(end, from.line);
+ end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;
+ for (var j = start; j < end; ++j)
+ { indentLine(this, j, how); }
+ var newRanges = this.doc.sel.ranges;
+ if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)
+ { replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }
+ } else if (range.head.line > end) {
+ indentLine(this, range.head.line, how, true);
+ end = range.head.line;
+ if (i == this.doc.sel.primIndex) { ensureCursorVisible(this); }
+ }
+ }
+ }),
+
+ // Fetch the parser token for a given character. Useful for hacks
+ // that want to inspect the mode state (say, for completion).
+ getTokenAt: function(pos, precise) {
+ return takeToken(this, pos, precise)
+ },
+
+ getLineTokens: function(line, precise) {
+ return takeToken(this, Pos(line), precise, true)
+ },
+
+ getTokenTypeAt: function(pos) {
+ pos = clipPos(this.doc, pos);
+ var styles = getLineStyles(this, getLine(this.doc, pos.line));
+ var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;
+ var type;
+ if (ch == 0) { type = styles[2]; }
+ else { for (;;) {
+ var mid = (before + after) >> 1;
+ if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }
+ else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }
+ else { type = styles[mid * 2 + 2]; break }
+ } }
+ var cut = type ? type.indexOf("overlay ") : -1;
+ return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)
+ },
+
+ getModeAt: function(pos) {
+ var mode = this.doc.mode;
+ if (!mode.innerMode) { return mode }
+ return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode
+ },
+
+ getHelper: function(pos, type) {
+ return this.getHelpers(pos, type)[0]
+ },
+
+ getHelpers: function(pos, type) {
+ var found = [];
+ if (!helpers.hasOwnProperty(type)) { return found }
+ var help = helpers[type], mode = this.getModeAt(pos);
+ if (typeof mode[type] == "string") {
+ if (help[mode[type]]) { found.push(help[mode[type]]); }
+ } else if (mode[type]) {
+ for (var i = 0; i < mode[type].length; i++) {
+ var val = help[mode[type][i]];
+ if (val) { found.push(val); }
+ }
+ } else if (mode.helperType && help[mode.helperType]) {
+ found.push(help[mode.helperType]);
+ } else if (help[mode.name]) {
+ found.push(help[mode.name]);
+ }
+ for (var i$1 = 0; i$1 < help._global.length; i$1++) {
+ var cur = help._global[i$1];
+ if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)
+ { found.push(cur.val); }
+ }
+ return found
+ },
+
+ getStateAfter: function(line, precise) {
+ var doc = this.doc;
+ line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);
+ return getContextBefore(this, line + 1, precise).state
+ },
+
+ cursorCoords: function(start, mode) {
+ var pos, range = this.doc.sel.primary();
+ if (start == null) { pos = range.head; }
+ else if (typeof start == "object") { pos = clipPos(this.doc, start); }
+ else { pos = start ? range.from() : range.to(); }
+ return cursorCoords(this, pos, mode || "page")
+ },
+
+ charCoords: function(pos, mode) {
+ return charCoords(this, clipPos(this.doc, pos), mode || "page")
+ },
+
+ coordsChar: function(coords, mode) {
+ coords = fromCoordSystem(this, coords, mode || "page");
+ return coordsChar(this, coords.left, coords.top)
+ },
+
+ lineAtHeight: function(height, mode) {
+ height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top;
+ return lineAtHeight(this.doc, height + this.display.viewOffset)
+ },
+ heightAtLine: function(line, mode, includeWidgets) {
+ var end = false, lineObj;
+ if (typeof line == "number") {
+ var last = this.doc.first + this.doc.size - 1;
+ if (line < this.doc.first) { line = this.doc.first; }
+ else if (line > last) { line = last; end = true; }
+ lineObj = getLine(this.doc, line);
+ } else {
+ lineObj = line;
+ }
+ return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets || end).top +
+ (end ? this.doc.height - heightAtLine(lineObj) : 0)
+ },
+
+ defaultTextHeight: function() { return textHeight(this.display) },
+ defaultCharWidth: function() { return charWidth(this.display) },
+
+ getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},
+
+ addWidget: function(pos, node, scroll, vert, horiz) {
+ var display = this.display;
+ pos = cursorCoords(this, clipPos(this.doc, pos));
+ var top = pos.bottom, left = pos.left;
+ node.style.position = "absolute";
+ node.setAttribute("cm-ignore-events", "true");
+ this.display.input.setUneditable(node);
+ display.sizer.appendChild(node);
+ if (vert == "over") {
+ top = pos.top;
+ } else if (vert == "above" || vert == "near") {
+ var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),
+ hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);
+ // Default to positioning above (if specified and possible); otherwise default to positioning below
+ if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)
+ { top = pos.top - node.offsetHeight; }
+ else if (pos.bottom + node.offsetHeight <= vspace)
+ { top = pos.bottom; }
+ if (left + node.offsetWidth > hspace)
+ { left = hspace - node.offsetWidth; }
+ }
+ node.style.top = top + "px";
+ node.style.left = node.style.right = "";
+ if (horiz == "right") {
+ left = display.sizer.clientWidth - node.offsetWidth;
+ node.style.right = "0px";
+ } else {
+ if (horiz == "left") { left = 0; }
+ else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }
+ node.style.left = left + "px";
+ }
+ if (scroll)
+ { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }
+ },
+
+ triggerOnKeyDown: methodOp(onKeyDown),
+ triggerOnKeyPress: methodOp(onKeyPress),
+ triggerOnKeyUp: onKeyUp,
+ triggerOnMouseDown: methodOp(onMouseDown),
+
+ execCommand: function(cmd) {
+ if (commands.hasOwnProperty(cmd))
+ { return commands[cmd].call(null, this) }
+ },
+
+ triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),
+
+ findPosH: function(from, amount, unit, visually) {
+ var dir = 1;
+ if (amount < 0) { dir = -1; amount = -amount; }
+ var cur = clipPos(this.doc, from);
+ for (var i = 0; i < amount; ++i) {
+ cur = findPosH(this.doc, cur, dir, unit, visually);
+ if (cur.hitSide) { break }
+ }
+ return cur
+ },
+
+ moveH: methodOp(function(dir, unit) {
+ var this$1 = this;
+
+ this.extendSelectionsBy(function (range) {
+ if (this$1.display.shift || this$1.doc.extend || range.empty())
+ { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) }
+ else
+ { return dir < 0 ? range.from() : range.to() }
+ }, sel_move);
+ }),
+
+ deleteH: methodOp(function(dir, unit) {
+ var sel = this.doc.sel, doc = this.doc;
+ if (sel.somethingSelected())
+ { doc.replaceSelection("", null, "+delete"); }
+ else
+ { deleteNearSelection(this, function (range) {
+ var other = findPosH(doc, range.head, dir, unit, false);
+ return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}
+ }); }
+ }),
+
+ findPosV: function(from, amount, unit, goalColumn) {
+ var dir = 1, x = goalColumn;
+ if (amount < 0) { dir = -1; amount = -amount; }
+ var cur = clipPos(this.doc, from);
+ for (var i = 0; i < amount; ++i) {
+ var coords = cursorCoords(this, cur, "div");
+ if (x == null) { x = coords.left; }
+ else { coords.left = x; }
+ cur = findPosV(this, coords, dir, unit);
+ if (cur.hitSide) { break }
+ }
+ return cur
+ },
+
+ moveV: methodOp(function(dir, unit) {
+ var this$1 = this;
+
+ var doc = this.doc, goals = [];
+ var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();
+ doc.extendSelectionsBy(function (range) {
+ if (collapse)
+ { return dir < 0 ? range.from() : range.to() }
+ var headPos = cursorCoords(this$1, range.head, "div");
+ if (range.goalColumn != null) { headPos.left = range.goalColumn; }
+ goals.push(headPos.left);
+ var pos = findPosV(this$1, headPos, dir, unit);
+ if (unit == "page" && range == doc.sel.primary())
+ { addToScrollTop(this$1, charCoords(this$1, pos, "div").top - headPos.top); }
+ return pos
+ }, sel_move);
+ if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)
+ { doc.sel.ranges[i].goalColumn = goals[i]; } }
+ }),
+
+ // Find the word at the given position (as returned by coordsChar).
+ findWordAt: function(pos) {
+ var doc = this.doc, line = getLine(doc, pos.line).text;
+ var start = pos.ch, end = pos.ch;
+ if (line) {
+ var helper = this.getHelper(pos, "wordChars");
+ if ((pos.sticky == "before" || end == line.length) && start) { --start; } else { ++end; }
+ var startChar = line.charAt(start);
+ var check = isWordChar(startChar, helper)
+ ? function (ch) { return isWordChar(ch, helper); }
+ : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); }
+ : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); };
+ while (start > 0 && check(line.charAt(start - 1))) { --start; }
+ while (end < line.length && check(line.charAt(end))) { ++end; }
+ }
+ return new Range(Pos(pos.line, start), Pos(pos.line, end))
+ },
+
+ toggleOverwrite: function(value) {
+ if (value != null && value == this.state.overwrite) { return }
+ if (this.state.overwrite = !this.state.overwrite)
+ { addClass(this.display.cursorDiv, "CodeMirror-overwrite"); }
+ else
+ { rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); }
+
+ signal(this, "overwriteToggle", this, this.state.overwrite);
+ },
+ hasFocus: function() { return this.display.input.getField() == activeElt() },
+ isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },
+
+ scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),
+ getScrollInfo: function() {
+ var scroller = this.display.scroller;
+ return {left: scroller.scrollLeft, top: scroller.scrollTop,
+ height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,
+ width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,
+ clientHeight: displayHeight(this), clientWidth: displayWidth(this)}
+ },
+
+ scrollIntoView: methodOp(function(range, margin) {
+ if (range == null) {
+ range = {from: this.doc.sel.primary().head, to: null};
+ if (margin == null) { margin = this.options.cursorScrollMargin; }
+ } else if (typeof range == "number") {
+ range = {from: Pos(range, 0), to: null};
+ } else if (range.from == null) {
+ range = {from: range, to: null};
+ }
+ if (!range.to) { range.to = range.from; }
+ range.margin = margin || 0;
+
+ if (range.from.line != null) {
+ scrollToRange(this, range);
+ } else {
+ scrollToCoordsRange(this, range.from, range.to, range.margin);
+ }
+ }),
+
+ setSize: methodOp(function(width, height) {
+ var this$1 = this;
+
+ var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; };
+ if (width != null) { this.display.wrapper.style.width = interpret(width); }
+ if (height != null) { this.display.wrapper.style.height = interpret(height); }
+ if (this.options.lineWrapping) { clearLineMeasurementCache(this); }
+ var lineNo = this.display.viewFrom;
+ this.doc.iter(lineNo, this.display.viewTo, function (line) {
+ if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)
+ { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, "widget"); break } } }
+ ++lineNo;
+ });
+ this.curOp.forceUpdate = true;
+ signal(this, "refresh", this);
+ }),
+
+ operation: function(f){return runInOp(this, f)},
+ startOperation: function(){return startOperation(this)},
+ endOperation: function(){return endOperation(this)},
+
+ refresh: methodOp(function() {
+ var oldHeight = this.display.cachedTextHeight;
+ regChange(this);
+ this.curOp.forceUpdate = true;
+ clearCaches(this);
+ scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);
+ updateGutterSpace(this.display);
+ if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping)
+ { estimateLineHeights(this); }
+ signal(this, "refresh", this);
+ }),
+
+ swapDoc: methodOp(function(doc) {
+ var old = this.doc;
+ old.cm = null;
+ // Cancel the current text selection if any (#5821)
+ if (this.state.selectingText) { this.state.selectingText(); }
+ attachDoc(this, doc);
+ clearCaches(this);
+ this.display.input.reset();
+ scrollToCoords(this, doc.scrollLeft, doc.scrollTop);
+ this.curOp.forceScroll = true;
+ signalLater(this, "swapDoc", this, old);
+ return old
+ }),
+
+ phrase: function(phraseText) {
+ var phrases = this.options.phrases;
+ return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText
+ },
+
+ getInputField: function(){return this.display.input.getField()},
+ getWrapperElement: function(){return this.display.wrapper},
+ getScrollerElement: function(){return this.display.scroller},
+ getGutterElement: function(){return this.display.gutters}
+ };
+ eventMixin(CodeMirror);
+
+ CodeMirror.registerHelper = function(type, name, value) {
+ if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }
+ helpers[type][name] = value;
+ };
+ CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {
+ CodeMirror.registerHelper(type, name, value);
+ helpers[type]._global.push({pred: predicate, val: value});
+ };
+ }
+
+ // Used for horizontal relative motion. Dir is -1 or 1 (left or
+ // right), unit can be "codepoint", "char", "column" (like char, but
+ // doesn't cross line boundaries), "word" (across next word), or
+ // "group" (to the start of next group of word or
+ // non-word-non-whitespace chars). The visually param controls
+ // whether, in right-to-left text, direction 1 means to move towards
+ // the next index in the string, or towards the character to the right
+ // of the current position. The resulting position will have a
+ // hitSide=true property if it reached the end of the document.
+ function findPosH(doc, pos, dir, unit, visually) {
+ var oldPos = pos;
+ var origDir = dir;
+ var lineObj = getLine(doc, pos.line);
+ var lineDir = visually && doc.direction == "rtl" ? -dir : dir;
+ function findNextLine() {
+ var l = pos.line + lineDir;
+ if (l < doc.first || l >= doc.first + doc.size) { return false }
+ pos = new Pos(l, pos.ch, pos.sticky);
+ return lineObj = getLine(doc, l)
+ }
+ function moveOnce(boundToLine) {
+ var next;
+ if (unit == "codepoint") {
+ var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1));
+ if (isNaN(ch)) {
+ next = null;
+ } else {
+ var astral = dir > 0 ? ch >= 0xD800 && ch < 0xDC00 : ch >= 0xDC00 && ch < 0xDFFF;
+ next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir);
+ }
+ } else if (visually) {
+ next = moveVisually(doc.cm, lineObj, pos, dir);
+ } else {
+ next = moveLogically(lineObj, pos, dir);
+ }
+ if (next == null) {
+ if (!boundToLine && findNextLine())
+ { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); }
+ else
+ { return false }
+ } else {
+ pos = next;
+ }
+ return true
+ }
+
+ if (unit == "char" || unit == "codepoint") {
+ moveOnce();
+ } else if (unit == "column") {
+ moveOnce(true);
+ } else if (unit == "word" || unit == "group") {
+ var sawType = null, group = unit == "group";
+ var helper = doc.cm && doc.cm.getHelper(pos, "wordChars");
+ for (var first = true;; first = false) {
+ if (dir < 0 && !moveOnce(!first)) { break }
+ var cur = lineObj.text.charAt(pos.ch) || "\n";
+ var type = isWordChar(cur, helper) ? "w"
+ : group && cur == "\n" ? "n"
+ : !group || /\s/.test(cur) ? null
+ : "p";
+ if (group && !first && !type) { type = "s"; }
+ if (sawType && sawType != type) {
+ if (dir < 0) {dir = 1; moveOnce(); pos.sticky = "after";}
+ break
+ }
+
+ if (type) { sawType = type; }
+ if (dir > 0 && !moveOnce(!first)) { break }
+ }
+ }
+ var result = skipAtomic(doc, pos, oldPos, origDir, true);
+ if (equalCursorPos(oldPos, result)) { result.hitSide = true; }
+ return result
+ }
+
+ // For relative vertical movement. Dir may be -1 or 1. Unit can be
+ // "page" or "line". The resulting position will have a hitSide=true
+ // property if it reached the end of the document.
+ function findPosV(cm, pos, dir, unit) {
+ var doc = cm.doc, x = pos.left, y;
+ if (unit == "page") {
+ var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);
+ var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);
+ y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;
+
+ } else if (unit == "line") {
+ y = dir > 0 ? pos.bottom + 3 : pos.top - 3;
+ }
+ var target;
+ for (;;) {
+ target = coordsChar(cm, x, y);
+ if (!target.outside) { break }
+ if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }
+ y += dir * 5;
+ }
+ return target
+ }
+
+ // CONTENTEDITABLE INPUT STYLE
+
+ var ContentEditableInput = function(cm) {
+ this.cm = cm;
+ this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;
+ this.polling = new Delayed();
+ this.composing = null;
+ this.gracePeriod = false;
+ this.readDOMTimeout = null;
+ };
+
+ ContentEditableInput.prototype.init = function (display) {
+ var this$1 = this;
+
+ var input = this, cm = input.cm;
+ var div = input.div = display.lineDiv;
+ disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);
+
+ function belongsToInput(e) {
+ for (var t = e.target; t; t = t.parentNode) {
+ if (t == div) { return true }
+ if (/\bCodeMirror-(?:line)?widget\b/.test(t.className)) { break }
+ }
+ return false
+ }
+
+ on(div, "paste", function (e) {
+ if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }
+ // IE doesn't fire input events, so we schedule a read for the pasted content in this way
+ if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }
+ });
+
+ on(div, "compositionstart", function (e) {
+ this$1.composing = {data: e.data, done: false};
+ });
+ on(div, "compositionupdate", function (e) {
+ if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }
+ });
+ on(div, "compositionend", function (e) {
+ if (this$1.composing) {
+ if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }
+ this$1.composing.done = true;
+ }
+ });
+
+ on(div, "touchstart", function () { return input.forceCompositionEnd(); });
+
+ on(div, "input", function () {
+ if (!this$1.composing) { this$1.readFromDOMSoon(); }
+ });
+
+ function onCopyCut(e) {
+ if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return }
+ if (cm.somethingSelected()) {
+ setLastCopied({lineWise: false, text: cm.getSelections()});
+ if (e.type == "cut") { cm.replaceSelection("", null, "cut"); }
+ } else if (!cm.options.lineWiseCopyCut) {
+ return
+ } else {
+ var ranges = copyableRanges(cm);
+ setLastCopied({lineWise: true, text: ranges.text});
+ if (e.type == "cut") {
+ cm.operation(function () {
+ cm.setSelections(ranges.ranges, 0, sel_dontScroll);
+ cm.replaceSelection("", null, "cut");
+ });
+ }
+ }
+ if (e.clipboardData) {
+ e.clipboardData.clearData();
+ var content = lastCopied.text.join("\n");
+ // iOS exposes the clipboard API, but seems to discard content inserted into it
+ e.clipboardData.setData("Text", content);
+ if (e.clipboardData.getData("Text") == content) {
+ e.preventDefault();
+ return
+ }
+ }
+ // Old-fashioned briefly-focus-a-textarea hack
+ var kludge = hiddenTextarea(), te = kludge.firstChild;
+ cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);
+ te.value = lastCopied.text.join("\n");
+ var hadFocus = document.activeElement;
+ selectInput(te);
+ setTimeout(function () {
+ cm.display.lineSpace.removeChild(kludge);
+ hadFocus.focus();
+ if (hadFocus == div) { input.showPrimarySelection(); }
+ }, 50);
+ }
+ on(div, "copy", onCopyCut);
+ on(div, "cut", onCopyCut);
+ };
+
+ ContentEditableInput.prototype.screenReaderLabelChanged = function (label) {
+ // Label for screenreaders, accessibility
+ if(label) {
+ this.div.setAttribute('aria-label', label);
+ } else {
+ this.div.removeAttribute('aria-label');
+ }
+ };
+
+ ContentEditableInput.prototype.prepareSelection = function () {
+ var result = prepareSelection(this.cm, false);
+ result.focus = document.activeElement == this.div;
+ return result
+ };
+
+ ContentEditableInput.prototype.showSelection = function (info, takeFocus) {
+ if (!info || !this.cm.display.view.length) { return }
+ if (info.focus || takeFocus) { this.showPrimarySelection(); }
+ this.showMultipleSelections(info);
+ };
+
+ ContentEditableInput.prototype.getSelection = function () {
+ return this.cm.display.wrapper.ownerDocument.getSelection()
+ };
+
+ ContentEditableInput.prototype.showPrimarySelection = function () {
+ var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();
+ var from = prim.from(), to = prim.to();
+
+ if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {
+ sel.removeAllRanges();
+ return
+ }
+
+ var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);
+ var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);
+ if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&
+ cmp(minPos(curAnchor, curFocus), from) == 0 &&
+ cmp(maxPos(curAnchor, curFocus), to) == 0)
+ { return }
+
+ var view = cm.display.view;
+ var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||
+ {node: view[0].measure.map[2], offset: 0};
+ var end = to.line < cm.display.viewTo && posToDOM(cm, to);
+ if (!end) {
+ var measure = view[view.length - 1].measure;
+ var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;
+ end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]};
+ }
+
+ if (!start || !end) {
+ sel.removeAllRanges();
+ return
+ }
+
+ var old = sel.rangeCount && sel.getRangeAt(0), rng;
+ try { rng = range(start.node, start.offset, end.offset, end.node); }
+ catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible
+ if (rng) {
+ if (!gecko && cm.state.focused) {
+ sel.collapse(start.node, start.offset);
+ if (!rng.collapsed) {
+ sel.removeAllRanges();
+ sel.addRange(rng);
+ }
+ } else {
+ sel.removeAllRanges();
+ sel.addRange(rng);
+ }
+ if (old && sel.anchorNode == null) { sel.addRange(old); }
+ else if (gecko) { this.startGracePeriod(); }
+ }
+ this.rememberSelection();
+ };
+
+ ContentEditableInput.prototype.startGracePeriod = function () {
+ var this$1 = this;
+
+ clearTimeout(this.gracePeriod);
+ this.gracePeriod = setTimeout(function () {
+ this$1.gracePeriod = false;
+ if (this$1.selectionChanged())
+ { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }
+ }, 20);
+ };
+
+ ContentEditableInput.prototype.showMultipleSelections = function (info) {
+ removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);
+ removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);
+ };
+
+ ContentEditableInput.prototype.rememberSelection = function () {
+ var sel = this.getSelection();
+ this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;
+ this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;
+ };
+
+ ContentEditableInput.prototype.selectionInEditor = function () {
+ var sel = this.getSelection();
+ if (!sel.rangeCount) { return false }
+ var node = sel.getRangeAt(0).commonAncestorContainer;
+ return contains(this.div, node)
+ };
+
+ ContentEditableInput.prototype.focus = function () {
+ if (this.cm.options.readOnly != "nocursor") {
+ if (!this.selectionInEditor() || document.activeElement != this.div)
+ { this.showSelection(this.prepareSelection(), true); }
+ this.div.focus();
+ }
+ };
+ ContentEditableInput.prototype.blur = function () { this.div.blur(); };
+ ContentEditableInput.prototype.getField = function () { return this.div };
+
+ ContentEditableInput.prototype.supportsTouch = function () { return true };
+
+ ContentEditableInput.prototype.receivedFocus = function () {
+ var input = this;
+ if (this.selectionInEditor())
+ { this.pollSelection(); }
+ else
+ { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }
+
+ function poll() {
+ if (input.cm.state.focused) {
+ input.pollSelection();
+ input.polling.set(input.cm.options.pollInterval, poll);
+ }
+ }
+ this.polling.set(this.cm.options.pollInterval, poll);
+ };
+
+ ContentEditableInput.prototype.selectionChanged = function () {
+ var sel = this.getSelection();
+ return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||
+ sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset
+ };
+
+ ContentEditableInput.prototype.pollSelection = function () {
+ if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }
+ var sel = this.getSelection(), cm = this.cm;
+ // On Android Chrome (version 56, at least), backspacing into an
+ // uneditable block element will put the cursor in that element,
+ // and then, because it's not editable, hide the virtual keyboard.
+ // Because Android doesn't allow us to actually detect backspace
+ // presses in a sane way, this code checks for when that happens
+ // and simulates a backspace press in this case.
+ if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {
+ this.cm.triggerOnKeyDown({type: "keydown", keyCode: 8, preventDefault: Math.abs});
+ this.blur();
+ this.focus();
+ return
+ }
+ if (this.composing) { return }
+ this.rememberSelection();
+ var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);
+ var head = domToPos(cm, sel.focusNode, sel.focusOffset);
+ if (anchor && head) { runInOp(cm, function () {
+ setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);
+ if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }
+ }); }
+ };
+
+ ContentEditableInput.prototype.pollContent = function () {
+ if (this.readDOMTimeout != null) {
+ clearTimeout(this.readDOMTimeout);
+ this.readDOMTimeout = null;
+ }
+
+ var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();
+ var from = sel.from(), to = sel.to();
+ if (from.ch == 0 && from.line > cm.firstLine())
+ { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }
+ if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())
+ { to = Pos(to.line + 1, 0); }
+ if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }
+
+ var fromIndex, fromLine, fromNode;
+ if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {
+ fromLine = lineNo(display.view[0].line);
+ fromNode = display.view[0].node;
+ } else {
+ fromLine = lineNo(display.view[fromIndex].line);
+ fromNode = display.view[fromIndex - 1].node.nextSibling;
+ }
+ var toIndex = findViewIndex(cm, to.line);
+ var toLine, toNode;
+ if (toIndex == display.view.length - 1) {
+ toLine = display.viewTo - 1;
+ toNode = display.lineDiv.lastChild;
+ } else {
+ toLine = lineNo(display.view[toIndex + 1].line) - 1;
+ toNode = display.view[toIndex + 1].node.previousSibling;
+ }
+
+ if (!fromNode) { return false }
+ var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));
+ var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));
+ while (newText.length > 1 && oldText.length > 1) {
+ if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }
+ else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }
+ else { break }
+ }
+
+ var cutFront = 0, cutEnd = 0;
+ var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);
+ while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))
+ { ++cutFront; }
+ var newBot = lst(newText), oldBot = lst(oldText);
+ var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),
+ oldBot.length - (oldText.length == 1 ? cutFront : 0));
+ while (cutEnd < maxCutEnd &&
+ newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))
+ { ++cutEnd; }
+ // Try to move start of change to start of selection if ambiguous
+ if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {
+ while (cutFront && cutFront > from.ch &&
+ newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {
+ cutFront--;
+ cutEnd++;
+ }
+ }
+
+ newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, "");
+ newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, "");
+
+ var chFrom = Pos(fromLine, cutFront);
+ var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);
+ if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {
+ replaceRange(cm.doc, newText, chFrom, chTo, "+input");
+ return true
+ }
+ };
+
+ ContentEditableInput.prototype.ensurePolled = function () {
+ this.forceCompositionEnd();
+ };
+ ContentEditableInput.prototype.reset = function () {
+ this.forceCompositionEnd();
+ };
+ ContentEditableInput.prototype.forceCompositionEnd = function () {
+ if (!this.composing) { return }
+ clearTimeout(this.readDOMTimeout);
+ this.composing = null;
+ this.updateFromDOM();
+ this.div.blur();
+ this.div.focus();
+ };
+ ContentEditableInput.prototype.readFromDOMSoon = function () {
+ var this$1 = this;
+
+ if (this.readDOMTimeout != null) { return }
+ this.readDOMTimeout = setTimeout(function () {
+ this$1.readDOMTimeout = null;
+ if (this$1.composing) {
+ if (this$1.composing.done) { this$1.composing = null; }
+ else { return }
+ }
+ this$1.updateFromDOM();
+ }, 80);
+ };
+
+ ContentEditableInput.prototype.updateFromDOM = function () {
+ var this$1 = this;
+
+ if (this.cm.isReadOnly() || !this.pollContent())
+ { runInOp(this.cm, function () { return regChange(this$1.cm); }); }
+ };
+
+ ContentEditableInput.prototype.setUneditable = function (node) {
+ node.contentEditable = "false";
+ };
+
+ ContentEditableInput.prototype.onKeyPress = function (e) {
+ if (e.charCode == 0 || this.composing) { return }
+ e.preventDefault();
+ if (!this.cm.isReadOnly())
+ { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }
+ };
+
+ ContentEditableInput.prototype.readOnlyChanged = function (val) {
+ this.div.contentEditable = String(val != "nocursor");
+ };
+
+ ContentEditableInput.prototype.onContextMenu = function () {};
+ ContentEditableInput.prototype.resetPosition = function () {};
+
+ ContentEditableInput.prototype.needsContentAttribute = true;
+
+ function posToDOM(cm, pos) {
+ var view = findViewForLine(cm, pos.line);
+ if (!view || view.hidden) { return null }
+ var line = getLine(cm.doc, pos.line);
+ var info = mapFromLineView(view, line, pos.line);
+
+ var order = getOrder(line, cm.doc.direction), side = "left";
+ if (order) {
+ var partPos = getBidiPartAt(order, pos.ch);
+ side = partPos % 2 ? "right" : "left";
+ }
+ var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);
+ result.offset = result.collapse == "right" ? result.end : result.start;
+ return result
+ }
+
+ function isInGutter(node) {
+ for (var scan = node; scan; scan = scan.parentNode)
+ { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }
+ return false
+ }
+
+ function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }
+
+ function domTextBetween(cm, from, to, fromLine, toLine) {
+ var text = "", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;
+ function recognizeMarker(id) { return function (marker) { return marker.id == id; } }
+ function close() {
+ if (closing) {
+ text += lineSep;
+ if (extraLinebreak) { text += lineSep; }
+ closing = extraLinebreak = false;
+ }
+ }
+ function addText(str) {
+ if (str) {
+ close();
+ text += str;
+ }
+ }
+ function walk(node) {
+ if (node.nodeType == 1) {
+ var cmText = node.getAttribute("cm-text");
+ if (cmText) {
+ addText(cmText);
+ return
+ }
+ var markerID = node.getAttribute("cm-marker"), range;
+ if (markerID) {
+ var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));
+ if (found.length && (range = found[0].find(0)))
+ { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); }
+ return
+ }
+ if (node.getAttribute("contenteditable") == "false") { return }
+ var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);
+ if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }
+
+ if (isBlock) { close(); }
+ for (var i = 0; i < node.childNodes.length; i++)
+ { walk(node.childNodes[i]); }
+
+ if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }
+ if (isBlock) { closing = true; }
+ } else if (node.nodeType == 3) {
+ addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " "));
+ }
+ }
+ for (;;) {
+ walk(from);
+ if (from == to) { break }
+ from = from.nextSibling;
+ extraLinebreak = false;
+ }
+ return text
+ }
+
+ function domToPos(cm, node, offset) {
+ var lineNode;
+ if (node == cm.display.lineDiv) {
+ lineNode = cm.display.lineDiv.childNodes[offset];
+ if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }
+ node = null; offset = 0;
+ } else {
+ for (lineNode = node;; lineNode = lineNode.parentNode) {
+ if (!lineNode || lineNode == cm.display.lineDiv) { return null }
+ if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }
+ }
+ }
+ for (var i = 0; i < cm.display.view.length; i++) {
+ var lineView = cm.display.view[i];
+ if (lineView.node == lineNode)
+ { return locateNodeInLineView(lineView, node, offset) }
+ }
+ }
+
+ function locateNodeInLineView(lineView, node, offset) {
+ var wrapper = lineView.text.firstChild, bad = false;
+ if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }
+ if (node == wrapper) {
+ bad = true;
+ node = wrapper.childNodes[offset];
+ offset = 0;
+ if (!node) {
+ var line = lineView.rest ? lst(lineView.rest) : lineView.line;
+ return badPos(Pos(lineNo(line), line.text.length), bad)
+ }
+ }
+
+ var textNode = node.nodeType == 3 ? node : null, topNode = node;
+ if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {
+ textNode = node.firstChild;
+ if (offset) { offset = textNode.nodeValue.length; }
+ }
+ while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }
+ var measure = lineView.measure, maps = measure.maps;
+
+ function find(textNode, topNode, offset) {
+ for (var i = -1; i < (maps ? maps.length : 0); i++) {
+ var map = i < 0 ? measure.map : maps[i];
+ for (var j = 0; j < map.length; j += 3) {
+ var curNode = map[j + 2];
+ if (curNode == textNode || curNode == topNode) {
+ var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);
+ var ch = map[j] + offset;
+ if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; }
+ return Pos(line, ch)
+ }
+ }
+ }
+ }
+ var found = find(textNode, topNode, offset);
+ if (found) { return badPos(found, bad) }
+
+ // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems
+ for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {
+ found = find(after, after.firstChild, 0);
+ if (found)
+ { return badPos(Pos(found.line, found.ch - dist), bad) }
+ else
+ { dist += after.textContent.length; }
+ }
+ for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {
+ found = find(before, before.firstChild, -1);
+ if (found)
+ { return badPos(Pos(found.line, found.ch + dist$1), bad) }
+ else
+ { dist$1 += before.textContent.length; }
+ }
+ }
+
+ // TEXTAREA INPUT STYLE
+
+ var TextareaInput = function(cm) {
+ this.cm = cm;
+ // See input.poll and input.reset
+ this.prevInput = "";
+
+ // Flag that indicates whether we expect input to appear real soon
+ // now (after some event like 'keypress' or 'input') and are
+ // polling intensively.
+ this.pollingFast = false;
+ // Self-resetting timeout for the poller
+ this.polling = new Delayed();
+ // Used to work around IE issue with selection being forgotten when focus moves away from textarea
+ this.hasSelection = false;
+ this.composing = null;
+ };
+
+ TextareaInput.prototype.init = function (display) {
+ var this$1 = this;
+
+ var input = this, cm = this.cm;
+ this.createField(display);
+ var te = this.textarea;
+
+ display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);
+
+ // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)
+ if (ios) { te.style.width = "0px"; }
+
+ on(te, "input", function () {
+ if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }
+ input.poll();
+ });
+
+ on(te, "paste", function (e) {
+ if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }
+
+ cm.state.pasteIncoming = +new Date;
+ input.fastPoll();
+ });
+
+ function prepareCopyCut(e) {
+ if (signalDOMEvent(cm, e)) { return }
+ if (cm.somethingSelected()) {
+ setLastCopied({lineWise: false, text: cm.getSelections()});
+ } else if (!cm.options.lineWiseCopyCut) {
+ return
+ } else {
+ var ranges = copyableRanges(cm);
+ setLastCopied({lineWise: true, text: ranges.text});
+ if (e.type == "cut") {
+ cm.setSelections(ranges.ranges, null, sel_dontScroll);
+ } else {
+ input.prevInput = "";
+ te.value = ranges.text.join("\n");
+ selectInput(te);
+ }
+ }
+ if (e.type == "cut") { cm.state.cutIncoming = +new Date; }
+ }
+ on(te, "cut", prepareCopyCut);
+ on(te, "copy", prepareCopyCut);
+
+ on(display.scroller, "paste", function (e) {
+ if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }
+ if (!te.dispatchEvent) {
+ cm.state.pasteIncoming = +new Date;
+ input.focus();
+ return
+ }
+
+ // Pass the `paste` event to the textarea so it's handled by its event listener.
+ var event = new Event("paste");
+ event.clipboardData = e.clipboardData;
+ te.dispatchEvent(event);
+ });
+
+ // Prevent normal selection in the editor (we handle our own)
+ on(display.lineSpace, "selectstart", function (e) {
+ if (!eventInWidget(display, e)) { e_preventDefault(e); }
+ });
+
+ on(te, "compositionstart", function () {
+ var start = cm.getCursor("from");
+ if (input.composing) { input.composing.range.clear(); }
+ input.composing = {
+ start: start,
+ range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"})
+ };
+ });
+ on(te, "compositionend", function () {
+ if (input.composing) {
+ input.poll();
+ input.composing.range.clear();
+ input.composing = null;
+ }
+ });
+ };
+
+ TextareaInput.prototype.createField = function (_display) {
+ // Wraps and hides input textarea
+ this.wrapper = hiddenTextarea();
+ // The semihidden textarea that is focused when the editor is
+ // focused, and receives input.
+ this.textarea = this.wrapper.firstChild;
+ };
+
+ TextareaInput.prototype.screenReaderLabelChanged = function (label) {
+ // Label for screenreaders, accessibility
+ if(label) {
+ this.textarea.setAttribute('aria-label', label);
+ } else {
+ this.textarea.removeAttribute('aria-label');
+ }
+ };
+
+ TextareaInput.prototype.prepareSelection = function () {
+ // Redraw the selection and/or cursor
+ var cm = this.cm, display = cm.display, doc = cm.doc;
+ var result = prepareSelection(cm);
+
+ // Move the hidden textarea near the cursor to prevent scrolling artifacts
+ if (cm.options.moveInputWithCursor) {
+ var headPos = cursorCoords(cm, doc.sel.primary().head, "div");
+ var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();
+ result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,
+ headPos.top + lineOff.top - wrapOff.top));
+ result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,
+ headPos.left + lineOff.left - wrapOff.left));
+ }
+
+ return result
+ };
+
+ TextareaInput.prototype.showSelection = function (drawn) {
+ var cm = this.cm, display = cm.display;
+ removeChildrenAndAdd(display.cursorDiv, drawn.cursors);
+ removeChildrenAndAdd(display.selectionDiv, drawn.selection);
+ if (drawn.teTop != null) {
+ this.wrapper.style.top = drawn.teTop + "px";
+ this.wrapper.style.left = drawn.teLeft + "px";
+ }
+ };
+
+ // Reset the input to correspond to the selection (or to be empty,
+ // when not typing and nothing is selected)
+ TextareaInput.prototype.reset = function (typing) {
+ if (this.contextMenuPending || this.composing) { return }
+ var cm = this.cm;
+ if (cm.somethingSelected()) {
+ this.prevInput = "";
+ var content = cm.getSelection();
+ this.textarea.value = content;
+ if (cm.state.focused) { selectInput(this.textarea); }
+ if (ie && ie_version >= 9) { this.hasSelection = content; }
+ } else if (!typing) {
+ this.prevInput = this.textarea.value = "";
+ if (ie && ie_version >= 9) { this.hasSelection = null; }
+ }
+ };
+
+ TextareaInput.prototype.getField = function () { return this.textarea };
+
+ TextareaInput.prototype.supportsTouch = function () { return false };
+
+ TextareaInput.prototype.focus = function () {
+ if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) {
+ try { this.textarea.focus(); }
+ catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM
+ }
+ };
+
+ TextareaInput.prototype.blur = function () { this.textarea.blur(); };
+
+ TextareaInput.prototype.resetPosition = function () {
+ this.wrapper.style.top = this.wrapper.style.left = 0;
+ };
+
+ TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };
+
+ // Poll for input changes, using the normal rate of polling. This
+ // runs as long as the editor is focused.
+ TextareaInput.prototype.slowPoll = function () {
+ var this$1 = this;
+
+ if (this.pollingFast) { return }
+ this.polling.set(this.cm.options.pollInterval, function () {
+ this$1.poll();
+ if (this$1.cm.state.focused) { this$1.slowPoll(); }
+ });
+ };
+
+ // When an event has just come in that is likely to add or change
+ // something in the input textarea, we poll faster, to ensure that
+ // the change appears on the screen quickly.
+ TextareaInput.prototype.fastPoll = function () {
+ var missed = false, input = this;
+ input.pollingFast = true;
+ function p() {
+ var changed = input.poll();
+ if (!changed && !missed) {missed = true; input.polling.set(60, p);}
+ else {input.pollingFast = false; input.slowPoll();}
+ }
+ input.polling.set(20, p);
+ };
+
+ // Read input from the textarea, and update the document to match.
+ // When something is selected, it is present in the textarea, and
+ // selected (unless it is huge, in which case a placeholder is
+ // used). When nothing is selected, the cursor sits after previously
+ // seen text (can be empty), which is stored in prevInput (we must
+ // not reset the textarea when typing, because that breaks IME).
+ TextareaInput.prototype.poll = function () {
+ var this$1 = this;
+
+ var cm = this.cm, input = this.textarea, prevInput = this.prevInput;
+ // Since this is called a *lot*, try to bail out as cheaply as
+ // possible when it is clear that nothing happened. hasSelection
+ // will be the case when there is a lot of text in the textarea,
+ // in which case reading its value would be expensive.
+ if (this.contextMenuPending || !cm.state.focused ||
+ (hasSelection(input) && !prevInput && !this.composing) ||
+ cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)
+ { return false }
+
+ var text = input.value;
+ // If nothing changed, bail.
+ if (text == prevInput && !cm.somethingSelected()) { return false }
+ // Work around nonsensical selection resetting in IE9/10, and
+ // inexplicable appearance of private area unicode characters on
+ // some key combos in Mac (#2689).
+ if (ie && ie_version >= 9 && this.hasSelection === text ||
+ mac && /[\uf700-\uf7ff]/.test(text)) {
+ cm.display.input.reset();
+ return false
+ }
+
+ if (cm.doc.sel == cm.display.selForContextMenu) {
+ var first = text.charCodeAt(0);
+ if (first == 0x200b && !prevInput) { prevInput = "\u200b"; }
+ if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") }
+ }
+ // Find the part of the input that is actually new
+ var same = 0, l = Math.min(prevInput.length, text.length);
+ while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }
+
+ runInOp(cm, function () {
+ applyTextInput(cm, text.slice(same), prevInput.length - same,
+ null, this$1.composing ? "*compose" : null);
+
+ // Don't leave long text in the textarea, since it makes further polling slow
+ if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = ""; }
+ else { this$1.prevInput = text; }
+
+ if (this$1.composing) {
+ this$1.composing.range.clear();
+ this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"),
+ {className: "CodeMirror-composing"});
+ }
+ });
+ return true
+ };
+
+ TextareaInput.prototype.ensurePolled = function () {
+ if (this.pollingFast && this.poll()) { this.pollingFast = false; }
+ };
+
+ TextareaInput.prototype.onKeyPress = function () {
+ if (ie && ie_version >= 9) { this.hasSelection = null; }
+ this.fastPoll();
+ };
+
+ TextareaInput.prototype.onContextMenu = function (e) {
+ var input = this, cm = input.cm, display = cm.display, te = input.textarea;
+ if (input.contextMenuPending) { input.contextMenuPending(); }
+ var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;
+ if (!pos || presto) { return } // Opera is difficult.
+
+ // Reset the current text selection only if the click is done outside of the selection
+ // and 'resetSelectionOnContextMenu' option is true.
+ var reset = cm.options.resetSelectionOnContextMenu;
+ if (reset && cm.doc.sel.contains(pos) == -1)
+ { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }
+
+ var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;
+ var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();
+ input.wrapper.style.cssText = "position: static";
+ te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";
+ var oldScrollY;
+ if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)
+ display.input.focus();
+ if (webkit) { window.scrollTo(null, oldScrollY); }
+ display.input.reset();
+ // Adds "Select all" to context menu in FF
+ if (!cm.somethingSelected()) { te.value = input.prevInput = " "; }
+ input.contextMenuPending = rehide;
+ display.selForContextMenu = cm.doc.sel;
+ clearTimeout(display.detectingSelectAll);
+
+ // Select-all will be greyed out if there's nothing to select, so
+ // this adds a zero-width space so that we can later check whether
+ // it got selected.
+ function prepareSelectAllHack() {
+ if (te.selectionStart != null) {
+ var selected = cm.somethingSelected();
+ var extval = "\u200b" + (selected ? te.value : "");
+ te.value = "\u21da"; // Used to catch context-menu undo
+ te.value = extval;
+ input.prevInput = selected ? "" : "\u200b";
+ te.selectionStart = 1; te.selectionEnd = extval.length;
+ // Re-set this, in case some other handler touched the
+ // selection in the meantime.
+ display.selForContextMenu = cm.doc.sel;
+ }
+ }
+ function rehide() {
+ if (input.contextMenuPending != rehide) { return }
+ input.contextMenuPending = false;
+ input.wrapper.style.cssText = oldWrapperCSS;
+ te.style.cssText = oldCSS;
+ if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }
+
+ // Try to detect the user choosing select-all
+ if (te.selectionStart != null) {
+ if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }
+ var i = 0, poll = function () {
+ if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&
+ te.selectionEnd > 0 && input.prevInput == "\u200b") {
+ operation(cm, selectAll)(cm);
+ } else if (i++ < 10) {
+ display.detectingSelectAll = setTimeout(poll, 500);
+ } else {
+ display.selForContextMenu = null;
+ display.input.reset();
+ }
+ };
+ display.detectingSelectAll = setTimeout(poll, 200);
+ }
+ }
+
+ if (ie && ie_version >= 9) { prepareSelectAllHack(); }
+ if (captureRightClick) {
+ e_stop(e);
+ var mouseup = function () {
+ off(window, "mouseup", mouseup);
+ setTimeout(rehide, 20);
+ };
+ on(window, "mouseup", mouseup);
+ } else {
+ setTimeout(rehide, 50);
+ }
+ };
+
+ TextareaInput.prototype.readOnlyChanged = function (val) {
+ if (!val) { this.reset(); }
+ this.textarea.disabled = val == "nocursor";
+ this.textarea.readOnly = !!val;
+ };
+
+ TextareaInput.prototype.setUneditable = function () {};
+
+ TextareaInput.prototype.needsContentAttribute = false;
+
+ function fromTextArea(textarea, options) {
+ options = options ? copyObj(options) : {};
+ options.value = textarea.value;
+ if (!options.tabindex && textarea.tabIndex)
+ { options.tabindex = textarea.tabIndex; }
+ if (!options.placeholder && textarea.placeholder)
+ { options.placeholder = textarea.placeholder; }
+ // Set autofocus to true if this textarea is focused, or if it has
+ // autofocus and no other element is focused.
+ if (options.autofocus == null) {
+ var hasFocus = activeElt();
+ options.autofocus = hasFocus == textarea ||
+ textarea.getAttribute("autofocus") != null && hasFocus == document.body;
+ }
+
+ function save() {textarea.value = cm.getValue();}
+
+ var realSubmit;
+ if (textarea.form) {
+ on(textarea.form, "submit", save);
+ // Deplorable hack to make the submit method do the right thing.
+ if (!options.leaveSubmitMethodAlone) {
+ var form = textarea.form;
+ realSubmit = form.submit;
+ try {
+ var wrappedSubmit = form.submit = function () {
+ save();
+ form.submit = realSubmit;
+ form.submit();
+ form.submit = wrappedSubmit;
+ };
+ } catch(e) {}
+ }
+ }
+
+ options.finishInit = function (cm) {
+ cm.save = save;
+ cm.getTextArea = function () { return textarea; };
+ cm.toTextArea = function () {
+ cm.toTextArea = isNaN; // Prevent this from being ran twice
+ save();
+ textarea.parentNode.removeChild(cm.getWrapperElement());
+ textarea.style.display = "";
+ if (textarea.form) {
+ off(textarea.form, "submit", save);
+ if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == "function")
+ { textarea.form.submit = realSubmit; }
+ }
+ };
+ };
+
+ textarea.style.display = "none";
+ var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },
+ options);
+ return cm
+ }
+
+ function addLegacyProps(CodeMirror) {
+ CodeMirror.off = off;
+ CodeMirror.on = on;
+ CodeMirror.wheelEventPixels = wheelEventPixels;
+ CodeMirror.Doc = Doc;
+ CodeMirror.splitLines = splitLinesAuto;
+ CodeMirror.countColumn = countColumn;
+ CodeMirror.findColumn = findColumn;
+ CodeMirror.isWordChar = isWordCharBasic;
+ CodeMirror.Pass = Pass;
+ CodeMirror.signal = signal;
+ CodeMirror.Line = Line;
+ CodeMirror.changeEnd = changeEnd;
+ CodeMirror.scrollbarModel = scrollbarModel;
+ CodeMirror.Pos = Pos;
+ CodeMirror.cmpPos = cmp;
+ CodeMirror.modes = modes;
+ CodeMirror.mimeModes = mimeModes;
+ CodeMirror.resolveMode = resolveMode;
+ CodeMirror.getMode = getMode;
+ CodeMirror.modeExtensions = modeExtensions;
+ CodeMirror.extendMode = extendMode;
+ CodeMirror.copyState = copyState;
+ CodeMirror.startState = startState;
+ CodeMirror.innerMode = innerMode;
+ CodeMirror.commands = commands;
+ CodeMirror.keyMap = keyMap;
+ CodeMirror.keyName = keyName;
+ CodeMirror.isModifierKey = isModifierKey;
+ CodeMirror.lookupKey = lookupKey;
+ CodeMirror.normalizeKeyMap = normalizeKeyMap;
+ CodeMirror.StringStream = StringStream;
+ CodeMirror.SharedTextMarker = SharedTextMarker;
+ CodeMirror.TextMarker = TextMarker;
+ CodeMirror.LineWidget = LineWidget;
+ CodeMirror.e_preventDefault = e_preventDefault;
+ CodeMirror.e_stopPropagation = e_stopPropagation;
+ CodeMirror.e_stop = e_stop;
+ CodeMirror.addClass = addClass;
+ CodeMirror.contains = contains;
+ CodeMirror.rmClass = rmClass;
+ CodeMirror.keyNames = keyNames;
+ }
+
+ // EDITOR CONSTRUCTOR
+
+ defineOptions(CodeMirror);
+
+ addEditorMethods(CodeMirror);
+
+ // Set up methods on CodeMirror's prototype to redirect to the editor's document.
+ var dontDelegate = "iter insert remove copy getEditor constructor".split(" ");
+ for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)
+ { CodeMirror.prototype[prop] = (function(method) {
+ return function() {return method.apply(this.doc, arguments)}
+ })(Doc.prototype[prop]); } }
+
+ eventMixin(Doc);
+ CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput};
+
+ // Extra arguments are stored as the mode's dependencies, which is
+ // used by (legacy) mechanisms like loadmode.js to automatically
+ // load a mode. (Preferred mechanism is the require/define calls.)
+ CodeMirror.defineMode = function(name/*, mode, …*/) {
+ if (!CodeMirror.defaults.mode && name != "null") { CodeMirror.defaults.mode = name; }
+ defineMode.apply(this, arguments);
+ };
+
+ CodeMirror.defineMIME = defineMIME;
+
+ // Minimal default mode.
+ CodeMirror.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });
+ CodeMirror.defineMIME("text/plain", "null");
+
+ // EXTENSIONS
+
+ CodeMirror.defineExtension = function (name, func) {
+ CodeMirror.prototype[name] = func;
+ };
+ CodeMirror.defineDocExtension = function (name, func) {
+ Doc.prototype[name] = func;
+ };
+
+ CodeMirror.fromTextArea = fromTextArea;
+
+ addLegacyProps(CodeMirror);
+
+ CodeMirror.version = "5.59.2";
+
+ return CodeMirror;
+
+})));
diff --git a/src/lib/codemirror/mode/css/css.js b/src/lib/codemirror/mode/css/css.js
new file mode 100644
index 0000000..88a869b
--- /dev/null
+++ b/src/lib/codemirror/mode/css/css.js
@@ -0,0 +1,864 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+"use strict";
+
+CodeMirror.defineMode("css", function(config, parserConfig) {
+ var inline = parserConfig.inline
+ if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode("text/css");
+
+ var indentUnit = config.indentUnit,
+ tokenHooks = parserConfig.tokenHooks,
+ documentTypes = parserConfig.documentTypes || {},
+ mediaTypes = parserConfig.mediaTypes || {},
+ mediaFeatures = parserConfig.mediaFeatures || {},
+ mediaValueKeywords = parserConfig.mediaValueKeywords || {},
+ propertyKeywords = parserConfig.propertyKeywords || {},
+ nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {},
+ fontProperties = parserConfig.fontProperties || {},
+ counterDescriptors = parserConfig.counterDescriptors || {},
+ colorKeywords = parserConfig.colorKeywords || {},
+ valueKeywords = parserConfig.valueKeywords || {},
+ allowNested = parserConfig.allowNested,
+ lineComment = parserConfig.lineComment,
+ supportsAtComponent = parserConfig.supportsAtComponent === true,
+ highlightNonStandardPropertyKeywords = config.highlightNonStandardPropertyKeywords !== false;
+
+ var type, override;
+ function ret(style, tp) { type = tp; return style; }
+
+ // Tokenizers
+
+ function tokenBase(stream, state) {
+ var ch = stream.next();
+ if (tokenHooks[ch]) {
+ var result = tokenHooks[ch](stream, state);
+ if (result !== false) return result;
+ }
+ if (ch == "@") {
+ stream.eatWhile(/[\w\\\-]/);
+ return ret("def", stream.current());
+ } else if (ch == "=" || (ch == "~" || ch == "|") && stream.eat("=")) {
+ return ret(null, "compare");
+ } else if (ch == "\"" || ch == "'") {
+ state.tokenize = tokenString(ch);
+ return state.tokenize(stream, state);
+ } else if (ch == "#") {
+ stream.eatWhile(/[\w\\\-]/);
+ return ret("atom", "hash");
+ } else if (ch == "!") {
+ stream.match(/^\s*\w*/);
+ return ret("keyword", "important");
+ } else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) {
+ stream.eatWhile(/[\w.%]/);
+ return ret("number", "unit");
+ } else if (ch === "-") {
+ if (/[\d.]/.test(stream.peek())) {
+ stream.eatWhile(/[\w.%]/);
+ return ret("number", "unit");
+ } else if (stream.match(/^-[\w\\\-]*/)) {
+ stream.eatWhile(/[\w\\\-]/);
+ if (stream.match(/^\s*:/, false))
+ return ret("variable-2", "variable-definition");
+ return ret("variable-2", "variable");
+ } else if (stream.match(/^\w+-/)) {
+ return ret("meta", "meta");
+ }
+ } else if (/[,+>*\/]/.test(ch)) {
+ return ret(null, "select-op");
+ } else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) {
+ return ret("qualifier", "qualifier");
+ } else if (/[:;{}\[\]\(\)]/.test(ch)) {
+ return ret(null, ch);
+ } else if (stream.match(/^[\w-.]+(?=\()/)) {
+ if (/^(url(-prefix)?|domain|regexp)$/i.test(stream.current())) {
+ state.tokenize = tokenParenthesized;
+ }
+ return ret("variable callee", "variable");
+ } else if (/[\w\\\-]/.test(ch)) {
+ stream.eatWhile(/[\w\\\-]/);
+ return ret("property", "word");
+ } else {
+ return ret(null, null);
+ }
+ }
+
+ function tokenString(quote) {
+ return function(stream, state) {
+ var escaped = false, ch;
+ while ((ch = stream.next()) != null) {
+ if (ch == quote && !escaped) {
+ if (quote == ")") stream.backUp(1);
+ break;
+ }
+ escaped = !escaped && ch == "\\";
+ }
+ if (ch == quote || !escaped && quote != ")") state.tokenize = null;
+ return ret("string", "string");
+ };
+ }
+
+ function tokenParenthesized(stream, state) {
+ stream.next(); // Must be '('
+ if (!stream.match(/^\s*[\"\')]/, false))
+ state.tokenize = tokenString(")");
+ else
+ state.tokenize = null;
+ return ret(null, "(");
+ }
+
+ // Context management
+
+ function Context(type, indent, prev) {
+ this.type = type;
+ this.indent = indent;
+ this.prev = prev;
+ }
+
+ function pushContext(state, stream, type, indent) {
+ state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context);
+ return type;
+ }
+
+ function popContext(state) {
+ if (state.context.prev)
+ state.context = state.context.prev;
+ return state.context.type;
+ }
+
+ function pass(type, stream, state) {
+ return states[state.context.type](type, stream, state);
+ }
+ function popAndPass(type, stream, state, n) {
+ for (var i = n || 1; i > 0; i--)
+ state.context = state.context.prev;
+ return pass(type, stream, state);
+ }
+
+ // Parser
+
+ function wordAsValue(stream) {
+ var word = stream.current().toLowerCase();
+ if (valueKeywords.hasOwnProperty(word))
+ override = "atom";
+ else if (colorKeywords.hasOwnProperty(word))
+ override = "keyword";
+ else
+ override = "variable";
+ }
+
+ var states = {};
+
+ states.top = function(type, stream, state) {
+ if (type == "{") {
+ return pushContext(state, stream, "block");
+ } else if (type == "}" && state.context.prev) {
+ return popContext(state);
+ } else if (supportsAtComponent && /@component/i.test(type)) {
+ return pushContext(state, stream, "atComponentBlock");
+ } else if (/^@(-moz-)?document$/i.test(type)) {
+ return pushContext(state, stream, "documentTypes");
+ } else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) {
+ return pushContext(state, stream, "atBlock");
+ } else if (/^@(font-face|counter-style)/i.test(type)) {
+ state.stateArg = type;
+ return "restricted_atBlock_before";
+ } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) {
+ return "keyframes";
+ } else if (type && type.charAt(0) == "@") {
+ return pushContext(state, stream, "at");
+ } else if (type == "hash") {
+ override = "builtin";
+ } else if (type == "word") {
+ override = "tag";
+ } else if (type == "variable-definition") {
+ return "maybeprop";
+ } else if (type == "interpolation") {
+ return pushContext(state, stream, "interpolation");
+ } else if (type == ":") {
+ return "pseudo";
+ } else if (allowNested && type == "(") {
+ return pushContext(state, stream, "parens");
+ }
+ return state.context.type;
+ };
+
+ states.block = function(type, stream, state) {
+ if (type == "word") {
+ var word = stream.current().toLowerCase();
+ if (propertyKeywords.hasOwnProperty(word)) {
+ override = "property";
+ return "maybeprop";
+ } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) {
+ override = highlightNonStandardPropertyKeywords ? "string-2" : "property";
+ return "maybeprop";
+ } else if (allowNested) {
+ override = stream.match(/^\s*:(?:\s|$)/, false) ? "property" : "tag";
+ return "block";
+ } else {
+ override += " error";
+ return "maybeprop";
+ }
+ } else if (type == "meta") {
+ return "block";
+ } else if (!allowNested && (type == "hash" || type == "qualifier")) {
+ override = "error";
+ return "block";
+ } else {
+ return states.top(type, stream, state);
+ }
+ };
+
+ states.maybeprop = function(type, stream, state) {
+ if (type == ":") return pushContext(state, stream, "prop");
+ return pass(type, stream, state);
+ };
+
+ states.prop = function(type, stream, state) {
+ if (type == ";") return popContext(state);
+ if (type == "{" && allowNested) return pushContext(state, stream, "propBlock");
+ if (type == "}" || type == "{") return popAndPass(type, stream, state);
+ if (type == "(") return pushContext(state, stream, "parens");
+
+ if (type == "hash" && !/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())) {
+ override += " error";
+ } else if (type == "word") {
+ wordAsValue(stream);
+ } else if (type == "interpolation") {
+ return pushContext(state, stream, "interpolation");
+ }
+ return "prop";
+ };
+
+ states.propBlock = function(type, _stream, state) {
+ if (type == "}") return popContext(state);
+ if (type == "word") { override = "property"; return "maybeprop"; }
+ return state.context.type;
+ };
+
+ states.parens = function(type, stream, state) {
+ if (type == "{" || type == "}") return popAndPass(type, stream, state);
+ if (type == ")") return popContext(state);
+ if (type == "(") return pushContext(state, stream, "parens");
+ if (type == "interpolation") return pushContext(state, stream, "interpolation");
+ if (type == "word") wordAsValue(stream);
+ return "parens";
+ };
+
+ states.pseudo = function(type, stream, state) {
+ if (type == "meta") return "pseudo";
+
+ if (type == "word") {
+ override = "variable-3";
+ return state.context.type;
+ }
+ return pass(type, stream, state);
+ };
+
+ states.documentTypes = function(type, stream, state) {
+ if (type == "word" && documentTypes.hasOwnProperty(stream.current())) {
+ override = "tag";
+ return state.context.type;
+ } else {
+ return states.atBlock(type, stream, state);
+ }
+ };
+
+ states.atBlock = function(type, stream, state) {
+ if (type == "(") return pushContext(state, stream, "atBlock_parens");
+ if (type == "}" || type == ";") return popAndPass(type, stream, state);
+ if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top");
+
+ if (type == "interpolation") return pushContext(state, stream, "interpolation");
+
+ if (type == "word") {
+ var word = stream.current().toLowerCase();
+ if (word == "only" || word == "not" || word == "and" || word == "or")
+ override = "keyword";
+ else if (mediaTypes.hasOwnProperty(word))
+ override = "attribute";
+ else if (mediaFeatures.hasOwnProperty(word))
+ override = "property";
+ else if (mediaValueKeywords.hasOwnProperty(word))
+ override = "keyword";
+ else if (propertyKeywords.hasOwnProperty(word))
+ override = "property";
+ else if (nonStandardPropertyKeywords.hasOwnProperty(word))
+ override = highlightNonStandardPropertyKeywords ? "string-2" : "property";
+ else if (valueKeywords.hasOwnProperty(word))
+ override = "atom";
+ else if (colorKeywords.hasOwnProperty(word))
+ override = "keyword";
+ else
+ override = "error";
+ }
+ return state.context.type;
+ };
+
+ states.atComponentBlock = function(type, stream, state) {
+ if (type == "}")
+ return popAndPass(type, stream, state);
+ if (type == "{")
+ return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top", false);
+ if (type == "word")
+ override = "error";
+ return state.context.type;
+ };
+
+ states.atBlock_parens = function(type, stream, state) {
+ if (type == ")") return popContext(state);
+ if (type == "{" || type == "}") return popAndPass(type, stream, state, 2);
+ return states.atBlock(type, stream, state);
+ };
+
+ states.restricted_atBlock_before = function(type, stream, state) {
+ if (type == "{")
+ return pushContext(state, stream, "restricted_atBlock");
+ if (type == "word" && state.stateArg == "@counter-style") {
+ override = "variable";
+ return "restricted_atBlock_before";
+ }
+ return pass(type, stream, state);
+ };
+
+ states.restricted_atBlock = function(type, stream, state) {
+ if (type == "}") {
+ state.stateArg = null;
+ return popContext(state);
+ }
+ if (type == "word") {
+ if ((state.stateArg == "@font-face" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) ||
+ (state.stateArg == "@counter-style" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase())))
+ override = "error";
+ else
+ override = "property";
+ return "maybeprop";
+ }
+ return "restricted_atBlock";
+ };
+
+ states.keyframes = function(type, stream, state) {
+ if (type == "word") { override = "variable"; return "keyframes"; }
+ if (type == "{") return pushContext(state, stream, "top");
+ return pass(type, stream, state);
+ };
+
+ states.at = function(type, stream, state) {
+ if (type == ";") return popContext(state);
+ if (type == "{" || type == "}") return popAndPass(type, stream, state);
+ if (type == "word") override = "tag";
+ else if (type == "hash") override = "builtin";
+ return "at";
+ };
+
+ states.interpolation = function(type, stream, state) {
+ if (type == "}") return popContext(state);
+ if (type == "{" || type == ";") return popAndPass(type, stream, state);
+ if (type == "word") override = "variable";
+ else if (type != "variable" && type != "(" && type != ")") override = "error";
+ return "interpolation";
+ };
+
+ return {
+ startState: function(base) {
+ return {tokenize: null,
+ state: inline ? "block" : "top",
+ stateArg: null,
+ context: new Context(inline ? "block" : "top", base || 0, null)};
+ },
+
+ token: function(stream, state) {
+ if (!state.tokenize && stream.eatSpace()) return null;
+ var style = (state.tokenize || tokenBase)(stream, state);
+ if (style && typeof style == "object") {
+ type = style[1];
+ style = style[0];
+ }
+ override = style;
+ if (type != "comment")
+ state.state = states[state.state](type, stream, state);
+ return override;
+ },
+
+ indent: function(state, textAfter) {
+ var cx = state.context, ch = textAfter && textAfter.charAt(0);
+ var indent = cx.indent;
+ if (cx.type == "prop" && (ch == "}" || ch == ")")) cx = cx.prev;
+ if (cx.prev) {
+ if (ch == "}" && (cx.type == "block" || cx.type == "top" ||
+ cx.type == "interpolation" || cx.type == "restricted_atBlock")) {
+ // Resume indentation from parent context.
+ cx = cx.prev;
+ indent = cx.indent;
+ } else if (ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") ||
+ ch == "{" && (cx.type == "at" || cx.type == "atBlock")) {
+ // Dedent relative to current context.
+ indent = Math.max(0, cx.indent - indentUnit);
+ }
+ }
+ return indent;
+ },
+
+ electricChars: "}",
+ blockCommentStart: "/*",
+ blockCommentEnd: "*/",
+ blockCommentContinue: " * ",
+ lineComment: lineComment,
+ fold: "brace"
+ };
+});
+
+ function keySet(array) {
+ var keys = {};
+ for (var i = 0; i < array.length; ++i) {
+ keys[array[i].toLowerCase()] = true;
+ }
+ return keys;
+ }
+
+ var documentTypes_ = [
+ "domain", "regexp", "url", "url-prefix"
+ ], documentTypes = keySet(documentTypes_);
+
+ var mediaTypes_ = [
+ "all", "aural", "braille", "handheld", "print", "projection", "screen",
+ "tty", "tv", "embossed"
+ ], mediaTypes = keySet(mediaTypes_);
+
+ var mediaFeatures_ = [
+ "width", "min-width", "max-width", "height", "min-height", "max-height",
+ "device-width", "min-device-width", "max-device-width", "device-height",
+ "min-device-height", "max-device-height", "aspect-ratio",
+ "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio",
+ "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color",
+ "max-color", "color-index", "min-color-index", "max-color-index",
+ "monochrome", "min-monochrome", "max-monochrome", "resolution",
+ "min-resolution", "max-resolution", "scan", "grid", "orientation",
+ "device-pixel-ratio", "min-device-pixel-ratio", "max-device-pixel-ratio",
+ "pointer", "any-pointer", "hover", "any-hover", "prefers-color-scheme"
+ ], mediaFeatures = keySet(mediaFeatures_);
+
+ var mediaValueKeywords_ = [
+ "landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover",
+ "interlace", "progressive",
+ "dark", "light"
+ ], mediaValueKeywords = keySet(mediaValueKeywords_);
+
+ var propertyKeywords_ = [
+ "align-content", "align-items", "align-self", "alignment-adjust",
+ "alignment-baseline", "all", "anchor-point", "animation", "animation-delay",
+ "animation-direction", "animation-duration", "animation-fill-mode",
+ "animation-iteration-count", "animation-name", "animation-play-state",
+ "animation-timing-function", "appearance", "azimuth", "backdrop-filter",
+ "backface-visibility", "background", "background-attachment",
+ "background-blend-mode", "background-clip", "background-color",
+ "background-image", "background-origin", "background-position",
+ "background-position-x", "background-position-y", "background-repeat",
+ "background-size", "baseline-shift", "binding", "bleed", "block-size",
+ "bookmark-label", "bookmark-level", "bookmark-state", "bookmark-target",
+ "border", "border-bottom", "border-bottom-color", "border-bottom-left-radius",
+ "border-bottom-right-radius", "border-bottom-style", "border-bottom-width",
+ "border-collapse", "border-color", "border-image", "border-image-outset",
+ "border-image-repeat", "border-image-slice", "border-image-source",
+ "border-image-width", "border-left", "border-left-color", "border-left-style",
+ "border-left-width", "border-radius", "border-right", "border-right-color",
+ "border-right-style", "border-right-width", "border-spacing", "border-style",
+ "border-top", "border-top-color", "border-top-left-radius",
+ "border-top-right-radius", "border-top-style", "border-top-width",
+ "border-width", "bottom", "box-decoration-break", "box-shadow", "box-sizing",
+ "break-after", "break-before", "break-inside", "caption-side", "caret-color",
+ "clear", "clip", "color", "color-profile", "column-count", "column-fill",
+ "column-gap", "column-rule", "column-rule-color", "column-rule-style",
+ "column-rule-width", "column-span", "column-width", "columns", "contain",
+ "content", "counter-increment", "counter-reset", "crop", "cue", "cue-after",
+ "cue-before", "cursor", "direction", "display", "dominant-baseline",
+ "drop-initial-after-adjust", "drop-initial-after-align",
+ "drop-initial-before-adjust", "drop-initial-before-align", "drop-initial-size",
+ "drop-initial-value", "elevation", "empty-cells", "fit", "fit-position",
+ "flex", "flex-basis", "flex-direction", "flex-flow", "flex-grow",
+ "flex-shrink", "flex-wrap", "float", "float-offset", "flow-from", "flow-into",
+ "font", "font-family", "font-feature-settings", "font-kerning",
+ "font-language-override", "font-optical-sizing", "font-size",
+ "font-size-adjust", "font-stretch", "font-style", "font-synthesis",
+ "font-variant", "font-variant-alternates", "font-variant-caps",
+ "font-variant-east-asian", "font-variant-ligatures", "font-variant-numeric",
+ "font-variant-position", "font-variation-settings", "font-weight", "gap",
+ "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", "grid-auto-rows",
+ "grid-column", "grid-column-end", "grid-column-gap", "grid-column-start",
+ "grid-gap", "grid-row", "grid-row-end", "grid-row-gap", "grid-row-start",
+ "grid-template", "grid-template-areas", "grid-template-columns",
+ "grid-template-rows", "hanging-punctuation", "height", "hyphens", "icon",
+ "image-orientation", "image-rendering", "image-resolution", "inline-box-align",
+ "inset", "inset-block", "inset-block-end", "inset-block-start", "inset-inline",
+ "inset-inline-end", "inset-inline-start", "isolation", "justify-content",
+ "justify-items", "justify-self", "left", "letter-spacing", "line-break",
+ "line-height", "line-height-step", "line-stacking", "line-stacking-ruby",
+ "line-stacking-shift", "line-stacking-strategy", "list-style",
+ "list-style-image", "list-style-position", "list-style-type", "margin",
+ "margin-bottom", "margin-left", "margin-right", "margin-top", "marks",
+ "marquee-direction", "marquee-loop", "marquee-play-count", "marquee-speed",
+ "marquee-style", "mask-clip", "mask-composite", "mask-image", "mask-mode",
+ "mask-origin", "mask-position", "mask-repeat", "mask-size","mask-type",
+ "max-block-size", "max-height", "max-inline-size",
+ "max-width", "min-block-size", "min-height", "min-inline-size", "min-width",
+ "mix-blend-mode", "move-to", "nav-down", "nav-index", "nav-left", "nav-right",
+ "nav-up", "object-fit", "object-position", "offset", "offset-anchor",
+ "offset-distance", "offset-path", "offset-position", "offset-rotate",
+ "opacity", "order", "orphans", "outline", "outline-color", "outline-offset",
+ "outline-style", "outline-width", "overflow", "overflow-style",
+ "overflow-wrap", "overflow-x", "overflow-y", "padding", "padding-bottom",
+ "padding-left", "padding-right", "padding-top", "page", "page-break-after",
+ "page-break-before", "page-break-inside", "page-policy", "pause",
+ "pause-after", "pause-before", "perspective", "perspective-origin", "pitch",
+ "pitch-range", "place-content", "place-items", "place-self", "play-during",
+ "position", "presentation-level", "punctuation-trim", "quotes",
+ "region-break-after", "region-break-before", "region-break-inside",
+ "region-fragment", "rendering-intent", "resize", "rest", "rest-after",
+ "rest-before", "richness", "right", "rotate", "rotation", "rotation-point",
+ "row-gap", "ruby-align", "ruby-overhang", "ruby-position", "ruby-span",
+ "scale", "scroll-behavior", "scroll-margin", "scroll-margin-block",
+ "scroll-margin-block-end", "scroll-margin-block-start", "scroll-margin-bottom",
+ "scroll-margin-inline", "scroll-margin-inline-end",
+ "scroll-margin-inline-start", "scroll-margin-left", "scroll-margin-right",
+ "scroll-margin-top", "scroll-padding", "scroll-padding-block",
+ "scroll-padding-block-end", "scroll-padding-block-start",
+ "scroll-padding-bottom", "scroll-padding-inline", "scroll-padding-inline-end",
+ "scroll-padding-inline-start", "scroll-padding-left", "scroll-padding-right",
+ "scroll-padding-top", "scroll-snap-align", "scroll-snap-type",
+ "shape-image-threshold", "shape-inside", "shape-margin", "shape-outside",
+ "size", "speak", "speak-as", "speak-header", "speak-numeral",
+ "speak-punctuation", "speech-rate", "stress", "string-set", "tab-size",
+ "table-layout", "target", "target-name", "target-new", "target-position",
+ "text-align", "text-align-last", "text-combine-upright", "text-decoration",
+ "text-decoration-color", "text-decoration-line", "text-decoration-skip",
+ "text-decoration-skip-ink", "text-decoration-style", "text-emphasis",
+ "text-emphasis-color", "text-emphasis-position", "text-emphasis-style",
+ "text-height", "text-indent", "text-justify", "text-orientation",
+ "text-outline", "text-overflow", "text-rendering", "text-shadow",
+ "text-size-adjust", "text-space-collapse", "text-transform",
+ "text-underline-position", "text-wrap", "top", "touch-action", "transform", "transform-origin",
+ "transform-style", "transition", "transition-delay", "transition-duration",
+ "transition-property", "transition-timing-function", "translate",
+ "unicode-bidi", "user-select", "vertical-align", "visibility", "voice-balance",
+ "voice-duration", "voice-family", "voice-pitch", "voice-range", "voice-rate",
+ "voice-stress", "voice-volume", "volume", "white-space", "widows", "width",
+ "will-change", "word-break", "word-spacing", "word-wrap", "writing-mode", "z-index",
+ // SVG-specific
+ "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color",
+ "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events",
+ "color-interpolation", "color-interpolation-filters",
+ "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering",
+ "marker", "marker-end", "marker-mid", "marker-start", "paint-order", "shape-rendering", "stroke",
+ "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin",
+ "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering",
+ "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal",
+ "glyph-orientation-vertical", "text-anchor", "writing-mode",
+ ], propertyKeywords = keySet(propertyKeywords_);
+
+ var nonStandardPropertyKeywords_ = [
+ "border-block", "border-block-color", "border-block-end",
+ "border-block-end-color", "border-block-end-style", "border-block-end-width",
+ "border-block-start", "border-block-start-color", "border-block-start-style",
+ "border-block-start-width", "border-block-style", "border-block-width",
+ "border-inline", "border-inline-color", "border-inline-end",
+ "border-inline-end-color", "border-inline-end-style",
+ "border-inline-end-width", "border-inline-start", "border-inline-start-color",
+ "border-inline-start-style", "border-inline-start-width",
+ "border-inline-style", "border-inline-width", "margin-block",
+ "margin-block-end", "margin-block-start", "margin-inline", "margin-inline-end",
+ "margin-inline-start", "padding-block", "padding-block-end",
+ "padding-block-start", "padding-inline", "padding-inline-end",
+ "padding-inline-start", "scroll-snap-stop", "scrollbar-3d-light-color",
+ "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color",
+ "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color",
+ "scrollbar-track-color", "searchfield-cancel-button", "searchfield-decoration",
+ "searchfield-results-button", "searchfield-results-decoration", "shape-inside", "zoom"
+ ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_);
+
+ var fontProperties_ = [
+ "font-display", "font-family", "src", "unicode-range", "font-variant",
+ "font-feature-settings", "font-stretch", "font-weight", "font-style"
+ ], fontProperties = keySet(fontProperties_);
+
+ var counterDescriptors_ = [
+ "additive-symbols", "fallback", "negative", "pad", "prefix", "range",
+ "speak-as", "suffix", "symbols", "system"
+ ], counterDescriptors = keySet(counterDescriptors_);
+
+ var colorKeywords_ = [
+ "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige",
+ "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown",
+ "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue",
+ "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod",
+ "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen",
+ "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen",
+ "darkslateblue", "darkslategray", "darkturquoise", "darkviolet",
+ "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick",
+ "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite",
+ "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew",
+ "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender",
+ "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral",
+ "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink",
+ "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray",
+ "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta",
+ "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple",
+ "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise",
+ "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin",
+ "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered",
+ "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred",
+ "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue",
+ "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown",
+ "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue",
+ "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan",
+ "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white",
+ "whitesmoke", "yellow", "yellowgreen"
+ ], colorKeywords = keySet(colorKeywords_);
+
+ var valueKeywords_ = [
+ "above", "absolute", "activeborder", "additive", "activecaption", "afar",
+ "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate",
+ "always", "amharic", "amharic-abegede", "antialiased", "appworkspace",
+ "arabic-indic", "armenian", "asterisks", "attr", "auto", "auto-flow", "avoid", "avoid-column", "avoid-page",
+ "avoid-region", "axis-pan", "background", "backwards", "baseline", "below", "bidi-override", "binary",
+ "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box",
+ "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel",
+ "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian",
+ "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret",
+ "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch",
+ "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote",
+ "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse",
+ "compact", "condensed", "contain", "content", "contents",
+ "content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop",
+ "cross", "crosshair", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal",
+ "decimal-leading-zero", "default", "default-button", "dense", "destination-atop",
+ "destination-in", "destination-out", "destination-over", "devanagari", "difference",
+ "disc", "discard", "disclosure-closed", "disclosure-open", "document",
+ "dot-dash", "dot-dot-dash",
+ "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out",
+ "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede",
+ "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er",
+ "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er",
+ "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et",
+ "ethiopic-halehame-gez", "ethiopic-halehame-om-et",
+ "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et",
+ "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig",
+ "ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed",
+ "extra-expanded", "fantasy", "fast", "fill", "fill-box", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes",
+ "forwards", "from", "geometricPrecision", "georgian", "graytext", "grid", "groove",
+ "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew",
+ "help", "hidden", "hide", "higher", "highlight", "highlighttext",
+ "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "hue", "icon", "ignore",
+ "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite",
+ "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis",
+ "inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert",
+ "italic", "japanese-formal", "japanese-informal", "justify", "kannada",
+ "katakana", "katakana-iroha", "keep-all", "khmer",
+ "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal",
+ "landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten",
+ "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem",
+ "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian",
+ "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian",
+ "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "manipulation", "match", "matrix", "matrix3d",
+ "media-controls-background", "media-current-time-display",
+ "media-fullscreen-button", "media-mute-button", "media-play-button",
+ "media-return-to-realtime-button", "media-rewind-button",
+ "media-seek-back-button", "media-seek-forward-button", "media-slider",
+ "media-sliderthumb", "media-time-remaining-display", "media-volume-slider",
+ "media-volume-slider-container", "media-volume-sliderthumb", "medium",
+ "menu", "menulist", "menulist-button", "menulist-text",
+ "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic",
+ "mix", "mongolian", "monospace", "move", "multiple", "multiple_mask_images", "multiply", "myanmar", "n-resize",
+ "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop",
+ "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap",
+ "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "opacity", "open-quote",
+ "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset",
+ "outside", "outside-shape", "overlay", "overline", "padding", "padding-box",
+ "painted", "page", "paused", "persian", "perspective", "pinch-zoom", "plus-darker", "plus-lighter",
+ "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d",
+ "progress", "push-button", "radial-gradient", "radio", "read-only",
+ "read-write", "read-write-plaintext-only", "rectangle", "region",
+ "relative", "repeat", "repeating-linear-gradient",
+ "repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse",
+ "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY",
+ "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running",
+ "s-resize", "sans-serif", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen",
+ "scroll", "scrollbar", "scroll-position", "se-resize", "searchfield",
+ "searchfield-cancel-button", "searchfield-decoration",
+ "searchfield-results-button", "searchfield-results-decoration", "self-start", "self-end",
+ "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama",
+ "simp-chinese-formal", "simp-chinese-informal", "single",
+ "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal",
+ "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow",
+ "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali",
+ "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "space-evenly", "spell-out", "square",
+ "square-button", "start", "static", "status-bar", "stretch", "stroke", "stroke-box", "sub",
+ "subpixel-antialiased", "svg_masks", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table",
+ "table-caption", "table-cell", "table-column", "table-column-group",
+ "table-footer-group", "table-header-group", "table-row", "table-row-group",
+ "tamil",
+ "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai",
+ "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight",
+ "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er",
+ "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top",
+ "trad-chinese-formal", "trad-chinese-informal", "transform",
+ "translate", "translate3d", "translateX", "translateY", "translateZ",
+ "transparent", "ultra-condensed", "ultra-expanded", "underline", "unidirectional-pan", "unset", "up",
+ "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal",
+ "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url",
+ "var", "vertical", "vertical-text", "view-box", "visible", "visibleFill", "visiblePainted",
+ "visibleStroke", "visual", "w-resize", "wait", "wave", "wider",
+ "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor",
+ "xx-large", "xx-small"
+ ], valueKeywords = keySet(valueKeywords_);
+
+ var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_)
+ .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_)
+ .concat(valueKeywords_);
+ CodeMirror.registerHelper("hintWords", "css", allWords);
+
+ function tokenCComment(stream, state) {
+ var maybeEnd = false, ch;
+ while ((ch = stream.next()) != null) {
+ if (maybeEnd && ch == "/") {
+ state.tokenize = null;
+ break;
+ }
+ maybeEnd = (ch == "*");
+ }
+ return ["comment", "comment"];
+ }
+
+ CodeMirror.defineMIME("text/css", {
+ documentTypes: documentTypes,
+ mediaTypes: mediaTypes,
+ mediaFeatures: mediaFeatures,
+ mediaValueKeywords: mediaValueKeywords,
+ propertyKeywords: propertyKeywords,
+ nonStandardPropertyKeywords: nonStandardPropertyKeywords,
+ fontProperties: fontProperties,
+ counterDescriptors: counterDescriptors,
+ colorKeywords: colorKeywords,
+ valueKeywords: valueKeywords,
+ tokenHooks: {
+ "/": function(stream, state) {
+ if (!stream.eat("*")) return false;
+ state.tokenize = tokenCComment;
+ return tokenCComment(stream, state);
+ }
+ },
+ name: "css"
+ });
+
+ CodeMirror.defineMIME("text/x-scss", {
+ mediaTypes: mediaTypes,
+ mediaFeatures: mediaFeatures,
+ mediaValueKeywords: mediaValueKeywords,
+ propertyKeywords: propertyKeywords,
+ nonStandardPropertyKeywords: nonStandardPropertyKeywords,
+ colorKeywords: colorKeywords,
+ valueKeywords: valueKeywords,
+ fontProperties: fontProperties,
+ allowNested: true,
+ lineComment: "//",
+ tokenHooks: {
+ "/": function(stream, state) {
+ if (stream.eat("/")) {
+ stream.skipToEnd();
+ return ["comment", "comment"];
+ } else if (stream.eat("*")) {
+ state.tokenize = tokenCComment;
+ return tokenCComment(stream, state);
+ } else {
+ return ["operator", "operator"];
+ }
+ },
+ ":": function(stream) {
+ if (stream.match(/^\s*\{/, false))
+ return [null, null]
+ return false;
+ },
+ "$": function(stream) {
+ stream.match(/^[\w-]+/);
+ if (stream.match(/^\s*:/, false))
+ return ["variable-2", "variable-definition"];
+ return ["variable-2", "variable"];
+ },
+ "#": function(stream) {
+ if (!stream.eat("{")) return false;
+ return [null, "interpolation"];
+ }
+ },
+ name: "css",
+ helperType: "scss"
+ });
+
+ CodeMirror.defineMIME("text/x-less", {
+ mediaTypes: mediaTypes,
+ mediaFeatures: mediaFeatures,
+ mediaValueKeywords: mediaValueKeywords,
+ propertyKeywords: propertyKeywords,
+ nonStandardPropertyKeywords: nonStandardPropertyKeywords,
+ colorKeywords: colorKeywords,
+ valueKeywords: valueKeywords,
+ fontProperties: fontProperties,
+ allowNested: true,
+ lineComment: "//",
+ tokenHooks: {
+ "/": function(stream, state) {
+ if (stream.eat("/")) {
+ stream.skipToEnd();
+ return ["comment", "comment"];
+ } else if (stream.eat("*")) {
+ state.tokenize = tokenCComment;
+ return tokenCComment(stream, state);
+ } else {
+ return ["operator", "operator"];
+ }
+ },
+ "@": function(stream) {
+ if (stream.eat("{")) return [null, "interpolation"];
+ if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i, false)) return false;
+ stream.eatWhile(/[\w\\\-]/);
+ if (stream.match(/^\s*:/, false))
+ return ["variable-2", "variable-definition"];
+ return ["variable-2", "variable"];
+ },
+ "&": function() {
+ return ["atom", "atom"];
+ }
+ },
+ name: "css",
+ helperType: "less"
+ });
+
+ CodeMirror.defineMIME("text/x-gss", {
+ documentTypes: documentTypes,
+ mediaTypes: mediaTypes,
+ mediaFeatures: mediaFeatures,
+ propertyKeywords: propertyKeywords,
+ nonStandardPropertyKeywords: nonStandardPropertyKeywords,
+ fontProperties: fontProperties,
+ counterDescriptors: counterDescriptors,
+ colorKeywords: colorKeywords,
+ valueKeywords: valueKeywords,
+ supportsAtComponent: true,
+ tokenHooks: {
+ "/": function(stream, state) {
+ if (!stream.eat("*")) return false;
+ state.tokenize = tokenCComment;
+ return tokenCComment(stream, state);
+ }
+ },
+ name: "css",
+ helperType: "gss"
+ });
+
+});
diff --git a/src/lib/codemirror/mode/htmlmixed/htmlmixed.js b/src/lib/codemirror/mode/htmlmixed/htmlmixed.js
new file mode 100644
index 0000000..66a1582
--- /dev/null
+++ b/src/lib/codemirror/mode/htmlmixed/htmlmixed.js
@@ -0,0 +1,153 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"), require("../xml/xml"), require("../javascript/javascript"), require("../css/css"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror", "../xml/xml", "../javascript/javascript", "../css/css"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+ "use strict";
+
+ var defaultTags = {
+ script: [
+ ["lang", /(javascript|babel)/i, "javascript"],
+ ["type", /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i, "javascript"],
+ ["type", /./, "text/plain"],
+ [null, null, "javascript"]
+ ],
+ style: [
+ ["lang", /^css$/i, "css"],
+ ["type", /^(text\/)?(x-)?(stylesheet|css)$/i, "css"],
+ ["type", /./, "text/plain"],
+ [null, null, "css"]
+ ]
+ };
+
+ function maybeBackup(stream, pat, style) {
+ var cur = stream.current(), close = cur.search(pat);
+ if (close > -1) {
+ stream.backUp(cur.length - close);
+ } else if (cur.match(/<\/?$/)) {
+ stream.backUp(cur.length);
+ if (!stream.match(pat, false)) stream.match(cur);
+ }
+ return style;
+ }
+
+ var attrRegexpCache = {};
+ function getAttrRegexp(attr) {
+ var regexp = attrRegexpCache[attr];
+ if (regexp) return regexp;
+ return attrRegexpCache[attr] = new RegExp("\\s+" + attr + "\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*");
+ }
+
+ function getAttrValue(text, attr) {
+ var match = text.match(getAttrRegexp(attr))
+ return match ? /^\s*(.*?)\s*$/.exec(match[2])[1] : ""
+ }
+
+ function getTagRegexp(tagName, anchored) {
+ return new RegExp((anchored ? "^" : "") + "<\/\s*" + tagName + "\s*>", "i");
+ }
+
+ function addTags(from, to) {
+ for (var tag in from) {
+ var dest = to[tag] || (to[tag] = []);
+ var source = from[tag];
+ for (var i = source.length - 1; i >= 0; i--)
+ dest.unshift(source[i])
+ }
+ }
+
+ function findMatchingMode(tagInfo, tagText) {
+ for (var i = 0; i < tagInfo.length; i++) {
+ var spec = tagInfo[i];
+ if (!spec[0] || spec[1].test(getAttrValue(tagText, spec[0]))) return spec[2];
+ }
+ }
+
+ CodeMirror.defineMode("htmlmixed", function (config, parserConfig) {
+ var htmlMode = CodeMirror.getMode(config, {
+ name: "xml",
+ htmlMode: true,
+ multilineTagIndentFactor: parserConfig.multilineTagIndentFactor,
+ multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag,
+ allowMissingTagName: parserConfig.allowMissingTagName,
+ });
+
+ var tags = {};
+ var configTags = parserConfig && parserConfig.tags, configScript = parserConfig && parserConfig.scriptTypes;
+ addTags(defaultTags, tags);
+ if (configTags) addTags(configTags, tags);
+ if (configScript) for (var i = configScript.length - 1; i >= 0; i--)
+ tags.script.unshift(["type", configScript[i].matches, configScript[i].mode])
+
+ function html(stream, state) {
+ var style = htmlMode.token(stream, state.htmlState), tag = /\btag\b/.test(style), tagName
+ if (tag && !/[<>\s\/]/.test(stream.current()) &&
+ (tagName = state.htmlState.tagName && state.htmlState.tagName.toLowerCase()) &&
+ tags.hasOwnProperty(tagName)) {
+ state.inTag = tagName + " "
+ } else if (state.inTag && tag && />$/.test(stream.current())) {
+ var inTag = /^([\S]+) (.*)/.exec(state.inTag)
+ state.inTag = null
+ var modeSpec = stream.current() == ">" && findMatchingMode(tags[inTag[1]], inTag[2])
+ var mode = CodeMirror.getMode(config, modeSpec)
+ var endTagA = getTagRegexp(inTag[1], true), endTag = getTagRegexp(inTag[1], false);
+ state.token = function (stream, state) {
+ if (stream.match(endTagA, false)) {
+ state.token = html;
+ state.localState = state.localMode = null;
+ return null;
+ }
+ return maybeBackup(stream, endTag, state.localMode.token(stream, state.localState));
+ };
+ state.localMode = mode;
+ state.localState = CodeMirror.startState(mode, htmlMode.indent(state.htmlState, "", ""));
+ } else if (state.inTag) {
+ state.inTag += stream.current()
+ if (stream.eol()) state.inTag += " "
+ }
+ return style;
+ };
+
+ return {
+ startState: function () {
+ var state = CodeMirror.startState(htmlMode);
+ return {token: html, inTag: null, localMode: null, localState: null, htmlState: state};
+ },
+
+ copyState: function (state) {
+ var local;
+ if (state.localState) {
+ local = CodeMirror.copyState(state.localMode, state.localState);
+ }
+ return {token: state.token, inTag: state.inTag,
+ localMode: state.localMode, localState: local,
+ htmlState: CodeMirror.copyState(htmlMode, state.htmlState)};
+ },
+
+ token: function (stream, state) {
+ return state.token(stream, state);
+ },
+
+ indent: function (state, textAfter, line) {
+ if (!state.localMode || /^\s*<\//.test(textAfter))
+ return htmlMode.indent(state.htmlState, textAfter, line);
+ else if (state.localMode.indent)
+ return state.localMode.indent(state.localState, textAfter, line);
+ else
+ return CodeMirror.Pass;
+ },
+
+ innerMode: function (state) {
+ return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode};
+ }
+ };
+ }, "xml", "javascript", "css");
+
+ CodeMirror.defineMIME("text/html", "htmlmixed");
+});
diff --git a/src/lib/codemirror/mode/javascript/javascript.js b/src/lib/codemirror/mode/javascript/javascript.js
new file mode 100644
index 0000000..0473956
--- /dev/null
+++ b/src/lib/codemirror/mode/javascript/javascript.js
@@ -0,0 +1,942 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+"use strict";
+
+CodeMirror.defineMode("javascript", function(config, parserConfig) {
+ var indentUnit = config.indentUnit;
+ var statementIndent = parserConfig.statementIndent;
+ var jsonldMode = parserConfig.jsonld;
+ var jsonMode = parserConfig.json || jsonldMode;
+ var isTS = parserConfig.typescript;
+ var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/;
+
+ // Tokenizer
+
+ var keywords = function(){
+ function kw(type) {return {type: type, style: "keyword"};}
+ var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"), D = kw("keyword d");
+ var operator = kw("operator"), atom = {type: "atom", style: "atom"};
+
+ return {
+ "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B,
+ "return": D, "break": D, "continue": D, "new": kw("new"), "delete": C, "void": C, "throw": C,
+ "debugger": kw("debugger"), "var": kw("var"), "const": kw("var"), "let": kw("var"),
+ "function": kw("function"), "catch": kw("catch"),
+ "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"),
+ "in": operator, "typeof": operator, "instanceof": operator,
+ "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom,
+ "this": kw("this"), "class": kw("class"), "super": kw("atom"),
+ "yield": C, "export": kw("export"), "import": kw("import"), "extends": C,
+ "await": C
+ };
+ }();
+
+ var isOperatorChar = /[+\-*&%=<>!?|~^@]/;
+ var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;
+
+ function readRegexp(stream) {
+ var escaped = false, next, inSet = false;
+ while ((next = stream.next()) != null) {
+ if (!escaped) {
+ if (next == "/" && !inSet) return;
+ if (next == "[") inSet = true;
+ else if (inSet && next == "]") inSet = false;
+ }
+ escaped = !escaped && next == "\\";
+ }
+ }
+
+ // Used as scratch variables to communicate multiple values without
+ // consing up tons of objects.
+ var type, content;
+ function ret(tp, style, cont) {
+ type = tp; content = cont;
+ return style;
+ }
+ function tokenBase(stream, state) {
+ var ch = stream.next();
+ if (ch == '"' || ch == "'") {
+ state.tokenize = tokenString(ch);
+ return state.tokenize(stream, state);
+ } else if (ch == "." && stream.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/)) {
+ return ret("number", "number");
+ } else if (ch == "." && stream.match("..")) {
+ return ret("spread", "meta");
+ } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) {
+ return ret(ch);
+ } else if (ch == "=" && stream.eat(">")) {
+ return ret("=>", "operator");
+ } else if (ch == "0" && stream.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/)) {
+ return ret("number", "number");
+ } else if (/\d/.test(ch)) {
+ stream.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/);
+ return ret("number", "number");
+ } else if (ch == "/") {
+ if (stream.eat("*")) {
+ state.tokenize = tokenComment;
+ return tokenComment(stream, state);
+ } else if (stream.eat("/")) {
+ stream.skipToEnd();
+ return ret("comment", "comment");
+ } else if (expressionAllowed(stream, state, 1)) {
+ readRegexp(stream);
+ stream.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/);
+ return ret("regexp", "string-2");
+ } else {
+ stream.eat("=");
+ return ret("operator", "operator", stream.current());
+ }
+ } else if (ch == "`") {
+ state.tokenize = tokenQuasi;
+ return tokenQuasi(stream, state);
+ } else if (ch == "#" && stream.peek() == "!") {
+ stream.skipToEnd();
+ return ret("meta", "meta");
+ } else if (ch == "#" && stream.eatWhile(wordRE)) {
+ return ret("variable", "property")
+ } else if (ch == "<" && stream.match("!--") ||
+ (ch == "-" && stream.match("->") && !/\S/.test(stream.string.slice(0, stream.start)))) {
+ stream.skipToEnd()
+ return ret("comment", "comment")
+ } else if (isOperatorChar.test(ch)) {
+ if (ch != ">" || !state.lexical || state.lexical.type != ">") {
+ if (stream.eat("=")) {
+ if (ch == "!" || ch == "=") stream.eat("=")
+ } else if (/[<>*+\-|&?]/.test(ch)) {
+ stream.eat(ch)
+ if (ch == ">") stream.eat(ch)
+ }
+ }
+ if (ch == "?" && stream.eat(".")) return ret(".")
+ return ret("operator", "operator", stream.current());
+ } else if (wordRE.test(ch)) {
+ stream.eatWhile(wordRE);
+ var word = stream.current()
+ if (state.lastType != ".") {
+ if (keywords.propertyIsEnumerable(word)) {
+ var kw = keywords[word]
+ return ret(kw.type, kw.style, word)
+ }
+ if (word == "async" && stream.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/, false))
+ return ret("async", "keyword", word)
+ }
+ return ret("variable", "variable", word)
+ }
+ }
+
+ function tokenString(quote) {
+ return function(stream, state) {
+ var escaped = false, next;
+ if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){
+ state.tokenize = tokenBase;
+ return ret("jsonld-keyword", "meta");
+ }
+ while ((next = stream.next()) != null) {
+ if (next == quote && !escaped) break;
+ escaped = !escaped && next == "\\";
+ }
+ if (!escaped) state.tokenize = tokenBase;
+ return ret("string", "string");
+ };
+ }
+
+ function tokenComment(stream, state) {
+ var maybeEnd = false, ch;
+ while (ch = stream.next()) {
+ if (ch == "/" && maybeEnd) {
+ state.tokenize = tokenBase;
+ break;
+ }
+ maybeEnd = (ch == "*");
+ }
+ return ret("comment", "comment");
+ }
+
+ function tokenQuasi(stream, state) {
+ var escaped = false, next;
+ while ((next = stream.next()) != null) {
+ if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) {
+ state.tokenize = tokenBase;
+ break;
+ }
+ escaped = !escaped && next == "\\";
+ }
+ return ret("quasi", "string-2", stream.current());
+ }
+
+ var brackets = "([{}])";
+ // This is a crude lookahead trick to try and notice that we're
+ // parsing the argument patterns for a fat-arrow function before we
+ // actually hit the arrow token. It only works if the arrow is on
+ // the same line as the arguments and there's no strange noise
+ // (comments) in between. Fallback is to only notice when we hit the
+ // arrow, and not declare the arguments as locals for the arrow
+ // body.
+ function findFatArrow(stream, state) {
+ if (state.fatArrowAt) state.fatArrowAt = null;
+ var arrow = stream.string.indexOf("=>", stream.start);
+ if (arrow < 0) return;
+
+ if (isTS) { // Try to skip TypeScript return type declarations after the arguments
+ var m = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(stream.string.slice(stream.start, arrow))
+ if (m) arrow = m.index
+ }
+
+ var depth = 0, sawSomething = false;
+ for (var pos = arrow - 1; pos >= 0; --pos) {
+ var ch = stream.string.charAt(pos);
+ var bracket = brackets.indexOf(ch);
+ if (bracket >= 0 && bracket < 3) {
+ if (!depth) { ++pos; break; }
+ if (--depth == 0) { if (ch == "(") sawSomething = true; break; }
+ } else if (bracket >= 3 && bracket < 6) {
+ ++depth;
+ } else if (wordRE.test(ch)) {
+ sawSomething = true;
+ } else if (/["'\/`]/.test(ch)) {
+ for (;; --pos) {
+ if (pos == 0) return
+ var next = stream.string.charAt(pos - 1)
+ if (next == ch && stream.string.charAt(pos - 2) != "\\") { pos--; break }
+ }
+ } else if (sawSomething && !depth) {
+ ++pos;
+ break;
+ }
+ }
+ if (sawSomething && !depth) state.fatArrowAt = pos;
+ }
+
+ // Parser
+
+ var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true};
+
+ function JSLexical(indented, column, type, align, prev, info) {
+ this.indented = indented;
+ this.column = column;
+ this.type = type;
+ this.prev = prev;
+ this.info = info;
+ if (align != null) this.align = align;
+ }
+
+ function inScope(state, varname) {
+ for (var v = state.localVars; v; v = v.next)
+ if (v.name == varname) return true;
+ for (var cx = state.context; cx; cx = cx.prev) {
+ for (var v = cx.vars; v; v = v.next)
+ if (v.name == varname) return true;
+ }
+ }
+
+ function parseJS(state, style, type, content, stream) {
+ var cc = state.cc;
+ // Communicate our context to the combinators.
+ // (Less wasteful than consing up a hundred closures on every call.)
+ cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style;
+
+ if (!state.lexical.hasOwnProperty("align"))
+ state.lexical.align = true;
+
+ while(true) {
+ var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;
+ if (combinator(type, content)) {
+ while(cc.length && cc[cc.length - 1].lex)
+ cc.pop()();
+ if (cx.marked) return cx.marked;
+ if (type == "variable" && inScope(state, content)) return "variable-2";
+ return style;
+ }
+ }
+ }
+
+ // Combinator utils
+
+ var cx = {state: null, column: null, marked: null, cc: null};
+ function pass() {
+ for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);
+ }
+ function cont() {
+ pass.apply(null, arguments);
+ return true;
+ }
+ function inList(name, list) {
+ for (var v = list; v; v = v.next) if (v.name == name) return true
+ return false;
+ }
+ function register(varname) {
+ var state = cx.state;
+ cx.marked = "def";
+ if (state.context) {
+ if (state.lexical.info == "var" && state.context && state.context.block) {
+ // FIXME function decls are also not block scoped
+ var newContext = registerVarScoped(varname, state.context)
+ if (newContext != null) {
+ state.context = newContext
+ return
+ }
+ } else if (!inList(varname, state.localVars)) {
+ state.localVars = new Var(varname, state.localVars)
+ return
+ }
+ }
+ // Fall through means this is global
+ if (parserConfig.globalVars && !inList(varname, state.globalVars))
+ state.globalVars = new Var(varname, state.globalVars)
+ }
+ function registerVarScoped(varname, context) {
+ if (!context) {
+ return null
+ } else if (context.block) {
+ var inner = registerVarScoped(varname, context.prev)
+ if (!inner) return null
+ if (inner == context.prev) return context
+ return new Context(inner, context.vars, true)
+ } else if (inList(varname, context.vars)) {
+ return context
+ } else {
+ return new Context(context.prev, new Var(varname, context.vars), false)
+ }
+ }
+
+ function isModifier(name) {
+ return name == "public" || name == "private" || name == "protected" || name == "abstract" || name == "readonly"
+ }
+
+ // Combinators
+
+ function Context(prev, vars, block) { this.prev = prev; this.vars = vars; this.block = block }
+ function Var(name, next) { this.name = name; this.next = next }
+
+ var defaultVars = new Var("this", new Var("arguments", null))
+ function pushcontext() {
+ cx.state.context = new Context(cx.state.context, cx.state.localVars, false)
+ cx.state.localVars = defaultVars
+ }
+ function pushblockcontext() {
+ cx.state.context = new Context(cx.state.context, cx.state.localVars, true)
+ cx.state.localVars = null
+ }
+ function popcontext() {
+ cx.state.localVars = cx.state.context.vars
+ cx.state.context = cx.state.context.prev
+ }
+ popcontext.lex = true
+ function pushlex(type, info) {
+ var result = function() {
+ var state = cx.state, indent = state.indented;
+ if (state.lexical.type == "stat") indent = state.lexical.indented;
+ else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev)
+ indent = outer.indented;
+ state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);
+ };
+ result.lex = true;
+ return result;
+ }
+ function poplex() {
+ var state = cx.state;
+ if (state.lexical.prev) {
+ if (state.lexical.type == ")")
+ state.indented = state.lexical.indented;
+ state.lexical = state.lexical.prev;
+ }
+ }
+ poplex.lex = true;
+
+ function expect(wanted) {
+ function exp(type) {
+ if (type == wanted) return cont();
+ else if (wanted == ";" || type == "}" || type == ")" || type == "]") return pass();
+ else return cont(exp);
+ };
+ return exp;
+ }
+
+ function statement(type, value) {
+ if (type == "var") return cont(pushlex("vardef", value), vardef, expect(";"), poplex);
+ if (type == "keyword a") return cont(pushlex("form"), parenExpr, statement, poplex);
+ if (type == "keyword b") return cont(pushlex("form"), statement, poplex);
+ if (type == "keyword d") return cx.stream.match(/^\s*$/, false) ? cont() : cont(pushlex("stat"), maybeexpression, expect(";"), poplex);
+ if (type == "debugger") return cont(expect(";"));
+ if (type == "{") return cont(pushlex("}"), pushblockcontext, block, poplex, popcontext);
+ if (type == ";") return cont();
+ if (type == "if") {
+ if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex)
+ cx.state.cc.pop()();
+ return cont(pushlex("form"), parenExpr, statement, poplex, maybeelse);
+ }
+ if (type == "function") return cont(functiondef);
+ if (type == "for") return cont(pushlex("form"), forspec, statement, poplex);
+ if (type == "class" || (isTS && value == "interface")) {
+ cx.marked = "keyword"
+ return cont(pushlex("form", type == "class" ? type : value), className, poplex)
+ }
+ if (type == "variable") {
+ if (isTS && value == "declare") {
+ cx.marked = "keyword"
+ return cont(statement)
+ } else if (isTS && (value == "module" || value == "enum" || value == "type") && cx.stream.match(/^\s*\w/, false)) {
+ cx.marked = "keyword"
+ if (value == "enum") return cont(enumdef);
+ else if (value == "type") return cont(typename, expect("operator"), typeexpr, expect(";"));
+ else return cont(pushlex("form"), pattern, expect("{"), pushlex("}"), block, poplex, poplex)
+ } else if (isTS && value == "namespace") {
+ cx.marked = "keyword"
+ return cont(pushlex("form"), expression, statement, poplex)
+ } else if (isTS && value == "abstract") {
+ cx.marked = "keyword"
+ return cont(statement)
+ } else {
+ return cont(pushlex("stat"), maybelabel);
+ }
+ }
+ if (type == "switch") return cont(pushlex("form"), parenExpr, expect("{"), pushlex("}", "switch"), pushblockcontext,
+ block, poplex, poplex, popcontext);
+ if (type == "case") return cont(expression, expect(":"));
+ if (type == "default") return cont(expect(":"));
+ if (type == "catch") return cont(pushlex("form"), pushcontext, maybeCatchBinding, statement, poplex, popcontext);
+ if (type == "export") return cont(pushlex("stat"), afterExport, poplex);
+ if (type == "import") return cont(pushlex("stat"), afterImport, poplex);
+ if (type == "async") return cont(statement)
+ if (value == "@") return cont(expression, statement)
+ return pass(pushlex("stat"), expression, expect(";"), poplex);
+ }
+ function maybeCatchBinding(type) {
+ if (type == "(") return cont(funarg, expect(")"))
+ }
+ function expression(type, value) {
+ return expressionInner(type, value, false);
+ }
+ function expressionNoComma(type, value) {
+ return expressionInner(type, value, true);
+ }
+ function parenExpr(type) {
+ if (type != "(") return pass()
+ return cont(pushlex(")"), maybeexpression, expect(")"), poplex)
+ }
+ function expressionInner(type, value, noComma) {
+ if (cx.state.fatArrowAt == cx.stream.start) {
+ var body = noComma ? arrowBodyNoComma : arrowBody;
+ if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, expect("=>"), body, popcontext);
+ else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext);
+ }
+
+ var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;
+ if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);
+ if (type == "function") return cont(functiondef, maybeop);
+ if (type == "class" || (isTS && value == "interface")) { cx.marked = "keyword"; return cont(pushlex("form"), classExpression, poplex); }
+ if (type == "keyword c" || type == "async") return cont(noComma ? expressionNoComma : expression);
+ if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop);
+ if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression);
+ if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop);
+ if (type == "{") return contCommasep(objprop, "}", null, maybeop);
+ if (type == "quasi") return pass(quasi, maybeop);
+ if (type == "new") return cont(maybeTarget(noComma));
+ if (type == "import") return cont(expression);
+ return cont();
+ }
+ function maybeexpression(type) {
+ if (type.match(/[;\}\)\],]/)) return pass();
+ return pass(expression);
+ }
+
+ function maybeoperatorComma(type, value) {
+ if (type == ",") return cont(maybeexpression);
+ return maybeoperatorNoComma(type, value, false);
+ }
+ function maybeoperatorNoComma(type, value, noComma) {
+ var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;
+ var expr = noComma == false ? expression : expressionNoComma;
+ if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);
+ if (type == "operator") {
+ if (/\+\+|--/.test(value) || isTS && value == "!") return cont(me);
+ if (isTS && value == "<" && cx.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/, false))
+ return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, me);
+ if (value == "?") return cont(expression, expect(":"), expr);
+ return cont(expr);
+ }
+ if (type == "quasi") { return pass(quasi, me); }
+ if (type == ";") return;
+ if (type == "(") return contCommasep(expressionNoComma, ")", "call", me);
+ if (type == ".") return cont(property, me);
+ if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me);
+ if (isTS && value == "as") { cx.marked = "keyword"; return cont(typeexpr, me) }
+ if (type == "regexp") {
+ cx.state.lastType = cx.marked = "operator"
+ cx.stream.backUp(cx.stream.pos - cx.stream.start - 1)
+ return cont(expr)
+ }
+ }
+ function quasi(type, value) {
+ if (type != "quasi") return pass();
+ if (value.slice(value.length - 2) != "${") return cont(quasi);
+ return cont(expression, continueQuasi);
+ }
+ function continueQuasi(type) {
+ if (type == "}") {
+ cx.marked = "string-2";
+ cx.state.tokenize = tokenQuasi;
+ return cont(quasi);
+ }
+ }
+ function arrowBody(type) {
+ findFatArrow(cx.stream, cx.state);
+ return pass(type == "{" ? statement : expression);
+ }
+ function arrowBodyNoComma(type) {
+ findFatArrow(cx.stream, cx.state);
+ return pass(type == "{" ? statement : expressionNoComma);
+ }
+ function maybeTarget(noComma) {
+ return function(type) {
+ if (type == ".") return cont(noComma ? targetNoComma : target);
+ else if (type == "variable" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma)
+ else return pass(noComma ? expressionNoComma : expression);
+ };
+ }
+ function target(_, value) {
+ if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorComma); }
+ }
+ function targetNoComma(_, value) {
+ if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorNoComma); }
+ }
+ function maybelabel(type) {
+ if (type == ":") return cont(poplex, statement);
+ return pass(maybeoperatorComma, expect(";"), poplex);
+ }
+ function property(type) {
+ if (type == "variable") {cx.marked = "property"; return cont();}
+ }
+ function objprop(type, value) {
+ if (type == "async") {
+ cx.marked = "property";
+ return cont(objprop);
+ } else if (type == "variable" || cx.style == "keyword") {
+ cx.marked = "property";
+ if (value == "get" || value == "set") return cont(getterSetter);
+ var m // Work around fat-arrow-detection complication for detecting typescript typed arrow params
+ if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\s*:\s*/, false)))
+ cx.state.fatArrowAt = cx.stream.pos + m[0].length
+ return cont(afterprop);
+ } else if (type == "number" || type == "string") {
+ cx.marked = jsonldMode ? "property" : (cx.style + " property");
+ return cont(afterprop);
+ } else if (type == "jsonld-keyword") {
+ return cont(afterprop);
+ } else if (isTS && isModifier(value)) {
+ cx.marked = "keyword"
+ return cont(objprop)
+ } else if (type == "[") {
+ return cont(expression, maybetype, expect("]"), afterprop);
+ } else if (type == "spread") {
+ return cont(expressionNoComma, afterprop);
+ } else if (value == "*") {
+ cx.marked = "keyword";
+ return cont(objprop);
+ } else if (type == ":") {
+ return pass(afterprop)
+ }
+ }
+ function getterSetter(type) {
+ if (type != "variable") return pass(afterprop);
+ cx.marked = "property";
+ return cont(functiondef);
+ }
+ function afterprop(type) {
+ if (type == ":") return cont(expressionNoComma);
+ if (type == "(") return pass(functiondef);
+ }
+ function commasep(what, end, sep) {
+ function proceed(type, value) {
+ if (sep ? sep.indexOf(type) > -1 : type == ",") {
+ var lex = cx.state.lexical;
+ if (lex.info == "call") lex.pos = (lex.pos || 0) + 1;
+ return cont(function(type, value) {
+ if (type == end || value == end) return pass()
+ return pass(what)
+ }, proceed);
+ }
+ if (type == end || value == end) return cont();
+ if (sep && sep.indexOf(";") > -1) return pass(what)
+ return cont(expect(end));
+ }
+ return function(type, value) {
+ if (type == end || value == end) return cont();
+ return pass(what, proceed);
+ };
+ }
+ function contCommasep(what, end, info) {
+ for (var i = 3; i < arguments.length; i++)
+ cx.cc.push(arguments[i]);
+ return cont(pushlex(end, info), commasep(what, end), poplex);
+ }
+ function block(type) {
+ if (type == "}") return cont();
+ return pass(statement, block);
+ }
+ function maybetype(type, value) {
+ if (isTS) {
+ if (type == ":") return cont(typeexpr);
+ if (value == "?") return cont(maybetype);
+ }
+ }
+ function maybetypeOrIn(type, value) {
+ if (isTS && (type == ":" || value == "in")) return cont(typeexpr)
+ }
+ function mayberettype(type) {
+ if (isTS && type == ":") {
+ if (cx.stream.match(/^\s*\w+\s+is\b/, false)) return cont(expression, isKW, typeexpr)
+ else return cont(typeexpr)
+ }
+ }
+ function isKW(_, value) {
+ if (value == "is") {
+ cx.marked = "keyword"
+ return cont()
+ }
+ }
+ function typeexpr(type, value) {
+ if (value == "keyof" || value == "typeof" || value == "infer") {
+ cx.marked = "keyword"
+ return cont(value == "typeof" ? expressionNoComma : typeexpr)
+ }
+ if (type == "variable" || value == "void") {
+ cx.marked = "type"
+ return cont(afterType)
+ }
+ if (value == "|" || value == "&") return cont(typeexpr)
+ if (type == "string" || type == "number" || type == "atom") return cont(afterType);
+ if (type == "[") return cont(pushlex("]"), commasep(typeexpr, "]", ","), poplex, afterType)
+ if (type == "{") return cont(pushlex("}"), typeprops, poplex, afterType)
+ if (type == "(") return cont(commasep(typearg, ")"), maybeReturnType, afterType)
+ if (type == "<") return cont(commasep(typeexpr, ">"), typeexpr)
+ }
+ function maybeReturnType(type) {
+ if (type == "=>") return cont(typeexpr)
+ }
+ function typeprops(type) {
+ if (type.match(/[\}\)\]]/)) return cont()
+ if (type == "," || type == ";") return cont(typeprops)
+ return pass(typeprop, typeprops)
+ }
+ function typeprop(type, value) {
+ if (type == "variable" || cx.style == "keyword") {
+ cx.marked = "property"
+ return cont(typeprop)
+ } else if (value == "?" || type == "number" || type == "string") {
+ return cont(typeprop)
+ } else if (type == ":") {
+ return cont(typeexpr)
+ } else if (type == "[") {
+ return cont(expect("variable"), maybetypeOrIn, expect("]"), typeprop)
+ } else if (type == "(") {
+ return pass(functiondecl, typeprop)
+ } else if (!type.match(/[;\}\)\],]/)) {
+ return cont()
+ }
+ }
+ function typearg(type, value) {
+ if (type == "variable" && cx.stream.match(/^\s*[?:]/, false) || value == "?") return cont(typearg)
+ if (type == ":") return cont(typeexpr)
+ if (type == "spread") return cont(typearg)
+ return pass(typeexpr)
+ }
+ function afterType(type, value) {
+ if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType)
+ if (value == "|" || type == "." || value == "&") return cont(typeexpr)
+ if (type == "[") return cont(typeexpr, expect("]"), afterType)
+ if (value == "extends" || value == "implements") { cx.marked = "keyword"; return cont(typeexpr) }
+ if (value == "?") return cont(typeexpr, expect(":"), typeexpr)
+ }
+ function maybeTypeArgs(_, value) {
+ if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType)
+ }
+ function typeparam() {
+ return pass(typeexpr, maybeTypeDefault)
+ }
+ function maybeTypeDefault(_, value) {
+ if (value == "=") return cont(typeexpr)
+ }
+ function vardef(_, value) {
+ if (value == "enum") {cx.marked = "keyword"; return cont(enumdef)}
+ return pass(pattern, maybetype, maybeAssign, vardefCont);
+ }
+ function pattern(type, value) {
+ if (isTS && isModifier(value)) { cx.marked = "keyword"; return cont(pattern) }
+ if (type == "variable") { register(value); return cont(); }
+ if (type == "spread") return cont(pattern);
+ if (type == "[") return contCommasep(eltpattern, "]");
+ if (type == "{") return contCommasep(proppattern, "}");
+ }
+ function proppattern(type, value) {
+ if (type == "variable" && !cx.stream.match(/^\s*:/, false)) {
+ register(value);
+ return cont(maybeAssign);
+ }
+ if (type == "variable") cx.marked = "property";
+ if (type == "spread") return cont(pattern);
+ if (type == "}") return pass();
+ if (type == "[") return cont(expression, expect(']'), expect(':'), proppattern);
+ return cont(expect(":"), pattern, maybeAssign);
+ }
+ function eltpattern() {
+ return pass(pattern, maybeAssign)
+ }
+ function maybeAssign(_type, value) {
+ if (value == "=") return cont(expressionNoComma);
+ }
+ function vardefCont(type) {
+ if (type == ",") return cont(vardef);
+ }
+ function maybeelse(type, value) {
+ if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex);
+ }
+ function forspec(type, value) {
+ if (value == "await") return cont(forspec);
+ if (type == "(") return cont(pushlex(")"), forspec1, poplex);
+ }
+ function forspec1(type) {
+ if (type == "var") return cont(vardef, forspec2);
+ if (type == "variable") return cont(forspec2);
+ return pass(forspec2)
+ }
+ function forspec2(type, value) {
+ if (type == ")") return cont()
+ if (type == ";") return cont(forspec2)
+ if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression, forspec2) }
+ return pass(expression, forspec2)
+ }
+ function functiondef(type, value) {
+ if (value == "*") {cx.marked = "keyword"; return cont(functiondef);}
+ if (type == "variable") {register(value); return cont(functiondef);}
+ if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, statement, popcontext);
+ if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondef)
+ }
+ function functiondecl(type, value) {
+ if (value == "*") {cx.marked = "keyword"; return cont(functiondecl);}
+ if (type == "variable") {register(value); return cont(functiondecl);}
+ if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, popcontext);
+ if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondecl)
+ }
+ function typename(type, value) {
+ if (type == "keyword" || type == "variable") {
+ cx.marked = "type"
+ return cont(typename)
+ } else if (value == "<") {
+ return cont(pushlex(">"), commasep(typeparam, ">"), poplex)
+ }
+ }
+ function funarg(type, value) {
+ if (value == "@") cont(expression, funarg)
+ if (type == "spread") return cont(funarg);
+ if (isTS && isModifier(value)) { cx.marked = "keyword"; return cont(funarg); }
+ if (isTS && type == "this") return cont(maybetype, maybeAssign)
+ return pass(pattern, maybetype, maybeAssign);
+ }
+ function classExpression(type, value) {
+ // Class expressions may have an optional name.
+ if (type == "variable") return className(type, value);
+ return classNameAfter(type, value);
+ }
+ function className(type, value) {
+ if (type == "variable") {register(value); return cont(classNameAfter);}
+ }
+ function classNameAfter(type, value) {
+ if (value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, classNameAfter)
+ if (value == "extends" || value == "implements" || (isTS && type == ",")) {
+ if (value == "implements") cx.marked = "keyword";
+ return cont(isTS ? typeexpr : expression, classNameAfter);
+ }
+ if (type == "{") return cont(pushlex("}"), classBody, poplex);
+ }
+ function classBody(type, value) {
+ if (type == "async" ||
+ (type == "variable" &&
+ (value == "static" || value == "get" || value == "set" || (isTS && isModifier(value))) &&
+ cx.stream.match(/^\s+[\w$\xa1-\uffff]/, false))) {
+ cx.marked = "keyword";
+ return cont(classBody);
+ }
+ if (type == "variable" || cx.style == "keyword") {
+ cx.marked = "property";
+ return cont(classfield, classBody);
+ }
+ if (type == "number" || type == "string") return cont(classfield, classBody);
+ if (type == "[")
+ return cont(expression, maybetype, expect("]"), classfield, classBody)
+ if (value == "*") {
+ cx.marked = "keyword";
+ return cont(classBody);
+ }
+ if (isTS && type == "(") return pass(functiondecl, classBody)
+ if (type == ";" || type == ",") return cont(classBody);
+ if (type == "}") return cont();
+ if (value == "@") return cont(expression, classBody)
+ }
+ function classfield(type, value) {
+ if (value == "?") return cont(classfield)
+ if (type == ":") return cont(typeexpr, maybeAssign)
+ if (value == "=") return cont(expressionNoComma)
+ var context = cx.state.lexical.prev, isInterface = context && context.info == "interface"
+ return pass(isInterface ? functiondecl : functiondef)
+ }
+ function afterExport(type, value) {
+ if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); }
+ if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); }
+ if (type == "{") return cont(commasep(exportField, "}"), maybeFrom, expect(";"));
+ return pass(statement);
+ }
+ function exportField(type, value) {
+ if (value == "as") { cx.marked = "keyword"; return cont(expect("variable")); }
+ if (type == "variable") return pass(expressionNoComma, exportField);
+ }
+ function afterImport(type) {
+ if (type == "string") return cont();
+ if (type == "(") return pass(expression);
+ return pass(importSpec, maybeMoreImports, maybeFrom);
+ }
+ function importSpec(type, value) {
+ if (type == "{") return contCommasep(importSpec, "}");
+ if (type == "variable") register(value);
+ if (value == "*") cx.marked = "keyword";
+ return cont(maybeAs);
+ }
+ function maybeMoreImports(type) {
+ if (type == ",") return cont(importSpec, maybeMoreImports)
+ }
+ function maybeAs(_type, value) {
+ if (value == "as") { cx.marked = "keyword"; return cont(importSpec); }
+ }
+ function maybeFrom(_type, value) {
+ if (value == "from") { cx.marked = "keyword"; return cont(expression); }
+ }
+ function arrayLiteral(type) {
+ if (type == "]") return cont();
+ return pass(commasep(expressionNoComma, "]"));
+ }
+ function enumdef() {
+ return pass(pushlex("form"), pattern, expect("{"), pushlex("}"), commasep(enummember, "}"), poplex, poplex)
+ }
+ function enummember() {
+ return pass(pattern, maybeAssign);
+ }
+
+ function isContinuedStatement(state, textAfter) {
+ return state.lastType == "operator" || state.lastType == "," ||
+ isOperatorChar.test(textAfter.charAt(0)) ||
+ /[,.]/.test(textAfter.charAt(0));
+ }
+
+ function expressionAllowed(stream, state, backUp) {
+ return state.tokenize == tokenBase &&
+ /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(state.lastType) ||
+ (state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))))
+ }
+
+ // Interface
+
+ return {
+ startState: function(basecolumn) {
+ var state = {
+ tokenize: tokenBase,
+ lastType: "sof",
+ cc: [],
+ lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false),
+ localVars: parserConfig.localVars,
+ context: parserConfig.localVars && new Context(null, null, false),
+ indented: basecolumn || 0
+ };
+ if (parserConfig.globalVars && typeof parserConfig.globalVars == "object")
+ state.globalVars = parserConfig.globalVars;
+ return state;
+ },
+
+ token: function(stream, state) {
+ if (stream.sol()) {
+ if (!state.lexical.hasOwnProperty("align"))
+ state.lexical.align = false;
+ state.indented = stream.indentation();
+ findFatArrow(stream, state);
+ }
+ if (state.tokenize != tokenComment && stream.eatSpace()) return null;
+ var style = state.tokenize(stream, state);
+ if (type == "comment") return style;
+ state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type;
+ return parseJS(state, style, type, content, stream);
+ },
+
+ indent: function(state, textAfter) {
+ if (state.tokenize == tokenComment || state.tokenize == tokenQuasi) return CodeMirror.Pass;
+ if (state.tokenize != tokenBase) return 0;
+ var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top
+ // Kludge to prevent 'maybelse' from blocking lexical scope pops
+ if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {
+ var c = state.cc[i];
+ if (c == poplex) lexical = lexical.prev;
+ else if (c != maybeelse) break;
+ }
+ while ((lexical.type == "stat" || lexical.type == "form") &&
+ (firstChar == "}" || ((top = state.cc[state.cc.length - 1]) &&
+ (top == maybeoperatorComma || top == maybeoperatorNoComma) &&
+ !/^[,\.=+\-*:?[\(]/.test(textAfter))))
+ lexical = lexical.prev;
+ if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat")
+ lexical = lexical.prev;
+ var type = lexical.type, closing = firstChar == type;
+
+ if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info.length + 1 : 0);
+ else if (type == "form" && firstChar == "{") return lexical.indented;
+ else if (type == "form") return lexical.indented + indentUnit;
+ else if (type == "stat")
+ return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);
+ else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false)
+ return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit);
+ else if (lexical.align) return lexical.column + (closing ? 0 : 1);
+ else return lexical.indented + (closing ? 0 : indentUnit);
+ },
+
+ electricInput: /^\s*(?:case .*?:|default:|\{|\})$/,
+ blockCommentStart: jsonMode ? null : "/*",
+ blockCommentEnd: jsonMode ? null : "*/",
+ blockCommentContinue: jsonMode ? null : " * ",
+ lineComment: jsonMode ? null : "//",
+ fold: "brace",
+ closeBrackets: "()[]{}''\"\"``",
+
+ helperType: jsonMode ? "json" : "javascript",
+ jsonldMode: jsonldMode,
+ jsonMode: jsonMode,
+
+ expressionAllowed: expressionAllowed,
+
+ skipExpression: function(state) {
+ var top = state.cc[state.cc.length - 1]
+ if (top == expression || top == expressionNoComma) state.cc.pop()
+ }
+ };
+});
+
+CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/);
+
+CodeMirror.defineMIME("text/javascript", "javascript");
+CodeMirror.defineMIME("text/ecmascript", "javascript");
+CodeMirror.defineMIME("application/javascript", "javascript");
+CodeMirror.defineMIME("application/x-javascript", "javascript");
+CodeMirror.defineMIME("application/ecmascript", "javascript");
+CodeMirror.defineMIME("application/json", { name: "javascript", json: true });
+CodeMirror.defineMIME("application/x-json", { name: "javascript", json: true });
+CodeMirror.defineMIME("application/manifest+json", { name: "javascript", json: true })
+CodeMirror.defineMIME("application/ld+json", { name: "javascript", jsonld: true });
+CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true });
+CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true });
+
+});
diff --git a/src/lib/codemirror/mode/xml/xml.js b/src/lib/codemirror/mode/xml/xml.js
new file mode 100644
index 0000000..46806ac
--- /dev/null
+++ b/src/lib/codemirror/mode/xml/xml.js
@@ -0,0 +1,413 @@
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+"use strict";
+
+var htmlConfig = {
+ autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,
+ 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,
+ 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,
+ 'track': true, 'wbr': true, 'menuitem': true},
+ implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,
+ 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,
+ 'th': true, 'tr': true},
+ contextGrabbers: {
+ 'dd': {'dd': true, 'dt': true},
+ 'dt': {'dd': true, 'dt': true},
+ 'li': {'li': true},
+ 'option': {'option': true, 'optgroup': true},
+ 'optgroup': {'optgroup': true},
+ 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,
+ 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,
+ 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,
+ 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,
+ 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},
+ 'rp': {'rp': true, 'rt': true},
+ 'rt': {'rp': true, 'rt': true},
+ 'tbody': {'tbody': true, 'tfoot': true},
+ 'td': {'td': true, 'th': true},
+ 'tfoot': {'tbody': true},
+ 'th': {'td': true, 'th': true},
+ 'thead': {'tbody': true, 'tfoot': true},
+ 'tr': {'tr': true}
+ },
+ doNotIndent: {"pre": true},
+ allowUnquoted: true,
+ allowMissing: true,
+ caseFold: true
+}
+
+var xmlConfig = {
+ autoSelfClosers: {},
+ implicitlyClosed: {},
+ contextGrabbers: {},
+ doNotIndent: {},
+ allowUnquoted: false,
+ allowMissing: false,
+ allowMissingTagName: false,
+ caseFold: false
+}
+
+CodeMirror.defineMode("xml", function(editorConf, config_) {
+ var indentUnit = editorConf.indentUnit
+ var config = {}
+ var defaults = config_.htmlMode ? htmlConfig : xmlConfig
+ for (var prop in defaults) config[prop] = defaults[prop]
+ for (var prop in config_) config[prop] = config_[prop]
+
+ // Return variables for tokenizers
+ var type, setStyle;
+
+ function inText(stream, state) {
+ function chain(parser) {
+ state.tokenize = parser;
+ return parser(stream, state);
+ }
+
+ var ch = stream.next();
+ if (ch == "<") {
+ if (stream.eat("!")) {
+ if (stream.eat("[")) {
+ if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>"));
+ else return null;
+ } else if (stream.match("--")) {
+ return chain(inBlock("comment", "-->"));
+ } else if (stream.match("DOCTYPE", true, true)) {
+ stream.eatWhile(/[\w\._\-]/);
+ return chain(doctype(1));
+ } else {
+ return null;
+ }
+ } else if (stream.eat("?")) {
+ stream.eatWhile(/[\w\._\-]/);
+ state.tokenize = inBlock("meta", "?>");
+ return "meta";
+ } else {
+ type = stream.eat("/") ? "closeTag" : "openTag";
+ state.tokenize = inTag;
+ return "tag bracket";
+ }
+ } else if (ch == "&") {
+ var ok;
+ if (stream.eat("#")) {
+ if (stream.eat("x")) {
+ ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";");
+ } else {
+ ok = stream.eatWhile(/[\d]/) && stream.eat(";");
+ }
+ } else {
+ ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";");
+ }
+ return ok ? "atom" : "error";
+ } else {
+ stream.eatWhile(/[^&<]/);
+ return null;
+ }
+ }
+ inText.isInText = true;
+
+ function inTag(stream, state) {
+ var ch = stream.next();
+ if (ch == ">" || (ch == "/" && stream.eat(">"))) {
+ state.tokenize = inText;
+ type = ch == ">" ? "endTag" : "selfcloseTag";
+ return "tag bracket";
+ } else if (ch == "=") {
+ type = "equals";
+ return null;
+ } else if (ch == "<") {
+ state.tokenize = inText;
+ state.state = baseState;
+ state.tagName = state.tagStart = null;
+ var next = state.tokenize(stream, state);
+ return next ? next + " tag error" : "tag error";
+ } else if (/[\'\"]/.test(ch)) {
+ state.tokenize = inAttribute(ch);
+ state.stringStartCol = stream.column();
+ return state.tokenize(stream, state);
+ } else {
+ stream.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/);
+ return "word";
+ }
+ }
+
+ function inAttribute(quote) {
+ var closure = function(stream, state) {
+ while (!stream.eol()) {
+ if (stream.next() == quote) {
+ state.tokenize = inTag;
+ break;
+ }
+ }
+ return "string";
+ };
+ closure.isInAttribute = true;
+ return closure;
+ }
+
+ function inBlock(style, terminator) {
+ return function(stream, state) {
+ while (!stream.eol()) {
+ if (stream.match(terminator)) {
+ state.tokenize = inText;
+ break;
+ }
+ stream.next();
+ }
+ return style;
+ }
+ }
+
+ function doctype(depth) {
+ return function(stream, state) {
+ var ch;
+ while ((ch = stream.next()) != null) {
+ if (ch == "<") {
+ state.tokenize = doctype(depth + 1);
+ return state.tokenize(stream, state);
+ } else if (ch == ">") {
+ if (depth == 1) {
+ state.tokenize = inText;
+ break;
+ } else {
+ state.tokenize = doctype(depth - 1);
+ return state.tokenize(stream, state);
+ }
+ }
+ }
+ return "meta";
+ };
+ }
+
+ function Context(state, tagName, startOfLine) {
+ this.prev = state.context;
+ this.tagName = tagName || "";
+ this.indent = state.indented;
+ this.startOfLine = startOfLine;
+ if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))
+ this.noIndent = true;
+ }
+ function popContext(state) {
+ if (state.context) state.context = state.context.prev;
+ }
+ function maybePopContext(state, nextTagName) {
+ var parentTagName;
+ while (true) {
+ if (!state.context) {
+ return;
+ }
+ parentTagName = state.context.tagName;
+ if (!config.contextGrabbers.hasOwnProperty(parentTagName) ||
+ !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {
+ return;
+ }
+ popContext(state);
+ }
+ }
+
+ function baseState(type, stream, state) {
+ if (type == "openTag") {
+ state.tagStart = stream.column();
+ return tagNameState;
+ } else if (type == "closeTag") {
+ return closeTagNameState;
+ } else {
+ return baseState;
+ }
+ }
+ function tagNameState(type, stream, state) {
+ if (type == "word") {
+ state.tagName = stream.current();
+ setStyle = "tag";
+ return attrState;
+ } else if (config.allowMissingTagName && type == "endTag") {
+ setStyle = "tag bracket";
+ return attrState(type, stream, state);
+ } else {
+ setStyle = "error";
+ return tagNameState;
+ }
+ }
+ function closeTagNameState(type, stream, state) {
+ if (type == "word") {
+ var tagName = stream.current();
+ if (state.context && state.context.tagName != tagName &&
+ config.implicitlyClosed.hasOwnProperty(state.context.tagName))
+ popContext(state);
+ if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {
+ setStyle = "tag";
+ return closeState;
+ } else {
+ setStyle = "tag error";
+ return closeStateErr;
+ }
+ } else if (config.allowMissingTagName && type == "endTag") {
+ setStyle = "tag bracket";
+ return closeState(type, stream, state);
+ } else {
+ setStyle = "error";
+ return closeStateErr;
+ }
+ }
+
+ function closeState(type, _stream, state) {
+ if (type != "endTag") {
+ setStyle = "error";
+ return closeState;
+ }
+ popContext(state);
+ return baseState;
+ }
+ function closeStateErr(type, stream, state) {
+ setStyle = "error";
+ return closeState(type, stream, state);
+ }
+
+ function attrState(type, _stream, state) {
+ if (type == "word") {
+ setStyle = "attribute";
+ return attrEqState;
+ } else if (type == "endTag" || type == "selfcloseTag") {
+ var tagName = state.tagName, tagStart = state.tagStart;
+ state.tagName = state.tagStart = null;
+ if (type == "selfcloseTag" ||
+ config.autoSelfClosers.hasOwnProperty(tagName)) {
+ maybePopContext(state, tagName);
+ } else {
+ maybePopContext(state, tagName);
+ state.context = new Context(state, tagName, tagStart == state.indented);
+ }
+ return baseState;
+ }
+ setStyle = "error";
+ return attrState;
+ }
+ function attrEqState(type, stream, state) {
+ if (type == "equals") return attrValueState;
+ if (!config.allowMissing) setStyle = "error";
+ return attrState(type, stream, state);
+ }
+ function attrValueState(type, stream, state) {
+ if (type == "string") return attrContinuedState;
+ if (type == "word" && config.allowUnquoted) {setStyle = "string"; return attrState;}
+ setStyle = "error";
+ return attrState(type, stream, state);
+ }
+ function attrContinuedState(type, stream, state) {
+ if (type == "string") return attrContinuedState;
+ return attrState(type, stream, state);
+ }
+
+ return {
+ startState: function(baseIndent) {
+ var state = {tokenize: inText,
+ state: baseState,
+ indented: baseIndent || 0,
+ tagName: null, tagStart: null,
+ context: null}
+ if (baseIndent != null) state.baseIndent = baseIndent
+ return state
+ },
+
+ token: function(stream, state) {
+ if (!state.tagName && stream.sol())
+ state.indented = stream.indentation();
+
+ if (stream.eatSpace()) return null;
+ type = null;
+ var style = state.tokenize(stream, state);
+ if ((style || type) && style != "comment") {
+ setStyle = null;
+ state.state = state.state(type || style, stream, state);
+ if (setStyle)
+ style = setStyle == "error" ? style + " error" : setStyle;
+ }
+ return style;
+ },
+
+ indent: function(state, textAfter, fullLine) {
+ var context = state.context;
+ // Indent multi-line strings (e.g. css).
+ if (state.tokenize.isInAttribute) {
+ if (state.tagStart == state.indented)
+ return state.stringStartCol + 1;
+ else
+ return state.indented + indentUnit;
+ }
+ if (context && context.noIndent) return CodeMirror.Pass;
+ if (state.tokenize != inTag && state.tokenize != inText)
+ return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0;
+ // Indent the starts of attribute names.
+ if (state.tagName) {
+ if (config.multilineTagIndentPastTag !== false)
+ return state.tagStart + state.tagName.length + 2;
+ else
+ return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);
+ }
+ if (config.alignCDATA && /<!\[CDATA\[/.test(textAfter)) return 0;
+ var tagAfter = textAfter && /^<(\/)?([\w_:\.-]*)/.exec(textAfter);
+ if (tagAfter && tagAfter[1]) { // Closing tag spotted
+ while (context) {
+ if (context.tagName == tagAfter[2]) {
+ context = context.prev;
+ break;
+ } else if (config.implicitlyClosed.hasOwnProperty(context.tagName)) {
+ context = context.prev;
+ } else {
+ break;
+ }
+ }
+ } else if (tagAfter) { // Opening tag spotted
+ while (context) {
+ var grabbers = config.contextGrabbers[context.tagName];
+ if (grabbers && grabbers.hasOwnProperty(tagAfter[2]))
+ context = context.prev;
+ else
+ break;
+ }
+ }
+ while (context && context.prev && !context.startOfLine)
+ context = context.prev;
+ if (context) return context.indent + indentUnit;
+ else return state.baseIndent || 0;
+ },
+
+ electricInput: /<\/[\s\w:]+>$/,
+ blockCommentStart: "<!--",
+ blockCommentEnd: "-->",
+
+ configuration: config.htmlMode ? "html" : "xml",
+ helperType: config.htmlMode ? "html" : "xml",
+
+ skipAttribute: function(state) {
+ if (state.state == attrValueState)
+ state.state = attrState
+ },
+
+ xmlCurrentTag: function(state) {
+ return state.tagName ? {name: state.tagName, close: state.type == "closeTag"} : null
+ },
+
+ xmlCurrentContext: function(state) {
+ var context = []
+ for (var cx = state.context; cx; cx = cx.prev)
+ context.push(cx.tagName)
+ return context.reverse()
+ }
+ };
+});
+
+CodeMirror.defineMIME("text/xml", "xml");
+CodeMirror.defineMIME("application/xml", "xml");
+if (!CodeMirror.mimeModes.hasOwnProperty("text/html"))
+ CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true});
+
+});
diff --git a/src/lib/codemirror/theme/night.css b/src/lib/codemirror/theme/night.css
new file mode 100644
index 0000000..f631bf4
--- /dev/null
+++ b/src/lib/codemirror/theme/night.css
@@ -0,0 +1,27 @@
+/* Loosely based on the Midnight Textmate theme */
+
+.cm-s-night.CodeMirror { background: #0a001f; color: #f8f8f8; }
+.cm-s-night div.CodeMirror-selected { background: #447; }
+.cm-s-night .CodeMirror-line::selection, .cm-s-night .CodeMirror-line > span::selection, .cm-s-night .CodeMirror-line > span > span::selection { background: rgba(68, 68, 119, .99); }
+.cm-s-night .CodeMirror-line::-moz-selection, .cm-s-night .CodeMirror-line > span::-moz-selection, .cm-s-night .CodeMirror-line > span > span::-moz-selection { background: rgba(68, 68, 119, .99); }
+.cm-s-night .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; }
+.cm-s-night .CodeMirror-guttermarker { color: white; }
+.cm-s-night .CodeMirror-guttermarker-subtle { color: #bbb; }
+.cm-s-night .CodeMirror-linenumber { color: #f8f8f8; }
+.cm-s-night .CodeMirror-cursor { border-left: 1px solid white; }
+
+.cm-s-night span.cm-comment { color: #8900d1; }
+.cm-s-night span.cm-atom { color: #845dc4; }
+.cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; }
+.cm-s-night span.cm-keyword { color: #599eff; }
+.cm-s-night span.cm-string { color: #37f14a; }
+.cm-s-night span.cm-meta { color: #7678e2; }
+.cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; }
+.cm-s-night span.cm-variable-3, .cm-s-night span.cm-def, .cm-s-night span.cm-type { color: white; }
+.cm-s-night span.cm-bracket { color: #8da6ce; }
+.cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; }
+.cm-s-night span.cm-link { color: #845dc4; }
+.cm-s-night span.cm-error { color: #9d1e15; }
+
+.cm-s-night .CodeMirror-activeline-background { background: #1C005A; }
+.cm-s-night .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; }
diff --git a/src/lib/csstree/LICENSE b/src/lib/csstree/LICENSE
new file mode 100644
index 0000000..b46f3c4
--- /dev/null
+++ b/src/lib/csstree/LICENSE
@@ -0,0 +1,19 @@
+Copyright (C) 2016-2022 by Roman Dvornov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/src/lib/csstree/css-tree.js b/src/lib/csstree/css-tree.js
new file mode 100644
index 0000000..90e8bad
--- /dev/null
+++ b/src/lib/csstree/css-tree.js
@@ -0,0 +1,17 @@
+/**
+ * Skipped minification because the original files appears to be already minified.
+ * Original file: /npm/css-tree@2.2.1/dist/csstree.esm.js
+ *
+ * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
+ */
+var ts=Object.create;var nr=Object.defineProperty;var rs=Object.getOwnPropertyDescriptor;var ns=Object.getOwnPropertyNames;var os=Object.getPrototypeOf,is=Object.prototype.hasOwnProperty;var Oe=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),b=(e,t)=>{for(var r in t)nr(e,r,{get:t[r],enumerable:!0})},as=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ns(t))!is.call(e,o)&&o!==r&&nr(e,o,{get:()=>t[o],enumerable:!(n=rs(t,o))||n.enumerable});return e};var ss=(e,t,r)=>(r=e!=null?ts(os(e)):{},as(t||!e||!e.__esModule?nr(r,"default",{value:e,enumerable:!0}):r,e));var Zo=Oe(hr=>{var $o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");hr.encode=function(e){if(0<=e&&e<$o.length)return $o[e];throw new TypeError("Must be between 0 and 63: "+e)};hr.decode=function(e){var t=65,r=90,n=97,o=122,i=48,s=57,u=43,c=47,a=26,l=52;return t<=e&&e<=r?e-t:n<=e&&e<=o?e-n+a:i<=e&&e<=s?e-i+l:e==u?62:e==c?63:-1}});var ni=Oe(fr=>{var Jo=Zo(),mr=5,ei=1<<mr,ti=ei-1,ri=ei;function ys(e){return e<0?(-e<<1)+1:(e<<1)+0}function ks(e){var t=(e&1)===1,r=e>>1;return t?-r:r}fr.encode=function(t){var r="",n,o=ys(t);do n=o&ti,o>>>=mr,o>0&&(n|=ri),r+=Jo.encode(n);while(o>0);return r};fr.decode=function(t,r,n){var o=t.length,i=0,s=0,u,c;do{if(r>=o)throw new Error("Expected more digits in base 64 VLQ value.");if(c=Jo.decode(t.charCodeAt(r++)),c===-1)throw new Error("Invalid base64 digit: "+t.charAt(r-1));u=!!(c&ri),c&=ti,i=i+(c<<s),s+=mr}while(u);n.value=ks(i),n.rest=r}});var Lt=Oe(K=>{function ws(e,t,r){if(t in e)return e[t];if(arguments.length===3)return r;throw new Error('"'+t+'" is a required argument.')}K.getArg=ws;var oi=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,vs=/^data:.+\,.+$/;function ot(e){var t=e.match(oi);return t?{scheme:t[1],auth:t[2],host:t[3],port:t[4],path:t[5]}:null}K.urlParse=ot;function Ue(e){var t="";return e.scheme&&(t+=e.scheme+":"),t+="//",e.auth&&(t+=e.auth+"@"),e.host&&(t+=e.host),e.port&&(t+=":"+e.port),e.path&&(t+=e.path),t}K.urlGenerate=Ue;var Ss=32;function Cs(e){var t=[];return function(r){for(var n=0;n<t.length;n++)if(t[n].input===r){var o=t[0];return t[0]=t[n],t[n]=o,t[0].result}var i=e(r);return t.unshift({input:r,result:i}),t.length>Ss&&t.pop(),i}}var dr=Cs(function(t){var r=t,n=ot(t);if(n){if(!n.path)return t;r=n.path}for(var o=K.isAbsolute(r),i=[],s=0,u=0;;)if(s=u,u=r.indexOf("/",s),u===-1){i.push(r.slice(s));break}else for(i.push(r.slice(s,u));u<r.length&&r[u]==="/";)u++;for(var c,a=0,u=i.length-1;u>=0;u--)c=i[u],c==="."?i.splice(u,1):c===".."?a++:a>0&&(c===""?(i.splice(u+1,a),a=0):(i.splice(u,2),a--));return r=i.join("/"),r===""&&(r=o?"/":"."),n?(n.path=r,Ue(n)):r});K.normalize=dr;function ii(e,t){e===""&&(e="."),t===""&&(t=".");var r=ot(t),n=ot(e);if(n&&(e=n.path||"/"),r&&!r.scheme)return n&&(r.scheme=n.scheme),Ue(r);if(r||t.match(vs))return t;if(n&&!n.host&&!n.path)return n.host=t,Ue(n);var o=t.charAt(0)==="/"?t:dr(e.replace(/\/+$/,"")+"/"+t);return n?(n.path=o,Ue(n)):o}K.join=ii;K.isAbsolute=function(e){return e.charAt(0)==="/"||oi.test(e)};function As(e,t){e===""&&(e="."),e=e.replace(/\/$/,"");for(var r=0;t.indexOf(e+"/")!==0;){var n=e.lastIndexOf("/");if(n<0||(e=e.slice(0,n),e.match(/^([^\/]+:\/)?\/*$/)))return t;++r}return Array(r+1).join("../")+t.substr(e.length+1)}K.relative=As;var ai=function(){var e=Object.create(null);return!("__proto__"in e)}();function si(e){return e}function Ts(e){return li(e)?"$"+e:e}K.toSetString=ai?si:Ts;function Es(e){return li(e)?e.slice(1):e}K.fromSetString=ai?si:Es;function li(e){if(!e)return!1;var t=e.length;if(t<9||e.charCodeAt(t-1)!==95||e.charCodeAt(t-2)!==95||e.charCodeAt(t-3)!==111||e.charCodeAt(t-4)!==116||e.charCodeAt(t-5)!==111||e.charCodeAt(t-6)!==114||e.charCodeAt(t-7)!==112||e.charCodeAt(t-8)!==95||e.charCodeAt(t-9)!==95)return!1;for(var r=t-10;r>=0;r--)if(e.charCodeAt(r)!==36)return!1;return!0}function Ls(e,t,r){var n=be(e.source,t.source);return n!==0||(n=e.originalLine-t.originalLine,n!==0)||(n=e.originalColumn-t.originalColumn,n!==0||r)||(n=e.generatedColumn-t.generatedColumn,n!==0)||(n=e.generatedLine-t.generatedLine,n!==0)?n:be(e.name,t.name)}K.compareByOriginalPositions=Ls;function Ps(e,t,r){var n;return n=e.originalLine-t.originalLine,n!==0||(n=e.originalColumn-t.originalColumn,n!==0||r)||(n=e.generatedColumn-t.generatedColumn,n!==0)||(n=e.generatedLine-t.generatedLine,n!==0)?n:be(e.name,t.name)}K.compareByOriginalPositionsNoSource=Ps;function Is(e,t,r){var n=e.generatedLine-t.generatedLine;return n!==0||(n=e.generatedColumn-t.generatedColumn,n!==0||r)||(n=be(e.source,t.source),n!==0)||(n=e.originalLine-t.originalLine,n!==0)||(n=e.originalColumn-t.originalColumn,n!==0)?n:be(e.name,t.name)}K.compareByGeneratedPositionsDeflated=Is;function Ds(e,t,r){var n=e.generatedColumn-t.generatedColumn;return n!==0||r||(n=be(e.source,t.source),n!==0)||(n=e.originalLine-t.originalLine,n!==0)||(n=e.originalColumn-t.originalColumn,n!==0)?n:be(e.name,t.name)}K.compareByGeneratedPositionsDeflatedNoLine=Ds;function be(e,t){return e===t?0:e===null?1:t===null?-1:e>t?1:-1}function Os(e,t){var r=e.generatedLine-t.generatedLine;return r!==0||(r=e.generatedColumn-t.generatedColumn,r!==0)||(r=be(e.source,t.source),r!==0)||(r=e.originalLine-t.originalLine,r!==0)||(r=e.originalColumn-t.originalColumn,r!==0)?r:be(e.name,t.name)}K.compareByGeneratedPositionsInflated=Os;function Ns(e){return JSON.parse(e.replace(/^\)]}'[^\n]*\n/,""))}K.parseSourceMapInput=Ns;function zs(e,t,r){if(t=t||"",e&&(e[e.length-1]!=="/"&&t[0]!=="/"&&(e+="/"),t=e+t),r){var n=ot(r);if(!n)throw new Error("sourceMapURL could not be parsed");if(n.path){var o=n.path.lastIndexOf("/");o>=0&&(n.path=n.path.substring(0,o+1))}t=ii(Ue(n),t)}return dr(t)}K.computeSourceURL=zs});var ui=Oe(ci=>{var gr=Lt(),br=Object.prototype.hasOwnProperty,Le=typeof Map<"u";function xe(){this._array=[],this._set=Le?new Map:Object.create(null)}xe.fromArray=function(t,r){for(var n=new xe,o=0,i=t.length;o<i;o++)n.add(t[o],r);return n};xe.prototype.size=function(){return Le?this._set.size:Object.getOwnPropertyNames(this._set).length};xe.prototype.add=function(t,r){var n=Le?t:gr.toSetString(t),o=Le?this.has(t):br.call(this._set,n),i=this._array.length;(!o||r)&&this._array.push(t),o||(Le?this._set.set(t,i):this._set[n]=i)};xe.prototype.has=function(t){if(Le)return this._set.has(t);var r=gr.toSetString(t);return br.call(this._set,r)};xe.prototype.indexOf=function(t){if(Le){var r=this._set.get(t);if(r>=0)return r}else{var n=gr.toSetString(t);if(br.call(this._set,n))return this._set[n]}throw new Error('"'+t+'" is not in the set.')};xe.prototype.at=function(t){if(t>=0&&t<this._array.length)return this._array[t];throw new Error("No element indexed by "+t)};xe.prototype.toArray=function(){return this._array.slice()};ci.ArraySet=xe});var mi=Oe(hi=>{var pi=Lt();function Ms(e,t){var r=e.generatedLine,n=t.generatedLine,o=e.generatedColumn,i=t.generatedColumn;return n>r||n==r&&i>=o||pi.compareByGeneratedPositionsInflated(e,t)<=0}function Pt(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}Pt.prototype.unsortedForEach=function(t,r){this._array.forEach(t,r)};Pt.prototype.add=function(t){Ms(this._last,t)?(this._last=t,this._array.push(t)):(this._sorted=!1,this._array.push(t))};Pt.prototype.toArray=function(){return this._sorted||(this._array.sort(pi.compareByGeneratedPositionsInflated),this._sorted=!0),this._array};hi.MappingList=Pt});var di=Oe(fi=>{var it=ni(),H=Lt(),It=ui().ArraySet,Rs=mi().MappingList;function oe(e){e||(e={}),this._file=H.getArg(e,"file",null),this._sourceRoot=H.getArg(e,"sourceRoot",null),this._skipValidation=H.getArg(e,"skipValidation",!1),this._sources=new It,this._names=new It,this._mappings=new Rs,this._sourcesContents=null}oe.prototype._version=3;oe.fromSourceMap=function(t){var r=t.sourceRoot,n=new oe({file:t.file,sourceRoot:r});return t.eachMapping(function(o){var i={generated:{line:o.generatedLine,column:o.generatedColumn}};o.source!=null&&(i.source=o.source,r!=null&&(i.source=H.relative(r,i.source)),i.original={line:o.originalLine,column:o.originalColumn},o.name!=null&&(i.name=o.name)),n.addMapping(i)}),t.sources.forEach(function(o){var i=o;r!==null&&(i=H.relative(r,o)),n._sources.has(i)||n._sources.add(i);var s=t.sourceContentFor(o);s!=null&&n.setSourceContent(o,s)}),n};oe.prototype.addMapping=function(t){var r=H.getArg(t,"generated"),n=H.getArg(t,"original",null),o=H.getArg(t,"source",null),i=H.getArg(t,"name",null);this._skipValidation||this._validateMapping(r,n,o,i),o!=null&&(o=String(o),this._sources.has(o)||this._sources.add(o)),i!=null&&(i=String(i),this._names.has(i)||this._names.add(i)),this._mappings.add({generatedLine:r.line,generatedColumn:r.column,originalLine:n!=null&&n.line,originalColumn:n!=null&&n.column,source:o,name:i})};oe.prototype.setSourceContent=function(t,r){var n=t;this._sourceRoot!=null&&(n=H.relative(this._sourceRoot,n)),r!=null?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[H.toSetString(n)]=r):this._sourcesContents&&(delete this._sourcesContents[H.toSetString(n)],Object.keys(this._sourcesContents).length===0&&(this._sourcesContents=null))};oe.prototype.applySourceMap=function(t,r,n){var o=r;if(r==null){if(t.file==null)throw new Error(`SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map's "file" property. Both were omitted.`);o=t.file}var i=this._sourceRoot;i!=null&&(o=H.relative(i,o));var s=new It,u=new It;this._mappings.unsortedForEach(function(c){if(c.source===o&&c.originalLine!=null){var a=t.originalPositionFor({line:c.originalLine,column:c.originalColumn});a.source!=null&&(c.source=a.source,n!=null&&(c.source=H.join(n,c.source)),i!=null&&(c.source=H.relative(i,c.source)),c.originalLine=a.line,c.originalColumn=a.column,a.name!=null&&(c.name=a.name))}var l=c.source;l!=null&&!s.has(l)&&s.add(l);var p=c.name;p!=null&&!u.has(p)&&u.add(p)},this),this._sources=s,this._names=u,t.sources.forEach(function(c){var a=t.sourceContentFor(c);a!=null&&(n!=null&&(c=H.join(n,c)),i!=null&&(c=H.relative(i,c)),this.setSourceContent(c,a))},this)};oe.prototype._validateMapping=function(t,r,n,o){if(r&&typeof r.line!="number"&&typeof r.column!="number")throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if(!(t&&"line"in t&&"column"in t&&t.line>0&&t.column>=0&&!r&&!n&&!o)){if(t&&"line"in t&&"column"in t&&r&&"line"in r&&"column"in r&&t.line>0&&t.column>=0&&r.line>0&&r.column>=0&&n)return;throw new Error("Invalid mapping: "+JSON.stringify({generated:t,source:n,original:r,name:o}))}};oe.prototype._serializeMappings=function(){for(var t=0,r=1,n=0,o=0,i=0,s=0,u="",c,a,l,p,m=this._mappings.toArray(),f=0,P=m.length;f<P;f++){if(a=m[f],c="",a.generatedLine!==r)for(t=0;a.generatedLine!==r;)c+=";",r++;else if(f>0){if(!H.compareByGeneratedPositionsInflated(a,m[f-1]))continue;c+=","}c+=it.encode(a.generatedColumn-t),t=a.generatedColumn,a.source!=null&&(p=this._sources.indexOf(a.source),c+=it.encode(p-s),s=p,c+=it.encode(a.originalLine-1-o),o=a.originalLine-1,c+=it.encode(a.originalColumn-n),n=a.originalColumn,a.name!=null&&(l=this._names.indexOf(a.name),c+=it.encode(l-i),i=l)),u+=c}return u};oe.prototype._generateSourcesContent=function(t,r){return t.map(function(n){if(!this._sourcesContents)return null;r!=null&&(n=H.relative(r,n));var o=H.toSetString(n);return Object.prototype.hasOwnProperty.call(this._sourcesContents,o)?this._sourcesContents[o]:null},this)};oe.prototype.toJSON=function(){var t={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return this._file!=null&&(t.file=this._file),this._sourceRoot!=null&&(t.sourceRoot=this._sourceRoot),this._sourcesContents&&(t.sourcesContent=this._generateSourcesContent(t.sources,t.sourceRoot)),t};oe.prototype.toString=function(){return JSON.stringify(this.toJSON())};fi.SourceMapGenerator=oe});var Ze={};b(Ze,{AtKeyword:()=>D,BadString:()=>Ae,BadUrl:()=>Y,CDC:()=>j,CDO:()=>ue,Colon:()=>O,Comma:()=>G,Comment:()=>E,Delim:()=>g,Dimension:()=>y,EOF:()=>$e,Function:()=>x,Hash:()=>v,Ident:()=>h,LeftCurlyBracket:()=>M,LeftParenthesis:()=>T,LeftSquareBracket:()=>U,Number:()=>d,Percentage:()=>A,RightCurlyBracket:()=>W,RightParenthesis:()=>w,RightSquareBracket:()=>V,Semicolon:()=>_,String:()=>q,Url:()=>F,WhiteSpace:()=>k});var $e=0,h=1,x=2,D=3,v=4,q=5,Ae=6,F=7,Y=8,g=9,d=10,A=11,y=12,k=13,ue=14,j=15,O=16,_=17,G=18,U=19,V=20,T=21,w=22,M=23,W=24,E=25;function B(e){return e>=48&&e<=57}function ee(e){return B(e)||e>=65&&e<=70||e>=97&&e<=102}function kt(e){return e>=65&&e<=90}function ls(e){return e>=97&&e<=122}function cs(e){return kt(e)||ls(e)}function us(e){return e>=128}function yt(e){return cs(e)||us(e)||e===95}function Ne(e){return yt(e)||B(e)||e===45}function ps(e){return e>=0&&e<=8||e===11||e>=14&&e<=31||e===127}function Je(e){return e===10||e===13||e===12}function pe(e){return Je(e)||e===32||e===9}function $(e,t){return!(e!==92||Je(t)||t===0)}function ze(e,t,r){return e===45?yt(t)||t===45||$(t,r):yt(e)?!0:e===92?$(e,t):!1}function wt(e,t,r){return e===43||e===45?B(t)?2:t===46&&B(r)?3:0:e===46?B(t)?2:0:B(e)?1:0}function vt(e){return e===65279||e===65534?1:0}var or=new Array(128),hs=128,et=130,ir=131,St=132,ar=133;for(let e=0;e<or.length;e++)or[e]=pe(e)&&et||B(e)&&ir||yt(e)&&St||ps(e)&&ar||e||hs;function Ct(e){return e<128?or[e]:St}function Me(e,t){return t<e.length?e.charCodeAt(t):0}function At(e,t,r){return r===13&&Me(e,t+1)===10?2:1}function de(e,t,r){let n=e.charCodeAt(t);return kt(n)&&(n=n|32),n===r}function ge(e,t,r,n){if(r-t!==n.length||t<0||r>e.length)return!1;for(let o=t;o<r;o++){let i=n.charCodeAt(o-t),s=e.charCodeAt(o);if(kt(s)&&(s=s|32),s!==i)return!1}return!0}function _o(e,t){for(;t>=0&&pe(e.charCodeAt(t));t--);return t+1}function tt(e,t){for(;t<e.length&&pe(e.charCodeAt(t));t++);return t}function sr(e,t){for(;t<e.length&&B(e.charCodeAt(t));t++);return t}function se(e,t){if(t+=2,ee(Me(e,t-1))){for(let n=Math.min(e.length,t+5);t<n&&ee(Me(e,t));t++);let r=Me(e,t);pe(r)&&(t+=At(e,t,r))}return t}function rt(e,t){for(;t<e.length;t++){let r=e.charCodeAt(t);if(!Ne(r)){if($(r,Me(e,t+1))){t=se(e,t)-1;continue}break}}return t}function Te(e,t){let r=e.charCodeAt(t);if((r===43||r===45)&&(r=e.charCodeAt(t+=1)),B(r)&&(t=sr(e,t+1),r=e.charCodeAt(t)),r===46&&B(e.charCodeAt(t+1))&&(t+=2,t=sr(e,t)),de(e,t,101)){let n=0;r=e.charCodeAt(t+1),(r===45||r===43)&&(n=1,r=e.charCodeAt(t+2)),B(r)&&(t=sr(e,t+1+n+1))}return t}function Tt(e,t){for(;t<e.length;t++){let r=e.charCodeAt(t);if(r===41){t++;break}$(r,Me(e,t+1))&&(t=se(e,t))}return t}function Re(e){if(e.length===1&&!ee(e.charCodeAt(0)))return e[0];let t=parseInt(e,16);return(t===0||t>=55296&&t<=57343||t>1114111)&&(t=65533),String.fromCodePoint(t)}var Fe=["EOF-token","ident-token","function-token","at-keyword-token","hash-token","string-token","bad-string-token","url-token","bad-url-token","delim-token","number-token","percentage-token","dimension-token","whitespace-token","CDO-token","CDC-token","colon-token","semicolon-token","comma-token","[-token","]-token","(-token",")-token","{-token","}-token"];function Be(e=null,t){return e===null||e.length<t?new Uint32Array(Math.max(t+1024,16384)):e}var Uo=10,ms=12,jo=13;function Ho(e){let t=e.source,r=t.length,n=t.length>0?vt(t.charCodeAt(0)):0,o=Be(e.lines,r),i=Be(e.columns,r),s=e.startLine,u=e.startColumn;for(let c=n;c<r;c++){let a=t.charCodeAt(c);o[c]=s,i[c]=u++,(a===Uo||a===jo||a===ms)&&(a===jo&&c+1<r&&t.charCodeAt(c+1)===Uo&&(c++,o[c]=s,i[c]=u),s++,u=1)}o[r]=s,i[r]=u,e.lines=o,e.columns=i,e.computed=!0}var Et=class{constructor(){this.lines=null,this.columns=null,this.computed=!1}setSource(t,r=0,n=1,o=1){this.source=t,this.startOffset=r,this.startLine=n,this.startColumn=o,this.computed=!1}getLocation(t,r){return this.computed||Ho(this),{source:r,offset:this.startOffset+t,line:this.lines[t],column:this.columns[t]}}getLocationRange(t,r,n){return this.computed||Ho(this),{source:n,start:{offset:this.startOffset+t,line:this.lines[t],column:this.columns[t]},end:{offset:this.startOffset+r,line:this.lines[r],column:this.columns[r]}}}};var ne=16777215,we=24,fs=new Map([[2,22],[21,22],[19,20],[23,24]]),nt=class{constructor(t,r){this.setSource(t,r)}reset(){this.eof=!1,this.tokenIndex=-1,this.tokenType=0,this.tokenStart=this.firstCharOffset,this.tokenEnd=this.firstCharOffset}setSource(t="",r=()=>{}){t=String(t||"");let n=t.length,o=Be(this.offsetAndType,t.length+1),i=Be(this.balance,t.length+1),s=0,u=0,c=0,a=-1;for(this.offsetAndType=null,this.balance=null,r(t,(l,p,m)=>{switch(l){default:i[s]=n;break;case u:{let f=c&ne;for(c=i[f],u=c>>we,i[s]=f,i[f++]=s;f<s;f++)i[f]===n&&(i[f]=s);break}case 21:case 2:case 19:case 23:i[s]=c,u=fs.get(l),c=u<<we|s;break}o[s++]=l<<we|m,a===-1&&(a=p)}),o[s]=0<<we|n,i[s]=n,i[n]=n;c!==0;){let l=c&ne;c=i[l],i[l]=n}this.source=t,this.firstCharOffset=a===-1?0:a,this.tokenCount=s,this.offsetAndType=o,this.balance=i,this.reset(),this.next()}lookupType(t){return t+=this.tokenIndex,t<this.tokenCount?this.offsetAndType[t]>>we:0}lookupOffset(t){return t+=this.tokenIndex,t<this.tokenCount?this.offsetAndType[t-1]&ne:this.source.length}lookupValue(t,r){return t+=this.tokenIndex,t<this.tokenCount?ge(this.source,this.offsetAndType[t-1]&ne,this.offsetAndType[t]&ne,r):!1}getTokenStart(t){return t===this.tokenIndex?this.tokenStart:t>0?t<this.tokenCount?this.offsetAndType[t-1]&ne:this.offsetAndType[this.tokenCount]&ne:this.firstCharOffset}substrToCursor(t){return this.source.substring(t,this.tokenStart)}isBalanceEdge(t){return this.balance[this.tokenIndex]<t}isDelim(t,r){return r?this.lookupType(r)===9&&this.source.charCodeAt(this.lookupOffset(r))===t:this.tokenType===9&&this.source.charCodeAt(this.tokenStart)===t}skip(t){let r=this.tokenIndex+t;r<this.tokenCount?(this.tokenIndex=r,this.tokenStart=this.offsetAndType[r-1]&ne,r=this.offsetAndType[r],this.tokenType=r>>we,this.tokenEnd=r&ne):(this.tokenIndex=this.tokenCount,this.next())}next(){let t=this.tokenIndex+1;t<this.tokenCount?(this.tokenIndex=t,this.tokenStart=this.tokenEnd,t=this.offsetAndType[t],this.tokenType=t>>we,this.tokenEnd=t&ne):(this.eof=!0,this.tokenIndex=this.tokenCount,this.tokenType=0,this.tokenStart=this.tokenEnd=this.source.length)}skipSC(){for(;this.tokenType===13||this.tokenType===25;)this.next()}skipUntilBalanced(t,r){let n=t,o,i;e:for(;n<this.tokenCount;n++){if(o=this.balance[n],o<t)break e;switch(i=n>0?this.offsetAndType[n-1]&ne:this.firstCharOffset,r(this.source.charCodeAt(i))){case 1:break e;case 2:n++;break e;default:this.balance[o]===n&&(n=o)}}this.skip(n-this.tokenIndex)}forEachToken(t){for(let r=0,n=this.firstCharOffset;r<this.tokenCount;r++){let o=n,i=this.offsetAndType[r],s=i&ne,u=i>>we;n=s,t(u,o,s,r)}}dump(){let t=new Array(this.tokenCount);return this.forEachToken((r,n,o,i)=>{t[i]={idx:i,type:Fe[r],chunk:this.source.substring(n,o),balance:this.balance[i]}}),t}};function ve(e,t){function r(p){return p<u?e.charCodeAt(p):0}function n(){if(a=Te(e,a),ze(r(a),r(a+1),r(a+2))){l=12,a=rt(e,a);return}if(r(a)===37){l=11,a++;return}l=10}function o(){let p=a;if(a=rt(e,a),ge(e,p,a,"url")&&r(a)===40){if(a=tt(e,a+1),r(a)===34||r(a)===39){l=2,a=p+4;return}s();return}if(r(a)===40){l=2,a++;return}l=1}function i(p){for(p||(p=r(a++)),l=5;a<e.length;a++){let m=e.charCodeAt(a);switch(Ct(m)){case p:a++;return;case et:if(Je(m)){a+=At(e,a,m),l=6;return}break;case 92:if(a===e.length-1)break;let f=r(a+1);Je(f)?a+=At(e,a+1,f):$(m,f)&&(a=se(e,a)-1);break}}}function s(){for(l=7,a=tt(e,a);a<e.length;a++){let p=e.charCodeAt(a);switch(Ct(p)){case 41:a++;return;case et:if(a=tt(e,a),r(a)===41||a>=e.length){a<e.length&&a++;return}a=Tt(e,a),l=8;return;case 34:case 39:case 40:case ar:a=Tt(e,a),l=8;return;case 92:if($(p,r(a+1))){a=se(e,a)-1;break}a=Tt(e,a),l=8;return}}}e=String(e||"");let u=e.length,c=vt(r(0)),a=c,l;for(;a<u;){let p=e.charCodeAt(a);switch(Ct(p)){case et:l=13,a=tt(e,a+1);break;case 34:i();break;case 35:Ne(r(a+1))||$(r(a+1),r(a+2))?(l=4,a=rt(e,a+1)):(l=9,a++);break;case 39:i();break;case 40:l=21,a++;break;case 41:l=22,a++;break;case 43:wt(p,r(a+1),r(a+2))?n():(l=9,a++);break;case 44:l=18,a++;break;case 45:wt(p,r(a+1),r(a+2))?n():r(a+1)===45&&r(a+2)===62?(l=15,a=a+3):ze(p,r(a+1),r(a+2))?o():(l=9,a++);break;case 46:wt(p,r(a+1),r(a+2))?n():(l=9,a++);break;case 47:r(a+1)===42?(l=25,a=e.indexOf("*/",a+2),a=a===-1?e.length:a+2):(l=9,a++);break;case 58:l=16,a++;break;case 59:l=17,a++;break;case 60:r(a+1)===33&&r(a+2)===45&&r(a+3)===45?(l=14,a=a+4):(l=9,a++);break;case 64:ze(r(a+1),r(a+2),r(a+3))?(l=3,a=rt(e,a+1)):(l=9,a++);break;case 91:l=19,a++;break;case 92:$(p,r(a+1))?o():(l=9,a++);break;case 93:l=20,a++;break;case 123:l=23,a++;break;case 125:l=24,a++;break;case ir:n();break;case St:o();break;default:l=9,a++}t(l,c,c=a)}}var _e=null,I=class{static createItem(t){return{prev:null,next:null,data:t}}constructor(){this.head=null,this.tail=null,this.cursor=null}createItem(t){return I.createItem(t)}allocateCursor(t,r){let n;return _e!==null?(n=_e,_e=_e.cursor,n.prev=t,n.next=r,n.cursor=this.cursor):n={prev:t,next:r,cursor:this.cursor},this.cursor=n,n}releaseCursor(){let{cursor:t}=this;this.cursor=t.cursor,t.prev=null,t.next=null,t.cursor=_e,_e=t}updateCursors(t,r,n,o){let{cursor:i}=this;for(;i!==null;)i.prev===t&&(i.prev=r),i.next===n&&(i.next=o),i=i.cursor}*[Symbol.iterator](){for(let t=this.head;t!==null;t=t.next)yield t.data}get size(){let t=0;for(let r=this.head;r!==null;r=r.next)t++;return t}get isEmpty(){return this.head===null}get first(){return this.head&&this.head.data}get last(){return this.tail&&this.tail.data}fromArray(t){let r=null;this.head=null;for(let n of t){let o=I.createItem(n);r!==null?r.next=o:this.head=o,o.prev=r,r=o}return this.tail=r,this}toArray(){return[...this]}toJSON(){return[...this]}forEach(t,r=this){let n=this.allocateCursor(null,this.head);for(;n.next!==null;){let o=n.next;n.next=o.next,t.call(r,o.data,o,this)}this.releaseCursor()}forEachRight(t,r=this){let n=this.allocateCursor(this.tail,null);for(;n.prev!==null;){let o=n.prev;n.prev=o.prev,t.call(r,o.data,o,this)}this.releaseCursor()}reduce(t,r,n=this){let o=this.allocateCursor(null,this.head),i=r,s;for(;o.next!==null;)s=o.next,o.next=s.next,i=t.call(n,i,s.data,s,this);return this.releaseCursor(),i}reduceRight(t,r,n=this){let o=this.allocateCursor(this.tail,null),i=r,s;for(;o.prev!==null;)s=o.prev,o.prev=s.prev,i=t.call(n,i,s.data,s,this);return this.releaseCursor(),i}some(t,r=this){for(let n=this.head;n!==null;n=n.next)if(t.call(r,n.data,n,this))return!0;return!1}map(t,r=this){let n=new I;for(let o=this.head;o!==null;o=o.next)n.appendData(t.call(r,o.data,o,this));return n}filter(t,r=this){let n=new I;for(let o=this.head;o!==null;o=o.next)t.call(r,o.data,o,this)&&n.appendData(o.data);return n}nextUntil(t,r,n=this){if(t===null)return;let o=this.allocateCursor(null,t);for(;o.next!==null;){let i=o.next;if(o.next=i.next,r.call(n,i.data,i,this))break}this.releaseCursor()}prevUntil(t,r,n=this){if(t===null)return;let o=this.allocateCursor(t,null);for(;o.prev!==null;){let i=o.prev;if(o.prev=i.prev,r.call(n,i.data,i,this))break}this.releaseCursor()}clear(){this.head=null,this.tail=null}copy(){let t=new I;for(let r of this)t.appendData(r);return t}prepend(t){return this.updateCursors(null,t,this.head,t),this.head!==null?(this.head.prev=t,t.next=this.head):this.tail=t,this.head=t,this}prependData(t){return this.prepend(I.createItem(t))}append(t){return this.insert(t)}appendData(t){return this.insert(I.createItem(t))}insert(t,r=null){if(r!==null)if(this.updateCursors(r.prev,t,r,t),r.prev===null){if(this.head!==r)throw new Error("before doesn't belong to list");this.head=t,r.prev=t,t.next=r,this.updateCursors(null,t)}else r.prev.next=t,t.prev=r.prev,r.prev=t,t.next=r;else this.updateCursors(this.tail,t,null,t),this.tail!==null?(this.tail.next=t,t.prev=this.tail):this.head=t,this.tail=t;return this}insertData(t,r){return this.insert(I.createItem(t),r)}remove(t){if(this.updateCursors(t,t.prev,t,t.next),t.prev!==null)t.prev.next=t.next;else{if(this.head!==t)throw new Error("item doesn't belong to list");this.head=t.next}if(t.next!==null)t.next.prev=t.prev;else{if(this.tail!==t)throw new Error("item doesn't belong to list");this.tail=t.prev}return t.prev=null,t.next=null,t}push(t){this.insert(I.createItem(t))}pop(){return this.tail!==null?this.remove(this.tail):null}unshift(t){this.prepend(I.createItem(t))}shift(){return this.head!==null?this.remove(this.head):null}prependList(t){return this.insertList(t,this.head)}appendList(t){return this.insertList(t)}insertList(t,r){return t.head===null?this:(r!=null?(this.updateCursors(r.prev,t.tail,r,t.head),r.prev!==null?(r.prev.next=t.head,t.head.prev=r.prev):this.head=t.head,r.prev=t.tail,t.tail.next=r):(this.updateCursors(this.tail,t.tail,null,t.head),this.tail!==null?(this.tail.next=t.head,t.head.prev=this.tail):this.head=t.head,this.tail=t.tail),t.head=null,t.tail=null,this)}replace(t,r){"head"in r?this.insertList(r,t):this.insert(r,t),this.remove(t)}};function Ee(e,t){let r=Object.create(SyntaxError.prototype),n=new Error;return Object.assign(r,{name:e,message:t,get stack(){return(n.stack||"").replace(/^(.+\n){1,3}/,`${e}: ${t}
+`)}})}var lr=100,qo=60,Wo=" ";function Yo({source:e,line:t,column:r},n){function o(l,p){return i.slice(l,p).map((m,f)=>String(l+f+1).padStart(c)+" |"+m).join(`
+`)}let i=e.split(/\r\n?|\n|\f/),s=Math.max(1,t-n)-1,u=Math.min(t+n,i.length+1),c=Math.max(4,String(u).length)+1,a=0;r+=(Wo.length-1)*(i[t-1].substr(0,r-1).match(/\t/g)||[]).length,r>lr&&(a=r-qo+3,r=qo-2);for(let l=s;l<=u;l++)l>=0&&l<i.length&&(i[l]=i[l].replace(/\t/g,Wo),i[l]=(a>0&&i[l].length>a?"\u2026":"")+i[l].substr(a,lr-2)+(i[l].length>a+lr-1?"\u2026":""));return[o(s,t),new Array(r+c+2).join("-")+"^",o(t,u)].filter(Boolean).join(`
+`)}function cr(e,t,r,n,o){return Object.assign(Ee("SyntaxError",e),{source:t,offset:r,line:n,column:o,sourceFragment(s){return Yo({source:t,line:n,column:o},isNaN(s)?0:s)},get formattedMessage(){return`Parse error: ${e}
+`+Yo({source:t,line:n,column:o},2)}})}function Go(e){let t=this.createList(),r=!1,n={recognizer:e};for(;!this.eof;){switch(this.tokenType){case 25:this.next();continue;case 13:r=!0,this.next();continue}let o=e.getNode.call(this,n);if(o===void 0)break;r&&(e.onWhiteSpace&&e.onWhiteSpace.call(this,o,t,n),r=!1),t.push(o)}return r&&e.onWhiteSpace&&e.onWhiteSpace.call(this,null,t,n),t}var Vo=()=>{},ds=33,gs=35,ur=59,Ko=123,Qo=0;function bs(e){return function(){return this[e]()}}function pr(e){let t=Object.create(null);for(let r in e){let n=e[r],o=n.parse||n;o&&(t[r]=o)}return t}function xs(e){let t={context:Object.create(null),scope:Object.assign(Object.create(null),e.scope),atrule:pr(e.atrule),pseudo:pr(e.pseudo),node:pr(e.node)};for(let r in e.parseContext)switch(typeof e.parseContext[r]){case"function":t.context[r]=e.parseContext[r];break;case"string":t.context[r]=bs(e.parseContext[r]);break}return{config:t,...t,...t.node}}function Xo(e){let t="",r="<unknown>",n=!1,o=Vo,i=!1,s=new Et,u=Object.assign(new nt,xs(e||{}),{parseAtrulePrelude:!0,parseRulePrelude:!0,parseValue:!0,parseCustomProperty:!1,readSequence:Go,consumeUntilBalanceEnd:()=>0,consumeUntilLeftCurlyBracket(a){return a===Ko?1:0},consumeUntilLeftCurlyBracketOrSemicolon(a){return a===Ko||a===ur?1:0},consumeUntilExclamationMarkOrSemicolon(a){return a===ds||a===ur?1:0},consumeUntilSemicolonIncluded(a){return a===ur?2:0},createList(){return new I},createSingleNodeList(a){return new I().appendData(a)},getFirstListNode(a){return a&&a.first},getLastListNode(a){return a&&a.last},parseWithFallback(a,l){let p=this.tokenIndex;try{return a.call(this)}catch(m){if(i)throw m;let f=l.call(this,p);return i=!0,o(m,f),i=!1,f}},lookupNonWSType(a){let l;do if(l=this.lookupType(a++),l!==13)return l;while(l!==Qo);return Qo},charCodeAt(a){return a>=0&&a<t.length?t.charCodeAt(a):0},substring(a,l){return t.substring(a,l)},substrToCursor(a){return this.source.substring(a,this.tokenStart)},cmpChar(a,l){return de(t,a,l)},cmpStr(a,l,p){return ge(t,a,l,p)},consume(a){let l=this.tokenStart;return this.eat(a),this.substrToCursor(l)},consumeFunctionName(){let a=t.substring(this.tokenStart,this.tokenEnd-1);return this.eat(2),a},consumeNumber(a){let l=t.substring(this.tokenStart,Te(t,this.tokenStart));return this.eat(a),l},eat(a){if(this.tokenType!==a){let l=Fe[a].slice(0,-6).replace(/-/g," ").replace(/^./,f=>f.toUpperCase()),p=`${/[[\](){}]/.test(l)?`"${l}"`:l} is expected`,m=this.tokenStart;switch(a){case 1:this.tokenType===2||this.tokenType===7?(m=this.tokenEnd-1,p="Identifier is expected but function found"):p="Identifier is expected";break;case 4:this.isDelim(gs)&&(this.next(),m++,p="Name is expected");break;case 11:this.tokenType===10&&(m=this.tokenEnd,p="Percent sign is expected");break}this.error(p,m)}this.next()},eatIdent(a){(this.tokenType!==1||this.lookupValue(0,a)===!1)&&this.error(`Identifier "${a}" is expected`),this.next()},eatDelim(a){this.isDelim(a)||this.error(`Delim "${String.fromCharCode(a)}" is expected`),this.next()},getLocation(a,l){return n?s.getLocationRange(a,l,r):null},getLocationFromList(a){if(n){let l=this.getFirstListNode(a),p=this.getLastListNode(a);return s.getLocationRange(l!==null?l.loc.start.offset-s.startOffset:this.tokenStart,p!==null?p.loc.end.offset-s.startOffset:this.tokenStart,r)}return null},error(a,l){let p=typeof l<"u"&&l<t.length?s.getLocation(l):this.eof?s.getLocation(_o(t,t.length-1)):s.getLocation(this.tokenStart);throw new cr(a||"Unexpected input",t,p.offset,p.line,p.column)}});return Object.assign(function(a,l){t=a,l=l||{},u.setSource(t,ve),s.setSource(t,l.offset,l.line,l.column),r=l.filename||"<unknown>",n=Boolean(l.positions),o=typeof l.onParseError=="function"?l.onParseError:Vo,i=!1,u.parseAtrulePrelude="parseAtrulePrelude"in l?Boolean(l.parseAtrulePrelude):!0,u.parseRulePrelude="parseRulePrelude"in l?Boolean(l.parseRulePrelude):!0,u.parseValue="parseValue"in l?Boolean(l.parseValue):!0,u.parseCustomProperty="parseCustomProperty"in l?Boolean(l.parseCustomProperty):!1;let{context:p="default",onComment:m}=l;if(!(p in u.context))throw new Error("Unknown context `"+p+"`");typeof m=="function"&&u.forEachToken((P,te,X)=>{if(P===25){let S=u.getLocation(te,X),R=ge(t,X-2,X,"*/")?t.slice(te+2,X-2):t.slice(te+2,X);m(R,S)}});let f=u.context[p].call(u,l);return u.eof||u.error(),f},{SyntaxError:cr,config:u.config})}var bi=ss(di(),1),gi=new Set(["Atrule","Selector","Declaration"]);function xi(e){let t=new bi.SourceMapGenerator,r={line:1,column:0},n={line:0,column:0},o={line:1,column:0},i={generated:o},s=1,u=0,c=!1,a=e.node;e.node=function(m){if(m.loc&&m.loc.start&&gi.has(m.type)){let f=m.loc.start.line,P=m.loc.start.column-1;(n.line!==f||n.column!==P)&&(n.line=f,n.column=P,r.line=s,r.column=u,c&&(c=!1,(r.line!==o.line||r.column!==o.column)&&t.addMapping(i)),c=!0,t.addMapping({source:m.loc.source,original:n,generated:r}))}a.call(this,m),c&&gi.has(m.type)&&(o.line=s,o.column=u)};let l=e.emit;e.emit=function(m,f,P){for(let te=0;te<m.length;te++)m.charCodeAt(te)===10?(s++,u=0):u++;l(m,f,P)};let p=e.result;return e.result=function(){return c&&t.addMapping(i),{css:p(),map:t}},e}var Dt={};b(Dt,{safe:()=>yr,spec:()=>Us});var Fs=43,Bs=45,xr=(e,t)=>{if(e===9&&(e=t),typeof e=="string"){let r=e.charCodeAt(0);return r>127?32768:r<<8}return e},yi=[[1,1],[1,2],[1,7],[1,8],[1,"-"],[1,10],[1,11],[1,12],[1,15],[1,21],[3,1],[3,2],[3,7],[3,8],[3,"-"],[3,10],[3,11],[3,12],[3,15],[4,1],[4,2],[4,7],[4,8],[4,"-"],[4,10],[4,11],[4,12],[4,15],[12,1],[12,2],[12,7],[12,8],[12,"-"],[12,10],[12,11],[12,12],[12,15],["#",1],["#",2],["#",7],["#",8],["#","-"],["#",10],["#",11],["#",12],["#",15],["-",1],["-",2],["-",7],["-",8],["-","-"],["-",10],["-",11],["-",12],["-",15],[10,1],[10,2],[10,7],[10,8],[10,10],[10,11],[10,12],[10,"%"],[10,15],["@",1],["@",2],["@",7],["@",8],["@","-"],["@",15],[".",10],[".",11],[".",12],["+",10],["+",11],["+",12],["/","*"]],_s=yi.concat([[1,4],[12,4],[4,4],[3,21],[3,5],[3,16],[11,11],[11,12],[11,2],[11,"-"],[22,1],[22,2],[22,11],[22,12],[22,4],[22,"-"]]);function ki(e){let t=new Set(e.map(([r,n])=>xr(r)<<16|xr(n)));return function(r,n,o){let i=xr(n,o),s=o.charCodeAt(0);return(s===Bs&&n!==1&&n!==2&&n!==15||s===Fs?t.has(r<<16|s<<8):t.has(r<<16|i))&&this.emit(" ",13,!0),i}}var Us=ki(yi),yr=ki(_s);var js=92;function Hs(e,t){if(typeof t=="function"){let r=null;e.children.forEach(n=>{r!==null&&t.call(this,r),this.node(n),r=n});return}e.children.forEach(this.node,this)}function qs(e){ve(e,(t,r,n)=>{this.token(t,e.slice(r,n))})}function wi(e){let t=new Map;for(let r in e.node){let n=e.node[r];typeof(n.generate||n)=="function"&&t.set(r,n.generate||n)}return function(r,n){let o="",i=0,s={node(c){if(t.has(c.type))t.get(c.type).call(u,c);else throw new Error("Unknown node type: "+c.type)},tokenBefore:yr,token(c,a){i=this.tokenBefore(i,c,a),this.emit(a,c,!1),c===9&&a.charCodeAt(0)===js&&this.emit(`
+`,13,!0)},emit(c){o+=c},result(){return o}};n&&(typeof n.decorator=="function"&&(s=n.decorator(s)),n.sourceMap&&(s=xi(s)),n.mode in Dt&&(s.tokenBefore=Dt[n.mode]));let u={node:c=>s.node(c),children:Hs,token:(c,a)=>s.token(c,a),tokenize:qs};return s.node(r),s.result()}}function vi(e){return{fromPlainObject(t){return e(t,{enter(r){r.children&&!(r.children instanceof I)&&(r.children=new I().fromArray(r.children))}}),t},toPlainObject(t){return e(t,{leave(r){r.children&&r.children instanceof I&&(r.children=r.children.toArray())}}),t}}}var{hasOwnProperty:kr}=Object.prototype,at=function(){};function Si(e){return typeof e=="function"?e:at}function Ci(e,t){return function(r,n,o){r.type===t&&e.call(this,r,n,o)}}function Ws(e,t){let r=t.structure,n=[];for(let o in r){if(kr.call(r,o)===!1)continue;let i=r[o],s={name:o,type:!1,nullable:!1};Array.isArray(i)||(i=[i]);for(let u of i)u===null?s.nullable=!0:typeof u=="string"?s.type="node":Array.isArray(u)&&(s.type="list");s.type&&n.push(s)}return n.length?{context:t.walkContext,fields:n}:null}function Ys(e){let t={};for(let r in e.node)if(kr.call(e.node,r)){let n=e.node[r];if(!n.structure)throw new Error("Missed `structure` field in `"+r+"` node type definition");t[r]=Ws(r,n)}return t}function Ai(e,t){let r=e.fields.slice(),n=e.context,o=typeof n=="string";return t&&r.reverse(),function(i,s,u,c){let a;o&&(a=s[n],s[n]=i);for(let l of r){let p=i[l.name];if(!l.nullable||p){if(l.type==="list"){if(t?p.reduceRight(c,!1):p.reduce(c,!1))return!0}else if(u(p))return!0}}o&&(s[n]=a)}}function Ti({StyleSheet:e,Atrule:t,Rule:r,Block:n,DeclarationList:o}){return{Atrule:{StyleSheet:e,Atrule:t,Rule:r,Block:n},Rule:{StyleSheet:e,Atrule:t,Rule:r,Block:n},Declaration:{StyleSheet:e,Atrule:t,Rule:r,Block:n,DeclarationList:o}}}function Ei(e){let t=Ys(e),r={},n={},o=Symbol("break-walk"),i=Symbol("skip-node");for(let a in t)kr.call(t,a)&&t[a]!==null&&(r[a]=Ai(t[a],!1),n[a]=Ai(t[a],!0));let s=Ti(r),u=Ti(n),c=function(a,l){function p(S,R,ke){let z=m.call(X,S,R,ke);return z===o?!0:z===i?!1:!!(P.hasOwnProperty(S.type)&&P[S.type](S,X,p,te)||f.call(X,S,R,ke)===o)}let m=at,f=at,P=r,te=(S,R,ke,z)=>S||p(R,ke,z),X={break:o,skip:i,root:a,stylesheet:null,atrule:null,atrulePrelude:null,rule:null,selector:null,block:null,declaration:null,function:null};if(typeof l=="function")m=l;else if(l&&(m=Si(l.enter),f=Si(l.leave),l.reverse&&(P=n),l.visit)){if(s.hasOwnProperty(l.visit))P=l.reverse?u[l.visit]:s[l.visit];else if(!t.hasOwnProperty(l.visit))throw new Error("Bad value `"+l.visit+"` for `visit` option (should be: "+Object.keys(t).sort().join(", ")+")");m=Ci(m,l.visit),f=Ci(f,l.visit)}if(m===at&&f===at)throw new Error("Neither `enter` nor `leave` walker handler is set or both aren't a function");p(a)};return c.break=o,c.skip=i,c.find=function(a,l){let p=null;return c(a,function(m,f,P){if(l.call(this,m,f,P))return p=m,o}),p},c.findLast=function(a,l){let p=null;return c(a,{reverse:!0,enter(m,f,P){if(l.call(this,m,f,P))return p=m,o}}),p},c.findAll=function(a,l){let p=[];return c(a,function(m,f,P){l.call(this,m,f,P)&&p.push(m)}),p},c}function Gs(e){return e}function Vs(e){let{min:t,max:r,comma:n}=e;return t===0&&r===0?n?"#?":"*":t===0&&r===1?"?":t===1&&r===0?n?"#":"+":t===1&&r===1?"":(n?"#":"")+(t===r?"{"+t+"}":"{"+t+","+(r!==0?r:"")+"}")}function Ks(e){switch(e.type){case"Range":return" ["+(e.min===null?"-\u221E":e.min)+","+(e.max===null?"\u221E":e.max)+"]";default:throw new Error("Unknown node type `"+e.type+"`")}}function Qs(e,t,r,n){let o=e.combinator===" "||n?e.combinator:" "+e.combinator+" ",i=e.terms.map(s=>wr(s,t,r,n)).join(o);return e.explicit||r?(n||i[0]===","?"[":"[ ")+i+(n?"]":" ]"):i}function wr(e,t,r,n){let o;switch(e.type){case"Group":o=Qs(e,t,r,n)+(e.disallowEmpty?"!":"");break;case"Multiplier":return wr(e.term,t,r,n)+t(Vs(e),e);case"Type":o="<"+e.name+(e.opts?t(Ks(e.opts),e.opts):"")+">";break;case"Property":o="<'"+e.name+"'>";break;case"Keyword":o=e.name;break;case"AtKeyword":o="@"+e.name;break;case"Function":o=e.name+"(";break;case"String":case"Token":o=e.value;break;case"Comma":o=",";break;default:throw new Error("Unknown node type `"+e.type+"`")}return t(o,e)}function Pe(e,t){let r=Gs,n=!1,o=!1;return typeof t=="function"?r=t:t&&(n=Boolean(t.forceBraces),o=Boolean(t.compact),typeof t.decorate=="function"&&(r=t.decorate)),wr(e,r,n,o)}var Li={offset:0,line:1,column:1};function Xs(e,t){let r=e.tokens,n=e.longestMatch,o=n<r.length&&r[n].node||null,i=o!==t?o:null,s=0,u=0,c=0,a="",l,p;for(let m=0;m<r.length;m++){let f=r[m].value;m===n&&(u=f.length,s=a.length),i!==null&&r[m].node===i&&(m<=n?c++:c=0),a+=f}return n===r.length||c>1?(l=Ot(i||t,"end")||st(Li,a),p=st(l)):(l=Ot(i,"start")||st(Ot(t,"start")||Li,a.slice(0,s)),p=Ot(i,"end")||st(l,a.substr(s,u))),{css:a,mismatchOffset:s,mismatchLength:u,start:l,end:p}}function Ot(e,t){let r=e&&e.loc&&e.loc[t];return r?"line"in r?st(r):r:null}function st({offset:e,line:t,column:r},n){let o={offset:e,line:t,column:r};if(n){let i=n.split(/\n|\r\n?|\f/);o.offset+=n.length,o.line+=i.length-1,o.column=i.length===1?o.column+n.length:i.pop().length+1}return o}var je=function(e,t){let r=Ee("SyntaxReferenceError",e+(t?" `"+t+"`":""));return r.reference=t,r},Pi=function(e,t,r,n){let o=Ee("SyntaxMatchError",e),{css:i,mismatchOffset:s,mismatchLength:u,start:c,end:a}=Xs(n,r);return o.rawMessage=e,o.syntax=t?Pe(t):"<generic>",o.css=i,o.mismatchOffset=s,o.mismatchLength=u,o.message=e+`
+ syntax: `+o.syntax+`
+ value: `+(i||"<empty string>")+`
+ --------`+new Array(o.mismatchOffset+1).join("-")+"^",Object.assign(o,c),o.loc={source:r&&r.loc&&r.loc.source||"<unknown>",start:c,end:a},o};var Nt=new Map,He=new Map,zt=45,Mt=$s,vr=Zs,_m=Sr;function Rt(e,t){return t=t||0,e.length-t>=2&&e.charCodeAt(t)===zt&&e.charCodeAt(t+1)===zt}function Sr(e,t){if(t=t||0,e.length-t>=3&&e.charCodeAt(t)===zt&&e.charCodeAt(t+1)!==zt){let r=e.indexOf("-",t+2);if(r!==-1)return e.substring(t,r+1)}return""}function $s(e){if(Nt.has(e))return Nt.get(e);let t=e.toLowerCase(),r=Nt.get(t);if(r===void 0){let n=Rt(t,0),o=n?"":Sr(t,0);r=Object.freeze({basename:t.substr(o.length),name:t,prefix:o,vendor:o,custom:n})}return Nt.set(e,r),r}function Zs(e){if(He.has(e))return He.get(e);let t=e,r=e[0];r==="/"?r=e[1]==="/"?"//":"/":r!=="_"&&r!=="*"&&r!=="$"&&r!=="#"&&r!=="+"&&r!=="&"&&(r="");let n=Rt(t,r.length);if(!n&&(t=t.toLowerCase(),He.has(t))){let u=He.get(t);return He.set(e,u),u}let o=n?"":Sr(t,r.length),i=t.substr(0,r.length+o.length),s=Object.freeze({basename:t.substr(i.length),name:t.substr(r.length),hack:r,vendor:o,prefix:i,custom:n});return He.set(e,s),s}var Ft=["initial","inherit","unset","revert","revert-layer"];var ct=43,he=45,Cr=110,qe=!0,el=!1;function Tr(e,t){return e!==null&&e.type===9&&e.value.charCodeAt(0)===t}function lt(e,t,r){for(;e!==null&&(e.type===13||e.type===25);)e=r(++t);return t}function Se(e,t,r,n){if(!e)return 0;let o=e.value.charCodeAt(t);if(o===ct||o===he){if(r)return 0;t++}for(;t<e.value.length;t++)if(!B(e.value.charCodeAt(t)))return 0;return n+1}function Ar(e,t,r){let n=!1,o=lt(e,t,r);if(e=r(o),e===null)return t;if(e.type!==10)if(Tr(e,ct)||Tr(e,he)){if(n=!0,o=lt(r(++o),o,r),e=r(o),e===null||e.type!==10)return 0}else return t;if(!n){let i=e.value.charCodeAt(0);if(i!==ct&&i!==he)return 0}return Se(e,n?0:1,n,o)}function Er(e,t){let r=0;if(!e)return 0;if(e.type===10)return Se(e,0,el,r);if(e.type===1&&e.value.charCodeAt(0)===he){if(!de(e.value,1,Cr))return 0;switch(e.value.length){case 2:return Ar(t(++r),r,t);case 3:return e.value.charCodeAt(2)!==he?0:(r=lt(t(++r),r,t),e=t(r),Se(e,0,qe,r));default:return e.value.charCodeAt(2)!==he?0:Se(e,3,qe,r)}}else if(e.type===1||Tr(e,ct)&&t(r+1).type===1){if(e.type!==1&&(e=t(++r)),e===null||!de(e.value,0,Cr))return 0;switch(e.value.length){case 1:return Ar(t(++r),r,t);case 2:return e.value.charCodeAt(1)!==he?0:(r=lt(t(++r),r,t),e=t(r),Se(e,0,qe,r));default:return e.value.charCodeAt(1)!==he?0:Se(e,2,qe,r)}}else if(e.type===12){let n=e.value.charCodeAt(0),o=n===ct||n===he?1:0,i=o;for(;i<e.value.length&&B(e.value.charCodeAt(i));i++);return i===o||!de(e.value,i,Cr)?0:i+1===e.value.length?Ar(t(++r),r,t):e.value.charCodeAt(i+1)!==he?0:i+2===e.value.length?(r=lt(t(++r),r,t),e=t(r),Se(e,0,qe,r)):Se(e,i+2,qe,r)}return 0}var tl=43,Ii=45,Di=63,rl=117;function Lr(e,t){return e!==null&&e.type===9&&e.value.charCodeAt(0)===t}function nl(e,t){return e.value.charCodeAt(0)===t}function ut(e,t,r){let n=0;for(let o=t;o<e.value.length;o++){let i=e.value.charCodeAt(o);if(i===Ii&&r&&n!==0)return ut(e,t+n+1,!1),6;if(!ee(i)||++n>6)return 0}return n}function Bt(e,t,r){if(!e)return 0;for(;Lr(r(t),Di);){if(++e>6)return 0;t++}return t}function Pr(e,t){let r=0;if(e===null||e.type!==1||!de(e.value,0,rl)||(e=t(++r),e===null))return 0;if(Lr(e,tl))return e=t(++r),e===null?0:e.type===1?Bt(ut(e,0,!0),++r,t):Lr(e,Di)?Bt(1,++r,t):0;if(e.type===10){let n=ut(e,1,!0);return n===0?0:(e=t(++r),e===null?r:e.type===12||e.type===10?!nl(e,Ii)||!ut(e,1,!1)?0:r+1:Bt(n,r,t))}return e.type===12?Bt(ut(e,1,!0),++r,t):0}var ol=["calc(","-moz-calc(","-webkit-calc("],Ir=new Map([[2,22],[21,22],[19,20],[23,24]]),il=["cm","mm","q","in","pt","pc","px","em","rem","ex","rex","cap","rcap","ch","rch","ic","ric","lh","rlh","vw","svw","lvw","dvw","vh","svh","lvh","dvh","vi","svi","lvi","dvi","vb","svb","lvb","dvb","vmin","svmin","lvmin","dvmin","vmax","svmax","lvmax","dvmax","cqw","cqh","cqi","cqb","cqmin","cqmax"],al=["deg","grad","rad","turn"],sl=["s","ms"],ll=["hz","khz"],cl=["dpi","dpcm","dppx","x"],ul=["fr"],pl=["db"],hl=["st"];function le(e,t){return t<e.length?e.charCodeAt(t):0}function Ni(e,t){return ge(e,0,e.length,t)}function zi(e,t){for(let r=0;r<t.length;r++)if(Ni(e,t[r]))return!0;return!1}function Mi(e,t){return t!==e.length-2?!1:le(e,t)===92&&B(le(e,t+1))}function _t(e,t,r){if(e&&e.type==="Range"){let n=Number(r!==void 0&&r!==t.length?t.substr(0,r):t);if(isNaN(n)||e.min!==null&&n<e.min&&typeof e.min!="string"||e.max!==null&&n>e.max&&typeof e.max!="string")return!0}return!1}function ml(e,t){let r=0,n=[],o=0;e:do{switch(e.type){case 24:case 22:case 20:if(e.type!==r)break e;if(r=n.pop(),n.length===0){o++;break e}break;case 2:case 21:case 19:case 23:n.push(r),r=Ir.get(e.type);break}o++}while(e=t(o));return o}function ie(e){return function(t,r,n){return t===null?0:t.type===2&&zi(t.value,ol)?ml(t,r):e(t,r,n)}}function N(e){return function(t){return t===null||t.type!==e?0:1}}function fl(e){if(e===null||e.type!==1)return 0;let t=e.value.toLowerCase();return zi(t,Ft)||Ni(t,"default")?0:1}function dl(e){return e===null||e.type!==1||le(e.value,0)!==45||le(e.value,1)!==45?0:1}function gl(e){if(e===null||e.type!==4)return 0;let t=e.value.length;if(t!==4&&t!==5&&t!==7&&t!==9)return 0;for(let r=1;r<t;r++)if(!ee(le(e.value,r)))return 0;return 1}function bl(e){return e===null||e.type!==4||!ze(le(e.value,1),le(e.value,2),le(e.value,3))?0:1}function xl(e,t){if(!e)return 0;let r=0,n=[],o=0;e:do{switch(e.type){case 6:case 8:break e;case 24:case 22:case 20:if(e.type!==r)break e;r=n.pop();break;case 17:if(r===0)break e;break;case 9:if(r===0&&e.value==="!")break e;break;case 2:case 21:case 19:case 23:n.push(r),r=Ir.get(e.type);break}o++}while(e=t(o));return o}function yl(e,t){if(!e)return 0;let r=0,n=[],o=0;e:do{switch(e.type){case 6:case 8:break e;case 24:case 22:case 20:if(e.type!==r)break e;r=n.pop();break;case 2:case 21:case 19:case 23:n.push(r),r=Ir.get(e.type);break}o++}while(e=t(o));return o}function ye(e){return e&&(e=new Set(e)),function(t,r,n){if(t===null||t.type!==12)return 0;let o=Te(t.value,0);if(e!==null){let i=t.value.indexOf("\\",o),s=i===-1||!Mi(t.value,i)?t.value.substr(o):t.value.substring(o,i);if(e.has(s.toLowerCase())===!1)return 0}return _t(n,t.value,o)?0:1}}function kl(e,t,r){return e===null||e.type!==11||_t(r,e.value,e.value.length-1)?0:1}function Oi(e){return typeof e!="function"&&(e=function(){return 0}),function(t,r,n){return t!==null&&t.type===10&&Number(t.value)===0?1:e(t,r,n)}}function wl(e,t,r){if(e===null)return 0;let n=Te(e.value,0);return!(n===e.value.length)&&!Mi(e.value,n)||_t(r,e.value,n)?0:1}function vl(e,t,r){if(e===null||e.type!==10)return 0;let n=le(e.value,0)===43||le(e.value,0)===45?1:0;for(;n<e.value.length;n++)if(!B(le(e.value,n)))return 0;return _t(r,e.value,n)?0:1}var Dr={"ident-token":N(1),"function-token":N(2),"at-keyword-token":N(3),"hash-token":N(4),"string-token":N(5),"bad-string-token":N(6),"url-token":N(7),"bad-url-token":N(8),"delim-token":N(9),"number-token":N(10),"percentage-token":N(11),"dimension-token":N(12),"whitespace-token":N(13),"CDO-token":N(14),"CDC-token":N(15),"colon-token":N(16),"semicolon-token":N(17),"comma-token":N(18),"[-token":N(19),"]-token":N(20),"(-token":N(21),")-token":N(22),"{-token":N(23),"}-token":N(24),string:N(5),ident:N(1),"custom-ident":fl,"custom-property-name":dl,"hex-color":gl,"id-selector":bl,"an-plus-b":Er,urange:Pr,"declaration-value":xl,"any-value":yl,dimension:ie(ye(null)),angle:ie(ye(al)),decibel:ie(ye(pl)),frequency:ie(ye(ll)),flex:ie(ye(ul)),length:ie(Oi(ye(il))),resolution:ie(ye(cl)),semitones:ie(ye(hl)),time:ie(ye(sl)),percentage:ie(kl),zero:Oi(),number:ie(wl),integer:ie(vl)};var Qi={};b(Qi,{SyntaxError:()=>Ut,generate:()=>Pe,parse:()=>Ge,walk:()=>Vt});function Ut(e,t,r){return Object.assign(Ee("SyntaxError",e),{input:t,offset:r,rawMessage:e,message:e+`
+ `+t+`
+--`+new Array((r||t.length)+1).join("-")+"^"})}var Sl=9,Cl=10,Al=12,Tl=13,El=32,jt=class{constructor(t){this.str=t,this.pos=0}charCodeAt(t){return t<this.str.length?this.str.charCodeAt(t):0}charCode(){return this.charCodeAt(this.pos)}nextCharCode(){return this.charCodeAt(this.pos+1)}nextNonWsCode(t){return this.charCodeAt(this.findWsEnd(t))}findWsEnd(t){for(;t<this.str.length;t++){let r=this.str.charCodeAt(t);if(r!==Tl&&r!==Cl&&r!==Al&&r!==El&&r!==Sl)break}return t}substringToPos(t){return this.str.substring(this.pos,this.pos=t)}eat(t){this.charCode()!==t&&this.error("Expect `"+String.fromCharCode(t)+"`"),this.pos++}peek(){return this.pos<this.str.length?this.str.charAt(this.pos++):""}error(t){throw new Ut(t,this.str,this.pos)}};var Ll=9,Pl=10,Il=12,Dl=13,Ol=32,qi=33,zr=35,Ri=38,Ht=39,Wi=40,Nl=41,Yi=42,Mr=43,Rr=44,Fi=45,Fr=60,Gi=62,Nr=63,zl=64,Gt=91,Br=93,qt=123,Bi=124,_i=125,Ui=8734,pt=new Uint8Array(128).map((e,t)=>/[a-zA-Z0-9\-]/.test(String.fromCharCode(t))?1:0),ji={" ":1,"&&":2,"||":3,"|":4};function Wt(e){return e.substringToPos(e.findWsEnd(e.pos))}function We(e){let t=e.pos;for(;t<e.str.length;t++){let r=e.str.charCodeAt(t);if(r>=128||pt[r]===0)break}return e.pos===t&&e.error("Expect a keyword"),e.substringToPos(t)}function Yt(e){let t=e.pos;for(;t<e.str.length;t++){let r=e.str.charCodeAt(t);if(r<48||r>57)break}return e.pos===t&&e.error("Expect a number"),e.substringToPos(t)}function Ml(e){let t=e.str.indexOf("'",e.pos+1);return t===-1&&(e.pos=e.str.length,e.error("Expect an apostrophe")),e.substringToPos(t+1)}function Hi(e){let t=null,r=null;return e.eat(qt),t=Yt(e),e.charCode()===Rr?(e.pos++,e.charCode()!==_i&&(r=Yt(e))):r=t,e.eat(_i),{min:Number(t),max:r?Number(r):0}}function Rl(e){let t=null,r=!1;switch(e.charCode()){case Yi:e.pos++,t={min:0,max:0};break;case Mr:e.pos++,t={min:1,max:0};break;case Nr:e.pos++,t={min:0,max:1};break;case zr:e.pos++,r=!0,e.charCode()===qt?t=Hi(e):e.charCode()===Nr?(e.pos++,t={min:0,max:0}):t={min:1,max:0};break;case qt:t=Hi(e);break;default:return null}return{type:"Multiplier",comma:r,min:t.min,max:t.max,term:null}}function Ye(e,t){let r=Rl(e);return r!==null?(r.term=t,e.charCode()===zr&&e.charCodeAt(e.pos-1)===Mr?Ye(e,r):r):t}function Or(e){let t=e.peek();return t===""?null:{type:"Token",value:t}}function Fl(e){let t;return e.eat(Fr),e.eat(Ht),t=We(e),e.eat(Ht),e.eat(Gi),Ye(e,{type:"Property",name:t})}function Bl(e){let t=null,r=null,n=1;return e.eat(Gt),e.charCode()===Fi&&(e.peek(),n=-1),n==-1&&e.charCode()===Ui?e.peek():(t=n*Number(Yt(e)),pt[e.charCode()]!==0&&(t+=We(e))),Wt(e),e.eat(Rr),Wt(e),e.charCode()===Ui?e.peek():(n=1,e.charCode()===Fi&&(e.peek(),n=-1),r=n*Number(Yt(e)),pt[e.charCode()]!==0&&(r+=We(e))),e.eat(Br),{type:"Range",min:t,max:r}}function _l(e){let t,r=null;return e.eat(Fr),t=We(e),e.charCode()===Wi&&e.nextCharCode()===Nl&&(e.pos+=2,t+="()"),e.charCodeAt(e.findWsEnd(e.pos))===Gt&&(Wt(e),r=Bl(e)),e.eat(Gi),Ye(e,{type:"Type",name:t,opts:r})}function Ul(e){let t=We(e);return e.charCode()===Wi?(e.pos++,{type:"Function",name:t}):Ye(e,{type:"Keyword",name:t})}function jl(e,t){function r(o,i){return{type:"Group",terms:o,combinator:i,disallowEmpty:!1,explicit:!1}}let n;for(t=Object.keys(t).sort((o,i)=>ji[o]-ji[i]);t.length>0;){n=t.shift();let o=0,i=0;for(;o<e.length;o++){let s=e[o];s.type==="Combinator"&&(s.value===n?(i===-1&&(i=o-1),e.splice(o,1),o--):(i!==-1&&o-i>1&&(e.splice(i,o-i,r(e.slice(i,o),n)),o=i+1),i=-1))}i!==-1&&t.length&&e.splice(i,o-i,r(e.slice(i,o),n))}return n}function Vi(e){let t=[],r={},n,o=null,i=e.pos;for(;n=ql(e);)n.type!=="Spaces"&&(n.type==="Combinator"?((o===null||o.type==="Combinator")&&(e.pos=i,e.error("Unexpected combinator")),r[n.value]=!0):o!==null&&o.type!=="Combinator"&&(r[" "]=!0,t.push({type:"Combinator",value:" "})),t.push(n),o=n,i=e.pos);return o!==null&&o.type==="Combinator"&&(e.pos-=i,e.error("Unexpected combinator")),{type:"Group",terms:t,combinator:jl(t,r)||" ",disallowEmpty:!1,explicit:!1}}function Hl(e){let t;return e.eat(Gt),t=Vi(e),e.eat(Br),t.explicit=!0,e.charCode()===qi&&(e.pos++,t.disallowEmpty=!0),t}function ql(e){let t=e.charCode();if(t<128&&pt[t]===1)return Ul(e);switch(t){case Br:break;case Gt:return Ye(e,Hl(e));case Fr:return e.nextCharCode()===Ht?Fl(e):_l(e);case Bi:return{type:"Combinator",value:e.substringToPos(e.pos+(e.nextCharCode()===Bi?2:1))};case Ri:return e.pos++,e.eat(Ri),{type:"Combinator",value:"&&"};case Rr:return e.pos++,{type:"Comma"};case Ht:return Ye(e,{type:"String",value:Ml(e)});case Ol:case Ll:case Pl:case Dl:case Il:return{type:"Spaces",value:Wt(e)};case zl:return t=e.nextCharCode(),t<128&&pt[t]===1?(e.pos++,{type:"AtKeyword",name:We(e)}):Or(e);case Yi:case Mr:case Nr:case zr:case qi:break;case qt:if(t=e.nextCharCode(),t<48||t>57)return Or(e);break;default:return Or(e)}}function Ge(e){let t=new jt(e),r=Vi(t);return t.pos!==e.length&&t.error("Unexpected input"),r.terms.length===1&&r.terms[0].type==="Group"?r.terms[0]:r}var ht=function(){};function Ki(e){return typeof e=="function"?e:ht}function Vt(e,t,r){function n(s){switch(o.call(r,s),s.type){case"Group":s.terms.forEach(n);break;case"Multiplier":n(s.term);break;case"Type":case"Property":case"Keyword":case"AtKeyword":case"Function":case"String":case"Token":case"Comma":break;default:throw new Error("Unknown type: "+s.type)}i.call(r,s)}let o=ht,i=ht;if(typeof t=="function"?o=t:t&&(o=Ki(t.enter),i=Ki(t.leave)),o===ht&&i===ht)throw new Error("Neither `enter` nor `leave` walker handler is set or both aren't a function");n(e,r)}var Wl={decorator(e){let t=[],r=null;return{...e,node(n){let o=r;r=n,e.node.call(this,n),r=o},emit(n,o,i){t.push({type:o,value:n,node:i?null:r})},result(){return t}}}};function Yl(e){let t=[];return ve(e,(r,n,o)=>t.push({type:r,value:e.slice(n,o),node:null})),t}function Xi(e,t){return typeof e=="string"?Yl(e):t.generate(e,Wl)}var C={type:"Match"},L={type:"Mismatch"},Kt={type:"DisallowEmpty"},Gl=40,Vl=41;function Z(e,t,r){return t===C&&r===L||e===C&&t===C&&r===C?e:(e.type==="If"&&e.else===L&&t===C&&(t=e.then,e=e.match),{type:"If",match:e,then:t,else:r})}function Zi(e){return e.length>2&&e.charCodeAt(e.length-2)===Gl&&e.charCodeAt(e.length-1)===Vl}function $i(e){return e.type==="Keyword"||e.type==="AtKeyword"||e.type==="Function"||e.type==="Type"&&Zi(e.name)}function _r(e,t,r){switch(e){case" ":{let n=C;for(let o=t.length-1;o>=0;o--){let i=t[o];n=Z(i,n,L)}return n}case"|":{let n=L,o=null;for(let i=t.length-1;i>=0;i--){let s=t[i];if($i(s)&&(o===null&&i>0&&$i(t[i-1])&&(o=Object.create(null),n=Z({type:"Enum",map:o},C,n)),o!==null)){let u=(Zi(s.name)?s.name.slice(0,-1):s.name).toLowerCase();if(!(u in o)){o[u]=s;continue}}o=null,n=Z(s,C,n)}return n}case"&&":{if(t.length>5)return{type:"MatchOnce",terms:t,all:!0};let n=L;for(let o=t.length-1;o>=0;o--){let i=t[o],s;t.length>1?s=_r(e,t.filter(function(u){return u!==i}),!1):s=C,n=Z(i,s,n)}return n}case"||":{if(t.length>5)return{type:"MatchOnce",terms:t,all:!1};let n=r?C:L;for(let o=t.length-1;o>=0;o--){let i=t[o],s;t.length>1?s=_r(e,t.filter(function(u){return u!==i}),!0):s=C,n=Z(i,s,n)}return n}}}function Kl(e){let t=C,r=Ur(e.term);if(e.max===0)r=Z(r,Kt,L),t=Z(r,null,L),t.then=Z(C,C,t),e.comma&&(t.then.else=Z({type:"Comma",syntax:e},t,L));else for(let n=e.min||1;n<=e.max;n++)e.comma&&t!==C&&(t=Z({type:"Comma",syntax:e},t,L)),t=Z(r,Z(C,C,t),L);if(e.min===0)t=Z(C,C,t);else for(let n=0;n<e.min-1;n++)e.comma&&t!==C&&(t=Z({type:"Comma",syntax:e},t,L)),t=Z(r,t,L);return t}function Ur(e){if(typeof e=="function")return{type:"Generic",fn:e};switch(e.type){case"Group":{let t=_r(e.combinator,e.terms.map(Ur),!1);return e.disallowEmpty&&(t=Z(t,Kt,L)),t}case"Multiplier":return Kl(e);case"Type":case"Property":return{type:e.type,name:e.name,syntax:e};case"Keyword":return{type:e.type,name:e.name.toLowerCase(),syntax:e};case"AtKeyword":return{type:e.type,name:"@"+e.name.toLowerCase(),syntax:e};case"Function":return{type:e.type,name:e.name.toLowerCase()+"(",syntax:e};case"String":return e.value.length===3?{type:"Token",value:e.value.charAt(1),syntax:e}:{type:e.type,value:e.value.substr(1,e.value.length-2).replace(/\\'/g,"'"),syntax:e};case"Token":return{type:e.type,value:e.value,syntax:e};case"Comma":return{type:e.type,syntax:e};default:throw new Error("Unknown node type:",e.type)}}function Qt(e,t){return typeof e=="string"&&(e=Ge(e)),{type:"MatchGraph",match:Ur(e),syntax:t||null,source:e}}var{hasOwnProperty:Ji}=Object.prototype,Ql=0,Xl=1,Hr=2,oa=3,ea="Match",$l="Mismatch",Zl="Maximum iteration number exceeded (please fill an issue on https://github.com/csstree/csstree/issues)",ta=15e3,Jl=0;function ec(e){let t=null,r=null,n=e;for(;n!==null;)r=n.prev,n.prev=t,t=n,n=r;return t}function jr(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++){let n=t.charCodeAt(r),o=e.charCodeAt(r);if(o>=65&&o<=90&&(o=o|32),o!==n)return!1}return!0}function tc(e){return e.type!==9?!1:e.value!=="?"}function ra(e){return e===null?!0:e.type===18||e.type===2||e.type===21||e.type===19||e.type===23||tc(e)}function na(e){return e===null?!0:e.type===22||e.type===20||e.type===24||e.type===9&&e.value==="/"}function rc(e,t,r){function n(){do R++,S=R<e.length?e[R]:null;while(S!==null&&(S.type===13||S.type===25))}function o(ae){let fe=R+ae;return fe<e.length?e[fe]:null}function i(ae,fe){return{nextState:ae,matchStack:z,syntaxStack:p,thenStack:m,tokenIndex:R,prev:fe}}function s(ae){m={nextState:ae,matchStack:z,syntaxStack:p,prev:m}}function u(ae){f=i(ae,f)}function c(){z={type:Xl,syntax:t.syntax,token:S,prev:z},n(),P=null,R>ke&&(ke=R)}function a(){p={syntax:t.syntax,opts:t.syntax.opts||p!==null&&p.opts||null,prev:p},z={type:Hr,syntax:t.syntax,token:z.token,prev:z}}function l(){z.type===Hr?z=z.prev:z={type:oa,syntax:p.syntax,token:z.token,prev:z},p=p.prev}let p=null,m=null,f=null,P=null,te=0,X=null,S=null,R=-1,ke=0,z={type:Ql,syntax:null,token:null,prev:null};for(n();X===null&&++te<ta;)switch(t.type){case"Match":if(m===null){if(S!==null&&(R!==e.length-1||S.value!=="\\0"&&S.value!=="\\9")){t=L;break}X=ea;break}if(t=m.nextState,t===Kt)if(m.matchStack===z){t=L;break}else t=C;for(;m.syntaxStack!==p;)l();m=m.prev;break;case"Mismatch":if(P!==null&&P!==!1)(f===null||R>f.tokenIndex)&&(f=P,P=!1);else if(f===null){X=$l;break}t=f.nextState,m=f.thenStack,p=f.syntaxStack,z=f.matchStack,R=f.tokenIndex,S=R<e.length?e[R]:null,f=f.prev;break;case"MatchGraph":t=t.match;break;case"If":t.else!==L&&u(t.else),t.then!==C&&s(t.then),t=t.match;break;case"MatchOnce":t={type:"MatchOnceBuffer",syntax:t,index:0,mask:0};break;case"MatchOnceBuffer":{let Q=t.syntax.terms;if(t.index===Q.length){if(t.mask===0||t.syntax.all){t=L;break}t=C;break}if(t.mask===(1<<Q.length)-1){t=C;break}for(;t.index<Q.length;t.index++){let J=1<<t.index;if((t.mask&J)===0){u(t),s({type:"AddMatchOnce",syntax:t.syntax,mask:t.mask|J}),t=Q[t.index++];break}}break}case"AddMatchOnce":t={type:"MatchOnceBuffer",syntax:t.syntax,index:0,mask:t.mask};break;case"Enum":if(S!==null){let Q=S.value.toLowerCase();if(Q.indexOf("\\")!==-1&&(Q=Q.replace(/\\[09].*$/,"")),Ji.call(t.map,Q)){t=t.map[Q];break}}t=L;break;case"Generic":{let Q=p!==null?p.opts:null,J=R+Math.floor(t.fn(S,o,Q));if(!isNaN(J)&&J>R){for(;R<J;)c();t=C}else t=L;break}case"Type":case"Property":{let Q=t.type==="Type"?"types":"properties",J=Ji.call(r,Q)?r[Q][t.name]:null;if(!J||!J.match)throw new Error("Bad syntax reference: "+(t.type==="Type"?"<"+t.name+">":"<'"+t.name+"'>"));if(P!==!1&&S!==null&&t.type==="Type"&&(t.name==="custom-ident"&&S.type===1||t.name==="length"&&S.value==="0")){P===null&&(P=i(t,f)),t=L;break}a(),t=J.match;break}case"Keyword":{let Q=t.name;if(S!==null){let J=S.value;if(J.indexOf("\\")!==-1&&(J=J.replace(/\\[09].*$/,"")),jr(J,Q)){c(),t=C;break}}t=L;break}case"AtKeyword":case"Function":if(S!==null&&jr(S.value,t.name)){c(),t=C;break}t=L;break;case"Token":if(S!==null&&S.value===t.value){c(),t=C;break}t=L;break;case"Comma":S!==null&&S.type===18?ra(z.token)?t=L:(c(),t=na(S)?L:C):t=ra(z.token)||na(S)?C:L;break;case"String":let ae="",fe=R;for(;fe<e.length&&ae.length<t.value.length;fe++)ae+=e[fe].value;if(jr(ae,t.value)){for(;R<fe;)c();t=C}else t=L;break;default:throw new Error("Unknown node type: "+t.type)}switch(Jl+=te,X){case null:console.warn("[csstree-match] BREAK after "+ta+" iterations"),X=Zl,z=null;break;case ea:for(;p!==null;)l();break;default:z=null}return{tokens:e,reason:X,iterations:te,match:z,longestMatch:ke}}function qr(e,t,r){let n=rc(e,t,r||{});if(n.match===null)return n;let o=n.match,i=n.match={syntax:t.syntax||null,match:[]},s=[i];for(o=ec(o).prev;o!==null;){switch(o.type){case Hr:i.match.push(i={syntax:o.syntax,match:[]}),s.push(i);break;case oa:s.pop(),i=s[s.length-1];break;default:i.match.push({syntax:o.syntax||null,token:o.token.value,node:o.token.node})}o=o.prev}return n}var Yr={};b(Yr,{getTrace:()=>ia,isKeyword:()=>ic,isProperty:()=>oc,isType:()=>nc});function ia(e){function t(o){return o===null?!1:o.type==="Type"||o.type==="Property"||o.type==="Keyword"}function r(o){if(Array.isArray(o.match)){for(let i=0;i<o.match.length;i++)if(r(o.match[i]))return t(o.syntax)&&n.unshift(o.syntax),!0}else if(o.node===e)return n=t(o.syntax)?[o.syntax]:[],!0;return!1}let n=null;return this.matched!==null&&r(this.matched),n}function nc(e,t){return Wr(this,e,r=>r.type==="Type"&&r.name===t)}function oc(e,t){return Wr(this,e,r=>r.type==="Property"&&r.name===t)}function ic(e){return Wr(this,e,t=>t.type==="Keyword")}function Wr(e,t,r){let n=ia.call(e,t);return n===null?!1:n.some(r)}function aa(e){return"node"in e?e.node:aa(e.match[0])}function sa(e){return"node"in e?e.node:sa(e.match[e.match.length-1])}function Gr(e,t,r,n,o){function i(u){if(u.syntax!==null&&u.syntax.type===n&&u.syntax.name===o){let c=aa(u),a=sa(u);e.syntax.walk(t,function(l,p,m){if(l===c){let f=new I;do{if(f.appendData(p.data),p.data===a)break;p=p.next}while(p!==null);s.push({parent:m,nodes:f})}})}Array.isArray(u.match)&&u.match.forEach(i)}let s=[];return r.matched!==null&&i(r.matched),s}var{hasOwnProperty:mt}=Object.prototype;function Vr(e){return typeof e=="number"&&isFinite(e)&&Math.floor(e)===e&&e>=0}function la(e){return Boolean(e)&&Vr(e.offset)&&Vr(e.line)&&Vr(e.column)}function ac(e,t){return function(n,o){if(!n||n.constructor!==Object)return o(n,"Type of node should be an Object");for(let i in n){let s=!0;if(mt.call(n,i)!==!1){if(i==="type")n.type!==e&&o(n,"Wrong node type `"+n.type+"`, expected `"+e+"`");else if(i==="loc"){if(n.loc===null)continue;if(n.loc&&n.loc.constructor===Object)if(typeof n.loc.source!="string")i+=".source";else if(!la(n.loc.start))i+=".start";else if(!la(n.loc.end))i+=".end";else continue;s=!1}else if(t.hasOwnProperty(i)){s=!1;for(let u=0;!s&&u<t[i].length;u++){let c=t[i][u];switch(c){case String:s=typeof n[i]=="string";break;case Boolean:s=typeof n[i]=="boolean";break;case null:s=n[i]===null;break;default:typeof c=="string"?s=n[i]&&n[i].type===c:Array.isArray(c)&&(s=n[i]instanceof I)}}}else o(n,"Unknown field `"+i+"` for "+e+" node type");s||o(n,"Bad value for `"+e+"."+i+"`")}}for(let i in t)mt.call(t,i)&&mt.call(n,i)===!1&&o(n,"Field `"+e+"."+i+"` is missed")}}function sc(e,t){let r=t.structure,n={type:String,loc:!0},o={type:'"'+e+'"'};for(let i in r){if(mt.call(r,i)===!1)continue;let s=[],u=n[i]=Array.isArray(r[i])?r[i].slice():[r[i]];for(let c=0;c<u.length;c++){let a=u[c];if(a===String||a===Boolean)s.push(a.name);else if(a===null)s.push("null");else if(typeof a=="string")s.push("<"+a+">");else if(Array.isArray(a))s.push("List");else throw new Error("Wrong value `"+a+"` in `"+e+"."+i+"` structure definition")}o[i]=s.join(" | ")}return{docs:o,check:ac(e,n)}}function ca(e){let t={};if(e.node){for(let r in e.node)if(mt.call(e.node,r)){let n=e.node[r];if(n.structure)t[r]=sc(r,n);else throw new Error("Missed `structure` field in `"+r+"` node type definition")}}return t}var lc=Qt(Ft.join(" | "));function Kr(e,t,r){let n={};for(let o in e)e[o].syntax&&(n[o]=r?e[o].syntax:Pe(e[o].syntax,{compact:t}));return n}function cc(e,t,r){let n={};for(let[o,i]of Object.entries(e))n[o]={prelude:i.prelude&&(r?i.prelude.syntax:Pe(i.prelude.syntax,{compact:t})),descriptors:i.descriptors&&Kr(i.descriptors,t,r)};return n}function uc(e){for(let t=0;t<e.length;t++)if(e[t].value.toLowerCase()==="var(")return!0;return!1}function ce(e,t,r){return{matched:e,iterations:r,error:t,...Yr}}function Ve(e,t,r,n){let o=Xi(r,e.syntax),i;return uc(o)?ce(null,new Error("Matching for a tree with var() is not supported")):(n&&(i=qr(o,e.cssWideKeywordsSyntax,e)),(!n||!i.match)&&(i=qr(o,t.match,e),!i.match)?ce(null,new Pi(i.reason,t.syntax,r,i),i.iterations):ce(i.match,null,i.iterations))}var Ke=class{constructor(t,r,n){if(this.cssWideKeywordsSyntax=lc,this.syntax=r,this.generic=!1,this.atrules=Object.create(null),this.properties=Object.create(null),this.types=Object.create(null),this.structure=n||ca(t),t){if(t.types)for(let o in t.types)this.addType_(o,t.types[o]);if(t.generic){this.generic=!0;for(let o in Dr)this.addType_(o,Dr[o])}if(t.atrules)for(let o in t.atrules)this.addAtrule_(o,t.atrules[o]);if(t.properties)for(let o in t.properties)this.addProperty_(o,t.properties[o])}}checkStructure(t){function r(i,s){o.push({node:i,message:s})}let n=this.structure,o=[];return this.syntax.walk(t,function(i){n.hasOwnProperty(i.type)?n[i.type].check(i,r):r(i,"Unknown node type `"+i.type+"`")}),o.length?o:!1}createDescriptor(t,r,n,o=null){let i={type:r,name:n},s={type:r,name:n,parent:o,serializable:typeof t=="string"||t&&typeof t.type=="string",syntax:null,match:null};return typeof t=="function"?s.match=Qt(t,i):(typeof t=="string"?Object.defineProperty(s,"syntax",{get(){return Object.defineProperty(s,"syntax",{value:Ge(t)}),s.syntax}}):s.syntax=t,Object.defineProperty(s,"match",{get(){return Object.defineProperty(s,"match",{value:Qt(s.syntax,i)}),s.match}})),s}addAtrule_(t,r){!r||(this.atrules[t]={type:"Atrule",name:t,prelude:r.prelude?this.createDescriptor(r.prelude,"AtrulePrelude",t):null,descriptors:r.descriptors?Object.keys(r.descriptors).reduce((n,o)=>(n[o]=this.createDescriptor(r.descriptors[o],"AtruleDescriptor",o,t),n),Object.create(null)):null})}addProperty_(t,r){!r||(this.properties[t]=this.createDescriptor(r,"Property",t))}addType_(t,r){!r||(this.types[t]=this.createDescriptor(r,"Type",t))}checkAtruleName(t){if(!this.getAtrule(t))return new je("Unknown at-rule","@"+t)}checkAtrulePrelude(t,r){let n=this.checkAtruleName(t);if(n)return n;let o=this.getAtrule(t);if(!o.prelude&&r)return new SyntaxError("At-rule `@"+t+"` should not contain a prelude");if(o.prelude&&!r&&!Ve(this,o.prelude,"",!1).matched)return new SyntaxError("At-rule `@"+t+"` should contain a prelude")}checkAtruleDescriptorName(t,r){let n=this.checkAtruleName(t);if(n)return n;let o=this.getAtrule(t),i=Mt(r);if(!o.descriptors)return new SyntaxError("At-rule `@"+t+"` has no known descriptors");if(!o.descriptors[i.name]&&!o.descriptors[i.basename])return new je("Unknown at-rule descriptor",r)}checkPropertyName(t){if(!this.getProperty(t))return new je("Unknown property",t)}matchAtrulePrelude(t,r){let n=this.checkAtrulePrelude(t,r);if(n)return ce(null,n);let o=this.getAtrule(t);return o.prelude?Ve(this,o.prelude,r||"",!1):ce(null,null)}matchAtruleDescriptor(t,r,n){let o=this.checkAtruleDescriptorName(t,r);if(o)return ce(null,o);let i=this.getAtrule(t),s=Mt(r);return Ve(this,i.descriptors[s.name]||i.descriptors[s.basename],n,!1)}matchDeclaration(t){return t.type!=="Declaration"?ce(null,new Error("Not a Declaration node")):this.matchProperty(t.property,t.value)}matchProperty(t,r){if(vr(t).custom)return ce(null,new Error("Lexer matching doesn't applicable for custom properties"));let n=this.checkPropertyName(t);return n?ce(null,n):Ve(this,this.getProperty(t),r,!0)}matchType(t,r){let n=this.getType(t);return n?Ve(this,n,r,!1):ce(null,new je("Unknown type",t))}match(t,r){return typeof t!="string"&&(!t||!t.type)?ce(null,new je("Bad syntax")):((typeof t=="string"||!t.match)&&(t=this.createDescriptor(t,"Type","anonymous")),Ve(this,t,r,!1))}findValueFragments(t,r,n,o){return Gr(this,r,this.matchProperty(t,r),n,o)}findDeclarationValueFragments(t,r,n){return Gr(this,t.value,this.matchDeclaration(t),r,n)}findAllFragments(t,r,n){let o=[];return this.syntax.walk(t,{visit:"Declaration",enter:i=>{o.push.apply(o,this.findDeclarationValueFragments(i,r,n))}}),o}getAtrule(t,r=!0){let n=Mt(t);return(n.vendor&&r?this.atrules[n.name]||this.atrules[n.basename]:this.atrules[n.name])||null}getAtrulePrelude(t,r=!0){let n=this.getAtrule(t,r);return n&&n.prelude||null}getAtruleDescriptor(t,r){return this.atrules.hasOwnProperty(t)&&this.atrules.declarators&&this.atrules[t].declarators[r]||null}getProperty(t,r=!0){let n=vr(t);return(n.vendor&&r?this.properties[n.name]||this.properties[n.basename]:this.properties[n.name])||null}getType(t){return hasOwnProperty.call(this.types,t)?this.types[t]:null}validate(){function t(o,i,s,u){if(s.has(i))return s.get(i);s.set(i,!1),u.syntax!==null&&Vt(u.syntax,function(c){if(c.type!=="Type"&&c.type!=="Property")return;let a=c.type==="Type"?o.types:o.properties,l=c.type==="Type"?r:n;(!hasOwnProperty.call(a,c.name)||t(o,c.name,l,a[c.name]))&&s.set(i,!0)},this)}let r=new Map,n=new Map;for(let o in this.types)t(this,o,r,this.types[o]);for(let o in this.properties)t(this,o,n,this.properties[o]);return r=[...r.keys()].filter(o=>r.get(o)),n=[...n.keys()].filter(o=>n.get(o)),r.length||n.length?{types:r,properties:n}:null}dump(t,r){return{generic:this.generic,types:Kr(this.types,!r,t),properties:Kr(this.properties,!r,t),atrules:cc(this.atrules,!r,t)}}toString(){return JSON.stringify(this.dump())}};var{hasOwnProperty:Qe}=Object.prototype,pc={generic:!0,types:Qr,atrules:{prelude:pa,descriptors:pa},properties:Qr,parseContext:hc,scope:ma,atrule:["parse"],pseudo:["parse"],node:["name","structure","parse","generate","walkContext"]};function Xt(e){return e&&e.constructor===Object}function ha(e){return Xt(e)?{...e}:e}function hc(e,t){return Object.assign(e,t)}function ma(e,t){for(let r in t)Qe.call(t,r)&&(Xt(e[r])?ma(e[r],t[r]):e[r]=ha(t[r]));return e}function ua(e,t){return typeof t=="string"&&/^\s*\|/.test(t)?typeof e=="string"?e+t:t.replace(/^\s*\|\s*/,""):t||null}function Qr(e,t){if(typeof t=="string")return ua(e,t);let r={...e};for(let n in t)Qe.call(t,n)&&(r[n]=ua(Qe.call(e,n)?e[n]:void 0,t[n]));return r}function pa(e,t){let r=Qr(e,t);return!Xt(r)||Object.keys(r).length?r:null}function ft(e,t,r){for(let n in r)if(Qe.call(r,n)!==!1){if(r[n]===!0)Qe.call(t,n)&&(e[n]=ha(t[n]));else if(r[n]){if(typeof r[n]=="function"){let o=r[n];e[n]=o({},e[n]),e[n]=o(e[n]||{},t[n])}else if(Xt(r[n])){let o={};for(let i in e[n])o[i]=ft({},e[n][i],r[n]);for(let i in t[n])o[i]=ft(o[i]||{},t[n][i],r[n]);e[n]=o}else if(Array.isArray(r[n])){let o={},i=r[n].reduce(function(s,u){return s[u]=!0,s},{});for(let[s,u]of Object.entries(e[n]||{}))o[s]={},u&&ft(o[s],u,i);for(let s in t[n])Qe.call(t[n],s)&&(o[s]||(o[s]={}),t[n]&&t[n][s]&&ft(o[s],t[n][s],i));e[n]=o}}}return e}var $t=(e,t)=>ft(e,t,pc);function fa(e){let t=Xo(e),r=Ei(e),n=wi(e),{fromPlainObject:o,toPlainObject:i}=vi(r),s={lexer:null,createLexer:u=>new Ke(u,s,s.lexer.structure),tokenize:ve,parse:t,generate:n,walk:r,find:r.find,findLast:r.findLast,findAll:r.findAll,fromPlainObject:o,toPlainObject:i,fork(u){let c=$t({},e);return fa(typeof u=="function"?u(c,Object.assign):$t(c,u))}};return s.lexer=new Ke({generic:!0,types:e.types,atrules:e.atrules,properties:e.properties,node:e.node},s),s}var Xr=e=>fa($t({},e));var da={generic:!0,types:{"absolute-size":"xx-small|x-small|small|medium|large|x-large|xx-large|xxx-large","alpha-value":"<number>|<percentage>","angle-percentage":"<angle>|<percentage>","angular-color-hint":"<angle-percentage>","angular-color-stop":"<color>&&<color-stop-angle>?","angular-color-stop-list":"[<angular-color-stop> [, <angular-color-hint>]?]# , <angular-color-stop>","animateable-feature":"scroll-position|contents|<custom-ident>",attachment:"scroll|fixed|local","attr()":"attr( <attr-name> <type-or-unit>? [, <attr-fallback>]? )","attr-matcher":"['~'|'|'|'^'|'$'|'*']? '='","attr-modifier":"i|s","attribute-selector":"'[' <wq-name> ']'|'[' <wq-name> <attr-matcher> [<string-token>|<ident-token>] <attr-modifier>? ']'","auto-repeat":"repeat( [auto-fill|auto-fit] , [<line-names>? <fixed-size>]+ <line-names>? )","auto-track-list":"[<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>? <auto-repeat> [<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>?","baseline-position":"[first|last]? baseline","basic-shape":"<inset()>|<circle()>|<ellipse()>|<polygon()>|<path()>","bg-image":"none|<image>","bg-layer":"<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>","bg-position":"[[left|center|right|top|bottom|<length-percentage>]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]|[center|[left|right] <length-percentage>?]&&[center|[top|bottom] <length-percentage>?]]","bg-size":"[<length-percentage>|auto]{1,2}|cover|contain","blur()":"blur( <length> )","blend-mode":"normal|multiply|screen|overlay|darken|lighten|color-dodge|color-burn|hard-light|soft-light|difference|exclusion|hue|saturation|color|luminosity",box:"border-box|padding-box|content-box","brightness()":"brightness( <number-percentage> )","calc()":"calc( <calc-sum> )","calc-sum":"<calc-product> [['+'|'-'] <calc-product>]*","calc-product":"<calc-value> ['*' <calc-value>|'/' <number>]*","calc-value":"<number>|<dimension>|<percentage>|( <calc-sum> )","cf-final-image":"<image>|<color>","cf-mixing-image":"<percentage>?&&<image>","circle()":"circle( [<shape-radius>]? [at <position>]? )","clamp()":"clamp( <calc-sum>#{3} )","class-selector":"'.' <ident-token>","clip-source":"<url>",color:"<rgb()>|<rgba()>|<hsl()>|<hsla()>|<hwb()>|<lab()>|<lch()>|<hex-color>|<named-color>|currentcolor|<deprecated-system-color>","color-stop":"<color-stop-length>|<color-stop-angle>","color-stop-angle":"<angle-percentage>{1,2}","color-stop-length":"<length-percentage>{1,2}","color-stop-list":"[<linear-color-stop> [, <linear-color-hint>]?]# , <linear-color-stop>",combinator:"'>'|'+'|'~'|['||']","common-lig-values":"[common-ligatures|no-common-ligatures]","compat-auto":"searchfield|textarea|push-button|slider-horizontal|checkbox|radio|square-button|menulist|listbox|meter|progress-bar|button","composite-style":"clear|copy|source-over|source-in|source-out|source-atop|destination-over|destination-in|destination-out|destination-atop|xor","compositing-operator":"add|subtract|intersect|exclude","compound-selector":"[<type-selector>? <subclass-selector>* [<pseudo-element-selector> <pseudo-class-selector>*]*]!","compound-selector-list":"<compound-selector>#","complex-selector":"<compound-selector> [<combinator>? <compound-selector>]*","complex-selector-list":"<complex-selector>#","conic-gradient()":"conic-gradient( [from <angle>]? [at <position>]? , <angular-color-stop-list> )","contextual-alt-values":"[contextual|no-contextual]","content-distribution":"space-between|space-around|space-evenly|stretch","content-list":"[<string>|contents|<image>|<counter>|<quote>|<target>|<leader()>|<attr()>]+","content-position":"center|start|end|flex-start|flex-end","content-replacement":"<image>","contrast()":"contrast( [<number-percentage>] )",counter:"<counter()>|<counters()>","counter()":"counter( <counter-name> , <counter-style>? )","counter-name":"<custom-ident>","counter-style":"<counter-style-name>|symbols( )","counter-style-name":"<custom-ident>","counters()":"counters( <counter-name> , <string> , <counter-style>? )","cross-fade()":"cross-fade( <cf-mixing-image> , <cf-final-image>? )","cubic-bezier-timing-function":"ease|ease-in|ease-out|ease-in-out|cubic-bezier( <number [0,1]> , <number> , <number [0,1]> , <number> )","deprecated-system-color":"ActiveBorder|ActiveCaption|AppWorkspace|Background|ButtonFace|ButtonHighlight|ButtonShadow|ButtonText|CaptionText|GrayText|Highlight|HighlightText|InactiveBorder|InactiveCaption|InactiveCaptionText|InfoBackground|InfoText|Menu|MenuText|Scrollbar|ThreeDDarkShadow|ThreeDFace|ThreeDHighlight|ThreeDLightShadow|ThreeDShadow|Window|WindowFrame|WindowText","discretionary-lig-values":"[discretionary-ligatures|no-discretionary-ligatures]","display-box":"contents|none","display-inside":"flow|flow-root|table|flex|grid|ruby","display-internal":"table-row-group|table-header-group|table-footer-group|table-row|table-cell|table-column-group|table-column|table-caption|ruby-base|ruby-text|ruby-base-container|ruby-text-container","display-legacy":"inline-block|inline-list-item|inline-table|inline-flex|inline-grid","display-listitem":"<display-outside>?&&[flow|flow-root]?&&list-item","display-outside":"block|inline|run-in","drop-shadow()":"drop-shadow( <length>{2,3} <color>? )","east-asian-variant-values":"[jis78|jis83|jis90|jis04|simplified|traditional]","east-asian-width-values":"[full-width|proportional-width]","element()":"element( <custom-ident> , [first|start|last|first-except]? )|element( <id-selector> )","ellipse()":"ellipse( [<shape-radius>{2}]? [at <position>]? )","ending-shape":"circle|ellipse","env()":"env( <custom-ident> , <declaration-value>? )","explicit-track-list":"[<line-names>? <track-size>]+ <line-names>?","family-name":"<string>|<custom-ident>+","feature-tag-value":"<string> [<integer>|on|off]?","feature-type":"@stylistic|@historical-forms|@styleset|@character-variant|@swash|@ornaments|@annotation","feature-value-block":"<feature-type> '{' <feature-value-declaration-list> '}'","feature-value-block-list":"<feature-value-block>+","feature-value-declaration":"<custom-ident> : <integer>+ ;","feature-value-declaration-list":"<feature-value-declaration>","feature-value-name":"<custom-ident>","fill-rule":"nonzero|evenodd","filter-function":"<blur()>|<brightness()>|<contrast()>|<drop-shadow()>|<grayscale()>|<hue-rotate()>|<invert()>|<opacity()>|<saturate()>|<sepia()>","filter-function-list":"[<filter-function>|<url>]+","final-bg-layer":"<'background-color'>||<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>","fit-content()":"fit-content( [<length>|<percentage>] )","fixed-breadth":"<length-percentage>","fixed-repeat":"repeat( [<integer [1,\u221E]>] , [<line-names>? <fixed-size>]+ <line-names>? )","fixed-size":"<fixed-breadth>|minmax( <fixed-breadth> , <track-breadth> )|minmax( <inflexible-breadth> , <fixed-breadth> )","font-stretch-absolute":"normal|ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded|<percentage>","font-variant-css21":"[normal|small-caps]","font-weight-absolute":"normal|bold|<number [1,1000]>","frequency-percentage":"<frequency>|<percentage>","general-enclosed":"[<function-token> <any-value> )]|( <ident> <any-value> )","generic-family":"serif|sans-serif|cursive|fantasy|monospace|-apple-system","generic-name":"serif|sans-serif|cursive|fantasy|monospace","geometry-box":"<shape-box>|fill-box|stroke-box|view-box",gradient:"<linear-gradient()>|<repeating-linear-gradient()>|<radial-gradient()>|<repeating-radial-gradient()>|<conic-gradient()>|<repeating-conic-gradient()>|<-legacy-gradient>","grayscale()":"grayscale( <number-percentage> )","grid-line":"auto|<custom-ident>|[<integer>&&<custom-ident>?]|[span&&[<integer>||<custom-ident>]]","historical-lig-values":"[historical-ligatures|no-historical-ligatures]","hsl()":"hsl( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsl( <hue> , <percentage> , <percentage> , <alpha-value>? )","hsla()":"hsla( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsla( <hue> , <percentage> , <percentage> , <alpha-value>? )",hue:"<number>|<angle>","hue-rotate()":"hue-rotate( <angle> )","hwb()":"hwb( [<hue>|none] [<percentage>|none] [<percentage>|none] [/ [<alpha-value>|none]]? )",image:"<url>|<image()>|<image-set()>|<element()>|<paint()>|<cross-fade()>|<gradient>","image()":"image( <image-tags>? [<image-src>? , <color>?]! )","image-set()":"image-set( <image-set-option># )","image-set-option":"[<image>|<string>] [<resolution>||type( <string> )]","image-src":"<url>|<string>","image-tags":"ltr|rtl","inflexible-breadth":"<length>|<percentage>|min-content|max-content|auto","inset()":"inset( <length-percentage>{1,4} [round <'border-radius'>]? )","invert()":"invert( <number-percentage> )","keyframes-name":"<custom-ident>|<string>","keyframe-block":"<keyframe-selector># { <declaration-list> }","keyframe-block-list":"<keyframe-block>+","keyframe-selector":"from|to|<percentage>","layer()":"layer( <layer-name> )","layer-name":"<ident> ['.' <ident>]*","leader()":"leader( <leader-type> )","leader-type":"dotted|solid|space|<string>","length-percentage":"<length>|<percentage>","line-names":"'[' <custom-ident>* ']'","line-name-list":"[<line-names>|<name-repeat>]+","line-style":"none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset","line-width":"<length>|thin|medium|thick","linear-color-hint":"<length-percentage>","linear-color-stop":"<color> <color-stop-length>?","linear-gradient()":"linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )","mask-layer":"<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||<geometry-box>||[<geometry-box>|no-clip]||<compositing-operator>||<masking-mode>","mask-position":"[<length-percentage>|left|center|right] [<length-percentage>|top|center|bottom]?","mask-reference":"none|<image>|<mask-source>","mask-source":"<url>","masking-mode":"alpha|luminance|match-source","matrix()":"matrix( <number>#{6} )","matrix3d()":"matrix3d( <number>#{16} )","max()":"max( <calc-sum># )","media-and":"<media-in-parens> [and <media-in-parens>]+","media-condition":"<media-not>|<media-and>|<media-or>|<media-in-parens>","media-condition-without-or":"<media-not>|<media-and>|<media-in-parens>","media-feature":"( [<mf-plain>|<mf-boolean>|<mf-range>] )","media-in-parens":"( <media-condition> )|<media-feature>|<general-enclosed>","media-not":"not <media-in-parens>","media-or":"<media-in-parens> [or <media-in-parens>]+","media-query":"<media-condition>|[not|only]? <media-type> [and <media-condition-without-or>]?","media-query-list":"<media-query>#","media-type":"<ident>","mf-boolean":"<mf-name>","mf-name":"<ident>","mf-plain":"<mf-name> : <mf-value>","mf-range":"<mf-name> ['<'|'>']? '='? <mf-value>|<mf-value> ['<'|'>']? '='? <mf-name>|<mf-value> '<' '='? <mf-name> '<' '='? <mf-value>|<mf-value> '>' '='? <mf-name> '>' '='? <mf-value>","mf-value":"<number>|<dimension>|<ident>|<ratio>","min()":"min( <calc-sum># )","minmax()":"minmax( [<length>|<percentage>|min-content|max-content|auto] , [<length>|<percentage>|<flex>|min-content|max-content|auto] )","name-repeat":"repeat( [<integer [1,\u221E]>|auto-fill] , <line-names>+ )","named-color":"transparent|aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen|<-non-standard-color>","namespace-prefix":"<ident>","ns-prefix":"[<ident-token>|'*']? '|'","number-percentage":"<number>|<percentage>","numeric-figure-values":"[lining-nums|oldstyle-nums]","numeric-fraction-values":"[diagonal-fractions|stacked-fractions]","numeric-spacing-values":"[proportional-nums|tabular-nums]",nth:"<an-plus-b>|even|odd","opacity()":"opacity( [<number-percentage>] )","overflow-position":"unsafe|safe","outline-radius":"<length>|<percentage>","page-body":"<declaration>? [; <page-body>]?|<page-margin-box> <page-body>","page-margin-box":"<page-margin-box-type> '{' <declaration-list> '}'","page-margin-box-type":"@top-left-corner|@top-left|@top-center|@top-right|@top-right-corner|@bottom-left-corner|@bottom-left|@bottom-center|@bottom-right|@bottom-right-corner|@left-top|@left-middle|@left-bottom|@right-top|@right-middle|@right-bottom","page-selector-list":"[<page-selector>#]?","page-selector":"<pseudo-page>+|<ident> <pseudo-page>*","page-size":"A5|A4|A3|B5|B4|JIS-B5|JIS-B4|letter|legal|ledger","path()":"path( [<fill-rule> ,]? <string> )","paint()":"paint( <ident> , <declaration-value>? )","perspective()":"perspective( <length> )","polygon()":"polygon( <fill-rule>? , [<length-percentage> <length-percentage>]# )",position:"[[left|center|right]||[top|center|bottom]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]?|[[left|right] <length-percentage>]&&[[top|bottom] <length-percentage>]]","pseudo-class-selector":"':' <ident-token>|':' <function-token> <any-value> ')'","pseudo-element-selector":"':' <pseudo-class-selector>","pseudo-page":": [left|right|first|blank]",quote:"open-quote|close-quote|no-open-quote|no-close-quote","radial-gradient()":"radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )","relative-selector":"<combinator>? <complex-selector>","relative-selector-list":"<relative-selector>#","relative-size":"larger|smaller","repeat-style":"repeat-x|repeat-y|[repeat|space|round|no-repeat]{1,2}","repeating-conic-gradient()":"repeating-conic-gradient( [from <angle>]? [at <position>]? , <angular-color-stop-list> )","repeating-linear-gradient()":"repeating-linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )","repeating-radial-gradient()":"repeating-radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )","rgb()":"rgb( <percentage>{3} [/ <alpha-value>]? )|rgb( <number>{3} [/ <alpha-value>]? )|rgb( <percentage>#{3} , <alpha-value>? )|rgb( <number>#{3} , <alpha-value>? )","rgba()":"rgba( <percentage>{3} [/ <alpha-value>]? )|rgba( <number>{3} [/ <alpha-value>]? )|rgba( <percentage>#{3} , <alpha-value>? )|rgba( <number>#{3} , <alpha-value>? )","rotate()":"rotate( [<angle>|<zero>] )","rotate3d()":"rotate3d( <number> , <number> , <number> , [<angle>|<zero>] )","rotateX()":"rotateX( [<angle>|<zero>] )","rotateY()":"rotateY( [<angle>|<zero>] )","rotateZ()":"rotateZ( [<angle>|<zero>] )","saturate()":"saturate( <number-percentage> )","scale()":"scale( <number> , <number>? )","scale3d()":"scale3d( <number> , <number> , <number> )","scaleX()":"scaleX( <number> )","scaleY()":"scaleY( <number> )","scaleZ()":"scaleZ( <number> )","self-position":"center|start|end|self-start|self-end|flex-start|flex-end","shape-radius":"<length-percentage>|closest-side|farthest-side","skew()":"skew( [<angle>|<zero>] , [<angle>|<zero>]? )","skewX()":"skewX( [<angle>|<zero>] )","skewY()":"skewY( [<angle>|<zero>] )","sepia()":"sepia( <number-percentage> )",shadow:"inset?&&<length>{2,4}&&<color>?","shadow-t":"[<length>{2,3}&&<color>?]",shape:"rect( <top> , <right> , <bottom> , <left> )|rect( <top> <right> <bottom> <left> )","shape-box":"<box>|margin-box","side-or-corner":"[left|right]||[top|bottom]","single-animation":"<time>||<easing-function>||<time>||<single-animation-iteration-count>||<single-animation-direction>||<single-animation-fill-mode>||<single-animation-play-state>||[none|<keyframes-name>]","single-animation-direction":"normal|reverse|alternate|alternate-reverse","single-animation-fill-mode":"none|forwards|backwards|both","single-animation-iteration-count":"infinite|<number>","single-animation-play-state":"running|paused","single-animation-timeline":"auto|none|<timeline-name>","single-transition":"[none|<single-transition-property>]||<time>||<easing-function>||<time>","single-transition-property":"all|<custom-ident>",size:"closest-side|farthest-side|closest-corner|farthest-corner|<length>|<length-percentage>{2}","step-position":"jump-start|jump-end|jump-none|jump-both|start|end","step-timing-function":"step-start|step-end|steps( <integer> [, <step-position>]? )","subclass-selector":"<id-selector>|<class-selector>|<attribute-selector>|<pseudo-class-selector>","supports-condition":"not <supports-in-parens>|<supports-in-parens> [and <supports-in-parens>]*|<supports-in-parens> [or <supports-in-parens>]*","supports-in-parens":"( <supports-condition> )|<supports-feature>|<general-enclosed>","supports-feature":"<supports-decl>|<supports-selector-fn>","supports-decl":"( <declaration> )","supports-selector-fn":"selector( <complex-selector> )",symbol:"<string>|<image>|<custom-ident>",target:"<target-counter()>|<target-counters()>|<target-text()>","target-counter()":"target-counter( [<string>|<url>] , <custom-ident> , <counter-style>? )","target-counters()":"target-counters( [<string>|<url>] , <custom-ident> , <string> , <counter-style>? )","target-text()":"target-text( [<string>|<url>] , [content|before|after|first-letter]? )","time-percentage":"<time>|<percentage>","timeline-name":"<custom-ident>|<string>","easing-function":"linear|<cubic-bezier-timing-function>|<step-timing-function>","track-breadth":"<length-percentage>|<flex>|min-content|max-content|auto","track-list":"[<line-names>? [<track-size>|<track-repeat>]]+ <line-names>?","track-repeat":"repeat( [<integer [1,\u221E]>] , [<line-names>? <track-size>]+ <line-names>? )","track-size":"<track-breadth>|minmax( <inflexible-breadth> , <track-breadth> )|fit-content( [<length>|<percentage>] )","transform-function":"<matrix()>|<translate()>|<translateX()>|<translateY()>|<scale()>|<scaleX()>|<scaleY()>|<rotate()>|<skew()>|<skewX()>|<skewY()>|<matrix3d()>|<translate3d()>|<translateZ()>|<scale3d()>|<scaleZ()>|<rotate3d()>|<rotateX()>|<rotateY()>|<rotateZ()>|<perspective()>","transform-list":"<transform-function>+","translate()":"translate( <length-percentage> , <length-percentage>? )","translate3d()":"translate3d( <length-percentage> , <length-percentage> , <length> )","translateX()":"translateX( <length-percentage> )","translateY()":"translateY( <length-percentage> )","translateZ()":"translateZ( <length> )","type-or-unit":"string|color|url|integer|number|length|angle|time|frequency|cap|ch|em|ex|ic|lh|rlh|rem|vb|vi|vw|vh|vmin|vmax|mm|Q|cm|in|pt|pc|px|deg|grad|rad|turn|ms|s|Hz|kHz|%","type-selector":"<wq-name>|<ns-prefix>? '*'","var()":"var( <custom-property-name> , <declaration-value>? )","viewport-length":"auto|<length-percentage>","visual-box":"content-box|padding-box|border-box","wq-name":"<ns-prefix>? <ident-token>","-legacy-gradient":"<-webkit-gradient()>|<-legacy-linear-gradient>|<-legacy-repeating-linear-gradient>|<-legacy-radial-gradient>|<-legacy-repeating-radial-gradient>","-legacy-linear-gradient":"-moz-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-linear-gradient( <-legacy-linear-gradient-arguments> )","-legacy-repeating-linear-gradient":"-moz-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )","-legacy-linear-gradient-arguments":"[<angle>|<side-or-corner>]? , <color-stop-list>","-legacy-radial-gradient":"-moz-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-radial-gradient( <-legacy-radial-gradient-arguments> )","-legacy-repeating-radial-gradient":"-moz-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )","-legacy-radial-gradient-arguments":"[<position> ,]? [[[<-legacy-radial-gradient-shape>||<-legacy-radial-gradient-size>]|[<length>|<percentage>]{2}] ,]? <color-stop-list>","-legacy-radial-gradient-size":"closest-side|closest-corner|farthest-side|farthest-corner|contain|cover","-legacy-radial-gradient-shape":"circle|ellipse","-non-standard-font":"-apple-system-body|-apple-system-headline|-apple-system-subheadline|-apple-system-caption1|-apple-system-caption2|-apple-system-footnote|-apple-system-short-body|-apple-system-short-headline|-apple-system-short-subheadline|-apple-system-short-caption1|-apple-system-short-footnote|-apple-system-tall-body","-non-standard-color":"-moz-ButtonDefault|-moz-ButtonHoverFace|-moz-ButtonHoverText|-moz-CellHighlight|-moz-CellHighlightText|-moz-Combobox|-moz-ComboboxText|-moz-Dialog|-moz-DialogText|-moz-dragtargetzone|-moz-EvenTreeRow|-moz-Field|-moz-FieldText|-moz-html-CellHighlight|-moz-html-CellHighlightText|-moz-mac-accentdarkestshadow|-moz-mac-accentdarkshadow|-moz-mac-accentface|-moz-mac-accentlightesthighlight|-moz-mac-accentlightshadow|-moz-mac-accentregularhighlight|-moz-mac-accentregularshadow|-moz-mac-chrome-active|-moz-mac-chrome-inactive|-moz-mac-focusring|-moz-mac-menuselect|-moz-mac-menushadow|-moz-mac-menutextselect|-moz-MenuHover|-moz-MenuHoverText|-moz-MenuBarText|-moz-MenuBarHoverText|-moz-nativehyperlinktext|-moz-OddTreeRow|-moz-win-communicationstext|-moz-win-mediatext|-moz-activehyperlinktext|-moz-default-background-color|-moz-default-color|-moz-hyperlinktext|-moz-visitedhyperlinktext|-webkit-activelink|-webkit-focus-ring-color|-webkit-link|-webkit-text","-non-standard-image-rendering":"optimize-contrast|-moz-crisp-edges|-o-crisp-edges|-webkit-optimize-contrast","-non-standard-overflow":"-moz-scrollbars-none|-moz-scrollbars-horizontal|-moz-scrollbars-vertical|-moz-hidden-unscrollable","-non-standard-width":"fill-available|min-intrinsic|intrinsic|-moz-available|-moz-fit-content|-moz-min-content|-moz-max-content|-webkit-min-content|-webkit-max-content","-webkit-gradient()":"-webkit-gradient( <-webkit-gradient-type> , <-webkit-gradient-point> [, <-webkit-gradient-point>|, <-webkit-gradient-radius> , <-webkit-gradient-point>] [, <-webkit-gradient-radius>]? [, <-webkit-gradient-color-stop>]* )","-webkit-gradient-color-stop":"from( <color> )|color-stop( [<number-zero-one>|<percentage>] , <color> )|to( <color> )","-webkit-gradient-point":"[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]","-webkit-gradient-radius":"<length>|<percentage>","-webkit-gradient-type":"linear|radial","-webkit-mask-box-repeat":"repeat|stretch|round","-webkit-mask-clip-style":"border|border-box|padding|padding-box|content|content-box|text","-ms-filter-function-list":"<-ms-filter-function>+","-ms-filter-function":"<-ms-filter-function-progid>|<-ms-filter-function-legacy>","-ms-filter-function-progid":"'progid:' [<ident-token> '.']* [<ident-token>|<function-token> <any-value>? )]","-ms-filter-function-legacy":"<ident-token>|<function-token> <any-value>? )","-ms-filter":"<string>",age:"child|young|old","attr-name":"<wq-name>","attr-fallback":"<any-value>","bg-clip":"<box>|border|text","border-radius":"<length-percentage>{1,2}",bottom:"<length>|auto","generic-voice":"[<age>? <gender> <integer>?]",gender:"male|female|neutral","lab()":"lab( [<percentage>|<number>|none] [<percentage>|<number>|none] [<percentage>|<number>|none] [/ [<alpha-value>|none]]? )","lch()":"lch( [<percentage>|<number>|none] [<percentage>|<number>|none] [<hue>|none] [/ [<alpha-value>|none]]? )",left:"<length>|auto","mask-image":"<mask-reference>#",paint:"none|<color>|<url> [none|<color>]?|context-fill|context-stroke",ratio:"<number [0,\u221E]> [/ <number [0,\u221E]>]?","reversed-counter-name":"reversed( <counter-name> )",right:"<length>|auto","svg-length":"<percentage>|<length>|<number>","svg-writing-mode":"lr-tb|rl-tb|tb-rl|lr|rl|tb",top:"<length>|auto","track-group":"'(' [<string>* <track-minmax> <string>*]+ ')' ['[' <positive-integer> ']']?|<track-minmax>","track-list-v0":"[<string>* <track-group> <string>*]+|none","track-minmax":"minmax( <track-breadth> , <track-breadth> )|auto|<track-breadth>|fit-content",x:"<number>",y:"<number>",declaration:"<ident-token> : <declaration-value>? ['!' important]?","declaration-list":"[<declaration>? ';']* <declaration>?",url:"url( <string> <url-modifier>* )|<url-token>","url-modifier":"<ident>|<function-token> <any-value> )","number-zero-one":"<number [0,1]>","number-one-or-greater":"<number [1,\u221E]>","positive-integer":"<integer [0,\u221E]>","-non-standard-display":"-ms-inline-flexbox|-ms-grid|-ms-inline-grid|-webkit-flex|-webkit-inline-flex|-webkit-box|-webkit-inline-box|-moz-inline-stack|-moz-box|-moz-inline-box"},properties:{"--*":"<declaration-value>","-ms-accelerator":"false|true","-ms-block-progression":"tb|rl|bt|lr","-ms-content-zoom-chaining":"none|chained","-ms-content-zooming":"none|zoom","-ms-content-zoom-limit":"<'-ms-content-zoom-limit-min'> <'-ms-content-zoom-limit-max'>","-ms-content-zoom-limit-max":"<percentage>","-ms-content-zoom-limit-min":"<percentage>","-ms-content-zoom-snap":"<'-ms-content-zoom-snap-type'>||<'-ms-content-zoom-snap-points'>","-ms-content-zoom-snap-points":"snapInterval( <percentage> , <percentage> )|snapList( <percentage># )","-ms-content-zoom-snap-type":"none|proximity|mandatory","-ms-filter":"<string>","-ms-flow-from":"[none|<custom-ident>]#","-ms-flow-into":"[none|<custom-ident>]#","-ms-grid-columns":"none|<track-list>|<auto-track-list>","-ms-grid-rows":"none|<track-list>|<auto-track-list>","-ms-high-contrast-adjust":"auto|none","-ms-hyphenate-limit-chars":"auto|<integer>{1,3}","-ms-hyphenate-limit-lines":"no-limit|<integer>","-ms-hyphenate-limit-zone":"<percentage>|<length>","-ms-ime-align":"auto|after","-ms-overflow-style":"auto|none|scrollbar|-ms-autohiding-scrollbar","-ms-scrollbar-3dlight-color":"<color>","-ms-scrollbar-arrow-color":"<color>","-ms-scrollbar-base-color":"<color>","-ms-scrollbar-darkshadow-color":"<color>","-ms-scrollbar-face-color":"<color>","-ms-scrollbar-highlight-color":"<color>","-ms-scrollbar-shadow-color":"<color>","-ms-scrollbar-track-color":"<color>","-ms-scroll-chaining":"chained|none","-ms-scroll-limit":"<'-ms-scroll-limit-x-min'> <'-ms-scroll-limit-y-min'> <'-ms-scroll-limit-x-max'> <'-ms-scroll-limit-y-max'>","-ms-scroll-limit-x-max":"auto|<length>","-ms-scroll-limit-x-min":"<length>","-ms-scroll-limit-y-max":"auto|<length>","-ms-scroll-limit-y-min":"<length>","-ms-scroll-rails":"none|railed","-ms-scroll-snap-points-x":"snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )","-ms-scroll-snap-points-y":"snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )","-ms-scroll-snap-type":"none|proximity|mandatory","-ms-scroll-snap-x":"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-x'>","-ms-scroll-snap-y":"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-y'>","-ms-scroll-translation":"none|vertical-to-horizontal","-ms-text-autospace":"none|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space","-ms-touch-select":"grippers|none","-ms-user-select":"none|element|text","-ms-wrap-flow":"auto|both|start|end|maximum|clear","-ms-wrap-margin":"<length>","-ms-wrap-through":"wrap|none","-moz-appearance":"none|button|button-arrow-down|button-arrow-next|button-arrow-previous|button-arrow-up|button-bevel|button-focus|caret|checkbox|checkbox-container|checkbox-label|checkmenuitem|dualbutton|groupbox|listbox|listitem|menuarrow|menubar|menucheckbox|menuimage|menuitem|menuitemtext|menulist|menulist-button|menulist-text|menulist-textfield|menupopup|menuradio|menuseparator|meterbar|meterchunk|progressbar|progressbar-vertical|progresschunk|progresschunk-vertical|radio|radio-container|radio-label|radiomenuitem|range|range-thumb|resizer|resizerpanel|scale-horizontal|scalethumbend|scalethumb-horizontal|scalethumbstart|scalethumbtick|scalethumb-vertical|scale-vertical|scrollbarbutton-down|scrollbarbutton-left|scrollbarbutton-right|scrollbarbutton-up|scrollbarthumb-horizontal|scrollbarthumb-vertical|scrollbartrack-horizontal|scrollbartrack-vertical|searchfield|separator|sheet|spinner|spinner-downbutton|spinner-textfield|spinner-upbutton|splitter|statusbar|statusbarpanel|tab|tabpanel|tabpanels|tab-scroll-arrow-back|tab-scroll-arrow-forward|textfield|textfield-multiline|toolbar|toolbarbutton|toolbarbutton-dropdown|toolbargripper|toolbox|tooltip|treeheader|treeheadercell|treeheadersortarrow|treeitem|treeline|treetwisty|treetwistyopen|treeview|-moz-mac-unified-toolbar|-moz-win-borderless-glass|-moz-win-browsertabbar-toolbox|-moz-win-communicationstext|-moz-win-communications-toolbox|-moz-win-exclude-glass|-moz-win-glass|-moz-win-mediatext|-moz-win-media-toolbox|-moz-window-button-box|-moz-window-button-box-maximized|-moz-window-button-close|-moz-window-button-maximize|-moz-window-button-minimize|-moz-window-button-restore|-moz-window-frame-bottom|-moz-window-frame-left|-moz-window-frame-right|-moz-window-titlebar|-moz-window-titlebar-maximized","-moz-binding":"<url>|none","-moz-border-bottom-colors":"<color>+|none","-moz-border-left-colors":"<color>+|none","-moz-border-right-colors":"<color>+|none","-moz-border-top-colors":"<color>+|none","-moz-context-properties":"none|[fill|fill-opacity|stroke|stroke-opacity]#","-moz-float-edge":"border-box|content-box|margin-box|padding-box","-moz-force-broken-image-icon":"0|1","-moz-image-region":"<shape>|auto","-moz-orient":"inline|block|horizontal|vertical","-moz-outline-radius":"<outline-radius>{1,4} [/ <outline-radius>{1,4}]?","-moz-outline-radius-bottomleft":"<outline-radius>","-moz-outline-radius-bottomright":"<outline-radius>","-moz-outline-radius-topleft":"<outline-radius>","-moz-outline-radius-topright":"<outline-radius>","-moz-stack-sizing":"ignore|stretch-to-fit","-moz-text-blink":"none|blink","-moz-user-focus":"ignore|normal|select-after|select-before|select-menu|select-same|select-all|none","-moz-user-input":"auto|none|enabled|disabled","-moz-user-modify":"read-only|read-write|write-only","-moz-window-dragging":"drag|no-drag","-moz-window-shadow":"default|menu|tooltip|sheet|none","-webkit-appearance":"none|button|button-bevel|caps-lock-indicator|caret|checkbox|default-button|inner-spin-button|listbox|listitem|media-controls-background|media-controls-fullscreen-background|media-current-time-display|media-enter-fullscreen-button|media-exit-fullscreen-button|media-fullscreen-button|media-mute-button|media-overlay-play-button|media-play-button|media-seek-back-button|media-seek-forward-button|media-slider|media-sliderthumb|media-time-remaining-display|media-toggle-closed-captions-button|media-volume-slider|media-volume-slider-container|media-volume-sliderthumb|menulist|menulist-button|menulist-text|menulist-textfield|meter|progress-bar|progress-bar-value|push-button|radio|scrollbarbutton-down|scrollbarbutton-left|scrollbarbutton-right|scrollbarbutton-up|scrollbargripper-horizontal|scrollbargripper-vertical|scrollbarthumb-horizontal|scrollbarthumb-vertical|scrollbartrack-horizontal|scrollbartrack-vertical|searchfield|searchfield-cancel-button|searchfield-decoration|searchfield-results-button|searchfield-results-decoration|slider-horizontal|slider-vertical|sliderthumb-horizontal|sliderthumb-vertical|square-button|textarea|textfield|-apple-pay-button","-webkit-border-before":"<'border-width'>||<'border-style'>||<color>","-webkit-border-before-color":"<color>","-webkit-border-before-style":"<'border-style'>","-webkit-border-before-width":"<'border-width'>","-webkit-box-reflect":"[above|below|right|left]? <length>? <image>?","-webkit-line-clamp":"none|<integer>","-webkit-mask":"[<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||[<box>|border|padding|content|text]||[<box>|border|padding|content]]#","-webkit-mask-attachment":"<attachment>#","-webkit-mask-clip":"[<box>|border|padding|content|text]#","-webkit-mask-composite":"<composite-style>#","-webkit-mask-image":"<mask-reference>#","-webkit-mask-origin":"[<box>|border|padding|content]#","-webkit-mask-position":"<position>#","-webkit-mask-position-x":"[<length-percentage>|left|center|right]#","-webkit-mask-position-y":"[<length-percentage>|top|center|bottom]#","-webkit-mask-repeat":"<repeat-style>#","-webkit-mask-repeat-x":"repeat|no-repeat|space|round","-webkit-mask-repeat-y":"repeat|no-repeat|space|round","-webkit-mask-size":"<bg-size>#","-webkit-overflow-scrolling":"auto|touch","-webkit-tap-highlight-color":"<color>","-webkit-text-fill-color":"<color>","-webkit-text-stroke":"<length>||<color>","-webkit-text-stroke-color":"<color>","-webkit-text-stroke-width":"<length>","-webkit-touch-callout":"default|none","-webkit-user-modify":"read-only|read-write|read-write-plaintext-only","accent-color":"auto|<color>","align-content":"normal|<baseline-position>|<content-distribution>|<overflow-position>? <content-position>","align-items":"normal|stretch|<baseline-position>|[<overflow-position>? <self-position>]","align-self":"auto|normal|stretch|<baseline-position>|<overflow-position>? <self-position>","align-tracks":"[normal|<baseline-position>|<content-distribution>|<overflow-position>? <content-position>]#",all:"initial|inherit|unset|revert|revert-layer",animation:"<single-animation>#","animation-delay":"<time>#","animation-direction":"<single-animation-direction>#","animation-duration":"<time>#","animation-fill-mode":"<single-animation-fill-mode>#","animation-iteration-count":"<single-animation-iteration-count>#","animation-name":"[none|<keyframes-name>]#","animation-play-state":"<single-animation-play-state>#","animation-timing-function":"<easing-function>#","animation-timeline":"<single-animation-timeline>#",appearance:"none|auto|textfield|menulist-button|<compat-auto>","aspect-ratio":"auto|<ratio>",azimuth:"<angle>|[[left-side|far-left|left|center-left|center|center-right|right|far-right|right-side]||behind]|leftwards|rightwards","backdrop-filter":"none|<filter-function-list>","backface-visibility":"visible|hidden",background:"[<bg-layer> ,]* <final-bg-layer>","background-attachment":"<attachment>#","background-blend-mode":"<blend-mode>#","background-clip":"<bg-clip>#","background-color":"<color>","background-image":"<bg-image>#","background-origin":"<box>#","background-position":"<bg-position>#","background-position-x":"[center|[[left|right|x-start|x-end]? <length-percentage>?]!]#","background-position-y":"[center|[[top|bottom|y-start|y-end]? <length-percentage>?]!]#","background-repeat":"<repeat-style>#","background-size":"<bg-size>#","block-overflow":"clip|ellipsis|<string>","block-size":"<'width'>",border:"<line-width>||<line-style>||<color>","border-block":"<'border-top-width'>||<'border-top-style'>||<color>","border-block-color":"<'border-top-color'>{1,2}","border-block-style":"<'border-top-style'>","border-block-width":"<'border-top-width'>","border-block-end":"<'border-top-width'>||<'border-top-style'>||<color>","border-block-end-color":"<'border-top-color'>","border-block-end-style":"<'border-top-style'>","border-block-end-width":"<'border-top-width'>","border-block-start":"<'border-top-width'>||<'border-top-style'>||<color>","border-block-start-color":"<'border-top-color'>","border-block-start-style":"<'border-top-style'>","border-block-start-width":"<'border-top-width'>","border-bottom":"<line-width>||<line-style>||<color>","border-bottom-color":"<'border-top-color'>","border-bottom-left-radius":"<length-percentage>{1,2}","border-bottom-right-radius":"<length-percentage>{1,2}","border-bottom-style":"<line-style>","border-bottom-width":"<line-width>","border-collapse":"collapse|separate","border-color":"<color>{1,4}","border-end-end-radius":"<length-percentage>{1,2}","border-end-start-radius":"<length-percentage>{1,2}","border-image":"<'border-image-source'>||<'border-image-slice'> [/ <'border-image-width'>|/ <'border-image-width'>? / <'border-image-outset'>]?||<'border-image-repeat'>","border-image-outset":"[<length>|<number>]{1,4}","border-image-repeat":"[stretch|repeat|round|space]{1,2}","border-image-slice":"<number-percentage>{1,4}&&fill?","border-image-source":"none|<image>","border-image-width":"[<length-percentage>|<number>|auto]{1,4}","border-inline":"<'border-top-width'>||<'border-top-style'>||<color>","border-inline-end":"<'border-top-width'>||<'border-top-style'>||<color>","border-inline-color":"<'border-top-color'>{1,2}","border-inline-style":"<'border-top-style'>","border-inline-width":"<'border-top-width'>","border-inline-end-color":"<'border-top-color'>","border-inline-end-style":"<'border-top-style'>","border-inline-end-width":"<'border-top-width'>","border-inline-start":"<'border-top-width'>||<'border-top-style'>||<color>","border-inline-start-color":"<'border-top-color'>","border-inline-start-style":"<'border-top-style'>","border-inline-start-width":"<'border-top-width'>","border-left":"<line-width>||<line-style>||<color>","border-left-color":"<color>","border-left-style":"<line-style>","border-left-width":"<line-width>","border-radius":"<length-percentage>{1,4} [/ <length-percentage>{1,4}]?","border-right":"<line-width>||<line-style>||<color>","border-right-color":"<color>","border-right-style":"<line-style>","border-right-width":"<line-width>","border-spacing":"<length> <length>?","border-start-end-radius":"<length-percentage>{1,2}","border-start-start-radius":"<length-percentage>{1,2}","border-style":"<line-style>{1,4}","border-top":"<line-width>||<line-style>||<color>","border-top-color":"<color>","border-top-left-radius":"<length-percentage>{1,2}","border-top-right-radius":"<length-percentage>{1,2}","border-top-style":"<line-style>","border-top-width":"<line-width>","border-width":"<line-width>{1,4}",bottom:"<length>|<percentage>|auto","box-align":"start|center|end|baseline|stretch","box-decoration-break":"slice|clone","box-direction":"normal|reverse|inherit","box-flex":"<number>","box-flex-group":"<integer>","box-lines":"single|multiple","box-ordinal-group":"<integer>","box-orient":"horizontal|vertical|inline-axis|block-axis|inherit","box-pack":"start|center|end|justify","box-shadow":"none|<shadow>#","box-sizing":"content-box|border-box","break-after":"auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region","break-before":"auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region","break-inside":"auto|avoid|avoid-page|avoid-column|avoid-region","caption-side":"top|bottom|block-start|block-end|inline-start|inline-end","caret-color":"auto|<color>",clear:"none|left|right|both|inline-start|inline-end",clip:"<shape>|auto","clip-path":"<clip-source>|[<basic-shape>||<geometry-box>]|none",color:"<color>","print-color-adjust":"economy|exact","color-scheme":"normal|[light|dark|<custom-ident>]+&&only?","column-count":"<integer>|auto","column-fill":"auto|balance|balance-all","column-gap":"normal|<length-percentage>","column-rule":"<'column-rule-width'>||<'column-rule-style'>||<'column-rule-color'>","column-rule-color":"<color>","column-rule-style":"<'border-style'>","column-rule-width":"<'border-width'>","column-span":"none|all","column-width":"<length>|auto",columns:"<'column-width'>||<'column-count'>",contain:"none|strict|content|[size||layout||style||paint]",content:"normal|none|[<content-replacement>|<content-list>] [/ [<string>|<counter>]+]?","content-visibility":"visible|auto|hidden","counter-increment":"[<counter-name> <integer>?]+|none","counter-reset":"[<counter-name> <integer>?|<reversed-counter-name> <integer>?]+|none","counter-set":"[<counter-name> <integer>?]+|none",cursor:"[[<url> [<x> <y>]? ,]* [auto|default|none|context-menu|help|pointer|progress|wait|cell|crosshair|text|vertical-text|alias|copy|move|no-drop|not-allowed|e-resize|n-resize|ne-resize|nw-resize|s-resize|se-resize|sw-resize|w-resize|ew-resize|ns-resize|nesw-resize|nwse-resize|col-resize|row-resize|all-scroll|zoom-in|zoom-out|grab|grabbing|hand|-webkit-grab|-webkit-grabbing|-webkit-zoom-in|-webkit-zoom-out|-moz-grab|-moz-grabbing|-moz-zoom-in|-moz-zoom-out]]",direction:"ltr|rtl",display:"[<display-outside>||<display-inside>]|<display-listitem>|<display-internal>|<display-box>|<display-legacy>|<-non-standard-display>","empty-cells":"show|hide",filter:"none|<filter-function-list>|<-ms-filter-function-list>",flex:"none|[<'flex-grow'> <'flex-shrink'>?||<'flex-basis'>]","flex-basis":"content|<'width'>","flex-direction":"row|row-reverse|column|column-reverse","flex-flow":"<'flex-direction'>||<'flex-wrap'>","flex-grow":"<number>","flex-shrink":"<number>","flex-wrap":"nowrap|wrap|wrap-reverse",float:"left|right|none|inline-start|inline-end",font:"[[<'font-style'>||<font-variant-css21>||<'font-weight'>||<'font-stretch'>]? <'font-size'> [/ <'line-height'>]? <'font-family'>]|caption|icon|menu|message-box|small-caption|status-bar","font-family":"[<family-name>|<generic-family>]#","font-feature-settings":"normal|<feature-tag-value>#","font-kerning":"auto|normal|none","font-language-override":"normal|<string>","font-optical-sizing":"auto|none","font-variation-settings":"normal|[<string> <number>]#","font-size":"<absolute-size>|<relative-size>|<length-percentage>","font-size-adjust":"none|[ex-height|cap-height|ch-width|ic-width|ic-height]? [from-font|<number>]","font-smooth":"auto|never|always|<absolute-size>|<length>","font-stretch":"<font-stretch-absolute>","font-style":"normal|italic|oblique <angle>?","font-synthesis":"none|[weight||style||small-caps]","font-variant":"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>||stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )||[small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps]||<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero||<east-asian-variant-values>||<east-asian-width-values>||ruby]","font-variant-alternates":"normal|[stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )]","font-variant-caps":"normal|small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps","font-variant-east-asian":"normal|[<east-asian-variant-values>||<east-asian-width-values>||ruby]","font-variant-ligatures":"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>]","font-variant-numeric":"normal|[<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero]","font-variant-position":"normal|sub|super","font-weight":"<font-weight-absolute>|bolder|lighter","forced-color-adjust":"auto|none",gap:"<'row-gap'> <'column-gap'>?",grid:"<'grid-template'>|<'grid-template-rows'> / [auto-flow&&dense?] <'grid-auto-columns'>?|[auto-flow&&dense?] <'grid-auto-rows'>? / <'grid-template-columns'>","grid-area":"<grid-line> [/ <grid-line>]{0,3}","grid-auto-columns":"<track-size>+","grid-auto-flow":"[row|column]||dense","grid-auto-rows":"<track-size>+","grid-column":"<grid-line> [/ <grid-line>]?","grid-column-end":"<grid-line>","grid-column-gap":"<length-percentage>","grid-column-start":"<grid-line>","grid-gap":"<'grid-row-gap'> <'grid-column-gap'>?","grid-row":"<grid-line> [/ <grid-line>]?","grid-row-end":"<grid-line>","grid-row-gap":"<length-percentage>","grid-row-start":"<grid-line>","grid-template":"none|[<'grid-template-rows'> / <'grid-template-columns'>]|[<line-names>? <string> <track-size>? <line-names>?]+ [/ <explicit-track-list>]?","grid-template-areas":"none|<string>+","grid-template-columns":"none|<track-list>|<auto-track-list>|subgrid <line-name-list>?","grid-template-rows":"none|<track-list>|<auto-track-list>|subgrid <line-name-list>?","hanging-punctuation":"none|[first||[force-end|allow-end]||last]",height:"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )","hyphenate-character":"auto|<string>",hyphens:"none|manual|auto","image-orientation":"from-image|<angle>|[<angle>? flip]","image-rendering":"auto|crisp-edges|pixelated|optimizeSpeed|optimizeQuality|<-non-standard-image-rendering>","image-resolution":"[from-image||<resolution>]&&snap?","ime-mode":"auto|normal|active|inactive|disabled","initial-letter":"normal|[<number> <integer>?]","initial-letter-align":"[auto|alphabetic|hanging|ideographic]","inline-size":"<'width'>","input-security":"auto|none",inset:"<'top'>{1,4}","inset-block":"<'top'>{1,2}","inset-block-end":"<'top'>","inset-block-start":"<'top'>","inset-inline":"<'top'>{1,2}","inset-inline-end":"<'top'>","inset-inline-start":"<'top'>",isolation:"auto|isolate","justify-content":"normal|<content-distribution>|<overflow-position>? [<content-position>|left|right]","justify-items":"normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]|legacy|legacy&&[left|right|center]","justify-self":"auto|normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]","justify-tracks":"[normal|<content-distribution>|<overflow-position>? [<content-position>|left|right]]#",left:"<length>|<percentage>|auto","letter-spacing":"normal|<length-percentage>","line-break":"auto|loose|normal|strict|anywhere","line-clamp":"none|<integer>","line-height":"normal|<number>|<length>|<percentage>","line-height-step":"<length>","list-style":"<'list-style-type'>||<'list-style-position'>||<'list-style-image'>","list-style-image":"<image>|none","list-style-position":"inside|outside","list-style-type":"<counter-style>|<string>|none",margin:"[<length>|<percentage>|auto]{1,4}","margin-block":"<'margin-left'>{1,2}","margin-block-end":"<'margin-left'>","margin-block-start":"<'margin-left'>","margin-bottom":"<length>|<percentage>|auto","margin-inline":"<'margin-left'>{1,2}","margin-inline-end":"<'margin-left'>","margin-inline-start":"<'margin-left'>","margin-left":"<length>|<percentage>|auto","margin-right":"<length>|<percentage>|auto","margin-top":"<length>|<percentage>|auto","margin-trim":"none|in-flow|all",mask:"<mask-layer>#","mask-border":"<'mask-border-source'>||<'mask-border-slice'> [/ <'mask-border-width'>? [/ <'mask-border-outset'>]?]?||<'mask-border-repeat'>||<'mask-border-mode'>","mask-border-mode":"luminance|alpha","mask-border-outset":"[<length>|<number>]{1,4}","mask-border-repeat":"[stretch|repeat|round|space]{1,2}","mask-border-slice":"<number-percentage>{1,4} fill?","mask-border-source":"none|<image>","mask-border-width":"[<length-percentage>|<number>|auto]{1,4}","mask-clip":"[<geometry-box>|no-clip]#","mask-composite":"<compositing-operator>#","mask-image":"<mask-reference>#","mask-mode":"<masking-mode>#","mask-origin":"<geometry-box>#","mask-position":"<position>#","mask-repeat":"<repeat-style>#","mask-size":"<bg-size>#","mask-type":"luminance|alpha","masonry-auto-flow":"[pack|next]||[definite-first|ordered]","math-style":"normal|compact","max-block-size":"<'max-width'>","max-height":"none|<length-percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )","max-inline-size":"<'max-width'>","max-lines":"none|<integer>","max-width":"none|<length-percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|<-non-standard-width>","min-block-size":"<'min-width'>","min-height":"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )","min-inline-size":"<'min-width'>","min-width":"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|<-non-standard-width>","mix-blend-mode":"<blend-mode>|plus-lighter","object-fit":"fill|contain|cover|none|scale-down","object-position":"<position>",offset:"[<'offset-position'>? [<'offset-path'> [<'offset-distance'>||<'offset-rotate'>]?]?]! [/ <'offset-anchor'>]?","offset-anchor":"auto|<position>","offset-distance":"<length-percentage>","offset-path":"none|ray( [<angle>&&<size>&&contain?] )|<path()>|<url>|[<basic-shape>||<geometry-box>]","offset-position":"auto|<position>","offset-rotate":"[auto|reverse]||<angle>",opacity:"<alpha-value>",order:"<integer>",orphans:"<integer>",outline:"[<'outline-color'>||<'outline-style'>||<'outline-width'>]","outline-color":"<color>|invert","outline-offset":"<length>","outline-style":"auto|<'border-style'>","outline-width":"<line-width>",overflow:"[visible|hidden|clip|scroll|auto]{1,2}|<-non-standard-overflow>","overflow-anchor":"auto|none","overflow-block":"visible|hidden|clip|scroll|auto","overflow-clip-box":"padding-box|content-box","overflow-clip-margin":"<visual-box>||<length [0,\u221E]>","overflow-inline":"visible|hidden|clip|scroll|auto","overflow-wrap":"normal|break-word|anywhere","overflow-x":"visible|hidden|clip|scroll|auto","overflow-y":"visible|hidden|clip|scroll|auto","overscroll-behavior":"[contain|none|auto]{1,2}","overscroll-behavior-block":"contain|none|auto","overscroll-behavior-inline":"contain|none|auto","overscroll-behavior-x":"contain|none|auto","overscroll-behavior-y":"contain|none|auto",padding:"[<length>|<percentage>]{1,4}","padding-block":"<'padding-left'>{1,2}","padding-block-end":"<'padding-left'>","padding-block-start":"<'padding-left'>","padding-bottom":"<length>|<percentage>","padding-inline":"<'padding-left'>{1,2}","padding-inline-end":"<'padding-left'>","padding-inline-start":"<'padding-left'>","padding-left":"<length>|<percentage>","padding-right":"<length>|<percentage>","padding-top":"<length>|<percentage>","page-break-after":"auto|always|avoid|left|right|recto|verso","page-break-before":"auto|always|avoid|left|right|recto|verso","page-break-inside":"auto|avoid","paint-order":"normal|[fill||stroke||markers]",perspective:"none|<length>","perspective-origin":"<position>","place-content":"<'align-content'> <'justify-content'>?","place-items":"<'align-items'> <'justify-items'>?","place-self":"<'align-self'> <'justify-self'>?","pointer-events":"auto|none|visiblePainted|visibleFill|visibleStroke|visible|painted|fill|stroke|all|inherit",position:"static|relative|absolute|sticky|fixed|-webkit-sticky",quotes:"none|auto|[<string> <string>]+",resize:"none|both|horizontal|vertical|block|inline",right:"<length>|<percentage>|auto",rotate:"none|<angle>|[x|y|z|<number>{3}]&&<angle>","row-gap":"normal|<length-percentage>","ruby-align":"start|center|space-between|space-around","ruby-merge":"separate|collapse|auto","ruby-position":"[alternate||[over|under]]|inter-character",scale:"none|<number>{1,3}","scrollbar-color":"auto|<color>{2}","scrollbar-gutter":"auto|stable&&both-edges?","scrollbar-width":"auto|thin|none","scroll-behavior":"auto|smooth","scroll-margin":"<length>{1,4}","scroll-margin-block":"<length>{1,2}","scroll-margin-block-start":"<length>","scroll-margin-block-end":"<length>","scroll-margin-bottom":"<length>","scroll-margin-inline":"<length>{1,2}","scroll-margin-inline-start":"<length>","scroll-margin-inline-end":"<length>","scroll-margin-left":"<length>","scroll-margin-right":"<length>","scroll-margin-top":"<length>","scroll-padding":"[auto|<length-percentage>]{1,4}","scroll-padding-block":"[auto|<length-percentage>]{1,2}","scroll-padding-block-start":"auto|<length-percentage>","scroll-padding-block-end":"auto|<length-percentage>","scroll-padding-bottom":"auto|<length-percentage>","scroll-padding-inline":"[auto|<length-percentage>]{1,2}","scroll-padding-inline-start":"auto|<length-percentage>","scroll-padding-inline-end":"auto|<length-percentage>","scroll-padding-left":"auto|<length-percentage>","scroll-padding-right":"auto|<length-percentage>","scroll-padding-top":"auto|<length-percentage>","scroll-snap-align":"[none|start|end|center]{1,2}","scroll-snap-coordinate":"none|<position>#","scroll-snap-destination":"<position>","scroll-snap-points-x":"none|repeat( <length-percentage> )","scroll-snap-points-y":"none|repeat( <length-percentage> )","scroll-snap-stop":"normal|always","scroll-snap-type":"none|[x|y|block|inline|both] [mandatory|proximity]?","scroll-snap-type-x":"none|mandatory|proximity","scroll-snap-type-y":"none|mandatory|proximity","shape-image-threshold":"<alpha-value>","shape-margin":"<length-percentage>","shape-outside":"none|[<shape-box>||<basic-shape>]|<image>","tab-size":"<integer>|<length>","table-layout":"auto|fixed","text-align":"start|end|left|right|center|justify|match-parent","text-align-last":"auto|start|end|left|right|center|justify","text-combine-upright":"none|all|[digits <integer>?]","text-decoration":"<'text-decoration-line'>||<'text-decoration-style'>||<'text-decoration-color'>||<'text-decoration-thickness'>","text-decoration-color":"<color>","text-decoration-line":"none|[underline||overline||line-through||blink]|spelling-error|grammar-error","text-decoration-skip":"none|[objects||[spaces|[leading-spaces||trailing-spaces]]||edges||box-decoration]","text-decoration-skip-ink":"auto|all|none","text-decoration-style":"solid|double|dotted|dashed|wavy","text-decoration-thickness":"auto|from-font|<length>|<percentage>","text-emphasis":"<'text-emphasis-style'>||<'text-emphasis-color'>","text-emphasis-color":"<color>","text-emphasis-position":"[over|under]&&[right|left]","text-emphasis-style":"none|[[filled|open]||[dot|circle|double-circle|triangle|sesame]]|<string>","text-indent":"<length-percentage>&&hanging?&&each-line?","text-justify":"auto|inter-character|inter-word|none","text-orientation":"mixed|upright|sideways","text-overflow":"[clip|ellipsis|<string>]{1,2}","text-rendering":"auto|optimizeSpeed|optimizeLegibility|geometricPrecision","text-shadow":"none|<shadow-t>#","text-size-adjust":"none|auto|<percentage>","text-transform":"none|capitalize|uppercase|lowercase|full-width|full-size-kana","text-underline-offset":"auto|<length>|<percentage>","text-underline-position":"auto|from-font|[under||[left|right]]",top:"<length>|<percentage>|auto","touch-action":"auto|none|[[pan-x|pan-left|pan-right]||[pan-y|pan-up|pan-down]||pinch-zoom]|manipulation",transform:"none|<transform-list>","transform-box":"content-box|border-box|fill-box|stroke-box|view-box","transform-origin":"[<length-percentage>|left|center|right|top|bottom]|[[<length-percentage>|left|center|right]&&[<length-percentage>|top|center|bottom]] <length>?","transform-style":"flat|preserve-3d",transition:"<single-transition>#","transition-delay":"<time>#","transition-duration":"<time>#","transition-property":"none|<single-transition-property>#","transition-timing-function":"<easing-function>#",translate:"none|<length-percentage> [<length-percentage> <length>?]?","unicode-bidi":"normal|embed|isolate|bidi-override|isolate-override|plaintext|-moz-isolate|-moz-isolate-override|-moz-plaintext|-webkit-isolate|-webkit-isolate-override|-webkit-plaintext","user-select":"auto|text|none|contain|all","vertical-align":"baseline|sub|super|text-top|text-bottom|middle|top|bottom|<percentage>|<length>",visibility:"visible|hidden|collapse","white-space":"normal|pre|nowrap|pre-wrap|pre-line|break-spaces",widows:"<integer>",width:"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|fill|stretch|intrinsic|-moz-max-content|-webkit-max-content|-moz-fit-content|-webkit-fit-content","will-change":"auto|<animateable-feature>#","word-break":"normal|break-all|keep-all|break-word","word-spacing":"normal|<length>","word-wrap":"normal|break-word","writing-mode":"horizontal-tb|vertical-rl|vertical-lr|sideways-rl|sideways-lr|<svg-writing-mode>","z-index":"auto|<integer>",zoom:"normal|reset|<number>|<percentage>","-moz-background-clip":"padding|border","-moz-border-radius-bottomleft":"<'border-bottom-left-radius'>","-moz-border-radius-bottomright":"<'border-bottom-right-radius'>","-moz-border-radius-topleft":"<'border-top-left-radius'>","-moz-border-radius-topright":"<'border-bottom-right-radius'>","-moz-control-character-visibility":"visible|hidden","-moz-osx-font-smoothing":"auto|grayscale","-moz-user-select":"none|text|all|-moz-none","-ms-flex-align":"start|end|center|baseline|stretch","-ms-flex-item-align":"auto|start|end|center|baseline|stretch","-ms-flex-line-pack":"start|end|center|justify|distribute|stretch","-ms-flex-negative":"<'flex-shrink'>","-ms-flex-pack":"start|end|center|justify|distribute","-ms-flex-order":"<integer>","-ms-flex-positive":"<'flex-grow'>","-ms-flex-preferred-size":"<'flex-basis'>","-ms-interpolation-mode":"nearest-neighbor|bicubic","-ms-grid-column-align":"start|end|center|stretch","-ms-grid-row-align":"start|end|center|stretch","-ms-hyphenate-limit-last":"none|always|column|page|spread","-webkit-background-clip":"[<box>|border|padding|content|text]#","-webkit-column-break-after":"always|auto|avoid","-webkit-column-break-before":"always|auto|avoid","-webkit-column-break-inside":"always|auto|avoid","-webkit-font-smoothing":"auto|none|antialiased|subpixel-antialiased","-webkit-mask-box-image":"[<url>|<gradient>|none] [<length-percentage>{4} <-webkit-mask-box-repeat>{2}]?","-webkit-print-color-adjust":"economy|exact","-webkit-text-security":"none|circle|disc|square","-webkit-user-drag":"none|element|auto","-webkit-user-select":"auto|none|text|all","alignment-baseline":"auto|baseline|before-edge|text-before-edge|middle|central|after-edge|text-after-edge|ideographic|alphabetic|hanging|mathematical","baseline-shift":"baseline|sub|super|<svg-length>",behavior:"<url>+","clip-rule":"nonzero|evenodd",cue:"<'cue-before'> <'cue-after'>?","cue-after":"<url> <decibel>?|none","cue-before":"<url> <decibel>?|none","dominant-baseline":"auto|use-script|no-change|reset-size|ideographic|alphabetic|hanging|mathematical|central|middle|text-after-edge|text-before-edge",fill:"<paint>","fill-opacity":"<number-zero-one>","fill-rule":"nonzero|evenodd","glyph-orientation-horizontal":"<angle>","glyph-orientation-vertical":"<angle>",kerning:"auto|<svg-length>",marker:"none|<url>","marker-end":"none|<url>","marker-mid":"none|<url>","marker-start":"none|<url>",pause:"<'pause-before'> <'pause-after'>?","pause-after":"<time>|none|x-weak|weak|medium|strong|x-strong","pause-before":"<time>|none|x-weak|weak|medium|strong|x-strong",rest:"<'rest-before'> <'rest-after'>?","rest-after":"<time>|none|x-weak|weak|medium|strong|x-strong","rest-before":"<time>|none|x-weak|weak|medium|strong|x-strong","shape-rendering":"auto|optimizeSpeed|crispEdges|geometricPrecision",src:"[<url> [format( <string># )]?|local( <family-name> )]#",speak:"auto|none|normal","speak-as":"normal|spell-out||digits||[literal-punctuation|no-punctuation]",stroke:"<paint>","stroke-dasharray":"none|[<svg-length>+]#","stroke-dashoffset":"<svg-length>","stroke-linecap":"butt|round|square","stroke-linejoin":"miter|round|bevel","stroke-miterlimit":"<number-one-or-greater>","stroke-opacity":"<number-zero-one>","stroke-width":"<svg-length>","text-anchor":"start|middle|end","unicode-range":"<urange>#","voice-balance":"<number>|left|center|right|leftwards|rightwards","voice-duration":"auto|<time>","voice-family":"[[<family-name>|<generic-voice>] ,]* [<family-name>|<generic-voice>]|preserve","voice-pitch":"<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]","voice-range":"<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]","voice-rate":"[normal|x-slow|slow|medium|fast|x-fast]||<percentage>","voice-stress":"normal|strong|moderate|none|reduced","voice-volume":"silent|[[x-soft|soft|medium|loud|x-loud]||<decibel>]"},atrules:{charset:{prelude:"<string>",descriptors:null},"counter-style":{prelude:"<counter-style-name>",descriptors:{"additive-symbols":"[<integer>&&<symbol>]#",fallback:"<counter-style-name>",negative:"<symbol> <symbol>?",pad:"<integer>&&<symbol>",prefix:"<symbol>",range:"[[<integer>|infinite]{2}]#|auto","speak-as":"auto|bullets|numbers|words|spell-out|<counter-style-name>",suffix:"<symbol>",symbols:"<symbol>+",system:"cyclic|numeric|alphabetic|symbolic|additive|[fixed <integer>?]|[extends <counter-style-name>]"}},document:{prelude:"[<url>|url-prefix( <string> )|domain( <string> )|media-document( <string> )|regexp( <string> )]#",descriptors:null},"font-face":{prelude:null,descriptors:{"ascent-override":"normal|<percentage>","descent-override":"normal|<percentage>","font-display":"[auto|block|swap|fallback|optional]","font-family":"<family-name>","font-feature-settings":"normal|<feature-tag-value>#","font-variation-settings":"normal|[<string> <number>]#","font-stretch":"<font-stretch-absolute>{1,2}","font-style":"normal|italic|oblique <angle>{0,2}","font-weight":"<font-weight-absolute>{1,2}","font-variant":"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>||stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )||[small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps]||<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero||<east-asian-variant-values>||<east-asian-width-values>||ruby]","line-gap-override":"normal|<percentage>","size-adjust":"<percentage>",src:"[<url> [format( <string># )]?|local( <family-name> )]#","unicode-range":"<urange>#"}},"font-feature-values":{prelude:"<family-name>#",descriptors:null},import:{prelude:"[<string>|<url>] [layer|layer( <layer-name> )]? [supports( [<supports-condition>|<declaration>] )]? <media-query-list>?",descriptors:null},keyframes:{prelude:"<keyframes-name>",descriptors:null},layer:{prelude:"[<layer-name>#|<layer-name>?]",descriptors:null},media:{prelude:"<media-query-list>",descriptors:null},namespace:{prelude:"<namespace-prefix>? [<string>|<url>]",descriptors:null},page:{prelude:"<page-selector-list>",descriptors:{bleed:"auto|<length>",marks:"none|[crop||cross]",size:"<length>{1,2}|auto|[<page-size>||[portrait|landscape]]"}},property:{prelude:"<custom-property-name>",descriptors:{syntax:"<string>",inherits:"true|false","initial-value":"<string>"}},"scroll-timeline":{prelude:"<timeline-name>",descriptors:null},supports:{prelude:"<supports-condition>",descriptors:null},viewport:{prelude:null,descriptors:{height:"<viewport-length>{1,2}","max-height":"<viewport-length>","max-width":"<viewport-length>","max-zoom":"auto|<number>|<percentage>","min-height":"<viewport-length>","min-width":"<viewport-length>","min-zoom":"auto|<number>|<percentage>",orientation:"auto|portrait|landscape","user-zoom":"zoom|fixed","viewport-fit":"auto|contain|cover",width:"<viewport-length>{1,2}",zoom:"auto|<number>|<percentage>"}}}};var bt={};b(bt,{AnPlusB:()=>Jr,Atrule:()=>tn,AtrulePrelude:()=>nn,AttributeSelector:()=>sn,Block:()=>cn,Brackets:()=>pn,CDC:()=>mn,CDO:()=>dn,ClassSelector:()=>bn,Combinator:()=>yn,Comment:()=>wn,Declaration:()=>Sn,DeclarationList:()=>An,Dimension:()=>En,Function:()=>Pn,Hash:()=>Dn,IdSelector:()=>Mn,Identifier:()=>Nn,MediaFeature:()=>Fn,MediaQuery:()=>_n,MediaQueryList:()=>jn,Nth:()=>qn,Number:()=>Yn,Operator:()=>Vn,Parentheses:()=>Qn,Percentage:()=>$n,PseudoClassSelector:()=>Jn,PseudoElementSelector:()=>to,Ratio:()=>no,Raw:()=>io,Rule:()=>so,Selector:()=>co,SelectorList:()=>po,String:()=>bo,StyleSheet:()=>yo,TypeSelector:()=>vo,UnicodeRange:()=>Ao,Url:()=>Do,Value:()=>No,WhiteSpace:()=>Mo});var Jr={};b(Jr,{generate:()=>gc,name:()=>fc,parse:()=>Zr,structure:()=>dc});var me=43,re=45,Zt=110,Ie=!0,mc=!1;function Jt(e,t){let r=this.tokenStart+e,n=this.charCodeAt(r);for((n===me||n===re)&&(t&&this.error("Number sign is not allowed"),r++);r<this.tokenEnd;r++)B(this.charCodeAt(r))||this.error("Integer is expected",r)}function Xe(e){return Jt.call(this,0,e)}function Ce(e,t){if(!this.cmpChar(this.tokenStart+e,t)){let r="";switch(t){case Zt:r="N is expected";break;case re:r="HyphenMinus is expected";break}this.error(r,this.tokenStart+e)}}function $r(){let e=0,t=0,r=this.tokenType;for(;r===13||r===25;)r=this.lookupType(++e);if(r!==10)if(this.isDelim(me,e)||this.isDelim(re,e)){t=this.isDelim(me,e)?me:re;do r=this.lookupType(++e);while(r===13||r===25);r!==10&&(this.skip(e),Xe.call(this,Ie))}else return null;return e>0&&this.skip(e),t===0&&(r=this.charCodeAt(this.tokenStart),r!==me&&r!==re&&this.error("Number sign is expected")),Xe.call(this,t!==0),t===re?"-"+this.consume(10):this.consume(10)}var fc="AnPlusB",dc={a:[String,null],b:[String,null]};function Zr(){let e=this.tokenStart,t=null,r=null;if(this.tokenType===10)Xe.call(this,mc),r=this.consume(10);else if(this.tokenType===1&&this.cmpChar(this.tokenStart,re))switch(t="-1",Ce.call(this,1,Zt),this.tokenEnd-this.tokenStart){case 2:this.next(),r=$r.call(this);break;case 3:Ce.call(this,2,re),this.next(),this.skipSC(),Xe.call(this,Ie),r="-"+this.consume(10);break;default:Ce.call(this,2,re),Jt.call(this,3,Ie),this.next(),r=this.substrToCursor(e+2)}else if(this.tokenType===1||this.isDelim(me)&&this.lookupType(1)===1){let n=0;switch(t="1",this.isDelim(me)&&(n=1,this.next()),Ce.call(this,0,Zt),this.tokenEnd-this.tokenStart){case 1:this.next(),r=$r.call(this);break;case 2:Ce.call(this,1,re),this.next(),this.skipSC(),Xe.call(this,Ie),r="-"+this.consume(10);break;default:Ce.call(this,1,re),Jt.call(this,2,Ie),this.next(),r=this.substrToCursor(e+n+1)}}else if(this.tokenType===12){let n=this.charCodeAt(this.tokenStart),o=n===me||n===re,i=this.tokenStart+o;for(;i<this.tokenEnd&&B(this.charCodeAt(i));i++);i===this.tokenStart+o&&this.error("Integer is expected",this.tokenStart+o),Ce.call(this,i-this.tokenStart,Zt),t=this.substring(e,i),i+1===this.tokenEnd?(this.next(),r=$r.call(this)):(Ce.call(this,i-this.tokenStart+1,re),i+2===this.tokenEnd?(this.next(),this.skipSC(),Xe.call(this,Ie),r="-"+this.consume(10)):(Jt.call(this,i-this.tokenStart+2,Ie),this.next(),r=this.substrToCursor(i+1)))}else this.error();return t!==null&&t.charCodeAt(0)===me&&(t=t.substr(1)),r!==null&&r.charCodeAt(0)===me&&(r=r.substr(1)),{type:"AnPlusB",loc:this.getLocation(e,this.tokenStart),a:t,b:r}}function gc(e){if(e.a){let t=e.a==="+1"&&"n"||e.a==="1"&&"n"||e.a==="-1"&&"-n"||e.a+"n";if(e.b){let r=e.b[0]==="-"||e.b[0]==="+"?e.b:"+"+e.b;this.tokenize(t+r)}else this.tokenize(t)}else this.tokenize(e.b)}var tn={};b(tn,{generate:()=>wc,name:()=>xc,parse:()=>en,structure:()=>kc,walkContext:()=>yc});function ga(e){return this.Raw(e,this.consumeUntilLeftCurlyBracketOrSemicolon,!0)}function bc(){for(let e=1,t;t=this.lookupType(e);e++){if(t===24)return!0;if(t===23||t===3)return!1}return!1}var xc="Atrule",yc="atrule",kc={name:String,prelude:["AtrulePrelude","Raw",null],block:["Block",null]};function en(){let e=this.tokenStart,t,r,n=null,o=null;switch(this.eat(3),t=this.substrToCursor(e+1),r=t.toLowerCase(),this.skipSC(),this.eof===!1&&this.tokenType!==23&&this.tokenType!==17&&(this.parseAtrulePrelude?n=this.parseWithFallback(this.AtrulePrelude.bind(this,t),ga):n=ga.call(this,this.tokenIndex),this.skipSC()),this.tokenType){case 17:this.next();break;case 23:hasOwnProperty.call(this.atrule,r)&&typeof this.atrule[r].block=="function"?o=this.atrule[r].block.call(this):o=this.Block(bc.call(this));break}return{type:"Atrule",loc:this.getLocation(e,this.tokenStart),name:t,prelude:n,block:o}}function wc(e){this.token(3,"@"+e.name),e.prelude!==null&&this.node(e.prelude),e.block?this.node(e.block):this.token(17,";")}var nn={};b(nn,{generate:()=>Ac,name:()=>vc,parse:()=>rn,structure:()=>Cc,walkContext:()=>Sc});var vc="AtrulePrelude",Sc="atrulePrelude",Cc={children:[[]]};function rn(e){let t=null;return e!==null&&(e=e.toLowerCase()),this.skipSC(),hasOwnProperty.call(this.atrule,e)&&typeof this.atrule[e].prelude=="function"?t=this.atrule[e].prelude.call(this):t=this.readSequence(this.scope.AtrulePrelude),this.skipSC(),this.eof!==!0&&this.tokenType!==23&&this.tokenType!==17&&this.error("Semicolon or block is expected"),{type:"AtrulePrelude",loc:this.getLocationFromList(t),children:t}}function Ac(e){this.children(e)}var sn={};b(sn,{generate:()=>Nc,name:()=>Dc,parse:()=>an,structure:()=>Oc});var Tc=36,ba=42,er=61,Ec=94,on=124,Lc=126;function Pc(){this.eof&&this.error("Unexpected end of input");let e=this.tokenStart,t=!1;return this.isDelim(ba)?(t=!0,this.next()):this.isDelim(on)||this.eat(1),this.isDelim(on)?this.charCodeAt(this.tokenStart+1)!==er?(this.next(),this.eat(1)):t&&this.error("Identifier is expected",this.tokenEnd):t&&this.error("Vertical line is expected"),{type:"Identifier",loc:this.getLocation(e,this.tokenStart),name:this.substrToCursor(e)}}function Ic(){let e=this.tokenStart,t=this.charCodeAt(e);return t!==er&&t!==Lc&&t!==Ec&&t!==Tc&&t!==ba&&t!==on&&this.error("Attribute selector (=, ~=, ^=, $=, *=, |=) is expected"),this.next(),t!==er&&(this.isDelim(er)||this.error("Equal sign is expected"),this.next()),this.substrToCursor(e)}var Dc="AttributeSelector",Oc={name:"Identifier",matcher:[String,null],value:["String","Identifier",null],flags:[String,null]};function an(){let e=this.tokenStart,t,r=null,n=null,o=null;return this.eat(19),this.skipSC(),t=Pc.call(this),this.skipSC(),this.tokenType!==20&&(this.tokenType!==1&&(r=Ic.call(this),this.skipSC(),n=this.tokenType===5?this.String():this.Identifier(),this.skipSC()),this.tokenType===1&&(o=this.consume(1),this.skipSC())),this.eat(20),{type:"AttributeSelector",loc:this.getLocation(e,this.tokenStart),name:t,matcher:r,value:n,flags:o}}function Nc(e){this.token(9,"["),this.node(e.name),e.matcher!==null&&(this.tokenize(e.matcher),this.node(e.value)),e.flags!==null&&this.token(1,e.flags),this.token(9,"]")}var cn={};b(cn,{generate:()=>_c,name:()=>Rc,parse:()=>ln,structure:()=>Bc,walkContext:()=>Fc});function ya(e){return this.Raw(e,null,!0)}function zc(){return this.parseWithFallback(this.Rule,ya)}function xa(e){return this.Raw(e,this.consumeUntilSemicolonIncluded,!0)}function Mc(){if(this.tokenType===17)return xa.call(this,this.tokenIndex);let e=this.parseWithFallback(this.Declaration,xa);return this.tokenType===17&&this.next(),e}var Rc="Block",Fc="block",Bc={children:[["Atrule","Rule","Declaration"]]};function ln(e){let t=e?Mc:zc,r=this.tokenStart,n=this.createList();this.eat(23);e:for(;!this.eof;)switch(this.tokenType){case 24:break e;case 13:case 25:this.next();break;case 3:n.push(this.parseWithFallback(this.Atrule,ya));break;default:n.push(t.call(this))}return this.eof||this.eat(24),{type:"Block",loc:this.getLocation(r,this.tokenStart),children:n}}function _c(e){this.token(23,"{"),this.children(e,t=>{t.type==="Declaration"&&this.token(17,";")}),this.token(24,"}")}var pn={};b(pn,{generate:()=>Hc,name:()=>Uc,parse:()=>un,structure:()=>jc});var Uc="Brackets",jc={children:[[]]};function un(e,t){let r=this.tokenStart,n=null;return this.eat(19),n=e.call(this,t),this.eof||this.eat(20),{type:"Brackets",loc:this.getLocation(r,this.tokenStart),children:n}}function Hc(e){this.token(9,"["),this.children(e),this.token(9,"]")}var mn={};b(mn,{generate:()=>Yc,name:()=>qc,parse:()=>hn,structure:()=>Wc});var qc="CDC",Wc=[];function hn(){let e=this.tokenStart;return this.eat(15),{type:"CDC",loc:this.getLocation(e,this.tokenStart)}}function Yc(){this.token(15,"-->")}var dn={};b(dn,{generate:()=>Kc,name:()=>Gc,parse:()=>fn,structure:()=>Vc});var Gc="CDO",Vc=[];function fn(){let e=this.tokenStart;return this.eat(14),{type:"CDO",loc:this.getLocation(e,this.tokenStart)}}function Kc(){this.token(14,"<!--")}var bn={};b(bn,{generate:()=>Zc,name:()=>Xc,parse:()=>gn,structure:()=>$c});var Qc=46,Xc="ClassSelector",$c={name:String};function gn(){return this.eatDelim(Qc),{type:"ClassSelector",loc:this.getLocation(this.tokenStart-1,this.tokenEnd),name:this.consume(1)}}function Zc(e){this.token(9,"."),this.token(1,e.name)}var yn={};b(yn,{generate:()=>ou,name:()=>ru,parse:()=>xn,structure:()=>nu});var Jc=43,ka=47,eu=62,tu=126,ru="Combinator",nu={name:String};function xn(){let e=this.tokenStart,t;switch(this.tokenType){case 13:t=" ";break;case 9:switch(this.charCodeAt(this.tokenStart)){case eu:case Jc:case tu:this.next();break;case ka:this.next(),this.eatIdent("deep"),this.eatDelim(ka);break;default:this.error("Combinator is expected")}t=this.substrToCursor(e);break}return{type:"Combinator",loc:this.getLocation(e,this.tokenStart),name:t}}function ou(e){this.tokenize(e.name)}var wn={};b(wn,{generate:()=>cu,name:()=>su,parse:()=>kn,structure:()=>lu});var iu=42,au=47,su="Comment",lu={value:String};function kn(){let e=this.tokenStart,t=this.tokenEnd;return this.eat(25),t-e+2>=2&&this.charCodeAt(t-2)===iu&&this.charCodeAt(t-1)===au&&(t-=2),{type:"Comment",loc:this.getLocation(e,this.tokenStart),value:this.substring(e+2,t)}}function cu(e){this.token(25,"/*"+e.value+"*/")}var Sn={};b(Sn,{generate:()=>wu,name:()=>xu,parse:()=>vn,structure:()=>ku,walkContext:()=>yu});var va=33,uu=35,pu=36,hu=38,mu=42,fu=43,wa=47;function du(e){return this.Raw(e,this.consumeUntilExclamationMarkOrSemicolon,!0)}function gu(e){return this.Raw(e,this.consumeUntilExclamationMarkOrSemicolon,!1)}function bu(){let e=this.tokenIndex,t=this.Value();return t.type!=="Raw"&&this.eof===!1&&this.tokenType!==17&&this.isDelim(va)===!1&&this.isBalanceEdge(e)===!1&&this.error(),t}var xu="Declaration",yu="declaration",ku={important:[Boolean,String],property:String,value:["Value","Raw"]};function vn(){let e=this.tokenStart,t=this.tokenIndex,r=vu.call(this),n=Rt(r),o=n?this.parseCustomProperty:this.parseValue,i=n?gu:du,s=!1,u;this.skipSC(),this.eat(16);let c=this.tokenIndex;if(n||this.skipSC(),o?u=this.parseWithFallback(bu,i):u=i.call(this,this.tokenIndex),n&&u.type==="Value"&&u.children.isEmpty){for(let a=c-this.tokenIndex;a<=0;a++)if(this.lookupType(a)===13){u.children.appendData({type:"WhiteSpace",loc:null,value:" "});break}}return this.isDelim(va)&&(s=Su.call(this),this.skipSC()),this.eof===!1&&this.tokenType!==17&&this.isBalanceEdge(t)===!1&&this.error(),{type:"Declaration",loc:this.getLocation(e,this.tokenStart),important:s,property:r,value:u}}function wu(e){this.token(1,e.property),this.token(16,":"),this.node(e.value),e.important&&(this.token(9,"!"),this.token(1,e.important===!0?"important":e.important))}function vu(){let e=this.tokenStart;if(this.tokenType===9)switch(this.charCodeAt(this.tokenStart)){case mu:case pu:case fu:case uu:case hu:this.next();break;case wa:this.next(),this.isDelim(wa)&&this.next();break}return this.tokenType===4?this.eat(4):this.eat(1),this.substrToCursor(e)}function Su(){this.eat(9),this.skipSC();let e=this.consume(1);return e==="important"?!0:e}var An={};b(An,{generate:()=>Eu,name:()=>Au,parse:()=>Cn,structure:()=>Tu});function Cu(e){return this.Raw(e,this.consumeUntilSemicolonIncluded,!0)}var Au="DeclarationList",Tu={children:[["Declaration"]]};function Cn(){let e=this.createList();e:for(;!this.eof;)switch(this.tokenType){case 13:case 25:case 17:this.next();break;default:e.push(this.parseWithFallback(this.Declaration,Cu))}return{type:"DeclarationList",loc:this.getLocationFromList(e),children:e}}function Eu(e){this.children(e,t=>{t.type==="Declaration"&&this.token(17,";")})}var En={};b(En,{generate:()=>Iu,name:()=>Lu,parse:()=>Tn,structure:()=>Pu});var Lu="Dimension",Pu={value:String,unit:String};function Tn(){let e=this.tokenStart,t=this.consumeNumber(12);return{type:"Dimension",loc:this.getLocation(e,this.tokenStart),value:t,unit:this.substring(e+t.length,this.tokenStart)}}function Iu(e){this.token(12,e.value+e.unit)}var Pn={};b(Pn,{generate:()=>zu,name:()=>Du,parse:()=>Ln,structure:()=>Nu,walkContext:()=>Ou});var Du="Function",Ou="function",Nu={name:String,children:[[]]};function Ln(e,t){let r=this.tokenStart,n=this.consumeFunctionName(),o=n.toLowerCase(),i;return i=t.hasOwnProperty(o)?t[o].call(this,t):e.call(this,t),this.eof||this.eat(22),{type:"Function",loc:this.getLocation(r,this.tokenStart),name:n,children:i}}function zu(e){this.token(2,e.name+"("),this.children(e),this.token(22,")")}var Dn={};b(Dn,{generate:()=>Bu,name:()=>Ru,parse:()=>In,structure:()=>Fu,xxx:()=>Mu});var Mu="XXX",Ru="Hash",Fu={value:String};function In(){let e=this.tokenStart;return this.eat(4),{type:"Hash",loc:this.getLocation(e,this.tokenStart),value:this.substrToCursor(e+1)}}function Bu(e){this.token(4,"#"+e.value)}var Nn={};b(Nn,{generate:()=>ju,name:()=>_u,parse:()=>On,structure:()=>Uu});var _u="Identifier",Uu={name:String};function On(){return{type:"Identifier",loc:this.getLocation(this.tokenStart,this.tokenEnd),name:this.consume(1)}}function ju(e){this.token(1,e.name)}var Mn={};b(Mn,{generate:()=>Wu,name:()=>Hu,parse:()=>zn,structure:()=>qu});var Hu="IdSelector",qu={name:String};function zn(){let e=this.tokenStart;return this.eat(4),{type:"IdSelector",loc:this.getLocation(e,this.tokenStart),name:this.substrToCursor(e+1)}}function Wu(e){this.token(9,"#"+e.name)}var Fn={};b(Fn,{generate:()=>Vu,name:()=>Yu,parse:()=>Rn,structure:()=>Gu});var Yu="MediaFeature",Gu={name:String,value:["Identifier","Number","Dimension","Ratio",null]};function Rn(){let e=this.tokenStart,t,r=null;if(this.eat(21),this.skipSC(),t=this.consume(1),this.skipSC(),this.tokenType!==22){switch(this.eat(16),this.skipSC(),this.tokenType){case 10:this.lookupNonWSType(1)===9?r=this.Ratio():r=this.Number();break;case 12:r=this.Dimension();break;case 1:r=this.Identifier();break;default:this.error("Number, dimension, ratio or identifier is expected")}this.skipSC()}return this.eat(22),{type:"MediaFeature",loc:this.getLocation(e,this.tokenStart),name:t,value:r}}function Vu(e){this.token(21,"("),this.token(1,e.name),e.value!==null&&(this.token(16,":"),this.node(e.value)),this.token(22,")")}var _n={};b(_n,{generate:()=>Xu,name:()=>Ku,parse:()=>Bn,structure:()=>Qu});var Ku="MediaQuery",Qu={children:[["Identifier","MediaFeature","WhiteSpace"]]};function Bn(){let e=this.createList(),t=null;this.skipSC();e:for(;!this.eof;){switch(this.tokenType){case 25:case 13:this.next();continue;case 1:t=this.Identifier();break;case 21:t=this.MediaFeature();break;default:break e}e.push(t)}return t===null&&this.error("Identifier or parenthesis is expected"),{type:"MediaQuery",loc:this.getLocationFromList(e),children:e}}function Xu(e){this.children(e)}var jn={};b(jn,{generate:()=>Ju,name:()=>$u,parse:()=>Un,structure:()=>Zu});var $u="MediaQueryList",Zu={children:[["MediaQuery"]]};function Un(){let e=this.createList();for(this.skipSC();!this.eof&&(e.push(this.MediaQuery()),this.tokenType===18);)this.next();return{type:"MediaQueryList",loc:this.getLocationFromList(e),children:e}}function Ju(e){this.children(e,()=>this.token(18,","))}var qn={};b(qn,{generate:()=>rp,name:()=>ep,parse:()=>Hn,structure:()=>tp});var ep="Nth",tp={nth:["AnPlusB","Identifier"],selector:["SelectorList",null]};function Hn(){this.skipSC();let e=this.tokenStart,t=e,r=null,n;return this.lookupValue(0,"odd")||this.lookupValue(0,"even")?n=this.Identifier():n=this.AnPlusB(),t=this.tokenStart,this.skipSC(),this.lookupValue(0,"of")&&(this.next(),r=this.SelectorList(),t=this.tokenStart),{type:"Nth",loc:this.getLocation(e,t),nth:n,selector:r}}function rp(e){this.node(e.nth),e.selector!==null&&(this.token(1,"of"),this.node(e.selector))}var Yn={};b(Yn,{generate:()=>ip,name:()=>np,parse:()=>Wn,structure:()=>op});var np="Number",op={value:String};function Wn(){return{type:"Number",loc:this.getLocation(this.tokenStart,this.tokenEnd),value:this.consume(10)}}function ip(e){this.token(10,e.value)}var Vn={};b(Vn,{generate:()=>lp,name:()=>ap,parse:()=>Gn,structure:()=>sp});var ap="Operator",sp={value:String};function Gn(){let e=this.tokenStart;return this.next(),{type:"Operator",loc:this.getLocation(e,this.tokenStart),value:this.substrToCursor(e)}}function lp(e){this.tokenize(e.value)}var Qn={};b(Qn,{generate:()=>pp,name:()=>cp,parse:()=>Kn,structure:()=>up});var cp="Parentheses",up={children:[[]]};function Kn(e,t){let r=this.tokenStart,n=null;return this.eat(21),n=e.call(this,t),this.eof||this.eat(22),{type:"Parentheses",loc:this.getLocation(r,this.tokenStart),children:n}}function pp(e){this.token(21,"("),this.children(e),this.token(22,")")}var $n={};b($n,{generate:()=>fp,name:()=>hp,parse:()=>Xn,structure:()=>mp});var hp="Percentage",mp={value:String};function Xn(){return{type:"Percentage",loc:this.getLocation(this.tokenStart,this.tokenEnd),value:this.consumeNumber(11)}}function fp(e){this.token(11,e.value+"%")}var Jn={};b(Jn,{generate:()=>xp,name:()=>dp,parse:()=>Zn,structure:()=>bp,walkContext:()=>gp});var dp="PseudoClassSelector",gp="function",bp={name:String,children:[["Raw"],null]};function Zn(){let e=this.tokenStart,t=null,r,n;return this.eat(16),this.tokenType===2?(r=this.consumeFunctionName(),n=r.toLowerCase(),hasOwnProperty.call(this.pseudo,n)?(this.skipSC(),t=this.pseudo[n].call(this),this.skipSC()):(t=this.createList(),t.push(this.Raw(this.tokenIndex,null,!1))),this.eat(22)):r=this.consume(1),{type:"PseudoClassSelector",loc:this.getLocation(e,this.tokenStart),name:r,children:t}}function xp(e){this.token(16,":"),e.children===null?this.token(1,e.name):(this.token(2,e.name+"("),this.children(e),this.token(22,")"))}var to={};b(to,{generate:()=>vp,name:()=>yp,parse:()=>eo,structure:()=>wp,walkContext:()=>kp});var yp="PseudoElementSelector",kp="function",wp={name:String,children:[["Raw"],null]};function eo(){let e=this.tokenStart,t=null,r,n;return this.eat(16),this.eat(16),this.tokenType===2?(r=this.consumeFunctionName(),n=r.toLowerCase(),hasOwnProperty.call(this.pseudo,n)?(this.skipSC(),t=this.pseudo[n].call(this),this.skipSC()):(t=this.createList(),t.push(this.Raw(this.tokenIndex,null,!1))),this.eat(22)):r=this.consume(1),{type:"PseudoElementSelector",loc:this.getLocation(e,this.tokenStart),name:r,children:t}}function vp(e){this.token(16,":"),this.token(16,":"),e.children===null?this.token(1,e.name):(this.token(2,e.name+"("),this.children(e),this.token(22,")"))}var no={};b(no,{generate:()=>Ep,name:()=>Ap,parse:()=>ro,structure:()=>Tp});var Sp=47,Cp=46;function Sa(){this.skipSC();let e=this.consume(10);for(let t=0;t<e.length;t++){let r=e.charCodeAt(t);!B(r)&&r!==Cp&&this.error("Unsigned number is expected",this.tokenStart-e.length+t)}return Number(e)===0&&this.error("Zero number is not allowed",this.tokenStart-e.length),e}var Ap="Ratio",Tp={left:String,right:String};function ro(){let e=this.tokenStart,t=Sa.call(this),r;return this.skipSC(),this.eatDelim(Sp),r=Sa.call(this),{type:"Ratio",loc:this.getLocation(e,this.tokenStart),left:t,right:r}}function Ep(e){this.token(10,e.left),this.token(9,"/"),this.token(10,e.right)}var io={};b(io,{generate:()=>Dp,name:()=>Pp,parse:()=>oo,structure:()=>Ip});function Lp(){return this.tokenIndex>0&&this.lookupType(-1)===13?this.tokenIndex>1?this.getTokenStart(this.tokenIndex-1):this.firstCharOffset:this.tokenStart}var Pp="Raw",Ip={value:String};function oo(e,t,r){let n=this.getTokenStart(e),o;return this.skipUntilBalanced(e,t||this.consumeUntilBalanceEnd),r&&this.tokenStart>n?o=Lp.call(this):o=this.tokenStart,{type:"Raw",loc:this.getLocation(n,o),value:this.substring(n,o)}}function Dp(e){this.tokenize(e.value)}var so={};b(so,{generate:()=>Rp,name:()=>Np,parse:()=>ao,structure:()=>Mp,walkContext:()=>zp});function Ca(e){return this.Raw(e,this.consumeUntilLeftCurlyBracket,!0)}function Op(){let e=this.SelectorList();return e.type!=="Raw"&&this.eof===!1&&this.tokenType!==23&&this.error(),e}var Np="Rule",zp="rule",Mp={prelude:["SelectorList","Raw"],block:["Block"]};function ao(){let e=this.tokenIndex,t=this.tokenStart,r,n;return this.parseRulePrelude?r=this.parseWithFallback(Op,Ca):r=Ca.call(this,e),n=this.Block(!0),{type:"Rule",loc:this.getLocation(t,this.tokenStart),prelude:r,block:n}}function Rp(e){this.node(e.prelude),this.node(e.block)}var co={};b(co,{generate:()=>_p,name:()=>Fp,parse:()=>lo,structure:()=>Bp});var Fp="Selector",Bp={children:[["TypeSelector","IdSelector","ClassSelector","AttributeSelector","PseudoClassSelector","PseudoElementSelector","Combinator","WhiteSpace"]]};function lo(){let e=this.readSequence(this.scope.Selector);return this.getFirstListNode(e)===null&&this.error("Selector is expected"),{type:"Selector",loc:this.getLocationFromList(e),children:e}}function _p(e){this.children(e)}var po={};b(po,{generate:()=>qp,name:()=>Up,parse:()=>uo,structure:()=>Hp,walkContext:()=>jp});var Up="SelectorList",jp="selector",Hp={children:[["Selector","Raw"]]};function uo(){let e=this.createList();for(;!this.eof;){if(e.push(this.Selector()),this.tokenType===18){this.next();continue}break}return{type:"SelectorList",loc:this.getLocationFromList(e),children:e}}function qp(e){this.children(e,()=>this.token(18,","))}var bo={};b(bo,{generate:()=>Gp,name:()=>Wp,parse:()=>go,structure:()=>Yp});var fo={};b(fo,{decode:()=>dt,encode:()=>mo});var ho=92,Aa=34,Ta=39;function dt(e){let t=e.length,r=e.charCodeAt(0),n=r===Aa||r===Ta?1:0,o=n===1&&t>1&&e.charCodeAt(t-1)===r?t-2:t-1,i="";for(let s=n;s<=o;s++){let u=e.charCodeAt(s);if(u===ho){if(s===o){s!==t-1&&(i=e.substr(s+1));break}if(u=e.charCodeAt(++s),$(ho,u)){let c=s-1,a=se(e,c);s=a-1,i+=Re(e.substring(c+1,a))}else u===13&&e.charCodeAt(s+1)===10&&s++}else i+=e[s]}return i}function mo(e,t){let r=t?"'":'"',n=t?Ta:Aa,o="",i=!1;for(let s=0;s<e.length;s++){let u=e.charCodeAt(s);if(u===0){o+="\uFFFD";continue}if(u<=31||u===127){o+="\\"+u.toString(16),i=!0;continue}u===n||u===ho?(o+="\\"+e.charAt(s),i=!1):(i&&(ee(u)||pe(u))&&(o+=" "),o+=e.charAt(s),i=!1)}return r+o+r}var Wp="String",Yp={value:String};function go(){return{type:"String",loc:this.getLocation(this.tokenStart,this.tokenEnd),value:dt(this.consume(5))}}function Gp(e){this.token(5,mo(e.value))}var yo={};b(yo,{generate:()=>$p,name:()=>Kp,parse:()=>xo,structure:()=>Xp,walkContext:()=>Qp});var Vp=33;function Ea(e){return this.Raw(e,null,!1)}var Kp="StyleSheet",Qp="stylesheet",Xp={children:[["Comment","CDO","CDC","Atrule","Rule","Raw"]]};function xo(){let e=this.tokenStart,t=this.createList(),r;e:for(;!this.eof;){switch(this.tokenType){case 13:this.next();continue;case 25:if(this.charCodeAt(this.tokenStart+2)!==Vp){this.next();continue}r=this.Comment();break;case 14:r=this.CDO();break;case 15:r=this.CDC();break;case 3:r=this.parseWithFallback(this.Atrule,Ea);break;default:r=this.parseWithFallback(this.Rule,Ea)}t.push(r)}return{type:"StyleSheet",loc:this.getLocation(e,this.tokenStart),children:t}}function $p(e){this.children(e)}var vo={};b(vo,{generate:()=>th,name:()=>Jp,parse:()=>wo,structure:()=>eh});var Zp=42,La=124;function ko(){this.tokenType!==1&&this.isDelim(Zp)===!1&&this.error("Identifier or asterisk is expected"),this.next()}var Jp="TypeSelector",eh={name:String};function wo(){let e=this.tokenStart;return this.isDelim(La)?(this.next(),ko.call(this)):(ko.call(this),this.isDelim(La)&&(this.next(),ko.call(this))),{type:"TypeSelector",loc:this.getLocation(e,this.tokenStart),name:this.substrToCursor(e)}}function th(e){this.tokenize(e.name)}var Ao={};b(Ao,{generate:()=>ah,name:()=>oh,parse:()=>Co,structure:()=>ih});var Pa=43,Ia=45,So=63;function gt(e,t){let r=0;for(let n=this.tokenStart+e;n<this.tokenEnd;n++){let o=this.charCodeAt(n);if(o===Ia&&t&&r!==0)return gt.call(this,e+r+1,!1),-1;ee(o)||this.error(t&&r!==0?"Hyphen minus"+(r<6?" or hex digit":"")+" is expected":r<6?"Hex digit is expected":"Unexpected input",n),++r>6&&this.error("Too many hex digits",n)}return this.next(),r}function tr(e){let t=0;for(;this.isDelim(So);)++t>e&&this.error("Too many question marks"),this.next()}function rh(e){this.charCodeAt(this.tokenStart)!==e&&this.error((e===Pa?"Plus sign":"Hyphen minus")+" is expected")}function nh(){let e=0;switch(this.tokenType){case 10:if(e=gt.call(this,1,!0),this.isDelim(So)){tr.call(this,6-e);break}if(this.tokenType===12||this.tokenType===10){rh.call(this,Ia),gt.call(this,1,!1);break}break;case 12:e=gt.call(this,1,!0),e>0&&tr.call(this,6-e);break;default:if(this.eatDelim(Pa),this.tokenType===1){e=gt.call(this,0,!0),e>0&&tr.call(this,6-e);break}if(this.isDelim(So)){this.next(),tr.call(this,5);break}this.error("Hex digit or question mark is expected")}}var oh="UnicodeRange",ih={value:String};function Co(){let e=this.tokenStart;return this.eatIdent("u"),nh.call(this),{type:"UnicodeRange",loc:this.getLocation(e,this.tokenStart),value:this.substrToCursor(e)}}function ah(e){this.tokenize(e.value)}var Do={};b(Do,{generate:()=>mh,name:()=>ph,parse:()=>Io,structure:()=>hh});var Po={};b(Po,{decode:()=>Eo,encode:()=>Lo});var sh=32,To=92,lh=34,ch=39,uh=40,Da=41;function Eo(e){let t=e.length,r=4,n=e.charCodeAt(t-1)===Da?t-2:t-1,o="";for(;r<n&&pe(e.charCodeAt(r));)r++;for(;r<n&&pe(e.charCodeAt(n));)n--;for(let i=r;i<=n;i++){let s=e.charCodeAt(i);if(s===To){if(i===n){i!==t-1&&(o=e.substr(i+1));break}if(s=e.charCodeAt(++i),$(To,s)){let u=i-1,c=se(e,u);i=c-1,o+=Re(e.substring(u+1,c))}else s===13&&e.charCodeAt(i+1)===10&&i++}else o+=e[i]}return o}function Lo(e){let t="",r=!1;for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);if(o===0){t+="\uFFFD";continue}if(o<=31||o===127){t+="\\"+o.toString(16),r=!0;continue}o===sh||o===To||o===lh||o===ch||o===uh||o===Da?(t+="\\"+e.charAt(n),r=!1):(r&&ee(o)&&(t+=" "),t+=e.charAt(n),r=!1)}return"url("+t+")"}var ph="Url",hh={value:String};function Io(){let e=this.tokenStart,t;switch(this.tokenType){case 7:t=Eo(this.consume(7));break;case 2:this.cmpStr(this.tokenStart,this.tokenEnd,"url(")||this.error("Function name must be `url`"),this.eat(2),this.skipSC(),t=dt(this.consume(5)),this.skipSC(),this.eof||this.eat(22);break;default:this.error("Url or Function is expected")}return{type:"Url",loc:this.getLocation(e,this.tokenStart),value:t}}function mh(e){this.token(7,Lo(e.value))}var No={};b(No,{generate:()=>gh,name:()=>fh,parse:()=>Oo,structure:()=>dh});var fh="Value",dh={children:[[]]};function Oo(){let e=this.tokenStart,t=this.readSequence(this.scope.Value);return{type:"Value",loc:this.getLocation(e,this.tokenStart),children:t}}function gh(e){this.children(e)}var Mo={};b(Mo,{generate:()=>kh,name:()=>xh,parse:()=>zo,structure:()=>yh});var bh=Object.freeze({type:"WhiteSpace",loc:null,value:" "}),xh="WhiteSpace",yh={value:String};function zo(){return this.eat(13),bh}function kh(e){this.token(13,e.value)}var Oa={generic:!0,...da,node:bt};var Ro={};b(Ro,{AtrulePrelude:()=>za,Selector:()=>Ra,Value:()=>Ua});var wh=35,vh=42,Na=43,Sh=45,Ch=47,Ah=117;function xt(e){switch(this.tokenType){case 4:return this.Hash();case 18:return this.Operator();case 21:return this.Parentheses(this.readSequence,e.recognizer);case 19:return this.Brackets(this.readSequence,e.recognizer);case 5:return this.String();case 12:return this.Dimension();case 11:return this.Percentage();case 10:return this.Number();case 2:return this.cmpStr(this.tokenStart,this.tokenEnd,"url(")?this.Url():this.Function(this.readSequence,e.recognizer);case 7:return this.Url();case 1:return this.cmpChar(this.tokenStart,Ah)&&this.cmpChar(this.tokenStart+1,Na)?this.UnicodeRange():this.Identifier();case 9:{let t=this.charCodeAt(this.tokenStart);if(t===Ch||t===vh||t===Na||t===Sh)return this.Operator();t===wh&&this.error("Hex or identifier is expected",this.tokenStart+1);break}}}var za={getNode:xt};var Th=35,Eh=42,Lh=43,Ph=47,Ma=46,Ih=62,Dh=124,Oh=126;function Nh(e,t){t.last!==null&&t.last.type!=="Combinator"&&e!==null&&e.type!=="Combinator"&&t.push({type:"Combinator",loc:null,name:" "})}function zh(){switch(this.tokenType){case 19:return this.AttributeSelector();case 4:return this.IdSelector();case 16:return this.lookupType(1)===16?this.PseudoElementSelector():this.PseudoClassSelector();case 1:return this.TypeSelector();case 10:case 11:return this.Percentage();case 12:this.charCodeAt(this.tokenStart)===Ma&&this.error("Identifier is expected",this.tokenStart+1);break;case 9:{switch(this.charCodeAt(this.tokenStart)){case Lh:case Ih:case Oh:case Ph:return this.Combinator();case Ma:return this.ClassSelector();case Eh:case Dh:return this.TypeSelector();case Th:return this.IdSelector()}break}}}var Ra={onWhiteSpace:Nh,getNode:zh};function Fa(){return this.createSingleNodeList(this.Raw(this.tokenIndex,null,!1))}function Ba(){let e=this.createList();if(this.skipSC(),e.push(this.Identifier()),this.skipSC(),this.tokenType===18){e.push(this.Operator());let t=this.tokenIndex,r=this.parseCustomProperty?this.Value(null):this.Raw(this.tokenIndex,this.consumeUntilExclamationMarkOrSemicolon,!1);if(r.type==="Value"&&r.children.isEmpty){for(let n=t-this.tokenIndex;n<=0;n++)if(this.lookupType(n)===13){r.children.appendData({type:"WhiteSpace",loc:null,value:" "});break}}e.push(r)}return e}function _a(e){return e!==null&&e.type==="Operator"&&(e.value[e.value.length-1]==="-"||e.value[e.value.length-1]==="+")}var Ua={getNode:xt,onWhiteSpace(e,t){_a(e)&&(e.value=" "+e.value),_a(t.last)&&(t.last.value+=" ")},expression:Fa,var:Ba};var ja={parse:{prelude:null,block(){return this.Block(!0)}}};var Ha={parse:{prelude(){let e=this.createList();switch(this.skipSC(),this.tokenType){case 5:e.push(this.String());break;case 7:case 2:e.push(this.Url());break;default:this.error("String or url() is expected")}return(this.lookupNonWSType(0)===1||this.lookupNonWSType(0)===21)&&e.push(this.MediaQueryList()),e},block:null}};var qa={parse:{prelude(){return this.createSingleNodeList(this.MediaQueryList())},block(){return this.Block(!1)}}};var Wa={parse:{prelude(){return this.createSingleNodeList(this.SelectorList())},block(){return this.Block(!0)}}};function Mh(){return this.createSingleNodeList(this.Raw(this.tokenIndex,null,!1))}function Rh(){return this.skipSC(),this.tokenType===1&&this.lookupNonWSType(1)===16?this.createSingleNodeList(this.Declaration()):Ya.call(this)}function Ya(){let e=this.createList(),t;this.skipSC();e:for(;!this.eof;){switch(this.tokenType){case 25:case 13:this.next();continue;case 2:t=this.Function(Mh,this.scope.AtrulePrelude);break;case 1:t=this.Identifier();break;case 21:t=this.Parentheses(Rh,this.scope.AtrulePrelude);break;default:break e}e.push(t)}return e}var Ga={parse:{prelude(){let e=Ya.call(this);return this.getFirstListNode(e)===null&&this.error("Condition is expected"),e},block(){return this.Block(!1)}}};var Va={"font-face":ja,import:Ha,media:qa,page:Wa,supports:Ga};var De={parse(){return this.createSingleNodeList(this.SelectorList())}},Fh={parse(){return this.createSingleNodeList(this.Selector())}},Ka={parse(){return this.createSingleNodeList(this.Identifier())}},rr={parse(){return this.createSingleNodeList(this.Nth())}},Qa={dir:Ka,has:De,lang:Ka,matches:De,is:De,"-moz-any":De,"-webkit-any":De,where:De,not:De,"nth-child":rr,"nth-last-child":rr,"nth-last-of-type":rr,"nth-of-type":rr,slotted:Fh};var Fo={};b(Fo,{AnPlusB:()=>Zr,Atrule:()=>en,AtrulePrelude:()=>rn,AttributeSelector:()=>an,Block:()=>ln,Brackets:()=>un,CDC:()=>hn,CDO:()=>fn,ClassSelector:()=>gn,Combinator:()=>xn,Comment:()=>kn,Declaration:()=>vn,DeclarationList:()=>Cn,Dimension:()=>Tn,Function:()=>Ln,Hash:()=>In,IdSelector:()=>zn,Identifier:()=>On,MediaFeature:()=>Rn,MediaQuery:()=>Bn,MediaQueryList:()=>Un,Nth:()=>Hn,Number:()=>Wn,Operator:()=>Gn,Parentheses:()=>Kn,Percentage:()=>Xn,PseudoClassSelector:()=>Zn,PseudoElementSelector:()=>eo,Ratio:()=>ro,Raw:()=>oo,Rule:()=>ao,Selector:()=>lo,SelectorList:()=>uo,String:()=>go,StyleSheet:()=>xo,TypeSelector:()=>wo,UnicodeRange:()=>Co,Url:()=>Io,Value:()=>Oo,WhiteSpace:()=>zo});var Xa={parseContext:{default:"StyleSheet",stylesheet:"StyleSheet",atrule:"Atrule",atrulePrelude(e){return this.AtrulePrelude(e.atrule?String(e.atrule):null)},mediaQueryList:"MediaQueryList",mediaQuery:"MediaQuery",rule:"Rule",selectorList:"SelectorList",selector:"Selector",block(){return this.Block(!0)},declarationList:"DeclarationList",declaration:"Declaration",value:"Value"},scope:Ro,atrule:Va,pseudo:Qa,node:Fo};var $a={node:bt};var Za=Xr({...Oa,...Xa,...$a});var Zg="2.2.0";function Bo(e){let t={};for(let r in e){let n=e[r];n&&(Array.isArray(n)||n instanceof I?n=n.map(Bo):n.constructor===Object&&(n=Bo(n))),t[r]=n}return t}var es={};b(es,{decode:()=>Bh,encode:()=>_h});var Ja=92;function Bh(e){let t=e.length-1,r="";for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);if(o===Ja){if(n===t)break;if(o=e.charCodeAt(++n),$(Ja,o)){let i=n-1,s=se(e,i);n=s-1,r+=Re(e.substring(i+1,s))}else o===13&&e.charCodeAt(n+1)===10&&n++}else r+=e[n]}return r}function _h(e){let t="";if(e.length===1&&e.charCodeAt(0)===45)return"\\-";for(let r=0;r<e.length;r++){let n=e.charCodeAt(r);if(n===0){t+="\uFFFD";continue}if(n<=31||n===127||n>=48&&n<=57&&(r===0||r===1&&e.charCodeAt(0)===45)){t+="\\"+n.toString(16)+" ";continue}Ne(n)?t+=e.charAt(r):t+="\\"+e.charAt(r)}return t}var{tokenize:ob,parse:ib,generate:ab,lexer:sb,createLexer:lb,walk:cb,find:ub,findLast:pb,findAll:hb,toPlainObject:mb,fromPlainObject:fb,fork:db}=Za;export{Ke as Lexer,I as List,nt as TokenStream,Bo as clone,lb as createLexer,Xr as createSyntax,Qi as definitionSyntax,ub as find,hb as findAll,pb as findLast,db as fork,fb as fromPlainObject,ab as generate,es as ident,Rt as isCustomProperty,Mt as keyword,sb as lexer,ib as parse,vr as property,fo as string,mb as toPlainObject,Fe as tokenNames,Ze as tokenTypes,ob as tokenize,Po as url,_m as vendorPrefix,Zg as version,cb as walk};
diff --git a/src/lib/diff/README.md b/src/lib/diff/README.md
new file mode 100644
index 0000000..e1a90b0
--- /dev/null
+++ b/src/lib/diff/README.md
@@ -0,0 +1,34 @@
+# diff
+
+implementation of myers diff algorithm
+
+[![Build Status](https://travis-ci.org/Swatinem/diff.png?branch=master)](https://travis-ci.org/Swatinem/diff)
+[![Coverage Status](https://coveralls.io/repos/Swatinem/diff/badge.png?branch=master)](https://coveralls.io/r/Swatinem/diff)
+[![Dependency Status](https://gemnasium.com/Swatinem/diff.png)](https://gemnasium.com/Swatinem/diff)
+
+
+This uses the [*An O(ND) Difference Algorithm and Its Variations*](http://www.xmailserver.org/diff2.pdf)
+Also see http://simplygenius.net/Article/DiffTutorial2 and
+http://www.mathertel.de/Diff/ViewSrc.aspx for more inspiration
+
+## Installation
+
+ $ npm install diff
+ $ component install Swatinem/diff
+
+## Usage
+
+### diff(a, b, [eql(a, b)])
+
+Given two arrays (or array-likes, such as strings) `a` and `b` and an optional
+equal function `eql`, this will return an array with the following operations:
+* *nop* the element is in both arrays
+* *ins* the element is only in array `b` and will be inserted
+* *del* the element in only in array `a` and will be removed
+* *rep* the element from `a` will be replaced by the element from `b`.
+This is essentially the same as a del+ins
+
+## License
+
+ LGPLv3
+
diff --git a/src/lib/diff/swatinem_diff.js b/src/lib/diff/swatinem_diff.js
new file mode 100644
index 0000000..d986b2f
--- /dev/null
+++ b/src/lib/diff/swatinem_diff.js
@@ -0,0 +1,272 @@
+/*******************************************************************************
+
+ Key portions of code below was borrowed from:
+ https://github.com/Swatinem/diff
+
+ License is LGPL3 (thanks!) as per:
+ https://github.com/Swatinem/diff/blob/b58391504759/README.md
+
+ I chose to pick this implementation over
+ https://github.com/google/diff-match-patch as suggested by CodeMirror
+ because:
+
+ - Code is clean and simple to read -- useful when unfamiliar with the diff
+ algorithm, this makes changing the code easier if/when needed.
+
+ - Smaller -- diff_match_patch comes with an extended API most of which is
+ of no use to the current project.
+ - diff_match_patch uncompressed: 74.7 KB
+ - Swatinem's diff uncompressed: 3.66 KB
+
+ - I can easily adapt Swatinem's diff to deal with arrays of strings, which
+ is best suited for the current project -- it natively work with arrays.
+
+ I removed portions of code which are of no use for the current project.
+
+ I modified the diff script generator (Diff.prototype.editscript) since I
+ need to generate a script which is compatible with the output of the
+ diff_match_patch, as expected by CodeMirror.
+
+ 2018-12-20 gorhill:
+ ===================
+ There was an issue causing the wrong diff data to be issued, for instance
+ when diff-ing these two URLs on a character granularity basis (failure
+ point is marked):
+ |
+ /articles/5c1a7aae1854f30006cb26f7/lede/1545239527833-shutterstock_726 01757 2-copy.jpeg?crop=0.8889xw%3A0.9988xh%3B0.1089xw%2C0xh&resize=650%3A*&output-quality=55
+ /articles/5c1a* 1854f30006cb2* /lede/15452* -shutterstock_* 017* 2-copy.jpeg?crop=0.* xw%3A* h%3B0.0* xw%2C0xh&resize=650%3A*&output-quality=55
+ /articles/5c1aaea91854f30006cb2f1e/lede/1545253629235-shutterstock_106399017 2-copy.jpeg?crop=0.7749xw%3A1 xh%3B0.0391xw%2C0xh&resize=650%3A*&output-quality=55
+ |
+
+ Investigating, I found what appears to be the original source on which the
+ code below is based:
+ - "An O(ND) Difference Algorithm for C#" by Matthias Hertel
+ - http://www.mathertel.de/Diff/ViewSrc.aspx
+ - https://github.com/mathertel
+
+ There was a difference; code had been commented out in the original source:
+ http://www.mathertel.de/Diff/DiffTest.aspx?oldfile=Diff.cs.v1&newfile=Diff.cs.v2
+
+ The developer noted:
+ > There have been overlapping boxes; that where analyzed partial differently.
+ > One return-point is enough.
+
+ After applying the changes to the code below, the problematic diff-ing went
+ away:
+ |
+ /articles/5c1a7aae1854f30006cb26f7/lede/1545239527833-shutterstock_726 01757 2-copy.jpeg?crop=0.8889xw%3A0.9988xh%3B0.1089xw%2C0xh&resize=650%3A*&output-quality=55
+ /articles/5c1a* 1854f30006cb2* /lede/15452* -shutterstock_* 017* 2-copy.jpeg?crop=0.* 9xw%3A* xh%3B0.* xw%2C0xh&resize=650%3A*&output-quality=55
+ /articles/5c1aaea91854f30006cb2f1e/lede/1545253629235-shutterstock_106399017 2-copy.jpeg?crop=0.7749xw%3A1 xh%3B0.0391xw%2C0xh&resize=650%3A*&output-quality=55
+ |
+
+ So I will assume this was the issue.
+
+ 2021-07-17 gorhill:
+ ===================
+ Added pure diff() method which natively deals with arrays and other minor
+ changes related to ES6.
+
+**/
+
+'use strict';
+
+(function(context) {
+
+ // CodeMirror expect these globals:
+ context.DIFF_INSERT = 1;
+ context.DIFF_DELETE = -1;
+ context.DIFF_EQUAL = 0;
+ context.diff_match_patch = function(){};
+
+ context.diff_match_patch.prototype.diff_main = function(a, b) {
+ if ( a === b ) { return [ [ 0, a ] ]; }
+ const aa = a.match(/\n|[^\n]+\n?/g) || [];
+ const bb = b.match(/\n|[^\n]+\n?/g) || [];
+ const d = new Diff(aa, bb);
+ return d.editscript();
+ };
+
+ context.diff_match_patch.prototype.diff = function(a, b) {
+ const d = new Diff(a, b);
+ return d.editscript();
+ };
+
+ const eqlDefault = (a, b) => a === b;
+
+ function Diff(a, b, eql = eqlDefault) {
+ this.a = a;
+ this.b = b;
+ this.eql = eql;
+
+ this.moda = Array.apply(null, new Array(a.length)).map(true.valueOf, false);
+ this.modb = Array.apply(null, new Array(b.length)).map(true.valueOf, false);
+
+ // just to save some allocations:
+ this.down = {};
+ this.up = {};
+
+ this.lcs(0, a.length, 0, b.length);
+ }
+
+ Diff.prototype.editscript = function Diff_editscript() {
+ const moda = this.moda, modb = this.modb;
+ var astart = 0, aend = moda.length;
+ var bstart = 0, bend = modb.length;
+ const result = [];
+ while (astart < aend || bstart < bend) {
+ if (astart < aend && bstart < bend) {
+ if (!moda[astart] && !modb[bstart]) {
+ result.push([ 0, this.a[astart] ]);
+ astart++; bstart++;
+ continue;
+ } else if (moda[astart] && modb[bstart]) {
+ result.push([ -1, this.a[astart] ]);
+ result.push([ 1, this.b[bstart] ]);
+ astart++; bstart++;
+ continue;
+ }
+ }
+ if (astart < aend && (bstart >= bend || moda[astart])) {
+ result.push([ -1, this.a[astart] ]);
+ astart++;
+ }
+ if (bstart < bend && (astart >= aend || modb[bstart])) {
+ result.push([ 1, this.b[bstart] ]);
+ bstart++;
+ }
+ }
+ return result;
+ };
+
+ Diff.prototype.lcs = function Diff_lcs(astart, aend, bstart, bend) {
+ const a = this.a, b = this.b, eql = this.eql;
+ // separate common head
+ while (astart < aend && bstart < bend && eql(a[astart], b[bstart])) {
+ astart++; bstart++;
+ }
+ // separate common tail
+ while (astart < aend && bstart < bend && eql(a[aend - 1], b[bend - 1])) {
+ aend--; bend--;
+ }
+
+ if (astart === aend) {
+ // only insertions
+ while (bstart < bend) {
+ this.modb[bstart] = true;
+ bstart++;
+ }
+ } else if (bend === bstart) {
+ // only deletions
+ while (astart < aend) {
+ this.moda[astart] = true;
+ astart++;
+ }
+ } else {
+ const snake = this.snake(astart, aend, bstart, bend);
+
+ this.lcs(astart, snake.x, bstart, snake.y);
+ this.lcs(snake.x, aend, snake.y, bend);
+ }
+ };
+
+ Diff.prototype.snake = function Diff_snake(astart, aend, bstart, bend) {
+ const a = this.a, b = this.b, eql = this.eql;
+
+ const N = aend - astart;
+ const M = bend - bstart;
+
+ const kdown = astart - bstart;
+ const kup = aend - bend;
+
+ const delta = N - M;
+ const deltaOdd = delta & 1;
+
+ const down = this.down;
+ down[kdown + 1] = astart;
+ const up = this.up;
+ up[kup - 1] = aend;
+
+ const Dmax = (N + M + 1) / 2;
+ for (let D = 0; D <= Dmax; D++) {
+ // forward path
+ for (let k = kdown - D; k <= kdown + D; k += 2) {
+ let x;
+ if (k === kdown - D) {
+ x = down[k + 1]; // down
+ } else {
+ x = down[k - 1] + 1; // right
+ if ((k < kdown + D) && (down[k + 1] >= x)) {
+ x = down[k + 1]; // down
+ }
+ }
+ let y = x - k;
+
+ while (x < aend && y < bend && eql(a[x], b[y])) {
+ x++; y++; // diagonal
+ }
+ down[k] = x;
+
+ if (deltaOdd && (kup - D < k) && (k < kup + D) &&
+ up[k] <= down[k]) {
+ return {
+ x: down[k],
+ y: down[k] - k,
+ // u: up[k],
+ // v: up[k] - k,
+ };
+ }
+ }
+
+ // reverse path
+ for (let k = kup - D; k <= kup + D; k += 2) {
+ let x;
+ if (k === kup + D) {
+ x = up[k - 1]; // up
+ } else {
+ x = up[k + 1] - 1; // left
+ if ((k > kup - D) && (up[k - 1] < x)) {
+ x = up[k - 1]; // up
+ }
+ }
+ let y = x - k;
+
+ while (x > astart && y > bstart && eql(a[x - 1], b[y - 1])) {
+ x--; y--; // diagonal
+ }
+ up[k] = x;
+
+ if (!deltaOdd && (kdown - D <= k) && (k <= kdown + D) &&
+ up[k] <= down[k]) {
+ return {
+ x: down[k],
+ y: down[k] - k,
+ // u: up[k],
+ // v: up[k] - k,
+ };
+ }
+ }
+ }
+ };
+
+ return Diff;
+})(self);
+
+
+
+
+
+
+
+
+/*******************************************************************************
+
+ DO NOT:
+ - Remove the following code
+ - Add code beyond the following code
+ Reason:
+ - https://github.com/gorhill/uBlock/pull/3721
+ - uBO never uses the return value from injected content scripts
+
+**/
+
+void 0;
diff --git a/src/lib/hsluv/LICENSE b/src/lib/hsluv/LICENSE
new file mode 100644
index 0000000..8f3c1ae
--- /dev/null
+++ b/src/lib/hsluv/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2012-2021 Alexei Boronine
+Copyright (c) 2016 Florian Dormont
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/src/lib/hsluv/README b/src/lib/hsluv/README
new file mode 100644
index 0000000..2337fdb
--- /dev/null
+++ b/src/lib/hsluv/README
@@ -0,0 +1,3 @@
+Source:
+
+https://github.com/hsluv/hsluv/blob/9cd8574fad8874828b3a8119843527d62d79887a/javascript/dist/hsluv-0.1.0.min.js
diff --git a/src/lib/hsluv/hsluv-0.1.0.min.js b/src/lib/hsluv/hsluv-0.1.0.min.js
new file mode 100644
index 0000000..69092dc
--- /dev/null
+++ b/src/lib/hsluv/hsluv-0.1.0.min.js
@@ -0,0 +1,8 @@
+(function() {function f(a){var c=[],b=Math.pow(a+16,3)/1560896;b=b>g?b:a/k;for(var d=0;3>d;){var e=d++,h=l[e][0],w=l[e][1];e=l[e][2];for(var x=0;2>x;){var y=x++,z=(632260*e-126452*w)*b+126452*y;c.push({b:(284517*h-94839*e)*b/z,a:((838422*e+769860*w+731718*h)*a*b-769860*y*a)/z})}}return c}function m(a){a=f(a);for(var c=Infinity,b=0;b<a.length;){var d=a[b];++b;c=Math.min(c,Math.abs(d.a)/Math.sqrt(Math.pow(d.b,2)+1))}return c}
+function n(a,c){c=c/360*Math.PI*2;a=f(a);for(var b=Infinity,d=0;d<a.length;){var e=a[d];++d;e=e.a/(Math.sin(c)-e.b*Math.cos(c));0<=e&&(b=Math.min(b,e))}return b}function p(a,c){for(var b=0,d=0,e=a.length;d<e;){var h=d++;b+=a[h]*c[h]}return b}function q(a){return.0031308>=a?12.92*a:1.055*Math.pow(a,.4166666666666667)-.055}function r(a){return.04045<a?Math.pow((a+.055)/1.055,2.4):a/12.92}function t(a){return[q(p(l[0],a)),q(p(l[1],a)),q(p(l[2],a))]}
+function u(a){a=[r(a[0]),r(a[1]),r(a[2])];return[p(v[0],a),p(v[1],a),p(v[2],a)]}function A(a){var c=a[0],b=a[1];a=c+15*b+3*a[2];0!=a?(c=4*c/a,a=9*b/a):a=c=NaN;b=b<=g?b/B*k:116*Math.pow(b/B,.3333333333333333)-16;return 0==b?[0,0,0]:[b,13*b*(c-C),13*b*(a-D)]}function E(a){var c=a[0];if(0==c)return[0,0,0];var b=a[1]/(13*c)+C;a=a[2]/(13*c)+D;c=8>=c?B*c/k:B*Math.pow((c+16)/116,3);b=0-9*c*b/((b-4)*a-b*a);return[b,c,(9*c-15*a*c-a*b)/(3*a)]}
+function F(a){var c=a[0],b=a[1],d=a[2];a=Math.sqrt(b*b+d*d);1E-8>a?b=0:(b=180*Math.atan2(d,b)/Math.PI,0>b&&(b=360+b));return[c,a,b]}function G(a){var c=a[1],b=a[2]/360*2*Math.PI;return[a[0],Math.cos(b)*c,Math.sin(b)*c]}function H(a){var c=a[0],b=a[1];a=a[2];if(99.9999999<a)return[100,0,c];if(1E-8>a)return[0,0,c];b=n(a,c)/100*b;return[a,b,c]}function I(a){var c=a[0],b=a[1];a=a[2];if(99.9999999<c)return[a,0,100];if(1E-8>c)return[a,0,0];var d=n(c,a);return[a,b/d*100,c]}
+function J(a){var c=a[0],b=a[1];a=a[2];if(99.9999999<a)return[100,0,c];if(1E-8>a)return[0,0,c];b=m(a)/100*b;return[a,b,c]}function K(a){var c=a[0],b=a[1];a=a[2];if(99.9999999<c)return[a,0,100];if(1E-8>c)return[a,0,0];var d=m(c);return[a,b/d*100,c]}function L(a){for(var c="#",b=0;3>b;){var d=b++;d=Math.round(255*a[d]);var e=d%16;c+=M.charAt((d-e)/16|0)+M.charAt(e)}return c}
+function N(a){a=a.toLowerCase();for(var c=[],b=0;3>b;){var d=b++;c.push((16*M.indexOf(a.charAt(2*d+1))+M.indexOf(a.charAt(2*d+2)))/255)}return c}function O(a){return t(E(G(a)))}function P(a){return F(A(u(a)))}function Q(a){return O(H(a))}function R(a){return I(P(a))}function S(a){return O(J(a))}function T(a){return K(P(a))}
+var l=[[3.240969941904521,-1.537383177570093,-.498610760293],[-.96924363628087,1.87596750150772,.041555057407175],[.055630079696993,-.20397695888897,1.056971514242878]],v=[[.41239079926595,.35758433938387,.18048078840183],[.21263900587151,.71516867876775,.072192315360733],[.019330818715591,.11919477979462,.95053215224966]],B=1,C=.19783000664283,D=.46831999493879,k=903.2962962,g=.0088564516,M="0123456789abcdef";
+window.hsluv={hsluvToRgb:Q,rgbToHsluv:R,hpluvToRgb:S,rgbToHpluv:T,hsluvToHex:function(a){return L(Q(a))},hexToHsluv:function(a){return R(N(a))},hpluvToHex:function(a){return L(S(a))},hexToHpluv:function(a){return T(N(a))},lchToHpluv:K,hpluvToLch:J,lchToHsluv:I,hsluvToLch:H,lchToLuv:G,luvToLch:F,xyzToLuv:A,luvToXyz:E,xyzToRgb:t,rgbToXyz:u,lchToRgb:O,rgbToLch:P};})();
diff --git a/src/lib/js-beautify/LICENSE b/src/lib/js-beautify/LICENSE
new file mode 100644
index 0000000..153d126
--- /dev/null
+++ b/src/lib/js-beautify/LICENSE
@@ -0,0 +1,9 @@
+The MIT License (MIT)
+
+Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/src/lib/js-beautify/README b/src/lib/js-beautify/README
new file mode 100644
index 0000000..d7a0a51
--- /dev/null
+++ b/src/lib/js-beautify/README
@@ -0,0 +1,5 @@
+Project repo:
+https://github.com/beautify-web/js-beautify
+
+Source:
+https://cdnjs.cloudflare.com/ajax/libs/js-beautify/1.14.7/beautifier.min.js
diff --git a/src/lib/js-beautify/beautifier.min.js b/src/lib/js-beautify/beautifier.min.js
new file mode 100644
index 0000000..ed42692
--- /dev/null
+++ b/src/lib/js-beautify/beautifier.min.js
@@ -0,0 +1,2 @@
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("beautifier",[],e):"object"==typeof exports?exports.beautifier=e():t.beautifier=e()}("undefined"!=typeof self?self:"undefined"!=typeof windows?window:"undefined"!=typeof global?global:this,(function(){return function(){"use strict";var t={7:function(t){function e(t,e){t="string"==typeof t?t:t.source,e="string"==typeof e?e:e.source,this.__directives_block_pattern=new RegExp(t+/ beautify( \w+[:]\w+)+ /.source+e,"g"),this.__directive_pattern=/ (\w+)[:](\w+)/g,this.__directives_end_ignore_pattern=new RegExp(t+/\sbeautify\signore:end\s/.source+e,"g")}e.prototype.get_directives=function(t){if(!t.match(this.__directives_block_pattern))return null;var e={};this.__directive_pattern.lastIndex=0;for(var i=this.__directive_pattern.exec(t);i;)e[i[1]]=i[2],i=this.__directive_pattern.exec(t);return e},e.prototype.readIgnored=function(t){return t.readUntilAfter(this.__directives_end_ignore_pattern)},t.exports.t=e},418:function(t){var e=RegExp.prototype.hasOwnProperty("sticky");function i(t){this.__input=t||"",this.__input_length=this.__input.length,this.__position=0}i.prototype.restart=function(){this.__position=0},i.prototype.back=function(){this.__position>0&&(this.__position-=1)},i.prototype.hasNext=function(){return this.__position<this.__input_length},i.prototype.next=function(){var t=null;return this.hasNext()&&(t=this.__input.charAt(this.__position),this.__position+=1),t},i.prototype.peek=function(t){var e=null;return t=t||0,(t+=this.__position)>=0&&t<this.__input_length&&(e=this.__input.charAt(t)),e},i.prototype.__match=function(t,i){t.lastIndex=i;var n=t.exec(this.__input);return!n||e&&t.sticky||n.index!==i&&(n=null),n},i.prototype.test=function(t,e){return e=e||0,(e+=this.__position)>=0&&e<this.__input_length&&!!this.__match(t,e)},i.prototype.testChar=function(t,e){var i=this.peek(e);return t.lastIndex=0,null!==i&&t.test(i)},i.prototype.match=function(t){var e=this.__match(t,this.__position);return e?this.__position+=e[0].length:e=null,e},i.prototype.read=function(t,e,i){var n,_="";return t&&(n=this.match(t))&&(_+=n[0]),!e||!n&&t||(_+=this.readUntil(e,i)),_},i.prototype.readUntil=function(t,e){var i,n=this.__position;t.lastIndex=this.__position;var _=t.exec(this.__input);return _?(n=_.index,e&&(n+=_[0].length)):n=this.__input_length,i=this.__input.substring(this.__position,n),this.__position=n,i},i.prototype.readUntilAfter=function(t){return this.readUntil(t,!0)},i.prototype.get_regexp=function(t,i){var n=null,_="g";return i&&e&&(_="y"),"string"==typeof t&&""!==t?n=new RegExp(t,_):t&&(n=new RegExp(t.source,_)),n},i.prototype.get_literal_regexp=function(t){return RegExp(t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"))},i.prototype.peekUntilAfter=function(t){var e=this.__position,i=this.readUntilAfter(t);return this.__position=e,i},i.prototype.lookBack=function(t){var e=this.__position-1;return e>=t.length&&this.__input.substring(e-t.length,e).toLowerCase()===t},t.exports.g=i},915:function(t){function e(t,e){this.raw_options=function(t,e){var i,n={};for(i in t=function(t){var e,i={};for(e in t)i[e.replace(/-/g,"_")]=t[e];return i}(t))i!==e&&(n[i]=t[i]);if(e&&t[e])for(i in t[e])n[i]=t[e][i];return n}(t,e),this.disabled=this._get_boolean("disabled"),this.eol=this._get_characters("eol","auto"),this.end_with_newline=this._get_boolean("end_with_newline"),this.indent_size=this._get_number("indent_size",4),this.indent_char=this._get_characters("indent_char"," "),this.indent_level=this._get_number("indent_level"),this.preserve_newlines=this._get_boolean("preserve_newlines",!0),this.max_preserve_newlines=this._get_number("max_preserve_newlines",32786),this.preserve_newlines||(this.max_preserve_newlines=0),this.indent_with_tabs=this._get_boolean("indent_with_tabs","\t"===this.indent_char),this.indent_with_tabs&&(this.indent_char="\t",1===this.indent_size&&(this.indent_size=4)),this.wrap_line_length=this._get_number("wrap_line_length",this._get_number("max_char")),this.indent_empty_lines=this._get_boolean("indent_empty_lines"),this.templating=this._get_selection_list("templating",["auto","none","django","erb","handlebars","php","smarty"],["auto"])}e.prototype._get_array=function(t,e){var i=this.raw_options[t],n=e||[];return"object"==typeof i?null!==i&&"function"==typeof i.concat&&(n=i.concat()):"string"==typeof i&&(n=i.split(/[^a-zA-Z0-9_\/\-]+/)),n},e.prototype._get_boolean=function(t,e){var i=this.raw_options[t];return void 0===i?!!e:!!i},e.prototype._get_characters=function(t,e){var i=this.raw_options[t],n=e||"";return"string"==typeof i&&(n=i.replace(/\\r/,"\r").replace(/\\n/,"\n").replace(/\\t/,"\t")),n},e.prototype._get_number=function(t,e){var i=this.raw_options[t];e=parseInt(e,10),isNaN(e)&&(e=0);var n=parseInt(i,10);return isNaN(n)&&(n=e),n},e.prototype._get_selection=function(t,e,i){var n=this._get_selection_list(t,e,i);if(1!==n.length)throw new Error("Invalid Option Value: The option '"+t+"' can only be one of the following values:\n"+e+"\nYou passed in: '"+this.raw_options[t]+"'");return n[0]},e.prototype._get_selection_list=function(t,e,i){if(!e||0===e.length)throw new Error("Selection list cannot be empty.");if(i=i||[e[0]],!this._is_valid_selection(i,e))throw new Error("Invalid Default Value!");var n=this._get_array(t,i);if(!this._is_valid_selection(n,e))throw new Error("Invalid Option Value: The option '"+t+"' can contain only the following values:\n"+e+"\nYou passed in: '"+this.raw_options[t]+"'");return n},e.prototype._is_valid_selection=function(t,e){return t.length&&e.length&&!t.some((function(t){return-1===e.indexOf(t)}))},t.exports.Ei=e},558:function(t){function e(t){this.__parent=t,this.__character_count=0,this.__indent_count=-1,this.__alignment_count=0,this.__wrap_point_index=0,this.__wrap_point_character_count=0,this.__wrap_point_indent_count=-1,this.__wrap_point_alignment_count=0,this.__items=[]}function i(t,e){this.__cache=[""],this.__indent_size=t.indent_size,this.__indent_string=t.indent_char,t.indent_with_tabs||(this.__indent_string=new Array(t.indent_size+1).join(t.indent_char)),e=e||"",t.indent_level>0&&(e=new Array(t.indent_level+1).join(this.__indent_string)),this.__base_string=e,this.__base_string_length=e.length}function n(t,n){this.__indent_cache=new i(t,n),this.raw=!1,this._end_with_newline=t.end_with_newline,this.indent_size=t.indent_size,this.wrap_line_length=t.wrap_line_length,this.indent_empty_lines=t.indent_empty_lines,this.__lines=[],this.previous_line=null,this.current_line=null,this.next_line=new e(this),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=!1,this.__add_outputline()}e.prototype.clone_empty=function(){var t=new e(this.__parent);return t.set_indent(this.__indent_count,this.__alignment_count),t},e.prototype.item=function(t){return t<0?this.__items[this.__items.length+t]:this.__items[t]},e.prototype.has_match=function(t){for(var e=this.__items.length-1;e>=0;e--)if(this.__items[e].match(t))return!0;return!1},e.prototype.set_indent=function(t,e){this.is_empty()&&(this.__indent_count=t||0,this.__alignment_count=e||0,this.__character_count=this.__parent.get_indent_size(this.__indent_count,this.__alignment_count))},e.prototype._set_wrap_point=function(){this.__parent.wrap_line_length&&(this.__wrap_point_index=this.__items.length,this.__wrap_point_character_count=this.__character_count,this.__wrap_point_indent_count=this.__parent.next_line.__indent_count,this.__wrap_point_alignment_count=this.__parent.next_line.__alignment_count)},e.prototype._should_wrap=function(){return this.__wrap_point_index&&this.__character_count>this.__parent.wrap_line_length&&this.__wrap_point_character_count>this.__parent.next_line.__character_count},e.prototype._allow_wrap=function(){if(this._should_wrap()){this.__parent.add_new_line();var t=this.__parent.current_line;return t.set_indent(this.__wrap_point_indent_count,this.__wrap_point_alignment_count),t.__items=this.__items.slice(this.__wrap_point_index),this.__items=this.__items.slice(0,this.__wrap_point_index),t.__character_count+=this.__character_count-this.__wrap_point_character_count,this.__character_count=this.__wrap_point_character_count," "===t.__items[0]&&(t.__items.splice(0,1),t.__character_count-=1),!0}return!1},e.prototype.is_empty=function(){return 0===this.__items.length},e.prototype.last=function(){return this.is_empty()?null:this.__items[this.__items.length-1]},e.prototype.push=function(t){this.__items.push(t);var e=t.lastIndexOf("\n");-1!==e?this.__character_count=t.length-e:this.__character_count+=t.length},e.prototype.pop=function(){var t=null;return this.is_empty()||(t=this.__items.pop(),this.__character_count-=t.length),t},e.prototype._remove_indent=function(){this.__indent_count>0&&(this.__indent_count-=1,this.__character_count-=this.__parent.indent_size)},e.prototype._remove_wrap_indent=function(){this.__wrap_point_indent_count>0&&(this.__wrap_point_indent_count-=1)},e.prototype.trim=function(){for(;" "===this.last();)this.__items.pop(),this.__character_count-=1},e.prototype.toString=function(){var t="";return this.is_empty()?this.__parent.indent_empty_lines&&(t=this.__parent.get_indent_string(this.__indent_count)):(t=this.__parent.get_indent_string(this.__indent_count,this.__alignment_count),t+=this.__items.join("")),t},i.prototype.get_indent_size=function(t,e){var i=this.__base_string_length;return e=e||0,t<0&&(i=0),(i+=t*this.__indent_size)+e},i.prototype.get_indent_string=function(t,e){var i=this.__base_string;return e=e||0,t<0&&(t=0,i=""),e+=t*this.__indent_size,this.__ensure_cache(e),i+this.__cache[e]},i.prototype.__ensure_cache=function(t){for(;t>=this.__cache.length;)this.__add_column()},i.prototype.__add_column=function(){var t=this.__cache.length,e=0,i="";this.__indent_size&&t>=this.__indent_size&&(t-=(e=Math.floor(t/this.__indent_size))*this.__indent_size,i=new Array(e+1).join(this.__indent_string)),t&&(i+=new Array(t+1).join(" ")),this.__cache.push(i)},n.prototype.__add_outputline=function(){this.previous_line=this.current_line,this.current_line=this.next_line.clone_empty(),this.__lines.push(this.current_line)},n.prototype.get_line_number=function(){return this.__lines.length},n.prototype.get_indent_string=function(t,e){return this.__indent_cache.get_indent_string(t,e)},n.prototype.get_indent_size=function(t,e){return this.__indent_cache.get_indent_size(t,e)},n.prototype.is_empty=function(){return!this.previous_line&&this.current_line.is_empty()},n.prototype.add_new_line=function(t){return!(this.is_empty()||!t&&this.just_added_newline()||(this.raw||this.__add_outputline(),0))},n.prototype.get_code=function(t){this.trim(!0);var e=this.current_line.pop();e&&("\n"===e[e.length-1]&&(e=e.replace(/\n+$/g,"")),this.current_line.push(e)),this._end_with_newline&&this.__add_outputline();var i=this.__lines.join("\n");return"\n"!==t&&(i=i.replace(/[\n]/g,t)),i},n.prototype.set_wrap_point=function(){this.current_line._set_wrap_point()},n.prototype.set_indent=function(t,e){return t=t||0,e=e||0,this.next_line.set_indent(t,e),this.__lines.length>1?(this.current_line.set_indent(t,e),!0):(this.current_line.set_indent(),!1)},n.prototype.add_raw_token=function(t){for(var e=0;e<t.newlines;e++)this.__add_outputline();this.current_line.set_indent(-1),this.current_line.push(t.whitespace_before),this.current_line.push(t.text),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=!1},n.prototype.add_token=function(t){this.__add_space_before_token(),this.current_line.push(t),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=this.current_line._allow_wrap()},n.prototype.__add_space_before_token=function(){this.space_before_token&&!this.just_added_newline()&&(this.non_breaking_space||this.set_wrap_point(),this.current_line.push(" "))},n.prototype.remove_indent=function(t){for(var e=this.__lines.length;t<e;)this.__lines[t]._remove_indent(),t++;this.current_line._remove_wrap_indent()},n.prototype.trim=function(t){for(t=void 0!==t&&t,this.current_line.trim();t&&this.__lines.length>1&&this.current_line.is_empty();)this.__lines.pop(),this.current_line=this.__lines[this.__lines.length-1],this.current_line.trim();this.previous_line=this.__lines.length>1?this.__lines[this.__lines.length-2]:null},n.prototype.just_added_newline=function(){return this.current_line.is_empty()},n.prototype.just_added_blankline=function(){return this.is_empty()||this.current_line.is_empty()&&this.previous_line.is_empty()},n.prototype.ensure_empty_line_above=function(t,i){for(var n=this.__lines.length-2;n>=0;){var _=this.__lines[n];if(_.is_empty())break;if(0!==_.item(0).indexOf(t)&&_.item(-1)!==i){this.__lines.splice(n+1,0,new e(this)),this.previous_line=this.__lines[this.__lines.length-2];break}n--}},t.exports.r=n},348:function(t){function e(t,e){this._input=t,this._starting_pattern=null,this._match_pattern=null,this._until_pattern=null,this._until_after=!1,e&&(this._starting_pattern=this._input.get_regexp(e._starting_pattern,!0),this._match_pattern=this._input.get_regexp(e._match_pattern,!0),this._until_pattern=this._input.get_regexp(e._until_pattern),this._until_after=e._until_after)}e.prototype.read=function(){var t=this._input.read(this._starting_pattern);return this._starting_pattern&&!t||(t+=this._input.read(this._match_pattern,this._until_pattern,this._until_after)),t},e.prototype.read_match=function(){return this._input.match(this._match_pattern)},e.prototype.until_after=function(t){var e=this._create();return e._until_after=!0,e._until_pattern=this._input.get_regexp(t),e._update(),e},e.prototype.until=function(t){var e=this._create();return e._until_after=!1,e._until_pattern=this._input.get_regexp(t),e._update(),e},e.prototype.starting_with=function(t){var e=this._create();return e._starting_pattern=this._input.get_regexp(t,!0),e._update(),e},e.prototype.matching=function(t){var e=this._create();return e._match_pattern=this._input.get_regexp(t,!0),e._update(),e},e.prototype._create=function(){return new e(this._input,this)},e.prototype._update=function(){},t.exports.c=e},800:function(t,e,i){var n=i(348).c,_={django:!1,erb:!1,handlebars:!1,php:!1,smarty:!1};function s(t,e){n.call(this,t,e),this.__template_pattern=null,this._disabled=Object.assign({},_),this._excluded=Object.assign({},_),e&&(this.__template_pattern=this._input.get_regexp(e.__template_pattern),this._excluded=Object.assign(this._excluded,e._excluded),this._disabled=Object.assign(this._disabled,e._disabled));var i=new n(t);this.__patterns={handlebars_comment:i.starting_with(/{{!--/).until_after(/--}}/),handlebars_unescaped:i.starting_with(/{{{/).until_after(/}}}/),handlebars:i.starting_with(/{{/).until_after(/}}/),php:i.starting_with(/<\?(?:[= ]|php)/).until_after(/\?>/),erb:i.starting_with(/<%[^%]/).until_after(/[^%]%>/),django:i.starting_with(/{%/).until_after(/%}/),django_value:i.starting_with(/{{/).until_after(/}}/),django_comment:i.starting_with(/{#/).until_after(/#}/),smarty:i.starting_with(/{(?=[^}{\s\n])/).until_after(/[^\s\n]}/),smarty_comment:i.starting_with(/{\*/).until_after(/\*}/),smarty_literal:i.starting_with(/{literal}/).until_after(/{\/literal}/)}}s.prototype=new n,s.prototype._create=function(){return new s(this._input,this)},s.prototype._update=function(){this.__set_templated_pattern()},s.prototype.disable=function(t){var e=this._create();return e._disabled[t]=!0,e._update(),e},s.prototype.read_options=function(t){var e=this._create();for(var i in _)e._disabled[i]=-1===t.templating.indexOf(i);return e._update(),e},s.prototype.exclude=function(t){var e=this._create();return e._excluded[t]=!0,e._update(),e},s.prototype.read=function(){var t="";t=this._match_pattern?this._input.read(this._starting_pattern):this._input.read(this._starting_pattern,this.__template_pattern);for(var e=this._read_template();e;)this._match_pattern?e+=this._input.read(this._match_pattern):e+=this._input.readUntil(this.__template_pattern),t+=e,e=this._read_template();return this._until_after&&(t+=this._input.readUntilAfter(this._until_pattern)),t},s.prototype.__set_templated_pattern=function(){var t=[];this._disabled.php||t.push(this.__patterns.php._starting_pattern.source),this._disabled.handlebars||t.push(this.__patterns.handlebars._starting_pattern.source),this._disabled.erb||t.push(this.__patterns.erb._starting_pattern.source),this._disabled.django||(t.push(this.__patterns.django._starting_pattern.source),t.push(this.__patterns.django_value._starting_pattern.source),t.push(this.__patterns.django_comment._starting_pattern.source)),this._disabled.smarty||t.push(this.__patterns.smarty._starting_pattern.source),this._until_pattern&&t.push(this._until_pattern.source),this.__template_pattern=this._input.get_regexp("(?:"+t.join("|")+")")},s.prototype._read_template=function(){var t="",e=this._input.peek();if("<"===e){var i=this._input.peek(1);this._disabled.php||this._excluded.php||"?"!==i||(t=t||this.__patterns.php.read()),this._disabled.erb||this._excluded.erb||"%"!==i||(t=t||this.__patterns.erb.read())}else"{"===e&&(this._disabled.handlebars||this._excluded.handlebars||(t=(t=(t=t||this.__patterns.handlebars_comment.read())||this.__patterns.handlebars_unescaped.read())||this.__patterns.handlebars.read()),this._disabled.django||(this._excluded.django||this._excluded.handlebars||(t=t||this.__patterns.django_value.read()),this._excluded.django||(t=(t=t||this.__patterns.django_comment.read())||this.__patterns.django.read())),this._disabled.smarty||this._disabled.django&&this._disabled.handlebars&&(t=(t=(t=t||this.__patterns.smarty_comment.read())||this.__patterns.smarty_literal.read())||this.__patterns.smarty.read()));return t},t.exports.A=s},650:function(t){t.exports.W=function(t,e,i,n){this.type=t,this.text=e,this.comments_before=null,this.newlines=i||0,this.whitespace_before=n||"",this.parent=null,this.next=null,this.previous=null,this.opened=null,this.closed=null,this.directives=null}},147:function(t,e,i){var n=i(418).g,_=i(650).W,s=i(134).q,a=i(401).d,u={START:"TK_START",RAW:"TK_RAW",EOF:"TK_EOF"},r=function(t,e){this._input=new n(t),this._options=e||{},this.__tokens=null,this._patterns={},this._patterns.whitespace=new a(this._input)};r.prototype.tokenize=function(){var t;this._input.restart(),this.__tokens=new s,this._reset();for(var e=new _(u.START,""),i=null,n=[],a=new s;e.type!==u.EOF;){for(t=this._get_next_token(e,i);this._is_comment(t);)a.add(t),t=this._get_next_token(e,i);a.isEmpty()||(t.comments_before=a,a=new s),t.parent=i,this._is_opening(t)?(n.push(i),i=t):i&&this._is_closing(t,i)&&(t.opened=i,i.closed=t,i=n.pop(),t.parent=i),t.previous=e,e.next=t,this.__tokens.add(t),e=t}return this.__tokens},r.prototype._is_first_token=function(){return this.__tokens.isEmpty()},r.prototype._reset=function(){},r.prototype._get_next_token=function(t,e){this._readWhitespace();var i=this._input.read(/.+/g);return i?this._create_token(u.RAW,i):this._create_token(u.EOF,"")},r.prototype._is_comment=function(t){return!1},r.prototype._is_opening=function(t){return!1},r.prototype._is_closing=function(t,e){return!1},r.prototype._create_token=function(t,e){return new _(t,e,this._patterns.whitespace.newline_count,this._patterns.whitespace.whitespace_before_token)},r.prototype._readWhitespace=function(){return this._patterns.whitespace.read()},t.exports.d=r,t.exports.o=u},134:function(t){function e(t){this.__tokens=[],this.__tokens_length=this.__tokens.length,this.__position=0,this.__parent_token=t}e.prototype.restart=function(){this.__position=0},e.prototype.isEmpty=function(){return 0===this.__tokens_length},e.prototype.hasNext=function(){return this.__position<this.__tokens_length},e.prototype.next=function(){var t=null;return this.hasNext()&&(t=this.__tokens[this.__position],this.__position+=1),t},e.prototype.peek=function(t){var e=null;return t=t||0,(t+=this.__position)>=0&&t<this.__tokens_length&&(e=this.__tokens[t]),e},e.prototype.add=function(t){this.__parent_token&&(t.parent=this.__parent_token),this.__tokens.push(t),this.__tokens_length+=1},t.exports.q=e},401:function(t,e,i){var n=i(348).c;function _(t,e){n.call(this,t,e),e?this._line_regexp=this._input.get_regexp(e._line_regexp):this.__set_whitespace_patterns("",""),this.newline_count=0,this.whitespace_before_token=""}_.prototype=new n,_.prototype.__set_whitespace_patterns=function(t,e){t+="\\t ",e+="\\n\\r",this._match_pattern=this._input.get_regexp("["+t+e+"]+",!0),this._newline_regexp=this._input.get_regexp("\\r\\n|["+e+"]")},_.prototype.read=function(){this.newline_count=0,this.whitespace_before_token="";var t=this._input.read(this._match_pattern);if(" "===t)this.whitespace_before_token=" ";else if(t){var e=this.__split(this._newline_regexp,t);this.newline_count=e.length-1,this.whitespace_before_token=e[this.newline_count]}return t},_.prototype.matching=function(t,e){var i=this._create();return i.__set_whitespace_patterns(t,e),i._update(),i},_.prototype._create=function(){return new _(this._input,this)},_.prototype.__split=function(t,e){t.lastIndex=0;for(var i=0,n=[],_=t.exec(e);_;)n.push(e.substring(i,_.index)),i=_.index+_[0].length,_=t.exec(e);return i<e.length?n.push(e.substring(i,e.length)):n.push(""),n},t.exports.d=_},434:function(t,e,i){var n=i(492).E,_=i(558).r,s=i(418).g,a=new(0,i(7).t)(/\/\*/,/\*\//),u=/\r\n|[\r\n]/,r=/\r\n|[\r\n]/g,o=/\s/,h=/(?:\s|\n)+/g,p=/\/\*(?:[\s\S]*?)((?:\*\/)|$)/g,l=/\/\/(?:[^\n\r\u2028\u2029]*)/g;function c(t,e){this._source_text=t||"",this._options=new n(e),this._ch=null,this._input=null,this.NESTED_AT_RULE={"@page":!0,"@font-face":!0,"@keyframes":!0,"@media":!0,"@supports":!0,"@document":!0},this.CONDITIONAL_GROUP_RULE={"@media":!0,"@supports":!0,"@document":!0},this.NON_SEMICOLON_NEWLINE_PROPERTY=["grid-template-areas","grid-template"]}c.prototype.eatString=function(t){var e="";for(this._ch=this._input.next();this._ch;){if(e+=this._ch,"\\"===this._ch)e+=this._input.next();else if(-1!==t.indexOf(this._ch)||"\n"===this._ch)break;this._ch=this._input.next()}return e},c.prototype.eatWhitespace=function(t){for(var e=o.test(this._input.peek()),i=0;o.test(this._input.peek());)this._ch=this._input.next(),t&&"\n"===this._ch&&(0===i||i<this._options.max_preserve_newlines)&&(i++,this._output.add_new_line(!0));return e},c.prototype.foundNestedPseudoClass=function(){for(var t=0,e=1,i=this._input.peek(e);i;){if("{"===i)return!0;if("("===i)t+=1;else if(")"===i){if(0===t)return!1;t-=1}else if(";"===i||"}"===i)return!1;e++,i=this._input.peek(e)}return!1},c.prototype.print_string=function(t){this._output.set_indent(this._indentLevel),this._output.non_breaking_space=!0,this._output.add_token(t)},c.prototype.preserveSingleSpace=function(t){t&&(this._output.space_before_token=!0)},c.prototype.indent=function(){this._indentLevel++},c.prototype.outdent=function(){this._indentLevel>0&&this._indentLevel--},c.prototype.beautify=function(){if(this._options.disabled)return this._source_text;var t=this._source_text,e=this._options.eol;"auto"===e&&(e="\n",t&&u.test(t||"")&&(e=t.match(u)[0]));var i=(t=t.replace(r,"\n")).match(/^[\t ]*/)[0];this._output=new _(this._options,i),this._input=new s(t),this._indentLevel=0,this._nestedLevel=0,this._ch=null;for(var n,c,f=0,d=!1,g=!1,b=!1,m=!1,k=!1,w=!1,y=this._ch,x=!1;n=""!==this._input.read(h),c=y,this._ch=this._input.next(),"\\"===this._ch&&this._input.hasNext()&&(this._ch+=this._input.next()),y=this._ch,this._ch;)if("/"===this._ch&&"*"===this._input.peek()){this._output.add_new_line(),this._input.back();var v=this._input.read(p),E=a.get_directives(v);E&&"start"===E.ignore&&(v+=a.readIgnored(this._input)),this.print_string(v),this.eatWhitespace(!0),this._output.add_new_line()}else if("/"===this._ch&&"/"===this._input.peek())this._output.space_before_token=!0,this._input.back(),this.print_string(this._input.read(l)),this.eatWhitespace(!0);else if("@"===this._ch||"$"===this._ch)if(this.preserveSingleSpace(n),"{"===this._input.peek())this.print_string(this._ch+this.eatString("}"));else{this.print_string(this._ch);var O=this._input.peekUntilAfter(/[: ,;{}()[\]\/='"]/g);O.match(/[ :]$/)&&(O=this.eatString(": ").replace(/\s$/,""),this.print_string(O),this._output.space_before_token=!0),"extend"===(O=O.replace(/\s$/,""))?m=!0:"import"===O&&(k=!0),O in this.NESTED_AT_RULE?(this._nestedLevel+=1,O in this.CONDITIONAL_GROUP_RULE&&(b=!0)):d||0!==f||-1===O.indexOf(":")||(g=!0,this.indent())}else if("#"===this._ch&&"{"===this._input.peek())this.preserveSingleSpace(n),this.print_string(this._ch+this.eatString("}"));else if("{"===this._ch)g&&(g=!1,this.outdent()),b?(b=!1,d=this._indentLevel>=this._nestedLevel):d=this._indentLevel>=this._nestedLevel-1,this._options.newline_between_rules&&d&&this._output.previous_line&&"{"!==this._output.previous_line.item(-1)&&this._output.ensure_empty_line_above("/",","),this._output.space_before_token=!0,"expand"===this._options.brace_style?(this._output.add_new_line(),this.print_string(this._ch),this.indent(),this._output.set_indent(this._indentLevel)):("("===c?this._output.space_before_token=!1:","!==c&&this.indent(),this.print_string(this._ch)),this.eatWhitespace(!0),this._output.add_new_line();else if("}"===this._ch)this.outdent(),this._output.add_new_line(),"{"===c&&this._output.trim(!0),k=!1,m=!1,g&&(this.outdent(),g=!1),this.print_string(this._ch),d=!1,this._nestedLevel&&this._nestedLevel--,this.eatWhitespace(!0),this._output.add_new_line(),this._options.newline_between_rules&&!this._output.just_added_blankline()&&"}"!==this._input.peek()&&this._output.add_new_line(!0),")"===this._input.peek()&&(this._output.trim(!0),"expand"===this._options.brace_style&&this._output.add_new_line(!0));else if(":"===this._ch){for(var T=0;T<this.NON_SEMICOLON_NEWLINE_PROPERTY.length;T++)if(this._input.lookBack(this.NON_SEMICOLON_NEWLINE_PROPERTY[T])){x=!0;break}!d&&!b||this._input.lookBack("&")||this.foundNestedPseudoClass()||this._input.lookBack("(")||m||0!==f?(this._input.lookBack(" ")&&(this._output.space_before_token=!0),":"===this._input.peek()?(this._ch=this._input.next(),this.print_string("::")):this.print_string(":")):(this.print_string(":"),g||(g=!0,this._output.space_before_token=!0,this.eatWhitespace(!0),this.indent()))}else if('"'===this._ch||"'"===this._ch){var R='"'===c||"'"===c;this.preserveSingleSpace(R||n),this.print_string(this._ch+this.eatString(this._ch)),this.eatWhitespace(!0)}else if(";"===this._ch)x=!1,0===f?(g&&(this.outdent(),g=!1),m=!1,k=!1,this.print_string(this._ch),this.eatWhitespace(!0),"/"!==this._input.peek()&&this._output.add_new_line()):(this.print_string(this._ch),this.eatWhitespace(!0),this._output.space_before_token=!0);else if("("===this._ch)if(this._input.lookBack("url"))this.print_string(this._ch),this.eatWhitespace(),f++,this.indent(),this._ch=this._input.next(),")"===this._ch||'"'===this._ch||"'"===this._ch?this._input.back():this._ch&&(this.print_string(this._ch+this.eatString(")")),f&&(f--,this.outdent()));else{var A=!1;this._input.lookBack("with")&&(A=!0),this.preserveSingleSpace(n||A),this.print_string(this._ch),g&&"$"===c&&this._options.selector_separator_newline?(this._output.add_new_line(),w=!0):(this.eatWhitespace(),f++,this.indent())}else if(")"===this._ch)f&&(f--,this.outdent()),w&&";"===this._input.peek()&&this._options.selector_separator_newline&&(w=!1,this.outdent(),this._output.add_new_line()),this.print_string(this._ch);else if(","===this._ch)this.print_string(this._ch),this.eatWhitespace(!0),!this._options.selector_separator_newline||g&&!w||0!==f||k||m?this._output.space_before_token=!0:this._output.add_new_line();else if(">"!==this._ch&&"+"!==this._ch&&"~"!==this._ch||g||0!==f)if("]"===this._ch)this.print_string(this._ch);else if("["===this._ch)this.preserveSingleSpace(n),this.print_string(this._ch);else if("="===this._ch)this.eatWhitespace(),this.print_string("="),o.test(this._ch)&&(this._ch="");else if("!"!==this._ch||this._input.lookBack("\\")){var N='"'===c||"'"===c;this.preserveSingleSpace(N||n),this.print_string(this._ch),!this._output.just_added_newline()&&"\n"===this._input.peek()&&x&&this._output.add_new_line()}else this._output.space_before_token=!0,this.print_string(this._ch);else this._options.space_around_combinator?(this._output.space_before_token=!0,this.print_string(this._ch),this._output.space_before_token=!0):(this.print_string(this._ch),this.eatWhitespace(),this._ch&&o.test(this._ch)&&(this._ch=""));return this._output.get_code(e)},t.exports.K=c},968:function(t,e,i){var n=i(434).K,_=i(492).E;t.exports=function(t,e){return new n(t,e).beautify()},t.exports.defaultOptions=function(){return new _}},492:function(t,e,i){var n=i(915).Ei;function _(t){n.call(this,t,"css"),this.selector_separator_newline=this._get_boolean("selector_separator_newline",!0),this.newline_between_rules=this._get_boolean("newline_between_rules",!0);var e=this._get_boolean("space_around_selector_separator");this.space_around_combinator=this._get_boolean("space_around_combinator")||e;var i=this._get_selection_list("brace_style",["collapse","expand","end-expand","none","preserve-inline"]);this.brace_style="collapse";for(var _=0;_<i.length;_++)"expand"!==i[_]?this.brace_style="collapse":this.brace_style=i[_]}_.prototype=new n,t.exports.E=_},843:function(t,e,i){var n=i(402).E,_=i(558).r,s=i(41).d,a=i(41).o,u=/\r\n|[\r\n]/,r=/\r\n|[\r\n]/g,o=function(t,e){this.indent_level=0,this.alignment_size=0,this.max_preserve_newlines=t.max_preserve_newlines,this.preserve_newlines=t.preserve_newlines,this._output=new _(t,e)};o.prototype.current_line_has_match=function(t){return this._output.current_line.has_match(t)},o.prototype.set_space_before_token=function(t,e){this._output.space_before_token=t,this._output.non_breaking_space=e},o.prototype.set_wrap_point=function(){this._output.set_indent(this.indent_level,this.alignment_size),this._output.set_wrap_point()},o.prototype.add_raw_token=function(t){this._output.add_raw_token(t)},o.prototype.print_preserved_newlines=function(t){var e=0;t.type!==a.TEXT&&t.previous.type!==a.TEXT&&(e=t.newlines?1:0),this.preserve_newlines&&(e=t.newlines<this.max_preserve_newlines+1?t.newlines:this.max_preserve_newlines+1);for(var i=0;i<e;i++)this.print_newline(i>0);return 0!==e},o.prototype.traverse_whitespace=function(t){return!(!t.whitespace_before&&!t.newlines||(this.print_preserved_newlines(t)||(this._output.space_before_token=!0),0))},o.prototype.previous_token_wrapped=function(){return this._output.previous_token_wrapped},o.prototype.print_newline=function(t){this._output.add_new_line(t)},o.prototype.print_token=function(t){t.text&&(this._output.set_indent(this.indent_level,this.alignment_size),this._output.add_token(t.text))},o.prototype.indent=function(){this.indent_level++},o.prototype.get_full_indent=function(t){return(t=this.indent_level+(t||0))<1?"":this._output.get_indent_string(t)};function h(t,e){return-1!==e.indexOf(t)}function p(t,e,i){this.parent=t||null,this.tag=e?e.tag_name:"",this.indent_level=i||0,this.parser_token=e||null}function l(t){this._printer=t,this._current_frame=null}function c(t,e,i,_){this._source_text=t||"",e=e||{},this._js_beautify=i,this._css_beautify=_,this._tag_stack=null;var s=new n(e,"html");this._options=s,this._is_wrap_attributes_force="force"===this._options.wrap_attributes.substr(0,"force".length),this._is_wrap_attributes_force_expand_multiline="force-expand-multiline"===this._options.wrap_attributes,this._is_wrap_attributes_force_aligned="force-aligned"===this._options.wrap_attributes,this._is_wrap_attributes_aligned_multiple="aligned-multiple"===this._options.wrap_attributes,this._is_wrap_attributes_preserve="preserve"===this._options.wrap_attributes.substr(0,"preserve".length),this._is_wrap_attributes_preserve_aligned="preserve-aligned"===this._options.wrap_attributes}l.prototype.get_parser_token=function(){return this._current_frame?this._current_frame.parser_token:null},l.prototype.record_tag=function(t){var e=new p(this._current_frame,t,this._printer.indent_level);this._current_frame=e},l.prototype._try_pop_frame=function(t){var e=null;return t&&(e=t.parser_token,this._printer.indent_level=t.indent_level,this._current_frame=t.parent),e},l.prototype._get_frame=function(t,e){for(var i=this._current_frame;i&&-1===t.indexOf(i.tag);){if(e&&-1!==e.indexOf(i.tag)){i=null;break}i=i.parent}return i},l.prototype.try_pop=function(t,e){var i=this._get_frame([t],e);return this._try_pop_frame(i)},l.prototype.indent_to_tag=function(t){var e=this._get_frame(t);e&&(this._printer.indent_level=e.indent_level)},c.prototype.beautify=function(){if(this._options.disabled)return this._source_text;var t=this._source_text,e=this._options.eol;"auto"===this._options.eol&&(e="\n",t&&u.test(t)&&(e=t.match(u)[0]));var i=(t=t.replace(r,"\n")).match(/^[\t ]*/)[0],n={text:"",type:""},_=new f,h=new o(this._options,i),p=new s(t,this._options).tokenize();this._tag_stack=new l(h);for(var c=null,d=p.next();d.type!==a.EOF;)d.type===a.TAG_OPEN||d.type===a.COMMENT?_=c=this._handle_tag_open(h,d,_,n):d.type===a.ATTRIBUTE||d.type===a.EQUALS||d.type===a.VALUE||d.type===a.TEXT&&!_.tag_complete?c=this._handle_inside_tag(h,d,_,p):d.type===a.TAG_CLOSE?c=this._handle_tag_close(h,d,_):d.type===a.TEXT?c=this._handle_text(h,d,_):h.add_raw_token(d),n=c,d=p.next();return h._output.get_code(e)},c.prototype._handle_tag_close=function(t,e,i){var n={text:e.text,type:e.type};return t.alignment_size=0,i.tag_complete=!0,t.set_space_before_token(e.newlines||""!==e.whitespace_before,!0),i.is_unformatted?t.add_raw_token(e):("<"===i.tag_start_char&&(t.set_space_before_token("/"===e.text[0],!0),this._is_wrap_attributes_force_expand_multiline&&i.has_wrapped_attrs&&t.print_newline(!1)),t.print_token(e)),!i.indent_content||i.is_unformatted||i.is_content_unformatted||(t.indent(),i.indent_content=!1),i.is_inline_element||i.is_unformatted||i.is_content_unformatted||t.set_wrap_point(),n},c.prototype._handle_inside_tag=function(t,e,i,n){var _=i.has_wrapped_attrs,s={text:e.text,type:e.type};if(t.set_space_before_token(e.newlines||""!==e.whitespace_before,!0),i.is_unformatted)t.add_raw_token(e);else if("{"===i.tag_start_char&&e.type===a.TEXT)t.print_preserved_newlines(e)?(e.newlines=0,t.add_raw_token(e)):t.print_token(e);else{if(e.type===a.ATTRIBUTE?(t.set_space_before_token(!0),i.attr_count+=1):(e.type===a.EQUALS||e.type===a.VALUE&&e.previous.type===a.EQUALS)&&t.set_space_before_token(!1),e.type===a.ATTRIBUTE&&"<"===i.tag_start_char&&((this._is_wrap_attributes_preserve||this._is_wrap_attributes_preserve_aligned)&&(t.traverse_whitespace(e),_=_||0!==e.newlines),this._is_wrap_attributes_force)){var u=i.attr_count>1;if(this._is_wrap_attributes_force_expand_multiline&&1===i.attr_count){var r,o=!0,h=0;do{if((r=n.peek(h)).type===a.ATTRIBUTE){o=!1;break}h+=1}while(h<4&&r.type!==a.EOF&&r.type!==a.TAG_CLOSE);u=!o}u&&(t.print_newline(!1),_=!0)}t.print_token(e),_=_||t.previous_token_wrapped(),i.has_wrapped_attrs=_}return s},c.prototype._handle_text=function(t,e,i){var n={text:e.text,type:"TK_CONTENT"};return i.custom_beautifier_name?this._print_custom_beatifier_text(t,e,i):i.is_unformatted||i.is_content_unformatted?t.add_raw_token(e):(t.traverse_whitespace(e),t.print_token(e)),n},c.prototype._print_custom_beatifier_text=function(t,e,i){var n=this;if(""!==e.text){var _,s=e.text,a=1,u="",r="";"javascript"===i.custom_beautifier_name&&"function"==typeof this._js_beautify?_=this._js_beautify:"css"===i.custom_beautifier_name&&"function"==typeof this._css_beautify?_=this._css_beautify:"html"===i.custom_beautifier_name&&(_=function(t,e){return new c(t,e,n._js_beautify,n._css_beautify).beautify()}),"keep"===this._options.indent_scripts?a=0:"separate"===this._options.indent_scripts&&(a=-t.indent_level);var o=t.get_full_indent(a);if(s=s.replace(/\n[ \t]*$/,""),"html"!==i.custom_beautifier_name&&"<"===s[0]&&s.match(/^(<!--|<!\[CDATA\[)/)){var h=/^(<!--[^\n]*|<!\[CDATA\[)(\n?)([ \t\n]*)([\s\S]*)(-->|]]>)$/.exec(s);if(!h)return void t.add_raw_token(e);u=o+h[1]+"\n",s=h[4],h[5]&&(r=o+h[5]),s=s.replace(/\n[ \t]*$/,""),(h[2]||-1!==h[3].indexOf("\n"))&&(h=h[3].match(/[ \t]+$/))&&(e.whitespace_before=h[0])}if(s)if(_){var p=function(){this.eol="\n"};p.prototype=this._options.raw_options,s=_(o+s,new p)}else{var l=e.whitespace_before;l&&(s=s.replace(new RegExp("\n("+l+")?","g"),"\n")),s=o+s.replace(/\n/g,"\n"+o)}u&&(s=s?u+s+"\n"+r:u+r),t.print_newline(!1),s&&(e.text=s,e.whitespace_before="",e.newlines=0,t.add_raw_token(e),t.print_newline(!0))}},c.prototype._handle_tag_open=function(t,e,i,n){var _=this._get_tag_open_token(e);return!i.is_unformatted&&!i.is_content_unformatted||i.is_empty_element||e.type!==a.TAG_OPEN||0!==e.text.indexOf("</")?(t.traverse_whitespace(e),this._set_tag_position(t,e,_,i,n),_.is_inline_element||t.set_wrap_point(),t.print_token(e)):(t.add_raw_token(e),_.start_tag_token=this._tag_stack.try_pop(_.tag_name)),(this._is_wrap_attributes_force_aligned||this._is_wrap_attributes_aligned_multiple||this._is_wrap_attributes_preserve_aligned)&&(_.alignment_size=e.text.length+1),_.tag_complete||_.is_unformatted||(t.alignment_size=_.alignment_size),_};var f=function(t,e){if(this.parent=t||null,this.text="",this.type="TK_TAG_OPEN",this.tag_name="",this.is_inline_element=!1,this.is_unformatted=!1,this.is_content_unformatted=!1,this.is_empty_element=!1,this.is_start_tag=!1,this.is_end_tag=!1,this.indent_content=!1,this.multiline_content=!1,this.custom_beautifier_name=null,this.start_tag_token=null,this.attr_count=0,this.has_wrapped_attrs=!1,this.alignment_size=0,this.tag_complete=!1,this.tag_start_char="",this.tag_check="",e){var i;this.tag_start_char=e.text[0],this.text=e.text,"<"===this.tag_start_char?(i=e.text.match(/^<([^\s>]*)/),this.tag_check=i?i[1]:""):(i=e.text.match(/^{{~?(?:[\^]|#\*?)?([^\s}]+)/),this.tag_check=i?i[1]:"",(e.text.startsWith("{{#>")||e.text.startsWith("{{~#>"))&&">"===this.tag_check[0]&&(">"===this.tag_check&&null!==e.next?this.tag_check=e.next.text.split(" ")[0]:this.tag_check=e.text.split(">")[1])),this.tag_check=this.tag_check.toLowerCase(),e.type===a.COMMENT&&(this.tag_complete=!0),this.is_start_tag="/"!==this.tag_check.charAt(0),this.tag_name=this.is_start_tag?this.tag_check:this.tag_check.substr(1),this.is_end_tag=!this.is_start_tag||e.closed&&"/>"===e.closed.text;var n=2;"{"===this.tag_start_char&&this.text.length>=3&&"~"===this.text.charAt(2)&&(n=3),this.is_end_tag=this.is_end_tag||"{"===this.tag_start_char&&(this.text.length<3||/[^#\^]/.test(this.text.charAt(n)))}else this.tag_complete=!0};c.prototype._get_tag_open_token=function(t){var e=new f(this._tag_stack.get_parser_token(),t);return e.alignment_size=this._options.wrap_attributes_indent_size,e.is_end_tag=e.is_end_tag||h(e.tag_check,this._options.void_elements),e.is_empty_element=e.tag_complete||e.is_start_tag&&e.is_end_tag,e.is_unformatted=!e.tag_complete&&h(e.tag_check,this._options.unformatted),e.is_content_unformatted=!e.is_empty_element&&h(e.tag_check,this._options.content_unformatted),e.is_inline_element=h(e.tag_name,this._options.inline)||e.tag_name.includes("-")||"{"===e.tag_start_char,e},c.prototype._set_tag_position=function(t,e,i,n,_){if(i.is_empty_element||(i.is_end_tag?i.start_tag_token=this._tag_stack.try_pop(i.tag_name):(this._do_optional_end_element(i)&&(i.is_inline_element||t.print_newline(!1)),this._tag_stack.record_tag(i),"script"!==i.tag_name&&"style"!==i.tag_name||i.is_unformatted||i.is_content_unformatted||(i.custom_beautifier_name=function(t,e){var i=null,n=null;return e.closed?("script"===t?i="text/javascript":"style"===t&&(i="text/css"),i=function(t){for(var e=null,i=t.next;i.type!==a.EOF&&t.closed!==i;){if(i.type===a.ATTRIBUTE&&"type"===i.text){i.next&&i.next.type===a.EQUALS&&i.next.next&&i.next.next.type===a.VALUE&&(e=i.next.next.text);break}i=i.next}return e}(e)||i,i.search("text/css")>-1?n="css":i.search(/module|((text|application|dojo)\/(x-)?(javascript|ecmascript|jscript|livescript|(ld\+)?json|method|aspect))/)>-1?n="javascript":i.search(/(text|application|dojo)\/(x-)?(html)/)>-1?n="html":i.search(/test\/null/)>-1&&(n="null"),n):null}(i.tag_check,e)))),h(i.tag_check,this._options.extra_liners)&&(t.print_newline(!1),t._output.just_added_blankline()||t.print_newline(!0)),i.is_empty_element)"{"===i.tag_start_char&&"else"===i.tag_check&&(this._tag_stack.indent_to_tag(["if","unless","each"]),i.indent_content=!0,t.current_line_has_match(/{{#if/)||t.print_newline(!1)),"!--"===i.tag_name&&_.type===a.TAG_CLOSE&&n.is_end_tag&&-1===i.text.indexOf("\n")||(i.is_inline_element||i.is_unformatted||t.print_newline(!1),this._calcluate_parent_multiline(t,i));else if(i.is_end_tag){var s=!1;s=(s=i.start_tag_token&&i.start_tag_token.multiline_content)||!i.is_inline_element&&!(n.is_inline_element||n.is_unformatted)&&!(_.type===a.TAG_CLOSE&&i.start_tag_token===n)&&"TK_CONTENT"!==_.type,(i.is_content_unformatted||i.is_unformatted)&&(s=!1),s&&t.print_newline(!1)}else i.indent_content=!i.custom_beautifier_name,"<"===i.tag_start_char&&("html"===i.tag_name?i.indent_content=this._options.indent_inner_html:"head"===i.tag_name?i.indent_content=this._options.indent_head_inner_html:"body"===i.tag_name&&(i.indent_content=this._options.indent_body_inner_html)),i.is_inline_element||i.is_unformatted||"TK_CONTENT"===_.type&&!i.is_content_unformatted||t.print_newline(!1),this._calcluate_parent_multiline(t,i)},c.prototype._calcluate_parent_multiline=function(t,e){!e.parent||!t._output.just_added_newline()||(e.is_inline_element||e.is_unformatted)&&e.parent.is_inline_element||(e.parent.multiline_content=!0)};var d=["address","article","aside","blockquote","details","div","dl","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hr","main","nav","ol","p","pre","section","table","ul"],g=["a","audio","del","ins","map","noscript","video"];c.prototype._do_optional_end_element=function(t){var e=null;if(!t.is_empty_element&&t.is_start_tag&&t.parent){if("body"===t.tag_name)e=e||this._tag_stack.try_pop("head");else if("li"===t.tag_name)e=e||this._tag_stack.try_pop("li",["ol","ul"]);else if("dd"===t.tag_name||"dt"===t.tag_name)e=(e=e||this._tag_stack.try_pop("dt",["dl"]))||this._tag_stack.try_pop("dd",["dl"]);else if("p"===t.parent.tag_name&&-1!==d.indexOf(t.tag_name)){var i=t.parent.parent;i&&-1!==g.indexOf(i.tag_name)||(e=e||this._tag_stack.try_pop("p"))}else"rp"===t.tag_name||"rt"===t.tag_name?e=(e=e||this._tag_stack.try_pop("rt",["ruby","rtc"]))||this._tag_stack.try_pop("rp",["ruby","rtc"]):"optgroup"===t.tag_name?e=e||this._tag_stack.try_pop("optgroup",["select"]):"option"===t.tag_name?e=e||this._tag_stack.try_pop("option",["select","datalist","optgroup"]):"colgroup"===t.tag_name?e=e||this._tag_stack.try_pop("caption",["table"]):"thead"===t.tag_name?e=(e=e||this._tag_stack.try_pop("caption",["table"]))||this._tag_stack.try_pop("colgroup",["table"]):"tbody"===t.tag_name||"tfoot"===t.tag_name?e=(e=(e=(e=e||this._tag_stack.try_pop("caption",["table"]))||this._tag_stack.try_pop("colgroup",["table"]))||this._tag_stack.try_pop("thead",["table"]))||this._tag_stack.try_pop("tbody",["table"]):"tr"===t.tag_name?e=(e=(e=e||this._tag_stack.try_pop("caption",["table"]))||this._tag_stack.try_pop("colgroup",["table"]))||this._tag_stack.try_pop("tr",["table","thead","tbody","tfoot"]):"th"!==t.tag_name&&"td"!==t.tag_name||(e=(e=e||this._tag_stack.try_pop("td",["table","thead","tbody","tfoot","tr"]))||this._tag_stack.try_pop("th",["table","thead","tbody","tfoot","tr"]));return t.parent=this._tag_stack.get_parser_token(),e}},t.exports.K=c},391:function(t,e,i){var n=i(843).K,_=i(402).E;t.exports=function(t,e,i,_){return new n(t,e,i,_).beautify()},t.exports.defaultOptions=function(){return new _}},402:function(t,e,i){var n=i(915).Ei;function _(t){n.call(this,t,"html"),1===this.templating.length&&"auto"===this.templating[0]&&(this.templating=["django","erb","handlebars","php"]),this.indent_inner_html=this._get_boolean("indent_inner_html"),this.indent_body_inner_html=this._get_boolean("indent_body_inner_html",!0),this.indent_head_inner_html=this._get_boolean("indent_head_inner_html",!0),this.indent_handlebars=this._get_boolean("indent_handlebars",!0),this.wrap_attributes=this._get_selection("wrap_attributes",["auto","force","force-aligned","force-expand-multiline","aligned-multiple","preserve","preserve-aligned"]),this.wrap_attributes_indent_size=this._get_number("wrap_attributes_indent_size",this.indent_size),this.extra_liners=this._get_array("extra_liners",["head","body","/html"]),this.inline=this._get_array("inline",["a","abbr","area","audio","b","bdi","bdo","br","button","canvas","cite","code","data","datalist","del","dfn","em","embed","i","iframe","img","input","ins","kbd","keygen","label","map","mark","math","meter","noscript","object","output","progress","q","ruby","s","samp","select","small","span","strong","sub","sup","svg","template","textarea","time","u","var","video","wbr","text","acronym","big","strike","tt"]),this.void_elements=this._get_array("void_elements",["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr","!doctype","?xml","basefont","isindex"]),this.unformatted=this._get_array("unformatted",[]),this.content_unformatted=this._get_array("content_unformatted",["pre","textarea"]),this.unformatted_content_delimiter=this._get_characters("unformatted_content_delimiter"),this.indent_scripts=this._get_selection("indent_scripts",["normal","keep","separate"])}_.prototype=new n,t.exports.E=_},41:function(t,e,i){var n=i(147).d,_=i(147).o,s=i(7).t,a=i(800).A,u=i(348).c,r={TAG_OPEN:"TK_TAG_OPEN",TAG_CLOSE:"TK_TAG_CLOSE",ATTRIBUTE:"TK_ATTRIBUTE",EQUALS:"TK_EQUALS",VALUE:"TK_VALUE",COMMENT:"TK_COMMENT",TEXT:"TK_TEXT",UNKNOWN:"TK_UNKNOWN",START:_.START,RAW:_.RAW,EOF:_.EOF},o=new s(/<\!--/,/-->/),h=function(t,e){n.call(this,t,e),this._current_tag_name="";var i=new a(this._input).read_options(this._options),_=new u(this._input);if(this.__patterns={word:i.until(/[\n\r\t <]/),single_quote:i.until_after(/'/),double_quote:i.until_after(/"/),attribute:i.until(/[\n\r\t =>]|\/>/),element_name:i.until(/[\n\r\t >\/]/),handlebars_comment:_.starting_with(/{{!--/).until_after(/--}}/),handlebars:_.starting_with(/{{/).until_after(/}}/),handlebars_open:_.until(/[\n\r\t }]/),handlebars_raw_close:_.until(/}}/),comment:_.starting_with(/<!--/).until_after(/-->/),cdata:_.starting_with(/<!\[CDATA\[/).until_after(/]]>/),conditional_comment:_.starting_with(/<!\[/).until_after(/]>/),processing:_.starting_with(/<\?/).until_after(/\?>/)},this._options.indent_handlebars&&(this.__patterns.word=this.__patterns.word.exclude("handlebars")),this._unformatted_content_delimiter=null,this._options.unformatted_content_delimiter){var s=this._input.get_literal_regexp(this._options.unformatted_content_delimiter);this.__patterns.unformatted_content_delimiter=_.matching(s).until_after(s)}};(h.prototype=new n)._is_comment=function(t){return!1},h.prototype._is_opening=function(t){return t.type===r.TAG_OPEN},h.prototype._is_closing=function(t,e){return t.type===r.TAG_CLOSE&&e&&((">"===t.text||"/>"===t.text)&&"<"===e.text[0]||"}}"===t.text&&"{"===e.text[0]&&"{"===e.text[1])},h.prototype._reset=function(){this._current_tag_name=""},h.prototype._get_next_token=function(t,e){var i=null;this._readWhitespace();var n=this._input.peek();return null===n?this._create_token(r.EOF,""):i=(i=(i=(i=(i=(i=(i=(i=(i=i||this._read_open_handlebars(n,e))||this._read_attribute(n,t,e))||this._read_close(n,e))||this._read_raw_content(n,t,e))||this._read_content_word(n))||this._read_comment_or_cdata(n))||this._read_processing(n))||this._read_open(n,e))||this._create_token(r.UNKNOWN,this._input.next())},h.prototype._read_comment_or_cdata=function(t){var e=null,i=null,n=null;return"<"===t&&("!"===this._input.peek(1)&&((i=this.__patterns.comment.read())?(n=o.get_directives(i))&&"start"===n.ignore&&(i+=o.readIgnored(this._input)):i=this.__patterns.cdata.read()),i&&((e=this._create_token(r.COMMENT,i)).directives=n)),e},h.prototype._read_processing=function(t){var e=null,i=null;if("<"===t){var n=this._input.peek(1);"!"!==n&&"?"!==n||(i=(i=this.__patterns.conditional_comment.read())||this.__patterns.processing.read()),i&&((e=this._create_token(r.COMMENT,i)).directives=null)}return e},h.prototype._read_open=function(t,e){var i=null,n=null;return e||"<"===t&&(i=this._input.next(),"/"===this._input.peek()&&(i+=this._input.next()),i+=this.__patterns.element_name.read(),n=this._create_token(r.TAG_OPEN,i)),n},h.prototype._read_open_handlebars=function(t,e){var i=null,n=null;return e||this._options.indent_handlebars&&"{"===t&&"{"===this._input.peek(1)&&("!"===this._input.peek(2)?(i=(i=this.__patterns.handlebars_comment.read())||this.__patterns.handlebars.read(),n=this._create_token(r.COMMENT,i)):(i=this.__patterns.handlebars_open.read(),n=this._create_token(r.TAG_OPEN,i))),n},h.prototype._read_close=function(t,e){var i=null,n=null;return e&&("<"===e.text[0]&&(">"===t||"/"===t&&">"===this._input.peek(1))?(i=this._input.next(),"/"===t&&(i+=this._input.next()),n=this._create_token(r.TAG_CLOSE,i)):"{"===e.text[0]&&"}"===t&&"}"===this._input.peek(1)&&(this._input.next(),this._input.next(),n=this._create_token(r.TAG_CLOSE,"}}"))),n},h.prototype._read_attribute=function(t,e,i){var n=null,_="";if(i&&"<"===i.text[0])if("="===t)n=this._create_token(r.EQUALS,this._input.next());else if('"'===t||"'"===t){var s=this._input.next();s+='"'===t?this.__patterns.double_quote.read():this.__patterns.single_quote.read(),n=this._create_token(r.VALUE,s)}else(_=this.__patterns.attribute.read())&&(n=e.type===r.EQUALS?this._create_token(r.VALUE,_):this._create_token(r.ATTRIBUTE,_));return n},h.prototype._is_content_unformatted=function(t){return-1===this._options.void_elements.indexOf(t)&&(-1!==this._options.content_unformatted.indexOf(t)||-1!==this._options.unformatted.indexOf(t))},h.prototype._read_raw_content=function(t,e,i){var n="";if(i&&"{"===i.text[0])n=this.__patterns.handlebars_raw_close.read();else if(e.type===r.TAG_CLOSE&&"<"===e.opened.text[0]&&"/"!==e.text[0]){var _=e.opened.text.substr(1).toLowerCase();if("script"===_||"style"===_){var s=this._read_comment_or_cdata(t);if(s)return s.type=r.TEXT,s;n=this._input.readUntil(new RegExp("</"+_+"[\\n\\r\\t ]*?>","ig"))}else this._is_content_unformatted(_)&&(n=this._input.readUntil(new RegExp("</"+_+"[\\n\\r\\t ]*?>","ig")))}return n?this._create_token(r.TEXT,n):null},h.prototype._read_content_word=function(t){var e="";if(this._options.unformatted_content_delimiter&&t===this._options.unformatted_content_delimiter[0]&&(e=this.__patterns.unformatted_content_delimiter.read()),e||(e=this.__patterns.word.read()),e)return this._create_token(r.TEXT,e)},t.exports.d=h,t.exports.o=r},772:function(t,e,i){var n=i(82),_=i(968),s=i(391);function a(t,e,i,a){return s(t,e,i=i||n,a=a||_)}a.defaultOptions=s.defaultOptions,t.exports.js=n,t.exports.css=_,t.exports.html=a},273:function(t,e){var i="\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc",n="(?:\\\\u[0-9a-fA-F]{4}|[\\x23\\x24\\x40\\x41-\\x5a\\x5f\\x61-\\x7a"+i+"])";e.identifier=new RegExp(n+"(?:\\\\u[0-9a-fA-F]{4}|[\\x24\\x30-\\x39\\x41-\\x5a\\x5f\\x61-\\x7a\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\\u0300-\\u036f\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u0620-\\u0649\\u0672-\\u06d3\\u06e7-\\u06e8\\u06fb-\\u06fc\\u0730-\\u074a\\u0800-\\u0814\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0840-\\u0857\\u08e4-\\u08fe\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962-\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09d7\\u09df-\\u09e0\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5f-\\u0b60\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62-\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2-\\u0ce3\\u0ce6-\\u0cef\\u0d02\\u0d03\\u0d46-\\u0d48\\u0d57\\u0d62-\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e34-\\u0e3a\\u0e40-\\u0e45\\u0e50-\\u0e59\\u0eb4-\\u0eb9\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f41-\\u0f47\\u0f71-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1029\\u1040-\\u1049\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u170e-\\u1710\\u1720-\\u1730\\u1740-\\u1750\\u1772\\u1773\\u1780-\\u17b2\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1920-\\u192b\\u1930-\\u193b\\u1951-\\u196d\\u19b0-\\u19c0\\u19c8-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a15\\u1a20-\\u1a53\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1b46-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c00-\\u1c22\\u1c40-\\u1c49\\u1c5b-\\u1c7d\\u1cd0-\\u1cd2\\u1d00-\\u1dbe\\u1e01-\\u1f15\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2d81-\\u2d96\\u2de0-\\u2dff\\u3021-\\u3028\\u3099\\u309a\\ua640-\\ua66d\\ua674-\\ua67d\\ua69f\\ua6f0-\\ua6f1\\ua7f8-\\ua800\\ua806\\ua80b\\ua823-\\ua827\\ua880-\\ua881\\ua8b4-\\ua8c4\\ua8d0-\\ua8d9\\ua8f3-\\ua8f7\\ua900-\\ua909\\ua926-\\ua92d\\ua930-\\ua945\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa00-\\uaa27\\uaa40-\\uaa41\\uaa4c-\\uaa4d\\uaa50-\\uaa59\\uaa7b\\uaae0-\\uaae9\\uaaf2-\\uaaf3\\uabc0-\\uabe1\\uabec\\uabed\\uabf0-\\uabf9\\ufb20-\\ufb28\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f])*","g"),e.identifierStart=new RegExp(n),e.identifierMatch=new RegExp("(?:\\\\u[0-9a-fA-F]{4}|[\\x24\\x30-\\x39\\x41-\\x5a\\x5f\\x61-\\x7a"+i+"\\u0300-\\u036f\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u0620-\\u0649\\u0672-\\u06d3\\u06e7-\\u06e8\\u06fb-\\u06fc\\u0730-\\u074a\\u0800-\\u0814\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0840-\\u0857\\u08e4-\\u08fe\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962-\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09d7\\u09df-\\u09e0\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5f-\\u0b60\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62-\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2-\\u0ce3\\u0ce6-\\u0cef\\u0d02\\u0d03\\u0d46-\\u0d48\\u0d57\\u0d62-\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e34-\\u0e3a\\u0e40-\\u0e45\\u0e50-\\u0e59\\u0eb4-\\u0eb9\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f41-\\u0f47\\u0f71-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1029\\u1040-\\u1049\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u170e-\\u1710\\u1720-\\u1730\\u1740-\\u1750\\u1772\\u1773\\u1780-\\u17b2\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1920-\\u192b\\u1930-\\u193b\\u1951-\\u196d\\u19b0-\\u19c0\\u19c8-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a15\\u1a20-\\u1a53\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1b46-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c00-\\u1c22\\u1c40-\\u1c49\\u1c5b-\\u1c7d\\u1cd0-\\u1cd2\\u1d00-\\u1dbe\\u1e01-\\u1f15\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2d81-\\u2d96\\u2de0-\\u2dff\\u3021-\\u3028\\u3099\\u309a\\ua640-\\ua66d\\ua674-\\ua67d\\ua69f\\ua6f0-\\ua6f1\\ua7f8-\\ua800\\ua806\\ua80b\\ua823-\\ua827\\ua880-\\ua881\\ua8b4-\\ua8c4\\ua8d0-\\ua8d9\\ua8f3-\\ua8f7\\ua900-\\ua909\\ua926-\\ua92d\\ua930-\\ua945\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa00-\\uaa27\\uaa40-\\uaa41\\uaa4c-\\uaa4d\\uaa50-\\uaa59\\uaa7b\\uaae0-\\uaae9\\uaaf2-\\uaaf3\\uabc0-\\uabe1\\uabec\\uabed\\uabf0-\\uabf9\\ufb20-\\ufb28\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f])+"),e.newline=/[\n\r\u2028\u2029]/,e.lineBreak=new RegExp("\r\n|"+e.newline.source),e.allLineBreaks=new RegExp(e.lineBreak.source,"g")},282:function(t,e,i){var n=i(558).r,_=i(650).W,s=i(273),a=i(962).E,u=i(76).d2,r=i(76).O9,o=i(76).L2,h=i(76).o3;function p(t,e){return-1!==e.indexOf(t)}function l(t,e){return t&&t.type===h.RESERVED&&t.text===e}function c(t,e){return t&&t.type===h.RESERVED&&p(t.text,e)}var f=["case","return","do","if","throw","else","await","break","continue","async"],d=function(t){for(var e={},i=0;i<t.length;i++)e[t[i].replace(/-/g,"_")]=t[i];return e}(["before-newline","after-newline","preserve-newline"]),g=[d.before_newline,d.preserve_newline],b="BlockStatement",m="Statement",k="ObjectLiteral",w="ArrayLiteral",y="ForInitializer",x="Conditional",v="Expression";function E(t,e){e.multiline_frame||e.mode===y||e.mode===x||t.remove_indent(e.start_line_index)}function O(t){return t===w}function T(t){return p(t,[v,y,x])}function R(t,e){e=e||{},this._source_text=t||"",this._output=null,this._tokens=null,this._last_last_text=null,this._flags=null,this._previous_flags=null,this._flag_store=null,this._options=new a(e)}R.prototype.create_flags=function(t,e){var i=0;return t&&(i=t.indentation_level,!this._output.just_added_newline()&&t.line_indent_level>i&&(i=t.line_indent_level)),{mode:e,parent:t,last_token:t?t.last_token:new _(h.START_BLOCK,""),last_word:t?t.last_word:"",declaration_statement:!1,declaration_assignment:!1,multiline_frame:!1,inline_frame:!1,if_block:!1,else_block:!1,class_start_block:!1,do_block:!1,do_while:!1,import_block:!1,in_case_statement:!1,in_case:!1,case_body:!1,case_block:!1,indentation_level:i,alignment:0,line_indent_level:t?t.line_indent_level:i,start_line_index:this._output.get_line_number(),ternary_depth:0}},R.prototype._reset=function(t){var e=t.match(/^[\t ]*/)[0];this._last_last_text="",this._output=new n(this._options,e),this._output.raw=this._options.test_output_raw,this._flag_store=[],this.set_mode(b);var i=new u(t,this._options);return this._tokens=i.tokenize(),t},R.prototype.beautify=function(){if(this._options.disabled)return this._source_text;var t=this._reset(this._source_text),e=this._options.eol;"auto"===this._options.eol&&(e="\n",t&&s.lineBreak.test(t||"")&&(e=t.match(s.lineBreak)[0]));for(var i=this._tokens.next();i;)this.handle_token(i),this._last_last_text=this._flags.last_token.text,this._flags.last_token=i,i=this._tokens.next();return this._output.get_code(e)},R.prototype.handle_token=function(t,e){t.type===h.START_EXPR?this.handle_start_expr(t):t.type===h.END_EXPR?this.handle_end_expr(t):t.type===h.START_BLOCK?this.handle_start_block(t):t.type===h.END_BLOCK?this.handle_end_block(t):t.type===h.WORD||t.type===h.RESERVED?this.handle_word(t):t.type===h.SEMICOLON?this.handle_semicolon(t):t.type===h.STRING?this.handle_string(t):t.type===h.EQUALS?this.handle_equals(t):t.type===h.OPERATOR?this.handle_operator(t):t.type===h.COMMA?this.handle_comma(t):t.type===h.BLOCK_COMMENT?this.handle_block_comment(t,e):t.type===h.COMMENT?this.handle_comment(t,e):t.type===h.DOT?this.handle_dot(t):t.type===h.EOF?this.handle_eof(t):(t.type,h.UNKNOWN,this.handle_unknown(t,e))},R.prototype.handle_whitespace_and_comments=function(t,e){var i=t.newlines,n=this._options.keep_array_indentation&&O(this._flags.mode);if(t.comments_before)for(var _=t.comments_before.next();_;)this.handle_whitespace_and_comments(_,e),this.handle_token(_,e),_=t.comments_before.next();if(n)for(var s=0;s<i;s+=1)this.print_newline(s>0,e);else if(this._options.max_preserve_newlines&&i>this._options.max_preserve_newlines&&(i=this._options.max_preserve_newlines),this._options.preserve_newlines&&i>1){this.print_newline(!1,e);for(var a=1;a<i;a+=1)this.print_newline(!0,e)}};var A=["async","break","continue","return","throw","yield"];R.prototype.allow_wrap_or_preserved_newline=function(t,e){if(e=void 0!==e&&e,!this._output.just_added_newline()){var i=this._options.preserve_newlines&&t.newlines||e;if(p(this._flags.last_token.text,o)||p(t.text,o)){var n=p(this._flags.last_token.text,o)&&p(this._options.operator_position,g)||p(t.text,o);i=i&&n}if(i)this.print_newline(!1,!0);else if(this._options.wrap_line_length){if(c(this._flags.last_token,A))return;this._output.set_wrap_point()}}},R.prototype.print_newline=function(t,e){if(!e&&";"!==this._flags.last_token.text&&","!==this._flags.last_token.text&&"="!==this._flags.last_token.text&&(this._flags.last_token.type!==h.OPERATOR||"--"===this._flags.last_token.text||"++"===this._flags.last_token.text))for(var i=this._tokens.peek();!(this._flags.mode!==m||this._flags.if_block&&l(i,"else")||this._flags.do_block);)this.restore_mode();this._output.add_new_line(t)&&(this._flags.multiline_frame=!0)},R.prototype.print_token_line_indentation=function(t){this._output.just_added_newline()&&(this._options.keep_array_indentation&&t.newlines&&("["===t.text||O(this._flags.mode))?(this._output.current_line.set_indent(-1),this._output.current_line.push(t.whitespace_before),this._output.space_before_token=!1):this._output.set_indent(this._flags.indentation_level,this._flags.alignment)&&(this._flags.line_indent_level=this._flags.indentation_level))},R.prototype.print_token=function(t){if(this._output.raw)this._output.add_raw_token(t);else{if(this._options.comma_first&&t.previous&&t.previous.type===h.COMMA&&this._output.just_added_newline()&&","===this._output.previous_line.last()){var e=this._output.previous_line.pop();this._output.previous_line.is_empty()&&(this._output.previous_line.push(e),this._output.trim(!0),this._output.current_line.pop(),this._output.trim()),this.print_token_line_indentation(t),this._output.add_token(","),this._output.space_before_token=!0}this.print_token_line_indentation(t),this._output.non_breaking_space=!0,this._output.add_token(t.text),this._output.previous_token_wrapped&&(this._flags.multiline_frame=!0)}},R.prototype.indent=function(){this._flags.indentation_level+=1,this._output.set_indent(this._flags.indentation_level,this._flags.alignment)},R.prototype.deindent=function(){this._flags.indentation_level>0&&(!this._flags.parent||this._flags.indentation_level>this._flags.parent.indentation_level)&&(this._flags.indentation_level-=1,this._output.set_indent(this._flags.indentation_level,this._flags.alignment))},R.prototype.set_mode=function(t){this._flags?(this._flag_store.push(this._flags),this._previous_flags=this._flags):this._previous_flags=this.create_flags(null,t),this._flags=this.create_flags(this._previous_flags,t),this._output.set_indent(this._flags.indentation_level,this._flags.alignment)},R.prototype.restore_mode=function(){this._flag_store.length>0&&(this._previous_flags=this._flags,this._flags=this._flag_store.pop(),this._previous_flags.mode===m&&E(this._output,this._previous_flags),this._output.set_indent(this._flags.indentation_level,this._flags.alignment))},R.prototype.start_of_object_property=function(){return this._flags.parent.mode===k&&this._flags.mode===m&&(":"===this._flags.last_token.text&&0===this._flags.ternary_depth||c(this._flags.last_token,["get","set"]))},R.prototype.start_of_statement=function(t){var e=!1;return!!(e=(e=(e=(e=(e=(e=(e=e||c(this._flags.last_token,["var","let","const"])&&t.type===h.WORD)||l(this._flags.last_token,"do"))||!(this._flags.parent.mode===k&&this._flags.mode===m)&&c(this._flags.last_token,A)&&!t.newlines)||l(this._flags.last_token,"else")&&!(l(t,"if")&&!t.comments_before))||this._flags.last_token.type===h.END_EXPR&&(this._previous_flags.mode===y||this._previous_flags.mode===x))||this._flags.last_token.type===h.WORD&&this._flags.mode===b&&!this._flags.in_case&&!("--"===t.text||"++"===t.text)&&"function"!==this._last_last_text&&t.type!==h.WORD&&t.type!==h.RESERVED)||this._flags.mode===k&&(":"===this._flags.last_token.text&&0===this._flags.ternary_depth||c(this._flags.last_token,["get","set"])))&&(this.set_mode(m),this.indent(),this.handle_whitespace_and_comments(t,!0),this.start_of_object_property()||this.allow_wrap_or_preserved_newline(t,c(t,["do","for","if","while"])),!0)},R.prototype.handle_start_expr=function(t){this.start_of_statement(t)||this.handle_whitespace_and_comments(t);var e=v;if("["===t.text){if(this._flags.last_token.type===h.WORD||")"===this._flags.last_token.text)return c(this._flags.last_token,r)&&(this._output.space_before_token=!0),this.print_token(t),this.set_mode(e),this.indent(),void(this._options.space_in_paren&&(this._output.space_before_token=!0));e=w,O(this._flags.mode)&&("["!==this._flags.last_token.text&&(","!==this._flags.last_token.text||"]"!==this._last_last_text&&"}"!==this._last_last_text)||this._options.keep_array_indentation||this.print_newline()),p(this._flags.last_token.type,[h.START_EXPR,h.END_EXPR,h.WORD,h.OPERATOR,h.DOT])||(this._output.space_before_token=!0)}else{if(this._flags.last_token.type===h.RESERVED)"for"===this._flags.last_token.text?(this._output.space_before_token=this._options.space_before_conditional,e=y):p(this._flags.last_token.text,["if","while","switch"])?(this._output.space_before_token=this._options.space_before_conditional,e=x):p(this._flags.last_word,["await","async"])?this._output.space_before_token=!0:"import"===this._flags.last_token.text&&""===t.whitespace_before?this._output.space_before_token=!1:(p(this._flags.last_token.text,r)||"catch"===this._flags.last_token.text)&&(this._output.space_before_token=!0);else if(this._flags.last_token.type===h.EQUALS||this._flags.last_token.type===h.OPERATOR)this.start_of_object_property()||this.allow_wrap_or_preserved_newline(t);else if(this._flags.last_token.type===h.WORD){this._output.space_before_token=!1;var i=this._tokens.peek(-3);if(this._options.space_after_named_function&&i){var n=this._tokens.peek(-4);c(i,["async","function"])||"*"===i.text&&c(n,["async","function"])?this._output.space_before_token=!0:this._flags.mode===k?"{"!==i.text&&","!==i.text&&("*"!==i.text||"{"!==n.text&&","!==n.text)||(this._output.space_before_token=!0):this._flags.parent&&this._flags.parent.class_start_block&&(this._output.space_before_token=!0)}}else this.allow_wrap_or_preserved_newline(t);(this._flags.last_token.type===h.RESERVED&&("function"===this._flags.last_word||"typeof"===this._flags.last_word)||"*"===this._flags.last_token.text&&(p(this._last_last_text,["function","yield"])||this._flags.mode===k&&p(this._last_last_text,["{",","])))&&(this._output.space_before_token=this._options.space_after_anon_function)}";"===this._flags.last_token.text||this._flags.last_token.type===h.START_BLOCK?this.print_newline():this._flags.last_token.type!==h.END_EXPR&&this._flags.last_token.type!==h.START_EXPR&&this._flags.last_token.type!==h.END_BLOCK&&"."!==this._flags.last_token.text&&this._flags.last_token.type!==h.COMMA||this.allow_wrap_or_preserved_newline(t,t.newlines),this.print_token(t),this.set_mode(e),this._options.space_in_paren&&(this._output.space_before_token=!0),this.indent()},R.prototype.handle_end_expr=function(t){for(;this._flags.mode===m;)this.restore_mode();this.handle_whitespace_and_comments(t),this._flags.multiline_frame&&this.allow_wrap_or_preserved_newline(t,"]"===t.text&&O(this._flags.mode)&&!this._options.keep_array_indentation),this._options.space_in_paren&&(this._flags.last_token.type!==h.START_EXPR||this._options.space_in_empty_paren?this._output.space_before_token=!0:(this._output.trim(),this._output.space_before_token=!1)),this.deindent(),this.print_token(t),this.restore_mode(),E(this._output,this._previous_flags),this._flags.do_while&&this._previous_flags.mode===x&&(this._previous_flags.mode=v,this._flags.do_block=!1,this._flags.do_while=!1)},R.prototype.handle_start_block=function(t){this.handle_whitespace_and_comments(t);var e=this._tokens.peek(),i=this._tokens.peek(1);"switch"===this._flags.last_word&&this._flags.last_token.type===h.END_EXPR?(this.set_mode(b),this._flags.in_case_statement=!0):this._flags.case_body?this.set_mode(b):i&&(p(i.text,[":",","])&&p(e.type,[h.STRING,h.WORD,h.RESERVED])||p(e.text,["get","set","..."])&&p(i.type,[h.WORD,h.RESERVED]))?p(this._last_last_text,["class","interface"])&&!p(i.text,[":",","])?this.set_mode(b):this.set_mode(k):this._flags.last_token.type===h.OPERATOR&&"=>"===this._flags.last_token.text?this.set_mode(b):p(this._flags.last_token.type,[h.EQUALS,h.START_EXPR,h.COMMA,h.OPERATOR])||c(this._flags.last_token,["return","throw","import","default"])?this.set_mode(k):this.set_mode(b),this._flags.last_token&&c(this._flags.last_token.previous,["class","extends"])&&(this._flags.class_start_block=!0);var n=!e.comments_before&&"}"===e.text,_=n&&"function"===this._flags.last_word&&this._flags.last_token.type===h.END_EXPR;if(this._options.brace_preserve_inline){var s=0,a=null;this._flags.inline_frame=!0;do{if(s+=1,(a=this._tokens.peek(s-1)).newlines){this._flags.inline_frame=!1;break}}while(a.type!==h.EOF&&(a.type!==h.END_BLOCK||a.opened!==t))}("expand"===this._options.brace_style||"none"===this._options.brace_style&&t.newlines)&&!this._flags.inline_frame?this._flags.last_token.type!==h.OPERATOR&&(_||this._flags.last_token.type===h.EQUALS||c(this._flags.last_token,f)&&"else"!==this._flags.last_token.text)?this._output.space_before_token=!0:this.print_newline(!1,!0):(!O(this._previous_flags.mode)||this._flags.last_token.type!==h.START_EXPR&&this._flags.last_token.type!==h.COMMA||((this._flags.last_token.type===h.COMMA||this._options.space_in_paren)&&(this._output.space_before_token=!0),(this._flags.last_token.type===h.COMMA||this._flags.last_token.type===h.START_EXPR&&this._flags.inline_frame)&&(this.allow_wrap_or_preserved_newline(t),this._previous_flags.multiline_frame=this._previous_flags.multiline_frame||this._flags.multiline_frame,this._flags.multiline_frame=!1)),this._flags.last_token.type!==h.OPERATOR&&this._flags.last_token.type!==h.START_EXPR&&(this._flags.last_token.type!==h.START_BLOCK||this._flags.inline_frame?this._output.space_before_token=!0:this.print_newline())),this.print_token(t),this.indent(),n||this._options.brace_preserve_inline&&this._flags.inline_frame||this.print_newline()},R.prototype.handle_end_block=function(t){for(this.handle_whitespace_and_comments(t);this._flags.mode===m;)this.restore_mode();var e=this._flags.last_token.type===h.START_BLOCK;this._flags.inline_frame&&!e?this._output.space_before_token=!0:"expand"===this._options.brace_style?e||this.print_newline():e||(O(this._flags.mode)&&this._options.keep_array_indentation?(this._options.keep_array_indentation=!1,this.print_newline(),this._options.keep_array_indentation=!0):this.print_newline()),this.restore_mode(),this.print_token(t)},R.prototype.handle_word=function(t){if(t.type===h.RESERVED&&(p(t.text,["set","get"])&&this._flags.mode!==k||"import"===t.text&&p(this._tokens.peek().text,["(","."])||p(t.text,["as","from"])&&!this._flags.import_block||this._flags.mode===k&&":"===this._tokens.peek().text)&&(t.type=h.WORD),this.start_of_statement(t)?c(this._flags.last_token,["var","let","const"])&&t.type===h.WORD&&(this._flags.declaration_statement=!0):!t.newlines||T(this._flags.mode)||this._flags.last_token.type===h.OPERATOR&&"--"!==this._flags.last_token.text&&"++"!==this._flags.last_token.text||this._flags.last_token.type===h.EQUALS||!this._options.preserve_newlines&&c(this._flags.last_token,["var","let","const","set","get"])?this.handle_whitespace_and_comments(t):(this.handle_whitespace_and_comments(t),this.print_newline()),this._flags.do_block&&!this._flags.do_while){if(l(t,"while"))return this._output.space_before_token=!0,this.print_token(t),this._output.space_before_token=!0,void(this._flags.do_while=!0);this.print_newline(),this._flags.do_block=!1}if(this._flags.if_block)if(!this._flags.else_block&&l(t,"else"))this._flags.else_block=!0;else{for(;this._flags.mode===m;)this.restore_mode();this._flags.if_block=!1,this._flags.else_block=!1}if(this._flags.in_case_statement&&c(t,["case","default"]))return this.print_newline(),this._flags.case_block||!this._flags.case_body&&!this._options.jslint_happy||this.deindent(),this._flags.case_body=!1,this.print_token(t),void(this._flags.in_case=!0);if(this._flags.last_token.type!==h.COMMA&&this._flags.last_token.type!==h.START_EXPR&&this._flags.last_token.type!==h.EQUALS&&this._flags.last_token.type!==h.OPERATOR||this.start_of_object_property()||this.allow_wrap_or_preserved_newline(t),l(t,"function"))return(p(this._flags.last_token.text,["}",";"])||this._output.just_added_newline()&&!p(this._flags.last_token.text,["(","[","{",":","=",","])&&this._flags.last_token.type!==h.OPERATOR)&&(this._output.just_added_blankline()||t.comments_before||(this.print_newline(),this.print_newline(!0))),this._flags.last_token.type===h.RESERVED||this._flags.last_token.type===h.WORD?c(this._flags.last_token,["get","set","new","export"])||c(this._flags.last_token,A)||l(this._flags.last_token,"default")&&"export"===this._last_last_text||"declare"===this._flags.last_token.text?this._output.space_before_token=!0:this.print_newline():this._flags.last_token.type===h.OPERATOR||"="===this._flags.last_token.text?this._output.space_before_token=!0:(this._flags.multiline_frame||!T(this._flags.mode)&&!O(this._flags.mode))&&this.print_newline(),this.print_token(t),void(this._flags.last_word=t.text);var e="NONE";this._flags.last_token.type===h.END_BLOCK?this._previous_flags.inline_frame?e="SPACE":c(t,["else","catch","finally","from"])?"expand"===this._options.brace_style||"end-expand"===this._options.brace_style||"none"===this._options.brace_style&&t.newlines?e="NEWLINE":(e="SPACE",this._output.space_before_token=!0):e="NEWLINE":this._flags.last_token.type===h.SEMICOLON&&this._flags.mode===b?e="NEWLINE":this._flags.last_token.type===h.SEMICOLON&&T(this._flags.mode)?e="SPACE":this._flags.last_token.type===h.STRING?e="NEWLINE":this._flags.last_token.type===h.RESERVED||this._flags.last_token.type===h.WORD||"*"===this._flags.last_token.text&&(p(this._last_last_text,["function","yield"])||this._flags.mode===k&&p(this._last_last_text,["{",","]))?e="SPACE":this._flags.last_token.type===h.START_BLOCK?e=this._flags.inline_frame?"SPACE":"NEWLINE":this._flags.last_token.type===h.END_EXPR&&(this._output.space_before_token=!0,e="NEWLINE"),c(t,r)&&")"!==this._flags.last_token.text&&(e=this._flags.inline_frame||"else"===this._flags.last_token.text||"export"===this._flags.last_token.text?"SPACE":"NEWLINE"),c(t,["else","catch","finally"])?(this._flags.last_token.type!==h.END_BLOCK||this._previous_flags.mode!==b||"expand"===this._options.brace_style||"end-expand"===this._options.brace_style||"none"===this._options.brace_style&&t.newlines)&&!this._flags.inline_frame?this.print_newline():(this._output.trim(!0),"}"!==this._output.current_line.last()&&this.print_newline(),this._output.space_before_token=!0):"NEWLINE"===e?c(this._flags.last_token,f)||"declare"===this._flags.last_token.text&&c(t,["var","let","const"])?this._output.space_before_token=!0:this._flags.last_token.type!==h.END_EXPR?this._flags.last_token.type===h.START_EXPR&&c(t,["var","let","const"])||":"===this._flags.last_token.text||(l(t,"if")&&l(t.previous,"else")?this._output.space_before_token=!0:this.print_newline()):c(t,r)&&")"!==this._flags.last_token.text&&this.print_newline():this._flags.multiline_frame&&O(this._flags.mode)&&","===this._flags.last_token.text&&"}"===this._last_last_text?this.print_newline():"SPACE"===e&&(this._output.space_before_token=!0),!t.previous||t.previous.type!==h.WORD&&t.previous.type!==h.RESERVED||(this._output.space_before_token=!0),this.print_token(t),this._flags.last_word=t.text,t.type===h.RESERVED&&("do"===t.text?this._flags.do_block=!0:"if"===t.text?this._flags.if_block=!0:"import"===t.text?this._flags.import_block=!0:this._flags.import_block&&l(t,"from")&&(this._flags.import_block=!1))},R.prototype.handle_semicolon=function(t){this.start_of_statement(t)?this._output.space_before_token=!1:this.handle_whitespace_and_comments(t);for(var e=this._tokens.peek();!(this._flags.mode!==m||this._flags.if_block&&l(e,"else")||this._flags.do_block);)this.restore_mode();this._flags.import_block&&(this._flags.import_block=!1),this.print_token(t)},R.prototype.handle_string=function(t){(!t.text.startsWith("`")||0!==t.newlines||""!==t.whitespace_before||")"!==t.previous.text&&this._flags.last_token.type!==h.WORD)&&(this.start_of_statement(t)?this._output.space_before_token=!0:(this.handle_whitespace_and_comments(t),this._flags.last_token.type===h.RESERVED||this._flags.last_token.type===h.WORD||this._flags.inline_frame?this._output.space_before_token=!0:this._flags.last_token.type===h.COMMA||this._flags.last_token.type===h.START_EXPR||this._flags.last_token.type===h.EQUALS||this._flags.last_token.type===h.OPERATOR?this.start_of_object_property()||this.allow_wrap_or_preserved_newline(t):!t.text.startsWith("`")||this._flags.last_token.type!==h.END_EXPR||"]"!==t.previous.text&&")"!==t.previous.text||0!==t.newlines?this.print_newline():this._output.space_before_token=!0)),this.print_token(t)},R.prototype.handle_equals=function(t){this.start_of_statement(t)||this.handle_whitespace_and_comments(t),this._flags.declaration_statement&&(this._flags.declaration_assignment=!0),this._output.space_before_token=!0,this.print_token(t),this._output.space_before_token=!0},R.prototype.handle_comma=function(t){this.handle_whitespace_and_comments(t,!0),this.print_token(t),this._output.space_before_token=!0,this._flags.declaration_statement?(T(this._flags.parent.mode)&&(this._flags.declaration_assignment=!1),this._flags.declaration_assignment?(this._flags.declaration_assignment=!1,this.print_newline(!1,!0)):this._options.comma_first&&this.allow_wrap_or_preserved_newline(t)):this._flags.mode===k||this._flags.mode===m&&this._flags.parent.mode===k?(this._flags.mode===m&&this.restore_mode(),this._flags.inline_frame||this.print_newline()):this._options.comma_first&&this.allow_wrap_or_preserved_newline(t)},R.prototype.handle_operator=function(t){var e="*"===t.text&&(c(this._flags.last_token,["function","yield"])||p(this._flags.last_token.type,[h.START_BLOCK,h.COMMA,h.END_BLOCK,h.SEMICOLON])),i=p(t.text,["-","+"])&&(p(this._flags.last_token.type,[h.START_BLOCK,h.START_EXPR,h.EQUALS,h.OPERATOR])||p(this._flags.last_token.text,r)||","===this._flags.last_token.text);if(this.start_of_statement(t));else{var n=!e;this.handle_whitespace_and_comments(t,n)}if("*"!==t.text||this._flags.last_token.type!==h.DOT)if("::"!==t.text){if(this._flags.last_token.type===h.OPERATOR&&p(this._options.operator_position,g)&&this.allow_wrap_or_preserved_newline(t),":"===t.text&&this._flags.in_case)return this.print_token(t),this._flags.in_case=!1,this._flags.case_body=!0,void(this._tokens.peek().type!==h.START_BLOCK?(this.indent(),this.print_newline(),this._flags.case_block=!1):(this._flags.case_block=!0,this._output.space_before_token=!0));var _=!0,s=!0,a=!1;if(":"===t.text?0===this._flags.ternary_depth?_=!1:(this._flags.ternary_depth-=1,a=!0):"?"===t.text&&(this._flags.ternary_depth+=1),!i&&!e&&this._options.preserve_newlines&&p(t.text,o)){var u=":"===t.text,l=u&&a,k=u&&!a;switch(this._options.operator_position){case d.before_newline:return this._output.space_before_token=!k,this.print_token(t),u&&!l||this.allow_wrap_or_preserved_newline(t),void(this._output.space_before_token=!0);case d.after_newline:return this._output.space_before_token=!0,!u||l?this._tokens.peek().newlines?this.print_newline(!1,!0):this.allow_wrap_or_preserved_newline(t):this._output.space_before_token=!1,this.print_token(t),void(this._output.space_before_token=!0);case d.preserve_newline:return k||this.allow_wrap_or_preserved_newline(t),_=!(this._output.just_added_newline()||k),this._output.space_before_token=_,this.print_token(t),void(this._output.space_before_token=!0)}}if(e){this.allow_wrap_or_preserved_newline(t),_=!1;var w=this._tokens.peek();s=w&&p(w.type,[h.WORD,h.RESERVED])}else if("..."===t.text)this.allow_wrap_or_preserved_newline(t),_=this._flags.last_token.type===h.START_BLOCK,s=!1;else if(p(t.text,["--","++","!","~"])||i){if(this._flags.last_token.type!==h.COMMA&&this._flags.last_token.type!==h.START_EXPR||this.allow_wrap_or_preserved_newline(t),_=!1,s=!1,t.newlines&&("--"===t.text||"++"===t.text||"~"===t.text)){var y=c(this._flags.last_token,f)&&t.newlines;y&&(this._previous_flags.if_block||this._previous_flags.else_block)&&this.restore_mode(),this.print_newline(y,!0)}";"===this._flags.last_token.text&&T(this._flags.mode)&&(_=!0),this._flags.last_token.type===h.RESERVED?_=!0:this._flags.last_token.type===h.END_EXPR?_=!("]"===this._flags.last_token.text&&("--"===t.text||"++"===t.text)):this._flags.last_token.type===h.OPERATOR&&(_=p(t.text,["--","-","++","+"])&&p(this._flags.last_token.text,["--","-","++","+"]),p(t.text,["+","-"])&&p(this._flags.last_token.text,["--","++"])&&(s=!0)),(this._flags.mode!==b||this._flags.inline_frame)&&this._flags.mode!==m||"{"!==this._flags.last_token.text&&";"!==this._flags.last_token.text||this.print_newline()}this._output.space_before_token=this._output.space_before_token||_,this.print_token(t),this._output.space_before_token=s}else this.print_token(t);else this.print_token(t)},R.prototype.handle_block_comment=function(t,e){return this._output.raw?(this._output.add_raw_token(t),void(t.directives&&"end"===t.directives.preserve&&(this._output.raw=this._options.test_output_raw))):t.directives?(this.print_newline(!1,e),this.print_token(t),"start"===t.directives.preserve&&(this._output.raw=!0),void this.print_newline(!1,!0)):s.newline.test(t.text)||t.newlines?void this.print_block_commment(t,e):(this._output.space_before_token=!0,this.print_token(t),void(this._output.space_before_token=!0))},R.prototype.print_block_commment=function(t,e){var i,n=function(t){for(var e=[],i=(t=t.replace(s.allLineBreaks,"\n")).indexOf("\n");-1!==i;)e.push(t.substring(0,i)),i=(t=t.substring(i+1)).indexOf("\n");return t.length&&e.push(t),e}(t.text),_=!1,a=!1,u=t.whitespace_before,r=u.length;if(this.print_newline(!1,e),this.print_token_line_indentation(t),this._output.add_token(n[0]),this.print_newline(!1,e),n.length>1){for(_=function(t,e){for(var i=0;i<t.length;i++)if("*"!==t[i].trim().charAt(0))return!1;return!0}(n=n.slice(1)),a=function(t,e){for(var i,n=0,_=t.length;n<_;n++)if((i=t[n])&&0!==i.indexOf(e))return!1;return!0}(n,u),_&&(this._flags.alignment=1),i=0;i<n.length;i++)_?(this.print_token_line_indentation(t),this._output.add_token(n[i].replace(/^\s+/g,""))):a&&n[i]?(this.print_token_line_indentation(t),this._output.add_token(n[i].substring(r))):(this._output.current_line.set_indent(-1),this._output.add_token(n[i])),this.print_newline(!1,e);this._flags.alignment=0}},R.prototype.handle_comment=function(t,e){t.newlines?this.print_newline(!1,e):this._output.trim(!0),this._output.space_before_token=!0,this.print_token(t),this.print_newline(!1,e)},R.prototype.handle_dot=function(t){this.start_of_statement(t)||this.handle_whitespace_and_comments(t,!0),this._flags.last_token.text.match("^[0-9]+$")&&(this._output.space_before_token=!0),c(this._flags.last_token,f)?this._output.space_before_token=!1:this.allow_wrap_or_preserved_newline(t,")"===this._flags.last_token.text&&this._options.break_chained_methods),this._options.unindent_chained_methods&&this._output.just_added_newline()&&this.deindent(),this.print_token(t)},R.prototype.handle_unknown=function(t,e){this.print_token(t),"\n"===t.text[t.text.length-1]&&this.print_newline(!1,e)},R.prototype.handle_eof=function(t){for(;this._flags.mode===m;)this.restore_mode();this.handle_whitespace_and_comments(t)},t.exports.K=R},82:function(t,e,i){var n=i(282).K,_=i(962).E;t.exports=function(t,e){return new n(t,e).beautify()},t.exports.defaultOptions=function(){return new _}},962:function(t,e,i){var n=i(915).Ei,_=["before-newline","after-newline","preserve-newline"];function s(t){n.call(this,t,"js");var e=this.raw_options.brace_style||null;"expand-strict"===e?this.raw_options.brace_style="expand":"collapse-preserve-inline"===e?this.raw_options.brace_style="collapse,preserve-inline":void 0!==this.raw_options.braces_on_own_line&&(this.raw_options.brace_style=this.raw_options.braces_on_own_line?"expand":"collapse");var i=this._get_selection_list("brace_style",["collapse","expand","end-expand","none","preserve-inline"]);this.brace_preserve_inline=!1,this.brace_style="collapse";for(var s=0;s<i.length;s++)"preserve-inline"===i[s]?this.brace_preserve_inline=!0:this.brace_style=i[s];this.unindent_chained_methods=this._get_boolean("unindent_chained_methods"),this.break_chained_methods=this._get_boolean("break_chained_methods"),this.space_in_paren=this._get_boolean("space_in_paren"),this.space_in_empty_paren=this._get_boolean("space_in_empty_paren"),this.jslint_happy=this._get_boolean("jslint_happy"),this.space_after_anon_function=this._get_boolean("space_after_anon_function"),this.space_after_named_function=this._get_boolean("space_after_named_function"),this.keep_array_indentation=this._get_boolean("keep_array_indentation"),this.space_before_conditional=this._get_boolean("space_before_conditional",!0),this.unescape_strings=this._get_boolean("unescape_strings"),this.e4x=this._get_boolean("e4x"),this.comma_first=this._get_boolean("comma_first"),this.operator_position=this._get_selection("operator_position",_),this.test_output_raw=this._get_boolean("test_output_raw"),this.jslint_happy&&(this.space_after_anon_function=!0)}s.prototype=new n,t.exports.E=s},76:function(t,e,i){var n=i(418).g,_=i(147).d,s=i(147).o,a=i(7).t,u=i(273),r=i(348).c,o=i(800).A;function h(t,e){return-1!==e.indexOf(t)}var p={START_EXPR:"TK_START_EXPR",END_EXPR:"TK_END_EXPR",START_BLOCK:"TK_START_BLOCK",END_BLOCK:"TK_END_BLOCK",WORD:"TK_WORD",RESERVED:"TK_RESERVED",SEMICOLON:"TK_SEMICOLON",STRING:"TK_STRING",EQUALS:"TK_EQUALS",OPERATOR:"TK_OPERATOR",COMMA:"TK_COMMA",BLOCK_COMMENT:"TK_BLOCK_COMMENT",COMMENT:"TK_COMMENT",DOT:"TK_DOT",UNKNOWN:"TK_UNKNOWN",START:s.START,RAW:s.RAW,EOF:s.EOF},l=new a(/\/\*/,/\*\//),c=/0[xX][0123456789abcdefABCDEF_]*n?|0[oO][01234567_]*n?|0[bB][01_]*n?|\d[\d_]*n|(?:\.\d[\d_]*|\d[\d_]*\.?[\d_]*)(?:[eE][+-]?[\d_]+)?/,f=/[0-9]/,d=/[^\d\.]/,g=">>> === !== &&= ??= ||= << && >= ** != == <= >> || ?? |> < / - + > : & % ? ^ | *".split(" "),b=">>>= ... >>= <<= === >>> !== **= &&= ??= ||= => ^= :: /= << <= == && -= >= >> != -- += ** || ?? ++ %= &= *= |= |> = ! ? > < : / ^ - + * & % ~ |";b=(b="\\?\\.(?!\\d) "+(b=b.replace(/[-[\]{}()*+?.,\\^$|#]/g,"\\$&"))).replace(/ /g,"|");var m,k=new RegExp(b),w="continue,try,throw,return,var,let,const,if,switch,case,default,for,while,break,function,import,export".split(","),y=w.concat(["do","in","of","else","get","set","new","catch","finally","typeof","yield","async","await","from","as","class","extends"]),x=new RegExp("^(?:"+y.join("|")+")$"),v=function(t,e){_.call(this,t,e),this._patterns.whitespace=this._patterns.whitespace.matching(/\u00A0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff/.source,/\u2028\u2029/.source);var i=new r(this._input),n=new o(this._input).read_options(this._options);this.__patterns={template:n,identifier:n.starting_with(u.identifier).matching(u.identifierMatch),number:i.matching(c),punct:i.matching(k),comment:i.starting_with(/\/\//).until(/[\n\r\u2028\u2029]/),block_comment:i.starting_with(/\/\*/).until_after(/\*\//),html_comment_start:i.matching(/<!--/),html_comment_end:i.matching(/-->/),include:i.starting_with(/#include/).until_after(u.lineBreak),shebang:i.starting_with(/#!/).until_after(u.lineBreak),xml:i.matching(/[\s\S]*?<(\/?)([-a-zA-Z:0-9_.]+|{[^}]+?}|!\[CDATA\[[^\]]*?\]\]|)(\s*{[^}]+?}|\s+[-a-zA-Z:0-9_.]+|\s+[-a-zA-Z:0-9_.]+\s*=\s*('[^']*'|"[^"]*"|{([^{}]|{[^}]+?})+?}))*\s*(\/?)\s*>/),single_quote:n.until(/['\\\n\r\u2028\u2029]/),double_quote:n.until(/["\\\n\r\u2028\u2029]/),template_text:n.until(/[`\\$]/),template_expression:n.until(/[`}\\]/)}};(v.prototype=new _)._is_comment=function(t){return t.type===p.COMMENT||t.type===p.BLOCK_COMMENT||t.type===p.UNKNOWN},v.prototype._is_opening=function(t){return t.type===p.START_BLOCK||t.type===p.START_EXPR},v.prototype._is_closing=function(t,e){return(t.type===p.END_BLOCK||t.type===p.END_EXPR)&&e&&("]"===t.text&&"["===e.text||")"===t.text&&"("===e.text||"}"===t.text&&"{"===e.text)},v.prototype._reset=function(){m=!1},v.prototype._get_next_token=function(t,e){var i=null;this._readWhitespace();var n=this._input.peek();return null===n?this._create_token(p.EOF,""):i=(i=(i=(i=(i=(i=(i=(i=(i=i||this._read_non_javascript(n))||this._read_string(n))||this._read_word(t))||this._read_singles(n))||this._read_comment(n))||this._read_regexp(n,t))||this._read_xml(n,t))||this._read_punctuation())||this._create_token(p.UNKNOWN,this._input.next())},v.prototype._read_word=function(t){var e;return""!==(e=this.__patterns.identifier.read())?(e=e.replace(u.allLineBreaks,"\n"),t.type!==p.DOT&&(t.type!==p.RESERVED||"set"!==t.text&&"get"!==t.text)&&x.test(e)?"in"!==e&&"of"!==e||t.type!==p.WORD&&t.type!==p.STRING?this._create_token(p.RESERVED,e):this._create_token(p.OPERATOR,e):this._create_token(p.WORD,e)):""!==(e=this.__patterns.number.read())?this._create_token(p.WORD,e):void 0},v.prototype._read_singles=function(t){var e=null;return"("===t||"["===t?e=this._create_token(p.START_EXPR,t):")"===t||"]"===t?e=this._create_token(p.END_EXPR,t):"{"===t?e=this._create_token(p.START_BLOCK,t):"}"===t?e=this._create_token(p.END_BLOCK,t):";"===t?e=this._create_token(p.SEMICOLON,t):"."===t&&d.test(this._input.peek(1))?e=this._create_token(p.DOT,t):","===t&&(e=this._create_token(p.COMMA,t)),e&&this._input.next(),e},v.prototype._read_punctuation=function(){var t=this.__patterns.punct.read();if(""!==t)return"="===t?this._create_token(p.EQUALS,t):"?."===t?this._create_token(p.DOT,t):this._create_token(p.OPERATOR,t)},v.prototype._read_non_javascript=function(t){var e="";if("#"===t){if(this._is_first_token()&&(e=this.__patterns.shebang.read()))return this._create_token(p.UNKNOWN,e.trim()+"\n");if(e=this.__patterns.include.read())return this._create_token(p.UNKNOWN,e.trim()+"\n");t=this._input.next();var i="#";if(this._input.hasNext()&&this._input.testChar(f)){do{i+=t=this._input.next()}while(this._input.hasNext()&&"#"!==t&&"="!==t);return"#"===t||("["===this._input.peek()&&"]"===this._input.peek(1)?(i+="[]",this._input.next(),this._input.next()):"{"===this._input.peek()&&"}"===this._input.peek(1)&&(i+="{}",this._input.next(),this._input.next())),this._create_token(p.WORD,i)}this._input.back()}else if("<"===t&&this._is_first_token()){if(e=this.__patterns.html_comment_start.read()){for(;this._input.hasNext()&&!this._input.testChar(u.newline);)e+=this._input.next();return m=!0,this._create_token(p.COMMENT,e)}}else if(m&&"-"===t&&(e=this.__patterns.html_comment_end.read()))return m=!1,this._create_token(p.COMMENT,e);return null},v.prototype._read_comment=function(t){var e=null;if("/"===t){var i="";if("*"===this._input.peek(1)){i=this.__patterns.block_comment.read();var n=l.get_directives(i);n&&"start"===n.ignore&&(i+=l.readIgnored(this._input)),i=i.replace(u.allLineBreaks,"\n"),(e=this._create_token(p.BLOCK_COMMENT,i)).directives=n}else"/"===this._input.peek(1)&&(i=this.__patterns.comment.read(),e=this._create_token(p.COMMENT,i))}return e},v.prototype._read_string=function(t){if("`"===t||"'"===t||'"'===t){var e=this._input.next();return this.has_char_escapes=!1,e+="`"===t?this._read_string_recursive("`",!0,"${"):this._read_string_recursive(t),this.has_char_escapes&&this._options.unescape_strings&&(e=function(t){for(var e="",i=0,_=new n(t),s=null;_.hasNext();)if((s=_.match(/([\s]|[^\\]|\\\\)+/g))&&(e+=s[0]),"\\"===_.peek()){if(_.next(),"x"===_.peek())s=_.match(/x([0-9A-Fa-f]{2})/g);else{if("u"!==_.peek()){e+="\\",_.hasNext()&&(e+=_.next());continue}s=_.match(/u([0-9A-Fa-f]{4})/g)}if(!s)return t;if((i=parseInt(s[1],16))>126&&i<=255&&0===s[0].indexOf("x"))return t;if(i>=0&&i<32){e+="\\"+s[0];continue}e+=34===i||39===i||92===i?"\\"+String.fromCharCode(i):String.fromCharCode(i)}return e}(e)),this._input.peek()===t&&(e+=this._input.next()),e=e.replace(u.allLineBreaks,"\n"),this._create_token(p.STRING,e)}return null},v.prototype._allow_regexp_or_xml=function(t){return t.type===p.RESERVED&&h(t.text,["return","case","throw","else","do","typeof","yield"])||t.type===p.END_EXPR&&")"===t.text&&t.opened.previous.type===p.RESERVED&&h(t.opened.previous.text,["if","while","for"])||h(t.type,[p.COMMENT,p.START_EXPR,p.START_BLOCK,p.START,p.END_BLOCK,p.OPERATOR,p.EQUALS,p.EOF,p.SEMICOLON,p.COMMA])},v.prototype._read_regexp=function(t,e){if("/"===t&&this._allow_regexp_or_xml(e)){for(var i=this._input.next(),n=!1,_=!1;this._input.hasNext()&&(n||_||this._input.peek()!==t)&&!this._input.testChar(u.newline);)i+=this._input.peek(),n?n=!1:(n="\\"===this._input.peek(),"["===this._input.peek()?_=!0:"]"===this._input.peek()&&(_=!1)),this._input.next();return this._input.peek()===t&&(i+=this._input.next(),i+=this._input.read(u.identifier)),this._create_token(p.STRING,i)}return null},v.prototype._read_xml=function(t,e){if(this._options.e4x&&"<"===t&&this._allow_regexp_or_xml(e)){var i="",n=this.__patterns.xml.read_match();if(n){for(var _=n[2].replace(/^{\s+/,"{").replace(/\s+}$/,"}"),s=0===_.indexOf("{"),a=0;n;){var r=!!n[1],o=n[2];if(!(n[n.length-1]||"![CDATA["===o.slice(0,8))&&(o===_||s&&o.replace(/^{\s+/,"{").replace(/\s+}$/,"}"))&&(r?--a:++a),i+=n[0],a<=0)break;n=this.__patterns.xml.read_match()}return n||(i+=this._input.match(/[\s\S]*/g)[0]),i=i.replace(u.allLineBreaks,"\n"),this._create_token(p.STRING,i)}}return null},v.prototype._read_string_recursive=function(t,e,i){var n,_;"'"===t?_=this.__patterns.single_quote:'"'===t?_=this.__patterns.double_quote:"`"===t?_=this.__patterns.template_text:"}"===t&&(_=this.__patterns.template_expression);for(var s=_.read(),a="";this._input.hasNext();){if((a=this._input.next())===t||!e&&u.newline.test(a)){this._input.back();break}"\\"===a&&this._input.hasNext()?("x"===(n=this._input.peek())||"u"===n?this.has_char_escapes=!0:"\r"===n&&"\n"===this._input.peek(1)&&this._input.next(),a+=this._input.next()):i&&("${"===i&&"$"===a&&"{"===this._input.peek()&&(a+=this._input.next()),i===a&&(a+="`"===t?this._read_string_recursive("}",e,"`"):this._read_string_recursive("`",e,"${"),this._input.hasNext()&&(a+=this._input.next()))),s+=a+=_.read()}return s},t.exports.d2=v,t.exports.o3=p,t.exports.L2=g.slice(),t.exports.O9=w.slice()}},e={};return function i(n){var _=e[n];if(void 0!==_)return _.exports;var s=e[n]={exports:{}};return t[n](s,s.exports,i),s.exports}(772)}()}));
+//# sourceMappingURL=beautifier.min.js.map
diff --git a/src/lib/lz4/README.md b/src/lib/lz4/README.md
new file mode 100644
index 0000000..6fcf4f8
--- /dev/null
+++ b/src/lib/lz4/README.md
@@ -0,0 +1,52 @@
+## Purpose
+
+The purpose of this library is to implement LZ4 compression/decompression,
+as documented at the official LZ4 repository:
+
+https://github.com/lz4/lz4/blob/dev/doc/lz4_Block_format.md
+
+The files in this directory are developed as a separate project at:
+
+https://github.com/gorhill/lz4-wasm
+
+## Files
+
+### `lz4-block-codec-any.js`
+
+The purpose is to instantiate a WebAssembly- or pure javascript-based
+LZ4 block codec.
+
+If the chosen implementation is not specified, there will be an attempt to
+create a WebAssembly-based instance. If for whatever reason this fails, a
+pure javascript-based instance will be created.
+
+The script for either instance are dynamically loaded and only when needed,
+such that no resources are wasted by keeping in memory code which won't be
+used.
+
+### `lz4-block-codec-wasm.js`
+
+This contains the code to instantiate WebAssembly-based LZ4 block codec. Note
+that the WebAssembly module is loaded using a `same-origin` fetch, hence
+ensuring that no code outside the package is loaded.
+
+### `lz4-block-codec-js.js`
+
+This contains the code to instantiate pure javascript-based LZ4 block codec.
+
+This is used as a fallback implementation should WebAssembly not be available
+for whatever reason.
+
+### `lz4-block-codec.wasm`
+
+This is the WebAssembly module, loaded by `lz4-block-codec-wasm.js` using a
+`same-origin` fetch.
+
+### `lz4-block-codec.wat`
+
+The WebAssembly source code used to generate the WebAssembly module `lz4-block-codec.wasm`.
+
+ wat2wasm ./lz4-block-codec.wat -o ./lz4-block-codec.wasm
+ wasm-opt ./lz4-block-codec.wasm -O4 -o ./lz4-block-codec.wasm
+
+You can get `wat2wasm` at <https://github.com/WebAssembly/wabt>, and `wasm-opt` at <https://github.com/WebAssembly/binaryen>.
diff --git a/src/lib/lz4/lz4-block-codec-any.js b/src/lib/lz4/lz4-block-codec-any.js
new file mode 100644
index 0000000..daf141b
--- /dev/null
+++ b/src/lib/lz4/lz4-block-codec-any.js
@@ -0,0 +1,151 @@
+/*******************************************************************************
+
+ lz4-block-codec-any.js
+ A wrapper to instantiate a wasm- and/or js-based LZ4 block
+ encoder/decoder.
+ Copyright (C) 2018 Raymond Hill
+
+ BSD-2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ Home: https://github.com/gorhill/lz4-wasm
+
+ I used the same license as the one picked by creator of LZ4 out of respect
+ for his creation, see https://lz4.github.io/lz4/
+
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+(function(context) { // >>>> Start of private namespace
+
+/******************************************************************************/
+
+const wd = (function() {
+ let url = document.currentScript.src;
+ let match = /[^\/]+$/.exec(url);
+ return match !== null ?
+ url.slice(0, match.index) :
+ '';
+})();
+
+const removeScript = function(script) {
+ if ( !script ) { return; }
+ if ( script.parentNode === null ) { return; }
+ script.parentNode.removeChild(script);
+};
+
+const createInstanceWASM = function() {
+ if ( context.LZ4BlockWASM instanceof Function ) {
+ const instance = new context.LZ4BlockWASM();
+ return instance.init().then(ok => ok ? instance : null);
+ }
+ if ( context.LZ4BlockWASM === null ) {
+ return Promise.resolve(null);
+ }
+ return new Promise(resolve => {
+ const script = document.createElement('script');
+ script.src = wd + 'lz4-block-codec-wasm.js';
+ script.addEventListener('load', ( ) => {
+ if ( context.LZ4BlockWASM instanceof Function === false ) {
+ context.LZ4BlockWASM = null;
+ resolve(null);
+ return;
+ }
+ const instance = new context.LZ4BlockWASM();
+ instance.init().then(ok => { resolve(ok ? instance : null); });
+ });
+ script.addEventListener('error', ( ) => {
+ context.LZ4BlockWASM = null;
+ resolve(null);
+ });
+ document.head.appendChild(script);
+ removeScript(script);
+ });
+};
+
+const createInstanceJS = function() {
+ if ( context.LZ4BlockJS instanceof Function ) {
+ const instance = new context.LZ4BlockJS();
+ return instance.init().then(ok => ok ? instance : null);
+ }
+ if ( context.LZ4BlockJS === null ) {
+ return Promise.resolve(null);
+ }
+ return new Promise(resolve => {
+ const script = document.createElement('script');
+ script.src = wd + 'lz4-block-codec-js.js';
+ script.addEventListener('load', ( ) => {
+ if ( context.LZ4BlockJS instanceof Function === false ) {
+ context.LZ4BlockJS = null;
+ resolve(null);
+ return;
+ }
+ const instance = new context.LZ4BlockJS();
+ instance.init().then(ok => { resolve(ok ? instance : null); });
+ });
+ script.addEventListener('error', ( ) => {
+ context.LZ4BlockJS = null;
+ resolve(null);
+ });
+ document.head.appendChild(script);
+ removeScript(script);
+ });
+};
+
+/******************************************************************************/
+
+context.lz4BlockCodec = {
+ createInstance: function(flavor) {
+ let instantiator;
+ if ( flavor === 'wasm' ) {
+ instantiator = createInstanceWASM;
+ } else if ( flavor === 'js' ) {
+ instantiator = createInstanceJS;
+ } else {
+ instantiator = createInstanceWASM || createInstanceJS;
+ }
+ return (instantiator)().then(instance => {
+ if ( instance ) { return instance; }
+ if ( flavor === undefined ) {
+ return createInstanceJS();
+ }
+ return null;
+ });
+ },
+ reset: function() {
+ context.LZ4BlockWASM = undefined;
+ context.LZ4BlockJS = undefined;
+ }
+};
+
+/******************************************************************************/
+
+})(this || self); // <<<< End of private namespace
+
+/******************************************************************************/
diff --git a/src/lib/lz4/lz4-block-codec-js.js b/src/lib/lz4/lz4-block-codec-js.js
new file mode 100644
index 0000000..809da66
--- /dev/null
+++ b/src/lib/lz4/lz4-block-codec-js.js
@@ -0,0 +1,297 @@
+/*******************************************************************************
+
+ lz4-block-codec-js.js
+ A javascript wrapper around a pure javascript implementation of
+ LZ4 block format codec.
+ Copyright (C) 2018 Raymond Hill
+
+ BSD-2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ Home: https://github.com/gorhill/lz4-wasm
+
+ I used the same license as the one picked by creator of LZ4 out of respect
+ for his creation, see https://lz4.github.io/lz4/
+
+*/
+
+'use strict';
+
+/******************************************************************************/
+
+(function(context) { // >>>> Start of private namespace
+
+/******************************************************************************/
+
+const growOutputBuffer = function(instance, size) {
+ if (
+ instance.outputBuffer === undefined ||
+ instance.outputBuffer.byteLength < size
+ ) {
+ instance.outputBuffer = new ArrayBuffer(size + 0xFFFF & 0x7FFF0000);
+ }
+ return instance.outputBuffer;
+};
+
+const encodeBound = function(size) {
+ return size > 0x7E000000 ?
+ 0 :
+ size + (size / 255 | 0) + 16;
+};
+
+const encodeBlock = function(instance, iBuf, oOffset) {
+ let iLen = iBuf.byteLength;
+ if ( iLen >= 0x7E000000 ) { throw new RangeError(); }
+
+ // "The last match must start at least 12 bytes before end of block"
+ let lastMatchPos = iLen - 12;
+
+ // "The last 5 bytes are always literals"
+ let lastLiteralPos = iLen - 5;
+
+ if ( instance.hashTable === undefined ) {
+ instance.hashTable = new Int32Array(65536);
+ }
+ instance.hashTable.fill(-65536);
+
+ if ( iBuf instanceof ArrayBuffer ) {
+ iBuf = new Uint8Array(iBuf);
+ }
+
+ let oLen = oOffset + encodeBound(iLen);
+ let oBuf = new Uint8Array(growOutputBuffer(instance, oLen), 0, oLen);
+ let iPos = 0;
+ let oPos = oOffset;
+ let anchorPos = 0;
+
+ // sequence-finding loop
+ for (;;) {
+ let refPos;
+ let mOffset;
+ let sequence = iBuf[iPos] << 8 | iBuf[iPos+1] << 16 | iBuf[iPos+2] << 24;
+
+ // match-finding loop
+ while ( iPos <= lastMatchPos ) {
+ sequence = sequence >>> 8 | iBuf[iPos+3] << 24;
+ let hash = (sequence * 0x9E37 & 0xFFFF) + (sequence * 0x79B1 >>> 16) & 0xFFFF;
+ refPos = instance.hashTable[hash];
+ instance.hashTable[hash] = iPos;
+ mOffset = iPos - refPos;
+ if (
+ mOffset < 65536 &&
+ iBuf[refPos+0] === ((sequence ) & 0xFF) &&
+ iBuf[refPos+1] === ((sequence >>> 8) & 0xFF) &&
+ iBuf[refPos+2] === ((sequence >>> 16) & 0xFF) &&
+ iBuf[refPos+3] === ((sequence >>> 24) & 0xFF)
+ ) {
+ break;
+ }
+ iPos += 1;
+ }
+
+ // no match found
+ if ( iPos > lastMatchPos ) { break; }
+
+ // match found
+ let lLen = iPos - anchorPos;
+ let mLen = iPos;
+ iPos += 4; refPos += 4;
+ while ( iPos < lastLiteralPos && iBuf[iPos] === iBuf[refPos] ) {
+ iPos += 1; refPos += 1;
+ }
+ mLen = iPos - mLen;
+ let token = mLen < 19 ? mLen - 4 : 15;
+
+ // write token, length of literals if needed
+ if ( lLen >= 15 ) {
+ oBuf[oPos++] = 0xF0 | token;
+ let l = lLen - 15;
+ while ( l >= 255 ) {
+ oBuf[oPos++] = 255;
+ l -= 255;
+ }
+ oBuf[oPos++] = l;
+ } else {
+ oBuf[oPos++] = (lLen << 4) | token;
+ }
+
+ // write literals
+ while ( lLen-- ) {
+ oBuf[oPos++] = iBuf[anchorPos++];
+ }
+
+ if ( mLen === 0 ) { break; }
+
+ // write offset of match
+ oBuf[oPos+0] = mOffset;
+ oBuf[oPos+1] = mOffset >>> 8;
+ oPos += 2;
+
+ // write length of match if needed
+ if ( mLen >= 19 ) {
+ let l = mLen - 19;
+ while ( l >= 255 ) {
+ oBuf[oPos++] = 255;
+ l -= 255;
+ }
+ oBuf[oPos++] = l;
+ }
+
+ anchorPos = iPos;
+ }
+
+ // last sequence is literals only
+ let lLen = iLen - anchorPos;
+ if ( lLen >= 15 ) {
+ oBuf[oPos++] = 0xF0;
+ let l = lLen - 15;
+ while ( l >= 255 ) {
+ oBuf[oPos++] = 255;
+ l -= 255;
+ }
+ oBuf[oPos++] = l;
+ } else {
+ oBuf[oPos++] = lLen << 4;
+ }
+ while ( lLen-- ) {
+ oBuf[oPos++] = iBuf[anchorPos++];
+ }
+
+ return new Uint8Array(oBuf.buffer, 0, oPos);
+};
+
+const decodeBlock = function(instance, iBuf, iOffset, oLen) {
+ let iLen = iBuf.byteLength;
+ let oBuf = new Uint8Array(growOutputBuffer(instance, oLen), 0, oLen);
+ let iPos = iOffset, oPos = 0;
+
+ while ( iPos < iLen ) {
+ let token = iBuf[iPos++];
+
+ // literals
+ let clen = token >>> 4;
+
+ // length of literals
+ if ( clen !== 0 ) {
+ if ( clen === 15 ) {
+ let l;
+ for (;;) {
+ l = iBuf[iPos++];
+ if ( l !== 255 ) { break; }
+ clen += 255;
+ }
+ clen += l;
+ }
+
+ // copy literals
+ let end = iPos + clen;
+ while ( iPos < end ) {
+ oBuf[oPos++] = iBuf[iPos++];
+ }
+ if ( iPos === iLen ) { break; }
+ }
+
+ // match
+ let mOffset = iBuf[iPos+0] | (iBuf[iPos+1] << 8);
+ if ( mOffset === 0 || mOffset > oPos ) { return; }
+ iPos += 2;
+
+ // length of match
+ clen = (token & 0x0F) + 4;
+ if ( clen === 19 ) {
+ let l;
+ for (;;) {
+ l = iBuf[iPos++];
+ if ( l !== 255 ) { break; }
+ clen += 255;
+ }
+ clen += l;
+ }
+
+ // copy match
+ let mPos = oPos - mOffset;
+ let end = oPos + clen;
+ while ( oPos < end ) {
+ oBuf[oPos++] = oBuf[mPos++];
+ }
+ }
+
+ return oBuf;
+};
+
+/******************************************************************************/
+
+context.LZ4BlockJS = function() {
+ this.hashTable = undefined;
+ this.outputBuffer = undefined;
+};
+
+context.LZ4BlockJS.prototype = {
+ flavor: 'js',
+ init: function() {
+ return Promise.resolve(true);
+ },
+
+ reset: function() {
+ this.hashTable = undefined;
+ this.outputBuffer = undefined;
+ },
+
+ bytesInUse: function() {
+ let bytesInUse = 0;
+ if ( this.hashTable !== undefined ) {
+ bytesInUse += this.hashTable.byteLength;
+ }
+ if ( this.outputBuffer !== undefined ) {
+ bytesInUse += this.outputBuffer.byteLength;
+ }
+ return bytesInUse;
+ },
+
+ encodeBlock: function(input, outputOffset) {
+ if ( input instanceof ArrayBuffer ) {
+ input = new Uint8Array(input);
+ } else if ( input instanceof Uint8Array === false ) {
+ throw new TypeError();
+ }
+ return encodeBlock(this, input, outputOffset);
+ },
+
+ decodeBlock: function(input, inputOffset, outputSize) {
+ if ( input instanceof ArrayBuffer ) {
+ input = new Uint8Array(input);
+ } else if ( input instanceof Uint8Array === false ) {
+ throw new TypeError();
+ }
+ return decodeBlock(this, input, inputOffset, outputSize);
+ }
+};
+
+/******************************************************************************/
+
+})(this || self); // <<<< End of private namespace
+
+/******************************************************************************/
diff --git a/src/lib/lz4/lz4-block-codec-wasm.js b/src/lib/lz4/lz4-block-codec-wasm.js
new file mode 100644
index 0000000..46a9a67
--- /dev/null
+++ b/src/lib/lz4/lz4-block-codec-wasm.js
@@ -0,0 +1,195 @@
+/*******************************************************************************
+
+ lz4-block-codec-wasm.js
+ A javascript wrapper around a WebAssembly implementation of
+ LZ4 block format codec.
+ Copyright (C) 2018 Raymond Hill
+
+ BSD-2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ Home: https://github.com/gorhill/lz4-wasm
+
+ I used the same license as the one picked by creator of LZ4 out of respect
+ for his creation, see https://lz4.github.io/lz4/
+
+*/
+
+/* global WebAssembly */
+
+'use strict';
+
+/******************************************************************************/
+
+(function(context) { // >>>> Start of private namespace
+
+/******************************************************************************/
+
+const wd = (function() {
+ let url = document.currentScript.src;
+ let match = /[^\/]+$/.exec(url);
+ return match !== null ?
+ url.slice(0, match.index) :
+ '';
+})();
+
+const growMemoryTo = function(wasmInstance, byteLength) {
+ let lz4api = wasmInstance.exports;
+ let neededByteLength = lz4api.getLinearMemoryOffset() + byteLength;
+ let pageCountBefore = lz4api.memory.buffer.byteLength >>> 16;
+ let pageCountAfter = (neededByteLength + 65535) >>> 16;
+ if ( pageCountAfter > pageCountBefore ) {
+ lz4api.memory.grow(pageCountAfter - pageCountBefore);
+ }
+ return lz4api.memory.buffer;
+};
+
+const encodeBlock = function(wasmInstance, inputArray, outputOffset) {
+ let lz4api = wasmInstance.exports;
+ let mem0 = lz4api.getLinearMemoryOffset();
+ let hashTableSize = 65536 * 4;
+ let inputSize = inputArray.byteLength;
+ if ( inputSize >= 0x7E000000 ) { throw new RangeError(); }
+ let memSize =
+ hashTableSize +
+ inputSize +
+ outputOffset + lz4api.lz4BlockEncodeBound(inputSize);
+ let memBuffer = growMemoryTo(wasmInstance, memSize);
+ let hashTable = new Int32Array(memBuffer, mem0, 65536);
+ hashTable.fill(-65536, 0, 65536);
+ let inputMem = new Uint8Array(memBuffer, mem0 + hashTableSize, inputSize);
+ inputMem.set(inputArray);
+ let outputSize = lz4api.lz4BlockEncode(
+ mem0 + hashTableSize,
+ inputSize,
+ mem0 + hashTableSize + inputSize + outputOffset
+ );
+ if ( outputSize === 0 ) { return; }
+ let outputArray = new Uint8Array(
+ memBuffer,
+ mem0 + hashTableSize + inputSize,
+ outputOffset + outputSize
+ );
+ return outputArray;
+};
+
+const decodeBlock = function(wasmInstance, inputArray, inputOffset, outputSize) {
+ let inputSize = inputArray.byteLength;
+ let lz4api = wasmInstance.exports;
+ let mem0 = lz4api.getLinearMemoryOffset();
+ let memSize = inputSize + outputSize;
+ let memBuffer = growMemoryTo(wasmInstance, memSize);
+ let inputArea = new Uint8Array(memBuffer, mem0, inputSize);
+ inputArea.set(inputArray);
+ outputSize = lz4api.lz4BlockDecode(
+ mem0 + inputOffset,
+ inputSize - inputOffset,
+ mem0 + inputSize
+ );
+ if ( outputSize === 0 ) { return; }
+ return new Uint8Array(memBuffer, mem0 + inputSize, outputSize);
+};
+
+/******************************************************************************/
+
+context.LZ4BlockWASM = function() {
+ this.lz4wasmInstance = undefined;
+};
+
+context.LZ4BlockWASM.prototype = {
+ flavor: 'wasm',
+
+ init: function() {
+ if (
+ typeof WebAssembly !== 'object' ||
+ typeof WebAssembly.instantiateStreaming !== 'function'
+ ) {
+ this.lz4wasmInstance = null;
+ }
+ if ( this.lz4wasmInstance === null ) {
+ return Promise.resolve(false);
+ }
+ if ( this.lz4wasmInstance instanceof WebAssembly.Instance ) {
+ return Promise.resolve(true);
+ }
+ if ( this.lz4wasmInstance === undefined ) {
+ this.lz4wasmInstance = fetch(
+ wd + 'lz4-block-codec.wasm',
+ { mode: 'same-origin' }
+ ).then(
+ WebAssembly.instantiateStreaming
+ ).then(result => {
+ this.lz4wasmInstance = result && result.instance || null;
+ }).catch(reason => {
+ this.lz4wasmInstance = null;
+ console.info(reason);
+ }).then(( ) =>
+ this.lz4wasmInstance !== null
+ );
+ }
+ return this.lz4wasmInstance;
+ },
+
+ reset: function() {
+ this.lz4wasmInstance = undefined;
+ },
+
+ bytesInUse: function() {
+ return this.lz4wasmInstance instanceof WebAssembly.Instance ?
+ this.lz4wasmInstance.exports.memory.buffer.byteLength :
+ 0;
+ },
+
+ encodeBlock: function(input, outputOffset) {
+ if ( this.lz4wasmInstance instanceof WebAssembly.Instance === false ) {
+ throw new Error('LZ4BlockWASM: not initialized');
+ }
+ if ( input instanceof ArrayBuffer ) {
+ input = new Uint8Array(input);
+ } else if ( input instanceof Uint8Array === false ) {
+ throw new TypeError();
+ }
+ return encodeBlock(this.lz4wasmInstance, input, outputOffset);
+ },
+
+ decodeBlock: function(input, inputOffset, outputSize) {
+ if ( this.lz4wasmInstance instanceof WebAssembly.Instance === false ) {
+ throw new Error('LZ4BlockWASM: not initialized');
+ }
+ if ( input instanceof ArrayBuffer ) {
+ input = new Uint8Array(input);
+ } else if ( input instanceof Uint8Array === false ) {
+ throw new TypeError();
+ }
+ return decodeBlock(this.lz4wasmInstance, input, inputOffset, outputSize);
+ }
+};
+
+/******************************************************************************/
+
+})(this || self); // <<<< End of private namespace
+
+/******************************************************************************/
diff --git a/src/lib/lz4/lz4-block-codec.wasm b/src/lib/lz4/lz4-block-codec.wasm
new file mode 100644
index 0000000..c57b079
--- /dev/null
+++ b/src/lib/lz4/lz4-block-codec.wasm
Binary files differ
diff --git a/src/lib/lz4/lz4-block-codec.wat b/src/lib/lz4/lz4-block-codec.wat
new file mode 100644
index 0000000..4d9cf42
--- /dev/null
+++ b/src/lib/lz4/lz4-block-codec.wat
@@ -0,0 +1,745 @@
+;;
+;; lz4-block-codec.wat: a WebAssembly implementation of LZ4 block format codec
+;; Copyright (C) 2018 Raymond Hill
+;;
+;; BSD-2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+;;
+;; Redistribution and use in source and binary forms, with or without
+;; modification, are permitted provided that the following conditions are
+;; met:
+;;
+;; 1. Redistributions of source code must retain the above copyright
+;; notice, this list of conditions and the following disclaimer.
+;;
+;; 2. Redistributions in binary form must reproduce the above
+;; copyright notice, this list of conditions and the following disclaimer
+;; in the documentation and/or other materials provided with the
+;; distribution.
+;;
+;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+;; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+;; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+;; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+;; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+;;
+;; Home: https://github.com/gorhill/lz4-wasm
+;;
+;; I used the same license as the one picked by creator of LZ4 out of respect
+;; for his creation, see https://lz4.github.io/lz4/
+;;
+
+(module
+;;
+;; module start
+;;
+
+;; (func $log (import "imports" "log") (param i32 i32 i32))
+
+(memory (export "memory") 1)
+
+;;
+;; Public functions
+;;
+
+;;
+;; Return an offset to the first byte of usable linear memory.
+;; Might be useful in the future to reserve memory space for whatever purpose,
+;; like config variables, etc.
+;;
+(func $getLinearMemoryOffset (export "getLinearMemoryOffset")
+ (result i32)
+ i32.const 0
+)
+
+;;
+;; unsigned int lz4BlockEncodeBound()
+;;
+;; Return the maximum size of the output buffer holding the compressed data.
+;;
+;; Reference implementation:
+;; https://github.com/lz4/lz4/blob/dev/lib/lz4.h#L156
+;;
+(func (export "lz4BlockEncodeBound")
+ (param $ilen i32)
+ (result i32)
+ local.get $ilen
+ i32.const 0x7E000000
+ i32.gt_u
+ if
+ i32.const 0
+ return
+ end
+ local.get $ilen
+ local.get $ilen
+ i32.const 255
+ i32.div_u
+ i32.add
+ i32.const 16
+ i32.add
+)
+
+;;
+;; unsigned int lz4BlockEncode(
+;; unsigned int inPtr,
+;; unsigned int ilen,
+;; unsigned int outPtr
+;; )
+;;
+;; https://github.com/lz4/lz4/blob/dev/lib/lz4.c#L651
+;;
+;; The implementation below is modified from the reference one.
+;;
+;; - There is no skip adjustment for repeated failure to find a match.
+;;
+;; - All configurable values are hard-coded to match the generic version
+;; of the compressor.
+;;
+;; Note the size of the input block is NOT encoded in the output buffer, it
+;; is for the caller to figure how they will save that information on
+;; their side. At this point it is probably a trivial amount of work to
+;; implement the LZ4 frame format, which encode the content size, but this
+;; is for another day.
+;;
+(func $lz4BlockEncode (export "lz4BlockEncode")
+ (param $inPtr i32) ;; pointer to start of input buffer
+ (param $ilen i32) ;; size of input buffer
+ (param $outPtr i32) ;; pointer to start of output buffer
+ (result i32)
+ (local $hashPtrBeg i32) ;; start of hash buffer
+ (local $hashPtr i32) ;; current hash entry
+ (local $anchorPtr i32) ;; anchor position in input
+ (local $inPtrEnd1 i32) ;; point in input at which match-finding must cease
+ (local $inPtrEnd2 i32) ;; point in input at which match-length finding must cease
+ (local $inPtrEnd i32) ;; point to end of input
+ (local $outPtrBeg i32) ;; start of output buffer
+ (local $refPtr i32) ;; start of match in input
+ (local $seq32 i32) ;; 4-byte value from current input position
+ (local $llen i32) ;; length of found literals
+ (local $moffset i32) ;; offset to found match from current input position
+ (local $mlen i32) ;; length of found match
+ local.get $ilen ;; empty input = empty output
+ i32.const 0x7E000000 ;; max input size: 0x7E000000
+ i32.gt_u
+ if
+ i32.const 0
+ return
+ end
+ local.get $ilen ;; "blocks < 13 bytes cannot be compressed"
+ i32.const 13
+ i32.lt_u
+ if
+ i32.const 0
+ return
+ end
+ call $getLinearMemoryOffset ;; hash table is at start of usable memory
+ local.set $hashPtrBeg
+ local.get $inPtr
+ local.tee $anchorPtr
+ local.get $ilen
+ i32.add
+ local.tee $inPtrEnd
+ i32.const -5 ;; "The last 5 bytes are always literals."
+ i32.add
+ local.tee $inPtrEnd2
+ i32.const -7 ;; "The last match must start at least 12 bytes before end of block"
+ i32.add
+ local.set $inPtrEnd1
+ local.get $outPtr
+ local.set $outPtrBeg
+ ;;
+ ;; sequence processing loop
+ ;;
+ block $noMoreSequence loop $nextSequence
+ local.get $inPtr
+ local.get $inPtrEnd1
+ i32.ge_u ;; 5 or less bytes left?
+ br_if $noMoreSequence
+ local.get $inPtr ;; first sequence of 3 bytes before match-finding loop
+ i32.load8_u
+ i32.const 8
+ i32.shl
+ local.get $inPtr
+ i32.load8_u offset=1
+ i32.const 16
+ i32.shl
+ i32.or
+ local.get $inPtr
+ i32.load8_u offset=2
+ i32.const 24
+ i32.shl
+ i32.or
+ local.set $seq32
+ ;;
+ ;; match-finding loop
+ ;;
+ loop $findMatch block $noMatchFound
+ local.get $inPtr
+ local.get $inPtrEnd2
+ i32.gt_u ;; less than 12 bytes left?
+ br_if $noMoreSequence
+ local.get $seq32 ;; update last byte of current sequence
+ i32.const 8
+ i32.shr_u
+ local.get $inPtr
+ i32.load8_u offset=3
+ i32.const 24
+ i32.shl
+ i32.or
+ local.tee $seq32
+ i32.const 0x9E3779B1 ;; compute 16-bit hash
+ i32.mul
+ i32.const 16
+ i32.shr_u ;; hash value is at top of stack
+ i32.const 2 ;; lookup refPtr at hash entry
+ i32.shl
+ local.get $hashPtrBeg
+ i32.add
+ local.tee $hashPtr
+ i32.load
+ local.set $refPtr
+ local.get $hashPtr ;; update hash entry with inPtr
+ local.get $inPtr
+ i32.store
+ local.get $inPtr
+ local.get $refPtr
+ i32.sub
+ local.tee $moffset ;; remember match offset, we will need it in case of match
+ i32.const 0xFFFF
+ i32.gt_s ;; match offset > 65535 = unusable match
+ br_if $noMatchFound
+ ;;
+ ;; confirm match: different sequences can yield same hash
+ ;; compare-branch each byte to potentially save memory read ops
+ ;;
+ local.get $seq32 ;; byte 0
+ i32.const 0xFF
+ i32.and
+ local.get $refPtr
+ i32.load8_u
+ i32.ne ;; refPtr[0] !== inPtr[0]
+ br_if $noMatchFound
+ local.get $seq32 ;; byte 1
+ i32.const 8
+ i32.shr_u
+ i32.const 0xFF
+ i32.and
+ local.get $refPtr
+ i32.load8_u offset=1
+ i32.ne
+ br_if $noMatchFound ;; refPtr[1] !== inPtr[1]
+ local.get $seq32 ;; byte 2
+ i32.const 16
+ i32.shr_u
+ i32.const 0xFF
+ i32.and
+ local.get $refPtr
+ i32.load8_u offset=2
+ i32.ne ;; refPtr[2] !== inPtr[2]
+ br_if $noMatchFound
+ local.get $seq32 ;; byte 3
+ i32.const 24
+ i32.shr_u
+ i32.const 0xFF
+ i32.and
+ local.get $refPtr
+ i32.load8_u offset=3
+ i32.ne ;; refPtr[3] !== inPtr[3]
+ br_if $noMatchFound
+ ;;
+ ;; a valid match has been found at this point
+ ;;
+ local.get $inPtr ;; compute length of literals
+ local.get $anchorPtr
+ i32.sub
+ local.set $llen
+ local.get $inPtr ;; find match length
+ i32.const 4 ;; skip over confirmed 4-byte match
+ i32.add
+ local.set $inPtr
+ local.get $refPtr
+ i32.const 4
+ i32.add
+ local.tee $mlen ;; remember refPtr to later compute match length
+ local.set $refPtr
+ block $endOfMatch loop ;; scan input buffer until match ends
+ local.get $inPtr
+ local.get $inPtrEnd2
+ i32.ge_u
+ br_if $endOfMatch
+ local.get $inPtr
+ i32.load8_u
+ local.get $refPtr
+ i32.load8_u
+ i32.ne
+ br_if $endOfMatch
+ local.get $inPtr
+ i32.const 1
+ i32.add
+ local.set $inPtr
+ local.get $refPtr
+ i32.const 1
+ i32.add
+ local.set $refPtr
+ br 0
+ end end $endOfMatch
+ ;; encode token
+ local.get $outPtr ;; output token
+ local.get $llen
+ local.get $refPtr
+ local.get $mlen
+ i32.sub
+ local.tee $mlen
+ call $writeToken
+ local.get $outPtr
+ i32.const 1
+ i32.add
+ local.set $outPtr
+ local.get $llen ;; encode/write length of literals if needed
+ i32.const 15
+ i32.ge_s
+ if
+ local.get $outPtr
+ local.get $llen
+ call $writeLength
+ local.set $outPtr
+ end
+ ;; copy literals
+ local.get $outPtr
+ local.get $anchorPtr
+ local.get $llen
+ call $copy
+ local.get $outPtr
+ local.get $llen
+ i32.add
+ local.set $outPtr
+ ;; encode match offset
+ local.get $outPtr
+ local.get $moffset
+ i32.store8
+ local.get $outPtr
+ local.get $moffset
+ i32.const 8
+ i32.shr_u
+ i32.store8 offset=1
+ local.get $outPtr
+ i32.const 2
+ i32.add
+ local.set $outPtr
+ local.get $mlen ;; encode/write length of match if needed
+ i32.const 15
+ i32.ge_s
+ if
+ local.get $outPtr
+ local.get $mlen
+ call $writeLength
+ local.set $outPtr
+ end
+ local.get $inPtr ;; advance anchor to current position
+ local.set $anchorPtr
+ br $nextSequence
+ end $noMatchFound
+ local.get $inPtr ;; no match found: advance to next byte
+ i32.const 1
+ i32.add
+ local.set $inPtr
+ br $findMatch end ;; match offset > 65535 = unusable match
+ end end $noMoreSequence
+ ;;
+ ;; generate last (match-less) sequence if compression succeeded
+ ;;
+ local.get $outPtr
+ local.get $outPtrBeg
+ i32.eq
+ if
+ i32.const 0
+ return
+ end
+ local.get $outPtr
+ local.get $inPtrEnd
+ local.get $anchorPtr
+ i32.sub
+ local.tee $llen
+ i32.const 0
+ call $writeToken
+ local.get $outPtr
+ i32.const 1
+ i32.add
+ local.set $outPtr
+ local.get $llen
+ i32.const 15
+ i32.ge_u
+ if
+ local.get $outPtr
+ local.get $llen
+ call $writeLength
+ local.set $outPtr
+ end
+ local.get $outPtr
+ local.get $anchorPtr
+ local.get $llen
+ call $copy
+ local.get $outPtr ;; return number of written bytes
+ local.get $llen
+ i32.add
+ local.get $outPtrBeg
+ i32.sub
+)
+
+;;
+;; unsigned int lz4BlockDecode(
+;; unsigned int inPtr,
+;; unsigned int ilen
+;; unsigned int outPtr
+;; )
+;;
+;; Reference:
+;; https://github.com/lz4/lz4/blob/dev/doc/lz4_Block_format.md
+;;
+(func (export "lz4BlockDecode")
+ (param $inPtr0 i32) ;; start of input buffer
+ (param $ilen i32) ;; length of input buffer
+ (param $outPtr0 i32) ;; start of output buffer
+ (result i32)
+ (local $inPtr i32) ;; current position in input buffer
+ (local $inPtrEnd i32) ;; end of input buffer
+ (local $outPtr i32) ;; current position in output buffer
+ (local $matchPtr i32) ;; position of current match
+ (local $token i32) ;; sequence token
+ (local $clen i32) ;; number of bytes to copy
+ (local $_ i32) ;; general purpose variable
+ local.get $ilen ;; if ( ilen == 0 ) { return 0; }
+ i32.eqz
+ if
+ i32.const 0
+ return
+ end
+ local.get $inPtr0
+ local.tee $inPtr ;; current position in input buffer
+ local.get $ilen
+ i32.add
+ local.set $inPtrEnd
+ local.get $outPtr0 ;; start of output buffer
+ local.set $outPtr ;; current position in output buffer
+ block $noMoreSequence loop ;; iterate through all sequences
+ local.get $inPtr
+ local.get $inPtrEnd
+ i32.ge_u
+ br_if $noMoreSequence ;; break when nothing left to read in input buffer
+ local.get $inPtr ;; read token -- consume one byte
+ i32.load8_u
+ local.get $inPtr
+ i32.const 1
+ i32.add
+ local.set $inPtr
+ local.tee $token ;; extract length of literals from token
+ i32.const 4
+ i32.shr_u
+ local.tee $clen ;; consume extra length bytes if present
+ i32.eqz
+ if else
+ local.get $clen
+ i32.const 15
+ i32.eq
+ if loop
+ local.get $inPtr
+ i32.load8_u
+ local.get $inPtr
+ i32.const 1
+ i32.add
+ local.set $inPtr
+ local.tee $_
+ local.get $clen
+ i32.add
+ local.set $clen
+ local.get $_
+ i32.const 255
+ i32.eq
+ br_if 0
+ end end
+ local.get $outPtr ;; copy literals to output buffer
+ local.get $inPtr
+ local.get $clen
+ call $copy
+ local.get $outPtr ;; advance output buffer pointer past copy
+ local.get $clen
+ i32.add
+ local.set $outPtr
+ local.get $clen ;; advance input buffer pointer past literals
+ local.get $inPtr
+ i32.add
+ local.tee $inPtr
+ local.get $inPtrEnd ;; exit if this is the last sequence
+ i32.eq
+ br_if $noMoreSequence
+ end
+ local.get $outPtr ;; read match offset
+ local.get $inPtr
+ i32.load8_u
+ local.get $inPtr
+ i32.load8_u offset=1
+ i32.const 8
+ i32.shl
+ i32.or
+ i32.sub
+ local.tee $matchPtr
+ local.get $outPtr ;; match position can't be outside input buffer bounds
+ i32.eq
+ br_if $noMoreSequence
+ local.get $matchPtr
+ local.get $inPtrEnd
+ i32.lt_u
+ br_if $noMoreSequence
+ local.get $inPtr ;; advance input pointer past match offset bytes
+ i32.const 2
+ i32.add
+ local.set $inPtr
+ local.get $token ;; extract length of match from token
+ i32.const 15
+ i32.and
+ i32.const 4
+ i32.add
+ local.tee $clen
+ i32.const 19 ;; consume extra length bytes if present
+ i32.eq
+ if loop
+ local.get $inPtr
+ i32.load8_u
+ local.get $inPtr
+ i32.const 1
+ i32.add
+ local.set $inPtr
+ local.tee $_
+ local.get $clen
+ i32.add
+ local.set $clen
+ local.get $_
+ i32.const 255
+ i32.eq
+ br_if 0
+ end end
+ local.get $outPtr ;; copy match to output buffer
+ local.get $matchPtr
+ local.get $clen
+ call $copy
+ local.get $clen ;; advance output buffer pointer past copy
+ local.get $outPtr
+ i32.add
+ local.set $outPtr
+ br 0
+ end end $noMoreSequence
+ local.get $outPtr ;; return number of written bytes
+ local.get $outPtr0
+ i32.sub
+)
+
+;;
+;; Private functions
+;;
+
+;;
+;; Encode a sequence token
+;;
+;; Reference documentation:
+;; https://github.com/lz4/lz4/blob/dev/doc/lz4_Block_format.md
+;;
+(func $writeToken
+ (param $outPtr i32)
+ (param $llen i32)
+ (param $mlen i32)
+ local.get $outPtr
+ local.get $llen
+ i32.const 15
+ local.get $llen
+ i32.const 15
+ i32.lt_u
+ select
+ i32.const 4
+ i32.shl
+ local.get $mlen
+ i32.const 15
+ local.get $mlen
+ i32.const 15
+ i32.lt_u
+ select
+ i32.or
+ i32.store8
+)
+
+;;
+;; Encode and output length bytes. The return value is the pointer following
+;; the last byte written.
+;;
+;; Reference documentation:
+;; https://github.com/lz4/lz4/blob/dev/doc/lz4_Block_format.md
+;;
+(func $writeLength
+ (param $outPtr i32)
+ (param $len i32)
+ (result i32)
+ local.get $len
+ i32.const 15
+ i32.sub
+ local.set $len
+ loop
+ local.get $outPtr
+ local.get $len
+ i32.const 255
+ local.get $len
+ i32.const 255
+ i32.lt_u
+ select
+ i32.store8
+ local.get $outPtr
+ i32.const 1
+ i32.add
+ local.set $outPtr
+ local.get $len
+ i32.const 255
+ i32.sub
+ local.tee $len
+ i32.const 0
+ i32.ge_s
+ br_if 0
+ end
+ local.get $outPtr
+)
+
+;;
+;; Copy n bytes from source to destination.
+;;
+;; It is overlap-safe only from left-to-right -- which is only what is
+;; required in the current module.
+;;
+(func $copy
+ (param $dst i32)
+ (param $src i32)
+ (param $len i32)
+ block $lessThan8 loop
+ local.get $len
+ i32.const 8
+ i32.lt_u
+ br_if $lessThan8
+ local.get $dst
+ local.get $src
+ i32.load8_u
+ i32.store8
+ local.get $dst
+ local.get $src
+ i32.load8_u offset=1
+ i32.store8 offset=1
+ local.get $dst
+ local.get $src
+ i32.load8_u offset=2
+ i32.store8 offset=2
+ local.get $dst
+ local.get $src
+ i32.load8_u offset=3
+ i32.store8 offset=3
+ local.get $dst
+ local.get $src
+ i32.load8_u offset=4
+ i32.store8 offset=4
+ local.get $dst
+ local.get $src
+ i32.load8_u offset=5
+ i32.store8 offset=5
+ local.get $dst
+ local.get $src
+ i32.load8_u offset=6
+ i32.store8 offset=6
+ local.get $dst
+ local.get $src
+ i32.load8_u offset=7
+ i32.store8 offset=7
+ local.get $dst
+ i32.const 8
+ i32.add
+ local.set $dst
+ local.get $src
+ i32.const 8
+ i32.add
+ local.set $src
+ local.get $len
+ i32.const -8
+ i32.add
+ local.set $len
+ br 0
+ end end $lessThan8
+ local.get $len
+ i32.const 4
+ i32.ge_u
+ if
+ local.get $dst
+ local.get $src
+ i32.load8_u
+ i32.store8
+ local.get $dst
+ local.get $src
+ i32.load8_u offset=1
+ i32.store8 offset=1
+ local.get $dst
+ local.get $src
+ i32.load8_u offset=2
+ i32.store8 offset=2
+ local.get $dst
+ local.get $src
+ i32.load8_u offset=3
+ i32.store8 offset=3
+ local.get $dst
+ i32.const 4
+ i32.add
+ local.set $dst
+ local.get $src
+ i32.const 4
+ i32.add
+ local.set $src
+ local.get $len
+ i32.const -4
+ i32.add
+ local.set $len
+ end
+ local.get $len
+ i32.const 2
+ i32.ge_u
+ if
+ local.get $dst
+ local.get $src
+ i32.load8_u
+ i32.store8
+ local.get $dst
+ local.get $src
+ i32.load8_u offset=1
+ i32.store8 offset=1
+ local.get $dst
+ i32.const 2
+ i32.add
+ local.set $dst
+ local.get $src
+ i32.const 2
+ i32.add
+ local.set $src
+ local.get $len
+ i32.const -2
+ i32.add
+ local.set $len
+ end
+ local.get $len
+ i32.eqz
+ if else
+ local.get $dst
+ local.get $src
+ i32.load8_u
+ i32.store8
+ end
+)
+
+;;
+;; module end
+;;
+)
diff --git a/src/lib/publicsuffixlist/publicsuffixlist.js b/src/lib/publicsuffixlist/publicsuffixlist.js
new file mode 100644
index 0000000..6483c89
--- /dev/null
+++ b/src/lib/publicsuffixlist/publicsuffixlist.js
@@ -0,0 +1,641 @@
+/*******************************************************************************
+
+ publicsuffixlist.js - an efficient javascript implementation to deal with
+ Mozilla Foundation's Public Suffix List <http://publicsuffix.org/list/>
+
+ Copyright (C) 2013-present Raymond Hill
+
+ License: pick the one which suits you:
+ GPL v3 see <https://www.gnu.org/licenses/gpl.html>
+ APL v2 see <http://www.apache.org/licenses/LICENSE-2.0>
+
+*/
+
+/*! Home: https://github.com/gorhill/publicsuffixlist.js -- GPLv3 APLv2 */
+
+/* globals WebAssembly, exports:true, module */
+
+'use strict';
+
+/*******************************************************************************
+
+ Reference:
+ https://publicsuffix.org/list/
+
+ Excerpt:
+
+ > Algorithm
+ >
+ > 1. Match domain against all rules and take note of the matching ones.
+ > 2. If no rules match, the prevailing rule is "*".
+ > 3. If more than one rule matches, the prevailing rule is the one which
+ is an exception rule.
+ > 4. If there is no matching exception rule, the prevailing rule is the
+ one with the most labels.
+ > 5. If the prevailing rule is a exception rule, modify it by removing
+ the leftmost label.
+ > 6. The public suffix is the set of labels from the domain which match
+ the labels of the prevailing rule, using the matching algorithm above.
+ > 7. The registered or registrable domain is the public suffix plus one
+ additional label.
+
+*/
+
+/******************************************************************************/
+
+export default (function() {
+// >>>>>>>> start of anonymous namespace
+
+/*******************************************************************************
+
+ Tree encoding in array buffer:
+
+ Node:
+ + u8: length of char data
+ + u8: flags => bit 0: is_publicsuffix, bit 1: is_exception
+ + u16: length of array of children
+ + u32: char data or offset to char data
+ + u32: offset to array of children
+ = 12 bytes
+
+ More bits in flags could be used; for example:
+ - to distinguish private suffixes
+
+*/
+
+ // i32 / i8
+const HOSTNAME_SLOT = 0; // jshint ignore:line
+const LABEL_INDICES_SLOT = 256; // -- / 256 (256/2 => 128 labels max)
+const RULES_PTR_SLOT = 100; // 100 / 400 (400-256=144 => 144>128)
+const SUFFIX_NOT_FOUND_SLOT = 399; // -- / 399 (safe, see above)
+const CHARDATA_PTR_SLOT = 101; // 101 / 404
+const EMPTY_STRING = '';
+const SELFIE_MAGIC = 2;
+
+let wasmMemory;
+let pslBuffer32;
+let pslBuffer8;
+let pslByteLength = 0;
+let hostnameArg = EMPTY_STRING;
+
+/******************************************************************************/
+
+const fireChangedEvent = function() {
+ if ( typeof window !== 'object' ) { return; }
+ if ( window instanceof Object === false ) { return; }
+ if ( window.dispatchEvent instanceof Function === false ) { return; }
+ if ( window.CustomEvent instanceof Function === false ) { return; }
+ window.dispatchEvent(new CustomEvent('publicSuffixListChanged'));
+};
+
+/******************************************************************************/
+
+const allocateBuffers = function(byteLength) {
+ pslByteLength = byteLength + 3 & ~3;
+ if (
+ pslBuffer32 !== undefined &&
+ pslBuffer32.byteLength >= pslByteLength
+ ) {
+ return;
+ }
+ if ( wasmMemory !== undefined ) {
+ const newPageCount = pslByteLength + 0xFFFF >>> 16;
+ const curPageCount = wasmMemory.buffer.byteLength >>> 16;
+ const delta = newPageCount - curPageCount;
+ if ( delta > 0 ) {
+ wasmMemory.grow(delta);
+ pslBuffer32 = new Uint32Array(wasmMemory.buffer);
+ pslBuffer8 = new Uint8Array(wasmMemory.buffer);
+ }
+ } else {
+ pslBuffer8 = new Uint8Array(pslByteLength);
+ pslBuffer32 = new Uint32Array(pslBuffer8.buffer);
+ }
+ hostnameArg = EMPTY_STRING;
+ pslBuffer8[LABEL_INDICES_SLOT] = 0;
+};
+
+/******************************************************************************/
+
+// Parse and set a UTF-8 text-based suffix list. Format is same as found at:
+// http://publicsuffix.org/list/
+//
+// `toAscii` is a converter from unicode to punycode. Required since the
+// Public Suffix List contains unicode characters.
+// Suggestion: use <https://github.com/bestiejs/punycode.js>
+
+const parse = function(text, toAscii) {
+ // Use short property names for better minifying results
+ const rootRule = {
+ l: EMPTY_STRING, // l => label
+ f: 0, // f => flags
+ c: undefined // c => children
+ };
+
+ // Tree building
+ {
+ const compareLabels = function(a, b) {
+ let n = a.length;
+ let d = n - b.length;
+ if ( d !== 0 ) { return d; }
+ for ( let i = 0; i < n; i++ ) {
+ d = a.charCodeAt(i) - b.charCodeAt(i);
+ if ( d !== 0 ) { return d; }
+ }
+ return 0;
+ };
+
+ const addToTree = function(rule, exception) {
+ let node = rootRule;
+ let end = rule.length;
+ while ( end > 0 ) {
+ const beg = rule.lastIndexOf('.', end - 1);
+ const label = rule.slice(beg + 1, end);
+ end = beg;
+
+ if ( Array.isArray(node.c) === false ) {
+ const child = { l: label, f: 0, c: undefined };
+ node.c = [ child ];
+ node = child;
+ continue;
+ }
+
+ let left = 0;
+ let right = node.c.length;
+ while ( left < right ) {
+ const i = left + right >>> 1;
+ const d = compareLabels(label, node.c[i].l);
+ if ( d < 0 ) {
+ right = i;
+ if ( right === left ) {
+ const child = {
+ l: label,
+ f: 0,
+ c: undefined
+ };
+ node.c.splice(left, 0, child);
+ node = child;
+ break;
+ }
+ continue;
+ }
+ if ( d > 0 ) {
+ left = i + 1;
+ if ( left === right ) {
+ const child = {
+ l: label,
+ f: 0,
+ c: undefined
+ };
+ node.c.splice(right, 0, child);
+ node = child;
+ break;
+ }
+ continue;
+ }
+ /* d === 0 */
+ node = node.c[i];
+ break;
+ }
+ }
+ node.f |= 0b01;
+ if ( exception ) {
+ node.f |= 0b10;
+ }
+ };
+
+ // 2. If no rules match, the prevailing rule is "*".
+ addToTree('*', false);
+
+ const mustPunycode = /[^a-z0-9.-]/;
+ const textEnd = text.length;
+ let lineBeg = 0;
+
+ while ( lineBeg < textEnd ) {
+ let lineEnd = text.indexOf('\n', lineBeg);
+ if ( lineEnd === -1 ) {
+ lineEnd = text.indexOf('\r', lineBeg);
+ if ( lineEnd === -1 ) {
+ lineEnd = textEnd;
+ }
+ }
+ let line = text.slice(lineBeg, lineEnd).trim();
+ lineBeg = lineEnd + 1;
+
+ // Ignore comments
+ const pos = line.indexOf('//');
+ if ( pos !== -1 ) {
+ line = line.slice(0, pos);
+ }
+
+ // Ignore surrounding whitespaces
+ line = line.trim();
+ if ( line.length === 0 ) { continue; }
+
+ const exception = line.charCodeAt(0) === 0x21 /* '!' */;
+ if ( exception ) {
+ line = line.slice(1);
+ }
+
+ if ( mustPunycode.test(line) ) {
+ line = toAscii(line.toLowerCase());
+ }
+
+ addToTree(line, exception);
+ }
+ }
+
+ {
+ const labelToOffsetMap = new Map();
+ const treeData = [];
+ const charData = [];
+
+ const allocate = function(n) {
+ const ibuf = treeData.length;
+ for ( let i = 0; i < n; i++ ) {
+ treeData.push(0);
+ }
+ return ibuf;
+ };
+
+ const storeNode = function(ibuf, node) {
+ const nChars = node.l.length;
+ const nChildren = node.c !== undefined
+ ? node.c.length
+ : 0;
+ treeData[ibuf+0] = nChildren << 16 | node.f << 8 | nChars;
+ // char data
+ if ( nChars <= 4 ) {
+ let v = 0;
+ if ( nChars > 0 ) {
+ v |= node.l.charCodeAt(0);
+ if ( nChars > 1 ) {
+ v |= node.l.charCodeAt(1) << 8;
+ if ( nChars > 2 ) {
+ v |= node.l.charCodeAt(2) << 16;
+ if ( nChars > 3 ) {
+ v |= node.l.charCodeAt(3) << 24;
+ }
+ }
+ }
+ }
+ treeData[ibuf+1] = v;
+ } else {
+ let offset = labelToOffsetMap.get(node.l);
+ if ( offset === undefined ) {
+ offset = charData.length;
+ for ( let i = 0; i < nChars; i++ ) {
+ charData.push(node.l.charCodeAt(i));
+ }
+ labelToOffsetMap.set(node.l, offset);
+ }
+ treeData[ibuf+1] = offset;
+ }
+ // child nodes
+ if ( Array.isArray(node.c) === false ) {
+ treeData[ibuf+2] = 0;
+ return;
+ }
+
+ const iarray = allocate(nChildren * 3);
+ treeData[ibuf+2] = iarray;
+ for ( let i = 0; i < nChildren; i++ ) {
+ storeNode(iarray + i * 3, node.c[i]);
+ }
+ };
+
+ // First 512 bytes are reserved for internal use
+ allocate(512 >> 2);
+
+ const iRootRule = allocate(3);
+ storeNode(iRootRule, rootRule);
+ treeData[RULES_PTR_SLOT] = iRootRule;
+
+ const iCharData = treeData.length << 2;
+ treeData[CHARDATA_PTR_SLOT] = iCharData;
+
+ const byteLength = (treeData.length << 2) + (charData.length + 3 & ~3);
+ allocateBuffers(byteLength);
+ pslBuffer32.set(treeData);
+ pslBuffer8.set(charData, treeData.length << 2);
+ }
+
+ fireChangedEvent();
+};
+
+/******************************************************************************/
+
+const setHostnameArg = function(hostname) {
+ const buf = pslBuffer8;
+ if ( hostname === hostnameArg ) { return buf[LABEL_INDICES_SLOT]; }
+ if ( hostname === null || hostname.length === 0 ) {
+ hostnameArg = EMPTY_STRING;
+ return (buf[LABEL_INDICES_SLOT] = 0);
+ }
+ hostname = hostname.toLowerCase();
+ hostnameArg = hostname;
+ let n = hostname.length;
+ if ( n > 255 ) { n = 255; }
+ buf[LABEL_INDICES_SLOT] = n;
+ let i = n;
+ let j = LABEL_INDICES_SLOT + 1;
+ while ( i-- ) {
+ const c = hostname.charCodeAt(i);
+ if ( c === 0x2E /* '.' */ ) {
+ buf[j+0] = i + 1;
+ buf[j+1] = i;
+ j += 2;
+ }
+ buf[i] = c;
+ }
+ buf[j] = 0;
+ return n;
+};
+
+/******************************************************************************/
+
+// Returns an offset to the start of the public suffix.
+//
+// WASM-able, because no information outside the buffer content is required.
+
+const getPublicSuffixPosJS = function() {
+ const buf8 = pslBuffer8;
+ const buf32 = pslBuffer32;
+ const iCharData = buf32[CHARDATA_PTR_SLOT];
+
+ let iNode = pslBuffer32[RULES_PTR_SLOT];
+ let cursorPos = -1;
+ let iLabel = LABEL_INDICES_SLOT;
+
+ // Label-lookup loop
+ for (;;) {
+ // Extract label indices
+ const labelBeg = buf8[iLabel+1];
+ const labelLen = buf8[iLabel+0] - labelBeg;
+ // Match-lookup loop: binary search
+ let r = buf32[iNode+0] >>> 16;
+ if ( r === 0 ) { break; }
+ const iCandidates = buf32[iNode+2];
+ let l = 0;
+ let iFound = 0;
+ while ( l < r ) {
+ const iCandidate = l + r >>> 1;
+ const iCandidateNode = iCandidates + iCandidate + (iCandidate << 1);
+ const candidateLen = buf32[iCandidateNode+0] & 0x000000FF;
+ let d = labelLen - candidateLen;
+ if ( d === 0 ) {
+ const iCandidateChar = candidateLen <= 4
+ ? iCandidateNode + 1 << 2
+ : iCharData + buf32[iCandidateNode+1];
+ for ( let i = 0; i < labelLen; i++ ) {
+ d = buf8[labelBeg+i] - buf8[iCandidateChar+i];
+ if ( d !== 0 ) { break; }
+ }
+ }
+ if ( d < 0 ) {
+ r = iCandidate;
+ } else if ( d > 0 ) {
+ l = iCandidate + 1;
+ } else /* if ( d === 0 ) */ {
+ iFound = iCandidateNode;
+ break;
+ }
+ }
+ // 2. If no rules match, the prevailing rule is "*".
+ if ( iFound === 0 ) {
+ if ( buf32[iCandidates + 1] !== 0x2A /* '*' */ ) { break; }
+ buf8[SUFFIX_NOT_FOUND_SLOT] = 1;
+ iFound = iCandidates;
+ }
+ iNode = iFound;
+ // 5. If the prevailing rule is a exception rule, modify it by
+ // removing the leftmost label.
+ if ( (buf32[iNode+0] & 0x00000200) !== 0 ) {
+ if ( iLabel > LABEL_INDICES_SLOT ) {
+ return iLabel - 2;
+ }
+ break;
+ }
+ if ( (buf32[iNode+0] & 0x00000100) !== 0 ) {
+ cursorPos = iLabel;
+ }
+ if ( labelBeg === 0 ) { break; }
+ iLabel += 2;
+ }
+
+ return cursorPos;
+};
+
+let getPublicSuffixPosWASM;
+let getPublicSuffixPos = getPublicSuffixPosJS;
+
+/******************************************************************************/
+
+const getPublicSuffix = function(hostname) {
+ if ( pslBuffer32 === undefined ) { return EMPTY_STRING; }
+
+ const hostnameLen = setHostnameArg(hostname);
+ const buf8 = pslBuffer8;
+ if ( hostnameLen === 0 || buf8[0] === 0x2E /* '.' */ ) {
+ return EMPTY_STRING;
+ }
+
+ const cursorPos = getPublicSuffixPos();
+ if ( cursorPos === -1 ) {
+ return EMPTY_STRING;
+ }
+
+ const beg = buf8[cursorPos + 1];
+ return beg === 0 ? hostnameArg : hostnameArg.slice(beg);
+};
+
+/******************************************************************************/
+
+const getDomain = function(hostname) {
+ if ( pslBuffer32 === undefined ) { return EMPTY_STRING; }
+
+ const hostnameLen = setHostnameArg(hostname);
+ const buf8 = pslBuffer8;
+ if ( hostnameLen === 0 || buf8[0] === 0x2E /* '.' */ ) {
+ return EMPTY_STRING;
+ }
+
+ const cursorPos = getPublicSuffixPos();
+ if ( cursorPos === -1 || buf8[cursorPos + 1] === 0 ) {
+ return EMPTY_STRING;
+ }
+
+ // 7. The registered or registrable domain is the public suffix plus one
+ // additional label.
+ const beg = buf8[cursorPos + 3];
+ return beg === 0 ? hostnameArg : hostnameArg.slice(beg);
+};
+
+/******************************************************************************/
+
+const suffixInPSL = function(hostname) {
+ if ( pslBuffer32 === undefined ) { return false; }
+
+ const hostnameLen = setHostnameArg(hostname);
+ const buf8 = pslBuffer8;
+ if ( hostnameLen === 0 || buf8[0] === 0x2E /* '.' */ ) {
+ return false;
+ }
+
+ buf8[SUFFIX_NOT_FOUND_SLOT] = 0;
+ const cursorPos = getPublicSuffixPos();
+ return cursorPos !== -1 &&
+ buf8[cursorPos + 1] === 0 &&
+ buf8[SUFFIX_NOT_FOUND_SLOT] !== 1;
+};
+
+/******************************************************************************/
+
+const toSelfie = function(encoder) {
+ if ( pslBuffer8 === undefined ) { return ''; }
+ if ( encoder instanceof Object ) {
+ const bufferStr = encoder.encode(pslBuffer8.buffer, pslByteLength);
+ return `${SELFIE_MAGIC}\t${bufferStr}`;
+ }
+ return {
+ magic: SELFIE_MAGIC,
+ buf32: Array.from(
+ new Uint32Array(pslBuffer8.buffer, 0, pslByteLength >>> 2)
+ ),
+ };
+};
+
+const fromSelfie = function(selfie, decoder) {
+ let byteLength = 0;
+ if (
+ typeof selfie === 'string' &&
+ selfie.length !== 0 &&
+ decoder instanceof Object
+ ) {
+ const pos = selfie.indexOf('\t');
+ if ( pos === -1 || selfie.slice(0, pos) !== `${SELFIE_MAGIC}` ) {
+ return false;
+ }
+ const bufferStr = selfie.slice(pos + 1);
+ byteLength = decoder.decodeSize(bufferStr);
+ if ( byteLength === 0 ) { return false; }
+ allocateBuffers(byteLength);
+ decoder.decode(bufferStr, pslBuffer8.buffer);
+ } else if (
+ selfie instanceof Object &&
+ selfie.magic === SELFIE_MAGIC &&
+ Array.isArray(selfie.buf32)
+ ) {
+ byteLength = selfie.buf32.length << 2;
+ allocateBuffers(byteLength);
+ pslBuffer32.set(selfie.buf32);
+ } else {
+ return false;
+ }
+
+ // Important!
+ hostnameArg = EMPTY_STRING;
+ pslBuffer8[LABEL_INDICES_SLOT] = 0;
+
+ fireChangedEvent();
+
+ return true;
+};
+
+/******************************************************************************/
+
+// The WASM module is entirely optional, the JS implementation will be
+// used should the WASM module be unavailable for whatever reason.
+
+const enableWASM = (( ) => {
+ let wasmPromise;
+
+ const getWasmInstance = async function(wasmModuleFetcher, path) {
+ if ( typeof WebAssembly !== 'object' ) { return false; }
+ // The wasm code will work only if CPU is natively little-endian,
+ // as we use native uint32 array in our js code.
+ const uint32s = new Uint32Array(1);
+ const uint8s = new Uint8Array(uint32s.buffer);
+ uint32s[0] = 1;
+ if ( uint8s[0] !== 1 ) { return false; }
+
+ try {
+ const module = await wasmModuleFetcher(`${path}publicsuffixlist`);
+ if ( module instanceof WebAssembly.Module === false ) {
+ return false;
+ }
+ const pageCount = pslBuffer8 !== undefined
+ ? pslBuffer8.byteLength + 0xFFFF >>> 16
+ : 1;
+ const memory = new WebAssembly.Memory({ initial: pageCount });
+ const instance = await WebAssembly.instantiate(module, {
+ imports: { memory }
+ });
+ if ( instance instanceof WebAssembly.Instance === false ) {
+ return false;
+ }
+ const curPageCount = memory.buffer.byteLength >>> 16;
+ const newPageCount = pslBuffer8 !== undefined
+ ? pslBuffer8.byteLength + 0xFFFF >>> 16
+ : 0;
+ if ( newPageCount > curPageCount ) {
+ memory.grow(newPageCount - curPageCount);
+ }
+ if ( pslBuffer32 !== undefined ) {
+ const buf8 = new Uint8Array(memory.buffer);
+ const buf32 = new Uint32Array(memory.buffer);
+ buf32.set(pslBuffer32);
+ pslBuffer8 = buf8;
+ pslBuffer32 = buf32;
+ }
+ wasmMemory = memory;
+ getPublicSuffixPosWASM = instance.exports.getPublicSuffixPos;
+ getPublicSuffixPos = getPublicSuffixPosWASM;
+ return true;
+ } catch(reason) {
+ console.info(reason);
+ }
+ return false;
+ };
+
+ return async function(wasmModuleFetcher, path) {
+ if ( getPublicSuffixPosWASM instanceof Function ) { return true; }
+ if ( wasmPromise instanceof Promise === false ) {
+ wasmPromise = getWasmInstance(wasmModuleFetcher, path);
+ }
+ return wasmPromise;
+ };
+})();
+
+const disableWASM = function() {
+ if ( getPublicSuffixPosWASM instanceof Function ) {
+ getPublicSuffixPos = getPublicSuffixPosJS;
+ getPublicSuffixPosWASM = undefined;
+ }
+ if ( wasmMemory === undefined ) { return; }
+ if ( pslBuffer32 !== undefined ) {
+ const buf8 = new Uint8Array(pslByteLength);
+ const buf32 = new Uint32Array(buf8.buffer);
+ buf32.set(pslBuffer32);
+ pslBuffer8 = buf8;
+ pslBuffer32 = buf32;
+ }
+ wasmMemory = undefined;
+};
+
+/******************************************************************************/
+
+return ({
+ version: '2.0',
+ parse,
+ getDomain,
+ suffixInPSL,
+ getPublicSuffix,
+ toSelfie, fromSelfie,
+ disableWASM, enableWASM,
+});
+
+/******************************************************************************/
+
+// <<<<<<<< end of anonymous namespace
+})();
diff --git a/src/lib/publicsuffixlist/wasm/README.md b/src/lib/publicsuffixlist/wasm/README.md
new file mode 100644
index 0000000..5c1c483
--- /dev/null
+++ b/src/lib/publicsuffixlist/wasm/README.md
@@ -0,0 +1,29 @@
+### For code reviewers
+
+All `wasm` files in that directory where created by compiling the
+corresponding `wat` file using the command (using
+`publicsuffixlist.wat`/`publicsuffixlist.wasm` as example):
+
+ wat2wasm publicsuffixlist.wat -o publicsuffixlist.wasm
+
+Assuming:
+
+- The command is executed from within the present directory.
+
+### `wat2wasm` tool
+
+The `wat2wasm` tool can be downloaded from an official WebAssembly project:
+<https://github.com/WebAssembly/wabt/releases>.
+
+### `wat2wasm` tool online
+
+You can also use the following online `wat2wasm` tool:
+<https://webassembly.github.io/wabt/demo/wat2wasm/>.
+
+Just paste the whole content of the `wat` file to compile into the WAT pane.
+Click "Download" button to retrieve the resulting `wasm` file.
+
+### See also
+
+For the curious, the following online tool allows you to find out the machine
+code as a result from the WASM code: https://mbebenita.github.io/WasmExplorer/
diff --git a/src/lib/publicsuffixlist/wasm/publicsuffixlist.wasm b/src/lib/publicsuffixlist/wasm/publicsuffixlist.wasm
new file mode 100644
index 0000000..1f7ca0c
--- /dev/null
+++ b/src/lib/publicsuffixlist/wasm/publicsuffixlist.wasm
Binary files differ
diff --git a/src/lib/publicsuffixlist/wasm/publicsuffixlist.wat b/src/lib/publicsuffixlist/wasm/publicsuffixlist.wat
new file mode 100644
index 0000000..8ea7381
--- /dev/null
+++ b/src/lib/publicsuffixlist/wasm/publicsuffixlist.wat
@@ -0,0 +1,322 @@
+;;
+;; uBlock Origin - a browser extension to block requests.
+;; Copyright (C) 2019-present Raymond Hill
+;;
+;; License: pick the one which suits you:
+;; GPL v3 see <https://www.gnu.org/licenses/gpl.html>
+;; APL v2 see <http://www.apache.org/licenses/LICENSE-2.0>
+;;
+;; Home: https://github.com/gorhill/publicsuffixlist.js
+;; File: publicsuffixlist.wat
+;;
+;; Description: WebAssembly implementation for core lookup method in
+;; publicsuffixlist.js
+;;
+;; How to compile:
+;;
+;; wat2wasm publicsuffixlist.wat -o publicsuffixlist.wasm
+;;
+;; The `wat2wasm` tool can be downloaded from an official WebAssembly
+;; project:
+;; https://github.com/WebAssembly/wabt/releases
+
+
+(module
+;;
+;; module start
+;;
+
+(memory (import "imports" "memory") 1)
+
+;;
+;; Tree encoding in array buffer:
+;;
+;; Node:
+;; + u8: length of char data
+;; + u8: flags => bit 0: is_publicsuffix, bit 1: is_exception
+;; + u16: length of array of children
+;; + u32: char data or offset to char data
+;; + u32: offset to array of children
+;; = 12 bytes
+;;
+;; // i32 / i8
+;; const HOSTNAME_SLOT = 0; // jshint ignore:line
+;; const LABEL_INDICES_SLOT = 256; // -- / 256
+;; const RULES_PTR_SLOT = 100; // 100 / 400
+;; const SUFFIX_NOT_FOUND_SLOT = 399; // -- / 399
+;; const CHARDATA_PTR_SLOT = 101; // 101 / 404
+;; const EMPTY_STRING = '';
+;; const SELFIE_MAGIC = 2;
+;;
+
+;;
+;; Public functions
+;;
+
+;;
+;; unsigned int getPublicSuffixPos()
+;;
+;; Returns an offset to the start of the public suffix.
+;;
+(func (export "getPublicSuffixPos")
+ (result i32) ;; result = match index, -1 = miss
+ (local $iCharData i32) ;; offset to start of character data
+ (local $iNode i32) ;; offset to current node
+ (local $iLabel i32) ;; offset to label indices
+ (local $cursorPos i32) ;; position of cursor within hostname argument
+ (local $labelBeg i32)
+ (local $labelLen i32)
+ (local $nCandidates i32)
+ (local $iCandidates i32)
+ (local $iFound i32)
+ (local $l i32)
+ (local $r i32)
+ (local $d i32)
+ (local $iCandidate i32)
+ (local $iCandidateNode i32)
+ (local $candidateLen i32)
+ (local $iCandidateChar i32)
+ (local $_1 i32)
+ (local $_2 i32)
+ (local $_3 i32)
+ ;;
+ ;; const iCharData = buf32[CHARDATA_PTR_SLOT];
+ i32.const 404
+ i32.load
+ local.set $iCharData
+ ;; let iNode = pslBuffer32[RULES_PTR_SLOT];
+ i32.const 400
+ i32.load
+ i32.const 2
+ i32.shl
+ local.set $iNode
+ ;; let iLabel = LABEL_INDICES_SLOT;
+ i32.const 256
+ local.set $iLabel
+ ;; let cursorPos = -1;
+ i32.const -1
+ local.set $cursorPos
+ ;; label-lookup loop
+ ;; for (;;) {
+ block $labelLookupDone loop $labelLookup
+ ;; // Extract label indices
+ ;; const labelBeg = buf8[iLabel+1];
+ ;; const labelLen = buf8[iLabel+0] - labelBeg;
+ local.get $iLabel
+ i32.load8_u
+ local.get $iLabel
+ i32.load8_u offset=1
+ local.tee $labelBeg
+ i32.sub
+ local.set $labelLen
+ ;; // Match-lookup loop: binary search
+ ;; let r = buf32[iNode+0] >>> 16;
+ ;; if ( r === 0 ) { break; }
+ local.get $iNode
+ i32.load16_u offset=2
+ local.tee $r
+ i32.eqz
+ br_if $labelLookupDone
+ ;; const iCandidates = buf32[iNode+2];
+ local.get $iNode
+ i32.load offset=8
+ i32.const 2
+ i32.shl
+ local.set $iCandidates
+ ;; let l = 0;
+ ;; let iFound = 0;
+ i32.const 0
+ local.tee $l
+ local.set $iFound
+ ;; while ( l < r ) {
+ block $binarySearchDone loop $binarySearch
+ local.get $l
+ local.get $r
+ i32.ge_u
+ br_if $binarySearchDone
+ ;; const iCandidate = l + r >>> 1;
+ local.get $l
+ local.get $r
+ i32.add
+ i32.const 1
+ i32.shr_u
+ local.tee $iCandidate
+ ;; const iCandidateNode = iCandidates + iCandidate + (iCandidate << 1);
+ i32.const 2
+ i32.shl
+ local.tee $_1
+ local.get $_1
+ i32.const 1
+ i32.shl
+ i32.add
+ local.get $iCandidates
+ i32.add
+ local.tee $iCandidateNode
+ ;; const candidateLen = buf32[iCandidateNode+0] & 0x000000FF;
+ i32.load8_u
+ local.set $candidateLen
+ ;; let d = labelLen - candidateLen;
+ local.get $labelLen
+ local.get $candidateLen
+ i32.sub
+ local.tee $d
+ ;; if ( d === 0 ) {
+ i32.eqz
+ if
+ ;; const iCandidateChar = candidateLen <= 4
+ local.get $candidateLen
+ i32.const 4
+ i32.le_u
+ if
+ ;; ? iCandidateNode + 1 << 2
+ local.get $iCandidateNode
+ i32.const 4
+ i32.add
+ local.set $iCandidateChar
+ else
+ ;; : buf32[CHARDATA_PTR_SLOT] + buf32[iCandidateNode+1];
+ local.get $iCharData
+ local.get $iCandidateNode
+ i32.load offset=4
+ i32.add
+ local.set $iCandidateChar
+ end
+ ;; for ( let i = 0; i < labelLen; i++ ) {
+ local.get $labelBeg
+ local.tee $_1
+ local.get $labelLen
+ i32.add
+ local.set $_3
+ local.get $iCandidateChar
+ local.set $_2
+ block $findDiffDone loop $findDiff
+ ;; d = buf8[labelBeg+i] - buf8[iCandidateChar+i];
+ ;; if ( d !== 0 ) { break; }
+ local.get $_1
+ i32.load8_u
+ local.get $_2
+ i32.load8_u
+ i32.sub
+ local.tee $d
+ br_if $findDiffDone
+ local.get $_1
+ i32.const 1
+ i32.add
+ local.tee $_1
+ local.get $_3
+ i32.eq
+ br_if $findDiffDone
+ local.get $_2
+ i32.const 1
+ i32.add
+ local.set $_2
+ br $findDiff
+ ;; }
+ end end
+ ;; }
+ end
+ ;; if ( d < 0 ) {
+ ;; r = iCandidate;
+ local.get $d
+ i32.const 0
+ i32.lt_s
+ if
+ local.get $iCandidate
+ local.set $r
+ br $binarySearch
+ end
+ ;; } else if ( d > 0 ) {
+ ;; l = iCandidate + 1;
+ local.get $d
+ i32.const 0
+ i32.gt_s
+ if
+ local.get $iCandidate
+ i32.const 1
+ i32.add
+ local.set $l
+ br $binarySearch
+ end
+ ;; } else /* if ( d === 0 ) */ {
+ ;; iFound = iCandidateNode;
+ ;; break;
+ ;; }
+ local.get $iCandidateNode
+ local.set $iFound
+ end end
+ ;; }
+ ;; // 2. If no rules match, the prevailing rule is "*".
+ ;; if ( iFound === 0 ) {
+ ;; if ( buf32[iCandidates + 1] !== 0x2A /* '*' */ ) { break; }
+ ;; buf8[SUFFIX_NOT_FOUND_SLOT] = 1;
+ ;; iFound = iCandidates;
+ ;; }
+ local.get $iFound
+ i32.eqz
+ if
+ local.get $iCandidates
+ i32.load offset=4
+ i32.const 0x2A
+ i32.ne
+ br_if $labelLookupDone
+ i32.const 399
+ i32.const 1
+ i32.store8
+ local.get $iCandidates
+ local.set $iFound
+ end
+ ;; iNode = iFound;
+ local.get $iFound
+ local.tee $iNode
+ ;; // 5. If the prevailing rule is a exception rule, modify it by
+ ;; // removing the leftmost label.
+ ;; if ( (buf32[iNode+0] & 0x00000200) !== 0 ) {
+ ;; if ( iLabel > LABEL_INDICES_SLOT ) {
+ ;; return iLabel - 2;
+ ;; }
+ ;; break;
+ ;; }
+ i32.load8_u offset=1
+ local.tee $_1
+ i32.const 0x02
+ i32.and
+ if
+ local.get $iLabel
+ i32.const 256
+ i32.gt_u
+ if
+ local.get $iLabel
+ i32.const -2
+ i32.add
+ return
+ end
+ br $labelLookupDone
+ end
+ ;; if ( (buf32[iNode+0] & 0x00000100) !== 0 ) {
+ ;; cursorPos = labelBeg;
+ ;; }
+ local.get $_1
+ i32.const 0x01
+ i32.and
+ if
+ local.get $iLabel
+ local.set $cursorPos
+ end
+ ;; if ( labelBeg === 0 ) { break; }
+ local.get $labelBeg
+ i32.eqz
+ br_if $labelLookupDone
+ ;; iLabel += 2;
+ local.get $iLabel
+ i32.const 2
+ i32.add
+ local.set $iLabel
+ br $labelLookup
+ end end
+ local.get $cursorPos
+)
+
+;;
+;; module end
+;;
+)
diff --git a/src/lib/punycode.js b/src/lib/punycode.js
new file mode 100644
index 0000000..a7f990d
--- /dev/null
+++ b/src/lib/punycode.js
@@ -0,0 +1,493 @@
+/*! https://mths.be/punycode v1.3.2 by @mathias */
+export default (function() {
+ /**
+ * The `punycode` object.
+ * @name punycode
+ * @type Object
+ */
+ var punycode,
+
+ /** Highest positive signed 32-bit float value */
+ maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
+
+ /** Bootstring parameters */
+ base = 36,
+ tMin = 1,
+ tMax = 26,
+ skew = 38,
+ damp = 700,
+ initialBias = 72,
+ initialN = 128, // 0x80
+ delimiter = '-', // '\x2D'
+
+ /** Regular expressions */
+ regexPunycode = /^xn--/,
+ regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
+ regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
+
+ /** Error messages */
+ errors = {
+ 'overflow': 'Overflow: input needs wider integers to process',
+ 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
+ 'invalid-input': 'Invalid input'
+ },
+
+ /** Convenience shortcuts */
+ baseMinusTMin = base - tMin,
+ floor = Math.floor,
+ stringFromCharCode = String.fromCharCode,
+
+ /** Temporary variable */
+ key;
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * A generic error utility function.
+ * @private
+ * @param {String} type The error type.
+ * @returns {Error} Throws a `RangeError` with the applicable error message.
+ */
+ function error(type) {
+ throw new RangeError(errors[type]);
+ }
+
+ /**
+ * A generic `Array#map` utility function.
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} callback The function that gets called for every array
+ * item.
+ * @returns {Array} A new array of values returned by the callback function.
+ */
+ function map(array, fn) {
+ var length = array.length;
+ var result = [];
+ while (length--) {
+ result[length] = fn(array[length]);
+ }
+ return result;
+ }
+
+ /**
+ * A simple `Array#map`-like wrapper to work with domain name strings or email
+ * addresses.
+ * @private
+ * @param {String} domain The domain name or email address.
+ * @param {Function} callback The function that gets called for every
+ * character.
+ * @returns {Array} A new string of characters returned by the callback
+ * function.
+ */
+ function mapDomain(string, fn) {
+ var parts = string.split('@');
+ var result = '';
+ if (parts.length > 1) {
+ // In email addresses, only the domain name should be punycoded. Leave
+ // the local part (i.e. everything up to `@`) intact.
+ result = parts[0] + '@';
+ string = parts[1];
+ }
+ // Avoid `split(regex)` for IE8 compatibility. See #17.
+ string = string.replace(regexSeparators, '\x2E');
+ var labels = string.split('.');
+ var encoded = map(labels, fn).join('.');
+ return result + encoded;
+ }
+
+ /**
+ * Creates an array containing the numeric code points of each Unicode
+ * character in the string. While JavaScript uses UCS-2 internally,
+ * this function will convert a pair of surrogate halves (each of which
+ * UCS-2 exposes as separate characters) into a single code point,
+ * matching UTF-16.
+ * @see `punycode.ucs2.encode`
+ * @see <https://mathiasbynens.be/notes/javascript-encoding>
+ * @memberOf punycode.ucs2
+ * @name decode
+ * @param {String} string The Unicode input string (UCS-2).
+ * @returns {Array} The new array of code points.
+ */
+ function ucs2decode(string) {
+ var output = [],
+ counter = 0,
+ length = string.length,
+ value,
+ extra;
+ while (counter < length) {
+ value = string.charCodeAt(counter++);
+ if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
+ // high surrogate, and there is a next character
+ extra = string.charCodeAt(counter++);
+ if ((extra & 0xFC00) == 0xDC00) { // low surrogate
+ output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
+ } else {
+ // unmatched surrogate; only append this code unit, in case the next
+ // code unit is the high surrogate of a surrogate pair
+ output.push(value);
+ counter--;
+ }
+ } else {
+ output.push(value);
+ }
+ }
+ return output;
+ }
+
+ /**
+ * Creates a string based on an array of numeric code points.
+ * @see `punycode.ucs2.decode`
+ * @memberOf punycode.ucs2
+ * @name encode
+ * @param {Array} codePoints The array of numeric code points.
+ * @returns {String} The new Unicode string (UCS-2).
+ */
+ function ucs2encode(array) {
+ return map(array, function(value) {
+ var output = '';
+ if (value > 0xFFFF) {
+ value -= 0x10000;
+ output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
+ value = 0xDC00 | value & 0x3FF;
+ }
+ output += stringFromCharCode(value);
+ return output;
+ }).join('');
+ }
+
+ /**
+ * Converts a basic code point into a digit/integer.
+ * @see `digitToBasic()`
+ * @private
+ * @param {Number} codePoint The basic numeric code point value.
+ * @returns {Number} The numeric value of a basic code point (for use in
+ * representing integers) in the range `0` to `base - 1`, or `base` if
+ * the code point does not represent a value.
+ */
+ function basicToDigit(codePoint) {
+ if (codePoint - 48 < 10) {
+ return codePoint - 22;
+ }
+ if (codePoint - 65 < 26) {
+ return codePoint - 65;
+ }
+ if (codePoint - 97 < 26) {
+ return codePoint - 97;
+ }
+ return base;
+ }
+
+ /**
+ * Converts a digit/integer into a basic code point.
+ * @see `basicToDigit()`
+ * @private
+ * @param {Number} digit The numeric value of a basic code point.
+ * @returns {Number} The basic code point whose value (when used for
+ * representing integers) is `digit`, which needs to be in the range
+ * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
+ * used; else, the lowercase form is used. The behavior is undefined
+ * if `flag` is non-zero and `digit` has no uppercase form.
+ */
+ function digitToBasic(digit, flag) {
+ // 0..25 map to ASCII a..z or A..Z
+ // 26..35 map to ASCII 0..9
+ return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
+ }
+
+ /**
+ * Bias adaptation function as per section 3.4 of RFC 3492.
+ * http://tools.ietf.org/html/rfc3492#section-3.4
+ * @private
+ */
+ function adapt(delta, numPoints, firstTime) {
+ var k = 0;
+ delta = firstTime ? floor(delta / damp) : delta >> 1;
+ delta += floor(delta / numPoints);
+ for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
+ delta = floor(delta / baseMinusTMin);
+ }
+ return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
+ }
+
+ /**
+ * Converts a Punycode string of ASCII-only symbols to a string of Unicode
+ * symbols.
+ * @memberOf punycode
+ * @param {String} input The Punycode string of ASCII-only symbols.
+ * @returns {String} The resulting string of Unicode symbols.
+ */
+ function decode(input) {
+ // Don't use UCS-2
+ var output = [],
+ inputLength = input.length,
+ out,
+ i = 0,
+ n = initialN,
+ bias = initialBias,
+ basic,
+ j,
+ index,
+ oldi,
+ w,
+ k,
+ digit,
+ t,
+ /** Cached calculation results */
+ baseMinusT;
+
+ // Handle the basic code points: let `basic` be the number of input code
+ // points before the last delimiter, or `0` if there is none, then copy
+ // the first basic code points to the output.
+
+ basic = input.lastIndexOf(delimiter);
+ if (basic < 0) {
+ basic = 0;
+ }
+
+ for (j = 0; j < basic; ++j) {
+ // if it's not a basic code point
+ if (input.charCodeAt(j) >= 0x80) {
+ error('not-basic');
+ }
+ output.push(input.charCodeAt(j));
+ }
+
+ // Main decoding loop: start just after the last delimiter if any basic code
+ // points were copied; start at the beginning otherwise.
+
+ for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
+
+ // `index` is the index of the next character to be consumed.
+ // Decode a generalized variable-length integer into `delta`,
+ // which gets added to `i`. The overflow checking is easier
+ // if we increase `i` as we go, then subtract off its starting
+ // value at the end to obtain `delta`.
+ for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
+
+ if (index >= inputLength) {
+ error('invalid-input');
+ }
+
+ digit = basicToDigit(input.charCodeAt(index++));
+
+ if (digit >= base || digit > floor((maxInt - i) / w)) {
+ error('overflow');
+ }
+
+ i += digit * w;
+ t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
+
+ if (digit < t) {
+ break;
+ }
+
+ baseMinusT = base - t;
+ if (w > floor(maxInt / baseMinusT)) {
+ error('overflow');
+ }
+
+ w *= baseMinusT;
+
+ }
+
+ out = output.length + 1;
+ bias = adapt(i - oldi, out, oldi == 0);
+
+ // `i` was supposed to wrap around from `out` to `0`,
+ // incrementing `n` each time, so we'll fix that now:
+ if (floor(i / out) > maxInt - n) {
+ error('overflow');
+ }
+
+ n += floor(i / out);
+ i %= out;
+
+ // Insert `n` at position `i` of the output
+ output.splice(i++, 0, n);
+
+ }
+
+ return ucs2encode(output);
+ }
+
+ /**
+ * Converts a string of Unicode symbols (e.g. a domain name label) to a
+ * Punycode string of ASCII-only symbols.
+ * @memberOf punycode
+ * @param {String} input The string of Unicode symbols.
+ * @returns {String} The resulting Punycode string of ASCII-only symbols.
+ */
+ function encode(input) {
+ var n,
+ delta,
+ handledCPCount,
+ basicLength,
+ bias,
+ j,
+ m,
+ q,
+ k,
+ t,
+ currentValue,
+ output = [],
+ /** `inputLength` will hold the number of code points in `input`. */
+ inputLength,
+ /** Cached calculation results */
+ handledCPCountPlusOne,
+ baseMinusT,
+ qMinusT;
+
+ // Convert the input in UCS-2 to Unicode
+ input = ucs2decode(input);
+
+ // Cache the length
+ inputLength = input.length;
+
+ // Initialize the state
+ n = initialN;
+ delta = 0;
+ bias = initialBias;
+
+ // Handle the basic code points
+ for (j = 0; j < inputLength; ++j) {
+ currentValue = input[j];
+ if (currentValue < 0x80) {
+ output.push(stringFromCharCode(currentValue));
+ }
+ }
+
+ handledCPCount = basicLength = output.length;
+
+ // `handledCPCount` is the number of code points that have been handled;
+ // `basicLength` is the number of basic code points.
+
+ // Finish the basic string - if it is not empty - with a delimiter
+ if (basicLength) {
+ output.push(delimiter);
+ }
+
+ // Main encoding loop:
+ while (handledCPCount < inputLength) {
+
+ // All non-basic code points < n have been handled already. Find the next
+ // larger one:
+ for (m = maxInt, j = 0; j < inputLength; ++j) {
+ currentValue = input[j];
+ if (currentValue >= n && currentValue < m) {
+ m = currentValue;
+ }
+ }
+
+ // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
+ // but guard against overflow
+ handledCPCountPlusOne = handledCPCount + 1;
+ if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
+ error('overflow');
+ }
+
+ delta += (m - n) * handledCPCountPlusOne;
+ n = m;
+
+ for (j = 0; j < inputLength; ++j) {
+ currentValue = input[j];
+
+ if (currentValue < n && ++delta > maxInt) {
+ error('overflow');
+ }
+
+ if (currentValue == n) {
+ // Represent delta as a generalized variable-length integer
+ for (q = delta, k = base; /* no condition */; k += base) {
+ t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
+ if (q < t) {
+ break;
+ }
+ qMinusT = q - t;
+ baseMinusT = base - t;
+ output.push(
+ stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
+ );
+ q = floor(qMinusT / baseMinusT);
+ }
+
+ output.push(stringFromCharCode(digitToBasic(q, 0)));
+ bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
+ delta = 0;
+ ++handledCPCount;
+ }
+ }
+
+ ++delta;
+ ++n;
+
+ }
+ return output.join('');
+ }
+
+ /**
+ * Converts a Punycode string representing a domain name or an email address
+ * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
+ * it doesn't matter if you call it on a string that has already been
+ * converted to Unicode.
+ * @memberOf punycode
+ * @param {String} input The Punycoded domain name or email address to
+ * convert to Unicode.
+ * @returns {String} The Unicode representation of the given Punycode
+ * string.
+ */
+ function toUnicode(input) {
+ return mapDomain(input, function(string) {
+ return regexPunycode.test(string)
+ ? decode(string.slice(4).toLowerCase())
+ : string;
+ });
+ }
+
+ /**
+ * Converts a Unicode string representing a domain name or an email address to
+ * Punycode. Only the non-ASCII parts of the domain name will be converted,
+ * i.e. it doesn't matter if you call it with a domain that's already in
+ * ASCII.
+ * @memberOf punycode
+ * @param {String} input The domain name or email address to convert, as a
+ * Unicode string.
+ * @returns {String} The Punycode representation of the given domain name or
+ * email address.
+ */
+ function toASCII(input) {
+ return mapDomain(input, function(string) {
+ return regexNonASCII.test(string)
+ ? 'xn--' + encode(string)
+ : string;
+ });
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /** Define the public API */
+ punycode = {
+ /**
+ * A string representing the current Punycode.js version number.
+ * @memberOf punycode
+ * @type String
+ */
+ 'version': '1.3.2',
+ /**
+ * An object of methods to convert from JavaScript's internal character
+ * representation (UCS-2) to Unicode code points, and back.
+ * @see <https://mathiasbynens.be/notes/javascript-encoding>
+ * @memberOf punycode
+ * @type Object
+ */
+ 'ucs2': {
+ 'decode': ucs2decode,
+ 'encode': ucs2encode
+ },
+ 'decode': decode,
+ 'encode': encode,
+ 'toASCII': toASCII,
+ 'toUnicode': toUnicode
+ };
+
+ return punycode;
+})();
diff --git a/src/lib/regexanalyzer/CHANGES.md b/src/lib/regexanalyzer/CHANGES.md
new file mode 100644
index 0000000..3c4eb8b
--- /dev/null
+++ b/src/lib/regexanalyzer/CHANGES.md
@@ -0,0 +1,15 @@
+# Regex Analyzer
+
+Imported from: <https://github.com/foo123/RegexAnalyzer>
+Author: Nikos M.
+
+## Changes to the imported library
+
+#### Date
+
+2023-01-01
+
+Imported version 1.2.0 of the library from
+https://github.com/foo123/RegexAnalyzer/blob/1.2.0/src/js/Regex.js
+
+Minimally modified the code to make it ECMAscript `export`-/`import`-friendly.
diff --git a/src/lib/regexanalyzer/README.md b/src/lib/regexanalyzer/README.md
new file mode 100644
index 0000000..8b9c270
--- /dev/null
+++ b/src/lib/regexanalyzer/README.md
@@ -0,0 +1,14 @@
+https://github.com/foo123/RegexAnalyzer/issues/1#issuecomment-750039255
+
+> The (implied) license is as free as it can get. You can modify it and use
+> it anywhere you want if it suits you.
+>
+> An attribution to original author would be appreciated but even this is not
+> mandatory.
+>
+> Copy Left
+
+References:
+
+- https://en.wikipedia.org/wiki/Copyleft
+- http://gplv3.fsf.org/wiki/index.php/Compatible_licenses
diff --git a/src/lib/regexanalyzer/regex.js b/src/lib/regexanalyzer/regex.js
new file mode 100644
index 0000000..35a2716
--- /dev/null
+++ b/src/lib/regexanalyzer/regex.js
@@ -0,0 +1,2276 @@
+/**
+*
+* Regex
+* @version: 1.2.0
+*
+* A simple & generic Regular Expression Analyzer & Composer for PHP, Python, Javascript
+* https://github.com/foo123/RegexAnalyzer
+*
+**/
+export default (function(root, name, factory) {
+"use strict";
+var __version__ = "1.2.0",
+
+ PROTO = 'prototype', OP = Object[PROTO], AP = Array[PROTO],
+ Keys = Object.keys, to_string = OP.toString, HAS = OP.hasOwnProperty,
+ fromCharCode = String.fromCharCode,
+ fromCodePoint = String.fromCodePoint || String.fromCharCode,
+ CHAR = 'charAt', CHARCODE = 'charCodeAt',
+ CODEPOINT = String.prototype.codePointAt ? 'codePointAt' : CHARCODE,
+ toJSON = JSON.stringify,
+ INF = Infinity, ESC = '\\',
+ specialChars = {
+ "." : "MatchAnyChar",
+ "|" : "MatchEither",
+ "?" : "MatchZeroOrOne",
+ "*" : "MatchZeroOrMore",
+ "+" : "MatchOneOrMore",
+ "^" : "MatchStart",
+ "$" : "MatchEnd",
+ "{" : "StartRepeats",
+ "}" : "EndRepeats",
+ "(" : "StartGroup",
+ ")" : "EndGroup",
+ "[" : "StartCharGroup",
+ "]" : "EndCharGroup"
+ },
+ /*
+ http://www.javascriptkit.com/javatutors/redev2.shtml
+
+ \f matches form-feed.
+ \r matches carriage return.
+ \n matches linefeed.
+ \t matches horizontal tab.
+ \v matches vertical tab.
+ \0 matches NUL character.
+ [\b] matches backspace.
+ \s matches whitespace (short for [\f\n\r\t\v\u00A0\u2028\u2029]).
+ \S matches anything but a whitespace (short for [^\f\n\r\t\v\u00A0\u2028\u2029]).
+ \w matches any alphanumerical character (word characters) including underscore (short for [a-zA-Z0-9_]).
+ \W matches any non-word characters (short for [^a-zA-Z0-9_]).
+ \d matches any digit (short for [0-9]).
+ \D matches any non-digit (short for [^0-9]).
+ \b matches a word boundary (the position between a word and a space).
+ \B matches a non-word boundary (short for [^\b]).
+ \cX matches a control character. E.g: \cm matches control-M.
+ \xhh matches the character with two characters of hexadecimal code hh.
+ \uhhhh matches the Unicode character with four characters of hexadecimal code hhhh.
+ */
+ specialCharsEscaped = {
+ "\\" : "ESC",
+ "/" : "/",
+ "0" : "NULChar",
+ "f" : "FormFeed",
+ "n" : "LineFeed",
+ "r" : "CarriageReturn",
+ "t" : "HorizontalTab",
+ "v" : "VerticalTab",
+ "b" : "MatchWordBoundary",
+ "B" : "MatchNonWordBoundary",
+ "s" : "MatchSpaceChar",
+ "S" : "MatchNonSpaceChar",
+ "w" : "MatchWordChar",
+ "W" : "MatchNonWordChar",
+ "d" : "MatchDigitChar",
+ "D" : "MatchNonDigitChar"
+ },
+ T_SEQUENCE = 1,
+ T_ALTERNATION = 2,
+ T_GROUP = 4,
+ T_CHARGROUP = 8,
+ T_QUANTIFIER = 16,
+ T_UNICODECHAR = 32,
+ T_HEXCHAR = 64,
+ T_SPECIAL = 128,
+ T_CHARS = 256,
+ T_CHARRANGE = 512,
+ T_STRING = 1024,
+ T_COMMENT = 2048
+;
+
+function is_array(x)
+{
+ return (x instanceof Array) || ('[object Array]' === to_string.call(x));
+}
+function is_string(x)
+{
+ return (x instanceof String) || ('[object String]' === to_string.call(x));
+}
+function is_regexp(x)
+{
+ return (x instanceof RegExp) || ('[object RegExp]' === to_string.call(x));
+}
+function array(x)
+{
+ return is_array(x) ? x : [x];
+}
+function clone(obj, cloned)
+{
+ cloned = cloned || {};
+ for (var p in obj) if (HAS.call(obj,p)) cloned[p] = obj[p];
+ return cloned;
+}
+function RE_OBJ(re, flags, flavor)
+{
+ var self = this;
+ self.re = re;
+ self.flags = flags;
+ self.flavor = flavor;
+ self.len = re.length;
+ self.pos = 0;
+ self.index = 0;
+ self.groupIndex = 0;
+ self.group = {};
+ self.inGroup = 0;
+}
+RE_OBJ[PROTO] = {
+ constructor: RE_OBJ
+ ,re: null
+ ,flags: null
+ ,flavor: ''
+ ,len: null
+ ,pos: null
+ ,index: null
+ ,groupIndex: null
+ ,inGroup: null
+ ,groups: null
+ ,dispose: function() {
+ var self = this;
+ self.re = null;
+ self.flags = null;
+ self.flavor = null;
+ self.len = null;
+ self.pos = null;
+ self.index = null;
+ self.groupIndex = null;
+ self.group = null;
+ self.inGroup = null;
+ }
+};
+function Node(type, value, flags)
+{
+ var self = this;
+ if (!(self instanceof Node)) return new Node(type, value, flags);
+ self.type = type;
+ self.val = value;
+ self.flags = flags || {};
+ switch (type)
+ {
+ case T_SEQUENCE:
+ self.typeName = "Sequence"; break;
+ case T_ALTERNATION:
+ self.typeName = "Alternation"; break;
+ case T_GROUP:
+ self.typeName = "Group"; break;
+ case T_CHARGROUP:
+ self.typeName = "CharacterGroup"; break;
+ case T_CHARS:
+ self.typeName = "Characters"; break;
+ case T_CHARRANGE:
+ self.typeName = "CharacterRange"; break;
+ case T_STRING:
+ self.typeName = "String"; break;
+ case T_QUANTIFIER:
+ self.typeName = "Quantifier"; break;
+ case T_UNICODECHAR:
+ self.typeName = "UnicodeChar"; break;
+ case T_HEXCHAR:
+ self.typeName = "HexChar"; break;
+ case T_SPECIAL:
+ self.typeName = "Special"; break;
+ case T_COMMENT:
+ self.typeName = "Comment"; break;
+ default:
+ self.typeName = "unspecified"; break;
+ }
+};
+Node.toObjectStatic = function toObject(v) {
+ if (v instanceof Node)
+ {
+ return v.flags && Object.keys(v.flags).length ? {
+ type: v.typeName,
+ value: toObject(v.val),
+ flags: v.flags
+ } : {
+ type: v.typeName,
+ value: toObject(v.val)
+ };
+ }
+ else if (is_array(v))
+ {
+ return v.map(toObject);
+ }
+ return v;
+};
+Node[PROTO] = {
+ constructor: Node
+ ,type: null
+ ,typeName: null
+ ,val: null
+ ,flags: null
+ ,dispose: function() {
+ var self = this;
+ self.val = null;
+ self.flags = null;
+ self.type = null;
+ self.typeName = null;
+ return self;
+ }
+ ,toObject: function() {
+ return Node.toObjectStatic(this);
+ }
+};
+
+var rnd = function(a, b) {return Math.round((b-a)*Math.random()+a);},
+ RE = function(re, fl) {return new RegExp(re, fl||'');},
+ slice = function(a) {return AP.slice.apply(a, AP.slice.call(arguments, 1));},
+ flatten = function(a) {
+ var r = [], i = 0;
+ while (i < a.length) r = r.concat(a[i++]);
+ return r;
+ },
+ getArgs = function(args, asArray) {
+ /*var a = slice(args);
+ if ( asArray && a[0] &&
+ ( a[0] instanceof Array || '[object Array]' == to_string.call(a[0]) )
+ )
+ a = a[0];*/
+ return flatten(slice(args)); //a;
+ },
+ esc_re = function(s, esc, chargroup) {
+ var es = '', l = s.length, i=0, c;
+ //escaped_re = /([.*+?^${}()|[\]\/\\\-])/g
+ if (chargroup)
+ {
+ while (i < l)
+ {
+ c = s[CHAR](i++);
+ es += (/*('?' === c) || ('*' === c) || ('+' === c) ||*/
+ ('-' === c) || /*('.' === c) ||*/ ('^' === c) || ('$' === c) || ('|' === c) ||
+ ('{' === c) || ('}' === c) || ('(' === c) || (')' === c) ||
+ ('[' === c) || (']' === c) || ('/' === c) || (esc === c) ? esc : '') + c;
+ }
+ }
+ else
+ {
+ while (i < l)
+ {
+ c = s[CHAR](i++);
+ es += (('?' === c) || ('*' === c) || ('+' === c) ||
+ /*('-' === c) ||*/ ('.' === c) || ('^' === c) || ('$' === c) || ('|' === c) ||
+ ('{' === c) || ('}' === c) || ('(' === c) || (')' === c) ||
+ ('[' === c) || (']' === c) || ('/' === c) || (esc === c) ? esc : '') + c;
+ }
+ }
+ return es;
+ },
+ pad = function(s, n, z) {
+ var ps = String(s);
+ z = z || '0';
+ while (ps.length < n) ps = z + ps;
+ return ps;
+ },
+ char_code = function(c) {return c[CODEPOINT](0);},
+ char_code_range = function(s) {return [s[CODEPOINT](0), s[CODEPOINT](s.length-1)];},
+ //char_codes = function( s_or_a ) { return (s_or_a.substr ? s_or_a.split("") : s_or_a).map( char_code ); },
+ // http://stackoverflow.com/questions/12376870/create-an-array-of-characters-from-specified-range
+ character_range = function(first, last) {
+ if (first && is_array(first)) {last = first[1]; first = first[0];}
+ var ch, chars, start = first[CODEPOINT](0), end = last[CODEPOINT](0);
+
+ if (end === start) return [fromCodePoint(start)];
+
+ chars = [];
+ for (ch = start; ch <= end; ++ch) chars.push(fromCodePoint(ch));
+ return chars;
+ },
+ concat = function(p1, p2) {
+ if (p2)
+ {
+ var p, l;
+ if (is_array(p2))
+ {
+ for (p=0,l=p2.length; p<l; ++p) p1[p2[p]] = 1;
+ }
+ else
+ {
+ for (p in p2) if (HAS.call(p2, p)) p1[p] = 1;
+ }
+ }
+ return p1;
+ },
+
+ BSPACES = "\r\n", SPACES = " \t\v", PUNCTS = "~!@#$%^&*()-+=[]{}\\|;:,./<>?",
+ DIGITS = "0123456789", DIGITS_RANGE = char_code_range(DIGITS),
+ HEXDIGITS_RANGES = [DIGITS_RANGE, [char_code("a"), char_code("f")], [char_code("A"), char_code("F")]],
+ ALPHAS = "_"+(character_range("a", "z").join(""))+(character_range("A", "Z").join("")),
+ ALL = SPACES+PUNCTS+DIGITS+ALPHAS, ALL_ARY = ALL.split(""),
+
+ match_chars = function(CHARS, s, pos, minlen, maxlen) {
+ pos = pos || 0;
+ minlen = minlen || 1;
+ maxlen = maxlen || INF;
+ var lp = pos, l = 0, sl = s.length, ch;
+ while ((lp < sl) && (l <= maxlen) && -1 < CHARS.indexOf(ch=s[CHAR](lp)))
+ {
+ ++lp; ++l;
+ }
+ return l >= minlen ? l : false;
+ },
+ match_char_range = function(RANGE, s, pos, minlen, maxlen) {
+ pos = pos || 0;
+ minlen = minlen || 1;
+ maxlen = maxlen || INF;
+ var lp = pos, l = 0, sl = s.length, ch;
+ while ((lp < sl) && (l <= maxlen) && ((ch=s[CHARCODE](lp)) >= RANGE[0] && ch <= RANGE[1]))
+ {
+ ++lp; ++l;
+ }
+ return l >= minlen ? l : false;
+ },
+ match_char_ranges = function(RANGES, s, pos, minlen, maxlen) {
+ pos = pos || 0;
+ minlen = minlen || 1;
+ maxlen = maxlen || INF;
+ var lp = pos, l = 0, sl = s.length, ch,
+ i, Rl = RANGES.length, RANGE, found = true;
+ while ((lp < sl) && (l <= maxlen) && found)
+ {
+ ch = s[CHARCODE](lp); found = false;
+ for (i=0; i<Rl; ++i)
+ {
+ RANGE = RANGES[i];
+ if (ch >= RANGE[0] && ch <= RANGE[1])
+ {
+ ++lp; ++l; found = true;
+ break;
+ }
+ }
+ }
+ return l >= minlen ? l : false;
+ },
+
+ punct = function() {
+ return PUNCTS[CHAR](rnd(0, PUNCTS.length-1));
+ },
+ space = function(positive) {
+ return false !== positive
+ ? SPACES[CHAR](rnd(0, SPACES.length-1))
+ : (punct()+digit()+alpha())[CHAR](rnd(0, 2))
+ ;
+ },
+ digit = function(positive) {
+ return false !== positive
+ ? DIGITS[CHAR](rnd(0, DIGITS.length-1))
+ : (punct()+space()+alpha())[CHAR](rnd(0, 2))
+ ;
+ },
+ alpha = function(positive) {
+ return false !== positive
+ ? ALPHAS[CHAR](rnd(0, ALPHAS.length-1))
+ : (punct()+space()+digit())[CHAR](rnd(0, 2))
+ ;
+ },
+ word = function(positive) {
+ return false !== positive
+ ? (ALPHAS+DIGITS)[CHAR](rnd(0, ALPHAS.length+DIGITS.length-1))
+ : (punct()+space())[CHAR](rnd(0, 1))
+ ;
+ },
+ any = function() {
+ return ALL[CHAR](rnd(0, ALL.length-1));
+ },
+ character = function(chars, positive) {
+ if (false !== positive) return chars.length ? chars[rnd(0, chars.length-1)] : '';
+ var choices = ALL_ARY.filter(function(c) {return 0 > chars.indexOf(c);});
+ return choices.length ? choices[rnd(0, choices.length-1)] : '';
+ },
+ random_upper_or_lower = function(c) {return 0.5 < Math.random() ? c.toLowerCase() : c.toUpperCase();},
+ case_insensitive = function(chars, asArray) {
+ if (asArray)
+ {
+ if (chars[CHAR]) chars = chars.split('');
+ chars = chars.map(random_upper_or_lower);
+ //if ( !asArray ) chars = chars.join('');
+ return chars;
+ }
+ else
+ {
+ return random_upper_or_lower(chars);
+ }
+ },
+
+ walk = function walk(ret, node, state) {
+ if ((null == node) || !state) return ret;
+
+ var i, l, r, type = node instanceof Node ? node.type : null;
+
+ // walk the tree
+ if (null === type)
+ {
+ // custom, let reduce handle it
+ ret = state.reduce(ret, node, state);
+ }
+
+ else if (state.IGNORE & type)
+ {
+ /* nothing */
+ }
+
+ else if (state.MAP & type)
+ {
+ r = state.map(ret, node, state);
+ if (null != state.ret)
+ {
+ ret = state.reduce(ret, node, state);
+ state.ret = null;
+ }
+ else if (null != r)
+ {
+ r = array(r);
+ for (i=0,l=r?r.length:0; i<l; ++i)
+ {
+ state.node = node;
+ ret = walk(ret, r[i], state);
+ if (state.stop)
+ {
+ state.stop = null;
+ return ret;
+ }
+ }
+ }
+ }
+
+ else if (state.REDUCE & type)
+ {
+ ret = state.reduce(ret, node, state);
+ }
+
+ state.node = null;
+ return ret;
+ },
+ /*map_all = function map_all( ret, node, state ) {
+ return node.val;
+ },*/
+ map_src = function map_src(ret, node, state) {
+ var type = node.type;
+ if (T_ALTERNATION === type)
+ {
+ var r = [];
+ for (var i=0,l=node.val.length-1; i<l; ++i) r.push(node.val[i], '|');
+ r.push(node.val[l]);
+ return r;
+ }
+ else if (T_CHARGROUP === type)
+ {
+ return [].concat('['+(node.flags.NegativeMatch?'^':'')).concat(array(node.val)).concat(']');
+ }
+ else if (T_QUANTIFIER === type)
+ {
+ var q = '';
+ if (node.flags.MatchZeroOrOne) q = '?';
+ else if (node.flags.MatchZeroOrMore) q = '*';
+ else if (node.flags.MatchOneOrMore) q = '+';
+ else q = node.flags.min === node.flags.max ? ('{'+node.flags.min+'}') : ('{'+node.flags.min+','+(-1===node.flags.max?'':node.flags.max)+'}');
+ if ((node.flags.min !== node.flags.max) && !node.flags.isGreedy) q += '?';
+ return [].concat(array(node.val)).concat(q);
+ }
+ else if (T_GROUP === type)
+ {
+ var g = null;
+ if (node.flags.NotCaptured)
+ {
+ g = [].concat('(?:').concat(array(node.val)).concat(')');
+ }
+ else if (node.flags.LookAhead)
+ {
+ g = [].concat('(?=').concat(array(node.val)).concat(')');
+ }
+ else if (node.flags.NegativeLookAhead)
+ {
+ g = [].concat('(?!').concat(array(node.val)).concat(')');
+ }
+ else if (node.flags.LookBehind)
+ {
+ g = [].concat('(?<=').concat(array(node.val)).concat(')');
+ }
+ else if (node.flags.NegativeLookBehind)
+ {
+ g = [].concat('(?<!').concat(array(node.val)).concat(')');
+ }
+ else if (node.flags.NamedGroup && !state.compatibility)
+ {
+ g = [].concat('(?<'+node.flags.GroupName+'>').concat(array(node.val)).concat(')');
+ }
+ else
+ {
+ g = [].concat('(').concat(array(node.val)).concat(')');
+ }
+ if (null != node.flags.GroupIndex)
+ {
+ ret.group[node.flags.GroupIndex] = node.flags.GroupIndex;
+ if (node.flags.GroupName) ret.group[node.flags.GroupName] = node.flags.GroupIndex;
+ }
+ return g;
+ }
+ return node.val;
+ },
+ map_any = function map_any(ret, node, state) {
+ var type = node.type;
+ if ((T_ALTERNATION === type) || (T_CHARGROUP === type))
+ {
+ return node.val.length ? node.val[rnd(0, node.val.length-1)] : null;
+ }
+ else if (T_QUANTIFIER === type)
+ {
+ var numrepeats, mmin, mmax, repeats;
+ if (ret.length >= state.maxLength)
+ {
+ numrepeats = node.flags.min;
+ }
+ else
+ {
+ mmin = node.flags.min;
+ mmax = -1 === node.flags.max ? (mmin+1+2*state.maxLength) : node.flags.max;
+ numrepeats = rnd(mmin, mmax);
+ }
+ if (numrepeats)
+ {
+ repeats = new Array(numrepeats);
+ for (var i=0; i<numrepeats; ++i) repeats[i] = node.val;
+ return repeats;
+ }
+ else
+ {
+ return null;
+ }
+ }
+ else if ((T_GROUP === type) && node.flags.GroupIndex)
+ {
+ var sample = walk('', node.val, state);
+ state.group[node.flags.GroupIndex] = sample;
+ state.ret = sample;
+ return null;
+ }
+ else
+ {
+ return node.val;
+ }
+ },
+ map_min = function map_min(ret, node, state) {
+ var type = node.type;
+ if (T_ALTERNATION === type)
+ {
+ var i, l = node.val.length, cur,
+ min = l ? walk(0, node.val[0], state) : 0;
+ for (i=1; i<l; ++i)
+ {
+ cur = walk(0, node.val[i], state);
+ if (cur < min) min = cur;
+ }
+ if (l) state.ret = min;
+ return null;
+ }
+ else if (T_CHARGROUP === type)
+ {
+ return node.val.length ? node.val[0] : null;
+ }
+ else if (T_QUANTIFIER === type)
+ {
+ if (0 === node.flags.min) return null;
+ var i, nrepeats = node.flags.min, repeats = new Array(nrepeats);
+ for (i=0; i<nrepeats; ++i) repeats[i] = node.val;
+ return repeats;
+ }
+ else if ((T_GROUP === type) && node.flags.GroupIndex)
+ {
+ var min = walk(0, node.val, state);
+ state.group[node.flags.GroupIndex] = min;
+ state.ret = min;
+ return null;
+ }
+ else
+ {
+ return node.val;
+ }
+ },
+ map_max = function map_max(ret, node, state) {
+ var type = node.type;
+ if (T_ALTERNATION === type)
+ {
+ var i, l = node.val.length, cur, max = l ? walk(0, node.val[0], state) : 0;
+ if (-1 !== max)
+ {
+ for (i=1; i<l; ++i)
+ {
+ cur = walk(0, node.val[i], state);
+ if (-1 === cur)
+ {
+ max = -1;
+ break;
+ }
+ else if (cur > max)
+ {
+ max = cur;
+ }
+ }
+ }
+ if (l) state.ret = max;
+ return null;
+ }
+ else if (T_CHARGROUP === type)
+ {
+ return node.val.length ? node.val[0] : null;
+ }
+ else if (T_QUANTIFIER === type)
+ {
+ max = walk(0, node.val, state);
+ if (-1 === max)
+ {
+ state.ret = -1;
+ }
+ else if (0 < max)
+ {
+ if (-1 === node.flags.max)
+ {
+ state.ret = -1;
+ }
+ else if (0 < node.flags.max)
+ {
+ state.ret = node.flags.max*max;
+ }
+ else
+ {
+ state.ret = max;
+ }
+ }
+ return null;
+ }
+ else if ((T_GROUP === type) && node.flags.GroupIndex)
+ {
+ var max = walk(0, node.val, state);
+ state.group[node.flags.GroupIndex] = max;
+ state.ret = max;
+ return null;
+ }
+ else
+ {
+ return node.val;
+ }
+ },
+ map_1st = function map_1st(ret, node, state) {
+ var type = node.type;
+ if (T_SEQUENCE === type)
+ {
+ var seq=[], i=0, l=node.val.length, n;
+ for (i=0; i<l; ++i)
+ {
+ n = node.val[i];
+ seq.push( n );
+ if ((T_QUANTIFIER === n.type) && (0 === n.flags.min))
+ continue;
+ else if ((T_SPECIAL === n.type) && (n.flags.MatchStart || n.flags.MatchEnd))
+ continue;
+ break;
+ }
+ return seq.length ? seq : null;
+ }
+ else
+ {
+ return node.val;
+ }
+ },
+ reduce_len = function reduce_len(ret, node, state) {
+ if (null != state.ret)
+ {
+ if (-1 === state.ret) ret = -1;
+ else ret += state.ret;
+ return ret;
+ }
+ if (-1 === ret) return ret;
+
+ if (node === +node)
+ {
+ ret += node;
+ return ret;
+ }
+
+ if ((T_SPECIAL === node.type) && node.flags.MatchEnd)
+ {
+ state.stop = 1;
+ return ret;
+ }
+ var type = node.type;
+
+ if (
+ (T_CHARS === type) || (T_CHARRANGE === type) ||
+ (T_UNICODECHAR === type) || (T_HEXCHAR === type) ||
+ ((T_SPECIAL === type) && !node.flags.MatchStart && !node.flags.MatchEnd)
+ )
+ {
+ ret += node.flags.BackReference ? state.group[node.flags.GroupIndex]||0 : 1;
+ }
+ else if (T_STRING === type)
+ {
+ ret += node.val.length;
+ }
+
+ return ret;
+ },
+ reduce_str = function reduce_str(ret, node, state) {
+ if (null != state.ret)
+ {
+ ret += state.ret;
+ return ret;
+ }
+
+ if (is_string(node))
+ {
+ ret += node;
+ return ret;
+ }
+
+ if ((T_SPECIAL === node.type) && node.flags.MatchEnd)
+ {
+ state.stop = 1;
+ return ret;
+ }
+ var type = node.type, sample = null;
+
+ if (T_CHARS === type)
+ {
+ sample = node.val;
+ }
+ else if (T_CHARRANGE === type)
+ {
+ var range = [node.val[0], node.val[1]];
+ if (T_UNICODECHAR === range[0].type || T_HEXCHAR === range[0].type) range[0] = range[0].flags.Char;
+ if (T_UNICODECHAR === range[1].type || T_HEXCHAR === range[1].type) range[1] = range[1].flags.Char;
+ sample = character_range(range);
+ }
+ else if ((T_UNICODECHAR === type) || (T_HEXCHAR === type))
+ {
+ sample = [node.flags.Char];
+ }
+ else if ((T_SPECIAL === type) && !node.flags.MatchStart && !node.flags.MatchEnd)
+ {
+ var part = node.val;
+ if (node.flags.BackReference)
+ {
+ part = node.flags.GroupIndex;
+ ret += HAS.call(state.group, part) ? state.group[part] : '';
+ return ret;
+ }
+ else if ('D' === part)
+ {
+ sample = [digit(false)];
+ }
+ else if ('W' === part)
+ {
+ sample = [word(false)];
+ }
+ else if ('S' === part)
+ {
+ sample = [space(false)];
+ }
+ else if ('d' === part)
+ {
+ sample = [digit()];
+ }
+ else if ('w' === part)
+ {
+ sample = [word()];
+ }
+ else if ('s' === part)
+ {
+ sample = [space()];
+ }
+ else if (('.' === part) && node.flags.MatchAnyChar)
+ {
+ sample = [any()];
+ }
+ else
+ {
+ sample = [ESC + part];
+ }
+ }
+ else if (T_STRING === type)
+ {
+ sample = node.val;
+ }
+
+ if (sample)
+ {
+ ret += T_STRING === type ?
+ (state.isCaseInsensitive ? case_insensitive(sample) : sample) :
+ (character(state.isCaseInsensitive ? case_insensitive(sample, true) : sample, !state.node || !state.node.flags.NegativeMatch))
+ ;
+ }
+
+ return ret;
+ },
+ reduce_src = function reduce_src(ret, node, state) {
+ if (null != state.ret)
+ {
+ if (state.ret.src) ret.src += state.ret.src;
+ if (state.ret.group) ret.group = clone(state.ret.group, ret.group);
+ return ret;
+ }
+
+ if (is_string(node))
+ {
+ ret.src += node;
+ return ret;
+ }
+
+ var type = node.type;
+ if (T_CHARS === type)
+ {
+ ret.src += state.escaped ? esc_re(node.val.join(''), ESC, 1) : node.val.join('');
+ }
+ else if (T_CHARRANGE === type)
+ {
+ var range = [node.val[0], node.val[1]];
+ if (state.escaped)
+ {
+ if (T_UNICODECHAR === range[0].type) range[0] = range[0].flags.UnicodePoint ? ESC+'u{'+range[0].flags.Code+'}' : ESC+'u'+pad(range[0].flags.Code,4);
+ else if (T_HEXCHAR === range[0].type) range[0] = ESC+'x'+pad(range[0].flags.Code,2);
+ else range[0] = esc_re(range[0], ESC, 1);
+ if (T_UNICODECHAR === range[1].type) range[1] = range[1].flags.UnicodePoint ? ESC+'u{'+range[1].flags.Code+'}' : ESC+'u'+pad(range[1].flags.Code,4);
+ else if (T_HEXCHAR === range[1].type) range[1] = ESC+'x'+pad(range[1].flags.Code,2);
+ else range[1] = esc_re(range[1], ESC, 1);
+ }
+ else
+ {
+ if (T_UNICODECHAR === range[0].type || T_HEXCHAR === range[0].type) range[0] = range[0].flags.Char;
+ if (T_UNICODECHAR === range[1].type || T_HEXCHAR === range[1].type) range[1] = range[1].flags.Char;
+ }
+ ret.src += range[0]+'-'+range[1];
+ }
+ else if (T_UNICODECHAR === type)
+ {
+ ret.src += node.flags.UnicodePoint ? ESC+'u{'+node.flags.Code+'}' : (state.escaped ? ESC+'u'+pad(node.flags.Code,4) : node.flags.Char);
+ }
+ else if (T_HEXCHAR === type)
+ {
+ ret.src += state.escaped ? ESC+'x'+pad(node.flags.Code,2) : node.flags.Char;
+ }
+ else if (T_SPECIAL === type)
+ {
+ if (node.flags.BackReference)
+ {
+ if (state.compatibility || (node.flags.GroupIndex === node.flags.GroupName))
+ {
+ ret.src += ESC+node.flags.GroupIndex;
+ }
+ else
+ {
+ ret.src += ESC+'k<'+node.flags.GroupName+'>';
+ }
+ }
+ else
+ {
+ ret.src += node.flags.MatchAnyChar || node.flags.MatchStart || node.flags.MatchEnd ? (''+node.val) : (ESC+node.val);
+ }
+ }
+ else if (T_STRING === type)
+ {
+ ret.src += state.escaped ? esc_re(node.val, ESC) : node.val;
+ }
+
+ return ret;
+ },
+ reduce_peek = function reduce_peek(ret, node, state) {
+ if (null != state.ret)
+ {
+ ret.positive = concat(ret.positive, state.ret.positive);
+ ret.negative = concat(ret.negative, state.ret.negative);
+ return ret;
+ }
+ if ((T_SPECIAL === node.type) && node.flags.MatchEnd)
+ {
+ state.stop = 1;
+ return ret;
+ }
+
+ var type = node.type, inCharGroup = state.node && (T_CHARGROUP === state.node.type),
+ inNegativeCharGroup = inCharGroup && state.node.flags.NegativeMatch,
+ peek = inNegativeCharGroup ? "negative" : "positive";
+
+ if (T_CHARS === type)
+ {
+ ret[peek] = concat(ret[peek], node.val);
+ }
+ else if (T_CHARRANGE === type)
+ {
+ var range = [node.val[0],node.val[1]];
+ if (T_UNICODECHAR === range[0].type || T_HEXCHAR === range[0].type) range[0] = range[0].flags.Char;
+ if (T_UNICODECHAR === range[1].type || T_HEXCHAR === range[1].type) range[1] = range[1].flags.Char;
+ ret[peek] = concat(ret[peek], character_range(range));
+ }
+ else if ((T_UNICODECHAR === type) || (T_HEXCHAR === type))
+ {
+ ret[peek][node.flags.Char] = 1;
+ }
+ else if ((T_SPECIAL === type) && !node.flags.BackReference && !node.flags.MatchStart && !node.flags.MatchEnd)
+ {
+ var part = node.val;
+ if ('D' === part)
+ {
+ ret[inNegativeCharGroup?"positive":"negative"][ '\\d' ] = 1;
+ }
+ else if ('W' === part)
+ {
+ ret[inNegativeCharGroup?"positive":"negative"][ '\\w' ] = 1;
+ }
+ else if ('S' === part)
+ {
+ ret[inNegativeCharGroup?"positive":"negative"][ '\\s' ] = 1;
+ }
+ else if ('B' === part)
+ {
+ ret[inNegativeCharGroup?"positive":"negative"][ '\\b' ] = 1;
+ }
+ else
+ {
+ ret[peek][ESC + part] = 1;
+ }
+ }
+ else if (T_STRING === type)
+ {
+ ret["positive"][node.val[CHAR](0)] = 1;
+ }
+
+ return ret;
+ },
+
+ match_hex = function(s) {
+ var m = false;
+ if ((s.length > 2) && ('x' === s[CHAR](0)))
+ {
+ if (match_char_ranges(HEXDIGITS_RANGES, s, 1, 2, 2)) return [m=s.slice(0,3), m.slice(1)];
+ }
+ return false;
+ },
+ match_unicode = function(s, flags) {
+ var m = false, l;
+ if ((s.length > 3) && ('u' === s[CHAR](0)))
+ {
+ if (flags.u && '{' === s[CHAR](1) && (l=match_char_ranges(HEXDIGITS_RANGES, s, 2, 1, 6)) && '}' === s[CHAR](l+2))
+ {
+ return [m=s.slice(0,l+3), m.slice(2, -1), 1];
+ }
+ else if (l=match_char_ranges(HEXDIGITS_RANGES, s, 1, 4, 4))
+ {
+ return [m=s.slice(0,l+1), m.slice(1), 0];
+ }
+ }
+ return false;
+ },
+ match_repeats = function(s) {
+ var l, sl = s.length, pos = 0, m = false, hasComma = false;
+ if ((sl > 2) && ('{' === s[CHAR](pos)))
+ {
+ m = ['', '', null];
+ ++pos;
+ if (l=match_chars(SPACES, s, pos)) pos += l;
+ if (l=match_char_range(DIGITS_RANGE, s, pos))
+ {
+ m[1] = s.slice(pos, pos+l);
+ pos += l;
+ }
+ else
+ {
+ return false;
+ }
+ if (l=match_chars(SPACES, s, pos)) pos += l;
+ if ((pos < sl) && (',' === s[CHAR](pos))) {pos += 1; hasComma = true;}
+ if (l=match_chars(SPACES, s, pos)) pos += l;
+ if (l=match_char_range(DIGITS_RANGE, s, pos))
+ {
+ m[2] = s.slice(pos, pos+l);
+ pos += l;
+ }
+ if (l=match_chars(SPACES, s, pos)) pos += l;
+ if ((pos < sl) && ('}' === s[CHAR](pos)))
+ {
+ pos++;
+ m[0] = s.slice(0, pos);
+ if (!hasComma) m[2] = m[1];
+ return m;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ return false;
+ },
+ chargroup = function chargroup(re_obj) {
+ var sequence = [], chars = [], allchars = [], flags = {}, flag, ch, lre,
+ prevch = null, range, isRange = false, m, isUnicode, isHex, isSpecial, escaped = false;
+
+ if ('^' === re_obj.re[CHAR](re_obj.pos))
+ {
+ flags["NegativeMatch"] = 1;
+ ++re_obj.pos;
+ }
+
+ lre = re_obj.len;
+ while (re_obj.pos < lre)
+ {
+ isUnicode = false;
+ isHex = false;
+ isSpecial = false;
+ m = null;
+ prevch = ch;
+ ch = re_obj.re[CHAR](re_obj.pos++);
+
+ escaped = ESC === ch;
+ if (escaped) ch = re_obj.re[CHAR](re_obj.pos++);
+
+ if (escaped)
+ {
+ // unicode character
+ if ('u' === ch)
+ {
+ m = match_unicode(re_obj.re.substr(re_obj.pos-1), re_obj.flags);
+ if (m)
+ {
+ re_obj.pos += m[0].length-1;
+ ch = Node(T_UNICODECHAR, m[0], {"Char": m[2] ? fromCodePoint(parseInt(m[1], 16)) : fromCharCode(parseInt(m[1], 16)), "Code": m[1], "UnicodePoint": !!m[2]});
+ isUnicode = true; isHex = false;
+ }
+ }
+
+ // hex character
+ else if ('x' === ch)
+ {
+ m = match_hex(re_obj.re.substr(re_obj.pos-1));
+ if (m)
+ {
+ re_obj.pos += m[0].length-1;
+ ch = Node(T_HEXCHAR, m[0], {"Char": fromCharCode(parseInt(m[1], 16)), "Code": m[1]});
+ isUnicode = true; isHex = true;
+ }
+ }
+
+ // special character
+ else if (HAS.call(specialCharsEscaped, ch) && ('/' !== ch))
+ {
+ isSpecial = true;
+ flag = {};
+ flag[specialCharsEscaped[ch]] = 1;
+ ch = Node(T_SPECIAL, ch, flag);
+ }
+ }
+
+ if (isRange)
+ {
+ if (
+ (ch instanceof Node) &&
+ (ch.type === T_SPECIAL) &&
+ (-1 !== ['s','S','d','D','w','W'].indexOf(ch.val))
+ )
+ {
+ if (range[0] instanceof Node)
+ {
+ sequence.push(range[0]);
+ }
+ else
+ {
+ chars.push(range[0]);
+ }
+ chars.push('-');
+ sequence.push(ch);
+ }
+ else
+ {
+ if (chars.length)
+ {
+ allchars = allchars.concat(chars);
+ chars = [];
+ }
+ range[1] = ch;
+ sequence.push(Node(T_CHARRANGE, range));
+ }
+ isRange = false;
+ }
+ else
+ {
+ if (escaped)
+ {
+ if (isUnicode)
+ {
+ if (chars.length)
+ {
+ allchars = allchars.concat(chars);
+ chars = [];
+ }
+ sequence.push(ch);
+ }
+
+ else if (isSpecial)
+ {
+ if (chars.length)
+ {
+ allchars = allchars.concat(chars);
+ chars = [];
+ }
+ sequence.push(ch);
+ }
+
+ else
+ {
+ chars.push(ch);
+ }
+ }
+
+ else
+ {
+ // end of char group
+ if (']' === ch)
+ {
+ if (chars.length)
+ {
+ allchars = allchars.concat(chars);
+ chars = [];
+ }
+ // map all chars into one node
+ if (allchars.length) sequence.push(Node(T_CHARS, allchars));
+ return Node(T_CHARGROUP, sequence, flags);
+ }
+
+ else if ('-' === ch)
+ {
+ if (
+ null == prevch ||
+ ']' === re_obj.re[CHAR](re_obj.pos) ||
+ (
+ (prevch instanceof Node) &&
+ (prevch.type === T_SPECIAL) &&
+ (-1 !== ['s','S','d','D','w','W'].indexOf(prevch.val))
+ )
+ )
+ {
+ // take it as literal
+ // https://github.com/foo123/RegexAnalyzer/issues/5
+ chars.push(ch);
+ }
+ else
+ {
+ range = [prevch, ''];
+ if (prevch instanceof Node) sequence.pop(); else chars.pop();
+ isRange = true;
+ }
+ }
+
+ else
+ {
+ chars.push(ch);
+ }
+ }
+ }
+ }
+ if (chars.length)
+ {
+ allchars = allchars.concat(chars);
+ chars = [];
+ }
+ // map all chars into one node
+ if (allchars.length) sequence.push(Node(T_CHARS, allchars));
+ return Node(T_CHARGROUP, sequence, flags);
+ },
+
+ analyze_re = function analyze_re(re_obj) {
+ var lre, ch, m, word = '', wordlen = 0,
+ alternation = [], sequence = [], flags = {},
+ flag, escaped = false, pre, pre3, captured;
+
+ if (re_obj.inGroup > 0)
+ {
+ pre = re_obj.re.substr(re_obj.pos, 2);
+ pre3 = re_obj.re.substr(re_obj.pos, 3);
+ captured = 1;
+
+ if ("?P=" === pre3)
+ {
+ flags["BackReference"] = 1;
+ flags["GroupName"] = '';
+ re_obj.pos += 3;
+ lre = re_obj.len;
+ while (re_obj.pos < lre)
+ {
+ ch = re_obj.re[CHAR](re_obj.pos++);
+ if (")" === ch) break;
+ flags["GroupName"] += ch;
+ }
+ flags["GroupIndex"] = HAS.call(re_obj.group, flags["GroupName"]) ? re_obj.group[flags["GroupName"]] : null;
+ return Node(T_SPECIAL, flags["GroupName"], flags);
+ }
+
+ else if ("?#" === pre)
+ {
+ flags["Comment"] = 1;
+ re_obj.pos += 2;
+ word = '';
+ lre = re_obj.len;
+ while (re_obj.pos < lre)
+ {
+ ch = re_obj.re[CHAR](re_obj.pos++);
+ if (")" === ch) break;
+ word += ch;
+ }
+ return Node(T_COMMENT, word);
+ }
+
+ else if ("?:" === pre)
+ {
+ flags["NotCaptured"] = 1;
+ re_obj.pos += 2;
+ captured = 0;
+ }
+
+ else if ("?=" === pre)
+ {
+ flags["LookAhead"] = 1;
+ re_obj.pos += 2;
+ captured = 0;
+ }
+
+ else if ("?!" === pre)
+ {
+ flags["NegativeLookAhead"] = 1;
+ re_obj.pos += 2;
+ captured = 0;
+ }
+
+ else if ("?<=" === pre3)
+ {
+ flags["LookBehind"] = 1;
+ re_obj.pos += 3;
+ captured = 0;
+ }
+
+ else if ("?<!" === pre3)
+ {
+ flags["NegativeLookBehind"] = 1;
+ re_obj.pos += 3;
+ captured = 0;
+ }
+
+ else if (("?<" === pre) || ("?P<" === pre3))
+ {
+ // https://github.com/foo123/RegexAnalyzer/issues/6
+ flags["NamedGroup"] = 1;
+ flags["GroupName"] = '';
+ re_obj.pos += "?<" === pre ? 2 : 3;
+ lre = re_obj.len;
+ while (re_obj.pos < lre)
+ {
+ ch = re_obj.re[CHAR](re_obj.pos++);
+ if (">" === ch) break;
+ flags["GroupName"] += ch;
+ }
+ }
+
+ ++re_obj.index;
+ if (captured)
+ {
+ ++re_obj.groupIndex;
+ flags["GroupIndex"] = re_obj.groupIndex;
+ re_obj.group[flags["GroupIndex"]] = flags["GroupIndex"];
+ if (flags["GroupName"]) re_obj.group[flags["GroupName"]] = flags["GroupIndex"];
+ }
+ }
+
+ lre = re_obj.len;
+ while (re_obj.pos < lre)
+ {
+ ch = re_obj.re[CHAR](re_obj.pos++);
+
+ // \\abc
+ escaped = ESC === ch;
+ if (escaped) ch = re_obj.re[CHAR](re_obj.pos++);
+
+ if (escaped)
+ {
+ // unicode character
+ if ('u' === ch)
+ {
+ m = match_unicode(re_obj.re.substr(re_obj.pos-1), re_obj.flags);
+ if (m)
+ {
+ if (wordlen)
+ {
+ sequence.push(Node(T_STRING, word));
+ word = '';
+ wordlen = 0;
+ }
+ re_obj.pos += m[0].length-1;
+ sequence.push(Node(T_UNICODECHAR, m[0], {"Char": m[2] ? fromCodePoint(parseInt(m[1], 16)) : fromCharCode(parseInt(m[1], 16)), "Code": m[1], "UnicodePoint": !!m[2]}));
+ }
+ else
+ {
+ word += ch;
+ wordlen += 1;
+ }
+ }
+
+ // hex character
+ else if ('x' === ch)
+ {
+ m = match_hex(re_obj.re.substr(re_obj.pos-1));
+ if (m)
+ {
+ if (wordlen)
+ {
+ sequence.push(Node(T_STRING, word));
+ word = '';
+ wordlen = 0;
+ }
+ re_obj.pos += m[0].length-1;
+ sequence.push(Node(T_HEXCHAR, m[0], {"Char": fromCharCode(parseInt(m[1], 16)), "Code": m[1]}));
+ }
+ else
+ {
+ word += ch;
+ wordlen += 1;
+ }
+ }
+
+ // js back-reference
+ else if ('k' === ch && '<' === re_obj.re[CHAR](re_obj.pos))
+ {
+ // https://github.com/foo123/RegexAnalyzer/issues/6
+ if (wordlen)
+ {
+ sequence.push(Node(T_STRING, word));
+ word = '';
+ wordlen = 0;
+ }
+ re_obj.pos++;
+ word = '';
+ while (re_obj.pos < lre)
+ {
+ ch = re_obj.re[CHAR](re_obj.pos);
+ if ('>' === ch) {re_obj.pos++; break;}
+ else {word += ch; re_obj.pos++;}
+ }
+ flag = {};
+ flag["BackReference"] = 1;
+ flag["GroupName"] = word;
+ flag["GroupIndex"] = HAS.call(re_obj.group, word) ? re_obj.group[word] : null;
+ sequence.push(Node(T_SPECIAL, word, flag));
+ word = '';
+ }
+
+ else if (HAS.call(specialCharsEscaped, ch) && ('/' !== ch))
+ {
+ if (wordlen)
+ {
+ sequence.push( Node(T_STRING, word) );
+ word = '';
+ wordlen = 0;
+ }
+ flag = {};
+ flag[ specialCharsEscaped[ch] ] = 1;
+ sequence.push( Node(T_SPECIAL, ch, flag) );
+ }
+
+ else if (('1' <= ch) && ('9' >= ch))
+ {
+ if (wordlen)
+ {
+ sequence.push(Node(T_STRING, word));
+ word = '';
+ wordlen = 0;
+ }
+ word = ch;
+ while (re_obj.pos < lre)
+ {
+ ch = re_obj.re[CHAR](re_obj.pos);
+ if (('0' <= ch) && ('9' >= ch)) {word += ch; re_obj.pos++;}
+ else break;
+ }
+ flag = {};
+ flag['BackReference'] = 1;
+ flag['GroupName'] = word;
+ flag['GroupIndex'] = parseInt(word, 10);
+ sequence.push(Node(T_SPECIAL, word, flag));
+ word = '';
+ }
+
+ else
+ {
+ word += ch;
+ wordlen += 1;
+ }
+ }
+
+ else
+ {
+ // group end
+ if ((re_obj.inGroup > 0) && (')' === ch))
+ {
+ if (wordlen)
+ {
+ sequence.push(Node(T_STRING, word));
+ word = '';
+ wordlen = 0;
+ }
+ if (alternation.length)
+ {
+ alternation.push(Node(T_SEQUENCE, sequence));
+ sequence = [];
+ flag = {};
+ flag[specialChars['|']] = 1;
+ return Node(T_GROUP, Node(T_ALTERNATION, alternation, flag), flags);
+ }
+ else
+ {
+ return Node(T_GROUP, Node(T_SEQUENCE, sequence), flags);
+ }
+ }
+
+ // parse alternation
+ else if ('|' === ch)
+ {
+ if (wordlen)
+ {
+ sequence.push(Node(T_STRING, word));
+ word = '';
+ wordlen = 0;
+ }
+ alternation.push(Node(T_SEQUENCE, sequence));
+ sequence = [];
+ }
+
+ // parse character group
+ else if ('[' === ch)
+ {
+ if (wordlen)
+ {
+ sequence.push(Node(T_STRING, word));
+ word = '';
+ wordlen = 0;
+ }
+ sequence.push(chargroup(re_obj));
+ }
+
+ // parse sub-group
+ else if ('(' === ch)
+ {
+ if (wordlen)
+ {
+ sequence.push(Node(T_STRING, word));
+ word = '';
+ wordlen = 0;
+ }
+ re_obj.inGroup += 1;
+ sequence.push(analyze_re(re_obj));
+ re_obj.inGroup -= 1;
+ }
+
+ // parse num repeats
+ else if ('{' === ch)
+ {
+ if (wordlen)
+ {
+ sequence.push(Node(T_STRING, word));
+ word = '';
+ wordlen = 0;
+ }
+ m = match_repeats(re_obj.re.substr(re_obj.pos-1));
+ re_obj.pos += m[0].length-1;
+ flag = {val: m[0], "MatchMinimum": m[1], "MatchMaximum": m[2] || "unlimited", "min": parseInt(m[1],10), "max": m[2] ? parseInt(m[2],10) : -1};
+ flag[specialChars[ch]] = 1;
+ if ((re_obj.pos < lre) && ('?' === re_obj.re[CHAR](re_obj.pos)))
+ {
+ flag["isGreedy"] = 0;
+ re_obj.pos++;
+ }
+ else
+ {
+ flag["isGreedy"] = 1;
+ }
+ var prev = sequence.pop();
+ if ((T_STRING === prev.type) && (prev.val.length > 1))
+ {
+ sequence.push(Node(T_STRING, prev.val.slice(0, -1)));
+ prev.val = prev.val.slice(-1);
+ }
+ sequence.push(Node(T_QUANTIFIER, prev, flag));
+ }
+
+ // quantifiers
+ else if (('*' === ch) || ('+' === ch) || ('?' === ch))
+ {
+ if (wordlen)
+ {
+ sequence.push(Node(T_STRING, word));
+ word = '';
+ wordlen = 0;
+ }
+ flag = {};
+ flag[specialChars[ch]] = 1;
+ flag["min"] = '+' === ch ? 1 : 0;
+ flag["max"] = '?' === ch ? 1 : -1;
+ if ((re_obj.pos < lre) && ('?' === re_obj.re[CHAR](re_obj.pos)))
+ {
+ flag["isGreedy"] = 0;
+ re_obj.pos++;
+ }
+ else
+ {
+ flag["isGreedy"] = 1;
+ }
+ var prev = sequence.pop();
+ if ((T_STRING === prev.type) && (prev.val.length > 1))
+ {
+ sequence.push(Node(T_STRING, prev.val.slice(0, -1)));
+ prev.val = prev.val.slice(-1);
+ }
+ sequence.push(Node(T_QUANTIFIER, prev, flag));
+ }
+
+ // special characters like ^, $, ., etc..
+ else if (HAS.call(specialChars,ch))
+ {
+ if (wordlen)
+ {
+ sequence.push(Node(T_STRING, word));
+ word = '';
+ wordlen = 0;
+ }
+ flag = {};
+ flag[specialChars[ch]] = 1;
+ sequence.push(Node(T_SPECIAL, ch, flag));
+ }
+
+ else
+ {
+ word += ch;
+ wordlen += 1;
+ }
+ }
+ }
+
+ if (wordlen)
+ {
+ sequence.push(Node(T_STRING, word));
+ word = '';
+ wordlen = 0;
+ }
+
+ if (alternation.length)
+ {
+ alternation.push(Node(T_SEQUENCE, sequence));
+ sequence = [];
+ flag = {};
+ flags[specialChars['|']] = 1;
+ return Node(T_ALTERNATION, alternation, flag);
+ }
+ return Node(T_SEQUENCE, sequence);
+ }
+;
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
+// https://docs.python.org/3/library/re.html
+// http://php.net/manual/en/reference.pcre.pattern.syntax.php
+// A simple regular expression analyzer
+function Analyzer(re, delim, flavor)
+{
+ if (!(this instanceof Analyzer)) return new Analyzer(re, delim, flavor);
+ if (re) this.input(re, delim, flavor);
+}
+Analyzer.VERSION = __version__;
+Analyzer[PROTO] = {
+
+ constructor: Analyzer,
+
+ ast: null,
+ flavor: '',
+ re: null,
+ fl: null,
+ src: null,
+ grp: null,
+ min: null,
+ max: null,
+ ch: null,
+ bc: true,
+
+ dispose: function() {
+ var self = this;
+ self.ast = null;
+ self.flavor = null;
+ self.re = null;
+ self.fl = null;
+ self.src = null;
+ self.grp = null;
+ self.min = null;
+ self.max = null;
+ self.ch = null;
+ return self;
+ },
+
+ reset: function() {
+ var self = this;
+ self.ast = null;
+ self.src = null;
+ self.grp = null;
+ self.min = null;
+ self.max = null;
+ self.ch = null;
+ return self;
+ },
+
+ backwardsCompatible: function(enable) {
+ this.bc = !!enable;
+ return this;
+ },
+
+ input: function(re, delim, flavor) {
+ var self = this;
+ if (!arguments.length) return self.re;
+ if (re)
+ {
+ delim = false === delim ? false : (delim || '/');
+ var l, ch, fl = {};
+ re = re.toString();
+ l = re.length;
+
+ if (delim)
+ {
+ // parse re flags, if any
+ while (0 < l)
+ {
+ ch = re[CHAR](l-1);
+ if (delim === ch) break;
+ else {fl[ch] = 1; --l;}
+ }
+
+ if (0 < l)
+ {
+ // remove re delimiters
+ if ((delim === re[CHAR](0)) && (delim === re[CHAR](l-1))) re = re.slice(1, l-1);
+ else re = re.slice(0, l);
+ }
+ else
+ {
+ re = '';
+ }
+ }
+
+ // re is different, reset the ast, etc
+ if (self.re !== re) self.reset();
+ self.re = re; self.fl = fl; self.flavor = String(flavor || '');
+ }
+ return self;
+ },
+
+ analyze: function() {
+ var self = this;
+ if ((null != self.re) && (null === self.ast))
+ {
+ var re = new RE_OBJ(self.re, self.fl, self.flavor);
+ self.ast = analyze_re(re);
+ re.dispose();
+ }
+ return self;
+ },
+
+ synthesize: function(escaped) {
+ var self = this, state, re;
+ if (null == self.re) return self;
+ if (null === self.ast)
+ {
+ self.analyze();
+ self.src = null;
+ self.grp = null;
+ }
+ if (null === self.src)
+ {
+ state = {
+ MAP : T_SEQUENCE|T_ALTERNATION|T_GROUP|T_CHARGROUP|T_QUANTIFIER,
+ REDUCE : T_UNICODECHAR|T_HEXCHAR|T_SPECIAL|T_CHARS|T_CHARRANGE|T_STRING,
+ IGNORE : T_COMMENT,
+ map : map_src,
+ reduce : reduce_src,
+ escaped : false !== escaped,
+ compatibility : self.bc,
+ group : {}
+ };
+ re = walk({src:'',group:{}}, self.ast, state);
+ self.src = re.src; self.grp = re.group;
+ }
+ return self;
+ },
+
+ source: function() {
+ var self = this;
+ if (null == self.re) return null;
+ if (null === self.src) self.synthesize();
+ return self.src;
+ },
+
+ groups: function(raw) {
+ var self = this;
+ if (null == self.re) return null;
+ if (null === self.grp) self.synthesize();
+ return true === raw ? sel.grp : clone(self.grp);
+ },
+
+ compile: function(flags, notBackwardsCompatible) {
+ var self = this;
+ if (null == self.re) return null;
+ flags = flags || self.fl || {};
+ return new RegExp(self.source(), (flags.g||flags.G?'g':'')+(flags.i||flags.I?'i':'')+(flags.m||flags.M?'m':'')+(flags.y||flags.Y?'y':'')+(flags.u?'u':'')+(flags.d?'d':'')+(flags.s?'s':''));
+ },
+
+ tree: function(flat) {
+ var self = this;
+ if (null == self.re) return null;
+ if (null === self.ast) self.analyze();
+ return true===flat ? self.ast.toObject() : self.ast;
+ },
+
+ // experimental feature
+ sample: function(maxlen, numsamples) {
+ var self = this, state;
+ if (null == self.re) return null;
+ if (null === self.ast) self.analyze();
+ state = {
+ MAP : T_SEQUENCE|T_ALTERNATION|T_GROUP|T_CHARGROUP|T_QUANTIFIER,
+ REDUCE : T_UNICODECHAR|T_HEXCHAR|T_SPECIAL|T_CHARS|T_CHARRANGE|T_STRING,
+ IGNORE : T_COMMENT,
+ map : map_any,
+ reduce : reduce_str,
+ maxLength : (maxlen|0) || 1,
+ isCaseInsensitive : null != self.fl.i,
+ group : {}
+ };
+ numsamples = (numsamples|0) || 1;
+ if (1 < numsamples)
+ {
+ var samples = new Array(numsamples);
+ for (var i=0; i<numsamples; ++i) samples[i] = walk('', self.ast, state);
+ return samples;
+ }
+ return walk('', self.ast, state);
+ },
+
+ // experimental feature
+ minimum: function() {
+ var self = this, state;
+ if (null == self.re) return 0;
+ if (null === self.ast)
+ {
+ self.analyze( );
+ self.min = null;
+ }
+ if (null === self.min)
+ {
+ state = {
+ MAP : T_SEQUENCE|T_ALTERNATION|T_GROUP|T_CHARGROUP|T_QUANTIFIER,
+ REDUCE : T_UNICODECHAR|T_HEXCHAR|T_SPECIAL|T_CHARS|T_CHARRANGE|T_STRING,
+ IGNORE : T_COMMENT,
+ map : map_min,
+ reduce : reduce_len,
+ group : {}
+ };
+ self.min = walk(0, self.ast, state)|0;
+ }
+ return self.min;
+ },
+
+ // experimental feature
+ maximum: function() {
+ var self = this, state;
+ if (null == self.re) return 0;
+ if (null === self.ast)
+ {
+ self.analyze();
+ self.max = null;
+ }
+ if (null === self.max)
+ {
+ state = {
+ MAP : T_SEQUENCE|T_ALTERNATION|T_GROUP|T_CHARGROUP|T_QUANTIFIER,
+ REDUCE : T_UNICODECHAR|T_HEXCHAR|T_SPECIAL|T_CHARS|T_CHARRANGE|T_STRING,
+ IGNORE : T_COMMENT,
+ map : map_max,
+ reduce : reduce_len,
+ group : {}
+ };
+ self.max = walk(0, self.ast, state);
+ }
+ return self.max;
+ },
+
+ // experimental feature
+ peek: function() {
+ var self = this, state, isCaseInsensitive, peek, n, c, p, cases;
+ if (null == self.re) return null;
+ if (null === self.ast)
+ {
+ self.analyze();
+ self.ch = null;
+ }
+ if (null === self.ch)
+ {
+ state = {
+ MAP : T_SEQUENCE|T_ALTERNATION|T_GROUP|T_CHARGROUP|T_QUANTIFIER,
+ REDUCE : T_UNICODECHAR|T_HEXCHAR|T_SPECIAL|T_CHARS|T_CHARRANGE|T_STRING,
+ IGNORE : T_COMMENT,
+ map : map_1st,
+ reduce : reduce_peek,
+ group : {},
+ };
+ self.ch = walk({positive:{},negative:{}}, self.ast, state);
+ }
+ peek = {positive:clone(self.ch.positive), negative:clone(self.ch.negative)};
+ isCaseInsensitive = null != self.fl.i;
+ for (n in peek)
+ {
+ cases = {};
+ // either positive or negative
+ p = peek[n];
+ for (c in p)
+ {
+ if ('\\d' === c)
+ {
+ delete p[c];
+ cases = concat(cases, character_range('0', '9'));
+ }
+
+ else if ('\\s' === c)
+ {
+ delete p[c];
+ cases = concat(cases, ['\f','\n','\r','\t','\v','\u00A0','\u2028','\u2029']);
+ }
+
+ else if ('\\w' === c)
+ {
+ delete p[c];
+ cases = concat(cases, ['_'].concat(character_range('0', '9')).concat(character_range('a', 'z')).concat(character_range('A', 'Z')));
+ }
+
+ else if ('\\b' === c)
+ {
+ delete p[c];
+ cases[ specialChars['b'] ] = 1;
+ }
+
+ else if ('\\.' === c)
+ {
+ delete p[c];
+ cases[ specialChars['.'] ] = 1;
+ }
+
+ /*else if ('\\^' === c)
+ {
+ delete p[c];
+ cases[ specialChars['^'] ] = 1;
+ }
+
+ else if ('\\$' === c)
+ {
+ delete p[c];
+ cases[ specialChars['$'] ] = 1;
+ }*/
+
+ else if ( (ESC !== c[CHAR](0)) && isCaseInsensitive )
+ {
+ cases[ c.toLowerCase() ] = 1;
+ cases[ c.toUpperCase() ] = 1;
+ }
+
+ else if ( ESC === c[CHAR](0) )
+ {
+ delete p[c];
+ }
+ }
+ peek[n] = concat(p, cases);
+ }
+ return peek;
+ }
+};
+// alias
+Analyzer[PROTO].set = Analyzer[PROTO].input;
+/*
+// custom method to access named groups feature, if any
+RegExp[PROTO].$group = null;
+RegExp[PROTO].group = function( group ){
+ group = group || 0;
+ return this.$group && this.$group.hasOwnProperty(group) ? this.$group[group] : group;
+};
+*/
+
+// A simple regular expression composer
+function Composer()
+{
+ var self = this;
+ if (!(self instanceof Composer)) return new Composer();
+ self.re = null;
+ self.reset();
+}
+Composer.VERSION = __version__;
+Composer[PROTO] = {
+
+ constructor: Composer,
+
+ re: null,
+ g: 0,
+ grp: null,
+ level: 0,
+ ast: null,
+
+ dispose: function() {
+ var self = this;
+ self.re = null;
+ self.g = null;
+ self.grp = null;
+ self.level = null;
+ self.ast = null;
+ return self;
+ },
+
+ reset: function() {
+ var self = this;
+ self.g = 0;
+ self.grp = {};
+ self.level = 0;
+ self.ast = [{node: [], type: T_SEQUENCE, flag: ''}];
+ return self;
+ },
+
+ compose: function(/* flags */) {
+ var self = this,
+ fl = slice(arguments).join(''),
+ src = self.ast[0].node.join('');
+ self.re = {
+ source : src,
+ flags : fl,
+ groups : self.grp,
+ pattern : RE(src, fl)
+ };
+ self.reset();
+ return self.re;
+ },
+
+ partial: function(reset) {
+ var self = this, re = self.ast[0].node.join('');
+ if (false !== reset) self.reset();
+ return re;
+ },
+
+ token: function(token, escaped) {
+ var self = this;
+ if (null != token)
+ self.ast[self.level].node.push(escaped ? esc_re(String(token), ESC) : String(token));
+ return self;
+ },
+
+ literal: function(literal) {
+ return this.token(String(literal), true);
+ },
+
+ regexp: function(re) {
+ return this.token(String(re), false);
+ },
+
+ SOL: function() {
+ var self = this;
+ self.ast[self.level].node.push('^');
+ return self;
+ },
+
+ SOF: function() {
+ return this.SOL();
+ },
+
+ EOL: function() {
+ var self = this;
+ self.ast[self.level].node.push('$');
+ return self;
+ },
+
+ EOF: function() {
+ return this.EOL();
+ },
+
+ LF: function() {
+ var self = this;
+ self.ast[self.level].node.push(ESC+'n');
+ return self;
+ },
+
+ CR: function() {
+ var self = this;
+ self.ast[self.level].node.push(ESC+'r');
+ return self;
+ },
+
+ TAB: function() {
+ var self = this;
+ self.ast[self.level].node.push(ESC+'t');
+ return self;
+ },
+
+ CTRL: function(code) {
+ var self = this;
+ self.ast[self.level].node.push(ESC+'c'+(code||0));
+ return self;
+ },
+
+ HEX: function(code) {
+ var self = this;
+ self.ast[self.level].node.push(ESC+'x'+pad(code||0, 2));
+ return self;
+ },
+
+ UNICODE: function(code, uni) {
+ var self = this;
+ self.ast[self.level].node.push(true === uni ? ESC+'u{'+String(code||0)+'}' : ESC+'u'+pad(code||0, 4));
+ return self;
+ },
+
+ backSpace: function() {
+ var self = this;
+ self.ast[self.level].node.push('['+ESC+'b]');
+ return self;
+ },
+
+ any: function(multiline) {
+ var self = this;
+ self.ast[self.level].node.push(multiline ? '['+ESC+'s'+ESC+'S]' : '.');
+ return self;
+ },
+
+ space: function(positive) {
+ var self = this;
+ if (arguments.length < 1) positive = true;
+ self.ast[self.level].node.push(!positive ? ESC+'S' : ESC+'s');
+ return self;
+ },
+
+ digit: function(positive) {
+ var self = this;
+ if (arguments.length < 1) positive = true;
+ self.ast[self.level].node.push(!positive ? ESC+'D' : ESC+'d');
+ return self;
+ },
+
+ word: function(positive) {
+ var self = this;
+ if (arguments.length < 1) positive = true;
+ self.ast[self.level].node.push(!positive ? ESC+'W' : ESC+'w');
+ return self;
+ },
+
+ boundary: function(positive) {
+ var self = this;
+ if (arguments.length < 1) positive = true;
+ self.ast[self.level].node.push(!positive ? ESC+'B' : ESC+'b');
+ return self;
+ },
+
+ characters: function() {
+ var self = this;
+ if (T_CHARGROUP === self.ast[self.level].type)
+ self.ast[self.level].node.push(getArgs(arguments,1).map(function(c){ return esc_re(String(c), ESC, 1); }).join(''));
+ return self;
+ },
+
+ range: function(start, end) {
+ var self = this;
+ if (null != start && null != end && T_CHARGROUP === self.ast[self.level].type)
+ self.ast[self.level].node.push(esc_re(String(start), ESC, 1)+'-'+esc_re(String(end), ESC, 1));
+ return self;
+ },
+
+ backReference: function(n) {
+ var self = this;
+ self.ast[self.level].node.push(ESC+(HAS.call(self.grp, n) ? self.grp[n] : n|0));
+ return self;
+ },
+
+ repeat: function(min, max, greedy) {
+ var self = this;
+ if (null == min) return self;
+ if (arguments.length < 3) greedy = true;
+ var repeat = (null==max || min===max ? ('{'+String(min)+'}') : ('{'+String(min)+','+String(max)+'}')) + (!greedy ? '?' : '');
+ self.ast[self.level].node[self.ast[self.level].node.length-1] += repeat;
+ return self;
+ },
+
+ zeroOrOne: function(greedy) {
+ var self = this;
+ if (arguments.length < 1) greedy = true;
+ self.ast[self.level].node[self.ast[self.level].node.length-1] += (!greedy ? '??' : '?');
+ return self;
+ },
+
+ zeroOrMore: function(greedy) {
+ var self = this;
+ if (arguments.length < 1) greedy = true;
+ self.ast[self.level].node[self.ast[self.level].node.length-1] += (!greedy ? '*?' : '*');
+ return self;
+ },
+
+ oneOrMore: function(greedy) {
+ var self = this;
+ if (arguments.length < 1) greedy = true;
+ self.ast[self.level].node[self.ast[self.level].node.length-1] += (!greedy ? '+?' : '+');
+ return self;
+ },
+
+ alternate: function() {
+ var self = this;
+ self.level++;
+ self.ast.push({node: [], type: T_ALTERNATION, flag: '', sequences: []});
+ return self;
+ },
+
+ either: function() {
+ return this.alternate();
+ },
+
+ or_: function() {
+ var self = this, ast = self.ast[self.level];
+ if ((T_ALTERNATION === ast.type) && ast.node.length)
+ {
+ ast.sequences.push(ast.node.join(''));
+ ast.node = [];
+ }
+ return self;
+ },
+
+ group: function(opts, v) {
+ var self = this, type = T_GROUP, fl = '';
+ if (is_string(opts))
+ {
+ fl = opts; opts = {};
+ opts[fl] = v; fl = '';
+ }
+ else
+ {
+ opts = opts || {};
+ }
+ if (!!opts['name'] || !!opts['named'])
+ {
+ self.g++;
+ self.grp[self.g] = self.g;
+ self.grp[opts.name||opts.named] = self.g;
+ }
+ else if ((true === opts['lookahead']) || (false === opts['lookahead']))
+ {
+ fl = false === opts['lookahead'] ? '?!' : '?=';
+ }
+ else if ((true === opts['lookbehind']) || (false === opts['lookbehind']))
+ {
+ fl = false === opts['lookbehind'] ? '?<!' : '?<=';
+ }
+ else if (true === opts['nocapture'])
+ {
+ fl = '?:';
+ }
+ else if ((true === opts['characters']) || (false === opts['characters']))
+ {
+ type = T_CHARGROUP;
+ fl = false === opts['characters'] ? '^' : '';
+ }
+ else
+ {
+ self.g++;
+ self.grp[self.g] = self.g;
+ }
+ self.level++;
+ self.ast.push({node: [], type: type, flag: fl});
+ return self;
+ },
+
+ subGroup: function(opts) {
+ return this.group(opts);
+ },
+
+ characterGroup: function(positive) {
+ return this.group({'characters':false!==positive});
+ },
+
+ namedGroup: function(name) {
+ return this.group({'name':name});
+ },
+
+ nonCaptureGroup: function() {
+ return this.group({'nocapture':true});
+ },
+
+ lookAheadGroup: function(positive) {
+ return this.group({'lookahead':false!==positive});
+ },
+
+ lookBehindGroup: function(positive) {
+ return this.group({'lookbehind':false!==positive});
+ },
+
+ end: function(n) {
+ var self = this, prev, type, flag, part, sequences;
+ n = (arguments.length ? n|0 : 1) || 1;
+ // support ending multiple blocks at once
+ while (n--)
+ {
+ prev = self.ast.length ? self.ast.pop() : null;
+ type = prev ? prev.type : 0;
+ flag = prev ? prev.flag : '';
+ part = prev ? prev.node : [];
+ if (T_ALTERNATION === type)
+ {
+ sequences = prev ? prev.sequences : [];
+ part = !part.length ? sequences : sequences.concat(part.join(''));
+ }
+ if (0 < self.level)
+ {
+ --self.level;
+ if (T_ALTERNATION === type)
+ self.ast[self.level].node.push(part.join('|'));
+ else if (T_GROUP === type)
+ self.ast[self.level].node.push('('+flag+part.join('')+')');
+ else if (T_CHARGROUP === type)
+ self.ast[self.level].node.push('['+flag+part.join('')+']');
+ else
+ self.ast[self.level].node.push(part.join(''));
+ }
+ }
+ return self;
+ }
+};
+// aliases
+var CP = Composer[PROTO];
+CP.startOfLine = CP.SOL;
+CP.endOfLine = CP.EOL;
+CP.startOfInput = CP.SOF;
+CP.endOfInput = CP.EOF;
+CP.match = CP.token;
+CP.sub = CP.regexp;
+CP.lineFeed = CP.LF;
+CP.carriageReturn = CP.CR;
+CP.tabulate = CP.TAB;
+CP.wordBoundary = CP.boundary;
+CP.chars = CP.characters;
+CP.charGroup = CP.characterGroup;
+CP.namedSubGroup = CP.namedGroup;
+CP.nonCaptureSubGroup = CP.nonCaptureGroup;
+CP.lookAheadSubGroup = CP.lookAheadGroup;
+CP.lookBehindSubGroup = CP.lookBehindGroup;
+
+var Regex = {
+ VERSION : __version__,
+ Node : Node,
+ Analyzer : Analyzer,
+ Composer : Composer
+};
+/* export the module */
+return Regex;
+})();
diff --git a/src/logger-ui.html b/src/logger-ui.html
new file mode 100644
index 0000000..33ffd24
--- /dev/null
+++ b/src/logger-ui.html
@@ -0,0 +1,232 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=560, initial-scale=1">
+<link rel="stylesheet" href="css/themes/default.css">
+<link rel="stylesheet" href="css/common.css">
+<link rel="stylesheet" href="css/fa-icons.css">
+<link rel="stylesheet" href="css/logger-ui.css">
+<link rel="stylesheet" href="css/logger-ui-inspector.css">
+<link rel="shortcut icon" type="image/png" href="img/icon_64.png">
+<title data-i18n="statsPageName"></title>
+<style id="vwRendererRuntimeStyles"></style>
+</head>
+<body>
+
+<div class="permatoolbar">
+ <div>
+ <select id="pageSelector">
+ <option value="0" data-i18n="logAll">
+ <option value="-1" data-i18n="logBehindTheScene">
+ <option value="_" data-i18n="loggerCurrentTab">
+ </select>
+ <button id="refresh" class="iconified notext disabled needdom" data-i18n-title="loggerReloadTip" type="button"><span class="fa-icon">refresh</span><span class="hover"></span></button>
+ <button id="showdom" class="iconified notext disabled needdom" data-i18n-title="loggerDomInspectorTip" type="button"><span class="fa-icon">code</span><span class="hover"></span></button>
+ <button id="showpopup" class="iconified notext disabled needdom" data-i18n-title="loggerPopupPanelTip" type="button"><span class="fa-icon"><svg><use href="/img/ublock-defs.svg#ubo-solid"></use></svg></span><span class="hover"></span></button>
+ </div>
+ <div>
+ <a id="info" class="button fa-icon" href="https://github.com/gorhill/uBlock/wiki/The-logger" target="_blank" data-i18n-title="loggerInfoTip">info-circle</a>
+ </div>
+</div>
+
+<div id="inspectors">
+ <div id="domInspector" class="inspector hCompact">
+ <div class="permatoolbar">
+ <div>
+ <button class="iconified notext vExpandToggler"><span class="fa-icon">double-angle-up</span><span class="hover"></span></button>
+ <button class="iconified notext vCompactToggler"><span class="fa-icon">double-angle-up</span><span class="hover"></span></button>
+ <button class="iconified notext hCompactToggler"><span class="fa-icon">double-angle-left</span><span class="hover"></span></button>
+ <button class="iconified notext revert disabled"><span class="fa-icon">eraser</span><span class="hover"></span></button>
+ <button class="iconified notext commit disabled"><span class="fa-icon">floppy-o</span><span class="hover"></span></button>
+ </div>
+ </div>
+ <div class="vscrollable">
+ <ul id="domTree"></ul>
+ </div>
+ </div>
+ <div id="netInspector" class="inspector f">
+ <div class="permatoolbar">
+ <div>
+ <button class="iconified notext vCompactToggler"><span class="fa-icon">double-angle-up</span><span class="hover"></span></button>
+ <button id="clean" class="iconified notext disabled"><span class="fa-icon">times</span><span class="hover"></span></button>
+ <button id="clear" class="iconified notext disabled" data-i18n-title="loggerClearTip"><span class="fa-icon">eraser</span><span class="hover"></span></button>
+ <button id="pause" class="iconified notext"><span class="fa-icon" data-i18n-title="loggerPauseTip">pause-circle-o</span><span class="fa-icon" data-i18n-title="loggerUnpauseTip">play-circle-o</span><span class="hover"></span></button>
+ <span id="filterExprGroup">
+ <button id="filterButton" class="iconified notext" data-i18n-title="loggerRowFiltererButtonTip"><span class="fa-icon">filter</span><span class="hover"></span></button>
+ <span id="filterInput">
+ <input type="search" placeholder="logFilterPrompt" spellcheck="false">
+ <span id="filterExprButton" class="button fa-icon expanded" data-i18n-title="loggerRowFiltererBuiltinTip">angle-up</span>
+ <div id="filterExprPicker">
+ <div><span data-filtex="!" data-i18n="loggerRowFiltererBuiltinNot"></span><span data-filtex="\t--\t|\t<<\t|\t##" data-i18n="loggerRowFiltererBuiltinBlocked"></span><span data-filtex="\t\+\+\t|\t\*\*\t|\t#@#" data-i18n="loggerRowFiltererBuiltinAllowed"></span><span data-filtex="[$,](?:csp|permissions|removeparam|redirect-rule|replace|urltransform)=|\t\<\<\t" data-i18n="loggerRowFiltererBuiltinModified"></span></div>
+ <div><span data-filtex="!" data-i18n="loggerRowFiltererBuiltinNot"></span>
+ <span style="flex-direction: column;">
+ <div><span data-filtex="\t(?:css|(?:inline-)?font)\t">css/font</span><span data-filtex="\timage\t">image</span><span data-filtex="\tmedia\t">media</span><span data-filtex="\t(?:inline-)?script(?:ing)?\t">script</span></div>
+ <div><span data-filtex="\t(?:websocket|xhr)\t">xhr</span><span data-filtex="\t(?:frame|object)\t">frame</span><span data-filtex="\t(?:dom|g(?:eneric)?hide|s(?:pecific)?hide)\t">dom</span><span data-filtex="\t(?:scriptlet)\t">scriptlet</span><span data-filtex="\t(?:beacon|csp_report|doc|ping|popup|popunder|other)\t">other</span></div>
+ </span>
+ </div>
+ <div><span data-filtex="!" data-i18n="loggerRowFiltererBuiltinNot"></span><span data-filtex="\t(?:0,)?1\t" data-i18n="loggerRowFiltererBuiltin1p"></span><span data-filtex="\t(?:3(?:,\d)?|0,3)\t" data-i18n="loggerRowFiltererBuiltin3p"></span><span data-filtex="\t0,\d\t">tabless</span></div>
+ <div><span data-filtex="!" data-i18n="loggerRowFiltererBuiltinNot"></span><span data-filtex="\tget\t">get</span><span data-filtex="\thead\t">head</span><span data-filtex="\tpost\t">post</span></div>
+ <div><span data-filtex="!" data-i18n="loggerRowFiltererBuiltinNot" class="on"></span>
+ <span style="flex-direction: column;">
+ <div><span data-filtex="\bcsp=[^\t]+\t(?:--|\+\+)\t">csp</span><span data-filtex="\bpermissions=[^\t]+\t(?:--|\+\+)\t" class="on">permissions</span><span data-filtex="\bredirect-rule=[^\t]+\t(?:--|\+\+)\t">redirect</span></div>
+ <div><span data-filtex="\bremoveparam=[^\t]+\t(?:--|\+\+)\t">removeparam</span><span data-filtex="\burltransform=[^\t]+\t(?:--|\+\+)\t">urltransform</span></div>
+ </span>
+ </div>
+ <div id="filterExprCnameOf" style="display:none"><span data-filtex="!" data-i18n="loggerRowFiltererBuiltinNot"></span><span data-filtex="\taliasURL=.">CNAME</span></div>
+ </div>
+ </span>
+ </span>
+ </div>
+ <div>
+ <button id="loggerStats" class="iconified notext" style="display: none;"><span class="fa-icon">bar-chart</span><span class="hover"></span></button>
+ <button id="loggerExport" class="iconified notext"><span class="fa-icon">clipboard</span><span class="hover"></span></button>
+ <button id="loggerSettings" class="iconified notext"><span class="fa-icon">cog</span><span class="hover"></span></button>
+ </div>
+ </div>
+ <div class="vscrollable">
+ <div id="vwRenderer">
+ <div id="vwScroller">
+ <div id="vwVirtualContent">
+ <div id="vwContent"></div>
+ </div>
+ </div>
+ <div id="vwLineSizer">
+ <div class="logEntry oneLine"><div><span>00:00:00</span><span>&nbsp;</span><span>**</span><span>&nbsp;</span><span>3,3</span><span>options</span><span>inline-script</span><span>&nbsp;</span></div></div>
+ </div>
+ </div>
+ </div>
+ <div class="entryTools" style="right:10%;top:20%"></div>
+ </div>
+ <iframe id="popupContainer"></iframe>
+</div>
+
+<div id="modalOverlay">
+ <div>
+ <div class="closeButton"><svg viewBox="0 0 64 64"><path d="M 16 16 L 48 48 M 16 48 L 48 16" /></svg></div>
+ <div id="modalOverlayContainer"></div>
+ </div>
+</div>
+
+<div id="templates" style="display: none;">
+ <div id="logEntryTemplate"><div><span></span>&#8203;<span></span>&#8203;<span></span>&#8203;<span></span>&#8203;<span></span>&#8203;<span></span>&#8203;<span></span>&#8203;<span></span></div></div>
+
+ <div class="netFilteringDialog" data-pane="details">
+ <div class="dialogControls">
+ <div class="moveBand"></div>
+ <div class="closeButton"><svg viewBox="0 0 64 64"><path d="M 16 16 L 48 48 M 16 48 L 48 16" /></div>
+ </div>
+ <div class="hide preview"><span>click to preview</span></div>
+ <div class="headers">
+ &ensp;
+ <span class="header details" data-pane="details" data-i18n="loggerEntryDetailsHeader"></span>
+ <span class="header dynamic" data-pane="dynamic" data-i18n="loggerURLFilteringHeader"></span>
+ <span class="header static" data-pane="static" data-i18n="loggerStaticFilteringHeader"></span>
+ <span class="tools"><span class="fa-icon picker">eye-dropper</span><span class="fa-icon reload">refresh</span></span>
+ </div>
+ <div class="panes">
+ <div class="pane details" data-pane="details">
+ <div><span data-i18n="loggerEntryDetailsFilter"></span><span></span><span class="exceptor" style="visibility: collapse"></span></div>
+ <div><span data-i18n="loggerEntryDetailsFilterList"></span><span class="prose"></span></div>
+ <div><span data-i18n="loggerEntryDetailsRule"></span><span></span></div>
+ <div><span data-i18n="loggerEntryDetailsRootContext"></span><span></span></div>
+ <div><span data-i18n="loggerEntryDetailsContext"></span><span></span></div>
+ <div><span data-i18n="loggerEntryDetailsPartyness"></span><span class="prose"></span></div>
+ <div><span data-i18n="loggerEntryDetailsType"></span><span></span></div>
+ <div><span data-i18n="loggerEntryDetailsURL"></span><span></span></div>
+ <div><span>CNAME</span><span></span></div>
+ <div><span>Original URL</span><span></span></div>
+ </div>
+ <div class="pane dynamic" data-pane="dynamic">
+ <div class="toolbar row">
+ <span><span id="saveRules" class="fa-icon">lock</span></span>
+ <span>
+ <label><span data-i18n="loggerURLFilteringContextLabel"></span> <select class="dynamic origin"></select></label>&emsp;
+ <label><span data-i18n="loggerURLFilteringTypeLabel"></span> <select class="dynamic type"><option><option value="*">*</select></label>
+ </span>
+ <div class="entry row">
+ <span class="action"><span class="allow">&nbsp;</span><span class="noop">&nbsp;</span><span class="block">&nbsp;</span></span>
+ <span class="url"></span>
+ </div>
+ </div>
+ <div class="entries"></div>
+ </div>
+ <div class="pane static" data-pane="static">
+ <div></div>
+ <div><textarea class="staticFilter" spellcheck="false"></textarea>
+ <button id="createStaticFilter" class="preferred" type="button" data-i18n="pickerCreate">_<span class="hover"></span></button>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div id="filterFinderDialog">
+ </div>
+
+ <div id="filterFinderListEntry">
+ <span class="listEntry"><!--
+ --><a href="asset-viewer.html?url=" target="_blank"></a>&nbsp;<!--
+ --><a href="#" class="fa-icon" target="_blank">home</a><!--
+ --></span>
+ </div>
+
+ <div id="cosmeticFilteringDialog" class="modalDialog">
+ <textarea class="cosmeticFilters"></textarea>
+ <button id="createCosmeticFilters" class="preferred" type="button" data-i18n="pickerCreate"></button>
+ </div>
+
+ <div id="loggerStatsDialog">
+ <div class="sortedEntries"></div>
+ </div>
+
+ <div id="loggerExportDialog">
+ <div class="options">
+ <div data-radio="format">
+ <span data-i18n="loggerExportFormatList" data-radio-item="list"></span>
+ <span data-i18n="loggerExportFormatTable" data-radio-item="table"></span>
+ </div>
+ <div data-radio="encoding">
+ <span data-i18n="loggerExportEncodePlain" data-radio-item="plain"></span>
+ <span data-i18n="loggerExportEncodeMarkdown" data-radio-item="markdown"></span>
+ </div>
+ <div>
+ <span data-i18n="genericCopyToClipboard" class="pushbutton"></span>
+ </div>
+ </div>
+ <textarea class="output" readonly spellcheck="false"></textarea>
+ </div>
+
+ <div id="loggerSettingsDialog">
+ <div><span data-i18n="loggerSettingDiscardPrompt"></span>
+ <ul>
+ <li><label><span data-i18n="loggerSettingPerEntryMaxAge"><input type="number" min="0" max="50000" step="15" /></span></label>
+ <li><label><span data-i18n="loggerSettingPerTabMaxLoads"><input type="number" min="0" max="1000000" /></span></label>
+ <li><label><span data-i18n="loggerSettingPerTabMaxEntries"><input type="number" min="0" max="1000000" step="100" /></span></label>
+ </ul>
+ </div>
+ <div><span data-i18n="loggerSettingHideColumnsPrompt"></span>
+ <ul>
+ <li><label data-i18n="loggerSettingHideColumnTime"><span class="input checkbox"><input type="checkbox" data-column="0" /><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span></label>
+ <li><label data-i18n="loggerSettingHideColumnFilter"><span class="input checkbox"><input type="checkbox" data-column="1" /><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span></label>
+ <li><label data-i18n="loggerSettingHideColumnContext"><span class="input checkbox"><input type="checkbox" data-column="3" /><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span></label>
+ <li><label data-i18n="loggerSettingHideColumnPartyness"><span class="input checkbox"><input type="checkbox" data-column="4" /><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span></label>
+ </ul>
+ </div>
+ <div><label><span data-i18n="loggerSettingPerEntryLineCount"><input type="number" min="2" max="6"></span></label></div>
+ </div>
+
+</div>
+
+<script src="lib/hsluv/hsluv-0.1.0.min.js"></script>
+
+<script src="js/fa-icons.js" type="module"></script>
+<script src="js/vapi.js"></script>
+<script src="js/vapi-common.js"></script>
+<script src="js/vapi-client.js"></script>
+<script src="js/theme.js" type="module"></script>
+<script src="js/i18n.js" type="module"></script>
+<script src="js/logger-ui.js" type="module"></script>
+<script src="js/logger-ui-inspector.js" type="module"></script>
+
+</body>
+</html>
diff --git a/src/no-dashboard.html b/src/no-dashboard.html
new file mode 100644
index 0000000..35b27c9
--- /dev/null
+++ b/src/no-dashboard.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>uBlock — About</title>
+<link rel="stylesheet" type="text/css" href="css/themes/default.css">
+<link rel="stylesheet" type="text/css" href="css/common.css">
+<link rel="stylesheet" type="text/css" href="css/dashboard-common.css">
+</head>
+
+<body>
+
+<div style="align-items:center;display:flex;height:50vh;justify-content:center;" data-i18n="noDashboardNotice">
+ Your administrator removed the ability to access the dashboard
+</div>
+
+<script src="lib/hsluv/hsluv-0.1.0.min.js"></script>
+
+<script src="js/vapi.js"></script>
+<script src="js/vapi-common.js"></script>
+<script src="js/vapi-client.js"></script>
+<script src="js/theme.js" type="module"></script>
+<script src="js/i18n.js" type="module"></script>
+
+</body>
+</html>
diff --git a/src/popup-fenix.html b/src/popup-fenix.html
new file mode 100644
index 0000000..9abf3dd
--- /dev/null
+++ b/src/popup-fenix.html
@@ -0,0 +1,114 @@
+<!DOCTYPE html>
+<html id="uBO-popup-panel">
+
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<link rel="stylesheet" href="css/themes/default.css">
+<link rel="stylesheet" href="css/common.css">
+<link rel="stylesheet" href="css/fa-icons.css">
+<link rel="stylesheet" href="css/popup-fenix.css">
+<link rel="shortcut icon" type="image/png" href="img/icon_64.png">
+<title data-i18n="extName"></title>
+</head>
+
+<body class="loading" data-more="abcd">
+<div id="panes">
+ <div id="main">
+ <div id="sticky">
+ <div id="hostname"><span></span>&shy;<span></span></div>
+ <div id="stickyTools">
+ <div class="rulesetTools">
+ <span id="saveRules" class="fa-icon" data-i18n-title="popupTipSaveRules">lock</span>
+ <span id="revertRules" class="fa-icon" data-i18n-title="popupTipRevertRules">eraser</span>
+ </div>
+ <div id="switch" role="button" aria-label tabindex="0" title>
+ <span class="fa-icon"><!--
+ Power button taken from Font Awesome v4.7.0 by Dave Gandy.
+ Unlike other FA icons, the power button is inlined here so
+ that we can use a clip-path in order to ensure that the stroke
+ does not "bleed" outside the fill area.
+ --><svg viewBox="0 0 1536 1664">
+ <defs>
+ <path id="power-off-path" d="m 1536,896 q 0,156 -61,298 -61,142 -164,245 -103,103 -245,164 -142,61 -298,61 -156,0 -298,-61 Q 328,1542 225,1439 122,1336 61,1194 0,1052 0,896 0,714 80.5,553 161,392 307,283 q 43,-32 95.5,-25 52.5,7 83.5,50 32,42 24.5,94.5 Q 503,455 461,487 363,561 309.5,668 256,775 256,896 q 0,104 40.5,198.5 40.5,94.5 109.5,163.5 69,69 163.5,109.5 94.5,40.5 198.5,40.5 104,0 198.5,-40.5 Q 1061,1327 1130,1258 1199,1189 1239.5,1094.5 1280,1000 1280,896 1280,775 1226.5,668 1173,561 1075,487 1033,455 1025.5,402.5 1018,350 1050,308 q 31,-43 84,-50 53,-7 95,25 146,109 226.5,270 80.5,161 80.5,343 z m -640,-768 0,640 q 0,52 -38,90 -38,38 -90,38 -52,0 -90,-38 -38,-38 -38,-90 l 0,-640 q 0,-52 38,-90 38,-38 90,-38 52,0 90,38 38,38 38,90 z"/>
+ <clipPath id="power-off-clip"><use href="#power-off-path"/></clipPath>
+ </defs>
+ <use href="#power-off-path" clip-path="url(#power-off-clip)"/>
+ </svg><!--
+ --></span>
+ </div>
+ <div class="rulesetTools">
+ <span id="refresh" class="fa-icon">refresh</span>
+ </div>
+ </div>
+ </div>
+ <div id="extraTools" class="toolRibbon" data-more="d">
+ <span id="no-popups" class="hnSwitch tool enabled" role="button" aria-label tabindex="0" title><span class="fa-icon fa-icon-badged">ph-popups<svg class="nope" viewBox="0 0 20 20"><path d="M1,1 19,19M1,19 19,1" /></svg></span><span class="caption" data-i18n="popupNoPopups_v2"></span></span>
+ <span id="no-large-media" class="hnSwitch tool enabled" role="button" aria-label tabindex="0" title><span class="fa-icon fa-icon-badged">film<svg class="nope" viewBox="0 0 20 20"><path d="M1,1 19,19M1,19 19,1" /></svg></span><span class="caption" data-i18n="popupNoLargeMedia_v2"></span></span>
+ <span id="no-cosmetic-filtering" class="hnSwitch tool enabled" role="button" aria-label tabindex="0" title><span class="fa-icon fa-icon-badged">eye-slash<svg class="nope" viewBox="0 0 20 20"><path d="M1,1 19,19M1,19 19,1" /></svg></span><span class="caption" data-i18n="popupNoCosmeticFiltering_v2"></span></span>
+ <span id="no-remote-fonts" class="hnSwitch tool enabled" role="button" aria-label tabindex="0" title><span class="fa-icon fa-icon-badged">ph-readermode-text-size<svg class="nope" viewBox="0 0 20 20"><path d="M1,1 19,19M1,19 19,1" /></svg></span><span class="caption" data-i18n="popupNoRemoteFonts_v2"></span></span>
+ <span id="no-scripting" class="hnSwitch tool enabled" role="button" aria-label tabindex="0" title><span class="fa-icon fa-icon-badged">code<svg class="nope" viewBox="0 0 20 20"><path d="M1,1 19,19M1,19 19,1" /></svg></span><span class="caption" data-i18n="popupNoScripting_v2"></span></span>
+ </div>
+ <hr data-more="a">
+ <div id="basicStats" data-more="a">
+ <span data-i18n="popupBlockedOnThisPage_v2">_</span><span>_</span>
+ <span data-i18n="popupDomainsConnected_v2">_</span><span>_</span>
+ <span data-i18n="popupBlockedSinceInstall_v2" data-more="b">_</span><span data-more="b">_</span>
+ </div>
+ <div id="basicTools" class="toolRibbon" data-more="c">
+ <span id="gotoZap" class="fa-icon tool enabled needPick" data-i18n-title="popupTipZapper">bolt<span class="caption" data-i18n="popupTipZapper"></span></span>
+ <span id="gotoPick" class="fa-icon tool enabled needPick" data-i18n-title="popupTipPicker">eye-dropper<span class="caption" data-i18n="popupTipPicker"></span></span>
+ <span id="gotoReport" class="fa-icon tool enabled needPick" data-i18n-title="popupTipReport">comment-alt<span class="caption" data-i18n="popupTipReport"></span></span>
+ <a href="logger-ui.html#_" class="fa-icon tool enabled" target="uBOLogger" tabindex="0" data-i18n-title="popupTipLog">list-alt<span class="caption" data-i18n="popupTipLog"></span></a>
+ <a href="dashboard.html" class="fa-icon tool enabled" target="uBODashboard" tabindex="0" data-i18n-title="popupTipDashboard">cogs<span class="caption" data-i18n="popupTipDashboard"></span></a>
+ </div>
+ <div id="unprocessedRequestWarning">
+ <span data-i18n="unprocessedRequestTooltip"></span><span class="dismiss"><svg viewBox="0 0 20 20"><path d="M0,0 20,20M0,20 20,0" /></svg></span>
+ </div>
+ <hr data-more="f">
+ <div class="itemRibbon" data-more="f">
+ <span data-i18n="popupVersion"></span><span id="version"></span>
+ </div>
+ <hr data-more="g">
+ <div id="moreOrLess" class="">
+ <span id="moreButton">
+ <span data-i18n="popupMoreButton_v2"></span>&emsp;<span class="fa-icon">angle-up</span>
+ </span>
+ <span id="lessButton">
+ <span class="fa-icon">angle-up</span>&emsp;<span data-i18n="popupLessButton_v2"></span>
+ </span>
+ </div>
+ </div>
+ <div id="firewall" data-more="e">
+ <section><span class="fa-icon">filter</span><div class="filterExpressions"><div><span data-i18n="loggerRowFiltererBuiltinNot" data-expr="not">_</span><span data-i18n="loggerRowFiltererBuiltinBlocked" data-expr="blocked">_</span><span data-i18n="loggerRowFiltererBuiltinAllowed" data-expr="allowed">_</span></div><div><span data-i18n="loggerRowFiltererBuiltinNot" data-expr="not">_</span><span data-expr="script" data-i18n="popup3pScriptFilter">_</span><span data-expr="frame" data-i18n="popup3pFrameFilter">_</span></div></div></section>
+ <div data-des="*" data-type="*"><span data-i18n="popupAnyRulePrompt">_</span><span data-src="/" data-i18n-title="popupTipGlobalRules"> </span><span data-src="." data-i18n-title="popupTipLocalRules"> </span></div>
+ <div data-des="*" data-type="image"><span data-i18n="popupImageRulePrompt"></span><span data-src="/"> </span><span data-src="."> </span></div>
+ <div data-des="*" data-type="3p"><span data-i18n="popup3pAnyRulePrompt"></span><span data-src="/"> </span><span data-src="."> </span></div>
+ <div data-des="*" data-type="inline-script"><span data-i18n="popupInlineScriptRulePrompt"></span><span data-src="/"> </span><span data-src="."> </span></div>
+ <div data-des="*" data-type="1p-script"><span data-i18n="popup1pScriptRulePrompt"></span><span data-src="/"> </span><span data-src="."> </span></div>
+ <div data-des="*" data-type="3p-script"><span data-i18n="popup3pScriptRulePrompt"></span><span data-src="/"> </span><span data-src="."> </span></div>
+ <div data-des="*" data-type="3p-frame"><span data-i18n="popup3pFrameRulePrompt"></span><span data-src="/"> </span><span data-src="."> </span></div>
+ </div>
+ <div id="firewall-vspacer"></div>
+</div>
+
+<div id="templates" style="display: none">
+ <div data-des="" data-type="*"><span><span><span></span></span><sub></sub></span><span data-src="/"></span><span data-src="."></span></div>
+ <div id="actionSelector"><span id="dynaAllow"></span><span id="dynaNoop"></span><span id="dynaBlock"></span><span id="dynaCounts"></span></div>
+ <div id="hotspotTip"></div>
+ <div id="tooltip"></div>
+</div>
+
+<script src="lib/hsluv/hsluv-0.1.0.min.js"></script>
+
+<script src="js/fa-icons.js" type="module"></script>
+<script src="js/vapi.js"></script>
+<script src="js/vapi-common.js"></script>
+<script src="js/vapi-client.js"></script>
+<script src="js/theme.js" type="module"></script>
+<script src="js/i18n.js" type="module"></script>
+<script src="js/popup-fenix.js" type="module"></script>
+
+</body>
+
+</html>
diff --git a/src/settings.html b/src/settings.html
new file mode 100644
index 0000000..92dfca3
--- /dev/null
+++ b/src/settings.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
+<title>uBlock — Settings</title>
+<link rel="stylesheet" type="text/css" href="css/themes/default.css">
+<link rel="stylesheet" type="text/css" href="css/common.css">
+<link rel="stylesheet" type="text/css" href="css/fa-icons.css">
+<link rel="stylesheet" type="text/css" href="css/dashboard-common.css">
+<link rel="stylesheet" type="text/css" href="css/settings.css">
+</head>
+
+<body>
+<div class="fieldset">
+ <div class="li"><label><span class="input checkbox"><input type="checkbox" data-setting-name="collapseBlocked" data-setting-type="bool"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span data-i18n="settingsCollapseBlockedPrompt">_</span></label></div>
+ <div class="li"><label><span class="input checkbox"><input type="checkbox" data-setting-name="showIconBadge" data-setting-type="bool"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span data-i18n="settingsIconBadgePrompt">_</span></label></div>
+ <div class="li"><label><span class="input checkbox"><input type="checkbox" data-setting-name="contextMenuEnabled" data-setting-type="bool"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span data-i18n="settingsContextMenuPrompt">_</span></label></div>
+ <div class="li"><label><span class="input checkbox"><input type="checkbox" data-setting-name="cloudStorageEnabled" data-setting-type="bool"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span><span data-i18n="settingsCloudStorageEnabledPrompt">_</span>&nbsp;<a class="fa-icon info" href="https://github.com/gorhill/uBlock/wiki/Cloud-storage" target="_blank">info-circle</a></span></label></div>
+</div>
+<hr>
+<div class="fieldset">
+ <div class="fieldset-header" data-i18n="3pGroupPrivacy"></div>
+ <div class="li"><label><span class="input checkbox"><input type="checkbox" data-setting-name="prefetchingDisabled" data-setting-type="bool"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span><span data-i18n="settingsPrefetchingDisabledPrompt"></span>&nbsp;<a class="fa-icon info" href="https://github.com/gorhill/uBlock/wiki/Dashboard:-Settings#disable-prefetching" target="_blank">info-circle</a></span></label></div>
+ <div class="li"><label><span class="input checkbox"><input type="checkbox" data-setting-name="hyperlinkAuditingDisabled" data-setting-type="bool"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span><span data-i18n="settingsHyperlinkAuditingDisabledPrompt"></span>&nbsp;<a class="fa-icon info" href="https://github.com/gorhill/uBlock/wiki/Dashboard:-Settings#disable-hyperlink-auditing" target="_blank">info-circle</a></span></label></div>
+ <div class="li" style="display:none"><label><span class="input checkbox"><input type="checkbox" data-setting-name="webrtcIPAddressHidden" data-setting-type="bool"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span><span data-i18n="settingsWebRTCIPAddressHiddenPrompt"></span>&nbsp;<a class="fa-icon info important" href="https://github.com/gorhill/uBlock/wiki/Prevent-WebRTC-from-leaking-local-IP-address" target="_blank">info-circle</a></span></label></div>
+ <div class="li"><label><span class="input checkbox"><input type="checkbox" data-setting-name="noCSPReports" data-setting-type="bool"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span><span data-i18n="settingsNoCSPReportsPrompt"></span>&nbsp;<a class="fa-icon info" href="https://github.com/gorhill/uBlock/wiki/Dashboard:-Settings#block-csp-reports" target="_blank">info-circle</a></span></label></div>
+ <div class="li"><label><span class="input checkbox"><input type="checkbox" data-setting-name="cnameUncloakEnabled" data-setting-type="bool"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span><span data-i18n="settingsUncloakCnamePrompt"></span>&nbsp;<a class="fa-icon info" href="https://github.com/gorhill/uBlock/wiki/Dashboard:-Settings#uncloak-canonical-names" target="_blank">info-circle</a></span></label></div>
+</div>
+<hr>
+<div class="fieldset">
+ <div class="fieldset-header" data-i18n="settingsAppearance"></div>
+ <div class="li"><label><span data-i18n="settingsThemeLabel">_</span>&emsp;<select data-setting-name="uiTheme" data-setting-type="value"><option value="auto">Auto<option value="light">Light<option value="dark">Dark</select></label></div>
+ <div class="li">
+ <label><span class="input checkbox"><input type="checkbox" data-setting-name="uiAccentCustom" data-setting-type="bool"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span data-i18n="settingsThemeAccent0Label">_</span></label>&emsp;
+ <input type="color" list="preset-accent-colors" data-setting-name="uiAccentCustom0" data-setting-type="value">
+ <datalist id="preset-accent-colors">
+ <option value="#f75782"><!-- h:0...360 step 40 S:90 Luv:60 -->
+ <option value="#cc7f2b">
+ <option value="#9c932b">
+ <option value="#56a22b">
+ <option value="#2ea283">
+ <option value="#309fa6">
+ <option value="#3498d6">
+ <option value="#ad75f4">
+ <option value="#f542d6">
+ <option value="#919191"><!-- h:0 S:0 Luv:60 -->
+ </datalist>
+ </div>
+ <div class="li"><label><span class="input checkbox"><input type="checkbox" data-setting-name="colorBlindFriendly" data-setting-type="bool"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span data-i18n="settingsColorBlindPrompt">_</span></label></div>
+ <div class="li"><label><span class="input checkbox"><input type="checkbox" data-setting-name="tooltipsDisabled" data-setting-type="bool"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span data-i18n="settingsTooltipsPrompt">_</span></label></div>
+</div>
+<hr>
+<div class="fieldset">
+ <div class="fieldset-header" data-i18n="settingPerSiteSwitchGroup"></div>
+ <div class="li synopsis"><legend><span data-i18n="settingPerSiteSwitchGroupSynopsis"></span>&nbsp;<a class="fa-icon info" href="https://github.com/gorhill/uBlock/wiki/Per-site-switches" target="_blank">info-circle</a></legend></div>
+ <div class="li"><label><span class="input checkbox"><input type="checkbox" data-setting-name="noCosmeticFiltering" data-setting-type="bool"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span><span data-i18n="settingsNoCosmeticFilteringPrompt"></span>&nbsp;<a class="fa-icon info" href="https://github.com/gorhill/uBlock/wiki/Per-site-switches#no-cosmetic-filtering" target="_blank">info-circle</a></span></label></div>
+ <div class="li"><label><span class="input checkbox"><input type="checkbox" data-setting-name="noLargeMedia" data-setting-type="bool"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span><span data-i18n="settingsNoLargeMediaPrompt"><input type="number" min="0" data-setting-name="largeMediaSize" data-setting-type="value"></span>&nbsp;<a class="fa-icon info" href="https://github.com/gorhill/uBlock/wiki/Per-site-switches#no-large-media-elements" target="_blank">info-circle</a></span></label></div>
+ <div class="li"><label><span class="input checkbox"><input type="checkbox" data-setting-name="noRemoteFonts" data-setting-type="bool"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span><span data-i18n="settingsNoRemoteFontsPrompt"></span>&nbsp;<a class="fa-icon info" href="https://github.com/gorhill/uBlock/wiki/Per-site-switches#no-remote-fonts" target="_blank">info-circle</a></span></label></div>
+ <div class="li"><label><span class="input checkbox"><input type="checkbox" data-setting-name="noScripting" data-setting-type="bool"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span><span data-i18n="settingsNoScriptingPrompt"></span>&nbsp;<a class="fa-icon info" href="https://github.com/gorhill/uBlock/wiki/Per-site-switches#no-scripting" target="_blank">info-circle</a></span></label></div>
+</div>
+<hr>
+<div class="fieldset">
+ <div class="fieldset-header" data-i18n="settingsAdvanced"></div>
+ <div class="li synopsis"><legend><span data-i18n="settingsAdvancedSynopsis"></span>&nbsp;<a class="fa-icon info very-important" href="https://github.com/gorhill/uBlock/wiki/Advanced-user-features" target="_blank">info-circle</a></legend></div>
+ <div class="li"><label><span class="input checkbox"><input type="checkbox" data-setting-name="advancedUserEnabled" data-setting-type="bool"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span><span data-i18n="settingsAdvancedUserPrompt"></span>&nbsp;<a class="fa-icon info" href="advanced-settings.html" data-i18n-title="settingsAdvancedUserSettings">cogs</a></span></label></div>
+</div>
+<hr>
+<div id="localData" class="fieldset">
+ <div>
+ <div class="li" id="storageUsed"></div>
+ <div class="li" id="settingsLastBackupPrompt" style="display:none;"></div>
+ <div class="li" id="settingsLastRestorePrompt" style="display:none;"></div>
+ </div>
+ <div>
+ <button type="button" id="export" data-i18n="aboutBackupDataButton">_<span class="hover"></span></button>
+ <button type="button" id="import" data-i18n="aboutRestoreDataButton">_<span class="hover"></span></button>
+ <button type="button" id="reset" data-i18n="aboutResetDataButton">_<span class="hover"></span></button>
+ </div>
+</div>
+
+<div class="hidden">
+ <input id="restoreFilePicker" type="file" accept="text/plain,application/json">
+</div>
+
+<script src="lib/hsluv/hsluv-0.1.0.min.js"></script>
+
+<script src="js/fa-icons.js" type="module"></script>
+<script src="js/vapi.js"></script>
+<script src="js/vapi-common.js"></script>
+<script src="js/vapi-client.js"></script>
+<script src="js/theme.js" type="module"></script>
+<script src="js/i18n.js" type="module"></script>
+<script src="js/dashboard-common.js" type="module"></script>
+<script src="js/settings.js" type="module"></script>
+
+</body>
+</html>
diff --git a/src/support.html b/src/support.html
new file mode 100644
index 0000000..1232942
--- /dev/null
+++ b/src/support.html
@@ -0,0 +1,130 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>uBlock Origin — Support</title>
+
+<link rel="stylesheet" href="lib/codemirror/lib/codemirror.css">
+
+<link rel="stylesheet" href="css/themes/default.css">
+<link rel="stylesheet" href="css/common.css">
+<link rel="stylesheet" href="css/dashboard-common.css">
+<link rel="stylesheet" href="css/fa-icons.css">
+<link rel="stylesheet" href="css/support.css">
+<link rel="stylesheet" href="css/codemirror.css">
+<link rel="shortcut icon" type="image/png" href="img/icon_64.png">
+</head>
+
+<body>
+
+<div class="body">
+ <div class="a">
+ <h3 data-i18n="supportS1H"></h3>
+ <div class="supportEntry">
+ <div>
+ <p data-i18n="supportS1P1">
+ </div>
+ <button type="button" data-url="https://github.com/gorhill/uBlock/wiki" data-i18n="supportOpenButton">_<span class="hover"></span></button>
+ </div>
+ <hr>
+ </div>
+ <div class="b">
+ <h3 data-i18n="supportS2H"></h3>
+ <div class="supportEntry">
+ <div>
+ <p data-i18n="supportS2P1">
+ </div>
+ <button type="button" data-url="https://www.reddit.com/r/uBlockOrigin/" data-i18n="supportOpenButton">_<span class="hover"></span></button>
+ </div>
+ <hr>
+ </div>
+ <div class="c">
+ <h3 data-i18n="supportS3H"></h3>
+ <div class="supportEntry">
+ <div>
+ <p data-i18n="supportS3P1">
+ <p data-i18n="supportS3P2">
+ <p data-i18n="supportS3P3">
+ </div>
+ <button id="filterReport" type="button" data-url="https://github.com/uBlockOrigin/uAssets/issues/new?template=report_from_ubo.yml" data-i18n="supportOpenButton">_<span class="hover"></span></button>
+ </div>
+ <hr>
+ </div>
+ <div class="d">
+ <h3 data-i18n="supportS4H"></h3>
+ <div class="supportEntry">
+ <div>
+ <p data-i18n="supportS4P1">
+ </div>
+ <button id="bugReport" type="button" data-url="https://github.com/uBlockOrigin/uBlock-issues/issues/new?template=bug_report_from_ubo.yml" data-i18n="supportOpenButton">_<span class="hover"></span></button>
+ </div>
+ <hr>
+ </div>
+ <div class="e">
+ <h3 data-i18n="supportS6H"></h3>
+ <p data-i18n="supportS3P1"></p>
+ <div class="supportEntry shouldUpdate">
+ <hr>
+ <p data-i18n="supportS6P2S1">_</p>
+ <button type="button" class="iconified"><span class="fa-icon">refresh</span><span data-i18n="3pUpdateNow">_</span><span class="hover"></span></button>
+ <u class="updated" data-i18n="supportS6P2S2">_</u>
+ </div>
+ <div class="supportEntry">
+ <hr>
+ <p data-i18n="supportS6P1S1"></p>
+ <button type="button" data-i18n="supportFindSpecificButton">_<span class="hover"></span></button>
+ </div>
+ <div class="supportEntry createEntry">
+ <hr>
+ <p>
+ <label data-i18n="supportS6URL"></label><br>
+ <select name="url">
+ <option></option>
+ </select>
+ </p>
+ <p>
+ <label data-i18n="supportS6Select1"></label><br>
+ <select name="type">
+ <option value="[unknown]" data-i18n="supportS6Select1Option0" selected disabled></option>
+ <option value="ads" data-i18n="supportS6Select1Option1"></option>
+ <option value="detection" data-i18n="supportS6Select1Option3"></option>
+ <option value="popups" data-i18n="supportS6Select1Option6"></option>
+ <option value="nuisance" data-i18n="supportS6Select1Option2"></option>
+ <option value="breakage" data-i18n="supportS6Select1Option5"></option>
+ <option value="privacy" data-i18n="supportS6Select1Option4"></option>
+ </select>
+ </p>
+ <p>
+ <label><span class="input checkbox"><input id="isNSFW" type="checkbox"><svg viewBox="0 0 24 24"><path d="M1.73,12.91 8.1,19.28 22.79,4.59"/></svg></span><span data-i18n="supportS6Checkbox1"></span></label>
+ </p>
+ <button type="button" data-i18n="supportReportSpecificButton" class="preferred">_<span class="hover"></span></button>
+ </div>
+ <hr>
+ <h3 id="showSupportInfo" class="subtil" data-i18n="supportS5H">_<span>&nbsp;&#x25b8;</span></h3>
+ </div>
+ <div class="a b c d">
+ <h3 data-i18n="supportS5H"></h3>
+ <p data-i18n="supportS5P1">
+ <p>
+ <button id="selectAllButton" type="button" data-i18n="genericSelectAll">_<span class="hover"></span></button>
+ <button id="moreButton" type="button" data-i18n="popupMoreButton_v2" data-url="/devtools.html">_<span class="hover"></span></button>
+ <div id="supportData" class="codeMirrorContainer"></div>
+ </div>
+</div>
+
+<script src="lib/codemirror/lib/codemirror.js"></script>
+<script src="lib/codemirror/addon/selection/active-line.js"></script>
+<script src="lib/hsluv/hsluv-0.1.0.min.js"></script>
+
+<script src="js/fa-icons.js" type="module"></script>
+<script src="js/vapi.js"></script>
+<script src="js/vapi-common.js"></script>
+<script src="js/vapi-client.js"></script>
+<script src="js/theme.js" type="module"></script>
+<script src="js/i18n.js" type="module"></script>
+<script src="js/dashboard-common.js" type="module"></script>
+<script src="js/support.js" type="module"></script>
+
+</body>
+</html>
diff --git a/src/web_accessible_resources/1x1.gif b/src/web_accessible_resources/1x1.gif
new file mode 100644
index 0000000..e565824
--- /dev/null
+++ b/src/web_accessible_resources/1x1.gif
Binary files differ
diff --git a/src/web_accessible_resources/2x2.png b/src/web_accessible_resources/2x2.png
new file mode 100644
index 0000000..3639dc7
--- /dev/null
+++ b/src/web_accessible_resources/2x2.png
Binary files differ
diff --git a/src/web_accessible_resources/32x32.png b/src/web_accessible_resources/32x32.png
new file mode 100644
index 0000000..7bee0a0
--- /dev/null
+++ b/src/web_accessible_resources/32x32.png
Binary files differ
diff --git a/src/web_accessible_resources/3x2.png b/src/web_accessible_resources/3x2.png
new file mode 100644
index 0000000..a056d86
--- /dev/null
+++ b/src/web_accessible_resources/3x2.png
Binary files differ
diff --git a/src/web_accessible_resources/README.txt b/src/web_accessible_resources/README.txt
new file mode 100644
index 0000000..f9ab5c3
--- /dev/null
+++ b/src/web_accessible_resources/README.txt
@@ -0,0 +1,11 @@
+IMPORTANT
+
+Content of this folder cannot be accessed without the internal secret token
+created for each request to any of the "web accessible resources".
+
+Any fetch operation made without uBlock Origin's internal secret will result
+in failure. This means that despite the content of the folder here declared as
+"web accessible resources", it still cannot be seen by the outside world.
+
+Only uBlock Origin knows the secret token at runtime and hence only
+uBlock Origin can access the content of this folder.
diff --git a/src/web_accessible_resources/amazon_ads.js b/src/web_accessible_resources/amazon_ads.js
new file mode 100644
index 0000000..0b6e052
--- /dev/null
+++ b/src/web_accessible_resources/amazon_ads.js
@@ -0,0 +1,70 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ if ( amznads ) {
+ return;
+ }
+ var w = window;
+ var noopfn = function() {
+ ;
+ }.bind();
+ var amznads = {
+ appendScriptTag: noopfn,
+ appendTargetingToAdServerUrl: noopfn,
+ appendTargetingToQueryString: noopfn,
+ clearTargetingFromGPTAsync: noopfn,
+ doAllTasks: noopfn,
+ doGetAdsAsync: noopfn,
+ doTask: noopfn,
+ detectIframeAndGetURL: noopfn,
+ getAds: noopfn,
+ getAdsAsync: noopfn,
+ getAdForSlot: noopfn,
+ getAdsCallback: noopfn,
+ getDisplayAds: noopfn,
+ getDisplayAdsAsync: noopfn,
+ getDisplayAdsCallback: noopfn,
+ getKeys: noopfn,
+ getReferrerURL: noopfn,
+ getScriptSource: noopfn,
+ getTargeting: noopfn,
+ getTokens: noopfn,
+ getValidMilliseconds: noopfn,
+ getVideoAds: noopfn,
+ getVideoAdsAsync: noopfn,
+ getVideoAdsCallback: noopfn,
+ handleCallBack: noopfn,
+ hasAds: noopfn,
+ renderAd: noopfn,
+ saveAds: noopfn,
+ setTargeting: noopfn,
+ setTargetingForGPTAsync: noopfn,
+ setTargetingForGPTSync: noopfn,
+ tryGetAdsAsync: noopfn,
+ updateAds: noopfn
+ };
+ w.amznads = amznads;
+ w.amzn_ads = w.amzn_ads || noopfn;
+ w.aax_write = w.aax_write || noopfn;
+ w.aax_render_ad = w.aax_render_ad || noopfn;
+})();
diff --git a/src/web_accessible_resources/amazon_apstag.js b/src/web_accessible_resources/amazon_apstag.js
new file mode 100644
index 0000000..1ddd5a4
--- /dev/null
+++ b/src/web_accessible_resources/amazon_apstag.js
@@ -0,0 +1,62 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+// https://www.reddit.com/r/uBlockOrigin/comments/ghjqph/
+// https://github.com/NanoMeow/QuickReports/issues/3717
+// https://www.reddit.com/r/uBlockOrigin/comments/qyx7en/
+
+// https://searchfox.org/mozilla-central/source/browser/extensions/webcompat/shims/apstag.js
+// Import queue-related initialization code.
+
+(function() {
+ 'use strict';
+ const w = window;
+ const noopfn = function() {
+ ; // jshint ignore:line
+ }.bind();
+ const _Q = w.apstag && w.apstag._Q || [];
+ const apstag = {
+ _Q,
+ fetchBids: function(a, b) {
+ if ( typeof b === 'function' ) {
+ b([]);
+ }
+ },
+ init: noopfn,
+ setDisplayBids: noopfn,
+ targetingKeys: noopfn,
+ };
+ w.apstag = apstag;
+ _Q.push = function(prefix, args) {
+ try {
+ switch (prefix) {
+ case 'f':
+ apstag.fetchBids(...args);
+ break;
+ }
+ } catch (e) {
+ console.trace(e);
+ }
+ };
+ for ( const cmd of _Q ) {
+ _Q.push(cmd);
+ }
+})();
diff --git a/src/web_accessible_resources/ampproject_v0.js b/src/web_accessible_resources/ampproject_v0.js
new file mode 100644
index 0000000..e822f9d
--- /dev/null
+++ b/src/web_accessible_resources/ampproject_v0.js
@@ -0,0 +1,34 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ const head = document.head;
+ if ( !head ) { return; }
+ const style = document.createElement('style');
+ style.textContent = [
+ 'body {',
+ ' animation: none !important;',
+ ' overflow: unset !important;',
+ '}'
+ ].join('\n');
+ head.appendChild(style);
+})();
diff --git a/src/web_accessible_resources/chartbeat.js b/src/web_accessible_resources/chartbeat.js
new file mode 100644
index 0000000..76e7a29
--- /dev/null
+++ b/src/web_accessible_resources/chartbeat.js
@@ -0,0 +1,30 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ const noopfn = function() {
+ };
+ window.pSUPERFLY = {
+ activity: noopfn,
+ virtualPage: noopfn
+ };
+})();
diff --git a/src/web_accessible_resources/click2load.html b/src/web_accessible_resources/click2load.html
new file mode 100644
index 0000000..7ec52b9
--- /dev/null
+++ b/src/web_accessible_resources/click2load.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html id="ublock0-clicktoload">
+
+<head>
+<meta charset="utf-8">
+<title>uBlock Origin Click-to-Load</title>
+<link rel="stylesheet" href="../css/themes/default.css">
+<link rel="stylesheet" href="../css/common.css">
+<link rel="stylesheet" href="../css/fa-icons.css">
+<link rel="stylesheet" href="../css/click2load.css">
+</head>
+
+<body>
+
+<span class="logo"><img src="../img/ublock.svg"></span>
+<span id="clickToLoad" data-i18n="clickToLoad"></span>
+<div id="frameURL"><span></span>&nbsp;<a class="fa-icon" href="" rel="noreferrer noopener" target="_blank">external-link</a></div>
+
+<script src="../js/fa-icons.js" type="module"></script>
+<script src="../js/vapi.js"></script>
+<script src="../js/vapi-common.js"></script>
+<script src="../js/vapi-client.js"></script>
+<script src="../js/theme.js" type="module"></script>
+<script src="../js/i18n.js" type="module"></script>
+<script src="../js/click2load.js" type="module"></script>
+
+</body>
+</html>
diff --git a/src/web_accessible_resources/dom-inspector.html b/src/web_accessible_resources/dom-inspector.html
new file mode 100644
index 0000000..d338610
--- /dev/null
+++ b/src/web_accessible_resources/dom-inspector.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html id="ublock0-inspector">
+
+<head>
+<meta charset="utf-8">
+<meta name="color-scheme" content="light dark">
+<title>uBlock Origin Inspector</title>
+<link rel="stylesheet" href="../css/dom-inspector.css">
+</head>
+
+<body>
+<svg>
+ <path d></path>
+ <path d></path>
+ <path d></path>
+ <path d></path>
+</svg>
+
+<script src="../js/vapi.js"></script>
+<script src="../js/vapi-common.js"></script>
+<script src="../js/vapi-client.js"></script>
+<script src="../js/dom-inspector.js" type="module"></script>
+
+</body>
+</html>
diff --git a/src/web_accessible_resources/doubleclick_instream_ad_status.js b/src/web_accessible_resources/doubleclick_instream_ad_status.js
new file mode 100644
index 0000000..dfec48c
--- /dev/null
+++ b/src/web_accessible_resources/doubleclick_instream_ad_status.js
@@ -0,0 +1 @@
+window.google_ad_status = 1;
diff --git a/src/web_accessible_resources/empty b/src/web_accessible_resources/empty
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/web_accessible_resources/empty
diff --git a/src/web_accessible_resources/epicker-ui.html b/src/web_accessible_resources/epicker-ui.html
new file mode 100644
index 0000000..bd92f50
--- /dev/null
+++ b/src/web_accessible_resources/epicker-ui.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html id="ublock0-epicker">
+
+<head>
+<meta charset="utf-8">
+<meta name="color-scheme" content="light dark">
+<title>uBlock Origin Element Picker</title>
+<link rel="stylesheet" href="../lib/codemirror/lib/codemirror.css">
+<link rel="stylesheet" href="../lib/codemirror/addon/hint/show-hint.css">
+
+<link rel="stylesheet" href="../css/themes/default.css">
+<link rel="stylesheet" href="../css/common.css">
+<link rel="stylesheet" href="../css/epicker-ui.css">
+<link rel="stylesheet" href="../css/codemirror.css">
+</head>
+
+<body>
+<aside>
+<section>
+ <div>
+ <div class="codeMirrorContainer codeMirrorBreakAll cm-theme-override"></div>
+ <div class="resultsetWidgets">
+ <span id="resultsetModifiers">
+ <span id="resultsetDepth" class="resultsetModifier">
+ <span><span></span><span></span><span></span></span>
+ <input type="range" min="0" max="7" value="7">
+ </span>
+ <span id="resultsetSpecificity" class="resultsetModifier">
+ <span><span></span><span></span><span></span></span>
+ <input type="range" min="0" max="7" value="6">
+ </span>
+ </span>
+ <span id="resultsetCount"></span>
+ </div>
+ </div>
+ <div id="toolbar">
+ <div>
+ <button id="preview" type="button" data-i18n="pickerPreview">_<span class="hover"></span></button>
+ </div>
+ <div id="move"></div>
+ <div>
+ <button id="create" type="button" class="preferred" disabled data-i18n="pickerCreate">_<span class="hover"></span></button>
+ <button id="pick" type="button" data-i18n="pickerPick">_<span class="hover"></span></button>
+ <button id="quit" type="button" data-i18n="pickerQuit">_<span class="hover"></span></button>
+ </div>
+ </div>
+</section>
+<ul id="candidateFilters">
+ <li id="netFilters">
+ <span data-i18n="pickerNetFilters"></span>
+ <ul lang="en" class="changeFilter"></ul>
+ </li>
+ <li id="cosmeticFilters" data-specificity="3">
+ <span data-i18n="pickerCosmeticFilters"></span>
+ <ul lang="en" class="changeFilter"></ul>
+ </li>
+</ul>
+</aside>
+<svg><path d></path><path d></path></svg>
+
+<script src="../lib/codemirror/lib/codemirror.js"></script>
+<script src="../lib/codemirror/addon/edit/closebrackets.js"></script>
+<script src="../lib/codemirror/addon/edit/matchbrackets.js"></script>
+<script src="../lib/codemirror/addon/hint/show-hint.js"></script>
+<script src="../lib/hsluv/hsluv-0.1.0.min.js"></script>
+
+<script src="../js/vapi.js"></script>
+<script src="../js/vapi-common.js"></script>
+<script src="../js/vapi-client.js"></script>
+<script src="../js/theme.js" type="module"></script>
+<script src="../js/i18n.js" type="module"></script>
+<script src="../js/epicker-ui.js" type="module"></script>
+
+</body>
+</html>
diff --git a/src/web_accessible_resources/fingerprint2.js b/src/web_accessible_resources/fingerprint2.js
new file mode 100644
index 0000000..24a39b9
--- /dev/null
+++ b/src/web_accessible_resources/fingerprint2.js
@@ -0,0 +1,55 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2014-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+// Reference:
+// https://github.com/fingerprintjs/fingerprintjs/tree/v2
+
+(function() {
+ 'use strict';
+ const hex32 = len => {
+ return Math.floor(Math.random() * Number.MAX_SAFE_INTEGER)
+ .toString(16)
+ .slice(-len)
+ .padStart(len, '0');
+ };
+ const browserId = `${hex32(8)}${hex32(8)}${hex32(8)}${hex32(8)}`;
+ const fp2 = function(){};
+ fp2.get = function(opts, cb) {
+ if ( !cb ) { cb = opts; }
+ setTimeout(( ) => { cb([]); }, 1);
+ };
+ fp2.getPromise = function() {
+ return Promise.resolve([]);
+ };
+ fp2.getV18 = function() {
+ return browserId;
+ };
+ fp2.x64hash128 = function() {
+ return browserId;
+ };
+ fp2.prototype = {
+ get: function(opts, cb) {
+ if ( !cb ) { cb = opts; }
+ setTimeout(( ) => { cb(browserId, []); }, 1);
+ },
+ };
+ self.Fingerprint2 = fp2;
+})();
diff --git a/src/web_accessible_resources/fingerprint3.js b/src/web_accessible_resources/fingerprint3.js
new file mode 100644
index 0000000..1bf1529
--- /dev/null
+++ b/src/web_accessible_resources/fingerprint3.js
@@ -0,0 +1,45 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2022-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ const visitorId = (( ) => {
+ let id = '';
+ for ( let i = 0; i < 8; i++ ) {
+ id += (Math.random() * 0x10000 + 0x1000 | 0).toString(16).slice(-4);
+ }
+ return id;
+ })();
+ const FingerprintJS = class {
+ static hashComponents() {
+ return visitorId;
+ }
+ static load() {
+ return Promise.resolve(new FingerprintJS());
+ }
+ get() {
+ return Promise.resolve({
+ visitorId,
+ });
+ }
+ };
+ window.FingerprintJS = FingerprintJS;
+})();
diff --git a/src/web_accessible_resources/google-analytics_analytics.js b/src/web_accessible_resources/google-analytics_analytics.js
new file mode 100644
index 0000000..6fdf396
--- /dev/null
+++ b/src/web_accessible_resources/google-analytics_analytics.js
@@ -0,0 +1,110 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ // https://developers.google.com/analytics/devguides/collection/analyticsjs/
+ const noopfn = function() {
+ };
+ //
+ const Tracker = function() {
+ };
+ const p = Tracker.prototype;
+ p.get = noopfn;
+ p.set = noopfn;
+ p.send = noopfn;
+ //
+ const w = window;
+ const gaName = w.GoogleAnalyticsObject || 'ga';
+ const gaQueue = w[gaName];
+ // https://github.com/uBlockOrigin/uAssets/pull/4115
+ const ga = function() {
+ const len = arguments.length;
+ if ( len === 0 ) { return; }
+ const args = Array.from(arguments);
+ let fn;
+ let a = args[len-1];
+ if ( a instanceof Object && a.hitCallback instanceof Function ) {
+ fn = a.hitCallback;
+ } else if ( a instanceof Function ) {
+ fn = ( ) => { a(ga.create()); };
+ } else {
+ const pos = args.indexOf('hitCallback');
+ if ( pos !== -1 && args[pos+1] instanceof Function ) {
+ fn = args[pos+1];
+ }
+ }
+ if ( fn instanceof Function === false ) { return; }
+ try {
+ fn();
+ } catch (ex) {
+ }
+ };
+ ga.create = function() {
+ return new Tracker();
+ };
+ ga.getByName = function() {
+ return new Tracker();
+ };
+ ga.getAll = function() {
+ return [new Tracker()];
+ };
+ ga.remove = noopfn;
+ // https://github.com/uBlockOrigin/uAssets/issues/2107
+ ga.loaded = true;
+ w[gaName] = ga;
+ // https://github.com/gorhill/uBlock/issues/3075
+ const dl = w.dataLayer;
+ if ( dl instanceof Object ) {
+ if ( dl.hide instanceof Object && typeof dl.hide.end === 'function' ) {
+ dl.hide.end();
+ dl.hide.end = ()=>{};
+ }
+ if ( typeof dl.push === 'function' ) {
+ const doCallback = function(item) {
+ if ( item instanceof Object === false ) { return; }
+ if ( typeof item.eventCallback !== 'function' ) { return; }
+ setTimeout(item.eventCallback, 1);
+ item.eventCallback = ()=>{};
+ };
+ dl.push = new Proxy(dl.push, {
+ apply: function(target, thisArg, args) {
+ doCallback(args[0]);
+ return Reflect.apply(target, thisArg, args);
+ }
+ });
+ if ( Array.isArray(dl) ) {
+ const q = dl.slice();
+ for ( const item of q ) {
+ doCallback(item);
+ }
+ }
+ }
+ }
+ // empty ga queue
+ if ( gaQueue instanceof Function && Array.isArray(gaQueue.q) ) {
+ const q = gaQueue.q.slice();
+ gaQueue.q.length = 0;
+ for ( const entry of q ) {
+ ga(...entry);
+ }
+ }
+})();
diff --git a/src/web_accessible_resources/google-analytics_cx_api.js b/src/web_accessible_resources/google-analytics_cx_api.js
new file mode 100644
index 0000000..9f63ebe
--- /dev/null
+++ b/src/web_accessible_resources/google-analytics_cx_api.js
@@ -0,0 +1,36 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ const noopfn = function() {
+ };
+ window.cxApi = {
+ chooseVariation: function() {
+ return 0;
+ },
+ getChosenVariation: noopfn,
+ setAllowHash: noopfn,
+ setChosenVariation: noopfn,
+ setCookiePath: noopfn,
+ setDomainName: noopfn
+ };
+})();
diff --git a/src/web_accessible_resources/google-analytics_ga.js b/src/web_accessible_resources/google-analytics_ga.js
new file mode 100644
index 0000000..c969b38
--- /dev/null
+++ b/src/web_accessible_resources/google-analytics_ga.js
@@ -0,0 +1,130 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ const noopfn = function() {
+ };
+ //
+ const Gaq = function() {
+ };
+ Gaq.prototype.Na = noopfn;
+ Gaq.prototype.O = noopfn;
+ Gaq.prototype.Sa = noopfn;
+ Gaq.prototype.Ta = noopfn;
+ Gaq.prototype.Va = noopfn;
+ Gaq.prototype._createAsyncTracker = noopfn;
+ Gaq.prototype._getAsyncTracker = noopfn;
+ Gaq.prototype._getPlugin = noopfn;
+ Gaq.prototype.push = function(a) {
+ if ( typeof a === 'function' ) {
+ a(); return;
+ }
+ if ( Array.isArray(a) === false ) { return; }
+ // https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApiDomainDirectory#_gat.GA_Tracker_._link
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/1807
+ if (
+ typeof a[0] === 'string' &&
+ /(^|\.)_link$/.test(a[0]) &&
+ typeof a[1] === 'string'
+ ) {
+ try {
+ window.location.assign(a[1]);
+ } catch(ex) {
+ }
+ }
+ // https://github.com/gorhill/uBlock/issues/2162
+ if ( a[0] === '_set' && a[1] === 'hitCallback' && typeof a[2] === 'function' ) {
+ a[2]();
+ }
+ };
+ //
+ const tracker = (function() {
+ const out = {};
+ const api = [
+ '_addIgnoredOrganic _addIgnoredRef _addItem _addOrganic',
+ '_addTrans _clearIgnoredOrganic _clearIgnoredRef _clearOrganic',
+ '_cookiePathCopy _deleteCustomVar _getName _setAccount',
+ '_getAccount _getClientInfo _getDetectFlash _getDetectTitle',
+ '_getLinkerUrl _getLocalGifPath _getServiceMode _getVersion',
+ '_getVisitorCustomVar _initData _linkByPost',
+ '_setAllowAnchor _setAllowHash _setAllowLinker _setCampContentKey',
+ '_setCampMediumKey _setCampNameKey _setCampNOKey _setCampSourceKey',
+ '_setCampTermKey _setCampaignCookieTimeout _setCampaignTrack _setClientInfo',
+ '_setCookiePath _setCookiePersistence _setCookieTimeout _setCustomVar',
+ '_setDetectFlash _setDetectTitle _setDomainName _setLocalGifPath',
+ '_setLocalRemoteServerMode _setLocalServerMode _setReferrerOverride _setRemoteServerMode',
+ '_setSampleRate _setSessionTimeout _setSiteSpeedSampleRate _setSessionCookieTimeout',
+ '_setVar _setVisitorCookieTimeout _trackEvent _trackPageLoadTime',
+ '_trackPageview _trackSocial _trackTiming _trackTrans',
+ '_visitCode'
+ ].join(' ').split(/\s+/);
+ for ( const method of api ) {
+ out[method] = noopfn;
+ }
+ out._getLinkerUrl = function(a) {
+ return a;
+ };
+ // https://github.com/AdguardTeam/Scriptlets/issues/154
+ out._link = function(a) {
+ if ( typeof a !== 'string' ) { return; }
+ try {
+ window.location.assign(a);
+ } catch(ex) {
+ }
+ };
+ return out;
+ })();
+ //
+ const Gat = function() {
+ };
+ Gat.prototype._anonymizeIP = noopfn;
+ Gat.prototype._createTracker = noopfn;
+ Gat.prototype._forceSSL = noopfn;
+ Gat.prototype._getPlugin = noopfn;
+ Gat.prototype._getTracker = function() {
+ return tracker;
+ };
+ Gat.prototype._getTrackerByName = function() {
+ return tracker;
+ };
+ Gat.prototype._getTrackers = noopfn;
+ Gat.prototype.aa = noopfn;
+ Gat.prototype.ab = noopfn;
+ Gat.prototype.hb = noopfn;
+ Gat.prototype.la = noopfn;
+ Gat.prototype.oa = noopfn;
+ Gat.prototype.pa = noopfn;
+ Gat.prototype.u = noopfn;
+ const gat = new Gat();
+ window._gat = gat;
+ //
+ const gaq = new Gaq();
+ (function() {
+ const aa = window._gaq || [];
+ if ( Array.isArray(aa) ) {
+ while ( aa[0] ) {
+ gaq.push(aa.shift());
+ }
+ }
+ })();
+ window._gaq = gaq.qf = gaq;
+})();
diff --git a/src/web_accessible_resources/google-analytics_inpage_linkid.js b/src/web_accessible_resources/google-analytics_inpage_linkid.js
new file mode 100644
index 0000000..e893ca9
--- /dev/null
+++ b/src/web_accessible_resources/google-analytics_inpage_linkid.js
@@ -0,0 +1,28 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ window._gaq = window._gaq || {
+ push: function() {
+ }
+ };
+})();
diff --git a/src/web_accessible_resources/google-ima.js b/src/web_accessible_resources/google-ima.js
new file mode 100644
index 0000000..4556516
--- /dev/null
+++ b/src/web_accessible_resources/google-ima.js
@@ -0,0 +1,855 @@
+/**
+ *
+ * Source below is based on Mozilla source code:
+ * https://searchfox.org/mozilla-central/rev/d317e93d9a59c9e4c06ada85fbff9f6a1ceaaad1/browser/extensions/webcompat/shims/google-ima.js
+ *
+ * Modifications to the original code below this comment:
+ * - Avoid JS syntax not supported by older browser versions
+ * - Add missing shim event
+ * - Modified to avoid jshint warnings as per uBO's config
+ * - Added `OmidVerificationVendor` to `ima`
+ * - Have `AdError.getInnerError()` return `null`
+ * - Have `AdDisplayContainer` constructor add DIV element to container
+ * - Added missing event dispatcher functionality
+ * - Corrected return type of `Ad.getUniversalAdIds()`
+ * - Corrected typo in `UniversalAdIdInfo.getAdIdValue()` method name
+ * - Corrected dispatch of LOAD event when preloading is enabled
+ * - Corrected dispatch of CONTENT_PAUSE/RESUME_REQUESTED events
+ *
+ * Related issue:
+ * - https://github.com/uBlockOrigin/uBlock-issues/issues/2158
+ *
+**/
+
+'use strict';
+
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Bug 1713690 - Shim Google Interactive Media Ads ima3.js
+ *
+ * Many sites use ima3.js for ad bidding and placement, often in conjunction
+ * with Google Publisher Tags, Prebid.js and/or other scripts. This shim
+ * provides a stubbed-out version of the API which helps work around related
+ * site breakage, such as black bxoes where videos ought to be placed.
+ */
+
+if (!window.google || !window.google.ima || !window.google.ima.VERSION) {
+ const VERSION = "3.517.2";
+
+ const CheckCanAutoplay = (function() {
+ // Sourced from: https://searchfox.org/mozilla-central/source/dom/media/gtest/negative_duration.mp4
+ const TEST_VIDEO = new Blob(
+ [
+ new Uint32Array([
+ 469762048,
+ 1887007846,
+ 1752392036,
+ 0,
+ 913273705,
+ 1717987696,
+ 828601953,
+ -1878917120,
+ 1987014509,
+ 1811939328,
+ 1684567661,
+ 0,
+ 0,
+ 0,
+ -402456576,
+ 0,
+ 256,
+ 1,
+ 0,
+ 0,
+ 256,
+ 0,
+ 0,
+ 0,
+ 256,
+ 0,
+ 0,
+ 0,
+ 64,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 33554432,
+ -201261056,
+ 1801548404,
+ 1744830464,
+ 1684564852,
+ 251658241,
+ 0,
+ 0,
+ 0,
+ 0,
+ 16777216,
+ 0,
+ -1,
+ -1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 256,
+ 0,
+ 0,
+ 0,
+ 256,
+ 0,
+ 0,
+ 0,
+ 64,
+ 5,
+ 53250,
+ -2080309248,
+ 1634296941,
+ 738197504,
+ 1684563053,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ -2137614336,
+ -1,
+ -1,
+ 50261,
+ 754974720,
+ 1919706216,
+ 0,
+ 0,
+ 1701079414,
+ 0,
+ 0,
+ 0,
+ 1701079382,
+ 1851869295,
+ 1919249508,
+ 16777216,
+ 1852402979,
+ 102,
+ 1752004116,
+ 100,
+ 1,
+ 0,
+ 0,
+ 1852400676,
+ 102,
+ 1701995548,
+ 102,
+ 0,
+ 1,
+ 1819440396,
+ 32,
+ 1,
+ 1651799011,
+ 108,
+ 1937011607,
+ 100,
+ 0,
+ 1,
+ 1668702599,
+ 49,
+ 0,
+ 1,
+ 0,
+ 0,
+ 0,
+ 33555712,
+ 4718800,
+ 4718592,
+ 0,
+ 65536,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 16776984,
+ 1630601216,
+ 21193590,
+ -14745500,
+ 1729626337,
+ -1407254428,
+ 89161945,
+ 1049019,
+ 9453056,
+ -251611125,
+ 27269507,
+ -379058688,
+ -1329024392,
+ 268435456,
+ 1937011827,
+ 0,
+ 0,
+ 268435456,
+ 1668510835,
+ 0,
+ 0,
+ 335544320,
+ 2054386803,
+ 0,
+ 0,
+ 0,
+ 268435456,
+ 1868788851,
+ 0,
+ 0,
+ 671088640,
+ 2019915373,
+ 536870912,
+ 2019914356,
+ 0,
+ 16777216,
+ 16777216,
+ 0,
+ 0,
+ 0,
+ ]),
+ ],
+ { type: "video/mp4" }
+ );
+
+ let testVideo;
+
+ return function() {
+ if (!testVideo) {
+ testVideo = document.createElement("video");
+ testVideo.style =
+ "position:absolute; width:0; height:0; left:0; right:0; z-index:-1; border:0";
+ testVideo.setAttribute("muted", "muted");
+ testVideo.setAttribute("playsinline", "playsinline");
+ testVideo.src = URL.createObjectURL(TEST_VIDEO);
+ document.body.appendChild(testVideo);
+ }
+ return testVideo.play();
+ };
+ })();
+
+ const ima = {};
+
+ class AdDisplayContainer {
+ constructor(containerElement) {
+ const divElement = document.createElement("div");
+ divElement.style.setProperty("display", "none", "important");
+ divElement.style.setProperty("visibility", "collapse", "important");
+ containerElement.appendChild(divElement);
+ }
+ destroy() {}
+ initialize() {}
+ }
+
+ class ImaSdkSettings {
+ constructor() {
+ this.c = true;
+ this.f = {};
+ this.i = false;
+ this.l = "";
+ this.p = "";
+ this.r = 0;
+ this.t = "";
+ this.v = "";
+ }
+ getCompanionBackfill() {}
+ getDisableCustomPlaybackForIOS10Plus() {
+ return this.i;
+ }
+ getFeatureFlags() {
+ return this.f;
+ }
+ getLocale() {
+ return this.l;
+ }
+ getNumRedirects() {
+ return this.r;
+ }
+ getPlayerType() {
+ return this.t;
+ }
+ getPlayerVersion() {
+ return this.v;
+ }
+ getPpid() {
+ return this.p;
+ }
+ isCookiesEnabled() {
+ return this.c;
+ }
+ setAutoPlayAdBreaks() {}
+ setCompanionBackfill() {}
+ setCookiesEnabled(c) {
+ this.c = !!c;
+ }
+ setDisableCustomPlaybackForIOS10Plus(i) {
+ this.i = !!i;
+ }
+ setFeatureFlags(f) {
+ this.f = f;
+ }
+ setLocale(l) {
+ this.l = l;
+ }
+ setNumRedirects(r) {
+ this.r = r;
+ }
+ setPlayerType(t) {
+ this.t = t;
+ }
+ setPlayerVersion(v) {
+ this.v = v;
+ }
+ setPpid(p) {
+ this.p = p;
+ }
+ setSessionId(/*s*/) {}
+ setVpaidAllowed(/*a*/) {}
+ setVpaidMode(/*m*/) {}
+
+ // https://github.com/uBlockOrigin/uBlock-issues/issues/2265#issuecomment-1637094149
+ getDisableFlashAds() {
+ }
+ setDisableFlashAds() {
+ }
+ }
+ ImaSdkSettings.CompanionBackfillMode = {
+ ALWAYS: "always",
+ ON_MASTER_AD: "on_master_ad",
+ };
+ ImaSdkSettings.VpaidMode = {
+ DISABLED: 0,
+ ENABLED: 1,
+ INSECURE: 2,
+ };
+
+ class EventHandler {
+ constructor() {
+ this.listeners = new Map();
+ }
+
+ _dispatch(e) {
+ let listeners = this.listeners.get(e.type);
+ listeners = listeners ? Array.from(listeners.values()) : [];
+ for (const listener of listeners) {
+ try {
+ listener(e);
+ } catch (r) {
+ console.error(r);
+ }
+ }
+ }
+
+ addEventListener(types, c, options, context) {
+ if (!Array.isArray(types)) {
+ types = [types];
+ }
+
+ for (const t of types) {
+ if (!this.listeners.has(t)) {
+ this.listeners.set(t, new Map());
+ }
+ this.listeners.get(t).set(c, c.bind(context || this));
+ }
+ }
+
+ removeEventListener(types, c) {
+ if (!Array.isArray(types)) {
+ types = [types];
+ }
+
+ for (const t of types) {
+ const typeSet = this.listeners.get(t);
+ if (typeSet) {
+ typeSet.delete(c);
+ }
+ }
+ }
+ }
+
+ class AdsLoader extends EventHandler {
+ constructor() {
+ super();
+ this.settings = new ImaSdkSettings();
+ }
+ contentComplete() {}
+ destroy() {}
+ getSettings() {
+ return this.settings;
+ }
+ getVersion() {
+ return VERSION;
+ }
+ requestAds(/*r, c*/) {
+ // If autoplay is disabled and the page is trying to autoplay a tracking
+ // ad, then IMA fails with an error, and the page is expected to request
+ // ads again later when the user clicks to play.
+ CheckCanAutoplay().then(
+ () => {
+ const { ADS_MANAGER_LOADED } = AdsManagerLoadedEvent.Type;
+ this._dispatch(new ima.AdsManagerLoadedEvent(ADS_MANAGER_LOADED));
+ },
+ () => {
+ const e = new ima.AdError(
+ "adPlayError",
+ 1205,
+ 1205,
+ "The browser prevented playback initiated without user interaction."
+ );
+ this._dispatch(new ima.AdErrorEvent(e));
+ }
+ );
+ }
+ }
+
+ class AdsManager extends EventHandler {
+ constructor() {
+ super();
+ this.volume = 1;
+ this._enablePreloading = false;
+ }
+ collapse() {}
+ configureAdsManager() {}
+ destroy() {}
+ discardAdBreak() {}
+ expand() {}
+ focus() {}
+ getAdSkippableState() {
+ return false;
+ }
+ getCuePoints() {
+ return [0];
+ }
+ getCurrentAd() {
+ return currentAd;
+ }
+ getCurrentAdCuePoints() {
+ return [];
+ }
+ getRemainingTime() {
+ return 0;
+ }
+ getVolume() {
+ return this.volume;
+ }
+ init(/*w, h, m, e*/) {
+ if (this._enablePreloading) {
+ this._dispatch(new ima.AdEvent(AdEvent.Type.LOADED));
+ }
+ }
+ isCustomClickTrackingUsed() {
+ return false;
+ }
+ isCustomPlaybackUsed() {
+ return false;
+ }
+ pause() {}
+ requestNextAdBreak() {}
+ resize(/*w, h, m*/) {}
+ resume() {}
+ setVolume(v) {
+ this.volume = v;
+ }
+ skip() {}
+ start() {
+ requestAnimationFrame(() => {
+ for (const type of [
+ AdEvent.Type.LOADED,
+ AdEvent.Type.STARTED,
+ AdEvent.Type.CONTENT_PAUSE_REQUESTED,
+ AdEvent.Type.AD_BUFFERING,
+ AdEvent.Type.FIRST_QUARTILE,
+ AdEvent.Type.MIDPOINT,
+ AdEvent.Type.THIRD_QUARTILE,
+ AdEvent.Type.COMPLETE,
+ AdEvent.Type.ALL_ADS_COMPLETED,
+ AdEvent.Type.CONTENT_RESUME_REQUESTED,
+ ]) {
+ try {
+ this._dispatch(new ima.AdEvent(type));
+ } catch (e) {
+ console.error(e);
+ }
+ }
+ });
+ }
+ stop() {}
+ updateAdsRenderingSettings(/*s*/) {}
+ }
+
+ class AdsRenderingSettings {}
+
+ class AdsRequest {
+ setAdWillAutoPlay() {}
+ setAdWillPlayMuted() {}
+ setContinuousPlayback() {}
+ }
+
+ class AdPodInfo {
+ getAdPosition() {
+ return 1;
+ }
+ getIsBumper() {
+ return false;
+ }
+ getMaxDuration() {
+ return -1;
+ }
+ getPodIndex() {
+ return 1;
+ }
+ getTimeOffset() {
+ return 0;
+ }
+ getTotalAds() {
+ return 1;
+ }
+ }
+
+ class Ad {
+ constructor() {
+ this._pi = new AdPodInfo();
+ }
+ getAdId() {
+ return "";
+ }
+ getAdPodInfo() {
+ return this._pi;
+ }
+ getAdSystem() {
+ return "";
+ }
+ getAdvertiserName() {
+ return "";
+ }
+ getApiFramework() {
+ return null;
+ }
+ getCompanionAds() {
+ return [];
+ }
+ getContentType() {
+ return "";
+ }
+ getCreativeAdId() {
+ return "";
+ }
+ getCreativeId() {
+ return "";
+ }
+ getDealId() {
+ return "";
+ }
+ getDescription() {
+ return "";
+ }
+ getDuration() {
+ return 8.5;
+ }
+ getHeight() {
+ return 0;
+ }
+ getMediaUrl() {
+ return null;
+ }
+ getMinSuggestedDuration() {
+ return -2;
+ }
+ getSkipTimeOffset() {
+ return -1;
+ }
+ getSurveyUrl() {
+ return null;
+ }
+ getTitle() {
+ return "";
+ }
+ getTraffickingParameters() {
+ return {};
+ }
+ getTraffickingParametersString() {
+ return "";
+ }
+ getUiElements() {
+ return [""];
+ }
+ getUniversalAdIdRegistry() {
+ return "unknown";
+ }
+ getUniversalAdIds() {
+ return [new UniversalAdIdInfo()];
+ }
+ getUniversalAdIdValue() {
+ return "unknown";
+ }
+ getVastMediaBitrate() {
+ return 0;
+ }
+ getVastMediaHeight() {
+ return 0;
+ }
+ getVastMediaWidth() {
+ return 0;
+ }
+ getWidth() {
+ return 0;
+ }
+ getWrapperAdIds() {
+ return [""];
+ }
+ getWrapperAdSystems() {
+ return [""];
+ }
+ getWrapperCreativeIds() {
+ return [""];
+ }
+ isLinear() {
+ return true;
+ }
+ isSkippable() {
+ return true;
+ }
+ }
+
+ class CompanionAd {
+ getAdSlotId() {
+ return "";
+ }
+ getContent() {
+ return "";
+ }
+ getContentType() {
+ return "";
+ }
+ getHeight() {
+ return 1;
+ }
+ getWidth() {
+ return 1;
+ }
+ }
+
+ class AdError {
+ constructor(type, code, vast, message) {
+ this.errorCode = code;
+ this.message = message;
+ this.type = type;
+ this.vastErrorCode = vast;
+ }
+ getErrorCode() {
+ return this.errorCode;
+ }
+ getInnerError() {
+ return null;
+ }
+ getMessage() {
+ return this.message;
+ }
+ getType() {
+ return this.type;
+ }
+ getVastErrorCode() {
+ return this.vastErrorCode;
+ }
+ toString() {
+ return `AdError ${this.errorCode}: ${this.message}`;
+ }
+ }
+ AdError.ErrorCode = {};
+ AdError.Type = {};
+
+ const isEngadget = () => {
+ try {
+ for (const ctx of Object.values(window.vidible._getContexts())) {
+ const player = ctx.getPlayer();
+ if (!player) { continue;}
+ const div = player.div;
+ if (!div) { continue; }
+ if (div.innerHTML.includes("www.engadget.com")) {
+ return true;
+ }
+ }
+ } catch (_) {}
+ return false;
+ };
+
+ const currentAd = isEngadget() ? undefined : new Ad();
+
+ class AdEvent {
+ constructor(type) {
+ this.type = type;
+ }
+ getAd() {
+ return currentAd;
+ }
+ getAdData() {
+ return {};
+ }
+ }
+ AdEvent.Type = {
+ AD_BREAK_READY: "adBreakReady",
+ AD_BUFFERING: "adBuffering",
+ AD_CAN_PLAY: "adCanPlay",
+ AD_METADATA: "adMetadata",
+ AD_PROGRESS: "adProgress",
+ ALL_ADS_COMPLETED: "allAdsCompleted",
+ CLICK: "click",
+ COMPLETE: "complete",
+ CONTENT_PAUSE_REQUESTED: "contentPauseRequested",
+ CONTENT_RESUME_REQUESTED: "contentResumeRequested",
+ DURATION_CHANGE: "durationChange",
+ EXPANDED_CHANGED: "expandedChanged",
+ FIRST_QUARTILE: "firstQuartile",
+ IMPRESSION: "impression",
+ INTERACTION: "interaction",
+ LINEAR_CHANGE: "linearChange",
+ LINEAR_CHANGED: "linearChanged",
+ LOADED: "loaded",
+ LOG: "log",
+ MIDPOINT: "midpoint",
+ PAUSED: "pause",
+ RESUMED: "resume",
+ SKIPPABLE_STATE_CHANGED: "skippableStateChanged",
+ SKIPPED: "skip",
+ STARTED: "start",
+ THIRD_QUARTILE: "thirdQuartile",
+ USER_CLOSE: "userClose",
+ VIDEO_CLICKED: "videoClicked",
+ VIDEO_ICON_CLICKED: "videoIconClicked",
+ VIEWABLE_IMPRESSION: "viewable_impression",
+ VOLUME_CHANGED: "volumeChange",
+ VOLUME_MUTED: "mute",
+ };
+
+ class AdErrorEvent {
+ constructor(error) {
+ this.type = "adError";
+ this.error = error;
+ }
+ getError() {
+ return this.error;
+ }
+ getUserRequestContext() {
+ return {};
+ }
+ }
+ AdErrorEvent.Type = {
+ AD_ERROR: "adError",
+ };
+
+ const manager = new AdsManager();
+
+ class AdsManagerLoadedEvent {
+ constructor(type) {
+ this.type = type;
+ }
+ getAdsManager(c, settings) {
+ if (settings && settings.enablePreloading) {
+ manager._enablePreloading = true;
+ }
+ return manager;
+ }
+ getUserRequestContext() {
+ return {};
+ }
+ }
+ AdsManagerLoadedEvent.Type = {
+ ADS_MANAGER_LOADED: "adsManagerLoaded",
+ };
+
+ class CustomContentLoadedEvent {}
+ CustomContentLoadedEvent.Type = {
+ CUSTOM_CONTENT_LOADED: "deprecated-event",
+ };
+
+ class CompanionAdSelectionSettings {}
+ CompanionAdSelectionSettings.CreativeType = {
+ ALL: "All",
+ FLASH: "Flash",
+ IMAGE: "Image",
+ };
+ CompanionAdSelectionSettings.ResourceType = {
+ ALL: "All",
+ HTML: "Html",
+ IFRAME: "IFrame",
+ STATIC: "Static",
+ };
+ CompanionAdSelectionSettings.SizeCriteria = {
+ IGNORE: "IgnoreSize",
+ SELECT_EXACT_MATCH: "SelectExactMatch",
+ SELECT_NEAR_MATCH: "SelectNearMatch",
+ };
+
+ class AdCuePoints {
+ getCuePoints() {
+ return [];
+ }
+ }
+
+ class AdProgressData {}
+
+ class UniversalAdIdInfo {
+ getAdIdRegistry() {
+ return "";
+ }
+ getAdIdValue() {
+ return "";
+ }
+ }
+
+ Object.assign(ima, {
+ AdCuePoints,
+ AdDisplayContainer,
+ AdError,
+ AdErrorEvent,
+ AdEvent,
+ AdPodInfo,
+ AdProgressData,
+ AdsLoader,
+ AdsManager: manager,
+ AdsManagerLoadedEvent,
+ AdsRenderingSettings,
+ AdsRequest,
+ CompanionAd,
+ CompanionAdSelectionSettings,
+ CustomContentLoadedEvent,
+ gptProxyInstance: {},
+ ImaSdkSettings,
+ OmidAccessMode: {
+ DOMAIN: "domain",
+ FULL: "full",
+ LIMITED: "limited",
+ },
+ OmidVerificationVendor: {
+ 1: "OTHER",
+ 2: "GOOGLE",
+ GOOGLE: 2,
+ OTHER: 1
+ },
+ settings: new ImaSdkSettings(),
+ UiElements: {
+ AD_ATTRIBUTION: "adAttribution",
+ COUNTDOWN: "countdown",
+ },
+ UniversalAdIdInfo,
+ VERSION,
+ ViewMode: {
+ FULLSCREEN: "fullscreen",
+ NORMAL: "normal",
+ },
+ });
+
+ if (!window.google) {
+ window.google = {};
+ }
+
+ window.google.ima = ima;
+}
diff --git a/src/web_accessible_resources/googlesyndication_adsbygoogle.js b/src/web_accessible_resources/googlesyndication_adsbygoogle.js
new file mode 100644
index 0000000..dec634b
--- /dev/null
+++ b/src/web_accessible_resources/googlesyndication_adsbygoogle.js
@@ -0,0 +1,56 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ const init = ( ) => {
+ window.adsbygoogle = {
+ loaded: true,
+ push: function() {
+ }
+ };
+ const phs = document.querySelectorAll('.adsbygoogle');
+ const css = 'height:1px!important;max-height:1px!important;max-width:1px!important;width:1px!important;';
+ for ( let i = 0; i < phs.length; i++ ) {
+ const id = `aswift_${i}`;
+ if ( document.querySelector(`iframe#${id}`) !== null ) { continue; }
+ const fr = document.createElement('iframe');
+ fr.id = id;
+ fr.style = css;
+ const cfr = document.createElement('iframe');
+ cfr.id = `google_ads_frame${i}`;
+ fr.appendChild(cfr);
+ phs[i].appendChild(fr);
+ }
+ };
+ if (
+ document.querySelectorAll('.adsbygoogle').length === 0 &&
+ document.readyState === 'loading'
+ ) {
+ window.addEventListener('DOMContentLoaded', init, { once: true });
+ } else {
+ init();
+ }
+})();
+
+/*
+pagead2.googlesyndication.com/pagead/js/adsbygoogle.js,adsbygoogle-placeholder,adsbygoogleStatus,google_ad_channel,google_ad_client,google_ad_format,google_ad_frequency_hint,google_ad_height,google_ad_host,google_ad_host_channel,google_ad_modifications,google_ad_region,google_ad_resizable,google_ad_resize,google_ad_section,google_ad_semantic_area,google_ad_width,google_adbreak_test,google_ads_frame,google_ads_iframe,google_adtest,google_admob_interstitial_slot,google_admob_rewarded_slot,google_admob_ads_only,google-adsense-platform-account,google_adsense_settings,google_ama_config,google-ama-order-assurance,google_ama_settings,google_ama_state,google_apltlad,google_audio_sense,google-auto-placed-read-aloud-player-reserved,google_debug_params,google_full_width_responsive,google_full_width_responsive_allowed,google_image_requests,google_js_errors,google_js_reporting_queue,google_loader_features_used,google_llp,google_logging_queue,google_max_ad_content_rating,google_measure_js_timing,google_ml_rank,google_overlays,google_override_format,google_package,google_page_url,google_persistent_state_async,google_pgb_reactive,google_placement_id,google_prev_ad_formats_by_region,google_prev_ad_slotnames_by_region,google_reactive_ad_format,google_reactive_ads_global_state,google_resizing_height,google_resizing_width,google_responsive_auto_format,google_responsive_dummy_ad,google_responsive_formats,google_restrict_data_processing,google_rum_task_id_counter,google_safe_for_responsive_override,google_shadow_mode,google_srt,google_tag_for_under_age_of_consent,google_tag_origin,google_tag_partner,google_traffic_source,google_unique_id,googletag
+*/
diff --git a/src/web_accessible_resources/googletagmanager_gtm.js b/src/web_accessible_resources/googletagmanager_gtm.js
new file mode 100644
index 0000000..09f4658
--- /dev/null
+++ b/src/web_accessible_resources/googletagmanager_gtm.js
@@ -0,0 +1,43 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ const noopfn = function() {
+ };
+ const w = window;
+ w.ga = w.ga || noopfn;
+ const dl = w.dataLayer;
+ if ( dl instanceof Object === false ) { return; }
+ if ( dl.hide instanceof Object && typeof dl.hide.end === 'function' ) {
+ dl.hide.end();
+ }
+ if ( typeof dl.push === 'function' ) {
+ dl.push = function(o) {
+ if (
+ o instanceof Object &&
+ typeof o.eventCallback === 'function'
+ ) {
+ setTimeout(o.eventCallback, 1);
+ }
+ };
+ }
+})();
diff --git a/src/web_accessible_resources/googletagservices_gpt.js b/src/web_accessible_resources/googletagservices_gpt.js
new file mode 100644
index 0000000..b151936
--- /dev/null
+++ b/src/web_accessible_resources/googletagservices_gpt.js
@@ -0,0 +1,154 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ // https://developers.google.com/doubleclick-gpt/reference
+ const noopfn = function() {
+ }.bind();
+ const noopthisfn = function() {
+ return this;
+ };
+ const noopnullfn = function() {
+ return null;
+ };
+ const nooparrayfn = function() {
+ return [];
+ };
+ const noopstrfn = function() {
+ return '';
+ };
+ //
+ const companionAdsService = {
+ addEventListener: noopthisfn,
+ enableSyncLoading: noopfn,
+ setRefreshUnfilledSlots: noopfn
+ };
+ const contentService = {
+ addEventListener: noopthisfn,
+ setContent: noopfn
+ };
+ const PassbackSlot = function() {
+ };
+ let p = PassbackSlot.prototype;
+ p.display = noopfn;
+ p.get = noopnullfn;
+ p.set = noopthisfn;
+ p.setClickUrl = noopthisfn;
+ p.setTagForChildDirectedTreatment = noopthisfn;
+ p.setTargeting = noopthisfn;
+ p.updateTargetingFromMap = noopthisfn;
+ const pubAdsService = {
+ addEventListener: noopthisfn,
+ clear: noopfn,
+ clearCategoryExclusions: noopthisfn,
+ clearTagForChildDirectedTreatment: noopthisfn,
+ clearTargeting: noopthisfn,
+ collapseEmptyDivs: noopfn,
+ defineOutOfPagePassback: function() { return new PassbackSlot(); },
+ definePassback: function() { return new PassbackSlot(); },
+ disableInitialLoad: noopfn,
+ display: noopfn,
+ enableAsyncRendering: noopfn,
+ enableLazyLoad: noopfn,
+ enableSingleRequest: noopfn,
+ enableSyncRendering: noopfn,
+ enableVideoAds: noopfn,
+ get: noopnullfn,
+ getAttributeKeys: nooparrayfn,
+ getTargeting: nooparrayfn,
+ getTargetingKeys: nooparrayfn,
+ getSlots: nooparrayfn,
+ refresh: noopfn,
+ removeEventListener: noopfn,
+ set: noopthisfn,
+ setCategoryExclusion: noopthisfn,
+ setCentering: noopfn,
+ setCookieOptions: noopthisfn,
+ setForceSafeFrame: noopthisfn,
+ setLocation: noopthisfn,
+ setPublisherProvidedId: noopthisfn,
+ setPrivacySettings: noopthisfn,
+ setRequestNonPersonalizedAds: noopthisfn,
+ setSafeFrameConfig: noopthisfn,
+ setTagForChildDirectedTreatment: noopthisfn,
+ setTargeting: noopthisfn,
+ setVideoContent: noopthisfn,
+ updateCorrelator: noopfn
+ };
+ const SizeMappingBuilder = function() {
+ };
+ p = SizeMappingBuilder.prototype;
+ p.addSize = noopthisfn;
+ p.build = noopnullfn;
+ const Slot = function() {
+ };
+ p = Slot.prototype;
+ p.addService = noopthisfn;
+ p.clearCategoryExclusions = noopthisfn;
+ p.clearTargeting = noopthisfn;
+ p.defineSizeMapping = noopthisfn;
+ p.get = noopnullfn;
+ p.getAdUnitPath = nooparrayfn;
+ p.getAttributeKeys = nooparrayfn;
+ p.getCategoryExclusions = nooparrayfn;
+ p.getDomId = noopstrfn;
+ p.getResponseInformation = noopnullfn;
+ p.getSlotElementId = noopstrfn;
+ p.getSlotId = noopthisfn;
+ p.getTargeting = nooparrayfn;
+ p.getTargetingKeys = nooparrayfn;
+ p.set = noopthisfn;
+ p.setCategoryExclusion = noopthisfn;
+ p.setClickUrl = noopthisfn;
+ p.setCollapseEmptyDiv = noopthisfn;
+ p.setTargeting = noopthisfn;
+ p.updateTargetingFromMap = noopthisfn;
+ //
+ const gpt = window.googletag || {};
+ const cmd = gpt.cmd || [];
+ gpt.apiReady = true;
+ gpt.cmd = [];
+ gpt.cmd.push = function(a) {
+ try {
+ a();
+ } catch (ex) {
+ }
+ return 1;
+ };
+ gpt.companionAds = function() { return companionAdsService; };
+ gpt.content = function() { return contentService; };
+ gpt.defineOutOfPageSlot = function() { return new Slot(); };
+ gpt.defineSlot = function() { return new Slot(); };
+ gpt.destroySlots = noopfn;
+ gpt.disablePublisherConsole = noopfn;
+ gpt.display = noopfn;
+ gpt.enableServices = noopfn;
+ gpt.getVersion = noopstrfn;
+ gpt.pubads = function() { return pubAdsService; };
+ gpt.pubadsReady = true;
+ gpt.setAdIframeTitle = noopfn;
+ gpt.sizeMapping = function() { return new SizeMappingBuilder(); };
+ window.googletag = gpt;
+ while ( cmd.length !== 0 ) {
+ gpt.cmd.push(cmd.shift());
+ }
+})();
diff --git a/src/web_accessible_resources/hd-main.js b/src/web_accessible_resources/hd-main.js
new file mode 100644
index 0000000..149d603
--- /dev/null
+++ b/src/web_accessible_resources/hd-main.js
@@ -0,0 +1,46 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ const l = {};
+ const noopfn = function() {
+ };
+ const props = [
+ "$j","Ad","Bd","Cd","Dd","Ed","Fd","Gd","Hd","Id","Jd","Nj","Oc","Pc","Pe",
+ "Qc","Qe","Rc","Re","Ri","Sc","Tc","Uc","Vc","Wc","Wg","Xc","Xg","Yc","Yd",
+ "ad","ae","bd","bf","cd","dd","ed","ef","ek","fd","fg","fh","fk","gd","hd",
+ "ig","ij","jd","kd","ke","ld","md","mi","nd","od","oh","pd","pf","qd","rd",
+ "sd","td","ud","vd","wd","wg","xd","xh","yd","zd",
+ "$d","$e","$k","Ae","Af","Aj","Be","Ce","De","Ee","Ek","Eo","Ep","Fe","Fo",
+ "Ge","Gh","Hk","Ie","Ip","Je","Ke","Kk","Kq","Le","Lh","Lk","Me","Mm","Ne",
+ "Oe","Pe","Qe","Re","Rp","Se","Te","Ue","Ve","Vp","We","Xd","Xe","Yd","Ye",
+ "Zd","Ze","Zf","Zk","ae","af","al","be","bf","bg","ce","cp","df","di","ee",
+ "ef","fe","ff","gf","gm","he","hf","ie","je","jf","ke","kf","kl","le","lf",
+ "lk","mf","mg","mn","nf","oe","of","pe","pf","pg","qe","qf","re","rf","se",
+ "sf","te","tf","ti","ue","uf","ve","vf","we","wf","wg","wi","xe","ye","yf",
+ "yk","yl","ze","zf","zk"
+ ];
+ for ( let i = 0; i < props.length; i++ ) {
+ l[props[i]] = noopfn;
+ }
+ window.L = window.J = l;
+})();
diff --git a/src/web_accessible_resources/nobab.js b/src/web_accessible_resources/nobab.js
new file mode 100644
index 0000000..32a2983
--- /dev/null
+++ b/src/web_accessible_resources/nobab.js
@@ -0,0 +1,87 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ const signatures = [
+ [ 'blockadblock' ],
+ [ 'babasbm' ],
+ [ /getItem\('babn'\)/ ],
+ [
+ 'getElementById',
+ 'String.fromCharCode',
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
+ 'charAt',
+ 'DOMContentLoaded',
+ 'AdBlock',
+ 'addEventListener',
+ 'doScroll',
+ 'fromCharCode',
+ '<<2|r>>4',
+ 'sessionStorage',
+ 'clientWidth',
+ 'localStorage',
+ 'Math',
+ 'random'
+ ],
+ ];
+ const check = function(s) {
+ for ( let i = 0; i < signatures.length; i++ ) {
+ const tokens = signatures[i];
+ let match = 0;
+ for ( let j = 0; j < tokens.length; j++ ) {
+ const token = tokens[j];
+ const pos = token instanceof RegExp
+ ? s.search(token)
+ : s.indexOf(token);
+ if ( pos !== -1 ) { match += 1; }
+ }
+ if ( (match / tokens.length) >= 0.8 ) { return true; }
+ }
+ return false;
+ };
+ window.eval = new Proxy(window.eval, { // jshint ignore: line
+ apply: function(target, thisArg, args) {
+ const a = args[0];
+ if ( typeof a !== 'string' || !check(a) ) {
+ return target.apply(thisArg, args);
+ }
+ if ( document.body ) {
+ document.body.style.removeProperty('visibility');
+ }
+ let el = document.getElementById('babasbmsgx');
+ if ( el ) {
+ el.parentNode.removeChild(el);
+ }
+ }
+ });
+ window.setTimeout = new Proxy(window.setTimeout, {
+ apply: function(target, thisArg, args) {
+ const a = args[0];
+ if (
+ typeof a !== 'string' ||
+ /\.bab_elementid.$/.test(a) === false
+ ) {
+ return target.apply(thisArg, args);
+ }
+ }
+ });
+})();
diff --git a/src/web_accessible_resources/nobab2.js b/src/web_accessible_resources/nobab2.js
new file mode 100644
index 0000000..ea3b210
--- /dev/null
+++ b/src/web_accessible_resources/nobab2.js
@@ -0,0 +1,42 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2021-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ const script = document.currentScript;
+ if ( script === null ) { return; }
+ const src = script.src;
+ if ( typeof src !== 'string' ) { return; }
+ // The scriplet is meant to act ONLY when it's being used as a redirection
+ // for specific domains.
+ const re = new RegExp(
+ '^https?://[\\w-]+\\.(' +
+ [
+ 'adclixx\\.net',
+ 'adnetasia\\.com',
+ 'adtrackers\\.net',
+ 'bannertrack\\.net',
+ ].join('|') +
+ ')/.'
+ );
+ if ( re.test(src) === false ) { return; }
+ window.nH7eXzOsG = 858;
+})();
diff --git a/src/web_accessible_resources/noeval-silent.js b/src/web_accessible_resources/noeval-silent.js
new file mode 100644
index 0000000..cfe6e3b
--- /dev/null
+++ b/src/web_accessible_resources/noeval-silent.js
@@ -0,0 +1,28 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ window.eval = new Proxy(window.eval, { // jshint ignore: line
+ apply: function() {
+ }
+ });
+})();
diff --git a/src/web_accessible_resources/noeval.js b/src/web_accessible_resources/noeval.js
new file mode 100644
index 0000000..e1f2a74
--- /dev/null
+++ b/src/web_accessible_resources/noeval.js
@@ -0,0 +1,30 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ const log = console.log.bind(console);
+ window.eval = new Proxy(window.eval, { // jshint ignore: line
+ apply: function(target, thisArg, args) {
+ log(`Document tried to eval... ${args[0]}\n`);
+ }
+ });
+})();
diff --git a/src/web_accessible_resources/nofab.js b/src/web_accessible_resources/nofab.js
new file mode 100644
index 0000000..9e50e0b
--- /dev/null
+++ b/src/web_accessible_resources/nofab.js
@@ -0,0 +1,67 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ const noopfn = function() {
+ };
+ const Fab = function() {};
+ Fab.prototype.check = noopfn;
+ Fab.prototype.clearEvent = noopfn;
+ Fab.prototype.emitEvent = noopfn;
+ Fab.prototype.on = function(a, b) {
+ if ( !a ) { b(); }
+ return this;
+ };
+ Fab.prototype.onDetected = function() {
+ return this;
+ };
+ Fab.prototype.onNotDetected = function(a) {
+ a();
+ return this;
+ };
+ Fab.prototype.setOption = noopfn;
+ Fab.prototype.options = {
+ set: noopfn,
+ get: noopfn,
+ };
+ const fab = new Fab();
+ const getSetFab = {
+ get: function() { return Fab; },
+ set: function() {}
+ };
+ const getsetfab = {
+ get: function() { return fab; },
+ set: function() {}
+ };
+ if ( window.hasOwnProperty('FuckAdBlock') ) { window.FuckAdBlock = Fab; }
+ else { Object.defineProperty(window, 'FuckAdBlock', getSetFab); }
+ if ( window.hasOwnProperty('BlockAdBlock') ) { window.BlockAdBlock = Fab; }
+ else { Object.defineProperty(window, 'BlockAdBlock', getSetFab); }
+ if ( window.hasOwnProperty('SniffAdBlock') ) { window.SniffAdBlock = Fab; }
+ else { Object.defineProperty(window, 'SniffAdBlock', getSetFab); }
+ if ( window.hasOwnProperty('fuckAdBlock') ) { window.fuckAdBlock = fab; }
+ else { Object.defineProperty(window, 'fuckAdBlock', getsetfab); }
+ if ( window.hasOwnProperty('blockAdBlock') ) { window.blockAdBlock = fab; }
+ else { Object.defineProperty(window, 'blockAdBlock', getsetfab); }
+ if ( window.hasOwnProperty('sniffAdBlock') ) { window.sniffAdBlock = fab; }
+ else { Object.defineProperty(window, 'sniffAdBlock', getsetfab); }
+})();
diff --git a/src/web_accessible_resources/noop-0.1s.mp3 b/src/web_accessible_resources/noop-0.1s.mp3
new file mode 100644
index 0000000..147d71b
--- /dev/null
+++ b/src/web_accessible_resources/noop-0.1s.mp3
Binary files differ
diff --git a/src/web_accessible_resources/noop-0.5s.mp3 b/src/web_accessible_resources/noop-0.5s.mp3
new file mode 100644
index 0000000..b82866b
--- /dev/null
+++ b/src/web_accessible_resources/noop-0.5s.mp3
Binary files differ
diff --git a/src/web_accessible_resources/noop-1s.mp4 b/src/web_accessible_resources/noop-1s.mp4
new file mode 100644
index 0000000..5689d4a
--- /dev/null
+++ b/src/web_accessible_resources/noop-1s.mp4
Binary files differ
diff --git a/src/web_accessible_resources/noop-vmap1.0.xml b/src/web_accessible_resources/noop-vmap1.0.xml
new file mode 100644
index 0000000..acd6fb8
--- /dev/null
+++ b/src/web_accessible_resources/noop-vmap1.0.xml
@@ -0,0 +1 @@
+<vmap:VMAP xmlns:vmap="http://www.iab.net/videosuite/vmap" version="1.0"></vmap:VMAP>
diff --git a/src/web_accessible_resources/noop.css b/src/web_accessible_resources/noop.css
new file mode 100644
index 0000000..79a9626
--- /dev/null
+++ b/src/web_accessible_resources/noop.css
@@ -0,0 +1 @@
+/* */
diff --git a/src/web_accessible_resources/noop.html b/src/web_accessible_resources/noop.html
new file mode 100644
index 0000000..8aaae14
--- /dev/null
+++ b/src/web_accessible_resources/noop.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<html>
+ <head><title></title></head>
+ <body></body>
+</html>
diff --git a/src/web_accessible_resources/noop.js b/src/web_accessible_resources/noop.js
new file mode 100644
index 0000000..b977b08
--- /dev/null
+++ b/src/web_accessible_resources/noop.js
@@ -0,0 +1,3 @@
+(function() {
+ 'use strict';
+})();
diff --git a/src/web_accessible_resources/noop.json b/src/web_accessible_resources/noop.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/src/web_accessible_resources/noop.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/src/web_accessible_resources/noop.txt b/src/web_accessible_resources/noop.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/src/web_accessible_resources/noop.txt
@@ -0,0 +1 @@
+
diff --git a/src/web_accessible_resources/outbrain-widget.js b/src/web_accessible_resources/outbrain-widget.js
new file mode 100644
index 0000000..10ba605
--- /dev/null
+++ b/src/web_accessible_resources/outbrain-widget.js
@@ -0,0 +1,72 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ const noopfn = function() {
+ };
+ const obr = {};
+ const methods = [
+ 'callClick',
+ 'callLoadMore',
+ 'callRecs',
+ 'callUserZapping',
+ 'callWhatIs',
+ 'cancelRecommendation',
+ 'cancelRecs',
+ 'closeCard',
+ 'closeModal',
+ 'closeTbx',
+ 'errorInjectionHandler',
+ 'getCountOfRecs',
+ 'getStat',
+ 'imageError',
+ 'manualVideoClicked',
+ 'onOdbReturn',
+ 'onVideoClick',
+ 'pagerLoad',
+ 'recClicked',
+ 'refreshSpecificWidget',
+ 'renderSpaWidgets',
+ 'refreshWidget',
+ 'reloadWidget',
+ 'researchWidget',
+ 'returnedError',
+ 'returnedHtmlData',
+ 'returnedIrdData',
+ 'returnedJsonData',
+ 'scrollLoad',
+ 'showDescription',
+ 'showRecInIframe',
+ 'userZappingMessage',
+ 'zappingFormAction'
+ ];
+ obr.extern = {
+ video: {
+ getVideoRecs: noopfn,
+ videoClicked: noopfn
+ }
+ };
+ methods.forEach(function(a) {
+ obr.extern[a] = noopfn;
+ });
+ window.OBR = window.OBR || obr;
+})();
diff --git a/src/web_accessible_resources/popads-dummy.js b/src/web_accessible_resources/popads-dummy.js
new file mode 100644
index 0000000..0ca0b1e
--- /dev/null
+++ b/src/web_accessible_resources/popads-dummy.js
@@ -0,0 +1,30 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ delete window.PopAds;
+ delete window.popns;
+ Object.defineProperties(window, {
+ PopAds: { value: {} },
+ popns: { value: {} }
+ });
+})();
diff --git a/src/web_accessible_resources/popads.js b/src/web_accessible_resources/popads.js
new file mode 100644
index 0000000..df86e97
--- /dev/null
+++ b/src/web_accessible_resources/popads.js
@@ -0,0 +1,40 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ const magic = String.fromCharCode(Date.now() % 26 + 97) +
+ Math.floor(Math.random() * 982451653 + 982451653).toString(36);
+ const oe = window.onerror;
+ window.onerror = function(msg, src, line, col, error) {
+ if ( typeof msg === 'string' && msg.indexOf(magic) !== -1 ) { return true; }
+ if ( oe instanceof Function ) {
+ return oe(msg, src, line, col, error);
+ }
+ }.bind();
+ const throwMagic = function() { throw new ReferenceError(magic); };
+ delete window.PopAds;
+ delete window.popns;
+ Object.defineProperties(window, {
+ PopAds: { set: throwMagic },
+ popns: { set: throwMagic }
+ });
+})();
diff --git a/src/web_accessible_resources/prebid-ads.js b/src/web_accessible_resources/prebid-ads.js
new file mode 100644
index 0000000..f3b2dc6
--- /dev/null
+++ b/src/web_accessible_resources/prebid-ads.js
@@ -0,0 +1,26 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2022-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ window.canRunAds = true;
+ window.isAdBlockActive = false;
+})();
diff --git a/src/web_accessible_resources/scorecardresearch_beacon.js b/src/web_accessible_resources/scorecardresearch_beacon.js
new file mode 100644
index 0000000..5ca7203
--- /dev/null
+++ b/src/web_accessible_resources/scorecardresearch_beacon.js
@@ -0,0 +1,31 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2019-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+(function() {
+ 'use strict';
+ window.COMSCORE = {
+ purge: function() {
+ window._comscore = [];
+ },
+ beacon: function() {
+ }
+ };
+})();
diff --git a/src/whitelist.html b/src/whitelist.html
new file mode 100644
index 0000000..02d31d8
--- /dev/null
+++ b/src/whitelist.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>uBlock — Whitelist</title>
+
+<link rel="stylesheet" href="lib/codemirror/lib/codemirror.css">
+<link rel="stylesheet" href="lib/codemirror/addon/search/matchesonscrollbar.css">
+
+<link rel="stylesheet" href="css/themes/default.css">
+<link rel="stylesheet" href="css/common.css">
+<link rel="stylesheet" href="css/fa-icons.css">
+<link rel="stylesheet" href="css/dashboard-common.css">
+<link rel="stylesheet" href="css/cloud-ui.css">
+<link rel="stylesheet" href="css/whitelist.css">
+<link rel="stylesheet" href="css/codemirror.css">
+</head>
+
+<body>
+
+<div class="body">
+ <div id="cloudWidget" class="hide" data-cloud-entry="whitelistPane"></div>
+
+ <p class="vverbose"><span data-i18n="whitelistPrompt"></span> <a class="fa-icon info important" href="https://github.com/gorhill/uBlock/wiki/Dashboard:-Trusted-sites">info-circle</a>
+ </p>
+ <p>
+ <button id="whitelistApply" class="preferred iconified" type="button" disabled><span class="fa-icon">check</span><span data-i18n="whitelistApply">_</span><span class="hover"></span></button>
+ <button id="whitelistRevert" class="iconified" type="button" disabled><span class="fa-icon">undo</span><span data-i18n="genericRevert">_</span><span class="hover"></span></button>
+ &emsp;&emsp;
+ <button id="importWhitelistFromFile" class="iconified" type="button"><span class="fa-icon">download-alt</span><span data-i18n="whitelistImport">_</span><span class="hover"></span></button>
+ <button id="exportWhitelistToFile" class="iconified" type="button"><span class="fa-icon">upload-alt</span><span data-i18n="whitelistExport">_</span><span class="hover"></span></button>
+ </p>
+</div>
+<div id="whitelist" class="codeMirrorContainer cm-theme-override"></div>
+
+<div class="hidden">
+ <input id="importFilePicker" type="file" accept="text/plain">
+</div>
+
+<script src="lib/codemirror/lib/codemirror.js"></script>
+<script src="lib/codemirror/addon/display/panel.js"></script>
+<script src="lib/codemirror/addon/scroll/annotatescrollbar.js"></script>
+<script src="lib/codemirror/addon/search/searchcursor.js"></script>
+<script src="lib/codemirror/addon/selection/active-line.js"></script>
+<script src="lib/hsluv/hsluv-0.1.0.min.js"></script>
+
+<script src="js/vapi.js"></script>
+<script src="js/vapi-common.js"></script>
+<script src="js/vapi-client.js"></script>
+
+<script src="js/codemirror/search.js" type="module"></script>
+<script src="js/codemirror/search-thread.js"></script>
+
+<script src="js/fa-icons.js" type="module"></script>
+<script src="js/theme.js" type="module"></script>
+<script src="js/i18n.js" type="module"></script>
+<script src="js/dashboard-common.js" type="module"></script>
+<script src="js/cloud-ui.js" type="module"></script>
+<script src="js/whitelist.js" type="module"></script>
+
+</body>
+</html>
diff --git a/tools/copy-common-files.sh b/tools/copy-common-files.sh
new file mode 100644
index 0000000..56fb20a
--- /dev/null
+++ b/tools/copy-common-files.sh
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+set -e
+
+DES=$1
+
+bash ./tools/make-assets.sh $DES
+
+cp -R src/css $DES/
+cp -R src/img $DES/
+mkdir $DES/js
+cp -R src/js/*.js $DES/js/
+cp -R src/js/codemirror $DES/js/
+cp -R src/js/scriptlets $DES/js/
+cp -R src/js/wasm $DES/js/
+cp -R src/lib $DES/
+cp -R src/web_accessible_resources $DES/
+cp -R src/_locales $DES/
+
+cp src/*.html $DES/
+cp platform/common/*.js $DES/js/
+cp platform/common/*.json $DES/
+cp LICENSE.txt $DES/
diff --git a/tools/import-crowdin.sh b/tools/import-crowdin.sh
new file mode 100755
index 0000000..d94fa07
--- /dev/null
+++ b/tools/import-crowdin.sh
@@ -0,0 +1,51 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+set -e
+
+echo "*** uBlock: Importing from Crowdin archive"
+
+SRC=~/Downloads/crowdin
+rm -r $SRC || true > /dev/null
+unzip -q ~/Downloads/uBlock\ \(translations\).zip -d $SRC
+
+# https://www.assertnotmagic.com/2018/06/20/bash-brackets-quick-reference/
+
+DES=./src/_locales
+DESMV3=./platform/mv3/extension/_locales
+
+for dir in $SRC/*/; do
+ srclang=$(basename $dir)
+ deslang=${srclang/-/_}
+ deslang=${deslang%_AM}
+ deslang=${deslang%_ES}
+ deslang=${deslang%_IN}
+ deslang=${deslang%_LK}
+ deslang=${deslang%_NL}
+ deslang=${deslang%_PK}
+ deslang=${deslang%_SE}
+ if [[ $deslang == 'en' ]]; then
+ continue
+ fi
+ # ubo
+ mkdir -p "$DES/$deslang/" && cp "$SRC/$srclang/messages.json" "$DES/$deslang/"
+ # ubo lite
+ mkdir -p "$DESMV3/$deslang/" && cp "$SRC/$srclang/uBO-Lite/messages.json" "$DESMV3/$deslang/"
+ # descriptions
+ #cp "$SRC/$srclang/description.txt" "./dist/description/description-${deslang}.txt"
+ cp "$SRC/$srclang/uBO-Lite/webstore.txt" "./platform/mv3/description/webstore.$deslang.txt"
+done
+
+# Output files with possible misuse of `$`, as this can lead to severe
+# consequences, such as not being able to run the extension at all.
+# uBO does not use `$`, so any instance of `$` must be investigated.
+# See https://issues.adblockplus.org/ticket/6666
+echo "*** uBlock: Instances of '\$':"
+grep -FR "$" $DES/ || true
+grep -FR "$" $DESMV3/ || true
+
+
+rm -r $SRC
+echo "*** uBlock: Import done."
+git status
diff --git a/tools/make-assets.sh b/tools/make-assets.sh
new file mode 100755
index 0000000..2719f1d
--- /dev/null
+++ b/tools/make-assets.sh
@@ -0,0 +1,42 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+set -e
+
+DES=$1/assets
+
+echo "*** Packaging assets in $DES... "
+
+rm -rf $DES
+cp -R ./assets $DES/
+
+VERSION=$(cat ./dist/version)
+if [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
+ echo "*** Removing $DES/assets.dev.json"
+ rm $DES/assets.dev.json
+else
+ echo "*** Removing $DES/assets.json"
+ rm $DES/assets.json
+fi
+
+mkdir $DES/thirdparties
+
+ASSETS_MAIN=dist/build/uAssets/main
+ASSETS_PROD=dist/build/uAssets/prod
+
+cp -R $ASSETS_MAIN/thirdparties/pgl.yoyo.org $DES/thirdparties/
+cp -R $ASSETS_MAIN/thirdparties/publicsuffix.org $DES/thirdparties/
+cp -R $ASSETS_MAIN/thirdparties/urlhaus-filter $DES/thirdparties/
+
+mkdir -p $DES/thirdparties/easylist
+cp $ASSETS_PROD/thirdparties/easylist.txt $DES/thirdparties/easylist/
+cp $ASSETS_PROD/thirdparties/easyprivacy.txt $DES/thirdparties/easylist/
+
+mkdir $DES/ublock
+cp $ASSETS_PROD/filters/badlists.txt $DES/ublock/badlists.txt
+cp $ASSETS_PROD/filters/badware.min.txt $DES/ublock/badware.min.txt
+cp $ASSETS_PROD/filters/filters.min.txt $DES/ublock/filters.min.txt
+cp $ASSETS_PROD/filters/privacy.min.txt $DES/ublock/privacy.min.txt
+cp $ASSETS_PROD/filters/quick-fixes.min.txt $DES/ublock/quick-fixes.min.txt
+cp $ASSETS_PROD/filters/unbreak.min.txt $DES/ublock/unbreak.min.txt
diff --git a/tools/make-browser.sh b/tools/make-browser.sh
new file mode 100755
index 0000000..b37280d
--- /dev/null
+++ b/tools/make-browser.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+set -e
+
+DES=dist/build/uBlock0.browser
+
+mkdir -p $DES/js
+cp src/js/base64-custom.js $DES/js
+cp src/js/biditrie.js $DES/js
+cp src/js/filtering-context.js $DES/js
+cp src/js/hntrie.js $DES/js
+cp src/js/static-filtering-parser.js $DES/js
+cp src/js/static-net-filtering.js $DES/js
+cp src/js/static-filtering-io.js $DES/js
+cp src/js/text-utils.js $DES/js
+cp src/js/uri-utils.js $DES/js
+
+mkdir -p $DES/js/wasm
+cp -R src/js/wasm $DES/js/
+
+mkdir -p $DES/lib
+cp -R src/lib/punycode.js $DES/lib/
+cp -R src/lib/publicsuffixlist $DES/lib/
+cp -R src/lib/regexanalyzer $DES/lib/
+
+mkdir -p $DES/data
+cp -R submodules/uAssets/thirdparties/publicsuffix.org/list/* \
+ $DES/data
+cp -R submodules/uAssets/thirdparties/easylist-downloads.adblockplus.org/* \
+ $DES/data
+
+cp platform/browser/*.html $DES/
+cp platform/browser/*.js $DES/
+cp LICENSE.txt $DES/
diff --git a/tools/make-chromium-meta.py b/tools/make-chromium-meta.py
new file mode 100644
index 0000000..319b7a1
--- /dev/null
+++ b/tools/make-chromium-meta.py
@@ -0,0 +1,34 @@
+#!/usr/bin/env python3
+
+import os
+import json
+import re
+import sys
+
+if len(sys.argv) == 1 or not sys.argv[1]:
+ raise SystemExit('Build dir missing.')
+
+proj_dir = os.path.join(os.path.split(os.path.abspath(__file__))[0], '..')
+build_dir = os.path.abspath(sys.argv[1])
+
+version = ''
+with open(os.path.join(proj_dir, 'dist', 'version')) as f:
+ version = f.read().strip()
+
+manifest_out = {}
+manifest_out_file = os.path.join(build_dir, 'manifest.json')
+with open(manifest_out_file) as f:
+ manifest_out = json.load(f)
+
+manifest_out['version'] = version
+
+# Development build? If so, modify name accordingly.
+match = re.search('^\d+\.\d+\.\d+\.\d+$', version)
+if match:
+ manifest_out['name'] += ' development build'
+ manifest_out['short_name'] += ' dev build'
+ manifest_out['browser_action']['default_title'] += ' dev build'
+
+with open(manifest_out_file, 'w') as f:
+ json.dump(manifest_out, f, indent=2, separators=(',', ': '), sort_keys=True)
+ f.write('\n')
diff --git a/tools/make-chromium.sh b/tools/make-chromium.sh
new file mode 100755
index 0000000..89172d5
--- /dev/null
+++ b/tools/make-chromium.sh
@@ -0,0 +1,40 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+set -e
+
+echo "*** uBlock0.chromium: Creating web store package"
+
+DES=dist/build/uBlock0.chromium
+rm -rf $DES
+mkdir -p $DES
+
+echo "*** uBlock0.chromium: Copying common files"
+bash ./tools/copy-common-files.sh $DES
+
+# Chromium-specific
+echo "*** uBlock0.chromium: Copying chromium-specific files"
+cp platform/chromium/*.js $DES/js/
+cp platform/chromium/*.html $DES/
+cp platform/chromium/*.json $DES/
+
+# Chrome store-specific
+cp -R $DES/_locales/nb $DES/_locales/no
+
+echo "*** uBlock0.chromium: Generating meta..."
+python3 tools/make-chromium-meta.py $DES/
+
+if [ "$1" = all ]; then
+ echo "*** uBlock0.chromium: Creating plain package..."
+ pushd $(dirname $DES/) > /dev/null
+ zip uBlock0.chromium.zip -qr $(basename $DES/)/*
+ popd > /dev/null
+elif [ -n "$1" ]; then
+ echo "*** uBlock0.chromium: Creating versioned package..."
+ pushd $(dirname $DES/) > /dev/null
+ zip uBlock0_"$1".chromium.zip -qr $(basename $DES/)/*
+ popd > /dev/null
+fi
+
+echo "*** uBlock0.chromium: Package done."
diff --git a/tools/make-clean.sh b/tools/make-clean.sh
new file mode 100755
index 0000000..6935eef
--- /dev/null
+++ b/tools/make-clean.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+set -e
+
+echo "*** uBlock: Cleaning."
+rm -Rf dist/build
+echo "*** uBlock: Cleaned."
diff --git a/tools/make-dig.sh b/tools/make-dig.sh
new file mode 100755
index 0000000..2ced63c
--- /dev/null
+++ b/tools/make-dig.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+set -e
+
+DES="dist/build/uBlock0.dig"
+
+./tools/make-nodejs.sh $DES
+./tools/make-assets.sh $DES
+
+cp -R platform/dig/* $DES/
+
+cd $DES
+npm run build
+
+echo "*** uBlock0.dig: Package done."
diff --git a/tools/make-firefox-meta.py b/tools/make-firefox-meta.py
new file mode 100644
index 0000000..fa4ed71
--- /dev/null
+++ b/tools/make-firefox-meta.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python3
+
+import os
+import json
+import re
+import sys
+
+if len(sys.argv) == 1 or not sys.argv[1]:
+ raise SystemExit('Build dir missing.')
+
+proj_dir = os.path.join(os.path.split(os.path.abspath(__file__))[0], '..')
+build_dir = os.path.abspath(sys.argv[1])
+
+version = ''
+with open(os.path.join(proj_dir, 'dist', 'version')) as f:
+ version = f.read().strip()
+
+firefox_manifest = {}
+firefox_manifest_file = os.path.join(build_dir, 'manifest.json')
+with open(firefox_manifest_file) as f2:
+ firefox_manifest = json.load(f2)
+
+if 'sidebar_action' in firefox_manifest:
+ match = re.search('^(\d+\.\d+\.\d+)(\.\d+)$', version)
+ if not match:
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=1459007
+ # By design Firefox opens the sidebar with new installation of
+ # uBO when sidebar_action is present in the manifest.
+ # Remove sidebarAction support for stable release of uBO.
+ del firefox_manifest['sidebar_action']
+
+firefox_manifest['version'] = version
+
+with open(firefox_manifest_file, 'w') as f2:
+ json.dump(firefox_manifest, f2, indent=2, separators=(',', ': '), sort_keys=True)
+ f2.write('\n')
diff --git a/tools/make-firefox.sh b/tools/make-firefox.sh
new file mode 100755
index 0000000..2278c58
--- /dev/null
+++ b/tools/make-firefox.sh
@@ -0,0 +1,44 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+set -e
+
+echo "*** uBlock0.firefox: Creating web store package"
+
+BLDIR=dist/build
+DES="$BLDIR"/uBlock0.firefox
+rm -rf $DES
+mkdir -p $DES
+
+echo "*** uBlock0.firefox: Copying common files"
+bash ./tools/copy-common-files.sh $DES
+
+# Firefox-specific
+echo "*** uBlock0.firefox: Copying firefox-specific files"
+cp platform/firefox/*.json $DES/
+cp platform/firefox/*.js $DES/js/
+
+# Firefox store-specific
+cp -R $DES/_locales/nb $DES/_locales/no
+
+# Firefox/webext-specific
+rm $DES/img/icon_128.png
+
+echo "*** uBlock0.firefox: Generating meta..."
+python3 tools/make-firefox-meta.py $DES/
+
+if [ "$1" = all ]; then
+ echo "*** uBlock0.firefox: Creating package..."
+ pushd $DES > /dev/null
+ zip ../$(basename $DES).xpi -qr *
+ popd > /dev/null
+elif [ -n "$1" ]; then
+ echo "*** uBlock0.firefox: Creating versioned package..."
+ pushd $DES > /dev/null
+ zip ../$(basename $DES).xpi -qr *
+ popd > /dev/null
+ mv "$BLDIR"/uBlock0.firefox.xpi "$BLDIR"/uBlock0_"$1".firefox.xpi
+fi
+
+echo "*** uBlock0.firefox: Package done."
diff --git a/tools/make-mv3.sh b/tools/make-mv3.sh
new file mode 100755
index 0000000..8b1b2ab
--- /dev/null
+++ b/tools/make-mv3.sh
@@ -0,0 +1,145 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+set -e
+shopt -s extglob
+
+echo "*** uBOLite.mv3: Creating extension"
+
+PLATFORM="chromium"
+
+for i in "$@"; do
+ case $i in
+ quick)
+ QUICK="yes"
+ shift # past argument=value
+ ;;
+ full)
+ FULL="yes"
+ shift # past argument=value
+ ;;
+ firefox)
+ PLATFORM="firefox"
+ shift # past argument=value
+ ;;
+ chromium)
+ PLATFORM="chromium"
+ shift # past argument=value
+ ;;
+ (uBOLite_+([0-9]).+([0-9]).+([0-9]).+([0-9]))
+ TAGNAME="$i"
+ FULL="yes"
+ shift # past argument=value
+ ;;
+ esac
+done
+
+DES="dist/build/uBOLite.$PLATFORM"
+
+if [ "$QUICK" != "yes" ]; then
+ rm -rf $DES
+fi
+
+mkdir -p $DES
+cd $DES
+DES=$(pwd)
+cd - > /dev/null
+
+mkdir -p $DES/css/fonts
+mkdir -p $DES/js
+mkdir -p $DES/img
+
+if [ -n "$UBO_VERSION" ]; then
+ UBO_REPO="https://github.com/gorhill/uBlock.git"
+ UBO_DIR=$(mktemp -d)
+ echo "*** uBOLite.mv3: Fetching uBO $UBO_VERSION from $UBO_REPO into $UBO_DIR"
+ cd "$UBO_DIR"
+ git init -q
+ git remote add origin "https://github.com/gorhill/uBlock.git"
+ git fetch --depth 1 origin "$UBO_VERSION"
+ git checkout -q FETCH_HEAD
+ cd - > /dev/null
+else
+ UBO_DIR=.
+fi
+
+echo "*** uBOLite.mv3: Copying common files"
+cp -R $UBO_DIR/src/css/fonts/* $DES/css/fonts/
+cp $UBO_DIR/src/css/themes/default.css $DES/css/
+cp $UBO_DIR/src/css/common.css $DES/css/
+cp $UBO_DIR/src/css/dashboard-common.css $DES/css/
+cp $UBO_DIR/src/css/fa-icons.css $DES/css/
+
+cp $UBO_DIR/src/js/dom.js $DES/js/
+cp $UBO_DIR/src/js/fa-icons.js $DES/js/
+cp $UBO_DIR/src/js/i18n.js $DES/js/
+cp $UBO_DIR/src/lib/punycode.js $DES/js/
+
+cp -R $UBO_DIR/src/img/flags-of-the-world $DES/img
+
+cp LICENSE.txt $DES/
+
+echo "*** uBOLite.mv3: Copying mv3-specific files"
+if [ "$PLATFORM" = "firefox" ]; then
+ cp platform/mv3/firefox/background.html $DES/
+fi
+cp platform/mv3/extension/*.html $DES/
+cp platform/mv3/extension/*.json $DES/
+cp platform/mv3/extension/css/* $DES/css/
+cp -R platform/mv3/extension/js/* $DES/js/
+cp platform/mv3/extension/img/* $DES/img/
+cp -R platform/mv3/extension/_locales $DES/
+cp platform/mv3/README.md $DES/
+
+if [ "$QUICK" != "yes" ]; then
+ echo "*** uBOLite.mv3: Generating rulesets"
+ TMPDIR=$(mktemp -d)
+ mkdir -p $TMPDIR
+ if [ "$PLATFORM" = "chromium" ]; then
+ cp platform/mv3/chromium/manifest.json $DES/
+ elif [ "$PLATFORM" = "firefox" ]; then
+ cp platform/mv3/firefox/manifest.json $DES/
+ fi
+ ./tools/make-nodejs.sh $TMPDIR
+ cp platform/mv3/package.json $TMPDIR/
+ cp platform/mv3/*.js $TMPDIR/
+ cp platform/mv3/extension/js/utils.js $TMPDIR/js/
+ cp $UBO_DIR/assets/assets.json $TMPDIR/
+ cp $UBO_DIR/assets/resources/scriptlets.js $TMPDIR/
+ cp -R platform/mv3/scriptlets $TMPDIR/
+ mkdir -p $TMPDIR/web_accessible_resources
+ cp $UBO_DIR/src/web_accessible_resources/* $TMPDIR/web_accessible_resources/
+ cd $TMPDIR
+ node --no-warnings make-rulesets.js output=$DES platform="$PLATFORM"
+ cd - > /dev/null
+ rm -rf $TMPDIR
+fi
+
+echo "*** uBOLite.mv3: extension ready"
+echo "Extension location: $DES/"
+
+if [ "$FULL" = "yes" ]; then
+ EXTENSION="zip"
+ if [ "$PLATFORM" = "firefox" ]; then
+ EXTENSION="xpi"
+ fi
+ echo "*** uBOLite.mv3: Creating publishable package..."
+ if [ -z "$TAGNAME" ]; then
+ TAGNAME="uBOLite_$(jq -r .version $DES/manifest.json)"
+ else
+ tmp=$(mktemp)
+ jq --arg version "${TAGNAME:8}" '.version = $version' "$DES/manifest.json" > "$tmp" \
+ && mv "$tmp" "$DES/manifest.json"
+ fi
+ PACKAGENAME="$TAGNAME.$PLATFORM.mv3.$EXTENSION"
+ TMPDIR=$(mktemp -d)
+ mkdir -p $TMPDIR
+ cp -R $DES/* $TMPDIR/
+ cd $TMPDIR > /dev/null
+ zip $PACKAGENAME -qr ./*
+ cd - > /dev/null
+ cp $TMPDIR/$PACKAGENAME dist/build/
+ rm -rf $TMPDIR
+ echo "Package location: $(pwd)/dist/build/$PACKAGENAME"
+fi
diff --git a/tools/make-nodejs.sh b/tools/make-nodejs.sh
new file mode 100755
index 0000000..1e38ba1
--- /dev/null
+++ b/tools/make-nodejs.sh
@@ -0,0 +1,44 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+set -e
+
+DES=$1
+
+mkdir -p $DES/js
+cp src/js/base64-custom.js $DES/js
+cp src/js/biditrie.js $DES/js
+cp src/js/dynamic-net-filtering.js $DES/js
+cp src/js/filtering-context.js $DES/js
+cp src/js/hnswitches.js $DES/js
+cp src/js/hntrie.js $DES/js
+cp src/js/redirect-resources.js $DES/js
+cp src/js/static-dnr-filtering.js $DES/js
+cp src/js/static-filtering-parser.js $DES/js
+cp src/js/static-net-filtering.js $DES/js
+cp src/js/static-filtering-io.js $DES/js
+cp src/js/tasks.js $DES/js
+cp src/js/text-utils.js $DES/js
+cp src/js/uri-utils.js $DES/js
+cp src/js/url-net-filtering.js $DES/js
+
+mkdir -p $DES/lib
+cp -R src/lib/csstree $DES/lib/
+cp -R src/lib/punycode.js $DES/lib/
+cp -R src/lib/regexanalyzer $DES/lib/
+cp -R src/lib/publicsuffixlist $DES/lib/
+
+# Convert wasm modules into json arrays
+mkdir -p $DES/js/wasm
+cp src/js/wasm/* $DES/js/wasm/
+node -pe "JSON.stringify(Array.from(fs.readFileSync('src/js/wasm/hntrie.wasm')))" \
+ > $DES/js/wasm/hntrie.wasm.json
+node -pe "JSON.stringify(Array.from(fs.readFileSync('src/js/wasm/biditrie.wasm')))" \
+ > $DES/js/wasm/biditrie.wasm.json
+node -pe "JSON.stringify(Array.from(fs.readFileSync('src/lib/publicsuffixlist/wasm/publicsuffixlist.wasm')))" \
+ > $DES/lib/publicsuffixlist/wasm/publicsuffixlist.wasm.json
+
+cp platform/nodejs/*.js $DES/
+cp platform/nodejs/README.md $DES/
+cp LICENSE.txt $DES/
diff --git a/tools/make-npm.sh b/tools/make-npm.sh
new file mode 100755
index 0000000..6bffadc
--- /dev/null
+++ b/tools/make-npm.sh
@@ -0,0 +1,43 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+set -e
+
+DES="dist/build/uBlock0.npm"
+
+TMPDIR="$PWD/tmp"
+mkdir -p "$TMPDIR/node_modules"
+
+rm -rf $DES
+
+./tools/make-nodejs.sh $DES
+./tools/make-assets.sh $DES
+
+# Target-specific
+cp platform/npm/.npmignore $DES/
+cp platform/npm/*.json $DES/
+cp platform/npm/.*.json $DES/
+cp platform/npm/*.js $DES/
+cp -R platform/npm/tests $DES/
+
+cd $DES
+cd tests/data
+tar xzf bundle.tgz
+cd -
+npm run build
+tarballname=$(npm pack 2> /dev/null)
+if [ "$1" ]; then
+ echo "*** uBlock0.npm: Creating versioned package..."
+ mv $tarballname ../uBlock0_$1.npm.tgz
+else
+ echo "*** uBlock0.npm: Creating plain package..."
+ mv $tarballname ../uBlock0.npm.tgz
+fi
+ln -sf "$TMPDIR/node_modules"
+if [ -z "$GITHUB_ACTIONS" ]; then
+ npm install
+fi
+cd -
+
+echo "*** uBlock0.npm: Package done."
diff --git a/tools/make-opera-meta.py b/tools/make-opera-meta.py
new file mode 100644
index 0000000..4fb2cb9
--- /dev/null
+++ b/tools/make-opera-meta.py
@@ -0,0 +1,26 @@
+#!/usr/bin/env python3
+
+import os
+import json
+import sys
+
+if len(sys.argv) == 1 or not sys.argv[1]:
+ raise SystemExit('Build dir missing.')
+
+proj_dir = os.path.join(os.path.split(os.path.abspath(__file__))[0], '..')
+build_dir = os.path.abspath(sys.argv[1])
+
+version = ''
+with open(os.path.join(proj_dir, 'dist', 'version')) as f:
+ version = f.read().strip()
+
+manifest_out = {}
+manifest_out_file = os.path.join(build_dir, 'manifest.json')
+with open(manifest_out_file) as f:
+ manifest_out = json.load(f)
+
+manifest_out['version'] = version
+
+with open(manifest_out_file, 'w') as f2:
+ json.dump(manifest_out, f2, indent=2, separators=(',', ': '), sort_keys=True)
+ f2.write('\n')
diff --git a/tools/make-opera.sh b/tools/make-opera.sh
new file mode 100755
index 0000000..7ab2497
--- /dev/null
+++ b/tools/make-opera.sh
@@ -0,0 +1,53 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+set -e
+
+echo "*** uBlock0.opera: Creating web store package"
+
+DES=dist/build/uBlock0.opera
+rm -rf $DES
+mkdir -p $DES
+
+echo "*** uBlock0.opera: Copying common files"
+bash ./tools/copy-common-files.sh $DES
+
+# Chromium-specific
+echo "*** uBlock0.opera: Copying chromium-specific files"
+cp platform/chromium/*.js $DES/js/
+cp platform/chromium/*.html $DES/
+
+# Opera-specific
+echo "*** uBlock0.opera: Copying opera-specific files"
+cp platform/opera/manifest.json $DES/
+
+rm -r $DES/_locales/az
+rm -r $DES/_locales/be
+rm -r $DES/_locales/cv
+rm -r $DES/_locales/gu
+rm -r $DES/_locales/hi
+rm -r $DES/_locales/hy
+rm -r $DES/_locales/ka
+rm -r $DES/_locales/kk
+rm -r $DES/_locales/ku
+rm -r $DES/_locales/mr
+rm -r $DES/_locales/si
+rm -r $DES/_locales/so
+rm -r $DES/_locales/th
+
+# Removing WASM modules until I receive an answer from Opera people: Opera's
+# uploader issue an error for hntrie.wasm and this prevents me from
+# updating uBO in the Opera store. The modules are unused anyway for
+# Chromium- based browsers.
+rm $DES/js/wasm/*.wasm
+rm $DES/js/wasm/*.wat
+rm $DES/lib/lz4/*.wasm
+rm $DES/lib/lz4/*.wat
+rm $DES/lib/publicsuffixlist/wasm/*.wasm
+rm $DES/lib/publicsuffixlist/wasm/*.wat
+
+echo "*** uBlock0.opera: Generating meta..."
+python3 tools/make-opera-meta.py $DES/
+
+echo "*** uBlock0.opera: Package done."
diff --git a/tools/make-thunderbird.sh b/tools/make-thunderbird.sh
new file mode 100755
index 0000000..315122a
--- /dev/null
+++ b/tools/make-thunderbird.sh
@@ -0,0 +1,45 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+set -e
+
+echo "*** uBlock0.thunderbird: Creating web store package"
+
+BLDIR=dist/build
+DES="$BLDIR"/uBlock0.thunderbird
+rm -rf $DES
+mkdir -p $DES
+
+echo "*** uBlock0.thunderbird: copying common files"
+bash ./tools/copy-common-files.sh $DES
+
+echo "*** uBlock0.firefox: Copying firefox-specific files"
+cp platform/firefox/*.js $DES/js/
+
+echo "*** uBlock0.firefox: Copying thunderbird-specific files"
+cp platform/thunderbird/manifest.json $DES/
+
+# Firefox store-specific
+cp -R $DES/_locales/nb $DES/_locales/no
+
+# Firefox/webext-specific
+rm $DES/img/icon_128.png
+
+echo "*** uBlock0.thunderbird: Generating meta..."
+python3 tools/make-firefox-meta.py $DES/
+
+if [ "$1" = all ]; then
+ echo "*** uBlock0.thunderbird: Creating package..."
+ pushd $DES > /dev/null
+ zip ../$(basename $DES).xpi -qr *
+ popd > /dev/null
+elif [ -n "$1" ]; then
+ echo "*** uBlock0.thunderbird: Creating versioned package..."
+ pushd $DES > /dev/null
+ zip ../$(basename $DES).xpi -qr *
+ popd > /dev/null
+ mv "$BLDIR"/uBlock0.thunderbird.xpi "$BLDIR"/uBlock0_"$1".thunderbird.xpi
+fi
+
+echo "*** uBlock0.thunderbird: Package done."
diff --git a/tools/pull-assets.sh b/tools/pull-assets.sh
new file mode 100755
index 0000000..88e268d
--- /dev/null
+++ b/tools/pull-assets.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+set -e
+
+DES=dist/build/uAssets
+
+echo "*** Pull assets from remote into $DES"
+git clone --depth 1 --branch master https://github.com/uBlockOrigin/uAssets $DES/main
+git clone --depth 1 --branch gh-pages https://github.com/uBlockOrigin/uAssets $DES/prod
diff --git a/uAssets/.gitattributes b/uAssets/.gitattributes
new file mode 100644
index 0000000..cd57520
--- /dev/null
+++ b/uAssets/.gitattributes
@@ -0,0 +1 @@
+*.txt linguist-language=AdBlock linguist-detectable
diff --git a/uAssets/.github/ISSUE_TEMPLATE/bug_report.yml b/uAssets/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 0000000..f28160e
--- /dev/null
+++ b/uAssets/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,96 @@
+name: Filter Issue
+description: This is where to report broken website functionality, missed ads, adblock detection, etc. NOT for YouTube, Facebook or Twitch (use their open issues instead).
+body:
+ - type: markdown
+ attributes:
+ value: To avoid burdening **VOLUNTEERS** with invalid or duplicate reports, disregarding these steps **WILL** get your account blocked on this repository temporarily, then permanently, with repeated disregard for the template.
+ - type: checkboxes
+ attributes:
+ label: Prerequisites
+ description: |
+ **IMPORTANT:** Answer carefully and truthfully.
+ options:
+ - label: This is **NOT** a [_YouTube_](https://www.github.com/uBlockOrigin/uAssets/issues/20586), [_Facebook_](https://www.github.com/uBlockOrigin/uAssets/issues/3367) or [_Twitch_](https://www.github.com/uBlockOrigin/uAssets/issues/5184) report. _These sites MUST be reported by clicking their **respective links**_.
+ required: true
+ - label: I read and understand the [policy about what is a valid filter issue](https://github.com/uBlockOrigin/uAssets/blob/master/README.md#uassets).
+ required: true
+ - label: I verified that this issue is not a duplicate. (Search [here](https://github.com/uBlockOrigin/uAssets/issues) to find out.)
+ required: true
+ - label: I did not remove any of the [default filter lists](https://github.com/uBlockOrigin/uAssets/assets/66517106/6e8d024a-5869-47cf-b142-b2357eb6c7d0), or I have verified that the issue was not caused by removing any of the default lists.
+ required: true
+ - label: I did not enable additional filter lists, or I have verified that the issue still occurs without enabling additional filter lists.
+ required: true
+ - label: I do not have custom filters/rules, or I have verified that the issue still occurs without custom filters/rules.
+ required: true
+ - label: I am not using uBlock Origin (uBO) along with other content blocker extensions.
+ required: true
+ - label: I have verified that the web browser's built-in blocker or [DNS blocking](https://en.wikipedia.org/wiki/DNS_blocking) (standalone or through a VPN) is not causing the issue.
+ required: true
+ - label: I did not answer truthfully to **ALL** the above checkboxes.
+ required: false
+
+ - type: textarea
+ attributes:
+ label: URL(s) where the issue occurs.
+ description: |
+ At least one URL is **MANDATORY** for an issue affecting a web page.
+ Warn with **"NSFW"** where applicable.
+ placeholder: |
+ https://example.com
+ https://example.org
+ https://example.net
+ render: yaml
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Description
+ description: Provide a clear and concise description of the issue.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Other extensions used
+ description: List other extensions you are using along uBO (write _none_ if no other extensions). This information helps volunteers investigate issues.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Screenshot(s)
+ description: |
+ Screenshot(s) are **MANDATORY** for hard-to-describe visual issues.
+ 🔴 Post **LINKS** instead of inline images for screenshots containing **ADULT MATERIAL**. Disregarding this directive **WILL** get your account blocked. 🔴
+ value: |
+ <details>
+ <summary>Screenshot(s)</summary>
+
+ <!-- Drag-and-drop screenshot here -->
+ <!-- ⬇️ ⬇️ ⬇️ -->
+
+
+ <!-- ⬆️ ⬆️ ⬆️ -->
+
+ </details>
+ validations:
+ required: false
+
+ - type: textarea
+ attributes:
+ label: Configuration
+ description: |
+ On the affected site: 🛡️ uBO's icon > 💬 Report > Click "Troubleshooting information" > Select all > Copy > Paste it below.
+ value: |
+ <details>
+ <summary>Details</summary>
+
+ <!-- ⬇️ Paste the troubleshooting information here ⬇️ -->
+ ```yaml
+
+
+ ```
+ </details>
+ validations:
+ required: true
diff --git a/uAssets/.github/ISSUE_TEMPLATE/config.yml b/uAssets/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..c46d8e0
--- /dev/null
+++ b/uAssets/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,11 @@
+blank_issues_enabled: false
+contact_links:
+ - name: Support Forum
+ url: https://www.reddit.com/r/uBlockOrigin/
+ about: For support, questions, or help, visit /r/uBlockOrigin.
+ - name: uBlock Origin (uBO) Issues
+ url: https://github.com/uBlockOrigin/uBlock-issues/issues
+ about: Report issues with uBO in the uBO issue tracker.
+ - name: uBO Lite (uBOL) Issues
+ url: https://github.com/uBlockOrigin/uBOL-home/issues
+ about: Report issues specific to the Manifest Version 3 (MV3) variant in the uBOL issue tracker.
diff --git a/uAssets/.github/ISSUE_TEMPLATE/report_from_ubo.yml b/uAssets/.github/ISSUE_TEMPLATE/report_from_ubo.yml
new file mode 100644
index 0000000..9282938
--- /dev/null
+++ b/uAssets/.github/ISSUE_TEMPLATE/report_from_ubo.yml
@@ -0,0 +1,87 @@
+name: Support Pane Filter Issue
+description: "DO NOT MANUALLY SELECT THIS TEMPLATE. It's used by uBlock Origin (uBO)'s \"Support\" pane to auto-fill essential information to file a filter issue."
+body:
+ - type: markdown
+ attributes:
+ value: To avoid burdening **VOLUNTEERS** with invalid or duplicate reports, disregarding these steps **WILL** get your account blocked on this repository temporarily, then permanently, with repeated disregard for the template.
+ - type: checkboxes
+ attributes:
+ label: Prerequisites
+ description: |
+ **IMPORTANT:** Answer carefully and truthfully.
+ options:
+ - label: This is **NOT** a [_YouTube_](https://www.github.com/uBlockOrigin/uAssets/issues/20586), [_Facebook_](https://www.github.com/uBlockOrigin/uAssets/issues/3367) or [_Twitch_](https://www.github.com/uBlockOrigin/uAssets/issues/5184) report. _These sites MUST be reported by clicking their **respective links**_.
+ required: true
+ - label: I read and understand the [policy about what is a valid filter issue](https://github.com/uBlockOrigin/uAssets/blob/master/README.md#uassets).
+ required: true
+ - label: I verified that this issue is not a duplicate. (Search [here](https://github.com/uBlockOrigin/uAssets/issues) to find out.)
+ required: true
+ - label: I did not remove any of the [default filter lists](https://github.com/uBlockOrigin/uAssets/assets/66517106/6e8d024a-5869-47cf-b142-b2357eb6c7d0), or I have verified that the issue was not caused by removing any of the default lists.
+ required: true
+ - label: I did not enable additional filter lists, or I have verified that the issue still occurs without enabling additional filter lists.
+ required: true
+ - label: I do not have custom filters/rules, or I have verified that the issue still occurs without custom filters/rules.
+ required: true
+ - label: I am not using uBlock Origin (uBO) along with other content blocker extensions.
+ required: true
+ - label: I have verified that the web browser's built-in blocker or [DNS blocking](https://en.wikipedia.org/wiki/DNS_blocking) (standalone or through a VPN) is not causing the issue.
+ required: true
+ - label: I did not answer truthfully to **ALL** the above checkboxes.
+ required: false
+
+ - type: textarea
+ attributes:
+ label: URL(s) where the issue occurs.
+ description: |
+ At least one URL is **MANDATORY** for an issue affecting a web page.
+ Warn with **"NSFW"** where applicable.
+ placeholder: |
+ https://example.com
+ https://example.org
+ https://example.net
+ render: yaml
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Description
+ description: Provide a clear and concise description of the issue.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Other extensions used
+ description: List other extensions you are using along uBO (write _none_ if no other extensions). This information helps volunteers investigate issues.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Screenshot(s)
+ description: |
+ Screenshot(s) are **MANDATORY** for hard-to-describe visual issues.
+ 🔴 Post **LINKS** instead of inline images for screenshots containing **ADULT MATERIAL**. Disregarding this directive **WILL** get your account blocked. 🔴
+ value: |
+ <details>
+ <summary>Screenshot(s)</summary>
+
+ <!-- Drag-and-drop screenshot here -->
+ <!-- ⬇️ ⬇️ ⬇️ -->
+
+
+ <!-- ⬆️ ⬆️ ⬆️ -->
+
+ </details>
+ validations:
+ required: false
+
+ - type: textarea
+ id: configuration
+ attributes:
+ label: Configuration
+ description: |
+ If this section gets automatically filled by uBO, leave it alone.
+ validations:
+ required: true
diff --git a/uAssets/.github/ISSUE_TEMPLATE/specific_report_from_ubo.yml b/uAssets/.github/ISSUE_TEMPLATE/specific_report_from_ubo.yml
new file mode 100644
index 0000000..3c163c6
--- /dev/null
+++ b/uAssets/.github/ISSUE_TEMPLATE/specific_report_from_ubo.yml
@@ -0,0 +1,91 @@
+name: Popup Panel Specific Filter Issue
+description: "DO NOT MANUALLY SELECT THIS TEMPLATE. It's used by uBlock Origin (uBO)'s reporting widget to auto-fill essential information to file a filter issue."
+body:
+ - type: markdown
+ attributes:
+ value: To avoid burdening **VOLUNTEERS** with invalid or duplicate reports, disregarding these steps **WILL** get your account blocked on this repository temporarily, then permanently, with repeated disregard for the template.
+ - type: checkboxes
+ attributes:
+ label: Prerequisites
+ description: |
+ **IMPORTANT:** Answer carefully and truthfully.
+ options:
+ - label: This is **NOT** a [_YouTube_](https://www.github.com/uBlockOrigin/uAssets/issues/20586), [_Facebook_](https://www.github.com/uBlockOrigin/uAssets/issues/3367) or [_Twitch_](https://www.github.com/uBlockOrigin/uAssets/issues/5184) report. _These sites MUST be reported by clicking their **respective links**_.
+ required: true
+ - label: I read and understand the [policy about what is a valid filter issue](https://github.com/uBlockOrigin/uAssets/blob/master/README.md#uassets).
+ required: true
+ - label: I verified that this issue is not a duplicate. (Use this [button](https://user-images.githubusercontent.com/585534/146582579-c32707a0-36a1-4cc5-ad50-83172c9f67a8.png) to find out.)
+ required: true
+ - label: I did not remove any of the [default filter lists](https://github.com/uBlockOrigin/uAssets/assets/66517106/6e8d024a-5869-47cf-b142-b2357eb6c7d0), or I have verified that the issue was not caused by removing any of the default lists.
+ required: true
+ - label: I did not enable additional filter lists, or I have verified that the issue still occurs without enabling additional filter lists.
+ required: true
+ - label: I do not have custom filters/rules, or I have verified that the issue still occurs without custom filters/rules.
+ required: true
+ - label: I am not using uBlock Origin (uBO) along with other content blocker extensions.
+ required: true
+ - label: I have verified that the web browser's built-in blocker or [DNS blocking](https://en.wikipedia.org/wiki/DNS_blocking) (standalone or through a VPN) is not causing the issue.
+ required: true
+ - label: I did not answer truthfully to **ALL** the above checkboxes.
+ required: false
+
+ - type: textarea
+ id: url_address_of_the_web_page
+ attributes:
+ label: URL address of the web page
+ description: |
+ Auto-filled by uBO, leave it alone.
+ validations:
+ required: true
+
+ - type: textarea
+ id: category
+ attributes:
+ label: Category
+ description: |
+ Auto-filled by uBO, leave it alone.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Description
+ description: Provide a clear and concise description of the issue.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Other extensions used
+ description: List other extensions you are using along uBO (write _none_ if no other extensions). This information helps volunteers investigate issues.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Screenshot(s)
+ description: |
+ Screenshot(s) are **MANDATORY** for hard-to-describe visual issues.
+ 🔴 Post **LINKS** instead of inline images for screenshots containing **ADULT MATERIAL**. Disregarding this directive **WILL** get your account blocked. 🔴
+ value: |
+ <details>
+ <summary>Screenshot(s)</summary>
+
+ <!-- Drag-and-drop screenshot here -->
+ <!-- ⬇️ ⬇️ ⬇️ -->
+
+
+ <!-- ⬆️ ⬆️ ⬆️ -->
+
+ </details>
+ validations:
+ required: false
+
+ - type: textarea
+ id: configuration
+ attributes:
+ label: Configuration
+ description: |
+ Auto-filled by uBO, leave it alone.
+ validations:
+ required: true
diff --git a/uAssets/.github/PULL_REQUEST_TEMPLATE.md b/uAssets/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..38d4709
--- /dev/null
+++ b/uAssets/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,26 @@
+<!-- Replace the bracketed [...] placeholders with your own information. -->
+
+### URL(s) where the issue occurs
+
+`[At least one URL for a web page where the clearly described issue occurs is **mandatory**. The backticks surrounding the URLs is important, it prevents the URL from being clickable. Warn with "NSFW" where applicable.]`
+
+### Describe the issue
+
+[Be as clear as possible: nobody can read mind, and nobody is looking at your issue over your shoulder.]
+
+### Screenshot(s)
+
+[Screenshot(s) for difficult to describe visual issues are **mandatory**]
+
+### Versions
+
+- Browser/version: [here]
+- uBlock Origin version: [here]
+
+### Settings
+
+- [List here all the changes you made to uBO's default settings]
+
+### Notes
+
+[Add here the result of whatever investigation work you have done: please investigate the issues you report -- this prevents burdening other volunteers. This is especially true for issues arising from settings which are very different from default ones.]
diff --git a/uAssets/.github/workflows/main.yml b/uAssets/.github/workflows/main.yml
new file mode 100644
index 0000000..66d82d4
--- /dev/null
+++ b/uAssets/.github/workflows/main.yml
@@ -0,0 +1,58 @@
+name: Deploy to gh-pages branch
+
+on:
+ push:
+ branches:
+ - master
+
+# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-only-cancel-in-progress-jobs-or-runs-for-the-current-workflow
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+permissions:
+ contents: read
+
+jobs:
+ publish:
+ permissions:
+ contents: write # for Git to git push
+ name: Publish lists
+ runs-on: ubuntu-latest
+ steps:
+ - name: Clone uAssets
+ uses: actions/checkout@v3
+ with:
+ ref: gh-pages
+ - name: Copy filter lists to gh-pages
+ run: |
+ TMPDIR=$(mktemp -d)
+ git clone --depth=1 https://github.com/uBlockOrigin/uAssets.git $TMPDIR
+ pushd $TMPDIR > /dev/null
+ ./tools/make-ublock.sh
+ popd > /dev/null
+ cp $TMPDIR/filters/*.txt filters/
+ cp $TMPDIR/thirdparties/easylist/easy*.txt thirdparties/
+ cp $TMPDIR/dnr/*.json dnr/
+ - name: Patch last-updated field
+ run: |
+ DATE=$(date -Ru)
+ for f in $(git diff --name-only); do
+ STAT=$(git diff --numstat $f | sed -r '/^1\s+1\s+/d')
+ if [[ -n $STAT ]]; then
+ sed -ir "0,/^! Last modified: /s/^\(! Last modified: \)%timestamp%/\\1$DATE/" $f
+ else
+ git checkout -q $f
+ fi
+ done
+ - name: Commit changes (if any)
+ run: |
+ if [[ -n $(git diff) ]]; then
+ git config user.name "gitHub-actions bot"
+ git config user.email "<>"
+ git add -u filters/
+ git add -u thirdparties/
+ git add -u dnr/
+ git commit -m "Update modified filter lists"
+ git push origin gh-pages
+ fi
diff --git a/uAssets/.github/workflows/on-youtube-issue.yml b/uAssets/.github/workflows/on-youtube-issue.yml
new file mode 100644
index 0000000..d9b1d7d
--- /dev/null
+++ b/uAssets/.github/workflows/on-youtube-issue.yml
@@ -0,0 +1,32 @@
+name: Triage Youtube issues
+
+on:
+ issues:
+ types: opened
+
+jobs:
+ check-if-youtube:
+ name: Close as duplicate
+ runs-on: ubuntu-latest
+ if: startsWith(github.event.issue.title, 'youtube.com:')
+ permissions:
+ issues: write
+ steps:
+ - name: Add label
+ uses: actions-cool/issues-helper@v3
+ with:
+ actions: 'add-labels'
+ labels: 'duplicate'
+ - name: Add comment
+ uses: actions-cool/issues-helper@v3
+ with:
+ actions: 'create-comment'
+ body: |
+ Please respect what is asked in the issue template to not unduly burden volunteers.
+
+ This is a `youtube.com` issue, see <https://github.com/uBlockOrigin/uAssets/issues/20586>.
+ - name: Close issue
+ uses: actions-cool/issues-helper@v3
+ with:
+ actions: 'close-issue'
+ close-reason: not_planned
diff --git a/uAssets/.github/workflows/update-3rd-party-assets.yml b/uAssets/.github/workflows/update-3rd-party-assets.yml
new file mode 100644
index 0000000..7065811
--- /dev/null
+++ b/uAssets/.github/workflows/update-3rd-party-assets.yml
@@ -0,0 +1,32 @@
+name: Update 3rd-party assets (daily)
+
+on:
+ schedule:
+ - cron: "29 4 * * *"
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+jobs:
+ publish:
+ if: github.repository_owner == 'uBlockOrigin'
+ permissions:
+ contents: write # for Git to git push
+ name: Update 3rd-party assets
+ runs-on: ubuntu-latest
+ steps:
+ - name: Clone uAssets
+ uses: actions/checkout@v3
+ - name: Fetch 3rd-party assets
+ run: |
+ ./tools/update-3rdparties.sh
+ - name: Commit changes, if any
+ run: |
+ if [[ -n $(git diff) ]]; then
+ git config user.name "github-actions bot"
+ git config user.email "<>"
+ git add -u thirdparties/
+ git commit -m "Update all 3rd-party assets"
+ git push origin master
+ fi
diff --git a/uAssets/.github/workflows/update-easylist.yml b/uAssets/.github/workflows/update-easylist.yml
new file mode 100644
index 0000000..4ae2b72
--- /dev/null
+++ b/uAssets/.github/workflows/update-easylist.yml
@@ -0,0 +1,32 @@
+name: Update Easylist assets (hourly)
+
+on:
+ schedule:
+ - cron: "47 */3 * * *"
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+jobs:
+ publish:
+ if: github.repository_owner == 'uBlockOrigin'
+ permissions:
+ contents: write # for Git to git push
+ name: Update Easylist assets
+ runs-on: ubuntu-latest
+ steps:
+ - name: Clone uAssets
+ uses: actions/checkout@v3
+ - name: Assemble Easylist assets
+ run: |
+ ./tools/make-easylist.sh
+ - name: Commit changes, if any
+ run: |
+ if [[ -n $(git diff) ]]; then
+ git config user.name "github-actions bot"
+ git config user.email "<>"
+ git add -u thirdparties/
+ git commit -m "Update Easylist assets"
+ git push origin master
+ fi
diff --git a/uAssets/.gitignore b/uAssets/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/uAssets/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/uAssets/CONTRIBUTING.md b/uAssets/CONTRIBUTING.md
new file mode 100644
index 0000000..d84e45a
--- /dev/null
+++ b/uAssets/CONTRIBUTING.md
@@ -0,0 +1,22 @@
+#### Filter lists
+
+##### Ordering of filters
+
+New filter must be added at the end of the list.
+
+The reason is to provide an easy way to check whether a filter is still relevant. The filters at the top of the file will be the oldest filters, and also the most likely to maybe be obsolete.
+
+Old filters which are confirmed to still be required must be moved to the end of the list.
+
+##### Issue number association
+
+**All** added filters must be associated with a formal issue number, example:
+
+ ! https://github.com/uBlockOrigin/uAssets/issues/2
+ ||data.inertanceretinallaurel.com^
+
+This way this documents why a filter was added, and how to verify whether an old filter is still needed. The comment line preceding the filter(s) to solve a specific issue should be only a URL to the issue. The issue itself can contains all the details about how the issue was solved, and why it was solved this way, etc.
+
+##### Commit message
+
+Keep it simple, example: `this fixes #2`. The issue itself will contains all the details.
diff --git a/uAssets/LICENSE b/uAssets/LICENSE
new file mode 100644
index 0000000..9cecc1d
--- /dev/null
+++ b/uAssets/LICENSE
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ {one line to give the program's name and a brief idea of what it does.}
+ Copyright (C) {year} {name of author}
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ {project} Copyright (C) {year} {fullname}
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/uAssets/Makefile b/uAssets/Makefile
new file mode 100644
index 0000000..7d56331
--- /dev/null
+++ b/uAssets/Makefile
@@ -0,0 +1,83 @@
+.PHONY: \
+ clean \
+ validate-filters \
+ validate-filters-2020 \
+ validate-filters-2021 \
+ validate-filters-2022 \
+ validate-filters-2023 \
+ validate-privacy \
+ validate-annoyances \
+ validate-badware \
+ validate-ubol-filters
+
+build/validate/validate.js: tools/validate/validate.js tools/validate/config.js
+ cp -R tools/validate/* build/validate/
+
+build/validate/uBlock:
+ tools/make-validate.sh
+
+build/validate/results/filters.results.txt: build/validate/uBlock build/validate/validate.js
+ node build/validate/validate.js \
+ in=filters/filters.txt \
+ out=build/validate/results
+
+build/validate/results/filters-2020.results.txt: build/validate/uBlock build/validate/validate.js
+ node build/validate/validate.js \
+ in=filters/filters-2020.txt \
+ out=build/validate/results
+
+build/validate/results/filters-2021.results.txt: build/validate/uBlock build/validate/validate.js
+ node build/validate/validate.js \
+ in=filters/filters-2021.txt \
+ out=build/validate/results
+
+build/validate/results/filters-2022.results.txt: build/validate/uBlock build/validate/validate.js
+ node build/validate/validate.js \
+ in=filters/filters-2022.txt \
+ out=build/validate/results
+
+build/validate/results/filters-2023.results.txt: build/validate/uBlock build/validate/validate.js
+ node build/validate/validate.js \
+ in=filters/filters-2023.txt \
+ out=build/validate/results
+
+build/validate/results/privacy.results.txt: build/validate/uBlock build/validate/validate.js
+ node build/validate/validate.js \
+ in=filters/privacy.txt \
+ out=build/validate/results
+
+build/validate/results/annoyances.results.txt: build/validate/uBlock build/validate/validate.js
+ node build/validate/validate.js \
+ in=filters/annoyances.txt \
+ out=build/validate/results
+
+build/validate/results/badware.results.txt: build/validate/uBlock build/validate/validate.js
+ node build/validate/validate.js \
+ in=filters/badware.txt \
+ out=build/validate/results
+
+build/validate/results/ubol-filters.results.txt: build/validate/uBlock build/validate/validate.js
+ node build/validate/validate.js \
+ in=filters/ubol-filters.txt \
+ out=build/validate/results
+
+validate-filters: build/validate/results/filters.results.txt
+
+validate-filters-2020: build/validate/results/filters-2020.results.txt
+
+validate-filters-2021: build/validate/results/filters-2021.results.txt
+
+validate-filters-2022: build/validate/results/filters-2022.results.txt
+
+validate-filters-2023: build/validate/results/filters-2023.results.txt
+
+validate-privacy: build/validate/results/privacy.results.txt
+
+validate-annoyances: build/validate/results/annoyances.results.txt
+
+validate-badware: build/validate/results/badware.results.txt
+
+validate-ubol-filters: build/validate/results/ubol-filters.results.txt
+
+clean:
+ rm -rf build
diff --git a/uAssets/README.md b/uAssets/README.md
new file mode 100644
index 0000000..802a9f7
--- /dev/null
+++ b/uAssets/README.md
@@ -0,0 +1,51 @@
+# uAssets
+
+This repository is for the resources of [uBlock Origin (uBO)](https://github.com/gorhill/uBlock). It receives all reports for new filters or existing filters that cause web page breakage. Any contributors are welcome. Contributors who are proven valuable will get write permissions to the repository.
+
+The rationale for including a specific filter in uBO's filter lists is the same as the [EasyList/EasyPrivacy policies](https://easylist.to/pages/policy.html) and also takes into account whether a filter requires uBO's extended filter syntax.
+
+It is preferred to fix filter issues in EasyList. Any filters included in uBO's filter lists must use the [extended syntax](https://github.com/gorhill/uBlock/wiki/Static-filter-syntax#extended-syntax).
+
+The EasyList-compatible fixes for high-traffic websites are added to uBO filters until they become added to EasyList.
+
+uAssets will fix the following exceptions even if they do not require using the extended syntax:
+
+- Ad-Reinsertion
+- Anti-Blocker
+- Context Menu Blockage
+- Cut/Copy/Paste Blockage
+- Popups/Popunders
+- Website Breakage
+- Video Ads
+
+uAssets will not address the following:
+
+- Paywalls
+- Porn Farms
+
+#### How to correctly report an issue
+
+- Disable all other browser extensions and see if the problem still persists
+
+- How to provide troubleshooting information:
+
+ If the problem persists, then please:
+ - On the problematic website, click the uBlock Origin icon
+ - Click the chat icon
+ - Click "Troubleshooting Information" to expand, and copy that information into the appropriate github issue.
+
+#### Support Forum
+
+For support, questions, or help, visit [/r/uBlockOrigin](https://www.reddit.com/r/uBlockOrigin/).
+
+#### uBO Issues
+
+Report issues with uBO in the [uBO issue tracker](https://github.com/uBlockOrigin/uBlock-issues/issues).
+
+#### uBO Lite (uBOL) Issues
+
+Report issues specific to the Manifest Version 3 (MV3) variant in the [uBOL issue tracker](https://github.com/uBlockOrigin/uBOL-home/issues).
+
+#### Similarly-Purposed Blockers
+
+Do **NOT** use any other [similarly-purposed blockers](https://twitter.com/gorhill/status/1033706103782170625) concurrently with uBO. It can result in website breakage or undefined results.
diff --git a/uAssets/dnr/default.json b/uAssets/dnr/default.json
new file mode 100644
index 0000000..0d4f101
--- /dev/null
+++ b/uAssets/dnr/default.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/uAssets/filters/annoyances-cookies.txt b/uAssets/filters/annoyances-cookies.txt
new file mode 100644
index 0000000..ffadd81
--- /dev/null
+++ b/uAssets/filters/annoyances-cookies.txt
@@ -0,0 +1,887 @@
+! Title: uBlock filters – Cookie Notices
+! Last modified: %timestamp%
+! Expires: 7 days
+! Description: |
+! Filters optimized for uBlock Origin, to be used with EasyList's
+! and/or Adguard's "Cookie Notices" list(s)
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+! Homepage: https://github.com/uBlockOrigin/uAssets
+! Forums: https://github.com/uBlockOrigin/uAssets/issues
+
+! https://github.com/orgs/uBlockOrigin/teams/ublock-filters-volunteers/discussions/445
+!#if env_mobile
+*###catapult-cookie-bar
+*###cmplz-cookiebanner-container
+*###cookie-law
+*###cookie-msg
+*###cookie-warning
+*###cookieBox
+*###cookie_alert
+*###cookie_notice
+*###cookiepolicy
+*###cookies-message
+*###gdpr-banner
+*###gdpr-cookie-message
+*###gdpr-cookie-notice
+*###moove_gdpr_cookie_info_bar
+*##.cookie-alert
+*##.cookie_content
+*##.cookie_notice
+*##.sqs-cookie-banner-v2
+~outdoor-broker.de,*###cookie-disclaimer
+~shimadzu.de,*###cookie_policy
+~fok.nl,*###cookieInfo
+~marokko.nl,*##.cookiealert
+~elrow.com,*##.cookies-popup
+~usmall.ru,*##.cookie-notify
+askubuntu.com,mathoverflow.net,serverfault.com,stackapps.com,stackexchange.com,stackoverflow.com,superuser.com##.js-consent-banner
+!#endif
+
+!!! Normal filters
+blaklader.*##div#onetrust-consent-sdk
+
+!!! Trusted scriptlets------------------------------------------------------------
+
+!! Accept mandatory cookies / reject all additional cookies
+www.google.*##+js(trusted-set-cookie, SOCS, CAESHAgBEhJnd3NfMjAyMzA2MTItMF9SQzIaAmZpIAEaBgiAzK6kBg, 1year)
+! When moving from Google search to other Google services or opening them directly. E.G. https://translate.google.com/
+consent.google.*##+js(trusted-click-element, form[action] button[jsname="tWT92d"])
+facebook.com##+js(trusted-set-cookie, datr, __GMZCgwVF5BbyvAtfJojQwg, 1year, , reload, 1)
+instagram.com##+js(trusted-set-cookie, ig_did, 0C826C21-17C3-444A-ABB7-EBABD37214D7, 1year, , reload, 1)
+! Sample page: https://www.bloomberg.com/live/europe || https://www.bloomberg.co.jp/live/asia
+sourcepointcmp.bloomberg.com,sourcepointcmp.bloomberg.co.jp##+js(trusted-click-element, [title="Manage Cookies"])
+sourcepointcmp.bloomberg.com,sourcepointcmp.bloomberg.co.jp##+js(trusted-click-element, [title="Reject All"], , 500)
+bloomberg.com,bloomberg.co.jp##html.sp-message-open:style(width: initial !important)
+bloomberg.com,bloomberg.co.jp##html.sp-message-open > body:style(position: unset !important; overflow: unset !important; margin-top: 0 !important)
+bloomberg.com,bloomberg.co.jp##[title="SP Consent Message"]
+! Sample page: https://www.fandom.com/articles/hgt-wow-wrath-of-the-lich-king
+fandom.com##+js(trusted-set-cookie, euconsent-v2, CPt3fQAPt3fQACNAFAENDLCgAAAAAAAAACiQAAAOCgDAB-AIsAZ8A6QDBAHBAAAA.YAAAAAAAAAAA, 1year)
+fandom.com##+js(trusted-set-cookie, tracking-opt-in-status, rejected, 1year)
+fandom.com##+js(trusted-set-cookie, addtl_consent, 1~, 1year)
+! Sample page: https://www.dailymotion.com/video/x8lzxby
+dailymotion.com##+js(trusted-set-cookie, dm-euconsent-v2, CPt6yMAPt6yMABpAGAENDECgAAAAAH_AAAqIAAAS3AJMNW4gC7MocGbQMIoEQIwrCQigUAEFAMLRAQAODgp2VgE-sIkAKAUARgRAhwBRkQCAAASAJCIAJAiwQAAAiAQAAgAQCIQAMDAIKACwEAgABAdAxRCgAECQgSIiIhTAgKgSCAlsqEEoLpDTCAKssAKARGwUACIJARWAAICwcAwRICViwQJMQbRAAMAKAUSoVqKT00BCxmQAAAAA, 1year)
+! Sample page: https://www.express.co.uk/celebrity-news/1553859/meat-loaf-how-did-he-die-covid-death-cause-age-health-bat-out-of-hell-news-latest-update
+express.co.uk##+js(set, flagTcfLoaded, true)
+express.co.uk##+js(trusted-set-local-storage-item, CMPList, $currentDate$)
+! https://www.standard.co.uk/news/uk/brext-passport-rules-uk-woman-hauled-off-flight-tenerife-jet2-b974403.html
+cmpv2.standard.co.uk##+js(trusted-click-element, .sp_choice_type_12[title="Options"])
+cmpv2.standard.co.uk##+js(trusted-click-element, [title="REJECT ALL"], , 500)
+standard.co.uk##html.sp-message-open:style(width: initial !important)
+standard.co.uk##html.sp-message-open > body:style(position: unset !important; overflow: unset !important)
+standard.co.uk##[id^="sp_message_container"]
+! https://www.independent.co.uk/news/world/americas/inside-titan-sub-titanic-implosion-b2364884.html
+! https://www.reddit.com/r/uBlockOrigin/comments/16893ks/
+cmpv2.independent.co.uk##+js(trusted-click-element, .sp_choice_type_12[title="OPTIONS"])
+cmpv2.independent.co.uk##+js(trusted-click-element, [title="Reject All"], , 500)
+independent.co.uk##[id^="sp_message_container"]
+independent.co.uk##html.sp-message-open:style(width: initial !important)
+! https://www.theguardian.com/sport/video/2023/jun/25/carlos-alcaraz-beats-alex-de-minaur-to-win-first-grass-court-trophy-at-queens-video
+sourcepoint.theguardian.com##+js(trusted-click-element, .sp_choice_type_12[title="Manage or reject cookies"])
+sourcepoint.theguardian.com##+js(trusted-click-element, [title="Reject all"], , 500)
+theguardian.com##[title="SP Consent Message"]
+! https://github.com/uBlockOrigin/uAssets/issues/21974
+bbc.com##+js(trusted-click-element, #consentBanner > button[data-testid="banner-button"])
+! https://video.lefigaro.fr/figaro/video/les-gestes-damour-prennent-plusieurs-formes-dans-une-video-humoristique-lukraine-demande-plus-de-caesar-a-la-france/
+lefigaro.fr##+js(trusted-set-cookie, fig_save_consent, iTTPgpSWqAGGcd3vV88zNDbHsABxE1hB, 1year)
+! https://www.filmweb.pl/video/Zwiastun/Indiana+Jones+i+artefakt+przeznaczenia+Zwiastun+nr+2+polskie+napisy-64884
+filmweb.pl##+js(trusted-set-cookie, euconsent-v2, CPubvkAPubvkAAHABBENDMCgAAAAAAAAAB5YAAAAAAAA.YAAAAAAAAAAA, 1year)
+! https://github.com/uBlockOrigin/uAssets/issues/18865 - Terms of service
+wetransfer.com##+js(trusted-set-cookie, wt_tandc, 20190527%3A1)
+wetransfer.com##+js(trusted-set-cookie, __wtcm, CP03uwAP03uwAPnACAENAxCAAEIAEEJAEAABGbwFgABAAMABlAEQARQAnABlADcAH4ATABCACLAEcAKQAVkAuoBpgDiAH8AXmAwQBkkjKSM3AAAAAAAA.JGbwFgABAAMABlAEQARQAnABlADcAH4ATABCACLAEcAKQAVkAuoBpgDiAH8AXmAwQBkkjKSM3AAA)
+! https://www.thetrainline.com/
+thetrainline.com##+js(trusted-set-cookie, OptanonConsent, groups=C0001%3A1%2CC0002%3A0%2CC0008%3A0, 1year)
+! https://console.scaleway.com/login
+scaleway.com##+js(trusted-set-cookie, _scw_rgpd_hash, 1676567096, 1year)
+! https://all3dp.com/
+all3dp.com##+js(trusted-set-cookie, PUR_SUBSCRIPTION, PREMIUM)
+! If necessary aren't accepted, choosing a favorite store won't work
+lidl.*##+js(trusted-set-cookie, CookieConsent, {necessary:true%2Cpreferences:false%2Cstatistics:false%2Cmarketing:false}, 1year)
+! https://github.com/DandelionSprout/adfilt/discussions/779#discussioncomment-6679609
+threads.net##+js(trusted-set-cookie, cb, 1_1970_01_01_2-3, 1year, , reload, 1)
+! https://github.com/DandelionSprout/adfilt/discussions/779#discussioncomment-6679609
+messenger.com##+js(trusted-set-cookie, datr, mWTaZBxAoW8lFl0v3EpECGYi, 1year, , reload, 1)
+! https://www.trading212.com/
+trading212.com##+js(trusted-set-cookie, COOKIES_CONSENT, essential)
+! https://www.myscript.com/
+myscript.com##+js(trusted-set-cookie, myscript, {%22acceptance%22:true%2C%22analytics%22:false})
+! https://www.odido.nl/
+odido.nl##+js(trusted-set-cookie, tm_cookie_setting, Analytics, , , reload, 1)
+! https://www.bing.com/
+bing.com##+js(trusted-set-cookie, BCP, AD=0&AL=0&SM=0)
+! https://procvetok.ua/
+procvetok.ua##+js(trusted-set-cookie, cookies, '{"system":1,"target":0}')
+! https://www.stwater.co.uk/in-my-area/check-my-area/
+stwater.co.uk##+js(trusted-set-cookie, CookieControl, '{"interactedWith":true,"acceptedCategories":["essentials"]}')
+! https://www.boogschietshop.nl/
+boogschietshop.nl##+js(trusted-set-cookie, cookie_preference, functional)
+! https://www.carvertical.com/
+carvertical.com##+js(trusted-set-local-storage-item, cv:cookiesAllowed, '{"mandatoryCookies":true,"statsCookies":false,"marketingCookies":false}')
+! https://www.x-kom.pl/
+x-kom.pl##+js(trusted-set-cookie, trackingPermissionConsentsValue, %7B%22cookies_analytics%22%3Afalse%2C%22cookies_personalization%22%3Afalse%2C%22cookies_advertisement%22%3Afalse%7D)
+! https://www.easyfind.ch/
+easyfind.ch##+js(set-cookie, allow-marketing, false)
+easyfind.ch##+js(set-cookie, allow-analytics, false)
+easyfind.ch##+js(trusted-set-local-storage-item, elementor, '{"__expiration":{},"pageViews":1,"popup_1276_times":1}')
+! https://www.tiempo.com/
+tiempo.com##+js(trusted-set-cookie, euconsent-v2, CPzEX8APzEX8ADtACBESAUEgAAAAAAAAAAiQAAAAAAAA)
+tiempo.com##+js(trusted-set-cookie, euconsent-v2-addtl, %20)
+! https://www.spiegel.de/
+spiegel.de##+js(trusted-click-element, button[title^="Consent"])
+! https://www.pizzafan.gr/
+pizzafan.gr##+js(trusted-set-cookie, pfUserCookPolicy, 12562660:1)
+! https://www.dlnews.com
+dlnews.com##+js(trusted-set-local-storage-item, dlnews:settings, '{"state":{"cookiesConsent":{"marketing":false,"analytical":false},"chartsOptions":[{"id":"defi-tvl"},{"id":"top-protocol"},{"id":"dexs-volume"},{"id":"chains-tvl-pie"}],"isPriceFeedPaused":false,"showSubscriptionModal":false},"version":2}')
+! https://www.windhager.eu/en
+windhager.eu###viucom-cookie-badge
+windhager.eu##+js(trusted-set-cookie, viucom-cookie-accept, ["technical_necessary"])
+! https://www.banknorwegian.no/
+banknorwegian.no##+js(trusted-set-cookie, BN.User.CookieConsent, CAE%3D)
+! cookiebot
+biomarkt.de,plaion.com##+js(trusted-set-cookie, CookieConsent, {stamp:%27BvqlZ34xqOpzSOaxY1VgwOy5CZ1lfC4Xs2JNiDqz9M4rNuyyAY56Jg==%27%2Cnecessary:true%2Cpreferences:false%2Cstatistics:false%2Cmarketing:false%2Cmethod:%27explicit%27%2Cver:1%2Cutc:1697932000537}, 1year)
+apetro.pt,apoteket.se,bergbauernmilch.de,berlingske.dk,cineplex.de,danbolig.dk,egmont.com,euroatla.pt,finanzmarktwelt.de,harzwasserwerke.de,hoyavision.com,nos.pt,neue.at,nngroup.com,nordiskfilm.com,storyhouseegmont.dk,storyhouseegmont.no,storyhouseegmont.se,toyota-forklifts.se,vn.at,werder.de,werkenbijlidl.nl,wwf.fi##+js(trusted-set-cookie, CookieConsent, {stamp:%27Uv9YOAVP5djCBw71lxhE4rNAfTObaGck2Sn3rKWf9dPCYpqcWvAlpA==%27%2Cnecessary:true%2Cpreferences:false%2Cstatistics:false%2Cmarketing:false%2Cmethod:%27explicit%27%2Cver:2}, 1year)
+refinery29.com,dasinvestment.com,fof.se,mein-grundeinkommen.de##+js(trusted-set-cookie, CookieConsent, {stamp:%27Uv9YOAVP5djCBw71lxhE4rNAfTObaGck2Sn3rKWf9dPCYpqcWvAlpA==%27%2Cnecessary:true%2Cpreferences:false%2Cstatistics:false%2Cmarketing:false%2Cmethod:%27explicit%27%2Cver:3}, 1year)
+ekstrabladet.dk##+js(trusted-set-cookie, CookieConsent, {stamp:%27fbbiPQWa8SRQm47Ge8hRVOAPAgw2jXlG8o/+hp1euVVi1qtFQj1O3w==%27%2Cnecessary:true%2Cpreferences:true%2Cstatistics:true%2Cmarketing:true%2Cmethod:%27explicit%27%2Cver:4}, 1year)
+kino.dk##+js(trusted-set-cookie, CookieConsent, {stamp:%27Uv9YOAVP5djCBw71lxhE4rNAfTObaGck2Sn3rKWf9dPCYpqcWvAlpA==%27%2Cnecessary:true%2Cpreferences:false%2Cstatistics:false%2Cmarketing:false%2Cmethod:%27explicit%27%2Cver:5}, 1year)
+dr.dk##+js(trusted-set-cookie, CookieConsent, {stamp:%27Uv9YOAVP5djCBw71lxhE4rNAfTObaGck2Sn3rKWf9dPCYpqcWvAlpA==%27%2Cnecessary:true%2Cpreferences:false%2Cstatistics:false%2Cmarketing:false%2Cmethod:%27explicit%27%2Cver:6}, 1year)
+! https://www.nytimes.com/
+nytimes.com##+js(trusted-set-cookie, purr-pref-agent, <a1<Go)
+! https://www.schauspiel.koeln/en/
+schauspiel.koeln##+js(trusted-set-cookie, SK.Website.ConsentManager, W1siYmFzZSIsdHJ1ZV0sWyJnb29nbGVhbmFseXRpY3MiLGZhbHNlXSxbIm1ldGFwaXhlbCIsZmFsc2VdXQ==)
+! https://www.onlinestempel.ch/en/
+onlinestempel.ch##+js(trusted-set-cookie, consent, %7B%22level%22%3A%5B%22necessary%22%5D%2C%22revision%22%3A0%2C%22data%22%3A%7B%22id%22%3A%22DarYF7gx7v%22%7D%2C%22rfc_cookie%22%3Atrue%7D)
+! https://www.chase.co.uk/gb/en/
+chase.co.uk##+js(trusted-set-cookie, CookieConsents, '{"StrictlyNecessary":true,"Analytical":false,"Performance":false,"AdvertisingAndTargeting":false,"timestamp":""}')
+! https://www.svt.se/
+svt.se##+js(trusted-set-cookie, cookie-consent-1, '{"optedIn":true,"functionality":false,"statistics":false}')
+! https://www.komoot .com/.de
+komoot.com,komoot.de##+js(trusted-set-cookie, kmt_rd, no-consent, , , reload, 1)
+komoot.com,komoot.de##+js(trusted-set-local-storage-item, kmt_config_web, '{"created_at":"$currentDate$","anonymous":"","gdpr_ga":false,"gdpr_exp":false}')
+! https://chatreplay.stream/
+chatreplay.stream##+js(trusted-set-cookie, cr_consent, '2|tracking=false+analytics=false+marketing=false', , , reload, 1)
+! https://www.screen.studio/
+screen.studio##+js(trusted-set-local-storage-item, cookies_settings, '{"json":{"state":"only-essential"}}')
+! https://hubblehq.com/
+hubblehq.com##+js(trusted-set-cookie, hbl_cookie_prefs_v1, [%22Essential%22])
+! For pages using Yahoo's consent function, such as techcrunch.com, engadget.com
+consent.yahoo.com##+js(trusted-click-element, button.reject-all)
+! https://hwebber.co.uk/
+hwebber.co.uk##+js(trusted-set-cookie, mmc-cookie-consent, '{"Id":"c2457eddbecc20cbab3869374900e864","CategoryID":4}', 1year)
+! https://www.vivantis.sk/
+vivantis.sk##+js(set-local-storage-item, gdpr-done, true)
+vivantis.sk##+js(trusted-set-local-storage-item, cookiesSettings, '{"remarketing":false,"personalisation":false,"statistics":false}')
+! https://www.gereedschapcentrum.nl/
+gereedschapcentrum.nl##+js(trusted-set-cookie, fixami.app_state, eyJzdGF0ZSI6eyJpc1RheEluY2x1ZGVkIjp0cnVlLCJpc0ZpcnN0VmlzaXQiOnRydWUsImlzQ3VzdG9tZXJTZXJ2aWNlTW9kYWxPcGVuIjpmYWxzZSwiYWNjZXB0ZWRDb29raWVzIjoiMCIsImhhc0FjY2VwdGVkQ29va2llcyI6dHJ1ZSwiaGFzQWNjZXB0ZWRNYXJrZXRpbmdDb29raWVzIjp0cnVlLCJoYXNBY2NlcHRlZFN0YXRpc3RpY3NDb29raWVzIjp0cnVlfSwidmVyc2lvbiI6MH0=)
+! Tumblr, sample page: https://urshunt.tumblr.com/
+tumblr.com##+js(trusted-click-element, .cmp__dialog-footer-buttons > .is-secondary)
+tumblr.com##.components-modal__screen-overlay
+! https://ontinet.com/
+ontinet.com##+js(trusted-set-cookie, website_cookies_bar, '{"required": true, "optional": false}')
+! https://www.abc.es/espana/presidente-paraguayo-apuesta-mercados-mercosur-firma-acuerdo-20231127173317-vi.html
+abc.es##+js(trusted-set-cookie, euconsent-v2, CP15pgAP15pgAAHABBENAcEgAAAAAAAAAAiQAAAAAAAA.YAAAAAAAAAAA, 1year, , domain, abc.es)
+abc.es##+js(trusted-set-cookie, didomi_token, eyJ1c2VyX2lkIjoiMThjMTFmMGMtMzg2NC02Y2U2LThkN2ItNjk1Njk5MGRlZjk0IiwiY3JlYXRlZCI6IjIwMjMtMTEtMjdUMTg6MDA6NDAuNzMwWiIsInVwZGF0ZWQiOiIyMDIzLTExLTI3VDE4OjAxOjUzLjY3OFoiLCJ2ZW5kb3JzIjp7ImRpc2FibGVkIjpbImFtYXpvbiIsInR3aXR0ZXIiLCJnb29nbGUiLCJjOmluZGlnaXRhbGwtUDNGNGlmVzQiLCJjOnBlbmR1bGFyLU1mZ2tCZEFlIl19LCJwdXJwb3NlcyI6eyJkaXNhYmxlZCI6WyJnZW9sb2NhdGlvbl9kYXRhIiwiZGV2aWNlX2NoYXJhY3RlcmlzdGljcyJdfSwidmVuZG9yc19saSI6eyJkaXNhYmxlZCI6WyJnb29nbGUiXX0sInZlcnNpb24iOjIsImFjIjoiQUFBQS5BQUFBIn0, 1year, , domain, abc.es)
+! https://www.20minutos.es/noticia/5193814/0/violencia-machista-detenido-un-hombre-24-anos-por-asesinato-una-mujer-25-hija-ambos/
+20minutos.es##+js(trusted-click-element, #didomi-notice-agree-button)
+! fplstatistics.co.uk
+fplstatistics.co.uk##+js(trusted-click-element, button[onclick="IMOK()"], , 500)
+fplstatistics.co.uk##+js(trusted-set-cookie, FCCDCF, %5Bnull%2Cnull%2Cnull%2C%5B%22CP2G1QAP2G1QAEsACDENAdEgAAAAAAAAAAwIAAAGfgAgGfAA%22%2C%221~%22%2C%22EA7F77A0-0F26-47A6-A8A4-74D65175A664%22%5D%2Cnull%2Cnull%2C%5B%5D%5D)
+! kirjasto.vaasa.fi
+kirjasto.vaasa.fi##+js(trusted-set-cookie, Arena Cookie Consent, '{"categories":["necessary"],"level":["necessary"],"revision":0,"data":null,"rfc_cookie":false,"consent_date":"1970-00-00T00:00:00.000Z","consent_uuid":"00000000-0000-0000-0000-000000000000","last_consent_update":"1970-01-01T00:00:00.000Z"}', 1year)
+! softonic.com, endless loading for dl button - https://winning-eleven-2012-apk-download-v101.en.softonic.com/chrome/extension
+softonic.com##+js(trusted-set-cookie, euconsent-v2, CP2KIMAP2KIMAAHABBENAcEgAAAAAAAAAAiQAAAAAAEEoAMAARBqDQAYAAiDUKgAwABEGopABgACINQ6ADAAEQaiEAGAAIg1BIAMAARBqGQAYAAiDUAA.YAAAAAAAAAAA, 1year, , domain, softonic.com)
+! https://attend.informatechevents.virtual.informatech.com/event/the-ai-summit-new-york-2023
+informatech.com##+js(trusted-set-cookie, swapcard-cookie-consent, %7B%22accepted%22%3Afalse%7D)
+! https://www.spv.no/
+spv.no##+js(trusted-set-local-storage-item, acceptConsent, '{"acceptAnalysis":false,"acceptMarketing":false,"showCookie":1}')
+! https://e-shop.leonidas.com/gb/en/home/
+e-shop.leonidas.com##+js(trusted-click-element, a.btn--primary)
+e-shop.leonidas.com##+js(set-cookie, cc_analytics, 0)
+e-shop.leonidas.com##+js(set-cookie, cc_essential, 1)
+! https://aonsolutions.es/
+aonsolutions.es##+js(trusted-set-cookie, cookies-consent, agree)
+! https://www.vr.fi/
+vr.fi##+js(trusted-set-local-storage-item, cookieConsent, '{"consented":true,"levels":{"level1":true,"level2":false,"level3":false,"level4":false}}')
+! https://launer.com/
+launer.com##+js(trusted-set-cookie, cookie_consent, 100, 1year)
+! https://www.bever.nl/
+bever.nl##+js(trusted-set-cookie, consent_setting, analytics%3A0%7Cfunctional%3A1%7Cmarketing%3A0, , , reload, 1)
+! https://www.sixt-neuwagen.de/
+sixt-neuwagen.de##+js(trusted-set-cookie, user_cookie_consent, essential)
+sixt-neuwagen.de##+js(set-cookie, user_accepted_cookies, 1)
+! https://www.oem.no/
+oem.no##+js(trusted-set-cookie, cookieConsent, functional=1&analytics=0&marketing=0, , , reload, 1)
+! https://www.tomsguide.com/reviews/apple-imac-24-inch-review-beauty-and-brawn-in-one-slim-package
+cdn.privacy-mgmt.com##+js(trusted-click-element, .message-container.global-font button.message-button.no-children.focusable.button-font.sp_choice_type_12[title="MORE OPTIONS")
+cdn.privacy-mgmt.com##+js(trusted-click-element, [data-choice="1683026410215"], , 500)
+forums.tomsguide.com##+js(trusted-set-cookie, euconsent-v2, CP20-YAP20-YAAKAyBENAfEgAAAAAAAAAAwIAAAI8gBAGfAR4AAA.YAAAAAAAAAAA, 1year)
+forums.tomsguide.com##+js(trusted-set-local-storage-item, _cmpRepromptHash, CP20-YAP20-YAAKAyBENAfEgAAAAAAAAAAwIAAAI8gBAGfAR4AAA.YAAAAAAAAAAA.1.l4yppBwRRyXiPrnFNrkJzQ==.P21TmRP21TmRAKAaAB4AAAAA)
+forums.tomsguide.com##+js(trusted-set-local-storage-item, noniabvendorconsent, P21TmRP21TmRAKAaAB4AAAAA)
+tomsguide.com##+js(trusted-set-cookie, consentUUID, cefc5c9f-0e4c-4d6f-ad00-41a1e49409ed_27)
+! https://www.walmart.ca/
+walmart.ca##+js(trusted-set-cookie, uxcon, enforce=false&p13n=false&ads=false, , , domain, walmart.ca)
+! festool
+!#if ext_devbuild
+! Waits for 1.55 to be widely available
+festool.*,festoolcanada.com##+js(trusted-click-element, #usercentrics-root >>> button[data-testid="uc-deny-all-button"])
+festool.*,festoolcanada.com##body.overflowHidden:style(overflow: auto !important)
+festool.*,festoolcanada.com###focus-lock-id
+!#endif
+! https://www.cc.com/
+cc.com##+js(trusted-set-cookie, OptanonAlertBoxClosed, $currentDate$, 1year)
+! https://www.resursbank.fi/
+resursbank.fi##+js(trusted-set-cookie, cookie_consent, necessary%3A1%2Cstatistics%3A0%2Cmarketing%3A0)
+! LADbiblegroup, broken videos. Sample page: https://www.unilad.com/celebrity/news/big-bang-theory-kate-micucci-cancer-free-950283-20231218
+consent.ladbible.com,consent.unilad.com,consent.gamingbible.com,consent.sportbible.com,consent.tyla.com,consent.ladbiblegroup.com##+js(trusted-click-element, button.sp_choice_type_12[title$="Settings"])
+consent.ladbible.com,consent.unilad.com,consent.gamingbible.com,consent.sportbible.com,consent.tyla.com,consent.ladbiblegroup.com##+js(trusted-click-element, button[title="REJECT ALL"], , 1000)
+ladbible.com,unilad.com,gamingbible.com,sportbible.com,tyla.com,ladbiblegroup.com##html.sp-message-open:style(width: initial !important)
+ladbible.com,unilad.com,gamingbible.com,sportbible.com,tyla.com,ladbiblegroup.com##html.sp-message-open > body:style(position: unset !important; overflow: unset !important)
+ladbible.com,unilad.com,gamingbible.com,sportbible.com,tyla.com,ladbiblegroup.com##[title="SP Consent Message"]
+! Temp filters:
+! https://github.com/easylist/easylist/pull/18054
+sportbible.com#@#+js(remove-class, sp-message-open, html, stay)
+sportbible.com#@#div[id^="sp_message_container_"]
+@@||consent.sportbible.com^$domain=sportbible.com
+! https://github.com/uBlockOrigin/uAssets/issues/21485
+! https://github.com/uBlockOrigin/uAssets/issues/21526
+! https://github.com/uBlockOrigin/uAssets/pull/21510/
+m2o.it,deejay.it,capital.it,ilmattino.it,leggo.it,libero.it##+js(trusted-click-element, 'button.iubenda-cs-customize-btn, button.iub-cmp-reject-btn, button#iubFooterBtn')
+m2o.it,deejay.it,capital.it,ilmattino.it,leggo.it,libero.it##html[style="overflow: hidden;"]:style(overflow: auto !important)
+m2o.it,deejay.it,capital.it,ilmattino.it,leggo.it,libero.it##[id|="iubenda"]
+ilmattino.it,leggo.it##.banner:has([href="javascript:acceptAllCookies();void(0);"])
+! https://lastmile.lt/
+lastmile.lt##+js(set-cookie, __consent, %5B%22required%22%5D)
+! ft.com
+consent-manager.ft.com##+js(trusted-click-element, .sp_choice_type_12[title="Manage Cookies"])
+consent-manager.ft.com##+js(trusted-click-element, .sp_choice_type_REJECT_ALL, , 500)
+ft.com##html.sp-message-open:style(width: initial !important)
+ft.com##html.sp-message-open > body:style(position: unset !important; overflow: unset !important; margin-top: 0 !important)
+ft.com##[title="SP Consent Message"]
+ft.com##+js(trusted-set-cookie, FTConsent, marketingBypost%3Aoff%2CmarketingByemail%3Aoff%2CmarketingByphonecall%3Aoff%2CmarketingByfax%3Aoff%2CmarketingBysms%3Aoff%2CenhancementBypost%3Aoff%2CenhancementByemail%3Aoff%2CenhancementByphonecall%3Aoff%2CenhancementByfax%3Aoff%2CenhancementBysms%3Aoff%2CbehaviouraladsOnsite%3Aoff%2CdemographicadsOnsite%3Aoff%2CrecommendedcontentOnsite%3Aon%2CprogrammaticadsOnsite%3Aoff%2CcookiesUseraccept%3Aoff%2CcookiesOnsite%3Aoff%2CmembergetmemberByemail%3Aoff%2CpermutiveadsOnsite%3Aoff%2CpersonalisedmarketingOnsite%3Aoff, , , domain, ft.com)
+! https://online.depo.ee/
+online.depo-diy.ee##+js(trusted-set-local-storage-item, UserCookieConsent, '{"__typename":"CookieConfigModel","cookieSettings":[],"essential":true,"statistics":false,"marketing":false}')
+! https://what3words.com/reaction.agenda.member
+what3words.com##+js(trusted-set-cookie, cookie_preferences, {%22marketing%22:false%2C%22analytics%22:false})
+
+
+
+!! Needs additional cookies
+
+! Closing Optanon Alert Box
+1001games.com,1001hry.cz,1001jeux.fr,1001jocuri.ro,1001jogos.com.br,1001jogos.pt,1001pelit.com,1001spiele.de,elkspel.nl,gamespot.com,giochixl.it,glamour.com,grajteraz.pl,isladejuegos.com,jatekokxl.hu,mtvuutiset.fi,paixnidiaxl.gr,pushsquare.com,spelo.se,spillespill.no,spilxl.dk,thejournal.ie,thetrainline.com,vkmag.com,zdnet.com##+js(trusted-set-cookie, OptanonAlertBoxClosed, $currentDate$, 1year)
+
+! Mandatory + functional
+! https://www.evaair.com/en-de/index.html signup
+evaair.com##+js(trusted-set-cookie, _EVAcookieaccept, Y, 1year)
+evaair.com##+js(trusted-set-cookie, _EVAGDPRfunctional, Y, 1year)
+
+! Mandatory + functional
+! https://www.vkmag.com/magazine/hoe-het-is-om-opgesloten-te-zijn-in-de-titanic-duikboot-die-vermist-is video
+vkmag.com##+js(trusted-set-cookie, OptanonConsent, groups=C0004%3A0%2CC0003%3A1%2CC0002%3A0%2CC0001%3A1%2CSTACK42%3A0, 1year)
+vkmag.com##+js(trusted-set-cookie, eupubconsent-v2, CPt6LrpPt6LrpAcABBENDKCgAAAAAAAAAAYgGBtX_T5eb2vj-3ZcN_tkaYwP55y3o2wzhhaIke8NwIeH7BoGJ2MwvBV4JiACGBAkkiKBAQVlHGBcCQAAgIgRiSKMYk2MjzNKJLJAilMbO0NYCD9mnkHT2ZCY70-uO__zvneAAAAYJABAXmKgAgLzGQAQF5joAIC8yUAEBeZSACAvMAAA.YAAAAAAAAAAA, 1year, , reload, 1)
+
+! Mandatory, functional + social media (embedded content)
+! https://www.mtvuutiset.fi/artikkeli/hallitusohjelma-kirvoittaa-epauskoisia-parahduksia-ja-kiitosta-lue-marinin-ja-monen-muun-kommentit-linjauksiin/8722768
+mtvuutiset.fi##+js(trusted-set-cookie, OptanonConsent, groups=1%3A1%2C2%3A0%2C3%3A1%2C4%3A0%2C5%3A1%2CBG57%3A0%2CBG58%3A0%2CBG59%3A0, 1year)
+
+! https://github.com/finnish-easylist-addition/finnish-easylist-addition/discussions/416#discussioncomment-6209972
+ampparit.com,arvopaperi.fi,iltalehti.fi,kauppalehti.fi,mediuutiset.fi,mikrobitti.fi,talouselama.fi,tekniikkatalous.fi,tivi.fi,uusisuomi.fi##+js(trusted-click-element, '.almacmp-button--settings, #purposeConsents1, #purposeConsents2, #purposeConsents3, #purposeConsents4, #purposeConsents5, #purposeConsents6, #purposeConsents7, #purposeConsents8, #purposeConsents9, #purposeConsents10, #purposeConsents11, #specialFeatureConsents1, #specialFeatureConsents2, #almacmp-save-layer2')
+ampparit.com,arvopaperi.fi,iltalehti.fi,kauppalehti.fi,mediuutiset.fi,mikrobitti.fi,talouselama.fi,tekniikkatalous.fi,tivi.fi,uusisuomi.fi##+js(trusted-set-cookie, gravitoData, '{"NonTCFVendors":[{"id":1,"name":"Facebook","consent":true},{"id":3,"name":"Google","consent":true},{"id":9,"name":"Twitter","consent":true},{"id":10,"name":"Wordpress","consent":true},{"id":15,"name":"Linkedin","consent":true},{"id":19,"name":"Vimeo","consent":true},{"id":27,"name":"Apple","consent":true}]}', 1year)
+ampparit.com,arvopaperi.fi,iltalehti.fi,kauppalehti.fi,mediuutiset.fi,mikrobitti.fi,talouselama.fi,tekniikkatalous.fi,tivi.fi,uusisuomi.fi###alma-cmpv2-container
+
+! Mandatory, performance + functional
+! https://www.gamespot.com/videos/firearms-expert-reacts-to-crysis-franchise-guns/2300-6461700/
+gamespot.com##+js(trusted-set-cookie, OptanonConsent, groups=C0001%3A1%2CC0002%3A1%2CC0003%3A1%2CC0004%3A0%2CC0005%3A0, 1year)
+
+! google maps embed
+asialadies.de,avladies.de,badeladies.de,behaarteladies.de,bizarrladies.de,busenladies.de,deutscheladies.de,devoteladies.de,dominanteladies.de,erfahreneladies.de,escorts24.de,exklusivladies.de,fkk24.de,grosseladies.de,hobbyladies.de,jungeladies.de,kollegin.de,kussladies.de,ladies.de,latinaladies.de,massierendeladies.de,mollyladies.de,nsladies.de,nymphomaneladies.de,orientladies.de,osteuropaladies.de,piercingladies.de,rasierteladies.de,schokoladies.de,tattooladies.de,tsladies.de,zaertlicheladies.de,zierlicheladies.de##+js(trusted-set-cookie, ladies-cookies-overlay, %7B%22cookie-category-essential%22%3Atrue%2C%22cookie-category-stats%22%3Afalse%2C%22cookie-category-map_services%22%3Atrue%7D, , , reload, 1)
+
+! https://www.1a-finanzmarkt.de/ user preferences and external embed
+1a-finanzmarkt.de,1a-immobilienmarkt.de,1a-reisemarkt.de,1a-singleboerse.de,1a-stellenmarkt.de##+js(trusted-set-cookie, opt_out, 'analyse,werbe')
+
+! https://www.gameinformer.com/b/news/archive/2015/08/27/star-wars-episode-vii-instagram-clip-shows-precious-seconds-of-new-footage.aspx
+! Twitter embed - Target cookie
+gameinformer.com#@##onetrust-consent-sdk
+gameinformer.com###onetrust-consent-sdk:style(visibility: collapse !important;)
+gameinformer.com###onetrust-banner-sdk
+gameinformer.com##+js(trusted-set-cookie, OptanonConsent, groups=C0001%3A1%2CC0003%3A1%2CSPD_BG%3A1%2CC0002%3A1%2CC0004%3A1%2CC0005%3A1, , , reload, 1)
+
+! Mandatory + embedded - https://christianconcern.com/news/abortion-figures-soar-to-new-all-time-highs/
+christianconcern.com##+js(trusted-set-cookie, STYXKEY_your_privacy_settings, %7B%22strict%22%3A%221%22%2C%22thirdparty%22%3A%221%22%2C%22advanced%22%3A%220%22%7D, 1year, , reload, 1)
+
+! https://github.com/finnish-easylist-addition/finnish-easylist-addition/discussions/416#discussioncomment-6246417
+! Sanoma corporation - Sanoman sisällönjakelukumppanit (eng: Sanoma's content delivery partners)
+cdn.privacy-mgmt.com##+js(trusted-click-element, .sanoma-logo-container ~ .message-component.sticky-buttons button.sp_choice_type_12[title="Asetukset"])
+cdn.privacy-mgmt.com##+js(trusted-click-element, .sanoma-logo-container ~ .message-component.privacy-manager-tcfv2 .tcfv2-stack[title="Sanoman sisällönjakelukumppanit"] button.pm-switch[aria-checked="false"])
+cdn.privacy-mgmt.com##.sanoma-logo-container ~ .message-component.privacy-manager-tcfv2 .tcfv2-stack:not([title="Sanoman sisällönjakelukumppanit"]) button.pm-switch.checked:remove-class(checked)
+cdn.privacy-mgmt.com##+js(trusted-click-element, .sanoma-logo-container ~ .message-component.sticky-buttons button.sp_choice_type_SAVE_AND_EXIT[title="Tallenna"], , 1500)
+aamulehti.fi,etlehti.fi,gloria.fi,hs.fi,hyvaterveys.fi,is.fi,jamsanseutu.fi,janakkalansanomat.fi,kankaanpaanseutu.fi,kmvlehti.fi,kodinkuvalehti.fi,merikarvialehti.fi,nokianuutiset.fi,pelikone.fi,rannikkoseutu.fi,satakunnankansa.fi,soppa365.fi,suurkeuruu.fi,sydansatakunta.fi,tyrvaansanomat.fi,valkeakoskensanomat.fi,vauva.fi##[title="SP Consent Message"]
+aamulehti.fi,etlehti.fi,gloria.fi,hs.fi,hyvaterveys.fi,is.fi,jamsanseutu.fi,janakkalansanomat.fi,kankaanpaanseutu.fi,kmvlehti.fi,kodinkuvalehti.fi,merikarvialehti.fi,nokianuutiset.fi,pelikone.fi,rannikkoseutu.fi,satakunnankansa.fi,soppa365.fi,suurkeuruu.fi,sydansatakunta.fi,tiede.fi,tyrvaansanomat.fi,valkeakoskensanomat.fi,vauva.fi##html.sp-message-open:style(overflow: auto !important; width: initial !important)
+aamulehti.fi,etlehti.fi,gloria.fi,hs.fi,hyvaterveys.fi,is.fi,jamsanseutu.fi,janakkalansanomat.fi,kankaanpaanseutu.fi,kmvlehti.fi,kodinkuvalehti.fi,merikarvialehti.fi,nokianuutiset.fi,pelikone.fi,rannikkoseutu.fi,satakunnankansa.fi,soppa365.fi,suurkeuruu.fi,sydansatakunta.fi,tiede.fi,tyrvaansanomat.fi,valkeakoskensanomat.fi,vauva.fi##html.sp-message-open > body:style(position: unset !important; margin-top: 0 !important; overflow: visible !important)
+
+! https://www.wired.com/story/gadget-lab-podcast-573/
+! https://www.vogue.co.uk/arts-and-lifestyle/article/grammy-awards-2023-best-social-reactions
+! Embedded content - Functional + Targeting cookie
+vogue.co.uk,wired.com##+js(trusted-set-cookie, OptanonConsent, groups=C0001%3A1%2CC0009%3A0%2CC0002%3A0%2CC0003%3A1%2CC0004%3A1, 1year)
+
+! https://www.jekabpils.lv/en/gallery/myrhorod-ukraine#2144
+! Share button - Social media cookie
+jekabpils.lv##+js(trusted-set-cookie, allowCookies, '{"uvc":true,"__cfduid":true}')
+jekabpils.lv###cookieConsent
+
+! Bank sites - Personalization cookie
+aachener-bank.de,bernhauser-bank.de,bodenseebank.de,bremischevb.de,cvw-privatbank-ag.de,dervolksbanker.de,gladbacher-bank.de,meine-rvb.de,meinebank.de,muenchner-bank.de,nordthueringer-volksbank.de,owl-immobilien.de,raiba-gr.de,raiba-ndwa.de,raiba-westhausen.de,rb-berghuelen.de,rb-denzlingen-sexau.de,rb-eching.de,rb-hardt-bruhrain.de,rb-oberaudorf.de,rb-sondelfingen.de,rv-banken.de,saechsischer-gewinnsparverein.de,skbwitten.de,sparda-bank-hamburg.de,sparda-sw.de,vb-lauterecken.de,vb-mittelhessen.de,vb-rb.de,vbleos.de,vbsuedemsland.de,voba-deisslingen.de,voba-moeckmuehl.de,volksbank-aktiv.de,volksbank-backnang.de,volksbank-daaden.de,volksbank-dh.de,volksbank-freiburg.de,volksbank-international.de,volksbank-kirnau.de,volksbank-mittleres-erzgebirge.de,volksbank-remseck.de,volksbank-thueringen-mitte.de,volksbank-trossingen.de,volksbankeg.de,vr-nopf.cz,vrb-spangenberg.de,vrbankeg.de,vrbankimmobilien.de,vvr-bank.de,vvrbank-krp.de##+js(trusted-set-cookie, cookieConsent, %5B%7B%22name%22%3A%22essenziell%22%2C%22value%22%3A%22on%22%7D%2C%7B%22name%22%3A%22komfort%22%2C%22value%22%3A%22on%22%7D%2C%7B%22name%22%3A%22marketing%22%2C%22value%22%3A%22off%22%7D%2C%7B%22name%22%3A%22statistik%22%2C%22value%22%3A%22off%22%7D%2C%7B%22name%22%3A%22speichern%22%2C%22value%22%3A%22on%22%7D%5D, 1year)
+
+! Mandatory, functional + social
+! https://www.zdnet.com/article/new-wi-fi-attack-cracks-wpawpa2-passwords-with-ease/ video won't play
+! https://www.zdnet.com/article/samsung-blu-ray-players-are-rebooting-in-a-loop-and-nobody-knows-why/ - partial loading tweets
+zdnet.com##+js(trusted-set-cookie, OptanonConsent, groups=C0001%3A1%2CC0002%3A0%2CC0003%3A1%2CC0004%3A0%2CC0005%3A1, 1year)
+
+! https://news.sky.com/story/elon-musk-says-his-dog-is-now-twitters-ceo-as-companys-name-gets-quietly-changed-12855604
+! Embed contents - Custom purposes cookies
+||privacy-mgmt.com^$domain=news.sky.com
+news.sky.com##+js(trusted-set-cookie, consents, :4:6:7:8:9:10:11:12:13:19:)
+
+! Mandatory, statistical + functional
+! Content of the page won't load, and customer assistant tool won't work
+lippu.fi##+js(trusted-set-cookie, __cmpcpc, __1_2__)
+lippu.fi##+js(trusted-set-cookie, __cmpcvc, __c24599_s94_c24102_s40_s1052_s65_c24103_s23_c9953_c24290_c24098_s26_s2612_s135_s1104_s1409_s905_s24_c24202_c22143_c21373_s77_s30_U__)
+lippu.fi##+js(trusted-set-cookie, __cmpconsentx40263, BPuKNGaPuKNGaAfEHBFIABAAAAA_mABAfyA)
+
+! https://www.radiox.co.uk/festivals/parklife-2023-headliners-line-up-tickets-stage-times/
+! Audio player - Remixd cookie
+||privacy-mgmt.com^$domain=radiox.co.uk
+radiox.co.uk##+js(trusted-set, dataLayer, '{"value":[{"signals":["remixd"]},{"event":"remixd_gtm_fire"}]}')
+
+! Mandatory + Settings - Content can't be clicked, if forced selectable the language selector still glitches
+! https://starcart.com/fi-FI/building-renovation-fireplaces/Kevyttakka-Panadero-Harmonie-Musta-89-x-80-cm/5ab66aad-0697-4f83-ac9c-8f8d1f3f2ae9/
+starcart.com##+js(trusted-set-cookie, consent-levels, 1-1_2-1_3-0_4-0, 1year)
+
+! Mandatory, Functional + Targeting
+! https://sydan.fi/etelasuomi/sydandigi/osa-1/3-sydanterveyssivustot/ (video)
+sydan.fi##+js(trusted-set-cookie, OptanonConsent, groups=C0001%3A1%2CC0002%3A0%2CC0003%3A1%2CC0004%3A1, 1year)
+
+! https://www.thejournal.ie/science-conference-de-extinction-840062-Mar2013/
+! Video - Targeting cookie
+thejournal.ie##+js(trusted-set-cookie, OptanonConsent, groups=C0001%3A1%2CC0002%3A0%2CC0003%3A0%2CC0004%3A1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18842
+rfi.fr##+js(trusted-click-element, #didomi-notice-agree-button)
+
+! Mandatory + Functional - chat doesn't work
+cmore.fi##+js(trusted-set-cookie, OptanonConsent, groups=1%3A1%2C2%3A0%2C3%3A1%2C4%3A0%2C5%3A0%2CBG40%3A0%2CBG41%3A0%2CBG42%3A0, 1year)
+
+! https://www.europe1.fr/direct-video
+! Video - Content cookie
+europe1.fr##+js(trusted-set-cookie, euconsent-v2, CPuy0IAPuy0IAAHABBENDNCgAAAAAAAAAAAAJNFB_G5cSWNhOHJvY9tUaQ0HwFR4o6AgDgCZA4wBCRIAMIwF0GAAIEBAIAgAAAAEAAJAAAAEAAHAAAAAAIEBASCIAEAAIBAAICAAAAABQgAACABJGwAAEAAAAEQEABQAgAIAQBuAQEAAAAAAAAAAAAgBAABBAAAAAAAgAAAIAAAAAAgAEAAAAAAAAAAAABAAEAAAAAEAAABIaADAAEExRUAGAAIJihIAMAAQTFEQAYAAgmKMgAwABBMUdABgACCYpCADAAEExSUAGAAIJilIAMAAQTFA.YAAAAAAAAAAA)
+
+! https://www.etsy.com/ - Site customisation cookie
+etsy.com##+js(trusted-set-cookie, p, eyJnZHByX3RwIjoyLCJnZHByX3AiOjF9, 1year, , reload, 1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19119
+technopat.net##+js(trusted-set-cookie, cmplz_consented_services, {"youtube":true})
+technopat.net##+js(trusted-set-cookie, xf_consent, %5B%22_third_party%22%5D, , , reload, 1)
+
+! https://github.com/easylist/easylist/pull/16852 - Functional cookie
+just-eat.*,justeat.it,lieferando.*,pyszne.pl,takeaway.com,thuisbezorgd.nl##+js(trusted-set-cookie, cookieConsent, functional, 1year, , reload, 1)
+just-eat.*,justeat.it,lieferando.*,pyszne.pl,takeaway.com,thuisbezorgd.nl##+js(trusted-set-cookie, je-cookieConsent, necessary, 1year)
+just-eat.*,justeat.it,lieferando.*,pyszne.pl,takeaway.com,thuisbezorgd.nl##+js(trusted-set-cookie, customerCookieConsent, %5B%7B%22consentTypeId%22%3A103%2C%22consentTypeName%22%3A%22necessary%22%2C%22isAccepted%22%3Atrue%7D%2C%7B%22consentTypeId%22%3A104%2C%22consentTypeName%22%3A%22functional%22%2C%22isAccepted%22%3Atrue%7D%2C%7B%22consentTypeId%22%3A105%2C%22consentTypeName%22%3A%22analytical%22%2C%22isAccepted%22%3Afalse%7D%2C%7B%22consentTypeId%22%3A106%2C%22consentTypeName%22%3A%22personalized%22%2C%22isAccepted%22%3Afalse%7D%5D, 1year)
+
+! https://www.telekom.com/ - third-party services cookie
+telekom.com##+js(trusted-set-cookie, cookie-optin, {%22version%22:1%2C%22settings%22:{%22required%22:true%2C%22analytical%22:false%2C%22marketing%22:false%2C%22thirdparty%22:true}}, 1year)
+
+! https://hemmersbach.com/career/13972 - Performance, functional cookies
+hemmersbach.com##+js(trusted-set-cookie, cookiefirst-consent, %7B%22cookiefirst%22%3Atrue%2C%22google_analytics%22%3Atrue%2C%22google_tag_manager%22%3Atrue%2C%22linkedin_ads%22%3Afalse%2C%22hubspot%22%3Atrue%2C%22twitter%22%3Afalse%2C%22active-campaign%22%3Atrue%2C%22email-marketing%22%3Atrue%2C%22bing_ads%22%3Afalse%2C%22type%22%3A%22granular%22%7D)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20523
+! https://github.com/uBlockOrigin/uAssets/issues/20595
+digitalfoundry.net,egx.net,eurogamer.it,mcmcomiccon.com,nintendolife.com,paxsite.com,purexbox.com,pushsquare.com,starwarscelebration.com,thehaul.com,timeextension.com##+js(trusted-click-element, #onetrust-accept-btn-handler)
+dicebreaker.com,eurogamer.cz,eurogamer.es,eurogamer.net,eurogamer.nl,eurogamer.pl,eurogamer.pt,gamesindustry.biz,jelly.deals,reedpop.com,rockpapershotgun.com,thepopverse.com,vg247.com,videogameschronicle.com##+js(trusted-click-element, button[title="Accept and continue"])
+dicebreaker.com,eurogamer.cz,eurogamer.es,eurogamer.net,eurogamer.nl,eurogamer.pl,eurogamer.pt,gamesindustry.biz,jelly.deals,reedpop.com,rockpapershotgun.com,thepopverse.com,vg247.com,videogameschronicle.com##+js(trusted-click-element, button[title="Accept All Cookies"])
+eurogamer.de##+js(trusted-click-element, .accept-all)
+roadtovr.com##+js(trusted-click-element, #CybotCookiebotDialogBodyButtonAccept)
+
+! Targeting cookies for search and for embeds - Sample: https://www.eurogamer.pl/czesc-graczy-nie-moze-zainstalowac-marvels-spider-man-2-z-plyty
+eurogamer.nl,eurogamer.es,eurogamer.cz,eurogamer.net,eurogamer.pl,eurogamer.pt##+js(trusted-set-cookie, consentUUID, f2fed351-3e4d-4e37-a3d6-bf942c6146e1_25)
+eurogamer.nl,eurogamer.es,eurogamer.cz,eurogamer.net,eurogamer.pl,eurogamer.pt##+js(trusted-set-cookie, euconsent-v2, CP0C_wAP0C_wAAGABBENDbCgAP_AAAAAAApAJLNV_H__bX9r8X7_6ft0eY1f9_jz7uQxBhfJk-4F3LvW_JwX32E7NF36tq4KmRoEu1JBIUNlHIHUDUmwaogVrzHsakWcpTNKJ6BkkFMRU2dYCF5um4tjeQKY5_p_d3f52T-9_dv839zz38VHv3cZX--12PDdU5-9Dfn9fRfb89IL9_78v4v8_t_rk2_eT13_tetr_DAAAAaEgogAIAAXABQAFQAOQAeACAAGAAMoAaABqADwAIgATAAngBVADMAG8APQAfgBCQCGAIkARwAlgBNAClAGAAMOAZQBlgDZgHcAd8A9gD4gH2AfsA_wEAAIpARcBGACNAElAJSAUGAp4CrgFzAMUAaIA2gBuADiAIdASIAnYBQ4CjwFIgLYAXIAu8BgwDDYGRgZIAycBlwDOQGfANIgauBrIDbwG6gOCgcmBygDlwHjgPaAfSBBgCEMELQQvAhyBD0CH4EcQI-gR_AkUBJAIACAJoAtwNAEAKeAh0BnwDlBEAQAp4CHQGfAOUFQAwGfAOUAheMgBgM-AcoBC8hA4AAWABQAFwAMQAagBMACmAFUALgAYgA3gB6AEcAKUAYAAyoB3AHeAP8AigBJQCUgFBAKfAVEBVwC5gGKANoAc4A6gCVAFNAKsAWKAsoBaIC4AFyAMjAZOAzkBnwDRAGqgOAAcoA8cB9IEGAIUAQtAheBDoCHoEcQJFASQHQaQAFwAUABUADkAHwAgABdADAAMoAaABqADwAIgATAAngBVgC4ALoAYgAzABvAD0AH6AQwBEgCWAE0AKMAUoAwABhgDKAGiANkAd4A9oB9gH6AP8AikBFgEYAI6ASUAlIBQQCnwFRAVcAsQBc4C8gL0AYoA2gBuADiAHOAOoAfYBDoCLwEiAJUATIAnYBQ4CjwFNAKsAWKAsoBbAC3QFwALkAXaAu8BfQDBgGGgMegZGBkgDJwGVAMsAZcAzMBnIDPgGiANIAarA1cDWAG3gN1AcXA5MDlAHLgPHAe0A-kB9YEAQIMAQtAhfBDkEOgIegRxAjsBH0CP4EigJIDgAIC3CUDQABAACwAKAAcAA_ADAAMQAeABEACYAFUALgAYoBDAESAI4AUYAwABsgDvAH4AU-AqICrgFzAMUAdQBDoCJgEXgJEAUeAsUBZQC2IGRgZIAycBnIDPgGkANYAbeA4AB7QD6QIAgQPAgwBCECF4EPQI4gSKAkgBJUkABAW4UgpAALgAoACoAHIAPgBBADAAMYAaABqADwAIgATAAngBSACqAGIAMwAfoBDAESAKMAUoAwABlADRAGyAO-AfgB-gEWAIwAR0AkoBKQCgwFRAVcAuYBeQDFAG0ANwAdQA9oB9gEOgImAReAkQBOwChwFWALFAWwAuABcgC7QF9AMNgZGBkgDJwGWAMuAZyAz4BpEDWANZAbeA3UBwUDkwOUAcuA8UB44D2gH0gQYAhCBC0CF4EM4Icgh0BHECOwEfQI_gSKAkgUAAgLc.YAAAAAAAAAAA, 1year)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/15pftux/request_for_a_fix_so_the_embedded_youtube_video/
+! Functional cookie
+pushsquare.com##+js(trusted-set-cookie, OptanonConsent, groups=C0001%3A1%2CC0002%3A0%2CC0003%3A1%2CC0004%3A0%2CSTACK42%3A0, 1year)
+pushsquare.com##+js(trusted-set-cookie, eupubconsent-v2, CPwbUmgPwbUmgAcABBENDSCgAAAAAH_AAChQJnNf_X__b2_r-_7_f_t0eY1P9_7__-0zjhfdl-8N3f_X_L8X52M5vF36tqoKuR4ku3bBIUdlHPHcTVmw6okVryPsbk2cr7NKJ7PEmlMbM2dYGH9_n9_z-ZKY7___f__z_v-v___9____7-3f3__5__--__e_V_-9zfn9_____9vP___9v-_9_3________3_r9_7_D_-f_87_XWxBQAJMNS4gC7IkZCbaMIoEQIwrCQqgUAFEAkLRAYQurgp2VwE-sBkAIEUATwQAhgBRkACAAASAJCIAJAjgQCAQCAQAAgAVCAQAMbAAPAC0EAgAFAdCxTigCUCwgyISIhTAhKkSCgnsqEEoP1BXCEMssCKDR_xUICNZAxWBEJCxehwBICXiSQPdUb4ACEAKAUUoViKT8wBDgmbLVXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAA.YAAAD_gAAAAA, 1year)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/15pt2zz/how_to_get_rid_of_this_cookiebot_crap_it_pops_up/
+! Embedded content - Statistics + Marketing cookies
+bt.dk##+js(trusted-set-cookie, CookieConsent, {necessary:true%2Cpreferences:false%2Cstatistics:true%2Cmarketing:true}, 1year)
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/2777 - Functional cookie
+dlalakierni.pl##+js(trusted-set-cookie, AtomStore[COOKIES_ACCEPTED], 1, 1year, , reload, 1)
+dlalakierni.pl##+js(trusted-set-cookie, AtomStore[FUNCTIONAL_COOKIES_ACCEPTED], 1, 1year)
+dlalakierni.pl##+js(trusted-set-cookie, AtomStore[MARKETING_COOKIES_ACCEPTED], 0, 1year)
+dlalakierni.pl##.header-cookie-message
+
+! https://officiallondontheatre.com/ - Functional cookie
+officiallondontheatre.com##+js(trusted-set-cookie, solt_cookie_preferences, functional%2Cperformance, 1year)
+
+! https://app.solit-kapital.de/rates - Functional cookie
+app.solit-kapital.de##+js(trusted-set-local-storage-item, cookieSettings, '{"technical":true,"bugsnag":false,"adjust":false}')
+
+! https://constantin.film/ - Functional cookie
+constantin.film##+js(trusted-set-cookie, cookie-layer-settings, '{"id":"b2575cbc6f69c6ff02140366ef7473e9","options":[{"analytics-is-enabled":false},{"komfort-is-enabled":false},{"personalisierung-is-enabled":false},{"external-data-is-enabled":true},{"cf-ga-opt-in":false},{"cf-fb-opt-in":false},{"cf-go-opt-in":false},{"cf-sn-opt-in":false},{"cf-am-opt-in":false},{"cf-pi-opt-in":false},{"cf-tw-opt-in":false},{"cf-li-opt-in":false},{"cf-te-opt-in":false},{"cf-ti-opt-in":false},{"cf-ttd-opt-in":false},{"external-data-youtube-is-enabled":true},{"external-data-spotify-is-enabled":true},{"external-data-googlemaps-is-enabled":true},{"external-data-universal-is-enabled":true}]}', 1year)
+constantin.film##+js(set-cookie, external-data-googlemaps-is-enabled, true)
+constantin.film##+js(set-cookie, external-data-youtube-is-enabled, true)
+constantin.film##+js(set-cookie, external-data-spotify-is-enabled, true)
+
+! https://twitter.com/ - Functional cookie
+twitter.com##+js(trusted-set-cookie, d_prefs, MjoxLGNvbnNlbnRfdmVyc2lvbjoyLHRleHRfdmVyc2lvbjoxMDAw)
+
+! https://www.mundodeportivo.com/ - Embed social media content
+mundodeportivo.com#@#+js(trusted-set-cookie, didomi_token, eyJ1c2VyX2lkIjoiIiwiY3JlYXRlZCI6IjIwMjMtMDktMDJUMTI6NDM6NDAuMzY4WiIsInVwZGF0ZWQiOiIyMDIzLTA5LTAyVDEyOjQzOjQwLjM2OFoiLCJ2ZW5kb3JzIjp7ImVuYWJsZWQiOlsiZ29vZ2xlIiwiYzpwaWFuby1ic1hwclg4dyIsImM6bHVjaWRob2xkLXlmdGJXVGY3IiwiYzpzYWxlc2ZvcmNlLUI0WEI1UU5aIiwiYzpsaXZlZnlyZS00Y2JOV1lFeiIsImM6eW91dHViZS1EV3RqQ1VLYiIsImM6YWNjZW5nYWdlLUVXRUx4MzRnIiwiYzpjaGFydGJlYXQtaHhLaEZiQXciLCJjOmFtYXpvbmFkcy05YzVUTkdhaiIsImM6dHdpdHRlcndpLXdVbUJubkt5IiwiYzpmYWNlYm9va3ctMmthN1Z3UTgiLCJjOmdvb2dsZW9wdC1RaGlBZG1WYSIsImM6Z2djcm9sbHVwLW5OSGVpMmFXIiwiYzpmYWNlYm9va2EtZnJVOU01SlkiLCJjOmdvb2dsZWFuYS1HMmJzRUp5VCIsImM6Z29vZ2xlYXVkLUxEalZZa2VhIiwiYzppbnN0YWdyYW0tdFdtSmdKcHEiLCJjOm5ldHF1ZXN0LU4yblc0ZnBHIiwiYzpwcm9jdGVyYW4tSzROdzh4TUMiLCJjOmNvbXNjb3JlLWpVRmM5aWNZIiwiYzpzcG90aW0tM0ZLSDYyeUMiLCJjOnl1c3AtejhOaTQ0Wk0iLCJjOndlbWFzc21lZC1QR1o2M0Z4WSIsImM6ZXZvbG9rLWl6S3o3QVlWIiwiYzpnb29nbGVmaXItSDhrY2lGSkciLCJjOmxhbGlnYS1ZNllRMjJSUiIsImM6YWRzdml1LVZUMjZtM1FiIl19LCJwdXJwb3NlcyI6eyJkaXNhYmxlZCI6WyJnZW9sb2NhdGlvbl9kYXRhIiwiY29tcGFydGlyLWRwSGdKRUphIiwia0VlRHNMQ3AiLCJkZXZpY2VfY2hhcmFjdGVyaXN0aWNzIl19LCJ2ZW5kb3JzX2xpIjp7ImVuYWJsZWQiOlsiZ29vZ2xlIl19LCJ2ZXJzaW9uIjoyLCJhYyI6IiJ9)
+mundodeportivo.com#@#+js(trusted-set-cookie, euconsent-v2, CPxeM4APxeM4AAHABBENDUCgAP8AAE4AAAiQIkNf_X_fb2vj-_p99_t0eY1P9_6_t6wzjheNk-8NyZ_X_J4Xp2M6rB34pqIKuR4kunLBIQdlHGHcTUgg4IkFqSPsYk2MizNKJ7JEmlMbE2dYGG9vn8TT-ZKY70__f__zvn-r___97oAAhCAABAAAAAgAAIAAAgAIAAAAAAAAAAAAAAAAAAAAAAAADA4tAsy1bqaFsHT0Lpo4igRGjCuJWoBQGUQCwtkBhmTPCnZHAR-wnUAAxAADBByGAFEaAICCIIAkKgIkEOBAqJAIdAACgAUIBAFRIgEoiLAQCAA0B8PAKKAJSLGDKhIidcCMKxIPu-QAAEAQAAIAAQAAAABAJCgAYAAgmiGgAwABBNERABgACCaIqADAAEE0RkAGAAIJojwAMAAQTRIQAYAAgmiTAAwABBNEqABgACCaIAAA.f-AACcAAAAAA)
+mundodeportivo.com##+js(trusted-set-cookie, didomi_token, eyJ1c2VyX2lkIjoiMThhNmQyZGEtOGNmOC02YTE0LWI3OWQtNzViOGU4ZjA2YmYyIiwiY3JlYXRlZCI6IjIwMjMtMDktMDdUMDE6MDc6MTQuNTIwWiIsInVwZGF0ZWQiOiIyMDIzLTA5LTA3VDAxOjA3OjE0LjUyMFoiLCJ2ZW5kb3JzIjp7ImVuYWJsZWQiOlsiZ29vZ2xlIiwiYzpwaWFuby1ic1hwclg4dyIsImM6bHVjaWRob2xkLXlmdGJXVGY3IiwiYzpzYWxlc2ZvcmNlLUI0WEI1UU5aIiwiYzpsaXZlZnlyZS00Y2JOV1lFeiIsImM6eW91dHViZS1EV3RqQ1VLYiIsImM6YWNjZW5nYWdlLUVXRUx4MzRnIiwiYzpjaGFydGJlYXQtaHhLaEZiQXciLCJjOmFtYXpvbmFkcy05YzVUTkdhaiIsImM6dHdpdHRlcndpLXdVbUJubkt5IiwiYzpmYWNlYm9va3ctMmthN1Z3UTgiLCJjOmdvb2dsZW9wdC1RaGlBZG1WYSIsImM6Z2djcm9sbHVwLW5OSGVpMmFXIiwiYzpmYWNlYm9va2EtZnJVOU01SlkiLCJjOmdvb2dsZWFuYS1HMmJzRUp5VCIsImM6Z29vZ2xlYXVkLUxEalZZa2VhIiwiYzppbnN0YWdyYW0tdFdtSmdKcHEiLCJjOm5ldHF1ZXN0LU4yblc0ZnBHIiwiYzpwcm9jdGVyYW4tSzROdzh4TUMiLCJjOmNvbXNjb3JlLWpVRmM5aWNZIiwiYzpzcG90aW0tM0ZLSDYyeUMiLCJjOnl1c3AtejhOaTQ0Wk0iLCJjOndlbWFzc21lZC1QR1o2M0Z4WSIsImM6ZXZvbG9rLWl6S3o3QVlWIiwiYzpnb29nbGVmaXItSDhrY2lGSkciLCJjOmxhbGlnYS1ZNllRMjJSUiIsImM6YWRzdml1LVZUMjZtM1FiIl19LCJwdXJwb3NlcyI6eyJkaXNhYmxlZCI6WyJnZW9sb2NhdGlvbl9kYXRhIiwiY29tcGFydGlyLWRwSGdKRUphIiwia0VlRHNMQ3AiLCJkZXZpY2VfY2hhcmFjdGVyaXN0aWNzIl19LCJ2ZW5kb3JzX2xpIjp7ImVuYWJsZWQiOlsiZ29vZ2xlIl19LCJ2ZXJzaW9uIjoyLCJhYyI6IkRIYUNJQUVJQUl3QVdRQXVnQnNBRDBBSlVBWWdBOFFCLWdFM0FLTUFZb0F6NEI0Z0R6UUh1QWU4QkRnQ1N3R1lnTTFBZXFCQWtDRFlFUkFJamdSSkFpbUJHY0NVUUVzUUphZ1M3QW40QlJVQ3FvRmh3TFVnWWlBem1CcWNEaUFIS0FPbkFkV0E3Q0I3RURfd0lHQVJtZ2tNQkwyQ2M0RTd3S0NBVUhncFNCVHFDczhGb0FMUmdXeUF1ZEJlU0Mtb0dIUU1iZ1k3QUFBQS5ESGFDSUFFSUFJd0FXUUF1Z0JzQUQwQUpVQVlnQThRQi1nRTNBS01BWW9BejRCNGdEelFIdUFlOEJEZ0NTd0dZZ00xQWVxQkFrQ0RZRVJBSWpnUkpBaW1CR2NDVVFFc1FKYWdTN0FuNEJSVUNxb0Zod0xVZ1lpQXptQnFjRGlBSEtBT25BZFdBN0NCN0VEX3dJR0FSbWdrTUJMMkNjNEU3d0tDQVVIZ3BTQlRxQ3M4Rm9BTFJnV3lBdWRCZVNDLW9HSFFNYmdZN0FBQUEifQ==)
+mundodeportivo.com##+js(trusted-set-cookie, euconsent-v2, CPxurkAPxurkAAHABBENDVCgAP8AAE4AAAiQIkNf_X_fb2vj-_p99_t0eY1P9_6_t6wzjheNk-8NyZ_X_J4Xp2M6rB34pqIKuR4kunLBIQdlHGHcTUgg4IkFoSPsYk2MizJKJ7JEmlMbE2dYGG9vn8TT-ZKY70__f__zvn-r___97oAAhCAABAAAAAgAAIAAAgAIAAAAAAAAAAAAAAAAAAAAAAAADA4tAsy0bqaFsHT0Lpo4igRGjCuJWoBQGUQCwtkBhmTPCnZHAR-wnUAAxAADBByGAFEaAICCIIAkKgIkEOBAqJAIdAACgAUIBAFRIgEoiLAQCAA0B8PAKKAJSLGDKhIidcCMKxIPu-QAAEAQAAIAAQAAAABAJCgAYAAiCgGgAwABEFARABgACIKAqADAAEQUBkAGAAIgoDwAMAARBQIQAYAAiCgTAAwABEFAqABgACIKAAAA.f-AACcAAAAAA)
+
+! https://www.nordax.com/ - Functional cookie
+nordax.com##+js(trusted-set-cookie, cookie_consent, %7B%22allowEssentials%22%3Atrue%2C%22allowFunctional%22%3Atrue%2C%22allowAnalytics%22%3Afalse%2C%22allowMarketing%22%3Afalse%7D)
+
+! https://www.youtube.com/ - Video recommendations
+! https://www.reddit.com/r/uBlockOrigin/comments/1693mka/
+youtube.com##+js(trusted-set-cookie, SOCS, CAISNQgDEitib3FfaWRlbnRpdHlmcm9udGVuZHVpc2VydmVyXzIwMjMwODI5LjA3X3AxGgJlbiADGgYIgJnPpwY, , , reload, 1, domain, youtube.com)
+! GDPR dialog when moving from Google to Youtube
+! https://github.com/uBlockOrigin/uAssets/discussions/18598#discussioncomment-7362961
+consent.youtube.com##+js(trusted-click-element, form[action] button[jsname="tWT92d"])
+! https://github.com/DandelionSprout/adfilt/discussions/932#discussioncomment-8170867
+consent.youtube.com##[data-p*="/consent.youtube.com"]
+
+! https://www.empik.com/ - Functional + Social
+empik.com##+js(trusted-set-cookie, cad, $now$)
+empik.com##+js(trusted-set-cookie, cc, 2.4)
+empik.com##+js(trusted-set-cookie, cp, .16.21.)
+empik.com##+js(trusted-set-cookie, cva, W2.0)
+
+! https://www.ubs.com/ - User preference
+ubs.com##+js(trusted-set-cookie, ubs_cookie_settings_2.0.4, 0-2-1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19717 - Functionality
+vicko.gr##+js(trusted-set-cookie, ConsentChecked, '{"userHasSetCookies":true,"functionalityCookies":true,"statisticCookies":false,"marketingCookies":false}', , , reload, 1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19728 - Experience
+3bmeteo.com##+js(trusted-set-cookie, _iub_cs-817732, %7B%22purposes%22%3A%7B%221%22%3Atrue%2C%223%22%3Atrue%2C%224%22%3Afalse%2C%225%22%3Afalse%7D%2C%22id%22%3A817732%2C%22cons%22%3A%7B%22rand%22%3A%223ec000%22%7D%7D)
+
+! https://www.call-a-pizza.de/ - Functional
+call-a-pizza.de##+js(trusted-set-cookie, allow_cookies, '{"essential":"1","functional":{"all":"1"},"marketing":{"all":"0"}}')
+
+! https://www.jeuxvideo.com/
+jeuxvideo.com##+js(trusted-set-cookie, euconsent-v2, CPywmUAPywmUAAHABBENDYCsAP_AAH_AAAAAJrNf_X__b2_r-_7_f_t0eY1P9_7__-0zjhfdF-8N3f_X_L8X52M5vF36tqoKuR4ku3bBIUdlHPHcTVmw6okVryPsbk2cr7NKJ7PkmlMbM2dYGH9_n9_z-ZKY7___f__z_v-v___9____7-3f3__5__--__e_V_-9zfn9_____9vP___9v-_9_3________3_r9_7_D_-f_87_XW-8E1ACTDQuIAuwJGQm2jCKBACMKwkKoFABRAJC0QGELq4KdlcBPrARACBFAAcEAIYAUZAAgAAAgCQiACQI4EAgEAgEAAIAFQgEABGwACgAsBAIABQHQsU4oAlAsIMiMiIUwIQpEgoJ7KhBKD9QVwhDLLACg0f8VCAgUAMVgRCQsXocASAlwkkC3VG-AAhACgFFKFYgk9MAA4JGy1B4IAA.f_gAD_gAAAAA)
+jeuxvideo.com##+js(trusted-set-cookie, didomi_token, eyJ1c2VyX2lkIjoiMThhZDY1NzMtZGY4YS02YzJhLWJkZmUtOGI5ZjkwMDU5MmQwIiwiY3JlYXRlZCI6IjIwMjMtMDktMjdUMTE6MTI6MzcuNzk3WiIsInVwZGF0ZWQiOiIyMDIzLTA5LTI3VDExOjEyOjM3Ljc5N1oiLCJ2ZW5kb3JzIjp7ImVuYWJsZWQiOlsiZ29vZ2xlIiwiYzpkbXB3ZWJlZGktblRCSEFrNDQiLCJjOmFtYXpvbnRhbS1lWTRpTjROViIsImM6YmF0Y2gtYkp0R3R0eEwiLCJjOndhcm5lcmJyby1BUEpXeUFHUCIsImM6ZmFjZWJvb2std0RpR25KV1YiLCJjOnNuYXBjaGF0LWhXMnJNSmZZIiwiYzp0aWt0b2stV2J5cEEzWmQiLCJjOnR3aXR0ZXIteGJERXhKUGsiLCJjOmdvb2dsZWFuYS1YTXFhZ2F3YSJdfSwicHVycG9zZXMiOnsiZW5hYmxlZCI6WyJkZXZpY2VfY2hhcmFjdGVyaXN0aWNzIiwiZ2VvbG9jYXRpb25fZGF0YSJdfSwidmVuZG9yc19saSI6eyJlbmFibGVkIjpbImdvb2dsZSJdfSwidmVyc2lvbiI6Mn0=)
+
+! https://player.boom973.com/ - Experience
+player.boom973.com##+js(trusted-set-cookie, _iub_cs-30166201, %7B%22timestamp%22%3A%222023-09-28T08%3A20%3A53.130Z%22%2C%22version%22%3A%221.51.0%22%2C%22purposes%22%3A%7B%221%22%3Atrue%2C%222%22%3Afalse%2C%223%22%3Atrue%2C%224%22%3Afalse%2C%225%22%3Afalse%7D%2C%22id%22%3A30166201%2C%22cons%22%3A%7B%22rand%22%3A%22e747e3%22%7D%7D)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19940 - Precise location
+lachainemeteo.com##+js(trusted-set-local-storage-item, appconsent, '{"consents":{},"i18n":{},"ui":{},"vendorlist":{},"CMP_VERSION":10,"xchange":{},"events":[],"client":{"externalIds":{},"floatingPurposes":[{"id":"","version":0}],"floatingPurposesConsent":[{"extra_id":"","type":0,"given_at":null,"version":0}]},"consentstring":"CPzBFAAPzBFAAACAKAFRDUCoAAAAAH_AAAqIIzNF_H_dSSNj8X5_Yft0eY1P5dAz7uQxBhaJg6QFyBLEsJwXwmAIIEnqAKgKGBIEskJAIQBlCAHABUEAYIEBISGMAEAQIQAAJiAEEEERAmJICBBJG4AgEAIQglgCABQAgAsESFsoQMhAAIAABUJAAAgggIABAgAIBDAAQAAAAAAAAgAAEAAAAAAAAAAEABBHYAkw1LiABsiAkJpAwigRAjCIICKBQAAACQMEAACQIAlBGASgwAQAgRQAEBAAAAFEAAAAAAIAEIAAgACBAABAIBAAAABAAAAAQAAAgAIAQAAAABADAEAABAAAAAAACAECEIAAIACAgAAgAEAIAAAAAAIBAIBAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAgAAAA.YAAAAAAAAAAA","consentstringUpdatedAt":{}}')
+
+! https://github.com/uBlockOrigin/uAssets/issues/19941
+! https://github.com/AdguardTeam/AdguardFilters/issues/145866 - Accept all
+@@||sdk.privacy-center.org^$domain=actu.fr
+actu.fr##+js(trusted-set-cookie, didomi_token, eyJ1c2VyX2lkIjoiMThhZWVmMWQtNGQ2ZC02MDAwLWEzYTAtMDgzZjdhYzBhNGQ1IiwiY3JlYXRlZCI6IjIwMjMtMTAtMDJUMDU6NTI6MjUuNDUzWiIsInVwZGF0ZWQiOiIyMDIzLTEwLTAyVDA1OjUyOjI1LjQ1M1oiLCJ2ZW5kb3JzIjp7ImVuYWJsZWQiOlsiZ29vZ2xlIiwiYzptZXN1cmVkYS1aYzl6dDhMOCIsImM6cHJvbW90aW9ucy1Id0VZZjRUQyIsImM6eWFob28tYWQtZXhjaGFuZ2UiLCJjOnB1YmxpaGViZG8tM1FORWNnRjQiLCJjOnB1YmxpaGViZG8tSE40Z1hhWDYiLCJjOnB1YmxpaGViZG8tWk1iWDI2a1IiLCJjOnlhaG9vLWdlbWluaS1hbmQtZmx1cnJ5IiwiYzpwdWJsaWNpdGUtSGlLR0ZDNGEiLCJjOnB1YmxpaGViZG8tR0huUW1Ea0YiXX0sInB1cnBvc2VzIjp7ImVuYWJsZWQiOlsibWVzdXJlZGEteDN0YzhHYUUiLCJwcm9tb3Rpb25zLVF4R2NHQXpSIiwiY29udGVudXNjLVJad2ZYSk1RIiwiY29udGVudXNkLTcyVlRUYzdlIiwiY29udGVudXN2LXl4TlFXOWI4IiwicHVibGljaXRlLURSRm1UV3RHIiwicHVibGljaXRlLWJiM0M0ZDR6IiwiZGV2aWNlX2NoYXJhY3RlcmlzdGljcyIsImdlb2xvY2F0aW9uX2RhdGEiXX0sInZlcnNpb24iOjIsImFjIjoiQ0JxQUNDQm8uQUFBQSJ9)
+actu.fr##+js(trusted-set-cookie, euconsent-v2, CPzBFAAPzBFAAAHABBENDYCsAP_AAAAAAAAAJNNf_X_db3Nj-_5_fvt0eY1f9dy-v-wjDhedh-0NzXrW-L0F02I7vF3ihggKOQ4EshJBIQdlGKHcRUkw6okEgzGsYESUg4MAJqLEikETEwNYGE1bGcRCOAIYrtsoPr2ymtuKev_9W2V-_-j0QzpJKS-i8IbtQ185xLmsyf0fn4jOP_-VO2997____8AAAFEIEABZAAEAAABISADAAEQUA0AGAAIgoCIAMAARBQFQAYAAiCgMgAwABEFAdABgACIKBCADAAEQUCUAGAAIgoFIAMAARBQA.f_gAAAAAAAAA)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19942
+! https://github.com/AdguardTeam/AdguardFilters/issues/122648 - Social
+@@||sdk.privacy-center.org^$domain=ledauphine.com
+ledauphine.com##[class*="cmp_alternative"]
+ledauphine.com##+js(trusted-set-cookie, euconsent-v2, CPzBFAAPzBFAAAHABBENDYCgAAAAAAAAAAAAJNFB_W_fD2Ni-35_avt0aQ1dwVC_6-UxDgKZB4kFyRpEMKwX3mAKKFXgpKAKGBYEsUZAIQBlHCHEDECwQIERLzHMIAEQJQIAJqJEgFERAkJQCBpZHwMACAIQgHRWATFIiB-HaBroyfhEMaC0AUBQ4AonhMTPAoSdwXCkg7uaHIgIImgFASBAIoYMEEEEBlTkFABAAAkAAABJSADAAEQUCUAGAAIgoDoAMAARBQIQAYAAiCgEgAwABEFARABgACIKAyADAAEQUA0AGAAIgoCoAMAARBQA.YAAAAAAAAAAA, , , reload, 1)
+ledauphine.com##+js(trusted-set-local-storage-item, euconsent-v2, CPzBFAAPzBFAAAHABBENDYCgAAAAAAAAAAAAJNFB_W_fD2Ni-35_avt0aQ1dwVC_6-UxDgKZB4kFyRpEMKwX3mAKKFXgpKAKGBYEsUZAIQBlHCHEDECwQIERLzHMIAEQJQIAJqJEgFERAkJQCBpZHwMACAIQgHRWATFIiB-HaBroyfhEMaC0AUBQ4AonhMTPAoSdwXCkg7uaHIgIImgFASBAIoYMEEEEBlTkFABAAAkAAABJSADAAEQUCUAGAAIgoDoAMAARBQIQAYAAiCgEgAwABEFARABgACIKAyADAAEQUA0AGAAIgoCoAMAARBQA.YAAAAAAAAAAA)
+privacy.ledauphine-presse.fr##+js(trusted-set-cookie, didomi_token, eyJ1c2VyX2lkIjoiMThhZWVmZTgtNGJjMS02NjhmLWE5YTgtNmNhM2VmMmQ0NzVkIiwiY3JlYXRlZCI6IjIwMjMtMTAtMDJUMDY6MDY6NDQuODA0WiIsInVwZGF0ZWQiOiIyMDIzLTEwLTAyVDA2OjA2OjQ0LjgwNFoiLCJ2ZW5kb3JzIjp7ImVuYWJsZWQiOlsiYzphYi10YXN0eSIsImM6YWNhc3QtQ2M3MmNoWHAiLCJjOmFjcG0tSkIzNEJicmQiLCJjOmFwbG96ZS14NDdKZlhVSyIsImM6YXBwc2ZseWVyLXdETmJrQ2I2IiwiYzphdGludGVybmUtY1dRS0hlSloiLCJjOmJlb3AtdEdSV0hIYUYiLCJjOmJpbmctYWRzIiwiYzpjaGFydGJlYXQiLCJjOmNsaWNraW50ZXh0IiwiYzpkYWlseW1vdGlvLWhyRldwVEtDIiwiYzpzcXVhZGF0YS1lYXN5ZG1wIiwiYzpkeW5hbWljbWEtNzhlUmpLY1YiLCJjOmZhY2Vib29rLXRrQWpXM2k2IiwiYzpmbG91cmlzaC14bnhZTVo2TiIsImM6Z2VuaWFsbHktWjhiUmhxRW4iLCJnb29nbGUiLCJjOmdvb2dsZW1hcC1kRDdDWkNKZyIsImM6aW5mb2dyYW0tcXFoZDNoZk0iLCJjOmluc3RhZ3JhbS1MWmthNlI0NCIsImM6aW5zdGFncmFtIiwiYzpqdXh0YXBvc2UtTVpnSEZmWXgiLCJjOm1hcHM0bmV3cy0zWDlWUVc3NiIsImM6bWljcm9zb2Z0IiwiYzptaWNyb3NvZnQtYW5hbHl0aWNzIiwiYzptaWNyb3NvZnQtb25lZHJpdmUtbGl2ZS1zZGsiLCJjOm15ZmVlbGJhY2siLCJjOm9uZXNpZ25hbC1uS1hmQ3BZcyIsImM6cGxheWJ1enotamhKcUNBeEsiLCJjOnBvb29sLWV3WjY2ZWdmIiwiYzpwb29vbC1WeWhDaXQ3TiIsImM6cHVic3RhY2stV3JDYkV5Y00iLCJjOnNob3J0aGFuZC02R01GSzJCVyIsImM6c291bmRjbG91ZC14S01ER1g0TCIsImM6c3RvcnltYXAtTFpwaWQ3WXEiLCJjOnN1YnNjcmliZS1abXdVZVVDUCIsImM6dGltZWxpbmVqLWU2WFJDS1VYIiwidHdpdHRlciIsImM6dHdpdHRlci1pNnhkQjJyVCIsImM6dmltZW8tSGlNcnpFUEgiLCJjOnlvdXR1YmUiLCJjOnlvdXR1YmUtQ2VWemptSlAiXX0sInB1cnBvc2VzIjp7ImVuYWJsZWQiOlsicmVzZWF1eHNvLTlLYmpid05oIl0sImRpc2FibGVkIjpbImdlb2xvY2F0aW9uX2RhdGEiLCJkZXZpY2VfY2hhcmFjdGVyaXN0aWNzIiwiYXVkaWVuY2VtLXhlZGVVMmdRIiwiY29udGVudXN2LWhGVDhpZmRSIiwiY29udGVudXNjLXBYQVZVdDhyIiwibWVzdXJlZGEtaDdHUWVyclQiXX0sInZlcnNpb24iOjIsImFjIjoiQ25XQUdBRmtCSllLZFFBQS5BRm1BQ0FGayJ9)
+privacy.ledauphine-presse.fr##+js(trusted-set-cookie, euconsent-v2, CPzBFAAPzBFAAAHABBENDYCgAAAAAAAAAAAAJNFB_W_fD2Ni-35_avt0aQ1dwVC_6-UxDgKZB4kFyRpEMKwX3mAKKFXgpKAKGBYEsUZAIQBlHCHEDECwQIERLzHMIAEQJQIAJqJEgFERAkJQCBpZHwMACAIQgHRWATFIiB-HaBroyfhEMaC0AUBQ4AonhMTPAoSdwXCkg7uaHIgIImgFASBAIoYMEEEEBlTkFABAAAkAAABJSADAAEQUCUAGAAIgoDoAMAARBQIQAYAAiCgEgAwABEFARABgACIKAyADAAEQUA0AGAAIgoCoAMAARBQA.YAAAAAAAAAAA)
+
+! https://www.canva.com/ - Functionality
+canva.com##+js(trusted-set-cookie, CTC, eyJBIjoxNjk5MzUwNzAxODY1LCJCIjoxNjk5MzUwNzAxODY1LCJEIjpmYWxzZSwiRSI6dHJ1ZSwiRiI6ZmFsc2UsIkciOmZhbHNlLCJIIjpmYWxzZSwiSSI6Wy01ODM2OSwyNjEyODddLCJKIjpbOTgzNTg1LDMwNzJdfQ==)
+
+! https://thegreencity.gr/ - Preferences
+thegreencity.gr##+js(trusted-set-cookie, the_green_city, [%22preference%22%2C%22technical%22])
+
+! https://www.ohra.nl/ - Social
+ohra.nl##+js(trusted-set-cookie, consentCookie, %7B%22id%22%3A%22d28cc3d1-22a4-4137-9477-3e82b6936e01%22%2C%22permissions%22%3A%7B%22social%22%3Atrue%2C%22personalization%22%3Afalse%2C%22tracking%22%3Afalse%7D%2C%22createdAt%22%3A%222023-10-13T02%3A54%3A20.54Z%22%7D, , , reload, 1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20065
+||cdn.tinypass.com/api/piano.js$script,domain=corriere.it
+corriere.it,gazzetta.it,oggi.it##+js(trusted-click-element, .privacy-cp-wall #privacy-cp-wall-accept)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20077
+cmp.sky.it##+js(trusted-click-element, button[aria-label="Continua senza accettare"])
+
+! https://sandberg.world/en-us/product/bluetooth-office-headset-pro-1#!tab=videos - Necessary + Functional to get videos to work
+sandberg.world##+js(trusted-set-cookie, cookieconsent_dismissed, 1%7C%7C1%7C%7Crt2d2f69if8tq2hiq7dmjejrd2, 1year, , reload, 1)
+
+! https://www.tennisassa.fi/ - Necessary + social media
+tennisassa.fi##+js(trusted-click-element, 'label[class="input-choice__label"][for="CookiePurposes_1_"], label[class="input-choice__label"][for="CookiePurposes_2_"], button.js-save[type="submit"]')
+
+! https://github.com/uBlockOrigin/uAssets/issues/20117
+everyeye.it##+js(trusted-set-cookie, OptanonAlertBoxClosed, $currentDate$)
+everyeye.it##html > body:style(margin-top: 45px !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20154
+@@||cdn.cookielaw.org/scripttemplates/otSDKStub.js$script,domain=breitbart.com
+breitbart.com##+js(trusted-set-cookie, OptanonConsent, groups=C0003%3A1%2CC0002%3A1%2CC0001%3A1%2CC0005%3A1%2CC0004%3A1, 1year)
+
+! https://www.saniweb.nl/ - Video embed
+saniweb.nl##+js(trusted-set-cookie, cookiepreferences, necessary#true|marketing#true)
+
+! https://www.uswitch.com/ - Functionality + Social
+uswitch.com##+js(trusted-set-cookie, cookie-preferences, '{"performance":false,"marketing":false,"functionality":true,"social":true,"essential":true}')
+
+! Necessary + social
+ferienpiraten.ch,holidaypirates.com,piratinviaggio.it,travelpirates.com,urlaubspiraten.at,urlaubspiraten.de,vakantiepiraten.nl,viajerospiratas.es,voyagespirates.fr,wakacyjnipiraci.pl##+js(trusted-set-cookie, hp__gdpr_consent, !demographics=false!googletagmanager=false!facebook=true!twitter=true!instagram=true!youtube=true!optimize=false!helphero=false!fbpixel=false!iterable=false!kayakWidget=false!vimeo=true!lastminute=false!apple=true!google=true!hotjar=false!getYourGuide=false!gad=false, 1year)
+
+! https://www.formula1.com/en/latest/video.qualifying-highlights-2023-united-states-grand-prix.1780316731645839696.html - Functional for videos
+formula1.com##+js(trusted-set-cookie, consentUUID, b2d83b78-26f0-4f90-b370-0380404c660a_24_27)
+
+! Necessary + Marketing - for maps, sample page: rhein-ruhr.stadtmobil.de
+stadtmobil.de##+js(trusted-set-cookie, CookieConsent, {stamp:%27Uv9YOAVP5djCBw71lxhE4rNAfTObaGck2Sn3rKWf9dPCYpqcWvAlpA==%27%2Cnecessary:true%2Cpreferences:false%2Cstatistics:false%2Cmarketing:true%2Cmethod:%27explicit%27%2Cver:1}, 1year)
+
+! https://www.coinbase.com/ - Functional
+coinbase.com##+js(trusted-set-cookie, cm_default_preferences, {%22consent%22:[%22necessary%22%2C%22functional%22]%2C%22region%22:%22DEFAULT%22})
+coinbase.com##+js(trusted-set-cookie, cm_eu_preferences, {%22consent%22:[%22necessary%22%2C%22functional%22]%2C%22region%22:%22EU%22})
+
+! https://github.com/uBlockOrigin/uAssets/issues/20274
+cmpv2.fanpage.it##+js(trusted-set-local-storage-item, euconsent, CP0N6vnP0N6wKA6AoBENDbCsAP_AAH_AABCYJtNV_H__bW9r8X7_aft0eY1P9_j77uQxBhfJE-4F3LvW_JwXx2E5NF36tqoKmRoEu3ZBIUNlHJHUTVmwaogVryHsakWcpTNKJ6BkkFMRM2dYCF5vm4tjeQKY5_p_d3fx2D-t_dv839zzz8VHn3c5f--0-PCdU5-9Dfn9fRfb-9IP9_78v8v8_l_rk2_eT13_pcvr_D--f_87_XW-9wTYAJMNC4gC7AgJCbQMIoEAIwrCAigUAAAAkDRAQAuDAp2BgEusBEAIEUABwQAhABRkACAAACABCIAJAigQAAQCAQAAgAQCAQAEDAAKACwEAgABAdAxTCgAUCwgSIyIhTAhCgSCAlsqEEoKhBXCAIssAKARGwUACAAARWAAICxeAwBICVCQQJdQbQAAEACAUUoVCCT0wADgkbLUHgiAAAAA.YAAAAAAAAAAA)
+cmpv2.fanpage.it##+js(trusted-set-local-storage-item, fpconsent, NTglMkM0MCUyQzElMkMxNjk4MjE5MTEx|JTA2JTAxJTAxJTA1JTAxJTE2JTAxJTE1JTAxJTA0JTAxJTA4JTAx|JTAw)
+! https://github.com/uBlockOrigin/uAssets/issues/20371
+cmpv2.geopop.it##+js(trusted-set-local-storage-item, euconsent, CP0N6vnP0N6wKA6AoBENDbCsAP_AAH_AABCYJtNV_H__bW9r8X7_aft0eY1P9_j77uQxBhfJE-4F3LvW_JwXx2E5NF36tqoKmRoEu3ZBIUNlHJHUTVmwaogVryHsakWcpTNKJ6BkkFMRM2dYCF5vm4tjeQKY5_p_d3fx2D-t_dv839zzz8VHn3c5f--0-PCdU5-9Dfn9fRfb-9IP9_78v8v8_l_rk2_eT13_pcvr_D--f_87_XW-9wTYAJMNC4gC7AgJCbQMIoEAIwrCAigUAAAAkDRAQAuDAp2BgEusBEAIEUABwQAhABRkACAAACABCIAJAigQAAQCAQAAgAQCAQAEDAAKACwEAgABAdAxTCgAUCwgSIyIhTAhCgSCAlsqEEoKhBXCAIssAKARGwUACAAARWAAICxeAwBICVCQQJdQbQAAEACAUUoVCCT0wADgkbLUHgiAAAAA.YAAAAAAAAAAA)
+cmpv2.geopop.it##+js(trusted-set-local-storage-item, fpconsent, NTglMkM0MCUyQzElMkMxNjk4MjE5MTEx|JTA2JTAxJTAxJTA1JTAxJTE2JTAxJTE1JTAxJTA0JTAxJTA4JTAx|JTAw)
+
+! https://go-e.com/en/ - Functional
+go-e.com##+js(trusted-set-cookie, gdpr, {%22version%22:%221.0_tracking%22%2C%22options%22:{%22typo3%22:true%2C%22gdpr%22:true%2C%22openstreetmap%22:true%2C%22vimeo%22:true%2C%22youtube%22:true%2C%22recaptcha%22:true%2C%22googlemaps%22:true%2C%22tracking%22:false}})
+
+! https://www.rts.ch/ - except Google Analytics
+rts.ch##+js(trusted-set-cookie, rts-consent-cookie, essential%2CcustomCategory-37e8dfb9-5b08-4500-819f-f838d37a030b%2Cfunctional%2CcustomCategory-4a45356b-968a-4bf0-b5ec-ed8d474eb0fe%2CcustomCategory-c983c522-acc5-4cd4-bc4c-e6d79f26c390%2CcustomCategory-4445f83c-5f4e-4c1d-b78f-b4627fb3ef21%2CcustomCategory-eae5fd82-bf1d-4cd1-82ac-a602c1b179b2, , , reload, 1)
+rts.ch##+js(trusted-set-local-storage-item, uc_user_interaction, true)
+rts.ch##+js(trusted-set-local-storage-item, uc_settings, uc_settings)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20302
+multiplayer.it##+js(trusted-set-cookie, euconsent-v2, CPtgasAPtgasAAGABCENDECgAAAAAAAAAApAAAAAAAAA.YAAAAAAAAAAA, 1year)
+multiplayer.it##+js(trusted-set-cookie, _iub_cs-495815, %7B%22timestamp%22%3A%222023-10-26T10%3A24%3A25.058Z%22%2C%22version%22%3A%221.48.0%22%2C%22consent%22%3Atrue%2C%22id%22%3A495815%2C%22cons%22%3A%7B%22rand%22%3A%2287691d%22%7D%7D, 1year)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20299
+ansa.it##+js(trusted-set-cookie, euconsent-v2, CPtgasAPtgasAAGABCENDECgAAAAAAAAAApAAAAAAAAA.YAAAAAAAAAAA, 1year)
+ansa.it##+js(trusted-set-cookie, _iub_cs-15665353, %7B%22timestamp%22%3A%222023-10-26T10%3A24%3A25.058Z%22%2C%22version%22%3A%221.48.0%22%2C%22consent%22%3Atrue%2C%22id%22%3A495815%2C%22cons%22%3A%7B%22rand%22%3A%2287691d%22%7D%7D, 1year)
+
+! Necessary + Social
+zeit.de##+js(trusted-set-cookie, consentUUID, 30fa6cf5-9b2a-40b5-a14f-183629a4f9e7_25)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2054
+f1racing.pl##+js(trusted-click-element, [href="/x-set-cookie/"])
+
+! https://www.starcar.de/ - External media
+starcar.de##+js(trusted-set-cookie, privacy_consent, %7B%22essentials%22%3Atrue%2C%22statistics%22%3Afalse%2C%22marketing%22%3Afalse%2C%22maps%22%3Atrue%2C%22youtube%22%3Atrue%7D)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20344
+!#if env_mobile
+dailymail.co.uk##+js(trusted-set-cookie, AndroidExpiry, AndroidExpiry, 1year)
+!#endif
+
+! https://www.hubsite365.com/en-eu - 3rd-party content
+hubsite365.com##+js(trusted-set-cookie, hs365-accepted-cookies, [{%22description%22:%22Enable%20you%20to%20navigate%20and%20use%20the%20basic%20functions%20and%20to%20store%20preferences.%22%2C%22key%22:%22technically_required%22%2C%22label%22:%22Technically%20necessary%20cookies%22%2C%22isMandatory%22:true}%2C{%22description%22:%22Display%20third%20party%20content%20like%2C%20for%20example%2C%20YouTube%20videos%20or%20twitter%20feeds.%22%2C%22key%22:%223rdParty%22%2C%22label%22:%22Third-Party%20Content%22}])
+
+! https://www.notion.so/ - Functional
+notion.so##+js(set-cookie, notion_check_cookie_consent, true)
+notion.so##+js(trusted-set-cookie, notion_cookie_consent, '{%22id%22:%2282a41727-b652-4011-a0a4-13a4499c039a%22%2C%22permission%22:{%22necessary%22:true%2C%22preference%22:true%2C%22performance%22:false%2C%22targeting%22:false}%2C%22policy_version%22:%22v8%22}')
+
+! 1001games and it's sister domains. Necessary + Game Publishers
+! Sample: https://www.1001games.com/adventure/fireboy-and-watergirl-1-forest-temple
+1001games.com,1001hry.cz,1001jeux.fr,1001jocuri.ro,1001jogos.com.br,1001jogos.pt,1001pelit.com,1001spiele.de,elkspel.nl,giochixl.it,grajteraz.pl,isladejuegos.com,jatekokxl.hu,paixnidiaxl.gr,spelo.se,spillespill.no,spilxl.dk##+js(trusted-set-cookie, eupubconsent-v2, CP0tkXAP0tkXAAcABBENAXEwAAAAAAAAAAYgAAAAAAHBAHwAAQADQAOAA8ADIALAAjgBQACuAFsARYAlwBfQDUANUAc4A8gB8gEDAIOARwAn8BQwFFALsAZwA3gB6AD5AIbAReAj0BIoCSwErAJlgTYBNoClwFPgLCgWIBYoC6gF3ALyAYFAw8DEAGLQMhAyMBkwDPwGhANGAaYA1MBroDaAG3AN0AcEA6gB2ADuoHkgeUA96B8gHyhIHAACAAFwAUABUADkAHgAgABhADIANQAeABMACqAG8APQAhIBDAESAI4ASwAmgBSgDDAGWANkAd8A9gD4gH2AfoBAICLgIwARoAlIBQQCoAFXALmAYoA2gBuADiAJEATsAocBR4CkQFNgLYAXIAu8BeYDBgGGgMkAZOAzmBrAGsgN1AcmA5cB44YCgAAEAAwADgAKAAigBOAFgAMIAeAB6AEIAI4ATAAqABXgC2ALkAcwB3AEMAIkARYAlwBSACtAGcANSAbIBwADjAHOAPIAfgBAACMAEmAJ0AUUApcBXgFfALsAX4AzgBsgDbAG8AOOAc0A6gB2QD1AHyAP2AhIBDYCLwEdQJEAkUBJcCWgJeATYAnYBQkCkQKSAU2AsUBaIC5AF0ALuAXoAwIBh4DHoGRgZIAycBnIDPAGhANMga0BrsDcgN0AdQA7gB7wgCcAAEAAwADgAKAAigBOAFgAMIAeAB6AEIAI4ATAArgBbgDmAO4AhgBEgCLAEuAKQAVoAzgBqQDZAOAAcYA5wB5AD5AH4AQAAjABJgCdAFFAKXAV4BXwC7AF-AM4AagA2wBvADjgHNAOyAeoA-QB-wEJAIbAReAjuBIgEigJLgS0BLwCbAE7AKEAUkApuBYgFigLRAXIAugBdwC9AGBAMPAY8AyQBk4DOQGhANMga0BroDdAHUAO4Ae8KARgAigBUAFgAQgAmABcAEcAKQAZQA1ABwAEcAKLAV4BXwC7AF-AM4AbwA5oB-wEegJFAS8AmwBYoC0QFsALuAXoAw8BnIDPAGhQNaA14BuQD3hgCAAEUAKgAsACEAEwARwApABqADgAI4AUWArwCvgF2AL8AZwA3gBzQD9gI9ASKAl4BNgC0QFsALuAXoAw8BnIDPAGhQNaA10B7wD4hwF6AAwAEQAOAA8AC4AGQAWAA5AB8AEcAJoAUAArgBbAC-AGgAQgAiwBHACXAFIALIAXwAwoBmgGcANQAc4A7gB5AD5gIAAgcBBwEIAI4ATiAnwCfgFFAKWAVAArIBdgC9AGcAN4AccA6QB6AD5AIbAREAioBHoCRQElgJWATEAmWBNgE2gKQAUmApcBVQCxAFlALUAWzAugC6gF3AL6AYEAxABiYDFgGQgMmAZeAz8BoQDRoGmAaaA1OBroGwANoAbcA48BywDnwHWAOwAdxA8kDygHpAPeAfEA-UB9oD8R0EcABcAFAAVAA5AB8AIAAXQAwADUAHgATAAqwBcAF0AMQAZgA3gB6gEMARIAlgBNACjAFKAMMAZQA0QBsgDvAHtAPsA_QB_wEWARgAlIBQQCrgFiALmAXkAxQBtADcAHEAOoAi8BIgCVAEyAJ2AUOAo-BTQFNgLFAWwAuABcgC7QF3gLzAYMAw0BjwDJAGTgMqAZYAzkBogDVQGsAN1AcWA5MBy4DxwH1kAFwACAAMgAsACaAF8ANAApABZAC-AGcANQAc4BHACcAE-gKGAooBSwCsgFiALSAXYA3gBzQD0AI9ASLAmwCbQFJgLEgWyBbQC7gF5AMCAYlAzwDPwGhANTAa6A2ABtwDnwHRgOwgeSB5QD3gHxEIEAACwAKAAuABiAEwAKoAXAAxABvAD0AI4Ad4A_wCUgFBAKuAXMAxQBtADqAJUAU0AsUBaIC4AFyAMnAZyA0QBqoDgAHjkgGIABgAHAAXAAyACwAHIARwAmgBUAC-AGQANoAhABSACyAGdANQA1QB3AEAAI4AT6ApoCoAFZALSAXYA3gB8gEVAI6AR6AkUBKwCWoE2ATaApMBVICxAFlALuAYsAyyBngGfgNCAa6A2ABuQDsAHlAPeJQHQAEAALAAoAByAGAAYgA8ACYAFUALgAYoBDAESAI4AUYA2QB3gD8AKuAYoA6gCLwEiAKPAWKAtgBeYDJwGcgNYAcAUgYgALgAoACoAHIAPgBBADAANQAeABMACkAFUAMQAZoBDAESAKMAUoAygBogDZAHfAPwA_QCLAEYAJSAUEAq4BcwC8gGKANoAbgBF4CRAE7AKHAU2AsUBbAC4AFyALtAXmAw0BkgDJwGcwNYA1kBuoDkwHLgPHKAQAALgAZABYADkAI4ATQAqABfADIAG0AQgAiwBHACZAFIALIAXwAwgBnQDUANUAc4A7oB8gH2AQAAjgBPgChgFLgKyArYBYoC6gLsAa8A3gB2wD0AH_AR0Aj0BIoCSwExQJsAm0BSACnwFiALoAXcAvIBfQDAgGLAMmgZ4Bn4DQgGiQNSA1OBroGwAOCAdgA7gB5QD3gHxAPlAA.YAAAAAAAAAAA, 1year)
+1001games.com,1001hry.cz,1001jeux.fr,1001jocuri.ro,1001jogos.com.br,1001jogos.pt,1001pelit.com,1001spiele.de,elkspel.nl,giochixl.it,grajteraz.pl,isladejuegos.com,jatekokxl.hu,paixnidiaxl.gr,spelo.se,spillespill.no,spilxl.dk##+js(trusted-set-cookie, OptanonConsent, groups=C0001%3A1%2CC0002%3A0%2CC0005%3A0%2CC0004%3A0%2CC0048%3A1%2CC0030%3A1%2CC0046%3A1%2CC0032%3A1%2CC0033%3A1%2CC0057%3A1%2CC0054%3A1%2CC0056%3A1%2CC0043%3A1%2CC0029%3A1%2CC0055%3A1%2CC0026%3A1, 1year)
+
+! https://github.com/easylist/easylist/issues/17563
+stergioufamily.gr##+js(trusted-set-cookie, Vendd:AcceptedCookieConsents,FunctionalityCookies=-29&StatisticsCookies=-30&MarketingCookies=-31)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20485
+viss.nu##+js(trusted-set-cookie, sv-cookie-consent, true, , , reload, 1)
+
+! music.amazon. co.uk|de|fr cookies
+! https://github.com/uBlockOrigin/uAssets/issues/20620
+music.amazon.*##+js(trusted-click-element, #dialogButton1)
+music.amazon.*###overlay:has([href*="privacyprefs/"])
+
+! digi24. ro cookies
+digi24.ro##+js(set-cookie, cmp_level, 15)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20551
+goed.at##+js(trusted-set-cookie, CookieConsent, {necessary:true%2Cpreferences:true%2Cstatistics:true%2Cmarketing:true%2Cmethod:%27explicit%27%2Cver:1}, 1year, , reload, 1)
+
+! cookies managed by trustarc
+consent-pref.trustarc.com##+js(trusted-click-element, .call)
+
+! https://www.elcomercio.es/ - Agree
+elcomercio.es##+js(trusted-click-element, #didomi-notice-agree-button)
+elcomercio.es##div[style*="z-index: 9999;"]:style(background-color: transparent !important;)
+elcomercio.es###didomi-notice:style(visibility: hidden !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20680
+highlights.legaseriea.it##+js(trusted-click-element, #cl-consent button[data-role="b_decline"])
+
+! _x13eucookie sites
+! Necessary
+babolat-tenis.pl,denonmarkabolt.hu,monocerus.pl,plastiflora.pl,s4home.pl,salonydenon.pl,vipera.com.pl,zdrowomania.pl##+js(trusted-set-cookie, _x13eucookie, '{"1":true,"2":false,"3":false,"4":false,"5":false,"6":false}')
+! Security
+avstore.pl,bednarek.sklep.pl,byinsomnia.com,foto-tip.pl,handloteka.net,hiprom.pl,meblewypoczynkowe.pl,plantica.pl,produkcjakartonow.pl,supportart.pl,yoclub.pl##+js(trusted-set-cookie, _x13eucookie, '{"1":true,"2":false,"3":false,"4":false,"5":true,"6":false}')
+! Other
+audioforum-berlin.de,salonydenon.cz##+js(trusted-set-cookie, _x13eucookie, '{"1":true,"2":false,"3":false,"5":false,"6":true}')
+
+! https://github.com/uBlockOrigin/uAssets/issues/20630
+makemytrip.com##+js(trusted-set-session-storage-item, opd, '"1"')
+
+! privacy-cp-wall sites - Accept
+sosfanta.com##+js(trusted-click-element, #privacy-cp-wall-accept)
+
+! https://alan.com/ - Accept
+alan.com##+js(trusted-set-local-storage-item, acceptedCookiesAt, $now$)
+
+! https://www.chrono24.com/magazine/ - Accept
+chrono24.*##+js(trusted-click-element, button[data-label="accept-button"], , 1000)
+chrono24.*##dialog.gdpr-layer
+
+! https://github.com/uBlockOrigin/uAssets/issues/20744
+! wetter.com##+js(trusted-click-element, #cmp-btn-accept, , 5000)
+! wetter.com###cmp-style-reset
+! wetter.com##body:style(overflow: auto !important)
+
+! sj.se cookies
+sj.se##+js(trusted-set-cookie, sj_consent_v1, '%7B%22consent%22%3A%7B%22PERSONALIZATION%22%3Afalse%2C%22MARKETING%22%3Afalse%7D%2C%22uuid%22%3A%22d599dc64-52b7-4dc7-bff3-1e18d5cebc1a%22%7D')
+
+! https://github.com/uBlockOrigin/uAssets/issues/20763
+youmath.it##+js(trusted-click-element, button#pt-accept-all)
+
+! https://omgevingsloketinzage.omgeving.vlaanderen.be/ - Accept
+omgevingsloketinzage.omgeving.vlaanderen.be##+js(trusted-set-cookie, vl-cookie-consent-cookie-consent-date, $now$)
+omgevingsloketinzage.omgeving.vlaanderen.be##+js(set-cookie, vl-cookie-consent-cookie-consent, true)
+omgevingsloketinzage.omgeving.vlaanderen.be##+js(set-cookie, vl-cookie-consent-functional, true)
+
+! https://warszawa.pip.gov.pl/ --- Niezbędne = Necessary, Media społecznościowe = Social media
+pip.gov.pl##+js(trusted-click-element, '[for="checkbox_niezbedne"], [for="checkbox_spolecznosciowe"], .btn-primary')
+
+! https://github.com/DandelionSprout/adfilt/issues/874#issuecomment-1819253985
+forbes.com##+js(trusted-click-element, [aria-labelledby="banner-title"] > div[class^="buttons_"] > button[class*="secondaryButton_"] + button)
+
+! https://www.snowandrock.com/ - Functional
+snowandrock.com##+js(trusted-set-cookie, consent_identifier, 16f69085-c6f2-42f6-a4cd-807b24a37c0b, , , reload, 1)
+snowandrock.com##+js(trusted-set-cookie, consent_setting, analytics%3A0%7Cfunctional%3A1%7Cmarketing%3A0)
+
+! racingnews365.com
+racingnews365.com##+js(trusted-set-cookie, __cmpcccu33611, aBP1oXvjgABbQABAAIABYADQAJgAXAA0AB4AEQAKAAXAA0gCAAIIASgAmwBWAFcALIAXgAwACHAFsAMcAaYA5AB2AD4AH6AQCAhQCFgEQgI4AjoBJACUAEwAKIAUcApIBSwCngFXALMAX4AwYBjgDIgGcANEAaUA3YBvgDogHbAPYAfoBAcCFwIYAQ8AiQBGACOQEegJGASSAksBKICVgE6gJ9AUGApQBT4CpAFUwKvArABXACvQFgQLDAsQBcIC8QF-AMoAZeAzUBnwDSQGqgNbAa8A2IBwQDiQHbAPLAe2BBwCaAFLwLAgWiAxxBoUGkgNsAbtA3iBvkDfoHBAOHAcUA4sByoDlgHLgOZQc8Bz0DoIHRwOlAdMA6eB1QDroHZAOzgdpA7iB4EDyIHlgPQAelA9YB7gD54H0QPuAffA_GB-YD9AH6gP_AgMBAkCBsEDoIJgQVggtBBiCDQEHAIPAQiAhGhCSEJcIUAhRBDCCGQEOwIeARAAiVBEwCKQEU4I8oSCBIMCQsEioJJ4SXBJeCTYEnQJRgSlAlNBKiCVYErIJXQUaAAoBdA)
+racingnews365.com##+js(trusted-set-cookie, __cmpconsent33611, CP1lmTAP1lmTAAfVnBFIAbEgAIAAAAAAAAigIjQBgBBgJVATOAuIB3IERgRGgDACDASqAmcBcQDuQIjAAA)
+! New solution when the next stable version becomes widely used. https://github.com/uBlockOrigin/uBlock-issues/issues/2971
+! All store information on device cookies
+! racingnews365.com##+js(trusted-click-element, '#cmpwrapper >>> .cmptxt_btn_settings, #cmpwrapper >>> [data-cmp-purpose="1"][aria-checked="false"], #cmpwrapper >>> .cmptxt_btn_save')
+! racingnews365.com###cmpwrapper
+! racingnews365.com##body.contentItem[style="overflow: hidden;"]:style(overflow: auto !important)
+
+
+! https://www.zdf.de/ - Functional + social
+zdf.de##+js(trusted-set-cookie, zdf_cmp_client, '{%22version%22:%22v1%22%2C%22iteration%22:1%2C%22consents%22:[{%22id%22:%22personalisierung%22%2C%22value%22:false}%2C{%22id%22:%22socialMedia%22%2C%22value%22:true}%2C{%22id%22:%22instagram%22%2C%22value%22:true}%2C{%22id%22:%22twitter%22%2C%22value%22:true}%2C{%22id%22:%22facebook%22%2C%22value%22:true}%2C{%22id%22:%22drittsysteme%22%2C%22value%22:true}%2C{%22id%22:%22erforderlich%22%2C%22value%22:true}%2C{%22id%22:%22erfolgsmessung%22%2C%22value%22:true}]}')
+
+! https://microbit.org/ - Functional
+microbit.org##+js(trusted-set-cookie, MBCC, %7B%22version%22%3A1%2C%22functional%22%3Atrue%2C%22analytics%22%3Afalse%7D)
+
+! https://www.coolstuff.de/ - Functional
+coolstuff.*##+js(trusted-set-cookie, ConsentStatus, %7B%22necessary%22%3Atrue%2C%22siteFeatures%22%3Atrue%2C%22statistics%22%3Afalse%2C%22marketing%22%3Afalse%7D, , , reload, 1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20840
+mediaset.it##+js(trusted-click-element, 'button#minf-privacy-open-modal-btn-id, button.iubenda-cs-close-btn')
+
+! https://github.com/uBlockOrigin/uAssets/issues/16943
+france24.com##+js(trusted-click-element, #didomi-notice-agree-button)
+
+! cookies
+primor.eu##+js(set-cookie, amcookie_allowed, 0)
+primor.eu##+js(trusted-set-local-storage-item, am-last-cookie-acceptance, $now$)
+ab.gr##+js(trusted-set-cookie, CookieConsent, 1.0.0.0.0)
+
+! Reject-all meteored sites
+tameteo.com,tempo.pt,yourweather.co.uk,meteored.cl,meteored.mx,tempo.com,ilmeteo.net,meteored.com.ar,daswetter.com##+js(trusted-set-cookie, euconsent-v2, CP2APYAP2APYADtACBDEAcEgAAAAAAAAACiQAAAAAAAA)
+tameteo.com,tempo.pt,yourweather.co.uk,meteored.cl,meteored.mx,tempo.com,ilmeteo.net,meteored.com.ar,daswetter.com##+js(set-cookie, euconsent-v2-addtl, 0)
+
+! https://www.glamour.com/story/cher-alexander-edwards-relationship-timeline ---- Functional for embeds
+glamour.com##+js(trusted-set-cookie, OptanonConsent, groups=C0003%3A0%2CC0002%3A0%2CC0004%3A1%2CC0001%3A1%2CC0009%3A0, 1year)
+
+! repubblica.it accept and reload
+repubblica.it##+js(trusted-click-element, button.iubenda-cs-accept-btn, , 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21053
+calciomercato.com##+js(trusted-click-element, #cl-consent button[data-role="b_decline"])
+
+! https://www.rtl.de/ Required + Social
+rtl.de##+js(trusted-set-cookie, consentUUID, accee7b2-0121-45d7-aa34-4d4572577125_26)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21280
+fortune.com##+js(trusted-click-element, button.trustarc-agree-btn)
+fortune.com#@##teconsent
+
+! dpgmedia consentwall - Necessary + Social media
+! Sample pages: ad.nl,hln.be,trouw.nl
+cmp.dpgmedia.nl,cmp.dpgmedia.be,cmp.ad.nl,cmp.autotrack.nl,cmp.autoweek.nl,cmp.bd.nl,cmp.bndestem.nl,cmp.demorgen.be,cmp.deondernemer.nl,cmp.destentor.nl,cmp.ed.nl,cmp.gaspedaal.nl,cmp.gelderlander.nl,cmp.hln.be,cmp.humo.be,cmp.margriet.nl,cmp.nu.nl,cmp.qmusic.nl,cmp.stijlvol-wonen.com,cmp.trouw.nl,cmp.tubantia.nl,cmp.vtwonen.be,cmp.vtwonen.nl,cmp.pzc.nl,cmp.zozitdat.nl##+js(trusted-click-element, .pg-configure-button[title="Instellen"], , 500)
+cmp-sp.vrt.be##+js(trusted-click-element, button.message-button[title="Mijn instellingen beheren"], , 500)
+cmp-sp.vrt.be,cmp.dpgmedia.nl,cmp.dpgmedia.be,cmp.ad.nl,cmp.autotrack.nl,cmp.autoweek.nl,cmp.bd.nl,cmp.bndestem.nl,cmp.demorgen.be,cmp.deondernemer.nl,cmp.destentor.nl,cmp.ed.nl,cmp.gaspedaal.nl,cmp.gelderlander.nl,cmp.hln.be,cmp.humo.be,cmp.margriet.nl,cmp.nu.nl,cmp.qmusic.nl,cmp.stijlvol-wonen.com,cmp.trouw.nl,cmp.tubantia.nl,cmp.vtwonen.be,cmp.vtwonen.nl,cmp.pzc.nl,cmp.zozitdat.nl##+js(trusted-click-element, 'button[aria-checked="false"][aria-label^="Social"], button.sp_choice_type_SAVE_AND_EXIT', , 500)
+myprivacy.dpgmedia.nl,myprivacy.dpgmedia.be,ad.nl,autotrack.nl,autoweek.nl,bd.nl,bndestem.nl,demorgen.be,deondernemer.nl,destentor.nl,ed.nl,gaspedaal.nl,gelderlander.nl,hln.be,humo.be,margriet.nl,nu.nl,qmusic.nl,stijlvol-wonen.com,trouw.nl,tubantia.nl,vrt.be,vtwonen.be,vtwonen.nl,pzc.nl,zozitdat.nl##[title="SP Consent Message"]
+!#if ext_devbuild
+! Waits for 1.55 to be widely available
+! Clicking doesn't work on myprivacy.dpgmediagroup.net, reloading the page once redirects to dpgmediagroup.com, where clicking works
+myprivacy.dpgmediagroup.net##+js(set-cookie, dummy, 1, , reload, 1)
+myprivacy.dpgmedia.nl,dpgmediagroup.com,story.nl,veronicasuperguide.nl##+js(trusted-click-element, '#pg-shadow-host >>> #pg-configure-btn, #pg-shadow-host >>> #purpose-row-SOCIAL_MEDIA input[type="checkbox"], #pg-shadow-host >>> button#pg-save-preferences-btn')
+myprivacy.dpgmedia.nl,dpgmediagroup.com,story.nl,veronicasuperguide.nl###pg-modal
+!#endif
+
+! only essential cookies
+collectibles.mclaren.com##+js(trusted-set-cookie, user, '%7B%22necessary%22%3Atrue%2C%22preferences%22%3Afalse%2C%22statistics%22%3Afalse%2C%22marketing%22%3Afalse%7D')
+
+! https://tobis.de/blog/wuchtig-zaertlich-fulminant-das-sagen-presse-und-publikum-zu-ein-ganzes-leben || Mandatory + Embedded content
+tobis.de##+js(trusted-set-cookie, tarteaucitron, !tarteaucitron=true!website=true!analytics=false!regex_analytic=false!regex_ads=true!googletagmanager=false!facebookpixel=false!addtoanyshare=false!youtube=true, 1year)
+
+! manta.net analytics disabled, functional only
+manta.net##+js(trusted-set-local-storage-item, cookie_setting, '{"analytical_cookies":false,"functional_cookies":true}')
+
+! chip.de functional + social
+chip.de##+js(trusted-set-cookie, consentUUID, 5b13fb0e-6264-4bfa-bd0c-20f35140a634_26)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21412
+! quotidiano. net cookies + (FA / AA unbreaking videos https://www.quotidiano.net/video/parigi-arrestato-guru-di-atman-yoga-federation-e-altre-41-persone-jgbapomp)
+@@||cmp.pubtech.ai/*/pubtech-cmp-v2.js$script,from=ilrestodelcarlino.it|quotidiano.net|lanazione.it|ilgiorno.it|iltelegrafolivorno.it
+ilrestodelcarlino.it,quotidiano.net,lanazione.it,ilgiorno.it,iltelegrafolivorno.it##+js(trusted-click-element, #pubtech-cmp #pt-close)
+
+! https://www.lekarnaave.cz/ - Preference
+lekarnaave.cz##+js(trusted-set-cookie, cookiesSettings, %7B%22necessary%22%3Atrue%2C%22preferential%22%3Atrue%7D, , , reload, 1)
+
+! reject marketing/analytics
+algarvevacation.net##+js(set-cookie, acepta_cookie, acepta)
+algarvevacation.net##+js(trusted-set-cookie, acceptedCookies, '{"necessary":true,"functionallity":true,"analysis":false,"marketing":false}')
+! rejected third-party
+3sat.de##+js(trusted-set-cookie, 3sat_cmp_client, '{%22version%22:%22v1%22%2C%22iteration%22:1%2C%22consents%22:[{%22id%22:%22erforderlich%22%2C%22value%22:true}%2C{%22id%22:%22erfolgsmessung%22%2C%22value%22:true}%2C{%22id%22:%22personalisierung%22%2C%22value%22:false}%2C{%22id%22:%22socialMedia%22%2C%22value%22:false}%2C{%22id%22:%22twitter%22%2C%22value%22:false}%2C{%22id%22:%22instagram%22%2C%22value%22:false}%2C{%22id%22:%22facebook%22%2C%22value%22:false}%2C{%22id%22:%22drittsysteme%22%2C%22value%22:false}]}')
+3sat.de##+js(set-cookie, 3sat_cmp_configuration, true)
+! reject marketing/analytics
+crossnative.com##+js(trusted-set-cookie, cn-cc, %7B%22ccGoogleTagManager%22%3Afalse%2C%22ccGA4%22%3Afalse%2C%22ccSalesviewer%22%3Afalse%7D)
+
+! Necessary + Functional || Stay signed-in function broken: https://zoom.us/signin#/login
+zoom.us##+js(trusted-set-cookie, OptanonConsent, groups=C0004%3A0%2CC0003%3A1%2CC0002%3A0%2CC0001%3A1, 1year)
+zoom.us##+js(trusted-set-cookie, OptanonAlertBoxClosed, $currentDate$, 1year)
+zoom.us##+js(trusted-set-cookie, OnetrustActiveGroups, C0003C0001, 1year)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19785#issuecomment-1859656934
+gmx.*##+js(trusted-click-element, #onetrust-accept-btn-handler)
+
+! reject marketing/analytics
+trezor.io##+js(trusted-set-cookie, userConsent, %7B%22essential%22%3Atrue%2C%22analytical%22%3Afalse%2C%22preferential%22%3Atrue%7D)
+
+! rejected cookies
+rb.cz##+js(trusted-set-cookie, rwc, %7B%22data%22%3A%5B%7B%22code%22%3A%22analytics%22%2C%22permissions%22%3A%5B%5D%7D%2C%7B%22code%22%3A%22marketing%22%2C%22permissions%22%3A%5B%5D%7D%5D%2C%22common%22%3A%7B%22accepted%22%3A1703366235541%7D%7D)
+
+! Necessary + Marketing (to fix embedded content): https://mesta.net/selviytyjat-suomi-ohjelmasta-tutun-ramin-postaus-reissun-rankasta-luonteesta-nain-paljon-paino-putosi-vetaa-lahelle-painiuran-kovimpia-painonpudotuksia/
+mesta.net##+js(trusted-set-cookie, OptanonConsent, groups=C0001%3A1%2CC0005%3A1%2CC0002%3A0%2CC0004%3A0%2CC0003%3A0, 1year, , reload, 1, domain, mesta.net)
+mesta.net##+js(trusted-set-cookie, OptanonAlertBoxClosed, $currentDate$, 1year)
+
+! essential only
+mafu.de##+js(trusted-set-cookie, wmm-visitor_token, 4cb8860d-4194-4ab5-be04-10f9a26afaa8)
+! essential only
+paf.com##+js(trusted-set-cookie, cookieConsent, {%22essential%22:true%2C%22tracking%22:false%2C%22marketing%22:false})
+! Continue without agreeing, hide consent flash
+frandroid.com###didomi-host
+frandroid.com##+js(trusted-click-element, .didomi-continue-without-agreeing)
+! functional only, ad/analytics denied
+flip.gr##+js(trusted-set-cookie, consts, '{%22ad_storage%22:%22denied%22%2C%22analytics_storage%22:%22denied%22%2C%22functionality_storage%22:%22granted%22}')
+! necessarry
+andersiahotel.pl##+js(trusted-set-cookie, _CookiesPolicyAccepted, [%22necessary%22])
+! functional only (hide consent flash)
+nutri-plus.de##.acris-cookie-consent
+nutri-plus.de##.modal-backdrop
+nutri-plus.de##+js(trusted-click-element, #ccAcceptOnlyFunctional, , 4000)
+
+! necessary
+tether.to##+js(trusted-set-cookie, user_preferences, '{"necessary":"on","marketing":"off","analytics":"off","preferences":"off","unclassified":"off"}')
+
+! All cookies, can't type login credentials if cookies not accepted. Sample link: https://myapps.paychex.com/landing_remote/login.do?lang=en
+login.flex.paychex.com##+js(trusted-set-local-storage-item, cookieNotification, '{"value":"1"}')
+
+! essential only
+med.uni-rostock.de##+js(trusted-set-cookie, umr-data-consent, '{%22essential%22:true%2C%22functional%22:null%2C%22statistics%22:false%2C%22marketing%22:false}')
+
+! functional
+advalvas.vu.nl##+js(trusted-set-cookie, wpsaurus_cookie_banner_plugin, functional)
+
+! Don't allow 3rd-party sharing checkbox, hide popup
+aa.com,americanairlines.*##.aa_optoutmulti-cookie-policy:style(visibility: hidden !important;)
+aa.com,americanairlines.*##+js(trusted-click-element, button.optoutmulti_button, , 2000)
+
+! JW Player/Twitter
+chron.com,greenwichtime.com,houstonchronicle.com,mysanantonio.com,seattlepi.com,sfchronicle.com,sfgate.com,thetelegraph.com,timesunion.com##+js(trusted-set-cookie, _consent_cookie, '{"services":["jwp","twitter"]}')
+
+! https://github.com/uBlockOrigin/uAssets/issues/21749
+programme-tv.net##+js(trusted-click-element, button[title="Accepter"])
+
+! hide banner, allow embeeded social
+24ur.com##.cookies
+24ur.com##+js(trusted-set-cookie, cookies_accept, 'local,third')
+
+! functional only
+hashop.nl##+js(trusted-set-cookie, cookie_preference, functional)
+
+! reject analytics/targeting
+greencaffenero.pl##+js(trusted-set-cookie, nero_consents, %7B%22analytics%22%3Afalse%2C%22targeting%22%3Afalse%7D)
+
+! https://www.tredz.co.uk/.SiS-800ml-Water-Bottle-2-Pack_255027.htm allow reviews refuse tracking
+tredz.co.uk##+js(trusted-set-cookie, OptanonAlertBoxClosed, $currentDate$, 1year)
+tredz.co.uk##+js(trusted-set-cookie, OptanonConsent, groups=C0001%3A1%2CC0002%3A0%2CC0003%3A1%2CC0004%3A0)
+
+! https://getdigitalradio.com/ - Functionality
+getdigitalradio.com##+js(trusted-set-cookie, dsm-cookie-preferences, {%221%22:true%2C%222%22:true})
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/170285#issuecomment-1884952884
+vg.no##div[id^="sp_message_container_"]
+cmp.vg.no##+js(trusted-click-element, .btns-container > button[title="Tilpass"])
+cmp.vg.no##+js(trusted-click-element, .message-row > button[title="Avvis alle"], , 2000)
+
+! Allow everything so that page functions work properly, such as chat and commenting
+sap.com##+js(trusted-set-cookie, notice_gdpr_prefs, '0,1,2::implied')
+sap.com##+js(trusted-set-cookie, notice_preferences, 2:)
+sap.com##+js(trusted-set-cookie, cmapi_cookie_privacy, 'permit 1,2,3')
+
+! https://github.com/uBlockOrigin/uAssets/issues/21948
+movieplayer.it##+js(trusted-click-element, button.iubenda-cs-accept-btn)
+@@||iubenda.com^$3p,domain=movieplayer.it
+
+! https://github.com/uBlockOrigin/uAssets/issues/21954
+huffingtonpost.it,lastampa.it##+js(trusted-click-element, .iubenda-cs-visible .iubenda-cs-accept-btn)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21955
+ilsecoloxix.it##+js(trusted-click-element, .iubenda-cs-visible .iubenda-cs-accept-btn)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20091#issuecomment-1890759168
+cdn.privacy-mgmt.com##+js(trusted-click-element, button[title="Accept all"])
+
+! refuse cookies
+oxxio.nl##+js(set-cookie, privacyConsent_version, 1, , reload, 1)
+oxxio.nl##+js(set-cookie, privacyConsent, false)
+oxxio.nl##+js(trusted-set-cookie, qubitconsent, Declined)
+oxxio.nl##+js(trusted-set-cookie, qubitconsent_version, 2.0.0)
+oxxio.nl##+js(trusted-set-cookie, privacyConsent_type, explicit)
+
+! https://github.com/uBlockOrigin/uAssets/issues/22002
+geopop.it,fanpage.it##+js(trusted-click-element, '.gdpr-btn.small-right, .thirdlayer .gdpr-btn-lbl')
+
+! reject pref/analsis/behavioral
+solvia.es##+js(trusted-set-local-storage-item, solvia-consents, '{"tec":true,"pers":false,"ana":false,"publi":false}')
+! reject marketing/person/stats
+krasa.cz##+js(set-local-storage-item, gdpr-done, true)
+krasa.cz##+js(trusted-set-local-storage-item, cookiesSettings, '{"remarketing":false,"personalisation":false,"statistics":false}')
+
+! removed version check, deny functional/marketing/advertising
+ouraring.com##+js(trusted-set-cookie, tracking-preferences, '{%22destinations%22:{%22Amplitude%22:false%2C%22Braze%20Cloud%20Mode%20(Actions)%22:false%2C%22Braze%20Web%20Mode%20(Actions)%22:false%2C%22FullStory%22:false%2C%22Hindsight%22:false%2C%22Impact%20Partnership%20Cloud%22:false%2C%22Oura%20Marketing%20Id%20Middleware%20(Oura)%22:false%2C%22Statsig%22:false%2C%22Visual%20Tagger%22:false%2C%22Webhooks%22:false%2C%22Facebook%20Conversions%20API%20(Actions)%22:false%2C%22Google%20Tag%20Manager%22:false%2C%22Snap%20Conversions%20Api%22:false}%2C%22custom%22:{%22functional%22:false%2C%22marketing%22:false%2C%22advertising%22:false}}')
+
+! essential only
+seb.lv,seb.lt,seb.ee##+js(trusted-set-cookie, SEBConsents, '%7B%22version%22%3A%222%22%2C%22consents%22%3A%7B%22mandatory%22%3Atrue%2C%22statistical%22%3Afalse%2C%22marketing%22%3Afalse%2C%22simplified_login%22%3Atrue%7D%7D')
+
+! https://github.com/uBlockOrigin/uAssets/issues/22075
+faz.net##+js(trusted-set-cookie, consentUUID, 8f037acf-4f70-48de-af04-de7380df79ce_27)
+
+! reject all
+uphold.com##+js(trusted-set-cookie, eupubconsent-v2, CP4mi7gP4mi7gAcABBENAjEgAAAAAAAAACiQAAAAAAAA.YAAAAAAAAAAA)
+uphold.com##+js(trusted-set-cookie, OptanonAlertBoxClosed, $currentDate$, 1year)
+uphold.com##+js(trusted-set-cookie, OptanonConsent, groups=C0001%3A1%2CC0002%3A0%2CC0003%3A0%2CC0004%3A0%2CV2STACK42%3A0, 1year)
diff --git a/uAssets/filters/annoyances-others.txt b/uAssets/filters/annoyances-others.txt
new file mode 100644
index 0000000..31796cd
--- /dev/null
+++ b/uAssets/filters/annoyances-others.txt
@@ -0,0 +1,7274 @@
+! Title: uBlock filters – Other Annoyances
+! Last modified: %timestamp%
+! Expires: 7 days
+! Description: |
+! Filters optimized for uBlock Origin, to be used with EasyList's
+! and/or Adguard's "Other Annoyances" list(s)
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+! Homepage: https://github.com/uBlockOrigin/uAssets
+! Forums: https://github.com/uBlockOrigin/uAssets/issues
+
+mimaletadepeliculas.blogspot.com##+js(aopr, document.oncontextmenu)
+mimaletadepeliculas.blogspot.com##+js(acs, document.onselectstart)
+
+pelispedia.*##+js(aopw, document.oncontextmenu)
+pelispedia.*##+js(ra, oncontextmenu)
+
+cine.to##+js(aopr, oncontextmenu)
+
+desbloqueador.*##+js(aopr, document.oncontextmenu)
+
+megapastes.com##+js(aopr, document.oncontextmenu)
+megapastes.com##+js(aopr, document.onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1171
+weather.com##+js(aopr, _sp_._networkListenerData)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1343
+! https://github.com/uBlockOrigin/uAssets/issues/1879
+agar.io##+js(aopw, hasAdblock)
+@@||imasdk.googleapis.com/js/sdkloader/outstream.js$script,domain=agar.io
+agar.io###advertisement
+
+! https://github.com/uBlockOrigin/uAssets/issues/1445
+wings.io##+js(aopr, hasAdblock)
+wings.io###mpu-top
+
+! https://github.com/uBlockOrigin/uAssets/issues/1446
+brutal.io###mpu-top
+brutal.io##+js(set, hasAdblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1447
+starve.io###trevda
+
+! https://github.com/uBlockOrigin/uAssets/issues/1454
+surviv.io##+js(aopw, adBlockDetected)
+surviv.io###ad-block-left
+
+! https://github.com/uBlockOrigin/uAssets/issues/1453
+@@||s0urce.io^$ghide
+s0urce.io##+js(aeld, /^(contextmenu|copy)$/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1450
+@@||mope.io^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/933
+! https://github.com/easylist/EasyListHebrew/issues/332
+||holyclock.com^$3p
+||shomershabes.com^$3p
+||shomershabes.co.il^$3p
+
+! dicionariocriativo.com.br anti-adblock messages
+! https://github.com/uBlockOrigin/uAssets/issues/3620
+dicionariocriativo.com.br##.usingblock
+dicionariocriativo.com.br##+js(aopr, getSelection)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1582
+! https://github.com/jspenguin2017/uBlockProtector/issues/974
+! https://github.com/NanoMeow/QuickReports/issues/8
+! https://www.reddit.com/r/uBlockOrigin/comments/9tj2zp/help_to_get_past_this_adblocker_block/
+! https://forums.lanik.us/viewtopic.php?f=62&t=43097
+! https://github.com/NanoMeow/QuickReports/issues/1382
+! https://github.com/NanoMeow/QuickReports/issues/1528
+! https://github.com/uBlockOrigin/uAssets/issues/6517
+! https://github.com/NanoMeow/QuickReports/issues/3246
+al.com,allkpop.com,calendarpedia.co.uk,ccn.com,cleveland.com,comicsands.com,duffelblog.com,gamepur.com,gamerevolution.com,interestingengineering.com,keengamer.com,listenonrepeat.com,mandatory.com,mlive.com,musicfeeds.com.au,newatlas.com,pgatour.com,readlightnovel.org,secondnexus.com,sevenforums.com,sport24.co.za,superherohype.com,thefashionspot.com,theodysseyonline.com,totalbeauty.com,westernjournal.com##+js(aopr, __cmpGdprAppliesGlobally)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1727
+jigidi.com##body:style(padding-right: 0px !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1734
+marapcana.*##+js(acs, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1917
+dragcave.net##+js(nostif, adsbygoogle, 2000)
+
+! https://forums.lanik.us/viewtopic.php?f=91&t=40459
+impots.gouv.fr##+js(set, PASSER_videoPAS_apres, 0)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1978
+@@||publico.pt^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/1976
+gay69.stream##+js(aopr, disableSelection)
+gay69.stream##+js(aopw, nocontext)
+gay69.stream##.unselectable:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! techonthenet warning anti adb
+techonthenet.com##+js(set-cookie, sabl, 1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2044
+pinterest.*##[data-test-giftwrap]
+pinterest.*###desktopWrapper:style(position: static !important;)
+pinterest.*##.gridCentered:style(margin-top: auto !important;)
+! https://github.com/uBlockOrigin/uAssets/issues/5030
+pinterest.*##div[data-test-id="giftWrap"]
+pinterest.*##div[class="Closeup__wrapper"] > div > div[style^="cursor: default"]
+pinterest.*##div[class="GrowthUnauthPinImage__imageDim"]
+pinterest.*##div[style^="filter:"]:style(filter: none !important)
+pinterest.*##.GrowthUnauthPinImage > a > div[class^="Jea"]:has(button[class^="noButtonStyles "])
+pinterest.*##.Hsu.iyn.zI7:nth-of-type(2) > div > .FullPageModal__scroller
+! https://github.com/uBlockOrigin/uAssets/issues/5030#issuecomment-546342839
+pinterest.*##body:style(overflow-y: scroll !important;)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=40602
+@@||html-online.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/2185
+@@||socialblade.com^$ghide
+socialblade.com##.cas-container
+socialblade.com##.cas-wide-container
+socialblade.com##div[style^="width: 300px; height: 250px;"][style*="background: #fff;"]
+socialblade.com##div[style^="width: 860px; min-height: 90px"]
+socialblade.com###bottomAd:style(position: absolute !important; left: -4000px !important;)
+
+! https://forums.lanik.us/viewtopic.php?p=136255#p136255
+m4ufree.com##+js(aopw, document.oncontextmenu)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/63
+sportsnet.ca##+js(aopr, uxGuid)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/72
+relyonhorror.com##+js(nostif, checkAdStatus, 500)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2299
+androidrepublic.org##.samSupportUs
+
+! https://github.com/uBlockOrigin/uAssets/issues/2343
+evworld.com##+js(nostif, ads, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2433
+@@||windguru.cz^$ghide
+windguru.cz##.reklama
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/87
+realcleardefense.com##+js(set, warning_widget.check_ad_block_status, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/pull/2471
+flickr.com##.spaceball
+
+! evz.ro right click - select
+evz.ro##body:style(-moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+evz.ro##+js(acs, $, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2513
+mcocguideblog.com##+js(acs, disableselect, reEnable)
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/963
+phillymag.com##.gtp-ad
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/120
+files.minecraftforge.net##.ad-container
+files.minecraftforge.net##.promo-container
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/965
+multifilemirror.com##+js(acs, $, 'hidden')
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/127
+xclient.info##+js(set, killads, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2854
+resourcepack.net##+js(aopw, clickIE4)
+resourcepack.net##+js(aopw, disableSelection)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/132
+||readthedocs.org/api/v2/sustainability/*$script,redirect=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/2903
+programegratuitepc.com##+js(aopr, disableSelection)
+programegratuitepc.com##+js(aopr, document.oncontextmenu)
+programegratuitepc.com##.unselectable:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/134
+tv.mademyday.com##.blnotice
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/968
+iosgods.com##+js(aopw, CheckAdLoad)
+
+! phys.org anti-adblock nag
+@@||phys.org^$ghide
+phys.org##.amp-unresolved
+phys.org##.adsbygoogle
+phys.org##.ads-336x280
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/145
+minijuegos.com###adBlockDisclaimer
+
+! https://github.com/uBlockOrigin/uAssets/issues/2971
+||senmanga.com/img/block_*.png$image,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/2972
+mimaletamusical.*##+js(aopw, document.oncontextmenu)
+mimaletamusical.*###cboxOverlay
+mimaletamusical.*###colorbox
+
+! https://github.com/uBlockOrigin/uAssets/issues/3006
+gardenista.com##+js(set, adsAreBlocked, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2992
+fmhikayeleri.com##+js(acs, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3032
+experts-exchange.com###topHeaderBannerWrap
+experts-exchange.com##.navigationWrapper:style(top: 0px !important;)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=41296
+digitalsynopsis.com##+js(aopr, disableSelection)
+digitalsynopsis.com##+js(aopr, document.oncontextmenu)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=41301
+filefox.cc##+js(aeld, blur)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3096 right click
+visionias.net##+js(acs, $, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2546
+99bitcoins.com##+js(nostif, ThriveGlobal)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/156
+punto-informatico.it##+js(aopr, blazemedia_adBlock)
+
+! https://github.com/uBlockOrigin/uAssets/pull/3117
+! https://github.com/uBlockOrigin/uAssets/issues/6938
+uol.com.br##+js(aeld, copy)
+uol.com.br##+js(aopw, addLink)
+*/lib.ucopy/ucopy.js$script,domain=uol.com.br
+! https://github.com/uBlockOrigin/uAssets/issues/6938#issuecomment-898859152
+ne10.uol.com.br##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3115
+@@||umterps.com^$ghide
+umterps.com##.single-ad
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=41339
+cars.com##.dialog
+cars.com##body:style(overflow: auto !important; position: initial !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2672
+peliculas24.me##+js(aopw, disableSelection)
+peliculas24.me##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3199
+warringtonguardian.co.uk##+js(aopw, _sp_)
+
+! right click, select, copy cristoiublog.ro
+cristoiublog.ro##+js(aopw, document.oncontextmenu)
+cristoiublog.ro##+js(aopw, document.onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3204
+myfxbook.com##+js(nostif, checkForAds)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3220
+planete-205.com###nonono
+
+! https://github.com/uBlockOrigin/uAssets/issues/3221
+@@||vide-greniers.org^$ghide
+||pagead2.googlesyndication.com/pagead/$script,redirect=noopjs,domain=vide-greniers.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/3216
+@@||ps3-infos.fr^$ghide
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/168
+tweakers.net##.notificationsContainer:has-text(whitelisten of beleef Tweakers)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3318
+hqq.tv##+js(nostif, check, 100)
+
+! https://github.com/NanoMeow/QuickReports/issues/29
+! https://reddit.com/r/uBlockOrigin/comments/ea6rv3
+zerohedge.com###abd-banner
+zerohedge.com##.modal__overlay
+
+! https://github.com/reek/anti-adblock-killer/issues/4147
+@@||racefans.net^$ghide
+racefans.net##.textwidget
+
+! https://github.com/uBlockOrigin/uAssets/issues/3319
+eca-anime.net##+js(acs, document.getElementById, advert-tester)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3325
+gazetadopovo.com.br##+js(aeld, copy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/854
+! https://forums.lanik.us/viewtopic.php?p=133969#p133969
+foodnetwork.com##.o-AdhesionNotifier
+
+! https://github.com/uBlockOrigin/uAssets/issues/3372
+gaypornmasters.com##+js(aopr, document.oncontextmenu)
+||gaypornmasters.com^$csp=script-src *
+gaypornmasters.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/47
+gearside.com##+js(set, nebula.session.flags.adblock, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3380
+braziljournal.com##+js(acs, document.oncopy)
+braziljournal.com##body:style(overflow: auto !important;)
+braziljournal.com##.in.fade
+
+! https://github.com/uBlockOrigin/uAssets/issues/3382
+emol.com##+js(aopr, addLink)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3411
+@@||radioline.co/*/ad$1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/2938
+voirfilms.*##+js(aopr, document.oncontextmenu)
+voirfilms.*##+js(aopr, document.onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3278#issuecomment-421038747
+nytimes.com##+js(set, _adBlockCheck, true)
+! https://github.com/uBlockOrigin/uAssets/issues/5677
+!#if env_chromium
+nytimes.com##+js(set, navigator.storage.estimate, undefined)
+!#endif
+!#if env_firefox
+nytimes.com##+js(set, webkitRequestFileSystem, noopFunc)
+!#endif
+! https://github.com/uBlockOrigin/uAssets/issues/5677#issuecomment-596154482
+nytimes.com##.ReactModalPortal:has(.welcomeAd)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2682#issuecomment-421085748
+@@||xiaomitoday.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/2235
+mixmods.com.br##+js(aopr, abde)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3466
+! https://github.com/NanoMeow/QuickReports/issues/4672
+||googlesyndication.com/pagead/js/adsbygoogle.js$xhr,redirect=noop.js,domain=unknowncheats.me
+*$xhr,redirect-rule=nooptext,domain=unknowncheats.me
+
+! https://github.com/uBlockOrigin/uAssets/issues/3489
+columbiaspectator.com##+js(nostif, ads, 2000)
+
+! https://github.com/NanoMeow/QuickReports/issues/97
+knshow.com##+js(aopr, document.oncontextmenu)
+knshow.com##+js(aeld, /^(?:contextmenu|copy|selectstart)$/)
+@@||knshow.com^$ghide
+knshow.com##.adsbygoogle
+knshow.com##div[id^="div-gpt-ad-"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/3514
+classicreload.com###sliding-popup.sliding-popup-bottom
+
+! https://www.reddit.com/r/uBlockOrigin/comments/9gr8tv/force_allow_text_copy/
+jusbrasil.com.br##+js(aeld, /^(?:contextmenu|copy)$/, preventDefault)
+
+! https://github.com/NanoMeow/QuickReports/issues/108
+descarga-animex.*##+js(aeld, /^(?:contextmenu|keydown)$/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3447#issuecomment-422715065
+deezer.com##+js(aopr, onbeforeunload)
+! https://github.com/uBlockOrigin/uAssets/issues/5030
+deezer.com###modal_login:upward(2)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3535
+! https://github.com/uBlockOrigin/uAssets/issues/4067
+tvtropes.org##+js(set, valid_user, true)
+||global.proper.io/tvtropes.min.js$script,redirect=noopjs,domain=tvtropes.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/3545
+springfieldspringfield.co.uk##+js(aopr, addLink)
+
+! https://github.com/NanoMeow/QuickReports/issues/117
+@@||justtrucks.com.au^$ghide
+justtrucks.com.au##+js(set, Drupal.behaviors.detectAdblockers, noopFunc)
+@@||justtrucks.com.au^$image
+
+! https://github.com/ryanbr/fanboy-adblock/issues/554
+omr.com###dsgvoModal
+omr.com##.modal-backdrop
+omr.com##body:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3553
+indiatimes.com##+js(aeld, copy)
+! https://github.com/uBlockOrigin/uAssets/issues/4151#issuecomment-1116715077
+economictimes.indiatimes.com##+js(aeld, mouseout)
+
+! https://github.com/uBlockOrigin/uAssets/issues/911#issuecomment-423771909
+||adsrt.com/assets/js/particles.min.js$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/3591
+nulled.life##+js(ra, oncontextmenu)
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/992
+mediafire.com##+js(nostif, scan, 500)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3599
+ebc.com.br##+js(ra, oncopy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3614
+||tours.fr/include/js/tagAnalyticsCNIL.php$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/142
+flyertalk.com##+js(acs, $, AdBlock)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=41811
+artsy.net##+js(aeld, scroll)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3621
+searchenginewatch.com##+js(acs, jQuery, #sign-up-popup)
+
+! popular on FB
+facebook.com,facebookcorewwwi.onion,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##.fbUserStory:has-text(Popular Across Facebook)
+facebook.com,facebookcorewwwi.onion,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##.userContentWrapper:has-text(Popular Across Facebook)
+
+! right click, select, copy => http://www.oggiscuola.com/web/2018/09/22/alzarsi-in-piedi-quando-entra-il-professore-e-una-forma-di-saluto-che-va-recuperata/
+oggiscuola.com##+js(acs, jQuery, overlay)
+||oggiscuola.com^$csp=style-src 'self' *
+||oggiscuola.com/*/banner$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/3660
+odiario.com##+js(aeld, copy)
+
+! select, copy cittadinanza.biz | glistranieri.it
+cittadinanza.biz,glistranieri.it##+js(set, disableSelection, noopFunc)
+cittadinanza.biz,glistranieri.it##+js(aopw, document.oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/179
+esercizinglese.com,pelisfull.tv##+js(aopw, adBlockDetected)
+masternodes.pro###adblocker
+
+! https://github.com/NanoMeow/QuickReports/issues/182
+ancient.eu##+js(set, ADBdetected, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3699
+petrimazepa.com##.ui-dialog[tabindex="-1"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/3704
+sabishiidesu.com##+js(acs, document.onkeydown)
+sabishiidesu.com##+js(aopw, document.oncontextmenu)
+sabishiidesu.com##.unselectable:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/215
+gota.io##+js(aopr, fuckAdBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3738
+webcodegeeks.com##+js(nostif, onload_popup, 8000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3743
+greenocktelegraph.co.uk##+js(aopr, _sp_._networkListenerData)
+
+! select, copy http://www.livetennis.it/post/302572/atp-stoccolma-fabio-fognini-conquista-le-semifinali/
+livetennis.it##+js(ra, onselectstart)
+livetennis.it##p:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! select https://www.readlightnovel.org/the-good-for-nothing-seventh-young-lady/chapter-1091
+readlightnovel.org##.chapter-content3:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3790
+kashmirobserver.net##+js(acs, document.getElementById, ad-blocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3797
+allafinedelpalo.it##+js(aopr, ABDSettings)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3814
+cathouseonthekings.com##+js(acs, document.getElementById, .ab_detected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3830
+tinyppt.com##+js(aopw, document.ondragstart)
+tinyppt.com##+js(aopw, disableEnterKey)
+tinyppt.com##+js(acs, document.oncontextmenu)
+tinyppt.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3842
+wotlabs.net##:xpath('//*[contains(text(),"AdB")]')
+
+! https://github.com/uBlockOrigin/uAssets/issues/3846
+kollyinsider.com##+js(aopw, adMessage)
+
+! https://github.com/NanoMeow/QuickReports/issues/247
+winaero.com##+js(acs, jQuery, tweaker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3862
+ewrc-results.com##+js(aopw, adBlockEnabled)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3864
+@@||schnauzer-forum.co.uk^$ghide
+@@||emulasyonturkiye.org^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/3865
+raven-mythic.com##+js(aopw, $adframe)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3868
+investmentnews.com###blocker
+
+! https://github.com/uBlockOrigin/uAssets/issues/3855
+intramed.net##+js(set, adblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3888
+protest.eu##+js(set, BIA.ADBLOCKER, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3877
+/wp-content/plugins/simple-adblock-notice/*$~css
+books-world.net,pc3mag.com##+js(nostif, Adblocker, 10000)
+centrumher.eu##[class^="san_howtowhitelist_"]
+centrumher.eu##+js(acs, jQuery, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3884
+opedge.com##+js(nostif, (), 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3880#issuecomment-433622746
+droidtekno.com##+js(aopw, document.ondragstart)
+droidtekno.com##+js(aopw, disableEnterKey)
+droidtekno.com##.unselectable:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3885
+northwestfirearms.com,techkings.org##+js(set, samDetected, true)
+cafesaxophone.com##+js(aopw, XF)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3898
+community.simtropolis.com##.ipsModal
+community.simtropolis.com##.ipsDialog
+
+! https://github.com/uBlockOrigin/uAssets/issues/3900
+fabricjs.com##+js(nostif, (), 4000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3901
+bronze-bravery.com,ultimate-bravery.net##+js(nostif, (), 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3906
+basilmarket.com##[id*="cdm-zone"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/3908
+@@||enfsolar.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/3913
+@@||brightonandhovenews.org^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/3912
+japancamerahunter.com##+js(acs, jQuery, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3918
+remotelyawesomejobs.com###ad-plea
+
+! https://github.com/uBlockOrigin/uAssets/issues/3919
+@@||rightwingtribune.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/3920
+htmlreference.io##+js(nostif, (), 2000)
+htmlreference.io##.header-carbon
+
+! https://github.com/uBlockOrigin/uAssets/issues/3922
+wildstarlogs.com##+js(nostif, (), 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3925
+heypoorplayer.com##+js(aopr, ABDSettings)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3921
+topomap.co.nz###modal-adblocker, .in.fade.modal-backdrop
+
+! https://github.com/uBlockOrigin/uAssets/issues/3931
+spookshow.net##+js(set, adBlockFunction, trueFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3928
+@@||gamerotic.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/3932
+thegraillords.net##+js(acs, document.getElementById, block)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3944
+||bdotemplates.com/wp-content/plugins/bdo-adblock-notice/
+
+! https://github.com/uBlockOrigin/uAssets/issues/3942
+worldscientific.com##+js(acs, document.getElementById, block)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3902
+me3tweaks.com###support_banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/3934
+tastycookery.com##+js(aeld, DOMContentLoaded, .js-popup-adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3935
+@@||resdz.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/3940
+airlinercafe.com##+js(acs, jQuery, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3941
+@@||ricochet.media^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/3946
+! https://github.com/uBlockOrigin/uAssets/issues/3924
+! https://github.com/uBlockOrigin/uAssets/issues/3910
+hukmatpro.*,alisbach.com,linuxslaves.com,nakblogz.top##+js(aopw, hidekeep)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3953
+halotracker.com##+js(aopw, adBlockDetected)
+
+! fosshub.com/PSPad.html warning antiadb
+fosshub.com##+js(set, checkAds, trueFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3962
+juancarlosmolinos.net##+js(aopw, ABDSettings)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3963
+stoneyroads.com##.ad-container
+
+! https://github.com/uBlockOrigin/uAssets/issues/3964
+pokemonforever.com##+js(set, google_jobrunner, true)
+
+! https://github.com/NanoMeow/QuickReports/issues/265
+businessemailetiquette.com##+js(aopw, disableEnterKey)
+businessemailetiquette.com##+js(aopw, document.ondragstart)
+businessemailetiquette.com##.unselectable:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://www.camp-firefox.de/forum/viewtopic.php?p=1096410#p1096410
+liveonsat.com##+js(ra, oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/267
+bucketpages.com##+js(nostif, #advert-tracker, 500)
+
+! https://github.com/NanoMeow/QuickReports/issues/273
+xiaomi4mi.com##+js(aopw, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4031
+evades.io##.disable-prompt-header
+
+! https://github.com/NanoMeow/QuickReports/issues/259
+@@||orlygift.com^$ghide
+orlygift.com##.ad-container-responsive
+orlygift.com##div[id^="div-gpt-ad"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/4042
+heroescommunity.com###he1
+
+! https://github.com/uBlockOrigin/uAssets/issues/4041
+xhardhempus.com##+js(aopw, clickIE)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4043
+||navcomic.com/wp-content/uploads/*/ad-blocking.gif$image,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/4045
+steptalk.org##+js(nostif, (), 3000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4046
+short-story.net##+js(nostif, (), 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4049
+hindi-gk.com##p:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+hindi-gk.com##+js(aopw, disableEnterKey)
+hindi-gk.com##+js(aopw, disable_copy)
+hindi-gk.com##+js(acs, document.oncontextmenu)
+hindi-gk.com##+js(aopw, disable_hot_keys)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4055
+upsrtconline.co.in##+js(acs, document.addEventListener, alert)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4077
+newsbook.pl##+js(aopw, disableEnterKey)
+newsbook.pl##+js(aopw, document.ondragstart)
+newsbook.pl##.unselectable:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+cmg24.pl##+js(aopw, document.oncontextmenu)
+ligowiec.net,radio5.com.pl,romet.pl,sat-charts.eu,skionline.pl,trentino.pl,pcpobierz.pl##+js(ra, oncontextmenu)
+roztoczanskipn.pl##+js(aeld, contextmenu)
+malybelgrad.pl##+js(aopr, document.oncontextmenu)
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=42119#p143017
+carsguide.com.au##+js(set, isAdblockDisabled, true)
+carsguide.com.au###adBlockMessage
+
+! https://github.com/NanoMeow/QuickReports/issues/309
+@@||dermatologytimes.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/4120
+! https://github.com/NanoMeow/QuickReports/issues/32
+motherjones.com##.mj-adblock-widget
+
+! https://github.com/uBlockOrigin/uAssets/issues/4125
+boerse-express.com##+js(nostif, (), 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/329
+kurazone.net##+js(aopw, clickIE4)
+kurazone.net##+js(aopw, disableSelection)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4134
+techtrickseo.com##+js(aopw, disable_copy)
+techtrickseo.com##+js(aopw, disableSelection)
+techtrickseo.com##.unselectable:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4135
+videohelp.com##+js(acs, document.getElementById, block)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4141 right click
+calorielijst.nl##+js(aopw, clickIE)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4148
+humo.be##+js(set, checkPrivacyWall, noopFunc)
+
+! https://github.com/NanoMeow/QuickReports/issues/342
+! https://github.com/NanoMeow/QuickReports/issues/617
+! https://github.com/NanoMeow/QuickReports/issues/1412
+polygon.com##+js(aopw, loadOutbrain)
+##.adblock-whitelist-messaging__article-wrapper
+##.adblock-whitelist-messaging__wrapper
+
+! https://github.com/uBlockOrigin/uAssets/issues/4151
+economictimes.indiatimes.com##+js(aopr, intsFequencyCap)
+! https://github.com/uBlockOrigin/uAssets/issues/10598
+economictimes.indiatimes.com##+js(aeld, contextmenu)
+
+! timponline . ro right click, select, copy
+timponline.ro##+js(aopw, disable_copy)
+timponline.ro##+js(aopw, disableSelection)
+timponline.ro##+js(aopw, nocontext)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4158
+numberempire.com##+js(nostif, w3ad, 1000)
+numberempire.com##.perm_ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/4187 right click, select
+singingdalong.blogspot.com##+js(ra, oncontextmenu|ondragstart|onselectstart)
+singingdalong.blogspot.com##+js(acs, disableselect, reEnable)
+
+! https://www.apksecured.com/2015/11/skin-trade-2014.html
+apksecured.com##+js(set, document.oncontextmenu, null)
+
+! https://www.neobux.com/m/v/?vl=AC836091570D39B7 right click, select
+neobux.com##+js(ra, oncontextmenu|ondragstart|onselectstart)
+neobux.com##.nosel:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! viralinindia . net right click, select, copy
+viralinindia.net##+js(set, nocontext, noopFunc)
+viralinindia.net##+js(set, disableSelection, noopFunc)
+viralinindia.net##.unselectable:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! http://qualityfilehosting.com/how-to-install-nginx/ select, right click, copy
+qualityfilehosting.com##+js(aopw, disableEnterKey)
+qualityfilehosting.com##+js(acs, document.ondragstart, document.oncontextmenu)
+qualityfilehosting.com##.unselectable:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! ideapod . com right click select copy
+ideapod.com##+js(set, nocontext, noopFunc)
+ideapod.com##+js(set, disableSelection, noopFunc)
+
+! androidmtk . com right click, copy, select
+androidmtk.com##[id]:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+androidmtk.com##+js(acs, document.oncontextmenu)
+
+! http://dba-oracle.com/ copy, select
+dba-oracle.com##+js(ra, oncontextmenu|ondragstart|onselectstart)
+
+! apornstories.com right click, select, copy
+apornstories.com##+js(aopw, killCopy)
+apornstories.com##+js(ra, oncontextmenu|ondragstart|onselectstart|onkeydown)
+
+! randomstory . org select, copy
+randomstory.org##+js(aopw, disableSelection)
+
+! filmesonlinex . co right click, select
+filmesonlinex.co##+js(aopr, document.onselectstart)
+filmesonlinex.co##+js(ra, oncontextmenu|ondragstart|onselectstart|onkeydown)
+
+! booksmedicos . org right click, select, copy
+booksmedicos.org##+js(aopw, disableSelection)
+booksmedicos.org##+js(acs, jQuery, document)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4207
+proxfree.com###pftop:style(height: auto !important;padding-bottom:5px !important)
+proxfree.com##.pflrgAds
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=42259
+instagram.com##[class]:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4237
+! https://github.com/NanoMeow/QuickReports/issues/3139
+@@||md5hashing.net^$ghide
+*$script,3p,redirect-rule=noopjs,domain=md5hashing.net
+md5hashing.net##.alert-danger.alert
+md5hashing.net##.red.b.center.mute
+
+! https://github.com/uBlockOrigin/uAssets/issues/4244
+siliconinvestor.com##+js(acs, document.getElementById, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4253
+jobsbotswana.info##+js(acs, jQuery, restriction)
+jobsbotswana.info##+js(aopw, document.oncontextmenu)
+jobsbotswana.info##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5489
+102bank.com,80beyond.spacestation-online.com,b4usa.com,badgerandblade.com,mzk.starachowice.eu##+js(aopw, adBlockDetected)
+||algosit.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/4271
+republicadecuritiba.net##+js(aopw, nocontext)
+republicadecuritiba.net##.unselectable:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://twitter.com/holly/status/1070781008457490433
+merchoid.com###message-purchased
+
+! https://github.com/uBlockOrigin/uAssets/issues/4268#issuecomment-445405264
+||gaypornwave.com^$csp=script-src *
+gaypornwave.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/422
+@@||topspeed.com^$ghide
+topspeed.com##.adsninja-ad-zone
+topspeed.com##.txt-ad
+topspeed.com##.daily-vid-ad
+topspeed.com##.top-horizontal-ad-content
+
+! https://github.com/uBlockOrigin/uAssets/issues/4268#issuecomment-445478692
+@@||mywrestling.com.pl^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/4268#issuecomment-445481905
+webwereld.nl##+js(set, adsAreShown, true)
+
+! https://github.com/NanoMeow/QuickReports/issues/433
+sbenny.com##+js(nostif, (), 2000)
+forum.sbenny.com##.message-inner:has(.ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/58#issuecomment-446707009
+||wp.com/wp-content/themes/vip/pmc-plugins/$script,domain=deadline.com
+
+! https://github.com/NanoMeow/QuickReports/issues/446
+howjsay.com##+js(nostif, (), 1500)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4325
+vpnmentor.com##+js(nostif, bioEp.showPopup)
+
+! right clik, ctrl-U https://github.com/NanoMeow/QuickReports/issues/453
+! https://github.com/uBlockOrigin/uAssets/issues/19641
+animeshouse.net##+js(aeld, /^(contextmenu|keydown)$/)
+olhonaviagem.com##+js(aeld, keydown)
+olhonaviagem.com##+js(aopw, document.oncontextmenu)
+
+! select / copy informagiovani-italia . com
+informagiovani-italia.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! anti adb warning /bigleaguepolitics . com
+@@||bigleaguepolitics.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/4357 right click / copy / ctrl-U
+techsupportall.com##+js(aeld, /^(?:contextmenu|copy|keydown)$/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4367 right click / copy
+badayak.com##+js(acs, document.oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/366
+fin24.com##+js(aopr, Date.prototype.toUTCString)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4369
+djelfa.info##+js(aopr, document.onmousedown)
+djelfa.info##+js(aopw, document.oncontextmenu)
+djelfa.info##+js(ra, onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4388
+palemoon.org##+js(set, abd, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4386
+portableapps.com##+js(nostif, innerHTML)
+
+! right click https://github.com/uBlockOrigin/uAssets/issues/4393
+animeunity.it##+js(ra, oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4368#issuecomment-449866993
+theartofnakedwoman.*##+js(aopw, intializemarquee)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4408
+j-lyric.net##+js(ra, oncontextmenu|onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4409
+cagesideseats.com##+js(nostif, (), 1500)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4411
+/wp-content/plugins/christmasify/*
+
+! https://github.com/uBlockOrigin/uAssets/issues/4368#issuecomment-449870173
+space-engineers.de##+js(acs, document.getElementById, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4368#issuecomment-449870173
+motogon.ru##+js(aopr, oSpPOptions)
+
+! https://github.com/NanoMeow/QuickReports/issues/505
+@@||soundonsound.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/4447
+@@||jrocknews.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/4501
+aulete.com.br##.definicao_verbete_homologado_interna:style(height:100% !important;)
+
+! right click / select npnews24 . com
+npnews24.com##+js(acs, document.oncontextmenu, document.onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4518
+runningnews.gr##+js(acs, document.oncontextmenu)
+runningnews.gr##+js(acs, disableselect, reEnable)
+runningnews.gr##+js(ra, oncontextmenu|onselectstart|ondragstart)
+*.gif$image,domain=runningnews.gr
+
+! https://github.com/uBlockOrigin/uAssets/issues/4522
+gordiando.com.br##+js(aopw, document.oncontextmenu)
+*/wp-content/plugins/wp-content-copy-protection/*
+
+! https://github.com/uBlockOrigin/uAssets/issues/4523
+mercurynews.com##.Mg2-connext, .connext-modal-backdrop, .modal-scrollable
+mercurynews.com##body.modal-open:style(overflow-x: hidden !important; overflow-y: scroll !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4524
+megawypas.com##+js(ra, oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/531
+wheel-size.com##+js(set, detector_active, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4551
+@@||creditonebank.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/741
+demolandia.net##+js(aopr, document.oncontextmenu)
+
+! right click, copy kirannewsagency . com
+kirannewsagency.com##+js(aopw, disableSelection)
+kirannewsagency.com##+js(acs, document.oncontextmenu)
+
+! https://forums.lanik.us/viewtopic.php?p=144782#p144782
+aoezone.net##+js(set, aoezone_adchecker, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4611
+otempo.com.br##+js(aeld, copy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4618
+meteo.org.pl##+js(ra, oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4650
+r7.com###inner-ad-container
+
+! https://github.com/uBlockOrigin/uAssets/issues/4652
+insurance-corporate.blogspot.com##+js(ra, oncontextmenu|ondragstart|onkeydown|onmousedown|onselectstart)
+insurance-corporate.blogspot.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4655
+fordogtrainers.pl##+js(acs, message, clickIE)
+fordogtrainers.pl##+js(acs, preventSelection)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4672
+clk.sh,shrinkearn.com##+js(acs, document.oncontextmenu)
+clk.sh,shrinkearn.com##+js(acs, document.onselectstart)
+
+! europix right click, ctrl-U
+europixhd.*,topeuropix.*##+js(acs, document.onkeydown)
+europixhd.*,topeuropix.*##+js(acs, document.oncontextmenu)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/260
+fanfiction.net,fictionpress.com##.storytextp:style(user-select: text !important; -webkit-user-select: text !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/590
+xnxx.com##+js(aopr, fuckAdBlock)
+
+! https://github.com/NanoMeow/QuickReports/issues/595
+@@||pagead2.googlesyndication.com/pagead/*$image,domain=free-scores.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4730
+radioony.fm##+js(set, pageService.initDownloadProtection, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4731
+polskacanada.com##+js(acs, jQuery, contextmenu)
+polskacanada.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4735
+lugarcerto.com.br##+js(aeld, mouseout, pop)
+
+! https://github.com/NanoMeow/QuickReports/issues/33#issuecomment-457932561
+windowscentral.com##.swal-modal, .swal-overlay
+
+! gezimanya . com right click, copy, select
+gezimanya.com##+js(ra, oncontextmenu|onselectstart|onselect|oncopy)
+gezimanya.com##+js(acs, jQuery, Drupal)
+
+! quadrinhoseroticos . net select
+quadrinhoseroticos.net##+js(ra, oncontextmenu|onselectstart|onselect|oncopy)
+
+! starsunfolded . com right click, select
+starsunfolded.com##+js(acs, document.oncontextmenu)
+starsunfolded.com##+js(aopw, disableSelection)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4781
+cmjornal.pt##+js(aopw, document.oncopy)
+
+! https://github.com/NanoMeow/QuickReports/issues/631
+randaris.app##.adblock-box
+
+! https://github.com/uBlockOrigin/uAssets/issues/4787
+ctrl.blog##+js(aopr, a1lck)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/amvxds/blocked_element_keeps_reappearing_on_forums/
+coffeeforums.co.uk##+js(acs, document.getElementById, undefined)
+||coffeeforums.co.uk/banners/$image
+
+! nachrichten . at anti adb
+@@||nachrichten.at^$ghide
+
+! https://www.reddit.com/r/uBlockOrigin/comments/annrln/polygon_antiadblock/
+heroesneverdie.com##+js(nostif, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4809
+wader.toys##+js(aopw, document.oncontextmenu)
+
+! satcesc select, ctrl-U, F12. drag
+satcesc.com##+js(acs, document.oncontextmenu)
+satcesc.com##+js(aopw, disableSelection)
+satcesc.com##+js(aopw, document.onkeydown)
+satcesc.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+satcesc.com##+js(aeld, /^(?:keyup|keydown)$/)
+satcesc.com##+js(aopr, document.ondragstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4813
+mexiconewsdaily.com##+js(set, detectPrivateMode, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3673
+technologyreview.com##+js(set, webkitRequestFileSystem, undefined)
+
+! https://github.com/NanoMeow/QuickReports/issues/648
+! https://github.com/jspenguin2017/uBlockProtector/issues/1019
+curbed.com,eater.com,funnyordie.com,mmafighting.com,mmamania.com,polygon.com,racked.com,riftherald.com,sbnation.com,theverge.com,vox.com##+js(nostif, adsBlocked)
+
+! right click https://github.com/uBlockOrigin/uAssets/issues/4822
+them4ufree.info##+js(acs, document.oncontextmenu)
+
+! bdcraft
+@@||bdcraft.net^$ghide
+bdcraft.net##+js(set, adsbygoogle, null)
+bdcraft.net##.cc-banner
+bdcraft.net##.hostBtn
+bdcraft.net##.adsbygoogle
+bdcraft.net###bottombanner
+bdcraft.net###header > .wrapper > [class]
+
+! https://github.com/uBlockOrigin/uAssets/issues/4877
+athletic.net##+js(acs, $, blur)
+||athletic.net/css/signedOutBlur
+athletic.net##[href*="/result"]:style(text-shadow: none !important; color: #8b0000 !important;)
+athletic.net##[href*="/meet"]:style(text-shadow: none !important; color: #8b0000 !important;)
+athletic.net##[_ngcontent-serverapp-c135]:style(text-shadow: none !important; color: #000 !important;)
+athletic.net##[ngbtooltip]:style(text-shadow: none !important; color: #6c757d !important;)
+athletic.net##.hiddenRanking:style(text-shadow: none !important; color: #6c757d !important;)
+athletic.net##*:style(-webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+athletic.net##.ng-star-inserted.sign-up-box
+athletic.net##[_ngcontent-serverapp-c134]:style(text-shadow: none !important; color: #000 !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4947
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=yellowbridge.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4950
+diynetwork.com##.o-AdhesionNotifier
+
+! https://github.com/uBlockOrigin/uAssets/issues/4953
+! disabled for #7183
+!tapatalk.com##+js(aopr, IS_VIP_PLUS)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4960
+bloombergquint.com##+js(aopw, addLinkToCopy)
+bloombergquint.com##^script:has-text(/addLinkToCopy/i)
+bloombergquint.com##+js(aopr, getSelection)
+
+! https://github.com/NanoMeow/QuickReports/issues/701
+androidcentral.com##.swal-overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/4985
+! https://github.com/uBlockOrigin/uAssets/issues/5030
+instagram.com##nav > div[class^="_"] > div[class^="_"] > div[class^="_"] > div[class^="_"] > div[class^="_"] > div[class] > div[class^=" _"][style="width: 100%;"]:only-child
+
+! https://github.com/uBlockOrigin/uAssets/issues/6481#issuecomment-615294565
+instagram.com##+js(set, _sharedData.is_whitelisted_crawl_bot, true)
+! https://github.com/uBlockOrigin/uAssets/issues/7758
+! https://github.com/uBlockOrigin/uAssets/issues/6481#issuecomment-672627378
+instagram.com###react-root ~ div[class*=" "][class$=" "][role="presentation"]:has(a[href^="/accounts/"][href*="signup/"]):not(:has(button[type="button"] > div > svg[aria-label][width="18"][height="18"][viewBox*="48"]))
+
+! instagram app download nag banner
+!#if env_mobile
+instagram.com##.xZ2Xk:has-text(/App/)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/4987
+twitter3e4tixl4xyajtrzo62zg5vztmjuricljdp2c5kshju4avyoid.onion,twitter.com###layers div[class="css-1dbjc4n r-l5o3uw r-97e31f"]
+! https://github.com/uBlockOrigin/uAssets/issues/15430
+twitter.com##div[tabindex="0"]:matches-css(position:fixed):has([href="/signup"])
+twitter.com##html:style(overflow:auto!important)
+! https://github.com/uBlockOrigin/uAssets/issues/5911
+twitter.com##.js-signup-call-out
+twitter3e4tixl4xyajtrzo62zg5vztmjuricljdp2c5kshju4avyoid.onion,twitter.com###layers > div[class] > div[class] > div[class] > div[class]:has(> div[class] > div[class] > div[class] > div[class] > div[class] > a[href="/login"])
+
+! https://github.com/NanoMeow/QuickReports/issues/713
+@@||eppingforestguardian.co.uk^$ghide
+eppingforestguardian.co.uk##.dfp-ad
+eppingforestguardian.co.uk##.mar-block-ad
+
+! https://github.com/NanoMeow/QuickReports/issues/714
+||code.adsales.snidigital.com/lib/*/sni-ads.min.js$script,domain=travelchannel.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5002
+diffnow.com##:xpath(//div[contains(text(),"Adblock")]/..)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5030
+addons.opera.com##+js(nostif, showOverlay)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5030
+askubuntu.com,mathoverflow.net,serverfault.com,stackapps.com,stackexchange.com,superuser.com##.js-dismissable-hero:has-text(Sign up)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5030
+mrfood.com##.in-content-container-coverage
+mrfood.com###newsletterSignUpDivAnime
+mrfood.com###viewportGreyout
+
+! https://github.com/uBlockOrigin/uAssets/issues/5030
+thredup.com##.modal-underlay
+thredup.com##.redux-modal
+
+! https://github.com/uBlockOrigin/uAssets/issues/5030
+@@||quizlet.com^$ghide
+quizlet.com##.SetPageTerm:style(display: block !important)
+quizlet.com##.SignupWallInline-overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/5030
+feedspot.com##.blackout
+feedspot.com##.fadeIn.animated
+feedspot.com##.fixedBar
+feedspot.com##.mfp-container
+feedspot.com##.regoverlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/5030
+volunteermatch.org###req_login_reg_interrupt
+volunteermatch.org###window_overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/5030
+theclever.com###overlay_search
+
+! https://github.com/uBlockOrigin/uAssets/issues/5030
+! https://github.com/uBlockOrigin/uAssets/issues/6425
+discussion.evernote.com,prestashop.com##.cTopicPostArea:has(.cGuestTeaser)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5030
+bookbub.com##.blur.signup-gate
+bookbub.com##.post-section:style(filter: none !important; -webkit-filter: none !important; pointer-events: all !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5030
+ndtv.com###___ndtvpushdiv
+
+! https://github.com/uBlockOrigin/uAssets/issues/5030
+facebook.com,facebookcorewwwi.onion,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##._5hn6
+! https://github.com/uBlockOrigin/uAssets/issues/5136
+touch.facebook.com,mtouch.facebook.com,x.facebook.com,iphone.facebook.com,m.beta.facebook.com,touch.beta.facebook.com,mtouch.beta.facebook.com,x.beta.facebook.com,iphone.beta.facebook.com,touch.facebookcorewwwi.onion,mtouch.facebookcorewwwi.onion,x.facebookcorewwwi.onion,iphone.facebookcorewwwi.onion,touch.beta.facebookcorewwwi.onion,m.facebook.com,m.facebookcorewwwi.onion,b-m.facebook.com,b-m.facebookcorewwwi.onion,mobile.facebook.com,mobile.facebookcorewwwi.onion,touch.facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion,mtouch.facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion,x.facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion,iphone.facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion,touch.beta.facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion,m.facebook.com,m.facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion,b-m.facebook.com,b-m.facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion,mobile.facebook.com,mobile.facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##div[style^="background: none;"]:has(#mobile_login_bar)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5030
+! https://forums.lanik.us/viewtopic.php?f=9&t=31927
+quora.com##body > div[id]:has(.modal_signup_dialog)
+quora.com##.new_signup_dialog.modal_bg
+quora.com##.signup_wall_prevent_scroll #root:style(filter: none !important;)
+! https://old.reddit.com/r/uBlockOrigin/comments/j5snpo/quora_blurring_of_content_and_login_prompt_on/g7vdihp/
+quora.com##.signup_wall_prevent_scroll:style(position: unset !important; padding-right: 0 !important;)
+
+! https://github.com/uBlockOrigin/uAssets/commit/728d4cd991a886d7865f3d5373f42337c7326e2c#commitcomment-32665659
+descargasnsn.com##+js(aopr, plusonet)
+
+! right click, select ##5086
+tecnotutoshd.net##+js(aopw, document.oncontextmenu)
+tecnotutoshd.net##+js(acs, disableselect, reEnable)
+
+! https://github.com/NanoMeow/QuickReports/issues/783
+ruwix.com##+js(nostif, NoAd, 8000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5107
+revolvermag.com##.emma-show
+revolvermag.com##body:style(overflow-x: hidden !important; overflow-y: scroll !important;)
+/emma-content-aggregates-prd.
+
+! https://github.com/uBlockOrigin/uAssets/issues/5108
+knowablemagazine.org##.modal
+knowablemagazine.org##body:style(overflow-x: hidden !important; overflow-y: scroll !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5109
+insidesources.com##.fancybox, .fancybox-overlay, .fancybox-wrap
+insidesources.com##html:style(overflow-x: hidden !important; overflow-y: scroll !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5110
+flashbak.com,geneticliteracyproject.org,marijuanamoment.net,naturalblaze.com,saludmovil.com,thebaffler.com,undark.org,wealthydoc.org###boxzilla-overlay, .boxzilla-container
+thebaffler.com##.boxzilla-overlay
+thebaffler.com##html,body:style(overflow: auto !important;)
+
+! baattv .com right click, select
+baattv.com##+js(acs, document.oncontextmenu)
+baattv.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! banglainsider .com right click / select / ctrl-U
+banglainsider.com##+js(acs, document.onkeydown)
+banglainsider.com##+js(acs, reEnable, killcopy)
+banglainsider.com##+js(ra, oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/799
+mangainn.net##.chapter-top-ads
+mangainn.net##.chapter-bottom-ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/5118
+||akamaized.net/assets/*/ig-canais-noticias.min.js$script,domain=ig.com.br
+
+! https://github.com/uBlockOrigin/uAssets/issues/5134
+airfactsjournal.com,newmatilda.com###newsletter-popup-container, #newsletter-popup-overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/5135
+kqed.org##[class*="modal"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/5136
+! https://github.com/uBlockOrigin/uAssets/issues/14337
+behance.net##[class*="ImageElement-blockPointerEvents-"]:style(pointer-events: auto !important)
+behance.net##[class*="Module-blockGridPointerEvents-"] .grid__item-image:style(pointer-events: auto !important)
+behance.net##[class*="Search-contentBlocker-"]
+behance.net###lightbox-wrap img:style(pointer-events: auto !important)
+behance.net##.Popup-popup-T3F
+
+! https://github.com/uBlockOrigin/uAssets/issues/5136
+zulily.com##+js(nostif, loginModal, 500)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3196#issuecomment-474058020
+kpopjjang.com##+js(aopw, stopPrntScr)
+kpopjjang.com##*::selection:style(background-color:#338FFF !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/840
+fantricks.com##+js(acs, jQuery, contextmenu)
+fantricks.com##body:style(-webkit-touch-callout: default !important;-webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5175
+steelersdepot.com##.modal, .modal-backdrop
+
+! https://github.com/uBlockOrigin/uAssets/issues/5176
+musicbusinessworldwide.com##.mb-interstitial
+
+! https://github.com/uBlockOrigin/uAssets/issues/5193
+listatv.pl##+js(ra, oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5224
+dzwignice.info##+js(aeld, contextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/885
+rp5.by##+js(nostif, (), 700)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5244
+psychologiazycia.com##+js(acs, document.oncontextmenu)
+psychologiazycia.com##+js(acs, disableselect, reEnable)
+psychologiazycia.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5249
+bibliacatolica.com.br##+js(aopr, getSelection)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2692
+script-stack.com##+js(aeld, contextmenu)
+
+! mio .to right click, select
+mio.to##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+mio.to##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5276
+priberam.org##+js(aopr, document.documentElement.oncopy)
+
+! https://github.com/NanoMeow/QuickReports/issues/914
+thedisconnect.co###notice-root
+thedisconnect.co##*:style(filter: none !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5280
+breakingdefense.com###simplemodal-container, #simplemodal-overlay
+breakingdefense.com##body:style(overflow-x: hidden !important; overflow-y: scroll !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5281
+theintercept.com###offer-0-lwmcg
+theintercept.com###third-party--viewport-takeover
+||prod.theintercept.com^$subdocument,1p
+theintercept.com##.Post-body--truncated:style(max-height: unset !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5282
+salary.com###sgpb-popup-dialog-main-div-wrapper, .sgpb-theme-1-overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/5284
+mlbshop.com##.modal, .modal-backdrop, .modal-wrapper
+
+! https://github.com/uBlockOrigin/uAssets/issues/5285
+fearlesssalarynegotiation.com##.seva-overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/5286
+postandcourier.com##.tp-backdrop, .tp-modal
+
+! annoying grammarly overlay / popup spellcheck .net,spellchecker .net,spellweb .com
+! https://github.com/uBlockOrigin/uAssets/issues/5953
+*/bioep.js$script,domain=~tomshw.it
+tomshw.it,wizcase.com##+js(nostif, bioEp.showPopup)
+! https://github.com/uBlockOrigin/uAssets/issues/7699
+ionos.de##body:style(overflow: auto !important)
+ionos.de###bio_ep
+ionos.de###bio_ep_bg
+
+! https://github.com/NanoMeow/QuickReports/issues/852
+yoututosjeff.es##^script:has-text(oncontextmenu)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/300
+@@||byggahus.se^$ghide
+byggahus.se###ad-zone-panorama
+
+! https://github.com/uBlockOrigin/uAssets/issues/5317
+autoblog.com##.modal, .modal-backdrop
+autoblog.com##body:style(overflow-x: hidden !important; overflow-y: scroll !important; padding-right: 0 !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5312
+||emeraldchat.com/user_is_temp
+||emeraldchat.com/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/5305#issuecomment-481954139
+cepuluh.com##+js(ra, oncontextmenu|onkeydown|onmousedown)
+
+! https://github.com/NanoMeow/QuickReports/issues/1324
+@@||globalnews.ca^$ghide
+globalnews.ca##.ad-container
+globalnews.ca###headerAd
+
+! https://github.com/uBlockOrigin/uAssets/issues/5321
+dailymail.co.uk##^script:has-text(We think our Android)
+!#if env_firefox
+dailymail.co.uk#@#+js(aopr, confirm)
+!#endif
+!#if env_mobile
+dailymail.co.uk##+js(aopr, confirm)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/5354
+fmovies.*#@#.fa-rss
+
+! https://github.com/uBlockOrigin/uAssets/issues/5355
+software-on.com##*::selection:style(background-color:#338FFF!important)
+software-on.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5356
+linkedin.com##.global-alert--yield.global-alert, #global-alert-queue
+
+! https://github.com/uBlockOrigin/uAssets/issues/5305#issuecomment-485058027
+ke-1.com##+js(ra, oncontextmenu|onkeydown|onmousedown)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5305#issuecomment-485058376
+l2gamers.cl##+js(aopw, document.oncontextmenu)
+l2gamers.cl##+js(aopw, document.onkeydown)
+
+! right click select https://github.com/NanoMeow/QuickReports/issues/1047
+husseinezzat.com##+js(aeld, contextmenu)
+husseinezzat.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+husseinezzat.com##+js(aeld, keydown)
+
+! https://github.com/uBlockOrigin/uAssets/issues/186#issuecomment-486142318
+wired.co.uk##+js(set, ads_not_blocked, true)
+
+! https://github.com/NanoMeow/QuickReports/issues/1073
+polygon.com##+js(nostif, adsBlocked)
+
+! https://github.com/NanoMeow/QuickReports/issues/1071
+twinkietown.com##+js(nostif, adsBlocked)
+
+! devtools https://github.com/uBlockOrigin/uAssets/issues/5450
+javsubtitle.co##^script:has-text(debugger)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5305#issuecomment-487302508
+statelibrary.us##+js(aopr, document.oncontextmenu)
+statelibrary.us##+js(aeld, keydown, disable_in_input)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=42960
+tv2.no###aabl-container
+
+! https://github.com/NanoMeow/QuickReports/issues/1114
+@@||dcdirtylaundry.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/1126
+@@||sostariffe.it^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5489#issuecomment-489295062
+amlesson.ru##+js(aopw, disable_keystrokes)
+amlesson.ru##+js(aopw, disableSelection)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5526
+infomoney.com.br##+js(aopr, addLink)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5530
+playonlinux.com##+js(acs, $, load)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5536
+tabonitobrasil.*##+js(aopr, disableSelection)
+tabonitobrasil.*##+js(aopw, document.oncontextmenu)
+tabonitobrasil.*##+js(aeld, keydown, preventDefault)
+tabonitobrasil.*##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5538
+tunovelaligera.com##+js(acs, document.addEventListener, copy)
+tunovelaligera.com##+js(acs, document.oncontextmenu)
+tunovelaligera.com##+js(aopr, mdp_appender)
+tunovelaligera.com##+js(aopw, disable_hot_keys)
+tunovelaligera.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5489#issuecomment-489892660
+auepaisagismo.com,auepaisajismo.com##body:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2101#issuecomment-491625176
+zdnet.de##+js(aopr, can_i_run_ads)
+
+! https://github.com/NanoMeow/QuickReports/issues/1209
+cinemablend.com##+js(aopr, __cmpGdprAppliesGlobally)
+
+! putlockerfun .com unlock the video
+putlockerfun.com##+js(aopr, bizpanda)
+
+! bigulnews .tv right click, select, ctrl-U
+bigulnews.tv##+js(aeld, /contextmenu|keydown|keyup|copy/)
+bigulnews.tv##+js(aopw, stopPrntScr)
+bigulnews.tv##*::selection:style(background-color:#338FFF!important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5613
+@@||metabattle.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5615
+targetstudy.com##+js(aopw, stopSelect)
+
+! discord's "give nitro" button
+discordapp.com##[class^="buttonWrapper"][tabindex="2"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/5643
+gq-magazine.co.uk##+js(set, ads_not_blocked, true)
+
+! turbolab .it anti adb warning
+turbolab.it##+js(nostif, warning)
+
+! https://github.com/NanoMeow/QuickReports/issues/1311
+medicalnewstoday.com##.sticky_ad_container
+
+! https://github.com/uBlockOrigin/uAssets/issues/5759
+!#if env_firefox
+youtube.com##.no-scroll #page-manager:style(margin-top: 0px !important)
+!#endif
+! https://github.com/uBlockOrigin/uAssets/issues/5911
+youtube.com##ytd-popup-container > .ytd-popup-container > #contentWrapper > .ytd-popup-container[position-type="OPEN_POPUP_POSITION_BOTTOMLEFT"]
+m.youtube.com###mealbar\:3 > ytm-mealbar.mealbar-promo-renderer
+! https://www.reddit.com/r/uBlockOrigin/comments/15x6ei7/are_there_filters_to_block_this_youtube_premium/
+youtube.com##+js(set, ytInitialPlayerResponse.auxiliaryUi.messageRenderers.upsellDialogRenderer, undefined)
+youtube.com##+js(json-prune, auxiliaryUi.messageRenderers.upsellDialogRenderer)
+
+! https://github.com/NanoMeow/QuickReports/issues/1338
+buienradar.nl##+js(set, hideBannerBlockedMessage, true)
+buienradar.nl###adholderContainerHeader
+
+! https://github.com/uBlockOrigin/uAssets/issues/5769
+||lightboxcdn.com^$domain=foreignpolicy.com
+foreignpolicy.com##.fb_lightbox-lock:style(overflow-x: hidden !important; overflow-y: scroll !important;)
+foreignpolicy.com##.fb_lightbox-overlay-fixed.fb_lightbox-overlay
+
+! luoghidavedere .it right click, select
+luoghidavedere.it##+js(aopw, document.oncontextmenu)
+luoghidavedere.it##+js(acs, document.onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5831
+!#if env_firefox
+msn.com##p:style(-moz-user-select: text !important; -moz-user-drag: text !important;)
+!#endif
+
+! glamourmagazine.co.uk anti adb annoyance
+glamourmagazine.co.uk##+js(set, ads_not_blocked, true)
+
+! https://github.com/NanoMeow/QuickReports/issues/1394
+9xbuddy.com##+js(nostif, adsbygoogle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5855
+megatube.xxx##+js(ra, oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5856
+dostfilms.*,kimovil.*##*:style(-webkit-touch-callout: default!important; -webkit-user-drag: element!important; -webkit-user-select: text!important; -moz-user-select: text!important; -ms-user-select: text!important; user-select: text!important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5865
+taxo-acc.pl##+js(aeld, contextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/835
+lookmovie.ag##+js(nostif, __ext_loaded)
+
+! Medium subscribe to newsletter overlay
+! https://github.com/uBlockOrigin/uAssets/pull/5851
+! https://github.com/uBlockOrigin/uAssets/issues/6016
+500ish.com,artplusmarketing.com,atrium.co,backchannel.com,backstage.1blocker.com,badootech.badoo.com,bitcointechtalk.com,blog.bitsrc.io,bitwarden.com,blog.coinbase.com,blog.confiant.com,blog.devcolor.org,blog.growthhackers.com,blog.hiri.com,blog.ltse.com,blog.statebox.org,blog.twitch.tv,blog.waffle.io,bluerockpublicradio.com,bolt.io,boomsupersonic.com,bradfieldcs.com,brightthemag.com,broadcast.listennotes.com,checkio.org,citizen428.net,coach.me,codeburst.io,dave-bailey.com,discordapp.com,doist.com,doit-intl.com,dotandline.net,doublepulsar.com,economist.com,electricliterature.com,elidourado.com,esciencecenter.nl,faun.pub,fossa.io,freecodecamp.org,fritz.ai,getadblock.com,levelup.gitconnected.com,greylock.com,headmelted.com,helium.com,howwegettonext.com,iheart.com,injusticetoday.com,insightdatascience.com,iota.org,itnext.io,itsyourturnblog.com,jupyter.org,keepingstock.net,kiwi.com,learngoprogramming.com,learningbyshipping.com,ledwards.com,legalist.com,logrocket.com,mapbox.com,medium.com,melmagazine.com,mondaynote.com,newco.co,news.smugmug.com,nyulocal.com,ofdollarsanddata.com,okmeter.io,open.nytimes.com,javascript.plainenglish.io,postlight.com,prototypr.io,rainway.io,sagefy.org,signalvnoise.com,slack.engineering,slackhq.com,springboard.com,standardnotes.org,startupsventurecapital.com,stoplight.io,tech.buzzfeed.com,theabacus.io,theawl.com,thebigroundtable.com,thebillfold.com,thebolditalic.com,thecontrol.co,theringer.com,thinkprogress.org,thriveglobal.com,timeline.com,towardsdatascience.com,udacity.com,unpatent.co,usejournal.com,uxdesign.cc,uxplanet.org,warisboring.com,wearemel.com,whatahowler.com,x.company,blog.dp6.com.br,blog.angular.io,thetaoist.online,writingcooperative.com##.overlay:not(:has-text(Welcome back)):not(:has-text(write a response)):not(:has-text(Publish now))
+500ish.com,artplusmarketing.com,atrium.co,backchannel.com,backstage.1blocker.com,badootech.badoo.com,bitcointechtalk.com,blog.bitsrc.io,bitwarden.com,blog.coinbase.com,blog.confiant.com,blog.devcolor.org,blog.growthhackers.com,blog.hiri.com,blog.ltse.com,blog.statebox.org,blog.twitch.tv,blog.waffle.io,bluerockpublicradio.com,bolt.io,boomsupersonic.com,bradfieldcs.com,brightthemag.com,broadcast.listennotes.com,checkio.org,citizen428.net,coach.me,codeburst.io,dave-bailey.com,discordapp.com,doist.com,doit-intl.com,dotandline.net,doublepulsar.com,economist.com,electricliterature.com,elidourado.com,esciencecenter.nl,faun.pub,fossa.io,freecodecamp.org,fritz.ai,getadblock.com,levelup.gitconnected.com,greylock.com,headmelted.com,helium.com,howwegettonext.com,iheart.com,injusticetoday.com,insightdatascience.com,iota.org,itnext.io,itsyourturnblog.com,jupyter.org,keepingstock.net,kiwi.com,learngoprogramming.com,learningbyshipping.com,ledwards.com,legalist.com,logrocket.com,mapbox.com,medium.com,melmagazine.com,mondaynote.com,newco.co,news.smugmug.com,nyulocal.com,ofdollarsanddata.com,okmeter.io,open.nytimes.com,javascript.plainenglish.io,postlight.com,prototypr.io,rainway.io,sagefy.org,signalvnoise.com,slack.engineering,slackhq.com,springboard.com,standardnotes.org,startupsventurecapital.com,stoplight.io,tech.buzzfeed.com,theabacus.io,theawl.com,thebigroundtable.com,thebillfold.com,thebolditalic.com,thecontrol.co,theringer.com,thinkprogress.org,thriveglobal.com,timeline.com,towardsdatascience.com,udacity.com,unpatent.co,usejournal.com,uxdesign.cc,uxplanet.org,warisboring.com,wearemel.com,whatahowler.com,x.company,blog.dp6.com.br,blog.angular.io,thetaoist.online,writingcooperative.com##html.u-overflowHidden:style(overflow-y: scroll !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6015
+500ish.com,artplusmarketing.com,atrium.co,backchannel.com,backstage.1blocker.com,badootech.badoo.com,bitcointechtalk.com,blog.bitsrc.io,bitwarden.com,blog.coinbase.com,blog.confiant.com,blog.devcolor.org,blog.growthhackers.com,blog.hiri.com,blog.ltse.com,blog.statebox.org,blog.twitch.tv,blog.waffle.io,bluerockpublicradio.com,bolt.io,boomsupersonic.com,bradfieldcs.com,brightthemag.com,broadcast.listennotes.com,checkio.org,citizen428.net,coach.me,codeburst.io,dave-bailey.com,discordapp.com,doist.com,doit-intl.com,dotandline.net,doublepulsar.com,economist.com,electricliterature.com,elidourado.com,esciencecenter.nl,faun.pub,fossa.io,freecodecamp.org,fritz.ai,getadblock.com,levelup.gitconnected.com,greylock.com,headmelted.com,helium.com,howwegettonext.com,iheart.com,injusticetoday.com,insightdatascience.com,iota.org,itnext.io,itsyourturnblog.com,jupyter.org,keepingstock.net,kiwi.com,learngoprogramming.com,learningbyshipping.com,ledwards.com,legalist.com,logrocket.com,mapbox.com,medium.com,melmagazine.com,mondaynote.com,newco.co,news.smugmug.com,nyulocal.com,ofdollarsanddata.com,okmeter.io,open.nytimes.com,javascript.plainenglish.io,postlight.com,prototypr.io,rainway.io,sagefy.org,signalvnoise.com,slack.engineering,slackhq.com,springboard.com,standardnotes.org,startupsventurecapital.com,stoplight.io,tech.buzzfeed.com,theabacus.io,theawl.com,thebigroundtable.com,thebillfold.com,thebolditalic.com,thecontrol.co,theringer.com,thinkprogress.org,thriveglobal.com,timeline.com,towardsdatascience.com,udacity.com,unpatent.co,usejournal.com,uxdesign.cc,uxplanet.org,warisboring.com,wearemel.com,whatahowler.com,x.company,blog.dp6.com.br,blog.angular.io,thetaoist.online,writingcooperative.com###root > div > div:has-text(Get one more story in your member)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20745
+! https://github.com/uBlockOrigin/uAssets/issues/18854#issuecomment-1678665089
+! https://www.reddit.com/r/uBlockOrigin/comments/16xeboi/
+! https://github.com/uBlockOrigin/uAssets/issues/21786
+500ish.com,artplusmarketing.com,atrium.co,backchannel.com,backstage.1blocker.com,badootech.badoo.com,bitcointechtalk.com,blog.bitsrc.io,blog.inkdrop.app,bitwarden.com,blog.coinbase.com,blog.confiant.com,blog.devcolor.org,blog.growthhackers.com,blog.hiri.com,blog.ltse.com,blog.statebox.org,blog.twitch.tv,blog.waffle.io,bluerockpublicradio.com,bolt.io,boomsupersonic.com,bradfieldcs.com,brightthemag.com,broadcast.listennotes.com,checkio.org,citizen428.net,coach.me,codeburst.io,dave-bailey.com,discordapp.com,doist.com,doit-intl.com,dotandline.net,doublepulsar.com,economist.com,electricliterature.com,elidourado.com,esciencecenter.nl,faun.pub,fossa.io,freecodecamp.org,fritz.ai,getadblock.com,levelup.gitconnected.com,greylock.com,headmelted.com,helium.com,howwegettonext.com,iheart.com,injusticetoday.com,insightdatascience.com,iota.org,itnext.io,itsyourturnblog.com,jupyter.org,keepingstock.net,kiwi.com,learngoprogramming.com,learningbyshipping.com,ledwards.com,legalist.com,logrocket.com,mapbox.com,medium.com,melmagazine.com,mondaynote.com,newco.co,news.smugmug.com,nyulocal.com,ofdollarsanddata.com,okmeter.io,open.nytimes.com,javascript.plainenglish.io,postlight.com,proandroiddev.com,prototypr.io,rainway.io,sagefy.org,signalvnoise.com,slack.engineering,slackhq.com,springboard.com,standardnotes.org,startupsventurecapital.com,stoplight.io,tech.buzzfeed.com,theabacus.io,theawl.com,thebigroundtable.com,thebillfold.com,thebolditalic.com,thecontrol.co,theringer.com,thinkprogress.org,thriveglobal.com,timeline.com,towardsdatascience.com,udacity.com,unpatent.co,usejournal.com,uxdesign.cc,uxplanet.org,warisboring.com,wearemel.com,whatahowler.com,x.company,blog.dp6.com.br,blog.angular.io,thetaoist.online,writingcooperative.com##+js(trusted-set-local-storage-item, 'lo-non-moc-membership-upsell|dismissed-at', $now$)
+blog.inkdrop.app##+js(trusted-set-local-storage-item, '201805-policy|accepted', 1)
+
+! https://github.com/NanoMeow/QuickReports/issues/1417 enable text select
+chimica-online.it##+js(aopr, disableselect)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5882
+coag.pl,quicksleeper.pl##+js(aopr, document.oncontextmenu)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43213
+dispatch.com##.tp-modal
+dispatch.com##.tp-active.tp-backdrop
+dispatch.com##body:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5913
+elektro-plast.com.pl##+js(ra, oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5916
+lifo.gr##+js(nostif, slideout)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5911
+australianfrequentflyer.com.au##.focus-guest-alert
+
+! https://github.com/uBlockOrigin/uAssets/issues/5911
+dev.mysql.com##.login-callout
+
+! https://github.com/NanoMeow/QuickReports/issues/1470
+anisearch.com#@##bannerads
+
+! https://github.com/uBlockOrigin/uAssets/issues/5911#issuecomment-511588571
+context.reverso.net##.blocked:style(filter: none !important;)
+context.reverso.net##.blocked .text:style(filter: none!important;-webkit-filter: none!important;)
+context.reverso.net###blocked-results-banner
+
+! https://github.com/NanoMeow/QuickReports/issues/1508
+hardware.info##body > div:nth-of-type(1) > div:has-text(adblocker)
+hardware.info##.sidebar_right_bottom
+hardware.info##.sidebar_right_top
+
+! https://github.com/uBlockOrigin/uAssets/issues/5970
+med1.de##+js(aopr, _sp_._networkListenerData)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5972
+m4ufree.tv##+js(aopr, document.oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/1527
+@@||mentalmars.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5979
+neowin.net##+js(aopr, _sp_.mms.startMsg)
+neowin.net##[class^="sp_veil"]
+neowin.net##[id^="sp_message_panel_id"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/5985
+lexlog.pl##+js(aopr, document.oncontextmenu)
+lexlog.pl##+js(aopr, document.onmousedown)
+lexlog.pl##+js(aopr, document.onselectstart)
+
+! https://github.com/NanoMeow/QuickReports/issues/1588
+@@||independent.ie^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6013
+softwaretestinghelp.com##.Campaign
+softwaretestinghelp.com##body:style(overflow: auto !important;)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43327&p=148979#p148979
+@@||nzz.ch^$ghide
+nzz.ch###adnz_maxiboard_1
+
+! https://github.com/uBlockOrigin/uAssets/issues/6021
+watson.de##+js(set, bAdBlocker, false)
+
+! https://github.com/NanoMeow/QuickReports/issues/292
+babel.com##[id^=adReplacement]
+babel.com##.infopub
+
+! https://github.com/NanoMeow/QuickReports/issues/1620
+@@||airbnbhell.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/4707
+clk.ink##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6050
+smashboards.com##+js(nosiif, height)
+
+! yeane .org right click, select, ctrl-U
+yeane.org##+js(acs, document.oncontextmenu)
+yeane.org##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/1655
+bitblokes.de##+js(acs, document.getElementsByTagName, null)
+bitblokes.de##[href^="https://airvpn.org/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/6073
+recantodasletras.com.br##+js(aopr, RL.licenseman.init)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6093
+@@||cdnjs.cloudflare.com/ajax/libs/blockadblock/*/blockadblock.min.js$script,domain=starblast.io
+@@||starblast.io^$ghide
+*$script,redirect-rule=noopjs,domain=starblast.io
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43420
+vedbex.com##.in.fade
+vedbex.com##body:style(overflow: auto !important;)
+||vedbex.com/*banners$image
+||vedbex.com/*/sponsers$image
+
+! https://github.com/NanoMeow/QuickReports/issues/1709
+||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs,domain=files2zip.com
+files2zip.com##div.black.banner
+
+! https://www.reddit.com/r/uBlockOrigin/comments/cvm6pn/how_to_get_rid_of_blurred_text_on_websites_such/
+enotes.com##.obscured:style(color: black !important;text-shadow: none !important; filter: none !important)
+enotes.com##.paywall-mount
+
+! https://github.com/uBlockOrigin/uAssets/issues/6206
+mtbtutoriales.com##+js(aopw, reEnable)
+mtbtutoriales.com##+js(acs, document.oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/1396
+@@||wired.com^$ghide
+wired.com##.ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/6240
+news.chosun.com##+js(aeld, copy, getSelection)
+
+! https://github.com/MajkiIT/polish-ads-filter/issues/14597#issuecomment-528321503
+portalwrc.pl##+js(aeld, contextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/1780
+@@||belfasttelegraph.co.uk^$ghide
+
+! https://answersafrica .com/joe-bonamassa-bio-wife-net-worth-girlfriend.html right click - select - copy - ctrl-U
+answersafrica.com##+js(acs, document.oncontextmenu)
+answersafrica.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6273
+zerodot1.gitlab.io##+js(set-constant, document.oncontextmenu, undefined)
+zerodot1.gitlab.io##+js(ra, oncontextmenu|onselectstart|ondragstart)
+zerodot1.gitlab.io##+js(set-constant, alert, trueFunc)
+zerodot1.gitlab.io##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! thewpclub .net right click, select, copy
+/wp-content/plugins/content-protector-pack/*
+
+! https://github.com/NanoMeow/QuickReports/issues/1822
+tomsguide.com##+js(aopr, _sp_._networkListenerData)
+
+! https://github.com/NanoMeow/QuickReports/issues/1485#issuecomment-531303011
+pluspremieres.nz##+js(ra, oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/1832
+@@||flightaware.com^$ghide
+
+! https://www.reddit.com/r/uBlockOrigin/comments/d5ekq0/antiadblock_detected_wwwlesoirbe/
+lesoir.be##+js(aopr, abStyle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6318
+xe.gr##+js(nostif, modal)
+
+! https://github.com/NanoMeow/QuickReports/issues/1865
+@@||typing-speed.net^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/1867
+plagiarisma.net###noty_bottom_layout_container
+
+! https://github.com/uBlockOrigin/uAssets/issues/6323
+felico.pl##+js(acs, document.oncontextmenu)
+
+! practicetestgeeks .com right click, select, copy
+practicetestgeeks.com##+js(acs, document.oncontextmenu)
+practicetestgeeks.com##+js(acs, document.onselectstart)
+practicetestgeeks.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6341
+chowhound.com##.fb_lightbox-overlay
+chowhound.com##.preloaded_lightbox
+chowhound.com##.fb_lightbox-lock:style(overflow-x: hidden !important; overflow-y: scroll !important;)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43618
+bold.dk##+js(acs, eval, abd)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43617
+liverpool.no##+js(nostif, offsetHeight)
+
+! mainframestechhelp .com right click
+mainframestechhelp.com##+js(aopr, document.oncontextmenu)
+mainframestechhelp.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! right click, select, copy mainframegurukul .com/srcsinc/drona/programming/languages/jcl/sort/sort-outrec-jcl.html
+mainframegurukul.com##+js(ra, oncontextmenu|onselectstart|ondragstart)
+
+! https://github.com/NanoMeow/QuickReports/issues/1933
+@@||as.com^$ghide
+as.com##.publi
+
+! https://github.com/uBlockOrigin/uAssets/issues/6363
+digicular.com##html:style(overflow: hidden !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6359#issuecomment-536212648
+1009thecat.com,1013katy.com,1013themix.com,1015jackfm.com,1015khits.com,1015thefox.com,1017thebeach.com,1017theteam.com,1019hot.com,1019online.com,1019thekeg.com,101thefox.net,101wkqx.com,1021nashicon.com,1021thefox.com,1023thewolf.com,1025jackfm.com,1027thevibe.com,1029nashicon.com,102thebear.com,1031nowfm.com,1031radiom.com,1035memphis.com,1035thegame.com,1035wrbo.com,1037nash.com,1039bobfm.com,1039wvbo.com,1041wdlt.com,1043thebridge.com,1043thebridge.net,1043thevibe.com,1045thedan.com,1045thezone.com,1045wjjk.com,1047krez.com,1049nashicon.com,1049thehits.com,104thehawk.com,1050talk.com,1053classichits.com,1053hotfm.com,1053thebear.com,1053thepoint.com,1053thepoint.net,1053wow.com,1055kbuck.com,1055thecat.com,1057kokz.com,1057nowfm.com,1057thebear.com,1057thex.com,1057thexrocks.com,1061theunderground.com,1063spinfm.com,1063thevibe.com,1063wovo.com,1065theticket.com,1067thekrewe.com,106x.com,1070wnct.com,1071bobfm.com,1071thepeak.com,1071thepoint.com,1073wsjy.com,1075nowfm.com,1075thegame.com,1077lakefm.com,1077thebone.com,1077theisland.com,1079nashicon.com,107countrypsk.com,107nashicon.com,1090kaay.com,1220wkrs.com,1230espnsports.com,1230theteam.com,1280wnam.com,1290wlby.com,1320thefan.com,1340wmsa.com,1430wcmy.com,1450kven.com,1480kyos.com,1490wosh.com,1510kga.com,1590walg.com,1620thezone.com,1700thechamp.com,2hoursmattpinfield.com,600wrqx.com,600wsom.com,610knml.com,630wpro.com,640wxsm.com,660wxqw.com,680thefan.com,770kkob.com,790business.com,790wpic.com,810whb.com,860kkat.com,860utahsbigtalker.com,900theticket.com,921theticket.com,923krst.com,923thewolf.com,925nashicon.com,925thebear.com,925thewolf.com,927bobfm.com,929peakfm.com,929thewave.com,929wbpm.com,92kqrs.com,92profm.com,92qnashville.com,931nashicon.com,931thebeat.com,933nashicon.com,935nashfm.com,935wrqn.com,937nashicon.com,937nowfm.com,937themountain.com,939northpoleradio.com,939theville.com,939xindy.com,93q.com,93wkct.com,93x.com,940wfaw.com,941ksky.com,941thebear.com,941thehits.com,945thedrive.com,945thehawkradio.com,947qdr.com,947wls.com,949kcmo.com,949radiojondeek.com,949starcountry.com,949theoutlaw.com,94rockradio.net,951nashfm.com,951kbby.com,953hlf.com,953thebeach.com,953thescore.com,955bobfm.com,955glo.com,955nashicon.com,955thefan.com,955thevibe.com,957kboy.com,957kpur.com,957nashicon.com,957thevibe.com,957thewolfonline.com,959therocket.com,95sx.com,95wiil.com,95x.com,961bbb.com,961jamz.com,961sox.com,961wsox.com,963nashicon.com,963thezone.com,963wdvd.com,967shinefm.com,969lacaliente.com,969thewolf.com,96key.com,96kzel.com,973eagle.com,973nashfm.com,975kabx.com,975thevibe.com,975wabd.com,979nashfm.com,979espnradio.com,979nashicon.com,979wvok.com,979x.com,97bht.com,97rock.com,980waav.com,980wxlm.com,981thebeat.com,981themax.com,981thevalley.com,983nashicon.com,983thekeg.com,983vibe.com,983wlcs.com,985kissfm.net,989magicfm.com,989thebridge.com,98theticket.com,993kjoy.com,995thejock.com,995thewolf.com,997cyk.com,997cyk.org,997kmjj.com,997themix.com,997wpro.com,997wtn.com,999thebuzz.com,999thefoxrocks.com,999thehawk.com,99x.com,kjmo.com,nashfm100.com,nashfm923krst.com,nashfm1033.com,nashfm1055.com,nashfm929.com,nashfm931.com,nashfm941.com,nashfm949.com,nashfm981.com,nashfmwisconsin.com,nashicon989.com,v100rocks.com,albanymagic.com,alice1077.com,allthehitsb951.com,alt1019.com,alt1049albany.com,alt2k.com,alt923.com,alt98.com,am630.net,amarillosrockstation.com,americanpatriotmedia.com,annarbors107one.com,atlantasrockstation.com,atlsportsx.com,b106fm.com,b1073.com,b95.com,b979.net,b98.com,b985slo.com,b987.com,bakersfieldespn.com,bakersfieldespnsports.com,beach985.com,beachboogieandblues.com,bear104.com,big1013.com,bigcheese1079.com,bigcountry1073.com,bigdawg985.com,bigdog1067.com,bigfrog101.com,bigfroggy1053.com,bigtalk1490.com,blairgarner.com,blazin1023.com,blazin923.com,bloomingtonhits.com,bobfmspringfield.com,bowlinggreensam.com,bull973.com,bxr.com,caperadio1550.com,catcountry.com,catcountry96.com,catcountryvermont.com,cbssports1430.com,cbssportserie.com,cbssportsharrisburg.com,cbssportsradio1430.com,chicothunderheads.com,christmas989.com,ckrv.com,classicfox.com,classichits1033.com,classichitsmy1059.com,classichitswnyq.com,classy100.com,coast1013.com,coast973.com,country105fm.net,countrycountdownusa.com,countrylegends1059.com,countrymi.com,coyote1025.com,cumulusdigital.com,digitalsolutions201.com,e93fm.com,eagle97.com,eagle993.com,easy991.com,ed.fm,elizabethtownradio.com,energy939indy.com,espn1320columbia.com,espn910.com,espnhonolulu.com,espnlouisville.com,espnlv.com,espnradio1280.com,espnradio927.com,espnradio941.com,espnsyracuse.com,espnur.com,espnwestpalm.com,espnwilmington.com,fly92.com,fly923.com,fm102milwaukee.com,fm102one.com,fonzfm.com,forevereaston.com,forevermediayork.com,fox969.com,foxcincinnati.com,foxsportsredding.com,froggy1003.com,froggy101fm.com,froggy981.com,froggy99.net,froggycountry.net,froggyland.com,fuego1029.com,fun1013.com,fun969fm.com,generations1023.com,glory985.com,go106.com,goradioheartland.com,gospel900.com,gulf104.com,heaven1460.com,heaven983.com,hitkicker997.com,hitpage.com,hits931fm.com,hits96.com,hits965.com,hot1005.com,hot100blono.com,hot100nrv.com,hot101.com,hot102.net,hot1033.com,hot1039.com,hot1047fm.com,hot1057.com,hot1063.com,hot1067fm.com,hot1067pa.com,hot1077radio.com,hot92and100.com,hot933hits.com,hot941.com,hot967fm.com,hvradionet.com,i973hits.com,ilovethehits.com,indysmix.com,jammin999fm.com,jamz963.com,jox2fm.com,joxfm.com,k100country.com,k104online.com,k105country.com,k92radio.com,k983.com,kabc.com,kaok.com,kaperadio1550.com,katm.com,katt.com,kbcy.com,kber.com,kboi.com,kbul.com,kbull93.com,kcchiefsradio.com,kcheradio.com,kcmotalkradio.com,kcmxam.com,kennradio.com,kernradio.com,kesn1033.com,key101fm.com,kfru.com,kftx.com,kgfm.com,kgfw.com,kggo.com,kgmo.com,kgoradio.com,khay.com,khfm.com,khfm.org,khit1075.com,khop.com,khvl.com,kiimfm.com,kiss-1031.com,kix1029.com,kix106.com,kix96.com,kizn.com,kjjy.com,kjoy.com,kkcy.com,kkfm.com,kkgb.com,kkgl.com,kkoh.com,klif.com,klik1240.com,klin.com,klur.com,kmaj.com,kmaj1440.com,kmez1029.com,kmjnow.com,knbr.com,knek.com,kobfm.com,kpla.com,kpur107.com,kqfc.com,kqky.com,kqms.com,kqxy.com,krbe.com,krmd.com,krny.com,krrq.com,krush925.com,kruz1033.com,ksam1017.com,kscrhits.com,kscs.com,ksfo.com,kshasta.com,ksks.com,ksmb.com,ktcx.com,ktik.com,ktop1490.com,ktucam.com,kubaradio.com,kubb.com,kugn.com,kuzz.com,kuzzradio.com,kvor.com,kwin.com,kwwr.com,kxel.com,kxzz1580am.com,kyis.com,kykz.com,kzwafm.com,la103.com,laindomable.com,laleync.com,lanuevaomaha.com,lite102.com,literock105fm.com,love105fm.com,lvfoxsports.com,magic1029fm.com,magic1039fm.com,magic1069.com,magic1073.com,magic1073fm.com,magic93fm.com,magic943fm.com,magic979wtrg.com,magic995abq.com,majic97monroe.com,majicspace.com,maverick1023.com,max94one.com,maxrocks.net,mega979.com,mgeradio.com,milwaukeesparty.com,mix103.com,mix1077albany.com,mix965.net,modernrock987.com,montanassuperstation.com,movin993.com,muskegonnashicon.com,my1059.com,my961.com,myblono.com,mycolumbiabasin.com,myfroggy95.com,mykiss973.com,mymagic106.com,mymix1051.com,mymix1061.com,mymix961.com,mystar98.com,nashcountrydaily.com,nashdetroit.com,nashfm1007.com,nashfm1011.com,nashfm1017.com,nashfm1025.com,nashfm1027.com,nashfm1061.com,nashfm1065.com,nashfm923.com,nashfm937.com,nashfm943.com,nashfm951.com,nashfm973.com,nashfm991.com,nashfmgreenbay.com,nashfmsjo.com,nashnightslive.net,nashpensacola.com,ncsportsradio.com,nepasespnradio.com,neuhoffmedia.com,neuhoffmedialafayette.com,newcountry963.com,newsradio1029.com,newsradio1440.com,newsradioflorida.com,newsradiokkob.com,newsserver1.com,newsserver2.com,newsserver3.com,newstalk1030.com,newstalk1290koil.com,newstalk730.com,newstalk987.com,newstalkwsba.com,newswebradiocompany.net,now937.com,nrgmedia.com,nrq.com,og979.com,okiecountry1017.com,oldiesz104.com,ottawaradio.net,pensacolasjet.com,peorias923.com,picklefm.com,pikefm.com,planet1067.com,pmbbroadcasting.com,pmbradio.com,power1021.com,power103.com,power1057.com,power1069fm.com,power923.com,power94radio.com,power955.com,powerhits95.com,powerslc.com,praise1025fm.com,purerock96.com,q1005.com,q1031fm.com,q105.fm,q1055.com,q1061.com,q106dot5.com,q973radio.com,q97country.com,q98fm.com,q997atlanta.com,q99fm.com,radio1039ny.com,radiorockriver.com,radiowoodstock.com,realcountry1280whvr.com,realcountryhv.com,red1031.com,red945.com,rewind1019.com,rickandsasha.com,rock101.net,rock1015.com,rock103albany.com,rock103rocks.com,rock106.net,rock107fm.com,rock108.com,rock945vt.com,rockdaily.com,rocknews.com,rockofsavannah.com,rockofsavannah.net,softrock941.com,southernillinoisnow.com,southernsportstoday.com,sportsanimal920.com,sportsanimalabq.com,sportscapitoldc.com,sportshubtriad.com,sportsradio1270.com,sportsradio1440.com,sportsradio1560.com,sportsradio590am.com,sportsradio740.com,sportsradio967.com,sportsradio970.com,sportsradiobeaumont.com,sportsradioberks.com,sportsradiownml.com,star98.net,starfm1023.com,starsplash.com,stevegormanrocks.com,sunny1031.com,sunny1069fm.com,sunny923.com,sunny983.com,sunnymuskegon.com,supertalk1570.com,sweet985.com,talk104fm.com,talk995.com,talkradio1007.com,tbhpod.com,teammyrtlebeach.com,test107.com,thebear925.com,thebigjab.com,thebigstation93blx.com,theblairgarnershow.com,theconclave.com,thefan1075.com,thefanfm.com,thegame541.com,thehippo.com,thehot1039.com,thenewhotfm.com,thenewpulsefm.com,thepointontheweb.com,therebelrocks.com,therocket951.com,therockstationz93.com,thescore1260.com,thesportsanimal.com,theticket.com,theticket1007.com,theticket102.com,theticket1590.com,theticketmi.com,thetybentlishow.com,thevalley981.com,thewolf1051.com,thewolf951.com,thisisqmusic.com,thunder1073.com,triadsports.com,tuligaradio.com,umpsports.com,v100fm.com,v1033.com,vermilioncountyfirst.com,vermillioncountyfirst.com,w3dcountry.com,w4country.com,wa1a.com,wabcradio.com,walk975.com,walkradio.com,warm1033.com,warm98.com,waysam.com,wbap.com,wbbw.com,wbmq.net,wbnq.com,wbpm929.com,wbpmfm.com,wbwn.com,wcbm.com,wceiradio.com,wcfx.com,wchv.com,wclg.com,wcoapensacola.com,wcpqfm.com,wcpt820.com,wcpt820.net,wcpt820am.com,wcpt820am.net,wcptam.com,wcptam.net,wcptamfm.com,wcptamfm.net,wcptamfm.org,wcpyfm.com,wctk.com,wddoam.com,wden.com,wdml.com,wdst.com,wdst.org,wdzz.com,wedg.com,werkfm.net,werkradio.com,wfasam.com,wfav951.com,wfmd.com,wfms.com,wfnc640am.com,wfre.com,wftw.com,wgh1310.com,wghsolidgold.com,wglx.com,wgni.com,wgow.com,wgowam.com,wgrr.com,whdg.com,wheelz1045.com,whli.com,whrpfm.com,whtt.com,whud.com,wild1029.com,wild1049hd.com,wild1061.com,wild993fm.com,wildcatsradio1290.com,wink104.com,winxfm.com,wiog.com,wiov.com,wiov985.com,wivk.com,wivr1017.com,wizn.com,wjbc.com,wjcw.com,wjez.com,wjjr.net,wjoxam.com,wjr.com,wkav.com,wkbethepoint.com,wkga975.com,wkhx.com,wkmoradio.com,wkol.com,wkrs.com,wkrufm.com,wksm.com,wkydeportes.com,wlaq1410.com,wlav.com,wlbc.com,wlevradio.com,wlkwradio.com,wlok.com,wlsam.com,wlum.com,wlup.com,wlwi.com,wmac-am.com,wmal.com,wmqa.com,wncv.com,wogb.fm,woko.com,womg.com,woodstockbroadcasting.com,woodstockcommunication.com,woodstockradio.net,woodstocktv.net,wovo1063.com,wovofm.com,wqut.com,wqvealbany.com,wrganews.com,wrgm.com,wrlo.com,wrr101.com,wrul.com,wsba910.com,wsfl.com,wsjssports.com,wskz.com,wsyb1380am.com,wtka.com,wtma.com,wtrxsports.com,wttlradio.com,wuuqradio.com,wvel.com,wvli927.com,wvlkam.com,wvnn.com,wwck.com,wwki.com,wwqq101.com,wxfx.com,wxkr.com,wxpkfm.com,wynn1063.com,wzpl.com,wzyp.com,wzzl.com,x1051kc.com,x95radio.com,xs961.com,xtrasports1300.com,y-103.com,y101hits.com,y102montgomery.com,y1065.com,yesfm.net,z1023online.com,z1029.com,z1075.com,z937.com,z93jamz.com,z96.com,z971.com,zone1150.com,zrock103.com,zrockfm.com##+js(set, TGMP_OBJ_CACHE.tritonsee_client.playAttemptsCount, trueFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6365
+badzjeszczelepszy.pl##+js(aopr, document.onmousedown)
+badzjeszczelepszy.pl##+js(aopr, document.onselectstart)
+badzjeszczelepszy.pl##+js(aopr, ga_ExitPopup3339)
+
+! https://github.com/NanoMeow/QuickReports/issues/1941
+androidweblog.com##+js(aeld, , t.preventDefault)
+
+! https://github.com/NanoMeow/QuickReports/issues/1948
+pureinfotech.com##+js(acs, jQuery, ai_adb)
+
+! https://github.com/NanoMeow/QuickReports/issues/1938
+free-mp3-download.net##+js(aeld, /^(contextmenu|keydown)$/)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43651
+fairyabc.com##+js(nostif, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6397
+tunein.com##.dark-theme-dialog__dialogBody___106Di
+tunein.com##.dark-theme-dialog__dialogBody___106Di:upward(4)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6398
+mountaintopwebdesign.com###wmpci-popup-wrp
+mountaintopwebdesign.com##html:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6405
+otvfoco.com.br##+js(aopr, addLink)
+
+! balticlivecam .com anti adb annoyance
+balticlivecam.com##+js(acs, document.getElementById, none)
+
+! legionprogramas .org right click, select
+legionprogramas.org##+js(acs, document.oncontextmenu)
+legionprogramas.org##+js(aopw, document.onselectstart)
+
+! clasicotas .org right click, select
+clasicotas.org##+js(ra, oncontextmenu|onselectstart|ondragstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6421
+portalportuario.cl##+js(aopr, addLink)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/41965#issuecomment-539653929
+r7.com##.floating.share-btn
+
+! https://github.com/uBlockOrigin/uAssets/issues/6426
+cronista.com##+js(aeld, copy, replaceCopiedText)
+
+! gamershit .altervista .org right click msg
+gamershit.altervista.org##+js(aopr, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4802
+@@||minecraft-schematics.com^$ghide
+minecraft-schematics.com##.adsbygoogle
+minecraft-schematics.com##[href^="http://www.pingperfect.com/aff.php"]
+
+! theitaliantimes .it right click, select, copy ..
+theitaliantimes.it##+js(ra, oncontextmenu|onselectstart|ondragstart|oncopy|oncut|onpaste|onbeforecopy)
+
+! gagetmatome .com right click, select, copy
+gagetmatome.com##+js(aopr, document.oncontextmenu)
+gagetmatome.com##+js(acs, document.onselectstart)
+gagetmatome.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6461 + anti-adblock banner
+voxc.org##+js(aopw, document.oncontextmenu)
+voxc.org##.banner
+
+! anisubindo.video right click, select, copy
+anisubindo.*##+js(aeld, keydown, preventDefault)
+anisubindo.*##+js(aopr, document.onkeydown)
+anisubindo.*##+js(aopr, document.oncontextmenu)
+anisubindo.*##+js(aopw, disableSelection)
+
+! mbahhanif .site select / copy
+mbahhanif.site##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! worldofbitco .in select - copy
+worldofbitco.in##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6471
+glitterphoto.net##.adBlocked
+
+! https://github.com/NanoMeow/QuickReports/issues/2119
+@@||dumpert.nl^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2123
+@@||beinsports.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2143
+@@||mizonatv.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6489
+serwis-zamkow.com##+js(acs, document.oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/2154
+nakedcapitalism.com##+js(aopw, ABD)
+
+! https://github.com/NanoMeow/QuickReports/issues/2164
+govtech.com###interstitial
+
+! https://github.com/uBlockOrigin/uAssets/issues/6497
+lublin.eu##+js(aeld, contextmenu)
+
+! right click tekloggers .com/2019/10/iklan-anime-pocari-sweat-ternyata.html
+tekloggers.com##+js(ra, oncontextmenu|onkeydown|onmousedown)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6509
+molineuxmix.co.uk##+js(acs, $, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6520
+defenseone.com,govexec.com,nextgov.com,route-fifty.com##.interstitial
+defenseone.com,govexec.com,nextgov.com,route-fifty.com##body:style(overflow-x: auto !important; overflow-y: scroll !important; margin-right: 0 !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/2240
+foxnews.com##:xpath('//*[contains(text(),"blocking software")]/../../..')
+/google-funding-choices.js$script,domain=foxnews.com
+
+! nfltraderumors.co right click, select
+nfltraderumors.co##+js(aopw, ondragstart)
+nfltraderumors.co##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! blog.kwick.de right click select
+blog.kwick.de##+js(acs, jQuery, contextmenu)
+blog.kwick.de##+js(aopr, disableselect)
+blog.kwick.de##+js(aopr, document.onkeydown)
+
+! https://github.com/NanoMeow/QuickReports/issues/2257
+laptopmag.com##+js(aopr, _sp_.mms.startMsg)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6572
+windows101tricks.com##+js(aopr, __cmpGdprAppliesGlobally)
+windows101tricks.com##+js(set, better_ads_adblock, 0)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6575
+virpe.com##+js(aopr, document.oncontextmenu)
+virpe.com##+js(ra, onselectstart)
+
+! https://github.com/NanoMeow/QuickReports/issues/2296
+dreamlandresort.com##+js(aopr, alert)
+
+! https://github.com/NanoMeow/QuickReports/issues/2297
+hebrew4christians.com##+js(acs, document.oncontextmenu)
+hebrew4christians.com##+js(ra, onselectstart|ondragstart)
+hebrew4christians.com##+js(aopr, document.onselectstart)
+hebrew4christians.com##+js(aopw, disableSelection)
+
+! jpopsingles.eu right click, select, function keys
+! https://github.com/uBlockOrigin/uAssets/issues/17158#issuecomment-1526708731
+jpopsingles.eu##+js(aopw, stopPrntScr)
+jpopsingles.eu##+js(acs, document.oncontextmenu)
+jpopsingles.eu##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6594
+musixmatch.com##+js(ra, oncontextmenu, body, complete)
+musixmatch.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://reddit.com/r/uBlockOrigin/comments/dzzxp1
+! https://github.com/uBlockOrigin/uAssets/issues/12620
+ecosia.org##.notice
+ecosia.org##.result-snippet:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! ctrl key https://github.com/uBlockOrigin/uAssets/issues/6621
+yusepjaelani.blogspot.com##+js(aopr, document.onkeydown)
+
+! ghanatvon .com right click
+ghanatvon.com##+js(acs, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4910#issuecomment-560158237
+waaw.tv##+js(set, console.clear, trueFunc)
+
+! fanprojseries .com anti adb warning
+fanprojseries.com##+js(aopw, ai_adb_overlay)
+
+! sfweekly .com anti adb msg
+sfweekly.com##+js(aopw, ai_adb_overlay)
+
+! right click https://www.reddit.com/r/uBlockOrigin/comments/e7db1o/prevent_a_script_from_running_that_contains/
+onlystream.tv##+js(aeld, contextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/2454
+canondrivers.org##+js(acs, document.addEventListener)
+canondrivers.org##+js(acs, document.oncontextmenu, key)
+canondrivers.org##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6667
+skidrowreloaded.com##^script:has-text(copyprotect)
+!#if !cap_html_filtering
+skidrowreloaded.com##+js(rmnt, script, copyprotect)
+!#endif
+
+! https://github.com/NanoMeow/QuickReports/issues/2465
+magyarhang.org##+js(aopw, ai_adb)
+
+! adevarul .ro tricky copy text
+adevarul.ro##+js(aopr, addLink)
+
+! https://github.com/NanoMeow/QuickReports/issues/2469
+mobilarena.hu##+js(nosiif, 0x)
+mobilarena.hu##+js(nostif, 0x)
+! https://github.com/uBlockOrigin/uAssets/issues/6714
+gamepod.hu,itcafe.hu,prohardver.hu##+js(nostif, , 7000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6659
+hindipix.*,hqq.tv##+js(set, console.debug, trueFunc)
+hindipix.*,hqq.tv##+js(set, console.clear, trueFunc)
+
+! https://github.com/NanoMeow/QuickReports/issues/2476
+kusonime.com##+js(acs, document.oncontextmenu)
+kusonime.com##+js(acs, document.onkeydown)
+kusonime.com##+js(acs, addEventListener, which)
+
+! https://github.com/NanoMeow/QuickReports/issues/2487
+otakudesu.org##+js(acs, document.oncontextmenu)
+otakudesu.org##+js(acs, window.addEventListener, ctrlKey)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6683
+||maskmagazine.com/assets/substrate.png$image,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6585#issuecomment-565731774
+fcportables.com##+js(aeld, /^(contextmenu|copy|dragstart|selectstart)$/)
+
+! https://github.com/NanoMeow/QuickReports/issues/2504
+pehawe.me##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6701
+estadao.com.br##+js(aeld, copy)
+
+! https://github.com/NanoMeow/QuickReports/issues/2528
+kimkazandi.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+kimkazandi.com##.autoplay
+
+! https://github.com/NanoMeow/QuickReports/issues/2535
+minecraftforge.net##+js(nostif, body)
+
+! https://github.com/NanoMeow/QuickReports/issues/2545
+forum.nlmod.net##+js(acs, document.createElement, adblock)
+
+! impotsurlerevenu.or enable right click
+impotsurlerevenu.org##+js(aopr, alerte_declanchee)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6730#issuecomment-569165338
+myanimelist.net#?#.modal-content:-abp-has(.text > b:-abp-contains(Privacy Policy))
+
+! https://github.com/uBlockOrigin/uAssets/issues/6751
+ryuryuko.blog90.fc2.com##+js(aopw, initimg)
+ryuryuko.blog90.fc2.com##+js(ra, oncontextmenu|onCopy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6752
+feel-the-darkness.rocks##+js(aopr, document.oncontextmenu)
+feel-the-darkness.rocks##+js(aopr, document.onmousedown)
+feel-the-darkness.rocks##+js(aopr, disableSelection)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6759
+fontsfree.pro##+js(set, adBlock, false)
+
+! https://github.com/NanoMeow/QuickReports/issues/2601
+skidrowcodex.net##+js(aopw, stopPrntScr)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6767
+earnload.*##+js(set, blurred, false)
+
+! https://github.com/NanoMeow/QuickReports/issues/2622
+mdpr.jp##+js(ra, oncontextmenu|onmousedown|onselectstart)
+
+! https://github.com/NanoMeow/QuickReports/issues/2635
+theherald-news.com##+js(nostif, null)
+
+! https://github.com/NanoMeow/QuickReports/issues/2605
+insidermonkey.com##+js(aopr, ABD)
+
+! https://github.com/NanoMeow/QuickReports/issues/2640
+venea.net##+js(aeld, , ads)
+
+! https://github.com/NanoMeow/QuickReports/issues/2341
+@@||puhutv.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2665
+libgen.*##+js(nostif, appendMessage)
+
+! https://github.com/NanoMeow/QuickReports/issues/2680
+bricksrus.com##+js(aopr, document.oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/2682
+jacquieetmichel.net##+js(aopr, document.oncontextmenu)
+
+! ilturista .info select / copy
+ilturista.info##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! imaginetricks .com select / copy
+imaginetricks.com##body>div:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! sigma4pc .com select / copy
+sigma4pc.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! kurazone .net select copy
+kurazone.net##.post-body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/2707
+kurosave.com##+js(aopr, document.body.setAttribute)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7811
+! https://github.com/uBlockOrigin/uAssets/issues/11335
+keybr.com##+js(nostif, (), 5000)
+
+! https://github.com/NanoMeow/QuickReports/issues/2720
+mangaku.*##+js(acs, $, contextmenu)
+mangaku.*##+js(aeld, contextmenu)
+
+! edmontonjournal .com anti adb warning
+@@||edmontonjournal.com^$ghide
+
+! gamebanana anti adblock notice
+gamebanana.com##+js(aopr, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10888#issuecomment-1523943368
+reddit.com##[bundlename="desktop_rpl_nsfw_blocking_modal"]:remove()
+! https://github.com/easylist/easylist/issues/17354
+!#if !env_mobile
+reddit.com#@#body:not(.with-listing-chooser):style(overflow: visible !important; position: static !important;)
+reddit.com#@#body:style(pointer-events: auto !important; overflow: auto !important;)
+!#else
+reddit.com##body:style(overflow: auto !important;)
+!#endif
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/42495#issuecomment-574761083
+@@||metropoles.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6833
+fotor.com##+js(nostif, offsetHeight)
+fotor.com##._1Pece
+fotor.com##.guanggao_close_group
+
+! https://github.com/uBlockOrigin/uAssets/issues/6835
+searchenginejournal.com##+js(nostif, popup)
+
+! https://github.com/NanoMeow/QuickReports/issues/2767
+includehelp.com##+js(acs, document.getElementById, banner)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6843
+techopedia.com###subscriptionModal, .modal-backdrop
+techopedia.com##.modal-open:style(overflow: auto !important; padding-top: 0 !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6848
+uta-net.com##+js(aeld, /contextmenu|selectstart|copy/)
+||uta-net.com/reverse/user/phplib/img/1pix.gif$image
+sp.uta-net.com##+js(ra, oncontextmenu)
+sp.uta-net.com###kashi_layer
+sp.uta-net.com###kashi
+sp.uta-net.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/2787
+hedgeaccordingly.com##+js(aopw, ABD)
+
+! downloadtutorials .net right click, select, copy
+downloadtutorials.net##+js(aeld, /contextmenu|selectstart|copy/)
+
+! digitalsynopsis .com select, copy , f-keys
+||digitalsynopsis.com^$csp=style-src *;script-src *
+
+! https://github.com/NanoMeow/QuickReports/issues/2791
+bacaan.id##+js(aeld, copy)
+
+! https://github.com/NanoMeow/QuickReports/issues/2809
+dddance.party##+js(aeld, contextmenu)
+dddance.party##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/2811
+idmod.xyz##+js(acs, document.oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/2816
+citpekalongan.com##+js(ra, oncontextmenu|ondragstart|onselectstart|onkeydown|onmousedown)
+citpekalongan.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/769#issuecomment-577762899
+gembel9.xyz##+js(ra, oncontextmenu|ondragstart|onselectstart|onkeydown|onmousedown)
+
+! https://github.com/NanoMeow/QuickReports/issues/2818
+! dramaqu. work
+dramaqu.*##+js(acs, $, contextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/2830
+indcit.com##+js(acs, document.oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/2831
+bisablog.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6874
+atribuna.com.br##+js(ra, oncontextmenu|onkeydown)
+
+! https://github.com/NanoMeow/QuickReports/issues/2242
+ac-mo.com##+js(aopw, document.oncontextmenu)
+
+! vinaurl .in blocked keys
+vinaurl.*##+js(ra, onkeydown)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6877
+theregister.co.uk##+js(aopr, adtoniq)
+
+! https://www.reddit.com/r/firefox/comments/eu70aq/turn_off_ublock_origin_howaboutno/
+@@||merryjane.com/static/images/ads.png^$image,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6888
+diariodoiguacu.com.br##+js(ra, ondragstart|onselectstart)
+
+! timeforbitco .in select
+timeforbitco.in##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! fizyka .org unblock select copy
+fizyka.org##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/2869
+@@||readonepiece.com/wp-content/$script,1p
+
+! ymovies .to anti adb warning
+ymovies.*##.alert-danger.alert
+
+! https://github.com/NanoMeow/QuickReports/issues/2878
+adnan-tech.com##+js(ra, oncontextmenu)
+adnan-tech.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/2883
+ahzaa.net##.post-body:style(-webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+ahzaa.net##+js(aopr, document.oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/2882
+karyawanesia.com##+js(aopr, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6901
+zoom.com.br###exit-modal-signup, #overlay-modal
+
+! myschool-eng .com right click - select - copy - keys
+myschool-eng.com##+js(aeld, /contextmenu|copy|keydown/)
+myschool-eng.com##*:style(-webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6908
+ofuxico.com.br##+js(aeld, copy)
+
+! nzbstars .com right click
+nzbstars.com##+js(ra, oncontextmenu)
+
+! almasdarnews .com warning anti adb #2421
+almasdarnews.com##+js(acs, jQuery, ai_adb)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/78541
+*$xhr,redirect-rule=noopjs,domain=maxedtech.com
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=maxedtech.com
+@@||googlesyndication.com^$xhr,domain=maxedtech.com
+
+! ideaberita .com ctrl-u select
+ideaberita.com##+js(aopr, document.onkeydown)
+ideaberita.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! orangespotlight .com right click - select - copy
+orangespotlight.com##+js(aeld, /contextmenu|select|copy/)
+orangespotlight.com##*:style(-webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/2943
+tepat.id##+js(aeld, /^(contextmenu|keydown)$/)
+tepat.id##*::selection:style(background-color:#338FFF!important)
+
+! https://github.com/NanoMeow/QuickReports/issues/2944
+isikuota.co.id##*:style(-webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/49311
+nmac.to##.alert-errors.in.fade.alert
+
+! langitmovie .com right click, select
+langitmovie.com##+js(aopr, document.oncontextmenu)
+langitmovie.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! androidmakale .com right click - select
+androidmakale.com##+js(acs, document.oncontextmenu)
+androidmakale.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6931
+u.gg##+js(acs, document.getElementById, dataLayer)
+
+! mongri .net right click, copy
+mongri.net##+js(acs, document.oncontextmenu)
+mongri.net##+js(aopr, getSelection)
+
+! https://github.com/NanoMeow/QuickReports/issues/2963 right click, select, ctrl-u
+oceanof-games.com##+js(aopr, document.oncontextmenu)
+oceanof-games.com##+js(aopr, document.onkeydown)
+oceanof-games.com##+js(aopr, document.onselectstart)
+oceanof-games.com##+js(aopr, disableSelection)
+oceanof-games.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/2966
+download.ipeenk.com##+js(acs, document.oncontextmenu)
+download.ipeenk.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/2972
+livescience.com##+js(aopr, _sp_.mms.startMsg)
+
+! https://github.com/NanoMeow/QuickReports/issues/2979
+doranobi-fansub.id##+js(acs, jQuery, disable_hot_keys)
+doranobi-fansub.id##+js(acs, document.oncontextmenu)
+doranobi-fansub.id##+js(aopr, disable_copy)
+doranobi-fansub.id##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/2981
+@@||queer.pl^$ghide
+queer.pl#@#[class^="ad-"]
+queer.pl##.box-adv
+
+! https://github.com/NanoMeow/QuickReports/issues/2991
+ponselharian.com##+js(aopr, document.oncontextmenu)
+ponselharian.com##+js(aopr, document.onselectstart)
+ponselharian.com##+js(aopr, disableSelection)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6943
+itvn.pl,itvnextra.pl,kuchniaplus.pl,miniminiplus.pl,player.pl,ttv.pl,tvn.pl,tvn24.pl,tvn24bis.pl,tvn7.pl,tvnfabula.pl,tvnstyle.pl,tvnturbo.pl,x-link.pl,x-news.pl##+js(aeld, contextmenu, a)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6945
+@@||snipboard.io^$ghide
+
+! musicradar .com and other sites anti adb warning
+digitalcameraworld.com,guitarworld.com,musicradar.com##+js(aopr, _sp_.mms.startMsg)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6954
+alexeiportableapp.blogspot.com##+js(acs, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6956
+mocospace.com##+js(nostif, adblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6963
+nogizaka46.com##+js(ra, oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6962
+karamellstore.com.br##+js(nostif, exit_popup, 10000)
+||smarthint.co^$3p
+
+! bigten .org anti adb warning
+@@||bigten.org^$xhr,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/50013
+strangermeetup.com##+js(set, adsEnabled, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6968
+nostracasa.com.br##+js(ra, oncontextmenu|onselectstart|ondragstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6969
+oparana.com.br##+js(acs, document.oncontextmenu)
+
+! ai_adb warning
+casertace.net,civildigital.com,lesmoutonsenrages.fr,venusarchives.com,verpornocomic.com##+js(acs, jQuery, ai_adb)
+
+! https://github.com/NanoMeow/QuickReports/issues/3095
+@@||frontpage.fok.nl^$ghide
+frontpage.fok.nl###wa_web_headertofloor
+frontpage.fok.nl##div.commercial_space
+
+! https://github.com/NanoMeow/QuickReports/issues/3123
+lolle21.com##+js(acs, document.oncontextmenu)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/50414
+civicx.com##.adblock_detector
+
+! https://github.com/uBlockOrigin/uAssets/issues/6999
+apps.jeurissen.co##.adsbygoogle:upward(1)
+
+! https://github.com/NanoMeow/QuickReports/issues/3137
+m4uhd.net##+js(aopr, locdau)
+
+! https://github.com/NanoMeow/QuickReports/issues/3148
+mdlinx.com##+js(nostif, show)
+
+! suedkurier .de right click - select
+suedkurier.de##+js(ra, oncontextmenu)
+suedkurier.de##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7017
+utamap.com##+js(ra, oncontextmenu)
+utamap.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7018
+utaten.com##+js(ra, oncontextmenu|onselectstart)
+utaten.com##.lyricBody:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! mp3fy .com anti adb warning
+@@||mp3fy.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/7023
+verdadeiroolhar.pt##+js(acs, document.onselectstart)
+
+! https://github.com/NanoMeow/QuickReports/issues/3924
+radarbox.com##+js(set, ads_enabled, true)
+
+! https://github.com/NanoMeow/QuickReports/issues/3181
+mangaid.click##+js(acs, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7046
+metropoliaztm.pl##+js(ra, ondrop|ondragstart)
+
+! https://github.com/NanoMeow/QuickReports/issues/3187
+librospreuniversitariospdf.blogspot.com##+js(acs, $, contextmenu)
+librospreuniversitariospdf.blogspot.com##+js(acs, document.onselectstart)
+librospreuniversitariospdf.blogspot.com##+js(acs, onload)
+librospreuniversitariospdf.blogspot.com##+js(acs, document.onkeydown)
+librospreuniversitariospdf.blogspot.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+librospreuniversitariospdf.blogspot.com##^script:has-text(debugger)
+
+! https://forums.lanik.us/viewtopic.php?p=153251#p153251
+keighleynews.co.uk##+js(aopr, _sp_.mms.startMsg)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7054
+manianomikata.com##+js(acs, document.oncontextmenu)
+manianomikata.com##+js(aopw, disableSelection)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7056
+quotev.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; cursor: auto !important)
+quotev.com##+js(aopr, document.body.oncopy)
+quotev.com##+js(ra, onselectstart|ondragstart|oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/3216
+underconsideration.com##+js(nostif, test.remove)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7058
+!#if env_chromium
+!newyorker.com##+js(acs, navigator.storage.estimate)
+!#endif
+!#if env_firefox
+newyorker.com##+js(set, webkitRequestFileSystem, noopFunc)
+!#endif
+
+! https://github.com/NanoMeow/QuickReports/issues/3236
+nekopoi.web.id##+js(acs, document.oncopy)
+nekopoi.web.id##+js(ra, oncontextmenu|ondragstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7069
+kickante.com.br##+js(aeld, mouseleave)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7070
+scribd.com##+js(aeld, /^(mouseout|mouseleave)$/)
+
+! mt07-forum/auto-treff anti-adb
+mt07-forum.de,auto-treff.com##+js(acs, $, offsetHeight)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7093
+foreignaffairs.com##+js(nostif, noscroll, 3000)
+
+! https://github.com/NanoMeow/QuickReports/issues/3293
+hienzo.com##+js(ra, oncontextmenu)
+hienzo.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! tfp.is anticopy/selection/keydown
+tfp.is##+js(acs, document.oncontextmenu)
+tfp.is##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/3310
+dxmaps.com##+js(nostif, adsbygoogle, 5000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7105
+kapiert.de##+js(aeld, contextmenu)
+
+! nadidetarifler.com overlay popup annoyance
+nadidetarifler.com###overlay, .social-media-popup
+
+! https://github.com/uBlockOrigin/uAssets/issues/7109
+japan-academy-prize.jp##+js(ra, oncontextmenu|onmousedown|onselectstart)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51645
+lectortmo.com##body *:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! ostadokom.com contextmenu/selection annoyance
+/wp-content/plugins/rcd-right-click-disabler/*$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/3360
+mt-milcom.blogspot.com##+js(acs, document.oncontextmenu)
+mt-milcom.blogspot.com##+js(acs, document.onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7133
+sopot.net##+js(ra, onmousemove|ondragstart|onselectstart|oncontextmenu, body)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7138
+debeste.de##+js(ra, oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7146
+dassen-azara4.com##+js(acs, document.oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/3384
+thehouseofportable.com##+js(aeld, /contextmenu|selectstart/)
+
+! right click, select https://github.com/NanoMeow/QuickReports/issues/3398
+dramacute.*##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+dramacute.*##+js(acs, document.oncontextmenu)
+dramacute.*##+js(acs, disableSelection)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7154
+hitcena.pl##+js(aeld, contextmenu)
+hitcena.pl##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! photoshop-online anti-adb
+photoshop-online.biz##+js(nostif, google_jobrunner)
+photoshop-online.biz##div.aslot
+
+! https://github.com/NanoMeow/QuickReports/issues/3447
+loudersound.com##+js(aopr, _sp_._networkListenerData)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7176
+livedays.jp##p,ul,ol:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/fsgpzp/adblock_detected_on_this_website/
+boomlive.in###ad_blocker_detect_dialog
+boomlive.in##.advert-panel
+
+! lewdzone.com adblock notice
+lewdzone.com##div.loading-links
+
+! https://www.reddit.com/r/uBlockOrigin/comments/fsupgm/best_way_to_enable_scrolling_after_hiding_a_popup/
+greatist.com###modal-host
+greatist.com##body:style(overflow: auto !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/3458
+hearthstone-decks.net##+js(acs, jQuery, ai_check)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52709
+bejson.com##+js(set, killads, true)
+
+! interviewgig .com select - copy
+interviewgig.com##+js(acs, document.onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7184
+tv-asahi.co.jp##+js(aeld, contextmenu)
+tv-asahi.co.jp##+js(ra, oncontextmenu, body)
+
+! https://github.com/NanoMeow/QuickReports/issues/3472
+full-anime.fr##+js(acs, document.getElementById, adblock)
+
+! https://github.com/NanoMeow/QuickReports/issues/3483
+nonton78.com##+js(acs, onload, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/661#issuecomment-609018989
+boards.net,freeforums.net,proboards.com##+js(aeld, scroll)
+
+! https://forums.lanik.us/viewtopic.php?p=153944#p153944
+deezer.com##+js(nostif, bait)
+deezer.com##.abp-banner
+
+! opportunitydesk anti-rightclick/anti-selection
+opportunitydesk.org##+js(aopr, disable_copy)
+opportunitydesk.org##+js(acs, document.ondragstart)
+opportunitydesk.org##body, div, p, span, a, h1, h2, h3, h4, h5, h6:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important)
+opportunitydesk.org##*::selection:style(background-color: #338FFF !important)
+
+! pandurul .ro copy
+pandurul.ro##+js(ra, oncopy)
+pandurul.ro##+js(acs, $, copy)
+
+! https://github.com/NanoMeow/QuickReports/issues/3515
+kbdfans.com##html:style(overflow: auto !important;)
+
+! kamerabudaya.com annoyances
+kamerabudaya.com##+js(ra, onselectstart|ondragstart|onmousedown|onkeydown|oncontextmenu, body)
+kamerabudaya.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53356
+idahopress.com##.tnc-overlay.tncms-block
+idahopress.com###blox-message-incompatible
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53425
+adslayuda.com##+js(set, better_ads_adblock, null)
+
+! raccontivietati .com select
+raccontivietati.com##+js(aopr, disableSelection)
+raccontivietati.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/3559
+creativebloq.com##+js(aopr, _sp_.mms.startMsg)
+
+! https://github.com/NanoMeow/QuickReports/issues/3561
+therealdeal.com##.async-hide:style(opacity:1!important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7226
+intergate.info##+js(set, document.oncontextmenu, null)
+
+! Steady anti adb warning
+handball-world.news,mobiflip.de,titanic-magazin.de,mimikama.org,langweiledich.net,der-postillon.com,perlentaucher.de,lwlies.com,serieslyawesome.tv,critic.de,mediotejo.net,nahrungsmittel-intoleranz.com,madeinbocholt.de##+js(nostif, Delay)
+handball-world.news##small
+
+! https://github.com/uBlockOrigin/uAssets/issues/7238
+healthitsecurity.com###CoverPop-cover
+healthitsecurity.com##.CoverPop-open:style(overflow: auto !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7241
+digitalfernsehen.de##+js(aeld, contextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/3578
+simpleflying.com##.simpl-adlabel
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53650
+masrawy.com##+js(acs, document.getElementById, adblockerdetected)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53667
+techieway.blogspot.com##+js(aopr, document.onselectstart)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53694
+milfzr.com##+js(acs, $, juicyads)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53717
+pornfd.com##.page-error
+
+! https://github.com/NanoMeow/QuickReports/issues/3589
+riie.jp##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6684#issuecomment-614093422
+! https://www.reddit.com/r/uBlockOrigin/comments/i14irb/quora_signup_wall/
+!#if env_mobile
+quora.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+quora.com##[id$="_signup_wall_wrapper"]
+quora.com##.signup_wall_prevent_scroll #page_wrapper:style(filter: none !important)
+quora.com##.signup_wall_prevent_scroll:style(position: static !important)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/7247
+airfrance.co.jp##+js(aopw, gdpr_popin_path)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7252
+ef.com##.mfp-bg, .mfp-wrap
+ef.com##.no-js:style(overflow: auto !important)
+
+! flash-firmware.blogspot .com select text
+flash-firmware.blogspot.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! ntvspor .net right click, select
+ntvspor.net##+js(aeld, /contextmenu|selectstart/)
+ntvspor.net##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7262
+phrasemix.com##+js(acs, $, showEmailNewsletterModal)
+||phrasemix.com/assets/new_$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/7269
+fxstreet.com##+js(aopw, generatePopup)
+
+! runmods .com right click, select, copy
+runmods.com##+js(noeval-if, oncontextmenu)
+runmods.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/g5o8ov/how_to_over_ride_this_website_which_prevents/
+selfstudyhistory.com##+js(acs, document.ondragstart)
+selfstudyhistory.com##+js(aeld, dragstart|keydown/)
+selfstudyhistory.com##style:has-text(@media print):remove()
+selfstudyhistory.com##+js(aopw, disableEnterKey)
+selfstudyhistory.com##+js(aopw, document.onselectstart)
+selfstudyhistory.com##+js(acs, jQuery, contextmenu)
+selfstudyhistory.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://getnzlr.newzenler.com/ modal
+!#if env_mobile
+getnzlr.newzenler.com###zenPopupModal, .modal-backdrop
+getnzlr.newzenler.com##.modal-open:style(overflow: auto !important)
+!#endif
+
+! litecompare .com anti adb notice
+@@||litecompare.com^$ghide
+
+! fiscomania .com anti adb notice
+@@||fiscomania.com^$ghide
+
+! https://www.reddit.com/r/uBlockOrigin/comments/g61qeq/block_blur_effect_from_div/
+vol.at##.blur:style(filter: none !important)
+
+! lokercirebon.com anti-rightclick/selection/keys annoyance
+lokercirebon.com##+js(aeld, /contextmenu|keydown|dragstart/)
+lokercirebon.com##style:has-text(::selection):remove()
+
+! playbill .com anti adb warning
+playbill.com##+js(nostif, offsetHeight)
+
+! pentruea .com right click, copy
+pentruea.com##+js(acs, document.oncontextmenu)
+pentruea.com##+js(aeld, copy)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54259
+sanspo.com##body:style(user-select: text !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; -o-user-select: text !important;)
+
+
+! https://github.com/NanoMeow/QuickReports/issues/3687
+t3.com##+js(aopr, _sp_.mms.startMsg)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7291
+visaonoticias.com##+js(ra, oncontextmenu|onselectstart|ondragstart|onclick)
+visaonoticias.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54544
+smokingmeatforums.com##+js(acs, $, btoa)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54357
+as-selection.net##+js(ra, oncontextmenu|onselectstart)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54629
+servedez.com###realpop_optincontent
+
+! https://github.com/NanoMeow/QuickReports/issues/3715
+avdelphi.com##+js(aeld, , _0x)
+avdelphi.com##+js(set, f12lock, false)
+avdelphi.com##+js(nosiif, debugger)
+
+! https://github.com/NanoMeow/QuickReports/issues/3567#issuecomment-622575179
+suzylu.co.uk##+js(aeld, contextmenu)
+
+! https://affiliate.fc2.com/ anti-adblock
+affiliate.fc2.com##+js(nostif, checkFeed, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/3744
+music.apple.com##+js(aeld, contextmenu)
+music.apple.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+music.apple.com##body:style(cursor:auto!important)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54820
+iphonecake.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/3750
+anime2you.de##+js(acs, document.getElementById, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7316
+courseware.cemc.uwaterloo.ca##+js(ra, oncontextmenu)
+
+! wstream. video disabled keys
+! https://github.com/NanoMeow/QuickReports/issues/4239
+maxstream.video,wstream.*##+js(aeld, contextmenu, preventDefault)
+maxstream.video,wstream.*##+js(aopr, onload)
+
+! https://forums.lanik.us/viewtopic.php?p=154496#p154496
+allocine.fr###overlay:not(.overlay)
+allocine.fr##html.open-modal .overlay:style(display: none !important)
+allocine.fr##html.open-modal body:style(overflow: auto !important)
+allocine.fr##html.open-modal body::after:style(display: none !important;)
+
+! osxinfo.net floating-notice
+osxinfo.net##.notices
+
+! depedlps. club right click, select
+depedlps.*##+js(acs, document.oncontextmenu)
+depedlps.*##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7323
+neyrologos.gr##+js(acs, document.oncontextmenu)
+neyrologos.gr##+js(aopr, disableSelection)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7325
+alphapolis.co.jp##+js(ra, style, div#novelBoby, stay)
+alphapolis.co.jp##+js(aeld, copy, preventDefault)
+alphapolis.co.jp##+js(set, document.onselectstart, null)
+alphapolis.co.jp##+js(set, document.oncontextmenu, null)
+
+! https://github.com/NanoMeow/QuickReports/issues/3792
+ukworkshop.co.uk##+js(nostif, google_jobrunner)
+
+! skidrowcodex .net right click, ctrl-u, ctrl-a, F12
+skidrowcodex.net##+js(aeld, contextmenu)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55126
+eoreuni.com##+js(aopw, document.oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/3810
+earth.com##+js(aopr, HTMLIFrameElement)
+
+! https://github.com/NanoMeow/QuickReports/issues/3812
+xxxonlinegames.com##+js(nostif, offsetHeight)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7343
+doods.*,ds2play.com,ds2video.com,d0o0d.com##+js(set, console.clear, undefined)
+dood.*,ds2play.com,ds2video.com,d0o0d.com##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7344
+freerapidleechlist.blogspot.com##+js(acs, document.oncontextmenu)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/499
+duolingo.com##h2:has-text(Using an ad blocker?):upward(3)
+
+! thegatewaypundit .com anti adb warning
+thegatewaypundit.com##+js(aeld, , adtoniq)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7359
+@@||9lives.be^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/7371
+jeu2048.fr##+js(aopw, FuckAdBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7363
+@@||holowczak.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/7373
+*$script,redirect-rule=noopjs,domain=luchaonline.com
+
+! altranotizia .it anti select
+altranotizia.it##+js(acs, disableSelection)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/gig2vt/
+livemint.com##.subscription .paywall:style(height: unset !important; overflow: unset !important;)
+livemint.com##.subscription .paywall .subscriptionBox
+
+! https://github.com/uBlockOrigin/uAssets/issues/7384
+taperaki.gr##.widget_et_ads
+
+! https://sekai-kabuka.com/ right click
+sekai-kabuka.com##+js(ra, oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7396
+yaledailynews.com##+js(acs, $, undefined)
+
+! https://github.com/NanoMeow/QuickReports/issues/3846
+4x4earth.com##+js(set, adBlockDetected, false)
+4x4earth.com##+js(nostif, samOverlay)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3877
+endorfinese.com.br##+js(nostif, google_jobrunner)
+
+! right click, select https://github.com/uBlockOrigin/uAssets/issues/7400
+enjoytaiwan.co.kr##+js(ra, oncontextmenu|onselectstart|ondragstart)
+
+! ggeguide .com right click, select
+ggeguide.com##+js(acs, document.oncontextmenu)
+ggeguide.com##+js(aopr, disableSelection)
+
+! tanya-tanya .com right click, select, ctrl-u etc
+tanya-tanya.com##+js(acs, document.oncontextmenu)
+tanya-tanya.com##+js(acs, disableSelection, reEnable)
+tanya-tanya.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! wpb.shueisha.co.jp right click
+wpb.shueisha.co.jp##+js(aeld, contextmenu, preventDefault)
+
+! tercihiniyap .net right click, select
+tercihiniyap.net##+js(ra, oncontextmenu|onselectstart|ondragstart)
+
+! https://github.com/NanoMeow/QuickReports/issues/3866
+vsco.co##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7417
+baby.be##.warning
+
+! https://github.com/uBlockOrigin/uAssets/issues/7425
+ciberduvidas.iscte-iul.pt##+js(aeld, copy)
+
+! right click images nationalgeographic .com
+nationalgeographic.com##+js(aeld, contextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/3883
+mangatoon.*##+js(acs, document.oncontextmenu)
+mangatoon.*##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! tistory.com anti-contextmenu/selection
+tistory.com##+js(aopw, document.oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/3894
+@@||receivesmsonline.net/ads.js$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/gmtlci/adblocking_detected/
+||wetransfer.net/*/adblocker$3p,domain=wetransfer.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55781
+stevensducks.com###sidearm-adblock-modal
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55778
+ziperto.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55846
+trojmiasto.pl##+js(aopr, adBlockDetected)
+
+! https://github.com/NanoMeow/QuickReports/issues/3908
+digitaltrends.com##+js(aopr, HTMLIFrameElement)
+
+! https://github.com/NanoMeow/QuickReports/issues/3914
+diffchecker.com##+js(nostif, adStillHere)
+
+! anti adb annoyance
+sythe.org##:xpath('//*[contains(text(),"Adblock")]')
+
+! https://github.com/NanoMeow/QuickReports/issues/3898
+start.me##.widget-page__banner
+
+! right click, select, copy https://github.com/NanoMeow/QuickReports/issues/3942
+lalawin.com##+js(acs, document.oncontextmenu)
+lalawin.com##+js(aopr, tjQuery)
+
+! foreignaffairs.com modal
+||foreignaffairs.com^*/newsletter-overlay$image
+foreignaffairs.com##.newsletter-backdrop
+foreignaffairs.com##body.no-scroll:style(overflow:auto !important)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56129
+png.is##div.rounded-0.alert-info.alert:nth-of-type(1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7466
+chronologia.pl##+js(set, document.onselectstart, null)
+chronologia.pl##+js(set, document.oncontextmenu, null)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56194
+gamegame.kr##+js(aopw, document.oncontextmenu)
+gamegame.kr##div:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56209
+money-sense.club##+js(ra, oncontextmenu|onMouseDown|style)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7470
+festival-cannes.com##+js(aeld, contextmenu)
+festival-cannes.com##*::selection:style(background-color:#338FFF!important)
+
+! https://github.com/NanoMeow/QuickReports/issues/3963
+moving2canada.com##.ad-blocker-notice
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56323
+extreme-down.*##p > b:xpath('//*[contains(text(),"AdBlock")]')
+
+! https://github.com/NanoMeow/QuickReports/issues/3969
+thegearhunt.com##+js(aeld, /^(?:contextmenu|copy|keydown|mousedown)$/)
+thegearhunt.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56457
+jootc.com##+js(aopr, disable_copy)
+jootc.com##+js(aopr, disable_hot_keys)
+jootc.com##+js(aopw, document.oncontextmenu)
+jootc.com##+js(set, document.onkeyup, null)
+jootc.com##+js(set, document.ondragstart, null)
+jootc.com##+js(aeld, keydown)
+jootc.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+||jootc.com/wp-content/plugins/wccp-pro/
+
+! https://github.com/uBlockOrigin/uAssets/issues/7486
+tohkaishimpo.com##+js(ra, oncontextmenu|onselectstart)
+tohkaishimpo.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7492
+iwanichi.co.jp##+js(ra, oncontextmenu|onselectstart)
+iwanichi.co.jp##body:style(user-select: auto !important; -webkit-user-select: auto !important; -moz-user-select: auto !important; -webkit-user-drag: auto !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7493
+photobank.mainichi.co.jp##+js(set, commonUtil.openToast, null)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7308 right click annoyance, anti devtools
+strcloud.in,streamtape.*##+js(aeld, contextmenu)
+strtape.*,streamtape.*##+js(rmnt, script, /parseInt.*push.*setTimeout.*try.*catch/)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56652
+poedb.tw##+js(aopr, adBlockDetected)
+
+! https://github.com/NanoMeow/QuickReports/issues/3169
+malekal.com##+js(nostif, adb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7506
+jfdb.jp##+js(aeld, /contextmenu|keydown/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7513
+tbs.co.jp##+js(set, NS_TVER_EQ.checkEndEQ, trueFunc)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/gxd9g0/how_to_enable_copying_in_this_website/
+selfstudyanthro.com##+js(aopr, disable_copy)
+selfstudyanthro.com##+js(acs, document.ondragstart)
+selfstudyanthro.com##style:has-text(@media print):remove()
+selfstudyanthro.com##.unselectable,html:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; cursor: text !important)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/gxe9o4/help_with_ublock/
+novelasligera.com##:not(input):not(textarea),img:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7515
+video.tv-tokyo.co.jp##.md-question.js-modal-window
+video.tv-tokyo.co.jp###jsiModalOverLayerShare
+video.tv-tokyo.co.jp##*:style(opacity: 1 !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7536
+audioreview.m1001.coreserver.jp##+js(acs, disableSelection, reEnable)
+audioreview.m1001.coreserver.jp##+js(acs, document.oncontextmenu)
+audioreview.m1001.coreserver.jp##.unselectable:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+audioreview.m1001.coreserver.jp##.blockOverlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/7538
+ufret.jp##+js(aeld, contextmenu)
+ufret.jp##+js(aopr, nd_shtml)
+ufret.jp##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57099
+tabstats.com##.afill
+
+! https://github.com/uBlockOrigin/uAssets/pull/7537
+seoul.cs.land.to##+js(ra, onselectstart)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57185
+sharree.com##+js(acs, $, .height)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57295
+motortrader.com.my##+js(aopr, canRunAds)
+
+! https://github.com/NanoMeow/QuickReports/issues/4076
+aviationweek.com##.content-body-wrapper:style(opacity:1!important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7550
+community.spiceworks.com##.zd-privacy-content
+community.spiceworks.com##.join-login-wrapper.join-login-alt--six-second[data-alt-modal]
+community.spiceworks.com##.sui-u-no-scroll:style(overflow:auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7560
+trip.com##.J_PopupMask
+trip.com##.o-pop-box-retention
+trip.com##body:style(overflow: auto !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7561
+holakikou.com##+js(aopr, disableSelection)
+holakikou.com##+js(aopr, document.oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/4132
+globo.com##+js(aeld, copy)
+
+! https://github.com/NanoMeow/QuickReports/issues/4146
+malasngeblog.com##.post-body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7579
+relet365.com##+js(aopr, disable_copy)
+relet365.com##+js(aopw, document.ondragstart)
+relet365.com##.unselectable,html:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; cursor: auto !important)
+
+! https://github.com/NanoMeow/QuickReports/issues/4161
+abola.pt##+js(acs, $, Adblock)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57830
+unixhow.com##+js(acs, eval, isNaN)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57962
+rottentomatoes.com##+js(set, mps._queue.abdetect, null)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7594
+reportergazeta.pl##+js(set, document.oncontextmenu, null)
+reportergazeta.pl##+js(set, document.onselectstart, null)
+reportergazeta.pl##+js(set, document.ondragstart, null)
+
+! #7596 right click, select
+thenekodark.com##+js(aeld, contextmenu)
+thenekodark.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+artesacro.org##+js(aeld, contextmenu)
+artesacro.org##+js(acs, document.onselectstart)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/58003
+wikihow.com##+js(acs, document.addEventListener, contribute)
+
+! poli-vsp right click, select
+poli-vsp.ru,polyvsp.ru##+js(aeld, contextmenu)
+poli-vsp.ru,polyvsp.ru##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4469#issuecomment-649725358
+bmovies.*##+js(aeld, devtoolschange)
+
+! https://github.com/NanoMeow/QuickReports/issues/4196
+edailybuzz.com##+js(aeld, /contextmenu|copy/)
+edailybuzz.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+edailybuzz.com##*::selection:style(background-color:#338FFF!important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7602
+kanjukulive.com##+js(ra, ondragstart|oncontextmenu)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/58166
+betaprofiles.com##.adblock
+
+! https://github.com/uBlockOrigin/uAssets/issues/7609
+wikibious.com##+js(aopr, disable_copy)
+wikibious.com##+js(aopw, document.oncontextmenu)
+wikibious.com##.unselectable,html:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/58292
+imgur.com##.Footer-whitelist
+
+! https://github.com/uBlockOrigin/uAssets/issues/7617
+ananweb.jp##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7618
+seikatsu-hyakka.com##+js(acs, document.oncontextmenu)
+
+! marfilius.blogspot .com anti select
+marfilius.blogspot.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7628
+2219.net##+js(aopr, clickNS)
+
+! thisisfutbol .com anti adb notice
+@@||thisisfutbol.com^$ghide
+thisisfutbol.com##.ad-billboard
+thisisfutbol.com##.c-header__advert
+thisisfutbol.com###snack_dex6
+
+! https://github.com/uBlockOrigin/uAssets/issues/7642
+odoserwis.pl##body *:style(-webkit-user-select: auto !important; -moz-user-select: auto !important; -ms-user-select: auto !important; user-select: auto !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/4265
+reviewmeta.com##+js(nostif, innerHTML)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/hnvww0/custom_filter/
+guides4gamers.com##+js(nostif, offsetHeight, 100)
+
+! mdpUnGrabber /anti right click, select, ctrl+*
+bajecnavareska.sk,lunas.pro,onlinefreecourse.net,pisr.org,script-stack.com,uplod.net,downloadtutorials.net,thewpclub.net,thememazing.com,themebanks.com##+js(aeld, , mdp)
+
+! right click, select elizabeth-mitchell .org #3401
+elizabeth-mitchell.org##+js(acs, document.oncontextmenu)
+elizabeth-mitchell.org##+js(aopr, disableSelection)
+elizabeth-mitchell.org##+js(acs, addEventListener, ctrlKey)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7652
+infoplease.com##+js(nostif, show)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/hr52xj/blocking_supporting_poeapp_is_as_easy_as/
+poeapp.com##.sponsor, div.wrapper
+
+! blasianluvforever .com right click, select
+blasianluvforever.com##+js(acs, document.oncontextmenu)
+blasianluvforever.com##+js(aopr, disableSelection)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=44912
+||gomovies-online.*/addons/*.gif$image
+gomovies-online.*##[href="/user/profile/premium-membership"]
+gomovies-online.*##.ico.close
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59406
+nuggetroyale.io##.mainMenuAdBox
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59414
+tileman.io##.adbanner:remove()
+
+! https://github.com/uBlockOrigin/uAssets/issues/7674
+daimangajiten.com##+js(aeld, contextmenu)
+daimangajiten.com##*:style(-ms-user-select:auto !important; -moz-user-select:auto !important; -webkit-user-select:auto !important; -webkit-touch-callout:default !important; user-select:auto !important)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/hs7rgq/blocking_internalinline_script_throwing_delayed/
+analizy.pl##+js(acs, setTimeout, newsletterPopup)
+
+! erovideoseek.com & kyonyuquest.com right click
+erovideoseek.com,kyonyuquest.com##+js(ra, oncontextmenu, body)
+
+! https://github.com/NanoMeow/QuickReports/issues/4341
+animesanka.com##+js(acs, document.onkeydown)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59573
+witz.io###moneyMakerHolder
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59574
+leevz.io###leevz-io_300x250
+
+! citas .in handling copy
+citas.in##+js(aeld, copy)
+
+! radichubu.jp right click
+radichubu.jp##+js(ra, onContextMenu, body)
+
+! https://github.com/NanoMeow/QuickReports/issues/4357
+androidpolice.com##+js(aopw, ai_front)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59749
+sovetromantica.com##+js(set, fuckAdBlock, trueFunc)
+*$xhr,redirect-rule=nooptext,domain=sovetromantica.com
+
+! https://github.com/NanoMeow/QuickReports/issues/4360
+scriptinghelpers.org##.shvertise-banner
+
+! mbs.jp right click
+mbs.jp##+js(aopw, document.oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/4372
+polyflore.net##+js(nostif, adBlockDetected)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59933
+nightpoint.io##+js(nofab)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59974
+striketactics.net###unit_a_cont
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59995
+chemz.io##.menu_ad1Box
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60026
+*$xhr,redirect-rule=nooptext,domain=mazmorra.io
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60037
+sketchful.io###moneySquare
+
+! icy-veins .com premium proposal
+icy-veins.com##+js(nostif, premium)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7697
+phimmedia.info##+js(acs, window.oncontextmenu)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60100
+download.mokeedev.com##div.center-align
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60106
+compartiendofull.net##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60169
+texte.work##+js(ra, onkeydown|oncontextmenu, body)
+texte.work##+js(aopw, document.oncontextmenu)
+texte.work##+js(aopr, disableselect)
+
+! indiatimes .com selection invisible
+indiatimes.com##*::selection:style(background-color:#338FFF!important)
+
+! railf.jp and https://spectank.jp/sl0060045.html right click
+railf.jp,spectank.jp##+js(ra, oncontextmenu|oncopy)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60183
+liga.net##.modal-backdrop
+liga.net###addBlockModal
+liga.net##body:style(overflow:auto !important)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60407
+getintopc.com##body > div[attr="[object Object]"]
+
+! getyourbitco .in anti select
+getyourbitco.in##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/540
+longecity.org##+js(set, abp, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60575
+brighteon.com##body:style(overflow:auto !important)
+brighteon.com##div.overlay, .bottom-banner
+
+! humanbenchmark .com warning anti adb
+*$script,3p,domain=humanbenchmark.com
+
+/wp-content/plugins/secure-copy-content-protection/*$script
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60753
+koreanaddict.net##+js(aopr, disable_copy)
+koreanaddict.net##+js(aopw, document.oncontextmenu)
+
+! mesquitaonline .com anti right click, select
+mesquitaonline.com##+js(aeld, , mdp)
+
+! movieston .com anti right click / select / copy
+movieston.com##+js(acs, document.oncontextmenu)
+movieston.com##+js(acs, jQuery, contextmenu)
+movieston.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7734
+magnet-novels.com##+js(aeld, /blur|mousedown|mouseenter|mouseleave/)
+magnet-novels.com##+js(nosiif, pushAd)
+magnet-novels.com##+js(ra, oncontextmenu|onselectstart|ondragstart|oncut|oncopy, div.contentContainer\, div.content, stay)
+magnet-novels.com##+js(set, document.onselectstart, noopFunc)
+
+! https://github.com/easylist/easylist/issues/5903#issuecomment-669608003
+!deseneledublate.com##+js(acs, document.oncontextmenu)
+deseneledublate.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/61166
+eduardo-monica.com##+js(acs, document.oncontextmenu)
+
+! #7748 anti right click, anti select
+fmzm.xyz##+js(acs, document.oncontextmenu)
+fmzm.xyz##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/61191
+dreamsfriend.com##+js(aeld, /contextmenu|cut|copy|paste/)
+dreamsfriend.com##style:has-text(user-select):remove()
+
+! digital.lasegunda.com anti-contextmenu/anti-selection
+digital.lasegunda.com##+js(aeld, contextmenu)
+digital.lasegunda.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! mhwg.org anti right click, anti select
+mhwg.org##+js(ra, oncontextmenu|onselectstart|style, #body_game)
+
+! https://github.com/NanoMeow/QuickReports/issues/4489
+cpuid.com##+js(nostif, blocked, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/61381
+ratebeer.com##[class^="AdBlockDetector"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/61521
+*$script,redirect-rule=noopjs,domain=atlasobscura.com
+atlasobscura.com##.js-subscription-ask-modal
+atlasobscura.com##body.modal-open:style(overflow:auto !important)
+
+! https://github.com/NanoMeow/QuickReports/issues/4511
+webcamtaxi.com##+js(nostif, blocker)
+
+! https://hibiki-radio.jp/description/Afterglow/detail right click, text selection
+hibiki-radio.jp##+js(aeld, contextmenu)
+hibiki-radio.jp##body:style(-webkit-user-select:auto !important; -webkit-touch-callout: default !important;)
+
+! autophorie.de anti right click, anti select
+autophorie.de##+js(aopr, disableSelection)
+autophorie.de##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! abcya .com anti adb - warning
+*$script,domain=abcya.com,redirect-rule=noopjs
+
+! articlesmania .me right click, select, copy
+||articlesmania.me^$csp=script-src * 'unsafe-eval' 'unsafe-inline'
+
+! j-island.net right click, copy
+j-island.net##+js(acs, document.oncontextmenu)
+j-island.net##+js(ra, oncontextmenu|oncopy|ontouchstart, body)
+j-island.net##body:style(-webkit-touch-callout: default !important; -webkit-user-select: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7793
+englishlands.net##+js(aopw, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7790
+u.gg##.premium-top-banner-container
+
+! https://github.com/NanoMeow/QuickReports/issues/4545
+randomlists.com##.whine
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/61999
+good-football.org##+js(aopr, adBlockDetected)
+
+! https://github.com/NanoMeow/QuickReports/issues/4560
+beforeitsnews.com###top-alert
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62144
+||fkrkkmxsqeb5bj9r.s3.amazonaws.com^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/4577
+elheraldo.hn##+js(aopw, addLink)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62616
+tutoganga.blogspot.com##+js(aopw, disableselect)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7844
+dreamstime.com##+js(nostif, SignUPPopup_load, 5000)
+dreamstime.com###freetrial_popup
+dreamstime.com##html.documentLocked body:style(overflow: visible !important;)
+dreamstime.com##html.documentLocked:style(margin-right: 0 !important;)
+dreamstime.com##html.documentLocked header:style(padding-right: 0 !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7852
+fruit01.xyz##+js(aopr, disableSelection)
+fruit01.xyz##+js(aopw, document.oncontextmenu)
+fruit01.xyz##+js(set, document.onkeydown, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11242
+@@||dailyvoice.com^$ghide
+*$xhr,redirect-rule=nooptext,domain=dailyvoice.com
+dailyvoice.com###nativo_rightrail1
+
+! https://github.com/NanoMeow/QuickReports/issues/4612
+clipartmax.com##+js(aopw, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7867
+anauk.net##+js(ra, oncontextmenu|onselectstart|onselect|ondragstart|ondrag, body)
+
+! zeeebatch.blogspot .com select, ctrl-u etc
+zeeebatch.blogspot.com##+js(acs, document.onmousedown)
+zeeebatch.blogspot.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! techdracula .com anti select
+techdracula.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://forums.lanik.us/viewtopic.php?p=156522#p156522
+bluemoon-mcfc.co.uk##+js(nosiif, removeChild)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7907
+blitzrechner.de##+js(aeld, copy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7913
+emailfake.com##+js(aeld, copy)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/64009
+themeparktourist.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/4723
+garyfeinbergphotography.com##+js(aeld, contextmenu)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/64220
+bonobono.com##+js(ra, oncontextmenu|ondragstart|onselectstart, body)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/64268
+routinehub.co###ethad
+
+! https://www.reddit.com/r/uBlockOrigin/comments/izwxv9/website_block_copying_text/
+darktranslation.com##+js(aopw, stopPrntScr)
+darktranslation.com##*::selection:style(background-color:#338FFF!important)
+
+! https://github.com/NanoMeow/QuickReports/issues/4754
+msubplix.com##+js(acs, document.oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/4760
+routenote.com##+js(acs, onload)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6702#issuecomment-699712047
+upstream.to##+js(acs, document.oncontextmenu)
+upstream.to##+js(aopr, _0xfff1)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/64589
+webqc.org###toplink
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/64711
+ohmygirl.ml##+js(acs, event, stopPropagation)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4007
+planetagibi.com.br,planetagibiblog.com.br##+js(aopw, document.oncontextmenu)
+planetagibi.com.br,planetagibiblog.com.br##+js(aopw, document.onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7993
+lyricstranslate.com##+js(set, getSelection, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7997
+trakteer.id##+js(aeld, /contextmenu|mousedown/)
+trakteer.id##article.post:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/65000
+telefon-treff.de##+js(acs, $, offsetHeight)
+
+! dodge-forum anti-adb
+dodge-forum.eu##+js(acs, $, offsetHeight)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7999
+megapixl.com##+js(nostif, .modal, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/238
+! https://github.com/uBlockOrigin/uAssets/issues/20248
+8muses.com##div[style] > div > .userBanner--red:upward(2)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8008
+cissamagazine.com.br##+js(acs, soclInit)
+cissamagazine.com.br##+js(nostif, Zord.analytics.registerBeforeLeaveEvent, 3000)
+
+! https://github.com/NanoMeow/QuickReports/issues/4794
+ilclubdellericette.it##+js(acs, document.oncontextmenu)
+
+! https://github.com/NanoMeow/QuickReports/issues/3725
+utour.me##+js(nostif, myModal, 3000)
+
+! https://github.com/NanoMeow/QuickReports/issues/4812 anti select
+seotechman.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+seotechman.com##*::selection:style(background-color:#338FFF!important)
+
+! katosatoshi.jp right-click, text-selection
+katosatoshi.jp##+js(ra, oncontextmenu, body)
+katosatoshi.jp##body:style(-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;user-select:text!important)
+
+! https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.9-AMDGPU-Stats
+phoronix.com##+js(acs, onload, setTimeout)
+
+! https://fandomwire.com/spider-man-3-tobey-maguire-andrew-garfield-signed-on/
+fandomwire.com##.g1-popup
+fandomwire.com##html:style(overflow:auto !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8037
+observatoriodocinema.uol.com.br##+js(acs, document.addEventListener, preventDefault)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80714
+@@||samfw.com^$ghide
+samfw.com##.adsbygoogle
+||samfw.com/assets/*.gif$image
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/65693
+segnidalcielo.it##+js(nostif, google_jobrunner)
+
+! fangraphs.com anti adb annoyance
+@@||fangraphs.com/dfp.js$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/65879
+fosspost.org##+js(nostif, an_message, 500)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8054
+igniel.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/66004
+hentaialtadefinizione.it##+js(aopw, onload)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8069
+lyrical-nonsense.com##+js(aeld, copy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8072
+alltechnerd.com##+js(aopw, document.oncontextmenu)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/66378
+moneyguru.co##+js(acs, $, .height)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ji8yhy/citynewsca_anti_adblock/
+||rogersmedia.com/utilityx.js^$script,3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/66440
+mapgenie.io##.mt-1.mb-1.text-center
+
+! https://github.com/uBlockOrigin/uAssets/issues/8092
+*$script,redirect-rule=noopjs,domain=exame.com
+
+! clubulbebelusilor .ro anti right click, anti select
+clubulbebelusilor.ro##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+clubulbebelusilor.ro##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8111
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect-rule=googlesyndication_adsbygoogle.js,domain=colnect.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/8130
+generationamiga.com##+js(aopr, disable_copy)
+generationamiga.com##+js(aopw, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8136
+nwherald.com##+js(aopr, HTMLIFrameElement)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8140
+gridcoinstats.eu##[href="/about#support"]:upward(2)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8143
+odiarioonline.com.br##+js(set, document.oncontextmenu, null)
+odiarioonline.com.br##+js(set, document.onkeydown, null)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8145
+katzen-fieber.de##*:style(-webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/joyf5r/block_overlay_on_thefreethoughtprojectcom/
+thefreethoughtproject.com##.pum
+thefreethoughtproject.com##html:style(overflow:auto !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4520#issuecomment-722862179
+gplinks.co##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/pull/8164
+chan.sankakucomplex.com###sank-prestitial
+chan.sankakucomplex.com##body.no-scroll:style(overflow: visible !important;position: static !important)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/jp6szm/
+nytimes.com###modal-portal-regiwall
+nytimes.com##body:style(overflow: initial !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8511
+nytimes.com##body.ReactModal__Body--open:style(position: unset !important; overflow: auto !important;)
+
+! fix poplinks.idolmaster-official.jp anti-right click and anti-select
+poplinks.idolmaster-official.jp##+js(ra, oncontextmenu|onselectstart|onmousedown, body)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67621
+progameguides.com##+js(aopr, admrlWpJsonP)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8222
+hikarinoakari.com##+js(aeld, keydown)
+hikarinoakari.com##style:has-text(::selection):remove()
+
+! https://www.reddit.com/r/uBlockOrigin/comments/jurv15/httpswwwztzacom_detect_ublock_using_ztprotect/
+zt-protect.*##main.py-4 > p
+
+! https://github.com/uBlockOrigin/uAssets/issues/8227
+jpnn.com##+js(aopr, document.oncopy)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67845
+jimnong.tistory.com##.adblock-on
+
+! https://github.com/uBlockOrigin/uAssets/issues/8238
+daum.net##+js(acs, document.oncontextmenu)
+daum.net##+js(ra, oncontextmenu)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/jwczdj/prepinsta_abusive_popup_not_blocked/
+prepinsta.com##.mfp-ready, .mfp-wrap
+prepinsta.com##html:style(overflow:auto !important)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/jx5i4d/loginhitcomng_cannot_selectcopy/
+loginhit.com.ng##+js(aeld, /contextmenu|keydown/)
+loginhit.com.ng##style:has-text(::selection):remove()
+loginhit.com.ng###ays_tooltip
+
+! https://github.com/uBlockOrigin/uAssets/issues/4962#issuecomment-730452894
+123movies.*##+js(acs, disableSelection, reEnable)
+123movies.*##+js(acs, document.oncontextmenu)
+123movies.*##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+! https://github.com/uBlockOrigin/uAssets/issues/9462
+123movies.*,2embed.ru##+js(nostif, _0x)
+123movies.*,2embed.ru##+js(set, console.clear, noopFunc)
+
+! json2csharp.com anti-adb
+*$script,redirect-rule=noopjs,domain=json2csharp.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/8254
+diariodaregiao.com.br##body:style(-moz-user-select:text !important;-ms-user-select:text !important;user-select:text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/68343
+taufiqhdyt.com##body,code:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8277
+szkolawohyn.pl##+js(set, document.oncontextmenu, noopFunc)
+
+! newsforbolly .org anti right click, anti ctrl u, f12
+newsforbolly.org##+js(acs, document.oncontextmenu)
+newsforbolly.org##+js(ra, onkeydown)
+
+! nextplatform.com anti adb
+nextplatform.com###adtoniq-msgr-bar
+
+! https://github.com/uBlockOrigin/uAssets/issues/8284
+giromarilia.com.br##+js(ra, oncontextmenu|ondragstart|onselectstart)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/k3q1k2/ok_this_shit_pisses_me_off_how_do_i_block_this/
+free-barcode-generator.net##[id^="reklamy"]
+
+! gomovies .click anti right click, keys, select
+gomovies.*##+js(acs, document.oncontextmenu)
+gomovies.*##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/k3x8ta/antiadblock_popup_on_proboards/
+*$script,redirect-rule=noopjs,domain=forums.lostmediawiki.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/k44in0/techoreelscom_detecting_adblock_other_issues_too/
+techoreels.com##+js(ra, oncontextmenu, body)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8299
+promobit.com.br##+js(aeld, mouseout)
+
+! liveroger.com anti-select
+liveroger.com##body:style(-webkit-touch-callout:text !important;-webkit-user-select:text !important;-khtml-user-select:text !important;-moz-user-select:text !important;-ms-user-select:text !important;user-select:text !important)
+
+! mediafax .ro anti copy
+mediafax.ro##+js(aeld, copy)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/69447
+! https://github.com/uBlockOrigin/uAssets/issues/20632
+@@||online2pdf.com^$ghide
+online2pdf.com##div[id][class][style^="position:"] > div:last-child > div:last-child > ins.adsbygoogle:upward(3)
+online2pdf.com##div[class="container_box content_box"] > div:only-child > div:last-child > div:last-child > ins.adsbygoogle:upward(4)
+online2pdf.com##div[class="container_box content_box"] > div[id][class] > div:last-child > div:last-child > ins.adsbygoogle:upward(3)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8335
+bdb.com.pl##+js(ra, oncopy|oncontextmenu|onselectstart|onselect|ondragstart|ondrag|onbeforeprint|onafterprint, body)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/69610
+ping.eu##center[style="margin-bottom: 2px;"]
+
+! https://old.reddit.com/r/uBlockOrigin/comments/kaczfx/how_do_i_disable_css_that_disables_right_click/
+safetxt.net##+js(acs, $, contextmenu)
+
+! 1fichier.com adblock message and modal
+1fichier.com##.ct_warn:has-text(adblock)
+1fichier.com##.ui-dialog[aria-describedby="modal-msg"]:has(a[href$="/console/abo.pl"][style^="text-decoration:underline"])
+1fichier.com##.ui-widget-overlay
+
+! abc .es anti adb warning
+! abc.es##+js(aopr, vocento.tracking)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8347#issuecomment-744394924
+forum.release-apk.com##.has-profile.post:first-child:has-text(/adblock/i)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8374
+sokolow-mlp.pl##+js(acs, document.onmousedown)
+
+! https://github.com/uBlockOrigin/uAssets/pull/3415
+blog.naver.com##+js(aeld, /contextmenu|selectstart|copy/)
+blog.naver.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70398
+bendigoadvertiser.com.au##+js(nosiif, modal)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kh3ibf/how_would_one_go_to_block_inline_script_locking/
+watchmdh.to##+js(aopw, document.oncontextmenu)
+watchmdh.to##style:has-text(:not(input):not(textarea)):remove()
+
+! fatgirlskinny.net overlay annoyance
+fatgirlskinny.net##.pum
+fatgirlskinny.net##html:style(overflow:auto !important)
+
+! anti select lightnovelworld .com
+lightnovelworld.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70785
+salidzini.lv##+js(acs, setTimeout, offsetHeight)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70801
+tusubtitulo.com###bannerAdBlock
+
+! cablegratis .online anti right click - select - drag
+cablegratis.online##+js(acs, document.oncontextmenu)
+cablegratis.online##+js(ra, oncontextmenu|ondragstart|ondrop|onselectstart)
+
+! animeidhentai.com dev tools
+||htstreaming.com/player/assets/debugger.js
+
+! economica .net manipulated clipboard
+economica.net##+js(aeld, copy)
+
+! kuroko-analyze.com right-click
+kuroko-analyze.com##+js(ra, oncontextmenu, body)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71225
+raqmedia.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! 69translations.blogspot .com anti select
+69translations.blogspot.com##+js(aopr, document.onselectstart)
+69translations.blogspot.com##+js(aopr, document.onmousedown)
+69translations.blogspot.com##+js(aopr, document.onclick)
+
+! 2iptv .com warning anti adb
+2iptv.com##+js(nostif, google_jobrunner)
+
+! anti ctrl-u my-code4you.blogspot .com
+my-code4you.blogspot.com##+js(aopr, document.onkeydown)
+
+! anti select dailynews.us.com
+dailynewsview.com,dailynews.us.com##+js(acs, document.onselectstart)
+
+! cyberspace .world anti select
+cyberspace.world##+js(aopr, document.onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8420
+dztechphone.com##+js(acs, document.oncontextmenu)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kpse3b/hotpornfileorg_unable_to_select_text/
+hotpornfile.org##+js(aopr, document.oncontextmenu)
+hotpornfile.org##+js(aopr, document.onselectstart)
+hotpornfile.org##+js(aopr, document.onkeydown)
+hotpornfile.org##+js(aopr, document.onkeypress)
+
+! empregostagios.com anti-contextmenu/selection/keyboard annoyance
+empregoestagios.com##+js(aopr, disableEnterKey)
+empregoestagios.com##+js(aopw, document.ondragstart)
+
+! pornhd8k.net dev tools
+pornhd8k.net##+js(nosiif, debugger)
+
+! dailynewsview .com anti select
+dailynewsview.com##+js(aopr, document.onselectstart)
+
+! e-sushi .fr anti right click, anti select
+e-sushi.fr##+js(aopr, document.oncontextmenu)
+e-sushi.fr##+js(acs, document.onselectstart)
+
+! evasion-online .com anti right click, anti select
+evasion-online.com##+js(aopr, document.oncontextmenu)
+evasion-online.com##+js(acs, document.onselectstart)
+
+! exclusifvoyages.com anti right click, anti select
+exclusifvoyages.com##+js(aopr, document.oncontextmenu)
+exclusifvoyages.com##+js(acs, document.onselectstart)
+exclusifvoyages.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! experciencia .com anti select
+experciencia.com##+js(aopr, disableSelection)
+
+! ejobcircular-24.blogspot .com anti select
+ejobcircular-24.blogspot.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! elijahwood.altervista .org anti select
+elijahwood.altervista.org##+js(aopr, document.write)
+
+! everydaynewinfo .com anti select
+everydaynewinfo.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! f1fastlap.blogspot .com anti right click, anti select
+f1fastlap.blogspot.com##+js(acs, document.oncontextmenu)
+f1fastlap.blogspot.com##+js(acs, document.onselectstart)
+
+! fraudnavi.com right click, text selection
+fraudnavi.com##+js(ra, oncontextmenu)
+fraudnavi.com##body:style(-moz-user-select: auto !important;-ms-user-select: auto !important;-webkit-user-select: auto !important;-webkit-touch-callout: default !important;)
+
+! anti right-click
+javbest.xyz,javbix.com,javgrab.com##+js(acs, $, contextmenu)
+||googleapis.com/loadermain.appspot.com/main.js$domain=javboys.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ktkw6p/proboards_based_forums_deploying_antiadblock/
+||ads.proboards.com^$script,redirect=noopjs
+||bidfilter.com^$script,redirect=noopjs
+
+! funivie .org anti right click / select
+funivie.org##+js(acs, document.oncontextmenu)
+funivie.org##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://www.tiktok .com anti select
+tiktok.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+! https://github.com/uBlockOrigin/uAssets/issues/19009
+tiktok.com##+js(aeld, contextmenu, preventDefault)
+tiktok.com##+js(aeld, visibilitychange, pagehide)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8444
+polsatnews.pl##+js(aeld, copy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8446
+9docu.org##body:style(-moz-user-select: auto !important;-ms-user-select: auto !important;-webkit-user-select: auto !important;-webkit-touch-callout: default !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8446
+android1pro.com##:not(input):not(textarea),img:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8451
+world4.eu##+js(aopw, document.oncontextmenu)
+world4.eu##+js(acs, document.oncopy)
+world4.eu##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+world4.eu##*::selection:style(background-color:#338FFF!important)
+world4.eu##+js(acs, disable_copy)
+world4.eu##+js(acs, disable_hot_keys)
+world4.eu##+js(aopw, disable_ext_code)
+
+! ggulpass .com anti right click / select
+ggulpass.com##+js(aopw, document.oncontextmenu)
+ggulpass.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! goodbakery .ru anti right click / select
+goodbakery.ru##+js(acs, document.oncontextmenu)
+goodbakery.ru##+js(acs, jQuery, contextmenu)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/72221
+elektrikmen.com##+js(aopr, disableEnterKey)
+elektrikmen.com##+js(aopw, document.ondragstart)
+elektrikmen.com##style:has-text(/-moz-user-select:none|@media print/):remove()
+
+! ifdreamscametrue .com anti: right click, select, copy
+ifdreamscametrue.com##+js(acs, document.oncontextmenu)
+ifdreamscametrue.com##+js(acs, jQuery, copy)
+ifdreamscametrue.com##+js(aeld, contextmenu)
+ifdreamscametrue.com##+js(aopr, disableSelection)
+
+! irisbuddies. ml anti select
+irisbuddies.*##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! Anti-adb keybr.com
+keybr.com##.Placeholder
+
+! kijyomatome-ch.com anti right-click, select
+kijyomatome-ch.com##+js(ra, oncontextmenu|onselectstart, body)
+kijyomatome-ch.com##body:style(user-select:auto !important;-webkit-user-select:auto !important;-ms-user-select:auto !important;-moz-user-select:auto !important;-webkit-user-drag:auto !important)
+
+! juegosdetiempolibre .org anti right click / select
+juegosdetiempolibre.org##+js(acs, document.oncontextmenu)
+juegosdetiempolibre.org##+js(aopr, disableSelection)
+
+! kutub3lpdf .com anti right click, select, copy
+kutub3lpdf.com##+js(aeld, /contextmenu|copy|selectstart/)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=38298
+kitguru.net##+js(acs, addEventListener, adsbygoogle.length)
+
+! la8osapofash .com visible text selection
+la8osapofash.com##*::selection:style(background-color:#338FFF!important)
+
+! lendagames .com ctrl-c, ctrl-u, F12 etc
+lendagames.com##+js(acs, document.onkeydown)
+
+! live.b-c-e .us anti right click
+live.b-c-e.us##+js(aopr, alert)
+
+! https://www.loveplay123 .com/2015/08/blog-post_37.html right click, drag, select
+loveplay123.com##+js(ra, oncontextmenu|onDragStart|onSelectStart)
+loveplay123.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! minecraftquiz .com anti select
+minecraftquiz.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! magelang1337 .com anti select
+magelang1337.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/72530#issuecomment-762209005
+! https://github.com/uBlockOrigin/uAssets/issues/17399
+! https://github.com/uBlockOrigin/uAssets/issues/17910
+! https://www.reddit.com/r/uBlockOrigin/comments/x7ogxi/
+lvturbo.com,sbbrisk.com,sbface.com,sbspeed.com,streamsb.net##^script:has-text(debugger)
+lvturbo.com,sbbrisk.com,sbface.com,sbspeed.com,streamsb.net##+js(acs, check, debugger)
+lvturbo.com,sbbrisk.com,sbface.com,sbspeed.com,streamsb.net##+js(nosiif, _0x)
+! https://sbasian.pro/d/ksnf8h4wn05p.html anti devtools
+sbasian.pro##+js(set, console.clear, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/72222
+! https://github.com/AdguardTeam/AdguardFilters/issues/72225
+! https://github.com/AdguardTeam/AdguardFilters/issues/72227
+! https://github.com/AdguardTeam/AdguardFilters/issues/72228
+! https://github.com/AdguardTeam/AdguardFilters/issues/72229
+2hbn.com,bilgisentezi.com,farklifarkli.com,readingclock.com##.adace-popup
+bilgisentezi.com##.adace-slideup-slot-wrap
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kzrus8/adblock_detected/
+*$script,redirect-rule=noopjs,domain=mail.inbox.lv
+
+! naijagists .com anti select
+naijagists.com##+js(aopr, disableSelection)
+
+! nandedbazaar .com anti select
+nandedbazaar.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! naukridisha .in anti select
+naukridisha.in##+js(acs, document.onselectstart)
+
+! northumberland-walks.co .uk anti right click, select, drag
+northumberland-walks.co.uk##+js(ra, oncontextmenu|ondragstart|onselectstart)
+
+! nydailyquote .com anti select
+nydailyquote.com##+js(acs, document.onselectstart)
+
+! objectivequiz. com anti select
+objectivequiz.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! ouasafat. com anti select
+ouasafat.com##+js(acs, document.onselectstart)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/l0hz3l/website_uninteractive_presumably_due_to_gdpr/
+teamaretuza.com###consentModal,.modal-backdrop
+teamaretuza.com##body:style(overflow: auto!important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8484
+musicindustryhowto.com##+js(acs, document.oncontextmenu)
+musicindustryhowto.com##+js(acs, document.ondragstart)
+musicindustryhowto.com##+js(acs, document.addEventListener)
+musicindustryhowto.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! paesifantasma .it anti right click
+paesifantasma.it##+js(set, x5engine.utils.imCodeProtection, null)
+
+! payeer-gift. ru anti right click
+payeer-gift.ru##+js(aopr, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8496
+theepochtimes.com##+js(nostif, pipaId, 0)
+theepochtimes.com###modal-OVERLAPABLE
+theepochtimes.com##body:style(overflow: auto !important;)
+
+! reflectim .fr anti select, right click
+reflectim.fr##+js(acs, document.oncontextmenu)
+reflectim.fr##+js(acs, document.onselectstart)
+
+! sdelatotoplenie. ru anti right click, select, drag, copy
+sdelatotoplenie.ru##+js(acs, document.oncontextmenu)
+sdelatotoplenie.ru##+js(acs, document.oncopy)
+
+! sachonthi. com anti right click, select
+sachonthi.com##+js(acs, document.oncontextmenu)
+sachonthi.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! significatocanzoni. it anti select
+significatocanzoni.it##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=45651&p=158407
+accuweather.com##.privacy-policy-banner
+
+! https://www.reddit.com/r/uBlockOrigin/comments/l6j9w7/bank_site_still_trying_to_disable_rightclick/
+marksandspencer.com##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8522
+datadikdasmen.com##.post-body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! zdravenportal. eu anti select, right click, drag, ctrl keys
+zdravenportal.eu##+js(acs, document.oncontextmenu)
+zdravenportal.eu##+js(acs, document.addEventListener, document.onselectstart)
+zdravenportal.eu##+js(aopw, disable_hot_keys)
+zdravenportal.eu##+js(ra, oncontextmenu)
+zdravenportal.eu##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/lbnly5/can_i_use_ublock_origin_to_block_rightclick/
+chessimprover.com##+js(aopw, document.oncontextmenu)
+chessimprover.com##+js(aopw, document.onselectstart)
+chessimprover.com##+js(aopr, disableSelection)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4057#issuecomment-773083016
+novagente.pt##+js(aeld, copy)
+
+! tahmial.blogspot. com anti select
+tahmial.blogspot.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! talpo. it anti right click, select, copy etc
+talpo.it##+js(set, x5engine.utils.imCodeProtection, null)
+
+! th-world. com anti right click, select, copy, ctrl keys
+th-world.com##+js(aeld, /contextmenu|select|copy/)
+th-world.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+th-world.com##+js(ra, oncontextmenu|ondragstart|onselectstart|onkeydown|oncopy|oncut)
+th-world.com##+js(aeld, , 0x)
+th-world.com##^script:has-text(innerText)
+
+! thezealots. org anti right click, select
+thezealots.org##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+thezealots.org##+js(acs, document.oncontextmenu)
+
+! top.howfn. com anti select
+top.howfn.com##+js(acs, document.onselectstart)
+
+! vinaurl.blogspot. com anti right click, select, ctrl-u, f12 etc
+vinaurl.blogspot.com##+js(acs, matchMedia)
+vinaurl.blogspot.com##+js(aopr, shortcut)
+vinaurl.blogspot.com##+js(acs, document.onkeydown)
+
+! wasza-farma. pl anti right click
+wasza-farma.pl##+js(ra, oncontextmenu)
+
+! wouterplanet. com anti right click / select, dev tools
+wouterplanet.com##+js(ra, oncontextmenu)
+wouterplanet.com##+js(nosiif, _0x)
+wouterplanet.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! erexams. com anti select
+erexams.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! deportealdia.live anti right click; ref. https://github.com/AdguardTeam/AdguardFilters/issues/74115
+deportealdia.live##+js(acs, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8554
+htmlgames.com##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/8551
+pbinfo.ro##.text-warning
+
+! https://github.com/uBlockOrigin/uAssets/issues/8555
+||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js^$script,redirect-rule=googlesyndication_adsbygoogle.js,domain=hotcleaner.com
+hotcleaner.com##.adsbygoogle:upward(1):remove()
+hotcleaner.com##body > div[id]:matches-css(position: fixed):style(visibility: hidden !important)
+
+! vedantu. com (Fix right click and select text)
+vedantu.com##+js(aeld, contextmenu, preventDefault)
+vedantu.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8560
+||gmod-servers.com/assets/js/jquery.adblock-detector.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/8575
+pcso-lottoresults.com##+js(aopr, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8578
+@@||freedomoutpost.com^$ghide
+
+! asiatv. online anti right click
+asiatv.*##+js(aeld, contextmenu)
+
+! fmovies. (mx => red => ..) right click, select, drag, f-keys, print
+fmovies.*##+js(acs, document.oncontextmenu)
+fmovies.*##+js(acs, disableSelection, reEnable)
+fmovies.*##+js(aopr, document.ondragstart)
+fmovies.*##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+fmovies.*##style:has-text(@media print):remove()
+
+! japan-fans.com right click
+japan-fans.com##+js(acs, document.onmousedown)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/82216
+lcpdfr.com##+js(acs, $, AdBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8624
+comprerural.com##+js(aopr, append_link)
+
+! arlinadzgn. com select / copy manipulation
+arlinadzgn.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+arlinadzgn.com##+js(aeld, copy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8632
+stowarzyszenie-impuls.eu##+js(aeld, contextmenu)
+
+! iovivoatenerife. it anti right click, select
+iovivoatenerife.it##+js(aopr, document.oncontextmenu)
+iovivoatenerife.it##+js(aopr, disableSelection)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/76660
+whatfontis.com##+js(acs, $, adBlock)
+
+! viveretenerife. com anti right click
+viveretenerife.com##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8677
+skandynawiainfo.pl##+js(aeld, , mdp)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8678
+sklep-agroland.pl##+js(aeld, /^(?:contextmenu|dragstart|selectstart)$/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8686
+kangmartho.com##+js(acs, document.onselectstart)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=45843&p=158994#p158994
+techjunkie.com##+js(aeld, mouseout)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/77079
+solotrend.net##+js(aopw, ai_front)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/m26n32/site_with_a_few_popups_blocks_ability_to_use_dev/
+goalup.live##+js(acs, $, contextmenu)
+goalup.live##+js(ra, oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8701
+hulnews.top##+js(acs, document.oncontextmenu)
+hulnews.top##+js(aopw, stopPrntScr)
+hulnews.top##:not(input):not(textarea),img:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+hulnews.top##*::selection:style(background-color:#338FFF!important)
+||files.vi.zone/player/*$script,domain=hulnews.top
+hulnews.top##.jw-reset.jw-error
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/73724
+quora.com##+js(set, ansFrontendGlobals.settings.signupWallType, undefined)
+quora.com##.qu-overflow--hidden[class*="qu-zIndex--modal_"]
+quora.com##.qu-overflow--hidden[style*="filter: blur"]:style(filter:none !important;overflow:auto !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8702
+wired.com##+js(aopw, journeyCompilerGateway)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8704
+oferty.dsautomobiles.pl##+js(aeld, contextmenu)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/77375
+gats.io##+js(ra, oncontextmenu, body)
+
+! scrolller.com anti-adb
+scrolller.com##.notification[style^="height: 189px;"]
+
+! cambiarevita. eu anti select
+cambiarevita.eu##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8723
+wzamrani.com##+js(aeld, contextmenu)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/77665
+xtv.cz##+js(nostif, pgblck)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8734
+otakudesu.*##+js(acs, document.oncontextmenu)
+otakudesu.*##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ofstkl/adblock_warning_on_puhekuplacom/
+puhekupla.com#@#.googlead
+*$xhr,redirect-rule=nooptext,domain=puhekupla.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/8739
+promotor.pl##+js(ra, oncontextmenu, body)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8759
+citroen.pl##+js(aeld, contextmenu)
+citroen.pl##+js(aopw, document.onkeypress)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8760
+peugeot.pl##+js(aeld, contextmenu)
+peugeot.pl##+js(aopw, document.onkeypress)
+
+! hatsukimanga.com right click
+hatsukimanga.com##+js(acs, $, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8816
+polagriparts.pl##+js(aeld, /^(?:contextmenu|copy)$/)
+polagriparts.pl##+js(aopr, document.onkeydown)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8830
+protocol.com###form_out
+protocol.com##body:style(overflow:auto !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8831
+tritinia.com##+js(acs, jQuery, keydown)
+tritinia.com##+js(aopr, document.oncontextmenu)
+tritinia.com##+js(aopr, disable_copy)
+tritinia.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/DandelionSprout/adfilt/issues/63#issuecomment-812837952
+fakechatapp.com##.banner
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/79472
+toonytool.com##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/8856
+enttechub.com##body:style(-webkit-touch-callout: default !important; -khtml-user-select: text !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8865
+nordkorea-info.de##+js(set, document.oncontextmenu, null)
+nordkorea-info.de##+js(aeld, /dragstart|keyup|keydown/)
+
+! battle-one.com anti right click, select
+battle-one.com##+js(aopr, document.oncontextmenu)
+battle-one.com##+js(aopr, disableSelection)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/mnhzhx/cannot_right_click_or_ctrlf_on_this_site/
+geotips.net##+js(set, document.oncontextmenu, null)
+geotips.net##+js(aeld, /keyup|keydown/, wpcc)
+geotips.net##+js(set, onload, null)
+geotips.net##:not(input):not(textarea),img:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80026
+korona.co.jp##+js(ra, oncopy|oncontextmenu, body)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8866
+!#if !env_firefox
+gmx.net##+js(set, document.documentElement.AdBlockDetection, noopFunc)
+!#endif
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80139
+theblaze.com##+js(aopw, admrlWpJsonP)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8870
+promotor-poz.kylos.pl##+js(ra, oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8871
+novelism.jp##+js(ra, oncontextmenu|ondragstart|oncopy|oncut, .select-none, stay)
+novelism.jp##.select-none:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/mqovyt
+bemoneyaware.com##html:style(overflow: auto !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8878
+||cm.g.doubleclick.net/pixel$image,redirect-rule=1x1.gif,domain=tpc.googlesyndication.com
+||tpc.googlesyndication.com/pagead/images/x_button_blue2.svg$image,redirect-rule=1x1.gif,domain=tpc.googlesyndication.com
+||cm.g.doubleclick.net/pixel$image,redirect-rule=1x1.gif,domain=diep.io
+||tpc.googlesyndication.com/pagead/images/x_button_blue2.svg$image,redirect-rule=1x1.gif,domain=diep.io
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80501
+||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js^$redirect-rule=googlesyndication_adsbygoogle.js,script,domain=mifirm.net
+
+! gnt24365.net anti right click, select
+gnt24365.net##+js(acs, document.oncontextmenu)
+gnt24365.net##+js(acs, document.onselectstart)
+gnt24365.net##*:style(-webkit-touch-callout: default!important;-webkit-user-select: auto!important;-moz-user-select: auto!important;user-select: auto!important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80660
+cssreference.io##^script:has-text(window.carbonLoaded)
+!#if !cap_html_filtering
+cssreference.io##+js(aopr, carbonLoaded)
+!#endif
+cssreference.io##.placeholder
+
+! https://github.com/uBlockOrigin/uAssets/issues/8912
+zsti.zsti.civ.pl##+js(aeld, contextmenu, preventDefault)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80929
+hardcoregames.ca##+js(aeld, /contextmenu|cut|copy|keydown/)
+hardcoregames.ca##+js(set, document.onkeydown, null)
+hardcoregames.ca##body * :not(input):not(textarea):style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80934
+bikesell.co.kr##+js(ra, oncontextmenu, body)
+
+! truyenbanquyen.com anti right click, select, F12
+truyenbanquyen.com##+js(acs, document.oncontextmenu)
+truyenbanquyen.com##+js(aopw, disable_hot_keys)
+truyenbanquyen.com##+js(aopw, disable_copy)
+truyenbanquyen.com##*:style(-webkit-touch-callout: default!important; -webkit-user-select: auto!important; -moz-user-select: auto!important; -ms-user-select: auto!important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81092
+globaledu.jp##+js(acs, document.oncontextmenu)
+globaledu.jp##+js(ra, oncontextmenu|onselectstart, body)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81105
+imagecolorpicker.com#@#div[id^="ezoic-pub-ad-"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/mxqj6h/aeldjs_not_enough_for_piratelawyer_blocking/
+torrentlawyer.com##+js(set, document.oncontextmenu, noopFunc)
+torrentlawyer.com##+js(set, document.ondragstart, noopFunc)
+torrentlawyer.com##+js(set, document.onmousedown, noopFunc)
+torrentlawyer.com##+js(set, document.onselectstart, noopFunc)
+
+! gsmfirmware. net anti select
+gsmfirmware.net##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8968
+revistavanityfair.es##+js(aopr, initAdBlockerPanel)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81778
+spielspiele.de##.is-blocked
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81867
+charbelnemnom.com##+js(aeld, /contextmenu|keydown/)
+
+! img999. com anti right click
+img999.com##+js(ra, oncontextmenu)
+
+! lataifas. ro anti right click, select, f-keys
+lataifas.ro##+js(acs, document.oncontextmenu)
+lataifas.ro##+js(acs, jQuery, oncontextmenu)
+lataifas.ro##+js(aeld, , undefined)
+lataifas.ro##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+/wp-content/plugins/append-link-on-copy/js/append_link.js$script,1p
+
+! foodviva. com anti select / drag / right click
+foodviva.com##+js(ra, oncontextmenu|ondragstart|onselectstart)
+
+! sysnettechsolutions. com anti right click, select, f-keys
+||sysnettechsolutions.com^$csp=script-src * 'unsafe-inline'
+sysnettechsolutions.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! toppremiumpro. com amti select, copy, right click, drag, f-keys
+toppremiumpro.com##+js(aeld, /contextmenu|selectstart|copy|dragstart/)
+toppremiumpro.com##+js(aopr, cpp_loc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9088
+wirtualnyspac3r.pl##+js(aeld, contextmenu)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/83260
+47news.jp##+js(acs, $, contextmenu)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ndv0kb/antiright_click_on_hitproversioncom/
+hitproversion.com##+js(aopr, disableEnterKey)
+hitproversion.com##+js(aopw, document.ondragstart)
+hitproversion.com##style:has-text(user-select:):remove()
+
+! https://github.com/uBlockOrigin/uAssets/issues/9097
+/wp-content/plugins/image-watermark/*$script
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/83556
+news.dwango.jp##+js(ra, oncontextmenu, body)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/83712
+lowkeytech.com##+js(acs, String.prototype.charCodeAt, ai_)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/83664
+@@||dmax.de^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/9146#issuecomment-846390986
+techsini.com##+js(acs, jQuery, preventDefault)
+techsini.com##style:has-text(user-select:):remove()
+
+! https://github.com/uBlockOrigin/uAssets/issues/9159
+olarila.com##+js(nostif, offsetHeight)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9170
+blisseyhusband.in##+js(acs, jQuery, contextmenu)
+blisseyhusband.in##+js(acs, document.oncontextmenu)
+blisseyhusband.in##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! bloggerspice. com anti select
+bloggerspice.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9183
+drawasaurus.org##+js(nostif, forceRefresh)
+
+! openfinanza. it anti right click, select, drag, f-keys
+openfinanza.it##+js(acs, document.oncontextmenu)
+openfinanza.it##+js(acs, document.ondragstart)
+openfinanza.it##+js(aopw, disableEnterKey)
+
+! japanxxxmovie.com,sexpox.com anti right click
+japanxxxmovie.com,sexpox.com##+js(acs, $, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9204
+antena3.com,lasexta.com##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9208
+nbcsports.com##+js(aopw, admrlWpJsonP)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/84060
+pashplus.jp##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9212
+allsmo.com##+js(set, document.onkeydown, null)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9023
+upvideo.to##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9291
+kpopsea.com##+js(aeld, contextmenu)
+
+! katholisches. info warning popup
+katholisches.info##+js(nostif, pop)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/84616
+ubuntudde.com##+js(acs, String.prototype.charCodeAt, ai_)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9339
+streaminglearningcenter.com##+js(nostif, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10422
+prepostseo.com##+js(nostif, 'head')
+
+! youmath. it anti select
+youmath.it##+js(aopw, document.onmousedown)
+youmath.it##+js(aopw, document.onselectstart)
+youmath.it##+js(aopr, document.onselectstart)
+youmath.it##+js(set, disableselect, trueFunc)
+youmath.it##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9380
+followmikewynn.com##+js(acs, document.oncontextmenu)
+followmikewynn.com##+js(aopr, document.onkeydown)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9384
+flipmsg.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9388
+wattpad.com##+js(ra, oncontextmenu)
+wattpad.com##+js(aeld, /copy|dragstart/)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81440
+lazytranslations.com##+js(aopw, disableEnterKey)
+lazytranslations.com##+js(aopw, document.ondragstart)
+lazytranslations.com##style:has-text(unselectable):remove()
+
+! starbene. it anti select, right click, drag, copy, f keys, ctrl
+starbene.it##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+starbene.it##+js(acs, document.oncontextmenu)
+starbene.it##+js(aeld, /copy|contextmenu/)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/85982
+||belezaedieta.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/9435
+operatorsekolahdbn.com##+js(aopr, document.onselectstart)
+operatorsekolahdbn.com##style:has-text(user-select:):remove()
+operatorsekolahdbn.com##+js(aeld, keydown)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9439
+! https://github.com/uBlockOrigin/uAssets/issues/975
+allmovie.com,sidereel.com##+js(acs, $, /getScript|error:/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9440
+televisiongratishd.com##+js(set, document.oncontextmenu, null)
+televisiongratishd.com##+js(set, document.onkeydown, null)
+televisiongratishd.com##+js(set, document.onkeypress, null)
+
+! renditepassive. net anti right click / select / drag
+renditepassive.net##+js(set, document.oncontextmenu, '')
+renditepassive.net##+js(set, document.onselectstart, '')
+renditepassive.net##+js(set, document.onkeydown, '')
+renditepassive.net##+js(set, document.onmousedown, '')
+renditepassive.net##+js(set, document.onclick, '')
+renditepassive.net##+js(acs, document.ondragstart)
+renditepassive.net##+js(aopr, onload)
+
+! onlinecoursebay. com anti right click / select / f keys
+onlinecoursebay.com##+js(aeld, , mdp)
+
+! utorrentgamesps2.blogspot. com anti right click , select
+utorrentgamesps2.blogspot.com##+js(acs, document.onkeydown)
+utorrentgamesps2.blogspot.com##+js(ra, onselectstart)
+
+! sonnenverlauf/suncalc anti-adb
+sonnenverlauf.de,suncalc.org###adsGross1
+sonnenverlauf.de,suncalc.org###adsKlein
+
+! https://www.reddit.com/r/uBlockOrigin/comments/o6d0vs/how_to_stop_websites_from_detecting_ublock/
+themosvagas.com.br##+js(acs, addEventListener, keydown)
+themosvagas.com.br##+js(acs, onload)
+themosvagas.com.br##+js(set, document.onkeydown, null)
+themosvagas.com.br##style:has-text(user-select:):remove()
+
+! https://www.reddit.com/r/uBlockOrigin/comments/o7bhur/problem_ubo_detected_on_fauxid/
+fauxid.com##+js(aeld, error)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57758
+audiostereo.pl##+js(nostif, adb)
+
+! tvstreampf. xyz anti right click / select / drag
+tvstreampf.xyz##+js(acs, document.ondragstart)
+tvstreampf.xyz##+js(acs, document.onselectstart)
+
+! gamezop. com anti select
+gamezop.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! articlesmania. me anti right click, copy
+articlesmania.me##+js(ra, oncontextmenu)
+articlesmania.me##+js(acs, document.onkeydown)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9467
+jobskaro.com##+js(aopr, disableEnterKey)
+jobskaro.com##+js(aopw, document.ondragstart)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/o8wr0g/antiadblock_ygoprodeckcom/
+*$image,redirect-rule=1x1.gif,domain=ygoprodeck.com
+
+! readm. org anti select
+readm.org##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! androidtvbox. eu anti select, right click, drag
+androidtvbox.eu##+js(aeld, dragstart)
+androidtvbox.eu##+js(aopr, nocontextmenu)
+androidtvbox.eu##+js(acs, document.ondragstart)
+androidtvbox.eu##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2060
+nicematin.com##+js(aeld, , AdB)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9477
+myhtebooks.com##+js(ra, oncontextmenu|ondragstart|onselectstart|onselect|oncopy|onbeforecopy|onkeydown|onunload)
+myhtebooks.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9478
+votetw.com##div[style="width: 100%; height: 100%; top: 0;left: 0; position:fixed; z-index: 255;"]
+
+! gooyaabitemplates. com anti select
+gooyaabitemplates.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9496
+urbharat.xyz##+js(ra, oncontextmenu, body)
+urbharat.xyz##+js(set, document.onkeydown, null)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9502
+bilibili.com##+js(aeld, selectionchange, quill.emitter)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9503
+sogou.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9511
+boke112.com##+js(aopw, stopPrntScr)
+boke112.com##*::selection:style(background-color:#338FFF!important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9535
+bimiacg.net##+js(acs, document.oncontextmenu)
+bimiacg.net##body:style(cursor: auto!important;)
+bimiacg.net##a:hover:style(cursor: auto!important;)
+
+! themes-dl. com anti select
+themes-dl.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9536
+/wp-content/plugins/ungrabber/js/*$script
+
+! diaforetiko. gr anti right click / select
+diaforetiko.gr##+js(acs, document.oncontextmenu)
+diaforetiko.gr##+js(aopr, disableSelection)
+
+! tchadcarriere. com anti right click / select
+tchadcarriere.com##+js(acs, document.oncontextmenu)
+tchadcarriere.com##+js(aopr, disableSelection)
+
+! shaamtv. com anti select
+shaamtv.com##+js(aopr, disableSelection)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9540
+pixnet.net##+js(ra, oncontextmenu|onDragStart|onselectstart)
+pixnet.net##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9541
+yamibo.com##+js(aeld, /contextmenu|selectstart|select|copy|dragstart/)
+yamibo.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! quicasting. it anti right click / select
+||quicasting.it^$csp=script-src * 'unsafe-inline'
+
+! https://github.com/uBlockOrigin/uAssets/issues/9583
+fimfiction.net##+js(aeld, load, adLazy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9584
+totemat.pl##+js(aopr, disableSelection)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4980
+noweconomy.live##+js(set, document.oncontextmenu, null)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9594
+appd.at##+js(aopr, disableEnterKey)
+appd.at##+js(aopw, document.ondragstart)
+appd.at##style:has-text(user-select:):remove()
+
+! appofmirror.com anti right click, select
+appofmirror.com##+js(acs, nocontextmenu)
+appofmirror.com##body *:style(user-select: auto!important;-webkit-touch-callout: default!important;-webkit-user-select: auto!important;-moz-user-select: auto!important;-ms-user-select: auto!important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9614
+! https://github.com/uBlockOrigin/uAssets/pull/20522
+wjx.cn,wjx.top##+js(aopr, _0x1a4c)
+wjx.cn,wjx.top##+js(aopr, document.oncontextmenu)
+wjx.cn,wjx.top##+js(aopr, document.onselectstart)
+wjx.cn,wjx.top##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9617#issuecomment-886002500
+blog.csdn.net##+js(aeld, copy, preventDefault)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9619
+moegirl.org.cn##+js(aeld, copy, jQuery!=="undefined")
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/88954
+hentainhaven.com##body > .text-center[style="color:white; font-size:16px;"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/9620
+zhihu.com##+js(aeld, /contextmenu|copy/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9622
+masuit.com##+js(aopr, document.oncontextmenu)
+masuit.com##+js(nosiif, debugger)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9623
+juejin.cn##+js(aeld, copy, preventDefault)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9626
+bbs.mihoyo.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+!#if ext_devbuild
+bbs.mihoyo.com##+js(aeld, copy, throw)
+!#else
+bbs.mihoyo.com##+js(aeld, copy, [native code])
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/9627
+book.zhulang.com##+js(aeld, /contextmenu|selectstart/)
+zhulang.com##.idx-bg
+zhulang.com##.tap-hdl
+
+! https://github.com/uBlockOrigin/uAssets/issues/9628
+faloo.com##style:has-text(-moz-none):remove()
+
+! https://github.com/uBlockOrigin/uAssets/issues/9635
+qidian.com##+js(aeld, /contextmenu|copy/)
+qidian.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9634
+699pic.com##+js(aeld, /contextmenu|mousedown/)
+699pic.com##+js(nosiif, clearInterval(loginReady))
+
+! https://github.com/uBlockOrigin/uAssets/issues/9644
+book.zongheng.com##+js(aopr, document.oncontextmenu)
+book.zongheng.com##+js(ra, onselectstart)
+book.zongheng.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9645
+ciweimao.com##+js(aopr, document.oncontextmenu)
+ciweimao.com##+js(aopw, document.body.oncopy)
+ciweimao.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/pull/9646
+cnki.net##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/pull/9648
+wpchen.net##+js(aeld, contextmenu)
+wpchen.net##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/pull/9649
+360doc.com##+js(aopr, document.oncontextmenu)
+360doc.com##+js(aopw, document.body.oncopy)
+360doc.com##+js(set, document.body.onmouseup, null)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9647
+imooc.com##+js(aopr, addCopyright)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9657
+apk1s.com##+js(aopr, disableEnterKey)
+apk1s.com##+js(aopw, document.ondragstart)
+apk1s.com##+js(ra, onselectstart|oncontextmenu, body)
+apk1s.com##style:has-text(user-select):remove()
+
+! https://github.com/uBlockOrigin/uAssets/pull/9653
+peekme.cc##+js(aeld, selectstart)
+peekme.cc##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9666
+tiermaker.com##+js(nostif, &adslot)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9683
+dushu.qq.com##+js(aopr, document.oncontextmenu)
+dushu.qq.com##+js(aopr, document.oncopy)
+dushu.qq.com##+js(aopr, document.onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9684
+commandlinux.com##+js(aopr, copy_div_id)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ow0te1/cannot_right_click_on_foxaholiccom/
+foxaholic.com##+js(ra, oncontextmenu|onkeydown|onselectstart, body)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9699
+hongxiu.com##+js(aeld, contextmenu)
+hongxiu.com##+js(aopr, LBF.define)
+hongxiu.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9672
+!#if env_chromium
+cheatsquad.gg##*::-webkit-scrollbar:style(width:17px !important)
+cheatsquad.gg##*::-webkit-scrollbar-thumb:style(background:#5e5e5e !important)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/9711
+readnovel.com##+js(aeld, contextmenu)
+readnovel.com##+js(aopr, LBF.define)
+readnovel.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9709
+wenku.baidu.com##.experience-card-dialog-wrap
+wenku.baidu.com##body:style(overflow:auto !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9716
+auth.alipay.com##+js(ra, oncopy|oncontextmenu|oncut|onpaste, input)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9720
+30edu.com.cn##+js(ra, oncontextmenu|oncopy|onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9722
+shumilou.com##+js(ra, onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9723
+doc.mbalib.com##+js(ra, onbeforecopy|oncontextmenu|oncopy|ondragstart|onmouseup|onselect|onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9721
+nowcoder.com##+js(aeld, copy)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ozya3s/antiright_click_on_audiobookcupcom/
+audiobookcup.com##+js(aopr, disableEnterKey)
+audiobookcup.com##+js(aopw, document.ondragstart)
+audiobookcup.com##html,.unselectable:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/p07z3m/
+oantagonista.com##.lightbox-push
+
+! https://github.com/uBlockOrigin/uAssets/issues/9740
+aicesu.cn##+js(aopw, document.oncopy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9741
+uihtm.com##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9742
+uslsoftware.com##+js(aeld, contextmenu)
+uslsoftware.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9743
+tadu.com##+js(aeld, /contextmenu|selectstart/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9744
+qiangwaikan.com##+js(aopr, document.oncontextmenu)
+qiangwaikan.com##+js(aopr, disableSelection)
+qiangwaikan.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9745
+perangkatguruku.com##+js(ra, oncontextmenu|ondragstart|onkeydown|onmousedown|onselectstart|style, body)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/p4aj2k/selecting_and_copying_not_working_on/
+janvissersweer.nl##+js(aopw, stopPrntScr)
+janvissersweer.nl##style:has-text(/user-select|::selection/):remove()
+
+! https://github.com/uBlockOrigin/uAssets/issues/9766
+7fyd.com##+js(aopr, document.oncontextmenu)
+7fyd.com##+js(aopw, document.onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9767
+shushan.zhangyue.net##+js(ra, oncontextmenu|ondragstart|onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9770
+logonews.cn##+js(set, document.oncopy, null)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/87250
+spanishdict.com##main > div[class*="-"] > div[class^="_"] > div[class^="_"] > div[class]:has(> div[class^="_"]:has-text(Do your part to support us))
+! https://github.com/uBlockOrigin/uAssets/issues/9783
+spanishdict.com##+js(set, SD_BLOCKTHROUGH, true)
+spanishdict.com###removeAdsSidebar
+spanishdict.com##.ad-wrapper, #adTopLarge, [id^="adSide"], [id^="adMiddle"]
+! https://github.com/uBlockOrigin/uAssets/issues/18341
+spanishdict.com##.ReactModal__Overlay--after-open:has(iframe[srcdoc], img):has-text(signing up)
+! https://github.com/uBlockOrigin/uAssets/issues/18342
+spanishdict.com##.ReactModal__Overlay--after-open:has-text(/Premium|Try 7 days/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5964#issuecomment-902058918
+rule34hentai.net##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9828
+dez.ro#@#.ad-placement
+
+! https://github.com/uBlockOrigin/uAssets/issues/9155#issuecomment-903867770
+cloudemb.com##+js(aeld, contextmenu)
+
+! bwitter.me anti-adb
+bwitter.me###side > ins.adsbygoogle:upward(1)
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/1700
+windguru.net###warning-content
+
+! https://github.com/uBlockOrigin/uAssets/issues/9872
+thinkamericana.com##+js(nosiif, offsetHeight)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9874
+menrec.com##+js(nosiif, offsetHeight)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9878
+hendersonville.com##.adblock-detected
+
+! https://github.com/uBlockOrigin/uAssets/issues/9895
+*$image,redirect-rule=1x1.gif,domain=guardian.gg
+
+! https://github.com/uBlockOrigin/uAssets/pull/9925
+! https://github.com/uBlockOrigin/uAssets/issues/13297
+outlook.live.com##div[class][tabindex="-1"][role=region][aria-label][data-min-width][data-max-width] ~ div[class][data-max-width="2400"] + div[class]
+outlook.live.com###MainModule + div[class] > div[style^="width"] > div > i[data-icon-name="OutlookLogo"]:upward(3)
+outlook.live.com###MainModule div[data-max-width="2400"] + div[class]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pjhnuc/site_crippling_basic_browser_functions/
+naaree.com##+js(aopw, disableEnterKey)
+naaree.com##+js(ra, style, body[style="user-select: none;"], stay)
+naaree.com##+js(set, document.oncontextmenu, null)
+naaree.com##+js(set, document.onkeydown, null)
+naaree.com##style:has-text(/media print|user-select:/):remove()
+
+! https://github.com/uBlockOrigin/uAssets/issues/9937
+info-beihilfe.de##+js(acs, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9951
+invado.pl##+js(aeld, /contextmenu|copy/)
+invado.pl##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/pull/9989
+!#if env_mobile
+blog.csdn.net##.btn_open_app_prompt_div
+blog.csdn.net##.btn_mod
+blog.csdn.net##.readall_box
+blog.csdn.net##.feed-Sign-span
+blog.csdn.net##.weixin-shadowbox
+blog.csdn.net##.article_content:style(overflow:auto !important;height:auto !important)
+jianshu.com##.call-app-btn
+jianshu.com##.collapse-tips
+jianshu.com##.download-app-guidance
+jianshu.com##.dt-open-bg[data-scene="leftBtn"]
+jianshu.com##body:style(overflow:auto !important)
+jianshu.com##.collapse-free-content:style(overflow:auto !important;height:auto !important)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/10004
+revouninstaller.com###popupModal, .modal-backdrop
+revouninstaller.com##body.modal-open:style(overflow: auto !important; padding-right: 0 !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10029
+news24.jp##+js(aeld, contextmenu)
+news24.jp##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/pull/10037
+ptable.com##.Notice
+
+! https://github.com/uBlockOrigin/uAssets/issues/10038
+blog.csdn.net##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+blog.csdn.net##.hljs-button.signin
+
+! https://github.com/uBlockOrigin/uAssets/issues/10039
+cda-hd.cc,hqq.to##+js(set, document.oncontextmenu, null)
+hqq.to##+js(set, document.onkeydown, trueFunc)
+hqq.to##+js(nostif, debugger)
+hqq.to##+js(set, console.clear, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10040
+blogpascher.com##.CampaignFullscreen__bravoLayer
+blogpascher.com##html.om-position-popup body:style(overflow:auto !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10050
+tv-tokyo.co.jp##+js(set, document.oncontextmenu, null)
+
+! https://forums.lanik.us/viewtopic.php?f=91&t=46783
+developpez.com##+js(acs, document.getElementById, cookie)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10089
+||copypoison.com^$3p
+
+! whowantstuffs.blogspot. com anti select
+whowantstuffs.blogspot.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/pull/10110
+ihbarweb.org.tr##+js(aeld, /^(?:copy|paste)$/, undefined)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/q31fnc/mocahorg_adblocker_detection/
+mocah.org##+js(nosiif, adsbygoogle)
+
+! unikampus.net anti select anti right-click
+unikampus.net##+js(aopr, document.oncontextmenu)
+unikampus.net##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/q5jmsh/anti_ad_block_message_on_ad_shortener/
+gaminplay.com##+js(aeld, contextmenu)
+
+! aksensei. com anti right click / copy / ctrl-u
+aksensei.com##+js(ra, oncontextmenu)
+aksensei.com##+js(acs, document.onkeydown)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10187
+tekstowo.pl##+js(aopw, addLink)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10200
+*$script,redirect-rule=noopjs,domain=inbox.lv|inbox.la
+
+! https://github.com/uBlockOrigin/uAssets/issues/10202
+arti-definisi-pengertian.info##+js(set, document.oncontextmenu, null)
+arti-definisi-pengertian.info##+js(aopw, document.onselectstart)
+arti-definisi-pengertian.info##+js(aopw, document.ondragstart)
+arti-definisi-pengertian.info###ouibounce-modal
+
+! https://github.com/uBlockOrigin/uAssets/issues/10224
+techtobo.com##.js-notices
+
+! libertatea. ro clipboard manipulation
+libertatea.ro##+js(aeld, copy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10226
+shopomo.co.uk##+js(nostif, ai_)
+c4ddownload.com,the-scorpions.com##+js(aopr, b2a)
+
+! baixedetudo.net. br anti right click / copy / ctrl U / F12
+baixedetudo.net.br##+js(aopw, document.oncontextmenu)
+baixedetudo.net.br##+js(aeld, /copy|keydown/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10233
+epn.bz##+js(set, ab, false)
+
+! erinsakura. com anti copy
+erinsakura.com##+js(aeld, copy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10240
+njjzxl.net##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10252
+affbank.com##+js(set, canRunAds, true)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qbcvtc/nbc_sports_anti_ad_block_workaround/
+nbcsportsedge.com##+js(aopw, admrlWpJsonP)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10273
+gardenia.net##+js(ra, oncopy|oncut|onselectstart|style|unselectable, body, stay)
+gardenia.net##+js(set, document.body.oncut, null)
+gardenia.net##+js(set, document.body.oncopy, null)
+gardenia.net##+js(aeld, /copy|cut|selectstart/)
+
+! https://github.com/uBlockOrigin/uAssets/commit/e6d649c38a8e
+||piano.io^$domain=fastcompany.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/10295
+_google_ads.$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/10319
+oploverz.*##+js(aopw, check)
+
+! elahmad. com right click, select, drag
+elahmad.com##+js(ra, oncontextmenu|ondragstart|onselectstart)
+elahmad.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! adpres. ro right click select copy f keys
+adpres.ro##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+adpres.ro##+js(aopw, stopPrntScr)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qkf91l/timeanddatecom/
+@@||timeanddate.com^$ghide
+timeanddate.com###ad300
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qo0a54/adblock_detected/
+racevpn.com##+js(aopw, document.onkeydown)
+
+! https://github.com/bogachenko/fuckfuckadblock/issues/237 AG/FB Social
+messitv.net##.sharepost
+
+! playpilot. com hbomax annoyance
+playpilot.com##.takeover.modals
+playpilot.com##body:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10458
+buondua.com##.noblock-modal
+buondua.com##body.tingle-enabled:style(position: static!important;overflow: auto!important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10470
+c315.cn##+js(ra, oncontextmenu|onselectstart|oncut|oncopy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10471
+uemeds.cn##+js(ra, oncontextmenu|ondragstart|onselect)
+uemeds.cn##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/84411
+secondlifetranslations.com##+js(aost, encodeURIComponent, inlineScript)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10460#issuecomment-976250003
+animatedshows.to,miraculous.to##+js(aopr, debugchange)
+animatedshows.to,miraculous.to##+js(ra, oncontextmenu, body)
+miraculous.to##+js(aeld, contextmenu, preventDefault)
+animatedshows.to,miraculous.to##+js(aeld, /^(?:keyup|keydown)$/)
+miraculous.to##+js(set, console.clear, noopFunc)
+miraculous.to##+js(set, console.log, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10559
+criticalthinking.org##+js(nostif, donation-modal)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2380
+sportnews.to##+js(acs, document.getElementById, isMoz)
+sportnews.to##+js(acs, jQuery, keydown)
+sportnews.to##+js(set, document.onkeydown, null)
+sportnews.to##+js(set, document.onkeypress, null)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/r2huhp/bypass_copypaste_restriction/
+pttws.ptt.gov.tr##+js(ra, onpaste, #tr_mesaj > td > .text-input.validate\[required\])
+
+! https://github.com/uBlockOrigin/uAssets/issues/10612
+leeyiding.com##+js(ra, oncontextmenu|onkeydown|onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10624
+city-data.com##+js(aopr, addLink)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10636
+zwei-euro.com##+js(nostif, Delay)
+
+! voe right click other keys
+voe.sx,voe-unblock.com##+js(aeld, /keydown|keyup/, keyCode)
+voe.sx,voe-unblock.com##+js(aeld, contextmenu)
+scatch176duplicities.com,voe-unblock.com##+js(acs, console.clear)
+kathleenmemberhistory.com,nonesnanking.com,prefulfilloverdoor.com,phenomenalityuniform.com,nectareousoverelate.com,timberwoodanotia.com,strawberriesporail.com,valeronevijao.com,cigarlessarefy.com,figeterpiazine.com,yodelswartlike.com,generatesnitrosate.com,crownmakermacaronicism.com,chromotypic.com,gamoneinterrupted.com,metagnathtuggers.com,wolfdyslectic.com,rationalityaloelike.com,sizyreelingly.com,simpulumlamerop.com,urochsunloath.com,monorhinouscassaba.com,counterclockwisejacky.com,35volitantplimsoles5.com,scatch176duplicities.com,antecoxalbobbing1010.com,boonlessbestselling244.com,cyamidpulverulence530.com,guidon40hyporadius9.com,449unceremoniousnasoseptal.com,19turanosephantasia.com,30sensualizeexpression.com,321naturelikefurfuroid.com,745mingiestblissfully.com,availedsmallest.com,greaseball6eventual20.com,toxitabellaeatrebates306.com,20demidistance9elongations.com,audaciousdefaulthouse.com,fittingcentermondaysunday.com,fraudclatterflyingcar.com,launchreliantcleaverriver.com,matriculant401merited.com,realfinanceblogcenter.com,reputationsheriffkennethsand.com,telyn610zoanthropy.com,tubelessceliolymph.com,tummulerviolableness.com,un-block-voe.net,v-o-e-unblock.com,voe-un-block.com,voe-unblock.*,voeun-block.net,voeunbl0ck.com,voeunblck.com,voeunblk.com,voeunblock3.com##+js(aeld, contextmenu, preventDefault)
+kathleenmemberhistory.com,nonesnanking.com,prefulfilloverdoor.com,phenomenalityuniform.com,nectareousoverelate.com,timberwoodanotia.com,strawberriesporail.com,valeronevijao.com,cigarlessarefy.com,figeterpiazine.com,yodelswartlike.com,generatesnitrosate.com,crownmakermacaronicism.com,chromotypic.com,gamoneinterrupted.com,metagnathtuggers.com,wolfdyslectic.com,rationalityaloelike.com,sizyreelingly.com,simpulumlamerop.com,urochsunloath.com,monorhinouscassaba.com,counterclockwisejacky.com,35volitantplimsoles5.com,scatch176duplicities.com,antecoxalbobbing1010.com,boonlessbestselling244.com,cyamidpulverulence530.com,guidon40hyporadius9.com,449unceremoniousnasoseptal.com,19turanosephantasia.com,30sensualizeexpression.com,321naturelikefurfuroid.com,745mingiestblissfully.com,availedsmallest.com,greaseball6eventual20.com,toxitabellaeatrebates306.com,20demidistance9elongations.com,audaciousdefaulthouse.com,fittingcentermondaysunday.com,fraudclatterflyingcar.com,launchreliantcleaverriver.com,matriculant401merited.com,realfinanceblogcenter.com,reputationsheriffkennethsand.com,telyn610zoanthropy.com,tubelessceliolymph.com,tummulerviolableness.com,un-block-voe.net,v-o-e-unblock.com,voe-un-block.com,voe-unblock.*,voeun-block.net,voeunbl0ck.com,voeunblck.com,voeunblk.com,voeunblock3.com##+js(aeld, keydown, disabledEvent)
+
+! wpking. in f-keys
+wpking.in##+js(aeld, , Key)
+
+! ibomma. pw anti right click select copy
+ibomma.pw##+js(acs, $, contextmenu)
+
+! scrolller. com anti right click
+scrolller.com##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10781
+@@||coinpayu.com^$ghide
+
+! hollywoodmask. com anti select copy newsletter
+hollywoodmask.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+hollywoodmask.com##+js(aeld, /copy|cut|paste|selectstart/)
+hollywoodmask.com##+js(nostif, pop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10938
+phimdinhcao.com##+js(acs, oncontextmenu, keydown)
+phimdinhcao.com##+js(aopr, devtoolsDetector)
+
+! cafago. com anti select
+cafago.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10951
+tvzingvn.*,zingtvhd.*,zingvntv.*##+js(acs, onload, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/pull/10979
+||4399.com/antijs/Antiindulgence.js
+
+! https://github.com/uBlockOrigin/uAssets/pull/10987
+mbalib.com##+js(aeld, /copy|cut|paste|selectstart/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10988
+zgywyd.cn##+js(acs, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10986
+wenku.baidu.com##+js(aeld, /contextmenu|dragstart|keydown/, event.dispatch.apply)
+||hm.baidu.com/hm.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/10976
+dhd24.com#@#.adunit
+
+! https://github.com/uBlockOrigin/uAssets/issues/10982
+||jianbiaoku.com/content/js/copyFun.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10984
+yuque.com##+js(aeld, copy)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/103536
+otomobilgunluklerim.com##.adblockalert
+otomobilgunluklerim.com##.ad_block_detected:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11017
+picallow.com##+js(acs, document.oncontextmenu, nocontextmenu)
+picallow.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11023
+links.extralinks.casa##+js(acs, document.onselectstart, disableselect)
+
+! magesypro. pro anti select
+magesypro.*##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+magesy.blog,magesypro.pro##+js(noeval-if, disable_copy)
+audiotools.pro,magesy.blog,magesypro.pro,audioztools.com##+js(aeld, contextmenu, preventDefault)
+
+! psihologiadeazi. ro anti right click, select, copy, f-keys
+psihologiadeazi.ro##+js(aopr, nocontext)
+psihologiadeazi.ro##+js(aopr, disable_copy)
+psihologiadeazi.ro##+js(acs, jQuery, keydown)
+psihologiadeazi.ro##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11129
+ssuathletics.com##+js(acs, document.querySelector, adblock)
+
+! https://github.com/cjx82630/cjxlist/commit/6529adc701822ea1467b9e5a38ad823d27cc1d1e
+52bdys.com##+js(aopr, onload)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11140
+cocomanga.com##+js(aeld, contextmenu)
+
+! https://github.com/rxliuli/userjs/issues/50
+mooc.chaoxing.com##+js(aeld, beforepaste)
+
+! brownsboys. com anti select
+brownsboys.com##+js(aopr, document.onselectstart)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ru5yks/disabling_an_unnamed_javascript_that_disables/
+mercenaryenrollment.com##+js(acs, document.oncontextmenu)
+mercenaryenrollment.com##style:has-text(user-select):remove()
+
+! geektyper.com anti-adb
+geektyper.com###itemz[style^="position:fixed; top:10px"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/11195
+fotofilter.de##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/11245
+social-unlock.com##form#link a.submit:style(opacity: 1 !important; pointer-events: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11280
+cdn.gamemonetize.com##+js(ra, oncontextmenu, body)
+
+! nusantararom. org nuisance
+nusantararom.org##+js(aeld, contextmenu)
+nusantararom.org##+js(aeld, , keyCode)
+nusantararom.org##+js(no-xhr-if, gif)
+nusantararom.org##p:has-text(Adblock)
+nusantararom.org##.elementor-popup-modal
+
+! https://github.com/uBlockOrigin/uAssets/issues/11326
+! https://github.com/uBlockOrigin/uAssets/issues/5288#issuecomment-1097447454
+! elpais.com##+js(nostif, run)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11330
+mail.tm##:xpath('//*[contains(text(),"blocker")]')
+
+! wawlist. com anti right click, select, ctrl,f-keys
+wawlist.com##+js(acs, document.oncontextmenu)
+wawlist.com##+js(acs, document.onkeydown)
+wawlist.com##+js(aopr, disableSelection)
+wawlist.com##+js(aeld, keydown)
+
+! aepos.ap.gov. in anti right click
+aepos.ap.gov.in##+js(ra, oncontextmenu)
+aepos.ap.gov.in##+js(acs, $, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11412
+realpython.com##+js(aeld, DOMContentLoaded, rprw)
+realpython.com##+js(set-local-storage-item, rprw, $remove$)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11413
+virpe.cc##+js(ra, onselectstart)
+virpe.cc##+js(aeld, contextmenu)
+virpe.cc##+js(set, document.oncontextmenu, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11396
+! https://github.com/uBlockOrigin/uAssets/issues/10881
+northjersey.com,independentmail.com,usatoday.com##.gnt_mol_oy
+northjersey.com,independentmail.com,usatoday.com##html.gnt__mo:style(overflow-y:scroll !important;pointer-events: unset !important;user-select: unset !important;margin-right: unset !important;)
+
+! https://github.com/uBlockOrigin/uAssets/pull/11425
+*/wp-content/plugins/smio-push-notification
+
+! https://github.com/uBlockOrigin/uAssets/issues/11439
+titulky.com##+js(acs, $, "fade")
+
+! https://github.com/uBlockOrigin/uAssets/issues/11483
+||d3fkv551xkjrmm.cloudfront.net/js/detection.js$script,domain=denofgeek.com
+
+! cintateknologi. com anti select
+cintateknologi.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/seqr0i/
+trucksbook.eu##.modal-backdrop
+trucksbook.eu##body:style(overflow: initial !important)
+
+! https://github.com/BottledSoda/RoWebImprover/issues/7
+@@||curs-valutar-bnr.ro^$ghide
+curs-valutar-bnr.ro##.adsbygoogle:style(max-height: 1px !important;left:-9999px !important;position:absolute !important)
+
+! atlas-geografic. net anti right click - select - f-keys
+atlas-geografic.net##+js(aopr, document.oncontextmenu)
+atlas-geografic.net##+js(aopw, disableEnterKey)
+atlas-geografic.net##+js(aopw, document.ondragstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11517
+funnygames.*##.is-blocked
+
+! farm-ro.desigusxpro. com clipboard manipulation
+farm-ro.desigusxpro.com##+js(aopr, document.oncopy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11606
+dongphimmoiz.com##+js(acs, jQuery, stopPropagation)
+
+! linkmate. xyz f-keys
+linkmate.xyz##+js(aeld, , key)
+
+! yhocdata. com f-keys copy select
+yhocdata.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+yhocdata.com##+js(aopr, contentprotector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11615
+||thresholdforum.s3.us-east-2.amazonaws.com/arn:aws:s3:::thresholdforum/javascript_adblockdetector/$script
+
+! https://www.reddit.com/r/uBlockOrigin/comments/sla82r/how_to_fix_blurring_on_this_website/
+meteoblue.com##+js(set, mb.advertisingShouldBeEnabled, false)
+
+! cristelageorgescu. ro anti right click, select, copy, f-key
+cristelageorgescu.ro##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+cristelageorgescu.ro##+js(acs, document.oncontextmenu)
+cristelageorgescu.ro##+js(aopr, disableSelection)
+cristelageorgescu.ro##+js(aeld, , ctrlKey)
+cristelageorgescu.ro##+js(aopr, document.onkeydown)
+cristelageorgescu.ro##+js(aopr, document.oncopy)
+
+! https://github.com/uBlockOrigin/uAssets/pull/8800#issuecomment-1034377712
+payskip.org##body[style^="cursor:pointer"]:style(cursor: auto!important)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/spnkv7/how_to_stop_website_redirecting_block_the/
+investorvillage.com##+js(acs, update_visit_count)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11698
+crunchyscan.fr##+js(acs, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3068
+pornhub.*##+js(rc, hasAdAlert, header)
+pornhub.*###js-abContainterMain
+
+! https://github.com/uBlockOrigin/uAssets/issues/11762
+grandoldteam.com##+js(acs, $, test)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11775
+gamingsinners.com##+js(acs, $, test)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11788
+bike-parts-sym.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! eshentai. tv warning
+eshentai.tv##.aviso
+
+! vumoo.vip devtools
+||vumoo.vip/js/safe.ob.min.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/11815
+pushsquare.com##+js(aopr, _sp_._networkListenerData)
+
+! pobre. tv anti right click, f-keys
+pobre.tv##+js(aeld, contextmenu)
+pobre.tv##+js(aeld, , keyCode)
+
+! www-daftarharga.blogspot. com anti right click, select, f-keys
+www-daftarharga.blogspot.com##+js(acs, document.oncontextmenu)
+www-daftarharga.blogspot.com##+js(aeld, , keyCode)
+www-daftarharga.blogspot.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12012
+academy.hackthebox.com##.show.fade
+academy.hackthebox.com##body:style(overflow:auto !important)
+
+! warning msg
+elitepvpers.com##+js(nostif, $)
+elitepvpers.com##+js(acs, $, Promise)
+
+! filmpornoitaliano anti right click - select
+filmpornoitaliano.org##+js(aopr, document.oncontextmenu)
+filmpornoitaliano.org##+js(aopr, document.onmousedown)
+filmpornoitaliano.org##+js(aopr, document.onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12064
+mocah.org##+js(ra, oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12067
+ukrainashop.com##+js(aeld, contextmenu)
+ukrainashop.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12119
+101soundboards.com##.blocked-notice-small
+
+! https://github.com/uBlockOrigin/uAssets/issues/12132
+geeksforgeeks.org##+js(nostif, onscroll ,5500)
+geeksforgeeks.org##+js(nostif, login ,5000)
+! https://github.com/uBlockOrigin/uAssets/issues/17354
+||utilapi.geeksforgeeks.org/api/geo/usergeodetails/
+geeksforgeeks.org##+js(acs, showAdblockerModal)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10983#issuecomment-1065805363
+androidacy.com##*::selection:style(background-color:#338FFF!important)
+
+! flinsetyadi. com anti right click, select, copy, drag, f-keys
+flinsetyadi.com##+js(acs, document.ondragstart)
+flinsetyadi.com##+js(acs, disableSelection, reEnable)
+flinsetyadi.com##+js(aopr, disable_copy)
+flinsetyadi.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/commit/78e4cf26d8d9302f1874742ca5f282f6c287ef59#commitcomment-68544465
+coinurl.net##+js(ra, onkeydown)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12295
+koszalincity.pl##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+koszalincity.pl##+js(acs, document.oncontextmenu)
+koszalincity.pl##+js(acs, document.onkeydown)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12297
+theghostinmymachine.com##+js(acs, document.oncontextmenu)
+
+! codehelppro.com anti-adblock
+@@||codehelppro.com^$ghide
+codehelppro.com##.adsbygoogle
+
+! ilovevaldinon. it anti right click, select
+ilovevaldinon.it##+js(acs, document.oncontextmenu)
+ilovevaldinon.it##+js(aopr, disableSelection)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/tks3om/how_to_enable_copying_from_websites_that_dont/
+acupoffrench.com##+js(acs, stopPrntScr)
+acupoffrench.com##:not(input):not(textarea)::selection:style(background-color:Highlight!important;color:HighlightText!important)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/tnf617/how_to_block_script_right_click_copy_disable_on/
+novelza.com##+js(rc, click-to-scroll, body)
+novelza.com##+js(acs, stopPrntScr)
+novelza.com##:not(input):not(textarea)::selection:style(background-color:Highlight!important;color:HighlightText!important)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/tnf617/how_to_block_script_right_click_copy_disable_on/i21fzrs/
+aileen-novel.online##+js(acs, disable_hot_keys)
+aileen-novel.online##+js(acs, document.oncontextmenu)
+aileen-novel.online##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12462
+coolwallpapers.me##+js(nosiif, dfgh-adsbygoogle)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/113837
+@@||freshersnow.com^$ghide
+freshersnow.com##.adsbygoogle
+
+! playerx.stream devtools detector
+beastx.top,chillx.top,playerx.stream##+js(aopr, devtoolsDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12499
+bumigemilang.com##+js(acs, disable_hot_keys)
+bumigemilang.com##+js(acs, document.oncontextmenu)
+bumigemilang.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+bumigemilang.com##::selection:style(background: Highlight !important; color: HighlightText !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12496
+zerohedge.com##+js(aeld, mouseout)
+
+! https://bingotingo.com/what-is-ubersuggest/ anti right click
+bingotingo.com##+js(acs, document.oncontextmenu)
+bingotingo.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12529
+rdsong.com##+js(ra, oncontextmenu|ondragstart|onselectstart, body)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12528
+cafe.naver.com##+js(aopr, document.oncontextmenu)
+cafe.naver.com##+js(aopr, document.onselectstart)
+cafe.naver.com##+js(aopr, document.ondragstart)
+cafe.naver.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12530
+novelpia.com##+js(acs, $, keydown)
+novelpia.com##+js(acs, console.log, devtools)
+novelpia.com##+js(acs, setInterval, playAlert)
+novelpia.com##+js(ra, oncontextmenu|ondragstart|onselectstart)
+novelpia.com##+js(aeld, contextmenu, event.triggered)
+novelpia.com##+js(set, document.ondragstart, trueFunc)
+novelpia.com##+js(set, document.onselectstart, trueFunc)
+novelpia.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12534
+stream.bunkr.is##+js(acs, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12531
+brainly.*##+js(set, jsData.hasVideoMeteringUnlogEnabled, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12571
+! enable context menu
+viewsb.com##+js(acs, console.clear, "contextmenu")
+sbfast.com,sbflix.*##+js(acs, onload, contextmenu)
+
+! https://dizipal213.com/film/the-bubble/ anti right click
+dizipal210.com,dizipal211.com,dizipal222.com,dizipal223.com,dizipal229.com,dizipal232.com,dizipal233.com,dizipal234.com,dizipal235.com,dizipal236.com,dizipal237.com,dizipal238.com,dizipal239.com,dizipal240.com,dizipal241.com,dizipal242.com,dizipal243.com,dizipal244.com,dizipal246.com,dizipal247.com,dizipal248.com,dizipal249.com##+js(acs, console.clear, "contextmenu")
+dizipal210.com,dizipal211.com,dizipal222.com,dizipal223.com,dizipal229.com,dizipal232.com,dizipal233.com,dizipal234.com,dizipal235.com,dizipal236.com,dizipal237.com,dizipal238.com,dizipal239.com,dizipal240.com,dizipal241.com,dizipal242.com,dizipal243.com,dizipal244.com,dizipal246.com,dizipal247.com,dizipal248.com,dizipal249.com##+js(acs, devtoolsDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12612
+1mg.com##+js(aeld, mouseout)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/114557
+blueraindrops.com##+js(set, lepopup_abd_enabled, '')
+blueraindrops.com##+js(acs, document.oncontextmenu)
+
+! cinemakottaga.top anti right click
+cinemakottaga.top##+js(aopr, document.oncontextmenu)
+
+! fnbrjp.com anti-adb
+fnbrjp.com##+js(nostif, 広告)
+
+! https://www.thuthuatmoi.xyz/2021/07/bitdefender-total-security-2501458-64.html anti right click
+top1iq.com##+js(acs, shortcut)
+
+! allthingsvegas. com anti adb warning
+@@||allthingsvegas.com^$ghide
+
+! https://tinyurl.com/y9mv9crw anti devtools
+itscybertech.com##+js(acs, check, debugger)
+
+! sekaikomik. live anti right click, select, ctrl-u
+sekaikomik.live##+js(acs, document.oncontextmenu)
+sekaikomik.live##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12623
+valid.x86.fr##+js(rmnt, script, /setTimeout.*style/)
+valid.x86.fr##.fullwidth
+valid.x86.fr##.widget-advert
+
+! https://www.reddit.com/r/uBlockOrigin/comments/tydsev/adblocker_detected_on_unidiversfr/
+unidivers.fr##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12652
+vidembed.me##+js(set, console.clear, undefined)
+moviepl.xyz##+js(nostif, devtoolIsOpening, 100)
+
+! https://azm.to/movie/40-year-old-virgins private mode detection
+unlimitedfiles.xyz##+js(acs, console.log, document.referer)
+
+! https://bphimmoi.net/xem-phim/ma-tran-hoi-sinh-tap-1-server-1/ anti right click
+bphimmoi.net##+js(aeld, /contextmenu|keydown/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12693
+ytv.co.jp##+js(aopr, document.oncontextmenu)
+
+! privivkainfo. ru anti right click, select, ctrl-u, clipboard manipulation
+privivkainfo.ru##+js(aopw, disable_keystrokes)
+privivkainfo.ru##+js(acs, document.oncontextmenu)
+privivkainfo.ru##+js(set, disableSelection, noopFunc)
+privivkainfo.ru##+js(aeld, copy, pagelink)
+
+! https://yeuphimmoik.com/xem-phim/phi-vu-den/tap-1-sv-1/ anti right click
+yeuphimmoik.com##+js(acs, jQuery, contextmenu)
+goodhub.xyz##+js(aeld, /contextmenu|keydown/)
+
+! https://ww3.watchgintama.com/gintama-episode-367-subbed/ preroll video
+animecruzers.com##+js(set, Object.prototype.preroll, [])
+
+! waves4you. com anti adblock
+waves4you.com##+js(aost, String.prototype.charCodeAt, ai_)
+
+! https://ph.apps2app.com/2020/04/1.html?m=1#?o=62fe713ec0bfa7ab0fe6da9e25795a82259121d83ea3c8a23d036b3bd1e7dd68f6d41ef25791c755 anti right click
+apps2app.com##+js(acs, document.oncontextmenu)
+
+! techus. website anti adb soft
+techus.website##+js(nostif, ai_)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12765 anti right click
+descargatepelis.com##+js(aeld, /keydown|mousedown/)
+descargatepelis.com##+js(set, document.oncontextmenu, trueFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12768
+||dl.gmx.*/uim/connector/live/v2/nonfriendlyiframe.html$frame,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/9760#issuecomment-1100515397
+aztravels.net,downfile.site,memangbau.com,trangchu.news##+js(acs, document.addEventListener, onkeydown)
+aztravels.net,downfile.site,memangbau.com,trangchu.news##+js(ra, oncontextmenu, body)
+
+! theblockcrypto newsletter
+theblockcrypto.com##.newsletterModal
+
+! https://www.reddit.com/r/uBlockOrigin/comments/u47aev/stop_autodisabling_of_dropdown_menus_and_input/
+timeshighereducation.com##+js(aost, Drupal.CTools.Modal.show, /(^(?!.*(injectedScript|makeProxy).*))/)
+
+! repack-games. com anti right click - select
+repack-games.com##+js(acs, jQuery, contextmenu)
+repack-games.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://www.actvid.com/watch-movie/watch-the-batman-full-16076.8142442 anti devtools
+mzzcloud.life##+js(set, console.clear, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12846 anti devtools
+/dev-console-detect.js$script,domain=closeload.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115974 anti devtools
+nsfwzone.xyz##+js(acs, console.clear, "contextmenu")
+
+! https://github.com/uBlockOrigin/uAssets/issues/12861
+telewebgram.com#@#ins.adsbygoogle
+
+! https://veblr.com/watch/301c949e74/2612-8th-january-2013-part-3 anti right click
+veblr.com##+js(ra, oncontextmenu, #VdoPlayerDiv)
+
+! bestjavporn.com anti right click and devtools
+bestjavporn.com,mm9841.cc##+js(acs, document.oncontextmenu)
+bestjavporn.com,mm9841.cc##+js(set, devtoolsDetector, undefined)
+
+! https://www.dulu.to/episode/a-black-lady-sketch-show-season-3-episode-3 anti right click + devtools
+videobot.stream##+js(set, console.clear, undefined)
+
+! https://thememypc.net/macos-transformation-pack/ anti right click
+thememypc.net##+js(ra, oncontextmenu, a#download_link, stay)
+
+! https://tecmundo.net/verify/?HUuun2= anti right click
+tecmundo.net##+js(aopr, alert)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/116504
+rawneix.in##+js(acs, disableEnterKey)
+rawneix.in##+js(acs, document.ondragstart)
+rawneix.in##+js(acs, document.getElementsByTagName, 'unselectable')
+rawneix.in##body:style(cursor: auto !important)
+rawneix.in##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12971 anti right click
+myoplay.club##+js(acs, document.oncontextmenu)
+
+! pvstreams.com anti right click
+pvstreams.com##+js(acs, document.oncontextmenu)
+pvstreams.com##+js(acs, document.onkeydown)
+pvstreams.com##+js(acs, document.onselectstart)
+pvstreams.com##+js(acs, jQuery, contextmenu)
+pvstreams.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12986
+ggwash.org##+js(set, Object.prototype.bgOverlay, noopFunc)
+ggwash.org##+js(set, Object.prototype.fixedContentPos, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12989
+news.ntv.co.jp##+js(set, document.oncontextmenu, trueFunc)
+www.ntv.co.jp##+js(aeld, contextmenu, preventDefault)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12991
+umk.co.jp##+js(ra, oncontextmenu, body)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12992
+bpcj.or.jp##+js(acs, document.oncontextmenu)
+
+! https://fmovies.to/series/law-order-lxnqm/4-4 clear console
+videovard.*##+js(set, console.clear, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13037
+@@||ruyamanga.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/pull/13040
+gmarket.co.kr##+js(set, document.oncontextmenu, noopFunc)
+gmarket.co.kr##+js(set, document.onmousedown, noopFunc)
+
+! https://digital.elmercurio.com/2022/05/02/A/SN44A2B9 private mode detection
+||digital.elmercurio.com/assets/js/detectPrivateMode.js$script,1p
+
+! https://www.thetodaypost.com/365-days-2020-hindi-dubbed/ anti right click + dev tools
+thetodaypost.com##+js(set, document.oncontextmenu, trueFunc)
+thetodaypost.com##+js(set, document.onkeydown, trueFunc)
+thetodaypost.com##+js(set, document.onselectstart, trueFunc)
+dlmovies.link##+js(acs, console.clear, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13066
+celtadigital.com##+js(aeld, contextmenu)
+celtadigital.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://ask4movie.me/sonic-the-hedgehog-2-2022/ anti right click + devtools
+ask4movie.*##+js(ra, oncontextmenu, html)
+ask4movie.*##+js(set, console.dir, noopFunc)
+ask4movie.*##+js(set, navigator.userAgent, '')
+cinegrabber.com##+js(set, devtoolIsOpening, noopFunc)
+
+! revenue. land anti select, right click
+revenue.land##+js(aopr, nocontext)
+revenue.land##+js(acs, disableEnterKey)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13092
+web.skype.com##[data-text-as-pseudo-element*=" push "]:upward([role]):upward([role])
+web.skype.com##.noFocusOutline > div > div > div > div > div[style^="position: relative; display: flex; flex-direction: column; flex-grow: 0; flex-shrink: 0; overflow: hidden; align-items: stretch; align-self: stretch; background-color"][style$="border-style: solid;"]
+
+! http://dubznetwork.com/meet/racing/formula-1-miami-grand-prix-2022/ anti keydown
+dubznetwork.com##+js(acs, document.onkeypress)
+dubznetwork.com##+js(acs, jQuery, keydown)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/117803 clear console
+justswallows.net##+js(set, console.clear, undefined)
+
+! light.gg soft anti-adb
+light.gg##.items-right-square
+light.gg##.remove-turtles
+light.gg###ad-blocker-nudge
+
+! sdewery. me anti right click, drag, f-keys
+sdewery.me##+js(aopw, document.ondragstart)
+sdewery.me##+js(aopw, disableEnterKey)
+sdewery.me##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! convenienza. com anti select
+convenienza.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/118194
+panda-novel.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13168 clear console
+layarkacaxxi.icu##+js(set, devtoolIsOpening, undefined)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/118407
+cdramalove.com##+js(acs, document.oncontextmenu)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/uo7w9g/clicking_on_the_play_button_of_the_video/ anti right click
+fucktube4k.com##+js(acs, document.addEventListener, contextmenu)
+
+! https://www.ssphim.net/p/spy-x-family-tap-1 anti right click
+ssphim.net##+js(acs, $, contextmenu)
+ssphim.net##+js(acs, document.onkeydown)
+
+! matzoo. pl anti right click
+matzoo.pl##+js(ra, oncontextmenu)
+matzoo.pl##+js(aeld, contextmenu)
+
+! flashplayer.org. ua anti right click, select, f-keys
+flashplayer.org.ua##+js(aopr, document.oncontextmenu)
+flashplayer.org.ua##+js(aopr, document.onkeydown)
+flashplayer.org.ua##+js(aopr, disableSelection)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13418
+/wp-content/themes/*/public/js/detect-adblock.js$script,1p
+
+! asia2tv. cn anti right click
+asia2tv.cn##+js(aeld, contextmenu)
+
+! vupload. com anti right click, keydown
+vupload.com##+js(acs, onload, contextmenu)
+
+! j-novel. club anti right click, select
+labs.j-novel.club##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+labs.j-novel.club##::selection:style(background: Highlight !important; color: HighlightText !important)
+labs.j-novel.club##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13569
+turbo1.co##+js(aeld, contextmenu)
+turbo1.co##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://www.ilovefreesoftware.com/18/featured/show-mouse-coordinates-desktop-screen.html anti select when right click
+ilovefreesoftware.com##+js(aost, getSelection, quoty-public)
+
+! anti adb warning leekduck. com
+leekduck.com##+js(nostif, abp)
+
+! anti right click - open console
+futbollatam.com##+js(aeld, contextmenu)
+
+! canale. live anti right click
+canale.live##+js(aopr, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13686
+outidesigoto.com##+js(acs, document.oncontextmenu)
+outidesigoto.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! rightnonel. com anti right click - select
+rightnonel.com##+js(aopr, document.oncontextmenu)
+rightnonel.com##+js(aopr, document.onmousedown)
+rightnonel.com##+js(aopr, disableSelection)
+
+! lightnovelpub. com, webnovelpub. com anti select
+lightnovelpub.com,novelpub.com,webnovelpub.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+||moatads.com^$image,redirect-rule=1x1.gif,domain=lightnovelpub.com
+lightnovelpub.com##[data-pw-desk]:upward(1)
+
+! viafarmaciaonline. it anti right click
+viafarmaciaonline.it##+js(aopr, document.oncontextmenu)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/vc2zuj/kindle_copy_paste_restriction/
+read.amazon.com##+js(aeld, contextmenu)
+read.amazon.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! kryptografie. de anti adblock notice
+||kryptografie.de/js/wb_dead.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/13702
+gakki.me##+js(ra, oncontextmenu|ondragstart|onkeydown|onmousedown|onselectstart|onselect|oncopy|onbeforecopy|onmouseup)
+gakki.me##style:has-text(@media print):remove()
+
+! https://github.com/uBlockOrigin/uAssets/issues/13703
+tunegate.me##+js(ra, onContextmenu|onMouseDown|onSelectStart)
+tunegate.me##style:has-text(@media print):remove()
+
+! https://github.com/uBlockOrigin/uAssets/issues/13704
+nana-music.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13705
+! google.com##:matches-path(/search/) *:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/122484
+iskandinavya.com##+js(aopr, kan_vars.adblock)
+
+! readawrite. com anti right click, select, print, f12
+readawrite.com##+js(set, securityTool.disableRightClick, noopFunc)
+readawrite.com##+js(set, securityTool.disableF12, noopFunc)
+readawrite.com##+js(set, securityTool.disableCtrlP, noopFunc)
+readawrite.com##+js(set, securityTool.disableCtrlS, noopFunc)
+readawrite.com##+js(set, securityTool.disablePrintScreen, noopFunc)
+readawrite.com##+js(set, securityTool.disablePrintThisPage, noopFunc)
+readawrite.com##+js(set, securityTool.disableElementForPrintThisPage, noopFunc)
+readawrite.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! http://tv.xemphimaz.com/xem-phim/luoi-hai-tu-than-2-tap-1-server-1/ anti right click
+xemphimaz.com##+js(acs, document.oncontextmenu)
+
+! nullphpscript. com anti select
+nullphpscript.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8373
+dropgalaxy.com##+js(ra, oncontextmenu)
+dropgalaxy.com##+js(acs, document.onkeydown)
+dropgalaxy.com##+js(set, mousehandler, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14066
+projektowanie-wnetrz-online.pl##+js(aopr, disable_copy)
+projektowanie-wnetrz-online.pl##+js(aopw, document.ondragstart)
+projektowanie-wnetrz-online.pl##*:style(-webkit-touch-callout:default!important; -webkit-user-select:text!important; -moz-user-select:text!important; -ms-user-select:text!important; user-select:text!important;)
+
+! box-manga. com anti right click
+box-manga.com##+js(aeld, contextmenu)
+
+! https://go.rocklinks.net/ivrYmh anti right click
+disheye.com##+js(aopr, alert)
+
+! deepl.com: prevent link injection into the clipboard
+deepl.com##+js(aeld, copy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13705
+! https://github.com/uBlockOrigin/uAssets/issues/15084
+google.*##[data-lyricid]:style(user-select: text !important;)
+
+! https://gourmetscans. net right click, copy, keys
+gourmetscans.net##+js(aopw, disableEnterKey)
+gourmetscans.net##+js(acs, document.oncontextmenu)
+! https://github.com/uBlockOrigin/uAssets/issues/15367 anti F12 and Ctrl+U
+gourmetscans.net##+js(acs, wccp_pro_iscontenteditable)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14170
+minimum-wage.org##.alert-dismissible
+
+! https://github.com/uBlockOrigin/uAssets/issues/14193
+oricon.co.jp##+js(ra, oncontextmenu|onmousedown|onselectstart, .all-lyrics)
+oricon.co.jp##.all-lyrics:style(-webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14191
+morosedog.gitlab.io##+js(set, checkAds, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14183
+awebstories.com##+js(acs, document.oncontextmenu)
+awebstories.com##+js(set, stopPrntScr, noopFunc)
+awebstories.com##+js(set, disableSelection, noopFunc)
+||awebstories.com/wp-content/plugins/secure-copy-content-protection^$all
+awebstories.com##*::selection:style(background-color:#338FFF !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14233
+zgbk.com##+js(acs, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14241
+cataz.net##.premodal-share
+cataz.net##.modal-backdrop
+cataz.net##body:style(overflow: auto !important; padding-right: 0 !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14306
+htforum.net##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14392 anti right click
+maxstream.video##+js(acs, document.body.oncontextmenu)
+
+! the-masters-voice .com right click copy select
+! https://github.com/uBlockOrigin/uAssets/commit/164472b9d04940bc80d838e709abe4bf20903786#commitcomment-81625291
+the-masters-voice.com##+js(acs, disableSelection, reEnable)
+the-masters-voice.com##+js(acs, document.ondragstart)
+the-masters-voice.com##+js(aeld, contextmenu)
+the-masters-voice.com##+js(aopw, stopPrntScr)
+the-masters-voice.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; cursor: auto !important)
+the-masters-voice.com##*::selection:style(background-color: #338FFF !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14420
+hemas.pl##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14529
+! https://www.reddit.com/r/uBlockOrigin/comments/13tjhcs/
+lover93.net##+js(ra, oncontextmenu|ondragstart|onselectstart, body, complete)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14551
+sinau-thewe.com##*:style(-webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14560
+clujust.ro##+js(acs, document.oncontextmenu)
+clujust.ro##+js(acs, document.ondragstart)
+clujust.ro##+js(aopw, disable_hot_keys)
+clujust.ro##*:style(-webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/pull/14563
+warcraftlogs.com##+js(aopr, onAdScriptFailure)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14550
+||hbzb111.com/api/advert/
+
+! https://github.com/uBlockOrigin/uAssets/issues/14580
+protopage.com##+js(aost, document.createElement, createAdblockFallbackSubscribeToProtopageAdDiv)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14582
+coub.com##body > .force-to-login-popup
+coub.com##body.disable-scroll:style(overflow: auto !important;)
+
+! https://accgroup.vn/tra-cuu-ma-so-thue-ca-nhan-bang-cmnd/#1-ma-so-thue-ca-nhan-la-gi anti right click
+/wp-content/plugins/wp-extra/js/copy.min.js$script
+accgroup.vn##+js(aeld, contextmenu)
+accgroup.vn##+js(aopr, document.oncopy)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/x0b79p/
+artstation.com##signup-modal-prompt-fullscreen
+artstation.com##.modal-backdrop
+artstation.com##.modal-open:style(overflow:initial!important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14625
+swiggy.com##a[class^="_"][href^="/restaurants"]:has(div[style="background: rgb(58, 60, 65) none repeat scroll 0% 0%; color: rgb(255, 255, 255); border-color: rgb(30, 32, 35) transparent;"])
+!#if env_mobile
+swiggy.com##[class^="styles_row"]:has([class^="styles_imgAd"])
+swiggy.com##a[id^="restaurant-card-"]:has([class^="styles_imgAd"])
+!#endif
+
+! digi24. ro remove copy crap addings
+digi24.ro##+js(aeld, copy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14674
+||georgiadogs.com/js/prebid-$xhr,1p,redirect=noop.txt
+
+! https://www.reddit.com/r/uBlockOrigin/comments/x5zwmw/filter_to_enable_right_click_on_website_in_chrome/
+stockpokeronline.com##+js(acs, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14672
+law.com###reg-modal
+law.com##.show.fade.modal-backdrop
+law.com##body:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14727
+! https://github.com/uBlockOrigin/uAssets/issues/17992
+! vimeo.com##+js(set, vimeo.clip_page_config.google_app_id, '')
+! vimeo.com##+js(set, vimeo.clip_page_config.banner, {})
+
+! https://github.com/uBlockOrigin/uAssets/issues/14731
+aberdeennews.com,alamogordonews.com,amarillo.com,amestrib.com,app.com,argusleader.com,augustachronicle.com,azcentral.com,battlecreekenquirer.com,beaconjournal.com,blueridgenow.com,buckscountycouriertimes.com,bucyrustelegraphforum.com,burlingtoncountytimes.com,burlingtonfreepress.com,caller.com,cantondailyledger.com,cantonrep.com,capecodtimes.com,cheboygannews.com,chieftain.com,chillicothegazette.com,cincinnati.com,citizen-times.com,cjonline.com,clarionledger.com,coloradoan.com,columbiadailyherald.com,columbiatribune.com,commercialappeal.com,coshoctontribune.com,courier-journal.com,courier-tribune.com,courierpostonline.com,courierpress.com,currentargus.com,daily-jeff.com,daily-times.com,dailyamerican.com,dailycomet.com,dailycommercial.com,dailyrecord.com,dailyworld.com,delawareonline.com,delmarvanow.com,demingheadlight.com,democratandchronicle.com,desertsun.com,desmoinesregister.com,devilslakejournal.com,dispatch.com,dnj.com,ellwoodcityledger.com,elpasotimes.com,enterprisenews.com,eveningsun.com,eveningtribune.com,examiner-enterprise.com,fayobserver.com,fdlreporter.com,floridatoday.com,fosters.com,freep.com,gadsdentimes.com,gainesville.com,galesburg.com,gastongazette.com,goerie.com,gosanangelo.com,goupstate.com,greatfallstribune.com,greenbaypressgazette.com,greenvilleonline.com,hattiesburgamerican.com,heraldmailmedia.com,heraldnews.com,heraldtribune.com,hillsdale.net,hollandsentinel.com,hoosiertimes.com,houmatoday.com,htrnews.com,hutchnews.com,indeonline.com,independentmail.com,indystar.com,ithacajournal.com,jacksonsun.com,jacksonville.com,jconline.com,jdnews.com,journalstandard.com,jsonline.com,kinston.com,kitsapsun.com,knoxnews.com,lancastereaglegazette.com,lansingstatejournal.com,lcsun-news.com,ldnews.com,lenconnect.com,lincolncourier.com,livingstondaily.com,lohud.com,lubbockonline.com,mansfieldnewsjournal.com,marionstar.com,marshfieldnewsherald.com,mcdonoughvoice.com,metrowestdailynews.com,milforddailynews.com,monroenews.com,montgomeryadvertiser.com,mpnnow.com,mycentraljersey.com,naplesnews.com,newarkadvocate.com,newbernsj.com,newportri.com,news-journalonline.com,news-leader.com,news-press.com,newschief.com,newsherald.com,newsleader.com,njherald.com,northjersey.com,norwichbulletin.com,nwfdailynews.com,oakridger.com,ocala.com,oklahoman.com,onlineathens.com,pal-item.com,palmbeachdailynews.com,palmbeachpost.com,patriotledger.com,pekintimes.com,petoskeynews.com,pjstar.com,pnj.com,poconorecord.com,pontiacdailyleader.com,portclintonnewsherald.com,postcrescent.com,poughkeepsiejournal.com,press-citizen.com,pressconnects.com,progress-index.com,providencejournal.com,publicopiniononline.com,record-courier.com,recordnet.com,recordonline.com,redding.com,registerguard.com,reporter-times.com,reporternews.com,rgj.com,rrstar.com,ruidosonews.com,salina.com,savannahnow.com,scsun-news.com,sctimes.com,seacoastonline.com,sheboyganpress.com,shelbystar.com,shreveporttimes.com,sj-r.com,sooeveningnews.com,southbendtribune.com,southcoasttoday.com,starcourier.com,stargazette.com,starnewsonline.com,statesman.com,statesmanjournal.com,staugustine.com,stevenspointjournal.com,sturgisjournal.com,swtimes.com,tallahassee.com,tauntongazette.com,tcpalm.com,telegram.com,tennessean.com,the-daily-record.com,the-dispatch.com,the-leader.com,the-review.com,theadvertiser.com,thecalifornian.com,thedailyjournal.com,thedailyreporter.com,thegardnernews.com,thegleaner.com,thehawkeye.com,theintell.com,theleafchronicle.com,theledger.com,thenews-messenger.com,thenewsstar.com,thenorthwestern.com,thepublicopinion.com,therecordherald.com,thespectrum.com,thestarpress.com,thetimesherald.com,thetimesnews.com,thetowntalk.com,times-gazette.com,timesonline.com,timesrecordnews.com,timesreporter.com,timestelegram.com,tmnews.com,tricountyindependent.com,tuscaloosanews.com,usatoday.com,uticaod.com,vcstar.com,visaliatimesdelta.com,vvdailypress.com,wausaudailyherald.com,wisconsinrapidstribune.com,ydr.com,zanesvilletimesrecorder.com##+js(nostif, gnt_mol_oy)
+
+! http://alexsports.site/101/live34.php anti dev tools and right click
+streamservicehd.click##+js(ra, oncontextmenu, body)
+streamservicehd.click##^script:has-text(document.oncontextmenu)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/129173
+craftpip.github.io##+js(nostif, adsok)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14749
+modrinth.com##.info-wrapper[ethical-ads-big=""]
+modrinth.com##.content-wrapper[ethical-ads-big]
+modrinth.com##.info-wrapper[data-v-7cd21295]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/x5zwmw/filter_to_enable_right_click_on_website_in_chrome/in5tqih/
+btvnovinite.bg##+js(aeld, contextmenu)
+
+! https://www.iphoneincanada.ca/ anti-adb
+iphoneincanada.ca##.slbElement
+
+! https://github.com/uBlockOrigin/uAssets/issues/14807
+!#if env_mobile
+||hkemobility.gov.hk/js/AppDownload.
+hkemobility.gov.hk##+js(rc, smartbanner-show, html)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/14821
+epitesti.ro##+js(aopw, clickIE4)
+epitesti.ro##+js(aopw, document.oncontextmenu)
+epitesti.ro##+js(ra, oncontextmenu|ondragstart|onselectstart)
+epitesti.ro##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! www.dailyprincetonian.com anti-adb
+||blink.net/iframe.html$domain=dailyprincetonian.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/xbjszd/ anti right click
+allcryptoz.net,crewbase.net,crewus.net,shinbhu.net,shinchu.net,thumb8.net,thumb9.net,topcryptoz.net,uniqueten.net,ultraten.net##^script:has-text(document.onkeydown)
+allcryptoz.net,crewbase.net,crewus.net,shinbhu.net,shinchu.net,thumb8.net,thumb9.net,topcryptoz.net,uniqueten.net,ultraten.net##+js(aeld, contextmenu)
+allcryptoz.net,crewbase.net,crewus.net,shinbhu.net,shinchu.net,thumb8.net,thumb9.net,topcryptoz.net,uniqueten.net,ultraten.net##+js(acs, document.onkeydown)
+/block-keys.js$script,important,domain=allcryptoz.net|crewbase.net|crewus.net|shinbhu.net|shinchu.net|thumb8.net|thumb9.net|topcryptoz.net|uniqueten.net|ultraten.net
+
+! https://tonnestreamz.xyz/en/live.cdnz.one-7452.php anti right click and dev tools
+! https://footyhunter3.xyz/papahd/stream-62.php
+eplayer.click,olacast.live##^script:has-text(document.oncontextmenu)
+eplayer.click,olacast.live##+js(acs, document.onkeypress)
+eplayer.click,olacast.live##+js(ra, oncontextmenu, body)
+
+! https://knightnoscanlation.com/ anti right click
+knightnoscanlation.com##+js(acs, document.addEventListener, contextmenu)
+
+! https://okdebrid.com/ anti right click
+cloudcomputingtopics.net##+js(aeld, contextmenu)
+cloudcomputingtopics.net##+js(set, document.onkeydown, trueFunc)
+
+! sweetslyrics. com clipboard manipulation
+sweetslyrics.com##+js(aeld, copy, preventDefault)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14939
+portalcriatividade.com.br##+js(acs, disable_copy)
+portalcriatividade.com.br##+js(acs, nocontext)
+
+! www.anisearch.com ad reinjection
+@@||cdn.privacy-mgmt.com^$script,xhr,domain=anisearch.com
+||anisearch.com/*?p=1|$frame
+
+! https://github.com/uBlockOrigin/uAssets/issues/14961
+delicateseliterare.ro##+js(acs, jQuery, contextmenu)
+delicateseliterare.ro##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/pull/130309
+uwayapply.com##+js(ra, oncontextmenu|ondragstart|onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14864
+bianity.net##+js(aeld, contextmenu)
+bianity.net##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! csid. ro contextmenu drag select
+csid.ro##+js(aopw, document.oncontextmenu)
+csid.ro##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://v3.sportsonline.to/channels/pt/sporttv1.php anti dev tools
+smokelearned.net##+js(acs, runPageBugger)
+
+! https://github.com/AdguardTeam/AdguardFilters/pull/129615
+onna.kr##+js(aeld, copy)
+onna.kr##+js(aopw, document.oncontextmenu)
+onna.kr##+js(aopw, document.ondragstart)
+onna.kr##+js(aopw, document.onselectstart)
+
+! anti right click 10000recipe. com
+10000recipe.com##+js(acs, $, contextmenu)
+
+! frameboxxindore. com clipboard manipulation
+frameboxxindore.com##+js(aeld, copy, pagelink)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15106
+*$script,domain=geotastic.net,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/15120
+@@||api.adinplay.com/libs/aiptag/pub/CRF/curvefever.pro/tag.min.js$script,domain=curvefever.pro
+
+! https://faptiti.com/0ghuzjkttch4.html anti right click
+faptiti.com##+js(aeld, contextmenu, preventDefault)
+
+! https://www.vercalendario.info/en/how/convert-timestamp-date.html clipboard injection
+vercalendario.info##+js(aeld, copy, Source)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15130
+getlatka.com##.MuiModal-root
+getlatka.com##[style^="filter: blur"]:style(filter: none !important)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/xy6lh0/
+pixwox.com##+js(nostif, length, 3000)
+
+! https://khohieu.com/ anti right click
+/wp-content/plugins/t42-content-protector/js/protector.min.js$script
+
+! https://www.reddit.com/r/uBlockOrigin/comments/y26dhh/
+indianhealthyrecipes.com##+js(acs, document.oncontextmenu)
+indianhealthyrecipes.com##+js(acs, document.onkeydown)
+indianhealthyrecipes.com##+js(set, disableSelection, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15274
+fantasytagtree.com##+js(aost, document.getElementById, nouplaod)
+fantasytagtree.com##+js(ra, oncontextmenu, img[oncontextmenu="return false;"], stay)
+
+! https://discovervalids.com anti right click
+||discovervalids.com/assets-new/js/block.js$script,1p
+
+! bagaglioamano. io anti select
+bagaglioamano.io##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! www.lamusica.com anti-adb
+lamusica.com##.modal-open:style(overflow: auto !important;)
+lamusica.com##div[id$="___BV_modal_outer_"]
+
+! https://profreehost.com/ anti-adb
+||profreehost.com/includes/js/customBottom.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/15446
+||droetker.*/static/js/privacy-dialog/
+
+! https://nhentaihaven.org anti right click
+nhentaihaven.org##+js(acs, eval, contextmenu)
+
+! https://onscreensvideo.com/e/2680wgv38c9o.html anti dev tools
+onscreensvideo.com##+js(set, console.clear, undefined)
+
+! krunkercentral. com f-keys
+krunkercentral.com##+js(acs, document.onkeydown)
+
+! https://github.com/uBlockOrigin/uAssets/pull/15543
+stiridinromania.ro##+js(acs, document.oncontextmenu)
+stiridinromania.ro##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15544
+jamilacuisine.ro##+js(aost, document.oncontextmenu)
+jamilacuisine.ro##+js(aost, Object, /(?=^(?!.*(jquery|inlineScript)))/)
+
+! https://www.slideshare.net/secret/r4TGJDeZF0s9jt anti adb, exit-modal
+slideshare.net##+js(acs, ab_tests)
+slideshare.net##+js(aeld, mouseleave, scribd_ad)
+
+! https://coinsparty.com/9FYmRWQ anti right click
+coinsparty.com##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15598
+startpage.com#@#.ad.widget
+
+! https://github.com/uBlockOrigin/uAssets/issues/15654
+postype.com##+js(aeld, contextmenu)
+postype.com##+js(rc, disable-selection, body)
+
+! anti adb annoyance golfdigest.com
+golfdigest.com##+js(aost, document.createElement, admiral)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15689
+! https://github.com/uBlockOrigin/uAssets/issues/18077
+lofter.com##+js(aeld, , login)
+lofter.com##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15701
+poipiku.com##+js(aeld, /contextmenu|copy|drag|dragstart/)
+poipiku.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://www.duhoctrungquoc.vn/wiki/ja/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8 (wikipedia copy)
+duhoctrungquoc.vn###danger_adblock
+
+! tarnkappe. info anti adblock annoyance
+tarnkappe.info##+js(set, traffective, true)
+tarnkappe.info##.around-desktop-ad:upward(1)
+tarnkappe.info##div[style="min-height: 300px;"]
+tarnkappe.info##.interscroller-wrapper[style^="height: 700px; "]
+
+! https://github.com/uBlockOrigin/uAssets/issues/15784
+@@||discordbotlist.com^$ghide
+
+! hentaihaven. xxx anti right click
+hentaihaven.xxx##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15829
+airbnb.de##section:has-text(Winter-Update):upward(1)
+airbnb.de##body,html:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15861
+hidemywp.co##+js(acs, jQuery, userAgent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15862
+wpplugins.tips##+js(acs, jQuery, contextmenu)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/136599
+top.gg##div[class^="css-feed"] > div.chakra-stack
+
+! kooora4lives. net anti right click, select text
+kooora4lives.net,kooora4livs.com##^script:has-text(document.oncontextmenu)
+kooora4lives.net,kooora4livs.com##^style:has-text(user-select: none;)
+!#if !cap_html_filtering
+kooora4lives.net,kooora4livs.com##+js(acs, document.oncontextmenu)
+kooora4lives.net,kooora4livs.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/16069
+bolugundem.com##^script:has-text(reEnable)
+bolugundem.com##^style:has-text(user-select)
+!#if !cap_html_filtering
+bolugundem.com##+js(acs, reEnable)
+bolugundem.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+!#endif
+
+! https://www.reddit.com/r/uBlockOrigin/comments/zurhqa/
+##[class~="mailpoet_form_popup_overlay"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/16135
+ddys.*##+js(no-fetch-if, analytics)
+
+! kangkimin. com anti select
+kangkimin.com##*:style(-webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! safirsoft. com/font/en/download-free-ac-------font.html fake captcha
+safirsoft.com##form[id="tfnewsearch"]:remove-attr(onsubmit)
+safirsoft.com##form[id="tfnewsearch"]:style(font-size: 0px !important;)
+safirsoft.com##form[id="tfnewsearch"] > input[id="val"]:style(clip-path: circle(0) !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15083
+media.framu.world##+js(aopw, document.onkeydown)
+
+! WPCP sites - https://wordpress.org/plugins/wp-content-copy-protector/
+! https://old.reddit.com/r/uBlockOrigin/comments/g5l420/how_does_this_website_block_text_selection_even
+! https://old.reddit.com/r/uBlockOrigin/comments/17k6qhp/need_to_block_right_clickselection_blockers/
+! https://github.com/tcptomato/ROad-Block/issues/319
+! https://github.com/NanoMeow/QuickReports/issues/2369
+! https://github.com/NanoMeow/QuickReports/issues/2709
+! https://github.com/NanoMeow/QuickReports/issues/2710
+! https://github.com/uBlockOrigin/uAssets/issues/4544
+! https://github.com/uBlockOrigin/uAssets/issues/5450
+! https://github.com/uBlockOrigin/uAssets/issues/5993
+! https://github.com/uBlockOrigin/uAssets/issues/11383
+! https://github.com/uBlockOrigin/uAssets/issues/11658
+! https://github.com/uBlockOrigin/uAssets/issues/13228
+! https://github.com/uBlockOrigin/uAssets/issues/13701
+! https://github.com/uBlockOrigin/uAssets/issues/15083
+! https://github.com/uBlockOrigin/uAssets/issues/15742
+! https://github.com/uBlockOrigin/uAssets/issues/15933
+! https://github.com/uBlockOrigin/uAssets/issues/16408
+! https://github.com/uBlockOrigin/uAssets/issues/16409
+! https://github.com/uBlockOrigin/uAssets/issues/16410
+! https://github.com/uBlockOrigin/uAssets/issues/16623
+! https://github.com/uBlockOrigin/uAssets/issues/17536
+! https://github.com/uBlockOrigin/uAssets/issues/17934
+! https://github.com/uBlockOrigin/uAssets/issues/19017
+! https://github.com/uBlockOrigin/uAssets/issues/19044
+pitesti24.ro,samsungtechwin.com,cours-de-droit.net,iptv4best.com,blogvisaodemercado.pt,kapitalis.com,tiempo.hn,winmeen.com,ibps.in,visse.com.br,javsubtitle.co,licensekeys.org,mediahiburan.my,tipssehatcantik.com,anime-drama.jp,jbjbgame.com,viatasisanatate.com,ziarulargesul.ro,globaldefensecorp.com,gossipnextdoor.com,coffeeapps.ir,media.framu.world,immobiliaremia.com,colegiosconcertados.info,bigdatauni.com,rukim.id,visefierbinti.ro,cyberkrafttraining.com,theaircurrent.com,nocturnetls.net,clockks.com,ananda-yoga.ro,poolpiscina.com,infodifesa.it,getective.com,formatatmak.com,drkrok.com,alphagirlreviews.com,kitchennovel.com,voxvalachorum.ro,cracksone.com,day-hoc.org,onlineonderdelenshop.nl,primicia.com.ve,tech-recipes.com,postcourier.com.pg,afrikmag.com,maduras.vip,aprendeinglessila.com,kicknews.today,koalasplayground.com,hellokpop.com,hayatbilgileri.com,moneyexcel.com,placementstore.com,neuroteam-metz.de,codedosa.com,liveyourmaths.com,newspao.gr,ieltsliz.com,programasvirtualespc.net,tempatwisataseru.com,wikiofcelebs.com,jornaljoca.com.br,arcanescans.com,filmzone.com,hiraethtranslation.com,kaystls.site##^script[id^="wpcp_"]
+pitesti24.ro,samsungtechwin.com,cours-de-droit.net,iptv4best.com,blogvisaodemercado.pt,kapitalis.com,tiempo.hn,winmeen.com,ibps.in,visse.com.br,javsubtitle.co,licensekeys.org,mediahiburan.my,tipssehatcantik.com,anime-drama.jp,jbjbgame.com,viatasisanatate.com,ziarulargesul.ro,globaldefensecorp.com,gossipnextdoor.com,coffeeapps.ir,media.framu.world,immobiliaremia.com,colegiosconcertados.info,bigdatauni.com,rukim.id,visefierbinti.ro,cyberkrafttraining.com,theaircurrent.com,nocturnetls.net,clockks.com,ananda-yoga.ro,poolpiscina.com,infodifesa.it,getective.com,formatatmak.com,drkrok.com,alphagirlreviews.com,kitchennovel.com,voxvalachorum.ro,cracksone.com,day-hoc.org,onlineonderdelenshop.nl,primicia.com.ve,tech-recipes.com,postcourier.com.pg,afrikmag.com,maduras.vip,aprendeinglessila.com,kicknews.today,koalasplayground.com,hellokpop.com,hayatbilgileri.com,moneyexcel.com,placementstore.com,neuroteam-metz.de,codedosa.com,liveyourmaths.com,newspao.gr,ieltsliz.com,programasvirtualespc.net,tempatwisataseru.com,wikiofcelebs.com,jornaljoca.com.br,arcanescans.com,filmzone.com,hiraethtranslation.com,kaystls.site##body:style(cursor: revert !important; -webkit-touch-callout: default !important; -webkit-user-select: text !important; -khtml-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; -webkit-tap-highlight-color: revert !important;)
+pitesti24.ro,samsungtechwin.com,cours-de-droit.net,iptv4best.com,blogvisaodemercado.pt,kapitalis.com,tiempo.hn,winmeen.com,ibps.in,visse.com.br,javsubtitle.co,licensekeys.org,mediahiburan.my,tipssehatcantik.com,jbjbgame.com,viatasisanatate.com,ziarulargesul.ro,globaldefensecorp.com,gossipnextdoor.com,coffeeapps.ir,media.framu.world,immobiliaremia.com,colegiosconcertados.info,bigdatauni.com,rukim.id,visefierbinti.ro,theaircurrent.com,nocturnetls.net,clockks.com,ananda-yoga.ro,poolpiscina.com,infodifesa.it,getective.com,formatatmak.com,drkrok.com,alphagirlreviews.com,kitchennovel.com,voxvalachorum.ro,cracksone.com,day-hoc.org,onlineonderdelenshop.nl,primicia.com.ve,tech-recipes.com,afrikmag.com,maduras.vip,aprendeinglessila.com,kicknews.today,koalasplayground.com,hellokpop.com,hayatbilgileri.com,moneyexcel.com,placementstore.com,neuroteam-metz.de,codedosa.com,liveyourmaths.com,newspao.gr,ieltsliz.com,programasvirtualespc.net,tempatwisataseru.com,wikiofcelebs.com,jornaljoca.com.br,arcanescans.com,filmzone.com,hiraethtranslation.com,kaystls.site##^style:has-text(@media print)
+!#if !cap_html_filtering
+pitesti24.ro,samsungtechwin.com,cours-de-droit.net,iptv4best.com,blogvisaodemercado.pt,kapitalis.com,tiempo.hn,winmeen.com,ibps.in,visse.com.br,javsubtitle.co,licensekeys.org,mediahiburan.my,tipssehatcantik.com,anime-drama.jp,jbjbgame.com,viatasisanatate.com,ziarulargesul.ro,globaldefensecorp.com,gossipnextdoor.com,coffeeapps.ir,media.framu.world,immobiliaremia.com,colegiosconcertados.info,bigdatauni.com,rukim.id,visefierbinti.ro,cyberkrafttraining.com,theaircurrent.com,nocturnetls.net,clockks.com,ananda-yoga.ro,poolpiscina.com,infodifesa.it,getective.com,formatatmak.com,drkrok.com,alphagirlreviews.com,kitchennovel.com,voxvalachorum.ro,cracksone.com,day-hoc.org,onlineonderdelenshop.nl,primicia.com.ve,tech-recipes.com,postcourier.com.pg,afrikmag.com,maduras.vip,aprendeinglessila.com,kicknews.today,koalasplayground.com,hellokpop.com,hayatbilgileri.com,moneyexcel.com,placementstore.com,neuroteam-metz.de,codedosa.com,liveyourmaths.com,newspao.gr,ieltsliz.com,programasvirtualespc.net,tempatwisataseru.com,wikiofcelebs.com,jornaljoca.com.br,arcanescans.com,filmzone.com,hiraethtranslation.com,kaystls.site##+js(aopr, nocontext)
+pitesti24.ro,samsungtechwin.com,cours-de-droit.net,iptv4best.com,blogvisaodemercado.pt,kapitalis.com,tiempo.hn,winmeen.com,ibps.in,visse.com.br,javsubtitle.co,licensekeys.org,mediahiburan.my,tipssehatcantik.com,anime-drama.jp,jbjbgame.com,viatasisanatate.com,ziarulargesul.ro,globaldefensecorp.com,gossipnextdoor.com,coffeeapps.ir,media.framu.world,immobiliaremia.com,colegiosconcertados.info,bigdatauni.com,rukim.id,visefierbinti.ro,cyberkrafttraining.com,theaircurrent.com,nocturnetls.net,clockks.com,ananda-yoga.ro,poolpiscina.com,infodifesa.it,getective.com,formatatmak.com,drkrok.com,alphagirlreviews.com,kitchennovel.com,voxvalachorum.ro,cracksone.com,day-hoc.org,onlineonderdelenshop.nl,primicia.com.ve,tech-recipes.com,postcourier.com.pg,afrikmag.com,maduras.vip,aprendeinglessila.com,kicknews.today,koalasplayground.com,hellokpop.com,hayatbilgileri.com,moneyexcel.com,placementstore.com,neuroteam-metz.de,codedosa.com,liveyourmaths.com,newspao.gr,ieltsliz.com,programasvirtualespc.net,tempatwisataseru.com,wikiofcelebs.com,jornaljoca.com.br,arcanescans.com,filmzone.com,hiraethtranslation.com,kaystls.site##+js(acs, disableSelection, reEnable)
+pitesti24.ro,samsungtechwin.com,cours-de-droit.net,iptv4best.com,blogvisaodemercado.pt,kapitalis.com,tiempo.hn,winmeen.com,ibps.in,visse.com.br,javsubtitle.co,licensekeys.org,mediahiburan.my,tipssehatcantik.com,jbjbgame.com,viatasisanatate.com,ziarulargesul.ro,globaldefensecorp.com,gossipnextdoor.com,coffeeapps.ir,media.framu.world,immobiliaremia.com,colegiosconcertados.info,bigdatauni.com,rukim.id,visefierbinti.ro,theaircurrent.com,nocturnetls.net,clockks.com,ananda-yoga.ro,poolpiscina.com,infodifesa.it,getective.com,formatatmak.com,drkrok.com,alphagirlreviews.com,kitchennovel.com,voxvalachorum.ro,cracksone.com,day-hoc.org,onlineonderdelenshop.nl,primicia.com.ve,tech-recipes.com,afrikmag.com,maduras.vip,aprendeinglessila.com,kicknews.today,koalasplayground.com,hellokpop.com,hayatbilgileri.com,moneyexcel.com,placementstore.com,neuroteam-metz.de,codedosa.com,liveyourmaths.com,newspao.gr,ieltsliz.com,programasvirtualespc.net,tempatwisataseru.com,wikiofcelebs.com,jornaljoca.com.br,arcanescans.com,filmzone.com,hiraethtranslation.com,kaystls.site##style:has-text(@media print):remove()
+!#endif
+
+! WPCP Pro - https://wp-buy.com/product/wp-content-copy-protection-pro/
+/wp-content/plugins/wccp-pro/*$domain=ferroviando.com.br|counciloflove.com|gourmetscans.net|infokik.com|kulinarnastronamocy.pl|jafekri.com|truyenbanquyen.com
+! https://github.com/uBlockOrigin/uAssets/issues/4744
+! https://github.com/uBlockOrigin/uAssets/issues/5462
+! https://github.com/uBlockOrigin/uAssets/issues/13687
+! https://github.com/uBlockOrigin/uAssets/issues/15596
+! https://github.com/MasterKia/PersianBlocker/issues/141
+ferroviando.com.br,counciloflove.com,infokik.com,kulinarnastronamocy.pl,jafekri.com##^script[id^="wccp_"]
+ferroviando.com.br,counciloflove.com,infokik.com,kulinarnastronamocy.pl,jafekri.com##*:style(cursor: revert !important; -webkit-touch-callout: default !important; -webkit-user-select: text !important; -khtml-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; -webkit-tap-highlight-color: revert !important;)
+ferroviando.com.br,counciloflove.com,infokik.com,kulinarnastronamocy.pl,jafekri.com##^style:has-text(@media print)
+!#if !cap_html_filtering
+ferroviando.com.br,counciloflove.com,infokik.com,kulinarnastronamocy.pl,jafekri.com##+js(acs, reEnable)
+ferroviando.com.br,counciloflove.com,infokik.com,kulinarnastronamocy.pl,jafekri.com##+js(acs, document.oncontextmenu)
+ferroviando.com.br,counciloflove.com,infokik.com,kulinarnastronamocy.pl,jafekri.com##+js(acs, jQuery, wccp_pro)
+ferroviando.com.br,counciloflove.com,infokik.com,kulinarnastronamocy.pl,jafekri.com##+js(acs, clear_body_at_all_for_extentions)
+ferroviando.com.br,counciloflove.com,infokik.com,kulinarnastronamocy.pl,jafekri.com##style:has-text(@media print):remove()
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/16224
+studyflix.de##.reminder-modal
+studyflix.de##html:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16227
+espn.com##+js(aeld, contextmenu)
+
+! walkthrough-indo.blogspot. com anti select
+walkthrough-indo.blogspot.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://desijugar.net/ anti right click
+desijugar.net##+js(acs, document.onkeydown)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16251
+memoryhackers.org##+js(acs, RegExp, googlebot)
+
+! technologyreview.jp soft paywall
+technologyreview.jp##+js(cookie-remover, kpwc)
+technologyreview.jp##.meter
+
+! https://www.reddit.com/r/uBlockOrigin/comments/106oc11/
+turkbettv154.com##^script:has-text(/debugger/i)
+turkbettv154.com##+js(acs, globalThis, DisableDevtool)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16296
+*/wp-content/plugins/content-copy-protection-disable-right-click/$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/16297
+warning.or.kr##+js(ra, oncontextmenu)
+
+! grabify. link anti adb warning
+@@||grabify.link^$ghide
+
+! https://www.reddit.com/r/uBlockOrigin/comments/10acynj/
+steamcollector.com##+js(acs, document.querySelectorAll, adblock)
+steamcollector.com##.abg-card
+
+! https://www.reddit.com/r/uBlockOrigin/comments/10aif9c/
+||vaultcdn.electricapps.net/lib/jquery-ui-min.js$script,domain=yourgamingshop.com
+
+! hayatbilgileri. com anti select
+hayatbilgileri.com##*:style(cursor: revert !important; -webkit-touch-callout: default !important; -webkit-user-select: text !important; -khtml-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; -webkit-tap-highlight-color: revert !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/10c21or/
+wormate.io##+js(aeld, contextmenu, preventDefault)
+wormate.io###game-wrap:style(-webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16410
+postcourier.com.pg##+js(aopw, stopPrntScr)
+postcourier.com.pg##+js(aopw, ondragstart)
+postcourier.com.pg##+js(aeld, /contextmenu|keydown|keypress|copy/)
+postcourier.com.pg##+js(aopr, document.oncontextmenu)
+postcourier.com.pg##*::selection:style(background-color:#338FFF !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16432
+lofter.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://www3.pobre.wtf anti right click and devtools
+pobre.*##+js(aeld, , blockFuckingEverything)
+pobre.*##+js(aeld, contextmenu, preventDefault)
+pobre.*##+js(aost, eval, build.js)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16486
+surreyhillsgrocer.sg###NewsletterPopup-newsletter-popup
+surreyhillsgrocer.sg##html:watch-attr(class):remove-class(modal-open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16507
+paidiatreio.gr##+js(acs, document.oncontextmenu)
+paidiatreio.gr##+js(acs, document.addEventListener, copy)
+
+! gmx.co.uk "Are you sure you want to leave?" overlay
+gmx.co.uk,gmx.com##+js(aeld, mouseout, openLayer)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16529
+textcleaner.net##+js(no-fetch-if, googlesyndication)
+
+! sneakernews.com anti-adb
+sneakernews.com##+js(aopr, sneakerGoogleTag)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16545
+socialcounts.org##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16570
+||cdn.intergient.com/*/ramp.js$script,redirect-rule=noopjs,domain=fflogs.com
+fflogs.com###bottom-banner, #top-banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/16576
+freestreams-live1.tv##+js(aopr, document.oncontextmenu)
+
+! https://likey.me/ anti right click
+likey.me##+js(aeld, /contextmenu|keydown/, preventDefault)
+
+! ziare. com copy manipulation
+ziare.com##+js(aeld, copy)
+
+! agrointel. ro copy manipulation
+agrointel.ro##+js(aeld, copy)
+
+! freefilesync. org anti-blocker
+freefilesync.org#@#.adsbygoogle
+
+! 01. org sticky header
+01.org##.o-header, .project-header-actions:style(position: initial !important;)
+01.org##main[class^="o-content"]:style(top: 0px !important;)
+01.org###main-content > .container:style(padding-top: 20px !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16690
+sflix.to##+js(nostif, devtools)
+sflix.to##+js(nosiif, /_0x|devtools/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5511#issuecomment-1425702549
+magiclen.org##.show.fade.modal
+magiclen.org##.show.fade.modal-backdrop
+magiclen.org##body:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16689
+virustotal.com##.alert-info
+
+! heavyfetish.com autoplay
+heavyfetish.com##+js(set, flashvars.autoplay, '')
+
+! twitcasting.tv anti-adb (login needed)
+@@||ads.twitcasting.tv/js/env_test/ads.js$script,1p
+
+! selfstudys.com right-click and text select
+selfstudys.com##+js(aeld, contextmenu, preventDefault)
+selfstudys.com##+js(ra, onselectstart, body)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16736
+||player.cnevids.com/interlude/gq*&rightRail=true$script
+
+! https://raider.io/ anti-adb
+||intergient.com^$script,domain=raider.io,redirect-rule=noopjs
+
+! https://www.thizissam.in/2023/01/gta-v-online-164-shoot-vehicles-script.html overlay popup
+thizissam.in##+js(nostif, popupScreen)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16781
+m.timesofindia.com##a[href^="https://timesofindia.onelink.me"]
+
+! jojoy.io anti-adb - triggered only on mobile
+jojoy.io###ad_block_reminder_dialog
+
+! https://github.com/uBlockOrigin/uAssets/issues/16896
+mgsm.pl##+js(acs, checkAdblockBait)
+mgsm.pl##^script:has-text(checkAdblockBait)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11d2sql/adblock_detected_message_on_video_player/jaa953o/
+sbbrisk.com##+js(acs, check, debugger)
+sbbrisk.com##^script:has-text(debugger)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16981
+pl##.atomsPartialLinkLink:style(user-select: text !important;)
+
+! substack.com - Forced login prompt
+substack.com##article.post > div[class*="frontend-components-SubscribePrompt-module"]
+! substack.com - Cursor
+substack.com##body:style(cursor: initial !important;)
+
+! https://wallpaperaccess.com/fifa23 - Install our addon annoyance, right click blocked
+wallpaperaccess.com##+js(aeld, mousedown, dispatch)
+
+! anti devtools
+! https://fc.freestreams-live1.tv/espn-sur/
+! https://fc.freestreams-live1.tv/bein-sports-en/
+! https://daddylivehd.sx/embed/stream-345.php
+/blast.js$domain=coolcast2.com|ntuplay.xyz|streamservicehd.click
+ntuplay.xyz##^script:has-text(_0x)
+ntuplay.xyz##+js(acs, document.onkeypress)
+ntuplay.xyz##body[oncontextmenu="return false"]:remove-attr(oncontextmenu)
+
+! https://icelz.newsrade.com/ufc/mTEw.php anti devtools
+newsrade.com##^script:has-text(ConsoleBan)
+
+! revistasufletului. net anti select
+revistasufletului.net##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17116
+||jsc.adskeeper.co.uk^$script,3p,domain=pastedownload.com,redirect-rule=noop.js
+
+! bingotingo. com anti select, ctrl-u, print
+bingotingo.com##+js(aopw, disableEnterKey)
+bingotingo.com##style:has-text(@media print):remove()
+
+! https://github.com/uBlockOrigin/uAssets/issues/17118
+myfreemp3juices.cc##+js(ra, onclick, [onclick="myFunction()"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/17158 anti right click, anti f-keys, anti devtools
+adslink.pw,jpopsingles.eu##^script:has-text(DisableDevtool)
+adslink.pw,jpopsingles.eu##+js(aeld, contextmenu, preventDefault)
+adslink.pw,jpopsingles.eu##+js(acs, document.onkeydown)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4241#issuecomment-1468322284
+actiongame.com,brain-games.co.uk,classicgame.com,games-site.co.uk,hiddenobjectgames.com,mahjong.co.uk,mahjong.com,match3.co.uk,match3games.com,mindgames.com,neongames.co.uk,neongames.com,solitaireonline.com,timemanagementgame.com##.adBlocked,.banner
+
+! two9success. com anti select
+two9success.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://github.com/DandelionSprout/adfilt/discussions/779#discussioncomment-5320490
+tv2.no##:root:style(scrollbar-color: revert !important; scrollbar-width: auto !important;)
+!#if env_chromium
+tv2.no##*::-webkit-scrollbar:style(height: 14px !important; width: 14px !important;)
+tv2.no##*::-webkit-scrollbar-button:style(border-color: #A6A6A6 !important; border-style: solid !important; height:16px !important; width: 16px !important;)
+tv2.no##*::-webkit-scrollbar-thumb:style(background: #A6A6A6 !important;)
+!#endif
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11xacvx/
+camcaps.to,vtplayer.net##^script:has-text(debugger)
+camcaps.to,vtplayer.net##+js(acs, RegExp, debugger)
+vtplayer.net##+js(set, console.clear, noopFunc)
+
+! https://www.phimlongtieng.net anti right-click, devtools
+||phimlongtieng.net/js/devtool.js
+||phimlongtieng.net/templates/themes/phim/js/antihtml.js
+phimlongtieng.net##^script:has-text(/oncontextmenu|devtools|stateObject|debugger/)
+phimlongtieng.net##+js(acs, oncontextmenu)
+phimlongtieng.net##+js(acs, navigator, devtools)
+phimlongtieng.net##+js(acs, setInterval, stateObject)
+phimlongtieng.net##+js(acs, setTimeout, debugger)
+phimlongtieng.net##+js(aopr, devtoolsDetector)
+
+! blog.verselemzes. hu anti: right click, select, f-keys
+verselemzes.hu##+js(acs, jQuery, contextmenu)
+verselemzes.hu##+js(acs, jQuery, keyCode)
+verselemzes.hu##+js(aopr, document.onselectstart)
+verselemzes.hu##+js(aopr, document.ondragstart)
+verselemzes.hu##+js(aopr, document.oncontextmenu)
+verselemzes.hu##+js(aopr, document.onkeydown)
+verselemzes.hu##+js(aopr, document.onkeypress)
+verselemzes.hu##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! javhoho.com self-promo
+||javhoho.com/wp-content/uploads/*/Upgrade-PREMIUM-
+
+! https://github.com/uBlockOrigin/uAssets/issues/17315
+skyozora.com##+js(aeld, copy)
+
+! zunda.site chat anti-adb
+zunda.site###ad_box:style(height: 50px !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17325
+dialectsarchive.com##+js(aopr, disableSelection)
+dialectsarchive.com##+js(aopw, nocontext)
+dialectsarchive.com##.unselectable:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; cursor: auto !important;)
+
+! https://workhouses.org.uk/ anti right click
+workhouses.org.uk##+js(acs, document.oncontextmenu)
+workhouses.org.uk##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17045#issuecomment-1492975020
+weakstream.org##^script:has-text(debugger)
+!#if !cap_html_filtering
+weakstream.org##+js(acs, $, debugger)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/17389
+4media.com,przegladpiaseczynski.pl##+js(aeld, contextmenu)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/120jwwu/
+! https://github.com/uBlockOrigin/uAssets/issues/17774
+easyayurveda.com,sharktankblog.com##+js(aopr, disable_copy)
+easyayurveda.com,sharktankblog.com##+js(aopr, wccp_pro_iscontenteditable)
+easyayurveda.com,sharktankblog.com##+js(aopr, disable_hot_keys)
+easyayurveda.com,sharktankblog.com##+js(aopr, nocontext)
+easyayurveda.com,sharktankblog.com##^script[id^="wccp_"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/17404
+dollarvr.com##+js(aopr, nocontextmenu)
+dollarvr.com##+js(acs, document.oncontextmenu)
+dollarvr.com##+js(acs, document.ondragstart)
+dollarvr.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! romviet.com anti adblock annoyance
+romviet.com##+js(noeval-if, AdBlocker)
+
+! jk-market.com devtool
+jk-market.com##+js(acs, jQuery, devtool)
+
+! hket.com mobile app popup
+hket.com##.app-redirect-panel
+hket.com##html.no-scroll:remove-class(no-scroll)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/12c1l86/blocking_the_annoying_kofi_widget/jf08ihf/
+genesistls.com##+js(acs, document.ondragstart)
+genesistls.com##+js(acs, document.onkeydown)
+genesistls.com##html:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17447
+milenio.com##+js(aeld, copy)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/12fj0s3/
+shortform.com##+js(aeld, /contextmenu|mousedown/, return"undefined")
+shortform.com##[oncopy="return false"]:remove-attr(oncopy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17536
+newsme.gr##+js(aopr, nocontextmenu)
+newsme.gr##+js(acs, document.oncontextmenu)
+newsme.gr##+js(acs, document.ondragstart)
+newsme.gr##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17546
+displayspecifications.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! squidboards.com anti-adb
+squidboards.com##.top_block
+
+! https://github.com/uBlockOrigin/uAssets/issues/17624
+daily-tohoku.news##+js(acs, document.oncontextmenu)
+daily-tohoku.news##+js(acs, disableSelection)
+daily-tohoku.news##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17632
+regex101.com##.jyUE5
+
+! https://github.com/uBlockOrigin/uAssets/issues/17641
+savoriurbane.com##+js(aopw, document.oncontextmenu)
+savoriurbane.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! descopera. ro anti right click, select
+descopera.ro##+js(acs, document.oncontextmenu)
+descopera.ro##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7320
+joysound.com##+js(aeld, DOMContentLoaded, ready)
+joysound.com##+js(set, document.body.oncopy, null, 3)
+joysound.com##+js(set, document.body.onselectstart, null, 3)
+joysound.com##+js(set, document.body.oncontextmenu, null, 3)
+joysound.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+joysound.com##style:has-text(@media print):remove()
+
+! freewaysintl. com anti right click
+freewaysintl.com##+js(aeld, contextmenu)
+
+! velicu. eu anti right click - select - print
+velicu.eu##+js(acs, document.oncontextmenu)
+velicu.eu##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+velicu.eu##style:has-text(@media print):remove()
+
+! https://verfutebol.net/ anti right click
+verfutebol.net##[oncontextmenu="return false;"]:remove-attr(oncontextmenu)
+
+! veneto. info copy manipulation
+veneto.info##+js(aeld, copy)
+
+! panorama. it anti select
+panorama.it##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! arenavalceana. ro anti right click, select, copy
+arenavalceana.ro##+js(acs, jQuery, contextmenu)
+arenavalceana.ro##+js(acs, document.oncontextmenu)
+arenavalceana.ro##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important;-moz-user-select: text !important;-ms-user-select: text !important;user-select: text !important;)
+
+! firmwarefile.com right-click drag
+firmwarefile.com##+js(acs, document.oncontextmenu)
+firmwarefile.com###fwrapper, body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14045#issuecomment-1526721126
+activationkeys.co##+js(acs, document.ondragstart)
+activationkeys.co##.unselectable:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; cursor: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/pull/17830/
+senpaiediciones.com##+js(acs, document.onkeydown)
+senpaiediciones.com##+js(acs, document.ondragstart)
+senpaiediciones.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; cursor: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12958#issuecomment-1527401140
+! https://publicwww.com/websites/%22disabled-source-disabled-right-click-and-content-protection%22/
+/wp-content/plugins/disabled-source-disabled-right-click-and-content-protection/*$script,css,1p
+
+! https://www.gukjenews.com right-click select
+gukjenews.com##+js(ra, oncontextmenu|onselectstart|ondragstart)
+
+! https://www.webnovel. com anti right click - select - copy
+webnovel.com##+js(aeld, /contextmenu|copy/)
+webnovel.com##.no-select:remove-class(no-select)
+
+! ##+js(acs, document.oncontextmenu) anti right click sites
+asianexpress.co.uk,best4hack.blogspot.com,certificationexamanswers.890m.com,cookhero.gr,creative-chemistry.org.uk,deutschaj.com,divineyogaschool.blogspot.com,fabioambrosi.it,flory4all.com,fv2freegifts.org,geniusjw.com,ideas0419.com,jeyran.net,ktm2day.com,letsdownloads.com,limametti.com,luyenthithukhoa.vn,otakukan.com,ribbelmonster.de,untitle.org,uptimeside.webnode.gr,usmleexperiences.review,yoyofilmeys.*,zoommastory.com##+js(acs, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17864
+urbanbrush.net##+js(acs, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17865
+audiotools.in##+js(acs, document.oncontextmenu)
+audiotools.in##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; cursor: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17866
+7misr4day.com##+js(acs, document.oncontextmenu)
+7misr4day.com##+js(acs, document.onselectstart)
+7misr4day.com##+js(aopw, disableEnterKey)
+7misr4day.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; cursor: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17867
+raindropteamfan.com##+js(acs, document.oncontextmenu)
+raindropteamfan.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; cursor: auto !important;)
+
+! https://www.vinstartheme.com/mac-dock-for-windows/ anti right click and shortcut key
+vinstartheme.com##+js(aeld, contextmenu, preventDefault)
+vinstartheme.com##+js(aeld, keydown, disabledKeys)
+
+! https://pepperlive.info/sportp.php?id=4 anti-console
+pepperlive.info,unbiasedsenseevent.com##+js(set, console.clear, noopFunc)
+
+! https://darkhub-v4.maxt.church/ anti devtools
+maxt.church##+js(set, console.clear, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14765#issuecomment-1527523594
+bluemediafile.*##+js(set, Time_Start, 0)
+bluemediafile.*##+js(nano-sib, i--, , 0.02)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17935
+ilife97.com##+js(aopw, document.oncontextmenu)
+ilife97.com##+js(aopw, document.ondragstart)
+ilife97.com##:root:style(user-select: unset !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/150225 anti right click and devtools
+vtbe.to,vtube.network##+js(acs, RegExp, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17967
+manhwahentai.me##+js(acs, document.oncontextmenu)
+
+! https://canalnatelinhaonline.blogspot.com/ anti right click
+canalnatelinhaonline.blogspot.com##^script:has-text(document.onmousedown)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18034
+ph.ontools.net##+js(acs, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18046
+@@||luckydesigner.space/adview_$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/18048
+neilpatel.com##+js(no-xhr-if, /hotjar|googletagmanager/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18040
+onlinetools.com##+js(nano-sib, downloadTimer)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18073
+cool-etv.net##+js(aeld, contextmenu)
+cool-etv.net##+js(set, console.clear, noopFunc)
+||cool-etv.net/ch/suppy.js$script,1p
+
+! Soft Anti-Blocker
+jsfiddle.net##+js(nostif, support-jsfiddle)
+regexr.com##div.hello
+
+! https://freemcserver.net/ anti devtools
+freemcserver.net##+js(nosiif, potato)
+
+! https://snbc13.com/barrie-shooting-1-dead-2-officers-hurt-police-incident-in-innisfil-near-9th-line-alcona/ anti select
+! https://publicwww.com/websites/%22secure-copy-content-protection-public.css%22/
+.secure-copy-content-protection-public.css^$css,1p
+snbc13.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+snbc13.com##style:has-text(:not(input):not(textarea)):remove()
+
+! https://github.com/uBlockOrigin/uAssets/issues/18134
+thestar.com.my##+js(aeld, mouseleave)
+
+! corriereadriatico. it popup on leaving
+corriereadriatico.it##+js(aeld, mouseleave)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18146
+scarysymptoms.com##+js(acs, document.oncontextmenu)
+scarysymptoms.com##+js(acs, wccp_pro_iscontenteditable)
+scarysymptoms.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+scarysymptoms.com##*::selection:style(background-color:#338FFF !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18169
+ikorektor.pl##+js(nostif, ad)
+ikorektor.pl###ad-top-dsk
+ikorektor.pl##.adx1
+
+! https://github.com/uBlockOrigin/uAssets/issues/18180
+theonegenerator.com##+js(no-fetch-if, ads)
+
+! https://vgembed.com/e/kKJVORWVgp53XDw anti devtools and right click
+vgembed.com##+js(nosiif, detect)
+vgembed.com##+js(set, console.clear, noopFunc)
+vgembed.com##+js(set, DD, trueFunc)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/13p72m4/
+||static.wikia.nocookie.net/silversurfer/prod/latest/ageGateUnit-pathfinder.js^$script,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/18216
+personality-database.com##.rc-dialog-root
+personality-database.com##body:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18243
+colors.sonicthehedgehog.com##+js(set, document.oncontextmenu, null, 3)
+colors.sonicthehedgehog.com##+js(set, document.body.oncontextmenu, null, 3)
+colors.sonicthehedgehog.com##+js(aeld, DOMContentLoaded, "load")
+
+! https://github.com/uBlockOrigin/uAssets/issues/18254
+senpa.io##+js(aeld, contextmenu, _0x)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18255
+leakedzone.com##+js(aeld, contextmenu, preventDefault)
+leakedzone.com##+js(aeld, keydown, keyCode)
+leakedzone.com##+js(set, Object.prototype._detectLoop, noopFunc)
+
+! https://novelas-turcas.org/capitulos/de-te-ame-una-vez-esp/ anti devtools
+katerionews.com,telenovelas-turcas.com.es##+js(set, console.clear, undefined)
+telenovelas-turcas.com.es##+js(nostif, _detectLoop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18329
+g37.com.br##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/141m64a/
+film4e.com,zamundatv.com##+js(acs, AudiosL10n)
+
+! remove autoplay from reddit embeds
+embed.reddit.com##shreddit-player:remove-attr(autoplay)
+embed.reddit.com##a:has(shreddit-player):remove-attr(href)
+
+! https://zefoy.com/ anti devtools
+zefoy.com##+js(nostif, debugger)
+
+! https://www.jpost.com/science/article-746119 site refreshing
+jpost.com##^script:has-text(stopRefreshSite)
+!#if !cap_html_filtering
+jpost.com##+js(rmnt, script, stopRefreshSite)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/18528
+j91.asia##+js(aeld, contextmenu)
+
+! https://github.com/webcompat/web-bugs/issues/119017 (Firefox ESR and Opera)
+nppes.cms.hhs.gov##div#unsupportedBrowser
+
+! https://github.com/uBlockOrigin/uAssets/issues/18538
+khou.com##+js(aeld, mouseout)
+
+! https://phimmoichill.cc/ anti right click, devtools
+/wp-content/themes/linhminazmovies/assets/js/dev.js$script,1p
+
+! rodude.com anti select
+rodude.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://mehoathinh2.com/cau-hoc-sinh-moi-thieu-quyet-doan/tap-12-loi-to-tinh-trong-bua-tiec-giang-sinh anti devtools
+mehoathinh2.com##+js(set, forbiddenList, [])
+
+! goldenstateofmind.com anti adblock annoyance
+goldenstateofmind.com##+js(nostif, concertAds)
+
+! https://0123movies.net/watch-star-trek-picard-2020/season-1/episode-1-0123movies-free.html anti right click
+kmo.to##+js(set, console.clear, undefined)
+
+! https://0123movies.ch/movies/watch-transformers-rise-of-the-beasts-online-free/ anti right click
+0123movies.ch##+js(set, document.oncontextmenu, trueFunc)
+0123movies.ch##+js(set, document.onkeydown, trueFunc)
+0123movies.ch##+js(set, document.onselectstart, trueFunc)
+0123movies.ch##+js(set, document.onkeypress, trueFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18606
+9now.com.au##[id="toggle_notification_notification-ad-blocker"]:upward(1)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/14gghvf/
+! https://github.com/easylist/easylist/issues/16421
+||pagead2.googlesyndication.com/pagead/show_ads.js$script,redirect-rule=noopjs,domain=ageofconsent.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/18641
+neoseeker.com##+js(nostif, whetherdo)
+
+! https://teamkong.tk/forza-horizon-5-update-v1-594-508-0/ anti right click
+teamkong.tk##body * :not(input):not(textarea):style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+teamkong.tk##^script:has-text(nocontextmenu)
+!#if !cap_html_filtering
+teamkong.tk##+js(rmnt, script, nocontextmenu)
+!#endif
+
+! https://erotikflix.com/movies/annemle-sirrimiz/ devtools
+forplayx.ink##+js(aopr, devtoolsDetector.addListener)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18659
+brutal.io,powerline.io##+js(set, document.oncontextmenu, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18660
+wormate.io###mm-skin-over
+
+! https://github.com/uBlockOrigin/uAssets/issues/18667
+xeiaso.net##.adaptive
+
+! https://github.com/uBlockOrigin/uAssets/issues/18693
+musicallyvideos.com##+js(acs, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18689
+!gofile.io##.show.modal
+!gofile.io##.show.modal-backdrop
+!gofile.io##body:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18701
+embibe.com##.ReactModalPortal:has-text(mobile)
+
+! https://www.actvid.com/ anti devtools
+actvid.com##+js(nosiif, _0x)
+
+! https://vidmoly.to/embed-aogefgnt0v0b.html anti devtools
+vidmoly.*##^script:has-text(devtoolsDetector)
+!#if !cap_html_filtering
+vidmoly.*##+js(rmnt, script, devtoolsDetector)
+!#endif
+
+! camcaps .io anti right click dev tools
+camcaps.io##^script:has-text(debugger)
+!#if !cap_html_filtering
+camcaps.io##+js(rmnt, script, debugger)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/18740
+10tv.com##+js(aeld, mouseout)
+
+! Broken by AdGuard – Mobile App Banners on desktop
+!#if !env_mobile
+macaro-ni.jp#@#.l-main:style(padding-top: 13.4vw !important;)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/18760 anti right click
+isekaipalace.com##+js(noeval-if, alert)
+
+! https://seriesperu.com/2023/07/la-banda-del-chino-programa-03-07-23.html anti right click
+seriesperu.com##+js(noeval-if, String.fromCharCode)
+seriesperu.com##^script:has-text(contextmenu)
+!#if !cap_html_filtering
+seriesperu.com##+js(rmnt, script, contextmenu)
+!#endif
+
+! https://77.105.142.75/episode/the-good-bad-mother-season-1-episode-8/ anti devtools
+jeniusplay.com##+js(set, Object.prototype._detectLoop, undefined)
+jeniusplay.com##+js(set, console.clear, undefined)
+
+! https://sbot.cf/?k=MjE5NDYyNQ anti devtools
+sbot.cf##+js(rmnt, script, console.clear)
+sbot.cf##+js(nosiif, console.clear)
+
+! https://tvhay.cc/phim-bo/tan-anh-hung-xa-dieu-2017-thuyet-minh/?video_index=1 anti right click, devtools
+tvhay.*##+js(rmnt, script, wccp_pro)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18913
+fjordd.com##+js(aeld, contextmenu, preventDefault)
+fjordd.com##+js(rmnt, script, initPopup)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17732
+tumblr.com##+js(nostif, Premium)
+! https://github.com/AdguardTeam/AdguardFilters/issues/155809
+! ||assets.tumblr.com/pop/js/modern/async-login-wall
+tumblr.com##+js(set-cookie, logged_in, 1, , reload, 1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19020
+bestx.stream##+js(set, devtoolsDetector, {})
+
+! oploverz anti right click & text selection, etc
+oploverz.*##+js(rmnt, script, contextmenu)
+oploverz.*##+js(rmnt, style, user-select)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19015
+lapresse.ca##.brz_msg_wall_body
+lapresse.ca##body > div[style]:has(.brz_msg_wall_body)
+lapresse.ca##body:style(overflow: auto !important)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/154wyb0/
+zelka.org###description:style(user-select: initial !important;)
+
+! https://sekaikomik.bio/ anti right click, devtools
+sekaikomik.bio##+js(rmnt, script, nocontextmenu)
+
+! https://multicanais.li/assistir-hbo-2-ao-vivo-online-24-horas-gratis/ anti right click, devtools
+playertv.net##^script:has-text(/contextmenu|devtool/)
+!#if !cap_html_filtering
+playertv.net##+js(rmnt, script, /contextmenu|devtool/)
+!#endif
+
+! https://github.com/bogachenko/fuckfuckadblock/issues/443
+warungkomik.com##^script:has-text(preventDefault)
+!#if !cap_html_filtering
+warungkomik.com##+js(rmnt, script, preventDefault)
+!#endif
+warungkomik.com##body *:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/157211
+enduro-mtb.com##+js(set, SteadyWidgetSettings.adblockActive, false)
+
+! anti right-click/select
+themeslide.com##^script:has-text(preventDefault)
+!#if !cap_html_filtering
+themeslide.com##+js(rmnt, script, preventDefault)
+!#endif
+
+! https://serial.kukaj.io/modra-planeta-ii/S01E01 anti devtools
+kukaj.io##+js(set, devtoolsOpen, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/154778
+scitechdaily.com##+js(set-cookie, ezgwcc, 1)
+
+! https://ophim.vip/phim/an-danh-2 anti right click and devtools
+ophim.vip##+js(aost, navigator.userAgent, phimv)
+
+! https://twitter.com/SeriousHoax/status/1686306737404641280
+hindustantimes.com###credential_picker_iframe
+!#if env_mobile
+*###credential_picker_iframe
+!#endif
+
+! for ghide
+tumblr.com##.tmblr-iframe--follow-teaser
+
+! https://cdn.animesaga.in/v/mmWE57IZApMk/ anti devtools
+animesaga.in##^script:has-text(devtoolsDetector)
+!#if !cap_html_filtering
+animesaga.in##+js(rmnt, script, devtoolsDetector)
+!#endif
+animesaga.in##+js(set, devtoolsDetector, noopFunc)
+
+! terramirabilis. ro anti right click, select
+terramirabilis.ro##+js(rmnt, script, wccp)
+terramirabilis.ro##+js(ra, oncontextmenu)
+terramirabilis.ro##::selection:style(background-color:#338FFF!important)
+terramirabilis.ro##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlock-user/uBO-Scriptlets/discussions/25
+! https://github.com/uBlockOrigin/uAssets/issues/19316
+! https://github.com/uBlockOrigin/uAssets/issues/19388
+! https://www.reddit.com/r/uBlockOrigin/comments/1602t5t/
+aniwave.to,flixhq.*,vidplay.site##+js(nostif, ||null)
+aniwave.to,bflix.io,flixhq.*,fmovies.*,fmoviesz.*,f2movies.ru,movies2watch.ru,putlockernew.vc,swatchseries.ru,vidplay.site,vidstream.pro,mcloud.to##+js(nostif, 0x)
+animesuge.to,aniwave.to,bflix.io,flixhq.*,fmovies.*,fmoviesz.*,f2movies.ru,hdtoday.so,hurawatch.bz,movies2watch.ru,putlockernew.vc,swatchseries.ru,vidplay.site,vidstream.pro,mcloud.to##+js(aost, console.clear)
+animesuge.to,aniwave.to,hdtoday.so,hurawatch.bz,vidplay.*##+js(set, DisDevTool, undefined)
+animesuge.to,fmoviesz.to,hdtoday.so,hurawatch.bz##+js(nostif, null)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19271#issuecomment-1664958435
+161.97.70.5##+js(rmnt, script, isadb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19280
+zerogpt.net##+js(nostif, adsbygoogle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19282
+linkco.re##section.lyric_lyric:style(user-select: text !important; -webkit-user-select: text !important; -moz-user-select: text !important; -khtml-user-select: text !important; -webkit-user-drag: auto !important; -khtml-user-drag: auto !important; -webkit-touch-callout: auto !important; -moz-touch-callout: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19342 anti right click
+txori.com##+js(aeld, contextmenu, _0x)
+
+! https://team-octavi.com/ anti right click
+team-octavi.com##+js(aost, document.addEventListener, preventDeleteDialog)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19370
+||mms.cnn.com^$1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/19421
+bypass.city##+js(no-fetch-if, /googlesyndication|googletag/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19422
+nicekkk.com##+js(rmnt, script, debugger)
+
+! https://www.sgd.de/ right click blocked on images
+sgd.de##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4747#issuecomment-1691485028
+fullxh.com,hamsterix.*,megaxh.com,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##+js(no-fetch-if, ad.php)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/159897
+*$script,1p,redirect-rule=noopjs,domain=punishworld.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/19470
+comikey.com##+js(aeld, contextmenu, undefined)
+
+! https://tuta.com/blog/facebook-instagram-adtracking-ends - Cursor manipulation
+tuta.com##body > div > section.default:style(cursor: revert !important;)
+
+! https://venturebeat.com/business/ghostery-a-web-tracking-blocker-that-actually-helps-the-ad-industry/
+venturebeat.com##div.body-container:style(cursor: revert !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19472
+guildstats.eu##.gDiv
+
+! admiral
+aboutchromebooks.com,ancient.eu,comingsoon.net,daysoftheyear.com,edn.com,gearjunkie.com,harvardmagazine.com,lgbtqnation.com,majorgeeks.com,mangainn.net,medievalists.net,sherdog.com,sidereel.com,statesman.com,tvguide.com,winhelponline.com##+js(aopr, googletag)
+boston.com,britannica.com,cattime.com,dogtime.com,download.mokeedev.com,freep.com,ijr.com,inquirer.net,knowyourmeme.com,nationalreview.com,nofilmschool.com,order-order.com,savvytime.com,techlicious.com,technicpack.net,thedraftnetwork.com,wrestlezone.com,xda-developers.com##+js(acs, document.createElement, admiral)
+majorgeeks.com##+js(acs, document.getElementById, undefined)
+legacy.com##+js(acs, document.getElementsByTagName, admiral)
+lazyadmin.nl##+js(set, admiral, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19488
+saikaiscans.net##+js(aeld, contextmenu, [native code])
+
+! https://github.com/uBlockOrigin/uAssets/issues/19489
+gdrivedescarga.com##^script[id="jquery-core-js-after"]:has-text(e.preventDefault();)
+!#if !cap_html_filtering
+gdrivedescarga.com##+js(rmnt, script, e.preventDefault();)
+!#endif
+gdrivedescarga.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! ilsole24ore. com mouse leave annoyance
+ilsole24ore.com##+js(aeld, mouseleave)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19588
+gaz.com.br##+js(aeld, contextmenu)
+
+! anti right click bg-gledai
+bg-gledai.*##+js(rmnt, script, document.oncontextmenu)
+bg-gledai.*##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19597
+boop.pl##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/easylist/easylist/issues/17231
+audiologyresearch.org##+js(rmnt, script, document.oncontextmenu)
+audiologyresearch.org##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! klartext-ne. de anti right click, select, f-keys
+klartext-ne.de##+js(rmnt, script, contextmenu)
+klartext-ne.de##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+klartext-ne.de##::selection:style(background-color:#338FFF!important)
+
+! sqlserveregitimleri.com right-click select
+sqlserveregitimleri.com##+js(acs, jQuery, contextmenu)
+sqlserveregitimleri.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/16cc12p/how_to_make_blurred_text_normal_on_websites/
+edurev.in##+js(aopr, openOverlaySignup)
+
+! https://store.kde.org/p/2068663 - timer
+store.kde.org##+js(nano-stb, count)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19663
+haberiniz.com.tr##.kanews-banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/19798
+timesnownews.com###credential_picker_container
+
+! https://www.zipcode.com.ng/2023/01/city-of-toronto-on.html - anti select and copy
+zipcode.com.ng##+js(aeld, copy, Source)
+zipcode.com.ng##+js(rmnt, script, document.onselectstart)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19889 - anti devtools
+||yhmgo.com/tpsf/yh_js/rtpck.js$1p
+
+! Overlay asking to sign in
+expquebec.com##.swal2-container
+expquebec.com##.swal2-shown:remove-class(swal2-shown)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19916
+transinfo.pl##+js(aeld, copy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19919
+elsalvadorsurfrealestate.com##.show.middle.modal
+elsalvadorsurfrealestate.com##.show.modal-backdrop
+elsalvadorsurfrealestate.com##.aui-modal-open,.modal-open:style(overflow:unset!important)
+
+! translate.goog anti right click, copy
+translate.goog##+js(aeld, /contextmenu|keyup|keydown/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19974
+talouselama.fi,uusisuomi.fi,tekniikkatalous.fi,tivi.fi,kauppalehti.fi##[class^="Dialogue__Overlay-tmcl"]
+talouselama.fi,uusisuomi.fi,tekniikkatalous.fi,tivi.fi,kauppalehti.fi##body:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20008
+thejakartapost.com##+js(set, document.oncopy, noopFunc)
+thejakartapost.com##+js(rmnt, script, /$.*ready.*setInterval/)
+
+! oreilly. com leaving screen => pop-up
+oreilly.com##+js(aeld, mouseout, cookie)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20027
+fullxh.com,hamsterix.*,megaxh.com,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##+js(set, initials.urls.bannerCheckUrl, '')
+
+! https://github.com/uBlockOrigin/uAssets/issues/20084
+270towin.com##+js(set-session-storage-item, fs.adb.dis, 1)
+
+! https://github.com/easylist/easylist/issues/15515
+tech.hindustantimes.com###credential_picker_container
+
+! https://github.com/uBlockOrigin/uAssets/issues/20113
+photopea.com##.confirm:has-text(AdBlocker)
+||photopea.com/img/pp_wide.png^$image,1p
+||photopea.com/img/pp_tall.png^$image,1p
+photopea.com##+js(set, console.clear, noopFunc)
+
+! https://deccanherald.com/india/delhi/people-detained-from-jantar-mantar-for-denouncing-israel-over-gaza-action-2728594 - Copy manipulation
+deccanherald.com##+js(aopr, document.oncopy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20156
+/js/content-protector.min.js$script
+!#if cap_html_filtering
+mathcrave.com##^script:has-text(disable_show_error)
+!#else
+mathcrave.com##+js(rmnt, script, disable_show_error)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/20189
+vrcmods.com##.showfreemethod
+
+! https://github.com/uBlockOrigin/uAssets/issues/20190
+cyanlabs.net##+js(acis, jQuery, adsbygoogle)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/17cm7d5/brainly/
+! https://github.com/uBlockOrigin/uAssets/issues/9632
+brainly.*##+js(set-local-storage-item, social-qa/machineId, $remove$)
+
+! Daily upload limit of 2 images - Sign up now and enjoy monthly free credits
+www.watermarkremover.io##+js(set-local-storage-item, WkdGcGJIbEpiV0ZuWlVSaGRHRT0=, $remove$)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20228
+uploadvr.com##.force-load-ad
+
+! getemoji.com anti adblock annoyance
+getemoji.com##+js(set-session-storage-item, fs.adb.dis, 1)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/17fhagl/comment/k6ady0d/
+||dbx.molystream.org/assets/s.js$script
+
+! https://www.reddit.com/r/uBlockOrigin/comments/17g3pww/photocollage_com_detect_addblockers/
+2pdfconverter.com,annotation.com,changefaces.com,chartle.com,coloringonline.com,fakechatapp.com,files2zip.com,mapimage.com,maproute.com,mindclouds.com,phideo.com,photocollage.com,photoeditor.com,photoenlarger.com,photofilters.com,photoresizer.com,postermaker.com,qrapp.com,stripbackground.com,toonytool.com,wordclouds.com,youtubetrimmer.com##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/20294
+marinetraffic.com##+js(set, mtGlobal.disabledAds, true)
+marinetraffic.com##.under-map-wrapper:upward(1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20306
+sportando.basketball##.select-none:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/17hcflr/ymoviesvip_devtools_detector_embedded_into_app/
+! https://github.com/uBlockOrigin/uAssets/issues/20492
+ymovies.vip,aniwatch.to,megacloud.tv##+js(set, devtoolsDetector.launch, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20341
+lethalpanda.com##+js(aopr, b2a)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/17iihqp/anime_news_network_rolled_out_antiadblocker/
+animenewsnetwork.com##+js(set, ANN.ads.adblocked, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/17mifyx/adblocker_detected_on_hackthebox_website/
+||hackthebox.com/build/assets/just-detect-adblock-$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/20423
+amtraker.com##+js(no-fetch-if, cloudflareinsights.com)
+amtraker.com##.terrabanner
+
+! https://github.com/uBlockOrigin/uAssets/issues/20430
+heidisql.com##+js(rpnt, script, if(floovy()) {, if(false) {)
+
+! https://romprovider.com/lava-yuva-2-pro-lzx408-firmware-flash-file-stock-rom/ - Blocked right-click and select
+romprovider.com##+js(aopw, document.oncontextmenu)
+romprovider.com##:root:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20453
+! https://github.com/uBlockOrigin/uAssets/issues/19670
+dicasfinanceirasbr.com,dicasdevalor.net,dicasdefinancas.net,guiasaude.info,felizemforma.com,financasdeouro.com##+js(aeld, contextmenu)
+guiasaude.info,felizemforma.com##+js(acs, document.onkeydown)
+financasdeouro.com##[oncontextmenu="return false;"]:remove-attr(oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20473
+brokensilenze.net##+js(rmnt, script, disable_copy)
+brokensilenze.net##+js(rmnt, script, nocontext)
+brokensilenze.net##*:style(cursor:unset!important;user-select:unset!important)
+
+! https://seriesperu.com/2023/11/la-banda-del-chino-programa-03-11-23.html - anti right click
+seriesperu.com##+js(aeld, contextmenu, preventDefault)
+
+! https://www.concertarchives.org/concerts/queens-of-the-stone-age-39b3e73b-f1e1-4c2b-9f29-d1aa157b452d - anti-adb
+||pub.network^$script,3p,redirect-rule=noopjs,domain=concertarchives.org
+concertarchives.org#@#[data-freestar-ad]
+concertarchives.org##.freestar-placement
+
+! https://github.com/uBlockOrigin/uAssets/issues/20493
+newsrade.com##+js(rmnt, script, ConsoleBan)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20526
+||userapi.com/impf/$image,uritransform=/^\/impf\/+//,domain=vk.com|vk.ru
+
+! web.telegram.org - Anti select
+web.telegram.org##div.Message.is-protected:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20528
+galinos.gr##+js(nostif, pleaseSupportUs)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20555
+bluesnews.com##+js(nostif, nn_mpu1, 5000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20574
+broncoshq.com##+js(rmnt, script, XF)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20059#issuecomment-1806089143
+androidpolice.com,makeuseof.com,movieweb.com,xda-developers.com,thegamer.com,cbr.com,gamerant.com,screenrant.com,howtogeek.com,thethings.com,simpleflying.com,dualshockers.com##+js(remove-cookie, articlesRead, when, scroll keydown)
+androidpolice.com,makeuseof.com,movieweb.com,xda-developers.com,thegamer.com,cbr.com,gamerant.com,screenrant.com,howtogeek.com,thethings.com,simpleflying.com,dualshockers.com##+js(set, maxUnauthenicatedArticleViews, null)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20606
+groundies.com##.cms-popup
+groundies.com##.modal-backdrop
+groundies.com##.modal-open:style(overflow:unset!important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20657
+alfred.camera##+js(aeld, DOMContentLoaded, ads)
+alfred.camera##+js(nosiif, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17548
+||devfiles.pages.dev/js/devtools.js$script
+!#if cap_html_filtering
+dev.miuiflash.com,djxmaza.in,thecubexguide.com##^script[disable-devtool-auto]
+dev.miuiflash.com,djxmaza.in,thecubexguide.com##^script:has-text(debugger)
+!#else
+dev.miuiflash.com,djxmaza.in,thecubexguide.com##+js(rmnt, script, disable-devtool)
+dev.miuiflash.com,djxmaza.in,thecubexguide.com##+js(rmnt, script, debugger)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/20725
+decider.com,nypost.com,pagesix.com##+js(aopr, googletag.cmd)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/166405
+habuteru.com##+js(aopw, document.oncontextmenu)
+habuteru.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! anascrie. ro anti right click, select, print, f-keys
+anascrie.ro##+js(rmnt, script, /document.onkeydown|document.ondragstart/)
+anascrie.ro##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -khtml-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; -webkit-tap-highlight-color: revert !important; cursor: revert !important;)
+anascrie.ro##style:has-text(@media print):remove()
+
+! https://github.com/uBlockOrigin/uAssets/issues/20747
+moviesapi.club,bestx.stream,watchx.top##+js(rmnt, script, devtoolsDetector)
+moviesapi.club,bestx.stream,watchx.top##+js(set, devtoolsDetector, {})
+
+! https://github.com/uBlockOrigin/uAssets/issues/20790
+streambuddy.net##+js(rmnt, script, oncontextmenu)
+streambuddy.net##body *:style(user-select: unset !important)
+streambuddy.net##.elementor-top-column h6:has-text(advertisement):upward(.elementor-top-column)
+
+! anti right click, select, copy, f-keys, print
+daotranslate.com##+js(aopw, document.oncontextmenu)
+daotranslate.com##+js(aopw, document.onselectstart)
+daotranslate.com##+js(aeld, , undefined)
+daotranslate.com##::selection:style(background-color:#338FFF!important)
+||daotranslate.b-cdn.net/wp-content/plugins/wccp-pro/
+
+! https://github.com/uBlockOrigin/uAssets/issues/20855
+wrosinski.pl##+js(aeld, rocket-DOMContentLoaded, bind(document))
+
+! iptvromania. ro anti right click, select, f-keys
+iptvromania.ro##+js(rmnt, script, contextmenu)
+iptvromania.ro##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -khtml-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; -webkit-tap-highlight-color: revert !important; cursor: revert !important;)
+iptvromania.ro##::selection:style(background-color:#338FFF!important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20880
+wtsp.com##+js(aeld, mouseout, innerHeight)
+
+! https://welovemanga.one/read-frieren-raw-chapter-1.html - anti right click
+welovemanga.one##+js(ra, oncontextmenu, [oncontextmenu="return false;"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/20919
+pap.pl##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -khtml-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; -webkit-tap-highlight-color: revert !important; cursor: revert !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20920
+mangaschan.net,sssscanlator.com,nightscans.net,cypherscans.xyz##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/pull/20922 - icourse163 .org anti right click, copy, shortcut key
+icourse163.org##+js(aopr, document.oncontextmenu)
+icourse163.org##+js(aopr, document.oncopy)
+icourse163.org##+js(acs, document.onkeydown)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20942
+twitchemotes.com##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8706#issuecomment-1833133123
+||send.cm/static/js/engine.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/20972
+alexsportz.online##+js(noeval-if, debugger)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20949
+smartkhabrinews.com##body:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+smartkhabrinews.com##+js(ra, oncontextmenu)
+smartkhabrinews.com##+js(aeld, contextmenu)
+!#if cap_html_filtering
+smartkhabrinews.com##^script:has-text(ctrlKey)
+!#else
+smartkhabrinews.com##+js(rmnt, script, ctrlKey)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/20982
+starzunion.com##+js(aeld, /^(contextmenu|mousedown|keydown)$/, preventDefault)
+
+! nsfw247.biz
+nsfw247.biz###page:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21005
+cheersandgears.com##+js(rmnt, script, fetch)
+
+! copy manipulation
+libertatea.ro##+js(aeld, copy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21042
+sportea.online##+js(noeval-if, debugger)
+
+! streamvid. net anti right click, copy, dev tools
+streamvid.net##+js(aeld, contextmenu)
+streamvid.net##+js(rmnt, script, debugger)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21051
+moovitapp.com##+js(trusted-click-element, [data-automation="continue-to-ads-btn"], , 10000)
+moovitapp.com##.init.open
+moovitapp.com##.top-banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/20886
+digminecraft.com##+js(set, placeAdsHandler, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21088
+vidstreaming.xyz##+js(nosiif, devtoolsDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21072
+@@||iphoneincanada.ca^$ghide
+iphoneincanada.ca##.adthrive-ad
+
+! firescans. xyz anti drag and drop, f-keys
+firescans.xyz##+js(acs, jQuery, hmwp_is_devtool)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21255
+*$image,domain=peacocktv.com,redirect-rule=1x1.gif
+peacocktv.com##.playback-ad-blocker-notice
+
+! cespun. eu anti right click, select, f-keys
+!#if cap_html_filtering
+cespun.eu##^script:has-text(contextmenu)
+!#else
+cespun.eu##+js(rmnt, script, contextmenu)
+!#endif
+cespun.eu##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21289#issuecomment-1848358631
+tips97tech.blogspot.com##+js(rmnt, script, debugger)
+
+! encurtandourl.com anti right click and copy
+encurtandourl.com##+js(aopw, mensagem)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21318
+news.17173.com##+js(aeld, copy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21300
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=woomy-site.glitch.me
+
+! https://github.com/uBlockOrigin/uAssets/issues/21319
+||videos-cloudfront.jwpsrv.com^$media,domain=app.simpleclub.com
+||cdn.jwplayer.com^$media,domain=app.simpleclub.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/21352
+||ip.sb/assets/js/wwads_blocked.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/21301
+@@||arras.io^$xhr,1p
+arras.io,arras.netlify.app,arrax.io##+js(rmnt, script, onerror)
+||cdn.intergient.com^$redirect-rule=noopjs,domain=arras.*|arras.netlify.app|arrax.io
+!#if cap_html_filtering
+/container.js$script,1p,replace=/5\>Object\.keys\(/0>Object.keys(/g,domain=arras.io|arras.netlify.app|arrax.io
+/container.js$script,1p,replace=/\>Object\[_/<Object[_/g,domain=arras.io|arras.netlify.app|arrax.io
+!#else
+@@||cdn.intergient.com/*/ramp.js$script,domain=arras.io|arras.netlify.app|arrax.io
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/21377
+freetvsports.xyz##+js(noeval-if, debugger)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21378
+zippyupload.com##[class^="advt-"]
+zippyupload.com##+js(aeld, contextmenu, preventDefault)
+
+! ndtvprofit. com copy manipulation
+ndtvprofit.com##+js(aopr, document.oncopy)
+
+! tuborstb.co anti devtools
+tuborstb.co##+js(nostif, debugger)
+
+! vembed.org anti devtools
+vembed.*##+js(rmnt, script, devtools)
+
+! netu.tv sites, anti devtools
+netu.*,netuplayer.top,stbnetu.xyz##+js(set, devtoolsDetector.launch, noopFunc)
+
+! stblion.xyz anti devtools
+stblion.xyz##+js(rmnt, script, while(!![]){try{var)
+
+! https://scenexe.io/ anti adblock
+scenexe.io##+js(set-local-storage-item, ad_blocker, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21065
+@@||googlesyndication.com^$script,domain=cheatnetwork.eu
+@@||cheatnetwork.eu^$script,xhr,1p
+@@||cheatnetwork.eu^$ghide
+
+! hdrez .com anti right click, f-keys
+hdrez.com##+js(aopw, document.oncontextmenu)
+
+! sportsupa .com anti right click
+sportsupa.com##+js(ra, oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21424
+how-to-pc.info##+js(set, pqdxwidthqt, false)
+@@||how-to-pc.info^$ghide
+
+! emturbovid.com anti devtools
+emturbovid.com##+js(nostif, debugger)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/18m1q3m/cant_select_text_on_website/
+with.is##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; -webkit-tap-highlight-color: revert !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21487
+movie-web.app##+js(noeval-if, debugger)
+
+! redecanais.zip anti right-click, select
+redecanais.*##+js(acs, reEnable)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21353
+raenonx.cc##div[class="flex flex-row w-full h-full"]:has(> div[class^="relative w-full overflow-hidden focus:outline-none"] .adsbygoogle)
+raenonx.cc##div[class="flex flex-col w-full info-section-opaque fixed bottom-0 z-nav"]:has(div:has-text(/^Ads$/))
+raenonx.cc##+js(nosiif, ()=>_(, 15000)
+
+! hoca4u .com anti right-click
+hoca4u.com##+js(ra, oncontextmenu)
+hoca4u.com##+js(set, document.onmousedown, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21554
+lowcygier.pl##+js(aeld, error, browser-plugin)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21549
+rsadnetworkinfo.com,rsinsuranceinfo.com,rsfinanceinfo.com,rsgamer.app,rssoftwareinfo.com,rshostinginfo.com,rseducationinfo.com##+js(aeld, /contextmenu|devtoolschange/)
+rsadnetworkinfo.com,rsinsuranceinfo.com,rsfinanceinfo.com,rsgamer.app,rssoftwareinfo.com,rshostinginfo.com,rseducationinfo.com##+js(set, document.onkeydown, null)
+rsadnetworkinfo.com,rsinsuranceinfo.com,rsfinanceinfo.com,rsgamer.app,rssoftwareinfo.com,rshostinginfo.com,rseducationinfo.com##+js(nowoif)
+rsadnetworkinfo.com,rsinsuranceinfo.com,rsfinanceinfo.com,rsgamer.app,rssoftwareinfo.com,rshostinginfo.com,rseducationinfo.com##+js(set, console.clear, undefined)
+
+! https://community.brave.com/t/asheville-com-ad-appearing/522978
+asheville.com##+js(nostif, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21577
+theasianparent.com##+js(acs, document.onselectstart, disableselect)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21582
+@@||s.nitropay.com/ads-$script,domain=maxroll.gg
+
+! https://github.com/uBlockOrigin/uAssets/issues/2031
+!#if cap_html_filtering
+||solarmovie.vip/js/$script,1p,replace=/\(\{checkers\:.*?\]\}\)/({checkers:[]})/g
+!#endif
+solarmovie.*##+js(nostif, _detectLoop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21636
+chowhound.com,explore.com,foodie.com,foodrepublic.com,glam.com,grunge.com,healthdigest.com,housedigest.com,looper.com,mashed.com,moneydigest.com,nickiswift.com,outdoorguide.com,slashfilm.com,slashgear.com,tastingtable.com,thedailymeal.com,thelist.com,women.com,wrestlinginc.com##+js(aeld, copy)
+
+! https://pks.raenonx.cc/ anti-adb
+pks.raenonx.cc##.bg-red-500\/50
+
+! https://github.com/uBlockOrigin/uAssets/issues/21708
+geeksoncoffee.com##+js(aopr, disableEnterKey)
+geeksoncoffee.com##+js(acs, document.oncontextmenu)
+geeksoncoffee.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important;)
+
+! guidingliterature .com anti right-click, select, print
+guidingliterature.com##+js(aopw, disableEnterKey)
+guidingliterature.com##+js(acs, document.ondragstart)
+guidingliterature.com##+js(acs, document.oncontextmenu)
+guidingliterature.com##style:has-text(@media print):remove()
+guidingliterature.com##*:style(-webkit-touch-callout: default !important; -webkit-user-select: text !important; -khtml-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; -webkit-tap-highlight-color: revert !important; cursor: revert !important;)
+
+! devtools detection scripts
+! https://github.com/uBlockOrigin/uAssets/issues/21716
+! https://github.com/uBlockOrigin/uAssets/issues/21320
+||cdn.jsdelivr.net/npm/disable-devtool$script,domain=idlixofficials.com|idlixplus.com|idlixplus.net|embed.meomeo.pw|vumoo.to
+||cdn.jsdelivr.net/npm/devtools-detector$script,domain=comedyshow.to|superembeds.com
+||hentaihd.cyou/assets/js/devtools-detector.js$script
+||bhplay.me/player/assets/devtools-detector/$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/1325
+animedao.*##+js(aopr, devtoolsDetector)
+
+! https://github.com/NanoMeow/QuickReports/issues/3187
+librospreuniversitariospdf.blogspot.com##+js(aopr, checkDevTools)
+
+! ngelmat.net anti-devtools
+ngelmat.net##+js(nosiif, DevToolsOpen)
+
+! repelishd. me popups devtools
+oceanplay.org##+js(nostif, devtool)
+
+! https://bluphim.com/xem-phim/the-creator-3526/ anti-devtools
+bluphim.com,cdnmoviking.tech##+js(nosiif, console.clear)
+
+! https://mineskin.org/gallery banners
+mineskin.org##+js(aopw, ABB_config)
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-8002410
+blog.cryptowidgets.net,blog.insurancegold.in,blog.wiki-topia.com##+js(acs, document.addEventListener, contextmenu)
+blog.cryptowidgets.net,blog.insurancegold.in,blog.wiki-topia.com##+js(rmnt, script, devtools)
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-7999398
+blog.coinsvalue.net,blog.cookinguide.net,blog.freeoseocheck.com##+js(acs, document.addEventListener, contextmenu)
+blog.coinsvalue.net,blog.cookinguide.net,blog.freeoseocheck.com##+js(rmnt, script, devtools)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21812
+@@||sheffieldforum.co.uk^$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/21830
+braflix.app##+js(aeld, keydown, keyCode)
+braflix.app##+js(nosiif, detect)
+
+! nsmb .com anti-adb
+nsmb.com##+js(no-xhr-if, googlesyndication)
+nsmb.com###header-banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/21919
+afterclass.io##+js(set-session-storage-item, adblock, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21991
+@@||hbstack.dev^$script,xhr,1p
+
+! aventurainromania. ro anti right click, select
+aventurainromania.ro##+js(rmnt, script, document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/22106
+playingfire.com##body:style(user-select: text !important; -ms-user-select: text !important; -moz-user-select: text !important; -khtml-user-select: text !important; -webkit-user-select: text !important; -webkit-touch-callout: default !important;)
diff --git a/uAssets/filters/annoyances.txt b/uAssets/filters/annoyances.txt
new file mode 100644
index 0000000..63fc191
--- /dev/null
+++ b/uAssets/filters/annoyances.txt
@@ -0,0 +1,12 @@
+! Title: uBlock₀ filters – Annoyances
+! Last modified: %timestamp%
+! Expires: 7 days
+! Description: |
+! Filters optimized for uBlock Origin, to be used with Fanboy's
+! and/or Adguard's "Annoyances" list(s)
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+! Homepage: https://github.com/uBlockOrigin/uAssets
+! Forums: https://github.com/uBlockOrigin/uAssets/issues
+
+!#include annoyances-cookies.txt
+!#include annoyances-others.txt
diff --git a/uAssets/filters/badlists.txt b/uAssets/filters/badlists.txt
new file mode 100644
index 0000000..db757b1
--- /dev/null
+++ b/uAssets/filters/badlists.txt
@@ -0,0 +1,77 @@
+# The lists below are known to create issues in uBO.
+
+# Reek's Anti-Adblock Killer
+https://raw.github.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt
+https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt
+
+# ABP anti-circumvention filter lists
+https://easylist-downloads.adblockplus.org/abp-filters-anti-cv.txt
+https://easylist-msie.adblockplus.org/abp-filters-anti-cv.txt
+https://raw.githubusercontent.com/abp-filters/abp-filters-anti-cv/master/english.txt
+https://easylist-msie.adblockplus.org/antiadblockfilters.txt
+
+# https://github.com/uBlockOrigin/uBlock-issues/issues/971
+https://hosts-file.net/.%5Cad_servers.txt remove
+http://hosts-file.net/.%5Cad_servers.txt remove
+
+# https://github.com/uBlockOrigin/uAssets/issues/8738
+https://raw.githubusercontent.com/k2jp/abp-japanese-filters/master/abpjf.txt
+
+# https://github.com/uBlockOrigin/uAssets/issues/13566
+# https://twitter.com/gorhill/status/1352651716265713665
+https://www.joinhoney.com/whitelist/honey-smart-shopping.txt
+
+# whitelisting lists
+https://slickdeals.net/attachment/extension/allowlist.txt
+https://easylist-downloads.adblockplus.org/exceptionrules.txt
+https://letyshops.com/adblock.txt
+https://work.ink/adblock-whitelist.txt
+https://www.aadvantageeshopping.com/adBlockWhitelist.php
+https://multiup.org/list_adblock.txt
+https://downloads.zohocdn.com/ulaa-browser/release/adb/stable/ulaa-filters.txt
+
+# https://www.reddit.com/r/uBlockOrigin/comments/143k8lm/
+https://www.topcashback.co.uk/misc/AdBlockWhiteList.aspx
+https://www.topcashback.co.uk/Misc/AdBlockWhiteList.aspx
+https://www.topcashback.com/Misc/AdBlockWhiteList.aspx
+
+# https://github.com/collinbarrett/FilterLists/issues/3794
+https://www.rakuten.ca/static/cashback-shopping-whitelist
+https://www.rakuten.ca/static/cashback-shopping-whitelist?title=Rakuten%20Cash%20Back%20Shopping
+# redirect to the new list
+https://www.ebates.com/whitelist/ebates-cash-back-shopping.txt
+https://www.rakuten.com/whitelist/ebates-cash-back-shopping.txt
+
+# obsolete lists
+https://cdn.rawgit.com/NanoAdblocker/NanoFilters/master/NanoFilters/NanoAnnoyance.txt
+https://cdn.rawgit.com/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt
+https://cdn.rawgit.com/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt
+https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt
+https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt
+https://raw.githubusercontent.com/NanoAdblocker/NanoFilters/master/NanoFilters/NanoAnnoyance.txt
+https://raw.githubusercontent.com/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt
+https://raw.githubusercontent.com/NanoAdblocker/NanoFilters/master/NanoFiltersSource/NanoAnnoyance.txt
+https://raw.githubusercontent.com/NanoAdblocker/NanoFilters/master/NanoFiltersSource/NanoBase.txt
+https://raw.githubusercontent.com/NanoAdblocker/NanoFilters/master/NanoFiltersSource/NanoWhitelist.txt
+https://raw.githubusercontent.com/jspenguin2017/uBlockProtector/master/uBlockProtectorList.txt
+https://cdn.rawgit.com/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt
+https://cdn.rawgit.com/NanoMeow/MDLMirror/master/hosts.txt
+
+# outdated prebake list
+https://raw.githubusercontent.com/liamja/Prebake/master/obtrusive.txt
+
+# interfere negatively; generic exceptions to ad servers
+https://raw.githubusercontent.com/bogachenko/fuckfuckadblock/master/fuckfuckadblock.txt
+https://cdn.statically.io/gh/bogachenko/fuckfuckadblock/master/fuckfuckadblock.txt
+https://raw.githack.com/bogachenko/fuckfuckadblock/master/fuckfuckadblock.txt
+https://cdn.jsdelivr.net/gh/bogachenko/fuckfuckadblock/fuckfuckadblock.txt
+https://cdn.jsdelivr.net/gh/bogachenko/fuckfuckadblock@master/fuckfuckadblock.txt
+https://fuckfuckadblock.pages.dev/fuckfuckadblock.txt
+https://fuckfuckadblock.pages.dev/fuckfuckadblock.txt?_=3
+https://raw.githack.com/bogachenko/fuckfuckadblock/master/fuckfuckadblock.txt?_=3
+https://cdn.statically.io/gh/bogachenko/fuckfuckadblock/master/fuckfuckadblock.txt?_=3
+https://raw.githubusercontent.com/bogachenko/fuckfuckadblock/master/fuckfuckadblock.txt?_=3
+
+! https://github.com/uBlockOrigin/uAssets/discussions/20627
+https://raw.githubusercontent.com/Apious/Ads_Filter_Contents/1st/Ads_Block_Contents.txt
+https://raw.githubusercontent.com/Apious/Ads_Filter_DNS/1st/Ads_Block_DNS.txt \ No newline at end of file
diff --git a/uAssets/filters/badware.txt b/uAssets/filters/badware.txt
new file mode 100644
index 0000000..5ade45f
--- /dev/null
+++ b/uAssets/filters/badware.txt
@@ -0,0 +1,3619 @@
+! Title: uBlock₀ filters – Badware risks
+! Last modified: %timestamp%
+! Expires: 5 days
+! Description: |
+! For sites documented to put users at risk of installing
+! adware/crapware/malware, having login credentials stolen, etc.
+! The purpose is to at least ensure a user is warned of the risks ahead.
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+! Homepage: https://github.com/uBlockOrigin/uAssets
+!
+! GitHub issues: https://github.com/uBlockOrigin/uAssets/issues
+! GitHub pull requests: https://github.com/uBlockOrigin/uAssets/pulls
+!
+! Each entry has to be well enough sourced, see the comments above each entry for sources
+
+! Using request of type `document` will cause the whole site to be blocked through
+! strict blocking, yet the site will render properly if a user still decides to
+! go ahead.
+
+! 2014-10-22: https://assiste.com/01Net.html
+! 2013-03-25: https://www.malekal.com/pctutotuto4pc-association-avec-01net/
+! 2012-10-31: https://www.journaldunet.com/solutions/dsi/des-malwares-sur-telecharger-com-01net-1012.shtml
+! 2012-10-30: https://www.lesnumeriques.com/appli-logiciel/telecharger-depuis-01net-nuit-gravement-a-sante-pc-n26763.html
+! 2012-06-17: https://www.malekal.com/01net-pc-optimizer-pour-ne-pas-optimiser-son-pc/
+! 2012-02-17: http://neosting.net/logiciels/01net-et-softonic-ajoutent-aussi-un-installeur-publicitaire.html (Dead page)
+||01net.com/telecharger/$doc
+
+! 2015-03-11: https://blog.emsisoft.com/en/12678/mind-the-pup-top-download-portals-to-avoid/
+! 2015-01-21: https://www.howtogeek.com/207692/yes-every-freeware-download-site-is-serving-crapware-heres-the-proof/
+! 2015-01-11: https://www.howtogeek.com/198622/heres-what-happens-when-you-install-the-top-10-download.com-apps/
+! 2012-06-27: https://insecure.org/news/download-com-fiasco.html
+! 2011-12-05: https://seclists.org/nmap-announce/2011/5
+! 2011-08-22: https://www.extremetech.com/computing/93504-download-com-wraps-downloads-in-bloatware-lies-about-motivations
+! https://github.com/uBlockOrigin/uAssets/issues/926
+! ||download.cnet.com^$doc
+
+! https://github.com/uBlockOrigin/uAssets/issues/79
+||flexytalk.net^
+||quickdomainfwd.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/1547
+||vlc.de^$doc
+
+! https://github.com/uBlockOrigin/uAssets/issues/1738
+||audacity.de^$doc
+
+! https://github.com/uBlockOrigin/uAssets/issues/1853
+||havenworks.com^$doc
+
+! https://github.com/gorhill/uBlock/wiki/Badware-risks#ublockorg
+! ||ublock.org^$doc
+~support.ublock.org,ublock.org##main::before:style(content: 'uBlock is unrelated to the well-known uBlock Origin.' !important; font-size: 32px !important; color: red !important; font-weight: bold !important;)
+support.ublock.org##div.hero-unit > div.search-box--hero-unit::before:style(content: 'uBlock is unrelated to the well-known uBlock Origin.' !important; font-size: var(--font-size-h2) !important; color: red !important; font-weight: bold !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3060
+! https://www.bleepingcomputer.com/news/security/fake-websites-for-keepass-7zip-audacity-others-found-pushing-adware/
+! https://www.virustotal.com/#/file/a5616985e92ca7c1df3b132d2da2ef33c64f38ba2dca40445017037473d7d014/detection
+! https://twitter.com/certbund/status/1127864403276091393
+! https://github.com/uBlockOrigin/uAssets/issues/17880
+||7zip.es^$doc
+||7zip.fr^$doc
+||7zip.it^$doc
+||adblock.fr^$doc
+||aresgalaxy.es^$doc
+||audacity.es^$doc
+||audacity.fr^$doc
+||audacity.it^$doc
+||audacity.pl^$doc
+||azureus.es^$doc
+||bittorrent.es^$doc
+||bleachbit.com^$doc
+||blender3d.es^$doc
+||blender3d.fr^$doc
+||bluestacksdownloads.com^$doc
+||calibre.it^$doc
+||celestia.es^$doc
+||celestia.fr^$doc
+||clonezilla.es^$doc
+||clonezilla.fr^$doc
+||clonezilla.it^$doc
+||cyberduck.de^$doc
+||cyberduck.es^$doc
+||cyberduck.fr^$doc
+||cyberduck.it^$doc
+||filezilla.es^$doc
+||filezilla.fr^$doc
+||filezilla.it^$doc
+||filezilla.net^$doc
+||filezilla.pl^$doc
+||freefilesync.com^$doc
+||freerapid.fr^$doc
+||garagebandforpc.org^$doc
+||gimp.es^$doc
+||gparted.fr^$doc
+||gparted.it^$doc
+||greenshot.fr^$doc
+||greenshot.org^$doc
+||handbrake.es^$doc
+||handbrake.it^$doc
+||inkscape.es^$doc
+||inkscape.fr^$doc
+||inkscape.it^$doc
+||izarc.fr^$doc
+||jdownloader.fr^$doc
+||keepass.com^$doc
+||keepass.de^$doc
+||keepass.es^$doc
+||keepass.fr^$doc
+||keepass.it^$doc
+||keepassxc.com^$doc
+||notepad2.com^$doc
+||office.org^$doc
+||open-office.fr^$doc
+||openoffice.de^$doc
+||paintnet.es^$doc
+||paintnet.fr^$doc
+||paintnet.it^$doc
+||pdfsam.com^$doc
+||peazip.com^$doc
+||qbittorrent.com^$doc
+||scribus.fr^$doc
+||scribus.it^$doc
+||senuti.org^$doc
+||smplayer.org^$doc
+||stellarium.es^$doc
+||stellarium.fr^$doc
+||truecrypt.fr^$doc
+||truecrypt.it^$doc
+||truecrypt.pl^$doc
+||unetbootin.net^$doc
+||unetbootin.org^$doc
+||utorrent.it^$doc
+||virtualbox.es^$doc
+||virtualbox.pl^$doc
+
+! https://github.com/uBlockOrigin/uAssets/issues/3730
+! https://blog.sucuri.net/2018/10/malicious-redirects-from-newsharecounts-com-tweet-counter.html
+||newsharecounts.s3-us-west-2.amazonaws.com/nsc.js$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/4201
+||googlo.co^$doc
+! https://github.com/uBlockOrigin/uAssets/issues/4201#issuecomment-458340273
+||chairgaubsy.com^$doc
+||epailseptox.com^$doc
+||hentaiplaytime.com^$doc
+||viewmypdf.com^$doc
+
+! foxload.com badware
+||foxload.com^$doc
+
+! aksia.co badware
+! Ref: https://www.bleepingcomputer.com/news/security/phisher-announces-more-attacks-against-hedge-funds-and-financial-firms/
+||aksia.co^$doc
+
+! ReImagePlus links
+! https://github.com/uBlockOrigin/uAssets/issues/5136
+! Ref: https://forums.malwarebytes.com/topic/194200-removal-instructions-for-reimage-repair/
+! https://windowsreport.com/extend-windows-laptop-battery-life/
+windowsreport.com##.code-block
+! https://appuals.com/fix-error-0x800701e3-on-windows-7-8-1-10/
+appuals.com##.appua-reimage-top
+appuals.com##.info.box
+! https://ugetfix.com/ask/how-to-fix-windows-store-error-0x8000ffff/
+pcseguro.es,sauguspc.lt,sichernpc.de,ugetfix.com,wyleczpc.pl##.download_button_info_texts
+pcseguro.es,sauguspc.lt,sichernpc.de,ugetfix.com,wyleczpc.pl##.js-download_button_additional_links
+pcseguro.es,sauguspc.lt,sichernpc.de,ugetfix.com,wyleczpc.pl##.primary_download
+pcseguro.es,sauguspc.lt,sichernpc.de,ugetfix.com,wyleczpc.pl##.sidebar_download_inner
+pcseguro.es,sauguspc.lt,sichernpc.de,ugetfix.com,wyleczpc.pl##div.attention-button-box-green
+! https://www.thewindowsclub.com/fix-windows-update-error-0xc1900130-on-windows-10
+thewindowsclub.com##.entry-content > div > strong:has-text(find & fix Windows error)
+! https://www.majorgeeks.com/files/details/patch_my_pc.html
+majorgeeks.com##b:has(a[target^="reimage"])
+||majorgeeks.com/images/icons/red_icon_18x17px.png$image
+! https://www.2-spyware.com/remove-redirector-gvt1-com.html
+2-spyware.com,novirus.uk,faravirus.ro,uirusu.jp,virusi.hr,wubingdu.cn,avirus.hu,ioys.gr,odstranitvirus.cz,tanpavirus.web.id,utanvirus.se,virukset.fi,losvirus.es,virusler.info.tr,semvirus.pt,lesvirus.fr,senzavirus.it,dieviren.de,viruset.no,usunwirusa.pl,zondervirus.nl,bedynet.ru,virusai.lt,virusi.bg,viirused.ee,udenvirus.dk##.attention-button-wrap:has-text(Reimage)
+2-spyware.com,novirus.uk,faravirus.ro,uirusu.jp,virusi.hr,wubingdu.cn,avirus.hu,ioys.gr,odstranitvirus.cz,tanpavirus.web.id,utanvirus.se,virukset.fi,losvirus.es,virusler.info.tr,semvirus.pt,lesvirus.fr,senzavirus.it,dieviren.de,viruset.no,usunwirusa.pl,zondervirus.nl,bedynet.ru,virusai.lt,virusi.bg,viirused.ee,udenvirus.dk##.ui-content > .win
+2-spyware.com,novirus.uk,faravirus.ro,uirusu.jp,virusi.hr,wubingdu.cn,avirus.hu,ioys.gr,odstranitvirus.cz,tanpavirus.web.id,utanvirus.se,virukset.fi,losvirus.es,virusler.info.tr,semvirus.pt,lesvirus.fr,senzavirus.it,dieviren.de,viruset.no,usunwirusa.pl,zondervirus.nl,bedynet.ru,virusai.lt,virusi.bg,viirused.ee,udenvirus.dk##.sidebar_download_inner > :not(.voting-box):not(.colorbg-grey)
+2-spyware.com,novirus.uk,faravirus.ro,uirusu.jp,virusi.hr,wubingdu.cn,avirus.hu,ioys.gr,odstranitvirus.cz,tanpavirus.web.id,utanvirus.se,virukset.fi,losvirus.es,virusler.info.tr,semvirus.pt,lesvirus.fr,senzavirus.it,dieviren.de,viruset.no,usunwirusa.pl,zondervirus.nl,bedynet.ru,virusai.lt,virusi.bg,viirused.ee,udenvirus.dk##th:has-text(/^Detection$/)
+2-spyware.com,novirus.uk,faravirus.ro,uirusu.jp,virusi.hr,wubingdu.cn,avirus.hu,ioys.gr,odstranitvirus.cz,tanpavirus.web.id,utanvirus.se,virukset.fi,losvirus.es,virusler.info.tr,semvirus.pt,lesvirus.fr,senzavirus.it,dieviren.de,viruset.no,usunwirusa.pl,zondervirus.nl,bedynet.ru,virusai.lt,virusi.bg,viirused.ee,udenvirus.dk##th:has-text(/^Detection$/) + td
+2-spyware.com,novirus.uk,faravirus.ro,uirusu.jp,virusi.hr,wubingdu.cn,avirus.hu,ioys.gr,odstranitvirus.cz,tanpavirus.web.id,utanvirus.se,virukset.fi,losvirus.es,virusler.info.tr,semvirus.pt,lesvirus.fr,senzavirus.it,dieviren.de,viruset.no,usunwirusa.pl,zondervirus.nl,bedynet.ru,virusai.lt,virusi.bg,viirused.ee,udenvirus.dk##.js-download_button_offer
+2-spyware.com,novirus.uk,faravirus.ro,uirusu.jp,virusi.hr,wubingdu.cn,avirus.hu,ioys.gr,odstranitvirus.cz,tanpavirus.web.id,utanvirus.se,virukset.fi,losvirus.es,virusler.info.tr,semvirus.pt,lesvirus.fr,senzavirus.it,dieviren.de,viruset.no,usunwirusa.pl,zondervirus.nl,bedynet.ru,virusai.lt,virusi.bg,viirused.ee,udenvirus.dk##.primary_download
+2-spyware.com,novirus.uk,faravirus.ro,uirusu.jp,virusi.hr,wubingdu.cn,avirus.hu,ioys.gr,odstranitvirus.cz,tanpavirus.web.id,utanvirus.se,virukset.fi,losvirus.es,virusler.info.tr,semvirus.pt,lesvirus.fr,senzavirus.it,dieviren.de,viruset.no,usunwirusa.pl,zondervirus.nl,bedynet.ru,virusai.lt,virusi.bg,viirused.ee,udenvirus.dk##.automatic_removal_list
+2-spyware.com,novirus.uk,faravirus.ro,uirusu.jp,virusi.hr,wubingdu.cn,avirus.hu,ioys.gr,odstranitvirus.cz,tanpavirus.web.id,utanvirus.se,virukset.fi,losvirus.es,virusler.info.tr,semvirus.pt,lesvirus.fr,senzavirus.it,dieviren.de,viruset.no,usunwirusa.pl,zondervirus.nl,bedynet.ru,virusai.lt,virusi.bg,viirused.ee,udenvirus.dk##.quick-download-button-placeholder
+2-spyware.com,novirus.uk,faravirus.ro,uirusu.jp,virusi.hr,wubingdu.cn,avirus.hu,ioys.gr,odstranitvirus.cz,tanpavirus.web.id,utanvirus.se,virukset.fi,losvirus.es,virusler.info.tr,semvirus.pt,lesvirus.fr,senzavirus.it,dieviren.de,viruset.no,usunwirusa.pl,zondervirus.nl,bedynet.ru,virusai.lt,virusi.bg,viirused.ee,udenvirus.dk##.nfc-bottom-right:has-text(Reimage)
+2-spyware.com,novirus.uk,faravirus.ro,uirusu.jp,virusi.hr,wubingdu.cn,avirus.hu,ioys.gr,odstranitvirus.cz,tanpavirus.web.id,utanvirus.se,virukset.fi,losvirus.es,virusler.info.tr,semvirus.pt,lesvirus.fr,senzavirus.it,dieviren.de,viruset.no,usunwirusa.pl,zondervirus.nl,bedynet.ru,virusai.lt,virusi.bg,viirused.ee,udenvirus.dk##a:has-text(Reimage)
+2-spyware.com,novirus.uk,faravirus.ro,uirusu.jp,virusi.hr,wubingdu.cn,avirus.hu,ioys.gr,odstranitvirus.cz,tanpavirus.web.id,utanvirus.se,virukset.fi,losvirus.es,virusler.info.tr,semvirus.pt,lesvirus.fr,senzavirus.it,dieviren.de,viruset.no,usunwirusa.pl,zondervirus.nl,bedynet.ru,virusai.lt,virusi.bg,viirused.ee,udenvirus.dk##.quick-download-button-text
+! https://windowsloop.com/network-adapters-shortcut/
+||reimageplus.com^$doc
+
+! Lapsed domains that once hosted adblock lists, several of whom are now used for bad purposes
+! https://github.com/uBlockOrigin/uAssets/issues/5307
+||gjtech.net^$doc
+||securemecca.com^$doc
+
+! Badware
+||kuhoot.it^$doc
+
+! Fake cloudflare screen
+! https://github.com/uBlockOrigin/uAssets/issues/5305#issuecomment-484754393
+! https://github.com/uBlockOrigin/uAssets/issues/5489#issuecomment-488207423
+||gmboxx.com^
+||mr.media-bucket.com^
+
+! https://github.com/NanoMeow/QuickReports/issues/965#issuecomment-485274387
+||pl.allsports4free.club^
+||pl.allsports4u.club^
+
+! https://github.com/uBlockOrigin/uAssets/issues/5409
+||discount.s3blog.org^
+||s3blog.org^$3p
+||dataprovider.biz^
+
+! https://github.com/uBlockOrigin/uAssets/issues/5442
+||tplinkextender.net^
+
+! https://github.com/uBlockOrigin/uAssets/issues/4862#issuecomment-486941006
+||upload4earn.org^$doc
+
+! https://github.com/uBlockOrigin/uAssets/issues/5805
+||newsfile.club^$doc
+||clickpush.biz^$doc
+
+! https://forums.lanik.us/viewtopic.php?f=62&p=149407#p149406
+||buzzadnetwork.com^$all
+
+! https://arstechnica.com/information-technology/2019/08/google-play-app-with-100-million-downloads-executed-secret-payloads/
+||abcdserver.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/6381
+||americanoverlook.com^
+||anonnews.co^
+||embols.com^
+||endingthefed.com^
+||goneleft.com^
+||nephef.com^
+||newsbreakshere.com^
+||rilenews.com^
+||thecontroversialfiles.net^
+||voxtribune.com^
+
+! https://blog.sucuri.net/2018/08/massive-wordpress-redirect-campaign-targets-vulnerable-tagdiv-themes-and-ultimate-member-plugins.html
+||checkisreal.com^
+||mysecurify.com^
+
+! https://www.wordfence.com/blog/2019/08/malicious-wordpress-redirect-campaign-attacking-several-plugins/
+||developsincelock.com^
+||gabriellalovecats.com^
+||jackielovedogs.com^
+||tomorrowwillbehotmaybe.com^
+||wiilberedmodels.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/6452
+||apple.com-*.live^
+
+! some badware testing around
+||cobalten.com^$all
+
+! redirect from egy best
+||stremanp.com^$all
+
+! redirects
+||nextyourcontent.com^$all
+||geniusdexchange.com^$all
+||securecloud-smart.com^$all
+||doctopdftech.com^$all
+||best2019-games-web4.com^$all
+||track-enable.com^$all
+||searchdimension.com^$all
+||beqbox.com^
+||bblck.me^$all
+||glinks.co^$all
+/?track=*&key=$all
+||getsecuritysuite.com^$all
+
+! SpyHunter links
+! Ref: https://blog.malwarebytes.com/detections/pup-optional-spyhunter/
+! https://howtoremove.guide/redirector-gvt1-com-virus-malware-chrome-removal/
+howtoremove.guide##div[style^="border:2px"]
+howtoremove.guide##.entry-content > div:has-text(Special Offer)
+! https://howtoremove.guide/redirector-gvt1-com-virus-malware-chrome-removal/ (German version only)
+howtoremove.guide###solution_v2_de
+howtoremove.guide###alt_content_main_div > p:has-text(SpyHunter)
+howtoremove.guide###gray_de
+! https://www.2-spyware.com/remove-redirector-gvt1-com.html
+2-spyware.com,novirus.uk,faravirus.ro,uirusu.jp,virusi.hr,wubingdu.cn,avirus.hu,ioys.gr,odstranitvirus.cz,tanpavirus.web.id,utanvirus.se,virukset.fi,losvirus.es,virusler.info.tr,semvirus.pt,lesvirus.fr,senzavirus.it,dieviren.de,viruset.no,usunwirusa.pl,zondervirus.nl,bedynet.ru,virusai.lt,virusi.bg,viirused.ee,udenvirus.dk##.automatic_removal_list_w > .ar_block_description
+2-spyware.com,novirus.uk,faravirus.ro,uirusu.jp,virusi.hr,wubingdu.cn,avirus.hu,ioys.gr,odstranitvirus.cz,tanpavirus.web.id,utanvirus.se,virukset.fi,losvirus.es,virusler.info.tr,semvirus.pt,lesvirus.fr,senzavirus.it,dieviren.de,viruset.no,usunwirusa.pl,zondervirus.nl,bedynet.ru,virusai.lt,virusi.bg,viirused.ee,udenvirus.dk##a:has-text(SpyHunter)
+
+! https://github.com/uBlockOrigin/uAssets/pull/6757
+||tncrun.net^$all
+
+! https://github.com/NanoMeow/QuickReports/issues/2772
+||d3125zvx5yi5sj.cloudfront.net^$all
+
+! thepiratebay3 .com bad
+thepiratebay3.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/6544#issuecomment-586763083
+||procdnvids.net^
+||prostream.to^
+
+! https://github.com/NanoMeow/QuickReports/issues/2577
+! https://www.reddit.com/r/uBlockOrigin/comments/12nrzng/
+||mybestclick.net^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/3205
+||verified-extensions.com^
+
+! https://github.com/NanoMeow/QuickReports/issues/3299
+! https://github.com/NanoMeow/QuickReports/issues/3300
+||smsiak.pl^$doc
+||smsy24.pl^$doc
+
+! redirecting domains / fraud
+||video-adblock.com^$all
+||vid-adblocker.com^$all
+||multiadblock.com^$all
+||popsads.link^$all
+||adverdirect.com^$all
+||euphe-gun.com^$all
+||bestwinexperience.com^$all
+||traffic-go.com^$all
+||bainushe.com^$all
+||streamssitesearch.com^$all
+||trackertrak.com^$all
+||newsinform.net^$all
+||bingstyle.com^$all
+||redirekted.com^$all
+||ptookaih.net^$all
+||blockskipad.com^$all
+||adpopblocker.com^$all
+||teenyreligious.com^$all
+||redirectsstm.click^$all
+||trafficjunction.com^$all
+||arclk.net^$all
+||clkepd.com^$all
+||btnativenav.com^$all
+||1111sale.us^$all
+||omgtnc.com^$all
+||bector-blotance.xyz^$all
+||bestoffer21.info^$all
+||n06.biz^$all
+||um-bredirect.com^$all
+||terlaby.com^$all
+||aff2021.com^$all
+||claspedtwelve.com^$all
+||glbltraffic.com^$all
+||0redirc.com^$all
+||inspirationhistorical.com^$all
+||maroohost.online^$all
+||rollmeout.xyz^$all
+||rouonixon.com^$all
+||amigosdetuciudad.com^$all
+||bb-delivery.icu^$all
+||incorphishor.com^$all
+||praterage-colled.com^$all
+||womeniovers.net^$all
+||fictiongroin.com^$all
+||goaffmy.com^$all
+||pwrtds.com^$all
+||trackbyfast.com^$all
+||trfrc.com^$all
+||1ts11.top^$all
+||dating.hdxvideos.ru^$all
+||cngcpy.com^$all
+||elevisions.biz^$all
+||eneverals.biz^$all
+||harzfriends.de^$all
+||moviesboys.com/*.shtml$doc
+||name0fbestway.com^$all
+||netund.com^$all
+||sex-is-here.com/*.shtml$doc
+||sexall.net/*.shtml$doc
+||upshroomishtor.com^$all
+||urtyert.com^$all
+||quellaplentyresolute.com^$all
+||hsrvu.com^$all
+||adtr1.com^$all
+||axdsz.pro^$all
+||datingapp.live^$all
+||retargetcore.com^$all
+.com/c/*?s1=$doc,domain=com
+.net/c/*?s1=$doc,domain=net
+/tds/ae?tds_campaign=$doc
+||adating.link^$all
+||arthyredir.com^$all
+||aslnk.link^$all
+||benaughty.com^$all
+||searchdatestoday.com^$all
+||bnewsblite.me^$all
+||ckre.net^$all
+||doprinplupr.com^$all
+||gotohouse2.cc^$all
+||letmessagenow.com^$all
+||x-soft.club^$all
+||apilond.com^$all
+||tracklyfast.com^$all
+||atzekromchan.com^$all
+||pupok.link^$all
+||ntvpevnts.com^$all
+||aditserve.com^$all
+||onclickclear.com^$all
+/bdv_rd.dbm?ownid=$doc
+?bid=0.*&search_referrer_domain=$doc
+||btpnav.com^$all
+||fecebook.com^$all
+||festinus.xyz^$all
+||secureleadsforever.com^$all
+/apop/redirect/zone/*$doc,popup
+||belbenback.live^$all
+/?pl=*&sm=$doc
+
+! hacked and abused for redirect
+tech4yougadgets.com##^meta[http-equiv="refresh"]
+tech4yougadgets.com##^script[src^="data:text/javascript;base64,"]
+tech4yougadgets.com##+js(aopr, Notification)
+||aleks-avto-rnd.ru^$all
+||clicks.affstrack.com^
+||weledying-jessed.com^$all
+?zoneid=*&cost=0.$doc
+/zcredirect?visitid=*&iframeDetected=false|$doc
+*/zcvisitor/*?campaignid$doc
+||tweitter.com^$all
+||mqdownload.com^$all
+/pop-click?sid=*&data=$doc
+/click?a=*&aff_click_id=$doc
+||trwl1.com^$all
+||clixwells.com^$all
+||wxhiojortldjyegtkx.bid^$all
+||pushmeup.art^$all
+||pushub.net^$all
+||adserver*/?sdomain=$doc,popup
+||date4sex.pro^$all
+/click.php?data=$doc
+&adspot_id=*&cost=0.$doc
+||s4f.net^$all
+||onlyfreetoonporn.com^$all
+||tilda.gb.net^$all
+||cleardexchange.com^$all
+||duellosheliced.com^$all
+||mokedirect.xyz^$all
+||srvpcn.com^$all
+||lone1y.com^$all
+||tr1net.com^$all
+||usdownload.widost.com^$all
+||cpttrcklnk.com^$all
+||neighborhoodsluts.com^$all
+.xyz/video.php?=*&dating_xyz_0&&0$frame
+||0redird.com^$all
+||turnhub.net^$all
+/click?pid=*&sub1=$doc
+! fraud => https://forums.lanik.us/viewtopic.php?f=90&t=45586
+||411medias.com^$all
+||zedplays.com^$all
+||special-update.online^$all
+||success-news.net^$all
+||aloha-news.net^$all
+||bookgr8.com^$all
+||internetspeedtracker.com^$all
+||system-update-new-2021.com^$all
+||m7c4d5r7.stackpathcdn.com^$all
+||worldactualstories.com^$all
+||allhugenewz.com^$all
+||download-app.net^$all
+||lib2.biz^$all
+||myactualblog.com^$all
+||ne03.biz^$all
+||pu4.biz^$all
+||privatesinglesmeet.com^$all
+||readytosinglesmeet.com^$all
+||cleanphonefast.com^$all
+||fastphonebooster.com^$all
+||reimageplusminus.me^$all
+||flashymass.com^$all
+||luckywinner-web1.com^$all
+||theshoparound.com^$all
+||loverfuck.com^$all
+||profi-para.com^$all
+||onlineplus.click^$all
+||jashautchord.com^$all
+||trafempire.com^$all
+||goads.pro^$all
+||iamnaughty.com^$all
+||iwantu.com^$all
+||myhotdates.com^$all
+||onenightfriend.com^$doc
+||buddygays.com^$all
+||localsnapsext.com^$all
+||heartmedia.biz^$all
+/click.php?key=*cost=$doc,popup
+||totaltopposts.com^$all
+||djin.site^$all
+||ourhypewords.com^$all
+||antivirus.landerhd.com^$all
+||to6s.biz^$all
+||sweetgirls.date^$all
+||fast-travel.org^$all
+||typiccor.com^$all
+||wholedailyfeed.com^$all
+/?clck=*&sid=$doc
+||love7date.info^$all
+||bestsecretflirt.com^$all
+||toplov.com^$all
+||gegenhartz.de^$all
+||marootrack.co^$all
+||besty-deals.com^$all
+&dci=*&tds_campaign=$doc
+||eudoxia-myr.com^$all
+||revpu.sh^$all
+||listen-heres.com^$all
+/smartlink/?a=$doc
+||date.sexpartnercommunity.com/landing/*$doc
+/ll/click.php?key=$doc
+/?ip=*&uclickhash=$doc
+||cheaterboss.com^$all
+||wholewowblog.com^$all
+||cumshots.com^$all
+||multiflings.com^$all
+||real-women-online.com^$all
+/?camp=*&cost=0.$doc
+||monglitch.monster^$all
+||d13nu0oomnx5ti.cloudfront.net^
+||quickdates1.com^$all
+||getmackeepersoftpro.xyz^$all
+||familysimulator.$all
+||instaflrt.com^$all
+||singlesgetmatched.com^$all
+||dougale.com^$all
+||adblockfast.com^$all
+||bookofsex.com^$all
+||mydirtytinders.com^$all
+||fuckmore.com^$all
+||dotchaudou.com^$all
+||greengoplatform.com^$all
+||transportgoline.com^$all
+||gobacktothefuture.biz^$all
+||cofounderspecials.com^$all
+||weatherplllatform.com^$all
+! https://github.com/AdguardTeam/AdguardFilters/issues/114312
+||mauptaub.com^$all
+||see-what-is-trending.com^$all
+||owlfolk.com^$all
+||onlyfreelesbianporn.com^$all
+||family-simulators.com^$all
+||your-dates-tonight.com^$all
+||familysimulatorgame.com^$all
+||trackingboost.com^$all
+||update-protection.com^$all
+||asiaxdate.com^$all
+||hotsimulator.com^$all
+/aff.php?*&data2=$doc
+/tds/ae?*&clickid=$doc
+/?clickid=*&ptracker=$doc
+||mous9.biz^$all
+||ourcommonnews.com^$all
+||vehicle-insurance-quote.com^$all
+^lpkey=*&uclickhash=$doc
+||systemupdatesy.life^$all
+||d135aysof2oufc.cloudfront.net^$all
+/?banner=*&phone=$doc
+||advidates.com^$all
+||dvjqvdfujjvvkuyvhjqdvbjcmioljbhjmijq.s3.ap-northeast-1.amazonaws.com^$all
+/2/index.html#|$doc
+/?clickid=*&cost=0.$doc
+/index.php?key=*&t1=$doc
+||cmprotraf.club^$all
+||prelandappslab.com^$all
+/registration?theme=*&a_aid=$doc
+.top/prize/*.php?c=$doc
+||di02.biz^$all
+||adultonlineplay.com^$all
+||fastandslut.com^$all
+&click_price=0.*&click_id=$doc
+?brand=*&model=*&lptoken=$doc
+?brand=*&fingerprint_=$doc
+||familialsimulation.com^$all
+/\/(?:[0-9a-z]{7,25}-){9,13}[0-9a-z]{10,15}\/(?:[0-9a-z]+\/)+index\.php/$doc
+||imilroshoors.com^$all
+||trackhere.pl^$all
+||datingformeeting.com^$all
+||serving-passthrough.com^$all
+/_dating\d\/index\.html\?aref=/$doc
+||familysimulators.$all
+^apb=*&ata=mobilemdots^$doc
+||uoutube.com^$all
+! kkomj.ofchildr.buzz
+||ofchildr.buzz^$all
+||0redire.com^$all
+||celxkpdir.com^$all
+||xonedart-2.live^$all
+^cep=*&zoneid=$doc
+^cep=*&s1=$doc
+.top/robot4*&a=$doc,domain=top
+||androidnotice.com^$all
+||wholenicefeed.com^$all
+||updaterlife.com^$all
+^s=*&ssk=*&svar=*&z=$doc
+/?cid=*&dom=$doc
+^s1=*&click_id=$doc
+||totalrecaptcha.top^$all
+/?type=*&button=2&clickid=$doc
+||valrogrowth.com^$all
+^device_model=*&p1=https$doc
+||5.61.55.143^
+://0.*.biz/?p=$doc
+.biz/sw/w1s.js|$script,3p
+||mo11.biz^$all
+/click.php?key=*&cpc=0&$doc
+||37.1.213.100^
+/?p=*&sub1=$doc
+.xyz/ddos/1tn.html?clickid=$doc
+://e.*.top/video/?c=$doc
+/?srv_id=*#$doc
+||fearlessfont.info^$all
+||love88.club^$all
+.html?cep=*&cost=0.$doc
+/1/index.html?p1=https%$doc
+||familysexsimulators.io^$all
+||23.109.87.170^
+.live/1*.html?cep=$doc
+||edfringe.com/*.php$all
+||jmdinfotechs.com^$all
+||grakorte.com^$all
+/click.php?key=*&zone_id=$doc
+||dearosaka.com^$all
+/domredirect?visitid=$doc
+||smart-redirecting.com^
+?adTagId=*&extclickid=$doc
+||namebawancitel.gq^
+/antibot/ab.php$xhr,1p
+||androiddetection.com^$all
+||elooksjustli.one^
+||ikouthaupi.com^$all
+||keepsclean.com^$all
+||magictrack1.com^
+||my-cleaner.info^$all
+||news-zolehe.com^$all
+||ready-for-download.com^
+||rcuacroossonec.com.ua^
+||taitlastwebegan.com^$all
+||thbstvd.com^
+||vpn-connection-security.com^$all
+||yourpcnotification.com^$all
+||ztzguv.com^$all
+/SRC/SRC.php?c=$doc
+&tb=redirect&allb=redirect&ob=redirect&href=$doc
+||belittlepads.com^$all
+||go2click.online^$all
+||datingmeetnet.com^$all
+||bndl-trp.com^$all
+||clean-2-clean.club^$all
+||top-official-app.com^$all
+||saworbpox.com^$all
+||pornonenight.com^$all
+||youfindadate.top^$all
+?z=*&ymid=$doc
+||xypthe.com^
+||besluor.com^
+/jr.php?gz=$doc
+/g?visitorid=*&extra_data2=|$doc
+||fehbsu.com^$all
+.com/play-2?h=*=eyJ&si1=$doc
+||cacto.cyou^
+/\.com\/proc\.php\?[0-9a-f]{40}$/$doc
+||postyourlife.com^$all
+||rplnd60.com^$all
+||djpjwf.com^$all
+||iwinprize.xyz^$all
+||shosril.com^
+||meetamate.site^
+||niceelitdating.top^$all
+||dm09.biz^$all
+/click.php?key=*&dj_placement=$doc
+||floppyredirect.click^$all
+&srv_id=terra#$doc
+||ultimate-clean.club^$all
+||pcconelove.xyz^$all
+||premiumapps.cfd^
+||funuf.fun^$all
+||video.redwap.cam^$all
+||play.freeplayvideo.com^
+||cractica.xyz^$doc
+||beyourxfriend.com^$all
+||bybygnom.com^$all
+||paderrer.com^$all
+||best-site-online.com^
+||haffnetworkmm.com^$all
+/jump/next.php?r=$doc
+||softronline.click^
+/?clickid=*&t2=.$doc
+||skipalos.xyz^$all
+||makenoads.com^$all
+||dateclique.life^
+||family-simulators.io^$doc
+||familyfornicate.com^$doc
+||speedtestnow.site^$all
+||programprotacol0.com^$all
+||lovedatee.net^$all
+/dating_lp?keyword=$doc
+.space/bonus/*.php?c=$doc
+||club-gagnant.online^$all
+||srengin.com^$all
+/common-player-arrow/index.html?var=*&zoneid=$doc
+/common-player/index.html?var=*&zoneid=$doc
+/not-a-robot/index.html?$doc
+||dating.service2u.shop^$all
+||amazonaws.com/www.yournewlocalflingfinder7.com/$all
+||dirtyfree.games^$all
+||familycheaters.net^$all
+||register.blissfulltimes.com^$doc
+.com/pl?o=*&subid=$doc
+||geheimerseitensprung.com^$all
+||matches4you.info^$all
+||reifenachbarn.com^$all
+/zclkredirect?visitid=$doc
+||done-install.com^$all
+||eboka.vip^$all
+||sanubix.vip^$all
+||magniffic-strean.com^$all
+||felicitakam.ru^$all
+||livestreamchatme.com^$all
+||livechatlove.store^$all
+||naughtymets.com^$all
+||linkprotecttrck.com^$all
+||www3secure.com^$all
+||midnighthookup.today^$all
+||padsthai.com^$all
+||doppelsbangers.com^$all
+||gometabank.com^$all
+||dirtyflirt9.com^$all
+||bestvideo.cloud^$all
+||bmtracks.com^$all
+||doublebangers.com^$all
+||waytau.com^$all
+||laddler.site^$all
+||bintrr.top^$all
+||tricksygirlw.com^$all
+||bustymeets.com^$all
+||aht42trk.com^$all
+||jasnathvibes.com^$all
+||falltes.site^$all
+||lewdmilfh22y.com^$all
+/mc-test/*/index.php?cid=$doc
+||attractivecutiewcx.com^$all
+||onecupcoffeereviews.com^$all
+||skollett.site^$all
+||browserneedupdate.com^
+||captchaallow.site^
+||click-allow.top^
+||girlwaityou.com^$all
+||feelfllirty.com^$all
+||spiendidates.com^$all
+||alone-here.online^$all
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/68588
+! https://github.com/uBlockOrigin/uAssets/issues/8869
+! https://github.com/AdguardTeam/AdguardFilters/issues/129112
+/^https:\/\/[0-9a-z]{3,}\.[-a-z]{10,}\.(?:li[fv]e|top|xyz)\/[a-z]{8}\/\?utm_campaign=\w{40,}/$doc,match-case,domain=life|live|top|xyz
+/^https:\/\/[a-z]{2,3}\d\.biz\/go\/[0-9a-z]{15,18}$/$doc,domain=biz
+! e.g. https://to3s.biz/?p=gi4tgnjwgu5gi3bpgy2tmmy
+/^https:\/\/to\ds\.biz\/\?p=/$doc,domain=biz
+! fake dating/prize/video sites
+/^https?:\/\/[0-9a-z]*\.?[-0-9a-z]{4,}\.[a-z]{2,11}\/(?:[0-9a-z]{6,8}\/)?\/?(?:article\d{4}\.doc)?\?u=[0-9a-z]{7}&o=[0-9a-z]{7}/$doc,frame,match-case
+! https://github.com/uBlockOrigin/uAssets/commit/df17084b4815e87d420e8adf19bf4959e828e6e5#commitcomment-66510549
+/^https?:\/\/[0-9a-z]*\.?[-0-9a-z]{4,}\.[a-z]{2,11}\/(?:[0-9a-z]{6,8}\/)?\/?(?:article\d{4}\.doc)?\?o=[0-9a-z]{7}&u=[0-9a-z]{7}/$doc,frame,match-case
+.live/web/?sid=t*~$doc
+! push notification scam
+/^https:\/\/(?:www\d\.)?[-a-z]{6,}\.(?:com|info|net|org)\/(?=[-_a-zA-Z]{0,42}\d)(?=[-_0-9a-z]{0,42}[A-Z])[-_0-9a-zA-Z]{43}\/\?cid=[-_0-9a-zA-Z]{10,36}(?:&qs\d=\S+)?&(?:s|pub)id=[-_0-9a-z{}]{1,32}(?:&s=0\.\d+)?(?:#\S+)?$/$doc,match-case,domain=com|info|net|org
+/^https:\/\/(?:www\d\.)?[-a-z]{6,}\.(?:com|info|net|org)\/(?=[-_a-zA-Z]{0,42}\d)(?=[-_0-9a-z]{0,42}[A-Z])[-_0-9a-zA-Z]{43}\/\?(?:pub|s)id=[-_0-9a-z{}]{1,32}(?:&qs\d=\S+)?&cid=[-_0-9a-zA-Z]{10,36}(?:&s=0\.\d+)?(?:#\S+)?$/$doc,match-case,domain=com|info|net|org
+
+! https://github.com/uBlockOrigin/uAssets/issues/8378
+||ogtrk.net^
+
+! https://www.hybrid-analysis.com/sample/3ad8f4dc6a021e82d25247c266d89d20d981f7187413405f0b2e35d984bd60cb
+||secureconv-dl.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/8466
+||91.241.60.117^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/8630
+||mfilecloud.com^$all
+||xsharenode.com^$all
+||yuppdownload.com^$doc
+||drop-cloud.com^$all
+||drop-cloud.org^$all
+||sharpfiledownload.com^$all
+||mega-share.pro^$doc
+||soft-updt.com^$doc
+||linksoft.site^$all
+||soft-file-free.com^$doc
+||expertstudiopro.com^$doc
+||link-ii.info^$all
+||expertprosoft.com^$all
+||thepcworld.net^$all
+||lorealis.vip^$doc
+||one-click.cc^$all
+||descarga.pw^$doc
+||top-cheats.com^$all
+||extsoft.app^$all
+||extra-software.com^$doc
+||mega-gratis.com^$doc
+||pc-gratis.com^$doc
+||progamerhack.com^$doc
+||winterseyegaming.com^$doc
+||soft-lab.pw^$doc
+||trumpcheat.com^$doc
+||cheats.ink^$doc
+||www.youtube.com/@Download-Links/$doc
+||www.youtube.com/@Download-lin/$doc
+||www.youtube.com/@download_here/$doc
+||www.youtube.com/@download-midnight/$doc
+||allsft.info^$doc
+||allsft.pro^$doc
+||allsft.shop^$doc
+||cheat-world.site^$doc
+||clc-link.me^$all
+||soft-portal.me^$doc
+||nicesoftware.site^$all
+||upload.advgroup.ru/4Fb01xn1$all
+||mediafire.com/folder/bhzkt4wjxzkmr/$doc
+||mediafire.com/folder/gbhbhm73350j9/$doc
+||mediafire.com/folder/3od5jmmfc87ie/$doc
+||mediafire.com/folder/92w8lt2acebtt/$doc
+||gamefree.vip^$doc
+||cheater-pro.com^$doc
+||liwishacks.com^$doc
+! https://www.virustotal.com/gui/file/a810ae0441a75d4b5ae36e7094343b0ef3661681dfe24cbf8c2131b1dfac0605?nocache=1
+! https://github.com/uBlockOrigin/uAssets/issues/8630#issuecomment-810957825
+||tophacks.pro^$doc
+! https://www.virustotal.com/gui/file/ef44c876d70663b196cda34095c14b1342eb4f566cb032d7aeddf9e94017e66b?nocache=1
+||lavacheat.com^$doc
+! http://193.233.132.47/allsoft
+||193.233.132.47^$all
+||193.233.132.86^$all
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/69036
+.systems/signup?ad_domain=$doc,popup
+
+! fake software updaters /redirections
+||1perpersqe1.com^$all
+||atnpx.com^
+||best-winplace.life^$all
+||checkup08.biz^
+||illuminatelocks.com^
+||mfroute.com^
+||track-149uew.link^
+||update-phone-today.com^
+||webpushcloud.top^
+||workerz1.com^
+||xpayperinstx2.com^
+||zvideo-live.com^
+/index.php?uid=*&code=ad^$doc
+||koitushinterneinnehmen.s3.eu-central-1.amazonaws.com^$all
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/84632
+! https://github.com/AdguardTeam/AdguardFilters/issues/84633
+||my-hookup-clubs1.com^$all
+! https://github.com/AdguardTeam/AdguardFilters/issues/84634
+! https://github.com/AdguardTeam/AdguardFilters/issues/84639
+||localsexfinderxxx4.com^$all
+! https://github.com/AdguardTeam/AdguardFilters/issues/84638
+||sinder8.com^$all
+! https://github.com/AdguardTeam/AdguardFilters/issues/84640
+||bigosext69.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/9344
+||captcharesolving-universe.com^$all
+
+! scam
+||trfcbooost.com^$all
+||turboadblocker.com^$all
+||mysearchflow.com^$all
+||youtuba.com^$all
+||polyhymnia-mar.com^$all
+
+! Typosquatting: redirects to scam sites
+! https://www.reddit.com/r/uBlockOrigin/comments/12ok014/
+! https://www.reddit.com/r/uBlockOrigin/comments/12nrio5/
+! https://www.reddit.com/r/uBlockOrigin/comments/1392c8f/
+||bestbut.com^$all
+||girhub.com^$all
+||gmkail.com^$all
+||goglle.com^$all
+||linkefdin.com^
+||twitterr.com^$all
+||yautube.com^$all
+||yourube.com^$all
+||youtubee.com^$all
+||youtunbe.com^$all
+||youutube.com^$all
+||youvetube.com^$all
+! https://groups.google.com/a/mozilla.org/g/dev-security-policy/c/oxX69KFvsm4/m/WJXUELicBQAJ
+! "looks like typo squatting"
+||wanderlust.rocks^$all
+||harmlessmessage.com^$all
+||hushemail.net^$all
+||hushmailservice.com^$all
+||lavaboom.net^$all
+||privacyharbor.net^$all
+||privacyharbors.com^$all
+||prontonmailpro.com^$all
+||protonmails.com^$all
+||protonmails.net^$all
+||safemessagesystems.com^$all
+||silencemail.com^$all
+||tutamail.net^$all
+||tutanoto.com^$all
+||messagesafe.net^$all
+||msgsafe.net^$all
+||best4fuck.com^$all
+
+! https://www.huorong.cn/info/1531309921141.html
+||kuaizip.com^$all
+
+! https://www.huorong.cn/info/1618397948649.html
+! ||zhuangjizhuli.com^$all
+! ||zhuangjizhuli.net^$all
+
+! https://www.huorong.cn/info/1627034201698.html
+! https://bbs.kafan.cn/thread-2217785-1-1.html
+||win.zjwhr.top^$all
+
+! https://github.com/uBlockOrigin/uAssets/pull/9656
+||geekotg.com^$all
+! https://www.huorong.cn/info/1526627586130.html
+||xiaobaixitong.com^$all
+! https://www.huorong.cn/info/1577158839403.html
+||daque.cn^$all
+! https://www.huorong.cn/info/1598957552515.html
+||dabaicai.com^$all
+
+! https://www.huorong.cn/info/1617368984641.html
+||qqfzn.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/9785
+||lubuntu.net^$doc
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/92466
+/^https:\/\/serch\d{2}\.biz\/\?p=/$doc,domain=biz
+
+! https://github.com/uBlockOrigin/uAssets/issues/4014 and https://github.com/uBlockOrigin/uAssets/issues/9840
+! ||driverfix.com^$doc
+
+! https://github.com/uBlockOrigin/uAssets/issues/9848
+||gghacks.com^$all
+||rewardsgiantusa.com^$doc
+||promotionsonlineusa.com^$doc
+||displayoptoffers.com^$doc
+||sweepstakesalerts.com^$doc
+||qualityhealth.com^$doc
+||consumerproductsusa.com^$doc
+||get-cracked.com^$all
+||tinyurl.com/gp84uz2$doc
+||mediafiire.com^$doc
+||onlinepromotionsusa.com^$doc
+
+! https://github.com/uBlockOrigin/uAssets/issues/9933
+||greenadblocker.com^$doc
+
+! https://github.com/uBlockOrigin/uAssets/pull/10017
+||flash.cn^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/10075
+||superdatenow3.com^$doc
+
+! https://github.com/uBlockOrigin/uAssets/issues/10116
+||hentai-tube.me^$doc
+
+! https://github.com/uBlockOrigin/uAssets/commit/5832dfebb4021c639b90c2973946ff7638c2290f#commitcomment-57642161
+||foxmods.xyz^$doc
+
+! Phishing/Malware/Scams
+! https://www.virustotal.com/gui/collection/cf2c760f511d9331e578461fed09717054ec23413a93834a83371634e5aad73c
+||octopus-warriors.com^$all
+||futuretesla.net^$all
+||full-nitro.com^$all
+
+! phishing /malicious
+||gesas.it^$doc
+||techinnsrl.com^$doc
+||studiogiamberardino.it^$doc
+||eniedu.com^$doc
+||gamletaarnhuset.no^$doc
+||possessedcrackinghart.com^$all
+||adblock-pro-download.com^$all
+||reepratic.com^$all
+||5vcjzwb1tsnd82g.caflu87p1d.ru^$all
+
+
+! phishing /scam /malware
+! https://www.virustotal.com/gui/collection/4b1e307754c94e87e17a0c14102b873f17c5d2001f4afa2e58c3a6b98f391710
+||cs2-twitchs.com^$all
+||dogehype.com^$all
+||cosmicdrift.co^$all
+||deltaproject.dev^$all
+||rblx.land^$all
+||csnegotiable.com^$all
+||olympofreptiles.io^$all
+||connect-csgo.com^$all
+||events-csgo.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/10181
+||nbryb.com^$all
+||onemacusa.com^$all
+||realnetnews.com^$all
+||rogueleader.org^$all
+||suggestive.com/deals/?cid=$doc
+
+! https://github.com/uBlockOrigin/uAssets/issues/10442
+||discordap.$all
+||discord*.gift^$all,domain=~discord.gift
+||discord*.gifts^$all,domain=~discord.gifts
+||discord-give.$all
+||discord-nitro.$all
+||discordgift.$all,domain=~discordgift.site
+||dlscord*.$all
+||dlscrod*.$all
+||freediscordnitro.$all
+||updatemobilee.com^$all
+||supreme-ad-blocker.info^$all
+||buyadvupfor24.com^$all
+||erdeallyighab.com^$all
+||allprizesforme.com^$all
+
+! https://github.com/DandelionSprout/adfilt/issues/267
+||tekhacks.net^$all
+
+! https://github.com/uBlockOrigin/uAssets/pull/10503
+||freedownloadfiles.org^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/10536
+||tw-goldenwinner-57.com^$doc
+
+! https://github.com/iam-py-test/investigations/blob/main/2021/11/25/1.md
+! https://github.com/uBlockOrigin/uAssets/pull/10599
+||fasterfiles.net^$all
+||yunosurveys.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/pull/10774
+! https://bbs.kafan.cn/thread-2222478-1-1.html
+||a1475.com^$all
+! https://bbs.kafan.cn/thread-2220230-1-1.html
+||ts-group.com^$all
+! https://bbs.kafan.cn/thread-2221500-1-1.html
+||88btbtt.com^$all
+||musmentportal.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/pull/10997
+! fake domain
+||jinshanduba.org.cn^$all
+! https://bbs.kafan.cn/thread-2170747-1-1.html – malicious script
+||phpstat.cntcm.com.cn/phpstat/count/abceffgh/abceffgh.js^$script
+
+! https://github.com/uBlockOrigin/uAssets/pull/11041
+||cdn.discordapp.com/attachments/916391647955279943/*^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/11157
+||sideload.net^$doc
+||stc.tools^$doc
+||stcverify.com^$doc
+||1980s.click^$doc
+
+! https://github.com/uBlockOrigin/uAssets/issues/11310
+! https://github.com/uBlockOrigin/uAssets/issues/14009
+goharpc.com,pccrackbox.com,cracklabel.com,keystool.com,pcwarezbox.com,10crack.com,crackproductkey.com,profullversion.com,crackswall.com,crackpcsoft.net,proappcrack.com,crackwinz.com,genuineactivator.com,topcracked.com,fullcrackedpc.com,rootcracks.org,idmfullcrack.info,thecrackbox.com,idmpatched.com,autocracking.com,productkeyfree.org,patchcracks.com,cracksole.com,allsoftwarekeys.com,softwar2crack.com,procracks.net,productkeyforfree.com,bypassapp.com,zgamespc.com,newproductkey.com,serialkeysfree.org,wazusoft.com,getpcsofts.net,rootscrack.com,activators4windows.com,crackfury.com,torrentfilefree.com,9to5crack.com,greencracks.com,procrackhere.com,proproductkey.com,crack11.com,centerapps.net,freelicensekey.org,pcsoftz.net,freecrackdownload.com,f4file.com,serialkey360.com##[onclick*="open"]
+serialkey89.com,installcracks.com,crackserialkey.co,maliksofts.com,crackpropc.com,ayeshapc.com,crackhomes.com,crackspro.co,crackknow.com,4howcrack.com,trycracksoftware.com,getprocrack.co,activationkeys.co,organiccrack.com,softwarance.com,procrackkey.co,download4mac.com,freeactivationkeys.org,explorecrack.com,okproductkey.com,downloadpc.net,up4pc.com,hitproversion.com,cracktube.net,abbaspc.net,crackdownload.org,crackdownload.me,corecrack.com,windowsactivator.info,keygenstore.com,procrackpc.co,getmacos.org,latestproductkey.co,shanpc.com,crackpckey.com,torrentfilefree.com,patchcracks.com,idmfullversion.com,wareskey.com,crackbell.com,newproductkey.com,osproductkey.com,serialkeysfree.org,autocracking.com,crackzoom.com,greencracks.com,profullversion.com,crackswall.com,rootcracks.org,licensekeys.org,softserialkey.com,free4pc.org,productkeys.org,crackedfine.com,idmcrackeys.com,crackedhere.com,licensekeysfree.org,trycracksetup.com,crackedsoft.org,assadpc.com,thecrackbox.com,crackproductkey.com,cracklabel.com,keystool.com,crackedpcs.com,cracksmad.com,licensekeyup.com,chcracked.com,finalcracked.com,activatorpros.com,crackedmod.com,whitecracked.com,cracksoon.com,boxcracked.com,activationkey.org,serialkeypatch.org,crackedsoftpc.com,proapkcrack.com,softscracked.com,freeappstorepc.com,reallpccrack.com,crackfullkey.net,hmzapc.com,zcracked.com,usecracked.com,crackedversion.com,aryancrack.com,piratespc.net,reallcrack.com,fultech.org,crackpro.org,cracksray.com,pcwarezbox.com,cracksmat.com,crackxpoint.com,startcrack.co,crackbros.com,pcfullversion.com,sjcrack.com##center > [class*="buttonPress-"]
+free4pc.org,warezcrack.net,freeprosoftz.com,vcracks.com,crackthere.com,keygenfile.net,scracked.com,cyberspc.com,softzcrack.com,crackintopc.com,zslicensekey.com,procrackpc.com,crackshere.com,crackdj.com,cracktopc.com,serialsofts.com,prosoftlink.com,zscracked.com,crackvip.com,windowcrack.com,softsnew.com,licensecrack.net,vstpatch.net,newcrack.info,topkeygen.com,vsthomes.com,vstserial.com,procrackerz.com,pcfullcrack.org,keygenpc.com,bicfic.com,ikcrack.com,downloadcracker.com,karancrack.com,piratesfile.com,activatorwin.com,starcrack.net,crackproduct.com,dgkcrack.com,crackglobal.com,crackcan.com,keygendownloads.com,crackpatched.com,windowsactivators.org,serialsoft.org,crackit.org,productscrack.com,crackurl.info,crackroot.net,crackmak.com,seeratpc.com,crackmix.com,piratepc.me,activators4windows.com,letcracks.com,latestcracked.com,proproductkey.com,fullversionforever.com,vlsoft.net,topcracked.com,goharpc.com,crackeado.net,freecrackdownload.com,assadpc.com,fileoye.com,f4file.com,crackpcsoft.net,crackwinz.com,excrack.com,mahcrack.com,get4pcs.com,keygenwin.com,mycrackfree.com,crackfullpro.com,crackkey4u.com,fileserialkey.com,cracksdat.com,crackgrid.com,licensekeysfree.com,crackkeymac.com,freecrack4u.com,getintomac.net,protocrack.com,crackreview.com,activatorskey.com,kuyhaa.cc,cracktel.com,up4crack.com,cracksmat.com,crackbros.com,pcfullversion.com,crackcut.com##div[class^="code-block code-block-"]
+crackkits.com,rootcracks.co,crackwatch.org,crackfix.net,origincrack.com,procrackerz.com,crackhub.org,crackrules.com,zeemalcrack.com,haxmac.cc,cracka2zsoft.com,clevercracks.com,crackpropc.com,crackspro.co,crackknow.com,onhax.in,haxpc.net##.getox
+alicracks.com,win-crack.com,productkeyfree.org,productkeyforfree.com,wazusoft.com,piratesfile.com,kalicrack.com,sadeempc.com,letcracks.com,topkeygen.com,thepiratecity.co##center > a
+cracksoftwaress.net##div[style="float: none; margin:10px 0 10px 0; text-align:center;"]
+haxnode.net##[id^="haxno-"]
+||xforce-cracks.com^$doc
+||fileisready.com^$doc
+/?act=*&epcVIP=$doc
+||yip.su/latestfiles|$all
+||cli.re/premiumfiles|$all
+||coronasfapps.net^$doc
+||sustac.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/11394
+||theannoyingsite.com^$all
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/109902
+.top/vpnupdate/*/index.html$doc
+
+! https://github.com/uBlockOrigin/uAssets/issues/5605#issuecomment-1060013521
+||smartklick.biz^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/12117
+||zoosk.online^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/12194
+||fulptube.org^$all
+
+||i7ece0xrg4nx.com^$all
+*/bouncy.php?*&inPopUp=$all
+||1redirc.com^$all
+||nutrientassumptionclaims.com^$all
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115960
+! https://www.virustotal.com/gui/url/6a4daf9dfa58864522ae7972ab042cf4bab17a48321b96d1952bd384210adcd2
+! https://transparencyreport.google.com/safe-browsing/search?url=https:%2F%2Fonpharmvermen.com%2F
+||onpharmvermen.com^$doc
+||sale24-pills.com^$doc
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/116327
+||junk-cleaner.org^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/12934
+! https://malwaretips.com/blogs/remove-hdvideosnet-com/
+||hdvideosnet.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/12982
+||shaktilar.xyz^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/13177
+! https://github.com/uBlockOrigin/uAssets/issues/13734
+||fullcrack.vn^$all
+
+! https://twitter.com/rarara18181818/status/1530214731608313856
+/rtbfeed.php?$image,3p
+
+! https://twitter.com/ot_inc/status/1532316247094087680
+||phone-analyzer.com^$doc
+
+! https://twitter.com/NaomiSuzuki_/status/1536553207299985408 fake chrome
+!#if !env_mobile
+/^http:\/\/[a-z]{5}\.[a-z]{5}\.com\/[a-z]{10}\.apk$/$doc,match-case,domain=com
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/14034
+||fetishpartner.com^$all
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/125147
+||facevideosc.com^$all
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/126480
+/?c=propeller&lpid=$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/14588
+||geoflix.me^$all
+
+! https://github.com/uBlockOrigin/uAssets/pull/14985
+||skymods.net^$all
+
+! https://github.com/uBlockOrigin/uAssets/pull/15061
+||hypixelstorexyz.pages.dev^$all
+
+! torrdroidforpc. com
+||slugmefilehos.xyz^$all
+||tinyurl.com/setup-full-version$doc
+torrdroidforpc.com##[href^="http://slugmefilehos.xyz/"]
+
+! https://youtu.be/RfE_MreLSIM?t=183
+||haxsoft.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/15335
+||sxfyjygs.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/15368
+||zenlytrade.com^$all
+
+! https://shahrsakhtafzar.com/fa/news/security/42227-google-play-rubika-app-spy-users-personal-information
+! https://farnet.io/1401/08/324594/rubika-is-detected-as-malware/
+||rubika.ir^$all,domain=~web.rubika.ir|~m.rubika.ir
+
+! https://twitter.com/ozuma5119/status/1591616713992597506
+||letrigaze.live^$all
+! https://twitter.com/chaberi/status/1591139355628044288
+||luckypapa.top^$all
+! https://twitter.com/harugasumi/status/1591652561182150656
+||nbsfmradio.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/15777
+||ngazi.co.tz^$all
+||video-watch1.com^$all
+||musicinmysoul.biz^$all
+||choseoffhandsight.com^$all
+
+! https://twitter.com/harugasumi/status/1597417659163111424
+||metamasku.cc^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/15879
+||downloadpro.online^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/15937
+! https://www.virustotal.com/gui/url/a70d88ffc974f8d9cc5c3561938e95435d20a12a555e8c10d638d2bee5292165
+||install1nstall1.com^$all
+||factor1right.com^$all
+||speedsoft-one.com^$all
+||whitefuulsoft.com^$all
+||softredtech.com^$all
+||downloadfreexx1.com^$all
+||flymylife.info^$all
+||kochava.com^
+||neptunclicks.com^
+||oolomos.com^$all
+||arakusus.com^$all
+||imgfil.com^$all
+||urlcod.com^$all
+||tiurll.com^$all
+||urlca.com^$all
+||gowtos.com^$all
+||lomogd.com^$all
+||nosnou.com^$all
+||munkop.com^$all
+||voutew.com^$all
+||abukss.com^$all
+||amonro.com^$all
+||kiknu.com^$all
+||konmm.com^$all
+||bibtu.com^$all
+||xiuty.com^$all
+||pejik.com^$all
+||oyndr.com^$all
+||lpoms.com^$all
+||psfmi.com^$all
+||gftet.com^$all
+||fwern.com^$all
+||ytomb.com^$all
+||gghut.com^$all
+||nkmoo.com^$all
+||nnjou.com^$all
+||foilf.com^$all
+||vlyyg.com^$all
+||pimlm.com^$all
+||mciun.com^$all
+||sanff.com^$all
+||gghhe.com^$all
+||ooppnm.com^$all
+||vnomm.com^$all
+||nnggo.com^$all
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/136693
+/axad/?lpkey=$doc
+
+! https://github.com/uBlockOrigin/uAssets/issues/15990
+||vlcdownloads.com^$all
+
+! https://twitter.com/tougei_miryoku/status/1602878676508344320
+||borntiecalm.live^$all
+&t=main9|$doc,domain=live
+&t=main9ljs|$doc,domain=live
+&t=main9expsess|$doc,domain=live
+
+! https://github.com/uBlockOrigin/uAssets/pull/16038
+||hypixei.com^$all
+||msverify.dev^$all
+
+! Fake Steam website
+! https://github.com/uBlockOrigin/uAssets/pull/16143
+||99box.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/16153
+||ezadblocker.com^$all
+||watchadsfree.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/16156
+||discordoauthverification.onrender.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/16209
+||barlear.ru^$all
+
+! https://github.com/uBlockOrigin/uAssets/pull/16214
+||mc-hypixel.store^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/16257
+||kaminarisubs.net^$all
+
+! https://github.com/uBlockOrigin/uAssets/pull/16283
+||galeden.cn^$all
+
+! Phishing gathered from Twitter
+! https://twitter.com/AP_Zenmashi/status/1614845455271333890
+||3utilities.com^$all
+! https://twitter.com/KesaGataMe0/status/1621078596097048577
+||engagingtheheart.com^$all
+! https://twitter.com/sugimu_sec/status/1621525439658487813
+||cpuz.beerworldstore.com^$all
+! https://twitter.com/defenceability/status/1621446555726385153
+||bafybeidzp4sgidm4rvsc32fofkhbz5bdotbekov4mnwzejakvnzhhohysa.ipfs.dweb.link^$all
+! https://twitter.com/malware_traffic/status/1621728889486671873
+||cpu-id.top^$all
+! https://twitter.com/gorimpthon/status/1622092572188631041
+.top/index-install.html|$doc
+! https://twitter.com/defenceability/status/1622513282644054016
+||r39-g003-h8ig0w-u8f0we8-fgw0rgf-0we880e-rhgth.obs.ap-southeast-2.myhuaweicloud.com^$all
+! https://twitter.com/defenceability/status/1622801056379064321
+||bafybeiexjty7qmufu5jvbyln5ce5mue2lqw2htafc3api4wwsefxet5k54.ipfs.dweb.link^$all
+! https://twitter.com/harugasumi/status/1622816085157511168
+||jlydxj.com^$all
+! https://twitter.com/defenceability/status/1623182946806169600
+||chargerlogistics-dot-exceldocsverification.uk.r.appspot.com^$all
+! https://twitter.com/defenceability/status/1623546261126402058
+||bizerba-dot-azure-projectfiles.uk.r.appspot.com^$all
+! https://twitter.com/Sec_S_Owl/status/1623865705123938307
+||aidla64.com^$all
+! https://twitter.com/Sec_S_Owl/status/1623880734258921473
+||uahora.com^$all
+||cpuild.app^$all
+! https://twitter.com/sugimu_sec/status/1623855519646765056
+||alda64.com^$all
+! https://twitter.com/sugimu_sec/status/1624273843337699329
+||aida64ex.com^$all
+! https://twitter.com/catnap707/status/1624558197897048064
+||metamaskw.cc^$all
+! https://twitter.com/imabarizine/status/1625322105637339136
+||taylormadesells.com^$all
+||withaaglad.top^$all
+! https://twitter.com/harugasumi/status/1627983624447627265
+||aajdrp.com^$all
+! https://twitter.com/KesaGataMe0/status/1628158467625349122
+||italianlottery.com^$all
+! https://twitter.com/harugasumi/status/1628577192212066304
+||metamasek.cc^$all
+! https://twitter.com/KesaGataMe0/status/1629253647212363777
+||theexpressiveteacher.com^$all
+||trashtotreasurecreativerecycling.com^$all
+||jacksoncookphotography.com^$all
+||michaelinachrysalis.com^$all
+! https://twitter.com/KesaGataMe0/status/1631221448454062080
+||kucoinhi.com^$all
+! https://twitter.com/harugasumi/status/1631096887519608834
+||qhyhw.com^$all
+! https://twitter.com/KesaGataMe0/status/1631646070358048769
+||kangawabeank.com^$all
+! https://twitter.com/harugasumi/status/1633133887047217152
+||007itshop.com^$all
+! https://twitter.com/harugasumi/status/1634010430762008577
+||megancroft.bond^$all
+! https://twitter.com/harugasumi/status/1634924831564242944
+||tonghongad.com^$all
+! https://twitter.com/KesaGataMe0/status/1635333975672762369
+||thndg.com^$all
+! https://twitter.com/ozuma5119/status/1635414656646008833
+||e-tax-nta.web.app^$all
+! https://twitter.com/harugasumi/status/1636377881176854528
+||ogdwild.bond^$all
+! https://twitter.com/catnap707/status/1636891094284918784
+||haouwebb.bond^$all
+! https://twitter.com/harugasumi/status/1637463534631288832
+||sutarnbbe.bond^$all
+! https://twitter.com/harugasumi/status/1637678100594176000
+||dinglike.com^$all
+! https://twitter.com/AP_Zenmashi/status/1637660829553401862
+||stgami-o.top^$all
+! https://twitter.com/KesaGataMe0/status/1637987581525893122
+||ib-aieonobanck-co-jp.top^$all
+! https://twitter.com/ozuma5119/status/1638194144781930496
+||blisterlngdate.com^$all
+||fapello.xyz^$all
+! https://twitter.com/KesaGataMe0/status/1638932354319409154
+||jsbetzh.com^$all
+! https://twitter.com/harugasumi/status/1639633441523380224
+||sersdlos.cyou^$all
+! https://twitter.com/harugasumi/status/1640263282845188098
+||pf0755.cn^$all
+! https://twitter.com/ozuma5119/status/1640578127347986432
+||baoding66.top^$all
+! https://twitter.com/harugasumi/status/1640690554156507139
+||hohshops.com^$all
+! https://twitter.com/harugasumi/status/1642524464838762496
+||yanrefael.com^$all
+! https://mobile.twitter.com/sugimu_sec/status/1644914386291818499
+||amzpma.com^$all
+! https://twitter.com/harugasumi/status/1644990904242180098
+||hjxvcyu.com^$all
+! https://twitter.com/KesaGataMe0/status/1647882716216700929
+||bojsror.space^$all
+! https://twitter.com/harugasumi/status/1648219566303223809
+||restgzxdg.top^$all
+! https://twitter.com/PINKCOLORMILK/status/1648130688779157504
+||hehekakao.com^$all
+! https://twitter.com/masaomi346/status/1649260359763775488
+||bavaria-cup.ru^$all
+! https://twitter.com/harugasumi/status/1650103143118835712
+||patriothomestore.com^$all
+! https://twitter.com/harugasumi/status/1650353873218068480
+||ameixosszpxpass.top^$all
+! https://twitter.com/masaomi346/status/1650395325188968450
+||buyshflat.life^$all
+! https://twitter.com/harugasumi/status/1652532125428781057
+||jdongktx.com^$all
+! https://twitter.com/harugasumi/status/1652527826455908354
+||techguykev.com^$all
+! https://twitter.com/harugasumi/status/1653330173381734400
+||anzenns.com^$all
+! https://twitter.com/harugasumi/status/1654108853389393923
+||paekatcerd.com^$all
+! https://twitter.com/kureha85983/status/1654413225629474818
+||easy-vipmarkets.com^$all
+! https://twitter.com/KesaGataMe0/status/1654365174701383681
+||pppfgz.wiki^$all
+! https://twitter.com/8614miyauchi/status/1654845878933557248
+||luckypapa.xyz^$doc
+! https://twitter.com/KesaGataMe0/status/1649696612929896448
+||reviewspay.cc^$all
+! https://twitter.com/harugasumi/status/1655527100819075072
+||jsdushid.com^$all
+! https://twitter.com/harugasumi/status/1655470724377907200
+||manage-fpw-my-sakura-fpw-jp-fpw.impulsion.mu^$all
+! https://twitter.com/pingineer_jp/status/1646373106557267968
+||honda-law-office.jp/wp-includes/70038/Earthcorejp/|$doc
+! https://twitter.com/harugasumi/status/1658279518224764928
+||metamasktoken.cc^$all
+! https://twitter.com/masaomi346/status/1659086582555594753
+||cutxkfair.live^$all
+! https://twitter.com/satontonton/status/1659183900059652098
+||itsaol.com^$all
+! https://twitter.com/mojito1960/status/1664132222105051138
+||tokyu-dept.site^$all
+! https://twitter.com/harugasumi/status/1666013629853097984
+||qhigh.com^$all
+! https://twitter.com/harugasumi/status/1666436001953136641
+||yoinst.com^$doc
+! https://twitter.com/yuusultultu/status/1668185343907237888
+||shindaan.com^$doc
+! https://twitter.com/AP_Zenmashi/status/1674082742013755393
+||almostmy.com^$all
+! https://twitter.com/harugasumi/status/1684166951575359494
+||mkwlejfnaklglkasdjg.com^$all
+! https://anond.hatelabo.jp/20230726175726
+||capitalfa.jp^$all
+||caponefx.com^$all
+! https://twitter.com/harugasumi/status/1687086629230653445
+||ifavoritebuy.com^$all
+! https://twitter.com/NaomiSuzuki_/status/1687388567738404864
+||jpzone.vip^$all
+! https://twitter.com/harugasumi/status/1695040230204801514
+||aeonhelp.org^$all
+! https://twitter.com/masaomi346/status/1696821001785635127
+||tokyobag.shop^$all
+! https://twitter.com/masaomi346/status/1715007675266957355
+||zozo-jp.shop^$all
+! https://twitter.com/masaomi346/status/1716272554464473099
+||erdfkhxrnanm.top^$all
+! https://twitter.com/harugasumi/status/1716678388210180592
+||tfehmsag.xyz^$all
+! https://twitter.com/AP_Zenmashi/status/1716806757299933372
+||authority-uspser.top^$all
+! https://twitter.com/AP_Zenmashi/status/1716769008245182549
+||www.uspertest.vip^$all
+! https://twitter.com/harugasumi/status/1718486451929878639
+||benneteb18.shop^$all
+||bergeord20.shop^$all
+||geraidce16.shop^$all
+||maxwecor19.shop^$all
+||roryeico21.shop^$all
+! https://twitter.com/AP_Zenmashi/status/1718671548025077812
+||xqfefdkey.xyz^$all
+! https://twitter.com/harugasumi/status/1718998370608660868
+||corre-os.top^$all
+! https://twitter.com/harugasumi/status/1719947641818411189
+||aeonasco.com^$all
+! https://twitter.com/harugasumi/status/1734701589292597496
+||tokyo-waters.com^$all
+! https://twitter.com/AP_Zenmashi/status/1736670144234217692
+||tepco-tokyos.xyz^$all
+! https://twitter.com/NaomiSuzuki_/status/1737749366520291403
+||app-bitbanlk-cc.weebly.com^$all
+||www-bitbenk-app.com^$all
+! https://twitter.com/harugasumi/status/1737471939759772024
+||artenthusiastany.sa.com^$all
+! https://twitter.com/masaomi346/status/1738583074194276633
+||oioi-tokye.top^$all
+! https://twitter.com/harugasumi/status/1738949406211387713
+||tpoint-sites.com^$all
+! https://twitter.com/NaomiSuzuki_/status/1740725999845920943
+||cordialhoist.top^$all
+||ovxqtp.cfd^$all
+! https://twitter.com/AP_Zenmashi/status/1743978302212276647
+||aeoncojp.shop^$all
+! https://twitter.com/sm_hn/status/1744607746400621030
+||app.stocksj.xyz^
+! https://twitter.com/taku888infinity/status/1744992280384360850
+||oioi-store.vip^$all
+! https://twitter.com/tss_0101/status/1745387976585281810
+||totalpcsecure.com^$all
+! https://twitter.com/KesaGataMe0/status/1745359523140055539
+||my-docomo.tokyo^$all
+
+! https://onijima.jp/?p=54165
+||pocket-888.com^$all
+
+! scam sites
+||adblock-one-protection.com^$all
+||browser-updating.com^$all
+||webuzz.me^$doc
+||crosmall.homes^$all
+||coup-ling.net^$all
+||coup-ling-dm.net^$all
+||pulan.site^$all
+||thostco.club^$all
+||jpmalls.xyz^$all
+||gokinjolove.jp^$all
+||gokinjolove.net^$all
+||misstt.top^$all
+||wonsy.top^$all
+||hornygirlsinapp.com^$all
+||id001.jp^$all
+||xbav.one^$all
+||ligmono.top^$all
+||10un.jp^$doc
+||22dssklove-love.com^$doc
+||3tuhabe.info^$doc
+||4256-on.biz^$doc
+||5dgja.com^$doc
+||6aqr9j.com^$doc
+||8senjya.jp^$doc
+||a-divination.com^$doc
+||ad7mylo.com^$doc
+||advice-obtrusive.com^$doc
+||after-pop-abc.com^$doc
+||aiai-talk.com^$doc
+||aiaitalk.com^$doc
+||alicekdsod.com^$doc
+||amour.bliss-trance.com^$doc
+||amusementpalacegonow.com^$doc
+||any2st777fhy.com^$doc
+||aol-park.jp^$doc
+||applaud-acclaim.com^$doc
+||aqmessage.jp^$doc
+||armed-postulation.com^$doc
+||asetpun.com^$doc
+||astraeus-star.site^$doc
+||best-chat.net^$doc
+||best-friendd.net^$doc
+||best-friendd2022.net^$doc
+||bestxchat.net^$doc
+||bluew-web.com^$doc
+||cabinet-office-go.com^$doc
+||can-pq-dee.com^$doc
+||car-na.jp^$doc
+||cbcdnkyyxubdsrmg.com^$doc
+||cdypsqghdgrw.com^$doc
+||ce-ent.biz^$doc
+||ce-free.biz^$doc
+||ces-ent.biz^$doc
+||ces-free.biz^$doc
+||ch3l.net^$doc
+||chl3.net^$doc
+||clubfukugyou.work^$doc
+||cosmos01.com^$doc
+||cple.jp^$doc
+||date-app.net^$doc
+||days-neighborhood.com^$doc
+||decided-decision.com^$doc
+||determinatioon.jp^$doc
+||dev.san47itu54szkk.jp^$doc
+||di-ana.jp^$doc
+||dosukoudo.net^$doc
+||dot-acc.xyz^$doc
+||drct-match.com^$doc
+||drct-match.net^$doc
+||dydynight.org^$doc
+||eag1eag1e.com^$doc
+||elegant-erection.com^$doc
+||en-kakuri.biz^$doc
+||en-mu-su-bi.com^$doc
+||entertainment-undamped.net^$doc
+||epel-felmier.com^$doc
+||everyinfox2023.com^$doc
+||eyes-luv-u.com^$doc
+||f2f-free.biz^$doc
+||fapp.work^$doc
+||fl-0wer685hjdp300.com^$doc
+||fle652.net^$doc
+||flk41.com^$doc
+||formatch.co.jp^$doc
+||fortune-fate.jp^$doc
+||fortune-koun.jp^$doc
+||fortune-luna.com^$doc
+||friendxroom.com^$doc
+||ft-sou.com^$doc
+||fukumaneki-888.com^$doc
+||fukumaneki2211.com^$doc
+||g6-gonight.org^$doc
+||gabfbnaqodnvfafnj.com^$doc
+||gandestin0.jp^$doc
+||girls.a-makeup.com^$doc
+||gm-ent.biz^$doc
+||gm-free.biz^$doc
+||gokusenn.jp^$doc
+||goldenluck.jp^$doc
+||happy468.net^$doc
+||happymethod55.com^$doc
+||hi-a-so-bi.net^$doc
+||himatalk77.net^$doc
+||himichat999.net^$doc
+||home4ugoog10you.com^$doc
+||homeseventen.com^$doc
+||hope-for-shiningday.com^$doc
+||hori-hori.xyz^$doc
+||hp-dy.net^$doc
+||hphp-dy.net^$doc
+||i.redi-ana.jp^$doc
+||i2019.jp^$doc
+||in.other-geronica.com^$doc
+||indiscerptible-provisionally.jp^$doc
+||infoemphasiseleventh.com^$doc
+||infooperationsqueeze.com^$doc
+||infosmellleather.com^$doc
+||indi-ana.jp^$doc
+||ir0d0ri.jp^$doc
+||iri195.net^$doc
+||irie3.net^$doc
+||iuckgzcbceycgjs.com^$doc
+||ivy2241u.jp^$doc
+||jamjamjam.biz^$doc
+||k-colorful.jp^$doc
+||k-smilegallery.com^$doc
+||k0fu9.jp^$doc
+||k1wa.jp^$doc
+||kaiun-com.com^$doc
+||kaiun-park.jp^$doc
+||keep.secret-ace.com^$doc
+||kin-hakobune777.com^$doc
+||koifull.jp^$doc
+||koiroom.net^$doc
+||koiroomnotice.net^$doc
+||kouhad0.jp^$doc
+||koun-yogen.com^$doc
+||l-one-one.com^$doc
+||l-thr-thr.com^$doc
+||l-two-two.com^$doc
+||l0vekatsu.com^$doc
+||lightn5.com^$doc
+||lin-link.net^$doc
+||line-line-biz.com^$doc
+||link-service.net^$doc
+||linkage-linkage.com^$doc
+||log.xi-cascade.com^$doc
+||love-fit.jp^$doc
+||love-letter-dm.com^$doc
+||love-letter.info^$doc
+||love.sweet199.com^$doc
+||loveaholics.com^$doc
+||lovemelo.jp^$doc
+||lover-stream.com^$doc
+||luuce.jp^$doc
+||lzogdlorkfssui.net^$doc
+||machi-match.info^$doc
+||madnna.jp^$doc
+||madnna.net^$doc
+||mangogo.jp^$doc
+||mangogo.work^$doc
+||married-court.com^$doc
+||match-mate.jp^$doc
+||match-mate.net^$doc
+||matimati.site^$doc
+||maytail.jp^$doc
+||meguri-eye.net^$doc
+||meguri-y.net^$doc
+||meltiness.jp^$doc
+||message117.jp^$doc
+||mith-ril.net^$doc
+||mobaapo.net^$doc
+||moody-night.net^$doc
+||moogle-set.space^$doc
+||moogle-set.website^$doc
+||moonsupermoon.moonmoonsunmoon.com^$doc
+||muhamed-online.com^$doc
+||my7love.xyz^$doc
+||mystic-wonder.com^$doc
+||naja59jg.com^$doc
+||navi-match.net^$doc
+||near-s.com^$doc
+||nearing.jp^$doc
+||neverthelessadvertising.com^$doc
+||new.hpk0fu9.jp^$doc
+||newencounter.pw^$doc
+||nova.great-chat.net^$doc
+||ntt4p6tgc.com^$doc
+||nydlaepytwuekwhfyvivsf.com^$doc
+||on-glamour.xyz^$doc
+||one-chan-love.love^$doc
+||one-match01.com^$doc
+||onega.jp^$doc
+||onegaga.jp^$doc
+||oprirgreifeuprdlojeocg.com^$doc
+||originatepour.com^$doc
+||osubstancenasubstitute.com^$doc
+||otona-nona.biz^$doc
+||otonanona.jp^$doc
+||otonatime.net^$doc
+||oyasu-mi.tokyo^$doc
+||p2p-ent.biz^$doc
+||paesbeaqerdrsheuboapyh.com^$doc
+||pair-online.jp^$doc
+||piasukai.xyz^$doc
+||pinkredwhitereef.greenreef.net^$doc
+||plati-num.com^$doc
+||pr0m.site^$doc
+||privatelife.jp^$doc
+||psg.make9-salon.com^$doc
+||purpleiyvf.com^$doc
+||r30address.com^$doc
+||r30deai.com^$doc
+||reddishpurple.com^$doc
+||reverita-t.jp^$doc
+||rhsrthrtjhe.com^$doc
+||ripiai.com^$doc
+||romancetime.jp^$doc
+||romancetrain.jp^$doc
+||royalclass-dm.com^$doc
+||royalclass.info^$doc
+||s4fk.destin0.jp^$doc
+||salon1999.net^$doc
+||salonoshirase.net^$doc
+||sen-no-y-t.com^$doc
+||shells.pairapple.net^$doc
+||skpt9s.jp^$doc
+||slow-piercer.com^$doc
+||sns-pair.net^$doc
+||soul-ft.com^$doc
+||space-high.com^$doc
+||spirilp3000.com^$doc
+||spirituallounge-3000.com^$doc
+||spkouhad0.jp^$doc
+||ssg.qui261rd22.jp^$doc
+||sugarboxxx.net^$doc
+||sugulove.com^$doc
+||suite0-free0.com^$doc
+||sun.kgi5fgwpp8.com^$doc
+||sweetmemo.net^$doc
+||sweetmemoryy.com^$doc
+||t1a.jp^$doc
+||tadaapo123.com^$doc
+||tadaapomail.com^$doc
+||tadamatch.com^$doc
+||tenluuce.jp^$doc
+||terinron.com^$doc
+||thanks-dot.com^$doc
+||trgxchjiskfsxee.com^$doc
+||tsumalabo.jp^$doc
+||tttt.star095.com^$doc
+||tumalabo.net^$doc
+||tyotto.jp^$doc
+||tyotyo.biz^$doc
+||u3ig.com^$doc
+||undetermined-whitish.com^$doc
+||ura-nai-best.com^$doc
+||vanilla-japan.net^$doc
+||verita-t.jp^$doc
+||very.bes-tplay.com^$doc
+||vip.trust-site.net^$doc
+||we.success-vichada.com^$doc
+||with.2-on-line.com^$doc
+||y3tkz53rz.com^$doc
+||yu0287tk.com^$doc
+||yumajhsbsff.com^$doc
+||zmrbkwtmbvzmznv.com^$doc
+||ztkjjhkzaidpanu.com^$doc
+||2dfjwa.com^$doc
+||8ngpmu.com^$doc
+||addicted-to-u.com^$doc
+||af6frm.com^$doc
+||apple22cd.com^$doc
+||back-rich.com^$doc
+||cherry.mermaid77c.com^$doc
+||dgduwb.com^$doc
+||eeu5dt.com^$doc
+||jivo-ce.jp^$doc
+||md47ez.com^$doc
+||online2022-shopping.com^$doc
+||ptn9tf.com^$doc
+||uxzdx5.com^$doc
+||whimsicalrain.com^$doc
+||6464f046fd436e46h.buzz^$all
+||franceexpress.net^$all
+||funwithflies.online^$all
+||japanshopforsale.fun^$all
+||japanshopforsale.store^$all
+||khjkhk.store^$all
+||malayriyabukhar.xyz^$all
+||meeturdate.com^$all
+||merachatkaghar.xyz^$all
+||myjapanonlineshop.xyz^$all
+||mynameserverok.xyz^$all
+||newdomainleloyarjaldiseab.beauty^$all
+||newdomianleloyarjaldiseabto.quest^$all
+||slapcleaner.com^$all
+||tatikhale.xyz^$all
+||2226wurpatw.tokyo^$doc
+||ab5sa.com^$doc
+||app.plum375ap.com^$doc
+||asiansgetnaughty.com^$doc
+||blackstunners.com^$doc
+||bxg-h.jp^$doc
+||budhump.com^$doc
+||connect-wp.net^$doc
+||electro-magneticwave.com^$doc
+||eternal.mobius-loop.net^$doc
+||fukuinnnokotoba.com^$doc
+||humpbuds.com^$doc
+||line-bs.com^$doc
+||localsgowild.com^$doc
+||naughtyfever.com^$doc
+||nw-fzi.jp^$doc
+||oo.opaall.com^$doc
+||or-nl.jp^$doc
+||sldg02.com^$doc
+||sll-lp1f.com^$doc
+||smart-chat.info^$doc
+||tenseikaiun.com^$doc
+||ui7aud5ei4uhx7.com^$doc
+||v1v-g1ft-o7.com^$doc
+||wish-spiritua.net^$doc
+||woman-busi.com^$doc
+||world-vision-central.com^$doc
+||chaljakismat.xyz^$all
+||japanshopforsale.online^$all
+||omiaijapan.net^$all
+||japanclothing.in^$all
+||secure-57v.pages.dev^$all
+||sweepsdomains.co.uk^$all
+||windowliveinfo.live^$all
+||swaws.link^$all
+||amante-love1.com^$doc
+||ll-m-work-2020.com^$doc
+||pgym2t8p25uf3gz.com^$doc
+||slb3cr9dx9.jp^$doc
+||soku-h.net^$doc
+||sukui05.com^$doc
+||36vv-ssj.com^$doc
+||4miracle4.jp^$doc
+||4qy35wd.com^$doc
+||7nwa.cxiujudffaitd.jp^$doc
+||abc.youtus7216.com^$doc
+||akfdfdnupyfy.com^$doc
+||amari-ama.com^$doc
+||ank.vop-95jszkk.jp^$doc
+||attendantmulticultural.com^$doc
+||axd.jp^$doc
+||bambam-bi.com^$doc
+||c-al-e1nder.com^$doc
+||chocochipu-o.com^$doc
+||chumsline.jp^$doc
+||cosmos-metatrade.com^$doc
+||da-ro-s.com^$doc
+||dandelion-horsetail.work^$doc
+||dddiey-s1d2.com^$doc
+||ddeityy.com^$doc
+||deaimatch.jp^$doc
+||dream-by-catch.com^$doc
+||everhotmet.com^$doc
+||every-fpcx.com^$doc
+||facebooc.jp^$doc
+||ff-dai.net^$doc
+||friendmatch.jp^$doc
+||ganesha0910.com^$doc
+||ganesha52697.com^$doc
+||gm-we.jp^$doc
+||gtir5die6sutngr.jpn.com^$doc
+||happiness-gate.com^$doc
+||happy-h0ur.jp^$doc
+||heart-s2.com^$doc
+||htjrs-6re-ew.com^$doc
+||htre-vcf-d.com^$doc
+||iikanjiyanakanjide.wixsite.com^$doc
+||j75e-gfrs-df.com^$doc
+||kisekichikara.com^$doc
+||l1nefree.com^$doc
+||loto-chance.com^$doc
+||makoto-in-room.wixsite.com^$doc
+||mercury-fortune-telling.net^$doc
+||moira-101.com^$doc
+||nem0phila000.com^$doc
+||nitr5eur6fjhtsw.jpn.com^$doc
+||npo-government.jp^$doc
+||okai.work^$doc
+||onegoodperday.com^$doc
+||p3s18f1d0.com^$doc
+||pa-ir.net^$doc
+||pc.candlecandle.jp^$doc
+||pcfdt0001.com^$doc
+||pcfgdi0001.com^$doc
+||pcfsb0001.com^$doc
+||pdss3a1r.jp^$doc
+||pfunding-01.com^$doc
+||pororin081.com^$doc
+||primal.premium-prism.net^$doc
+||rainbow-fortune.biz^$doc
+||rainbow-fortune.com^$doc
+||rainbow-fortune.jp^$doc
+||sall.etchat.jp^$doc
+||som7ebb3.com^$doc
+||somatryui53.com^$doc
+||star-fortune.com^$doc
+||stella1647.com^$doc
+||supp0.jp^$doc
+||toki-no-irodori.com^$doc
+||tokyo-get-business.jp^$doc
+||tomodachixoxo.wixsite.com^$doc
+||triangle123.com^$doc
+||trust-tarade.net^$doc
+||txi-r.jp^$doc
+||ukokjxfbdqwffmuvsd.jp^$doc
+||umjditpwlb4f.com^$doc
+||unmei-kaika.com^$doc
+||ur54-htres.com^$doc
+||very10.com^$doc
+||vf5rkgirsir8ska.jpn.com^$doc
+||vitop7eg5sqwgbk.jpn.com^$doc
+||vixii.co^$doc
+||w4y5u6.com^$doc
+||wishhoree1890.com^$doc
+||with-with.net^$doc
+||xs5rur1she7eyry.jpn.com^$doc
+||you.y-uh9k7n5y.tokyo^$doc
+||57zyazmk.jp^$doc
+||a.tlineat.jp^$doc
+||abc.lemon2023.com^$doc
+||angelchance.com^$doc
+||b2ujcm.com^$doc
+||be-loaded.com^$doc
+||characteristicobservant.com^$doc
+||clarinet20.com^$doc
+||coralnov.jp^$doc
+||deai.amour-site.com^$doc
+||deaisaito.jp^$doc
+||dia-lover.com^$doc
+||doorway-of-guidance.com^$doc
+||ed-blissful.com^$doc
+||eika-akie220202.com^$doc
+||eternalfame461.com^$doc
+||ev-upstart.com^$doc
+||for-tg.com^$doc
+||for20-coco.com^$doc
+||fortune-gluck.com^$doc
+||fortune-mooon.com^$doc
+||ft-flower.com^$doc
+||fukugyou2022.net^$doc
+||fukukomachi-220513.com^$doc
+||fukunoha211013.com^$doc
+||fukura210317.com^$doc
+||future-marvellous.com^$doc
+||gdzewykg-e6bh3e.com^$doc
+||gluck-happy.com^$doc
+||gluck-fortune.com^$doc
+||gluck-happyuranai.com^$doc
+||gluck-horoscope.com^$doc
+||gluck-luckyuranai.com^$doc
+||gluck-miracleuranai.com^$doc
+||gluck-secreturanai.com^$doc
+||gluck-uranai-gluck.com^$doc
+||gluck-uranaisalon.com^$doc
+||gogonews.club^$doc
+||happiness-sign.com^$doc
+||happy-gluck.com^$doc
+||happyuranai-gluck.com^$doc
+||heart-uranai.com^$doc
+||holydivination.com^$doc
+||honnkaku-uranai-gluck.com^$doc
+||horoscope-gluck.com^$doc
+||iflirts.com^$doc
+||im-excellent.com^$doc
+||infomessagehappy.com^$doc
+||iris-808.com^$doc
+||jdig56po.com^$doc
+||kaaairoo549kai.com^$doc
+||kahimeyuki.jp^$doc
+||kairos-9987kaa.com^$doc
+||kantan-uranai.com^$doc
+||karinaroom.wixsite.com^$doc
+||keitai-uranai.com^$doc
+||l-chat.jp^$doc
+||login-chat.net^$doc
+||lovekatsu2277.com^$doc
+||luckyuranai-gluck.com^$doc
+||marine-nuts.online^$doc
+||match1ng.com^$doc
+||mintiia.com^$doc
+||mio-love2.wixsite.com^$doc
+||miracleuranai-gluck.com^$doc
+||moon-1light.com^$doc
+||moon1234moom.com^$doc
+||mttk2020.jp^$doc
+||mystery-forest.com^$doc
+||mr-benjamin.com^$doc
+||nexus.nice-splice.com^$doc
+||oficialinesp.wixsite.com^$doc
+||one-sunnyday.com^$doc
+||online-gluck.com^$doc
+||onlineuranai-gluck.com^$doc
+||opponent-remain.com^$doc
+||p-chi.info^$doc
+||pairpure.jp^$doc
+||pairpure.jp.net^$doc
+||peoplemanmanpeople.com^$doc
+||photo-gallery-picture2398.com^$doc
+||pinponpaipan.com^$doc
+||poke10ve.com^$doc
+||pocketlove.jp^$doc
+||pos.tnsd-apsq.com^$doc
+||ppo.re9t-hmd0.com^$doc
+||pulp-days.jp^$doc
+||pwo.wane-jctl.com^$doc
+||relife0001.com^$doc
+||relifemail555.com^$doc
+||s-kiseki.jp^$doc
+||sebumu28.com^$doc
+||secreturanai-gluck.com^$doc
+||sevensmooon.com^$doc
+||sign-happy.com^$doc
+||smartphone-uranai.com^$doc
+||su-hisenjutu.com^$doc
+||suhi-senjutsu.com^$doc
+||suhi-sejutsuexpert.com^$doc
+||tada10ve.jp^$doc
+||tada1ove.com^$doc
+||take.the.n-chapter.jp^$doc
+||themselves-embryo.com^$doc
+||tkmailgirl.xyz^$doc
+||toxic-ventilate.com^$doc
+||ultratime.info^$doc
+||umjdt.site^$doc
+||uranai-gluck.com^$doc
+||uranai-keitai.com^$doc
+||uranai-smartphone.com^$doc
+||uranaikantei-gluck.com^$doc
+||uranaionline-gluck.com^$doc
+||uranaisalon-gluck.com^$doc
+||uu-charisma.jp^$doc
+||v-yummy.com^$doc
+||vin.vaji47uj.com^$doc
+||vroom24.com^$doc
+||vroom24365.com^$doc
+||webdeai.jp^$doc
+||wmw.matchin.jp^$doc
+||wn56y7ve57j12zuv7tyj.com^$doc
+||woman-good-job.work^$doc
+||world.ex-advantage.jp^$doc
+||xxa.uji8979erd77.jp^$doc
+||y-tradie.com^$doc
+||zaitaku-baito.com^$doc
+||action0120.com^$doc
+||alphabet0120.com^$doc
+||au0212te.com^$doc
+||auni230119.com^$doc
+||backyardperipheral.com^$doc
+||best-web2020.com^$doc
+||computer0120.com^$doc
+||cyber0120.com^$doc
+||degmq5l23.jp^$doc
+||direct198.com^$doc
+||dosudosuo.com^$doc
+||dotcom0120.com^$doc
+||fanfande.net^$doc
+||female-good.work^$doc
+||forum0120.com^$doc
+||foundate-core.net^$doc
+||intern0120.com^$doc
+||kasegeru-rank.com^$doc
+||li-neeee.net^$doc
+||linemail.work^$doc
+||magnum0120.com^$doc
+||make2022.com^$doc
+||neutral0120.com^$doc
+||positive0120.com^$doc
+||protein0120.com^$doc
+||okay-work.info^$doc
+||ol2ewq989.jp^$doc
+||openhouse0120.com^$doc
+||refrain0120.com^$doc
+||salon.beauty202201.com^$doc
+||sbfw.work^$doc
+||sma-talk.com^$doc
+||smile-4u-2u.com^$doc
+||sokkinjobmasu.work^$doc
+||tim.time-time-zyunizi.com^$doc
+||uj2tu1y.com^$doc
+||unclependulum.com^$doc
+||xxxmake.com^$doc
+||yours-mail.com^$doc
+||1litteno.home-walil1.jp^$doc
+||1st-mail.jp^$doc
+||2507u35ia6mk1.com^$doc
+||2qpk150djf0ri.jp^$doc
+||56fv2z8bfv9.com^$doc
+||5jd2tj2idrool.com^$doc
+||777.funnyy.net^$doc
+||advancedaily711.com^$doc
+||ai-ne.net^$doc
+||ai-tas.com^$doc
+||ai3tu.com^$doc
+||alch.treas.jp^$doc
+||amaenbo.jp^$doc
+||amourplace.jp^$doc
+||ancient-guidance.jp^$doc
+||animal-vegetable.com^$doc
+||apple012.com^$doc
+||ataru-loto.com^$doc
+||atchm.net^$doc
+||bontruth.com^$doc
+||c.onnect.jp^$doc
+||c930lhsivns1b.jp^$doc
+||chat111room-09.com^$doc
+||confidencial-uniq.com^$doc
+||connect-jumbo.com^$doc
+||cosdate.jp^$doc
+||cxbvnmyeruw.com^$doc
+||d-hiyori.com^$doc
+||daisukimatch.jp^$doc
+||defendeerrpro.jp^$doc
+||diamond-line.net^$doc
+||dinosaur-crown.com^$doc
+||dreamatch.jp^$doc
+||edge-campaign-japan.com^$doc
+||eiqnnmxvun5ge97.com^$doc
+||en5wr67sag3.com^$doc
+||enigma-quorum.com^$doc
+||equation-of-happiness.com^$doc
+||eromatchi.jp^$doc
+||ev.every-every-happy.com^$doc
+||fanta-stic.net^$doc
+||flirt.com^$doc
+||fx-protrade.net^$doc
+||garden-nomadl1i.com^$doc
+||ggcake.tindersplus.net^$doc
+||glitter-girls.net^$doc
+||gokuhuku.jp^$doc
+||gyakusimei.com^$doc
+||h-spe.net^$doc
+||hapim.net^$doc
+||happy-egg.net^$doc
+||happylife-partner.com^$doc
+||heartmatch.jp^$doc
+||hho.yes-hhoyf.com^$doc
+||home-22-time.com^$doc
+||hy4ied3d.com^$doc
+||i5h56ozira7l6.jp^$doc
+||ideallife21.com^$doc
+||ii-earth.com^$doc
+||imvcenuietfmw.net^$doc
+||itssofunny010.com^$doc
+||jack-roaddinc.jp^$doc
+||japanhotties.jp^$doc
+||jdoasjfojuhod.com^$doc
+||kaiunmegami.jp^$doc
+||kaiunrecipe.com^$doc
+||kmamk.net^$doc
+||koipara.jp^$doc
+||kring-stone.jp^$doc
+||lib-333-lib.com^$doc
+||likeandlive.com^$doc
+||local-bang.com^$all
+||lovedotto.net^$doc
+||lovewish.jp^$doc
+||lrwxrawroemtghrmzbn.com^$doc
+||lutherinfo.com^$doc
+||luthersaite.com^$doc
+||lux-ex.info^$doc
+||lvmeet.net^$doc
+||machimatch.jp^$doc
+||matchmix.jp^$doc
+||mem.wakuwa98.com^$doc
+||mmdem.net^$doc
+||mmkat.net^$doc
+||mmlnc.net^$doc
+||moelove.jp^$doc
+||mustwork.work^$doc
+||myocean.jp^$doc
+||nakayama.chikarakosopower.com^$doc
+||netsgram.com^$doc
+||network.pochi-apricot.com^$doc
+||nextaex.com^$doc
+||one.thx-birthday.com^$doc
+||one-two-up.jp^$doc
+||one1-day.com^$doc
+||otakuplay.jp^$doc
+||otakurabu.jp^$doc
+||p18d6.hp.peraichi.com^$doc
+||pairnavipairnavi.com^$doc
+||pakok.net^$doc
+||paradise-angel.com^$doc
+||paysnum.com^$doc
+||peaces-ign.com^$doc
+||peachzone.site^$doc
+||plaza-l1o0nni-p1aza.com^$doc
+||ps-sns0girls.com^$doc
+||ptron.net^$doc
+||pxk.jp^$doc
+||ranch-1and.com^$doc
+||removerted.com^$doc
+||rexsvj8omabse.jp^$doc
+||richheart.completelifetime.com^$doc
+||room-582.com^$doc
+||room-82yhjeidk.com^$doc
+||s908b9n62w53u.jp^$doc
+||sard1.com^$doc
+||sca-letter.com^$doc
+||sdhjak.com^$doc
+||sea-into-53426l1.com^$doc
+||sfsrch.com^$doc
+||sns.smle.mobi^$doc
+||sokudeai.jp^$doc
+||sokuh.net^$doc
+||sonic-nicehands.com^$doc
+||specialapp-sns.com^$doc
+||stowers-service.com^$doc
+||sxtown.jp^$doc
+||syakoba.com^$doc
+||teamwork-project.com^$doc
+||tennshinomitibiki01.com^$doc
+||tenshinomitibiki.com^$doc
+||theater-1iil1.com^$doc
+||unafei-kokusai.com^$doc
+||upforit.com^$doc
+||uptoest.com^$doc
+||vhills.net^$doc
+||votteetten.com^$doc
+||vqydliiyda.net^$doc
+||wbp-hk.com^$doc
+||wbpb9.com^$doc
+||whim-w.net^$doc
+||xn--4dkua4c8143c.jp^$doc
+||xn--edkc9m807k.jp^$doc
+||xn--n8j0la8wb3547bghe.jp^$doc
+||xn--n8jwkyc7fw52nfvd.jp^$doc
+||xn--z9j635l1gs.jp^$doc
+||xn--z9jzga6u1506a.jp^$doc
+||xtqmufypnebap.jp^$doc
+||xyg.application-sns.com^$doc
+||you4love.jp^$doc
+||zil1u73o.mars-for-5gt2li.com^$doc
+||zmaka.net^$doc
+||taosaleset.com^$all
+||0281.jp^$doc
+||0909810.com^$doc
+||093093.jp^$doc
+||11093.jp^$doc
+||19093.jp^$doc
+||2349.jp^$doc
+||2h1.jp^$doc
+||39093.net^$doc
+||39093.tv^$doc
+||4151.biz^$doc
+||4151.tv^$doc
+||55093.com^$doc
+||55bdsm.com^$doc
+||aeru.tv^$doc
+||affairdating.com^$doc
+||aitai.biz^$doc
+||amantssexy.com^$doc
+||askme4date.com^$doc
+||b-7.jp^$doc
+||babaroa.net^$doc
+||bbs-7.jp^$doc
+||bbsdx.jp^$doc
+||benbbs.net^$doc
+||bnbn.jp^$doc
+||c-y.jp^$doc
+||celcol.jp^$doc
+||celebri.jp^$doc
+||choucreme.com^$doc
+||chy.jp^$doc
+||cjok.net^$doc
+||crostol.com^$doc
+||datenabi.com^$doc
+||doem.jp^$doc
+||ebifri.com^$doc
+||eraberu.jp^$doc
+||erocm.com^$doc
+||flirtanu.com^$doc
+||flirtmoms.com^$doc
+||freedom-garden.com^$doc
+||freesexmatch.com^$doc
+||geh.jp^$doc
+||getnaughty.com^$doc
+||gofun.jp^$doc
+||gspo.jp^$doc
+||guj.jp^$doc
+||guw.jp^$doc
+||h093.net^$doc
+||hipma.jp^$doc
+||hmai.jp^$doc
+||hmhm.jp^$doc
+||hoct.cc^$doc
+||hxh.jp^$doc
+||igetnaughty.com^$doc
+||irha.jp^$doc
+||jnjn.jp^$doc
+||jukcha.com^$doc
+||jukuana.net^$doc
+||jyk.jp^$doc
+||kadak.jp^$doc
+||kanbbs.net^$doc
+||kokanjo.net^$doc
+||koubi.jp^$doc
+||koy.jp^$doc
+||ksds.jp^$doc
+||linblog.info^$doc
+||linguette.net^$doc
+||locals.dating^$doc
+||loveju.net^$doc
+||mamak.jp^$doc
+||matchx2.com^$doc
+||meetdatekiss.com^$doc
+||meetpie.net^$doc
+||mejp.net^$doc
+||mgirl.jp^$doc
+||mland.jp^$doc
+||mmnav.jp^$doc
+||moecoco.com^$doc
+||mymymy.net^$doc
+||natadecoco.net^$doc
+||naughtydate.com^$doc
+||newhoney.jp^$doc
+||nuide.net^$doc
+||oneisan.net^$doc
+||oolontya.com^$doc
+||pair-pair.com^$doc
+||panacota.net^$doc
+||piparelli.net^$doc
+||pirikitos.com^$doc
+||pmew.jp^$doc
+||pnav.jp^$doc
+||quickflirt.com^$doc
+||ricopin.com^$doc
+||scnv.jp^$doc
+||serev.net^$doc
+||sfg.jp^$doc
+||sfge.jp^$doc
+||singles50.jp^$doc
+||smab.jp^$doc
+||smism.jp^$doc
+||smmax.jp^$doc
+||soha.jp^$doc
+||sok8.net^$doc
+||stomatico.com^$doc
+||suguaitaina.com^$doc
+||suguao.net^$doc
+||sumatuma.com^$doc
+||sxe.jp^$doc
+||syasei.com^$doc
+||tapi2.jp^$doc
+||tarto.net^$doc
+||tendermeetonline.com^$doc
+||tendermeets.com^$doc
+||tinql.com^$doc
+||together.com^$doc
+||maturedating.com^$doc
+||topg.jp^$doc
+||tubakinohimitsu.amebaownd.com^$doc
+||tugonoyoi.com^$doc
+||twowife.com^$doc
+||txtx.jp^$doc
+||ulla.com^$doc
+||uniformdating.com^$doc
+||wantubad.com^$doc
+||wildmeets.com^$doc
+||xgal.jp^$doc
+||xzo.jp^$doc
+||yceleb.com^$doc
+||yourskiss.com^$doc
+||bruno-brown.com^$doc
+||life-is-luminous.com^$doc
+||00ebjdbagyqwt.club^$doc
+||0didjsgheje.club^$doc
+||5050.fm^$doc
+||6xtpke4.com^$doc
+||8xpamp5fxd.com^$doc
+||a5qd6qjhwg5d.com^$doc
+||aberration-0000000001.com^$doc
+||abstain-soldier.com^$doc
+||adoptmeantranslate.com^$doc
+||after-7.net^$doc
+||aikatuz.jp^$doc
+||all-time-domain.com^$doc
+||always-happy-fortune.com^$doc
+||alwayslike.safestspot.jp^$doc
+||anau6stg6y.com^$doc
+||andyou2.com^$doc
+||aphrodite-astrology.net^$doc
+||apppleheaddd.jp^$doc
+||bestcosme.jp^$doc
+||browser9182.web.fc2.com^$doc
+||burmesterone.jp^$doc
+||callb.biz^$doc
+||catchmetalk.blog^$doc
+||catchmetalk.com^$doc
+||charecttorr.jp^$doc
+||charm-n.com^$doc
+||chesscheckersvariation.com^$doc
+||circle7-bd.com^$doc
+||club-house.link^$doc
+||cocoro-liberty.com^$doc
+||coin-of-fate.jp^$doc
+||d-sr.net^$doc
+||d-will.net^$doc
+||daylighteel.com^$doc
+||ddxdda.unusualdate.com^$doc
+||digital-mail.jp^$doc
+||divination-truth.com^$doc
+||during-the-holiday.com^$doc
+||e-d-en.com^$doc
+||every-au.com^$doc
+||every-bisque.com^$doc
+||every-blanched.com^$doc
+||every-cornsilk.com^$doc
+||every-coral.com^$doc
+||every-cute.com^$doc
+||every-dark.com^$doc
+||every-dodo.com^$doc
+||every-ds123.com^$doc
+||every-enjoy.com^$doc
+||every-gold.com^$doc
+||every-isb.com^$doc
+||every-lemon.com^$doc
+||every-light.com^$doc
+||every-line1.com^$doc
+||every-line2.com^$doc
+||every-nejp.com^$doc
+||every-pcpc.com^$doc
+||every-rose.com^$doc
+||every-salmon.com^$doc
+||every-super.com^$doc
+||every-toroku1.com^$doc
+||every-toroku2.com^$doc
+||every-toroku3.com^$doc
+||every-yellow.com^$doc
+||experiencedlawsuit.com^$doc
+||extentfillet.com^$doc
+||febdd.info^$doc
+||flupshare.com^$doc
+||fortune-start.com^$doc
+||fortune-yakata.com^$doc
+||g-spiritual.com^$doc
+||gate-1-spiritual.com^$doc
+||gnan.jp^$doc
+||gnchag.com^$doc
+||gran-danker.jp^$doc
+||gyakunan.net^$doc
+||happiness-gate01.com^$doc
+||high-moon-sun.com^$doc
+||higher-mainnd.jp^$doc
+||hretdsubgrmc.jp^$doc
+||htgefegf56756.xyz^$doc
+||hy3irjf.com^$doc
+||igazre.com^$doc
+||jinsei-uranai2023.com^$doc
+||just1ce.net^$doc
+||kantei-oracle.com^$doc
+||kinhako-lp.com^$doc
+||kinhako-m01.com^$doc
+||kinhako-m02.com^$doc
+||kinhako-p01.com^$doc
+||kinhako-p02.com^$doc
+||lover-c.com^$doc
+||luck-is-home.com^$doc
+||mamagathering.org^$doc
+||match007.jp^$doc
+||mc-aoyama.com^$doc
+||mercury-lp.net^$doc
+||michibiki-uranai.com^$doc
+||miracle-door.com^$doc
+||mirai-kouun2023.com^$doc
+||mjzca66n34j7.com^$doc
+||moon-luck-power.com^$doc
+||mother-sku.jp^$doc
+||okanekasegeru.com^$doc
+||online-777.jp^$doc
+||p-mel.net^$doc
+||part-ner01.jp^$doc
+||peachcafe.net^$doc
+||poison-idea.com^$doc
+||polaris-775.com^$doc
+||pollutionsatisfyadopt.com^$doc
+||prophecy-of-fate.com^$doc
+||rising-to-fortune.com^$doc
+||rosaca-nina.net^$doc
+||s-space.jp^$doc
+||shinjitsu-mirai2023.com^$doc
+||sokuai.jp^$doc
+||sp-gt-meet.com^$doc
+||spring-sealion.com^$doc
+||spiritual-gt.com^$doc
+||spiritual-leading.com^$doc
+||sta.star-star777.com^$doc
+||star-club-self.com^$doc
+||star-superstar-yellow.com^$doc
+||sugusagasu.com^$doc
+||sukui01.com^$doc
+||sukui02.com^$doc
+||sukui03.com^$doc
+||sukui04.com^$doc
+||sukuinote.jp^$doc
+||sumsmsp.info^$doc
+||szddbxyumfcf.net^$doc
+||tarot2fs.com^$doc
+||telet.me^$doc
+||this-you-good.com^$doc
+||tikgold2023.com^$doc
+||tomikuji.com^$doc
+||ugfdwmausxfy.net^$doc
+||unmei-hikari2023.com^$doc
+||unmei2023.com^$doc
+||uranai-beginning.com^$doc
+||uranai-hit.com^$doc
+||uranai-like.com^$doc
+||utugmz93sr.com^$doc
+||wafxz2.com^$doc
+||wastearguewasteill.com^$doc
+||web.fe-vrier.com^$doc
+||whpbrmdss.com^$doc
+||will-kantei.com^$doc
+||wkdk.jp^$doc
+||xmwvmzm3fd8h.com^$doc
+||zrkp7fgmcdwe.com^$doc
+||feemwshape.sbs^$doc
+||6xy-zg.com^$doc
+||bvnx599app.com^$doc
+||cwa-2020.com^$doc
+||dwoetbarcrooplsloiwh.com^$doc
+||gargar.making-garden.com^$doc
+||happy-popice.com^$doc
+||kronos2022.com^$doc
+||like-baloon-leaf.com^$doc
+||mor.chance-10dayful.com^$doc
+||octagongon.com^$doc
+||qfmjw.arpviufltwiostoegrm.com^$doc
+||s.meru.jp^$doc
+||ts7nept8.com^$doc
+||vcrwv.monster^$doc
+||x-yz6asktoi.com^$doc
+||x-yzn6.com^$doc
+||x6-yz-kzyx0.com^$doc
+||x6-yzk.com^$doc
+||xy-z0-ra-had0.com^$doc
+||xy-z6goo-xyz.com^$doc
+||xy-z6x.com^$doc
+||ytjon-d2s1ah.com^$doc
+||lets-tip315.com^$doc
+||loveri.net^$doc
+||lvli.jp^$doc
+||m2sg.jp^$doc
+||mamasg.net^$doc
+||mcbien.net^$doc
+||mlaligms205s.com^$doc
+||rollfa.net^$doc
+||rollin-12fate.com^$doc
+||rollin-fat1e.com^$doc
+||sgua.jp^$doc
+||spilov.net^$doc
+||splv.jp^$doc
+||suguap.net^$doc
+||vien.jp^$doc
+||a-power.jp^$doc
+||eternal-station.jp^$doc
+||fnyge.site^$doc
+||friends-connect.com^$doc
+||kinun-2023.com^$doc
+||madonnaoasis.com^$doc
+||msg.metamessen.net^$doc
+||o-cean-fortune.biz^$doc
+||o-cean-fortune.com^$doc
+||secondary-with.com^$doc
+||fure-ai.com^$doc
+||fure-ai.site^$doc
+||happy-classic.com^$doc
+||poiu7895123.jp^$doc
+||rea-love.net^$doc
+||bvjdogmfommbobmedmf.com^$doc
+||ggtt-more-special.com^$doc
+||lpdoinoibnsndoppigh.com^$doc
+||natu.natural-natural-pure.com^$doc
+||npafnapnnapfpaengdf.com^$doc
+||b6s4as9myw75g877krwp.com^$doc
+||hr7sy8fpw7tr43u3dab2.com^$doc
+||loving-happy.com^$doc
+||pw3a2rps8p97x2u5-2rf.com^$doc
+||wzbrughrw9a63hnfurap.com^$doc
+||xa7f8d9i9su2pchn6mps.com^$doc
+||btc8228.com^$all
+||btc9339.com^$all
+||eoxleiy.store^$all
+||abacus-prefix.com^$doc
+||aj5sa87e.com^$doc
+||celezma.net^$doc
+||dismay-sacred.com^$doc
+||hamfqppcycjiskc.com^$doc
+||loveru.jp^$doc
+||match-1match.jp^$doc
+||morale-yellow.com^$doc
+||quq.ygdd7ssl.com^$doc
+||t1amo.jp^$doc
+||gswwichggroup.top^$doc
+||pffawtchpoffical.buzz^$doc
+||qswwichqhood.top^$doc
+||tswwichtband.top^$doc
+||uggstore.online^$doc
+||jampamn.online^$doc
+||fair.alivio-platform.com^$doc
+||pair-seat.net^$doc
+||pairseat.net^$doc
+||sez.jp^$doc
+||matching-go.jp^$doc
+||kira-kira.blue^$doc
+||p-chi.tech^$doc
+||rearea2022.com^$doc
+||vanilla-japan.love^$doc
+||jtybleua.jp^$doc
+||mai-tel.jp^$doc
+||sfc.bz^$doc
+||sfget.jp^$doc
+||download-campaign.com^$doc
+||fine-cloud.net^$doc
+||float-next.com^$doc
+||matomenever.com^$doc
+||mid-round.com^$doc
+||otonanojikan13579.net^$doc
+||up-loop.net^$doc
+||videochat-fan.com^$doc
+||3296cb.com^$doc
+||8waku-fbfb.com^$doc
+||mamamour.net^$doc
+||apr-business.sa.com^$doc
+||siasou.jp^$doc
+||2chlovers.web.fc2.com^$doc
+||lovez.jp^$doc
+||hfmarkets001.com^$all
+||letakgrab.com^$doc
+||pinskscope.life^$doc
+||moremorelove.net^$doc
+||accidentalunderground.jp^$doc
+||after-noon.jp^$doc
+||bse.bb64bb8.com^$doc
+||chatchu.jp^$doc
+||cupid-chat.net^$doc
+||docommo.com^$doc
+||doconno.com^$doc
+||f9ng8gb.com^$doc
+||fx640b4a8v2n.net^$doc
+||grace-pot.com^$doc
+||h76-hng7gvn.com^$doc
+||latterinformation.jp^$doc
+||leaf.lau-rier.com^$doc
+||maiwai2.jp^$doc
+||moon1hit.com^$doc
+||moonlight-ebbandflow.com^$doc
+||multiplelucky.jp^$doc
+||nanroom.net^$doc
+||nowtuma.net^$doc
+||ny-ms.jp^$doc
+||ownpayment.jp^$doc
+||p39ztyx.com^$doc
+||pastelism02.jpn.com^$doc
+||pineapplecake-yummy.com^$doc
+||platinum-center.com^$doc
+||retailaudio.jp^$doc
+||ssq.spofbd99.com^$doc
+||sss-sidejob.com^$doc
+||t26dmg9.com^$doc
+||tokuyama-kaiun.com^$doc
+||vy8monlf1t.com^$doc
+||wifekai.net^$doc
+||yummy-yuy.com^$doc
+||yummy2-yuy.com^$doc
+||zerocha.jp^$doc
+||augury-uranainoizumi.com^$doc
+||bexitzwfjipzs.jp^$doc
+||catchato10.com^$doc
+||chat-search.com^$doc
+||fz988hnbaha.com^$doc
+||happy.pp99adad.com^$doc
+||hhh.u3se3jg3gae.com^$doc
+||hzalwkcjbudom.info^$doc
+||ii.iriiss.com^$doc
+||let.attract1v3.com^$doc
+||lmoox5.net^$doc
+||mchynxqpiswuj.info^$doc
+||mtl.metel-x-x-x.com^$doc
+||panlcake.net^$doc
+||paradise.shine-site.com^$doc
+||s21aabb6.com^$doc
+||sstt22free5.com^$doc
+||utg.ri64-pdmv.com^$doc
+||venus-uranainoizumi.com^$doc
+||vgwkhaujofqxe.info^$doc
+||whuaqdsfjktgr.info^$doc
+||z4e2yem9edj.com^$doc
+||vanillafrappuccino.jp^$doc
+||vegansweeets.jp^$doc
+||getmatch.jp^$doc
+||mcpoc.linenet.top^$doc
+||hn-mizuki.com^$doc
+||urara02032023.com^$doc
+||ang.el-mail.online^$doc
+||atre-frer6.com^$doc
+||berate-expressive.com^$doc
+||comcom0511.com^$doc
+||gloria-divination.$doc
+||mothersmilk.jp^$doc
+||otomachi.jp^$doc
+||smoothie-smoothie.jp^$doc
+||suffix-consignment.com^$doc
+||amazonlogistics.jp^$all
+||fukusenkan.com^$doc
+||koi-chat.net^$doc
+||sachikru.com^$doc
+||sachikru1.com^$doc
+||sachikru3.com^$doc
+||sachikru4.com^$doc
+||sachikru5.com^$doc
+||sachikru6.com^$doc
+||sachikru7.com^$doc
+||sachikru8.com^$doc
+||bookblack5208w.com^$doc
+||freest200look.com^$doc
+||leterthe-gese.com^$doc
+||off-wiloeese.com^$doc
+||the-style-free.info^$doc
+||weekenddogkeep.com^$doc
+||koundayori.com^$doc
+||second-love-love.jp^$doc
+||chuchu2.jp^$doc
+||deaiai55.com^$doc
+||kokocha.site^$doc
+||hjytu75fro0.jp^$doc
+||secssnetplan.jp^$doc
+||3-uh9cj.com^$doc
+||3x-c9ua.net^$doc
+||68a9i9w.com^$doc
+||988s82r.com^$doc
+||efzhm85.com^$doc
+||rhyprua.com^$doc
+||tui8s2e.com^$doc
+||emyqsvk7zw.com^$doc
+||evqhubkfh8.com^$doc
+||jinuja5zgm.com^$doc
+||ljqq93npbr.com^$doc
+||n9zxgxpdu6.com^$doc
+||pnw0kbzjtt.com^$doc
+||sdlbtwi3lr.com^$doc
+||tvngrq6yat.com^$doc
+||vjybuykaxz4.com^$doc
+||willgood-will.com^$doc
+||y2sysagetf.com^$doc
+||san-dast.net^$doc
+||dedestin0.jp^$doc
+||fortune-fortuna.com^$doc
+||legamee.jp^$doc
+||miraiah.jp^$doc
+||sen8senjya.jp^$doc
+||happy-matome.com^$doc
+||fukuroou.jp^$doc
+||kennsaku.jp^$doc
+||matchingsite.jp^$doc
+||for.life-thrones.com^$doc
+||7wbb.com^$doc
+||me-ru.jp^$doc
+||byoep.moustachespontaneous.com^$doc
+||categorywrench.com^$doc
+||cuddle.please-delight.com^$doc
+||elephantdevout.com^$doc
+||moustachespontaneous.com^$doc
+||waterproofvile.com^$doc
+||ht54s-grf.com^$doc
+||hyop-ed12.com^$doc
+||ss7-yhw0-wk.com^$doc
+||st.stryyy.com^$doc
+||w-dbl.com^$doc
+||recruit-gold.com^$doc
+||tokimake.site^$doc
+||tokimeku.xyz^$doc
+||6q5c53c6sg4z9vkkpqnc.com^$doc
+||emoti-on.com^$doc
+||jinsei-undesu.com^$doc
+||sftqg7t9cyzjaw0b.com^$doc
+||spiritual-jp.com^$doc
+||unki-josho.com^$doc
+||xdpiwrx7ub.net^$doc
+||2022del-eats.com^$doc
+||cl-oud9.com^$doc
+||feve-r.com^$doc
+||ma-tching.com^$doc
+||mugicom.live^$doc
+||romanc-e.com^$doc
+||sns3615.com^$doc
+||talkthattalkllc.com^$doc
+||time1time.com^$doc
+||go-ld-li-ne.site^$doc
+||gold-line.click^$doc
+||gold-line.online^$doc
+||cloudmax.jp^$doc
+||mama-piece.com^$doc
+||mamakatu42.blogspot.com^$doc
+||princess2022.com^$doc
+||vivian.jp.net^$doc
+||cha-nce.net^$doc
+||mirusiru.online^$doc
+||mirusiru.site^$doc
+||mobileverify.net^$doc
+||grabgiftcard.net^$doc
+||giftcardhero.net^$doc
+||ewapps.top^$all
+||awapps.cfd^$all
+||awapp.store^$doc
+||cleansoft.online^$doc
+||softlab.fun^$doc
+||appxfree.com^$doc
+||appxfree.top^$doc
+||vbucks.buzz^$doc
+||vbucks.cloud^$doc
+||absent-pretty.net^$doc
+||ahmrispfewmkhbwz.com^$doc
+||aim-all.com^$doc
+||breeding-ashes.com^$doc
+||every0028.jp^$doc
+||flash0007.jp^$doc
+||grasshoppermirro.com^$doc
+||nuts.sugar1105.com^$doc
+||propro.promise-p-roror-452.com^$doc
+||right-off.com^$doc
+||tatuieaawtkjnxzj.com^$doc
+||vacuumcleanerani.com^$doc
+||prc.pr-e-c-i-o-us.com^$doc
+||vghe0-ed7-d.com^$doc
+||kounnomichishirube.net^$doc
+||lucksignpost0804.org^$doc
+||lightning02s.com^$doc
+||lightning0707.com^$doc
+||jkytd-rd3.com^$doc
+||le.tter99.com^$doc
+||silversex.com^$doc
+||flirttime.com^$doc
+||eyesput55.com^$doc
+||scene7goal3.work^$doc
+||all-friends0817.com^$doc
+||ma-rry.net^$doc
+||ma-rry.site^$doc
+||altdorfer-niklaus.com^$doc
+||cherish.royal-loyalty.com^$doc
+||eliminateabyss.com^$doc
+||lucky-star69.com^$doc
+||lucky-star8.com^$doc
+||tulip-tulip.net^$doc
+||koinik.net^$doc
+||ukylcim.top^$doc
+||shop20.cheapsalesstore2023.com^$doc
+||gallery-sight.com^$doc
+||yurizono.com^$doc
+||9gcpz8hu.com^$doc
+||bobonheur.com^$doc
+||cit-rine.com^$doc
+||ctn-ctn.com^$doc
+||holy-kantei.com^$doc
+||sk3-renew.com^$doc
+||unki-max.com^$doc
+||boost6182ll.com^$doc
+||eir.tdhg7ppa.com^$doc
+||grea-fd12dr.com^$doc
+||cpd.ipllo4ys.com^$doc
+||htjrs-fgds.com^$doc
+||recklessdroughtburglar.com^$doc
+||the-match.jp^$doc
+||ambition-1122.com^$doc
+||decision-1122.com^$doc
+||grateful-1122.com^$doc
+||intimate-1122.com^$doc
+||superior-1122.com^$doc
+||arms-1122.com^$doc
+||dawn-1122.com^$doc
+||gain-1122.com^$doc
+||live-1122.com^$doc
+||soar-1122.com^$doc
+||axis073236.com^$doc
+||gekkei-jyu-gekkei-jyu.com^$doc
+||gekkeijyu-gekkeijyu.com^$doc
+||lemonadebb.net^$doc
+||naruf4253090.com^$doc
+||ev4ev.biz^$doc
+||evkakuri2308.click^$doc
+||gtex3.com^$doc
+||nice.par-even.com^$doc
+||pr-0m.link^$doc
+||wa-nago-wagona.com^$doc
+||chi-yo-1807chiyo.com^$doc
+||fd-2.shop^$doc
+||cuddle.koi-ba-na.com^$doc
+||globalreward77.com^$doc
+||jukukoi.jp^$doc
+||jukukoi.me^$doc
+||buono2023-web.com^$doc
+||a3-1089115.com^$doc
+||cloud3-3679244.com^$doc
+||d3-8692227.com^$doc
+||ic-05lion.com^$doc
+||m3-8498263.com^$doc
+||michi-fortune.jp^$doc
+||miemashita.jp^$doc
+||p3-5723935.com^$doc
+||s3-8388725.com^$doc
+||x3-001-8103.com^$doc
+||x3-228-1713.com^$doc
+||lovely-lovely.com^$doc
+||shareno1wish.net^$doc
+||cue-find.com^$doc
+||d-position.com^$doc
+||d-position.shop^$doc
+||kaiunnookite.com^$doc
+||bs-03-6743-2266.net^$doc
+||love2-mail.com^$doc
+||gokinjoscreen.com^$doc
+||koun-wa.com^$doc
+||koto-dama-kin.com^$doc
+||one----talk.com^$doc
+||pc.deainobasyo.jp^$doc
+||tokimeki-2nd-life.com^$doc
+||ewfwetqfbhmlodz.com^$doc
+||wkcs.onesmbg-login.com^$doc
+||bs-03-6743-2266.net^$doc
+||love2-mail.com^$all
+||koto-dama-kin.com^$doc
+||mariage-inc.com^$doc
+||tokimeki-2nd-life.com^$doc
+||mariage-inc.com^$doc
+||tenmei-michibiki.com^$doc
+||10vekatu.jp^$doc
+||a-ro-ma.com^$doc
+||a1tai7.jp^$doc
+||atchao.jp^$doc
+||bestchat-chat.com^$doc
+||brs.bi09aso-yo.xyz^$doc
+||brs.vacat81-best.tokyo^$doc
+||chu-chu.jp^$doc
+||deai-labo.site^$doc
+||enenkatukatumail.com^$doc
+||enjoylife2001.net^$doc
+||ffr548tyfhe.jp^$doc
+||fure-i.site^$doc
+||k0k0cha.link^$doc
+||ir0d0r1.jp^$doc
+||lovelyhappy.jp^$doc
+||lovemelo.net^$doc
+||ma-t-chy.link^$doc
+||maiwa12.jp^$doc
+||mat-chy.site^$doc
+||me08mo.com^$doc
+||media-matchinggo.com^$doc
+||meltiest.jp^$doc
+||meltylove.jp^$doc
+||mem44.com^$doc
+||merukore.jp^$doc
+||moremoremail.net^$doc
+||p-pure.jp^$doc
+||p0cket1ove.jp^$doc
+||p0rte.site^$doc
+||pairife.jp^$doc
+||platinumpla2023.com^$doc
+||riarialuvluv2023.com^$doc
+||romance-time.net^$doc
+||sez-pr.com^$doc
+||soklove.net^$doc
+||sugulove777.com^$doc
+||ta0dal0ve.com/^$doc
+||ta1kcall.site^$doc
+||tada-love.jp^$doc
+||tokimekitaine.net^$doc
+||tokimekimaildesu.net^$doc
+||tokumeichat135.net^$doc
+||tokumeichatmail.net^$doc
+||tsumatsuma.xyz^$doc
+||olive-ft.jp^$doc
+||fortuna-destiny.com^$doc
+||fountain-unmei.com^$doc
+||happylife-10uanai.com^$doc
+||holy-12seizaholy.com^$doc
+||shiawasenokotae.com^$doc
+||super-spfortune.com^$doc
+||uranai-fulfilledfuture.com^$doc
+||welcome-happyroad.com^$doc
+||az-l.com^$doc
+||luna-t.net^$doc
+||sm-bt.net^$doc
+||sm-heaven.com^$doc
+||smdotcom.com^$doc
+||seselagi.com^$doc
+||nc2.site^$doc
+||recipe000.tokyo^$doc
+||next.nexus2222.com^$doc
+||5y4-hters-765.jp^$doc
+||h5t4rsw-htrs.jp^$doc
+||h6t4sw-nhytd.jp^$doc
+||neyr5s-e45f.jp^$doc
+||uj6y5defg.jp^$doc
+||y54wdrg.com^$doc
+||peach2023.net^$doc
+||gokinjo---hot.com^$doc
+||iwish.ltd^$doc
+||matchin.site^$doc
+||metalepsa.me^$doc
+||nysoctieotion.tech^$doc
+||peroiramus.me^$doc
+||www.academicsingles.jp^$doc
+||ado.wish-best.com^$doc
+||ga6jkbl.jp^$doc
+||keiunkan.com^$doc
+||matching-search.jp^$doc
+||matching-searchh.jp^$doc
+||falsettoy.click^$doc
+||on-li-ne.net^$doc
+||rayon-mid.com^$doc
+||pc.mt3sys.com^$doc
+||as25ap.com^$doc
+||asap15.com^$doc
+||sm8787.com^$doc
+||pc.line-center.jp^$doc
+||pc.peach1ink.jp^$doc
+||felicitaline.com^$doc
+||foretheure.jp^$doc
+||alt.com^$doc
+||keenchimairaanthem.com^$doc
+||pc.h1ma.jp^$doc
+||pc.ta1k.jp^$doc
+||63jehxd5vfi6.jp^$doc
+||imiqmcyj4wjj.jp^$doc
+||kev8ffh2n9a8.jp^$doc
+||qeucuzpbv6jq.jp^$doc
+||ccappu-ccinno.com^$doc
+||ccappuccinno.com^$doc
+||happiness-road.net^$doc
+||daddyclub.net^$doc
+||papamagic.net^$doc
+
+! https://twitter.com/1ZRR4H/status/1623067548781539339
+||soft-pro.site^$all
+||exp-pc.com^$all
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/142492
+||apkmirror.co^$all
+||webogram.org^$all
+||webogram.ru^$all
+||xn--80affa3aj0al.xn--80asehdb^$all
+||telegr.am/user_mgt/login$all
+||tgram.ru^$all
+||telegramm.site^$all
+||web-telegram.net^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/15793
+! https://github.com/blocklistproject/Lists/issues/933
+||p5tvhrlw30h.click^$all
+||8narwi309.click^$all
+||sbjjzdwqg41ps.click^$all
+||9bghqk3avg2gnh.click^$all
+||6t09fag307ep.click^$all
+||zjzxtmhcldsb.click^$all
+||keychauoic.click^$all
+||80fvj17ws14n.click^$all
+||khw6g09fx28k.cfd^$all
+||49gw5gonj143k.click^$all
+||djxd2ox30l7.click^$all
+||2ajsvd12.com^$all
+||vgfrrtc.click^$all
+||vablecable.click^$all
+||rosterfile4u.click^$all
+||a18n5nh14xos.click^$all
+.click/?s=*&g=*&q=files.zip$doc
+.click/*?s=*&g=*&q=$script,3p
+.click/?h=*&user=$script,3p
+.click/?user=*&h=$script,3p
+.click/*/?partner=*&pg=$script,3p
+.xyz/*?s=*&g=*&q=$script,3p
+.xyz/?h=*&user=45$script,3p
+.xyz/*/?partner=*&pg=$script,3p
+.cfd/?h=*&user=$script,3p
+.cfd/?aD*HlwZT1jJnRtcD01JmFkY29kZT0x$script,3p
+.one/?h=*&user=$script,3p
+.online/?h=*&user=$script,3p
+.pro/?h=*&user=$script,3p
+
+! https://github.com/uBlockOrigin/uAssets/pull/16764#issuecomment-1431353276
+||xfiley.me^$all
+!#if !env_mobile
+||n.fcd.su^$all
+!#endif
+
+! https://app.any.run/tasks/679e9afa-eb19-4414-a086-e280a779a448 and https://tria.ge/230217-xd8nksgc9x/behavioral2
+||ru-torproject.ru^$all
+||anapatformacion.org/modules/file/tor/tor-browser.zip^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/16397
+/^https:\/\/[a-z]+\.com\/away\.php\?url=[%0-9A-z]{100,}$/$doc
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/143447#issuecomment-1438352020
+||a-new86.com^$all
+||ane102.net^$all
+||honey888.love^$all
+||ima55notice.biz^$all
+||infozoomplus.biz^$all
+||koi2ru.com^$all
+||likechat33.net^$all
+||likechat33call.net^$all
+||pair55.net^$all
+||pair55call.net^$all
+||room2021.net^$all
+||roomoshirase.net^$all
+||smore91.net^$all
+||som419.net^$all
+||touchoshirase.net^$all
+||touchtacchi.net^$all
+||wsws1234.net^$all
+||wswsnews.net^$all
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11s92xa/
+! https://www.virustotal.com/gui/url/e1d9aadb5c1f979f0c83a54015cf84cda2da0fa9c4b452c6dabe62deeb70add5/detection
+||s3.amazonaws.com/extpro/speed4.html$all
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11s92xa/badware_risks_page_request_malware/jceopse/?context
+! https://pastebin.com/t3z1m0tN
+! https://www.virustotal.com/gui/url/2fb57656f55db6d335696767de2d73693a31148429ef6b51b97c01e43563a8ee
+! https://www.virustotal.com/gui/url/7f8f874b486a656948944aa205c75fc490cff1235f1114e067f161e69f0bcbb9
+||imgfarm.com/images/dlp2/prod$3p
+||myway.com^$all
+/anemone-*.min.js$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/1204r6t/
+! https://www.virustotal.com/gui/url/9c3e71b70367a121e5163602a0b8ffe67417f3c6e5f83ce32ca812a87e70a322
+||adblockers.b-cdn.net^$all
+||pleasetrack.com^$all
+
+! https://www.reddit.com/r/uBlockOrigin/comments/1212vbf/
+! https://www.virustotal.com/gui/file/001724988888ce452750961d9f0d6249945c42cf7d511467bcb57f2eec4fd9c9
+||tor-browser-rus.ru^$all
+
+! techsupport scam
+/?{BV_SRCID}&$doc
+/werrx01/^$doc
+/merrx01/^$doc
+||ondigitalocean.app/*^phone=+1-$doc
+||flexedfitt.com^$all
+.online/*/eeeekayresrsammicraaajkaschhoilsebadhiyakuchtanahiaayaajturuionmeebbat/$doc
+||plesk.page/*?phone=$doc
+||satttawishonemottorecepi.online^$all
+/Win0xixm07/?phone=$doc
+/DanBEr000CH0Er0Security07/index.html$doc
+||sanshuni-creeto-senfunamaki.online^$all
+/asdfghjkl.tech/index.html$doc
+/mooncars/rover/chasra*/index.php$doc
+/systemerror-win-chx/?$doc
+/systemerror-win-chx1/?$doc
+/W*ity0*00Er00*/index.$doc
+||s3.ap-northeast-1.amazonaws.com/tedex.com/*/index.html$all
+||smarttvnew.vercel.app^$all
+/systemerror-mac/?$doc
+/Win0SecurityEr0CH0700Err0rSt/index.html$doc
+/werrx01/index.html$doc
+||activexsportswear.com^$all
+||besttreasurecoastroofing.com^$all
+||eharmonysingle.online^$all
+||errorordufhwe.s3.ap-south-1.amazonaws.com^$all
+||microsoftsupportservices.com^$all
+||teszoom.com^$all
+||tiffanyandtoke.com^$all
+||yewojoshi.shop^$all
+||s3.ap-northeast-2.amazonaws.com/%*!!%*/index.html$doc
+||s3.amazonaws.com/securityfotrus.1.13/index.html$all
+||s3.eu-west-2.amazonaws.com/675.88.u6.8878/index.html$all
+||s3.us-west-1.amazonaws.com/security.uni.firewall.$all
+! apparently hacked and turned to a joke techsupport scam
+||westernbible.edu^$doc
+/Win00Security07/index.html$document
+||varchardetection777.site^$all
+||xngqoc.com^$all
+/Er0Wind0fsd0Security087/index.html$doc
+||chuberanetto.tech^$all
+||starglaxyheritez.tech^$all
+||websafety.online^$all
+||chuibesumeru.shop^$all
+||windwserror.com^$all
+||popts.site^$all
+||cnctddot.com^$all
+||woocommerce-sagepayments.com^$all
+||mct-niger.com^$all
+||julitaczerwinska.pl^$all
+||klinikmrc.com^$all
+||govimpot.com^$all
+||premiumexpertclass87.xyz^$all
+||pressanddresses.com^$all
+||hrmntrimagukeazctesto.shop^$all
+||stb-media.xyz^$all
+||compass-holding.com^$all
+||pguilford.com^$all
+||theweddingmahotsav.com^$all
+||xac2gjx.autos^$all
+||detailsreceipts.com^$all
+||hodllane.com^$all
+||hiddenamonghearts.com^$all
+||stowesupperclub.com^$all
+||185.161.248.253^$all
+||auditedmicros.website^$all
+||checkedservices.website^$all
+||tumhiho.site^$all
+||chutkeliye.online^$all
+||golovanov.net^$all
+||kimarikasta.online^$all
+||lucasmrahman.xyz^$all
+||odarimasta.online^$all
+||processprivate.website^$all
+||tobyaburton.xyz^$all
+||votuporn.cfd^$all
+||yaravoyara.online^$all
+||microagent.site^$all
+||165-227-173-120.plesk.page^$all
+||horporn.cfd^$all
+||dare2life.click^$all
+||pushlandings.b-cdn.net^$all
+||ssupp2.site^$all
+||webaudhar.online^$all
+||asian-maturedates.click^$all
+||flextd.shop^$all
+||pirocarsrepo.site^$all
+||64-226-126-114.plesk.page^$all
+||boomdates.online^$all
+||erroarwasuppoto.world^$all
+||fastndio.s3.eu-central-1.amazonaws.com^$all
+||ikiped.online^$all
+||mockgopickers.com^$all
+||pub-77106c9273be4f3fbec6b6d6c3c51b7f.r2.dev^$all
+||hosterunozxxxna.shop^$all
+||dbslfqowejd.b-cdn.net^$all
+||ghrthryh.b-cdn.net^$all
+||sok-rev.b-cdn.net^$all
+||antisoftjapan.site^$all
+||erroarwasuppoto.life^$all
+||updatemybrowser.website^$all
+||saludoads.com^$all
+||janganhackya.com^$all
+||jantalabh.online^$all
+||viewmerit.info^$all
+||blexad.shop^$all
+||xoty55.cfd^$all
+||dumbabd.online^$all
+||alewis.sbs^$all
+||edeyk.sbs^$all
+||edfzh.sbs^$all
+||tanhes.sbs^$all
+||tansxv.sbs^$all
+||tanvoa.sbs^$all
+||tanwmv.sbs^$all
+||kosbqn.sbs^$all
+||taniqj.sbs^$all
+||ahmxgv.sbs^$all
+||edluv.sbs^$all
+||koskdd.sbs^$all
+||liqftt.sbs^$all
+||s3.ap-northeast-1.amazonaws.com/ongoing.com/aanoitmessure/index.html^$all
+||foodhereandnow.com^$all
+||setkuttina.pages.dev^$all
+||liq27qbf.monster^$all
+||certificate-certificate.gettrials.com^$all
+||vasafreight.com/ajax.php?
+||kos8sceu.pics^$all
+||thin-skinned-cost.000webhostapp.com^$all
+||boring-tesla.149-102-231-176.plesk.page^$all
+||happy-diwali-sabhiko-shubhkamneyen.b-cdn.net^$all
+||qwudbhasdwq9h.sa.com^$all
+||soramabola.online^$all
+/^https:\/\/[0-9a-z]{12,16}\.azureedge\.net\/\d{4}\//$doc
+||fcukxxx.com^$all
+||xbasugigqiuegiwqdbsx.s3.ap-northeast-1.amazonaws.com^$all
+||popworldservice.com^$all
+||perutzxrqe.ru.com^$all
+||qwudbhasdwq8h.sa.com^$all
+||uwqghwfdwqywetqwfghewqeqweig.s3.ap-southeast-2.amazonaws.com^$all
+||baattakkkk.online^$all
+||assitechnique.net^$all
+||kelectricalservices.com^$all
+||fantastic-salamander-c721cb.netlify.app^$all
+||webinfo0-1.nyc3.cdn.digitaloceanspaces.com^$all
+||shishimishi.shop^$all
+||track7.online^$all
+||ondigitalocean.app/*/index.php?cezp=$doc
+||antiiv.wizbest.com^$all
+||amazonaws.com/*.*.*.*.*.*.*.*/*/index*.html$doc
+||secu.ursecurityfixed.com^$all
+||jp-helplineweb-chrsmjinfgtizonedswebs-01.s3.ap-southeast-2.amazonaws.com^$all
+||veczxoensena.z11.web.core.windows.net^$all
+||germanytechsupport.pages.dev^$all
+||systemsupport.pages.dev^$all
+||techsupport-ev2.pages.dev^$all
+||pub-3b4d978c14114185847089b100168c84.r2.dev^$all
+||d3iaejhzpzsyle.amplifyapp.com^$all
+||31snowmeprona.ru.com^$all
+||99snowmeprona.sa.com^$all
+
+! https://insight-jp.nttsecurity.com/post/102ic6o/webgoogle-chrome
+||gateway.pinata.cloud^$3p
+
+! https://twitter.com/genegene1234561/status/1647164176438280192
+||japanonlinebroadcast.live^$all
+
+! https://www.reddit.com/r/uBlockOrigin/comments/12ng4o8/
+! https://www.virustotal.com/gui/url/fe6b4bc7a258a92a97ad3216c85d159857ccd581df9b31a50a308ca49f967e34
+! https://www.virustotal.com/gui/url/0d491da362effc08d2b026f32242046d174165e7995abbde6917ef7864a7556c
+||crackedpc.org^$all
+||cracksway.com^$all
+
+! https://www.reddit.com/r/uBlockOrigin/comments/12r255v/gamingnewsanalystcom_badware/
+! https://github.com/uBlockOrigin/uAssets/pull/17655
+||gamingnewsanalyst.com^$all
+||gamingdebates.com^$all
+
+! https://www.reddit.com/r/uBlockOrigin/comments/12vi0jy/
+! https://www.virustotal.com/gui/url/e705e6e86261849df50f80f32db2bb74abb1f69fd2681a370c5013be27c9daf0
+! https://www.virustotal.com/gui/file/f1e859d99072e35f20e172d8458e3ea1baf8ba86c8c9e311a0debcd2acd5d0fc
+||bonzi.link^$all
+
+! https://www.reddit.com/r/uBlockOrigin/comments/1314r3d/
+! https://www.virustotal.com/gui/url/23a6e05b5c2005b085b2cb41f35cddf2e689d72797448dd8c7399f7f929507e0
+||bestgames-2022.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/17869
+||videoadblocker.pro^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/17947
+! https://www.virustotal.com/gui/domain/pccdirect.site
+! https://safeweb.norton.com/report/show?url=pccdirect.site
+||pccdirect.site^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/17960
+! https://malwaretips.com/blogs/remove-template-search-newtab/
+! https://www.virustotal.com/gui/domain/templatesearch.org
+||templatesearch.org^$all
+
+! https://www.reddit.com/r/uBlockOrigin/comments/13a95k2/
+! https://www.virustotal.com/gui/url/dfe9c3f9bf87d003c70fecae8012b9fe4858a3922e6218b05a672fd3fe7f140e
+! https://safeweb.norton.com/report/show?url=f-i-n-d.onlyfuns.win
+! https://sitecheck.sucuri.net/results/f-i-n-d.onlyfuns.win
+||f-i-n-d.onlyfuns.win^$all
+! https://safeweb.norton.com/report/show?url=search-journal.onlyfuns.win
+! https://urlscan.io/result/826671e6-126b-4113-82e3-24d96469bd93/
+! https://sitecheck.sucuri.net/results/https/search-journal.onlyfuns.win/ydt
+! https://www.virustotal.com/gui/domain/search-journal.onlyfuns.win
+! https://www.virustotal.com/gui/domain/ftx.onlyfuns.win
+||search-journal.onlyfuns.win^$all
+||ftx.onlyfuns.win^$all
+! https://www.virustotal.com/gui/domain/starssp.top
+||starssp.top^$all
+! https://www.virustotal.com/gui/domain/adultpics.wiki
+||adultpics.wiki^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/18103
+! https://www.virustotal.com/gui/file/1f4f7b787ee329059e4de4487ba5c17c7c6ca3be95b72c9873fc9380632fa1f9/
+! https://www.virustotal.com/gui/domain/d2r3dgsh5nr4kg.cloudfront.net
+! https://www.virustotal.com/gui/domain/gamefabrique.com
+! https://otx.alienvault.com/indicator/domain/gamefabrique.com
+! https://opentip.kaspersky.com/gamefabrique.com
+! https://safeweb.norton.com/report/show?url=gamefabrique.com
+! https://www.urlvoid.com/scan/gamefabrique.com/
+||gamefabrique.com^$all
+||d2r3dgsh5nr4kg.cloudfront.net/installer/$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/18141
+||skytils.net^$all
+||skyblockmaniacs.net^$all
+||fragbots.net^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/18208
+||hard-configurator.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/18332
+! https://github.com/uBlockOrigin/uAssets/issues/18333
+||filmshngjbzix.blogspot.com^
+! https://www.virustotal.com/gui/domain/mopiez.com
+||mopiez.com^
+! https://www.virustotal.com/gui/domain/goglel.com
+||goglel.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/18353
+||easylist.club^$all
+
+! https://github.com/uBlockOrigin/uAssets/pull/18388
+! https://www.forbes.com/sites/jacksonweimer/2021/04/10/that-twitter-family-tree-trend-is-secretly-following-random-accounts--without-your-consent
+||roundyearfun.org^$all
+||roundyearfun.com^$all
+||anyplacehere.me^$all
+||funaroundy.click^$all
+||anyplacehere.live^$all
+||funtwitter.games^$all
+||twitter-circle.com^$all
+||funroundy.click^$all
+||twitterfun.games^$all
+||funxgames.site^$all
+||funroundy.online^$all
+||funxgames.me^$all
+||anyplacehere.store^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/18380
+||bestextensionegde.com^$all
+
+! https://github.com/DandelionSprout/adfilt/discussions/779#discussioncomment-6298369
+||anglebank.space^$all
+.com/api/users?token=*&uuid=&pii=&in=false^$doc
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/158317
+||asdmcm.com^$all
+.com/bot-captcha-1?h=$doc
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/159825
+/^https:\/\/[a-z]{5,7}\.[0-9a-z]{12}\.top\/[0-9a-f]{32}\/[0-9-a-f]{32}\/$/$doc,match-case,domain=top
+/\/[0-9a-f]{32}\/maq\/$/$doc,match-case,domain=com|top
+/antivirus/main/cleaner-default/*$doc
+
+! Copycat and fake sites
+! FitGirl Repacks - Official site: fitgirl-repacks.site
+! https://old.reddit.com/r/FitGirlRepack/
+! https://old.reddit.com/r/PiratedGames/comments/drlx3r/does_anyone_know_the_official_website_for_fitgirl/
+! https://old.reddit.com/r/CrackWatch/comments/wl7nfb/dream_cycle_v209_release_fitgirl_repack_158_gb/?context=3
+! https://github.com/uBlockOrigin/uAssets/issues/15085
+! https://github.com/uBlockOrigin/uAssets/pull/15850
+||fitgirl-repacks.*^$all,domain=~fitgirl-repacks.site,to=~fitgirl-repacks.site
+||fitgirl-repack.*^$all,domain=~fitgirl-repacks.site
+||fitgirlrepacks.*^$all,domain=~fitgirl-repacks.site
+||fitgirlrepack.*^$all,domain=~fitgirl-repacks.site
+||fitgirls-repack.*^$all,domain=~fitgirl-repacks.site
+||fitgirl-repacks-site.org^$doc,domain=~fitgirl-repacks.site
+! https://github.com/uBlockOrigin/uAssets/issues/18205
+||fitgirlrepacksite.com^$all,domain=~fitgirl-repacks.site
+! https://github.com/uBlockOrigin/uAssets/issues/18206
+||fitgirl.cc^$all,domain=~fitgirl-repacks.site
+! https://github.com/uBlockOrigin/uAssets/issues/21658
+||fitgirlrepackz.*^$all,domain=~fitgirl-repacks.site
+! Magisk manager - Official site: https://github.com/topjohnwu/Magisk
+! https://xda-developers.com/psa-magiskmanager-com-not-official-website-magisk/
+! https://forum.xda-developers.com/t/downloaded-a-fake-magisk.4581461/
+! https://old.reddit.com/r/Android/comments/7r346t/psa_magiskmanagercom_is_not_the_official_website/
+! https://github.com/topjohnwu/Magisk/issues/3435
+! https://github.com/hagezi/dns-blocklists/issues/1744
+||magiskmanager.com^$all
+||magisk.me^$all
+||magiskapp.com^$all
+||magiskroot.com^$all
+||magiskroot.net^$all
+||magisks.com^$all
+||themagisk.com^$all
+||magiskzip.*^$all
+||magiskmodule.com^$all
+||magiskmanagerroot.com^$all
+||magisk.download^$all
+||magiskmanager.com^$all
+||magisk.info^$all
+! LibreTube - Official site: libretube.dev
+! https://github.com/libre-tube/LibreTube/issues/4409
+||libretube.*^$all,domain=~libretube.dev,to=~libretube.dev
+||libretubeapk.com^$all,domain=~libretube.dev
+! ReVanced - Official site: revanced.app
+! https://old.reddit.com/r/revancedapp/comments/1327o38/list_of_fake_revanced_sites_download_sites/
+! https://old.reddit.com/r/AfterVanced/comments/wf4ov1/the_raftervanced_faq_frequently_asked_questions/
+! https://github.com/revanced/revanced-discussions/discussions/854#discussioncomment-4565731
+! https://safeweb.norton.com/report/show?url=revanced.io
+! https://sitecheck.sucuri.net/results/revanced.io
+! https://github.com/uBlockOrigin/uAssets/pull/17469
+! https://github.com/uBlockOrigin/uAssets/issues/18857
+! https://github.com/uBlockOrigin/uAssets/pull/19580
+||revanced.*^$all,from=~revanced.app,to=~revanced.app
+||revancedapk.*^$all,domain=~revanced.app
+||revancedapp.*^$all,domain=~revanced.app
+||ytvancedpro.com^$all,domain=~revanced.app
+||youtubevanced.*^$all,domain=~revanced.app
+||youtuberevanced.*^$all,domain=~revanced.app
+||re-vanced.com^$all,domain=~revanced.app
+||revancedio.com^$all,domain=~revanced.app
+||revanceddl.com^$all,domain=~revanced.app
+||revancedapp.net^$all,domain=~revanced.app
+||revancedmusic.com^$all,domain=~revanced.app
+||revancedyoutube.org^$all,domain=~revanced.app
+||revancedextend.com^$all,domain=~revanced.app
+||revancedextended.*^$all,domain=~revanced.app
+||revanced-extended.com^$all,domain=~revanced.app
+||extendedrevanced.com^$all,domain=~revanced.app
+||youtuberevancedextended.com^$all,domain=~revanced.app
+||ytrevanced.*^$all,domain=~revanced.app
+||tuberevanced.com^$all,domain=~revanced.app
+||vanced-official.com^$all,domain=~revanced.app
+||vanced.pro^$all,domain=~revanced.app
+||vancedmanager.*^$all,domain=~revanced.app
+! LuckyPatcher - Official site: luckypatchers.com
+! https://old.reddit.com/r/luckypatcher/comments/rawq9f/what_is_the_official_website/
+! https://old.reddit.com/r/luckypatcher/comments/aln5tj/official_download_for_lucky_patcher/
+||luckypatchers.net^$all,domain=~luckypatchers.com
+||luckypatcherwin.com^$all,domain=~luckypatchers.com
+! Balena Etcher - Official site: etcher.balena.io
+! https://forums.balena.io/t/counterfeit-etcher-websites/274606/5
+||etcher.net^$all,domain=~etcher.balena.io
+||etcher.download^$all,domain=~etcher.balena.io
+||balenaetcher.*^$all,domain=~etcher.balena.io
+||balena-etcher.com^$all,domain=~etcher.balena.io
+! Vencord - Official site: vencord.dev
+! https://github.com/uBlockOrigin/uAssets/pull/19359
+||vencord.app^$all,domain=~vencord.dev
+
+! phishing https://www.virustotal.com/gui/url/8521a1e5b4269111fb1e98f2142739dad1d6fb42ddf5198597c68abfea395f7f/detection
+||reink2.top^
+
+! https://github.com/DandelionSprout/adfilt/discussions/779#discussioncomment-7137675
+||86pmafno21mst.com^$all
+||akyr3h9x5mb.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/20036
+! https://tria.ge/231010-1rdl5sfg68/behavioral1
+||tiger.qnews.media^$3p
+||imbolexabc.top^$all
+||s8bet.com^$doc
+/\.br\/(?:[a-z]{4,8}\/){1,2}\?(?:app|patt|videos?)=\S+\.shtml$/$doc,match-case,domain=gov.br
+/\.br/[a-z]{2,4}/[0-9a-z]{5}\.html$/$doc,match-case,domain=www.paranhos.ms.gov.br
+||camarauchoa.sp.gov.br/video/10*.html$doc
+||central156.osasco.sp.gov.br/video/video_$doc
+||crasp.gov.br/poker*.html$doc
+||cruzeiro.rs.gov.br/uploads/tinymce/files/files/Nova/video_$doc
+||diamantedonorte.pr.gov.br/slot/addressrjz-xtipv9qew.html$doc
+||paranhos.ms.gov.br/ios/waykls/$doc
+||ssp.sp.gov.br/ead/*/video/video_$doc
+cmpa.mg.gov.br##+js(noeval-if, p=p.replace)
+cambe.pr.gov.br,paranhos.ms.gov.br##^script[language][type]:has-text(window.location.href)
+c0c9d.cmi.rj.gov.br,cambe.pr.gov.br##^responseheader(location)
+||azure.z97z.com/go.html$doc
+||br.zmdesf.cn/br.js
+||js.eventbr.xyz/vip/crazy.js
+||sites.uft.edu.br/topama/news.php$doc
+||pmf.sc.gov.br/arquivos/br.php
+||070880.com/br.js
+
+! https://www.virustotal.com/gui/ip-address/192.227.206.89/relations
+||cutterbijes.com^$all
+||dhotelzao.com^$all
+||tamilislamgate.com^$all
+
+! https://tria.ge/231024-3lc5jace3w/behavioral1 & https://tria.ge/231024-3s7ygsbg39/behavioral1
+! https://github.com/uBlockOrigin/uAssets/pull/20272
+||adblock1.com^$all
+||newupdatesnow.com^$all
+||thefinanceadvice.com^$all
+||fralstamp-genglyric.icu^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/20335
+||ilil.in^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/20389
+||ruiukp.top^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/20400
+||ets2.gr^$all
+
+! Cryptocurrency Scams
+||unitradingbot.com^$all
+||unitradingtool.info^$all
+||cealits.com^$all
+||eventdrops.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/21257
+||elemateletronic.click^$all
+
+! https://github.com/uBlockOrigin/uAssets/pull/21315
+! https://bbs.kafan.cn/thread-2258753-1-1.html
+||chromegoogle.cn^$all
+
+! https://github.com/uBlockOrigin/uAssets/pull/21316
+! https://bbs.kafan.cn/thread-2262861-1-1.html
+||mk90.shop^$all
+
+! Cryptocurrency Scams
+||mevnow.com^$all
+||mevtime.com^$all
+||eth-mev.com^$all
+||nitroshiba.com^$all
+||blast-drops.com^$all
+||starkfond.net^$all
+
+! https://github.com/uBlockOrigin/uAssets/pull/21539
+||stalkforx.ru^$all
+||stalktoolss.ru^$all
+||stalkanalysis.ru^$all
+
+! Cryptocurrency Scams
+||pepzk-community.xyz^$all
+
+||arbitragebot.team^$all
+||arbitrageinstruction.media^$all
+||arbitrageproject.blog^$all
+||autotradeguide.pro^$all
+||botarbitrages.pro^$all
+||ethmevbot.com^$all
+||ethmevsetup.group^$all
+||guidesetup.pro^$all
+||mevfrontbot.info^$all
+||mevsetup.site^$all
+||publicbot.pro^$all
+||setupbot.info^$all
+||strategyarbitrages.pro^$all
+||tradingstart.pro^$all
+||uni-setup.media^$all
+||uni-trading.pro^$all
+||uniguide.media^$all
+||unisettings.pro^$all
+||uniswapbot.team^$all
+||uproject.team^$all
+||web-instruction.team^$all
+||webarbitraging.pro^$all
+||0x00000000000.substack.com^$all
+||etharticles.substack.com^$all
+||publicationgroup.substack.com^$all
+||teamproject.substack.com^$all
+||tradestrategy.substack.com^$all
+||uniproject.substack.com^$all
+||web3projects.substack.com^$all
+||webpublic.substack.com^$all
+
+! Phishing - See https://bbs.kafan.cn/thread-2264176-1-1.html
+! https://github.com/uBlockOrigin/uAssets/pull/21760
+||qqniiml.qqacc.art^$all
+
+! Phishing - See https://bbs.kafan.cn/thread-2264505-1-1.html
+! https://github.com/uBlockOrigin/uAssets/pull/21759
+||counter-strike2-official.net^$all
+
+! https://transparencyreport.google.com/safe-browsing/search?url=http:%2F%2Fapp0w.ltd%2F
+! http://telegram.app0w.ltd/?rcd=c61d5 - Scam telegram
+||app0w.ltd^$all
diff --git a/uAssets/filters/filters-2020.txt b/uAssets/filters/filters-2020.txt
new file mode 100644
index 0000000..ada5206
--- /dev/null
+++ b/uAssets/filters/filters-2020.txt
@@ -0,0 +1,4574 @@
+! Title: uBlock filters (2020)
+! Last modified: %timestamp%
+! Description: Filters optimized for uBlock, to be used along EasyList
+! Homepage: https://github.com/uBlockOrigin/uAssets
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+! new filters from april 2020 to ->
+!
+! GitHub issues: https://github.com/uBlockOrigin/uAssets/issues
+! GitHub pull requests: https://github.com/uBlockOrigin/uAssets/pulls
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53254
+*$script,redirect-rule=noopjs,domain=arcai.com
+! https://github.com/uBlockOrigin/uAssets/issues/19325
+arcai.com##+js(no-fetch-if, googlesyndication)
+arcai.com##+js(set, Object.prototype.m_nLastTimeAdBlock, undefined)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53287
+de-baystars.doorblog.jp##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53288
+azm.to##+js(aopr, mm)
+*$script,3p,denyallow=jquery.com|hwcdn.net|plyr.io|fastly.net|jwpcdn.com|googleapis.com|zencdn.net|hcaptcha.com,domain=azm.to
+||commentsengine.com^$3p,script,redirect=noopjs
+
+! https://github.com/NanoMeow/QuickReports/issues/3528
+mysflink.blogspot.com##+js(set, safelink.adblock, false)
+mysflink.blogspot.com##+js(nano-sib)
+
+! https://github.com/NanoMeow/QuickReports/issues/3531
+sofwaremania.blogspot.com##+js(nano-stb)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53313
+jav1080.com##div.boxzilla, .boxzilla-overlay, [href^="https://adsxyz.com/"]
+jav1080.com###custom_html-3
+jav1080.com###custom_html-4
+/300x250.html|$frame,3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53306
+@@||zt-protect.*^$ghide
+zt-protect.*##ins.adsbygoogle
+zt-protect.*##main.py-4:style(min-height:0px !important)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53366
+l2db.info##+js(nowoif)
+||l2db.info/uploads/banners/$image
+l2db.info##.branding
+l2db.info##[href^="https://overworld.pro/"]
+l2db.info###wrapper-content:style(margin-top:0px !important)
+l2db.info##[href*="adv"]
+l2db.info##[href^="https://castle-town.net/ru"]
+
+! https://github.com/NanoMeow/QuickReports/issues/3538
+psychic.de##+js(nostif, offsetHeight)
+
+! https://github.com/NanoMeow/QuickReports/issues/3540
+10convert.com##+js(aopr, HTMLIFrameElement)
+
+! https://github.com/NanoMeow/QuickReports/issues/3542
+my-code4you.blogspot.com##+js(nostif, offsetLeft)
+my-code4you.blogspot.com##+js(set, config.pauseInspect, false)
+*$script,redirect-rule=noopjs,domain=my-code4you.blogspot.com
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/476
+! https://github.com/uBlockOrigin/uAssets/issues/7393
+made-by.org##+js(nostif, ads)
+*$xhr,redirect-rule=nooptext,domain=made-by.org
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53420
+@@||rnbxclusive.*^$ghide
+@@||rnbxclusive1.*^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53430
+ilovephd.com##+js(set, adsbygoogle, null)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53432
+studyiqhub.com##+js(aopr, app_vars.force_disable_adblock)
+studyiqhub.com##+js(aopr, open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7218
+@@||notepad.pw^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/3553
+gosemut.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7221
+rexdlfile.com##+js(aopr, require)
+
+! art sites redirections, ads
+opisanie-kartin.com,painting-planet.com##+js(aopr, LieDetector)
+||edugrampromo.com^$3p
+||terrout9.biz^
+*/?pu=$script
+
+! https://github.com/NanoMeow/QuickReports/issues/3556
+1plus1plus1equals1.net,cooksinfo.com,heatherdisarro.com,thesassyslowcooker.com##+js(aopr, Date.prototype.toUTCString)
+
+! https://github.com/NanoMeow/QuickReports/issues/3561
+@@||video.adaptv.advertising.com/ad/*$xhr,domain=therealdeal.com
+
+! https://github.com/NanoMeow/QuickReports/issues/3563
+25yearslatersite.com##+js(set, jQuery.adblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7229
+helpnetsecurity.com##+js(acs, jQuery, Object)
+
+! https://github.com/NanoMeow/QuickReports/issues/3575
+thepiratebay.org##+js(aopr, exoJsPop101)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53580
+kollhong.com##+js(aopr, adBlockDetected)
+
+||cointiply.com^$3p
+||reingod.com^
+
+! rppk13baru.blogspot.com anti-adb
+rppk13baru.blogspot.com##+js(acs, addEventListener, blocker)
+
+! arabamob.blogspot.com anti-adb
+arabamob.blogspot.com##+js(acs, addEventListener, blocker)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53600
+*$script,redirect-rule=noopjs,domain=akunssh.net
+
+! https://github.com/NanoMeow/QuickReports/issues/3577
+videosection.com##+js(aopr, exoJsPop101)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53667
+techieway.blogspot.com##+js(acs, addEventListener, AdBlock)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53717
+pornfd.com##+js(nostif, innerText, 2000)
+pornfd.com##+js(aopr, console.clear)
+pornfd.com##+js(aeld, , bi())
+pornfd.com##.bannerImage
+pornfd.com##.sponsor
+||pornfd.com/*.php
+
+! https://github.com/NanoMeow/QuickReports/issues/3591
+||blogspot.com/*.gif$image,domain=uhuseries.com
+uhuseries.com##[href^="https://www.ufa191.com/"]
+uhuseries.com###fix_footer > picture > .lazyloaded
+||uhuseries.com/banner/$image
+aplayer.xyz,netuplay.xyz##+js(nowoif)
+aplayer.xyz##.popupfancy > div
+||proxy.cdend.com/*.mp4.m3u8$xhr,domain=aplayer.xyz
+
+! https://github.com/uBlockOrigin/uAssets/issues/7246
+skymovieshd.*##+js(aopr, __CF$cv$params)
+skymovieshd.*##+js(aopr, AaDetector)
+skymovieshd.*##+js(aeld, , _0x)
+skymovieshd.*##+js(set, D4zz, noopFunc)
+*$script,3p,domain=skymovieshd.*
+
+! https://github.com/NanoMeow/QuickReports/issues/2410
+! https://www.reddit.com/r/uBlockOrigin/comments/12vna68/flickr_ads/
+flickr.com##+js(set, appContext.adManager.context.current.adFriendly, false)
+flickr.com##.sub-photo-submoola-view
+flickr.com##section:has([href*="istockphoto.com"])
+flickr.com##.sub-photo-right-view [href^="/account/upgrade"]:upward(.sub-photo-right-view > div)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53762
+linkshrnk.com##+js(nosiif, visibility, 1000)
+linkshrnk.com##+js(aopr, app_vars.force_disable_adblock)
+linkshrnk.com##+js(set, blurred, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53792
+mydomainscan.com##+js(aopr, app_vars.force_disable_adblock)
+
+! fastpeoplesearch.com popups
+fastpeoplesearch.com##+js(nowoif)
+fastpeoplesearch.com##.sponsored, .ad-widget-container
+
+! https://github.com/NanoMeow/QuickReports/issues/3590
+*$media,3p,domain=hdd.moviefun24.com,redirect=noopmp3-0.1s
+
+! https://github.com/uBlockOrigin/uAssets/issues/7251
+pornky.com##+js(aopr, exoJsPop101)
+rexporn.*##+js(aeld, , pop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7258
+pleated-jeans.com##+js(aopr, HTMLIFrameElement)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53875
+leakgaming.fr##+js(nostif, .show(), 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53876
+@@||onbox.me^$ghide
+onbox.me##+js(nowoif)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/481
+flash-firmware.blogspot.com##+js(noeval-if, replace)
+
+! https://github.com/NanoMeow/QuickReports/issues/3602
+getmega.net##+js(aopr, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7259
+desktophut.com##+js(acs, document.getElementById, .style)
+blademaster666.com,fanproj.net,hot2k.com,luchoedu.org,lupaste.com,pornovenezolano.com.ve,romnation.net,venezporn.com##+js(aopr, TID)
+/sw.js$script,domain=desktophut.com|luchoedu.org|lupaste.com|pornovenezolano.com.ve|fanproj.net|qeylo.net|seriale-po-polsku.pl|blademaster666.com|venezporn.com|culonas.com.ve
+||cdnstaticpr.com^$3p
+##[href^="https://fireads.online/"]
+desktophut.com###loading-ad
+*$frame,redirect-rule=noopframe,domain=desktophut.com
+*$xhr,redirect-rule=nooptext,domain=desktophut.com
+
+! https://techthematter.xyz/Android/1164017-spotify-music-and-podcasts-8-6-80-1014-mod-clone-arm64-v8a.html timer
+techthematter.xyz###app
+techthematter.xyz###msg
+techthematter.xyz##a#link:style(display: block !important)
+!!!
+a-ads.com##.size300x250
+googlesyndication.com##.GoogleActiveViewElement:not(:has(> #reward_close_button_widget))
+googlesyndication.com##.GoogleActiveViewElement > div:not(#reward_close_button_widget)
+googlesyndication.com###abgb
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53896
+memoriadatv.com##+js(nano-stb)
+@@||memoriadatv.com^$ghide
+memoriadatv.com##ins.adsbygoogle
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53935
+@@||myzyia.com^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53969
+! https://github.com/uBlockOrigin/uAssets/issues/16109
+zone-annuaire.*##+js(aopr, mdpDeBlocker)
+zone-annuaire.*##[style^="font-weight"]:has-text(PREMIUM)
+||zone-annuaire.bond/main.js?v=$script,1p
+zone-annuaire.*##+js(nowoif)
+||zone-annuaire.hair/main.js?v=$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/7268
+notube.*,~notube.com##+js(ra, onClick)
+notube.*,~notube.com##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/3620
+*$script,redirect-rule=noopjs,domain=runmods.com
+runmods.com##+js(nano-sib)
+
+! https://github.com/NanoMeow/QuickReports/issues/3621
+gal-dem.com##+js(aopr, dsanity_ad_block_vars)
+
+! https://github.com/NanoMeow/QuickReports/issues/3595
+*$xhr,3p,domain=gayforit.eu
+||bestcontenttechnology.top^$3p
+
+! https://forums.lanik.us/viewtopic.php?p=154057#p154057
+forumconstruire.com#?#.post_simple:has(.postsimple_pseudo:has-text(/promo/i))
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54079
+bleachmx.fr##+js(aopr, mdpDeBlocker)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54109
+vstx.*##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/3634
+latitude.to##+js(nostif, show)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54096
+reifenrechner.at,tire-size-calculator.info##+js(aeld, load, nextFunction)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54186
+apkmb.com##+js(nano-sib, show_download_links)
+uploadking.net##+js(nano-stb, downloadbtn)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12739
+||pub.network^$script,redirect-rule=noopjs,domain=vrcmods.com
+vrcmods.com##+js(nano-sib, timeLeft)
+vrcmods.com##+js(nostif, height)
+vrcmods.com##+js(nosiif, height)
+vrcmods.com###download-form:style(display: initial !important;)
+vrcmods.com###app:style(display: none !important;)
+vrcmods.com###app_msg:style(display: none !important;)
+vrcmods.com##.show.fade.modal
+vrcmods.com##.show.fade.modal-backdrop
+
+! https://www.reddit.com/r/uBlockOrigin/comments/g6rcce/seeing_reverse_popups/
+leolist.cc##+js(nowoif)
+
+! teachersguidetn.blogspot.com/bayaningfilipino.blogspot.com/fileandsharing.com anti-adb
+teachersguidetn.blogspot.com,bayaningfilipino.blogspot.com##+js(acs, addEventListener, blocker)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54309
+firefile.cc##+js(set, blockAdBlock._options.baitClass, null)
+
+! https://github.com/NanoMeow/QuickReports/issues/2388
+@@||manhwa18.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/7283
+uploadhub.*##+js(nowoif)
+uploadhub.to##center
+*$script,3p,denyallow=bootstrapcdn.com|cloudflare.com,domain=uploadhub.*
+||birdconnection.site^
+||curverainstorm.website^
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54403
+verteleseriesonline.com##+js(aopr, adBlockDetected)
+verteleseriesonline.com##+js(nosiif, visibility, 1000)
+
+! flight-report .com anti adb
+! https://github.com/uBlockOrigin/uAssets/issues/16548
+flight-report.com##+js(nostif, offsetHeight)
+
+! ievaphone .com anti adb
+ievaphone.com##+js(acs, onload)
+
+! https://github.com/NanoMeow/QuickReports/issues/3669
+obsev.com##+js(aopr, HTMLIFrameElement)
+
+! https://github.com/NanoMeow/QuickReports/issues/3671
+pentruea.com##+js(nostif, mdp_deblocker)
+pentruea.com##+js(nostif, charAt)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54427
+akbardwi.my.id##+js(nosiif, visibility, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7287
+@@||heypikachu.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/3674
+mchacks.net##+js(nostif, checkAds)
+
+! https://github.com/NanoMeow/QuickReports/issues/3680
+uplink.my.id##+js(acs, document.getElementById, alert)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7290
+! https://github.com/uBlockOrigin/uAssets/issues/19862
+smutty.com##+js(nowoif)
+smutty.com##+js(rmnt, script, window.open)
+smutty.com##+js(ra, href, [href^="https://aj2218.online/"], stay)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54519
+coredp.com##+js(aopr, app_vars.force_disable_adblock)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54524
+! https://github.com/uBlockOrigin/uAssets/issues/9865
+why-tech.it##+js(nostif, fadeIn, 0)
+@@||why-tech.it^$ghide
+why-tech.it##ins.adsbygoogle
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54532
+techably.com##+js(acs, document.getElementById, adsbygoogle)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54565
+imintweb.com##+js(aopr, adBlockDetected)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54581
+@@||minorpatch.com^$ghide
+*$image,redirect-rule=1x1.gif,domain=minorpatch.com
+minorpatch.com##ins.adsbygoogle
+minorpatch.com##+js(acs, decodeURIComponent, checkAD)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/489
+kropic.com##+js(aopr, decodeURI)
+kropic.com##+js(aopr, LieDetector)
+kropic.com##+js(aeld, , _0x)
+kropic.com##^script:has-text('shift')
+kropic.com##^script:has-text(\'shift\')
+kropic.com##+js(acs, String.fromCharCode, 'shift')
+kropic.com##+js(nowoif)
+kropic.com##.newsbar_blue
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/491
+kvador.com##+js(aeld, , _0x)
+kvador.com##+js(aopr, open)
+kvador.com##.newsbar_blue
+||kvador.com/images/*.gif$image
+kvador.com###fadeinbox
+! https://github.com/uBlockOrigin/uAssets/issues/8411
+kvador.com##+js(aopr, loadTool)
+##[src^="https://forum.picbaron.com/Banner"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/7296
+@@||debrid-file.com^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54629
+||nexusbytes.com^$3p
+servedez.com##[id^="ad_"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/14049
+maccanismi.it##+js(noeval-if, show)
+
+! https://github.com/NanoMeow/QuickReports/issues/3708
+westmanga.info##+js(nowoif)
+*.gif$domain=westmanga.info,image
+
+! https://github.com/NanoMeow/QuickReports/issues/3711
+manytoon.com##+js(aopr, decodeURI)
+*$script,3p,denyallow=cloudflare.net|disqus.com|disquscdn.com|fastlylb.net,domain=manytoon.com
+||fzj3v7sch2xg5gosh60vpkrth5c6cngvj5ivd9kg5ajcdl2vlp2ocj5fjbto.me^
+manytoon.com##.ad
+
+! https://github.com/NanoMeow/QuickReports/issues/3713
+compsmag.com##+js(nostif, jQuery)
+
+! https://github.com/NanoMeow/QuickReports/issues/3714
+vulture.com##+js(aeld, /^(?:click|mousedown)$/, latest!==)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54668
+ilmeteo.it##+js(nostif, google_jobrunner)
+ilmeteo.it###banner-mnz-topleft:style(height: 80px !important)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/gb5683/antiadblock_notice_on_rangerboard/
+rangerboard.com##+js(acs, $, btoa)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54274
+beermoneyforum.com##+js(acs, $, Adblock)
+beermoneyforum.com##.is-active.overlay-container:has(div[data-position] > center > a)
+beermoneyforum.com##.samBackground:style(background-image:none !important)
+beermoneyforum.com##.samBackgroundItem.samItem
+beermoneyforum.com##body:style(overflow: auto !important)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54703
+bg-gledai.*##+js(nosiif, visibility, 1000)
+! https://www.reddit.com/r/uBlockOrigin/comments/11vtqib/
+bg-gledai.*##+js(aopr, chp_adblock_browser)
+@@||bg-gledai.*^$ghide
+/binance-banner.jpg$domain=bg-gledai.*
+bg-gledai.*##+js(acs, document.getElementById, adblock)
+bg-gledai.*###casing > center
+! https://www.reddit.com/r/uBlockOrigin/comments/197760n/adblock_detected_httpswwwbggledailive/
+bg-gledai.*##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/NanoMeow/QuickReports/issues/3718
+@@||lesechos.fr^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54722
+coinxfaucet.com##+js(aopr, adBlockDetected)
+
+! https://github.com/NanoMeow/QuickReports/issues/3721
+@@||ploudos.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/7301
+xnxxxvideos.co##+js(aopr, AaDetector)
+||xnxxxvideos.co/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/7301
+beegsexxx.com##+js(aopr, document.dispatchEvent)
+beegsexxx.com##.preview:has(> .prev > script[data-ad_sub])
+||tds.pornvideotop.com/general/exoclick-
+
+! https://github.com/uBlockOrigin/uAssets/issues/7301
+beeg.party##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7301
+spankbang.cc,spank-and-bang.com##+js(acs, decodeURI, decodeURIComponent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7301
+tubxporn.com##+js(aopr, exoJsPop101)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7301
+pornone.com##+js(acs, $, adblock)
+pornone.com##.vjs-paused > .warp
+pornone.com##a[href*="//prtord.com/"]
+
+! sythe.org anti adb
+sythe.org##+js(acs, $, adblocker)
+sythe.org##+js(acs, document.getElementsByTagName, adblocker)
+/?referral=sythe$all
+||sythe.org/*.php$3p
+/sytheb$all
+/^https:\/\/([a-z]+\.)?sythe\.org\/[\w\W]{30,}/$image
+*$image,redirect-rule=1x1.gif,domain=sythe.org
+@@||sythe.org/*.png|$image,1p
+@@||sythe.org/*.jpg?$image,1p
+||i.imgur.com/*.mp4$media,domain=sythe.org
+sythe.org##div[style="width: 100%; display: block; text-align: center;"]
+sythe.org###topadplaceholder
+
+! https://github.com/NanoMeow/QuickReports/issues/3733
+@@||galaxylifereborn.com^$ghide
+
+! https://www.reddit.com/r/uBlockOrigin/comments/gbsl28
+||pagead2.googlesyndication.com/pagead/show_ads.js$script,domain=websimhockey.com,redirect=noopjs
+
+! https://forums.lanik.us/viewtopic.php?f=90&t=44637
+wg-gesucht.de##+js(acs, $, detectAdBlocker)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54800
+hdmp4mania1.net##+js(nosiif, visibility, 1000)
+mp4mania1.net##+js(aopr, LieDetector)
+mp4mania1.net##.advert
+mp4mania1.net,hdmp4mania1.net##.prop_native1
+! https://github.com/NanoMeow/QuickReports/issues/3751
+||undefined^$script,redirect=noopjs
+||d3g5ovfngjw9bw.cloudfront.net^$script,redirect=noopjs
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/76465
+! https://mm9844.cc/e/c3e55sp79uz6.html popup
+! https://github.com/AdguardTeam/AdguardFilters/issues/131568 Streamsb => Download
+mm9842.com,mm9844.*##+js(nowoif)
+mm9842.com,mm9844.*,mm9846.com##+js(aopr, __Y)
+
+! https://github.com/NanoMeow/QuickReports/issues/3738
+khatrimaza.*##+js(aeld, , 0x)
+khatrimaza.*##+js(acs, puShown, /doOpen|popundr/)
+khatrimaza.*##+js(no-xhr-if, ads)
+okhatrimaza.*##+js(acs, Object.defineProperty, XMLHttpRequest)
+khatrimaza.*##+js(nostif, showModal)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80222
+tapetus.pl##+js(nostif, /^/)
+*$script,redirect-rule=noopjs,domain=tapetus.pl
+tapetus.pl##+js(acs, $, setTimeout)
+tapetus.pl##div[style="box-sizing: border-box; padding:0px 5px 0px 0px; text-align:center;"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/7308
+! https://github.com/uBlockOrigin/uAssets/issues/12468
+adblockeronstape.*,adblockplustape.com,adblockstreamtape.*,adblockstrtape.*,adblockstrtech.*,adblocktape.*,antiadtape.*,noblocktape.*,stapadblockuser.*,stape.*,strcloud.*,streamadblocker.*,streamadblockplus.*,streamnoads.com,streamta.*,streamtape.*,streamtapeadblockuser.*,strtape.*,strtapeadblock.*,strtapeadblocker.*,strtpe.*,tapeantiads.com,tapeblocker.com,tapenoads.com,tapewithadblock.org##+js(nosiif, adblock)
+adblockeronstape.*,adblockplustape.com,adblockstreamtape.*,adblockstrtape.*,adblockstrtech.*,antiadtape.*,noblocktape.*,shavetape.*,stapadblockuser.*,stape.*,strcloud.*,streamadblocker.*,streamadblockplus.*,streamnoads.com,streamta.*,streamtape.*,streamtapeadblock.*,streamtapeadblockuser.*,strtape.*,strtapeadblock.*,strtapeadblocker.*,strtapewithadblock.*,strtpe.*,tapeantiads.com,tapeblocker.com,tapenoads.com,tapewithadblock.org##+js(nowoif)
+strcloud.*,streamtape.*,streamta.*,strtape.*,strtapeadblock.*##+js(ra, target, #downloadvideo)
+adblockeronstape.*,adblockplustape.com,adblocktape.*,antiadtape.*,noblocktape.*,shavetape.*,stapadblockuser.*,strcloud.*,streamadblockplus.*,streamnoads.com,streamta.*,streamtape.*,streamtapeadblockuser.*,strtape.*,strtapeadblock.*,tapeantiads.com,tapeblocker.com,tapenoads.com,tapewithadblock.org##+js(nano-stb, counter)
+adblockstreamtape.*,adblockstrtape.*,adblockstrtech.*,antiadtape.*,stape.*,strcloud.*,streamtape.*,streamta.*,strtape.*,strtpe.*,strtapeadblock.*#@#.google-ad
+adblockstreamtape.*,adblockstrtape.*,adblockstrtech.*,antiadtape.*,shavetape.*,stape.*,strcloud.*,streamtape.*,streamta.*,strtape.*,strtpe.*,strtapeadblock.*##[class*="bn-container"], div[style*="z-index: 300000;"]
+@@*$ghide,domain=adblockstreamtape.*|adblockstrtape.*|adblockstrtech.*|antiadtape.*|shavetape.cash|stape.*|strcloud.*|streamta.*|streamtape.*|streamtapeadblock.*|strtape.*|strtpe.*
+strcloud.*,streamtape.*,streamta.*,strtape.*,strtpe.*,strtapeadblock.*##iframe[src^="data:"]
+/sw.js$script,1p,domain=strcloud.*|streamtape.*|streamta.*|strtape.*|strtpe.*|strtapeadblock.*
+streamadblocker.*##+js(acs, setTimeout, admc)
+*$popup,3p,from=tapewithadblock.org,badfilter
+streamnoads.com##+js(rmnt, script, FingerprintJS)
+||dzhzp0zlnyoe8.cloudfront.net^
+! https://github.com/uBlockOrigin/uAssets/issues/20336
+tapeantiads.com,tapenoads.com#@#.skyscraper.ad
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54846
+yabiladi.com##+js(set, adBlockDetected, null)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7309
+livegore.com##+js(acs, atob, decodeURIComponent)
+livegore.com##+js(aopr, LieDetector)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/gd3aba/any_way_to_block_a_script_and_a_div_inside_of_a/
+megaplayer.bokracdn.run##+js(aeld, DOMContentLoaded, .ready)
+megaplayer.bokracdn.run##.blockingAd, .popBannerTeaser
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54876
+pestleanalysis.com##+js(set, blockAdBlock._options.baitClass, null)
+
+! https://github.com/uBlockOrigin/uAssets/commit/ea0f038f5bf9c80c4840f03317a10269e850a143#commitcomment-38932408
+ouo.*,mirrorace.com,7starhd.*##+js(acs, String.fromCharCode, /'shift'|break;/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8354
+shortenlinks.top##[href="javascript:void(0);"]
+
+! https://github.com/NanoMeow/QuickReports/issues/3759
+*$media,redirect-rule=noopmp3-0.1s,domain=eroasmr.com
+eroasmr.com##.elite_vp_videoPlayerAD
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/166506
+gaystream.pw##+js(aopr, adsbyjuicy)
+gaystream.online##+js(nowoif)
+gaystream.online##+js(nostif, afterOpen)
+gaystream.cloud##+js(aopr, __Y)
+gaystream.pw##.a-block
+watchgayporn.online##+js(nowoif)
+
+! twistedporn .com popup
+twistedporn.com##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/3770
+@@||paypou.com^$ghide
+||paypou.com/newbanner
+
+! https://github.com/NanoMeow/QuickReports/issues/3773
+||oklivetv.com^$xhr,1p,redirect-rule=nooptext
+*$script,redirect-rule=noopjs,domain=oklivetv.com
+!#if env_firefox
+@@||oklivetv.com^$xhr,script,css,1p
+!#endif
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54964
+arabnaar.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54961
+@@||althub.club^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54970
+sukidesuost.info##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/3780
+@@||extremeoverclocking.com^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55013
+@@||burzowo.info^$1p,script
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55038
+globes.co.il##+js(set, document.blocked_var, 1)
+globes.co.il##+js(set, ____ads_js_blocked, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55068
+jardiner-malin.fr##+js(set, wIsAdBlocked, false)
+
+! ricettafitness.com popads
+ricettafitness.com##+js(acs, String.fromCharCode, 'shift')
+ricettafitness.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10724
+*$script,3p,denyallow=google.com|gstatic.com,domain=skidrowcodex.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/7328
+ymp4.download##+js(nowoif)
+ymp4.download###mp3button
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55126
+eoreuni.com##+js(aopr, adBlockDetected)
+eoreuni.com##a[href^="https://iherb.co/"]
+
+! webcreator-journal.com anti adb
+webcreator-journal.com##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/NanoMeow/QuickReports/issues/1398
+! https://github.com/uBlockOrigin/uAssets/issues/19953
+shinden.pl##+js(acs, document.createElement, shift)
+@@||reklama.shinden.eu^$frame,domain=shinden.pl
+
+! freenote .biz anti adb
+freenote.biz##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/3801
+tw-calc.net##+js(set, WebSite.plsDisableAdBlock, null)
+tw-calc.net##.horizontal_large.container
+tw-calc.net##.vertical.container
+tw-calc.net##.vertical_large.container
+tw-calc.net##.vertical_large_2.container
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55150
+pornomoll.*##+js(nostif, innerText, 2000)
+pornomoll.*##+js(aeld, , _blank)
+/clc?aid=$all
+
+! https://forums.lanik.us/viewtopic.php?f=96&t=44658
+hentaisaturn.com,italydownload.com,leggenditalia.com,oasidownload.com,semprehawk.com##+js(nowebrtc)
+
+! https://github.com/NanoMeow/QuickReports/issues/3812 popups
+xxxonlinegames.com##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/3814
+supermarches.ca##+js(acs, $, css)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ggyl0i/help_with_blocking_remaining_ads_on_porn_site/
+watchpornx.com##+js(aopr, document.dispatchEvent)
+watchpornx.com##+js(aopr, jsUnda)
+watchpornx.com##+js(nowoif)
+watchpornx.com##+js(acs, puShown, /doOpen|popundr/)
+watchpornx.com###execphp-2
+watchpornx.com###overlays
+||wiztube.xyz/cdn-cgi/trace^$xhr
+vidop.*,wiztube.xyz##+js(nowoif)
+
+! lagacetadesalamanca.es video ads
+lagacetadesalamanca.es##+js(aopr, videootv)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55254
+sakaiplus.com##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7346
+seriemega.*##+js(nowoif)
+seriemega.*##.bnr
+
+! https://github.com/NanoMeow/QuickReports/issues/3833
+swame.com##+js(set, is_adblocked, false)
+
+! https://github.com/NanoMeow/QuickReports/issues/3836
+settlersonlinemaps.com##+js(nostif, _0x)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7355
+ohmybrush.com##+js(set, ads_blocked, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7354
+@@||pigy.cz^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/7357
+thatav.net##+js(aopr, decodeURI)
+digjav.com##+js(aeld, , Pop)
+digjav.com##+js(nowoif)
+||thatav.net/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/7358
+se-ed.com##+js(aopr, adBlockDetected)
+se-ed.com##[id^="banner"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/7375
+phpscripttr.com##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7374
+pugam.com##+js(acs, jQuery, ai_adb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7364
+@@||top10newgames.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/7360
+@@||25cineframes.com^$ghide
+25cineframes.com##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/7370
+televisiongratishd.com,rojadirecta-tv-en-vivo.blogspot.com##+js(acs, String.fromCharCode, atob)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7361
+legendaoficial.net##+js(acs, String.fromCharCode, 'shift')
+legendaoficial.net##^script:has-text('shift')
+legendaoficial.net##^script:has-text(\'shift\')
+
+! https://github.com/uBlockOrigin/uAssets/issues/7369
+talkceltic.net##+js(set, samDetected, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7365
+@@||splitshire.com^$ghide
+splitshire.com##.adsbygoogle:upward(.row-container)
+splitshire.com##.ezoic-ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/7366
+@@||kwamkidhen.com^$ghide
+kwamkidhen.com##[id*="ScriptRoot"]
+kwamkidhen.com##ins.adsbygoogle
+
+! https://github.com/NanoMeow/QuickReports/issues/3838
+pdfindir.net##+js(aeld, , _0x)
+
+! https://github.com/NanoMeow/QuickReports/issues/3839
+autoroad.cz##+js(nostif, check)
+
+! 1stcollegescholarship .net anti adb
+@@||1stcollegescholarship.net^$ghide
+
+! 3dmonitortips .com anti adb
+@@||3dmonitortips.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/7385
+womenreality.com##+js(nosiif, visibility, 1000)
+@@||starbits.io^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/7387
+comousarzararadio.blogspot.com##+js(aopr, adBlockDetected)
+comousarzararadio.blogspot.com###HTML10, #HTML9
+
+! https://github.com/uBlockOrigin/uAssets/issues/7389
+infocorp.io##+js(aopr, detectAdBlocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7394
+popsplit.us##+js(aopr, adBlockDetected)
+
+! https://github.com/NanoMeow/QuickReports/issues/3843
+cuitandokter.com##+js(nostif, mdp)
+
+! isohunt2 .net / isohunt. nz popups ads
+isohunt.*##+js(nowoif)
+||isohunt*.*/nordvpn/$frame
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55436
+guncelkaynak.com##+js(acs, jQuery, ai_adb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7409
+addictinggames.com##+js(aopr, Drupal.behaviors.agBlockAdBlock)
+! https://github.com/uBlockOrigin/uAssets/issues/14356#issuecomment-1213519577
+addictinggames.com#@#.ad_container
+addictinggames.com#@#.add-bx
+addictinggames.com##.add-bx:style(height: 0px !important; min-height: 0px !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4368#issuecomment-628873080
+@@*$ghide,domain=4bigv.com|5278cc.co|5278.cool|accountingplus786.blogspot.com|aetools.blogspot.com|antenadosnaskyecia.com|apprendrelekabyle.com|aramosalsal.tv|asianexpress.co.uk|awomanafoot.com|bookmarksway.com|buxearn.com|coinrotation.com|comparatif-logiciels.fr|cours-de-droit.net|dicionarioconceitos.blogspot.com|edukalife.blogspot.com|engquimicasantossp.com.br|firefiles.us|football-highlight.com|gastroepato.it|gozd-les.com|granadaesnoticia.com|hayastantv.me|hunter.fm|info-desk.co.za|l2top.co|letras2.com|logaritmo.org|lootdb.com|metalymetal.com|mtabrasil.com.br|mysavenshare.com|nekomeowmeow.com|nonude.site|numbersinwords.net|overwatch-teamup.com|oztoml.com|pelispedia.net|porngayonline.com|printerprojects.com|promipool.com|rcbinfo.com|redheadpassions.com|remixsear.ch|remixsearch.es|rendaclix.com|sandalwoodking.rocks|seriesonline.one|simplybox.net|tamilfunda.com|teknolojiprojeleri.com|tercihiniyap.net|theinnews.com|top100golfcourses.com|transpassions.com|tripolicastle.com|viewster.co|vww.yggtorrent.fr|walkingenglishman.com|wikihandbk.com|zikloud.com
+letras2.com##+js(nostif, nextFunction, 450)
+bookmarksway.com,cours-de-droit.net,football-highlight.com,gastroepato.it,granadaesnoticia.com,hayastantv.me,hunter.fm,info-desk.co.za,logaritmo.org,lootdb.com,mtabrasil.com.br,mysavenshare.com,nekomeowmeow.com,numbersinwords.net,oztoml.com,printerprojects.com,redheadpassions.com,sandalwoodking.rocks,teknolojiprojeleri.com,tercihiniyap.net,theinnews.com,tripolicastle.com,vww.yggtorrent.fr,walkingenglishman.com,wikihandbk.com,zikloud.com##ins.adsbygoogle
+nekomeowmeow.com###text-6
+nekomeowmeow.com###text-5
+hunter.fm##.pwby_hiper
+l2top.co##.main-top-ads
+l2top.co##.rightBarAd
+l2top.co##div.leftBarAd
+l2top.co###bannerads-background
+mtabrasil.com.br##.banner
+redheadpassions.com,transpassions.com###header_ad_banner
+viewster.co##.ads
+
+! sonline .pro popups
+sonline.pro##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/3859
+xda-developers.com##+js(rc, twig-body)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=44685
+@@||hiphopa.net^$ghide
+||d10ydmitx7crxz.cloudfront.net^
+||extra69.net^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/7416
+@@||imedikament.de^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/7418
+vosfemmes.com,voyeurfrance.net##+js(set, is_adblocked, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7419
+sms-anonyme.net##+js(nowebrtc)
+@@||sms-anonyme.net^$ghide
+sms-anonyme.net##ins.adsbygoogle
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55582
+portable4pc.com##+js(nosiif, visibility, 1000)
+portable4pc.com##+js(aost, document.getElementById, adsBlocked)
+
+! other exoclick crap https://github.com/uBlockOrigin/uAssets/issues/6151#issuecomment-629804631
+*.php$script,1p,domain=18teenporno.tv|3teentube.com|4gaycocks.com|50yearoldsluts.com|adult-home-videos.com|amateur-cougar.com|amateur-nude.com|amateurmaturewives.com|babeswp.com|bannedbdsm.com|bdsmaz.com|bdsmsecrets.net|bigtitsgallery.net|bizarre-club.com|bondage-club.net|bondagevideo.org|bondagewaytube.com|celebritytubeporn.com|celebxvideo.com|cidertube.com|crazygayporn.com|dailygayvideo.com|desimms.co|digisesso.com|dusktube.com|elmtube.com|enterfreegaysex.com|etitz.com|experiences-gay.com|femdomdaily.com|fieldstube.com|footfetish-slave.com|freebesttwinks.com|freegranny6.com|freematurelovers.com|freematureswomen.com|gay-place.com|gayfuckingtube.com|gaypornxxxtube.com|goodtgp.net|grannysfucking.net|hdbbwmovies.com|helloshemale.com|hiddencamsluts.com|homevoyeurvideo.net|hornygrannytube.net|hqvintagetube.net|hugeboobswomen.com|indiancunts.net|indianporndaily.com|indiansexfree.net|javbobo.com|kuboys.net|latinaxxxvideos.com|matures-loving-sex.com|maturesandnylon.com|meporno.com|momsfuckboys.com|moreasiansex.com|mybbwtube.com|mygrannyporn.com|myowntits.com|nakedolders.com|naughtyjapaneseteens.com|nicegrannys.com|nudemilfwomen.com|nudeteenshub.com|nylonbabez.net|nyloncunts.com|nylonglamourlegs.com|nylonpornpictures.net|older-wives.com|pantyhoseminx.com|porncore.net|porngoeshd.com|pornoplum.com|pornvideoh.com|pornvideos.host|raventube.com|retropornzone.com|ritzyamateursex.com|sexrura.com|sexytwinkcock.com|stockingspornpics.com|teen18tube.com|teen-tube-18.com|teen-tube-19.com|teen-tube-21.com|teen-tube-porn.com|teenporn.ws|teenpornvideo.me|teensexvideos.xxx|teensonporn.com|teentube-18.com|thevintagemovies.com|timetoteens.com|tube-teen-18.com|tubebikini.com|tubehd.xxx|ultragranny.com|uniformcunts.com|videosexyteen.com|videosmadeathome.com|vintagesextapes.com|vipoldies.net|wildfemdom.com|wildretroporn.com|wowpornlist.xyz|xxx-hd-teens.com|xxx-hd-tube.com|xxxmegaboobs.com|yatranny.com|yourbdsmmovie.com|yourfreepantyhosegalleries.com|girlsfucking.net|hairy-amateurs.com|maturevideos.site|milfera.com|onlylesbianvids.com|teen-porn-tube.com
+thumbnails.porncore.net##div[id][style$="height:200px;width:800px;"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55617
+kochamjp.pl##+js(set, blockAdBlock._options.baitClass, null)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15039
+! https://github.com/uBlockOrigin/uAssets/issues/16499
+||doubleclick.net^$frame,redirect-rule=noopframe,domain=cpu-world.com
+@@||pagead2.googlesyndication.com/pagead/managed/js/adsense/*/show_ads_impl$script,domain=cpu-world.com
+@@||cpu-world.com^$ghide
+cpu-world.com##ins.adsbygoogle
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55352
+comparteunclic.com##+js(aopr, NoAdBlock)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55659
+localizaagencia.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/3885
+tech-blogs.com##+js(nostif, mdp)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55676
+sexcamfreeporn.com##+js(nostif, Adblocker)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55687
+downloaderzone.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55696
+themes-dl.com##+js(nosiif, visibility, 1000)
+themes-dl.com##+js(nostif, innerHTML)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55697
+freegetdownloader.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55705
+pghk.blogspot.com##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/NanoMeow/QuickReports/issues/3889
+upnewsinfo.com##+js(aopr, mMCheckAgainBlock)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55614
+punisoku.blogo.jp##+js(acs, url, Math.random)
+
+! https://github.com/NanoMeow/QuickReports/issues/3852
+@@||eska.pl^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55784
+oncam.me##+js(nosiif, visibility, 1000)
+oncam.me##+js(acs, window.onload, open)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55791
+resetoff.pl##+js(set, ads_unblocked, true)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55822
+logi.im##+js(nostif, adsbygoogle)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/131099
+yourporngod.com##+js(acs, String.fromCharCode, 'shift')
+yourporngod.com##+js(set, flashvars.adv_pre_vast, '')
+yourporngod.com##+js(set, flashvars.adv_pre_vast_alt, '')
+@@||yourporngod.com^$ghide
+*$script,3p,denyallow=gstatic.com,domain=yourporngod.com
+bussyhunter.com##+js(rpnt, script, /protect_block.*?\,/)
+
+! smdailyjournal.com anti adb
+smdailyjournal.com##+js(aopr, __tnt)
+
+! https://github.com/NanoMeow/QuickReports/issues/3900
+mentalfloss.com##+js(set, countClicks, 0)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55911
+/wp-content/plugins/eazy-ad-unblocker/*$script,css
+adala-news.fr###eazy_ad_unblocker_dialog-message
+
+! https://www.reddit.com/r/uBlockOrigin/comments/got6r7/thehillcom_antiadblock_message/
+! https://github.com/NanoMeow/QuickReports/issues/3917
+! https://github.com/NanoMeow/QuickReports/issues/4442
+thehill.com##+js(acs, atob)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55954
+anomize.xyz##+js(nano-sib)
+anomize.xyz##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/3921
+medebooks.xyz##+js(nostif, ai_adb)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55992
+anonymousceviri.com##+js(acs, addEventListener, nextFunction)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1639#issuecomment-633315654
+lavozdigital.es##+js(aopr, NREUM)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56059
+bedavapdf.com##+js(acs, addEventListener, google_ad_client)
+bedavapdf.com##.Image.widget, #footer-sec1, #footer-sec3
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56097
+digitalstudiome.com##+js(aopr, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7462
+*$script,3p,denyallow=bootstrapcdn.com|disqus.com|jsdelivr.net|jwpcdn.com|fastly.net|fastlylb.net|jquery.com|hwcdn.net|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com,domain=bollyflix.*
+
+! https://github.com/NanoMeow/QuickReports/issues/1860#issuecomment-634076433
+freepornhdonlinegay.com##+js(aopw, decodeURI)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56090
+minemods.com.br##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56142
+tutorialforlinux.com##+js(set, blockAdBlock._options.baitClass, null)
+
+! https://github.com/NanoMeow/QuickReports/issues/3957
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noop.js:10,domain=nsspot.herokuapp.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56182
+uprafa.com##+js(set, settings.adBlockerDetection, false)
+uprafa.com###stickyFooterBoxColseBtn
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56220
+choq.fm##+js(aopr, mdpDeBlocker)
+
+! https://github.com/NanoMeow/QuickReports/issues/3958
+@@||gratisvps.net^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56233
+breatheheavy.com##+js(nostif, eabdModal)
+
+! https://github.com/NanoMeow/QuickReports/issues/3959
+megaflix.*##+js(nowoif)
+||sexoland.net^
+
+! https://github.com/NanoMeow/QuickReports/issues/3961
+wenxuecity.com##+js(acs, onload, adsbygoogle)
+wenxuecity.com##+js(nostif, ab_root.show)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56313
+casos-aislados.com##+js(nosiif, visibility, 1000)
+
+! supergoku.com popup
+supergoku.com##+js(aopw, atOptions)
+supergoku.com##+js(ra, href, #clickfakeplayer)
+supergoku.com###link:style(display: block !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/633
+2conv.com,flvto.biz##.content-right-bar
+2conv.com,flvto.biz##.horizontal-area
+flvto.biz,flv2mp3.by##.push-offer
+||2conv.com^$csp=script-src *
+||flvto.biz^$csp=script-src *
+2conv.com,flvto.biz,flv2mp3.by##+js(nowoif)
+||cuttlefly.com^
+
+! docker.events.cube365.net
+cube365.net##+js(set, mixpanel.get_distinct_id, true)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56352
+zipi.com##.ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/7475
+toolforge.org##+js(aopr, noAdBlockers)
+
+! brstej .com ads + popups
+brstej.com##+js(aeld, , _0x)
+
+! ads, popups
+topwwnews.com##+js(aeld, , _0x)
+*$script,3p,domain=topwwnews.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56436
+smartwebsolutions.org##+js(acs, $, .show)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56457
+jootc.com##+js(aost, String.prototype.charCodeAt, ai_)
+jootc.com##.ai_widget
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56480
+freeomovie.to##+js(nosiif, visibility, 1000)
+freeomovie.to##+js(acs, String.fromCharCode, 'shift')
+
+! https://github.com/uBlockOrigin/uAssets/issues/7482
+pasteit.*##+js(noeval-if, AdBlock)
+
+! https://github.com/NanoMeow/QuickReports/issues/3987
+*$xhr,redirect-rule=nooptext,domain=freebinchecker.com
+
+! https://github.com/NanoMeow/QuickReports/issues/3988
+@@||geekprank.com^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56504
+freshstuff4u.info##+js(acs, addEventListener, google_ad_client)
+freshstuff4u.info##div.widget_list_mag_wp_300px, .img-200
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56515
+! https://github.com/uBlockOrigin/uAssets/issues/12142
+anoboy.*##+js(acs, addEventListener, google_ad_client)
+anoboy.*##div#judi2, #coloma, [href^="//kokipoker.net"]
+anoboy.*##[href^="https://bit.ly/"]
+anoboy.*##[href^="http://click2go.me/"]
+anoboy.*###popup_box
+anoboy.*###popup_bawah
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56429
+turkrock.com##+js(acs, $, .show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7485
+||c.amazon-adsystem.com/aax2/apstag.js$script,domain=foxnews.com,important
+||googletagmanager.com^$script,domain=foxnews.com,important
+||imasdk.googleapis.com/js/sdkloader/ima3_debug.js$domain=foxnews.com,important
+foxnews.com##.site-header:style(min-height: 90px !important)
+
+! https://github.com/NanoMeow/QuickReports/issues/3995
+@@||85videos.com^$ghide
+85videos.com##.sponsor
+85videos.com###pop
+85videos.com##.haha-body
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56460
+hamakei.com###topBnr, #recBanner, .partner
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56572
+myviptuto.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/3999
+youlikeboys.com##+js(aopr, ExoLoader.serve)
+youlikeboys.com##+js(aopr, AdservingModule)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7494
+uploadroot.com##+js(aopr, open)
+uploadroot.com##.buttonDownload
+
+! https://www.reddit.com/r/uBlockOrigin/comments/phbq9n/can_someone_help_removing_adblock_warning_from/
+! https://github.com/uBlockOrigin/uAssets/issues/15964
+key-hub.eu##+js(no-fetch-if, ads)
+key-hub.eu##+js(nostif, gaData)
+@@||key-hub.eu^$ghide
+key-hub.eu##ins.adsbygoogle
+@@||key-hub.eu/$1p,script
+
+! https://github.com/NanoMeow/QuickReports/issues/4005
+*$script,redirect-rule=noopjs,domain=bandab.com.br
+bandab.com.br##.widget_publicidade
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56686
+gtamaxprofit.com##+js(acs, $, wrapfabtest)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ml8swm/how_to_block_adblock_detection_on_similar_site/
+@@||myuploadedpremium.de^$ghide
+myuploadedpremium.de##+js(aost, $, /(?=^(?!.*(https)))/)
+myuploadedpremium.de##ins.adsbygoogle
+myuploadedpremium.de###babasbmsgx
+myuploadedpremium.de##.copyright > .card
+
+! https://github.com/uBlockOrigin/uAssets/issues/7499
+@@||souqsky.net^$ghide
+file4.net,souqsky.net##+js(aopw, Fingerprint2)
+
+! https://github.com/NanoMeow/QuickReports/issues/4018
+@@||ubeat.tv^$ghide
+
+! https://www.reddit.com/r/uBlockOrigin/comments/gw3nfw/blocking_hidden_full_page_popups/
+123europix.*##+js(aopr, AaDetector)
+123europix.*##+js(aopr, InstallTrigger)
+123europix.*##+js(aopr, LieDetector)
+123europix.*##[target="_blank"][onclick]
+
+||tracktraf.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/10538
+nightfallnews.com##+js(set, bannersLoaded, 4)
+nightfallnews.com##+js(set, notEmptyBanners, 4)
+nightfallnews.com##+js(nano-sib, timer)
+nightfallnews.com##.top_banner_container
+nightfallnews.com##+js(aopr, adBlockDetected)
+nightfallnews.com##.bottom_sticky_banner_container
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/117871
+@@||animesanka.*^$ghide
+*$image,redirect-rule=1x1.gif,domain=animesanka.*
+animesanka.*##[id*="-ads-"]
+
+! https://github.com/NanoMeow/QuickReports/issues/4030
+@@||napolitoday.it^$ghide
+
+! jetanimes .com popups
+jetanimes.*##+js(ra, href, #clickfakeplayer)
+down-paradise.com##+js(aopr, LieDetector)
+down-paradise.com##+js(nowoif)
+down-paradise.com##+js(aopr, __Y)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/gxe9o4/help_with_ublock/
+novelasligera.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/4036
+ephoto360.com##+js(acs, $, Adblock)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56844
+hightqualityshop.com##+js(nosiif, visibility, 1000)
+
+! movies07. art / .live anti adb
+movies07.*##+js(aeld, , pop)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/gxud33/getting_pop_up_adds_on_this_website/
+hpaudiobooks.*##+js(acs, String.fromCharCode, 'shift')
+hpaudiobooks.*##^script:has-text('shift')
+hpaudiobooks.*##^script:has-text(\'shift\')
+
+! https://github.com/uBlockOrigin/uAssets/issues/7524
+gaydelicious.com##+js(aost, String.prototype.charCodeAt, ai_)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56923
+mondainai.moe##+js(nosiif, visibility, 1000)
+mondainai.moe##+js(aopr, app_vars.force_disable_adblock)
+##[href^="//mellowads.com/"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56924
+wwwfotografgotlin.blogspot.com##+js(set, fuckAdBlock._options.baitClass, null)
+*$script,3p,denyallow=blogger.com|bootstrapcdn.com|cloudflare.com|cloudflare.net|gitcdn.link|githack.com|google.com|googleapis.com|gstatic.com|recaptcha.net,domain=wwwfotografgotlin.blogspot.com
+||cpmlink.net^$3p
+||unbrick.id^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/87245
+@@||viralfeed.*^$ghide
+viralfeed.*##.admania-widgettit
+
+! pornhail .com ads
+*$script,3p,denyallow=cloudflare.com,domain=pornhail.com
+pornhail.com##.bottom-blocks
+
+! 3naked .com ads
+*$script,3p,denyallow=cloudflare.net|googleapis.com|jsdelivr.net|cloudflare.com,domain=3naked.com
+*.php$script,frame,domain=3naked.com
+3naked.com###bnclose
+3naked.com##.bns-block
+
+! sonorousporn .com ads
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|googleapis.com|hwcdn.net|jquery.com|jsdelivr.net|rawgit.com,domain=sonorousporn.com
+*.php$script,frame,domain=sonorousporn.com
+sonorousporn.com###bnclose
+sonorousporn.com##.vid-ave-pl
+sonorousporn.com##.on-player-pl
+
+! reamporn .com ads
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|googleapis.com|jquery.com|jsdelivr.net|netdna-cdn.com|rawgit.com,domain=reamporn.com
+*.php$script,frame,domain=reamporn.com
+reamporn.com##.vid-ave-ins
+reamporn.com###bnclose
+
+! https://github.com/uBlockOrigin/uAssets/issues/7533
+xxxmax.net##^script:has-text('shift')
+xxxmax.net##^script:has-text(\'shift\')
+xxxmax.net##+js(acs, String.fromCharCode, 'shift')
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57027
+rahim-soft.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7242
+! https://github.com/uBlockOrigin/uAssets/issues/7534
+damndelicious.net,simplywhisked.com##+js(aopr, __eiPb)
+
+! https://github.com/NanoMeow/QuickReports/issues/4069
+@@||weibomiaopai.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/7540
+linksly.co##+js(aopr, app_vars.force_disable_adblock)
+@@||linksly.co^$ghide
+linksly.co##.fixed-rightSd
+linksly.co##.fixed-leftSd
+linksly.co##[id*="ScriptRoot"]
+linksly.co##+js(nowoif)
+linksly.co##+js(set, blurred, false)
+*$script,3p,denyallow=cloudflare.com|google.com|gstatic.com|hwcdn.net|jquery.com|recaptcha.net,domain=linksly.co
+||linksly.co/sw.js$script,1p
+
+! https://linfoweb .com ads
+linfoweb.com##+js(acs, Math.floor, document.write)
+linfoweb.com##ins.adsbygoogle-wrapper
+
+||texto.click^$3p
+||contextbar.ru^$3p
+
+! https://forums.lanik.us/viewtopic.php?p=155071#p155071
+*$script,3p,denyallow=cloudflare.com,domain=storieswatch.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/h7cm2s/sexodi_blocking_ublock_origin/
+sexodi.com##+js(set, ads_unblocked, true)
+sexodi.com##.background-cloud:style(display: none !important;)
+sexodi.com###video_reklamy
+
+! https://forums.lanik.us/viewtopic.php?p=155095#p155095
+upxin.net##+js(aeld, load, onload)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57278
+dayoftheweek.org##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57292
+geeksweb.net##+js(aopr, mdpDeBlocker)
+geeksweb.net###mdp-deblocker-js-disabled
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57302
+@@||world-sms.org/get-ad/$xhr,1p
+world-sms.org##.promoBlock
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57325
+mypussydischarge.com##+js(aopr, adBlockDetected)
+mypussydischarge.com##+js(aopr, decodeURI)
+
+! https://github.com/NanoMeow/QuickReports/issues/4099
+@@||arab4load.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/9950
+sms24.*##body > div[style^="position: fixed; z-index: 1000"]
+sms24.*##+js(aost, $ado, /ado/i)
+sms24.*##+js(aost, document.createElement, app.js)
+sms24.*##.ado-header
+sms24.*##.ado-content
+sms24.*##.placeholder:remove-class(placeholder)
+*$script,redirect-rule=noopjs,domain=sms24.*
+@@||sms24.*^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/7551
+hentaistream.com##+js(aeld, load, script)
+hentaistream.com##+js(noeval-if, popUnderStage)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7552
+whatsaero.com##+js(set, blockAdBlock._options.baitClass, null)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57256
+hhkungfu.tv##+js(acs, addEventListener, google_ad_client)
+*$script,redirect-rule=noopjs,domain=hhkungfu.tv
+
+! https://github.com/uBlockOrigin/uAssets/issues/7554
+*$xhr,redirect-rule=nooptext,domain=pricez.co.il
+
+! https://www.reddit.com/r/uBlockOrigin/comments/haekcc/farkcom_blocking_all_ad_blockers/
+@@||fark.com/js/$1p,script
+
+! https://github.com/uBlockOrigin/uAssets/issues/7565
+||sexy-egirls.com/sexy-egirls.com.mp4$media,1p,redirect=noopmp3-0.1s
+
+! https://github.com/NanoMeow/QuickReports/issues/3652#issuecomment-645090389
+@@||metro.co.uk^$ghide
+metro.co.uk###we-need-monies
+metro.co.uk##.ad-slot-container
+metro.co.uk###connatix_placeholder_desktop
+metro.co.uk##.metro__ad_area_left
+metro.co.uk##.metro__ad_area_right
+metro.co.uk###taboola-feed-container
+metro.co.uk###taboola-below-article-thumbnails
+
+! https://github.com/NanoMeow/QuickReports/issues/4134
+javmvp.com##+js(aopr, __Y)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/haekcc/farkcom_blocking_all_ad_blockers/fv4qlso/
+cracking.org##+js(acs, $, samAdBlockAction)
+cracking.org##+js(acs, RegExp, googlebot)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57565
+labelotaku.com##+js(acs, eval, ignielAdBlock)
+
+! https://github.com/NanoMeow/QuickReports/issues/4140
+softwaresde.com##+js(acs, $, advert)
+
+! Amazon Music ads
+||cloudfront.net^*.mp3|$media,redirect=noopmp3-0.1s,domain=music.amazon.com|music.amazon.ca|music.amazon.co.uk|music.amazon.fr|music.amazon.de|music.amazon.it|music.amazon.es|music.amazon.co.jp|music.amazon.com.au|music.amazon.com.mx
+
+! https://www.reddit.com/r/uBlockOrigin/comments/hb7zju/antiablock_help/
+badassdownloader.com##+js(set, bscheck.adblocker, noopFunc)
+badassdownloader.com,badasshardcore.com,badassoftcore.com##+js(nostif, innerHTML)
+quickporn.net##+js(set, qpcheck.ads, noopFunc)
+badassoftcore.com,badassdownloader.com,badasshardcore.com,quickporn.net###ban-cont
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57561
+camarchive.tv##+js(no-fetch-if, popunder)
+
+! https://github.com/NanoMeow/QuickReports/issues/4147
+@@||pikwizard.com^$ghide
+pikwizard.com##.sponsor-text
+pikwizard.com##[href*="tradedoubler"]
+
+! As of 2016-12-02, found site uses WebRTC to deliver ads
+tomshardware.*##+js(aopw, tmnramp)
+
+! https://github.com/NanoMeow/QuickReports/issues/4157
+@@||teleboy.ch/assets/js/*$xhr,1p
+teleboy.ch##a[href*="BrandingDay"]
+
+! https://github.com/NanoMeow/QuickReports/issues/4162
+ddownr.com##+js(nowoif)
+||curioushingefast.com^
+
+! https://github.com/NanoMeow/QuickReports/issues/4166
+keepv.id##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/4167
+savethevideo.com##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/4168
+savefrom.net##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/160948
+arponag.xyz##+js(acs, eval, replace)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57758
+audiostereo.pl##div[style="margin-bottom: 10px;"] > a[href][target="_blank"], [href^="https://salony.nautilus.net.pl/"]
+
+! popups https://github.com/NanoMeow/QuickReports/issues/3703
+youtnbe.xyz##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57788
+pcprogramasymas.*##+js(acs, String.fromCharCode, .join(''))
+pcprogramasymas.*##+js(aopr, app_vars.force_disable_adblock)
+pcprogramasymas.*##+js(set, blurred, false)
+pcprogramasymas.*##.box-main > .blog-item
+*$script,redirect-rule=noopjs,domain=pcprogramasymas.*
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57801
+freelistenonline.com##+js(set, fuckAdBlock._options.baitClass, null)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57806
+freedeepweb.blogspot.com##+js(nosiif, visibility, 1000)
+freedeepweb.blogspot.com##+js(nostif, nextFunction)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/522
+fabioambrosi.it##+js(nostif, ad)
+
+! https://github.com/NanoMeow/QuickReports/issues/4178
+@@||fulltip.net^$ghide
+fulltip.net##ins.adsbygoogle
+fulltip.net##.penci-adsense-below-slider
+fulltip.net##.penci-google-adsense
+fulltip.net##.penci-google-adsense-2
+fulltip.net###ad-slot
+
+! https://github.com/uBlockOrigin/uAssets/issues/7585
+iseekgirls.com##+js(nowoif)
+iseekgirls.com##+js(ra, data-item, a[href=''])
+iseekgirls.com##.fv-cva-time
+iseekgirls.com##.elementor-swiper
+iseekgirls.com##.elementor-widget-html.elementor-widget.elementor-element-8fe21fe.elementor-element > .elementor-widget-container > div
+iseekgirls.com##[href="https://www.iseekgirls.com/af/webcam"], [href^="https://www.iseekgirls.com/adultfriendfinder/"]
+iseekgirls.com##.flowplayer.is-cva .fp-controls:style(display: flex !important)
+iseekgirls.com##.flowplayer.is-cva .fp-fullscreen:style(display: flex !important)
+iseekgirls.com##[href^="https://www.iseekgirls.com/"][target="_blank"]
+iseekgirls.com##[href="https://www.iseekgirls.com/isg/header-ads"]
+
+! https://github.com/NanoMeow/QuickReports/issues/3223
+cshort.org##+js(nowoif, onclickmega)
+||cshort.org/themes/cshort_theme/assets/js/vanta.birds.min.js$script,1p
+! https://github.com/uBlockOrigin/uAssets/issues/7587
+cshort.org##+js(set, adblock, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57894
+text2voice.org##+js(nosiif, visibility, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/pull/10271
+! fullcinema. xyz
+fullcinema.*,fullreal.*##.mobile-btn
+fullcinema.*,fullreal.*##.mvic-btn
+fullcinema.*,fullreal.*##div.content-kuss
+
+! https://github.com/uBlockOrigin/uAssets/issues/7591
+bondibeachau.com##+js(nano-sib)
+
+! https://rbt.asia/g/thread/61009719
+! Appears related to uponit.com
+! Somehow, websocket requests are behind-the-scene with Firefox. Pending
+! further investigation, this fixes the issue.
+||4chan.org^$csp=connect-src https: http:
+! https://www.reddit.com/r/uBlockOrigin/comments/heiw4s/ublock_help/
+*$script,3p,denyallow=4cdn.org|4chan.org|cloudflare.com|google.com|gstatic.com|hcaptcha.com|mathjax.org,domain=boards.4channel.org
+*$script,3p,denyallow=4cdn.org|4channel.org|cloudflare.com|google.com|gstatic.com|hcaptcha.com|mathjax.org,domain=4chan.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/7596
+milapercia.com##+js(nowoif)
+@@||brazzers3x.org^$ghide
+brazzers3x.org##.ads
+artesacro.org##+js(acs, onload, adb)
+
+! windows-1 .com popups
+windows-1.com##+js(nowoif)
+
+! https://forums.lanik.us/viewtopic.php?p=155265#p155265
+curto.win##+js(aopr, app_vars.force_disable_adblock)
+curto.win##+js(aeld, click, trigger)
+*$frame,3p,domain=curto.win
+||avantajados.com^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/4198
+kontrolkalemi.com##+js(aopr, adBlockDetected)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/58059
+@@||chinapost-track.com/$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/7600
+@@||gamebrew.org^$ghide
+gamebrew.org##ins.adsbygoogle
+gamebrew.org##+js(no-fetch-if, method:HEAD)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7601
+drtuber.*##+js(nowoif)
+drtuber.*###video_list_banner
+drtuber.*##.abtext
+drtuber.*##.drt-spot-box
+drtuber.*##.f_width.footer > .item_box
+drtuber.*##.fh.heading
+drtuber.*##.item_spots
+drtuber.*##.livecams_main
+drtuber.*##.puFloatLine
+drtuber.*##.title-sponsored
+||drtuber.*/footer_tiz.php
+||drtst.com/promo/banners/
+drtuber.*###spot_video_partner_banner
+m.drtuber.com###banner_overlay-postitial-video:remove()
+
+! https://www.reddit.com/r/uBlockOrigin/comments/hglf4p/whitelisted_websites_insist_im_running_an_ad/
+takimag.com##+js(acs, document.getElementById, show_ads)
+
+! https://github.com/NanoMeow/QuickReports/issues/4200
+xsanime.com##+js(nosiif, _0x)
+xsanime.com##+js(aeld, , _0x)
+xsanime.com##+js(aopr, console.clear)
+*$script,domain=xsanime.com,3p,denyallow=chatango.com|cloudflare.com|disqus.com|disquscdn.com|onesignal.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/hhardf/ytboobcom_ads_bypass_ublockorigin/
+ytboob.com##+js(aopr, document.dispatchEvent)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/58232
+gsmfirmware.net##+js(acs, eval, ignielAdBlock)
+
+! uploadraja .com ads
+uploadraja.com##+js(nano-stb)
+uploadraja.com##+js(acs, getCookie)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/himl0y/
+@@||f1countdown.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/4223
+@@||stgeorgeutah.com^$ghide
+stgeorgeutah.com##.main-top-ad
+
+! https://www.reddit.com/r/uBlockOrigin/comments/hj4bjp/httpswwwdistrotvlive/
+@@||distro.tv^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/58394
+lookimg.com##+js(nosiif, visibility, 1000)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/hjfcnf/yellowbridgecom_chineseenglish_dictionary_detects/
+yellowbridge.com##+js(nostif, blocker)
+yellowbridge.com##+js(set, isContentBlocked, falseFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/58426
+usb-antivirus.com##+js(aopr, mdpDeBlocker)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/58446
+graphicdesignresources.net##+js(nosiif, visibility, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14231
+! https://github.com/uBlockOrigin/uAssets/issues/18148
+! ||spotify.com/storage-resolve/files/audio/interactive/*$xhr,domain=open.spotify.com
+||akamaized.net/audio/$media,redirect=noop-1s.mp4:10,from=open.spotify.com
+||scdn.co/audio/$media,redirect=noop-1s.mp4:10,domain=open.spotify.com
+||spotifycdn.com/audio/$media,redirect=noop-1s.mp4:10,domain=open.spotify.com
+||amillionads.com^$media,redirect=noop-1s.mp4:10,from=open.spotify.com
+
+! https://github.com/NanoMeow/QuickReports/issues/4239
+ilgeniodellostreaming.*##+js(aopr, AaDetector)
+ilgeniodellostreaming.*##+js(nowoif)
+ilgeniodellostreaming.*##.opbtn.bnnr1
+ilgeniodellostreaming.*##.opbtn.bnnr2
+ilgeniodellostreaming.*##.opbtn.wp-content
+ilgeniodellostreaming.*##[href*=".php"]
+ilgeniodellostreaming.*##.alert-warning
+safevideo.click##[meta-link="/video.html"]
+v1.safevideo.click##.butt
+v1.safevideo.click##.hov
+v1.safevideo.click###register-overlay
+v1.safevideo.click###custom-video
+v1.safevideo.click###video-container
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/58505
+arabianbusiness.com##+js(aopr, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7631
+! https://github.com/uBlockOrigin/uAssets/issues/18102
+||intergient.com^$script,domain=emoji.gg,redirect-rule=noopjs
+
+! https://github.com/NanoMeow/QuickReports/issues/4243
+tattle.life##+js(nostif, prompt, 1000)
+tattle.life##.visitorAdPost
+
+! https://github.com/NanoMeow/QuickReports/issues/4246
+tutorials-technology.info##+js(nostif, ai_adb)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/58602
+veryfiles.com##+js(nosiif, visibility, 1000)
+||dezf3o8j9jdt6.cloudfront.net^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/4250
+eskiceviri.blogspot.com##+js(aopr, adBlockDetected)
+eskiceviri.blogspot.com##+js(acs, puShown, /doOpen|popundr/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7635
+siteunblocked.info,theproxy.app##+js(nowoif)
+/app14.js$domain=siteunblocked.info|theproxy.app
+/g12.js$domain=siteunblocked.info|theproxy.app
+siteunblocked.info,theproxy.app##.all-linked
+siteunblocked.info##+js(aopr, GetWindowHeight)
+siteunblocked.info##+js(aopr, decodeURIComponent)
+/hy.js$script,domain=siteunblocked.info
+||siteunblocked.info/zpp/*$script,domain=siteunblocked.info
+siteunblocked.info##+js(aeld, , /pop|wm|forceClick/)
+siteunblocked.info##.antoic
+siteunblocked.info##[id^="cookieConsent"]
+||declk.com^$all
+||outwhirlipedeer.com^$all
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/58627
+animeblkom.net##+js(set, blockAdBlock._options.baitClass, null)
+animeblkom.net##+js(set, CloudflareApps.installs.Ik7rmQ4t95Qk.options.measureDomain, undefined)
+vid4up.*###aoverlay
+vid4up.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7640
+convert2mp3.tv##[href="/banner.html"]
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=44865
+cardiagn.com##+js(nostif, mdp)
+
+! https://github.com/NanoMeow/QuickReports/issues/4258
+@@||aosmark.com^$ghide
+aosmark.com##+js(set, detectAB1, noopFunc)
+
+! https://github.com/NanoMeow/QuickReports/issues/4180#issuecomment-654285263
+@@||legrandrex.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/4260
+@@||trueid.net^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/4262
+@@||konstantinova.net^$ghide
+konstantinova.net##+js(nano-sib)
+konstantinova.net##[href^="//mellowads.com/"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/58771
+baritoday.it##+js(nostif, bADBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7645
+earncash.*##+js(aopr, app_vars.force_disable_adblock)
+
+! https://github.com/NanoMeow/QuickReports/issues/4270
+mashtips.com##+js(nostif, ai_adb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7648
+ministryofsolutions.com##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/58634
+dj-figo.com##+js(aopr, adBlockDetected)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/58844
+xiaomitools.com##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/92140
+! https://github.com/uBlockOrigin/uAssets/issues/20475
+link1s.*##+js(aopr, app_vars.force_disable_adblock)
+link1s.*##+js(aopr, open)
+link1s.*##.banner-inner
+kiemlua.com,link1s.*###baolink1s
+anhdep24.com,asideway.com##+js(acs, eval, replace)
+anhdep24.com,asideway.com##.popup-container, .text-center h2~*, .text-center h2, .site-logo
+anhdep24.com#@##link1s-wait1
+aemenstore.com,byboe.com,cazzette.com,dreamcheeky.com,fidlarmusic.com,hookeaudio.com,jncojeans.com,kiemlua.com,kingsleynyc.com,lucidcam.com,nguyenvanbao.com,nousdecor.com,pennbookcenter.com,publicananker.com,restorbio.com,rezence.com,staaker.com,uebnews.online,thegoneapp.com##+js(nano-sib, counter, *)
+aemenstore.com,byboe.com,cazzette.com,dataf.pro,hookeaudio.com,jncojeans.com,kiemlua.com,kingsleynyc.com,link1s.*,lucidcam.com,marharo.com,medcpu.com,nguyenvanbao.com,nousdecor.com,pennbookcenter.com,restorbio.com,staaker.com,thegoneapp.com,uebnews.online##+js(nosiif, visibility, 1000)
+link1s.*##+js(set, blurred, false)
+aemenstore.com,byboe.com,cazzette.com,dreamcheeky.com,fidlarmusic.com,hookeaudio.com,jncojeans.com,kiemlua.com,kingsleynyc.com,lucidcam.com,nguyenvanbao.com,nousdecor.com,pennbookcenter.com,publicananker.com,restorbio.com,rezence.com,staaker.com,uebnews.online,thegoneapp.com###link1s-link
+aemenstore.com,byboe.com,cazzette.com,dreamcheeky.com,fidlarmusic.com,hookeaudio.com,jncojeans.com,kiemlua.com,kingsleynyc.com,lucidcam.com,nguyenvanbao.com,nousdecor.com,pennbookcenter.com,publicananker.com,restorbio.com,rezence.com,staaker.com,uebnews.online,thegoneapp.com###link1s-wait1
+aemenstore.com,byboe.com,cazzette.com,dreamcheeky.com,fidlarmusic.com,hookeaudio.com,jncojeans.com,kiemlua.com,kingsleynyc.com,lucidcam.com,nguyenvanbao.com,nousdecor.com,pennbookcenter.com,publicananker.com,restorbio.com,rezence.com,staaker.com,uebnews.online,thegoneapp.com###link1s-generate
+aemenstore.com,byboe.com,cazzette.com,dreamcheeky.com,fidlarmusic.com,hookeaudio.com,jncojeans.com,kiemlua.com,kingsleynyc.com,lucidcam.com,nguyenvanbao.com,nousdecor.com,pennbookcenter.com,publicananker.com,restorbio.com,rezence.com,staaker.com,uebnews.online,thegoneapp.com###link1s-snp:style(display:block!important)
+*$3p,denyallow=bootstrapcdn.com|cloudflare.com|consensu.org|google.com|googleapis.com|gstatic.com|hcaptcha.com|jquery.com|jsdelivr.net|recaptcha.net,domain=link1s.*
+||i.imgur.com^$image,domain=anhdep24.com|dreamcheeky.com|fidlarmusic.com|kiemlua.com|lucidcam.com|nousdecor.com|publicananker.com|rezence.com
+! https://github.com/uBlockOrigin/uAssets/issues/18642
+kiemlua.com,link1s.com##+js(noeval-if, /chp_?ad/)
+kiemlua.com##^script:has-text(Adblock)
+!#if !cap_html_filtering
+kiemlua.com##+js(rmnt, script, Adblock)
+!#endif
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/58968
+mynet.com##+js(nostif, googlefc)
+
+! https://github.com/NanoMeow/QuickReports/issues/4286
+dropshipin.id##+js(acs, $, ads)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59026
+haddoz.net##+js(set, adBlockDetected, noopFunc)
+
+! https://github.com/NanoMeow/QuickReports/issues/4291
+||static.adsafeprotected.com/vans-adapter-google-ima.js$script,redirect-rule=noopjs,domain=motortrend.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59066
+necksdesign.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/4298
+hollywoodpq.com##+js(acs, document.querySelector, adb)
+hollywoodpq.com##div.oboxads
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59088
+mangadods.com##+js(set, blockAdBlock, trueFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59106
+@@||vanis.io/$xhr,1p
+vanis.io###player-data > div:nth-of-type(1)
+
+! mdpDeBlocker
+dcleakers.com,esgeeks.com,pugliain.net,uplod.net,worldfreeware.com##+js(nostif, mdp)
+*$script,redirect-rule=noopjs,domain=siamblockchain.com
+||pugliain.net/wp-content/uploads/*.gif$image
+siamblockchain.com##.headerad-desk
+
+! vidlo .us popups
+vidlo.us##+js(aeld, , _0x)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59176
+brofist.io##.menuOverlay
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59201
+! https://github.com/uBlockOrigin/uAssets/issues/20938
+larvelfaucet.com##+js(acs, addEventListener, nextFunction)
+larvelfaucet.com##+js(nosiif, visibility, 1000)
+larvelfaucet.com##+js(aeld, load, block)
+larvelfaucet.com##[class^="bmadblock"]
+larvelfaucet.com###bottomRightFloatingAd
+larvelfaucet.com##ins[style]
+larvelfaucet.com##.col-12 > div[style="display: inline-block"]
+larvelfaucet.com###ptcAdIframe
+larvelfaucet.com##[href^="https://larvelfaucet.com/ads-"]
+*$object,redirect-rule=noopframe,domain=larvelfaucet.com
+@@||larvelfaucet.com/images/ad_$image,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59206
+getdogecoins.com##+js(aopr, show_ads)
+getdogecoins.com##[class^="bmadblock"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59264
+youranshare.com##+js(acs, $, .init)
+
+! https://github.com/NanoMeow/QuickReports/issues/4318
+forumdz.com##+js(nostif, offsetHeight)
+
+! https://momzr.com popups/ads
+! https://www.reddit.com/r/uBlockOrigin/comments/1466pw5/
+momzr.com##.item:has(> iframe)
+*$script,3p,denyallow=fluidplayer.com|google.com|gstatic.com|googleapis.com|recaptcha.net|hcaptcha.com|hwcdn.net,domain=momzr.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59292
+depo-program.blogspot.com##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7667
+gototub.*##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59307
+quicasting.it##+js(nosiif, visibility, 1000)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=44910
+blasianluvforever.com##+js(aopr, adBlockDetected)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59360
+wcoforever.com##+js(nostif, google_jobrunner)
+wcoforever.com###sidebar_r1
+wcoforever.com##.anti-ad
+
+! https://forums.lanik.us/viewtopic.php?p=155699#p155699
+freewatchserialonline.com##+js(acs, XMLHttpRequest, ActiveXObject)
+@@||freewatchserialonline.com^$ghide
+freewatchserialonline.com##[data-zone]
+*$script,3p,domain=freewatchserialonline.com,denyallow=tvlogy.to|bootstrapcdn.com|disquscdn.com|disqus.com|fbcdn.net|facebook.net|fastly.net|fastlylb.net|jquery.com|hwcdn.net|hcaptcha.com|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com|jwpcdn.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59404
+creatur.io##+js(set, canRunAds, true)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59405
+@@||robofight.io/*/ads.js$script,1p
+robofight.io##div.side-loadout-item:nth-of-type(3)
+robofight.io##.home-banner
+
+! put-locker .com popups
+put-locker.com##+js(aeld, , _0x)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59417
+captureflag.io###dAB
+
+! https://github.com/uBlockOrigin/uAssets/commit/330289c7d234e7d48f1640a67b4d8bc28dc3b2b0#commitcomment-40652348
+*$script,redirect-rule=noopjs,domain=booogle.net
+
+! https://github.com/NanoMeow/QuickReports/issues/4332
+ihaxk.com##+js(nosiif, visibility, 1000)
+ihaxk.com##+js(acs, document.write)
+
+! https://github.com/NanoMeow/QuickReports/issues/4337
+watch-jav-english.live##+js(nowoif)
+watch-jav-english.live##+js(aopr, __Y)
+@@||watch-jav-english.live^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59468
+tricksplit.io##+js(set, blockAdBlock, trueFunc)
+tricksplit.io##p:has-text(Advertisement)
+tricksplit.io##div:has(> .adsbygoogle)
+tricksplit.io##div[class^="ads_longAd_"]
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=44925
+! https://github.com/uBlockOrigin/uAssets/issues/12288
+*$script,redirect-rule=noopjs,domain=dcode.fr
+@@||dcode.fr^$ghide
+dcode.fr##ins.adsbygoogle
+dcode.fr##div[id^="div-gpt-ad"]
+@@||dcode.fr^$xhr,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ht6fl5/popmagicpopunder_inline_script/
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59552
+*$xhr,redirect-rule=nooptext,domain=ctrlv.*
+ctrlv.*##a.download[target="_blank"]:not(a[href*="ctrlv."]):remove()
+! https://github.com/uBlockOrigin/uAssets/issues/20292
+ctrlv.*##+js(set, uBlockOriginDetected, false)
+
+! https://github.com/NanoMeow/QuickReports/issues/4346
+fikiri.net##+js(nostif, mdp)
+
+! https://github.com/NanoMeow/QuickReports/issues/4347
+@@||librevpn.org^$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/4348
+@@||mhktricks.org^$ghide
+||mhktricks.org/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/commit/274103138906e4f6e1ca089aa8f215a1c1956a17#commitcomment-40720717
+racaty.*##+js(aopw, Fingerprint2)
+racaty.*##+js(nowebrtc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59669
+iptunnels.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59678
+dramahd.me##+js(aost, String.prototype.charCodeAt, ai_)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59683
+planet-streaming1.com##+js(nowoif)
+
+! imgcredit.xyz popunder
+imgcredit.xyz##+js(aopr, exoJsPop101)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59697
+appsfullversion.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59703
+davidgalaxia.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59717
+anonymous-links.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/commit/5890988abfac492ee84c1f17d0d5d6b3a357a872#commitcomment-40749464
+! https://github.com/uBlockOrigin/uAssets/issues/20546
+pagalmovies.*,7starhd.*,jalshamoviez.*,moviesyug.net,9xupload.*,bdupload.*,desiupload.*,rdxhd1.*,w4files.ws##+js(aeld, , /_0x|localStorage\.getItem/)
+
+! https://github.com/NanoMeow/QuickReports/issues/2472
+@@||couponcabin.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/8532
+||video-ads-module.ad-tech.nbcuni.com/$xhr,redirect=nooptext,domain=peacocktv.com
+peacocktv.com##.adsbox:remove()
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59772
+malaysiastock.biz##+js(aopr, google_ad_status)
+malaysiastock.biz##.RightPanel_Rectangle1
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59779
+*$xhr,redirect-rule=nooptext,domain=katholisches.info
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59797
+biopills.net##+js(aost, encodeURIComponent, inlineScript)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10815
+! https://www.reddit.com//r/uBlockOrigin/comments/u3ob50/this_might_be_hard_to_fix/
+@@||atozmath.com^$ghide
+@@||atozmath.com/Scripts/advertisement.js$xhr,1p
+atozmath.com##.videoDiscovery
+@@||services.bilsyndication.com/adv1/*$script,domain=atozmath.com
+@@||biltag.bilsyndication.com^$script,domain=atozmath.com
+@@||assets.bilsyndication.com/prebid/default/*$script,domain=atozmath.com
+||assets.bilsyndication.com/plugins/*$script,redirect=noopjs,domain=atozmath.com
+||a-mx.com^
+@@||ssl.google-analytics.com/ga.js$script,domain=atozmath.com
+*$image,redirect-rule=2x2.png,domain=atozmath.com
+*$script,redirect-rule=noopjs,domain=atozmath.com
+@@||assets.bilsyndication.com/plugins/cmptcf2/cmp-v2.0.1.js$script,domain=atozmath.com
+@@||services.bilsyndication.com/passback/?t=$script,domain=atozmath.com
+@@||services.bilsyndication.com^$xhr,domain=atozmath.com
+@@||amazon-adsystem.com/aax2/apstag.js$script,domain=atozmath.com
+atozmath.com###vi-smartbanner
+atozmath.com##.adsbyvli:style(opacity: 0 !important; pointer-events: none !important;)
+! https://github.com/uBlockOrigin/uAssets/issues/15338
+atozmath.com##+js(set, googletag._vars_, {})
+atozmath.com##+js(set, googletag._loadStarted_, true)
+atozmath.com##+js(set, googletag._loaded_, true)
+atozmath.com##+js(set, google_unique_id, 1)
+atozmath.com##+js(set, google.javascript, {})
+atozmath.com##+js(set, google.javascript.ads, {})
+atozmath.com##+js(set, google_global_correlator, 1)
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js:5,domain=atozmath.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59828
+planet-streaming1.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/4255
+@@||translatoruser-int.com^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59869
+kangkimin.com##+js(nofab)
+kangkimin.com##+js(nano-sib)
+
+! fix anti adb
+domoplus.pl,kuchniaplus.pl,miniminiplus.pl,teletoonplus.pl##+js(json-prune, ads.servers.[].apiAddress)
+
+! https://github.com/NanoMeow/QuickReports/issues/4375
+loadsamusicsarchives.blogspot.com##+js(aopr, AaDetector)
+||weatherforecastmap.com^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/4371
+xxxfiles.com##+js(aopr, AaDetector)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/536
+toppng.com##+js(nostif, nextFunction, 250)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59924
+panjiachen.gitee.io##+js(nofab)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/59932
+@@||ninja.io^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/9234
+battleboats.io##+js(nofab)
+battleboats.io##+js(set, adBlocker, false)
+||battleboats.io/menu-overlay.html^$frame
+
+! Foil blocker-sniffer code on Condé Nast sites.
+architecturaldigest.com,arstechnica.com,bonappetit.com,brides.com,cntraveler.com,epicurious.com,golfdigest.com,newyorker.com,pitchfork.com,self.com,teenvogue.com,vanityfair.com,vogue.com,wmagazine.com##+js(nofab)
+! https://www.reddit.com/r/uBlockOrigin/comments/jvh77m/ad_blocker_detection_on_newyorkercom/
+! https://github.com/uBlockOrigin/uAssets/issues/8350
+newyorker.com##+js(set, paywallGateway.truncateContent, noopFunc)
+newyorker.com##.journey-unit
+newyorker.com##.paywall-registration-gate
+! https://www.reddit.com/r/uBlockOrigin/comments/hwrk5l/getting_popup_when_click_on_vid_kavglecom/
+kavgle.com##[href^="https://go.vrbangers.com/"], [href^="https://asiafriendfinder.com/"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60012
+@@||chelseafc.com^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60017
+rumahit.id##+js(acs, eval, ignielAdBlock)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60027
+@@||hexagame.io^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60077
+! https://www.reddit.com/r/uBlockOrigin/comments/ukz7wr/need_help_with_some_popups/
+1bitspace.com##+js(acs, setTimeout, Constant)
+1bit.space,1bitspace.com##+js(aopr, u_cfg)
+@@||1bit.space/default/public/assets/*$script,1p
+1bit.space##.active.bnsLayers.is-block-touch.is-grid
+1bit.space##.bounceIn.animated.bnsLayers.is-block-touch.is-grid
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/537#issuecomment-663771940
+friendproject.net##+js(set, adblock, false)
+
+! https://github.com/NanoMeow/QuickReports/issues/4384
+parispi.net##+js(aeld, DOMContentLoaded, adblock)
+
+! https://www.wilderssecurity.com/threads/ublock-a-lean-and-fast-blocker.365273/page-190#post-2933871
+wirralglobe.co.uk##+js(aopr, _sp_._networkListenerData)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60168
+pervertgirlsvideos.com##+js(aopr, mdp_deblocker)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60169
+texte.work##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/NanoMeow/QuickReports/issues/4390
+*$script,redirect-rule=noopjs,domain=supreme-gamers.com
+
+! https://github.com/NanoMeow/QuickReports/issues/4391
+kioven.com##+js(aopr, LieDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7621
+cointelegraph.com##[href^="javascript:void(0)"]
+cointelegraph.com##div[class*="componentAdbutler_"]
+||mercurial.cointelegraph.com^$xhr
+
+! https://www.t-rocforum.de/threads/fahrersitz-austauschen.2792/ anti adb
+t-rocforum.de##+js(acs, $, prompt)
+
+! https://github.com/NanoMeow/QuickReports/issues/4398
+hyundaitucson.info##+js(aopr, adBlockEnabled)
+hyundaitucson.info##.display_ads
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60310
+*$script,redirect-rule=noopjs,domain=puressh.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/7705
+ciudadblogger.com##+js(aeld, load, onload)
+
+! https://github.com/NanoMeow/QuickReports/issues/4405
+cidade.iol.pt##+js(nostif, adblock detection)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60365
+telemporio4.blogspot.com##+js(noeval-if, debugger)
+telemporio4.blogspot.com##+js(acs, addEventListener, google_ad_client)
+@@||tel-emporio10.blogspot.com^$ghide
+*$image,redirect-rule=2x2.png,domain=tel-emporio10.blogspot.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60369
+exambd.net##+js(acs, addEventListener, google_ad_client)
+
+! quizglobal.com anti-adblock
+@@||quizglobal.com^$ghide
+quizglobal.com##div[ng-if="vm.showAds"]
+quizglobal.com##ins.adsbygoogle
+
+! ke-1 .com anti adb
+ke-1.com##+js(aeld, load, onload)
+
+! husseinezzat .com anti adb
+@@||husseinezzat.com^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60408
+abukabir.fawrye.com##+js(acs, addEventListener, nextFunction)
+
+! https://forums.lanik.us/viewtopic.php?p=155964#p155964
+@@||indianwebseries.*^$ghide
+*$xhr,domain=indianwebseries.*,redirect-rule=nooptext
+indianwebseries.*##^script:has-text(detect)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60388
+@@||inews.co.uk^$ghide
+inews.co.uk##.thanks-3xsWr
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60443
+dosya.co##+js(nano-stb)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60492
+*$xhr,redirect-rule=nooptext,domain=dynast.io
+
+! https://github.com/uBlockOrigin/uAssets/issues/7713
+deepfakeporn.net##+js(aopr, open)
+deepfakeporn.net##.highlight ~ li > a[target="_blank"]
+||deepfakeporn.net/contents/rest/player/deepswap_japanese
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60575
+brighteon.com##+js(set, adBlockDisabled, true)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60612
+iklandb.com##+js(acs, $, .width)
+iklandb.com##+js(nano-sib)
+iklandb.com##.black-overlay
+iklandb.com##.whitecontent
+
+! https://github.com/NanoMeow/QuickReports/issues/4426
+*$script,3p,domain=elsfile.org
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60627
+@@||simply-debrid.com^$ghide
+simply-debrid.com##.adsbygoogle:remove()
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60636
+fantacalcio.it##+js(nostif, .offsetHeight, 100)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/i22abg/ublock_inline_tag_filtering_rule_stopped_working/
+wgzimmer.ch##+js(aopr, adBlockDetected)
+
+! eroticmv.com anti-adblock
+eroticmv.com##+js(aopr, mdpDeBlocker)
+eroticmv.com###mdp-deblocker-js-disabled
+
+! https://github.com/uBlockOrigin/uAssets/issues/12688
+w3schools.com###tryitLeaderboard
+!#if !env_mobile
+w3schools.com###breadcrumb + .trytopnav:style(top: 36px!important;)
+w3schools.com###tryitLeaderboard + .trytopnav:style(top: 0!important;)
+w3schools.com###tryitLeaderboard + #breadcrumb ~ #container:style(top: 84px!important;)
+w3schools.com###tryitLeaderboard + .trytopnav ~ #dragbar + #container:style(top: 48px!important;)
+!#endif
+!#if env_mobile
+w3schools.com##.trytopnav:style(top: 0!important;)
+w3schools.com###tryitLeaderboard ~ #container:style(top: 48px!important;)
+!#endif
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60693
+unionmanga.xyz##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60713
+vviruslove.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60734
+linksaya.com##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60768
+more.tv##+js(set, blockedElement, noopFunc)
+more.tv##[class^=Banner_]
+
+! onlinetvrecorder .com anti adb
+@@||onlinetvrecorder.com^$xhr,1p
+
+! https://forums.lanik.us/viewtopic.php?p=156019#p156019
+*$xhr,3p,domain=movieston.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7731
+@@||gamejop.com/ads.js$xhr,domain=gamezop.com
+gamezop.com##+js(nosiif, debugger)
+gamezop.com##[data-native-ad]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60846
+vieon.vn##div.pub_300x250.pub_300x250m.pub_728x90.text-ad.textAd.text_ad.text_ads.text-ads:style(display:block !important)
+
+! youx .xxx popups ads
+youx.xxx##+js(aeld, , _0x)
+youx.xxx##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+youx.xxx##+js(set, flashvars.adv_pause_html, '')
+youx.xxx##.thumb_banner
+||youx.xxx/*.php|
+
+! https://github.com/NanoMeow/QuickReports/issues/4448
+*$script,domain=outerspace.com.br,redirect-rule=noopjs
+
+! https://github.com/NanoMeow/QuickReports/issues/4455
+aksensei.com##+js(acs, eval, ignielAdBlock)
+
+! awdescargas.com fake button
+awdescargas.com##+js(aopw, smrtSB)
+
+! https://github.com/easylist/easylist/issues/5903
+deseneledublate.com##+js(acs, Math, XMLHttpRequest)
+deseneledublate.com##+js(aopr, AaDetector)
+deseneledublate.com##+js(nowoif)
+||i.imgur.com^$domain=deseneledublate.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81851
+pasend.*##+js(nosiif, visibility, 1000)
+pasend.*##+js(aost, String.prototype.charCodeAt, ai_)
+pasend.link##+js(no-xhr-if, /^/)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/60995
+unity3diy.blogspot.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/1122
+@@||animefire.net^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/7739
+anongamez.com##+js(aopr, scriptwz_url)
+anongamez.com##.vc_row-fluid.wpb_row.vc_row:has(.vc_btn3-icon.fa.fa-gamepad):has(.vc_btn3-icon.fa.fa-download)
+anongamez.com##[href^="https://descargarjuegospc.net/"]
+
+! sportbar .biz popups
+sportbar.*##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/61065
+politico.com##.gallery-carousel-ad
+
+! https://www.reddit.com/r/uBlockOrigin/comments/i5iutu/
+fighter.stream##+js(nostif, mdpDeBlocker)
+
+! heavy-r .com popunder / ads
+heavy-r.com##+js(acs, document.createElement, insertBefore)
+heavy-r.com##[class^="adzone"]
+
+! https://github.com/NanoMeow/QuickReports/issues/4469
+youtubetomp3.*##+js(nowoif)
+youtubetomp3.*##a[href="/button.php"]
+
+! https://github.com/NanoMeow/QuickReports/issues/4471
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|disqus.com|disquscdn.com|facebook.net|fastlylb.net|fbcdn.net|fluidplayer.com|google.com|googleapis.com|gravatar.com|gstatic.com|hwcdn.net|jsdelivr.net|wp.com,domain=veranime.*|verhentai.*
+
+! https://github.com/NanoMeow/QuickReports/issues/4477
+marriedgames.com.br##+js(nostif, ai_adb)
+marriedgames.com.br##.show-prompt
+marriedgames.com.br##._ning_cont:has(.adsbygoogle)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/61132
+hakie.net##+js(nosiif, visibility, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4964
+! https://github.com/uBlockOrigin/uAssets/issues/7750
+healthline.com##aside:has(div:matches-css-before(content:/ADVERTISEMENT/))
+healthline.com##div[data-empty^="true"]:matches-css-before(content:/ADVERTISEMENT/)
+healthline.com##[class*="css"]:matches-css-before(content:/ADVERTISEMENT/)
+healthline.com##[href*="redirect"]:upward(section)
+healthline.com##hl-adsense
+
+! https://community.brave.com/t/website-kept-asking-leave-site-if-i-click-cancel-it-opened-new-window-i-couldnt-even-close-brave-without-end-process/
+video1tube.com##+js(set, popit, false)
+video1tube.com##+js(acs, btoa)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/61263
+@@||mercedesclub.cz^$ghide
+mercedesclub.cz##ins.adsbygoogle, [class^="side_ad_"]
+
+! https://github.com/NanoMeow/QuickReports/issues/4485
+||googlesyndication.com/pagead/show_ads.js$script,redirect=noop.js,domain=speedtest.appzend.net
+
+! reddit adb tracking
+@@||redditstatic.com^*/xads.js$script,domain=reddit.com
+
+! https://github.com/NanoMeow/QuickReports/issues/4494
+@@||overtakefans.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/4495
+brawlhalla.fr##+js(nostif, check)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10524
+informaxonline.com##+js(no-xhr-if, googlesyndication)
+informaxonline.com##+js(no-xhr-if, /ad)
+informaxonline.com###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+informaxonline.com###wpsafe-generate, #wpsafe-link:others()
+
+! https://github.com/NanoMeow/QuickReports/issues/4500
+familyrenders.com##+js(aopr, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7763
+hentaifreak.org##+js(aopr, decodeURI)
+hentaifreak.org##+js(aopw, onpopstate)
+hentaifreak.org##+js(nostif, popState)
+*.gif$image,domain=hentaifreak.org
+
+! moneycontrol.com ad interstitial
+moneycontrol.com##+js(acs, document.cookie, adKey)
+moneycontrol.com##^script:has-text(mc_interstitial)
+
+! https://github.com/NanoMeow/QuickReports/issues/4503
+@@||orangeobserver.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/7766
+pimylifeup.com##+js(aopr, adthrive.config)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14883
+@@||chronicle.com/dg/default/rest/$xhr,1p
+chronicle.com##.GoogleDfpAd-container
+
+! https://github.com/NanoMeow/QuickReports/issues/4510
+@@||vix.com^$ghide
+! https://www.reddit.com/r/uBlockOrigin/comments/16309vm/doesnt_work_for_vixcom/
+! https://github.com/uBlockOrigin/uAssets/issues/21920
+vix.com##+js(json-prune, breaks interstitials info, interstitials)
+vix.com##+js(xml-prune, xpath(//*[name()="Period"][.//*[name()="AdaptationSet"][@contentType="video"][not(@bitstreamSwitching="true")]]), , .mpd)
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,3p,redirect-rule=google-ima.js,domain=vix.com
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,3p,domain=vix.com
+
+! https://github.com/NanoMeow/QuickReports/issues/4512
+animepahe.*##+js(aopw, __C)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62210
+wordcounter.icu##+js(nowoif)
+@@||wordcounter.icu^$ghide
+wordcounter.icu##center
+wordcounter.icu##div[style*="z-index:99999"] > div[style*="width:300px"]
+*$frame,denyallow=google.com|hcaptcha.com,domain=wordcounter.icu
+*$script,3p,denyallow=google.com|gstatic.com|hcaptcha.com|jsdelivr.net|recaptcha.net|googleapis.com,domain=wordcounter.icu
+||uii.io^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/4519
+tecnotutoshd.net##+js(aopw, adBlockDetected)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/61580
+@@||chiasenhac.vn/test_ads.html^$frame,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/4525
+daburosubs.com##+js(aopr, adBlockDetected)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/61653
+moneywar2.blogspot.com##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7774
+*$script,redirect-rule=noop.js,domain=flowsoft7.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7775
+checkfiletype.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/4415
+@@||scrapbox.io^$xhr,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/61721
+santoinferninho.com##+js(nosiif, visibility, 1000)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=45034
+@@||articlesmania.me^$ghide
+articlesmania.me###load-cycle
+articlesmania.me##.demand-supply
+articlesmania.me##ins.adsbygoogle
+articlesmania.me##.widget_text.widget
+
+! https://github.com/NanoMeow/QuickReports/issues/4257
+hypebeast.com##+js(nostif, ad-block-popup)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/61740
+izismile.com###banner_code_rotator
+izismile.com##.js-banner-top
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/61759
+dafideff.com##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/61779
+gurl.pw##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/4530
+4players.de##+js(set, adBlockerDetected, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7789
+@@||visitmama.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/4536
+! world4ufree. plus antiadblock
+world4ufree.*##+js(aeld, , _0x)
+world4ufree.*##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7796
+krankheiten-simulieren.de##+js(nostif, exitTimer)
+
+! venusarchives .com popups + anti adb
+venusarchives.com##+js(aeld, , bi())
+venusarchives.com##+js(aopr, b2a)
+errotica-archives.com##+js(ra, href, [href*="ccbill"])
+
+! https://forums.lanik.us/viewtopic.php?p=156214#p156214
+! https://github.com/NanoMeow/QuickReports/issues/4673
+*$script,3p,denyallow=aechannel.com|ahacdn.me|rncdn7.com|disqus.com|jsdelivr.net|jwpcdn.com|fastly.net|fastlylb.net|jquery.com|hwcdn.net|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com,domain=gayporno.fm
+
+! https://github.com/uBlockOrigin/uAssets/issues/7800
+simkl.com##+js(aeld, load, head)
+*$xhr,3p,redirect-rule=nooptext,domain=simkl.com
+*$script,3p,redirect-rule=noopjs,domain=simkl.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/61964
+catholic.com##+js(nostif, innerHTML.replace)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62098
+trentotoday.it##+js(nostif, bADBlock)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62100
+sociadrive.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/4561
+@@||prinxy.app^$ghide
+prinxy.app##.native-ads-wrapper
+prinxy.app##.sticky-banner
+
+! https://github.com/NanoMeow/QuickReports/issues/4579
+@@||googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=onepiecex.xyz
+onepiecex.xyz##+js(nano-sib)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62284
+angeloyeo.github.io##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/4587
+@@||thehacktoday.com^$ghide
+thehacktoday.com##ins.adsbygoogle
+
+! https://github.com/NanoMeow/QuickReports/issues/4588
+annabelle.ch##+js(aopr, _sp_._networkListenerData)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62450
+csgo-ranks.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62483
+androidgreek.com##+js(aopr, adBlockDetected)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62519
+sshagan.net##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62592
+*$script,domain=ad-doge.com,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/8665
+fshost.me##+js(acs, onload, ajax)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62616
+tutoganga.blogspot.com##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62622
+pkr.pw##+js(aopr, app_vars.force_disable_adblock)
+pkr.pw##+js(aopr, open)
+pkr.pw##+js(set, blurred, false)
+pkr.pw##.banner
+*$script,3p,denyallow=bootstrapcdn.com|cloudflare.net|fontawesome.com|google.com|gstatic.com|hwcdn.net|jquery.com|jsdelivr.net|recaptcha.net,domain=pkr.pw
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62636
+royalkom.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62645
+super-ethanol.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18365
+dl.3dmodelshare.org##+js(acs, document.addEventListener, google_ad_client)
+3dmodelshare.org##+js(nostif, data?, 4000)
+3dmodelshare.org##+js(rmnt, script, deblocker)
+3dmodelshare.org##div[class=""][data-locker-id]:style(display:block !important)
+3dmodelshare.org##.mts-cl-wrapper
+3dmodelshare.org##div.widget_anthemes_300px
+3dmodelshare.org##.single-box
+3dmodelshare.org##.single-728
+
+! https://github.com/NanoMeow/QuickReports/issues/4598
+thingiverse.com##+js(nano-sib)
+thingiverse.com##[class*="ThingPage__topAd"]
+! https://github.com/uBlockOrigin/uAssets/issues/21961
+thingiverse.com##[class^="ItemCardContainer__itemCard"]:has(> [title="Advertisement"])
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62686
+surf-trx.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7848
+responsivevoice.org##.cp-modal-popup-container:remove()
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62793
+samapkstore.com##+js(nosiif, visibility, 1000)
+samapkstore.com##+js(nano-sib, countDown)
+
+! https://github.com/NanoMeow/QuickReports/issues/4604
+th-cam.com##+js(aopw, HTMLElement.prototype.insertAdjacentHTML)
+th-cam.com##pp
+
+! https://github.com/NanoMeow/QuickReports/issues/4608
+jacksorrell.tv##+js(acs, jQuery, adblocker)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62833
+||tinypass.com^$domain=thechive.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/12296
+9xmovies.*##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62717
+satoshiquiz.com##+js(nosiif, visibility, 1000)
+satoshiquiz.com##.ad
+satoshiquiz.com##.slideshow-container
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62854
+link.cgtips.org##+js(acs, addEventListener, google_ad_client)
+link.cgtips.org##+js(set, countdown, 0)
+cgtips.org##+js(nostif, css_class.show)
+cgtips.org##div[class*="better-ads-listitemad"]:remove()
+! https://github.com/AdguardTeam/AdguardFilters/issues/149917
+cgtips.org##+js(nostif, .data?)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7860
+saradahentai.com,hentaiarena.com##+js(aopr, document.dispatchEvent)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62802
+eddiekidiw.com##+js(acs, $, _ads)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62803
+blkom.com##+js(set, blockAdBlock._options.baitClass, null)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62870
+kabel-tv-plus.blogspot.com##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20447
+*$3p,denyallow=googleapis.com|google.com|googleusercontent.com|gstatic.com|recaptcha.net|hcaptcha.com|ajax.cloudflare.com,domain=shrinkme.*
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|google.com|gstatic.com|hwcdn.net|jquery.com|recaptcha.net,domain=shrinke.*
+shrinke.*,shrinkme.*##+js(aopr, app_vars.force_disable_adblock)
+shrinke.*,shrinkme.*##^script:has-text('shift')
+shrinke.*,shrinkme.*##^script:has-text(\'shift\')
+shrinke.*,shrinkme.*##+js(aopr, AdservingModule)
+shrinke.*,shrinkme.*##+js(ra, href, a[href][target="_blank"])
+shrinke.*,shrinkme.*##+js(set, blurred, false)
+shrinke.*,shrinkme.*##.expop, .blog-item, footer, [src*="shrinkme."], .box-main h3, [hight="250px"]
+shrinke.*,shrinkme.*##+js(rmnt, script, window.open)
+mrproblogger.com,themezon.net##+js(aeld, load, doTest)
+mrproblogger.com,themezon.net###btn2, .tp-blue:style(display: block !important;)
+mrproblogger.com,themezon.net###btn2, .tp-blue:others()
+
+! gratispaste.com popup
+gratispaste.com##+js(aopr, AdservingModule)
+gratispaste.com##+js(aopr, _pop)
+gratispaste.com##.content > center
+9xlinks.site##+js(aeld, DOMContentLoaded, adlinkfly)
+||za.gl^$script,3p
+*$script,3p,denyallow=googleapis.com,domain=gratispaste.com
+
+! https://github.com/NanoMeow/QuickReports/issues/4612
+clipartmax.com##+js(nano-stb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7850
+imagenesderopaparaperros.com##+js(acs, String.fromCharCode, 'shift')
+imagenesderopaparaperros.com##+js(aopr, app_vars.force_disable_adblock)
+imagenesderopaparaperros.com##+js(set, blurred, false)
+*$script,3p,denyallow=google.com|gstatic.com|recaptcha.net|zshorte.net|consensu.org,domain=imagenesderopaparaperros.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62910
+shortenbuddy.com##+js(nosiif, visibility, 1000)
+shortenbuddy.com##+js(nano-sib, downloadTimer)
+shortenbuddy.com##+js(aopr, app_vars.force_disable_adblock)
+shortenbuddy.com##+js(nowoif)
+shortenbuddy.com##+js(set, blurred, false)
+shortenbuddy.com##.banner
+shortenbuddy.com##.cus-dalert
+shortenbuddy.com##.custom-adbox
+shortenbuddy.com##.custom-shadow.custom-border-color.alert-danger.alert
+shortenbuddy.com###noNeed,#noNeedTwo
+shortenbuddy.com###nextBTNH:style(display: block !important;)
+*$script,3p,denyallow=bootstrapcdn.com|cloudflare.net|fontawesome.com|google.com|gstatic.com|hwcdn.net|jquery.com|jsdelivr.net|recaptcha.net,domain=shortenbuddy.com
+@@||shortenbuddy.com^$script,1p
+||mylead.global^$3p,domain=shortenbuddy.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/owl9hp/antiadblock_in_freewebcourses/
+freewebcart.com##+js(aost, Math, showModal)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/il64iy/cant_get_rid_of_popups_on_a_couple_different_sites/
+wootly.ch##+js(disable-newtab-links)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15840
+javhdporn.net###player_3x2_container_inner
+javhdporn.net##+js(set, clientSide.adbDetect, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62959
+techinferno.com##+js(nostif, eabpDialog)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/63002
+gibit.xyz##+js(aopr, app_vars.force_disable_adblock)
+gibit.xyz##+js(set, blurred, false)
+gibit.xyz##+js(aopr, open)
+*$frame,script,3p,denyallow=google.com|gstatic.com|hcaptcha.com|recaptcha.net,domain=gibit.xyz
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/63011
+xup.in##+js(nostif, clientHeight)
+xup.in##div[style="width:728px; overflow:hidden; height:90px;"]
+xup.in##div[style="width:300px;height:250px;position:relative;overflow:hidden;"]
+xup.in##fieldset#option:nth-of-type(1) > [href^="https://www.xup.in/blog/"]
+||sexei.net^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/63027
+adeth.cc##+js(nosiif, visibility, 1000)
+
+! comicbook.com header-banner
+! https://github.com/uBlockOrigin/uAssets/issues/14131
+comicbook.com##body > header:style(top:0 !important)
+comicbook.com##body.pcm-public:style(margin-top: 84px !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/63074
+submitclimb.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15495
+nulleb.com##+js(rmnt, script, deblocker)
+*$xhr,redirect-rule=nooptext,domain=nulleb.com
+
+! voe.sx
+! https://github.com/uBlockOrigin/uAssets/issues/20207
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,3p,redirect=google-ima.js,domain=bradleyviewdoctor.com|edwardarriveoften.com|jamiesamewalk.com|kathleenmemberhistory.com|kennethofficialitem.com|nonesnanking.com|paulkitchendark.com|phenomenalityuniform.com|prefulfilloverdoor.com|lukecomparetwo.com|seanshowcould.com,important
+bradleyviewdoctor.com,edwardarriveoften.com,jamiesamewalk.com,kathleenmemberhistory.com,kennethofficialitem.com,nonesnanking.com,paulkitchendark.com,phenomenalityuniform.com,prefulfilloverdoor.com,lukecomparetwo.com,seanshowcould.com##+js(nowoif)
+apinchcaseation.com,bigclatterhomesguideservice.com,bradleyviewdoctor.com,denisegrowthwide.com,edwardarriveoften.com,housecardsummerbutton.com,jamiesamewalk.com,kennethofficialitem.com,nectareousoverelate.com,paulkitchendark.com,paulkitchendark.com,stevenimaginelittle.com,strawberriesporail.com,timberwoodanotia.com,tinycat-voe-fashion.com,troyyourlead.com,uptodatefinishconference.com,uptodatefinishconferenceroom.com,voe.sx,lukecomparetwo.com,seanshowcould.com##+js(set, console.clear, undefined)
+||badshores.com^$all
+||best2020-games-web1.com^$all
+||facesnotebook.com^$all
+||highrevenuecpm.com^$all
+
+! https://github.com/NanoMeow/QuickReports/issues/4637
+ladsnbastands.com##+js(aopr, LieDetector)
+@@||ladsnbastands.com^$ghide
+ladsnbastands.com##ins.adsbygoogle
+ladsnbastands.com##.widget_custom_html
+ladsnbastands.com##.row-hover
+
+! https://github.com/NanoMeow/QuickReports/issues/4640
+*$script,3p,redirect-rule=noopjs,domain=staples.ca
+
+! ohentai.org popup ads
+ohentai.org##[class^="detail"][class*="iframecontainer"]
+ohentai.org##[class^="listleaderboardcontainer"]
+ohentai.org##.videobrick:has(> .videoadintro)
+ohentai.org##+js(nowoif)
+
+! youngpornvideos.com popup ads
+youngpornvideos.com##+js(acs, url)
+youngpornvideos.com##.ads
+youngpornvideos.com##.ads-mobile
+youngpornvideos.com##.ads-thumb-list:upward(.outer-item)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8988
+hentaicloud.com##+js(set, decodeURI, noopFunc)
+hentaicloud.com##+js(aopr, TotemToolsObject)
+hentaicloud.com##+js(aopr, AaDetector)
+hentaicloud.com##.vertical-ads-content
+hentaicloud.com##.ad:upward(.horizontal-ads-content)
+hentaicloud.com##section.videos-content:has(.thumbnail > a[href^="https://www.nutaku.net/signup/landing/"])
+
+! javdoe.to/javtc.fun popup ads
+player.javtc.*###preroll
+javfree.la,javfree.sh,javtc.*,javthe.com##[style^="height: 250px;overflow"]
+*$script,3p,denyallow=cdndoe.xyz|cloudflare.com|doecdn.me|googleapis.com,domain=javthe.com|javfree.*
+*$script,3p,domain=javdoe.to|javtc.*
+||pub.javwide.com^
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/128820
+javbangers.com##+js(acs, document.addEventListener, initBCPopunder)
+javbangers.com##+js(acs, readCookieDelit)
+javbangers.com##+js(acs, onload, puHref)
+javbangers.com##+js(set, flashvars.adv_pre_vast, '')
+javbangers.com##+js(set, flashvars.adv_postpause_vast, '')
+javbangers.com##div.opt
+*$script,3p,denyallow=fastly.net|google.com|googleapis.com|gstatic.com|h-cdn.com,domain=javbangers.com
+
+! https://netfapx.com popup
+netfapx.com##+js(set, univresalP, noopFunc)
+netfapx.com##[id^="ads-position"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/63198
+bikemania.org##[id^="blocker-modal-"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/63208
+apksvip.com##+js(aopr, app_vars.force_disable_adblock)
+apksvip.com##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10280
+linuxsecurity.com##+js(aeld, load, nextFunction)
+linuxsecurity.com##.ad_prev_main
+
+! https://github.com/NanoMeow/QuickReports/issues/4644
+loader.to##+js(aopr, open)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/63362
+lookcam.*##+js(set, canRunAds, true)
+lookcam.*##div.prefix-adlabel
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ioi83o/how_to_block_this_add/
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|fastly.net|google.com|googleapis.com|gstatic.com|hcaptcha.com|jsdelivr.net|recaptcha.net,domain=manga4life.com
+*$frame,script,3p,denyallow=cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com|hcaptcha.com|jsdelivr.net|fastly.net|recaptcha.net,domain=mangasee123.com
+
+! https://github.com/NanoMeow/QuickReports/issues/4657
+realityblurb.com##+js(aopr, HTMLIFrameElement)
+
+! https://github.com/NanoMeow/QuickReports/issues/4661
+||googlesyndication.com/pagead/show_ads.js$script,redirect=noop.js,domain=softgateon.net
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/63447
+drphil.com##+js(set, canRunAds, true)
+drphil.com##.adBanner:style(height:1px !important)
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=drphil.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/63517
+iade.com##+js(aopr, adBlockDetected)
+
+! https://github.com/NanoMeow/QuickReports/issues/4670
+masihbelajar.com##[id*="ScriptRoot"]
+
+! https://github.com/NanoMeow/QuickReports/issues/4672
+||unknowncheats.me/forum/images/*ban$image
+unknowncheats.me##center:has-text(sponsored)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7895
+*$script,3p,denyallow=bootstrapcdn.com|disqus.com|jsdelivr.net|jwpcdn.com|fastly.net|fastlylb.net|jquery.com|hwcdn.net|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com|facebook.net,domain=pendujatt.net
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/63539
+phuongtrinhhoahoc.com##+js(nostif, .length, 2000)
+phuongtrinhhoahoc.com###left-side-ads-banner
+phuongtrinhhoahoc.com###right-side-ads-banner
+
+! https://github.com/NanoMeow/QuickReports/issues/4676
+4allprograms.me##+js(nostif, ai_adb)
+
+! cashurl.in anti adb ads
+cashurl.in##+js(aopr, app_vars.force_disable_adblock)
+cashurl.in##+js(aopw, atOptions)
+cashurl.in##+js(set, blurred, false)
+cashurl.in##.banner
+||cashurl.in/sw.js$script,1p
+*$script,3p,denyallow=google.com|gstatic.com|recaptcha.net,domain=cashurl.in
+
+||bitfun.co^$3p
+||bitsroll.com^$3p
+||btcclicks.com^$3p
+||moremoney.io^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/63596
+softairbay.com##+js(nosiif, visibility, 1000)
+@@||softairbay.com^$script,1p
+softairbay.com##.brave
+softairbay.com##.xc449bad4854773ff
+softairbay.com##[class^="bmadblock"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/10215
+swift4claim.com##+js(nosiif, visibility, 1000)
+swift4claim.com##.overlay2
+swift4claim.com##.overlay
+swift4claim.com##ins[class][style="display:inline-block;width:728px;height:90px;"]
+swift4claim.com##ins[class][style="display:inline-block;width:300px;height:250px;"]
+swift4claim.com##div[style="width:300px; height: 250px;"]
+swift4claim.com##.overflow
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/63599
+best-shopme.com##+js(nosiif, visibility, 1000)
+best-shopme.com##+js(aopr, noAdBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7898
+newsbomb.gr##.banner-area
+
+! https://www.reddit.com/r/uBlockOrigin/comments/iqot5a/unable_to_fully_remove_disable_adblocker_message/
+ibeconomist.com##+js(nostif, adsense)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/63631
+getitfree.cn##+js(acs, document.getElementById, .style)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7900
+*$script,3p,domain=webmusic.*
+/^https:\/\/(?:cdn77\.)?aj[0-9a-z]{2}\d{2}\.online\/[0-9a-z]{8}\.js$/$script,3p
+/^https:\/\/(?:cdn77\.)?aj[0-9a-z]{2}\d{2}\.bid\/[0-9a-z]{8}\.js$/$script,3p
+/^https:\/\/(?:cdn77\.)?aj[0-9a-z]{2}\d{2}\.online\/[-_0-9a-zA-Z]{70,}$/$frame,3p
+
+! https://github.com/uBlockOrigin/uAssets/pull/7901
+smallpocketlibrary.com##+js(aopr, adBlockDetected)
+
+! iinbinlist.com/osqa.net/vanhawks.com anti-adb
+*$xhr,redirect-rule=nooptext,domain=iinbinlist.com|osqa.net|vanhawks.com
+
+! https://github.com/NanoMeow/QuickReports/issues/4688
+@@||pixel.adsafeprotected.com^$xhr,domain=teleboy.ch
+
+! https://github.com/uBlockOrigin/uAssets/issues/7904
+texture-packs.com##+js(no-xhr-if, adsbygoogle)
+
+! jav.la - javmec.com/me ads
+jav.la,javmec.*,tubeqd.tv##[style^="height: 250px;overflow"]
+player.javmec.*,player.tubeqd.tv###preroll
+*$script,3p,denyallow=cloudflare.com,domain=jav.la|javmec.*|tubeqd.tv
+shpl.xyz##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/63772
+allywebsite.com##+js(aopr, mdpDeBlocker)
+
+! https://bookriot.com/agatha-christie-movies/ ad-reinsertion
+bookriot.com##+js(nostif, /Adblock|_ad_/)
+bookriot.com###top_fold[style="display:flex !important;"]:style(min-height: 0px !important; transition: all 0s ease 0s !important;)
+bookriot.com##.inside-content-promo-container
+
+! https://github.com/NanoMeow/QuickReports/issues/4693
+@@||databaseitalia.it^$ghide
+
+! bfstrms .xyz https://github.com/uBlockOrigin/uAssets/commit/f35dd2a06aa8b940ba58b0a4644cae44ef6fba35#commitcomment-42272213
+bfstrms.*##+js(noeval-if, debugger)
+bfstrms.*##+js(aopw, adcashMacros)
+bfstrms.*###iframe_preview
+bfstrms.*##.in.modal
+bfstrms.*##.in.modal-backdrop
+bfstrms.*###fcnbox
+
+! https://www.reddit.com/r/uBlockOrigin/comments/175tr1n/video_player_not_working_as_of_this_week_on/
+! crackstreams. nu console debugger freeze & popups on click
+crackstreams.*##+js(acs, setTimeout, admc)
+crackstreams.*##+js(nowebrtc)
+crackstreams.*##+js(noeval-if, debugger)
+crackstreams.*##+js(nostif, debugger)
+crackstreams.*##+js(set, runAdblock, noopFunc)
+crackstreams.*##.m-1.fw-bold.btn-danger.btn
+bestsolaris.com##+js(nowoif)
+crackstreams.*###iframe_preview
+crackstreams.*##.position-absolute
+
+! https://github.com/NanoMeow/QuickReports/issues/4666#issuecomment-692159445
+ruplayers.com##pp
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/63878
+||cdn.rawgit.com^*/wdbloogablock.js$script
+
+! https://github.com/NanoMeow/QuickReports/issues/4700
+! https://github.com/uBlockOrigin/uAssets/issues/16784
+@@||ufreegames.com^$ghide
+||imasdk.googleapis.com/js/sdkloader/ima3.js$domain=ufreegames.com,redirect-rule=google-ima.js
+ufreegames.com##.spo
+ufreegames.com##+js(nano-sib)
+
+! https://github.com/NanoMeow/QuickReports/issues/4702
+pngio.com##+js(aopr, LieDetector)
+*$script,3p,denyallow=cleanpng.com|kisspng.com|disqus.com|disquscdn.com|jsdelivr.net|jwpcdn.com|fastly.net|fastlylb.net|jquery.com|hwcdn.net|hcaptcha.com|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com|facebook.net,domain=pngio.com
+
+! readm.org ads
+readm.org##+js(acs, $, Sponsor)
+readm.org##center[style="margin-top:25px; margin-bottom:25px; width:100%; height: 100px;"]
+
+! https://github.com/NanoMeow/QuickReports/issues/4706
+cpomagazine.com##+js(aopr, advads_passive_groups)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=45101
+pholder.com##.AdInventory__overlay:upward(4)
+pholder.com##.AdSenseAboveFoldResponsive
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/63977
+tw-hkt.blogspot.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7792#issuecomment-693598611
+! https://github.com/uBlockOrigin/uAssets/issues/9087
+*$script,redirect-rule=noopjs,domain=speedtesting.herokuapp.com|excelviewer.herokuapp.com|exifviewer.herokuapp.com|pdfrecover.herokuapp.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/64013
+hugo3c.tw##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/64027
+4cash.me##+js(aopr, app_vars.force_disable_adblock)
+4cash.me##+js(set, blurred, false)
+4cash.me##.banner
+*$frame,denyallow=google.com|recaptcha.net,domain=4cash.me
+*$script,3p,denyallow=google.com|googleapis.com|gstatic.com|recaptcha.net,domain=4cash.me
+
+! https://github.com/NanoMeow/QuickReports/issues/4666#issuecomment-693751019
+ukblow.info##pp
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/64045
+saungfirmware.id##+js(aopr, short_url_app_vars.force_disable_adblock)
+saungfirmware.id##+js(nano-sib)
+
+||0zz0.com^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/4716
+animeindo.cc##+js(aopr, decodeURI)
+*$script,3p,denyallow=chatango.com|cloudflare.com|cloudflare.net|disqus.com|disquscdn.com|fastly.net|fastlylb.net|google.com|googleapis.com|gstatic.com|hcaptcha.com|hwcdn.net|jquery.com|jsdelivr.net|jwpcdn.com|recaptcha.net,domain=animeindo.cc
+
+! https://github.com/uBlockOrigin/uAssets/issues/7923
+cookpad.com###modals
+cookpad.com##body:style(overflow:auto !important)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/64099
+namaidani.com##+js(aopr, app_vars.force_disable_adblock)
+namaidani.com##+js(aopr, open)
+namaidani.com##+js(set, blurred, false)
+namaidani.com##.blog-item
+*$3p,frame,script,denyallow=google.com|gstatic.com|recaptcha.net|hcaptcha.com,domain=namaidani.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/iurlai/help_with_a_filter/
+*$script,3p,denyallow=disqus.com|disquscdn.com|jsdelivr.net|jwpcdn.com|fastly.net|fastlylb.net|jquery.com|hwcdn.net|hcaptcha.com|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com,domain=mangatx.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/iutig2/is_it_possible_to_remove_this_paywall_blocking/
+recordonline.com##+js(set, _sp_.msg.displayMessage, noopFunc)
+
+! doramasyt.com monoschinos.com ads
+doramasyt.com,monoschinos.com##+js(aopr, GLX_GLOBAL_UUID_RESULT)
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|disqus.com|disquscdn.com|facebook.net|fastly.net|fastlylb.net|fbcdn.net|gstatic.com|jwpcdn.com|jwplatform.com,domain=doramasyt.com|monoschinos.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/iv4tk5/what_to_do_when_site_doesnt_allow_us_to_view_the/
+ktm2day.com##+js(aopr, mdpDeBlocker)
+
+! https://github.com/NanoMeow/QuickReports/issues/4724
+xxxdan.com##+js(aopr, document.head.appendChild)
+xxxdan.com##*:matches-css-after(content:/Advertisement/i)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ivh48g/ads_passing_through_from_a_weird_domain/
+linuxhint.com,thekitchenmagpie.com##+js(acs, Math, adthrive)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/64199
+redanimedatabase.cloud##+js(nowoif)
+redanimedatabase.cloud##+js(set, clientSide.adbDetect, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/64220
+bonobono.com##.custom-html-widget
+
+! https://github.com/uBlockOrigin/uAssets/pull/7930
+makefreecallsonline.com##+js(rmnt, script, onerror)
+
+! https://github.com/NanoMeow/QuickReports/issues/4729
+businesstimes.com.sg##.overlayWhite
+businesstimes.com.sg##html:style(overflow-y: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7933
+camclips.tv##+js(acs, onload)
+camclips.tv##+js(aopr, console.clear)
+camclips.tv##+js(aeld, , pop)
+camclips.tv##+js(aeld, , Pop)
+camclips.tv##+js(set, flashvars.adv_pause_html, '')
+camclips.tv##+js(set, flashvars.popunder_url, undefined)
+camclips.tv##[href^="https://go.strpjmp.com"]
+camclips.tv##[src^="https://camclips.tv/player/html.php?aid"]
+camclips.tv##div.cbchat
+camclips.tv##.box.rltd
+camclips.tv##.table
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/64318
+! https://github.com/uBlockOrigin/uAssets/issues/8386
+shortzzy.*##+js(aopr, app_vars.force_disable_adblock)
+shortzzy.*##+js(nowoif)
+shortzzy.*##+js(nostif, ai_adb)
+shortzzy.*##+js(nosiif, visibility, 1000)
+shortzzy.*##+js(set, blurred, false)
+shortzzy.*##.banner
+shortzzy.*##.box-main > center > a[href][target="_blank"]
+shortzzy.*##.navbar-right.navbar-nav.nav
+shortzzy.*##.btnlink
+*$script,3p,denyallow=cloudflare.com|codepen.io|consensu.org|google.com|googleapis.com|gstatic.com|hcaptcha.com|recaptcha.net,domain=shortzzy.*
+
+! https://forums.lanik.us/viewtopic.php?p=156621#p156621
+rojadirecta.*##+js(nowoif)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/iwwxxq/prevent_popups/
+dosya.tc##+js(nowoif, !dosya, 1)
+
+! jocooks .com nasty ads
+jocooks.com##+js(aopw, HTMLElement.prototype.insertAdjacentHTML)
+
+! https://github.com/NanoMeow/QuickReports/issues/4735
+@@||cartoonbrew.com^$ghide
+cartoonbrew.com##.ad-inner
+cartoonbrew.com##.cb-ad
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/64356
+zap.in###verifyAd,#flexContentAdFrame:style(position:absolute !important; height:500px !important; display:block !important; left:-30000px !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10155
+purposegames.com##+js(nostif, googletag)
+*$script,redirect-rule=noopjs,domain=purposegames.com
+purposegames.com##.adlabel
+
+##[href^="//cadsecs.com/"]
+##[href^="//clk.afftracks.online/"]
+##[href^="https://wap4dollar.com/ad/nonadult/serve.php"]
+##[href^="//ad.jetx.info/"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/iv6z4j/want_to_learn_how_to_stop_redirects_example/
+*$script,3p,denyallow=fbcdn.net|facebook.net|fastly.net|fastlylb.net|jquery.com|hwcdn.net|hcaptcha.com|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com|wp.com|chatango.com,domain=fullmatchtv.com
+fullmatchtv.com##.belowpost
+
+! https://github.com/uBlockOrigin/uAssets/issues/7944
+highporn.net##+js(acs, addEventListener, -0x)
+highporn.net##+js(aopr, jsUnda)
+*$script,3p,denyallow=chatango.com|cloudflare.com|cloudflare.net|disqus.com|disquscdn.com|facebook.net|fastly.net|fastlylb.net|fbcdn.net|google.com|googleapis.com|gstatic.com|hcaptcha.com|hwcdn.net|jquery.com|jsdelivr.net|jwpcdn.com|recaptcha.net|wp.com,domain=highporn.net
+highporn.net##.in-video-1
+highporn.net##.fel-playclose
+highporn.net##.banner-a
+||highporn.net/js/aapp.js
+
+! megadede. mobi, movidy. net popups, ads
+megadede.*##.fake_player, #tab-ad
+megadede.*##.les-title:has-text(HD)
+megadede.*##[href="#tab-ad"]
+movidy.*,nuuuppp.online##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/4746
+conservativeus.com##+js(aopw, gothamBatAdblock)
+
+! asiansex.life ads
+asiansex.life##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+asiansex.life###spot-holder
+
+! manga-raw.club ads
+manga-raw.club##+js(acs, document.createElement, '+d+')
+
+! etcscrs .to popups
+etcscrs.to##+js(aopr, LieDetector)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/j0dy4q/
+sinfoniarossini.com##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/88037
+thepoorcoder.com##+js(aopr, adblockDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7962
+! https://www.reddit.com/r/uBlockOrigin/comments/15uh8g0/city_tv_being_blocked_again/
+@@||citytv.com^$ghide
+@@||citytv.com/wp-json/rsm-adutil/v1/get_ad_targets_by_url/$xhr,1p
+citytv.com##+js(json-prune, *, ad_unit_path)
+!#if ext_devbuild
+||citytv.com/wp-json/rsm-adutil/v1/get_ad_targets_by_url/$xhr,1p,important
+citytv.com#@#+js(json-prune, *, ad_unit_path)
+citytv.com##+js(no-xhr-if, wp-json/rsm-adutil, true)
+!#endif
+
+! brave issue google funding
+globo.com,latimes.com##+js(nostif, f.parentNode.removeChild(f), 100)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7972
+*$script,3p,denyallow=fastly.net|fastlylb.net|jquery.com|hwcdn.net|hcaptcha.com|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com,domain=13x4.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7973
+camsclips.*##+js(nostif, innerText, 2000)
+camsclips.*##.place
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/64800
+claimrbx.gg##+js(nostif, swal, 500)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/64893
+perelki.net##+js(nostif, keepChecking, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/64906
+gomaainfo.com##+js(acs, addEventListener, google_ad_client)
+||exe.io^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/4776
+robot-forum.com##+js(acs, $, offsetHeight)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/j4cn9h/antiad_blocker_for_homedecorationecom/
+@@||homedecoratione.com^$ghide
+homedecoratione.com##ins.adsbygoogle
+homedecoratione.com##.advertiser:style(position:absolute !important; left:-3000px !important; display:block !important)
+
+! liveonscore.tv popups
+liveonscore.tv##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/4787
+androidtunado.com.br##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/64978
+wristreview.com##+js(aopw, ai_front)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7998
+standardmedia.co.ke##+js(aopr, canRunAds)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/65006
+*$script,redirect-rule=noopjs,domain=downloadrepack.com
+downloadrepack.com###footer-widgets > .container-inner > .group.hu-pad
+
+! https://github.com/uBlockOrigin/uAssets/issues/8001
+vpn-anbieter-vergleich-test.de##+js(nowoif)
+||vpn-anbieter-vergleich-test.de/link/$frame,1p
+vpn-anbieter-vergleich-test.de##+js(nostif, openPopup)
+
+! https://github.com/NanoMeow/QuickReports/issues/4791
+||pagead2.googlesyndication.com/pagead/show_ads.js$script,redirect=noop.js,domain=ehubsoft.net
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/65058
+midiextreme.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/4792
+@@||thedelimagazine.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/4793
+tecnobillo.com##+js(nostif, check)
+tecnobillo.com##.tecnobillo-ad-wrapper-wrapper
+
+! xtits.com/xxx pre-roll ads
+xtits.*##+js(set, flashvars.adv_start_html, '')
+xtits.*##+js(set, flashvars.adv_pause_html, '')
+xtits.*##.adv-title
+xtits.*##.table
+xtits.*##.spot-holder
+*$frame,script,3p,denyallow=ahacdn.me|bimbolive.com|cloudflare.net,domain=xtits.*
+||xtits.*^$csp=script-src * 'unsafe-inline'
+||xtits.*/static/js/custom.js$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/65099
+kpopstan.com##+js(nano-sib)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/65120
+acapellas.eu##+js(acs, addEventListener, google_ad_client)
+
+! descarga.xyz popup ads
+descarga.xyz##+js(aopr, AaDetector)
+descarga.xyz##+js(aopw, atOptions)
+descarga.xyz##+js(aopw, smrtSB)
+descarga.xyz##.code-block-1.code-block
+*$script,3p,domain=descarga.xyz,denyallow=arc.io
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/65163
+file-converter-online.com##.lead-responsive
+file-converter-online.com##.clearfix.entry > small
+file-converter-online.com##div[style^="margin-top:10px;min-height:250px"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/65205
+urbanmilwaukee.com##+js(set, canRunAds, true)
+urbanmilwaukee.com###fancybox-container-1
+urbanmilwaukee.com##body:style(overflow:auto !important)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/65211
+tellygossips.net##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/65293
+gmodleaks.com##+js(nostif, .show)
+
+! https://github.com/NanoMeow/QuickReports/issues/4794
+ilclubdellericette.it##+js(nostif, mdpDeBlocker)
+
+! https://github.com/NanoMeow/QuickReports/issues/4795
+emuenzen.de##+js(nostif, prompt, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/65335
+epidemia-koronawirus.pl###sgpb-popup-dialog-main-div-wrapper
+epidemia-koronawirus.pl##.sgpb-popup-overlay
+
+! https://github.com/NanoMeow/QuickReports/issues/4812
+*$script,redirect-rule=noopjs,domain=seotechman.com
+
+! https://github.com/NanoMeow/QuickReports/issues/4816
+nurgsm.com##+js(nostif, ai_adb)
+
+! https://forums.lanik.us/viewtopic.php?p=156945#p156945
+newsiqra.com##+js(nosiif, visibility, 1000)
+newsiqra.com##+js(acs, XMLHttpRequest, null)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8020
+teknomuda.com##+js(aopr, app_vars.force_disable_adblock)
+teknomuda.com##+js(set, blurred, false)
+teknomuda.com##+js(acs, addEventListener, google_ad_client)
+teknomuda.com##p > a[href][target="_blank"]
+teknomuda.com###wpsafe-snp:style(display: block !important;)
+teknomuda.com###wpsafe-generate:style(display: block !important;)
+teknomuda.com##*:has(#wpsafe-wait1):not(:has(#wpsafe-snp))
+teknomuda.com##*:has(+ div[align="center"] button.btn)
+
+! nsfw popups gayvidsclub .com
+gayvidsclub.com##+js(nowoif)
+||facilitategovernor.com^$all
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/65452
+*$script,redirect-rule=noopjs,domain=markiza.sk
+
+! https://github.com/uBlockOrigin/uAssets/issues/5486
+infomaniakos.*##+js(set, btoa, null)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/65459
+shorttey.*##+js(aopr, app_vars.force_disable_adblock)
+shorttey.*##+js(aopr, open)
+shorttey.*##+js(aopw, adcashMacros)
+shorttey.*##+js(aost, Math.random, t.pt)
+shorttey.*##+js(json-prune, clickAnywhere urls)
+shorttey.*##+js(set, blurred, false)
+shorttey.*##+js(set, canRunAds, true)
+shorttey.*##.short
+shorttey.*###link-view > center > [href]
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|google.com|gstatic.com|jsdelivr.net|hcaptcha.com|recaptcha.net,domain=shorttey.*
+||shorttey.*/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/8026
+*$script,3p,denyallow=ishort.in|wp.com|cdn77.org|facebook.com|facebook.net|fbcdn.net|instagram.com|disqus.com|disquscdn.com|jwpsrv.com|plyr.io|jsdelivr.net|twimg.com|twitter.com|fastly.net|fastlylb.net|jquery.com|hwcdn.net|hcaptcha.com|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com,domain=hdmovieplus.*
+||ishort.in^$script,3p
+
+! https://github.com/NanoMeow/QuickReports/issues/4834
+*$script,redirect-rule=noopjs,domain=linuxgizmos.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/65438
+grab.tc##+js(aopr, NoAdBlock)
+grab.tc##[href^="https://youhodler.g2afse.com/"]
+grab.tc##.brave
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/65511
+dota2freaks.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/4846
+kurofansubs.xyz##+js(acs, eval, ignielAdBlock)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/jbzc6g/ublock_not_getting_through_blockadblock/
+how2pc.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/65671
+livingincebuforums.com##+js(nostif, .offsetHeight)
+livingincebuforums.com##[id^="nbAdWidget"]
+livingincebuforums.com##[data-blockid*="AdsWidget"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/8068
+tio.ch##+js(aeld, error)
+tio.ch##+js(ra, href, a[href*="/ads.php"][target="_blank"])
+@@||tio.ch^$ghide
+tio.ch##.ad
+
+! shrinkhere.xyz anti adb popup
+shrinkhere.xyz##+js(acs, String.fromCharCode, atob)
+shrinkhere.xyz##+js(aopr, app_vars.force_disable_adblock)
+*$frame,script,3p,denyallow=google.com|gstatic.com|recaptcha.net,domain=shrinkhere.xyz
+||shrinkhere.xyz/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/8042
+javfull.net##+js(nosiif, _0x)
+javfull.net###wrapfabtest:style(height:1px !important;width:1px !important)
+
+! nsfw xxgasm .com popups ads
+xxgasm.com##+js(aopr, decodeURI)
+*$script,3p,denyallow=cdn77.org|cloudflare.com|cloudflare.net|disqus.com|disquscdn.com|facebook.com|facebook.net|fastly.net|fastlylb.net|fbcdn.net|fluidplayer.com|google.com|googleapis.com|gstatic.com|hwcdn.net|hcaptcha.com|instagram.com|jquery.com|jsdelivr.net|jwpcdn.com|jwpsrv.com|plyr.io|twimg.com|twitter.com|recaptcha.net|wp.com|wankgod.com,domain=xxgasm.com
+
+! nsfw kfapfakes .com popups ads
+kfapfakes.com##+js(aopr, decodeURI)
+kfapfakes.com##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+
+! nsfw xsober .com ads popups
+xsober.com##+js(aopr, decodeURI)
+*$script,3p,denyallow=bootstrapcdn.com|cdn77.org|cloudflare.com|cloudflare.net|disqus.com|disquscdn.com|facebook.com|facebook.net|fastly.net|fastlylb.net|fbcdn.net|fluidplayer.com|google.com|googleapis.com|gstatic.com|hwcdn.net|hcaptcha.com|instagram.com|jquery.com|jsdelivr.net|jwpcdn.com|jwpsrv.com|plyr.io|twimg.com|twitter.com|recaptcha.net|wp.com,domain=xsober.com
+
+! nsfw sexsaoy .com ads popups
+sexsaoy.com##+js(aopr, decodeURI)
+*$script,3p,denyallow=cdn77.org|cloudflare.com|cloudflare.net|disqus.com|disquscdn.com|facebook.com|facebook.net|fastly.net|fastlylb.net|fbcdn.net|fluidplayer.com|google.com|googleapis.com|gstatic.com|hwcdn.net|hcaptcha.com|instagram.com|jquery.com|jsdelivr.net|jwpcdn.com|jwpsrv.com|plyr.io|twimg.com|twitter.com|recaptcha.net|wp.com,domain=sexsaoy.com
+##[href^="https://go.rdrjmp.com/"]
+
+! img4fap. club popups ads
+img4fap.*##+js(aopr, decodeURI)
+*$script,3p,denyallow=cdn77.org|cloudflare.com|cloudflare.net|disqus.com|disquscdn.com|facebook.com|facebook.net|fastly.net|fastlylb.net|fbcdn.net|fluidplayer.com|google.com|googleapis.com|gstatic.com|hwcdn.net|hcaptcha.com|instagram.com|jquery.com|jsdelivr.net|jwpcdn.com|jwpsrv.com|plyr.io|twimg.com|twitter.com|recaptcha.net|wp.com,domain=img4fap.*
+/tghr.js$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/6628
+abandonmail.com##+js(nostif, offsetHeight)
+abandonmail.com##+js(aopr, indexedDB.open)
+
+! kissanime. nz scammy 3p scripts
+kissanime.*###upgrade_pop
+embed.streamx.me##+js(noeval-if, debugger)
+||kissanime.*/api/pop*$xhr,1p
+||kissasian.*/api/pop.php$xhr,1p
+||ad.kissasian.*^$script,1p
+||kisscartoon.*/api/pop.php$xhr,1p
+||ad.kisscartoon.*^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10447
+@@||illink.net^$ghide
+illink.net##+js(aopr, app_vars.force_disable_adblock)
+illink.net##+js(set, blurred, false)
+illink.net##.banner
+*$3p,denyallow=cloudflare.com|consensu.org|google.com|googleapis.com|gstatic.com|ibb.co|hcaptcha.com|recaptcha.net,domain=illink.net
+##[href^="https://www.safestcontentgate.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/commit/ebc17ccb4d31c16f64ee9fb85e526babb9533d98#commitcomment-43341473
+filmyzilla.*##[href^="https://ak.hetadinh.com/"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/65864
+weviral.org##+js(nosiif, visibility, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20980
+! https://www.reddit.com/r/uBlockOrigin/comments/1504iyi/paperzonevncom_how_to_bypass_adblockblocker/
+paperzonevn.com##+js(set, xv_ad_block, 0)
+paperzonevn.com##+js(aeld, visibilitychange)
+paperzonevn.com##+js(nostif, ()=>{)
+
+! popups tits-guru .com
+tits-guru.com##+js(nowoif)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/jebak1/lomcn_detects_ublock/
+lomcn.org##+js(acs, $, samAdBlockAction)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/66008
+popno-tour.net##+js(nostif, innerText, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10366
+@@||asianbookie.com^$script,1p
+forums.asianbookie.com##.topics > table > tbody > tr > td > table > tbody > tr > .topicrowdate
+||asianbookie.com/displaytable.cfm?tablename=cslodds$frame
+asianbookie.com##a[href^="/cgi-bin/to.cgi"]
+
+! elitetorrent.com popup
+elitetorrent.*##+js(aopw, adcashMacros)
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|disqus.com|disquscdn.com|fastlylb.net|google.com|googleapis.com|gstatic.com|fontawesome.com|jsdelivr.net,domain=elitetorrent.*
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/66096
+siz.tv##+js(set, koddostu_com_adblock_yok, null)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/66170
+molll.mobi##+js(nostif, innerText, 2000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/66177
+motorantik.store##+js(acs, addEventListener, google_ad_client)
+motorantik.store###wpsafe-snp:style(display: block !important;)
+motorantik.store###wpsafe-generate:style(display: block !important;)
+motorantik.store##*:has(#wpsafe-wait1):not(:has(#wpsafe-snp))
+
+! e-wok.tv anti-adb
+@@||e-wok.tv/js/new/advertisment.js$script,1p
+
+! several sites using the same popunder script
+ashemaletv.com,beurettekeh.com,celibook.com,gourmandix.com,sexetag.com##+js(aopr, decodeURI)
+ashemaletv.com###playerOverlay
+||str.sexetag.com/voir.php$frame,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/8072
+alltechnerd.com##+js(nosiif, visibility, 1000)
+alltechnerd.com##+js(nostif, nitroAds)
+alltechnerd.com##.ai_widget
+alltechnerd.com##.code-block:has-text(ADV)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8074
+iobit.com##+js(aopr, LieDetector)
+
+! hentaisea. com popunder
+hentaisea.com##+js(aost, Math.random, stackDepth:4)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/jh1fxe/adblock_detected/
+malaysianwireless.com##+js(nostif, class.scroll, 1000)
+||malaysianwireless.com/wp-content/banners/*$image,1p
+
+! iammagnus.com/dailyvideoreports.net anti-adb
+dailyvideoreports.net##+js(aeld, load, /showModal|isBlanketFound/)
+iammagnus.com,dailyvideoreports.net##+js(set, adsbygoogle.loaded, true)
+*$script,redirect-rule=noopjs,domain=iammagnus.com|dailyvideoreports.net
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/66280
+*$script,redirect-rule=noopjs,domain=youneed.win
+
+! estrenosgo.site yadixv.com popup
+estrenosflux.*##+js(acs, JSON.parse, atob)
+estrenosflix.*,estrenosflux.*,estrenosgo.*##+js(aopw, adcashMacros)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8081
+||adservice.google.com/adsid/integrator.js$script,redirect=noopjs,domain=ultimateclassicrock.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/66372
+comprovendolibri.it##+js(nostif, google_jobrunner)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ji295t/i_found_an_antiadblock/
+universegunz.net##+js(nostif, adb)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ji8yhy/citynewsca_anti_adblock/
+citynews.ca##body:style(padding-top:0px !important)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/jidhpq/i_found_an_antiadblock/
+miuiku.com##+js(acs, eval, ignielAdBlock)
+miuiku.com##+js(nowoif)
+miuiku.com##+js(set, blurred, false)
+miuiku.com##[style="text-align: center;"] > a[href]
+miuiku.com##.content:has(#invisibleCaptchaShortlink) > p
+miuiku.com##a[href^="https://poptival.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/8085
+forum.lolesporte.com##+js(aopr, onload)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/66420
+shoppinglys.blogspot.com##+js(nosiif, visibility, 1000)
+shoppinglys.blogspot.com##iframe[src^="data:"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/8089
+erinsakura.com##+js(nostif, disableDeveloperTools)
+erinsakura.com##.herald-fa-grid
+
+! https://github.com/uBlockOrigin/uAssets/issues/8091
+@@||fzmovies.*^$ghide
+@@||fzm.*^$ghide
+fzm.*,fzmovies.*##+js(ra, onclick, [onclick*="window.open"])
+fzm.*,fzmovies.*##+js(nosiif, visibility, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8094
+*$image,redirect-rule=1x1.gif,domain=freesslvpn.us|robotvpn.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/66474
+fritidsmarkedet.dk,maskinbladet.dk##+js(nostif, Check)
+*$image,redirect-rule=1x1.gif,domain=maskinbladet.dk|fritidsmarkedet.dk
+fritidsmarkedet.dk,maskinbladet.dk##.skybanner, .megaboard-inner
+
+! https://github.com/uBlockOrigin/uAssets/issues/8100
+bdlink.pw##+js(nano-sib)
+
+! yourtechnology.online/Download/MIqVV anti-adb
+yourtechnology.online##+js(aopr, app_vars.force_disable_adblock)
+yourtechnology.online##+js(set, blurred, false)
+yourtechnology.online##.banner
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/66542
+savelink.site##+js(aopr, app_vars.force_disable_adblock)
+savelink.site##+js(nowoif)
+savelink.site##+js(set, blurred, false)
+*$frame,script,3p,denyallow=google.com|googleapis.com|gstatic.com|hcaptcha.com|recaptcha.net,domain=savelink.site
+
+! https://github.com/uBlockOrigin/uAssets/issues/8103
+komiktap.in##+js(nosiif, visibility, 1000)
+komiktap.in###teaser3
+
+! https://www.reddit.com/r/uBlockOrigin/comments/jjz5fv/a_website_detects_ubo/
+torresette.news##+js(acs, document.addEventListener, adsBlocked)
+||torresette.news/img/banner/$image,1p
+torresette.news##.content-banner-right
+torresette.news###skinlink
+
+! https://github.com/uBlockOrigin/uAssets/issues/8112
+hubstream.in##+js(nostif, mdpDeBlocker)
+downloadhub.*,hubstream.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8117
+ultimasnoticias.com.ve##pp
+
+! https://github.com/easylist/easylist/issues/6331
+adultasianporn.com##+js(aeld, getexoloader)
+adultasianporn.com##+js(cookie-remover, /^/)
+adultasianporn.com##[class^="abra"]
+adultasianporn.com##[href^="http://adultasianporn.com/out.php"]
+adultasianporn.com##.banner
+adultasianporn.com##[src*=".php"]
+||adultasianporn.com^$frame
+
+! gamesrepacks.com anti-adb
+gamesrepacks.com##+js(noeval-if, show)
+
+! https://forums.lanik.us/viewtopic.php?p=157292#p157292
+@@||firenzetoday.it^$ghide
+
+! SSAI Video ads on ABC Owned TV station sites https://github.com/uBlockOrigin/uBlock-issues/issues/760#issuecomment-715702997
+||content.uplynk.com/api/*&ad=$xhr,removeparam=/^ad/,domain=abc7ny.com|abc7.com|abc7chicago.com|6abc.com|abc7news.com|abc13.com|abc11.com|abc30.com
+
+! SSAI Video ads on Discovery TV sites https://github.com/uBlockOrigin/uBlock-issues/issues/760#issuecomment-715926907
+||api.discovery.com/v1/streaming/video/*&adNetworkId=$xhr,removeparam=/^ad/,domain=ahctv.com|animalplanet.com|cookingchanneltv.com|destinationamerica.com|discovery.com|discoverylife.com|diynetwork.com|foodnetwork.com|hgtv.com|investigationdiscovery.com|motortrend.com|sciencechannel.com|tlc.com|travelchannel.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/66787
+adobezii.com##+js(nosiif, visibility, 1000)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/jmyeka/adblock_detected_on_walkthroughindoblogspotcom/
+walkthrough-indo.blogspot.com##+js(acs, addEventListener, google_ad_client)
+
+! https://forums.lanik.us/viewtopic.php?p=157303#p157303
+@@||letmeread.net^$ghide
+letmeread.net##ins.adsbygoogle
+
+! polska-ie.com anti-adb
+polska-ie.com##+js(aeld, load, isBlanketFound)
+*$script,redirect-rule=noopjs,domain=polska-ie.com
+
+! https://forum.videohelp.com/ ad-reinsertion
+videohelp.com##div[id] :has(> a[href]:has-text(/^Try (?:D.?V.?D.?F.?a.?b|StreamFab)/) + a[href])
+
+! hentaitube ads
+hentais.tube,hentaitube.online##+js(aopr, checkCookieClick)
+hentais.tube,hentaitube.online##[href^="https://tm-offers.gamingadult.com/"]
+
+! hentaidude.com ads
+hentaidude.com##+js(aopr, mnpw)
+hentaidude.com##+js(nowoif)
+hentaidude.com###homebn
+hentaidude.com###idtop
+hentaidude.com###videoOverAd
+hentaidude.com###vid > .main-vip
+hentaidude.com#@#.adsArea
+||hentaidude.com/wp-admin/admin-ajax.php?action=geocheck$xhr,redirect=noop.txt
+! https://github.com/uBlockOrigin/uAssets/issues/8775
+!#if env_mobile
+hentaidude.com###ft-trig.ft-home, .vip-c
+hentaidude.com##.mobile-il:style(visibility: hidden !important; height: 1px !important)
+!#endif
+
+! https://fairyanime.com/watch/m2Z9hptHZO/ pre-roll ad
+fairyanime.com##+js(nano-sib)
+fairyanime.com##.overlay
+fairyanime.com###kosana.bounce.animated.kosana.concise
+*$media,redirect=noopmp3-0.1s,domain=fairyanime.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/66937
+pg-wuming.com##+js(acs, $, .test)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8161
+proxybit.*##+js(acs, adcashMacros)
+proxybit.*##+js(nowoif)
+proxybit.*##+js(aopr, mm)
+proxybit.*##[id*="banner"]
+
+! https://github.com/abp-filters/abp-filters-anti-cv/issues/482
+! https://github.com/uBlockOrigin/uAssets/issues/16935
+hdss.*##.homi
+hdss.*##.widget_media_image
+hdss.plus###pub
+hdss.plus##center
+opvid.net##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8162
+@@||top.gg/js/$script,1p
+top.gg###vote-root:style(display:block !important)
+top.gg###video-root
+! https://www.reddit.com/r/uBlockOrigin/comments/uiiidq/issue_with_topgg_discord_bots_voting_ads/
+top.gg##+js(nano-stb, readyToVote, 12000)
+! https://github.com/uBlockOrigin/uAssets/issues/14791
+top.gg##article[data-testid="promoted-product"]
+top.gg##.chakra-popover__content .chakra-link[href*="/click?targetUrl="]
+top.gg###rewarded-video
+! https://github.com/uBlockOrigin/uAssets/issues/18878
+top.gg###parent_nn_player
+top.gg##.chakra-stack[data-testid="p-p"]
+top.gg##div[class^="css-"]:not(.chakra-stack):has(> #parent_nn_player)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8163
+@@||arrowos.net/js/*$script,1p
+arrowos.net##body:style(visibility:visible !important)
+@@||arrowos.net^$ghide
+arrowos.net##.card-content:has(> .adsbygoogle)
+arrowos.net##ins.adsbygoogle
+arrowos.net###babasbmsgx
+
+! https://github.com/uBlockOrigin/uAssets/issues/8167
+3hiidude.*##+js(aopr, String.fromCharCode)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/66996
+! https://github.com/uBlockOrigin/uAssets/issues/17289
+*$script,redirect-rule=noopjs,domain=vidmoly.me|vidmoly.net|vidmoly.to
+||vidmoly.to/static/vastAD.js$script
+||vastz.b-cdn.net/*.mp4$media,domain=vidmoly.to,redirect=noopmp3-0.1s
+vidmoly.*###adsblock
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67094
+lite-link.*##+js(aopr, app_vars.force_disable_adblock)
+lite-link.*##+js(ra, target|href, a[href^="//"])
+lite-link.*##+js(set, blurred, false)
+lite-link.*##.banner
+*$script,3p,denyallow=google.com|gstatic.com|recaptcha.net,domain=lite-link.*
+
+! https://github.com/uBlockOrigin/uAssets/commit/6bc0de4a260c4653d1c1d91a1ae118d87a88f89e#commitcomment-43943548
+openloadmov.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8173
+! wawacity. work | moe
+wawacity.*##+js(aost, String.prototype.charCodeAt, _0x)
+wawacity.*##+js(nowoif)
+##[href^="https://dl-protect.net/get-premium-url"]
+
+! https://github.com/abp-filters/abp-filters-anti-cv/issues/485
+aegeanews.gr,batterypoweronline.com,brezovycukr.cz,centrocommercialevulcano.com,cieonline.co.uk,commsbusiness.co.uk,dailygrindonline.net,delo.bg,dynastyseries.com,fabmx1.com,fat-bike.com,fmj.co.uk,localemagazine.com,loveourweddingmag.com,metaforespress.gr,myvalley.it,niestatystyczny.pl,primapaginamarsala.it,ringelnatz.net,schoolsweek.co.uk,sikkenscolore.it,sportbet.gr,stadtstudenten.de,stagemilk.com,tautasdziesmas.lv,thetoneking.com,toplickevesti.com,zeroradio.co.uk##+js(aopr, wpsite_clickable_data)
+*/wp-content/plugins/wpsite-background-takeover*/js/wpsite_clickable.js$script
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67165
+8tm.net##+js(nosiif, visibility, 1000)
+8tm.net##+js(acs, addEventListener, google_ad_client)
+@@||8tm.net/stylesheets/$css,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/8179
+certbyte.com##+js(nostif, ai_adb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8181
+||ads.exoclick.com/ads.js$script,redirect=noop.js
+/teo4.$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/8182
+ondebaixo.com,ondebaixa.com,ondeeubaixo.org,torrentool.org##+js(ra, onclick, a[href^="magnet:"][onclick])
+
+! https://github.com/uBlockOrigin/uAssets/issues/8189
+myhackingworld.com##+js(nostif, mdp)
+
+! https://github.com/adsbypasser/adsbypasser/issues/3632
+vipr.im##+js(acs, document.addEventListener, initBCPopunder)
+vipr.im###rang2
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67323
+droplink.co##+js(aopr, app_vars.force_disable_adblock)
+droplink.co##+js(set, blurred, false)
+yoshare.net##+js(nano-sib, , *, 0)
+yoshare.net##[id^="yoshare\."]
+yoshare.net##.close_ub-sticky-addesk
+yoshare.net##.site-inner > .wrap:has-text(Scroll down & click on)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/jrvajh/the_return_of_welcome_it_looks_like_youre_using/
+afasiaarchzine.com##+js(nosiif, visibility, 1000)
+afasiaarchzine.com##.afasia_sidebar_ad_group
+
+! https://www.reddit.com/r/uBlockOrigin/comments/jsec46/this_website_detects_my_adblock/
+hidefninja.com##+js(aopr, adBlockDetected)
+
+! egao.in popunder
+egao.in##+js(ra, target, #SafelinkGenerate)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67449
+recipestutorials.com##+js(aopr, app_vars.force_disable_adblock)
+recipestutorials.com##+js(set, blurred, false)
+recipestutorials.com##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/8198
+hubdrive.*##+js(nowoif)
+hubdrive.*##+js(acs, Math.imul)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67445
+exbulletin.com##+js(aost, String.prototype.charCodeAt, ai_)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/jsvatw/request_anti_adblocker_detection_fix_please/
+hindisub.com##+js(nofab)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/jsvl14/news_site_bypassing_adblock_cant_block_it_by/
+15min.lt##+js(nostif, insertBefore)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67488
+@@||multicoinads.com^$ghide
+multicoinads.com##.ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/8203
+br0wsers.com##+js(acs, document.getElementsByClassName, offsetParent)
+br0wsers.com###show_ag:style(display:block !important)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67511
+downloadcursos.net##+js(aopr, mdpDeBlocker)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67517
+unityassets4free.com##+js(set, adsbygoogle.loaded, true)
+*$script,redirect-rule=noopjs,domain=unityassets4free.com
+unityassets4free.com##.AdWidget_HTMLWidget
+unityassets4free.com##img[src^="https://unityassets4free.com/wp-content/uploads/"][src$="/best-url-shortner-for-unityassets4free.jpg"]
+
+! vlive.tv pre-roll ads
+vlive.tv##+js(json-prune, meta.advertise)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10281
+! https://github.com/AdguardTeam/AdguardFilters/issues/80687
+! https://www.reddit.com/r/uBlockOrigin/comments/12uno6z/
+! https://github.com/uBlockOrigin/uAssets/issues/18965
+! https://www.reddit.com/r/uBlockOrigin/comments/16o5y6m/
+! https://www.reddit.com/r/uBlockOrigin/comments/17h40sk/
+lewdninja.com,lewd.ninja##+js(nosiif, atob)
+lewdninja.com,lewd.ninja##+js(nostif, setAntiAb)
+*$xhr,redirect-rule=nooptext,domain=lewdninja.com|new.lewd.ninja
+lewdninja.com,new.lewd.ninja##a.navbar-item.is-hidden-desktop-only
+lewdninja.com,new.lewd.ninja##div[id][style*="height:1px;display:inline-block;clear:none;position:absolute"]
+new.lewd.ninja##div[tabindex="-1"]:not(.modal.is-active.is-image-modal, .viewer-container)
+@@||a.trk-imps.com/oauth2$script,domain=lewdninja.com|new.lewd.ninja
+@@||a.trk-imps.com/loader?$frame,domain=lewdninja.com|new.lewd.ninja
+@@||trk-imps.com^$frame,csp,domain=new.lewd.ninja
+||advertserve.com/servlet/view/banner/$frame,redirect-rule=noop.html,domain=trk-imps.com
+@@*$document,csp=worker-src 'none',domain=new.lewd.ninja
+*$popunder,domain=new.lewd.ninja
+lewd.ninja##+js(aeld, click, shouldShow)
+@@||recaptcha.net^$frame,csp=worker-src 'none',domain=lewd.ninja
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67519
+hentaienglish.com,hentaiporno.xxx##+js(set, vidorev_jav_plugin_video_ads_object.vid_ads_m_video_ads, '')
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67621
+progameguides.com##[id^="sideAd-"]
+progameguides.com##[id^="content_dynamicAd-"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/jthanh/new_tv_site_with_ads_uk/
+! https://forums.lanik.us/viewtopic.php?p=158772#p158772
+discoveryplus.*##.bmpui-seekbar-markers
+discoveryplus.*##.bmpui-ui-ads-status
+discoveryplus.*##+js(json-prune, data.attributes.config.freewheel data.attributes.config.featureFlags.dPlayer)
+@@||identity.mparticle.com/v1/login$xhr,domain=discoveryplus.*
+*$media,redirect=noopmp3-0.1s,domain=discoveryplus.*
+||doubleclick.net^$xhr,domain=discoveryplus.*,important
+! https://github.com/uBlockOrigin/uAssets/issues/14987
+!#if !env_firefox
+||h264.io/a/x-goog-token=Expires$xhr,redirect=nooptext,domain=discoveryplus.*,important
+!#endif
+! https://github.com/uBlockOrigin/uAssets/issues/18875
+! https://github.com/uBlockOrigin/uAssets/issues/21007
+discoveryplus.*,go.discovery.com,investigationdiscovery.com##+js(json-prune, data.attributes.ssaiInfo.forecastTimeline data.attributes.ssaiInfo.vendorAttributes.nonLinearAds data.attributes.ssaiInfo.vendorAttributes.videoView data.attributes.ssaiInfo.vendorAttributes.breaks.[].ads.[].adMetadata data.attributes.ssaiInfo.vendorAttributes.breaks.[].ads.[].adParameters data.attributes.ssaiInfo.vendorAttributes.breaks.[].timeOffset)
+discoveryplus.*,go.discovery.com,investigationdiscovery.com,go.tlc.com,sciencechannel.com##+js(xml-prune, xpath(//*[name()="MPD"][.//*[name()="BaseURL" and contains(text()\,'dash_clear_fmp4') and contains(text()\,'/a/')]]/@mediaPresentationDuration | //*[name()="Period"][./*[name()="BaseURL" and contains(text()\,'dash_clear_fmp4') and contains(text()\,'/a/')]]), , .mpd)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67650
+pureshort.*##+js(aopr, app_vars.force_disable_adblock)
+pureshort.*##+js(aopr, open)
+pureshort.*##+js(set, blurred, false)
+pureshort.*##.banner
+pureshort.*###link-view > br
+pureshort.*###link-view > a[href] > img
+speedynews.xyz##+js(nano-sib)
+||speedynews.xyz^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67651
+venge.io##+js(nofab)
+venge.io##+js(set, adsProvider.init, noopFunc)
+venge.io##+js(set, SDKLoaded, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8220
+@@||akwams.*^$ghide
+akwams.*##ins.adsbygoogle
+akwams.*##.ads
+
+! https://www.reddit.com/r/uBlockOrigin/comments/jum0s5/blockthrough/
+orangeptc.com##+js(aopr, adBlockDetected)
+@@||orangeptc.com^$ghide
+btcbux.io##+js(set, blockAdBlock._creatBait, null)
+starbux.io##+js(aopr, NoAdBlock)
+starbux.io###wcfloatDiv4
+starbux.io##ins[style="display:inline-block;width:728px;height:90px;"]
+
+! tvmd .info ads
+##.fints-block__row
+@@||cdn.trafficdok.com/libs/e.js$script,domain=tvmd.info
+tvmd.info###crosscol-overflow
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67691
+mytoolz.net##+js(aopr, onload)
+
+! pngtosvg.com anti-adb
+||googlesyndication.com^$script,redirect-rule=googlesyndication_adsbygoogle.js,domain=pngtosvg.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/8233
+pics4you.net##+js(aopr, loadTool)
+*$script,3p,domain=pics4you.net
+||imgbaron.com/banner2.gif
+||imgbaron.com/pornindian.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/8237
+moozpussy.com,zoompussy.com##+js(aopr, loadTool)
+moozpussy.com,zoompussy.com##[href^="/go/desire"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67853
+videa.hu##.top-video-container-banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/8242
+systemnews24.com##+js(aeld, , /ads|Modal/)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/74747
+sitarchive.com##+js(nostif, css_class.show)
+||googlesyndication.com^$script,redirect-rule=googlesyndication_adsbygoogle.js,domain=sitarchive.com
+sitarchive.com##[id^="aswift_"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67914
+share1223.com##+js(aopr, adBlockDetected)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67983
+*$script,redirect-rule=noopjs,domain=telek.top
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/68005
+baddiehub.com##+js(nostif, css_class.scroll)
+
+! chochox.com popup
+chochox.com##+js(acs, String.fromCharCode, atob)
+
+! miohentai.com popup ads
+miohentai.com##+js(aopr, mnpwclone)
+miohentai.com###idtop
+miohentai.com##.in.paused-ad-container
+*$script,3p,denyallow=cloudflare.com|google.com|gstatic.com,domain=miohentai.com
+
+! familyporn.tv popup
+familyporn.tv##+js(set, console.clear, noopFunc)
+familyporn.tv##+js(aopr, AaDetector)
+familyporn.tv##.media_spot
+familyporn.tv##.textlink
+familyporn.tv###player_adv
+familyporn.tv##.adv
+
+! tabooporn.tv popup
+tabooporn.tv##.table
+tabooporn.tv##.textlink
+
+! kaplog.com popup
+kaplog.com##+js(nowoif)
+*$script,3p,denyallow=google.com|gstatic.com,domain=iyotvideos.com|kaplog.com
+
+! sluttyrat.com popup
+sluttyrat.com##+js(aopr, SluttyPops)
+sluttyrat.com##.ad-container
+sluttyrat.com##.topRightSquare
+sluttyrat.com###under_player_button
+
+! morritastube.xxx popop
+morritastube.xxx##+js(aopr, scriptwz_url)
+morritastube.xxx##+js(aopr, sites_urls_pops)
+
+! emulatorgames.net boost countdown timer
+emulatorgames.net##+js(nano-sib, , , 0.3)
+emulatorgames.net##+js(nano-stb, , 7000, 0)
+emulatorgames.net##[class*="-label"]
+
+! nightlifeporn.com popup
+nightlifeporn.com##.wps-player__happy-inside--pause.wps-player__happy-inside
+
+! incestvidz.com ads
+incestvidz.com##+js(aeld, DOMContentLoaded, init)
+
+! apkshrt.com popup ads
+apkshrt.com##+js(aopr, app_vars.force_disable_adblock)
+apkshrt.com##+js(set, blurred, false)
+*$script,3p,denyallow=consensu.org|google.com|gstatic.com|recaptcha.net,domain=apkshrt.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/68035
+getpczone.com##+js(nosiif, visibility, 1000)
+getpczone.com###breadcrumb-ads-links
+
+! kissmanga. nl popups
+kissmanga.*###myModal
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/68071
+secretsdeepweb.blogspot.com##+js(nosiif, visibility, 1000)
+secretsdeepweb.blogspot.com##+js(aeld, load, onload)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/68177
+sssam.com##+js(set, ads, true)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/jyq4ls/how_to_tell_users_not_to_use_your_site/gd6in04/
+*$script,redirect-rule=noopjs,domain=codimth.com
+
+! fiyaplatform.com anti-adb
+*$script,redirect-rule=noopjs,domain=fiyaplatform.com
+
+! downloadtwittervideo.com popup
+downloadtwittervideo.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9424
+kiwiexploits.com##+js(nowoif)
+kiwiexploits.com##+js(nosiif, visibility, 1000)
+*$xhr,3p,domain=kiwiexploits.com
+*$script,3p,domain=kiwiexploits.com
+||eadvertisingd.biz^
+/nab.js$script,domain=kiwiexploits.com|shortearn.net
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/68343
+*$script,redirect-rule=noopjs,domain=taufiqhdyt.com
+taufiqhdyt.com###big-ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/8268
+@@||gdrivelinks.me^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/68438
+! https://github.com/uBlockOrigin/uAssets/issues/16498
+! https://github.com/uBlockOrigin/uAssets/issues/21742
+beverfood.com##+js(nosiif, adblock)
+beverfood.com###backy
+beverfood.com##.switchabig
+||beverfood.com/immagini/*1920$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/8275
+freemiumaccounts.net##+js(nosiif, visibility, 1000)
+freemiumaccounts.net##+js(aopw, adcashMacros)
+
+! camthots.tv pre-roll ads
+! https://github.com/AdguardTeam/AdguardFilters/issues/77216
+camfox.com,camthots.tv##+js(set, flashvars.adv_pre_vast, '')
+camthots.tv##+js(set, hasPoped, true)
+camfox.com,camthots.tv##.table
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/68282
+javtrailers.com###cta
+javtrailers.com###popunderLink
+
+! Foxella Blockadblock
+@@||foxella.com^$ghide
+foxella.com##ins.adsbygoogle
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67798
+crockotube.com##div[class*="vision"]
+crockotube.com##div[class^="vis-"]
+
+! wetpussy.sexy popunder, ads
+wetpussy.sexy##.mansonry-item
+||wetpussy.sexy/js/index-nb.js
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/68575
+! https://github.com/uBlockOrigin/uAssets/issues/10428
+lootlinks.*##+js(set, canRunAds, true)
+lootlinks.*##+js(nano-sib)
+||htagpa.tech^
+||aghtag.tech^
+
+! jaysndees.com anti-adb
+jaysndees.com##+js(nosiif, visibility, 1000)
+jaysndees.com##+js(nofab)
+jaysndees.com##div[class][style^="width: 728px; height: 90px;"]
+jaysndees.com###topshow
+jaysndees.com##center:nth-of-type(3)
+jaysndees.com###cust_btn2_random
+jaysndees.com###block2
+jaysndees.com###block1
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/68616
+mr9soft.com##+js(nostif, /null|Error/, 10000)
+||googlesyndication.com^$script,redirect-rule=googlesyndication_adsbygoogle.js,domain=mr9soft.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/k2d7q8/i_have_a_blockadblock_annoyance_it_looks_like/
+@@||famfonts.com^$ghide
+famfonts.com##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/8283
+nifteam.info##+js(acs, document.getElementById, undefined)
+nifteam.info###wtf:style(visibility:visible!important;display:block!important;)
+
+! babeporn .net popunder => .org
+babeporn.*##+js(aopr, decodeURI)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/k2ssjt/broken_things/
+paidtomoney.com##+js(nosiif, visibility, 1000)
+paidtomoney.com##+js(aopr, app_vars.force_disable_adblock)
+paidtomoney.com##+js(aopr, open)
+paidtomoney.com##.banner
+doctor-groups.com##+js(nano-sib, sec--)
+doctor-groups.com##+js(nosiif, visibility, 1000)
+doctor-groups.com##+js(aopr, app_vars.force_disable_adblock)
+doctor-groups.com##+js(aopr, open)
+doctor-groups.com##.banner
+doctor-groups.com###float
+doctor-groups.com##.box-main > center > div
+doctor-groups.com##div[class][style="width:728px;height:90px;display: inline-block;margin: 0 auto"]
+doctor-groups.com##div[class][style="width:300px;height:250px;display: inline-block;margin: 0 auto"]
+doctor-groups.com##div[class][style="width:468px;height:60px;display: inline-block;margin: 0 auto"]
+
+! livemint anti-adblock
+! livemint.com##+js(aeld, DOMContentLoaded, nrWrapper)
+livemint.com###adfreeDeskSpace
+livemint.com###dekBudgetAd
+
+! https://forums.lanik.us/viewtopic.php?p=157713#p157713
+||adconfigproxy.azurewebsites.net/Adurl$xhr
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/68859
+srts.me##+js(aopr, app_vars.force_disable_adblock)
+srts.me##+js(set, blurred, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80941
+livenewsof.com##+js(nostif, css_class.show)
+
+! rapbhe.com popups
+rapbhe.com##+js(acs, String.fromCharCode, atob)
+
+! https://github.com/uBlockOrigin/uAssets/pull/8294
+niusdiario.es##+js(aeld, load, Adblock)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/k3v0z9/adblocker_detected_on_multicseu/
+multics.eu##+js(acs, $, .test)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/k3x8ta/antiadblock_popup_on_proboards/
+forums.lostmediawiki.com###ad1
+forums.lostmediawiki.com###remove_ads_link
+forums.lostmediawiki.com##[id^="ad-"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/8298
+thejournal.ie##+js(nowoif)
+thejournal.ie##html:style(background-image:none !important)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/k44in0/techoreelscom_detecting_adblock_other_issues_too/
+techoreels.com##+js(noeval-if, debugger)
+@@||techoreels.com^$ghide
+techoreels.com##.ads-placment
+
+! https://github.com/AdguardTeam/AdguardFilters/pull/67549
+nandetribune.com##+js(acs, document.addEventListener, google_ad_client)
+
+! iulive .blogspot.com popups
+iulive.blogspot.com##+js(nowebrtc)
+
+! livehere. one popups
+livehere.*##+js(nowebrtc)
+
+! https://mailocal2 .xyz/lv/la-5-hd-diretta-streaming/ anti adb
+mailocal2.xyz##+js(nosiif, visibility, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4553#issuecomment-736651781
+toonvideos.net.in##+js(acs, document.addEventListener, nextFunction)
+
+! wonporn .com popunder
+wonporn.com##td[style][width="360"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/69030
+adcorto.*##+js(aopr, app_vars.force_disable_adblock)
+adcorto.*##+js(aopw, atOptions)
+adcorto.*##+js(set, blurred, false)
+adcorto.*##.banner
+adcorto.*##.box-main > table
+*$3p,script,denyallow=facebook.net|fbcdn.net|googleapis.com|google.com|gstatic.com|recaptcha.net|hcaptcha.com,domain=adcorto.*
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/69040
+! https://github.com/AdguardTeam/AdguardFilters/issues/72191
+camflow.tv,camhoes.tv##+js(acs, onload, onclick)
+camflow.tv,camhoes.tv##+js(set, flashvars.adv_pause_html, '')
+camflow.tv,camhoes.tv##+js(set, flashvars.adv_start_html, '')
+camflow.tv,camhoes.tv##+js(set, flashvars.logo_text, '')
+camflow.tv,camhoes.tv##+js(set, flashvars.mlogo, '')
+camflow.tv,camhoes.tv##+js(set, flashvars.popunder_url, '')
+camhoes.tv##+js(set, hasPoped, true)
+camflow.tv,camhoes.tv##.box.rltd
+camflow.tv,camhoes.tv##.table
+
+! https://github.com/easylist/easylist/issues/6507
+! https://github.com/AdguardTeam/AdguardFilters/issues/70890
+playporngames.com##+js(aeld, DOMContentLoaded, window.open)
+playsexgames.xxx##+js(acs, bannersRequest)
+||saddlegirls.com/saddlegirls/ph/v/*_video.mp4$1p
+saddlegirls.com##.image-link[href^="//www.zagvee.com"]
+||playporngames.com/*.gif|
+||playporngames.com/fuck_dolls_online.jpg
+playporngames.com##.sidebarcont > .widget_text:not(#text-2)
+/xxx\/(?:[a-z]+[_-]){1,2}[a-z]+\.(?:gif|jpg)$/$image,1p,domain=playsexgames.xxx
+playsexgames.xxx##.widget:not(#text-2)
+||lifeselector.com/banners/js/banner-controller.
+
+! https://github.com/uBlockOrigin/uAssets/pull/8314
+||static.zhihu.com/heifetz/main.signflow.*.js$script,domain=www.zhihu.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/8318
+needgayporn.com#@#.is-ad-visible
+needgayporn.com##+js(aopr, ExoLoader.serve)
+needgayporn.com##[href="https://www.onlyhentaistuff.com/"]
+needgayporn.com##.table
+needgayporn.com##[src^="https://www.needgayporn.com/player/html.php"]
+needgayporn.com##.fp-brand
+needgayporn.com##^script:has-text('script')
+||needgayporn.com/ohs-180x800.gif
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/69221
+forexforum.co##+js(acs, $, .test)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/69039
+||21pron.com/21porno.com/$frame
+21porno.com###s-container
+21porno.com###s-title
+21porno.com##+js(nostif, window.location.href, 50)
+
+! rule34.paheal.net PH
+rule34.paheal.net##script[src$="ads.js"]:upward(section[id])
+
+! palcomix.com ads
+palcomix.com##center > font[size="3"][face="ARIAL"]:has-text(ADVERTISING):upward(td)
+palcomix.com##table[width="800"]:has(img[src^="../ads/"])
+/\.com\/(full)?ad[0-9a-z]+\.(?:gif|jpg)$/$image,1p,domain=palcomix.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/69378
+freemagazines.top##+js(aopr, b2a)
+freemagazines.top##+js(nostif, showModal)
+freemagazines.top##+js(acs, eval, replace)
+*$xhr,redirect-rule=nooptext,domain=freemagazines.top
+! https://github.com/uBlockOrigin/uAssets/issues/15522
+freemagazines.top###fixedbanner
+
+! https://github.com/abp-filters/abp-filters-anti-cv/issues/506
+! https://github.com/uBlockOrigin/uAssets/issues/15695
+dl-protect.*##+js(nowoif)
+||dl-protect.net/main.js?v=$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/k8crri/cryptowin/
+cryptowin.io##+js(acs, document.getElementById, 'body')
+@@||cryptowin.io^$ghide
+cryptowin.io##.panel-body > p[style=" color:#818181; background-color: #fffdc4; text-align: center; font-size: 14px; border-radius: 2px; width: 320px; max-width: 100%; margin: auto; margin-top: 15px; "]
+cryptowin.io##.hidden-xs
+
+! https://github.com/uBlockOrigin/uAssets/issues/7702
+0gomovies.*,cdnqq.net,cdn1.fastvid.co,movi.pk,ncdn22.xyz,netu.ac,player.msmini.*,player.sbnmp.*,netuplayer.*,vapley.*##+js(nowoif)
+0gogle.com##+js(aopr, __Y)
+movi.pk##+js(aeld, , vads)
+movi.pk##+js(acs, eval, replace)
+ncdn22.xyz,netu.ac,vapley.*##+js(aopr, doSecondPop)
+movi.pk###vads
+/cdn-cgi/trace$xhr,1p,domain=0gomovies.*|cdnqq.net|cdn1.fastvid.co|movi.pk|ncdn22.xyz|netu.ac|player.msmini.*|player.sbnmp.*|vapley.*
+
+! https://www.reddit.com/r/uBlockOrigin/comments/k8m63f/adblock_detected/
+plugincrack.com##+js(nostif, ai_adb)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/k8oq0j/adblock_detected/
+pikkado.com###googletop:remove()
+pikkado.com###dest_rev
+
+! https://github.com/uBlockOrigin/uAssets/issues/8337
+||gartic.io/videos/*$media,1p,redirect=noopmp4-1s
+
+! https://github.com/uBlockOrigin/uAssets/issues/8340
+hindustantimes.com##+js(no-fetch-if, adsbygoogle.js)
+hindustantimes.com##+js(ra, onclick, a[href][onclick^="getFullStory"])
+@@||hindustantimes.com^$ghide
+hindustantimes.com##.adBlocker
+hindustantimes.com##.blackOverlay
+hindustantimes.com##.desktopAd
+hindustantimes.com##.epaper-ad
+hindustantimes.com##.ht-ad-v1
+hindustantimes.com##.ht_outbrain
+hindustantimes.com##.m_ads_unit
+hindustantimes.com##.storyAd
+hindustantimes.com##.topAd
+hindustantimes.com##.widget-ad
+hindustantimes.com##[class^="adHeight"]
+hindustantimes.com##[class^="adMinHeight"]
+hindustantimes.com##body:style(overflow: auto !important;)
+hindustantimes.com##div[id^="div-gpt-ad"]
+! https://github.com/uBlockOrigin/uAssets/issues/9805
+tech.hindustantimes.com##.header-ad
+tech.hindustantimes.com##div.mobileNone
+tech.hindustantimes.com##.centerAd768
+hindustantimes.com##.new_ads_unit
+hindustantimes.com##.i-amphtml-unresolved
+hindustantimes.com##.top250Ad
+hindustantimes.com##[amp-access^="NOT"]
+hindustantimes.com##.headerAds250
+hindustantimes.com##.FirstAd
+hindustantimes.com##[class*="adsHeight"]
+
+! popups https://elitegoltv. es/canal-1.php
+newdmn.*##+js(nowoif, !newdmn, 1)
+newdmn.*###overlay
+
+! https://www.reddit.com/r/uBlockOrigin/comments/k9kmyw/adblock_detected_httpswwwkitchennovelcom/
+kitchennovel.com##+js(nostif, show)
+
+! mp4hentai.com ads
+||mp4hentai.com/holy-cell-feb3/
+mp4hentai.com###custom_html-5
+
+! hentaihd.net player overlay
+hentaihd.net##.active-item
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/69563
+*$script,redirect-rule=noopjs,domain=konnoznet.xyz
+
+! nypost.com PH
+nypost.com##img[src$="/knewz_300x250.png"]:upward(.widget_text)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/69639
+fappee.com##+js(acs, doMyStuff)
+||googletagmanager.com/gtag/$script,redirect=googletagmanager_gtm.js,domain=fappee.com
+
+! xmegadrive.com popup
+xmegadrive.com##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+xmegadrive.com##+js(set, flashvars.adv_pause_html, '')
+xmegadrive.com##.table
+xmegadrive.com##^script:has-text(l.parentNode.insertBefore(s, l);)
+
+! nsfwmonster.com popup
+nsfwmonster.com##+js(aeld, getexoloader)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kau7sb/kutmoneycom_detecting_atblock/
+kutmoney.com##+js(acs, Math, btoa)
+kutmoney.com##+js(aopr, app_vars.force_disable_adblock)
+kutmoney.com##+js(aopw, adcashMacros)
+kutmoney.com##+js(set, blurred, false)
+*$script,3p,denyallow=google.com|gstatic.com|recaptcha.net,domain=kutmoney.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/8355
+moviehdf.*##+js(aopr, popUp)
+moviehdf.*##+js(nowoif)
+||bitlk.com^$3p
+
+! popups, devtools detection https://moviessources .cf/embed/38700
+moviessources.*##+js(aeld, devtoolschange)
+moviessources.*##+js(aopr, console.clear)
+
+! citynews sites .it anti adb in video
+agrigentonotizie.it,anconatoday.it,arezzonotizie.it,avellinotoday.it,bresciatoday.it,brindisireport.it,casertanews.it,cataniatoday.it,cesenatoday.it,chietitoday.it,forlitoday.it,frosinonetoday.it,genovatoday.it,ilpescara.it,ilpiacenza.it,latinatoday.it,lecceprima.it,leccotoday.it,livornotoday.it,messinatoday.it,milanotoday.it,modenatoday.it,monzatoday.it,novaratoday.it,padovaoggi.it,parmatoday.it,perugiatoday.it,pisatoday.it,quicomo.it,ravennatoday.it,reggiotoday.it,riminitoday.it,romatoday.it,salernotoday.it,sondriotoday.it,sportpiacenza.it,ternitoday.it,today.it,torinotoday.it,trevisotoday.it,triesteprima.it,udinetoday.it,veneziatoday.it,vicenzatoday.it##+js(nostif, bADBlock)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kc1qh6/antiadblock_warning/
+flmods.com##+js(nostif, offsetHeight)
+flmods.com##[href^="https://www.flmods.com/index.php"][target="_blank"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kc6jpe/how_to_bypass_adblock_detection_on_these_sites/
+booksrack.net##+js(noeval-if, adsbygoogle)
+*$script,redirect-rule=noopjs,domain=examsnet.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/69827
+javfun.me###invideo_wrapper
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/69870
+tophentaicomics.com##+js(acs, pop_init)
+tophentaicomics.com##.sidebar-wrapper.widget_text
+||tophentaicomics.com/istrippers.jpg
+||tophentaicomics.com/pop.js
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67023
+k12reader.com##+js(aopr, rccbase_styles)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8349
+cachevalleydaily.com##+js(aopr, rccbase_styles)
+cachevalleydaily.com##.main-top-ad
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kcty39/nsfw_multiple_issues_on_site/
+girlsofdesire.org##+js(aeld, getexoloader)
+girlsofdesire.org##[href^="http://refer.ccbill.com/cgi-bin/clicks.cgi"] > div
+girlsofdesire.org##a[class="pink"][href*="refer.ccbill.com"]
+girlsofdesire.org##div[id$="_frame_content"][class="wide_boxcontent"]:has-text(Adblock)
+girlsofdesire.org###box_896
+girlsofdesire.org###box_897
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/69836
+tqanime.com##+js(nosiif, visibility, 1000)
+
+! popups animeindo .asia
+animeindo.asia##+js(aeld, , _0x)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/69951
+family-fuck.net##.plink
+
+! https://github.com/uBlockOrigin/uAssets/issues/11058
+adultfun.net##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70080
+*$xhr,redirect-rule=nooptext,domain=hitbits.io
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/69944
+kayfanet.com##+js(acs, addEventListener, google_ad_client)
+
+! kaomoji-cafe.web.app -> akuu-sflin.blogspot.com anti-adb & PH
+akuu-sflin.blogspot.com##+js(acs, matchMedia, Adblocker)
+akuu-sflin.blogspot.com##.text-center:has-text(Adv)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8377
+@@||videakid.hu^$ghide
+videakid.hu##.ad-container
+videakid.hu##.single-video-right-sidebar-ads
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70152
+filezip.cc##style:has-text(#blockblock):remove()
+filezip.cc###blockblockA
+
+! https://github.com/uBlockOrigin/uAssets/issues/8379
+phoenixfansub.com##+js(nostif, mdp)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70159
+kutt.io##+js(aopr, app_vars.force_disable_adblock)
+kutt.io##+js(set, blurred, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/69949
+jzzo.com###embed:style(position: static!important; margin-top: 0!important;)
+jzzo.com###embed-overlay
+jzzo.com###parrot
+jzzo.com##.ios_img
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70098
+sanoybonito.club##+js(aopr, adBlockDetected)
+sanoybonito.club##+js(aopr, app_vars.force_disable_adblock)
+sanoybonito.club##+js(nowoif)
+! https://github.com/uBlockOrigin/uAssets/issues/15250#issuecomment-1279610853
+sanoybonito.club##+js(nano-sib, counter, 2000)
+sanoybonito.club##+js(set, blurred, false)
+
+! https://github.com/easylist/easylist/issues/6710
+@@||unilad.co.uk^$ghide
+unilad.co.uk##div:has(> .dfp-ad-unit)
+||adsafeprotected.com/vans-adapter-google-ima.js^$redirect-rule=noopjs,script,domain=unilad.co.uk
+! https://github.com/AdguardTeam/AdguardFilters/issues/110352
+@@||micro.rubiconproject.com/prebid/dynamic/*$script,domain=unilad.co.uk
+unilad.co.uk#@#div[class*="margin-Advert"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70305
+topnewsshow.com##+js(nostif, css_class.show)
+*$script,redirect-rule=noopjs,domain=topnewsshow.com
+
+! https://github.com/LiCybora/NanoDefenderFirefox/issues/192
+panel.skynode.pro##+js(aopr, adBlockerDetected)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70363
+rezkozpatch.xyz##+js(acs, eval, ignielAdBlock)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kg8gke/ubo_cannot_bypass_annoying_blockadblock/
+@@||animekuro.org^$ghide
+animekuro.org##.mks_ads_widget
+animekuro.org##+js(acs, document.write)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10788
+telesintese.com.br##+js(refresh-defuser)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70387
+devcourseweb.com##+js(nosiif, visibility, 1000)
+devcourseweb.com##+js(nostif, brave_load_popup)
+devcourseweb.com##.ovzeacm-float-center
+devcourseweb.com##div.ovzeacm-loc-block-ad
+
+! its.porn popunder pre-roll ads
+its.porn##+js(set, POPUNDER_ENABLED, false)
+its.porn##+js(set, plugins.preroll, noopFunc)
+its.porn##aside
+its.porn##.spot_large
+its.porn##.desk-banners
+*$frame,denyallow=google.com,domain=its.porn
+
+! verdragonball.online anti adb
+@@||verdragonball.online^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/8385
+*$popunder,domain=r18hub.com,3p
+||r18hub.com/assets/vast/videos/*$xhr,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70455, 101236
+samaa-pro.com##+js(aopr, app_vars.force_disable_adblock)
+7misr4day.com,sama-pro.com##+js(nano-sib)
+7misr4day.com##+js(aopr, adBlockDetected)
+samaa-pro.com##+js(set, blurred, false)
+7misr4day.com##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70457
+miklpro.com##+js(aopr, app_vars.force_disable_adblock)
+miklpro.com##+js(set, blurred, false)
+miklpro.com##.box-main > .blog-item
+miklpro.com##.banner
+*$script,3p,denyallow=google.com|gstatic.com|recaptcha.net,domain=miklpro.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70460
+sshconect.com.br##+js(acs, addEventListener, nextFunction)
+
+! hd21 group sites
+||zusepe.xyz^
+! hd21.com/net
+hd21.*##+js(nowoif)
+hd21.com##.ID-bottom-banner
+hd21.com##.adv_middle
+hd21.*##.aside_video
+hd21.com##.drt-sponsor-block
+||hd21.*/templates/base_master/js/jquery.shows.min.js
+! iceporn.com/net
+iceporn.*##+js(nowoif)
+iceporn.com##.puFloatLine
+iceporn.com###abmessage
+iceporn.*###spot_video_livecams
+iceporn.*##.furtherance
+iceporn.*##.take_place + .take_place
+iceporn.*###spot_video_partner_banner
+iceporn.*###spot_video_partner_banner + span[style]
+! https://github.com/uBlockOrigin/uAssets/issues/8462
+! https://github.com/AdguardTeam/AdguardFilters/issues/102670
+nuvid.*##+js(aeld, click, open)
+nuvid.*##+js(nowoif)
+nuvid.*##div[style^="height:477px"]
+nuvid.*##footer > .rfix
+nuvid.*##.aside > h2
+nuvid.*##.download_adv_text_photo
+nuvid.*##.video-options
+nuvid.*##.advertisement
+||nuvid.*/player_right_$frame
+! pornlib.com
+pornlib.*##+js(nowoif)
+! tubeon.com/net
+tubeon.*##+js(nowoif)
+tubeon.*##.spots
+tubeon.*##.thr-rcol
+! vivatube.com/net
+vivatube.*##+js(nowoif)
+vivatube.*##.livecams
+vivatube.*##.clear + .mt15.container[style="margin-top:15px; border-bottom:0;"]
+! winporn.com/net
+winporn.*##+js(nowoif)
+! yeptube.com/net
+yeptube.*##+js(nowoif)
+yeptube.com##.puFloatLine
+yeptube.*##.spots
+yeptube.*##.thr-rcol
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70482
+gasngogeneralstores.com##[href="https://gasngogeneralstores.com/sexdating.php"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70529
+gaytail.com##+js(aeld, getexoloader)
+gaytail.com##+js(acs, onload, onclick)
+gaytail.com##.happy-footer
+||gaytail.com/fancy-mode-7abe/
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70416
+||datawav.club/*.php
+
+! https://github.com/uBlockOrigin/uAssets/issues/9057
+game-owl.com##+js(aost, String.prototype.charCodeAt, ai_)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/khqk0a/adblock_detected_on_atvat/
+! https://github.com/uBlockOrigin/uAssets/issues/11665
+atv.at##+js(set, errcode, 0)
+*&expires$media,redirect=noopmp3-0.1s,domain=atv.at
+||zomap.de/*&expires=$script,domain=atv.at
+atv.at##[data-oasis-id="midroll-marker"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70563
+anime-saikou.com##+js(nosiif, visibility, 1000)
+
+! https://forums.lanik.us/viewtopic.php?p=157965#p157965
+arkadiumhosted.com##+js(set, Adv_ab, false)
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=arkadiumhosted.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kicmhf/adblock_detected/
+streamsport.*##+js(aeld, , _0x)
+streamsport.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17210
+@@||micro.rubiconproject.com/prebid/dynamic$script,domain=ladbible.com
+ladbible.com#@#div[class*="margin-Advert"]
+ladbible.com##span:has-text(Advert)
+ladbible.com##[data-cypress="sticky-ads"]
+@@||pub.doubleverify.com/signals/pub.js$xhr,script,domain=ladbible.com|gamingbible.*|tyla.com|unilad.com
+@@||rubiconproject.com/prebid/$xhr,script,domain=ladbible.com|gamingbible.*|tyla.com|unilad.com
+@@||static.adsafeprotected.com/vans-adapter-google-ima.js$xhr,domain=ladbible.com|gamingbible.*|tyla.com|unilad.com
+@@||c.amazon-adsystem.com/aax2/apstag.js$xhr,domain=ladbible.com|gamingbible.*|tyla.com|unilad.com
+! https://github.com/uBlockOrigin/uAssets/issues/19022
+ladbible.com##[data-cypress="sticky-header"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kilzmv/adblock_detected/
+*$image,redirect-rule=1x1.gif,domain=rollercoin.com
+
+! windowmatters.com anti-adb
+windowsmatters.com##+js(aeld, load, isBlanketFound)
+*$script,redirect-rule=noopjs,domain=windowsmatters.com
+windowsmatters.com##div[class$="-quick-adsense"]
+
+! masbrooo.com/2ndrun.tv anti-adb
+! https://github.com/uBlockOrigin/uAssets/issues/16543
+masbrooo.com,2ndrun.tv##+js(aeld, load, showModal)
+*$script,redirect-rule=noopjs,domain=masbrooo.com|2ndrun.tv
+2ndrun.tv##+js(set, DHAntiAdBlocker, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9130
+*$xhr,redirect-rule=nooptext,domain=fr.de
+@@||fr.de^$ghide
+fr.de##div[data-id-advertdfpconf]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70723
+hdpicsx.com##.ads
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kjd44v/ad_block_detected_on_httpstextbinnet/
+textbin.net##+js(set, isAdBlockActive, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3995#issuecomment-750903553
+timesnownews.com##.ad-section-one
+timesnownews.com##.ad-section-three
+timesnownews.com##.ad-panel-wrap
+timesnownews.com##.add-wrap
+timesnownews.com##.right-block > .section-six
+timesnownews.com##.right-block > .section-one
+||imasdk.googleapis.com/js/sdkloader/ima3.js^$script,redirect-rule=google-ima.js,domain=timesnownews.com
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js^$script,domain=timesnownews.com
+@@*$ghide,domain=timesnownews.com|timesnowhindi.com|timesnowmarathi.com|zoomtventertainment.com
+timesnownews.com,timesnowhindi.com,timesnowmarathi.com,zoomtventertainment.com##.adunit
+timesnownews.com,timesnowhindi.com,timesnowmarathi.com,zoomtventertainment.com##+js(nostif, Adblock)
+!#if env_mobile
+@@||onelinksmartscript.appsflyer.com/onelink-smart-script-latest.js$script,domain=timesnownews.com
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/8402
+tormalayalam.*##+js(aopw, adcashMacros)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70787
+blograffo.net##+js(acs, addEventListener, nextFunction)
+blograffo.net##[href^="https://amzn.to/"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kjsro9/ublock_detected/
+aquiyahorajuegos.net##+js(aopr, adBlockDetected)
+aquiyahorajuegos.net##+js(nowoif)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kjvva0/ublock_detected/
+imag-r.com##+js(aopr, adBlockerDetected)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70763
+/block-adblock.js$script
+
+! https://www.spielaffe.de/Spiel/Festliche-Mode-designen anti adb
+@@||bitent.com/lock_html5/adPlayer/*/adPlayer.js$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kkdltv/adblocker_detected_eropastecom/
+eropaste.com##+js(set, isAdBlockActive, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70487
+! https://github.com/AdguardTeam/AdguardFilters/issues/70888
+! https://github.com/AdguardTeam/AdguardFilters/issues/71223
+adult-sex-gamess.com,hentaigames.app,mobilesexgamesx.com,mysexgamer.com,porngameshd.com,sexgamescc.com##+js(nostif, /out.php)
+adult-sex-gamess.com,hentaigames.app,mobilesexgamesx.com,mysexgamer.com,porngameshd.com,sexgamescc.com##.a-th:first-child:has(iframe)
+adult-sex-gamess.com,hentaigames.app,mobilesexgamesx.com,mysexgamer.com,porngameshd.com,sexgamescc.com##.alert-danger > .row
+adult-sex-gamess.com,hentaigames.app,mobilesexgamesx.com,mysexgamer.com,porngameshd.com,sexgamescc.com##.ntkSides
+adult-sex-gamess.com,hentaigames.app,mobilesexgamesx.com,mysexgamer.com,porngameshd.com,sexgamescc.com###modalegames
+
+! d.pornxp.com/pornxp.org popup
+! https://github.com/uBlockOrigin/uAssets/issues/9830
+pornxp.com##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+pornxp.com,pornxp.org##+js(aopr, AaDetector)
+*$script,3p,domain=pornxp.com
+||pornxp.*/sp/$subdocument
+! generic AaDetector mitigation
+##div[id][style^="position: fixed; inset: 0px; z-index: 2147483647; background: black"][style*="opacity: 0.01"]
+/heyboy/com/*.js$script
+/loadme/com/*.js$script
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70850
+sexflashgame.org##+js(acs, ishop_codes)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70849
+||porngames.com/*.gif$image,1p
+porngames.com##div[style^="display: block; position: fixed; z-index:"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kkg3sw/
+! https://github.com/uBlockOrigin/uAssets/issues/18709
+f2movies.to##+js(nostif, /0x|devtools/)
+f2movies.to##+js(nosiif, _0x)
+||awkljjaawerba.top^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70843
+//images\/(?:Banner\d{1,2}\.|[a-z]{3}\/)/$image,1p,domain=thesquarshers.com
+thesquarshers.com##a:has(img[src*="/Banner"])
+thesquarshers.com##.table
+thesquarshers.com##.video-holder
+
+! cutesexyteengirls.com exit prevention
+cutesexyteengirls.com##+js(aeld, beforeunload)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8406
+@@||fssquad.com^$ghide
+fssquad.com##+js(nano-sib, , , 0)
+fssquad.com##.banner-end.center-it > [href]
+
+! https://github.com/uBlockOrigin/uAssets/issues/8407
+cablegratis.online###tme
+@@||cdnjs.cloudflare.com/ajax/libs/fuckadblock$script
+
+! wmoviesfree. com (.online) popups
+wmoviesfree.*##.orange.big-color-btn
+||wmoviesfree.*/themes/movies/img/banner_leaderboard$image
+
+! dulu. to popups
+hotflix.cc##+js(nowoif)
+videobot.stream##+js(aopr, __Y)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70904
+ehotpics.com,upicsz.com##figure[style^="width: 310px;"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70939
+@@||down.mdiaload.com^$ghide
+down.mdiaload.com##div[style$="background-color:#ffffff; text-align:center"]
+down.mdiaload.com##div[style="width:336px; height:280px"]
+down.mdiaload.com##.btn-dow.btn[href$=".html"]
+down.mdiaload.com##div.download-option-btn:nth-of-type(4)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70949
+ontiva.com##+js(set, canRunAds, true)
+ontiva.com##+js(nowoif)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=45510
+slideplayer.com##.bottom_comment_banners
+slideplayer.com##.top_comment_banners
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71052
+@@||securepubads.g.doubleclick.net^$script,domain=mope.io
+@@||securepubads.g.doubleclick.net/gampad/ads$xhr,domain=mope.io
+mope.io##[id^="google_ads_iframe"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71143
+gaysearch.com##+js(nowoif)
+gaysearch.com##.twocolumns > .aside
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71203
+*$script,redirect-rule=noopjs,domain=kursors.lv
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71167
+javbel.com##+js(acs, decodeURI, decodeURIComponent)
+iframe2videos.xyz##+js(aopr, __Y)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71177
+javbix.com##.adsvideo
+javbix.com##.content_movie > div[style="padding:10px; margin-top:15px; text-align:center"]
+javbix.com##.letterLi:last-of-type
+
+! https://github.com/easylist/easylist/issues/6476#issuecomment-751258895
+rawmanga.top##+js(aopr, AaDetector)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71232
+2adultflashgames.com##+js(aopr, loadTool)
+||2adultflashgames.com/img/$1p
+||sexsim2.com^$domain=2adultflashgames.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/knara8/need_help_with_anti_adblock/
+javnow.net##+js(aost, String.prototype.charCodeAt, ai_)
+javnow.net##div[style$="width:300px;height:250px;"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71233
+||highwebmedia.com/ri/$domain=clubsarajay.com
+clubsarajay.com###mgb
+clubsarajay.com###mpc-container
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71300
+gatcha.org##+js(nostif, css_class.show)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71301
+zilinak.sk##+js(nostif, offsetHeight)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8413
+loadout.tf##.loadout-application-advertisement-header
+loadout.tf##.loadout-application-top > div:not([class]):style(left:-3000px !important;position:absolute !important;)
+! https://www.reddit.com/r/uBlockOrigin/comments/109cwi7/
+loadout.tf###main-bar
+loadout.tf###main-content:style(width: 100% !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71225
+||raw.githack.com/Raqmedia/adblock/$script,3p
+raqmedia.com##[href^="https://www.englezz.com"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71316
+filtercams.com##+js(acs, $, #advVid)
+filtercams.com##.table
+
+! cryptofun .space anti adb
+/adex.js$badfilter
+@@||cryptofun.space^$script,1p
+@@||shrink.icu/prebid.js$script
+
+! anime47 .com popups
+anime47.com##+js(aopr, open)
+
+! various filters
+/ajax/banner/list?page=$xhr,1p
+goload.*##+js(aeld, click, 0x)
+hd44.net##+js(aopr, decodeURI)
+javhd.today##+js(acs, document.createElement, 'script')
+filmovi.ws##^script:has-text(decodeURIComponent)
+aniwatch.pro,ytc.*##+js(nowoif)
+||cdn.ay.gy/js/$script,3p
+shahid4u.*,watchonlinemoviespk.*##+js(nowoif)
+megaupto.com##+js(nano-stb, seconds)
+hihihaha1.xyz,rufiguta.com##+js(nowoif, /^/, 1)
+projectfreetv.*,hdss.*,moviesflix.*,10starhd.*##^script:has-text(break;case)
+||cdn.abysscdn.com/players/playhydraxb.min.js$script,domain=hihihaha1.xyz
+||bonepa.com^
+||cetusbrooder.com^
+||cooperationmoth.com^
+||holdingwager.com^
+||crawlcoxed.com^
+||got-to-be.net^
+||hobbiesshame.online^
+||storehighlystrongtheproduct.vip^
+||trivial-girlfriend.com^
+filmyzilla.*##[href^="//"][rel="nofollow"]
+streamhub.*##center > a[href][target="_blank"]
+streamhub.*##+js(aopw, __aaZoneid)
+streamhub.*##+js(nowoif)
+streamingcommunity.*##+js(acs, decodeURI, decodeURIComponent)
+*$script,3p,denyallow=streamhub.to,domain=streamhub.*
+hdhub4u.*##.watch-hd
+hdhub4u.*##.hd-links
+superstream.*##+js(aopr, AaDetector)
+
+! pp_issues
+! firefox html filtering
+! ##^script:has-text(break;case $.)
+!#if cap_html_filtering
+123moviefree4u.com,123movies.*,123moviesla.*,123movieweb.*,194.163.183.129,2embed.*,4hiidude.*,6movies.net,720pstream.*,9xmovies.*,aagmaal.*,adsh.cc,adshort.*,afilmyhouse.blogspot.com,ak.sv,allmovieshub.*,animefenix.com,animefrenzy.net,animeshouse.info,animesultra.com,api.webs.moe,apkmody.io,asianplay.*,atglinks.com,atishmkv.*,atomixhq.*,attvideo.com,avimobilemovies.net,backfirstwo.site,bdnewszh.com,ccurl.net,cinema.cimatna.com,cloudvideo.tv,cloudvideotv.*,crackstreams.*,crazyblog.in,cricstream.*,crictime.*,daddylive.*,daddylivehd.*,databasegdriveplayer.*,dembed1.com,dembed2.com,divicast.com,dloader.*,dood.*,dooood.*,dvdplay.*,easylinks.*,egynow.cam,embed.meomeo.pw,embedstream.me,extralinks.*,extramovies.*,fanproj.net,faselhd.*,filebox.click,filemoon.*,filmeserialeonline.org,filmesonlinexhd.biz,filmovi.ws,filmy.*,filmyhit.*,filmywap.*,filmyzilla.*,filmyzilla2021.xyz,filmyzilla2022.com,filmyzillafullmovie.waystohunt.info,flexyhit.com,fmovies.*,footyhunter3.xyz,foreverwallpapers.com,foreverwallpapers.com,french-streams.cc,fsapi.*,fslinks.org,fstream365.com,gameshdlive.xyz,gdplayer.*,gdriveplayer.*,gdrivez.xyz,goload.*,gomoviefree.*,gomovies.*,gowatchseries.*,hdmoviesfair.*,hdmoviz.*,hinatasoul.com,hindilinks4u.*,hindimovies.to,hitmovies4u.com,hotstar.news,hurawatch.*,hwnaturkya.com,hxfile.co,isaidub.*,isaidub3.co,isaidubhd.*,jalshamoviezhd.*,jiorockers.*,linkshub.*,linksme.*,livecricket.*,lulustream.com,luluvdo.com,madrasdub.*,membed.net,mgnetu.com,mkvcinemas.*,mobilemovies.*,movies2watch.*,moviesda1.*,moviesdanet.com,moviesmeta.*,moviespapa.*,moviewatch.com.pk,moviewatchonline.com.pk,mp3juice.info,mp3juices.cc,mp4moviez.*,mydownloadtube.*,neomovies.net,newsrade.com,niaomea.me,nolive.me,nollyverse.com,novelssites.com,nsw2u.*,nuroflix.*,o2tvseries.*,o2tvseriesz.*,oii.io,pctfenix.*,pctnew.*,pepperlive.info,pirlotv.*,playertv.net,poscitech.*,poscitesch.com,primewire.*,putlocker68.com,s.to,serienstream.*,sflix.*,shahed4u.*,shaheed4u.*,sharkfish.xyz,skidrowcodex.net,speedostream.*,sportcast.*,sports-stream.site,sportskart.*,stream4free.live,streamadblocker.*,streamingcommunity.*,streamnoads.com,tamilarasan.*,tamilfreemp3songs.*,tamilmobilemovies.in,tamilprinthd.*,tgo-tv.co,thewatchseries.live,tnmusic.in,torrentdosfilmes.*,travelplanspro.com,tusfiles.com,unlimitmovies.com,uploadflix.org,uploadrar.*,uqload.*,userscloud.com,vid-guard.com,vidcloud9.*,vido.*,vidoo.*,vidsaver.net,vidspeeds.com,vidsrc.*,vipbox.*,vipboxtv.*,viprow.*,viralitytoday.com,voiranime.stream,vudeo.*,vumoo.*,watchdoctorwhoonline.com,watchomovies.*,webhostingpost.com,webseriesclub.com,yesmovies.*,ylink.bid,ytix.xyz,ytix.xyz##^script:has-text(break;case $.)
+!#else
+! ##+js(rmnt, script, break;case $.)
+123moviefree4u.com,123movies.*,123moviesla.*,123movieweb.*,194.163.183.129,2embed.*,4hiidude.*,6movies.net,720pstream.*,9xmovies.*,aagmaal.*,adsh.cc,adshort.*,afilmyhouse.blogspot.com,ak.sv,allmovieshub.*,animefenix.com,animefrenzy.net,animeshouse.info,animesultra.com,api.webs.moe,apkmody.io,asianplay.*,atglinks.com,atishmkv.*,atomixhq.*,attvideo.com,avimobilemovies.net,backfirstwo.site,bdnewszh.com,ccurl.net,cinema.cimatna.com,cloudvideo.tv,cloudvideotv.*,crackstreams.*,crazyblog.in,cricstream.*,crictime.*,daddylive.*,daddylivehd.*,databasegdriveplayer.*,dembed1.com,dembed2.com,divicast.com,dloader.*,dood.*,dooood.*,dvdplay.*,easylinks.*,egynow.cam,embed.meomeo.pw,embedstream.me,extralinks.*,extramovies.*,fanproj.net,faselhd.*,filebox.click,filemoon.*,filmeserialeonline.org,filmesonlinexhd.biz,filmovi.ws,filmy.*,filmyhit.*,filmywap.*,filmyzilla.*,filmyzilla2021.xyz,filmyzilla2022.com,filmyzillafullmovie.waystohunt.info,flexyhit.com,fmovies.*,footyhunter3.xyz,foreverwallpapers.com,foreverwallpapers.com,french-streams.cc,fsapi.*,fslinks.org,fstream365.com,gameshdlive.xyz,gdplayer.*,gdriveplayer.*,gdrivez.xyz,goload.*,gomoviefree.*,gomovies.*,gowatchseries.*,hdmoviesfair.*,hdmoviz.*,hinatasoul.com,hindilinks4u.*,hindimovies.to,hitmovies4u.com,hotstar.news,hurawatch.*,hwnaturkya.com,hxfile.co,isaidub.*,isaidub3.co,isaidubhd.*,jalshamoviezhd.*,jiorockers.*,linkshub.*,linksme.*,livecricket.*,lulustream.com,luluvdo.com,madrasdub.*,membed.net,mgnetu.com,mkvcinemas.*,mobilemovies.*,movies2watch.*,moviesda1.*,moviesdanet.com,moviesmeta.*,moviespapa.*,moviewatch.com.pk,moviewatchonline.com.pk,mp3juice.info,mp3juices.cc,mp4moviez.*,mydownloadtube.*,neomovies.net,newsrade.com,niaomea.me,nolive.me,nollyverse.com,novelssites.com,nsw2u.*,nuroflix.*,o2tvseries.*,o2tvseriesz.*,oii.io,pctfenix.*,pctnew.*,pepperlive.info,pirlotv.*,playertv.net,poscitech.*,poscitesch.com,primewire.*,putlocker68.com,s.to,serienstream.*,sflix.*,shahed4u.*,shaheed4u.*,sharkfish.xyz,skidrowcodex.net,speedostream.*,sportcast.*,sports-stream.site,sportskart.*,stream4free.live,streamadblocker.*,streamingcommunity.*,streamnoads.com,tamilarasan.*,tamilfreemp3songs.*,tamilmobilemovies.in,tamilprinthd.*,tgo-tv.co,thewatchseries.live,tnmusic.in,torrentdosfilmes.*,travelplanspro.com,tusfiles.com,unlimitmovies.com,uploadflix.org,uploadrar.*,uqload.*,userscloud.com,vid-guard.com,vidcloud9.*,vido.*,vidoo.*,vidsaver.net,vidspeeds.com,vidsrc.*,vipbox.*,vipboxtv.*,viprow.*,viralitytoday.com,voiranime.stream,vudeo.*,vumoo.*,watchdoctorwhoonline.com,watchomovies.*,webhostingpost.com,webseriesclub.com,yesmovies.*,ylink.bid,ytix.xyz,ytix.xyz##+js(rmnt, script, break;case $.)
+!#endif
+
+! ##+js(acs, Math, zfgloaded)
+01fmovies.com,1movietv.com,33sk.*,3sk.*,4shared.com,allcalidad.*,anime-odcinki.pl,animesvision.*,bdcraft.net,best4hack.blogspot.com,biqle.com,bmovie.*,cinedetodo.*,cinetux.*,converto.io,descargas2020.*,extrafreetv.com,exyi.net,filmeonlinehd.biz,fmovie.*,hindilinks4u.*,hitokin.net,ipaste.pw,iptvdroid1.blogspot.com,ironysub.*,janjua.*,kstreaming.*,kwik.*,langitmovie.com,libertyvf.*,movieloversworld.com,nensaysubs.net,nflbite.com,onlinework4all.com,onlystream.tv,popcornstream.*,protect-mylinks.com,putlocker.*,saveshared.com,short.pe,shorten.*,solarmovie.*,storieswatch.com,streamango.*,streaming-one.com,streamloverx.com,televisiongratishd.com,turkanime.*,uploadev.*,upzone.cc,ur-files.com,vidoza.net,vidshare.tv,watchhowimetyourmother.online,watchmadmenonline.com,watchonceuponatimeonline.com,watchsexandthecity.com,watchtrailerparkboys.com,xmovies08.*##+js(acs, Math, zfgloaded)
+! ##+js(acs, JSON.parse, break;case $.)
+1111fullwise.*,111watcho.*,123-movies.*,123moviesc.*,123moviesla.*,194.163.183.129,1cloudfile.com,1kmovies.*,1movieshd.com,2gomovies.*,4filmyzilla.*,69hoshudaana.*,a123movies.net,acervofilmes.com,adshort.*,airportseirosafar.com,ajkalerbarta.com,akmcloud.*,allmovieshub.*,altadefinizione01.*,animekaizoku.com,animepahe.*,animeshow.tv,animesonehd.xyz,animesonline22.com,animetak.*,animeworld.tv,api.webs.moe,appsfree4u.com,appvn.com,arenavision.*,askim-bg.com,attvideo.com,b-bmovies.com,baixedetudo.net.br,baramjak.com,batmanstream.*,bclikeqt.com,beastlyprints.com,bengalisite.com,bestfullmoviesinhd.org,birdurls.com,bmovies.*,bollymovies.*,bollywoodfilma.*,buffstream.*,cablegratis.online,ch-play.com,charexempire.com,clampschoolholic.*,comandotorrenthd.org,comofuncionaque.com,crackevil.com,crichd.*,cricplay2.xyz,crictime.*,cryptoforu.org,deportealdia.live,dflinks.*,downloadming.*,dramacool.*,e123movies.com,easylinks.*,eio.io,essaysharkwriting.club,europix.*,exe.app,exee.io,extreme-down.*,f1stream.*,fbstream.*,fffmovies.*,filme-bune.biz,filmisongs.*,filmovi.ws,flixhq.ru,flixtor.video,foumovies.*,fsapi.*,fullcinema.*,fullreal.*,fulltube.*,fzmoviesnet.com,gdrivez.xyz,getmega.net,givemenbastreams.com,givemeredditstreams.com,gnula.*,gogoplay.*,gomo.to,gyonlineng.com,hd44.net,hdmoviehubs.*,hdmovies23.com,hdonline.co,hdpopcorns.*,hdss-to.*,hdzone.org,healthnewsreel.com,hollymoviehd.cc,hwnaturkya.com,i123movies.net,iegybest.co,ikindlebooks.com,illink.net,imagetot.com,imgdawgknuttz.com,isaimini.ca,iv-soft.com,jalshamoviezhd.*,janjua.tv,jewelry.com.my,jkanime.*,johnwardflighttraining.com,jujutsukaisen-manga.online,jujutsukaisenonline.net,kabarportal.com,katflys.com,keepv.id,keepvid.*,kiss-anime.*,kissanime.*,kissasians.org,kissmanga.*,klubsports.xyz,kora-online.tv,kshow123.net,kstorymedia.com,kumascans.com,la123movies.org,leet365.cc,lespassionsdechinouk.com,libertestreamvf.*,linkadshield.xyz,linkshere.*,linkshub.*,linksmore.*,live7v.com,livestreamtv.pk,lmplayer.xyz,lodynet.*,lookmovie.*,lookmovie102.xyz,lookmovie103.xyz,lookmovie107.xyz,lookmovie108.xyz,lookmovie110.xyz,lookmovie113.xyz,lookmovie114.xyz,lookmovie115.xyz,lookmovie116.xyz,lookmovie117.xyz,lookmovie120.xyz,lookmovie121.xyz,lookmovie122.xyz,lookmovie123.xyz,lookmovie125.xyz,lookmovie127.xyz,lookmovie129.xyz,lookmovie130.xyz,lookmovie131.xyz,lookmovie132.xyz,lookmovie134.xyz,lookmovie135.xyz,lookmovie137.xyz,lookmovie138.xyz,lookmovie139.xyz,lookmovie140.xyz,lookmovie141.xyz,lookmovie142.xyz,lookmovie143.xyz,lookmovie186.*,lookmoviess.com,losmovies.*,manga4life.com,mangadna.com,mangahub.io,mangasco.com,mangceh.cc,masengwa.com,mcdlpit.com,mega-mkv.com,mega-p2p.net,megafilmeshd20.*,megashare-website.com,mettablog.com,mlbstream.*,mobilemovies.*,momomesh.tv,motive213link.blogspot.com,motogpstream.*,moviebb.net,moviemasalahd.xyz,movierulzhd.*,movies7.to,moviesbaba.*,moviescounter.*,moviewatchonline.com.pk,mp3-gratis.it,mp3juice.info,mp3spy.cc,mp4moviez.*,my1ink.*,myegy.*,myfernweh.com,myl1nk.*,myli3k.*,mylink.*,naasongs.*,naasongsfree.*,nbastream.*,needrombd.com,neomovies.net,nflstream.*,ngomik.net,nhlstream.*,nollyverse.com,novamovie.net,novelssites.com,noweconomy.live,nsw2u.*,oceanofmovies.*,onlinesubtitrat.com,onlinevideoconverter.*,oploverz.*,orangeink.pk,ostreaming.tv,pagalworld.*,peliculontube.net,pelismart.com,pelisstar.com,pirlotv.mx,playerfs.com,playlist-youtu.be,playtamil.*,plylive.*,primewire.*,projectfreetv.*,projectfreetv2.com,projectfreetv2022.com,putlocker-website.com,putlocker68.com,putlocker9.*,putlockers.*,querofilmehd.*,radamel.icu,ragnaru.net,repelis.in,rojadirectahd.online,romfast.com,rugbystreams.*,s4p2.shingekinokyojin.tv,sampledrive.in,sdmoviespoint.*,serijefilmovi.com,serijehaha.com,sharkfish.xyz,shortlinkto.*,shr.cash,shrugemojis.com,simsdom.com,skidrow-games.com,soap2day.*,soap2dayto.org,socceronline.*,sockshare.ac,sportstreamtv.*,srek.net,ssoap2day.*,st23q.com,stivandz.com,stream.pkayprek.com,streamingfrance.net,talaba.su,tamilyogi.best,tamilyogis.*,tatabrada.tv,tenies-online.*,tennisstreams.*,tgo-tv.co,thelinkbox.*,thesuperdownload.*,thetechzone.online,thingstomen.com,thripy.com,tlin.me,tomatomatela.com,turcasmania.com,tv96.cc,tvply.*,u123movies.com,ufcstream.*,ukmagazinesfree.com,uploadbox.cc,uppit.com,urdubolo.pk,usagoals.*,vedbom.*,vedshare.com,veryfastdownload.pw,vevioz.com,vidbeem.com,vidbm.com,vidcorn.to,vidembed.*,vidlo.us,vidsrc.*,vkmp3.*,wat32.tv,watchmovieshd.*,watchseries.*,watchserieshd.*,watchseriesstream.com,watchtvch.club,wawacity.*,webhostingpost.com,wifi4games.com,wildwap.*,wmoviesfree.*,xmovies8.*,xn--mlaregvle-02af.nu,xxxwebdlxxx.top,yeshd.net,yesmovies.*,yodbox.com,yotrabajo.info,yt-api.com,yt-download.org,yt1s.com,ytix.xyz,ytsaver.*,zeidgh.com,ziperto.com##+js(acs, JSON.parse, break;case $.)
+! ##+js(acs, parseInt, break;case $.)
+123moviefree4u.com,123movies-official.net,123movies-official.site,123movies.net,123movies4u.xyz,123movies4up.*,123moviesfree.*,123moviesme.*,123moviesready.org,123moviesto.club,1movieshd.com,4hiidude.*,4stream.*,5xmovies.*,720pstream.*,7hitmovies.*,9kmovies.*,9tsu.*,9xmovie.*,9xmovies.*,9xupload.*,ajkalerbarta.com,allosoccer.com,altadefinizione01.*,anavidz.com,anidl.org,animasu.club,anime-sanka.com,anime4up.*,animeflv.*,animefreak.*,animefrenzy.net,animehditalia.it,animes.vision,animesanka.*,animesultra.com,animesup.*,anitube.*,apkmody.io,apkshrt.com,appsfree4u.com,asianembed.io,asianhdplay.net,asianplay.*,asianwatch.net,atdhe.pro,atomohd.*,bakotv.com,bbb.fm,bdmusic23.*,beastlyprints.com,bengalisite.com,bestfullmoviesinhd.org,bhplay.me,bx-zone.com,canonprintersdrivers.com,cat-a-cat.net,ccnworldtech.com,ch-play.com,cheat.hax4you.net,cima100fm.com,cimalina.me,cinema.cimatna.com,cinevision.online,cinevision4.online,clipconverter.cc,crystal-launcher.pl,cuevanahd.net,daddylive.*,dailyuploads.net,dembed1.com,dembed2.com,distanta.net,dloader.*,dlpsgame.org,dtmaga.com,egyshare.cc,elevationmap.net,eplayvid.*,essaysharkwriting.club,exey.io,f1stream.*,fakazagods.com,fanproj.net,fastilinks.*,fbox.to,fboxtv.com,fbstream.*,fightforthealliance.com,fileguru.net,files.im,filma1.*,filma24.*,filmy.*,filmyhit.*,filmywap.*,filmyzilla.filmywap2021ganduworld.com,filmyzillafullmovie.waystohunt.info,flixtor.*,fmovies.*,fmovies2.cx,freemoviesfull.com,freeromsdownload.com,fromhots.com,futemax.app,g3g.*,gameslay.net,gdplayer.*,gentlewasher.com,gofilmes.*,gogoplay1.com,gogoplay2.com,gogoplay4.com,gomoviz.*,govid.*,gowatchseries.*,gum-gum-stream.com,hds-streaming-hd.com,hds-streaming.*,healthnewsreel.com,hentaizm.fun,hhdmovies.*,hikarinoakari.com,hilaryhahn.com,hindimovies.*,hitmovies4u.com,hothit.me,hotmasti.*,hwnaturkya.com,ilgeniodellostreaming.*,ilinks.in,imgspark.com,insurancebillpayment.net,intereseducation.com,isaidub.*,isaidubhd.*,iv-soft.com,jetanimes.*,jewelry.com.my,jiorockers.*,jockantv.com,johnwardflighttraining.com,joolinks.*,jpscan-vf.com,kabarportal.com,katlinks.*,katmoviehd4.com,kimoitv.com,kingdomfiles.com,kstorymedia.com,leet365.cc,lespassionsdechinouk.com,libertestreamvf.*,liflix.site,ling-online.com,linkotes.com,linksfire.*,linksly.co,linksme.*,livestreamtv.pk,lustholic.com,madrasdub.*,mangahere.today,manganatos.com,mangas-raw.com,manhuascan.*,manhwa68.com,mcubd.host,megafilmeseseriesonline.com,melodelaa.*,messitv.net,mkvcage.*,mkvpapa.*,mlbstream.*,mobdropro.com,modsfire.com,moonblinkwifi.com,moshahda.net,motive213.com,motogpstream.*,moviedekho.in,moviefreak.*,movies2k.*,moviescounnter.com,moviesda1.*,moviesdanet.com,moviesdaweb.*,movieskafanda.xyz,moviesland.*,moviespapa.*,moviestars.to,moviesverse.*,moviewatch.com.pk,moviewr.com,mp3-now.com,mp3fromyou.tube,mp3fusion.net,mp3juices.su,mp3yeni.org,multicanais.*,mycima.*,myfernweh.com,myflixer.*,myflixertv.to,myoplay.club,nbastream.*,networklovers.com,neymartv.net,nflstream.*,ngomik.net,nhlstream.*,nkiri.com,novelroom.net,nullpk.com,ogario.*,okamimiost.com,okanime.*,orangeink.pk,ovamusic.com,pahe.*,paidnaija.com,pelismarthd.com,pelismartv.com,pelisplus.uproxy.page,pelispoptv.com,pirate4all.com,plylive.*,plyvdo.*,poscitech.*,put-locker.com,putingfilm.com,putlocker.*,putlockers.*,quiltfusion.com,rahim-soft.com,rawkuma.com,redowlanalytics.com,roms-download.com,roms-hub.com,roms-telecharger.com,rugbystreams.*,s.to,satoshi-win.xyz,serien.cam,serienstream.to,series9.*,serijehaha.com,sflix.pro,sflix.to,shadowrangers.*,shahed4u.*,shorterall.com,showbizbites.com,shrink.*,shrugemojis.com,socceronline.*,southfreak.*,ssrmovies.*,stardima.*,stickerdeals.net,stopstreamtv.net,streambee.to,streamsport.*,strikeout.*,t7meel.*,talaba.su,tamilarasan.*,tamilfreemp3songs.*,tamilprint.*,tamilprinthd.*,tatabrada.tv,tcpermaculture.com,techmyntra.net,techsslash.com,tennisstreams.*,thelosmovies.com,thememypc.net,thetechzone.online,thetodaypost.com,thevideome.com,thewatchseries.live,thripy.com,topflix.*,totallyfuzzy.net,traveldesearch.com,tubidy.*,tudotecno.com,tuktukcinema.co,turcasmania.com,turkish123.com,tvhay.top,tvply.*,uctnew.com,ufcstream.*,unlimitmovies.com,up-load.io,up-load.one,upload-4ever.com,uploadflix.org,uploadmx.com,uploadrar.*,uploads.mobi,uptobhai.*,uptoimage.com,upvid.*,urdubolo.pk,userscloud.com,uwatchfree.*,vanime.*,vbox7-mp3.info,vf-film.net,vibehubs.com,vikistream.com,vipstand.se,viralitytoday.com,voiranime.stream,waploaded.com,warefree01.com,watch4hd.*,watchdoctorwhoonline.com,watchimpracticaljokers.com,watchmovie.*,watchomovies.*,watchopm.net,watchseries.*,watchseriess.net,watchtheofficetv.com,watchtvch.club,web.livecricket.is,webloadedmovie.com,webseriesclub.com,whatshowto.com,wifimovies.net,wintub.com,world4ufree.*,world4ufree1.*,worldgreynews.com,wupfile.com,y-2mate.com,yomoviesnow.com,yoyofilmeys.*,yseries.tv,yt-convert.com,ytconverter.app,ytix.xyz,ytmp3cc.net,ytmp4.live,ytmp4converter.com,yts.*,yugen.to##+js(acs, parseInt, break;case $.)
+! ##+js(aeld, , break;case $.)
+0dramacool.net,0gomovie.*,0gomovies.*,185.53.88.104,185.53.88.204,185.53.88.15,123moviefree.*,123movies4k.net,1kmovies.*,1madrasdub.*,1movieshd.com,1primewire.*,1rowsports.com,2embed.*,2madrasdub.*,2umovies.*,4anime.*,4share-mp3.net,6movies.net,9animetv.to,9xmovies.*,720pstream.me,aagmaal.com,abysscdn.com,adblockplustape.com,ajkalerbarta.com,akstream.xyz,altadefinizione01.*,androidapks.biz,androidsite.net,animefenix.com,animeonlinefree.org,animesite.net,animespank.com,anitube.*,aniworld.to,apkmody.io,appsfree4u.com,atomixhq.*,audioz.download,bdnewszh.com,beastlyprints.com,beinmatch.*,bengalisite.com,bestfullmoviesinhd.org,betteranime.net,blacktiesports.live,brmovies.*,buffsports.stream,ch-play.com,cima4u.*,clickforhire.com,clicknupload.*,cloudy.pk,cmovies.*,computercrack.com,coolcast2.com,couchtuner.*,crackedsoftware.biz,crackfree.org,cracksite.info,cricfree.*,crichd.*,cryptoblog24.info,cuatrolatastv.blogspot.com,cydiasources.net,databasegdriveplayer.*,dirproxy.com,dood.*,dopebox.to,downloadapk.info,downloadapps.info,downloadgames.info,downloadmusic.info,downloadsite.org,downloadwella.com,ebooksite.org,educationtips213.blogspot.com,egyup.live,embed.meomeo.pw,embed.scdn.to,emulatorsite.com,essaysharkwriting.club,extrafreetv.com,f1stream.*,fakedetail.com,faselhd.*,fbstream.*,fclecteur.com,file4go.*,filemoon.*,filepress.*,files.im,filmlinks4u.*,filmpertutti.*,filmyzilla.*,flexyhit.com,fmoviefree.net,fmovies24.com,fmovies.*,footyhunter3.xyz,freeflix.info,freemoviesu4.com,freeplayervideo.com,freesoccer.net,french-stream.*,fsapi.*,fseries.org,fzlink.*,gamefast.org,gamesite.info,gdriveplayer.*,gmanga.me,gocast123.me,gofilms4u.*,gogoanime.*,gogohd.net,gogoplay5.com,goload.*,gomoviefree.*,gomoviz.*,gooplay.net,gostreamon.net,gowatchseries.*,happy2hub.org,harimanga.com,hdmoviefair.*,hdmovies4u.*,hdmovies50.*,hdmoviesfair.*,healthnewsreel.com,hexupload.net,hh3dhay.*,hinatasoul.com,hindilinks4u.*,hindisite.net,holymanga.net,hotmasti.*,hurawatch.*,hxfile.co,isosite.org,iv-soft.com,januflix.expert,jewelry.com.my,johnwardflighttraining.com,kabarportal.com,klmanga.*,klubsports.*,kstorymedia.com,la123movies.org,lespassionsdechinouk.com,libertestreamvf.*,lilymanga.net,linksdegrupos.com.br,livetvon.*,livestreamtv.pk,macsite.info,manga1000.*,manga1001.*,mangapt.com,mangaraw.*,mangarawjp.*,mangareader.to,mangasite.org,manhuascan.com,megafilmeshdseries.com,megamovies.org,membed.net,mgnetu.com,mlbstream.*,moddroid.com,motogpstream.*,movi.pk,moviefree2.com,movierulz.*,movies123.*,movies-watch.com.pk,movies2watch.*,moviesden.*,moviesite.app,moviesonline.fm,moviesx.org,moviewatchonline.com.pk,moviezaddiction.*,msmoviesbd.com,musicsite.biz,myfernweh.com,myflixer.*,myviid.com,nazarickol.com,nbastream.*,netcine.*,newsrade.com,nflstream.*,nhlstream.*,noob4cast.com,nsw2u.com,oko.sh,olympicstreams.me,onlinewatchmoviespk.*,orangeink.pk,owllink.net,pahaplayers.click,patchsite.net,pctfenix.*,pctnew.*,pdfsite.net,pksmovies.*,play1002.com,player-cdn.com,plyjam.*,plylive.*,pogolinks.*,popcorntime.*,poscitech.*,prmovies.*,productkeysite.com,projectfreetv.one,romsite.org,rufiguta.com,rugbystreams.*,rytmp3.io,send.cm,seriesite.net,seriezloaded.com.ng,serijehaha.com,shahed4u.*,sflix.*,shrugemojis.com,siteapk.net,siteflix.org,sitegames.net,sitekeys.net,sitepdf.com,sitesunblocked.*,sitetorrent.com,socceronline.*,softwaresite.net,solarmovies.*,sportbar.live,sportcast.*,sportkart1.xyz,sportskart.*,sports-stream.*,ssyoutube.com,stardima.com,stream4free.live,streaming-french.*,streamers.*,streamingcommunity.*,strikeout.*,superapk.org,supermovies.org,t20cup.*,tainio-mania.online,talaba.su,tamilguns.org,tatabrada.tv,tennisstreams.*,theflixer.tv,thememypc.net,thetechzone.online,thripy.com,tonnestreamz.xyz,torrentdosfilmes.*,toonanime.*,travelplanspro.com,turcasmania.com,tusfiles.com,tvonlinesports.com,tvply.*,ufcstream.*,ultramovies.org,uploadbank.com,uptomega.*,uqload.*,urdubolo.pk,vudeo.*,vidoo.*,vidspeeds.com,vipbox.*,vipboxtv.*,vipleague.*,viprow.*,vumoo.to,warezsite.net,watchmovies2.com,watchmoviesforfree.org,watchofree.com,watchsite.net,watchsouthpark.tv,watchtvch.club,web.livecricket.is,webseries.club,worldcupstream.pm,y2mate.com,yesmovies.*,yomovies.*,yomovies1.*,youapk.net,youtube4kdownloader.com,yt2mp3s.*,yts-subs.com##+js(aeld, , break;case $.)
+! ##+js(acs, Math, break;case $.)
+01234movies.*,1234movies.*,123gostream.*,123moviesgo.*,123moviestoday.net,1link.club,1primewire.com,1stkissmanga.*,1tamilmv.*,8-ball-magic.com,adcorto.*,adsh.cc,afilmyhouse.blogspot.com,aii.sh,akwam.*,animehay.tv,animeheaven.ru,arnaqueinternet.com,asianload.*,ate9ni.com,bdiptv.*,beammeup.com.au,bitlinks.pw,bollyshare.*,casptv.xyz,ccurl.net,ceesty.com,cinen9.*,citpekalongan.com,claimcrypto.cc,clkmein.com,cllkme.com,comandotorrentshds.org,corneey.com,crazyblog.in,cuevana3.*,destyy.com,dogecoin.*,dramanice.*,earnload.*,eastream.net,easylinks.in,ed-protect.org,enstreams.xyz,extramovies.*,f1stream.*,fakaza.com,fbstream.*,festyy.com,filmesonlinex.*,filmy4wap1.*,filmyone.com,freelitecoin.vip,freeload.*,fzmovies.*,game3rb.com,gdirect.*,gestyy.com,gogoanimes.*,gulf-up.com,hd44.com,hdfilme.*,hdmoviz.*,hdstreamss.club,hindimean.com,hindimoviesonline.*,hostxy.com,hwnaturkya.com,iiyoutube.com,imagenesderopaparaperros.com,inextmovies.*,japscan.ws,kinoger.to,linkflash.techipe.info,linkskat.*,liveonscore.tv,livesport24.net,mailnesia.com,mangaindo.web.id,mangastream.mobi,mazystreams.xyz,mega4up.*,megaup.net,mkvhub.*,mlbstream.*,mlsbd.*,motogpstream.*,movies4me.*,moviesmon.*,moviesshub.*,moviessquad.com,movieston.com,moviesub.is,movizland.*,mozkra.com,mp3cristianos.net,mp3songsdownloadf.blogspot.com,naijahits.com,naijal.com,nbastream.*,nbch.com.ar,nflstream.*,nhlstream.*,nowmovies.*,ocnpj.com,octanime.net,openload.*,otomi-games.com,pctfenix.*,pctnew.*,phc.web.id,plusupload.*,pregledaj.net,primeflix.website,prmovies.*,py.md,r2sa.net,racaty.*,readingbd.com,receitasoncaseiras.online,recetas.arrozconleche.info,revivelink.com,rojadirecta.*,rojadirectatv.*,romfast.com,rugbystreams.*,s2dfree.*,seriesflv.*,seriesly.*,seuseriado.*,sh.st,shavetape.*,shortpaid.com,socceronline.*,stalkface.com,stream2watch.*,streamingworld.*,strtapeadblock.*,subtitlecat.com,summarynetworks.com,supervideo.tv,tajpoint.com,techrecur.com,tennisstreams.*,theismailiusa.org,thekingavatar.com,thenetnaija.co,tny.so,torrentfilmes4k.org,try2link.com,ufcstream.*,uhdstreams.club,upfiles.*,upstream.to,vdtgr.com,vedshar.com,vidcloud9.*,vidcloudpng.com,vidomo.xyz,vidsaver.net,vumoo.to,wildwap.com,worldgirlsportal.com,xmovies.*,xsanime.com,ymovies.*,ymp4.download,youtubeai.com,youtubetoany.com,youwatch.*,ytanime.tv,zone-annuaire.*,zpaste.net,zplayer.live##+js(acs, Math, break;case $.)
+! ##+js(acs, String.fromCharCode, /btoa|break/)
+0123movies.*,2conv.com,anonymous-links.com,bdupload.*,dl-protect.*,dl-protect1.*,doctor-groups.com,dubhappy.net,egyanime.com,filmesonlinehd1.org,firstonetv.*,flvto.biz,goalup.live,gomovieshub.io,gplinks.co,hdmovieplus.*,hdss.*,hydracdn.*,kissanime.*,linkshorts.*,manga-raw.club,mangamanga.*,modapkfile.com,movieshub.*,movs4u.*,multifaucet.org,nbaup.live,o2tvseries.website,pewgame.com,q1-tdsge.com,readm.org,shortearn.*,shrlink.top,shugraithou.com,sports24.*,url4cut.xyz,ustream.*,vexfile.com,vexmovies.*,vidlox.*,voe.sx,watchtvseries.video,yesmovies123.me,yifysubtitles.*##+js(acs, String.fromCharCode, /btoa|break/)
+! ##+js(aost, Math.random, /\st\.[a-zA-Z]*\s/)
+cablegratis.online,extralinks.*,filmypur.*,kmo.to,nuroflix.*,onifile.com,oxanime.com,pelis28.*,pelisplusgo.*,pelisplusxd.*,pewgame.com,piraproxy.app,repelisgoo.*,repelisgooo.*,repelisgt.*,repelisxd.*,sexphimhd.net,theproxy.*,tvply.*,updatesmovie.xyz,vidlox.*,voirseries.io,watchfree.*##+js(aost, Math.random, /\st\.[a-zA-Z]*\s/)
+! ##+js(acs, globalThis, break;case)
+10starhd.*,1337xx.to,alphagames4u.com,anysex.com,asianclub.*,cheatermad.com,downloadpirate.com,dutrag.com,embed.casa,embedsito.com,exee.app,f2movies.to,fembed.com,feurl.com,fileone.tv,films5k.com,gaobook.review,gcloud.live,hdss.*,imx.to,javideo.pw,javip.pro,javjav.top,javstream.top,just-upload.com,luxubu.review,mavplay.*,mavplayer.xyz,moviesflix.*,mrdhan.com,openplayer.net,ouo.*,playdoe.xyz,playfinder.xyz,playvid.host,projectfreetv.*,qdembed.com,rubicstreaming.com,smartshare.tv,streamvid.net,svpri.xyz,ujav.me,videobb.*,videogreen.xyz,voirseries.*,watchgayporn.online,xstreamcdn.com,youtnbe.xyz##+js(acs, globalThis, break;case)
+! ##+js(acs, JSON.parse, Promise)
+adblockstreamtape.*,adblockstrtape.*,adblockstrtech.*,komikcast.*,mavanimes.*,stape.*,streamadblockplus.*,streamta.*,streamtape.*,streamtapeadblock.*,strtape.*,strtapeadblock.*,strtpe.*,vanime.*##+js(acs, JSON.parse, Promise)
+! ##+js(acs, navigator, break;case $.)
+123moviesonline.*,2embed.*,adblockeronstape.*,brbushare.*,cuatrolatastv.blogspot.com,cue-vana.com,direct-cloud.me,driveup.in,filmeseries.*,goved.org,hdmovies2.org,hdmovies50.*,letsupload.io,seriezloaded.com.ng,skymovieshd.*,slink.bid,stapewithadblock.*,streamers.watch,upbam.org,uplinkto.*,uppit.com,vadbam.com,vadbom.com,vedbam.*,vidbam.org,vidshar.org##+js(acs, navigator, break;case $.)
+! ##+js(aost, Object, /(?=^(?!.*(https)))/)
+songspk.*##+js(aost, Object, /(?=^(?!.*(https)))/)
+! ##+js(acs, document.documentElement, break;case $.) including FingerprintJS variant
+0123movie.*,123chill.*,123movies-free.*,123movies-org.*,123movies.*,123moviesfree.*,123movieshub.*,123movieweb.*,190.115.18.20,1hd.to,1stream.*,1todaypk.*,2kmovie.*,4movierulz.*,4movierulz1.*,5movies.*,5moviess.com,9kmovies.*,a8ix.*,acn.vin,adblocktape.*,adslink.pw,aflizmovies.com,ak4eg.*,anihdplay.com,animecurse.cz,animeonline.ninja,animeunity.*,animixplay.*,aniwatch.*,arc018.to,asianhdplay.*,atishmkv.*,backfirstwo.site,bolly2tolly.*,bowfile.com,buffstreams.*,clickndownload.*,comedyshow.to,cool-etv.net,crackstreams.*,crackstreamshd.click,d0o0d.com,daddylivehd.*,direct-cloud.*,divicast.com,divxfilmeonline.net,dlhd.sx,do0od.com,dood.*,doods.pro,dooood.*,downloadhub.*,ds2play.com,ds2video.com,dvdplay.*,embed4u.xyz,embedplayer.*,embedstream.me,emovies.*,encurtandourl.com,ev01.sx,exee.app,f123movies.com,faselhd.*,file-upload.com,film4e.com,filmeserialeonline.org,filmy-hit.*,filmyzilla2022.com,flostreams.xyz,fmoviesfree.*,fmovieszfree.com,foot2live.cc,footyhunter.lol,forex-golds.com,forex-trnd.com,fr.streamon-sport.ru,freemovies.*,french-streams.cc,fsl-stream.lu,fslinks.org,fstream365.com,gameshdlive.xyz,gamovideo.com,gdflix.*,gdtot.*,gembedhd.com,gocast2.com,gogohd.*,goku.*,gokutv.*,gomovies.*,goone.pro,gotaku1.com,hdfriday.*,hdhub4u.*,hdmoviehub.*,hdtoday.tv,hihihaha1.xyz,huboflink.in,iflixmovies.*,jockantv.com,jpopsingles.eu,kickassanime.*,koora.vip,kuttymovies1.com,ligaset.com,likemanga.io,linkupload.xyz,lulustream.com,luluvdo.com,mangaraw.*,mcrypto.club,medeberiyas.com,mega4upload.com,megadb.net,megafilmeshd50.com,megaupto.com,mkvcinemas.*,mlwbd.*,movembed.cc,movieplay.*,moviesda4.*,moviesjoy.*,moviesmeta.*,moviesrulz.*,moviestowatch.tv,mp4upload.com,mreader.co,mydownloadtube.*,myflixerz.*,mywatchseries.*,naijachoice.com.ng,naijanowell.com,netfilmes.org,netizensbuzz.com,nflstreams.me,niadd.com,niaomea.me,noblocktape.*,nolive.me,odiasia.sbs,oii.io,olympicstreams.me,pesktop.com,playgo1.cc,project-free-tv.*,projectfreetv.*,putlocker.*,repack-games.com,s.to,send.cm,serienstream.*,series2watch.*,seriesonline.*,seriestv.org,shadowrangers.live,shahed4u.*,shaheed4u.*,shinden.pl,shoot-yalla.live,shortenlinks.top,sinvida.me,smoner.com,soap2day-online.com,ssoap2day.*,stakes100.xyz,strcloud.*,streamadblocker.*,streambtw.com,streamcloud.best,streamhub.*,streamnoads.com,streamonsport99.*,streamtape.*,streamvid.net,strtapewithadblock.*,swatchseries.*,tapeantiads.com,tapeblocker.com,tapenoads.com,tapewithadblock.org,techgeek.digital,theflixertv.to,thenextplanet1.*,tii.la,tnhitsda.net,todaypk.*,trendytalker.com,tvfutbol.info,tvpclive.com,up-4ever.net,upbaam.com,uploadhub.*,uproxy.*,vadbam.net,vavada5com.com,vid-guard.com,vidcloud9.*,videoplayer.*,vido.*,vidspeed.cc,vidsrc.*,vidtube.one,viidshar.com,vikistream.com,vixcloud.co,watch-free.tv,watchcartoononline.*,watchmovierulz.*,watchmovies.*,watchomovies.*,watchonlinemoviespk.*,watchop.live,watchseries1.*,watchtvchh.xyz,wecast.to,worldstreams.click,yesmovies4u.*,yu2be.com,zamundatv.com##+js(acs, document.documentElement, break;case $.)
+
+atlaq.com,bolly4umovies.*,dietafitness.fun,douploads.net,moalm-qudwa.blogspot.com,redecanais.*,shurt.pw,topauto.fun##+js(aopr, zfgformats)
+123movieshub.*,animeunity.*,bflix.*,cima-club.*,flixhq.*,hindilinks4u.*,mcloud.bz,t7meel.*,theflixer.tv,vidstream.pro##+js(aopr, zfgstorage)
+01fmovies.com,123moviesfun.is,bmovies.*,bolly4umovies.*,putlocker.*,userscloud.com##+js(acs, Math, XMLHttpRequest)
+egydead.*,m4ufree.*##+js(acs, Promise, JSON.parse)
+arabseed.*,liiivideo.com,seeeed.*##+js(acs, Promise, break;case $.)
+adblockeronstreamtape.*,bowfile.com,cloudvideo.tv,cloudvideotv.*,embedstream.me,hiphopa.net,niaomea.me,noblocktape.*,nolive.me,send.cm,torrentmac.net,tusfiles.com,vipleague.*,ziperto.com##+js(acs, JSON, break;case)
+isaimini.*##+js(aost, Object, inlineScript)
+pepperlive.info##+js(acs, Object, break;case $.)
+filmywap.*##+js(acs, Object, XMLHttpRequest)
+coinfaucet.io##+js(acs, decodeURI, zfgloadedpopup)
+bitfly.io,pelisplus.*,pelisplus2.*##+js(aost, Math.random, /\st\.[a-zA-Z]*\sinlineScript/)
+shahiid-anime.net##+js(aost, Object, /(?=^(?!.*(https)))/)
+||flixhq.*/loadme/
+
+! pp_blob
+||filmovi.ws^$csp=script-src * 'unsafe-inline'
+||serijefilmovi.com^$csp=script-src * 'unsafe-inline'
+
+! pp server
+/^https?:\/\/[a-z]{8,15}\.[a-z]{2,3}\/5\/\d{6,7}(?:\?_=\d+)?$/$script,3p
+/^https:\/\/[-a-z]{8,15}\.(?:com|net)\/400\/\d{7}$/$script,3p
+/^https:\/\/[-a-z]{8,15}\.(?:com|net)\/401\/\d{7}$/$script,3p
+/^https:\/\/[-a-z]{8,15}\.(?:com|net)\/500\/\d{7}\?/$xhr,3p
+/^https?:\/\/[a-z]{8,15}\.(?:com|net)\/tag\.min\.js$/$script,3p
+||go.bundlebyte.net^
+||mhskfkinwk.xyz^
+?oo=1^$xhr,3p
+||aguwehajqluorgv.com^
+||kiisvpby.xyz^
+||jfdvjpksdqhdhjo.com^
+||ydjicxmmdhbwojs.com^
+||xtjaejphgtpg.com^
+||drarcchewdfk.com^
+||ykjawfhta.com^
+||fwwvachfbbmpim.xyz^
+||rghptoxhai.com^
+||boatoamo.com^
+||bwoqmqkhamcri.com^
+||qhehbmoddetfmw.com^
+||reechoat.com^
+||uiqbonkjet.com^
+
+!!! other filters for pp
+*$3p,denyallow=google.com|googleapis.com|gstatic.com,domain=moviesda1.*
+*$3p,denyallow=googleapis.com|gstatic.com|facebook.net|facebook.com|fbcdn.net|moviesda1.com|moviesda1.co|moviesda1.net,domain=dloader.*
+*$3p,denyallow=gstatic.com|googleapis.com,domain=moviesdanet.com
+*$3p,denyallow=gstatic.com|googleapis.com|facebook.net|facebook.com|fbcdn.net,domain=isaidubhd.*
+*$3p,denyallow=facebook.com|facebook.net|fbcdn.net|googleapis.com|googleusercontent.com|gstatic.com|vadbom.com|vadshar.com|vidbam.org|vidshar.org|youtube.com,domain=isaidub.*
+*$3p,xhr,script,denyallow=arc.io|cdnjs.cloudflare.com|cloudflare.net|fastly.net|fontawesome.com|jwpcdn.com,domain=files.im
+filmpertutti.*##.ads
+filmpertutti.*##.no_pop
+||nollyverse.com^$csp=default-src 'self' 'unsafe-inline' *.gstatic.com *.googleapis.com *.bootstrapcdn.com *.fontawesome.com *.cloudflare.com *.youtube.com *.ytimg.com
+||nollyverse.com/sw.js$1p
+*$script,3p,denyallow=google.com|youtube.com,domain=nkiri.com
+moviespapa.*##+js(aost, XMLHttpRequest, /inlineScript|stackDepth:1/)
+/popunder.js$domain=linkbox.to|sharezweb.com
+*$3p,denyallow=bootstrapcdn.com|cloudflare.com|faselhd.club|fastly.net|gstatic.com|jwpcdn.com,domain=embed.scdn.to
+kuttymovies.*##+js(aost, XMLHttpRequest, inlineScript)
+videoplayer.*##+js(aopr, open)
+*$xhr,3p,domain=dropload.io
+||pnd.tl/*.gif$image
+french-stream.*###banning
+moviesda8.com,vidbox.online##+js(aost, String.prototype.charAt, $0)
+aagmaal.*##+js(rpnt, script, break;case $.)
diff --git a/uAssets/filters/filters-2021.txt b/uAssets/filters/filters-2021.txt
new file mode 100644
index 0000000..13f993f
--- /dev/null
+++ b/uAssets/filters/filters-2021.txt
@@ -0,0 +1,5422 @@
+! Title: uBlock filters (2021)
+! Last modified: %timestamp%
+! Description: Filters optimized for uBlock, to be used along EasyList
+! Homepage: https://github.com/uBlockOrigin/uAssets
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+! New filters from January 2021 to ->
+!
+! GitHub issues: https://github.com/uBlockOrigin/uAssets/issues
+! GitHub pull requests: https://github.com/uBlockOrigin/uAssets/pulls
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71392
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=ottwow.com,redirect-rule=google-ima.js
+
+! https://www.backlinkping .com anti adb
+@@||backlinkping.com^$ghide
+
+! https://www.deine-tierwelt.de anti-adb
+! https://github.com/uBlockOrigin/uAssets/issues/16505
+@@||deine-tierwelt.de^$ghide
+deine-tierwelt.de##.OUTBRAIN
+deine-tierwelt.de##.header-leaderboard
+deine-tierwelt.de##.js-sticky-ad
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71448
+||sexgamefun.com/images/sex-games.gif
+||sexgamefun.com/images/villa/
+sexgamefun.com##.footer_banner
+sexgamefun.com##.hidden-xs > .well:has(> a > img)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/127698
+haho.moe##+js(aeld, mouseup, decodeURIComponent)
+haho.moe##div:has(> div[title="Click to Close the Ad"])
+haho.moe##[href^="//"][style*="position: fixed;"]
+*$script,3p,denyallow=fluidplayer.com|cdn77.org|gstatic.com|hwcdn.net|recaptcha.net,domain=haho.moe
+
+! freeporncave.com auto-redirect
+freeporncave.com##+js(nostif, location.replace, 300)
+
+! empregoestagios.com/everydayonsales.com anti-adb
+empregoestagios.com,everydayonsales.com##+js(nostif, css_class.show)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kq6vu7/ublock_detected_on_this_page/
+vectogravic.com##+js(acs, eval, replace)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71596
+pornorips.com##+js(acs, puShown, /doOpen|popundr/)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kq7enz/adblock_detected_on_httpskusonimecom/
+kusonime.com##+js(rpnt, script, /\(\S+?window\.showAds\)/, (true), condition, showAds)
+kusonime.com##+js(nostif, css_class.show)
+kusonime.com##.iklanads
+! https://github.com/uBlockOrigin/uAssets/issues/18533
+@@||kusonime.com^$script,1p
+! https://github.com/AdguardTeam/AdguardFilters/issues/104839
+cararegistrasi.com##+js(nano-sib, timer)
+cararegistrasi.com##+js(nowoif)
+cararegistrasi.com##a[href="https://bahasteknologi.com/"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71593
+pornhd8k.*###invideo_wrapper
+pornhd8k.net##.content-kus
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71592
+xxvideoss.org##+js(acs, String.fromCharCode, 'shift')
+||xxvideoss.org/wp-content/uploads/*/bannerrtx.jpg$image,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/11886
+! https://github.com/AdguardTeam/AdguardFilters/commit/4342119e811260244f512191727489a62994083f#commitcomment-101212779
+/player/html.php?aid=post_roll_html^$redirect=noopframe,frame,1p
+/player/html.php?aid=start_html&*&referer=$frame,1p
+/player/html.php?aid=pause_html&*&referer=$frame,1p
+/player/html.php?aid=pre_roll_html&*&referer=$frame,1p
+xgirls.webcam###kt_player > div[style="position: absolute; inset: 0px; z-index: 170;"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71616
+donghuanosekai.com##+js(nosiif, visibility, 1000)
+
+! bitsfree.net/getdoge.io/qashbits.com anti-adb
+qashbits.com##+js(aopr, NoAdBlock)
+qashbits.com##.mx-auto
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71680
+modapk.link##+js(aopr, app_vars.force_disable_adblock)
+modapk.link##+js(set, blurred, false)
+
+! e-sushi .fr popup
+e-sushi.fr##+js(ra, onclick, body)
+
+! encodinghub. com anti adb
+encodinghub.com##+js(aeld, load, nextFunction)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8430
+freeindianporn.mobi##+js(aeld, /.?/, popMagic)
+||xedo.me^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71707
+radionylive.com,radioitalylive.com,radiolovelive.com,radiocountrylive.com,radiosymphony.com,miamibeachradio.com,radiorockon.com,radioitaliacanada.com,radioitalianmusic.com,radioamericalatina.com,radiosantaclaus.com,radionorthpole.com,radionatale.com##+js(aopr, adp)
+radionylive.com,radioitalylive.com,radiolovelive.com,radiocountrylive.com,radiosymphony.com,miamibeachradio.com,radiorockon.com,radioitaliacanada.com,radioitalianmusic.com,radioamericalatina.com,radiosantaclaus.com,radionorthpole.com,radionatale.com##[id^="ads-"]
+
+! absolugirl .com ads
+absolugirl.com,absolutube.com##+js(aopr, document.dispatchEvent)
+@@||chaturbate.com/*embed$frame,domain=absolugirl.com
+
+! allafricangirls .net ads + popups
+allafricangirls.net##+js(aopr, document.dispatchEvent)
+allafricangirls.net##[id^="exo_"]
+allafricangirls.net##[src*="/banner"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/krikeu/ublock_detected_on_this_page/
+elvocero.com##+js(acs, __tnt, compatibility)
+
+! popups, popunders, ads
+dirtyfox.net##+js(aopr, decodeURI)
+booru.eu,borwap.xxx,centralboyssp.com.br,czxxx.org,filmdelisi.co,filmovitica.com,foxtube.com,hd-xxx.me,ipornxxx.net,itsfuck.com,javembed.*,javideo.pw,kissanime.*,lametrofitness.net,longporn.xyz,matureworld.ws,mp3-convert.org,sexy-games.*,stilltube.com,streamm4u.club,teenage-nudists.net,xvideos.name,xxx-videos.org,xxxputas.net,youpornfm.com,maxtubeporn.net,vidsvidsvids.com##+js(nowoif)
+1youngteenporn.com##+js(aeld, popstate)
+asianpornphoto.net,freexxxvideos.pro,videosxxxporno.gratis,nude-teen-18.com##+js(aopr, document.dispatchEvent)
+123strippoker.com,babepedia.com,boobieblog.com,borwap.xxx,chicpussy.net,gamesofdesire.com,hd-xxx.me,hentaipins.com,longporn.xyz,picmoney.org,pornhd720p.com,sikwap.xyz,super-games.cz,xxx-videos.org,xxxputas.net##+js(aopr, loadTool)
+blackpornhq.com,xsexpics.com,ulsex.net,wannafreeporn.com##+js(aeld, , pop)
+camgirlbang.com,casting-porno-tube.com##+js(aopr, ExoLoader)
+fetish-bb.com,rumporn.com,soyoungteens.com,zubby.com##+js(aeld, getexoloader)
+hentaipins.com##+js(acs, pop_init)
+hentaipins.com##+js(aopr, popundrCheck)
+ekasiwap.com,pornbox.cc##+js(acs, decodeURI, decodeURIComponent)
+pornvideoq.com##+js(aopr, history.replaceState)
+rexxx.org##+js(aopr, rexxx.swp)
+stvid.com##+js(noeval)
+hypnohub.net,oldies.name,xnxxporn.video,xxxdessert.com,xxxshake.com##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+freepornxxxhd.com##+js(acs, String.fromCharCode, constructor)
+hot-cartoon.com,richhioon.eu,wowstream.top##+js(aopr, BetterJsPop)
+123movieshd.*##+js(aopr, mm)
+123movieshd.*##+js(set, p18, undefined)
+cfake.com###over
+theyarehuge.com##+js(acs, Object.defineProperty, clickHandler)
+*$script,3p,denyallow=bootstrapcdn.com,from=youdbox.*
+
+! 123movies4u. site => player eplayvid. net popups
+porntry.com##.js-mob-popup
+
+erotic-beauties.com,hardsex.cc,sex-movies.biz,sikwap.xyz,tube18.sexy##+js(acs, pop_init)
+itsfuck.com,stilltube.com##+js(ra, onclick, .previewhd > a)
+nicy-spicy.pw##+js(aeld, /(?:click|touchend)/, _0x)
+blackcunts.org,finderporn.com##+js(acs, onbeforeunload)
+dansmovies.com##+js(aopr, popunder)
+hentaianimedownloads.com##+js(acs, puShown, /doOpen|popundr/)
+grosnews.com##+js(acs, adcashMacros)
+xxxymovies.com##+js(set, flashvars.adv_pause_html, '')
+dirtyship.com##+js(acs, onload)
+hotscopes.*##+js(aopw, puShown)
+afrodity.sk,brato.bg,cinema21fullmovie.com,cotannualconference.org.uk,couponsuniverse.com,cycraracing.com,dahh.net,dlhe-videa.sk,elmalajeno.com,extreme-board.com,free-famous-toons.com,istanbulescortnetworks.com,ok-th.com,payt.com,pcparsi.com,podkontrola.pl,redtubemov.com,shtab.su,spiritword.net##+js(acs, document.createElement, 'script')
+elmalajeno.com##^script:has-text(d.createElement('script'))
+elmalajeno.com##^script:has-text(d.createElement(\'script\'))
+@@||onlinefetishporn.cc^$ghide
+@@||streamextreme.cc^$ghide
+streamlare.com##+js(aopr, StreamlarePop)
+streamlare.com##body > div[style^="position: fixed; display: block"][style*="inset: 0px;"]
+shegotass.info##+js(aopr, popunder)
+shegotass.info##+js(set, flashvars.adv_pre_vast, '')
+xxxshake.com##+js(set, flashvars.adv_pause_html, '')
+tubsxxx.com##+js(nostif, window.location.href)
+animeplanet.cc##+js(aopw, __C)
+camlovers.tv##+js(acs, crakPopInParams)
+camlovers.tv##+js(set, flashvars.protect_block, '')
+
+anybunny.com##td[width="360"]
+babepedia.com##.sidebar_block > a[rel="nofollow noopener"]
+borwap.xxx##.embedright
+cartoonvideos247.com##.adv
+cartoonvideos247.com##.sponsor
+cartoonvideos247.com##.topad
+cuckold-videos.org###v-ad
+erotic-beauties.com##.sidebar > .widget_text
+ezjav.com###preroll
+ezjav.com##center
+ezjav.com##div[style="overflow: hidden !important;margin-bottom:8px;"]
+freexxxvideos.pro##.sidban
+hd-xxx.me##.videoOverAdBig
+hdjavonline.com##.happy-inside-player
+hentaipins.com##.sidebar-wrapper.widget_text
+hentaipins.com##.thumb-ad
+hotntubes.com##td[width="360"]
+hqporner.top##.box_b > small
+instapornvideos.com##.container-sts-bl
+javbest.xyz##.adsvideo
+javrave.club,javraveclub.com##.leader_banner
+kingcomix.com##[href^="//"][rel="nofollow norefferer noopener"]
+longporn.xyz##[href="http://toplivesexcams.net"]
+movies18.net##[href*="/go/"]
+nude-teen-18.com##.cht6
+nude-teen-18.com##.rtrrtrlight-in-2
+pornteens.mobi##.fixx.chtrb
+pornvideoq.com###playerOverlay
+pornvideoq.com##.h250
+rumporn.com,stilltube.com###floaterRight
+sexpuss.org##.bn1
+sexpuss.org##.tu-sexc3
+sexroom.xxx##.table
+sissytube.net##a[href^="http://refer.ccbill.com/"]
+thecartoonporntube.com##[href="/go/tube.php"]
+thecartoonporntube.com###advertising [href]
+vidsvidsvids.com##.zone
+womennaked.net##.hrcht6
+pt.potwm.com##.pausedView
+pt.potwm.com##.shown.visible.onlineIndicator
+||protoawegw.com^$3p
+tubsxxx.com##.aBlock
+tubsxxx.com##.videoAd
+pornez.net###cb00
+pornez.net###cb01
+cutscenes.net##.item:has(> div[id^="ts_ad_native"])
+cutscenes.net##.item:has(> iframe[src^="https://go."])
+gotocam.net,pornxday.com,twinkybf.com##.happy-sidebar
+###playerOverlay[style="position:absolute; z-index:3"]
+roshy.tv##.roshy-widget
+roshy.tv##.beeteam368-player-sub-element
+
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|fastly.net|jsdelivr.net|unpkg.com|zencdn.net,domain=xxxfiles.com
+*$script,domain=hoporno.net,3p,denyallow=googleapis.com
+/istripper*$image,domain=hentaipins.com
+/popup/exo-ads.$frame,1p
+/xxx.js|$script,1p
+||av-uncen.com/img/banner$image
+||av-uncen.com/wp-content/uploads/*.gif$image
+||brazz-girls.com/chaturbate/
+||brazz-girls.com/scripts/yall.*.js
+||camgirlbang.com/sparkling-$script,1p
+||camgirlbang.com/crimson-$script,1p
+||casting-porno-tube.com/old-frog-d67e/
+||elitepaysites.com/photos/*.gif$image
+||ezjav.com/p.js
+||fapfappy.com/*.php$script,1p
+||freepornxxxhd.com^*/exopop.js
+||hentaipins.com/*.php$script,1p
+||hentaipins.com/pop.js
+||i.imgur.com^$domain=anime-hentai.jp.net|ezjav.com
+||ibradome.com/ba/chargi.js
+||imgbox.com/ae/$domain=matureworld.ws
+||instapornvideos.com/back.js
+||jav-xx.com/wp-content/uploads/*.gif$image
+||jorpetz.com/kahitano/banner.gif
+||jvembed.com/asset/bann.js
+||katestube.com/jsb/js_script.js
+||mixxporn.com/b1.php
+||pornhex.com/nb/
+||pornofaps.com/frosty-bread-04ce/
+||seed69.com/wp-content/uploads/*.gif$image
+||sexyaporno.com/chat_$script
+||tb.fuckandcdn.com/tbstatic*/tryboobs/compiled/script.
+||thecartoonporntube.com/*.gif$image
+||vidsvidsvids.com/go/
+||xszav.club/nb/
+||xxxdessert.com/*_fe.js
+||camlovers.tv^$script,1p
+@@||camlovers.tv/player/kt_player.js
+/flo.js|
+
+||goryachie-foto.net^$3p
+||pub.contexthub.net^
+||ptwmstc.com/npt/banner/
+||tabooporn.tv^$3p
+||xmorex.com^$3p
+||adbetnetwork.com^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71758
+##.full-ave-pl
+##.full-bns-block
+##.vertbars
+##.video-brs
+/safu/safu.js
+
+! exit prevention, redirect, popups
+/tp/filter.php?pro=
+/myvids/rek/*$frame,script,1p
+/myvids/show.php$frame,1p
+/myvids/click/*$script,1p
+###plban
+##div[class$="player-promo-col"]
+##.player-bns-block
+/zlk/zlk.js
+/pop1.js|$script,1p
+||easyads28.*^
+! adultsclips.com,cutewifes.com,sexenvelope.com,sexpun.com
+.com/fr.js|$1p
+.com/v.js?v=3|$1p
+! www.xxxvideor.com
+/static/js/abb.js|$script,1p
+! sextubexxl.com
+/common-js/exit/om2.min.js
+||sextubexxl.com/includes/scripts/
+! wikiporn.tv etc.
+/nb/thejsfile.js
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71734
+m-hentai.net##div.leaderboardcontainer
+m-hentai.net##div[class^="landingpageadcontainer_iframe"]
+||m-hentai.net/JS/exoclick%20popunder.js
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kse3ke/using_element_zapper_while_ubo_is_disabled_to/
+! https://github.com/uBlockOrigin/uAssets/issues/21314
+jetpunk.com##+js(no-xhr-if, prebid)
+jetpunk.com##+js(cookie-remover, PageCount)
+jetpunk.com##+js(set-local-storage-item, PageCount, $remove$)
+jetpunk.com##+js(set, asc, 2)
+@@||jetpunk.com^$script,1p
+@@||jetpunk.com^$ghide
+jetpunk.com##.banner-ad-outer
+jetpunk.com##.box-ad-inner
+jetpunk.com##.box-ad-outer
+jetpunk.com##.banner-x-outer
+jetpunk.com##.support-beg
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ksla7v/imgur_blocking_uploads_again_unless_whitelisted/
+imgur.com##+js(set, ADBLOCKED, false)
+! https://www.reddit.com/r/uBlockOrigin/comments/m1iib6/imgur_ads_still_making_it_through/
+! reported
+imgur.com##+js(set-cookie, WHITELISTED_CLOSED, 1)
+
+! thodkyaat.com ad-reinsertion
+thodkyaat.com##pp
+
+! https://github.com/uBlockOrigin/uAssets/issues/12933
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$xhr,domain=comidoc.net
+comidoc.net#@#.googlead
+@@||doubleclick.net^$xhr,domain=comidoc.net
+comidoc.net##div[style="text-align: center; margin-left: auto; margin-right: auto; min-height: 266px; max-width: 100vw;"]
+comidoc.net##div:has(> .adsbygoogle)
+comidoc.net##div[style="text-align:center;margin-left:auto;margin-right:auto;min-height:266px;max-width:90vw"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ktkw6p/proboards_based_forums_deploying_antiadblock/
+forum.gigabyte.us###ad1
+forum.gigabyte.us##[id^="ad-desktop-bottom"]
+forum.gigabyte.us###remove_ads_link
+
+! 1primewire .com popups ads
+||1primewire.com/addons/$image
+1primewire.com##[id]:has(> [class="close ico"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/7322
+*$script,domain=novelmultiverse.com,redirect-rule=noopjs
+@@||novelmultiverse.com^$ghide
+novelmultiverse.com##+js(no-xhr-if, ads)
+novelmultiverse.com##+js(aeld, , removeChild)
+novelmultiverse.com##.adace-slideup-slot-wrap
+
+! cyberdefensemagazine.com anti-adb
+cyberdefensemagazine.com##[href^="https://www.coresecurity.com/"]
+cyberdefensemagazine.com###bsaIframe
+
+! kisahdunia.com anti-adb
+kisahdunia.com##+js(aeld, DOMContentLoaded, adsBlocked)
+kisahdunia.com##+js(aost, setTimeout, adsBlocked)
+kisahdunia.com##.textwidget
+kisahdunia.com##[href^="https://mawaddahcinta.com/"]
+kisahdunia.com##[href^="https://www.samsung.com/"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71919
+hentai-party.com,hentaicomics.pro,xxx-comics.pro##+js(set, adb, 0)
+hentaicomics.pro##+js(nowoif)
+hentai-party.com,xxx-comics.pro##figure.mix > .tac
+||hentai-party.com/*?view=$doc,other,removeparam=view
+||hentaicomics.pro/*?code=$doc,other,removeparam=code
+||xxx-comics.pro/*?view=$doc,other,removeparam=view
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71968
+withukor.com##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71991
+@@||doubleclick.net^$script,domain=shrinkforearn.in
+@@||googletagmanager.com^$script,domain=shrinkforearn.in
+shrinkforearn.in##+js(aopr, app_vars.force_disable_adblock)
+techyuth.xyz##+js(aopr, window.open)
+shrinkforearn.in,techyuth.xyz##+js(set, blurred, false)
+shrinkforearn.in##+js(rpnt, script, counter_value":"5", counter_value":"7")
+shrinkforearn.in##.box-main:style(font-size: 0px !important;)
+shrinkforearn.in##.banner, .banner-page .box-main > .row, .box-main .blog-item, ol, li, ul, h1, h2, h3
+viralxns.com,wp.uploadfiles.in,uploadsoon.com###tp-snp2, #timeout:style(display:block !important; margin-top: 520px !important; height: 100px !important; width: 100px !important)
+wp.uploadfiles.in,uploadsoon.com###tp-snp2:others()
+viralxns.com###timeout, #tp-snp2:others()
+viralxns.com###timeout:remove-attr(disabled)
+viralxns.com,wp.uploadfiles.in,uploadsoon.com##+js(nano-sib, /.?/, *, 0.02)
+viralsbaba1.blogspot.com###btn-gotolink:style(display:block !important; margin-top: 410px !important; margin-left: 200px !important; height: 100px !important; width: 100px !important)
+viralsbaba1.blogspot.com###btn-gotolink:remove-attr(disabled)
+viralsbaba1.blogspot.com###btn-gotolink:others()
+viralsbaba1.blogspot.com##+js(rpnt, script, '_blank', '_self')
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/72008
+aagmaal.xyz##+js(nostif, css_class.show)
+*.gif$domain=aagmaal.*,image
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/126247
+taming.io##+js(no-xhr-if, ads)
+||api.adinplay.com^$redirect-rule=noopjs,script,domain=taming.io
+taming.io###preroll
+taming.io###main-box > #middle-wrap ~ div[id$="-left"]
+taming.io###main-box > #middle-wrap ~ div[id$="-bottom"]
+
+! y2mate.guru popups
+y2mate.guru##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8449
+||everyone-one.com^$all
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/90505
+javstream.top##+js(set, clientSide.adbDetect, noopFunc)
+javstream.top##+js(nowoif)
+javstream.top##+js(aopr, jwplayer.utils.Timer)
+javstream.top##+js(aopr, __Y)
+
+! https://github.com/easylist/easylist/issues/6476#issuecomment-758054579
+! todaypk related
+todaypk.*,todaypktv.*,1todaypk.*,watchtodaypk.com##+js(nowoif)
+1todaypk.*,todaypk.*,watchtodaypk.com##[href="/watchnow.php"]
+todaypk.*##[href="/watchfree.php"]
+todaypktv.*##.ad_watch_now
+todaypktv.*##.hd-buttons1
+||azuresjukes.com^
+||multipledrawers.com^
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/72021
+faptitans.com,pussysaga.com##.cross-promo-bnr
+||faptitans.com^*/rc/logo.jpg
+||pussysaga.com^*/footer/logo_ps.jpg
+||theonlygames.com/ps_banner/
+
+! https://github.com/uBlockOrigin/uAssets/issues/8451
+world4.eu##+js(aost, String.prototype.charCodeAt, ai_)
+world4.eu##+js(aopr, ai_run_scripts)
+||doubleclick.net/tag/js/gpt.js$object,redirect=noop.js,domain=world4.eu
+*$image,3p,redirect-rule=1x1.gif,domain=world4.eu
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/72129
+laptrinhx.com##+js(nosiif, clearInterval(i), 1000)
+laptrinhx.com##.ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/8454
+healthtune.site##+js(nostif, nextFunction, 2000)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kw77ar/bbc_america_adblock_detector/
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=bbcamerica.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/8459
+babestube.com,momvids.com,porndr.com##+js(aopr, decodeURI)
+babestube.com,momvids.com,porndr.com##div[style="position: absolute; inset: 0px; overflow: hidden; z-index: 160; background: transparent none repeat scroll 0% 0%; display: block;"]
+babestube.com##[src^="https://www.babestube.com/player/html.php"]
+babestube.com,momvids.com##.aside
+babestube.com,momvids.com##.spot > div
+momvids.com##[src^="https://www.momvids.com/player/html.php"]
+porndr.com##div.opt
+porndr.com##.we_are_sorry
+||porndr.com/*/*.php^
+||babestube.com/bt*/bt.js
+||momvids.com/mm*/mv.js
+
+! Mostly taken from AG and seen on various NSFW sites
+/_a_ta/s/s/*
+/a/ipn/js/*
+/a/pop/js/*
+/local_p.js^
+/local_ssu.js|
+/s/js/ssu.v2.js?v=
+/s/s/sui.php
+/s/s/suo.php
+/s/s/supc.php
+/s/s/supv.php
+/s/su.php?t=
+/javascript/fropo.js
+/s/s/js/m/custom.js?
+/s/s/js/m/custom_advanced.js?
+/s/s/js/m/im.js?
+/s/s/js/ssu.v2.
+/s/s/js/m/push.js?
+/a/na/js/*$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/8460
+deviants.com##+js(aopr, decodeURI)
+deviants.com##div[style="position: absolute; inset: 0px; overflow: hidden; z-index: 160; background: transparent none repeat scroll 0% 0%; display: block;"]
+deviants.com##.aside
+deviants.com##.spot > div
+||deviants.com/player/html.php^
+||deviants.com/dv*/dv.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/8461
+totv.org###ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/8464
+! https://github.com/AdguardTeam/AdguardFilters/issues/128120
+silverpic.com##+js(aopr, loadTool)
+||imgbaron.com/banner.jpg
+*$script,3p,domain=silverpic.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/72108
+! https://github.com/AdguardTeam/AdguardFilters/issues/85891
+manhwa18.cc##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+||a.realsrv.com/nativeads-v2.js$xhr,redirect=noop.txt
+
+! healthelia .com anti adb
+healthelia.com##+js(nostif, google_jobrunner)
+
+! happypenguin.altervista .org anti adb
+happypenguin.altervista.org##+js(nostif, adb)
+
+! dudestream .com anti adb
+dudestream.com#@#.adsBanner
+dudestream.com##+js(norafif, style.opacity)
+dudestream.com##body > div[id^="\30"][class^="popup0"][class$="wrap"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/72221
+elektrikmen.com##+js(aopr, b2a)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71877
+||wheelwheel.space^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/17102
+cybermania.ws##+js(acs, document.getElementById, showModal, /^data:text\/javascript/)
+cybermania.ws##+js(no-xhr-if, /doubleclick|googlesyndication/)
+cybermania.ws##+js(aost, document.getElementsByTagName, adsBlocked)
+*$script,redirect-rule=noopjs,domain=cybermania.ws
+
+! https://github.com/uBlockOrigin/uAssets/issues/8468
+love4porn.com##+js(set, flashvars.popunder_url, '')
+love4porn.com##div[style="position: absolute; inset: 0px; overflow: hidden; z-index: 160; background: transparent none repeat scroll 0% 0%; display: block;"]
+love4porn.com##.sponsor
+love4porn.com##.table
+
+! https://github.com/uBlockOrigin/uAssets/issues/8469
+crazyporn.xxx##div[style="position: absolute; inset: 0px; overflow: hidden; z-index: 160; background: transparent none repeat scroll 0% 0%; display: block;"]
+crazyporn.xxx##.table
+crazyporn.xxx##.sponsor
+crazyporn.xxx##.item:has(> script[src^="/ai/"])
+freehardcore.com##+js(aopr, decodeURI)
+||freehardcore.com/player/html.php^
+freehardcore.com##div[style="position: absolute; inset: 0px; overflow: hidden; z-index: 160; background: transparent none repeat scroll 0% 0%; display: block;"]
+freehardcore.com##.aside
+freehardcore.com##.spot
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/72266
+suicidepics.com##+js(nostif, css_class.show)
+*$script,3p,domain=suicidepics.com
+||adshort.tech^$3p
+
+! down.fast-down.com anti adb
+@@||down.fast-down.com^$ghide
+down.fast-down.com##div[style="width:336px; height:280px; background-color:#ffffff; text-align:center"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/72257
+! Remove if fixed in VIE list
+jav720.net,phimsexkhongche.net##.float-ck
+phimsexkhongche.net##.under-video-block > center
+jav720.net##.video-player-area > center
+||i.pinimg.com/564x/$domain=jav720.net|phimsexkhongche.net
+
+! jetseotools .com anti adb
+@@||jetseotools.com^$ghide
+jetseotools.com##ins.adsbygoogle
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kyg7zo/annoying_popups_everywhere/
+assia1.tv,usagoals.*##+js(nowoif)
+||cdn777.net/site/binance-banner.jpg$image
+||assia1.tv/*.html$frame,1p
+assia1.tv##[class^="ban"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/72407
+||javip.pro/asset/bann.js
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kyjq3u/adblock_detectionmessage_shows_up_after_you_solve/
+@@||foxgreat.com^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/72413
+haoweichi.com##+js(aopr, onload)
+haoweichi.com##.ad2
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/72454
+okteve.com##+js(acs, String.fromCharCode, marginheight)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/72490
+squirtplus.com#@#.adsBanner
+
+! https://github.com/uBlockOrigin/uAssets/issues/7702#issuecomment-762678996
+msubplix.com##+js(nowoif)
+||msubplix.com/cdn-cgi/trace$xhr,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/72669
+arab4media.com##+js(acs, addEventListener, nextFunction)
+
+! myyouporn .com popups
+myyouporn.com##+js(nowoif)
+
+! pinoyalbums. com anti adb
+*$script,redirect-rule=noopjs,domain=pinoyalbums.com
+pinoyalbums.com##+js(aeld, , adb)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52487
+easylinkref.com##+js(nano-sib, , , 0)
+easylinkref.com##center > a[href][target=_blank] > img
+
+! https://www.reddit.com/r/uBlockOrigin/comments/l1sn4x/adblock_detected_on_w3layout/
+w3layouts.com##+js(nostif, show)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/72816
+desishoot.fun##.islemag-content-right > .widget_custom_html
+
+! https://github.com/easylist/easylist/issues/6982
+||getsexgames.com/templates/sexgames/$image,1p
+getsexgames.com##.center > table[cellspacing="5"] > tbody > tr:last-child:has(> td > h1)
+getsexgames.com##.center > table[cellspacing="0"]:last-child > tbody > tr:last-child
+getsexgames.com##.leftMenu .menuHeadline:has-text(3D)
+getsexgames.com##.menuAff
+getsexgames.com##.menuPointPic
+
+! https://github.com/easylist/easylist/issues/6983
+adultgamestop.bigtopsites.com##img[width="558"][height="149"]:upward(td[style])
+
+! https://github.com/easylist/easylist/issues/6985
+pornachi.com##.table
+pornachi.com##.sponsor
+##.wps-player__happy-inside
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/72825
+1shorten.com##+js(aopr, app_vars.force_disable_adblock)
+1shorten.com,publicananker.com,rodjulian.com##+js(nosiif, visibility, 1000)
+1shorten.com##+js(set, blurred, false)
+dreamcheeky.com,fidlarmusic.com,publicananker.com,rezence.com,rodjulian.com##+js(nano-sib, counter, 2000)
+rodjulian.com##+js(noeval)
+1shorten.com##.banner
+rodjulian.com###baolink1s
+
+! https://github.com/uBlockOrigin/uAssets/issues/8492
+! hd-pornos. com => info
+hd-pornos.*##.vjs-overlayed
+hd-pornos.*###spezial_column
+hd-pornos.*##div[id="wrapper_content"] > aside
+
+! https://github.com/uBlockOrigin/uAssets/issues/8493
+pornojenny.com##+js(nostif, checkVisible)
+pornojenny.com##.spc_height_80
+pornojenny.com##.vjs-overlay
+||pornojenny.com/cpanel/*.php$xhr
+||chatntr.com/widget?affiliate$frame,3p
+pornojenny.com##div[id="wrapper_content"] > aside
+pornojenny.com###wa_10
+@@||pornojenny.com^$ghide
+pornojenny.com##[href^="https://www.handy-sextreffen.info/"]:upward(.grid_box)
+
+! kickass sites
+! https://github.com/uBlockOrigin/uAssets/issues/8497
+*$script,1p,domain=~kat.computer|~kat.am|~kat.at|~kat.rip|~kickass.codes|~kickass.website|kat.*|katbay.*|kickass.*|kickasshydra.*|kickasskat.*|kickass2.*|kickasstorrents.*|kat2.*|kattracker.*|thekat.*|thekickass.*|kickassz.*|kickasstorrents2.*|topkickass.*|kickassgo.*|kkickass.*|kkat.*|kickasst.*|kick4ss.*|kickassbay.*|torrentkat.*|kickassuk.*|torrentskickass.*|kickasspk.*|kickasstrusty.*|katkickass.*|kickassindia.*|kickass-usa.*|kickassaustralia.*|kickassdb.*|kathydra.*|kickassminds.*|katkickass.*|kickassunlocked.*|kickassmovies.*|kickassfull.*|bigkickass.*|kickasstracker.*|katfreak.*
+kat.*,kickass.*,kickass2.*,kickasstorrents.*,kat2.*,kattracker.*,thekat.*,thekickass.*,kickassz.*,kickasstorrents2.*,topkickass.*,kickassgo.*,kkickass.*,kkat.*,kickasst.*,kick4ss.*,katbay.*,kickasshydra.*,kickasskat.*,kickassbay.*,torrentkat.*,kickassuk.*,torrentskickass.*,kickasspk.*,kickasstrusty.*,katkickass.*,kickassindia.*,kickass-usa.*,kickassaustralia.*,kickassdb.*,kathydra.*,kickassminds.*,katkickass.*,kickassunlocked.*,kickassmovies.*,kickassfull.*,bigkickass.*,kickasstracker.*,katfreak.*##[style*="decoration"]:not([style^="width"])
+kat.*,katbay.*,kickass.*,kickasshydra.*,kickasskat.*,kickass2.*,kickasstorrents.*,kat2.*,kattracker.*,thekat.*,thekickass.*,kickassz.*,kickasstorrents2.*,topkickass.*,kickassgo.*,kkickass.*,kkat.*,kickasst.*,kick4ss.*##[href="/k.php?q=q"]
+@@||kickasstorrents.*/static/js/all.js$script,1p
+kickass.*###notification-bar
+kickass.*##.alert
+kickass.*##+js(rmnt, style, text-decoration)
+kickass.*##[id]:matches-attr(id=/[a-zA-Z]{40,}/)
+! https://github.com/uBlockOrigin/uAssets/issues/19826
+kat.*,katbay.*,kickass.*,kickasshydra.*,kickasskat.*,kickass2.*,kickasstorrents.*,kat2.*,kattracker.*,thekat.*,thekickass.*,kickassz.*,kickasstorrents2.*,topkickass.*,kickassgo.*,kkickass.*,kkat.*,kickasst.*,kick4ss.*##+js(aeld, , break;case $.)
+kat.*,katbay.*,kickass.*,kickasshydra.*,kickasskat.*,kickass2.*,kickasstorrents.*,kat2.*,kattracker.*,thekat.*,thekickass.*,kickassz.*,kickasstorrents2.*,topkickass.*,kickassgo.*,kkickass.*,kkat.*,kickasst.*,kick4ss.*##+js(aopw, ospen)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8519
+*.js|$script,1p,domain=isohuntz.*|isohunt.*|isohunts.*|isohuntx.*|isohunthydra.*|isohunters.*|isohunting.*|myisohunt.*
+*$csp=script-src *,domain=isohuntz.*|isohunt.*|isohunts.*|isohuntx.*|isohunthydra.*|isohunters.*|isohunting.*|myisohunt.*
+*$frame,domain=isohuntz.*|isohunt.*|isohunts.*|isohuntx.*|isohunthydra.*|isohunters.*|isohunting.*|myisohunt.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/8520
+*$script,1p,domain=torrentproject2.*
+*$csp=script-src *,domain=torrentproject2.*
+*$frame,domain=torrentproject2.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/8498
+uproxy.*##+js(aeld, , Pop)
+uproxy.*##+js(set, String.fromCharCode, trueFunc)
+uproxy.*##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/72849
+/istripper.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/8507
+convert2mp3.club##+js(nowoif)
+convert2mp3.club###idIframe
+
+! mylegalporno.com popup, ads
+mylegalporno.com##+js(aeld, click, pu_count)
+mylegalporno.com##.rmedia
+mylegalporno.com##.zone
+||mylegalporno.com^$frame,1p
+
+! server.satunivers. tv anti adb
+server.satunivers.tv##+js(aeld, load, 2000)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/l5rxxk/fix_for_winaerocom_blocking_content_if_ublock/
+winaero.com#@#.entry-content > div > div
+winaero.com##[href^="/idx.php"]
+
+! taxidrivermovie.com PH
+taxidrivermovie.com###scroll-div
+taxidrivermovie.com##.adboard-top
+taxidrivermovie.com##[href="/category/taxi-fares/"]:upward(.thumb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15622
+embedstream.me##+js(nowebrtc)
+embedstream.me,nolive.me##+js(nowoif)
+embedstream.me##+js(nostif, (), 150)
+embedstream.me##^script:has-text(FingerprintJS)
+embedstream.me##^script:has-text("admc")
+embedstream.me##^script:has-text(\"admc\")
+*$script,3p,denyallow=cloudflare.net|fastly.net|gstatic.com|jsdelivr.net,domain=nolive.me
+embedstream.me##body > .position-absolute
+embedstream.me###aff-click
+@@||embedstream.me/cash.min.js$script,1p
+! https://github.com/AdguardTeam/AdguardFilters/issues/135665
+nolive.me,worldcupstream.pm##+js(acs, setTimeout, admc)
+worldcupstream.pm##.position-absolute.bg-opacity-50.top-0[id]
+worldcupstream.pm##.m-1.fw-bold.btn-danger.btn
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/73376
+javporn18.com##+js(acs, mypop)
+javporn18.com###contentDiv
+javporn18.com##.player_box
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/73388
+vrporngalaxy.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8516
+123unblock.*##+js(acs, atob, decodeURIComponent)
+123unblock.*##+js(acs, adcashMacros)
+123unblock.*##.alert-dismissible
+||binomo.com/en/promo/*$doc
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/73523
+simply-hentai.com##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+simply-hentai.com##.cam-container
+simply-hentai.com##.reader > div.mb-3 > div.mt-3
+
+! https://www.reddit.com/r/uBlockOrigin/comments/l821y4/adblock_detection/
+animesa.*##+js(set, adblock_use, false)
+*$frame,3p,denyallow=cbox.ws,domain=animesa.*
+
+! stem-cells-news. com popups
+stem-cells-news.com##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/73637
+ccurl.net##+js(aopr, app_vars.force_disable_adblock)
+ccurl.net##+js(set, blurred, false)
+ccurl.net##.banner
+ccurl.net##.box-main > .blog-item
+ccurl.net##[style*="width: 300px; height:250px"]
+ccurl.net##.col-md-2
+*$script,3p,denyallow=bootstrapcdn.com|google.com|gstatic.com|hwcdn.net|jquery.com|recaptcha.net,domain=ccurl.net
+||cryptocreed.com^$3p
+||powr.io^$3p,script
+
+! https://www.reddit.com/r/uBlockOrigin/comments/l8uu90/adblock_detected/
+subtitle.one##+js(nostif, _0x, 3000)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/l8tcfn/having_trouble_blocking_ads_on_a_sitecan_i_tweak/
+||wixstatic.com/media/*~mv2.gif$domain=taxi-point.co.uk
+taxi-point.co.uk##div[id^="comp-"]:has(> a[data-testid="linkElement"] > wix-image[data-src$="~mv2.gif"])
+taxi-point.co.uk##div[id^="comp-"][class^="_"] > div[class^="_"][style^="padding-left"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/l94wfy/httpsgenshinimpactcalculatorcom_forcing_adblock/
+genshinimpactcalculator.com##+js(set, nitroAds.loaded, true)
+genshinimpactcalculator.com##.damageGroup.artifactsContainer > .optimizerRow > .hasToolTip.gbutton > div.tooltip[style^="top: "]
+genshinimpactcalculator.com###BannerBottom
+
+! javynow.com popup
+javynow.com##+js(nowoif)
+javynow.com##.videos-ad__wrap:style(background-color: transparent !important)
+javynow.com##.banner-player
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/73726
+st23q.com##+js(aopr, app_vars.force_disable_adblock)
+st23q.com##+js(set, blurred, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/73689
+beautyram.info,viraloc.com##+js(aopr, app_vars.force_disable_adblock)
+beautyram.info,viraloc.com##+js(set, blurred, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/l9u38p/inline_script_blocking_syntax_wrong/
+@@||escapegames24.com^$ghide
+escapegames24.com##ins.adsbygoogle
+escapegames24.com###HTML13
+escapegames24.com###HTML3
+escapegames24.com###HTML2
+escapegames24.com###HTML11
+escapegames24.com###HTML6 > .widget-content b
+escapegames24.com##div[id^="post-"] b
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/73553
+*$script,redirect-rule=noopjs,domain=jnckmedia.com
+
+! zdravenportal. eu anti adb
+zdravenportal.eu##+js(acs, jQuery, ads)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/73764
+best18porn.com##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+best18porn.com##.banner
+best18porn.com##.in-player-spot
+||best18porn.com/best18.js
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/73924
+shooshtime.com##+js(acs, document.getElementsByTagName, adn)
+
+! th-world. com anti adb
+th-world.com##+js(nostif, nextFunction, 250)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8534
+upload.ee##+js(nowebrtc)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/lcfxjo/noodlemagazine_ads/
+*$3p,script,xhr,denyallow=cloudflare.net|google.com|gstatic.com|googleapis.com|hcaptcha.com|jsdelivr.net|pvvstream.pro|recaptcha.net|userapi.com,domain=noodlemagazine.com
+! https://github.com/uBlockOrigin/uAssets/issues/16775
+actionviewphotography.com,exporntoons.net,mat6tube.com,noodlemagazine.com,tyler-brown.com,ukdevilz.com##div[style]:has(> ins)
+actionviewphotography.com,exporntoons.net,mat6tube.com,noodlemagazine.com,tyler-brown.com,ukdevilz.com##noindex
+actionviewphotography.com,exporntoons.net,mat6tube.com,noodlemagazine.com,tyler-brown.com,ukdevilz.com##+js(nano-stb, download, 1100)
+||tbpot.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/8535
+||binpartner.com^$3p
+||olymptrade.com^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/74022
+mysexgames.com##+js(aopr, loadTool)
+mysexgames.com##+js(set, createCanvas, noopFunc)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/lcud5z/ublock_failing_on_ebookbbcom/
+ebookbb.com##^script:has-text('shift')
+ebookbb.com##^script:has-text(\'shift\')
+*$3p,script,denyallow=google.com|gstatic.com|recaptcha.net|hcaptcha.com,domain=ebookbb.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ld2kat/a_website_has_a_popup_or_whatever_with_ads/
+! https://github.com/uBlockOrigin/uAssets/issues/9039
+romaniataramea.com##.sgpb-popup-dialog-main-div-wrapper
+romaniataramea.com##.sgpb-popup-overlay
+romaniataramea.com##html:style(overflow: auto !important;)
+romaniataramea.com##+js(aopr, bizpanda)
+*/wp-content/plugins/sociallocker-next-premium/$script,css
+
+! https://github.com/easylist/easylist/issues/7117
+techjunkie.com##.home-page.main-section, html > body:style(margin-top: 0px !important;)
+! https://github.com/uBlockOrigin/uAssets/issues/14690
+techjunkie.com##.slideMenu:style(top: -7px !important;)
+techjunkie.com##body:style(padding-top: 0px !important;)
+techjunkie.com##header:style(top: 0px !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/74018
+celebritynakeds.com##.show-over-1000.async-reklam-placeholder
+
+! https://github.com/uBlockOrigin/uAssets/issues/7702#issuecomment-774409825
+oyohd.*##+js(nowoif)
+vidohd.com##+js(aopr, __Y)
+||oyohd.*/cdn-cgi/trace$xhr,1p
+
+! https://github.com/easylist/easylist/issues/6998
+! https://www.reddit.com/r/uBlockOrigin/comments/lds98p/alot_of_ads_on_this_pornsite_are_not_blocked_by/
+! https://github.com/AdguardTeam/AdguardFilters/issues/83786
+bigtitslust.com##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+lesbian8.com##+js(aeld, getexoloader)
+lesbian8.com##+js(aopr, decodeURI)
+amateur8.com,bigtitslust.com,freeporn8.com,lesbian8.com,maturetubehere.com,sortporn.com##+js(aopr, Q433)
+amateur8.com,bigtitslust.com,ebony8.com,freeporn8.com,lesbian8.com,maturetubehere.com,sortporn.com##+js(set, flashvars.adv_pre_vast, '')
+amateur8.com,amateur8.com,bigtitslust.com,ebony8.com,lesbian8.com,sortporn.com###lotal
+amateur8.com,bigtitslust.com,ebony8.com,maturetubehere.com,shemalesin.com,sortporn.com###player_add
+amateur8.com,bigtitslust.com,freeporn8.com,lesbian8.com,maturetubehere.com,sortporn.com##.footer-margin
+amateur8.com,ebony8.com,lesbian8.com,maturetubehere.com,shemalesin.com##.table
+ebony8.com,lesbian8.com,maturetubehere.com,shemalesin.com##.sponsor
+bigtitslust.com##[href^="https://www.bigtitslust.com/link/"]
+lesbian8.com##[href^="https://www.lesbian8.com/link/"]
+sortporn.com##[href^="https://www.sortporn.com/link/"]
+||lesbian8.com/nb/
+amateur8.com###intt-layer
+amateur8.com,bigtitslust.com,freeporn8.com,lesbian8.com,sortporn.com###int-over
+bigtitslust.com,freeporn8.com,lesbian8.com,sortporn.com##.mitaru
+amateur8.com,bigtitslust.com,freeporn8.com,lesbian8.com,sortporn.com##.calibro
+amateur8.com,ebony8.com,maturetubehere.com,shemalesin.com##.top2.pignr
+ebony8.com,freeporn8.com,maturetubehere.com,shemalesin.com##.item.pignr
+amateur8.com,ebony8.com##li.pignr
+/s/s/js/i-top.js?v=
+/sum.js?i=*&v=
+
+! https://github.com/uBlockOrigin/uAssets/issues/8541
+@@||services.brid.tv/player/$script,domain=babylonbee.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/74216
+boobsrealm.com##+js(acs, puShown, /doOpen|popundr/)
+||boobsrealm.com/wp-content/uploads/*-banner$image,1p
+||bustyporn.com/*.php?src=$frame,3p
+boobsrealm.com##iframe[style$="height: 250px;"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/le4owy/cant_figure_out_how_to_block_this_new_tab_from/
+! https://github.com/uBlockOrigin/uAssets/issues/12824
+720pstream.*##+js(nowoif)
+720pstream.*##+js(nostif, "admc")
+*$script,3p,denyallow=chatango.com|cloudfront.net|sharethis.com,domain=720pstream.*
+720pstream.*##.bg-dark.position-absolute
+
+! ytanime.tv ads
+ytanime.tv##^script:has-text(u_cfg)
+ytanime.tv##+js(aopr, u_cfg)
+ytanime.tv##+js(aopw, adcashMacros)
+*$script,3p,denyallow=arc.io|bootstrapcdn.com|chatango.com|cloudflare.com|cloudflare.net|disqus.com|disquscdn.com|facebook.net|fastly.net|fastlylb.net|fbcdn.net|google.com|googleapis.com|gstatic.com|hwcdn.net|jquery.com|jsdelivr.net|jwplatform.com|jwpcdn.com|recaptcha.net,domain=ytanime.tv
+
+! guardaserie. name popunder
+||googletagmanager.com/gtag/js^$redirect-rule=google-analytics_analytics.js,domain=guardaserie.*
+guardaserie.*##+js(aeld, , /pop|_blank/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8545
+yifytorrentme.com##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/70829
+!#if env_chromium
+||doubleclick.net/gampad/ads?*&output=xml_vmap$xhr,redirect=noopvmap-1.0,important,domain=tver.jp
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/8544
+unblocked.name##+js(aopr, GetWindowHeight)
+unblocked.name##+js(aopr, decodeURIComponent)
+unblocked.name##+js(acs, adcashMacros)
+unblocked.name##[style*="decoration"]:not([style^="width"])
+unblocked.name##.cborz-bordered
+unblocked.name##.durs-bordered
+unblocked.name##+js(aost, Math.random, )
+unblocked.name##[id^="cookie"]
+||unblocked.name/zpp/*$script,domain=unblocked.name
+/hy.js$script,domain=unblocked.name
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/74299
+||icyporno.com/jss/external_pop.js
+||icyporno.com/_ad
+icyporno.com###parrot
+icyporno.com###embed-overlay
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/74322
+blog.aming.info##+js(nowoif)
+blog.aming.info##body:style(visibility:visible !important)
+blog.aming.info###babasbmsgx
+blog.aming.info##[href^="https://cdn.aming.info/"]
+blog.aming.info##[href^="https://warp.plus/"]
+blog.aming.info##[href="https://om.aming.info/cpmadsterra"]
+blog.aming.info##[href="https://om.aming.info/free$100"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/lfwhnj/adblock_detected_on_this_site/
+tucsitupdate.blogspot.com##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/78608
+toopl.xyz##+js(nowoif)
+*$script,3p,denyallow=cloudflare.com|cloudfront.net|fastly.net|googleapis.com|gstatic.com|jwpcdn.com|sharethis.com|sharethis.net,domain=toonanime.*
+
+! https://github.com/uBlockOrigin/uAssets/pull/8556
+garrysmods.org##.blocker.jquery-modal
+garrysmods.org##body[style="overflow: hidden;"]:style(overflow: auto!important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8564
+@@||gaming-style.com^$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/74649
+freemc.host##+js(nosiif, length, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/pull/74668
+! https://www.reddit.com/r/uBlockOrigin/comments/x21m3v/
+cryptojunkie.net##+js(nobab)
+*$script,redirect-rule=noopjs,domain=cryptojunkie.net
+
+! https://www.reddit.com/r/uBlockOrigin/comments/lig00v/blockadblock_always_a_pain/
+jagoanssh.com##+js(nosiif, visibility, 1000)
+*$image,redirect-rule=1x1.gif,domain=vpnstunnel.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/lijud0/another_site_blocking_videos/
+tyla.com#@#div[class*="margin-Advert"]
+tyla.com##div[class$="-margin-Advert"]:style(height:1px !important;width:1px !important;position:absolute !important;left:-3000px !important)
+
+! scnlog.me popups/ads
+*$script,3p,denyallow=cloudflare.com|google.com|gstatic.com|recaptcha.net|hcaptcha.com,from=scnlog.me
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/74823
+youtubemp3.us##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8573
+ancient-origins.*##+js(set, document.bridCanRunAds, true)
+
+! dekki.com ads
+dekki.com##div[pb-serve-label*="advert"]:upward(2)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8575
+pcso-lottoresults.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/74931
+bittools.net##+js(acs, onload, fetch)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/74715
+otomi-games.com##+js(nano-sib)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/75101
+@@*$ghide,domain=fastcoin.ga|dropcoins.xyz|faucetbr.tk|is2btc.com
+fastcoin.ga##div[style="height: 90px;"]
+fastcoin.ga##div[style="width:728px;height:90px;display: inline-block;margin: 0 auto"]
+fastcoin.ga##.justify-content-center.col-sm-12.row > .overflow > center > .slide.carousel
+fastcoin.ga##center > .justify-content-center.row
+is2btc.com##.text-center.col-sm-3
+is2btc.com##div.col-sm-3:first-child
+is2btc.com##ins[class][style="display:inline-block;width:728px;height:90px;"]
+is2btc.com##div[class][style="width:300px;height:600px;display: inline-block;margin: 0 auto"]
+is2btc.com##div[class][style="width:300px;height:250px;display: inline-block;margin: 0 auto"]
+is2btc.com##.overlay
+is2btc.com##div.col-sm-3:nth-of-type(3)
+is2btc.com##.text-center.col-sm-12
+*$script,3p,denyallow=bootstrapcdn.com|cloudflare.net|consensu.org|fontawesome.com|google.com|gstatic.com|hwcdn.net|jquery.com|jsdelivr.net,domain=dropcoins.xyz|fastcoin.ga|faucetbr.tk|is2btc.com|quickclaims.*|swift4claim.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/75129
+sunhope.it##+js(nosiif, document.getElementById, 10000)
+
+! propeller crap
+hitmovies4u.com##+js(ra, onclick, a.thumb.mvi-cover)
+*$3p,denyallow=googleapis.com|gstatic.com,domain=filmyzillafullmovie.waystohunt.info
+hindilinks4u.to##.btn.stream-hd
+||shortlinkto.*^$csp=default-src 'self' *.favicon.cc *.google.com *.gstatic.com *.googleapis.com
+fulltube.*##.mvic-btn
+||wifi4games.com/sw.js$script,1p
+
+! vibehubs. com antiadb and ads
+vibehubs.com##+js(aost, jQuery, ai_adb)
+vibehubs.com##[href^="https://www.star-clicks.com/"]
+vibehubs.com##.code-block-4.code-block > [href]
+
+! yt-api. com ads
+yt-api.com##+js(nowoif)
+
+||gyonlineng.com/sw.js$xhr,1p
+||yoat.xyz/xyz.js
+##[href^="https://cluttercallousstopped.com/"]
+##[href^="https://www.highperformancecpm.com/"]
+
+! convertitoremp3 .download ads
+||expensivesurvey.online^$popup,3p
+
+afilmyhouse.blogspot.com##+js(nowoif)
+crackevil.com##.pop-ad-wrap
+
+! https://github.com/uBlockOrigin/uAssets/issues/8589
+pcgamer.com##+js(aopr, _sp_._networkListenerData)
+pcgamer.com##.onesignal-customlink-container
+pcgamer.com##div[style="position: fixed; bottom: 0px; left: 0px; width: 100%; min-height: 90px; background-color: rgba(245, 245, 245, 0.8); z-index: 9995;"]
+pcgamer.com##.listingResult:has(> div.sponsored-post)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8592
+gaminggorilla.com##+js(aopr, history.replaceState)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8594
+pagalworld.us##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8598
+@@||freecoursewebsite.com^$ghide
+freecoursewebsite.com##ins.adsbygoogle
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/75264
+codesnail.com##+js(nostif, css_class.show)
+codesnail.com##.widget_custom_html
+
+! babytorrent. ms popups
+babytorrent.*,eztv-torrent.net##+js(aopr, decodeURI)
+
+! pops.tv anti-adb
+pops.tv#@##adsContainer
+
+! https://github.com/uBlockOrigin/uAssets/issues/8602
+! pirlotvonlinehd. me
+rojadirectatvhd.*##+js(aeld, , _0x)
+
+! anti adb + popups
+*$script,3p,domain=tanix.net
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/75358
+tvn.pl##+js(json-prune, movie.advertising.ad_server playlist.movie.advertising.ad_server)
+@@||cdntvn.pl/*/advert.js$xhr,domain=tvn.pl
+tvn.pl##.on-top.ad-ph
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/75541
+@@||hcdn.online^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/8615
+! https://github.com/AdguardTeam/AdguardFilters/issues/74176
+imginn.com,finchtechs.com##+js(acs, document.createElement, unblocker)
+||copyrightcontent.org/unblocker/
+
+! https://github.com/uBlockOrigin/uAssets/issues/8618
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect-rule=noop.js,domain=anidraw.net
+
+! torlook.info popup ads
+torlook.info##+js(acs, document.createElement, 'script')
+*$script,3p,denyallow=cloudflare.com|googleapis.com|yastatic.net,domain=torlook.info
+
+! https://github.com/easylist/easylist/pull/7248
+fpo.xxx##+js(set, flashvars.adv_pause_html, '')
+fpo.xxx##+js(set, flashvars.adv_pre_src, '')
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/75838
+rscripts.net##+js(nobab)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/lt4xqd/please_fix_those_annoying/
+dogecoin.*##+js(aopr, app_vars.force_disable_adblock)
+||coinad.*^$3p
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=45805&p=158848#p158848
+gayforfans.com##+js(aeld, getexoloader)
+
+! cinecalidad popups
+cinecalidad.*##+js(set, playerAdSettings.adLink, '')
+cinecalidad.*##+js(set, playerAdSettings.waitTime, 0)
+cinecalidad2.com##+js(acs, document.getElementsByTagName, onclick)
+cine-calidad.*##+js(aeld, click, allclick_Public)
+cine-calidad.*##+js(aopw, adcashMacros)
+cine-calidad.*##+js(ra, href, #opfk)
+cine-calidad.*##.links
+
+! https://github.com/easylist/easylist/pull/6896#pullrequestreview-599945327
+cambb.xxx##.thumb div.ad:upward(.thumb)
+! https://github.com/AdguardTeam/AdguardFilters/issues/154443
+cambb.xxx##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8628
+embed.indavideo.hu##+js(set, AdHandler.adblocked, 0)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/75996
+sexgames.xxx##+js(aopr, loadTool)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/76063
+coinurl.net##+js(aopr, app_vars.force_disable_adblock)
+coinurl.net##+js(nosiif, visibility, 1000)
+coinurl.net##+js(nowoif)
+coinurl.net##+js(set, adsHeight, 11)
+coinurl.net##+js(set, checkCap, 0)
+coinurl.net###ads-notice
+coinurl.net##.row > .col-md-offset-1.col-md-10 [align="center"] > a[href]
+
+! https://github.com/uBlockOrigin/uAssets/issues/8631
+||vexfile.com/sw.js$script,1p
+||vexfile.com/img/cofksar.png
+vexfile.com##.title-box > [href] > [src]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/152086
+manga18fx.com##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+manga18fx.com##.kadx
+||manga18fx.com/nmme2023/nmme_frend.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/8640
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js^$script,domain=sudoku-aktuell.de
+sudoku-aktuell.de###ajax
+sudoku-aktuell.de###billboard
+sudoku-aktuell.de###blockdiv
+
+! jexmovie. com => vidlink. org popup
+vidlink.org##[target="_blank"]
+
+! host2.jptorrent.org timer
+jptorrent.org##+js(nano-stb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8649
+kiiw.icu##+js(set, blurred, false)
+kiiw.icu##+js(aopr, open)
+kiiw.icu##.banner
+kiiw.icu##.fade
+||developerity.com^$3p
+@@||kiiw.icu^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/8658
+!#if env_firefox
+qub.ca##.jss2
+!#endif
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/76597
+! https://github.com/uBlockOrigin/uAssets/issues/21211
+incestflix.com##body > div[style*="z-index:"]
+
+
+! xtube.com PH
+xtube.com##.pageBanner
+xtube.com##.panelBottomSpace > li.pull-right
+xtube.com##.removeAds
+xtube.com##body.desktopView.hasFooterAd .mainSection:style(margin-bottom: 0!important;padding-bottom: 0!important;)
+
+##[href^="https://exi8ef83z9.com/"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/73966
+videowood.tv##+js(aopr, LieDetector)
+videowood.tv##+js(aopr, PopURL)
+videowood.tv##+js(aopr, _wm)
+videowood.tv##+js(aopw, adcashMacros)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8671
+hideandseek.world##+js(set, canRunAds, true)
+
+! https://github.com/easylist/easylist/issues/7331#issuecomment-791886559
+speedostream.*##+js(aost, JSON.parse, computed)
+||s.speedostream.*^$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/76791
+@@||nnaa66.xyz^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/8674
+discovermagazine.com##a > img + div[class]:last-of-type:has-text(Sponsored):upward(div[sizes])
+discovermagazine.com##div[sizes] > span[class]:has-text(Sponsored):upward(div[sizes])
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/76858
+sportbible.com#@#div[class*="margin-Advert"]
+sportbible.com##div[class$="-margin-Advert"]:style(height:1px !important;width:1px !important;position:absolute !important;left:-3000px !important)
+||static.adsafeprotected.com/vans-adapter-google-ima.js^$script,redirect-rule=noopjs,domain=sportbible.com
+! https://github.com/AdguardTeam/AdguardFilters/issues/133283
+@@||aniview.com/api/adserver/spt?$script,domain=sportbible.com
+@@||player.avplayer.com/script/*/avcplayer.js$domain=sportbible.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/8683
+spicyandventures.com##+js(aopr, decodeURI)
+spicyandventures.com##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/76921
+infofuge.com##+js(nostif, disableDeveloperTools)
+
+! codingshiksha.com anti adb
+codingshiksha.com##+js(nostif, css_class.show)
+
+! graphicux.com anti adb
+graphicux.com##+js(nostif, css_class.show)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/76914
+pengantartidurkuh.blogspot.com##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8687
+galaxy-link.space##+js(aopr, app_vars.force_disable_adblock)
+galaxy-link.space##+js(set, blurred, false)
+galaxy-link.space##.box-main > .blog-item
+
+! https://github.com/uBlockOrigin/uAssets/issues/9133
+*$script,redirect-rule=noopjs,domain=telegraf.rs|telegraf.tv
+
+! https://www.reddit.com/r/uBlockOrigin/comments/m15ihi/site_detecting_ublock_origin/
+traveldesearch.com##+js(aost, XMLHttpRequest, onreadystatechange)
+vkspeed.com##div.jw-cue-type-ads
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/77040
+@@||acilissaati.com^$ghide
+acilissaati.com##ins.adsbygoogle
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/76815
+whowantstuffs.blogspot.com##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/77008
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js^$script,domain=aiarticlespinner.co
+aiarticlespinner.co##[id^="topads_"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/8695
+linkpoi.me##+js(acs, Math, replace)
+linkpoi.me##+js(aopr, app_vars.force_disable_adblock)
+linkpoi.me##+js(set, blurred, false)
+linkpoi.me##+js(no-fetch-if, manager)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/77046
+usdshort.com##+js(aopr, app_vars.force_disable_adblock)
+usdshort.com##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8697
+alohatube.xyz##+js(set, popit, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/m1gkn7/how_can_i_block_ads_on_this_site/
+@@||asklaftananlamazinhindi.com^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/77079
+solotrend.net##+js(aopr, b2a)
+solotrend.net##[href^="https://www.hoster.co.id/"]
+solotrend.net###text-9 > .textwidget > p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/77077
+freevstplugins.net##+js(acs, document.getElementById, adsBlocked)
+@@||freevstplugins.net^$ghide
+freevstplugins.net##ins.adsbygoogle
+freevstplugins.net##.advert-wrap
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/170497
+haes.tech##+js(aopr, BetterJsPop)
+haes.tech##+js(nowoif)
+||haes.tech/cdn-cgi/trace
+
+! https://github.com/uBlockOrigin/uAssets/issues/8699
+@@||genelpara.com^$ghide
+genelpara.com##ins.adsbygoogle
+genelpara.com##[class^="rklm"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/m26n32/site_with_a_few_popups_blocks_ability_to_use_dev/
+goalup.live##+js(nosiif, 0x)
+goalup.live##+js(ra, onclick)
+
+! https://github.com/easylist/easylist/issues/7395#issuecomment-796787384
+freeuseporn.com##+js(aopr, encodeURIComponent)
+*$script,3p,domain=freeuseporn.com
+freeuseporn.com##canvas
+
+||adsyou.pro^$3p
+||bestcripto.xyz^$3p
+
+! pastebr.xyz anti adb
+pastebr.xyz##+js(set, isAdBlockActive, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9768
+elitepvpers.com##p > [href^="https://playorigin.com/"]
+elitepvpers.com##[href="https://skyredirect1.com/"]
+elitepvpers.com##a[href*="utm_medium=banner&utm_campaign=epvp"]
+elitepvpers.com##div > .page > div > div[style]:has-text(/^Advertise/i) + a
+elitepvpers.com##[href="https://www.skycheats.com/"]
+elitepvpers.com##[href^="https://funpay.com/"]
+||playorigin.com^$3p
+||elitepvpers.com/123/oddeven_btc_de_4x.png$image,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/77375
+@@||gats.io^$ghide
+gats.io##+js(nosiif, 0x)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/77363
+||foxhq.com/gabtab.webm$media,redirect=noop-1s.mp4
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/77453
+*$script,redirect-rule=noopjs,domain=cozinha.minhasdelicias.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/77429
+decomaniacos.es##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/77424
+todoseriales1.blogspot.com##+js(nosiif, visibility, 1000)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/lq141w/help_to_blocking_ad_spaces/gqbcft9/
+dbsmanga.com,read7deadlysins.com,readdrstone.com,readfairytail.com,readhxh.com,readkaguyasama.com,readkingdom.com,readmha.com,readnaruto.com,readnoblesse.com,readonepiece.com,readopm.com,readsnk.com,readtowerofgod.com,readvinlandsaga.com,watchgoblinslayer.com,watchoverlord2.com,watchsao.tv##.js-a-container
+dbsmanga.com,demonslayermanga.com,read7deadlysins.com,readdrstone.com,readfairytail.com,readhxh.com,readjujutsukaisen.com,readkaguyasama.com,readkingdom.com,readmha.com,readnaruto.com,readnoblesse.com,readonepiece.com,readopm.com,readsnk.com,readtowerofgod.com,readvinlandsaga.com,watchgoblinslayer.com,watchoverlord2.com,watchsao.tv##.justify-center > div > b:first-child, .justify-center > div > br:nth-of-type(-n+5), .justify-center > div > center
+
+! https://github.com/uBlockOrigin/uAssets/issues/8718
+bitcoinly.in##+js(aopr, app_vars.force_disable_adblock)
+bitcoinly.in##+js(set, blurred, false)
+bitcoinly.in##.banner
+bitcoinly.in##[href^="https://fairspin.me"]
+bitcoinly.in###link-view > center
+bitcoinly.in##[class^="bmadblock-"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/77519
+||pagead2.googlesyndication.com/pagead/show_ads.js^$script,redirect-rule=noopjs,domain=thetimetube.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/8666
+eturbonews.com##^responseheader(location)
+
+! https://github.com/LiCybora/NanoDefenderFirefox/issues/201
+@@||renault-club.cz^$ghide
+renault-club.cz##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/8725
+||googleads.g.doubleclick.net/pagead/$xhr,redirect-rule=nooptext,domain=danshort.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/77430
+||manhuascan.com^*/popads.js
+
+! https://www.reddit.com/r/uBlockOrigin/comments/m6ns66/adblock_detected/
+||evolok.net/*/authorize/*$xhr,redirect-rule=nooptext,domain=nation.africa
+||bohubrihi.com^$3p
+
+! https://github.com/easylist/easylist/issues/7400
+bhaskar.com##[id^="Ad"]:upward([style])
+divyabhaskar.co.in##[id^="Ad"]:upward([style])
+
+! propeller crap/ads
+livesport24.net##+js(acs, setTimeout, admc)
+livesport24.net##[href^="https://b-partner.xyz/"]
+123moviesme.*##+js(aopr, decodeURI)
+jattmate.com,saveshared.com,simpledownload.net##+js(aopr, String.fromCharCode)
+inextmovies.*##+js(nowoif)
+asianembed.io##+js(aeld, click, 0x)
+emb.apl236.me###ads
+||livesport24.net/*.gif$image
+emb.apl305.me##+js(nowoif, _blank)
+apl284.me###ads
+apl306.me###ads
+
+hd44.com##+js(nowoif)
+*$script,3p,domain=hwnaturkya.com,denyallow=gstatic.com|recaptcha.net
+hindilinks4u.*##.mvic-btn
+##[href^="//taghaugh.com/"]
+||bhplay.me/player/assets/devtools-detector/*$script,1p
+||aragontrack.com^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/77746
+copydev.com##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/77840
+poki.com##div[style="height: 250px; width: 300px;"]:upward(2)
+poki.com##div[style="height: 600px; width: 160px;"]:upward(2)
+poki.com##div[style="height: 90px; width: 728px;"]:upward(2)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8734
+otakudesu.*##.box_item_ads_popup
+*.gif$domain=otakudesu.*,image
+
+! https://github.com/uBlockOrigin/uAssets/issues/13791
+*$script,3p,denyallow=blocked.bltsel|facebook.net|fbcdn.net,domain=manganelo.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/77887
+insidertracking.com##+js(acs, jQuery, length)
+
+! https://github.com/easylist/easylist/issues/7438
+! https://github.com/uBlockOrigin/uAssets/issues/13649
+*$popunder,3p,domain=mp4porn.space
+mp4-porn.space##.href_
+
+! https://github.com/uBlockOrigin/uAssets/issues/5530
+playonlinux.com##h1:has-text(Ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9813
+latesthdmovies.*##+js(acs, eval, replace)
+latesthdmovies.*##+js(acs, document.createElement, 'script')
+latesthdmovies.*##[href^="https://bit.ly/"]
+
+! news18. com ad leftovers ,video unblockade
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect=noopjs,domain=news18.com
+-contrib-ads.$script,redirect=noopjs,domain=news18.com
+/videojs.ads.$script,redirect=noopjs,domain=news18.com
+news18.com##[class="Article_article_mad__1sOil"]
+news18.com##[style^="min-height:"]:has(.OUTBRAIN)
+news18.com##[style^="min-height :90px"]
+
+! popups
+mp4moviez.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8751
+sextvx.com##+js(nostif, window.location.href=link)
+m.sextvx.com###home_hor_top_ads
+m.sextvx.com###home_hor_bot_ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/8754
+@@||menjelajahi.com^$ghide
+menjelajahi.com##+js(nano-sib, time, , 0)
+menjelajahi.com##+js(set, blurred, false)
+menjelajahi.com##ins.adsbygoogle
+menjelajahi.com##.alert-danger.alert-dismissable.alert
+
+! ukrainesmodels. com popups
+ukrainesmodels.com##+js(aopw, atOptions)
+*$script,3p,domain=ukrainesmodels.com
+
+! onlinepornhub. net popups
+onlinepornhub.net##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+*$script,3p,domain=onlinepornhub.net,denyallow=k2s.cc
+onlinepornhub.net##.header-area
+onlinepornhub.net###footer-widget
+
+! nepaliputi. net popups
+nepaliputi.net##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ma5dih/how_can_i_bypass_this_horrid_red_thing/
+downloadcursos.top##+js(acs, eval, replace)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/78136
+platform.adex.network##+js(no-fetch-if, moonicorn.network)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/78225
+@@||uploadshare.net^$ghide
+uploadshare.net##ins.adsbygoogle
+uploadshare.net##.advert-wrapper
+
+! https://github.com/uBlockOrigin/uAssets/issues/14822
+/js/static/header/sda/ppsuma*.js$script
+xnxx.com##.videoad-title
+
+! https://forums.lanik.us/viewtopic.php?p=159178#p159178
+@@||cache.marieclaire.fr/media/videojs/videojs.ads.min.js$script,domain=marieclaire.fr
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=marieclaire.fr
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/78240
+*$script,3p,denyallow=arc.io|cloudflare.com|cloudflare.net|disqus.com|disquscdn.com|fastlylb.net|unpkg.com,domain=hatsukimanga.com
+hatsukimanga.com##.cookies
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/78265
+masfrandy.com##+js(acs, addEventListener, google_ad_client)
+
+! android-apk.org -> aapks.com countdown
+android-apk.org##+js(nano-sib, time)
+aapks.com##+js(nano-stb, countDown)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/78305
+forobasketcatala.com##+js(acs, XMLHttpRequest, onreadystatechange)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/78325
+tny.so##+js(acs, atob, 'shift')
+||tny.so/sw-$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/8777
+itsecuritynews.info##+js(aopr, b2a)
+itsecuritynews.info###secondary > .widget_custom_html.widget.widget_text
+
+! https://github.com/uBlockOrigin/uAssets/issues/8783
+||pagead2.googlesyndication.com/pagead/$redirect-rule=noopjs,script,domain=overbits.herokuapp.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/mclt11/
+cimanow.*,cnvids.com###ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/8785
+uvnc.com##+js(acs, addEventListener, nextFunction)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10071
+thothub.*,thethothub.com##+js(aost, localStorage, inlineScript)
+thothub.*,thethothub.com##.sponsor
+thothub.*,thethothub.com##.table
+
+! https://github.com/uBlockOrigin/uAssets/issues/8789
+textovisia.com##+js(aopr, isAdBlockActive)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/78550
+cryptslice.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/78545
+pewgame.com##+js(aopr, app_vars.force_disable_adblock)
+pewgame.com##+js(set, blurred, false)
+pewgame.com##section.short .content
+pewgame.com##body.captcha-page > .short
+||pewgame.com/sw.js^
+||pewgame.com/js/hre.js^
+*$script,redirect-rule=noopjs,domain=pewgame.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/8798
+dndsearch.in##+js(acs, $, height)
+
+! https://github.com/easylist/easylist/issues/7516
+redhdtube.xxx##+js(aopr, popns)
+||redhdtube.xxx/tmp/
+
+! nudeof.com anti-adb
+nudeof.com##div[class^="d-none"]
+nudeof.com##.col-xl-4.col-lg-6.col-md-8.col-12.order-xl-1.order-lg-1.order-md-1.order-sm-1.order-1
+nudeof.com##div.happy-section
+
+||rawcdn.githack.com/*/adbdetect.packed.js^$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/8802
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$domain=skmedix.pl
+@@||pagead2.googlesyndication.com/pagead/managed/js/adsense/*/show_ads_impl$script,domain=skmedix.pl
+@@||pagead2.googlesyndication.com/getconfig/sodar$xhr,domain=skmedix.pl
+@@||tpc.googlesyndication.com/sodar/sodar2.js$script,domain=skmedix.pl
+@@||googleads.g.doubleclick.net/pagead/ads?*skmedix.pl&$frame,domain=skmedix.pl
+@@||fundingchoicesmessages.google.com^$script,domain=skmedix.pl
+@@||googleads.g.doubleclick.net/pagead/ads?$frame,domain=skmedix.pl
+@@||skmedix.pl^$ghide
+*$frame,redirect-rule=noopframe,domain=skmedix.pl
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/78710
+yxoshort.com##+js(aopr, app_vars.force_disable_adblock)
+yxoshort.com##+js(set, blurred, false)
+yxoshort.com##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/8813
+kaotic.com##+js(nowoif)
+kaotic.com##.video-image > .track_outbound_post:upward(2)
+kaotic.com##div.hard-5.col-xs-12.col-sm-3:has(.track_outbound_post)
+kaotic.com##.track_outbound_post.grid-item
+
+! https://www.reddit.com/r/uBlockOrigin/comments/mf5rd0/help_blocking_sponsored_classified_on_cargurus/
+cargurus.com##[data-cg-ft="sponsored-listing-badge"]:upward(3)
+cargurus.com##div:has(> [id^="bannerAdLEADERBOARD_INLINE_"])
+
+! Anti-adblock https://community.brave.com/t/metro-style-anti-adblock/224281
+@@||metro.style^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/78704
+! https://github.com/AdguardTeam/AdguardFilters/issues/78915
+1link.vip##+js(set, blurred, false)
+1link.vip##[href^="https://1frozenthrone1.com"]
+1link.vip##[href^="https://runreferences.com"]
+thaitrieuvi.live##+js(nano-sib, counter)
+thaitrieuvi.live##center ~ .mh-clearfix.mh-wrapper
+||i.imgur.com^$domain=1link.vip
+||youtube.com^$domain=1link.vip
+! https://1link.vip/riXpzGsa
+haonguyen.top##+js(set, blurred, false)
+haonguyen.top###tp-wait
+haonguyen.top##[id^="tp-snp"]:style(display: block !important)
+sitecuatui.xyz###gtelinkbtn, #wpsafe-generate, #wpsafe-link:style(display: block !important;)
+sitecuatui.xyz##[id^="wpsafe-wait"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/8812
+@@||tekfiz.com^$ghide
+tekfiz.com##ins.adsbygoogle
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/78873
+files.fm##+js(aopr, canRunAds)
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=45963
+||cdn.flashtalking.com^$media,redirect=noopmp3-0.1s,domain=app.plex.tv
+! https://github.com/uBlockOrigin/uAssets/issues/20357
+app.plex.tv##+js(json-prune, MediaContainer.Metadata.[].Ad)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/78973
+||neonime.*/wp-content/themes/grifus/images/donate/yunita/
+
+! https://github.com/uBlockOrigin/uAssets/issues/8823
+discoveryplus.in##+js(no-fetch-if, ads)
+
+! androidhexzone.blogspot.com anti-adb
+||appnext.hs.llnwd.net^
+
+! vipboxtv .se | .sk and sister sites popups
+! https://www.reddit.com/r/uBlockOrigin/comments/17d17hb/i_use_a_site_called_olympicstreams_for_football/
+olympicstreams.me,vipboxtv.*##+js(nowoif, //)
+vipboxtv.*##+js(aopr, Adcash)
+||raw.githubusercontent.com/*/just-detect-adblock/*$3p,xhr,redirect-rule=nooptext
+olympicstreams.me##.position-absolute
+/vppdzdrw.js
+
+! https://www.reddit.com/r/uBlockOrigin/comments/175ssq8/ubo_wont_allow_player_to_open/
+! buffstreams. tv => sx popups
+buffstreams.*##+js(nowoif)
+buffstreams.*##+js(acs, setTimeout, admc)
+buffstreams.*##.position-absolute
+buffstreams.*##.m-1.fw-bold.btn-danger.btn
+
+! https://github.com/uBlockOrigin/uAssets/issues/9136
+nsfwyoutube.com##pp
+*$xhr,3p,domain=nsfwyoutube.com
+/t.js?i=*&cb=$script,3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/79312
+i-bits.io##+js(nano-sib, seconds)
+i-bits.io##ins[class][style^="display:inline-block;width:"]
+
+! seriesflv popup
+seriesflv.*##.adx > a[href]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/79335
+mcrypto.club###id-custom_banner
+! https://github.com/uBlockOrigin/uAssets/issues/14051
+mcrypto.club##+js(nano-stb, countdown, 10000)
+luckydice.net##+js(nano-sib, sec--)
+mcrypto.club###wpsafe-generate:style(display: block !important)
+mcrypto.club##div[id^="promo"]
+mcrypto.club###wpsafelink-countdown
+@@||cryptocoinsad.com/ads/js/slider.js$script,domain=mcrypto.club
+mcrypto.club##+js(no-xhr-if, wpadmngr)
+mcrypto.club,coinsparty.com##+js(no-fetch-if, ad)
+mcrypto.club##table
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-8046361
+mcrypto.club##+js(rpnt, script, redirectToErrorPage)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/79350
+omgexploits.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/79377
+secondlifetranslations.com##.ai-attributes
+secondlifetranslations.com##.code-block-17
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/79383
+! https://github.com/uBlockOrigin/uAssets/issues/11720
+freesoft.id,zcteam.id##+js(nostif, nextFunction)
+freesoft.id,zcteam.id###btn-keren
+freesoft.id,zcteam.id##.affiliate_download_imagebutton_container
+freesoft.id,zcteam.id##button[id][class^="custom-btn"][onclick^="window.open"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/79387
+studydhaba.com##+js(nostif, ai_)
+studydhaba.com##.widget_custom_html
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/79310
+claimbits.io##+js(nano-sib, seconds)
+@@||claimbits.io^$ghide
+claimbits.io##ins[class][style^="display:inline-block;width:"]
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/1531
+anonymz.com##+js(aost, _pop, _init)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/79484
+ac24.cz##pp
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/79485
+garaveli.de##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/79486
+@@||yilmaztv.com^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/79530
+||linkvertise.net^$3p
+! linkvertise URL manipulation
+! https://www.luvsquad.ml/2023/02/hm-19.html
+||publisher.linkvertise.com^$3p,domain=~linkvertise.*
+! https://www.leakite.com/xiaomi-redmi-note-12s-fastboot-and-recovery-rom/
+/cdn/linkvertise.js$script,1p
+@@||publisher.linkvertise.com/cdn/linkvertise.js
+@@||linkvertise.*^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/8848
+thumpertalk.com##+js(ra, href|target|data-ipshover-target|data-ipshover|data-autolink|rel, a[href^="https://thumpertalk.com/link/click/"][target="_blank"])
+thumpertalk.com##.ipsType_richText a:style(color:currentcolor !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8849
+zshort.*##+js(set, blurred, false)
+zshort.*###fafsf2:style(display:block !important)
+zshort.*###showContainer,.textfk
+
+! https://github.com/uBlockOrigin/uAssets/issues/8852
+chapteria.com##+js(acs, document.createElement, ignielAdBlock)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/79625
+*$script,3p,denyallow=cloudflare.net|gstatic.com|jsdelivr.net,domain=wolfstream.tv
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/1549
+eschenker.dbschenker.com##[style*="pointer-events"]:style(pointer-events:auto !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8861
+highstream.tv##+js(nowoif)
+highstream.tv##.tabs > button
+highstream.tv###container > div > .hidden-xs
+highstream.tv##.cover
+highstream.tv###customAnnouncement
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/79482
+*$script,3p,denyallow=cloudflare.com,domain=myadultanimes.com
+
+||chandrabindu.net^$3p
+
+! cekip. site detection
+cekip.site##+js(no-xhr-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11115
+blog.receivefreesms.co.uk##+js(nostif, show)
+||receivefreesms.co.uk^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/mmp1lc/is_it_possible_to_block_rewrites_that_happen_on/
+thecut.com##+js(aeld, /touchstart|mousedown|click/, latest)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9819
+voxfilmeonline.biz##pp
+voxfilmeonline.biz##div.layout_container_right:style(padding-left:0 !important)
+voxfilmeonline.biz##div.single-leftside:style(padding-right:0 !important)
+voxfilmeonline.biz##div.ss_left:style(padding-left:0 !important)
+voxfilmeonline.biz##.footer_floating_ads
+voxfilmeonline.biz##.post_video_banner
+realyplayonli.xyz##+js(aopr, BetterJsPop)
+realyplayonli.xyz##+js(aopr, doSecondPop)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/79999
+unityassetcollection.com##+js(nano-sib, secs)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80037
+psdly.com##.widget_custom_html
+psdly.com##.widget_media_image
+
+! freeadultcomix.com lockdown
+*$frame,script,3p,domain=freeadultcomix.com
+
+! https://github.com/bogachenko/fuckfuckadblock/issues/169
+! https://www.reddit.com/r/uBlockOrigin/comments/pdihfm/applying_for/
+*$script,redirect-rule=noopjs,domain=claimfreebits.com
+claimfreebits.com##+js(aopr, NoAdBlock)
+claimfreebits.com##.adnewos
+claimfreebits.com##+js(aopr, app_vars.force_disable_adblock)
+claimfreebits.com##+js(set, blurred, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80116
+clover-manga.com##.ad
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80152
+ipa-apps.me##+js(nano-sib, timer)
+ipa-apps.me##[src="https://ipa-apps.me/Download.GIF"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80178
+jujmanga.com##.code-block
+*$script,3p,denyallow=disqus.com|edgecastcdn.net|fastlylb.net|kxcdn.com|twitcount.com|twitter.com,domain=jujmanga.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/mowltd/detected/
+coursewikia.com##+js(nostif, brave_load_popup)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8871
+novelism.jp##+js(aeld, blur, native code)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7325
+alphapolis.co.jp##+js(aeld, blur, event.simulate)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80289
+||tinypass.com^$domain=crosswalk.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80290
+||tinypass.com^$domain=christianity.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/102868
+manyakan.com##+js(no-xhr-if, adsbygoogle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8873
+hisse.net###ad_global_above_footer
+hisse.net###ad_thread_first_post_content
+hisse.net###ad_thread_last_post_content
+
+! https://www.reddit.com/r/uBlockOrigin/comments/o1tqvu/adblock_detected/
+nusantaraproject.my.id##+js(nosiif, visibility, 1000)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/mpz3rs/
+crazyblog.in##+js(nosiif, visibility, 1000)
+crazyblog.in##+js(aopr, app_vars.force_disable_adblock)
+crazyblog.in##+js(nowoif)
+crazyblog.in##+js(set, blurred, false)
+cblink.crazyblog.in##.banner
+crazyblog.in##.floating-banner
+crazyblog.in##.box-main > div > p
+crazyblog.in,studyuo.com##iframe[width="300"]
+crazyblog.in,studyuo.com##div[id*="_"][style^="min-width"]
+*$script,3p,denyallow=ampproject.org|google.com|gstatic.com|recaptcha.net,domain=crazyblog.in
+
+! https://www.reddit.com/r/uBlockOrigin/comments/mpz3rs/
+gtlink.co##+js(aopr, app_vars.force_disable_adblock)
+gtlink.co##+js(set, blurred, false)
+gtlink.co##.banner-inner
+*$frame,denyallow=google.com,domain=gtlink.co
+*$script,3p,denyallow=cloudflare.net|google.com|gstatic.com|jsdelivr.net|recaptcha.net,domain=gtlink.co
+||xdowl0adxd0wnloadx.com^
+! okrzone.com/verify/?OuQR
+okrzone.com##+js(aeld, click, _blank)
+link.tokenoto.com##+js(set, blurred, false)
+||cugiphepty.com^$popup
+
+! https://github.com/uBlockOrigin/uAssets/issues/8879
+cutearn.net##+js(aopr, app_vars.force_disable_adblock)
+cutearn.net##+js(aopr, open)
+cutearn.net##+js(set, blurred, false)
+cutearn.net##section.short
+cutearn.net##[src^="https://i.ibb.co/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/17027
+porntn.com##+js(set, flashvars.protect_block, '')
+porntn.com#@#.banner_ad
+porntn.com##^script[data-cfasync]:has-text(0x)
+porntn.com##+js(acs, decodeURIComponent, 0x)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80436
+gdr-online.com##+js(set, isAdsLoaded, true)
+gdr-online.com##.adv_barra_alto
+
+! galaxycrypto. net detection
+galaxycrypto.net##+js(acs, eval, replace)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80348
+serieskao.tv##pp
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80548
+atakanyavuz.com##+js(aost, String.prototype.charCodeAt, ai_)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/mrmtgb/new_antiadblocker_stuff/
+gadgetguideonline.com##+js(aost, String.prototype.charCodeAt, ai_)
+gadgetguideonline.com##.ai-track
+
+! https://forums.lanik.us/viewtopic.php?p=159578#p159578
+@@||imsolo.pro^$ghide
+imsolo.pro##.ads-main
+imsolo.pro##.center.spacing.text
+
+! https://www.reddit.com/r/uBlockOrigin/comments/msloft/alright_ubo_do_your_thing_danish_website_link_in/
+mmm.dk##+js(set, adblockerAlert, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8907
+rshrt.com##+js(aopr, app_vars.force_disable_adblock)
+rshrt.com##+js(set, blurred, false)
+rshrt.com###headlineatas
+
+! https://www.reddit.com/r/uBlockOrigin/comments/msoe9k/adblock_detect_update_and_domain_continuously/
+! https://github.com/uBlockOrigin/uAssets/issues/13169
+rtxkeeda.com##+js(nosiif, _0x)
+@@*$ghide,domain=rtxkeeda.com
+@@||googlesyndication.com/pagead/$script,domain=rtxkeeda.com
+@@*$image,domain=rtxkeeda.com
+@@||a2zapk.com^$frame,script,xhr,domain=rtxkeeda.com
+rtxkeeda.com##ins.adsbygoogle
+rtxkeeda.com##div[style="background:#ededed;"]
+rtxkeeda.com###galax2
+||mobileapps-v-download.com^
+@@||js.mobileapps-v-download.com/$script,domain=rtxkeeda.com
+rtxkeeda.com###vipada
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80714
+samfw.com##[href^="https://samfw.com/clicks/"]
+samfw.com##[href^="https://samfw.com/link/"]
+||i.imgur.com^$domain=samfw.com
+samfw.com##+js(acs, jQuery, banner)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8908
+lewdstars.com##.ads-muted-control
+lewdstars.com##.widget_custom_html
+
+! https://github.com/uBlockOrigin/uAssets/issues/10543
+romadd.com##+js(no-fetch-if, googlesyndication)
+romadd.com##+js(nano-sib, download)
+@@||romadd.com^$ghide
+romadd.com##ins.adsbygoogle
+romadd.com##.ads
+romadd.com##.widget_custom_html
+romadd.com###floating_ads_bottom_textcss_container
+
+! https://www.reddit.com/r/uBlockOrigin/comments/mtpag6/adblocker_detected_on_httpselitemacx86com/
+elitemacx86.com##+js(acs, $, samAdBlockAction)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8915
+||biguz.net/vast$xhr,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/m1gkn7/how_can_i_block_ads_on_this_site/gv49pxs/
+therootdroid.com##+js(aost, String.prototype.charCodeAt, ai_)
+therootdroid.com###wpsafe-generate:style(display: block !important)
+therootdroid.com###wpsafe-link:style(display: block !important)
+therootdroid.com###wpsafe-wait1
+therootdroid.com###wpsafe-wait2
+
+! extratorrents. it popups
+extratorrents.*##+js(aopw, adcashMacros)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80917
+pythonmatplotlibtips.blogspot.com##+js(acs, addEventListener, nextFunction)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80929
+hardcoregames.ca##+js(nostif, css_class.show)
+hardcoregames.ca###custom_html-46
+
+! https://github.com/uBlockOrigin/uAssets/issues/8929
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=10play.com.au
+10play.com.au##.content__ad__content
+! https://github.com/uBlockOrigin/uAssets/issues/14142
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$xhr,domain=10play.com.au
+@@||global.ssl.fastly.net^$domain=10play.com.au
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,domain=10play.com.au
+@@||pubads.g.doubleclick.net/ondemand/hls/content/*/streams$xhr,domain=10play.com.au
+10play.com.au##+js(m3u-prune, /^https?:\/\/redirector\.googlevideo\.com.*/, /.*m3u8/)
+10play.com.au##+js(json-prune, cuepoints, cuepoints.[].start cuepoints.[].end cuepoints.[].start_float cuepoints.[].end_float)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80945
+||sered.net^$3p
+||grab.tc^$3p
+||ad-doge.com^$3p
+||addoge.cc^$3p
+||clicksgenie.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10378
+||webmonetiser.com^$3p
+
+! sabishare. com ads
+##[href^="luvaihoo.com"]
+||hallway.netnaija.app/deliver.1.5.js$script,3p
+sabishare.com##.cmp-roll
+
+! https://github.com/uBlockOrigin/uAssets/issues/10397
+freeiphone.fr,mobiletrip.net,safemodapk.com,threezly.com,truyenbanquyen.com,veganinja.hu##+js(acs, decodeURIComponent, ai_)
+ibooks.to##+js(acs, String.fromCharCode, ai_)
+
+! muztext.com auto redirect
+muztext.com##+js(nostif, reachGoal)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8932
+naijaray.com.ng##+js(aost, Math.floor, )
+naijaray.com.ng##[href^="//ashoupsu.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/8555
+hotcleaner.com##+js(aopr, Element.prototype.attachShadow)
+hotcleaner.com##div[class]:matches-css-before(content:/Advertisements/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8940
+pornohans.com###wrapper_content > aside[id]
+pornohans.com##.spc_height_60
+pornohans.com##.vjs-overlay
+pornohans.com###wa_10
+pornohans.com,pornoente.tv,nursexfilme.com,milffabrik.com,pornohirsch.net,pornozebra.com,xhamster-sexvideos.com,pornoschlange.com,xhamsterdeutsch.*,hdpornos.net,gutesexfilme.com,pornotom.com##+js(nostif, Adb)
+@@*$ghide,domain=pornohans.com|pornoente.tv|nursexfilme.com|milffabrik.com|pornohirsch.net|pornozebra.com|xhamster-sexvideos.com|pornoschlange.com|xhamsterdeutsch.*|hdpornos.net|gutesexfilme.com|pornotom.com|beeg-pornos.com|hd-sexfilme.com|meinyouporn.com|tube8-pornos.com|momo-net.com
+||xhamsterdeutsch.*^*.mp4|$media,1p
+xhamster-sexvideos.com##.vjs-overlay
+reifporn.de##+js(aeld, getexoloader)
+||german-porno-deutsch.info/*.gif$image
+german-porno-deutsch.info##[href="/acamateure.html"]
+@@||trafficfabrik.com/mine.js$script,domain=movie.momo-net.com
+momo-net.com##+js(aeld, contextmenu)
+momo-net.com##+js(aopr, document.body.appendChild)
+movie.momo-net.com##iframe:upward([style*="visibility"])
+deutschsex.mobi,1milf.com##+js(aost, Math.floor, randStr)
+1milf.com##.desktop.aside_media.aside
+1milf.com##.desctop.spot
+deutschsex.mobi##.default__interest-block
+
+! https://www.reddit.com/r/uBlockOrigin/comments/mv65dq/cant_see_entire_website_with_ubo_on/
+hardwarezone.com.sg##+js(aopr, SPHMoverlay)
+hardwarezone.com.sg##.ad
+hardwarezone.com.sg###sponsored-links-alt
+hardwarezone.com.sg##.hwz-ad-outstream
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81105
+imagecolorpicker.com##[class^="leftAds-"]
+imagecolorpicker.com##[class^="rightAds-"]
+
+! redwap.me,redwap2.com,redwap3.com occasional popup
+/realize.js$domain=redwap.me|redwap2.com|redwap3.com
+
+! sextgem.com ads
+sextgem.com##div[id][style*="z-index: 999999999;"]
+desitab69.sextgem.com##+js(nowoif)
+xxxtime.sextgem.com##^script[language="javascript"]:has-text(open)
+||xtgem.com/images/influenza/
+||xtgem.com/images/xtvid/
+||sextgem.com^$removeparam=id
+*$popup,domain=sextgem.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/8945
+rethmic.com##+js(nano-sib, _0x)
+
+! bollyholic. icu antiadblock & dev tools detection
+bollyholic.*##+js(nostif, mdpDeBlocker)
+bollyholic.*##+js(aopr, disableDeveloperTools)
+
+! influencersgonewild.com popunder
+influencersgonewild.com##+js(aost, Math.round, onload)
+influencersgonewild.com##.g1-advertisement-inside-grid:upward(li)
+
+! xxxwebdlxxx.top anti-adb, popup
+xxxwebdlxxx.top##a[href^="https://hotdating-near1.com/"]
+*$frame,script,3p,domain=xxxwebdlxxx.top
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81174
+krypto-trend.de###top_adspace
+krypto-trend.de###captcha-adspace
+krypto-trend.de###middle-adspace
+
+! https://github.com/uBlockOrigin/uAssets/issues/8954
+courseboat.com,coursehulu.com##+js(nostif, brave_load_popup)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8955
+fantasyfootballgeek.co.uk##+js(acs, String.fromCharCode, ai_)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81294
+gledajcrtace.xyz###header-wrap-reklama
+gledajcrtace.xyz###HTML8
+
+! https://github.com/uBlockOrigin/uAssets/issues/8958
+ebay.*##.s-item__sep:matches-css(display: none):remove()
+ebay.*##:xpath(//span[(text()='S')]):upward(.s-item)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/mxt57v/javquickcom_adblock_detection/
+javquick.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9823
+lazytranslations.com##+js(aost, String.prototype.charCodeAt, ai_)
+lazytranslations.com##.ad-after-postend
+lazytranslations.com##.lazyt-adlabel
+||interserver.net^$3p
+
+! cat-translator.com,mangauptocats.online ads
+||cat-translator.com/manga/wp-content/uploads*.gif
+||mangauptocats.online/wp-content/uploads/*.gif
+||sbobet333.com^$domain=mangauptocats.online
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81497
+game3rb.com##+js(aeld, DOMContentLoaded, 0x)
+game3rb.com##+js(no-fetch-if, method:HEAD)
+||game3rb.com/sw.js^$script,1p
+game3rb.com##[href^="http://pityhostngco2.xyz/"]
+*$script,3p,denyallow=bootstrapcdn.com|cloudflare.com|cloudfront.net|disqus.com|disquscdn.com|fastlylb.net|googleapis.com|wp.com,domain=game3rb.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81533
+||googletagmanager.com/gtag/js$script,redirect-rule=noopjs,domain=rotana.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/8969
+getpaste.link##+js(set, isAdBlockActive, false)
+
+! unlimitmovies. com
+unlimitmovies.com##+js(aopr, JSON.stringify)
+
+! popups 4movierulz1. me / .co
+4movierulz1.*,filmygod6.*##+js(nowoif)
+4movierulz1.*##[href^="https://api.whatsapp.com/send"]
+kitabmarkaz.xyz##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8981
+@@||flipboard.com/webu/*-contrib-ads*.bundle.js$script,1p
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=flipboard.com
+
+! short-zero.com bab
+short-zero.com##+js(nosiif, visibility, 1000)
+
+! adz7short.space,goldenfaucet.io,croclix.me anti-adb
+@@/viewad.$css,script,domain=adz7short.space|short.croclix.me|short.goldenfaucet.io
+adz7short.space##+js(ra, href, #continue)
+@@||adz7short.space^$ghide
+adz7short.space###banner_slider_right
+adz7short.space,short.croclix.me##.leaderboard
+short.croclix.me##.banner-container
+short.goldenfaucet.io##.rectangles
+||offers4all.net^$frame,3p
+
+
+! https://www.reddit.com/r/uBlockOrigin/comments/n1cats/ads_on_qwant_lite/
+lite.qwant.com##.ad:upward(article.result.web)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81856
+gay4porn.com##+js(set, flashvars.adv_start_html, '')
+gay4porn.com##.exbanner
+gay4porn.com###int-over:remove()
+gay4porn.com###intt-layer:remove()
+/s/s/sum.php
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81867
+charbelnemnom.com##+js(nostif, ai)
+@@||charbelnemnom.com^$ghide
+charbelnemnom.com##ins.adsbygoogle
+charbelnemnom.com##.ezoic-ad
+charbelnemnom.com###custom_html-16
+
+! thotvids.com popups/ads
+thotvids.com##+js(acs, onload)
+thotvids.com##+js(set, flashvars.popunder_url, '')
+thotvids.com##.fade.top.text.fp-logo
+thotvids.com##.fp-brand
+thotvids.com##[href^="https://go.mshago.com"]
+thotvids.com##+js(aeld, click, overlay)
+||thotvids.com/player/html.php$frame
+
+! mizugigurabia.com anti-adb
+mizugigurabia.com##+js(acs, document.addEventListener, google_ad_client)
+
+! py.md popup
+py.md##+js(nano-sib, countdown)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/q5jmsh/anti_ad_block_message_on_ad_shortener/
+gaminplay.com##+js(acs, addEventListener, google_ad_client)
+gaminplay.com##+js(acs, mMcreateCookie)
+gaminplay.com##+js(no-xhr-if, googlesyndication)
+@@||gaminplay.com^$ghide
+gaminplay.com###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+gaminplay.com###yuidea-generate, #yuidea-snp:style(display: block !important;)
+gaminplay.com##.g-recaptcha, iframe[src*="google.com/recaptcha"], #yuidea-btn-before, #yuidea-btn-after:others()
+gaminplay.com###yuidea-snp:others()
+||joinads.me^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/9521
+cubehosting.me##+js(nosiif, visibility, 1000)
+cubehosting.me##+js(noeval-if, _0x)
+cubehosting.me##+js(acs, document.addEventListener, google_ad_client)
+||affilixxl.de^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/82216
+lcpdfr.com##div.ipsMargin_bottom.ipsAreaBackground.ipsPadding\:half
+lcpdfr.com##.adSpacing
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/82331
+rodude.com##+js(acs, onload)
+
+! hds-streaming. tv / site popups
+hds-streaming.*###fakeplayer
+hds-streaming.*##.asgdc
+
+! https://github.com/uBlockOrigin/uAssets/issues/9682
+@@||dubzstreams.com^$ghide
+dubzstreams.com###custom_html-10
+dubzstreams.com##.admania-themead
+dubzstreams.com###custom_html-5
+dubzstreams.com##.stickyfadein.admania_sidebarsticky.widget_admania_sticky_widgets.widget
+dubzstreams.com##.stickyfadeout.widget_admania_sticky_widgets.widget
+dubzstreams.com###admania_sticky_widgets-1 > .admania-widgettit
+dubzstreams.com###admania_sticky_widgets-3 > .admania-widgettit
+dubzstreams.com##div.clpr-emre1
+dubzstreams.com##.aoa_overlay
+dubzstreams.com###id-custom_banner
+#@#.display_ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/9017
+bleepingcomputer.com###bc-home-news-main-wrap > li:has(> a[href$="/deals/"])
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/82339
+! https://github.com/uBlockOrigin/uAssets/issues/15501
+@@||getpaidstock.com^$ghide
+getpaidstock.com##ins.adsbygoogle
+||antiblock.b-cdn.net/banner_ad.png$image,redirect-rule=1x1.gif,domain=getpaidstock.com
+*$frame,redirect-rule=noopframe,domain=getpaidstock.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/10083
+! https://github.com/uBlockOrigin/uAssets/issues/17209
+myabandonware.com##+js(set, canRunAds, true)
+myabandonware.com##+js(nostif, AdBlock)
+myabandonware.com##[href^="/visual/r-"]
+myabandonware.com##.items > .item[id]:not(.itemListGame)
+myabandonware.com##div[id*="myabandonware_leaderboard_btf_"]:upward(div[id])
+myabandonware.com##div[id*="myabandonware_medrec_right_"]:upward(div[id])
+myabandonware.com##[id*="myabandonware_"][id$="tf"]
+myabandonware.com##a[href^="/visual/"]:upward(.menu > div[id])
+myabandonware.com##div:matches-css-after(content:/Ads/)
+myabandonware.com##[onclick*="aff"]
+myabandonware.com##style:has-text(justify-content):remove()
+
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81859
+gayck.com##+js(set, flashvars.adv_pause_html, '')
+
+! https://www.reddit.com/r/uBlockOrigin/comments/n5vt7w/recapcha_obscured_by_1stparty_script_blocks_the/
+short.palmeratv.com##+js(aopr, app_vars.force_disable_adblock)
+short.palmeratv.com##+js(aopr, open)
+short.palmeratv.com##+js(set, blurred, false)
+
+! romhustler.org timer
+romhustler.org##+js(nano-sib, timer.remove)
+romhustler.org##.tower_ad_desktop
+
+! streampourvous. com popups
+streampourvous.com##+js(aopr, LieDetector)
+streampourvous.com##+js(ra, href, #clickfakeplayer)
+frebieesforyou.net##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9023
+upvideo.to##+js(nowoif)
+upvideo.to##+js(nosiif, 0x)
+upvideo.to##+js(nostif, 0x)
+*$xhr,redirect-rule=nooptext,domain=upvideo.to
+upvideo.to##div[style="position: fixed; display: block; width: 100%; height: 100%; inset: 0px; background-color: rgba(0, 0, 0, 0); z-index: 300000;"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/9024
+github.com##[src^="https://spotlights-feed.github.com/spotlights/octoprint/"]:upward(article[class])
+
+! https://github.com/uBlockOrigin/uAssets/issues/9029
+ergasiakanea.eu##+js(noeval-if, deblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9038
+@@||filezipa.com^$ghide
+filezipa.com##ins.adsbygoogle
+filezipa.com##+js(aopr, app_vars.force_disable_adblock)
+filezipa.com##+js(set, blurred, false)
+filezipa.com##+js(aopr, open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9043
+mrunblock.*##+js(acs, decodeURIComponent, atob)
+mrunblock.*###lb-banner
+mrunblock.*##[id^="cookieConsent"]:upward(1)
+mrunblock.*##.alert-dismissible
+
+! https://github.com/uBlockOrigin/uAssets/pull/9044
+addonbiz.com##+js(acs, addEventListener, nextFunction)
+
+! https://github.com/uBlockOrigin/uAssets/pull/9050
+b2bhint.com##+js(aopr, google_jobrunner)
+b2bhint.com##+js(aopr, popupBlocker)
+b2bhint.com##[id^="ad--"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/82841
+@@||alrakoba.net^$ghide
+alrakoba.net##.adsbygoogle:style(position:absolute !important;left:-3000px !important)
+alrakoba.net##.stream-item-widget
+
+! https://github.com/uBlockOrigin/uAssets/issues/16828
+akwam.*##+js(acs, addEventListener, blocker)
+akwam.*,eg-akw.com,khsm.io,xn--mgba7fjn.cc##+js(aopw, afScript)
+akwam.*##+js(nosiif, visibility, 1000)
+akwam.*##.ads
+eg-akw.com,xn--mgba7fjn.cc##+js(aeld, load, 2000)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/n93qlv/ublock_origin_keeps_getting_detected/gxm709u/
+coolsanime.org,toonvideos.me##+js(acs, document.addEventListener, nextFunction)
+||toonvideos.me^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/n99vzj/anyway_to_evade_adblock_detected_on_netpornix/
+netpornix.*##div#responseads:style(display:block !important)
+netpornix.*###videoadsid
+netpornix.*##[href^="https://bit.ly/"]
+netpornix.*##.videoads
+netxwatch.*##+js(aopr, __Y)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/82888
+dz-linkk.com##+js(aopr, app_vars.force_disable_adblock)
+dz-linkk.com##+js(set, blurred, false)
+dz-linkk.com##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/7136
+iqiyi.com##+js(set, Object.prototype.parseXML, noopFunc)
+iqiyi.com##+js(set, Object.prototype.blackscreenDuration, 1)
+iqiyi.com##.black-screen[data-cupid="adblock-blackscreen"]
+m.iqiyi.com##+js(set, Object.prototype.adPlayerId, '')
+iqiyi.com##.iqp-player > iqpdiv[data-cupid="container"] > div[data-adzone][templatetype="common_pause"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/nbf953/please_fix_this_site_to_use_it_with_ubo/
+! https://github.com/uBlockOrigin/uAssets/issues/16678
+@@||simplebits.io^$ghide
+@@||simplebits.io/$script,1p
+*$script,redirect-rule=noopjs,domain=simplebits.io
+*$xhr,redirect-rule=nooptext,domain=simplebits.io
+simplebits.io##.placeholder
+simplebits.io##div[class][style="min-height: 250px; height: 250px;"]
+simplebits.io##div[class][style="min-height: 90px;"]
+simplebits.io##div[class][style="min-height: 60px;"]
+@@||satoshilabs.net^$ghide
+@@||satoshilabs.net/$script,1p
+||satoshilabs.net/sh/ads/$frame
+||simplebits.io/sh/ads/
+||simplebits.io/ads/
+simplebits.io##+js(no-xhr-if, /ads)
+simplebits.io##+js(no-fetch-if, /ads)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/66742
+hayamimi-gunpla.com##+js(acs, document.addEventListener, google_ad_client)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ncbk72/ublock_detected_at_greeleytribunecom/
+||prairiemountainmedia.com^$3p
+||dailycamera.com^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/mih3ss/adblock_detection/
+watchmdh.to##+js(set, flashvars.popunder_url, '')
+watchmdh.to##+js(nostif, innerText, 2000)
+watchmdh.to##+js(acs, addEventListener, -0x)
+watchmdh.to##+js(aopr, decodeURI)
+watchmdh.to##a[style^="position: absolute; inset: 0px;"][target="_blank"]
+watchmdh.to##.sponsor
+
+! https://github.com/easylist/easylist/pull/7875#issuecomment-841782152
+neos-easygames.com,synk-casualgames.com#@##ad_block
+
+! https://github.com/uBlockOrigin/uAssets/issues/9095
+@@||animedevil.com^$ghide
+||tny.so^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ndv0kb/antiright_click_on_hitproversioncom/
+hitproversion.com##.onp-sl-content:style(display:block !important)
+hitproversion.com##.onp-sl-social-locker
+
+! mavplay. xyz popups
+mavplay.xyz##+js(aeld, , _blank)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9120
+math-drills.com#@#.ad-block
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/83483
+@@||allsmo.com^$ghide
+allsmo.com##[id^="ezoic-pub-ad-placeholder"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/9125
+*$xhr,redirect-rule=nooptext,domain=costumbresmexico.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/83540
+shemalestube.com##+js(nowoif)
+shemalestube.com##.cover:style(background-image: none!important;)
+||shemalestube.com/templates/dark/ads/
+||shemalestube.com/templates/dark/js/pop/
+
+! https://www.reddit.com/r/uBlockOrigin/comments/sz4cn0/gamingbible_detects_the_adblock_little_help/
+gamingbible.co.uk#@#div[class*="margin-Advert"]
+gamingbible.co.uk##div[class$="-margin-Advert"]:style(height:1px !important;width:1px !important;position:absolute !important;left:-3000px !important)
+gamingbible.co.uk##.css-1dgm0zi-Advert
+||adsafeprotected.com/$script,redirect-rule=noopjs,domain=gamingbible.co.uk
+
+! hxfile. co popups
+hxfile.co##a.btn-block
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/83658
+||storage.de.cloud.ovh.net^*/sarsor/avikingdynamic.js$script,3p
+go4kora.com###id-custom_banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/9139
+povaddict.com##.adv-square
+/\.com\/[a-zA-Z]{10}\.js$/$script,1p,domain=povaddict.com
+
+! blog.40ch.net anti-adb
+blog.40ch.net##+js(acs, document.addEventListener, nextFunction)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/83740
+pornissimo.org##+js(set, flashvars.protect_block, '')
+pornissimo.org##.table
+pornissimo.org##.fp-brand
+
+! https://github.com/uBlockOrigin/uAssets/issues/10308
+upfiles.*##+js(aopr, app_vars.force_disable_adblock)
+upfiles.*##+js(set, blurred, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ni5isp/edncom_uses_admiral_adblock_not_blocked_by_ubo/
+edn.com###custom_html-3
+edn.com###custom_html-5
+edn.com###footerAdWrap
+||omeda.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10916
+||youtubex.top^$3p
+||badana.me^
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/83758
+sexywomeninlingerie.com##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+||wafflegirl.com/galleries/banner/$3p
+sexywomeninlingerie.com##[href^="http://join.wearehairy.com/track/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/9146
+baikin.net##+js(aopr, google_jobrunner)
+/wp-content/plugins/simple-adblock-notice-pro/*$script,css
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/83705
+comixzilla.com##+js(acs, document.createElement, 'script')
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/83793
+unsurcoenlasombra.com##+js(aopr, google_jobrunner)
+
+! https://github.com/easylist/easylist/issues/6476#issuecomment-846458414
+watchmovierulz.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9155
+! streamsb_galaxy
+anigogo.net,animepl.xyz,arslanrocky.xyz,cloudemb.com,dlmovies.link,embedsb.com,faptiti.com,fbgo.*,goana.xyz,gomovizplay.com,hlsplayer.xyz,javplaya.com,oxl.one,playersb.com,sbanh.com,sbbrisk.com,sbchill.com,sbchip.*,sbcloud1.com,sbembed.com,sbembed1.com,sbembed2.com,sbembed3.com,sbembed4.com,sbfast.com,sbflix.*,sbfull.com,sbhight.com,sblanh.com,sblongvu.com,sbplay.*,sbplay1.com,sbplay2.*,sbplay3.*,sbrity.com,sbrulz.*,sbspeed.com,sbthe.com,sbvideo.*,ssbstream.net,streamsb.*,streamsss.net,subsb.net,tubesb.com,vidmovie.xyz,view345.com,viewsb.com,watchsb.com,xvideostream.net##+js(aopr, __Y)
+anigogo.net,arslanrocky.xyz,cloudemb.com,dlmovies.link,embedsb.com,fbgo.*,gomovizplay.com,hlsplayer.xyz,kinoking.cc,lvturbo.com,oxl.one,playersb.com,sbanh.com,sbasian.pro,sbbrisk.com,sbchill.com,sbchip.*,sbcloud1.com,sbembed.com,sbembed1.com,sbembed2.com,sbembed3.com,sbembed4.com,sbface.com,sbfast.com,sbflix.*,sbfull.com,sbhight.com,sblanh.com,sblona.com,sblongvu.com,sbnet.one,sbplay.*,sbplay1.com,sbplay2.*,sbplay3.*,sbrity.com,sbrulz.*,sbspeed.com,sbthe.com,sbvideo.net,ssbstream.net,streamsb.*,streamsss.net,subsb.net,tubesb.com,vidmovie.xyz,view345.com,viewsb.com,watchsb.com##+js(aopr, mm)
+sbembed1.com,sbvideo.*##+js(aopr, console.clear)
+cloudemb.com##+js(nowoif, !/^\/d\//)
+cloudemb.com##+js(set, console.clear, noopFunc)
+streamsb.*##+js(nowoif)
+sbfull.com,streamsb.*,view345.com##+js(aopr, DoodPop)
+sbembed.com,streamsb.*##body > div[style*="z-index:"]
+sbplay.*,sbplay1.com##+js(set, console.clear, noopFunc)
+oxl.one,sbplay1.com,sbvideo.net##+js(nosiif, 0x)
+sbplay.*##^script:has-text(debugger)
+! https://github.com/uBlockOrigin/uAssets/issues/17141
+cloudemb.com##+js(set, isadb, false)
+||app.adjust.net.in^
+||abusageqh.com^
+||bb5gt41h.cfd^
+||eisasbeau.buzz^
+||linkspoint.xyz/sw.js$script,1p
+||weakermumrespect.com^
+! https://github.com/uBlockOrigin/uAssets/issues/18860
+sbot.cf##[id^="parentframe"]
+sbot.cf##+js(window.open-defuser)
+! https://sbasian.pro/d/ksnf8h4wn05p.html popup
+||sbasian.pro/js/mainpc.js
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/83844
+sharetext.me##+js(set, isAdBlockActive, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/83930
+theblissempire.com##+js(aopr, app_vars.force_disable_adblock)
+theblissempire.com##+js(set, blurred, false)
+theblissempire.com##+js(aopr, open)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/110891
+uploadflix.org##+js(nano-stb, seconds)
+||uploadflix.org/sw.js$xhr,1p
+*$3p,denyallow=bootstrapcdn.com|cloudflare.net|fontawesome.com|hwcdn.net|jquery.com|uploadflix.cyou,domain=uploadflix.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/9195
+kisscartoon.info##.offads
+kisscartoon.info##.countdown
+
+! https://github.com/uBlockOrigin/uAssets/pull/9192#issuecomment-848097239
+||max-adserv.com^$3p
+
+! newsinlevels.com/videosinlevels.com anti-adb
+newsinlevels.com,videosinlevels.com##+js(set, sgpbCanRunAds, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14901
+! https://github.com/uBlockOrigin/uAssets/issues/17991
+knightnoscanlation.com##+js(acs, eval, replace)
+knightnoscanlation.com##.c-sidebar
+
+! https://www.reddit.com/r/uBlockOrigin/comments/nlllo9/popups_getting_through_now/
+m2list.com##+js(nostif, debugger)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/84088
+@@||posttrack.com/$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/9231
+freejav.guru##+js(nostif, disableDeveloperTools)
+freejav.guru##+js(acs, eval, replace)
+
+! sexuhot.com popup, redirect on back, ads
+sexuhot.com##+js(aopw, atOptions)
+sexuhot.com##+js(aopr, history.replaceState)
+sexuhot.com###overlay > a
+sexuhot.com###abox
+||sexufly.com^$frame,domain=sexuhot.com
+
+! pussy.org popup
+pussy.org##+js(nowoif)
+||pussy.org^$frame,1p
+
+! analsexstars.com popup
+analsexstars.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9237
+! https://github.com/uBlockOrigin/uAssets/issues/17085
+*$xhr,redirect-rule=nooptext,domain=chiemgau24.de|ovb-online.de|rosenheim24.de|bgland24.de|innsalzach24.de|mangfall24.de|wasserburg24.de
+@@*$ghide,domain=chiemgau24.de|ovb-online.de|rosenheim24.de|bgland24.de|innsalzach24.de|mangfall24.de|wasserburg24.de
+!pc-offer$script,domain=bgland24.de|chiemgau24.de|innsalzach24.de|mangfall24.de|rosenheim24.de|wasserburg24.de
+bgland24.de,chiemgau24.de,innsalzach24.de,mangfall24.de,rosenheim24.de,wasserburg24.de##.wv_story_el_cleverPushWidget
+bgland24.de,chiemgau24.de,innsalzach24.de,mangfall24.de,rosenheim24.de,wasserburg24.de##.id-Recommendation
+bgland24.de,chiemgau24.de,innsalzach24.de,mangfall24.de,rosenheim24.de,wasserburg24.de##.wv_story_el_pinpoll
+
+! https://www.reddit.com/r/uBlockOrigin/comments/nnesag/some_anime_popup_window_on_this_website/
+||2target.net^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/84282
+*$script,3p,denyallow=facebook.net|fbcdn.net,domain=sukidesuost.info
+sukidesuost.info###custom_html-23
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/84306
+||iclickcdn.com^$script,redirect-rule=noopjs,domain=gifans.com
+gifans.com,shortlink.prz.pw##+js(nosiif, visibility, 1000)
+gifans.com##+js(acs, document.cookie, :visible)
+gifans.com###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+gifans.com##div[id^="wpsafe-wait"]
+*$image,3p,domain=shortlink.prz.pw
+@@||shortlink.prz.pw^$ghide
+shortlink.prz.pw##+js(aopr, app_vars.force_disable_adblock)
+shortlink.prz.pw##+js(set, blurred, false)
+shortlink.prz.pw##+js(aopr, open)
+shortlink.prz.pw##.banner
+
+! https://www.reddit.com/r/uBlockOrigin/comments/no3oxq/berkleeedu_stop_the_interstitial_ad_hustlepopup/
+berklee.edu##+js(aeld, scroll, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9291
+kpopsea.com##+js(no-fetch-if, adsbygoogle)
+kpopsea.com##+js(aeld, click, preventDefault)
+kpopsea.com##.g-ads-kpop-wrapper
+kpopsea.com##div[style="border: 1px solid black;animation: blink 1s;animation-iteration-count: infinite;"]
+kpopsea.com##.inner-arrow:has-text(#AD)
+kpopsea.com##span:has-text(/AD$/)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/84412
+electricaltechnology.org###stream-item-widget-7
+electricaltechnology.org###stream-item-widget-2
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/84419
+! https://github.com/uBlockOrigin/uAssets/issues/20801
+ezbit.co.in##+js(aopr, adBlockDetected)
+ezbit.co.in##.m-t-75.au-breadcrumb
+ezbit.co.in##div.col-lg-6.col-md-6 > .statistic__item
+ezbit.co.in##div.col-lg-6.col-md-6:nth-of-type(2) > .square6
+||ezbit.co.in/$frame,1p
+||ezbit.co.in/ui/assets/js/honeypot.js
+
+! uniquetutorialsnew.blogspot.com anti-adb
+@@||uniquetutorialsnew.blogspot.com^$ghide
+uniquetutorialsnew.blogspot.com##ins.adsbygoogle
+
+! https://www.reddit.com/r/uBlockOrigin/comments/np7621/why_this_page_detects_ubo/
+theicongenerator.com,zentum.club##+js(nowoif)
+theicongenerator.com,zentum.club##+js(nano-sib, timer)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9333
+foreca.com##main > div > div > div[class]:matches-css(width:350px)
+!#if env_mobile
+foreca.com##main > div > div > div > div[class]:matches-css(min-height:326px)
+foreca.com##main > div > div > div > div > div[class]:matches-css(min-height:326px)
+!#endif
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/84446
+/wp-content/plugins/noti-blocker/*$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/9338
+filmyhitlink.xyz##+js(acs, mMcreateCookie)
+filmyhitlink.xyz##+js(nano-sib, downloadButton)
+filmyhitlink.xyz###sidebar-primary > .widget_custom_html
+filmyhitlink.xyz###sidebar-secondary > .widget_custom_html
+
+! https://github.com/uBlockOrigin/uAssets/issues/9340
+id45.cyou##+js(set, console.clear, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/129120
+cloudrls.com##+js(nowoif)
+javtsunami.com##+js(aeld, getexoloader)
+||javtsunami.com/crimson-unit-$script
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/84615
+descargaspcpro.net##+js(noeval-if, ads)
+descargaspcpro.net###AdSense1
+descargaspcpro.net###HTML90
+descargaspcpro.net##.stickywrap
+
+! https://www.reddit.com/r/uBlockOrigin/comments/nr8yn4/websitesshortners_getting_detected/
+finanzas-vida.com##[href="https://zplayer.live/"]
+finanzas-vida.com##+js(set, blurred, false)
+
+! mettablog.com anti-adb + popups
+mettablog.com##+js(aost, String.prototype.charCodeAt, ai_)
+
+! https://adurly. cc/JQQisi anti adb
+adurly.cc##+js(aopr, app_vars.force_disable_adblock)
+adurly.cc##+js(set, blurred, false)
+
+! ofilmywap. uno / kannadamasti. cc, buyjiocoin. club, filmygod13.in popup
+filmywap.*,ofilmywap.*,kannadamasti.*,buyjiocoin.*,filmygod13.*##+js(nowoif)
+
+! fiedrive. com antiadb
+fiedrive.com##+js(aopr, app_vars.force_disable_adblock)
+
+! verfastdownload .pw popups
+veryfastdownload.pw##+js(aopr, SmartPopunder.make)
+
+! ucanwatch. me ads
+ucanwatch.*##+js(nowoif)
+
+! sharegdrive.co popups
+sharegdrive.com##+js(acs, adcashMacros)
+
+! torrentdownloads.uproxy2.biz popups
+uproxy2.biz##+js(aopr, GetWindowHeight)
+||uproxy2.biz/zpp/*$script,domain=uproxy2.biz
+||uproxy2.biz/helper-js/*$script,1p
+uproxy2.biz##+js(aopr, decodeURIComponent)
+/hy.js$script,domain=uproxy2.biz
+uproxy2.biz##+js(acs, adcashMacros)
+uproxy2.*##+js(aost, Math.floor, )
+*$script,3p,domain=uproxy2.biz
+
+! 18tube. sex ads
+18tube.sex##+js(aeld, getexoloader)
+18tube.sex##.opt
+
+! pix4link.com leave detection
+pix4link.com##+js(set, blurred, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ntpfum/streaming_site_is_detecting_adblocker/
+liveschauen.com##.banner
+liveschauen.com###werbung
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ntq1av/antiadblocker_therokuchannel/
+@@||therokuchannel.roku.com/$xhr,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/nu8tr3/adbloker_enable_and_website_not_accessible/
+nulljungle.com##+js(nostif, innerHTML)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9437
+naturalnews.com##.Header
+||naturalnews.com^$script
+@@||naturalnews.com/*=$script,1p
+@@||naturalnews.com/wp-content/themes/$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/85184
+civilenggforall.com##+js(aopr, blockAdBlock)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/152396
+*$script,3p,denyallow=chatango.com|cloudflare.net|cloudfront.net|disqus.com|disquscdn.com|fastlylb.net,domain=rawkuma.com
+rawkuma.com##+js(aeld, readystatechange, document.removeEventListener)
+rawkuma.com##+js(aeld, mousedown, shown_at)
+.com/btag.min.js|$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/85343
+||sentry-cdn.com^$script,redirect-rule=noopjs,domain=freebitz.xyz
+
+! https://github.com/uBlockOrigin/uAssets/issues/9414
+youwatch.*##[href^="https://minilink.id/"]
+youwatch.*##.sgpb-popup-dialog-main-div-wrapper
+youwatch.*##.sgpb-popup-overlay
+youwatch.*###custom_html-65
+@@||vidomo.xyz^$script,1p
+||vidomo.xyz/assets/js/devtools-detector.js$important
+
+! fxstreet. com/jp/etc. PH
+fxstreet.*##.fxs_leaderboard
+
+! https://www.reddit.com/r/uBlockOrigin/comments/nx6bnc/antiadblock_forogore/
+forogore.com##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9419
+waploaded.com,meetdownload.com##.advert
+waploaded.com,meetdownload.com##a[href*="got-to-be.net"]
+waploaded.com,meetdownload.com##a[href^="https://aeroplaneversion.com/"]
+waploaded.com,meetdownload.com##a[href^="https://suftanzine.com/"]
+waploaded.com##.ad
+waploaded.*##+js(aopr, exoJsPop101)
+waploaded.*##+js(ra, href, .button[href^="javascript"])
+ybm.pw##+js(nowoif)
+! https://github.com/AdguardTeam/AdguardFilters/issues/159869
+meetdownload.com#@#.ad-slot:not(.adsbox):not(.adsbygoogle)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/85507
+@@||motoroids.com^$ghide
+motoroids.com##ins.adsbygoogle
+motoroids.com##div.AM_SINGLE_STORY_BETWEEN_CONTENT_SECOND_PARAGRAPH_RESPONSIVE
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/85564
+nudeselfiespics.com##+js(noeval-if, popUnderStage)
+
+! zlut.com ads, popup
+||zlut.com/_ad$frame
+||zlut.com/jss/external_pop.js
+zlut.com##.add-bottom
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ny1kds/anti_adblock_xproxxx/
+xproxxx.org###custom_html-3
+xproxxx.org###custom_html-5
+
+! nyaa.unblocked.id + unblocked.id ad
+unblocked.id##+js(rmnt, script, push)
+unblocked.id,uproxy2.*,unblock2.*##[href^="https://vpnk.net/"]
+unblocked.id,uproxy2.*,unblock2.*##[onclick*="vpnk.net/?vpn"]
+||searchtv.net/vpn-$doc
+||vpnk.net/?vpn$doc
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/85695
+codingnepalweb.com##+js(rpnt, script, (isAdblock), (false))
+codingnepalweb.com##+js(nano-stb, animation)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/85708
+cozumpark.com##.adv-link
+
+! lordhd. com popups
+lordhd.com##+js(nowoif)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/nys4ha/ublock_detected/
+embed-channel.stream##+js(acs, document.addEventListener, nextFunction)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/nyzxsh/anti_adblock_trivela/
+||juicebarads.com^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/nzdy60/request_antiadblock_dropdownload_aka_dropapk/
+drop.download##+js(acs, document.addEventListener, google_ad_client)
+drop.download##.row > .col-md-8
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/85794
+! https://github.com/uBlockOrigin/uAssets/issues/12709
+! https://github.com/uBlockOrigin/uAssets/issues/18053
+! https://github.com/uBlockOrigin/uAssets/issues/21816
+flightsim.to##+js(acs, fetch, status)
+flightsim.to##+js(acs, document.getElementById, adsblock)
+flightsim.to##+js(nano-sib, timer, 1000, 0.001)
+flightsim.to##+js(no-xhr-if, pub.network)
+@@||flightsim.to^$script,1p
+@@||pub.network/flightsim-to/pubfig.min.js$script,xhr,domain=flightsim.to
+@@||flightsim.to^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/85820
+moviemakeronline.com##+js(nosiif, adsbygoogle)
+moviemakeronline.com##.bbbOwner
+
+! https://github.com/uBlockOrigin/uAssets/pull/10492
+! https://github.com/uBlockOrigin/uAssets/issues/16331
+cinemakottaga.*##+js(no-xhr-if, googlesyndication)
+cinemakottaga.*##+js(aeld, DOMContentLoaded, adsBlocked)
+cinemakottaga.*##+js(acs, document.addEventListener, adsbygoogle)
+*$image,redirect-rule=1x1.gif,domain=cinemakottaga.*
+cinemakottaga.*##+js(nano-sib, timePassed)
+*$3p,script,denyallow=arc.io|cloudflare.com|hcaptcha.com|google.com|gstatic.com|recaptcha.net,domain=cinemakottaga.*
+
+! https://forums.lanik.us/viewtopic.php?p=160319#p160319
+mysql2dumpcrypt.de,xn--stream-oe64e.*###abm
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/85882
+webdeyazilim.com##+js(aost, String.prototype.charCodeAt, ai_)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/85889
+||api.vuukle.com/api/v1/getModal$xhr,3p
+livescore.deccanchronicle.com##.cnitem_add_area_outer
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/85901
+devotag.com##+js(acs, document.addEventListener, nextFunction)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/85182
+paid4.link##+js(nowoif)
+paid4.link##+js(rc, get-link, .ybtn.get-link[target="_blank"], stay)
+paid4.link##+js(set, blurred, false)
+paid4.link##.banner-inner
+paid4.link##.blog-content
+paid4.link##.box > div[align="center"] > .card
+
+! openloading.com popup fakeplayer
+openloading.com##+js(ra, href, #clickfakeplayer)
+openloading.com###clickfakeplayer
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/86069
+codare.fun##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/86128
+! https://github.com/AdguardTeam/AdguardFilters/issues/145872
+! https://github.com/uBlockOrigin/uAssets/issues/19725
+mhdtvworld.*##+js(acs, eval, replace)
+mhdtvworld.*##+js(no-xhr-if, /ads|doubleclick/)
+mhdtvworld.*##+js(aost, document.getElementsByTagName, adsBlocked)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/o1vy94/httpsexplosivemenucom_anti_adb/
+@@||explosivemenu.com^$ghide
+explosivemenu.com##ins.adsbygoogle
+||explosivemenu.com^$image,redirect-rule=1x1.gif,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/o1z5vm/how_to_remove_popups_after_video_begins/
+serialeonline.biz##+js(nowoif)
+serialeonline.biz###overlay
+alocdn.co##+js(aopr, BetterJsPop)
+alocdn.co##+js(aopr, doSecondPop)
+alocdn.co##+js(nowoif)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/o20dd8/code2careorg/
+@@||code2care.org^$ghide
+code2care.org##ins.adsbygoogle
+code2care.org##.right-content
+
+! https://www.reddit.com/r/uBlockOrigin/comments/o23c1m/allwpworldcom_adblock_detected/
+allwpworld.com##+js(nano-sib, timeleft)
+allwpworld.com##+js(ra, disabled, input[id="button1"][class="btn btn-primary"][disabled])
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/86171
+wgod.co##+js(acs, $, test)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/o3h3u4/ublock_does_not_prevent_popups_in_new_window/
+pajalusta.club##+js(nowoif)
+pajalusta.club##div[style="position: fixed; display: block; width: 100%; height: 100%; inset: 0px; background-color: rgba(0, 0, 0, 0); z-index: 300000;"]
+||pajalusta.club/cdn-cgi/trace^$xhr
+serialeonlinesubtitrate.ro###text-6
+||filmeserialehd.biz^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/9443
+@@/wp-content/plugins/dh-new-anti-adblocker$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/86270
+||javhd.icu/ads/
+
+! https://www.reddit.com/r/uBlockOrigin/comments/o44xwg/adblock_detected/
+lavanguardia.com##+js(aeld, error)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/86360
+imeteo.sk##+js(aeld, scroll, detect)
+imeteo.sk##.page-container__ad-container
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/86371
+sixsave.com##+js(no-fetch-if, method:HEAD)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/o4vs5b/adblock_shown_on_url/
+fluttercampus.com##.widget > .card
+fluttercampus.com##div[id^="ezoic-pub-ad-"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/86458
+freebulksmsonline.com##+js(aost, String.prototype.charCodeAt, ai_)
+
+! https://forums.lanik.us/viewtopic.php?p=160442#p160442
+@@||univers-simu.com^$ghide
+univers-simu.com##.adsbygoogle:style(max-height: 1px !important;)
+univers-simu.com###tie-block_702
+univers-simu.com##.\35 f283c41912bf.widget.container-wrapper
+univers-simu.com###stream-item-widget-6
+univers-simu.com###stream-item-widget-3
+
+! https://github.com/uBlockOrigin/uAssets/issues/9455
+kelasexcel.id##div.secret:style(display:block !important)
+kelasexcel.id##.secret-share
+
+! https://github.com/uBlockOrigin/uAssets/issues/9456
+tutflix.org##+js(acs, $, test)
+@@||tutflix.org^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/86555
+pussy-hub.com##+js(aeld, click, popundr)
+||pussy-hub.com/*/stat1_$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/o6d0vs/how_to_stop_websites_from_detecting_ublock/
+@@||themosvagas.com.br^$ghide
+themosvagas.com.br##ins.adsbygoogle
+themosvagas.com.br##.ads300x600
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/86632
+youtubemp3donusturucu.net##+js(aeld, click, t(a))
+
+! https://www.reddit.com/r/uBlockOrigin/comments/o6r1af/frustrating_adblock_detection_on_novelmultiverse/
+novelmultiverse.com##+js(nostif, disableDeveloperTools)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10216
+! https://github.com/uBlockOrigin/uAssets/issues/14292
+! https://github.com/uBlockOrigin/uAssets/issues/14392
+! https://github.com/uBlockOrigin/uAssets/issues/18115
+! https://github.com/uBlockOrigin/uAssets/issues/19268
+maxstream.video,maxlinks.online##+js(nostif, alert)
+maxstream.video,maxlinks.online##+js(nano-stb, .fadeIn(), 3000)
+maxstream.video,maxlinks.online##+js(nowoif)
+@@*$script,1p,domain=maxstream.video|maxlinks.online
+@@||linkonclick.com/*/display.php$script,frame,domain=maxstream.video|maxlinks.online
+@@||ads.host-cdn.net/*.js|$script,domain=maxstream.video|maxlinks.online
+host-cdn.net^$image,redirect-rule=32x32.png,domain=maxstream.video|maxlinks.online
+maxstream.video,maxlinks.online###adsads:style(height: 9px !important;)
+maxstream.video,maxlinks.online##h1:has-text(/adblock|supporter/)
+! https://www.reddit.com/r/uBlockOrigin/comments/12q3g7l/
+/*.php$doc,domain=maxstream.video|maxlinks.online
+! maxstream.video,maxlinks.online##^responseheader(location)
+! https://github.com/uBlockOrigin/uAssets/issues/15556
+! https://forums.lanik.us/viewtopic.php?t=48097-uprot-net
+@@||uprot.net^$ghide
+uprot.net##*[style="display:none;"]:style(display:block !important)
+! https://www.reddit.com/r/uBlockOrigin/comments/142t4fx/
+@@||ads.host-cdn.net/ads2.js$script,domain=maxstream.video|maxlinks.online|uprot.net
+||ragsbxhchr.xyz^
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/86746
+videoseyred.in##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/86812
+listendata.com##+js(acs, onload)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/86837
+spleaks.org##+js(acs, $, test)
+
+! antiblock.org sites
+ads-ti9ni4.blogspot.com,bouamra.blogspot.com,cintateknologi.com,este-walks.net,funnymadworld.blogspot.com,gfilex.blogspot.com,intest.tv,irasutoya.blogspot.com,laurasia.info,pramejarab.blogspot.com,thelibrarydigital.blogspot.com,tienganhedu.com,tienichdienthoai.net,xbox360torrent.com,xn--k9ja7fb0161b5jtgfm.jp##+js(acs, document.addEventListener, google_ad_client)
+www-daftarharga.blogspot.com##+js(nostif, nextFunction)
+www-daftarharga.blogspot.com##+js(nowoif)
+www-daftarharga.blogspot.com##+js(aeld, popstate)
+www-daftarharga.blogspot.com##+js(aeld, , focus)
+xbox360torrent.com##+js(nowoif)
+
+! arenaboard. xyz popups
+arenaboard.xyz##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/86901
+porno-japones.top##+js(acs, document.addEventListener, adsbygoogle)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/86910
+aimasummd.blog.fc2.com,dokuo666.blog98.fc2.com,metamani.blog15.fc2.com,newssokuhou666.blog.fc2.com,touhoudougamatome.blog.fc2.com,xn--k9ja7fb0161b5jtgfm.jp,youkaiwatch2345.blog.fc2.com##+js(acs, document.addEventListener, google_ad_client)
+newssokuhou666.blog.fc2.com,youkaiwatch2345.blog.fc2.com##^script:has-text(google_ad_client)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/o8wr0g/antiadblock_ygoprodeckcom/
+ygoprodeck.com###deck-content-ad
+ygoprodeck.com##[id^="frontpage-ad-"]
+ygoprodeck.com##[id^="front-ad-"]
+
+! kabegamipuloh.web.app/kabegamisiji.web.app/urakamiblogjp.blogspot.com => mysafe.stisda.ac.id/link.technics-goods.info fake buttons, anti adb
+*$script,3p,denyallow=bootstrapcdn.com|google.com|hwcdn.net|jquery.com,domain=kabegamipuloh.web.app
+blogspot.com,web.app##img[onclick="kemana()"]
+link.technics-goods.info,mysafe.stisda.ac.id##+js(acs, document.addEventListener, google_ad_client)
+link.technics-goods.info,mysafe.stisda.ac.id##.text-center > h3
+blogspot.com###fixedban
+ngprame.blogspot.com###AdsRyanAH
+ngprame.blogspot.com###tombol
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/86998
+archpaper.com##+js(acs, fetch, result)
+archpaper.com##.an-ads
+
+! tripadvisor.jp, tripadvisor.com etc. placeholder
+tripadvisor.*###component_2 > div[class^="_"]:has(> div > div[class^="iab_"][style="min-height:90px"])
+tripadvisor.*##.ui_container > div[class] > div[class^="_"]:has(> .iab_medRec:only-child)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/87032
+javfull.pro##.happy-sidebar
+javfull.pro##.SC_TBlock
+
+! https://github.com/uBlockOrigin/uAssets/issues/4902#issuecomment-869970764
+nation.africa##+js(aopr, evolokParams.adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/721
+techpowerup.com##body:not([data-template]) a[rel="nofollow"][href^="/reviyuu/b784/"]:style(pointer-events: none !important;)
+techpowerup.com##body:not([data-template]) a[rel*="nofollow"][target="_blank"][href$="er/images/gmchjhj.png"]
+||www.techpowerup.com/reviyuu/$image,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/87127
+||delivery.sexyxxx.biz^
+
+! https://github.com/uBlockOrigin/uAssets/issues/9621
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$xhr,redirect-rule,domain=carousell.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/9515
+unblocknow.*##.adstg
+unblocknow.*##.alert
+unblocknow.*###cookieConsentVPN666
+
+! https://github.com/uBlockOrigin/uAssets/issues/9528
+veoplanet.com##+js(ra, type, [src*="SPOT"], asap stay)
+veoplanet.com##^source[src*="SPOT"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/87411
+link.asiaon.top##+js(aopr, app_vars.force_disable_adblock)
+link.asiaon.top##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9534
+bestgamehack.top,hackofgame.com##+js(aopr, open)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/odfs9m/is_there_a_way_to_whitelist_a_site_from_specific/
+193.124.191.200##+js(acs, eval, replace)
+
+! faptube.xyz popup
+faptube.xyz##+js(acs, Math, _0x)
+faptube.xyz##+js(aopr, popns)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/87538
+go.gets4link.com##+js(rc, get-link, .btn-success.get-link[target="_blank"], stay)
+go.gets4link.com##+js(nowoif)
+go.gets4link.com##+js(set, blurred, false)
+go.gets4link.com##.blog-item
+go.gets4link.com##.banner
+go.gets4link.com##.mx-auto > center
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/87660
+mangalek.com##+js(acs, String.fromCharCode, decodeURIComponent)
+*$script,3p,denyallow=cloudflare.com|mangarc.com,domain=mangalek.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/9546
+trzpro.com##+js(nano-sib, counter--)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/87638
+download.sharenulled.net##+js(aopr, app_vars.force_disable_adblock)
+download.sharenulled.net##+js(set, blurred, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/of8b31/golinuxcloudcom_has_big_rectangles_where_ads/
+golinuxcloud.com##.golin-adlabel:upward([class^="golin-content"])
+golinuxcloud.com##.adtag_250
+golinuxcloud.com##.adtag_600
+
+! silenthub. net anti adb
+@@||silenthub.net^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/pull/9556
+justin.mp3quack.lol##+js(aeld, click, open)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ofkeym/how_do_i_disable_block_detection_in_this_site/
+||sentry-cdn.com^$script,redirect-rule=noopjs,domain=proinfinity.fun
+||proinfinity.fun/*.html$frame,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/87862
+lightnovelpdf.com##+js(aopr, adsBlocked)
+lightnovelpdf.com##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/87855
+comandotorrentshds.org##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/87904
+*$script,3p,denyallow=cloudflare.net|jsdelivr.net|sc.gl|unpkg.com,domain=hitprn.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/9585
+openculture.com##+js(nosiif, daadb)
+openculture.com##.no-framearound_ad_in_post
+
+! celebwhore.com,sexcams-24.com,webcamvau.com ads,popunder
+celebwhore.com,sexcams-24.com##+js(set, flashvars.popunder_url, '')
+sexcams-24.com##+js(set, flashvars.protect_block, '')
+webcamvau.com##+js(set, flashvars.adv_pre_vast, '')
+celebwhore.com,sexcams-24.com##.table
+||wmpics.pics^$domain=sexcams-24.com|webcamvau.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/58354
+zedge.net##+js(nano-sib, (i-1))
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/88067
+zetporn.com##+js(aopr, ExoLoader.serve)
+zetporn.com##+js(acs, addEventListener, -0x)
+zetporn.com##.aside-itempage-col
+/\.com\/[A-Za-z]{9,}\/[A-Za-z]{9,}\.js$/$script,1p,domain=zetporn.com
+||zetporn.com/*/custom_vast/$xhr
+||eighing.space^$3p
+*$script,3p,denyallow=googleapis.com,domain=zetporn.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ohvw2n/adblock_detected_on_blackenterprisecom/
+blackenterprise.com##.penci-sidebar-widgets.penci-sticky-sidebar.widget-area-1.widget-area > .theiaStickySidebar
+blackenterprise.com##.hdrbanart
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/88018
+! https://github.com/AdguardTeam/AdguardFilters/issues/97742
+hog.*##.content__info--vis
+hog.*##.content__top
+hog.*##.player-block__line
+hog.*##.player-block__square
+hog.*##.player__line
+hog.*##.player__side
+hog.*##.related-view > div.title--sm
+*$script,3p,denyallow=cloudflare.com|gcdn.co|google.com|gstatic.com|videocdn.name,domain=hog.*
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ohygvs/
+!#if env_mobile
+||m.youtube.com/*/ad.js$script
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/9590
+keepvid.pw##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/85982
+! https://www.reddit.com/r/uBlockOrigin/comments/oiyor7/help_with_animes_website_anti_adblock/
+@@||blogdatecnologia.net^$ghide
+@@||diariodecasamento.com^$ghide
+@@||modaestiloeafins.com^$ghide
+@@||portalmundocurioso.com^$ghide
+@@||receitasabores.com^$ghide
+@@||turismoeviagem.com^$ghide
+blogdatecnologia.net,diariodecasamento.com,eusaudavel.net,modaestiloeafins.com,portalmundocurioso.com,receitasabores.com,turismoeviagem.com##+js(ra, class, div#player)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/oivtpz/nsfw_fuqercom_has_placeholder_banner_ads/h4y0k00/
+justcastingporn.com,justfamilyporn.com##+js(acs, document.createElement, _htas)
+
+! animefenix. com popups
+animefenix.com##+js(aopr, decodeURI)
+animefenix.com##+js(aopr, mm)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9596
+@@||smallseo.tools^$ghide
+smallseo.tools##.category_box > .col-md-6 > p
+smallseo.tools##.category_box > p
+smallseo.tools##.sidebar_adds
+smallseo.tools##ins.adsbygoogle
+smallseo.tools##.text-center.col-md-8 > p
+smallseo.tools##[href^="https://grammarchecker.io/grammarly"]
+smallseo.tools##.border.p25.tracktool_banner .text-center > p
+
+! https://github.com/uBlockOrigin/uAssets/issues/9598
+itsguider.com##+js(aeld, load, nextFunction)
+@@||itsguider.com^$ghide
+*$script,3p,denyallow=cloudflare.com|google.com|gstatic.com,domain=itsguider.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/om7dl0/how_to_get_around_adblock_detection_on_this_site/
+surfsees.com##+js(noeval-if, deblocker)
+surfsees.com##+js(aeld, DOMContentLoaded, deblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9601
+viserve.com##^responseheader(location)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9606
+@@||leaklinks.com^$script,1p
+*.gif$domain=leaklinks.com,image
+
+! https://www.reddit.com/r/uBlockOrigin/comments/on98rw/dynamic_adblocking_on_lowendtalkcom/
+||lowendbox.com^$3p
+||lowendbox.com/media/banner/$frame
+lowendbox.com##a[href][rel=noreferrer] > img[height="250"][width="300"]
+lowendbox.com##[href="https://vpsdime.com/"]
+lowendbox.com##iframe
+lowendbox.com##div.block:has([id^="bsa"])
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/88394
+*$script,3p,denyallow=cloudflare.com,domain=reddit.tube
+
+! https://www.reddit.com/r/uBlockOrigin/comments/oovdng/anti_adblocker_on_nbc_olympics_streaming_website/
+nbcolympics.com##+js(set, adblockDetect, noopFunc)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/opnzoj/quartz_needs_cosmetic_filters_qzcom/
+qz.com##.e76xF.bJlt-:style(padding-top:0px !important)
+qz.com##.article-content-ad
+qz.com###engage-1
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/88962
+xanimehub.com##+js(nosiif, visibility, 1000)
+
+! crackevil.com anti adb
+crackevil.com##+js(acs, mMcreateCookie)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9633
+online-fix.me##+js(nostif, /width|innerHTML/)
+
+! https://github.com/bogachenko/fuckfuckadblock/issues/213
+buydekhke.com##+js(aost, String.prototype.charCodeAt, ai_)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9638
+mylinkconverter.com##a[href^="https://go.nordvpn.net/aff"] > img
+
+! https://github.com/orgs/uBlockOrigin/teams/ublock-filters-volunteers/discussions/356
+asyadrama.com,bitcoinegypt.news,citychilli.com,talkjarvis.com##+js(nostif, css_class.show)
+cardiagn.com,routech.ro##+js(acs, eval, replace)
+privatemoviez.*##+js(aeld, DOMContentLoaded, adsBlocked)
+privatemoviez.*##+js(nostif, magnificPopup)
+routech.ro##+js(nostif, blur)
+! https://github.com/uBlockOrigin/uAssets/issues/10944
+routech.ro##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9650
+msn.cn##msft-article[id^="native_ad_nativead"]
+msn.cn##.eastday-post-article-container
+
+! https://www.reddit.com/r/uBlockOrigin/comments/oso9hl/adblock_detected/
+@@||club-opel.com^$ghide
+club-opel.com##.side_ad_left_160
+club-opel.com##.side_ad_right_160
+club-opel.com##ins.adsbygoogle
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/89242
+||nothingtoxic.com/aff/chaturbate/
+||painaltube.com/min/747b35c9/painaltube/p/
+||painaltube.com/widget/chaturbate_cam.php?
+painaltube.com##.widget > div.widget
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/89471
+javsex.to##+js(aeld, DOMContentLoaded, adsBlocked)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/otw7nq/adblock_detected/h6zftgn/
+@@||seir-sanduk.com/$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10128
+trueachievements.com,truesteamachievements.com,truetrophies.com##body:style(padding-top:0px !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9671
+xemphimgi.net##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9674
+techilife.com##+js(acs, jQuery, adblocker)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/89554
+picdollar.com##+js(aopr, loadTool)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9685
+tyfloswiat.pl##^responseheader(location)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ounv20/an_ad_that_keeps_changing_a_number_evades_element/
+/demonoid\.is\/[a-z0-9]{24}\.jpg$/$image,1p,match-case,domain=demonoid.is
+demonoid.is##+js(rpnt, style, visibility: visible !important;, display: none !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9686
+send-anywhere.com##+js(nano-sib, skipOptions)
+send-anywhere.com###transfer-reward-ad
+
+! https://www.reddit.com/r/uBlockOrigin/comments/owcag5/previously_blocked_ads_suddenly_showing_on/
+||brightcove.com/playback/*/*?ad_config_id$removeparam=ad_config_id,xhr,domain=tvnz.co.nz
+||brightcovecdn.com/playback/*/*?ad_config_id$removeparam=ad_config_id,xhr,domain=tvnz.co.nz
+
+! https://www.reddit.com/r/uBlockOrigin/comments/owh9eq/please_help_me_disable_this_anti_adblock/
+@@||pharmacyreviewer.com^$ghide
+@@||pharmacyreviewer.com/forum/js/$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ownid8/cant_block_admiral_ads/
+247sports.com##body:not(.skybox-loaded) .topnav:style(margin-top:0px !important)
+247sports.com##.nav-bar:style(top:0px !important)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/89901
+sextubefun.com###playerOverlay
+sextubefun.com##.promo-sec
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/89898
+samehadaku.*###playVideo:style(display: block !important; visibility: visible !important;)
+samehadaku.*###player_embed:style(display: block !important; visibility: visible !important;)
+samehadaku.*###skipbtn
+samehadaku.*##.box_item_berlangganan_popup
+*$script,3p,denyallow=cloudfront.net|disqus.com|disquscdn.com|fastlylb.net,domain=samehadaku.*
+
+! https://github.com/easylist/easylist/commit/620e7215ca86b6356efeb3cfddbd5021c9c59333#commitcomment-53724188
+||yimg.com/nn/lib/metro/g/sda/$domain=yahoo.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/oz31hz/adblock_detected/
+mediapemersatubangsa.com##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/90217
+*$script,3p,denyallow=gstatic.com,domain=la123movies.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/89900
+! https://github.com/MajkiIT/polish-ads-filter/pull/20116
+pornofan.pl###inplayerADS
+pornofan.pl##.PublicitaDestra
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ozq1mj/audiobookcup_detects_adblock/
+audiobookcup.com##+js(acs, document.addEventListener, google_ad_client)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/p0a2m2/anti_adblock_gigacourse/
+gigacourse.com##+js(acs, eval, replace)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/p0cthm/anti_adblock_superonleech/
+superonleech.biz##+js(acs, document.addEventListener, google_ad_client)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/p0ina2/blocked_video_on_howstuffworkscom/
+||imasdk.googleapis.com/js/sdkloader/ima3.js^$script,redirect-rule=noopjs,domain=howstuffworks.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/8156
+userload.*##+js(aeld, , _0x)
+userload.*##+js(nowoif)
+userload.*##+js(acs, document.getElementById, style.display)
+||userload.*/maroc.js$script,1p
+@@||userload.*/ad-banner.js
+*$image,redirect-rule=1x1.gif,domain=userload.*
+userload.*##div[style="position: fixed; display: block; width: 100%; height: 100%; inset: 0px; background-color: rgba(0, 0, 0, 0); z-index: 300000;"]
+userload.*##.adp-underlay
+||zetadeo.com^$all
+||civadsoo.net^$all
+||binomo.com^$3p
+||0x01n2ptpuz3.com^$all
+
+! https://www.timesnowhindi.com/india/article/kapil-sibbal-dinner-part-is-set-back-for-rahul-gandhi/357896
+! https://github.com/uBlockOrigin/uAssets/issues/3995
+||imasdk.googleapis.com/js/sdkloader/$script,redirect-rule=noopjs,domain=timesnowhindi.com|timesnowmarathi.com|tvid.in
+timesnowhindi.com##.ad-section-three
+timesnowhindi.com##.ad-section-one
+timesnowhindi.com##.right-block > .section-one
+timesnowhindi.com##.add-wrap
+timesnowhindi.com##div.square-adv
+timesnowhindi.com##.right-block > .section-four
+timesnowhindi.com##.ad-panel-wrap
+timesnowhindi.com##.bggrayAd
+timesnowhindi.com##div:not([class]) > div:has(> .atfAdContainer)
+timesnowhindi.com##div:not([class]) > div:empty
+timesnowhindi.com,timesnowmarathi.com,timesofindia.com##+js(no-fetch-if, tvid.in/log)
+timesnowmarathi.com##[class^="section"]:has(> .ad-div)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9746
+isekaisubs.web.id##+js(aost, String.prototype.charCodeAt, ai_)
+isekaisubs.web.id###teaser3
+
+! blasensex.com popunder and ads
+blasensex.com##+js(aopr, jsUnda)
+blasensex.com##.w300
+
+! https://github.com/uBlockOrigin/uAssets/issues/9749
+@@||cheat.hax4you.net^$ghide
+
+! manganelo. tv popups
+manganelo.tv##+js(aopr, JSON.parse)
+
+! movizland. top + players => popups
+movizland.*##+js(aopr, open)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/90816
+upstore.net##+js(nano-sib, countDown, 1150, 0.5)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/p3towt/stv_player_ads/
+player.stv.tv##+js(json-prune, testadtags ad)
+player.stv.tv##div.vjs-cue-point
+||sumologic.stv.tv^
+! https://www.reddit.com/r/uBlockOrigin/comments/10mxa4l/
+||brightcove.com^$removeparam=ad_config_id,domain=player.stv.tv
+
+! https://www.reddit.com/r/uBlockOrigin/comments/p491yv/this_football_livestream_site_keeps_aeking_to/
+60mins.online##+js(acs, document.addEventListener, nextFunction)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/p4ciia/anti_adblocker_on_tvnationme/
+@@||tvnation.me^$ghide
+tvnation.me##.adsbyvli
+tvnation.me##div[style="float:left;text-align:center; width:300px; height:300px"]
+tvnation.me##td[style="width:165px;"]
+tvnation.me##td[style="width:160px;"]
+tvlogy.to##+js(nostif, 0x)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/90990
+javhoho.com##+js(aost, String.prototype.charCodeAt, ai_)
+javhoho.com###text-2
+javhoho.com###text-3
+javhoho.com###text-4
+javhoho.com###text-5
+javhoho.com###text-6
+javhoho.com###text-7
+javhoho.com##a[href="https://50per-cent.com/"]
+
+! udoyoshi.com anti adb
+udoyoshi.com##+js(aost, String.prototype.charCodeAt, ai_)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9759
+vermoegen.org##+js(aopr, document.referrer)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9762
+mobile.de##.sticky-billboard
+m.mobile.de##[data-label="Anzeige"]
+m.mobile.de##div.He1bX
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/91100
+pornsai.com##.table
+
+! ai_front sites
+adrianoluis.net,altevolkstrachten.de,animecast.net,armyranger.com,articletz.com,boxylucha.com,chibchat.com,descargasmix.xyz,duniailkom.com,enciclopediaonline.com,entano.jp,eyalo.com,fosslovers.com,fotopixel.es,hairstylesthatwork.com,hello-e1.com,ichberlin.com,ireez.com,keepkoding.com,latribunadeautomocion.es,linemarlin.com,lumpiastudio.com,miaandme.org,mobility.com.ng,mygardening411.com,newstvonline.com,organismes.org,papagiovannipaoloii.altervista.org,playlists.rocks,relatosdesexo.xxx,rencah.com,riverdesdelatribuna.com.ar,sarkarinaukry.com,seamanmemories.com,socialmediaverve.com,theorie-musik.de,topperpoint.com,travel-the-states.com,vozz.vn##+js(aost, String.prototype.charCodeAt, ai_)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/91105
+@@||user.pnetlab.com/store/advs/check
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/91142
+! https://github.com/AdguardTeam/AdguardFilters/issues/91144
+! https://github.com/AdguardTeam/AdguardFilters/issues/91145
+! https://github.com/AdguardTeam/AdguardFilters/issues/99051
+oosex.net,theteensexy.com,xteensex.net##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+##div#spot-holder.spot-holder[style="display: block;"]
+##.gallery-bns-bl
+/askdrej/*$script,1p
+/askrej/*$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/p54deb/countdown_timer_on_imslporg_for_any_file_download/
+imslp.org##+js(nano-sib, timer)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9771
+cover-addict.com##[href^="https://www.winxdvd.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/9780
+nudes7.com##+js(acs, document.addEventListener, adsbygoogle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9781
+technicalatg.xyz##+js(acs, document.addEventListener, adsbygoogle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9783
+||d1q4kshf6f0axi.cloudfront.net/main/prebid-$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/9787
+apkdoze.com##+js(acs, $, samAdBlockAction)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/91636
+! https://github.com/AdguardTeam/AdguardFilters/issues/116735
+fapnado.*##+js(acs, Math.floor, ExoLoader)
+fapnado.*##.pause-ad-pullup
+fapnado.*##[class^="zpot"]
+||fapnado.*/bump/
+||oi.fapnado.xxx^
+||io.fapnado.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/9800
+pogolinks.*##+js(nostif, showModal)
+pogolinks.*##+js(acs, setTimeout, admc)
+!||cdn.applixir.com^$script,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/9808
+ilifehacks.com##+js(aost, String.prototype.charCodeAt, ai_)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9809
+pclicious.net##+js(acs, quadsOptions)
+pclicious.net###text-3
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/91926
+85tube.com##+js(set, flashvars.protect_block, '')
+85tube.com##+js(set, console.clear, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/93533
+pastebin.com##div[style]:not([class]):not([id]):has(> .adsbyvli:first-child)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9815
+@@||feyorra.top^$ghide
+! https://www.reddit.com/r/uBlockOrigin/comments/xif3tf/
+feyorra.top##.ads
+! https://www.reddit.com/r/uBlockOrigin/comments/120aajw/
+feyorra.top##+js(aeld, load, 'block')
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/91911
+@@||temporarymail.com^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/9817
+gamingsym.in##+js(aost, String.prototype.charCodeAt, ai_)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/p8ta6i/site_https123moviescanet/
+toolsolutions.top,wowstream.top##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/92128
+motherporno.com##+js(set, flashvars.adv_start_html, '')
+motherporno.com##+js(set, flashvars.adv_pause_html, '')
+motherporno.com##+js(set, flashvars.adv_pre_vast, '')
+motherporno.com##+js(set, flashvars.adv_pre_vast_alt, '')
+motherporno.com##.aside
+motherporno.com##.spot
+
+! https://github.com/uBlockOrigin/uAssets/issues/9821
+! https://github.com/uBlockOrigin/uAssets/issues/12665
+@@||v.fwmrm.net/ad/$script,xhr,domain=viafree.*
+
+! watchhouseonline/watchtheofficeonline ads
+watchhouseonline.net,watchtheofficeonline.net##.h_content
+watchhouseonline.net###custom_html-6
+watchtheofficeonline.net###custom_html-7
+watchhouseonline.net,watchtheofficeonline.net##.module_single_ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/9826
+! https://github.com/uBlockOrigin/uAssets/issues/14109
+apkhex.com##+js(set, style, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/92222
+love-stoorey210.net##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/92239
+indiansexstories2.net,issstories.xyz##+js(set, history.pushState, noopFunc)
+indiansexstories2.net##[href^="https://a.videobaba.xyz/geoip/link.php"]
+indiansexstories2.net##[href="https://www.theporndude.com/"]
+||dsccams.com^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67667
+mypornhere.com##+js(acs, document.createElement, loadjscssfile)
+mypornhere.com##.item > [href^="https://www.mrporngeek.com/"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/paugeo/this_website_is_able_to_detect_ublock_origin_and/
+*$xhr,redirect-rule=nooptext,domain=shaalaa.com
+shaalaa.com##div.zxc_wrap
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pbhrqj/antiadblock_on_a_few_sites/
+@@||cyberbunkers.com^$ghide
+cyberbunkers.com##ins.adsbygoogle
+freeiphone.fr##+js(aost, Math, ai_)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9837
+eductin.com##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1905
+*$xhr,removeparam=ad_config_id,domain=telequebec.tv
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/92620
+ear-phone-review.com##+js(nostif, nextFunction)
+@@||ear-phone-review.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/9844
+switch520.com##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9843
+||4u2movie.com^$3p,media,redirect=noopmp3-0.1s
+embed.nana2play.com##.click_block
+embed.nana2play.com##+js(nostif, debugger)
+embed.nana2play.com##+js(nano-stb, load_ads)
+||googles.video^
+||ad.mail.ru^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10454
+! https://github.com/AdguardTeam/AdguardFilters/issues/117364
+ask4movie.*##+js(aopr, mm)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9847
+riotbits.com##+js(aost, String.prototype.charCodeAt, ai_)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pdt0ju/site_opens_ad_in_new_tab_when_clicking_anywhere/
+easymp3converter.com##+js(nowoif, !yt2api)
+easymp3converter.com##body > div[style$="z-index: 300000;"]
+easymp3converter.com##div[id^="waldo-tag"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/5818#issuecomment-907777420
+semprot.com##.semprotnenenmontok_adalah_pujaan_hatiku
+semprot.com##a[href^="/yum.php"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/9845
+||img.topddl.net^$image,domain=nanimex.com
+||nanime.biz^$3p
+nanimex.com##.iklan-tengah
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/92911
+automotur.club##+js(aopr, adssBlocked)
+automotur.club##+js(nowoif)
+automotur.club##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9855
+elahmad.com##+js(nostif, debugger)
+*$image,redirect-rule=1x1.gif,domain=elahmad.com
+*$redirect-rule=noopjs,script,domain=elahmad.com
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=elahmad.com
+elahmad.com###ad_asd
+
+! https://github.com/uBlockOrigin/uAssets/issues/9860
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js^$script,domain=newgames.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/9862
+kendam.com##+js(set, canRunAds, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9861
+1340kbbr.com,gorgeradio.com,kduk.com,kedoam.com,kejoam.com,kelaam.com,khsn1230.com,kjmx.rocks,kloo.com,klooam.com,klykradio.com,kmed.com,kmnt.com,kool991.com,kpnw.com,kppk983.com,krktcountry.com,ktee.com,kwro.com,kxbxfm.com,thevalley.fm##+js(set, google_unique_id, 6)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9863
+convert2mp3.cx##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9867
+isgfrm.com##+js(acs, $, test)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9870
+megawypas.com##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9879
+football256.com##.stream-item
+football256.com###stream-item-widget-5
+
+! https://github.com/uBlockOrigin/uAssets/issues/9864
+www.sainsburys.co.uk#?#li:has(.product-header):has-text(Sponsored)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pf3idx/123movies_detects_ad_blocking/hb4a5hk/
+123moviesto.to###bar-player
+123moviesto.to##.mvic-bmt
+
+! https://github.com/uBlockOrigin/uAssets/issues/9885
+mp3dl.cc##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9892
+tryvaga.com##+js(acs, document.addEventListener, adsBlocked)
+||tryvaga.com/wp-content/themes/retrotube/assets/img/banners$image
+/images/ads.$image,redirect-rule=1x1.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/9893
+wttw.com##+js(set, canRunAds, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9896
+@@||adsuite.io^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/9897
+worldofbin.com##+js(aopr, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9898
+tamilbrahmins.com##+js(acs, $, test)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9899
+@@||panelist.cint.com/assets/embed.min.js^$script,domain=surveyrewardz.com
+@@||panelist.cint.com/$frame,domain=surveyrewardz.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/9887
+! https://github.com/uBlockOrigin/uAssets/issues/12695
+gab.com##div[class] > span[class]:has-text(Sponsored):upward(5)
+gab.com#?#:matches-path(/\/posts/) div[data-comment*="gab-ad"]:has(span[class]:has-text(Sponsored))
+
+! https://github.com/uBlockOrigin/uAssets/pull/9886
+quizlet.com##.StickyAdz
+quizlet.com##+js(rc, has-sidebar-adz|DashboardPage-inner, div[class^="DashboardPage-inner"], stay)
+quizlet.com##+js(rc, hasStickyAd, div.hasStickyAd[class^="SetPage"], stay)
+quizlet.com##+js(rc, has-adz, div.has-adz, stay)
+quizlet.com##+js(nano-stb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9911
+vivo.st##+js(aeld, , preventDefault)
+vivo.st##+js(aeld, click, tabunder)
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=vivo.st
+
+! https://github.com/uBlockOrigin/uAssets/issues/9915
+oneotv.com##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/pull/9913
+*$script,redirect-rule=noopjs,domain=rbxscripts.xyz
+
+! https://github.com/uBlockOrigin/uAssets/pull/9919
+@@/wp-content/plugins/dh-anti-adblocker/*$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/93639
+goldenmanga.top##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/92587
+linkfly.*##+js(set, blurred, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pi9yw0/how_do_i_block_antiblock_on_this_site/
+@@||dinamalar.com^$ghide
+dinamalar.com###taboola-below-article-thumbnails
+dinamalar.com##.topadtxt300
+dinamalar.com##div[style=" color: #999999;font-family: arial;font-size:10px;padding-right: 5px;text-align: right;width:640px;"]
+dinamalar.com##div[style^="width:728px; margin-right:2px; height:90px;"]
+dinamalar.com##.topadtxt728
+dinamalar.com###rladvt
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/93501
+gagaltotal666.my.id##+js(acs, addEventListener, nextFunction)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pid1a3/adblocker_detected/
+@@||animet.tv^$ghide
+animet.tv##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/9929
+owlzo.com##+js(nostif, adblockEnabled)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pifkxt/kumparancom/
+kumparan.com##.adunitContainer:upward([data-qa-id])
+
+! DeBlocker sites
+nulljungle.com,oyuncusoruyor.com,pbarecap.ph,sourds.net,teknobalta.com,tvinternetowa.info##+js(aeld, DOMContentLoaded, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10493
+celebjared.net##[href^="https://minepi.com/"]
+celebjared.net###text-10
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pjq4ez/
+! https://github.com/uBlockOrigin/uAssets/issues/11859
+1tamilmv.*##+js(acs, document.createElement, cookie)
+1tamilmv.*##+js(aopr, mm)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/94160
+beingtek.com##+js(aopr, app_vars.force_disable_adblock)
+beingtek.com##+js(set, blurred, false)
+*$script,3p,denyallow=gstatic.com|recaptcha.net,domain=beingtek.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/10833
+pcbeta.com##+js(aost, document.createElement, make_rand_div)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/94246
+sqlserveregitimleri.com##+js(aeld, DOMContentLoaded, adsBlocked)
+sqlserveregitimleri.com##.ai_widget
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pm5bml/
+*$3p,script,denyallow=cloudflare.com|cloudflare.net|hwcdn.net|jquery.com|fontawesome.com,domain=dekhobd.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/9956
+dsocker1234.blogspot.com##+js(acs, String.prototype.charCodeAt, 'replace')
+dsocker1234.blogspot.com##+js(set, new_config.timedown, 0)
+dsocker1234.blogspot.com##.mb-3.order-last.col-md-3.col-12
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pmm2t4/ad_server_not_blacklisted_in_ubo/
+dottech.org###Azadify
+
+! https://github.com/uBlockOrigin/uAssets/issues/9959
+ttsfree.com##div[id^="ezoic-pub-ad-"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/9961
+stiflersmoms.com##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+||stiflersmoms.com/yes/
+stiflersmoms.com##.line3
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/94492
+@@||wallpapers.ispazio.net^$ghide
+wallpapers.ispazio.net##.box-apples_single_reclame
+ispazio.net##.stream-item
+ispazio.net##.stream-item-widget
+
+! https://github.com/uBlockOrigin/uAssets/issues/9962
+/nb/f_ls.js
+! https://github.com/uBlockOrigin/uAssets/issues/9964
+||bluffyporn.com^$3p
+||quinporn.com^$3p
+###stop_ad
+###stop_ad2
+
+! https://github.com/uBlockOrigin/uAssets/pull/9969
+tutcourse.com##+js(aeld, DOMContentLoaded, adsBlocked)
+tutcourse.com##.text-html
+tutcourse.com##.ai-attributes
+
+! https://github.com/uBlockOrigin/uAssets/issues/9970
+! https://www.reddit.com/r/uBlockOrigin/comments/uf2etv/fmovies_popup_cant_get_rid_of/
+@@||videovard.*^$xhr,1p
+videovard.*##+js(nowoif)
+videovard.*##+js(aeld, mouseup, catch)
+videovard.*##+js(nosiif, 0x)
+videovard.*##.jw-reset.jw-wrapper:style(z-index:2147483647 !important)
+videovard.*###nux > div > div > div[id]
+videovard.*##+js(aopr, FuckAdBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9971
+burakgoc.com##+js(aost, String.prototype.charCodeAt, ai_)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9973
+tvshows4mobile.com##+js(acs, String.prototype.charCodeAt, 'replace')
+tvshows4mobile.com##body:style(visibility:visible !important)
+tvshows4mobile.com###babasbmsgx
+tvshows4mobile.com##[href="http://bit.ly/indianwebseriesv2"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/9975
+alvinreports.com##.stream-item-above-post-content
+||i.imgur.com/D6RfMoV.png^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pnjty1/
+! https://github.com/uBlockOrigin/uAssets/issues/13019
+! https://www.reddit.com/r/uBlockOrigin/comments/x6uri3/
+wcofun.*##+js(nostif, AdBlock)
+wcofun.*##+js(set, isAdBlockActive, false)
+wcofun.*##.anti-ad
+wcofun.*##.reklam_kapat
+
+! https://github.com/uBlockOrigin/uAssets/issues/9996
+q1003.com##+js(nostif, google_ad)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9997
+||adbox.lv^$script,redirect-rule=noop.js,domain=mail.ee
+
+! https://github.com/uBlockOrigin/uAssets/issues/9999
+@@||automodeler.com^$ghide
+automodeler.com##ins.adsbygoogle
+automodeler.com##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/10000
+@@||armorama.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/10002
+xemales.com##+js(aopr, document.dispatchEvent)
+xemales.com##[href="https://myteenwebcam.com/"]
+
+! cluset.com ads, popunder
+cluset.com##+js(set, flashvars.popunder_url, '')
+cluset.com##.item:has(> div.spot)
+cluset.com##.table
+
+! https://github.com/easylist/easylist/issues/9095
+tumblr.com##header[role="banner"] > div > a[href="/docs/en/relevantads"]:upward(3)
+tumblr.com##a[href^="https://www.bonecoin.com/"]
+tumblr.com##.Yc2Sp h1, .Yc2Sp a:style(font-size: 0 !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/poglfc/fcinternewsit_now_has_an_antiadblock/
+||gazzettaobjects.it/rcs_anti-adblocker/$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pokdbp/antiadblock_update_list/hcx4tp3/
+rincondelsazon.com##+js(nano-sib, timercounter)
+tattoosbeauty.com##+js(nano-sib, timercounter)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11621
+! https://github.com/AdguardTeam/AdguardFilters/issues/115524
+||i.imgur.com^$image,domain=myflixer.*
+myflixer.*###gift-middle
+myflixer.*##.premodal.modal
+myflixer.*##.show.modal-backdrop
+
+! https://github.com/uBlockOrigin/uAssets/issues/10014
+apfelpatient.de##+js(nostif, css_class)
+
+! https://github.com/uBlockOrigin/uAssets/pull/10015
+myfirstname.rocks##.xcontent.container
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ppj5hz/adblock_detected_shorturlunityassets4freecom/
+shorturl.unityassets4free.com##+js(aopr, app_vars.force_disable_adblock)
+shorturl.unityassets4free.com##+js(aopr, open)
+shorturl.unityassets4free.com##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10022
+go-mp3.com##+js(nowoif, !clickmp3)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10026
+szexkepek.net##+js(aopr, document.dispatchEvent)
+szexkepek.net##div[style="display:inline;float:left;width:300px;height:250px;margin-left:15px;"]
+szexkepek.net##div[style="width:728px;height:90px;"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/10027
+teensexvideos.me##+js(aopr, ExoLoader)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10028
+wife-home-videos.com##+js(aopr, document.dispatchEvent)
+wife-home-videos.com##.happy-footer
+
+! https://github.com/uBlockOrigin/uAssets/issues/10025
+pornicom.com##+js(aopr, document.dispatchEvent)
+pornicom.com##.thumbs-holder > .thumb_aside
+pornicom.com##.bottom.thumb_aside
+pornicom.com##a[href^="https://s.zlinkm.com/"]
+pornicom.com##a[href^="https://s.zlinkv.com/"]
+pornicom.com##a[href^="https://claring-loccelkin.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/10033
+sexmadeathome.com##+js(aopr, document.dispatchEvent)
+sexmadeathome.com###dclm_modal_content
+sexmadeathome.com##*:style(filter: none !important)
+sexmadeathome.com###dclm_modal_screen
+
+! https://github.com/uBlockOrigin/uAssets/issues/10034
+nylondolls.com##+js(aopr, document.dispatchEvent)
+
+! https://www.sidereel.com/tv-shows/stargate-sg-1/season-6/episode-20
+sidereel.com###netaktion_ad
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/95235
+! https://github.com/uBlockOrigin/uAssets/issues/16617
+techymedies.com##+js(acs, eval, replace)
+techymedies.com###wpsafe-generate,#wpsafe-link,.bt-success:style(display: block !important;)
+techymedies.com###wpsafe-time:upward([id^="wpsafe-wait"])
+disheye.com##+js(no-fetch-if, googlesyndication)
+disheye.com##+js(nano-sib, count, *)
+disheye.com,techymedies.com,techysuccess.com##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10040
+blogpascher.com##+js(nostif, document.location)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/95247
+za.gl##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10041
+readytechflip.com##+js(aeld, DOMContentLoaded, adsBlocked)
+readytechflip.com##.widget_custom_html
+
+! https://github.com/uBlockOrigin/uAssets/issues/10043
+! https://github.com/uBlockOrigin/uAssets/issues/10044
+! https://github.com/uBlockOrigin/uAssets/issues/10045
+onlylesbiantube.com##iframe:upward(.thumb)
+onlylesbiantube.com##.hor_bs
+onlylesbiantube.com##.video_av_bl
+||ag.palmtube.net^
+milforia.com,onlylesbiantube.com,teensfuck.me##+js(aopr, document.dispatchEvent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10048
+notformembersonly.com##+js(aost, _pop)
+notformembersonly.com###post-separate > p > .local-link
+
+! https://www.reddit.com/r/uBlockOrigin/comments/psdqgu/applying_for/
+@@||cdn.jsdelivr.net/npm/*/fuckadblock.min.js$script,3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/psgq8c/unsplash_ads/
+! https://www.reddit.com/r/uBlockOrigin/comments/pufp7v/unsplashcom_sponsored_ads/
+unsplash.com##div[style^="--row-gutter"] > div a[href="/brands"]:upward(div[style^="--row-gutter"] > div)
+unsplash.com##div[data-test="SearchInFeedAd-AffiliateFallback-Container"]
+unsplash.com##div:has(> div[data-affiliates-grid-container])
+
+! https://github.com/uBlockOrigin/uAssets/issues/10053
+surfline.com##+js(nano-stb, adFreePopup, 15000, 0.02)
+surfline.com##+js(set, Object.prototype.isPremium, true)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/95275
+! https://github.com/uBlockOrigin/uAssets/issues/12954
+@@||samuraiscan.com^$ghide
+samuraiscan.com##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10055
+milanworld.net##+js(acs, $, test)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pudoz3/incorrect_cosmetic_filtering_on_chesscom/
+chess.com##.board-layout-ad
+chess.com##body.board-layout.with-und:style(margin-right:0px!important)
+! https://github.com/uBlockOrigin/uAssets/issues/19376
+chess.com##.game-over-ad-legacy-component:style(height: 0 !important)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pulpsp/connatix_player_main_content_being_blocked_again/
+funker530.com##+js(rc, cnx-ad-container|cnx-ad-bid-slot)
+||funker530-ads.azurewebsites.net^
+
+! https://github.com/uBlockOrigin/uAssets/issues/10065
+reset-scans.us##+js(rmnt, script, deblocker)
+
+! https://github.com/uBlockOrigin/uAssets/pull/10067
+uyduportal.net##+js(acs, document.addEventListener, nextFunction)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/purjil/ubo_prevent_video_from_loading_on/
+businessinsider.fr##[id^="bin-ads"]
+
+! https://github.com/uBlockOrigin/uAssets/pull/10073
+@@||cdnqq.net^$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/95766
+testserver.pro##+js(nostif, google)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pw9d5z/submit_solution_to_filter_list/
+novinhastop.com,warddogs.com##+js(aeld, DOMContentLoaded, adsBlocked)
+novinhastop.com##.single-right
+novinhastop.com##.qpsocb
+warddogs.com##.main-money-01
+warddogs.com##.single-aside > div.flex
+
+! https://github.com/uBlockOrigin/uAssets/issues/3462#issuecomment-927450275
+telefullenvivo.com##+js(nostif, nextFunction)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pwii80/ad_list_update/
+lineageos18.com##+js(nowoif, bitcoins-update.blogspot.com)
+gomoviz.*##.mvic-btn
+gomoviz.*##.mobile-btn
+gomoviz.*##div.content-kuss
+embedsb.com,streamlare.com##+js(nosiif, 0x)
+
+! everyeye. it anti adb
+everyeye.it##+js(nostif, adb)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/px06je/ad_was_not_blocked/
+nodejs.libhunt.com##[data-ref="saashub"]:upward(div.feed-item)
+
+! https://github.com/uBlockOrigin/uAssets/pull/10087
+alueviesti.fi,kiuruvesilehti.fi,lempaala.ideapark.fi,olutposti.fi,urjalansanomat.fi##+js(aeld, scroll, innerHeight)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10089
+watashiwasugoidesu.com##.watas-adlabel
+watashiwasugoidesu.com##.watas-bottom-vi
+
+! https://github.com/uBlockOrigin/uAssets/issues/17965
+@@||freereceivesms.com^$script,1p
+freereceivesms.com##+js(nosiif, 0x)
+freereceivesms.com##a[href^="https://www.18sex.org/"]
+! non-bait wp-banners.js
+/wp-content/plugins/wp-banners/js/wp-banners.js
+pobre.*###messageModal
+pobre.*##.generalModal
+||pobre.*/wp-banners.js
+||cloclo60.datacloudmail.ru/public/view/*.mp4|$media,domain=pobre.*,redirect=noopmp3-0.1s
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/93513
+! https://github.com/uBlockOrigin/uAssets/issues/15588
+coinsparty.com##+js(nowoif)
+coinsparty.com##+js(no-xhr-if, wpadmngr)
+coinsparty.com###captchaShortlink:upward(form#coinsparty > div):style(display: block !important;)
+coinsparty.com##form[action$="/links/popad"]:remove()
+coinsparty.com##div[style="position: fixed; display: block; width: 100%; height: 100%; inset: 0px; background-color: rgba(0, 0, 0, 0); z-index: 300000;"]
+||ad4point.nyc3.digitaloceanspaces.com^
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/95993
+@@||windowsbulletin.com^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/96087
+download.baominh.tech##+js(aopr, app_vars.force_disable_adblock)
+download.baominh.tech##+js(set, blurred, false)
+download.baominh.tech##+js(aopr, open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10095
+fifaultimateteam.it##+js(aost, Math, inlineScript)
+fifaultimateteam.it##+js(nowoif)
+||fifaultimateteam.it/*skin$image
+fifaultimateteam.it##.ai_widget
+
+! https://github.com/FastForwardTeam/FastForward/issues/98
+bshopme.site##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/95727
+mikl4forex.com##+js(nano-sib, counter, 2000)
+michaelemad.com##+js(nano-sib, timer)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10102
+reddit.com,reddittorjg6rue252oqsxryoxengawnmo46qy4kyii5wtqnwfj4ooad.onion##.adLinkBar:upward(article[style="z-index: 1;"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/10104
+@@||xtremestream.co^$ghide
+xtremestream.co##.ad:style(height: 20px !important;)
+
+! https://www.blick.ch/schweiz/prozess-um-tote-britin-22-in-lugano-es-gab-keinen-sex-nur-einen-femizid-id16849768.html video ads
+! https://github.com/uBlockOrigin/uAssets/issues/12446
+blick.ch##+js(set, Object.prototype.isAdDisabled, true)
+blick.ch##.fKZLNI:style(width:120% !important)
+
+! https://github.com/adsbypasser/adsbypasser/issues/3708
+bblink.com##+js(set, blurred, false)
+bblink.com##.banner-img-promotion
+
+! donpelis.com popup popunder
+donpelis.com##+js(aost, localStorage, stackDepth:1)
+donpelis.com##+js(ra, onclick, [onclick^="pop"])
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/116299
+javhub.net##+js(aeld, DOMContentLoaded, 0x)
+javhub.net##+js(aopr, cainPopUp)
+javhub.net##+js(aopr, pURL)
+javhub.net##.fel-playclose
+javhub.net##[class^="banner-"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/10788
+novsport.com##+js(refresh-defuser)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10129
+yifysub.net##+js(nano-sib, #timer)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10127
+theloadout.com###nn_bfa_wrapper
+theloadout.com##.legion_primiswrapper
+theloadout.com##header:style(top:0 !important)
+theloadout.com###nn_astro_wrapper:has(.ad)
+theloadout.com##.nn_mobile_mpu_wrapper
+
+! https://www.reddit.com/r/uBlockOrigin/comments/q0grjo/ceylonsshcom_adblock_detected/
+ceylonssh.com##+js(acs, $, adsbygoogle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10148
+bowfile.com##+js(nowoif)
+*$script,redirect-rule=noopjs,domain=bowfile.com
+*$frame,redirect-rule=noopframe,domain=bowfile.com
+||d192r5l88wrng7.cloudfront.net^$frame,redirect=noopframe
+bowfile.com##+js(no-fetch-if, cloudfront.net/?)
+bowfile.com##+js(no-fetch-if, method:HEAD)
+bowfile.com##+js(ra, href|target|data-onclick, a[id="dl"][data-onclick^="window.open"], stay)
+bowfile.com##^script:has-text(FingerprintJS)
+*$xhr,redirect-rule=nooptext,domain=bowfile.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/10147
+javfor.tv##+js(acs, addEventListener, -0x)
+
+! adlinkweb.com,linkbr.xyz,myad.biz,vklinks.com ads, anti-adb, focus detection
+adlinkweb.com,linkbr.xyz##+js(aopr, app_vars.force_disable_adblock)
+linkbr.xyz,myad.biz##+js(set, blurred, false)
+adlinkweb.com,vklinks.com##.banner-inner
+||i.ibb.co^$image,domain=adlinkweb.com
+||ad.lomadee.com^
+||myezads.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10156
+streamingsites.com##.OUTBRAIN:upward(2)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10159
+schoolcheats.net##+js(nosiif, Adblocker)
+schoolcheats.net##+js(nostif, googletag)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/96575
+kisscos.net##+js(acs, addEventListener, -0x)
+kisscos.net##span[id$="related"] > div[id^="container-"]
+kisscos.net##[id$="-overlay"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/96655
+xxxjaa.xyz##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10164
+! https://github.com/AdguardTeam/AdguardFilters/issues/128728
+! https://github.com/AdguardTeam/AdguardFilters/issues/128950
+eplayer.click##+js(aeld, error)
+eplayer.click##+js(aopr, AaDetector)
+ustream.click##+js(acs, RegExp, 'shift')
+ustream.click##^script:has-text('shift')
+ustream.click##^script:has-text(\'shift\')
+
+! https://github.com/uBlockOrigin/uAssets/issues/10408
+1cloudfile.com##+js(aost, Math.floor, _0x)
+*$script,redirect-rule=noopjs,domain=1cloudfile.com
+*$frame,redirect-rule=noopframe,domain=1cloudfile.com
+1cloudfile.com##+js(nowoif)
+1cloudfile.com##+js(nostif, _0x)
+1cloudfile.com##[href^="https://tivenorje.click/"]
+1cloudfile.com##[href^="https://mizalandz.click/"]
+||browsingcontredir.com^
+||mizalandz.click^
+
+! https://github.com/LiCybora/NanoDefenderFirefox/issues/209
+straatosphere.com##+js(nostif, showModal)
+straatosphere.com##html:style(overflow: auto !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/q515et/anti_ad_block_message_on/
+animotvslashz.blogspot.com##+js(aopr, _pop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10170
+liveonsat.com##+js(acs, document.getElementById, 'No')
+liveonsat.com##td[width="100%"][height="50"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/10174
+4everproxy.com##+js(aost, foreverJQ, /document.createElement|stackDepth:2/)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/q6i6sa/please_fix_this_shortener/
+1bitspace.com,mgnet.xyz##+js(acs, addEventListener, -0x)
+mgnet.xyz##+js(acs, document.addEventListener, container.innerHTML)
+mgnet.xyz##+js(nostif, top-right, 2000)
+mgnet.xyz##+js(set, hiddenProxyDetected, false)
+mgnet.xyz##+js(nano-stb, _0x, 15000)
+1bitspace.com##+js(nano-stb, location.href, 8000)
+1bitspace.com,mgnet.xyz##.modal__overlay
+mgnet.xyz##.active.bnsLayers.is-block-touch.is-grid > .col_12.article-center
+mgnet.xyz##.bounceIn.animated.bnsLayers.is-block-touch.is-grid
+
+! https://www.reddit.com/r/uBlockOrigin/comments/q6n83l/anti_adblock_message_on/
+! https://github.com/uBlockOrigin/uAssets/issues/12858
+dealsfinders.blog##+js(no-fetch-if, method:HEAD)
+dealsfinders.blog##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10192
+dirproxy.com##+js(aost, Math, )
+*$3p,script,denyallow=cloudflare.com|jquery.com,domain=dirproxy.com
+torrentdownloads.dirproxy.com##.left_shadow:has-text(Fast)
+torrentdownload.info##.thleft:has-text(Fast):upward(2)
+dirproxy.com##[src="/logo_d.jpg"]
+dirproxy.com##[src="/logo_d3.jpg"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/q6seyw/adblock_detected_in_wwwelectomaniaes/
+electomania.es##+js(acs, eval, replace)
+electomania.es##.td-pb-row.wpb_row.tdi_73.vc_row
+
+! https://github.com/uBlockOrigin/uAssets/issues/10203
+5dwallpaper.com##.__fdw__adspot-title-container
+5dwallpaper.com##.__fdw__adv-block
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/96891
+swzz.xyz##+js(aopr, app_vars.force_disable_adblock)
+swzz.xyz##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10206
+gayvl.net##+js(nowoif)
+gayvl.net###HTML1
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/144071
+japopav.tv##+js(aopr, __Y)
+japopav.tv##+js(set, isadb, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/97282
+expresscrypto.io##.content > center
+
+! https://github.com/uBlockOrigin/uAssets/issues/10227
+@@||c.adsco.re/|$script,domain=hotfrog.*
+
+! pirate4all.com popup
+pirate4all.com##.e3lan-top.e3lan
+pirate4all.com##.pirat-before-content
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/97286
+animenhentai.com##.post.has-post-thumbnail video#gump:upward(.post):remove()
+animenhentai.com###custom_html-3
+
+! https://github.com/uBlockOrigin/uAssets/issues/1905#issuecomment-394129540
+! https://www.reddit.com/r/Adblock/comments/qns11n/
+||edge.api.brightcove.com^$xhr,removeparam=ad_config_id,domain=9now.com.au|mech-plus.com|threenow.co.nz
+threenow.co.nz##.EpisodeAdBlockerWarning
+9now.com.au##.vjs-cuepoint
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/97464
+egyshare.cc##.fakeplayer
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qaqmg8/how_can_i_block_this_type_of_ads/
+kshow123.net###ads-top-player
+kshow123.net###closeads
+
+! https://github.com/uBlockOrigin/uAssets/issues/10249
+designtagebuch.de##+js(set, SteadyWidgetSettings.adblockActive, false)
+@@*$xhr,domain=designtagebuch.de
+designtagebuch.de##[id^="desig-"]:has-text(ANZEIGE)
+designtagebuch.de##.zwischen-posts-wrapper
+designtagebuch.de###desig-widget-59
+designtagebuch.de##.seitenende-wrapper
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qb81wt/adblock_detector_issue/
+vfxdownload.net##+js(acs, eval, replace)
+vfxdownload.net##[href^="https://aejuice.com"]
+vfxdownload.net###custom_html-35
+vfxdownload.net###custom_html-40
+
+! https://github.com/uBlockOrigin/uAssets/issues/10253
+gatexplore.com###tie-block_640
+gatexplore.com###tie-block_669
+
+! https://github.com/uBlockOrigin/uAssets/issues/10254
+covrhub.com##+js(set, adblock, false)
+covrhub.com##+js(nowoif)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qbcvtc/nbc_sports_anti_ad_block_workaround/
+nbcsportsedge.com##.edge-max-marketing-banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/10264
+audiobooks4soul.com##+js(nostif, show)
+audiobooks4soul.com##[href^="https://ezaudiobooks.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/10274
+azhar-c.info,concienciaradio.com,kontasas.gr##.stream-item
+juazeiro.ba.gov.br###tie-block_1735
+juazeiro.ba.gov.br###tie-block_3287
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pokdbp/antiadblock_update_list/hhgzjmk/
+rtilinks.com##+js(acs, eval, replace)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/97605
+! https://github.com/uBlockOrigin/uAssets/issues/17329
+mp3juices.*##+js(aost, Math.random, computed)
+mp3juices.*##+js(nowoif)
+mp3juices.*##[class^="result_two__"][target="_blank"]
+||mp3juices.cc^$csp=default-src 'self' 'unsafe-inline' *.dropbox.com *.dropbox-dns.com *.gstatic.com *.googleapis.com *.google.com ytpp3.com *.youtube.com
+mp3juices.icu##+js(nano-sib, temp)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/97744
+fapguru.com##+js(aost, $, inlineScript)
+##[href="https://clickaine.com"]
+fapguru.com##.underplayer_banner
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qcw6c2/adblock_detected_on_this/
+iphonechecker.herokuapp.com##+js(no-fetch-if, method:HEAD)
+iphonechecker.herokuapp.com##.iad
+
+! https://github.com/uBlockOrigin/uAssets/issues/10278
+systopedia.com##+js(aost, String.prototype.charCodeAt, ai_)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10277
+dofusports.xyz##+js(nostif, debugger)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qdmg9y/muvibg_dot_com_blocking_my_ublock/
+muvibg.com##+js(set, noAdBlock, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10292
+inhumanity.com##+js(aopr, inhumanity_pop_var_name)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10290
+watchdoge.xyz##+js(nosiif, visibility, 1000)
+watchdoge.xyz##+js(nano-sib, sec)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10293
+fapcat.com##+js(nowoif)
+fapcat.com##.fade.top
+fapcat.com##.spot-horizontal
+fapcat.com##.spot-list
+||a.fapcat.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/10296
+||gamefz.com/c.asp$frame
+
+! https://github.com/uBlockOrigin/uAssets/issues/10297
+rp5.*##+js(nostif, 0x)
+rp5.*##.adsbygoogle:upward(1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10299
+bangsaku.web.id##+js(acs, document.addEventListener, google_ad_client)
+||cdn.rawgit.com/nikoarisandi/newbangsaku/$script,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10307
+5ggyan.com##+js(acs, document.addEventListener, google_ad_client)
+5ggyan.com##^script:has-text(google_ad_client)
+5ggyan.com###sidebar1 > .HTML:has(> .widget-content > .adsbygoogle)
+5ggyan.com##+js(nano-sib, countDown)
+5ggyan.com##.progress
+5ggyan.com##button:style(display: inline-block !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10305
+freetutorialsudemy.com##.freeu-sidebar
+freetutorialsudemy.com##.freeu-widget
+
+! https://github.com/uBlockOrigin/uAssets/issues/10304
+coursesghar.com##+js(acs, eval, replace)
+coursesghar.com###custom_html-6
+
+! https://github.com/uBlockOrigin/uAssets/issues/10301
+! https://github.com/uBlockOrigin/uAssets/issues/20028
+mydramalist.com##.is-desktop-ads
+mydramalist.com##.ad-removal-info:has-text(ads):upward([class])
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qeo409/antiadblock_stardeos/
+stardeos.com##+js(no-xhr-if, url:googlesyndication)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qeo32a/stooqpl_stooqcom_stopped_working_yesterday/
+stooq.*##div[style="position:relative;width:970px;height:250px"]
+stooq.*##div[style="position:relative;width:300px;height:250px"]
+stooq.*###f13 > table > tbody > tr > td > .f13
+stooq.*###f13 > b:has-text(Sponsor):upward(4)
+stooq.*##td#f13:nth-of-type(3) > table:nth-of-type(4):has(> tbody > tr > td)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10312
+myshopify.com##+js(acs, document.addEventListener, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10313
+pcwarehub.com,taregna.com##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10314
+moddedguru.com##+js(acs, eval, replace)
+moddedguru.com##div.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/10316
+crazytechgo.com##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10321
+*$image,redirect-rule=1x1.gif,domain=freevpn4you.net
+freevpn4you.net##*:has(> .adsbygoogle)
+@@||freevpn4you.net^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/10320
+vevioz.com##+js(aopr, app_vars.force_disable_adblock)
+vevioz.com##+js(aopr, open)
+vevioz.com##+js(set, blurred, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/98102
+pelis-online.net##.adv
+
+! https://github.com/uBlockOrigin/uAssets/issues/10330
+advertiserandtimes.co.uk##+js(nostif, enforceAdStatus)
+advertiserandtimes.co.uk###nagBG
+advertiserandtimes.co.uk##body:style(overflow: auto !important;)
+advertiserandtimes.co.uk##.advert
+advertiserandtimes.co.uk##.MPU
+advertiserandtimes.co.uk##.TaboolaSide
+
+! projectfreetv. stream anti adb
+projectfreetv.stream##+js(nostif, offsetHeight)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10333
+milfnut.*##+js(set, console.clear, noopFunc)
+milfnut.*##+js(aeld, contextmenu)
+milfnut.*##+js(aopr, __Y)
+milfnut.*##+js(acs, onload, onclick)
+milfnut.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10338
+streamm4u.club##+js(aopr, __Y)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qhd2fi/zshort_detecting_adblocker_not_allowing_downloads/
+charexempire.com##+js(aopr, app_vars.please_disable_adblock)
+charexempire.com##+js(aopr, open)
+charexempire.com##+js(set, blurred, false)
+! https://www.reddit.com/r/uBlockOrigin/comments/xmjm98/
+||i.imgur.com/*.gif$image,domain=charexempire.com
+charexempire.com##.banner
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/98288
+xn--swqq1zt9i.net##+js(acs, document.addEventListener, nextFunction)
+
+! xvideos2020.me popup
+xvideos2020.me##+js(nostif, loadScripts)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10347
+mejoresmodsminecraft.site##+js(acs, decodeURIComponent, ai_adb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10346
+watchdoctorwhoonline.com##+js(aopr, mm)
+watchdoctorwhoonline.com##.custom-html-widget.textwidget > .close
+watchdoctorwhoonline.com##.sidebar_episodes2
+
+! https://github.com/uBlockOrigin/uAssets/issues/10344
+synonyms.com##+js(set, canRunAds, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10343
+pcgamesn.com##header:style(top:0 !important)
+pcgamesn.com##.legion_primiswrapper
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qhyho7/leftfield_media_ads_getting_through_in_ann/
+animenewsnetwork.com##[href^="/advertorial/"]:upward(2)
+
+! anxcinema. com / website popups
+anxcinema.*##+js(ra, href, #clickfakeplayer)
+anxcinema.*##+js(aopr, __Y)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qimfkp/adblock_detected/
+definitions.net##+js(set, canRunAds, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10355
+pixroute.com##+js(nowoif)
+pixroute.com##+js(set, proclayer, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20557
+uploady.io##+js(set, timeleft, 0)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qinnqo/adblock_detected/
+ravenmanga.xyz##+js(acs, addEventListener, onerror)
+ravenmanga.xyz##[href^="https://a-ads.com"]
+||i.imgur.com/niNoP1F.gif^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qijzz7/usagoals_live7vcom/
+||cdn777.net/site/usagoals/sitelinks/xpopme_in.js^
+
+! https://github.com/uBlockOrigin/uAssets/issues/10356
+toxicwap.us##+js(aost, Math, https)
+toxicwap.us##+js(aopr, mm)
+||brackenclomped.com^
+||babup.com^$3p
+||toxicwap.us/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/20614
+dvdgayonline.com##+js(aost, setTimeout, ads)
+! https://github.com/uBlockOrigin/uAssets/issues/10367
+dotadostube.com,taradinhos.com##+js(noeval-if, ads)
+dvdgayporn.com##+js(aeld, DOMContentLoaded, adsBlocked)
+dvdgayporn.com##+js(ra, href, #clickfakeplayer)
+dotadostube.com,taradinhos.com##div:has(> .video-block-happy)
+dotadostube.com##.happy-player-beside
+dvdgayporn.com,taradinhos.com##.widget_custom_html
+taradinhos.com##.under-player-ad
+||dvdgayonline.com^$3p
+||taradinhos.com^$3p
+
+! parked domains anti adb
+! https://github.com/uBlockOrigin/uAssets/issues/14345
+/px.gif?$image,redirect-rule=1x1.gif
+
+! buffstream. io/fun popups
+buffstream.*##+js(aopr, mm)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/98479
+! https://github.com/uBlockOrigin/uAssets/issues/13749
+*$script,3p,denyallow=cloudflare.com,domain=ytmp3eu.net
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qjxtzk/antiadblock_subedlc/
+subedlc.com##+js(acs, document.addEventListener, nextFunction)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/98602
+! https://github.com/AdguardTeam/AdguardFilters/issues/103871
+avjamack.com,avjamak.net##+js(nostif, nextFunction, 250)
+avjamack.com,avjamak.net##.widget-img
+||avjamack.com/data/by_banner/
+||avjamak.net/data/by_banner/
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/98703
+iimanga.com##+js(aeld, DOMContentLoaded, adsBlocked)
+iimanga.com##div[id^="teaser"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/10372
+@@||thevideome.com^$ghide
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pokdbp/antiadblock_update_list/hix5f5o/
+rontechtips.com##+js(acs, eval, replace, /^data:/)
+rontechtips.com##+js(no-xhr-if, googlesyndication)
+
+! sites anti adb "interfering with this page"
+chicksonright.com,moneyversed.com##+js(aost, Math.random, inlineScript)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8606#issuecomment-957843113
+curseforge.com##+js(nano-sib)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ql6wik/block_redirect/
+deckbandit.com##+js(refresh-defuser)
+deckbandit.com##^meta[http-equiv="refresh"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/10381
+kinas.tv##+js(nowoif)
+||kinas.tv/info.mp4$media,1p,redirect=noopmp3-0.1s
+
+! https://github.com/uBlockOrigin/uAssets/issues/10383
+! https://github.com/uBlockOrigin/uAssets/issues/14284
+! https://github.com/uBlockOrigin/uAssets/issues/16500
+1stream.*##+js(acs, setTimeout, admc)
+1stream.*##+js(acs, document.createElement, "script")
+1stream.*##+js(nostif, "admc")
+1stream.*##^script[type]:has-text(c=document.createElement)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qlir5v/annoying_ad_on_stocktwits_no_longer_being_blocked/
+stocktwits.com##div:has(> [class*="AdBanner_addBannerTopDesktop"])
+stocktwits.com##div:has(> div > [class*="BackgroundLoaderAd_container"])
+stocktwits.com##p[class^="Disclosure_disclosure"]:has-text(3rd Party Ad)
+
+! genius.com PH
+genius.com##div:has(> div[class^="TopContentdesktop__PromoContainer-"])
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/98990
+xxxdl.net##.banners
+||xxxdl.net/nothing.aspx?
+
+! https://github.com/uBlockOrigin/uAssets/issues/10399
+thienhatruyen.com##+js(nowoif)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qns92q/hello_folks_how_do_i_remove_this/
+@@||futbolfullenvivo.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/10406
+shuajota.com##+js(acs, document.addEventListener, nextFunction)
+shuajota.com###HTML8
+shuajota.com###HTML10
+shuajota.com###HTML9
+shuajota.com###HTML14
+shuajota.com###HTML16
+
+! https://github.com/uBlockOrigin/uAssets/issues/10407
+witanime.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10411
+@@||thetruedefender.com^$ghide
+thetruedefender.com##.adsbyvli
+thetruedefender.com###text-4
+
+! https://github.com/uBlockOrigin/uAssets/issues/10410
+! https://github.com/AdguardTeam/AdguardFilters/issues/104768
+asiaon.*##+js(no-xhr-if, googlesyndication)
+/aot-content/assets/*/cb-ads/*$domain=asiaon.top|asiaontop.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qnzkph/adblock_blocker/
+m4news.com##.demand-supply
+m4news.com###id-custom_banner
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qoqiid/
+@@||tv247.us^$ghide
+tv247.us##.afc_popup
+
+! https://github.com/uBlockOrigin/uAssets/issues/14002
+! https://github.com/uBlockOrigin/uAssets/issues/14919
+calculator-online.net##+js(no-fetch-if, ads)
+calculator-online.net##+js(set, load_ads, trueFunc)
+calculator-online.net##.sticky_ad
+calculator-online.net##.related_box:has(.adds):style(height: 1px !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10421
+onionplay.*##+js(ra, href, a#clickfkplayer)
+
+! afScript popups
+iguarras.com,iputitas.net##+js(aopr, afScript)
+
+! https://github.com/easylist/easylist/pull/11459
+messitv.net##+js(aopw, atOptions)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10439
+||clk.asia/sw.js$script,1p
+clk.asia,imperialstudy.com,skincarie.com##+js(nosiif, visibility, 1000)
+clk.asia##+js(nowoif)
+clk.asia##+js(set, blurred, false)
+||clk.asia/ads/*$frame
+||clicksfly.com/img/ref/clicksglygifbanner2.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/10443
+yifysubtitles.vip##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/99624
+bigwank.com###mobile_pop
+bigwank.com##.underplayer_banner
+||bigwank.com/extension/aine/
+||bigwank.com/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10451
+*$frame,script,3p,domain=crownimg.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/10158#issuecomment-966734989
+coloringpage.eu,conocimientoshackers.com,juegosdetiempolibre.org,karaokegratis.com.ar,mammaebambini.it,riazor.org,rinconpsicologia.com,sempredirebanzai.it,vectogravic.com##+js(no-fetch-if, method:HEAD)
+
+! pxrnxx.xyz popunder
+pxrnxx.xyz##+js(set, dclm_ajax_var.disclaimer_redirect_url, '')
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/99695
+tutorial.siberuang.com##+js(no-fetch-if, ads)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/99919
+googledrivelinks.com##+js(aost, String.prototype.charCodeAt, ai_)
+googledrivelinks.com##+js(aopr, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10459
+! https://github.com/uBlockOrigin/uAssets/issues/16219
+luckydice.net##+js(acs, Math.imul, charCodeAt)
+luckydice.net##+js(nosiif, afStorage)
+luckydice.net##+js(nowoif, !coinsearns.com)
+luckydice.net##div[style="position: fixed; display: block; width: 100%; height: 100%; inset: 0px; background-color: rgba(0, 0, 0, 0); z-index: 300000;"]
+luckydice.net##div[style="width:300px;height:250px;display: inline-block;margin: 0 auto"]
+luckydice.net##ins[class]
+luckydice.net,adarima.org##+js(set, detectAdBlock, noopFunc)
+! https://www.reddit.com/r/uBlockOrigin/comments/xbjszd/
+mcrypto.club,luckydice.net,adarima.org###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+mcrypto.club##.safelink-recatpcha:upward(div):style(display: block !important;)
+mcrypto.club##div[style="display: none;"]:style(display: block !important;)
+shinchu.*##.g-recaptcha:upward(form > div):style(display: block !important;)
+egfly.xyz,linka.click##+js(set, blurred, false)
+linka.click##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10460
+! https://github.com/uBlockOrigin/uAssets/issues/10939
+*$script,domain=miraculous.to,redirect-rule=noopjs
+@@||miraculous.to/global_data/gtag/js$xhr,1p
+miraculous.to##+js(aeld, hashchange)
+miraculous.to##+js(aeld, popstate)
+miraculous.to##+js(aopw, Fingerprint2)
+miraculous.to##+js(aopr, history.back)
+miraculous.to##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10461
+porngames.club,sexgames.xxx##+js(set, starPop, 1)
+
+! https://forums.lanik.us/viewtopic.php?t=46949
+bit-shares.com##+js(aeld, load, onload)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10465
+mytoolz.net##+js(acs, document.createElement, adb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10466
+gamingdeputy.com##+js(nostif, ai_adb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10472
+alphagames4u.com##+js(acs, addEventListener, ai_)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10397#issuecomment-968184591
+wikirise.com##+js(acs, decodeURIComponent, ai_)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/100103
+filesus.com,gotxx.*,sturls.com##+js(nostif, getComputedStyle, 250)
+gotxx.*##+js(aost, Element.prototype.matches, litespeed)
+sturls.com##+js(acs, decodeURI, decodeURIComponent)
+gotxx.*##div[class][style^="position: absolute; cursor: pointer; z-index: 2147483646"]
+! https://github.com/uBlockOrigin/uAssets/issues/15580 timer and focus detection
+sturls.com##+js(set, blurred, false)
+sturls.com###cc:style(display: block !important;)
+sturls.com###timer
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qtvlfk/adblock_detected_on_edealinfocom/
+edealinfo.com##+js(acs, $, offsetHeight)
+
+! popups https://forums.lanik.us/viewtopic.php?t=46951
+mlsbd.shop##+js(aost, Math, inlineScript)
+mlsbd.*##+js(nowoif)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qu7gto/blockadblock_bypassing_ublockorigin/
+tinytranslation.xyz###HTML5
+
+! https://github.com/uBlockOrigin/uAssets/issues/10488
+*$xhr,redirect-rule=nooptext,domain=paraphrasetool.com
+paraphraser.io##body > .justify-content-center
+@@||paraphraser.io^$ghide
+paraphraser.io##.adsenbox
+! https://github.com/AdguardTeam/AdguardFilters/issues/133102
+rephrase.info##.text-center:not([id]) [id^="adngin-"]:upward(.text-center:not([id]))
+
+! https://github.com/uBlockOrigin/uAssets/issues/10495
+wouterplanet.com##+js(rmnt, script, clicky)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10494
+freexcafe.com##+js(acs, __PoSettings)
+freexcafe.com##.left-col-gal-br
+freexcafe.com###rightcolumn
+freexcafe.com###banner
+freexcafe.com###join
+freexcafe.com##.hotdeal
+freexcafe.com##div.bottom-300x250
+freexcafe.com###txtbanner
+
+! paramountnetwork video ads
+||mtvnservices.com/aria/bentojs.js
+*$media,redirect=noopmp3-0.1s,domain=paramountnetwork.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/10501
+pcworld.es##.stickyAdWrapper
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/100352
+*$popunder,domain=ouo.io
+
+! https://github.com/easylist/easylist/issues/9742
+nowtolove.com.au##.page__content-header:style(height: 50px !important)
+
+! https://github.com/uBlockOrigin/uAssets/pull/10507
+! https://github.com/uBlockOrigin/uAssets/pull/13468#issuecomment-1141255930
+@@||anime-king.com^$ghide
+! cdnondemand.org variants
+! https://github.com/uBlockOrigin/uBlock-discussions/discussions/790
+/^https?:\/\/[a-z]{5,7}\.com\/script\/[-_0-9a-z]+(\.min)?\.js$/$script,3p,match-case,domain=~edu|~gov
+/script/atg.js$3p
+/script/atga.js$3p
+/script/suv4r.js$3p
+/script/intrf.js$3p
+/script/ippg.js$3p
+/script/native_render.js$3p
+/script/native_server.js$3p
+/script/antd.js$3p
+.com/script/compatibility.js|$3p
+.org/script/compatibility.js|$3p
+.com/script/foundation.js|$3p
+.com/script/npa2.min.js|$3p
+.com/script/xbox.js|$3p
+.com/script/image.js|$3p
+.com/script/document.js|$3p
+.com/script/asset.js|$3p
+.com/script/file.js|$3p
+.com/script/mui.js|$3p
+.com/script/script.js|$3p
+.com/script/cdn.js|$script,3p
+.com/script/a.js|$3p
+.com/script/frustration.js|$3p
+.php?*&sadbl=1&$xhr,3p
+##a[dontfo=""][style$="position: absolute; z-index: 2147483647;"]
+.com/script/utils.js|$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10506
+sexlist.tv##+js(disable-newtab-links)
+sexlist.tv##.link-premium
+sexlist.tv##.camitems
+||sexlist.tv/player/html.php$frame
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qw7hct/
+readgraphicnovels.blogspot.com##+js(nobab)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10508
+@@||washingtoninformer.com^$ghide
+washingtoninformer.com##.widget a.gofollow:upward(.widget)
+washingtoninformer.com##.a-772
+
+! https://github.com/uBlockOrigin/uAssets/issues/10509
+xozilla.xxx##+js(aost, HTMLSelectElement, Object)
+||xozilla.xxx/player/html.php$frame,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10510
+||xxxbule.com^$csp=script-src
+
+! https://github.com/uBlockOrigin/uAssets/issues/10397#issuecomment-973893280
+mobitool.net##+js(acs, decodeURIComponent, ai_)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10512
+letsmakeiteasy.tech###quads-myModal
+
+! https://github.com/FastForwardTeam/FastForward/issues/208
+||ytsubme.com/assets/adblock/
+ytsubme.com##+js(nowoif, youtube)
+ytsubme.com##+js(nano-stb, aTagChange, 12000)
+
+! https://forums.lanik.us/viewtopic.php?t=46966
+@@||filmpertutti.*^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/100671
+dragontranslation.com##+js(aost, String.prototype.charCodeAt, https)
+dragontranslation.com###teaser2
+dragontranslation.com##div[style$="position: fixed;"][style*="z-index: 2147483647;"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/10716
+thecustomrom.com##+js(acs, eval, replace)
+thecustomrom.com##.ai_widget
+thecustomrom.com##+js(acs, decodeURIComponent, ai_)
+thecustomrom.com##+js(rmnt, script, deblocker)
+thecustomrom.com##+js(nano-stb, window.location.href, *)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10517
+111.90.159.132##+js(nostif, mfp)
+111.90.159.132##+js(set, Object.prototype.ads, noopFunc)
+/wp-content/plugins/catfish-advert-banner/*$script
+111.90.159.132##[href="http://buaksib.in/"]
+111.90.159.132###catfish
+111.90.159.132##.mfp-ready
+||111.90.159.132/*.gif$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/10518
+phsensei.com##+js(acs, String.fromCharCode, decodeURIComponent)
+! https://github.com/AdguardTeam/AdguardFilters/issues/134204
+homeairquality.org,techtrim.tech##+js(no-fetch-if, googlesyndication)
+homeairquality.org,techtrim.tech##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10519
+techsolveprac.com##+js(nostif, display, 5000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10518#issuecomment-974645159
+fileborder.com##+js(acs, String.fromCharCode, decodeURIComponent)
+
+! insider.com PH
+insider.com##.in-post-sticky:has(> .ad-wrapper)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7158
+myshrinker.com##+js(set, blurred, false)
+myshrinker.com##.banner-inner
+
+! https://github.com/uBlockOrigin/uAssets/issues/10533
+cricstream.*##.w-100.position-absolute.h-100
+watch.cricstream.*##button:has-text(/Watch|🎟|👉/)
+
+! wishanimes.com popup
+wishanimes.com##+js(acs, JSON.parse)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10535
+onlineporno.cc##.spot-box
+onlineporno.cc##.w-spots
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qzmgb6/
+downloadfreecourse.com##+js(aost, fetch, inlineScript)
+@@||downloadfreecourse.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/10544
+phanmemmaytinh.net##+js(acs, eval, replace)
+phanmemmaytinh.net###custom_html-10
+phanmemmaytinh.net###custom_html-2
+phanmemmaytinh.net###custom_html-3
+
+! https://github.com/uBlockOrigin/uAssets/issues/10505#issuecomment-976101815
+! https://github.com/uBlockOrigin/uAssets/issues/13289
+tinhocdongthap.com##+js(aeld, DOMContentLoaded, adsBlocked)
+tinhocdongthap.com##+js(nostif, show)
+
+! popmagic crap (classic popmagic filter does not work => blocking videos)
+pornpapa.com,videojav.com##+js(aost, $, inlineScript)
+pornpapa.com##.underplayer_banner
+
+! https://www.reddit.com/r/uBlockOrigin/comments/r06yju/sur_in_english_website_recognises_ad_blocker/
+||surinenglish.com/adbd^
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/107015
+av01.tv##+js(nowoif)
+av01.tv##+js(ra, onclick, a[onclick^="setTimeout"])
+av01.tv##.row > div:has(> #tile-ad)
+av01.tv##div[style="width: 100%; height: 100%; top: 0px; position: fixed; z-index: 1; background-color: rgba(0, 0, 0, 0.8); overflow-x: hidden; transition: all 0.2s ease 0s; padding: 5%;"]
+av01.tv##+js(rc, vjs-hidden, .vjs-control-bar, stay)
+av01.tv##iframe[width="728"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/10544#issuecomment-977523973
+freewp.io##+js(no-xhr-if, /^/)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pokdbp/antiadblock_update_list/hliq80p/
+universalfreecourse.com##+js(acs, addEventListener, "No")
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/100808
+strdef.world###stream-banner
+strdef.world##div[style^="z-index: 999999; background-image: url(\"data:image/gif;base64,"][style$="position: absolute;"]
+||strdef.world/js/acheck.js
+
+! https://www.reddit.com/r/uBlockOrigin/comments/r0yr1f/filter_not_work/
+||gospeljingle.com^$csp=default-src 'unsafe-inline' 'self' data: *.ytimg.com *.facebook.com *.google.com *.gstatic.com *.youtube.com *.googleapis.com *.wp.com *.gospeljingle.com *.googletagmanager.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/10584
+studybullet.com##+js(set, adsBlocked, false)
+studybullet.com##+js(acs, b2a)
+
+! bigyshare .com popups
+bigyshare.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/pull/10589
+@@||dlink.mobilejsr.com^$ghide
+dlink.mobilejsr.com##[src*="png"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/10597
+@@||driveup.in^$ghide
+driveup.in##+js(nowoif, /^/, 0)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/101170
+@@||scatfap.com/scat-porn/modules/vids/misc_static/adverts.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/10604
+freecourse.tech##+js(nostif, ai_)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10607
+latest-files.com##+js(acs, document.addEventListener, offsetParent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10613
+@@||onuploads.com^$ghide
+onuploads.com##ins.adsbygoogle
+onuploads.com##+js(nano-stb, seconds)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10614
+weszlo.com##+js(no-fetch-if, ad)
+@@||weszlo.com^$ghide
+weszlo.com##.ad-placeholder-bg
+
+! moviemad. vip popups
+moviemad.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10366#issuecomment-980497850
+cotravinh.blogspot.com##+js(aeld, load, nextFunction)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10625
+chicagobearshq.com,chicagobullshq.com,chicagosportshq.com,cubshq.com,tigernet.com##+js(acs, document.getElementById, JSON)
+
+! ytube2dl. com popups
+ytube2dl.com##+js(aeld, , pop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10642
+xenvn.com##+js(nostif, ads)
+@@||xenvn.com^$ghide
+xenvn.com##.ad_block:style(visibility: hidden !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10640
+tvhai.org##+js(aeld, , open)
+plhqtvhay.xyz##+js(nosiif, 0x)
+
+! glotorrents.* ads, popups
+glotorrents.fr-proxy.com##+js(aopw, decodeURI)
+glotorrents.fr-proxy.com##+js(aopw, adcashMacros)
+glotorrents.fr-proxy.com,glotorrents.theproxy.ws##+js(nowoif)
+glotorrents.fr-proxy.com,glotorrents.theproxy.ws##+js(aopr, String.prototype.charCodeAt)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12971
+tutele.sx##+js(aopr, Overlayer)
+tutele.sx##+js(nostif, "admc")
+/script/ncsu.js$3p
+/script/nbsu.js$3p
+/script/ndsu.js$3p
+/^https?:\/\/[a-z]{6,12}\.com\/script\/n[a-z]su\.js$/$script,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10651
+luotphimzz.com##.fakeplayer
+luotphim.net##.fakeplayer
+luotphim.cc##.fakeplayer
+luotphim.cc##.adsphim-popup-center
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/101419
+arabincest.com##+js(acs, $, test)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10657
+||krunkercentral.com^$csp=default-src 'unsafe-inline' 'self' *.google.com *.gstatic.com *.googleapis.com *.wp.com *.googletagmanager.com *.jquery.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/r43gcd/how_do_i_prevent_the_adblock_detector_and_the/
+isi7.net##+js(no-fetch-if, adsbygoogle)
+isi7.net###wpsafe-wait1
+isi7.net###wpsafe-generate:style(display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10664
+camwhores.tv##+js(nostif, innerText, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10668
+wapsing.com##+js(nowoif)
+wapsing.com##a[href*="panchaxumbilic.com"],a[href*="trustedcpmrevenue.com"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/10673
+||just-upload.com^$doc,csp=default-src 'unsafe-inline' 'unsafe-eval' 'self' *.google.com *.gstatic.com *.googleapis.com *.googletagmanager.com *.jquery.com *.bootstrapcdn.com *.jsdelivr.net *.cloudflare.com
+||d1t4ekjh9ps4ob.cloudfront.net^
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/101253
+hotdesimms.com##+js(nostif, offsetHeight)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/r65c51/ublock_detected/
+@@||animesaria.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/10679
+@@||coinpayz.xyz^$ghide
+coinpayz.xyz##.ads
+||coinpayz.xyz/*.php$frame
+
+! https://github.com/uBlockOrigin/uAssets/pull/10684
+apiyt.com,masstamilans.com,mymp3song.*,okmusi.com##+js(nowoif)
+
+! https://github.com/abpvn/abpvn/issues/306
+xnxx-sex-videos.com##+js(nostif, /out.php)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10685
+wpking.in##+js(acs, eval, replace)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/r71n9g/ifonca_adblock_popup/
+#@#.Ad-Container
+#@#.sidebar-ad
+##.Ad-Container:not(.adsbygoogle)
+~ekitan.com,~kissanadu.com##.sidebar-ad:not(.adsbygoogle)
+##.stream-item-widget
+
+! https://github.com/uBlockOrigin/uAssets/issues/10707
+@@||printablebricks.com^$ghide
+
+! orgasmatrix. com popmagic
+orgasmatrix.com##.card.post:has([href*="landing."])
+
+! https://github.com/uBlockOrigin/uAssets/issues/10931
+@@||loot.tv^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/101921
+gifhq.com##+js(acs, document.dispatchEvent, myEl)
+gifhq.com##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+gifhq.com##+js(acs, $, open)
+||gifhq.com/d2.js
+
+! https://github.com/uBlockOrigin/uAssets/pull/10721
+ibomma.*##[style="display:none"]:style(display: block !important;)
+ibomma.*###abEnabled-note
+
+! torpedogratis.org
+torpedogratis.org###ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/10722
+teevee.asia##+js(nostif, innerHTML)
+
+! https://forums.lanik.us/viewtopic.php?t=47015
+itdmusics.com##+js(aeld, load, onload)
+itdmusics.com##+js(acs, eval, replace)
+
+! https://forums.lanik.us/viewtopic.php?t=47016
+@@||itopmusic.org^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/10746
+bullfrag.com##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10745
+pdfaid.com##+js(nostif, offsetHeight)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10740
+persianhive.com##+js(no-xhr-if, adsbygoogle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10741
+lootup.me##+js(acs, document.getElementById, stop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10748
+||mobile-tracker-free.com/dashboard/scripts/detectBlockAds/isPremiumDemo.php
+mobile-tracker-free.com##+js(set, detectBlockAds, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10736
+motphimtv.com##+js(set, console.clear, undefined)
+
+! https://www.wyze. com combined anti adb / forced breakage
+wyze.com##+js(no-fetch-if, analytics)
+*$script,domain=wyze.com,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/10756
+studyflix.de##.huge-notification
+
+! https://github.com/uBlockOrigin/uAssets/issues/10758
+camstreams.tv##div[style="position: absolute; inset: 0px; overflow: hidden; z-index: 160; background: transparent none repeat scroll 0% 0%; display: block;"]
+! https://github.com/uBlockOrigin/uAssets/issues/20409
+||camplethora.com^
+camstreams.tv###sliderBox
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/102018
+burnbutt.com##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10761
+||filma24.*/*.gif$image
+filma24.*###vidad
+filma24.*##[href^="https://bit.ly/"]
+filma24.*##[href="https://codeit.al/services/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/12705
+/reclama/ads.js$script,redirect-rule=prebid-ads.js
+
+! casamireasa. biz anti adb
+casamireasa.biz##+js(acs, document.write, Adb)
+
+! fembed-hd. com popups
+fembed-hd.com##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10779
+mconverter.eu##+js(nostif, offsetHeight)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10793
+joomlabeginner.com##+js(nostif, eb)
+joomlabeginner.com##.bannergroup
+
+! https://github.com/uBlockOrigin/uAssets/issues/10792
+learnclax.com##+js(acs, $, fetch)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10798
+ytmp3x.com##+js(nowoif)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/rb2a2x/how_to_fix_adblock_detection_on_this_website/
+newsmondo.it##+js(acs, document.getElementById, "detect")
+
+! https://www.reddit.com/r/uBlockOrigin/comments/rb0kqa/adblock_detection_by_questpass/
+*$xhr,redirect-rule=nooptext,domain=zwielkopolski24.pl
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/102275
+go.adinsurance.xyz##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10809
+goduke.com##+js(no-xhr-if, /analytics|livestats/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10810
+hyipstats.net##+js(no-fetch-if, adsbygoogle)
+hyipstats.net##.w-125px
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/101509
+! https://github.com/uBlockOrigin/uAssets/issues/15790
+cutp.in##+js(aopr, app_vars.force_disable_adblock)
+mobitaak.com##+js(nano-sib)
+@@*$script,1p,domain=mobitaak.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/10819
+itudong.com##+js(aeld, load, nextFunction)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10820
+tainhanhvn.com##+js(aeld, load, /nextFunction|2000/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10824
+pfps.gg##+js(set, ga, trueFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/102362
+arhplyrics.in##+js(nano-sib)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/98082
+! https://www.reddit.com/r/uBlockOrigin/comments/11ckgph/
+claimtrx.com##+js(aeld, load, 'block')
+claimtrx.com##.ads
+
+! 4kporn. xxx popunder
+4kporn.xxx##+js(set, flashvars.popunder_url, '')
+
+! https://github.com/uBlockOrigin/uAssets/issues/10845
+arhplyrics.in##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10850
+! https://github.com/uBlockOrigin/uAssets/issues/10851
+scrolller.com##.ad-block-popup:upward(2)
+scrolller.com##.native-ad-item-panel:upward(.vertical-view__item)
+||photon.scrolller.com/categories/$image,media
+||photon.scrolller.com/scrolller/$media
+
+! https://github.com/uBlockOrigin/uAssets/issues/10855
+||dirp.me^$csp=default-src 'unsafe-inline' 'self' https://extraimage.net *.extraimage.info *.imgur.com *.wikimedia.org *.dyncdn.cc *.picturedent.org https://checkmy.pictures *.dirp.me *.googleapis.com *.gstatic.com
+dirp.me##+js(aopr, puShown)
+dirp.me##[data-href^="/vpn"]
+dirp.me##[id]:has-text(Provider)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/102749
+boainformacao.com.br##+js(no-xhr-if, adsbygoogle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18612
+pinterest.*##a[href*="&epik="]:upward([data-grid-item])
+pinterest.*##[data-grid-item]:has([aria-label]:not([aria-label*="pinterest"])[href]:not([href^="/pin"]))
+
+! https://github.com/uBlockOrigin/uAssets/issues/10848
+distrowatch.org##[href*="3cx"]:upward(tbody)
+distrowatch.org##[href^="https://pbxinaflash.com/"]
+
+! ubuntudde.com anti-adb
+ubuntudde.com##+js(aopw, b2a)
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/1874
+@@||elwood.io^$ehide
+
+! https://github.com/uBlockOrigin/uAssets/issues/10885
+pigeonburger.xyz##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10886
+dl.apkmb.com##.btnDownload:has-text(SHARE)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10729
+! https://github.com/uBlockOrigin/uAssets/issues/17285
+! https://short.dash-free.com/KPgrgU timer
+dash-free.com##+js(set, go_popup, {})
+dash-free.com##+js(set, blurred, false)
+dash-free.com##+js(aopr, app_vars.force_disable_adblock)
+autofaucet.dutchycorp.space##[href^="https://enicyvys.xyz/"]
+autofaucet.dutchycorp.space##[href*="banner"]
+autofaucet.dutchycorp.space##[src^="blob:https://autofaucet.dutchycorp.space/"]:remove()
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$xhr,domain=coin-free.com|kienthucrangmieng.com|chinhnhacoban.com|tremamnon.com|95news.com|vnpttelle.com
+*$script,3p,domain=coin-free.com|kienthucrangmieng.com|chinhnhacoban.com|95news.com|vnpttelle.com,denyallow=iconify.design|cloudflare.com
+coin-free.com,kienthucrangmieng.com##[id^="wpsafe-wait"]
+coin-free.com,kienthucrangmieng.com###wpsafe-generate, #wpsafe-link:style(display: block !important)
+*$script,redirect-rule=noopjs,domain=coin-free.com|kienthucrangmieng.com|chinhnhacoban.com|95news.com|vnpttelle.com
+! https://github.com/uBlockOrigin/uAssets/issues/17166#issuecomment-1480653096
+snowurl.com##+js(nowoif)
+snowurl.com##+js(set, blurred, false)
+snowurl.com##+js(set, go_popup, {})
+tremamnon.com##+js(aeld, DOMContentLoaded, adsBlocked)
+chinhnhacoban.com,tremamnon.com,vnpttelle.com##[id^="wpsafe-generate"], #continue:style(display: block !important;)
+kienthucrangmieng.com,coin-free.com,tremamnon.com##^script:has-text(htmls)
+!#if !cap_html_filtering
+kienthucrangmieng.com,coin-free.com,tremamnon.com##+js(rmnt, script, htmls)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/10894
+actresstoday.com##+js(acs, eval, replace)
+
+! fastream. to popups + anti adb
+fastream.to##+js(aopr, afScript)
+@@||fastream.to^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10896
+sakarnewz.com##+js(nostif, show)
+sakarnewz.com###custom_html-2
+
+! telenord. it videos
+telenord.it##+js(nano-sib)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10901
+snlookup.com##+js(no-xhr-if, ads)
+
+! https://forums.lanik.us/viewtopic.php?t=47031
+mundotec.pro##+js(nano-sib, seconds)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10912
+epainfo.pl##+js(acs, document.addEventListener, adsBlocked)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ucsg1g/adblock_detected_wont_allow_use/
+! https://github.com/uBlockOrigin/uAssets/issues/12980
+freedownloadvideo.net##+js(aost, setTimeout, adsBlocked)
+
+! raky. in antiadb
+raky.in##+js(no-fetch-if, googlesyndication)
+raky.in##+js(nano-sib)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13595
+! https://github.com/uBlockOrigin/uAssets/issues/14688
+titantv.com##+js(aeld, load, player)
+@@||ntv.io/serve/load.js$script,domain=titantv.com
+titantv.com###sidebox
+
+! https://www.reddit.com/r/uBlockOrigin/comments/rgs3zt/ublock_origin_detected/
+1apple.xyz##+js(no-xhr-if, mahimeta)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/rgxlda/adblock_detected/
+helpdice.com##+js(acs, onload, "iframe")
+
+! https://github.com/uBlockOrigin/uAssets/issues/10929
+forum.admiregirls.com##+js(acs, $, test)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10937
+gomoviefree.*##.mobile-btn
+vidoo.org##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/10941
+3cinfo.net##+js(aeld, , document.oncontextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10954
+otakukan.com##+js(nostif, innerHTML)
+otakukan.com##.ai-attributes
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/103480
+latinohentai.com##+js(ra, href, #clickfakeplayer)
+latinohentai.com##+js(acs, document.createElement, __htas)
+
+! mangastream.mobi popup
+mangastream.mobi###myModal
+
+! https://github.com/orgs/uBlockOrigin/teams/ublock-filters-volunteers/discussions/377
+||adclixx.net^$script,3p,redirect-rule=nobab2.js:10
+||adnetasia.com^$script,3p,redirect-rule=nobab2.js:10
+||adtrackers.net^$script,3p,redirect-rule=nobab2.js:10
+||bannertrack.net^$script,3p,redirect-rule=nobab2.js:10
+||ads.twitter.com/favicon.ico$image,3p,redirect-rule=32x32.png
+||advertising.yahoo.com/favicon.ico$image,3p,redirect-rule=32x32.png
+||doubleclickbygoogle.com/favicon.ico$image,3p,redirect-rule=32x32.png
+||google.com/adsense/start/images/favicon.ico$image,3p,redirect-rule=32x32.png
+||gstatic.com/adx/doubleclick.ico$image,3p,redirect-rule=32x32.png
+#@##ad_300
+#@##ad_728
+#@##ad_area
+#@##ad_big
+#@##ad_box
+#@##ad_footer
+#@##ad_slot
+#@##ad_space
+#@##adframe:not(frameset)
+#@##adheader
+#@##ads-1
+#@##ads-banner
+#@##ads-footer
+#@##adspace
+#@##adsquare
+#@##banner468
+#@##banner728x90
+###ad_300:not([style^="position: absolute; left: -5000px"])
+###ad_728:not([style^="position: absolute; left: -5000px"])
+###ad_area:not([style^="position: absolute; left: -5000px"])
+###ad_big:not([style^="position: absolute; left: -5000px"])
+~zunda.site###ad_box:not([style^="position: absolute; left: -5000px"])
+###ad_footer:not([style^="position: absolute; left: -5000px"])
+###ad_slot:not([style^="position: absolute; left: -5000px"])
+~musmus.main.jp,~streetinsider.com###ad_space:not([style^="position: absolute; left: -5000px"])
+~kazukichi0914.hatenablog.com,~puzzle-ch.com###adframe:not(frameset):not([style^="position: absolute; left: -5000px"])
+###adheader:not([style^="position: absolute; left: -5000px"])
+###ads-1:not([style^="position: absolute; left: -5000px"])
+###ads-banner:not([style^="position: absolute; left: -5000px"])
+###ads-footer:not([style^="position: absolute; left: -5000px"])
+~ma-bank.net,~video.tv-tokyo.co.jp###adspace:not([style^="position: absolute; left: -5000px"])
+###adsquare:not([style^="position: absolute; left: -5000px"])
+###banner468:not([style^="position: absolute; left: -5000px"])
+###banner728x90:not([style^="position: absolute; left: -5000px"])
+! temp specific rules
+xnxx.com,xvideos.*###ad-footer
+! https://github.com/orgs/uBlockOrigin/teams/ublock-filters-volunteers/discussions/377/comments/63
+! e.g. https://github.com/AdguardTeam/AdguardFilters/issues/103998
+! https://github.com/uBlockOrigin/uAssets/issues/11527
+#@#.ad-placement
+! https://github.com/uBlockOrigin/uAssets/issues/18782
+live.cricket.com.au##.ad-placement, .yes
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/116868
+! https://github.com/AdguardTeam/AdguardFilters/issues/116826
+! https://github.com/uBlockOrigin/uAssets/issues/14191
+#@#.google-ad
+~mmiyue.com##.google-ad:not(.testAd)
+! https://github.com/AdguardTeam/Scriptlets/issues/190
+/ads-prebid.js$script,redirect-rule=prebid-ads.js
+/prebid-ads.js$script,redirect-rule=prebid-ads.js,domain=~exey.io
+! www.gamedeveloper.com
+/prebid-ads/adsensebase.js$script,redirect-rule=prebid-ads.js
+! www.hero-wars.com
+/prebid-article-ad-ad-300x250.js$script,redirect-rule=prebid-ads.js
+! https://github.com/uBlockOrigin/uAssets/commit/036e13101ea60a14b4a416f47609793da7434b16
+@@/js/prebid-ads.js$script,1p
+! CHP Ads Block Detector
+#@#.ad-link
+##.ad-link:not(.adsbox)
+#@#.ad-unit
+#@#.ad_unit
+~lamire.jp##.ad-unit:not(.text-ad):not(.textads)
+##.ad_unit:not(.text-ad)
+#@#[data-ad-module]
+#@#[data-ad-width]
+#@#[data-adblockkey]
+#@#[data-advadstrackid]
+#@#[data-ad-manager-id]
+##[data-ad-module]:not([style$="left: -10000px !important; top: -1000px !important;"]):not(.adsbygoogle)
+##[data-ad-width]:not([style$="left: -10000px !important; top: -1000px !important;"]):not(.adsbygoogle)
+##[data-adblockkey]:not([style$="left: -10000px !important; top: -1000px !important;"]):not(html):not(.adsbygoogle)
+##[data-advadstrackid]:not([style$="left: -10000px !important; top: -1000px !important;"]):not(.adsbygoogle)
+##[data-ad-manager-id]:not([style$="left: -10000px !important; top: -1000px !important;"]):not(.adsbygoogle)
+#@#.ad-slot
+##.ad-slot:not(.adsbox):not(.adsbygoogle)
+#@#.ad-300x250
+##.ad-300x250:not(.ads)
+||doubleclick.net^$xhr,redirect=noop.txt
+||media.fastclick.net/|$xhr,3p,redirect-rule=noop.txt
+||ads.facebook.com/|$xhr,3p,redirect-rule=noop.txt
+||advice-ads.s3.amazonaws.com/|$xhr,3p,redirect-rule=noop.txt
+||ads.youtube.com/|$xhr,3p,redirect-rule=noop.txt
+||ads.reddit.com/|$xhr,3p,redirect-rule=noop.txt
+||ads-api.twitter.com/|$xhr,3p,redirect-rule=nooptext
+||ads.pinterest.com/|$xhr,3p,redirect-rule=noop.txt
+||adversal.com/|$xhr,3p,redirect-rule=noop.txt
+||sovrn.com/|$xhr,3p,redirect-rule=noop.txt
+||ads.tiktok.com/|$xhr,3p,redirect-rule=noop.txt
+||propellerads.com/|$xhr,3p,redirect-rule=noop.txt
+||infolinks.com/|$xhr,3p,redirect-rule=noop.txt
+||realsrv.com/popunder1000.js$xhr,3p,redirect=noop.txt
+||exdynsrv.com/video-slider.js$xhr,3p,redirect=noop.txt
+mymusicreviews.com,thechat.cafe##+js(aopr, chp_adblock_browser)
+! https://www.nj.com/ .ad-unit
+nj.com##.ad-unit[id]
+kiplinger.com##.ad-unit, .fake
+! https://twitter.com/SeriousHoax/status/1670684212859400192
+livescience.com##.widget-ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/10964
+globfone.com##+js(no-xhr-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10965
+donugdee.com##.ad-overlay-click
+donugdee.com##.moviePlayer
+donugdee.com###second-rowiframe
+
+! https://github.com/uBlockOrigin/uAssets/issues/10966
+fztvseries.mobi##+js(nosiif, visibility, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10969
+desiflixindia.com##+js(no-fetch-if, ads)
+desiflixindia.com##+js(nano-sib)
+
+! tv-sport-hd. com ads popups
+tv-sport-hd.com##[src="/rcl/reclama.php"]
+tv-sport-hd.com###reklama1
+||tvs-widget.com/sticker.jpg$image
+||tvs-widget.com/rcl/
+
+! https://github.com/uBlockOrigin/uAssets/issues/10983
+! https://www.reddit.com/r/uBlockOrigin/comments/15yv6zd/ad_blocker_detected_please_disable_your_ad/
+androidacy.com##+js(no-fetch-if, method:HEAD)
+@@||pagead2.googlesyndication.com/pagead/$script,xhr,domain=androidacy.com
+! https://github.com/uBlockOrigin/uAssets/issues/21606
+@@||androidacy.com^$ghide
+androidacy.com##+js(rmnt, script, charCodeAt)
+@@||fundingchoicesmessages.google.com^$domain=androidacy.com
+@@||production-api.androidacy.com^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10978
+film01stream.ws##+js(ra, href, .mvi-cover)
+film01stream.ws##.f-inner
+
+! https://github.com/uBlockOrigin/uAssets/issues/10981
+movies7.pro##+js(disable-newtab-links)
+m4ufree.*,uwatchfree.cyou##+js(aopr, BetterJsPop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10977
+glosbe.com###topBannerContainer
+
+! https://github.com/uBlockOrigin/uAssets/issues/10990
+||www.sfr.fr^$script,redirect-rule=noop.js,domain=red-by-sfr.fr
+
+! https://github.com/uBlockOrigin/uAssets/issues/10992
+t18cv.com##+js(aopr, remove_adblock_html)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11002
+publicflashing.me##+js(aost, console, onload)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11005
+@@||cdn.dqst.pl/assets/ads.js$xhr,domain=tko.pl
+
+! https://github.com/uBlockOrigin/uAssets/issues/11003
+plotaroute.com###RightPanelAds
+plotaroute.com###AdPanelRight
+plotaroute.com###Page:style(right: 0px !important;)
+
+! javgg.net streamsb popup
+javside.com##+js(aopr, __Y)
+javside.com##+js(aopr, AaDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11024
+! https://github.com/uBlockOrigin/uAssets/issues/17375
+katmoviefix.*##+js(aopr, Request)
+katmoviefix.*##+js(noeval-if, ads)
+
+! livesexporn. net popunder
+livesexporn.net##+js(acs, onload, Math)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11029
+g3g.*##.text-center.alert-danger.alert-dismissible.alert
+
+! https://github.com/uBlockOrigin/uAssets/issues/11033
+webpornblog.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11044
+freetohell.com##+js(no-fetch-if, method:HEAD)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11043
+sanet.st##+js(aost, document.createElement, onerror)
+sanet.st##.lsB
+
+! https://github.com/uBlockOrigin/uAssets/issues/11050
+sportsdark.com##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11048
+pornstargold.com##+js(aopr, loadTool)
+pornstargold.com##.et_bloom_popup
+pornstargold.com##canvas
+pornstargold.com###popup
+
+! https://github.com/uBlockOrigin/uAssets/issues/11059
+askpaccosi.com,crypto4tun.com##+js(no-fetch-if, googlesyndication)
+askpaccosi.com,crypto4tun.com##+js(no-xhr-if, googlesyndication)
+askpaccosi.com,crypto4tun.com##[id^="wpsafe-wait"]
+askpaccosi.com,crypto4tun.com###wpsafe-generate, #wpsafe-link:style(display: block !important)
+askpaccosi.com###wcfloatDiv4
+askpaccosi.com##.av_pop_modals_1
+
+! https://github.com/uBlockOrigin/uAssets/issues/11060
+techsignin.com##+js(acs, document.getElementsByTagName, tdBlock)
+techsignin.com###td-outer-wrap:style(cursor: default !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11069
+cam-video.xxx##+js(nowoif)
+cam-video.xxx###float-video
+
+! ads
+##[href^="https://buycheaprdp.com/"]
+##[href^="https://bestbuyrdp.com/"]
+##[href^="https://buycheaphost.net/"]
+
+! antiadb insurance. iptvsetupguide. com
+insurance.iptvsetupguide.com##+js(no-fetch-if, ads)
+insurance.iptvsetupguide.com##+js(nano-sib)
+
+! antiadb bitcoinslink. site
+@@||bitcoinslink.site^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/11075
+codecap.org##+js(aopr, Request)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11076
+fusedgt.com##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11082
+firstpost.com##+js(ra, href, .t-out-span [href*="utm_source"], stay)
+firstpost.com##+js(ra, src, .t-out-span [src*=".gif"], stay)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11093
+transportationlies.org##+js(aeld, , about:blank)
+||transportationlies.org/images/*.gif$image
+/apis-2.js^$1p
+/pub/js_min.js|
+
+! https://github.com/uBlockOrigin/uAssets/issues/11098
+@@||daihatsu-club.net^$ghide
+daihatsu-club.net##[class^="side_ad_left_"]
+daihatsu-club.net##[class^="side_ad_right_"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/11118
+vaa.jp,yonelabo.com###nankafix
+
+! https://github.com/uBlockOrigin/uAssets/issues/11125
+svetserialu.to##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11145
+onlytech.com##+js(acs, $, test)
+
+! https://github.com/easylist/easylist/pull/10341/
+/fret/meow4/*$script,3p
diff --git a/uAssets/filters/filters-2022.txt b/uAssets/filters/filters-2022.txt
new file mode 100644
index 0000000..6cd63d3
--- /dev/null
+++ b/uAssets/filters/filters-2022.txt
@@ -0,0 +1,5501 @@
+! Title: uBlock filters (2022)
+! Last modified: %timestamp%
+! Description: Filters optimized for uBlock, to be used along EasyList
+! Homepage: https://github.com/uBlockOrigin/uAssets
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+! New filters from January 2022 to ->
+!
+! GitHub issues: https://github.com/uBlockOrigin/uAssets/issues
+! GitHub pull requests: https://github.com/uBlockOrigin/uAssets/pulls
+
+! https://github.com/uBlockOrigin/uAssets/issues/17548
+@@*$ghide,domain=dev.miuiflash.com|djxmaza.in|thecubexguide.com
+*$script,redirect-rule=noopjs,domain=djxmaza.in|thecubexguide.com|dev.miuiflash.com
+*$frame,redirect-rule=noopframe,domain=djxmaza.in|dev.miuiflash.com|thecubexguide.com
+*$xhr,domain=djxmaza.in|dev.miuiflash.com|thecubexguide.com,redirect-rule=nooptext
+*$image,redirect-rule=32x32.png:5,domain=djxmaza.in|thecubexguide.com|dev.miuiflash.com
+@@||devfiles.pages.dev/fonts/wp-content/plugins/best-ads-block-detector/main.js
+@@||googlesyndication.com^$script,xhr,domain=djxmaza.in|dev.miuiflash.com|thecubexguide.com
+@@||doubleclick.net^$script,xhr,domain=djxmaza.in|dev.miuiflash.com|thecubexguide.com
+@@||adoto.net/dashboard/common/js/common.js$3p,script,domain=dev.miuiflash.com|djxmaza.in|thecubexguide.com
+@@||fundingchoicesmessages.google.com^$script,domain=djxmaza.in|dev.miuiflash.com|thecubexguide.com
+||google.com/ads/*$image,domain=djxmaza.in|dev.miuiflash.com|thecubexguide.com
+dev.miuiflash.com,djxmaza.in,thecubexguide.com##[id*="div-gpt-ad-"], [id*="google_ads_"]
+djxmaza.in,miuiflash.com,thecubexguide.com###featuredimage
+djxmaza.in,miuiflash.com,thecubexguide.com##+js(rpnt, script, featuredimage', container', condition, getComputedStyle)
+djxmaza.in,miuiflash.com,thecubexguide.com##+js(rmnt, script, checkifscript)
+djxmaza.in,miuiflash.com,thecubexguide.com##+js(rpnt, script, IFRAME", CONTAINER")
+dev.miuiflash.com,djxmaza.in,thecubexguide.com##+js(rpnt, script, iframe., form.)
+dev.miuiflash.com,djxmaza.in,thecubexguide.com##+js(rpnt, script, /none'|hidden'|, false')
+dev.miuiflash.com,djxmaza.in,thecubexguide.com##+js(rpnt, script, /none"|hidden"/, false")
+dev.miuiflash.com,djxmaza.in,thecubexguide.com##+js(rpnt, script, /undefined|null/, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/rr818d/
+akoam.*##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/105249
+javhdfree.icu##+js(aopr, __Y)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/105224
+! https://github.com/uBlockOrigin/uAssets/issues/21075
+porner.tv##.sources
+porner.tv##.show.mobileSources
+porner.tv##[href^="https://a.medfoodsafety.com/loader"]
+porner.tv##.container > .HeaderLinks
+porner.tv##.HeaderBanner
+porner.tv##.defaultAd
+
+! https://pornocomics. online/net popups forced overlay
+pornocomics.*###dclm_modal_screen
+pornocomics.*###dclm_modal_content
+pornocomics.*##*:style(filter: none !important)
+pornocomics.*##+js(aeld, , pop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11173
+techkaran.co.in##+js(acs, decodeURIComponent, ai_)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11174
+@@||dosgamezone.com^$image,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/11185
+jpoplist.us##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11187
+423down.com##+js(aeld, DOMContentLoaded, adsBlocked)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/rvomws/bluraycom_ubo_v1402/
+blu-ray.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11198
+rosefile.net##+js(acs, document.addEventListener, nextFunction)
+
+! https://jbbs.shitaraba.net/bbs/read.cgi/internet/25463/1598352715/430
+ac-illust.com,photo-ac.com##+js(set, enable_dl_after_countdown, true)
+ac-illust.com,photo-ac.com##+js(set, isGGSurvey, true)
+ac-illust.com,photo-ac.com###eachDownloadedModal:has(.ac-btn[href^="https://premium."])
+ac-illust.com,photo-ac.com##.modal-backdrop
+ac-illust.com,photo-ac.com##body.modal-open *:style(filter: none!important;)
+
+! PopAds-sites
+!#if cap_html_filtering
+123-movies.*,123movies4u.site,123movieshd.*,123movieshub.*,123moviesme.*,1337x.*,1337xporn.com,141jav.com,1bit.space,1bitspace.com,1stream.*,1tamilmv.*,2ddl.*,2umovies.*,38dh2.top,3dporndude.com,3hiidude.*,4archive.org,4horlover.com,4stream.*,560pmovie.com,5movies.*,60fps.xyz,7hitmovies.*,85tube.com,85videos.com,8xlinks.click,9xmovie.*##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+a2zcrackworld.com,aagmaal.*,aazzz.xyz,acefile.co,actusports.eu,adblockeronstape.*,adblockeronstreamtape.*,adblockplustape.com,adblockstreamtape.*,adblockstrtape.*,adblockstrtech.*,adblocktape.*,adclickersbot.com,adcorto.*,adricami.com,adslink.pw,adultstvlive.com,adz7short.space,aeblender.com,ahdafnews.blogspot.com,ak47sports.com,akuma.moe,alexsports.*,alexsports.*,alexsportss.*,alexsportz.*,allplayer.tk,allstreaming.online,amadoras.cf,amadorasdanet.shop,amateurblog.tv,amateurblog.tv,androidadult.com,anhsexjav.xyz,anidl.org,anime-loads.org,animeblkom.net,animefire.net,animelek.me,animepahe.*,animesanka.*,animeshouse.net,animespire.net,animestotais.xyz,animeyt.es,animixplay.*,aniplay.*,anroll.net,antiadtape.*,anymoviess.xyz,aotonline.org,asenshu.com,asialiveaction.com,asianclipdedhd.net,asianclub.*,ask4movie.*,askim-bg.com,asumsikedaishop.com,atomixhq.*,atomohd.*,avcrempie.com,avseesee.com##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+backfirstwo.com,bajarjuegospcgratis.com,balkanportal.net,balkanteka.net,bdnewszh.com,beinmatch.*,belowporn.com,bestclaimtrx.xyz,bestgirlsexy.com,bestnhl.com,bestporn4free.com,bestporncomix.com,bet36.es,bhaai.*,bikinitryon.net,birdurls.com,bitsearch.to,blackcockadventure.com,blackcockchurch.org,blackporncrazy.com,blizzboygames.net,blizzpaste.com,blkom.com,blog-peliculas.com,blogtrabalhista.com,blurayufr.xyz,bobsvagene.club,bolly4umovies.click,bonusharian.pro,brilian-news.id,brupload.net,bucitana.com,buffstreams.*##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+cablegratis.online,camchickscaps.com,camgirlcum.com,camgirls.casa,canalesportivo.*,cashurl.in,castingx.net,ccurl.net,celebrity-leaks.net,cgpelis.net,charexempire.com,clasico.tv,clickndownload.*,clicknupload.*,clik.pw,coin-free.com,coins100s.fun,comicsmanics.com,compucalitv.com,coolcast2.com,cosplaytab.com,countylocalnews.com,cpmlink.net,crackstreams.*,crackstreamshd.click,crespomods.com,crisanimex.com,crunchyscan.fr,cuevana3.fan,cuevana3hd.com,cumception.com,curvaweb.com,cutpaid.com##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+daddylive.*,daddylivehd.*,datawav.club,daughtertraining.com,deepgoretube.site,deltabit.co,depvailon.com,derleta.com,desiremovies.*,desivdo.com,desixx.net,detikkebumen.com,deutschepornos.me,devlib.*,diasoft.xyz,directupload.net,diskusscan.com,divxtotal.*,divxtotal1.*,dixva.com,dlhd.sx,dlhd.sx,doctormalay.com,dofusports.xyz,dogemate.com,doods.cam,doodskin.lat,downloadrips.com,downvod.com,dphunters.mom,dragontranslation.com,duddes.xyz,dvdfullestrenos.com,dvdplay.*##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+ebookbb.com,ebookhunter.net,egyanime.com,egygost.com,egyshare.cc,ekasiwap.com,electro-torrent.pl,elil.cc,elixx.*,embed4u.xyz,embedstream.me,enjoy4k.*,eplayer.click,erovoice.us,eroxxx.us,estrenosdoramas.net,estrenosflix.*,estrenosflux.*,estrenosgo.*,everia.club,everythinginherenet.blogspot.com,extrafreetv.com,extremotvplay.com##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+f1stream.*,fapinporn.com,fapptime.com,fashionblog.tv,fashionblog.tv,fastreams.live,faucethero.com,fbstream.*,fembed.com,femdom-joi.com,file4go.*,fileone.tv,film1k.com,filmeonline2023.net,filmesonlinex.org,filmesonlinexhd.biz,filmovi.ws,filmovitica.com,filmymaza.blogspot.com,filmyzilla.*,filthy.family,findav.*,findporn.*,fixfinder.click,flixmaza.*,flizmovies.*,flostreams.xyz,flyfaucet.com,footyhunter.lol,footyhunter3.xyz,forex-golds.com,forex-trnd.com,forumchat.club,forumlovers.club,freemoviesonline.biz,freeomovie.co.in,freeomovie.co.in,freeomovie.to,freeporncomic.net,freepornhdonlinegay.com,freeproxy.io,freetvsports.*,freeuse.me,freeusexporn.com,fsicomics.com,fullymaza.*##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+g3g.*,gambarbogel.xyz,gamepcfull.com,gameronix.com,gamesfullx.com,gameshdlive.net,gameshdlive.xyz,gamesmountain.com,gamesrepacks.com,gamingguru.fr,gamovideo.com,garota.cf,gaydelicious.com,gaypornmasters.com,gaysex69.net,gemstreams.com,get-to.link,girlscanner.org,giurgiuveanul.ro,gledajcrtace.xyz,gocast2.com,gomo.to,gostosa.cf,gotxx.*,grantorrent.*,gtlink.co,gwiazdypornosow.pl##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+haho.moe,hatsukimanga.com,hayhd.net,hdmoviesfair.*,hdmoviesflix.*,hdsaprevodom.com,hdstreamss.club,hentais.tube,hentaistream.co,hentaitk.net,hentaitube.online,hentaiworld.tv,hesgoal.tv,hexupload.net,hhkungfu.tv,highlanderhelp.com,hiidudemoviez.*,hindimean.com,hindimovies.to,hiperdex.com,hiphopa.net,hispasexy.org,hitomi.la,hitprn.com,hoca4u.com,hollymoviehd.cc,hoodsite.com,hopepaste.download,hornylips.com,hotgranny.live,hotmama.live,hqcelebcorner.net,huren.best,hwnaturkya.com,hxfile.co##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+igfap.com,ihdstreams.xyz,iklandb.com,illink.net,imgkings.com,imgsen.*,imgsex.xyz,imgsto.*,imx.to,incest.*,incestflix.*,influencersgonewild.org,infosgj.free.fr,investnewsbrazil.com,itdmusics.com,itopmusic.org,itsuseful.site,itunesfre.com,iwatchfriendsonline.net##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+jackstreams.com,jatimupdate24.com,javcl.com,javf.net,javhay.net,javhoho.com,javhun.com,javleak.com,javmost.*,javporn.best,javsex.to,javtiful.com,jimdofree.com,jiofiles.org,jorpetz.com,journalyc.online,jp-films.com,jpop80ss3.blogspot.com,jpopsingles.eu##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+kantotflix.net,kantotinyo.com,kaoskrew.org,kaplog.com,keeplinks.*,keepvid.*,keralahd.*,keralatvbox.com,khatrimazaful.*,khatrimazafull.*,kimochi.info,kimochi.tv,kinemania.tv,konstantinova.net,koora-online.live,kunmanga.com,kutmoney.com,kwithsub.com##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+ladangreceh.xyz,lat69.me,latinblog.tv,latinblog.tv,latinomegahd.net,lazyfaucet.com,leechall.*,leechpremium.link,legendas.dev,legendei.net,legendei.net,lightdlmovies.blogspot.com,lighterlegend.com,linclik.com,linkebr.com,linkrex.net,links.worldfree4u-lol.online,linksfy.co,linkshorts.*,lody.ink,lovesomecommunity.com,lulustream.com,luluvdo.com,luzcameraeacao.shop##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+manga-oni.com,mangaboat.com,mangagenki.me,mangahere.onl,mangaweb.xyz,mangoporn.net,mangovideo.*,manhwahentai.me,masahub.com,masahub.net,masaporn.*,maturegrannyfuck.com,mdfx9dc8n.net,mdy48tn97.com,mediapemersatubangsa.com,mega-mkv.com,megapastes.com,megapornpics.com,messitv.net,meusanimes.net,milfmoza.com,milfzr.com,millionscast.com,mimaletamusical.blogspot.com,miniurl.*,mirrorace.*,mitly.us,mixdroop.*,mixdrop.*,mkv-pastes.com,mkvcage.*,mlbstream.*,mlsbd.*,mmsbee.*,modb.xyz,monaskuliner.ac.id,moredesi.com,motogpstream.*,movgotv.net,movi.pk,movieplex.*,movierulzlink.*,movies123.*,moviesflix.*,moviesmeta.*,moviessources.*,moviesverse.*,movieswbb.com,moviewatch.com.pk,moviezwaphd.*,mp4upload.com,mrskin.live,mrunblock.*,multicanaistv.com,mundowuxia.com,myeasymusic.ir,myonvideo.com,myyouporn.com##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+narutoget.info,naughtypiss.com,nbastream.*,nerdiess.com,new-fs.eu,newmovierulz.*,newtorrentgame.com,nflstream.*,nflstreams.me,nhlstream.*,niaomea.me,nicekkk.com,nicesss.com,noblocktape.*,nocensor.*,nolive.me,nopay.info,nopay2.info,notformembersonly.com,novamovie.net,novelpdf.xyz,novelssites.com,novelup.top,nsfwr34.com,nu6i-bg-net.com,nudebabesin3d.com,nukedfans.com,nuoga.eu,nzbstars.com##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+ohjav.com,ojearnovelas.com,okanime.xyz,olarixas.xyz,oldbox.cloud,olweb.tv,olympicstreams.me,on9.stream,oncast.xyz,onepiece-mangaonline.com,onifile.com,onionstream.live,onlinesaprevodom.net,onlyfams.*,onlyfullporn.video,onplustv.live,originporn.com,ouo.*,ovagames.com,ovamusic.com,owllink.net##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+packsporn.com,pahaplayers.click,pahe.*,palimas.org,pandafiles.com,papahd.club,papahd1.xyz,password69.com,paste3.org,pastemytxt.com,payskip.org,pctfenix.*,pctnew.*,peeplink.in,peliculas24.*,peliculasmx.net,pelisplus.*,pervertgirlsvideos.com,pervyvideos.com,phim12h.com,picdollar.com,pickteenz.com,pics4you.net,picsxxxporn.com,pinayscandalz.com,pinkueiga.net,piratebay.*,piratefast.xyz,piratehaven.xyz,pirateiro.com,pirlotvonline.org,playtube.co.za,plugintorrent.com,plyjam.*,plylive.*,plyvdo.*,pmvzone.com,porndish.com,pornez.net,pornfetishbdsm.com,pornfits.com,pornhd720p.com,pornhoarder.*,pornobr.club,pornobr.ninja,pornodominicano.net,pornofaps.com,pornoflux.com,pornotorrent.com.br,pornredit.com,pornstarsyfamosas.es,pornstreams.co,porntn.com,pornxbit.com,pornxday.com,portaldasnovinhas.shop,portugues-fcr.blogspot.com,poscishd.online,poscitesch.com,poseyoung.com,pover.org,prbay.*,projectfreetv.*,proxybit.*,proxyninja.org,psarips.*,pubfilmz.com,publicsexamateurs.com,punanihub.com,putlocker5movies.org,pxxbay.com##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+r18.best,racaty.*,ragnaru.net,rapbeh.net,rapelust.com,rapload.org,read-onepiece.net,remaxhd.*,retro-fucking.com,retrotv.org,rintor.*,rnbxclusive.*,rnbxclusive0.*,rnbxclusive1.*,robaldowns.com,rockdilla.com,rojadirecta.*,rojadirectaenvivo.*,rojadirectatvenvivo.com,rojitadirecta.blogspot.com,romancetv.site,rugbystreams.*,rule34.club,rule34hentai.net,rumahbokep-id.com##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+safego.cc,safetxt.*,sakurafile.com,satoshi-win.xyz,scat.gold,scatfap.com,scatkings.com,scnlog.me,scripts-webmasters.net,serie-turche.com,serijefilmovi.com,sexcomics.me,sexdicted.com,sexgay18.com,sexofilm.co,sextgem.com,sextgem.com,sextubebbw.com,sgpics.net,shadowrangers.*,shadowrangers.live,shahee4u.cam,shahi4u.*,shahid4u1.*,shahid4uu.*,shahiid-anime.net,shavetape.*,shemale6.com,shinden.pl,short.es,shortearn.*,shorten.*,shorttey.*,shortzzy.*,showmanga.blog.fc2.com,shrt10.com,shurt.pw,sideplusleaks.net,silverblog.tv,silverblog.tv,silverpic.com,sinhalasub.life,sinsitio.site,sinvida.me,skidrowcpy.com,skidrowfull.com,skidrowreloaded.com,skymovieshd.*,slut.mom,smallencode.me,smoner.com,smplace.com,soccerinhd.com,socceron.name,socceronline.*,softairbay.com,softarchive.*,sokobj.com,songsio.com,souexatasmais.com,sportbar.live,sportea.online,sports-stream.*,sportskart.xyz,sportstream1.cfd,srt.am,srts.me,sshhaa.*,stakes100.xyz,stapadblockuser.*,stape.*,stapewithadblock.*,starmusiq.*,stbemuiptv.com,stockingfetishvideo.com,strcloud.*,stream.lc,stream25.xyz,streamadblocker.*,streamadblockplus.*,streambee.to,streamcdn.*,streamcenter.pro,streamers.watch,streamgo.to,streamhub.*,streamkiste.tv,streamnoads.com,streamoporn.xyz,streamoupload.xyz,streamservicehd.click,streamsport.*,streamta.*,streamtape.*,streamtapeadblockuser.*,streamvid.net,strikeout.*,strtape.*,strtapeadblock.*,strtapeadblocker.*,strtapewithadblock.*,strtpe.*,subtitleporn.com,subtitles.cam,suicidepics.com,supertelevisionhd.com,supexfeeds.com,swatchseries.*,swzz.xyz,sxnaar.com##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+tabooflix.*,tabooporns.com,taboosex.club,tapeantiads.com,tapeblocker.com,tapenoads.com,tapewithadblock.org,teamos.xyz,teen-wave.com,teenporncrazy.com,telegramgroups.xyz,telenovelasweb.com,tennisstreams.*,tensei-shitara-slime-datta-ken.com,tfp.is,tgo-tv.co,thaihotmodels.com,theblueclit.com,thebussybandit.com,theicongenerator.com,thelastdisaster.vip,themoviesflix.*,thepiratebay.*,thepiratebay.*,thepiratebay0.org,thepiratebay0.org,thepiratebay10.info,thesexcloud.com,thisav.*,thothub.today,tightsexteens.com,tmearn.*,tojav.net,tokyoblog.tv,tokyoblog.tv,tonnestreamz.xyz,toonanime.*,top16.net,topvideosgay.com,torlock.*,tormalayalam.*,torrage.info,torrents.vip,torrentz2eu.*,torrsexvid.com,tpb-proxy.xyz,trannyteca.com,trendytalker.com,tumanga.net,turbogvideos.com,turbovid.me,turkishseriestv.org,turksub24.net,tutele.sx,tutelehd.*,tutelehd3.xyz,tv247.us,tvglobe.me,tvpclive.com,tvply.*,tvs-widget.com,tvseries.video##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+u4m.*,ucptt.com,ufaucet.online,ufcfight.online,ufcstream.*,uhdgames.xyz,ultrahorny.com,ultraten.net,unblocknow.*,unblockweb.me,underhentai.net,uniqueten.net,upbaam.com,uploadbuzz.*,upstream.to,usagoals.*##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+valeriabelen.com,verdragonball.online,vexmoviex.*,vfxmed.com,vidclouds.*,video.az,videostreaming.rocks,videowood.tv,vidlox.*,vidorg.net,vidtapes.com,vidz7.com,vikistream.com,vikv.net,vipbox.*,vipboxtv.*,vipleague.*,viprow.*,virpe.cc,visifilmai.org,viveseries.com,vladrustov.sx,volokit2.com,volokit2.com,vstorrent.org##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+w-hentai.com,watch-series.*,watchaccordingtojimonline.com,watchbrooklynnine-nine.com,watchdowntonabbeyonline.com,watchelementaryonline.com,watcheronline.net,watchgleeonline.com,watchjavidol.com,watchkobestreams.info,watchlostonline.net,watchlouieonline.com,watchmonkonline.com,watchparksandrecreation.net,watchprettylittleliarsonline.com,watchrulesofengagementonline.com,watchseries.*,watchthekingofqueens.com,watchthemiddleonline.com,watchtvchh.xyz,webcamrips.com,wickedspot.org,wincest.xyz,witanime.best,wolverdonx.com,wordcounter.icu,worldcupstream.pm,worldmovies.store,worldstreams.click,wpdeployit.com,wqstreams.tk,wwwsct.com##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+xanimeporn.com,xblog.tv,xblog.tv,xclusivejams.*,xmoviesforyou.*,xn--verseriesespaollatino-obc.online,xn--xvideos-espaol-1nb.com,xpornium.net,xsober.com,xvip.lat,xxgasm.com,xxvideoss.org,xxx18.uno,xxxdominicana.com,xxxfree.watch,xxxmax.net,xxxwebdlxxx.top,xxxxvideo.uno,xxxxvideo.uno##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+y2b.wiki,yabai.si,yadixv.com,yayanimes.net,yeshd.net,yodbox.com,youdbox.*,youjax.com,youpits.xyz,yourdailypornvideos.ws,yourupload.com,ytmp3eu.*,yts-subs.*,yts.*,ytstv.me,ytstvmovies.co,ytstvmovies.xyz,ytsyify.co,ytsyifymovie.com##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+zerion.cc,zerocoin.top,zitss.xyz,zooqle.*,zpaste.net,zplayer.live##^script[data-cfasync]:has-text(/h=decodeURIComponent|popundersPerIP/)
+!#else
+123-movies.*,123movies4u.site,123movieshd.*,123movieshub.*,123moviesme.*,1337x.*,1337xporn.com,141jav.com,1bit.space,1bitspace.com,1stream.*,1tamilmv.*,2ddl.*,2umovies.*,38dh2.top,3dporndude.com,3hiidude.*,4archive.org,4horlover.com,4stream.*,560pmovie.com,5movies.*,60fps.xyz,7hitmovies.*,85tube.com,85videos.com,8xlinks.click,9xmovie.*##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+a2zcrackworld.com,aagmaal.*,aazzz.xyz,acefile.co,actusports.eu,adblockeronstape.*,adblockeronstreamtape.*,adblockplustape.com,adblockstreamtape.*,adblockstrtape.*,adblockstrtech.*,adblocktape.*,adclickersbot.com,adcorto.*,adricami.com,adslink.pw,adultstvlive.com,adz7short.space,aeblender.com,ahdafnews.blogspot.com,ak47sports.com,akuma.moe,alexsports.*,alexsports.*,alexsportss.*,alexsportz.*,allplayer.tk,allstreaming.online,amadoras.cf,amadorasdanet.shop,amateurblog.tv,amateurblog.tv,androidadult.com,anhsexjav.xyz,anidl.org,anime-loads.org,animeblkom.net,animefire.net,animelek.me,animepahe.*,animesanka.*,animeshouse.net,animespire.net,animestotais.xyz,animeyt.es,animixplay.*,aniplay.*,anroll.net,antiadtape.*,anymoviess.xyz,aotonline.org,asenshu.com,asialiveaction.com,asianclipdedhd.net,asianclub.*,ask4movie.*,askim-bg.com,asumsikedaishop.com,atomixhq.*,atomohd.*,avcrempie.com,avseesee.com##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+backfirstwo.com,bajarjuegospcgratis.com,balkanportal.net,balkanteka.net,bdnewszh.com,beinmatch.*,belowporn.com,bestclaimtrx.xyz,bestgirlsexy.com,bestnhl.com,bestporn4free.com,bestporncomix.com,bet36.es,bhaai.*,bikinitryon.net,birdurls.com,bitsearch.to,blackcockadventure.com,blackcockchurch.org,blackporncrazy.com,blizzboygames.net,blizzpaste.com,blkom.com,blog-peliculas.com,blogtrabalhista.com,blurayufr.xyz,bobsvagene.club,bolly4umovies.click,bonusharian.pro,brilian-news.id,brupload.net,bucitana.com,buffstreams.*##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+cablegratis.online,camchickscaps.com,camgirlcum.com,camgirls.casa,canalesportivo.*,cashurl.in,castingx.net,ccurl.net,celebrity-leaks.net,cgpelis.net,charexempire.com,clasico.tv,clickndownload.*,clicknupload.*,clik.pw,coin-free.com,coins100s.fun,comicsmanics.com,compucalitv.com,coolcast2.com,cosplaytab.com,countylocalnews.com,cpmlink.net,crackstreams.*,crackstreamshd.click,crespomods.com,crisanimex.com,crunchyscan.fr,cuevana3.fan,cuevana3hd.com,cumception.com,curvaweb.com,cutpaid.com##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+daddylive.*,daddylivehd.*,datawav.club,daughtertraining.com,deepgoretube.site,deltabit.co,depvailon.com,derleta.com,desiremovies.*,desivdo.com,desixx.net,detikkebumen.com,deutschepornos.me,devlib.*,diasoft.xyz,directupload.net,diskusscan.com,divxtotal.*,divxtotal1.*,dixva.com,dlhd.sx,dlhd.sx,doctormalay.com,dofusports.xyz,dogemate.com,doods.cam,doodskin.lat,downloadrips.com,downvod.com,dphunters.mom,dragontranslation.com,duddes.xyz,dvdfullestrenos.com,dvdplay.*##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+ebookbb.com,ebookhunter.net,egyanime.com,egygost.com,egyshare.cc,ekasiwap.com,electro-torrent.pl,elil.cc,elixx.*,embed4u.xyz,embedstream.me,enjoy4k.*,eplayer.click,erovoice.us,eroxxx.us,estrenosdoramas.net,estrenosflix.*,estrenosflux.*,estrenosgo.*,everia.club,everythinginherenet.blogspot.com,extrafreetv.com,extremotvplay.com##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+f1stream.*,fapinporn.com,fapptime.com,fashionblog.tv,fashionblog.tv,fastreams.live,faucethero.com,fbstream.*,fembed.com,femdom-joi.com,file4go.*,fileone.tv,film1k.com,filmeonline2023.net,filmesonlinex.org,filmesonlinexhd.biz,filmovi.ws,filmovitica.com,filmymaza.blogspot.com,filmyzilla.*,filthy.family,findav.*,findporn.*,fixfinder.click,flixmaza.*,flizmovies.*,flostreams.xyz,flyfaucet.com,footyhunter.lol,footyhunter3.xyz,forex-golds.com,forex-trnd.com,forumchat.club,forumlovers.club,freemoviesonline.biz,freeomovie.co.in,freeomovie.co.in,freeomovie.to,freeporncomic.net,freepornhdonlinegay.com,freeproxy.io,freetvsports.*,freeuse.me,freeusexporn.com,fsicomics.com,fullymaza.*##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+g3g.*,gambarbogel.xyz,gamepcfull.com,gameronix.com,gamesfullx.com,gameshdlive.net,gameshdlive.xyz,gamesmountain.com,gamesrepacks.com,gamingguru.fr,gamovideo.com,garota.cf,gaydelicious.com,gaypornmasters.com,gaysex69.net,gemstreams.com,get-to.link,girlscanner.org,giurgiuveanul.ro,gledajcrtace.xyz,gocast2.com,gomo.to,gostosa.cf,gotxx.*,grantorrent.*,gtlink.co,gwiazdypornosow.pl##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+haho.moe,hatsukimanga.com,hayhd.net,hdmoviesfair.*,hdmoviesflix.*,hdsaprevodom.com,hdstreamss.club,hentais.tube,hentaistream.co,hentaitk.net,hentaitube.online,hentaiworld.tv,hesgoal.tv,hexupload.net,hhkungfu.tv,highlanderhelp.com,hiidudemoviez.*,hindimean.com,hindimovies.to,hiperdex.com,hiphopa.net,hispasexy.org,hitomi.la,hitprn.com,hoca4u.com,hollymoviehd.cc,hoodsite.com,hopepaste.download,hornylips.com,hotgranny.live,hotmama.live,hqcelebcorner.net,huren.best,hwnaturkya.com,hxfile.co##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+igfap.com,ihdstreams.xyz,iklandb.com,illink.net,imgkings.com,imgsen.*,imgsex.xyz,imgsto.*,imx.to,incest.*,incestflix.*,influencersgonewild.org,infosgj.free.fr,investnewsbrazil.com,itdmusics.com,itopmusic.org,itsuseful.site,itunesfre.com,iwatchfriendsonline.net##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+jackstreams.com,jatimupdate24.com,javcl.com,javf.net,javhay.net,javhoho.com,javhun.com,javleak.com,javmost.*,javporn.best,javsex.to,javtiful.com,jimdofree.com,jiofiles.org,jorpetz.com,journalyc.online,jp-films.com,jpop80ss3.blogspot.com,jpopsingles.eu##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+kantotflix.net,kantotinyo.com,kaoskrew.org,kaplog.com,keeplinks.*,keepvid.*,keralahd.*,keralatvbox.com,khatrimazaful.*,khatrimazafull.*,kimochi.info,kimochi.tv,kinemania.tv,konstantinova.net,koora-online.live,kunmanga.com,kutmoney.com,kwithsub.com##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+ladangreceh.xyz,lat69.me,latinblog.tv,latinblog.tv,latinomegahd.net,lazyfaucet.com,leechall.*,leechpremium.link,legendas.dev,legendei.net,legendei.net,lightdlmovies.blogspot.com,lighterlegend.com,linclik.com,linkebr.com,linkrex.net,links.worldfree4u-lol.online,linksfy.co,linkshorts.*,lody.ink,lovesomecommunity.com,lulustream.com,luluvdo.com,luzcameraeacao.shop##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+manga-oni.com,mangaboat.com,mangagenki.me,mangahere.onl,mangaweb.xyz,mangoporn.net,mangovideo.*,manhwahentai.me,masahub.com,masahub.net,masaporn.*,maturegrannyfuck.com,mdfx9dc8n.net,mdy48tn97.com,mediapemersatubangsa.com,mega-mkv.com,megapastes.com,megapornpics.com,messitv.net,meusanimes.net,milfmoza.com,milfzr.com,millionscast.com,mimaletamusical.blogspot.com,miniurl.*,mirrorace.*,mitly.us,mixdroop.*,mixdrop.*,mkv-pastes.com,mkvcage.*,mlbstream.*,mlsbd.*,mmsbee.*,modb.xyz,monaskuliner.ac.id,moredesi.com,motogpstream.*,movgotv.net,movi.pk,movieplex.*,movierulzlink.*,movies123.*,moviesflix.*,moviesmeta.*,moviessources.*,moviesverse.*,movieswbb.com,moviewatch.com.pk,moviezwaphd.*,mp4upload.com,mrskin.live,mrunblock.*,multicanaistv.com,mundowuxia.com,myeasymusic.ir,myonvideo.com,myyouporn.com##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+narutoget.info,naughtypiss.com,nbastream.*,nerdiess.com,new-fs.eu,newmovierulz.*,newtorrentgame.com,nflstream.*,nflstreams.me,nhlstream.*,niaomea.me,nicekkk.com,nicesss.com,noblocktape.*,nocensor.*,nolive.me,nopay.info,nopay2.info,notformembersonly.com,novamovie.net,novelpdf.xyz,novelssites.com,novelup.top,nsfwr34.com,nu6i-bg-net.com,nudebabesin3d.com,nukedfans.com,nuoga.eu,nzbstars.com##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+ohjav.com,ojearnovelas.com,okanime.xyz,olarixas.xyz,oldbox.cloud,olweb.tv,olympicstreams.me,on9.stream,oncast.xyz,onepiece-mangaonline.com,onifile.com,onionstream.live,onlinesaprevodom.net,onlyfams.*,onlyfullporn.video,onplustv.live,originporn.com,ouo.*,ovagames.com,ovamusic.com,owllink.net##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+packsporn.com,pahaplayers.click,pahe.*,palimas.org,pandafiles.com,papahd.club,papahd1.xyz,password69.com,paste3.org,pastemytxt.com,payskip.org,pctfenix.*,pctnew.*,peeplink.in,peliculas24.*,peliculasmx.net,pelisplus.*,pervertgirlsvideos.com,pervyvideos.com,phim12h.com,picdollar.com,pickteenz.com,pics4you.net,picsxxxporn.com,pinayscandalz.com,pinkueiga.net,piratebay.*,piratefast.xyz,piratehaven.xyz,pirateiro.com,pirlotvonline.org,playtube.co.za,plugintorrent.com,plyjam.*,plylive.*,plyvdo.*,pmvzone.com,porndish.com,pornez.net,pornfetishbdsm.com,pornfits.com,pornhd720p.com,pornhoarder.*,pornobr.club,pornobr.ninja,pornodominicano.net,pornofaps.com,pornoflux.com,pornotorrent.com.br,pornredit.com,pornstarsyfamosas.es,pornstreams.co,porntn.com,pornxbit.com,pornxday.com,portaldasnovinhas.shop,portugues-fcr.blogspot.com,poscishd.online,poscitesch.com,poseyoung.com,pover.org,prbay.*,projectfreetv.*,proxybit.*,proxyninja.org,psarips.*,pubfilmz.com,publicsexamateurs.com,punanihub.com,putlocker5movies.org,pxxbay.com##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+r18.best,racaty.*,ragnaru.net,rapbeh.net,rapelust.com,rapload.org,read-onepiece.net,remaxhd.*,retro-fucking.com,retrotv.org,rintor.*,rnbxclusive.*,rnbxclusive0.*,rnbxclusive1.*,robaldowns.com,rockdilla.com,rojadirecta.*,rojadirectaenvivo.*,rojadirectatvenvivo.com,rojitadirecta.blogspot.com,romancetv.site,rugbystreams.*,rule34.club,rule34hentai.net,rumahbokep-id.com##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+safego.cc,safetxt.*,sakurafile.com,satoshi-win.xyz,scat.gold,scatfap.com,scatkings.com,scnlog.me,scripts-webmasters.net,serie-turche.com,serijefilmovi.com,sexcomics.me,sexdicted.com,sexgay18.com,sexofilm.co,sextgem.com,sextgem.com,sextubebbw.com,sgpics.net,shadowrangers.*,shadowrangers.live,shahee4u.cam,shahi4u.*,shahid4u1.*,shahid4uu.*,shahiid-anime.net,shavetape.*,shemale6.com,shinden.pl,short.es,shortearn.*,shorten.*,shorttey.*,shortzzy.*,showmanga.blog.fc2.com,shrt10.com,shurt.pw,sideplusleaks.net,silverblog.tv,silverblog.tv,silverpic.com,sinhalasub.life,sinsitio.site,sinvida.me,skidrowcpy.com,skidrowfull.com,skidrowreloaded.com,skymovieshd.*,slut.mom,smallencode.me,smoner.com,smplace.com,soccerinhd.com,socceron.name,socceronline.*,softairbay.com,softarchive.*,sokobj.com,songsio.com,souexatasmais.com,sportbar.live,sportea.online,sports-stream.*,sportskart.xyz,sportstream1.cfd,srt.am,srts.me,sshhaa.*,stakes100.xyz,stapadblockuser.*,stape.*,stapewithadblock.*,starmusiq.*,stbemuiptv.com,stockingfetishvideo.com,strcloud.*,stream.lc,stream25.xyz,streamadblocker.*,streamadblockplus.*,streambee.to,streamcdn.*,streamcenter.pro,streamers.watch,streamgo.to,streamhub.*,streamkiste.tv,streamnoads.com,streamoporn.xyz,streamoupload.xyz,streamservicehd.click,streamsport.*,streamta.*,streamtape.*,streamtapeadblockuser.*,streamvid.net,strikeout.*,strtape.*,strtapeadblock.*,strtapeadblocker.*,strtapewithadblock.*,strtpe.*,subtitleporn.com,subtitles.cam,suicidepics.com,supertelevisionhd.com,supexfeeds.com,swatchseries.*,swzz.xyz,sxnaar.com##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+tabooflix.*,tabooporns.com,taboosex.club,tapeantiads.com,tapeblocker.com,tapenoads.com,tapewithadblock.org,teamos.xyz,teen-wave.com,teenporncrazy.com,telegramgroups.xyz,telenovelasweb.com,tennisstreams.*,tensei-shitara-slime-datta-ken.com,tfp.is,tgo-tv.co,thaihotmodels.com,theblueclit.com,thebussybandit.com,theicongenerator.com,thelastdisaster.vip,themoviesflix.*,thepiratebay.*,thepiratebay.*,thepiratebay0.org,thepiratebay0.org,thepiratebay10.info,thesexcloud.com,thisav.*,thothub.today,tightsexteens.com,tmearn.*,tojav.net,tokyoblog.tv,tokyoblog.tv,tonnestreamz.xyz,toonanime.*,top16.net,topvideosgay.com,torlock.*,tormalayalam.*,torrage.info,torrents.vip,torrentz2eu.*,torrsexvid.com,tpb-proxy.xyz,trannyteca.com,trendytalker.com,tumanga.net,turbogvideos.com,turbovid.me,turkishseriestv.org,turksub24.net,tutele.sx,tutelehd.*,tutelehd3.xyz,tv247.us,tvglobe.me,tvpclive.com,tvply.*,tvs-widget.com,tvseries.video##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+u4m.*,ucptt.com,ufaucet.online,ufcfight.online,ufcstream.*,uhdgames.xyz,ultrahorny.com,ultraten.net,unblocknow.*,unblockweb.me,underhentai.net,uniqueten.net,upbaam.com,uploadbuzz.*,upstream.to,usagoals.*##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+valeriabelen.com,verdragonball.online,vexmoviex.*,vfxmed.com,vidclouds.*,video.az,videostreaming.rocks,videowood.tv,vidlox.*,vidorg.net,vidtapes.com,vidz7.com,vikistream.com,vikv.net,vipbox.*,vipboxtv.*,vipleague.*,viprow.*,virpe.cc,visifilmai.org,viveseries.com,vladrustov.sx,volokit2.com,volokit2.com,vstorrent.org##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+w-hentai.com,watch-series.*,watchaccordingtojimonline.com,watchbrooklynnine-nine.com,watchdowntonabbeyonline.com,watchelementaryonline.com,watcheronline.net,watchgleeonline.com,watchjavidol.com,watchkobestreams.info,watchlostonline.net,watchlouieonline.com,watchmonkonline.com,watchparksandrecreation.net,watchprettylittleliarsonline.com,watchrulesofengagementonline.com,watchseries.*,watchthekingofqueens.com,watchthemiddleonline.com,watchtvchh.xyz,webcamrips.com,wickedspot.org,wincest.xyz,witanime.best,wolverdonx.com,wordcounter.icu,worldcupstream.pm,worldmovies.store,worldstreams.click,wpdeployit.com,wqstreams.tk,wwwsct.com##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+xanimeporn.com,xblog.tv,xblog.tv,xclusivejams.*,xmoviesforyou.*,xn--verseriesespaollatino-obc.online,xn--xvideos-espaol-1nb.com,xpornium.net,xsober.com,xvip.lat,xxgasm.com,xxvideoss.org,xxx18.uno,xxxdominicana.com,xxxfree.watch,xxxmax.net,xxxwebdlxxx.top,xxxxvideo.uno,xxxxvideo.uno##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+y2b.wiki,yabai.si,yadixv.com,yayanimes.net,yeshd.net,yodbox.com,youdbox.*,youjax.com,youpits.xyz,yourdailypornvideos.ws,yourupload.com,ytmp3eu.*,yts-subs.*,yts.*,ytstv.me,ytstvmovies.co,ytstvmovies.xyz,ytsyify.co,ytsyifymovie.com##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+zerion.cc,zerocoin.top,zitss.xyz,zooqle.*,zpaste.net,zplayer.live##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+!#endif
+*$script,domain=gamesmountain.com,3p,denyallow=fbcdn.net|facebook.net
+*$script,domain=mangagenki.me,3p,denyallow=disqus.com|disquscdn.com|fastlylb.net
+*$script,domain=masaporn.xyz,3p
+*$script,domain=megapornpics.com,3p,denyallow=wankgod.com
+*$script,domain=onlyfullporn.video,3p,denyallow=twitter.com|facebook.net|vk.com|zencdn.net|unpkg.com|fastly.net|fbcdn.net
+*$script,3p,domain=moredesi.com,denyallow=google.com|wp.com|disqus.com|pinterest.com|fastlylb.net|fastly.net
+! https://github.com/uBlockOrigin/uBlock-discussions/discussions/790
+! https://github.com/uBlockOrigin/uAssets/issues/21669
+/^https:\/\/www\.[a-z]{8,14}\.com\/[a-z]{1,4}\.js$/$script,3p,match-case,from=~edu|~gov,to=~exploretock.com
+! https://github.com/uBlockOrigin/uAssets/issues/19539 new variants
+! https://github.com/uBlockOrigin/uAssets/issues/19848
+/^https:\/\/www\.[a-z]{8,16}\.com\/(?:static\/)?(?:common\/)?(?:assets\/)?(?:scripts\/)?(?:api\/)?(?:js\/)?(?:[_0-9A-Za-z]{1,20}[-.])*[_0-9A-Za-z]{1,20}[-.]min\.js$/$script,3p,match-case,from=1337xporn.com|560pmovie.com|a2zcrackworld.com|adricami.com|adultstvlive.com|aeblender.com|afrohung.com|animespire.net|app|asialiveaction.com|asianclipdedhd.net|asumsikedaishop.com|best|bet36.es|beauty|bid|bikinitryon.net|biz|blackcockadventure.com|blackcockchurch.org|blackporncrazy.com|blog.fc2.com|blogspot.com|blogtrabalhista.com|brilian-news.id|bucitana.com|cam|camgirlcum.com|castingx.net|cc|cf|cfd|cgpelis.net|ch|click|cloud|club|co|compupaste.com|cosplaytab.com|crespomods.com|cuevana3hd.com|cyou|date|derleta.com|desixx.net|detikkebumen.com|diskusscan.com|dixva.com|download|downloadrips.com|downvod.com|egygost.com|ekasiwap.com|erovoice.us|family|fapinporn.com|filmeonline2023.net|freeporncomic.net|freetvsports.*|freeusexporn.com|fun|gamepcfull.com|gameronix.com|gamesmountain.com|gamingguru.fr|gay|gg|girlscanner.org|giurgiuveanul.ro|gold|guru|gwiazdypornosow.pl|hayhd.net|hotgirlslab.com|igfap.com|incest.*|incestflix.*|info|influencersgonewild.org|ink|io|isladelastentaciones.es|itunesfre.com|jatimupdate24.com|jp-films.com|kantotflix.net|kaoskrew.org|keralatvbox.com|kwithsub.com|la|lat|lazyfaucet.com|lc|life|lighterlegend.com|link|live|lol|maturegrannyfuck.com|mdy48tn97.com|me|media|men|milfmoza.com|moe|mom|monaskuliner.ac.id|multicanaistv.com|myeasymusic.ir|name|naughtypiss.com|new-fs.eu|notformembersonly.com|novelas4k.com|nudebabesin3d.com|offlink.us|ojearnovelas.com|one|online|onlyfams.*|packsporn.com|party|paste3.org|pervertgirlsvideos.com|pervyvideos.com|phim12h.com|pics|picsxxxporn.com|pinayscandalz.com|pinkueiga.net|playtube.co.za|pmvzone.com|pornfetishbdsm.com|pornfits.com|pornhoarder.*|pornodominicano.net|pornredit.com|poscitesch.com|pover.org|pro|pubfilmz.com|publicsexamateurs.com|punanihub.com|rapbeh.net|rapload.org|rapelust.com|red|retrotv.org|rip|robaldowns.com|rumahbokep-id.com|sbs|scatfap.com|scatkings.com|scripts-webmasters.net|seneporno.com|serie-turche.com|sextubebbw.com|shadowrangers.*|shop|sideplusleaks.net|site|souexatasmais.com|stbemuiptv.com|stockingfetishvideo.com|store|stream|subtitleporn.com|supexfeeds.com|sx|sxnaar.com|tabooflix.*|teenporncrazy.com|telenovelasweb.com|thepiratebay.*|to|today|tojav.net|top|torrsexvid.com|trade|trannyteca.com|trendytalker.com|turbogvideos.com|turkishseriestv.org|turksub24.net|tv|uno|valeriabelen.com|vfxmed.com|video|vidtapes.com|vin|vip|visifilmai.org|volokit2.com|watch|watchaccordingtojimonline.com|watchbrooklynnine-nine.com|watchjavidol.com|watchlouieonline.com|webcam|wiki|win|wolverdonx.com|works|wpdeployit.com|ws|xxxdominicana.com|xxxmax.net|xyz|yabai.si|yts.*|zone
+://www.*.css|$script,3p,to=com
+://www.*/images/*.min.js|$script,3p,to=com
+://www.*.com/css/$script,3p,to=com,domain=~principal.com|~principalcdn.com
+://www.*.com/js/css/$script,3p,to=com
+=e3&*,0|$script,3p,to=com
+/^https:\/\/www\.[a-z]{8,16}\.com\/(?:images\/)?(?:static\/)?(?:common\/)?(?:assets\/)?(?:scripts\/)?(?:api\/)?(?:js\/)?(?:[a-z]{3})?(?:[a-z]dom4|dotdotdot|editor|firebase|leaflet\.toolbar|mijs|proj4|sext-all|sha|ummenu|viz)\.js$/$script,3p,match-case
+||pushtoast-a.akamaihd.net^$script,3p
+||nsfwr34.com/ad_schedule/
+mdy48tn97.com##+js(nowoif)
+mdy48tn97.com##div[style="position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; z-index: 2147483646;"]
+
+! popMagic-sites
+141tube.com,18porncomic.com,19-days-manga.com,1piecemanga.com,1punchman-manga.com,1teentubeporn.com,1youngteenporn.com,3dhentai.club,3gaytube.com,3prn.com,3xamatorszex.hu,3xfaktor.hu,4archive.org,4porn4.com,560pmovie.com,6indianporn.com,7mmtv.sx,85tube.com,8muses.xxx##+js(acs, document.querySelectorAll, popMagic)
+a-hentai.tv,aagmaal.com,aav.digital,ablefast.com,adltc.cc,adslink.pw,adultoffline.com,adultporn.com.es,aflamsexnek.com,ahri8.*,akatsuki-no-yona.com,akutsu-san.com,al4a.com,allafricangirls.net,allcelebs.club,allporncartoons.com,allpussynow.com,allteensnude.net,allureamateurs.net,alotporn.com,amateur-mature.net,amateurandreal.com,amateurbeachspy.com,amateurfapper.com,amateurfun.net,amateurporn.co,amazingtrannies.com,animecast.net,animeidhentai.com,animekage.net,animesex.me,animetoast.cc,annoncesescorts.com,anusling.info,anybunny.com,anynude.net,aoashimanga.com,arabxd.com,arabxforum.com,arabxnx.com,archivebate.com,arcjav.com,asianpornfilms.com,asianpornphoto.net,asianstubefuck.com,asianteenagefucking.com,asiaon.*,asiaontop.com,assesphoto.com,av-uncen.com,axporn.com##+js(acs, document.querySelectorAll, popMagic)
+b4watch.com,babesexpress.com,babesvagina.com,babesxworld.com,banglachoti-story.com,bangx.org,bbw.com.es,bbw6.com,bbwfest.com,bbwfuckpic.com,bcmanga.com,bdsm-fuck.com,bdsm-photos.com,bdsmporn.cc,bdsmstreak.com,beegsexxx.com,beemtube.com,beginningmanga.com,belloporno.com,best18teens.com,bestblackgay.com,bestcam.tv,bestgrannies.com,besthdgayporn.com,bestlist.top,bestpornflix.com,bestpussypics.net,bestsextoons.com,bestshemaleclips.com,bigboobs.com.es,bigwank.com,birdurls.com,bjhub.me,black-matures.com,black-porn-pics.org,blackamateursnaked.com,blackchubbymovies.com,blackcunts.org,blackedtube.com,blackmaturevideos.com,blackpornhq.com,blacksexmix.com,blackteen.link,blowjobamateur.net,bobolike.com,bokepxv.com,bolly-tube.com,bollywoodx.org,boobs-mania.com,boolwowgirls.com,booru.eu,bootyexpo.net,borwap.xxx,boxporn.net,boystube.link,brazzersbabes.com,bucetaspeludas.com.br,bunkr.*,bunkrr.*,buondua.com,bustmonkey.com,bustyfats.com,bustyshemaleporn.com##+js(acs, document.querySelectorAll, popMagic)
+caitlin.top,callofnight.com,camcam.cc,camgirlfap.com,camgreat.com,cartoonporncomics.info,cartoonvideos247.com,cat3movie.org,cbt-tube.net,cdimg.blog.2nt.com,celebjared.net,celebrityleakednudes.com,celebritynakeds.com,celebsnudeworld.com,celebwhore.com,centralboyssp.com.br,cerdas.com,cervezaporno.com,cfake.com,chicasdesnudas.xxx,chinesesexmovie.net,chopris.com,chubbyelders.com,chubbypornmpegs.com,cine-calidad.*,classicxmovies.com,clicporn.com,clothing-mania.com,comicsarmy.com,comicsporno.xxx,comicspornos.com,comicspornoxxx.com,comicsvalley.com,comicsxxxgratis.com,comicxxx.eu,crazyporn.xxx,crockotube.com,crossdresserhub.com,csrevo.com,cuckold-videos.org,cuckold.it,cutiecomics.com,czechsex.net,czechvideo.org##+js(acs, document.querySelectorAll, popMagic)
+daftporn.com,daftsex.net,daftsex.org,dailyjav.co,danmachimanga.com,darknessporn.com,dataporn.pro,dbs-manga.online,deathistheonlyendingforthevillainess.online,debridup.com,deepfucks.com,deepthroat-porn.com,depvailon.com,descargaranimes.com,desihoes.com,desijugar.net,desimms.co,digitalbeautybabes.com,dikgames.com,dirtybadger.com,dirtyfox.net,dirtygangbangs.com,dirtyporn.cc,dirtytamil.com,dirtytamil.com,dlgal.com,dlouha-videa.cz,domahatv.com,domahi.net,donna-cerca-uomo.com,doujindesu.*,douxporno.com,drsnysvet.cz,dumpz.net##+js(acs, document.querySelectorAll, popMagic)
+eahentai.com,ebonyamateurphoto.com,ebonyassclips.com,ebuxxx.net,ehotpics.com,epornstore.com,ero18.cc,eroasmr.com,eroclips.org,erogarga.com,erotichun.com,erotichunter.com,eroticmv.com,eroticteensphoto.net,eroxxx.us,escort-in-italia.com,escortconrecensione.com,eshentai.tv,everia.club,everysextube.com,ex-foary.com,eztvtorrent.co##+js(acs, document.querySelectorAll, popMagic)
+familyporner.com,famosas-desnudas.org,famousnipple.com,fap16.net,fapcat.com,fapdrop.com,faperplace.com,fapset.com,faptube.com,fapxl.com,fatblackmatures.com,fattubevideos.net,fatwhitebutt.com,fatxxxtube.com,felizporno.com,femdomworld.com,femjoybabes.com,fetish-bb.com,fetish-tv.com,fetishburg.com,ffjav.com,fileone.tv,film1k.com,filmpornoitaliano.org,filmyporno.tv,finderporn.com,finding-camellia.com,findtranny.com,finevids.xxx,folgenporno.com,footfetishvid.com,free-gay-clips.com,free-trannyporn.com,freeadultvideos.cc,freefatpornmovies.com,freegrannypornmovies.com,freehdvideos.xxx,freeomovie.to,freepdfcomic.com,freepornhdonlinegay.com,freepornjpg.com,freepublicporn.com,freesex-1.com,freexxxvideos.pro,freshscat.com,freshshemaleporn.com,frprn.com,ftopx.com,fuckingsession.com,fuckmilf.net,fucktube4k.com,fuxnxx.com##+js(acs, document.querySelectorAll, popMagic)
+gatasdatv.com,gay-streaming.com,gay-tubes.cc,gay4porn.com,gayboyshd.com,gayboystube.top,gayfor.us,gayforfans.com,gaypornhdfree.com,gaypornlove.net,gaystream.pw,gayteam.club,gayvideo.me,gayxxxtube.net,gekkouscans.com.br,generalpornmovies.com,ggbases.com,ghettopearls.com,gifcandy.net,girlfriendsexphoto.com,girlfuckgalleries.com,girlnude.link,glavmatures.com,gonewild.co,gonzoporn.cc,good-babes.com,goodporn.to,goshow.tv,gotporn.com,gotxx.*,grannyxxxtube.net,gravuregirlz.com,greatestshemales.com,greatnass.com,greensmut.com,grigtube.com##+js(acs, document.querySelectorAll, popMagic)
+hachiraw.com,haho.moe,hanime.space,hanimesubth.com,hardfacefuck.com,hcbdsm.com,hd-xxx.me,hdgayporn.net,hdjavonline.com,hdpicsx.com,hdporn-movies.com,hdpornzap.com,hdtubesex.net,hentai-ani.me,hentai-asia.com,hentai-cosplays.com,hentai-for.net,hentai-hot.com,hentai-senpai.*,hentai.tv,hentai20.com,hentai20.io,hentai3z.com,hentaiarena.com,hentaiasmr.moe,hentaibrasil.info,hentaibros.com,hentaicity.com,hentaicore.org,hentaienglish.com,hentaihaven.com,hentaihaven.red,hentaihd.xyz,hentaila.com,hentaila.tv,hentaipins.com,hentaiporno.xxx,hentaisenpai.*,hentaiteca.net,hentaitk.net,hentaitube1.lol,hentaiworld.tv,hentaiyes.com,herexxx.com,heroine-xxx.com,highporn.net,hindilinks4u.*,hiperdex.com,hit-erotic.com,hitprn.com,hmanga.asia,ho6ho.com,holaporno.xxx,hoporno.net,hornbunny.com,hornyfanz.com,hotgirl.biz,hotgirlhub.com,hotleak.vip,hotmarathistories.com,hotmaturegirlfriends.com,hotmirrorpics.com,hotntubes.com,hotsexstory.xyz,hotshag.com,house.porn,hqporner.top,hqpornero.com,hqpornstream.com,huyamba.*##+js(acs, document.querySelectorAll, popMagic)
+ibecamethewifeofthemalelead.com,ibradome.com,iceporn.tv,ideal-teens.com,ilikecomix.com,imagetwist.netlify.app,imgflare.com,in91vip.win,incontri-in-italia.com,indiansexbazar.com,indianxxx.us,influencersgonewild.com,ingyenszexvideok.hu,iporntoo.com,iusedtobeaboss.com##+js(acs, document.querySelectorAll, popMagic)
+j-pussy.com,j91.asia,japaneseasmr.com,japanfuck.com.es,japantaboo.com,japanxxxmovie.com,japteenx.com,jasmr.net,jav-torrent.org,jav-xx.com,jav.one,jav101.online,jav380.com,javbake.com,javbest.xyz,javbix.com,javbob.co,javbull.tv,javcensored.net,javdoge.com,javenspanish.com,javfav.com,javfullmovie.com,javfun.me,javgrab.com,javhd.*,javhoho.com,javhun.com,javjavhd.com,javmelon.com,javmilf.xyz,javmobile.net,javmoviexxx.com,javneon.tv,javnew.net,javpan.net,javpool.com,javporn.tv,javpornfull.com,javprime.net,javpro.cc,javrave.club,javraveclub.com,javrip.net,javroi.com,javsaga.ninja,javsex.guru,javsexfree.com,javstor.com,javstream.com,javsub-english.top,javtsunami.com,javtv.to,javuncensored.watch,javvideo.xyz,javxxxporn.com,jizz.us,jotea.cl,jpeg.pet,jpg.fishing,jpg2.su,jpvhub.com,juicy3dsex.com,jujmanga.com,jujustu-kaisen.com,justsexpictures.com##+js(acs, document.querySelectorAll, popMagic)
+kaoskrew.org,kenzato.uk,kiaporn.com,kill-the-hero.com,kinkyporn.cc,kissjav.*,klikmanga.com,klmanga.*,komikstation.com,komisanwamanga.com,kropic.com,krx18.com,kubo-san.com,kvador.com##+js(acs, document.querySelectorAll, popMagic)
+latino69.fun,latinohentai.com,ldkmanga.com,leakedzone.com,leaktube.net,lesbiansex.best,lesbiantube.club,lesboluvin.com,lewdstars.com,lewdweb.net,likuoo.video,linkbr.xyz,ljcam.net,lnk2.cc,longporn.xyz,lovelynudez.com,luscious.net,lustteens.net##+js(acs, document.querySelectorAll, popMagic)
+m.sextvx.com,madouqu.com,mainporno.com,mamochki.info,manga-dbs.com,manga-scantrad.*,manga18.club,manga18fx.com,manga18sx.com,mangadass.com,mangadna.com,mangahatachi.com,mangahub.io,mangakio.com,mangaonline.fun,mangarussia.com,manhwa18.cc,manhwaid.org,manhwas.*,manhwascan.net,manyakan.com,mature-tube.sexy,mature4.net,maturepornjungle.com,maturepornphoto.com,maturexxxclips.com,maxjizztube.com,maxtubeporn.net,mdtaiwan.com,meetdownload.com,meetimgz.com,megadede.*,megapornfreehd.com,mercenarymanga.online,mespornogratis.com,micmicidol.*,migliori-escort.com,milf300.com,milftoon.xxx,milkporntube.com,mlookalporno.com,mobifuq.com,mobileporn.cam,mom-pussy.com,mommy-pussy.com,mommyporntube.com,momspost.com,momtubeporn.xxx,momxxx.video,momzr.com,moregirls.org,movies18.net,moviesxxx.cc,mp4-porn.net,mrjav.net,mrpeepers.net,muchfap.com,multporn.net,mushoku-tensei.online,musvozimbabwenews.com,mydesibaba.com,mydesiboobs.com,myfreevintageporn.com,mygalls.com,mypornhere.com,mypornstarbook.net,mypussydischarge.com,myvintageporntube.com,mywatchseries.*,myxclip.com,myyoungbabe.com,myyouporn.com##+js(acs, document.querySelectorAll, popMagic)
+nakedamateurs.link,nakedmature.sexy,nangiphotos.com,nanime.us,napiszar.com,naughtyza.co.za,needgayporn.com,nhentai.*,nicheporno.com,nightlifeporn.com,novinhassafadinhas.com,novojoy.com,novoporn.com,nsfw247.to,nsfwalbum.com,nude-beach-tube.com,nude-teen-18.com,nudebeachpussy.com,nudeblackgirlfriend.com,nudedxxx.com,nudemomshots.com,nudevista.*,nudismteens.com,nudistic.com,nukedfans.com,nuoga.eu,nyaatorrent.com##+js(acs, document.querySelectorAll, popMagic)
+ok.xxx,oncam.me,onejav.online,onepiece-manga-online.net,onepiecemangafree.com,onepunch-manga.com,onepunch.*,onlinefetishporn.cc,onlineporn24.com,onlineporno.cc,onlinepornushka.com,onlinesextube.com,onlinexxx.cc,only4fans.gay,onlygangbang.com,onlygayvideo.com,onlyhgames.com,onlyhotleaks.com,onscreens.me,oosex.net,opomanga.com,orgasmatrix.com,otomi-games.com,overhentai.net##+js(acs, document.querySelectorAll, popMagic)
+palimas.*,parnuhahome.com,pasend.*,pbangels.com,peetube.cc,peliculasmx.net,pelisandseries.net,pelispedia.net,penis-milking.com,penisbuyutucum.net,perfectgirls.*,perfektdamen.co,pervertium.com,petitegirlsnude.com,phim85.com,phonerotica.com,pianmanga.*,picmoney.org,picsfuck.org,picspornamateur.com,pictoa.com,pinayviralsexx.com,pinkporno.*,pinsexygirls.com,pisshamster.com,pissingporn.com,pixhost.*,plumpxxxtube.com,plusone8.com,porn-image.net,porn-sexypics.com,porn0.tv,porn00.org,porn0video.com,porn3dx.com,porn720.*,porn77.info,porn78.info,pornabcd.com,pornachi.com,pornbimbo.com,pornbox.cc,pornchaos.org,pornchimp.com,porncomics.to,porndaa.com,pornditt.com,porndollz.com,porner.tv,pornfuzzy.com,porngayclips.com,porngirlstube.com,porngq.com,porngun.net,pornhat.*,pornhd8k.*,pornhdin.com,pornhegemon.com,pornhex.com,pornhub-teen.com,porninblack.com,pornissimo.org,pornken.com,pornktube.*,pornloupe.com,pornmam.com,pornmom.net,pornmoms.org,pornmonde.com,porno-japones.top,porno-porno.net,porno-rolik.com,pornocolegialas.org,pornocolombiano.net,pornoman.pl,pornomanoir.com,pornone.com,pornonline.cc,pornoperra.com,pornopics.site,pornoreino.com,pornotrack.net,pornpaw.com,pornrabbit.com,pornrewind.com,pornrusskoe.com,pornsai.com,pornsearchengine.com,pornsex-pics.com,pornstargold.com,pornstarsadvice.com,pornteens.mobi,porntin.com,porntrex.pro,porntry.com,porntube18.cc,pornuj.cz,pornvibe.org,pornwatchers.com,pornxp.com,pornxp.org,pornxxxvideos.net,pornyeah.com,pornyeah.com,pornzone.com,povaddict.com,prothots.com,pulpo69.com,punishworld.com,pussy3dporn.com,pussymaturephoto.com,pussymaturephoto.com,pvip.gratis,pygodblog.com##+js(acs, document.querySelectorAll, popMagic)
+qcock.com,queerdiary.com##+js(acs, document.querySelectorAll, popMagic)
+raccontivietati.com,ragnarokmanga.com,randomarchive.com,rapidzona.tv,rawofficethumbs.com,readfireforce.com,realitybrazzers.com,recordbate.com,redamateurtube.com,reddflix.com,redgay.net,rednowtube.com,redpornnow.com,reifporn.de,rentagirlfriendmanga.online,repicsx.com,risefromrubble.com,rphangx.net,rranime.com,rubias19.com,rule34.art,rule34.paheal.net,rule34porn.net,rushporn.xxx,russkoevideoonline.com,rusteensex.com##+js(acs, document.querySelectorAll, popMagic)
+saint.to,sankakucomplex.com,santoinferninho.com,saradahentai.com,savelink.site,scallyguy.com,scat.gold,scatkings.com,scatnetwork.com,screenhumor.com,secondcomingofgluttony.com,see-xxx.com,seed69.com,sekaikomik.live,seksrura.net,seksualios.com,seneporno.com,seoul-station-druid.com,seriesyonkis.*,serverxfans.com,sesso-escort.com,severeporn.com,sex-babki.com,sex-pic.info,sex-torrent.net,sexbixbox.com,sexgay18.com,sexkbj.com,sexmutant.com,sexmv.com,sexoverdose.com,sexpornasian.com,sexpox.com,sexpuss.org,sexrura.com,sextor.org,sextubefun.com,sextubeset.com,sexvideos.host,sexvideos.host,sexy-games.*,sexy-parade.com,sexy-youtubers.com,sexyaporno.com,sexyasianteenspics.com,sexybabespictures.com,sexyebonyteen.com,sexyerotica.net,sexyfreepussy.com,sexyhive.com,sexyteengirlfriends.net,shelovesporn.com,shemalemovies.us,shlink.net,short.croclix.me,simply-hentai.com,sissytube.net,sitarchive.com,skinnyhq.com,sleazedepot.com,smotret-porno-onlain.com,solomax-levelnewbie.*,solomaxlevelnewbie.*,solopornoitaliani.xxx,somulhergostosa.com,sousou-no-frieren.*,spy-x-family.*,spycock.com,spyvoyeur.net,stileproject.com,str8ongay.com,stream-69.com,streamextreme.cc,streamhub.*,streamporn.cc,subdivx.com,submissive-wife.net,supremebabes.com,sweetgirl.org,sxyprn.*,szexvideok.hu##+js(acs, document.querySelectorAll, popMagic)
+tabooporn.tv,tabooporns.com,tamilsexstory.net,taxi69.com,teenage-nudists.net,teenamateurphoto.com,teenbabe.link,teencamx.com,teenpornjpg.com,teenxxxporn.pro,telugusexkathalu.com,tenseishitaraslimedattaken-manga.com,thaihotmodels.com,thatav.net,thebarchive.com,thebeginningaftertheend.*,thecartoonporntube.com,theeminenceinshadowmanga.com,thehentaiworld.com,thelesbianporn.com,thematurexxx.com,theyarehuge.com,thothd.com,thotslife.com,tioanime.com,titsintops.com,tittykings.com,tmohentai.com,tojav.net,tok-thots.com,tokyo-ghoul.online,tokyomotion.com,tokyomotion.net,tokyorevengersmanga.com,tomatespodres.com,tomb-raider-king.com,toon69.com,toonanime.*,topwebgirls.eu,torrent-pirat.com,torture1.net,tpornstars.com,trahino.net,trahodom.com,tranny6.com,trannylibrary.com,trannysexmpegs.com,trannyxxxtube.net,transexuales.gratis,truyenhentai18.net,ts-mpegs.com,tsmovies.com,tubegaytube.com,tubepornnow.com,tuberzporn.com,tubexo.tv,tuhentaionline.com,turbogvideos.com,turboimagehost.com,tvporn.cc,twink-hub.com##+js(acs, document.querySelectorAll, popMagic)
+ulsex.net,ultraten.net,uncensoredleak.com,uniqueten.net,up-load.io,upicsz.com,uporn.icu,urgayporn.com,usaxtube.com##+js(acs, document.querySelectorAll, popMagic)
+vcp.xxx,ver-mangas-porno.com,verhentai.top,vermangasporno.com,verpeliculasporno.gratis,videodotados.com,videos-xxx.*,videosputas.xxx,videosxxxporno.gratis,videosxxxputas.com,videoxxx.cc,viewmature.com,vintageporntubes.com,vipporns.com,viralxvideos.es,vkrovatku.com,voyeurblog.net,voyeurxxxsex.com,vzrosliedamy.com##+js(acs, document.querySelectorAll, popMagic)
+wannafreeporn.com,wantmature.com,waploaded.com,watchfreejavonline.co,watchfreekav.com,watchhentai.net,watchporn.cc,watchporninpublic.com,watchseries1.*,webcams.casa,webtoonscan.com,westmanga.info,wetpussy.sexy,wetsins.com,womennaked.net,wonporn.com,worldsex.com,wow-mature.com,wowxxxtube.com##+js(acs, document.querySelectorAll, popMagic)
+x-movie7.com,x-videos.name,x18.xxx,x24.video,xanimehub.com,xanimu.com,xasiat.com,xculitos.com,xemales.com,xero.porn,xexle.com,xfantazy.org,xforum.live,xfreehd.com,xfreepornsite.com,xhamsterteen.com,xkeezmovies.com,xnxx-downloader.net,xnxx.party,xnxxhamster.net,xnxxvideo.pro,xpicse.com,xpornzo.com,xsexpics.com,xsexpics.com,xspiel.com,xsportshd.com,xszav.club,xvideis.cc,xvideos.name,xvideosxporn.com,xxf.mobi,xxr.mobi,xxu.mobi,xxx-videos.org,xxxcomics.org,xxxfiles.*,xxxhub.cc,xxxonline.cc,xxxopenload.com,xxxputas.net,xxxrip.net,xxxtor.com,xxxxselfie.com##+js(acs, document.querySelectorAll, popMagic)
+y-porn.com,yaoiscan.com,yona-yethu.co.za,yongfucknaked.com,youngbelle.net,youngerasiangirl.net,youngerporn.mobi,youngleak.com,youngsexygfs.com,youpornfm.com,youramateurporn.com,yporn.tv,ytanime.tv,yy1024.net##+js(acs, document.querySelectorAll, popMagic)
+zonavideosx.com,zthots.com##+js(acs, document.querySelectorAll, popMagic)
+6indianporn.com,aiimgvlog.fun,amateurebonypics.com,amateuryoungpics.com,cinemabg.net,desimmshd.com,frauporno.com,givemeaporn.com,jav-asia.top,javf.net,javideo.net,kr18plus.com,luscious.net,picbaron.com,pilibook.com,pornborne.com,porngrey.com,pornktube.*,qqxnxx.com,sexvideos.host,submilf.com,subtaboo.com,tktube.com,watchseries.*,xfrenchies.com##+js(aeld, , popMagic)
+allcalidad.*,camarchive.tv,crownimg.com,freejav.guru,gntai.*,grantorrent.*,hentai2read.com,hentai2w.com,icyporno.com,illink.net,javtiful.com,m-hentai.net,mejortorrent.*,mejortorrento.*,mejortorrents.*,mejortorrents1.*,mejortorrentt.*,pornblade.com,pornfelix.com,pornxxxxtube.net,redwap.me,redwap2.com,redwap3.com,sunporno.com,tubxporn.xxx,ver-comics-porno.com,ver-mangas-porno.com,xanimeporn.com,xxxvideohd.net,zetporn.com##+js(aeld, click, popMagic)
+gaygo.tv##+js(acs, $, popMagic)
+!#if cap_html_filtering
+cine-calidad.*,veryfreeporn.com##^script:has-text(popMagic)
+!#else
+cine-calidad.*,veryfreeporn.com##+js(rmnt, script, popMagic)
+!#endif
+simpcity.su##+js(aeld, , open)
+||xsportshd.com/bet.gif$image
+manhwaid.org##.c-top-sidebar
+familyporner.com##.inside-list-boxes:upward(1)
+sexoverdose.com##.table
+3sexporn.com,momxxxsex.com,myfreevintageporn.com,penisbuyutucum.net##+js(set, open, undefined)
+porntrex.pro##.happy-footer
+||javideo.net/js/popup.js
+||javf.net/js/popup.js
+||watchfreejavonline.co/*.gif$image,1p
+||wp.com/*.gif$image,domain=watchfreejavonline.co
+watchfreejavonline.co##[href*="affpa.top"]
+javbull.tv,javsaga.ninja##.pb-3.text-center
+xero.porn###popad
+xero.porn##div[onclick^="$\(\"#videoAd"]
+xero.porn##div[style="background:#222;width:100%;overflow:hidden;"]
+||xero.porn/videoAd
+xxxfiles.*##.underplayer_banner
+javbake.com,javcensored.net,javdoge.com,javsexfree.com,javuncensored.watch##.adstrick > .video-item:style(clear: none !important;)
+javbake.com,javcensored.net,javdoge.com,javsexfree.com,javuncensored.watch##.itemads
+cat3movie.org###ads-preload
+cat3movie.org##.float-ck-center-lt
+asianpornfilms.com##.underplayer_banner
+pussymaturephoto.com##div[class^="mikex"]:upward(1)
+hentaiasmr.moe###inPlayerGGzone
+hentaiasmr.moe##.happy-header
+##+js(nowoif)
+javporn.tv,7mmtv.sx,mm9845.com##+js(nowoif)
+mm9845.com##+js(aopr, mm)
+||clenchedyouthmatching.com^
+7mmtv.sx###player-container
+||porngrey.com/js/KVShare.js
+/\/wp-content\/plugins\/\S{40,}\.js\?ver=/$script,1p,domain=rule34porn.net
+hentai-ani.me###floating-banner
+! https://github.com/uBlockOrigin/uAssets/issues/16679
+jpvhub.com##div[style="position: relative; display: flex; flex: 1 1 0%;"] > div[class^="jss"]:has(.exoclick-popunder-trigger)
+jpvhub.com##.MuiGrid-item div[style^="position"] > div:has-text(Skip Ad)
+jpvhub.com##+js(rpnt, script, /.*adConfig.*frequency_period.*/, (async () => {const a=location.href;if(!a.includes("/download?link="))return;const b=new URL(a)\,c=b.searchParams.get("link");try{location.assign(`${location.protocol}//${c}`)}catch(a){}} )();)
+asianclub.tv###player_ad
+asianclub.tv##div[style^="position: fixed; overflow: hidden; right: 0px; bottom: 0px; transform: translate(0px, 0px)"]
+*$popunder,domain=asianclub.tv
+otomi-games.com##.otomi-widget
+||kaguraserver.com/wp-content/uploads/*-Ad-300-
+||kaguraserver.com/wp-content/uploads/*-Ad-728-
+givemeaporn.com,pornborne.com##.sources
+givemeaporn.com,pornborne.com##.JoinChannel
+||manhwascan.net/my2023/my2023_frontend.js
+a-hentai.tv###text-2
+a-hentai.tv##.support-frame
+||subnhanhz.online/static/js/devtools-detector.js
+daftsex.net##.videos > div:not([id])
+||pilixiaoshuo.com^
+||kinkbook.com/ad_media/
+fap16.net##.adsplx300
+tktube.com##+js(set, flashvars.adv_pre_vast, '')
+! TODO: change to ##+js(aeld, { "type": "click", "pattern": "popMagic", "runAt": "idle" })
+fitnakedgirls.com##+js(nowoif)
+javporn.tv##.floating-banner
+javporn.tv###text-6
+! https://github.com/uBlockOrigin/uAssets/issues/18408
+||manga18sx.com/*/nmme_frend.js
+
+! D4zz-sites
+alluretube.com,anyxvideos.com,fetishtube.cc,fucktheporn.com,italianporn.com.es,japanporn.tv,javsub.buzz,lovefap.com,mommysucks.com,mzansinudes.com,napiszar.com,of-model.com,onlineporn24.com,onlyfansleaks.tv,porntube15.com,pornvdoxxx.com,sexavgo.com,sexdiaryz.*,store-of-beats.ru,vlxxs.net##+js(acs, decodeURI, decodeURIComponent)
+vlxxs.net##+js(set, D4zz, noopFunc)
+japanporn.tv##+js(acs, Math.floor, ExoLoader)
+##div[style^="z-index: 999999; background-image: url(\"data:image/gif;base64,"][style$="position: absolute;"]
+.com/f_lo.js|$script,1p
+||a.b.napiszar.com^
+||japanporn.tv/rg3y/*$script
+
+! from pp moved to filters 2020
+jujutsukaisenonline.net,yodbox.com##+js(aopr, mm)
+9xmovie.*##+js(nowoif)
+freeromsdownload.com,roms-download.com,roms-hub.com###ads
+kingdomfiles.com##.col-sm-12 > li
+
+! hilltopads-sites
+! https://github.com/easylist/easylist/pull/10996/
+10convert.com,besthdgayporn.com,bigojav.com,fucksporn.com,fullxcinema1.com,gigmature.com,homemoviestube.com,javchill.com,kisscos.net,kmansin09.com,leermanga.net,mangamovil.net,naijauncut.com,nudeslegion.com,porn00.org,pornohubonline.com,pornxp.com,readwebtoononline.net,sexdiaryz.*,tatli.biz,teenager365.com,weloma.*##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+!#if cap_html_filtering
+besthdgayporn.com##^script:has-text(/popMagic|pop1stp/)
+!#else
+besthdgayporn.com##+js(rmnt, script, /popMagic|pop1stp/)
+!#endif
+fucksporn.com###FloatingLayer
+fucksporn.com##.adv_banners
+fucksporn.com##.prefix-player-out
+
+! AaDetector-sites
+123movies-org.*,aniwave.to,gayteam.club,sflix.*##+js(aopr, AaDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11202
+lavanguardia.com##+js(no-xhr-if, notifier)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11199
+apkowner.org,appsmodz.com##+js(no-xhr-if, googlesyndication)
+appsmodz.com##.sticky-ads
+appsmodz.com##+js(rc, hidden, button)
+appsmodz.com##+js(ra, disabled, button)
+appsmodz.com###timer
+
+! https://github.com/uBlockOrigin/uAssets/issues/11218
+bingotingo.com##+js(rmnt, script, deblocker)
+bingotingo.com##+js(no-xhr-if, googlesyndication)
+bingotingo.com##+js(nano-sib, counter, , 0.02)
+bingotingo.com###please-wait
+
+! https://github.com/uBlockOrigin/uAssets/issues/11223
+@@||kuronime.tv^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/132871
+||watchporn.to/banners.php
+watchporn.to##.table
+! https://github.com/uBlockOrigin/uAssets/issues/15390#issuecomment-1293077428
+! https://github.com/AdguardTeam/AdguardFilters/issues/157349
+watchporn.to##+js(set, flashvars.protect_block, '')
+watchporn.to##+js(set, flashvars.popunder_url, '')
+watchporn.to##[href^="https://go.gkrtmc.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/9448#issuecomment-1006821975
+dotabuff.com##+js(no-fetch-if, ads)
+dotabuff.com##.retaliate.mana-void
+
+! https://github.com/uBlockOrigin/uAssets/issues/11245
+social-unlock.com##+js(set, ad_link, '')
+
+! mrgay. com popunder, popups, ads
+mrgay.com##+js(aopr, mz)
+mrgay.com##+js(nowoif)
+mrgay.com##.headline.wrapper:has-text(Advertisement)
+mrgay.com##.headline.wrapper:has-text(Advertisement) + div
+mrgay.com###und_ban
+mrgay.com##.video-info > section:has-text(Adv)
+mrgay.com##article > .headline:has-text(Suggested)
+mrgay.com##article > .headline:has-text(Suggested) + section
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/106296
+nekolink.site##+js(aopr, __Y)
+
+! https://github.com/bogachenko/fuckfuckadblock/issues/262
+@@||crackturkey.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/11280
+||revive.3wayint.com^
+cdn.gamemonetize.com###imaContainer
+
+! https://github.com/uBlockOrigin/uAssets/issues/11279
+superpsx.com##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11282
+so1.asia##+js(nano-stb, , , 0.02)
+so1.asia##+js(nano-sib, , , 0.02)
+so1.asia##+js(rc, hidden, .panel-body > .text-center > button)
+so1.asia##+js(ra, disabled, .panel-body > .text-center > button)
+so1.asia##.pietimer
+
+! https://github.com/uBlockOrigin/uAssets/issues/11288
+*$image,redirect-rule=2x2.png,domain=searchenginereports.net
+searchenginereports.net##[id^="adboxx"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/11294
+osmanonline.co.uk##.is-sticky
+osmanonline.co.uk##.adfoxly-wrapper
+osmanonline.co.uk##+js(acs, $, modal-window)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11296
+quizack.com##+js(no-fetch-if, googlesyndication)
+quizack.com##+js(nano-stb, isScrexed, 5000)
+quizack.com##[class*="_mosori"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/11297
+netfile.cc##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11298
+ninja.io##+js(set, App.AdblockDetected, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11301
+@@||niftyfutures.org^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/11307
+goshow.tv##+js(aopr, ExoLoader)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11322
+! https://github.com/uBlockOrigin/uAssets/issues/12229
+cocomanga.com##+js(aeld, load, popMagic)
+@@||cocomanga.com^$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/11320
+primeos.in##.elementor-popup-modal
+primeos.in##body:style(overflow: auto !important;)
+||primeos.in/wp-content/uploads/*/Sidebar-Ad*$image
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53692
+! https://github.com/uBlockOrigin/uAssets/issues/11324
+sarapbabe.com##+js(acs, document.querySelector, _0x)
+sarapbabe.com##+js(aopr, decodeURI)
+@@||sarapbabe.com^$ghide
+sarapbabe.com##.has-text-danger
+sarapbabe.com##.navbar-start > a.navbar-item:nth-of-type(4)
+sarapbabe.com##.porn_sites_list
+sarapbabe.com##.is-3.column
+
+! https://github.com/uBlockOrigin/uAssets/issues/11328
+integral-calculator.com##+js(aopr, fallbackAds)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11333
+victor-mochere.com##+js(nostif, ai_)
+
+! buondua.com leftover
+buondua.com##.main-body > div > div[class]:not([class^="item"]):not([class^="article"]):has-text(/^Sponsored ads$/)
+buondua.com##.main-body div[class]:has(> .adsbyexoclick)
+buondua.com##.pagination + br + div[class]
+buondua.com##div[class*="article"] > div:not([class]) > div[class]:has-text(/^Sponsored ads$/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11352
+! https://github.com/AdguardTeam/AdguardFilters/issues/113148
+! https://github.com/AdguardTeam/AdguardFilters/issues/132014
+link.insurance-space.xyz,link.insurglobal.xyz,theconomy.me##+js(set, blurred, false)
+1apple.xyz###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+1apple.xyz##div[id^="wpsafe-wait"]
+insurance-space.xyz##div[id^="bsa-zone_"]
+insurance-space.xyz,theconomy.me###wpsafe-generate:style(display: block !important;)
+insurance-space.xyz,theconomy.me##div[id^="wpsafe-wait"]
+@@||webhostingpost.com^$ghide
+webhostingpost.com###overlay
+best-cpm.com,webhostingpost.com##+js(nowoif)
+webhostingpost.com##+js(acs, $, modal)
+webhostingpost.com##iframe[src="about:blank"]
+insurglobal.xyz###yuidea-snp:style(display: block !important)
+insurglobal.xyz##.yuidea-top
+
+! https://github.com/uBlockOrigin/uAssets/issues/11353
+||rat.xxx/xdman/*
+rat.xxx##+js(aopr, popns)
+rat.xxx##+js(acs, document.write, iframe)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11366
+@@||lablue.de^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/8359
+! https://github.com/uBlockOrigin/uAssets/issues/11373
+! https://github.com/uBlockOrigin/uAssets/issues/14461
+sourceforge.net##+js(set, SF.adblock, true)
+sourceforge.net##+js(nano-stb)
+sourceforge.net##.can-truncate
+sourceforge.net###mirror
+sourceforge.net###nels
+sourceforge.net##.sterling
+||a.slashdotmedia.com^
+
+! https://www.reddit.com/r/uBlockOrigin/comments/s7cjut/antiad_block_on_this_website/
+brizzynovel.com##+js(aeld, DOMContentLoaded, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11376
+@@||urbharat.xyz^$ghide
+proviralhost.com,urbharat.xyz##+js(nano-sib, timePassed, 1300)
+proviralhost.com##.inst > div.text-left
+urbharat.xyz##iframe[width="300"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/11357
+nova.cz##div.vjs-marker-ad
+! https://github.com/AdguardTeam/AdguardFilters/issues/159445
+||ads-twitter.com^$frame,redirect-rule=noopframe,domain=media.cms.nova.cz
+! Slow starting
+media.cms.nova.cz##+js(nano-stb, () => n(t), *)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11387
+! https://github.com/AdguardTeam/AdguardFilters/issues/113426
+rajsayt.xyz##+js(set, blurred, false)
+moddingzone.in,rajsayt.xyz##+js(no-fetch-if, googlesyndication)
+moddingzone.in,rajsayt.xyz###wpsafe-generate:style(display: block !important)
+moddingzone.in,rajsayt.xyz###wpsafe-link:style(display: block !important)
+moddingzone.in,rajsayt.xyz###wpsafe-wait1
+moddingzone.in,rajsayt.xyz###wpsafe-wait2
+moddingzone.in##.wpsafe-top:style(margin-top: 50px !important)
+wplink.*##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11388
+av4asia.com##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11390
+samfirms.com##+js(set, startfrom, 0)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/s8dxnp/adshares_is_using_blockchain_to_bypass_adblockers/
+lbprate.com##^script:has-text(Math.imul)
+lbprate.com##+js(acs, Math.imul)
+lbprate.com##[id^="Ad"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/9932
+cefirates.com##.most-top-bar
+
+! https://twitter.com/CyderChillin/status/1484217787098669057
+||geoplugin.net^$xhr,redirect-rule=noop.txt,domain=taotronics.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/107600
+jaunpurmusic.info##+js(no-fetch-if, googlesyndication)
+jaunpurmusic.info###wpsafe-generate:style(display: block !important;)
+jaunpurmusic.info###wpsafe-link:style(display: block !important;)
+jaunpurmusic.info##div[id^="wpsafe-wait"]
+premiumebooks.xyz##+js(nano-stb, st2)
+premiumebooks.xyz##+js(nano-stb, subentry, 4000)
+||raw.githack.com/*/SpiderBlogging/main/antiadblock/$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/11413
+virpe.cc##+js(acs, document.write)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11424
+suzihaza.com##+js(aopr, __Y)
+
+! https://forums.lanik.us/viewtopic.php?p=162925#p162925
+||static.sunmedia.tv/AdBlockDetection/$script
+
+! https://www.reddit.com/r/uBlockOrigin/comments/sa1487/create_filter_to_run_across_all_pages_of_a_domain/
+freecoursesites.com##+js(acs, eval, replace)
+freecoursesites.com##.herald_adsense_widget
+
+! https://github.com/uBlockOrigin/uAssets/issues/11437
+derivative-calculator.net##+js(aopr, fallbackAds)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11441
+vcdn-stream.xyz##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11443
+! https://github.com/AdguardTeam/AdguardFilters/issues/108210
+! https://github.com/AdguardTeam/AdguardFilters/issues/108330
+! https://github.com/AdguardTeam/AdguardFilters/issues/108435
+apkandroidhub.in,babymodz.com,deezloaded.com,mad.gplpalace.one,studyis.xyz##+js(no-fetch-if, googlesyndication)
+apkandroidhub.in,babymodz.com##.g-recaptcha:style(margin-top:60px !important)
+babymodz.com###footer #wpsafe-link:style(display: block !important;)
+apkandroidhub.in,babymodz.com,deezloaded.com,mad.gplpalace.one,studyis.xyz###wpsafe-generate:style(display: block !important;)
+apkandroidhub.in,babymodz.com,deezloaded.com,mad.gplpalace.one,studyis.xyz##div[id^="wpsafe-wait"]
+apkandroidhub.in,deezloaded.com,mad.gplpalace.one,studyis.xyz###wpsafe-link:style(display: block !important;)
+rocklink.in##+js(set, blurred, false)
+techyreviewx.com##+js(nano-sib, timer, 1800)
+! https://github.com/uBlockOrigin/uAssets/issues/16237
+techyreviewx.com##.get-link:remove-attr(disabled)
+techyreviewx.com##.get-link:remove-class(disabled)
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/1943
+! https://github.com/uBlockOrigin/uAssets/issues/14003
+@@||noviny.sk^$xhr,1p
+*$frame,domain=noviny.sk,redirect-rule=noopframe
+
+! piracy.moe ads
+piracy.moe##main > h2:nth-of-type(1):has-text(Sponsored)
+piracy.moe##[class*="Card_sponsored__"]
+piracy.moe##[class^="SupportBanner_banner__"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/15392
+digminecraft.com##div > [id$="_slot"]:upward(div)
+
+! https://forums.lanik.us/viewtopic.php?t=47826-himovies-to
+rabbitstream.net##+js(set, console.clear, undefined)
+himovies.*##+js(nowoif)
+||ezzmmvzleavnj.top^
+||i.imgur.com/*.gif$image,domain=rabbitstream.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/11461
+rockmods.net##+js(acs, String.prototype.charCodeAt, protected_links)
+
+! pastemytxt.com popup, ad
+||pastemytxt.com/downloadad.jpg
+||imgbox.com^$domain=pastemytxt.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/108235
+hispasexy.org##+js(acs, decodeURI, decodeURIComponent)
+hispasexy.org##+js(aopr, _cpp)
+hispasexy.org##+js(aopr, popns)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/108205
+mp3juices.yt##+js(nowoif, !ytcutter.net)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11473
+@@||plg.ovakode.com^$ghide
+plg.ovakode.com##ins.adsbygoogle
+plg.ovakode.com##.x300bnx
+
+! https://github.com/uBlockOrigin/uAssets/issues/11480
+javplaya.com##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11485
+streamlare.com##+js(set, console.clear, undefined)
+streamlare.com##+js(aopr, open)
+
+! https://github.com/AdguardTeam/AdguardFilters/commit/f73e930289cf09ceff902f7c71f42781551dfaaa
+javfindx.com###previewBox
+mycloudzz.com##+js(aopr, __Y)
+||javfindx.com/sw.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/11478
+javguru.top##+js(nano-sib)
+javguru.top##.ad-parent
+javguru.top##a[href^="https://media.r18.com/"]
+||javevil.com^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/sdowvy/masterduelmeta_and_duelinksmeta_adblock_popups/
+masterduelmeta.com##:xpath('//*[contains(text(),"allow ads")]'):upward(3)
+masterduelmeta.com##html,body:style(overflow: auto !important;)
+*$xhr,redirect-rule=nooptext,domain=masterduelmeta.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/11493
+! https://github.com/uBlockOrigin/uAssets/issues/16027
+@@||delfi.lv^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/11500
+gcertificationcourse.com##+js(acs, eval, replace)
+gcertificationcourse.com##[id*="PAds_"]
+gcertificationcourse.com##[id*="PAds-"]
+gcertificationcourse.com##+js(no-xhr-if, adsbygoogle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11503
+@@||getfree.co.in^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/11505
+sampledrive.in##+js(acs, eval, replace)
+sampledrive.in###block-4
+sampledrive.in###block-6
+*$script,3p,redirect=noop.js,domain=sampledrive.in|shorttrick.in
+! https://www.reddit.com/r/uBlockOrigin/comments/17ux6t3/ublock_is_not_able_to_block_ads_on_this_website/
+sampledrive.in##+js(acs, document.createElement, onerror)
+||d3plnp2f9sfye5.cloudfront.net^$script,redirect-rule=noopjs
+shorttrick.in###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11511
+projectfreetv.one##+js(set, console.clear, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11509
+diglink.blogspot.com##+js(nano-sib)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11513
+re.two.re##+js(nostif, getComputedStyle, 250)
+re.two.re##.ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/11516
+gamingvital.com##+js(acs, decodeURIComponent, ai_)
+gamingvital.com###tdi_132
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/108686
+blindhypnosis.com##.abcd
+blindhypnosis.com##.asdf:style(display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11528
+javpoll.com##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11527
+vivercomsaude.online##.demand-supply
+
+! https://github.com/uBlockOrigin/uAssets/issues/11522
+pornoborshch.com##+js(ra, onclick)
+pornoborshch.com##.on-player-wrap3
+
+! https://www.reddit.com/r/uBlockOrigin/comments/siiumm/adblock_detected_literally_very_hard_to_bypass/
+jojo-themes.net##+js(acs, eval, replace)
+jojo-themes.net##+js(nano-sib, download_delay)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11547
+allstreaming.online##+js(acs, eval, replace)
+allstreaming.online###tab-ad
+allstreaming.online##.les-title:has-text(Sponsor)
+allstreaming.online##.selected:has-text(Sponsor)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11551
+btcadspace.com##+js(acs, document.getElementById, AdBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11558
+@@||seopolarity.com^$ghide
+seopolarity.com##ins.adsbygoogle
+seopolarity.com##.sidebar_adds
+
+! https://www.reddit.com/r/uBlockOrigin/comments/sjeu10/adblock_detected/
+mmorpg.org.pl##+js(no-fetch-if, wtg-ads)
+mmorpg.org.pl##div.bABcMb.sc-5odcub-0
+
+! https://github.com/uBlockOrigin/uAssets/issues/11566
+hostmath.com##+js(set, canRunAds, true)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/109211
+hdmovie20.com##+js(ra, href, #clickfakeplayer)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11570
+playmyopinion.com##+js(acs, $, modal)
+
+! xvideos.wptri.com popup
+xvideos.wptri.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11581
+foodsdictionary.co.il##+js(no-xhr-if, /ad-)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11591
+mcleaks.net##+js(aeld, np.detect)
+mcleaks.net##div.col-lg-12[style="margin-bottom: 30px;"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/skm8da/httpspherotruthcom_anti_adblocker_enabled/
+pherotruth.com##+js(acs, setTimeout, void 0)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11605
+exey.app##+js(aost, document.getElementById, disable)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/109367
+*$xhr,redirect-rule=nooptext,domain=stol.it
+
+! https://github.com/uBlockOrigin/uAssets/issues/11613
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$xhr,domain=yhocdata.com
+yhocdata.com##+js(nano-stb, /__ez|window.location.href/, *)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/109397
+@@||base64.online/ads.txt
+
+! https://www.reddit.com/r/uBlockOrigin/comments/sk2blw/how_to_not_open_some_warns_because_a_filter/
+rapelust.com##+js(set, D4zz, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11622
+vidstreamz.online##[target="_blank"][style]:upward([style])
+vidstreamz.online##.xad-wrapper
+vidstreamz.online##+js(aopr, open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11625
+logikfx.com##.wix-blog-print-in-full-width[data-testid="mesh-container-content"] > div[class^="_"] > div[style="padding-left: 30px;"]
+logikfx.com##p[style="font-size:12px; text-align:center;"] > span:has-text(Advertisement)
+logikfx.com##section.wix-blog-hide-in-print p[style="font-size:12px; text-align:center;"] > span:has-text(Advertisement):upward(section)
+logikfx.com##div[style="width:740px"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/109615
+javplay.me##+js(aopr, popns)
+
+! note.sieuthuthuat.com anti-adb
+note.sieuthuthuat.com##+js(set, isAdBlockActive, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11637
+tutorialspots.com##+js(nowoif)
+||faststream.xyz^$3p
+
+! https://forums.lanik.us/viewtopic.php?t=47286
+myflixertv.to##.modal
+myflixertv.to##.modal-backdrop
+
+! https://github.com/uBlockOrigin/uAssets/issues/11646
+! https://github.com/uBlockOrigin/uAssets/issues/13928
+! https://github.com/uBlockOrigin/uAssets/issues/15413
+etsy.com##body.no-touch li.wt-list-unstyled div.v2-listing-card__info > div.wt-text-caption.wt-text-grey > span:not(.wt-icon):not([aria-role]):matches-css(display:inline-block):has-text(/^Ad/i):upward(li):remove()
+etsy.com##li:not(#ad-ubo) .listing-link[href*="ref=sc_gallery"]:upward(li)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11648
+techhelpbd.com##+js(nano-sib, counter--)
+techhelpbd.com##.THBD-Ads
+techhelpbd.com##.pum-overlay
+techhelpbd.com##html:style(overflow: auto !important)
+! https://github.com/AdguardTeam/AdguardFilters/issues/145843
+techhelpbd.com##+js(no-xhr-if, /doubleclick|googlesyndication/)
+techhelpbd.com##+js(noeval-if, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11650
+hackingfather.com##+js(acs, $, test)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11651
+*$script,redirect-rule=noopjs,domain=pinoyfaucet.com
+pinoyfaucet.com##+js(no-fetch-if, /^/)
+pinoyfaucet.com###wcfloatDiv4
+
+! https://github.com/uBlockOrigin/uAssets/issues/11652
+phica.net##.overlay
+phica.net##.overlay-container
+phica.net##body:style(overflow:auto !important)
+phica.net##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/109767
+javleaked.com,pornhole.club##+js(aopr, __Y)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/109768
+ffem.club##+js(aopr, __Y)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/109826
+jvembed.com##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11657
+drydenwire.com##.modal
+drydenwire.com##.modal-backdrop
+drydenwire.com##[data-track-category="Sponsors"]
+drydenwire.com##.promogrid
+
+! https://github.com/uBlockOrigin/uAssets/issues/11667
+chillx.top##+js(nowoif, !/d/)
+chillx.top,playerx.stream##+js(aeld, click, Popup)
+chillx.top###theotherads
+chillx.top##[style][href][target="_blank"]
+! https://www.reddit.com/r/uBlockOrigin/comments/12vtfx7/
+chillx.top##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/easylist/easylist/commit/7a6130a149d0b832928bf5e8fc6d007aebce7ae6
+adinsurance.xyz,insurglobal.xyz##+js(set, blurred, false)
+adinsurance.xyz,insurglobal.xyz##div[id^="bsa-zone_"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1905#issuecomment-1033865488
+! https://github.com/uBlockOrigin/uAssets/issues/12687
+! https://github.com/uBlockOrigin/uAssets/issues/18953
+! https://www.reddit.com/r/uBlockOrigin/comments/1508u8i/ublockorigin_isnt_blocking_adds_on_bannedvideo/
+banned.video,conspiracyfact.info,freeworldnews.tv,madmaxworld.tv##+js(set, Object.prototype.nopreroll_, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12968
+! https://github.com/uBlockOrigin/uAssets/issues/13806
+faselhd.*##.alert-danger.alert
+faselhd.*###popup
+
+! https://github.com/uBlockOrigin/uAssets/issues/11677
+@@||mittelhessen.de^$ghide
+mittelhessen.de##[class*="banner"]
+mittelhessen.de##[class*="Banner"]
+mittelhessen.de##.adSlot
+
+! https://www.reddit.com/r/uBlockOrigin/comments/spykj6/getcopynet_adblock_detected_and_ads/
+getcopy.link##+js(aopr, lck)
+getcopy.link##+js(refresh-defuser)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/110128
+rule34porn.net##+js(acs, Math.random, ExoLoader)
+rule34porn.net##+js(aopr, decodeURI)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11697
+largescaleforums.com##+js(nostif, ).show())
+
+! https://github.com/uBlockOrigin/uAssets/issues/11698
+crunchyscan.fr##+js(acs, document.write, detect)
+crunchyscan.fr##+js(acs, eval, replace)
+crunchyscan.fr##.col-sm-8.col-md-8.main-col > .c-sidebar
+crunchyscan.fr##.widget_custom_html
+*$script,redirect-rule=noopjs,domain=crunchyscan.fr
+crunchyscan.fr##+js(aopr, open)
+
+! 4stream.*, streambee. to popups
+4stream.*,streambee.to,streamers.watch##+js(nowoif)
+emb.x179759.apl123.me,emb.x187106.apl152.me##+js(nowoif)
+emb.x179759.apl123.me,emb.x187106.apl152.me###ads
+
+! https://www.reddit.com/r/uBlockOrigin/comments/sqymqh/please_fix_those_if_possible/
+! https://github.com/uBlockOrigin/uAssets/issues/16770
+techgeek.digital##+js(aopr, adblockDetector)
+techgeek.digital##+js(nowoif)
+techgeek.digital##+js(set, blurred, false)
+techgeek.digital##.espaciodos
+*$script,redirect-rule=noopjs,domain=gainbtc.click|multiclaim.net|proinfinity.fun
+multiclaim.net###wcfloatDiv4
+multiclaim.net##.home_banner
+gainbtc.click##ins[class][style="display:inline-block;width:728px;height:90px;"]
+||raw.githubusercontent.com/expertad^$3p
+||firebasestorage.googleapis.com/v0/b/gosyndication.appspot.com^
+||gainbtc.click^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/110300
+! https://github.com/AdguardTeam/AdguardFilters/issues/110301
+bestpornflix.com,4porn4.com##.table
+
+! megafilmeseseriesonline. com + player megafilmeshdonline. org popups
+megafilmeshdonline.org##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12476
+beastx.top,playerx.stream###theotherads
+beastx.top,playerx.stream##+js(nowoif, !/d/)
+playerx.stream##[style][href]:upward([style])
+
+! https://github.com/uBlockOrigin/uAssets/issues/11730
+supersextube.pro##+js(nowoif)
+supersextube.pro##.ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/11733
+! https://github.com/uBlockOrigin/uAssets/issues/12249
+h-flash.com##+js(nowoif)
+@@||h-flash.com^$ghide
+h-flash.com##[href^="https://chaturbate.com/in/"]
+h-flash.com###topzone
+*$popunder,domain=h-flash.com
+*$frame,redirect-rule=noopframe,domain=h-flash.com
+h-flash.com##[href^="https://t.aagm.link/"]
+h-flash.com#@#.google-ads
+||imobileporn.com/premium/
+||h-flash.com/data/image/mcs/chat*$image
+h-flash.com##a[style*="/data/image/mcs/chat"]
+h-flash.com##.pagebody:style(height: auto !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ssvdg9/adblock_diagnosis/
+||gratisbitcoin.my.id^$3p
+clickscoin.com##.d-sm-block.d-none
+clickscoin.com##a[href^="https://albeitinflame.com/"]
+! https://www.reddit.com/r/uBlockOrigin/comments/xif3tf/
+||googletagmanager.com/gtag/js$script,xhr,redirect=googletagmanager_gtm.js:5
+
+! https://github.com/uBlockOrigin/uAssets/issues/11743
+
+milf300.com##.bottom_space
+milf300.com##.container > .text-center[style="height: 100px;"]
+milf300.com##div[style="width: 300px;height: 250px;"]
+milf300.com##div[style="width: 300px; height: 250px;"]
+
+! https://github.com/bogachenko/fuckfuckadblock/issues/269
+safe.elektroupdate.com#@#ins.adsbygoogle
+safe.elektroupdate.com##.adsbygoogle:style(height: 1px !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/110510
+eroticity.net##+js(aopr, loadTool)
+||eroticity.net/clientscript/popcode_
+||eroticity.net/clientscript/poptrigger_
+
+! https://github.com/uBlockOrigin/uAssets/issues/11746
+live.dragaoconnect.net###yx-sli1
+live.dragaoconnect.net###yx-sli2
+live.dragaoconnect.net##a[href^="ad/link.php"]
+live.dragaoconnect.net##+js(nostif, 0x)
+live.dragaoconnect.net##+js(nosiif, 0x)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11754
+dev2qa.com##+js(acs, decodeURIComponent, ai_)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/110513
+worldappsstore.xyz##+js(no-fetch-if, googlesyndication)
+worldappsstore.xyz###wpsafe-generate:style(display: block !important)
+worldappsstore.xyz###wpsafe-link:style(display: block !important)
+worldappsstore.xyz###wpsafe-wait1
+worldappsstore.xyz###wpsafe-wait2
+
+! https://github.com/FastForwardTeam/FastForward/issues/354
+ponselharian.com##+js(nowoif)
+||ponselharian.com/img/download_
+
+! nsfw fullxxxporn. net popups
+fullxxxporn.net##+js(aopr, decodeURI)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11768
+*$script,redirect-rule=noopjs,domain=faucetpot.me
+faucetpot.me##.text-center.p-0.order-md-1.col-lg-3.col-md-2.col-6
+faucetpot.me###middle-adspace
+faucetpot.me##.p-0.text-center.col-12
+
+! https://github.com/uBlockOrigin/uAssets/issues/11769
+koreanpornmovie.xyz##+js(aopr, BetterJsPop)
+||koreanpornmovie.xyz/cdn-cgi/trace$1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/sufkbi/ad_blocker_detected_on_plagiarism_detector/
+check-plagiarism.com##[id^="topads_"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/14742
+broflix.club##+js(noeval-if, show)
+broflix.club##.idmuvi-topplayer
+broflix.club##[href^="https://shope.ee/"]
+
+! cine. to popups
+cine.to##+js(aeld, , /open.*_blank/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11779
+thebharatexpressnews.com##+js(aopr, b2a)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/suuxzs/hakienet/
+hakie.net##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/110867
+jav247.top##+js(aopr, __Y)
+
+! vtube .to/vtplay .net ads
+vtube.to##+js(nowoif)
+vtube.to##+js(acs, RegExp, debugger)
+vtube.to##+js(aeld, popstate)
+vtube.to,vtplay.net##+js(set, D4zz, noopFunc)
+/vtu_*.js$script,domain=vtbe.*|vtube.to|vtube.network|vtplay.net|vtplayer.net
+||flirtmeet.life^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/svkkgn/anti_adblock_on_website_98zerocom_how_can_i_solve/
+98zero.com##+js(aopr, adBlockDetected)
+
+! ninjashare. to ads/popups
+ninjashare.to##+js(aopr, console.clear)
+
+! vumoo.cc fake player
+vumoo.cc##+js(ra, href, #clickfakeplayer)
+
+! vumoo.vip propeller
+vumoo.vip##+js(aost, XMLHttpRequest, injectedScript)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/110896
+fashionunited.*##.adunitContainer:upward(3)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11807
+jugomobile.com##+js(aeld, DOMContentLoaded, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11813
+m.liputan6.com##+js(aeld, scroll)
+
+! papunika. com anti adb
+papunika.com##+js(nostif, ai_)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11819
+basic-tutorials.de##+js(aopr, advanced_ads_ready)
+
+! xxxvideohd.net popup
+||xxxvideohd.net/js/main.course.js
+||xxxvideohd.net/js/sellito.js
+
+! https://ca123movies.com/spider-man-2021/ popup
+vidplaystream.top##+js(nowoif)
+vidplaystream.top##div[style="position: fixed; display: block; width: 100%; height: 100%; inset: 0px; background-color: rgba(0, 0, 0, 0); z-index: 300000;"]
+nashstream.top##+js(aopr, __Y)
+||solutions.playernetca.top^
+
+! https://witanime.com/episode/sabikui-bisco-%d8%a7%d9%84%d8%ad%d9%84%d9%82%d8%a9-2/ popup
+yuistream.xyz##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11830
+*$xhr,redirect-rule=noop.txt,domain=thingiverse.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/11841
+! https://github.com/uBlockOrigin/uAssets/issues/12720
+coverapi.store,tenies-online.*##+js(aopr, mm)
+tubeload.co##+js(nowoif)
+coverapi.store##.close00
+
+! https://github.com/uBlockOrigin/uAssets/issues/11847
+*$script,redirect-rule=noopjs,domain=mrlabtest.com
+
+! https://github.com/bogachenko/fuckfuckadblock/issues/273
+infinityblogger.in##+js(acs, eval, replace)
+
+! health-and.me anti-adb, timer https://foofly.xyz/EYwC
+! https://github.com/uBlockOrigin/uAssets/issues/12331
+health-and.me##+js(acs, document.addEventListener, google_ad_client)
+health-and.me##^script:has-text(google_ad_client)
+forexeen.us,health-and.me##+js(nano-sib, counter)
+forexeen.us##+js(nostif, getComputedStyle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11861
+magdownload.org##+js(nostif, _0x)
+magdownload.org##.home-jumbotron
+
+! https://github.com/uBlockOrigin/uAssets/issues/11866
+*$script,domain=multiclaim.net,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/11868
+prepostseo.com##+js(acs, loadAdBlocker)
+prepostseo.com##+js(no-fetch-if, googlesyndication)
+prepostseo.com###top-head-ad
+prepostseo.com###after_button_ad_desktop_2
+prepostseo.com###after_title_ad
+prepostseo.com###after_title_ad_2
+prepostseo.com###above_button_ad
+prepostseo.com###sidebar_ad_big
+prepostseo.com###floorad-wrapper
+prepostseo.com##div[id^="bsa-zone_"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/11882
+bluemoon-mcfc.co.uk##div.stickyContainer
+bluemoon-mcfc.co.uk##[id^="snack_"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/11889
+worldtravelling.com##+js(nostif, ads)
+
+! bdnewszh. com popups, ads
+bdnewszh.com,rainostreams.com##.billboard-banner
+bdnewszh.com,rainostreams.com##.left-sticky-banner
+bdnewszh.com,rainostreams.com##.right-sticky-banner
+bdnewszh.com,rainostreams.com##.content-banner
+bdnewszh.com##.vpn-wrapper
+! http://rainostreams.com/soccer/stream10/?moment= popups, ads
+bdnewszh.com##+js(set, path, '')
+bdnewszh.com##^script:has-text("admc")
+bdnewszh.com##^script:has-text(\"admc\")
+bdnewszh.com##^script:has-text(push)
+embed4u.xyz##.smartlink
+embed4u.xyz###_vliadb83
+
+! https://github.com/uBlockOrigin/uAssets/issues/11896
+order-order.com##+js(acs, Math.random, bait)
+order-order.com###stickyfooterad
+
+! https://github.com/uBlockOrigin/uAssets/issues/11897
+azoraworld.com##+js(acs, String.fromCharCode, ai_adb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11905
+cacfutures.org,comexlive.org,daxfutures.org,dollarindex.org,dowfutures.org,ftsefutures.org,mcxlive.org,nasdaqfutures.org,ncdexlive.org,niftyfutures.org,nikkeifutures.org,sgxnifty.org,spfutures.org##+js(acs, jQuery, "No")
+cacfutures.org,comexlive.org,daxfutures.org,dollarindex.org,dowfutures.org,ftsefutures.org,mcxlive.org,nasdaqfutures.org,ncdexlive.org,niftyfutures.org,nikkeifutures.org,sgxnifty.org,spfutures.org##.ads
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/111313
+huffpost.com##+js(set, HP_Scout.adBlocked, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11920
+! https://github.com/uBlockOrigin/uAssets/issues/19744
+ingles.com,spanishdict.com##+js(set, SD_IS_BLOCKING, false)
+ingles.com,spanishdict.com##+js(aeld, , isBlocking)
+ingles.com,spanishdict.com###adTopLarge-container
+ingles.com,spanishdict.com##[id^="adSide"]
+@@||d1q4kshf6f0axi.cloudfront.net/main/prebid-min-2022.js$script,domain=spanishdict.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/111499
+ikuhentai.net##div[style="position: fixed; display: block; width: 100%; height: 100%; inset: 0px; background-color: rgba(0, 0, 0, 0); z-index: 300000;"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/160924
+zeroupload.com##+js(rmnt, script, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11941
+*$script,redirect-rule=noopjs,domain=vimm.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/11965
+! https://github.com/uBlockOrigin/uAssets/issues/19787
+*$script,domain=surfline.com,redirect-rule=noopjs
+surfline.com##+js(set, __BACKPLANE_API__.renderOptions.showAdBlock, '')
+surfline.com#@#.ad-box:not(#ad-banner)
+surfline.com###sl-header-ad
+
+! NSFW faps. club - popunder
+faps.club##+js(acs, onload, open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11980
+chineseanime.co.in##+js(acs, String.fromCharCode, ai_adb)
+chineseanime.co.in###teaser3
+
+! https://github.com/uBlockOrigin/uAssets/commit/a6701616d4eb736af311a991f8676fb2fdebe6fd#commitcomment-67733282
+aspdotnet-suresh.com,tudo-para-android.com,urdulibrarypk.blogspot.com##+js(aeld, load, onload)
+*.png#$image,redirect-rule=1x1.gif
+*.gif#$image,redirect-rule=1x1.gif
+*.jpg#$image,redirect-rule=1x1.gif
+*.svg#$image,redirect-rule=1x1.gif
+
+! thedigitalfix .com PH
+! https://github.com/uBlockOrigin/uAssets/issues/16826
+thedigitalfix.com###nn_bfa_wrapper:remove()
+thedigitalfix.com##+js(nosiif, debug)
+thedigitalfix.com##.sticky_rail600:remove()
+
+! moviewatchonline. com.pk ads
+moviewatchonline.com.pk##+js(aopw, atOptions)
+moviewatchonline.com.pk##[href^="https://angularconstitution.com/"]
+moviewatchonline.com.pk##[href*="?key="]
+
+! https://github.com/uBlockOrigin/uAssets/issues/12005
+||bigpixel.cn/libs/plugins/blocker.js^
+bigpixel.cn##.portal_ad
+
+! nsfw hdvideosporn. com popups
+hdvideosporn.com##+js(aopr, decodeURI)
+
+! uptobhai. com/info ads
+||uptobhai.*^$csp=default-src 'self' *.favicon.cc *.google.com *.gstatic.com *.googleapis.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115182
+masahub.net##+js(aopr, decodeURI)
+masahub.net##+js(aopr, mm)
+masahub.net##+js(aeld, , _0x)
+||gifyu.com/*.gif$image,domain=masahub.net
+
+! https://github.com/easylist/easylist/pull/11128/
+striptube.net##+js(aopr, loadTool)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/111673
+dulichkhanhhoa.net,noithatmyphu.vn##+js(no-fetch-if, googlesyndication)
+dulichkhanhhoa.net,noithatmyphu.vn###wpsafe-generate:style(display: block !important;)
+dulichkhanhhoa.net,noithatmyphu.vn###wpsafe-link:style(display: block !important;)
+dulichkhanhhoa.net,noithatmyphu.vn##div[id^="wpsafe-wait"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/12037
+chiangraitimes.com##+js(acs, eval, replace)
+
+! exo ads
+desixxxtube.org,dirtyindianporn.*,freeindianporn2.com,indianpornvideos.*,kashtanka.*,kashtanka2.com,kompoz2.com,onlyindianporn.*,pakistaniporn2.com,porno18.*,xxnx.*,xxxindianporn.*##+js(aopr, exoJsPop101)
+xxxhdvideo.*##+js(aopr, decodeURI)
+indianporn365.net##+js(acs, document.createElement, 'script')
+||dirtyindianporn.info/js/friends.sv.js
+||pakistaniporn2.com/js/friends.minz.js
+
+! amateur-couples.com,slutdump.com popunder, ads
+amateur-couples.com##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+amateur-couples.com,slutdump.com##+js(set, dclm_ajax_var.disclaimer_redirect_url, '')
+
+! https://github.com/uBlockOrigin/uAssets/issues/12057
+learnmania.org##+js(acs, $, RegExp)
+@@||learnmania.org^$ghide
+@@||learnmania.org/js/*.js?_v=$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/12063
+boombj.com##+js(aost, Math, _0x)
+||easyads29.*^
+
+! xxxextreme.org popup
+xxxextreme.org##+js(aeld, getexoloader)
+
+! anti adb uploadmx. com
+! https://github.com/uBlockOrigin/uAssets/issues/13605
+@@||uploadmx.com^$ghide
+uploadmx.com##ins.adsbygoogle
+
+! https://github.com/easylist/easylist/pull/11177
+whcp4.com##+js(nowoif)
+
+! download3s.net focus detection
+download3s.net##+js(set, blurred, false)
+
+! desitelugusex. com ads
+desitelugusex.com##+js(set, D4zz, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/112293
+! https://github.com/uBlockOrigin/uAssets/issues/14527
+aresmanga.com##+js(acs, eval, replace)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/112280
+||doubleclick.net^$xhr,redirect-rule=nooptext,domain=soccerstreams-100.*
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/112322
+mobilanyheter.net##+js(nostif, ai_)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4574#issuecomment-1062577877
+! a8ix .live/atishmkv aliases
+*$script,3p,denyallow=jsdelivr.net|facebook.net|fastly.net|fbcdn.net|marathimovies.online|tawk.to,domain=marathi.love|marathimovies.online|vipmarathi.xyz
+*$script,3p,denyallow=wp.com,domain=atishmkv1.in
+||rotf.lol^
+a8ix.*,atishmkv.*,atishmkv.marathi.vip,marathi.love,marathimovies.online,mkv.*,vipmarathi.xyz##.idmuvi-bannerplayer
+a8ix.*,atishmkv.marathi.vip,atishmkv.*,mkv.*##.idmuvi-center-ads
+a8ix.*,atishmkv.marathi.vip,atishmkv.*##.idmuvi-topbanner-aftermenu
+a8ix.*,atishmkv.*##.inner-floatbanner-bottom
+a8ix.*,atishmkv.*##.idmuvi-footerbanner
+a8ix.*,atishmkv.*###custom_html-21
+
+! flixtor. stream ads
+flixtor.stream##+js(nowoif)
+
+! https://github.com/easylist/easylist/pull/11213
+xcity.org##+js(aopr, loadTool)
+xcity.org##+js(set-cookie, popunder, 1)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/111775
+portaliz.site##+js(no-xhr-if, adsbygoogle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11577
+! https://github.com/uBlockOrigin/uAssets/issues/12163
+! Counter ads and requests inside doubleclick. net iFrames (general fix)
+googleads.g.doubleclick.net###google-center-div
+googleads.g.doubleclick.net###abgc
+googleads.g.doubleclick.net##html[i-amphtml-no-boilerplate][amp4ads][class="i-amphtml-inabox"]
+googleads.g.doubleclick.net###mys-wrapper
+googleads.g.doubleclick.net##.jar
+*$domain=googleads.g.doubleclick.net
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/108660
+stringreveals.com##+js(no-xhr-if, googlesyndication)
+
+! mavavid. com popups
+mavavid.com##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/2041
+porn-images-xxx.com###display_image_detail > span
+
+! dvdplay. guru|sbs popups
+*$script,3p,domain=dvdplay.*
+dvdplay.*##+js(set, D4zz, noopFunc)
+dvdplay.*##^script[data-cfasync]:has-text(decodeURIComponent)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/109246
+flinsetyadi.com##+js(aopr, ai_run_scripts)
+
+! xnxx-downloader - qqxnxx popups
+qqxnxx.com,xnxx-downloader.net##+js(aopr, decodeURI)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12191
+@@||dubznetwork.com^$ghide
+dubznetwork.com##+js(acs, $, adb-btn)
+dubznetwork.com##+js(nostif, , 1000)
+dubznetwork.com##+js(acs, eval, replace)
+dubznetwork.com##.aoa_overlay:style(height: 0px !important)
+dubznetwork.com##[class^="clpr-emre"]
+dubznetwork.com###id-custom_banner
+@@||cricketgames.club^$ghide
+@@||dubznetwork.com^$css,1p
+@@||dubsmovies.cc^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/112631
+acervodaputaria.com.br##+js(acs, decodeURI, decodeURIComponent)
+
+! NSFW comicspornow. com popup
+comicspornow.com##+js(aopr, decodeURI)
+||comicspornow.com/*.php$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/12208
+diampokusy.com##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12210
+@@||shortx.net^$ghide
+shortx.net##+js(aeld, load, nextFunction)
+shortx.net##+js(set, blurred, false)
+
+! mmopeon.ru popup
+mmopeon.ru##+js(acs, decodeURI, decodeURIComponent)
+
+! needrombd.com
+needrombd.com##+js(acs, eval, replace)
+
+! 9xbdlink. xyz antiadb
+@@||9xbdlink.xyz^$ghide
+
+! teluguonlinemovies. me popups
+teluguonlinemovies.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/pull/12232
+galaxyfirmware.com#@#.textad
+
+! https://www.reddit.com/r/uBlockOrigin/comments/tcf6ei/is_there_a_way_to_block_the_norton_browser/
+norton.com##+js(window-close-if, /protect?)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/te2pme/playtv3lv_detects_adblock/
+@@||play.tv3.lv^$script,1p
+*$image,domain=play.tv3.lv,redirect-rule=1x1.gif
+*$script,domain=play.tv3.lv,redirect-rule=noopjs
+@@||play.tv3.lt^$script,1p
+*$image,domain=play.tv3.lt,redirect-rule=1x1.gif
+*$media,domain=play.tv3.lt,redirect=noopmp3-0.1s
+*$script,domain=play.tv3.lt,redirect-rule=noopjs
+*$image,domain=play.tv3.ee,redirect-rule=1x1.gif
+*$script,domain=play.tv3.ee,redirect-rule=noopjs
+! https://github.com/uBlockOrigin/uAssets/issues/17994
+! https://github.com/uBlockOrigin/uAssets/issues/19019
+play.tv3.ee##+js(set, Object.prototype.isNoAds, {})
+@@||play.tv3.ee^$script,1p
+@@*$ghide,domain=play.tv3.*
+
+! jalshamoviezhd. beauty ads
+jalshamoviezhd.*##[href^="https://usounoul.com/"]
+
+! dafontvn.com timer
+redirect.dafontvn.com##.progress
+redirect.dafontvn.com###btngetlink:style(display: inline-block !important)
+redirect.dafontvn.com##+js(nano-sib, distance)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12250
+@@||gsmware.com^$ghide
+gsmware.com##.adtester-container
+gsmware.com##.HTML.widget .adsbygoogle:upward(.widget)
+gsmware.com##.kabaradd
+
+! https://github.com/uBlockOrigin/uAssets/issues/12258
+gamingforecast.com##+js(acs, addEventListener, popunder)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11370
+! https://poki.jp/g/repuls-io / https://repuls.io/ FREE CRADITS
+@@||a.poki.com/prebid/$script,domain=poki-gdn.com|repuls.io
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=poki-gdn.com|repuls.io
+@@||g.doubleclick.net/gampad/ads?*&url=https%3A%2F%2Fgames.poki.com$xhr,domain=imasdk.googleapis.com
+@@||g.doubleclick.net/gampad/ads?*&url=https%3A%2F%2Frepuls.io$xhr,domain=imasdk.googleapis.com
+||redirector.gvt1.com/videoplayback/id/*/source/gfp_video_ads/$media,redirect=noop-1s.mp4,domain=poki-gdn.com|repuls.io
+poki.*##div[class*="_AdvertisementContainer"]
+repuls.io###partnerAd_letter
+poki.*##div[width="300"][height="250"]:upward(1)
+poki.*##div[width="728"][height="90"]:upward(1)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/112991
+prajwaldesai.com##+js(nostif, ai_)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12275
+@@||sub-short.link^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/111267
+||vlitag.com^$script,redirect-rule=noopjs,domain=mangasco.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/108552
+downloadr.in##+js(nostif, show)
+downloadr.in##+js(nano-stb, countdown)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/112977
+@@||urdutimesdaily.com^$ghide
+
+! https://forums.lanik.us/viewtopic.php?t=47393
+topcomicporno.com##+js(nostif, show)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/109878
+! https://github.com/AdguardTeam/AdguardFilters/issues/111629
+bithub.win,freeshib.biz##+js(acs, eval, replace)
+bithub.win###wcfloatDiv4
+bithub.win##ins
+
+! https://github.com/uBlockOrigin/uAssets/issues/12308
+dzeko11.net##+js(nostif, offsetHeight)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/110335
+drawize.com##+js(acs, chAdblock)
+
+! musicc.xyz focus detection
+musicc.xyz##+js(set, blurred, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/113195
+@@||mycinema.pro^$ghide
+mycinema.pro##[fdo]
+
+! xvideos-downloader.net popup
+xvideos-downloader.net##+js(set, D4zz, noopFunc)
+xvideos-downloader.net##+js(aeld, /^(?:load|click)$/, popMagic)
+
+! https://forum.adguard.com/index.php?threads/resolved-battleplan-news.47051/
+battleplan.news##+js(set, Object.prototype.ads, noopFunc)
+
+! fotodovana.com timer
+model-tas-terbaru.com###wpsafe-generate:style(display: block !important)
+model-tas-terbaru.com###wpsafe-link:style(display: block !important)
+model-tas-terbaru.com###wpsafe-wait1
+model-tas-terbaru.com###wpsafe-wait2
+
+! benzin-preis.ch
+@@||benzin-preis.ch^$ghide
+
+! vidmedia.top popup
+vidmedia.top##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12346
+methodspoint.com##+js(ra, href, [onclick], stay)
+saveearning.com##.e3lan
+saveearning.com##.theiaStickySidebar
+
+! cricfree. io / live popups
+cricfree.*,cricplay2.*,primetubsub.*,yourtehzeeb.com##+js(nowoif)
+primetubsub.*##+js(aopr, AaDetector)
+*.gif$image,domain=cricfree.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/12352
+onlymp3.to##+js(nowoif)
+||ublockpop.com^$all
+||drectsearch.com^$all
+||worektobe.co^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/12353
+figurehunter.net##+js(no-fetch-if, google)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/105091
+||sumfaucet.com/adblock.php$xhr,redirect-rule=nooptext,1p
+
+! hindimovies. to propeller ads
+hindimovies.to##+js(acs, Math, String.fromCharCode)
+hindimovies.to##+js(nowoif)
+
+! https://github.com/easylist/easylist/pull/11385
+hdmovie5.*##+js(ra, href, #clickfakeplayer)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/108367
+@@||bootdey.com^$ghide
+
+! clickyfly.com timer
+audiencepool.com,techysnap.com###interstetial-container
+audiencepool.com,techysnap.com###wpsafe-time
+audiencepool.com,techysnap.com###wpsafe-wait1
+audiencepool.com,techysnap.com###wpsafe-generate:style(display: block !important)
+audiencepool.com,techysnap.com###wpsafe-snp:style(display: block !important)
+techysnap.com##body:style(overflow: auto !important)
+
+! mult34. com popunder
+mult34.com##+js(aopr, decodeURI)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/113478
+valuable.hatenablog.com##+js(acs, document.addEventListener, google_ad_client)
+
+! www.visflakes.com timer
+visflakes.com###wpsafe-generate:style(display: block !important;)
+visflakes.com###wpsafe-link:style(display: block !important;)
+visflakes.com##div[id^="wpsafe-wait"]
+
+! cutw.in timer
+chooyomi.com##+js(nano-sib, timer)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/tkmp9s/animesuge_manages_to_bypass_ublock_and_open_new/
+animesuge.to##+js(aost, document.createElement, _0x)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12390
+kissasians.org##.btn-success[href*="?key="]
+||berangkasilmu.com^$3p
+
+! https://github.com/easylist/easylist/pull/11409
+! https://github.com/uBlockOrigin/uAssets/issues/14047
+hentaispark.com##+js(aost, Math.random, inlineScript)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12393
+! https://github.com/uBlockOrigin/uAssets/issues/20408
+journaldemontreal.com,tvanouvelles.ca##+js(no-fetch-if, doubleclick)
+journaldemontreal.com##+js(no-xhr-if, doubleclick)
+||quebecormedia.com/infojdem/lib/cheezwhiz/$script
+||rubiconproject.com^$xhr,3p,redirect-rule=nooptext,domain=journaldemontreal.com
+@@||ads.rubiconproject.com/prebid/*_JournalDeMontreal.js$script,3p,domain=journaldemontreal.com
+@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,3p,domain=journaldemontreal.com
+@@||securepubads.g.doubleclick.net/pagead/managed/js/gpt/*/pubads_impl.js$script,3p,domain=journaldemontreal.com
+journaldemontreal.com###banner
+journaldemontreal.com##.bigbox-container
+
+! jardima.com timer
+jardima.com###wpsafe-generate:style(display: block !important;)
+jardima.com###wpsafe-link:style(display: block !important;)
+jardima.com##div[id^="wpsafe-wait"]
+jardima.com##.g1-slideup-wrap
+
+! https://github.com/uBlockOrigin/uAssets/issues/12396
+! for-ad-inserter-sites
+||media.net^$object,redirect-rule=noopjs
+||google-analytics.com^$object,redirect-rule=noopjs
+||doubleclick.net^$object,redirect-rule=noopjs
+||secure.quantserve.com^$object,redirect-rule=noopjs
+||amazon-adsystem.com^$object,redirect-rule=noopjs
+
+! https://www.reddit.com/r/uBlockOrigin/comments/tkvtro/foxcom_has_adblock_detector/
+fox.com##+js(no-xhr-if, googlesyndication)
+! https://www.reddit.com/r/uBlockOrigin/comments/14cbznu/
+fox.com,foxsports.com##+js(json-prune, ads)
+fox.com,foxsports.com##+js(m3u-prune, /\,ad\n.+?(?=#UPLYNK-SEGMENT)/gm, /uplynk\.com\/.*?\.m3u8/)
+! https://github.com/uBlockOrigin/uAssets/issues/16990
+||link.theplatform.com/s/*/media/*=m3u&*_webdesktop_vod*$xhr,domain=foxsports.com,removeparam=/^((?!formats|profile).)*$/
+! https://www.reddit.com/r/uBlockOrigin/comments/19bsssp/foxsports_video_interrupted_by_ads
+://foxvideo-sports$xhr,3p,removeparam=ad.prof,domain=foxsports.com
+
+! movieswatch24.pk,watchonlinemovies15.pk popup
+movieswatch24.pk,watchonlinemovies15.pk##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12428
+cue-vana.com##+js(nano-sib, count)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12430
+@@||wintub.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/12431
+poki-gdn.com##+js(aopr, alert)
+
+! https://lalastreams.me/streams/?stream=387?sid=131039 propeller
+! https://github.com/AdguardTeam/AdguardFilters/issues/116303
+lalastreams.me##+js(aopr, mm)
+
+! https://github.com/easylist/easylist/issues/11449
+! uploadingsite. com intermediate ads skip
+uploadever.in,uploadingsite.com##+js(acs, getCookie, onload)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/tnow27/adblock_detected_at_chimicamoorg/
+chimicamo.org##+js(no-xhr-if, ads)
+chimicamo.org##.widget:has-text(Adv)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/tns7t8/please_disable_adblocker_message/
+hentaidexy.com##+js(nostif, atob)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12443
+filmy-hit.stream##.dwn-btn
+fiilmy-hit.stream##.btn-dwn:not([href*="Hd?d"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/12453
+xhand.com##+js(set, flashvars.adv_start_html, '')
+xhand.com##+js(set, flashvars.adv_pause_html, '')
+/js/ppndr.
+
+! rureka. com anti adb
+rureka.com##+js(aeld, , $)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12459
+inwepo.co##+js(aopr, b2a)
+
+! anti adb initBlocked
+! forfun.ist,mayclub.com.tw,sheikhjee.com,hauswirt.com,houseofcharizma.com
+||ssl.geoplugin.net/javascript.gp$xhr,redirect-rule=noopjs
+
+! https://tnlink.in/ZJrz8W timer
+earnme.club,jrlinks.in,usanewstoday.club##[id^="tp-wait"]
+earnme.club,jrlinks.in,usanewstoday.club###tp-generate,[id^="tp-snp"]:style(display: block !important)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/113932
+xxvideoss.net##+js(aopr, BetterJsPop)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/113959
+@@||trendyoum.com^$ghide
+trendyoum.com###countdown
+trendyoum.com###download_link:style(display: inline-block !important)
+trendyoum.com##+js(set, countDownDate, 0)
+shortawy.com##+js(set, blurred, false)
+*#*/ad/$image,redirect-rule=1x1.gif
+
+! https://www.reddit.com/r/uBlockOrigin/comments/tq5g59/site_detects_adblock_zapped_for_temporary_fix/
+webforefront.com##+js(no-xhr-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12478
+xubster.com##+js(nano-stb, remaining, 1000, 0.001)
+xubster.com###countdown
+
+! ghior. com anti adblock
+ghior.com##+js(rmnt, script, deblocker)
+
+! sexlivesex. net popups
+sexlivesex.net##+js(acs, onload, open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12482
+obutecodanet.ig.com.br##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12484
+! https://github.com/uBlockOrigin/uAssets/issues/17276
+eztv.*##+js(nowoif)
+eztv.*##+js(nostif, adb)
+eztv.*##table:has-text(VPN)
+eztv.*##^script:has-text(admc)
+||wherat.com^
+
+! viet69. org popunder
+viet69.org##+js(aopr, decodeURI)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/113982
+firmwarex.net##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/easylist/easylist/pull/11492
+loadx.ws##+js(nowoif)
+
+! https://github.com/easylist/easylist/pull/11484
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|hwcdn.net|jquery.com|jsdelivr.net,domain=wuxiarealm.com
+
+! https://github.com/easylist/easylist/issues/11483
+ricettafitness.com,yts-subs.dev##+js(refresh-defuser)
+ricettafitness.com###colunas:style(display: block !important;)
+ricettafitness.com###saudacao
+ricettafitness.com##body > p > span:has-text(adblock)
+
+! proxy torrent sites popups
+! https://github.com/uBlockOrigin/uAssets/issues/10162
+piraproxy.app,theproxy.*##+js(nowoif)
+piraproxy.app,theproxy.*##+js(aopr, _wm)
+unblocksite.pw##+js(aopr, XMLHttpRequest)
+unblocksite.pw##+js(aopr, open)
+unblocksite.pw##div[id][onclick^="window.open('https://vpn-offers.com/"]
+unblocksite.pw##.antoic
+unblocksite.pw##.all-linked
+*$script,denyallow=cloudflare.com|hwcdn.net|jquery.com,domain=piraproxy.app|theproxy.*|unblocksite.pw
+||adblockultra.com^$all
+/j/m/qqqq.js?
+.com/1?z=$script,3p
+.com/2?z=$script,3p
+.net/1?z=$script,3p
+.net/2?z=$script,3p
+/app/apx14.js
+/app/x12.js
+/hy.js?q22q2q2
+/zpp/zpp4.js
+
+! xxxvideotube. net popunder
+xxxvideotube.net##+js(aopr, decodeURI)
+xxxvideotube.net##+js(set, D4zz, noopFunc)
+
+! whats-on-netflix.com anti adb
+whats-on-netflix.com##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12500
+dongknows.com##+js(no-fetch-if, /ads|doubleclick/)
+dongknows.com##+js(nostif, show)
+dongknows.com##+js(acs, document.getElementById, adsRequest)
+dongknows.com###amz-deals
+@@||dongknows.com^$ghide
+
+! https://tlin.me/h88 focus detection
+tlin.me##+js(set, blurred, false)
+tlin.me##[href*="mauchopt.net"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/trmrp9/removing_clickjacking_elements/
+! beststremo.com##+js(aost, Math, /(?=^(?!.*(https)))/)
+beststremo.com##+js(nostif, 0x)
+
+! mypornhere.com popup, ads
+mypornhere.com##+js(set, flashvars.adv_start_html, '')
+mypornhere.com##.item[style="text-align:center !important;"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/12503
+welt.de##[id^="outbrain_widget_"]:has-text(/anzeige/i)
+welt.de##+js(ra, onmousedown, .ob-dynamic-rec-link, stay)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12510#issuecomment-1083552244
+driveplayer.net##+js(nowoif)
+
+! https://apprepack.com/2022/03/08/techsmith-camtasia-studio/ focus detection
+apprepack.com##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12534
+bunkr.is##+js(aeld, , exoJsPop101)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ttmpb2/why_isnt_this_ad_being_blocked/
+bulbagarden.net##+js(set, setupSkin, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12547
+filmeserialegratis.*,fsplayer.*##+js(nowoif)
+
+! https://www.worldsrc.net/films/detalis?Ty=41878 timer
+filessrc.com,srcimdb.com##+js(nano-sib, counter)
+
+! jav.re popup
+jav.re##+js(aost, onload, /app.js)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10054
+! https://github.com/uBlockOrigin/uAssets/issues/12566
+##.adsbyrunactive
+mangahub.io###adblock-notice
+mangahub.io##.ads-container
+*$script,3p,denyallow=cloudfront.net|disqus.com|disquscdn.com|facebook.net|fastlylb.net|fbcdn.net|google.com,domain=mangahub.io
+||blocksly.org^$all
+||induedabusive.casa^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/12569
+forsal.pl##+js(no-fetch-if, dqst.pl)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12568
+||doomovie-hd.live/assets/img/banner-new/unblocker.php$xhr,1p
+||doomovie-hd.live/*/Temp/UltimateBanana/$xhr,1p
+||img*.xyz/*.gif$image,domain=doomovie-hd.live
+doomovie-hd.live##.default-horizontal-banana
+doomovie-hd.live##.header-banana_container
+doomovie-hd.live##.topad_container
+doomovie-hd.live##.tv-player-banana
+doomovie-hd.live##.under-player-banana
+doomovie-hd.live##.default-horizontal-bananax2
+doomovie-hd.live##.bi-x-square-fill:upward(3)
+doomovie-hd.live##[class*="floating_ad"]
+doomovie-hd.live##[class*="floating-banana"]
+doomovie-hd.live##[class^="horizontal-ad-bar"]
+doomovie-hd.live##[data-ultimate-banana-map-id]
+doomovie-hd.live###ekcdnplayer > div[style]
+doomovie-hd.live##+js(set, adSettings, [])
+
+! https://note1s.com/notes/LZ9U4J timer
+! https://github.com/AdguardTeam/AdguardFilters/issues/118010
+note1s.com,paste1s.com##.countdown
+note1s.com,paste1s.com##+js(ra, disabled, button)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/114471
+! https://github.com/AdguardTeam/AdguardFilters/issues/115164
+rintor.*##+js(aopr, loadTool)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12592
+ytmp3cut.com##+js(aopr, _conf.pops)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12594
+alycia-debnam-carey.com,christinaricci.net,emmy-rossum.com,natalie-portman.org,rachel-brosnahan.org##+js(acs, setTimeout, .click())
+
+! nsfw watchomovies. life ads
+!#if env_chromium
+*$script,3p,denyallow=ajax.googleapis.com|gstatic.com|twitter.com,domain=watchomovies.*
+!#endif
+! https://github.com/uBlockOrigin/uAssets/issues/20589
+watchomovies.*##+js(rmnt, script, popunder)
+||a.streamoupload.$script
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/114494
+###tabVideo > .rmedia
+/go/*?ident=$frame,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/12570
+/api/popv2.php$xhr,1p
+
+! https://github.com/abp-filters/abp-filters-anti-cv/issues/903
+pornwhite.com##.bottom-banners
+pornwhite.com##.player-spots
+||pornwhite.com/js/customscript.js
+
+! https://github.com/uBlockOrigin/uAssets/pull/12621
+hindimoviestv.com,onlinewatchmoviespk.*,watchpk.live##+js(nowoif)
+hindimoviestv.com##.mobile-btn
+hindimoviestv.com##.mvic-btn
+
+! https://www.thuthuatmoi.xyz/2021/07/bitdefender-total-security-2501458-64.html timer
+top1iq.com##+js(nano-stb, run)
+top1iq.com##+js(ra, disabled, a#redirect-btn)
+top1iq.com##+js(rc, disabled, a#redirect-btn)
+top1iq.com###post-body > p
+
+! playtamil. tube ads
+!#if env_mobile
+||playtamil.*^$csp=default-src 'self' *.imgur.com
+!#endif
+
+! antiadb iptvjournal. com
+iptvjournal.com##+js(no-fetch-if, googlesyndication)
+iptvjournal.com###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+iptvjournal.com##div[id^="wpsafe-wait"]
+
+! https://moviestars.to/movie/morbius-26813 popup
+moviestars.to##+js(set, count, 1)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/txnoqu/ads_breakthrough_on_coloredmangacom/
+coloredmanga.com##+js(aost, Math.random, inlineScript)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ty0glu/web_page_using_a_antiublock_script/
+softwaretotal.net##+js(no-xhr-if, googlesyndication)
+
+! https://www.uploadcloud.pro/hzug6vgx4fsk/Awesome_Bundles_35_Best_Seller_Font_Collection-sanet.st.rar.html 3p frame and timer
+||desirefx.com^$frame,redirect=noopframe,domain=uploadcloud.pro
+uploadcloud.pro##+js(nano-stb, show, 4000)
+
+! https://sh2rt.com/WJ6i timer, anti-adb
+sh2rt.com##+js(ra, onclick, form > button)
+sh2rt.com##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12652#issuecomment-1092876793
+moviepl.xyz##+js(aopr, __Y)
+
+! coolmoviez. skin ads
+||coolmoviez.*^$csp=default-src 'self'
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115062
+akumanimes.com##+js(acs, eval, replace)
+
+! cinefunhd.com fake player
+cinefunhd.com##+js(ra, href, #clickfakeplayer)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115045
+m4uhd.*##+js(aopr, mm)
+superplayxyz.club##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12676
+depvailon.com##+js(aopr, PvVideoSlider)
+depvailon.com##+js(aopw, _chjeuHenj)
+depvailon.com##.spots
+depvailon.com##.c-normdenomination-output
+
+! watchmoviesonlinepk .com popups
+watchmoviesonlinepk.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12680
+*$script,redirect-rule=noopjs,domain=elkjop.no
+
+! https://www.goflix.io/10540-aquaman.html younetu.com popup
+younetu.*##+js(nowoif)
+younetu.*##+js(aopr, doSecondPop)
+younetu.*##+js(set, adblockcheck, false)
+||younetu.co/cdn-cgi/trace$xhr,1p
+
+! animehub.ac,animeflv.ac popup
+||animehub.ac/api/pop.php
+
+! 194.163.152.200 ads
+194.163.152.200###sgpb-popup-dialog-main-div-wrapper
+194.163.152.200##.sgpb-popup-overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/12700
+! https://www.reddit.com/r/uBlockOrigin/comments/11oykud/
+autotrader.co.uk##.search-page__products > [data-is-promoted-listing]
+autotrader.co.uk##.search-page__result .listings-standout:upward(.search-page__result)
+autotrader.co.uk##.searchResults .product-card__ad-copy:upward(li)
+
+! https://7apple.net/?go=CBn2gh8qacq timer
+7apple.net###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+7apple.net##div[id^="wpsafe-wait"]
+
+! tiki.vn search ads
+tiki.vn##.brand-ad:upward(div)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12713
+||111.90.150.10/wp-content/uploads/*.gif$image,1p
+111.90.150.10##+js(acs, $, noConflict)
+111.90.150.10##+js(aopr, preroll_helper.advs)
+111.90.150.10###secondary > .widget_custom_html
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115337
+@@||pikafile.com^$ghide
+
+! repelishd. me popups devtools
+megaplay.cc##+js(aopr, open)
+oceanplay.org##+js(nostif, devtool)
+oceanplay.org##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12738
+hdhub4u.*,hblinks.pro##+js(aopr, mm)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12744
+sushi-scan.*##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12746
+traderepublic.community##+js(nostif, show)
+
+! emovies.si popup
+||emovies.si/api/pop.php
+
+! https://github.com/easylist/easylist/pull/11659
+! https://github.com/AdguardTeam/AdguardFilters/issues/132269
+hdthevid.online,vidhdthe.online##+js(aopr, JSON.parse)
+||hdthevid.online/mavennofile.js
+
+! watchseries9. cc popups
+watchseries9.*##+js(aopr, mm)
+
+! https://www.reddit.com//r/uBlockOrigin/comments/u3myey/unremoved_ads_on_a_wiki/
+coromon.wiki.gg##+js(aost, document.createElement, create_ad)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115595
+#@##adContext
+#@##ad_img
+#@##downloadAd
+#@##topBannerAd
+#@##topbannerad
+#@##weatherad
+###adContext:not(:empty)
+###ad_img:not(:empty)
+###downloadAd:not(:empty)
+###topBannerAd:not(:empty)
+###topbannerad:not(:empty)
+###weatherad:not(:empty)
+||bitfly.io/js/nt.js
+||i.imgur.com^$image,domain=up-load.one
+up-load.one##+js(set, blurred, false)
+up-load.one###overlay
+up-load.one##.iframe_id
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115590
+k1nk.co##+js(aeld, click, popunder)
+k1nk.co##+js(nowoif)
+k1nk.co##+js(set, console.clear, noopFunc)
+||k1nk.co/videos/*/_.pagespeed.$script,1p
+
+! mangaraw.org ads,popup
+mangaraw.org##+js(acs, decodeURI, decodeURIComponent)
+mangaraw.org##+js(aopr, AaDetector)
+mangaraw.org##^script[data-cfasync]:has-text(D4zz.)
+mangaraw.org,rawmanga.top##.banner-block
+mangaraw.org,rawmanga.top##.banner-landscape
+*$script,3p,domain=mangaraw.org
+*$script,3p,denyallow=cloudflare.com,domain=rawmanga.top
+
+! y2mate. is/.com popups
+y2mate.com,y2mate.is##+js(nowoif)
+||y2mate.com/themes/js/pn.js
+
+! ad overlay + broken scroll
+theblockcrypto.com##.modal-bg
+theblockcrypto.com##body,html:style(height: auto !important; overflow: auto !important)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115688
+@@||anonigviewer.com/assets/js/peelad.js$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115641
+claimfey.com###tp-generate,#getlinkbtn:style(display: block !important;)
+claimfey.com##div[id^="wpsafe-wait"]
+zuba.link##+js(set, blurred, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115626
+@@||cutt.net^$ghide
+cutt.net##.aspace
+
+! https://github.com/uBlockOrigin/uAssets/issues/12793
+khsm.io##+js(nostif, getComputedStyle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12809
+dramaworldhd.co##+js(no-fetch-if, googlesyndication)
+dramaworldhd.co##+js(nano-sib, timeLeft)
+
+! https://github.com/easylist/easylist/commit/a1709ce2b8da92b2dcb338c8cd84f1afdffa1018
+||amazon-adsystem.com/aax2/apstag.js$domain=tasteofhome.com,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/12765
+descargatepelis.com##+js(nano-sib, contador)
+
+! https://github.com/abp-filters/abp-filters-anti-cv/pull/937
+teen-hd-sex.com,tube-teen-18.com,xxx-asian-tube.com##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+/\.com\/[0-9a-z]{12,}\/[0-9a-z]{12,}\.js$/$script,1p,domain=tube-teen-18.com|teen-hd-sex.com|xxx-asian-tube.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115796
+viplayer.cc##+js(aopr, __Y)
+streamempire.cc###custom_html-4
+
+! 123moviefree4u. com ads
+123moviefree4u.com##+js(ra, onclick, a.thumb.mvi-cover)
+
+! watchonlinehd123. sbs ads
+watchonlinehd123.sbs##+js(nowoif)
+||watchonlinehd123.sbs/cdn-cgi/trace$xhr,1p
+||decemberpedalunfair.com^$all
+||refpamjeql.top^$all
+
+! videofilms /prosongs .link popups
+videofilms.*,prosongs.*##+js(aopr, __Y)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115841
+*$script,redirect-rule=noopjs,domain=madtrx.fun
+madtrx.fun##.ads
+
+! https://hollywoodlife.com/pics/saturday-night-live-season-46-photos/saturday-night-live-season-46-11/ ads
+hollywoodlife.com##+js(set, Object.prototype.enableInterstitial, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115781
+entireweb.com##+js(acs, setInterval, addAds)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115727
+tudaydeals.com##+js(no-fetch-if, googlesyndication)
+tudaydeals.com###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+tudaydeals.com##div[id^="wpsafe-wait"]
+
+! acrackstreams. com popups
+acrackstreams.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12834
+||mathwarehouse.com/sitefiles/*/js/fixblock.js?$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/12842
+! https://github.com/uBlockOrigin/uAssets/issues/16989
+babia.to##+js(acs, $, adsBlocked)
+
+! amateurs-fuck. com / sex-amateur-clips.com => exo ads + popups
+amateurs-fuck.com,sex-amateur-clips.com##+js(aeld, getexoloader)
+amateurs-fuck.com,sex-amateur-clips.com###dclm_modal_content
+amateurs-fuck.com,sex-amateur-clips.com##*:style(filter: none !important)
+amateurs-fuck.com,sex-amateur-clips.com###dclm_modal_screen
+
+! https://www.reddit.com/r/uBlockOrigin/comments/u70amc/im_new_to_ublock_is_there_a_way_to_get_rid_of/
+mzzcloud.life##+js(aopr, banners)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12844
+dropmms.com##+js(aost, document.createElement, /^(?!.*(jquery|setDocument|inlineScript|gstatic|google|root|cgi).*)/)
+
+! javqis. com popunder
+javqis.com##+js(aopr, decodeURI)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12846
+/vast-new/src/videojs-preroll.js$script
+||filmmakinesi.pro/binanceps.jpg$image,1p
+filmmakinesi.pro##.wrapper:style(margin-top: auto !important)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115974
+nsfwzone.xyz##+js(aopr, __Y)
+sdefx.cloud##+js(set, D4zz, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115761
+||w1.anime4up.com/wp-content/uploads/*_n.png$image,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/12857
+! https://github.com/AdguardTeam/AdguardFilters/issues/119086
+pomvideo.cc##+js(acs, $, showOverlay)
+pomvideo.cc,steampiay.cc##+js(nowoif)
+*$frame,xhr,3p,domain=pomvideo.cc|steampiay.cc
+||pomvideo.cc/ben/*$frame,1p
+||pomvideo.cc/js/*/pu3.min.js$script,1p
+||qontent.pomvideo.cc^$1p
+! https://javbest. cc/video/cc5f52c98723a2349c97bfe4c00fd799 vast
+||p.jwpcdn.com/*/vast.js$script
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115891
+searchresults.cc##+js(set, check, noopFunc)
+
+! https://www.intereseducation.com/resources/cambridge-primary-progression-tests-past-papers/ timer
+edufileshare.com##+js(nano-sib, display)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115967
+xhomealone.com##+js(set, flashvars.popunder_url, '')
+
+! https://github.com/easylist/easylist/pull/11698
+watchasians.cc##+js(aeld, click, popunder)
+watchasians.cc##+js(set, console.clear, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12868
+@@||3dpchip.com^$ghide
+
+! afdah2. com ads
+afdah2.com##+js(aopr, mm)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/116138
+@@||thinktibits.blogspot.com^$ghide
+
+! proxy site ads
+androidapks.biz,androidsite.net,animeonlinefree.org,animesite.net,computercrack.com,crackedsoftware.biz,crackfree.org,cracksite.info,downloadapk.info,downloadapps.info,downloadgames.info,downloadmusic.info,downloadsite.org,ebooksite.org,emulatorsite.com,fmovies24.com,freeflix.info,freemoviesu4.com,freesoccer.net,fseries.org,gamefast.org,gamesite.info,gostreamon.net,hindisite.net,isosite.org,macsite.info,mangasite.org,megamovies.org,moviefree2.com,moviesite.app,moviesx.org,musicsite.biz,patchsite.net,pdfsite.net,play1002.com,productkeysite.com,romsite.org,seriesite.net,siteapk.net,siteflix.org,sitegames.net,sitekeys.net,sitepdf.com,sitesunblocked.*,sitetorrent.com,softwaresite.net,superapk.org,supermovies.org,tvonlinesports.com,ultramovies.org,warezsite.net,watchmovies2.com,watchmoviesforfree.org,watchsite.net,youapk.net##+js(aopr, open)
+/sw.js$script,domain=androidapks.biz|androidsite.net|animeonlinefree.org|animesite.net|computercrack.com|crackedsoftware.biz|crackfree.org|cracksite.info|downloadapk.info|downloadapps.info|downloadgames.info|downloadmusic.info|downloadsite.org|ebooksite.org|emulatorsite.com|fmovies24.com|freeflix.info|freemoviesu4.com|freesoccer.net|fseries.org|gamefast.org|gamesite.info|gostreamon.net|hindisite.net|isosite.org|macsite.info|mangasite.org|megamovies.org|moviefree2.com|moviesite.app|moviesx.org|musicsite.biz|patchsite.net|pdfsite.net|play1002.com|productkeysite.com|romsite.org|seriesite.net|siteapk.net|siteflix.org|sitegames.net|sitekeys.net|sitepdf.com|sitesunblocked.*|sitetorrent.com|softwaresite.net|superapk.org|supermovies.org|tvonlinesports.com|ultramovies.org|warezsite.net|watchmovies2.com|watchmoviesforfree.org|watchsite.net|youapk.net
+/oho.js$script,domain=androidapks.biz|androidsite.net|animeonlinefree.org|animesite.net|computercrack.com|crackedsoftware.biz|crackfree.org|cracksite.info|downloadapk.info|downloadapps.info|downloadgames.info|downloadmusic.info|downloadsite.org|ebooksite.org|emulatorsite.com|fmovies24.com|freeflix.info|freemoviesu4.com|freesoccer.net|fseries.org|gamefast.org|gamesite.info|gostreamon.net|hindisite.net|isosite.org|macsite.info|mangasite.org|megamovies.org|moviefree2.com|moviesite.app|moviesx.org|musicsite.biz|patchsite.net|pdfsite.net|play1002.com|productkeysite.com|romsite.org|seriesite.net|siteapk.net|siteflix.org|sitegames.net|sitekeys.net|sitepdf.com|sitesunblocked.*|sitetorrent.com|softwaresite.net|superapk.org|supermovies.org|tvonlinesports.com|ultramovies.org|warezsite.net|watchmovies2.com|watchmoviesforfree.org|watchsite.net|youapk.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/12880
+mat6tube.com##+js(set, ads, undefined)
+
+! multiup. us popups
+multiup.us##+js(aeld, , pop)
+multiup.us##+js(set, adblockcheck, false)
+||unpkg.com/videojs-vast-vpaid@2.0.2/bin/videojs_5.vast.vpaid.min.js$script,domain=multiup.us
+||multiup.us/cdn-cgi/trace$xhr,1p
+multiup.us##[href="https://t.me/Russia_Vs_Ukraine_War3"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/u922hn/video_ads_showing_on_veblr_dot_com/
+||vbcdn.com/cdn/video_advt/*$media,redirect=noopmp3-0.1s
+veblr.com###advt_click_href_link_upper
+veblr.com##.advt-content
+
+! https://hotabis. com clickable background + ads
+hotabis.com##+js(set, td_ad_background_click_link, undefined)
+hotabis.com##[href^="https://axiadata.co.id"]
+||hotabis.com/*/ads$image
+
+! https://telugu-wap .in ads
+!#if env_mobile
+||telugu-wap.in^$csp=default-src 'self'
+!#endif
+
+! https://www.fifa.com/fifaplus/en video ads
+||cxm-api.fifa.com/fifaplusweb/api/video/*$xhr,removeparam=adConfig
+fifa.com##.theoplayer-ad-overlay-component
+fifa.com##[href^="https://pubads.g.doubleclick.net/"]
+! https://github.com/uBlockOrigin/uAssets/issues/18164
+||imasdk.googleapis.com/js/sdkloader/ima3.js$redirect-rule=google-ima.js,domain=fifa.com
+||fifa.com/api/v*/ad-manager/$redirect=nooptext
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/116108
+66ccff.work##+js(alert-buster)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12918
+comandotorrenthd.org##+js(aeld, load, nextFunction)
+
+! popunder-sites
+4rkinggame.com,phimmoiaz.cc,thuvienhd.com,tvhay.top,xemhaivn.com##+js(aopr, popunder)
+/wonderfarm68.js?v=$script,1p
+
+! technicalatg.com New
+! https://github.com/uBlockOrigin/uAssets/issues/19079
+atglinks.com##.blog-item, ._th_times, .separator, .blog-item, .banner-inner, .box-main > [href], #footer
+atglinks.com##+js(set, blurred, false)
+foodxor.com,mealcold.com,mixrootmods.com##+js(no-fetch-if, syndication)
+foodxor.com,mealcold.com,mixrootmods.com###wpsafe-link:others()
+foodxor.com,mealcold.com,mixrootmods.com###wpsafe-link:style(display:block !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/116330
+choiceappstore.xyz##+js(no-fetch-if, googlesyndication)
+choiceappstore.xyz###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+choiceappstore.xyz##div[id^="wpsafe-wait"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/12937
+du-link.in##+js(set, blurred, false)
+du-link.in##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/12938
+! https://github.com/uBlockOrigin/uAssets/issues/15395
+||storage.googleapis.com/*&GoogleAccessId=firebase-adminsdk$media,redirect=noop-1s.mp4,domain=moviehdkh.com
+||backblazeb2.com/*.gif$image,domain=moviehdkh.com
+||moviehdkh.com/assets/*.gif$image,1p
+moviehdkh.com###adsss
+moviehdkh.com##.player-servers
+moviehdkh.com##[href^="https://sss789.com/"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/116394
+mangahentai.xyz##+js(aopr, loadXMLDoc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12949
+turkdebrid.net##+js(aeld, load, nextFunction)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12948
+antifake-funko.fr##+js(aeld, DOMContentLoaded, AdBlock)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/116465
+javenspanish.com##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+player.subespanolvip.com##+js(aopr, BetterJsPop)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/126385
+mangas-raw.com##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+mangas-raw.com##+js(aopr, showInfoAdBlock)
+*$script,3p,denyallow=cloudflare.com|cloudfront.net|disqus.com|disquscdn.com|fastlylb.net,domain=mangas-raw.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/12956
+racedepartment.com##+js(acs, $, adsBlocked)
+
+! https://tecmundo.net/verify/?HUuun2= timer
+tecmundo.net###yuidea-btn:style(display: block !important)
+tecmundo.net###yuidea-btn-before
+tecmundo.net##.percent:upward([id^="yuidea-wait"])
+
+! freeporncomics.me popup
+freeporncomics.me##+js(acs, Date, 'shift')
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/116615
+||images.outbrainimg.com^$image
+||theswagsports.com/can/*.htm$script,1p
+theswagsports.com##.colombiaoneinvalid
+theswagsports.com##a[rel*="sponsored"]
+theswagsports.com###btm-widget img[onload]:upward(#btm-widget > .colombiaonesuccess > div)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/116606
+pkpics.club###countdown
+pkpics.club##img[onclick]:upward(.wait):style(display: block !important)
+
+! hentaimoe.me popup
+hentaimoe.me##+js(acs, Date, 'shift')
+
+! uploadbaz. me ads
+uploadbaz.*##+js(acs, onload)
+uploadbaz.*##+js(acs, Math.imul)
+||finchtechie.com^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/116807
+freecodezilla.net##+js(aeld, DOMContentLoaded, adsBlocked)
+freecodezilla.net##+js(no-xhr-if, googlesyndication)
+
+! hdmoviesmaza. pw popups
+hdmoviesmaza.*##+js(nowoif)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/uezggb/adblock_detected_textstudioco/
+@@||textstudio.co^$ghide
+textstudio.co##+js(set, ADBLOCK, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13030
+||111.90.150.149/wp-content/uploads/*.gif$image,1p
+111.90.150.149##+js(acs, jQuery, magnificPopup)
+111.90.150.149##+js(aopr, preroll_helper.advs)
+111.90.150.149##.idmuvi-topbanner-aftermenu
+111.90.150.149##[href*="buaksib.in"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/13029
+inbbotlist.com##+js(no-fetch-if, googlesyndication)
+inbbotlist.com###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+inbbotlist.com##div[id^="wpsafe-wait"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/uebhzv/apkmagiccomar_detecting_adblock/
+apkmagic.com.ar##+js(no-xhr-if, ads)
+
+! https://forums.lanik.us/viewtopic.php?t=47501-gamaniak-com
+@@||gamaniak.com^$script,1p
+@@||gamaniak.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/13035
+! moviesjoy. pw/.best/.plus/ .to /. is popunders
+moviesjoy.*##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+moviesjoy.*##+js(aopr, mm)
+moviesjoy.*##+js(nowoif)
+moviesjoy.*###fcnbox
+moviesjoy.*##[href*="moviesflix4k"]
+moviesjoy.*##.premodal.modal
+moviesjoy.*##.show.modal-backdrop
+moviesjoy.*##body:style(overflow: auto !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/117080
+movieslegacy.com##+js(aeld, DOMContentLoaded, adsBlocked)
+movieslegacy.com##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/117062
+currencyconverterx.com##+js(acs, document.createElement, register)
+currencyconverterx.com##.block-after-head
+currencyconverterx.com##.block-inside-blocks
+
+! https://frivcomfriv.com/friv-car-games/hill-climb-racing-friv/ ads
+||imasdk.googleapis.com/js/core/bridge*.html$frame,domain=html5.gamemonetize.co,important
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/117128
+/\/img\/(?!new).+\.gif/$image,1p,domain=jennylist.xyz
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/116991
+xxxxvideo.uno##.sticky-elem
+xxxxvideo.uno##.place-wink
+
+! https://github.com/uBlockOrigin/uAssets/issues/13042
+boxingstreams100.com,mlbstreams100.com,mmastreams-100.tv,nbastreams-100.tv,soccerstreams-100.tv##+js(no-fetch-if, doubleclick)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/117176
+r3owners.net##+js(acs, $, adsBlocked)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/117139
+apkmodhub.in##+js(acs, String.fromCharCode, ai_adb)
+apkmodhub.in##.sdl_text
+apkmodhub.in##.show_download_links:style(display: block !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13049
+@@||digilibraries.com^$ghide
+digilibraries.com##.adsbygoogle:style(height: 0px !important; visibility: collapse;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13050
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=hidive.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/117240
+3hentai.net##+js(nowoif)
+3hentai.net###header-ban-agsy
+
+! vidcdn. co ads
+vidcdn.co##+js(aopr, BetterJsPop)
+vidcdn.co##+js(aopr, arrvast)
+||vidcdn.co/cdn-cgi/trace$xhr,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/117339
+thetodaypost.com##+js(acs, PopFocus)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/117234
+newtumbl.com##+js(set, POSTPART_prototype.ADKEY, noopFunc)
+newtumbl.com##.broughtby
+newtumbl.com##.nt_holder_of_promoish_content
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/117186
+gaget.hatenablog.com##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13066
+celtadigital.com##+js(nostif, show)
+
+! https://www.droidmirror.com/download/7tsp-gui-v0-6-zip timer
+droidmirror.com##+js(nano-sib, counter)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12273
+slidesgo.com##.ssm_adunit_container:upward([id^="list_ads"])
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/117701
+! https://github.com/uBlockOrigin/uAssets/issues/13856
+! https://github.com/AdguardTeam/AdguardFilters/issues/131668
+apkmaven.*##+js(no-xhr-if, googlesyndication)
+apkmaven.*##+js(aeld, DOMContentLoaded, adsBlocked)
+apkmaven.*##+js(set, adBlockDetected, falseFunc)
+apkmaven.*###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+apkmaven.*##div[id^="wpsafe-wait"]
+apkmaven.*###countdown
+apkmaven.*###download_link:style(display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13094
+photopea.com##div[style]:has(> a[href*="photopea.com"][href*="ads"])
+! https://github.com/jared-schwalbe/remove-ads-from-photopea/blob/main/app.js
+! https://github.com/uBlockOrigin/uAssets/issues/19697
+!photopea.com##+js(rpnt, script, /^.*?(function gtag).*$/, document.documentElement.setAttribute('onreset'\,(function addCustomEvent(){document.addEventListener('resizecanvas'\,()=>{window.innerWidth=document.documentElement.clientWidth+(window.screen.width<1600?180:320)})})());document.documentElement.dispatchEvent(new CustomEvent('reset'));document.documentElement.removeAttribute('onreset');function resize(event={}){if(!event.skip){document.dispatchEvent(new CustomEvent('resizecanvas'));const resizeEvent=new Event('resize');resizeEvent.skip=true;window.dispatchEvent(resizeEvent)}}let debounce;window.addEventListener('resize'\,event=>{clearTimeout(debounce);debounce=setTimeout(()=>resize(event)\,100)});resize();)
+! https://github.com/uBlockOrigin/uAssets/issues/20232
+||pagead2.googlesyndication.com^$3p,xhr,method=head,redirect-rule=noop.js,domain=photopea.com
+@@||cmp.uniconsent.com^$3p,xhr,domain=photopea.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/13104
+vods.tv##+js(no-fetch-if, doubleclick)
+
+! freesolana. top anti adb
+! https://github.com/uBlockOrigin/uAssets/issues/14955
+freesolana.top##+js(no-xhr-if, /coinzillatag|czilladx/)
+*$script,domain=freesolana.top,redirect-rule=noopjs
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/117873
+aruble.net###middle-adspace
+aruble.net###top-ads
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/117803
+justswallows.net##+js(aopr, BetterJsPop)
+justswallows.net##[href="https://t.me/Russia_Vs_Ukraine_War3"]
+justswallows.net##a[onclick="openAuc();"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/15821
+1377x.*##+js(aopr, open)
+1377x.*###chatme-box
+1377x.*##[href*="register"]
+||fflink.net^$3p
+||goojara.in^$3p
+||bestmoviesflix.xyz^
+||you2ubeconverter.com^
+
+! camvideoshub.com anti-adb
+camvideoshub.com##+js(set, canRunAds, true)
+
+! analdin.com ads
+analdin.com##+js(set, flashvars.adv_start_html, '')
+analdin.com##+js(set, flashvars.adv_pause_html, '')
+
+! player2.imsdb.pw popup (https://vostanimez.com/Episode/shokei-shoujo-no-ikiru-michi-the-executioner-and-her-way-of-life-vostfr-saison-1-episode-6-streaming-hd/)
+imsdb.pw##+js(set, adblockcheck, false)
+imsdb.pw##+js(set, console.clear, noopFunc)
+imsdb.pw##+js(nowoif)
+imsdb.pw##div[style="position: fixed; display: block; width: 100%; height: 100%; inset: 0px; background-color: rgba(0, 0, 0, 0); z-index: 300000;"]
+imsdb.pw##[href="https://t.me/Russia_Vs_Ukraine_War3"]
+imsdb.pw##a[onclick$="openAuc();"]
+||imsdb.pw/cdn-cgi/trace
+
+! https://github.com/uBlockOrigin/uAssets/issues/13117
+girls-like.me##+js(nostif, getComputedStyle)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/117983
+nhentai.io##+js(aopr, Script_Manager)
+nhentai.io##+js(aopr, Script_Manager_Time)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/117939
+freebitcoin.top##+js(acs, eval, decodeURIComponent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13105
+*$script,3p,domain=hdhub4u.*,denyallow=fastlylb.net|googleapis.com|disqus.com|disquscdn.com|cloudfront.net
+hdhub4u.tel##[href^="https://www.hostdoze.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/13123
+gload.to##+js(aopw, bullads)
+gload.to##+js(aopr, open)
+/get/*.js#$script,domain=gload.to
+
+! romfast. com anti adblock
+@@||romfast.com^$ghide
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ukz7wr/need_help_with_some_popups/
+||linkpicture.com/q/make-money-*$image,3p
+linksfy.co##+js(acs, addEventListener, popup)
+linksfy.co##+js(acs, document.createElement, pop_tag)
+linksfy.co##+js(aopr, popns)
+linksfy.co##+js(set, blurred, false)
+linksfy.co##.banner-inner
+
+! player.tormalayalamhd. xyz ads
+player.tormalayalamhd.*##+js(aopr, BetterJsPop)
+player.tormalayalamhd.*##[href="https://t.me/Russia_Vs_Ukraine_War3"]
+player.tormalayalamhd.*##a[onclick="openAuc();"]
+||player.tormalayalamhd.*/cdn-cgi/trace
+
+! https://github.com/uBlockOrigin/uAssets/pull/13127#issuecomment-1120431229
+##a[onclick="openAuc();"]
+##[href="https://t.me/Russia_Vs_Ukraine_War3"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/13128
+yt5s.com##+js(aost, String.prototype.charCodeAt, https)
+
+! porncoven.com ad. popunder
+porncoven.com##+js(aopr, loadTool)
+||porncoven.com/clientscript/popcode_
+
+! https://github.com/uBlockOrigin/uAssets/issues/13134
+code2care.org##+js(nostif, Msg)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/118077
+! https://www.reddit.com/r/uBlockOrigin/comments/10hsju0/
+||ayelads.xyz^
+/main.js$script,3p,domain=faucetclub.net
+faucetclub.net##+js(acs, eval, decodeURIComponent)
+faucetclub.net##+js(no-xhr-if, czilladx)
+faucetclub.net##.container > div > center
+faucetclub.net##.ads
+faucetclub.net##.card-body > .row > iframe:upward(.card-body)
+faucetclub.net##center:has([id^="bantraf"])
+faucetclub.net###adCenter
+faucetclub.net###wcfloatDiv4
+faucetclub.net##[id^="fixedban"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/118073
+nevcoins.club##+js(set, noAdBlock, noopFunc)
+nevcoins.club##.justify-content-center.box-shadow
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/118072
+@@||11bit.co.in/fp/libs/advertisement.js$script,1p
+/main.js$script,3p,domain=11bit.co.in
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/118055
+||surfe.pro/js/net.js$script,xhr,redirect-rule=noop.js
+faucetcrypto.net##+js(acs, eval, decodeURIComponent)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/118042
+freepreset.net##+js(no-fetch-if, googlesyndication)
+
+! movie123. in/club ads
+movie123.*##+js(acs, Math, XMLHttpRequest)
+movie123.*##+js(aopw, Fingerprint2)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13142
+@@||filmzie.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/13138
+formulapassion.it##.yobee-adv
+formulapassion.it##.brid:has(.brid-advert-container)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/uls5g8/adblock_detected_by_chpadsblockdetectorpro/i7x99x2/
+@@||onlyhgames.com^$ghide
+onlyhgames.com##+js(acs, document.getElementById, adsBlocked)
+onlyhgames.com##+js(nano-sib, i--)
+onlyhgames.com##+js(nano-stb, CountBack, 990)
+onlyhgames.com##+js(noeval-if, /chp_?ad/)
+news.speedynews.xyz##+js(set, blurred, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ulsnpv/bestmp3convertercom_ads/
+1ytmp3.com,bestmp3converter.com##+js(nowoif, !download)
+
+! https://forums.lanik.us/viewtopic.php?t=47536-nsfw-multiple-websites
+amateur8.com,freeporn8.com,maturetubehere.com##+js(aeld, /click|mousedown/, catch)
+freeporn8.com###lotal
+freeporn8.com##.toble
+freeporn8.com##.top2
+freeporn8.com##li.pignr
+
+! https://github.com/uBlockOrigin/uAssets/issues/13162
+onlyhotleaks.com##+js(aopr, decodeURI)
+
+! anti adb reaperscans. id
+reaperscans.id##+js(no-xhr-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13168
+*$media,redirect-rule=noopmp3-0.1s,domain=149.56.24.226
+layarkacaxxi.icu##+js(aopr, __Y)
+layarkacaxxi.icu##+js(nowoif)
+
+! idope. cyou popups
+idope.cyou##+js(aopr, afScript)
+idope.cyou##+js(aopr, mm)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13175
+||static.doubleclick.net/instream/ad_status.js$xhr,redirect-rule=noop.js,domain=sshinjector.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/14053
+valeronevijao.com,cigarlessarefy.com,figeterpiazine.com,yodelswartlike.com,generatesnitrosate.com,crownmakermacaronicism.com,chromotypic.com,gamoneinterrupted.com,metagnathtuggers.com,wolfdyslectic.com,rationalityaloelike.com,sizyreelingly.com,simpulumlamerop.com,urochsunloath.com,monorhinouscassaba.com,counterclockwisejacky.com,35volitantplimsoles5.com,scatch176duplicities.com,antecoxalbobbing1010.com,boonlessbestselling244.com,cyamidpulverulence530.com,guidon40hyporadius9.com,449unceremoniousnasoseptal.com,19turanosephantasia.com,30sensualizeexpression.com,321naturelikefurfuroid.com,745mingiestblissfully.com,greaseball6eventual20.com,toxitabellaeatrebates306.com,20demidistance9elongations.com,audaciousdefaulthouse.com,availedsmallest.com,fittingcentermondaysunday.com,fraudclatterflyingcar.com,launchreliantcleaverriver.com,matriculant401merited.com,realfinanceblogcenter.com,reputationsheriffkennethsand.com,telyn610zoanthropy.com,tubelessceliolymph.com,tummulerviolableness.com,un-block-voe.net,v-o-e-unblock.com,voe-un-block.com,voe-unblock.*,voeun-block.net,voeunbl0ck.com,voeunblck.com,voeunblk.com,voeunblock.com,voeunblock1.com,voeunblock2.com,voeunblock3.com##+js(acs, $, /\.fadeIn|\.show\(.?\)/)
+valeronevijao.com,cigarlessarefy.com,figeterpiazine.com,yodelswartlike.com,generatesnitrosate.com,crownmakermacaronicism.com,chromotypic.com,gamoneinterrupted.com,metagnathtuggers.com,wolfdyslectic.com,rationalityaloelike.com,sizyreelingly.com,simpulumlamerop.com,urochsunloath.com,monorhinouscassaba.com,counterclockwisejacky.com,35volitantplimsoles5.com,scatch176duplicities.com,antecoxalbobbing1010.com,boonlessbestselling244.com,cyamidpulverulence530.com,guidon40hyporadius9.com,449unceremoniousnasoseptal.com,19turanosephantasia.com,30sensualizeexpression.com,321naturelikefurfuroid.com,745mingiestblissfully.com,availedsmallest.com,greaseball6eventual20.com,toxitabellaeatrebates306.com,20demidistance9elongations.com,audaciousdefaulthouse.com,fittingcentermondaysunday.com,fraudclatterflyingcar.com,launchreliantcleaverriver.com,matriculant401merited.com,realfinanceblogcenter.com,reputationsheriffkennethsand.com,telyn610zoanthropy.com,tubelessceliolymph.com,tummulerviolableness.com,un-block-voe.net,v-o-e-unblock.com,voe-un-block.com,voe-unblock.*,voeun-block.net,voe.*,voeunbl0ck.com,voeunblck.com,voeunblk.com,voeunblock.com,voeunblock1.com,voeunblock2.com,voeunblock3.com##+js(nowoif)
+valeronevijao.com,cigarlessarefy.com,figeterpiazine.com,yodelswartlike.com,generatesnitrosate.com,crownmakermacaronicism.com,chromotypic.com,gamoneinterrupted.com,metagnathtuggers.com,wolfdyslectic.com,rationalityaloelike.com,sizyreelingly.com,simpulumlamerop.com,urochsunloath.com,monorhinouscassaba.com,counterclockwisejacky.com,35volitantplimsoles5.com,scatch176duplicities.com,antecoxalbobbing1010.com,boonlessbestselling244.com,cyamidpulverulence530.com,guidon40hyporadius9.com,449unceremoniousnasoseptal.com,19turanosephantasia.com,30sensualizeexpression.com,321naturelikefurfuroid.com,745mingiestblissfully.com,availedsmallest.com,greaseball6eventual20.com,toxitabellaeatrebates306.com,20demidistance9elongations.com,audaciousdefaulthouse.com,fittingcentermondaysunday.com,fraudclatterflyingcar.com,launchreliantcleaverriver.com,matriculant401merited.com,realfinanceblogcenter.com,reputationsheriffkennethsand.com,telyn610zoanthropy.com,tubelessceliolymph.com,tummulerviolableness.com,un-block-voe.net,v-o-e-unblock.com,voe-un-block.com,voe-unblock.*,voeun-block.net,voeunbl0ck.com,voeunblck.com,voeunblk.com,voeunblock.com,voeunblock1.com,voeunblock2.com,voeunblock3.com##+js(nostif, blocked)
+35volitantplimsoles5.com##+js(aopr, decodeURI)
+||renewalsuspiciousrattle.com^$all
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/118331
+givee.club##+js(acs, document.addEventListener, adjsData)
+givee.club##.definetelynotanad
+givee.club##.definetelynotanad:upward([class^="col-md-"])
+
+! webloadedmovie.com ads
+webloadedmovie.com##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/118456
+tojav.net##+js(aost, atob, _0x)
+://media.*/js/code.min.js|$script,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/13195
+watchimpracticaljokers.com##+js(aopr, popns)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/uo7w9g/clicking_on_the_play_button_of_the_video/
+||fucktube4k.com/wp-content/uploads/*porn4k-banner.png$image,1p
+fucktube4k.com##.partner-banner:upward(div[style])
+
+! https://github.com/uBlockOrigin/uAssets/issues/12772#issuecomment-1125434557
+@@||s0.2mdn.net/instream/html5/ima3.js$script,domain=cadenaser.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/13204
+||googlesyndication.com^$script,redirect-rule=noopjs,domain=youfiles.herokuapp.com
+youfiles.herokuapp.com##+js(set, gadb, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/118524
+/prebid-add.js$script,redirect-rule=prebid-ads.js
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/118513
+||cxense.com/cx.$script,redirect-rule=noop.js,domain=japannews.yomiuri.co.jp
+japannews.yomiuri.co.jp##.pr_custom2
+japannews.yomiuri.co.jp##div[class^="ad_background"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/13211
+mail.com##+js(nostif, offsetHeight)
+mail.com##.mod-container:has-text(/sponsor/i)
+mail.com##+js(set, AdService.info.abd, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13213
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$xhr,domain=tiodonghua.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/13216
+@@||ioselite.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/13218
+gmx.*##+js(nostif, UABP)
+gmx.*###adservice-top
+gmx.*##^script:has-text(adslotFilledByCriteo)
+! https://github.com/uBlockOrigin/uAssets/issues/15000
+gmx.*##+js(set, adBlockDetectionResult, undefined)
+gmx.*##.ad-content
+gmx.*##html.can-have-sky .page-body > .section-content:style(margin-right: 0 !important;)
+gmx.*###container:style(width:100%!important)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/122322
+kuncomic.com##+js(aopr, detectAdBlock)
+*$script,3p,denyallow=cloudflare.com|st-hatena.com|unpkg.com,domain=kuncomic.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/13223
+*$script,domain=discuss.com.hk,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/13220
+open3dmodel.com##+js(aopr, mdp_deblocker)
+open3dmodel.com##[style]:has(.adsbygoogle)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/118779
+lusttaboo.com##+js(set, popped, true)
+lusttaboo.com##+js(set, flashvars.popunder_url, '')
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/119426
+! https://github.com/AdguardTeam/AdguardFilters/issues/119669
+! https://github.com/AdguardTeam/AdguardFilters/issues/120142
+imgsen.*,imgstar.eu,imgsto.*,pics4upload.com##+js(aopr, loadTool)
+*$script,3p,domain=imgsen.com|imgstar.eu|imgsto.*|picdollar.com|pics4upload.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/82559
+@@||zuketcreation.net^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/13236
+embedo.co##+js(aeld, , init)
+embedo.co##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10796#issuecomment-1127484297
+postimees.ee##+js(nostif, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13247
+*$script,3p,denyallow=cloudflare.com|disqus.com|disquscdn.com|fastly.net|gstatic.com|jwpcdn.com|movcloud.net,domain=dembed1.com
+
+! fakazagods.com ads
+fakazagods.com##[href^="https://www.northxclusive.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/13249
+nintendolife.com##+js(aopr, _sp_._networkListenerData)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13272
+movieskafanda.xyz##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+movieskafanda.xyz##[href^="https://bit.ly/"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/118927
+animekhor.xyz##+js(aeld, DOMContentLoaded, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13271
+||japantimes.co.jp/wp-content/themes/jt_theme/library/css/piano.css
+
+! latinblog. tv sister sites popunders
+amateurblog.tv,fashionblog.tv,latinblog.tv,silverblog.tv,tokyoblog.tv,xblog.tv##+js(aopr, decodeURI)
+*$script,3p,domain=amateurblog.tv|fashionblog.tv|latinblog.tv|silverblog.tv|tokyoblog.tv|xblog.tv
+
+! https://github.com/uBlockOrigin/uAssets/issues/13286
+@@||igirls.in^$ghide
+igirls.in##+js(nostif, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13295
+! https://github.com/uBlockOrigin/uAssets/issues/13304
+scrambled.world,shellshock.io##.box_relative.chw-progress-wrapper
+scrambled.world,shellshock.io##.respawn-container > .pauseFiller > .house-wrap
+scrambled.world,shellshock.io##.house-small
+scrambled.world,shellshock.io##.overlay_dark.overlay
+scrambled.world,shellshock.io###spinnerOverlay
+scrambled.world###big-house-ad
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/136546
+hentaiworld.tv##+js(aeld, getexoloader)
+hentaiworld.tv##+js(nowoif, /xlirdr|hotplay\-games|hyenadata/)
+hentaiworld.tv###imagelink
+hentaiworld.tv##.red-dot
+hentaiworld.tv##article > .entry-content.clear > div[style]
+hentaiworld.tv##article > .entry-content.clear > p
+hentaiworld.tv##.section-slider + p
+hentaiworld.tv##.section-slider.full-width-cont:last-of-type:has([href^="https://landing."])
+||hentaiworld.tv/footer-banners.html
+hentaiworld.tv##.swiper-slide-visible:has(> a[target="_blank"])
+hentaiworld.tv##a[href^="https://hotplay-games.life/"]
+hentaiworld.tv##.buton-main-link
+hentaiworld.tv##.card-container:not([href^="https://hentaiworld.tv"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/13303
+erofound.com##+js(nosiif, ads)
+erofound.com##+js(aopr, document.body.insertAdjacentHTML)
+embed-player.space##+js(nowoif)
+erome.com##+js(acs, $, exo)
+erome.com##+js(aopr, tic)
+erome.com##+js(set, tiPopAction, noopFunc)
+erome.com##.ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/13314
+@@||g.doubleclick.net/tag/js/gpt.js$script,redirect-rule,domain=pomponik.pl
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/118844
+trytutorial.com##+js(aopr, ai_run_scripts)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13317
+@@||liveindex.org/wp-content/plugins/imedia-basic/*$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/13320
+imdbembed.xyz##+js(nowoif)
+imdbembed.xyz###addiv
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/119387
+! https://github.com/uBlockOrigin/uAssets/issues/18891
+apkmody.*##+js(nano-stb, download_loading, *)
+apkmody.*##+js(nowoif)
+apkmody.*##.download-ads
+apkmody.*##.body-fixed-footer
+
+! https://golink.xaydungplus.com/5jv8H69 focus detection
+golink.xaydungplus.com##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13358
+agrarwetter.net##+js(aopw, detector_launch)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13365
+flaticon.com##+js(aopr, pu_url)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13369
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=tamrieltradecentre.com
+tamrieltradecentre.com##[href*="sjv.io"]:remove()
+tamrieltradecentre.com#@#ins.adsbygoogle
+tamrieltradecentre.com##.glass-panel > ins.adsbygoogle:style(height: 10px !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/119613
+1l1l.to,cdn1.link,vikistream.com##+js(acs, setTimeout, admc)
+! in case generic cosmetic filter is disabled ex. on mobile
+cdn1.link###adholder
+
+! fastconverter. net popups
+fastconverter.net##+js(nosiif, Click)
+fastconverter.net##+js(ra, onclick, , stay)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13374
+||enbdev.com/_main.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/13391
+extratorrent.*,torrentstatus.*,yts2.*,y2mate.*##+js(aopw, afStorage)
+extratorrent.*,torrentstatus.*,yts2.*,y2mate.*##+js(nowoif)
+torrentstatus.*,yts2.*,y2mate.*##+js(aopr, mm)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13336
+! https://github.com/uBlockOrigin/uAssets/issues/13393
+corriere.it,oggi.it##+js(aeld, adb)
+||rcsobjects.it/rcs_anti-adblocker
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=oggi.it,redirect-rule=google-ima.js
+oggi.it##+js(set, google.ima.OmidVerificationVendor, {})
+oggi.it##+js(set, Object.prototype.omidAccessModeRules, {})
+corriere.it###rcsad_TopLeft_wrapper
+
+! https://github.com/uBlockOrigin/uAssets/issues/13396
+forum.cstalking.tv##+js(aopw, checkAdBlocker)
+forum.cstalking.tv##+js(no-fetch-if, ads)
+cstalking.tv##.blockhead
+
+! javhat.tv popup, ad
+embed-media.com##+js(aopr, __Y)
+
+! mangakita.net popup
+mangakita.net##+js(set, puShown1, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13403
+@@||bbcamerica.com^$ghide
+
+! cdn.camsstream. com popunder
+camsstream.com##+js(acs, onload, open)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/uy6zl8/ads_started_show_up_on_top_of_video/
+||iamcdn.net/players/playhydraxs.min.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/13417
+@@||amcplus.com^$ghide
+
+! gratflix.org popup
+gratflix.org##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/120205
+||matystudios.github.io/banner_ad.png$image,redirect-rule=2x2.png
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/120118
+! https://github.com/uBlockOrigin/uAssets/issues/16776
+@@||top-faucet.com^$ghide
+top-faucet.com###ads2
+top-faucet.com##div[style]:has(> span[id^="ezoic"])
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/130155
+zertalious.xyz##+js(aopr, onAdblockerDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16556
+sushiscan.*##+js(nosiif, daadb)
+
+! https://github.com/reek/anti-adblock-killer/issues/4530
+tech-story.net##+js(no-xhr-if, adsbygoogle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13463
+@@||videa.hu^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/8577
+iconmonstr.com##.container-content-ad
+! https://github.com/uBlockOrigin/uAssets/issues/13461
+iconmonstr.com##+js(acs, document.getElementById, nextFunction)
+iconmonstr.com##+js(aeld, DOMContentLoaded, adsBlocked)
+iconmonstr.com##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/119883
+ta2deem7arbya.com##+js(aopr, adsBlocked)
+ta2deem7arbya.com###mdtimer
+ta2deem7arbya.com###makingdifferenttimer:style(display: block!important)
+bestcash2020.com##+js(set, blurred, false)
+bestcash2020.com##+js(nowoif)
+bestcash2020.com#@#.banner-468x60
+bestcash2020.com#@#.banner-728x90
+bestcash2020.com##.banner-inner
+||youtube.com/embed/$frame,domain=bestcash2020.com
+
+! https://www.elektronikpraxis.vogel.de ad reinsertion
+*$xhr,redirect-rule=nooptext,domain=vogel.de|elektronikpraxis.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/13801
+! https://github.com/uBlockOrigin/uAssets/issues/19266
+magicgameworld.com##+js(aost, document.getElementById, adsBlocked)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/120124
+@@||up-cripto.com^$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/120351
+! https://github.com/AdguardTeam/AdguardFilters/issues/120120
+#@##iqadtile5
+###iqadtile5:not(:empty)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/120307
+netflav.com##.video_iframe_overlay_absolute_background_container
+missav.com##div[x-show="showBanner"]
+! https://github.com/uBlockOrigin/uAssets/issues/16375
+||creative.live.missav.com/widgets/Spot/lib.js
+missav.com,missav123.com,missav789.com##+js(acs, document.createElement, htmlAds)
+missav.com,missav123.com,missav789.com##+js(nowoif)
+missav.com##div[\@click\.once]:remove-attr(@click.once)
+missav.com##.hidden > .mx-auto
+missav.com##^script:has-text(htmlAds)
+
+! animexstream. tk popups
+animexstream.*##+js(aopr, __Y)
+
+! wilifilm.net popup
+wilifilm.net##+js(aopr, BetterJsPop)
+wilifilm.net##^script:has-text(BetterJsPop.add)
+
+! wowroms.com timer, PH
+wowroms.com##+js(nano-sib, second)
+wowroms.com##.ulromlist > .element:has(> ul > li > .adsbygoogle)
+
+! 'undefined' leftover e.g. chintpurni.angelfire.com
+! doesn't work on Fireofx e.g. zhra.angelfire.com but no big matter
+angelfire.com##+js(acs, document.write, lycos_ad)
+angelfire.com##^script[type]:has-text(lycos_ad)
+
+! Paramount ad popup overlay
+discussingfilm.net##.mfp-wrap
+discussingfilm.net##.mfp-bg
+discussingfilm.net##html:style(overflow: auto !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/v1s4c4/please_fix_antiadblocker_detection/
+! https://github.com/uBlockOrigin/uAssets/issues/14214
+*$script,domain=tieutietkiem.com,redirect-rule=noopjs
+tieutietkiem.com##+js(set, detectAdBlock, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13504
+@@||mcqmall.com^$ghide
+mcqmall.com##+js(no-fetch-if, ads)
+
+! anti adb iptvrun. com
+iptvrun.com##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13506
+@@||mathportal.org^$ghide
+mathportal.org##ins.adsbygoogle
+mathportal.org##.googleOglasVrhCalculatorResp
+||mathportal.org/log/
+
+! https://www.reddit.com/r/uBlockOrigin/comments/v2b6l4/asking_to_unblock_the_adblocker/
+! https://github.com/uBlockOrigin/uAssets/commit/8e9f9f843a337445a8fd71825470eb455e7c0ad0#commitcomment-75070676
+! https://github.com/uBlockOrigin/uAssets/issues/13808
+#@#.ad-placeholder
+##.ad-placeholder:not(#filter_ads_by_classname):not(#detect_ad_empire):not(#detect):not(.adsbox)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13516
+course9x.com##+js(aeld, , show)
+
+! 111.90.151.26 ads
+111.90.151.26##+js(aopr, preroll_helper.advs)
+111.90.151.26##+js(acs, jQuery, magnificPopup)
+111.90.151.26##[href^="http://buaksib.in/"]
+
+! ifenpaidy. com overlay, popup
+ifenpaidy.com##+js(aopr, Math.floor)
+ifenpaidy.com##.in.fade.modal
+ifenpaidy.com##.in.fade.modal-backdrop
+ifenpaidy.com##body:style(overflow: auto !important;)
+
+! adsterra popups / frames
+/\/[0-9a-z]{8,10}\?shu=[0-9a-z]{150,}/$doc
+?key=*&submetric=$popup,3p
+&key=*&adb=y$popup,3p
+?campaign-key=*&key=*&publisherKey=*&placementIdentifier=$popup,3p
+/watchnew?key=$frame,3p
+/watchnew?shu=$frame,3p
+/^https?:\/\/[-0-9a-z]{5,}\.com\/[0-9a-z]{8,10}\?key=[0-9a-f]{32}$/$frame,3p
+?key=*&psid=https://$popup,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/13539
+@@||operationharshdoorstop.com^$ghide
+
+! exo ads, popups
+dads-banging-teens.com,home-xxx-videos.com,mature-chicks.com,teens-fucking-matures.com##+js(aeld, getexoloader)
+dads-banging-teens.com,home-xxx-videos.com,mature-chicks.com,teens-fucking-matures.com###dclm_modal_screen
+dads-banging-teens.com,home-xxx-videos.com,mature-chicks.com,teens-fucking-matures.com###dclm_modal_content
+dads-banging-teens.com,home-xxx-videos.com,mature-chicks.com,teens-fucking-matures.com###dclm-blur:style(filter: none !important)
+
+! counter https://github.com/easylist/easylist/commit/159996e82c77485d9c6a205e6792d3d5dd833962
+||amazon-adsystem.com/aax2/apstag.js$script,redirect=amazon_apstag.js,important,domain=time.com
+
+! yt-subs .com
+/propeller-ads
+yts-subs.*,subtitles.cam##+js(acs, setTimeout, admc)
+yts-subs.net##+js(nostif, (), 150)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13557
+distrowatch.com##[href*="utm"]:upward(tbody)
+! https://github.com/uBlockOrigin/uAssets/issues/18382
+distrowatch.com##body > h2
+distrowatch.com##.TablesTitle > div[style*="padding"]
+distrowatch.com##.TablesTitle > div:not([style="padding"]):style(width: 100% !important;)
+distrowatch.com##table .Invert:has-text(/3cx|sponsor|tuxedo|star lab|free tech guides|malibal|advertisement|shells|purism/i):upward(table)
+distrowatch.com##table .Invert:has-text(/3cx|sponsor|tuxedo|star lab|free tech guides|malibal|advertisement|shells|purism/i):upward(table):upward([style="width: 20%; border: 0; margin: 0; padding: 0; vertical-align: top"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/13569
+turbo1.co##+js(nostif, getComputedStyle, 250)
+
+! https://forums.lanik.us/viewtopic.php?p=164278-adsup-lk#p164278
+adsup.lk##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13577
+cryptomonitor.in##+js(nostif, show)
+
+! consoleroms.com,romspedia.com,romsgames.net,romsget.io timer, PH
+consoleroms.com,romspedia.com##+js(nano-sib, timeLeft)
+! the rule below works only occasionary
+romsgames.net,romsget.io##+js(nano-stb, submit, 5000)
+romspedia.com###ad1
+romspedia.com###ad2
+
+! https://github.com/uBlockOrigin/uAssets/issues/13583
+2the.space##+js(aeld, scroll, modal)
+2the.space##+js(no-fetch-if, googlesyndication.com)
+2the.space##[id^="wcfloatDiv"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/13587
+poscitech.*##+js(nowoif)
+poscitech.*##+js(acs, setTimeout, admc)
+poscitech.*##^script:has-text("admc")
+poscishd.online##+js(set, stop, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/120976
+gay-tubes.cc##+js(aeld, DOMContentLoaded, adsBlocked)
+
+! komikav. com popups
+komikav.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13607
+@@*$xhr,domain=adclickersbot.com
+@@||static.surfe.pro/js/net.js$script,domain=adclickersbot.com
+adclickersbot.com##+js(aeld, , _0x)
+adclickersbot.com##+js(nowoif, /^/, 1)
+*$frame,domain=adclickersbot.com,redirect-rule=noopframe
+*$image,domain=adclickersbot.com,redirect-rule=1x1.gif
+||surfe.be^$important
+
+! https://github.com/uBlockOrigin/uAssets/issues/10291
+! https://www.reddit.com/r/uBlockOrigin/comments/v7lncl/another_antiadblocker/
+advertisingexcel.com,allcryptoz.net,batmanfactor.com,crewbase.net,crewus.net,phineypet.com,shinbhu.net,shinchu.net,talkforfitness.com,thumb8.net,thumb9.net,topcryptoz.net,uniqueten.net,ultraten.net##.a, .b, .c, .d, .e, .f, .g
+! https://github.com/uBlockOrigin/uAssets/issues/10291#issuecomment-1247746003
+allcryptoz.net,batmanfactor.com,crewbase.net,crewus.net,phineypet.com,shinbhu.net,shinchu.net,talkforfitness.com,talkforfitness.com,thumb8.net,thumb9.net,topcryptoz.net,uniqueten.net,ultraten.net##form > div[id]:style(display: block !important;)
+advertisingexcel.com,allcryptoz.net,batmanfactor.com,crewbase.net,crewus.net,phineypet.com,shinbhu.net,shinchu.net,talkforfitness.com,talkforfitness.com,thumb8.net,thumb9.net,topcryptoz.net,uniqueten.net,ultraten.net##form[id]:style(display: block !important;)
+! https://www.reddit.com/r/uBlockOrigin/comments/xbjszd/
+*$script,redirect-rule=noopjs,domain=allcryptoz.net|batmanfactor.com|crewbase.net|crewus.net|shinbhu.net|shinchu.net|talkforfitness.com|thumb8.net|thumb9.net|topcryptoz.net|uniqueten.net|ultraten.net
+allcryptoz.net,batmanfactor.com,crewbase.net,crewus.net,phineypet.com,shinbhu.net,shinchu.net,thumb8.net,thumb9.net,topcryptoz.net,uniqueten.net,ultraten.net###overlay
+*$frame,redirect-rule=noopframe,domain=allcryptoz.net|batmanfactor.com|crewbase.net|crewus.net|shinbhu.net|shinchu.net|talkforfitness.com|thumb8.net|thumb9.net|topcryptoz.net|uniqueten.net|ultraten.net
+*$xhr,redirect-rule=nooptext,domain=allcryptoz.net|batmanfactor.com|crewbase.net|crewus.net|shinbhu.net|shinchu.net|talkforfitness.com|thumb8.net|thumb9.net|topcryptoz.net|uniqueten.net|ultraten.net
+*$image,redirect-rule=1x1.gif,domain=allcryptoz.net|batmanfactor.com|crewbase.net|crewus.net|shinbhu.net|shinchu.net|talkforfitness.com|thumb8.net|thumb9.net|topcryptoz.net|uniqueten.net|ultraten.net
+@@*$ghide,domain=allcryptoz.net|batmanfactor.com|crewbase.net|crewus.net|shinbhu.net|shinchu.net|talkforfitness.com|thumb8.net|thumb9.net|topcryptoz.net|uniqueten.net|ultraten.net
+@@*$xhr,script,1p,domain=allcryptoz.net|batmanfactor.com|crewbase.net|crewus.net|shinbhu.net|shinchu.net|talkforfitness.com|thumb8.net|thumb9.net|topcryptoz.net|uniqueten.net|ultraten.net
+*$object,empty,domain=allcryptoz.net|batmanfactor.com|crewbase.net|crewus.net|shinbhu.net|shinchu.net|talkforfitness.com|thumb8.net|thumb9.net|topcryptoz.net|uniqueten.net|ultraten.net
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-7422831
+bestclaimtrx.xyz##+js(no-xhr-if, popunder)
+
+! 111.90.159.159 ads
+111.90.159.159##+js(aopr, preroll_helper.advs)
+111.90.159.159##+js(acs, jQuery, magnificPopup)
+111.90.159.159##[href^="http://buaksib.in/"]
+111.90.159.159###custom_html-3
+
+! https://github.com/uBlockOrigin/uAssets/issues/13629
+weatherwx.com##+js(set, detectAdBlock, noopFunc)
+
+! Anti Adblock
+sattaguess.com,winshell.de,rosasidan.ws##+js(set, detectAdBlock, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13635
+unblockit.*###ni-overlay
+unblockit.*##+js(acs, setTimeout, admc)
+unblockit.*##center
+
+! https://www.reddit.com/r/uBlockOrigin/comments/v87ylw/please_remove_anti_adblocker/
+moviegan.*##+js(no-xhr-if, ads)
+moviegan.*##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13639
+! bc.vc / bcvc. xyz (ex .live)
+bcvc.*##+js(aopr, open)
+bc.vc##+js(nowoif)
+*$frame,3p,domain=bc.vc
+||bc.vc/mload.gif$image
+||punosy.top^$3p
+@@||google.com^$frame,domain=bc.vc
+||track.bcvc.mobi^$all
+||skiptheadz.com^$all
+||adblockerapp.com^$all
+||doaipomer.com^$all
+/lp/?lID=*&zone=$doc
+
+! erotom.com ad
+erotom.com##+js(acs, String.fromCharCode, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13652
+@@||avpgalaxy.net^$xhr,1p
+avpgalaxy.net##+js(set, passthetest, true)
+avpgalaxy.net##.ab-all
+
+! https://www.reddit.com/r/uBlockOrigin/comments/v961kc/unwanted_tabs_httpsf1livegpmef1live3html_opens_a/
+! f1livegp. me
+f1livegp.*##+js(acs, setTimeout, admc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13663
+beatsnoop.com,fetchpik.com##^script:has-text(googlesyndication)
+!#if !cap_html_filtering
+beatsnoop.com,fetchpik.com##+js(rmnt, script, googlesyndication)
+!#endif
+
+! https://sub1s.com/LK7035487683H1 timer
+sub1s.com##+js(ra, href, .unlock-step-link)
+sub1s.com##+js(nano-stb, fa-unlock, 3000)
+
+! pelishouse.me/online fake player
+pelishouse.*##+js(ra, href, #clickfakeplayer)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13673
+tweakcentral.net##+js(aopr, checkBlock)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/vadpyu/how_to_block_click_to_scroll_on_this_site/
+utopiascans.com##+js(ra, href, [href*="discord"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/13677
+! https://github.com/uBlockOrigin/uAssets/issues/13738
+! https://github.com/uBlockOrigin/uAssets/issues/14988
+! streamingcommunity .press
+@@||d2y8ttytgze7qt.cloudfront.net^$xhr,domain=streamingcommunity.*
+@@||scws.xyz^$xhr,domain=streamingcommunity.*
+@@||streamingcommunity.*/$xhr,1p
+!#if env_firefox
+@@||googletagmanager.com/gtag/js$xhr,domain=streamingcommunity.*
+streamingcommunity.*##+js(no-xhr-if, thaudray.com)
+!#endif
+!#if !env_firefox
+||googletagmanager.com^$xhr,domain=streamingcommunity.*,redirect-rule=noop.js
+||thaudray.com^$script,xhr,redirect-rule=noop.js,domain=streamingcommunity.*
+!#endif
+
+! tennistream. com => players => popups
+larsenik.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13680
+/main.js$script,3p,domain=criptologico.com
+@@||criptologico.com^$script,1p
+criptologico.com##[src^="blob"]
+criptologico.com##[href^="https://dobywale.xyz"]
+/^https:\/\/[a-z]{8}\.xyz\/main\.js$/$script,3p
+
+! sportbible anti adb on video
+sportbible.com#@#div[class*="Advert"]
+sportbible.com##.dfp-ad-unit:upward(1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13707
+rbxscripts.net##+js(aeld, DOMContentLoaded, adsBlocked)
+rbxscripts.net##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13711
+farescd.com##+js(no-xhr-if, php)
+
+! yout.pw popup
+yout.pw##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13720
+@@||elektrotanya.com^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/13721
+! https://github.com/uBlockOrigin/uAssets/issues/13857
+modmakers.xyz,gamepure.in,warrenrahul.in##+js(set, detectAdBlock, noopFunc)
+modmakers.xyz,gamepure.in,warrenrahul.in###wpsafe-generate:style(display: block !important;)
+modmakers.xyz,gamepure.in,warrenrahul.in###wpsafe-link:style(display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13726
+||cloud.hentai-moon.com/moonads/*$media,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/vd02rc/anti_adblock/
+areatopik.com##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13746
+nokiahacking.pl##+js(aopr, adsbygoogle.loaded)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13755
+freeshib.biz##+js(acs, document.createElement, onerror)
+freeshib.biz##+js(no-fetch-if, vlitag)
+||vlitag.com^$domain=freeshib.biz,redirect-rule=noopjs
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/122005
+! https://github.com/uBlockOrigin/uAssets/issues/16192
+javct.net##+js(aopr, asgPopScript)
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|jsdelivr.net|jsdelivr.map.fastly.net,domain=javct.net
+
+! https://github.com/easylist/easylist/pull/12322
+anisearch.com###rightA
+anisearch.com###content > #start + .pagewidth[style^="margin-left: 11px;"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/13762
+veryfreeporn.com##+js(aopr, Object)
+veryfreeporn.com##+js(nowoif)
+veryfreeporn.com##^script:has-text(popMagic)
+veryfreeporn.com##.js-mob-popup
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/122167
+uporn.icu##+js(acs, decodeURI, decodeURIComponent)
+
+! https://forums.lanik.us/viewtopic.php?t=47623-goodstream-uno
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=goodstream.*
+
+! https://hdmovie2. tv/. to fake player
+hdmovie2.*##+js(ra, href, #clickfakeplayer)
+
+! moviewatch .com.pk ads
+moviewatch.com.pk##+js(aopw, atOptions)
+moviewatch.com.pk##+js(acs, document.createElement, appendChild)
+moviewatch.com.pk##[href*="?key="]
+
+! https://github.com/uBlockOrigin/uAssets/issues/13795
+r10.net##img[width="728"][height="90"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/122290
+javpornhd.online##+js(aopr, __Y)
+
+! https://5anime.net/watch/kakkou-no-iinazuke-episode-8 popup
+mplayer.sbs##+js(aopr, AaDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13803
+austiblox.net##+js(aopr, document.body.innerHTML)
+austiblox.net##+js(set, detectAdBlock, noopFunc)
+austiblox.net##+js(rmnt, script, /adblock|location\.replace/)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/122258
+javrank.com##.text-center:has(> div.koukoku_1)
+||adspy.javrank.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/13809
+palixi.net##+js(no-fetch-if, adsbygoogle)
+
+! https://forums.lanik.us/viewtopic.php?p=164429-nsfw-xxxxsx-com#p164429
+xxxxsx.com##^responseheader(location)
+xxxxsx.com##+js(cookie-remover)
+xxxxsx.com##+js(nostif, href)
+xxxxsx.com##.ps
+
+! https://gocmod.com/floor-plan-creator/ timer
+gocmod.com##.counter
+gocmod.com##.download-btn-group:style(display: inline-flex !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/122543
+zojav.com##+js(aopr, __Y)
+jav68.net#@#.ads-header
+
+! voirseries. rip popups
+voirseries.*##.salidor_inner
+voirseries.*###playerOver
+##[href="https://video-finder.net/"]
+netu.*###qdiv
+.com/add.php^$xhr,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/13827
+*$script,redirect-rule=noopjs,domain=feyorra.site
+
+! hh3dhay.xyz/com popup
+hh3dhay.com##.float-ck-center-lt
+
+! moviesland. eu/ .xyz
+moviesland.*##+js(aopr, __Y)
+moviesland.*##+js(aopr, AaDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13837
+*$script,domain=doge25.in,redirect-rule=noopjs
+doge25.in##+js(no-fetch-if, /ads|track/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13843
+rimworldbase.com##+js(aopr, ai_run_scripts)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13848
+@@||ads.reddit.com/ads.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/13850
+korall.xyz##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13854
+@@||geolocation-db.com/json/$xhr,domain=filepress.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/13855
+! https://github.com/uBlockOrigin/uAssets/issues/19404
+nullpk.com##+js(acs, eval, replace)
+nullpk.com##+js(nostif, showModal)
+
+! https://github.com/easylist/easylist/commit/fe4dc3fe7623d70db6cb9c3b22e8a614f67fa011
+||doubleclick.net/tag/js/gpt.js$script,important,domain=webmd.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/13868
+@@||tusachxinhxinh.com^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/13871
+apksafe.in##+js(no-fetch-if, ads)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/123015
+||xxx18.uno/*-code.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/13870
+!#if env_mobile
+reddit.com,reddittorjg6rue252oqsxryoxengawnmo46qy4kyii5wtqnwfj4ooad.onion##.XPromoBlockingModal
+!reddit.com,reddittorjg6rue252oqsxryoxengawnmo46qy4kyii5wtqnwfj4ooad.onion##xpromo-nsfw-blocking-modal
+reddit.com,reddittorjg6rue252oqsxryoxengawnmo46qy4kyii5wtqnwfj4ooad.onion##.m-blurred:style(filter: none !important;)
+reddit.com,reddittorjg6rue252oqsxryoxengawnmo46qy4kyii5wtqnwfj4ooad.onion##xpromo-new-nsfw-blocking-modal
+reddit.com,reddittorjg6rue252oqsxryoxengawnmo46qy4kyii5wtqnwfj4ooad.onion##[style^="filter:"]:style(filter: none !important;)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/13879
+@@*$ghide,domain=bishopsstortfordindependent.co.uk|cambridgeindependent.co.uk|dissexpress.co.uk|fenlandcitizen.co.uk|granthamjournal.co.uk|kentonline.co.uk|lynnnews.co.uk|newarkadvertiser.co.uk|rutland-times.co.uk|spaldingtoday.co.uk|stamfordmercury.co.uk|suffolknews.co.uk|velvetmag.co.uk
+bishopsstortfordindependent.co.uk,cambridgeindependent.co.uk,dissexpress.co.uk,fenlandcitizen.co.uk,granthamjournal.co.uk,lynnnews.co.uk,kentonline.co.uk,newarkadvertiser.co.uk,rutland-times.co.uk,spaldingtoday.co.uk,stamfordmercury.co.uk,suffolknews.co.uk,velvetmag.co.uk##[id*="mpu"]:style(height: 1px !important)
+bishopsstortfordindependent.co.uk,cambridgeindependent.co.uk,dissexpress.co.uk,fenlandcitizen.co.uk,granthamjournal.co.uk,lynnnews.co.uk,kentonline.co.uk,newarkadvertiser.co.uk,rutland-times.co.uk,spaldingtoday.co.uk,stamfordmercury.co.uk,suffolknews.co.uk,velvetmag.co.uk##[class*="MPU"]:style(height: 1px !important)
+stamfordmercury.co.uk#@#.MPU
+kentonline.co.uk#@#.mpu
+
+! https://github.com/FastForwardTeam/FastForward/issues/565
+mhma12.tech##+js(nano-sib, timer, 1500)
+mhma12.tech##+js(set, timeset, 0)
+hoxiin.com##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14041
+wpking.in##.adbox > center > .adbox
+wpking.in##section > center > .adbox
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/123094
+linkbin.me##+js(aopr, Object.prototype.loadCosplay)
+linkbin.me##+js(aopr, Object.prototype.loadImages)
+
+! btcbunch. com detection
+*$script,redirect-rule=noopjs,domain=btcbunch.com
+btcbunch.com##+js(rmnt, script, /downloadJSAtOnload|Object.prototype.toString.call/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13891
+! https://github.com/uBlockOrigin/uAssets/issues/15308
+! https://github.com/uBlockOrigin/uAssets/issues/21402
+filemoon.*,moonmov.pro##+js(nowoif)
+filemoon.*##+js(acs, navigator, popunder)
+filemoon.*##+js(nano-sib, seconds)
+filemoon.*##+js(aopr, FMPoopS)
+filemoon.*##^script:has-text(/Math.floor|FMPoopS/)
+filemooon.top##+js(noeval-if, popunder)
+||filemoon.in/dl
+||filemoon.in/js/custom_pop.js
+||filemoon.*/player/jw8/vast.js$script,1p
+||moonmov.pro/js/baf.js$script,1p
+##div[style="position: fixed; display: block; width: 100%; height: 100%; inset: 0px; background-color: rgba(0, 0, 0, 0); z-index: 300000;"]
+
+! nosteam popup
+nosteam.ro,nosteamgames.ro##+js(nowoif)
+nosteam.ro##+js(acs, jQuery, click)
+@@||nosteam.ro/notcaptcha/adheader.js$domain=nosteamgames.ro
+nosteamgames.ro##+js(aopr, _wm)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/123311
+javenglish.me##+js(aopr, __Y)
+
+! https://github.com/easylist/easylist/issues/12450
+time4tv.stream##+js(acs, atob, decodeURIComponent)
+extrafreetv.com,trustexploration.com,sportsembed.*,sportsonline.*##+js(acs, setTimeout, admc)
+*$script,3p,denyallow=cloudflare.net|jsdelivr.net|fastly.net|swarm.video,domain=sportsonline.*
+*$script,3p,domain=maxsport.one|sportz.football
+*$script,3p,denyallow=ajax.googleapis.com|jsdelivr.net,domain=extrafreetv.com
+*$script,3p,denyallow=chatango.com|twitter.com,domain=time4tv.stream
+||terribledeliberate.com^$all
+sportsonline.*##^script:has-text("admc")
+sportsonline.*##^script:has-text(\"admc\")
+/deb.html$frame,1p
+sportsonline.*###html1
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/123342
+speedynews.xyz##+js(nano-sib, updatePercentage, 100, 0.02)
+technemo.xyz##+js(set, blurred, false)
+speedynews.xyz##div[id^="speedynews_"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/123438
+ps2-bios.com##+js(acs, document.getElementById, innerHTML)
+
+! sports stuff rojadirecta. asia /nstream. to
+*$script,3p,denyallow=cloudflare.com|gstatic.com|jsdelivr.net|fastly.net|swarm.video|zencdn.net,domain=nstream.to
+
+! actusports. eu
+*$script,3p,denyallow=jsdelivr.net|fastly.net|swarm.video,domain=warnforlese.net
+*$script,3p,denyallow=bootstrapcdn.com|cloudflare.net|jquery.com|hwcdn.net|jsdelivr.net|fastly.net|googleapis.com,domain=fclecteur.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/13914
+flixtormovies.co##+js(aopr, AaDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13915
+||flixtor.movie/ajax/script.php$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/13917
+! https://github.com/uBlockOrigin/uAssets/issues/15700
+softonic.*##+js(aeld, , [native code])
+||filehippo.*/revamp.js$script,1p
+
+! sexemix. com popMagic (classic filter fails), preRoll
+sexemix.com##+js(aost, document.createElement, /(?=^(?!.*(https)))/)
+sexemix.com##+js(set, flashvars.adv_pre_src, '')
+
+! https://www.reddit.com/r/uBlockOrigin/comments/vrljrz/block_popup_overlay_cant_scroll_now/
+*$script,xhr,domain=intibia.com,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/13930
+mangaprotm.com##+js(acs, eval, replace)
+
+! https://github.com/easylist/easylist/issues/12454
+*$3p,domain=direct-cloud.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/13940
+bluedrake42.com##+js(nostif, adb)
+
+! calidadcine. net popups
+calidadcine.net##+js(aopw, afStorage)
+
+! teachoo. com anti adb
+teachoo.com##+js(aopr, importantFunc)
+! https://github.com/uBlockOrigin/uAssets/issues/19236
+teachoo.com##^script:has-text(numberPages)
+!#if !cap_html_filtering
+teachoo.com##+js(rmnt, script, numberPages)
+!#endif
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/123560
+go.linkbnao.com,link-yz.com##+js(set, blurred, false)
+tecnicalboy.com##fixedbanner
+
+! pianoweb. fr anti adb
+*$script,domain=pianoweb.fr,redirect-rule=noopjs
+
+! links4u. co popups
+links4u.co##+js(aost, document.createElement, /(?=^(?!.*(http)))/)
+links4u.co##+js(aost, Object, webpack)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13948
+apkmagic.com.ar##+js(acs, eval, replace)
+
+! https://rpdrlatino.com/episodio/big-boys-1x4/ popup
+! https://github.com/uBlockOrigin/uAssets/issues/21870
+rpdrlatino.live##+js(aopr, BetterJsPop)
+rpdrlatino.live##+js(set, adblockcheck, false)
+rpdrlatino.live##+js(nowoif, , 10)
+
+! edoujin.net popunder/redirect
+edoujin.net##+js(aost, String.prototype.charCodeAt, /(?=^(?!.*(https|Object)))/)
+edoujin.net##+js(refresh-defuser)
+edoujin.net##^meta[http-equiv="refresh"]
+
+! https://forums.lanik.us/viewtopic.php?t=47686-maisonbrico-com
+maisonbrico.com##+js(aopr, console.warn)
+maisonbrico.com##[id^="pub"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/13955
+odum.cl##+js(acs, $, sam)
+
+! pornobae.com popup
+pbtube.co##+js(aopr, BetterJsPop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13966
+pl#@#.advert
+elektroda.pl###topbb
+
+! https://github.com/uBlockOrigin/uAssets/issues/13961
+link.paid4link.net##+js(disable-newtab-links)
+link.paid4link.net##+js(nowoif)
+link.paid4link.net##.blog-content
+link.paid4link.net##.card-body
+link.paid4link.net##.card-img-top
+
+! helmiau. com anti adb
+helmiau.com##+js(acs, document.createElement, open)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/veh6rr/ai_dungeon_2_now_has_ads/icxvo7f/ anti adb
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=play.aidungeon.io
+@@||pagead2.googlesyndication.com/pagead/managed/js/adsense/*/show_ads_impl$script,domain=play.aidungeon.io
+||doubleclick.net^$frame,redirect-rule=noopframe,domain=play.aidungeon.io
+play.aidungeon.io#@#ins.adsbygoogle
+play.aidungeon.io##+js(nano-sib, current())
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/123928
+bitssurf.com##+js(acs, document.getElementById, ads)
+
+! https://ex-foary.com/McXedugT timer, popup
+gawbne.com,forex-golds.com,forex-trnd.com##+js(nano-sib, counter, 2000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/123875
+||bmfads.com^$script,redirect-rule=noopjs
+||gosixs.com/adss/$frame
+||gosixs.com/bbc/$frame
+
+! https://github.com/adsbypasser/adsbypasser/issues/3750
+paylinnk.com##+js(set, blurred, false)
+
+! hentaivideos.net pounder, ad
+hentaivideos.net##+js(noeval-if, popUnderStage)
+hentaivideos.net##.aside-banner
+||hentaivideos.net/imp/
+
+! https://github.com/uBlockOrigin/uAssets/issues/13986
+coolrom.com.au##+js(acs, confirm, location)
+coolrom.com.au###td-top-leaderboard-1
+coolrom.com.au###td-top-mpu-1
+coolrom.com.au###td-bottom-mpu-1
+
+! https://news.ycombinator.com/item?id=32031880#32033154
+thephoblographer.com##.mrf-adv__wrapper
+
+! https://github.com/uBlockOrigin/uAssets/issues/14007
+! https://www.reddit.com/r/uBlockOrigin/comments/y0bjug
+! https://www.reddit.com/r/uBlockOrigin/comments/z0m8no
+panda-novel.com,zebranovel.com##+js(set, pandaAdviewValidate, true)
+panda-novel.com,zebranovel.com##[class^="novel-ins"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/14012
+! https://github.com/uBlockOrigin/uAssets/issues/14197
+ksl.com##+js(acs, showAdBlock)
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=noopjs,domain=ksl.com
+@@||cloudfront.net/videojs/videojs-contrib-ads.js$script,domain=ksl.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/14011
+mlb66.ir##+js(nowoif)
+mlb66.ir##.overlay-wrapper
+||mlb66.ir/*.php$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/14014
+technichero.com##+js(nostif, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14018
+/hillpop.php|$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/14024
+3dmili.com##+js(rmnt, script, deblocker)
+||3dmili.com^$csp=sandbox allow-forms allow-same-origin allow-scripts allow-modals allow-orientation-lock allow-pointer-lock allow-presentation allow-top-navigation
+3dmili.com##.homeadv
+||3dmili.com/*.gif$image
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/124348
+claim.fun##input[type="submit"]:style(display: block !important;)
+enit.in##+js(set, timeSec, 0)
+@@||claim.fun^$ghide
+||crypto-fire.website/mine/partner/$3p
+||datacheap.io/vue.min.js
+||quiziizz.github.io/cdnjs.js
+! https://github.com/uBlockOrigin/uAssets/issues/16504
+claim.fun##+js(no-xhr-if, czilladx)
+
+! owodeuwu. xyz (cue-vana frame)
+owodeuwu.xyz##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14029
+@@||thizissam.in^$ghide
+thizissam.in##.ezoic-ad
+thizissam.in##.ad-container
+thizissam.in##ins.adsbygoogle
+thizissam.in###Dbtn
+thizissam.in##[id^="AT-Download"]:style(display: block !important;)
+thizissam.in##+js(nano-sib, counter, , 0.02)
+thizissam.in##+js(set, blurred, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/vz6535/adblock_detector_found/
+haikyuu-manga.net##+js(acs, eval, userAgent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14037
+||grow.gab.com/get/status?video=tv$xhr,domain=tv.gab.com,redirect=nooptext
+||grow.gab.com/galahad/$media
+tv.gab.com###ad-clicks-overlay
+
+! https://phimdacap.com/xem-phim-thanh-pho-mat-tich-the-lost-city-thuyet-minh-118607.html ads and popup
+phimdacap.com##[data-id="catfish"]
+phimdacap.com##[data-id="popup"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/124326
+cardscanner.co##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14042
+itstillworks.com##.logo,.blinker:style(animation: none !important;)
+
+! https://github.com/uBlockOrigin/uAssets/pull/14057
+whatsappmods.net##+js(nano-sib, l, , 0)
+whatsappmods.net##.fa-clock-o
+
+! https://github.com/uBlockOrigin/uAssets/issues/14058
+ifreemagazines.com##+js(aopr, ai_run_scripts)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/w1cgvj/antiblock_warning/
+! https://github.com/uBlockOrigin/uAssets/issues/19544
+ngontinh24.com##+js(nostif, aaaaa-modal)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/vzu2fw/stop_adblock_detection_here/
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=s4c.cymru
+
+! peladas69. com popunder
+peladas69.com##+js(aopr, decodeURI)
+
+! theporngod.com ad
+theporngod.com##+js(set, flashvars.adv_pre_vast, '')
+theporngod.com##+js(set, flashvars.adv_pre_vast_alt, '')
+theporngod.com##.banners
+theporngod.com##.table
+theporngod.com##[id^="cw-"]
+theporngod.com##.closebox
+
+! leaknud.com popup
+leaknud.com##+js(aopw, afStorage)
+leaknud.com##^script:has-text(afScript)
+
+! box-manga. com ads
+box-manga.com###ads728x90top
+
+! https://github.com/uBlockOrigin/uAssets/issues/14065
+! https://github.com/uBlockOrigin/uAssets/issues/14658
+! https://github.com/uBlockOrigin/uAssets/issues/17224
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=colonist.io
+@@||services.vlitag.com/adv1/?q=$script,domain=colonist.io
+@@||tag.vlitag.com/v1/$script,domain=colonist.io
+@@||assets.vlitag.com/plugins/cmptcf2/cmp-v$script,domain=colonist.io
+@@||assets.vlitag.com/prebid/default/prebid-$script,domain=colonist.io
+@@||assets.vlitag.com/plugins/safeframe/src/js/sf_host.min.js$script,domain=colonist.io
+@@||services.vlitag.com/obj/$xhr,domain=colonist.io
+@@||services.vlitag.com/cli/$xhr,domain=colonist.io
+colonist.io#@#.adsbyvli
+colonist.io##.adsbyvli:style(height: 1px !important; opacity: 0 !important; pointer-events: none !important;)
+@@||colonist.io^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/136337
+javbigo.xyz,javuncen.xyz##+js(aopr, __Y)
+javuncen.xyz##+js(aopr, mm)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/124861
+nullforums.net##+js(nostif, show)
+
+! adblockeronstreamtape. xyz/me popups
+adblockeronstreamtape.*##+js(nowoif)
+adblockeronstreamtape.*##+js(nano-stb, counter)
+
+! vostanimez. tv => player ddl-francais. com popups
+ddl-francais.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14077
+course-downloader.com##+js(acs, addEventListener, blocker)
+
+! arkcod. org anti adb
+arkcod.org##+js(nostif, location)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/124919
+getintoway.com##+js(no-fetch-if, googlesyndication)
+getintoway.com###wpsafe-generate,div[id^="wpsafe-wait"]
+getintoway.com###wpsafe-link:style(display: block !important;)
+! https://github.com/uBlockOrigin/uAssets/issues/18675
+getintoway.com##+js(noeval-if, adsBlocked)
+getintoway.com##+js(no-xhr-if, /googlesyndication|doubleclick/)
+
+! bang14.com popup
+bang14.com##+js(acs, $, setCookie)
+
+! movierulzhd. one (chp adb det)
+movierulzhd.*##+js(acs, document.getElementById, adsBlocked)
+movierulzhd.*##+js(aost, document.createElement, /(?=^(?!.*(http)))/)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/w5hu7x/
+||messaging.sourcepoint.com^$script,domain=autocar.co.uk
+
+! Ads (Indonesian)
+animasu.club###lmd-iklan
+
+! https://github.com/uBlockOrigin/uAssets/issues/14104
+roshiyatech.my.id##+js(nostif, ads)
+||wb4.xyz^$frame,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/14115
+@@||documaniatv.com^$script,xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/14134
+@@||delicious-audio.com^$ghide
+delicious-audio.com##.big-ads-show
+
+! streaming-french.net popup
+streaming-french.net##+js(aopr, BetterJsPop)
+streaming-french.net##^script:has-text(BetterJsPop.add)
+
+! secretstash.in adserver call
+secretstash.in##+js(noeval)
+
+! https://www.liveone.com/ anti adb
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=noopjs,domain=liveone.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2320
+||freemcserver.net/build/*.js?v=17$script,1p,important,domain=freemcserver.net|~panel.freemcserver.net
+*$xhr,script,redirect-rule=noopjs,domain=freemcserver.net
+*$image,redirect-rule=1x1.gif,domain=freemcserver.net
+@@*$xhr,domain=freemcserver.net
+@@||freemcserver.net^$script,1p
+@@||freemcserver.net^$ghide
+panel.freemcserver.net##+js(nostif, \x, 5000)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/w61x37/help_with_adblock_detector_on_this/
+###adMid1:not(:empty)
+###ad_feature:not(:empty)
+###adtagfooter:not(:empty)
+###docmainad:not(:empty)
+###myAd:not(:empty)
+###sideadbox:not(:empty)
+###travel_ad:not(:empty)
+
+! https://orbispatches. com/CUSA06560 anti adb
+@@||orbispatches.com^$ghide
+orbispatches.com##.adsbyvli:style(max-height: 1px !important;)
+@@||vlitag.com^$script,xhr,domain=orbispatches.com
+||assets.vlitag.com/plugins/*$important,script,domain=orbispatches.com
+||assets.vlitag.com/prebid/*$important,script,domain=orbispatches.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/14176
+idevicecentral.com##+js(nostif, ()=>)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/125763
+lib.hatenablog.com##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14198
+komputerswiat.pl##+js(acs, $onet, adblock)
+
+! https://vebo1.com popup
+vebo1.com##+js(aopr, adsRedirectPopups)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14209
+zadfaucet.com##+js(set, verifica_adblock, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14226
+ewrc-results.com##+js(set, canGetAds, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14220
+! https://github.com/uBlockOrigin/uAssets/issues/14437
+! https://github.com/uBlockOrigin/uAssets/issues/14477
+*$3p,script,redirect-rule=noop.js,domain=ksk.moe
+! https://www.reddit.com/r/uBlockOrigin/comments/15dob72/
+! *$popunder,domain=ksk.moe
+
+! https://www.reddit.com/r/uBlockOrigin/comments/wephc1/
+@@||yt2save.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/14237
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$xhr,domain=theappstore.org
+!#if ext_devbuild
+theappstore.org##+js(no-fetch-if, adsbygoogle, length:11000)
+!#else
+!#if cap_html_filtering
+||theappstore.org/script.js?v=$script,1p,replace=/result\.length \> 10000/result.length < 10000/g
+theappstore.org##+js(no-fetch-if, adsbygoogle)
+!#endif
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/14238
+dzeko11.net##+js(nostif, keepChecking)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14248
+*$script,redirect-rule=noopjs,domain=sprawdzwegiel.pl
+
+! https://ier.ai/cWf9T98 popup, fake button, focus
+ier.ai##+js(nowoif)
+ier.ai##+js(set, blurred, false)
+ier.ai##a[href][target="_blank"] > img
+
+! https://www.reddit.com/r/uBlockOrigin/comments/wflozi/
+imhentai.xxx###slider
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/126350
+tokuvn.com##+js(acs, goToURL)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/wjev66/received_an_admiral_antiadblock_popup_despite/
+worldpopulationreview.com##.video-container
+
+! 7movierulz. sh => ncdnstm. com/xyz player popups
+ncdnstm.*##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14338
+kizi.com##+js(set, ad_blocker_active, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14341
+wa.de##.id-Page-layoutWrap, .id-SiteWrap, .id-SiteHeader-wrap:style(width: 100% !important; max-width: 100% !important;)
+.de/bilder/*.jpg|$script,1p
+.at/bilder/*.jpg|$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/14345
+||nitropay.com/1.gif?$image,3p,redirect=1x1.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/14366
+cyberscoop.com##+js(set, init_welcome_ad, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/126957
+mboost.me##+js(nano-stb, setinteracted, 2000)
+mboost.me##+js(ra, href, .MediaStep, stay)
+mboost.me##.MediaStep:style(cursor: pointer !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14353#issuecomment-1212844691
+! https://github.com/uBlockOrigin/uAssets/issues/16730
+||api.utreon.com/v1/videos?channel_handle$xhr,1p
+utreon.com##.ad-banner-static
+
+! https://go.bloggertheme.xyz/KVTWwSv1 timer
+bloggertheme.xyz#@##ad-top
+bloggertheme.xyz##+js(nano-stb, waiting, 5000)
+bloggertheme.xyz##+js(set, blurred, false)
+bloggertheme.xyz###getlink, #pop-button:style(display: block !important;)
+bloggertheme.xyz###timer
+
+! https://github.com/uBlockOrigin/uAssets/issues/14383
+||petri.com/wp-content/plugins/bww-wp-advertising^
+||petri.com/wp-json/bww-advertising^
+
+! https://github.com/uBlockOrigin/uAssets/issues/14346
+||stream.cz/*/v2/vast$xhr
+
+! https://github.com/uBlockOrigin/uAssets/issues/14386
+sumikai.com##.td-pb-span8:style(width: 100% !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14388
+! https://github.com/uBlockOrigin/uAssets/issues/17158
+adslink.pw##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+adslink.pw##+js(no-xhr-if, googlesyndication)
+adslink.pw##+js(set, blurred, false)
+adslink.pw##+js(nostif, showModal)
+*$image,redirect-rule=2x2.png,domain=adslink.pw|jpopsingles.eu
+||adslink.pw/*.php
+||jpopsingles.eu/*.php
+*$script,xhr,3p,denyallow=cloudflare.com|gravatar.com,domain=adslink.pw|jpopsingles.eu
+adslink.pw##^script:has-text(chp_ads_blocker_detector)
+! https://www.reddit.com/r/uBlockOrigin/comments/y91yer/
+jpopsingles.eu##style[id$="-css"]:remove()
+
+! https://www.reddit.com/r/uBlockOrigin/comments/wndk5f/how_do_you_bypass_deblocker/ik575ml/
+freedwnlds.com##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13931#issuecomment-1186193894
+apkcombo.com##+js(aeld, DOMContentLoaded, clientHeight)
+apkcombo.com##div[class*=-ad]
+apkcombo.com##p:has-text(Advertisement)
+
+! canale. live anti adb
+canale.live##+js(set, moneyAbovePrivacyByvCDN, true)
+canale.live##+js(nosiif, href)
+*$popunder,domain=canale.live
+
+! Ad-Shield
+! https://github.com/uBlockOrigin/uAssets/issues/12163
+! https://github.com/uBlockOrigin/uAssets/issues/16749
+!#if cap_html_filtering
+||07c225f3.online^$domain=loawa.com|ygosu.com|sportalkorea.com|algumon.com|hancinema.net|enetnews.co.kr|edaily.co.kr|economist.co.kr|etoday.co.kr|hankyung.com|isplus.com|hometownstation.com|kagit.kr|inven.co.kr|honkailab.com|warcraftrumbledeck.com|genshinlab.com|thestockmarketwatch.com|thephoblographer.com
+||content-loader.com^$domain=loawa.com|ygosu.com|sportalkorea.com|algumon.com|hancinema.net|enetnews.co.kr|edaily.co.kr|economist.co.kr|etoday.co.kr|hankyung.com|isplus.com|hometownstation.com|kagit.kr|inven.co.kr|honkailab.com|warcraftrumbledeck.com|genshinlab.com|thestockmarketwatch.com|thephoblographer.com
+||css-load.com^$domain=loawa.com|ygosu.com|sportalkorea.com|algumon.com|hancinema.net|enetnews.co.kr|edaily.co.kr|economist.co.kr|etoday.co.kr|hankyung.com|isplus.com|hometownstation.com|kagit.kr|inven.co.kr|honkailab.com|warcraftrumbledeck.com|genshinlab.com|thestockmarketwatch.com|thephoblographer.com
+||html-load.com^$domain=loawa.com|ygosu.com|sportalkorea.com|algumon.com|hancinema.net|enetnews.co.kr|edaily.co.kr|economist.co.kr|etoday.co.kr|hankyung.com|isplus.com|hometownstation.com|kagit.kr|inven.co.kr|honkailab.com|warcraftrumbledeck.com|genshinlab.com|thestockmarketwatch.com|thephoblographer.com
+@@/loader.min.js$xhr,script,domain=loawa.com|ygosu.com|sportalkorea.com|algumon.com|hancinema.net|enetnews.co.kr|edaily.co.kr|economist.co.kr|etoday.co.kr|hankyung.com|isplus.com|hometownstation.com|kagit.kr|inven.co.kr|honkailab.com|warcraftrumbledeck.com|genshinlab.com|thestockmarketwatch.com|thephoblographer.com
+/loader.min.js$xhr,script,domain=loawa.com|ygosu.com|sportalkorea.com|algumon.com|hancinema.net|enetnews.co.kr|edaily.co.kr|economist.co.kr|etoday.co.kr|hankyung.com|isplus.com|hometownstation.com|kagit.kr|inven.co.kr|honkailab.com|warcraftrumbledeck.com|genshinlab.com|thestockmarketwatch.com|thephoblographer.com,replace=/[a-zA-Z]{2}=function\([a-zA-Z]{2}\)\{var [a-zA-Z0-9]{2}=[a-zA-Z0-9]{2};try\{Array/neuralized=function(){var c5=u4;try{Array/
+!#else
+@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,domain=loawa.com|ygosu.com|sportalkorea.com|algumon.com|hancinema.net|enetnews.co.kr|edaily.co.kr|economist.co.kr|etoday.co.kr|hankyung.com|isplus.com|hometownstation.com|kagit.kr|inven.co.kr|honkailab.com|warcraftrumbledeck.com|genshinlab.com|thestockmarketwatch.com|thephoblographer.com
+!#if !ext_devbuild
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$xhr,domain=loawa.com|ygosu.com|sportalkorea.com|algumon.com|hancinema.net|enetnews.co.kr|edaily.co.kr|economist.co.kr|etoday.co.kr|hankyung.com|isplus.com|hometownstation.com|kagit.kr|inven.co.kr|honkailab.com|warcraftrumbledeck.com|genshinlab.com|thestockmarketwatch.com|thephoblographer.com
+@@||static.criteo.net/js/ld/publishertag.prebid.js$xhr,domain=loawa.com|ygosu.com|sportalkorea.com|algumon.com|hancinema.net|enetnews.co.kr|edaily.co.kr|economist.co.kr|etoday.co.kr|hankyung.com|isplus.com|hometownstation.com|kagit.kr|inven.co.kr|honkailab.com|warcraftrumbledeck.com|genshinlab.com|thestockmarketwatch.com|thephoblographer.com
+!#else
+loawa.com,ygosu.com,sportalkorea.com,algumon.com,hancinema.net,enetnews.co.kr,edaily.co.kr,economist.co.kr,etoday.co.kr,hankyung.com,isplus.com,hometownstation.com,kagit.kr,inven.co.kr,honkailab.com,warcraftrumbledeck.com,genshinlab.com,thestockmarketwatch.com,thephoblographer.com##+js(no-fetch-if, /static\.criteo\.net|adsbygoogle/)
+!#endif
+!#endif
+*$frame,redirect-rule=noopframe,domain=ygosu.com|loawa.com|algumon.com|sportalkorea.com|hancinema.net|enetnews.co.kr|edaily.co.kr|economist.co.kr|etoday.co.kr|hankyung.com|isplus.com|hometownstation.com|kagit.kr|inven.co.kr|honkailab.com|warcraftrumbledeck.com|genshinlab.com|thestockmarketwatch.com|thephoblographer.com
+*$script,xhr,redirect-rule=noopjs,domain=ygosu.com|loawa.com|algumon.com|sportalkorea.com|hancinema.net|enetnews.co.kr|edaily.co.kr|economist.co.kr|etoday.co.kr|hankyung.com|isplus.com|hometownstation.com|kagit.kr|inven.co.kr|honkailab.com|warcraftrumbledeck.com|genshinlab.com|thestockmarketwatch.com|thephoblographer.com
+*$image,redirect-rule=1x1.gif,domain=ygosu.com|loawa.com|algumon.com|sportalkorea.com|hancinema.net|enetnews.co.kr|edaily.co.kr|economist.co.kr|etoday.co.kr|hankyung.com|isplus.com|hometownstation.com|kagit.kr|inven.co.kr|honkailab.com|warcraftrumbledeck.com|genshinlab.com|thestockmarketwatch.com|thephoblographer.com
+@@*$ghide,domain=ygosu.com|loawa.com|algumon.com|sportalkorea.com|hancinema.net|enetnews.co.kr|edaily.co.kr|economist.co.kr|etoday.co.kr|hankyung.com|isplus.com|hometownstation.com|kagit.kr|inven.co.kr|honkailab.com|warcraftrumbledeck.com|genshinlab.com|thestockmarketwatch.com|thephoblographer.com
+algumon.com#@#div[class^="ad-"]
+loawa.com,ygosu.com,sportalkorea.com,algumon.com,hancinema.net,enetnews.co.kr,edaily.co.kr,economist.co.kr,etoday.co.kr,hankyung.com,isplus.com,hometownstation.com,kagit.kr,inven.co.kr,honkailab.com,warcraftrumbledeck.com,genshinlab.com,thestockmarketwatch.com,thephoblographer.com##ad-shield-inventory
+thestockmarketwatch.com##ins.adsbygoogle:style(height: 1px !important; visibility: hidden !important;)
+thestockmarketwatch.com#@#.adSpotPad
+thestockmarketwatch.com##.adSpotPad:style(height: 1px !important; min-height: 1px !important; visibility: hidden !important;)
+loawa.com##a[href^="https://mini.m-able.app/@mini/loawa?tracking_template"]:remove()
+loawa.com##a[target="_blank"][data-href][data-banner-statics]:remove()
+isplus.com##div[id^="div-gpt-ad-"]
+isplus.com##.adsbyadop
+isplus.com##div[class="box banner"]
+hancinema.net##[class*="ad_"]
+hancinema.net##.navigation_ad
+hancinema.net###footer_ad
+hometownstation.com##.home-ads
+cboard.net###left-ba
+thephoblographer.com##[id^="vuukle-ad-"]
+*$image,1p,domain=07c225f3.online|content-loader.com|css-load.com|html-load.com
+||07c225f3.online^$doc,ping,font,css,popup
+||content-loader.com^$doc,ping,font,css,popup
+||css-load.com^$doc,ping,font,css,popup
+||html-load.com^$doc,ping,font,css,popup
+||07c225f3.online^$image,3p,redirect=1x1.gif
+||content-loader.com^$image,3p,redirect=1x1.gif
+||css-load.com^$image,3p,redirect=1x1.gif
+||html-load.com^$image,3p,redirect=1x1.gif
+||f97ae142.online^$doc,ping,font,css,popup
+genshinlab.com,a-ha.io,cboard.net,mobilitytv.co.kr,mememedia.co.kr,newautopost.co.kr,tvreport.co.kr,tenbizt.com,jjang0u.com,joongdo.co.kr,viva100.com,thephoblographer.com,newdaily.co.kr,dogdrip.net,golf-live.at,gamingdeputy.com,thesaurus.net,tweaksforgeeks.com,alle-tests.nl##+js(noeval-if, /07c225f3\.online|content-loader\.com|css-load\.com|html-load\.com/)
+!#if cap_html_filtering
+genshinlab.com,fourfourtwo.co.kr,interfootball.co.kr,a-ha.io,cboard.net,mobilitytv.co.kr,mememedia.co.kr,newautopost.co.kr,tvreport.co.kr,tenbizt.com,jjang0u.com,joongdo.co.kr,viva100.com,thephoblographer.com,newdaily.co.kr,dogdrip.net,golf-live.at,gamingdeputy.com,thesaurus.net,tweaksforgeeks.com,alle-tests.nl##^script:has-text(KCgpPT57bGV0IGU)
+allthetests.com##^script:has-text(error-report.com)
+!#else
+genshinlab.com,fourfourtwo.co.kr,interfootball.co.kr,a-ha.io,cboard.net,mobilitytv.co.kr,mememedia.co.kr,newautopost.co.kr,tvreport.co.kr,tenbizt.com,jjang0u.com,joongdo.co.kr,viva100.com,thephoblographer.com,newdaily.co.kr,dogdrip.net,golf-live.at,gamingdeputy.com,thesaurus.net,tweaksforgeeks.com,alle-tests.nl##+js(rmnt, script, KCgpPT57bGV0IGU)
+allthetests.com##+js(rmnt, script, error-report.com)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/21346
+||thesaurus.net/public/desktop/images/grammarly-ads$image,1p
+thesaurus.net##.grammarly-bnr
+
+! https://github.com/uBlockOrigin/uAssets/issues/14370
+! https://github.com/uBlockOrigin/uAssets/issues/19731
+! instagram.com#?#main > div div[style*="flex-direction: column;"] > article > div:has(a[href^="https://www.facebook.com/ads/ig_redirect/"][target="_blank"]):style(height: 1px !important; visibility: hidden !important;)
+! instagram.com##main > div div[style*="flex-direction: column;"] > article > div:has(a[href^="https://www.facebook.com/ads/ig_redirect/"][target="_blank"]):remove()
+instagram.com##main > div div[style*="flex-direction: column;"] > article > div:has(>div:first-child a[href*="/?enable_persistent_cta="]):style(height: 1px !important; visibility: hidden !important;)
+instagram.com##main > div div[style*="flex-direction: column;"] > article > div:has(>div:first-child a[href*="/?enable_persistent_cta="]):remove()
+instagram.com##article:has(a[href^="https://www.facebook.com/ads/"]):style(height: 0 !important; overflow: hidden !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14431
+gewinde-normen.de##+js(nostif, nextFunction, 2000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/127611
+rakuten.com#@#.google-ads
+
+! eegybest.xyz anti-adb, fake player
+eegybest.xyz##+js(ra, href, #clickfakeplayer)
+@@||eegybest.xyz^$ghide
+eegybest.xyz###id-custom_banner
+
+! https://www.reddit.com/r/uBlockOrigin/comments/wty11m/adblocker_detected_on_hentaiseasoncom/
+hentaiseason.com##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14489
+courseclub.me##+js(nostif, show)
+courseclub.me##+js(aeld, , show)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/127233
+descargasok.*##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14500
+brisbanetimes.com.au,smh.com.au,theage.com.au,watoday.com.au##._2gSkZ:style(height: 150px !important;)
+brisbanetimes.com.au,smh.com.au,theage.com.au,watoday.com.au##header:style(top: 0 !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14515
+! https://github.com/uBlockOrigin/uAssets/issues/20372
+! https://thenightwithoutthedawn.blogspot.com/ anti adblock
+||cdn.wendycode.com/blogger/antiAdb$script
+||cdn.wendycode.com/blogger/globalAdb.js$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/14510
+#@#.ad-content
+~backcar.fr,~flat-ads.com,~job.inshokuten.com,~kontol.in##.ad-content:not(:empty)
+comic.pixiv.net##iframe.ad-content
+
+! https://github.com/uBlockOrigin/uAssets/issues/14518
+! https://github.com/uBlockOrigin/uAssets/issues/15111
+minhaconexao.com.br##+js(set, canRunAds, true)
+minhaconexao.com.br##+js(no-xhr-if, doubleclick)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14529
+lover92.net##+js(acs, history)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14545
+kpopjams.com##+js(acs, dataLayer, detectAdBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19069
+@@||emailnator.com^$ghide
+emailnator.com##+js(nostif, adsbygoogle)
+emailnator.com##.position-relative tr:has(a[href="https://tools-ai.online"])
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/127824
+bluedollar.net##+js(acs, jQuery, adblock)
+bluedollar.net##div[id^="aub"]
+bluedollar.net##.ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/14567
+downloadudemy.com##+js(nostif, showModal)
+downloadudemy.com##+js(nano-stb, countdown)
+
+! javmix .tv popup
+pornhubed.com##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4060
+! https://www.reddit.com/r/uBlockOrigin/comments/wz56hz/
+stream4free.live##+js(aopw, adcashMacros)
+stream4free.live##.closeButton
+
+! https://github.com/uBlockOrigin/uAssets/issues/14566
+allpremium.net##+js(acs, eval, replace)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/127346
+komiklokal.me##+js(aopr, JuicyPop)
+komiklokal.me##+js(nowoif)
+komiklokal.me###teaser3
+||komiklokal.me/wp-content/uploads/*-1024x512.png
+
+! https://github.com/uBlockOrigin/uAssets/issues/14565
+! https://github.com/uBlockOrigin/uAssets/issues/19326
+flipkart.com##span:has-text(/^Ad$/):upward(div[style])
+flipkart.com##div[data-id] > div[data-tkid] > div[class]:has-text(Sponsored):upward(div[data-id])
+!#if env_mobile
+flipkart.com##div[dir]:has-text(/^AD$/):upward(div[style])
+flipkart.com##div[style*="width:24px;height:20px;"]:has(img[src*="/promos/"]):upward(div[style])
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/14602
+tamarindoyam.com##+js(nostif, show)
+
+! https://www.crazygames.com/game/bullet-force-multiplayer anti-adb
+@@||crazygames.com/prebid.js$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/x2exom/
+thothd.com##.table
+/player/player_ads.html?advertising_id=$frame,1p,redirect-rule=noop.html
+#@#.ads-iframe
+##.ads-iframe:not([style="position: absolute; left: -10px; top: -10px;"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/14610
+mafiatown.pl##+js(set, aLoad, noopFunc)
+mafiatown.pl##+js(set, mtCanRunAdsSoItCanStillBeOnTheWeb, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14617
+rtl.de##+js(nostif, null, 10)
+@@||iocnt.net^$script,domain=rtl.de
+@@||googletagmanager.com/gtm.js$script,domain=rtl.de
+||ais-akamai.rtl.de/autoimg/*$frame,1p
+rtl.de##[class*="superbanner"]:upward(article > div:not(#main))
+
+! https://www.reddit.com/r/uBlockOrigin/comments/wzwgpa/how_would_one_go_about_removing_this_countdown_so/
+! https://www.reddit.com/r/uBlockOrigin/comments/13twgku/
+crdroid.net##+js(no-fetch-if, googlesyndication)
+crdroid.net##+js(nano-sib, count)
+crdroid.net##.blocker-wrapper
+
+! https://github.com/uBlockOrigin/uAssets/issues/14622
+police.community##+js(nostif, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14623
+archpaper.com##+js(aopw, adBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14624
+gisarea.com##+js(nostif, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14626
+jeep-cj.com##+js(set, document.body.contains, trueFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14629
+comentariodetexto.com,wordpredia.com##+js(aeld, DOMContentLoaded, adsBlocked)
+comentariodetexto.com,wordpredia.com##+js(no-xhr-if, googlesyndication)
+
+! https://thiepmung.com/ anti adb
+thiepmung.com##+js(acs, nothingCanStopMeShowThisMessage)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/x4bypz/
+sponsorhunter.com##+js(aeld, click, window.focus)
+sponsorhunter.com##+js(set, popunder, undefined)
+
+! https://www.rlxtech.tech/p/redirect.html?&&url=_https://cdn.iobit.com/dl/asc-ultimate-setup.exe timer
+rlxtech.tech##+js(nano-sib, count)
+
+! moddroid.co => .com ads and popups
+moddroid.com##+js(nowoif)
+||moddroid.com/static/js/pa-$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/14621
+@@||api.adinplay.com/libs/aiptag/assets/adsbygoogle.js$xhr,domain=lordz.io
+
+! https://github.com/uBlockOrigin/uAssets/issues/14654
+choiceofmods.com##+js(nostif, show)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/x4bypz/how_to_block_scam_site_redirects_on_each_click/imwetod/
+sab.bz##+js(aopr, jsPopunder)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/128852
+footyhunter3.xyz##+js(acs, document.createElement, 'script')
+footyhunter3.xyz##+js(nostif, "admc")
+footyhunter3.xyz,olacast.live##^script:has-text("admc")
+footyhunter3.xyz,olacast.live##^script:has-text(\"admc\")
+olacast.live##+js(acs, document.createElement, "admc")
+||footyhunter3.xyz/papahd/myblock.php$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/14664
+schaken-mods.com##+js(nostif, adblock)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/x5w2kt/adblock_detected_help/
+truyenaudiocv.net##+js(aopr, adblockDetect)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/x5y9k0/how_do_i_put_a_stop_to_an_elusive_popupredirect/
+kissasia.cc##+js(aeld, , 0x)
+kissasia.cc##[href*="&refer"][target="_blank"]
+! https://www.reddit.com/r/uBlockOrigin/comments/y7gv2z/
+kissasia.cc##+js(aopr, mm)
+
+! tennistream. com => streamservicehd
+streamservicehd.click##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14716
+||officepoolstop.com/images/ads/*$image,1p,redirect-rule=1x1.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/14720
+||nautiljon.com/static/js/adblock_detector.js$script,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/14722
+||popcashjs.b-cdn.net^
+||zerion.cc/assets/js/pcm.js
+||zerion.cc/assets/js/pk.js
+zerion.cc##+js(aopr, popns)
+zerion.cc##+js(no-fetch-if, googlesyndication)
+zerion.cc##+js(nostif, appendChild)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/129190
+playerjavseen.com##+js(aopr, __Y)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/129177
+koreanbj.club##+js(aopr, BetterJsPop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14729
+||googles.video/$media,redirect=noopmp3-0.1s
+||cdend.com^$media,redirect=noopmp3-0.1s
+||movie285.com/*.gif$image
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/129229
+uhdgames.xyz##+js(aost, atob, inlineScript)
+uhdgames.xyz##^script:has-text('shift')
+uhdgames.xyz##^script:has-text(\'shift\')
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/129221
+alexsports.*##^script:has-text('shift')
+alexsports.*##^script:has-text(\'shift\')
+alexsports.*##+js(aopr, mm)
+alexsports.click##+js(aost, Date.now, afScript)
+streamservicehd.click##+js(set, path, '')
+streamservicehd.click##+js(nostif, adb)
+streamservicehd.click##^script:has-text(admc)
+/ts.php?$xhr,3p
+! https://github.com/AdguardTeam/AdguardFilters/issues/132254
+alexsports.xyz##+js(aeld, click, popunder)
+alexsports.xyz##+js(nowoif)
+||callousoverload.com^$popup
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/129232
+myqqjd.com##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14748
+listatv.pl##+js(nostif, nextFunction)
+listatv.pl##ins.adsbygoogle
+
+! https://github.com/easylist/easylist/pull/13249/
+monstream.org##+js(aopr, BetterJsPop)
+
+! autoembed. to popup
+autoembed.to###addiv
+||autoembed.to/JS/denur.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/14764
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js:5,domain=novelgames.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/14766
+mangacrab.com##+js(nostif, , 500)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/129423
+||oii.io/sw.js$script
+oii.io##+js(nowoif)
+oii.io##+js(ra, onclick, .btn)
+oii.io##+js(set, blurred, false)
+oii.io###overlay
+
+! mundodonghua. com anti adb
+mundodonghua.com##+js(nostif, , 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/129302
+||xbjav.com/*/adv/adv.js$script
+||xbjav.com/asset/js/vast.js$script
+xbjav.com##.place
+xbjav.com##.poplayer
+xbjav.com##.table
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/129296
+/nativeads_v2/nativeads_v2_$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/129299
+/js/acmsd/*
+javedit.com##.ads_video_overlay_mobile
+
+! https://github.com/uBlockOrigin/uAssets/issues/14775
+@@||uploadydl.com^$ghide
+uploadydl.com##iframe[src="about:blank"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/128800
+ssdtop.com##+js(nostif, show)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/128650
+visalist.io##+js(no-xhr-if, adsbygoogle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14660#issuecomment-1243031757
+hashhackers.com,katdrive.net,newsongs.co.in##+js(nano-sib, /verify_text|isCompleted/, *)
+hashhackers.com,katdrive.net,newsongs.co.in##+js(nano-stb, document[_0x, *)
+hashhackers.com,katdrive.net,newsongs.co.in###btnhide, #verify_button2, #verify_text, #getlink
+hashhackers.com,katdrive.net,newsongs.co.in###verify_button:style(display: block !important;)
+hashhackers.com,katdrive.net,newsongs.co.in###verify_button:upward(1) ~ #primary, #secondary
+
+! https://github.com/uBlockOrigin/uAssets/issues/14788
+@@||endless-live.cz^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/14792
+@@||stokerpiller.dk^$ghide
+stokerpiller.dk##.adsbygoogle:style(max-height: 1px !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14802
+sexgayplus.com##+js(acs, decodeURI, decodeURIComponent)
+player.hdgay.net##+js(aopr, BetterJsPop)
+gaydam.net,hdgay.net##+js(nowoif, , 10)
+sexgayplus.com##.float-ck
+||player.hdgay.net/cdn-cgi/trace
+
+! https://github.com/uBlockOrigin/uAssets/issues/14790
+profitshort.com,courselinkfree.us,technorozen.com,hubdrive.me,bestadvise4u.com,newztalkies.com,10desires.org,theapknews.shop,aiotechnical.com,cryptonewzhub.com,trendzguruji.me,techvybes.com,wizitales.com,101desires.com###top_nav, .rd_btn, .soractrl:style(display: block !important;)
+profitshort.com,courselinkfree.us,technorozen.com,hubdrive.me,bestadvise4u.com,newztalkies.com,10desires.org,theapknews.shop,aiotechnical.com,cryptonewzhub.com,trendzguruji.me,techvybes.com,wizitales.com,101desires.com###top_nav, .rd_btn, .soractrl, .large:others()
+
+! https://github.com/abp-filters/abp-filters-anti-cv/pull/1169
+hortonanderfarom.blogspot.com##+js(nostif, pop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14703
+multiplayer.it##+js(aeld, , adb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14809
+apkhex.com##+js(nostif, show)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/129622
+mysports.to##+js(acs, $, click)
+
+! liveru. sx popunder
+liveru.sx##+js(aopr, decodeURI)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14829
+yourdictionary.com##.header:style(top: 0 !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14834
+supermarioemulator.com##+js(nostif, adb)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/128185
+@@||supercloudsms.com^$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/124354
+! https://github.com/uBlockOrigin/uBlock-issues/issues/2045
+@@||metin2hub.com^$script,1p
+@@||metin2hub.com^$ghide
+metin2hub.com##.xgt-Banner-Kutusu
+
+! popups https://github.com/uBlockOrigin/uAssets/issues/14847
+bestlinkz.xyz##+js(nowoif)
+##[href*="speenphorbin.com"]
+vkprime.com##+js(nano-sib)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/106769
+gezegenforum.com##+js(nostif, show)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/xf090u/ublock_being_detected_on_httpsbeelinkpro/
+beelink.pro##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14797
+! https://github.com/uBlockOrigin/uAssets/issues/4931
+@@||adpass.atresmedia.com/*/adjs.js$xhr,domain=atresplayer.com
+@@||atresplayer.com^$ghide
+@@||assets.adobedtm.com^$xhr,domain=atresplayer.com
+||mssl.fwmrm.net/libs/adm/*/AdManager.js$domain=atresplayer.com,important,badfilter
+@@||imasdk.googleapis.com/js/sdkloader/vpaid_adapter.js$script,domain=lasexta.com
+||publi.atresmediapublicidad.com^$media,domain=lasexta.com,redirect=noopmp3-0.1s
+! https://github.com/uBlockOrigin/uAssets/issues/17272
+@@||atresmedia.com^$xhr,domain=atresplayer.com
+@@||smetrics.atresplayer.com^$xhr,1p
+||atresmediapublicidad.com^$media,domain=atresplayer.com,redirect=noopmp3-0.1s
+! https://www.reddit.com/r/uBlockOrigin/comments/16m91qq/atresplayer_antiadblock/
+||v.fwmrm.net/ad/g/1?*_html5_live$domain=atresplayer.com,important
+atresplayer.com##+js(nano-stb, [native code], 5000)
+atresplayer.com##+js(no-fetch-if, doubleclick)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14864
+bianity.net##.bn-lg.bn-p-b
+bianity.net##.bn-lg-sidebar
+
+! https://www.reddit.com/r/uBlockOrigin/comments/xftqyc/need_help_with_anti_adblock_video_overlay/
+deutschekanale.com##+js(no-fetch-if, imasdk)
+deutschekanale.com##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/14868
+@@||thenetnaija.net^$ghide
+@@||sabishare.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/14870
+divxfilmeonline.net,vidscdns.com##+js(nowoif)
+vidscdns.com##+js(aopr, doSecondPop)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/128390
+mbc2.live##+js(nostif, show)
+
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/129911
+papahd.club,papahd1.xyz##+js(aopr, popunder)
+vikistream.com##+js(set, attr, {})
+||vikistream.com/z-$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/129817
+eplayer.click##+js(set, attr, {})
+eplayer.click##+js(set, scriptSrc, '')
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/129745
+pahaplayers.click##^script:has-text(popunder)
+pahaplayers.click##+js(aost, Date.now, afScript)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14887
+||googlesyndication.com/favicon.ico$image,redirect-rule=1x1.gif
+
+! iptvapps. net anti-adb, elements
+iptvapps.net##+js(nostif, show)
+iptvapps.net##[id*=id]:has([src*="/ads/"])
+
+! https://www.reddit.com/r/uBlockOrigin/comments/xh0iih/
+! https://github.com/uBlockOrigin/uAssets/issues/16980
+! https://github.com/uBlockOrigin/uAssets/issues/17319
+@@||static.yieldmo.com/ym.adv.min.js$script,domain=cloud-computing-central.com|cloudcomputingtopics.net
+@@||ads.pubmatic.com/AdServer/js/pwt/*/pwt.js$script,domain=cloud-computing-central.com|cloudcomputingtopics.net
+cloudcomputingtopics.net##+js(set, distance, 0)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/xguj3m/
+||pururin.to/assets/js/pop.js$script
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/150990
+null-scripts.net,nullscripts.net##+js(nostif, show)
+@@||nullscripts.net^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/130051
+video-to-mp3-converter.com##+js(nowoif, !/^\//)
+video-to-mp3-converter.com##.horizontal-area
+
+! seriesmetro. net popups
+seriesmetro.net##+js(aopr, afStorage)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/xil5y3/
+||desktopnexus.com/pb-ads/
+desktopnexus.com###rightcolumn > .rbox > .rboxInner img[alt="Advertisement"]:upward(.rbox)
+desktopnexus.com##.wallpaperSidebarAds:upward(div)
+
+! sports stuff
+crichd.*##+js(nowoif)
+livetvon.*##+js(aopw, u_cfg)
+*$3p,script,domain=streamgo.to|streamgoto.*
+*$script,3p,denyallow=cloudflare.net|fastly.net|peer5.com|jsdelivr.net|cloudflare.com,domain=wecast.to
+*$script,3p,denyallow=fastly.net|jsdelivr.net|cloudflare.net,domain=techclips.net
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|fontawesome.com|jsdelivr.net|fastly.net,domain=blacktiesports.net
+*$3p,script,denyallow=bootstrapcdn.com|cloudflare.net|googleapis.com|jquery.com|hwcdn.net|jsdelivr.net|fastly.net,domain=vikistream.com|noob4cast.com
+*$script,3p,denyallow=chatango.com,domain=livetvon.*
+*$script,3p,denyallow=jsdelivr.net|cloudflare.net,domain=klubsports.click
+*$script,3p,denyallow=fastly.net|hwcdn.net|jquery.com|jsdelivr.net|cloudflare.net,domain=sportkart1.xyz
+cricfree.*##+js(aopr, afScript)
+castmax.live##.overlay
+! https://github.com/uBlockOrigin/uAssets/issues/19493
+iseeyouandyouseeme.me###floatLayer1
+darsalam.net##body > #overover[style*="silver;"]
+darsalam.net##body > #overover[style*="silver;"] ~ #obrazek
+darsalam.net##.clappr-banner
+darsalam.net##+js(acs, document.getElementById, adblock)
+###micast_ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/14965
+dropmms.com##+js(aeld, load, undefined)
+dropmms.com##+js(acs, document.onkeydown)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/130310
+bloground.ro##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14977
+witcherhour.com##+js(nostif, show)
+witcherhour.com##+js(no-fetch-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14994
+emsnow.com##+js(acs, document.getElementById, fakeElement)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14990
+freebinance.top##+js(no-xhr-if, popunder)
+*$script,redirect-rule=noopjs,domain=freebinance.top
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/130241
+/\/static\/[0-9a-z]+/[0-9a-z]+\.js$/$script,1p,domain=fleshed.com
+
+! https://github.com/easylist/easylist/issues/13407
+||porno365.bingo^$image,1p,redirect-rule=1x1.gif
+
+! https://www.reddit.com/r/uBlockOrigin/comments/xl1sq6/crackle_is_detecting_ubo_again/
+@@||crackle.com^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/14981
+likecs.com##+js(set, document.onclick, '')
+likecs.com##.contentbef
+
+! https://github.com/uBlockOrigin/uAssets/issues/15028
+clamor.pl##+js(no-fetch-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15034
+.php$frame,domain=watchfreekav.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/14849
+cbs.com,paramountplus.com##+js(xml-prune, Period[id*="-roll-"][id*="-ad-"], , pubads.g.doubleclick.net/ondemand)
+
+! tok-thots. com popups + anti adb
+||thothd.com^$image,1p,redirect-rule=1x1.gif
+
+! rankersadda. in anti adblock
+rankersadda.in##+js(acs, addEventListener, google_ad_client)
+
+! tiscali. it ad reinsertion
+tiscali.it##+js(set, adEnable, true)
+
+! protege-torrent. com popups
+protege-torrent.com##+js(aeld, , pop)
+protege-torrent.com##+js(aopr, decodeURI)
+
+! ottverse. com anti adb
+ottverse.com##+js(nostif, show)
+
+! idnes. cz ads
+idnes.cz##[style*="background-repeat"]
+idnes.cz##[style*="z-index:0"]:remove()
+idnes.cz##span:matches-css(background-image:/url.*//www.idnes.cz/):upward(2)
+idnes.cz##+js(nostif, /Adform|didomi|adblock|forEach/)
+idnes.cz##[href*="-redir."]:upward(2)
+||vod.idnes.cz/*.mp4#$media,1p
+idnes.cz##body:style(background: none !important; overflow: auto !important;)
+tv.idnes.cz##.px-creative
+
+! https://github.com/uBlockOrigin/uAssets/issues/15058
+hokej.net##+js(nostif, blur)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15062
+@@||shoop.de^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/14296
+!#if ext_devbuild
+soft98.ir,~forum.soft98.ir##+js(aeld, click, open)
+soft98.ir,~forum.soft98.ir##+js(aeld, contextmenu, preventDefault)
+!#else
+soft98.ir,~forum.soft98.ir##+js(aeld, click, [native code])
+!#endif
+||img.soft98.ir^$image,1p,redirect-rule=1x1.gif
+@@||soft98.ir^$ghide
+soft98.ir,~forum.soft98.ir##+js(window-close-if, /link-)
+linkdoni.soft98.ir##html:remove()
+!#if cap_html_filtering
+linkdoni.soft98.ir##^body,title
+!#endif
+sysban.ir##+js(window-close-if, /telephone-service)
+smostafa.ir##+js(window-close-if, /^/)
+coffeete.ir##+js(window-close-if, /soft98)
+||cdn.hostdl.com/goto/soft98^$doc,csp=script-src
+cdn.hostdl.com##^responseheader(location)
+cdn.hostdl.com##:matches-path(soft98) html:remove()
+||iranicard.ir^$doc,removeparam=utm_source
+||iranicard.ir^$doc,removeparam=utm_campaign
+||iranicard.ir/payments/shopping/amazon/?utm_medium=Banner^$doc,csp=script-src
+iranicard.ir##:matches-path(/utm_medium=Banner/i) html:remove()
+||faradars.org^$doc,removeparam=utm_source
+||faradars.org^$doc,removeparam=utm_campaign
+||faradars.org/explore?orderby=views&*&utm_medium=banner-kaprila^$doc,csp=script-src
+faradars.org##:matches-path(/utm_medium=banner-kaprila/i) html:remove()
+||cxchief.com^$doc,removeparam=utm_source
+||cxchief.com^$doc,removeparam=utm_campaign
+||cxchief.com^$doc,removeparam=utm_content
+||cxchief.com/fa/?utm_medium=adv^$doc,csp=script-src
+cxchief.com##:matches-path(/utm_medium=adv/i) html:remove()
+||smostafa.ir/?utm_source=footer^$doc,csp=script-src
+smostafa.ir##:matches-path(/utm_source=footer/i) html:remove()
+
+! https://github.com/uBlockOrigin/uAssets/issues/15073
+upiapi.in##+js(set, detectAdBlock, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15080
+! https://github.com/uBlockOrigin/uAssets/issues/18244
+! https://github.com/uBlockOrigin/uAssets/issues/19433
+||hbo.yspsvc-na.net/csm/*&caid=$xhr,removeparam=caid,domain=play.hbomax.com
+*&caid=$xhr,removeparam=caid,domain=max.com
+! play.max.com##+js(json-prune, ssaiInfo fallback.ssaiInfo manifest.url)
+play.max.com##+js(json-prune, ssaiInfo fallback.ssaiInfo)
+play.max.com##+js(xml-prune, xpath(//*[name()="Period"][not(.//*[name()="SegmentTimeline"])][not(.//*[name()="ContentProtection"])] | //*[name()="Period"][./*[name()="BaseURL"]][not(.//*[name()="ContentProtection"])]), , .mpd)
+play.max.com##+js(json-prune, adtech-brightline adtech-google-pal adtech-iab-om)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/130913
+forexfactory.com##.adbit
+
+! https://github.com/easylist/easylist/commit/d3d87f8b48ae5380687742c0727a076b11394758#commitcomment-85272282
+.popup_im.
+
+! https://github.com/easylist/easylist/commit/41585eef7ac00181cbc1f52ecb031853a8c78928#commitcomment-85271038
+/vhdpoppingmodels/*$script
+
+! javsubbed.net popup
+javsubbed.xyz##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15090
+one-tech.xyz##+js(no-fetch-if, ads)
+
+! https://github.com/easylist/easylist/commit/bb94bacdb7765b503a4d22c8e9e4b096cff25e7b#commitcomment-85496285
+theblock.co##.modal-container[ga-event-label$="Prime Trust_Modal"]
+theblock.co##.overflow-hidden:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15112
+||imasdk.googleapis.com^$script,redirect-rule=noopjs,domain=newschannelnebraska.com
+
+! sexjobs.es popunder
+sexjobs.es##+js(acs, JSON.parse, htmlSectionsEncoded)
+sexjobs.es##.topBanners
+
+! https://novelssites.com/yxWvM popup and focus detect
+novelssites.com##+js(aeld, click, event.dispatch)
+novelssites.com##+js(nowoif)
+novelssites.com##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15126
+||fundingchoicesmessages.google.com^$script,redirect=noop.js,domain=kledgeb.blogspot.com,important
+
+! nozomi.la popup
+nozomi.la##+js(set, D4zz, noopFunc)
+nozomi.la##+js(aopw, __aaZoneid)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15131
+@@||quicksounds.com^$ghide
+quicksounds.com##.ad-head
+
+! https://github.com/uBlockOrigin/uAssets/issues/12884
+links.medipost.org##+js(set, blurred, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ynjx62/
+||thisiswaldo.com/static/js$script,redirect-rule=noop.js
+||cloudfront.net/prebid_$script,redirect-rule=noop.js
+! https://github.com/uBlockOrigin/uAssets/issues/15139
+haxina.com##+js(aeld, load, adblock)
+*$script,redirect-rule=noopjs,domain=haxina.com
+@@/libs/advertisement.js?ad_ids=*&show_ad=$script,1p
+! https://github.com/uBlockOrigin/uAssets/issues/15277
+! https://github.com/uBlockOrigin/uAssets/issues/15278
+||coinzillatag.com^$script,redirect-rule=noopjs
+! https://github.com/uBlockOrigin/uAssets/issues/15428
+*$script,redirect-rule=noopjs,domain=bitcotasks.com
+bitcotasks.com##[src^="https://cryptocoinsad.com/ads/"]
+! https://github.com/uBlockOrigin/uAssets/issues/15428#issuecomment-1479046908
+bitcotasks.com##+js(aeld, load, htmls)
+bitcotasks.com##^script:has-text(htmls)
+/files/banners/*.gif$image,domain=bitcotasks.com
+bitcotasks.com##+js(refresh-defuser)
+@@||cdn.bmcdn6.com/js/652919f176fed96a395737d0.js?v=1698803324956$script,domain=bitcotasks.com
+bitcotasks.com##+js(no-xhr-if, bmcdn6)
+bitcotasks.com##body > iframe#frame
+||bcgame.top/*&utm_source=$frame,domain=bitcotasks.com
+! https://github.com/uBlockOrigin/uAssets/issues/16207
+hatecoin.me###wcfloatDiv4
+||hbagency.it^
+
+! https://github.com/uBlockOrigin/uAssets/issues/15140
+||assets.maxroll.gg/wp-content/assets/img/adblock/$image
+maxroll.gg##.adsmanager-ad-container
+
+! https://github.com/uBlockOrigin/uAssets/issues/15144
+! https://github.com/uBlockOrigin/uAssets/issues/15157
+*$script,redirect-rule=noopjs,domain=freelitecoin.top|freetron.top
+freelitecoin.top,freetron.top##+js(no-xhr-if, adx)
+freelitecoin.top,freetron.top##.ads
+
+! https://www.reddit.com/r/uBlockOrigin/comments/xulvsp/
+@@||inforge.net^$ghide
+
+! root-nation. com clickable background
+root-nation.com##+js(set, td_ad_background_click_link, undefined)
+root-nation.com##body.td-background-link:style(cursor:default !important;)
+||root-nation.com/*banner
+||root-nation.com/wp-content/uploads/*background$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/15154
+hilites.today#@#ins.adsbygoogle
+hilites.today##div[style^="height:"]:has(> ins.adsbygoogle)
+hilites.today##+js(acs, $, onload)
+
+! techydino. net popup
+techydino.net##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15158
+ozulscans.com##+js(no-fetch-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15169
+! https://github.com/uBlockOrigin/uAssets/issues/16342
+torrentmac.net##+js(aeld, , Math)
+torrentmac.net##+js(nostif, show)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/131464
+bitporno.*##+js(aopr, _run)
+bitporno.*##+js(aopw, atOptions)
+||bitporno.to/popup18.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/15174
+mazakony.com##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15176
+@@||tumblr.com^$ghide
+tumblr.com#@#.Yc2Sp
+tumblr.com#@#.Qrht9
+
+! udvl. com popups
+! https://github.com/uBlockOrigin/uAssets/issues/22020
+udvl.com##+js(acs, $, open)
+udvl.com##+js(rmnt, script, serve)
+udvl.com###adv4-wrap
+udvl.com##+js(aeld, DOMContentLoaded, popupurls)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15186
+moviezaddiction.icu##+js(aeld, , tabUnder)
+||moviezaddiction.icu/pop.js$script,1p
+moviezaddiction.icu##[href="https://dedispot.com"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/xy8gak/
+laptechinfo.com##+js(nostif, show)
+
+! chp https://github.com/uBlockOrigin/uAssets/issues/15192
+imageupscaler.com##+js(aost, document.querySelectorAll, /(?=^(?!.*(https|Parse|Image)))/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15198
+*$script,domain=faucetcrypto.net,redirect-rule=noopjs
+faucetcrypto.net##+js(set, blurred, false)
+/display/items.php?$script,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/15206
+mc-at.org##+js(nostif, show)
+
+! popunder https://linkspy.cc/tr/aHR0cDovL2ZjLmxjL2Z1bGwvP2FwaT00ZjcyNTBhYmU4NmJhNTViNWI3OTM4OTYwY2M1ZjYwNzdjNWVhNzAxJnVybD1hSFIwY0RvdkwzTm9iM0owWlhKaGJHd3VZMjl0TDNCNE5GVS9WR2hoYm1zdGVXOTFNejlVYUdGdWF5MTViM1V6JnR5cGU9Mg==
+linkspy.cc##+js(set, displayAds, 0)
+
+! movies2watch.ru popup
+movies2watch.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15210
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$domain=kanalsportowy.pl
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/131743
+gametter.com##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15220
+short.freeltc.top##+js(set, blurred, false)
+||short.freeltc.top/news.html
+||short.freeltc.top/info.html
+*$script,domain=short.freeltc.top,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/15202
+||citi.com/cbol-pre-login-static-assets/cbol-core-assets/cedric/cedric.js$script,1p
+citi.com##+js(no-xhr-if, cls_report?)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15231
+playstationhaber.com##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15224
+! https://www.reddit.com/r/uBlockOrigin/comments/y28jp5/
+i-polls.com,insurancevela.com##+js(no-fetch-if, ads)
+i-polls.com##+js(nano-sib)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15244
+genshin.gg##[class]:matches-css-before(content: /ads/)
+
+! player.uwatchfree. cam popups
+player.uwatchfree.*##+js(aopr, BetterJsPop)
+player.uwatchfree.*##+js(aopr, arrvast)
+player.uwatchfree.*##+js(aopr, doSecondPop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15253
+mathway.com###static-ad-right-alt
+mathway.com##.container:style(width: 100% !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/y32ffl/adblocker_found_on_viefaucetcom/
+! https://github.com/uBlockOrigin/uAssets/issues/19103
+!viefaucet.com##+js(aopr, coinzilla_display)
+@@||coinzillatag.com/lib/display.js$script,domain=viefaucet.com
+@@||cointraffic.io/js/$script,domain=viefaucet.com
+||coinzillatag.com^$script,redirect=noopjs,domain=viefaucet.com
+@@||viefaucet.com/banners/$frame,1p
+viefaucet.com##+js(nostif, showAdblock)
+! https://github.com/uBlockOrigin/uAssets/issues/16358
+viefaucet.com#@#.ad-description
+viefaucet.com##.ads
+viefaucet.com##.is-guttered > .ads:upward(.is-guttered)
+@@||googletagmanager.com/gtm.js$script,domain=videoslyrics.com|videolyrics.in
+*$script,domain=videolyrics.in,redirect-rule=noopjs
+||videolyrics.in^$csp=style-src *
+videolyrics.in##+js(no-xhr-if, doubleclick)
+videolyrics.in##+js(aeld, load, htmls)
+videolyrics.in##^script:has-text(htmls)
+cryptolink.trxking.xyz##.banner
+trxking.xyz##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15262
+||dcs-mcdn.mp.lura.live/prod/*$xhr,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/15259
+google.com##[data-profile-url-path^="/localservices"]:has-text(/google screened/i)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15275
+cryptofenz.xyz##+js(aeld, load, adblock)
+cryptofenz.xyz##.ads
+cryptofenz.xyz##[id^="wcfloatDiv"]
+
+! redload. co popups
+redload.co##+js(nowoif)
+redload.co##+js(nano-stb)
+redload.co##div[style*="z-index: 300000"]:remove()
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/132253
+@@||btvsports.lol^$ghide
+! https://github.com/AdguardTeam/AdguardFilters/issues/141200
+btvsports.*##+js(aeld, load, nextFunction)
+tutelehd3.xyz##^script:has-text(admc)
+tutelehd3.xyz##+js(nostif, sadbl)
+tutelehd3.xyz##+js(set, Overlayer, {})
+
+! https://github.com/uBlockOrigin/uAssets/issues/15282
+*$image,domain=my.optikservers.com,redirect-rule=1x1.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/15288
+*$script,domain=criptoshark.com,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/15289
+! https://github.com/uBlockOrigin/uAssets/issues/15960
+*$script,xhr,domain=hatecoin.me,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/9849
+! https://github.com/uBlockOrigin/uAssets/issues/11004
+@@||anydebrid.com^$ghide
+@@||hotdebrid.com^$ghide
+@@://*.*.*/$script,domain=anydebrid.com|hotdebrid.com
+*$frame,redirect-rule=noopframe,domain=anydebrid.com|hotdebrid.com
+*$script,redirect-rule=noopjs,domain=anydebrid.com|hotdebrid.com
+||googletagmanager.com/gtag/js?id=UA-$script,important,domain=anydebrid.com|hotdebrid.com
+||mc.yandex.ru/metrika/tag.js|$script,important,domain=hotdebrid.com
+||pagead2.googlesyndication.com/pagead/sma8.js$script,important,domain=anydebrid.com|hotdebrid.com
+||partner.googleadservices.com/gampad/cookie.js?domain=$script,important,domain=anydebrid.com|hotdebrid.com
+||adservice.google.*/adsid/integrator.js?domain=$script,important,domain=anydebrid.com|hotdebrid.com
+@@||g.doubleclick.net/pagead/ads?$frame,domain=anydebrid.com|hotdebrid.com
+||googleads.g.doubleclick.net/pagead/ads$frame,removeparam=/^(?:correlator|f[cr-w]|p[e-sv]|u_|ga_|url|dt|adk)/,domain=anydebrid.com|hotdebrid.com
+! https://github.com/uBlockOrigin/uAssets/issues/16039
+cloudcomputingtopics.com##+js(acs, showInstruction)
+cloud-computing-central.com##+js(acs, atob, -0x1)
+cloud-computing-central.com##+js(nostif, -0x)
+! https://github.com/uBlockOrigin/uAssets/issues/17622
+! https://github.com/uBlockOrigin/uAssets/issues/19043
+@@*$ghide,domain=okdebrid.com|youdebrid.com
+@@||static.yieldmo.com/ym.adv.min.js$script,domain=okdebrid.com|youdebrid.com
+@@||partner.googleadservices.com/gampad/cookie.js?$script,domain=okdebrid.com|youdebrid.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/132270
+mvidoo.com##+js(aopr, popunder)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15311
+expresskaszubski.pl##+js(nostif, offsetHeight)
+
+! nudostar.com,slutmesh.net ad script
+nudostar.com,slutmesh.net##+js(aopw, __aaZoneid)
+
+! manhwadesu.me popup on clicking chapter
+manhwadesu.me##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15333
+shesfreaky.com##+js(acs, document.createElement, appendChild)
+://a.*/oauth2?id=$script,3p
+://a.*/warp/$script,3p
+://a.*/warpim?id=$script,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/15334
+*$image,redirect-rule=1x1.gif,domain=hacksnation.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/15352
+watchanime.video##+js(nowoif)
+watchanime.video##.video_box
+watchanime.video##+js(ra, href, [href="/bestporn.html"])
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/132563
+xsub.cc##+js(aopr, __Y)
+javbabe.net###a-player
+javbabe.net##.clipxx
+javbabe.net##.container[style$="text-align: center;"]
+||javbabe.net/x1x/
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/132567
+player.bizzstreams2u.xyz##+js(acs, String.fromCharCode, constructor)
+/?rb=*&zoneid=$xhr,popup,3p
+&zoneid=*&rb=$xhr,3p
+
+! rechtschreibpruefung24.de anti adblock
+@@||rechtschreibpruefung24.de^$ghide
+rechtschreibpruefung24.de##.adsbygoogle:style(height: 1px !important)
+rechtschreibpruefung24.de###rightadbar
+
+! www.repelishd.com.ar popup
+repelishd.com.ar##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15366
+@@||vod.tvp.pl^$ghide
+vod.tvp.pl#@#[class^="ad-"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/15372
+
+! infinitehentai.com ad, popup
+infinitehentai.com##+js(nowoif)
+||infinitehentai.com/uploads/banners/
+
+! https://github.com/uBlockOrigin/uAssets/issues/15380
+afk.guide##+js(nostif, display)
+
+! https://domainwheel.com popup
+/header-banner$image,domain=domainwheel.com
+domainwheel.com##+js(nowoif)
+domainwheel.com##.banner-advertising-section
+
+! https://github.com/uBlockOrigin/uAssets/issues/15386
+@@||hacoscripts.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/15387
+hax.co.id##+js(no-fetch-if, googlesyndication)
+hax.co.id##.adsbygoogle
+@@||hax.co.id^$ghide
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ybbv5r/
+dirty.pink##+js(set, pop3getcookie, undefined)
+dirty.pink##+js(set, pop3setcookie1, undefined)
+dirty.pink##+js(set, pop3setCookie2, undefined)
+
+! https://sports.mynorthwest.com/ anti-adb and homepage live video breakage
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=sports.mynorthwest.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/16087
+! https://github.com/uBlockOrigin/uAssets/issues/17005
+@@||googlesyndication.com^$xhr,script,domain=manofadan.com
+@@||googletagmanager.com/gtm.js$script,xhr,domain=manofadan.com
+@@||surfe.pro^$script,xhr,domain=manofadan.com
+manofadan.com,cempakajaya.com##^script:has-text(htmls)
+manofadan.com,cempakajaya.com##+js(aeld, load, htmls)
+@@||g.adspeed.net/ad.php?do=detectadblocker|$script,xhr
+*$xhr,redirect-rule=nooptext,domain=cempakajaya.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17529
+karanpc.com##+js(rmnt, script, deblocker)
+karanpc.com##+js(aost, document.getElementsByTagName, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15384
+@@||adshnk.com^$ghide
+@@||fundingchoicesmessages.google.com/i/pub-$script,domain=adshnk.com
+@@||fundingchoicesmessages.google.com/f/$script,domain=adshnk.com
+*$script,domain=adshnk.com,redirect-rule=noopjs
+! https://github.com/uBlockOrigin/uAssets/issues/15434#issuecomment-1295751387
+adshnk.com##+js(nowoif)
+adshnk.com##+js(set, _adshrink.skiptime, 0)
+adshnk.com##.custom-modal
+adshnk.com##a.item[href^="https://plarium.com/"]
+!#if env_firefox
+adshnk.com##+js(nosiif, adblocker, 10000)
+!#endif
+adshnk.com##+js(nano-sib, countdown, *, 0.02)
+
+! https://businessnamegenerator.com/ popup
+businessnamegenerator.com##+js(nostif, gclid)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15404
+@@*$ghide,domain=derstandard.at|derstandard.de
+@@||npttech.com/advertising.js$script,domain=derstandard.at|derstandard.de
+derstandard.at,derstandard.de##ad-container
+! https://github.com/uBlockOrigin/uAssets/issues/21146
+derstandard.at,derstandard.de##+js(rpnt, script, "adsDisabled":false, "adsDisabled":true)
+! https://github.com/uBlockOrigin/uAssets/issues/21534#issuecomment-1867470101
+derstandard.at,derstandard.de##+js(nostif, event, 3000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15407
+||tirexo.*^$csp=default-src 'unsafe-inline' 'self' *.gstatic.com *.googleapis.com *.jquery.com
+tirexo.*##+js(nowoif)
+||tirexo.*/main.js?v=$script,1p
+tirexo.*##[href^="https://dl-protect.net/get-premium-url"]
+tirexo.*##[style]:has-text(PREMIUM)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/133135
+fembed9hd.com##+js(nowoif)
+fembed9hd.com##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15432
+woiden.id##+js(no-fetch-if, googlesyndication)
+@@||woiden.id^$ghide
+
+! npttech antiadblock script https://github.com/uBlockOrigin/uAssets/issues/8528#issuecomment-1294606224
+||npttech.com/advertising.js$script,redirect-rule=noop.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/15452
+||content.sinpartycdn.com/*pre-roll-ads/*$media,redirect=noopmp4-1s,domain=sinparty.com
+||content.sinpartycdn.com/videos-ads/*$media,redirect=noopmp4-1s,domain=sinparty.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/15455
+||ssbsblg.blogspot.com^$inline-script
+
+! https://www.reddit.com/r/uBlockOrigin/comments/yg0w6z/
+*$3p,script,redirect-rule=noop.js,domain=toolxox.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/133489
+ssyoutube.com##+js(nowoif)
+
+! https://mdisklink.link/bdaM1Nu timer
+adzz.in##+js(ra, disabled, button#getlink)
+adzz.in##+js(ra, disabled, button#gotolink)
+adzz.in##button#getlink, button#gotolink:style(display: block !important;)
+adzz.in##.countdown
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/133291
+pviewer.site##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15470
+mov18plus.cloud##+js(nowoif)
+
+! https://hd.ihdstreams.xyz/HD/nba/nba-1.php popup
+ihdstreams.xyz##+js(acs, document.write, unescape)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/133535
+hentaihaven.vip,nhentaihaven.org##+js(acs, Script_Manager)
+hentaihaven.vip,nhentaihaven.org##.script_manager_video_master
+/wp-content/plugins/script-manager/assets/js/script-manager.js?
+
+! https://github.com/uBlockOrigin/uAssets/issues/15475
+*$script,redirect-rule=noopjs,domain=nobitafc.com
+nobitafc.com###wcfloatDiv4
+
+! https://github.com/uBlockOrigin/uAssets/issues/15478
+chattanoogan.com##+js(set, AbleToRunAds, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15479
+tpaste.io##+js(aopr, adBlockDetected)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/yhmnzg/
+@@||model-viewer.com^$ghide
+model-viewer.com##.adsbygoogle:style(width:11px;height:11px)
+model-viewer.com##.adsbygoogle:upward(1):style(min-height:11px!important;height:11px!important;opacity:0)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/133687
+mangapt.com##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15487
+onscreensvideo.com##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15488
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=ketchuptv.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/15490
+! https://www.reddit.com/r/uBlockOrigin/comments/16ng28e/
+@@||playstore.pw^$ghide
+playstore.pw###page > center:has([href="#down"]) ~ #content .entry-content > :not(center)
+playstore.pw###targetdiv:style(display: inline !important;)
+! https://www.reddit.com/r/uBlockOrigin/comments/11xc8dl/
+*$script,redirect-rule=noopjs,domain=adsy.pw|playstore.pw
+*$frame,redirect-rule=noopframe,domain=adsy.pw|playstore.pw
+adsy.pw,playstore.pw##+js(nostif, offsetWidth)
+adsy.pw,playstore.pw##+js(aopr, adsBlocked)
+adsy.pw,playstore.pw###overlay
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6881356
+adsy.pw###targetdiv, #containerr:style(display: block !important;)
+adsy.pw,playstore.pw##+js(set, PreRollAd.timeCounter, 0)
+adsy.pw##div[id][style="display: none;"]:style(display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15492
+! https://github.com/uBlockOrigin/uAssets/issues/20646
+sportstiger.com##+js(json-prune, result.ads)
+sportstiger.com##.headerFull_ads
+sportstiger.com##.midd_ads
+sportstiger.com##.fullads_banner
+sportstiger.com##[class^="customHTML-ads"]
+sportstiger.com##body:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15497
+||js.wpadmngr.com/static/adManager.js$script,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/15500
+picgiraffe.com##+js(nostif, showModal)
+
+! picyield. com popups / anti adb
+picyield.com##+js(aost, document.body.appendChild)
+picyield.com##.adbwarning
+
+! https://github.com/uBlockOrigin/uAssets/pull/15515
+maxgaming.fi##+js(aeld, contextmenu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15524
+||mail-ads.google.com^$xhr,domain=rxd-mods.xyz,redirect-rule=nooptext
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/133902
+javseen.tv##+js(aopr, jsPopunder)
+||javseen.tv/fire2/popup*$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/15533
+@@||ad.71i.de/somtag/loader/loader.js$script,domain=video.sat1.de|wetter.com
+||ad.71i.de/somtag/config/$script,redirect-rule=noopjs,domain=sat1.de|wetter.com
+||player-feedback.p7s1video.net/pf/$script
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/134107
+yourmomdoesporn.com#@#[data-revive-zoneid]
+
+! https://github.com/uBlockOrigin/uAssets/issues/15542
+freehdinterracialporn.in##+js(aopr, decodeURI)
+freehdinterracialporn.in##.my-ad
+
+! https://www.reddit.com/r/uBlockOrigin/comments/odbviy/svg_images_doesnt_load_when_ublock_enabled/
+! https://github.com/uBlockOrigin/uAssets/issues/15234
+soranews24.com##+js(no-fetch-if, tpc.googlesyndication.com)
+soranews24.com##+js(ra, id, #div-gpt-ad-footer)
+soranews24.com##+js(ra, id, #div-gpt-ad-pagebottom)
+soranews24.com##+js(ra, id, #div-gpt-ad-relatedbottom-1)
+soranews24.com##+js(ra, id, #div-gpt-ad-sidebottom)
+soranews24.com##.ads-relatedbottom:not(.ad300x250)
+*$script,redirect-rule=noop.js,domain=soranews24.com
+@@||googletagmanager.com/gtm.js$script,redirect-rule,domain=soranews24.com
+@@||g.doubleclick.net/tag/js/gpt.js$script,domain=soranews24.com
+@@||g.doubleclick.net/pagead/managed/js/gpt/*/pubads_impl.js$domain=soranews24.com
+@@||g.doubleclick.net/gampad/ads$xhr,domain=soranews24.com
+@@||fundingchoicesmessages.google.com/i/pub-*$script,domain=soranews24.com
+@@||fundingchoicesmessages.google.com/f/$script,domain=soranews24.com
+@@||tpc.googlesyndication.com/simgad/$xhr,domain=soranews24.com
+||googlesyndication.com/safeframe/$frame,redirect-rule=noop.html,domain=soranews24.com
+||tpc.googlesyndication.com^$image,redirect-rule=1x1.gif,domain=soranews24.com
+soranews24.com#@#.ad
+soranews24.com###aw0[on="tap:exit-api.exit(target='landingPage',_googClickLocation='2')"]
+soranews24.com###aw0[onclick="ha('aw0')"]
+soranews24.com##.misc > #div-gpt-ad-header
+soranews24.com##.widget_custom_html:not(#custom_html-2)
+soranews24.com##amp-ad-exit + div[class*="-banner"]
+soranews24.com###div-gpt-ad-entrybottom
+soranews24.com###custom_html-2 div.ad300x250
+||g.doubleclick.net/gampad/ads?$xhr,removeparam=/^(cookie|ga_|u_)/,domain=soranews24.com
+@@||sst.soranews24.com/gtm.js$script,1p
+! https://github.com/uBlockOrigin/uBlock-issues/issues/2347
+rocketnews24.com,soranews24.com,youpouch.com##+js(nostif, rejectWith)
+rocketnews24.com,soranews24.com,youpouch.com##+js(set-attr, .lazy, src, [data-sco-src])
+rocketnews24.com,soranews24.com,youpouch.com##div[id$="content"] img.lazy:style(opacity: 1 !important;)
+rocketnews24.com,soranews24.com,youpouch.com##div[id^="post-"]:remove-class(hidden_share)
+youpouch.com##.post-content img.lazy:style(opacity: 1 !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/132814
+@@||amazon-adsystem.com/aax2/apstag.js$script,redirect-rule,domain=youpouch.com
+
+! italpress. com clickable background
+italpress.com##+js(set, td_ad_background_click_link, undefined)
+italpress.com##body.td-background-link:style(cursor:default !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/134216
+dlpanda.com##+js(aeld, load, XMLHttpRequest)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/134206
+socialmediagirls.com##+js(aeld, load, puURLstrpcht)
+socialmediagirls.com##+js(set, TextEncoder, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15550
+einrichtungsbeispiele.de##+js(aeld, load, AdBlocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15549
+shareus.in##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15560
+weadown.com##+js(nostif, showModal)
+weadown.com##+js(aeld, , showModal)
+weadown.com##+js(set, blurred, false)
+||weadown.com/urls/js/wp-api.js
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/134313
+kunststoffe.de#@#.adBox
+
+! airsoftmilsimnews. com clickable background
+airsoftmilsimnews.com##+js(set, td_ad_background_click_link, undefined)
+||airsoftmilsimnews.com/wp-content/uploads/*BANNER$image,1p
+
+! https://www.theusaposts .com anti-adblock
+theusaposts.com##+js(no-fetch-if, googlesyndication)
+theusaposts.com###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+theusaposts.com##div[id^="wpsafe-wait"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/133899
+videos.remilf.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15577
+@@*$xhr,domain=app.molotov.tv
+molotov.tv##+js(nosiif, goog)
+molotov.tv##+js(aeld, , goog)
+
+! https://infokik.com/grammarly-download-1 timer
+infokik.com##+js(nano-sib, counter)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15605
+freecoursesonline.me##+js(no-fetch-if, adsbygoogle)
+freecoursesonline.me##+js(nano-sib)
+freecoursesonline.me##+js(aeld, load, abDetectorPro)
+freecoursesonline.me##+js(no-xhr-if, ads)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/134564
+@@||hdwatched.me^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/15619
+wepc.com##+js(aopr, HTMLIFrameElement)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15615
+! https://github.com/uBlockOrigin/uAssets/issues/15696
+commands.gg,stardewids.com##body:style(background-image:none !important)
+commands.gg,stardewids.com##+js(aeld, , document.body)
+stardewids.com##+js(aeld, scroll)
+
+! https://github.com/uBlockOrigin/uAssets/pull/15021#issuecomment-1310798270
+datanodes.to##+js(ra, disabled, .downloadbtn)
+datanodes.to###countdown
+
+! https://github.com/uBlockOrigin/uAssets/issues/15626
+! https://github.com/uBlockOrigin/uAssets/issues/16965
+windowspro.de#@##block-views-sponsoredpromo-block
+windowspro.de##+js(set, abpblocked, undefined)
+
+! NSFW yesdownloader. com timer
+yesdownloader.com##+js(nano-sib)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15518
+chronicle.com##.ArticleFullBleedLeadPage-summary
+chronicle.com##[data-content-body]:style(height:initial!important;visibility:initial!important;overflow:initial!important;opacity:initial!important)
+chronicle.com##[hidden]:style(display:initial!important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15655
+hackr.io##+js(no-fetch-if, googlesyndication)
+
+! termux. xyz anti adb
+*$script,domain=termux.xyz,redirect-rule=noopjs
+
+! weloma.art popup
+weloma.*##+js(nowoif)
+weloma.*##+js(aopw, document.ready)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15683
+
+! https://github.com/uBlockOrigin/uAssets/issues/15688
+! https://github.com/uBlockOrigin/uAssets/issues/16056
+namasce.pl##+js(nostif, , 1)
+@@||request.dqst.pl/*/reader$xhr,domain=namasce.pl
+
+! https://github.com/uBlockOrigin/uAssets/issues/8096
+! https://github.com/uBlockOrigin/uAssets/issues/14640
+afly.pro##.g-recaptcha, iframe[src*="google.com/recaptcha"], .btn-captcha, .btn-black-outline:others()
+bloggingguidance.com,onroid.com###wpsafe-snp1:style(display: block !important)
+bloggingguidance.com,onroid.com###wpsafe-snp1:others()
+m.bloggingguidance.com,blog.onroid.com##+js(set, blurred, false)
+blog.onroid.com##.countdown, .get-link:others()
+bloggingguidance.com###id-custom_banner
+bloggingguidance.com,onroid.com##+js(noeval-if, /chp_?ad/)
+bloggingguidance.com##+js(aopr, open)
+||spiderhannahresidential.com^
+
+! https://www.duhoctrungquoc.vn/wiki/ja/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8 (wikipedia copy)
+duhoctrungquoc.vn##div[style="width:100%; height: 90px !important;text-align: center;;padding:10px 0; "]
+
+! hdmoviesflix. run poups
+hdmoviesflix.*##+js(aopw, p$00a)
+
+! https://forums.lanik.us/viewtopic.php?t=47897-meteo365-es
+@@||api.ipstack.com^$xhr
+@@||meteo365.es^$ghide
+meteo365.es##ins.adsbygoogle
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/135347
+uploadgig.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15732
+||adoto.net/dashboard/display/items.php$xhr,redirect-rule=nooptext
+soltoshindo.com##+js(aopr, Swal.fire)
+soltoshindo.com##+js(set, console.clear, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15737
+cutty.app##+js(set, blurred, false)
+cutty.app##.demand-supply
+cutty.app##.adsbygoogle:remove()
+
+! https://www.reddit.com/r/uBlockOrigin/comments/z10cbf/
+! https://github.com/AdguardTeam/AdguardFilters/issues/161688
+plc247.com##+js(acs, String.fromCharCode, decodeURIComponent)
+plc247.com##+js(rmnt, script, deblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2254#issuecomment-1322158000
+mazterize.com##+js(acs, $, open)
+mazterize.com##.dl-but
+
+! https://www.protege-liens. com popups
+protege-liens.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15754
+camwhorez.video##+js(aopr, TotemToolsObject)
+camwhorez.video##+js(set, flashvars.protect_block, '')
+
+! anti adb + ads rmweb.co. uk
+! https://github.com/uBlockOrigin/uAssets/commit/932aeeae55bb39cf99e73e986e57da1d3477ac68#commitcomment-91160703
+@@||rmweb.co.uk^$ghide
+rmweb.co.uk##.esPopupWrapper
+rmweb.co.uk##.b-modal
+rmweb.co.uk##html:style(overflow: auto !important;)
+||connatix.com^$script,domain=rmweb.co.uk
+||invisioncic.com/*.gif$image,domain=rmweb.co.uk
+
+! https://github.com/uBlockOrigin/uAssets/issues/15779
+gourmetscans.net##+js(nostif, .data?)
+gourmetscans.net##[class^="publift-widget"]
+gourmetscans.net##.widget_custom_html ins:upward(.widget_custom_html)
+gourmetscans.net##+js(set-cookie, __gads, OK, , reload, 1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15780
+noor-book.com##+js(no-fetch-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19002
+theporndude.com##+js(trusted-set-cookie, wallpaper, click)
+theporndude.com##body::before
+
+! https://github.com/uBlockOrigin/uAssets/issues/15802
+@@||planhub.ca^$ghide
+planhub.ca##.banner_iframe
+planhub.ca##.h-banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/15803
+! https://github.com/uBlockOrigin/uAssets/issues/17583
+! https://github.com/uBlockOrigin/uAssets/issues/17714
+snapinsta.app###dlModal
+snapinsta.app##body:style(overflow: auto !important;)
+snapinsta.app###adOverlay
+snapinsta.app##+js(set, app.showModalAd, noopFunc)
+snaptik.app##[onclick^="showAd"]:remove-attr(onclick)
+snaptik.app##+js(aost, $, openAdsModal)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15809
+! https://github.com/easylist/easylist/issues/14215
+! https://github.com/uBlockOrigin/uAssets/issues/18149
+@@||jiocinema.com^$ghide
+||collect.media.jio.com^
+/akamaized.net/ai/gcp/*$xhr,domain=jiocinema.com
+/delivery/mapi.php$xhr,domain=jiocinema.com
+||mercury.akamaized.net/cm/
+/jioads/*$script,domain=jiocinema.com
+||apis-jiocinema.voot.com/location$xhr,domain=jiocinema.com
+jiocinema.com##ins[id^="jioads"]
+
+! anti adb koamnewsnow. com
+*$script,domain=koamnewsnow.com,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/15812
+kpkuang.org##+js(nostif, _0x)
+kpkuang.org###sterra-ad-onmid
+
+! https://github.com/easylist/easylistgermany/issues/216
+chip.de###dlcharts-list + .mt-md:has(> div > h2:has-text(/Gesponsert|Bezahlte Empfehlung/) + a[href^="https://www.chip.de/downloads/"])
+chip.de##.fb > .Listing > div:has(> h2:has-text(/Gesponsert|Bezahlte Empfehlung/) + a[href^="https://www.chip.de/downloads/"])
+chip.de###R1C3[role="complementary"]
+chip.de###R1C2[role="complementary"]:not(:has(> .Hero))
+chip.de###R1C1[role="complementary"]
+chip.de##.ButtonAuswahl + div > div[class]:has(> a[class][style="display:flex;"][href^="https://www.chip.de/downloads/"][href$=".html"])
+chip.de###aabhor
+chip.de##.ob-ad-carousel-layout
+chip.de##.Ad-hor-height
+chip.de##tr:has(> td[style][colspan] > a.js-antivirusclick[href])
+chip.de##.FC__Container.min-height-250px-mu:style(max-height: 0.1px !important; height: 0.1px !important; min-height: 0px !important;)
+chip.de##.app_nexus_banners_common
+chip.de###banner_top_table
+chip.de##.Ad
+chip.de###contentad-top-adsense-1
+||nah-versorger.de^$3p
+||stopundstart.de^$3p
+||mein-organizer.de^$3p
+||schneesommer.de^$3p
+||free.webcompanion.com/*/index.php?*partner=*&campaign=$popup,doc
+||bdu.bitdriverupdater.com/*&utm_source=$popup,doc
+chip.de##^script:has-text(/pushAdTag|link_click|getAds/)
+praxistipps.chip.de##div[data-bc-data-trackvars]
+! https://github.com/orgs/uBlockOrigin/teams/ublock-filters-volunteers/discussions/448
+chip.de##:root:style(--topbanner-height-min:unset!important;--topbanner-height-max:unset!important;)
+praxistipps.chip.de,praxistipps.focus.de###G32:style(grid-template-rows: unset!important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/135902
+! https://github.com/uBlockOrigin/uAssets/issues/17579
+mega4upload.com##:is(.text-center, center):has(> div[style^="min-width: 3"][style*="min-height: "])
+mega4upload.com##center > [href], .text-center > [href]
+mega4upload.com##+js(ra, onclick, #direct_link > a[onclick])
+mega4upload.com##+js(nowoif)
+mega4upload.com##+js(nostif, sadbl)
+mega4upload.com##+js(set, path, '')
+mega4upload.com##+js(set, scriptSrc, '')
+
+! https://github.com/uBlockOrigin/uAssets/issues/15844
+seriesperu.com##+js(nostif, show)
+peliculas8k.com##+js(nowoif)
+peliculas8k.com##+js(set, adblockcheck, false)
+peliculas8k.com##+js(set, arrvast, [])
+||unpkg.com/videojs-vast-vpaid@2.0.2/bin/videojs_5.vast.vpaid.min.js$script,domain=peliculas8k.com
+
+! https://github.com/easylist/easylist/issues/14183
+! https://github.com/AdguardTeam/AdguardFilters/issues/159455
+tvtv.ca,tvtv.us##+js(set, paAddUnit, noopFunc)
+tvtv.ca,tvtv.us##.css-hj4rcg
+tvtv.ca,tvtv.us###app > .MuiBox-root + .MuiPaper-elevation
+tvtv.ca,tvtv.us##.channels > div[class^="MuiBox-root"]
+tvtv.ca,tvtv.us##.gridRowPad:style(margin-top: 0 !important;)
+tvtv.ca,tvtv.us##.css-uc3mu7:style(margin-top: 0 !important; height: 2400px !important;)
+tvtv.ca,tvtv.us##.MuiBox-root > div.MuiPaper-root.MuiPaper-elevation.mui-fixed:not([id])
+tvtv.ca,tvtv.us##.css-1352p5e:style(height: 2400px !important;)
+tvtv.ca,tvtv.us##.css-1s6rfoz:style(height: 2400px !important;)
+tvtv.ca,tvtv.us##.css-1wm768n:style(height: 1560px !important;)
+tvtv.ca,tvtv.us##.MuiDialog-paperScrollPaper > .MuiDialogContent-root + .MuiBox-root
+!#if env_mobile
+tvtv.ca,tvtv.us##.css-1wrjilj:style(margin-top: 0 !important; height: 2400px !important;)
+tvtv.ca,tvtv.us##.css-laxwha:style(height: 2400px !important;)
+tvtv.ca,tvtv.us##.css-3vwr5v:style(height: 2400px !important;)
+tvtv.ca,tvtv.us##.css-1j9nufa:style(height: 1560px !important;)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/15856
+ipalibrary.me##+js(nosiif, _0x)
+
+! https://forums.lanik.us/viewtopic.php?t=47909-nsfw-igay69-com
+igay69.com##+js(nosiif, show)
+
+! ads https://swisscows. com/en/web?query=running+shoes
+swisscows.com##.a11t--product:remove()
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/136408
+finchtechie.com###btnshow:style(display: block !important;)
+finchtechie.com###btnhide
+finchtechie.com###verify_button:style(display: block !important;)
+finchtechie.com###verify_button2
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/136338
+papahd1.xyz##.entry > p > button[onclick]:not([onclick*="papahd1.xyz/"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/15881
+@@||linkneverdie.net^$script,domain=techtnet.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/z8xo98/help_cannot_bypass_adblock_detection/
+ipalibrary.me##+js(nosiif, offsetHeight)
+ipalibrary.me##+js(nano-sib, countdown)
+
+! javopen.co Brave ad
+javopen.co##.main-content > h4 > strong:has-text(Brave)
+||javopen.co/wp-content/uploads/2020/05/brave.png
+
+! https://github.com/uBlockOrigin/uAssets/issues/15889
+derivative-calculator.net,integral-calculator.com##[class]:matches-css-before(content:/Advertisement/):upward(1)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/zary4h/video_watching_site_which_prevents_me_watching_it/ antiadb
+@@||tranimeci.com^$ghide
+
+! ilsole24ore. com remove autorefresh
+ilsole24ore.com##+js(nostif, refresh)
+
+! https://www.effedupmovies.com/hounds-of-love-2016/ popup (https://baldrfilms.xyz/v/my554t5d6w1kg5q)
+baldrfilms.xyz##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15913
+zeperfs.com#@#.showAd
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/136634
+mydaddy.cc##+js(set, adt, 0)
+mydaddy.cc###ovrl_ad
+hqporner.com##.uvb_wrapper
+
+! https://github.com/uBlockOrigin/uAssets/issues/15917
+javchill.com##+js(ra, href, [onclick^="pop"])
+javchill.com##.thumb:style(cursor:pointer !important)
+
+! FingerprintJS popups
+bluemedialink.online,buffstreams.*,crackstreams.*,game3rb.com,igg-games.com,igg-games.g3g.ink,manhwalist.com,miraculous.*,nflstreams.me,s2dfree.to,secretlink.xyz,soap2day.*,tennisstreams.*,tv247.us,vidsrc.*,vipboxtv.*,worldcupstream.pm##+js(acs, navigator, FingerprintJS)
+manhwalist.com##+js(aost, btoa, /https|stackDepth:3/)
+!#if cap_html_filtering
+bowfile.com,cloudvideo.tv,cloudvideotv.*,coloredmanga.com,embedstream.me,exeo.app,hiphopa.net,megaup.net,tv247.us,uploadhaven.com,userscloud.com,vidsrc.*##^script:has-text(FingerprintJS)
+soap2day.*##^script:has-text(Reflect)
+!#else
+bowfile.com,cloudvideo.tv,cloudvideotv.*,coloredmanga.com,embedstream.me,exeo.app,hiphopa.net,megaup.net,tv247.us,uploadhaven.com,userscloud.com,vidsrc.*##+js(rmnt, script, FingerprintJS)
+soap2day.*##+js(rmnt, script, Reflect)
+!#endif
+
+! FingerprintJS servers
+/^https?:\/\/[a-z]{7,18}\.buzz\/[+\/0-9a-zA-Z]{140,}$/$image,3p,match-case
+/^https?:\/\/[a-z]{7,18}\.buzz\/[+\/0-9a-zA-Z]{400,}$/$frame,3p,match-case
+/^https?:\/\/[a-z]{7,18}\.com?\/(?=[\/a-zA-Z]*[+0-9])(?=[+\/0-9a-z]*[A-Z])[+\/0-9a-zA-Z]{140,}$/$image,3p,match-case,domain=~edu|~gov
+/^https?:\/\/[a-z]{7,18}\.com?\/(?=[\/a-zA-Z]*[+0-9])(?=[+\/0-9a-z]*[A-Z])[+\/0-9a-zA-Z]{400,}$/$frame,3p,match-case,domain=~edu|~gov
+/^https?:\/\/[a-z]{7,18}\.info\/[+\/0-9a-zA-Z]{140,}$/$image,3p,match-case
+/^https?:\/\/[a-z]{7,18}\.info\/[+\/0-9a-zA-Z]{400,}$/$frame,3p,match-case
+/^https?:\/\/[a-z]{7,18}\.lol\/[+\/0-9a-zA-Z]{140,}$/$image,3p,match-case
+/^https?:\/\/[a-z]{7,18}\.lol\/[+\/0-9a-zA-Z]{400,}$/$frame,3p,match-case
+/^https?:\/\/[a-z]{7,18}\.one\/[+\/0-9a-zA-Z]{140,}$/$image,3p,match-case
+/^https?:\/\/[a-z]{7,18}\.one\/[+\/0-9a-zA-Z]{400,}$/$frame,3p,match-case
+/^https?:\/\/[a-z]{7,18}\.org\/(?=[\/a-zA-Z]*[+0-9])(?=[+\/0-9a-z]*[A-Z])[+\/0-9a-zA-Z]{140,}$/$image,3p,match-case,domain=~edu|~gov
+/^https?:\/\/[a-z]{7,18}\.org\/(?=[\/a-zA-Z]*[+0-9])(?=[+\/0-9a-z]*[A-Z])[+\/0-9a-zA-Z]{400,}$/$frame,3p,match-case,domain=~edu|~gov
+/^https?:\/\/[a-z]{7,18}\.xyz\/[+\/0-9a-zA-Z]{140,}$/$image,3p,match-case
+/^https?:\/\/[a-z]{7,18}\.xyz\/[+\/0-9a-zA-Z]{400,}$/$frame,3p,match-case
+
+! https://github.com/uBlockOrigin/uAssets/issues/15943
+@@||nbk.io^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/15946
+xhvid1.com##+js(acs, Array.prototype.indexOf, popunder)
+xhvid1.com##.player-add-overlay
+
+! woffxxx. com popups
+woffxxx.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15958
+*$script,domain=manga-oni.com,redirect-rule=noopjs
+
+! sports-stream. click popups
+sports-stream.*###reklama1
+coolcast2.com##+js(nostif, sadbl)
+||coolcast2.com/z-$script
+! https://github.com/uBlockOrigin/uAssets/issues/16675
+*$script,3p,denyallow=chatango.com|jquery.com|hwcdn.net,domain=sports-stream.*
+
+! watchsexandthecity. com popups
+watchsexandthecity.com##+js(aopr, mm)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15975
+||sitefilme.com/*.php$script,1p
+sitefilme.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15982
+smgplaza.com##+js(nostif, modal)
+smgplaza.com##+js(aeld, , modal)
+smgplaza.com##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15986
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=dobreprogramy.pl,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/15987
+@@||reyada-365.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/15992
+filepress.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15993
+uberhumor.com##+js(nowoif)
+
+! artribune. com lcickable background
+artribune.com##+js(set, td_ad_background_click_link, undefined)
+artribune.com##+js(rc, td-ad-background-link)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15995
+||link.theplatform.com/s/*/media*=rotten_tomatoes_video$xhr,removeparam=/^((?!SMIL|formats).)*$/
+
+! https://github.com/uBlockOrigin/uAssets/issues/16006
+*$script,domain=grabcrypto.co,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/16011
+! https://github.com/uBlockOrigin/uAssets/issues/16616
+! https://github.com/uBlockOrigin/uAssets/issues/18450
+||mstm.motorsport.com^$script,1p,redirect-rule=noopjs
+autosport.com,motorsport.com##+js(aeld, load, length)
+autosport.com,motorsport.com##+js(aeld, gtmloaderror)
+autosport.com,motorsport.com##+js(noeval-if, interactionCount)
+@@||mstm.motorsport.com/mstm.js
+! https://www.reddit.com/r/uBlockOrigin/comments/147qio5/issues_all_the_time_with_motorsportcom/jo0q1qw/?context
+autosport.com,motorsport.com##+js(acs, vardom)
+! https://github.com/uBlockOrigin/uAssets/issues/19063
+! https://github.com/uBlockOrigin/uAssets/issues/18825
+autosport.com,motorsport.com##+js(cookie-remover, 45grw1567)
+! https://www.reddit.com/r/uBlockOrigin/comments/147qio5/issues_all_the_time_with_motorsportcom/jvhn2h3/
+! https://www.reddit.com/r/uBlockOrigin/comments/16fq6mu/adblock_detected_forces_to_disable/
+autosport.com,motorsport.com##+js(set-cookie, 4d8L2108, 1, , reload, 1)
+autosport.com,motorsport.com##+js(acs, document.querySelector, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16010
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=tv8.com.tr
+
+! https://github.com/uBlockOrigin/uAssets/issues/16019
+*$script,domain=rendimentibtp.it,redirect-rule=noopjs
+
+! nflstreams .me ads/popups
+nflstreams.me##+js(acs, setTimeout, admc)
+nflstreams.me##.position-absolute
+nflstreams.me##.m-1.fw-bold.btn-danger.btn[data-openuri="|BTN_URL|"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/137602
+bootyexpo.net##+js(aopr, adsBlocked)
+##.adde_modal_detector
+##.adde_modal-overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/16034
+blog.nationapk.com,krishiloksewa.com,modzilla.in,itechmafiia.com,mb.feedale.com###wpsafe-link:style(display: block !important;)
+blog.nationapk.com,krishiloksewa.com,modzilla.in,itechmafiia.com,mb.feedale.com###wpsafe-link:others()
+
+! https://github.com/uBlockOrigin/uAssets/issues/16043
+ipacrack.com##+js(nosiif, _0x)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/zp0ypl/
+roadtrippin.fr##+js(set, test_adblock, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16044
+||hubu.cloud/app/js/index.php
+||hubu.cloud/app/js/in/
+hubu.cloud##.mn
+
+! https://github.com/uBlockOrigin/uAssets/issues/16062
+@@||tvnet.lv^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/16063
+! https://github.com/uBlockOrigin/uAssets/issues/16179
+howifx.com,vavada5com.com##+js(set, adblockDetector, noopFunc)
+howifx.com##.code-block
+
+! https://link.codevn.net/ew7xEf focus detection
+link.codevn.net##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16076
+redketchup.io##+js(set, Object.prototype.adBlockerDetected, falseFunc)
+redketchup.io##+js(set, Object.prototype.adBlocker, false)
+redketchup.io##+js(set, Object.prototype.tomatoDetected, falseFunc)
+redketchup.io##+js(nano-stb, adBlockerCountdown, *, 0.02)
+redketchup.io##.potato_modal
+
+! https://en.bestfonts.pro/font/download/5ddec54abc00f605b3d2d2b1 timer
+bestfonts.pro##+js(rc, download-font-button2, .download-font-button)
+bestfonts.pro##.loader-wrap
+
+! https://audiotruyenfull.com/quy-dao-chi-chu/ popup
+audiotruyenfull.com##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/137927
+hentaiporn.one##+js(nostif, window.location)
+hentaiporn.one##.adv-square
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/138053
+###video-id_fluid_html_on_pause
+/uthnafrwy.js
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/138145
+||uploadgig.com/static_/$3p
+
+! fix emturbovid.com player (e.g. supjav.com)
+emturbovid.com##+js(nowoif)
+emturbovid.com##+js(nostif, window.open)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/138059
+! https://github.com/AdguardTeam/AdguardFilters/issues/138060
+18pussy.porn,milf-porn.xxx##.footer-margin
+18pussy.porn,milf-porn.xxx##.table
+/ab/thejsfile.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/16106
+*$3p,denyallow=b-cdn.net|cloudflare.com|dailymotion.com|dmcdn.net|facebook.com|facebook.net|fbcdn.net|fontawesome.com|google.com|gstatic.com|iconfinder.com|jquery.com|llnwi.net|tmdb.org,domain=zone-telechargement.*
+zone-telechargement.*##+js(aeld, popstate)
+zone-telechargement.*##+js(nowoif)
+zone-telechargement.*##+js(no-fetch-if, /^/)
+||zone-telechargement.*/main.js?v=$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/zso4pp/
+alphaporno.com,anyporn.com,bravoporn.com,bravoteens.com,crocotube.com,hellmoms.com,hellporno.com,sex3.com,tubewolf.com,xbabe.com,xcum.com,zedporn.com##+js(set, vastEnabled, false)
+bravoporn.com##.box-left
+bravoporn.com##.undrplban
+bravoteens.com##.inplb3x2
+hellmoms.com##.bnnrs-player
+/cb/cb.ta.js?v=
+/cb/cb.xb.js?v=
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/138220
+lovejav.net##div[style="text-align:center;min-height:100px;margin-top:10px"]
+||discordapp.com/attachments/$domain=lovejav.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/16115
+spigotunlocked.*##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16118
+! https://github.com/uBlockOrigin/uAssets/issues/16377
+! https://github.com/uBlockOrigin/uAssets/issues/16833
+||tagecoin.com/ads/
+tagecoin.com##object
+tagecoin.com##^script:has-text(htmls)
+tagecoin.com##+js(acs, alert)
+tagecoin.com##+js(acs, document.createElement, adsBlocked)
+tagecoin.com##+js(aeld, load, htmls)
+tagecoin.com##div > ins:upward(div)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16922
+bitzite.com##+js(noeval-if, deblocker)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/zvzov8/
+faucetcrypto.net##+js(no-xhr-if, czilladx)
+faucetcrypto.net##.justify-content-around
+faucetcrypto.net##[id^="wcfloatDiv"]
+faucetcrypto.net##ins
+
+! https://github.com/uBlockOrigin/uAssets/issues/16136
+stream.bunkr.ru##+js(aost, Math, _0x)
+
+! email libero. it anti adb
+@@||libero.it^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/16140
+upfilesurls.com##+js(set, blurred, false)
+
+! anti adb adproceed. com
+@@||adproceed.com^$ghide
+adproceed.com##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/16144
+sptfy.be##+js(set, count, 0)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16145
+fedscoop.com##+js(set, init_welcome_ad, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/138508
+gaymovies.top##+js(aopr, __Y)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/138321
+xxxshake.com##+js(nowoif)
+xxxshake.com###headC
+xxxshake.com##.fluid-b
+||xxxshake.com/*pop/|$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/16154
+@@||emailn.de^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/16159
+bravedown.com##+js(no-fetch-if, adskeeper)
+bravedown.com##+js(set-local-storage-item, a_render, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16166
+adzz.in,proappapk.com##+js(ra, disabled, #gotolink)
+adzz.in,proappapk.com###gotolink:style(display: block !important;)
+proappapk.com##.blogContent:has(#verify) .postBody
+*$popunder,domain=adzz.in|proappapk.com
+||iili.io^$domain=adzz.in|proappapk.com
+shareus.site##+js(nostif, _0x)
+shareus.site##+js(set, blurred, false)
+shareus.site##.box-main:has(#countdown) > .blog-item
+
+! https://github.com/uBlockOrigin/uAssets/issues/16169
+crypto4yu.com##+js(aopr, Swal.fire)
+crypto4yu.com##+js(nostif, _0x)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16170
+faucetwork.space##+js(aopr, document.write)
+faucetwork.space##+js(nostif, _0x)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16172
+imagetotext.info##+js(set, detectadsbocker, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16176
+conghuongtu.net##+js(noeval-if, deblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16184
+sportskart.*##+js(aopr, afScript)
+sportskart.*##^script:has-text(u_cfg)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/170100
+cdnm4m.nl##+js(nowoif)
diff --git a/uAssets/filters/filters-2023.txt b/uAssets/filters/filters-2023.txt
new file mode 100644
index 0000000..82e06c0
--- /dev/null
+++ b/uAssets/filters/filters-2023.txt
@@ -0,0 +1,5620 @@
+! Title: uBlock filters (2023)
+! Last modified: %timestamp%
+! Description: Filters optimized for uBlock, to be used along EasyList
+! Homepage: https://github.com/uBlockOrigin/uAssets
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+! New filters from January 2023 to ->
+!
+! GitHub issues: https://github.com/uBlockOrigin/uAssets/issues
+! GitHub pull requests: https://github.com/uBlockOrigin/uAssets/pulls
+
+! https://github.com/uBlockOrigin/uAssets/issues/16269
+! https://shahid4uu. cam => player guccihide. com popups
+streamhide.to##+js(acs, setTimeout, checkADB)
+guccihide.com##+js(nowoif)
+filelions.*,guccihide.com,streamhide.to,streamwish.*##+js(aopr, __Y)
+/assets/jquery/adult100.js?v=$script,1p
+/assets/jquery/main100.js?v=$script,1p
+! javfas.com => player javb1.com
+/assets/jquery/adult0.js?v=$script,1p
+
+! https://www.parents. at anti adb
+parents.at##+js(aopw, AdBlockDetectorWorkaround)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16198
+*$script,3p,domain=chapmanganato.com,denyallow=facebook.net|fbcdn.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/16206
+wrzesnia.info.pl##+js(no-fetch-if, ads)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/138843
+pornkai.com,tubesafari.com##+js(aopw, c325)
+.com/static/full_combined2.js|$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/15596
+infokik.com##+js(nostif, ga)
+infokik.com##^script:has-text(two_worker_data_js)
+!#if !cap_html_filtering
+infokik.com##+js(set, two_worker_data_js.js, [])
+!#endif
+
+! https://www.reddit.com/r/uBlockOrigin/comments/102w6su/
+/eropics\.to\/[a-zA-Z0-9]{8}\.js$/$script,1p,domain=eropics.to
+
+! https://github.com/uBlockOrigin/uAssets/issues/16228
+freepik.com##+js(aeld, click, adobeModalTestABenabled)
+freepik.com##.main-spr
+freepik.com##.spr > .container-fluid:not([data-autopromo-name="freepik"]):upward(.spr)
+! https://github.com/uBlockOrigin/uAssets/issues/16393
+freepik.com##+js(set, FEATURE_DISABLE_ADOBE_POPUP_BY_COUNTRY, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16240
+ddwloclawek.pl##+js(set, questpassGuard, noopFunc)
+ddwloclawek.pl##+js(set, isAdBlockerEnabled, false)
+/pl/js/detect-adblock/*$domain=pl,script,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/16253
+! https://github.com/uBlockOrigin/uAssets/issues/16305
+! https://github.com/uBlockOrigin/uAssets/issues/16270
+privatemoviez.*##+js(nano-sib, count)
+writedroid.*##+js(nano-stb, shortConfig, 15000)
+writedroid.*###shortGoToCont.hidden:remove-class(hidden)
+writedroid.*###timerContainer > div:has(#timerPercentage)
+writedroid.*###timerContainer > div:not(:has(#timerPercentage)):style(display: flex !important;)
+writedroid.*##+js(aopw, akadb)
+writedroid.*##+js(nostif, _0x)
+@@||writedroid.*^$ghide
+writedroid.*##+js(no-xhr-if, ads)
+link4rev.site##+js(set, blurred, false)
+filepress.*##+js(aeld, blur, console.log)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14655
+! https://github.com/uBlockOrigin/uAssets/issues/15463
+@@||thetimes.co.uk/assets/optimizely/custom/tnl_custom_snippet.js$script,1p
+thetimes.co.uk##[class*="responsive__NativeAd"]
+thetimes.co.uk##article > [class^="tc-view"] #ad-header:upward(article > [class^="tc-view"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/16262
+thisisrussia.io##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17832
+blog.textpage.xyz##+js(aopr, eazy_ad_unblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16272
+additudemag.com##body:not(.home) #content:style(margin-top: 13px !important;)
+additudemag.com##.primary-sidebar-ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/18116
+welovemanga.one##+js(aopw, document.ready)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16281
+techpp.com##.tppAds
+techpp.com##.side-inserter
+techpp.com##.brxe-div > div[class="brxe-container"] .adsbygoogle:upward(.brxe-container)
+techpp.com###customad:upward(.code-block)
+techpp.com##section.brxe-section > div[class="brxe-container"] .adsbygoogle:upward(section)
+
+! https://github.com/easylist/easylist/issues/14573
+streamtb.me##+js(nowoif)
+
+! https://github.com/easylist/easylist/pull/14610
+moviesonlinefree.net##+js(acs, setTimeout, admc)
+moviesonlinefree.net##+js(acs, RegExp, 0x)
+moviesonlinefree.net##+js(aopw, p$00a)
+moviesonlinefree.net##+js(set, D4zz, noopFunc)
+moviesonlinefree.net###bread > div
+moviesonlinefree.net##.overlays
+moviesonlinefree.net##[href^="https://espionagegardenerthicket.com"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/16453
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|fastly.net|jsdelivr.net|stripst.com|strpst.com|datatables.net|jwpcdn.com,domain=javplayer.org|sextb.net
+! popup
+tuborstb.co##+js(nowoif)
+tuborstb.co##+js(trusted-set, premium, 1)
+
+! https://github.com/easylist/easylist/pull/14565
+jizzbunker2.com##.partner-site
+||cdn3x.com/*/js/*.vast.
+
+! https://github.com/uBlockOrigin/uAssets/issues/16294
+pesprofessionals.com##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16295
+*$script,domain=senda.pl,redirect-rule=noopjs
+@@||senda.pl^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/16300
+wpsimplehacks.com##+js(nostif, show)
+
+! https://azrom.net/rom-oppo-a71-cph1717-cph1801-official-firmware-all-repair-file/ timer
+azrom.net##.lm-hide:style(display: block !important;)
+azrom.net##+js(href-sanitizer, a[href^="https://azrom.net/"][href*="?url="], ?url)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/139845
+blogmado.com##+js(nano-sib, time, , 0.02)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16315
+! https://github.com/uBlockOrigin/uAssets/issues/16368
+livsavr.co##+js(aeld, DOMContentLoaded, adsBlocked)
+livsavr.co##+js(no-xhr-if, googlesyndication)
+livsavr.co##+js(nostif, adsBlocked)
+@@||ezojs.com/detroitchicago/cmbv2.js$script,domain=livsavr.co
+
+! https://www.reddit.com/r/uBlockOrigin/comments/10a31f2/
+||secretflying.com^$1p,frame,redirect-rule=noopframe
+
+! https://github.com/uBlockOrigin/uAssets/issues/16329
+vrporn.com##+js(acs, navigator, popunder)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/10bffwz/
+hotfm.audio##+js(no-xhr-if, adswizz.com)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16327
+topsporter.net##+js(acs, eval, replace)
+sportshub.to,topsporter.net##+js(nostif, keepChecking)
+sportshub.to,topsporter.net##+js(nostif, show)
+sportshub.to,topsporter.net##+js(acs, document.onkeypress)
+sportshub.to,topsporter.net##+js(acs, document.oncontextmenu)
+sportshub.to,topsporter.net##+js(no-xhr-if, doubleclick)
+mysports.to,sportfacts.net###footy-side-menu
+mysports.to,sportfacts.net##.footy-related-posts
+mysports.to,sportfacts.net##.scroller
+mysports.to,sportfacts.net###footy_post_extensions-2
+mysports.to,sportfacts.net##+js(aopr, document.oncontextmenu)
+||mysports.to/sticky.html$frame
+||sportfacts.net/sticky.html$frame
+topsporter.net,sportshub.to##^script:has-text(/ConsoleBan|alert|AdBlocker/)
+!#if !cap_html_filtering
+topsporter.net,sportshub.to##+js(rmnt, script, /ConsoleBan|alert|AdBlocker/)
+!#endif
+@@||topsporter.net^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/16320
+seznam.cz##.banner-wrapper:upward(2):remove()
+seznam.cz##[data-draggable-target]:has-text(Rekl):not(*:has([href*="radio"]))
+seznam.cz##.sticky-content:has-text(Reklama)
+seznam.cz##.sticky-content:has-text(Rek)
+seznam.cz##.sticky-content:has-text(klama)
+seznam.cz##[class*="advert"]
+||seznam.cz/$frame,1p
+@@||diskuze.seznam.cz^$frame
+@@||seznam.cz/html/cmp.html$frame,1p
+seznam.cz##+js(nostif, 0x)
+@@||seznam.cz^$ghide,badfilter
+||sdn.cz/*/ad-*.mp4$media,domain=seznam.cz|seznamzpravy.cz,redirect=noopmp3-0.1s
+! https://github.com/uBlockOrigin/uAssets/issues/18002#issuecomment-1627314064
+! https://github.com/uBlockOrigin/uAssets/issues/18890
+@@||seznam.cz/ui/ui.html$frame,domain=seznam.cz
+! https://github.com/uBlockOrigin/uAssets/issues/20112
+seznamzpravy.cz##.banner-wrapper:upward(2):remove()
+seznamzpravy.cz##[data-draggable-target]:has-text(Rekl):not(*:has([href*="radio"]))
+seznamzpravy.cz##.sticky-content:has-text(Reklama)
+seznamzpravy.cz##.sticky-content:has-text(Rek)
+seznamzpravy.cz##.sticky-content:has-text(klama)
+seznamzpravy.cz##[class*="advert"]
+||seznamzpravy.cz/$frame,1p
+@@||diskuze.seznamzpravy.cz^$frame
+@@||seznamzpravy.cz/html/cmp.html$frame,1p
+seznamzpravy.cz##+js(nostif, 0x)
+@@||seznamzpravy.cz^$ghide,badfilter
+@@||seznamzpravy.cz/ui/ui.html$frame,domain=seznam.cz|seznamzpravy.cz
+seznamzpravy.cz##+js(ra, style, [style*="background-image: url"], stay)
+seznamzpravy.cz##+js(ra, href, [href*="click?"], stay)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/10c3euc/
+proxer.me###stream_message_overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/16343
+allotech-dz.com##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16344
+@@*$ghide,domain=btc25.org|doge25.in
+||domain.com/ads.html$frame,3p,redirect-rule=noopframe
+btc25.org,doge25.in##+js(acs, document.createElement, adsBlocked)
+btc25.org,doge25.in##+js(acs, document.getElementById, Swal.fire)
+btc25.org,doge25.in##+js(no-xhr-if, czilladx)
+btc25.org,doge25.in###wcfloatDiv4
+btc25.org##.ads
+btc25.org##center > ins:upward(center)
+doge25.in##.alert-success.alert .ads
+doge25.in##.row.text-center > .ads
+doge25.in##[id^="hbagency_space"]
+doge25.in##center > .ads
+doge25.in##center > ins
+doge25.in##div[style] > ins:upward(div)
+doge25.in##+js(aeld, load, htmls)
+doge25.in##^script:has-text(htmls)
+btc25.org##+js(rmnt, script, htmls)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16347
+darkwanderer.net,truckingboards.com##+js(nostif, show)
+
+! anti adb luffytra. xyz
+*$xhr,domain=luffytra.xyz,redirect-rule=nooptext
+luffytra.xyz##+js(no-xhr-if, tag)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20949
+||googlesyndication.com^$image,domain=smartkhabrinews.com|streama2z.com,redirect-rule=1x1.gif
+*$xhr,redirect-rule=nooptext,domain=smartkhabrinews.com
+smartkhabrinews.com##+js(no-fetch-if, /freychang|passback|popunder|tag|banquetunarmedgrater/)
+smartkhabrinews.com##+js(set-cookie, visits, 1)
+smartkhabrinews.com###vipada
+@@||popads.net/js/adblock.js$script,xhr,domain=smartkhabrinews.com
+@@||tmp.a2zapk.com^$xhr,domain=smartkhabrinews.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/16354
+guru3d.com##.content3 > div[style]:has-text(Advertisement)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16366
+roblox-scripts.co##.ad-zone:remove()
+
+! https://www.reddit.com/r/uBlockOrigin/comments/10e2l0a/
+||hostingcloud.racing^$xhr,domain=bytecash.in,redirect-rule=nooptext
+
+! https://www.reddit.com/r/uBlockOrigin/comments/10dzlaw/
+theodysseyonline.com###top_leaderboard
+theodysseyonline.com##.rblad-content
+theodysseyonline.com##.rblad-infinite
+theodysseyonline.com##.rblad-sidebar_1
+theodysseyonline.com##.rblad-sidebar_2
+theodysseyonline.com##.rblad-under_image
+theodysseyonline.com##.row > [id^="sPost"]:style(margin-top: 60px !important;)
+
+! onscreens.me ad script
+onscreens.me##+js(aopr, asgPopScript)
+
+! placeholder by EasyPrivacy
+! rcm.shinobi.jp and cnobi.jp
+##.ninja-recommend-block
+blogterest.net##.blockSide > div.blockWrapper:has(> div > div.ninja-recommend-block)
+nukeruerodouga.com###main-right:has(> div.right_area > div.ninja-recommend-block)
+doorblog.jp,pachinkopachisro.com,blog.livedoor.jp,blog.jp,vipstyle.tokyo##.plugin-memo:has(> div.side > div.ninja-recommend-block)
+adseek.site###primary:style(display: block !important;)
+mesyuu.com##div[class$="_outline"]:has(> div > div.plugin-freearea > div.ninja-recommend-block)
+minnyuu.jp##div[class$="BlockBase"]:has(> div > div > div.plugin-freearea > div.ninja-recommend-block)
+norisoku.com###random
+samuraisoccer.doorblog.jp##.plugin-l-t:last-child
+ero-anime.net###side_col #index_side_widget:has(.ninja-recommend-block)
+ero-anime.net###top_area_under
+dvdrev.com##.side_menu:has(> div > div.plugin-freearea > div.ninja-recommend-block)
+! Cxense/Piano
+jiji.com##.RecommendPianoWrapper
+jiji.com##.RecommendUnderlayer
+rbbtoday.com##.cx-top-news
+president.jp##.recommend
+kobe-np.co.jp##section.sec:has(> #piano_recs_inline_title)
+vivi.tv##.section__inner:has(> #recommended-posts-result)
+! ziyu.net
+jin115.com,livedoor.biz#?#.plugin-memo:has(> div.side > script[src*="ziyu.net/"])
+okutta.net##.article__footer > div[style="height:500px; overflow-y:scroll;"]
+! Taboola
+cartune.me##.contents-inner > div:has(> div#taboola-alternating-thumbnails-a)
+gendai.media##.elementSectionHeadingsWithSuffix:has(+ div[id^="taboola-below-article-thumbnails-gendai_biz-desktop"])
+infoseek.co.jp##.co-Widget[style="min-height: 6000px;"]:style(min-height: auto !important;)
+anime-drama.jp###block-11
+crank-in.net##.wrap_general:has(> #taboola-below-article-thumbnails-mg)
+crank-in.net##article > section.block-area:has(> div#taboola-below-article-thumbnails-mg)
+jbpress.ismedia.jp##div.--wid:has(> div#taboola-below-article-thumbnails-bottom)
+mdpr.jp##.p-articleList__heading:has(+ div#taboola-below-article-thumbnails-desktop)
+full-count.jp##.s-entry > section > div.c-heading:has(> div#taboola-below-article-thumbnails-desktop)
+newsweekjapan.jp##.taboola-below-article-thumbnails-desktop-2-wrap
+pashplus.jp##.content_right > div > span[style^="display: block; font-size: 30px"]:has(+ div#taboola-below-article-thumbnails)
+! Rtoaster
+nifty.com##div[class^="Setsuzoku_ourServicesDList"] > dl > dt:first-child
+nifty.com##dd[class^="Setsuzoku_servicePromo"]
+! other
+blog.jp#?#.plugin-memo:has(> div.side > div > div[id^="blz_rss"])
+nukigazo.com###text-2
+comichara.com,movient.net###text-6
+okazuch.site###custom_html-30
+tousatu-club.com###text-9
+
+! https://github.com/uBlockOrigin/uAssets/issues/16370
+@@||lecturel.com^$ghide
+lecturel.com##+js(nosiif, visibility, 1000)
+lecturel.com##+js(aeld, load, nextFunction)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16371
+||doubleclick.net/instream/ad_status.js$script,redirect=doubleclick_instream_ad_status.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/16373
+pinloker.com,sekilastekno.com##+js(aeld, blur, counter)
+pinloker.com,sekilastekno.com##+js(nowoif, /\.(com|net)\/4\//)
+pinloker.com,sekilastekno.com##+js(nano-sib, wait)
+pinloker.com,sekilastekno.com###main:has(a[\@click="scroll"][target="_blank"]) .entry-content > figure, h3, h4, ol, p, ul
+pinloker.com,sekilastekno.com##.separator > a[\@click="scroll"][target="_blank"]
+||betzapdoson.com^$popup
+/^https?:\/\/(?:ak\.)?[a-z]{6,12}\.(?:com|net)\/4\/\d{7}/$doc,frame,popup
+pinloker.com##+js(no-fetch-if, adsbygoogle)
+pinloker.com,sekilastekno.com###teaser2
+sekilastekno.com###content:has(#teaser2) .entry-content > figure, h3, h4, ol, p, ul
+
+! https://github.com/uBlockOrigin/uAssets/issues/16386
+@@||elahmad.com/tv/videojs/packages/blockadblock.min.js$script,1p
+@@||elahmad.com/tv/videojs/packages/videojs-analytics/videojs-analytics.min.js$script,1p
+elahmad.com##+js(no-fetch-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16389
+@@||a-ads.com/assets/common/ad_blocker-203c5bd097d317c7badf88cd5afdaf79091c5f0b9ab00763ae2a84ee4d2c218b.js|$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/16392
+freepik-downloader.com##+js(no-fetch-if, google-analytics)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/10fp3x4/
+financialjuice.com##+js(acs, jQuery, modal)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16406
+*$script,xhr,redirect-rule=noopjs,domain=earnbtc.pw
+@@||static.surfe.pro/js/net.js$script,domain=earnbtc.pw
+@@||earnbtc.pw/jse/vld.ads?ad_ids=$script,domain=earnbtc.pw
+
+! https://github.com/uBlockOrigin/uAssets/issues/16411
+coldfrm.org##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16413
+@@||onlinestudentseva.com^$ghide
+onlinestudentseva.com##.adsbygoogle:style(max-height: 1px !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16415
+*/wp-content/plugins/best-ads-block-detector/
+
+! https://github.com/uBlockOrigin/uAssets/issues/16416
+azrom.net##+js(nostif, show)
+azrom.net##+js(aeld, , show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16417
+freepatternsarea.com##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16426
+@@||scriptsoup.nx.tc/prebid.js$script
+
+! porhubvideo.com,pornktubes.net anti-adb, hilltopads
+porhubvideo.com,pornktubes.net##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+porhubvideo.com,pornktubes.net##+js(acs, eval, replace)
+
+! daemonanime.net/daemon-hentai.com anti-adb
+daemonanime.net##+js(acs, eval, replace)
+daemonanime.net##+js(acs, document.addEventListener, google_ad_client)
+daemon-hentai.com##+js(aopr, b2a)
+daemonanime.net,daemon-hentai.com##+js(nostif, adbl)
+daemonanime.net,daemon-hentai.com##+js(acs, document.querySelectorAll, popMagic)
+daemonanime.net#@#div[id^="div-gpt-"]:not([style^="width: 1px; height: 1px; position: absolute; left: -10000px; top: -"])
+daemonanime.net#@#[id^="div-gpt-ad"]:not([style^="width: 1px; height: 1px; position: absolute; left: -10000px; top: -"])
+
+||a.magsrv.com/video-slider.js$script,redirect=noop.js,domain=daemonanime.net|daemon-hentai.com
+@@||daemon-hentai.com^$ghide
+
+! simulatormods.com anti-adb
+simulatormods.com##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16456
+gsmhamza.com##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16457
+titsintops.com##+js(acs, Math.floor, Math.random)
+titsintops.com##+js(aopr, decodeURI)
+
+! filmeonline2018. net popups
+filmeonline2018.net##+js(nowoif)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/10ighk9/
+cpuid.com##.widget-block[class*="widget-advert"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/16476
+zerotopay.com##+js(aeld, load, onload)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16480
+myownguess.in##+js(set, detectAdBlock, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16482
+pobre.*##+js(no-fetch-if, ads)
+pobre.*##+js(nowoif)
+pobre.*###bannerOverLay
+
+! https://github.com/uBlockOrigin/uAssets/issues/16477
+@@||519.*^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/16492
+futemax.app##+js(acs, setTimeout, admc)
+futemax.app##.alertWS
+
+! https://github.com/uBlockOrigin/uAssets/issues/16496
+alttyab.net##+js(nostif, show)
+alttyab.net##+js(aeld, , show)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/140807
+techclips.net##+js(nostif, sadbl)
+||techclips.net/jqueri.php
+
+! AdSpyglass 0i0i0i0.com CNAME adserver
+/^https?:\/\/a\.[-0-9a-z]{4,21}\.[a-z]{2,5}\/(?=[a-z]*[0-9A-Z])[0-9a-zA-Z]{5,7}\.js$/$script,match-case
+/^https?:\/\/asg\.[-0-9a-z]{4,21}\.[a-z]{2,5}\/(?=[a-z]*[0-9A-Z])[0-9a-zA-Z]{5,7}\.js$/$script,match-case
+/^https?:\/\/pre\.[0-9a-z]{6,12}\.[a-z]{3,4}\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$/$script,match-case
+/^https?:\/\/oi\.[0-9a-z]{6,12}\.[a-z]{3}\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$/$script,match-case
+/^https?:\/\/[0-9a-z]{4,8}\.autos\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$/$script,3p,match-case
+/^https?:\/\/[0-9a-z]{4,8}\.beauty\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$/$script,3p,match-case
+/^https?:\/\/[0-9a-z]{4,8}\.lol\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$/$script,3p,match-case
+/^https?:\/\/[0-9a-z]{4,8}\.mom\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$/$script,3p,match-case
+/^https?:\/\/[0-9a-z]{4,8}\.name\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$/$script,3p,match-case
+/^https?:\/\/[0-9a-z]{4,8}\.pro\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$/$script,3p,match-case
+/^https?:\/\/[0-9a-z]{4,8}\.xyz\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$/$script,3p,match-case
+/^https?:\/\/(?=[a-z]{0,10}\d)[0-9a-z]{11}\.[-0-9a-z]{6,}\.com\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$/$script,1p,strict3p,match-case
+/asg_embed.js
+/vast-im.js$script
+://a.*/click/$image
+://a.*/splash/$xhr
+://a.*/spots/$xhr
+/api/users/*&ev=$script
+://a.*/js/ep.js^
+://a.*/js/stream.js^
+/api/users/*^fill=$xhr
+://cdn.*.com/vast2.js|$3p
+
+! PopCash popcashjs.b-cdn.net CNAME adserver
+/^https?:\/\/cdn\.[a-z]{5,8}\.com\/app\.js$/$script,3p,match-case,domain=~edu|~gov
+/^https?:\/\/cdn\.[a-z]{4,7}\.xyz\/app\.js$/$script,3p,match-case
+.com/go/*/aHR0c*$popup,3p
+.xyz/go/*/aHR0c*$popup,3p
+
+! NameSilo ab1n.net CNAME adserver
+/fp-interstitial.js
+/nativeads-v2.js
+/splash.php?idzone=
+://a.*/pn.php
+://a.*/iframe.php?idzone=
+
+! ads/popups
+2umovies.*##+js(acs, atob, decodeURIComponent)
+doplay.store##+js(nowoif)
+doplay.store##+js(aopr, doSecondPop)
+mmsbee.*##+js(aost, Element.prototype.matches, litespeed)
+8xmovies.*##+js(nowoif)
+||techgates.link^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/16510
+||cryptocoinsad.com/ads/$frame
+claimsatoshi.xyz##+js(acs, document.createElement, adsBlocked)
+claimsatoshi.xyz##.ads
+claimsatoshi.xyz##form > div[style]
+
+! https://github.com/uBlockOrigin/uAssets/issues/16511
+harshfaucet.com##+js(acs, document.createElement, adsBlocked)
+harshfaucet.com##.ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/16513
+compromath.com##+js(no-fetch-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13571
+*/ads/autopromo/*$media,xhr,redirect=noopmp3-0.1s,domain=deezer.com
+*$media,domain=deezer.com,redirect-rule=noopmp3-0.1s
+! https://github.com/uBlockOrigin/uAssets/issues/17392
+deezer.com##+js(nostif, Ads)
+! https://github.com/uBlockOrigin/uAssets/issues/18932
+deezer.com##+js(set, smartLoaded, true)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/10n37i2/
+@@||wnacg.org/download$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/16525
+streamcheck.link##+js(acs, setTimeout, admc)
+streamcheck.link##+js(set, count, 0)
+streamcheck.link##^script:has-text(admc)
+/script/bootstrap.js$script,3p,domain=streamcheck.link
+
+! https://github.com/uBlockOrigin/uAssets/issues/16508
+! https://github.com/uBlockOrigin/uAssets/issues/17383
+bestsolaris.com,daddylivehd.*,gameshdlive.xyz,tutelehd.*,unbiasedsenseevent.com,watchtvchh.*,weakstream.org##+js(acs, setTimeout, admc)
+crackstreamshd.click,daddylivehd.*,freelivetvon.com,tvpclive.com,worldstreams.click##+js(aopw, u_cfg)
+daddylivehd.*,earthquakecensus.com,footyhunter.lol,gamerarcades.com,poscitech.click,starlive.stream,utopianwilderness.com,wecast.to##+js(nostif, sadbl)
+dlhd.sx##+js(aost, document.createElement, onerror)
+/adblock.php$script,domain=daddylivehd.*|freelivetvon.com|poscitech.click|tvpclive.com
+||switchcast2.com/z-$script
+||cdn.trafficbass.com^$popup,3p
+*$script,3p,denyallow=fastly.net|jquery.com|jsdelivr.net|hwcdn.net,domain=worldstreams.click
+! https://www.reddit.com/r/uBlockOrigin/comments/135yt7g/
+/adpup/*.js$script,3p
+/t.salamus1.lol/*$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/16544 focus detection
+bloginguru.xyz##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16545
+socialcounts.org##.container > .adsbygoogle:upward(.container)
+socialcounts.org##.container > div > .adsbygoogle:upward(div)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16547
+ahmedmode.*##+js(nostif, show)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/10og35n/
+ennovelas.com##+js(set, scriptSrc, '')
+ennovelas.com##+js(set, path, '')
+ennovelas.com##^script[data-cfasync][data-adel]
+/^https://www.ennovelas.com\/[a-z0-9]{10}$/$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/16561
+arblinks.xyz,arbweb.info##+js(aopr, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16563
+fosslinux.com##+js(nostif, ShowAdBLockerNotice)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/141388
+freepornsex.net##+js(nostif, showModal)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/141273
+liveon.*##+js(acs, setTimeout, admc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/141197
+sportbar.live##+js(nostif, sadbl)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16605
+nurparatodos.com.ar##+js(nostif, showModal)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16608
+hq-links.com##+js(nostif, show)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/141714
+@@||fpnpmcdn.net/v3/*/loader_$script,domain=member.neofinancial.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/16618
+shrdsk.me##+js(nostif, ad_listener)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16636
+nilesoft.org##+js(aost, document.createElement, notify)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16633
+tlgrm.eu##.channel-feed__brick .cfeed-card-contents--banner-adsense:upward(.channel-feed__brick)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16634
+telegramchannels.me##.is-full .climad-badge:upward(.is-full)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16637
+*$script,3p,denyallow=static.addtoany.com,domain=nicesss.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/142004
+.com/promo.php?c=$frame,script,3p
+/wcm/?sh=$script,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/16640
+@@||ajc.com^$ghide
+
+! wendycode.com anti adblock
+wendycode.com##+js(nostif, _0x, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16653
+fusevideo.net##a[href][target="_blank"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/16664
+nn.de###ad-Billboard:upward([style])
+
+! wareme24.com popup
+wareme24.com##+js(noeval)
+/push/p.js?u=$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/16656
+moegirl.org.cn##+js(nostif, offsetHeight)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16669
+nhl66.ir##+js(nowoif)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/10wlagl/
+www.walmart.com##[data-stack-index] > section > div > div [data-item-id] > a[link-identifier][href^="https://wrd.walmart.com"]:upward(section > div > div)
+www.walmart.com##[data-testid="flex-container"] > div > span:has(a[link-identifier][href^="https://wrd.walmart.com"])
+www.walmart.com##[data-testid="skyline-ad"]
+
+! globalThis crap
+/sw.js?puid=$script,1p
+/utx?tid=$xhr,3p
+/^https?:\/\/[a-z]{8,15}\.club\/[%0-9a-zA-Z]{170,}$/$script,3p,match-case
+/^https?:\/\/[a-z]{8,15}\.fun\/[%0-9a-zA-Z]{170,}$/$script,3p,match-case
+/^https?:\/\/[a-z]{8,15}\.hair\/[%0-9a-zA-Z]{170,}$/$script,3p,match-case
+/^https?:\/\/[a-z]{8,15}\.work\/[%0-9a-zA-Z]{170,}$/$script,3p
+/^https?:\/\/[a-z]{8,15}\.xyz\/[%0-9a-zA-Z]{170,}$/$script,3p
+/^https?:\/\/[a-z]{8,15}\.com?\/(?=[0-9a-zA-Z]*%)(?=[%a-zA-Z]*\d)(?=[%0-9a-z]*[A-Z])[%0-9a-zA-Z]{170,}$/$script,3p,match-case,domain=~edu|~gov
+
+! generic adserver rules
+/pw/waWQiOjEw*=eyJ.js^$script
+/gb/zone?zid=$xhr,3p
+.club/js/popunder.js$3p
+.life/js/popunder.js$3p
+.com/ipp.js?id=$3p
+.top/ps/ps.js?id=$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/16698
+diyphotography.net##+js(aeld, , AdB)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16692
+||tilersforums.com/js/xf/$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10703
+||uploadhaven.com/sw.js$script,1p
+
+arealgamer.org##+js(nano-sib, counter)
+arealgamer.org##a[href="javascript:void(0)"][onclick^="window.open"]
+
+thefileslocker.net###countdown
+thefileslocker.net##.downloadbtn:remove-attr(disabled)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16707
+lightsnovel.com##+js(set, pandaAdviewValidate, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16680
+! https://github.com/AdguardTeam/AdguardFilters/issues/132697
+n.fcd.su###submitbutton[disabled]:remove-attr(disabled)
+n.fcd.su##a#gobutton[onclick]:remove-attr(onclick)
+n.fcd.su##+js(acs, $, push-allow-modal)
+oxy.*##+js(acs, $, window.open)
+oxy.*##+js(nosiif, .hide)
+oxy.*##+js(acs, $, localStorage)
+oxy.*###divdownload > div[data-template][data-source_url]
+oxy.*##[href*=".info"]
+oxy.*##.group_viewport, .page__viewport:style(display: initial !important;)
+oxy.*###izobrazhenie-1:style(padding-bottom: 0px !important;)
+*$script,3p,denyallow=yastatic.net,domain=oxy.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/16718
+mobilkulup.com##+js(nostif, show)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/1105dh1/
+wnynewsnow.com##.g
+
+! https://github.com/uBlockOrigin/uAssets/issues/16703
+eltiempo.es##.cls-publi-height-city
+eltiempo.es##body:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16719
+esopress.com##+js(nostif, show)
+esopress.com##+js(aeld, , show)
+esopress.com##+js(no-fetch-if, googlesyndication)
+*$script,domain=esopress.com,redirect-rule=noopjs
+! https://github.com/uBlockOrigin/uAssets/issues/17222#issuecomment-1487432148
+@@||cdn.jsdelivr.net/gh/*/detectIncognito$script,domain=esopress.com
+@@||esopress.com^$ghide
+esopress.com##.adsbyvli:style(height: 0px !important;)
+
+! __Y players
+##div[style^="position:fixed;inset:0px;z-index:2147483647;background:black;opacity:0.01"]
+/\/assets\/jquery\/jquery-\d\.\d\.(?:\d\.)?min\.js\?(?:v=2)?&?type=(?:adult|mainstream)$/$script,1p
+/asset/angular.min.js?t=$xhr,1p
+/asset/jquery/slim-3.2.min.js?*&t=$xhr,1p
+cloudrls.com,embedwish.com,fc2stream.tv,javhahaha.us,javlion.xyz,javibe.net,jvideo.xyz,streamvid.top,vidgo.top##+js(aopr, __Y)
+
+! heavyfetish.com ads and pre-roll
+heavyfetish.com##+js(set, flashvars.adv_pre_src, '')
+heavyfetish.com##.banner
+heavyfetish.com##.table
+heavyfetish.com##.sponsor
+
+! ads.snapchat.com anti-adb
+ads.snapchat.com#@#.banner_ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/16738
+! https://github.com/uBlockOrigin/uAssets/issues/19842
+7xm.xyz##+js(acs, eval, replace)
+!#if cap_html_filtering
+7xm.xyz##^script:has-text(AdBlocker)
+!#else
+7xm.xyz##+js(rmnt, script, AdBlocker)
+!#endif
+
+! ytms.one popup
+ytms.one##+js(aopr, BetterJsPop)
+ytms.one##+js(aopw, atOptions)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16756
+rttar.com##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20882
+claimclicks.com##+js(rmnt, script, fetch)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16768
+gochyu.com##+js(acs, $, open)
+
+! examword. com anti adb
+examword.com##+js(nostif, open)
+
+! https://tribuna.com/en/ ads modal
+! https://github.com/uBlockOrigin/uAssets/commit/f8075cd7d545d24adafa91e4fe305f6cc30983ec#commitcomment-100882736
+tribuna.com##+js(nostif, (!0))
+tribuna.com##body:style(overflow: auto !important;)
+tribuna.com##.banner
+tribuna.com##.footer-helper__min-height-after-header
+tribuna.com##[class^="BannerAlternative_banner"]
+tribuna.com##[class^="Main_main-layout__fixed-banners"]
+
+! NSFW sites popup/ads
+||xxxadd.com/js/hrqst.js
+||xxxtubedot.com/js/skvkl.js
+||tubevintageporn.com/js/bkcwe.js
+||tubesex.me/js/eribi.js
+?adl=1&id=$frame,script,1p
+/\/js\/\d{2,3}eka\d{2,3}\.js$/$script,1p,domain=com
+||fapnow.xxx/bump/
+/lhzbsrfkjf/js/*$3p
+/zbs.kek.js
+||rapidgator.net/images/pics/36_300%D1%85250_$3p
+||sexasia.net/wp-content/uploads/2022/03/subyshare.gif
+teenpornvideo.fun##.fullave-pl
+||teenpornvideo.fun/vcrtlrvw/cjdoweph.js
+||av.ageverify.co^$frame,3p
+||a1-multisite.aphex.me^$image,3p
+||teenxx.org/fpc.js
+||extmatrix.com/ad/
+||i.imgur.com/cSePTP2.jpg
+||javrave.club/ads/
+doujinblog.org##.wppopups-whole
+latestjav.com###block-15
+hentaiomg.com###custom_html-2
+hentai-sharing.net,hentaiomg.com,javrookies.com,sakuravrjav.com###custom_html-3
+sakurajav.com###custom_html-4
+javzh.com###custom_html-5
+javrookies.com,javzh.com,sakurajav.com,sakuravrjav.com###isLatest
+sakurajav.com##.ce-banner
+sakuravrjav.com###widget_advertising-2
+||boundhub.com/sab/$image
+cosplayporntube.com##div[class*="Creative"]
+||cosplayporntube.com/creatives/
+||fapix.porn/front/js/unwanted.js
+hcbdsm.com##.-aff
+hcbdsm.com##.aside
+hcbdsm.com##.inline-aff-sec
+||hcbdsm.com/exo1.html
+||hcbdsm.com/frtl.js
+||hcbdsm.com/rbtop.html
+||orgasm.com/images/girl3.jpg
+||atube.sex/*/js.php
+||fullhdxxx.com/*/js.php
+||hdpornup.com/*/js.php
+||pornodom.top/fix/js.php
+||pornvxxxcn.com/*/js.php
+||sexfreehd.xxx/*/js.php
+||bollywoodporn.name/js/PfV5GLKSF5S5md5LwPUPY.js
+||forcedgayporn.com/js/odWRPsjXZqsqsSkW.js
+||freepornvideo.name/js/JTJIV6szTz6sdA4.js
+||gaypornrape.net/js/3LQkZfQVN7mWARVbozLgE.js
+||goldporn.org/js/nc2nlpLCSuNoX5A.js
+||pornegypt.com/js/UkxJS6eXaq4UYmNDr8iqYtA.js
+||pornhamster.net/js/tnKe7I3IjCR17dbnPQpzX.js
+||pornxvideos.org/js/QeCMJoCzLeIl3Pm.js
+||rapeporn.xyz/js/WBaV00YD0JTBSypXSc.js
+||rapetube.me/js/2oWLXMqWrBJLr5kGnC.js
+||roughhardsex.com/js/YxklHzfRQPifk0utgjMI7a.js
+||vintagenudes.pro/js/aQCeo5xWBGKc6Uv0xe.js
+||youngasianporntube.net/js/cyc2Z5Gg0nwnQY2Gy.js
+||comixporn.net/js/nvrblck.js
+||manporn.xxx/agent.php
+||tubecucumber.com/images/pr.js
+||wingiftnow.life/js/popunder.js
+||xxxpornanal.com/123iigttdj924/$script,1p
+||javmenu.com/api/v1/get_rendered_ads^
+sexseeimage.com##.video-block-happy:upward(1)
+javmix.app##+js(set, puShown, true)
+||gayxxxtube.net/img_bnnrs/
+||xxxgirlsphotos.com/girls.js
+||cdn-static3.com/cdn/push.min.js
+://creative.*/widgets/Spot/lib.js$3p
+://creative.*/widgets/v4/Universal?$frame,3p
+
+! xtremetop100.com ads
+xtremetop100.com###sidebanner
+xtremetop100.com###sidebannerleft
+xtremetop100.com###topbanner
+||xtremetop100.com/horizontalBanner.jpg
+||xtremetop100.com/images/UWSidebanner.gif
+||xtremetop100.com/images/right_adspot2.jpg
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11486ss/antiadblock_detecting_ublock/
+@@||saikai.com.br^$ghide
+saikai.com.br##.comic-note
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/130891
+karvitt.com#@#ins.adsbygoogle
+karvitt.com##ins.adsbygoogle:style(height: 1px!important;)
+
+! __aaZoneid sites
+azel.info,clip-sex.biz,justpicsplease.com,klmanga.*,lucagrassetti.com,manga1001.*,mangaraw.*,mangarawjp.*,mangarow.org,mihand.ir,nudecelebsimages.com,overwatchporn.xxx,pornium.net,syosetu.me,xnxxw.net,xxxymovies.com,yurineko.net##+js(aopw, __aaZoneid)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16798
+watchaccordingtojimonline.com,watchcalifornicationonline.com,watchdowntonabbeyonline.com,watcheronline.net,watchhouseonline.net,watchmalcolminthemiddle.com,watchonlyfoolsandhorses.com,watchprettylittleliarsonline.com,watchrulesofengagementonline.com,watchsuitsonline.net,watchlostonline.net##+js(nowoif)
+watchpsychonline.net,watchsmallvilleonline.net##+js(aopr, mm)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16808
+sumoweb.to##+js(no-fetch-if, ads)
+
+! sexypornpictures.org popup
+sexypornpictures.org##+js(nowoif)
+
+! https://github.com/easylist/easylist/pull/14833
+tubesweet.com##.bottom-blocks
+tubesweet.com##.video-aside
+
+! https://github.com/uBlockOrigin/uAssets/issues/16832
+*$script,domain=leaveadvice.com,redirect-rule=noopjs
+@@||leaveadvice.com^$ghide
+/wp-content/plugins/wp-hide-security-enhancer/assets/js/devtools-detect.js$script,1p
+||cdn.jsdelivr.net/*/detectIncognito$script
+
+! Steady anti adblock
+! https://github.com/uBlockOrigin/uAssets/issues/7228
+! https://github.com/uBlockOrigin/uAssets/issues/7826
+trendsderzukunft.de,gal-dem.com,lostineu.eu,oggitreviso.it,speisekarte.de,mixed.de##+js(nostif, Delay)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16840
+haloursynow.pl##+js(no-fetch-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16841
+@@||eglos.pl^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/16846
+@@||darmowe-torenty.pl^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/16845
+@@||torrentcity.pl^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/16843
+archiwumalle.pl##+js(acs, jQuery, ga)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16842
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=ortograf.pl,redirect-rule=google-ima.js
+ortograf.pl##+js(no-fetch-if, ima)
+ortograf.pl##.top-billboard
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/143371
+realpornclips.com##.main > div.container > h2:has-text(Advertisement)
+realpornclips.com##.embed-aside
+realpornclips.com##.main-aside
+||sibergy.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/16872
+nesiaku.my.id##+js(nostif, show)
+nesiaku.my.id##+js(aeld, , show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16873
+short1.site##+js(nostif, Adb)
+short1.site##+js(no-xhr-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16875
+litecoin.host##+js(no-xhr-if, adsbygoogle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16876
+th3tech.net##+js(aopr, adsBlocked)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/143452
+bitchesgirls.com##+js(aeld, load, adSession)
+bitchesgirls.com##.ADDED
+bitchesgirls.com##.a-d-block
+bitchesgirls.com##.also
+bitchesgirls.com##.item:style(height: auto !important;)
+bitchesgirls.com##.item > .post:style(height: auto !important;)
+bitchesgirls.com##div[title="webcam sluts"]
+||bitchesgirls.com/libs/adLoaders/
+
+! https://github.com/uBlockOrigin/uAssets/issues/16880
+allfaucet.xyz##+js(aeld, DOMContentLoaded, adsBlocked)
+allfaucet.xyz##+js(aeld, load, htmls)
+allfaucet.xyz##^script:has-text(htmls)
+allfaucet.xyz##[src^="https://cryptocoinsad.com/ads/"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/118pxa1/
+my-subs.co##+js(set, timeLeft, 0)
+my-subs.co###countdown
+
+! https://github.com/uBlockOrigin/uAssets/issues/16887
+tvepg.eu##+js(nostif, alert)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16888
+||googletagmanager.com/gtm.js$important,domain=plaion.com
+plaion.com##+js(set, Cookiebot, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/143619
+efukt.com##.efi_container
+efukt.com##.efi_enabled:style(overflow: auto !important; height: auto !important; width: auto !important; position: static !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/143624 - not always
+asianmilfhub.com###custom_html-2
+||asianmilfhub.com/wp-content/uploads/ad/
+/vast/?zid=$xhr,3p
+
+! deblocker sites
+hayatarehber.com,novinhastop.com##+js(acs, eval, replace)
+afronudes.com,allcelebspics.com,alttyab.net,an1me.*,androjungle.com,anonym-ads.xyz,arkadmin.fr,azoranov.com,bacasitus.com,barranquillaestereo.com,bazaarwedding.com,blogbhaiya.com,brasilsimulatormods.com,cambrevenements.com,cartoonstvonline.com,codecap.org,comparili.net,deephub.cyou,descargasalinstante.com,diaobe.net,filegajah.com,filmestorrent.tv,flicksnchill.com,franceprefecture.fr,freecricket.net,gcpainters.com,germanvibes.org,getmaths.co.uk,gewinnspiele-markt.com,hamzag.com,hannibalfm.net,hornyconfessions.com,ilcamminodiluce.it,joguinhosgratis.com,joziporn.com,justpaste.top,katoikos.world,kozyrom.com,kumiste.com,mbc2.live,mctechsolutions.in,measam.com,medibok.se,megafire.net,mirrorpoi.com,mirrorpoi.my.id,mockuphunts.com,moroccantea.uk,mortaltech.com,multivideodownloader.com,nauci-engleski.com,nauci-njemacki.com,nekopoi.my.id,nuketree.com,nullpro.tech,pa1n.xyz,papafoot.*,playertv.net,pornhubtrending.net,premiumthemes.shop,programsolve.com,radio-deejay.com,ranaaclanhungary.com,rasoi.me,riprendiamocicatania.com,seriesperu.com,shmapp.ca,shorthttp.online,sub2unlocker.com,romviet.com,saygrupmekanik.com,skillmineopportunities.com,teczpert.com,totalsportek.app,tromcap.com,tv0800.com,tv3monde.com,uiiumovies.net,ustrendynews.com,vidoza.xyz,watchnow.fun,weashare.com,webdexscans.com,xvideostrending.org,yelitzonpc.com,ymknow.xyz,zimabadko.com##+js(noeval-if, adsBlocked)
+jipinsoft.com,surfsees.com,truthnews.de##+js(nostif, show)
+smgplaza.com##+js(aost, document.addEventListener, litespeed)
+titbytz.tk##+js(aeld, DOMContentLoaded, adsBlocked)
+flicksnchill.com##.video-block-happy:upward(1)
+||allcelebspics.com/assets/popunder.js
+||smgplaza.com/wp-content/litespeed/js/e3dbdef0d73bbe66ccfb299d21f976dd.js
+! https://github.com/AdguardTeam/AdguardFilters/issues/152764
+androjungle.com##.ads
+! https://github.com/uBlockOrigin/uAssets/issues/15375
+! https://github.com/uBlockOrigin/uAssets/issues/18759
+@@||an1me.*^$ghide
+an1me.*##+js(aost, document.getElementsByTagName, adsBlocked)
+an1me.*##ins.adsbygoogle
+
+! https://www.rookieroad.com/baseball/what-is/ ads placeholders
+! https://github.com/uBlockOrigin/uAssets/issues/19817
+rookieroad.com###main > div[class] > div div[class]:matches-css-before(content: "advertisement"):upward(#main > div[class] > div)
+rookieroad.com###right-col
+
+! https://github.com/uBlockOrigin/uAssets/issues/16894
+@@||coinhub.wiki^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/16903
+*$image,redirect-rule=1x1.gif,domain=xpornium.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/16906
+! https://github.com/uBlockOrigin/uAssets/issues/20158
+! https://github.com/uBlockOrigin/uAssets/issues/20164
+king-ptcs.com,naijafav.top,ourcoincash.xyz,sh.techsamir.com##+js(aeld, load, htmls)
+king-ptcs.com,naijafav.top,ourcoincash.xyz,sh.techsamir.com##^script:has-text(/htmls|google_ad_client/)
+king-ptcs.com,naijafav.top,ourcoincash.xyz,sh.techsamir.com##+js(acs, addEventListener, google_ad_client)
+king-ptcs.com###p7a1:remove()
+||regie-cpc.com^$3p
+
+! 123moviehub. org/ 123moviesfree. ma ads
+*$script,3p,domain=imwatchingmovies.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/16916
+farsinama.com##+js(nostif, show)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11aa8qy/
+cryptonationfaucet.com##+js(acs, document.createElement, adsBlocked)
+cryptonationfaucet.com##+js(aopr, adsBlocked)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/143849
+xnotx.com###sidebar > div.box:first-child
+xnotx.com###sidebar > noindex
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/143828
+ahegaoporn.net##+js(aopr, loadTool)
+! abellalist.com,jennylist.xyz
+/t63fd79f7055.js
+! ahegaoporn.net,lolhentai.net
+/tceb29242cf7.js
+! hentaipins.com,super-games.cz
+/ta22f6590aec.js
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/143845
+pornstash.in##+js(aopr, b2a)
+pornstash.in##+js(aopw, atOptions)
+
+! regenerator adservers ex. asian-sexy.com
+://cdn.*.com/renderer/renderer.js|$script,3p
+://loc.*.com/renderer/renderer.js|$script,3p
+
+! awe adservers ex. sexwebvideo.net,scrolller.com
+&subAffId={SUBAFFID}^$frame,script,3p
+&subAffId=tall^$frame,script,3p
+
+! japan-whores.com ad frame
+||javhd.com/*/300x250.html?
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11ax7d3/
+shopforex.online##+js(aeld, load, Ads)
+shopforex.online##+js(acs, document.querySelector, popUp)
+shopforex.online##+js(nowoif)
+shopforex.online###devozon-snp:style(display: block !important;)
+shopforex.online###devozon-wait1
+
+! https://github.com/uBlockOrigin/uAssets/issues/16948
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=danet.vn,redirect-rule=google-ima.js
+danet.vn###adsButton
+
+! https://github.com/uBlockOrigin/uAssets/issues/16945
+*$script,3p,denyallow=cloudflare.com,domain=putlockers.li
+
+! https://github.com/uBlockOrigin/uAssets/issues/16957
+24sport.stream##+js(nostif, ads)
+||24sport.stream/public/js/dublocker.js$script
+
+! adblocktape.online popup
+adblocktape.*##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/144160
+173.249.8.3,188.166.182.72##+js(nowoif)
+173.249.8.3##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16963
+novinky.cz##^script:has-text(Math)
+!#if !env_firefox
+novinky.cz##+js(aost, HTMLIFrameElement, inlineScript)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/16969
+worldofiptv.com##+js(nostif, show)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/143965
+stratford-herald.com#@#[id^="google_ads_iframe"]
+stratford-herald.com##.MPU
+
+! https://github.com/uBlockOrigin/uAssets/issues/16982
+tuxnews.it##+js(aost, parseInt, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16986
+pokemundo.com##+js(noeval-if, show)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11e3j9o/
+griddy.click##+js(acs, document.createElement, fakeAd)
+
+! https://github.com/easylist/easylist/issues/15018
+accesousa.com,bellinghamherald.com,bnd.com,bradenton.com,centredaily.com,charlotteobserver.com,elnuevoherald.com,flkeysnews.com,fresnobee.com,heraldonline.com,heraldsun.com,idahostatesman.com,islandpacket.com,kansas.com,kansascity.com,kentucky.com,ledger-enquirer.com,macon.com,mahoningmatters.com,mcclatchydc.com,mercedsunstar.com,miamiherald.com,modbee.com,myrtlebeachonline.com,newsobserver.com,sacbee.com,sanluisobispo.com,star-telegram.com,sunherald.com,thenewstribune.com,theolympian.com,thestate.com,tri-cityherald.com###mastheadVueContainer > .zone
+accesousa.com,bellinghamherald.com,bnd.com,bradenton.com,centredaily.com,charlotteobserver.com,elnuevoherald.com,flkeysnews.com,fresnobee.com,heraldonline.com,heraldsun.com,idahostatesman.com,islandpacket.com,kansas.com,kansascity.com,kentucky.com,ledger-enquirer.com,macon.com,mahoningmatters.com,mcclatchydc.com,mercedsunstar.com,miamiherald.com,modbee.com,myrtlebeachonline.com,newsobserver.com,sacbee.com,sanluisobispo.com,star-telegram.com,sunherald.com,thenewstribune.com,theolympian.com,thestate.com,tri-cityherald.com##article .combo.zone
+accesousa.com,bellinghamherald.com,bnd.com,bradenton.com,centredaily.com,charlotteobserver.com,elnuevoherald.com,flkeysnews.com,fresnobee.com,heraldonline.com,heraldsun.com,idahostatesman.com,islandpacket.com,kansas.com,kansascity.com,kentucky.com,ledger-enquirer.com,macon.com,mahoningmatters.com,mcclatchydc.com,mercedsunstar.com,miamiherald.com,modbee.com,myrtlebeachonline.com,newsobserver.com,sacbee.com,sanluisobispo.com,star-telegram.com,sunherald.com,thenewstribune.com,theolympian.com,thestate.com,tri-cityherald.com##article [id^="zone-el"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/17001 popup
+futbollibrehd.com##+js(nostif, adb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13729
+! https://github.com/uBlockOrigin/uAssets/issues/14499
+! https://github.com/uBlockOrigin/uAssets/issues/14509
+! https://github.com/uBlockOrigin/uAssets/issues/14635
+! https://github.com/uBlockOrigin/uAssets/issues/16792
+! https://github.com/uBlockOrigin/uAssets/issues/17030
+! https://github.com/uBlockOrigin/uAssets/issues/17113
+! https://github.com/AdguardTeam/AdguardFilters/issues/50762
+! https://github.com/uBlockOrigin/uAssets/issues/18060
+! https://github.com/uBlockOrigin/uAssets/issues/18100
+lightnovelpub.*,lightnovelspot.com,lightnovelworld.com,novelpub.com,webnovelpub.com##+js(nostif, /appendChild|e\("/)
+@@*$ghide,domain=lightnovelpub.*|lightnovelworld.com|novelpub.com|webnovelpub.com
+lightnovelpub.com#@#.adsbox
+lightnovelpub.com#@#.lnadcontainer
+lightnovelpub.com##div[class] > div[id^="stpd_"] > script:has-text(/initAd|initGpt/):upward(div[class])
+lightnovelpub.com##div[class] > div[id^="gpt_"] > script:has-text(initGpt):upward(div[class])
+lightnovelpub.com##li[class] > div[id^="stpd_"] > script:has-text(stpd):upward(li[class])
+lightnovelpub.*##.sticky-body
+lightnovelpub.*,webnovelpub.com##div[class] > ins.adsbygoogle:upward(div[class])
+lightnovelpub.*,webnovelpub.com##li[class] > ins.adsbygoogle:upward(li[class])
+lightnovelworld.com,novelpub.com##div[class][data-mobid] > div[class="vm-placement"][data-id]:upward(div[class])
+lightnovelpub.com##div[class]:has(> .cnx-player)
+lightnovelspot.com,novelpub.com##*:matches-css-before(content: /Adv/)
+! https://github.com/uBlockOrigin/uAssets/commit/12183be55140fe562ff1f74261dfb91060354b3f
+lightnovelpub.*,lightnovelspot.com,lightnovelworld.com,novelpub.com,webnovelpub.com##+js(nostif, =>)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13805
+! https://www.reddit.com/r/uBlockOrigin/comments/11dh4jm/
+! https://github.com/uBlockOrigin/uAssets/issues/17495
+! https://github.com/uBlockOrigin/uAssets/issues/18522
+! https://www.reddit.com/r/uBlockOrigin/comments/11dh4jm/ads_are_not_blocked_on_tidal_web_browser_details/jp0ed30/
+! listen.tidal.com##+js(json-prune, countryCode, tidalId)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17012
+mail.yahoo.com##+js(nostif, ADB)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17014
+taigoforum.de##+js(acs, $, .show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17018
+myanimelist.net##[data-koukoku-width]:remove()
+
+! winknews.com anti adblock
+! homepage live video breakage
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=winknews.com
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,domain=winknews.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17032
+claimcoins.site##+js(aeld, load, htmls)
+claimcoins.site##^script:has-text(htmls)
+claimcoins.site##div[style]:has(> [id^="adm-container"])
+
+! https://twitter.com/SeriousHoax/status/1632033333394669571
+! https://twitter.com/SeriousHoax/status/1642128335928172550
+buffsports.stream,sportcast.life###pr
+||sportcast.life/img/ali3.png
+
+! https://github.com/uBlockOrigin/uAssets/issues/16998
+disneyplus.com##+js(json-prune, stream.insertion.adSession)
+disneyplus.com##+js(json-prune, stream.insertion.points)
+disneyplus.com##+js(json-prune, stream.insertion)
+disneyplus.com##+js(json-prune, stream.sources.*.insertion)
+disneyplus.com##+js(json-prune, pods.0.ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17042
+gloryshole.com##+js(acs, document.dispatchEvent)
+gloryshole.com###cuerpo > div:has(> ins)
+gloryshole.com##.contenedor_info > div:has(> script)
+gloryshole.com##body > div iframe:upward(body > div)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11inh0i/
+newsrade.com##+js(nostif, adb)
+newsrade.com##^script:has-text(admc)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11itygx/
+hwzone.co.il##+js(nostif, site-access-popup)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17044
+colearn.id##+js(json-prune, *.tanya_video_ads)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/85826
+! https://github.com/AdguardTeam/AdguardFilters/issues/158583
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,domain=gbnews.com
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=gbnews.com
+||dailymail.co.uk/static/mol-adverts/$domain=gbnews.com
+||viafoura.net^$domain=gbnews.com
+||cmp.dmgprivacyint.co.uk/locationjson.html
+
+! https://github.com/easylist/easylist/pull/15121
+pornpics.app##main > .pics:first-child > li
+erodouga.me##main > .vids:first-child > li
+
+! https://github.com/uBlockOrigin/uAssets/issues/17076
+xerifetech.com##+js(nostif, 0x)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17079
+solarchaine.com##+js(aopr, adsBlocked)
+solarchaine.com##.text-left
+solarchaine.com##.banner-inner
+
+! https://github.com/AdguardTeam/AdguardBrowserExtension/issues/2290
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=puzzlegame.com
+
+! https://forums.lanik.us/viewtopic.php?p=165708-falatron-com#p165708
+falatron.com##.consent
+falatron.com##+js(rc, unclickable, , stay)
+falatron.com##*:style(filter: none !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17090
+unofficialtwrp.com##+js(noeval-if, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17104
+! https://www.reddit.com/r/uBlockOrigin/comments/12psurq/
+downloadlyir.com,ipamod.com##+js(noeval-if, deblocker)
+
+! hentaitube1.lol ads,popup
+hentaitube1.lol##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+hentaihd.cyou##+js(nowoif)
+||hentaihd.cyou/assets/js/detect-adblocker.
+||hentaihd.cyou/assets/js/devtools-detector.js
+||i.imgur.com^$domain=hentaitube1.lol
+
+! tokenmix.pro anti adblock
+tokenmix.pro##+js(aopr, adsBlocked)
+tokenmix.pro##^script:has-text(adsBlocked)
+tokenmix.pro##.BannerMain
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11nupxv/
+||cfw.dexscreener.com^
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/138602
+/prebid7.$xhr,redirect-rule=noop.js
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/145279
+||americass.net/interstice-ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/17128
+@@||pagead2.googlesyndication.com^$xhr,domain=acorta-enlace.com|finanzasdomesticas.com
+@@||googleadapis.l.google.com^$xhr,domain=acorta-enlace.com|finanzasdomesticas.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/145267
+hqbang.com##+js(aeld, getexoloader)
+hqbang.com###list_videos_related_videos > center
+hqbang.com##.table
+||hqbang.com/n/
+||hqbang.com/neverb/
+
+! tokyomotion.com ads, popup
+tokyomotion.com##+js(aopw, __aaZoneid)
+tokyomotion.com##.videos > .column:not([id])
+
+! https://github.com/uBlockOrigin/uAssets/issues/17139
+@@||digworm.io^$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/17152
+ak4eg.*##+js(aeld, load, onload)
+ak4eg.*##+js(acs, u_cfg)
+khsm.io##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/145402
+link.idblog.eu.org##+js(ra, href, .atas > a[href*="/redirect"][onclick])
+link.idblog.eu.org##.link1:style(display: block !important;)
+link.idblog.eu.org##.pembukalink1
+link.idblog.eu.org##.pesanlink1
+link.idblog.eu.org##.ngebut
+! ABPindo
+@@||jsdelivr.net/gh/niihen/niihen.github.io/niihen-com/safelink/$script,domain=link.idblog.eu.org|niihen.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17153
+javsubindo.one##+js(nowoif)
+javsubindo.one###btm_banner
+javsubindo.one###close-teaser
+||eatcells.com^$popup,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/7897
+multiup.eu,multiup.io,multiup.org##+js(multiup)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17160
+coursedrive.org##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17166
+zubatecno.com###link1s-snp:style(display: block !important;)
+
+! https://nammakalvi.com/ anti-adb
+nammakalvi.com##+js(nostif, data?)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17166#issuecomment-1467334010
+celinks.net##+js(set, blurred, false)
+welovecrypto.xyz##+js(no-fetch-if, googlesyndication)
+welovecrypto.xyz###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11qt6ii/
+hentaikai.com##+js(acs, document.createElement, script.src)
+hentaikai.com##+js(nowoif)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11r1ai7/
+! https://github.com/uBlockOrigin/uAssets/issues/18446
+! https://github.com/uBlockOrigin/uAssets/issues/18662
+! https://www.reddit.com/r/uBlockOrigin/comments/1615y46/
+! aliexpress.com##div[data-spm="main"] > a[class*="--container--"] span[class*="--ad--"]:upward(div[data-spm="main"] > a[class*="--container--"])
+! aliexpress.com##a.search-card-item[href*="&aem_p4p_detail="]:has-text(/^AD/)
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/2508
+mephimtv.cc##+js(m3u-prune, /#EXT-X-DISCONTINUITY.{1\,100}#EXT-X-DISCONTINUITY/gm, mixed.m3u8)
+
+! dangerousminds.net antiadb
+||htlbid.com/v3/dangerousminds.net/htlbid.js$script,redirect=noopjs,domain=dangerousminds.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/17180
+telesrbija.com##+js(acs, Promise, Adb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17182
+||api.lhkmedia.in^$3p
+
+! javgg.net anti-adb on DL
+javgg.net#@##AD_160
+*$script,3p,denyallow=cloudflare.com|fluidplayer.com|googleapis.com,domain=javgg.club|javgg.net
+javmoon.me##+js(nostif, /debugger|UserCustomPop/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17192
+paketmu.com##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17198
+sinonimos.de##+js(rc, is-hidden)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/145653 Brave detected on Vidstreaming
+rapid-cloud.co##+js(set, navigator.brave, undefined)
+
+! https://github.com/easylist/easylistgermany/issues/261
+praxistipps.focus.de###G32:style(grid-template-rows: unset !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17204
+*$3p,domain=subdl.com,denyallow=challenges.cloudflare.com|crisp.chat|gstatic.com
+
+! anti adb vuinsider. com
+vuinsider.com##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17207
+slideshare.net##+js(set, feature_flags.interstitial_ads_flag, false)
+slideshare.net##+js(set, feature_flags.interstitials_every_four_slides, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11ucmvs/
+coins-town.com##+js(aopw, checkAdsBlocked)
+coins-town.com##+js(no-fetch-if, googlesyndication)
+coins-town.com###claimCoins:style(display: block !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11ucmvs/coinstown_adblock_detected/jcnnnd4/?context
+nerdiess.com##+js(acs, document.createElement, fakeAd)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17220
+c2g.at##+js(nostif, checkAdblockUser)
+c2g.at##+js(set, blurred, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/145868
+fikper.com##+js(nowoif, ?key=)
+fikper.com##+js(nano-sib, downloadToken)
+
+! taoruseitai.com ads, anti-adb - AG out-of-scope
+taoruseitai.com,towelstretches.com##+js(acs, document.addEventListener, google_ad_client)
+taoruseitai.com,towelstretches.com###main-contents > center > div[style^="width: 30"]
+taoruseitai.com,towelstretches.com##.widget_custom_html
+taoruseitai.com,towelstretches.com##a[href^="https://af-next.com/link.php"]
+taoruseitai.com,towelstretches.com##a[href^="https://al.dmm.co.jp/"]
+taoruseitai.com,towelstretches.com##a[href^="https://cl.link-ag.net/click/"]
+taoruseitai.com,towelstretches.com##a[href^="https://hb.afl.rakuten.co.jp"]
+taoruseitai.com,towelstretches.com##a[href^="https://link-a.net/gate.php"]
+taoruseitai.com,towelstretches.com##div[style$="border: 3px solid #EDEDED; border-radius: 10px;"]
+||lh3.googleusercontent.com/9Frr0PsBq8LqcaaRKcS53pSf0E5kGYMqKwG3RPYMJ1kmTTiKnQuzA1XAR3bBMtKVoA$image,domain=taoruseitai.com|towelstretches.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17229
+*$xhr,redirect-rule=nooptext,domain=coins-battle.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11vtqib/ads_blocker_detected/
+cdn.gledaitv.live##+js(noeval-if, String.fromCharCode)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/145897
+pervclips.com##+js(aopr, decodeURI)
+pervclips.com##.thumb_spots
+pervclips.com##.spot-after
+||pervclips.com/tube/js/customscript.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/17245
+||watchx.top^$csp=sandbox allow-forms allow-same-origin allow-scripts allow-modals allow-orientation-lock allow-pointer-lock allow-presentation allow-top-navigation
+watchx.top##div[style="position:fixed;inset:0px;z-index:100000;height:100%;width:100%"]
+! https://watchx.top/v/etyoPYM0tw3x/ anti-adb
+watchx.top##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17249
+||tinypass.com^$script,domain=independent.co.uk
+@@||independent.co.uk/js/third-party/prebid.js$script,1p
+||tinypass.com^$script,domain=the-independent.com
+the-independent.com###top-banner-wrapper
+@@||pub.pixels.ai/wrap-independent-no-prebid-lib.js$script,domain=the-independent.com
+@@||independent.co.uk/*prebid$script,domain=the-independent.com
+@@||permutive.*^$domain=the-independent.com
+@@||googletagmanager.com/gtm.js$script,domain=the-independent.com
+@@||googletagmanager.com/gtag/js$script,domain=the-independent.com
+@@||static.adsafeprotected.com/iasPET.1.js$script,domain=the-independent.com
+@@||the-independent.com/_build/prebid$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11xs9ek/
+ustreasuryyieldcurve.com##+js(set, waldoSlotIds, true)
+
+! xxxtik. com popunder
+xxxtik.com##+js(acs, atob, Uint8Array)
+*$script,domain=xxxtik.com,redirect-rule=noopjs
+
+! anti adb thenightwithoutthedawn.blogspot. com
+thenightwithoutthedawn.blogspot.com##+js(nostif, _0x)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/144202
+||b9dm.us/block-ads/
+||b9good.*/block-ads/
+
+! https://github.com/uBlockOrigin/uAssets/issues/17263
+dktechnicalmate.com##+js(acs, eval, replace)
+dktechnicalmate.com##+js(nano-stb, redirectpage, 13500, 0.001)
+dktechnicalmate.com##+js(nostif, offsetHeight, 100)
+dktechnicalmate.com###countdown
+dktechnicalmate.com###download_link:style(display: block !important;)
+link.smallseostat.com###download1,#download3
+link.smallseostat.com###myBtn:style(display: block !important;)
+*$script,redirect-rule=noopjs,domain=dktechnicalmate.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17262
+megaflash.xyz##+js(aopw, akadb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17166#issuecomment-1479613111
+! https://github.com/uBlockOrigin/uAssets/issues/19515
+businesssoftwarehere.com,goo.st,freevpshere.com,softwaresolutionshere.com##+js(set, adblockstatus, false)
+freevpshere.com,softwaresolutionshere.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17166#issuecomment-1479772375
+shortzu.icu##+js(set, blurred, false)
+battleroyal.online###link1s-snp:style(display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17166#issuecomment-1479792886
+bitcosite.com,bitzite.com##+js(no-fetch-if, googlesyndication)
+bitcosite.com##+js(acs, eval, replace)
+bitcosite.com##+js(set, blurred, false)
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6595762
+@@||googletagmanager.com/gtm.js$domain=go.bitcosite.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17166#issuecomment-1480655452
+||clixtoyou.com/*.gif$image
+cryptosh.pro##^script:has-text(htmls)
+cryptosh.pro##+js(aeld, load, htmls)
+cryptosh.pro##+js(nowoif)
+cryptosh.pro##+js(set, blurred, false)
+cryptosh.pro##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/17166#issuecomment-1480658834
+sigmalinks.in##+js(set, blurred, false)
+ffworld.xyz,techincubator.in##button.tp-btn:style(display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17166#issuecomment-1480664548
+flyad.vip##+js(set, go_popup, {})
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/152657
+mixrootmod.com##+js(no-fetch-if, /adoto|googlesyndication/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17166#issuecomment-1480666359
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-8046361
+networkhint.com##+js(set, detectAdBlock, noopFunc)
+networkhint.com##.g-recaptcha:upward(form > div):style(display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17267
+cryptoearnfaucet.com,coinsrev.com##+js(aeld, load, htmls)
+cryptoearnfaucet.com,coinsrev.com##^script:has-text(htmls)
+coinsrev.com##+js(noeval-if, /chp_?ad/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17269
+*$script,xhr,redirect-rule=noopjs,domain=tron-free.com
+||tron-free.com/banner/$image,1p
+tron-free.com##^script:has-text(htmls)
+!#if !cap_html_filtering
+tron-free.com##+js(rmnt, script, htmls)
+!#endif
+
+! cyberleaks. su popups
+cyberleaks.*##+js(nowoif)
+
+! opvid. org popups
+opvid.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3787
+!#if !cap_html_filtering
+gamereactor.*##+js(set, adblockEnabled, noopFunc)
+!#endif
+
+! glosbe.com PH
+glosbe.com###topTrufleContainer
+glosbe.com##.right-sidebar-trufle-container
+glosbe.com##.dictionary-grid:matches-media((min-width: 1280px)):style(grid-template-columns: minmax(180px,250px) minmax(400px,736px) 0 !important; grid-template-rows: 0 auto !important;)
+glosbe.com##.dictionary-grid:matches-media((min-width: 1024px)):style(grid-template-columns: minmax(180px,200px) minmax(400px,736px) 0 !important; grid-template-rows: 0 auto !important;)
+glosbe.com##.dictionary-grid:matches-media((min-width: 768px)):style(grid-template-rows: 0 auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17279
+zertalious.xyz##+js(aopr, detectAdblock)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/161822
+@@||ganohr.net^$ghide
+@@||fundingchoicesmessages.google.com^$script,xhr,3p,domain=ganohr.net
+@@||clarity.ms/tag/$domain=ganohr.net
+
+! https://alternativeto.net/software/db-fiddle/
+! https://github.com/uBlockOrigin/uAssets/issues/20358
+alternativeto.net##div[style]:has(> div[class^="Adsense"])
+alternativeto.net##li[data-testid]:has([href^="/outgoing/"])
+
+! helmiau. com anti adb
+@@||helmiau.com^$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/146464
+cdnjavhd.online##+js(acs, Math.floor, urls.length)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/146477
+mycloud4.online##+js(nowoif)
+
+! https://explorecams.com/photos/model/dmc-fh8 anti-adb
+explorecams.com##+js(aeld, np.detect)
+explorecams.com##+js(no-fetch-if, ad-delivery)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17303
+*$media,3p,domain=hitbdsm.com,redirect=noopmp3-0.1s
+hitbdsm.com##[href*="aff_ad"]
+
+! https://forums.lanik.us/viewtopic.php?t=48050-tv-lewebde-com
+lewebde.com##+js(noeval-if, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17327
+earncrypto.co.in##+js(no-xhr-if, adx)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17335
+zona-leros.com##+js(nostif, Adb)
+zona-leros.com##.store_fondo
+
+! https://www.reddit.com/r/uBlockOrigin/comments/126fnms/
+||swarmmanga.com/*/custom.js
+swarmmanga.com##.c-sidebar
+
+! https://github.com/uBlockOrigin/uAssets/issues/17344
+*$script,domain=terafly.me,redirect-rule=noopjs
+terafly.me##+js(aopr, adsBlocked)
+||terafly.me^$csp=style-src *
+terafly.me##.qc-cmp2-container
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6710297
+terafly.me##+js(nostif, checkAdblockUser)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17351
+akw.to##+js(aeld, load, onload)
+akw.to##+js(acs, eval, replace)
+
+! BetterJsPop-sites
+! https://javboys .com popup
+! http://www.filmeserialeonline.org/episodul/the-invitation
+cdngee.com,fshd3.club,hd-streaming.net,player.javboys.cam,streaming-french.org##+js(aopr, BetterJsPop)
+! https://www.reddit.com/r/uBlockOrigin/comments/174s805/
+zedporn.com##+js(aopw, BetterJsPop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17357
+! https://github.com/uBlockOrigin/uAssets/issues/21528
+hiraethtranslation.com##+js(no-xhr-if, /ad)
+hiraethtranslation.com##+js(acs, decodeURIComponent, String.fromCharCode)
+hiraethtranslation.com##.c-sidebar
+hiraethtranslation.com##+js(rmnt, script, deblocker)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/126oozp/website_detected/
+sideplusleaks.com##+js(noeval-if, adb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17365
+entutes.com##+js(nostif, _0x)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17377
+! https://github.com/uBlockOrigin/uAssets/issues/20970
+shineads.*##+js(acs, document.readyState, adsBlocked)
+shineads.*##.entry-header
+shineads.*##[href="https://www.shineads.in/hostarmada"]
+shineads.*##[href="https://app.toolsmeen.com/signup/semrush"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/146997
+globlenews.in##+js(no-fetch-if, googlesyndication)
+#@#.banner-ads
+#@#.banner_ads
+#@#.ad-zone
+#@#.ad-space
+##.banner-ads:not(.textads)
+##.banner_ads:not(.textads)
+##.ad-zone:not(.textads)
+##.ad-space:not(.textads):not(.adbox)
+
+! CHP v3.9.2+
+110tutorials.com,247beatz.ng,247footballnow.com,24pdd.*,27-sidefire-blog.com,2best.club,3dyasan.com,3fnews.com,4drumkits.com,4fingermusic.com,4gousya.net,4horlover.com,4spaces.org,519.best,51sec.org,60fps.xyz,80-talet.se,9alami.info,9ketsuki.info##+js(noeval-if, /chp_?ad/)
+a2zbookmark.com,aboedman.com,addtobucketlist.com,adisann.com,adminreboot.com,adsurfle.com,adsy.pw,advertafrica.net,africue.com,aghasolution.com,aitoolsfree.org,aitohuman.org,aiyumangascanlation.com,alanyapower.com,albania.co.il,albinofamily.com,allcalidad.app,allcelebritywiki.com,allcivilstandard.com,allcivilstandard.com,alliptvlinks.com,alliptvs.com,almofed.com,altcryp.com,altselection.com,altyazitube18.pw,altyazitube19.pw,amnaymag.com,amritadrino.com,amtil.com.au,andani.net,androidadult.com,angolopsicologia.com,anime4mega.net,anime4mega-descargas.net,anime7.download,anime-torrent.com,animecenterbr.com,animetwixtor.com,animexin.vip,anmup.com.np,anodee.com,anonyviet.com,anothergraphic.org,aoseugosto.com,apenasmaisumyaoi.com,apkdink.com,apostoliclive.com,aprenderquechua.com,arabstd.com,articlebase.pk,articlemela.xyz,articlesmania.me,articlespost.xyz,ascalonscans.com,asiansexdiarys.com,askcerebrum.com,askushowto.com,aspirapolveremigliori.it,astroages.com,atgstudy.com,atlantisscan.com,atozmovies.xyz,audiobookexchangeplace.com,audiotools.*,audiotrip.org,auroraconeyisland.xyz,autodime.com,autoindustry.ro,automat.systems,autosport.*,avitter.net,ayatoon.com,ayuka.link,azamericasat.net,azdly.com,azlyrics.online,azores.co.il,azrom.net##+js(noeval-if, /chp_?ad/)
+babehubonlyfansly.com,backyardpapa.com,baixedetudo.com.br,balkanteka.net,bandstand.ph,batman.city,bcanepaltu.com,bcanotesnepal.com,bcsnoticias.mx,bdokan.com,bdsomadhan.com,bdstarshop.com,beaddiagrams.com,bearchasingart.com,beatree.cn,bedavahesap.org,beisbolinvernal.com,bengalxpress.in,bestcrack.xyz,bettingexchange.it,bi-girl.net,bibliotecadecorte.com,bibliotecahermetica.com.br,bidersnotu.com,bif24.pl,biftutech.com,bigdata-social.com,bimshares.com,bishalghale.com.np,bitcotasks.com,bitlikutu.com,bittukitech.in,bitview.cloud,bitzite.com,blog.motionisland.com,blog24.me,blogk.com,bloooog.it,bloxyscripts.com,bluebuddies.com,bluecoreinside.com,blurayufr.me,blurayufr.xyz,bogowieslowianscy.pl,bookpraiser.com,boxaoffrir.com,boredgiant.com,botinnifit.com,boundlessnecromancer.com,boxingvideo.org,boxofficebusiness.in,boystube.link,braziliannr.com,brian70.tw,bright-b.com,brightpets.org,broadbottomvillage.co.uk,brokensilenze.net,brulosophy.com,brushednickel.biz,bsmaurya.com,bugswave.com,businesstrend.jp,byswiizen.fr##+js(noeval-if, /chp_?ad/)
+cafenau.com,calculascendant.com,calmarkcovers.com,calvyn.com,camcam.cc,camnang24h.net,canadanouvelles.com,canaltdt.es,captionpost.com,carryflix.icu,cashkar.in,casperhd.com,catatanonline.com,cavalierstream.fr,celebritablog.com,celestialtributesonline.com,cembarut.com.tr,certificateland.com,chachocool.com,chakrirkhabar247.in,championpeoples.com,change-ta-vie-coaching.com,charlottepilgrimagetour.com,charpatra.com,chart.services,chataigpt.org,chatgbt.one,chatgptfree.ai,cheatermad.com,cheese-cake.net,check-imei.info,chieflyoffer.com,chihouban.com,chineseanime.org,christiantrendy.com,cimbusinessevents.com.au,cinema-sketch.com,cienagamagdalena.com,cizzyscripts.com,claimclicks.com,claydscap.com,clockskin.us,cloud9obits.com,cocorip.net,code-source.net,codeandkey.com,codeastro.com,codeitworld.com,codewebit.top,coinadpro.club,coingraph.us,cola16.app,coleccionmovie.com,colliersnews.com,comeletspray.com,cometogliere.com,comoinstalar.me,compota-soft.work,conoscereilrischioclinico.it,consigliatodanoi.it,constructionplacement.org,correction-livre-scolaire.fr,coursesdaddy.com,crackcodes.in,crackthemes.com,crackwatch.eu,craigretailers.co.uk,crazydeals.live,crazyashwin.com,creebhills.com,creepyscans.com,cronachesalerno.it,cryptomanga.online,cryptonor.xyz,cryptonworld.space,cryptowidgets.net,cta-fansite.com,culture-informatique.net,cyprus.co.il##+js(noeval-if, /chp_?ad/)
+daemon-hentai.com,daij1n.info,dailytechupdates.in,dailyweb.pl,davidsonbuilders.com,dabangbastar.com,daybuy.tw,deathonnews.com,dejongeturken.com,delvein.tech,demonictl.com,demonyslowianskie.pl,depressionhurts.us,derusblog.com,descargaranimes.com,descargaseriestv.com,design4months.com,desirenovel.com,desktopsolution.org,destakenewsgospel.com,destinationsjourney.com,detikbangka.com,dev-dark-blog.pantheonsite.io,devilreturnstoschooldays.online,devopslanka.com,dewfuneralhomenews.com,dhankasamaj.com,diamondfansub.com,diencobacninh.com,digitalseoninja.com,dignityobituary.com,diplomaexamcorner.com,dipprofit.com,dir-tech.com,diskizone.com,diversanews.com,djqunjab.in,djsofchhattisgarh.in,dma-upd.org,dominican-republic.co.il,donghuaworld.com,doublemindtech.com,downloadbatch.me,downloader.is,downloadtanku.org,dpscomputing.com,dubaitime.net##+js(noeval-if, /chp_?ad/)
+e-kakoh.com,earlymemorials.com,earninginwork.com,easyjapanesee.com,easytodoit.com,ecommercewebsite.store,eczpastpapers.net,editions-actu.org,editorsadda.com,edivaldobrito.com.br,edjerba.com,edukamer.info,egram.com.ng,einewelteinezukunft.de,elcriticodelatele.com,elcultura.pl,elearning-cpge.com,eleceedmanhwa.me,embraceinnerchaos.com,emperorscan.com,empleo.com.uy,encuentratutarea.com,encurtareidog.top,eng-news.com,english-topics.com,english101.co.za,entenpost.com,epicpdf.com,epsilonakdemy.com,eramuslim.com,erreguete.gal,ervik.as,esportsmonk.com,esportsnext.com,et-invest.de,eternalhonoring.com,ethiopia.co.il,everydayhomeandgarden.com,eventiavversinews.*,evlenmekisteyenbayanlar.net,ewybory.eu,exam-results.in,exeking.top,expertskeys.com##+js(noeval-if, /chp_?ad/)
+f1gplive.xyz,faaduindia.com,fapfapgames.com,fapkingsxxx.com,faqwiki.us,farolilloteam.es,fattelodasolo.it,fchopin.net,felicetommasino.com,femisoku.net,ferdroid.net,fessesdenfer.com,feyorra.top,fhedits.in,fhmemorial.com,filmypoints.in,finalnews24.com,financeandinsurance.xyz,financeyogi.net,financid.com,finclub.in,findheman.com,findnewjobz.com,fine-wings.com,firescans.xyz,fitnessscenz.com,fitnesshealtharticles.com,flashssh.net,flexamens.com,flixhub.*,flowsnet.com,fmhublog.xyz,folkmord.se,foodgustoso.it,foodiesjoy.com,footoks.online,footymercato.com,forex-yours.com,foxaholic.com,francaisfacile.net,free.7hd.club,freebiesmockup.com,freecoursesonline.me,freedom3d.art,freefiremaxofficial.com,freefireupdate.com,freegetcoins.com,freelancerartistry.com,freemedicalbooks.org,freemovies-download.com,freeoseocheck.com,freepasses.org,freetubetv.net,freescorespiano.com,freevstplugins.*,freewoodworking.ca,fresherbaba.com,freshersgold.com,frpgods.com,ftuapps.dev,fumettologica.it,funeral-memorial.com,funeralmemorialnews.com,funeralobitsmemorial.com##+js(noeval-if, /chp_?ad/)
+gabrielcoding.com,gadgetxplore.com,gadgetspidy.com,gamenv.net,gamefi-mag.com,gamers-haven.org,games-manuals.com,gamerxyt.com,gamevcore.com,gaminglariat.com,gamingsearchjournal.com,gatagata.net,ganzoscan.com,gazetazachodnia.eu,gdrivemovies.xyz,geekering.com,gemiadamlari.org,gentiluomodigitale.it,gesund-vital.online,getsuicidegirlsfree.com,ghostsfreaks.com,gisvacancy.com,giuseppegravante.com,gkbooks.in,gkgsca.com,gksansar.com,globelempire.com,gnusocial.jp,gogetadoslinks.*,gogetapast.com.br,gogifox.com,gogueducation.com,gokerja.net,golf.rapidmice.com,gomov.bio,goodriviu.com,googlearth.selva.name,gorating.in,gotocam.net,grafikos.cz,grasta.net,grazymag.com,greasygaming.com,greattopten.com,grootnovels.com,groovyfreestuff.com,gsdn.live,gsmfreezone.com,gsmmessages.com,gtavi.pl,gwiazdatalkie.com##+js(noeval-if, /chp_?ad/)
+habuteru.com,hackingwala.com,hackmodsapk.com,hadakanonude.com,hairjob.wpx.jp,happy-otalife.com,harbigol.com,harley.top,haryanaalert.*,haveyaseenjapan.com,hdhub4one.pics,healthbeautybee.com,healthfatal.com,heartrainbowblog.com,hechos.net,hellenism.net,heutewelt.com,hhesse.de,highdefdiscnews.com,hilaw.vn,hindimatrashabd.com,hindishri.com,historichorizons.com,hobbykafe.com,hockeyfantasytools.com,hojii.net,hookupnovel.com,hopsion-consulting.com,hostingreviews24.com,hotspringsofbc.ca,howtoblogformoney.net,hungarianhardstyle.hu,hyderone.com,hypelifemagazine.com,hypesol.com##+js(noeval-if, /chp_?ad/)
+ideatechy.com,idesign.wiki,idevfast.com,idevice.me,idpvn.com,iggtech.com,ignoustudhelp.in,ikarianews.gr,ilbassoadige.it,ilbolerodiravel.org,indiasmagazine.com,inertz.org,infocycles.com,infojabarloker.com,infulo.com,inlovingmemoriesnews.com,inprogrammer.com,inra.bg,insideeducation.co.za,insidememorial.com,insider-gaming.com,insurancepost.xyz,intelligence-console.com,interculturalita.it,inventionsdaily.com,iptvxtreamcodes.com,isabihowto.com.ng,italiadascoprire.net,itdmusic.*,itmaniatv.com,itopmusic.com,itopmusicx.com,itz-fast.com,iwb.jp##+js(noeval-if, /chp_?ad/)
+jackofalltradesmasterofsome.com,jaktsidan.se,japannihon.com,javboys.*,jcutrer.com,jk-market.com,jkhentai.co,jobsbd.xyz,jobslampung.net,josemo.com,jra.jpn.org,jungyun.net,juninhoscripts.com.br,juventusfc.hu##+js(noeval-if, /chp_?ad/)
+kacikcelebrytow.com,kagohara.net,kakiagune.com,kali.wiki,kana-mari-shokudo.com,kanaeblog.net,kandisvarlden.com,karaoke4download.com,kawaguchimaeda.com,kaystls.site,kenkou-maintenance.com,kenta2222.com,keroseed.*,khabarbyte.com,khabardinbhar.net,khohieu.com,kickcharm.com,kinisuru.com,kits4beats.com,kllproject.lv,know-how-tree.com,kobitacocktail.com,kodewebsite.com,kokosovoulje.com,korogashi-san.org,kotanopan.com,krx18.com,kupiiline.com,kurosuen.live##+js(noeval-if, /chp_?ad/)
+labstory.in,ladypopularblog.com,lamorgues.com,lampungkerja.com,lapaginadealberto.com,lascelebrite.com,latinlucha.es,law101.org.za,learnedclub.com,learnodo-newtonic.com,learnospot.com,learnslovak.online,lebois-racing.com,leechyscripts.net,legendaryrttextures.com,lendrive.web.id,letrasgratis.com.ar,levismodding.co.uk,lgcnews.com,lglbmm.com,lheritierblog.com,ligaset.com,limcasports.xyz,limontorrent.com,limontorrents.com,linkskibe.com,linkvoom.com,linux-talks.com,linuxexplain.com,lionsfan.net,literarysomnia.com,littlepandatranslations.com,livefootballempire.com,lk21org.com,loanpapa.in,locurainformaticadigital.com,logofootball.net,lookism.me,lordfix.xyz,lotus-tours.com.hk,ltpcalculator.in,luchaonline.com,luciferdonghua.in,luckymood777.com,lucrebem.com.br,lustesthd.cloud,lustesthd.lat,lycee-maroc.com##+js(noeval-if, /chp_?ad/)
+macrocreator.com,madevarquitectos.com,magesypro.*,maisondeas.com,maketoss.com,makeupguide.net,mamtamusic.in,mangcapquangvnpt.com,mantrazscan.com,marketedgeofficial.com,marketing-business-revenus-internet.fr,marketrevolution.eu,masashi-blog418.com,mastakongo.info,masterpctutoriales.com,maths101.co.za,matshortener.xyz,mcrypto.*,mdn.lol,medeberiya1.com,mediascelebres.com,medytour.com,meilblog.com,memorialnotice.com,mentalhealthcoaching.org,meteoregioneabruzzo.it,mhscans.com,michiganrugcleaning.cleaning,midis.com.ar,millihabercim.com,minddesignclub.org,minecraftwild.com,minhasdelicias.com,mitaku.net,mitsmits.com,mixmods.com.br,mm-scans.org,mmorpgplay.com.br,mockupcity.com,mockupgratis.com,modele-facture.com,modyster.com,monaco.co.il,morinaga-office.net,mosttechs.com,motofan-r.com,moviemod.online,movieping.com,mscdroidlabs.es,msonglyrics.com,mtech4you.com,multimovies.tech,mundovideoshd.com,murtonroofing.com,musicforchoir.com,musictip.net,mxcity.mx,mxpacgroup.com,my-ford-focus.de,myglamwish.com,myicloud.info,mylinkat.com,mylivewallpapers.com,mypace.sasapurin.com,myqqjd.com,mytectutor.com,myunity.dev,myviptuto.com##+js(noeval-if, /chp_?ad/)
+nagpurupdates.com,naijagists.com,naijdate.com,najboljicajevi.com,nakiny.com,nameart.in,nartag.com,naturalmentesalute.org,naturomicsworld.com,naveedplace.com,navinsamachar.com,neet.wasa6.com,neifredomar.com,nekoscans.com,nemumemo.com,nepaljobvacancy.com,neservicee.com,netsentertainment.net,neuna.net,newbookmarkingsite.com,newfreelancespot.com,newlifefuneralhomes.com,news-geinou100.com,newscard24.com,newstechone.com,nghetruyenma.net,nichetechy.com,nin10news.com,nicetube.one,ninjanovel.com,nishankhatri.*,niteshyadav.in,noanyi.com,nobodycancool.com,noblessetranslations.com,nocfsb.com,nocsummer.com.br,nodenspace.com,nopay.info,notandor.cn,note1s.com,notesformsc.org,noteshacker.com,novelbob.com,novelread.co,nsfwr34.com,nswdownload.com,nswrom.com,ntucgm.com,nudeslegion.com,nukedfans.com,nukedpacks.site,nulledmug.com,nyangames.altervista.org,nylonstockingsex.net##+js(noeval-if, /chp_?ad/)
+oberschwaben-tipps.de,obituary-deathnews.com,obituaryupdates.com,odekake-spots.com,officialpanda.com,ofppt.net,ofwork.net,omeuemprego.online,omusubi-56rin.com,onehack.us,onestringlab.com,onlinetechsamadhan.com,only4fans.gay,onneddy.com,onyxfeed.com,oatuu.org,openstartup.tm,opiniones-empresas.com,oracleerpappsguide.com,orenoraresne.com,oromedicine.com,orunk.com,otakuliah.com,oteknologi.com,otokukensaku.jp,ovnihoje.com##+js(noeval-if, /chp_?ad/)
+pabryyt.one,palofw-lab.com,paminy.com,pandaatlanta.com,pantube.top,paolo9785.com,papafoot.click,papahd.club,parisporn.org,parking-map.info,pasokau.com,passionatecarbloggers.com,passportaction.com,pc-guru.it,pc-spiele-wiese.de,pcgamedownload.net,pdfstandards.net,pepar.net,personefamose.it,petitestef.com,pflege-info.net,phonefirmware.com,phoenix-manga.com,physics101.co.za,pilsner.nu,piratemods.com,piximfix.com,plantatreenow.com,plc4free.com,pliroforiki-edu.gr,plutoscripts.xyz,poapan.xyz,pogga.org,ponsel4g.com,poplinks.*,porlalibreportal.com,porninblack.com,pornfeel.com,portaldoaz.org,portaldosreceptores.org,postazap.com,postblog.xyz,posturecorrectorshop-online.com,prague-blog.co.il,praveeneditz.com,premierftp.com,prensa.click,pressemedie.dk,pressurewasherpumpdiagram.com,pricemint.in,primemovies.pl,prismmarketingco.com,proapkdown.com,projuktirkotha.com,promiblogs.de,promimedien.com,promisingapps.com,psicotestuned.info,psychology-spot.com,publicidadtulua.com,pupuweb.com,putlog.net,pynck.com##+js(noeval-if, /chp_?ad/)
+quatvn.club,questionprimordiale.fr,quicktelecast.com##+js(noeval-if, /chp_?ad/)
+radiantsong.com,rabo.no,ralli.ee,ranjeet.best,ranourano.xyz,raulmalea.ro,rbs.ta36.com,rbscripts.net,rctechsworld.in,readfast.in,realfreelancer.com,recipenp.com,redbubbletools.com,redfaucet.site,reeell.com,renierassociatigroup.com,reportbangla.com,reprezentacija.rs,retire49.com,ribbelmonster.de,rightdark-scan.com,rinconpsicologia.com,ritacandida.com,rocdacier.com,rollingwheel.xyz,romaierioggi.it,romaniasoft.ro,romviet.com,roshy.tv,roznamasiasat.com,rseducationinfo.com,rsfinanceinfo.com,rsinsuranceinfo.com,rssoftwareinfo.com,rubyskitchenrecipes.uk,rumanicandle.online,ruyamanga.com,rv-ecommerce.com,ryanmoore.marketing,ryansharich.com##+js(noeval-if, /chp_?ad/)
+s1os.icu,s4msecurity.com,s920221683.online.de,sabishiidesu.com,saekita.com,samanarthishabd.in,samovies.net,samrudhiglobal.com,sanmiguellive.com,sararun.net,satcesc.com,savegame.pro,sawwiz.com,scansatlanticos.com,schadeck.eu,sezia.com,schildempire.com,scholarshiplist.org,sciencebe21.in,scontianastro.com,scrap-blog.com,scripcheck.great-site.net,scriptsomg.com,seirsanduk.com,seogroup.bookmarking.info,seoworld.in,server-tutorials.net,serverxfans.com,sezia.com,shadagetech.com,shanurdu.com,shittokuadult.net,shlly.com,shogaisha-shuro.com,shogaisha-techo.com,shopkensaku.com,shorttrick.in,showrovblog.com,shrinklinker.com,shrinkus.tk,shrivardhantech.in,siirtolayhaber.com,sim-kichi.monster,sivackidrum.net,sk8therapy.fr,skardu.pk,slawoslaw.pl,slowianietworza.pl,smallseotools.ai,smartinhome.pl,soccermlbstream.xyz,socebd.com,sociallyindian.com,softcobra.com,softrop.com,sohohindi.com,sosuroda.pl,south-park-tv.biz,soziologie-politik.de,sp500-up.com,space-faucet.com,spacestation-online.com,spardhanews.com,speak-english.net,speculationis.com,spinoff.link,spiritparting.com,sport-97.com,sportsblend.net,stablediffusionxl.com,stadelahly.net,stahnivideo.cz,stakes100.xyz,starsgtech.in,startupjobsportal.com,stireazilei.eu,stock-rom.com,streamseeds24.com,strefa.biz,studybullet.com,sukuyou.com,sundberg.ws,suneelkevat.com,super-ethanol.com,superpackpormega.com,surgicaltechie.com,swietaslowianskie.pl,sysguides.com,system32.ink##+js(noeval-if, /chp_?ad/)
+ta3arof.net,taariikh.net,tabonitobrasil.tv,taisha-diet.com,talentstareducation.com,tamilanzone.com,tamilhit.tech,tamilnaadi.com,tatsublog.com,tbazzar.com,teachersupdates.net,team-octavi.com,team-rcv.xyz,teamkong.tk,teamupinternational.com,techacrobat.com,techastuces.com,techbytesblog.com,techdriod.com,techedubyte.com,techiepirates.com,techiestalk.in,techkeshri.com,technewslive.org,technewsrooms.com,technicalviral.com,technorj.com,technorozen.com,techoreview.com,techprakash.com,techsbucket.com,techstwo.com,techyhigher.com,techyrick.com,tecnomd.com,tecnoscann.com,tehnar.net.ua,tehnotone.com,telephone-soudan.com,teluguhitsandflops.com,temporeale.info,tenbaiquest.com,tespedia.com,testious.com,thangdangblog.com,thaript.com,the-loop.xyz,theapothecarydiariesmanga.com,thebigblogs.com,thermoprzepisy.pl,theworldobits.com,thebreakermanga.online,thecannalysts.blog,theconomy.me,thegamearcade.com,theinternettaughtme.com,thejoblives.com,theliveupdate.com,thenewsglobe.net,theprofoundreport.com,thesleak.com,thesportsupa.com,thewambugu.com,throwsmallstone.com,titfuckvideos.com,tirumalatirupatiyatra.in,tnewsnetwork.com,today-obits.com,todays-obits.com,toeflgratis.com,tokoasrimotedanpayet.my.id,toorco.com,top10trends.net,topfaucet.us,topsworldnews.com,toptenknowledge.com,torrentdofilmeshd.net,torrentgame.org,totally.top,towerofgod.top,tr3fit.xyz,trendflatt.com,trendohunts.com,trgtkls.org,tukangsapu.net,tunabagel.net,turkeymenus.com,turkishseriestv.net,tutorialesdecalidad.com,tutorialsduniya.com##+js(noeval-if, /chp_?ad/)
+uciteljica.net,udemyking.com,uiuxsource.com,ukigmoch.com,unityassets4free.com,uozzart.com,uploadbank.com,usahealthandlifestyle.com,ustimz.com,ustvgo.live,uur-tech.net##+js(noeval-if, /chp_?ad/)
+vamsivfx.com,vanderheide.online,veganab.co,venus-and-mars.com,vibezhub.com.ng,viciante.com.br,villettt.kitchen,violablu.net,virabux.com,vitadacelebrita.com,vivrebordeaux.fr,vmorecloud.com,voidtruth.com,vstplugin.net##+js(noeval-if, /chp_?ad/)
+warungkomik.com,webacademix.com,webcamfuengirola.com,webcras.com,webhostingoffer.org,websiteglowgh.com,welcometojapan.jp,whats-new.cyou,wheelofgold.com,wholenotism.com,windbreaker.me,wirtualnelegionowo.pl,wirtualnynowydwor.pl,worldgyan18.com,worldtop2.com,worldwidestandard.net,wp.solar,writeprofit.org##+js(noeval-if, /chp_?ad/)
+xiaomitools.com,xmoviepro.xyz,xn--n8jwbyc5ezgnfpeyd3i0a3ow693bw65a.com,xn--nbkw38mlu2a.com##+js(noeval-if, /chp_?ad/)
+yakisurume.com,yakyufan-asobiba.com,yaspage.com,yawm.online,ycongnghe.com,yestech.xyz,ynk-blog.com,youlife24.com,youpit.xyz,your-local-pest-control.com,yourdesignmagazine.com,yuatools.com,yuki0918kw.com,yumekomik.com,yurudori.com##+js(noeval-if, /chp_?ad/)
+zerogptai.org,zien.pl,ziminvestors.com,zippyshare.cloud,zippysharecue.com,znanemediablog.com##+js(noeval-if, /chp_?ad/)
+||cdn.jsdelivr.net/npm/bulma@0.9.3/css/bulma.min.css$css,domain=nishankhatri.*
+emperorscan.com,telephone-soudan.com##+js(aost, document.querySelectorAll, /(?=^(?!.*(https|injectedScript)))/)
+addtobucketlist.com,alternativa104.net,asumesi.com,ayo24.id,barrier-free.net,berich8.com,bitzite.com,branditechture.agency,coinsrev.com,eliobenedetto.it,iamflorianschulze.com,kyoto-kanko.net,oyundunyasi.net,parrocchiapalata.it,photoshopvideotutorial.com,samovies.net##+js(aopr, adsBlocked)
+||partner.pcloud.com/media/banners/*300250.png
+kodewebsite.com##+js(aopr, jQuery.popunder)
+samaysawara.in##+js(acs, document.addEventListener, google_ad_client)
+chineseanime.org###teaser3
+orunk.com###scroll_up + div[id][class]
+toolkitspro.com##+js(aopr, chp_adblock_browser)
+coveredgeekly.com###jeg_off_canvas + div[id][class*=" "]
+##a[id][href="https://chpadblock.com/"][rel^="noopener noreferrer"]
+##a[id][href="https://toolkitspro.com"][rel^="noopener noreferrer"]
+##a[id][href="https://hamrocsit.com"][rel^="noopener noreferrer"]
+###container > #footer ~ #go-to-top + div[id][class*=" "]
+###st-ami + div[id][class*=" "]
+throwsmallstone.com###custom_html-10
+minecraftwild.com###jeg_off_canvas + div[id][class]
+freshersgold.com###main-container + div[id][class]
+webcras.com##body > b + br + div[id][class]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/155801
+! https://www.reddit.com/r/uBlockOrigin/comments/15tedig/block_if_id_size_exceeds_a_limit/
+38.242.194.12,bi-girl.net,blurayufr.xyz,medeberiyaa.com,samuraiscan.org,shinobijawi.id,snbc13.com,teluguflix.*##+js(no-xhr-if, googlesyndication)
+! https://github.com/uBlockOrigin/uAssets/issues/19867
+! https://github.com/uBlockOrigin/uAssets/issues/19868
+! https://github.com/uBlockOrigin/uAssets/issues/19958
+androjungle.com,bookszone.in,drakescans.com,shortix.co##^script:has-text(onerror)
+!#if !cap_html_filtering
+androjungle.com,bookszone.in,drakescans.com,shortix.co##+js(rmnt, script, onerror)
+!#endif
+! https://github.com/uBlockOrigin/uAssets/issues/19425
+iconmonstr.com##+js(aost, document.getElementsByTagName, adsBlocked)
+! https://github.com/AdguardTeam/AdguardFilters/issues/157539
+bitview.cloud##.code-block
+||zacknation.net/*/ads-$image
+! https://github.com/uBlockOrigin/uAssets/issues/20067
+@@||kaystls.site^$ghide
+kaystls.site##+js(nostif, AdDetect)
+kaystls.site##.code-block
+
+! https://github.com/uBlockOrigin/uAssets/issues/20438
+luciferdonghua.in###overplay
+luciferdonghua.in###teaser3
+
+! https://1link.vip/siuphamm fake download and timer
+||1link.vip/download.jpg$image
+1link.vip##[href^="https://www.highrevenuegate.com/"]
+20sfvn.com,hi888.today,oto5s.com,w88.limo##+js(nano-stb, countdown, , 0.02)
+link68.net,traffic123.net##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17386
+@@||assettoworld.com^$script,1p
+assettoworld.com##.nitro-ad
+
+! webcreator-journal.com anti-adb
+webcreator-journal.com##+js(nostif, getComputedStyle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17393
+game-2u.com##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17396
+||movie44.com/*.gif$image
+movie44.com##.imgbanner
+movie44.com##.white_content1
+movie44.com##.ad-overlay-click
+movie44.com##.ad-player-skip
+||postmovie.net/*.mp4$media,redirect=noopmp3-0.1s
+
+! https://github.com/uBlockOrigin/uAssets/issues/17398
+*.gif$image,3p,domain=madoohd.com
+madoohd.com##+js(set, adSettings, [])
+madoohd.com##.above-player-banana
+madoohd.com##.above-player-banana-2
+madoohd.com##.floating-side-bnn
+madoohd.com##.freespin_btn
+
+! https://github.com/uBlockOrigin/uAssets/issues/17410
+mawsueaa.com##+js(aeld, load, onload)
+
+! often seen leftover on Chromium e.g. english-topics.com
+##iframe.lazyloaded[data-src^="https://rcm-fe.amazon-adsystem.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/17409
+||mangabuddy.com/static/js/detect.dev.js$script,1p
+mangabuddy.com###chapter__content > div.container:nth-of-type(3)
+mangabuddy.com###chapter-images div:style(padding: unset !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17444
+minioppai.org##*:remove-class(/[a-z]{30,}/)
+minioppai.org##^style:has-text(adbl)
+*.gif$domain=minioppai.org,image
+minioppai.org##.centered
+minioppai.org###close-teaser
+
+! https://github.com/uBlockOrigin/uAssets/issues/17453
+||cdn.jsdelivr.net/gh/RockBlogger/Anti-AdBlocker$script
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/147556
+programmingeeksclub.com##+js(aeld, DOMContentLoaded, googlesyndication)
+programmingeeksclub.com##+js(no-fetch-if, googlesyndication)
+programmingeeksclub.com##[id^="media_image"]
+programmingeeksclub.com##[href*="clickbank.net"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/17466
+anyporn.com##+js(set, banner_is_blocked, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/12dug8e/
+! antiblock.org bait id
+#@##advert-header
+#@##adSpecial
+#@##adzerk
+#@##buy-sell-ads
+#@##leader_ad
+#@##midadd
+###advert-header:not(:empty)
+###adSpecial:not(:empty)
+###adzerk:not(:empty)
+###buy-sell-ads:not(:empty)
+###leader_ad:not(:empty)
+###midadd:not(:empty)
+nu6i-bg-net.com##+js(nostif, getComputedStyle)
+nu6i-bg-net.com##^script:has-text(antiblock)
+aquarius-horoscopes.com,cancer-horoscopes.com,dubipc.blogspot.com,echoes.gr,engel-horoskop.de,freegames44.com,fuerzasarmadas.eu,gemini-horoscopes.com,jurukunci.net,krebs-horoskop.com,leo-horoscopes.com,maliekrani.com,nklinks.click,ourenseando.es,pisces-horoscopes.com,radio-en-direct.fr,sagittarius-horoscopes.com,scorpio-horoscopes.com,singlehoroskop-loewe.de,skat-karten.de,skorpion-horoskop.com,taurus-horoscopes.com,the1security.com,torrentmovies.online,virgo-horoscopes.com,zonamarela.blogspot.com##+js(nostif, displayMessage, 2000)
+officecoach24.de##+js(acs, document.addEventListener, google_ad_client)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/12e9b7z/
+||pagead2.googlesyndication.com/pagead/imp.gif$image,redirect-rule=1x1.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/17476
+||xgroovy.com/static/js/initsite.min.js
+xgroovy.com##.fluid_html_on_pause
+
+! https://www.reddit.com/r/uBlockOrigin/comments/16ys5xe/
+claimlite.club##+js(nostif, _0x)
+claimlite.club##+js(noeval-if, blocker)
+
+! https://app.axenthost.com/ anti-adb
+*$xhr,redirect-rule=nooptext,domain=axenthost.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/12eadih/
+||accuradio.com/sweeper/json/fetch/$xhr
+||accuradio.com/vast
+||tritondigital.com^$domain=accuradio.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17483
+babelwuxia.com##+js(acs, eval, replace)
+babelwuxia.com###close-teaser
+
+! https://github.com/uBlockOrigin/uAssets/issues/17501
+easymc.io##+js(aeld, np.evtdetect)
+easymc.io##+js(rmnt, script, adb)
+easymc.io##+js(set, nitroAds.abp, true)
+
+! tmh.io ads
+||tmh.io/wp-content/KU.png
+||i.imgur.com/LJBMhkQ.gif$3p
+||i.imgur.com/vPU6ACq.gif$3p
+
+! elcriticodelatele.com,gadgets.es anti-adb
+elcriticodelatele.com,gadgets.es##+js(set, DHAntiAdBlocker, true)
+elcriticodelatele.com,gadgets.es##+js(set, isAdBlockActive, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/12g5jyb/
+rackusreads.com##+js(set, DHAntiAdBlocker, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17522
+*$3p,image,redirect-rule=1x1.gif,domain=elamigos-games.com
+@@||elamigos-games.com^$ghide
+elamigos-games.com##.content_store
+elamigos-games.com##h3.my-4:has-text(/^Advertising/)
+elamigos-games.com##.row > .col-lg-2:first-child:has(> .card > a[href][target="_blank"])
+
+! https://www.reddit.com/r/uBlockOrigin/comments/12gwf5q/
+imgbox.com##+js(acs, navigator, shouldPop)
+imgbox.com##^script:has-text(shouldPop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12214
+*$script,domain=wp.pl|money.pl|o2.pl|parenting.pl|pudelek.pl|autokult.pl|gadzetomania.pl|fotoblogia.pl|komorkomania.pl|polygamia.pl|abczdrowie.pl|benchmark.pl|kafeteria.pl|pysznosci.pl|dobreprogramy.pl|genialne.pl|autocentrum.pl|jastrzabpost.pl|deliciousmagazine.pl,redirect-rule=noopjs
+@@*$ghide,domain=wp.pl|money.pl|o2.pl|parenting.pl|pudelek.pl|autokult.pl|gadzetomania.pl|fotoblogia.pl|komorkomania.pl|polygamia.pl|abczdrowie.pl|benchmark.pl|kafeteria.pl|pysznosci.pl|dobreprogramy.pl|genialne.pl|autocentrum.pl|jastrzabpost.pl|deliciousmagazine.pl
+o2.pl,parenting.pl,polygamia.pl,abczdrowie.pl,kafeteria.pl,autocentrum.pl#@#+js()
+wp.pl,money.pl,o2.pl,parenting.pl,pudelek.pl,autokult.pl,gadzetomania.pl,fotoblogia.pl,komorkomania.pl,polygamia.pl,abczdrowie.pl,benchmark.pl,kafeteria.pl,pysznosci.pl,dobreprogramy.pl,genialne.pl,autocentrum.pl,jastrzabpost.pl,deliciousmagazine.pl#@#.ads
+wp.pl,money.pl,o2.pl,parenting.pl,pudelek.pl,autokult.pl,gadzetomania.pl,fotoblogia.pl,komorkomania.pl,polygamia.pl,abczdrowie.pl,benchmark.pl,kafeteria.pl,pysznosci.pl,dobreprogramy.pl,genialne.pl,autocentrum.pl,jastrzabpost.pl,deliciousmagazine.pl#@#.ad
+wp.pl,money.pl,o2.pl,parenting.pl,pudelek.pl,autokult.pl,gadzetomania.pl,fotoblogia.pl,komorkomania.pl,polygamia.pl,abczdrowie.pl,benchmark.pl,kafeteria.pl,pysznosci.pl,dobreprogramy.pl,genialne.pl,autocentrum.pl,jastrzabpost.pl,deliciousmagazine.pl#@#[class^="advertisement"]
+wp.pl,money.pl,o2.pl,parenting.pl,pudelek.pl,autokult.pl,gadzetomania.pl,fotoblogia.pl,komorkomania.pl,polygamia.pl,abczdrowie.pl,benchmark.pl,kafeteria.pl,pysznosci.pl,dobreprogramy.pl,genialne.pl,autocentrum.pl,jastrzabpost.pl,deliciousmagazine.pl#@#[class^="ad-"]
+wp.pl,money.pl,o2.pl,parenting.pl,pudelek.pl,autokult.pl,gadzetomania.pl,fotoblogia.pl,komorkomania.pl,polygamia.pl,abczdrowie.pl,benchmark.pl,kafeteria.pl,pysznosci.pl,dobreprogramy.pl,genialne.pl,autocentrum.pl,jastrzabpost.pl,deliciousmagazine.pl##body > [id] > [class]:matches-css(z-index:/2147483647/)
+wp.pl,money.pl,o2.pl,parenting.pl,pudelek.pl,autokult.pl,gadzetomania.pl,fotoblogia.pl,komorkomania.pl,polygamia.pl,abczdrowie.pl,benchmark.pl,kafeteria.pl,pysznosci.pl,dobreprogramy.pl,genialne.pl,autocentrum.pl,jastrzabpost.pl,deliciousmagazine.pl##body > div:style(filter: none !important)
+wp.pl,money.pl,o2.pl,parenting.pl,pudelek.pl,autokult.pl,gadzetomania.pl,fotoblogia.pl,komorkomania.pl,polygamia.pl,abczdrowie.pl,benchmark.pl,kafeteria.pl,pysznosci.pl,dobreprogramy.pl,genialne.pl,autocentrum.pl,jastrzabpost.pl,deliciousmagazine.pl##body:style(overflow: auto !important)
+||wp.pl^$frame,domain=wp.pl|money.pl|o2.pl|parenting.pl|pudelek.pl|autokult.pl|gadzetomania.pl|fotoblogia.pl|komorkomania.pl|polygamia.pl|abczdrowie.pl|benchmark.pl|kafeteria.pl|pysznosci.pl|dobreprogramy.pl|genialne.pl|autocentrum.pl|jastrzabpost.pl|deliciousmagazine.pl
+||v.wpimg.pl/*.html$frame
+wp.pl#@#[class^="css-"]
+wp.pl,money.pl,komorkomania.pl,autokult.pl,o2.pl,parenting.pl,abczdrowie.pl#@#body [class]:style(filter: none !important;)
+money.pl#@##app > div[class^="sc-"] > div[class]:not([class*=" "]):has(:scope > div[class*=" "]:only-child > img[src^="https://v.wpimg.pl/"][src$="=="][alt])
+money.pl,wp.pl#@#div[class]:has(>div[class]:first-child:has-text(REKLAMA):not(:has(>*)))
+money.pl,kobieta.wp.pl,gadzetomania.pl,fotoblogia.pl,komorkomania.pl,wiadomosci.wp.pl,tech.wp.pl,dom.wp.pl,facet.wp.pl,film.wp.pl,finanse.wp.pl,gry.wp.pl,gwiazdy.wp.pl,kobieta.wp.pl,ksiazki.wp.pl,kuchnia.wp.pl,moto.wp.pl,opinie.wp.pl,pogoda.wp.pl,teleshow.wp.pl,turystyka.wp.pl,wideo.wp.pl,wawalove.wp.pl,autokult.pl#@#+js(nostif, detected, 300)
+money.pl,kobieta.wp.pl,gadzetomania.pl,fotoblogia.pl,komorkomania.pl,film.wp.pl,gry.wp.pl,horoskop.wp.pl,kobieta.wp.pl,pogoda.wp.pl,tech.wp.pl,tv.wp.pl,twojeip.wp.pl,wiadomosci.wp.pl,wideo.wp.pl,sportowefakty.wp.pl,fitness.wp.pl,wawalove.wp.pl,gwiazdy.wp.pl,teleshow.wp.pl,wp.pl,autokult.pl#@#+js(aost, WP.prebid, onLoad)
+money.pl#@#+js(set, Object.prototype.rekids, undefined)
+money.pl#@#+js(set, Object.prototype.gafSlot, undefined)
+money.pl#@#+js(set, Object.prototype.advViewability, undefined)
+wp.pl#@#+js(aopr, WP.inline)
+wp.pl#@#+js(nostif, /getComputedStyle[\s\S]*?style\.display="none"[\s\S]*?styleBlocked[\s\S]*?detected/)
+www.wp.pl#@#+js(aopr, __headpayload)
+www.wp.pl#@#+js(aost, WP, r https)
+www.wp.pl#@#+js(set, WP.gaf.loadBunch, noopFunc)
+sportowefakty.wp.pl#@#+js(set, Object.prototype.loadBunch, noopFunc)
+sportowefakty.wp.pl#@#+js(aopr, Object.prototype.bodyCode)
+wp.pl,~www.wp.pl,money.pl,pysznosci.pl,pudelek.pl,gadzetomania.pl,fotoblogia.pl,komorkomania.pl,dobreprogramy.pl,autokult.pl,money.pl,genialne.pl##+js(trusted-set-cookie, WPdp, gqcHFMkMCFBXQpBBBpBXUNPRRIQARgHRUtBPCxBS1MAFAEKA1NZRSpSOlNPRRcTRUtSS1MOFVNZVl1BCgVBXUJPRQUQRUtSUEFTUkBUUkJVUUVSGl1BMyFBXQpBBBpBXUBPRRIQARgHRUtBPCxBS1MAFAEKA1NZRSo+RV1BAQFBXUBPRRwRRUtSS1MOE1NZVF1BEwJBXUBUV0FWVkZWVEdVU0AeS1M0NzxBXQpBBBpBXUNPRRIQARgHRUtBPCxBS1MAFAEKA1NZRSpSOlNPRRcTRUtSS1MOFVNZVl1BCgVBXUJPRQUQRUtSUEFTUkBUUkJVUUVSS1MWBlNZVgwe)
+wp.pl,~www.wp.pl,money.pl,pysznosci.pl,pudelek.pl,gadzetomania.pl,fotoblogia.pl,komorkomania.pl,dobreprogramy.pl,autokult.pl,money.pl,genialne.pl##+js(trusted-set-cookie, WPtcs2, CP1ik8AP1ik8ABIACDPLAbEgAAAAAEPgAB5YAABBqhmgAIgAUABcADgAPgAoACoAFwAOQAeACAAEgALoAYABlADQANQAeAA_ACIAEcAJgAUIApACmAFWALgAugBiADMAGgAN4AegA_ACEAENAIgAiQBHACWAE0AJwAUYAwABhwDKAMsAZoA0QBsgDkAHPAO4A7wB7AD4gH2AfsA_wEAgIOAhABEQCKQEWARgAjUBHAEdAJEASUAlIBOwCfgFBgKgAqIBVwCxAFzALrAXkBegC-gGKANEAa8A2gBuADiAHHAOkAdQA7YB7QD7AH_ARMAi8BHsCRAJFASoAlYBMUCZAJlATaAnYBQ8CjwKRAUnApoCmwFPgKhgVIBUoCqgFWAK5AV2AsKBYgFigLKAWiAtQBbEC3ALdAXAAuQBdAC7QF3wLyAvMBfQC_wGCAMGAYaAxABiwDHgGQwMjAySBkwGTgMqAZYAzMBnIDPAGiANGAaaA1MBqsDVwNZAa8A2iBtwG3wN0A3UBwADggHFgOPAcnA5YDlwHPgOsAeKA8eB5IHlAPigfIB8oD6QH1wPtA-6B-wH7gQBAgIBAwCB4EEQIJgQYAg2BCECFAEK4IWghcBDECGcEOQQ6gh4CHoEPwIpgRgAjSBGsCN4EcQI6AR2Aj2BH0CP4EhAJFASNgkgCScEmASZglQCVIEsAJZwS3BLiCXQJdgS-gmACYIEwwJiwTMBM4CagE2IJtgm5BN4E3wJwhBqAAAA.YAAAAAAAAAAA)
+wp.pl,money.pl,o2.pl,parenting.pl,pudelek.pl,autokult.pl,gadzetomania.pl,fotoblogia.pl,komorkomania.pl,polygamia.pl,abczdrowie.pl,open.fm,benchmark.pl,kafeteria.pl,pysznosci.pl,dobreprogramy.pl,genialne.pl,autocentrum.pl,jastrzabpost.pl##:xpath('//*[string-length(@href) > 1600]')
+wp.pl,~www.wp.pl,money.pl,o2.pl,parenting.pl,pudelek.pl,autokult.pl,gadzetomania.pl,fotoblogia.pl,komorkomania.pl,polygamia.pl,abczdrowie.pl,open.fm,benchmark.pl,kafeteria.pl,pysznosci.pl,dobreprogramy.pl,genialne.pl,autocentrum.pl,jastrzabpost.pl##div[style="position: relative; top: 0px;"]:has(> a[target="_blank"])
+wp.pl,~www.wp.pl,money.pl,o2.pl,parenting.pl,pudelek.pl,autokult.pl,gadzetomania.pl,fotoblogia.pl,komorkomania.pl,polygamia.pl,abczdrowie.pl,open.fm,benchmark.pl,kafeteria.pl,pysznosci.pl,dobreprogramy.pl,genialne.pl,autocentrum.pl,jastrzabpost.pl##div[class] > div:not([class], [id]):only-child:has(> div[class]:only-child > div[class]:first-child > a > img[src^="https://v.wpimg.pl/"])
+wp.pl,money.pl,o2.pl,parenting.pl,pudelek.pl,autokult.pl,gadzetomania.pl,fotoblogia.pl,komorkomania.pl,polygamia.pl,abczdrowie.pl,open.fm,benchmark.pl,kafeteria.pl,pysznosci.pl,dobreprogramy.pl,genialne.pl,autocentrum.pl,jastrzabpost.pl##+js(trusted-set-cookie, WPcbadcp, $now$)
+wp.pl,money.pl,o2.pl,pudelek.pl,gadzetomania.pl,polygamia.pl,dobreprogramy.pl,autokult.pl,fotoblogia.pl,komorkomania.pl,abczdrowie.pl,pysznosci.pl,money.pl,genialne.pl,deliciousmagazine.pl,telewizja.jastrzabpost.pl,vibez.pl##div[class]:has(> img[src] + div > style:has-text(flex: 0 0 100%))
+pysznosci.pl,fotoblogia.pl,komorkomania.pl,dobreprogramy.pl,autokult.pl,genialne.pl,gadzetomania.pl,polygamia.pl,telewizja.jastrzabpost.pl##div[class]:has(> style:first-child:has-text(flex: 0 0 100%) + div > div > style:first-child:has-text(flex: 0 0 100%) + div):not(:has([data-st-area^="czyt_dalej"]))
+autokult.pl,komorkomania.pl,fotoblogia.pl,kafeteria.pl##div[class]:has(> div[class]:empty + img[src^="https://i.wpimg.pl/"])
+autokult.pl,money.pl##body > div > div[style^="height: "]:has(> a)
+sportowefakty.wp.pl,kafeteria.pl,fitness.wp.pl##div[class*=" "]:has(> div:first-child > div:first-child:empty):matches-css(z-index: 0):matches-css(position: relative)
+pogoda.wp.pl,sportowefakty.wp.pl,kafeteria.pl,fitness.wp.pl##div[class*=" "]:has(> div:empty):matches-css(z-index: 0):matches-css(position: relative)
+o2.pl,horoskop.wp.pl,pysznosci.pl,www.wp.pl,genialne.pl,abczdrowie.pl,autocentrum.pl,jastrzabpost.pl##div[class]:has(> img[src] ~ div:empty):matches-css(z-index: 0):matches-css(position: relative)
+o2.pl##div[data-testid="homePageView"] > div[style="box-shadow: none;"]:has(> div[data-testid^="ad-placeholder-"])
+o2.pl##section > h2:has-text(Oferty dla Ciebie:)
+o2.pl##div > h6:has-text(Oferty dla Ciebie)
+o2.pl,www.wp.pl##div:is([style="width:100%"], [style="width:100%;height:100%"]):has(> div[class] > img[src^="https://v.wpimg.pl/"][role="presentation"])
+o2.pl##.w-full:has(> div:not([class]) > div > div > a > img[src^="https://v.wpimg.pl/"])
+www.wp.pl###app-content > div > div:not([class]):not([id]):has(> div > div > img[src^="https://v.wpimg.pl/"][role="presentation"])
+www.wp.pl###app-content > div > div > div.relative
+www.wp.pl###app-content > div > div > div[class^="sc-"]:first-child:has(> div > div > img[src^="https://v.wpimg.pl/"][role="presentation"])
+www.wp.pl##div[data-cover="true"] > div > div[style="box-shadow: none;"]
+www.wp.pl##div[data-cover="true"] + div > div:first-child > div:first-child:has(> div:first-child > img[src^="https://v.wpimg.pl/"][role="presentation"])
+www.wp.pl##div > div[class] > img[src^="https://v.wpimg.pl/"][role="presentation"] + div:has(> div + div:empty)
+www.wp.pl##div[style="width: 100%;"]:has(> div > div > div:has-text(OFERTY DLA CIEBIE))
+www.wp.pl###glonews > div[data-st-area] > div > aside > div:first-child > div:has(a[href^="https://www.wp.pl/"] > img[src^="https://v.wpimg.pl/"])
+www.wp.pl###site-header:style(min-height: 0px !important;)
+www.wp.pl##iframe[scrolling="no"][src^="https://v.wpimg.pl/"][frameborder="0"]:upward(1):remove()
+www.wp.pl###undefined-0:not([data-testid="magazineTeaserGoTo"])
+www.wp.pl##.flex-auto > .grid > div:not([class], [id]):has(> div:only-child > div > :is(div[id^="div-gpt-ad-"], img[src^="https://v.wpimg.pl/"][role="presentation"]))
+www.wp.pl##.flex-auto > .grid > div:not([class], [id]):has(> div:only-child > div > div > a#undefined-0)
+www.wp.pl##.flex-auto + .flex-none > div:has(> img[src^="https://v.wpimg.pl/"][role="presentation"] + div:empty)
+www.wp.pl##div[class]:is([style="margin-bottom: 20px;"], [style="margin-bottom:20px"]):has(img[src^="https://v.wpimg.pl/"][role="presentation"])
+www.wp.pl##div[class^="sc-"]:has(> div > div + div > div:empty + div > a#undefined-0)
+www.wp.pl###glonews > [data-st-area] > [data-st-area]:has(> div:first-child:empty + a[id] + div img[src^="https://v.wpimg.pl/"])
+www.wp.pl##div[data-st-area] + div > div > div:has(> div > div > div[id^="div-gpt-ad-"])
+www.wp.pl##aside > div > div[data-st-area="Wiadomosci"] ~ div[class]:has(div[style^="transform:"] > a[style="text-decoration: none;"])
+www.wp.pl,pudelek.pl,o2.pl##body > div[class]:has(> div + div + div > .spinner)
+!#if env_mobile
+www.wp.pl##div[class*=" "]:has(> div > div:first-child > div:first-child > a[href^="https://www.wp.pl/"]:first-child):matches-css(max-width: 420px):remove()
+www.wp.pl###glonews > div > div:has(> div > a[href^="https://www.wp.pl/"] > img[src^="https://v.wpimg.pl/"])
+www.wp.pl##.app-container > div:has(div + img[src^="https://v.wpimg.pl/"] + div:empty)
+www.wp.pl##div:has(> div > div > iframe[scrolling="no"][data-bunch][data-slot]:empty)
+www.wp.pl##div:has(> div:first-child:empty + div:empty)
+money.pl##div:has-text(> style:has-text(flex: 0 0 100%))
+wiadomosci.wp.pl##div:has(> div[data-native-adv] > a[href*="utm_"])
+!#endif
+pilot.wp.pl##div[class]:has(> img[src] + div + style:has-text(flex: 0 0 100%))
+benchmark.pl##style:has-text(right:0;top:0;bottom:0;left:0;margin:auto;position:absolute;):upward(1)
+money.pl##section + div:has(> iframe[src*="promoted"])
+money.pl##main > div[class*="sc-"]:has(> div > a[href^="https://ad.doubleclick.net/"])
+money.pl##main + div aside + div:has(> div > div > div > div > a > img[src^="https://v.wpimg.pl/"])
+money.pl##div[data-breakpoint] > div > div:has(> div > div > div > div > div > a > img[src^="https://v.wpimg.pl/"])
+money.pl##div[data-breakpoint] > div > div > main > div:first-child:has(a[href="/sekcja/kongres-590/"])
+money.pl##div:not([class], [id]):has(> div:not([class], [id]) > div:first-child > div:first-child > iframe[scrolling="no"][frameborder="0"])
+money.pl###app > div:first-child > div:not([class], [id]):has(> div:not([class^="sc-"]))
+money.pl##.adsize_content > div + div:has(> div > a img[loading="lazy"])
+wp.pl,pysznosci.pl,autokult.pl,parenting.pl,o2.pl##div:has(> div > iframe[src^="https://v.wpimg.pl/"][frameborder="0"][scrolling="no"]:first-child)
+genialne.pl,jastrzabpost.pl##div[style="background: #ddd9d9; margin-bottom: 10px; width: 100%;"]
+wiadomosci.wp.pl##div:has(> div:first-child > img[src^="https://v.wpimg.pl/"][height="45"][width="56"])
+pysznosci.pl###bottom-sticky-container > div:matches-attr(class=/^[a-zA-Z]{2}$/):not([id])
+parenting.pl,abczdrowie.pl##main + div:has(> div > a img[src^="https://v.wpimg.pl/"])
+kobieta.wp.pl##div[data-alternative-wrapper]:has(> div > div > a > img[src^="https://v.wpimg.pl/"][style])
+deliciousmagazine.pl##div[style="min-height: 400px; height: auto;"]:has([class^="cdc-products"])
+turystyka.wp.pl##[data-reactid]:has(> div > div > span > div > .border > .container > .w_boxContent > a.w_contentLink[target="_blank"][rel="noreferrer noopener"] > img[width="100%"])
+abczdrowie.pl##*:has(> div:first-child:has(> div:first-child > a > img[src^="https://v.wpimg.pl/"]):not([alt], [id], [width], [data-src]) + div:empty)
+~www.wp.pl,wp.pl,komorkomania.pl,fotoblogia.pl,gadzetomania.pl##div:has(> div:not([class], [id]) > div > a[href*="utm_"])
+! against blinking ads
+kobieta.wp.pl,wiadomosci.wp.pl##header + [data-alternative-wrapper]:has(> div > div > a > img[src^="https://v.wpimg.pl/"])
+! https://github.com/uBlockOrigin/uAssets/issues/16909
+@@||googletagmanager.com/gtm.js$script,domain=abczdrowie.pl
+
+! https://github.com/uBlockOrigin/uAssets/issues/17527
+tralhasvarias.blogspot.com##+js(nano-stb, decodeURL, *)
+tralhasvarias.blogspot.com##+js(nano-sib, updateProgress, *)
+tralhasvarias.blogspot.com##.cellAd
+
+! https://github.com/uBlockOrigin/uAssets/issues/17534
+mag.shock2.info###tie-body:style(background-image: none !important;)
+mag.shock2.info##a[href^="https://www.nintendo.at/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/17537
+theclashify.com##+js(nostif, adblock)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/12j8gmj/
+! https://github.com/uBlockOrigin/uAssets/issues/17660
+! https://github.com/uBlockOrigin/uAssets/issues/17938
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,xhr,domain=wooseotools.com
+@@||static.criteo.net/flash/icon/privacy_small.svg$xhr,domain=wooseotools.com
+@@||static.doubleclick.net/instream/ad_status.js$xhr,domain=wooseotools.com
+wooseotools.com##a[class][href="#"] img
+
+! https://github.com/uBlockOrigin/uAssets/issues/17551
+review.firstround.com##.tp-modal
+review.firstround.com##.tp-active.tp-backdrop
+review.firstround.com##body:style(overflow: auto !important;)
+
+! https://forum.replica-watch.info/ anti-adb (chromium)
+replica-watch.info##+js(aeld, DOMContentLoaded, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17196#issuecomment-1505234094
+||cdn.jsdelivr.net/npm/@goodgamestudios/cxf-banners^$script,3p,domain=goodgamestudios.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17552
+@@||exoclick.com^$xhr,domain=hostingsgratis.com|infomania.space
+
+! https://github.com/uBlockOrigin/uAssets/issues/17561
+aroratr.club##+js(acs, RegExp, googlebot)
+
+! https://github.com/easylist/easylist/issues/14103
+vpntester.org##+js(nostif, /salesPopup|mira-snackbar/)
+||vpntester.org/wp-json/m5/getCoupons
+
+! hdsex.org ad
+hdsex.org##.player__inline
+||hdsex.org/agent.php
+
+! justjavhd.com ad
+justjavhd.com###advads_ad_widget-2
+||justjavhd.com/wp-content/uploads/2017/05/300.gif
+||justjavhd.com/wp-content/uploads/2017/05/728.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/17563
+haber.eskisehirde.net##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17559
+@@||c.amazon-adsystem.com/aax2/apstag.js$script,domain=hints.littlealchemy2.com
+@@||doubleclick.net^$script,xhr,domain=hints.littlealchemy2.com
+@@||googlesyndication.com^$xhr,frame,script,domain=hints.littlealchemy2.com
+hints.littlealchemy2.com###hints-adblock-enabled
+@@||hints.littlealchemy2.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/17577
+@@||eleconomista.es^$ghide
+eleconomista.es##[class^="DisplayAd"]
+||imasdk.googleapis.com/js/sdkloader/*$script,redirect=google-ima.js,domain=juegos.eleconomista.es
+juegos.eleconomista.es##+js(nano-stb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17596
+! https://github.com/uBlockOrigin/uAssets/issues/18796
+layardrama21.*##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17297
+! https://github.com/uBlockOrigin/uAssets/issues/17598
+! https://www.reddit.com/r/uBlockOrigin/comments/184br45/ad_block_detect_pop_up_shows/
+teluguflix.*##+js(rmnt, script, deblocker)
+
+! https://archivebate.com/watch/9213427 popup
+! https://github.com/uBlockOrigin/uAssets/issues/20495
+archivebate.com##+js(acs, decodeURI, decodeURIComponent)
+archivebate.com##+js(no-fetch-if, googlesyndication)
+xpornium.net##+js(acs, document.createElement, window.open)
+
+! https://go.rocklinks.net/ZVedsxL anti-adb
+||cdn.jsdelivr.net/gh/RockBlogger/SpiderAdBlocker
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/145374
+staige.tv##+js(set, Object.prototype.adBlocked, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/145286
+traductionjeux.com##+js(acs, document.getElementById, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17638
+! https://github.com/uBlockOrigin/uAssets/issues/17677
+hacoos.com##^script:has-text(await fetch)
+!#if !cap_html_filtering
+hacoos.com##+js(rmnt, script, await fetch)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/17639
+@@||wotinspector.com^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/17642
+@@||tbdailynews.com^$ghide
+tbdailynews.com##[id^="custom_html"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/12rluor/
+taodung.com##+js(noeval-if, replace)
+
+! https://www.ketubanjiwa.com/2023/04/pes-2021-andri-patch-9-1-update-season-2023.html anti-adb and timer
+garoetpos.com##+js(set, adBlockDetected, noopFunc)
+garoetpos.com###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/143992
+@@||voidforum.com^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/148767
+thefastcode.com##div[id^="placeholder_"]
+thefastcode.com##body[style="margin-top: 90px; margin-bottom: 90px;"]:style(margin-top: 0 !important; margin-bottom: 0 !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17674
+projectlive.info##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17678
+mangaesp.co##+js(acs, akadb)
+mangaesp.co##+js(noeval-if, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17681
+comedyshow.to##+js(aost, document.querySelector, showModal)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/12sr3ts/
+leviathanmanga.com##+js(aopr, popns)
+
+! https://ponselharian.com/R2qDIH popup
+besargaji.com##button[onclick^="window.open"]:remove-attr(onclick)
+besargaji.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17689
+tabele-kalorii.pl##+js(noeval-if, AdBlock)
+tabele-kalorii.pl##.adsense-750-200
+
+! https://www.diendancauduong.com/2020/04/download-archicad-23-full-toc-o-cao.html ads and popup
+diendancauduong.com##+js(aeld, load, popunder)
+diendancauduong.com##+js(aopw, DOMAssistant)
+diendancauduong.com##+js(aopw, rotator)
+
+! hanime.xxx ads and popup
+hanime.xxx##+js(aopw, Script_Manager)
+hanime.xxx##+js(nowoif)
+hanime.xxx###main-sidebar
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/143320
+watchhentai.net#@#.adbox:not(.adbar)
+watchhentai.net##+js(nostif, advanced)
+watchhentai.net##+js(set, detectAdBlock, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/142992
+chrysler-club.net###obalovydiv:style(display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17707
+*$script,domain=herokuapp.com,redirect-rule=noopjs
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/142843
+winscreener.live#@#.ad-block
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/142554
+photooxy.com##+js(acs, $, blockAdBlock)
+photooxy.com##.text-ads
+
+! https://www.reddit.com/r/uBlockOrigin/comments/12v5fmh/
+bakai.org##+js(aeld, load, nextFunction)
+@@||bakai.org^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/17726
+japscan.lol##+js(nostif, detectImgLoad)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/12v8kak/
+mgnetu.com##h4:has-text(VPN)
+mgnetu.com##+js(noeval-if, fairAdblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20849
+bondagevalley.cc##+js(rmnt, script, innerHTML)
+||bondagevalley.cc/upload/photos/kcs.webp
+
+! https://github.com/uBlockOrigin/uAssets/issues/17744
+||aucdn.net/library/*.mp4|$media,domain=clgt.one
+
+! in-jpn.com anti-adb
+in-jpn.com#@#ins.adsbygoogle
+in-jpn.com##.adsbygoogle:style(height: 1px !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/21
+! https://github.com/uBlockOrigin/uAssets/issues/9578
+azaleasdolls.com##td[height="279"]
+azaleasdolls.com##td[width^="34"][height^="29"]
+azaleasdolls.com##td[width="164"][bgcolor="#FCDCE4"]
+azaleasdolls.com##td[width="154"][bgcolor="#FCDCE4"]
+azaleasdolls.com##[class^="style"]:has-text(Advertisement)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/12wa557/
+sparkyexpress.ca##+js(acs, atob, document.createElement)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17756
+digitask.ru##+js(nostif, offsetHeight, 200)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/143461
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=railstream.net,redirect-rule=google-ima.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/17780
+momondo.*##div[data-resultid$="-sponsored"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/17787
+lvturbo.com##+js(set, isadb, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/149355
+! https://github.com/uBlockOrigin/uAssets/issues/17797
+now.gg,now.us##+js(no-fetch-if, googlesyndication)
+@@||dn0qt3r0xannq.cloudfront.net/nowgg-$script,domain=now.*
+@@*$ghide,domain=now.gg|now.us
+||fundingchoicesmessages.google.com/i/pub$script,redirect-rule=noopjs,domain=now.gg|now.us
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/141396
+iptv-list.live##+js(noeval-if, isFairAdBlocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17775
+qcheng.cc##+js(aopr, killAdKiller)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17805
+@@||busuu.com^$ghide
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=www.busuu.com
+@@||pagead2.googlesyndication.com/pagead/managed/js/adsense/*/show_ads_impl$script,domain=www.busuu.com
+*$frame,redirect-rule=noopframe,domain=busuu.com
+||busuu.com/*/busuu_ad$media
+busuu.com##+js(nano-sib, current-=1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17807
+||brightcove.com^$xhr,removeparam=ad_config_id,domain=roosterteeth.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/141071
+crazydl.net##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17811
+darksoftware.net##+js(acs, XV)
+darksoftware.net##+js(acs, $, XF)
+
+! https://github.com/tcptomato/ROad-Block/issues/417
+filme720.com##+js(aopr, doSecondPop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17823
+tempumail.com##+js(nostif, detector)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/149041
+/js/friendbuy.min.js$script,redirect-rule=noopjs,domain=coursera.org
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/149595
+zefoy.com##+js(aost, atob, /zefoy\.com\S+:3:1/)
+zefoy.com##^script[onerror^="$('body')"]
+/^https:\/\/zefoy\.com\/[^\/]+\?/$script,1p,domain=zefoy.com,redirect=noopjs
+/^https:\/\/zefoy\.com(\/[^\/]+){1,}\.js\?/$script,1p,domain=zefoy.com,redirect=noopjs
+@@||zefoy.com/assets/$script,1p
+@@||zefoy.com/cdnjs$script,1p
+zefoy.com##+js(rpnt, script, ({});, ({}); function showHideElements(t\,e){$(t).hide()\,$(e).show()}function disableBtnclc(){let t=document.querySelector(".submit-captcha");t.disabled=!0\,t.innerHTML="Loading..."}function refreshButton(){$(".refresh-capthca-btn").addClass("disabled")}function copyInput(){let t=document.querySelectorAll(".copy-input");t.forEach(t=>{navigator.clipboard.writeText(t.value)})\,Materialize.toast("Copied!"\,2e3)}function imgOnError(){$(".ua-check").html(window.atob("PGRpdiBjbGFzcz0idGV4dC1kYW5nZXIgZm9udC13ZWlnaHQtYm9sZCBoNSBtdC0xIj5DYXB0Y2hhIGltYWdlIGZhaWxlZCB0byBsb2FkLjxicj48YSBvbmNsaWNrPSJsb2NhdGlvbi5yZWxvYWQoKSIgc3R5bGU9ImNvbG9yOiM2MjcwZGE7Y3Vyc29yOnBvaW50ZXIiIGNsYXNzPSJ0ZXh0LWRlY29yYXRpb25lLW5vbmUiPlBsZWFzZSByZWZyZXNoIHRoZSBwYWdlLiA8aSBjbGFzcz0iZmEgZmEtcmVmcmVzaCI+PC9pPjwvYT48L2Rpdj4="))}$(window).on("load"\,function(){$("body").addClass("loaded")})\,window.history.replaceState&&window.history.replaceState(null\,null\,window.location.href)\,$(".remove-spaces").on("input"\,function(){this.value=this.value.replace(/\s/g\,"")})\,$(document).on("click"\,"#toast-container .toast"\,function(){$(this).fadeOut(function(){$(this).remove()})})\,$(".tktemizle").on("input propertychange"\,function(){let t=$(this).val().match("access_token=(.*?)&");t&&$(".tktemizle").val(t[1])})\,$(document).ready(function(){let t=[{button:$(".t-followers-button")\,menu:$(".t-followers-menu")}\,{button:$(".t-hearts-button")\,menu:$(".t-hearts-menu")}\,{button:$(".t-chearts-button")\,menu:$(".t-chearts-menu")}\,{button:$(".t-views-button")\,menu:$(".t-views-menu")}\,{button:$(".t-shares-button")\,menu:$(".t-shares-menu")}\,{button:$(".t-favorites-button")\,menu:$(".t-favorites-menu")}\,{button:$(".t-livestream-button")\,menu:$(".t-livestream-menu")}\,{button:$(".ig-followers-button")\,menu:$(".ig-followers-menu")}\,{button:$(".ig-likes-button")\,menu:$(".ig-likes-menu")}];$.each(t\,function(t\,e){e.button.click(function(){$(".colsmenu").addClass("nonec")\,e.menu.removeClass("nonec")})})});)
+@@||zefoy.com/assets/$script,1p,badfilter
+@@||zefoy.com/assets/accc8f0345e264385213ffe12890ef85.js?$script,1p
+zefoy.com##.vfx-loader
+zefoy.com##^script:has-text(/'.adsbygoogle'|text-danger|warning|Adblock|_0x/)
+!#if !cap_html_filtering
+zefoy.com##+js(rmnt, script, /'.adsbygoogle'|text-danger|warning|Adblock|_0x/)
+!#endif
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/140616
+alludemycourses.com##+js(aeld, DOMContentLoaded, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17838
+unitystr.com##+js(noeval-if, isFairAdBlocker)
+
+! agfy. to & linkshub. to ads
+agfy.to##[id^="advads"]
+agfy.to##.text-html
+linkshub.to##[href*="ad setup "]
+linkshub.to##[href="https://crack-status.com/"]
+||critomiron.click^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/17842
+bellesa.co##[href*="preroll"]:upward(2)
+||res.cloudinary.com/$image,domain=bellesa.co
+
+! https://github.com/uBlockOrigin/uAssets/issues/17850
+@@||assettoworld.b-cdn.net^$script,domain=assettoworld.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17859
+satkurier.pl##+js(no-fetch-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17872
+@@||mailgen.biz^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/17878
+cazztv.xyz##+js(noeval-if, show)
+cazztv.xyz##+js(nowoif)
+clarifystraight.com##+js(nostif, pop)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/139286
+bagpipe.news##+js(acs, document.getElementById, fakeElement)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/133syiy/
+pepperlive.info##+js(noeval-if, fairAdblock)
+pepperlive.info##^script:has-text(decodeURIComponent(escape(r)))
+##[style="position:absolute;top:0;left:0;width: 100%;height: 100%;z-index:2147483647"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/17636#issuecomment-1529158656
+bunkr.la##+js(acs, document.createElement, click)
+*$script,3p,denyallow=cdn.plyr.io|b-cdn.net,domain=bunkr.la
+||bunkr.la/build/lv.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/17893
+androidadult.com##+js(set, chp_adblock_browser, noopFunc)
+adultcomixxx.com##+js(noeval-if, chp_ad)
+adultcomixxx.com##.adsnative
+
+! https://github.com/uBlockOrigin/uAssets/issues/17876
+! https://github.com/uBlockOrigin/uAssets/issues/17899
+! https://github.com/uBlockOrigin/uAssets/issues/19249
+! ||bytro.com^$image,domain=supremacy1914.*
+
+! https://oneupload. to popups
+*$script,3p,denyallow=cloudflare.com|fastly.net|jwpcdn.com,domain=oneupload.to
+
+! https://streamvid. net popups + antiadb
+streamvid.net##+js(nowoif)
+streamvid.net##+js(nano-stb, , , 0.02)
+streamvid.net##+js(set, googleAd, true)
+!#if !cap_html_filtering
+streamvid.net##+js(rmnt, script, adblock)
+!#endif
+streamvid.net##^script:has-text(adblock)
+*$script,3p,denyallow=cloudflare.com,domain=streamvid.net
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/149877
+thichcode.net##+js(set, detectAdBlock, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/138643
+kayifamilytv.com##+js(aeld, DOMContentLoaded, adsBlocked)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/135zbt7/mp3_sites_badware/jindx0e/
+! https://github.com/uBlockOrigin/uAssets/commit/a2463e75852712cec7e7bfee6ed7b20f0f9c4fdb#commitcomment-112054291
+fakaza.*,fakaza2018.com,fakazavibes.com,hiphopde.com##a[data-wpel-link="external"] > *
+fakaza.*,fakaza2018.com,fakazahouse.com,fakazamusic.co,samsonghiphop.org,zamusic.org##[href*="//bit.ly/"], [href*="//thaudray.com/"], [href*="//tinkerwidth.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/17909
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=rtl.be,redirect-rule=google-ima.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/21458
+reshare.pm#@#.showads
+reshare.pm##+js(nowoif)
+@@||a.magsrv.com/ad-provider.js$script,domain=reshare.pm
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/149922
+||googlesyndication.com^$script,redirect-rule=noopjs,domain=flysas.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/137898
+maxt.church##+js(no-xhr-if, googletagmanager)
+
+! https://jbbs.shitaraba.net/bbs/read.cgi/internet/25463/1618326670/151
+klz9.com##.float-ck
+klz9.com##center > center > a[target="_blank"][rel="noopener noreferrer"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/17915
+jockantv.com##+js(aopr, open)
+jockantv.com##+js(ra, onload, [onload^="window.open"])
+jockantv.com###toasts
+jockantv.com##.modal-content
+jockantv.com##.modal.fade.show
+
+! https://www.reddit.com/r/uBlockOrigin/comments/136rbtd/
+aeroxplorer.com##+js(nostif, ads)
+aeroxplorer.com##.iaad
+
+! https://github.com/uBlockOrigin/uAssets/issues/17922
+*$popup,3p,domain=sexvideos.host
+sexvideos.host##+js(nostif, replace)
+sexvideos.host##+js(aost, setTimeout, dontask)
+sexvideos.host##+js(cookie-remover, /vs|to|vs_spon|tgpOut|current_click/)
+sexvideos.host##+js(nowoif)
+sexvideos.host##^script:has-text(/popstate|popMagic/)
+sexvideos.host##.fluid-close[target="_blank"]:remove-attr(target)
+sexvideos.host##.fluid-spots
+sexvideos.host###fluid-onpause_spot
+sexvideos.host###fluid-ontop_spots h3
+sexvideos.host###ontop_spots
+||sexvideos.host/js/trade.js$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/150054
+*$image,1p,redirect-rule=1x1.gif,domain=viralpornhub.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17932
+hygiena.com##+js(aopr, aoAdBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17940
+the-sun.com##.widget-height:style(height: unset !important)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/137a2w5/
+*$script,1p,redirect-rule=noopjs,domain=fresources.tech
+
+! https://github.com/uBlockOrigin/uAssets/issues/17944
+gamemodsbase.com##+js(nostif, show)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/150149
+*$script,3p,redirect-rule=noopjs,domain=vgfplay.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17947
+stagatv.com,stagatvfiles.com##+js(acs, document.documentElement, break;case $.)
+stagatvfiles.com##+js(ra, onclick, button[onclick^="window.open"])
+stagatvfiles.com##+js(nowoif)
+stagatv.com##.ad-banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/17955
+adweek.com##.widget-adweek-sticky-next:has(> .htl-ad-wrapper)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17956
+i2clipart.com###content > div:has(> ins)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17957
+!#if !env_mobile
+lovetoknow.com##.below-ad-wrapper:style(margin-top: 51px !important;)
+!#endif
+lovetoknow.com##.ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/17958
+thedailybeast.com##[class^="HomepageSection"]:style(grid-template-rows: unset !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17939
+parentcircle.com##body:remove-class(top_ads_add)
+parentcircle.com##+js(aeld, scroll, function(e))
+
+! https://khohieu.com/download-game-the-medium/ link manipulation
+||megaurl.win/js/full.js$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/150225
+vtbe.net##+js(nowoif)
+! https://www.reddit.com/r/uBlockOrigin/comments/14mpxza/popups/
+camcaps.*,vidello.net##+js(window.open-defuser)
+! https://www.reddit.com/r/uBlockOrigin/comments/15swkta/ublock_filtersads_blocking_the_playback_of_the/
+camcaps.*##+js(nostif, touchstart)
+vidello.net##^script:has-text(popUnder)
+!#if !cap_html_filtering
+vidello.net##+js(rmnt, script, popUnder)
+!#endif
+||camcaps.*/vsx.js
+! https://www.reddit.com/r/uBlockOrigin/comments/15kopdu/
+@@||tsyndicate.com/api/v1/direct/$xhr,domain=camcaps.io
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/150286
+*$xhr,3p,redirect-rule=nooptext,domain=uservideo.xyz
+
+! https://github.com/uBlockOrigin/uAssets/issues/17972
+moto.it##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17977 popup
+||supercast2.com/z-$script,1p
+##[style="top: 0px; left: 0px; width: 940px; height: 600px; position: absolute; z-index: 2147483647;"]
+! z-popup scripts
+! https://github.com/uBlockOrigin/uAssets/commit/8a92b32ef9b4367f5b908ad4d84a20095d7384e6
+! https://hoca4u.com/z-7115506
+/^https:\/\/[.\w]+\.[a-z]{2,3}\/z-[5-7]\d{6}$/$script,match-case,1p,strict1p
+||hoca4u.com/z-$script,1p
+
+! https://littlebigsnake. com antiadb
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect=google-ima.js,domain=littlebigsnake.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/150379
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=watchtv24.com,redirect-rule=google-ima.js
+watchtv24.com##+js(set, Brid.A9.prototype.backfillAdUnits, [])
+
+! https://h-game18. xyz/living-together-with-fox-demon-viet-hoa/ link manipulation
+h-game18.xyz##+js(aeld, DOMContentLoaded, adlinkfly_url)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17996
+manga4you.net##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17999
+||weatherwx.com/*.php|$xhr,1p
+weatherwx.com##.entry.card div:is(#sidead, .topad):upward(.entry.card)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/13c9rw1/
+@@||canalnatelinhaonline.blogspot.com^$ghide
+canalnatelinhaonline.blogspot.com##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/18001
+eaglesnovel.com##+js(set, pandaAdviewValidate, true)
+eaglesnovel.com##div.novel-ins
+
+! https://github.com/uBlockOrigin/uAssets/issues/18004
+@@||gpucheck.com^$ghide
+gpucheck.com###placeholder_top_middle
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/134975
+10alert.com##+js(nostif, siteAccessFlag)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17731
+! https://github.com/uBlockOrigin/uAssets/issues/17989
+@@||s0.2mdn.net/instream/html5/ima3.js$script,domain=hackedgames.com|jouer.fr|kissinggames.com|pintgames.com|playpink.com|prehackshub.com|playhub.com
+grattez.fr##.footer-megaban
+hackedgames.com,jeux.*,kissinggames.com,pintgames.com,playhub.com,playpink.com,prehackshub.com##.ad-title-megaban
+hackedgames.com,jouer.*,prehackshub.com,pintgames.com##.ad-game-600
+hackedgames.com,jouer.*,prehackshub.com,pintgames.com##.ad-megaban-game-300
+jeux.*###msg_abk
+jeux.*###rev-promoted-games
+jeux.*##.ad-image-pave
+jeux.*##.skyscraper_fixed_right
+jeux.*,playhub.com,playpink.com##.ad-title-pave
+playhub.com##.promo-game
+playhub.com,playpink.com##.ad-title-sky
+||jeux.com/js/pu_ad.js
+||play.turbommo.com^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/150544
+yna.co.kr##.sub-content > .aside-box01
+
+! https://streamtape.com, netu.wiztube.xyz adframe
+/^https:\/\/[a-z]{7}\.com\/sub\/(?=[a-z]{0,9}[0-9A-Z])[0-9A-Za-z]{10}$/$frame,3p,match-case
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/149156
+player.gayfor.us##+js(nowoif)
+gayfor.us##+js(aopr, popns)
+
+! https://github.com/easylist/easylist/issues/15816
+watchthat70show.net##+js(aopr, AaDetector)
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17566#discussioncomment-5862931
+outlook.live.com##.Ogt7j
+
+! https://forums.lanik.us/viewtopic.php?t=48111-nydus-org
+cryptstream.de,nydus.org##+js(nostif, ab)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18029
+@@||allround-pc.com^$ghide
+allround-pc.com#@#a[rel="noopener external"] > img[src^="/"]
+allround-pc.com##.singlePostAd
+allround-pc.com##.inlineAd
+
+! https://github.com/uBlockOrigin/uAssets/issues/18031
+trangchu.news##+js(noeval-if, chp_ad)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18035
+@@||ph.ontools.net^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/18035
+techhelpbd.com##+js(nostif, /adblocker|alert/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18037
+ac.ontools.net##+js(aeld, load, blocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18042
+||tvonline123.com^$1p,frame,redirect-rule=noop.html
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/150726
+wellness4live.com##+js(no-fetch-if, googlesyndication)
+
+! https://leeapk.com/youtube-revanced-mod-apk/download/
+! https://www.kindleku.com/2023/04/a-girl-called-samson-a-novel-amy-harmon-kindle-mobi.html
+/wpsafelink.js|$script
+/safelink.js|$script
+! https://github.com/uBlockOrigin/uAssets/issues/18580
+@@||cdn.jsdelivr.net/gh/idnulleds/blog@main/Javascript/safelink.js$script,domain=tonanmedia.my.id
+
+! moviesflix. cx
+moviesflix.*##[href^="https://multipledrawers.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-5871745
+phineypet.com#@##adsiframe
+@@||ad.a-ads.com/*?size=320x50$object,domain=phineypet.com
+crewbase.net,phineypet.com###content > form[id]:has(> center > button):style(display: block !important;)
+||phineypet.com/2x.png
+||phineypet.com/300x600.png
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/150736
+fapdrop.com##+js(nostif, redURL)
+fapdrop.com##[href^="https://t.crdefault1.com/"]
+
+! https://embedgram.com popup
+embedgram.com##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/150850
+@@||ay.delivery/client-v2.js$script,domain=diep.io
+
+! https://github.com/uBlockOrigin/uAssets/issues/18845
+cellmapper.net##+js(nostif, /children\('ins'\)|Adblock|adsbygoogle/)
+cellmapper.net##+js(set, dct, 0)
+cellmapper.net##.modal_dialog_base:has(> .modal_top_header:has-text(Marketing))
+cellmapper.net##table:has( > thead > .collapsableSection > td:has-text(Ads))
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/150907
+medscape.com##+js(set, slideShow.displayInterstitial, true)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/150910
+! https://github.com/uBlockOrigin/uAssets/pull/21420
+hdrez.com##+js(nostif, displayMessage)
+hdrez.com##+js(acs, document.addEventListener, openPopup)
+##.aoa_overlay
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/132928
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=america.cgtn.com
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,domain=america.cgtn.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/18071
+toramemoblog.com##+js(aopr, b2a)
+toramemoblog.com##+js(noeval-if, ads)
+toramemoblog.com##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18086
+nopay.info##+js(aeld, mousedown)
+projectlive.info##^script:has-text(decodeURIComponent)
+nopay.info##+js(aopw, AaDetector)
+
+! ai_adb sites
+! https://github.com/uBlockOrigin/uAssets/issues/17528
+! https://www.reddit.com/r/uBlockOrigin/comments/193ws7s/blocked_because_of_ad_blocker/
+avitter.net,bi-girl.net,carryflix.icu,dark5k.com,fairyhorn.cc,gojo2.com,javhdvideo.org,nakiny.com,nemumemo.com,phodoi.vn,savingsomegreen.com,tutsnode.*##+js(aopr, b2a)
+freewebcart.com##+js(nostif, ai_adb)
+freewebcart.com##.pum-open-overlay:style(overflow: auto !important;)
+freewebcart.com##.pum-overlay
+
+! https://www.reddit.com/r/uBlockOrigin/comments/13irw0i/
+duckduckgo.com##[data-layout="products"]:has(.badge--ad-wrap)
+
+! https://krotkoosporcie.pl/ popunder
+krotkoosporcie.pl##+js(nostif, location.href)
+
+! sisterasian.com leftover
+sisterasian.com###vid_overlay
+sisterasian.com##.adblock
+
+! https://github.com/uBlockOrigin/uAssets/issues/18096
+@@||games.metv.com^$ghide
+games.metv.com##[class*="DisplayAd__container"]
+games.metv.com##+js(nano-sib)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18107
+apkdelisi.net##+js(noeval-if, show)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/151013
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=decrypt.day
+decrypt.day#@#ins.adsbygoogle
+decrypt.day##ins.adsbygoogle:style(height: 0px !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18112
+@@||ib.adnxs.com/favicon.ico$xhr,domain=dyktanda.pl
+
+! https://github.com/uBlockOrigin/uAssets/issues/18114
+corrector.app##+js(aost, Object.getPrototypeOf, plugins)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/151183
+dlupload.com##+js(nowoif)
+||dlmonitize.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/18117
+@@||userstyles.org^$ghide
+userstyles.org##ins.adsbygoogle
+userstyles.org##[class^="GoogleAd"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/151192
+netchimp.co.uk##+js(aopr, ai_wait_for_jquery)
+
+! streamonsport99. top => player sharecast. ws => popups
+||sharecast.ws^$script,1p
+@@||sharecast.ws/player-bundle.min.js$script,1p
+@@||sharecast.ws/clappr.min.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/18094
+thetimes.co.uk##+js(aopw, NREUM)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18127
+vlr.gg##a[href^="/out/"]:upward(1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18129
+freebnbcoin.com##+js(nostif, fetch)
+*$image,domain=freebnbcoin.com,redirect-rule=1x1.gif
+*$script,redirect-rule=noopjs,domain=freebnbcoin.com
+freebnbcoin.com##.adsflex
+
+! https://download.windowslite.net/uQZm popup
+windowslite.net##+js(set, blurred, false)
+windowslite.net##+js(set, go_popup, {})
+
+! https://github.com/uBlockOrigin/uAssets/issues/18138
+! https://github.com/uBlockOrigin/uAssets/issues/19252
+! https://github.com/uBlockOrigin/uAssets/issues/19589
+newscon.org##+js(acs, setInterval, adblock)
+newscon.org##+js(aopw, pbjs)
+newscon.org##+js(nosiif, ads)
+newscon.org##+js(nostif, adblock)
+newscon.org##+js(set, window.runningAdsAllowed, true)
+newscon.org##+js(set, WAITING_TIME, 0)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18144
+arkadium.com##+js(set, __INITIAL_STATE__.gameLists.gamesNoPrerollIds.indexOf, trueFunc)
+arkadium.com##+js(nano-sib)
+arkadium.com#@#div[class^="Ad-adContainer"]
+arkadium.com##div[class^="Ad-adContainer"]:style(min-height:1px!important;min-width:1px!important;)
+arkadium.com##span[class*=Ad-caption-]
+
+! dailytechinfo. me antiadb
+dailytechinfo.me##+js(aost, document.createElement, adsBlocked)
+
+! game sites
+friv5online.com##.bnr
+kiz10.com##.box-advertisement-down
+kiz10.com##[class*="-ads"]
+kolagames.com##.slot
+mousecity.com##.banner-box-square
+mousecity.com##div[style*="border: 5px solid #fff"]:not(:has(a[href^="/games"]))
+mousecity.com##div[style="float: right; width: 260px; height: 300px;"]
+play-games.com##.website-ad-space-area
+
+! eroxxx.us ad, popup
+eroxxx.us##.idmuvi-topbanner
+
+! commentpicker. com anti adb
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$xhr,domain=commentpicker.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/18165
+lgwebos.com##+js(acs, ips, adb)
+
+! babiato. tech anti-adb
+babiato.tech##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18168
+cgaa.org##+js(aost, Error, /stackDepth:1\s/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18171
+techtobo.com##+js(acs, $, ads)
+
+! Text-based ads (JPN, EN, CHN)
+! https://github.com/uBlockOrigin/uAssets/discussions/18185#discussioncomment-6029214
+resizer.myct.jp##+js(rmnt, #text, /スポンサーリンク|Sponsored Link|广告/)
+gametohkenranbu.sakuraweb.com##+js(rmnt, #text, スポンサーリンク)
+jisakuhibi.jp,rank1-media.com##+js(rmnt, #text, スポンサードリンク)
+lifematome.blog##+js(rmnt, #text, /\[vkExUnit_ad area=(after|before)\]/)
+fm.sekkaku.net##+js(rmnt, #text, 【広告】)
+free-avx.jp##+js(rmnt, #text, 【PR】)
+dvdrev.com##+js(rmnt, #text, 関連動画)
+betweenjpandkr.blog##+js(rmnt, #text, PR:)
+! https://nft-media.net/ interstitail
+nft-media.net##+js(rmnt, script, leave_recommend)
+
+! After article
+ghacks.net##+js(rmnt, #text, /^Advertisement$/)
+
+! https://www.code-source.net ad
+||images2.imgbox.com/67/0e/zUAgdBDk_o.gif$3p
+
+! https://wheelofgold.com/ anti-adb
+wheelofgold.com##+js(aeld, load, document.getElementById)
+wheelofgold.com##span[style*="z-index:"][onclick$="fadeOut();"]
+||acceptable.a-ads.com/1^$xhr,redirect-rule=noop.txt
+wheelofgold.com##+js(nosiif, onerror)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18183
+@@||screenflash.io^$ghide
+screenflash.io##.ins-large.adsbygoogle
+
+! https://www.reddit.com/r/uBlockOrigin/comments/13ot4az/
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=pik.bg
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/2661
+idoitmyself.xyz##+js(rpnt, script, /devtoolsDetector\.launch\(\)\;/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18202
+! https://github.com/AdguardTeam/AdguardFilters/issues/159534
+! https://github.com/AdguardTeam/AdguardFilters/issues/162123
+||acacdn.com^$script,redirect-rule=noopjs
+embedv.net,fslinks.org,v6embed.xyz,vembed.*,vgplayer.xyz,vid-guard.com##+js(nostif, afterOpen)
+
+! https://www.jpvhub.com/ popunder on DL
+||compassionatecheek.com^$popunder
+
+! https://github.com/uBlockOrigin/uAssets/issues/18218
+/adblock_detector.$badfilter
+eska.pl,eskarock.pl,voxfm.pl##+js(nostif, adb)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/151374
+printablecreative.com##+js(nostif, chkADB)
+printablecreative.com##.gda-home-box
+||printablecreative.com/wp-content/uploads/pixel.gif
+
+! https://morbidthought.com/ anti-adb on browser back
+@@||morbidthought.com^$ghide
+
+! https://juegosgratisonline.com.ar/ popup
+juegosgratisonline.com.ar##+js(aopr, popns)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/13q93ea/
+||truthsocial.com/api/*/ads$xhr,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/151833
+webmatrices.com##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/145039
+||cpx-research.com/assets/js/script_tag_v2.0.js$script,redirect-rule=noop.js
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/151360
+filerice.com##+js(acs, $, window.open)
+filerice.com##.ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/18237
+! https://github.com/uBlockOrigin/uAssets/issues/18574
+! https://github.com/uBlockOrigin/uAssets/issues/18620
+metager.org##.result:has(.result-open-metagerkey):remove()
+
+! https://github.com/uBlockOrigin/uAssets/pull/18240
+! https://www.reddit.com/r/uBlockOrigin/comments/13s7ug5/cant_figure_out_how_to_bypass_adblock_detection/jo2tpyp/
+*$xhr,redirect-rule=nooptext,domain=kbjfree.com|lnk111.xyz|lnk112.xyz
+*$script,redirect-rule=noopjs,domain=kbjfree.com|lnk111.xyz|lnk112.xyz
+
+! https://github.com/uBlockOrigin/uAssets/issues/18241
+sociologicamente.it##+js(acs, addEventListener, MutationObserver)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18247
+freepic-downloader.com##+js(no-fetch-if, google-analytics)
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6011881
+shortlinks.tech##+js(aeld, mousedown, tabUnder)
+shortlinks.tech##+js(nano-sib, timeLeft)
+shortlinks.tech##+js(nosiif, verificarLargura)
+@@||shortlinks.tech^$ghide
+
+! https://www.reddit.com/r/uBlockOrigin/comments/13shhep/
+||ctfassets.net^$media,redirect=noopmp3-0.1s,domain=app.idagio.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/129547
+comohoy.com##+js(aopr, checkAdBlock)
+comohoy.com,leak.sx,pornleaks.in##+js(nostif, onDetected)
+! https://github.com/AdguardTeam/AdguardFilters/issues/152003
+/fag/js/lol.js$domain=comohoy.com|pornleaks.in|leak.sx
+leak.sx##.tw_float_ads_main_Wrap_Both
+comohoy.com##section h6:has-text(Advertising):upward(section)
+! https://github.com/AdguardTeam/AdguardFilters/commit/7080a88ee7a960eb21b9cc2984684ef386f52cd4#commitcomment-115505723
+!#if env_chromium
+comohoy.com##+js(aopr, navigator.brave)
+leak.sx,pornleaks.in##+js(rmnt, script, navigator.brave)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/18259
+||amazonaws.com/homad-global-configs.schneevonmorgen.com/global_config.json$xhr,redirect=nooptext,domain=sport.de
+
+! https://yoima.hatenadiary.com/ anti-adb
+yoima.hatenadiary.com##+js(nostif, displayMessage, 2000)
+
+! https://cdromance.com/ leftover
+cdromance.com###custom_html-8
+cdromance.com##.adsbygoogle
+! https://www.reddit.com/r/uBlockOrigin/comments/16ppe2q/farlight_84_promo_video_on_certain_site/
+||cdromance.com/wp-content/themes/cdromance/img/farlight$media,1p
+cdromance.com##.widget_custom_html #myVideo:upward(.widget_custom_html)
+
+! https://procrackerz.org/windows-11-v2023-productkey-list-download/ link hiding
+procrackerz.org##.onp-sl-content:style(display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18266
+telewizja-streamer.xyz##+js(no-xhr-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18467
+bazadecrypto.com##+js(nostif, _0x)
+bazadecrypto.com##+js(nostif, myinfoey, 1500)
+bazadecrypto.com##+js(acs, eval, replace)
+||banner.infoey.com^$image,redirect-rule=1x1.gif,domain=bazadecrypto.com
+*$frame,redirect-rule=noop.txt,domain=bazadecrypto.com
+bazadecrypto.com##body:style(display: block !important)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/152150
+secuhex.com##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18271
+daotranslate.com##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18277
+mapcrunch.com###bottom-box
+mapcrunch.com###container:style(height: 100% !important;)
+
+! https://anime7.download/ leftover
+anime7.download###sidebar > div.widget_custom_html
+anime7.download##.code-block
+
+! https://github.com/uBlockOrigin/uAssets/issues/18293
+true-gaming.net##+js(aopw ,detectAdblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18278
+m.nivod5.tv,m1.nivod.tv,m.nivod4.tv##+js(evaldata-prune, entity.commercial)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/125354
+manga1000.*##+js(aopw, document.ready)
+||manga1000.top/app/manga/themes/*/ads/pop.js
+
+! https://www.reddit.com/r/uBlockOrigin/comments/13vtqnn/
+@@||commentsmodule.com/js/js.load.1.js$xhr,domain=reproductor.telenovelas-turcas.com.es
+telenovelas-turcas.com.es##+js(aopr, BetterJsPop)
+telenovelas-turcas.com.es##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/152410
+*$script,3p,domain=zinchanmanga.com
+/cuid/?f=https%$xhr,3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/13wqip7/popups/
+! https://www.reddit.com/r/uBlockOrigin/comments/18cojq6/popup/
+domaha.tv,xxxrip.net,sextor.org,sex-torrent.net##+js(ra, href, a[href^="//torrentico.top/sim/go.php"])
+
+! https://www.reddit.com/r/uBlockOrigin/comments/13wzw1e/
+hotstar.com##+js(json-prune, success.page.spaces.player.widget_wrappers.[].widget.data.intervention_data)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/152471
+streamporn.co.uk##+js(aost, localStorage, window.onload)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/152222
+hentaipaw.com##div[id^="ts_ad_native_"]
+&height=250&width=300&format=iframe^$frame,3p
+?width=728&height=90&format=iframe^$frame,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/18358
+crack-status.com##+js(nowoif)
+crack-status.com##.bg-dark:has(> :is([href^="https://startgaming.net/"], ins))
+
+! songspk2 .info popups
+! remove aost once rmnt scriptlet is in stable build
+songspk2.info##+js(aost, Math, inlineScript)
+songspk2.info##+js(rmnt, script, zfgloaded)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=45246
+@@||cc.com^$ghide
+! https://github.com/uBlockOrigin/uAssets/issues/18360
+! https://github.com/uBlockOrigin/uAssets/issues/18824
+||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,redirect-rule=noopjs,domain=cc.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/18364
+cashbux.work##+js(no-xhr-if, czilladx)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18366
+! https://github.com/uBlockOrigin/uAssets/issues/18535
+up-4ever.net##+js(nowoif)
+||up-4ever.net/detroitchicago/*$script,1p
+*$script,3p,denyallow=cloudflare.com,domain=up-4ever.net
+*$image,3p,domain=up-4ever.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/18371
+*$script,3p,redirect-rule=noopjs,domain=linkebr.com
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6076196
+! https://github.com/uBlockOrigin/uAssets/issues/18482
+go.freetrx.fun##+js(nano-sib, timer)
+go.freetrx.fun##form center > div[id^="_"]
+@@||go.freetrx.fun^$ghide
+@@||googletagmanager.com/gtm.js$domain=go.freetrx.fun
+go.freetrx.fun##+js(aeld, load, htmls)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18380
+*$script,domain=footybite.com,3p,denyallow=bootstrapcdn.com|googleapis.com|scdn.dev
+
+! https://github.com/uBlockOrigin/uAssets/issues/18381
+xgroovy.com##+js(aopr, VAST)
+*/vast-client-browser.min.js$1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/18390
+||tmp.isavetube.com/js/vegamovies.js$script,domain=vegamovies.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/18411
+! https://github.com/uBlockOrigin/uAssets/issues/18412
+peakpx.com,pxfuel.com##.list_ads:style(height: 0px !important;)
+! https://github.com/uBlockOrigin/uAssets/issues/18411#issuecomment-1581550336
+pikist.com##.lst_ads:style(height: 0px !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/16d9c4a/help_how_to_block_seemingly_random_element_in/
+androidauthority.com##main > div:last-child > div:has(> .ad)
+androidauthority.com##main > div > div:empty:matches-css(min-height: 250px):matches-css(min-width: 80%)
+androidauthority.com##main > div:last-child > div:has(> div:only-child:empty)
+androidauthority.com##main > script + div:has(> div:only-child:empty)
+androidauthority.com##div:has(> div:only-child > .pw-incontent)
+androidauthority.com##aside > div > div > div > div > div:has(> div:only-child:empty)
+androidauthority.com##aside > div > div:empty
+
+! https://github.com/uBlockOrigin/uBlock-discussions/discussions/790#discussioncomment-6049753
+/^https:\/\/(?:[a-z]{2}\.)?[a-z]{7,14}\.com\/r(?=[a-z]*[0-9A-Z])[0-9A-Za-z]{10,16}\/[A-Za-z]{5}$/$script,3p,match-case,to=com
+
+! https://github.com/easylist/easylist/pull/15284/
+iis.net##.ad-300x250
+
+! https://github.com/uBlockOrigin/uAssets/issues/18422
+||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,domain=paramountnetwork.com,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/18423
+freepublicporn.com##.before-list-boxes-mobile-singl
+freepublicporn.com##.inside-video-boxes-mobile2
+freepublicporn.com##.inside-video-all-boxes-mobile
+freepublicporn.com##.footer-video-boxes-mobile2
+freepublicporn.com##[href*="find-my-girl.com"]
+
+! ads /remove filters when fixed in EL
+/sw.js$script,domain=lolabits.se|filechan.org|megaupload.nz|rapidshare.nu|share-online.is|openload.cc|hotfile.io
+
+! https://shaboysglobal.com/ anti-adb
+@@||shaboysglobal.com^$ghide
+
+! PersianBlocker filters
+! app.blubank.com, mobileweb.bankmellat.ir - These sites work fine on the desktop and Android but they only allow iPhone useragent
+app.blubank.com,mobileweb.bankmellat.ir##+js(trusted-set, navigator.userAgent, iPad; CPU OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML\, like Gecko) Version/14.1.2 Mobile/15E148 Safari)
+mobileweb.bankmellat.ir##+js(trusted-set, navigator.platform, iPhone)
+app.blubank.com##+js(set, navigator.standalone, true)
+app.blubank.com##div.fixed[style^="z-index:"]:has-text(گوشی خود را بچرخانید)
+! https://uploadboy.com/f64c93jcxy0a - Timer
+uploadboy.com##+js(rpnt, script, self.location.href;, self.location.href; document.addEventListener('DOMContentLoaded'\,()=>{const button=document.querySelector('form > input#method_free');if(button){button.click()}});, sedCount, 1)
+uploadboy.com##+js(rpnt, script, //$('#btn_download').click();, $('#btn_download').click();, sedCount, 1)
+! https://dehlinks.ir/link_download.php?Mozojadid_Id=166517 - Timer
+||dehlinks.ir/link_download.php?Mozojadid_Id=$doc,replace=/content="15;/content="0;/
+! https://github.com/MasterKia/PersianBlocker/issues/218
+reymit.ir##+js(trusted-rpnt, script, /reymit_ads_for_categories\.length>0|reymit_ads_for_streams\.length>0/g, false)
+||a.reymit.ir^$1p,frame
+reymit.ir##div.featured-holder > div.owl-carousel > div.owl-stage-outer > div.owl-stage > div.owl-item:has(> div.item > div > div.placeholder > iframe[src^="https://a.reymit.ir/"]):remove()
+
+! https://github.com/uBlockOrigin/uAssets/pull/10059
+@@||sportdeutschland.tv/assets/*$script,1p
+@@||71i.de/*/loader.js$script,domain=sportdeutschland.tv
+! https://github.com/uBlockOrigin/uAssets/issues/14656
+sportdeutschland.tv##+js(set, google.ima.settings.setDisableFlashAds, noopFunc)
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=sportdeutschland.tv
+@@||relay-client-c03.iocnt.net^$script,domain=sportdeutschland.tv
+! https://www.reddit.com/r/uBlockOrigin/comments/144r0f1/adblock_detected_site_sportdeutschlandtv/jnh4vvo/
+@@||data.sportdeutschland.tv/data.js$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/153189
+faindx.com##+js(nostif, placebo)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18442
+chat.nrj.fr##+js(nosiif, location)
+
+! sdmoviespoint. training popups + detection
+! https://github.com/uBlockOrigin/uAssets/issues/4411#issuecomment-1804073748
+*$script,3p,domain=sdmoviespoint.*,denyallow=disqus.com|disquscdn.com|disqus.map.fastlylb.net|media-imdb.com|media-amazon.com|cloudfront.net
+sdmoviespoint.*##+js(noeval-if, ads)
+
+! https://recipahi.com/ anti-adb, timer
+recipahi.com##+js(nostif, offsetHeight, 100)
+recipahi.com##+js(nano-stb, redirectpage, 13500, 0.001)
+recipahi.com##+js(nano-sib, counter, 1000, 0.001)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18472
+converter-btc.world##+js(acs, eval, replace)
+converter-btc.world##+js(nostif, offsetHeight, 100)
+
+! https://github.com/easylist/easylist/commit/551822cfe498da5b72419ab6ee9ab975d58ec953
+/code/native.js?h=$script
+/code/pops.js?h=$script
+/code/silent.js?h=$script
+/sdk/push_web/?zid=
+/v2/a/push/js/*
+/ntfc.php?
+/pfe/current/*$script,3p
+.com/src/ppu/
+/aas/r45d/vki/*
+/bultykh/ipp24/7/*
+/ceef/gdt3g0/tbt/*
+/i/npage/*$script,3p
+/lv/esnk/*$script,3p
+/fyckld0t/ckp/fd3w4/*
+/pn07uscr/f/tr/zavbn/*
+/q/tdl/95/dnt/*
+/sc4fr/rwff/f9ef/*
+/t/9/heis/svewg/*
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/153691
+truyentranhfull.net##^script:has-text(ai_adb)
+!#if !cap_html_filtering
+truyentranhfull.net##+js(rmnt, script, ai_adb)
+!#endif
+/adpia_click_popup_after.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/14108
+! https://github.com/uBlockOrigin/uAssets/issues/16123
+! https://github.com/uBlockOrigin/uAssets/issues/18840
+@@*$ghide,domain=empire-stream.*|empire-streaming.*
+empire-stream.*,empire-streaming.*##.direct-lads
+empire-stream.*,empire-streaming.*##+js(rpnt, script, /data: \[.*\]\,/, data: []\,, condition, ads_num)
+empire-stream.*,empire-streaming.*##+js(nano-stb, (!1), *)
+*/iframe_ad/$csp=sandbox allow-forms allow-same-origin allow-scripts allow-modals allow-orientation-lock allow-pointer-lock allow-presentation allow-top-navigation,1p,domain=empire-stream.*|empire-streaming.*
+empire-stream.*##+js(no-xhr-if, pagead2.googlesyndication.com)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11022
+steamcrackedgames.com##[href^="https://startgaming.net/"]
+steamcrackedgames.com##.blink
+steamcrackedgames.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18526
+app.covemarkets.com##+js(noeval-if, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18528
+j91.asia##+js(nostif, fuckadb)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/153796
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$xhr,domain=rekidai-info.github.io
+!#if env_firefox
+||rekidai-info.github.io/_app/immutable/components/pages/index/_page.svelte-$script,replace=/try\{.*?catch.*?detected."\)\}//
+!#endif
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/69447
+online2pdf.com##div[id*="horizontal_box"]
+online2pdf.com##div[id*="title_vertical"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/18534
+burbuja.info##+js(acs, RegExp, $)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18552
+jeniusplay.com##+js(nostif, detect)
+jeniusplay.com##+js(nowoif)
+! https://github.com/uBlockOrigin/uAssets/issues/18841
+jeniusplay.com##+js(aost, document.createElement, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18555
+hentaibatch.com##+js(acs, document.createElement, appendChild)
+hentaibatch.com##.klands
+
+! https://github.com/uBlockOrigin/uAssets/issues/18557
+furher.in##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18566
+vidpro.net##+js(nowoif)
+
+! doronime
+-cpm-ads.$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/18575
+timestamp.fr##+js(ra, onclick, [type="submit"])
+
+! https://javdragon.com/ ad, popup
+javdragon.com###preroll
+embedaio.cc##+js(nowoif)
+||embedaio.cc/cdn-cgi/trace
+
+! tonanmedia.my.id skip countdown & adb
+tonanmedia.my.id##+js(set, setTimer, 0)
+tonanmedia.my.id##+js(nano-sib)
+tonanmedia.my.id##+js(set, showAds, true)
+@@||tonanmedia.my.id^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/18590
+@@||bt.dk^$script,1p
+-advertisement_$badfilter
+
+! bypass auto safelink
+batchkun.com##+js(aopw, auto_safelink)
+koenime.top,lendrive.web.id,nimegami.id##+js(aopr, btoa)
+
+! adikanime anti-adb
+@@prebid.js$script,domain=adikhealth.xyz|bisnis.adigenius.com|mangindo.xyz|adikdrive.my.id
+@@*$ghide,domain=adikhealth.xyz|bisnis.adigenius.com|mangindo.xyz|adikdrive.my.id
+
+! skiplink.me skip countdown
+||google.com/recaptcha/api.js$script,domain=skiplink.me,important
+skiplink.me,~go.skiplink.me##+js(nano-sib)
+skiplink.me##b
+skiplink.me##center > a
+skiplink.me##center > button
+skiplink.me###alf_continue_captcha:remove-attr(disabled)
+skiplink.me###alf_continue_captcha:style(cursor: pointer !important; opacity: 1 !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5550
+! https://www.reddit.com/r/uBlockOrigin/comments/14f9277/
+kmo.to##+js(nowoif, !abyss.to, 1)
+
+! ytmates .com (parked)
+||heyoya.com^$script,3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/14fz8gc/
+gamersdiscussionhub.com##+js(nostif, magnificPopup)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18623
+@@||ad.admitad.com^$popup,domain=indiadesire.com
+
+! http://www.taisachonthi.com/2022/09/tieng-anh-cho-nguoi-bat-dau-trang-anh-minh-trang-pdf.html timer and sanitize link
+taisachonthi.com##+js(href-sanitizer, a[href^="/p/download.html?ntlruby="], ?ntlruby)
+taisachonthi.com###timed:style(display: block !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/154441
+youwatch-serie.com##+js(nostif, displayMessage)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/154383
+davescomputertips.com##+js(nosiif, show)
+davescomputertips.com##+js(aeld, DOMContentLoaded, daadb_get_data_fetch)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/154369
+nar.k-ba.net##+js(aeld, load, nextFunction)
+
+! penci / soledad anti-adb sites
+! https://github.com/uBlockOrigin/uAssets/pull/21024
+ccthesims.com,chromeready.com,coursedrive.org,dtbps3games.com,illustratemagazine.com,uknip.co.uk##+js(set, penci_adlbock.ad_blocker_detector, 0)
+*/wp-content/themes/soledad/js/detector.js
+
+! https://erotikflix.com/movies/annemle-sirrimiz/ popup
+! https://github.com/AdguardTeam/AdguardFilters/issues/157598
+forplayx.ink,mov18plus.cloud###video_player ~ div[id]:has(> div[style^="position:fixed;inset:0px;z-index"] > a[target="_blank"])
+forplayx.ink##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18648
+! https://www.reddit.com/r/uBlockOrigin/comments/14w42ls/
+capital.de,geo.de##+js(aeld, load, autoRecov)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18653
+indianyug.com##+js(nostif, siteAccessPopup)
+
+! https://github.com/uBlockOrigin/uAssets/pull/18661
+! yurasu.xyz skip countdown & anti adblock
+yurasu.xyz##+js(set, showAds, true)
+yurasu.xyz,isekaipalace.com##+js(nano-sib)
+@@*$ghide,domain=blog.yurasu.xyz|isekaipalace.com
+yurasu.xyz,isekaipalace.com###timer
+yurasu.xyz,isekaipalace.com##button:remove-class(hidden)
+yurasu.xyz,isekaipalace.com##button:remove-attr(disabled)
+
+! kazefuri.net sanitize url
+kazefuri.net##+js(href-sanitizer, a[href^="https://www.adtival.network/"][href*="&url="], ?url)
+
+! khaddavi.net skip countdown
+khaddavi.net,jrtekno.com##+js(nano-sib)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18663
+/ad_code.$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/pull/18681
+! mitedrive.com skip countdown & popups
+mitedrive.com,miteblog.com##+js(nano-sib)
+mitedrive.com,miteblog.com##+js(window.open-defuser)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/154687
+needrom.com##+js(nostif, /adsbygoogle|adblock/)
+
+! abDetectorPro-sites
+! https://www.reddit.com/r/uBlockOrigin/comments/14hm2v0/
+! https://github.com/AdguardTeam/AdguardFilters/issues/154666
+adelsfun.com,advantien.com,bailbondsfinder.com,bg-gledai.*,bigpiecreative.com,childrenslibrarylady.com,classifarms.com,comtasq.ca,crone.es,ctrmarketingsolutions.com,dropnudes.com,ftuapps.dev,genzsport.com,ghscanner.com,gledaitv.*,grsprotection.com,gruporafa.com.br,inmatefindcalifornia.com,inmatesearchidaho.com,itsonsitetv.com,mfmfinancials.com,myproplugins.com,onehack.us,ovester.com,paste.bin.sx,privatenudes.com,renoconcrete.ca,richieashbeck.com,sat.technology,short1ink.com,stpm.co.uk,wegotcookies.co##+js(aeld, load, abDetectorPro)
+adelsfun.com,advantien.com,bailbondsfinder.com,bg-gledai.*,bigpiecreative.com,childrenslibrarylady.com,classifarms.com,comtasq.ca,crone.es,ctrmarketingsolutions.com,dropnudes.com,ftuapps.dev,genzsport.com,gledaitv.*,grsprotection.com,gruporafa.com.br,inmatefindcalifornia.com,inmatesearchidaho.com,itsonsitetv.com,mfmfinancials.com,myproplugins.com,onehack.us,ovester.com,paste.bin.sx,privatenudes.com,renoconcrete.ca,richieashbeck.com,short1ink.com,stpm.co.uk,wegotcookies.co##+js(no-xhr-if, googlesyndication)
+ghscanner.com,sat.technology##+js(no-fetch-if, googlesyndication)
+ftuapps.dev,onehack.us##+js(nostif, modal)
+
+! https://www.maps4heroes.com/forum/opinions.php?map_id=791&game=3 (can't dl maps)
+maps4heroes.com#@#ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/18695
+cuevana8.com##+js(nowoif)
+cuevana8.com##[href*="premium/"]
+cuevana8.com##.advpl
+
+! https://github.com/uBlockOrigin/uAssets/issues/18697
+woowebtools.com##body > div[style]:has-text(Ads)
+||woowebtools.com/*.png$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/18705
+faucetbravo.fun##+js(aopr, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18706
+! https://github.com/uBlockOrigin/uAssets/issues/18941
+bitsmagic.fun,ourcoincash.xyz,hynews.biz##^script:has-text(htmls)
+!#if !cap_html_filtering
+bitsmagic.fun,ourcoincash.xyz,hynews.biz##+js(rmnt, script, htmls)
+!#endif
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/154836
+apnews.com##.Page-header-leaderboardAd:remove()
+
+! https://github.com/uBlockOrigin/uAssets/issues/18716
+merlininkazani.com##+js(nostif, onDetected)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/14l1nyq/
+actvid.*##.block_area iframe:upward(.block_area)
+actvid.*##^script:has-text(HTMLAllCollection)
+!#if !cap_html_filtering
+actvid.*##+js(rmnt, script, HTMLAllCollection)
+!#endif
+! https://github.com/uBlockOrigin/uBlock-discussions/discussions/790#discussioncomment-6303745
+! https://github.com/AdguardTeam/AdguardFilters/issues/161092
+/^https:\/\/[a-z]{3,5}\.[a-z]{10,14}\.top\/[a-z]{10,16}\/[a-z]{5,6}(?:\?d=\d)?$/$script,xhr,3p,match-case
+! https://www.reddit.com/r/uBlockOrigin/comments/14l1nyq/redirects_popups_getting_through_ublock_on/jq2jenc/
+! https://github.com/AdguardTeam/AdguardFilters/issues/155031
+! https://bunkrr.su/v/tPXzp5TtVyKyP popup
+! https://www.homemoviestube.com/
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=43732#p150600
+! https://www.reddit.com/r/uBlockOrigin/comments/14jms8c/
+! https://github.com/uBlockOrigin/uAssets/issues/21809
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=24ur.com
+*$object,3p,redirect-rule=noopframe,domain=24ur.com
+@@||cdn.jsdelivr.net/npm/videojs-contrib-ads$script,domain=24ur.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/18727
+@@||criptologico.com^$ghide
+criptologico.com##+js(nostif, akadb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18729
+medeberiyas.com##+js(acs, eval, replace)
+medeberiyas.com##+js(aopw, adsBlocked)
+
+! https://iwatchfriendsonline.net/ popup
+iwatchfriendsonline.net##.fixed-sidebar-blank
+iwatchfriendsonline.net##^script:has-text(liedetector)
+nectareousoverelate.com##^script:has-text(popWin)
+!#if !cap_html_filtering
+iwatchfriendsonline.net##+js(rmnt, script, liedetector)
+nectareousoverelate.com##+js(rmnt, script, popWin)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/18738
+kimcilonly.top##+js(noeval-if, show)
+kimcilonly.top##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18728
+mail.aol.com##[data-test-id="right-rail-ad"]
+mail.aol.com##[rel="noreferrer"][data-test-id][href^="https://beap.gemini.yahoo.com/mbclk?"]
+mail.aol.com##[data-test-id^="pencil-ad"]
+mail.aol.com###slot_LREC
+
+! https://cryptonor.xyz/ anti-adb
+cryptonor.xyz##+js(aost, document.createElement, inlineScript)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18752
+creativebloq.com##.ad-unit:remove()
+creativebloq.com##.listingResult:has(> .sponsored-post)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18760
+isekaipalace.com##+js(set, showAds, true)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/14nkfum/
+sofmag.com##.adsBelowHeaderBannerContainer
+sofmag.com##.widget .adsSidebarContainer:upward(.widget)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18756
+foodxor.com##+js(rpnt, script, /try.*finally.*?}/)
+
+! https://khoaiphim.com/ popup
+khoaiphim.com##^script:has-text(end_click)
+!#if !cap_html_filtering
+khoaiphim.com##+js(rmnt, script, end_click)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/18771
+sempreupdate.com.br##+js(nostif, open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18780
+kompas.id##.relative:has(> [id^="div-gpt-ad"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/18781
+mathaeser.de##+js(nostif, adb)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/155143
+myporntape.com##+js(aopr, loadTool)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18792
+||cdn.jsdelivr.net/gh/ourtecads/AntiAdblock$script
+coinsl.click##+js(set, blurred, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/155274
+haafedk2.com##+js(rmnt, script, ad blocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11094
+! https://github.com/uBlockOrigin/uAssets/issues/18798
+eevblog.com##[src*="banner"]
+||eevblog.com/images/*.gif$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/18799
+jovemnerd.com.br##+js(rmnt, script, closeAd)
+jovemnerd.com.br###ad-wallpaper
+
+! https://github.com/uBlockOrigin/uAssets/issues/18797
+nicomanga.com##+js(rmnt, script, /modal|popupads/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18807
+@@||ak.sv^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/18809
+rgb.vn##+js(nostif, siteAccessPopup)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/14pu01w/
+! https://www.reddit.com/r/uBlockOrigin/comments/14qeaz4/
+www.google.com##div[aria-label="Why this ad?"]:upward([data-pla="1"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/18816
+totalcsgo.com##+js(rmnt, script, /adconfig/i)
+totalcsgo.com##.body-container:style(background-image: unset !important; cursor: auto !important;)
+||totalcsgo.com/*/site-takeover/$image
+! https://github.com/uBlockOrigin/uAssets/issues/20992
+totalcsgo.com##+js(nowoif, _blank)
+totalcsgo.com##[style*="desktop-url"]:remove()
+totalcsgo.com##[alt="Ad"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/18823
+vod.pl##+js(set, Object.prototype.adblockDetector, noopFunc)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/14oztaj/
+||skyadsmart.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/18839
+vivamax.asia##+js(rmnt, script, AdblockDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18843
+dafontvn.com##+js(acs, document.createElement, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18848
+gumtree.com.au###leaderboard-header-banner
+gumtree.com.au###header-new:style(margin-top: 0px !important;)
+! https://github.com/uBlockOrigin/uAssets/pull/19546
+gumtree.com##div > article[data-q="search-result"] > a[data-q="search-result-anchor"] > div > figure.listing-tile-thumbnail-image + div:has-text(Featured):upward(article[data-q="search-result"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/18838
+deviantart.com###deviantartcom_desktop-devpage-sidebar-300x250-atf:upward(div[role="complementary"] > div)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/155482
+*$script,3p,denyallow=cloudflare.com|fastly.net|jsdelivr.net,domain=animeunity.cc
+*$script,3p,denyallow=cloudflare.com|gstatic.com,domain=scws.work
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/155544
+megadrive-emulator.com##+js(nostif, biteDisplay)
+megadrive-emulator.com##+js(set, blext, true)
+megadrive-emulator.com##.generalgames_box_home ul > div
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/152221
+eromanga-show.com,hentai-one.com,hentaipaw.com##+js(nostif, /[a-z]\(!0\)/, 800)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/14sxwl3/
+tvhay.*##+js(set, vidorev_jav_plugin_video_ads_object, {})
+tvhay.*##+js(set, vidorev_jav_plugin_video_ads_object_post, {})
+
+! https://github.com/uBlockOrigin/uAssets/issues/18869
+nasonga.co.ke##[id^="google_ads_iframe"]:remove()
+
+! https://github.com/uBlockOrigin/uAssets/issues/18821
+faucettronn.click##+js(set, detectAdblock, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18885
+||imasdk.googleapis.com/js/sdkloader/ima3$script,redirect-rule=google-ima.js,domain=nick.com
+
+! https://live3.thapcam.net/ ads
+! https://github.com/uBlockOrigin/uAssets/issues/19115
+.gif$from=thapcam.net,to=~thesports.com
+thapcam.net##+js(nostif, modal)
+thapcam.net##.mmo
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/155918
+pandasnovel.com##+js(set, pandaAdviewValidate, true)
+pandasnovel.com##a[href^="https://www.panda-novel.com/advertising"]:upward(.index-swiper)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/155887
+! https://github.com/AdguardTeam/AdguardFilters/issues/155883
+10minuteemails.com,luxusmail.org##+js(nostif, ad_block)
+
+! https://www.motchill.icu/2023/05/danh-sach-en-phan-10-final-blacklist.html popup
+motchill.*##+js(aeld, click, popactive)
+
+! https://docs.w3cub.com/http/headers/feature-policy/sync-xhr detection + popup
+w3cub.com##+js(nostif, /detectAdBlocker|window.open/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18908
+ravenscans.com##+js(acs, eval, replace)
+ravenscans.com###teaser3
+
+! https://github.com/uBlockOrigin/uAssets/issues/18914
+fap-nation.org##+js(acs, eval, replace)
+fap-nation.org##.td_spot_img_all
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6401093
+exactpay.online##+js(aopr, htmls)
+exactpay.online##+js(set, document.hasFocus, trueFunc)
+||exactpay.online/forex/index.js
+exalink.fun##+js(set, blurred, false)
+||earnbitmoon.club/promo/EBM-300x250.gif
+exactpay.online##+js(aopr, Swal.fire)
+exactpay.online##iframe[src^="https://cryptocoinsad.com/"]
+||exactpay.online/Bitmedia.html$frame,redirect=noop.html
+
+! https://github.com/uBlockOrigin/uAssets/issues/18930
+@@||all3dp.com/gpt.min.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/18933
+@@||stpd.cloud^$script,domain=dgb.lol
+
+! https://github.com/uBlockOrigin/uAssets/issues/18940
+manysex.com##+js(rmnt, script, is_antiblock_refresh)
+manysex.com##.afs_ads + span[style]
+
+! https://github.com/uBlockOrigin/uAssets/issues/18948
+bangpremier.com##+js(nostif, adBlockDetected)
+bangpremier.com##.presentation-bb-wrapper
+bangpremier.com##.panel-desktop-mdx
+bangpremier.com##.presentation-space
+bangpremier.com##.presentation-space-m-panel
+bangpremier.com###my-content:style(display: block !important;)
+
+! S_Popup sites
+! https://erotikclub1.pw/movies/annemle-tatil-anilari/ popup
+! https://www.reddit.com/r/uBlockOrigin/comments/14wpihr/
+! https://github.com/uBlockOrigin/uAssets/issues/19271
+moviesapi.club##+js(aopr, my_pop)
+bestx.stream,moviesapi.club##+js(nowoif)
+moviesapi.club,bestx.stream,watchx.top##+js(no-fetch-if, googlesyndication)
+animesaga.in,moviesapi.club,bestx.stream,watchx.top##+js(set, S_Popup, 10)
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6417241
+#@#.ad-box
+~job.inshokuten.com,~sexgr.net,~u-yas.dev,~webbtelescope.org##.ad-box:not(#ad-banner)
+
+! Clickadu reinjection
+agupulsa.xyz,bunkrr.*,fapfappy.com,homemoviestube.com,jav.direct,klmanga.*,komikmanhwa.me,lovingsiren.com,manga1001.*,mangaraw.*,mangarawjp.*,mesex.pro,netfapx.com,syosetu.*,vlxyz.tv,xanimeporn.com##+js(acs, WebAssembly, _0x)
+/aas/r45d/vki/*$script,redirect=noop.js
+/^https:\/\/[a-z]{10,12}\.com\/[\/a-z]{2,}\?id=[12]\d{6}$/$script,3p,match-case
+
+! https://github.com/uBlockOrigin/uAssets/issues/18877
+gaminginfos.com##+js(rmnt, script, /userAgent|adb|htmls/)
+gaminginfos.com##+js(aopr, document.write)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/156210
+tinxahoivn.com##+js(rmnt, script, myModal)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17295
+cnx-software.com##div[class*="-single "]
+
+! https://www.bankbazaar.com/ modal
+bankbazaar.com###js-one-tap-login-modal
+bankbazaar.com##.modal-backdrop
+bankbazaar.com##.modal-open:style(overflow: auto !important; padding-right: 0 !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/156243
+ruyashoujo.com##+js(aopr, eazy_ad_unblocker_dialog_opener)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19020
+45.86.86.235##+js(acs, eval, replace)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/156415
+mycloud123.top##+js(aopr, __Y)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/156408
+doodporn.xyz##+js(aopr, __Y)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/156398
+/\/js\/[a-z]j\.js$/$script,~third-party,domain=joysporn.sex
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/156396
+fullporner.com##+js(aopr, dataPopUnder)
+fullporner.com###right1_ad
+
+! https://www.reddit.com/r/uBlockOrigin/comments/1502ou8/asurascanscom_is_it_to_remove_all_content_related/
+||img.alandal.com/promo/$image,domain=asura.gg|asurascans.com
+asura.gg,asurascans.com##a[href][title^="(AD)"]:upward(.bs)
+asura.gg,asurascans.com##.serieslist > ul > li:has-text((AD))
+
+! https://github.com/uBlockOrigin/uAssets/issues/18907
+#@#[id^="google_ads_iframe"]
+~bihann.com,~buhitter.com,~ignboards.com,~nehannn.com,~nanpre.adg5.com,~opopular.com.br,~pointmall.rakuten.co.jp,~stratford-herald.com##[id^="google_ads_iframe"]:not(.rb-adbanner)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19033
+*$xhr,script,redirect-rule=empty,domain=4khd.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/19034
+! https://github.com/AdguardTeam/AdguardFilters/issues/157695
+digimanie.cz,svethardware.cz##+js(set, rabLimit, -1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19036
+romsmania.games##body:style(padding-bottom: 0 !important;)
+romsmania.games##span[data-ez-ph-id]
+romsmania.games##.widget_block
+romsmania.games##.relacionados .aawp:upward(.relacionados)
+
+! https://github.com/uBlockOrigin/uAssets/issues/430
+freeroms.com##a.download:style(visibility: hidden;)
+! https://github.com/uBlockOrigin/uAssets/issues/19037
+freeroms.com##+js(rmnt, script, popunder)
+
+! dll-files.com ad leftover
+dll-files.com##center[style]:has-text(advertisement)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/156440
+@@||promods.net/*.js$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/156602
+iporntoo.com##+js(set-cookie, customscript0, 1)
+
+! f2movies. ru popup
+f2movies.*##+js(aopr, AaDetector)
+
+! http://top16.net popunder
+top16.net##+js(set-cookie, popunder, 1)
+top16.net##+js(set-cookie, visited, 1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19049
+@@||onceagain.mooo.com/prebid.js$script,domain=xapcom.eu
+
+! https://hecker.likesyou.org popup
+hecker.likesyou.org###heck-form > p a[href]:remove-attr(href)
+hecker.likesyou.org###heck-form > p a:style(cursor: pointer !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/156716
+||i.imgur.com/f0FSNTu.jpg
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/156755
+forums-fastunlock.com##+js(rmnt, script, ad_block)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19077
+@@||anisearch.de^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/pull/19082
+tobys.dk##+js(aopr, checkAds)
+tobys.dk#@#.abMessage
+
+! https://github.com/uBlockOrigin/uAssets/issues/19095
+automoto.it##+js(rmnt, script, app_checkext)
+automoto.it##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19102
+sekaikomik.bio##+js(nowoif)
+sekaikomik.bio##^script:has-text(shown_at)
+!#if !cap_html_filtering
+sekaikomik.bio##+js(rmnt, script, shown_at)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/19098
+nyaa.iss.ink##+js(nostif, popUnder)
+/?zone=$script,3p,domain=nyaa.iss.ink
+
+! DriveBot Popup(From Gdflix)
+drivebot.*##+js(nostif, /GoToURL|delay/)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/157022
+||srvy.ninja/assets/adb/js/detector.min.js
+srvy.ninja##+js(set, nudgeAdBlock, noopFunc)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43685
+@@||7plus.com.au^$ghide
+! https://github.com/uBlockOrigin/uAssets/issues/19076
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=7plus.com.au
+
+! https://github.com/uBlockOrigin/uAssets/issues/19121
+modrinth.com##a[rel*="sponsored"]:upward(.normal-page__content > div)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/156mo1m/
+yify-subtitles.org##+js(aopw, counter)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19126
+aliendictionary.com,proverbmeaning.com,tudongnghia.com##+js(acs, document.querySelector, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19124
+waterfall.money##+js(aeld, load, ads)
+
+! https://github.com/uBlockOrigin/uAssets/pull/19130
+fordownloader.com##+js(no-xhr-if, googlesyndication)
+fordownloader.com##+js(rmnt, script, ad blocker)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/156s1p1/how_to_enable_scrolling_on_t_exturecan/
+texturecan.com##+js(set, detectAdBlock, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16602
+katmoviehd.*##+js(acs, Math.imul)
+katmoviehd.*###sidebar > #custom_html-6
+! https://github.com/uBlockOrigin/uAssets/issues/19133
+drawer-opportunity-i-243.site##+js(rpnt, script, rek, r, condition, preroll)
+drawer-opportunity-i-243.site##+js(set, playerConfigs.rek, {})
+
+! https://github.com/uBlockOrigin/uAssets/issues/19134
+||katerionews.com/hot-news/addon.php$frame
+katerionews.com##div[style]:has(> iframe[src^="/hot-news/addon.php"])
+##div[style="position: fixed;top: 0;left: 0;right: 0;bottom:0;z-index: 99999999;background: rgba(0,0,0,.6);"]
+
+! https://7mmtv.me/ssis-808/ popup
+7mmtv.*,telorku.xyz##+js(aopr, doOpen)
+telorku.xyz##+js(acs, WebAssembly, _0x)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19136
+animesgratis.org##+js(ra, href, #clickfakeplayer)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19139
+codelivly.com##^script:has-text(clientHeight)
+!#if !cap_html_filtering
+codelivly.com##+js(rmnt, script, clientHeight)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/19146
+autotrader.com##.sticky-container
+autotrader.com##[data-cmp="alphaShowcase"][data-qaid="cntnr-alpha"]
+autotrader.com##div[data-qaid="cntnr-listings"] > .row > div:not(.display-flex)
+autotrader.com##div[data-qaid="cntnr-listings"] > .row > .display-flex:has(> .bg-periwinkle)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/157utus/articles_on_mindbodygreencom_wont_load/
+www.mindbodygreen.com##div:has(> section > .network-ad)
+www.mindbodygreen.com##aside:style(background: transparent !important;)
+
+! https://studylib.net/doc/18775592/unbiased-estimation ads placeholders
+studylib.net##div[class]:has(> ins)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/1581mkc/nickjrcom_website_showing_antiadblock_notice/
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=nickjr.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/19038
+! https://github.com/uBlockOrigin/uAssets/issues/19125
+link.encrypted-encrypted-encrypted-encrypted-encrypted-encrypted.link###gpujs_link
+
+! https://www.reddit.com/r/uBlockOrigin/comments/8r6448/
+tchatche.com##+js(acs, document.getElementById, /Content/_AdBlock/AdBlockDetected.html)
+tchatche.com##+js(aopw, adBlckActive)
+! https://github.com/uBlockOrigin/uAssets/issues/19156
+tchatche.com##+js(nosiif, AB.html)
+tchatche.com##+js(set, feedBack.showAffilaePromo, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19176
+skill4ltu.eu##+js(aeld, load, adsbygoogle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19181
+194.110.247.242##+js(acs, eval, replace)
+194.110.247.242##.gmr-bannerpopup
+
+! https://www.reddit.com/r/uBlockOrigin/comments/15a5ta4/block_discreet_sotwe_ads/
+! https://github.com/uBlockOrigin/uAssets/issues/19354
+! sotwe.com##.tweet-card .v-responsive.media-carousel-image .v-responsive__content img[alt]:not([alt*="https://t.co/"]):upward(.tweet-card)
+sotwe.com##.tweet-card .v-responsive.media-carousel-image .v-responsive__content img[alt]:not(:matches-attr(alt="/.*\shttps:\/\/t\.co\/[\w]{10}$/")):upward(.tweet-card)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/14vx3pk/
+! https://www.reddit.com/r/uBlockOrigin/comments/14obeil/
+||d2zue0pgsssbc6.cloudfront.net/j/*-prod.js$script,3p
+||d2zue0pgsssbc6.cloudfront.net/j/prod-*.js$script,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/19188
+! https://github.com/uBlockOrigin/uAssets/issues/20505
+*$frame,redirect-rule=noopframe,domain=megaup.net
+megaup.net##.metaRedirectWrapperBottomAds, .ametaReedirectWrapperTopAdd, a[href^="https://tm-offers.gamingadult.com/"]:style(visibility: hidden !important;)
+megaup.net##+js(spoof-css, .metaRedirectWrapperBottomAds\, .ametaReedirectWrapperTopAdd\, a[href^="https://tm-offers.gamingadult.com/"], visibility, visible)
+download.megaup.net##body > div[id]:not([id="downloada"][class="download"]) a:style(visibility: hidden !important;)
+download.megaup.net##body > *:has(iframe[src*="ad.a-ads.com"]) a:style(visibility: hidden !important;)
+download.megaup.net##+js(spoof-css, body > div[id]:not([id="download"][class="download"]) a\, body > *:has(iframe[src*="ad.a-ads.com"]) a, visibility, visible)
+@@||megaup.net/imageads/$image,1p
+@@||download.megaup.net^$script,1p
+download.megaup.net##+js(rpnt, script, /if\(\S+?\)\{document/gms, if(false){document)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/hxzp5h/ublock_fails_to_block_ads_after_clicking_video/
+player.theplatform.com##+js(disable-newtab-links)
+! breakage https://github.com/uBlockOrigin/uAssets/issues/16216
+!||player.theplatform.com^$frame,removeparam=params,domain=nbc.com
+player.theplatform.com##+js(m3u-prune, tvessaiprod.nbcuni.com, /theplatform\.com\/.*?\.m3u8/)
+! https://github.com/uBlockOrigin/uAssets/issues/19194
+@@||assets.adobedtm.com/extensions/*/AppMeasurement.min.js$script,domain=www.nbc.com
+nbc.com##+js(json-prune, avails)
+nbc.com##+js(json-prune-fetch-response, avails)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19191
+! https://github.com/AdguardTeam/AdguardFilters/issues/168256
+designparty.sx##+js(nowoif)
+||designparty.sx/player/jw8/vast.js$script,1p
+||designparty.sx/js/baf.js$script,1p
+||designparty.sx/advertises/
+||kukaj.io/ooo/
+kukaj.io###gldprr
+kukaj.io##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19198
+! https://github.com/AdguardTeam/AdguardFilters/issues/162041
+animexin.vip##+js(acs, eval, replace)
+animexin.vip##+js(acs, onload, eval, /^data:text\/javascript/)
+||binance.org^$xhr,domain=animexin.vip
+
+! https://github.com/uBlockOrigin/uAssets/issues/19167
+! https://github.com/uBlockOrigin/uAssets/issues/19207
+! https://github.com/easylist/easylist/commit/3279eb38679284daea90c485c4b9ad298a6f82f3
+||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$redirect=noopjs,domain=southparkstudios.*,important
+||imasdk.googleapis.com/js/sdkloader/ima3.js$redirect=google-ima.js,domain=southpark.*|southparkstudios.*,important
+||imasdk.googleapis.com/pal/sdkloader/pal.js$redirect-rule=noop.js,domain=southpark.*|southparkstudios.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/19210
+rain-alarm.com###main_canvas > div[id^="google"]
+rain-alarm.com###main_canvas > div:not(div[id^="google"]):style(width: 100% !important;)
+
+! https://adultdeepfakes. com/videos/23935-maddie-ziegler-porn-deepfake/ fake player
+adultdeepfakes.com##+js(set-local-storage-item, adf_plays, 2)
+adultdeepfakes.com##+js(rpnt, script, adv_, , condition, flashvars)
+##.fp-player > div[style="position: absolute; inset: 0px; overflow: hidden; z-index: 160; background: transparent; display: block;"]
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6582008
+||bmcdn5.com^$script,redirect=noop.js
+
+! https://github.com/NanoMeow/QuickReports/issues/3179
+money.cnn.com##section.column:has(> #moneySponsors)
+! https://github.com/uBlockOrigin/uAssets/issues/15024#issuecomment-1256726575
+||warnermediacdn.com/csm/*&caid=$xhr,removeparam=caid,domain=cnn.com
+! https://www.reddit.com/r/uBlockOrigin/comments/144h6i5/cnnespanolcnncom_videoad/jngep7z/
+||warnermediacdn.com/csm/*afid=$xhr,removeparam=afid,domain=cnn.com
+! https://www.reddit.com/r/uBlockOrigin/comments/15dcw8o/how_to_block_new_cnn_video_ads/
+||warnermediacdn.com/csm/*app_csid=$xhr,removeparam=app_csid,domain=cnn.com
+||warnermediacdn.com/csm/*conf_csid=$xhr,removeparam=conf_csid,domain=cnn.com
+! https://github.com/uBlockOrigin/uAssets/issues/17071
+||medium.ngtv.io/v2/media/*&ssaiProfile=$xhr,removeparam=ssaiProfile,domain=~cnn.com
+! cnn top ads
+cnn.com##.ad-slot-header__wrapper:style(display: none !important; top: 0 !important)
+
+! https://github.com/bogachenko/fuckfuckadblock/issues/446
+/adblocker.js$domain=gameophobias.com|hindimearticles.net|solution-hub.com
+dinnerexa.com,dinneroga.com,gameophobias.com,hindimearticles.net,solution-hub.com,thenextplanet1.*,tnp98.xyz##+js(nowoif)
+thenextplanet1.*,tnp98.xyz##+js(nostif, window.location.href, 300)
+||deliv12.com^
+||welaadmi.click^
+gambare.xyz,thenextplanet1.*###loading-timer
+
+! https://github.com/bogachenko/fuckfuckadblock/issues/440
+@@||advnetwork.net/advertising/*/advertising.js$xhr,domain=bsshotel.it
+
+! https://github.com/uBlockOrigin/uAssets/issues/19223
+stuff.tv##.wp-block-kelseymedia-blocks-block-squirrel-embed
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/157701
+! https://github.com/uBlockOrigin/uAssets/issues/22019
+javindo.eu.org##+js(acs, $, xepo_ads)
+javindo.eu.org,chindohot.site##+js(rmnt, script, deblocker)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/157742
+@@*$ghide,domain=tv.shoot-yalla.live|shoot-yalla.to|shoot-yalla.tv|yalla-shoots.tv|yalla-shoot-tv.io
+tv.shoot-yalla.live,shoot-yalla.to,shoot-yalla.tv,yalla-shoots.tv,yalla-shoot-tv.io##.demand-supply
+
+! https://github.com/uBlockOrigin/uAssets/issues/19229
+*$script,redirect-rule=noopjs,domain=2the.space|paylinks.cloud
+||ourtecads.com/assets/$script,redirect-rule=noopjs
+paylinks.cloud##div[id^="idc"][style]
+
+! 2embed. cc popup
+2embed.*##+js(aopr, mm)
+2embed.*##^script:has-text(break;case)
+
+! https://ophim.vip/ popup and ads
+ophim.vip##+js(rmnt, script, /url_key|adHtml/)
+ophim.vip##+js(nowoif)
+ophim.vip###catfish
+ophim.vip##.ad-container
+ophim.vip##.jw-logo
+ophim.vip##.right-box-content > div:has(> #ad-container)
+
+! https://apkhihe. com/gb-whatsapp/download/ download timer
+apkhihe.com##+js(nano-sib, show_download_links)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19237
+lordchannel.com##+js(nostif, sadbl)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19245
+schools.snap.app##div.ant-modal-root:has(img[alt="Advertisement"])
+schools.snap.app##body:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19250
+@@||audi-sport.net^$ghide
+/siropu/am/core.min.js$script,important,from=~audi-sport.net|~hifiwigwam.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/19231
+/ads/js/*$badfilter
+
+! https://www.reddit.com/r/uBlockOrigin/comments/15dfa2q/
+dvm360.com##+js(nosiif, analytics.initialized)
+dvm360.com##.site-wrapper:style(opacity:1!important;visibility:visible!important)
+dvm360.com##body:style(overflow:auto!important)
+dvm360.com##.welcome-ad-wrapper
+dvm360.com###welcome-ad-container
+
+! https://github.com/uBlockOrigin/uAssets/issues/19251
+! https://github.com/uBlockOrigin/uAssets/issues/19364
+teknisitv.com,paylaterin.com##+js(aost, decodeURIComponent, autoptimize)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/15gtlgy/site_detecting_ubo_httpswwwinterestconz/
+||interest.co.nz/modules/custom/presspatron/js/pp-ablock-banner.js$script
+
+! https://www.reddit.com/r/uBlockOrigin/comments/dv0n5w/torrentgalaxy_ads/
+! https://github.com/uBlockOrigin/uAssets/issues/19729
+*$script,3p,denyallow=bootstrapcdn.com|disqus.com|disquscdn.com|jsdelivr.net|jwpcdn.com|fastly.net|fastlylb.net|jquery.com|hwcdn.net|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com,domain=torrentgalaxy.*|tgx.rs
+torrentgalaxy.to,tgx.rs##+js(aost, String.prototype.charCodeAt, $)
+torrentgalaxy.to,tgx.rs##.alert
+torrentgalaxy.to,tgx.rs##div[class="col-lg-2 col-sm-12 smallhide"] > div:has(> center > div[style^="margin-bottom"])
+torrentgalaxy.to,tgx.rs##a[href^="/hub.php"] img
+
+! https://forums.lanik.us/viewtopic.php?t=48204-gplastra-com
+gplastra.com##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19272
+eurosport.*##.ad
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/158353
+kurakura21.space##+js(noeval-if, UserCustomPop)
+/pub?id=$script,3p
+/in/p/?spot_id=$frame,3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/15k1m76/
+riuria.beauty##+js(no-fetch-if, imasdk.googleapis.com)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19291
+turkishaudiocenter.com##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19714! https://www.reddit.com/r/uBlockOrigin/comments/16i9fco/blocking_a_specific_script_on_a_web_page/
+! lifestyle.bg,money.bg,news.bg,topsport.bg,webcafe.bg##+js(rmnt, script, /charAt|innerHTML/)
+lifestyle.bg,money.bg,news.bg,topsport.bg,webcafe.bg##+js(no-fetch-if, method:GET)
+lifestyle.bg,money.bg,news.bg,topsport.bg,webcafe.bg##+js(nostif, google)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19308
+mtg-print.com##+js(no-fetch-if, ads)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/15m7iew/disable_adblock_popup_on_thi_site/
+scripai.com##+js(nostif, /adblock/i)
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6676949
+*$image,redirect-rule=1x1.gif,domain=shrinkbit.in
+
+! https://www.reddit.com/r/uBlockOrigin/comments/15nq2p4/ozulscans_anti_ad_block/
+ozulmanga.com##+js(set, checkAdBlocker, noopFunc)
+*$xhr,3p,method=head,redirect-rule=nooptext:-1,to=~adblockanalytics.com|~doubleclick.net|~pagead2.googlesyndication.com
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6702755
+exactpay.online##+js(nostif, offsetWidth)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19339
+e-player-stream.app##+js(aost, document.getElementById, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19340
+eftacrypto.com##+js(aeld, load, htmls)
+
+! https://jbbs.shitaraba.net/bbs/read.cgi/internet/25463/1618326670/196
+bethaniebu.com##+js(aost, document.getElementById, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8967
+play.history.com##+js(json-prune, data.reg)
+@@||play.history.com^$ghide
+||amazon-adsystem.com/*/apstag.js$script,redirect=noopjs,domain=aetv.com|aetnd.com|history.com
+||mssl.fwmrm.net/*/AdManager.js$script,redirect=noopjs,domain=history.com
+@@||mavencoalition.io^$xhr,domain=history.com
+@@||aetnd.com^$ghide
+||play.aetv.com/vendor/conviva-thePlatform-plugin.js$script
+||play.aetv.com/vendor/conviva-core-sdk.js$script
+||play.aetv.com/vendor/branch.js$script
+||play.aetv.com/vendor/Samba.min.js$script
+||play.aetv.com/vendor/amplitude.js$script
+||play.aetv.com/vendor/at.js$script
+||play.aetv.com/vendor/MediaSDK.min.js$script
+history.com#@#.m-header-ad
+history.com#@#.m-in-content-ad-row
+history.com##aside:has([class*="-ad-"])
+history.com##+js(no-xhr-if, time-events)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/15pq26a/receiving_video_advertisements_on_radio_stations/
+||ssiadnweb.securenetsystems.net^
+
+! https://github.com/uBlockOrigin/uAssets/issues/19742
+securenetsystems.net##+js(rmnt, script, adblock)
+
+! https://ads.remix.es/advertisement.js anti-adb
+edmdls.com,freshremix.net,scenedl.org##+js(set, loadpagecheck, noopFunc)
+
+! https://hentaibooty.com/ popup
+hentaibooty.com##+js(acs, jQuery, popupAt)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/15q63iq/cant_block_script/
+touguatize.monster##+js(rmnt, script, pop.target)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/158680
+@@||google-analytics.com/debug/collect?$xhr,domain=10bye.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/19342
+txori.com##+js(nostif, adblock)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/159211
+olarila.com##+js(no-fetch-if, googlesyndication)
+olarila.com##+js(nostif, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19360
+miniwebtool.com##^script:has-text(adblock)
+!#if !cap_html_filtering
+miniwebtool.com##+js(rmnt, script, adblock)
+!#endif
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/159285
+freepikdownloader.com##+js(aeld, load, modal_blocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19372
+*$script,redirect-rule=noopjs,domain=channel5.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/e8xapo/hide_ads_on_trakt/
+trakt.tv##:xpath("//*[(text()='Advertisement')]"):upward(1)
+! https://github.com/uBlockOrigin/uAssets/issues/19373
+trakt.tv##+js(set, hucksterInit, trueFunc)
+trakt.tv##+js(set, artemisDisplays, [])
+trakt.tv##+js(set, artemisItemNames, [])
+trakt.tv##.snigel
+
+! https://www.reddit.com/r/uBlockOrigin/comments/15tco62/adblock_detected_at/
+deletedspeedstreams.blogspot.com##+js(nostif, adblock)
+||servedbyadbutler.com^$image,redirect-rule=1x1.gif,domain=deletedspeedstreams.blogspot.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/159404
+video.q34r.org##+js(set, adblockcheck, false)
+onscreens.me,video.q34r.org##+js(aopr, doSecondPop)
+onscreens.me,video.q34r.org##+js(aopr, BetterJsPop)
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6741758
+||faucettrx.store/default.php
+
+! https://github.com/uBlockOrigin/uAssets/issues/19396
+freepasses.org##+js(rmnt, script, deblocker)
+freepasses.org##+js(aeld, click, isOpened)
+
+! https://www.startpage.com/ proxy ads
+eu-proxy.startpage.com##+js(json-prune, playerResponse.adPlacements playerResponse.playerAds adPlacements playerAds)
+eu-proxy.startpage.com##+js(set, ytInitialPlayerResponse.playerAds, undefined)
+eu-proxy.startpage.com##+js(set, ytInitialPlayerResponse.adPlacements, undefined)
+eu-proxy.startpage.com##+js(set, playerResponse.adPlacements, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19391
+gktech.uk##+js(no-fetch-if, ads)
+gktech.uk##+js(aopr, onscroll)
+gktech.uk###overlay-ad
+gktech.uk##div[id^="wpsafe-wait"]
+gktech.uk###wpsafe-link, #wpsafe-generate:style(display: block !important;)
+
+! https://x2download.com/ ad caller
+x2download.com##+js(aopr, GeneratorAds)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/159335
+exego.app##+js(set, blurred, false)
+exego.app##+js(set, document.hasFocus, trueFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19403
+crictracker.com#@#.ads-box
+crictracker.com##div[id^="div-ad-gpt-"]
+crictracker.com##div[id^="div-ad-desk-"]
+crictracker.com##article > div[style="height:270px"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/16083
+@@||dragontea.ink^$ghide
+@@*$image,script,xhr,domain=dragontea.ink
+*$frame,redirect-rule=noopframe,domain=dragontea.ink
+||securepubads.g.doubleclick.net/pagead/adview?$image,important,redirect=1x1.gif,domain=dragontea.ink
+||pagead2.googlesyndication.com/pcs/activeview?$image,redirect=1x1.gif,important,domain=dragontea.ink
+||googleads.g.doubleclick.net/pagead/interaction/?$image,important,redirect=1x1.gif,domain=dragontea.ink
+||cm.adform.net/pixel?adform_pid=$image,important,redirect=1x1.gif,domain=dragontea.ink
+||www.google.com/pagead/drt/ui|$image,important,redirect=1x1.gif,domain=dragontea.ink
+||match.adsby.bidtheatre.com/adformmatch?adform_id=$image,redirect=1x1.gif,important,domain=dragontea.ink
+||google.*/ads/ga-audiences?$image,redirect=1x1.gif,important,domain=dragontea.ink
+||google-analytics.com^$image,redirect=1x1.gif,important,domain=dragontea.ink
+||cdn.ampproject.org^$script,redirect=noopjs,important,domain=dragontea.ink
+
+! https://github.com/uBlockOrigin/uAssets/issues/18260
+@@||falixnodes.net^$ghide
+@@||static.ads-twitter.com^$xhr,domain=mqrio.dev
+||analytics.twitter.com^$image,redirect-rule=1x1.gif
+@@*$image,script,xhr,domain=client.falixnodes.net
+client.falixnodes.net##html[amp4ads][i-amphtml-no-boilerplate]:has(script[src^="https://cdn.ampproject.org/rtv/"]) > body > *:style(opacity: 0 !important; pointer-events: none !important;)
+client.falixnodes.net##html:not([class]) > body[marginwidth="0"][marginheight="0"]
+client.falixnodes.net##html:not([class]) > body[onload="window.avCallback();"][style]
+client.falixnodes.net##html:not([class]) > body:not([class]) div[id^="ftdiv"]
+client.falixnodes.net##html:not([class]) #ad_unit
+client.falixnodes.net##html:not([class], [id]) > body:not([class], [id])
+client.falixnodes.net##ins[id^="gpt_unit_/"][style="display: block !important; width: 100vw !important; height: 100vh !important; inset: 0px auto auto 0px !important; clear: none !important; float: none !important; margin: 0px !important; max-height: none !important; max-width: none !important; opacity: 1 !important; overflow: visible !important; padding: 0px !important; position: fixed !important; vertical-align: baseline !important; visibility: visible !important; z-index: 2147483647 !important; background: transparent !important;"]
+client.falixnodes.net##+js(rmnt, script, showadblock)
+||ups.analytics.yahoo.com^$image,important,domain=client.falixnodes.net
+||pr-bh.ybp.yahoo.com/sync/$image,important,domain=client.falixnodes.net
+||facebook.com/tr/$image,important,domain=client.falixnodes.net
+||securepubads.g.doubleclick.net^$image,removeparam,domain=client.falixnodes.net
+||track1.aniview.com/track?$image,removeparam,domain=client.falixnodes.net
+||cs.admanmedia.com^$image,important,domain=client.falixnodes.net
+||aax.amazon-adsystem.com^$image,important,domain=client.falixnodes.net
+||pagead2.googlesyndication.com/pagead/gen_204?$image,important,domain=client.falixnodes.net
+||pagead2.googlesyndication.com/pcs/activeview?xai=$image,important,domain=client.falixnodes.net
+||criteo.com/tpd?dd=$image,important,domain=client.falixnodes.net
+||static.criteo.net/images/pixel.gif?ch=$image,important,redirect=1x1.gif,domain=client.falixnodes.net
+||px.moatads.com^$image,important,redirect=1x1.gif,domain=client.falixnodes.net
+||3lift.com^$image,removeparam,domain=client.falixnodes.net
+||qvdt3feo.com^$important,domain=falixnodes.net
+*gdpr_consent$3p,image,removeparam,domain=client.falixnodes.net
+||pagead2.googlesyndication.com^$xhr,important,domain=client.falixnodes.net
+
+! https://www.reddit.com/r/uBlockOrigin/comments/15wqphp/anti_ad_block_needed/
+||shroomers.app/static/modules/base/js/shr-ads-enforcer.js
+shroomers.app##+js(set, isAdBlockerActive, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19418
+||everyonerecipes.com/index.php?$xhr,3p
+novelhall.com##+js(rmnt, script, axios)
+||aitoolnet.com^$image,domain=novelhall.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/19419
+myfxbook.com##+js(nostif, /adblock/i)
+
+! https://github.com/abp-filters/abp-filters-anti-cv/pull/1416
+iusedtobeaboss.com##+js(aeld, mousedown, pop.doEvent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19422
+nicekkk.com##+js(acs, decodeURIComponent, "'shift'")
+/$.min.js|$script,3p
+/ng-device-detector.min.js|$script,3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/159736
+hes-goal.net##^script:has-text(ad block)
+!#if !cap_html_filtering
+hes-goal.net##+js(rmnt, script, ad block)
+!#endif
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/159769
+freepdfcomic.com##+js(nostif, ad_display)
+freepdfcomic.com#@##adframe:not(frameset):not([style^="position: absolute; left: -5000px"])
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/159520
+thestar.com##+js(aost, document.createElement, detect)
+thestar.com##+js(nano-stb, bFired, *)
+thestar.com##+js(nano-sib, scrollIncrement, *)
+thestar.com##.viafoura-engagement-starter
+thestar.com##.loadingLI:upward(.tncms-block)
+thestar.com##.main-sidebar:has(> #sticky-side-secondary-spacer)
+thestar.com###site-navbar-container, #site-top-nav-container:style(padding-top: 10px !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ci5vky/antiadblocker_dailymailcouk/
+! https://github.com/uBlockOrigin/uAssets/issues/17713
+! https://github.com/uBlockOrigin/uAssets/issues/16632
+dailymail.co.uk##+js(aopr, Notification)
+@@||cmp.dmgmediaprivacy.co.uk^$script,domain=dailymail.co.uk
+! dailymail.co.uk##+js(set, atob, trueFunc)
+||dailymail.co.uk/static/mol-adverts/demo/
+! https://github.com/NanoMeow/QuickReports/issues/1616
+dailymail.co.uk##.pufftext > .sponsored:upward(3)
+dailymail.co.uk##.pufftext:has-text(/SPONSORED/):upward(2)
+dailymail.co.uk##.mol-ads-label-container
+! https://github.com/NanoMeow/QuickReports/issues/4042
+! https://github.com/uBlockOrigin/uAssets/issues/19857
+games.dailymail.co.uk##+js(nano-sib)
+@@||cdn.arkadiumhosted.com/advertisement/*-ads.js$script,domain=games.dailymail.co.uk
+arcade.dailygazette.com,games.dailymail.co.uk##+js(rpnt, script, "isAdBlockerEnabled":true, "isAdBlockerEnabled":false)
+games.dailymail.co.uk##display-ad-component, [class^="DisplayAd"], .ark-ad-message:style(visibility: collapse !important)
+games.dailymail.co.uk##div.RightRail__displayAdRight___1U1Q7llw
+games.dailymail.co.uk##.GameTemplate__displayAdTop___3kN-G-hd
+! https://www.reddit.com/r/uBlockOrigin/comments/135ix4x/
+||dailymail.co.uk/feeds/commercial/topVideos.json
+||dailymail.co.uk/*/client/sync/fpc?$image
+
+! https://m.baomoi.com/the-gioi.epi - sponsored posts
+m.baomoi.com###content-main a[title][href*="?staticParams="]:upward(span)
+
+! https://gtainside.com - Ad placeholder on main, mod and download pages
+gtainside.com##div.col-sm-6:has(> div.ad)
+gtainside.com##div[style]:has(> div#gtainside_com_sidebar)
+gtainside.com##div.bar_container:has(> div.bar_headline:has-text(Advertising))
+gtainside.com##div[style]:has(> div.ads)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/159491
+amateurporn.co##+js(set, isAdBlockActive, false)
+amateurporn.co##+js(set, flashvars.popunder_url, '')
+
+! https://github.com/uBlockOrigin/uAssets/issues/14766
+*/wp-content/plugins/uncopy/
+
+! https://github.com/uBlockOrigin/uAssets/issues/19450
+filmisub.cc##+js(no-xhr-if, ads)
+filmisub.cc##+js(aost, setTimeout, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6454
+di.fm##+js(set, di.VAST.XHRURLHandler, noopFunc)
+! https://github.com/uBlockOrigin/uAssets/issues/19455
+di.fm##+js(no-xhr-if, googlesyndication)
+di.fm##+js(set, di.app.WebplayerApp.Ads.Supervisor.eligibleForPreroll, trueFunc)
+di.fm##+js(set, di.app.WebplayerApp.Ads.Supervisor.eligibleForMidroll, trueFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19430
+||cdn77.org^$3p,domain=pricebefore.com
+
+! admiral
+! https://github.com/uBlockOrigin/uAssets/issues/20165! https://www.reddit.com/r/uBlockOrigin/comments/17vg12r/antiad_blocker_on_clutchpointscom/
+! https://github.com/uBlockOrigin/uAssets/issues/20516
+! https://github.com/uBlockOrigin/uAssets/issues/20777
+! https://github.com/uBlockOrigin/uAssets/issues/21369
+advocate.com,alternet.org,androidcure.com,arobasenet.com,attackofthefanboy.com,bodytr.com,cbssports.com,cleveland.com,clutchpoints.com,cultofmac.com,currentaffairs.gktoday.in,dailycaller.com,digitalmusicnews.com,dogtime.com,dotesports.com,epicstream.com,fallbrook247.com,feral-heart.com,gamesgames.com,gamerevolution.com,gazettenet.com,girlsgogames.co.uk,insidenova.com,jetztspielen.de,kasvekuvvet.net,leitesculinaria.com,nbcnews.com,notevibes.com,practicalpainmanagement.com,prad.de,progameguides.com,pwinsider.com,ranker.com,realityblurb.com,ruinmyweek.com,sanangelolive.com,sanfoundry.com,selfhacked.com,siliconera.com,simpleflying.com,son.co.za,sporcle.com,stealthoptional.com,stylecaster.com,thesportster.com,upi.com,viraliq.com,visualcapitalist.com,wegotthiscovered.com,primagames.com##+js(aopr, googletag)
+onmsft.com##+js(acs, document.createElement, googletag)
+247sports.com,audiotools.pro,audizine.com,blackenterprise.com,cheatsheet.com,cwtv.com,esportstales.com,forums.hfboards.com,fresnobee.com,hancinema.net,hemmings.com,informazionefiscale.it,magesy.*,magesypro.pro,money.it,motorbiscuit.com,movieweb.com,omg.blog,pastes.io,sporcle.com,thegamer.com,thenerdstash.com,titantv.com,twinfinite.net,wnd.com,worldpopulationreview.com,wral.com##+js(acs, document.createElement, admiral)
+familyminded.com,foxvalleyfoodie.com,merriam-webster.com,news.com.au,playstationlifestyle.net,sportsnaut.com,tempumail.com,toledoblade.com##+js(aopr, __cmpGdprAppliesGlobally)
+pc-builds.com,qtoptens.com,reuters.com,today.com,videogamer.com,wrestlinginc.com##+js(set, admiral, noopFunc)
+!#if cap_html_filtering
+abc17news.com,al.com,allaboutthetea.com,allmovie.com,allmusic.com,androidpolice.com,antyradio.pl,artforum.com,artnews.com,avherald.com,awkwardmom.com##^script:has-text('"v4ac1eiZr0"')
+bailiwickexpress.com,blogher.com,briefeguru.de##^script:has-text('"v4ac1eiZr0"')
+carmagazine.co.uk,cattime.com,cbr.com,cbssports.com,chaptercheats.com,cleveland.com,collider.com,comingsoon.net,commercialobserver.com,competentedigitale.ro##^script:has-text('"v4ac1eiZr0"')
+dailyvoice.com,decider.com,didyouknowfacts.com,dogtime.com,dualshockers.com,dustyoldthing.com##^script:has-text('"v4ac1eiZr0"')
+femestella.com,footwearnews.com,freeconvert.com##^script:has-text('"v4ac1eiZr0"')
+gamerant.com,gfinityesports.com,givemesport.com,gulflive.com##^script:has-text('"v4ac1eiZr0"')
+howtogeek.com,insider-gaming.com,insurancejournal.com##^script:has-text('"v4ac1eiZr0"')
+kion546.com,lehighvalleylive.com,liveandletsfly.com,localnews8.com,lonestarlive.com##^script:has-text('"v4ac1eiZr0"')
+makeuseof.com,mardomreport.net,masslive.com,milestomemories.com,mlive.com,modernmom.com,momtastic.com,movieweb.com,musicfeeds.com.au##^script:has-text('"v4ac1eiZr0"')
+nationalreview.com,nj.com,nordot.app,nypost.com##^script:has-text('"v4ac1eiZr0"')
+oakvillenews.org,observer.com,oregonlive.com##^script:has-text('"v4ac1eiZr0"')
+pagesix.com,pennlive.com##^script:has-text('"v4ac1eiZr0"')
+qtoptens.com,realgm.com,robbreport.com##^script:has-text('"v4ac1eiZr0"')
+sandrarose.com,screenrant.com,sheknows.com,sherdog.com,sidereel.com,silive.com,simpleflying.com,spacenews.com,superherohype.com,syracuse.com##^script:has-text('"v4ac1eiZr0"')
+thecelticblog.com,thecurvyfashionista.com,thefashionspot.com,thegamer.com,thegamescabin.com,timesnews.net,tutsnode.org,tvline.com##^script:has-text('"v4ac1eiZr0"')
+viralviralvideos.com##^script:has-text('"v4ac1eiZr0"')
+wimp.com,woojr.com,xda-developers.com##^script:has-text('"v4ac1eiZr0"')
+cheatsheet.com,pwinsider.com##^script:has-text(admiral)
+!#else
+abc17news.com,al.com,allaboutthetea.com,allmovie.com,allmusic.com,androidpolice.com,antyradio.pl,artforum.com,artnews.com,avherald.com,awkwardmom.com##+js(rmnt, script, '"v4ac1eiZr0"')
+bailiwickexpress.com,blogher.com,briefeguru.de##+js(rmnt, script, '"v4ac1eiZr0"')
+carmagazine.co.uk,cattime.com,cbr.com,cbssports.com,chaptercheats.com,cleveland.com,collider.com,comingsoon.net,commercialobserver.com,competentedigitale.ro##+js(rmnt, script, '"v4ac1eiZr0"')
+dailyvoice.com,decider.com,didyouknowfacts.com,dogtime.com,dualshockers.com,dustyoldthing.com##+js(rmnt, script, '"v4ac1eiZr0"')
+femestella.com,footwearnews.com,freeconvert.com##+js(rmnt, script, '"v4ac1eiZr0"')
+gamerant.com,gfinityesports.com,givemesport.com,gulflive.com##+js(rmnt, script, '"v4ac1eiZr0"')
+howtogeek.com,insider-gaming.com,insurancejournal.com##+js(rmnt, script, '"v4ac1eiZr0"')
+kion546.com,lehighvalleylive.com,liveandletsfly.com,localnews8.com,lonestarlive.com##+js(rmnt, script, '"v4ac1eiZr0"')
+makeuseof.com,mardomreport.net,masslive.com,milestomemories.com,mlive.com,modernmom.com,momtastic.com,movieweb.com,musicfeeds.com.au##+js(rmnt, script, '"v4ac1eiZr0"')
+nationalreview.com,nj.com,nordot.app,nypost.com##+js(rmnt, script, '"v4ac1eiZr0"')
+oakvillenews.org,observer.com,oregonlive.com##+js(rmnt, script, '"v4ac1eiZr0"')
+pagesix.com,pennlive.com##+js(rmnt, script, '"v4ac1eiZr0"')
+qtoptens.com,realgm.com,robbreport.com##+js(rmnt, script, '"v4ac1eiZr0"')
+sandrarose.com,screenrant.com,sheknows.com,sherdog.com,sidereel.com,silive.com,simpleflying.com,spacenews.com,superherohype.com,syracuse.com##+js(rmnt, script, '"v4ac1eiZr0"')
+thecelticblog.com,thecurvyfashionista.com,thefashionspot.com,thegamer.com,thegamescabin.com,timesnews.net,tutsnode.org,tvline.com##+js(rmnt, script, '"v4ac1eiZr0"')
+viralviralvideos.com##+js(rmnt, script, '"v4ac1eiZr0"')
+wimp.com,woojr.com,xda-developers.com##+js(rmnt, script, '"v4ac1eiZr0"')
+cheatsheet.com,pwinsider.com##+js(rmnt, script, admiral)
+!#endif
+||imasdk.googleapis.com/js/sdkloader/ima3.js$domain=givemesport.com,important
+superherohype.com##a.wp-block-button__link:is([href^="https://amzn.to/"], [href^="https://www.amazon.com/"])
+sanfoundry.com##.sf-desktop-ads
+||succeedscene.com/ads_*/ads.load.js$script,redirect-rule=noop.js
+||qtoptens.com^$csp=worker-src 'none'
+! https://github.com/uBlockOrigin/uAssets/issues/21552
+! https://github.com/uBlockOrigin/uAssets/issues/20059#issuecomment-1879665761
+! https://github.com/uBlockOrigin/uAssets/issues/19707#issuecomment-1888064204
+androidpolice.com,cbr.com,dualshockers.com,gamerant.com,thegamer.com##+js(aeld, error, blocker)
+! https://www.reddit.com/r/uBlockOrigin/comments/196w11l/admiral_antiadblock_on_httpsswimsuitsicom/
+||si.com/htdocs/js/admiral/init.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/19468
+yt2conv.com##+js(ra, onclick, a#downloadbtn[onclick^="window.open"], stay)
+yt2conv.com##+js(nowoif)
+
+! https://m.blogtruyenmoi.com/ - popup
+blogtruyenmoi.com##+js(aeld, click, alink)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/161te0y/
+levelupalone.com##+js(aopr, popns)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21338
+bagi.co.in,keran.co##+js(rmnt, script, /charAt|XMLHttpRequest/)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/160164
+getthit.com##+js(no-fetch-if, /ads|googletagmanager/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19484
+movies4u.*##+js(nowoif)
+movies4u.*##.ads-btns
+
+! https://github.com/uBlockOrigin/uAssets/issues/19477
+!anichin.top##+js(aost, Promise, https)
+anichin.top,hlsplayer.top##+js(nowoif)
+zuperdrive.my.id##+js(nowoif, !zuperdrive)
+zuperdrive.my.id###iframeAds
+zuperdrive.my.id###directAds
+||vdhostplayer.my.id^$frame,domain=zuperdrive.my.id
+
+! https://github.com/uBlockOrigin/uAssets/issues/21569
+techedubyte.com##+js(set, checkAdsStatus, noopFunc)
+techedubyte.com##+js(noeval-if, deblocker)
+techedubyte.com##.in-article
+techedubyte.com##[href^="https://betwinnerlive.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/19506
+fescrypto.com##+js(aeld, load, htmls)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19510
+gtxgamer.fr###custom_html-5
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/160334
+mcafee-com.com##+js(acs, document.createElement, adsBlocked)
+mcafee-com.com##+js(set, document.hasFocus, trueFunc)
+mcafee-com.com##+js(set, count, 0)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19517
+69x.online##+js(nowoif)
+69x.online##+js(set, adblockcheck, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/1641tjs/
+hentai.tv##+js(set-cookie, inter, 1, , reload, 1)
+hentai.tv##^responseheader(location)
+hentai.tv##.fr-mb
+hentai.tv##.max-w-screen
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6862552
+cdrab.com,offerinfo.net###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+viewfr.com##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19541
+heavy.com##+js(no-fetch-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19547
+biblestudytools.com,christianheadlines.com,ibelieve.com##^script:has-text(AdBlockEnabled)
+!#if !cap_html_filtering
+biblestudytools.com,christianheadlines.com,ibelieve.com##+js(rmnt, script, AdBlockEnabled)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/19540
+czxxx.org##+js(set, adblockcheck, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19551
+@@||ads.pubmatic.com/AdServer/*/pwt.js$script,domain=ondemandkorea.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/19571
+down.dataaps.com##+js(rmnt, script, window.open)
+
+! https://av01.media ad, popunder
+av01.media##+js(acs, document.createElement, sliding)
+av01.media##+js(ra, onclick, a[onclick])
+av01.media##.row > div.col-lg-4:has(> div#tile-ad)
+av01.media##iframe[src="javascript:window.location.replace(this.frameElement.dataset.link)"]
+
+! https://github.com/AdguardTeam/AdguardFilters/commit/2f2d4522c3ab95be307ee56826067d338f6faef8
+/ld/ifk?zoneid=
+
+! https://github.com/uBlockOrigin/uAssets/issues/19586
+kuponigo.com##+js(rmnt, script, window.location.replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19581
+kimcilonly.site##+js(rmnt, script, /$.*open/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19590
+okleak.com##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19599
+cryptoearns.com##+js(rmnt, script, Brave)
+cryptoearns.com##+js(aopw, infoey)
+
+
+! https://github.com/uBlockOrigin/uAssets/issues/19596
+||ivg.it/wp-content/plugins/edinet_giornali_swg_plugin/js/ackdet.js
+
+! https://www.inxxx.com popunder
+inxxx.com##+js(rmnt, script, egoTab)
+/lvesnk.html?zoneid=$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/19602
+ipaspot.app##+js(rmnt, script, abDetectorPro)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19601
+||fullhd4k.com/*.gif$image
+fullhd4k.com##[src*="adv"]
+||fullhd4k.com/backend/movie/Ads/$media,redirect=noopmp3-0.1s
+||fullhd4k.com/images/nivo/close.png$image
+fullhd4k.com##+js(nano-sib)
+fullhd4k.com##[href="https://www.jumboslot.com/"]
+fullhd4k.com##.jw-reset.jw-button-color.jw-icon-display.jw-icon
+
+! https://github.com/uBlockOrigin/uAssets/issues/19608
+galaxyos.net##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19609
+||setfilmizlesene.*/ads/$media,redirect=noopmp3-0.1s
+setfilmizlesene.com###prerollVideo2
+setfilmizlesene.com###reklamCode
+
+! https://github.com/uBlockOrigin/uAssets/issues/19610
+@@||cloudnovel.net^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/160907
+embedwish.com,filelions.live##+js(rmnt, script, /$.*(css|oncontextmenu)/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19614
+msonglyrics.com##+js(rmnt, script, onerror)
+
+! https://www.vstdrive.in/2022/06/adobe-after-effects-2022-v225053-win-full-version.html - URL manipulation
+vstdrive.in##+js(aopr, Base64)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19623
+jenismac.com##+js(rmnt, script, /eval.*RegExp/)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/160317
+yunjiema.top##+js(rmnt, script, adb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19630
+movie-th.tv##+js(set, ads, [])
+||movie-th.tv/*.gif$image
+
+! https://reddit.com/r/uBlockOrigin/s/Xtw1NzDUd8
+blackhatworld.com##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19631
+juegos.eleconomista.es##+js(nano-sib)
+
+! https://github.com/uBlockOrigin/uAssets/pull/19635
+leakslove.net##+js(rmnt, script, /$.*(css|oncontextmenu)/)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/161014
+bchtechnologies.com##+js(rmnt, script, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19644
+vxetable.cn##+js(rmnt, script, wwads)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/16c2v56/ublock_team_add_this_type_of_rules/
+noticiasdehoje.biz##+js(set-cookie, Ads, 1)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/161034
+pureleaks.net##+js(aopw, popName)
+
+! https://github.com/uBlockOrigin/uAssets/discussions/19650#discussion-5603419
+subindojav.*##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16588
+@@||pagead2.googlesyndication.com^$script,domain=chromeactions.com|mixesoft.com|mycinema.pro
+||chromeactions.com^$csp=frame-src
+||mixesoft.com^$csp=frame-src
+||mycinema.pro^$csp=frame-src
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/161092
+! https://github.com/AdguardTeam/AdguardFilters/issues/161091
+backfirstwo.site,jewelavid.com,nizarstream.com##+js(rmnt, script, /\[\'push\'\]/)
+backfirstwo.site,jewelavid.com,nizarstream.com##^script:has-text(push)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19659
+snapwordz.com,toolxox.com##+js(rmnt, script, /adblock/i)
+snapwordz.com,toolxox.com##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19660
+afly.pro##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19667
+iwanttfc.com##+js(set, settings.adBlockDetectionEnabled, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19668
+torrentdofilmeshd.net##+js(acs, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19671
+filmesdostorrenthd.net##+js(no-xhr-if, ads)
+*$script,3p,denyallow=storage.googleapis.com,domain=filmesdostorrenthd.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/19670
+@@*$ghide,domain=usandoapp.com|fazercurriculo.online
+obaianinho.com##+js(nano-sib, , *, 0.001)
+
+! nutraingredients-asia. com Interstitial
+nutraingredients-asia.com,nutraingredients-latam.com,nutraingredients-usa.com,nutraingredients.com##+js(set, displayInterstitialAdConfig, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/161297
+*$script,3p,domain=gemstreams.com,denyallow=ajax.googleapis.com|fastly.net|jsdelivr.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/19684
+ithinkilikeyou.net##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6926938
+otechno.net###devozon-snp, #submitBtn, #go_d:style(display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19687
+plumbersforums.net##+js(rmnt, script, /$.*adUnits/)
+
+! 123movies57. online popups
+123movies57.online##+js(rmnt, script, decodeURIComponent)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/161334
+livesportsclub.me,madstream.live,rogstream.fun###AdbModel
+livesportsclub.me,rogstream.fun##.ts-modal-overlay
+livesportsclub.me,rogstream.fun##body:style(overflow: auto !important;)
+! telegram app download annoyance
+livesportsclub.me,rogstream.fun##+js(set, confirm, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19693
+jornaldigital.org##+js(set-cookie, Ads, 2)
+||cdn.jsdelivr.net/npm/devtools-detector$script,domain=superembeds.com
+||media.toxtren.com^$all
+superembeds.com##+js(nowoif)
+superembeds.com###adStop
+
+! https://github.com/uBlockOrigin/uAssets/pull/19704
+! https://github.com/uBlockOrigin/uAssets/pull/20040
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,3p,redirect-rule=google-ima.js,domain=player.pop.co.uk|player.popfun.co.uk
+player.pop.co.uk,player.popfun.co.uk##+js(json-prune, response.ads)
+player.pop.co.uk,player.popfun.co.uk##+js(json-prune-fetch-response, response.ads)
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6981059
+gulio.site##+js(rmnt, script, RegExp)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19709
+filmoviplex.com##+js(aopr, BetterJsPop)
+filmoviplex.com##+js(aopr, doSecondPop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19713
+thothd.to##+js(nostif, offsetWidth)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19715
+mediaset.es##+js(rmnt, script, adbl)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19724
+embedrise.com,lulustream.com,luluvdo.com,playfmovies.online,vvtplayer.online##+js(nowoif)
+lulustream.com,luluvdo.com##+js(aeld, click, popunder)
+vvtplayer.online##+js(set, adblockcheck, false)
+||unpkg.com/videojs-vast-vpaid@2.0.2/bin/videojs_5.vast.vpaid.min.js$script,domain=playfmovies.online|vvtplayer.online|wiztube.xyz
+ottlatest.com##div#wpsafe-link:style(display: block !important;)
+ottlatest.com##div#wpsafe-link:others()
+||vvtplayer.online/cdn-cgi/trace
+
+! meaww. com PH
+meaww.com##script:has-text(adp):upward(._ap_apex_ad):upward([style])
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/161625
+hentai-moon.com##+js(set, flashvars.popunder_url, '')
+
+! https://github.com/uBlockOrigin/uAssets/issues/19753
+go2share.net##+js(no-fetch-if, googlesyndication)
+
+! cryptofaucet. xyz detection
+cryptofaucet.xyz##+js(acs, eval, replace)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/16k8oje/first_click_pop_up_problem/
+izlekolik.net##^script:has-text(doOpen)
+!#if !cap_html_filtering
+izlekolik.net##+js(rmnt, script, doOpen)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/1826#issuecomment-1722391472
+*$frame,script,3p,denyallow=google.com|googleapis.com,domain=powstream.*|powlideo.*|povvvideo.*|powvdeo.*
+powstream.*,powlideo.*,povvvideo.*,powvdeo.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19762
+milanreports.com##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19763
+videosgay.me##+js(set, xRds, true)
+videosgay.me##+js(set, cRAds, false)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/161851
+! https://github.com/AdguardTeam/AdguardFilters/issues/161906
+! https://github.com/uBlockOrigin/uAssets/issues/20015
+! https://github.com/uBlockOrigin/uAssets/issues/21875
+filelions.online##+js(set, cRAds, true)
+vidmoly.to###vope
+donghuaworld.com###overplay
+donghuaworld.com###close-teaser
+!#if cap_html_filtering
+donghuaworld.com##^script:has-text(adsBlocked)
+!#else
+donghuaworld.com##+js(rmnt, script, adsBlocked)
+!#endif
+donghuaworld.com##+js(nowoif, _blank)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/161793
+flixscans.com##+js(no-fetch-if, googlesyndication)
+flixscans.com##.teaser-buttom
+
+! https://github.com/uBlockOrigin/uAssets/issues/19770
+! https://github.com/uBlockOrigin/uAssets/issues/19864
+@@||alwingulla.com/88/tag.min.js$domain=darkino.*
+
+! https://github.com/easylist/easylist/commit/c03eb101d57fb9637905242b3b611028397eaabb
+||doubleclick.net^$important,domain=repretel.com
+repretel.com##+js(aeld, /adblock/i)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19775
+!#if cap_html_filtering
+letsdopuzzles.com##^script:has-text(chkADB)
+!#else
+letsdopuzzles.com##+js(rmnt, script, chkADB)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/19778
+app-sorteos.com##+js(rmnt, script, onerror)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19791
+ozulscansen.com##+js(set, checkAdBlockeraz, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19796
+||arc.io^$script,redirect-rule=noopjs,domain=hinatasoul.com
+
+! https://shellshock.io/ - Anti-adb
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=shellshock.io
+
+! https://reddit.com/r/uBlockOrigin/s/UnvHc9E3iv
+nopay2.info##+js(acs, eval, replace)
+nopay2.info##+js(rmnt, script, AaDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19810
+creators.nafezly.com##+js(no-fetch-if, ads)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/162158
+newslive.com##+js(noeval)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15776#issuecomment-1730042394
+poplinks.*##+js(rmnt, script, onerror)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/16ok9d5/help_me_to_block_some_annoying_ads_block_detect/k1q6xwz/
+wishfast.top##+js(set, cRAds, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15365
+nexusmods.com##+js(aopw, blockingAds)
+nexusmods.com##+js(trusted-rpnt, script, = getSetTimeout(), = function newTimeout(func\, timer) {func()})
+
+! https://github.com/uBlockOrigin/uAssets/issues/19832
+blackmod.net##^meta[http-equiv="refresh"]
+blackmod.net##+js(refresh-defuser)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19838
+comidacaseira.me###colunas:style(display: block !important;)
+comidacaseira.me##+js(rpnt, script, IFRAME, BODY)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19834
+fitnessbr.click,minhareceita.xyz###banner
+fitnessbr.click,minhareceita.xyz##+js(set, segundos, 0)
+||redir.minhareceita.xyz^$script,strict3p
+||saude.fitnessbr.click/up/show-promote.min.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/19841
+! https://github.com/uBlockOrigin/uAssets/issues/20514
+!#if cap_html_filtering
+hes-goals.io##^script:has-text(AdBlock)
+!#else
+hes-goals.io##+js(rmnt, script, AdBlock)
+!#endif
+hesgoal-live.io##+js(aeld, load, onload)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19839
+footstockings.com##+js(set, flashvars.video_click_url, '')
+footstockings.com##+js(set, flashvars.popunder_url, '')
+
+! google. com sponsored ad
+google.com##.D1fz0e
+
+! https://00m.in/HSr7p timer
+00m.in###url:style(display: block !important;)
+00m.in###attention
+00m.in###h4title
+
+! Fineshop Design anti-adb sites
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-7098041
+answerpython.com,gsm-solution.com,h-donghua.com,hindisubbedacademy.com,mydverse.*,pkgovjobz.com,ripexbooster.xyz,serial4.com,serial412.blogspot.com,sigmalinks.in,tutorgaming.com##+js(rmnt, script, antiAdBlockerHandler)
+
+! https://github.com/easylist/easylist/issues/17377
+!#if !env_mobile
+screenhub.com.au##header#masthead:style(top: -110px !important;)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/19888
+!#if cap_html_filtering
+rediff.com##^script:has-text(Symbol.iterator)
+!#else
+rediff.com##+js(rmnt, script, Symbol.iterator)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/19891
+@@||static.surfe.pro/js/net.js$script,domain=gainbtc.click
+
+! https://github.com/uBlockOrigin/uAssets/issues/19897
+towerofgod.me##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19901
+downloadfilm.website##+js(no-fetch-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19889
+yhmgo.com##+js(m3u-prune, /[a-z0-9]{13}o.*\.ts|adjump/, .m3u8)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19907
+||googletagmanager.com^$script,domain=netuplayer.top,redirect-rule=noopjs
+*$image,domain=netuplayer.top,redirect-rule=1x1.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/19908
+decorisi.com##+js(acs, Swal.fire)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19910
+cartoonsarea.xyz##+js(nostif, getComputedStyle, 250)
+cartoonsarea.xyz##[href^="http://fkrt.it"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/19902
+||fundingchoicesmessages.google.com^$script,redirect=noopjs,domain=selfstudybrain.com|universityequality.com
+||dn0qt3r0xannq.cloudfront.net^$script,redirect=noopjs,domain=selfstudybrain.com|universityequality.com
+selfstudybrain.com,universityequality.com##div[style^="bottom: 0px; left: 0px; position: fixed;"][style*="z-index"][style*="background-color:"]
+
+! https://forums.lanik.us/viewtopic.php?t=48306-nsfw-38-242-194-12-detection
+! https://github.com/uBlockOrigin/uAssets/issues/21511
+crotpedia.net,158.220.106.212##+js(noeval-if, ads)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/16x5jp9/ublock_dont_work_on_lookmovie/
+doomied.monster,lookmovie.*,lookmovie2.to,~lookmovie.studio##+js(set, Yii2App.playbackTimeout, 0)
+flixtor2.to##+js(ra, onclick, a[onclick*="window.open"])
+streamtwo.vidzstore.com###myModal
+
+! https://github.com/uBlockOrigin/uAssets/issues/19920
+play.diziyou.co##+js(aopr, player.vroll)
+
+! https://present.rssing.com/transit.php?url=http%3A%2F%2Fggs7.c.blog.so-net.ne.jp%2F_images%2Fblog%2F_c18%2Fggs7%2FE7A8B2E5B79DE4BC9AE7A0B4E99680E78AB6.jpg%3Fc%3Da1
+present.rssing.com##+js(nano-stb, setC)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19946
+igay69.com##+js(aeld, , daadb)
+igay69.com##+js(nowoif, , 10)
+igay69.com##[href^="https://www.gclub-casino.com/daily-reload-bonus5/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/19947
+newassia.com##+js(nowoif)
+||newassia.com/css/banr-adstera.html$frame
+newassia.com##[class^="ban"]
+bingsport.xyz##[href^="https://www.highrevenuegate.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/19963
+pesktop.com##+js(nowoif)
+pesktop.com##[href="javascript:void(0)"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/17097
+! https://github.com/uBlockOrigin/uAssets/issues/19965
+! https://github.com/uBlockOrigin/uAssets/issues/21301
+/img/server-hunter*.jpg$image,1p,domain=arras.io|arras.netlify.app|arrax.io
+
+! https://github.com/uBlockOrigin/uAssets/issues/19990
+wolfstream.tv##+js(aopw, showADBOverlay)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19991
+papa4k.co##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19954
+tickzoo.tv##+js(nowoif, , 10)
+tickzoo.tv##+js(nostif, popup)
+tickzoo.tv##.splash
+
+! https://github.com/uBlockOrigin/uAssets/issues/19981
+manoramamax.com##+js(set, google.ima.OmidVerificationVendor, {})
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect=google-ima.js,domain=manoramamax.com
+@@||manoramamax.com/videojs/videojs-contrib-ads.min.js$script,domain=manoramamax.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/173j3i7/
+||content.uplynk.com/preplay/$xhr,3p,removeparam=/^ad\b/,domain=foxweather.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/20016
+||boystube.link/ext/systm_fr.js
+boystube.link##.table:has(> div > [data-zoneid])
+
+! https://github.com/uBlockOrigin/uAssets/issues/20020
+insideevs.com##amp-iframe:has([src^="https://widget.sellwild.com"]):remove()
+
+! https://www.reddit.com/r/uBlockOrigin/comments/1742fzg/rl6mans_adblock_detection/
+rl6mans.com##+js(rmnt, script, /adblock/i)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20031
+kimcilonly.link##+js(rmnt, script, /$.*open/)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/174obux/memedroid_nag/
+memedroid.com##+js(nostif, /adScriptPath|MMDConfig/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20034
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=polsatboxgo.pl
+
+! https://github.com/uBlockOrigin/uAssets/issues/20042
+idol69.net##^script:has-text(/adblock/i)
+!#if !cap_html_filtering
+idol69.net##+js(rmnt, script, /adblock/i)
+!#endif
+
+! https://community.pcgamingwiki.com/files/file/2781-london-racer-police-madness-widescreen-fix/?do=download&csrfKey=c0faa76786288bc1ab4bcaf3d0d81186 - Download timer
+community.pcgamingwiki.com##div[data-controller="downloads.front.view.download"] a[data-action="download"][data-wait="true"]:remove-attr(data-wait)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20058
+||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$3p,script,redirect-rule=noop.js,domain=nickjr.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/20062
+@@||smarthomebeginner.com^$ghide
+smarthomebeginner.com##body > .fb-inst[data-type="popup"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/20061
+@@||streamnoads.com^$ghide
+
+! https://www.reddit.com/r/uBlockOrigin/comments/176cyms/dzapk_detect_ublock_origin/
+dzapk.com##^script:has-text(/innerHTML.*appendChild/)
+!#if !cap_html_filtering
+dzapk.com##+js(rmnt, script, /innerHTML.*appendChild/)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/20068
+animesync.org##+js(nostif, 0x, 100)
+animesync.org##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20006
+! https://github.com/uBlockOrigin/uAssets/issues/21494
+foxtel.com.au##+js(xml-prune, xpath(//*[name()="MPD"]/@mediaPresentationDuration | //*[name()="Period"]/@start | //*[name()="Period"][.//*[name()="BaseURL" and contains(text()\,'adease')]]), [media^="A_D/"], .mpd)
+foxtel.com.au##+js(json-prune, adease adeaseBlob vmap, adease)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20076
+bokugents.com##^script:has-text(onerror)
+!#if !cap_html_filtering
+bokugents.com##+js(rmnt, script, onerror)
+!#endif
+
+! https://www.reddit.com/r/uBlockOrigin/comments/1786yub/whatfontis_website_detect_ubo/
+whatfontis.com##+js(nostif, /adblock/i)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20095
+truyen-hentai.com##+js(rmnt, script, ExoLoader)
+||truyen-hentai.com/nb/
+truyen-hentai.com##.async-reklam-placeholder
+truyen-hentai.com##.bottom-reklam
+truyen-hentai.com###aabnode
+truyen-hentai.com##+js(aopr, aab)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20093
+darknessporn.com,familyporner.com,freepublicporn.com,pisshamster.com,punishworld.com,xanimu.com##+js(rmnt, script, Exo)
+darknessporn.com,familyporner.com,freepublicporn.com,pisshamster.com,punishworld.com,xanimu.com##+js(aeld, getexoloader)
+xanimu.com##.alrt-ver2
+||xanimu.com/*.php
+
+! https://www.reddit.com/r/uBlockOrigin/comments/1790iq3/
+tvbanywherena.com##+js(rpnt, script, (hasBlocker), (false))
+! https://www.reddit.com/r/uBlockOrigin/comments/17mcq9g/bug_report_getting_video_ads_on_tvbanywherenacom/
+||brightcove.com^$xhr,3p,removeparam=ad_config_id,domain=tvbanywherena.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/163835
+y2down.cc##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20131
+||fuseplatform.net^$redirect-rule=noopjs,domain=quackr.io
+@@||cdn.fuseplatform.net/publift/$3p,script,xhr,domain=quackr.io
+@@||googletagmanager.com/gtag/js$xhr,domain=quackr.io
+
+! https://github.com/uBlockOrigin/uAssets/pull/20138
+haveibeenpwned.com##+js(rpnt, P, /\.[^.]+(1Password password manager|download 1Password)[^.]+/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19890
+!#if cap_html_filtering
+pig69.com##^script:has-text(detectAdBlock)
+!#else
+pig69.com##+js(rmnt, script, detectAdBlock)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/20146
+@@||pagead2.googlesyndication.com^$3p,xhr,method=head,domain=smsonline.cloud
+@@||securepubads.g.doubleclick.net/pagead/managed/js/gpt/$script,domain=smsonline.cloud
+@@||smsonline.cloud/gpt.js$script,1p
+@@||stpd.cloud^$script,domain=smsonline.cloud
+
+! https://github.com/uBlockOrigin/uAssets/issues/20156
+||mathcrave.com/core/modules/*/assets/vendor/js/abdetector.script.min.js
+||mathcrave.com/core/modules/*/assets/vendor/css/abdetector.style.css
+mathcrave.com##+js(aeld, load, abDetectorPro)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20711
+!#if cap_html_filtering
+fastupload.io,azmath.info##^script:has-text(AdBlocker)
+!#else
+fastupload.io,azmath.info##+js(rmnt, script, AdBlocker)
+!#endif
+
+! https://www.reddit.com/r/uBlockOrigin/comments/17behe7/
+||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,3p,redirect-rule=noopjs,domain=mtv.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/20186
+tainio-mania.online##+js(rmnt, script, AaDetector)
+tainio-mania.online##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/164231
+streambtw.com###overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/20197
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$xhr,domain=guys01gaming.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/20201
+clapway.com##+js(nosiif, daadb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20183
+punkrust.net##+js(nano-sib, saniye)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20208
+papahd.co##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20211
+expertplay.net##+js(acis, ips.controller.register)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20216
+javhdo.net##+js(rmnt, script, popup)
+javhdo.net##.preload
+||media.discordapp.net/*.gif$image,3p,domain=javhdo.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/20219
+royalroad.com##+js(set, isPremium, true)
+royalroad.com##.t-center:has(> .bold.uppercase, #Content_Top_Desktop)
+||royalroad.com/a/$frame,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/20220
+iprima.cz##+js(json-prune-fetch-response, plugins.adService)
+iprima.cz##+js(json-prune, plugins.adService)
+www.iprima.cz##.leader_box
+www.iprima.cz##.appendix
+||www.iprima.cz^$xhr,1p,strict1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/20224
+freshplaza.com,hortidaily.com##+js(nosiif, banner)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20229
+udemy-downloader.com##+js(acs, addEventListener, fetch)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20170#issuecomment-1774177770
+drakescans.com##+js(noeval-if, ads)
+
+! eroticmoviesonline. me ads
+eroticmoviesonline.me##+js(nowebrtc)
+eroticmoviesonline.me##+js(rmnt, script, /window\[\'open\'\]/)
+eroticmoviesonline.me##.mobile-btn
+eroticmoviesonline.me##.overlays
+eroticmoviesonline.me###server
+
+! https://github.com/uBlockOrigin/uAssets/issues/20239
+iqiyi.com##+js(set, QiyiPlayerProphetData.a.data, {})
+
+! https://github.com/uBlockOrigin/uAssets/issues/20253
+southpark.de##+js(no-fetch-if, ima3_dai)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20259
+uploadsea.com##+js(no-fetch-if, ads)
+uploadsea.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20263
+tiroalpalo.org##+js(aeld, load, nextFunction)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20264
+@@*$ghide,domain=mojatv.eu|vidload.eu
+
+! https://github.com/uBlockOrigin/uAssets/issues/20265
+sport7s01.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20266
+teleclub.xyz##+js(rmnt, script, Error)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20281
+watchfacebook.com##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20282
+@@||animefire.vip^$script,1p
+/clever_ads.js$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/17809
+@@||zive.cz^$ghide
+zive.cz##.cnc-ads:style(min-height: 0px !important; height: 0px !important; visibility: hidden !important;)
+zive.cz###cnc_branding_creative_wrapper:style(min-height: 0px !important; height: 0px !important; visibility: hidden !important;)
+*$script,redirect-rule=noopjs,domain=zive.cz
+
+! https://github.com/uBlockOrigin/uAssets/issues/20286
+web1s.asia##+js(noeval-if, ads)
+web1s.asia##+js(nano-sib, wait)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20301
+! https://old.reddit.com/r/uBlockOrigin/comments/17dj6qb/how_to_block_this/
+sshkit.com,fastssh.com,howdy.id##+js(no-fetch-if, adsbygoogle)
+@@*$ghide,domain=sshkit.com|fastssh.com|howdy.id
+
+! https://javideo.net/fc2ppv-3941012 VGT#01 server popup
+av-cdn.xyz##+js(nowoif)
+av-cdn.xyz##body > div ~ script + div[class]:last-child
+
+! https://github.com/uBlockOrigin/uAssets/issues/9764#issuecomment-1779676540
+pluto.tv##+js(no-xhr-if, /_Ad_|_ad/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18592
+@@||imasdk.googleapis.com^$script,domain=oqee.tv
+
+! https://ymovies.vip/home/ - popup
+ymovies.vip##+js(aopr, mm)
+||ymovies.vip/sab_*.html$frame
+
+! https://www.trainerscity.com/en/pc/39288-Dark-Envoy-Trainer+25 - Timer
+trainerscity.com##+js(rpnt, script, startTime: '5', startTime: '0')
+
+! https://github.com/uBlockOrigin/uAssets/issues/20321
+speedrun.com##+js(json-prune, session.showAds)
+||speedrun.com/cargo.js^$script,1p
+||speedrun.com/api/v2/PutSessionPing^$xhr,1p,method=post
+
+! https://github.com/uBlockOrigin/uAssets/issues/20322
+biletomat.pl##+js(set, toggleAdBlockInfo, falseFunc)
+||biletomat.pl/en/api/process_order_lite^$xhr,1p,removeparam=http_referer
+
+! https://github.com/uBlockOrigin/uAssets/issues/20324
+@@||matchendirect.fr^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/20343
+||fusevideo.io^$xhr,1p,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/20347
+myvidster.com##+js(acs, document.write, cachebuster)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20339
+niaomea.me##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20361
+redd.tube##+js(aopr, config)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20364
+! https://www.reddit.com/r/uBlockOrigin/comments/17ptimv/adblock_detection_pop_up_on_rbtv77com/
+! https://github.com/uBlockOrigin/uAssets/issues/20694
+live-streamfootball.*,rbtv77.*,superabbit.*,superabbit67.*,superabbit77.*,superabbit777.*,superb77.*,superb777.*,superbb77.*,superbt77.*##+js(no-xhr-if, googlesyndication)
+live-streamfootball.*,rbtv77.*,superabbit.*,superabbit67.*,superabbit77.*,superabbit777.*,superb77.*,superb777.*,superbb77.*,superbt77.*##.d-l
+
+! https://ggjav.com /.tv popunder
+ggjav.com,ggjav.tv##+js(acs, $, popunder)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20373
+ecamrips.com,showcamrips.com##+js(rmnt, script, document.head.appendChild)
+ecamrips.com,showcamrips.com##+js(acs, document.cookie, document.head.appendChild)
+ecamrips.com,showcamrips.com##+js(acs, OpenInNewTab_Over)
+ecamrips.com,showcamrips.com##[href*="ads"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/20377
+ bizdustry.com##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/pull/20378
+cl1ca.com,4br.me,fir3.net,seulink.*,encurtalink.*##+js(aopr, mm)
+cl1ca.com,4br.me,fir3.net,seulink.*,encurtalink.*##+js(set, blurred, false)
+cl1ca.com,4br.me,fir3.net,seulink.*,encurtalink.*##+js(refresh-defuser, 12)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20379
+app.axenthost.com##+js(no-fetch-if, /^/)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/17lu2us/antiad_block_blocks_video_about_10_seconds_in/
+||pornkinky.com^$image,1p,redirect-rule=1x1.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/20417
+bokugents.com##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20418
+client.pylexnodes.net##+js(noeval-if, replace)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/165407
+freewsad.com##+js(no-fetch-if, googlesyndication)
+freewsad.com##+js(set-local-storage-item, email, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20444
+karaoketexty.cz##+js(nostif, /native|\{n\(\)/)
+karaoketexty.cz##+js(ra, style, [style^="background"], stay)
+karaoketexty.cz##+js(ra, href, [target^="_"], stay)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/159379
+lk21official.*##+js(set, adsPlay, false)
+lk21official.*###overlay
+stream.hownetwork.xyz###donate
+
+! https://github.com/uBlockOrigin/uAssets/issues/20448
+tucinehd.com##+js(nostif, nextFunction, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20454
+senda.pl##+js(no-fetch-if, googletagmanager)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20464
+newzjunky.com##+js(noeval-if, ads)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/17orqrb/help_removing_advertisement_areas_on_wingg/
+win.gg###td-top-leaderboard-1
+win.gg###td-top-mpu-1
+win.gg###td-bottom-mpu-1
+win.gg###interstitial-ad
+win.gg###inline-video-ad
+win.gg##main:style(padding-top: 5em !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20504
+earnhub.net##+js(aeld, load, htmls)
+earnhub.net##+js(aost, onload, bodyElement.removeChild)
+
+! hextank.io anti adblock after clicking on "Play"
+hextank.io##+js(set, aipAPItag.prerollSkipped, true)
+hextank.io##+js(set, aipAPItag.setPreRollStatus, trueFunc)
+hextank.io###preroll
+
+! https://github.com/uBlockOrigin/uAssets/issues/20508
+tomarnarede.pt##+js(rmnt, script, deblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20513
+minecraft.buzz##+js(aeld, np.detect)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20537
+terrylove.com##+js(nostif, prompt, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20540
+yourlifeupdated.net##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20543
+ticketmaster.sg##+js(set, detectAdblock, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20539
+app.hellovaia.com##+js(trusted-replace-xhr-response, "ads_disabled":false, "ads_disabled":true, payments)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20559
+111.90.141.252##+js(acs, $, noConflict)
+111.90.141.252##+js(aopr, preroll_helper.advs)
+*/dyasds/$media,redirect=noopmp3-0.1s,domain=111.90.141.252
+
+! wsj ads
+! https://www.reddit.com/r/uBlockOrigin/comments/17rxlfr/block_randomlygenerated_class_with_specific/
+/^https:\/\/[0-9a-z]+\.cloudfront\.net\/([a-z]\/)?[0-9a-f]{6,}-[-0-9a-f]+\.js$/$script,3p,match-case,to=cloudfront.net,from=marketwatch.com|wsj.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/20582
+*$media,domain=gofilmizle.com,redirect=noopmp3-0.1s
+*$media,domain=filmizletv.*,redirect=noopmp3-0.1s
+gofilmizle.com##+js(nano-sib)
+gofilmizle.com##+js(set, reklam_1_saniye, 0)
+gofilmizle.com##+js(set, reklam_1_gecsaniye, 0)
+gofilmizle.com##a[onclick^="tiklakapat"]
+filmizletv.*,gofilmizle.com###rekgecyen
+
+! https://github.com/uBlockOrigin/uAssets/issues/20585
+gourmetsupremacy.com##+js(nostif, null)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20593
+@@||click-me.today^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/20594
+cryptobr.biz###player:style(display:block !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20602
+9animetv.to##+js(rmnt, script, Number)
+9animetv.to##[href^="//keefeezo.net/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/20604
+lscomic.com##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20608
+||teads.tv^$3p,script,redirect-rule=noop.js,from=tf1info.fr
+
+! https://github.com/uBlockOrigin/uAssets/issues/17807
+||edge.api.brightcove.com/playback/v1/accounts/6415718365001/$3p,xhr,removeparam=ad_config_id,domain=brightcove.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/20625
+tv.durbinlive.com##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20626
+gplastra.com##+js(aost, setTimeout, data)
+
+! https://github.com/uBlockOrigin/uAssets/commit/652254f04c
+@@||s.yimg.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/20651
+sendspace.com##+js(aopr, runad)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20671
+hackerranksolution.in##+js(rmnt, script, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20693
+mastaklomods.com##+js(acs, eval, replace)
+
+! https://javguard.xyz/e/mMq75LrdaNEXPBY popup
+javguard.xyz##+js(nowoif)
+javguard.xyz##body > div[class]:last-child:empty
+
+! https://github.com/uBlockOrigin/uAssets/issues/20700
+||alabamaimage.online^$websocket,domain=contentx.me
+*$media,domain=dizipub.club,redirect=noopmp3-0.1s
+
+! https://github.com/uBlockOrigin/uAssets/issues/20717
+graphicget.com##+js(aeld, load, google-analytics)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20716
+netu.ac##+js(set, adblockcheck, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20728
+estudyme.com#@#ins.adsbygoogle
+estudyme.com##ins.adsbygoogle:style(height: 1px !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20724
+soap2day-online.com##+js(rmnt, script, popunder)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20741
+cctvwiki.com##+js(aost, setTimeout, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20750
+cimanow.cc##+js(aopr, navigator.brave)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20516
+qiwi.gg##+js(aeld, , sessionStorage)
+qiwi.gg##+js(nowoif, , 10)
+*$xhr,3p,domain=qiwi.gg,denyallow=cloudflarestorage.com
+||qiwi.gg/sw.js$script,1p
+||cloudfront.net/?$script,3p,domain=qiwi.gg
+
+! https://javgg.net/jav/ebwh-044/ turboplay server popup
+javturbo.xyz##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20754
+@@||wavse.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/20753
+westmanga.org##+js(nowoif)
+westmanga.org##[src*=".gif"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/20758
+reality-quest.online##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9876#issuecomment-1817667681
+kawarthanow.com##+js(nosiif, daadb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20764
+akw.cam##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20788
+freeltc.online##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20792
+twitter.com##[data-testid="primaryColumn"] [data-testid="cellInnerDiv"] > div:has([data-testid$="-impression-pixel"]):remove()
+
+! https://github.com/uBlockOrigin/uAssets/issues/20794
+daotranslate.com##+js(aost, setTimeout, ads)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/166746
+chartstream.net##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20800
+jornadaperfecta.com##+js(rmnt, script, ad-block-activated)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20802
+greentumble.com##.cp-module
+greentumble.com##html:style(overflow: auto !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20804
+accuweather.com##body:remove-class(ads-not-loaded)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20818
+@@||crutto.fun^$script,1p
+@@||crutto.fun^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/20850
+gameshdlive.net##+js(aost, atob, inlineScript)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20870
+pornleaks.in##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20876
+loseart.com##+js(rmnt, script, insertBefore)
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-7667896
+kiddyshort.com##+js(acs, addEventListener, google_ad_client)
+kiddyshort.com##+js(aeld, load, htmls)
+kiddyshort.com##+js(set, blurred, false)
+kiddyshort.com##div[style$="z-index:999999;"]
+
+! https://www.securityweek.com ad leftover
+securityweek.com##.pum-overlay[data-popmake*="popup-ad"]
+securityweek.com##.pum-open-overlay:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20883
+freepornsex.net##+js(aost, setTimeout, ads)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/183msm2/help_with_embeeded_player_from_netu_pop_ups_and/
+dirtyvideo.fun##+js(nowoif)
+dirtyvideo.fun##+js(set, arrvast, [])
+
+! https://github.com/uBlockOrigin/uAssets/issues/20899
+tronxminer.com##+js(aeld, load, htmls)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20907
+@@||cursomecanet.com^$ghide
+
+! https://sousou-no-frieren.com/ - popup
+sousou-no-frieren.com##+js(rmnt, script, pop.doEvent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20909
+tikmate.app##+js(set, powerAPITag, emptyObj)
+tikmate.app##+js(set, detectAdBlock, noopFunc)
+tikmate.app##+js(rpnt, script, /(function downloadHD\(obj\) {)[\s\S]*?(datahref.*)[\s\S]*?(window.location.href = datahref;)[\s\S]*/, $1$2$3})
+tikmate.app##.dl-details
+tikmate.app##div.ad-container
+
+! https://github.com/uBlockOrigin/uAssets/issues/20926
+tecnoyfoto.com##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20934
+yt-downloaderz.com##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20937
+hostmath.com##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20950
+@@||games.forkids.education^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/20951
+freemagazinespdf.com##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20952
+leechpremium.net##+js(aopr, atob)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20953
+urlcut.ninja##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21507
+resortcams.com##+js(nostif, adblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20958
+fplstatistics.co.uk#@#ins.adsbygoogle
+fplstatistics.co.uk##ins.adsbygoogle:style(clip-path: circle(0) !important;)
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js^$script,3p,domain=fplstatistics.co.uk
+@@||pagead2.googlesyndication.com/pagead/managed/js/adsense^$script,3p,domain=fplstatistics.co.uk
+@@||fundingchoicesmessages.google.com^$script,3p,domain=fplstatistics.co.uk
+||googleads.g.doubleclick.net/pagead^$frame,3p,redirect-rule=noopframe,domain=fplstatistics.co.uk
+fplstatistics.co.uk##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20971
+@@||mrfreemium.blogspot.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/20972
+alexsportz.online##+js(acs, fetch, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20975
+btvplus.bg##+js(rmnt, script, onerror)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20981
+sagewater.com##+js(set, aoAdBlockDetected, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20982
+starzunion.com##+js(aopw, checkAdsStatus)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/167470
+turbobits.cc##+js(trusted-click-element, #no-thanks-btn)
+||turbobits.cc/pus/script$script
+||turbobits.cc/files/news/image$image,1p
+||veritiesgarlejobade.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/20346
+irctc.co.in###dod
+irctc.co.in###splash-scrollable
+irctc.co.in###cube > .hidden-xs
+
+! https://github.com/uBlockOrigin/uAssets/issues/20999
+*$script,domain=baby-beamup.club,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/21018
+@@||supercomputingonline.com^$ghide
+supercomputingonline.com##[class^="ad_prev"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/21019
+dudestream.com##+js(noeval-if, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21023
+filmweb.pl##+js(rmnt, script, window.open)
+filmweb.pl###mainSkyBanner-pl_PL
+filmweb.pl##[href*="smartadserver.com/click"]
+filmweb.pl##.HomePromotedSection
+filmweb.pl##[style*="-ad-"]
+filmweb.pl##.faScreening--clickable
+filmweb.pl##.faDesktopBillboard__content
+filmweb.pl##.faPremiumBanner
+filmweb.pl##.faBannerPromo
+fwcdn.pl###clickArea
+fwcdn.pl###link-container-all
+fwcdn.pl##[id*="banner"]
+
+! https://github.com/easylist/easylist/issues/17915
+thespruce.com##.mntl-leaderboard-spacer:style(min-height: 0px !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21035
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=trojmiasto.pl,redirect-rule=google-ima.js
+
+! hdmoviefair. buzz popups
+hdmoviefair.*##+js(aost, document.createElement, onerror)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/189z81i/redirection_to_wwwsatdlcom/
+satdl.com##+js(aopw, protection)
+satdl.com##+js(set, xtime, 0)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21025
+easybib.com##+js(trusted-click-element, button[data-test="watch-ad-button"])
+easybib.com##+js(nano-sib)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21062
+realmadryt.pl##+js(no-fetch-if, method:GET)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21063
+@@||mirroshu.top^$script,other,ghide,1p
+mirroshu.top##[id^="div-gpt-ad-"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/21064
+veev.to##+js(rmnt, script, constructor)
+veev.to##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/pull/21060#issuecomment-1839421962
+unbl4you.lol##+js(nowoif)
+unbl4you.lol##+js(aost, open, Object)
+||igg-games.unbl4you.lol/wp-content/uploads/2023/*.avif$image
+||igg-games.unbl4you.lol/wp-content/uploads/*.gif$image
+unbl4you.lol##[id*="VPN"][onclick]
+
+! filmydown .site/fast-dl .co popups
+fast-dl.co,filmydown.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21077
+marinetraffic.live##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/167559
+99corporates.com##+js(no-fetch-if, googlesyndication)
+
+! bigwavedave .ca, windisgood .com anti-adb
+@@*$ghide,domain=bigwavedave.ca|windisgood.com
+bigwavedave.ca,windisgood.com##ins.adsbygoogle
+
+! https://www.reddit.com/r/uBlockOrigin/comments/18bl3e7/popupads/
+whoreshub.com##+js(acs, addEventListener, smartpop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21088
+vidstreaming.xyz##+js(set, Div_popup, '')
+
+! https://github.com/uBlockOrigin/uAssets/issues/21093
+intro-hd.net##+js(rmnt, script, /adbl/i)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21095
+skai.gr##.banner-min-height:remove()
+skai.gr##.fixed.social-bar:remove()
+skai.gr##.mobile-banner-sticky-container:remove()
+skai.gr###taboola-alternating-below-article:remove()
+
+! storefront. com.ng anti-adb
+storefront.com.ng##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21157
+!#if cap_html_filtering
+unite-guide.com##^script:has-text(detect)
+!#else
+unite-guide.com##+js(rmnt, script, detect)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/21179
+cinepiroca.com,dvd-flix.com##+js(aost, setTimeout, ads)
+cinepiroca.com##.cover
+cinepiroca.com,dvd-flix.com###clickfakeplayer
+||dvd-flix.com/*.gif$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/21182
+play-games.com##+js(no-xhr-if, ads)
+@@||wgplayer.com^$script,domain=play-games.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/21208
+vgmlinks.*##+js(aopr, initPu)
+
+! monacomatin. mc detection
+monacomatin.mc##+js(rmnt, script, /adbl/i)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21253
+cryptoclicks.net##+js(acs, fetch, adblock)
+
+! movie4night .com popups (https://serial4u.net/sakla-beni-episode-6-with-english-subtitle-free-episode-watch/)
+movie4night.com##+js(aopr, BetterJsPop)
+movie4night.com##+js(aopr, doSecondPop)
+movie4night.com##+js(nowoif)
+||movie4night.com/cdn-cgi/trace$xhr,1p
+
+! schooltravelorganiser .com anti-adb
+schooltravelorganiser.com##+js(nostif, adblock)
+
+! sonixgvn .net anti-adb
+sonixgvn.net##+js(aost, setTimeout, ads)
+
+! basketballbuzz .ca anti-adb
+basketballbuzz.ca##+js(rmnt, script, deblocker)
+
+! dribbblegraphics .com anti-adb
+dribbblegraphics.com##+js(rmnt, script, deblocker)
+
+! hscprojects .com anti-adb
+hscprojects.com##+js(aost, setTimeout, adsBlocked)
+
+! graphicgoogle .com anti-adb
+graphicgoogle.com##+js(aost, setTimeout, adsBlocked)
+
+! freemockupzone .com anti-adb
+freemockupzone.com##+js(aost, setTimeout, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21091
+@@||francoischarron.com^$ghide
+francoischarron.com##.ads
+francoischarron.com##.reward-message:style(display: none !important;)
+francoischarron.com##.reward-btn:style(display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21281
+paste-drop.com##+js(acs, $, googleAdUrl)
+paste-drop.com##+js(rpnt, script, clickCount === numberOfAdsBeforeCopy, numberOfAdsBeforeCopy >= clickCount)
+paste-drop.com##+js(nowoif, _blank)
+
+! https://pelis24.gratis/pelicula/guardianes-de-la-galaxia-volumen-3/ popup
+cine24.online##+js(disable-newtab-links)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21289
+tips97tech.blogspot.com##+js(acs, document.createElement, adblock)
+
+! bestporn4free. com popups
+*$script,3p,denyallow=fastly.net|google.com|gstatic.com|twitter.com|facebook.net|unpkg.com|zencdn.net|vk.com,domain=bestporn4free.com
+richhioon.eu##+js(aopr, BetterJsPop)
+richhioon.eu##+js(aopr, doSecondPop)
+richhioon.eu##+js(nowoif, , 10)
+
+! bmw-scooters .com anti-adb
+bmw-scooters.com##+js(acs, $, btoa)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21327
+*$media,domain=movingxh.world,redirect=noopmp3-0.1s
+
+! thebullspen .com anti-adb
+thebullspen.com##+js(rmnt, script, fetch)
+
+! crazyvidup .com video player
+crazyvidup.com##+js(ra, srcdoc, iframe)
+crazyvidup.com##.footerStickyBox
+
+! https://github.com/uBlockOrigin/uAssets/issues/21339
+get-coin.click##+js(acs, Swal.fire)
+get-coin.click##+js(acs, document.createElement, atob)
+
+! https://github.com/easylist/easylist/issues/17968
+@@||cartometro.com^$ghide
+cartometro.com##[class^="cmad"]
+
+! fivemdev .org anti-adb
+fivemdev.org##+js(no-fetch-if, googlesyndication)
+
+! rpupdate .cc anti-adb
+rpupdate.cc##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21359
+animehub.ac##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21362
+! https://github.com/AdguardTeam/AdguardFilters/issues/168493
+kissanime.*##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21363
+winlator.com##+js(no-fetch-if, googlesyndication)
+winlator.com##div[id^="wpsafe-wait"]
+winlator.com###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-7830802
+ltc-faucet.xyz,coin-profits.xyz##+js(nostif, nextFunction)
+||bittrafficads.com^$3p
+
+! ckxsfm .com anti-adb
+ckxsfm.com##+js(acs, document.getElementById, fakeElement)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21372
+appimagehub.com,gnome-look.org,store.kde.org,linux-apps.com,opendesktop.org,pling.com,xfce-look.org##+js(rmnt, script, btnHtml)
+appimagehub.com,gnome-look.org,store.kde.org,linux-apps.com,opendesktop.org,pling.com,xfce-look.org##button[type=submit]:remove-attr(disabled)
+
+! yottachess .com anti-adb
+yottachess.com##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21377
+freetvsports.xyz##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/168023
+stmruby.com##+js(set, cRAds, true)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/167905
+cosplay18.pics##+js(rmnt, script, detectAdBlock)
+
+! NSFW pum-overlay sites
+curs-germana.com,pervertgirlsvideos.com##.pum-overlay
+curs-germana.com,pervertgirlsvideos.com##.pum-open-overlay:style(overflow: auto !important;)
+
+! rollstroll .com anti-adb
+rollstroll.com##+js(nosiif, daadb)
+
+! butterpolish .com anti-adb
+butterpolish.com##+js(acs, eval, replace)
+
+! stbnetu.xyz popups
+stbnetu.xyz##+js(aopr, popUrl)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/167727
+infidrive.net##+js(no-xhr-if, googlesyndication)
+infidrive.net##+js(nano-stb, -1, *, 0.001)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21399
+anitube.ninja##+js(aeld, DOMContentLoaded, btoa)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21406
+nodo313.net##+js(rmnt, script, /adbl/i)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21410
+relampagomovies.com##+js(nostif, nextFunction)
+
+! msmorristown .com anti-adb
+msmorristown.com##+js(acs, document.getElementById, fakeElement)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21419
+animefreak.to##+js(no-xhr-if, googlesyndication)
+
+! https://javgg.club/jav/pppe-177/ popup
+javggvideo.xyz##+js(nowoif)
+
+! shemale6 .com anti-adb
+*$image,domain=shemale6.com,redirect-rule=1x1.gif
+
+! 9animes .ru anti-adb
+9animes.ru##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21440
+areascans.net##+js(noeval-if, ads)
+
+! PopAds external script
+eurostreaming.*##+js(aost, document.createElement, /HTMLScriptElement|onload/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21441
+king-shoot.io##+js(aeld, load, onload)
+king-shoot.io##+js(nosiif, _0x)
+
+! bettycrocker.com PH
+bettycrocker.com##.adhesiveHeaderAdFixed header:matches-media((min-width: 1000px)):style(top: 0 !important;)
+bettycrocker.com##.adhesiveAdSpacing
+
+! https://github.com/uBlockOrigin/uAssets/issues/21443
+dizipal730.com##+js(rpnt, script, video_urls.length != activeItem+1, video_urls.length === activeItem+1)
+
+! https://brutaljav.com/fsdss-536-female-teacher-gangrape-in-jav-video/
+player.bestrapeporn.com##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/168557
+zealtyro.com##+js(aost, document.getElementsByTagName, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21451
+@@*$ghide,domain=bluemediafile.*|bluemedialink.*|bluemediastorage.*|bluemediaurls.*
+.gif$image,domain=bluemediafile.*|bluemedialink.*|bluemediastorage.*|bluemediaurls.*
+bluemediafile.*,bluemedialink.*,bluemediastorage.*,bluemediaurls.*##+js(aopr, decodeURI)
+bluemediafile.*,bluemedialink.*,bluemediastorage.*,bluemediaurls.*##+js(aopr, open)
+bluemediafile.*,bluemedialink.*,bluemediastorage.*,bluemediaurls.*###ads-center
+
+! tinyzonetv .se popups
+tinyzonetv.se##+js(nowoif)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/18jtgkj/how_i_block_hidden_links_from_opening_new_page/
+moviesjoyhd.to##+js(aeld, mousedown, shown_at)
+
+! https://community.brave.com/t/nsfw-poop-cx-pop-up/520215
+metrolagu.cam,poop.cx##+js(nowoif)
+/adus.js|$script,domain=metrolagu.cam|poop.cx
+||doood.cam^$popup,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/21468
+redlion.net##+js(set, aoAdBlockDetected, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13588
+! https://github.com/uBlockOrigin/uAssets/issues/21470
+@@*$ghide,domain=osuskinner.com|osuskins.net
+osuskinner.com,osuskins.net##+js(no-xhr-if, /googlesyndication|nitropay/)
+osuskinner.com,osuskins.net##+js(nostif, height)
+osuskinner.com,osuskins.net##+js(aopw, uBlockActive)
+osuskinner.com,osuskins.net##.ad-300-250, .ad-billboard
+
+! https://github.com/uBlockOrigin/uAssets/issues/21476
+filext.com##+js(rpnt, script, if(e&&e.target), if(false))
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/168823
+apkdrill.com##+js(noeval-if, deblocker)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/18met07/website_asking_to_disable_adblocker_was_working/
+everand.com##+js(no-fetch-if, /api/v1/events)
+
+! zona11 .com anti-adb
+zona11.com##+js(nostif, keepChecking)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21493
+kemiox.com##+js(rmnt, script, deblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21501
+||baeldung.com/*/wp-content/themes/baeldung/library/dist/js/ad-recovery.min.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/21503
+||cdn.mxpnl.com/libs/mixpanel-2-latest.min.js$script,domain=obefitness.com,redirect=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/21505
+infinite-streaming.live##+js(acs, addEventListener, blocker)
+
+! checkersmenu .us anti-adb
+checkersmenu.us##+js(rmnt, script, deblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21518
+myradioonline.pl##+js(set, AddAdsV2I.addBlock, false)
+
+! couponscorpion .com anti-adb
+couponscorpion.com##+js(no-xhr-if, googlesyndication)
+
+! netcine2 .la anti-adb
+netcine2.la##+js(aeld, load, fetch)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21514
+||welrauns.top^
+dreamsnest.com##[href^="https://dreamingfordreams.com/contact/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/21532
+serially.it##+js(xml-prune, xpath(//*[name()="Period"][.//*[name()="BaseURL" and contains(text()\,'/ad/')]]), , .mpd)
+serially.it##+js(json-prune, ads)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/169095
+pkbiosfix.com##+js(nostif, show)
+pkbiosfix.com##+js(rmnt, script, AdBlock)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/18ot1ak/unblockable_ads_on_this_site/ - Ad-reinsertion
+! https://github.com/uBlockOrigin/uAssets/issues/21564
+autoscout24.*##+js(nostif, /Detect|adblock|style\.display|\[native code]|\.call\(null\)/)
+autoscout24.*##div[class^="AdContentBanner"]
+
+! scsport .live anti-adb
+scsport.live##+js(nostif, keepChecking)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21551
+casi3.xyz##+js(nostif, show)
+casi3.xyz##+js(rmnt, script, AdBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21546
+||garticphone.com/videos/gio.mp4$media,1p,redirect=noopmp3-0.1s
+
+! https://www.reddit.com/r/uBlockOrigin/comments/18ajxi1/tekkenmodscom_site_detecting_ubo_again_again/
+tekkenmods.com##+js(aopw, HTMLScriptElement.prototype.onerror)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21566
+db-creation.net##+js(acs, document.addEventListener, /google_ad_client/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21560
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=biznesinfo.pl|domekiogrodek.pl|goniec.pl|lelum.pl|swiatgwiazd.pl
+
+! https://github.com/uBlockOrigin/uAssets/issues/21576
+@@||www.googletagmanager.com/gtag/js$script,domain=isthischannelmonetized.com
+@@||isthischannelmonetized.com^$script,1p
+@@||isthischannelmonetized.com^$ghide
+
+! https://baomoi.com/ - Ads recurrence
+||api.baomoi.com/*/w/$script,xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/21583
+! https://github.com/uBlockOrigin/uAssets/pull/21584
+buxfaucet.com,faucetcaptcha.co.in,gameblog.in,needbux.com##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5090#issuecomment-1863129767
+@@*$script,xhr,ghide,domain=uptoplay.net
+@@||googlesyndication.com^$frame,domain=uptoplay.net
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/169282
+chickenkarts.io##+js(aopw, blockedAds)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21595
+||blogger.googleusercontent.com/img/$image,domain=idlixofficials.com|idlixplus.com|idlixplus.net
+idlixofficials.com,idlixplus.com,idlixplus.net##+js(aost, document.getElementsByTagName, adsBlocked)
+idlixofficials.com,idlixplus.com,idlixplus.net###repop
+! https://github.com/uBlockOrigin/uAssets/issues/21779
+idlixofficials.com##+js(aost, document.querySelector, /(?!\bjquery\b)/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21600
+@@||choralia.net/popu.js$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/21601
+pl#@#.ad
+pl#@#[class$="-ads"]
+radiosupernova.pl##.zpr_combo
+radiosupernova.pl##[id^="placement"]
+radiosupernova.pl##.zpr_inside_2
+mjakmama24.pl##+js(nostif, removeChild)
+
+! gncloudy .com anti-adb
+gncloudy.com##+js(acs, eval, replace)
+
+! teksnologi .com anti-adb
+teksnologi.com##+js(rmnt, script, deblocker)
+
+! dollareuro .live anti-adb
+dollareuro.live##+js(rmnt, script, deblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21638
+loot-link.com,loot-links.com##+js(no-fetch-if, googlesyndication)
+
+! https://sethphat.com/download/?id=5497 timer
+sethphat.com##+js(nano-stb, total, 1000, 0.001)
+
+! https://theapkfolder.com/dls-23-mod-apk/download/ timer
+theapkfolder.com##+js(nano-stb, countdown, *, 0.001)
+
+! https://upapk.io/4hzklen07qof/ timer
+upapk.io##+js(nano-stb, tick, 1000, 0.001)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21654
+kiddyearner.com##+js(aopw, canRunAds)
+kiddyearner.com##iframe[src^="https://cryptocoinsad.com/ads/"]
+kiddyearner.com###ads
+kiddyearner.com##+js(set, document.hasFocus, trueFunc)
+kiddyearner.com##+js(rpnt, script, (document.hasFocus()), (false))
+
+! swisswebcams .ch anti-adb
+||visx.net^$3p,script,redirect-rule=noopjs,domain=swisswebcams.ch
+
+! https://apkprime.org/telegram/download/ timer
+apkprime.org##+js(nano-sib, , 1000, 0.001)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21674
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,from=sport5.co.il
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/169200
+player.euroxxx.net##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21690
+xhardhempus.net##+js(nostif, adblock)
+
+! https://www.dfast.app/instagram/com-instagram-android/download.html ad overlay, timer
+dfast.app##+js(nano-stb, countdown, *, 0.001)
+||cdn.pubxmedia.com/library/dfast.app/script.js$script,domain=dfast.app
diff --git a/uAssets/filters/filters-2024.txt b/uAssets/filters/filters-2024.txt
new file mode 100644
index 0000000..11424f8
--- /dev/null
+++ b/uAssets/filters/filters-2024.txt
@@ -0,0 +1,276 @@
+! Title: uBlock filters (2024)
+! Last modified: %timestamp%
+! Description: Filters optimized for uBlock, to be used along EasyList
+! Homepage: https://github.com/uBlockOrigin/uAssets
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+! New filters from January 2024 to ->
+!
+! GitHub issues: https://github.com/uBlockOrigin/uAssets/issues
+! GitHub pull requests: https://github.com/uBlockOrigin/uAssets/pulls
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/169660
+flixscans.org##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21706
+mhn.quest##+js(nostif, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21720
+bonsaiprolink.shop##+js(noeval-if, ads)
+
+! paste. fo ads
+paste.fo##a:has-text(Free:)
+paste.fo##a[href^="https://anonsmm.com/?utm_source"], a[href="https://cryptochanger.to/"], a[href="https://sellsn.io/"]
+paste.fo##a *:matches-css-after(content:/Free:/)
+paste.fo##a *:matches-css-before(content:/Free:/)
+/paste\.fo\/[A-Z0-9]{70,110}\.(gif|jpeg)$/$image,1p,domain=paste.fo
+||paste.fo/clk*.php?as=$xhr
+paste.fo##a[href] img:not([src$=".php"])
+
+! bharathwick .com anti-adb
+bharathwick.com##+js(rmnt, script, deblocker)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/169319
+@@||easyupload.io/cdn-cgi/zaraz/s.js$1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/21756
+||amazonaws.com/pubs/trib/aatribscriptcheck$script,3p
+||amazonaws.com/pubs/trib/aa_adb_modal$script,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/21769
+aniwave.to,anix.to,flixwave.to,fmoviesz.to##+js(nowoif, _blank)
+aniwave.to,anix.to,flixwave.to,fmoviesz.to##+js(set-cookie, __pf, 1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21770
+*$image,domain=pmvhaven.com,redirect-rule=1x1.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/21774
+@@||townnews.com^*/tncms/*/ads/*/tnt.ads.adverts.$script
+
+! https://www.reddit.com/r/uBlockOrigin/comments/18z7fex/adblock_detected/
+tubereader.me##+js(aeld, /adblock/i)
+
+! https://github.com/uBlockOrigin/uAssets/pull/21777
+://ads.$~image,domain=~ads.8designers.com|~ads.ac.uk|~ads.adstream.com.ro|~ads.allegro.pl|~ads.am|~ads.amazon|~ads.apple.com|~ads.atmosphere.copernicus.eu|~ads.band|~ads.bestprints.biz|~ads.bikepump.com|~ads.brave.com|~ads.buscaempresas.co|~ads.cafebazaar.ir|~ads.colombiaonline.com|~ads.comeon.com|~ads.cvut.cz|~ads.doordash.com|~ads.dosocial.ge|~ads.dosocial.me|~ads.elevateplatform.co.uk|~ads.finance|~ads.google.com|~ads.gree.net|~ads.gurkerl.at|~ads.harvard.edu|~ads.instacart.com|~ads.jiosaavn.com|~ads.kaipoke.biz|~ads.kazakh-zerno.net|~ads.kifli.hu|~ads.knuspr.de|~ads.listonic.com|~ads.magalu.com|~ads.mba|~ads.mercadolivre.com.br|~ads.mgid.com|~ads.microsoft.com|~ads.midwayusa.com|~ads.mobilebet.com|~ads.msstate.edu|~ads.mst.dk|~ads.mt|~ads.nc|~ads.nipr.ac.jp|~ads.olx.pl|~ads.pinterest.com|~ads.quasaraffiliates.com|~ads.red|~ads.rohlik.cz|~ads.route.cc|~ads.safi-gmbh.ch|~ads.scotiabank.com|~ads.selfip.com|~ads.shopee.cn|~ads.shopee.co.th|~ads.shopee.com.br|~ads.shopee.com.mx|~ads.shopee.com.my|~ads.shopee.kr|~ads.shopee.ph|~ads.shopee.pl|~ads.shopee.sg|~ads.shopee.tw|~ads.shopee.vn|~ads.smartnews.com|~ads.snapchat.com|~ads.socialtheater.com|~ads.spotify.com|~ads.studyplus.co.jp|~ads.taboola.com|~ads.tiktok.com|~ads.twitter.com|~ads.typepad.jp|~ads.us.tiktok.com|~ads.viksaffiliates.com|~ads.vk.com|~ads.watson.ch|~badassembly.com|~caravansforsale.co.uk|~fusac.fr|~memo2.nl|~reempresa.org|~satmetrix.com|~seriouswheels.com,badfilter
+://ads.$~image,domain=~ads.8designers.com|~ads.ac.uk|~ads.adstream.com.ro|~ads.allegro.pl|~ads.am|~ads.amazon|~ads.apple.com|~ads.atmosphere.copernicus.eu|~ads.band|~ads.bestprints.biz|~ads.bikepump.com|~ads.brave.com|~ads.buscaempresas.co|~ads.cafebazaar.ir|~ads.colombiaonline.com|~ads.comeon.com|~ads.cvut.cz|~ads.doordash.com|~ads.dosocial.ge|~ads.dosocial.me|~ads.elevateplatform.co.uk|~ads.finance|~ads.google.com|~ads.gree.net|~ads.gurkerl.at|~ads.harvard.edu|~ads.instacart.com|~ads.jiosaavn.com|~ads.kaipoke.biz|~ads.kazakh-zerno.net|~ads.kifli.hu|~ads.knuspr.de|~ads.listonic.com|~ads.magalu.com|~ads.mba|~ads.mercadolivre.com.br|~ads.mgid.com|~ads.microsoft.com|~ads.midwayusa.com|~ads.mobilebet.com|~ads.msstate.edu|~ads.mst.dk|~ads.mt|~ads.nc|~ads.nipr.ac.jp|~ads.olx.pl|~ads.pinterest.com|~ads.quasaraffiliates.com|~ads.red|~ads.rohlik.cz|~ads.route.cc|~ads.safi-gmbh.ch|~ads.scotiabank.com|~ads.selfip.com|~ads.shopee.cn|~ads.shopee.co.th|~ads.shopee.com.br|~ads.shopee.com.mx|~ads.shopee.com.my|~ads.shopee.kr|~ads.shopee.ph|~ads.shopee.pl|~ads.shopee.sg|~ads.shopee.tw|~ads.shopee.vn|~ads.smartnews.com|~ads.snapchat.com|~ads.socialtheater.com|~ads.spotify.com|~ads.studyplus.co.jp|~ads.taboola.com|~ads.tiktok.com|~ads.twitter.com|~ads.typepad.jp|~ads.us.tiktok.com|~ads.viksaffiliates.com|~ads.vk.com|~ads.watson.ch|~badassembly.com|~caravansforsale.co.uk|~fusac.fr|~memo2.nl|~reempresa.org|~satmetrix.com|~seriouswheels.com,to=~ads.remix.es
+
+! https://github.com/uBlockOrigin/uAssets/issues/21775
+counterstrike-hack.leforum.eu,ajt.xooit.org##+js(aopr, document.body.style.backgroundPosition)
+
+! ludwig-van .com anti-adb
+ludwig-van.com##+js(aopr, canRunAds)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21794
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=broncos.com.au|bulldogs.com.au|cowboys.com.au|dolphinsnrl.com.au|dragons.com.au|melbournestorm.com.au|newcastleknights.com.au|nswrl.com.au|parraeels.com.au|penrithpanthers.com.au|qrl.com.au|raiders.com.au|roosters.com.au|seaeagles.com.au|sharks.com.au|titans.com.au|warriors.kiwi|weststigers.com.au
+@@*$ghide,domain=broncos.com.au|bulldogs.com.au|cowboys.com.au|dolphinsnrl.com.au|dragons.com.au|melbournestorm.com.au|newcastleknights.com.au|nswrl.com.au|parraeels.com.au|penrithpanthers.com.au|qrl.com.au|raiders.com.au|roosters.com.au|seaeagles.com.au|sharks.com.au|titans.com.au|warriors.kiwi|weststigers.com.au
+
+! zxi.mytechroad .com anti-adb
+zxi.mytechroad.com##+js(aost, document.getElementsByTagName, adsBlocked)
+
+! https://descargaspcpro.net anti-adb
+descargaspcpro.net##+js(rmnt, script, deblocker)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/170089
+dx-tv.com##+js(rmnt, script, deblocker)
+
+! postermockup .com anti-adb
+postermockup.com##+js(aost, setTimeout, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21832
+@@||sidearm-syndication.s3.amazonaws.com/prod/web-push.bundle.js$script,domain=hokiesports.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/165624
+||check-host.net/images/ondguard$image,1p
+||check-host.net/images/alexqhost.png$image,1p
+||check-host.net/images/aezaqlogo.png$image,1p
+check-host.net###hostazq, a[href^="/egtgo/"], a[href$="/prmetn"], a[href^="/egtgo/"], a[href$="/dk/en/web"], #sntkwbtchamsalexhost, .pr-e-lative, #sntkwbtchamspp-juiaryt, #sntkwbtchamspp-juiaryt2, .happy-new-year-to-all-adguard-and-ublock-volunteers
+
+! conceptartworld. com antiadb
+conceptartworld.com##.ts-modal-overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/21859
+pomofocus.io##+js(no-xhr-if, adsbygoogle, length:10)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21862
+@@||restegourmet.de^$ghide
+restegourmet.de##ion-col:has(> app-content-ad-grid)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21868
+plex-guide.de##+js(nostif, nextFunction, 2000)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/192iqc4/unable_to_play_games_on_yadcom_because_of_ublock/
+@@||yad.com^$ghide
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=yad.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/20747
+pressplay.top##.btn-custom[target="_blank"]
+
+! an1.com
+an1.com##+js(nano-stb, countdown, *)
+an1.com##+js(nowoif)
+
+! https://flyfi.com/#/home - Video ads
+||sponsoredaccess.viasat.com/video/$1p,media,redirect=noopmp4-1s
+
+! https://github.com/uBlockOrigin/uAssets/issues/21878
+forexwikitrading.com##+js(aost, setTimeout, adsBlocked)
+forexwikitrading.com##+js(nowoif)
+forexwikitrading.com##[href^="https://fbs.partners"]
+forexwikitrading.com##[href^="https://forexwikitrading.com/go/"]
+
+! 007stockchat .com anti-adb
+007stockchat.com##+js(nosiif, daadb)
+
+! stockhideout .com anti-adb
+stockhideout.com##+js(nosiif, daadb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21890
+copypastescan.xyz##+js(noeval-if, /chp_?ad/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21887
+@@||fundingchoicesmessages.google.com^$script,domain=formulatv.com
+@@||formulatv.com^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/170424
+fm-arena.com##+js(nostif, getComputedStyle, 2000)
+
+! westmanga.fun ads
+westmanga.fun##+js(nowoif)
+westmanga.fun##[src*=".gif"]
+
+! envato-downloader .com anti-adb
+envato-downloader.com##+js(no-fetch-if, google-analytics)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21947
+onlyfaucet.com##+js(rmnt, script, fetch)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21956
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$xhr,domain=mtv.it|mtv.de|mtv.co.uk|mtvema.com
+||imasdk.googleapis.com/pal/sdkloader/pal.js$redirect-rule=noop.js,domain=mtv.it|mtv.de|mtv.co.uk|mtvema.com
+! https://github.com/uBlockOrigin/uAssets/issues/21981
+||imasdk.googleapis.com^$script,xhr,3p,redirect-rule=noopjs,domain=mtv.nl
+
+! https://github.com/uBlockOrigin/uAssets/issues/21966
+timesnewsgroup.com.au##+js(acs, $, popup)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21973
+||launcherleaks.com/*main_script.js$script,1p
+
+! romfree .net anti-adb
+romfree.net##+js(aost, setTimeout, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21985
+livecamrips.com##+js(rmnt, script, window.open)
+
+! exactlyhowlong. com detection
+exactlyhowlong.com##+js(noeval-if, ads)
+
+! https://sportitalialive.com/video/viewlivestreaming?rel=9&cntr=0 anti-adb
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=sportitalialive.com
+sportitalialive.com##+js(nostif, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21992
+@@*$script,xhr,1p,domain=digikey.co.za|digikey.cn|digikey.ee|digikey.at|digikey.be|digikey.bg|digikey.cz|digikey.dk|digikey.fi|digikey.fr|digikey.de|digikey.gr|digikey.hu|digikey.ie|digikey.it|digikey.lv|digikey.lt|digikey.lu|digikey.nl|digikey.no|digikey.pl|digikey.pt|digikey.ro|digikey.sk|digikey.si|digikey.es|digikey.se|digikey.ch|digikey.co.uk|digikey.co.il|digikey.com.mx|digikey.ca|digikey.com.br|digikey.co.nz|digikey.com.au|digikey.co.th|digikey.tw|digikey.kr|digikey.sg|digikey.ph|digikey.my|digikey.jp|digikey.in|digikey.hk|digikey.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/21972
+watch.sling.com##+js(json-prune, ssai_manifest ad_manifest playback_info.ad_info qvt.playback_info.ad_info)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/170713
+9goals.io##+js(acs, document.addEventListener, google_ad_client)
+
+! digter8 .com anti-adb
+digter8.com##+js(acs, eval, replace)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/170809
+@@||sultanovic.info^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/pull/22008
+@@*$ghide,domain=adsdfw.com|cncabc.com|gdgsb.com|sjjhl.com|walwex.com|wstkt.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/22016
+||jads.co^$script,3p,redirect-rule=noopjs,domain=2th.me
+||juicyads.com^$image,3p,redirect-rule=1x1.gif,domain=2th.me
+2th.me##.pc-container
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/170718
+! https://www.reddit.com/r/uBlockOrigin/comments/198kyxx/is_there_a_fix_for_ultimate_guitar/
+ultimate-guitar.com##+js(set, Object.prototype.setNeedShowAdblockWarning, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/22032
+@@||meong.club^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/170487
+hdporn92.com##+js(acs, onload, puHref)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/170494
+tube.hentaistream.com##.vast-skip-button
+||res.cloudinary.com/*/Ads%20Video/preroll_$media,redirect=noop-1s.mp4
+
+! https://github.com/uBlockOrigin/uAssets/issues/22067
+@@||free-mp3-download.net^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/22064
+getmodsapk.com##+js(aeld, click, grapseex)
+getmodsapk.com##+js(nano-sib, download, *, 0.02)
+getmodsapk.com##.downloadLink:style(max-height: initial !important; overflow: revert !important)
+getmodsapk.com##center[style="position:relative; width:100%; min-height:280px;"]
+
+! 5play.ru/org Timer
+5play.*##+js(nano-sib, countdown, *)
+
+! modcombo.com timer
+modcombo.com##+js(nano-sib)
+
+! https://github.com/uBlockOrigin/uAssets/issues/22053
+3djuegosguias.com,3djuegospc.com,applesfera.com,compradiccion.com,directoalpaladar.com,elblogsalmon.com,espinof.com,genbeta.com,mundoxiaomi.com,trendencias.com,trendenciashombre.com,vidaextra.com,vitonica.com,xataka.com,xatakaciencia.com,xatakafoto.com,xatakahome.com,xatakamovil.com,xatakandroid.com,xatakawindows.com##+js(set, hasAdblocker, false)
+@@||securepubads.g.doubleclick.net/pagead/managed/js/gpt/*/pubads_impl.js$3p,script,domain=3djuegosguias.com|3djuegospc.com|applesfera.com|compradiccion.com|directoalpaladar.com|elblogsalmon.com|espinof.com|genbeta.com|mundoxiaomi.com|trendencias.com|trendenciashombre.com|vidaextra.com|vitonica.com|xataka.com|xatakaciencia.com|xatakafoto.com|xatakahome.com|xatakamovil.com|xatakandroid.com|xatakawindows.com
+@@||securepubads.g.doubleclick.net/tag/js/gpt.js$3p,script,domain=3djuegosguias.com|3djuegospc.com|applesfera.com|compradiccion.com|directoalpaladar.com|elblogsalmon.com|espinof.com|genbeta.com|mundoxiaomi.com|trendencias.com|trendenciashombre.com|vidaextra.com|vitonica.com|xataka.com|xatakaciencia.com|xatakafoto.com|xatakahome.com|xatakamovil.com|xatakandroid.com|xatakawindows.com
+@@||securepubads.g.doubleclick.net/gampad/ads$3p,xhr,domain=3djuegosguias.com|3djuegospc.com|applesfera.com|compradiccion.com|directoalpaladar.com|elblogsalmon.com|espinof.com|genbeta.com|mundoxiaomi.com|trendencias.com|trendenciashombre.com|vidaextra.com|vitonica.com|xataka.com|xatakaciencia.com|xatakafoto.com|xatakahome.com|xatakamovil.com|xatakandroid.com|xatakawindows.com
+@@||cdn.lib.getjad.io/library/$3p,script,domain=3djuegosguias.com|3djuegospc.com|applesfera.com|compradiccion.com|directoalpaladar.com|elblogsalmon.com|espinof.com|genbeta.com|mundoxiaomi.com|trendencias.com|trendenciashombre.com|vidaextra.com|vitonica.com|xataka.com|xatakaciencia.com|xatakafoto.com|xatakahome.com|xatakamovil.com|xatakandroid.com|xatakawindows.com
+@@||c.amazon-adsystem.com/aax2/apstag.js$3p,script,domain=3djuegosguias.com|3djuegospc.com|applesfera.com|compradiccion.com|directoalpaladar.com|elblogsalmon.com|espinof.com|genbeta.com|mundoxiaomi.com|trendencias.com|trendenciashombre.com|vidaextra.com|vitonica.com|xataka.com|xatakaciencia.com|xatakafoto.com|xatakahome.com|xatakamovil.com|xatakandroid.com|xatakawindows.com
+
+! soninow .com anti-adb
+soninow.com##+js(nosiif, adsbygoogle)
+
+! https://www.bailiwickexpress.com/ - ads
+bailiwickexpress.com##+js(acs, $, load_banner)
+
+! https://github.com/uBlockOrigin/uAssets/issues/22097
+@@||dotnet.guide^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/171126
+twitchmetrics.net##+js(set-cookie, npabp, 1)
+
+! https://github.com/uBlockOrigin/uAssets/pull/22099
+nyaa.land##+js(nowoif)
+nyaa.land##[href*="privateiptvaccess.com"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/19bfu0c/anti_ad_blocker_issue_on_a_website/
+||go4kora.tv/assets/js/script_antiAdBlock_*.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/22110
+msdos-games.com##+js(nostif, getComputedStyle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/22101
+@@||webshark.pl^$script,domain=vider.*
+
+! https://github.com/uBlockOrigin/uAssets/pull/22115
+teachmemicro.com##+js(aopr, DHAntiAdBlocker)
+
+! https://github.com/uBlockOrigin/uAssets/pull/22118
+rt3dmodels.com##+js(rmnt, script, deblocker)
+
+! https://github.com/uBlockOrigin/uAssets/pull/22119
+plc4me.com##+js(rmnt, script, deblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/22120
+@@*$ghide,domain=tutoriales-virales.blogspot.com|tyvpaste.blogspot.com|librospreuniversitariospdf.blogspot.com|preu-pdf-paste.blogspot.com
+
+! https://old.reddit.com/r/uBlockOrigin/comments/19c3qch/
+@@||fernsehzone.online^$ghide
+fernsehzone.online##.adsbygoogle
+
+! krx18.com
+krx18.com##center > [src*="/ads/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/22126
+playerwatch.xyz##+js(nowoif, , 10)
diff --git a/uAssets/filters/filters-mobile.txt b/uAssets/filters/filters-mobile.txt
new file mode 100644
index 0000000..16b2c9d
--- /dev/null
+++ b/uAssets/filters/filters-mobile.txt
@@ -0,0 +1,121 @@
+! Title: uBlock filters – Mobile
+! Last modified: %timestamp%
+! Description: Filters optimized for uBlock, to be used along EasyList
+! Homepage: https://github.com/uBlockOrigin/uAssets
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+!
+! GitHub issues: https://github.com/uBlockOrigin/uAssets/issues
+! GitHub pull requests: https://github.com/uBlockOrigin/uAssets/pulls
+
+!----- 2020 -----
+! https://github.com/uBlockOrigin/uBlock-discussions/discussions/310
+! https://github.com/AdguardTeam/AdguardFilters/issues/75829
+! https://github.com/AdguardTeam/AdguardFilters/issues/85997
+! https://github.com/AdguardTeam/AdguardFilters/issues/87085
+*##.ad-block
+*##.ad-center
+*##.ad-slot:not(.adsbox):not(.adsbygoogle)
+~lamire.jp,*##.ad-unit:not(.text-ad):not(.textads)
+*##.ad-wrapper
+*##.ad_container
+*##.ads-wrapper
+*##.dfp-ad
+*##.ezoic-ad
+*##.top-ad-container
+*##AMP-AD
+*##div[id*="ScriptRoot"]
+*##ins.adsbygoogle
+*##[id^="div-gpt-ad"]:not([style^="width: 1px; height: 1px; position: absolute; left: -10000px; top: -"])
+xnxx.com,xvideos.com###ad-header-mobile
+jprime.jp##.ad-overlay
+apkdone.com##.adplaceholder-top
+cyclehack.jp,gogo-miyagi.com,izuhack.akao-hotel.co.jp,nap-camp.com,runhack.jp,tsurihack.com,yamahack.com###ad-overlay
+m.washingtontimes.com##.mrf-adv__wrapper
+fortune.com##.amp-ad-wrapper
+fortune.com##.amp-ad-wrapper-dianomi
+wallpaperbetter.com##.lst_ads
+variety.com##.admz
+bakusai.com##.adSection
+gamereactor.asia,gamereactor.cn,gamereactor.cz,gamereactor.de,gamereactor.dk,gamereactor.es,gamereactor.eu,gamereactor.fi,gamereactor.fr,gamereactor.it,gamereactor.jp,gamereactor.kr,gamereactor.nl,gamereactor.no,gamereactor.pl,gamereactor.pt,gamereactor.se###ad_topScroller
+! player on clipx.tv
+xxxporns.org##.adBlock
+! https://github.com/AdguardTeam/AdguardFilters/commit/b2cba1f3abcd98699eac26bab83b89d0eed75370
+a-eroland.net,hhmanga.com,nyahentai.re##.__isboostReturnAd
+! https://github.com/uBlockOrigin/uAssets/issues/8343
+! https://www.reddit.com/r/uBlockOrigin/comments/15p0gvq/empty_ads_on_mobile/
+! https://github.com/uBlockOrigin/uAssets/issues/20681#issuecomment-1842744953
+gamerant.com,howtogeek.com,makeuseof.com,screenrant.com,xda-developers.com##.adsninja-ad-zone
+
+!----- 2023 -----
+facebook.com##.m[data-status-bar-color] > .m[data-type="vscroller"] > .m[data-mcomponent="MContainer"]:is(.bg-s2, .bg-s3):has-text(/(Sponsored|Gesponsert|Sponsorlu|Sponsorowane|Ispoonsara godhameera|Geborg|Bersponsor|Ditaja|Disponsori|Giisponsoran|Sponzorováno|Sponsoreret|Publicidad|May Sponsor|Sponsorisée|Oipytyvôva|Ɗaukar Nayin|Sponzorirano|Uterwa inkunga|Sponsorizzato|Imedhaminiwa|Hirdetés|Misy Mpiantoka|Gesponsord|Sponset|Patrocinado|Patrocinado|Sponsorizat|Sponzorované|Sponsoroitu|Sponsrat|Được tài trợ|Χορηγούμενη|Спонсорирано|Спонзорирано|Ивээн тэтгэсэн|Реклама|Спонзорисано|במימון|سپانسرڈ|دارای پشتیبانی مالی|ስፖንሰር የተደረገ|प्रायोजित|ተደረገ|प|प्रायोजित|স্পনসর্ড|ਪ੍ਰਯੋਜਿਤ|પ્રાયોજિત|ପ୍ରାୟୋଜିତ|செய்யப்பட்ட செய்யப்பட்ட|చేయబడినది చేయబడినది|ಪ್ರಾಯೋಜಿಸಲಾಗಿದೆ|ചെയ്‌തത് ചെയ്‌തത്|ලද ලද ලද|สนับสนุน สนับสนุน รับ สนับสนุน สนับสนุน|ကြော်ငြာ ကြော်ငြာ|ឧបត្ថម្ភ ឧបត្ថម្ភ ឧបត្ថម្ភ|광고|贊助|赞助内容|広告|സ്‌പോൺസർ ചെയ്‌തത്)/) + .m:is(.bg-s2, .bg-s3):has(.native-text[style^="color"]):not(:has(.m:empty)):has(+ .m:is(.bg-s2, .bg-s3) .m[data-mcomponent="ImageArea"])
+facebook.com##.m[data-status-bar-color] > .m[data-type="vscroller"] > .m[data-mcomponent="MContainer"]:is(.bg-s2, .bg-s3):has-text(/(Sponsored|Gesponsert|Sponsorlu|Sponsorowane|Ispoonsara godhameera|Geborg|Bersponsor|Ditaja|Disponsori|Giisponsoran|Sponzorováno|Sponsoreret|Publicidad|May Sponsor|Sponsorisée|Oipytyvôva|Ɗaukar Nayin|Sponzorirano|Uterwa inkunga|Sponsorizzato|Imedhaminiwa|Hirdetés|Misy Mpiantoka|Gesponsord|Sponset|Patrocinado|Patrocinado|Sponsorizat|Sponzorované|Sponsoroitu|Sponsrat|Được tài trợ|Χορηγούμενη|Спонсорирано|Спонзорирано|Ивээн тэтгэсэн|Реклама|Спонзорисано|במימון|سپانسرڈ|دارای پشتیبانی مالی|ስፖንሰር የተደረገ|प्रायोजित|ተደረገ|प|प्रायोजित|স্পনসর্ড|ਪ੍ਰਯੋਜਿਤ|પ્રાયોજિત|ପ୍ରାୟୋଜିତ|செய்யப்பட்ட செய்யப்பட்ட|చేయబడినది చేయబడినది|ಪ್ರಾಯೋಜಿಸಲಾಗಿದೆ|ചെയ്‌തത് ചെയ്‌തത്|ලද ලද ලද|สนับสนุน สนับสนุน รับ สนับสนุน สนับสนุน|ကြော်ငြာ ကြော်ငြာ|ឧបត្ថម្ភ ឧបត្ថម្ភ ឧបត្ថម្ភ|광고|贊助|赞助内容|広告|സ്‌പോൺസർ ചെയ്‌തത്)/) + .m:is(.bg-s2, .bg-s3):has(.native-text[style^="color"]):not(:has(.m:empty)) + .m:is(.bg-s2, .bg-s3):has(.m[data-mcomponent="ImageArea"])
+facebook.com##.m[data-status-bar-color] > .m[data-type="vscroller"] > .m[data-mcomponent="MContainer"]:is(.bg-s2, .bg-s3):has-text(/(Sponsored|Gesponsert|Sponsorlu|Sponsorowane|Ispoonsara godhameera|Geborg|Bersponsor|Ditaja|Disponsori|Giisponsoran|Sponzorováno|Sponsoreret|Publicidad|May Sponsor|Sponsorisée|Oipytyvôva|Ɗaukar Nayin|Sponzorirano|Uterwa inkunga|Sponsorizzato|Imedhaminiwa|Hirdetés|Misy Mpiantoka|Gesponsord|Sponset|Patrocinado|Patrocinado|Sponsorizat|Sponzorované|Sponsoroitu|Sponsrat|Được tài trợ|Χορηγούμενη|Спонсорирано|Спонзорирано|Ивээн тэтгэсэн|Реклама|Спонзорисано|במימון|سپانسرڈ|دارای پشتیبانی مالی|ስፖንሰር የተደረገ|प्रायोजित|ተደረገ|प|प्रायोजित|স্পনসর্ড|ਪ੍ਰਯੋਜਿਤ|પ્રાયોજિત|ପ୍ରାୟୋଜିତ|செய்யப்பட்ட செய்யப்பட்ட|చేయబడినది చేయబడినది|ಪ್ರಾಯೋಜಿಸಲಾಗಿದೆ|ചെയ്‌തത് ചെയ്‌തത്|ලද ලද ලද|สนับสนุน สนับสนุน รับ สนับสนุน สนับสนุน|ကြော်ငြာ ကြော်ငြာ|ឧបត្ថម្ភ ឧបត្ថម្ភ ឧបត្ថម្ភ|광고|贊助|赞助内容|広告|സ്‌പോൺസർ ചെയ്‌തത്)/) + .m:is(.bg-s2, .bg-s3):has(.native-text[style^="color"]):not(:has(.m:empty)) + .m:is(.bg-s2, .bg-s3):has(.m[data-mcomponent="ImageArea"]) + .m:not(:has(.m:empty))
+facebook.com##.m[data-status-bar-color] > .m[data-type="vscroller"] > .m[data-mcomponent="MContainer"]:is(.bg-s2, .bg-s3):has-text(/(Sponsored|Gesponsert|Sponsorlu|Sponsorowane|Ispoonsara godhameera|Geborg|Bersponsor|Ditaja|Disponsori|Giisponsoran|Sponzorováno|Sponsoreret|Publicidad|May Sponsor|Sponsorisée|Oipytyvôva|Ɗaukar Nayin|Sponzorirano|Uterwa inkunga|Sponsorizzato|Imedhaminiwa|Hirdetés|Misy Mpiantoka|Gesponsord|Sponset|Patrocinado|Patrocinado|Sponsorizat|Sponzorované|Sponsoroitu|Sponsrat|Được tài trợ|Χορηγούμενη|Спонсорирано|Спонзорирано|Ивээн тэтгэсэн|Реклама|Спонзорисано|במימון|سپانسرڈ|دارای پشتیبانی مالی|ስፖንሰር የተደረገ|प्रायोजित|ተደረገ|प|प्रायोजित|স্পনসর্ড|ਪ੍ਰਯੋਜਿਤ|પ્રાયોજિત|ପ୍ରାୟୋଜିତ|செய்யப்பட்ட செய்யப்பட்ட|చేయబడినది చేయబడినది|ಪ್ರಾಯೋಜಿಸಲಾಗಿದೆ|ചെയ്‌തത് ചെയ്‌തത്|ලද ලද ලද|สนับสนุน สนับสนุน รับ สนับสนุน สนับสนุน|ကြော်ငြာ ကြော်ငြာ|ឧបត្ថម្ភ ឧបត្ថម្ភ ឧបត្ថម្ភ|광고|贊助|赞助内容|広告|സ്‌പോൺസർ ചെയ്‌തത്)/) + .m:is(.bg-s2, .bg-s3):has(.native-text[style^="color"]):not(:has(.m:empty)) + .m:is(.bg-s2, .bg-s3):has(.m[data-mcomponent="ImageArea"]) + .m:not(:has(.m:empty)) + .m:not(:has(.m:empty)):has(+ .m .m[data-mcomponent$="TextArea"]:empty)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17817
+lookmovie2.to##div[class^="native-ad-"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/17905
+m.timesofindia.com##[href*="app.goo.gl"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/16340
+xda-developers.com##.ad-current
+forum.xda-developers.com###xdadevelopers_leaderboard_atf
+xe.com##.advertSlot
+investing.com##[class^="ad_ad-sticky_"]
+
+! https://www.zdnet.com/ placeholder
+zdnet.com##.c-adDisplay_container
+zdnet.com##.c-adSkyBox
+
+! https://www.nytimes.com/2006/10/09/business/09cnd-deal.html
+nytimes.com###acm-wrapper
+
+! https://github.com/uBlockOrigin/uAssets/issues/18325
+*##.ads_all > .ads_w
+
+! https://github.com/uBlockOrigin/uAssets/issues/18397
+liquipedia.net##.mobile-sticky-ad
+liquipedia.net##body.mobile-sticky-ad-is-active:style(padding: 3.125rem 0 0 0 !important;)
+liquipedia.net##body.mobile-sticky-ad-is-active .main-nav:style(top: 0 !important;)
+liquipedia.net##body.mobile-sticky-ad-is-active .main-nav .brand-menu:style(top: 3.125rem !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/1495nei/
+m.dcinside.com,upload.dcinside.com##+js(set-cookie, _ga, OK, , reload, 1)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/14bvy9r/
+@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,domain=thedailybeast.com
+thedailybeast.com##^html > head > meta[name="template"]:not([content="cheat"]):upward(1) > script[src*="doubleclick"]
+
+! interstitial if views >= interstitial.counter
+pornhub.com##+js(set-cookie, views, 1)
+
+! Ignore generic cosmetic filters mitigation
+apnews.com##.SovrnAd
+zaim.net##.ad-footer
+avclub.com,clickhole.com,deadspin.com,gizmodo.com,jalopnik.com,jezebel.com,kotaku.com,lifehacker.com,qz.com,splinternews.com,theinventory.com,theonion.com,theroot.com,thetakeout.com###splashy-ad-container-top
+huffpost.com,huffingtonpost.jp##.advertisement-holder
+4wank.com###pause-ads
+javpop.link##[href^="https://rapidgator.net/article/premium/ref/"]
+senzuri.tube##.video-page__adv
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/156544
+tr.ign.com##.articleBody:style(margin-top: 80px !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19520
+m.apkpure.com##.ad-adsense.js-ad-slot
+fxstreet.com##.fxs_stickyAd-mobile
+apkpure.com##.ad-box-auto
+
+! https://www.reddit.com/r/uBlockOrigin/comments/16y31qu/ezvid_ads_not_blocked_in_ublock_origin_for/
+*##.ez-video-wrap
+
+! https://github.com/uBlockOrigin/uAssets/issues/19721#issuecomment-1864681386
+correiobraziliense.com.br##.publi
+poder360.com.br##.box-advertising
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/169090
+4hu.tv##.wrap > #btmBox
+
+! https://github.com/uBlockOrigin/uAssets/issues/21924
+wunderground.com##.ad-wrap
diff --git a/uAssets/filters/filters.txt b/uAssets/filters/filters.txt
new file mode 100644
index 0000000..4d2f87b
--- /dev/null
+++ b/uAssets/filters/filters.txt
@@ -0,0 +1,15424 @@
+! Title: uBlock filters
+! Last modified: %timestamp%
+! Expires: 5 days
+! Description: Filters optimized for uBlock, to be used along EasyList
+! Homepage: https://github.com/uBlockOrigin/uAssets
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+!
+! GitHub issues: https://github.com/uBlockOrigin/uAssets/issues
+! GitHub pull requests: https://github.com/uBlockOrigin/uAssets/pulls
+
+! https://github.com/uBlockOrigin/uAssets/issues/1408
+*_ad_$media,domain=youtube.com,3p
+! https://github.com/easylist/easylist/issues/5112
+! @@||youtube.com/get_video_info?*timedtext_editor$xhr,1p
+! https://redd.it/ggcmkp https://redd.it/gx03e0
+! https://github.com/uBlockOrigin/uAssets/pull/18106/
+www.youtube.com##+js(trusted-replace-xhr-response, /"adPlacements.*?([A-Z]"\}|"\}{2})\}\]\,/, , /playlist\?list=|player\?key=|watch\?v=|youtubei\/v1\/player/)
+www.youtube.com##+js(trusted-replace-xhr-response, /"adPlacements.*?("adSlots"|"adBreakHeartbeatParams")/gms, $1, youtubei/v1/player)
+tv.youtube.com##+js(trusted-replace-xhr-response, '"adPlacements"', '"no_ads"', /playlist\?list=|player\?key=|watch\?v=|youtubei\/v1\/player/)
+www.youtube.com##+js(trusted-replace-fetch-response, /"adPlacements.*?([A-Z]"\}|"\}{2})\}\]\,/, , player?key=)
+! https://www.reddit.com/r/uBlockOrigin/comments/154vtwy/getting_ads_on_youtube/jsu299l/
+! https://github.com/uBlockOrigin/uBlock-issues/issues/3083#issuecomment-1899349892
+youtube.com,youtubekids.com,youtube-nocookie.com,~accounts.youtube.com,~payments.youtube.com##+js(set, ytInitialPlayerResponse.playerAds, undefined)
+youtube.com,youtubekids.com,youtube-nocookie.com,~accounts.youtube.com,~payments.youtube.com##+js(set, ytInitialPlayerResponse.adPlacements, undefined)
+youtube.com,youtubekids.com,youtube-nocookie.com,~accounts.youtube.com,~payments.youtube.com##+js(set, ytInitialPlayerResponse.adSlots, undefined)
+youtube.com,youtubekids.com,youtube-nocookie.com,~accounts.youtube.com,~payments.youtube.com##+js(set, playerResponse.adPlacements, undefined)
+! https://github.com/uBlockOrigin/uAssets/issues/7636#issuecomment-1674303331
+m.youtube.com,music.youtube.com,youtubekids.com,youtube-nocookie.com##+js(json-prune, playerResponse.adPlacements playerResponse.playerAds playerResponse.adSlots adPlacements playerAds adSlots important)
+! https://github.com/uBlockOrigin/uAssets/issues/15632
+youtube.com##.ytlr-horizontal-list-renderer__items > .yt-virtual-list__container > .yt-virtual-list__item--visible.yt-virtual-list__item--selected.yt-virtual-list__item:has-text(Ad)
+! https://www.reddit.com/r/uBlockOrigin/comments/163cy47/youtube_antiadblock_and_ads_weekly_thread_august/jyemgzo/
+||googlevideo.com/initplayback?source=youtube*&c=TVHTML5&oad=$xhr,domain=youtube.com
+
+! AdDefend
+!#if env_chromium
+lablue.*##+js(nostif, push, 500)
+||doubleclick.net^$script,important,domain=auto-motor-und-sport.de
+!#endif
+4-liga.com,4fansites.de,4players.de,9monate.de##+js(nostif, .call(null), 10)
+aachener-nachrichten.de,aachener-zeitung.de,abendblatt.de,abendzeitung-muenchen.de,about-drinks.com,abseits-ka.de,airliners.de,ajaxshowtime.com,allgemeine-zeitung.de,antenne.de,arcor.de,areadvd.de,areamobile.de,ariva.de,astronews.com,aussenwirtschaftslupe.de,auszeit.bio,auto-motor-und-sport.de,auto-service.de,autobild.de,autoextrem.de,autopixx.de,autorevue.at,az-online.de##+js(nostif, .call(null), 10)
+baby-vornamen.de,babyclub.de,bafoeg-aktuell.de,berliner-kurier.de,berliner-zeitung.de,bigfm.de,bikerszene.de,bildderfrau.de,blackd.de,blick.de,boerse-online.de,boerse.de,boersennews.de,braunschweiger-zeitung.de,brieffreunde.de,brigitte.de,buerstaedter-zeitung.de,buffed.de,businessinsider.de,buzzfeed.at,buzzfeed.de##+js(nostif, .call(null), 10)
+caravaning.de,cavallo.de,chefkoch.de,cinema.de,clever-tanken.de,computerbild.de,computerhilfen.de,comunio-cl.com,comunio.*,connect.de##+js(nostif, .call(null), 10)
+da-imnetz.de,dasgelbeblatt.de,dbna.com,dbna.de,deichstube.de,deine-tierwelt.de,der-betze-brennt.de,derwesten.de,desired.de,dhd24.com,dieblaue24.com,digitalfernsehen.de,dnn.de,donnerwetter.de##+js(nostif, .call(null), 10)
+e-hausaufgaben.de,e-mountainbike.com,eatsmarter.de,echo-online.de,ecomento.de,einfachschoen.me,elektrobike-online.com,eltern.de,epochtimes.de,essen-und-trinken.de,express.de,extratipp.com##+js(nostif, .call(null), 10)
+familie.de,fanfiktion.de,fehmarn24.de,fettspielen.de,fid-gesundheitswissen.de,finanzen.*,finanznachrichten.de,finanztreff.de,finya.de,firmenwissen.de,fitforfun.de,fnp.de,focus.de,football365.fr,formel1.de,fr.de,frankfurter-wochenblatt.de,freenet.de,fremdwort.de,froheweihnachten.info,frustfrei-lernen.de,fuldaerzeitung.de,funandnews.de,fussballdaten.de,futurezone.de##+js(nostif, .call(null), 10)
+gala.de,gamepro.de,gamersglobal.de,gamesaktuell.de,gamestar.de,gameswelt.*,gamezone.de,gartendialog.de,gartenlexikon.de,gedichte.ws,geissblog.koeln,gelnhaeuser-tageblatt.de,general-anzeiger-bonn.de,geniale-tricks.com,genialetricks.de,gesund-vital.de,gesundheit.de,gevestor.de,gewinnspiele.tv,giessener-allgemeine.de,giessener-anzeiger.de,gifhorner-rundschau.de,giga.de,gipfelbuch.ch,gmuender-tagespost.de,golem.de,gruenderlexikon.de,gusto.at,gut-erklaert.de,gutfuerdich.co##+js(nostif, .call(null), 10)
+hallo-muenchen.de,hamburg.de,hanauer.de,hardwareluxx.de,hartziv.org,harzkurier.de,haus-garten-test.de,hausgarten.net,haustec.de,haz.de,heftig.*,heidelberg24.de,heilpraxisnet.de,heise.de,helmstedter-nachrichten.de,hersfelder-zeitung.de,hftg.co,hifi-forum.de,hna.de,hochheimer-zeitung.de,hoerzu.de,hofheimer-zeitung.de##+js(nostif, .call(null), 10)
+iban-rechner.de,ikz-online.de,immobilienscout24.de,ingame.de,inside-digital.de,inside-handy.de,investor-verlag.de##+js(nostif, .call(null), 10)
+jappy.com,jpgames.de##+js(nostif, .call(null), 10)
+kabeleins.de,kachelmannwetter.com,kamelle.de,kicker.de,kindergeld.org,klettern-magazin.de,klettern.de,kochbar.de,kreis-anzeiger.de,kreisbote.de,kreiszeitung.de,ksta.de,kurierverlag.de##+js(nostif, .call(null), 10)
+lachainemeteo.com,lampertheimer-zeitung.de,landwirt.com,laut.de,lauterbacher-anzeiger.de,leckerschmecker.me,leinetal24.de,lesfoodies.com,levif.be,lifeline.de,liga3-online.de,likemag.com,linux-community.de,linux-magazin.de,live.vodafone.de,ln-online.de,lokalo24.de,lustaufsleben.at,lustich.de,lvz.de,lz.de##+js(nostif, .call(null), 10)
+macwelt.de,macworld.co.uk,mail.de,main-spitze.de,manager-magazin.de,manga-tube.me,mathebibel.de,mathepower.com,maz-online.de,medisite.fr,mehr-tanken.de,mein-kummerkasten.de,mein-mmo.de,mein-wahres-ich.de,meine-anzeigenzeitung.de,meinestadt.de,menshealth.de,mercato365.com,merkur.de,messen.de,metal-hammer.de,metalflirt.de,meteologix.com,minecraft-serverlist.net,mittelbayerische.de,modhoster.de,moin.de,mopo.de,morgenpost.de,motor-talk.de,motorbasar.de,motorradonline.de,motorsport-total.com,motortests.de,mountainbike-magazin.de,moviejones.de,moviepilot.de,mt.de,mtb-news.de,musiker-board.de,musikexpress.de,musikradar.de,mz-web.de##+js(nostif, .call(null), 10)
+n-tv.de,naumburger-tageblatt.de,netzwelt.de,neuepresse.de,neueroeffnung.info,news.at,news.de,news38.de,newsbreak24.de,nickles.de,nicknight.de,nl.hardware.info,nn.de,nnn.de,nordbayern.de,notebookchat.com,notebookcheck-ru.com,notebookcheck-tr.com,notebookcheck.*,noz-cdn.de,noz.de,nrz.de,nw.de,nwzonline.de##+js(nostif, .call(null), 10)
+oberhessische-zeitung.de,oeffentlicher-dienst.info,onlinekosten.de,onvista.de,op-marburg.de,op-online.de,outdoor-magazin.com,outdoorchannel.de##+js(nostif, .call(null), 10)
+paradisi.de,pc-magazin.de,pcgames.de,pcgameshardware.de,pcwelt.de,pcworld.es,peiner-nachrichten.de,pferde.de,pietsmiet.de,pixelio.de,pkw-forum.de,playboy.de,playfront.de,pnn.de,pons.com,prad.de,prignitzer.de,profil.at,promipool.de,promobil.de,prosiebenmaxx.de,psychic.de##+js(nostif, .call(null), 10)
+quoka.de##+js(nostif, .call(null), 10)
+radio.at,radio.de,radio.dk,radio.es,radio.fr,radio.it,radio.net,radio.pl,radio.pt,radio.se,ran.de,readmore.de,rechtslupe.de,recording.de,rennrad-news.de,reuters.com,reviersport.de,rhein-main-presse.de,rheinische-anzeigenblaetter.de,rimondo.com,roadbike.de,roemische-zahlen.net,rollingstone.de,rot-blau.com,rp-online.de,rtl.de,rtv.de,rugby365.fr,ruhr24.de,rundschau-online.de,runnersworld.de##+js(nostif, .call(null), 10)
+safelist.eu,salzgitter-zeitung.de,sat1.de,sat1gold.de,schoener-wohnen.de,schwaebische-post.de,schwarzwaelder-bote.de,serienjunkies.de,shz.de,sixx.de,skodacommunity.de,smart-wohnen.net,sn.at,sozialversicherung-kompetent.de,spiegel.de,spielen.de,spieletipps.de,spielfilm.de,sport.de,sport365.fr,sportal.de,spox.com,stern.de,stuttgarter-nachrichten.de,stuttgarter-zeitung.de,sueddeutsche.de,svz.de,szene1.at,szene38.de##+js(nostif, .call(null), 10)
+t-online.de,tagesspiegel.de,taschenhirn.de,techadvisor.co.uk,techstage.de,tele5.de,testedich.*,the-voice-of-germany.de,thueringen24.de,tichyseinblick.de,tierfreund.co,tiervermittlung.de,torgranate.de,transfermarkt.*,trend.at,truckscout24.*,tv-media.at,tvdigital.de,tvinfo.de,tvspielfilm.de,tvtoday.de,tvtv.*,tz.de##+js(nostif, .call(null), 10)
+unicum.de,unnuetzes.com,unsere-helden.com,unterhalt.net,usinger-anzeiger.de,usp-forum.de##+js(nostif, .call(null), 10)
+videogameszone.de,vienna.at,vip.de,virtualnights.com,vox.de##+js(nostif, .call(null), 10)
+wa.de,wallstreet-online.de,waz.de,weather.us,webfail.com,weihnachten.me,weihnachts-bilder.org,weihnachts-filme.com,welt.de,weltfussball.at,weristdeinfreund.de,werkzeug-news.de,werra-rundschau.de,wetterauer-zeitung.de,wetteronline.*,wieistmeineip.*,wiesbadener-kurier.de,wiesbadener-tagblatt.de,winboard.org,windows-7-forum.net,winfuture.de,wintotal.de,wlz-online.de,wn.de,wohngeld.org,wolfenbuetteler-zeitung.de,wolfsburger-nachrichten.de,woman.at,womenshealth.de,wormser-zeitung.de,woxikon.de,wp.de,wr.de##+js(nostif, .call(null), 10)
+yachtrevue.at##+js(nostif, .call(null), 10)
+ze.tt,zeit.de##+js(nostif, .call(null), 10)
+meineorte.com,osthessen-news.de,techadvisor.com##+js(nostif, .call(null))
+airliners.de,auszeit.bio,autorevue.at,bafoeg-aktuell.de,berliner-kurier.de,berliner-zeitung.de,bikerszene.de,boersennews.de,bonedo.de,chefkoch.de,clever-tanken.de,deine-tierwelt.de,dhd24.com,digitalfernsehen.de,donnerwetter.de,e-hausaufgaben.de,express.de,fanfiktion.de,formel1.de,fremdwort.de,frustfrei-lernen.de,gameswelt.*,gartendialog.de,gartenlexikon.de,gewinnspiele.tv,gut-erklaert.de,haus-garten-test.de,iban-rechner.de,inside-handy.de,kicker.de,kindergeld.org,ksta.de,liga3-online.de,lz.de,messen.de,moviejones.de,mt.de,musiker-board.de,mz-web.de,naumburger-tageblatt.de,news.de,nickles.de,nordbayern.de,nw.de,oeffentlicher-dienst.info,onlinemarketing.de,prad.de,psychic.de,quoka.de,rennrad-news.de,rheinische-anzeigenblaetter.de,rimondo.com,rundschau-online.de,spielen.de,spieletipps.de,spielfilm.de,tichyseinblick.de,torgranate.de,truckscout24.*,unicum.de,unsere-helden.com,webfail.com,weltfussball.at,weristdeinfreund.de,wieistmeineip.*##^script:has-text(===):has-text(/[\w\W]{16000}/)
+4-liga.com,4fansites.de,4players.de,9monate.de,abendblatt.de,abendzeitung-muenchen.de,abseits-ka.de,ajaxshowtime.com,allgemeine-zeitung.de,antenne.de,arcor.de,areadvd.de,areamobile.de,ariva.de,astronews.com,aussenwirtschaftslupe.de,auto-motor-und-sport.de,auto-service.de,autobild.de,autoextrem.de,autopixx.de,az-online.de,baby-vornamen.de,babyclub.de,bigfm.de,bildderfrau.de,blackd.de,boerse-online.de,boerse.de,braunschweiger-zeitung.de,brieffreunde.de,buerstaedter-zeitung.de,buffed.de,businessinsider.de,caravaning.de,cavallo.de,cinema.de,computerbild.de,computerhilfen.de,comunio-cl.com,comunio.*,connect.de,da-imnetz.de,dbna.com,dbna.de,der-betze-brennt.de,derwesten.de,desired.de,dieblaue24.com,dnn.de,e-mountainbike.com,eatsmarter.de,echo-online.de,einfachschoen.me,elektrobike-online.com,epochtimes.de,extratipp.com,fettspielen.de,fid-gesundheitswissen.de,finanzen.*,finanztreff.de,firmenwissen.de,fitforfun.de,fnp.de,focus.de,football365.fr,fr.de,fuldaerzeitung.de,fussballdaten.de,futurezone.de,gala.de,gamersglobal.de,gamesaktuell.de,gamestar.de,gameswelt.at,gameswelt.de,gamezone.de,geissblog.koeln,gelnhaeuser-tageblatt.de,general-anzeiger-bonn.de,geniale-tricks.com,genialetricks.de,gesund-vital.de,gesundheit.de,gevestor.de,giessener-anzeiger.de,gifhorner-rundschau.de,giga.de,gipfelbuch.ch,gmuender-tagespost.de,golem.de,gusto.at,gutfuerdich.co,hallo-muenchen.de,hamburg.de,hanauer.de,hardwareluxx.de,hartziv.org,harzkurier.de,hausgarten.net,haustec.de,haz.de,heftig.*,heidelberg24.de,heilpraxisnet.de,heise.de,helmstedter-nachrichten.de,hersfelder-zeitung.de,hftg.co,hochheimer-zeitung.de,hoerzu.de,hofheimer-zeitung.de,ikz-online.de,immobilienscout24.de,ingame.de,inside-digital.de,inside-handy.de,investor-verlag.de,jappy.com,jpgames.de,kabeleins.de,kamelle.de,klettern-magazin.de,klettern.de,kochbar.de,kreis-anzeiger.de,lablue.*,lachainemeteo.com,lampertheimer-zeitung.de,landwirt.com,laut.de,lauterbacher-anzeiger.de,leckerschmecker.me,lesfoodies.com,levif.be,lifeline.de,likemag.com,linux-community.de,linux-magazin.de,ln-online.de,lustaufsleben.at,lustich.de,lvz.de,main-spitze.de,manager-magazin.de,manga-tube.me,mathepower.com,maz-online.de,medisite.fr,mehr-tanken.de,mein-kummerkasten.de,mein-mmo.de,mein-wahres-ich.de,meinestadt.de,menshealth.de,mercato365.com,merkur.de,metal-hammer.de,metalflirt.de,minecraft-serverlist.net,mittelbayerische.de,modhoster.de,mopo.de,morgenpost.de,motor-talk.de,motorbasar.de,motorradonline.de,motorsport-total.com,motortests.de,mountainbike-magazin.de,moviepilot.de,mtb-news.de,musikexpress.de,musikradar.de,n-tv.de,netzwelt.de,neuepresse.de,neueroeffnung.info,news.at,news38.de,nicknight.de,nl.hardware.info,nnn.de,nordbayern.de,notebookchat.com,notebookcheck-ru.com,notebookcheck-tr.com,notebookcheck.*,noz-cdn.de,noz.de,nrz.de,nwzonline.de,oberhessische-zeitung.de,onlinekosten.de,onvista.de,op-marburg.de,op-online.de,outdoor-magazin.com,outdoorchannel.de,paradisi.de,pc-magazin.de,pcgames.de,pcgameshardware.de,peiner-nachrichten.de,pferde.de,pixelio.de,pkw-forum.de,playboy.de,playfront.de,pnn.de,pons.com,prignitzer.de,profil.at,promipool.de,promobil.de,prosiebenmaxx.de,radio.at,radio.de,radio.dk,radio.es,radio.fr,radio.it,radio.net,radio.pl,radio.pt,radio.se,ran.de,readmore.de,rechtslupe.de,rennrad-news.de,reviersport.de,rhein-main-presse.de,roadbike.de,roemische-zahlen.net,rollingstone.de,rot-blau.com,rp-online.de,rtl.de,rtv.de,rugby365.fr,runnersworld.de,safelist.eu,salzgitter-zeitung.de,sat1.de,sat1gold.de,schwaebische-post.de,serienjunkies.de,shz.de,sixx.de,skodacommunity.de,smart-wohnen.net,sn.at,sozialversicherung-kompetent.de,spiegel.de,spielfilm.de,sport.de,sport365.fr,sportal.de,spox.com,svz.de,szene1.at,szene38.de,tagesspiegel.de,taschenhirn.de,techstage.de,tele5.de,testedich.*,the-voice-of-germany.de,thueringen24.de,tierfreund.co,tiervermittlung.de,trend.at,tv-media.at,tvdigital.de,tvspielfilm.de,tvtoday.de,tvtv.*,tz.de,unterhalt.net,usinger-anzeiger.de,usp-forum.de,videogameszone.de,vienna.at,vip.de,virtualnights.com,vox.de,waz.de,web.de,webfail.com,welt.de,weristdeinfreund.de,werkzeug-news.de,werra-rundschau.de,wetterauer-zeitung.de,wetteronline.*,wiesbadener-kurier.de,wiesbadener-tagblatt.de,winboard.org,windows-7-forum.net,winfuture.de,wintotal.de,wlz-online.de,wn.de,wohngeld.org,wolfenbuetteler-zeitung.de,wolfsburger-nachrichten.de,woman.at,womenshealth.de,wormser-zeitung.de,woxikon.de,wp.de,wr.de,yachtrevue.at##^script:has-text(Inject=!)
+! https://github.com/uBlockOrigin/uAssets/issues/22096
+!#if cap_html_filtering
+giga.de,kino.de##^script:has-text(AdDefend)
+!#else
+giga.de,kino.de##+js(rmnt, script, AdDefend)
+!#endif
+wetter.*##+js(nostif, (null), 10)
+tagesspiegel.de##+js(aopr, Notification)
+newsbreak24.de##^script:has-text(===):has-text(/[\w\W]{14000}/)
+t-online.de##+js(set, abp, false)
+businessinsider.de##.slideshow__mobile-ad
+businessinsider.de##.slideshow__middle-ad-container
+businessinsider.de##.slideshow__desktop-ad:style(max-height:20px)
+businessinsider.de##.bi-superbanner
+businessinsider.de##.slideshow__ad
+businessinsider.de##.bi-injected-ad
+businessinsider.de##.adup-wrap
+desired.de##.sad_banner
+frustfrei-lernen.de##.noContentBannerArea
+macworld.co.uk##.leaderBoardHolder
+reuters.com##[class^="leaderboard-space"]
+reuters.com##[class^="workspace-article-banner"]
+reuters.com##div[class^="regular-article-layout__inner_"]:has(> div[data-testid="StickyRail"])
+! https://www.reddit.com/r/uBlockOrigin/comments/a5g4uu/wallstreetonline_likewise_for_many_german_pages/
+wallstreet-online.de##+js(nostif, userHasAdblocker)
+bonedo.de##.banner
+mtb-news.de##.mtbnews-forum__banner
+newsbreak24.de##.aw-track-click
+newsbreak24.de###adup1
+transfermarkt.*##.noscript
+! https://github.com/uBlockOrigin/uAssets/issues/10975
+n-tv.de##+js(aopr, embedAddefend)
+! To counter unnecessary exception filters
+||adnxs.com^$important,domain=bz-berlin.de|metal-hammer.de|musikexpress.de|rollingstone.de|stylebook.de
+||googlesyndication.com^$script,important,domain=autobild.de|metal-hammer.de|musikexpress.de|rollingstone.de
+||sascdn.com^$script,important,domain=autobild.de|metal-hammer.de|musikexpress.de|rollingstone.de
+||smartadserver.com^$script,important,domain=metal-hammer.de|musikexpress.de|rollingstone.de|welt.de
+@@||11freunde.de/sites/all/themes/elf/gujAd/gujAd.js$domain=11freunde.de,badfilter
+@@||g.doubleclick.net/gpt/pubads_impl_$script,domain=11freunde.de|auto-motor-und-sport.de|brigitte.de|gala.de|geo.de|hardwareluxx.de|hbf-info.de|kochbar.de|n-tv.de|notebooksbilliger.de|rakuten.at|rakuten.de|rtl.de|stern.de|welt.de|zalando.de,badfilter
+abendzeitung-muenchen.de##.wtc-wg-plugilo-connector
+boerse-online.de##.center_top_bar
+wetter.de##.outbrain-ad-slot
+||iframe.chefkoch.de/amp/online-food-trade/rewe/$frame
+mathebibel.de###banner-bottom
+/\.de\/[a-z]{10,18}\.js$/$script,1p,strict1p,match-case,domain=www.capital.de|www.essen-und-trinken.de|www.geo.de|www.eltern.de
+! https://github.com/uBlockOrigin/uAssets/issues/12360 VRM anti adblock
+! https://github.com/uBlockOrigin/uAssets/issues/6541#issuecomment-1093665401
+! https://github.com/uBlockOrigin/uAssets/issues/12962
+@@*$ghide,domain=allgemeine-zeitung.de|buffed.de|buerstaedter-zeitung.de|echo-online.de|gamezone.de|lampertheimer-zeitung.de|lauterbacher-anzeiger.de|main-spitze.de|oberhessische-zeitung.de|wiesbadener-kurier.de|wormser-zeitung.de
+! https://github.com/uBlockOrigin/uAssets/issues/11915#issuecomment-1407167951
+echo-online.de##.mainFooter__ccePosition
+echo-online.de##.recommendations__cceWidget
+echo-online.de##.storyElementWrapper__container:has(> [data-testid="storyElementWrapper-cceWidget-element"])
+echo-online.de##.swiper-slide [data-testid="topStories-cardSlider-ad"]:upward(.swiper-slide)
+echo-online.de##.teaserGrid > div:has(.nativeAd)
+echo-online.de##div.frontpageOverview__child
+allgemeine-zeitung.de,buerstaedter-zeitung.de,echo-online.de,lampertheimer-zeitung.de,lauterbacher-anzeiger.de,main-spitze.de,oberhessische-zeitung.de,wiesbadener-kurier.de,wormser-zeitung.de##.adSlot, .loadingBanner
+berliner-zeitung.de##[class^="ad-slot"]
+berliner-zeitung.de##[class^="outbrain"]
+! breakage
+@@||scdn.cxense.com/cx.cce.js$script,domain=allgemeine-zeitung.de|buerstaedter-zeitung.de|echo-online.de|lampertheimer-zeitung.de|lauterbacher-anzeiger.de|main-spitze.de|oberhessische-zeitung.de|wiesbadener-kurier.de|wormser-zeitung.de
+@@||api.cxense.com/public/widget/data$xhr,domain=allgemeine-zeitung.de|buerstaedter-zeitung.de|echo-online.de|lampertheimer-zeitung.de|lauterbacher-anzeiger.de|main-spitze.de|oberhessische-zeitung.de|wiesbadener-kurier.de|wormser-zeitung.de
+
+! Yavli ads
+*.jpg$script,domain=allthingsvegas.com|clashdaily.com|madworldnews.com|politicalcowboy.com|reviveusa.com|sonsoflibertymedia.com|teltarif.de|themattwalshblog.com|videogamesblogger.com
+! https://www.reddit.com/r/uBlockOrigin/comments/12hq3us/
+*$script,3p,denyallow=instagram.com|quantcast.com|mrf.io|onnetwork.tv|pahtzh.tech|enetscores.com|jsdelivr.net|jwpcdn.com|fbcdn.net|facebook.net|fastly.net|fastlylb.net|jquery.com|hwcdn.net|hcaptcha.com|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com|consensu.org|agorahtag.tech|aghtag.tech|etop.ro|ziareromania.ro|brid.tv|wall-street.ro|fontawesome.com,domain=ziare.com|cancan.ro|ciao.ro|gandul.ro|prosport.ro|descopera.ro|csid.ro|raziculacrimi.ro|go4games.ro|wall-street.ro|9am.ro
+*$script,3p,denyallow=sirdata.fr|anycast.me|mrf.io|priice.net|consentframework.com|twitter.com|jsdelivr.net|jwpcdn.com|fbcdn.net|facebook.net|fastly.net|fastlylb.net|jquery.com|hwcdn.net|hcaptcha.com|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com|consensu.org,domain=lebigdata.fr|montjeuturf.net
+*$script,3p,denyallow=twitter.com|jsdelivr.net|jwpcdn.com|fbcdn.net|facebook.net|fastly.net|fastlylb.net|jquery.com|hwcdn.net|hcaptcha.com|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com|consensu.org|sharethis.com|tradingview.com,domain=beforeitsnews.com
+! https://github.com/uBlockOrigin/uAssets/issues/18430
+*$script,domain=amgreatness.com,3p,denyallow=spreaker.com|starfield.ai
+/^https?:\/\/.*\/easylist\/[0-9]{5}/
+*banner$domain=beforeitsnews.com,image
+||jeengweb.com^$3p
+! https://github.com/uBlockOrigin/uBlock-issues/issues/2858
+dcdirtylaundry.com,ipatriot.com,newser.com,politicalcowboy.com##+js(aost, Math, onerror)
+! aupetitparieur.com,allthingsvegas.com,beforeitsnews.com,concomber.com,conservativebrief.com,conservativefiringline.com,dailylol.com,funnyand.com,letocard.fr,mamieastuce.com,meilleurpronostic.fr,patriotnationpress.com,toptenz.net,vitamiiin.com,writerscafe.org,populist.press,dailytruthreport.com,livinggospeldaily.com,first-names-meanings.com,welovetrump.com,thehayride.com,thelibertydaily.com,thepoke.co.uk,thepolitistick.com,theblacksphere.net,shark-tank.com,naturalblaze.com,greatamericanrepublic.com,dailysurge.com,truthlion.com,flagandcross.com,westword.com,republicbrief.com,freedomfirstnetwork.com,phoenixnewtimes.com,clashdaily.com,madworldnews.com,reviveusa.com,sonsoflibertymedia.com,videogamesblogger.com,topminceur.fr,lovezin.fr,protrumpnews.com,thepalmierireport.com,kresy.pl,thepatriotjournal.com,gellerreport.com,wltreport.com,miaminewtimes.com,politicalsignal.com,rightwingnews.com,bigleaguepolitics.com,comicallyincorrect.com##+js(aost, Math.random, injectedScript)
+telexplorer.com.ar##+js(aost, Math.random, /injectedScript.*inlineScript/)
+designbump.com,thedesigninspiration.com##+js(aost, Math.random, /(?=.*onerror)(?=^(?!.*(https)))/)
+! https://github.com/uBlockOrigin/uAssets/issues/19808
+teltarif.de##+js(nostif, null), 10)
+!#if cap_html_filtering
+teltarif.de##^script:has-text(/getAdUnitPath|\.then\(eval\)|DisplayAcceptableAdIfAdblocked|\,eval\)\)\)\;|\.join\(\'\'\)\}\;/)
+aupetitparieur.com,allthingsvegas.com,100percentfedup.com,beforeitsnews.com,concomber.com,conservativebrief.com,conservativefiringline.com,dailylol.com,funnyand.com,letocard.fr,mamieastuce.com,meilleurpronostic.fr,patriotnationpress.com,toptenz.net,vitamiiin.com,writerscafe.org,populist.press,dailytruthreport.com,livinggospeldaily.com,first-names-meanings.com,welovetrump.com,thehayride.com,thelibertydaily.com,thepoke.co.uk,thepolitistick.com,theblacksphere.net,shark-tank.com,naturalblaze.com,greatamericanrepublic.com,dailysurge.com,truthlion.com,flagandcross.com,westword.com,republicbrief.com,freedomfirstnetwork.com,phoenixnewtimes.com,designbump.com,clashdaily.com,madworldnews.com,reviveusa.com,sonsoflibertymedia.com,thedesigninspiration.com,videogamesblogger.com,protrumpnews.com,thepalmierireport.com,kresy.pl,thepatriotjournal.com,gellerreport.com,thegatewaypundit.com,wltreport.com,miaminewtimes.com,politicalsignal.com,rightwingnews.com,bigleaguepolitics.com,comicallyincorrect.com##^script:has-text(/==undefined.*body/)
+!#else
+teltarif.de##+js(rmnt, script, /getAdUnitPath|\.then\(eval\)|DisplayAcceptableAdIfAdblocked|\,eval\)\)\)\;|\.join\(\'\'\)\}\;/)
+aupetitparieur.com,allthingsvegas.com,100percentfedup.com,beforeitsnews.com,concomber.com,conservativebrief.com,conservativefiringline.com,dailylol.com,funnyand.com,letocard.fr,mamieastuce.com,meilleurpronostic.fr,patriotnationpress.com,toptenz.net,vitamiiin.com,writerscafe.org,populist.press,dailytruthreport.com,livinggospeldaily.com,first-names-meanings.com,welovetrump.com,thehayride.com,thelibertydaily.com,thepoke.co.uk,thepolitistick.com,theblacksphere.net,shark-tank.com,naturalblaze.com,greatamericanrepublic.com,dailysurge.com,truthlion.com,flagandcross.com,westword.com,republicbrief.com,freedomfirstnetwork.com,phoenixnewtimes.com,designbump.com,clashdaily.com,madworldnews.com,reviveusa.com,sonsoflibertymedia.com,thedesigninspiration.com,videogamesblogger.com,protrumpnews.com,thepalmierireport.com,kresy.pl,thepatriotjournal.com,gellerreport.com,thegatewaypundit.com,wltreport.com,miaminewtimes.com,politicalsignal.com,rightwingnews.com,bigleaguepolitics.com,comicallyincorrect.com##+js(rmnt, script, /==undefined.*body/)
+!#endif
+.jpg|$script,xhr,1p,domain=teltarif.de
+||teltarif.de/img/$script,1p
+teltarif.de##img[referrerpolicy="unsafe-url"][src^="/img/"][src$=".jpg"]
+
+whatfinger.com##+js(set, oeo, noopFunc)
+@@*$ghide,domain=themattwalshblog.com
+||rddywd.com^$image,redirect-rule=1x1.gif
+@@||rddywd.com/advertising.js$script
+@@||thegatewaypundit.com^$image,1p
+@@||wltreport.com^$image,1p
+wltreport.com##.top-banner
+
+! https://github.com/NanoMeow/QuickReports/issues/2493
+newser.com##+js(aeld, load, Object)
+funnyand.com##.ad-unit-desktop
+conservativebrief.com###main-box-3
+conservativebrief.com###main-box-5
+conservativebrief.com###main-box-7
+conservativebrief.com##.ai-attributes
+conservativebrief.com##[id^="vuukle-ad-"]
+conservativebrief.com##.ai_widget
+conservativebrief.com###vuukle-powerbar
+beforeitsnews.com##[src*="/banner"]
+politicalcowboy.com##.dsk-box-ad-e
+politicalcowboy.com##.dsk-box-ad-a
+truthlion.com##.ad-banner-revcontent
+westword.com##.AirBillboardInlineContentresponsive
+gellerreport.com##.__hinit
+
+! https://adblockplus.org/forum/viewtopic.php?f=2&t=43192
+! Users should not have to punch holes in their blockers if it can be avoided.
+*/fuckadblock-$script,redirect=fuckadblock.js-3.2.0:5
+*/fuckadblock.$script,redirect=fuckadblock.js-3.2.0:5
+! https://github.com/gorhill/uBlock/issues/1271
+! https://forums.lanik.us/viewtopic.php?f=62&t=40409
+*/blockadblock.$script,redirect=fuckadblock.js-3.2.0:5
+*/blockadblock-$script,redirect=fuckadblock.js-3.2.0:5
+
+! https://github.com/uBlockOrigin/uAssets/issues/1551
+! https://github.com/uBlockOrigin/uAssets/issues/1554
+*/wp-adblock-$script,redirect=fuckadblock.js-3.2.0:5
+
+! https://github.com/gorhill/uBlock/issues/949
+! https://github.com/uBlockOrigin/uAssets/issues/6541#issuecomment-1012435405
+||s3.amazonaws.com/homad-global-configs.schneevonmorgen.com/hd-main.js$script,domain=autobild.de|cinema.de|computerbild.de|cdnapi.kaltura.com|focus.de|spieleaffe.de|sueddeutsche.de,redirect=hd-main.js
+||svonm.com/hd-main.js$script,redirect=hd-main.js,domain=cinema.de|cdnapi.kaltura.com
+tvspielfilm.de##.promo-box
+tvtoday.de##+js(nosiif, fireEvent, 500)
+@@||tvtoday.de^$ghide
+! https://forums.lanik.us/viewtopic.php?p=129561#p129561
+@@||a.bf-ad.net/makabo/ads_fol_init.js$script,domain=chip.de
+! https://github.com/uBlockOrigin/uAssets/issues/6587
+||chip.de/*&$script,1p
+chip.de##.js_download_button:has(> a.Download-Button--Free[href*="withinstaller"][href*="lastchanged"])
+! https://github.com/uBlockOrigin/uAssets/issues/7589
+chip.de##+js(json-prune, enabled, force_disabled)
+
+##[href*="/afu.php"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/2840
+kisscartoon.*##+js(aeld, mousedown, clientX)
+kisscartoon.*###upgrade_pop
+
+! https://github.com/uBlockOrigin/uAssets/issues/7079
+blackmod.net##.js-notices.notices--bottom_fixer.notices
+
+! https://github.com/gorhill/uBlock/issues/1428
+onrpg.com##a[href*="mmo-it.com/"]
+onrpg.com##[href^="http://server.cpmstar.com/click.aspx"]
+onrpg.com###onrpg-hotbox-widget
+
+! https://github.com/gorhill/uBlock/issues/1340#issuecomment-191082824
+||gamingaffiliation.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/5156
+||adnxs.com/*/sport1.js$script,redirect=noopjs,domain=sport1.de
+||acdn.adnxs.com/as/1h/pages/sport1_mediathek.js$script,redirect=noopjs,domain=sport1.de
+||asadcdn.com/adlib/*$script,redirect=noopjs,domain=sport1.de
+@@||tag.aticdn.net^$script,domain=sport1.de
+@@||asadcdn.com/adlib/pages/sport1.js$script,domain=sport1.de
+sport1.de##+js(aeld, load, hard_block)
+sport1.de##.s1-ad
+sport1.de##strong:has-text(/anzeige/i)
+
+! https://adblockplus.org/forum/viewtopic.php?f=10&t=44887
+vaughn.live##+js(nosiif, header_menu_abvs, 10000)
+vaughn.live##.vs_v9_stream_content_abvs
+vaughn.live##.vs_v9_header_menu_abvs
+vaughn.live##div[id$="-ad"][id^="vs_v9_"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/35
+||g9g.eu^*fa.js$script,redirect=fuckadblock.js-3.2.0
+||8s8.eu^*fa.js$script,redirect=fuckadblock.js-3.2.0
+g9g.eu##+js(aopr, adBlockDetected)
+
+! Computers seizing thanks to these moronic scripts leading to system-wide out
+! of memory condition
+! https://github.com/gorhill/uBlock/issues/1449
+||twnmm.com/js/*/adobe_audience_manager$script,redirect=noopjs
+! https://forums.informaction.com/viewtopic.php?f=10&t=21675
+! https://github.com/uBlockOrigin/uAssets/issues/6221
+||twnmm.com/js/*/dfpad/*$script,redirect=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/362
+! https://github.com/uBlockOrigin/uAssets/issues/15820
+allmusic.com##+js(no-fetch-if, ads)
+allmusic.com##.advertising
+
+! https://github.com/NanoMeow/QuickReports/issues/144
+redtube.*###paid_tabs_list
+! https://github.com/uBlockOrigin/uAssets/issues/7164
+pornhub.*##div[id^="customSkin"]
+pornhub.*##div.container:style(margin-top: 0px !important)
+! https://github.com/uBlockOrigin/uAssets/issues/356
+! https://forums.lanik.us/viewtopic.php?p=120148#p120148
+youjizz.com##+js(noeval)
+youjizz.com###desktopFooterPr
+youjizz.com##.top_pr
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=31285&start=30
+||indiatimes.com/detector$script
+||static.clmbtech.com^$script,important,domain=indiatimes.com
+||chartbeat.com/js/chartbeat.js$script,important,domain=indiatimes.com
+||tags.crwdcntrl.net^$script,important,domain=indiatimes.com
+! https://github.com/uBlockOrigin/uAssets/issues/149
+mumbaimirror.indiatimes.com##body:style(overflow: auto !important;)
+mumbaimirror.indiatimes.com###container:style(opacity: 1 !important;)
+mumbaimirror.indiatimes.com###blcontent
+mumbaimirror.indiatimes.com###blwrapper
+timesofindia.indiatimes.com##:xpath(//p[contains(text(),"Ad ")]/../..)
+economictimes.indiatimes.com##.active > ul > li:has-text(Ad:)
+timesofindia.indiatimes.com##.hm_adlist
+timesofindia.indiatimes.com##.esi_container:has([onclick] P:matches-css-before(content:/Ad/))
+timesofindia.indiatimes.com##[onclick] .btxt:matches-css-before(content:/Ad/):xpath(../../..)
+indiatimes.com##[onclick] .btxt:has-text(/Ad/):xpath(../../..)
+indiatimes.com#@#a[onclick*="/click.htm?"]
+indiatimes.com##[onclick] p:has-text(/Ad/):xpath(../../..)
+indiatimes.com,samayam.com##[onclick] p:matches-css-before(content:/Ad /):xpath(../..):not(p:has-text(/MAHA/i)):not(p:has-text(/Times/i))
+samayam.com##:xpath(//span[(text()='Ad')]/../../..)
+m.economictimes.com##H2:has-text(/Promoted/) + DIV
+m.economictimes.com##h2:has-text(/Promoted/)
+||m.economictimes.com/mpetat/commons/images/rbc-red.png$image
+economictimes.indiatimes.com##div h2:has(span:matches-css-before(content: /Sponsored/))
+economictimes.indiatimes.com##div h2:has(span:matches-css-before(content: /Sponsored/)) + div
+indiatimes.com##h2:has-text(/Promoted/) + div
+indiatimes.com##h2:has-text(/Promoted/)
+indiatimes.com##.wzrk-overlay
+||media.indiatimes.in/idthat/commons/images/rbc-gray.png$image
+indiatimes.com##[onclick] h5:has-text(/Ad/):xpath(../../..)
+m.timesofindia.com##.brand_ctn:has-text(/Ad:/):xpath(../..)
+m.timesofindia.com##span:has-text(/Ad:/):xpath(../..)
+m.timesofindia.com##p:has-text(/Ad:/):xpath(../../..)
+indiatimes.com##p:matches-css(background-image: /colombia-icon/):xpath(../..)
+indiatimes.com##div:matches-css(background-image: /colombia_/):xpath(../..)
+m.timesofindia.com##.asAffiliate
+seithy.com##.slick-track
+indiatimes.com##.PPD_ADS_JS
+timesofindia.indiatimes.com##.asAffiliate
+timesofindia.indiatimes.com##+js(set, nsShowMaxCount, 0)
+||timesofindia.indiatimes.com/toiads_react/minify-1.cms$script,domain=indiatimes.com|timesofindia.com
+||assets.toiimg.com/affiliates/sdk/v2.js$script,domain=indiatimes.com|timesofindia.com
+||assets.toiimg.com/affiliates/sdk/v1.js$script,domain=indiatimes.com|timesofindia.com
+timesofindia.indiatimes.com##[data-aff-type]
+timesofindia.indiatimes.com##.nonAppView > .mPws3
+
+! punemirror .com banner ads
+||punemirror.com/api/v1$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/4056
+economictimes.indiatimes.com##+js(nostif, objSubPromo)
+economictimes.indiatimes.com###aroundweb
+economictimes.indiatimes.com##:xpath(//span[contains(text(),"More from ")]/../preceding-sibling::div)
+economictimes.indiatimes.com##:xpath(//span[contains(text(),"Around The")])
+economictimes.indiatimes.com##div h2:has(span:matches-css-before(content:/Sponsored/))
+economictimes.indiatimes.com##:xpath(//p[contains(text(),"Ad:")]/../..)
+||indiatimes.com/*/columbia_logo.png$image
+m.economictimes.com###appBanner,#stickyBanner
+indiatimes.com###pollBudgetWidget
+||malayalam.samayam.com/*/amazon_widget.cms?type=amazondeal$frame
+navbharattimes.indiatimes.com##.parallaxDiv.ad1
+! interstitial page
+economictimes.indiatimes.com##+js(set, objVc.interstitial_web,'')
+! https://github.com/uBlockOrigin/uAssets/issues/19766
+economictimes.indiatimes.com##+js(nosiif, adb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/168#issuecomment-726134068
+maharashtratimes.com##.float-amz.btn_openinapp
+maharashtratimes.com##.ad1
+maharashtratimes.com##.colombia
+##[href^="https://trk.clmbtrck.in/click"]
+maharashtratimes.com##[href^="https://maharashtratimes.com/pwafeeds/affiliate_amazon.cms"]
+navbharattimes.indiatimes.com##[href^="https://navbharattimes.indiatimes.com/pwafeeds/affiliate_amazon.cms"]
+indiatimes.com##[href^="https://indiatimes.com/pwafeeds/affiliate_amazon.cms"]
+*/pwafeeds/amazon_$frame
+maharashtratimes.com##.ads-open-close
+navbharattimes.indiatimes.com##.ads-open-close
+vijaykarnataka.com,telugu.samayam.com,malayalam.samayam.com,tamil.samayam.com,eisamay.indiatimes.com,navbharattimes.indiatimes.com,maharashtratimes.com##.minitv-container
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=indiatimes.com|iamgujarat.com|vijaykarnataka.com|tamil.samayam.com|telugu.samayam.com|malayalam.samayam.com,redirect-rule=google-ima.js
+||dealspakki.com^$frame,domain=eisamay.com|maharashtratimes.com|malayalam.samayam.com|tamil.samayam.com|telugu.samayam.com|vijaykarnataka.com|navbharattimes.indiatimes.com
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect=google-ima.js,domain=maharashtratimes.com,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/88
+! https://github.com/uBlockOrigin/uAssets/issues/211
+! https://github.com/uBlockOrigin/uAssets/issues/223
+! https://github.com/uBlockOrigin/uAssets/issues/622
+! https://github.com/uBlockOrigin/uAssets/issues/753
+! https://github.com/uBlockOrigin/uAssets/issues/1404
+||svonm.com/hd-main.js$script,redirect=hd-main.js,domain=kicker.de|myspass.de|spielaffe.de|tele5.de
+kicker.de,myspass.de,spielaffe.de,tele5.de##+js(golem.de)
+
+! https://github.com/uBlockOrigin/uAssets/issues/70
+! https://github.com/uBlockOrigin/uAssets/issues/16999
+aranzulla.it##+js(aopr, navigator.userAgent)
+*$script,domain=aranzulla.it,redirect-rule=noopjs
+aranzulla.it##.banner:remove()
+aranzulla.it##[id^="ad"]:remove()
+
+! https://github.com/uBlockOrigin/uAssets/issues/66
+||paywall.folha.uol.com.br/wall.jsonp?callback=paywall.inicio$domain=blogfolha.uol.com.br|educacao.uol.com.br|folha.uol.com.br
+! https://github.com/uBlockOrigin/uAssets/issues/124
+||jsuol.com.br/*/detectadblock/$script,important,domain=uol.com.br
+! https://github.com/uBlockOrigin/uAssets/issues/765
+www.uol##.content-lightbox
+www.uol##.overlay-lightbox
+uol.com.br##.bg-banner
+uol.com.br##[id^="banner-300x250"]:remove()
+
+! https://github.com/gorhill/uBlock/issues/1879
+||popads.net/pop.js$script,redirect=popads.net.js
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=31357&p=100144
+@@||indiatoday.intoday.in/video/$ghide
+
+! https://github.com/reek/anti-adblock-killer/issues/1698
+! https://github.com/uBlockOrigin/uAssets/issues/102
+businesstoday.in###zedoads1:style(height: 1px !important)
+businesstoday.in###zedoads2:style(height: 1px !important)
+businesstoday.in###zedotopnavads:style(height: 1px !important)
+businesstoday.in###zedotopnavads1:style(height: 1px !important)
+businesstoday.in###adbocker_alt
+! https://github.com/uBlockOrigin/uAssets/issues/102#issuecomment-241239514
+businesstoday.in##.adblocker-container
+businesstoday.in###story-maincontent:style(display: block !important)
+
+! https://adblockplus.org/forum/viewtopic.php?f=10&t=46010
+! https://github.com/uBlockOrigin/uAssets/issues/102
+indiatoday.in,indiatoday.intoday.in##.ad_bn.row
+indiatoday.in,intoday.in###adbocker_alt
+indiatoday.in,intoday.in###zedoads1:style(height: 1px !important)
+indiatoday.in,intoday.in###zedoads2:style(height: 1px !important)
+indiatoday.in,intoday.in##.adblockcontainer:style(display: block !important)
+! https://github.com/uBlockOrigin/uAssets/issues/102#issuecomment-239625264
+||zedo.com^$script,important,domain=indiatoday.in|intoday.in
+||googlesyndication.com^$script,important,domain=indiatoday.in|intoday.in
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=32109
+ndtv.com###ndtv-message-users
+ndtv.com###ins_videodetail:style(display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/98
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion###stream_pagelet div[id^="hyperfeed_story_id_"]:has(a.uiStreamSponsoredLink)
+! "People You May Know": EasyList tries to block these, might as well block them fully
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion###stream_pagelet div[id^="hyperfeed_story_id_"]:if(h6:has-text(People You May Know))
+touch.facebook.com,mtouch.facebook.com,x.facebook.com,iphone.facebook.com,m.beta.facebook.com,touch.beta.facebook.com,mtouch.beta.facebook.com,x.beta.facebook.com,iphone.beta.facebook.com,m.facebook.com,b-m.facebook.com,mobile.facebook.com,touch.facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion,mtouch.facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion,x.facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion,iphone.facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion,touch.beta.facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion,m.facebook.com,m.facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion,b-m.facebook.com,b-m.facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion,mobile.facebook.com,mobile.facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##article:has(footer > div > div > a[href^="/friends/center/?fb_ref="])
+! https://www.reddit.com/r/uBlockOrigin/comments/58o3k6/facebook_ads_solution/
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##.ego_section:has(a.adsCategoryTitleLink)
+! https://github.com/uBlockOrigin/uAssets/issues/507
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion###stream_pagelet [id^="hyperfeed_story_id_"]:has(span._4dcu)
+! https://github.com/uBlockOrigin/uAssets/issues/722
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##.ego_column:if(a[href^="/campaign/landing"])
+! https://forums.lanik.us/viewtopic.php?p=128997#p128997
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##.ego_section:if(a[href^="/ad_campaign"])
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##.userContentWrapper:has(a[href*="/ads/"]):not(:has(a[href*="/ads/preferences"]))
+! https://github.com/uBlockOrigin/uAssets/issues/3367
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion#@#div[id^="hyperfeed_story_id_"]:has(a[href*="utm_campaign"])
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##.userContentWrapper>div div>span>span:has-text(/^Suggested Post$/)
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##div[id^="hyperfeed_story_id_"]:has(div > span:has(abbr .timestampContent):matches-css(display: none))
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##.ego_section:has(a[href*="campaign_id"])
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##div[id^=hyperfeed_story_id_]:has(span[data-ft="{\"tn\":\"j\"}"])
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion#?#.pagelet-group .pagelet:has(a:has-text(/Sponsored|Create ad|Crear un anuncio|Publicidad/))
+! https://github.com/uBlockOrigin/uAssets/issues/3367#issuecomment-1367973454
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##div[role="complementary"] div:not([class]):not([id]) > span:not([class]):not([id]):not([aria-labelledby])
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##div[role="region"] + div[role="main"] div[role="article"] div[style="border-radius: max(0px, min(8px, ((100vw - 4px) - 100%) * 9999)) / 8px;"] > div[class]:not([class*=" "])
+! https://github.com/uBlockOrigin/uAssets/issues/3367#issuecomment-1416733062
+! !#if env_chromium
+! facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##html[lang="en"] div[aria-posinset] svg[style$="width: 56.8906px;"] use:upward(div[aria-posinset])
+! facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##html[lang="pl"] div[aria-posinset] svg[style$="width: 78.5465px;"] use:upward(div[aria-posinset])
+! facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##html[lang="vi"] div[aria-posinset] svg[style$="width: 65.0684px;"] use:upward(div[aria-posinset])
+! !#endif
+! !#if env_firefox
+! facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##html[lang="en"] div[aria-posinset] svg[style$="width: 59px;"] use:upward(div[aria-posinset])
+! facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##html[lang="pl"] div[aria-posinset] svg[style$="width: 80.8px;"] use:upward(div[aria-posinset])
+! facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##html[lang="vi"] div[aria-posinset] svg[style$="width: 65px;"] use:upward(div[aria-posinset])
+! !#endif
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##div[aria-posinset]:has(a[aria-label="広告"]):style(height: 0 !important; overflow: hidden !important;)
+! https://github.com/uBlockOrigin/uAssets/issues/3367#issuecomment-1845256665
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##div[aria-posinset] :is(h3, h4) span > a[href]:not([href^="/groups/"]):not([href*="section_header_type"]):matches-attr(href="/__cft__\[0\]=[-\w]{270,}/"):upward(div[aria-posinset]):style(height: 0 !important; overflow: hidden !important;)
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##div[aria-describedby]:not([aria-posinset]) :is(h3, h4) span > a[href]:not([href^="/groups/"]):not([href*="section_header_type"]):matches-attr(href="/__cft__\[0\]=[-\w]{270,}/"):upward(div[aria-describedby])
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion###watch_feed div:not([class]) > div:not([class]) div[class] span[class] > a span[aria-labelledby]:has(> span[style="display: flex;"] > span[class]:has-text(/^S$/)):has(> span[style="display: flex;"] > span[class]:has-text(/^p$/)):has(> span[style="display: flex;"] > span[class]:has-text(/^d$/)):upward(div:not([class]) > div:not([class]))
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion###watch_feed div:not([class]) > div:not([class]) div[class] span[class] > a[aria-label="広告"]:upward(div:not([class]) > div:not([class]))
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion###watch_feed div:not([class]) > div:not([class]) div[class] [class] > a[href*="utm_source=facebook"] span[class] > span[class][style*="-webkit-line-clamp"]:has-text(広告):upward(div:not([class]) > div:not([class]))
+
+!facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##div[role="feed"] > div[class]:has([data-ad-preview])
+
+! mail.yahoo.com stuff
+mail.yahoo.com##[data-test-id="right-rail-ad"]
+! https://github.com/uBlockOrigin/uAssets/issues/13439
+mail.yahoo.com##[data-test-id="video-container"]
+! https://github.com/uBlockOrigin/uAssets/issues/19333
+mail.yahoo.com##[aria-labelledby^="bottom-sticky-pencil-ad-brand-name"]
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=31322&start=30
+ndtv.com###ndtv-myModal
+ndtv.com##body:style(overflow: auto !important)
+
+! https://github.com/NanoMeow/QuickReports/issues/3488
+nmac.to##+js(aopr, open)
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=24179
+||googlesyndication.com^$script,redirect=noopjs,important,domain=sc2casts.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/3573
+*$3p,denyallow=cdnjs.cloudflare.com|googleapis.com|gstatic.com|support.send.cm|userscloud.net,domain=userscloud.com
+@@||userscloud.com^$ghide
+userscloud.com##+js(aeld, /contextmenu|keydown/)
+userscloud.com##+js(set, console.clear, trueFunc)
+||userscloud.com/js/de.min.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/108
+wetteronline.*##+js(aopr, __eiPb)
+wetteronline.*##^script:has-text(runCount)
+wetteronline.*###topcontainer
+wetteronline.de###woRect
+wetteronline.de###woCsiAdContent
+
+! https://github.com/uBlockOrigin/uAssets/issues/104
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=m.timesofindia.com,redirect-rule=google-ima.js
+! https://github.com/uBlockOrigin/uAssets/issues/176
+! https://github.com/NanoAdblocker/NanoFilters/issues/57
+@@||m.photos.timesofindia.com^$ghide
+||static.toiimg.com/ad-banner*/photo/*$image,redirect=2x2.png,domain=m.timesofindia.com
+m.timesofindia.com##.adsinview
+timesofindia.com##+js(aopr, detector)
+timesofindia.indiatimes.com##+js(aeld, , adb)
+m.timesofindia.com,timesofindia.indiatimes.com##+js(nostif, adb)
+! https://github.com/NanoMeow/QuickReports/issues/1905
+||indiatimes.com^$image,redirect-rule=1x1.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/104
+m.aajtak.in##body > #adbocker_alt.adblocker-page
+m.aajtak.in##body > .secArticleTitle:style(display: block !important)
+m.aajtak.in##body > .pubTime:style(display: block !important)
+m.aajtak.in##body > .secArticleImage:style(display: block !important)
+m.aajtak.in##body > .storyBody:style(display: block !important)
+/amazon_products_prod.js$script,domain=aajtak.in
+
+! https://github.com/uBlockOrigin/uAssets/issues/4705
+finanzen.*##+js(nosiif, nrWrapper)
+finanzen.*##+js(nostif, nrWrapper)
+finanzen.*###adup1
+finanzen.*###bs_abstand
+finanzen.*##[id^="sas_"]:style(height: 1px !important)
+||images.finanzen.net/*banner$image
+finanzen.net##.pull-right.img-responsive
+finanzen.net##:xpath('//*[contains(text(),"Werbung")]') + [class]
+
+! https://github.com/reek/anti-adblock-killer/issues/2000
+! https://github.com/NanoMeow/QuickReports/issues/1068
+360haven.com###pageWrapper:style(display: initial !important;)
+360haven.com###notices
+360haven.com###ad_global_above_footer
+
+! https://github.com/uBlockOrigin/uAssets/issues/127
+gadgets.ndtv.com##.adblockerContent:style(display: initial !important;)
+gadgets.ndtv.com###ndtv-message-userss
+
+! https://forums.lanik.us/viewtopic.php?p=102620#p102620
+amazon.*###s-results-list-atf > .s-result-item:has(> .s-item-container h5.s-sponsored-list-header)
+! https://github.com/uBlockOrigin/uAssets/issues/1278
+amazon.*###s-results-list-atf > .s-result-item:has(.s-item-container h5.s-sponsored-header)
+! https://github.com/uBlockOrigin/uAssets/issues/399
+amazon.*##.s-result-item:has(> .s-item-container > h5 .s-sponsored-info-icon)
+! https://github.com/AdguardTeam/AdguardFilters/issues/83145
+amazon.*##.s-widget:has(> [data-cel-widget^="MAIN"] > [data-cel-widget^="tetris"] > div[id^="CardInstance"][class^="_tetris-"])
+! https://jbbs.shitaraba.net/bbs/read.cgi/internet/25463/1618326670/80 blank slide on top page
+amazon.*##.a-carousel-card:has(> div > div[cel_widget_id^="adplacements:"]):remove()
+! https://github.com/uBlockOrigin/uAssets/issues/12268
+amazon.*##.AdHolder
+! https://jbbs.shitaraba.net/bbs/read.cgi/internet/25463/1598352715/851
+amazon.*###similarities_feature_div:has(span[id^="ad-feedback-text"])
+! https://github.com/easylist/easylist/commit/73701244b11d5d916bef99627dbfb409e7e14e44
+amazon.*##div[cel_widget_id="sims-consolidated-5_csm_instrumentation_wrapper"]
+
+! https://forums.lanik.us/viewtopic.php?p=131942#p131942
+! https://github.com/uBlockOrigin/uAssets/pull/12960
+imagefap.com##+js(acs, $, popCookie)
+beta.imagefap.com##+js(aost, open, setPopUnder)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1347
+motherless.com##+js(set, _ml_ads_ns, null)
+motherless.com##+js(acs, jQuery, cookie)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=33194
+/?*&callback=callback_json_adblade*$script
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=32878
+freethesaurus.com,thefreedictionary.com##div:has(> a:not([href*="/"]) > img:not([src*="/"]))
+freethesaurus.com,thefreedictionary.com##+js(nostif, warn)
+! https://github.com/uBlockOrigin/uAssets/issues/1896
+freethesaurus.com,thefreedictionary.com##+js(aopr, adc)
+freethesaurus.com,thefreedictionary.com##div[class][id]:not(.logo):if-not(*):has-text(/^$/)
+freethesaurus.com,thefreedictionary.com###sidebar > .widget:not([id]):has(> .holder > a[href])
+! To counter exception filters
+||googlesyndication.com^$script,important,domain=thefreedictionary.com
+
+! https://news.ycombinator.com/item?id=12677179
+||x.shopsavvy.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/163
+! https://github.com/uBlockOrigin/uAssets/issues/534
+! https://github.com/uBlockOrigin/uAssets/issues/1286
+! https://github.com/uBlockOrigin/uAssets/commit/ebbef70dba69e38946329793dc00d988d1cbb85e#commitcomment-34299631
+1337x.*##+js(rmnt, script, style)
+1337x.*##+js(aost, document.createElement, _0x)
+1337x.*,x1337x.*##+js(nowoif)
+1337x.*##+js(aopr, afScript)
+1337x.*##+js(nostif, adb)
+1337x.*##^script:has-text(admc)
+x1337x.*##+js(acs, setTimeout, admc)
+1337x.*,x1337x.*##.stream-torrent
+1337x.*,x1337x.*##.link-info-stream
+1337x.*##.download-links-dontblock > LI:has-text(Anon)
+1337x.*##.download-links-dontblock > LI:has-text(Stream)
+1337x.*##a[href^="/redirectmusic.php"]
+1337x.*##a[href^="/spyoff"]
+1337x.*##a[href*="//steepto.com/"]
+1337x.*##[href*="vpn"]
+1337x.*##[href^="/anoy"]
+1337x.*,x1337x.*##.no-top-radius div > a[href]:has-text(VPN)
+/^https:\/\/x?1337x\.(?:[0-9a-z]{3,9}\.)?[a-z]{2,4}\/(?:css\/)?(?:images\/)?[0-9a-zA-Z]+\.(?:gif|jpe?g|png)/$image,1p,domain=1337x.*|1337x.g3g.*|x1337x.*|unblockit.*
+||1337x.*/sw.js^
+! https://github.com/uBlockOrigin/uAssets/issues/635
+! https://www.reddit.com/r/uBlockOrigin/comments/81hcu5/1337xto_annoying_popup/
+! https://www.reddit.com/r/uBlockOrigin/comments/bpm1l9/trying_to_download_something_from_13377x_and_keep/
+13377x.*##+js(acs, decodeURI, decodeURIComponent)
+1337x.*,x1337x.*##+js(nowebrtc)
+x1337x.eu##.mgbox
+! https://github.com/uBlockOrigin/uAssets/issues/6606
+1337x.*##+js(aopr, AaDetector)
+@@||torrage.info/torrent.php$popup,domain=1337x.to
+
+! https://github.com/uBlockOrigin/uAssets/issues/3142
+! https://github.com/uBlockOrigin/uAssets/issues/12845
+*$script,redirect-rule=noopjs,domain=linkneverdie.net
+linkneverdie.net###adsqc
+linkneverdie.net##.quangcao
+||bidtimize.com^
+! https://github.com/uBlockOrigin/uAssets/issues/18130
+linkneverdie.net##.show.fade.modal-backdrop
+linkneverdie.net##body:style(overflow: auto !important;)
+! https://github.com/uBlockOrigin/uAssets/commit/c68f9f2234733788cd04178dba2bd923ab77579a
+linkneverdie.net#@#+js(nostif, t)
+@@||pagead2.googlesyndication.com^$script,domain=linkneverdie.net
+@@||quantumdex.io^$script,domain=linkneverdie.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/161
+||uim.tifbs.net/js/*.js$script,redirect=noopjs,domain=gmx.*|web.de
+! https://github.com/uBlockOrigin/uAssets/issues/6834
+web.de##.main [data-ac]:empty
+gmx.*##.main [data-ac]:empty
+! https://github.com/uBlockOrigin/uAssets/issues/9083
+web.de##.iba-acceptable:has-text(/Anzeige|Info/)
+! https://github.com/uBlockOrigin/uAssets/issues/15422
+*$image,redirect-rule=1x1.gif,domain=web.de
+@@*$ghide,domain=web.de|gmx.*
+web.de#@#.ad
+web.de##.ad:style(position:absolute !important; left:-10000px !important; display:block !important; pointer-events: none !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8047
+! https://github.com/uBlockOrigin/uAssets/issues/5532
+! https://github.com/uBlockOrigin/uAssets/issues/5575
+! https://github.com/uBlockOrigin/uBlock-issues/issues/630
+! https://github.com/uBlockOrigin/uAssets/issues/6002
+golem.de##+js(acs, showAds)
+golem.de##+js(nostif, adBlockerDetected)
+golem.de##+js(nostif, show)
+||video.golem.de/*/scripts/radiant/homad$xhr,redirect=nooptext,domain=golem.de
+golem.de##[href^="https://ads.golem.de/"]
+golem.de##.sp-article:has(span:matches-css-before(content:/Anzeige/i))
+golem.de##.list-articles>li:has(.icon-addy:matches-css-before(content: "Anzeige"))
+golem.de##[data-article-id]:has([class]:matches-css-before(content:/ANZEIGE/))
+
+! https://github.com/uBlockOrigin/uAssets/issues/206
+geektime.co.il##+js(nostif, adObjects)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=34324
+carbuyer.co.uk##+js(aopr, _sp_.mms.startMsg)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7753
+@@||bild.de^$ghide
+bild.de#@##fullBanner
+bild.de#@##powerplace
+bild.de#@##subchannelBanner1_1
+bild.de#@##subchannelBanner2_2
+bild.de#@#.cbErotikContentbar15
+bild.de#@#.contentbar
+bild.de#@#.eyecatcher
+bild.de#@#.footerbar
+bild.de#@#.jetzt_aufnehmen
+bild.de#@#.servicelinks
+bild.de#@#.tea-rectangle
+bild.de#@#.txe
+bild.de#@#.yield
+bild.de#@#.rectangle
+bild.de#@#.fullbanner
+bild.de#@#.ads
+bild.de##div:matches-css-before(content:/Anzeige/i)
+bild.de##.ad-wrapper
+! https://github.com/uBlockOrigin/uAssets/issues/8257
+! https://www.reddit.com/r/uBlockOrigin/comments/jxrzda/
+||tagger.opecloud.com^$xhr,redirect=noop.txt,domain=bild.de
+bild.de##+js(nostif, offsetParent)
+bild.de##+js(aopr, SmartAdServerASMI)
+bild.de##+js(json-prune, adBlockWallEnabled)
+bild.de##+js(set, __NUXT__.state.advertisement.adBlockWallEnabled, false)
+sport.bild.de#@#.ad-wrapper
+bild.de##+js(aeld, load, adBlock)
+! https://github.com/uBlockOrigin/uAssets/issues/8360
+spiele.bild.de##+js(nano-stb, , 10000)
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,xhr,domain=spiele.bild.de
+spiele.bild.de##div[id^="ad-landingpage-"]
+spiele.bild.de##div[id^="ad-gamepage-"]
+spiele.bild.de##.ad-vertical-box
+||servedby.adbility-media.com^$3p
+||partners2.das-onlinespiel.de^$3p
+! https://github.com/uBlockOrigin/uAssets/issues/9615
+bild.de##.main-nav .utilities > li:style(margin-left:-0.5px !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/174
+! https://github.com/uBlockOrigin/uAssets/issues/4106
+sueddeutsche.de##+js(aopr, _sp_._networkListenerData)
+sueddeutsche.de##+js(aopw, SZAdBlockDetection)
+sueddeutsche.de##+js(set, _sp_.config, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/238
+8muses.com##.a-image
+8muses.com###content > div > .gallery > a.t-hover.c-tile:has(iframe[src^="/banner/"])
+8muses.com##[href^="https://bit.ly/"]
+
+! Popups triggered by webrtc
+123movies.net,2ddl.*,allitebooks.*,bonstreams.net,convertinmp4.com,crictime.com,ddlvalley.me,dramamate.*,eztv.*,fluvore.com,kiss-anime.*,letmewatchthis.*,mac-torrents.com,mkvcage.*,nflstream.io,oceanoffgames.com,pastehere.xyz,sawlive.tv,skidrowcrack.com,toros.co,uptobox.com,yts.*,zooqle.*##+js(nowebrtc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/245
+gamer.com.tw##img[onload="AntiAd.check(this)"]
+gamer.com.tw##+js(aopr, AntiAd.check)
+
+! To counter unnecessary exception filters
+||googlesyndication.com^$script,important,domain=champion.gg|gsmarena.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/244
+skidrowreloaded.com##+js(acs, open)
+skidrowreloaded.com##+js(no-fetch-if, /^/)
+
+! skidrowcodexgames.com ads
+skidrowcodexgames.com##+js(aopr, _pop)
+skidrowcodexgames.com##[class^="aligncenter wp-image-"]
+*$script,3p,denyallow=googleapis.com,domain=skidrowcodexgames.com
+
+! Sourcepoint
+! https://forums.lanik.us/viewtopic.php?f=62&t=34570
+! https://github.com/uBlockOrigin/uAssets/issues/266
+autobytel.com,cesoirtv.com,gamesradar.com,huffingtonpost.co.uk,huffingtonpost.com,moviefone.com,playboy.de##+js(aopw, _sp_)
+faz.net##+js(acs, $, _sp_._networkListenerData)
+eltern.de,essen-und-trinken.de,focus.de##+js(aopr, _sp_.mms.startMsg)
+! https://github.com/jspenguin2017/uBlockProtector/issues/367
+! https://github.com/uBlockOrigin/uAssets/issues/701
+! https://github.com/uBlockOrigin/uAssets/issues/848
+! https://forums.lanik.us/viewtopic.php?p=127088#p127088
+! https://github.com/uBlockOrigin/uAssets/issues/1008
+! https://github.com/NanoAdblocker/NanoFilters/issues/12
+! https://github.com/uBlockOrigin/uAssets/issues/1442
+! https://forums.lanik.us/viewtopic.php?f=62&t=40162
+! https://github.com/uBlockOrigin/uAssets/issues/461
+! https://github.com/uBlockOrigin/uAssets/issues/4076
+! https://github.com/uBlockOrigin/uAssets/issues/5864
+20min.ch,al.com,alphr.com,autoexpress.co.uk,bikeradar.com,blick.ch,chefkoch.de,cyclingnews.com,digitalspy.com,democratandchronicle.com,denofgeek.com,esgentside.com,evo.co.uk,exclusivomen.com,ft.com,gala.de,gala.fr,heatworld.com,itpro.co.uk,livingathome.de,masslive.com,maxisciences.com,metabomb.net,mlive.com,motherandbaby.co.uk,motorcyclenews.com,muthead.com,neonmag.fr,newyorkupstate.com,ngin-mobility.com,nj.com,nola.com,ohmirevista.com,ohmymag.*,oregonlive.com,pennlive.com,programme.tv,programme-tv.net,radiotimes.com,silive.com,simplyvoyage.com,stern.de,syracuse.com,theweek.co.uk,ydr.com##+js(aopr, _sp_._networkListenerData)
+! https://github.com/uBlockOrigin/uAssets/issues/271
+! https://forums.lanik.us/viewtopic.php?p=112285#p112285
+car.com,codeproject.com,familyhandyman.com,goldderby.com,headlinepolitics.com,html.net,indiewire.com,marmiton.org,mymotherlode.com,nypost.com,realgm.com,tvline.com,wwd.com##+js(aopw, _sp_)
+codeproject.com##+js(aopr, retrievalService)
+! https://github.com/NanoMeow/QuickReports/issues/928
+usatoday.com##+js(aopr, _sp_._networkListenerData)
+usatoday.com##[aria-label="advertisement"]
+usatoday.com##[data-gl-method="initTaboola"]
+usatoday.com##.gnt_n:style(top: 0 !important; margin-top: 0 !important;)
+familyhandyman.com##.ad
+familyhandyman.com##.advertisement
+familyhandyman.com##.cm-ad-unit-section
+
+! https://github.com/uBlockOrigin/uAssets/issues/273
+cwseed.com##+js(aopr, admrlWpJsonP)
+cwtv.com##+js(noeval)
+
+! https://github.com/uBlockOrigin/uAssets/issues/278
+pocketnow.com##+js(aopr, InstallTrigger)
+
+! https://github.com/el1t/uBlock-Safari/issues/24
+! https://github.com/uBlockOrigin/uAssets/commit/495baa68abad94e80bb3e21dbfbe6636f08cb10a#comments
+! https://forums.lanik.us/viewtopic.php?p=145520#p145520
+! https://github.com/NanoMeow/QuickReports/issues/3028
+||adition.com^$important,domain=spiegel.de
+@@||ad.yieldlab.net^$script,domain=spiegel.de,badfilter
+||cdn.prod.www.spiegel.de/public/spon/generated/web/js/header*.js$script,1p
+spiele.spiegel.de###ad-gamepage-top
+spiele.spiegel.de##.ad
+spiele.spiegel.de##div#ad-gamepage-bottom
+spiegel.de##[data-area="affiliatebox"]
+spiegel.de##[data-area="vouchers"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/289
+! https://github.com/uBlockOrigin/uAssets/issues/2114
+! https://github.com/uBlockOrigin/uAssets/issues/2262
+! https://github.com/uBlockOrigin/uAssets/issues/2404
+! https://github.com/uBlockOrigin/uAssets/issues/3640
+quora.com##.PromptsList
+quora.com##.AdBundle
+quora.com##.AdStory
+!#if env_mobile
+quora.com##.top_slot
+!#endif
+quora.com##div[id$="_content_box"]
+quora.com##.lower_slot
+quora.com##[disable_auto_login*="True"]
+quora.com##:xpath(//div[not(@class="ui_qtext_para") and contains(text(), 'ad by')]/parent::div/parent::div/parent::div[@id])
+quora.com##:xpath(//div[not(@class="ui_qtext_para") and contains(text(), 'promoted') and contains(text(), 'by')]/parent::a/parent::div/parent::div/parent::div[@id])
+quora.com##:xpath(//div[not(@class="ui_qtext_para") and contains(text(), 'Quora') and contains(text(), 'by') and contains(text(), 'Business')]/parent::a/parent::div/parent::div/parent::div[@id])
+quora.com##.FeedStory.feed_item > div > div:has-text(/by Quora for Business/i)
+quora.com##.Toggle.SimpleToggle.ToggleAnswerFooterWrapper > div:has-text(/Promoted/i)
+quora.com##:xpath(//span[contains(text(), 'by')]/ancestor::*[contains(concat(' ', @class, ' '), ' external_link ')]/../../..)
+quora.com##:xpath(//p[(text()='d')]/../../../../..)
+! from abp cv list for https://github.com/uBlockOrigin/uAssets/issues/8032
+quora.com##.u-margin-top--lg+div[class="UnifiedAnswerPagedList PagedListFoo unified"][id$="_paged_list"]
+quora.com##.pagedlist_item > div[id$="_paged_list"]
+quora.com##.answer_auto_expanded_comments + div > div.feed_expand
+quora.com##.feedback_wrapper.hidden:not(.negative_action) + .FeedStory.HyperLinkFeedStory.feed_item
+quora.com##div[class="question_main_col"] > div:nth-child(3) > div[class="UnifiedAnswerPagedList PagedListFoo unified"]
+quora.com##div[class="pagedlist_item"] div[id*="paged_list"]
+quora.com##.q-box.qu-borderAll>.q-box>div>div[class^="Box-sc-"]>div:not([class])
+quora.com##.q-box.qu-borderTop>[class^="Box-sc-"]>div:not([class])
+quora.com##div > [class^="Box-"] > div > .q-box.qu-pb--tiny.qu-pt--medium.qu-px--medium
+quora.com##.qu-bg--white>[class^="Box-"] .qu-pt--medium
+quora.com##.q-box.qu-borderTop>[class^="Box-"] .q-box.qu-pt--medium.qu-pb--tiny
+quora.com##.q-box.qu-borderAll>.q-box>div:not([class="q-box"])>[class^="Box-"]
+quora.com##.q-box.qu-borderAll.qu-bg--white>.q-box>div>[class="q-box "]>[class="q-box"]
+quora.com##[class="q-box qu-borderTop"]>[class="q-box "]
+quora.com##[class="q-box qu-bg--white"]>[class="q-box "]>[class="q-box"]
+quora.com##.dom_annotate_multifeed_bundle_AdBundle
+!www.quora.com##.q-box.qu-bg--white > span[data-nosnippet="true"] > .q-box
+!www.quora.com##.qu-mb--small.qu-bg--white > .q-box > div > span[data-nosnippet="true"] > .q-box
+!www.quora.com##.q-box.qu-borderTop > span[data-nosnippet="true"] > .q-box
+!www.quora.com##span[data-nosnippet="true"] .q-box.qu-pb--tiny.qu-pt--medium
+! https://github.com/uBlockOrigin/uAssets/issues/11253
+quora.com##[data-nosnippet="true"]
+
+##[onclick*="window.open('http://deloplen.com/"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/8stv3y
+! https://github.com/uBlockOrigin/uAssets/issues/2667
+! https://github.com/uBlockOrigin/uAssets/issues/7220
+eurogamer.net,rockpapershotgun.com,vg247.com##+js(aopw, yafaIt)
+eurogamer.de,eurogamer.es,eurogamer.it,eurogamer.net,eurogamer.pt,rockpapershotgun.com,vg247.com##+js(aopr, _sp_.mms.startMsg)
+||bit.ly^$popup,domain=eurogamer.net
+eurogamer.net,rockpapershotgun.com##.leaderboards
+eurogamer.*##.advert
+
+! https://forums.lanik.us/viewtopic.php?p=101913#p101913
+auto-motor-und-sport.de,caravaning.de,womenshealth.de##+js(aopw, adblockActive)
+
+! https://github.com/uBlockOrigin/uAssets/issues/299
+! https://github.com/uBlockOrigin/uAssets/issues/846
+gamestorrents.*,gogoanimes.*,limetorrents.*,piratebayz.*##+js(aopr, LieDetector)
+mediafire.com##+js(aeld, click, ClickHandler)
+mediafire.com##+js(aeld, load, IsAdblockRequest)
+mediafire.com##+js(nostif, InfMediafireMobileFunc, 1000)
+gamestorrents.*,gogoanimes.*,limetorrents.*,piratebayz.*##^script:has-text(AaDetector)
+mediafire.com##.errorExtraContent
+
+! https://github.com/uBlockOrigin/uAssets/issues/3826
+||rule34.us/ad.html$frame
+
+! https://github.com/uBlockOrigin/uAssets/issues/1081
+! https://www.reddit.com/r/uBlockOrigin/comments/8sbjjk
+! https://github.com/uBlockOrigin/uAssets/issues/8307
+rule34.xxx##+js(aopr, newcontent)
+rule34.xxx##[src^="https://rule34.xxx/aa/"]
+rule34.xxx###right-col > div > #lbot1.a_list
+rule34.xxx##body > a > div[id]:style(background: var(--c-bg, #aae5a3) !important)
+rule34.xxx###halloween
+! https://github.com/uBlockOrigin/uAssets/issues/16970#issuecomment-1803126533
+rule34.xxx##.dp
+||rule34.xxx/static/fp/$image,1p
+||rule34.xxx/images/clicker.png
+realbooru.com##+js(aopr, ExoLoader.serve)
+realbooru.com##.adzoneTest
+realbooru.com##.flex_content_main > div[style$="min-height: 125px;"]
+! https://github.com/uBlockOrigin/uAssets/issues/16970
+||rule34.xxx/*/nutaku/
+
+! rule34.top etc. popups
+||topxxxlist.net/eroclick.js
+/pop.js$domain=booru.*|erotic-beauties.com|hardsex.cc|rule34.top|sex-movies.biz|tube18.sexy|xvideos.name
+||rule34.top^$csp=sandbox allow-forms allow-same-origin allow-scripts allow-modals allow-orientation-lock allow-pointer-lock allow-presentation allow-top-navigation
+||rule34.top/eroclick.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/1080
+xbooru.com##a[href^="https://xbooru.com/c.html"]
+||xbooru.com^$frame,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/17987
+@@||kbb.com^$ghide
+kbb.com##[id^="kbbAds"], [id^="kbbAds"] + p
+
+! Fingerprint2 popups
+dfiles.eu,downsub.com,j.gs,macserial.com,microify.com,minecraft-forum.net,onmovies.*,pirateproxy.*,psarips.*,solidfiles.com,thepiratebay.org,uptobox.com##+js(aopw, Fingerprint2)
+solidfiles.com##.remove
+thepiratebay.org##[href^="http://www.coiwqe.site/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/4086
+! https://github.com/uBlockOrigin/uAssets/issues/12524
+! https://github.com/uBlockOrigin/uAssets/issues/12740
+watchcartoononline.*,wcostream.*##+js(nofab)
+watchcartoononline.*,wcostream.*##+js(noeval)
+watchcartoononline.*,watchcartoonsonline.*,wcostream.*##+js(acs, document.createElement, jsc.mgid.com)
+wcostream.*##+js(nowoif)
+watchcartoononline.bz##.BorderColorChangeElement
+! https://www.reddit.com/r/uBlockOrigin/comments/eslovb/seriously_well_now_watchcartoononline_has_their/
+@@||wcoanimedub.tv^$ghide
+@@||wcoanimesub.tv^$ghide
+@@||wco.tv^$ghide
+wco.tv##iframe.hide-ads:upward(div[style])
+watchanimesub.net,wco.tv,wcoanimesub.tv,wcoforever.net##+js(set, isAdBlockActive, false)
+wcoanimedub.tv,wcoforever.net##+js(nostif, google_jobrunner)
+m.wcostream.org##center
+||bloxplay.com^
+wcoforever.net##.anti-ad
+wcoforever.net###sidebar_r1
+@@||embed.watchanimesub.net^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/331
+! https://github.com/uBlockOrigin/uAssets/issues/10133
+handelsblatt.com##+js(no-xhr-if, request=adb)
+@@||handelsblatt.com^$ghide
+||handelsblatt.com/*/empty.js$script,1p
+||wiwo.de/preparesite/empty.js$script,1p
+wiwo.de##+js(set, AdController, noopFunc)
+@@||wiwo.de^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/347
+transfermarkt.*##+js(acs, document.querySelector, popupBlocked)
+transfermarkt.*##+js(acs, Math, /\}\s*\(.*?\b(self|this|window)\b.*?\)/)
+transfermarkt.*##body > div[id]:has(a[href^="/intern/adblock"])
+||s0.2mdn.net/instream/video/client.js$script,redirect=noopjs,domain=player.performgroup.com
+||sascdn.com^$important,script,domain=transfermarkt.de
+transfermarkt.*###werbung_superbanner
+transfermarkt.*##.werbung
+transfermarkt.*##[id^="home-rectangle-"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/348
+! https://github.com/uBlockOrigin/uAssets/issues/695
+! https://github.com/uBlockOrigin/uAssets/issues/1236
+shink.me##+js(acs, $, blockAdBlock)
+shink.me##+js(aopr, jsPopunder)
+shink.me##+js(aopr, pup)
+shink.me##+js(aopw, Fingerprint2)
+shink.me##+js(popads.net)
+
+! kissasian .sh, .li, .sk
+! https://www.reddit.com/r/uBlockOrigin/comments/u8f1c6/blocked_video/
+kissasian.*##+js(aeld, /^(?:click|mousedown)$/, _0x)
+keephealth.info,kissasian.*##+js(aopr, mm)
+keephealth.info,kissasian.*##+js(nostif, (), 45000)
+kissasian.*##+js(set, check_adblock, true)
+kissasian.*##+js(nowoif)
+@@||kissasian.*^$ghide
+kissasian.*##.ksAds
+kissasian.*##[id*="ScriptRoot"]
+kissasian.*###videoAd
+kissasian.*###hideAds
+kissasian.*##div[style$="width: 610px;"]:has(.adsbyvli)
+kissasian.*##div[style$="height: 90px;"]:has(.adsbyvli)
+kissasian.*###overplay
+||kissasian.*/Ads/$frame
+gaobook.*##+js(aopr, Date.prototype.toUTCString)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12650
+australianfrequentflyer.com.au##+js(nostif, prompt)
+
+! https://www.wilderssecurity.com/threads/ublock-a-lean-and-fast-blocker.365273/page-107#post-2668597
+! https://www.wilderssecurity.com/threads/ublock-a-lean-and-fast-blocker.365273/page-126#post-2719661
+! https://github.com/uBlockOrigin/uAssets/issues/1493
+thewindowsclub.com##+js(aopr, googletag)
+@@||google.com/*/search/*$script,domain=thewindowsclub.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4864
+*expires$media,redirect=noopmp3-0.1s,domain=sat1.de|wetter.com
+||vidapi.expepp.de/files/*$media,domain=moviepilot.de
+! https://github.com/uBlockOrigin/uAssets/issues/14619
+moviepilot.de##+js(nano-stb, _0x, *)
+moviepilot.de##+js(no-xhr-if, doubleclick)
+! https://github.com/uBlockOrigin/uAssets/issues/20985
+moviepilot.de##+js(rmnt, script, Promise)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3209
+*$image,redirect-rule=32x32.png,domain=afreesms.com
+afreesms.com##+js(aeld, error)
+afreesms.com##+js(nowoif)
+afreesms.com##+js(nostif, 0x)
+afreesms.com###smspage:style(display: block !important;)
+afreesms.com##[href^="https://freemining.co/"]
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=29322
+mma-core.*##+js(nostif, displayAdBlockedVideo)
+mma-core.*##+js(acs, $, undefined)
+mma-core.*###tlbrd
+mma-core.*##.rsky
+mma-core.*##.outVidAd
+mma-core.*##.banr
+||webpartners.co^$3p
+
+! https://forums.lanik.us/viewtopic.php?f=103&t=35513
+@@||elsate.com/styles/elsate/template/*$script,1p
+elsate.com###fab-enabled
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=36750
+! https://github.com/uBlockOrigin/uAssets/issues/406
+! https://github.com/NanoAdblocker/NanoFilters/issues/100
+! https://github.com/uBlockOrigin/uAssets/issues/2509
+! https://github.com/NanoMeow/QuickReports/issues/253
+@@||poststar.com^$ghide
+poststar.com##.dfp-ad
+grubstreet.com,twitchy.com##+js(aopr, stop)
+||em0n.com^$domain=grubstreet.com|twitchy.com
+popculture.com##div.modernInContent
+! https://github.com/uBlockOrigin/uAssets/issues/2904
+||static.tvtropes.org/design/js/google-adblock.js$script
+! https://popculture.com/celebrity/news/austin-butler-tears-up-remembering-lisa-marie-presley/ video breakage
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect=google-ima.js,domain=popculture.com,important
+! https://www.reddit.com/r/uBlockOrigin/comments/17w81gw/remove_whitespace_at_the_top_and_move_everything/
+popculture.com##body:not(.skybox-loaded) > header:style(top: 0 !important;)
+popculture.com##body.pcm-public:not(.skybox-loaded):style(margin-top: 90px !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1503
+shrink-service.it##+js(nano-sib)
+
+! https://arstechnica.com/information-technology/2017/05/boston-globe-website-no-longer-lets-you-read-articles-in-private-mode/
+bostonglobe.com##.gip__modal
+bostonglobe.com##body:style(overflow: auto !important;)
+bostonglobe.com##.mfp-ready
+
+! Prevent popunders + redirections on multiple websites
+||go.oclasrv.com/apu.php$script,redirect=noopjs
+||go.onclasrv.com/apu.php$script,redirect=noopjs
+||onclkds.com/apu.php$script,redirect=noopjs
+||xxlargepop.com/apu.php$script,redirect=noopjs
+
+! https://github.com/gorhill/uBlock/issues/3176
+rule34hentai.net##+js(aopr, open)
+||rule34hentai.net/*.php$script,1p
+@@||fluidplayer.com^$script,domain=rule34hentai.net
+rule34hentai.net##[href^="https://syndication.dynsrvtbg.com/splash.php"]
+rule34hentai.net###commentlistimage ~ section[id$="main"]
+rule34hentai.net###imagelist ~ section[id$="main"]
+rule34hentai.net##section[id$="left"]:has(> .blockbody > script[type])
+rule34hentai.net##section[id$="main"]:has(> .blockbody > .adsbyexoclick)
+
+! https://github.com/uBlockOrigin/uAssets/issues/428
+cineblog.it##+js(noeval)
+
+! https://www.wilderssecurity.com/threads/ublock-a-lean-and-fast-blocker.365273/page-112#post-2682251
+securityweek.com###simplemodal-container
+securityweek.com###simplemodal-overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/444
+kingofdown.com##+js(aeld, load, onload)
+
+! https://github.com/uBlockOrigin/uAssets/issues/446
+h5.fotor.com###main:style(right: 0 !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/446
+mind42.com###sidebar
+mind42.com###content.sidebar2:style(margin-right: 0 !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/452
+||zdnet.com/*promo$xhr,domain=zdnet.com
+||zdnet.com/*recommendation/
+
+! https://github.com/uBlockOrigin/uAssets/issues/5352
+*$ping,domain=fullxh.com|hamsterix.*|megaxh.com|movingxh.world|unlockxh4.com|xhadult2.com|xhadult3.com|xhadult4.com|xhadult5.com|xhamster.*|xhamster10.*|xhamster11.*|xhamster12.*|xhamster13.*|xhamster14.*|xhamster15.*|xhamster16.*|xhamster17.*|xhamster18.*|xhamster19.*|xhamster20.*|xhamster2.*|xhamster3.*|xhamster4.*|xhamster46.com|xhamster5.*|xhamster7.*|xhamster8.*|xhday.com|xhday1.com|xhmoon5.com|xhplanet1.com|xhplanet2.com|xhreal2.com|xhreal3.com|xhtab2.com|xhtree.com|xhvictory.com|xhwebsite.com|xhwebsite2.com|xhwide1.com|xhwide8.com
+://collector.$domain=fullxh.com|hamsterix.*|megaxh.com|movingxh.world|unlockxh4.com|xhadult2.com|xhadult3.com|xhadult4.com|xhadult5.com|xhamster.*|xhamster10.*|xhamster11.*|xhamster12.*|xhamster13.*|xhamster14.*|xhamster15.*|xhamster16.*|xhamster17.*|xhamster18.*|xhamster19.*|xhamster20.*|xhamster2.*|xhamster3.*|xhamster4.*|xhamster46.com|xhamster5.*|xhamster7.*|xhamster8.*|xhday.com|xhday1.com|xhmoon5.com|xhplanet1.com|xhplanet2.com|xhreal2.com|xhreal3.com|xhtab2.com|xhtree.com|xhvictory.com|xhwebsite.com|xhwebsite2.com|xhwide1.com|xhwide8.com
+/api/models?userId=$xhr,domain=fullxh.com|hamsterix.*|megaxh.com|movingxh.world|unlockxh4.com|xhadult2.com|xhadult3.com|xhadult4.com|xhadult5.com|xhamster.*|xhamster10.*|xhamster11.*|xhamster12.*|xhamster13.*|xhamster14.*|xhamster15.*|xhamster16.*|xhamster17.*|xhamster18.*|xhamster19.*|xhamster20.*|xhamster2.*|xhamster3.*|xhamster4.*|xhamster46.com|xhamster5.*|xhamster7.*|xhamster8.*|xhday.com|xhday1.com|xhmoon5.com|xhplanet1.com|xhplanet2.com|xhreal2.com|xhreal3.com|xhtab2.com|xhtree.com|xhvictory.com|xhwebsite.com|xhwebsite2.com|xhwide1.com|xhwide8.com
+/api/models/vast$xhr,domain=fullxh.com|hamsterix.*|megaxh.com|movingxh.world|unlockxh4.com|xhadult2.com|xhadult3.com|xhadult4.com|xhadult5.com|xhamster.*|xhamster10.*|xhamster11.*|xhamster12.*|xhamster13.*|xhamster14.*|xhamster15.*|xhamster16.*|xhamster17.*|xhamster18.*|xhamster19.*|xhamster20.*|xhamster2.*|xhamster3.*|xhamster4.*|xhamster46.com|xhamster5.*|xhamster7.*|xhamster8.*|xhday.com|xhday1.com|xhmoon5.com|xhplanet1.com|xhplanet2.com|xhreal2.com|xhreal3.com|xhtab2.com|xhtree.com|xhvictory.com|xhwebsite.com|xhwebsite2.com|xhwide1.com|xhwide8.com
+||doppiocdn.*^$domain=fullxh.com|hamsterix.*|megaxh.com|movingxh.world|unlockxh4.com|xhadult2.com|xhadult3.com|xhadult4.com|xhadult5.com|xhamster.*|xhamster10.*|xhamster11.*|xhamster12.*|xhamster13.*|xhamster14.*|xhamster15.*|xhamster16.*|xhamster17.*|xhamster18.*|xhamster19.*|xhamster20.*|xhamster2.*|xhamster3.*|xhamster4.*|xhamster46.com|xhamster5.*|xhamster7.*|xhamster8.*|xhday.com|xhday1.com|xhmoon5.com|xhplanet1.com|xhplanet2.com|xhreal2.com|xhreal3.com|xhtab2.com|xhtree.com|xhvictory.com|xhwebsite.com|xhwebsite2.com|xhwide1.com|xhwide8.com
+*$3p,popunder,domain=fullxh.com|hamsterix.*|megaxh.com|movingxh.world|unlockxh4.com|xhadult2.com|xhadult3.com|xhadult4.com|xhadult5.com|xhamster.*|xhamster10.*|xhamster11.*|xhamster12.*|xhamster13.*|xhamster14.*|xhamster15.*|xhamster16.*|xhamster17.*|xhamster18.*|xhamster19.*|xhamster20.*|xhamster2.*|xhamster3.*|xhamster4.*|xhamster46.com|xhamster5.*|xhamster7.*|xhamster8.*|xhday.com|xhday1.com|xhmoon5.com|xhplanet1.com|xhplanet2.com|xhreal2.com|xhreal3.com|xhtab2.com|xhtree.com|xhvictory.com|xhwebsite.com|xhwebsite2.com|xhwide1.com|xhwide8.com
+xhamster13.*##+js(nowoif)
+xhamster.*,xhamster1.*,xhamster5.*,xhamster7.*##+js(aeld, , pop)
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##.thumb-list > .video-thumb:style(margin-right: 0px !important;)
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##.video-thumb[class*="__look-like-item"]
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##div[class*="cams-widget"]
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##div[class*="sp-b"]
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##[class*="sp-l"]
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##[href*="/faphouse/out"]
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##div[class*="premium-overlay"]
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##[class*="containerPauseSpot"]
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##[class*="containerBottomSpot"]
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##[data-role="pornstar-banner"]
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##[data-role="promo"]
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##.xp-banner-pause
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##div[class^="yld-"]
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##.xp-banner-bottom + button
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##div[class$="-pauseSpotContainer"]
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##+js(set, initials.yld-pdpopunder, '')
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##+js(set-cookie, ts_popunder, true, , reload, 1)
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##+js(rpnt, script, popunder, , condition, popunder, stay, 1)
+*$doc,csp=worker-src 'none',domain=fullxh.com|hamsterix.*|megaxh.com|movingxh.world|unlockxh4.com|xhadult2.com|xhadult3.com|xhadult4.com|xhadult5.com|xhamster.*|xhamster10.*|xhamster11.*|xhamster12.*|xhamster13.*|xhamster14.*|xhamster15.*|xhamster16.*|xhamster17.*|xhamster18.*|xhamster19.*|xhamster2.*|xhamster20.*|xhamster3.*|xhamster4.*|xhamster46.com|xhamster5.*|xhamster7.*|xhamster8.*|xhday.com|xhday1.com|xhmoon5.com|xhplanet1.com|xhplanet2.com|xhreal2.com|xhreal3.com|xhtab2.com|xhtree.com|xhvictory.com|xhwebsite.com|xhwebsite2.com|xhwide1.com|xhwide8.com
+! xh interstitial page
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##+js(cookie-remover, video_view_count)
+||xhamsterpremium.com^$3p
+||xhamsterlive.com^$3p
+*$frame,3p,denyallow=google.com|xh.video,domain=fullxh.com|hamsterix.*|megaxh.com|movingxh.world|unlockxh4.com|xhadult2.com|xhadult3.com|xhadult4.com|xhadult5.com|xhamster.*|xhamster10.*|xhamster11.*|xhamster12.*|xhamster13.*|xhamster14.*|xhamster15.*|xhamster16.*|xhamster17.*|xhamster18.*|xhamster19.*|xhamster20.*|xhamster2.*|xhamster3.*|xhamster4.*|xhamster46.com|xhamster5.*|xhamster7.*|xhamster8.*|xhday.com|xhday1.com|xhmoon5.com|xhplanet1.com|xhplanet2.com|xhreal2.com|xhreal3.com|xhtab2.com|xhtree.com|xhvictory.com|xhwebsite.com|xhwebsite2.com|xhwide1.com|xhwide8.com
+!#if env_mobile
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##.thumb-list-mobile-item--widget
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##.no-ts-initiailize
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##.video-page__layout-ad
+fullxh.com,hamsterix.*,megaxh.com,movingxh.world,unlockxh4.com,xhadult2.com,xhadult3.com,xhadult4.com,xhadult5.com,xhamster.*,xhamster1.*,xhamster10.*,xhamster11.*,xhamster12.*,xhamster13.*,xhamster14.*,xhamster15.*,xhamster16.*,xhamster17.*,xhamster18.*,xhamster19.*,xhamster20.*,xhamster2.*,xhamster3.*,xhamster4.*,xhamster46.com,xhamster5.*,xhamster7.*,xhamster8.*,xhday.com,xhday1.com,xhmoon5.com,xhplanet1.com,xhplanet2.com,xhreal2.com,xhreal3.com,xhtab2.com,xhtree.com,xhvictory.com,xhwebsite.com,xhwebsite2.com,xhwide1.com,xhwide8.com##[class*="--"]:has(> [class*="cams-widget"])
+!#endif
+||xhamster.*/api/models/vast*Preroll$xhr,1p
+/related_1.html?language=$frame,3p
+/universal_1.html?language=$frame,3p
+/recommended_1.html?language=$frame,3p
+||buzzer.xhamster.
+##.ytd-j
+##.yxd-j
+##.yxd-jd
+xhamster20.*##.yxd-jbanner
+xhamster20.*##.player-add-overlay
+! https://github.com/uBlockOrigin/uAssets/issues/17237
+||xhamster20.*/api/*/vast
+
+! https://twitter.com/v_josel/status/877137961615273985
+elmundo.es##.Bloque-anuncios-shadow
+elmundo.es##.Bloque-anuncios
+elmundo.es##.disabled-vscroll:style(overflow: auto !important; position: initial !important;)
+
+! https://adblockplus.org/forum/viewtopic.php?f=10&t=53351
+pornovore.fr##+js(aopw, popUrl)
+
+! https://github.com/uBlockOrigin/uAssets/issues/492
+||andreas-unterberger.at/includes/js/helperFunctions.js$script,1p
+
+! https://adblockplus.org/forum/viewtopic.php?f=10&t=53374
+xstory-fr.com##+js(aopw, checkRealLoad)
+
+! https://github.com/uBlockOrigin/uAssets/issues/498
+receive-sms-online.info##+js(aopr, ga.length)
+
+! https://github.com/gorhill/uBlock/issues/2769
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=googletagmanager.com/gtm.js:10,domain=breitbart.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/500
+! https://github.com/uBlockOrigin/uAssets/issues/828
+||gainskins.com^$frame,domain=hltv.org
+||hltv.org/img/newwidgets/$image
+||hltv.org/img/static/featured_bet_bg.png$image
+||hltv.org/*.gif?ixlib=$image
+hltv.org##+js(nowoif)
+hltv.org##body, body::before:style(background-image: unset !important;)
+hltv.org##:is(div, aside):has(> a[href^="/"][data-link-tracking-page="Widget"])
+hltv.org##.leftCol > div [data-link-tracking-page="Widget"]:upward(.leftCol > div)
+hltv.org##.presented-by
+hltv.org##.thunderpick-firstcol-box
+hltv.org##a:matches-attr(href=/[a-zA-Z0-9]{100,}/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4149
+vidlox.*##+js(set, xRds, false)
+vidlox.*##+js(set, tRds, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/516
+! https://github.com/uBlockOrigin/uAssets/issues/18549
+thepiratebay.*,theproxyproxy.com,tpbay.*##+js(aopr, _wm)
+
+! https://github.com/uBlockOrigin/uAssets/issues/517
+! https://github.com/uBlockOrigin/uAssets/issues/2628
+! https://github.com/NanoMeow/QuickReports/issues/2035
+hollaforums.com##+js(nowoif)
+@@||hollaforums.com^$ghide
+||hollaforums.com/if/rc/ecigs/$frame,1p
+@@||hollaforums.com^$xhr,1p
+hollaforums.com##.sidebar-rcs
+
+! https://github.com/uBlockOrigin/uAssets/issues/518
+wallpapershome.com##+js(nostif, .adsbygoogle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/522
+supforums.com##+js(aopr, adsLoaded)
+@@||supforums.com^$ghide
+||supforums.com/if/rc/ecigs/$frame,1p
+supforums.com##.sidebar-rcs
+
+! https://github.com/uBlockOrigin/uAssets/issues/7802
+! primewire.mn ads
+primewire.*##+js(set, console.clear, noopFunc)
+primewire.*##:xpath('//*[contains(text(),"Sponsored")]'):upward(2)
+||primewire.*/sw$script,1p
+||primewire.*/addons/*.gif$image
+primewire.*##.ico.close
+
+! https://github.com/uBlockOrigin/uAssets/issues/458#issuecomment-315818190
+metacritic.com##.ad_unit:not(.text-ad)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7113
+! https://github.com/uBlockOrigin/uAssets/issues/9118
+!broken video ign.com##+js(aopr, __eiPb)
+ign.com##^script:has-text(iframeTestTimeMS)
+ign.com##.preShell:style(height: 0 !important;)
+ign.com###king
+ignboards.com,ign.com##^script:has-text(g02.)
+!#if env_chromium
+||au.ign.com^$inline-script
+! https://github.com/abp-filters/abp-filters-anti-cv/pull/455
+ignboards.com##+js(acs, JSON.stringify)
+!#endif
+*$xhr,redirect-rule=1x1.gif,domain=ign.com
+! https://github.com/uBlockOrigin/uAssets/issues/7584
+ign.com##+js(acs, JSON, g02.ign)
+*$script,redirect-rule=noopjs,domain=ignboards.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/547
+techtimes.com##+js(set, String.fromCharCode, noopFunc)
+techtimes.com##.sec-title2:has-text(From Our Sponsor)
+
+! https://github.com/uBlockOrigin/uAssets/issues/905
+||fux.com/*banner$image
+fux.com##.autonextAd
+.com/external/*?width=300&height=250$frame,1p
+.com/nativeexternal/$frame,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/549
+! https://forums.lanik.us/viewtopic.php?f=64&t=40089
+steamplay.*##+js(aopr, btoa)
+steamplay.*,streamp1ay.*##+js(aopw, Fingerprint2)
+streamp1ay.*##+js(aopw, Fingerprent2)
+steamplay.*,streamp1ay.*##+js(aopr, console.clear)
+steamplay.*,streamp1ay.*##+js(aopw, adcashMacros)
+slreamplay.*##+js(nano-stb, grecaptcha.ready, *)
+@@player*.html$frame,1p,domain=slreamplay.*
+*$frame,denyallow=google.com,domain=slreamplay.*|streampiay.*
+ext=$script,1p,domain=slreamplay.*
+||*ontent.steamplay.*^$all
+||steamplay.*^$csp=worker-src 'none';
+@@||streamp1ay.*^$ghide
+*$xhr,frame,3p,domain=streamp1ay.cc,denyallow=spcdn.cc
+! https://github.com/uBlockOrigin/uAssets/issues/8244
+slreamplay.*,steamplay.*,steanplay.*,stemplay.*,streamp1ay.*,streanplay.*,streampiay.*##+js(nowoif)
+streanplay.*##+js(set, console.log, noopFunc)
+streanplay.*##+js(set, console.clear, noopFunc)
+streanplay.*,steanplay.*##+js(aeld, , BACK)
+streanplay.*##+js(nowebrtc)
+steamplay.*,steanplay.*,stemplay.*,streamp1ay.*,streanplay.*##+js(aopr, jwplayer.utils.Timer)
+steamplay.*,steanplay.*,streamp1ay.*,streanplay.*##.ad
+slreamplay.*,steamplay.*,steanplay.*,stemplay.*,streamp1ay.*,streampiay.*,streanplay.*###uverlay
+steanplay.*,streanplay.*##div[style*="z-index: 2147483647;"][style*="position: fixed;"]
+*$xhr,frame,3p,domain=steanplay.*|streanplay.cc,denyallow=spcdn.cc
+stre4mplay.*##.ad
+stre4mplay.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/552
+daily.bhaskar.com##+js(aopw, popupAdCall)
+
+! https://github.com/gorhill/uBlock/issues/2804
+! https://github.com/uBlockOrigin/uAssets/issues/564
+||clubedohardware.com.br/cdn-cgi/apps/head/$script
+||googlesyndication.com^$important,domain=clubedohardware.com.br
+
+! https://github.com/uBlockOrigin/uAssets/issues/3895
+torrentfunk.com##+js(nowebrtc)
+||torrentfunk.com/s1w.js$script,1p
+torrentfunk.com##[href*=".premium"]
+torrentfunk.com##:xpath(//strong[contains(text(),"VPN")]/../../..)
+torrentfunk.com##.extneed
+
+! https://github.com/uBlockOrigin/uAssets/issues/565
+ville-ideale.fr##+js(nostif, contrformpub, 5000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/558
+! https://github.com/uBlockOrigin/uAssets/issues/578
+! https://github.com/uBlockOrigin/uAssets/issues/4272
+! https://github.com/NanoAdblocker/NanoCore/issues/234#issuecomment-450343022
+torrentz2.*##[class]:not(body):not(html):has-text(/Protect your privacy/i)
+torrentz2.*##[class]:not(body):not(html):has-text(Sponsored)
+torrentz2.*##.xpressa
+
+! https://github.com/uBlockOrigin/uAssets/issues/568
+calciomercato.it##+js(nostif, disabledAdBlock, 10000)
+! https://forums.lanik.us/viewtopic.php?p=130215#p130215
+! https://github.com/NanoAdblocker/NanoFilters/issues/361
+calciomercato.com##+js(nostif, _0x)
+
+! https://github.com/uBlockOrigin/uAssets/issues/571
+informer.com##+js(aopr, adblock_added)
+informer.com##.screen_ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/1286
+torlock.*,torlock2.*##+js(acs, setTimeout, admc)
+||torlock.*/sww.js$script,1p
+torlock.*##:xpath(//strong[contains(text(),"VPN")]/../../..)
+torlock.*,torlock2.*##+js(nowebrtc)
+torlock2.*##:xpath(//strong[contains(text(),"VPN")]/../../..)
+torlock.*,torlock2.*##.extneed
+/script/bootstrap.js$script,3p,domain=torlock.*|torlock2.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/582
+@@||inoreader.com^$ghide
+inoreader.com##.ad_title
+inoreader.com##.leaderboard_ad
+inoreader.com##+js(aopr, max_raids)
+
+! https://github.com/uBlockOrigin/uAssets/issues/590
+! https://www.reddit.com/r/uBlockOrigin/comments/76srms/local_news_sites_in_the_uk_now_attempting_to/
+bordertelegraph.com,bournemouthecho.co.uk,dailyecho.co.uk,dorsetecho.co.uk,eveningtimes.co.uk,guardian-series.co.uk,heraldscotland.com,iwcp.co.uk,lancashiretelegraph.co.uk,oxfordmail.co.uk,salisburyjournal.co.uk,theargus.co.uk,thetelegraphandargus.co.uk,yorkpress.co.uk##+js(aopw, _sp_)
+
+##[href^="https://www.onclickmega.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/598
+! https://github.com/uBlockOrigin/uAssets/issues/7124
+dronedj.com##+js(set, String.prototype.charCodeAt, trueFunc)
+9to5google.com,9to5mac.com,9to5toys.com,dronedj.com,electrek.co,marketrealist.com##.ad-disclaimer-container, .inlinead, .ad-container
+||googlesyndication.com^$xhr,redirect=noopjs,domain=9to5google.com|9to5mac.com|9to5toys.com|dronedj.com|electrek.co|marketrealist.com
+*$script,redirect-rule=noopjs,domain=9to5google.com|9to5mac.com|9to5toys.com|dronedj.com|electrek.co|marketrealist.com
+dronedj.com##.adsense, a[target="_blank"][rel="noopener noreferrer"]
+9to5toys.com,dronedj.com##.slot-leaderboard
+marketrealist.com###Track\.End + div[class]
+marketrealist.com##.gXgoom > div
+
+! https://github.com/uBlockOrigin/uAssets/issues/609
+igfap.com##+js(aopr, decodeURI)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2743
+whosampled.com##+js(nostif, ads.length)
+whosampled.com##+js(aopw, showAdBlockerOverlay)
+
+! https://github.com/uBlockOrigin/uAssets/issues/611
+||dslr-forum.de/ads/$image
+*/plugin/advertisement/$image
+
+! https://github.com/gorhill/uBlock/issues/2835
+! https://github.com/uBlockOrigin/uAssets/issues/780
+gamespot.com##+js(acs, $, sp.blocking)
+
+! https://github.com/uBlockOrigin/uAssets/issues/618
+meta-calculator.com,meta-chart.com##+js(acs, Promise)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12823
+@@||myreadingmanga.disqus.com^$script
+myreadingmanga.info##.imgtop
+myreadingmanga.info##center
+##[href*="www.gaming-adult.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/620
+alibaba.com##.m-product-item:has-text(Sponsored Listing)
+
+! https://github.com/uBlockOrigin/uAssets/issues/506
+! https://github.com/uBlockOrigin/uAssets/issues/6568
+||msn.com/advertisement.ad.js$script,1p,important
+||aolcdn.com/ads/adswrappermsni.js$script,domain=msn.com,important
+! https://github.com/uBlockOrigin/uAssets/issues/3703#issuecomment-435044782
+msn.com##.extnativeaditem, .serversidenativead > h3
+msn.com##.colombiaintraarticleads
+! https://github.com/NanoMeow/QuickReports/issues/2332
+msn.com##[data-aop="stripe.sponsored.navigation_stripenavigation"]:upward(2)
+!#if !env_mobile
+msn.com##[data-aop="stripe.store.navigation_stripenavigation"]:upward(2)
+!#endif
+!#if env_mobile
+msn.com##.stripenav:has(.adslabel):upward(2)
+!#endif
+msn.com##.todayshowcasead
+! https://github.com/NanoMeow/QuickReports/issues/1486#issuecomment-557161527
+msn.com##.stripecontainer:has(.adslabel)
+! https://www.reddit.com/r/uBlockOrigin/comments/pkdd5k/
+msn.com##.native-ad
+! https://www.msn.com/ja-jp/news placeholder
+msn.com##msft-article-card:not([class])
+! https://github.com/uBlockOrigin/uAssets/issues/19845
+!#if env_mobile
+msn.com##cs-native-ad-card-no-hover
+msn.com##msft-article-card:not(.contentCard)
+!#endif
+
+! https://www.reddit.com/r/uBlockOrigin/comments/6u2isr/i_cant_scroll_on_know_your_meme_when_i_use_ublock/
+! https://github.com/easylist/easylist/issues/7159
+knowyourmeme.com##.bodycopy > div[style]:not([class])
+!#if env_mobile
+knowyourmeme.com##.content-unit-refresh-wrapper
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/630
+forum.xda-developers.com##.postbit-wrapper:if(.postbit-userinfo-cell:has-text(Sponsor Content))
+
+! https://github.com/uBlockOrigin/uAssets/issues/6738
+! https://github.com/uBlockOrigin/uAssets/issues/17145
+fmovies.*##+js(nowoif)
+fmovies.*##+js(aopr, mm)
+fmovies.*##+js(set, console.clear, undefined)
+! fmovies.ps popup
+fmovies.*,f2movies.to###modalshare
+fmovies.*,f2movies.to##.modal-backdrop
+fmovies.*,f2movies.to##body.modal-open:style(overflow: auto!important)
+fmovies.*###gift-middle
+fmovies.*###gift-top
+! https://fmovies.to ads
+fmovies.*##+js(acs, document.write, innerWidth)
+! https://github.com/NanoMeow/QuickReports/issues/3311
+||iamcdn.net/players/player*.*mins.js$script,domain=freeplayervideo.com|nazarickol.com|player-cdn.com
+! abysscdn.com,freeplayervideo.com,nazarickol.com,player-cdn.com##+js(set, detectAdBlockAll, noopFunc)
+*$image,redirect-rule=32x32.png,domain=freeplayervideo.com|nazarickol.com|player-cdn.com
+freeplayervideo.com,nazarickol.com,player-cdn.com##+js(set, console.clear, undefined)
+freeplayervideo.com,nazarickol.com,player-cdn.com##+js(ra, style, #over)
+abysscdn.com,freeplayervideo.com,nazarickol.com,player-cdn.com##+js(nowoif, /^/, 1)
+jav.guru##.inside-right-sidebar > aside.widget_custom_html
+jav.guru###text-76
+jav.guru###text-92
+jav.guru###text-93
+||abysscdn.com/cdn-cgi/trace$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/12058
+mcloud.bz##+js(acs, Math, XMLHttpRequest)
+mcloud.bz##+js(nosiif, break)
+mcloud.bz##+js(aopr, open)
+@@||mcloud.bz^$ghide
+mcloud.bz,vidstream.pro##+js(nowoif)
+vidstream.pro##+js(aopr, mm)
+mcloud.bz##+js(aopr, __Y)
+vidstream.pro##+js(nosiif, break)
+vidstream.pro##div[id][style^="position: fixed; inset: 0px; z-index: 2147483647;"]
+bflix.*,mcloud.*,vizcloud.*,vizcloud2.*##+js(aopr, AaDetector)
+bflix.*##+js(aopr, mm)
+vizcloud.*,vizcloud2.*##.xad-wrapper
+mcloud.bz,vidplay.*,vidstream.pro,vizcloud.*##+js(ra, data-id|data-p, '[data-id],[data-p]', stay)
+mcloud.bz,vidplay.*##[src^="assets/bn"]:upward([style])
+||i.imgur.com^$image,domain=vizcloud.*|vizcloud2.*
+||soujoobafoo.com^
+/mellowpresence.com^$script
+/\/[A-Z]{1,2}\/[-0-9a-z]{5,}\.com\/(?:[0-9a-f]{2}\/){3}[0-9a-f]{32}\.js$/$script,1p,match-case
+! https://github.com/uBlockOrigin/uAssets/issues/19260
+vidstream.pro##.aslot
+/lazymolecule/*.js$script
+
+youtubedownloader.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/645
+computerbild.de##.startdownload > a[data-is-manager-usable="1"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1286
+torrentdownloads.*##+js(nowebrtc)
+torrentdownload.*,torrentdownloads.*##+js(acs, adcashMacros)
+torrentdownloads.*##.download [href^="/td/?"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1286
+torrentdownload.*##[href^="/bing."]
+torrentdownload.*##[href^="/get.php"]
+torrentdownload.*##[href^="https://goo.gl/"]
+torrentdownload.*##TR:has-text(Stream:)
+torrentdownload.*##.table2:has-text(Sponsored)
+||torrentdownload.*/*.gif$image
+torrentdownload.*##[href^="/td."]
+
+! https://github.com/uBlockOrigin/uAssets/issues/662
+liferayiseasy.*##+js(aeld, load, getComputedStyle)
+liferayiseasy.*##+js(aeld, load, adsense)
+
+! https://github.com/uBlockOrigin/uAssets/issues/829
+iptvbin.com##+js(aost, String.prototype.charCodeAt, ai_)
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=iptvbin.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/672
+@@||playok.com^$ghide
+playok.com##.adsbygoogle:style(height: 1px !important; width: 1px !important;)
+
+! https://www.youtube.com/watch?v=t6oyXKqB2vY
+blackspigot.com##+js(aopw, AdBlockDetectorWorkaround)
+
+! https://github.com/uBlockOrigin/uAssets/issues/688
+spaste.com##+js(nofab)
+spaste.com##[href^="http://bit.ly/"]
+spaste.com##[href="javascript:showhide('deals')"]
+spaste.com##b
+spaste.com##h5:has(> a[href^="javascript:"])
+spaste.com##h5 > a[href^="http://amzn.to/"]
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/118
+! https://www.reddit.com/r/uBlockOrigin/comments/ad0ucd/cant_play_video/
+! https://www.reddit.com/r/uBlockOrigin/comments/14kywvj/popups_getting_through_on_kimcartoon/
+kimcartoon.*##+js(nowoif)
+kimcartoon.*,kimcartoon.unblockit.*##+js(acs, $, adbWarn)
+kimcartoon.*##+js(aopw, Fingerprint2)
+kimcartoon.*##+js(rmnt, script, Number.isSafeInteger)
+kimcartoon.*###subcontent > div:has(.adsbyvli)
+kimcartoon.*##div[style*="width: 300px; height: 250px"]
+kimcartoon.*##.kcAds1
+kimcartoon.*###ads-top-wrap
+||kimcartoon.*/Ads/$frame
+*$script,redirect-rule=noopjs,domain=kimcartoon.*|kimcartoon.unblockit.*
+*$script,3p,denyallow=fastly.net|statically.io|sharecast.ws|bunnycdn.ru|bootstrapcdn.com|cdn.ampproject.org|cloudflare.com|cdn.staticfile.org|disqus.com|disquscdn.com|dmca.com|ebacdn.com|facebook.net|fastlylb.net|fbcdn.net|fluidplayer.com|fontawesome.com|github.io|google.com|googleapis.com|googletagmanager.com|gstatic.com|jquery.com|jsdelivr.net|jwpcdn.com|jwplatform.com|polyfill.io|recaptcha.net|shrink.pe|twitter.com|ulogin.ru|unpkg.com|userapi.com|vidazoo.com|vk.com|yastatic.net|ytimg.com|zencdn.net|youtube.com|cackle.me|googleoptimize.com|vuukle.com|chatango.com|twimg.com|google-analytics.com|hcaptcha.com|raincaptcha.com|media-imdb.com|blogger.com|hwcdn.net|instagram.com|wp.com|fastcomments.com|plyr.io,domain=kimcartoon.*
+
+! https://forums.lanik.us/viewtopic.php?p=124271#p124271
+dailyuploads.net##+js(acs, document.getElementById, adblockinfo)
+dailyuploads.net##+js(aopr, parcelRequire)
+dailyuploads.net##+js(nowoif)
+dailyuploads.net##+js(ra, checked, input#chkIsAdd)
+*$3p,denyallow=google.com|googleapis.com|gstatic.net,domain=dailyuploads.net
+||dailyuploads.net/images/gbinsta.jpg$image,1p
+||dailyuploads.net/images/redbuttonx.png$image,1p
+||dailyuploads.net/sw.js$script
+dailyuploads.net##[href^="https://href.li/"]
+dailyuploads.net##a[href^="http://hh-btr.com/"]
+dailyuploads.net##button#downloadBtnClickOrignal:style(display:block !important)
+dailyuploads.net##button#downloadBtnClick
+dailyuploads.net###dlink
+
+! sports streams vipleague
+@@*$ghide,domain=f1stream.*|fbstream.*|mlbstream.*|motogpstream.*|nbastream.*|nflstream.*|nhlstream.*|plylive.*|plyvdo.*|rugbystreams.*|socceronline.*|tennisstreams.*|tvply.*|ufcstream.*|vipleague.*
+plylive.*,plyvdo.*##+js(nowoif)
+tennisstreams.*,vipleague.*##+js(acs, setTimeout, admc)
+||mw19c3mi5a.com^$3p
+||ryllae.com^$3p,important
+##[data-uri^="https://s3.amazonaws.com"]
+##[data-lnguri^="https://s3.amazonaws.com"]
+fbstream.*##.position-absolute
+vipleague.*##.bg-dark.ratio > .position-absolute
+*/script/formula.js|$script
+nolive.me##+js(set, attachEvent, trueFunc)
+nolive.me##+js(nosiif, debug)
+vipleague.*##.m-1.btn-danger.btn
+
+! https://github.com/uBlockOrigin/uAssets/issues/704
+! https://github.com/AdguardTeam/AdguardFilters/issues/73245
+! https://github.com/easylist/easylist/commit/8b6e6544f04b3ded98fbd70bd832dfcc4e61db52#commitcomment-27222476
+imgking.co,imgkings.com,imgprime.com##+js(aopr, document.createElement)
+imgkings.com##+js(acs, __htapop)
+imgkings.com##+js(aopr, ExoLoader)
+imgkings.com##+js(nostif, location.href)
+
+! https://github.com/uBlockOrigin/uAssets/issues/709
+! https://github.com/uBlockOrigin/uAssets/issues/4651
+! https://github.com/uBlockOrigin/uAssets/issues/4908
+||cloudfront.net/ads/*$script,redirect=noopjs,domain=cbs.com
+||cloudfront.net/ads/img/*$image,redirect=1x1.gif,domain=cbs.com
+||fastly.net^$image,important,redirect=2x2.png,domain=cbs.com
+||fastly.net^$script,important,redirect=noopjs,domain=cbs.com
+cbs.com,paramountplus.com##+js(set, hasAdBlocker, false)
+*$3p,script,redirect-rule=noopjs,domain=cbs.com|paramountplus.com
+@@||s0.2mdn.net/instream/html5/ima3.js$script,domain=cbs.com|paramountplus.com
+||ad.doubleclick.net^$image,redirect=1x1.gif,domain=cbs.com|paramountplus.com
+! CNAME
+!#if env_firefox
+||fastly.net^$image,important,domain=cbs.com,badfilter
+||fastly.net^$script,important,domain=cbs.com,badfilter
+!#endif
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,domain=cbs.com|paramountplus.com
+@@||pubads.g.doubleclick.net/ondemand/*/content/*/streams$xhr,domain=cbs.com|paramountplus.com
+||pubads.g.doubleclick.net/ondemand/*/content/*/vid/*/streams/*/time-events.json$important,domain=cbs.com|paramountplus.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/718
+cs-fundamentals.com##+js(aopr, google_jobrunner)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/72bind/blocking_of_all_popups_option_no_longer_working/
+! https://github.com/NanoMeow/QuickReports/issues/1658#issuecomment-520664549
+watchparksandrecreation.net##+js(nowoif)
+watchparksandrecreation.net###keeper2
+
+! https://github.com/uBlockOrigin/uAssets/issues/723
+xmoviesforyou.*##+js(aopr, popjs.init)
+xmoviesforyou.*##+js(aopr, decodeURI)
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/624
+kisshentai.net##+js(aopr, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/739
+||zergnet.com/zerg-inf-multi$3p,script
+
+! https://github.com/gorhill/uBlock/issues/3114
+wunderground.com##+js(aopw, _sp_)
+wunderground.com##[class*="-ad-box-"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/841
+putlockerc.*##+js(nowoif)
+putlocker.*##[id*="ScriptRoot"]
+putlocker.*##.ep_buttons
+||putlocker.*^*banner
+||put-locker.com/sw$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/4674
+! https://forums.lanik.us/viewtopic.php?f=62&t=40397
+! https://www.reddit.com/r/uBlockOrigin/comments/aqcoi3/annoying_ads_on_putlockertv/
+putlocker-website.com,putlockertv.*##+js(nowoif)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=41466
+! https://github.com/uBlockOrigin/uAssets/issues/7884
+vidsrc.*##+js(nosiif, /devtools|0x/)
+vidsrc.*##+js(set, console.clear, trueFunc)
+vidsrc.*##+js(nowoif)
+vidsrc.*##+js(aopr, __Y)
+vidsrc.*###pop_asdf
+||encumbranceunderlineheadmaster.com^
+||katebugs.com^
+embed.smashystream.com###addiv
+*$script,3p,denyallow=gstatic.com,domain=streambucket.net
+
+! https://www.reddit.com/r/uBlockOrigin/comments/9vmhj2
+||greedseed.world/vpaid/YtVpaid.php
+putlocker.*##+js(aopw, open)
+putlocker.*##+js(aopw, adcashMacros)
+||putlocker.*/*.gif$image
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=38536
+10fastfingers.com##+js(acs, document.createElement, decodeURIComponent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/757
+@@||ultrahorny.com^$ghide
+@@||ajax.googleapis.com^$script,domain=ultrahorny.com
+ultrahorny.com##.afs_ads
+ultrahorny.com###hideads
+
+! https://www.reddit.com/r/uBlockOrigin/comments/75zmyk/ublock_not_blocking_grammarly_ads_on_citation/
+! https://github.com/uBlockOrigin/uAssets/issues/806
+bibme.org,citationmachine.net##+js(aopr, SBMGlobal.run.pcCallback)
+citationmachine.net,citethisforme.com,easybib.com##+js(aopr, SBMGlobal.run.gramCallback)
+citethisforme.com##.sbm-ad
+! https://github.com/uBlockOrigin/uAssets/issues/2155
+bibme.org,citationmachine.net##+js(aeld, load, (!o))
+easybib.com##+js(aeld, load, (!i))
+citethisforme.com##.ads_top_middle
+||contributor.google.com/scripts/*/loader.js$script,domain=citationmachine.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/11102
+apkmirror.com#@#.gooWidget
+apkmirror.com#@#.google-ad-leaderboard
+apkmirror.com##.gooWidget:style(opacity: 0 !important; visibility: collapse !important;)
+apkmirror.com##.google-ad-leaderboard:style(opacity: 0 !important;)
+apkmirror.com##[href^="https://bstk.me/"]
+! https://github.com/uBlockOrigin/uAssets/issues/14719
+apkmirror.com##div.appRow[style]
+apkmirror.com##.advertisement-text
+apkmirror.com##.downloadCountdown
+apkmirror.com##.OUTBRAIN
+apkmirror.com##[id^="adtester-container"]:style(position: absolute !important;)
+apkmirror.com##.ains
+apkmirror.com##^script:has-text(/style:last-of-type|:empty|APKM\..+?\.innerHTML/)
+!#if !cap_html_filtering
+apkmirror.com##+js(rmnt, script, /style:last-of-type|:empty|APKM\..+?\.innerHTML/)
+!#endif
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=38653
+radio.*##.topAdSpacer
+
+! https://www.reddit.com/r/uBlockOrigin/comments/772sm4/help_me_figure_out_how_to_block_these/
+! https://github.com/NanoMeow/QuickReports/issues/2485
+mmorpg.com##[onclick^="trackClick"]
+mmorpg.com##a[href^="http://v2.g.99.com/"]
+mmorpg.com##.vhadb
+
+! https://github.com/uBlockOrigin/uAssets/issues/4163
+mylink.*,my1ink.*,myl1nk.*,myli3k.*##+js(acs, decodeURIComponent, 'shift')
+mylink.*,my1ink.*,myl1nk.*,myli3k.*##+js(nosiif, /0x|google|ecoded|==/)
+mylink.*,my1ink.*,myl1nk.*,myli3k.*##+js(nowoif)
+mylink.*,my1ink.*,myl1nk.*,myli3k.*##a[href^="https://go.nordvpn.net/"], [src^="/nordcode.php"]
+mylink.*,my1ink.*,myl1nk.*,myli3k.*##div[id][style^="width: 970px; height: 250px;"]
+mylink.*,my1ink.*,myl1nk.*,myli3k.*##div[id][style="width: 300px; height: 250px;"]
+mylink.*,my1ink.*,myl1nk.*,myli3k.*##div[id][style="width: 728px; height: 90px;"]:upward(#pub1)
+mylink.*,my1ink.*,myl1nk.*,myli3k.*##html > iframe
+@@*$script,1p,domain=mylink.*|my1ink.*|myl1nk.*|myli3k.*
+@@||in-page-push.com^$script,domain=mylink.*|my1ink.*|myl1nk.*|myli3k.*
+@@||googleads.g.doubleclick.net/pagead/test_domain.js$script,domain=mylink.*|my1ink.*|myl1nk.*|myli3k.*
+*$script,redirect-rule=noopjs,domain=mylink.*|my1ink.*|myl1nk.*|myli3k.*
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|consensu.org|google.com|googleapis.com|gstatic.com|hcaptcha.com|hwcdn.net|recaptcha.net|twitter.com,domain=mylink.*|my1ink.*|myl1nk.*|myli3k.*
+freebeacon.com##.uppercase:has-text(/advertisement/i)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19806
+sankakucomplex.com##.vce-ad-container
+sankakucomplex.com#@#.scad
+sankaku.app##+js(no-xhr-if, googlesyndication)
+chan.sankakucomplex.com##body.no-scroll:style(overflow: auto !important; position: static !important; width: unset !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/778
+! https://github.com/jspenguin2017/uBlockProtector/issues/853
+@@||anghami.com^$ghide
+@@||anghamiwebcdn.akamaized.net/ads.$script,domain=play.anghami.com
+@@||d24n15hnbwhuhn.cloudfront.net/libs/amplitude-$script,domain=play.anghami.com
+play.anghami.com##.sideBox:has(.adsbox)
+anghami.com##anghami-ads
+anghami.com##+js(nostif, isDesktopApp, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5952
+player.glomex.com,merkur.de,tz.de##+js(set, Object.prototype._getSalesHouseConfigurations, noopFunc)
+player.glomex.com##+js(no-fetch-if, player-feedback)
+||player-feedback*.glomex.*^
+
+! https://github.com/uBlockOrigin/uAssets/issues/767
+theoutline.com##.stack-embed
+
+! https://github.com/uBlockOrigin/uAssets/issues/25
+wired.com##[class^="OutbrainGridColumn-"]
+wired.com##[class^="StickyHeroAdWrapper-"]
+wired.com###around-the-web
+! https://github.com/uBlockOrigin/uAssets/issues/28
+||googlesyndication.com/pagead/*$script,important,domain=wired.com
+||wired.com/ams/page-ads.js$important,script
+wired.com##+js(nostif, Bait)
+! "Sponsored stories" section spotted 1st-hand at:
+! https://www.wired.com/2011/08/google-studying-re-ranking-search-results-using-1-button-data-but-its-touchy/
+wired.com##.sponsored-stories-component
+! wired.com: more EasyList's exception filters to counter
+||doubleclick.net^$important,script,domain=wired.com
+wired.com##[id^="cns_ads_"]
+wired.com##[class^="adv"]
+wired.com##.failsafe-desktop
+! https://github.com/NanoMeow/QuickReports/issues/1751#issuecomment-591741616
+wired.com##.consumer-marketing-unit
+
+! https://github.com/uBlockOrigin/uAssets/issues/790
+androidrepublic.org##+js(acs, $, samInitDetection)
+
+! https://github.com/uBlockOrigin/uAssets/issues/796
+! https://github.com/uBlockOrigin/uAssets/issues/6880
+biqle.*##+js(acs, decodeURI, decodeURIComponent)
+biqle.*##+js(aopr, Date.prototype.toUTCString)
+||biqle.ru/swp.js$script,1p
+dxb.to##+js(nowebrtc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10545
+nytimes.com,nytimes3xbfgragh.onion###site-content > div[class^="css"]:has(> [data-testid="StandardAd"])
+nytimes.com,nytimes3xbfgragh.onion##article.story:style(opacity: 1.0 !important;)
+nytimes.com,nytimes3xbfgragh.onion##:xpath(//div[starts-with(@id, "dfp-ad")]/../..)
+nytimes.com,nytimes3xbfgragh.onion##section[aria-labelledby="new-york-section"] > div > div[class^="css"]:has(> #pp_morein-wrapper)
+! https://github.com/uBlockOrigin/uAssets/issues/816
+! https://github.com/uBlockOrigin/uAssets/issues/3708
+cooking.nytimes.com#?#.nytc---modal-window---isShown:not(:has(.nytc---largepicturemodal---contentBody > .nytc---x---x.nytc---largepicturemodal---xBtn[role="button"], .nytc---grocerylistmodal---groceryListContentContainer))
+cooking.nytimes.com##body:style(height: auto !important; overflow: auto !important)
+cooking.nytimes.com##html:style(height: auto !important; overflow: auto !important)
+! https://github.com/easylist/easylist/commit/1509d85840e1245394ed7fb6cbbbedc9c0cda103
+@@||nytimes.com^*/adslot-$script,xhr,badfilter
+! https://github.com/uBlockOrigin/uAssets/issues/16519
+nytimes.com##[id^="story-ad"][id$="wrapper"]
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=32450
+! https://github.com/uBlockOrigin/uAssets/issues/2973
+mp4upload.com##+js(aopw, adcashMacros)
+mp4upload.com###lay.lay
+*$script,redirect-rule=noopjs,domain=mp4upload.com
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|fontawesome.com|gstatic.com|hwcdn.net|jquery.com|jsdelivr.net,domain=mp4upload.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/133530
+@@||userupload.*^$ghide
+userupload.*##+js(ra, checked, #addon)
+userupload.*##.mb-4.custom-checkbox.text-center.custom-control
+userupload.*##ins.adsbygoogle
+userupload.*##[href^="https://xn--r1a.click/useruploadofficial"]
+userupload.*##+js(aeld, , _0x)
+userupload.*##.btn-danger:has-text(/download/i)
+userupload.*##a[href*="hotstar"]
+userupload.*##.ads
+||tgwidget.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/5674
+uploadrar.*##+js(acs, Math, _0x)
+uploadrar.*##+js(aopr, popns)
+uploadrar.*##+js(acs, eval, replace)
+uploadrar.*##+js(nobab)
+uploadrar.*##+js(nano-stb, tick, 1000)
+uploadrar.*##[class^="banner"]:not(:has(#commonId))
+uploadrar.*##div.download0page:not(:has(.mngez-free-download))
+uploadrar.*##ins
+uploadrar.*##a[href][target="_blank"][class]
+uploadrar.*###wrapper, .banner2:style(display: initial !important;)
+uploadrar.*##.desc:style(width:auto! important;)
+||uploadrar.*/sw.js$script
+
+! https://github.com/reek/anti-adblock-killer/issues/3723
+wetter.com##+js(acs, $, lobster)
+at.wetter.com##+js(aopw, openLity)
+
+! https://www.camp-firefox.de/forum/viewtopic.php?p=1057609#p1057609
+! https://forums.lanik.us/viewtopic.php?p=127880#p127880
+motorradonline.de,zentralplus.ch##+js(nofab)
+
+! https://github.com/uBlockOrigin/uAssets/issues/843
+business-standard.com##+js(acs, $, blockThisUrl)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=39052
+powerthesaurus.org##+js(aopw, ad_abblock_ad)
+
+! https://github.com/uBlockOrigin/uAssets/issues/846
+! https://github.com/jspenguin2017/uBlockProtector/issues/816
+! https://github.com/uBlockOrigin/uAssets/issues/16180
+! Popups triggered by popads
+animepahe.*,kwik.*##^script:has-text('shift')
+animepahe.*,kwik.*##^script:has-text(\'shift\')
+animepahe.*,kwik.*##+js(acs, String.fromCharCode, 'shift')
+animepahe.*,kwik.*##+js(aopr, open)
+animepahe.*,kwik.*##+js(aopr, PopAds)
+pahe.*##+js(rmnt, script, Reflect)
+@@||kwik.*^$script,1p
+! https://forums.lanik.us/viewtopic.php?f=62&t=44940 pahe .in / .ph
+! https://github.com/uBlockOrigin/uAssets/issues/8398
+pahe.*##+js(aeld, , _0x)
+@@||pahe.*^$ghide
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=39161
+zonebourse.com##+js(acs, $, AdBlocker)
+
+! bad*.it network sites
+! https://github.com/NanoMeow/QuickReports/issues/3260
+badtaste.it##+js(aeld, , Adblock)
+
+! https://github.com/reek/anti-adblock-killer/issues/3760
+aofsoru.com##+js(acs, addEventListener, displayMessage)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5397
+! https://github.com/uBlockOrigin/uAssets/issues/8295
+! https://github.com/uBlockOrigin/uAssets/pull/12748
+yts.*##+js(aeld, , _0x)
+yts.*##+js(aopr, runAdblock)
+yts.*##+js(nowoif)
+yts.*##+js(nostif, "admc")
+yts.*##+js(acs, document.createElement, admc)
+yts.*##^script:has-text(admc)
+*/script/clock.js$script,domain=yts.*
+yts.*##[id*="container"][id^="id"]
+yts.*##html:style(overflow: auto !important;)
+yts.*##.cborz-bordered
+yts.*##.madikf
+! https://github.com/uBlockOrigin/uAssets/issues/19405
+yts.mx##.title ~ a[href] .button:upward(.container > div)
+yts.mx##^script:has-text(document.write)
+!#if !cap_html_filtering
+yts.mx##+js(rmnt, script, document.write)
+!#endif
+yts.mx##.container > [class]:has-text(VPN)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/7fr9jc/help_with_disabling_the_antiadbock_message_on/
+sarugbymag.co.za##+js(aopr, showAds)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=39202
+! https://github.com/AdguardTeam/AdguardFilters/issues/78153
+! https://github.com/AdguardTeam/AdguardFilters/issues/116391
+imgdrive.net,imgwallet.com##+js(acs, jQuery, TestAdBlock)
+imgadult.com,imgdrive.net,imgtaxi.com,imgwallet.com##+js(aopr, ExoLoader)
+imgadult.com,imgdrive.net,imgtaxi.com,imgwallet.com##+js(aopr, loadTool)
+imgadult.com,imgdrive.net,imgtaxi.com,imgwallet.com##+js(aopw, cticodes)
+imgadult.com,imgdrive.net,imgtaxi.com,imgwallet.com##+js(aopw, imgadbpops)
+imgadult.com,imgdrive.net,imgtaxi.com,imgwallet.com##+js(acs, document.getElementById, document.write)
+imgadult.com,imgdrive.net,imgtaxi.com,imgwallet.com##+js(nano-stb, redirect, 4000)
+/(?:com|net)\/[a-z-]{3,10}\.html$/$frame,1p,domain=imgadult.com|imgdrive.net|imgtaxi.com|imgwallet.com
+/(?:com|net)\/[0-9a-f]{12}\.js$/$script,1p,domain=imgadult.com|imgdrive.net|imgtaxi.com|imgwallet.com
+/ea/fl.js
+/ea2/fl.js
+/altiframe.php$domain=imgadult.com|imgdrive.net|imgtaxi.com|imgwallet.com
+/altiframe2.php$domain=imgadult.com|imgdrive.net|imgtaxi.com|imgwallet.com
+/frame.php$domain=imgadult.com|imgdrive.net|imgtaxi.com|imgwallet.com
+imgadult.com,imgdrive.net,imgtaxi.com,imgwallet.com##.blink
+imgadult.com,imgdrive.net,imgtaxi.com,imgwallet.com##.sidebar > div:first-of-type
+imgadult.com,imgdrive.net,imgtaxi.com,imgwallet.com##.sidebar > h3:first-child
+imgadult.com,imgdrive.net,imgwallet.com##.bottom_abs
+imgadult.com,imgdrive.net,imgwallet.com##.centered
+imgtaxi.com###image_details:style(margin-top: 30px !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/869
+porntrex.com###index-link
+*$script,3p,denyallow=blazingcdn.net|cdntrex.com|fastly.net|google.com|googleapis.com|gstatic.com|h-cdn.com|stackpathcdn.com,domain=porntrex.com
+! https://github.com/uBlockOrigin/uAssets/commit/775ab4c3221128355764b828902e5d70468d6f4d#commitcomment-61301673
+porntrex.com##+js(disable-newtab-links)
+! https://github.com/uBlockOrigin/uAssets/issues/15503
+||porndoe.com/movie/preroll/*$media,redirect=noopmp4-1s,domain=porntrex.com
+||porndoe.com/sitePreRoll/
+
+! https://github.com/uBlockOrigin/uAssets/issues/870
+! https://www.reddit.com/r/uBlockOrigin/comments/hbxqip/sxyprnnet_video_ads/
+! https://www.reddit.com/r/uBlockOrigin/comments/1966h80/ublock_filters_blocking_website_element/
+sxyprn.*##+js(acs, decodeURI, decodeURIComponent)
+sxyprn.*##+js(set, vast_urls, {})
+sxyprn.*##+js(aopr, popns)
+sxyprn.*##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+sxyprn.*##+js(aopw, __aaZoneid)
+sxyprn.*##.tbd
+sxyprn.*##.cbd
+*$frame,script,3p,denyallow=google.com|googleapis.com|gstatic.com|hcaptcha.com|recaptcha.net,domain=sxyprn.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/1197
+lacuevadeguns.com##+js(aost, onload, inlineScript)
+*$image,redirect-rule=1x1.gif,domain=magesy.*|majesy.*|mage.si|magesypro.*
+@@*$ghide,domain=mage.si|magesypro.*|magesy.blog
+magesy.*##ins.adsbygoogle
+mage.si##+js(aeld, load, nextFunction)
+mage.si##+js(nano-sib)
+magesypro.*##ins.adsbygoogle
+magesypro.pro,magesy.*##+js(nostif, AdBlocker)
+magesy.*,audioztools.com##+js(no-fetch-if, adsbygoogle)
+audiotools.pro,magesy.blog,magesypro.pro,audioztools.com##+js(noeval-if, blocker)
+audiotools.pro,magesy.blog,magesypro.pro,audioztools.com##+js(nostif, Blocked)
+magesy.download,audioztools.com##+js(acs, addEventListener, google_ad_client)
+magesy.*,magesypro.pro##+js(aost, document.getElementById, adsBlocked)
+audioztools.com##+js(nostif, nextFunction)
+@*.js$script,1p,important,domain=audiotools.pro|magesy.blog|magesypro.pro|audioztools.com
+(*.js$script,1p,important,domain=audiotools.pro|magesy.blog|magesypro.pro|audioztools.com
+@@*$script,1p,domain=audiotools.pro|magesy.blog|magesypro.pro|audioztools.com
+||cdn.jsdelivr.net/npm/@rimiti/abm@latest/dist/$script,css,3p
+magesy.blog###abm
+
+! https://github.com/uBlockOrigin/uAssets/issues/6223
+hqq.*##+js(aopr, adBlockDetected)
+hqq.*##+js(set, sadbl, false)
+hqq.*##+js(nowoif)
+||hqq.*/cdn-cgi/trace$xhr,1p,important
+||googletagmanager.com/ns.html$redirect-rule=noop.js
+@@||hqq.*^$ghide
+@@||hqq.*^$script,xhr,1p
+@@||cdn.jsdelivr.net/npm/videojs-contrib-ads/$domain=hqq.*
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=hqq.*
+!#if env_firefox
+@@||hqq.*/sec/player/*$csp
+!#endif
+hqq.*##[href="https://t.me/Russia_Vs_Ukraine_War3"]
+hqq.*##a[onclick="openAuc();"]
+||vkcdnservice.com^$script,redirect-rule=noopjs,3p
+! https://github.com/uBlockOrigin/uAssets/issues/10039
+||ebd.cda-hd.cc^
+! https://www.reddit.com/r/uBlockOrigin/comments/14r6074/
+! https://www.reddit.com/r/uBlockOrigin/comments/14r6074/adblock_blocked_netutvhqqto_site/jqv92vj/
+hqq.*,waaw.*##+js(set, adblockcheck, false)
+! Redirecting
+hqq.*,waaw.*##^script:has-text(self == top)
+!#if !cap_html_filtering
+hqq.*,waaw.*##+js(rmnt, script, self == top)
+!#endif
+! https://github.com/uBlockOrigin/uAssets/issues/14001
+*$script,3p,denyallow=google.com|gstatic.com|polyfill.io,domain=playdede.us
+waaw.*##+js(aopr, doSecondPop)
+! https://github.com/uBlockOrigin/uAssets/issues/20599
+waaw.*##+js(nowoif)
+waaw.*##+js(set, arrvast, [])
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=39244
+filescdn.com##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/3099
+! palimas tv => palimas org
+@@||palimas.*^$ghide
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|fluidplayer.com|fontawesome.com|google.com|gstatic.com|hwcdn.net|jquery.com,domain=palimas.*
+
+! URL Shortener
+! https://github.com/uBlockOrigin/uAssets/issues/2768
+adbull.org##+js(set, blurred, false)
+*$script,3p,domain=adbull.org
+@@||static.adbull.me^$script,domain=adbull.org
+*$script,redirect-rule=noopjs,domain=adbull.org
+adbull.*##+js(ra, onclick)
+adbull.*##[src^="https://i.imgur.com/"]
+deportealdia.live##+js(nano-sib, , 1200, 0)
+deportealdia.live##+js(nowoif)
+deportealdia.live###overlay
+adyou.me,srt.am##+js(nowebrtc)
+! https://github.com/uBlockOrigin/uAssets/issues/6299
+srt.am##+js(aopr, RunAds)
+||srt.am/sw.js$script,1p
+! https://github.com/uBlockOrigin/uAssets/issues/3091
+adyou.*##+js(aeld, /^(?:click|mousedown)$/, bypassEventsInProxies)
+adyou.me#@#.adscontainer
+
+! https://github.com/uBlockOrigin/uAssets/issues/883
+||fbs.com^$3p
+! https://github.com/uBlockOrigin/uAssets/issues/1009#issuecomment-352160776
+! https://github.com/jspenguin2017/uBlockProtector/issues/791
+! https://github.com/jspenguin2017/uBlockProtector/issues/792
+! https://github.com/NanoMeow/QuickReports/issues/354
+123link.*##+js(aopr, jQuery.adblock)
+123link.*##+js(acs, $, test-block)
+123link.*##+js(acs, $, adi)
+123link.*##+js(acs, $, undefined)
+||123link.*/push/
+123link.*##.ads-block-warning
+! https://github.com/uBlockOrigin/uAssets/issues/3374
+123link.*##+js(aopr, ads_block)
+123link.*##+js(aopr, blockAdBlock)
+123link.*##+js(nano-sib)
+123link.*##+js(set, blurred, false)
+||yoads.network^$3p
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=39252&p=128960#p128838
+||player.ooyala.com/static/*ad$script,redirect=noopjs,domain=dugout.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/891
+sheshaft.com##+js(aopr, decodeURI)
+sheshaft.com##[class*="banner"]
+sheshaft.com##.adv-aside
+
+! https://github.com/uBlockOrigin/uAssets/issues/892
+alrincon.com##+js(aopr, loadTool)
+alrincon.com##+js(aopr, ExoLoader.serve)
+alrincon.com##+js(aopr, open)
+alrincon.com##+js(acs, onload, open)
+||trcklks.com^$3p
+! ##[href^="https://sex.cam/"]
+alrincon.com##center:has-text(deal)
+||alrincon.com/2022/varios/crazyshit.jpg
+||alrincon.com/imagenes/stasyq/
+/nbk/frnd_ld.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/893
+@@||playview.io/*/showads.js$xhr,1p
+playview.io##.ads_player
+
+! https://github.com/uBlockOrigin/uAssets/issues/896
+hdporn.net##+js(aopr, exoOpts)
+hdporn.net##+js(aopr, doOpen)
+hdporn.net##[href^="http://www.hdporn.net/site.php"]
+||grandfuckauto.xxx^$3p
+||long.xxx^$3p
+||amateurporn.net/*.gif$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/897
+watch-my-gf.com,watchmyexgf.net##+js(aopr, prPuShown)
+watchmyexgf.net##+js(nowoif)
+watchmygf.me##+js(set, flashvars.adv_pre_src, '')
+watchmyexgf.net##.adv
+watchmyexgf.net##[href^="http://wct.link/click"]
+watch-my-gf.com##.table
+||watch-my-gf.com/images/bear.png
+||watchmyexgf.net/z/gf.jpg
+
+! https://github.com/uBlockOrigin/uAssets/issues/907
+*$frame,domain=clik.pw
+*$script,3p,denyallow=google.com|gstatic.com|recaptcha.net,domain=clik.pw
+@@||api-secure.solvemedia.com^$frame
+clik.pw##a[href^="https://href.li/"]
+clik.pw##body > div[style]:has(input[type="button"])
+clik.pw##div[style*="z-index:99999"] > div[style*="width:300px"]
+##a[href^="https://syndication.exdynsrv.com/splash.php"]
+*$popup,domain=clik.pw,3p
+clik.pw##+js(aopr, open)
+
+@@||api.solvemedia.com^$script,frame
+
+! https://github.com/uBlockOrigin/uAssets/issues/911
+adshort.*##+js(aopw, Fingerprint2)
+adshort.*,adsrt.*##+js(nowoif)
+adshort.*##+js(set, blurred, false)
+adshort.*##A[href$=".html"][rel="nofollow norefferer noopener"]
+adshort.*,adsrt.*##[id*="frme"]
+! https://github.com/uBlockOrigin/uAssets/issues/911#issuecomment-417348509
+adsrt.*#@#div[id*="ScriptRoot"]
+! https://github.com/uBlockOrigin/uAssets/issues/911#issuecomment-423769642
+||adsrt.*/sw.js$script,1p
+adsrt.*##div[id^="SC_TBlock"]
+@@||adshort.*^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/906
+! https://github.com/AdguardTeam/AdguardFilters/issues/117551
+upload-4ever.com##+js(nowoif)
+*$script,domain=upload-4ever.com,3p,denyallow=gstatic.com
+##[onclick*="postlnk.com"]
+##[href*="postlnk.com"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/2482
+tube8.*##+js(set, showPopunder, false)
+tube8.*##+js(aeld, , _0x)
+tube8.*##+js(aopw, IS_ADBLOCK)
+tube8.*##+js(nowoif)
+tube8.*##+js(set, page_params.holiday_promo, true)
+tube8.*##.adsbytrafficjunky
+tube8.*##.js-remove-ads-premium-link
+tube8.*##main.row > aside.col-4 > div[class]
+tube8.*##input + div:has(.adsbytrafficjunky)
+tube8.*##.gridList > [class]:has(.adsbytrafficjunky)
+tube8.*##[href^="https://ads.trafficjunky.net/ads"]
+tube8.*##[style="background-color: rgb(255, 255, 255); display: block;"]
+tube8.*###flvplayer > [style]:has(.js-remove-ads-premium-link)
+tube8.*###result_container_wrapper > [style]:has(.js-remove-ads-premium-link)
+tube8.*###result_container > [class]:not(.video_box)
+
+! https://github.com/uBlockOrigin/uAssets/issues/915
+hdpornt.com##+js(aopr, ExoLoader)
+hdpornt.com##+js(aopw, __NA)
+
+! https://github.com/uBlockOrigin/uAssets/issues/922
+@@||simply-hentai.com^$ghide
+*$script,redirect-rule=noopjs,domain=simply-hentai.com
+simply-hentai.com##.page-leave
+simply-hentai.com##.native + div
+
+! https://github.com/uBlockOrigin/uAssets/issues/916
+||daporn.com/*banner$image
+||daporn.com/frames/$frame
+daporn.com##.ntv-media
+daporn.com##.bottom-promo
+daporn.com###mediaOverlay
+daporn.com###close-aff
+*.gif$domain=daporn.com,image
+daporn.com##[href*="offer"]
+daporn.com##[href*="&aff"]
+daporn.com##.sponsor
+
+! https://github.com/uBlockOrigin/uAssets/issues/918
+4tube.com##+js(aopr, ExoLoader)
+4tube.com##+js(aopw, ads_priv)
+||4tube.com/*banner$image
+
+! https://adblockplus.org/forum/viewtopic.php?f=10&t=54673
+mp3cut.net##+js(aopw, ab_detected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/925
+pornerbros.com##+js(aopr, ExoLoader)
+pornerbros.com##+js(aopw, ads_priv)
+pornerbros.com##+js(set, adsEnabled, true)
+pornerbros.com##+js(aopr, document.dispatchEvent)
+||pornerbros.com/*banner$image
+||pornerbros.com/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/927
+@@||media.oadts.com/www/delivery/afv.php$domain=serienjunkies.de
+@@||media.oadts.com/www/delivery/video.php$domain=serienjunkies.de
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=media.oadts.com
+serienjunkies.de###sj-ad-wrapper
+
+! https://github.com/uBlockOrigin/uAssets/issues/930
+pichaloca.com##+js(aopr, ExoLoader)
+pichaloca.com##.publis-bottom
+
+! https://github.com/uBlockOrigin/uAssets/issues/931
+pornodoido.com##+js(aopr, ExoLoader)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5470
+! https://github.com/uBlockOrigin/uAssets/issues/8039
+kinos.*,kinox.*##+js(acs, adcashMacros)
+kinos.*,kinox.*##+js(aopr, AaDetector)
+kinos.*,kinox.*##+js(aopr, eddOptions)
+||35.226.75.50^
+
+! https://github.com/uBlockOrigin/uAssets/issues/941#issuecomment-405022292
+@@||ucoz.com^$ghide
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=shidurlive.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/945
+vortez.net##+js(nowoif)
+vortez.net##+js(acs, $, Adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/948
+! https://forums.lanik.us/viewtopic.php?p=140858#p140858
+platinmods.com##+js(aopr, adBlockDetected)
+platinmods.*##+js(nano-sib)
+
+! https://github.com/uBlockOrigin/uAssets/issues/949
+||whentai.com/*.gif$image
+
+! Common rules for TXXX network
+/\/[a-z]{4,}\/(?!holly7)(?!siksik7)[0-9a-z]{3,}\d\.\d{1,2}\.\d{1,2}\.[0-9a-f]{32}\.js$/$script,domain=555.porn|abxxx.com|aniporn.com|bigdick.tube|gaytxxx.com|hclips.com|hdzog.*|hotmovs.*|imzog.com|in-porn.com|inporn.com|javdaddy.com|manysex.com|porn555.com|pornclassic.tube|pornforrelax.com|porngo.tube|pornj.com|pornl.com|pornq.com|porntop.com|privatehomeclips.com|puporn.com|see.xxx|shemalez.com|sss.xxx|thegay.*|tubepornclassic.com|tuberel.com|txxx.*|txxxporn.tube|upornia.*|vjav.*|voyeurhit.*|vxxx.com
+/\.[a-z]{3,5}\/[0-9a-z]{8,12}\/[0-9a-z]{8,12}\.js$/$script,domain=555.porn|abxxx.com|aniporn.com|asiantv.fun|blackporn.tube|bdsmx.tube|bigdick.tube|gaytxxx.com|hclips.com|hdzog.*|hotmovs.*|imzog.com|in-porn.com|inporn.com|javdaddy.com|manysex.com|mrgay.tube|onlyporn.tube|porn555.com|pornclassic.tube|pornforrelax.com|porngo.tube|pornhits.com|pornj.com|pornl.com|pornq.com|porntop.com|pornzog.com|privatehomeclips.com|puporn.com|see.xxx|senzuri.tube|sextu.com|shemalez.com|sss.xxx|teenorgy.video|thegay.*|tubepornclassic.com|tuberel.com|txxx.*|txxxporn.tube|upornia.*|vjav.*|voyeurhit.*|vxxx.com|xmilf.com
+/assets/jwplayer-*/vast.js$script,1p
+! https://github.com/uBlockOrigin/uAssets/issues/953
+txxx.*##+js(acs, setTimeout, hommy.mutation.mutation)
+txxx.*##+js(aopr, jwplayer.utils.Timer)
+txxx.*##.content.page.page-video .video-content > div[class] > div > div[class] > div[class][style^="background-image:"]:style(background-image: none !important;)
+txxx.*##div[style="display:flex !important"] > div
+txxx.*##.page-video > div.video-videos-slider ~ div[class]:matches-css(justify-content: center)
+txxx.*##.video-videos-slider
+txxx.*##.video-content > div + div:last-child
+txxx.*##.video-content > div:first-child > div[class]:has(> div > a[href="#"])
+txxx.*##.videos-tube-friends
+txxx.*##span:only-child:has-text(/^AD$/):upward(2)
+txxx.*##.suggestion
+txxx.*##.index-page > .wrapper > .row + div[class]
+*$frame,3p,denyallow=google.com|gstatic.com,domain=txxx.*
+*$popunder,3p,domain=txxx.*
+! https://github.com/uBlockOrigin/uAssets/issues/956
+voyeurhit.*##+js(acs, adver)
+voyeurhit.*##.content > div > .container + div
+voyeurhit.*##.video-page__content > div.left + div[class]:last-child
+voyeurhit.*##.video-page__underplayer > div[class]:first-child > div[class]
+voyeurhit.*##.video-related + div[class] > div[class]:only-child
+voyeurhit.*##div[style="display:flex !important"] > div
+voyeurhit.*##.video-tube-friends + div[class]
+! https://github.com/uBlockOrigin/uAssets/issues/957
+! https://github.com/uBlockOrigin/uAssets/issues/20968#issuecomment-1833320642
+upornia.*##+js(acs, adver)
+upornia.com##+js(rmnt, script, /popunder|isAdBlock|admvn.src/i)
+upornia.com##h5:has-text(Advertisement)
+upornia.com##section:not(:empty)
+upornia.com##.underplayer:style(min-height: initial !important;)
+upornia.com##.video-page__content > .right
+upornia.*##div[style="display:flex !important"] > div
+upornia.*##.intwo__img
+upornia.*##.video-content > div[class]:has(> div.text > a[href="#"])
+upornia.*##.videoplayer-wrapper + div > div[class]:only-child
+upornia.*##.video-ad-videos + div.aa_label
+upornia.*##div[class$="related"] + div.aa_label
+upornia.*##.video-videos-slider
+upornia.*##.aa_label + div:not([class])
+upornia.*##.video-videos-slider + .aa_label
+pornzog.com###ntv_a
+pornzog.com##.video-ntv-list
+! https://github.com/uBlockOrigin/uAssets/issues/2074
+hotmovs.*##+js(acs, adver)
+hotmovs.com##.partners-wrap
+hotmovs.*##.block_label--last + div[class]
+hotmovs.*##.pagination + div.block_label--last
+hotmovs.*##.underplayer__info > div[class]:first-child
+hotmovs.*##.video-page__content > div.left + div[class]:last-child
+hotmovs.*##div[style="display:flex !important"] > div
+hotmovs.*##.video-page > div.block_label.mt-15 + div[class]
+hotmovs.*##.videos-tube-friends
+! https://github.com/uBlockOrigin/uAssets/issues/959
+*$script,3p,denyallow=gstatic.com,domain=vjav.*
+vjav.*##.hv-block
+vjav.*##div[style="display:flex !important"] > div
+vjav.*##.album-page > div.video-page__wrapper + div[class]
+vjav.*##.content > div:not([class]) > div.video-page + div[class]
+vjav.*##.video-page__content > div.left + div[class]:last-child
+vjav.*##.video-page__player + div[class] > div[class]
+vjav.*##.video-tube-friends
+vjav.*##.video-tube-friends + div[class]:not(.pagination)
+vjav.*##.index-page > div.container + div[class]
+vjav.*##.jw-reset.jw-atitle.nopop
+! pornq .com popups
+||bitupsss.com^$all
+! pornj .com popups
+pornj.com##+js(aopr, open)
+pornj.com##.vda-item
+! pornl.com
+pornl.com##+js(aopr, open)
+pornl.com##.adv-list--footer
+pornl.com##.vda-item
+! porn555 .com popups
+porn555.com##.vda-x2
+! see .xxx
+||see.xxx/nr.js
+see.xxx##.vda-item
+! https://github.com/easylist/easylist/pull/6720
+porntop.com###inv_pause
+porntop.com##.ip > .btn-close
+! https://github.com/easylist/easylist/issues/7918
+! https://github.com/AdguardTeam/AdguardFilters/issues/131194
+thegay.*##+js(acs, adver)
+thegay.*##.content > div:not([class]) > .wrapper ~ div[class]:not(.wrapper)
+thegay.*##.underplayer__info > div[class]:first-child
+thegay.*##.video-page__content > div.left + div[class]:last-child
+thegay.*##div[style="display:flex !important"] > div
+||thegay.com^$csp=default-src 'self' *.ahcdn.com fonts.gstatic.com fonts.googleapis.com https://thegay.com https://tn.thegay.com 'unsafe-inline' 'unsafe-eval' data: blob:,badfilter
+! privatehomeclips.com
+privatehomeclips.com##span[style="display:flex !important"] > div:first-child
+privatehomeclips.com##.partners-wrap
+privatehomeclips.com##.video-page__content > .right
+privatehomeclips.com##.video-page__item
+privatehomeclips.com##.content > div > .wrapper + div[class]:not(.wrapper)
+privatehomeclips.com##.underplayer > div[class]:not([class*="_"]) > div[class]
+privatehomeclips.com##.partners-wrap + div[class]
+privatehomeclips.com##.undp--karp
+privatehomeclips.com##section[style="padding: 20px;"]
+! vxxx.com
+vxxx.com##+js(acs, ACtMan)
+vxxx.com###player-1 > div[style="display:flex !important"]
+vxxx.com##.video-page-content + div[class]
+vxxx.com##.video-page-content-left + div[class]:last-child
+vxxx.com##.videoplayer + div > div[class]
+vxxx.com##.wrapper-margin + div[class]:last-child
+! pornhits.com popup/under
+pornhits.com##+js(acs, ACtMan)
+pornhits.com###s-suggesters
+pornhits.com##.ft
+pornhits.com##.index-ntv
+pornhits.com##.jwplayer > span
+pornhits.com##.sponsor
+pornhits.com##.right
+||pornhits.com/magic/
+||red12flyw2.site^$3p
+! inporn.com ads/PH
+in-porn.com,inporn.com##.video-page__content > div.right
+in-porn.com,inporn.com##.video-info > section
+in-porn.com,inporn.com##.video__wrapper > div.wrapper.headline
+in-porn.com,inporn.com##.wrapper > article
+in-porn.com,inporn.com##section[is-footer-banners]
+in-porn.com,inporn.com###in_v
+in-porn.com,inporn.com##.btn-close
+in-porn.com,inporn.com##[style="display:flex !important"] > div > div:not(:last-child)
+in-porn.com,inporn.com##.jw-channel-btn.nopop
+in-porn.com,inporn.com##.wrapper[style="min-width: 0px;"] > section[style="padding: 12px;"]
+! senzuri.tube redirect, ad
+senzuri.tube##+js(acs, adver)
+senzuri.tube##.video-page + div[class]:not(.container)
+senzuri.tube##.video-page__content > div.left + div[class]:last-child
+senzuri.tube##.index-page > div.container + div[class]
+senzuri.tube##.content-block + .video-tube-friends + div[class]
+senzuri.tube##div[style="display:flex !important"] > div
+! https://github.com/AdguardTeam/AdguardFilters/issues/130607
+txxxporn.tube##+js(acs, adver)
+txxxporn.tube##div[style="display:flex !important"] > div
+txxxporn.tube##.video-content > div:not(:has(.pplayer))
+txxxporn.tube##.video-content > div[class]:first-child > div[class]:has(> div > a[href="#"])
+txxxporn.tube##span:only-child:has-text(/^AD$/):upward(2)
+! https://www.reddit.com/r/uBlockOrigin/comments/14zn1mz/filter_blocking_related_videos_on_txxxporntube/
+txxxporn.tube##.suggestion
+txxxporn.tube##.video-videos-slider
+txxxporn.tube##.page-video > div[class]:has(> div[class]:not(.video-related) > div[id][class]:empty)
+! https://github.com/uBlockOrigin/uAssets/issues/4234
+hclips.com##+js(acs, adver)
+hclips.com##.wrapper + .partners-wrap + div[class]
+hclips.com##.underplayer > section
+hclips.com##.video__wrapper > section[style]
+hclips.com##span[style="display:flex !important"] > div:first-child
+hclips.com##.video-page__content > div.left + div:not([class])
+*$frame,3p,denyallow=google.com|gstatic.com,domain=hclips.com
+! https://github.com/uBlockOrigin/uAssets/issues/8391
+! https://github.com/uBlockOrigin/uAssets/issues/1114
+hdzog.*##+js(acs, adver)
+hdzog.*##.content > div:not([class]) > div.content-block ~ div[class]:not(.content-block)
+hdzog.*##.suggestions
+hdzog.*##.partners-wrap
+hdzog.*##.pagination + div[class]:last-of-type
+hdzog.*##.video-page__left > div[class]:last-of-type
+hdzog.*##div[style="display:flex !important"] > div
+! https://www.reddit.com/r/uBlockOrigin/comments/10abahw/
+hdzog.*##.video-page__content > div:not([class*="video"])
+hdzog.*##.video-page__row > div:not([class*="video"])
+! https://tuberel.com/
+tuberel.com##+js(acs, adver)
+! https://github.com/AdguardTeam/AdguardFilters/issues/156409
+sextu.com##.afs_ads + span[style] > div > div:not(:last-child)
+sextu.com##.right
+sextu.com##.thumbs__banner
+sextu.com##.wrapper > article
+sextu.com##.wrapper > section
+sextu.com##div[id^="underplayer_"]
+! https://github.com/AdguardTeam/AdguardFilters/issues/159495
+manysex.com##.suggestion-wrapper
+manysex.com##.right
+manysex.com##.video-page__related + .headline
+manysex.com##.videoplayer + section
+manysex.com##section[style="padding: 12px;"]
+manysex.com##span[style="display:flex !important"] > div > div:not(:last-child)
+! https://github.com/AdguardTeam/AdguardFilters/issues/169195
+abxxx.com##.video-page__content > div.left > section
+abxxx.com##.video__wrapper > div.wrapper > section
+abxxx.com##.video__wrapper > div.wrapper.headline
+! https://github.com/AdguardTeam/AdguardFilters/issues/169177
+gaytxxx.com##.index-page > div.wrapper > div.row + div[class]
+gaytxxx.com##.jw-reset.jw-atitle.nopop
+gaytxxx.com##.suggestion + div[class]:has(> .video-related) + div[class]
+gaytxxx.com##.undp
+gaytxxx.com##.video-content > div[class]:first-child > div[class]:has(> div[class] > div[class] > div[id])
+gaytxxx.com##.video-content > div[class] + div[class]:last-child
+gaytxxx.com##.wrapper + div[style="margin-top: 0px;"]
+gaytxxx.com##div[style="display:flex !important"] > div
+! https://github.com/uBlockOrigin/uAssets/issues/1798
+shemalez.com##+js(acs, adver)
+shemalez.com##+js(aeld, , window.open)
+shemalez.com##+js(nosiif, document.readyState)
+shemalez.com##.video-page__content > .left + div[class]
+shemalez.com##.video-tube-friends + div[class]
+shemalez.com##.content > div > .wrapper + div[class]
+shemalez.com##div[style="display:flex !important"] > div
+
+! https://github.com/uBlockOrigin/uAssets/issues/966
+mcfucker.com##+js(aopw, t4PP)
+sponsor=$domain=mcfucker.com
+mcfucker.com##.vadv
+mcfucker.com##.c2p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10283
+imgprime.com##+js(ra, href|target, a[href="https://imgprime.com/view.php"][target="_blank"], complete)
+||imgprime.com/*.php$script
+imgprime.com##.overlayBg
+
+! https://github.com/uBlockOrigin/uAssets/issues/969
+imgshots.com##+js(popads.net)
+imgshots.com###introOverlayBg
+
+! https://github.com/uBlockOrigin/uAssets/issues/1005
+porn.com##+js(nowoif)
+porn.com##+js(set, String.prototype.charAt, trueFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2042
+bdupload.*##+js(nano-stb)
+bdupload.*##[href*="/dloadbutton.php"]
+||bdupload.*/sw.js$script,1p
+||socialbars-web5.com/*/notifications/$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/976
+taroot-rangi.com##+js(aopw, sc_adv_out)
+
+! https://github.com/uBlockOrigin/uAssets/issues/980
+! https://github.com/AdguardTeam/AdguardFilters/issues/78763
+pornwatchers.com##+js(aopr, ExoLoader)
+pornwatchers.com##+js(aopr, document.dispatchEvent)
+pornwatchers.com##.aside-block
+pornwatchers.com##.fluid_nonLinear_bottom
+pornwatchers.com##.stage-promo
+##.aff-content-col
+##.aff-inner-col
+##.aff-item-list
+||pornwatchers.com/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/983
+sotemnovinhas.com##+js(nofab)
+||sotemnovinhas.com/*.gif$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/5421
+ondemandkorea.com##+js(aopr, pbjs.libLoaded)
+ondemandkorea.com##.banner_728x90
+ondemandkorea.com##.floatBanner
+ondemandkorea.com##.player_overlay.banner
+@@||ondemandkorea.com^$ghide
+||ondemandkorea.com/*/*sponsor*300x250.jpg$image,redirect=32x32.png
+||google-analytics.com/collect$image,redirect=1x1.gif,domain=ondemandkorea.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/978
+katestube.com##+js(nostif, '0x)
+katestube.com##+js(nowoif)
+katestube.com##.bottom-banners
+katestube.com##.advertising
+katestube.com###under-video
+
+! https://github.com/uBlockOrigin/uAssets/issues/979
+gotporn.com##+js(aeld, , open)
+gotporn.com##+js(aopr, ExoLoader)
+
+! https://github.com/easylist/easylist/issues/11901
+! https://github.com/AdguardTeam/AdguardFilters/issues/129925
+! https://github.com/AdguardTeam/AdguardFilters/issues/130267
+! https://github.com/AdguardTeam/AdguardFilters/issues/131192
+bdsmx.tube##+js(aopr, mz)
+bdsmx.tube##.btn-close
+bdsmx.tube##article
+blackporn.tube,xmilf.com##.right
+blackporn.tube,mrgay.tube##.video-info > section
+blackporn.tube,mrgay.tube,xmilf.com##.wrapper > section
+blackporn.tube,mrgay.tube,xmilf.com##article > section
+bdsmx.tube,blackporn.tube,mrgay.tube,xmilf.com##[is-footer-banners]
+bdsmx.tube,blackporn.tube,mrgay.tube,xmilf.com##.headline.wrapper
+bdsmx.tube,blackporn.tube,mrgay.tube,xmilf.com##[style="display:flex !important"] > div > div:not(:last-child)
+mrgay.*##.right
+
+! https://github.com/uBlockOrigin/uAssets/issues/992
+||googlesyndication.com^$script,important,domain=mypapercraft.net
+mypapercraft.net##+js(nofab)
+mypapercraft.net##.ezoic-ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/985
+sintelevisor.com,tvpor-internet.com##+js(nowebrtc)
+||livesports.pw/adblock.js$script,1p,redirect=fuckadblock.js-3.2.0
+@@||sintelevisor.com^$ghide
+||sintelevisor.com/tv/asarasa.html$frame,1p
+sintelevisor.com###floatLayer
+
+! https://github.com/uBlockOrigin/uAssets/issues/993
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=supergames.com
+||adservice.google.com.*/adsid/integrator.js?domain=player.tubia.com$xhr,redirect=nooptext
+
+! https://github.com/uBlockOrigin/uAssets/issues/801
+! https://github.com/uBlockOrigin/uAssets/issues/4084
+tune.pk###tpk-revenue-sharing-program
+tune.pk##+js(set, ad_blocker, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5339
+europixhd.*,hdeuropix.*,topeuropix.*##+js(aopr, AaDetector)
+europixhd.*,hdeuropix.*,topeuropix.*##+js(aopr, LieDetector)
+europixhd.*,hdeuropix.*,topeuropix.*##+js(popads-dummy)
+europixhd.*,hdeuropix.*,hindipix.*,topeuropix.*##+js(disable-newtab-links)
+europixhd.*,topeuropix.*##+js(nowoif)
+topeuropix.*##+js(aeld, , _0x)
+||europixhd.net/js/propadbl_epxhd.js$script,1p
+europixhd.*,hdeuropix.*,topeuropix.*###MyImageId
+@@|blob:$domain=hdeuropix.cc
+europixhd.*,topeuropix.*##[id^="MyAdsId"]
+
+! https://forums.lanik.us/viewtopic.php?p=129417#p129417
+$script,domain=zdnet.fr,3p
+@@||ajax.googleapis.com^$script,domain=zdnet.fr
+
+! https://github.com/uBlockOrigin/uAssets/issues/1010
+pornxs.com##+js(acs, ExoLoader)
+pornxs.com##+js(aopr, _abb)
+||pornxs.com/*.php
+pornxs.com##[id^="div_theAd"]
+pornxs.com##[data-ad-index-parent]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1013
+||megayoungsex.com/func.js
+megayoungsex.com##.SAbnsBotBl
+megayoungsex.com##.SHVidBlockUndBn
+megayoungsex.com##.SHVidBlockR
+
+! https://github.com/uBlockOrigin/uAssets/issues/1014
+mangoporn.net##+js(acs, puShown, /doOpen|popundr/)
+mangoporn.net##+js(aopr, document.dispatchEvent)
+mangoporn.net##+js(aopw, pURL)
+mangoporn.net##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1020
+frprn.com##+js(nosiif, readyState)
+frprn.com##.spot
+frprn.com##.footer-spot
+
+! watchseries.unblocked.* popups
+watchseries.unblocked.*##+js(nowebrtc)
+vidlox.*##A[href$=".html"][rel="nofollow norefferer noopener"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1024
+@@||arkadiumhosted.com^$script,domain=arkadiumarena.com|games.baltimoresun.com|games.chicagotribune.com|games.dailypress.com|games.express.co.uk|games.mcall.com|games.nydailynews.com|games.orlandosentinel.com|games.sun-sentinel.com|puzzles.bestforpuzzles.com
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=arkadiumarena.com|games.baltimoresun.com|games.chicagotribune.com|games.dailypress.com|games.express.co.uk|games.mcall.com|games.nydailynews.com|games.orlandosentinel.com|games.sun-sentinel.com|juegos.elpais.com|puzzles.bestforpuzzles.com|games.startribune.com
+||arkadiumhosted.com/*/adsBlob/$xhr,domain=bestforpuzzles.com|charlotteobserver.com|independent.co.uk|miamiherald.com|standard.co.uk|word.tips
+##[class^="DisplayAd"]
+##.ark-ad-message
+##div[class*="displayAdRight"]
+! https://www.reddit.com/r/uBlockOrigin/comments/pmutke/
+! https://www.reddit.com/r/uBlockOrigin/comments/tp3gtr/how_to_get_rid_of_antiadblock_on_site_could_you/
+puzzles.standard.co.uk,puzzles.independent.co.uk,puzzles.bestforpuzzles.com,arkadiumarena.com,games.charlotteobserver.com,games.miamiherald.com,games.startribune.com,games.word.tips##+js(nano-sib, generalTimeLeft, *, 0.02)
+@@*$ghide,domain=games.startribune.com|games.charlotteobserver.com|games.miamiherald.com|games.word.tips|puzzles.bestforpuzzles.com|puzzles.independent.co.uk|puzzles.standard.co.uk
+puzzles.standard.co.uk,puzzles.independent.co.uk,puzzles.bestforpuzzles.com,games.charlotteobserver.com,games.miamiherald.com,games.startribune.com,games.word.tips##[class*="Ad"]
+
+@@*$ghide,domain=arcade.buzzrtv.com|arcade.lemonde.fr|arena.gamesforthebrain.com|bestpuzzlesandgames.com|cointiply.arkadiumarena.com|gamelab.com|games.abqjournal.com|games.amny.com|games.bellinghamherald.com|games.besthealthmag.ca|games.bnd.com|games.boston.com|games.bostonglobe.com|games.bradenton.com|games.centredaily.com|games.cnhinews.com|games.crosswordgiant.com|games.dallasnews.com|games.daytondailynews.com|games.denverpost.com|games.everythingzoomer.com|games.fresnobee.com|games.gameshownetwork.com|games.get.tv|games.greatergood.com|games.heraldonline.com|games.heraldsun.com|games.idahostatesman.com|games.insp.com|games.islandpacket.com|games.journal-news.com|games.kansas.com|games.kansascity.com|games.kentucky.com|games.lancasteronline.com|games.ledger-enquirer.com|games.macon.com|games.mercedsunstar.com|games.modbee.com|games.moviestvnetwork.com|games.myrtlebeachonline.com|games.nationalreview.com|games.newsobserver.com|games.parade.com|games.pressdemocrat.com|games.puzzlebaron.com|games.puzzler.com|games.puzzles.ca|games.qns.com|games.readersdigest.ca|games.sacbee.com|games.sanluisobispo.com|games.sixtyandme.com|games.sltrib.com|games.springfieldnewssun.com|games.star-telegram.com|games.sunherald.com|games.theadvocate.com|games.thenewstribune.com|games.theolympian.com|games.theportugalnews.com|games.thestar.com|games.thestate.com|games.tri-cityherald.com|games.triviatoday.com|games.usnews.com|games.wordgenius.com|games.wtop.com|jeux.meteocity.com|juegos.as.com|juegos.elnuevoherald.com|juegos.elpais.com|philly.arkadiumarena.com|play.dictionary.com|puzzles.centralmaine.com|puzzles.crosswordsolver.org|puzzles.nola.com|puzzles.pressherald.com|puzzles.sunjournal.com
+arcade.buzzrtv.com,arcade.lemonde.fr,arena.gamesforthebrain.com,bestpuzzlesandgames.com,cointiply.arkadiumarena.com,gamelab.com,games.abqjournal.com,games.ajc.com,games.amny.com,games.bellinghamherald.com,games.besthealthmag.ca,games.bnd.com,games.boston.com,games.bostonglobe.com,games.bradenton.com,games.centredaily.com,games.cnhinews.com,games.crosswordgiant.com,games.dallasnews.com,games.daytondailynews.com,games.denverpost.com,games.everythingzoomer.com,games.fresnobee.com,games.gameshownetwork.com,games.get.tv,games.greatergood.com,games.heraldonline.com,games.heraldsun.com,games.idahostatesman.com,games.insp.com,games.islandpacket.com,games.journal-news.com,games.kansas.com,games.kansascity.com,games.kentucky.com,games.lancasteronline.com,games.ledger-enquirer.com,games.macon.com,games.mercedsunstar.com,games.modbee.com,games.moviestvnetwork.com,games.myrtlebeachonline.com,games.nationalreview.com,games.newsobserver.com,games.parade.com,games.pressdemocrat.com,games.puzzlebaron.com,games.puzzler.com,games.puzzles.ca,games.qns.com,games.readersdigest.ca,games.sacbee.com,games.sanluisobispo.com,games.sixtyandme.com,games.sltrib.com,games.springfieldnewssun.com,games.star-telegram.com,games.sunherald.com,games.theadvocate.com,games.thenewstribune.com,games.theolympian.com,games.theportugalnews.com,games.thestar.com,games.thestate.com,games.tri-cityherald.com,games.triviatoday.com,games.usnews.com,games.vgwplay.com,games.wordgenius.com,games.wtop.com,jeux.meteocity.com,juegos.as.com,juegos.elnuevoherald.com,juegos.elpais.com,philly.arkadiumarena.com,play.dictionary.com,puzzles.centralmaine.com,puzzles.crosswordsolver.org,puzzles.nola.com,puzzles.pressherald.com,puzzles.sunjournal.com##+js(nano-sib)
+arcade.buzzrtv.com,arcade.lemonde.fr,arena.gamesforthebrain.com,bestpuzzlesandgames.com,cointiply.arkadiumarena.com,gamelab.com,games.abqjournal.com,games.ajc.com,games.amny.com,games.bellinghamherald.com,games.besthealthmag.ca,games.bnd.com,games.boston.com,games.bostonglobe.com,games.bradenton.com,games.centredaily.com,games.cnhinews.com,games.crosswordgiant.com,games.dallasnews.com,games.daytondailynews.com,games.denverpost.com,games.everythingzoomer.com,games.fresnobee.com,games.gameshownetwork.com,games.get.tv,games.greatergood.com,games.heraldonline.com,games.heraldsun.com,games.idahostatesman.com,games.insp.com,games.islandpacket.com,games.journal-news.com,games.kansas.com,games.kansascity.com,games.kentucky.com,games.lancasteronline.com,games.ledger-enquirer.com,games.macon.com,games.mercedsunstar.com,games.modbee.com,games.moviestvnetwork.com,games.myrtlebeachonline.com,games.nationalreview.com,games.newsobserver.com,games.parade.com,games.pressdemocrat.com,games.puzzlebaron.com,games.puzzler.com,games.puzzles.ca,games.qns.com,games.readersdigest.ca,games.sacbee.com,games.sanluisobispo.com,games.sixtyandme.com,games.sltrib.com,games.springfieldnewssun.com,games.star-telegram.com,games.sunherald.com,games.theadvocate.com,games.thenewstribune.com,games.theolympian.com,games.theportugalnews.com,games.thestar.com,games.thestate.com,games.tri-cityherald.com,games.triviatoday.com,games.usnews.com,games.wordgenius.com,games.wtop.com,jeux.meteocity.com,juegos.as.com,juegos.elnuevoherald.com,juegos.elpais.com,philly.arkadiumarena.com,play.dictionary.com,puzzles.centralmaine.com,puzzles.crosswordsolver.org,puzzles.nola.com,puzzles.pressherald.com,puzzles.sunjournal.com##[class^="DisplayAd__container"]
+*/advertisement/video/static/advantage.xml$xhr
+
+! https://www.reddit.com/r/uBlockOrigin/comments/7kg792/need_help_blocking_this_persistent_ad/
+nwanime.tv##+js(nowoif)
+nwanime.tv##.adf-float
+
+! https://github.com/uBlockOrigin/uAssets/commit/91f936dbaeaa681fab4d9259a818458db2200e74#commitcomment-26342002
+/all-for-adsense/*
+
+! https://github.com/uBlockOrigin/uAssets/issues/1045
+ah-me.com##+js(acs, $, serve)
+ah-me.com##+js(aopr, open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1046
+! https://github.com/uBlockOrigin/uAssets/issues/1052
+||hprofits.com^$domain=gogaytube.tv|shemaleporntube.tv
+gogaytube.tv,shemaleporntube.tv##.videojs-hero
+/iframe.php?spotID=
+
+! https://forums.lanik.us/viewtopic.php?p=129648#p129648
+@@||mdsrwdassets-a.akamaihd.net^$xhr,script,other,domain=telecinco.es|cuatro.com
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,domain=telecinco.es|cuatro.com
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=telecinco.es|cuatro.com
+@@||cuatro.com^$ghide
+@@||telecinco.es^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/1051
+! https://github.com/uBlockOrigin/uAssets/issues/2752
+! https://github.com/uBlockOrigin/uAssets/issues/1235
+! https://github.com/uBlockOrigin/uAssets/issues/2754
+! https://github.com/uBlockOrigin/uAssets/issues/3055
+ouo.*##+js(aopr, AaDetector)
+ouo.*##+js(nowebrtc)
+ouo.*##+js(nano-sib, stop())
+ouo.*##^script:has-text('shift')
+ouo.*##^script:has-text(\'shift\')
+ouo.*##[style*="width:300px"] > a[href][target="_blank"] > img
+||ouo.*/js/jbitly.js$script,1p
+||ouo.*/js/webpush.ma.js$script,1p
+||ouo.*/sw$script,1p
+*$script,redirect-rule=noopjs,domain=ouo.*
+||egnatius-ear.com^$script,domain=ouo.*
+ouo.*##[href^="https://dynamicadx.com/"]
+ouo.*##iframe:not([src])
+ouo.*##[id*="ScriptRoot"]
+ouo.*##.dlbtns
+ouo.press##.skip-container > .text-center > span[style="display: block;color: #aaa;font-size: 13px;padding-bottom: 2px;"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1057
+chooyomi.com##+js(nowoif)
+*$script,3p,denyallow=google.com|gstatic.com|recaptcha.net,domain=chooyomi.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4225#issuecomment-449619422
+! https://github.com/NanoMeow/QuickReports/issues/1048
+x1337x.*##[href*=".php"]
+1337x.*,x1337x.*,1337x.unblock2.xyz,1337x.unblocked.*,1337x.unblockit.*##ul > li:has-text(/‌/i)
+1337x.*,x1337x.*,1337x.unblock2.xyz,1337x.unblocked.*,1337x.unblockit.*##:xpath('//*[contains(text(),"Hide your IP")]/..')
+1337x.unblock2.xyz,1337x.unblockit.*##+js(aopr, btoa)
+1337x.unblock2.xyz,1337x.unblocked.*,1337x.unblockit.*##+js(aopr, open)
+1337x.unblock2.xyz##+js(aopr, Math.floor)
+1337x.unblocked.*###lb-banner
+1337x.*,1337x.unblockit.*##a[href$="Promo.php"] > img
+||topblockchainsolutions.*^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/1063
+xiaopan.co##+js(aopw, AdBlockDetectorWorkaround)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1064
+shooshtime.com##+js(nowoif)
+||monad.network^$script,domain=shooshtime.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1663
+seattletimes.com##+js(nostif, apstagLOADED)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1068
+noticias.gospelmais.com.br##+js(set, blockAdBlock, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1070
+songs.*##+js(aopr, AaDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1076
+mel.fm##+js(nofab)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1083
+@@||spiele.heise.de^$ghide
+heise.de###topBannerContainer
+heise.de##.keygameBannerContainer
+heise.de##.ad-microsites
+heise.de##.tipps-content-ad
+heise.de##.hbs-ad
+heise.de##.stage-advertising
+heise.de##.ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/1101
+dailygeekshow.com##+js(aopr, jQuery.hello)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1093
+! https://www.reddit.com/r/uBlockOrigin/comments/otw7nq/adblock_detected/
+@@||seirsanduk.*^$ghide
+@@||seirsanduk.*/$script,1p
+seirsanduk.*##+js(popads.net)
+seirsanduk.*##[href^="https://www.bybit.com/"]
+seirsanduk.*##ins.adsbygoogle
+seirsanduk.*##[href^="//bgtop.net/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1099
+! https://github.com/uBlockOrigin/uAssets/issues/21880
+yiv.com##+js(nostif, /Adb|moneyDetect/)
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=yiv.com,redirect-rule=google-ima.js
+yiv.com#@##adsContainer
+yiv.com###LeftAdDiv
+yiv.com###game_middle_ad
+yiv.com###RightAdTopDiv
+yiv.com###RightAdMiddleDiv
+
+! https://github.com/uBlockOrigin/uAssets/issues/1090
+jacquieetmicheltv.net##+js(set, is_adblocked, false)
+jacquieetmicheltv.net##+js(set, showPopunder, noopFunc)
+jacquieetmicheltv.net##.espace-cam
+||easysexe.com^$3p
+||tawenda-tech.net^$frame,3p
+||rencontres-coquines.jacquieetmichel.net^
+
+! https://github.com/uBlockOrigin/uAssets/issues/1087
+gotgayporn.com##+js(aopr, decodeURI)
+||gotgayporn.com/sw.js$script,1p
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/771
+rue89lyon.fr##+js(aopr, isShowingAd)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=38298
+kitguru.net##body:style(background-image:none !important)
+||overclockers.co.uk^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/7062
+! https://github.com/uBlockOrigin/uAssets/issues/16657
+viki.com##+js(set, VikiPlayer.prototype.pingAbFactor, noopFunc)
+viki.com##+js(set, player.options.disableAds, true)
+*expire=$media,redirect=noopmp3-0.1s,domain=viki.com
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=viki.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1115
+realgfporn.com##+js(aopr, ExoLoader)
+realgfporn.com##+js(aopw, __htapop)
+realgfporn.com##+js(popads-dummy)
+realgfporn.com##+js(aopr, ExoLoader.serve)
+realgfporn.com##+js(aeld, click, exopop)
+realgfporn.com##+js(aeld, /^(?:load|click)$/, popMagic)
+realgfporn.com##+js(acs, document.createElement, 'script')
+realgfporn.com###fixedBanner
+realgfporn.com##.overlay-banner
+realgfporn.com##.video-overlay
+realgfporn.com##.banner-video-right
+||realgfporn.com/sw.js$script,1p
+*$popunder,domain=realgfporn.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1122
+picturelol.com###rang2
+picturelol.com##+js(aopr, ExoLoader)
+picturelol.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1123
+imgspice.com##+js(nowoif)
+imgspice.com##+js(aopr, ExoLoader)
+imgspice.com##+js(aeld, mousedown, popundrInit)
+imgspice.com###widepage
+imgspice.com###interdiv
+
+! https://github.com/uBlockOrigin/uAssets/issues/1128
+mitly.us##+js(aopr, adBlockDetected)
+mitly.us##+js(aopr, open)
+mitly.us##+js(aopw, adcashMacros)
+mitly.us##+js(aopw, atOptions)
+mitly.us##+js(set, blurred, false)
+@@||mitly.us^$ghide
+*$script,3p,denyallow=google.com|gstatic.com|recaptcha.net,domain=mitly.us
+||googlesyndication.com/pagead/$script,redirect=noopjs,domain=mitly.us
+mitly.us##ins.adsbygoogle
+mitly.us##[href^="http://deloplen.com/"]
+
+! https://forums.lanik.us/viewtopic.php?p=138269#p138269
+! https://github.com/AdguardTeam/AdguardFilters/issues/80460
+watch-series.*,watchseries.*##+js(acs, Math, XMLHttpRequest)
+watch-series.*,watchseries.*##+js(nowebrtc)
+watch-series.*,watchseries.*##+js(nowoif)
+watch-series.*,watchseries.*##+js(set, console.clear, trueFunc)
+watch-series.*,watchseries.*##.freeEpisode
+watch-series.*,watchseries.*##.sp-leader
+watch-series.*,watchseries.*##.shd_button
+watch-series.*,watchseries.*##.sp-leader-bottom
+watch-series.*,watchseries.*##.category-item-ad
+watch-series.*,watchseries.*###related
+watch-series.*,watchseries.*###rotating-item-wrapper
+watch-series.*,watchseries.*##div.block-left-home-inside[style^="height:252"]
+@@||watchseries.*^$ghide
+watchseries.*##.modal
+watchseries.*##.show.fade.modal-backdrop
+||watch-series.*/sw.js$script,1p
+! https://github.com/uBlockOrigin/uAssets/issues/5723
+||watchseries.*/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/1132
+fetishshrine.com##+js(aopr, decodeURI)
+fetishshrine.com##.adv-aside
+
+! https://github.com/uBlockOrigin/uAssets/issues/1133
+sleazyneasy.com##+js(aopr, decodeURI)
+sleazyneasy.com##+js(set, flashvars.adv_pre_vast, '')
+sleazyneasy.com##+js(set, flashvars.adv_pre_vast_alt, '')
+sleazyneasy.com##+js(set, x_width, 1)
+/contents/images-banners/*
+sleazyneasy.com##.container-aside > .item
+sleazyneasy.com##.remove-spots
+
+! https://github.com/uBlockOrigin/uAssets/issues/1131
+vikiporn.com##+js(aeld, getexoloader)
+vikiporn.com##+js(aopr, decodeURI)
+
+! https://github.com/NanoMeow/QuickReports/issues/2426
+@@||anime-loads.org^$ghide
+anime-loads.org###leaderwidget
+anime-loads.org##.skycontent
+/static/js/amvn.js
+
+! https://github.com/reek/anti-adblock-killer/issues/3825
+! https://www.reddit.com/r/uBlockOrigin/comments/l0vsp6/globalrph_blurs_the_webpage_upon_detecting_adblock/
+globalrph.com##+js(nostif, disableDeveloper)
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/755
+onlinemschool.com##+js(aopr, oms.ads_detect)
+onlinemschool.com###oms_left_block
+
+! https://github.com/uBlockOrigin/uAssets/issues/1144
+e-glossa.it##+js(nostif, Blocco, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1151
+pornsocket.com##+js(set, _site_ads_ns, true)
+||adspaces.ero-advertising.com/adspace/*$script,redirect=noopjs,domain=pornsocket.com
+
+! http://forum.chip.de/rund-um-online/werbeterror-spendenaufruf-pic-upload-de-microsoft-alarm-u-google-benachr-1879678.html
+pic-upload.de##+js(aopw, Fingerprint2)
+
+! https://twitter.com/tj_fogarty/status/948169965546430464
+limerickleader.ie###abr_purchase_div
+
+! https://github.com/uBlockOrigin/uAssets/issues/3761
+pornhd.com##+js(aopr, hasAdBlock)
+pornhd.com,pornhdin.com##+js(aopr, ExoLoader.serve)
+pornhd.com##+js(popads-dummy)
+pornhd.com##+js(nowoif)
+pornhd.com##+js(aeld, , pop)
+pornhdin.com##+js(aopr, open)
+||syndication.exoclick.com/ads-iframe-display.php$script,redirect=noopjs,domain=pornhd.com
+pornhd.com##.phdZone
+pornhd.com##.overlay-content
+pornhd.com##.video-list-corner-ad
+##.inplayer-ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/2375
+! https://github.com/uBlockOrigin/uAssets/issues/18091
+luxuretv.com##+js(acs, $, ltvModal)
+luxuretv.com##iframe[data-src^="https://networkmanag.com/"]
+luxuretv.com##+js(set, luxuretv.config, '')
+luxuretv.com##+js(aopr, popns)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1161
+! https://github.com/uBlockOrigin/uAssets/issues/19368
+*$script,3p,denyallow=gstatic.com|polyfill.io,domain=sexu.com
+||sexu.com^$frame,1p
+sexu.com##.footerBanners
+sexu.com###jw_video_popup
+sexu.com##.container > .info
+sexu.com##.player-related
+sexu.com##.player-block__line
+sexu.com##.title--sm
+sexu.com##.player-block__square
+
+! https://github.com/uBlockOrigin/uAssets/issues/3616
+pussyspace.*##+js(aopr, open)
+pussyspace.com,pussyspace.net##+js(aost, navigator.userAgent, exopop.browser.is)
+pussyspace.com,pussyspace.net##+js(aeld, load, exoJsPop101)
+pussyspace.com,pussyspace.net##+js(norafif, exoframe)
+pussyspace.com,pussyspace.net##+js(aeld, /^loadex/)
+pussyspace.com,pussyspace.net##a[href$="/live/meet-and-fuck/"]
+pussyspace.com,pussyspace.net##a:matches-attr(/^on/=/event/)
+pussyspace.com,pussyspace.net##a:matches-attr(/-h?ref/)
+pussyspace.com,pussyspace.net###alphabet, #channels, #divx-container, #hmenu, #inform, #nowlooking, #playerCamBox, #playerMenu, #qcat, #showPlayer, #tabel_tagslist, #video_content, #web_cam, .BaseRoomContents, .buttons, .carouselTopScroll, .carusel-keys-box-ps, .footerdesc, .in_top, .load_more_rel, .mainBoxTitle, .pagIno, .playerContent100pr, .relatedVideo, .right-160px, .videos-related, footer, header, [href^="/webcams.php"]:others()
+||pussyspace.$image
+||pussyspace.*/live/meet-and-fuck/$all
+@@||www.pussyspace.com/favicon.ico|
+@@||www.pussyspace.com/ajax/contact/exo-logo.png|
+@@||www.pussyspace.com/class/captcha/captcha.php|
+@@||www.pussyspace.com/class/captcha/arrow.png|
+@@||www.pussyspace.com/player/loading.gif|
+@@||www.pussyspace.com/style/img/abuse.email.png#|
+@@||www.pussyspace.com/style/img/navbg.hover.png|
+@@||www.pussyspace.com/upload/no_img.jpg|
+@@||www.pussyspace.net/favicon.ico|
+@@||www.pussyspace.net/ajax/contact/exo-logo.png|
+@@||www.pussyspace.net/class/captcha/captcha.php|
+@@||www.pussyspace.net/class/captcha/arrow.png|
+@@||www.pussyspace.net/player/loading.gif|
+@@||www.pussyspace.net/style/img/abuse.email.png#|
+@@||www.pussyspace.net/style/img/navbg.hover.png|
+@@||www.pussyspace.net/upload/no_img.jpg|
+@@||st.pussyspace.com/player/playBTN.png|
+@@||st.pussyspace.com/favicon.ico|
+@@||st.pussyspace.com/style/03/img/bg.png|
+@@||st.pussyspace.com/style/03/img/dropmenudownarrow.png|
+@@||st.pussyspace.com/style/03/img/navbg.hover.png|
+@@||st.pussyspace.com/style/03/img/navbg.png|
+@@||st.pussyspace.com/style/03/img/pinkbg.gif|
+@@||st.pussyspace.com/style/03/img/speed-dials.png|
+@@||st.pussyspace.com/style/03/img/x-sprite.png|
+@@||st.pussyspace.com/style/10/img/logo.png|
+@@||st.pussyspace.com/style/10/img/logo_mobile.png|
+@@||st.pussyspace.com/style/webcam.jpg|
+@@||st.pussyspace.net/player/playBTN.png|
+@@||st.pussyspace.net/favicon.ico|
+@@||st.pussyspace.net/style/03/img/bg.png|
+@@||st.pussyspace.net/style/03/img/dropmenudownarrow.png|
+@@||st.pussyspace.net/style/03/img/navbg.hover.png|
+@@||st.pussyspace.net/style/03/img/navbg.png|
+@@||st.pussyspace.net/style/03/img/pinkbg.gif|
+@@||st.pussyspace.net/style/03/img/speed-dials.png|
+@@||st.pussyspace.net/style/03/img/x-sprite.png|
+@@||st.pussyspace.net/style/10/img/logo.png|
+@@||st.pussyspace.net/style/10/img/logo_mobile.png|
+@@||st.pussyspace.net/style/webcam.jpg|
+@@/^https:\/\/i\.pussyspace\.(?:com|net)\/(?:yip?|xvs)\/videos\/20\d{4}\/\d{2}\/\d{9}\/(?:original|thumbs_\d{2})\/\d{1,2}(?:\(m=e[0-9A-Za-z]{5,7}aaaa\)\(mh=[-_0-9A-Za-z]{16}\))?\.jpg$/$image,1p,domain=pussyspace.*
+@@/^https:\/\/i\.pussyspace\.(?:com|net)\/(?:yip?|xvs)\/videos\/thumbs169l\/[0-9a-f]{2}\/[0-9a-f]{2}\/[0-9a-f]{2}\/[0-9a-f]{32}(?:-\d)?\/[0-9a-f]{32}\.\d{1,2}\.jpg$/$image,1p,domain=pussyspace.*
+@@/^https:\/\/i\.pussyspace\.(?:com|net)\/(?:yip?|xvs)\/videos\/thumbs_5\/\d{1,2}(?:\(m=e[0-9A-Za-z]{5,7}aaaa\)\(mh=[-_0-9A-Za-z]{16}\))?\.jpg$/$image,1p,domain=pussyspace.*
+@@/^https:\/\/i\.pussyspace\.(?:com|net)\/jz\/(?:[0-9a-f]\/){3,5}[0-9a-f]{42}-?(?:\d{2,3}|(?:(?:\d{3,4}-){3}h264)?\.(?:mp4-\d{1,2}|flv-\d))\.jpg$/$image,1p,domain=pussyspace.*
+@@/^https:\/\/i\.pussyspace\.(?:com|net)\/sb\/t\/\d{6,8}\/\d\/\d\/w:300\/t\d{1,2}-enh\/(?:[0-9a-z]+-)*[0-9a-z]+\.jpg$/$image,1p,domain=pussyspace.*
+@@/^https:\/\/st\.pussyspace\.(?:com|net)\/upload\/cat\.image\/[_3a-z]{2,16}\.jpg$/$image,1p,domain=pussyspace.*
+@@/^https:\/\/st\.pussyspace\.(?:com|net)\/upload\/poster_img_url\/par\/c3Rhci9[%0-9A-Za-z]{16,32}&size_width\/par\/160\/l\.jpg$/$image,1p,domain=pussyspace.*
+||pussyspace.*/js/all.js?v=gitcache_gulp_
+||pussyspace.*/lazyload.im
+/click.php?$popup,3p,domain=pussyspace.com|pussyspace.net
+*$image,3p,denyallow=cdn77.org|fpbns.net|others-cdn.com|rncdn7.com|sb-cd.com|stream.highwebmedia.com|upsiloncdn.net|xvideos-cdn.com|youjizz.com|ypncdn.com,domain=pussyspace.com|pussyspace.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/1172
+java-forum.org##+js(nostif, nextFunction, 2000)
+java-forum.org###messageList > li.message:has-text(Anzeige)
+
+! https://github.com/uBlockOrigin/uAssets/commit/fd983e43ba12355945f0f0bc836006df299d1106#commitcomment-32736940
+||propbigo.com/*.xml$xhr,redirect=nooptext
+||doathair.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/1179
+bigtitsxxxsex.com##+js(aopr, ALoader)
+bigtitsxxxsex.com##+js(nowoif)
+bigtitsxxxsex.com##+js(noeval)
+bigtitsxxxsex.com##.bano1
+
+! https://github.com/uBlockOrigin/uAssets/issues/3768
+||adn.porndig.com^
+||videos.porndig.com/js/videojs.logobrand.js
+porndig.com##+js(set, Object.prototype.AdOverlay, noopFunc)
+porndig.com##+js(set, tkn_popunder, null)
+||porndig.com/sw$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/1181
+! https://github.com/uBlockOrigin/uAssets/issues/4654
+@@||mamahd.*^$ghide
+||mamahd.*/hd.php$frame
+
+! https://github.com/uBlockOrigin/uAssets/issues/1183
+! https://github.com/uBlockOrigin/uAssets/issues/9611
+xvideos.com,xvideos2.com##+js(nowoif)
+xvideos.com,xvideos2.com,xnxx.com##.banner-game
+xvideos.com,xvideos2.com##.videoad-title
+! https://github.com/AdguardTeam/AdguardFilters/issues/96000
+xvideos.*###video-ad + div[class]
+xvideos.com##.thumb-ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/1185
+perfectgirls.*,perfektdamen.*##+js(acs, ExoLoader)
+perfectgirls.*,perfektdamen.*##+js(aopw, ads_priv)
+perfectgirls.*,perfektdamen.*##+js(noeval)
+perfectgirls.*,perfektdamen.*##.advertisement
+perfectgirls.*,perfektdamen.*##.promo
+
+! https://github.com/uBlockOrigin/uAssets/issues/1182
+area51.porn##+js(aopr, document.dispatchEvent)
+area51.porn##.under-video-banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/1186
+hentaipulse.com##+js(acs, ExoLoader)
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/789
+freewebscript.com##+js(nostif, documentElement.classList.add, 400)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1189
+1fichier.com##+js(nowebrtc)
+1fichier.com##+js(nano-stb, dlw, 40000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1191
+vivud.com##+js(aopr, ALoader)
+vivud.com##+js(acs, ExoLoader)
+vivud.com##+js(nowoif)
+vivud.com##+js(aopr, LieDetector)
+||vivud.com/sw$script,1p
+vivud.com##+js(aopr, decodeURI)
+vivud.com##+js(aopr, Notification)
+*.mp4$media,redirect=noopmp3-0.1s,domain=vivud.com
+@@/key=$media,domain=vivud.com
+||utubeworkers.com/Campaigns/$script,xhr,domain=vivud.com
+vivud.com##.adv
+##.inplayer_banners
+##.in_stream_banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/1202
+||googlesyndication.com^$script,important,domain=incredibox.com
+@@||incredibox.com/ad/*$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/1196
+webcheats.com.br##+js(set, can_run_ads, true)
+webcheats.com.br##+js(nostif, test, 0)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1167
+! https://github.com/uBlockOrigin/uAssets/issues/1199
+! https://github.com/uBlockOrigin/uAssets/issues/1200
+! https://github.com/uBlockOrigin/uAssets/issues/1201
+ceesty.com,gestyy.com##+js(set, adsBlockerDetector, noopFunc)
+@@||ceesty.com^$ghide
+@@||corneey.com^$ghide
+@@||destyy.com^$ghide
+@@||festyy.com^$ghide
+@@||gestyy.com^$ghide
+@@||sh.st^$ghide
+ceesty.com,corneey.com,destyy.com,festyy.com,gestyy.com,sh.st##.skip-advert
+ceesty.com,corneey.com,destyy.com,festyy.com,gestyy.com,sh.st##+js(set, globalThis, null)
+*$3p,xhr,domain=ceesty.com|corneey.com|destyy.com|festyy.com|gestyy.com
+ceesty.com,corneey.com,destyy.com,festyy.com,gestyy.com##+js(aopr, NREUM)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1209
+imgcloud.pw##+js(popads-dummy)
+*$script,3p,denyallow=fastly.net|google.com|googleapis.com|gstatic.com|jsdelivr.net|jwpcdn.com,domain=imgcloud.pw
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=39613
+angrybirdsnest.com##+js(set, adblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1211
+nitroflare.com##+js(acs, $, window.open)
+nitroflare.com##+js(acs, pop3, window.open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1223
+sexytrunk.com,teensark.com##+js(aopr, document.dispatchEvent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1224
+planetsuzy.org##+js(set, __ads, true)
+planetsuzy.org##+js(acs, jQuery, ready)
+planetsuzy.org##div[style]:has(> script[src*="ads.exoclick.com/"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/1227
+zrozz.com##+js(set, adblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7021
+empflix.com##+js(aopw, popzone)
+empflix.com##+js(nowoif)
+empflix.com##+js(set, FlixPop.isPopGloballyEnabled, falseFunc)
+empflix.com##+js(aeld, , /exo)
+tnaflix.com##+js(aopr, ads.pop_url)
+tnaflix.com##+js(aeld, getexoloader)
+||tnaflix.com/*.php$script,1p
+empflix.com,tnaflix.com##.lastLiAvx
+tnaflix.com###vidPlayer span:has-text(Advertisement)
+tnaflix.com###vidPlayer > div:last-child
+tnaflix.com###zoneInPlayer
+tnaflix.com##.improveADS
+empflix.com##.mewDv
+empflix.com##.padAdvx
+empflix.com#@##hideAd
+empflix.com##.col-xs-6:not([data-vid])
+
+||adsession.com^$popup
+
+! https://github.com/uBlockOrigin/uAssets/issues/1233
+pornomovies.com##+js(aopr, ExoLoader.serve)
+pornomovies.com##+js(aopr, decodeURI)
+pornomovies.com##.twocolumns > .viewlist + .aside
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=39628
+bilasport.com##+js(popads-dummy)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1238
+urlcero.*##+js(aopr, open)
+urlcero.*##+js(nostif, checkAdblockUser, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1240
+kanqite.com##+js(aopr, open)
+kanqite.com##+js(nano-sib)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1244
+onlinetv.planetfools.com##+js(acs, setTimeout, 1000)
+planetfools.com##+js(nowebrtc)
+
+! https://forums.lanik.us/viewtopic.php?f=91&t=39633
+! https://github.com/uBlockOrigin/uAssets/pull/1248
+gala.fr,gentside.com,geo.fr,hbrfrance.fr,nationalgeographic.fr,ohmymag.com,serengo.net,vsd.fr##+js(nostif, checkPub, 6000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1247
+! https://github.com/NanoMeow/QuickReports/issues/1618#issuecomment-517955406
+@@||startimez.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/1254
+homemoviestube.com##+js(aopr, decodeURI)
+homemoviestube.com##.film-aside-ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/1225
+newsextv.com##+js(acs, ExoLoader)
+||aa.21pron.com^
+anyporn.com##+js(nowoif)
+anyporn.com##+js(acs, ExoLoader)
+||anyporn.com/if2/
+
+! https://github.com/reek/anti-adblock-killer/issues/3841
+||img.stomp.com.sg/sites/all/themes/stompst/images/placeholder.jpg$image
+stomp.straitstimes.com##.content:has(> div:has-text(Branded Content))
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/13
+linkrex.net##+js(aopr, open)
+linkrex.net##+js(aopw, __htapop)
+linkrex.net,linx.cc##+js(set, blurred, false)
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|google.com|gstatic.com|recaptcha.net,domain=linkrex.net|linx.cc
+
+! https://github.com/uBlockOrigin/uAssets/issues/1274
+shrtfly.*##+js(aopr, open)
+shrtfly.*##+js(aopr, tabUnder)
+@@||shrtfly.*^$ghide
+shrtfly.*##ins.adsbygoogle
+shrtfly.*##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/1273
+oke.io##+js(aopr, open)
+oke.io##+js(aopw, Fingerprint2)
+oke.io##+js(set, blurred, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/7pyzt3/lots_of_ads_on_gogoanime/
+! https://github.com/uBlockOrigin/uAssets/issues/2256
+! https://www.reddit.com/r/uBlockOrigin/comments/94alm0/gogoanimesh_prevalent_ads_bypasses_older/
+! https://github.com/uBlockOrigin/uAssets/issues/3710
+! https://www.reddit.com/r/uBlockOrigin/comments/aiv8xl/ublock_origin_not_blocking_ads_on_gogoanime/
+! https://github.com/uBlockOrigin/uAssets/issues/4991
+! https://github.com/uBlockOrigin/uAssets/issues/6953
+gogoanime.*##+js(acs, atob, decodeURIComponent)
+gogoanime.*,gogoanimes.*##+js(nowoif)
+gogoanime.*##+js(set, console.clear, undefined)
+gogoanime.*##+js(set, check_adblock, true)
+gogoanime.*##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+gogoanime.*##.banner_center
+gogoanime.*##.anime_video_body_cate > div[style]:has(> div[id] + script[src])
+gogoanime.*##.adx
+gogoanimetv.*##+js(aopr, AaDetector)
+gogoanimetv.*##+js(nosiif, _0x)
+||gogoanime.*/api/pop.php$xhr,1p
+gogoanimetv.*##+js(nowoif)
+||gogoanime.me/*.gif$image
+/get/*?zoneid=$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/1277
+cpmlink.net##+js(acs, decodeURI, decodeURIComponent)
+cpmlink.net##+js(nowebrtc)
+cpmlink.net##.__web-inspector-hide-shortcut__
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|disqus.com|disquscdn.com|fastly.net|fastlylb.net|google.com|googleapis.com|gstatic.com|hcaptcha.com|hwcdn.net|jsdelivr.net|jquery.com|jwpcdn.com|recaptcha.net|tawk.to,domain=cpmlink.net
+cpmlink.net##+js(aeld, , _blank)
+*$frame,3p,domain=cpmlink.net
+cpmlink.net##[href^="https://bit.ly"]
+cpmlink.net##iframe[src="about:blank"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1282
+sunporno.com##+js(aopr, ExoLoader.addZone)
+sunporno.com##+js(popads-dummy)
+sunporno.com##+js(aeld, , ;})
+sunporno.com##+js(aopr, console.clear)
+sunporno.com##+js(aeld, load, BetterPop)
+sunporno.com##+js(aopr, SUN_XER)
+sunporno.com##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+*.gif$domain=sunporno.com,image
+sunporno.com##.flirt
+sunporno.com##.flirt-footer
+sunporno.com##.flirt-block
+sunporno.com##.thumbs-container > .th-ba
+||sunporno.com/*.php$script,1p
+sunporno.com##.safelink
+/api/model/feed?siteId=$xhr,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/1283
+hotgirlclub.com##+js(aopr, document.dispatchEvent)
+hotgirlclub.com##.spnsrd-block-full-width
+
+! https://github.com/uBlockOrigin/uAssets/issues/1285
+namethatporn.com##+js(popads-dummy)
+namethatporn.com##[data-flba^="https://landing.brazzersnetwork.com"]
+||namethatporn.com/assets/imgs/1x1.gif$badfilter
+||namethatporn.com/assets/imgs/1x1.gif$frame,redirect=noopframe
+
+! https://github.com/uBlockOrigin/uAssets/issues/1286
+magnetdl.com,magnetdl.org##+js(nowoif)
+magnetdl.com,magnetdl.org##a[href="/site/vpn/"]
+magnetdl.com,magnetdl.org##+js(ra, href, a[href="https://vpn-choice.com"])
+magnetdl.com,magnetdl.org##a[href^="https://usenetbay.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1299
+! https://forums.lanik.us/viewtopic.php?t=48326-nsfw-freeviewmovies-com
+freeviewmovies.com##+js(aopw, encodeURIComponent)
+freeviewmovies.com##+js(set, isAdBlockActive, false)
+freeviewmovies.com###pause-container
+
+! https://github.com/uBlockOrigin/uAssets/issues/1298
+badjojo.com##+js(aopw, encodeURIComponent)
+pornhost.com##+js(aopr, raConf)
+badjojo.com##.embed-overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/1300
+eroprofile.com##+js(acs, ExoLoader)
+||eroprofile.com/js/nvbla.js
+eroprofile.com##.center-block
+eroprofile.com###divVideoListAd2
+
+! https://github.com/uBlockOrigin/uAssets/issues/1301
+feet9.com##[data-vid^="live-"]:remove()
+feet9.com##[href^="https://go.cam.feet9.com/"]:upward(3)
+||feet9.com/t/newbuttonyellow.png$image
+feet9.com##.pup
+feet9.com##.video:has(span:has-text(Live))
+! https://github.com/uBlockOrigin/uAssets/issues/1301#issuecomment-1364615843
+feet9.com##+js(acs, __ADX_URL_U)
+feet9.com##[onclick*="banner"]:upward(.video)
+feet9.com##.hvr-pulse
+feet9.com##[class^="ig"]
+||feet9.com^$csp=worker-src 'none';
+
+! https://github.com/uBlockOrigin/uAssets/issues/1304
+locopelis.com##+js(aopr, popTimes)
+locopelis.com##+js(aopr, smrtSB)
+locopelis.com##+js(aopr, smrtSP)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1297
+absoluporn.*##+js(acs, ExoLoader)
+@@||chaturbate.com/*embed$frame,domain=absoluporn.com
+/code/script/back.php|
+
+! https://github.com/uBlockOrigin/uAssets/issues/4069
+short.pe##+js(acs, atob, tabunder)
+short.pe##+js(acs, RegExp, POSTBACK_PIXEL)
+short.pe##+js(aopr, AaDetector)
+short.pe##+js(aopr, console.clear)
+short.pe##+js(aeld, mousedown, preventDefault)
+short.pe##+js(nowebrtc)
+short.pe##+js(nowoif)
+short.pe##+js(nostif, '0x)
+*$frame,denyallow=google.com|hcaptcha.com,domain=short.pe
+short.pe##a[href^="https://href.li/"]
+short.pe##body > div[style]:has(input[type="button"])
+short.pe##div[style*="z-index:99999"] > div[style*="width:300px"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1329#issuecomment-627532234
+185.153.231.222##+js(nowebrtc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1330
+filespace.com##+js(set, fuckAdBlock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1332
+orgyxxxhub.com##+js(aopr, ExoLoader)
+orgyxxxhub.com##+js(aopr, Aloader)
+orgyxxxhub.com##+js(aopr, advobj)
+orgyxxxhub.com##+js(noeval-if, replace)
+||orgyxxxhub.com/js/arjlk.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/1324
+repelis.net##+js(aopr, popTimes)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1355
+pornomico.com##+js(aopr, addElementToBody)
+pornomico.com##+js(popads-dummy)
+pornomico.com##+js(aopr, decodeURI)
+pornomico.com##.vjs-overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/1356
+donkparty.com##+js(aopr, phantomPopunders)
+donkparty.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1357
+watchmygf.me##+js(noeval)
+||watchmygf.me/js/popupimage.js
+watchmygf.me##+js(aopr, open)
+watchmygf.me##+js(set, $.magnificPopup.open, noopFunc)
+watchmygf.me##[href^="https://wct.link/click"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1358
+mylust.com##+js(aopr, document.dispatchEvent)
+mylust.com##+js(aopr, console.clear)
+mylust.com##.no_pop.centeredbox
+mylust.com##iframe.clear_both
+mylust.com##div[class^="span"] > div.box:has(> .title > div:has-text(Advertisement))
+mylust.com###wrapper > div[style*="height:18px"]
+mylust.com##.list_videos_ad
+mylust.com###main_video_fluid_html_on_pause
+||mylust.com/*.jsx
+||mylust.com/assets/script.js
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=39765
+! https://github.com/uBlockOrigin/uAssets/issues/4806
+deepbrid.com##+js(acs, document.getElementById, undefined)
+deepbrid.com##+js(set, adsenseadBlock, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1361
+! https://github.com/uBlockOrigin/uAssets/issues/12576
+pinsystem.co.uk##+js(aeld, /^(?:click|mousedown)$/, _0x)
+@@||pinsystem.co.uk^$ghide
+pinsystem.co.uk##ins.adsbygoogle
+pinsystem.co.uk##+js(no-xhr-if, /adsbygoogle|doubleclick/)
+pinsystem.co.uk##+js(acs, eval, replace)
+pinsystem.co.uk##+js(rmnt, script, deblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1374
+boysfood.com##+js(aopw, encodeURIComponent)
+boysfood.com###pause-container
+
+! https://github.com/uBlockOrigin/uAssets/issues/1375
+submityourflicks.com##+js(aopr, ExoLoader.serve)
+submityourflicks.com##+js(aopr, decodeURI)
+submityourflicks.com##+js(set, flashvars.adv_pause_html, '')
+submityourflicks.com##.aside
+submityourflicks.com##.spot
+||submityourflicks.com/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/1381
+sextingforum.net##+js(aopw, stagedPopUnder)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1394
+! https://github.com/AdguardTeam/AdguardFilters/issues/77244
+linkshorts.*##+js(aopr, open)
+linkshorts.*##+js(set, blurred, false)
+*$script,3p,denyallow=google.com|gstatic.com|recaptcha.net,domain=linkshorts.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/1392
+dz4link.com##+js(aopw, Fingerprint2)
+dz4link.com##+js(set, blurred, false)
+dz4link.com##+js(nowoif)
+dz4link.com##.banner
+dz4up.com##.container + div[style] > [title="Download Now"] > img
+*$frame,denyallow=google.com,domain=dz4link.com
+*$script,3p,denyallow=facebook.net|google.com|gstatic.com|recaptcha.net,domain=dz4link.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/18480
+! pixhost. to
+pixhost.*###js
+pixhost.*###web:style(display: block !important;)
+pixhost.*##^script:has-text(exdynsrv)
+!#if !cap_html_filtering
+pixhost.*##+js(rmnt, script, exdynsrv)
+!#endif
+
+! https://adblockplus.org/forum/viewtopic.php?f=1&t=54957
+readmng.com##.desk
+readmng.com##.sideways
+||readmng.com/dist/img/banner*$image,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10665
+! https://www.reddit.com/r/uBlockOrigin/comments/171bmjh/
+@@||next-episode.net^$ghide
+@@||next-episode.net^$script,1p
+*$script,redirect-rule=noopjs,domain=next-episode.net
+next-episode.net##+js(rpnt, script, /^(\s){0,}\/\/.*/gm)
+next-episode.net##.adsbygoogle
+next-episode.net##[id=""]
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=39824
+||beinsports.com/*/adbw/
+
+! https://github.com/uBlockOrigin/uAssets/issues/1405
+zupload.me##+js(aopr, LieDetector)
+zupload.me##+js(nowoif)
+zupload.me##+js(nano-stb)
+zupload.me##a[href="https://www.9xyoutube.com"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1406
+! https://github.com/uBlockOrigin/uAssets/pull/9827
+indi-share.com##+js(nano-stb, seconds)
+indi-share.com##+js(nano-sib, clearInterval)
+techmyntra.net##+js(nano-stb)
+||dwf6crl4raal7.cloudfront.net^$script,3p
+||techmyntra.net^$3p
+
+! https://forums.lanik.us/viewtopic.php?f=62&p=131716#p94691
+@@||fwmrm.net/ad/$script,domain=dplay.dk
+||dniadops-a.akamaihd.net/video-assets/*.mp4$media,domain=dplay.dk
+
+! https://github.com/uBlockOrigin/uAssets/issues/1687
+updato.com##+js(nostif, document.querySelector, 5000)
+
+! https://github.com/easylist/easylist/commit/8b6e6544f04b3ded98fbd70bd832dfcc4e61db52#commitcomment-27222476
+! https://github.com/uBlockOrigin/uAssets/issues/3126
+! https://github.com/NanoMeow/QuickReports/issues/1258
+! https://github.com/NanoMeow/QuickReports/issues/1270
+! https://github.com/uBlockOrigin/uAssets/issues/8847
+imgdew.*,imgoutlet.*,imgsen.*,imgsto.*,imgtown.*,imgview.*##+js(aopr, CustomEvent)
+imgdew.*,imgmaze.*,imgoutlet.*,imgtown.*,imgview.*##+js(aopr, exoJsPop101)
+imgdew.*,imgmaze.*,imgtown.*,imgview.*##+js(aopr, ExoLoader.addZone)
+imgmaze.*,imgtown.*##+js(aopr, popjs.init)
+imgdew.*,imgmaze.*,imgoutlet.*,imgtown.*,imgview.*##+js(aopw, Fingerprint2)
+imgdew.*,imgmaze.*,imgoutlet.*,imgtown.*,imgview.*##+js(nowoif)
+dewimg.*,imgrock.*,imgviu.*,mazpic.*,outletpic.*,picrok.*##+js(nowoif)
+*$script,frame,xhr,3p,domain=mazpic.*,denyallow=imgmaze.com
+*$script,frame,xhr,3p,domain=picrok.*,denyallow=imgrock.net
+*$script,frame,xhr,3p,domain=imgviu.*,denyallow=imgview.net
+*$script,frame,xhr,3p,domain=outletpic.*,denyallow=imgoutlet.com
+*$script,frame,xhr,3p,domain=dewimg.*,denyallow=imgdew.com
+*$script,frame,xhr,3p,domain=imgtown.*,denyallow=imgtown.net
+*$script,3p,domain=imgsen.com
+@@||imgtown.*^$ghide
+@@||imgmaze.*^$ghide
+@@||imgoutlet.*^$ghide
+@@||imgview.*^$ghide
+/\/[0-9a-z]{5,9}\.js(\?[a-z]{3})?$/$script,domain=dewimg.*|imgtown.*|imgviu.*|mazpic.*|outletpic.*|picrok.*
+dewimg.*,imgtown.*,imgviu.*,mazpic.*,outletpic.*,picrok.*##+js(acs, addEventListener, -0x)
+dewimg.*,imgtown.*,imgviu.*,mazpic.*,outletpic.*,picrok.*##div[style^="z-index: 999999; background-image: url(\"data:image/gif;base64,"][style$="position: absolute;"]
+dewimg.*,imgtown.*,imgviu.*,mazpic.*,outletpic.*,picrok.*##[href^="//"][rel="nofollow norefferer noopener"]
+
+! https://github.com/easylist/easylist/commit/8b6e6544f04b3ded98fbd70bd832dfcc4e61db52#commitcomment-27222476
+imgclick.net##+js(aopw, Fingerprint2)
+imgclick.net##+js(noeval)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1417
+behindwoods.com###cboxOverlay
+behindwoods.com###cboxWrapper
+behindwoods.com###colorbox
+behindwoods.com##.vedio-block
+
+! https://github.com/uBlockOrigin/uAssets/issues/1423
+rojadirecta.*,tarjetarojatvonline.*##+js(aopw, closeMyAd)
+rojadirecta.*,rojadirectatv.*,tarjetarojatvonline.*##+js(aopw, smrtSP)
+capshd.*,rojadirectatvlive.*##+js(nowoif)
+||misert.com^
+||behabs.com^
+||adblockenterpriseedition.com^
+
+! https://www.reddit.com/r/uBlockOrigin/comments/7uncmj/help_remove_dynamic_antiadblocker_overlay/
+@@||ekstrabladet.dk^$ghide
+@@||adtech.de/dt/common/DAC.js$domain=ekstrabladet.dk
+ekstrabladet.dk##.eb-placement
+
+! https://github.com/uBlockOrigin/uAssets/issues/1458
+webnovel.com##+js(set, adblockSuspected, false)
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=webnovel.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1463
+@@||totaldebrid.org^$ghide
+*.gif#$image,redirect=1x1.gif,domain=totaldebrid.org
+! https://github.com/uBlockOrigin/uAssets/issues/1463#issuecomment-534039208
+totaldebrid.*##+js(nostif, nextFunction, 250)
+totaldebrid.org##+js(aeld, load, nextFunction)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1464
+streamwish.*##+js(set, xRds, true)
+streamwish.*##+js(set, cRAds, false)
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/835#issuecomment-362782205
+! Add filters to boost timers, for the reasoning read the link above
+! Copied from https://github.com/NanoAdblocker/NanoFilters/blob/a57366bd7b42a31d25af47eefc031218826bcae0/NanoFiltersSource/NanoTimer.txt
+! https://github.com/uBlockOrigin/uAssets/issues/1497
+! https://github.com/uBlockOrigin/uAssets/issues/1521
+! https://github.com/uBlockOrigin/uAssets/issues/1731
+al.ly,bbf.lt,cpmlink.net,cut-urls.com,eg4link.*,idlelivelink.*,igram.*,iiv.pl,shink.me,ur.ly,url.gem-flash.com,zeiz.me##+js(nano-sib)
+globalbesthosting.com,srt.am##+js(nano-stb)
+! https://github.com/uBlockOrigin/uAssets/issues/1481
+1ink.cc##+js(nano-sib)
+1ink.cc##[id^="Ad"]
+*$frame,domain=1ink.cc
+! https://github.com/jspenguin2017/uBlockProtector/issues/173
+freepdf-books.com##+js(nano-sib, myTimer, 1500)
+@@||met.bz^$ghide
+*.gif$domain=met.bz,image
+met.bz##+js(noeval)
+met.bz##+js(aopr, AaDetector)
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/840
+hideout.*##+js(acs, stop, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10319
+oploverz.*##+js(nostif, popup)
+oploverz.*###overplay
+*.gif$domain=oploverz.*,image
+*$script,3p,denyallow=cloudflare.com|disqus.com|disquscdn.com|facebook.com|fastlylb.net|fbcdn.net|facebook.net|googleapis.com|jsdelivr.net|statically.io|githack.com|gitcdn.xyz|gitcdn.link|gitcdn.herokuapp.com|arc.io|fluidplayer.com,domain=oploverz.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/1475
+@@||pastpapers.papacambridge.com^$ghide
+pastpapers.papacambridge.com##[id^="aswift"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1480
+mimaletadepeliculas.*##+js(aeld, load, advertising)
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/228#issuecomment-311761121
+themeslide.com##+js(nano-sib, countdown, 2000)
+themeslide.com##+js(nano-stb)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/272
+! https://github.com/NanoMeow/QuickReports/issues/25
+! https://github.com/uBlockOrigin/uAssets/pull/6696
+@@||aternos.org^$ghide
+*$script,redirect-rule=noopjs,domain=aternos.org
+@@||hb.vntsm.com/v2/live/$xhr,domain=aternos.org
+@@||tlx.3lift.com/header/auction?$xhr,domain=aternos.org
+@@||fastlane.rubiconproject.com/a/api/fastlane.json?$xhr,domain=aternos.org
+@@||bidder.criteo.com/cdb?$xhr,domain=aternos.org
+@@||hbopenbid.pubmatic.com/translator?source=prebid-client$xhr,domain=aternos.org
+@@||mp.4dex.io/prebid$xhr,domain=aternos.org
+@@||prg.smartadserver.com/prebid/v1$xhr,domain=aternos.org
+@@||venatusmedia-d.openx.net/w/1.0/arj$xhr,domain=aternos.org
+@@||adx.adform.net/adx/openrtb$xhr,domain=aternos.org
+@@||htlb.casalemedia.com/cygnus?s=$xhr,domain=aternos.org
+@@||prebid.a-mo.net/a/c$xhr,domain=aternos.org
+@@||vntsm.com/*/ad-manager.min.js$script,domain=aternos.org
+@@||hb.vntsm.io/content.html$xhr,domain=aternos.org
+@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,domain=aternos.org
+||aternos.org/panel/ajax/reportDetection.php?$xhr,1p
+||aternos.org/ajax/account/report-detection$xhr,1p
+||tech426.com^$3p
+||ultra-rv.com^$3p
+||atom-ds.com^$3p
+||fastlane.rubiconproject.com^$removeparam,domain=aternos.org
+||htlb.casalemedia.com^$removeparam=r,domain=aternos.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/1027
+@@||imasdk.googleapis.com/js/sdkloader/*$script,domain=video.gjirafa.com
+gjirafa.com##[id^="gjc"]
+gjirafa.com##[id^="an-holder"]
+!video.gjirafa.com##+js(json-prune, 0)
+
+||s3.amazonaws.com/dmas-public/revcontent/bundle.js
+
+! https://github.com/uBlockOrigin/uAssets/pull/1506
+pcworld.com###amazon-bottom-widget
+
+! https://github.com/uBlockOrigin/uAssets/pull/1507
+thedailywtf.com##.article-body > div:has(a[href*="utm_medium"])
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/847
+nmn900.com##+js(aopr, nmn900ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1522
+befap.com##+js(aopr, ExoLoader)
+befap.com##+js(aopw, tiPopAction)
+befap.com##.row-middle
+
+! https://github.com/uBlockOrigin/uAssets/issues/1523
+tubemania.org##+js(nowoif)
+||tubemania.org^$frame,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/7wpk97/cant_block_ad_at_the_bottom_of_readcomiconline/
+! https://forums.lanik.us/viewtopic.php?p=136688#p136688
+readcomiconline.*##+js(aopr, adblockDetector)
+||vliplatform.com^$3p
+readcomiconline.*##.adsbyvli:upward(div[style^="width: 300px; height: 250px"])
+readcomiconline.*##.divCloseBut
+*$script,3p,denyallow=cloudfront.net|disqus.com|disquscdn.com|edgecastcdn.net|facebook.net|fastlylb.net|fbcdn.net|twitter.com,domain=readcomiconline.*
+! https://www.reddit.com/r/uBlockOrigin/comments/18h450p/redirects_and_popups/
+readcomiconline.*##+js(aeld, mousedown, localStorage)
+/ads/bid300*.aspx
+
+! https://github.com/NanoAdblocker/NanoDefender/issues/24#issuecomment-364821024
+wp-time.com##a[href^="https://goo.gl/"]:has(img)
+wp-time.com###pop-ad-wrap
+
+! https://github.com/uBlockOrigin/uAssets/issues/1531
+#@#.reklama
+~offmoto.com##.reklama:not(.ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1536
+telolet.in##+js(acs, addEventListener, DivTopAd)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1538
+cumlouder.com##+js(aopw, ExoLoader)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1539
+! https://github.com/uBlockOrigin/uAssets/issues/1652
+! https://github.com/uBlockOrigin/uAssets/issues/2999
+! https://forums.lanik.us/viewtopic.php?f=62&t=41306
+blackpoolgazette.co.uk,lep.co.uk,northamptonchron.co.uk,scotsman.com,shieldsgazette.com,thestar.co.uk##.banner
+blackpoolgazette.co.uk,lep.co.uk,northamptonchron.co.uk,scotsman.com,shieldsgazette.com,thestar.co.uk##div[class^="AdLoadingText"]
+blackpoolgazette.co.uk,lep.co.uk,northamptonchron.co.uk,scotsman.com,shieldsgazette.com,thestar.co.uk##div[class^="SidebarAds_"]
+blackpoolgazette.co.uk,lep.co.uk,northamptonchron.co.uk,scotsman.com,shieldsgazette.com,thestar.co.uk##div[class^="helper__AdContainer"]
+blackpoolgazette.co.uk,lep.co.uk,northamptonchron.co.uk,scotsman.com,shieldsgazette.com,thestar.co.uk##div[data-ads-params]
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=39983
+nme.com##.advert:style(z-index: -999999 !important;)
+nme.com###wrapper:style(padding-top: 0 !important;)
+idealhome.co.uk,look.co.uk##body > div#wrapper:style(padding-top: 0px !important;)
+goodtoknow.co.uk,marieclaire.co.uk,womanandhome.com##.header-advert-wrapper
+
+! mejortorrent.com popups
+mejortorrent.*,mejortorrento.*,mejortorrents.*,mejortorrents1.*,mejortorrentt.*##+js(nowebrtc)
+mejortorrento.*,mejortorrents.*,mejortorrents1.*,mejortorrentt.*##iframe[src^="publi"]
+||mejortorrent.*/bannner
+
+! https://github.com/uBlockOrigin/uAssets/issues/1549
+! https://www.reddit.com/r/uBlockOrigin/comments/x289uk
+*$popunder,domain=xfreehd.com,3p
+xfreehd.com##.nvheader > span:has-text(Advertisement)
+*$frame,redirect-rule=noopframe,domain=xfreehd.com
+xfreehd.com##.ad-body:remove()
+
+! https://github.com/uBlockOrigin/uAssets/issues/1550
+! https://forums.lanik.us/viewtopic.php?f=62&t=42535
+||downloadfullfree.com^$xhr,redirect=nooptext
+
+! https://github.com/uBlockOrigin/uAssets/issues/911#issuecomment-366335870
+! https://github.com/NanoMeow/QuickReports/issues/3664
+adsrt.*##+js(acs, atob, decodeURIComponent)
+adsrt.*##+js(aopw, Fingerprint2)
+adsrt.*##+js(aopr, rmVideoPlay)
+adsrt.*##+js(set, blurred, false)
+*$script,3p,denyallow=google.com|gstatic.com|recaptcha.net,domain=adsrt.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/1555
+linclik.com##+js(set, blurred, false)
+||kogaqmlci.com^
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=39985
+rd.com##+js(acs, btoa, Adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1560
+bersamatekno.com##+js(nostif, _0x)
+@@||jwpsrv.com^$xhr
+
+! https://github.com/uBlockOrigin/uAssets/issues/2938#issuecomment-445134813
+||uptostream.com/assets/ads.xml$xhr,domain=imasdk.googleapis.com
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=uptostream.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/81am26
+! https://www.reddit.com/r/uBlockOrigin/comments/9byeux
+1movies.*##+js(set, String.prototype.charCodeAt, trueFunc)
+! https://github.com/uBlockOrigin/uAssets/issues/1718
+1movies.*##+js(set, check_adblock, true)
+1movies.*##^script:has-text(3f87b0eaddd)
+||1movies.*/sw.js$script,1p
+||amgload.net^$xhr,redirect=nooptext,domain=1movies.*
+||piguiqproxy.com^$xhr,redirect=nooptext,domain=1movies.*
+1movies.*##a[href^="https://vpn-stream.com"]
+1movies.*##+js(aopw, decodeURIComponent)
+1movies.*##+js(nowoif)
+@@||1movies.*/*.html$csp,1p
+1movies.life##div[id^="___"][style="display: block;"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/6447
+bs.to,burningseries.*##+js(aeld, click, preventDefault)
+*$popunder,3p,domain=bs.to|burningseries.*
+bs.to,burningseries.*##+js(ra, onclick)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/7ys9hz/nsfw_how_do_you_get_rid_of_those_dancing_girls/
+hentaigo.com##+js(aopr, loadTool)
+hentaigo.com##+js(aopr, r3H4)
+hentaigo.com##a[href*="//www.nutaku.net/signup/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1584
+lin-ks.*##+js(nano-sib)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1591
+streamfare.com##[id^="wb_AdText"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/83544
+||thebookee.net^$image,redirect-rule=1x1.gif,1p
+@@||thebookee.net^$ghide
+thebookee.net##ins.adsbygoogle
+
+! https://github.com/gorhill/uBlock/issues/3539
+webdesigndev.com##+js(nowoif)
+
+! https://forums.lanik.us/viewtopic.php?f=90&t=40053
+! https://forums.lanik.us/viewtopic.php?p=145117#p145117
+@@||schwaebische.de/*/ad$script,1p
+schwaebische.de##+js(set, disasterpingu, false)
+@@||schwaebische.de^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/1608
+dz4soft.*##+js(noeval)
+dz4soft.*##+js(aeld, load, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1607
+imageweb.ws##+js(nowoif)
+||imageweb.ws/*.gif$image
+imageweb.ws##a[href^="http://refer.ccbill.com/"]
+hardcoreluv.com,imageweb.ws,pezporn.com,wildpictures.net##.box1[style^="height"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1614
+stream2watch.*##+js(acs, atob)
+stream2watch.*##+js(aopr, AdservingModule)
+stream2watch.*##p[style="color:white;"]
+stream2watch.*##.min-test
+hindimean.com,streamcdn.*##+js(aopr, AaDetector)
+hindimean.com##+js(nowebrtc)
+streamcdn.*##+js(aopr, open)
+wizhdsports.fi##+js(nowebrtc)
+||stream2watch.*/sw.js$script,1p
+! daddylive.live (.club .me .eu) popups
+! https://github.com/NanoMeow/QuickReports/issues/1306
+daddylive.*##+js(aopr, AaDetector)
+daddylive.*##+js(aopr, require)
+daddylive.*##+js(nowebrtc)
+daddylive.*##+js(aopw, afStorage)
+daddylive.*##^script:has-text(decodeURIComponent)
+dlhd.sx##+js(aopw, u_cfg)
+/adblock.php$script,domain=dlhd.sx
+dlhd.sx##+js(nostif, (), 150)
+||gocast2.com/z-$script,1p
+||daddylive.*/*ads$frame,1p
+||daddylive.*/sw.js$script,1p
+gooals.*###mo-ads-close
+daddylive.*###floatLayer1
+daddylive.*###html1
+daddylive.*##div > a.btn-outline-primary.btn
+! https://github.com/AdguardTeam/AdguardFilters/issues/150430
+daddylive.link#@#+js(aopr, require)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1618
+cnnamador.com##+js(nostif, backRedirect)
+cnnamador.com##+js(aeld, , pop)
+cnnamador.com##+js(noeval)
+cnnamador.com##.banner
+||cnnamador.com/player/float.php
+cnnamador.com##.is-ad-visible
+cnnamador.com##+js(aopw, adv_pre_duration)
+cnnamador.com##+js(aopw, adv_post_duration)
+cnnamador.com##+js(aeld, /^(click|mousedown|mousemove|touchstart|touchend|touchmove)/, system.popunder)
+cnnamador.com##.cards__item:has([href*="loboclick"])
+||cnnamador.com/sw.js$script,1p
+||adsloboclick.com^
+
+! https://github.com/uBlockOrigin/uAssets/pull/1623
+dirpy.com##a[href*="bit.ly"]
+dirpy.com##a[href*="out.dirpy.com"]
+dirpy.com###dirpy-news
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/865
+clix4btc.com##+js(set, adblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1629
+mp3guild.*,mp3clan.*##+js(aopw, Fingerprint2)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1632
+vidoza.net##+js(noeval)
+vidoza.net##+js(nowoif)
+vidoza.net##.in-block
+vidoza.net###plo_0
+vidoza.net##[id*="ScriptRoot"]
+vidoza.net##.simpleToast
+vidoza.net##.download-green
+
+! https://github.com/uBlockOrigin/uAssets/issues/1634
+! https://github.com/uBlockOrigin/uAssets/issues/6749
+katfile.com##+js(acs, document.createElement, onerror)
+katfile.com##+js(nano-stb)
+katfile.com##+js(nowoif)
+katfile.com##+js(set, adblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2695
+*$image,redirect-rule=1x1.gif,domain=freeopenvpn.org
+freeopenvpn.org##.ipspeed
+freeopenvpn.org#@##advert_top
+freeopenvpn.org##div[style^="display: block"][style*="width: 336px"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1639
+! https://forums.lanik.us/viewtopic.php?f=103&t=32877
+@@||diariosur.es^$ghide
+@@||diariovasco.com^$ghide
+@@||elcomercio.es^$ghide
+@@||elcorreo.com^$ghide
+@@||eldiariomontanes.es^$ghide
+@@||elnortedecastilla.es^$ghide
+@@||hoy.es^$ghide
+@@||ideal.es^$ghide
+@@||larioja.com^$ghide
+@@||lasprovincias.es^$ghide
+@@||leonoticias.com^$ghide
+||static.vocento.com/dab/*.js
+diariovasco.com,eldiariomontanes.es,elnortedecastilla.es,hoy.es,ideal.es,larioja.com,lasprovincias.es,leonoticias.com##.voc-advertising
+
+! https://github.com/uBlockOrigin/uAssets/issues/7298
+*$script,redirect-rule=noopjs,domain=spiegel.de
+*$xhr,redirect-rule=noopjs,domain=spiegel.de
+||doubleclick.net^$script,important,domain=spiegel.de
+spiegel.de#@#.asset-affiliatebox
+spiegel.de#@#.nativead
+spiegel.de#@#.nativead + .headline-date
+spiegel.de#@#a[href^="http://paid.outbrain.com/network/redir?"]
+spiegel.de#@#a[href^="https://paid.outbrain.com/network/redir?"]
+spiegel.de#@#a[data-nvp*="'trafficUrl':'https://paid.outbrain.com/network/redir?"]
+spiegel.de#@#a[onmousedown^="this.href='https://paid.outbrain.com/network/redir?"]
+spiegel.de#@#a[onmousedown^="this.href='http://paid.outbrain.com/network/redir?"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1642
+||focus.de/src/js/spmsg$script,redirect=noopjs,1p
+focus.de##.clearfix.branding > .surftipp:has-text(Anzeige)
+focus.de##[href^="https://www.cyberport.de"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1644
+@@||ariva.de^$ghide
+||ariva.de/js/fcm-sw.js$script,1p
+ariva.de##.werb_textlink
+ariva.de###iqd_mainAd
+
+! https://github.com/uBlockOrigin/uAssets/issues/1649
+haxmaps.com##+js(acs, ab1, ab2)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1627
+! https://github.com/uBlockOrigin/uAssets/issues/1650
+! https://github.com/uBlockOrigin/uAssets/issues/2732
+mercurynews.com##+js(set, CnnXt.Event.fire, noopFunc)
+@@||mercurynews.com^$ghide
+/wp-content/client-mu-plugins/src/Paywall/static/js/connext-paywall-analytics.min.js
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=40124
+vsco.co##.page-wrap > section:has-text(Download the free)
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/873
+@@||bittube.me/*/js/ads2.js$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/1669
+generacionretro.net##+js(aeld, load, 2000)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/39
+arlinadzgn.com,idntheme.com##+js(aopw, hidekeep)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3441
+ma-x.org##+js(aeld, load, adb)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=40167
+||waybig.com/*.gif$image
+waybig.com##.aff-list
+waybig.com##.content-aff
+waybig.com##.aside-adds-col
+
+! https://github.com/uBlockOrigin/uAssets/issues/1953
+! animeflv.net | animeflvnet.com | animeflv.ac | animeflv.cc | animeflv.la | animeflv.ru ads/popup
+animeflv.*##+js(acs, jQuery, 'pp12')
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|cloudfront.net|disqus.com|disquscdn.com|facebook.net|fastly.net|fastlylb.net|fbcdn.net|google.com|googleapis.com|gstatic.com|hcaptcha.com|hwcdn.net|jquery.com|jsdelivr.net|mega.nz|recaptcha.net,domain=animeflv.*
+@@||animeflv.*/assets/vast/videojs$script,1p
+||animeflv.*/api/pop.php
+
+! https://github.com/uBlockOrigin/uAssets/issues/1690
+! https://github.com/uBlockOrigin/uAssets/issues/21463
+jkanime.*##+js(nowoif)
+sfastwish.com##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1686
+8tracks.com##+js(set, App.views.adsView.adblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1692
+nudecelebforum.com##+js(aopr, __ads)
+nudecelebforum.com##+js(noeval)
+nudecelebforum.com##+js(nostif, document.querySelectorAll, 1000)
+nudecelebforum.com###floatingbar
+
+! https://github.com/uBlockOrigin/uAssets/issues/1697
+! https://github.com/NanoAdblocker/NanoFilters/issues/103
+@@||hyperdebrid.*^$ghide
+hyperdebrid.*##+js(acs, decodeURI, atob)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/83f3nn/please_verify_this_antiadblock_filter_for/
+pronpic.org##+js(aopr, document.createEvent)
+pronpic.org##+js(aopw, ShowAdbblock)
+pronpic.org##+js(nostif, style)
+@@||visitweb.com^$script,domain=pronpic.org
+
+! https://www.reddit.com/r/uBlockOrigin/comments/83l1l7/how_can_i_bypass_this_adblock_detenction/
+! https://github.com/NanoMeow/QuickReports/issues/3304
+||player.ooyala.com/*/ad-plugin/google_ima.min.js$script,important,redirect=noopjs,domain=nrl.com
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=nrl.com
+@@||nrl.com^$ghide
+nrl.com##[id^="publift-ad-"]
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/883
+! https://github.com/jspenguin2017/uBlockProtector/issues/940
+! https://github.com/jspenguin2017/uBlockProtector/issues/959
+! https://github.com/NanoMeow/QuickReports/issues/524
+@@||ccbluex.net^$ghide
+*/adsid/integrator.js$script,redirect=noopjs,domain=dl.ccbluex.net
+||googlesyndication.com^$script,redirect=noopjs,domain=dl.ccbluex.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/1708
+thewebflash.com##+js(nostif, clientHeight)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1709
+! https://github.com/uBlockOrigin/uAssets/issues/3172
+chyoa.com##+js(aopr, __NA)
+chyoa.com##+js(aopw, ExoLoader)
+chyoa.com##.chyoa-banner
+chyoa.com##.chyoa-adzone
+
+! https://github.com/uBlockOrigin/uAssets/issues/1711
+3movs.com##+js(popads-dummy)
+3movs.com##+js(noeval-if, ExoLoader)
+3movs.com##+js(set, flashvars.adv_pause_html, '')
+3movs.com##[src*="aid="]
+3movs.com###player-pop-layer
+||3movs.com/su4unbl-ssu.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/1705
+@@||seekingalpha.com^$ghide
+||seekingalpha.com/boot_data.js$important
+seekingalpha.com##[id^="ad-slot-"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1714
+! https://github.com/uBlockOrigin/uAssets/issues/4687
+! https://github.com/uBlockOrigin/uAssets/issues/4711
+! https://github.com/uBlockOrigin/uAssets/issues/5919
+twitter.com,twitter3e4tixl4xyajtrzo62zg5vztmjuricljdp2c5kshju4avyoid.onion##[data-testid="trend"]:has-text(/Promoted|Gesponsert|Promocionado|Patrocinat|Sponsorisé|Sponsorizzato|Promowane|Promovido|Реклама|Uitgelicht|Sponsorlu|Promotert|Promoveret|Sponsrad|Mainostettu|Sponzorováno|Promovat|Ajánlott|Προωθημένο|Dipromosikan|Được quảng bá|推廣|推广|推薦|推荐|プロモーション|프로모션|ประชาสัมพันธ์|प्रचारित|বিজ্ঞাপিত|تشہیر شدہ|مُروَّج|تبلیغی|מקודם/):upward(1)
+twitter.com,twitter3e4tixl4xyajtrzo62zg5vztmjuricljdp2c5kshju4avyoid.onion##div[style^="transform"] h2 > div[style^="-webkit-line-clamp"] > span:has-text(/^(?:Promoted Post|Promowany Post|Post promovat|プロモポスト)$/):upward(3)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=40228#p133884
+popularmechanics.com##+js(nostif, addEventListener, 0)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1725
+@@||azlink.xyz^$ghide
+azlink.xyz##+js(nano-sib)
+
+! cricfree .io .live/xyz
+cricplay2.xyz##+js(acs, setTimeout, admc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4458
+xmovies8.*##+js(nowoif)
+xmovies8.*##+js(aeld, /^(?:click|mousedown|mousemove|touchstart|touchend|touchmove)$/, system.popunder)
+xmovies8.*##+js(set, check_adblock, true)
+xmovies08.org##+js(aeld, , '0x)
+xmovies8.*###upgrade_pop
+
+||hipercontas.com.br^$3p
+
+! https://forums.lanik.us/viewtopic.php?f=90&t=30966
+main-echo.de##div[id^="traffective-ad"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1739
+divxtotal.*,divxtotal1.*##+js(acs, jQuery, btoa)
+divxtotal.*,divxtotal1.*###banner_publi
+
+! https://github.com/uBlockOrigin/uAssets/issues/1740
+broadwayworld.com##a[href^="https://ad.doubleclick.net/ddm/"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/85m6fp/ublock_origin_is_showing_adds_on_a_website_for_me/
+op.gg##+js(aopw, lifeOnwer)
+op.gg##+js(nostif, adblock, 2000)
+! https://github.com/uBlockOrigin/uAssets/issues/13033
+op.gg##div[class^="css-"]:has(> div:not([class], [id]) > .vm-placement:not([style]))
+op.gg##div[class^="css-"]:has(> div:not([class], [id]) > .vm-placement[data-display-type="hybrid-banner"])
+! https://github.com/uBlockOrigin/uAssets/issues/13023
+op.gg##[id^="div-gpt-ad"]:not([class]):upward(div[class])
+@@||doubleclick.net^$xhr,domain=op.gg
+@@||vntsm.com^$xhr,domain=op.gg
+@@||pagead2.googlesyndication.com^$xhr,domain=op.gg
+
+! https://www.reddit.com/r/uBlockOrigin/comments/85mgro/%C2%B5block_doesnt_block_ads_on_this_site/
+birdsandblooms.com,bombshellbling.com,dorkly.com,dryscalpgone.com,eclypsia.com,familyhandyman.com,gala.fr,gentlemansgazette.com,homeschoolgiveaways.com,hotbeautyhealth.com,ketoconnect.net,mom4real.com,mynaturalfamily.com,oneessentialcommunity.com,pageflutter.com,printablecrush.com,psychologyjunkie.com,skinnyms.com,skintagsgone.com,stayglam.com,tasteandtellblog.com,thecelticblog.com,thecozyapron.com,theendlessmeal.com,thehappierhomemaker.com,thelovenerds.com,yellowblissroad.com##+js(acs, btoa, BOOTLOADER_LOADED)
+thisisfutbol.com##+js(aopr, PerformanceLongTaskTiming)
+pcwelt.de##+js(aopr, proxyLocation)
+sixsistersstuff.com##+js(aopr, Int32Array)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57638
+moondoge.co.in##+js(ra, src, iframe#claimAd)
+moondoge.co.in##iframe#claimAd:style(max-height:1px !important;max-width:1px !important)
+moondoge.co.in##div.flexContentAd, .btn-sm.btn-coin, .flexBefore, .flexAfter
+moondoge.co.in###advert-space > iframe:style(visibility: collapse !important)
+moondoge.co.in##[src^="//coinad.com/ads/"]:style(visibility: collapse !important)
+moondoge.co.in##.captchaAd:style(visibility: collapse !important)
+||localbitcoins.com^$3p
+
+! https://github.com/NanoAdblocker/NanoFilters/commit/f711954f407c43329b5d242a7516a5a38c3bee4e#commitcomment-28218753
+revealname.com##+js(set, $.fx.off, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1768
+alphaporno.com##+js(aopr, ExoLoader)
+alphaporno.com##+js(set, console.clear, noopFunc)
+alphaporno.com,zedporn.com##.bnnrs-player
+alphaporno.com,zedporn.com##.bottom-banners
+alphaporno.com,zedporn.com##.block-banner
+alphaporno.com##.movies-block > div[style*="text-align:center;"]
+alphaporno.com,zedporn.com##.sponsor
+||alphaporno.com/bravoplayer/custom/alphapornocom/scripts/inplaybn-
+
+! https://github.com/uBlockOrigin/uAssets/issues/1775
+lequipe.fr##+js(nostif, start, 0)
+@@||lequipe.fr/js/thirdparty/smarttag.js$script,1p
+@@||lequipe.fr/js/thirdparty/prebid.js$script,1p
+@@||lequipe.fr^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/1767
+?zoneId=*&sponsor$frame
+
+! https://github.com/uBlockOrigin/uAssets/issues/6585
+! https://github.com/uBlockOrigin/uAssets/issues/14423
+fcportables.com##+js(set, adsClasses, undefined)
+fcportables.com##+js(set, gsecs, 0)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1774
+porntube.com##.relatedContainer
+porntube.com##.col-md-3:has(> iframe[src^="/external"])
+||porntube.com/external/
+||porntube.com/nativeexternal/
+
+! https://forums.lanik.us/viewtopic.php?f=103&t=40300
+! https://github.com/AdguardTeam/AdguardFilters/issues/51448
+@@||elrellano.com^$ghide
+elrellano.com##.widget_media_image
+
+! https://bugzilla.mozilla.org/show_bug.cgi?id=1404468#c44
+jeuxvideo.com##^script:has-text(wadsBlocking)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1796
+comunidadgzone.es##+js(nostif, nextFunction, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1797
+tubous.com##+js(aopr, popMagic.init)
+tubous.com##+js(aopr, document.dispatchEvent)
+||fuckandcdn.com/*/ads/
+||fuckandcdn.com/*/frms/
+tubous.com##.allIM
+tubous.com###good_money
+tubous.com##a.DarkBg
+
+! https://github.com/uBlockOrigin/uAssets/issues/1800
+apurogol.net##+js(aopw, smrtSB)
+apurogol.net##+js(aopw, smrtSP)
+apurogol.net##[href="/stream/"]
+apurogol.net###fakeplayer
+||ichlnk.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/1802
+jpopsingles.eu##+js(nano-sib, downloadTimer)
+jpopsingles.eu##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+jpopsingles.eu##+js(noeval-if, adsBlocked)
+@@||jpopsingles.eu^$ghide
+@@||jpopsingles.eu^$image,1p
+/ap-plugin-scripteo/frontend/img/728x90.png$image,redirect-rule=1x1.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/1804
+! freecoursesonline. me
+freecoursesonline.*##+js(aeld, load, nextFunction)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1814
+globaldjmix.com##+js(aeld, /DOMContentLoaded|load/, y.readyState)
+@@||globaldjmix.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/2393
+pelisplus2.*##+js(acs, document.getElementsByTagName, onclick)
+pelisplus.*##+js(aopr, AaDetector)
+pelisplus.*,pelisplushd.*##+js(aopw, adcashMacros)
+pelisplus.*##+js(aopw, smrtSP)
+pelisplus.*##+js(aopw, smrtSB)
+pelisplus.*,pelisplushd.*,pelispop.net,streampelis.club##+js(nowoif)
+streampelis.club##+js(aopr, __Y)
+pelisplus.*##+js(ra, href, #opfk)
+pelisplus.*##[class^="smartadtags"]
+pelisplus.*##.links > a.btn[class*="fa-"]
+pelisplus2.*##[style^="margin:-30px"] > [href][target="_blank"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1816
+||gotprofits.com^$3p
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/894
+@@||whiskypreisvergleich.de^$ghide
+@@||whiskyprices.co.uk^$ghide
+@@||whiskyprijzen.*^$ghide
+@@||whiskyprix.*^$ghide
+whiskypreisvergleich.de,whiskyprices.co.uk,whiskyprijzen.be,whiskyprijzen.nl,whiskyprix.be,whiskyprix.fr##.blocker
+
+! https://github.com/uBlockOrigin/uAssets/issues/1823
+jellynote.com##+js(nostif, byepopup, 5000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1826
+||go.pub2srv.com/apu.php$script,redirect=noopjs
+! https://github.com/uBlockOrigin/uAssets/issues/1826#issuecomment-478300989
+pouvideo.*,povvideo.*,povw1deo.*,povwideo.*,powv1deo.*,powvibeo.*,powvideo.*,powvldeo.*##+js(aopr, jwplayer.vast)
+pouvideo.*,povvideo.*,povw1deo.*,povwideo.*,powv1deo.*,powvibeo.*,powvideo.*,powvldeo.*##+js(aopw, adcashMacros)
+pouvideo.*,povvideo.*,povw1deo.*,povwideo.*,powv1deo.*,powvibeo.*,powvideo.*,powvldeo.*##+js(aopw, Fingerprent2)
+pouvideo.*,povvideo.*,povvldeo.*,povw1deo.*,povwideo.*,powv1deo.*,powvibeo.*,powvideo.*,powvldeo.*##+js(aopw, Fingerprint2)
+pouvideo.*,povvideo.*,povw1deo.*,povwideo.*,powv1deo.*,powvibeo.*,powvideo.*,powvldeo.*##+js(nano-stb, grecaptcha.ready, *)
+pouvideo.*,povvideo.*,povw1deo.*,povwideo.*,powv1deo.*,powvibeo.*,powvideo.*,powvldeo.*##+js(nostif, test.remove, 100)
+pouvideo.*,povvideo.*,povvldeo.*,povw1deo.*,povwideo.*,powv1deo.*,powvibeo.*,powvideo.*,powvldeo.*##+js(nowoif)
+pouvideo.*,povvideo.*,povw1deo.*,povwideo.*,powv1deo.*,powvibeo.*,powvideo.*,powvldeo.*##+js(set, isAdb, false)
+pouvideo.*,povvideo.*,povw1deo.*,povwideo.*,powv1deo.*,powvibeo.*,powvideo.*,powvldeo.*##[src^="/ben/mgnat.html?"]
+pouvideo.*,povvideo.*,povw1deo.*,povwideo.*,powv1deo.*,powvibeo.*,powvideo.*,powvldeo.*###embed
+pouvideo.*,povvideo.*,povw1deo.*,povwideo.*,powv1deo.*,powvibeo.*,powvideo.*,powvldeo.*###keepFloatin
+pouvideo.*,povvideo.*,povw1deo.*,povwideo.*,powv1deo.*,powvibeo.*,powvideo.*,powvldeo.*##iframe:not([src*="recaptcha"])
+/jquery.notify.js$script,1p,domain=pouvideo.*|povvideo.*|povw1deo.*|povwideo.*|powv1deo.*|powvibeo.*|powvideo.*|powvldeo.*
+ext=$script,1p,domain=pouvideo.*|povvideo.*|povw1deo.*|povwideo.*|powv1deo.*|powvibeo.*|powvideo.*|powvldeo.*
+*$frame,3p,denyallow=google.com,domain=pouvideo.*|povvideo.*|povw1deo.*|powvibeo.*|povwideo.*|powv1deo.*|powvideo.*|powvldeo.*|povvldeo.*
+*$script,3p,denyallow=googleapis.com|google.com|gstatic.com,domain=povvldeo.*|povvldeo.lol
+@@player*.html$frame,1p,domain=pouvideo.*|povvideo.*|povw1deo.*|powvibeo.*|povwideo.*|powv1deo.*|powvideo.*|powvldeo.*
+||wontent.powvideo.net^
+||zontent.powvideo.net^
+/js/fpu3/pu4.min.js
+/jsa.hh?$script
+/drh.hh?$frame
+
+! https://github.com/uBlockOrigin/uAssets/issues/1827
+pcbolsa.com###ContenidoPubliCotiza
+pcbolsa.com##.InfoPcBolsaAdBlock:xpath(..)
+pcbolsa.com###ContenidoPubliCotizax1
+
+! https://github.com/uBlockOrigin/uAssets/issues/1828
+minecraftraffle.com##+js(acs, awm, location)
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/885
+! https://github.com/NanoMeow/QuickReports/issues/1531
+golfchannel.com##+js(set, adBlockEnabled, false)
+@@||v.fwmrm.net^$xhr,domain=stream.golfchannel.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1830
+downloadpirate.com##+js(aopw, Fingerprint2)
+||downloadpirate.com/sw.js$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/1833
+! https://github.com/uBlockOrigin/uAssets/issues/2253
+reddit.com,reddittorjg6rue252oqsxryoxengawnmo46qy4kyii5wtqnwfj4ooad.onion##.size-compact.Post:has([class*="promoted"])
+reddit.com,reddittorjg6rue252oqsxryoxengawnmo46qy4kyii5wtqnwfj4ooad.onion##div[id*="sidebar"][data-before-content="advertisement"]:upward(3)
+reddit.com,reddittorjg6rue252oqsxryoxengawnmo46qy4kyii5wtqnwfj4ooad.onion##div[class][data-before-content="advertisement"]:not([id])
+reddit.com,reddittorjg6rue252oqsxryoxengawnmo46qy4kyii5wtqnwfj4ooad.onion##div[class][data-before-content="Werbung"]:not([id])
+! https://github.com/uBlockOrigin/uAssets/issues/13072
+reddit.com,reddittorjg6rue252oqsxryoxengawnmo46qy4kyii5wtqnwfj4ooad.onion##[id^="t3"].promotedlink:upward(.rpBJOHq2PR60pnwJlUyP0 > div)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=40330
+toyoheadquarters.com##+js(aopr, document.dispatchEvent)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/52
+insidemarketing.it##+js(aopr, adblock)
+insidemarketing.it##.homeBannerMax
+
+! https://github.com/uBlockOrigin/uAssets/issues/1835
+desiupload.*,9xupload.*##+js(nano-stb)
+desiupload.*##+js(acs, getCookie)
+desiupload.*##[href*="desifile.in/404"]
+/glx_*.js$script
+||a2ztechworld.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/1839
+vermangasporno.com##+js(aeld, , _0x)
+vermangasporno.com##+js(aopr, dataPopUnder)
+vermangasporno.com##[href^="https://bit.ly"]
+vermangasporno.com##[href*="http://www.ciberhentai.net"]
+*$script,3p,denyallow=cloudflare.net|cloudfront.net|disqus.com|disquscdn.com|fastlylb.net,domain=vermangasporno.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1842
+bdsmstreak.com##+js(aopr, ExoLoader.serve)
+bdsmstreak.com##+js(aeld, , _blank)
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|fastly.net|fastlylb.net|fluidplayer.com|google.com|googleapis.com|gstatic.com|hcaptcha.com|hwcdn.net|jquery.com|jsdelivr.net|recaptcha.net|twitter.com,domain=bdsmstreak.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1843
+! https://github.com/uBlockOrigin/uAssets/issues/991
+! https://github.com/uBlockOrigin/uAssets/issues/17736
+gamcore.com,porcore.com,69games.xxx##+js(nowoif)
+gamcore.com,porcore.com,69games.xxx##+js(set, puShown, true)
+gamcore.com,69games.xxx##[href*="/ads/"]
+classic.gamcore.com##[id]:has(> .warningbox)
+classic.gamcore.com###center > .flashes > .wide:has(> a[href][rel])
+gamcore.com##.item:has([href^="/games/"][class=""])
+gamcore.com##.item:has(> a[href] > img[src*="//cdn.69games.xxx/"])
+gamcore.com##.menuArea [rel]
+gamcore.com##.row > .d-md-block
+gamcore.com##.row > .d-lg-block.d-none
+gamcore.com##.mycontainer > .d-lg-block.d-none > iframe
+gamcore.com##.row > .game_view > .add_game iframe
+gamcore.com###preloader_2
+gamcore.com##.side_flashes
+gamcore.com##.wide.alphadelta_block
+gamcore.com###ad_unter_spiel
+gamcore.com###tvnotice
+porcore.com##.adscolumn
+porcore.com##[style^="width:728px;height:90px"]
+porcore.com###videoitems.videoitems > .onevideothumb:has(> .clip-link > img[src^="/uploads/"][src$="gif"])
+porcore.com##[target="_blank"]:has([src*=".gif"])
+porcore.com##li > a[href*="/loader?"]
+69games.xxx###footer
+69games.xxx###right
+69games.xxx###tvnotice
+69games.xxx##[class^="leaderboard"]
+69games.xxx##[id*="tvadbody"]
+69games.xxx##[id^="center"] .I:has(> [class=""][href])
+69games.xxx##.side_flash
+zazzybabes.com##+js(aeld, /error|canplay/, (t))
+*$frame,script,3p,denyallow=bootstrapcdn.com|cloudflare.com|cloudflare.net|fastly.net|fastlylb.net|getbootstrap.com|google.com|googleapis.com|gstatic.com|hcaptcha.com|hwcdn.net|jquery.com|recaptcha.net|serverable.com|zencdn.net,domain=porcore.com|zazzybabes.com
+@@||tm-offers.gamingadult.com/?offer=$frame,domain=gamcore.com|69games.xxx
+://a.*/ipp?id=$script,3p
+://a.*/loader?a=$frame,3p
+/strip_ngn_2020_august$script,domain=porcore.com
+||serverable.com/*.gif$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/1993
+cinedetodo.*##.alignnone
+cinedetodo.*##.bnr
+cinedetodo.*##[id*="yellow"]
+||cda-online.pl/wp-content/uploads/*.js$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/1850
+aquipelis.*##+js(aopw, smrtSB)
+aquipelis.*##+js(aopw, smrtSP)
+aquipelis.net##[class^="adsbutt"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/2081
+! https://github.com/easylist/easylist/issues/7486
+! https://www.reddit.com/r/uBlockOrigin/comments/177nvxn/popup/
+eporner.com##+js(rmnt, script, /adb/i)
+eporner.com##+js(aopw, EPeventFire)
+eporner.com##+js(nostif, additional_src, 300)
+*.xml$xhr,3p,domain=eporner.com
+||eporner.com/js/bowser.php
+||eporner.com/cppb/
+||eporner.com/dotm/
+eporner.com##.mb:has(> .adnative-1x1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1855
+! https://forums.lanik.us/viewtopic.php?p=134829#p134829
+@@||arenavision.*^$ghide
+arenavision.*##+js(nowoif)
+||imgpfx.arenavision.
+
+! https://github.com/uBlockOrigin/uAssets/issues/1857
+vintage-erotica-forum.com##+js(acs, __ads)
+vintage-erotica-forum.com##+js(acs, setTimeout, ____POP)
+vintage-erotica-forum.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1862
+htmlgames.com##+js(no-fetch-if, openx)
+||yollamedia.com^
+||htmlgames.com/js/yolla.php
+@@||yolla-d.openx.net/|$script,domain=cdn.htmlgames.com
+cdn.htmlgames.com###afgContainer
+
+! https://github.com/uBlockOrigin/uAssets/issues/1864
+siamfishing.com##+js(acs, is_noadblock, window.location)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1884
+! https://github.com/NanoMeow/QuickReports/issues/2960
+tecknity.com##+js(set, ads_b_test, true)
+@@||tecknity.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/1885
+! https://github.com/NanoMeow/QuickReports/issues/564
+pornbimbo.com##+js(nostif, (), 2000)
+@@||pornbimbo.com^$ghide
+pornbimbo.com##[href^="https://ca.clcknads.pro"]
+pornbimbo.com##.bottom-adv
+pornbimbo.com##[src^="http://pornbimbo.com/player/html.php"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1883
+/pu-placer.js
+
+! https://www.reddit.com/r/Buffalo/comments/89dzra/buffalo_news_paywall_x2/dwqze26/
+! https://github.com/uBlockOrigin/uAssets/issues/2330
+! https://github.com/uBlockOrigin/uAssets/issues/3870
+@@||bntech.io^$script,domain=buffalonews.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1890
+! https://github.com/uBlockOrigin/uAssets/issues/18832
+momondo.com##+js(nowoif)
+momondo.com##[onclick*="inline.ad"]
+momondo.*##div[id$=-list] div[role=tab]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1891
+! https://github.com/NanoMeow/QuickReports/issues/1019
+! https://github.com/uBlockOrigin/uAssets/issues/7447
+! https://www.reddit.com/r/uBlockOrigin/comments/17pwuvh/ublock_detected_firefox_haaretzcoil/
+haaretz.co.il,haaretz.com##+js(aeld, load, hblocked)
+haaretz.co.il,haaretz.com##+js(acs, $, AdBlockUtil)
+haaretz.co.il,haaretz.com##+js(set, showAds, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1892
+avoiderrors.com##+js(nostif, css_class.show)
+avoiderrors.com##.ai-viewport-1.code-block-3.code-block
+avoiderrors.com##[href^="https://www.avoiderrors.com/robinhood"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1895
+slate.com##+js(aeld, error, Adblocker)
+slate.com##.slate-ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/1907
+4tests.com##+js(set, adblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1914
+@@||farmeramania.de^$ghide
+farmeramania.de##+js(acs, $, show)
+
+||sersh.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/5587
+guidedhacking.com##[href="https://guidedhacking.com/advertise"]
+||guidedhacking.com/*banner$image
+||guidedhacking.com/*.gif$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/1741
+theralphretort.com##+js(aopw, adBlockDetected)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=40436
+||ads.puhutv.com/i.jpg$image,redirect=2x2.png
+
+! https://forums.lanik.us/viewtopic.php?f=90&t=40441
+! https://github.com/uBlockOrigin/uAssets/issues/5223
+winfuture.de##+js(json-prune, adtagparameter, enabled)
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=winfuture.de
+@@||widget.spoods.io/loader.js$script,domain=winfuture.de
+
+! https://forums.lanik.us/viewtopic.php?f=96&t=40440
+@@||hdblog.it^$ghide
+hdblog.it#@#.item_compra
+hdblog.it#@#.box_flame
+hdblog.it#@#.box_grampa_shadow
+hdblog.it##[id^="google_ads_iframe"]
+hdblog.it##.ads_container_top
+hdblog.it##.ads_block
+
+! https://forums.lanik.us/viewtopic.php?f=96&t=40447
+@@||hdmotori.it^$ghide
+hdmotori.it##body:style(background: none !important; overflow: auto !important;)
+hdmotori.it##+js(nostif, CANG, 3000)
+hdmotori.it##.ads_block
+
+! https://github.com/uBlockOrigin/uAssets/issues/1932
+megawarez.org##+js(aopw, smrtSB)
+megawarez.org##[class^="ads"]
+megawarez.org##[id^="text-"] > .textwidget > p > [href][target="_blank"] > .size-full.alignnone
+! https://github.com/uBlockOrigin/uAssets/issues/1932#issuecomment-457093955
+megawarez.org##.onp-sl-content:style(display: block !important;)
+megawarez.org##.onp-sl-social-locker
+mwpaste.com##+js(nowoif, /^/, 15)
+*$frame,3p,domain=mwpaste.com
+! https://github.com/uBlockOrigin/uAssets/issues/1932#issuecomment-465748184
+acortalo.*,acortar.*,megadescarga.net##+js(nofab)
+acortalo.*,acortar.*,megadescarga.net,megadescargas.net##+js(nano-sib, , , 0)
+acortalo.*,acortar.*,megadescarga.net,megadescargas.net##+js(set, clicked, true)
+acortalo.*,acortar.*,megadescarga.net,megadescargas.net##+js(set, eClicked, true)
+acortalo.*,acortar.*,megadescarga.net,megadescargas.net##+js(set, number, 0)
+acortalo.*,acortar.*,megadescarga.net,megadescargas.net##+js(set, sync, true)
+||acortalo.*^$3p
+@@*$css,1p,domain=acortalo.*|acortar.*|megadescarga.net
+@@*$ghide,domain=acortalo.*|acortar.*|megadescarga.net
+*$popunder,domain=acortalo.*|acortar.*|megadescarga.net|megadescargas.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/7348
+hentai2read.com##+js(nowoif)
+hentai2read.com##[target="_blank"]:has([src^="//"])
+hentai2read.com##[src^="data: ;base64,"]
+||hentaicdn.com^*/NATORI.$script,3p
+/\.com\/\d+/[0-9a-z]+\.js$/$script,1p,domain=hentai2w.com
+||hentai2w.com/templates/default/js/ab.functions.js
+||hentai2w.com/templates/default/js/arf-
+hentai2w.com##+js(acs, Math.random, ExoLoader)
+hentai2w.com##+js(aeld, getexoloader)
+hentai2w.com##.arf-sec
+hentai2w.com##.ark-noAB
+
+! https://github.com/uBlockOrigin/uAssets/issues/1938
+megalinks.info##+js(aeld, DOMContentLoaded, adlinkfly)
+megapaste.xyz###newlayercontent
+
+! https://github.com/uBlockOrigin/uAssets/issues/1945
+||highstream.tv/twos.js
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/905
+updato.com##+js(nostif, updato-overlay, 500)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1946
+lolhentai.net##+js(nowoif)
+lolhentai.net##+js(aopr, loadTool)
+lolhentai.net##.sponsor
+||lolhentai.net/cornergirls.js
+! ! adding sites using the same script
+! https://www.reddit.com/r/uBlockOrigin/comments/a6bbib/this_website_seems_to_be_able_to_bypass_ublock/
+mangafreak.net##+js(nowoif)
+mangafreak.net##+js(acs, setTimeout, document.querySelector)
+||cdn.siteswithcontent.com/js/push/subscribe.js$script,important
+||cdn.contentsitesrv.com/js/push/subscribe.js$script,important
+mangafreak.net##[src^="/scripts/"]
+memecenter.com##a[href$=".png"]
+! https://github.com/uBlockOrigin/uAssets/issues/13147
+*$script,3p,denyallow=cloudflare.net|cloudfront.net|disqus.com|disquscdn.com|facebook.com|facebook.net|fastlylb.net|fbcdn.net|fontawesome.com|google.com|googleapis.com|gstatic.com|hwcdn.net|jquery.com|sharethis.com|unpkg.com|watchcartoonsonline.info|kisscartoon.info,domain=kiss-anime.*
+kiss-anime.*###rightside > .clear2 ~ .rightBox
+kiss-anime.*##.episodeList > div > div[style*="text-align: center"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/1949
+||googlesyndication.com^$script,redirect=noopjs,domain=offidocs.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1951
+||googletagmanager.com/gtm.js$script,redirect=noopjs,domain=kinoheld.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/1965
+freepornvideo.sex,teenpornvideo.xxx##+js(aopr, ExoLoader.serve)
+freepornvideo.sex##noindex
+teenpornvideo.xxx##.aside-spots
+
+! https://github.com/uBlockOrigin/uAssets/issues/10266
+tubsexer.*##.sponsored_top
+tubsexer.*##.table
+tubsexer.*##.desktop_link
+tubsexer.*##+js(nostif, innerText, 2000)
+tubsexer.*##.advertising
+
+! https://github.com/uBlockOrigin/uAssets/issues/1969
+yourlust.com##+js(aopr, ExoLoader.serve)
+yourlust.com##+js(aeld, getexoloader)
+
+! https://github.com/uBlockOrigin/uAssets/issues/719
+twitch.tv##+js(nowoif, amazon-adsystem)
+||amazon-adsystem.com/aax2/apstag.js$script,domain=twitch.tv,important
+||ddacn6pr5v0tl.cloudfront.net^
+
+! https://github.com/uBlockOrigin/uAssets/issues/1977
+imx.to##+js(aopr, ExoLoader.serve)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1980
+crazyshit.com##+js(acs, jQuery, document.cookie)
+||crazyshit.com/aff/$frame
+
+! https://github.com/uBlockOrigin/uAssets/issues/1982
+strikeout.*##+js(nowoif, |)
+strikeout.*##+js(acs, setTimeout, admc)
+strikeout.*##.position-absolute:style(opacity: 0 !important;)
+strikeout.*##.d-none.d-lg-block.col-lg-3
+strikeout.*##+js(acs, String.fromCharCode, 'shift')
+strikeout.*##.m-1.btn-danger.btn
+strikeout.*##.w-100.position-absolute.h-100
+*$image,redirect-rule=1x1.gif,domain=strikeout.*
+! https://github.com/uBlockOrigin/uAssets/issues/14879
+plyjam.*##+js(set, attr, {})
+plyjam.*##+js(set, scriptSrc, '')
+
+! https://github.com/NanoAdblocker/NanoDefender/issues/38
+lejdd.fr##+js(aopr, SmartWallSDK)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1994
+peliculasmx.net###pbar_outerdiv
+peliculasmx.net##.selected:has-text(Ads)
+peliculasmx.net##+js(nowebrtc)
+peliculasmx.net##+js(aopw, segs_pop)
+##[href^="https://www.onclickperformance.com/"]
+peliculasmx.net###pills-ads
+peliculasmx.net###pills-ads-tab
+
+! https://github.com/uBlockOrigin/uAssets/issues/1995
+ciberdvd.*##+js(nowoif)
+ciberdvd.*##+js(aopw, smrtSB)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2001
+@@||windows10gadgets.pro^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/2009
+elfqrin.com##+js(nostif, alert, 8000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2018
+anonymousemail.me##+js(acs, document.getElementById, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2019
+porngem.com##+js(set, console.clear, noopFunc)
+porngem.com##.video-right
+porngem.com###player-pop-layer
+porngem.com##.adv-in-video
+porngem.com##.bottom-b-s
+
+! https://forums.lanik.us/viewtopic.php?f=104&t=40485&p=135354#p135178
+@@||e-komplet.dk^$ghide
+
+! https://forums.lanik.us/viewtopic.php?p=135477#p135477
+@@||btc-echo.de^$ghide
+btc-echo.de##.elementor-row:has-text([Anzeige])
+
+! https://forum.kuketz-blog.de/viewtopic.php?f=29&p=7929
+! https://github.com/uBlockOrigin/uAssets/issues/845
+! https://github.com/uBlockOrigin/uAssets/issues/3438
+! https://github.com/uBlockOrigin/uAssets/issues/3443
+! https://github.com/uBlockOrigin/uAssets/issues/5794
+!#if env_chromium
+||amazonaws.com/homad-global-configs.schneevonmorgen.com/global_config.json$xhr,redirect=nooptext,domain=fitforfun.de|golem.de|n-tv.de|wetter.de
+||amazonaws.com/homad-global-configs-eu-fra.schneevonmorgen.com/global_config.json$xhr,redirect=nooptext,domain=desired.de
+!#endif
+n-tv.de##+js(set, Object.prototype.adReinsertion, noopFunc)
+! https://github.com/uBlockOrigin/uAssets/issues/19951
+brigitte.de,stern.de##+js(set, Object.prototype.disableAds, true)
+wetter.de##+js(no-xhr-if, homad-global-configs)
+! https://github.com/uBlockOrigin/uAssets/issues/3443#issuecomment-420714439
+||amazonaws.com/homad-global-configs.schneevonmorgen.com/global_config.json$xhr,redirect=nooptext,domain=tele5.de
+! ||damoh.tele5.de/*$media,redirect=noopmp3-0.1s,domain=tele5.de
+kochbar.de##.ks-ad
+kochbar.de##[data-adslot]
+kochbar.de##.admanager
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=41254
+foxsports.com.au##+js(set, cxStartDetectionProcess, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2064
+thememypc.net##+js(aopr, Abd_Detector)
+thememypc.net##+js(nano-sib, counter, 2000)
+kinoger.*##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2068
+cityam.com##+js(aopr, paywallWrapper)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2061
+! https://www.reddit.com/r/uBlockOrigin/comments/13dz3wp/
+thesimsresource.com##+js(set, isAdBlocked, false)
+thesimsresource.com##+js(no-xhr-if, /enthusiastgaming|googleoptimize|googletagmanager/)
+thesimsresource.com##.crtv-bottom-wrapper
+thesimsresource.com##.pleasewaitad
+
+! https://github.com/uBlockOrigin/uAssets/issues/2075
+xbabe.com##.bnnr
+xbabe.com##.bnnrs-bottom
+*$script,3p,denyallow=googleapis.com|hwcdn.net|fastly.net|jwpcdn.com,domain=xbabe.com
+
+! https://www.camp-firefox.de/forum/viewtopic.php?p=1081244#p1081244
+||akamaihd.net/vod/*$media,redirect=noopmp3-0.1s,domain=7tv.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/2082
+satcesc.com##+js(nostif, css_class)
+||wpfc.ml/b.gif$image,redirect-rule=1x1.gif,domain=satcesc.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2085
+pornoreino.com##+js(aopr, ExoLoader)
+pornoreino.com##+js(aopr, open)
+pornoreino.com##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/2097
+! https://github.com/uBlockOrigin/uAssets/issues/19474
+@@||dogefaucet.com^$ghide
+dogefaucet.com##.loader
+||a-ads.com^$frame,redirect-rule=noopframe,domain=dogefaucet.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2095
+playretrogames.com##+js(nano-stb, ez, *, 0.02)
+playretrogames.com##.adblock
+
+! https://github.com/uBlockOrigin/uAssets/issues/2092
+shrt10.com##+js(aopr, open)
+shrt10.com##+js(aopw, adcashMacros)
+shrt10.com##+js(set, blurred, false)
+*$script,3p,denyallow=cloudflare.com|google.com|gstatic.com|recaptcha.net,domain=shrt10.com
+||dx-tv.com^$3p
+@@||shrt10.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/2093
+fxporn69.*##+js(aeld, click, exopop)
+fxporn69.*##+js(set, adblock, noopFunc)
+fxporn69.*##+js(nostif, nextFunction, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4546
+||vipbox.*/sw.js$script
+*$popup,domain=vipbox.*,3p
+@@|about:blank|$popup,domain=vipbox.*
+vipbox.*##a[href^="https://s3.amazonaws.com/"]
+vipbox.*##button[data-open="_blank"]
+vipbox.*##.btn-lg.btn
+~vipbox.pl,vipbox.*,vipboxtv.*##.position-absolute
+##[data-lnguri*="vipbox"]
+*$image,redirect-rule=1x1.gif,domain=vipbox.*
+@@||vipbox.*^$ghide
+vipbox.*##.btn-success.btn
+vipbox.*,viprow.*##+js(set, path, '')
+vipbox.*,viprow.*##^script:has-text("admc")
+vipbox.*,viprow.*##^script:has-text(\"admc\")
+
+! https://github.com/uBlockOrigin/uAssets/issues/2104
+wkyc.com##+js(acs, btoa)
+wkyc.com##.grid__sticky-column_side_left
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/915
+crackllc.com##.onp-sl-content:style(display: block !important;)
+crackllc.com##.onp-sl-social-locker
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=40607
+animeid.tv##+js(nowebrtc)
+animeid.tv##[href^="http://play.leadzupc.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/2111
+geo.fr##+js(aopw, $getWin)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2109
+tfc.tv##+js(aopw, adBlockDetected)
+@@||tfc.tv/Scripts/*ads.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/2115
+! https://github.com/uBlockOrigin/uAssets/issues/15909
+gnomio.com##+js(no-xhr-if, /doubleclick|googlesyndication/)
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=40616
+@@||nba.com^$ghide
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=nba.com
+! https://www.reddit.com/r/uBlockOrigin/comments/jz12a7/cant_watch_videos_without_turning_off_ubo/
+@@||neulionms-a.akamaihd.net^$script,domain=nba.com
+! https://github.com/AdguardTeam/AdguardFilters/issues/118188
+||ugdturner.com/xd.sjs$script,redirect-rule=noopjs,domain=nba.com
+||clips-manifests-aka.warnermediacdn.com^$xhr,removeparam=caid,domain=nba.com
+! https://github.com/uBlockOrigin/uAssets/issues/21165
+||akamaized.net/*.m3u8$xhr,3p,removeparam=csid,domain=nba.com
+||akamaized.net/*.m3u8$xhr,3p,removeparam=pcaid,domain=nba.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2122
+hotcopper.com.au##+js(acs, $, blockAds)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2140
+trekbbs.com##div[style^="width:970px"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/2139
+@@||popcornflix.com^$ghide
+popcornflix.com##+js(json-prune, adEnabled)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2142
+hdbox.ws##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2130
+@@||benkhouya.com^$script,domain=anonymousemail.me
+
+! https://github.com/uBlockOrigin/uAssets/issues/2137
+timeforbitco.in##+js(set, adBlock, false)
+@@||timeforbitco.in^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/2143
+inmanga.com##+js(acs, setTimeout, manageAntiBlock)
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/919
+designmodo.com##.onp-sl-content:style(display: block !important;)
+designmodo.com##.onp-sl-social-locker
+
+! https://github.com/uBlockOrigin/uAssets/issues/2145
+! https://github.com/uBlockOrigin/uAssets/issues/4787
+||ctrl.blog/ac/rba$frame,1p
+ctrl.blog##+js(set, _ctrl_vt.blocked.ad_script, false)
+ctrl.blog##.boxa
+
+! https://github.com/uBlockOrigin/uAssets/issues/2149
+@@||adz.bz^$ghide
+adz.bz###frameAd:style(height: 51 px !important; display: block !important; visibility: collapse !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2153
+! https://github.com/uBlockOrigin/uAssets/commit/de1a12fbfcc5bf8942173a395e3746cc45575166#commitcomment-28816238
+*/wp-content/plugins/adunblocker/*$script,1p
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/922
+download.ipeenk.com##+js(aopw, adBlockDetected)
+download.ipeenk.com##+js(aopw, Fingerprint2)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2168
+revivelink.com##+js(acs, Object.defineProperty, XMLHttpRequest)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2173
+sportlife.es##+js(set, blockAdBlock, noopFunc)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=40676
+inhabitat.com##+js(aopr, registerSlideshowAd)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2194
+*$frame,domain=lusthero.com,3p
+lusthero.com##+js(nostif, (), 50)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1849
+! https://forums.lanik.us/viewtopic.php?p=136255#p136255
+m4ufree.*##+js(nostif, debugger)
+m4ufree.*,streamm4u.*##+js(nowebrtc)
+m4ufree.*##+js(aopr, mm)
+streamm4u.*##+js(aopr, AaDetector)
+||caffeinecontainerakin.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/5411
+! https://github.com/uBlockOrigin/uAssets/issues/7481
+itv.com##+js(json-prune, Playlist.ContentBreaks)
+itv.com##+js(nowoif)
+||toots-a.akamaihd.net/priority/*$media,redirect=noopmp3-0.1s,domain=itv.com
+||toots-a.akamaihd.net/priority/*$media,redirect=noopmp4-1s,domain=itv.com
+itv.com##.stage__upsell-button
+itv.com##.seek-bar__ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/2198
+! https://github.com/uBlockOrigin/uAssets/issues/2198#issuecomment-478436892
+mega-dvdrip.*,peliculas-dvdrip.*##+js(aeld, DOMContentLoaded, shortener)
+peliculas-dvdrip.*##+js(aopr, AdservingModule)
+peliculas-dvdrip.*##[class*="col-"] > p > [href] > img.alignnone
+megapastes.com##+js(aeld, DOMContentLoaded, adlinkfly)
+megapastes.com##.content > center
+
+! https://www.reddit.com/r/uBlockOrigin/comments/bv37t2/animedao_blocking_ublock_origins/
+! https://github.com/NanoMeow/QuickReports/issues/1325
+@@||anime-update*.*^$ghide
+@@||animedao*.*^$ghide
+animedao.*##.gads
+*$script,redirect-rule=noopjs,domain=animedao.*
+@@||animedao*.stream^$script,1p
+animedao.*##.ab
+animedao.*##hr
+
+! https://www.reddit.com/r/uBlockOrigin/comments/8hgrg9/blocking_deals_on_kinja_sites_gizmodo_kotaku/
+! https://github.com/uBlockOrigin/uAssets/issues/2836
+! https://www.reddit.com/r/uBlockOrigin/comments/b3co9c/ublock_origin_doesnt_work_properly_on_some/
+avclub.com,clickhole.com,deadspin.com,earther.com,gizmodo.com,jalopnik.com,jezebel.com,kotaku.com,lifehacker.com,splinternews.com,theinventory.com,theonion.com,theroot.com,thetakeout.com##article.postlist__item:has(.meta__network)
+!#if env_firefox
+@@||amazon-adsystem.com/$script,domain=avclub.com|clickhole.com|deadspin.com|earther.com|gizmodo.com|jalopnik.com|jezebel.com|kotaku.com|lifehacker.com|splinternews.com|theinventory.com|theonion.com|theroot.com|thetakeout.com
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/2204
+worldfreeware.com##+js(aopr, require)
+@@||worldfreeware.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/2207
+||tibiabr.com/$frame,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/11351
+einthusan.*##+js(no-xhr-if, /^(?!.*(einthusan\.io|yahoo|rtnotif|ajax|quantcast|bugsnag))/)
+@@||einthusan.*/prebid.js$script,1p
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=einthusan.*
+@@||googletagmanager.com/gtm.js$xhr,domain=einthusan.tv
+einthusan.*##.adspace-lb
+einthusan.*##.adspace-lr
+
+! https://github.com/uBlockOrigin/uAssets/issues/2236
+nuevos-mu.ucoz.com##+js(aeld, load, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5710
+@@||esradio.libertaddigital.com/ad/*$xhr,1p
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=esradio.libertaddigital.com
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=storage.oraclecloud.com
+@@||storage.oraclecloud.com/*/smartclip-services/sc_player/$script,1p
+esradio.libertaddigital.com###mega-atf
+
+! Fix navbar being stuck in the middle of the page
+dailydot.com##.dd-nav-global:style(top: 0 !important; transform: none !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2242
+pornfay.*##+js(nowoif)
+*$frame,domain=pornfay.*
+pornfay.*##.rmedia
+pornfay.*##.zone
+||pvrtx.net^
+pornfay.*##.bottom-adv
+
+! https://github.com/uBlockOrigin/uAssets/issues/2247
+finofilipino.org##+js(set, caca, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2249
+in.search.yahoo.com##.reg:has([href*="aclick"])
+in.search.yahoo.com##.reg:has([href*="clk"])
+
+! https://github.com/NanoMeow/QuickReports/issues/2244
+yahoo.com##.ys-mobileFeaturedAd
+||cdn.yahoomedia.net/creatives/*/BlackFriday
+yahoo.com###HPSPON-ad
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=40733
+mypornstarbook.net##+js(aopr, ExoLoader.serve)
+mypornstarbook.net##table > tbody > tr:has-text(Advertisement)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2260
+grantorrent.*,grantorrent1.*##+js(aopr, getUrlParameter)
+grantorrent.*##+js(acs, onload, btoa)
+grantorrent.*##+js(aopr, LieDetector)
+grantorrent.*,grantorrents.*##+js(nano-stb)
+grantorrent.*,grantorrent1.*##+js(aopw, Fingerprint2)
+grantorrent.*,grantorrent1.*##+js(acs, decodeURI, decodeURIComponent)
+grantorrents.*##.myButton
+grantorrents.*##.custom-html-widget.textwidget > [style*="width:300px; height:600px"]
+##[href*="passtechusa.com"]
+! https://github.com/uBlockOrigin/uAssets/issues/2260#issuecomment-488532216
+desbloqueador.*##+js(aeld, mousedown, trigger)
+desbloqueador.*##+js(set, Ok, true)
+desbloqueador.*##+js(nowoif, given)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=16610
+ddlvalley.*##+js(acs, decodeURI, getScriptFromCss)
+ddlvalley.*##+js(aopw, Fingerprint2)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2263
+! https://github.com/uBlockOrigin/uAssets/issues/11416
+speedtest.net##+js(set, isBlocked, false)
+speedtest.net##+js(aopr, _sp_)
+speedtest.net#@#.pure-u-custom-ad-skyscraper
+
+! https://forums.lanik.us/viewtopic.php?p=136580#p136580
+! https://github.com/uBlockOrigin/uAssets/issues/4483
+seehd.*##+js(acs, String.fromCharCode, 'shift')
+||bokarsolutions.co.uk^$3p
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=40741
+mangaku.*##+js(nowebrtc)
+mangaku.*##+js(acs, $, onclick)
+*.gif$domain=mangaku.*,image
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=29217
+mac2sell.net##+js(no-fetch-if, method:HEAD)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2267
+xberuang.*##+js(set, safelink.adblock, false)
+xberuang.*##+js(nano-sib)
+
+! https://forums.lanik.us/viewtopic.php?f=91&t=40756
+@@||v.fwmrm.net/ad/g/$xhr,domain=mycanal.fr
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=40758
+goafricaonline.com##+js(aopr, goafricaSplashScreenAd)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11337
+@@||youmath.it/$script,1p
+*$script,redirect-rule=noopjs,domain=youmath.it
+youmath.it##+js(acs, document.getElementById, try)
+youmath.it##+js(nostif, adb)
+youmath.it##+js(no-xhr-if, /adnxs.com|onetag-sys.com|teads.tv|google-analytics.com/)
+youmath.it###D_1
+youmath.it###C_1
+
+! https://github.com/uBlockOrigin/uAssets/issues/2282
+ashemaletube.com##+js(aopr, open)
+ashemaletube.com##.ads-block-rightside
+@@||ashemaletube.com^$ghide
+||cc.ashemaletube.com/*/black-header.jpg$image
+||cc.ashemaletube.com/*/header-black.jpg$image
+ashemaletube.com##.video-end-overlay
+*.mp4$media,redirect=noopmp3-0.1s,domain=ashemaletube.com
+||cc.ashemaletube.com/*/black-main.jpg$image,1p
+ashemaletube.com###site-wrapper:style(padding-top: 0 !important;)
+ashemaletube.com##.header-ads-wrapper
+@@/key=$media,domain=ashemaletube.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2286
+hotscope.tv##+js(nowoif)
+hotscope.tv##[style^="transform"]:has(#videoHolder)
+hotscope.tv##ul[style^="padding-top:"]
+||hotscope.tv^$csp=script-src 'self' 'unsafe-inline' 'unsafe-eval' data: https://disqus.com *.disqus.com *.google-analytics.com *.disquscdn.com
+||hotscope.tv/_next/static/chunks/pages/go-$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/2287
+japanesefuck.com##+js(aopr, ExoLoader.serve)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2292
+*/wp-content/plugins/deadblocker/*$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/2294
+todopolicia.com##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4351
+poedb.tw##+js(aopr, importFAB)
+@@||poedb.tw^$ghide
+poedb.tw###bottombanner970
+poedb.tw###topbanner970
+! https://github.com/uBlockOrigin/uAssets/issues/14680
+poedb.tw##[target="_blank"]:has([src*="webp"])
+poedb.tw##.text-center:has([src*="webp"]):has([style])
+
+! https://github.com/NanoAdblocker/NanoCore/issues/166
+cine.to##+js(aeld, , 0x)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2306
+micloudfiles.com##+js(aeld, load, 2000)
+micloudfiles.com##+js(acs, atob, tabunder)
+micloudfiles.com##+js(nowoif)
+micloudfiles.com##[href*="medbooksvn.org/"]
+micloudfiles.com##[href*="usmlematerials.net/"]
+||media.giphy.com^$image,domain=micloudfiles.com
+||imgur.com^$image,domain=micloudfiles.com
+||usmlematerials.net^$image,domain=micloudfiles.com
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=40787
+coinfaucet.io##+js(acs, atob, tabunder)
+coinfaucet.io,freecardano.com,freenem.com##+js(nowebrtc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2310
+@@||cloudstorageoptions.com^$ghide
+cloudstorageoptions.com##ins.adsbygoogle
+cloudstorageoptions.com##.adslot_left
+
+! https://github.com/uBlockOrigin/uAssets/issues/2300
+cbc.ca##+js(aopw, xhr.prototype.realSend)
+cbc.ca##.ad-risingstar-container
+cbc.ca##.ad-container
+
+! popups http://assia.tv/live/betsport/?lang=rs
+! https://github.com/AdguardTeam/AdguardFilters/issues/116307
+assia.tv,assia4.com,assia24.com##+js(set, ClickUnder, noopFunc)
+/css/*$frame,domain=assia.tv|assia4.com|assia24.com
+/css/jquerymin*$script,1p,domain=assia.tv|assia4.com|assia24.com
+assia.tv,assia4.com,assia24.com##[class*="ban"]
+assia.tv,assia4.com,assia24.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2327
+dallasnews.com##+js(nostif, initializeCourier, 3000)
+@@||courier-js.dallasnews.com^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/2329
+nulledteam.com##+js(acs, $, userAgent)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=40812
+turbobit.net##+js(acs, decodeURI, decodeURIComponent)
+turbobit.net##+js(aopr, open)
+turbobit.net##+js(popads-dummy)
+
+! https://forums.lanik.us/viewtopic.php?p=136716#p136716
+link.tl##+js(aopr, _0xbeb9)
+link.tl##+js(nano-sib, , 1800)
+||link.tl/interstitial/*$frame,1p
+||link.tl/splash/*$script,1p
+||lnk.news^$csp=sandbox allow-forms allow-same-origin allow-scripts allow-modals allow-orientation-lock allow-pointer-lock allow-presentation allow-top-navigation
+||lnk.parts^$csp=sandbox allow-forms allow-same-origin allow-scripts allow-modals allow-orientation-lock allow-pointer-lock allow-presentation allow-top-navigation
+lnk.news,lnk.parts##+js(aopr, popAdsClickCount)
+lnk.news,lnk.parts##+js(nano-sib, , , 0)
+lnk.news,lnk.parts##+js(nostif, redirectPage)
+lnk.news,lnk.parts##.child-centered.display-300x250
+
+! https://github.com/uBlockOrigin/uAssets/issues/2335
+! https://www.reddit.com/r/uBlockOrigin/comments/bn9n4o/nzbstarscom/
+nzbstars.com##+js(aeld, DOMContentLoaded, ads)
+nzbstars.com##[href="usenetbucket.php"]
+||nzbstars.com/*.gif$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/9814
+@@||frkn64modding.com^$ghide
+frkn64modding.com##+js(no-xhr-if, ad_)
+frkn64modding.com##.ezoic-ad
+
+! https://forums.lanik.us/viewtopic.php?f=96&t=40712
+accordo.it###bglink
+||accordo.it/cloud-assets/x/sfondi/
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=40852
+seatguru.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2359
+vixenless.com##+js(acs, azar, redirect)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2362
+! https://github.com/uBlockOrigin/uAssets/issues/3781
+! https://github.com/uBlockOrigin/uAssets/issues/13164
+! https://github.com/AdguardTeam/AdguardFilters/issues/116483
+camslib.com,camwhores.*,camwhorestv.*##+js(acs, onload)
+camwhores.*,camwhorestv.*##+js(aeld, , Pop)
+camwhores.*,camwhorestv.*##+js(aopr, _wm)
+camwhores.*,camwhorestv.*##+js(aopr, loadTool)
+camwhores.*,camwhorestv.*##+js(nowoif)
+camwhores.*,camwhorez.tv##+js(set, flashvars.adv_pre_src, '')
+camwhores.*,camwhorez.tv##+js(set, flashvars.adv_pre_url, '')
+camwhores.*,camwhorez.tv##+js(set, flashvars.adv_pre_vast, '')
+camwhores.*,camwhorez.tv##+js(set, flashvars.protect_block, '')
+camwhores.*##+js(set, flashvars.video_click_url, '')
+||camwhores.tv/contents/*/preroll$media,important,1p
+||h-cdn.com/loader.js$script,domain=camwhores.tv
+||lexozfldkklgvc.com^$3p
+||virtwishmodels.com^$frame,3p
+camwhores.*,camwhorestv.*##.place
+camwhores.*,camwhorestv.*##[href^="https://go.schjmp.com"]
+camwhores.*,camwhorestv.*##.row-models
+camwhores.*,camwhorestv.*##.topad
+camwhores.*,camwhorestv.*###list_videos_friends
+*pre-roll$media,redirect=noopmp4-1s,domain=camwhores.tv,important
+/\/[0-9a-f]{12}\.js$/$script,1p,domain=camvideos.org|camwhores.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/2364
+! https://github.com/uBlockOrigin/uAssets/issues/2376
+bestialitytaboo.tv,bestialitysextaboo.com,mujeresdesnudas.club##+js(acs, $, azar)
+bestialitysexanimals.com,bestialporn.com,mujeresdesnudas.club,mynakedwife.video##+js(aopr, open)
+zootube1.com##+js(aopr, popunderSetup)
+zootube1.com##+js(cookie-remover, da325)
+zootube1.com##+js(aost, document.cookie, https)
+videoszoofiliahd.com##+js(aopr, open)
+videoszoofiliahd.com##+js(aeld, /^(?:click|mousedown)$/, popunder)
+asiananimaltube.org,zoosex.pink##+js(nowoif)
+videoszoofiliahd.com##[href^="https://redirect.ero-advertising.com/"]
+allbestiality.com,beastwomans.com,beastzoo.org,bestialitysexvideos.com,bestialitytaboo.tv,bestialityworld.org,bestialporn.net,bestialzoo.*,fakingszoo.com,hispajotes.com,portalzoo.com,videosbizarre.com,zoofiliak9.com,zoofilianet.com,zoofiliataboo.com,zookings.com,zoosexnet.com,zoosexsite.com,zootubex.tv,zootubex.us##[href^="https://www.skypeis"]
+! https://github.com/uBlockOrigin/uAssets/issues/2364#issuecomment-393353226
+porntopic.com##+js(aopr, loadTool)
+||grtyb.com^$3p
+! https://github.com/uBlockOrigin/uAssets/issues/2364#issuecomment-406739691
+xxxtubezoo.com,zooredtube.com##+js(aopr, popunderSetup)
+xxxtubezoo.com,zooredtube.com##+js(aeld, DOMContentLoaded, preventExit)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2364
+hdbraze.com##+js(acs, Math.floor, hilltop)
+||hdbraze.com/sw.js$script,1p
+hdbraze.com##.ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/2365
+fapdig.com##+js(acs, document.createElement, 'script')
+||fapdig.com/sw.js$script,1p
+||pornbraze.com/popup.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/2366
+! https://github.com/uBlockOrigin/uAssets/issues/2367
+! https://github.com/uBlockOrigin/uAssets/issues/2368
+! https://github.com/uBlockOrigin/uAssets/issues/2379
+! https://github.com/uBlockOrigin/uAssets/issues/3292
+pornbraze.com##.adv-square
+pornbraze.com/sw.js$script,1p
+! https://github.com/uBlockOrigin/uAssets/issues/1604
+! https://github.com/uBlockOrigin/uAssets/issues/4487
+fembed.com##+js(aopr, decodeURI)
+fembed.com##+js(aeld, /^(?:click|mousedown)$/, _0x)
+fembed.com##+js(disable-newtab-links)
+fembed.com##+js(nosiif, (), 500)
+@@||fembed.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/2370
+videos1002.com##+js(acs, $, azar)
+videos1002.com##+js(aopr, jsPopunder)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2377
+ancensored.com,ganool.*##+js(aeld, /^(?:click|mousedown)$/, _0x)
+ganool.*##+js(nowebrtc)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=40357
+! https://github.com/uBlockOrigin/uAssets/issues/661
+@@||boards.net^$ghide
+@@||freeforums.net^$ghide
+@@||proboards.com^$ghide
+/tortoise.min.js$domain=boards.net|freeforums.net|proboards.com
+boards.net,freeforums.net,proboards.com##+js(acs, $, vglnk)
+boards.net,freeforums.net,proboards.com##[id^="ad-"], #remove_ads_link
+proboards.com###ad1
+
+! https://github.com/uBlockOrigin/uAssets/issues/2414
+acortarm.xyz##+js(aeld, mousedown, trigger)
+acortarm.xyz##+js(set, Ok, true)
+||ref-dir.xyz^$popunder
+
+! https://github.com/uBlockOrigin/uAssets/issues/2415
+inkapelis.*##+js(acs, setTimeout, aadblock)
+inkapelis.*##+js(aopr, AaDetector)
+inkapelis.*##+js(aopw, smrtSB)
+inkapelis.*##+js(aopw, smrtSP)
+inkapelis.*##+js(aopw, Fingerprint2)
+inkapelis.*##+js(acs, decodeURI, decodeURIComponent)
+||inkapelis.*/sw.js$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/2416
+cuevana3.*##+js(aopr, S9tt)
+cuevana3.*##+js(aopr, decodeURI)
+cuevana3.*##+js(aopw, popUpUrl)
+player.cuevana.ac##+js(nowoif, , 10)
+||player.cuevana.ac/cdn-cgi/trace$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/2423
+yoututosjeff.*##+js(aopw, adBlockDetected)
+yoututosjeff.*##+js(aeld, load, 2000)
+||googlesyndication.com/pagead/$script,redirect=noopjs,domain=yoututosjeff.es
+
+! https://github.com/uBlockOrigin/uAssets/issues/2426
+efukt.com##+js(aeld, click, preventDefault)
+efukt.com##+js(nostif, _0x, 2000)
+efukt.com##+js(aopr, open)
+||syndication.twitter.com/i/jot$frame,domain=efukt.com,important
+efukt.com##[href^="https://efukt.com/videos/naughty/"]
+efukt.com##.hide_before:has([href*="?utm_source=efukt"])
+efukt.com##div.tile:has(a[href^="https://efukt.com/out.php"])
+efukt.com##.efukt-widget-slider-nice-try-adblockers
+efukt.com##.plugs-nice-try-adblockers
+
+! https://github.com/uBlockOrigin/uAssets/issues/2428
+gtaall.com##+js(nowebrtc)
+gtaall.com##+js(aopr, Notification)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2434
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=arlinadzgn.com|idntheme.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2444
+fotbolltransfers.com##+js(aopr, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2445
+androidaba.*##+js(aopw, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2446
+! https://github.com/NanoAdblocker/NanoFilters/issues/229
+ilpuntotecnico.com##[style^="text-align:center; height:"][style$="px;"]
+@@||ilpuntotecnico.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/2449
+! https://github.com/AdguardTeam/AdguardFilters/issues/147765
+a2zapk.*##+js(acs, atob, decodeURIComponent)
+a2zapk.*##+js(aopr, AaDetector)
+||a2zapk.*/js/notification.js
+@@||a2zupload.com^$ghide
+@@||googlesyndication.com/pagead/$script,domain=a2zupload.com
+@@*$image,domain=a2zupload.com
+a2zapk.*,a2zupload.com##ins.adsbygoogle
+a2zapk.*,educatiocenter.online##+js(acs, $, alertmsg)
+@@||dl.a2zapk.*/getred.php$xhr,domain=a2zapk.*|educatiocenter.online
+@@||tmp.a2zapk.*/js/advertisement/$frame,domain=a2zapk.*|educatiocenter.online
+||googlesyndication.com^$image,redirect-rule=1x1.gif,domain=a2zapk.*|educatiocenter.online
+
+! https://github.com/uBlockOrigin/uAssets/issues/8292#issuecomment-955193548
+o2tvseries.com##+js(aeld, /^(?:click|mousedown)$/, _0x)
+o2tvseries.com##+js(aopr, AaDetector)
+o2tvseries.com##+js(nosiif, visibility, 1000)
+o2tvseries.com##+js(nowebrtc)
+*$script,redirect-rule=noopjs,domain=o2tvseries.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/phaeom/gaming_adult_ads_not_blocked/
+! https://github.com/uBlockOrigin/uAssets/issues/12966
+! https://github.com/uBlockOrigin/uAssets/issues/16178
+! https://github.com/uBlockOrigin/uAssets/issues/18232
+! https://github.com/uBlockOrigin/uAssets/issues/18317
+igg-games.com##+js(acs, addEventListener, document.createElement)
+*$script,3p,domain=igg-games.com|bluemediafile.sbs,denyallow=cloudflare.com|fastcomments.com|googleapis.com|addtoany.com
+igg-games.com##+js(aopw, btoa)
+igg-games.com##+js(ra, srcdoc, iframe)
+||igg-games.com/sw.js$script,1p,important
+@@||igg-games.com^$script,1p
+igg-games.com##[href^="https://tm-offers"]
+@@||igg-games.com^$ghide
+igg-games.com#@#.uk-panel.widget-text
+igg-games.com##.uk-panel.widget-text:style(height: 0px !important; visibility: collapse;)
+igg-games.com##a[href^="https://igg-games.com/nfl"]
+igg-games.com##.widget_advads_ad_widget
+||igg-games.*/*.gif$image,1p
+pcgamestorrents.com##[href*="banner"]
+igg-games.g3g.ink##[href$=".php"]
+igg-games.*,pcgamestorrents.com##[src$=".avif"]
+||pcgamestorrents.com/*.gif$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/2458
+pornrabbit.com##+js(nowoif)
+||pornrabbit.com/sw.js$script,1p
+pornrabbit.com##.stage-promo
+pornrabbit.com##.footer-margin
+pornrabbit.com##.table
+
+! https://github.com/uBlockOrigin/uAssets/issues/2457
+camwhoresbay.com##+js(acs, readCookieDelit)
+camwhoresbay.com##div.opt
+camwhoresbay.com##.fake-player
+camwhoresbay.com##.content > center:has([style="width:300px;height:250px"])
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/942
+@@||my5.tv^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/2468
+gamepedia.com###bodyContent:style(width:100%!important)
+gamepedia.com##[id^="siderail_"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/2461
+anon-v.com##+js(acs, atob, decodeURI)
+anon-v.com##+js(acs, onload)
+anon-v.com##.embed-container
+anon-v.com##.place
+anon-v.com##.sponsor
+anon-v.com##.table
+||cum-shows.net^$frame,3p
+||cfgr2.com^
+||hrtya.com^
+||nudespree.com/a/av/live.php$frame
+
+! https://github.com/uBlockOrigin/uAssets/issues/2480
+cartoonporno.xxx##+js(aopr, prPuShown)
+cartoonporno.xxx##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2481
+@@||solvettube.com^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/2482
+! https://github.com/uBlockOrigin/uAssets/issues/4779
+! https://github.com/uBlockOrigin/uAssets/issues/10052
+you-porn.com,youporn.*,youporngay.com,youpornru.com##+js(set, page_params.holiday_promo, true)
+youpornru.com##+js(nowoif)
+you-porn.com,youporn.*,youporngay.com,youpornru.com##.ad-bottom-text
+you-porn.com,youporn.*,youporngay.com##.adLinkText
+you-porn.com,youporn.*,youporngay.com,youpornru.com##.adsbytrafficjunky
+you-porn.com,youporn.*,youpornru.com##.e8-column
+you-porn.com,youporn.*##[data-removelink="removeLink"]
+you-porn.com,youporngay.com,youpornru.com###pb_template
+you-porn.com##[id^="adblock"]
+youpornru.com##.adLinkText
+youpornru.com##[data-tracking="track-close-btn-ad"]
+##.trafficjunky-float-right
+! https://github.com/uBlockOrigin/uAssets/issues/2482#issuecomment-395244585
+redtube.*##+js(acs, Object.defineProperty, trafficjunky)
+redtube.*##+js(nowoif)
+redtube.*##+js(set, page_params.holiday_promo, true)
+redtube.*##.abovePlayer
+redtube.*##.adsbytrafficjunky
+redtube.*##li:has(.adsbytrafficjunky)
+redtube.*##.remove_ads
+! mirror
+9908ww.com,adelaidepawnbroker.com,bztube.com,hotovs.com,insuredhome.org,nudegista.com,pornluck.com,vidd.se##+js(set, page_params.holiday_promo, true)
+
+! anti adb https://www.tvserial.it/the-generi-serie-tv-sky-maccio-capatonda-video/
+@@||tvserial.it^$ghide
+@@||exmarketplace.com^$domain=tvserial.it
+tvserial.it##.gptslot
+
+! https://github.com/uBlockOrigin/uAssets/issues/2484#issuecomment-395174594
+foumovies.*##+js(aopw, decodeURIComponent)
+fullywatchonline.com,myvidmate.*##+js(acs, atob, decodeURIComponent)
+hubfiles.ws##+js(nowoif)
+hubfiles.ws##+js(nano-stb)
+moviescounter.*##+js(aopr, LieDetector)
+moviescounter.*##+js(aeld, , _0x)
+/watchbutton11.png$image
+/download11.png$image
+mydownloadtube.*##.movie-box > .vert-add
+||vuwomoby.pro^
+
+! https://github.com/uBlockOrigin/uAssets/issues/4349
+douploads.*##+js(acs, $, show)
+douploads.*##+js(ra, checked, input#chkIsAdd)
+douploads.*##[href^="https://href.li/"]
+||douploads.*/*sw$script,1p
+@@||douploads.*^$ghide
+douploads.*##a[rel="nofollow"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/2487
+@@||v.fwmrm.net/ad/*$script,domain=funimation.com
+||mediausamns-a.akamaihd.net^$media,domain=funimation.com
+funimation.com##+js(json-prune, adRenderers)
+*$media,redirect=noopmp3-0.1s,domain=funimation.com
+@@||media.truex.com/integration/vpaid/com.truex.TrueXRenderer.js$script,domain=funimation.com
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=funimation.com
+@@||pubads.g.doubleclick.net/gampad/ads*.funimation.com*player$xhr,domain=imasdk.googleapis.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/8p8sin/is_there_a_way_to_block_those_ads_without/
+autobild.de##+js(aopr, adSSetup)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2498
+alimaniac.com##+js(aopr, document.cookie)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2503
+hulkshare.com##+js(nosiif, adblockerModal, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2505
+! https://github.com/NanoMeow/QuickReports/issues/4583
+! https://github.com/uBlockOrigin/uAssets/issues/8137
+! https://github.com/notifications?query=
+kickassanime.*##+js(set, ifmax, true)
+@@||kickassanime.*^$ghide
+kickassanime.*##.ka-axx-wr
+
+! https://www.reddit.com/r/uBlockOrigin/comments/8prah0/ads_script_ublock_cant_block_since_months
+springfieldspringfield.co.uk##+js(nostif, ads, 750)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2513
+mcoc-guide.com#@#ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/2515
+porngun.net##.video:not([id])
+
+! https://github.com/uBlockOrigin/uAssets/issues/2527
+mp3fy.com##+js(nostif, nextFunction, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2529
+ebookmed.*##+js(aeld, load, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2533
+@@||appvn.com^$ghide
+appvn.com##.ads
+appvn.com##.downloadtitle
+appvn.com###info:style(display: block !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2537
+@@||worldofbitco.in^$ghide
+worldofbitco.in,weatherx.co.in##+js(set, adBlock, false)
+worldofbitco.in,weatherx.co.in##+js(set, spoof, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2540
+dailyfreebits.com##+js(acs, $, html)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2538
+@@||getyourbitco.in^$ghide
+getyourbitco.in##+js(set, adBlock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7836
+! https://github.com/uBlockOrigin/uAssets/issues/13508
+! https://github.com/uBlockOrigin/uAssets/issues/14372
+sbs.com.au##+js(set, adBlockerDetected, undefined)
+sbs.com.au##+js(m3u-prune, /redirector\.googlevideo\.com\/videoplayback\?[\s\S]*?dclk_video_ads/, pubads.g.doubleclick.net/ondemand/hls/)
+sbs.com.au##+js(no-xhr-if, /redirector\.googlevideo\.com\/videoplayback[\s\S]*?dclk_video_ads/)
+sbs.com.au##+js(json-prune, ads breaks cuepoints times)
+sbs.com.au##+js(rc, ad-controls, .bitmovinplayer-container.ad-controls)
+||pubads.g.doubleclick.net/ondemand/hls/content/*/streams$xmlhttprequest,redirect=noop.txt,domain=sbs.com.au
+||redirector.googlevideo.com/*&source=dclk_video_ads&$redirect=noop.txt,domain=sbs.com.au,important,image,media,subdocument,stylesheet,script,xmlhttprequest,other
+@@||pubads.g.doubleclick.net/ondemand/hls/content/*/vid/*/streams$domain=sbs.com.au
+@@||pubads.g.doubleclick.net/ssai/event/$xmlhttprequest,domain=sbs.com.au
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$domain=sbs.com.au
+sbs.com.au##^script:has-text(NREUM)
+@@||sbs.com.au^$ghide
+@@/ad/banner/_adsense_/_adserver/_adview_.ad.json$1p
+@@||sbs.com.au/ondemand/ad/peel1.js$script,domain=sbs.com.au
+*$script,3p,redirect-rule=noopjs,domain=sbs.com.au
+
+! https://github.com/uBlockOrigin/uAssets/issues/2547
+neko-miku.com##+js(aeld, load, nextFunction)
+||player.neko-miku.com/*slot$media,redirect=noopmp4-1s,domain=neko-miku.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1322
+! http://www.subtorrents.io/series/the-durrells/ popups
+subtorrents.*,subtorrents1.*##+js(aopr, capapubli)
+subtorrents.*,subtorrents1.*##+js(aopr, getUrlParameter)
+subtorrents.*,subtorrents1.*##+js(nowebrtc)
+subtorrents.*,subtorrents1.*##+js(noeval)
+subtorrents.*,subtorrents1.*##+js(popads-dummy)
+subtorrents.*,subtorrents1.*##+js(set, btoa, null)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2557
+lordpremium.*##+js(aeld, load, nextFunction)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2559
+tranny.one##+js(popads-dummy)
+tranny.one##+js(aopr, open)
+tranny.one##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+tranny.one##.adsFirst
+tranny.one##.adsSecond
+tranny.one##.squarecont
+||tranny.one/trannystatic/ads/
+
+! https://github.com/uBlockOrigin/uAssets/issues/2562
+pornhost.com##+js(aopw, encodeURIComponent)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/8rer61
+loveroms.*##+js(acs, decodeURI, decodeURIComponent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2535
+! https://github.com/uBlockOrigin/uAssets/issues/2536
+! https://github.com/uBlockOrigin/uAssets/issues/2555
+! https://github.com/uBlockOrigin/uAssets/issues/2564
+! https://github.com/uBlockOrigin/uAssets/issues/2565
+! https://github.com/uBlockOrigin/uAssets/issues/2566
+! https://github.com/uBlockOrigin/uAssets/issues/2567
+! https://github.com/uBlockOrigin/uAssets/issues/2568
+! https://github.com/uBlockOrigin/uAssets/issues/2569
+! https://github.com/uBlockOrigin/uAssets/issues/2570
+! https://github.com/uBlockOrigin/uAssets/issues/2571
+! https://github.com/uBlockOrigin/uAssets/issues/2572
+! https://github.com/uBlockOrigin/uAssets/issues/2573
+! https://github.com/uBlockOrigin/uAssets/issues/2574
+! https://github.com/uBlockOrigin/uAssets/issues/2575
+! https://github.com/uBlockOrigin/uAssets/issues/2576
+! https://github.com/uBlockOrigin/uAssets/issues/2577
+! https://github.com/uBlockOrigin/uAssets/issues/2584
+! https://github.com/uBlockOrigin/uAssets/issues/2585
+! https://github.com/uBlockOrigin/uAssets/issues/2586
+! https://github.com/uBlockOrigin/uAssets/issues/2587
+! https://github.com/uBlockOrigin/uAssets/issues/2588
+! https://github.com/uBlockOrigin/uAssets/issues/2589
+! https://github.com/uBlockOrigin/uAssets/issues/2590
+! https://github.com/uBlockOrigin/uAssets/issues/2591
+1xxx-tube.com,asssex-hd.com,bigcockfreetube.com,bigdickwishes.com,enjoyfuck.com,freemomstube.com,fuckmonstercock.com,gobigtitsporn.com,gofetishsex.com,hard-tubesex.com,hd-analporn.com,hiddencamstube.com,kissmaturestube.com,lesbianfantasyxxx.com,modporntube.com,pornexpanse.com,pornokeep.com,pussytubeebony.com,tubesex.me,vintagesexpass.com,voyeur-pornvideos.com,voyeurspyporn.com,voyeurxxxfree.com,xxxtubenote.com,yummysextubes.com##+js(aopr, Aloader.serve)
+1xxx-tube.com,asssex-hd.com,bigcockfreetube.com,bigdickwishes.com,enjoyfuck.com,freemomstube.com,fuckmonstercock.com,gobigtitsporn.com,gofetishsex.com,hard-tubesex.com,hd-analporn.com,hiddencamstube.com,kissmaturestube.com,lesbianfantasyxxx.com,modporntube.com,pornexpanse.com,pornokeep.com,pussytubeebony.com,tubesex.me,vintagesexpass.com,voyeur-pornvideos.com,voyeurspyporn.com,voyeurxxxfree.com,xxxtubenote.com,yummysextubes.com##+js(noeval)
+1xxx-tube.com###invideo_3
+enjoyfuck.com,pornokeep.com##.advin
+fuckmonstercock.com##.znaipn
+fuckmonstercock.com##.ztkady
+kissmaturestube.com,yummysextubes.com##.block-a
+pornexpanse.com##.banners_pl
+pussytubeebony.com##div.banner-area
+tubesex.me##.adban1
+
+! https://github.com/uBlockOrigin/uAssets/issues/2582
+||uii.io^$csp=script-src 'self' 'unsafe-inline' 'unsafe-eval' data: *.gstatic.com *.google.com *.googletagmanager.com *.recaptcha.net
+uii.io##+js(noeval)
+uii.io##+js(nowebrtc)
+uii.io##+js(nowoif)
+@@||uii.io^$ghide
+*$frame,denyallow=google.com|hcaptcha.com,domain=uii.io
+uii.io##.banner
+uii.io##a[href^="https://href.li/"]
+uii.io##a[href^="http://mob1ledev1ces.com/"]
+uii.io##body > div[style]:has(input[type="button"])
+uii.io##div[style*="z-index:99999"] > div[style*="width:300px"]
+! https://github.com/uBlockOrigin/uAssets/issues/2582#issuecomment-490780661
+!#if env_chromium
+uii.io##+js(aeld, mouseup, _blank)
+uii.io#@#+js(noeval)
+!#endif
+
+! https://forums.lanik.us/viewtopic.php?p=137876#p137876
+lebensmittelpraxis.de##+js(nostif, nextFunction, 2000)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/8rnrsa
+telemundodeportes.com##+js(set, adBlockEnabled, false)
+@@||v.fwmrm.net/ad/$xhr,domain=telemundodeportes.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2606
+ojogos.com.br##+js(set, sp_ad, true)
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=witchhut.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2605
+studopedia.org##+js(aopw, detectAdblk)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2614
+sheamateur.com##+js(aopr, __htapop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2615
+nekopoi.*##+js(acs, atob, tabunder)
+nekopoi.*##+js(aeld, , adsense)
+nekopoi.*##[href^="http://bit.ly/"]
+*.gif$domain=nekopoi.*,image
+
+! https://www.reddit.com/r/assholedesign/comments/8scqdg/no_journalists_should_go_unpaid/e0ycqf7/
+||d3jcjsor8fnmka.cloudfront.net^
+
+! https://github.com/uBlockOrigin/uAssets/issues/2618
+ccn.com##.widget:has-text(/advert|sponsor/i)
+ccn.com##.row.divider:has-text(/sponsor|press releases/i)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7334
+! https://vinaurl.net/PTOK4d
+vinaurl.*##+js(aopr, app_vars.force_disable_adblock)
+vinaurl.*##+js(aopr, open)
+vinaurl.*##+js(aopw, adsHeight)
+vinaurl.*##+js(ra, onmousemove, button)
+vinaurl.*##+js(set, blurred, false)
+||dembuon.vn/lib/flies/flier.js$script,domain=vinaurl.*
+||i.imgur.com^$image,domain=vinaurl.*
+vinaurl.*###ads-notice
+vinaurl.*##[href^="https://dembuon.vn"]
+vinaurl.*##.alert-danger
+vinaurl.*##[href^="https://kttm.club/"]
+||vinaurl.*/*png
+! https://loptelink.com/oLpaN
+gamelopte.com##+js(nano-sib, yuidea-, *)
+loptelink.com##+js(set, blurred, false)
+loptelink.com##center > a[href^="https://loptelink.com/ref/"] > img
+||googleusercontent.com/*/s320/download-button-gif-$domain=loptelink.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2628
+! https://github.com/NanoMeow/QuickReports/issues/680
+powforums.com##+js(set, adsBlocked, false)
+powforums.com##+js(nowoif)
+@@||powforums.com/js/*$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/2637
+usgamer.net##+js(set, _sp_.msg.displayMessage, noopFunc)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/112
+wallpapersmania.com##.js_disabled
+wallpapersmania.com###cpa_wrap
+
+! https://github.com/uBlockOrigin/uAssets/issues/2645
+megacams.me##+js(aeld, load)
+@@||chaturbate.com/affiliates/$frame,domain=megacams.me
+megacams.me#@#a[href^="https://chaturbate.com/affiliates/"]
+@@||chaturbate.com^$popup,domain=megacams.me
+
+! https://github.com/uBlockOrigin/uAssets/issues/2647
+sexviacam.com#@#a[href^="https://chaturbate.com/affiliates/"]
+@@||chaturbate.com^$frame,domain=sexviacam.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/3568
+porndoe.com##+js(aopr, open)
+porndoe.com##+js(aeld, click, pop_under)
+porndoe.com##+js(nostif, location.href, 500)
+||porndoe.com/movie/preroll/$media,1p
+||porndoe.com/wp-contents/video?id=$frame
+porndoe.com##.player-right
+porndoe.com##.-h-ticker
+##[href^="https://t.mobtyb.com/"]
+||porndoe.com^$csp=connect-src 'self'
+
+! https://github.com/uBlockOrigin/uAssets/issues/2649
+naughtymachinima.com##+js(acs, __htapop)
+naughtymachinima.com##.col-md-8 > a[href][target="_blank"]
+||chaturbate.com^$frame,domain=naughtymachinima.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/10336
+!uploadbank.com##+js(aost, Math, /(?=^(?!.*(api|jquery|inlineScript|form|Progress)))/)
+uploadbank.com###container > div[style="width:970px; height:200px;"]
+uploadbank.com##+js(set, console.clear, noopFunc)
+@@||uploadbank.com^$ghide
+uploadbank.com##+js(nowoif)
+uploadbank.com###iframeCore____
+||uploadbank.com/js/abcode.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/2652
+! https://github.com/uBlockOrigin/uAssets/issues/2742
+filecrypt.*##+js(acs, decodeURIComponent, replace)
+filecrypt.*##+js(acs, parseInt, open)
+filecrypt.*##+js(aopr, __pop_debugX)
+filecrypt.*##+js(set, isAdblock, false)
+||filecrypt.*^$popunder
+@@||cutcaptcha.com/captcha/*$script,domain=filecrypt.cc|filecrypt.co
+filecrypt.*##div:has(> [href*=".html"])
+filecrypt.*###jvb
+filecrypt.*##li:has-text(100% Anonym)
+filecrypt.*##.bums
+filecrypt.*##.support
+filecrypt.*##[src^="https://filecrypt.cc/images/"]
+filecrypt.*##[src^="../../../images/"]
+filecrypt.*##[href^="/xux/"]
+filecrypt.*##div[class] > i[style*="background:url"][onclick*="openLink"]
+filecrypt.*##+js(ra, onclick, button[id][onclick*=".html"])
+filecrypt.*##div[class] > i[style][onclick]
+filecrypt.*##button[id]:has-text(/High-speed/i)
+sharer.pw###overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/2655
+! https://github.com/uBlockOrigin/uAssets/issues/3262
+! https://github.com/uBlockOrigin/uAssets/issues/11241
+||pornblade.com/*.php
+||twincdn.com^$3p,script,image
+||pornblade.com^$xhr,1p
+||pornfelix.com^$xhr,1p
+hd-easyporn.com,pornblade.com,pornfelix.com##.vjs-overlayed
+hd-easyporn.com,pornblade.com,pornfelix.com###wrapper_content > aside[id]
+pornblade.com###e_v + aside[id]
+*$xhr,3p,domain=hd-easyporn.com
+hd-easyporn.com##[rel*="sponsored"]
+||pornojenny.com/api/widget/$3p
+/static/exnb/froload.js?v=$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/2657
+asianxxxvideo.net##+js(aopw, ExoLoader)
+asianxxxvideo.net##.a_all
+asianxxxvideo.net##.play
+
+! https://github.com/uBlockOrigin/uAssets/issues/2651
+! https://github.com/uBlockOrigin/uAssets/issues/14352
+channel4.com##+js(no-xhr-if, /\/ad\/g\/1/)
+channel4.com##.advertsMpu
+channel4.com##.block--mpu
+
+! https://github.com/uBlockOrigin/uAssets/issues/2658
+webs.com.gt##+js(acs, jQuery, Adblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2659
+filehorse.com##+js(set, isAdBlockActive, false)
+@@||mygoroot.com^$ghide
+@@||unlockvungtau.com^$ghide
+! https://github.com/uBlockOrigin/uAssets/issues/6572
+gsm-solution.com##+js(aopr, _0x32d5)
+gsm-solution.com###adblock-blocker-overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/2660
+@@||motortrendondemand.com/advertisements-ad-unit/*$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/2661
+ettv.*##+js(nowoif)
+ettv.*##+js(aopr, AaDetector)
+ettv.*##:xpath('//*[contains(text(),"VPN")]'):upward(2)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2668
+pelisgratis.*##+js(aopw, smrtSB)
+pelisgratis.*##a[href*="look.kfiopkln.com"]
+pelisgratis.*##a[href*="look.opskln.com"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/2670
+! https://github.com/uBlockOrigin/uAssets/issues/5279
+ver-pelis.*##+js(nowoif)
+ver-pelis.*##+js(acs, decodeURI, decodeURIComponent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2671
+newpelis.*,pelix.*##+js(aeld, , 0x)
+newpelis.*,pelix.*##+js(set, btoa, null)
+newpelis.*,pelix.*##+js(nowoif)
+newpelis.*,pelix.*##+js(aeld, load, url)
+newpelis.*,pelix.*##+js(aopw, smrtSB)
+newpelis.*,pelix.*##+js(aopw, smrtSP)
+pelix.*##+js(aopr, AaDetector)
+pelix.*##+js(aopw, adcashMacros)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2672
+peliculas24.*##+js(acs, blur)
+peliculas24.*##+js(aopw, smrtSB)
+peliculas24.*##[href^="http://refpadsm.host/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/2679
+topvideosgay.com##+js(aopr, open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2681
+kissjav.*##.column:has(> .card > .adv)
+kissjav.*##.is-12-touch.is-narrow-desktop.has-text-centered
+kissjav.*##+js(aost, atob, _0x)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2666
+capo2play.com##+js(acs, document.createElement, onerror)
+*$popup,domain=extremotvplay.com,3p
+/skipad.png$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/2694
+ihackedgames.com##+js(aopr, decodeURIComponent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2696
+yxzero.xyz##+js(aopr, adBlockDetected)
+
+! https://forums.lanik.us/viewtopic.php?p=155287&sid=9a160e54c765d0ee355eaf9be7ed45e8#p155287
+! https://github.com/uBlockOrigin/uAssets/issues/9831
+onlinevideoconverter.*##+js(nowoif)
+@@||onlinevideoconverter.*^$ghide
+onlinevideoconverter.*##.music-container > div[style] > a[href][target] > img
+
+! https://github.com/uBlockOrigin/uAssets/issues/2697
+elsfile.org##+js(aeld, load, nextFunction)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2706
+pnd.*##+js(aopr, AaDetector)
+pnd.*##+js(aopw, Fingerprint2)
+pnd.*##A[href$=".html"][rel="nofollow norefferer noopener"]
+pnd.*##.banner-captcha
+
+! https://github.com/uBlockOrigin/uAssets/issues/2709
+! https://github.com/uBlockOrigin/uAssets/issues/5750
+freebitcoin.win##+js(aopr, adBlockDetected)
+freebitcoin.win##+js(set, CaptchmeState.adb, undefined)
+@@||freebitcoin.win^$ghide
+freebitcoin.win##.wrapper > .section > .container > .row > div.d-md-block.d-none.col-md-3
+freebitcoin.win##.col-md-12
+||clprr.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/2709#issuecomment-401538448
+e-monsite.com##+js(set, CaptchmeState.adb, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2709#issuecomment-402537225
+coindice.win##+js(set, CaptchmeState.adb, undefined)
+coindice.win##+js(aopr, adBlockDetected)
+@@||coindice.win^$ghide
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/117#issuecomment-401351982
+planet-explorers-isos.com##+js(set, adblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2711
+plusone8.com##+js(aopr, ExoLoader.serve)
+plusone8.com###overlay-advertising
+
+! https://github.com/uBlockOrigin/uAssets/issues/2712
+camvideos.tv##.thumbs-items
+||bblivecams.com^$frame,3p
+||gldrdr.com^$frame,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/2715
+lanjutkeun.*##+js(aeld, load, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2713
+xrares.com##+js(acs, decodeURI, decodeURIComponent)
+xrares.com##+js(disable-newtab-links)
+xrares.com###linkedblok
+xrares.com##.absd-body:not(.row + .well)
+xrares.com##[href^="/plugout.php"]:upward([class^="col-sm"])
+||xrares.com/sw.js$script,1p
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/958
+||shidurlive.com/adz*.html$frame
+||tvbarata.club/ads/*$frame
+
+! https://github.com/uBlockOrigin/uAssets/issues/2717
+@@||filmix.co^$ghide
+||googleads.g.doubleclick.net/pagead/$xhr,redirect=nooptext,domain=filmix.co
+||protovid.com/preroll/$media,redirect=noopmp3-0.1s,domain=filmix.co
+
+! https://github.com/uBlockOrigin/uAssets/issues/2722
+adfloz.*##+js(nowoif)
+adfloz.*##+js(set, blurred, false)
+adfloz.*##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/2729
+aliancapes.*##+js(nostif, nextFunction, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2748
+radiotormentamx.com##+js(aeld, load, onload)
+
+! https://github.com/uBlockOrigin/uAssets/issues/324
+! https://github.com/uBlockOrigin/uAssets/issues/2762
+! https://github.com/uBlockOrigin/uAssets/issues/2763
+! https://github.com/uBlockOrigin/uAssets/commit/6732af10e9174c868938d10e944a8bd4cb2a50ca#commitcomment-29589001
+*/rellect/AdblockDetector/handler.min.js$script,important,redirect=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/4734
+torrentz2eu.*##+js(aopr, glxopen)
+torrentz2eu.*##+js(acs, decodeURI, decodeURIComponent)
+torrentz2eu.*##+js(acs, $, open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2770
+@@||sport-tv-guide.live^$ghide
+sport-tv-guide.live##ins.adsbygoogle
+*$frame,domain=sport-tv-guide.live,redirect-rule=noopframe
+
+! https://github.com/uBlockOrigin/uAssets/issues/2773
+acienciasgalilei.com##+js(aeld, load, adverts-top-container)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2774
+22pixx.xyz##+js(ra, onclick, button[name="imgContinue"][onclick])
+22pixx.xyz##^script:has-text('shift')
+22pixx.xyz##^script:has-text(\'shift\')
+22pixx.xyz##+js(aopr, AdservingModule)
+22pixx.xyz##+js(aopr, ExoLoader.addZone)
+22pixx.xyz##+js(aopr, _pop)
+22pixx.xyz##+js(ra, target, #continuetoimage > [href])
+22pixx.xyz##+js(ra, href|target, #continuetoimage > [href][onclick]\, #overlayera > #ajax_load_indicator > #page_effect > [href][onclick])
+22pixx.xyz##[class^="resp-container"]
+*$frame,3p,domain=22pixx.xyz
+
+! https://github.com/uBlockOrigin/uAssets/issues/2787
+smsget.net##+js(nostif, Adblock, 5000)
+smsget.net##+js(nostif, disable, 200)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2788
+! https://github.com/uBlockOrigin/uAssets/issues/8458
+temp-mails.com##+js(acs, document.getElementById, AdBlock)
+temp-mails.com##+js(set, indexedDB.open, trueFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2791
+zigforums.com##+js(no-xhr-if, googlesyndication)
+zigforums.com##+js(aopw, adsBlocked)
+@@||zigforums.com/js/*$xhr,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/8whmpf/any_idea_how_bypass_this_block_detection/
+kjanime.net##+js(nostif, CekAab, 0)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2801
+soft112.com##+js(nano-sib)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2800
+popmatters.com##+js(aopr, CatapultTools)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2806
+goto.com.np##+js(aopr, open)
+goto.com.np##+js(nano-sib, timeLeft)
+link.goto.com.np##.wpsafe-top > div > center:has-text(Advertisements)
+*$frame,3p,domain=goto.com.np
+
+! https://www.reddit.com/r/uBlockOrigin/comments/8xhann/getting_around_antiadblock_on_a_wiki_site/
+undeniable.info##+js(acs, document.getElementById, testadblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2831
+transparentcalifornia.com##+js(set, $.magnificPopup.open, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2832
+klartext-ne.de##+js(acs, document.addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2812
+! https://github.com/NanoMeow/QuickReports/issues/353
+titsbox.com##+js(aeld, click, exopop)
+titsbox.com##+js(nowoif)
+*$script,3p,domain=titsbox.com
+titsbox.com##[class*="banners"]
+||titsbox.com/iframe/*_NTV_
+||titsbox.com/js/pns.min.js
+! https://github.com/uBlockOrigin/uAssets/issues/1121
+zmovs.com##+js(nowoif)
+zmovs.com##+js(aopr, ALoader)
+||zmovs.com/js/pns.min.js
+||zmovs.com/nb/
+
+! https://github.com/uBlockOrigin/uAssets/issues/2813
+spycock.com##+js(aopr, document.dispatchEvent)
+spycock.com##+js(aopw, Fingerprint2)
+spycock.com##+js(nowoif)
+||spycock.com/coco/$script
+spycock.com##.footer-banner-wrapper
+spycock.com###advertising
+jizz.us,spycock.com###alfa_promo_parent
+jizz.us,spycock.com##.aside-itempage-col
+||jizz.us/loco/$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/2848
+sandrives.*##+js(nostif, nextFunction, 250)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4885
+! https://github.com/uBlockOrigin/uAssets/issues/12829
+movies123.*##+js(nowoif)
+0123movie.*,movies123.*##+js(aopr, AaDetector)
+movies123.*##[href^="//himekingrow.com/"]
+movies123.*###list-eps:style(display:block!important)
+movies123.*##.les-title:has-text(HD)
+movies123.*##.vip.server-item.le-server:first-child
+
+! https://github.com/uBlockOrigin/uAssets/issues/2877
+freiepresse.de##+js(set, UhasAB, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/8yn0ss
+icy-veins.com##+js(aopr, adbackDebug)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2889
+hiddenobjectgames.com##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/2873
+@@||v.fwmrm.net/ad/$script,domain=fxnetworks.com
+@@||media.truex.com/release/*TrueXRenderer.js$script,domain=fxnetworks.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2897
+files-save.com##+js(popads-dummy)
+@@||files-save.com/Assets/Addon/Css/ads.css$css,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/2901
+@@||fordclub.eu^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/2907
+tetris.com##.horizontalAxContainer
+tetris.com##div[class^="verticalAxContainer"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/2908
+girlsgogames.co.uk##+js(aopr, googletag)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2905
+! https://github.com/uBlockOrigin/uAssets/issues/2909
+||cdn.witchhut.com^$script,domain=ejocuri.ro|gamesheep.com|girlg.com|girlsplay.com|jocurifete.ro|playpod.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/8z405v/ublock_origin_not_catching_google_ads_in_firefox/
+! https://github.com/uBlockOrigin/uAssets/issues/3092
+! https://github.com/uBlockOrigin/uAssets/issues/3994
+! https://github.com/uBlockOrigin/uAssets/issues/4070
+! https://www.reddit.com/r/uBlockOrigin/comments/auik40/first_time_getting_ads_while_using_ublock/
+! https://github.com/NanoMeow/QuickReports/issues/2171
+! added sites using the same ad-reinsertion script
+anallievent.com,au-di-tions.com,badgehungry.com,beingmelody.com,bloggingawaydebt.com,casutalaurei.ro,cornerstoneconfessions.com,culture-informatique.net,dearcreatives.com,disneyfashionista.com,divinelifestyle.com,dna.fr,eslauthority.com,estrepublicain.fr,fitting-it-all-in.com,heresyoursavings.com,irresistiblepets.net,julieseatsandtreats.com,justjared.com,lecturisiarome.ro,lemonsqueezyhome.com,libramemoria.com,lovegrowswild.com,magicseaweed.com,measuringflower.com,mjsbigblog.com,mommybunch.com,mustardseedmoney.com,myfunkytravel.com,onetimethrough.com,panlasangpinoymeatrecipes.com,silverpetticoatreview.com,the-military-guide.com,therelaxedhomeschool.com,the2seasons.com,zeroto60times.com##+js(aopr, __eiPb)
+adivineencounter.com,alcasthq.com,au-di-tions.com,badgehungry.com,bloggingawaydebt.com,chipandco.com,cornerstoneconfessions.com,dearcreatives.com,divinelifestyle.com,eslauthority.com,heresyoursavings.com,investingchannel.com,irresistiblepets.net,justjared.com,kompas.com,lovegrowswild.com,mjsbigblog.com,mommybunch.com,mustardseedmoney.com,myfunkytravel.com,mywomenstuff.com,onetimethrough.com,panlasangpinoymeatrecipes.com,peru21.pe,savespendsplurge.com,savvyhoney.com,silverpetticoatreview.com,tamaratattles.com,the-military-guide.com,the2seasons.com,therelaxedhomeschool.com,thetechieguy.com,truesteamachievements.com,truetrophies.com,waterheaterleakinginfo.com,zeroto60times.com##^script:has-text(axtd)
+justjared.com,truetrophies.com##+js(acs, setTimeout, isIframeNetworking)
+truetrophies.com##+js(aopr, $pxy822)
+truetrophies.com##^script:has-text(isIframeNetworking)
+alcasthq.com##+js(aopr, performance)
+alcasthq.com##+js(acs, Math.floor, axtd)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2920
+cut-fly.com##+js(nowoif)
+cut-fly.com##+js(set, blurred, false)
+cut-fly.com##.banner-inner
+cut-fly.com##form#go-popup:remove()
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/136
+gioialive.it##+js(nostif, rbm_block_active, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18577
+investing.com##+js(no-fetch-if, ads)
+investing.com##[class^="outbrain_outbrain-wrapper"]
+! https://github.com/uBlockOrigin/uAssets/issues/12831
+investing.com##[class*="adBlock"]
+investing.com##[class*="overlay_overlay"]
+investing.com##body:style(overflow: auto !important)
+! https://github.com/uBlockOrigin/uAssets/issues/18310
+investing.com###__next > .fixed
+! https://github.com/uBlockOrigin/uAssets/issues/18731#issuecomment-1613121145
+||investing.com/*/ad-notification-popup
+! https://www.reddit.com/r/uBlockOrigin/comments/14djjud/just_to_let_developers_know_that_investingcom/jqdzkm7/
+investing.com##[class^="ad-notification"]
+! https://www.reddit.com/r/uBlockOrigin/comments/14r9m8a/
+investing.com##[id^="adNotification"]
+! https://github.com/uBlockOrigin/uAssets/issues/18917
+! https://github.com/uBlockOrigin/uAssets/issues/18966
+investing.com##+js(set, adNotificationDetected, false)
+investing.com##[class*="notification_notification"]
+investing.com##div[class]:has(> :is(.ad-blockers-section, [class*="adNotification"]))
+! https://github.com/uBlockOrigin/uAssets/issues/19085#issuecomment-1643681900
+investing.com##.border-b:has(> .box-content[data-test="ad-slot-visible"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/2926
+ausfile.com##+js(aopw, Fingerprint2)
+ausfile.com##+js(aopw, SubmitDownload1)
+ausfile.com##+js(nano-stb)
+@@||ausfile.com^$ghide
+ausfile.com##ins.adsbygoogle
+
+! https://www.reddit.com/r/uBlockOrigin/comments/8zm7bx
+femdomtb.com##+js(nostif, innerText, 2000)
+femdomtb.com##+js(aopr, open)
+femdomtb.com##.bannerImage
+femdomtb.com##div.opt
+femdomtb.com##.place
+
+! https://github.com/uBlockOrigin/uAssets/issues/2938
+! https://www.reddit.com/r/uBlockOrigin/comments/ap353j/help_needed_for_voirfilms/
+@@||voirfilms.*^$ghide
+voirfilms.*##+js(aopw, smrtSB)
+voirfilms.*##+js(nowoif)
+voirfilms.*##.lefermeur
+voirfilms.*##+js(acs, atob, decodeURIComponent)
+||voirfilms.*/sw.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/2946
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=coolgames.com
+@@||g.doubleclick.net/pagead/managed/js/gpt/*/pubads_impl.js$domain=games.coolgames.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2965
+classicreload.com##.ad-wrapper:upward(div.region-sidebar-first-wrapper)
+classicreload.com##+js(nostif, show())
+classicreload.com##.content-top-wrapper
+
+! https://github.com/uBlockOrigin/uAssets/issues/2969
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=stickgames.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2971
+senmanga.com##+js(aopr, AaDetector)
+senmanga.com##[class*="banner"]
+*$script,3p,domain=senmanga.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2972
+mimaletamusical.blogspot.com##+js(nowebrtc)
+mimaletamusical.blogspot.com##+js(aeld, load, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2974
+||cdn.rawgit.com^*/arlinablock.js$script
+||cdn.rawgit.com^*/AdblockRampok.js$script
+
+! https://www.reddit.com/r/uBlockOrigin/comments/90x6vn
+! https://github.com/uBlockOrigin/uAssets/issues/16449
+@@||faucetcrypto.com^$ghide
+||faucetcrypto.com/ads/$frame
+faucetcrypto.com##+js(no-fetch-if, googlesyndication)
+faucetcrypto.com##+js(nosiif, user=null, 1000)
+faucetcrypto.com##.vs-dialog-danger.con-vs-dialog.vs-component
+*$frame,redirect-rule=noopframe,domain=faucetcrypto.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2983
+linkfinal.com##+js(set, blurred, false)
+linkfinal.com##.banner
+linkfinal.com##.blog-content
+
+! https://github.com/uBlockOrigin/uAssets/issues/13864
+hotpornfile.org##+js(aopw, getIfc)
+hotpornfile.org##+js(aeld, getexoloader)
+*$popunder,domain=hotpornfile.org
+hotpornfile.org##+js(nostif, _0x)
+! https://github.com/uBlockOrigin/uAssets/issues/16197
+! https://github.com/uBlockOrigin/uAssets/commit/20f1238c39ff45e17315af334af799feff505ce8#commitcomment-94788494
+search.crowdsearch.net#@##adslot1
+! https://github.com/uBlockOrigin/uAssets/issues/18803
+hotpornfile.org##+js(set, adblockcheck, false)
+hotpornfile.org##+js(nowoif, !bergblock, 10)
+@@||searchwithme.net/redirect?tid=$frame,domain=hotpornfile.org
+||hotpornfile.org/wp-content/themes/hpf-theme/assets/img/search-ash.gif$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/2996
+moviejones.de##+js(acs, document.getElementById, overlayBtn)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3004
+! https://github.com/uBlockOrigin/uAssets/issues/7487
+hackyouriphone.org##+js(nosiif, visibility, 1000)
+hackyouriphone.org##.labeladv
+
+! https://github.com/uBlockOrigin/uAssets/issues/3005
+donnaglamour.it##+js(aopw, adBlockRunning)
+donnaglamour.it##.banner_contest
+
+! https://www.reddit.com/r/uBlockOrigin/comments/91jf4m
+@@||globaltv.com^$ghide
+globaltv.com##.adChoices_overlayContainer
+globaltv.com##.adTile
+globaltv.com##.dynamic-ad-wrapper
+globaltv.com##.footerAd-wrapper
+globaltv.com###_evidon_banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/3019
+repelisgoo.*,repelisgooo.*,repelisgt.*,repelisxd.*,pelisplusgo.*,pelisplusxd.*###ads
+repelisgoo.*,repelisgooo.*,repelisgt.*,repelisxd.*,pelisplusgo.*,pelisplusxd.*##div[class]:has(> div[class] > iframe[src*="/srv-pv/tag-"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/3021
+pelisplus.online##+js(aopw, mz_str)
+pelisplus.online##+js(aopr, popjs.init)
+pelisplus.online##a.fasc-button
+pelisplus.online###custom_html-7
+cine24.online##+js(nowoif)
+cine24.online###publicidad-video
+@@||cine24.online^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/2963
+tornadomovies.*##+js(set, atob, noopFunc)
+||tornadomovies.*/sw.js$script
+tornadomovies.*##[href="/user/premiumregistration"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/3031
+! https://github.com/uBlockOrigin/uAssets/issues/1409
+avgle.com###player_3x2_close:style(opacity: 0 !important; height: 300px !important;)
+avgle.com###ps32-container
+*$3p,popup,domain=avgle.com
+*$frame,script,3p,denyallow=cloudflare.com|cloudflare.net|google.com|gstatic.com|hcaptcha.com|jsdelivr.net|recaptcha.net|webflow.com,domain=avgle.com
+javher.com###popunderLink
+javher.com##.affiliate-card-container
+
+! https://github.com/uBlockOrigin/uAssets/issues/3036
+sexwebvideo.*##+js(aeld, , _blank)
+sexwebvideo.*##+js(set, flashvars.popunder_url, '')
+@@||sexwebvideo.*^$ghide
+sexwebvideo.*##.spot-vertical-wrap
+*banner$domain=sexwebvideo.*,frame
+
+! https://github.com/uBlockOrigin/uAssets/issues/3038
+novelasesp.*##+js(aeld, load, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3043
+playrust.io##+js(aeld, , Date)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3065
+supforums.com##+js(set, adsBlocked, false)
+supforums.com##+js(aopr, htaUrl)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3079
+! https://github.com/uBlockOrigin/uAssets/issues/3287
+||booking.com^$popunder,domain=viamichelin.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/3086
+mp3fiber.com##+js(aeld, /^(?:click|mousedown)$/, _0x)
+mp3fiber.com##+js(aeld, load, nextFunction)
+mp3fiber.com##+js(set, _pop, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3098
+chicoer.com##+js(nostif, n.trigger, 1)
+chicoer.com##+js(set, CnnXt.Event.fire, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3096
+visionias.net##+js(aeld, load, 2000)
+*.gif$domain=www.visionias.net,image
+
+! https://github.com/uBlockOrigin/uAssets/issues/3102
+tennisactu.net##+js(acs, document.getElementById, ads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3114
+xrivonet.info##+js(aopw, Fingerprint2)
+xrivonet.info##+js(aeld, /^(?:click|mousedown)$/, _0x)
+xrivonet.info##+js(nowebrtc)
+xrivonet.info##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3116
+! https://github.com/NanoMeow/QuickReports/issues/185
+suedkurier.de##+js(set, _ti_update_user, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3118
+gounlimited.to##+js(acs, $, adb)
+gounlimited.to##+js(nowoif)
+gounlimited.to##+js(nowebrtc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3115
+! https://www.reddit.com/r/uBlockOrigin/comments/117xsif/
+cbssports.com##div#network-bar-spacer:style(height:0 !important)
+@@||imasdk.googleapis.com/$frame,domain=cbssports.com
+@@||imasdk.googleapis.com/js/sdkloader/$script,domain=cbssports.com
+@@||cbsistatic.com/*/bundles/$script,domain=cbssports.com
+@@||cbssports.com^$ghide
+@@||plotrabbit.com^$script,domain=cbssports.com
+@@||saa.cbssports.com^$script,1p
+@@||discreetquarter.com^$xhr,domain=cbssports.com
+cbssports.com#@#.leaderboard-wrap
+cbssports.com#@#.skybox-top-wrapper
+
+! https://github.com/uBlockOrigin/uAssets/issues/3121
+animeheaven.*##+js(set, check_adblock, true)
+||animeheaven.*/api/pop.php$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/3125
+payskip.org##+js(aeld, DOMContentLoaded, &nbsp)
+payskip.org##+js(aopw, atOptions)
+payskip.org##+js(set, blurred, false)
+payskip.org##+js(ra, onclick)
+||payskip.org/sw.js$script,1p
+||payskip.org/VLC.php$frame,1p
+payskip.org##.box-main center > a[href][target="_blank"] > img
+payskip.org##center > center
+payskip.org###link-view > p
+payskip.org###link-view a[href] > img
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|google.com|gstatic.com|jsdelivr.net|recaptcha.net|tawk.to,domain=payskip.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/3130
+@@||shortit.pw^$ghide
+shortit.pw##+js(nowoif)
+shortit.pw##+js(set, console.clear, noopFunc)
+shortit.pw##+js(set, valid, 1)
+||allcoins.pw/js/ref.js
+||shortit.pw/js/adbb.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/3134
+pirateproxy.*##+js(nowebrtc)
+pirateproxy.*,thehiddenbay.com##+js(acs, String.fromCharCode, decodeURIComponent)
+pirate.*,piratebay.*,pirateproxy.*,proxytpb.*,thepiratebay.*##+js(aeld, /^(?:click|mousedown)$/, _0x)
+piratebay.*##+js(aopr, AaDetector)
+pirateproxy.*##+js(acs, Object.defineProperty, document.body.appendChild)
+piratebay.*,pirateproxy.*##[href]:has-text(PLAY)
+||nfkd2ug8d9.com^
+pirateproxy.*,thehiddenbay.com###content > div > iframe
+
+! https://github.com/uBlockOrigin/uAssets/issues/3143
+vidcloud.*##+js(nowoif)
+vidcloud.*##+js(aopr, BetterJsPop)
+vidcloud.*##+js(aopr, decodeURI)
+vidcloud.*##+js(aopw, adBlockDetected)
+vidcloud.*##+js(aopr, __Y)
+vidcloud.*###overlay-center
+
+! https://github.com/uBlockOrigin/uAssets/issues/3147
+@@||adinplay.com/libs/aiptag/assets/adsbygoogle.js^$xhr,domain=devast.io
+devast.io###advert
+
+! https://github.com/uBlockOrigin/uAssets/issues/1220
+! https://github.com/uBlockOrigin/uAssets/issues/3149
+imgrock.*##+js(aopr, CustomEvent)
+imgrock.*##+js(aopr, popjs.init)
+imgrock.*##+js(aopw, Fingerprint2)
+imgrock.*##+js(nano-stb, /.?/, 4000)
+imgrock.*##+js(popads-dummy)
+imgrock.*##+js(popads.net)
+@@||imgrock.*^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/3152
+imgtorrnt.in##+js(aopr, ExoLoader.serve)
+imgtorrnt.in##+js(aopr, document.dispatchEvent)
+imgtorrnt.in##+js(aeld, , _0x)
+imgtorrnt.in##[id*="Banner"]
+||ddns.net/*.php$frame
+*$frame,3p,domain=imgtorrnt.in
+*$popunder,3p,domain=imgtorrnt.in
+imgtorrnt.in##.bannerImage
+*.gif$domain=imgtorrnt.in,image
+
+! https://github.com/uBlockOrigin/uAssets/issues/3158
+! https://github.com/uBlockOrigin/uAssets/issues/5357
+! https://github.com/NanoMeow/QuickReports/issues/1218
+webbro.*##+js(aopr, AaDetector)
+@@||webbro.*^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/3159
+javhay.net##^script:has-text(/Privet darkv.|\x/)
+javhay.net##.title-most-views:first-child
+javhay.net###logoplayer
+iframejav.*##+js(nowoif)
+iframejav.*##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3160
+anysex.com##+js(set, vastAds, [])
+anysex.com##+js(aopr, ExoLoader)
+anysex.com##+js(aopr, document.dispatchEvent)
+anysex.com##+js(aopr, console.clear)
+anysex.com##+js(aopr, decodeURI)
+||anysex.com^$frame,1p
+anysex.com##[class^="content"] > .no_pop
+anysex.com###content > .naf_dd
+anysex.com##+js(aopr, setExoCookie)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3162
+||nwch.az-cdn.ch^$script,domain=solothurnerzeitung.ch
+
+! https://www.reddit.com/r/Adblock/comments/95ipg0
+gocurrycracker.com##+js(aopr, encodeURIComponent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3170
+gomiblog.com##+js(set, isAdsDisplayed, true)
+gomiblog.com##+js(nostif, instance.check, 1)
+@@||gomiblog.com^$ghide
+@@||gomiblog.com^$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/3399
+! https://github.com/uBlockOrigin/uAssets/issues/14692
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=gentside.*|maxisciences.com|ohmymag.*
+!*$script,redirect-rule=noopjs,domain=gentside.*|gentside.com|gentside.de|gentside.co.uk|maxisciences.com|ohmymag.com|ohmymag.de|ohmymag.co.uk,3p
+@@||maxisciences.com/js/amazon/$script,domain=maxisciences.com
+@@||googletagservices.com/tag/js/gpt.js$script,domain=gentside.*|maxisciences.com|ohmymag.*
+@@*/assets/prebid/$script,xhr,1p,domain=gentside.*|maxisciences.com|ohmymag.*
+@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,domain=gentside.*|ohmymag.*
+@@||securepubads.g.doubleclick.net/*/pubads_impl.js$script,domain=gentside.*|ohmymag.*
+@@||cdn.adsafeprotected.com^$script,domain=gentside.*|ohmymag.*|maxisciences.com
+@@||pixel.adsafeprotected.com/services/pub$xhr,domain=gentside.*|ohmymag.*|maxisciences.com
+@@||btloader.com/tag?h=prismamedia-com&upapi=true$script,domain=maxisciences.com|gentside.*|ohmymag.*
+@@||js-sec.indexww.com/$script,domain=maxisciences.com|gentside.*|ohmymag.*
+@@||prismamedia-com.videoplayerhub.com/galleryplayer.js$script,domain=maxisciences.com|gentside.*|ohmymag.*
+@@||tra.scds.pmdstatic.net/advertising-core/$script,domain=gentside.*|gentside.com|gentside.de|gentside.co.uk|maxisciences.com|ohmymag.com|ohmymag.de|ohmymag.co.uk
+
+! https://github.com/uBlockOrigin/uAssets/issues/3176
+thurrott.com##+js(acs, $, adblockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3180
+! https://github.com/NanoMeow/QuickReports/issues/3313
+icdrama.*,vlist.se##+js(set, adblock, 1)
+icdrama.*###closeADV
+
+! https://github.com/uBlockOrigin/uAssets/issues/6069
+! https://github.com/uBlockOrigin/uAssets/issues/13754#issuecomment-1158782085
+! https://github.com/AdguardTeam/AdguardFilters/issues/167090
+file-upload.*##+js(noeval-if, ppu)
+file-upload.*##+js(nosiif, visibility, 1000)
+file-upload.*##+js(nowoif)
+file-upload.*##+js(acs, document.getElementById, undefined)
+3upload.com,file-up.org,file-upload.*##+js(acs, getCookie, setCookie)
+file-upload.*##ins.adsbygoogle
+! https://github.com/uBlockOrigin/uAssets/issues/13862
+||file-upload.com^$csp=sandbox allow-forms allow-same-origin allow-scripts allow-modals allow-orientation-lock allow-pointer-lock allow-presentation allow-top-navigation
+file-upload.com##^meta[http-equiv="refresh"]
+file-upload.*##+js(aopw, Fingerprint2)
+||file-upload.*^$frame
+/werbebanner-$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/7216
+streamdreams.org##+js(aopr, exoJsPop101)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3200
+wowescape.com,games2rule.com,bigescapegames.com##.col-12:has(> .adsbyvli)
+wowescape.com,games2rule.com,bigescapegames.com##.col-12:has(> .adsbygoogle)
+wowescape.com,games2rule.com,bigescapegames.com##div.border_radius:has-text(Advertisement)
+wowescape.com##+js(no-fetch-if, adsbygoogle)
+wowescape.com###gameplay > iframe:style(display: block !important;)
+wowescape.com###preroll
+
+! https://github.com/uBlockOrigin/uAssets/issues/4476
+! https://github.com/uBlockOrigin/uAssets/issues/14708
+duellinksmeta.com##+js(noeval)
+*$script,redirect-rule=noopjs,domain=duellinksmeta.com
+@@||cdn.intergi.com/hera/*$xhr,domain=duellinksmeta.com
+@@||cdn.intergient.com^$script,xhr,domain=duellinksmeta.com
+@@||duellinksmeta.com^$1p
+@@||duellinksmeta.com^$ghide
+duellinksmeta.com##.advertisement-box
+duellinksmeta.com##.ad-slot
+
+! https://github.com/uBlockOrigin/uAssets/issues/3205
+pornve.com##+js(set, frg, 1)
+pornve.com##+js(nowoif)
+pornve.com###blockblockB:style(display: block!important;)
+pornve.com###blockblockA
+pornve.com###close-teaser
+
+! https://github.com/uBlockOrigin/uAssets/issues/3214
+seselah.com##+js(aopw, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3212
+venstrike.jimdofree.com##+js(aeld, load, nextFunction)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3211
+@@||programasve.blogspot.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/3208
+||maxcheaters.com/*.gif$image
+@@||maxcheaters.com/uploads2/country/*.gif$image
+maxcheaters.com##.ipsContained.ipsImage
+maxcheaters.com##+js(nostif, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3206
+mivo.com##.ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/3222
+sportsplays.com##+js(nostif, abDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3223
+! https://github.com/NanoAdblocker/NanoFilters/issues/186
+! https://github.com/NanoMeow/QuickReports/issues/196
+rmdown.com##+js(aopw, open)
+rmdown.com##.container td[bgcolor="white"] > a[target="_blank"]
+*$image,3p,redirect=1x1.gif,domain=rmdown.com
+
+! https://github.com/NanoMeow/QuickReports/issues/442
+! https://github.com/uBlockOrigin/uAssets/issues/4353
+! https://github.com/NanoMeow/QuickReports/issues/534
+! https://github.com/NanoMeow/QuickReports/issues/667
+dailybreeze.com,dailybulletin.com,dailynews.com,delcotimes.com,eastbaytimes.com,macombdaily.com,ocregister.com,pasadenastarnews.com,pe.com,presstelegram.com,redlandsdailyfacts.com,reviewjournal.com,santacruzsentinel.com,saratogian.com,sentinelandenterprise.com,sgvtribune.com,tampabay.com,times-standard.com,theoaklandpress.com,trentonian.com,twincities.com,whittierdailynews.com##+js(set, CnnXt.Event.fire, noopFunc)
+*$script,domain=delcotimes.com|macombdaily.com|santacruzsentinel.com|saratogian.com|theoaklandpress.com|trentonian.com,redirect-rule=noopjs
+*$image,domain=delcotimes.com|macombdaily.com|santacruzsentinel.com|saratogian.com|theoaklandpress.com|trentonian.com,redirect-rule=2x2.png
+ocregister.com##a[href^="http://www.webpublished.com"]
+
+! https://github.com/uBlockOrigin/uAssets/commit/d3da1a8ea7ca2065f4616aacc4d542e2ac4f8e72#commitcomment-30109151
+@@||mobinozer.com^$ghide
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=mobinozer.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/16420
+pixlr.com###workspace:style(right: 0px !important;)
+! https://github.com/uBlockOrigin/uAssets/issues/18373
+pixlr.com###right-space
+
+! https://github.com/uBlockOrigin/uAssets/issues/3254
+schoener-wohnen.de##+js(aopr, _sp_._networkListenerData)
+
+! http://www.gamesgames.com/game/mahjong-quest anti adb
+@@||gamesgames.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/3257
+! https://github.com/uBlockOrigin/uAssets/issues/7931
+savemedia.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3263#issuecomment-414133567
+watchhouseonline.net##+js(aopr, decodeURI)
+watchhouseonline.net###custom_html-2
+
+! https://github.com/uBlockOrigin/uAssets/issues/3268
+! https://github.com/uBlockOrigin/uAssets/issues/14634
+linkedin.com##.ad-banner-container
+
+! https://github.com/NanoMeow/QuickReports/issues/4
+||2mdn.net^$media,redirect=noopmp4-1s,domain=games2rule.com
+||youtube.com/get_video$media,redirect=noopmp4-1s,domain=games2rule.com
+@@||googleads.g.doubleclick.net/pagead/*games2rule$xhr,domain=imasdk.googleapis.com
+games2rule.com##embed:style(display:inherit!important)
+games2rule.com##[id^="gdsdk_"]
+games2rule.com##div:has(> div:has(> .adsbygoogle))
+games2rule.com##div.border_radius:has-text(Advertisement)
+games2rule.com##.col-sm-4:has-text(Advertisement)
+games2rule.com##+js(ra, target)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3276
+! https://github.com/uBlockOrigin/uAssets/issues/11143
+elixx.*##+js(aopr, AdservingModule)
+elixx.*##+js(aopr, LieDetector)
+elixx.*##+js(aopw, I833)
+elixx.*##+js(json-prune, urls, urls.0)
+elixx.*##^script:has-text(0x3)
+||elixx.*/popcash.js^
+
+! ads, popups https://www.limetorrents .info/search/all/duck/
+! https://github.com/AdguardTeam/AdguardFilters/issues/115648
+! https://github.com/uBlockOrigin/uAssets/issues/561#issuecomment-1833524685
+! => limetorrents. lol
+limetorrents.*##+js(aeld, , _0x)
+limetorrents.*##+js(aeld, load, onload)
+limetorrents.*##+js(acs, Object.assign, popunder)
+limetorrents.*##+js(acs, Math, XMLHttpRequest)
+limetorrents.*##+js(nowoif)
+limetorrents.*##[href^="/fast.php"]
+limetorrents.*##div:has(> div > a[href^="/leet/?"])
+limetorrents.*##tr:has-text(VPN)
+||limetorrents.*/sw.js
+! https://github.com/uBlockOrigin/uAssets/issues/7592
+@@||limetorrents.*^$ghide
+limetorrents.*##[href^="https://affiliate.rusvpn.com/"]
+limetorrents.*##.head:has-text(Adv)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3288
+ebookdz.com##+js(aopr, AaDetector)
+ebookdz.com##+js(nowebrtc)
+ebookdz.com##+js(nostif, nextFunction, 2000)
+@@||ebookdz.com^$ghide
+*$script,domain=ebookdz.com,redirect-rule=noopjs
+ebookdz.com##[href*="offer"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/3289
+telerium.*##+js(nostif, KeepOpeningPops, 1000)
+telerium.*##+js(nowoif)
+telerium.*##+js(aopr, LieDetector)
+@@||telerium.*^$ghide
+telerium.*###overlay
+onhockey.tv,web.livecricket.is##+js(nowebrtc)
+||onhockey.tv/stopadblock*.jpg$image
+
+! https://github.com/NanoMeow/QuickReports/issues/23
+! https://github.com/uBlockOrigin/uAssets/issues/4337
+@@||amc.com^$ghide
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=amc.com
+! https://github.com/uBlockOrigin/uAssets/issues/13065
+||ssaimanifest.prod.boltdns.net^$xhr,removeparam=prof,domain=amc.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/3298
+pornvideospass.com##+js(aopw, Aloader)
+pornvideospass.com##+js(aopw, bindall)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3300
+barfuck.com##+js(aopr, document.dispatchEvent)
+barfuck.com###im-layer
+||curvyfemales.com/*.php$script,1p
+curvyfemales.com##.im-show
+
+! https://github.com/uBlockOrigin/uAssets/issues/3301
+pornvideotop.com##+js(aopr, open)
+pornvideotop.com##+js(nostif, location.href)
+pornvideotop.com###user18div
+||aa.pornvideotop.com^
+||pornvideotop.com/ads300x250.php
+||pornvideotop.com/e/fp.js
+||pornvideotop.com/js/popec.js
+||spermyporn.com/js/my.js
+||young-porn-movie.com/adv.js
+||tds.pornvideotop.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/1886#issuecomment-415991715
+! https://forums.lanik.us/viewtopic.php?f=103&t=35451
+/mod_ablockdetector/*
+@@||trecetv.es^$ghide
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=shares.enetres.net
+@@||player.enetres.net/js/videojs-plugins/videojs-ads-contrib/videojs.ads.js$script,domain=shares.enetres.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/13250
+file4go.*##+js(acs, document.getElementById, ad_block)
+file4go.*##+js(set, time, 0)
+@@||file4go.*/ads.js$script,1p
+file4go.*##div.banner300b, .lateral
+
+! https://github.com/uBlockOrigin/uAssets/issues/1603
+! https://github.com/uBlockOrigin/uAssets/issues/4860
+! https://github.com/AdguardTeam/AdguardFilters/issues/50834
+! jav688.com popups
+javwide.*##+js(aopr, AaDetector)
+cdnfinder.xyz,player.javqd.*,player.javwide.*###preroll
+cdnfinder.xyz###poster
+*$script,3p,denyallow=cdnfinder.xyz,domain=cdnfinder.xyz
+##a[href^="http://www.poweredbyliquidfire.mobi/"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/9argxo
+holavid.com##+js(aopw, decodeURIComponent)
+||hawaktv.com/sw.js$script
+
+! Similar group of german porn sites
+! https://github.com/uBlockOrigin/uAssets/issues/3349
+pornohirsch.net##+js(set, vpPrerollVideo, undefined)
+deinesexfilme.com,einfachtitten.com,halloporno.com,herzporno.com,lesbenhd.com,milffabrik.com,porn-monkey.com,porndrake.com,pornhubdeutsch.net,pornoaffe.com,pornodavid.com,pornoente.tv,pornofisch.com,pornofelix.com,pornohammer.com,pornohelm.com,pornoklinge.com,pornotom.com,pornotommy.com,pornovideos-hd.com,pornozebra.com,xhamsterdeutsch.xyz,xnxx-sexfilme.com##+js(nostif, appendChild)
+@@*$ghide,domain=deinesexfilme.com|einfachtitten.com|halloporno.com|herzporno.com|lesbenhd.com|milffabrik.com|porn-monkey.com|porndrake.com|pornhubdeutsch.net|pornoaffe.com|pornodavid.com|pornoente.tv|pornofisch.com|pornofelix.com|pornohammer.com|pornohelm.com|pornoklinge.com|pornotom.com|pornotommy.com|pornovideos-hd.com|pornozebra.com|xhamsterdeutsch.xyz|xnxx-sexfilme.com
+deinesexfilme.com,einfachtitten.com,halloporno.com,herzporno.com,pornohirsch.net,lesbenhd.com,milffabrik.com,porndrake.com,pornoaffe.com,pornodavid.com,pornoente.tv,pornofisch.com,pornofelix.com,pornohammer.com,pornohelm.com,pornoklinge.com,pornovideos-hd.com,pornotom.com,pornotommy.com,pornozebra.com,xnxx-sexfilme.com##.vjs-overlay
+deinesexfilme.com,herzporno.com,lesbenhd.com,milffabrik.com,pornoaffe.com,pornoente.tv,pornohelm.com,pornoklinge.com,xnxx-sexfilme.com###wa_join_btn
+einfachtitten.com,halloporno.com,pornodavid.com,pornofisch.com,pornofelix.com,pornohammer.com,pornotom.com,pornotommy.com,pornovideos-hd.com,pornozebra.com##.send_event.widget_btn.cf
+deinesexfilme.com,einfachtitten.com,halloporno.com,herzporno.com,lesbenhd.com,milffabrik.com,porn-monkey.com,porndrake.com,pornhubdeutsch.net,pornoaffe.com,pornodavid.com,pornoente.tv,pornofisch.com,pornofelix.com,pornohammer.com,pornohelm.com,pornoklinge.com,pornotom.com,pornotommy.com,pornovideos-hd.com,pornozebra.com,xhamsterdeutsch.xyz,xnxx-sexfilme.com##+js(aopr, open)
+||static.twincdn.com^$media,redirect=noopmp3-0.1s
+##.preroll-blocker
+! https://github.com/uBlockOrigin/uAssets/issues/3341
+xnxx-sexfilme.com##+js(aopw, SpecialUp)
+||pushpad.xyz^$script,domain=xnxx-sexfilme.com
+xnxx-sexfilme.com##.img_box:has-text(Anzeige)
+xnxx-sexfilme.com###wa-banner
+xnxx-sexfilme.com##aside ins:upward(aside)
+||xnxx.com/cams/
+xnxx-sexfilme.com##.grid_box:has(a[target="_blank"])
+xnxx-sexfilme.com##.preroll-blocker
+xnxx-sexfilme.com##.preroll-skip-button
+xnxx-sexfilme.com##.vjs-overlayed
+||twincdn.com/video/susilive/$media,redirect=noopmp4-1s,domain=xnxx-sexfilme.com
+
+! https://github.com/NanoMeow/QuickReports/issues/39
+marie-claire.es##+js(set, ads, true)
+*$xhr,redirect-rule=nooptext,domain=marie-claire.es
+
+! https://github.com/NanoMeow/QuickReports/issues/41
+||starbits.io/libs/check.js$script,1p
+
+! sawlive.tv popups
+! https://github.com/NanoMeow/QuickReports/issues/1793
+sawlive.tv##+js(aopw, Fingerprint2)
+sawlive.tv##+js(nowoif)
+@@||sawlive.tv^$script,1p
+sawlive.tv##body[onclick^="closeMyAd"] > div[id][style^="position"][style*="background-color"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/9bk0es
+converto.io##+js(acs, atob, decodeURIComponent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3368
+player.xxxbestsites.com##+js(aopr, BetterJsPop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3371
+svipvids.com##+js(aopw, KillAdBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3372
+gaypornmasters.com##+js(aost, String.prototype.charCodeAt, ai_)
+||hexupload.net/images/Premium_Banners/$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/3385
+short-url.link##+js(aeld, click, read_cookie)
+short-url.link##+js(nano-sib)
+short-url.link##center > [src$=".html"]
+
+! https://github.com/NanoMeow/QuickReports/issues/56
+salamanca24horas.com##+js(aopr, ReviveBannerInterstitial)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3688
+scrapywar.com##+js(acs, eval, replace)
+scrapywar.com##.stream-item-widget
+
+! Videos disabled by anti-blocker:
+! https://globalnews.ca/news/4332734/quebec-farmers-hoping-for-rain-after-drought-heat-wave-threaten-crops/
+globalnews.ca##+js(set, GNCA_Ad_Support, true)
+globalnews.ca##.c-ad__unit
+globalnews.ca##.c-ad__label
+
+! https://github.com/uBlockOrigin/uAssets/issues/3410
+king-pes.*##+js(aeld, load, onload)
+
+! https://github.com/NanoMeow/QuickReports/issues/2911
+@@||rp-online.de^$ghide
+@@||saarbruecker-zeitung.de^$ghide
+@@||volksfreund.de^$ghide
+@@||rp-online.de/assets/adsbygoogle.js$script,1p
+@@||saarbruecker-zeitung.de/assets/adsbygoogle.js$script,1p
+@@||volksfreund.de/assets/adsbygoogle.js$script,1p
+rp-online.de,saarbruecker-zeitung.de,volksfreund.de##.park-portal
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71150
+@@||mylivesignature.com^$ghide
+@@||mylivesignature.com/$script,1p
+mylivesignature.com##.topadscontainer
+
+! https://github.com/uBlockOrigin/uAssets/issues/3422
+@@||googlesyndication.com/pagead/managed/js/adsense/*/show_ads_impl$domain=searchftps.net
+@@||googlesyndication.com/pagead/show_ads.js$script,domain=searchftps.net
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=41613
+! https://github.com/uBlockOrigin/uAssets/issues/2275
+@@||intoupload.*^$ghide
+||intoupload.com/images/StartDownload.gif$image
+intoupload.net##a[href*="/go.php?a_aid="]
+intoupload.net##+js(aopw, Fingerprint2)
+intoupload.net##+js(aopr, open)
+intoupload.net##+js(acs, $, preventDefault)
+||intoupload.net/sw.js
+intoupload.net##.downppi
+intoupload.net##.checkbox
+
+! https://github.com/NanoMeow/QuickReports/issues/62
+hungama.com##+js(set, showAds, true)
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=hungama.com
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/176
+! https://github.com/NanoMeow/QuickReports/issues/2500
+@@||crazyhd.com^$ghide
+@@||chd4.com^$ghide
+! https://github.com/bogachenko/fuckfuckadblock/issues/223
+chd4.com##+js(aopw, checkAdBlocker)
+||adblockanalytics.com^$xhr,redirect-rule=noop.txt
+
+! https://github.com/NanoMeow/QuickReports/issues/66
+@@||goalad.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/3431
+canberratimes.com.au##+js(set, cxStartDetectionProcess, noopFunc)
+
+! https://github.com/NanoMeow/QuickReports/issues/67
+letribunaldunet.fr##+js(nostif, adb, 0)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3432
+tryboobs.com##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+tryboobs.com##+js(aopr, open)
+tryboobs.com##.bottomspots
+tryboobs.com##.flirt.spot
+tryboobs.com###sr
+
+! https://github.com/uBlockOrigin/uAssets/issues/3433
+tubedupe.com##+js(aopr, ExoLoader)
+tubedupe.com##+js(aeld, , midRoll)
+||tubedupe.com/player/html.php$frame,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/71
+veekyforums.com##+js(nowoif)
+@@||veekyforums.com/js/adcash.js$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/2364
+||yespornclips.com/sw.js$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/9f9u6t/block_ads_from_mlbcom_mlb_gameday_mlbtv/
+@@||mlbstatic.com/mlb.com/video/*/advertise$xhr,domain=mlb.com
+
+! https://github.com/gorhill/uBO-Extra/issues/104
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=ipla.tv
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=41669#p140881
+cutpaid.com##+js(aeld, , _blank)
+cutpaid.com##+js(aopr, app_vars.force_disable_adblock)
+cutpaid.com##+js(nowoif)
+cutpaid.com##+js(set, blurred, false)
+cutpaid.com##center
+*$frame,denyallow=google.com,domain=cutpaid.com
+*$script,3p,denyallow=google.com|gstatic.com|recaptcha.net,domain=cutpaid.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/3448
+germancarforum.com##+js(rmnt, script, adsbygoogle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3462
+televisionlibre.net##+js(aopw, smrtSB)
+televisionlibre.net##+js(nowoif)
+televisionlibre.net##[class^="fkdaop"]
+todovieneok.*##+js(aeld, load, nextFunction)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3471
+findwords.info##div[itemtype="http://schema.org/WPAdBlock"]
+findwords.info##.ads-block-horizontal
+||forwardrb.bid^
+
+! https://github.com/uBlockOrigin/uAssets/issues/3476
+thewestmorlandgazette.co.uk##+js(aopr, _sp_._networkListenerData)
+
+! https://github.com/NanoMeow/QuickReports/issues/94
+live-tv-channels.org##+js(aopr, adBlockDetected)
+live-tv-channels.org##+js(nostif, adBlocked)
+live-tv-channels.org##.adsense-player
+live-tv-channels.org##.adsense-player-2
+live-tv-channels.org##[class^="_ads-"]
+
+! https://github.com/NanoMeow/QuickReports/issues/95
+drinksmixer.com,leitesculinaria.com##+js(set, Date.now, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3506
+andiim3.com##+js(acs, jQuery, AdBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3508
+twatis.com##+js(aopr, ExoLoader.addZone)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11515
+hitomi.la##+js(noeval)
+*$script,3p,domain=hitomi.la
+hitomi.la##+js(aopr, open)
+hitomi.la##.container > div[class$="content"] > div[class]:has(> script)
+||ltn.hitomi.la^*?yuo1=$script,1p
+
+! https://forums.lanik.us/viewtopic.php?p=141036#p141036
+fupa.net##+js(set, jQuery.adblock, 1)
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=fupa.net
+@@||ad.71i.de/*/loader.js$script,domain=fupa.net
+
+! https://forums.lanik.us/viewtopic.php?p=141091#p141091
+! sites with the same ad-reinsertion script
+kompas.com##+js(acs, setTimeout, iframeTestTimeMS)
+namemc.com##+js(acs, setTimeout, runInIframe)
+namemc.com##+js(aopw, deployads)
+namemc.com##.ad-container
+pockettactics.com##+js(acs, Math.floor, iframeTestTimeMS)
+tribunnews.com##+js(acs, Math, ='\x)
+
+! https://github.com/NanoMeow/QuickReports/issues/108
+descarga-animex.*##+js(aopw, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3536
+bollywoodshaadis.com##+js(aopr, Debugger)
+bollywoodshaadis.com##+js(aopw, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3542
+hdvid.*##+js(aopw, atOptions)
+hdvid.*##+js(aost, String.fromCharCode, stackDepth:3)
+hdvid.*,onvid.*,ovid.*,vidhd.*##+js(aopw, Fingerprint2)
+hdvid.*,onvid.*,ovid.*,vidhd.*##+js(aopw, smrtSB)
+hdvid.*,onvid.*,ovid.*,vidhd.*##+js(nowebrtc)
+vidhd.*##+js(aopr, AaDetector)
+hdvid.*,onvid.*,ovid.*,vidhd.*##.video_batman
+||hdvid.tv/sw.js$script
+||onvid.*/sw.js$script
+||ovid.*/sw.js$script,1p
+||vidhd.*/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/3546
+hardmob.com.br#?#.postcontainer:has(.usertitle:has-text(Publicidade))
+
+! https://github.com/NanoMeow/QuickReports/issues/111
+@@||ugdturner.com^$script,domain=live.bleacherreport.com
+@@||v.fwmrm.net/crossdomain.xml$xhr,domain=live.bleacherreport.com
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=41761#p141302
+downloadming.*##+js(aopw, decodeURIComponent)
+
+! https://github.com/NanoMeow/QuickReports/issues/125
+nfl.com##[class$="adblock"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/3565
+guidetnt.com##+js(set, isAdBlockActive, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/9j5bxk
+eslfast.com##+js(nostif, warning, 100)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3593
+quelleestladifference.fr##+js(aeld, load, onload)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3594
+iwin.com##.modals
+iwin.com#@##sponsorText
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=41791
+giveawayoftheday.com##+js(nosiif, _checkBait)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3597
+sexykittenporn.com##+js(aopr, loadTool)
+sexykittenporn.com##+js(aopr, ExoLoader)
+sexykittenporn.com##+js(ra, href, [href*="ccbill"])
+sexykittenporn.com##.hr.babes
+
+! https://github.com/uBlockOrigin/uAssets/issues/3608
+@@||i8086.de^$ghide
+i8086.de##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/3604
+starmusiq.*##+js(nowebrtc)
+starmusiq.*##+js(set, isAdBlockActive, false)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=41809
+! https://github.com/NanoMeow/QuickReports/issues/145
+@@||gameguardian.net^$ghide
+||googlesyndication.com/pagead/$script,redirect=noopjs,domain=gameguardian.net
+gameguardian.net##.adsbygoogle:style(height: 1px !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/9jzdwf/detected_by_hawtcelebs/
+hawtcelebs.com##+js(aopw, close_screen)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3629
+camgirlfap.com##+js(acs, document.createElement, onerror)
+##.happy-inside-player
+
+! https://github.com/uBlockOrigin/uAssets/issues/3630
+cda-hd.cc##+js(aopr, AaDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3632
+ge-map-overlays.appspot.com##+js(no-xhr-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3635
+vinylcollective.com##+js(acs, jQuery, dismissAdBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3644
+sp-today.com##+js(set, isAdBlockActive, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3646
+! https://github.com/NanoMeow/QuickReports/issues/2351
+! https://github.com/NanoMeow/QuickReports/issues/4527
+mirrorace.*##+js(aopr, AaDetector)
+mirrorace.*##+js(aeld, click, _0x)
+mirrorace.*##+js(popads-dummy)
+/invoke.js$script,domain=mirrorace.*
+@@||mirrorace.*^$ghide
+mirrorace.*##.uk-card-secondary:has-text(VPN)
+mirrorace.*##[href*="search/"]
+||mirrorace.org/*.gif$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/3651
+! https://github.com/uBlockOrigin/uAssets/issues/5046
+tamilmv.*##+js(nowebrtc)
+tamilmv.*##+js(acs, atob, decodeURIComponent)
+||tamilmv.*/sw.js$script,xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/3652
+||xxxwebdlxxx.org^$csp=script-src 'self' data:
+
+! https://github.com/uBlockOrigin/uAssets/issues/3654
+! https://www.reddit.com/r/uBlockOrigin/comments/89tfkf/how_do_i_stop_we_see_youre_using_an_ad_blocker/
+! https://github.com/uBlockOrigin/uAssets/issues/2188
+! https://github.com/uBlockOrigin/uAssets/issues/2636
+! https://github.com/uBlockOrigin/uAssets/issues/3656
+browardpalmbeach.com,dallasobserver.com,houstonpress.com,miaminewtimes.com,phoenixnewtimes.com,westword.com##+js(set, VMG.Components.Adblock, false)
+
+! https://forums.lanik.us/viewtopic.php?p=141849#p141849
+prostoporno.*##+js(aopr, ExoLoader.serve)
+prostoporno.*##.spot
+
+! https://forums.lanik.us/viewtopic.php?f=103&t=41858
+! https://www.reddit.com/r/uBlockOrigin/comments/mpffxo/
+muyinteresante.es##+js(no-fetch-if, googlesyndication, method:HEAD)
+*$xhr,redirect-rule=nooptext,domain=muyinteresante.es
+
+! https://github.com/uBlockOrigin/uAssets/issues/311
+9xbuddy.*##+js(nowoif)
+@@||offmp3.*^$ghide
+*$script,3p,denyallow=9xbud.com|disqus.com|disquscdn.com|jwpsrv.com|plyr.io|jsdelivr.net|twimg.com|twitter.com|fastly.net|fastlylb.net|jquery.com|hwcdn.net|hcaptcha.com|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com,domain=9xbuddy.*
+
+! https://github.com/NanoMeow/QuickReports/issues/175
+durtypass.com##+js(nowoif)
+durtypass.com##+js(aopr, _pop)
+@@||durtypass.com^$ghide
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=41882
+||pornid.*$csp=frame-src
+pornid.*##.rsidebar-spots-holder, .spots-bottom
+pornid.*##.cs-under-player-link
+pornid.*##+js(aopr, decodeURI)
+||pornid.*/azone/
+||pornid.*/pid/dev.js
+!#if env_mobile
+pornid.*##.cs
+pornid.*##.spots-title
+pornid.*###fltd
+pornid.*###native_code
+||pornid.*/xdman2/$frame,1p
+!#endif
+
+! https://github.com/NanoMeow/QuickReports/issues/179
+practicequiz.com,reportscam.com,wapkiz.com##+js(aopw, adBlockDetected)
+reportscam.com##[href^="https://click.reportscam.com/"]
+freegamescasual.com##+js(nostif, adblock_popup, 500)
+
+! https://github.com/NanoMeow/QuickReports/issues/183
+opjav.com##+js(nowoif)
+||clipbongda.info^
+
+! https://github.com/uBlockOrigin/uAssets/issues/3678
+123moviesjr.cc##+js(aopr, mm)
+||123movie.*/sw.js$script
+
+! https://forums.lanik.us/viewtopic.php?f=90&t=41915
+schrauben-normen.de##+js(aeld, load, nextFunction)
+
+! https://github.com/NanoMeow/QuickReports/issues/186
+yourcountdown.to##.adsense-fallback
+
+! https://github.com/NanoMeow/QuickReports/issues/191
+ngelag.com##+js(aopr, FuckAdBlock)
+
+! https://github.com/NanoMeow/QuickReports/issues/17
+! https://github.com/uBlockOrigin/uAssets/issues/3687
+@@||homegrownfreaks.net/player/player_ads.html$frame,1p
+@@||homegrownfreaks.net^$ghide
+homegrownfreaks.net##.fp-brand
+
+! https://github.com/NanoMeow/QuickReports/issues/195
+depedlps.*##+js(aeld, load, onload)
+depedlps.*##+js(aopr, encodeURIComponent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3693
+pianokafe.com##+js(aopw, adBlockDetected)
+
+! https://github.com/NanoMeow/QuickReports/issues/197
+huim.com##+js(aopr, isAdEnabled)
+||push.zhanzhang.baidu.com/push.js$script,domain=huim.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/3700
+! https://github.com/uBlockOrigin/uAssets/issues/5004
+||zbporn.*/tri/zp.js
+zbporn.*##+js(aopr, decodeURI)
+zbporn.*##+js(aopr, promo)
+zbporn.*##.desktop-nat-spot
+*$popunder,domain=zbporn.com
+||zbporn.*/ttt/
+zbporn.*##.view-right
+
+! https://github.com/uBlockOrigin/uAssets/issues/3701
+fapality.com##+js(aopr, document.dispatchEvent)
+fapality.com##+js(aopr, open)
+||yourlustmedia.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/3702
+worldsex.com##+js(aopr, Notification)
+worldsex.com##+js(aopr, document.dispatchEvent)
+worldsex.com###video_banner
+worldsex.com##div.da-by
+worldsex.com##.overlay
+
+! https://github.com/NanoMeow/QuickReports/issues/155
+! https://github.com/uBlockOrigin/uAssets/issues/16014
+@@||api.production.k8s.y3o.tv/*/video-ads$xhr,domain=yallo.tv
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=yallo.tv
+||adservice.google.com^$script,redirect-rule=noopjs,domain=yallo.tv
+@@||secure.adnxs.com/ptv$xhr,domain=imasdk.googleapis.com
+imasdk.googleapis.com##+js(xml-prune, VAST, , adnxs)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3706
+babesxworld.com,cocogals.com##+js(aopr, loadTool)
+babesxworld.com##+js(aopr, open)
+babesxworld.com##+js(aopr, document.dispatchEvent)
+babesxworld.com##.g-link
+babesxworld.com##a[href^="http://refer.ccbill.com/"]
+*$3p,popup,domain=babesxworld.com
+*$script,3p,denyallow=cloudflare.com|bootstrapcdn.com|fluidplayer.com|twitter.com|hwcdn.net|platform.twitter.map.fastly.net,domain=babesxworld.com
+babesxworld.com##[onclick*="spons"]
+
+! https://github.com/NanoMeow/QuickReports/issues/202
+masteranime.es##+js(set, check_adblock, true)
+||masteranime.es/api/pop.php$xhr,1p
+*$script,3p,denyallow=anmedm.com|cloudflare.net|cloudfront.net|disqus.com|disquscdn.com|facebook.net|fastlylb.net|fbcdn.net|google.com,domain=masteranime.es
+
+! https://www.reddit.com/r/uBlockOrigin/comments/9o5lin/cant_browse_httpswwwtcpvpncom_without_disabling/
+tcpvpn.com##+js(nostif, Adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3715
+otakuworldsite.blogspot.com##+js(aeld, load, onload)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/192
+pornoman.pl##+js(aopr, decodeURI)
+pornoman.pl##+js(aopr, _0x311a)
+pornoman.pl##[src*="bannery"]
+pornoman.pl###porno_accept
+@@||pornoman.pl^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/10405
+nhentai.net##+js(nowoif)
+nhentai.net##+js(set, _n_app.popunder, null)
+nhentai.net##+js(rpnt, script, popunder, p)
+
+! https://adblockplus.org/forum/viewtopic.php?f=10&t=60372&start=0
+*.mp4$media,redirect=noopmp4-1s,domain=abc.go.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/3737
+canadianunderwriter.ca##+js(aopw, mockingbird)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3749
+! https://github.com/uBlockOrigin/uAssets/issues/5549
+! https://www.reddit.com/r/uBlockOrigin/comments/brwyhb/ad_filled_redirect_site_detects_ublock_origin/
+! https://github.com/AdguardTeam/AdguardFilters/issues/128679
+! https://github.com/uBlockOrigin/uAssets/issues/16601
+forexmab.com,linkjust.com,linkszia.co##+js(set, blurred, false)
+forexlap.com,forexmab.com,forexwaw.club,forex-articles.com,fx4vip.com,forexrw7.com,3rabsports.com##+js(nano-sib, , , 0.001)
+forexlap.com##+js(nowoif)
+forexlap.com###fixedban
+linkjust.com##.banner-inner
+linkszia.co##.banner
+@@||linkjust.com^$ghide
+||proviralhost.com^$3p
+||urbharat.xyz^$3p
+||forexrw7.com^$frame,3p
+! https://github.com/AdguardTeam/AdguardFilters/issues/139844
+djxmaza.in,proviralhost.com###wait1button.disabled, #wait2button.disabled:remove-class(disabled)
+djxmaza.in,proviralhost.com###wait1
+proviralhost.com###wait2button:upward(center):style(display: block !important;)
+djxmaza.in###wait1button:upward(center) ~ *:not(center)
+proviralhost.com###wait1button ~ *:not(#wait2button, center:has(#wait2button))
+! https://github.com/uBlockOrigin/uAssets/issues/16383
+*$image,redirect-rule=1x1.gif,domain=djxmaza.in|proviralhost.com|examtadka.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/3748
+business-standard.com##+js(set, adblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3741
+*$popunder,domain=camsexvideo.net
+camsexvideo.net##.list-spots
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=42004
+fox.com.tr##+js(set, adblockDetector, trueFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3767
+oemdtc.com##.easyazon-block
+oemdtc.com##.blocker-notice, .blocker-overlay
+oemdtc.com##[src^="https://cdn.flowdee.de/"], [href^="https://www.amazon.com/b"]
+
+! https://github.com/NanoMeow/QuickReports/issues/234
+! https://github.com/uBlockOrigin/uAssets/issues/4345
+! https://github.com/uBlockOrigin/uAssets/issues/7271
+! https://github.com/uBlockOrigin/uAssets/issues/13164
+cambay.tv,caminspector.net,camporn.tube,camwhorescloud.com,camwhorespy.com,camwhoria.com,camvideos.org##+js(acs, crakPopInParams)
+cambay.tv,caminspector.net,camporn.tube,camwhorescloud.com,camwhoreshd.com,camwhorespy.com,camvideos.org##+js(acs, onload, onclick)
+cambay.tv,caminspector.net,camwhorespy.com,camwhoria.com,camgoddess.tv##+js(aopr, console.log)
+cambay.tv,camwhoreshd.com,camwhorespy.com,cwtvembeds.com##+js(nowoif)
+cambay.tv,caminspector.net,camwhoreshd.com,camgoddess.tv##+js(set, hasPoped, true)
+camwhorescloud.com##+js(aost, Math.round, inlineScript)
+camwhoreshd.com,cwtvembeds.com##.hola_top_element
+cwtvembeds.com##+js(set, flashvars.protect_block, '')
+cwtvembeds.com##+js(set, flashvars.video_click_url, undefined)
+camwhoreshd.com##+js(aopr, loadTool)
+cambay.tv,camporn.tube,camwhorescloud.com,camwhoreshd.com,camgoddess.tv##.table
+caminspector.net,camvideos.org##.place
+@@*$media,domain=camvideos.org
+@@||video$xhr,media,domain=camvideos.org
+camseek.tv##+js(aopr, decodeURI)
+||camseek.tv/live/live.php$frame,1p
+camseek.tv##div[style$="height: 240px; background: white"]
+||wpnrtnmrewunrtok.xyz^$badfilter
+cambay.tv##.rltdsldr
+cambay.tv##+js(set, flashvars.adv_pause_html, '')
+cambay.tv##+js(set, flashvars.adv_start_html, '')
+cambay.tv##+js(set, flashvars.popunder_url, '')
+||cfgr3.com/popin/$script,3p
+##[href^="https://go.smljmp.com/"]
+caminspector.net##.top
+cambay.tv##.fp-logo
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/999
+! https://github.com/uBlockOrigin/uAssets/issues/4176
+@@||open.http.mp.streamamg.com/html5/$script,domain=mediapason.it
+@@||pubads.g.doubleclick.net/gampad/live/*.mediapason.it$xhr,domain=imasdk.googleapis.com
+mediapason.it##+js(set, jQuery.adblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3777
+! https://github.com/uBlockOrigin/uAssets/issues/14133
+leechpremium.link##+js(set, blurred, false)
+*$image,1p,redirect-rule=1x1.gif,domain=leechpremium.link
+leechpremium.link###myModal
+leechpremium.link##ins.adsbygoogle
+leechpremium.link##.fade.modal-backdrop
+leechpremium.link##[id*="ScriptRoot"]
+leechpremium.link##body:style(overflow: auto !important;)
+leechpremium.link##.row > .col-md-2:first-child > .pricingTable
+! https://github.com/uBlockOrigin/uAssets/issues/3777#issuecomment-586671449
+leechpremium.link##+js(no-fetch-if, adsbygoogle)
+*$script,3p,denyallow=bootstrapcdn.com|cloudflare.net|google.com|googleapis.com|gstatic.com|recaptcha.net|tawk.to|jsdelivr.net,domain=leechpremium.link
+! https://github.com/AdguardTeam/AdguardFilters/issues/123870
+@@||leechpremium.net^$ghide
+leechpremium.net##.adsbygoogle
+
+! https://github.com/NanoMeow/QuickReports/issues/236
+@@||tsubasa.im^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/3778
+zemporn.com##+js(aopr, h1mm.w3)
+zemporn.com##.player-aside-banners
+
+! https://github.com/NanoMeow/QuickReports/issues/241
+guitarnick.com##+js(acs, document.getElementById, banner)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3793
+jeshoots.com##+js(set, google_jobrunner, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3794
+xxxuno.com##+js(nostif, #chatWrap, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3801
+allmonitors24.com##+js(nostif, (), 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3799
+apritos.com,bsierad.com,diminimalis.com,downloadbatch.com,eksporimpor.com,jadijuara.com,kicaunews.com,palapanews.com,ridvanmau.com,teknohot.com,unduh31.net##+js(aopw, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3815
+homebooster.de,newhome.de##+js(acs, document.getElementById, blocker_div)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3818
+ellibrepensador.com##+js(aopr, require)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3825
+porconocer.com##+js(acs, document.getElementById, onscroll)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3828
+0123movies.*##+js(set, check_adblock, true)
+0123movies.*##+js(aopr, mm)
+0123movies.*##.fake_player, #tab-ad
+0123movies.*##[href="#tab-ad"]
+0123movies.*##.les-title:has-text(HD)
+0123movies.*##.mvic-btn
+
+! https://github.com/uBlockOrigin/uAssets/issues/3829
+sholah.net,2rdroid.com##+js(nostif, keep-ads, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3830
+tinyppt.com##+js(rmnt, script, deblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3833
+internetretailing.com.au##.textwidget:has(> div > div[id^="IRN_Homepage_300x250"])
+
+! https://github.com/NanoMeow/QuickReports/issues/676
+@@||mygoodstream.pw^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/3849
+bisceglielive.it##+js(nostif, #rbm_block_active, 1000)
+bisceglielive.it##.mkt-300x250
+bisceglielive.it##.mkt-728x90
+
+! https://github.com/uBlockOrigin/uAssets/issues/3858
+worldaide.fr##+js(aopr, adblock)
+@@||worldaide.fr^$ghide
+worldaide.fr##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/3860
+wpgdadatong.com##+js(aopr, checkAdblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3861
+creativebusybee.com##+js(aopw, checkAds)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3867
+scamalot.com##+js(acs, $, #DontBloxMyAdZ)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3869
+beautypackaging.com,coatingsworld.com,contractpharma.com,happi.com,inkworldmagazine.com,labelandnarrowweb.com,mpo-mag.com,nutraceuticalsworld.com,odtmag.com,printedelectronicsnow.com##+js(acs, $, #pageWrapper)
+beautypackaging.com,coatingsworld.com,contractpharma.com,happi.com,inkworldmagazine.com,labelandnarrowweb.com,mpo-mag.com,nutraceuticalsworld.com,odtmag.com,printedelectronicsnow.com##.modal-backdrop
+beautypackaging.com,coatingsworld.com,contractpharma.com,happi.com,inkworldmagazine.com,labelandnarrowweb.com,mpo-mag.com,nutraceuticalsworld.com,odtmag.com,printedelectronicsnow.com##body:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3874
+savevideo.me##+js(acs, $, banner)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3876
+yeutienganh.com##+js(aopw, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3871
+openspeedtest.com##+js(nostif, google_jobrunner)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3882
+situsberita2terbaru.blogspot.com##+js(acs, document.getElementById, adpbtest)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3872
+telecharger-igli4.*##+js(aopw, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3880
+addtobucketlist.com##+js(nostif, google_jobrunner)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3885
+syracusefan.com##+js(aopw, XF)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3897
+@@||promods.net^$ghide
+@@||promods.net/kampyle.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/3917
+argio-logic.net##+js(acs, document.getElementById, alert)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3933
+appstore-discounts.com##+js(acs, document.getElementById, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3930
+onlineatlas.us#@#ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/3927
+ohorse.com##+js(aopw, check)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13096
+@@||tabooporns.com^$ghide
+player.tabooporns.com##+js(aopr, BetterJsPop)
+player.tabooporns.com##+js(nowoif, , 10)
+player.tabooporns.com##+js(set, adblockcheck, false)
+||unpkg.com/videojs-vast-vpaid@2.0.2/bin/videojs_5.vast.vpaid.min.js$script,domain=player.tabooporns.com
+player.tabooporns.com##[href="https://t.me/Russia_Vs_Ukraine_War3"]
+player.tabooporns.com##a[onclick="openAuc();"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/3949
+photos-public-domain.com##+js(aopr, blockAdBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3911
+@@/wp-content/themes/mts_ad_sense/*$1p
+##.blocker-notice
+##.blocker-overlay
+
+! https://github.com/NanoMeow/QuickReports/issues/262
+popcorntv.it##.box-adv
+
+! Generic BlockAdBlock and other sites
+! https://github.com/uBlockOrigin/uAssets/issues/3401
+arianatoday.net###phpeverywherewidget-2
+teamos-hkrg.com##[href^="https://bit.ly/"]
+digitask.ru##ins[class][style="display:inline-block;width:300px;height:250px;"]
+heidibemvindaacasabrasil.blogspot.com###popup
+l2network.eu##.ubm_banner
+mylivewallpapers.com,softfully.com##+js(no-fetch-if, ads)
+mylivewallpapers.com##.group.posts > div.post
+
+aalah.me,academiadelmotor.es,aiailah.com,almursi.com,altebwsneno.blogspot.com,ambonkita.com,androidspill.com,aplus.my.id,arrisalah-jakarta.com,babyjimaditya.com,bbyhaber.com,beritabangka.com,beritasulteng.com,bestsellerforaday.com,bintangplus.com,bitco.world,br.nacaodamusica.com,bracontece.com.br,dicariguru.com,fairforexbrokers.com,foguinhogames.net,formasyonhaber.net,fullvoyeur.com,healbot.dpm15.net,igli4.com,indofirmware.site,hagalil.com,javjack.com,latribunadelpaisvasco.com,line-stickers.com,luxurydreamhomes.net,m5g.it,miltonfriedmancores.org,minutolivre.com,oportaln10.com.br,pedroinnecco.com,philippinenmagazin.de,piazzagallura.org,pornflixhd.com,safehomefarm.com,synoniemboek.com,techacrobat.com##+js(aopw, adBlockDetected)
+afolog.com,aleksandranajda.com,algowins.com,amarendrasingh.com,azotech.com.br,guidedefinitive.altervista.org,robber.altervista.org,zadgranica.com##+js(aopw, KillAdBlock)
+amlesson.ru,anime47.com,arduined.eu,awasthiashish.com,bauen-wohnen-aktuell.de,bracontece.com.br,freeiota.de,indianrailways.info,klyker.com,nullwebscripts.com,reiseratgeber24.de,safemixtape2.blogspot.com,silvertails.net,synoniemboek.com,tedamo.de,trinhthamtruyen.com,yafud.pl,yourjapaneseporn.com##+js(nofab)
+claimdoge.*,freecourselab.*,pluslive.live,seriehd.*,sopasti.com##+js(nosiif, visibility, 1000)
+
+elizabeth-mitchell.org##+js(aopw, adBlockDetected)
+elizabeth-mitchell.org##.widget-title:has-text(AD)
+ad-itech.blogspot.com##+js(aeld, load, onload)
+avengerinator.blogspot.com##+js(aeld, load, nextFunction)
+best4hack.blogspot.com##+js(acs, atob, decodeURI)
+||myfreecopyright.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/16889
+3dzip.org##+js(nostif, google_jobrunner)
+3dzip.org##+js(nostif, null, 4000)
+||googlesyndication.com^$script,redirect-rule=googlesyndication_adsbygoogle.js,domain=3dzip.org
+3dzip.org##.adcontainer
+3dzip.org##div.better-ads-listitemad
+3dzip.org##div[id][itemtype="https://schema.org/WPAdBlock"]
+
+technisches-zeichnen.net##[id^="banner-"]
+technisches-zeichnen.net###ad-unten-01
+technisches-zeichnen.net##.bild-rechts-01
+
+yayanimes.net##+js(acs, document.getElementById, null)
+
+mi-globe.com##.td-is-sticky
+
+||googlesyndication.com^$script,redirect-rule=googlesyndication_adsbygoogle.js,domain=fatgirlskinny.net
+fatgirlskinny.net##+js(aeld, load, isBlanketFound)
+fatgirlskinny.net##[href^="https://www.topcashback.co.uk/"]
+
+canaltdt.es##+js(aeld, load, showModal)
+*$script,redirect-rule=noopjs,domain=canaltdt.es
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57790
+4download.net##+js(acs, addEventListener, nextFunction)
+4download.net##+js(nano-sib)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57320
+! https://github.com/AdguardTeam/AdguardFilters/issues/94971
+! https://github.com/uBlockOrigin/uAssets/issues/13860
+scat.gold##+js(nostif, show)
+scat.gold##+js(acs, document.createElement, onerror)
+videogreen.xyz##+js(nowoif)
+videogreen.xyz##+js(set, clientSide.adbDetect, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/55748
+globalssh.net##+js(acs, addEventListener, nextFunction)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pqthf7/anti_adblocker_script_on_sysnettechsolutionscom/
+sysnettechsolutions.com##a[href^="https://bit.ly/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/3965
+pandajogosgratis.com.br##+js(nostif, (), 2500)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3972
+5278.cc##+js(nostif, myaabpfun, 3000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3979
+! https://github.com/AdguardTeam/AdguardFilters/issues/46874
+icutlink.com##+js(aopr, open)
+icutlink.com##+js(set, blurred, false)
+icutlink.com##+js(nano-sib, time)
+icutlink.com##+js(set, sec, 0)
+icutlink.com##.banner-inner
+zegtrends.com##+js(nowoif)
+zegtrends.com##+js(nano-sib, time, 2500)
+@@/ad.min.js$script,domain=icutlink.com|zegtrends.com
+zegtrends.com##+js(noeval-if, /chp_?ad/)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=42076
+hotbabes.tv##+js(aopr, loadTool)
+candid.tube,filesamba.*,hotbabes.tv,purelyceleb.com##+js(aopr, _wm)
+cambabe.*,camgirlbay.net##+js(acs, onload)
+cambabe.*##.topad
+cambabe.*##.place
+purelyceleb.com##.embed-container
+##.exo-horizontal
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=22759
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=cookinggames.com
+@@||witchhut.com^$script,1p
+
+! https://forums.lanik.us/viewtopic.php?p=70300#p70300
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=girlgames.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/olc7nh/ads_shortener_detecting_ublock/
+! https://github.com/uBlockOrigin/uAssets/issues/3990
+stfly.me##+js(aopw, Fingerprint2)
+stfly.me##+js(aopw, tabUnder)
+stfly.me##+js(aeld, click, trigger)
+stfly.me##+js(aopr, open)
+stfly.me##+js(set, blurred, false)
+@@||stfly.me^$ghide
+*$3p,denyallow=bootstrapcdn.com|cloudflare.com|google.com|googleapis.com|gstatic.com|hcaptcha.com|recaptcha.net|unpkg.com,domain=stfly.me
+||bulletprofit.com^$3p
+! https://www.reddit.com/r/uBlockOrigin/comments/ygt18i/
+! https://www.reddit.com/r/uBlockOrigin/comments/11z2git/
+altblogger.net,blogbux.net,stfly.me##+js(acs, document.createElement, Adblock)
+! https://github.com/uBlockOrigin/uAssets/issues/14711
+altblogger.net##+js(nostif, nextFunction)
+! https://www.reddit.com/r/uBlockOrigin/comments/128edrf/
+blogbux.net###overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/4009
+@@||audiotools.*^$ghide
+audiotools.*##ins.adsbygoogle
+*$image,redirect-rule=1x1.gif,domain=audiotools.blog
+
+! https://github.com/uBlockOrigin/uAssets/issues/4033
+pandafreegames.*##+js(nostif, adFilled, 2500)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4037
+multporn.net##+js(aopr, document.dispatchEvent)
+
+! https://github.com/NanoAdblocker/NanoCore/issues/227
+tonspion.de##+js(nostif, (), 15000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4054
+oncehelp.com##+js(aeld, click, trigger)
+oncehelp.com##+js(aopr, open)
+oncehelp.com##+js(set, blurred, false)
+oncehelp.com##.banner-inner
+oncehelp.com##[href*="?token"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/4057
+@@||consensu.org/*/cmp2.js$script,domain=novagente.pt
+
+! https://github.com/uBlockOrigin/uAssets/issues/4059
+viprow.*##+js(acs, setTimeout, admc)
+viprow.*##+js(nowoif, //)
+sinvida.me,viprow.*##+js(rmnt, script, FingerprintJS)
+viprow.*##.position-absolute
+
+! https://www.reddit.com/r/uBlockOrigin/comments/9uq4cl/myegycc/
+! https://github.com/uBlockOrigin/uAssets/issues/9908
+myegy.*##+js(aopw, decodeURI)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4068
+gamezhero.com##+js(set, ads, true)
+||gamezhero.com/promo$frame,1p
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=gamezhero.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/9utd8b/wikifeet_adverts/
+wikifeet.com##+js(aopr, NativeAd)
+
+! https://github.com/NanoMeow/QuickReports/issues/295
+flashplayer.fullstacks.net##+js(set, gadb, false)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/286
+@@||encoretvb.com^$ghide
+encoretvb.com###square-ad-1
+
+! https://github.com/NanoMeow/QuickReports/issues/304
+sms-receive.net##+js(acs, $, adblock)
+
+! https://github.com/NanoMeow/QuickReports/issues/305
+@@||wordgames.com^$ghide
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=wordgames.com
+wordgames.com###ad-gamepage-leaderboard
+wordgames.com###skyscrapper-container
+wordgames.com###skyscraper-container
+
+! https://github.com/NanoMeow/QuickReports/issues/311
+ani-stream.com##+js(no-fetch-if, damoh.ani-stream.com)
+!#if env_chromium
+||amazonaws.com/homad-global-configs.schneevonmorgen.com/global_config.json$xhr,redirect=nooptext,domain=ani-stream.com
+!#endif
+||fairytail-tube.org/templates/caprica/amz$image,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/9449
+smallseotools.com##+js(aeld, mouseout, clientWidth)
+*$image,redirect-rule=1x1.gif,domain=smallseotools.com
+||smallseotools.com/*.gif$image
+||smallseotools.com/webimages/a1$image,1p
+@@||smallseotools.com/webimages/process.gif
+! https://github.com/uBlockOrigin/uAssets/issues/9701
+! https://github.com/uBlockOrigin/uAssets/issues/16075
+duplichecker.com##+js(no-fetch-if, /google|\/ad.+\.js/)
+duplichecker.com##+js(no-xhr-if, ads)
+||delivery.adrecover.com^$image,redirect-rule=1x1.gif
+! https://github.com/uBlockOrigin/uAssets/issues/17711
+||plagiarismdetector.net/js/*bioep
+@@*$ghide,domain=duplichecker.com|plagiarismchecker.co|searchenginereports.net|smallseotools.com
+duplichecker.com,plagiarismchecker.co,plagiarismdetector.net,searchenginereports.net,smallseotools.com##+js(no-fetch-if, /googlesyndication|adpushup|adrecover/)
+duplichecker.com,plagiarismchecker.co,plagiarismdetector.net,searchenginereports.net,smallseotools.com##+js(norafif, _0x)
+duplichecker.com,plagiarismchecker.co,plagiarismdetector.net,searchenginereports.net,smallseotools.com##+js(nosiif, ads)
+duplichecker.com,plagiarismchecker.co,plagiarismdetector.net,searchenginereports.net,smallseotools.com##+js(nostif, showPopup)
+duplichecker.com,plagiarismchecker.co,plagiarismdetector.net,searchenginereports.net,smallseotools.com##[href*="grammarly.com"]
+duplichecker.com,plagiarismchecker.co,plagiarismdetector.net,searchenginereports.net,smallseotools.com##div[class]:not([id]):not(.container):not(.main-content):has(> div[id] > ins.adsbygoogle)
+duplichecker.com,plagiarismchecker.co,plagiarismdetector.net,searchenginereports.net,smallseotools.com##div[style]:not([class]):has(> div[class][style] > span[class] > ._ap_apex_ad)
+||grammarly.com/*utm_source=$popup,domain=duplichecker.com|plagiarismchecker.co|plagiarismdetector.net|searchenginereports.net|smallseotools.com
+duplichecker.com##.adsbygoogle:upward([style]):upward([style])
+duplichecker.com##style + div[class]:has(> .adsbygoogle)
+duplichecker.com##.container > div[style*="margin-top:"]:has(a[href^="https://www.duplichecker.com/linksmgm"])
+duplichecker.com##div:has(> span[id^="side_bar"] > .adsbygoogle)
+duplichecker.com##ccc, cc, .vvefv, .st_dd, #img0000, a[onclick*="grmly_"]
+duplichecker.com##div[style^="min-height:"]:has(> span > ._ap_apex_ad)
+||duplichecker.com/*.php|$image,1p
+duplichecker.com##.container-fluid:has(> .container:first-child > .text-center > a[onclick^="PushClickValue"][style])
+smallseotools.com##.show.g_popup.fade.modal
+smallseotools.com##.show.fade.modal-backdrop
+smallseotools.com##body:style(overflow: auto !important;)
+||smallseotools.com/webimages/garamarlelogo.png$image,1p
+smallseotools.com##+js(rpnt, script, .css('display') == 'none', .css('display') == 'block')
+smallseotools.com##+js(rpnt, script, .is(':visible'))
+smallseotools.com##.sede_ara > span:has(> .adsbygoogle)
+smallseotools.com##.sede_ara > div[class^="my-"]:has(> .adsbygoogle)
+smallseotools.com##abc, iamp, .text_sinter, .mxutoo, [data-topy], .dola__a_est_, [class*="_amamarli_"], [class*="_carosl_"], [dat-hnge], [id^="ayima"], [data-rede="carousl"], [class^="carousl-"]
+smallseotools.com##span[id$="__sst"]:remove()
+smallseotools.com##span[onclick*="https://smallseotools.com/deep_grammar.html"]
+smallseotools.com##span[onclick*="https://smallseotools.com/deep_pcgrammar.html"]
+searchenginereports.net,plagiarismdetector.net##+js(no-xhr-if, /googlesyndication|adpushup|adrecover/)
+searchenginereports.net##+js(rmnt, script, /check_if_blocking|XMLHttpRequest|adkiller/)
+searchenginereports.net##div:has(> .adsbygoogle)
+searchenginereports.net##.grammarly-overall
+searchenginereports.net##div[id^="showtheadsfatf_"], div[id^="imgyad"], .showtheadsfatf, a[href="https://searchenginereports.net/gmadads"]
+searchenginereports.net##+js(spoof-css, div[id^="showtheadsfatf_"]\, div[id^="imgyad"]\, .showtheadsfatf\, a[href="https://searchenginereports.net/gmadads"], display, block)
+||searchenginereports.net/newassets/images/semrush-banner$image,1p
+||searchenginereports.net/theAdGMC/$image,1p
+searchenginereports.net##div[class^="theBdsy"], div[id^="theBdsy_"]
+||plagiarismdetector.net/img-pop25/popup2.png$image,1p
+||plagiarismdetector.net/bb_cc/_grammarly_popup.svg$image,1p
+plagiarismdetector.net##[style^="min-height:"][class][id], #img1, #img2, #img3, #img4, #img5
+plagiarismdetector.net##a[id][class][rel]:has(> img[class][src^="https://plagiarismdetector.net/"])
+plagiarismdetector.net##[rel]:matches-attr(/^/=/utm_source/)
+plagiarismdetector.net##[id]:matches-attr(id="/[a-z0-9]{32}/") + [class]
+plagiarismdetector.net##[id][class] > a[rel*="nofollow"][class] > img[class][src^="https://plagiarismdetector.net"]
+plagiarismdetector.net##[id][class] > a[rel*="nofollow"][style*="cursor"] > img[class][src^="https://plagiarismdetector.net"]
+plagiarismchecker.co##[class^="papa-"], #topbox, #afterbox, #top-ad, #before-ad, #after-ad, ins.adsbygoogle
+plagiarismchecker.co##+js(rpnt, script, ").removeClass(', ").addClass(', condition, adsbygoogle)
+plagiarismchecker.co##+js(rpnt, script, ").removeClass(`, ").addClass(`, condition, adsbygoogle)
+plagiarismchecker.co##+js(rpnt, script, ).fadeIn().removeClass(, ).addClass(, condition, adsbygoogle)
+plagiarismchecker.co##+js(rpnt, style, display:block!important, display:none!important)
+plagiarismchecker.co##+js(rpnt, style, {display:block;}, {display:none!important;})
+plagiarismchecker.co##+js(rpnt, style, {display:block}, {display:none!important;}, condition, grammarDisplay )
+plagiarismchecker.co##body *:matches-css(margin: /auto/):matches-css(width: /^[2-3]{1}[0-9]{2}(\.[0-9]+)?px$/):matches-css(height: /^[2-3]{1}[0-9]{2}(\.[0-9]+)?px$/):matches-css(display: /block|table/):remove()
+plagiarismchecker.co##.col-md-9 > section + span > section[class]
+plagiarismchecker.co##[class][style*="display"][style*="block"]:has(a img[src^="https://www.plagiarismchecker.co/"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/4104
+jagran.com##.ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/5695
+picbaron.com##+js(aeld, , _0x)
+picbaron.com##+js(aopr, loadTool)
+picbaron.com##+js(aopr, open)
+picbaron.com##+js(noeval)
+picbaron.com##.newsbar_blue
+picbaron.com###fadeinbox
+*$frame,domain=picbaron.com
+||picbaron.com/*.gif$image
+picbaron.com##[href*="/redirect?tid="]
+
+! https://github.com/uBlockOrigin/uAssets/issues/4098
+! https://github.com/uBlockOrigin/uAssets/issues/7122
+temp-mail.org##+js(set, checkadBlock, noopFunc)
+temp-mail.org#?#li:has(.viewLink:has-text(AD |))
+
+! http://forums.mozillazine.org/viewtopic.php?f=38&t=3043519
+3dprintersforum.co.uk##+js(acs, $, gandalfads)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/9wzeku/ublock_detected_in/
+giallozafferano.it##+js(nostif, (), 1)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=42171
+! https://github.com/uBlockOrigin/uAssets/issues/2720
+bit-url.com##+js(aopr, AaDetector)
+bit-url.com##+js(aopr, open)
+bit-url.com##+js(noeval)
+bit-url.com##+js(set, blurred, false)
+*$frame,domain=bit-url.com
+*$script,3p,denyallow=google.com|gstatic.com,domain=bit-url.com
+bit-url.com##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/4127
+javstream.com##+js(aopr, AaDetector)
+javstream.com##+js(aopw, __aaZoneid)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4130
+sna3talaflam.com###adblock_abdoutech
+sna3talaflam.com##body:style(overflow: auto !important;)
+sna3talaflam.com##+js(aeld, load, onload)
+
+! https://github.com/uBlockOrigin/uAssets/pull/4124
+linkspaid.com##+js(set, jQuery.adblock, false)
+linkspaid.com##+js(nostif, (), 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/329
+kurazone.net##+js(aopr, AaDetector)
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=kurazone.net
+
+! agar.*
+agar.pro##+js(aeld, load, onload)
+@@||ip-api.com/json/$script,domain=agar.pro
+@@||agar.pro^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/4136
+@@||methbox.com^$ghide
+methbox.com##+js(nostif, nextFunction, 250)
+||popcent.org^$3p
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=42181
+! https://github.com/uBlockOrigin/uAssets/issues/4202
+gamecopyworld.*##+js(acs, document.createElement, Tool)
+dl.gamecopyworld.*##.t2 > tbody > tr:nth-of-type(1) > td
+dl.gamecopyworld.*##td:nth-of-type(2)
+dl.gamecopyworld.*##tr:nth-of-type(6) > td
+consoletarget.com##+js(aopr, loadTool)
+||gamecopyworld.com/!_$frame
+
+! pch .com
+*$script,domain=pch.com,redirect=noopjs,3p
+@@||pchassets.com^$script,domain=pch.com
+@@||ajax.googleapis.com/ajax/$script,domain=pch.com
+@@||gstatic.com^$script,domain=pch.com
+@@||imasdk.googleapis.com^$script,domain=pch.com
+@@||pch.com^$ghide
+@@||content.jwplatform.com^$script,domain=pch.com
+@@||pch.com/vendor/googleanalytics/js/googleanalytics.js$script,1p
+@@||code.jquery.com^$script,domain=pch.com
+@@||cdnjs.cloudflare.com/ajax/$script,domain=pch.com
+@@||sts.eccmp.com/sts/scripts/conversen-SDK.js$script,domain=pch.com
+@@||static.topixcdn.com^$script,domain=pch.com
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/220
+! https://github.com/AdguardTeam/AdguardFilters/issues/114751
+@@||asianclub.*^$ghide
+asianclub.*##+js(set, clientSide.adbDetect, noopFunc)
+asianclub.*##+js(aopr, AaDetector)
+asianclub.*##+js(aopr, jwplayer.utils.Timer)
+asianclub.*##+js(nowoif)
+asianclub.*##+js(aopr, __Y)
+javmost.*##center > div[style^="width:100%; height: 100px"]
+watchjavnow.xyz##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13833
+! vidmoly . me | .to popups
+vidmoly.*##+js(nowoif)
+||apptospace.com^
+||disproveknob.com^
+vidmoly.*###mg_vd
+vidmoly.*###voc_block
+vidmoly.*###dos_vlock
+||cdn.staticmoly.me/*.php$domain=vidmoly.*
+
+! nsfw xcums . com popups
+xcums.com##+js(aopr, encodeURIComponent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6354
+xpaja.net##+js(acs, String.fromCharCode, atob)
+
+! https://github.com/NanoMeow/QuickReports/issues/351
+comnuan.com##+js(set, cmnnrunads, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3960
+mega-p2p.net##+js(aopr, open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4156
+audioz.download,peeplink.in##+js(acs, String.fromCharCode, 'shift')
+
+! https://github.com/uBlockOrigin/uAssets/issues/3960#issuecomment-440603697
+! https://github.com/uBlockOrigin/uAssets/issues/7821
+@@||savelinks.*^$ghide
+savelinks.*##+js(aopr, LieDetector)
+
+! uppit. com ads
+||uppit.com^$document,csp=script-src 'self' 'unsafe-eval' 'unsafe-inline' data: *.cloudflare.com
+@@||uppit.com^$ghide
+
+! https://github.com/abp-filters/abp-filters-anti-cv/issues/18
+xianzhenyuan.cn##+js(acs, document.getElementById, undefined)
+
+! https://forums.lanik.us/viewtopic.php?f=96&t=42204
+novablogitalia.*##+js(aeld, load, nextFunction)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4164
+||shrinkearn.com/sw.js$script,1p
+*$frame,domain=shrinkearn.com,3p,denyallow=cloudflare.com
+shrinkearn.com##+js(aopr, open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4171
+gsm1x.xyz##+js(aopw, downloadJSAtOnload)
+gsm1x.xyz##+js(nano-stb, run)
+||romgoc.net^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/364
+dexterclearance.com#@#ins.adsbygoogle
+dexterclearance.com##.adsbygoogle:style(max-height: 1px !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4184
+a-o.ninja,anime-odcinki.pl##+js(set, showAds, true)
+! https://github.com/uBlockOrigin/uAssets/issues/4338
+anime-odcinki.pl##+js(aopr, _pop)
+anime-odcinki.pl##.size-full
+
+! https://github.com/uBlockOrigin/uAssets/issues/4187
+singingdalong.*##+js(aeld, load, 2000)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=42217
+mrdeepfakes.com##+js(aopw, ReactAds)
+mrdeepfakes.com##+js(acs, document.getElementsByTagName, script)
+mrdeepfakes.com##+js(aopw, phtData)
+mrdeepfakes.com##[href*="offer"]
+
+! https://github.com/NanoMeow/QuickReports/issues/370
+! https://www.reddit.com/r/uBlockOrigin/comments/a4ms6i/ublock_for_firefoxchrome_not_blocking_video_on/
+*&expires$media,redirect=noopmp3-0.1s,domain=prosieben.at|prosieben.de|prosiebenmaxx.de|ran.de
+||zomap.de/*&expires=$script,domain=prosieben.at|prosieben.de|prosiebenmaxx.de|ran.de
+
+! popunder / (nsfw) sites - phtData
+donk69.com,hotdreamsxxx.com##+js(aopw, phtData)
+
+! https://github.com/NanoMeow/QuickReports/issues/340
+! https://forums.lanik.us/viewtopic.php?p=143447#p143447
+veedi.com##+js(set, adBlocker, false)
+4j.com##+js(nostif, (), 2000)
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=4j.com|veedi.com,redirect-rule=google-ima.js
+4j.com###bio_ep, #bio_ep_bg
+4j.com##body:style(overflow: auto !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/a09q3o/anti_adblock_uonano_defender/
+! https://github.com/uBlockOrigin/uAssets/issues/20572
+anitube.*##+js(aopr, exoJsPop101)
+anitube.*##+js(set, adBlockDetected, noopFunc)
+anitube.*###iframeCore____
+||anitube.*/sw.js$script,1p
+anitube.*##div[style^="pointer-events: none; position: absolute; "]
+
+! https://github.com/uBlockOrigin/uAssets/issues/4193
+goltelevision.com##+js(set, adblock, false)
+@@||nqs.nice264.com/data?system=golt&plugin$xhr,domain=goltelevision.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4198
+||code.jquery.com/jquery-$script,domain=mega-mkv.com
+mega-mkv.com,mkv-pastes.com##+js(aeld, DOMContentLoaded, adlinkfly)
+mega-mkv.com##+js(aeld, DOMContentLoaded, shortener)
+mega-mkv.com##center > p:has(> a[href] > img.alignnone)
+
+! https://github.com/NanoMeow/QuickReports/issues/382
+medievalists.net##.widget-title:has-text(Adv)
+
+! celebritymovieblog . com popups / ads
+celebritymovieblog.com##+js(acs, puShown, /doOpen|popundr/)
+celebritymovieblog.com##.banner_top
+
+! https://github.com/NanoMeow/QuickReports/issues/385
+stiletv.it##+js(set, StileApp.somecontrols.adBlockDetected, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4212
+beeimg.com##+js(nostif, document.cookie, 2500)
+beeimg.com##+js(nostif, window.open)
+beeimg.com##.offer
+
+! https://github.com/uBlockOrigin/uAssets/issues/4215
+fileone.tv##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4216
+mywatchseries.*##+js(nowebrtc)
+||d19f0dp1dh77jq.cloudfront.net^
+||mywatchseries.*/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/4219
+yomovies.*##+js(aopr, decodeURI)
+mixdrp.*##+js(aeld, load, download-wrapper)
+mixdrop.*##+js(set, MDCore.adblock, 0)
+mixdrop.*,mixdrp.*##+js(acs, $, String.fromCharCode)
+mixdrop.*,mixdrp.*##+js(nano-stb, disabled)
+mdbekjwqa.pw##+js(noeval-if, setInterval)
+mdbekjwqa.pw##+js(acs, document.createElement, onerror)
+mdfx9dc8n.net,mdzsmutpcvykb.net##+js(rmnt, script, /h=decodeURIComponent|popundersPerIP/)
+mdbekjwqa.pw,mdfx9dc8n.net,mdzsmutpcvykb.net,mixdrop.*,mixdrp.*,mixdroop.*##+js(nowoif)
+||mixdrop.*/sw.js$script,1p
+mixdrop.*##div[onclick^="$(this).remove"]
+mdbekjwqa.pw,mdfx9dc8n.net,mixdrp.*,mixdrop.*,mixdroop.*##body > div[style^="position: absolute;"][style*="z-index"]
+*$script,3p,denyallow=dotblocking.dummy|google.com|gstatic.com|hwcdn.net|jquery.com,domain=mixdrop.*|mixdrp.*|~mixdrop.one|mixdroop.*
+||brightadnetwork.com^
+||cviezjsg.com^
+||gtbtnrpzz.com^
+||jwgigawtq.com^
+||zwuucugezzjhhi.com^
+
+! https://github.com/NanoMeow/QuickReports/issues/389
+||d81idz8m5qll8.cloudfront.net/app.min.js$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/4221
+m.hellporno.com###fltd-inner
+hellporno.*##.bnnrs-player
+
+||share.notizie.it^
+||areyouabot.net^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/a2bkso/ublock_not_blocking/
+! https://github.com/uBlockOrigin/uAssets/issues/7790
+u.gg###af-header-link
+u.gg###af-all:style(margin-top: 4em;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4241
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=actiongame.com|brain-games.co.uk|classicgame.com|games-site.co.uk|hiddenobjectgames.com|mahjong.co.uk|mahjong.com|match3.co.uk|match3games.com|mindgames.com|neongames.co.uk|solitaireonline.com|timemanagementgame.com
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=neongames.com
+
+! anti adb puzzlefry . com
+puzzlefry.com##+js(aopw, killAdBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4246
+hentaisd.*##+js(aopr, LieDetector)
+||n1g459ky7y.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/6177
+ftlauderdalebeachcam.com,ftlauderdalewebcam.com,juneauharborwebcam.com,keywestharborwebcam.com,kittycatcam.com,mahobeachcam.com,miamiairportcam.com,morganhillwebcam.com,njwildlifecam.com,nyharborwebcam.com,paradiseislandcam.com,pompanobeachcam.com,portbermudawebcam.com,portcanaveralwebcam.com,portevergladeswebcam.com,portmiamiwebcam.com,portnywebcam.com,portnassauwebcam.com,portstmaartenwebcam.com,portstthomaswebcam.com,porttampawebcam.com,sxmislandcam.com##+js(nostif, innerHTML)
+ftlauderdalebeachcam.com,ftlauderdalewebcam.com,juneauharborwebcam.com,keywestharborwebcam.com,kittycatcam.com,mahobeachcam.com,miamiairportcam.com,morganhillwebcam.com,njwildlifecam.com,nyharborwebcam.com,paradiseislandcam.com,pompanobeachcam.com,portbermudawebcam.com,portcanaveralwebcam.com,portevergladeswebcam.com,portmiamiwebcam.com,portnywebcam.com,portnassauwebcam.com,portstmaartenwebcam.com,portstthomaswebcam.com,porttampawebcam.com,sxmislandcam.com##.horiz-banner-box-1, .info-left, .info-right
+||cdn.ptztv.live/*/ads/$image
+portevergladeswebcam.com###partnerad1div
+
+! https://github.com/NanoMeow/QuickReports/issues/400
+hqtv.biz##+js(set, google_tag_data, noopFunc)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/a31vbm/some_help_needed_in_finding_out_the_antiadblock/
+thoptv.*##+js(aopr, AaDetector)
+thoptv.*##+js(nostif, readyplayer, 2000)
+
+! https://github.com/NanoMeow/QuickReports/issues/403
+liveuamap.com##+js(set, noAdBlock, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4255
+||smrmembers-smr.smartmediarep.com/*/video/*.mp4$media,domain=tv.naver.com,redirect=noopmp4-1s
+
+! https://github.com/uBlockOrigin/uAssets/issues/4260
+forum-pokemon-go.fr##+js(nostif, nextFunction, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4263
+||short.es/adv/*$frame,1p
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=42285
+! https://github.com/uBlockOrigin/uAssets/issues/4577
+! https://github.com/uBlockOrigin/uAssets/issues/6416
+@@||rte.ie^$ghide
+@@||v.fwmrm.net/ad/g/*_HTML5_Live$script,domain=rte.ie
+@@||src.litix.io/videojs/$script,domain=rte.ie
+@@||rte.ie/player/$script,xhr,1p
+@@||googlesyndication.com/pagead/js/adsbygoogle.js$xhr,domain=rte.ie
+||rte.ie/ads/*$media,redirect=noopmp4-1s,domain=rte.ie
+@@||doubleclick.net/gampad/live/ads*rte.ie$xhr,domain=imasdk.googleapis.com
+@@||doubleclick.net/gampad/ads*rte.ie$xhr,domain=imasdk.googleapis.com
+||securecdn.videologygroup.com/Prod/DSPMedia/$media,redirect=noopmp3-0.1s,domain=rte.ie
+*/media/*.mp4|$media,domain=rte.ie,redirect=noopmp3-0.1s
+! https://www.reddit.com/r/uBlockOrigin/comments/l65lnp/
+*$1p,image,redirect-rule=1x1.gif,domain=rte.ie
+rte.ie##.vjs-close-button
+rte.ie##.adCue
+
+! crohasit . com popups
+crohasit.*##+js(aopw, Fingerprint2)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4266
+theglobeandmail.com##+js(aopw, adBlocker)
+
+! https://github.com/NanoMeow/QuickReports/issues/411
+macwelt.de,pcwelt.de##+js(aeld, load, autoRecov)
+
+! 6play fr anti adb
+@@||v.fwmrm.net/ad/g/*_html5_live$script,domain=6play.fr
+@@||v.fwmrm.net/ad/g/$xhr,domain=6play.fr
+*.mp4$media,redirect=noopmp3-0.1s,domain=6play.fr
+@@||ads.stickyadstv.com^$xhr,domain=6play.fr
+*$script,redirect-rule=noopjs,domain=6play.fr
+@@||7cbf2.v.fwmrm.net^$xhr,domain=6play.fr
+
+||adslop.com^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/417
+@@||genvideos.*/js/showads.js$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/4276
+||googlesyndication.com/pagead/$script,redirect=noopjs,domain=uploadbox.io
+uploadbox.io##+js(nosiif, (), 5000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4268
+gaypornwave.com##+js(aost, String.prototype.charCodeAt, ai_)
+gaypornwave.com##+js(aopr, ExoLoader)
+gaypornwave.com##+js(aopr, _pop)
+##[href^="https://popcash.net/"]
+##[href^="https://adult.xyz/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/4268#issuecomment-445406636
+onlineclassnotes.com###turnOffAdBlockerContainer
+
+! https://forums.lanik.us/viewtopic.php?p=143974#p143974
+dualpaste.net##+js(nowebrtc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/26605
+urbia.de##+js(aopr, _sp_.mms.startMsg)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/26600
+! https://github.com/uBlockOrigin/uAssets/issues/13747
+! https://github.com/uBlockOrigin/uAssets/issues/19127
+freecoursesite.com,livsavr.co##+js(acs, eval, replace)
+freecoursesite.com##+js(nostif, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4279
+scubidu.eu##+js(aost, String.prototype.charCodeAt, ai_)
+scubidu.eu###custom_html-15
+scubidu.eu###custom_html-16
+
+! https://github.com/uBlockOrigin/uAssets/issues/4281
+root-top.com##+js(aopr, adblockblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6205
+! https://github.com/uBlockOrigin/uAssets/issues/20954
+!#if env_firefox
+||cibntv.net/youku/$media,important,redirect=none:10,from=youku.com
+!#endif
+||cibntv.net/youku/*$media,redirect=noopmp3-0.1s,domain=youku.com
+||valipl.cp31.ott.cibntv.net^$media,redirect=noopmp3-0.1s,domain=youku.com
+youku.com##+js(nano-stb, , ,0)
+@@||valipl.cp31.ott.cibntv.net^$xhr,domain=youku.com
+*$image,redirect-rule=1x1.gif,domain=youku.com
+
+! popunder celebjihad . com nsfw
+celebjihad.com##+js(aopr, dataPopUnder)
+||celebjihad.live^$3p
+||leojmp.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/4303
+! https://github.com/easylist/easylist/issues/6200
+! https://github.com/easylist/easylist/issues/6543
+! https://github.com/easylist/easylist/issues/6553
+allmomsex.com,allnewindianporn.com,analxxxvideo.com,animalextremesex.com,anime3d.xyz,animefuckmovies.com,animepornfilm.com,animesexbar.com,animesexclip.com,animexxxsex.com,animexxxfilms.com,anysex.club,apetube.asia,asianfuckmovies.com,asianfucktube.com,asianporn.sexy,asiansex.*,asiansexcilps.com,beeg.fund,beegvideoz.com,bestasiansex.pro,bigsexhub.com,bravotube.asia,brutalanimalsfuck.com,candyteenporn.com,daddyfuckmovies.com,desifuckonline.com,exclusiveasianporn.com,exteenporn.com,fantasticporn.net,fantasticyoungporn.com,fineasiansex.com,firstasianpussy.com,freeindiansextube.com,freepornasians.com,freerealvideo.com,fuck-beeg.com,fuck-xnxx.com,fuckasian.pro,fuckfuq.com,fuckundies.com,fullasiantube.com,gojapaneseporn.com,golderotica.com,goodyoungsex.com,goyoungporn.com,hardxxxmoms.com,hdvintagetube.com,hentaiporn.me,hentaisexfilms.com,hentaisexuality.com,hot-teens-movies.mobi,hotanimepornvideos.com,hotanimevideos.com,hotasianpussysex.com,hotjapaneseshows.com,hotmaturetube.com,hotmilfs.pro,hotorientalporn.com,hotpornsexvideos.com,hotpornyoung.com,hotxxxjapanese.com,hotxxxpussy.com,indiafree.net,indianpornvideo.online,japanfuck.*,japanporn.*,japanpornclip.com,japanesetube.video,japansex.me,japanesexxxporn.com,japansporno.com,japanxxx.asia,japanxxxworld.com,keezmovies.surf,lingeriefuckvideo.com,liveanimalporn.zooo.club,madhentaitube.com,megahentaitube.com,megajapanesesex.com,megajapantube.com,milfxxxpussy.com,momsextube.pro,momxxxass.com,monkeyanimalporn.com,moviexxx.mobi,newanimeporn.com,newjapanesexxx.com,nicematureporn.com,nudeplayboygirls.com,openxxxporn.com,originalindianporn.com,originalteentube.com,pig-fuck.com,plainasianporn.com,popularasianxxx.com,pornanimetube.com,pornasians.pro,pornhat.asia,pornheed.online,pornjapanesesex.com,pornomovies.asia,pornvintage.tv,primeanimesex.com,realjapansex.com,realmomsex.com,redsexhub.com,retroporn.world,retrosexfilms.com,sex-free-movies.com,sexanimesex.com,sexanimetube.com,sexjapantube.com,sexmomvideos.com,sexteenxxxtube.com,sexxxanimal.com,sexyoungtube.com,sexyvintageporn.com,sopornmovies.com,spicyvintageporn.com,sunporno.club,tabooanime.club,teenextrem.com,teenfucksex.com,teenhost.net,teensex.*,teensexass.com,tnaflix.asia,totalfuckmovies.com,totalmaturefuck.com,txxx.asia,vintagetube.*,voyeurpornsex.com,warmteensex.com,wetasiancreampie.com,wildhentaitube.com,wowyoungsex.com,xhamster-art.com,xmovie.pro,xnudevideos.com,xnxxjapon.com,xpics.me,xvide.me,xxxanimefuck.com,xxxanimevideos.com,xxxanimemovies.com,xxxhentaimovies.com,xxxhothub.com,xxxjapaneseporntube.com,xxxlargeporn.com,xxxmomz.com,xxxmovies.*,xxxpornmilf.com,xxxpussyclips.com,xxxpussysextube.com,xxxretrofuck.com,xxxsex.pro,xxxsexyjapanese.com,xxxteenyporn.com,xxxvideo.asia,xxxvideos.ink,xxxyoungtv.com,youjizzz.club,youngpussyfuck.com##+js(aopr, popit)
+allmomsex.com,allnewindianporn.com,analxxxvideo.com,animalextremesex.com,anime3d.xyz,animefuckmovies.com,animepornfilm.com,animesexbar.com,animesexclip.com,animexxxsex.com,animexxxfilms.com,anysex.club,apetube.asia,asianfuckmovies.com,asianfucktube.com,asianporn.sexy,asiansex.*,asiansexcilps.com,beeg.fund,beegvideoz.com,bestasiansex.pro,bigsexhub.com,bravotube.asia,brutalanimalsfuck.com,candyteenporn.com,daddyfuckmovies.com,desifuckonline.com,exclusiveasianporn.com,exteenporn.com,fantasticporn.net,fantasticyoungporn.com,fineasiansex.com,firstasianpussy.com,freeindiansextube.com,freepornasians.com,freerealvideo.com,fuck-beeg.com,fuck-xnxx.com,fuckasian.pro,fuckfuq.com,fuckundies.com,fullasiantube.com,gojapaneseporn.com,golderotica.com,goodyoungsex.com,goyoungporn.com,hardxxxmoms.com,hdvintagetube.com,hentaiporn.me,hentaisexfilms.com,hentaisexuality.com,hot-teens-movies.mobi,hotanimepornvideos.com,hotanimevideos.com,hotasianpussysex.com,hotjapaneseshows.com,hotmaturetube.com,hotmilfs.pro,hotorientalporn.com,hotpornsexvideos.com,hotpornyoung.com,hotxxxjapanese.com,hotxxxpussy.com,indiafree.net,indianpornvideo.online,japanfuck.*,japanporn.*,japanpornclip.com,japanesetube.video,japansex.me,japanesexxxporn.com,japansporno.com,japanxxx.asia,japanxxxworld.com,keezmovies.surf,lingeriefuckvideo.com,liveanimalporn.zooo.club,madhentaitube.com,megahentaitube.com,megajapanesesex.com,megajapantube.com,milfxxxpussy.com,momsextube.pro,momxxxass.com,monkeyanimalporn.com,moviexxx.mobi,newanimeporn.com,newjapanesexxx.com,nicematureporn.com,nudeplayboygirls.com,openxxxporn.com,originalindianporn.com,originalteentube.com,pig-fuck.com,plainasianporn.com,popularasianxxx.com,pornanimetube.com,pornasians.pro,pornhat.asia,pornheed.online,pornjapanesesex.com,pornomovies.asia,pornvintage.tv,primeanimesex.com,realjapansex.com,realmomsex.com,redsexhub.com,retroporn.world,retrosexfilms.com,sex-free-movies.com,sexanimesex.com,sexanimetube.com,sexjapantube.com,sexmomvideos.com,sexteenxxxtube.com,sexxxanimal.com,sexyoungtube.com,sexyvintageporn.com,sopornmovies.com,spicyvintageporn.com,sunporno.club,tabooanime.club,teenextrem.com,teenfucksex.com,teenhost.net,teensex.*,teensexass.com,tnaflix.asia,totalfuckmovies.com,totalmaturefuck.com,txxx.asia,vintagetube.*,voyeurpornsex.com,warmteensex.com,wetasiancreampie.com,wildhentaitube.com,wowyoungsex.com,xhamster-art.com,xmovie.pro,xnudevideos.com,xnxxjapon.com,xpics.me,xvide.me,xxxanimefuck.com,xxxanimevideos.com,xxxanimemovies.com,xxxhentaimovies.com,xxxhothub.com,xxxjapaneseporntube.com,xxxlargeporn.com,xxxmomz.com,xxxmovies.*,xxxpornmilf.com,xxxpussyclips.com,xxxpussysextube.com,xxxretrofuck.com,xxxsex.pro,xxxsexyjapanese.com,xxxteenyporn.com,xxxvideo.asia,xxxvideos.ink,xxxyoungtv.com,youjizzz.club,youngpussyfuck.com##+js(aeld, popstate, noPop)
+twister.porn##+js(aopr, open)
+xpics.me##+js(nowoif)
+fuckundies.com##+js(acs, puShown, /doOpen|popundr/)
+bigsexhub.com,fullasiantube.com,hotpornsexvideos.com,hotxxxpussy.com,openxxxporn.com,xxxlargeporn.com,xxxpussyclips.com,xxxpussysextube.com##.imbar
+##.ave-pl
+##.bottom-hor-block
+##.brs-block
+finevids.xxx##.spot3-holder
+hentaisexuality.com###popwindow
+livejapaneseporn.com##body > div > div > aside[class]
+pornjapanese.me##.bottom-spot-area
+pornjapanese.me##[class$="spots-area"]
+teencumpot.com###spot-holder
+xnxxjapon.com###asg-inplayer-block:upward(4)
+xxmovz.com##+js(aopr, decodeURI)
+xxmovz.com##.ad
+xxxvideos.ink###hidme
+xxxvideos.ink##li.plate:has(iframe[width="300"])
+xxxvideos.ink##.curiosity
+/quwet.js$script,1p
+||all-usanomination.com^$3p
+||willalland.info^
+! https://github.com/easylist/easylist/issues/8709
+##.advboxemb
+freeporn.works##.show
+freeporn.works##.past
+||freeporn.works/seven.aspx?
+||clivads.com^
+! https://github.com/easylist/easylist/issues/8710
+||sexxx.kim/literature.xhtml?
+! https://github.com/easylist/easylist/issues/8718
+||granny.asia/partner.xhtml?
+! https://github.com/easylist/easylist/issues/8729
+xvideo.party##.pride.dump
+||xvideo.party/shop.aspx?
+
+! https://github.com/gorhill/uBO-Extra/issues/111
+mtlblog.com,narcity.com##+js(aopw, Ha)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4311
+komikcast.*##+js(aeld, load, onload)
+komikcast.*##+js(aopr, open)
+@@||komikcast.*^$ghide
+||blogspot.*/*.gif$image,domain=komikcast.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/4316
+! https://github.com/uBlockOrigin/uAssets/issues/4457
+! https://github.com/uBlockOrigin/uAssets/issues/4456
+vidcloud.*##+js(acs, atob, decodeURIComponent)
+vidcloud.*##+js(acs, Math, XMLHttpRequest)
+@@||vidcloud.*^$ghide
+streamingworld.*##+js(acs, atob, decodeURIComponent)
+streamingworld.*##+js(aopr, AaDetector)
+streamingworld.*##+js(aopw, Fingerprint2)
+*$script,3p,denyallow=googleapis.com,domain=streamingworld.club
+l23movies.*,123moviess.*,123movieshub.*##+js(acs, JSON.parse, atob)
+0l23movies.*##+js(aopr, rid)
+123moviess.*##+js(aost, document.createElement, inlineScript)
+||d1b0fk9ns6n0w9.cloudfront.net^
+||mousheen.net^
+123moviesfree.*##+js(nowoif)
+123moviesd.com,1-23movies.cc,123moviesjr.cc,123moviess.se##+js(aopr, mm)
+
+! yesmovies .vc/. ws/. org/ .mn
+yesmovies.*##+js(nowoif)
+yesmovies.*##+js(aopr, AaDetector)
+yesmovies.*##+js(nowebrtc)
+/sw-vodlocker.to.js$script
+yesmovies.*##a.btn-successful
+
+! https://github.com/uBlockOrigin/uAssets/issues/2031
+solarmovie.*##+js(aopr, AaDetector)
+solarmovie.*##+js(nowoif)
+solarmovie.*##.close
+solarmovie.*##[href*="/4k"]
+solarmovie.*##table.movie_version:has-text(Promo)
+solarmovie.*##div.row:has-text(in HD)
+solarmovie.*##.jw-reset.jw-logo-top-left.jw-logo
+||solarmovie.vip/js/dab.min.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/4326
+! https://github.com/NanoAdblocker/NanoFilters/issues/503
+mega4up.*,zeefiles.*##+js(ra, onclick, [onclick^="window.open"])
+zeefiles.*##+js(nano-stb, tick)
+zeefiles.*##+js(nowoif)
+mycoolmoviez.*##[href="javascript:void(0);"]
+mycoolmoviez.*##+js(nowebrtc)
+||mycoolmoviez.*/sw.js
+! https://github.com/uBlockOrigin/uAssets/issues/8607
+mega4up.*##+js(nowoif)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/a6r2qx/ublock_filters_for_putlocker9ru/
+! https://github.com/uBlockOrigin/uAssets/issues/6090
+putlocker9.*##+js(aopw, Fingerprint2)
+putlocker9.*##.pframe:has([href^="javascript: void(0);"])
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/1011
+k511.me##+js(acs, document.getElementById, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4333
+thepiratebay.*,thepiratebay10.org##+js(aopw, spot)
+thepiratebay.*##+js(aopr, popjs.init)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/110333
+linksht.com##+js(nostif, /text()|0x/)
+linksht.com##+js(set, counter, 0)
+linksht.com##+js(aopw, arrayAd2)
+linksht.com##+js(nowoif)
+linksht.com##+js(set, window_focus, true)
+@@||linksht.com^$ghide
+linksht.com###bannerads
+linksht.com###getlink
+linksht.com###originalLink:style(display: block!important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/463
+audycje.tokfm.pl##+js(set, adsOk, true)
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=audycje.tokfm.pl
+
+! https://github.com/uBlockOrigin/uAssets/issues/4335
+news-leader.com##+js(aopr, _sp_._networkListenerData)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/228
+ihub.live,naturalbd.com##+js(aopr, encodeURIComponent)
+||ihub.live/sw.js$script,1p
+||naturalbd.com/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/1916
+bdiptv.*##+js(aopr, AaDetector)
+bdiptv.*##+js(nowoif)
+@@||bdiptv.*^$ghide
+bdlive.*###AdDiv
+
+! https://github.com/uBlockOrigin/uAssets/commit/8e1f6da09188c35695f3b21eaeda055e1c15248e#commitcomment-31744488
+milfzr.com##+js(nowoif)
+milfzr.com##+js(acs, String.prototype.charCodeAt, tabunder)
+milfzr.com##.wpfp_custom_ad_content
+milfzr.com###post-0
+||milfzr.com/*.gif$image
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=42364
+wemakesites.net##+js(acs, $, adBlockChecker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8269
+! https://www.reddit.com/r/uBlockOrigin/comments/9lom6n/help_blocking_ads_on_hulu/
+! https://www.reddit.com/r/uBlockOrigin/comments/eexi26/
+hulu.com##+js(set, Object.prototype._parseVAST, noopFunc)
+hulu.com##+js(set, Object.prototype.createAdBlocker, noopFunc)
+hulu.com##+js(set, Object.prototype.isAdPeriod, falseFunc)
+||assetshuluimcom-a.akamaihd.net/*.mp3$media,redirect=noopmp3-0.1s,domain=hulu.com
+@@||hulu.com^$ghide
+hulu.com###banner-ad-container
+hulu.com##.ad-choices
+! https://github.com/uBlockOrigin/uAssets/issues/17382
+! https://www.reddit.com/r/uBlockOrigin/comments/14b5lbw/
+! https://www.reddit.com/r/uBlockOrigin/comments/158nvca/not_blocking_hulu_ads/jti29qk/
+! https://www.reddit.com/r/uBlockOrigin/comments/16hr6pk/hulu_subtitles_getting_delayed_again/
+hulu.com##+js(json-prune-fetch-response, breaks pause_ads video_metadata.end_credits_time, pause_ads)
+hulu.com##+js(json-prune-fetch-response, breaks pause_ads video_metadata.end_credits_time, breaks)
+hulu.com##+js(json-prune, breaks pause_ads video_metadata.end_credits_time, pause_ads)
+hulu.com##+js(json-prune, breaks pause_ads video_metadata.end_credits_time, breaks)
+hulu.com##+js(xml-prune, xpath(//*[name()="MPD"]/@mediaPresentationDuration | //*[name()="Period"][.//*[name()="BaseURL" and contains(text()\,'/ads-')]] | //*[name()="Period"]/@start), Period[id^="Ad"i], .mpd)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4356
+@@||adserver.iprom.net/adserver7$xhr,domain=rtl.hr
+
+! https://github.com/NanoAdblocker/NanoCore/issues/235
+myjest.com##+js(nosiif, _$, 12345)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4268#issuecomment-449131154
+*$frame,domain=9ig.de,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/4268#issuecomment-449134469
+rgl.vn##+js(set, blurred, false)
+s.sseluxx.com##+js(nano-sib)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4377
+! https://github.com/NanoMeow/QuickReports/issues/2059
+unlockapk.com##+js(aeld, load, onload)
+@@||unlockapk.com^$ghide
+@@||unlockapk.com^$script,1p
+||googlesyndication.com/simgad/*$image,domain=unlockapk.com,redirect=1x1.gif
+@@||googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=unlockapk.com
+unlockapk.com##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/4368#issuecomment-449780120
+reqlinks.net##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4396
+mangovideo.*,pandamovies.pw##+js(acs, document.createElement, 'script')
+pandamovies.pw##+js(acs, puShown, /doOpen|popundr/)
+pandamovies.pw##+js(aopr, ExoLoader.serve)
+pandamovies.pw##+js(nowoif)
+mangovideo.*##+js(set, flashvars.popunder_url, '')
+mangovideo.*##.sponsor
+mangovideo.*##.top
+mangovideo.*##.table
+mangovideo.*##[target="_blank"]
+@@||pandamovies.pw^$ghide
+pandamovies.pw##.btn-lg.btn-block.btn
+||mangovideo.*/sw.js$script,1p
+||mangovideo.*/player/html.php?aid
+*$script,3p,domain=mangovideo.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/4397
+||pradjadj.com^$csp=child-src *.google.com *.gstatic.com *.arc.io
+pradjadj.com##[href="/advertise"]
+pradjadj.com##.ABD_display
+||pradjadj.com/*banner$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/4402
+siriusfiles.com##+js(nano-stb)
+||siriusfiles.com/adframe.js$frame,redirect-rule=noop.html
+
+! https://github.com/uBlockOrigin/uAssets/issues/4401
+@@||dvdporngay.com^$ghide
+||dvdporngay.com/wp-content/themes/*/images/loading.gif$image
+dvdporngay.com##+js(aopr, decodeURIComponent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4368#issuecomment-449787995
+alimaniacky.cz##+js(acs, $, urlForPopup)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4368#issuecomment-449866993
+dozarte.com##+js(acs, document.getElementById, undefined)
+dozarte.com##+js(ra, onclick)
+dozarte.com###banana
+
+! https://github.com/uBlockOrigin/uAssets/issues/4415
+shush.se##+js(set, check, true)
+||shush.se/loader/load.js$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/16693
+! https://github.com/uBlockOrigin/uAssets/issues/18099
+emurom.net##+js(set, dvsize, 51)
+emurom.net##+js(aost, jQuery, blockDLElements)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4399
+! https://www.reddit.com/r/uBlockOrigin/comments/u72fym/dailymotion_adblock_detected/
+||s3.amazonaws.com/dmas-public/rubicon/bundle.js$script,domain=dailymotion.com
+@@||dailymotion.com^$ghide
+
+! cinemalibero .best popups/ ads
+cinemalibero.*##+js(nowoif)
+cinemalibero.*##+js(aopr, AaDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4435
+allkpop.com##+js(set, isal, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2495
+! https://github.com/uBlockOrigin/uAssets/issues/9760
+! https://github.com/AdguardTeam/AdguardFilters/issues/112330
+! https://github.com/AdguardTeam/AdguardFilters/issues/110385
+downfile.site##+js(rmnt, script, deblocker)
+azmath.info,azsoft.*,downfile.site,downphanmem.com,expertvn.com,memangbau.com,trangchu.news,aztravels.net##+js(set, count, 0)
+azmath.info,azsoft.*,downfile.site,downphanmem.com,expertvn.com,memangbau.com,trangchu.news,aztravels.net##+js(aopr, SMart1)
+azmath.info,azsoft.*,downfile.site,downphanmem.com,expertvn.com,memangbau.com,trangchu.news##+js(noeval-if, chp_ad)
+expertvn.com##+js(rmnt, script, deblocker)
+trangchu.news##+js(rmnt, script, deblocker)
+trangchu.news##+js(no-xhr-if, /doubleclick|googlesyndication/)
+/fuckadb.js$badfilter
+megaurl.in,megafly.in##+js(ra, onclick, [onclick^="pop"])
+megaurl.in,megafly.in##+js(set, blurred, false)
+@@||megaurl.*^$ghide
+@@||expertvn.com^$ghide
+*$script,3p,denyallow=bootstrapcdn.com|cloudflare.com|google.com|googleapis.com|gstatic.com|hwcdn.net|jquery.com,domain=expertvn.com
+||monetiza.co^$3p
+||vidcrunch.com^$domain=aztravels.net|downfile.site
+@@*$ghide,domain=aztravels.net|downfile.site
+*$image,domain=app.trangchu.news|azmath.info,redirect-rule=1x1.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/4449
+gearingcommander.com##+js(nostif, innerHTML)
+gearingcommander.com##+js(no-xhr-if, ads)
+
+! https://github.com/NanoMeow/QuickReports/issues/508
+generate.plus##+js(nostif, checkStopBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4455
+za.gl##+js(acs, document.addEventListener, click)
+za.gl##+js(acs, document.getElementById, overlay)
+za.gl##+js(acs, setInterval, location)
+za.gl##+js(aopr, popad)
+za.gl##+js(nowoif, !za.gl, 0)
+za.gl##+js(set, document.hidden, true)
+za.gl###ww
+*$script,3p,denyallow=cloudflare.com|google.com|googleapis.com|gstatic.com,domain=za.gl
+
+! https://github.com/uBlockOrigin/uAssets/issues/4469
+||earn-bitcoins.*/banner_
+||bmovies.*/bassets/js/jquery.watch.js$script,1p
+bmovies.*###upgrade_pop
+||bmovies.*/sw.js$script,1p
+||doo6pwib3qngu.cloudfront.net^
+
+! https://github.com/uBlockOrigin/uAssets/issues/4472
+watchfree.*###vpnvpn
+||filesenzu.com^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/512
+rockit.it##.articolo-body-text-banner
+@@||rockitecn.nohup.it/webnew/js/adv$script,domain=rockit.it
+
+! https://github.com/uBlockOrigin/uAssets/issues/4478
+watchtvseries.*##+js(nowebrtc)
+||watchtvseries.*/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/4481
+gazetedamga.com.tr##+js(aopw, importFAB)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4368#issuecomment-450665976
+bitlk.com##+js(aopr, open)
+bitlk.com##+js(set, blurred, false)
+
+! anti-adb wakanim.tv
+@@||wakanim.tv^$script,xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/4488
+pickcrackpasswords.blogspot.com##+js(set, awm, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4491
+*$script,redirect-rule=noopjs,domain=debilizator.tv
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=debilizator.tv
+
+! https://forums.lanik.us/viewtopic.php?p=144605#p144605
+! https://github.com/uBlockOrigin/uAssets/issues/4541#issuecomment-478325073
+||cdn.provesrc.com/provesrc.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/4512
+dramacool.*##h2.widget-title:has-text(Advertisement)
+dramacool.*##[class$="_ads"]
+*$script,3p,denyallow=cloudflare.com|facebook.net|fbcdn.net|google.com|googleapis.com|gstatic.com|hcaptcha.com|recaptcha.net,domain=dramacool9.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/4368#issuecomment-450945393
+! http://fwd.ovh/J4NMS => http://qlinks.eu/J4NMS
+qlinks.eu##+js(set, blurred, false)
+||d.wedosas.net/i/$domain=qlinks.eu
+
+! https://github.com/uBlockOrigin/uAssets/issues/10486
+simsdom.com##+js(nowoif)
+simsdom.com##._ad
+simsdom.com###ad860
+simsdom.com###adv840
+simsdom.com##._pubR
+simsdom.com##._pubL
+simsdom.com##div[id^="elm"][style="opacity: 1; display: block;"]
+simsdom.com##+js(nano-sib, clearInterval, *)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4526
+wsj.com##[class*="sponsored"]
+wsj.com##div[id^="wrapper-AD_"]
+wsj.com##div[class^="style--column--"]:has(> div[class=""] > div[id^="wrapper-AD_NATIVE"])
+! https://www.wsj.com/livecoverage/tropical-storm-idalia-hurricane-florida?mod=hp_lead_pos7
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect=google-ima.js,domain=wsj.com,important
+
+! https://github.com/NanoMeow/QuickReports/issues/520
+@@||c.amazon-adsystem.com/aax2/apstag.js$script,domain=mylifetime.com
+@@||mylifetime.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/4533
+gomovies.*,gomoviesc.*##+js(nowoif)
+gostream.*,gomovies.*##+js(set, check_adblock, true)
+gomovies.*##+js(aopr, mm)
+||gomovies.*/sw.js$script,1p
+||haupsoti.net^
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=40809
+getfreesmsnumber.com##+js(acs, document.getElementById, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4368#issuecomment-451280061
+link.3dmili.com##+js(set, blurred, false)
+
+! https://github.com/NanoMeow/QuickReports/issues/519
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=zattoo.com
+
+! https://github.com/NanoMeow/QuickReports/issues/529
+kfrfansub.com##+js(set, adblockEnabled, false)
+
+! https://github.com/NanoMeow/QuickReports/issues/535
+! https://github.com/NanoMeow/QuickReports/issues/4754
+movisubmalay.*##+js(aopr, glxopen)
+movisubmalay.*##+js(aopr, exoJsPop101)
+
+! bayimg.com popups
+bayimg.com##+js(aeld, /^(?:click|mousedown)$/, ppu)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4543
+avcesar.com##+js(nostif, adspot_top, 1500)
+
+! https://github.com/NanoMeow/QuickReports/issues/538
+proxydocker.com##+js(nostif, (), 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4547
+illicoporno.com##+js(set, is_adblocked, false)
+*$popunder,domain=illicoporno.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4549
+mobdi3ips.com##+js(aeld, load, onload)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4368#issuecomment-451670210
+short-fly.com##+js(set, blurred, false)
+||ecotrackings.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/4552
+@@||audiotag.info^$script,1p
+*$image,domain=audiotag.info,redirect-rule=1x1.gif
+audiotag.info##+js(nostif, /offsetHeight|google|Global/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4557
+legionpeliculas.org##+js(aopw, smrtSB)
+legionpeliculas.org##+js(aopw, smrtSP)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4378#issuecomment-451783706
+latribunadelpaisvasco.com##+js(noeval)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4080
+hanime.tv##+js(set, ABLK, false)
+@@||hanime.tv^$ghide
+hanime.tv##a[href^="https://a.adtng.com/"]
+hanime.tv##div:has(> a[href^="https://track.aftrk1.com/"])
+||members.hanime.tv/*/preroll_ad_event$xhr
+@@||adtng.com/get/$frame,domain=hanime.tv,badfilter
+! https://www.reddit.com/r/uBlockOrigin/comments/mgu1v7/banner_ads_on_hanimetv_videos_on_firefox_mobile/
+!#if env_mobile
+hanime.tv##.htvad[style^="width: 300px; display: block"]
+hanime.tv##.htvnad1
+hanime.tv##.htvnad
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/4368#issuecomment-452155399
+! https://youshort.me/rCsn => bantenexis.com
+youshort.me##+js(aopr, open)
+youshort.me##.blog-item
+bantenexis.com###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+bantenexis.com##div[id^="wpsafe-wait"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/adwlvz/is_there_a_way_to_skip_countdown_timer_on_this/
+dokumen.tips##+js(nano-stb, , , 0.02)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4580
+tudigitale.it##+js(nostif, an_message, 500)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4613
+ibcomputing.com##+js(nostif, Adblocker, 10000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4616
+footballstream.tv,mlbstream.tv,nbastream.tv,nflstream.tv##+js(acs, decodeURI, decodeURIComponent)
+mlbstream.tv,nbastream.tv,nflstream.tv,nhlstream.tv##[href*="allsports4free.online/"]
+mlbstream.tv,nbastream.tv,nhlstream.tv##[href^="https://pl.allsports4free.club/"]
+||sports-streams-online.club^$3p
+||givememmastreams.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/4617
+celeb.gate.cc##+js(aeld, click, native code)
+celeb.gate.cc##[href^="https://goo.gl/"]
+||strpjmp.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/4619
+bolly4u.*##+js(aopr, open)
+bolly4u.*##+js(aopr, XMLHttpRequest)
+bolly4u.*##.code-block
+
+||d1pozdfelzfhyt.cloudfront.net^
+
+! https://github.com/uBlockOrigin/uAssets/issues/4623
+@@||f4links.*^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/4625
+androidweblog.com##.stream-item
+androidweblog.com##[class^="andro-random-paragraph"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/aezw21/pogo/
+pogo.com##+js(set, pogo.intermission.staticAdIntermissionPeriod, 0)
+@@||cdn.pogo.com/*/blockadblock$script,1p
+@@||cdn.pogo.com/*/imasdk/application.js$script,1p
+@@||cdn.pogo.com/*/imasdk/imasdk-pogo-1.0.js$script,1p
+@@||cdn.pogo.com/*/imasdk/video_player.js$script,1p
+@@||cdn.pogo.com/*prebid.js$script,1p
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=pogo.com
+@@||pogo.com^$ghide
+pogo.com##.hideableAd
+pogo.com###leaderboard-ad
+pogo.com##[class*="gameSkyscraperAd"]
+pogo.com##[class*="gameTopAd"]
+
+! https://github.com/uBlockOrigin/uAssets/pull/4626
+@@||torrent9.*^$ghide
+torrent9.*##+js(aeld, , _0x)
+torrent9.*###vpnvpn
+
+! https://github.com/uBlockOrigin/uAssets/issues/4632
+||retdaz.fun^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/4636
+! https://github.com/uBlockOrigin/uAssets/issues/13168
+||cloudvideo.tv/sw.js$script,1p
+cloudvideo.tv##+js(set, SubmitDownload1, noopFunc)
+cloudvideotv.*,cloudvideo.tv##+js(nowoif)
+cloudvideotv.*##+js(aopr, localStorage)
+cloudvideo.tv##+js(aopr, mm)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4646
+bdsmporn.cc,cocoporn.net,dirtyporn.cc,faperplace.com,freeadultvideos.cc,freepornstream.cc,generalpornmovies.com,kinkyporn.cc,moviesxxx.cc,movstube.net,onlinefetishporn.cc,peetube.cc,pornonline.cc,porntube18.cc,streamextreme.cc,streamporn.cc,videoxxx.cc,watchporn.cc,x24.video,xxxonline.cc,xxxonlinefree.com,xxxopenload.com##+js(acs, decodeURI, decodeURIComponent)
+bdsmporn.cc,cocoporn.net,dirtyporn.cc,faperplace.com,freeadultvideos.cc,freepornstream.cc,generalpornmovies.com,kinkyporn.cc,moviesxxx.cc,movstube.net,onlinefetishporn.cc,peetube.cc,pornonline.cc,porntube18.cc,streamextreme.cc,streamporn.cc,videoxxx.cc,watchporn.cc,x24.video,xxx24.vip,xxxonline.cc,xxxonlinefree.com,xxxopenload.com##+js(aopr, exoJsPop101)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7195
+eodev.com##+js(aeld, message, data.slice)
+brainly.*,eodev.com##+js(nostif, trigger, 0)
+eodev.com##+js(aopr, localStorage)
+@@*$ghide,domain=brainly.*|eodev.com
+brainly.*##[class^="BrainlyAdsPlaceholder"]
+brainly.*,eodev.com##.brn-ads-box
+brainly.*,eodev.com##.js-scroll-to-unlock-section.brn-kodiak-answer-redesigned__unlock
+brainly.*,eodev.com##[data-testid="brainly_ads_placeholder"]
+brainly.*##+js(aopr, __brn_private_mode)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/agpu7r/
+startseite.to##+js(nowebrtc)
+@@||startseite.to^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/4665
+@@||getfreebit.xyz^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/4666
+fautsy.com##+js(nano-sib, seconds)
+@@||fautsy.com^$ghide
+||fautsy.com/adblock.php$xhr,redirect-rule=nooptext,1p
+fautsy.com##.coinzilla
+fautsy.com##ins[class][style^="display:inline-block;width:"]
+
+! https://github.com/NanoMeow/QuickReports/issues/523
+legia.net##+js(nostif, timeoutChecker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4677
+legionprogramas.org##+js(aopw, smrtSB)
+legionprogramas.org##+js(aopw, smrtSP)
+legionjuegos.org,legionpeliculas.org,legionprogramas.org##+js(nano-sib, , ,0.02)
+legionjuegos.org,legionpeliculas.org,legionprogramas.org##+js(set, t, 0)
+||ouo.*^$popup,domain=legionjuegos.org|legionpeliculas.org|legionprogramas.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/4681
+! https://github.com/uBlockOrigin/uAssets/issues/20330
+||adxxx.com^$3p
+wiztube.xyz##+js(aopr, BetterJsPop)
+wiztube.xyz##+js(acs, Math.floor, vpn)
+wiztube.xyz##+js(set, adblockcheck, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/aho1fs/help_with_ads_and_overlays_on_a_website/
+! https://github.com/uBlockOrigin/uAssets/issues/15466
+kinoger.to##+js(nowebrtc)
+kinoger.ru##+js(nowoif)
+kinoger.re##+js(nostif, 0x)
+kinoger.ru##+js(aopr, my_pop)
+kinoger.to##a[href^="//fbmedia-ckl.com/get"]
+||notifyvideo.info/p/creative-video/*$media,3p,redirect=noopmp4-1s
+
+! https://github.com/uBlockOrigin/uAssets/issues/4683
+xxxbunker.com##+js(nowoif)
+||static.xxxbunker.com/preroll/*$media,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/4684
+clasicotas.org##+js(aopr, nombre_dominio)
+clasicotas.org##+js(nowoif)
+||clasicotas.org/themes/*/js/links.js$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/588
+! https://github.com/AdguardTeam/AdguardFilters/issues/52587
+moretvtime.*##+js(acs, adBlockDetected)
+moretvtime.*##.sc-banner
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ai01d9/first_state_update_ad_blocker_blocker/
+||aterroppop.com^
+||pandanetwork.club^$3p,script
+/?r=dir&zoneid=$all
+||letaikay.net^
+
+! https://www.reddit.com/r/uBlockOrigin/comments/aidnkv/invisible_full_page_ad_breaks_the_search_bar/
+watchjavonline.com##+js(acs, atob, decodeURIComponent)
+||artofxxx.net^$image,domain=watchjavonline.com
+
+! https://forums.lanik.us/viewtopic.php?f=103&t=42491
+tvguia.es##+js(acs, $, .height)
+
+! https://github.com/NanoMeow/QuickReports/issues/591
+||googlesyndication.com/pagead/show_ads.js$script,redirect-rule=noopjs,domain=iblogbox.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4697
+foxseotools.com##+js(nowoif, !?safelink_redirect=)
+foxseotools.com##+js(set, blurred, false)
+foxseotools.com##form#go-popup:remove()
+@@||foxseotools.com^$ghide
+foxseotools.com##.iframe-overlay
+*$frame,denyallow=facebook.com|google.com|youtube.com,domain=foxseotools.com
+*$script,3p,denyallow=akamaiedge.net|cloudflare.com|facebook.net|fbcdn.net|google.com|googleapis.com|gstatic.com|pinterest.com|recaptcha.net,domain=foxseotools.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4698 / movierulz group
+123movierulz.*,7movierulz1.*,7moviesrulz.*,movieruls.*,movierulz.*,movierulzfree.*,movierulz2free.*,movierulzs.*,movierulzwatch.*,movierulzz.*,moviesrulz.*,moviesrulzfree.*,watchmoviesrulz.com##+js(nowoif)
+movierulzlink.*,newmovierulz.*##+js(aopr, String.fromCharCode)
+4movierulz.*,4movierulz1.*,7movierulzfree.*,movieruls.*,movierulz4k.*,movierulzfree.*,movierulz2free.*,movierulzwatch.*,movierulzs.*##.ad_btn-white
+123movierulz.*,4movierulz.*,4movierulz1.*,7movierulzfree.*,7moviesrulz.*,movieruls.*,movierulz4k.*,movierulzfree.*,movierulz2free.*,movierulzs.*,movierulzwatch.*,movierulzz.*,moviesrulz.*,moviesrulzfree.*,watchmovierulz.*,watchmoviesrulz.com##.ad_watch_now
+7moviesrulz.com,movierulzfree.*,movierulzs.*##.hd-buttons
+123movierulz.*,4movierulz.*,4movierulz1.*,7moviesrulz.*,movieruls.*,movierulz4k.*,moviesrulz.*,moviesrulzfree.*,movierulz2free.*##.btn1
+7movierulzfree.*##.display\:none\;\"hd-buttons\"
+||hellrider.live^$3p
+||suftanzine.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/4700
+||9xmovies.*/sw.js$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/aj27ua/redirect_on_couchtuner/
+! https://github.com/uBlockOrigin/uAssets/issues/16528
+couchtuner.*##+js(acs, RegExp, 0x)
+||couchtuner.*/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10701
+dutchycorp.*##+js(acs, eval, replace)
+dutchycorp.*##+js(aopr, NoAdBlock)
+dutchycorp.*##center > .hide-on-med-and-down
+dutchycorp.*##[class^="bmadblock"]
+dutchycorp.*##div[class][style="width:468px;height:60px;display: inline-block;margin: 0 auto"]
+dutchycorp.*##+js(aopr, adBlockDetected)
+dutchycorp.*##+js(nano-sib, time.html, 1000)
+dutchycorp.*##+js(set, blurred, false)
+@@||dutchycorp.*^$ghide
+dutchycorp.*##ins.adsbygoogle
+dutchycorp.*##[class$="-page"] .box-main center center
+dutchycorp.*##[class$="-page"] > .hide-on-small-only
+dutchycorp.*##[class$="-page"] > .container > .row > .col-md-offset-1 .text-left > *:not(.box-main)
+dutchycorp.*##[class$="-page"] center > p
+dutchycorp.*##.box-main > .row > center
+dutchycorp.*##.box-main > center > div
+dutchycorp.*##.nav-ad
+dutchycorp.*##.row [style*="width:728px;height:90px"]
+dutchycorp.*##.sidenav_left
+dutchycorp.*##.sidenav_right
+dutchycorp.*##[id*="ScriptRoot"]
+dutchycorp.*##[style*="width:300px;height:250px"]
+dutchycorp.*###link-view [style^="width:468px"]
+dutchycorp.*###boxes
+dutchycorp.*###link-view > center > br
+*$frame,denyallow=cloudflare.com|facebook.com|google.com|hcaptcha.com|youtube.com|jungleofferwall.com,domain=dutchycorp.*
+! https://github.com/uBlockOrigin/uAssets/issues/17166#issuecomment-1477414313
+dutchycorp.*##+js(acs, console.log, blockAdBlock)
+*$script,redirect-rule=noopjs,from=dutchycorp.*,to=~sentry-cdn.com
+autofaucet.dutchycorp.space##.show-on-medium
+@@||googletagmanager.com/gtag/js$script,domain=autofaucet.dutchycorp.*
+@@||cdnjs.cloudflare.com^$script,domain=autofaucet.dutchycorp.*
+@@||imasdk.googleapis.com^$script,domain=autofaucet.dutchycorp.*
+
+! https://forums.lanik.us/viewtopic.php?p=145148#p145148
+sexgalaxy.net##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4732
+||watchserieshd.watch/ajax/banner/$xhr,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/616
+mtsproducoes.*##+js(aopw, block_detected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4742
+zooqle.*##+js(aeld, /^(?:mousedown|mouseup)$/, 0x)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=42524#p145173
+16honeys.com##+js(set, ckaduMobilePop, noopFunc)
+
+! https://github.com/NanoMeow/QuickReports/issues/619
+socks24.org##+js(aeld, load, onload)
+socks24.org##[href^="http://www.linkev.com/"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/28893
+tugaflix.*##+js(aopr, open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4750
+mongri.net##+js(aopw, adBlockDetected)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/28936
+@@||nonsensediamond.*^$ghide
+nonsensediamond.*##+js(aopr, decodeURI)
+
+! https://github.com/NanoMeow/QuickReports/issues/623
+planetf1.com##+js(aopr, CatapultTools)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/28948
+tubidy.mobi##+js(acs, document.getElementById, retry)
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/1034
+easy-coin.*##+js(acs, Math.random, banner)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4760
+@@||eestatic.com/*/adsbygoogle.js$script,domain=elespanol.com
+elespanol.com##+js(set, tieneAdblock, 0)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/263
+! https://github.com/NanoMeow/QuickReports/issues/1642
+masterplayer.xyz##+js(aeld, click, popundr)
+onifile.com,topflix.*##+js(nano-sib)
+topflix.*##+js(nowoif)
+@@||topflix.*^$ghide
+topflix.*##+js(aopr, console.clear)
+
+! https://forums.lanik.us/viewtopic.php?p=145288#p145288
+||ads.exoclick.com^$script,redirect=noopjs,domain=uflash.tv
+@@||uflash.tv^$ghide
+uflash.tv#@#.ad
+@@||exosrv.com/popunder1000.js$script,domain=uflash.tv
+uflash.tv##+js(aopr, open)
+uflash.tv##+js(aopw, ads_priv)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4776
+jizzbunker.com,xxxdan.com##+js(aopw, spot)
+jizzbunker.com##+js(aopr, XMLHttpRequest)
+jizzbunker.com##+js(aopr, Notification)
+jizzbunker.com##.banner-popup
+jizzbunker.com##.panel-rklcontent-wide
+jizzbunker.com##.panel-body
+
+! https://github.com/uBlockOrigin/uAssets/issues/4774
+porndex.com##+js(aeld, click)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/am512n/antiadblocker_on_remodelistacom/
+remodelista.com##+js(set, adsAreBlocked, false)
+remodelista.com##[data-advert]
+
+! https://github.com/uBlockOrigin/uAssets/issues/4792
+club-flank.com##+js(aopr, ExoLoader.serve)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4794
+idedroidsafelink.*,links-url.*##+js(aeld, load, onload)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4798
+hackstore.*##.onp-sl-content:style(display: block !important;)
+hackstore.*##.onp-sl-social-locker
+! https://github.com/uBlockOrigin/uAssets/issues/4798#issuecomment-464387517
+! https://github.com/uBlockOrigin/uAssets/issues/6112
+hackstore.me##+js(acs, spr)
+##[href^="//look.utndln.com/offer"]
+! https://github.com/uBlockOrigin/uAssets/issues/7964
+@@*$ghide,domain=drivelinks.me|hackshort.me|pelislinks.me
+*$popunder,domain=drivelinks.me|hackshort.me|pelislinks.me
+drivelinks.me,hackshort.me,pelislinks.me##+js(acs, document.oncontextmenu)
+drivelinks.me,hackshort.me,pelislinks.me##+js(acs, document.onmousedown)
+@@*$ghide,domain=freeserverhostingweb.club|me-encantas.com|tanfacil.net|tecnoaldia.net
+freeserverhostingweb.club,me-encantas.com,mexicogob.com,noticiascripto.site,tanfacil.net,tecnoaldia.net,todoandroid.live##+js(acs, document.oncontextmenu)
+freeserverhostingweb.club,me-encantas.com,mexicogob.com,noticiascripto.site,tanfacil.net,tecnoaldia.net,todoandroid.live##+js(acs, document.onkeydown)
+freeserverhostingweb.club,me-encantas.com,mexicogob.com,noticiascripto.site,tanfacil.net,tecnoaldia.net,todoandroid.live##+js(acs, document.onmousedown)
+! https://github.com/uBlockOrigin/uAssets/issues/11378
+||ads-twitter.com/uwt.js$xhr,3p,redirect-rule=noop.txt
+noticiascripto.site##.pb
+
+! https://github.com/uBlockOrigin/uAssets/issues/4799
+compucalitv.com##.onp-sl-content:style(display: block !important;)
+compucalitv.com##.onp-sl-social-locker
+compucalitv.com##+js(aeld, DOMContentLoaded, compupaste)
+compucalitv.com##+js(aopr, redirectURL)
+compucalitv.com##.botondescarga
+compupaste.com##+js(nowoif)
+*$script,3p,denyallow=chatango.com,domain=compucalitv.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4807
+||gigaleecher.com/templates/plugmod/giga.js$script,1p
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/1035
+teknorizen.*##+js(set, safelink.adblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4818
+hdfriday.*##+js(aopr, open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4834
+extramovies.*##+js(aopr, open)
+extramovies.*##+js(aopr, AaDetector)
+extramovies.*##+js(aopw, u_cfg)
+vanfem.com##+js(aopr, __Y)
+extramovies.*##center
+extramovies.*##[href^="/dlbutton.php"]
+extramovies.*##[href^="http://adfpoint.com"]
+*$script,3p,denyallow=bootstrapcdn.com|disqus.com|jsdelivr.net|jwpcdn.com|fastly.net|fastlylb.net|jquery.com|hwcdn.net|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com|facebook.net,domain=extramovies.*
+extramovies.*###theme_back
+! https://github.com/uBlockOrigin/uAssets/issues/11023
+extralinks.*,extramovies.*##[href^="https://t.me/"]
+extralinks.*,extramovies.*##[class^="ad_btn"]:upward(center)
+||extralinks.*/ads.js$script,1p
+||extramovies.*/ads.js$script,1p
+recipesdelite.com##+js(nano-sib, inner)
+recipesdelite.com###btnhide
+recipesdelite.com###btnshow:style(display: block !important;)
+! https://github.com/AdguardTeam/AdguardFilters/issues/145210
+extramovies.*#@#.ad_btn
+extramovies.*##+js(aopw, afStorage)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4835
+@@||googletagmanager.com/gtm.js$script,domain=ciudad.com.ar
+
+! https://github.com/uBlockOrigin/uAssets/issues/4836
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=gameswf.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4837
+mangasail.*##+js(set, adblock, 1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4842
+daizurin.com##+js(nostif, nextFunction, 250)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4854
+animekb.*##+js(nowebrtc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4861
+@@||webtvhd.com^$ghide
+@@||webserver.one^$ghide
+webtvhd.com##[id*="ScriptRoot"]
+webtvhd.com##ins.adsbygoogle
+webserver.one##ins.adsbygoogle
+webserver.one##div[id^="imCell_"][class=""]:has-text(/Advertisement/i)
+webserver.one##[id*="ScriptRoot"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/4863#issuecomment-462169290
+! https://github.com/AdguardTeam/AdguardFilters/issues/49897
+coolmathgames.com##+js(nano-sib)
+coolmathgames.com##+js(set, cmgpbjs, false)
+coolmathgames.com##+js(set, displayAdblockOverlay, false)
+coolmathgames.com##+js(set, google, false)
+coolmathgames.com###block-adstop-otherpage-728x90
+coolmathgames.com##[class*="-ads"]
+
+! https://github.com/NanoMeow/QuickReports/issues/661
+||poweredbyliquidfire.mobi^
+
+! news-und-nachrichten.de anti adb
+news-und-nachrichten.de##+js(set, adblock, false)
+news-und-nachrichten.de##.adverts_billboard
+news-und-nachrichten.de##.adverts_top
+
+! https://github.com/uBlockOrigin/uAssets/issues/4875
+acapellas4u.co.uk##+js(nostif, bait, 1)
+
+! https://github.com/NanoMeow/QuickReports/issues/663
+austin.culturemap.com##+js(aopr, CatapultTools)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4892
+! https://github.com/uBlockOrigin/uAssets/issues/5144
+t-online.de##^script:has-text(}(window);)
+t-online.de##^script:has-text(,window\);)
+t-online.de##^script:has-text(toscr\')
+email.t-online.de#@#^script:has-text((window);)
+email.t-online.de#@#^script:has-text(,window\);)
+@@||t-online.de^$ghide
+t-online.de##[href^="http://pubads.g.doubleclick.net"]
+! https://www.reddit.com/r/uBlockOrigin/comments/m1zwji/
+!#if env_mobile
+pcgames.de,t-online.de#@#+js(set, CustomEvent, noopFunc)
+!#endif
+! https://github.com/uBlockOrigin/uAssets/issues/8892
+t-online.de##[href^="https://ad1.adfarm1.adition.com"]
+t-online.de###Tasfeed1
+t-online.de###T-Shopping
+
+! https://github.com/uBlockOrigin/uAssets/issues/4894
+! https://github.com/uBlockOrigin/uAssets/issues/5273
+kstreaming.*##+js(aopw, Fingerprint2)
+kstreaming.*##+js(nowebrtc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10420
+atomohd.*##+js(nowoif, !atomtt)
+atomohd.*##+js(acs, setTimeout, admc)
+pctfenix.*,pctnew.*##+js(acs, I833)
+pctfenix.*,pctnew.*##+js(aopr, AaDetector)
+pctfenix.*,pctnew.*##+js(aopr, TID)
+atomixhq.*,pctfenix.*,pctnew.*##+js(aopw, adcashMacros)
+atomixhq.*,pctfenix.*,pctnew.*##+js(nowoif, !/download\/|link/)
+atomixhq.*,pctfenix.*,pctnew.*##.ads
+*$script,3p,denyallow=cloudflare.net|fontawesome.com|googleapis.com|hwcdn.net|jquery.com,domain=atomixhq.*|pctfenix.*
+atomtt.com##+js(acs, setTimeout, admc)
+@@||acorta-enlace.com^$ghide
+||pctnew.*/sw.js$script
+atomohd.*##.ads
+||atomohd.*/*/banners$image
+*/script/pattern.js|$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/4903
+audiofanzine.com##+js(set, Math.pow, noopFunc)
+
+! https://github.com/NanoMeow/QuickReports/issues/677
+hubzter.com##+js(aopr, adsanity_ad_block_vars)
+
+! sport stuff
+/adu.php$frame,3p
+allfeeds.*,daddylive.*,sporting77.*,teleriumtv.*##+js(nowoif)
+allfeeds.*,teleriumtv.*###overlay
+
+! lewdzone. com popups
+lewdzone.com##+js(aopr, decodeURI)
+lewdzone.com##+js(nano-sib, circle_animation)
+lewdzone.com##+js(nano-stb, CountBack, 990)
+@@||lewdzone.com^$ghide
+||lewdzone.com/wp-content/themes/lz/assets/affiliate/$image
+lewdzone.com##.ad_overlay, .ad, [href^="https://theporndude.com"]
+lewdzone.com##.affiliate-block
+lewdzone.com##.alzd
+lewdzone.com##.Leaderboard
+lewdzone.com##.item.widget_text
+lewdzone.com##.site-margin > .container-block div:has(> .item.widget_text)
+lewdzone.com###ad_vid
+
+! https://github.com/uBlockOrigin/uAssets/issues/4927
+problogbooster.com##+js(aopw, hidekeep)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4926
+ispunlock.*,tpb.*##+js(aopr, pace)
+||d3t9nyds4ufoqz.cloudfront.net^
+
+! https://github.com/NanoMeow/QuickReports/issues/686
+robloxscripts.com##+js(nostif, _0x)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4943
+! https://github.com/NanoMeow/QuickReports/issues/1967
+megafile.io##+js(nosiif, (), 5000)
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=megafile.io
+
+! https://github.com/uBlockOrigin/uAssets/issues/4945
+dilo.nu##+js(nowoif)
+@@||doramasmp4.com^$ghide
+@@||p.jwpcdn.com/player/plugins/vast/$xhr,domain=doramasmp4.com
+||doramasmp4.com/glx_$xhr,1p
+||doramasmp4.com/propeller$script,xhr,1p
+/1clkn/*$xhr,domain=doramasmp4.com
+*$script,xhr,3p,denyallow=arc.io|disqus.com|facebook.net|fastly.net|fastlylb.net|fbcdn.net|googleapis.com|googleusercontent.com|gstatic.com|jwpcdn.com|jwplatform.com|disquscdn.com,domain=dilo.nu|doramasmp4.com
+||padsims.com^
+
+! https://www.reddit.com/r/uBlockOrigin/comments/asidoc/antiantiadblocker_not_working_on_geoguessr/
+@@||geoguessr.com/_ads/*$script,1p
+@@||geoguessr.com^$xhr,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/asmddi/i_have_no_clue_how_this_ad_works/
+skpb.live##+js(acs, atob, decodeURIComponent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4956
+link-to.net##+js(aeld, load, nextFunction)
+link-to.net##+js(nano-sib)
+@@||link-to.net^$ghide
+||link-to.net^$image,redirect-rule=1x1.gif,1p
+link-to.net##.ad-block-1
+
+! https://github.com/uBlockOrigin/uAssets/issues/4962
+123movies.*##+js(aopr, open)
+||d13jhr4vol1304.cloudfront.net^
+||oppfiles.com/common/scriptjs.php
+/jquery.watch.js|$script,1p,important,domain=~dekrantvantoen.nl
+
+! https://forums.lanik.us/viewtopic.php?p=145787#p145787
+! https://github.com/uBlockOrigin/uAssets/issues/7644
+@@||static.sunmedia.tv^$script,xhr,domain=ivoox.com
+@@||services.sunmedia.tv/geotarget/geocity.php$xhr,domain=ivoox.com
+@@||ivoox.com^$ghide
+ivoox.com###adLayout
+||static.addevweb.com/integrations$script,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/4965
+*$script,3p,domain=7starhd.*,denyallow=googleapis.com
+8xfilms.*##+js(aost, document.createElement, onerror)
+||r-q-e.com^$3p
+
+! https://github.com/abp-filters/abp-filters-anti-cv/issues/58
+! https://github.com/abp-filters/abp-filters-anti-cv/issues/59
+! https://github.com/abp-filters/abp-filters-anti-cv/issues/60
+autojournal.fr,autoplus.fr,sportauto.fr##+js(nostif, (), 1)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/274
+! https://github.com/NanoAdblocker/NanoFilters/issues/314
+uploadev.*##+js(nowoif)
+uploadev.*##+js(set, openInNewTab, noopFunc)
+
+! https://forums.lanik.us/viewtopic.php?p=145808#p145808
+volksstimme.de##+js(aopr, TRM)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4972
+! https://github.com/AdguardTeam/AdguardFilters/issues/59901
+! https://github.com/AdguardTeam/AdguardFilters/issues/79755
+@@||shortearn.*^$ghide
+shortearn.*##.banner
+shortearn.*##+js(aopr, AaDetector)
+shortearn.*##+js(aopr, open)
+shortearn.*##+js(set, blurred, false)
+shortearn.*##.box-main > .blog-item
+beta.shortearn.eu##+js(acs, fetch, detectAdblockWithInvalidURL)
+beta.shortearn.eu##^script:has-text(detectAdblockWithInvalidURL)
+*$frame,denyallow=google.com,domain=shortearn.in
+*$script,3p,denyallow=cloudflare.com|google.com|gstatic.com|recaptcha.net,domain=shortearn.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/4978
+4shared.com##+js(nosiif, .append, 1000)
+||4shared.com/empty.js$script,1p,important
+||4shared.com/sw.js$script,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/4980
+pingit.*,~pingit.com,~pingit.me,pngit.live##+js(aopr, AaDetector)
+pingit.*,~pingit.com,~pingit.me,pngit.live##+js(aopr, open)
+pingit.*,~pingit.com,~pingit.me,pngit.live##+js(aopr, rmVideoPlay)
+pingit.*,~pingit.com,~pingit.me,pngit.live##+js(aopr, _pop)
+pingit.*,~pingit.com,~pingit.me,pngit.live##+js(aopw, Fingerprint2)
+pingit.*,~pingit.com,~pingit.me,pngit.live##+js(set, blurred, false)
+||pingit.*/sw.js$script,1p,domain=~pingit.com|~pingit.me
+*$frame,3p,domain=pingit.im|pngit.live
+*$script,3p,denyallow=cdn77.org|google.com|gstatic.com|pingit.im|recaptcha.net|smartsuppcdn.com|smartsuppchat.com,domain=pingit.*|pngit.live|~pingit.com|~pingit.me
+noticiasesports.live,noweconomy.live##+js(nano-sib, , 1200, 0)
+noticiasesports.live,noweconomy.live##+js(nowoif)
+noticiasesports.live,noweconomy.live###overlay
+noweconomy.live##+js(set, adblockDetector, noopFunc)
+noweconomy.live##+js(ra, disabled, button[id="invisibleCaptchaShortlink"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/4983
+pelisplay.*##+js(aopw, smrtSB)
+pelisplay.*##+js(aopw, smrtSP)
+pelisplay.*##+js(acs, document.write, advnetwork)
+pelisplay.*##+js(disable-newtab-links)
+pelisplay.*#@#[href*="/afu.php"]
+pelisplay.*##[data-lang="Publicidad"]
+
+! https://forums.lanik.us/viewtopic.php?p=145842#p145842
+@@||chichester.co.uk^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/4988
+hdfull.*##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+hdfull.*##+js(aeld, mousedown, !!{});)
+hdfull.*##+js(nano-stb)
+! https://github.com/uBlockOrigin/uAssets/issues/4988#issuecomment-480530699
+gamovideo.com##+js(acs, onload)
+gamovideo.com##+js(aopr, open)
+gamovideo.com##+js(acs, document.createElement, onerror)
+gamovideo.com###po-pimp
+||gamovideo.com^$frame,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/4990
+hitokin.net##+js(set, loadingAds, true)
+
+||swarm.video/telerium_dev.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/4999
+! https://github.com/AdguardTeam/AdguardFilters/issues/74297
+elil.cc##+js(acs, String.fromCharCode, break)
+elil.cc##+js(ra, onmouseover|onclick|onmouseout, .save-btn.pull-right)
+elil.cc##+js(set, ads_blocked, 0)
+elil.cc##+js(nano-sib, timer, 1000, 0.6)
+elil.cc##+js(acs, puShown, /doOpen|popundr/)
+elil.cc##div[style="position: fixed; display: block; width: 100%; height: 15%; top: 0; left: 0; background-color: rgba(0, 0, 0, 0); z-index: 300000;"]
+|about:blank|$popup,domain=elil.cc
+*$frame,3p,domain=elil.cc
+*$script,3p,domain=elil.cc,denyallow=googleapis.com
+
+! developerinsider.co anti adb
+developerinsider.co##+js(set, runAdBlocker, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5001
+phonenumber-lookup.info##+js(aopr, pa)
+
+! loadTool
+abellalist.com,didilist.com,erotichdworld.com,sharkyporn.com##+js(acs, loadTool, popping)
+##[href*="https://mlksis.com/"]
+
+||cubiboak.com^
+
+! nextorrent . site popups
+nextorrent.*##+js(acs, jQuery, popunder)
+nextorrent.*##+js(ra, onclick)
+
+! https://github.com/NanoMeow/QuickReports/issues/718
+closeronline.co.uk##+js(aopr, _sp_._networkListenerData)
+
+! https://github.com/NanoMeow/QuickReports/issues/721
+calculate.plus##+js(nostif, checkStopBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5019
+turkdown.com##+js(aopr, AaDetector)
+link.turkdown.com##+js(set, blurred, false)
+@@||turkdown.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/726
+@@||hilly.io/adBlockDetector.js$script,1p
+@@||hilly.io^$ghide
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=hilly.io
+
+! https://github.com/NanoMeow/QuickReports/issues/722
+ilprimatonazionale.it#@#.td-ad-background-link
+ilprimatonazionale.it##+js(set, td_ad_background_click_link, undefined)
+ilprimatonazionale.it##body:style(background-image: none !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/733
+urlgalleries.net##+js(aopr, AaDetector)
+urlgalleries.net##+js(acs, document.cookie, setOCookie)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5032
+moonquill.com##+js(aopw, document.getElementsByClassName)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5044
+googlvideo.com##+js(aopr, mm)
+googlvideo.com##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/170
+@@||finobe.com^$ghide
+@@||googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=finobe.com
+*$script,redirect-rule=noopjs,domain=finobe.com
+
+! https://github.com/NanoMeow/QuickReports/issues/723
+@@||play.nova.bg^$1p,script
+vbox7.com##.vbox-cap-adw
+
+! https://github.com/uBlockOrigin/uAssets/issues/5047
+@@||convallariaslibrary.com^$ghide
+convallariaslibrary.com##.code-block
+convallariaslibrary.com##.widget_custom_html ins:upward(.widget_custom_html)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6773
+! https://github.com/uBlockOrigin/uAssets/issues/5052#issuecomment-1407771485
+frag-mutti.de##.intext-ad
+frag-mutti.de##.ad-loading:remove()
+frag-mutti.de###campaign-popup
+frag-mutti.de###fm-shadow
+
+! https://github.com/NanoMeow/QuickReports/issues/751
+! https://github.com/uBlockOrigin/uAssets/issues/18626
+thehindu.com##+js(set, Adblock, false)
+thehindu.com###gsi_overlay
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/416#issuecomment-467794333
+maniac.de##+js(aopr, td_ad_background_click_link)
+maniac.de##[href^="https://www.maniac.de/linkout/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/6825
+! https://github.com/uBlockOrigin/uAssets/issues/11096
+cambro.tv##+js(acs, document.addEventListener, initBCPopunder)
+cambro.tv##+js(acs, crakPopInParams)
+cambro.tv##+js(aopr, onload)
+cambro.tv##.box.rltdsldr
+cambro.tv##.bttsptt.box
+cambro.tv##[href^="https://go.strpjmp.com"]
+||cambro.tv/contents/*/player/*$media,1p
+||cambro.tv/player/html.php$frame,1p
+*$popunder,domain=cambro.tv
+||liveflirt.net^$frame,domain=cambro.tv
+cambro.tv###kt_player > [href^="https://www.cambro.tv/"]
+cambro.tv##.crak_cams_ctn
+cambro.tv##.fp-brand
+cambro.tv##[href^="https://t.grtya.com/"]
+||widgets.skyprivate.com/promo/$frame
+cambro.tv##+js(set, flashvars.logo_url, '')
+cambro.tv##+js(set, flashvars.logo_text, '')
+
+! https://github.com/uBlockOrigin/uAssets/issues/5059
+jav789.com,javbuz.com,letfap.com##+js(aopr, Date.prototype.toUTCString)
+jav789.com,javbuz.com,letfap.com##+js(aeld, getexoloader)
+javkiki.com##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+jav789.com,javbuz.com,javkiki.com,letfap.com##div.container > .box[style^="margin-bottom"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/5061
+! https://github.com/uBlockOrigin/uAssets/issues/7043
+nibelungen-kurier.de##+js(set, nlf.custom.userCapabilities, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5062
+||googlesyndication.com/pagead/show_ads.js$script,redirect=noopjs,domain=epubreader.1bestlink.net
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/61829
+coolsoft.altervista.org##+js(nostif, _0x)
+coolsoft.altervista.org###block-block-30
+coolsoft.altervista.org###content-right-floatbox
+
+! https://github.com/NanoMeow/QuickReports/issues/755
+@@||hanimesubth.com/assets/js/ads.core.js$script,1p
+hanimesubth.com##+js(aeld, load, nextFunction)
+hanimesubth.com##[href="https://slotgame66.co/"]
+*.gif$domain=hanimesubth.com,image
+*.webp$domain=hanimesubth.com,image,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/5067
+bagas31.info##+js(acs, atob, decodeURIComponent)
+||bagas31.info/sw.js$script,1p
+bagas31.info##[href="javascript:void(0);"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/5069
+noz.de##+js(set, nozNoAdBlock, true)
+@@||noz.de^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/765
+1004lucifer.blogspot.com##+js(aopw, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20727
+sportea.online##+js(no-fetch-if, ads)
+sportea.online##+js(aopr, document.body.innerHTML)
+sportea.online##+js(acs, document.createElement, onerror)
+watchkobestreams.info##+js(aost, atob, inlineScript)
+*$script,3p,domain=fromwatch.com,denyallow=cloudflare.com|googleapis.com
+
+! https://github.com/NanoMeow/QuickReports/issues/772
+img999.com##+js(acs, document.getElementById, block)
+img999.com#@##adbrite
+
+! https://github.com/NanoMeow/QuickReports/issues/781
+tcheats.com##+js(aopr, checkAds)
+
+! https://github.com/NanoMeow/QuickReports/issues/735
+gamekult.com##+js(aopr, SmartWallSDK)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5093
+gsmturkey.net##+js(aeld, load, nextFunction)
+*$script,3p,domain=gsmturkey.net,redirect-rule=noopjs
+
+! https://github.com/easylist/easylist/issues/2929
+@@||cdnjs.cloudflare.com/ajax/libs/*$script,domain=warda.at
+
+! https://github.com/uBlockOrigin/uAssets/issues/5101
+dz4up1.com##+js(acs, document.getElementById, adblockinfo)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5102
+readmng.com#@#.scroll_target_top
+
+! https://github.com/uBlockOrigin/uAssets/issues/5105
+ciudadgamer.com##+js(acs, atob, encodeURIComponent)
+
+! https://github.com/uBlockOrigin/uAssets/pull/8730
+ovagames.com##+js(acs, JSON, _0x)
+ovagames.com###adter:upward(3)
+ovagames.com##.single-entry-titles:has-text(Sponsor)
+@@||ovagames.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/797
+! https://github.com/NanoMeow/QuickReports/issues/830
+mmacore.tv##+js(acs, $, importFAB)
+@@||mmacore.tv^$ghide
+
+! https://github.com/abp-filters/abp-filters-anti-cv/issues/102
+laprovence.com,viedemerde.fr##+js(acs, document.createElement, __esModule)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5120
+@@||svonm.com/hd-main.js$script,domain=kicker.de|kino.de|videos.giga.de|video.spieletipps.de
+!#if env_chromium
+@@||svonm.com/hd-main.js$script,domain=kicker.de|kino.de|videos.giga.de|video.spieletipps.de,badfilter
+!#endif
+!#if env_firefox
+@@||svonm.com/hd-main.js$script,domain=kicker.de|kino.de|videos.giga.de|video.spieletipps.de,badfilter
+!#endif
+!#if env_edge
+@@||svonm.com/hd-main.js$script,domain=kicker.de|kino.de|videos.giga.de|video.spieletipps.de,badfilter
+!#endif
+!#if env_safari
+@@||svonm.com/hd-main.js$script,domain=kicker.de|kino.de|videos.giga.de|video.spieletipps.de,badfilter
+!#endif
+!#if env_mobile
+@@||svonm.com/hd-main.js$script,domain=kicker.de|kino.de|videos.giga.de|video.spieletipps.de,badfilter
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/7192
+symbolab.com##.googleLeftSkyScrapper
+
+! https://github.com/NanoMeow/QuickReports/issues/811
+@@||googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=safelinkunited.blogspot.com
+@@||pagead2.googlesyndication.com/pagead/$script,domain=safelinkunited.blogspot.com
+safelinkunited.blogspot.com##.ADS
+safelinkunited.blogspot.com##ins.adsbygoogle
+
+! https://github.com/NanoMeow/QuickReports/issues/812
+||ipla.pluscdn.pl/p/*$media,redirect=noopmp4-1s,domain=polsatsport.pl
+@@||redefineadpl.hit.gemius.pl^$xhr,domain=polsatsport.pl
+
+! https://github.com/uBlockOrigin/uAssets/issues/5291
+! https://github.com/AdguardTeam/AdguardFilters/issues/34440
+@@||gemius.pl^$script,xhr,domain=polsatnews.pl
+@@||hit.stat24.com/$xhr,domain=polsatnews.pl
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=polsatnews.pl
+
+! https://github.com/uBlockOrigin/uAssets/issues/8642
+! https://github.com/uBlockOrigin/uAssets/issues/8287
+lookmovie.*##+js(aopr, adBlockDetected)
+@@||lookmovie.*^$ghide
+||metrika.lookmovie.io^$important
+lookmovie.*##.view-top-ab
+lookmovie.*##.notifyjs-corner
+lookmovie.*##.nord-vpn.home-banner
+lookmovie.*###single.dtsingle > .content > center > a[href] > img
+lookmovie.*###single.dtsingle > .content > .sheader > .poster > .extra > center > a[href] > img
+lookmovie.*##+js(aopr, mm)
+lookmovie.ag.w3snoop.com##.ezoic-ad
+
+! https://github.com/NanoMeow/QuickReports/issues/822
+streamhentaimovies.com##+js(nostif, pum-open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4918#issuecomment-473450129
+! https://github.com/uBlockOrigin/uAssets/issues/6423
+||p-cdn.us/public/*$media,redirect=noopmp3-0.1s,domain=soundcloud.com
+||sndcdn.com/audio/*$media,redirect=noopmp3-0.1s,domain=soundcloud.com
+||soundcloud.com/audio-ad$1p,xhr
+||soundcloud.com/promoted$1p,xhr
+soundcloud.com##.soundList__item:has(.sc-promoted-icon-medium)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5141
+@@||virginmediatelevision.ie/player/$xhr,1p
+@@||virginmediatelevision.ie/includes/js/cookienotice.js.pagespeed.$script,1p
+
+! as suggested https://github.com/uBlockOrigin/uAssets/issues/5153
+! https://github.com/uBlockOrigin/uAssets/issues/5157
+*expires$media,redirect=noopmp3-0.1s,domain=kabeleins.de
+*expires$media,redirect=noopmp3-0.1s,domain=kabeleinsdoku.de
+*expires$media,redirect=noopmp3-0.1s,domain=sat1gold.de
+*expires$media,redirect=noopmp3-0.1s,domain=sixx.de
+||zomap.de/*&expires=$script,domain=kabeleins.de|kabeleinsdoku.de|sat1gold.de|sixx.de
+vox.de##+js(no-xhr-if, svonm)
+
+! https://github.com/NanoMeow/QuickReports/issues/834
+bharian.com.my##+js(aopr, SmartWallSDK)
+
+! amyscans.com popups
+amyscans.com##+js(aost, String.prototype.charCodeAt, ai_)
+amyscans.com##+js(ra, href, #clickfakeplayer)
+
+! https://github.com/NanoMeow/QuickReports/issues/850
+laradiobbs.net##+js(set, adblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5186
+!#if env_firefox
+||fwmrm.net/ad/*$script,redirect=noopjs,domain=nationalgeographic.com
+!#endif
+! https://www.reddit.com/r/uBlockOrigin/comments/ygkeqa/
+nationalgeographic.fr##+js(no-xhr-if, /\/VisitorAPI\.js|\/AppMeasurement\.js/)
+nationalgeographic.*##.ng-ad-banner
+nationalgeographic.*##.ngart__footer-ad
+
+! https://forums.lanik.us/viewtopic.php?p=146528#p146528
+mstream.*##+js(aopr, open)
+ver-pelis-online.*##+js(set, decodeURIComponent, trueFunc)
+ver-pelis-online.*##a.lav_btn
+ver-pelis-online.*##[href$="player.html"]
+ver-pelis-online.*##.holder >li:has([href="/pelis/descargar.html"])
+ver-pelis-online.*##a.eli_lav_btn, .mobile_btn
+
+! https://github.com/NanoMeow/QuickReports/issues/855
+konten.co.id##+js(nostif, overlay, 2000)
+
+! https://github.com/NanoMeow/QuickReports/issues/856
+@@||farsondigitalwatercams.com^$ghide
+farsondigitalwatercams.com##.advert
+
+! thefmovies . me popups
+! https://github.com/uBlockOrigin/uAssets/issues/5926
+thefmovies.*##+js(aost, Math, inlineScript)
+thefmovies.*##+js(nostif, '0x)
+thefmovies.*##+js(nowoif)
+thefmovies.*##.mobile-btn
+@@||feurl.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5198
+sembunyi.in##+js(aopr, popjs)
+
+! https://adblockplus.org/forum/viewtopic.php?f=10&t=65201&p=187268#p187268
+! https://www.reddit.com/r/uBlockOrigin/comments/tzla0l/ad_showing_up_on_series9_dot_me/
+series9.*##div[style="padding:15px 0;text-align:right;"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/15548
+@@||diariodenavarra.es^$ghide
+diariodenavarra.es##+js(aeld, DOMContentLoaded, AdBlock)
+diariodenavarra.es###AdSlot_megabanner
+diariodenavarra.es##.sticky_roba
+
+! https://github.com/uBlockOrigin/uAssets/pull/9494
+urlty.com##+js(set, blurred, false)
+urlty.com##+js(aopr, open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5222
+keepvid.*##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/880
+||player.ooyala.com/static/*/ad-plugin/*$script,redirect=noopjs,domain=dragons.com.au
+
+! https://github.com/uBlockOrigin/uAssets/issues/5225
+xiaomifans.pl##+js(nostif, test, 100)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5226
+@@||rangdhanu.live^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5228
+streamporn.pw##+js(aopr, ExoLoader.serve)
+streamporn.pw##+js(nowoif)
+streamporn.pw##.btn-lg.btn-block.btn
+streamporn.pw###overlays
+
+! https://github.com/uBlockOrigin/uAssets/issues/5190
+@@||cdn.taboola.com/libtrc/$script,domain=ndtv.com
+@@||trc.taboola.com/ndtv$script,domain=ndtv.com
+@@||trc.taboola.com/ndtv-ndtvmobile/$frame,domain=ndtv.com
+@@||trc.taboola.com/ndtv*/log/*$domain=trc.taboola.com
+ndtv.com##.trc-content-sponsored
+ndtv.com##.composite-branding.branding:has-text(/sponsored/i):xpath(..)
+@@||cdn.ampproject.org/*amp-ad$script,domain=ndtv.com
+@@||cdn.taboola.com/libtrc/ndtv-ndtvmobile/loader.js$script,domain=ampproject.net
+@@||cdn.taboola.com/libtrc/impl.$script,domain=ampproject.net
+@@||trc.taboola.com/ndtv-ndtvmobile/$script,domain=ampproject.net
+ndtv.com#@#amp-embed[type="taboola"]
+ndtv.com##[id^="adslot"]
+ndtv.com##:xpath(//div[contains(text(),"Advert")])
+ampproject.net##.trc-content-sponsored
+food.ndtv.com##.ads
+food.ndtv.com###jeocontainer > span:has-text(Promoted)
+||hotdeals360.com^$3p
+ndtv.com#@##taboola-below-article-thumbnails
+ndtv.com##.tbl-feed-card:has(.trc-content-sponsored)
+@@||trc.taboola.com/ndtv*/trc/*/json$xhr,domain=ndtv.com
+ndtv.com##.inline.ads
+ndtv.com##.tbl-wrp:has(.i-amphtml-fill-content)
+
+/pup.php?$script
+
+! https://www.reddit.com/r/uBlockOrigin/comments/b67qlj/ustreamyxcom_popups_block/
+ustream.*##+js(nowoif)
+ustream.*##^script:has-text(btoa)
+ustream.*##+js(aopr, console.clear)
+/zone?pub
+ustream.to##.popup
+ustream.to##.overlay
+@@||ustream.*^$script,1p
+*$script,redirect-rule=noopjs,domain=ustream.to
+
+! https://github.com/uBlockOrigin/uAssets/issues/5237
+! canalesportivo. live
+fr.streamon-sport.ru,hoca4u.com##+js(acs, document.createElement, onerror)
+
+! https://github.com/NanoMeow/QuickReports/issues/888
+worldcupfootball.me##+js(aeld, , _0x)
+worldcupfootball.me##+js(nostif, _0x)
+worldcupfootball.me##+js(nostif, "admc")
+worldcupfootball.me##+js(nowebrtc)
+||allsports4free.online^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/5242
+sound-park.*,soundpark.*,soundpark-club.*##+js(acs, $, open)
+sound-park.*,soundpark.*,soundpark-club.*##+js(acs, document.createElement, script)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5245
+@@||bomcondutor.pt^$ghide
+
+! paladinsdecks.com anti adb
+||paladinsdecks.com/fileadmin/*/fab.min.js$script,1p,redirect=fuckadblock.js-3.2.0
+@@||paladinsdecks.com/ad/banner/*$xhr,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/891
+! https://github.com/NanoMeow/QuickReports/issues/1458#issuecomment-508324990
+! https://github.com/uBlockOrigin/uAssets/issues/6001
+@@||ratemyprofessors.com/assets/libs/oas.js$script,1p
+ratemyprofessors.com##.slide.sticky-wrapper
+
+! https://github.com/NanoMeow/QuickReports/issues/894
+go.bucketforms.com##+js(acs, $, adblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5248
+hopto.org##+js(acs, document.getElementById, undefined)
+@@||grahaflasher.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/897
+bidouillesikea.com##+js(aopr, adbackDebug)
+
+! https://github.com/NanoMeow/QuickReports/issues/898
+@@||dausel.co^$ghide
+@@||googlesyndication.com/pagead/$script,domain=dausel.co
+dausel.co##.adsbygoogle:style(max-height: 1px !important;)
+dausel.co##[id^="aswift"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/5250
+blizzboygames.net##+js(nowebrtc)
+blizzboygames.net##[href*="bit.ly"]
+blizzboygames.net##.gp-entry-text > div > div[style] > .vc_row.wpb_row.vc_row-fluid
+||blizzboygames.net/sw.js$script,1p
+##[href^="https://track.wg-aff.com/click"]
+
+! https://github.com/NanoMeow/QuickReports/issues/900
+optifine.net##+js(nostif, Math.round, 1000)
+! http://adfoc.us/serve/?id=47525085215776 timer
+adfoc.us##+js(set, count, 0)
+
+! https://github.com/NanoMeow/QuickReports/issues/905
+pianetamountainbike.it##+js(set, LoadThisScript, true)
+||pianetamountainbike.it/*Banner$image
+
+! https://github.com/NanoMeow/QuickReports/issues/906
+lavoixdux.com##+js(set, is_adblocked, false)
+
+! https://github.com/NanoMeow/QuickReports/issues/2784
+barchart.com##+js(set, showPremLite, true)
+barchart.com##[id^=customAd]
+
+! closeBlockerModal anti adb
+modelisme.com,parasportontario.ca,prescottenews.com##+js(set, closeBlockerModal, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5269
+juegoviejo.com##+js(nano-stb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5271
+anime-jl.net##+js(aopr, detector_launch)
+zona-leros.net##+js(aeld, DOMContentLoaded, shortener)
+zona-leros.net##.content_store
+player.zona-leros.net,zlplayer.net###dvr-vid
+zona-leros.net##.Body > .Container > ul.Rows > li:first-child:has(> article > a[href][target="_blank"])
+zpaste.net,zlpaste.net##+js(aeld, DOMContentLoaded, adlinkfly)
+zplayer.live##+js(aopr, I833)
+zplayer.live##+js(nowoif)
+zplayer.live##.user
+zpaste.net,pixeldrain.com###sponsors
+zplayer.live##.banner
+||zshorte.net/*.html$frame,3p
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|fastly.net|fastlylb.net|google.com|googleapis.com|gstatic.com|hwcdn.net|jquery.com|jsdelivr.net|jwplatform.com|jwpcdn.com|recaptcha.net|arc.io,domain=zpaste.net|zplayer.live
+@@||zplayer.live^$cname
+||anime-jl.net^$3p,script
+||i.imgur.com/YmmGPK1.png^$3p
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=42841
+luzernerzeitung.ch,tagblatt.ch##+js(nostif, adblock, 5)
+
+! anti adb superhumanradio .net
+@@||superhumanradio.net^$ghide
+
+! https://github.com/abp-filters/abp-filters-anti-cv/issues/138
+! egydead .com => .live
+@@||egydead.*^$ghide
+egydead.*##.adHolder
+egydead.*##.FooterAds
+||herdethi.net^
+
+! mangamanga. ml popups
+mangamanga.*##+js(aeld, keydown)
+
+! fuckdy .com popups
+fuckdy.com##+js(aopr, Popunder)
+fuckdy.com##.fkd-inban
+
+! spellchecker.net ad-reinsertion
+spellchecker.net##+js(aopr, gPartners)
+spellcheck.net,spellchecker.net,spellweb.com##+js(nostif, bioEp)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/297
+! https://github.com/NanoMeow/QuickReports/issues/912
+@@||express.de^$ghide
+@@||mopo.de^$ghide
+express.de,mopo.de##.dm_ad
+express.de,mopo.de##.dm_ad-container
+express.de,mopo.de###nativendo-marginal
+mopo.de##.dm_ta300x300_html
+
+! https://github.com/uBlockOrigin/uAssets/issues/5278
+@@||berryboot.alexgoldcheidt.com^$ghide
+
+! ableitungsrechner.net ad-reinsertion
+ableitungsrechner.net##+js(nostif, ag_adBlockerDetected)
+ableitungsrechner.net##a.extern[href^="//www.amazon.de/"]:upward(2)
+
+! https://github.com/NanoMeow/QuickReports/issues/916
+@@||gatevidyalay.com^$ghide
+gatevidyalay.com##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/9273
+urlaubspartner.net##+js(set, adblock, false)
+urlaubspartner.net##.ad
+urlaubspartner.net##.text-center.col-lg-4.visible-lg-block > span
+
+! https://github.com/uBlockOrigin/uAssets/issues/5292
+bostonherald.com##+js(nostif, n.trigger, 1)
+bostonherald.com##+js(set, CnnXt.Event.fire, noopFunc)
+
+! https://github.com/NanoMeow/QuickReports/issues/1132
+alternet.org##+js(nostif, null)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5293
+mz-web.de##+js(acs, document.createElement, document.head.appendChild)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5296
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=freeiptv.life
+
+! praxis-jugendarbeit.de anti adb
+praxis-jugendarbeit.de##+js(nostif, nextFunction, 2000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/82870
+m.kuku.lu##+js(acs, setTimeout, bait.css)
+@@||m.kuku.lu^$ghide
+m.kuku.lu##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/5297
+watchfreexxx.net##+js(acs, document.createElement, 'script')
+watchfreexxx.net##+js(aopr, Date.prototype.toGMTString)
+watchfreexxx.net##+js(aopr, ExoLoader)
+watchfreexxx.net##+js(aopr, ExoLoader.serve)
+watchfreexxx.net##+js(aopr, initPu)
+watchfreexxx.net##+js(aopr, jsUnda)
+watchfreexxx.net##+js(aeld, getexoloader)
+watchfreexxx.net##.order-1:has(.video-block-happy-absolute)
+watchfreexxx.net##.happy-player-beside, .happy-section, .widget_execphp:has-text(/Advertisement|ExoLoader/)
+watchfreexxx.net###tracking-url
+||watchfreexxx.net/*.php$script,1p
+*$script,3p,denyallow=cloudflare.net|fastly.net|google.com|googleapis.com|gstatic.com|jwpcdn.com|jsdelivr.net|eastream.net|youtube.com|ytimg.com,domain=vidfast.co
+okstream.*##[id^="click"]
+*$script,3p,denyallow=bootstrapcdn.com|cloudflare.net|google.com|gstatic.com|hwcdn.net|jquery.com|jsdelivr.net|tawk.to,domain=okstream.*
+
+! https://github.com/NanoMeow/QuickReports/issues/931
+macrotrends.net##+js(acs, RegExp, '0x)
+macrotrends.net##+js(aopw, ABD)
+macrotrends.net##.adx_top_ad
+
+! https://github.com/NanoMeow/QuickReports/issues/934
+! https://github.com/uBlockOrigin/uAssets/issues/6224
+nrj-play.fr##+js(set, adBlockDetector.isEnabled, falseFunc)
+
+! https://github.com/NanoMeow/QuickReports/issues/935
+thegatewaypundit.com##+js(aopr, adtoniq)
+
+! https://github.com/NanoMeow/QuickReports/issues/1225
+@@||muzlan.top^$ghide
+@@||muzlan.top^$xhr,image,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/3256
+@@||thehouseofportable.com^$ghide
+@@||thehouseofportable.com^$script,1p
+@@*$xhr,domain=thehouseofportable.com
+*$script,redirect-rule=noopjs,domain=thehouseofportable.com
+thehouseofportable.com##ins.adsbygoogle
+thehouseofportable.com###mt > [onclick][data-user]
+thehouseofportable.com##a[href*="/aff.php?aff="]
+||thehouseofportable.com/wp-content/uploads/2020/06/purevpn.jpg$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/5308
+oeffentlicher-dienst.info##+js(set, testerli, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5310
+lippycorn.com##+js(acs, document.createElement, __esModule)
+@@||catracalivre.com.br^$ghide
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/1051
+pendekarsubs.us##+js(nostif, nextFunction, 250)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8336
+@@||telepisodes.org^$ghide
+telepisodes.org##+js(nowebrtc)
+telepisodes.org##+js(nano-sib)
+*$script,3p,denyallow=fluidplayer.com|jwpcdn.com|wp.com|cdn77.org|facebook.com|facebook.net|fbcdn.net|instagram.com|disqus.com|disquscdn.com|jwpsrv.com|jsdelivr.net|twitter.com|fastly.net|fastlylb.net|jquery.com|hwcdn.net|hcaptcha.com|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com|sharethis.com|stackpathcdn.com,domain=telepisodes.org
+telepisodes.org###play_button:style(display:block!important;)
+telepisodes.org###loading_button
+telepisodes.org##a.button-link.mybutton:has-text(Play)
+||d3d52lhoy0sh2w.cloudfront.net^
+
+! https://github.com/uBlockOrigin/uAssets/issues/5315
+7r6.com##+js(aopr, app_vars.force_disable_adblock)
+7r6.com##+js(aopr, LieDetector)
+7r6.com##+js(aopr, console.clear)
+7r6.com##+js(set, blurred, false)
+7r6.com##.banner
+@@||7r6.com^$ghide
+*$script,3p,denyallow=cloudfront.net|google.com|gstatic.com|recaptcha.net,domain=7r6.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5305#issuecomment-480661667
+b3infoarena.in##+js(aeld, load, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5305#issuecomment-481510730
+camfucks.com##+js(nobab)
+camfucks.com##[href="//yescams.com"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/5326
+@@||gisher.org^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5328
+eikaiwamastery.*##+js(aeld, load, onload)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/n6xsjo/ablock_detected/
+faucethero.com##+js(aopr, adBlockDetected)
+faucethero.com##+js(nowoif)
+faucethero.com##+js(acs, atob, decodeURIComponent)
+faucethero.com##+js(aopr, decodeURI)
+faucethero.com###middle-adspace
+faucethero.com##[href^="https://freebitco.in/"]
+faucethero.com##[href^="https://qik.cc/"]
+faucethero.com##[href^="https://www.office.jocial.com/Affiliate/"]
+||aruble.net^$3p
+||qik.cc^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/bbakpm/ublock_completely_broken/ekmyupc
+openthemagazine.com##.f-ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/5333
+@@||chipverify.com^$ghide
+chipverify.com##ins.adsbygoogle
+
+! https://github.com/NanoMeow/QuickReports/issues/972
+imtranslator.net##+js(nostif, adsbox, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5334
+@@||futbin.com^$ghide
+@@||futbin.com/ad/*$xhr,1p
+futbin.com##.full-top-ad-area
+
+! https://github.com/uBlockOrigin/uAssets/issues/5338
+! https://github.com/easylist/easylist/pull/10399
+@@||upvid.*^$ghide
+upvid.*##+js(nowoif)
+||upvid.*/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/5340
+upload.ac##.ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/5341
+@@||capital.fr^$ghide
+capital.fr##.cap-ads
+! https://github.com/uBlockOrigin/uAssets/issues/9524#issuecomment-1404848268
+capital.fr##.pmd-ads
+
+! https://github.com/NanoMeow/QuickReports/issues/990
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=kharisma-adzana.blogspot.com
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=42881
+@@||sunderlandecho.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5346
+@@||googlesyndication.com/pagead/$script,domain=ebb.io
+
+! https://github.com/uBlockOrigin/uAssets/issues/5347
+720pxmovies.blogspot.com##+js(acs, Math, break)
+720pxmovies.blogspot.com##+js(aopr, myFunction_ads)
+720pxmovies.blogspot.com##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/994
+hackingwithreact.com##+js(set, areAdsDisplayed, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5349
+@@||gamesfree.ca^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/1004
+onle.co##+js(nano-sib)
+@@||onle.co^$ghide
+@@||googlesyndication.com/pagead/$script,domain=onle.co
+onle.co##[id^="aswift"]
+onle.co##.adsbygoogle:style(max-height: 1px !important;)
+
+! gutekueche.at anti adb
+gutekueche.at##+js(set, gkAdsWerbung, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5355
+software-on.com##+js(aopr, decodeURIComponent)
+software-on.com##+js(nowebrtc)
+software-on.com##+js(nowoif)
+@@||software-on.com^$ghide
+@@||software-on.com/*/advertising.js$script,1p
+software-on.com##ins.adsbygoogle
+software-on.com##.widget_oxnepzimd
+software-on.com##.oxnepzimd
+
+! https://github.com/uBlockOrigin/uAssets/issues/5305#issuecomment-483097491
+gamershit.altervista.org##+js(nobab)
+gamershit.altervista.org##[src="float.htm"]
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/308
+@@||elbotola.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/1020
+@@||berliner-kurier.de^$ghide
+@@||berliner-zeitung.de^$ghide
+berliner-kurier.de,berliner-zeitung.de##.dm_ad-container
+berliner-kurier.de##div[class^="traffective_"]
+berliner-kurier.de##div[class^="outbrain_outbrain-outer-container"]
+
+! https://github.com/NanoMeow/QuickReports/issues/1021
+eplfootballmatch.com##+js(set, document.bridCanRunAds, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14827
+!#if env_firefox
+webmail.email.it##+js(no-fetch-if, googlesyndication)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/5364
+allacronyms.com##+js(nobab)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5369
+@@||smscodeonline.com^$ghide
+smscodeonline.com##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/5371
+peekvids.com,playvids.com,pornflip.com,pornoeggs.com##+js(aopr, open)
+*&token$media,redirect=noopmp3-0.1s,domain=peekvids.com|playvids.com|pornflip.com|pornoeggs.com
+peekvids.com,playvids.com,pornflip.com##+js(set, pop_target, null)
+pornoeggs.com##.card-deck-promotion
+pornoeggs.com##.mediaPlayerBanner
+
+! https://github.com/uBlockOrigin/uAssets/issues/5372
+@@||thuglink.com^$ghide
+thuglink.com##+js(set, adblockEnabled, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/beo8ec/block_adblock_at_it_again/
+@@||watchmalcolminthemiddle.com^$ghide
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/313
+@@||onlinecoursebay.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/11543
+gametop.com##+js(aost, document.getElementById, onLoadEvent)
+gametop.com##.ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/5378
+! https://github.com/uBlockOrigin/uAssets/issues/16740
+redensarten-index.de##+js(set, is_banner, true)
+redensarten-index.de##+js(nostif, adb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5305
+interviewgig.com##+js(aeld, load, onload)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=42917
+extratorrent.*##+js(aopr, Date.prototype.toUTCString)
+extratorrent.*##:xpath(//a[contains(text(),"VPN")]/../../..)
+
+! https://github.com/NanoMeow/QuickReports/issues/1040
+typinggames.zone##+js(acs, document.getElementById, alert)
+@@||typinggames.zone^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5385
+cdna.tv##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17603
+oko.sh##+js(rmnt, script, /document\.createElement|\.banner-in/)
+oko.sh##+js(aopr, AaDetector)
+oko.sh##+js(aopr, open)
+oko.sh##+js(set, blurred, false)
+oko.sh##+js(nostif, Adblock)
+oko.sh##+js(no-fetch-if, /googlesyndication|inklinkor|ads\/load/)
+oko.sh##+js(acs, XMLHttpRequest, adb)
+oko.sh##+js(no-xhr-if, inklinkor.com)
+oko.sh##.banner-inner:style(width: 0 !important;)
+oko.sh##^script:has-text(adb_detected)
+*$image,redirect-rule=1x1.gif,domain=oko.sh
+*$script,redirect-rule=noopjs,domain=oko.sh
+@@||oko.sh^$ghide
+oko.sh##a[href^="https://href.li/"]
+oko.sh##a[href^="https://taghaugh.com/"]
+oko.sh##[href="https://tipsalert.xyz"]
+oko.sh##[src^="https://i.imgur.com/"]
+oko.sh##[href^="https://monetag.com/"]
+oko.sh##[id^="div-gpt-"]
+||inklinkor.com/tag.min.js$script,xhr,redirect-rule=noop.js,domain=oko.sh
+
+! https://github.com/NanoMeow/QuickReports/issues/1050
+@@||anhdep24.net^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/719
+cam4.com##+js(nowoif)
+cam4.com###Cam4DialogContainer
+
+! https://github.com/NanoMeow/QuickReports/issues/965
+footystreams.net##+js(nostif, '0x)
+##[href^="https://pl.allsports4free.club/"]
+##[href^="https://pl.allsports4u.club/"]
+mlbstreams.net###iframe_preview
+
+! https://github.com/uBlockOrigin/uAssets/issues/5391
+@@||1warie.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5398
+produktion.de##+js(set, adblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5400
+vw-page.com##+js(set, $easyadvtblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5399
+@@||mediaite.com^$script,1p
+mediaite.com##.adthrive-ad
+mediaite.com##.o-jw-sub-promo
+
+! https://github.com/uBlockOrigin/uAssets/issues/5405
+dump.xxx##+js(aopr, ExoLoader.serve)
+dump.xxx##+js(popads-dummy)
+dump.xxx##+js(aopr, open)
+||dump.xxx/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/5406
+fuqer.com##+js(aopr, ExoLoader.serve)
+fuqer.com##+js(aopr, open)
+fuqer.com##+js(popads-dummy)
+||fuqer.com/sw.js$script,1p
+fuqer.com##.spot-thumbs > .right:style(height:1px !important)
+fuqer.com##.right > .text
+fuqer.com#@#.spot-thumbs > .right
+
+! https://github.com/NanoMeow/QuickReports/issues/1056
+@@||villatalk.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5305#issuecomment-485317006
+lurdchinexgist.blogspot.com##+js(aeld, load, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5407
+sharemods.com##+js(nowebrtc)
+sharemods.com##iframe[data-id$="_DFP"]
+*$script,3p,denyallow=bootstrapcdn.com|cloudflare.com|cloudflare.net|cookieinfoscript.com|fastly.net|fastlylb.net|google.com|googleapis.com|gstatic.com|hcaptcha.com|hwcdn.net|jquery.com|recaptcha.net,domain=sharemods.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5408
+modsbase.com##+js(nowebrtc)
+
+! https://github.com/NanoMeow/QuickReports/issues/1064
+@@||65creedmoor.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/1074
+myfreeblack.com##+js(aopw, mfbDetect)
+||myfreeblack.com/sw.js$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/1075
+auto-data.net##+js(acs, document.getElementById, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5305#issuecomment-486486252
+! https://github.com/uBlockOrigin/uAssets/issues/5687
+otakuindo.*##+js(aopr, Date.prototype.toUTCString)
+otakuindo.*##+js(nobab)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5305#issuecomment-486487471
+penis-bilder.com##+js(aopr, popunder)
+penis-bilder.com##+js(nobab)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5438
+filerio.in##+js(nowoif)
+filerio.in##+js(ra, onclick, , stay)
+filerio.in##+js(aopr, onload)
+filerio.in###player_img:upward(2)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5439
+ckk.ai##+js(set, blurred, false)
+ckk.ai##+js(nowoif)
+@@||ckk.ai^$ghide
+ckk.ai##a[href][target="_blank"] > img
+||35.224.227.218^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/5441
+sendvid.com##+js(nowoif, !/^https:\/\/sendvid\.com\/[0-9a-z]+$/)
+sendvid.com##[href*=".php"]
+sendvid.com###video-js-video > [href^="javascript:"]
+sendvid.com###vjs-logo-top-bar
+sendvid.com###ftr
+
+! https://github.com/uBlockOrigin/uAssets/issues/5448
+imgdawgknuttz.com##+js(aopw, atOptions)
+imgdawgknuttz.com##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+imgdawgknuttz.com##+js(aost, atob, inlineScript)
+imgdawgknuttz.com##+js(aopr, Pub2a)
+||imgdawgknuttz.com/*.php$script,1p
+||xxxwebdlxxx.org^$image,domain=imgdawgknuttz.com
+*$frame,3p,domain=imgdawgknuttz.com
+*$script,3p,domain=imgdawgknuttz.com
+||trifms.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/5450
+@@||javsubtitle.co^$ghide
+javsubtitle.co###impanel
+javsubtitle.co###mimpanel
+javsubtitle.co##.boxAds
+javsubtitle.co##.boxAds2
+javsubtitle.co##.header-ads
+javsubtitle.co##.mid-ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/5454
+@@||iphonetweak.fr^$ghide
+iphonetweak.fr##ins.adsbygoogle
+iphonetweak.fr##.bigPub
+
+! https://github.com/uBlockOrigin/uAssets/issues/15586
+! https://github.com/uBlockOrigin/uAssets/issues/16307
+duden.de##[id*="billboard"]
+duden.de##.tabloid__side-column
+!#if !env_mobile
+~mentor.duden.de,duden.de##+js(aeld, DOMContentLoaded, isMobile)
+!#endif
+||duden.de/aab/assets/js/
+! https://github.com/uBlockOrigin/uAssets/issues/17950
+duden.de##body:style(margin-top: 0px !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/bhr1sj/adblocker_detected/
+faresgame.com##+js(aopr, adBlockDetected)
+
+! https://github.com/NanoMeow/QuickReports/issues/1087
+solarmovie.to##+js(aopw, Fingerprint2)
+||solarmovie.to/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/5305#issuecomment-487240463
+shemalepower.xyz##+js(nobab)
+shemalepower.xyz##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5457
+ssrmovies.*##+js(nowoif)
+||get-link.xyz^
+||hitcashtag.com^$3p
+||techbumper.info^$3p
+||techcdn.com^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/1090
+shrib.com##+js(nostif, adb, 6000)
+
+! https://github.com/NanoMeow/QuickReports/issues/1093
+ratemyteachers.com##+js(acs, document.getElementById, 'block')
+
+! https://github.com/uBlockOrigin/uAssets/issues/5305#issuecomment-487342789
+thefreedommatrix.blogspot.com##+js(aeld, load, 2000)
+thefreedommatrix.blogspot.com##+js(nobab)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5466
+desiremovies.*##+js(acs, document.createElement, console)
+desiremovies.*##+js(aeld, , _0x)
+||desiremovies.*/sw.js$script,1p
+||presdithas.pw^
+desiremovies.*##.code-block-2.code-block
+
+! https://github.com/uBlockOrigin/uAssets/issues/5467
+uploadbox.cc##.soundy
+uploadbox.cc##+js(disable-newtab-links)
+uploadbox.cc##.hopa
+||gstatic.com/firebasejs/*/firebase.js$script,domain=uploadbox.cc
+
+! https://github.com/uBlockOrigin/uAssets/issues/5468
+pandafiles.com##+js(nostif, pop)
+||careerqna.com^$3p
+||grumft.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/5469
+##[href="//xxxrevpushclcdu.com/app.webp"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/bi3nw6/ublock_detected_on_some_tv_channel_website/
+@@||proxy.ads.canalplus-bo.net^$xhr,domain=mycanal.fr
+||static.canal-plus.net/pub/$media,redirect=noopmp3-0.1s,domain=mycanal.fr
+
+! https://github.com/uBlockOrigin/uAssets/issues/5472
+@@||damnripped.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5648
+notebookcheck-ru.com##+js(acs, document.getElementById, send)
+@@||notebookcheck.com^$script,1p
+@@||notebookcheck.net^$script,1p
+@@||notebookcheck-ru.com^$script,1p
+@@||notebook-check.com^$script,domain=notebookcheck.com|notebookcheck.net|notebookcheck-ru.com
+@@||notebookcheck-ru.com^$script,domain=notebookcheck.com|notebookcheck.net|notebookcheck-ru.com
+notebookcheck.*##+js(aopw, ab_cl)
+
+! https://github.com/NanoMeow/QuickReports/issues/601
+@@||www-league.nhlstatic.com/nhl.com/builds/site-core/*/scripts/*$script,domain=nhl.com
+@@||www-league.nhlstatic.com^$xhr,domain=nhl.com
+@@||nhl.com^$ghide
+*&expire$media,3p,redirect=noopmp3-0.1s,domain=nhl.com
+nhl.com##.ad
+nhl.com##.ad-centered
+nhl.com##.ad-responsive-slot
+nhl.com##.native-ad-slot
+
+! https://github.com/uBlockOrigin/uAssets/issues/5474
+@@||thuthuatjb.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5305#issuecomment-487402038
+! https://github.com/uBlockOrigin/uAssets/issues/5305#issuecomment-487403023
+watchhowimetyourmother.online,watchmadmenonline.com,watchonceuponatimeonline.com,watchsexandthecity.com,watchsouthpark.online,watchtrailerparkboys.com##+js(aopr, require)
+watchhowimetyourmother.online,watchmadmenonline.com,watchonceuponatimeonline.com,watchsexandthecity.com,watchsouthpark.online,watchtrailerparkboys.com##+js(nobab)
+
+! https://github.com/NanoMeow/QuickReports/issues/1105
+dfiles.*##+js(acs, decodeURI, decodeURIComponent)
+@@||cloudflare.com/ajax/libs/*/fuckadblock.js$script,domain=depositfiles.org|dfiles.eu
+||dfiles.*/sw.js$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/1106
+iptvtools.net##+js(set, isAdsDisplayed, true)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/318
+m4maths.com##+js(aopr, alert)
+
+! https://github.com/NanoMeow/QuickReports/issues/1112
+dailycamera.com##+js(nostif, n.trigger, 1)
+dailycamera.com##+js(set, CnnXt.Event.fire, noopFunc)
+
+! https://adblockplus.org/forum/viewtopic.php?p=188198#p188198
+||gearbest.com/sw.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/5490
+@@||freetutsdownload.net^$ghide
+freetutsdownload.net##[id^="modal-adbmon-"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/5495
+! https://github.com/uBlockOrigin/uAssets/issues/12710
+fc.lc,fc-lc.com##+js(acs, document.addEventListener, nextFunction)
+fc.lc##+js(aopr, adBlockDetected)
+fc.lc##+js(aopr, app_vars.force_disable_adblock)
+fc.lc##+js(noeval)
+fc.lc##+js(set, blurred, false)
+||fc.lc/*.html$frame,1p
+||fc.lc/sw.js$script,1p
+*$image,3p,domain=fc-lc.com
+fc.lc##.banner-inner
+fc.lc###ad
+fc-lc.com###iframe_id
+fc-lc.com##.captcha-page .box-main > a[href][target="_blank"] > img
+*$frame,denyallow=facebook.com|google.com|hcaptcha.com|youtube.com,domain=fc.lc|fc-lc.com
+*$script,3p,denyallow=bootstrapcdn.com|cloudflare.com|cloudflare.net|google.com|gstatic.com|jsdelivr.net|recaptcha.net|tawk.to|wp.com,domain=fc.lc|fc-lc.com
+fc.lc##+js(nowoif, /^/, 1)
+! https://github.com/AdguardTeam/AdguardFilters/issues/139812
+! vocalley.com anti-adb
+#@#.ad-area
+#@#.ads_container
+~job.inshokuten.com,~netmile.co.jp##.ad-area:not(.text-ad)
+##.ads_container:not(.text-ad)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5496
+movie4u.live##+js(aopr, AaDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5489#issuecomment-488537713
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=abdoutech.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5498
+pastepvp.org,programasvirtualespc.net##+js(aopw, smrtSB)
+programasvirtualespc.net##+js(nosiif, visibility, 1000)
+acortame.xyz##+js(aeld, mousedown, trigger)
+acortame.xyz##+js(set, Ok, true)
+@@||pastepvp.org^$ghide
+pastepvp.org##.content > center
+@@||programasvirtualespc.net^$ghide
+||acortame.xyz^$popunder
+||descargaloaca.com^$3p
+||fc.lc^$3p,script
+
+! https://github.com/uBlockOrigin/uAssets/issues/5500
+@@||online-courses.club^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/1130
+turbogvideos.com##+js(aopr, open)
+@@||turbogvideos.com^$ghide
+@@||syndication.exosrv.com/instream-tag.php$script,domain=turbogvideos.com
+
+! https://github.com/NanoMeow/QuickReports/issues/1131
+megapornfreehd.com##+js(aopr, V4ss)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5507
+cinetux.*##+js(aopw, smrtSB)
+cinetux.*##+js(ra, href, #clickfakeplayer)
+cinetux.*##span.button
+cinetux.*##.links_table > .fix-table > table > tbody > tr:has-text(Patrocinador)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/321
+@@||ad.71i.de/somtag/loader/loader.js$script,domain=puls4.com
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/556
+@@||putlockerhd.co/js/showads.js$xhr,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/1137
+@@||animecurse.cz^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5509
+tonpornodujour.com##+js(aopr, popunders)
+tonpornodujour.com##+js(set, is_adblocked, false)
+tonpornodujour.com###disclaimerId
+
+! https://github.com/uBlockOrigin/uAssets/issues/5510
+cyfostreams.com##+js(nowebrtc)
+cyfostreams.com###blockblockA
+! https://github.com/AdguardTeam/AdguardFilters/issues/132251
+cyfostreams.com#@#.banner_ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/5511
+444.coffee##+js(noeval)
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=firm-ware27.blogspot.com|flash-reset.blogspot.com
+@@||magiclen.org^$ghide
+magiclen.org##ins.adsbygoogle
+file.magiclen.org##+js(nano-stb, , ,0.02)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5527
+! https://github.com/uBlockOrigin/uAssets/issues/9710
+streameast.*,thestreameast.*##+js(aeld, /^/, 0x)
+streameast.*,thestreameast.*##+js(nosiif, visibility, 1000)
+streameast.*,thestreameast.*##+js(nowebrtc)
+streameast.*,thestreameast.*##+js(nostif, sadbl)
+*$xhr,redirect-rule=nooptext,domain=streameast.*|thestreameast.*
+sportlive.*##+js(ra, onclick)
+*$image,redirect-rule=32x32.png,domain=streameast.*|thestreameast.*
+||streameast.*/*.gif$image
+||thestreameast.*/*.gif$image
+
+! https://github.com/NanoMeow/QuickReports/issues/1151
+play-old-pc-games.com##+js(nostif, checkAdStatus)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5528
+scrin.org##+js(aopr, Date.prototype.toUTCString)
+scrin.org##+js(nostif, (), 0)
+
+! https://github.com/NanoMeow/QuickReports/issues/1152
+viz.com##+js(set, show_dfp_preroll, false)
+viz.com##+js(set, show_youtube_preroll, false)
+@@||viz.com^$ghide
+!#if env_mobile
+viz.com##+js(nano-sib, , ,0)
+viz.com###metamodal-dfp-preroll
+viz.com###overlay
+@@||doubleclick.net^$script,xhr,domain=viz.com
+@@||googletagservices.com/tag/js/gpt.js$script,domain=viz.com
+||ads-v-darwin.hulustream.com^$media,3p
+||assetshuluimcom-a.akamaihd.net/prerolls/$media,3p
+!#endif
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/322
+dplay.com##.e-overlay--adblock
+
+! https://github.com/uBlockOrigin/uAssets/issues/5494
+@@||cdn.playwire.com^$image,domain=krunker.io
+@@||cdn.playwire.com/bolt4/js/zeus/frame/admgr$script,1p
+*$image,domain=krunker.io,redirect-rule=1x1.gif
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=krunker.io
+@@||cdn.frvr.com/fran/pubads_$script,domain=krunker.io
+@@||pagead2.googlesyndication.com^$xhr,domain=krunker.io
+@@||securepubads.g.doubleclick.net^$xhr,domain=krunker.io
+
+! https://github.com/NanoMeow/QuickReports/issues/1154
+||googlesyndication.com/pagead/js/$script,redirect=noopjs,domain=eazycheat.com
+
+! https://github.com/NanoMeow/QuickReports/issues/1155
+pussytorrents.org##+js(aopr, loadTool)
+
+! https://github.com/NanoMeow/QuickReports/issues/1157
+||assets.moat.com/*/ad$image,redirect=2x2.png,1p
+
+! addic7ed.com popups
+addic7ed.com##+js(aopr, AaDetector)
+addic7ed.com##+js(aopr, eddOptions)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5534
+@@||rmdan.*^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5538
+! https://github.com/NanoMeow/QuickReports/issues/3478
+tunovelaligera.com##+js(aopr, mdpDeBlocker)
+tunovelaligera.com##+js(nostif, mdp)
+@@||tunovelaligera.com^$ghide
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=tunovelaligera.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5540
+@@||player.ooyala.com/static/*/ad-plugin/google_ima.min.js$script,domain=ccmbg.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5543
+@@||1000ps.de^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5542
+@@||desirecourse.net^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5544
+@@||nfhost.me^$ghide
+
+! jobhunterplg.xyz redirection
+||scorchin.com*?realDomain$doc
+
+! https://github.com/NanoMeow/QuickReports/issues/1162
+@@||hastingsobserver.co.uk^$ghide
+hastingsobserver.co.uk##.leaderboard-ad
+
+! https://github.com/NanoMeow/QuickReports/issues/1165
+||googlesyndication.com/pagead/show_ads.js$script,redirect=noopjs,domain=24sms.net
+
+! https://github.com/NanoMeow/QuickReports/issues/1028
+dlkoo.com##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/1169
+||wp.com*/banner$image,domain=komikmama.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/5553
+freecourseweb.com##+js(nostif, brave_load_popup)
+@@||freecourseweb.com^$ghide
+freecourseweb.com##ins.adsbygoogle
+*$script,3p,redirect-rule=noopjs,domain=freecourseweb.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5561
+svapo.it##+js(aopw, adBlockDetected)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/328
+sataniabatch.blogspot.com##+js(nofab)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5568
+@@||csm.dev^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5572
+papalah.com##+js(aopw, adBlockDetected)
+
+! solarmovie.id popup
+solarmovie.id##+js(aopr, AaDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5489#issuecomment-491483476
+bezpolitickekorektnosti.cz##+js(aopr, sc_adv_out)
+bezpolitickekorektnosti.cz##.SC_TBlock
+
+! https://github.com/uBlockOrigin/uAssets/issues/5579
+glodls.*##+js(nowebrtc)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/bnscg6/ublocknano_adblocker_detected_any_way_to_bypass/
+starcoins.ws##+js(aopw, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5583
+anitube.site###protetorVideo
+
+! https://github.com/uBlockOrigin/uAssets/issues/5489#issuecomment-491564073
+bitcoinminingforex.blogspot.com##+js(nofab)
+bitcoinminingforex.blogspot.com##+js(nowoif)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43018
+@@||imggram.org^$ghide
+
+! https://www.reddit.com/r/uBlockOrigin/comments/aqiblx/please_help_to_get_rid_of_protopage_ads/
+protopage.com##+js(aopr, pageParams.dispAds)
+
+! https://github.com/NanoMeow/QuickReports/issues/1211
+@@||cyclismactu.net/adserver.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/5588
+letmejerk.com,letmejerk2.com,letmejerk3.com,letmejerk4.com,letmejerk5.com,letmejerk6.com,letmejerk7.com##+js(aopr, ExoLoader)
+letmejerk.com,letmejerk2.com,letmejerk3.com,letmejerk4.com,letmejerk5.com,letmejerk6.com,letmejerk7.com##+js(aeld, , _0x)
+letmejerk.com,letmejerk2.com,letmejerk3.com,letmejerk4.com,letmejerk5.com,letmejerk6.com,letmejerk7.com##.cams-widget
+letmejerk.com,letmejerk2.com,letmejerk3.com,letmejerk4.com,letmejerk5.com,letmejerk6.com,letmejerk7.com##[class^="lmj"]
+letmejerk.com,letmejerk2.com,letmejerk3.com,letmejerk4.com,letmejerk5.com,letmejerk6.com,letmejerk7.com##.th:has(> span.th-ad)
+||letmejerk.com/*.php$script,1p
+
+||mn-shop.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/5599
+queenfaucet.website##+js(aopw, app_vars.force_disable_adblock)
+queenfaucet.website##+js(aopw, adBlockDetected)
+queenfaucet.website##+js(aeld, click, trigger)
+queenfaucet.website##+js(set, show_ads_gr8_lite, true)
+
+! https://github.com/NanoMeow/QuickReports/issues/1221
+@@||dailythanthi.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/1222
+windowcleaningforums.co.uk##+js(nostif, show)
+windowcleaningforums.co.uk##[href="https://thrivewp.com/"]
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=windowcleaningforums.co.uk
+windowcleaningforums.co.uk##a[href^="https://windowcleaningforums.co.uk/index.php?"][target="_blank"]
+windowcleaningforums.co.uk##.ipsAdvertisement_large
+
+! https://github.com/uBlockOrigin/uAssets/issues/5601
+pennlive.com##+js(aeld, load, PrivateMode)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5604
+! https://github.com/uBlockOrigin/uAssets/issues/5585
+! https://github.com/uBlockOrigin/uAssets/issues/5620
+! https://github.com/uBlockOrigin/uAssets/issues/9009
+! https://github.com/uBlockOrigin/uAssets/issues/17672
+freeupload.info,fstore.biz,uploadfree.info##+js(acs, document.getElementById, undefined)
+fstore.biz##+js(set, blurred, false)
+freeupload.info,fstore.biz,uploadfree.info##+js(nano-sib)
+uploadfree.info###at-btn-download
+
+! https://github.com/NanoMeow/QuickReports/issues/1227
+@@||beatricedailysun.com^$ghide
+beatricedailysun.com##.tnt-ads-container
+
+! https://github.com/uBlockOrigin/uAssets/issues/5608
+.gif$image,domain=107.152.37.223
+
+! https://github.com/NanoMeow/QuickReports/issues/1236
+beautypageants.indiatimes.com##+js(aeld, scroll, _0x)
+
+! https://github.com/NanoMeow/QuickReports/issues/1235
+@@||googletagmanager.com/gtm.js$script,domain=raiplayradio.it
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51758
+freebcc.org##+js(aopr, app_vars.force_disable_adblock)
+freebcc.org##+js(aopr, adBlockDetected)
+@@||freebcc.org^$ghide
+freebcc.org##.mb-0.mt-3.text-center.text-small
+freebcc.org###Layer_1
+
+! https://github.com/uBlockOrigin/uAssets/issues/5610
+||googlesyndication.com/pagead/show_ads.js$script,redirect=noopjs,domain=agame.com|giochi.it|jeu.fr|plinga.com|spel.nl|spielen.com
+
+! https://github.com/DandelionSprout/adfilt/issues/7#issuecomment-493395377
+! https://github.com/uBlockOrigin/uAssets/issues/6726
+pixiv.net###js-mount-point-header.with-ad:style(min-height: auto !important)
+pixiv.net##._illust-upload + div[style*="968px;"][style*="170px;"]
+pixiv.net##div[class^="sc-"] > div[class^="sc-"]:has(> div[style*="width: 728px;"]:only-child > iframe[name="footer"][width="728"][height="90"]):matches-css(padding-bottom: 56px)
+pixiv.net##iframe[name="dashboard_home"]:upward(div[class^="sc-"][span="1"])
+pixiv.net##div:has(> iframe[name="footer"][width="728"][height="90"])
+pixiv.net##div:has(> iframe[name="header"][width="468"][height="60"])
+pixiv.net##div:has(> iframe[name="rectangle"][width="300"][height="250"])
+pixiv.net##iframe[name="topbranding_rectangle"][width="300"][height="250"]:upward(li[size="2"][offset="1"])
+pixiv.net##div:has(> iframe[name][width="184"][height="232"])
+pixiv.net##div:has(> iframe[name][width="500"][height="520"])
+pixiv.net##section > div[class^="sc-"]:last-child:has(> div[style*="width: 728px;"]:only-child > iframe[name="footer"][width="728"][height="90"]):matches-css(margin-bottom: -16px)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43033
+cda.pl##.pb-video-click
+cda.pl##.pb-ad-video-player
+||redcdn.pl/file/*/vstatic/*.mp4$media,redirect=noopmp3-0.1s,domain=cda.pl
+
+! https://github.com/NanoMeow/QuickReports/issues/1250
+@@||maalaimalar.com^$ghide
+cinema.maalaimalar.com##.in.fade.modal-backdrop
+cinema.maalaimalar.com##body:style(overflow: auto !important;)
+
+! https://forums.lanik.us/viewtopic.php?f=91&t=43035
+topito.com##+js(aopr, document.bridCanRunAds)
+
+! https://github.com/NanoMeow/QuickReports/issues/1254
+@@||neko-sama.fr^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/1253
+0rechner.de##+js(set, doads, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5618
+@@||galt.hit.gemius.pl/gplayer.js$script,domain=lrt.lt
+
+! https://github.com/uBlockOrigin/uAssets/issues/5628
+@@||pasty.*^$ghide
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=pasty.*
+@@||pagead2.googlesyndication.com/pagead/js/*/show_ads_impl$script,domain=pasty.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/5635
+! https://github.com/uBlockOrigin/uAssets/issues/5640
+@@||qctimes.com^$ghide
+@@||wcfcourier.com^$ghide
+qctimes.com,wcfcourier.com##.tnt-ads-container
+
+! https://github.com/NanoMeow/QuickReports/issues/1263
+@@||roya.tv^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5639
+sexvid.*,hdtube.porn##+js(acs, document.write, iframe)
+sexvid.*,hdtube.porn##+js(aopr, ExoLoader)
+sexvid.*##+js(aopr, pu)
+sexvid.*###banner_video
+sexvid.*##.sponsor.shown
+sexvid.*##.spots_field.spots_thumbs
+sexvid.*##.box_site
+sexvid.*##.download_link
+sexvid.*##.spot-content, .spot-title
+*$xhr,frame,domain=sexvid.*
+hdtube.porn##.banners
+!#if env_mobile
+sexvid.*,hdtube.porn###fltd-inner
+sexvid.*##.wrapper > .spot-holder
+sexvid.*##.cs
+sexvid.*##.thumb-adv
+sexvid.*##.container > .headline, .intro
+sexvid.*##.under-player.spot-holder > .spot
+hdtube.porn##.cards__item--adv.cards__item--big.cards__item.item
+hdtube.porn##.page__main > .container
+!#endif
+
+! https://github.com/NanoMeow/QuickReports/issues/1268
+livesport.ws##+js(aopr, MessageChannel)
+
+! configspc .com popups
+configspc.com##+js(set, jsUnda, noopFunc)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/336
+sbsun.com##+js(set, CnnXt.Event.fire, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5645
+citynow.it##+js(aopr, advads_passive_ads)
+||citynow.it/wp-content/uploads/*/banner$image,1p
+citynow.it##.advads-close-button
+
+! https://github.com/uBlockOrigin/uAssets/issues/5647
+@@||myshorturls.blogspot.com^$ghide
+myshorturls.blogspot.com##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/5842
+tmohentai.com##+js(aopr, ExoLoader.serve)
+@@||tmohentai.com^$ghide
+tmohentai.com##.advert
+||tmohentai.com/nb/
+||tmohentai.com/*.php
+tmohentai.com##+js(noeval-if, tmohentai)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43053
+variety.com##+js(aopr, pmc_admanager.show_interrupt_ads)
+
+! https://github.com/NanoMeow/QuickReports/issues/1276
+@@||sme.sk^$ghide
+
+! anti adb http://arembed .com/live.php?ch=Bein_Sports1
+@@||janjua.*^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5651
+xopenload.me##+js(set, jsUnda, noopFunc)
+xopenload.me##+js(aopw, open)
+xopenload.me##+js(aopr, ExoLoader.serve)
+xopenload.me##.btn-lg.btn-block.btn
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/338
+@@||jbzdy.com.pl^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5664
+uploadever.com##+js(nano-stb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5666
+@@||senpa.io^$ghide
+senpa.io##+js(nobab)
+senpa.io###ad-slot-left-panel
+senpa.io###ad-slot-center-panel
+senpa.io###banner_ad_bottom
+senpa.io##.adsPanel
+senpa.io##.advertisement-informer
+
+! https://github.com/uBlockOrigin/uAssets/issues/5667
+! https://github.com/uBlockOrigin/uAssets/issues/6727
+getfreecourses.*##+js(nosiif, visibility, 1000)
+@@||getfreecourses.*^$ghide
+getfreecourses.*##ins.adsbygoogle
+
+! https://github.com/NanoMeow/QuickReports/issues/1287
+tuotromedico.com##+js(set, jQuery.adblock, false)
+
+! https://github.com/NanoMeow/QuickReports/issues/1288
+lesoir.be##+js(nostif, adb)
+
+! https://github.com/NanoMeow/QuickReports/issues/1298
+mysostech.com##+js(aopw, ai_adb_overlay)
+
+! https://github.com/NanoMeow/QuickReports/issues/1299
+gleanster.com###overlay
+
+! Postmedia featured video ads
+! https://github.com/uBlockOrigin/uAssets/issues/10499
+airdrieecho.com,brantfordexpositor.ca,calgaryherald.com,calgarysun.com,canoe.com,chathamdailynews.ca,chathamthisweek.com,clintonnewsrecord.com,cochranetimes.com,cochranetimespost.ca,coldlakesun.com,communitypress.ca,countymarket.ca,countyweeklynews.ca,devondispatch.ca,draytonvalleywesternreview.com,edmontonjournal.com,edmontonsun.com,elliotlakestandard.ca,fairviewpost.com,fortmcmurraytoday.com,fortsaskatchewanrecord.com,gananoquereporter.com,goderichsignalstar.com,greybrucethisweek.ca,hannaherald.com,intelligencer.ca,kenoraminerandnews.com,kincardinenews.com,kingstonthisweek.com,lakeshoreadvance.com,leaderpost.com,leducrep.com,lfpress.com,lucknowsentinel.com,mayerthorpefreelancer.com,melfortjournal.com,midnorthmonitor.com,mitchelladvocate.com,montrealgazette.com,nantonnews.com,nationalpost.com,norfolkandtillsonburgnews.com,northernnews.ca,nugget.ca,ontariofarmer.com,ottawacitizen.com,ottawasun.com,owensoundsuntimes.com,parisstaronline.com,peacecountrysun.com,pembrokeobserver.com,pinchercreekecho.com,prrecordgazette.com,recorder.ca,sarniathisweek.com,saultstar.com,saultthisweek.com,seaforthhuronexpositor.com,sherwoodparknews.com,shorelinebeacon.com,simcoereformer.ca,sprucegroveexaminer.com,standard-freeholder.com,stonyplainreporter.com,stratfordbeaconherald.com,strathroyagedispatch.com,stthomastimesjournal.com,thebeaumontnews.ca,thechronicle-online.com,thecragandcanyon.ca,thegraphicleader.com,thelondoner.ca,thepost.on.ca,theprovince.com,thestarphoenix.com,thesudburystar.com,thewhig.com,timminspress.com,timminstimes.com,todaysfarmer.ca,torontosun.com,trentonian.ca,vancouversun.com,vermilionstandard.com,vulcanadvocate.com,wallaceburgcourierpress.com,wetaskiwintimes.com,whitecourtstar.com,wiartonecho.com,windsorstar.com,winnipegsun.com,woodstocksentinelreview.com##.featured-video
+
+! https://github.com/NanoMeow/QuickReports/issues/1296#issuecomment-496916241
+@@||canoe.com^$ghide
+canoe.com###postmedia_layouts_ad-top
+canoe.com##.ad__container
+
+! https://github.com/uBlockOrigin/uAssets/issues/5697
+moviflex.*##+js(acs, Math, XMLHttpRequest)
+moviflex.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5698
+! https://github.com/NanoMeow/QuickReports/issues/3261
+! https://github.com/uBlockOrigin/uAssets/issues/19463
+||welect.de^$3p
+||wlct-three.de^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/5699
+||edgecast-vod.yimg.com/$media,redirect=noopmp3-0.1s,domain=yahoo.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80254
+vladan.fr##+js(nostif, adb, 0)
+vladan.fr##body:style(background-image:none !important)
+vladan.fr###text-414857080 > .widget-wrap > .widgettitle.widget-title
+vladan.fr##[href^="https://www.nakivo.com/"]
+vladan.fr##[href^="https://www.starwindsoftware.com/"]
+vladan.fr##[href^="https://lpar2rrd.com/"]
+vladan.fr##+js(nowoif)
+||vladan.fr/*skin$image
+
+! https://github.com/NanoMeow/QuickReports/issues/1313
+losporn.org##+js(aopr, ExoLoader.serve)
+losporn.org##+js(nowoif)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/buur9g/blocklist_addition_request/
+onepiece-tube.com##+js(set, abp, noopFunc)
+onepiece-tube.com##.adb
+onepiece-tube.com##[href^="https://www.amazon.de/"]
+
+! https://github.com/NanoMeow/QuickReports/issues/1315
+@@||british-birdsongs.uk^$ghide
+british-birdsongs.uk##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/5713
+japgay.com##+js(set, AlobaidiDetectAdBlock, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5718
+hentai-vl.blogspot.com##+js(aeld, load, 2000)
+
+! https://github.com/NanoMeow/QuickReports/issues/1316
+@@||helenair.com^$ghide
+helenair.com##.tnt-ads-container
+
+! https://github.com/adsbypasser/adsbypasser/issues/2081
+! https://github.com/uBlockOrigin/uAssets/issues/18448
+deltabit.co##+js(nano-sib)
+*$script,3p,domain=deltabit.co
+||ipultcbpgbs.com^
+
+! https://github.com/NanoMeow/QuickReports/issues/1322
+@@||loskatchorros.com.br^$ghide
+loskatchorros.com.br##.adsbygoogle:style(max-height: 1px !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/cmxap7/embedded_youtubeads_inside_streaming_videos/ew6h7h8/
+! https://github.com/AdguardTeam/AdguardFilters/issues/47342
+! https://github.com/AdguardTeam/AdguardFilters/issues/87631
+! https://github.com/AdguardTeam/AdguardFilters/issues/89759
+! https://github.com/AdguardTeam/AdguardFilters/issues/92220
+! https://github.com/AdguardTeam/AdguardFilters/issues/93328
+! https://github.com/AdguardTeam/AdguardFilters/issues/94244
+dutrag.com,embedsito.com,fembed.com,feurl.com,films5k.com,gaobook.review,javcl.me,javideo.pw,javip.pro,javjav.top,javlove.club,luxubu.review,mavplay.*,mavplayer.xyz,mrdhan.com,openplayer.net,playfinder.xyz,playdoe.xyz,playvid.host,rubicstreaming.com,smartshare.tv,ujav.me,videobb.*,videogreen.xyz,watchgayporn.online,xstreamcdn.com##+js(aopr, jwplayer.utils.Timer)
+diasfem.com,dutrag.com,embedsito.com,fembed.*,feurl.com,films5k.com,gaobook.review,javcl.me,javideo.pw,javip.pro,javjav.top,javlove.club,luxubu.review,mavlecteur.com,mavplay.*,mavplayer.xyz,mrdhan.com,openplayer.net,playdoe.xyz,playfinder.xyz,playvid.host,rubicstreaming.com,sexhd.co,smartshare.tv,ujav.me,videobb.*,videogreen.xyz,watchgayporn.online,xstreamcdn.com##+js(aopr, __Y)
+diasfem.com,embedsito.com,fembed.*,feurl.com,gaobook.review,luxubu.review,mavlecteur.com,mavplay.*,mavplayer.xyz,openplayer.net,playfinder.xyz,playvid.host,rubicstreaming.com,videobb.*,xstreamcdn.com##+js(aopw, adcashMacros)
+diasfem.com,embedsito.com,fembed.*,feurl.com,gaobook.review,javcl.me,luxubu.review,mavlecteur.com,mavplay.*,mavplayer.xyz,openplayer.net,playfinder.xyz,playvid.host,rubicstreaming.com,videobb.*,xstreamcdn.com##+js(aopr, mm)
+fembed.com,feurl.com,gaobook.review,luxubu.review,mavplayer.xyz,openplayer.net,playfinder.xyz,playvid.host,rubicstreaming.com,videobb.*,xstreamcdn.com##+js(aopr, glxopen)
+dutrag.com,embedsito.com,fembed.*,feurl.com,films5k.com,gaobook.review,javcl.me,javip.pro,javlove.club,luxubu.review,mavlecteur.com,mavplay.*,mavplayer.xyz,mrdhan.com,openplayer.net,playdoe.xyz,playfinder.xyz,playvid.host,rubicstreaming.com,smartshare.tv,ujav.me,videobb.*,videogreen.xyz,watchgayporn.online,xstreamcdn.com##+js(nowoif)
+tpxanime.in,welovestream.xyz##+js(nowoif)
+welovestream.xyz##.video-fake
+welovestream.xyz##div[style="position: fixed; display: block; width: 100%; height: 100%; inset: 0px; background-color: rgba(0, 0, 0, 0); z-index: 300000;"]
+javsister.com###custom_html-11
+javsister.com###footer-widgets
+javsister.com##.boxzilla-overlay
+javsister.com##.boxzilla-center-container
+||4gay.fans/fans.js
+@@||playfinder.xyz^$ghide
+*$script,3p,denyallow=cloudflare.com|google.com|gstatic.com|hcaptcha.com|recaptcha.net,domain=mrdhan.com
+
+! https://github.com/NanoMeow/QuickReports/issues/1336
+varmatin.com##+js(aopw, checkAds)
+
+! https://github.com/NanoMeow/QuickReports/issues/1337
+@@||siouxcityjournal.com^$ghide
+siouxcityjournal.com##.tnt-ads-container
+
+||wicket.pw/embeds/icc-cwc.png$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/5761
+nsw2u.*##[href^="https://bit.ly/"]
+! https://www.reddit.com/r/uBlockOrigin/comments/126iwtj/
+nsw2u.*##+js(acs, eval, replace)
+nsw2u.*##+js(no-xhr-if, googlesyndication)
+
+! filesharing.io anti adb
+filesharing.io##+js(aopw, showMsgAb)
+@@||filesharing.io^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/1340
+@@||loveawake.com^$ghide
+loveawake.com##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/5767
+softwarecrackguru.com##+js(aopw, downloadJSAtOnload)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5770
+@@||kickedface.com^$ghide
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/351
+mega-debrid.eu##+js(set, Advertisement, 1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5772
+projetomotog.blogspot.com##+js(aeld, load, 2000)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/350
+solvetube.*##+js(nostif, 0x, 3000)
+||googlesyndication.com/pagead/$script,redirect=noopjs,domain=solvetube.site,important
+||google-analytics.com/analytics.js$script,redirect=google-analytics.com/analytics.js,important,domain=solvetube.site
+@@*$script,1p,domain=solvetube.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/5776
+! https://www.reddit.com//r/uBlockOrigin/comments/u3l605/mlwbdhost/
+mlwbd.*##+js(noeval-if, ads)
+@@/home.php$popup,domain=mlwbd.*
+@@/blog.php$popup,domain=mlwbd.*
+mlwbd.*##+js(ra, type, input[value^="http"])
+mlwbd.*##input[value^="http"]:style(width: 70% !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5779
+123mkv.*##+js(nowoif)
+
+! https://forums.lanik.us/viewtopic.php?f=90&t=35977
+hdfilme.*##+js(aopr, eddOptions)
+hdfilme.*##+js(nostif, invoke)
+! https://github.com/easylist/easylist/issues/11264
+hdfilme.*##+js(aopr, console.clear)
+hdfilme.*##+js(aopr, adBlocked)
+hdfilme.*##+js(aopr, AaDetector)
+hdfilme.*###fake-player-wrapper
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43117
+||goodnewsnetwork.org^$csp=script-src 'self' 'unsafe-inline' 'unsafe-eval' *.googletagservices.com *.wp.com *.air.tv *.addthis.com *.cloudflare.com *.facebook.net *.facebook.com *.gstatic.com *.youtube.com *.ytimg.com *.google.com *.googletagmanager.com *.instagram.com
+! https://github.com/uBlockOrigin/uAssets/issues/5792
+apple-of-my-eye.com,barefeetonthedashboard.com,bargainbriana.com,betterbuttchallenge.com,bike-urious.com,blwideas.com,eartheclipse.com,entertainment-focus.com,fanatik.com.tr,foreverconscious.com,foreversparkly.com,getdatgadget.com,goodnewsnetwork.org,greenarrowtv.com,hbculifestyle.com,heysigmund.com,hodgepodgehippie.com,homestratosphere.com,indesignskills.com,katiescucina.com,knowyourphrase.com,letsworkremotely.com,lizs-early-learning-spot.com,ledauphine.com,leprogres.fr,milliyet.com.tr,mjsbigblog.com,pinoyrecipe.net,prepared-housewives.com,recipesforourdailybread.com,redcarpet-fashionawards.com,republicain-lorrain.fr,savespendsplurge.com,savingadvice.com,shutupandgo.travel,spring.org.uk,stevivor.com,tamaratattles.com,tastefullyeclectic.com,theavtimes.com,thechroniclesofhome.com,thisisourbliss.com,tinyqualityhomes.org,turtleboysports.com,ultimateninjablazingx.com,universfreebox.com,utahsweetsavings.com,vgamerz.com,wheatbellyblog.com,yummytummyaarthi.com##+js(acs, Date, ='\x)
+apple-of-my-eye.com,barefeetonthedashboard.com,bargainbriana.com,betterbuttchallenge.com,bike-urious.com,blwideas.com,eartheclipse.com,entertainment-focus.com,fanatik.com.tr,foreverconscious.com,foreversparkly.com,getdatgadget.com,goodnewsnetwork.org,greenarrowtv.com,hbculifestyle.com,heysigmund.com,hodgepodgehippie.com,homestratosphere.com,indesignskills.com,katiescucina.com,knowyourphrase.com,letsworkremotely.com,lizs-early-learning-spot.com,ledauphine.com,leprogres.fr,milliyet.com.tr,mjsbigblog.com,pinoyrecipe.net,prepared-housewives.com,recipesforourdailybread.com,redcarpet-fashionawards.com,republicain-lorrain.fr,savespendsplurge.com,savingadvice.com,shutupandgo.travel,spring.org.uk,stevivor.com,tamaratattles.com,tastefullyeclectic.com,theavtimes.com,thechroniclesofhome.com,thisisourbliss.com,tinyqualityhomes.org,turtleboysports.com,ultimateninjablazingx.com,universfreebox.com,utahsweetsavings.com,vgamerz.com,wheatbellyblog.com,yummytummyaarthi.com##+js(acs, document.head.appendChild, ='\x)
+apple-of-my-eye.com,barefeetonthedashboard.com,bargainbriana.com,betterbuttchallenge.com,bike-urious.com,blwideas.com,eartheclipse.com,entertainment-focus.com,fanatik.com.tr,foreverconscious.com,foreversparkly.com,getdatgadget.com,goodnewsnetwork.org,greenarrowtv.com,hbculifestyle.com,heysigmund.com,hodgepodgehippie.com,homestratosphere.com,indesignskills.com,katiescucina.com,knowyourphrase.com,letsworkremotely.com,lizs-early-learning-spot.com,ledauphine.com,leprogres.fr,milliyet.com.tr,mjsbigblog.com,pinoyrecipe.net,prepared-housewives.com,recipesforourdailybread.com,redcarpet-fashionawards.com,republicain-lorrain.fr,savespendsplurge.com,savingadvice.com,shutupandgo.travel,spring.org.uk,stevivor.com,tamaratattles.com,tastefullyeclectic.com,theavtimes.com,thechroniclesofhome.com,thisisourbliss.com,tinyqualityhomes.org,turtleboysports.com,ultimateninjablazingx.com,universfreebox.com,utahsweetsavings.com,vgamerz.com,wheatbellyblog.com,yummytummyaarthi.com##+js(aopr, __eiPb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5795
+@@||fapxl.com/skins/blank/js/blockadblock.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/5797
+dreamfancy.org##+js(nostif, nextFunction, 250)
+dreamfancy.org##+js(nowoif)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/byxkl0/please_help_me_bypass_the_adblock_detection_on/
+dreamdth.com##+js(aopw, wutimeBotPattern)
+! https://www.reddit.com/r/uBlockOrigin/comments/8lmjam/please_help_me_bypass_the_adblock_detection_on/
+dreamdth.com##+js(set, adBlockDetected, false)
+dreamdth.com##+js(acs, $, show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5799
+! https://github.com/uBlockOrigin/uAssets/issues/18375
+pornhub.*##+js(nostif, adsbytrafficjunkycontext)
+pornhub.*##+js(acs, Object.defineProperty, trafficjunky)
+pornhub.*##+js(nowoif)
+! https://github.com/uBlockOrigin/uAssets/issues/5799#issuecomment-599266182
+pornhub.*##.video-wrapper > #player ~ .hd.clear
+pornhub.*##.sniperModeEngaged
+pornhub.*##a[href^="http://ads.trafficjunky.net/"]
+pornhub.*##.realsex
+pornhub.*###pb_block
+! https://github.com/uBlockOrigin/uAssets/issues/11753
+pornhub.*##+js(set, page_params.holiday_promo, true)
+! https://github.com/AdguardTeam/AdguardFilters/issues/132379
+pornhub.*###relatedVideosCenter > .wrapVideoBlock
+! https://github.com/AdguardTeam/AdguardFilters/issues/146564
+pornhub.*##+js(set, abp1, 1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5804
+ranker.com##+js(aopr, __eiPb)
+
+! https://github.com/NanoMeow/QuickReports/issues/1368
+@@||stltoday.com^$ghide
+stltoday.com##.dfp-ad
+stltoday.com##.tnt-ads-container
+
+! https://www.reddit.com/r/uBlockOrigin/comments/brisbv/help_with_this_site/
+subdivx.com##+js(cookie-remover, ref_cookie)
+subdivx.com###taboola-below-article-thumbnails
+||karconsulting.us^$3p
+
+! thevidhd popups
+thevidhd.*##+js(aopw, smrtSB)
+thevidhd.*##+js(nowebrtc)
+||thevidhd.*/sw.js$script,1p
+thevidhd.*##.video_batman
+thevidhd.*##h1
+
+! https://github.com/uBlockOrigin/uAssets/issues/2290
+! https://www.reddit.com/r/uBlockOrigin/comments/d7nk0c/ads_getting_through_on_vuducom_and_tubitvcom/
+@@||tubitv.com^$ghide
+||ads.adrise.tv^$3p
+*.mp4$media,redirect=noopmp3-0.1s,domain=tubitv.com
+/cdn.*/ads.$badfilter
+
+! https://forums.lanik.us/viewtopic.php?p=148205#p148205
+cuatro.com,mitele.es,telecinco.es##+js(aopr, $REACTBASE_STATE.serverModules.push)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5816
+@@||wupfile.com^$ghide
+wupfile.com##[id*=ScriptRoot]
+
+! techperiod.com anti adb
+@@||techperiod.com^$ghide
+techperiod.com##ins.adsbygoogle
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43156#p148250
+gdrivez.xyz##+js(nostif, nextFunction, 2000)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/bzyxa3/how_to_block_sponsored_listings_on_ebay/
+ebay.*##.sresult:has(.promoted-lv)
+!ebay.*#?#li.s-item:has(span:has-text(/S[^P]*?P[^O]*?O[^N]*?N[^S]*?S[^O]*?O[^R]*?R[^E]*?E[^D]*?D/))
+ebay.*##.s-item__title-tag:has-text(/^SPONSORED$/):upward(.s-item)
+ebay.*##.s-item:has-text(Sponsored):xpath('//*[string-length(@aria-labelledby) = 8]'):upward(.s-item)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5828
+acefile.co##+js(aopw, popup_ads)
+acefile.co##.textwidget
+
+! https://forums.lanik.us/viewtopic.php?f=103&t=43167
+lne.es##+js(nostif, ipod)
+! https://github.com/uBlockOrigin/uAssets/issues/5624
+! https://github.com/uBlockOrigin/uAssets/issues/5891
+diaridegirona.cat,diariodeibiza.es,diariodemallorca.es,diarioinformacion.com,eldia.es,emporda.info,farodevigo.es,laopinioncoruna.es,laopiniondemalaga.es,laopiniondemurcia.es,laopiniondezamora.es,laprovincia.es,levante-emv.com,mallorcazeitung.es,regio7.cat,superdeporte.es##+js(set, pr_okvalida, true)
+
+! https://github.com/abp-filters/abp-filters-anti-cv/issues/193
+voiranime.com##.ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/5835
+@@||wikitrik.com^$ghide
+@@||wikitrik.com/favicon.ico$image,1p
+
+! fix seireshd.com anti adb
+seireshd.com##+js(acs, btoa, href)
+serieslandia.com##+js(aopr, scriptwz_url)
+@@||seireshd.com^$ghide
+||adsrt.com^$3p
+
+! fix pivigames.blog ads & popup
+pivigames.blog##+js(acs, enlace)
+playpaste.com##+js(acs, document.addEventListener, Popup)
+playpaste.com##+js(set, $.ajax, trueFunc)
+||playpaste.com/sw.js$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/35411
+ktmx.pro##+js(aeld, load, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5850
+@@||darkw.pl^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5847
+player.rtl2.de##+js(set, getHomadConfig, noopFunc)
+
+! thecrazytourist .com popunder
+thecrazytourist.com##+js(acs, document.getElementsByTagName, appendChild)
+||sp.booking.com^$domain=thecrazytourist.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5855
+megatube.xxx##+js(aopr, BetterJsPop)
+||megatube.xxx^$frame,1p
+||megatube.xxx/atrm/*$script,1p
+@@||megatube.xxx/atrm/s/s/js/m/pr-before.js$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/1399
+dailydemocrat.com,montereyherald.com,orovillemr.com,record-bee.com,redbluffdailynews.com,reporterherald.com,thereporter.com,timescall.com,timesheraldonline.com,ukiahdailyjournal.com##+js(set, CnnXt.Event.fire, noopFunc)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/c38j3y/block_antiblocker_on_maggotdrowningcom/
+@@||maggotdrowning.com/forums/js/siropu/am/ads.min.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/5863
+pornult.com##+js(acs, Math.random, Exoloader)
+pornult.com##+js(nowoif)
+pornult.com##+js(nostif, offsetWidth)
+pornult.com##+js(aopr, exoJsPop101)
+pornult.com##+js(aopr, btoa)
+||pornult.com/sw.js$script,1p
+pornult.com##.sexshp
+||pornult.com/*/custom_vast/$media,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/1406
+! https://github.com/NanoMeow/QuickReports/issues/3929
+joyn.de##+js(no-fetch-if, zomap.de)
+@@||ad.71i.de/global_js/AppConfig/Joyn/desktop.json$xhr,domain=joyn.de
+@@||adition.com/1x1.gif$xhr,domain=joyn.de
+@@||aws.route71.net/ad-$script,domain=joyn.de
+@@||research.de.com/bb-mx/prime$xhr,domain=joyn.de
+@@||script.ioam.de/iam.js$script,domain=joyn.de
+@@||securepubads.g.doubleclick.net/pcs/view/*$xhr,domain=joyn.de
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/35676
+dictionnaire-medical.net##+js(nostif, nextFunction, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9158
+@@||money.it^$ghide
+money.it##.gptslot
+
+! https://github.com/uBlockOrigin/uAssets/issues/5877
+nonktube.com##+js(nowoif)
+nonktube.com##+js(aopr, decodeURI)
+
+! https://github.com/NanoMeow/QuickReports/issues/1424
+@@||kenkenpuzzle.com/assets/*$xhr,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/35801
+izzylaif.com##+js(acs, jQuery, undefined)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/35816
+@@||gelbeseiten.de^$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/35459
+movs4u.*##+js(aeld, , _0x)
+||i.imgur.com/*.gif$image,domain=movs4u.*
+
+! https://github.com/NanoMeow/QuickReports/issues/1427
+collater.al##+js(aopr, adsanity_ad_block_vars)
+
+! https://github.com/NanoMeow/QuickReports/issues/1429
+@@||get-click2.blogspot.com^$ghide
+get-click2.blogspot.com##[href^="http://bit.ly"]
+
+! https://github.com/NanoMeow/QuickReports/issues/1433
+mousecity.com##.banner-box-squareb
+mousecity.com##.banner-box
+
+! https://github.com/uBlockOrigin/uAssets/issues/13918
+proplanta.de##+js(nostif, /$|adBlock/)
+
+! https://github.com/NanoMeow/QuickReports/issues/1435
+@@||hydrogenassociation.org^$ghide
+hydrogenassociation.org##+js(nostif, ads)
+
+! https://github.com/NanoMeow/QuickReports/issues/1436
+@@||paraphrasing-tool.com^$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/1438
+beautypackaging.com##+js(aopw, adblockerpopup)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5893
+uptomega.*##+js(nano-stb, seconds)
+*$3p,denyallow=bootstrapcdn.com|cloudflare.net|fontawesome.com|hwcdn.net|jquery.com|uptomega.com,domain=uptomega.*
+uptomega.*##.ads
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43212
+@@||vtpii.com^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/36007
+*$image,domain=grafixfather.com,redirect-rule=1x1.gif
+@@||grafixfather.com^$ghide
+grafixfather.com##ins.adsbygoogle
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/35953
+@@||league-funny.com^$ghide
+league-funny.com##[id^="div-gpt-ad-"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/35930
+@@||vacation-et.work^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5901
+hotgameplus.com##+js(aopw, downloadJSAtOnload)
+
+! https://github.com/NanoMeow/QuickReports/issues/1450
+puhutv.com##+js(aopw, adblockCheck)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5917
+megavideo.*##+js(nowoif)
+*$script,3p,denyallow=cloudflare.com|disqus.com|fastlylb.net|google.com|googleapis.com|gstatic.com|hwcdn.net|jquery.com|unpkg.com,domain=megavideo.*
+uwatchfree.*,hydrax.*##+js(aeld, , _0x)
+uwatchfree.*##[href*="deceittoured.com"]
+uwatchfree.*##.hd-links
+uwatchfree.*##center
+
+! https://github.com/uBlockOrigin/uAssets/issues/5918
+! watch4hd. net (ex .com)
+watch4hd.*##+js(aopr, open)
+watch4hd.*##.btn-block.btn
+
+! altadefinizione .cloud anti adb
+||altadefinizone.*^$popup,3p
+
+! https://www.camp-firefox.de/forum/thema/111753-%C2%B5block-origin-ad-blocker-diskussionsthread/?postID=1118918#post1118918
+*$popunder,3p,domain=alemannia-aachen.de
+alemannia-aachen.de###grid-image-head
+alemannia-aachen.de##.b-error
+||hitadsmedia.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/5926
+5movies.*##+js(aopr, mm)
+5movies.*###cookiedata
+5movies.*##.btn-lg
+5movies.*###content-embed:style(display: block!important)
+5movies.*##.streamaly
+5movies.*##.les-title:has-text(HD)
+1movietv.com##li.uk-active:remove()
+||affforce.com^$doc,popup
+
+! https://github.com/uBlockOrigin/uAssets/issues/5926
+01fmovies.com##+js(aopr, AaDetector)
+01fmovies.com##+js(aeld, DOMContentLoaded, checkVPN)
+||01fmovies.com/mmmasdfl-asd$xhr,1p
+01fmovies.com##[src^="/addons/"]
+01fmovies.com##.jw-logo
+01fmovies.com##.ico.close
+
+! https://github.com/uBlockOrigin/uAssets/issues/3026
+! https://github.com/uBlockOrigin/uAssets/issues/18815
+coolrom.com.au##+js(set, time, 0)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5928
+! https://github.com/uBlockOrigin/uAssets/issues/5932
+||autotracer.org/cnc/?*=rightcol$xhr,1p
+||vectorization.org/cnc/?*=rightcol$xhr,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/1474
+oranhightech.com##+js(aopw, cancelAdBlocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5724
+! https://github.com/uBlockOrigin/uBlock-issues/issues/661
+! https://www.reddit.com/r/uBlockOrigin/comments/doxgp8/bing_ads/
+! https://github.com/uBlockOrigin/uAssets/issues/6886#issuecomment-608605317
+! https://github.com/uBlockOrigin/uAssets/issues/12255
+! https://github.com/uBlockOrigin/uAssets/issues/12505
+bing.com#@#.b_ad
+bing.com#@#.b_adLastChild
+bing.com#@#.pa_sb
+bing.com##.b_adLastChild:style(position: absolute !important; top: -9999px !important;)
+bing.com##.b_ad:style(position: absolute !important; top: -9999px !important;)
+bing.com##.pa_sb:style(position: absolute !important; top: -9999px !important;)
+bing.com##.b_restorableLink:remove()
+! https://github.com/AdguardTeam/AdguardFilters/issues/136118
+bing.com##.tob_calcontainer > .slide:has(.rtb_ad_caritem_mvtr)
+! https://www.reddit.com/r/uBlockOrigin/comments/19324br/ad_in_bingcom_with_a_side_popup/
+bing.com##.b_ans:has([class^="xm_"][class*="_ansCont"])
+
+! https://github.com/NanoMeow/QuickReports/issues/1475
+! https://github.com/NanoMeow/QuickReports/issues/1686
+! https://github.com/NanoAdblocker/NanoFilters/issues/426
+freetutorialsus.com##+js(set, adsbygoogle.loaded, true)
+@@||freetutorialsus.com^$ghide
+freetutorialsus.com##.code-block-1.code-block > div
+||googlesyndication.com/pagead/$script,redirect-rule=noopjs,domain=freetutorialsus.com
+freetutorialsus.com###babasbmsgx
+freetutorialsus.com##ins.adsbygoogle
+freetutorials.*##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/1480
+@@||nosey.com^$ghide
+nosey.com##.unreel-player-overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/5937
+! https://github.com/uBlockOrigin/uAssets/issues/5938
+tusfiles.com##+js(aopw, Fingerprint2)
+tusfiles.com##+js(nowoif)
+||tusfiles.com/sw.js$script,1p
+gdtot.*,tusfiles.com##+js(acs, document.createElement, 'script')
+*$3p,denyallow=cloudflare.com|fastly.net|support.send.cm|tusfiles.net|zencdn.net,domain=tusfiles.com
+gdtot.*##+js(aopr, open)
+
+! https://github.com/NanoMeow/QuickReports/issues/1481
+@@||lapresse.ca^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5945
+lirik3satu.blogspot.com##+js(aeld, load, 2000)
+
+! mangovideo's sites
+adultdvdparadise.com,freeomovie.info,fullxxxmovies.me,mangoparody.com,mangoporn.co,netflixporno.net,pandamovie.*,pandamovies.me,playpornfree.xyz,pornkino.cc,pornwatch.ws,speedporn.*,watchfreexxx.pw,watchpornfree.*,watchxxxfree.pw,xopenload.pw,xtapes.me,xxxmoviestream.xyz,xxxparodyhd.net,xxxscenes.net,xxxstream.me,youwatchporn.com##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+adultdvdparadise.com,freeomovie.info,fullxxxmovies.me,mangoparody.com,mangoporn.co,netflixporno.net,pandamovie.*,pandamovies.me,playpornfree.xyz,pornkino.cc,pornwatch.ws,speedporn.*,watchfreexxx.pw,watchpornfree.*,watchxxxfree.pw,xopenload.pw,xtapes.me,xxxmoviestream.xyz,xxxparodyhd.net,xxxscenes.net,xxxstream.me,youwatchporn.com##+js(nowoif)
+pandamovie.*,pandamovies.me,pornkino.cc,speedporn.*,youwatchporn.com###tracking-url
+pornwatch.ws,xopenload.pw,xxxparodyhd.net,xxxstream.me##.btn-lg.btn-block.btn
+pandamovie.*,pandamovies.me,pornkino.cc,speedporn.*,xxxscenes.net,youwatchporn.com##.video-block-happy-absolute:upward(.order-1)
+pandamovie.*,pandamovies.me,pornkino.cc,speedporn.*,xxxscenes.net,youwatchporn.com##.happy-player-beside, .happy-section, .widget_execphp:has-text(/Advertisement|ExoLoader/)
+
+! serialy.bombuj.tv | .si anti adb
+@@||bombuj.*^$ghide
+bombuj.*##.ad_banner
+bombuj.*##[id*="ekla"]
+bombuj.*##style:has-text(blink_me_ad):upward(2)
+bombuj.*##[href][target="_blank"]
+||wurfl.io/wurfl.js$script,3p
+waaaw.*,waaw1.*##+js(aopr, doSecondPop)
+waaaw.*,waaw.*,waaw1.*##+js(aopr, BetterJsPop)
+/cdn-cgi/trace$xhr,domain=waaw.*|waaaw.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/5946
+gamefront.com##+js(acs, $, AdBlock)
+gamefront.com##+js(nano-stb, , 10000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6339
+! https://github.com/uBlockOrigin/uAssets/issues/8700
+! https://github.com/uBlockOrigin/uAssets/issues/19428
+!#if env_chromium
+washingtonpost.com##+js(acs, Promise, 'overlay')
+washingtonpost.com##+js(acs, document.createElement, 'overlay')
+washingtonpost.com##+js(rmnt, script, /\badblock\b/)
+!#endif
+washingtonpost.com##^script:has-text(_0x)
+washingtonpost.com##.remainder-content .db-ns.dn
+washingtonpost.com##html[style="overflow: hidden;"]:style(overflow: auto !important;)
+washingtonpost.com##.outbrain-wrapper
+washingtonpost.com##.bb.pt-0
+washingtonpost.com##div.grey-bg
+washingtonpost.com##section > div:has-text(/^AD$/)
+washingtonpost.com##:xpath('//*[(text()="AD")]/..')
+! https://github.com/uBlockOrigin/uAssets/issues/9185#issuecomment-847835587
+!#if env_mobile
+washingtonpost.com##div.mb-lg.mt-lg.pb-lg.pt-lg.bc-gray-lighter.bh.b.justify-center.items-center.flex.dn-hp-sm-to-mx
+washingtonpost.com###mobile-footer-ad-wrapper
+!#endif
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ccbpn2/
+! https://github.com/uBlockOrigin/uAssets/issues/15427
+rawstory.com##+js(aopr, setNptTechAdblockerCookie)
+@@||rawstory.com^$ghide
+rawstory.com##.rs_ad_block
+rawstory.com##.amp-unresolved
+rawstory.com##.proper-ad-unit
+rawstory.com##.alt_ad_block
+rawstory.com##.connatix-holder
+rawstory.com##ins.adsbygoogle
+rawstory.com##[class^="mgid_"]
+rawstory.com###rc-widget-d9572e
+rawstory.com##[id^="spink_appeal_box"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/5951
+gonzoporn.cc,onlinexxx.cc,tvporn.cc##+js(acs, decodeURI, decodeURIComponent)
+gonzoporn.cc,onlinexxx.cc,tvporn.cc##+js(aopr, exoJsPop101)
+
+! https://github.com/NanoMeow/QuickReports/issues/1492
+kimochi.info##+js(nosiif, visibility, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/1495
+! https://github.com/NanoMeow/QuickReports/issues/2510
+*$script,redirect-rule=noopjs,domain=linternaute.com
+@@||googletagmanager.com/gtm.js$script,domain=linternaute.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/36733
+samash.com##+js(acs, document.getElementById, for-variations)
+
+! https://github.com/NanoMeow/QuickReports/issues/1511
+@@||blindhypnosis.com/adsbygoogle.js$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/1515
+godtube.com##+js(aopr, googletag)
+
+! https://github.com/NanoMeow/QuickReports/issues/1518
+||googlesyndication.com/pagead/js/adsbygoogle.js$xhr,redirect=noopjs,domain=rollingstone.it
+
+! https://github.com/uBlockOrigin/uAssets/issues/5971
+ftopx.com##+js(aopr, exoJsPop101)
+ftopx.com##+js(aopr, ExoLoader.addZone)
+ftopx.com##+js(aopr, loadTool)
+
+! https://github.com/NanoMeow/QuickReports/issues/1522
+@@||ifc.com^$ghide
+
+! https://github.com/easylist/easylist/issues/3796
+! https://github.com/uBlockOrigin/uAssets/issues/14168
+! https://github.com/uBlockOrigin/uAssets/issues/14239
+@@||fwmrm.net/ad/*$xhr,domain=uktvplay.co.uk|uktvplay.uktv.co.uk
+||cdn.http.anno.channel4.com/m/1/$media,domain=uktvplay.uktv.co.uk
+! https://github.com/uBlockOrigin/uAssets/issues/15582
+uktvplay.co.uk##+js(no-xhr-if, fwmrm.net)
+
+! https://github.com/NanoMeow/QuickReports/issues/1529
+techhx.com##+js(set, google_jobrunner, true)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/cf1y5b/unable_to_block_these_adverts_myselfredirect_to/
+1movietv.com##+js(refresh-defuser)
+1movietv.com##[target="_blank"][href$=".html"]
+||ekdj30.com^
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/373
+vidstream.*##+js(nowoif, !api?call=, 10, obj)
+||psaiceex.net^
+
+! https://github.com/NanoMeow/QuickReports/issues/1538
+watchgameofthrones.*##+js(aopr, AaDetector)
+watchgameofthrones.*##+js(nobab)
+watchgameofthrones.*###keeper2
+
+! https://github.com/uBlockOrigin/uAssets/issues/5987
+! https://github.com/uBlockOrigin/uAssets/issues/17477
+mad4wheels.com##+js(nostif, adsbygoogle)
+mad4wheels.com##+js(aopw, adblock)
+
+! https://github.com/NanoMeow/QuickReports/issues/1543
+dailylocal.com##+js(set, CnnXt.Event.fire, noopFunc)
+
+! marketmovers.it anti adb
+marketmovers.it##+js(aeld, load, 2000)
+marketmovers.it##^script:has-text(google_ad_client)
+
+! https://github.com/NanoMeow/QuickReports/issues/1545
+gsurl.*##+js(aeld, mousedown, preventDefault)
+||iz682noju02ye5.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/5994
+northern-scot.co.uk##+js(aopr, CatapultTools)
+northern-scot.co.uk##.MPU
+northern-scot.co.uk##.TaboolaSide
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/378
+cnbc.com##+js(set, cnbc.canShowAds, true)
+cnbc.com##[class^="CreditCardCalloutWildcard-styles-select"]:has([href*="/?lid="])
+
+! https://github.com/uBlockOrigin/uAssets/issues/12328
+! allporncomic.com anti adb popups
+allporncomic.com##+js(aopw, ExoSupport)
+allporncomic.com##+js(aopr, exoJsPop101)
+allporncomic.com##.ad
+allporncomic.com##iframe
+*$script,3p,domain=allporncomic.com,denyallow=cloudflare.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5995
+! https://github.com/uBlockOrigin/uAssets/issues/6054
+! https://github.com/uBlockOrigin/uAssets/issues/6349
+||pmdipads-a.akamaihd.net^$media,redirect=noopmp3-0.1s
+
+! https://github.com/NanoMeow/QuickReports/issues/1557
+@@||reactgo.com^$ghide
+reactgo.com##ins.adsbygoogle
+
+! pharmaguideline.com anti adb
+pharmaguideline.com##+js(aeld, load, 2000)
+
+! https://github.com/NanoMeow/QuickReports/issues/1565
+puzzles.msn.com##+js(set, Adv_ab, false)
+puzzles.msn.com##+js(nano-sib)
+@@||puzzles.msn.com^$ghide
+@@||cdn.arkadiumhosted.com/advertisement/*/video-ads.js$script,domain=puzzles.msn.com
+@@||cdn.arkadiumhosted.com/advertisement/*/display-ads.js$script,domain=puzzles.msn.com
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,3p,domain=puzzles.msn.com
+puzzles.msn.com##[class*="displayAd"], .ark-ad-message
+
+! https://github.com/uBlockOrigin/uAssets/issues/5988
+||videorolls.row.aiv-cdn.net/*.mp4$media,redirect=noopmp3-0.1s,domain=amazon.com
+! https://github.com/uBlockOrigin/uAssets/issues/14512
+! https://www.reddit.com/r/uBlockOrigin/comments/14ftp7a/
+www.amazon.co.jp,www.amazon.com,www.amazon.de,www.primevideo.com##+js(json-prune, cuepointPlaylist)
+www.amazon.co.jp,www.amazon.com,www.amazon.de,www.primevideo.com##+js(xml-prune, xpath(//*[name()="Period"][.//*[@value="Ad"]] | //*[name()="Period"]/@start), [value="Ad"], .mpd)
+
+! https://github.com/NanoMeow/QuickReports/issues/1570
+@@||novelgo.id^$ghide
+novelgo.id##ins.adsbygoogle
+
+! https://github.com/NanoMeow/QuickReports/issues/1576
+lyricsongation.com##+js(nobab)
+
+! https://github.com/NanoMeow/QuickReports/issues/1578
+@@||finalboss.io^$ghide
+finalboss.io##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/5140#issuecomment-515653809
+vev.*,vidop.*##+js(aeld, /^(?:click|mousedown|mouseup)$/, di())
+vev.*,vidop.*,vidup.*##+js(set, console.clear, trueFunc)
+vev.*,vidup.*##+js(nowoif, /^/, 1)
+@@||vev.*^$ghide
+@@||vidop.*^$ghide
+@@||vidup.*^$ghide
+*$frame,3p,domain=vev.red|vidop.icu|vidup.io
+||vev.*/sw.js$script,1p
+||vidop.*/sw.js$script,1p
+||vidup.*/sw.js$script,1p
+*$script,domain=vidup.io,redirect-rule=noopjs
+vidup.*##.sponsored-container
+vev.*##.vjs-overlay
+vev.*##body > div[style="position: fixed; display: block; width: 100%; height: 100%; inset: 0px; background-color: rgba(0, 0, 0, 0); z-index: 300000;"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/6007
+okanime.*##+js(acs, $, getElementById)
+okanime.*##+js(nowebrtc)
+okanime.*##+js(nowoif)
+okanime.*###calque
+
+! https://github.com/uBlockOrigin/uAssets/issues/6009
+besthugecocks.com##+js(aopr, document.dispatchEvent)
+
+! https://github.com/NanoMeow/QuickReports/issues/1582
+pipocamoderna.com.br##+js(aopw, adBlockDetected)
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/1073
+textograto.com##+js(nostif, ())
+
+! https://forums.lanik.us/viewtopic.php?p=153254#p153254
+rainanime.*##+js(aopr, loadRunative)
+rainanime.*##.fake_player
+
+! https://github.com/uBlockOrigin/uAssets/issues/6022
+! https://github.com/AdguardTeam/AdguardFilters/issues/117880
+shrink.*##+js(aopr, app_vars.force_disable_adblock)
+shrink.*##+js(aopr, adBlockDetected)
+shrink.*##+js(nowebrtc)
+shrink.*##+js(set, blurred, false)
+shrink.*##+js(aopr, open)
+shrink.*##+js(noeval-if, replace)
+shrink.*##center
+shrink.*##.banner
+@@||shrink.*^$ghide
+bigbtc.win##div[style^="width:300px;height:250px"]
+@@||onceagain.mooo.com/prebid.js$script,domain=bigbtc.win
+bigbtc.win,cryptofun.space##^script:has-text(/block-adb|-0x|adblock/)
+!#if !cap_html_filtering
+bigbtc.win,cryptofun.space##+js(rmnt, script, /block-adb|-0x|adblock/)
+!#endif
+@@||bigbtc.win^$ghide
+bigbtc.win,cryptofun.space###block-adb-enabled, #block-add-enabled
+bigbtc.win,cryptofun.space###main, #ielement:style(display: block !important;)
+bigbtc.win##div:has(> div[style] > div[id] > script[src^="//ads.themoneytizer.com"])
+@@||dlvid.*/prebid.js$domain=bigbtc.win|shrink.icu
+
+! https://github.com/uBlockOrigin/uAssets/issues/6021
+! https://github.com/uBlockOrigin/uAssets/issues/17901
+||watson.de/js/tisoomi.js$script,1p
+watson.de##+js(set, _sp_.config, undefined)
+watson.de##[data-ad]
+
+! https://github.com/uBlockOrigin/uAssets/issues/6024
+activistpost.com##+js(aopr, XMLHttpRequest)
+activistpost.com##+js(aopr, String.fromCharCode)
+||activistpost.com^$script,1p
+@@||activistpost.com/wp-$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/1599
+hackedonlinegames.com##+js(nostif, _0x)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1279#issuecomment-517348623
+! https://github.com/uBlockOrigin/uAssets/issues/7512
+crunchyroll.com##+js(json-prune, value.media.ad_breaks)
+crunchyroll.com##+js(nosiif, onAdVideoStart)
+crunchyroll.com###template_skin_leaderboard
+! https://www.reddit.com/r/uBlockOrigin/comments/15vf9oj/problems_with_crunchyroll/
+! https://github.com/easylist/easylist/issues/17104
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect=google-ima.js,domain=crunchyroll.com,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/6029
+! https://github.com/uBlockOrigin/uAssets/issues/16049
+!*$popunder,3p,domain=spankbang.com
+||ersties.com^$3p
+||spankbang.*/official/serve_
+spankbang.*##+js(nowoif)
+spankbang.*##+js(set, chrome, undefined)
+spankbang.*##.ttaa2v3
+spankbang.*##[id^="interstitial_div"]
+spankbang.*##.video-list-with-ads > .video-item[data-id="0"]
+spankbang.*##.lv_cm_int_come_on
+spankbang.*##.download-promo
+
+! https://github.com/uBlockOrigin/uAssets/issues/6040
+@@||g-status.com^$ghide
+g-status.com##ins.adsbygoogle
+g-status.com##.topadv_placeholder
+
+! https://github.com/NanoMeow/QuickReports/issues/1443
+arcadeprehacks.com##+js(acs, Math.random, zonefile)
+
+! https://github.com/NanoMeow/QuickReports/issues/1608
+bilasport.net##+js(aopr, pwparams)
+
+! starachowice .eu anti adb
+@@||starachowice.eu^$ghide
+
+! iporntv .net popups
+iporntv.net##+js(acs, document.createElement, pop)
+
+! https://github.com/NanoMeow/QuickReports/issues/1203#issuecomment-517941828
+skeimg.com##+js(nowoif)
+||d1k3dpebxhgqjc.cloudfront.net^
+
+! https://github.com/uBlockOrigin/uAssets/issues/6045
+readcomicsonline.ru##+js(acs, document.createElement, "script")
+@@||readcomicsonline.ru^$ghide
+
+! https://www.reddit.com/r/uBlockOrigin/comments/clzwbg/
+yogitimes.com##+js(aopr, fuckAdBlock)
+
+! games4king https://github.com/NanoMeow/QuickReports/issues/19
+games4king.com###wrapped-content:style(display:inherit!important)
+games4king.com###ava-game_container:style(display:inherit!important)
+games4king.com##[id^="leaderboard"]
+games4king.com##[class^="ads"]
+games4king.com##[href^="https://play.google.com/"]
+games4king.com##+js(ra, target)
+
+! other https://github.com/NanoMeow/QuickReports/issues/19
+##.wgAdBlockMessage
+||cdn.pushcrew.com^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/1624
+4share.vn##+js(nano-stb)
+4share.vn##+js(nowoif)
+
+! fix openplayer .net anti adb
+openplayer.net##+js(acs, document.addEventListener)
+
+! https://github.com/NanoMeow/QuickReports/issues/121
+firefaucet.win##+js(nofab)
+firefaucet.win##+js(set, firefaucet, true)
+@@||firefaucet.win^$ghide
+firefaucet.win##[class^="sticky-ad"]
+||cpx-research.com^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/1627
+||adservice.google.*/adsid/integrator.js$xhr,redirect=nooptext,domain=tubia.com
+
+! https://github.com/NanoMeow/QuickReports/issues/1630
+odkrywamyzakryte.com##+js(nofab)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6052
+xtapes.to##+js(acs, jQuery, popunder)
+xtapes.to##+js(aopw, open)
+55k.io##+js(set, cRAds, true)
+
+! https://github.com/uBlockOrigin/uAssets/commit/5b3b660a548cc01973ea5fbf6a1a492a20d936e2#commitcomment-34599062
+! https://github.com/NanoMeow/QuickReports/issues/1885
+0xxx.ws##+js(acs, decodeURI, decodeURIComponent)
+0xxx.ws##+js(nowoif)
+
+! gocolumbialions.com anti adb
+@@||gocolumbialions.com^$ghide
+||gocolumbialions.com/components/js/analytics.js$script,1p,redirect=noopjs
+
+! cle0desktop.blogspot.com anti adb
+cle0desktop.blogspot.com##+js(nostif, nextFunction, 2000)
+cle0desktop.blogspot.com##+js(aeld, , pop)
+
+! voyageforum.com anti adb
+voyageforum.com##+js(nostif, AdBlock)
+
+! wuxiaworld.com anti adb
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=wuxiaworld.com
+||pubads.g.doubleclick.net/gampad/ads$xhr,redirect=nooptext,domain=imasdk.googleapis.com
+@@||pubads.g.doubleclick.net/gampad/ads*wuxiaworld.com$xhr,domain=imasdk.googleapis.com
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=34830
+g5u.pw##A[href$=".html"][rel="nofollow norefferer noopener"]
+! https://github.com/abp-filters/abp-filters-anti-cv/issues/247
+g5u.pw##+js(acs, Object.defineProperty, XMLHttpRequest)
+||g5u.pw/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6056
+artribune.com##+js(aost, Object, mark)
+artribune.com##^script:has-text(window.adsbygoogle)
+
+! https://github.com/NanoMeow/QuickReports/issues/1637
+interfans.org##+js(acs, $, AdBlock)
+interfans.org##+js(nobab)
+
+! https://github.com/uBlockOrigin/uAssets/issues/470
+xclusivejams.*##+js(aopr, decodeURI)
+||xclusivejams.*/sw.js$script
+
+! https://www.reddit.com/r/uBlockOrigin/comments/cnj0ex/admiral_adblock_blocker/
+! https://github.com/uBlockOrigin/uAssets/issues/13322
+prad.de##+js(nostif, stop-scrolling)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6062
+juba-get.com##+js(aopr, detectAdBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6060
+chatta.it##+js(nostif, Adv)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6063
+up-load.io##+js(noeval)
+up-load.io##+js(nostif, nextFunction, 2000)
+||up-load.io/sw.js$xhr,1p
+*$3p,denyallow=cloudflare.net|fontawesome.com|google.com|googleapis.com|gstatic.com|hwcdn.net|jquery.com|up-load.download,domain=up-load.io
+up-load.io##.ads
+
+! ketubanjiwa.com anti adb
+ketubanjiwa.com##+js(nostif, blockUI, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6065
+direct-link.net,link-to.net,direkt-wissen.com##+js(nano-sib, countdown)
+direct-link.net,direkt-wissen.com,link-to.net##+js(nano-sib, web_counter)
+direct-link.net,direkt-wissen.com,link-to.net##+js(nano-sib, video_counter)
+direct-link.net,link-to.net##+js(nano-stb, notification_state, 12000)
+direct-link.net,direkt-wissen.com,link-to.net##+js(set, app.addonIsInstalled, trueFunc)
+direct-link.net,direkt-wissen.com##+js(nostif, nextFunction, 2000)
+||direct-link.net^$xhr,1p
+@@||direct-link.net/*/click$xhr,1p
+@@||link-to.net/*/click$xhr,1p
+direct-link.net,link-to.net##.redirect-overlay
+
+! https://github.com/uBlockOrigin/uAssets/issues/6067
+rlslog.net##+js(aeld, load)
+rlslog.net##+js(nowebrtc)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/388
+@@||jwpcdn.com/player/plugins/googima/v/*/googima.js$script,domain=viu.tv
+
+! tf1 .fr
+! https://www.reddit.com/r/uBlockOrigin/comments/me8x4e/ublock_detected_again_for_mytf1fr/
+@@||tf1.fr^$ghide
+||delivery.tf1.fr/pub$media,redirect=noopmp3-0.1s,domain=tf1.fr
+||dnl-adv-ssl.tf1.fr/$media,redirect=noopmp3-0.1s,domain=tf1.fr
+*$xhr,redirect-rule=nooptext,domain=tf1.fr
+tf1.fr##+js(no-fetch-if, adsafeprotected)
+@@||footprint.net^$xhr,domain=prod-player.tf1.fr
+@@||vendorlist.consensu.org/vendorlist.json$xhr,domain=tf1.fr
+@@||cdn.tagcommander.com/cmp-api/cmp.js$script,domain=tf1.fr
+||slpubmedias.tf1.fr^$media,1p,redirect=noopmp3-0.1s
+
+! https://github.com/NanoMeow/QuickReports/issues/1653
+f1livegp.net##+js(nowebrtc)
+f1livegp.net###blockblockA
+
+! safemaru.blogspot.com anti adb
+safemaru.blogspot.com##+js(aeld, load, 2000)
+
+! https://github.com/NanoMeow/QuickReports/issues/1661
+reverso.net##+js(acs, $, adblock)
+reverso.net##.vdahead
+reverso.net##.bottom-rca
+reverso.net##.wrapperW + .sticky
+
+! https://github.com/uBlockOrigin/uAssets/issues/2285
+smutr.com##+js(popads-dummy)
+smutr.com##+js(set, flashvars.adv_pre_vast, '')
+smutr.com##+js(set, flashvars.popunder_url, undefined)
+*$popunder,domain=smutr.com,3p
+
+! yuvutu .com popunder
+yuvutu.com##+js(acs, String.prototype.charAt)
+
+! https://github.com/NanoMeow/QuickReports/issues/1664
+@@||lnk2.cc^$script,1p
+lnk2.cc##+js(aeld, , \)
+lnk2.cc##+js(nano-stb)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6075
+ucptt.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4885#issuecomment-521199974
+||loadshare.org/custom/*$media,redirect=noopmp4-1s,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/6092
+! https://github.com/uBlockOrigin/uAssets/issues/14928
+! https://github.com/uBlockOrigin/uAssets/issues/17916
+kachelmannwetter.com,meteologix.com##.dkpw-billboard-margin
+kachelmannwetter.com,meteologix.com,weather.us##.dkpw-billboard-margin-fixed
+kachelmannwetter.com##[href="https://pflotsh.com"]
+kachelmannwetter.com###meteosafe
+meteologix.com##.md-billboard-sp
+meteologix.com,weather.us##.mdcss-desktop
+kachelmannwetter.com,meteologix.com,weather.us##.kw-ad-right
+meteologix.com,weather.us##.gad-billboard-pos
+weather.us##.dkpw-abp
+@@||meteologix.com^$ghide
+@@||weather.us^$ghide
+||mairdumont.com^$script,redirect-rule=noopjs,domain=kachelmannwetter.com
+||md-nx.com^$script,redirect-rule=noopjs,domain=meteologix.com|weather.us
+
+! https://github.com/uBlockOrigin/uAssets/issues/6081
+techperiod.com##+js(set, blockAdBlock, true)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43387
+4movierulz.*##+js(aeld, , _0x)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6083
+losmovies.*##.aPlaceHolder
+
+! sportlemons. net / org popups / ads
+sportlemon.*,sportlemons.*,sportlemonx.*##+js(aopr, decodeURI)
+sportlemons.*###happyDog
+sportlemons.*###lazyCat
+sportlemonx.com##.tallstreambanner
+||bitcoinsports.org^$3p
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/391
+xxx-image.com##+js(aopr, adsBlocked)
+xxx-image.com##+js(aopr, open)
+xxx-image.com##+js(noeval)
+xxx-image.com##+js(aopr, XMLHttpRequest)
+xxx-image.com##+js(aopr, Date.prototype.toUTCString)
+xxx-image.com##+js(ra, oncontextmenu)
+xxx-image.com##.footer-container
+
+! https://www.reddit.com/r/uBlockOrigin/comments/cr5owd/doesnt_work_in_oscobocom_after_searching/
+oscobo.com##.banotset:upward(3)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6096
+! hulkpop.com -> kpopjjang.com
+kpopjjang.com##+js(aopr, decodeURIComponent)
+kpopjjang.com##+js(aopr, Base64)
+
+! exe.io shorteners
+! https://github.com/uBlockOrigin/uAssets/issues/7574
+cuts-url.com,eio.io,exe.io,exe.app,exee.io##+js(aopr, app_vars.force_disable_adblock)
+exe.io,exe.app##+js(nowoif)
+cuts-url.com,eio.io,exe.app,exee.io##+js(set, blurred, false)
+/sw.js$script,1p,domain=eio.io|exe.app|exee.io
+exey.io##+js(acs, encodeURIComponent, XMLHttpRequest)
+exey.io##+js(set, blurred, false)
+eio.io,exee.io,exe.app##+js(aopr, adBlockDetected)
+exey.io##+js(acs, disableItToContinue)
+@@||exe.app^$ghide
+exe.app,eio.io,ufacw.com##+js(no-fetch-if, google)
+exe.io,wealthh.xyz##+js(aopr, parcelRequire)
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=exey.io
+@@||pagead2.googlesyndication.com/pagead/managed/js/adsense/$script,domain=exey.io
+/ad-m.js$script,1p
+||lengejoberdak.pro^
+||measur-d.com^$3p
+exee.io,exe.app##.banner-page > .short
+! https://github.com/AdguardTeam/AdguardFilters/issues/111672
+skincarie.com##+js(nowoif)
+skincarie.com##+js(set, blurred, false)
+! https://github.com/uBlockOrigin/uAssets/issues/14725
+ufacw.com###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+ufacw.com###wpsafe-generate, #wpsafe-link:others()
+! https://github.com/AdguardTeam/AdguardFilters/issues/162749
+exeo.app##+js(set, blurred, false)
+
+! https://github.com/NanoMeow/QuickReports/issues/3168
+nsfw247.to##+js(nostif, mdpDeBlocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6102
+mzee.com##+js(aopr, performance)
+
+! https://github.com/NanoMeow/QuickReports/issues/1687
+@@||idalponse.blogspot.com^$ghide
+idalponse.blogspot.com##ins.adsbygoogle
+
+! automobiledimension.com anti adb
+automobiledimension.com##.avisdiv
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/1080
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=mysterious-dev.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6104
+daftporn.com##+js(aopr, document.dispatchEvent)
+daftporn.com##+js(disable-newtab-links)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6107
+bravoerotica.com##+js(aopr, ExoLoader.serve)
+bravoerotica.net##+js(set, flashvars.adv_pause_html, '')
+bravoerotica.net##+js(set, flashvars.adv_start_html, '')
+bravoerotica.net##.place
+bravoerotica.net##.table
+
+! https://github.com/uBlockOrigin/uAssets/issues/6111
+@@||emu-games.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6106
+fullhdxxx.com##+js(aeld, popstate)
+fullhdxxx.com##+js(aopr, ExoLoader)
+fullhdxxx.com##+js(set, adv, true)
+fullhdxxx.com##+js(aopr, btoa)
+fullhdxxx.com,viptube.com##+js(nowoif)
+fullhdxxx.com###video-slider
+! https://github.com/uBlockOrigin/uAssets/issues/6106#issuecomment-528640975
+m.viptube.com##+js(aopw, mobilePop)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6113
+madchensex.com##+js(aopr, ExoLoader)
+madchensex.com###side-spot
+
+! https://github.com/uBlockOrigin/uAssets/issues/6114
+erogen.*##+js(aopr, document.dispatchEvent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1854
+xasiat.com##+js(aopr, exoJsPop101)
+xasiat.com##+js(aopr, ExoLoader.serve)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6115
+||rusexclips.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6116
+redporno.cz##+js(aopr, ExoLoader.serve)
+redporno.cz##.right
+
+! https://github.com/uBlockOrigin/uAssets/issues/6117
+vintageporntubes.com##+js(aopr, ExoLoader.serve)
+vintageporntubes.com##+js(aeld, getexoloader)
+vintageporntubes.com##.VPT_player_ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/6118
+italianoxxx.com##+js(aopr, document.dispatchEvent)
+||scopateitaliane.it^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6120
+collegehdsex.com,lustylist.com##+js(aopr, document.dispatchEvent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6121
+yumstories.com##+js(aopr, document.dispatchEvent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6122
+18-teen-porn.com,69teentube.com,girlshd.xxx,home-xxx-videos.com,orgasmlist.com,teensextube.xxx##+js(aopr, document.dispatchEvent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6123
+xxxvideos247.com##+js(aopr, ExoLoader.serve)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6124
+pornyfap.com##+js(aopr, document.dispatchEvent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6125
+young-pussy.com##+js(aopr, ExoLoader.serve)
+young-pussy.com###playerOverlay
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43398
+! https://github.com/NanoMeow/QuickReports/issues/3629
+! https://github.com/NanoMeow/QuickReports/issues/4367
+extremereportbot.com##+js(nostif, /_0x|debug/)
+extremereportbot.com##+js(nosiif, /_0x|debug/)
+@@||extremereportbot.com^$ghide
+*$script,redirect-rule=noopjs,domain=extremereportbot.com
+||googleapis.com/discovery/$xhr,domain=extremereportbot.com
+@@||pagead2.googlesyndication.com^*/show_ads_impl.js$script,domain=extremereportbot.com
+@@||doubleclick.net/pagead/*$frame,domain=extremereportbot.com
+@@||googlesyndication.com^$xhr,domain=extremereportbot.com
+
+! https://github.com/NanoMeow/QuickReports/issues/1693
+tatsumi-crew.net##+js(nobab)
+tatsumi-crew.net###HTML2
+
+! https://github.com/uBlockOrigin/uAssets/issues/6127
+your-daily-girl.com##+js(aopr, adtoniq)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6128
+nudistube.com##+js(aopr, document.dispatchEvent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6129
+uporno.xxx##+js(aopr, document.dispatchEvent)
+uporno.xxx##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/6130
+ultrateenporn.com##+js(aopr, document.dispatchEvent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6132
+! https://github.com/uBlockOrigin/uAssets/issues/18402
+gosexpod.com##+js(aeld, click, my_inter_listen)
+gosexpod.com##+js(aopr, document.dispatchEvent)
+gosexpod.com##.zzz-ddnotice
+gosexpod.com##.content__block[style^="direction"]
+gosexpod.com##.video-headline
+gosexpod.com##center
+gosexpod.com##.natsc
+gosexpod.com##.im_outer_x:upward(2)
+gosexpod.com##^script:has-text(myreadCookie/)
+!#if env_chromium
+gosexpod.com##+js(rmnt, script, myreadCookie)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/6133
+al4a.com,grannysex.name,porntb.com,scopateitaliane.it,sexbox.online,teenpornvideo.sex,twatis.com##+js(aopr, document.dispatchEvent)
+/dao/dao-fel.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6137
+lonely-mature.com##+js(aopr, EviPopunder)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6143
+pornclassic.tube,tubepornclassic.com##+js(acs, adver)
+tubepornclassic.com##+js(acs, document.createElement, tcpusher)
+tubepornclassic.com##+js(aeld, , window.open)
+tubepornclassic.com##+js(aopr, preadvercb)
+tubepornclassic.com##+js(nosiif, complete, 50)
+tubepornclassic.com##+js(nosiif, document.readyState)
+pornclassic.tube,tubepornclassic.com##+js(set, prerollMain, undefined)
+*$frame,3p,domain=pornclassic.tube|tubepornclassic.com
+*$popunder,3p,domain=pornclassic.tube|tubepornclassic.com
+pornclassic.tube,tubepornclassic.com##.content > div > .container + div
+pornclassic.tube,tubepornclassic.com##div:has(> a[href^="http://www.theclassicporn.com/"])
+pornclassic.tube,tubepornclassic.com##span[style="display:flex !important"] > div:first-child
+pornclassic.tube,tubepornclassic.com##.video-page__content > div.left + div[class]:last-child
+pornclassic.tube,tubepornclassic.com##div[style="display:flex !important"] > div
+pornclassic.tube,tubepornclassic.com##.video-page__player + div[class] > div[class]
+pornclassic.tube,tubepornclassic.com##.partners-wrap + div[class]
+pornclassic.tube,tubepornclassic.com##section[style="padding: 20px;"]
+pornclassic.tube,tubepornclassic.com##div[style="width: 300px; height: 250px;"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/6144
+flashingjungle.com##+js(aeld, /^(click|mousedown|mousemove|touchstart|touchend|touchmove)/, system.popunder)
+flashingjungle.com##+js(aopr, document.dispatchEvent)
+flashingjungle.com##.advertising:upward(2)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6145
+pussyspot.net,wildpictures.net##+js(aopr, decodeURI)
+pussyspot.net,wildpictures.net##[href^="http://ucam.xxx/"]
+pussyspot.net,wildpictures.net##[href^="https://easygamepromo.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/6149
+! https://github.com/uBlockOrigin/uAssets/issues/6151
+! https://github.com/uBlockOrigin/uAssets/issues/6153
+! https://github.com/AdguardTeam/AdguardFilters/issues/70031
+! https://github.com/easylist/easylist/issues/6726
+! https://github.com/AdguardTeam/AdguardFilters/issues/69868
+! https://github.com/AdguardTeam/AdguardFilters/issues/70891
+8boobs.com,babesinporn.com,hotstunners.com,mainbabes.com,mysexybabes.com,pleasuregirl.net,rabbitsfun.com,sexybabesz.com,silkengirl.*##+js(aopr, ExoLoader.addZone)
+8boobs.com,babesinporn.com,boobgirlz.com,fooxybabes.com,hotstunners.com,jennylist.xyz,jumboporn.xyz,mainbabes.com,mysexybabes.com,nakedbabes.club,pleasuregirl.net,rabbitsfun.com,sexybabesz.com,silkengirl.*,vibraporn.com,zazzybabes.com,zehnporn.com##+js(aopr, loadTool)
+8boobs.com,babesinporn.com,bustybloom.com,hotstunners.com,nudebabes.sexy,pleasuregirl.net,rabbitsfun.com,silkengirl.*##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+babesaround.com,dirtyyoungbitches.com,grabpussy.com,join2babes.com,nightdreambabe.com,novoglam.com,novohot.com,novojoy.com,novoporn.com,novostrong.com,pbabes.com,pussystate.com,redpornblog.com,rossoporn.com,sexynakeds.com,thousandbabes.com##+js(aopr, AaDetector)
+babesinporn.com##.topbanner
+boobgirlz.com##.widget-column:has(> center > [href="https://boobgirlz.com/istripper"])
+nakedneighbour.com##.banner:upward(.block)
+/sex.gif$domain=epikporn.com|erotichdworld.com|guruofporn.com|jesseporn.xyz|jumboporn.xyz|kendralist.com|steezylist.com
+/yep.gif$domain=abellalist.com|doseofporn.com|freyalist.com|lizardporn.com|moozporn.com|zehnporn.com
+/flr.js$domain=8boobs.com|angelgals.com|babesexy.com|babesinporn.com|fooxybabes.com|hotbabeswanted.com|hotstunners.com|mainbabes.com|nakedbabes.club|nakedgirlsroom.com|nudebabes.sexy|pleasuregirl.net|rabbitsfun.com|sexybabes.club|sexybabesart.com|silkengirl.*|wantedbabes.com
+/images/*/b/*$image,redirect=2x2.png,domain=babesandbitches.net|babesaround.com|babesbang.com|babeuniversum.com|grabpussy.com|join2babes.com|nightdreambabe.com|novojoy.com|novoporn.com|novostrong.com|pbabes.com|pussystate.com|redpornblog.com|rossoporn.com|sexynakeds.com
+/images/*/banners/*$image,redirect=2x2.png,domain=100bucksbabes.com|8boobs.com|babeimpact.com|babesandgirls.com|babesaround.com|babesinporn.com|babesmachine.com|bustybloom.com|chickteases.com|decorativemodels.com|dirtyyoungbitches.com|exgirlfriendmarket.com|fooxybabes.com|girlsofdesire.org|glam0ur.com|hotstunners.com|livejasminbabes.net|morazzia.com|nakedneighbour.com|novoglam.com|pleasuregirl.net|rabbitsfun.com|sexyaporno.com|sexykittenporn.com|silkengirl.*|slutsandangels.com|theomegaproject.org|thousandbabes.com|vibraporn.com|wantedbabes.com|wildfanny.com
+/istripper/istripper_$image,domain=8boobs.com|babesinporn.com|fooxybabes.com|hotstunners.com|mainbabes.com|pleasuregirl.net|rabbitsfun.com|silkengirl.*|wantedbabes.com
+/smallfr/*$frame,domain=babeimpact.com|decorativemodels.com|sexykittenporn.com
+/smallfr2/*$frame,domain=babeimpact.com|decorativemodels.com
+/\.com\/[_0-9a-zA-Z]+\.jpg$/$image,1p,domain=hottystop.com
+||zehnporn.com/img/12221.gif
+/gofd_fl.js
+babeuniversum.com##.aw
+babeuniversum.com##.galleryad
+redpornblog.com###ads
+nightdreambabe.com##.banner_place
+girlsofdesire.org##a[href^="/out"]
+silkengirl.com##.spots
+hotbabeswanted.com,nakedbabes.club##.deskbanner
+100bucksbabes.com,babesandgirls.com,morazzia.com##.vda
+babesaround.com,nightdreambabe.com##.section-bustyMedinaq > a[href^="/click/o/"]
+novojoy.com##.ownerbanner
+pussystate.com##li[style="clear:both;float:none;width:600px;margin:0;overflow:hidden;margin-left:-5px;"]
+rabbitsfun.com##.gallery-banner
+rabbitsfun.com##.picture-banner
+vibraporn.com##.topad
+fresh-babes.com###XXXGirls
+girlsofdesire.org##div[data-width="600"]
+novoporn.com##a[href^="/click/o/"]
+sensualgirls.org##a[href^="http://refer.ccbill.com/cgi-bin/clicks.cgi?"]
+nudevista.link##.sidebar-bn
+nudevista.link##.bnblog
+
+! https://github.com/uBlockOrigin/uAssets/issues/6150
+! https://github.com/uBlockOrigin/uAssets/issues/6152
+angelgals.com,nakedbabes.club##+js(acs, loadTool, popping)
+angelgals.com,nakedbabes.club##+js(aopr, ExoLoader.addZone)
+angelgals.com##+js(aeld, getexoloader)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6154
+babesexy.com,hotbabeswanted.com,nakedgirlsroom.com,nudebabes.sexy,sexybabes.club,sexybabesart.com##+js(aopr, ExoLoader.addZone)
+babesexy.com##+js(aeld, getexoloader)
+sexybabes.club##+js(acs, loadTool, popping)
+/backend_loader$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/6155
+cherrynudes.com##+js(acs, loadTool, popping)
+cherrynudes.com##[href^="http://links.verotel.com/"]
+cherrynudes.com##[href^="http://www.g4mz.com/"]
+hegreartnudes.com##+js(acs, loadTool, popping)
+cherrynudes.com##[href^="http://wcrgl.freeadult.games/hit.php"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/8719
+1001tracklists.com##+js(aopr, recoverLinks)
+1001tracklists.com##+js(ra, class, div.intAdX)
+1001tracklists.com##+js(ra, class, div[class^="img"][class$="ad"])
+@@||1001tracklists.com^$ghide
+@@||1001tracklists.com^$script,1p
+*$script,xhr,redirect-rule=noopjs,domain=1001tracklists.com
+1001tracklists.com##.adnginRight
+1001tracklists.com##div[class=""][style]
+1001tracklists.com##+js(alert-buster)
+1001tracklists.com##+js(no-fetch-if, method:HEAD)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6157
+fetishburg.com##+js(aopr, document.dispatchEvent)
+fetishburg.com##div.spot
+
+! https://github.com/uBlockOrigin/uAssets/issues/6159
+privateindianmovies.com##+js(aopr, document.dispatchEvent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6161
+homemature.net##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6162
+soyoungteens.com##+js(aopr, document.dispatchEvent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6163
+kingsofteens.com##+js(aopr, ExoLoader.serve)
+kingsofteens.com##+js(aopw, base64_decode)
+kingsofteens.com##+js(nowoif)
+doseofporn.com##+js(acs, loadTool, popping)
+kingsofteens.com##.spot
+
+! https://github.com/uBlockOrigin/uAssets/issues/6168
+@@||receivetxt.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6170
+@@||properhacks.weebly.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/1702
+space.tribuntekno.com##+js(aopw, adBlockDetected)
+
+! https://github.com/NanoMeow/QuickReports/issues/1712
+flashgirlgames.com,onlinesudoku.games##+js(set, ads, true)
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=flashgirlgames.com|onlinesudoku.games
+
+! https://github.com/NanoMeow/QuickReports/issues/1716
+otakukan.com##+js(aeld, load, appendChild)
+||otakukan.com/sw.js$script,1p
+||cdn.jsdelivr.net^*/arlinablock.js$script
+@@||otakukan.com^$ghide
+otakukan.com##ins.adsbygoogle
+
+! https://github.com/NanoMeow/QuickReports/issues/1718
+devdrive.cloud##+js(acs, document.getElementById, undefined)
+
+! https://github.com/NanoMeow/QuickReports/issues/1717
+gpxgenerator.com###adBlockDiv
+gpxgenerator.com##[href="link.php"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/cv9ake/can_i_block_a_specific_javascript_function/
+@@||aston-martin-club.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6186
+linkshub.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6189
+@@||javaguides.net^$ghide
+javaguides.net##+js(aeld, load, onload)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1025
+! https://github.com/NanoMeow/QuickReports/issues/2458
+@@||crackle.com^$cname
+*.mp4$media,domain=crackle.com
+||media.truex.com/integration/vpaid/com.truex.TrueXRenderer.js$script,domain=crackle.com,redirect=noopjs
+crackle.com##.vjs-ad-break-marker-adjustment
+! https://www.reddit.com/r/uBlockOrigin/comments/137arti/
+crackle.com##+js(json-prune, data.device.adSponsorshipTemplate data.device.adsParams)
+||heartbeat.crackle.com/tp.png
+
+! https://github.com/uBlockOrigin/uAssets/issues/6193
+hentaihere.com##+js(nowoif)
+hentaihere.com##[href^="https://goo.gl"]
+hentaihere.com##.js-adzone
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/395
+@@||zavislak.to^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/1731
+||adservice.google.com/adsid/integrator.js$script,redirect=noopjs,domain=973espn.com
+
+! https://github.com/NanoMeow/QuickReports/issues/1736
+secretsdujeu.com##+js(acs, document.getElementById, adsrefresh)
+
+! https://github.com/NanoMeow/QuickReports/issues/1392
+||googlesyndication.com/pagead/$script,redirect=noopjs,domain=iptvdroid1.blogspot.com
+
+! https://github.com/NanoMeow/QuickReports/issues/3098
+cruisingearth.com##+js(nostif, show)
+@@/wutime$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/1738
+@@||roanoke.com^$ghide
+roanoke.com##.dfp-ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/6207
+afilmywap.*,okhatrimaza.*##+js(popads-dummy)
+afilmywap.*,okhatrimaza.*##+js(aopr, glxopen)
+/1clkn/*$script,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/4707
+! https://github.com/uBlockOrigin/uAssets/issues/19664
+clk.*##+js(nowoif)
+clk.*##+js(set, blurred, false)
+||canoemissioninjunction.com^
+||rdrclk.com^
+||clk.wiki/ads$frame
+
+! https://github.com/NanoMeow/QuickReports/issues/1232
+getintopc.com##+js(nostif, /ai_adb|_0x/)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/o9qoo8/videos_wont_play_on_etonlinecom/
+etonline.com##+js(aopr, _sp_._networkListenerData)
+etonline.com##+js(set, canRunAds, true)
+
+! metager .org ads on search
+metager.org##.result:has(.partnershop-info)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5700
+supertelevisionhd.com##+js(aopr, AaDetector)
+~chavesnamao.com.br###anuncio
+
+! https://github.com/uBlockOrigin/uAssets/issues/6226
+@@||aradramatv.co^$ghide
+aradramatv.co##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/6228
+@@||teenserie.com/wp-content/plugins/$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6231
+/apu.php?*&zoneid=$important
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71294
+gulf-up.com##+js(aopr, AaDetector)
+@@||gulf-up.com^$ghide
+gulf-up.com##ins.adsbygoogle
+||googlesyndication.com/$script,redirect=noopjs,domain=gulf-up.com
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43449
+keysbrasil.blogspot.com##+js(nostif, nextFunction, 2000)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/397
+@@||fiatclub.eu^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2111
+vidia.tv##+js(acs, $, undefined)
+vidia.tv##+js(aopr, AaDetector)
+@@||vidia.tv^$script,1p
+||egyanime.com^$domain=vidia.tv
+vidia.tv##+js(nostif, iframe)
+vidia.tv##+js(nostif, pop)
+||vidia.tv^$csp=frame-src
+
+! https://github.com/uBlockOrigin/uAssets/issues/6236
+@@||liveadexchanger.com/a/display.php$script,domain=prem.link
+
+! https://github.com/uBlockOrigin/uAssets/issues/9542
+! https://github.com/uBlockOrigin/uAssets/issues/19903#issuecomment-1837748723
+multiup.io,multiup.org,multiup.eu##+js(acs, decodeURI, decodeURIComponent)
+multiup.io,multiup.org,multiup.eu##+js(nosiif, .submit)
+multiup.io##+js(rpnt, script, setInterval)
+multiup.io,multiup.org,multiup.eu##.text-center.bg-info
+multiup.io,multiup.org,multiup.eu##div.col-md-4:nth-of-type(1):has-text(Usennet)
+multiup.io,multiup.org,multiup.eu##div:has(> .panel-featured-success.panel-featured-bottom.panel-featured-top.panel.text-center [alt="Usennet.nl"])
+multiup.io,multiup.org,multiup.eu##.mfp-ready
+multiup.io,multiup.org,multiup.eu##div.text-center:has(a[class="btn btn-success"][href^="abp:subscribe"])
+*$popunder,3p,domain=multiup.io|multiup.org|multiup.eu
+||multinews.me^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/2015
+! https://github.com/uBlockOrigin/uAssets/issues/6242
+tmearn.*##+js(aopr, app_vars.force_disable_adblock)
+tmearn.*##+js(nowoif)
+tmearn.*##+js(set, blurred, false)
+cutpaid.com,tmearn.*##+js(aopr, AaDetector)
+*$script,3p,denyallow=cloudflare.com|google.com|gstatic.com|recaptcha.net,domain=tmearn.*
+||tmearn.com/*sw.js$script,1p
+tmearn.*##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/6247
+godmods.com##+js(aopw, mdp_deblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6249
+bilan.ch##+js(aopr, _sp_._networkListenerData)
+
+! https://github.com/NanoMeow/QuickReports/issues/1782
+filedown.*##+js(nowoif)
+@@||filedown.*^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/3419
+mexa.*##+js(acs, document.getElementById, adblockinfo)
+mexa.sh##+js(acs, String.fromCharCode, 'shift')
+mexa.sh##+js(aopr, eddOptions)
+mexa.*##+js(aopw, adBlockDetected)
+mexa.sh##+js(aopw, afScript)
+mexa.*##+js(aopw, installBtnvar)
+*$script,3p,denyallow=google.com|gstatic.com|hcaptcha.com|recaptcha.net,domain=mexa.sh
+
+! https://github.com/NanoMeow/QuickReports/issues/1792
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=spieleklassiker.com
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=spieleklassiker.com
+spieleklassiker.com##.banner
+
+! https://github.com/NanoMeow/QuickReports/issues/1802
+@@||valueyourmusic.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6269
+qoshe.com##+js(nostif, adBlock)
+yandexcdn.com##+js(nowoif)
+@@||yandexcdn.com^$ghide
+@@||yandexcdn.com^$script,1p
+yandexcdn.com##a[onclick="openAuc();"]
+yandexcdn.com##[href="https://t.me/Russia_Vs_Ukraine_War3"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/6277
+*.mp4$media,redirect=noopmp3-0.1s,domain=theweedtube.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6281
+iguarras.com,peliculaspornomega.net##+js(nowoif)
+iguarras.com###dimmed
+peliculaspornomega.net##.dimmed
+! https://github.com/uBlockOrigin/uAssets/issues/6281
+
+! https://github.com/NanoMeow/QuickReports/issues/1814
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=tsforum.pl
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/40255
+uploadas.com##+js(aopw, Fingerprint2)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/110893
+birdurls.com##+js(nowoif)
+birdurls.com###bg_popup
+birdurls.com##+js(set, blurred, false)
+birdurls.com##.box-main p
+birdurls.com##.box-main center
+birdurls.com###link-view > br
+*$frame,script,3p,denyallow=consensu.org|google.com|gstatic.com|recaptcha.net|quantcast.com|cloudflare.com,domain=birdurls.com
+
+! https://github.com/NanoMeow/QuickReports/issues/1815
+@@||video.bestjavporn.com^$ghide
+bestjavporn.com,mm9841.cc###flash
+bestjavporn.com###player_3x2_container_inner
+bestjavporn.com###player-container:has-text(Close ad)
+! https://github.com/uBlockOrigin/uAssets/issues/6348
+javporn.best##+js(aopr, AaDetector)
+javporn.best##+js(aopr, glxopen)
+@@||javporn.*^$ghide
+@@||av-th.info^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/3608
+lowellsun.com##+js(nostif, , 1)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80902
+multifaucet.org##+js(nano-sib, seconds)
+multifaucet.org##+js(aopr, adBlockDetected)
+@@||multifaucet.org^$ghide
+multifaucet.org##.flexbannergroup
+multifaucet.org##ins[class][style^="display:inline-block;width:"]
+
+! popups , ads torrentproject .io / cc
+||torrentproject.*^$script,frame,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6296
+nudogram.com##+js(acs, decodeURI, decodeURIComponent)
+nudogram.com##+js(aopr, decodeURI)
+||leadnote.me^
+nudogram.com##.sponsor
+
+! https://github.com/uBlockOrigin/uAssets/issues/6300
+gottanut.com##+js(aopr, document.dispatchEvent)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6301
+uiporn.com##+js(aopr, document.dispatchEvent)
+||uiporn.com/ai/*$script,1p
+||uiporn.com/sw.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6302
+xcafe.com##+js(aopr, document.dispatchEvent)
+xcafe.com##+js(popads-dummy)
+xcafe.com##+js(aeld, , bi())
+||xcafe.com/js/initsite.js
+
+! https://www.reddit.com/r/uBlockOrigin/comments/mghv7b/no_solution_for_coinlyhub/
+@@||coinlyhub.com^$ghide
+coinlyhub.com##+js(aopr, open)
+coinlyhub.com##+js(set, Fingerprint2, true)
+coinlyhub.com##+js(nano-sib, seconds)
+coinlyhub.com##+js(aopr, app_vars.force_disable_adblock)
+coinlyhub.com##+js(set, blurred, false)
+@@||coinlyhub.com^$script,1p
+coinlyhub.com##[class^="bmadblock"]
+coinlyhub.com##div.highlight
+coinlyhub.com##.banner
+*$script,redirect-rule=noopjs,domain=coinlyhub.com|cryptotinker.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6305
+zimabdko.com##+js(nowebrtc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6306
+pornoxo.com##+js(popads-dummy)
+*$popunder,3p,domain=m.pornoxo.com
+||pushpad.xyz^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6789
+! https://github.com/uBlockOrigin/uAssets/issues/6981
+leechall.*###adBanner:style(height:25px !important;left:-3000px !important;position:absolute !important)
+leechall.*##+js(nano-sib)
+leechall.com##+js(acs, document.createElement, /l\.parentNode\.insertBefore\(s/)
+leechall.*##.text-center.alert-info.alert
+@@||leechall.download^$ghide
+@@||leechall.download^$script,1p
+||digiseller.ru^$3p,domain=leechall.com
+*$script,3p,redirect-rule=noopjs,domain=leechall.download|leechall.com
+*$script,3p,denyallow=bootstrapcdn.com|cloudflare.com|cloudflare.net|googleapis.com|jsdelivr.net|tawk.to,domain=leechall.*
+||hathyneglu.com^
+
+! https://github.com/NanoMeow/QuickReports/issues/1850
+||newtoki*.net/*banner$image,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6309
+kinoz.*##+js(nowebrtc)
+kinoz.*##+js(aopr, AaDetector)
+kinox.*,kinoz.*##+js(aopr, decodeURI)
+||tsyndolls.com^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/1854
+majalahpendidikan.com##+js(aopr, adBlockDetected)
+
+! sombex.com anti adb
+sombex.com##+js(nosiif, visibility, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2745
+ultimate-catch.eu##+js(nostif, undefined)
+
+! lampungway .com anti adb
+lampungway.com##+js(aopw, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6322
+movie4me.*##+js(aopr, Math.floor)
+||movie4me.*/image/ad-$image
+##[href^="//producebreed.com/"]
+##[href*="uselnk.com/"]
+
+! https://github.com/NanoMeow/QuickReports/issues/1339
+! https://github.com/NanoAdblocker/NanoFilters/issues/546
+*$script,3p,denyallow=recaptcha.net|gstatic.com,domain=dglinker.com
+
+! cpopchanelofficial.com anti adb
+cpopchanelofficial.com##+js(nostif, check, 1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8356
+! https://www.reddit.com/r/uBlockOrigin/comments/lwtwx8/whitelisting_sites_does_not_work/gpj8cbl/
+@@||teemo.gg^$ghide
+teemo.gg##.bg-gray-200:style(background: none !important; height: 1px !important; min-height: 1px !important;)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/d6vxzj/the_problem_is_on_the_page/
+sochi.camera#@##cams_top_block
+
+! https://github.com/NanoMeow/QuickReports/issues/1970
+adsafelink.com##+js(aopr, app_vars.force_disable_adblock)
+adsafelink.com##+js(nowoif)
+adsafelink.com##+js(set, blurred, false)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/d758gi/blockadblock_detects_ubo_but_only_when_tab_is_in/
+@@||ustv247.tv^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2436
+avseesee.com##+js(acs, document.getElementById, _banner)
+avseesee.com##.textwidget:has(ins)
+! https://github.com/NanoMeow/QuickReports/issues/3508
+juicywest.com##+js(aopr, __Y)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6329
+@@||aii.sh^$ghide
+aii.sh##+js(nowoif)
+aii.sh##+js(nowebrtc)
+aii.sh##+js(set, blurred, false)
+aii.sh###link-view > center
+||aii.sh/sw$script,1p
+aii.sh##[src^="https://i.imgur.com/"]
+##.glx-watermark-container
+
+! https://www.reddit.com/r/uBlockOrigin/comments/novm3h/httpkisstvshowto_ublock_stopped_working_today_ad/
+! https://www.reddit.com/r/uBlockOrigin/comments/u8iofi/help_with_site_detects_ad_blocker/
+kisstvshow.*##+js(acs, $, #divDownload)
+kisstvshow.*###hideAds
+kisstvshow.*##.ksAds
+kisstvshow.*##div[style="width: 620px; margin: 0px auto; overflow: hidden;"]
+||kisstvshow.*/api/pop.php$xhr,1p
+||ad.kisstvshow.*^
+! https://www.reddit.com/r/uBlockOrigin/comments/xa95i0/
+||bebi.com^$script,redirect-rule=noopjs,domain=lifestylehack.info
+
+! winit.heatworld.com anti adb
+winit.heatworld.com##+js(aopw, showModal)
+winit.heatworld.com##.sticky-ad-unit-default
+winit.heatworld.com##.sticky-ad-unit-spacer-default
+
+! https://github.com/uBlockOrigin/uAssets/issues/6332
+@@||ryuukoi.web.id^$ghide
+||i1.wp.com/ryuukoi.web.id/wp-content/uploads/*/ANTIADBLOCK$image
+
+||bitcoinadvertise.net^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/1896
+checkz.net##+js(aopw, console.log)
+@@||checkz.net^$ghide
+checkz.net##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/10076
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=ff14angler.com
+@@||pagead2.googlesyndication.com/pagead/managed/js/adsense/$script,domain=ff14angler.com
+@@||g.doubleclick.net/pagead/ads?$frame,domain=ff14angler.com
+@@||ff14angler.com^$ghide
+ff14angler.com###main > ins.adsbygoogle:style(position: absolute !important; left: -4000px !important;)
+ff14angler.com##.side_banner:style(position: absolute !important; left: -4000px !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/1901
+jaiefra.com##+js(aopr, adBlockDetected)
+
+! hotpress.info anti adb
+hotpress.info##+js(nostif, nextFunction, 2000)
+@@||hotpress.info^$ghide
+
+! mixloads.com anti adb popups
+mixloads.com##+js(aopr, AaDetector)
+mixloads.com##+js(aeld, load, 2000)
+||mixloads.com/sw.js$script,1p
+
+! mangaromance.eu anti adb
+mangaromance.eu##+js(aeld, load, 2000)
+
+! onlineproxy. eu popups
+||onlineproxy.eu^$csp=default-src 'self' 'unsafe-inline' *.googleapis.com *.google.com *.gstatic.com *.google-analytics.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/41057
+@@||coachmag.co.uk^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/1915
+||doubleclick.net/pagead/id$xhr,redirect=nooptext,domain=windowsreport.com
+
+! https://github.com/NanoMeow/QuickReports/issues/1925
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=collegestash.com
+||googlesyndication.com/pagead/js/adsbygoogle.js$xhr,redirect=noopjs,domain=collegestash.com
+
+! https://github.com/NanoMeow/QuickReports/issues/1926
+buffstream.to,buffstreamz.com##+js(acs, $, modal)
+buffstreamz.com##+js(nowebrtc)
+buffstream.to,buffstreamz.com##.btn
+buffstreamz.com##a[href*="//my-sports.club"]
+
+##[href^="http://referrer.website/"]
+
+! https://github.com/NanoMeow/QuickReports/issues/1929
+@@||thisismoney.co.uk^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6351
+! https://github.com/uBlockOrigin/uAssets/issues/8367
+megagames.com##+js(acs, jQuery, fuckAdBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6355
+@@||chiaseapk.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6356
+@@||csrevo.com^$ghide
+@@||phoenixkiller.com/assets/js/ad-provider.js|$script
+csrevo.com###HTML3
+||i.imgur.com/FYROU5n.gif$image,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6357
+@@||designoptimal.com^$ghide
+designoptimal.com##ins.adsbygoogle
+
+! almohtarif-tech .net anti adb
+almohtarif-tech.net##+js(aeld, load, onload)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/dagme6/video_ads_are_showing_up_on_pietsmietde/
+*$media,redirect=noopmp3-0.1s,domain=pietsmiet.de
+@@||pietcdn.de/pietcast/*$media,domain=pietsmiet.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/6360
+vidbom.com,zimabdko.com##+js(aopr, open)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/dahz6b/nsfw_czechvideoorg_owner_of_this_video_doesnot/
+czxxx.org##+js(aopr, adBlockDetected)
+czechvideo.org##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/3038
+creditcardgenerator.com##+js(nostif, adsBlocked)
+
+! interssh.com anti adb
+interssh.com##+js(aeld, load, 2000)
+
+! https://forums.lanik.us/viewtopic.php?p=150115#p150115
+ancensored.com##+js(aopr, AaDetector)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/d99did/blue_banner_on_the_washington_post/f1uyoin/
+elpasotimes.com##+js(aopr, _sp_.mms.startMsg)
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/1084
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=ktab3ndna.com
+
+! https://github.com/NanoMeow/QuickReports/issues/1944
+! https://github.com/uBlockOrigin/uAssets/issues/10463
+get-to.link##+js(aopr, exoJsPop101)
+get-to.link##+js(aopr, document.dispatchEvent)
+@@||get-to.link^$ghide
+
+! sexo5k .com exo ads
+sexo5k.com##+js(rmnt, script, ExoLoader)
+
+! gfsvideos .com exo + popups
+gfsvideos.com##+js(aopr, document.dispatchEvent)
+gfsvideos.com##+js(nowoif)
+
+! home-made-videos .com exo
+home-made-videos.com##+js(aopr, document.dispatchEvent)
+home-made-videos.com##+js(set, dclm_ajax_var.disclaimer_redirect_url, '')
+home-made-videos.com###dclm_modal_content
+home-made-videos.com###dclm_modal_screen
+
+! https://github.com/uBlockOrigin/uAssets/issues/6827
+shameless.com##+js(aopr, ExoLoader.addZone)
+shameless.com##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+shameless.com##+js(aopr, jwplayer.utils.Timer)
+shameless.com##.active.pause-gift
+
+! https://github.com/NanoMeow/QuickReports/issues/1952
+electriciansforums.net##+js(nostif, adb)
+
+! https://github.com/NanoMeow/QuickReports/issues/1954
+nmn900.net##+js(acs, document.getElementById, undefined)
+
+! https://github.com/NanoMeow/QuickReports/issues/1957
+@@||realmadryt.pl^$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6377
+@@||speakingtree.in^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6380
+coinhub.pw##+js(aopw, adBlockDetected)
+coinhub.pw##body > center
+
+! https://github.com/uBlockOrigin/uAssets/issues/6374
+the-voice-of-germany.de##+js(aopr, $ADP)
+||zomap.de/*&expires=$script,domain=the-voice-of-germany.*
+||cdn.zomap.de^$media,redirect=noopmp3-0.1s,domain=the-voice-of-germany.*
+
+! dpstream .bz popups
+dpstream.*##+js(set, load_pop_power, noopFunc)
+dpstream.*##+js(ra, href, #clickfakeplayer)
+dpstream.*##.movie-aye
+
+! https://github.com/NanoMeow/QuickReports/issues/3228
+unfriend-app.com##+js(nobab)
+@@||unfriend-app.com^$ghide
+*$script,redirect-rule=noopjs,domain=unfriend-app.com
+
+! https://github.com/NanoMeow/QuickReports/issues/1964
+adn.com##+js(aopr, MG2Loader)
+
+! https://github.com/NanoMeow/QuickReports/issues/1965
+@@||jbzdy.cc^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6385
+technews.tw##+js(acs, jQuery, adblock)
+technews.tw##.AD_wrapper
+
+! https://github.com/uBlockOrigin/uAssets/issues/2756
+shon.xyz##+js(nano-sib)
+shon.xyz##+js(aopw, Fingerprint2)
+shon.xyz##+js(ra, onclick, [onclick^="window.open"])
+shon.xyz##+js(popads-dummy)
+||shon.xyz^$csp=script-src 'self' 'unsafe-inline' *.gstatic.com *.google.com *.googletagmanager.com *.googleapis.com;frame-src 'self' *.google.com;connect-src 'self'
+
+?zoneid=*&ab=1|$script,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6387
+shrinkme.io##+js(aopr, app_vars.force_disable_adblock)
+shrinkme.io##+js(aopr, open)
+shrinkme.io###imgAddDirectLink
+||shrinkme.io/sw.js$script,1p
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|consensu.org|google.com|googleapis.com|gstatic.com|hwcdn.net|jquery.com|recaptcha.net,domain=shrinkme.io
+
+! https://github.com/uBlockOrigin/uAssets/issues/6393
+turkleech.com##+js(nostif, nextFunction, 2000)
+
+! https://github.com/NanoMeow/QuickReports/issues/1962#issuecomment-538591750
+gamearter.com##+js(nano-sib,/SplashScreen|BannerAd/)
+gamearter.com##+js(nano-stb,/SplashScreen|BannerAd/)
+gamearter.com##div[id^="ga_sp_"]
+
+! https://github.com/NanoMeow/QuickReports/issues/1961
+mpg.football##+js(set, ads, true)
+
+! https://github.com/NanoMeow/QuickReports/issues/1984
+@@||animevietsub.tv^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6402
+spokesman.com##+js(aopr, Connext)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6404
+medihelp.life##+js(aopw, ai_adb_overlay)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ddrhoq/blockadblock_on_a_website/f2m9oa4/
+watchmynameisearl.com##+js(nobab)
+watchmynameisearl.com##+js(aopr, AaDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6406
+@@||guiamuriae.com.br^$ghide
+||guiamuriae.com.br/*.gif$image
+guiamuriae.com.br##.theiaStickySidebar
+guiamuriae.com.br##ins.adsbygoogle
+guiamuriae.com.br##.e3lan-top
+
+! https://github.com/uBlockOrigin/uAssets/issues/6409
+verprogramasonline.com##+js(acs, atob, decodeURI)
+verprogramasonline.com##+js(aopr, mdp_deblocker)
+verprogramasonline.com##.td-ss-main-sidebar
+
+! https://github.com/NanoMeow/QuickReports/issues/1991
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=viu.tv
+@@||entitlements.jwplayer.com/$xhr,domain=viu.tv
+
+||d2wpknqle9nuv8.cloudfront.net^
+
+! https://forums.lanik.us/viewtopic.php?p=150260#p150260
+ffmovies.*##+js(acs, String.fromCharCode, break;)
+ffmovies.*##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/1993
+thisvid.com##+js(aeld, /^(?:load|click)$/, popMagic)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21821
+hl-live.de##+js(nostif, nextFunction)
+hl-live.de###swlad
+
+! flsaudio.com anti adb
+flsaudio.com##.adsbygoogle:upward(.widget)
+flsaudio.com##.altumcode-coupon-content
+||flsaudio.com^$image,redirect-rule=1x1.gif,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/1997
+@@||aargauerzeitung.ch^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6414
+cloudapps.herokuapp.com##+js(set, gadb, false)
+
+! imagetwist .com popunders
+imagetwist.com##+js(acs, document.getElementsByTagName, "script")
+imagehaha.com,imagenpic.com,imageshimage.com,imagetwist.com##+js(aeld, , checkTarget)
+imagehaha.com,imagenpic.com,imageshimage.com,imagetwist.com,picshick.com###rang2
+imagehaha.com,imagenpic.com,imageshimage.com,imagetwist.com##video
+imagehaha.com##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/2011
+@@||watchsuitsonline.net^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2012
+produsat.com##+js(set, adBlockDetected, true)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/dg2exo/jw_player_doesnt_load_with_ublock_origin_on/
+*/gfp_video_ads/*$media,redirect=noopmp3-0.1s,domain=digisport.ro
+||gvt1.com^$media,redirect=noopmp3-0.1s,domain=digisport.ro
+@@||scdn.cxense.com/cx.js$script,domain=digisport.ro
+@@||entitlements.jwplayer.com^$xhr,domain=digisport.ro
+@@||doubleclick.net/gampad/live/ads*digisport.ro$xhr,domain=imasdk.googleapis.com
+@@||jwpcdn.com/player/$script,domain=digisport.ro
+
+! https://github.com/NanoMeow/QuickReports/issues/2020
+@@||how2electronics.com^$ghide
+how2electronics.com##.adsbygoogle:style(max-height: 1px !important;)
+
+! freesoftpdfdownload.blogspot.com anti adb popups
+freesoftpdfdownload.blogspot.com##+js(acs, decodeURI, decodeURIComponent)
+freesoftpdfdownload.blogspot.com##+js(aeld, load, 2000)
+||wap4dollar.com^$3p
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43689
+@@||upclips.*^$ghide
+upclips.*##[id*="ScriptRoot"]
+||upclips.online*^$csp=script-src 'self' 'unsafe-inline' blob: *.cloudflare.com *.google-analytics.com *.googleapis.com *.gstatic.com *.radiantmediatechs.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6024#issuecomment-541228625
+||mediapass.com^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/2027
+officegamespot.com##+js(acs, Math.round, zonefile)
+
+! tamilyogi. cool popups vidorg.net anti adb
+tamilyogi.*##+js(acs, String.fromCharCode, 'shift')
+@@||vidorg.net^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2029
+@@||tvpc.us^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2031
+siacoinfaucet.info##+js(acs, document.getElementById, adsBlocked)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57396
+parzibyte.me##+js(acs, jQuery, ai_adb)
+
+! https://github.com/NanoMeow/QuickReports/issues/2032
+livingstondaily.com##+js(aopr, _sp_)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/m7n8wj/not_working_on_bluemediafilescom/
+! https://github.com/AdguardTeam/AdguardFilters/issues/129409
+! https://github.com/uBlockOrigin/uAssets/issues/13085
+bluemediafiles.*##+js(aopr, open)
+bluemediafiles.*##+js(nano-sib, i--)
+bluemediafiles.*##+js(set, Time_Start, 0)
+@@||bluemediafiles.*^$ghide
+*$image,redirect-rule=32x32.png,domain=bluemediafiles.*
+/script/su.js$script,3p
+
+! https://github.com/NanoMeow/QuickReports/issues/2036
+nilopolisonline.com.br##+js(nostif, blocker)
+
+! https://github.com/NanoMeow/QuickReports/issues/2037
+mesquitaonline.com##+js(nostif, blocker)
+
+! https://github.com/NanoMeow/QuickReports/issues/2039
+@@||nohat.*^$script,domain=nohat.cc
+
+! https://www.reddit.com/r/uBlockOrigin/comments/didrrg/you_can_add_filters/
+tbib.org##+js(aopr, document.dispatchEvent)
+
+greensboro.com##body:style(overflow: auto !important)
+greensboro.com##.modal, .modal-backdrop
+
+! https://github.com/uBlockOrigin/uAssets/issues/6439
+@@||shirainime.com^$ghide
+
+! espn1420.com/listen-live anti adb
+||adservice.google.com/adsid/integrator.js$script,redirect=noopjs,domain=espn1420.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2054
+@@||dias-uteis.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6446
+fullxxxmovies.net##+js(aopr, open)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6448
+opopular.com.br#@#[id^="google_ads_iframe"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/10130
+socialgirls.im##+js(nostif, aswift_)
+@@||socialgirls.im^$ghide
+
+! https://github.com/gorhill/uBO-Extra/issues/123
+closermag.fr##+js(acs, document.head.appendChild, ='\x)
+@@||closermag.fr^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2067
+@@||watchcalifornicationonline.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6450
+! https://www.reddit.com/r/uBlockOrigin/comments/d91jgm/need_help_with_a_specific_anti_adblocker_message/
+@@||kupujemprodajem.com^$ghide
+kupujemprodajem.com##.bnrBox
+
+! https://www.reddit.com/r/uBlockOrigin/comments/djxvm8/i_need_a_filter_for_realclearpolitics/
+||evolok.net/acd/api/*/authorize/*adblock$xhr,3p
+
+! https://github.com/NanoMeow/QuickReports/issues/2076
+@@||gagetmatome.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2077
+@@||animetake*.*^$script,1p
+@@||animetake*.*^$ghide
+animetake27.*##.gads
+
+! https://github.com/NanoMeow/QuickReports/issues/2080
+@@||s0ft4pc.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2081
+lavozdegalicia.es##+js(aeld, load, adb)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/dk7weu/ptc_site/
+@@||neobux.com^$script,css,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/2173
+mamadu.pl##+js(nostif, , 1)
+
+! https://github.com/NanoMeow/QuickReports/issues/2085
+neoteo.com##+js(set, jQuery.adblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6459
+elitegoltv.org,extremotvplay.com,tarjetarojatv.org,pirlotvonline.org,rojadirectaonlinetv.com##+js(aopr, open)
+
+! https://forums.lanik.us/viewtopic.php?f=103&t=43734
+! https://github.com/uBlockOrigin/uAssets/issues/7455
+elmundo.es,expansion.com,marca.com##+js(aopr, adUnits)
+marca.com##.ad-item-bt-cont
+marca.com##.banner-sticky
+
+! https://github.com/NanoMeow/QuickReports/issues/2092
+yaoiotaku.com##+js(nostif, afs_ads, 2000)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43697
+||slacker.com^*/getspot/?spotid=$media,redirect=noopmp3-0.1s
+
+! https://github.com/NanoMeow/QuickReports/issues/2095
+||googlesyndication.com/pagead/js/adsbygoogle.js$xhr,redirect=noopjs,domain=gazetadopovo.com.br
+gazetadopovo.com.br##.ads-desktop
+
+! https://www.reddit.com/r/uBlockOrigin/comments/dlljyn/ublock_is_not_working_on_this_website/
+beinmatch.*##+js(nowoif)
+beinmatch.*##+js(rmnt, script, /?key.*open/, condition, key)
+
+! cirokun.blogspot.com anti adb
+cirokun.blogspot.com##+js(aeld, load, 2000)
+
+! anisubindo.video anti adb
+anisubindo.*##+js(aeld, load, nextFunction)
+
+! anibatch.me anti adb
+anibatch.me##+js(nostif, nextFunction, 2000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/82509
+mangalist.org##+js(nosiif, 0x)
+@@||cdnjs.cloudflare.com/ajax/libs/blockadblock/$script,3p
+@@||mangalist.org^$script,1p
+
+! nsfw camchickscaps. com ads
+camchickscaps.com##+js(aopw, ai_adb_overlay)
+||nvxcvyfedg.com^
+||okean-qoj.com^
+
+! romanialivewebcam .blogspot.com anti adb
+@@||romanialivewebcam.blogspot.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6468
+! https://github.com/NanoMeow/QuickReports/issues/4677
+techmuzz.com##+js(nosiif, adblocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6470
+@@||minecraftpocket-servers.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2120
+allusione.org##+js(aopr, b2a)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/dmjr41/photobucket_adblock_blocker_help/
+! https://github.com/NanoMeow/QuickReports/issues/2491
+photobucket.com##.swal2-container
+photobucket.com##body.swal2-shown > [aria-hidden="true"]:style(filter: none !important)
+photobucket.com##body:style(overflow: auto !important)
+@@||photobucket.com/resources/common/*$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/k3xfke/ublock_gets_detected_on_vvvvid/
+vvvvid.it##+js(json-prune, data.[].vast_url)
+! @@||imasdk.googleapis.com/js/core/$frame,domain=vvvvid.it
+! @@*ads.mperience.net/vast$xhr,domain=imasdk.googleapis.com
+! preroll;$xhr,domain=imasdk.googleapis.com,important
+! ||akamaized.net/Roll/$media,redirect=noopmp3-0.1s
+! *$media,redirect=noopmp3-0.1s,domain=vvvvid.it
+! @@||bs.serving-sys.com/*&gdpr_consent$xhr,domain=imasdk.googleapis.com
+
+! https://github.com/NanoMeow/QuickReports/issues/1674
+! https://github.com/uBlockOrigin/uAssets/issues/7086
+semawur.com##+js(aopr, open)
+ayobelajarbareng.com,semawur.com##+js(nano-sib, , *, 0)
+semawur.com###main > .text-center > a[href] > img
+||semawur.com/download$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/6486
+kumpulmanga.org##+js(set, showAds, true)
+
+! https://github.com/NanoMeow/QuickReports/issues/2146
+msguides.com##+js(aopw, ai_adb_overlay)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7646
+||cloudfront.net/assets.sidearmsports.com/*/bettor_detector.$script,3p
+*/assets.sidearmsports.com/$script,redirect-rule=noopjs
+@@/templates/dfp/dfp-component-template.html$xhr,1p
+@@/components/js/analytics.js|$xhr,1p
+###sidearm-adblock-modal
+12thman.com##.c-sticky-leaderboard
+bceagles.com##.s-sticky-dfp
+bceagles.com##.article-aside__sponsor
+bceagles.com##.article-aside__sponsor2
+12thman.com,acusports.com,atlantic10.com,auburntigers.com,baylorbears.com,bceagles.com,bgsufalcons.com,big12sports.com,bigten.org,bradleybraves.com,butlersports.com,cmumavericks.com,conferenceusa.com,cyclones.com,dartmouthsports.com,daytonflyers.com,dbupatriots.com,dbusports.com,denverpioneers.com,fduknights.com,fgcuathletics.com,fightinghawks.com,fightingillini.com,floridagators.com,friars.com,friscofighters.com,gamecocksonline.com,goarmywestpoint.com,gobison.com,goblueraiders.com,gobobcats.com,gocards.com,gocreighton.com,godeacs.com,goexplorers.com,goetbutigers.com,gofrogs.com,gogriffs.com,gogriz.com,golobos.com,gomarquette.com,gopack.com,gophersports.com,goprincetontigers.com,gopsusports.com,goracers.com,goshockers.com,goterriers.com,gotigersgo.com,gousfbulls.com,govandals.com,gowyo.com,goxavier.com,gozags.com,gozips.com,griffinathletics.com,guhoyas.com,gwusports.com,hailstate.com,hamptonpirates.com,hawaiiathletics.com,hokiesports.com,huskers.com,icgaels.com,iuhoosiers.com,jsugamecocksports.com,longbeachstate.com,loyolaramblers.com,lrtrojans.com,lsusports.net,morrisvillemustangs.com,msuspartans.com,muleriderathletics.com,mutigers.com,navysports.com,nevadawolfpack.com,niuhuskies.com,nkunorse.com,nuhuskies.com,nusports.com,okstate.com,olemisssports.com,omavs.com,ovcsports.com,owlsports.com,purduesports.com,redstormsports.com,richmondspiders.com,sfajacks.com,shupirates.com,siusalukis.com,smcgaels.com,smumustangs.com,soconsports.com,soonersports.com,themw.com,tulsahurricane.com,txst.com,txstatebobcats.com,ubbulls.com,ucfknights.com,ucirvinesports.com,uconnhuskies.com,uhcougars.com,uicflames.com,umterps.com,uncwsports.com,unipanthers.com,unlvrebels.com,uoflsports.com,usdtoreros.com,utahstateaggies.com,utepathletics.com,utrockets.com,uvmathletics.com,uwbadgers.com,villanova.com,wkusports.com,wmubroncos.com,woffordterriers.com,1pack1goal.com,bcuathletics.com,bubraves.com,goblackbears.com,golightsgo.com,gomcpanthers.com,goutsa.com,mercerbears.com,pirateblue.com,pirateblue.net,pirateblue.org,quinnipiacbobcats.com,towsontigers.com,tribeathletics.com,tribeclub.com,utepminermaniacs.com,utepminers.com,wkutickets.com,aopathletics.org,atlantichockeyonline.com,bigsouthnetwork.com,bigsouthsports.com,chawomenshockey.com,dbupatriots.org,drakerelays.org,ecac.org,ecacsports.com,emueagles.com,emugameday.com,gculopes.com,godrakebulldog.com,godrakebulldogs.com,godrakebulldogs.net,goeags.com,goislander.com,goislanders.com,gojacks.com,gomacsports.com,gseagles.com,hubison.com,iowaconference.com,ksuowls.com,lonestarconference.org,mascac.org,midwestconference.org,mountaineast.org,niu-pack.com,niuhuskies.com,nulakers.ca,oswegolakers.com,ovcdigitalnetwork.com,pacersports.com,rmacsports.org,rollrivers.com,samfordsports.com,uncpbraves.com,usfdons.com,wiacsports.com,alaskananooks.com,broncathleticfund.com,cameronaggies.com,columbiacougars.com,etownbluejays.com,gobadgers.ca,golancers.ca,gometrostate.com,gothunderbirds.ca,kentstatesports.com,lehighsports.com,lopers.com,lycoathletics.com,lycomingathletics.com,maraudersports.com,mauiinvitational.com,msumavericks.com,nauathletics.com,nueagles.com,nwusports.com,oceanbreezenyc.org,patriotathleticfund.com,pittband.com,principiaathletics.com,roadrunnersathletics.com,sidearmsocial.com,snhupenmen.com,stablerarena.com,stoutbluedevils.com,uwlathletics.com,yumacs.com,collegefootballplayoff.com,csurams.com,cubuffs.com,gobearcats.com,gohuskies.com,mgoblue.com,osubeavers.com,pittsburghpanthers.com,rolltide.com,texassports.com,thesundevils.com,uclabruins.com,wvuathletics.com,wvusports.com,arizonawildcats.com,calbears.com,cuse.com,georgiadogs.com,goducks.com,goheels.com,gostanford.com,insidekstatesports.com,insidekstatesports.info,insidekstatesports.net,insidekstatesports.org,k-stateathletics.com,k-statefootball.net,k-statefootball.org,k-statesports.com,k-statesports.net,k-statesports.org,k-statewomenshoops.com,k-statewomenshoops.net,k-statewomenshoops.org,kstateathletics.com,kstatefootball.net,kstatefootball.org,kstatesports.com,kstatewomenshoops.com,kstatewomenshoops.net,kstatewomenshoops.org,ksuathletics.com,ksusports.com,scarletknights.com,showdownforrelief.com,syracusecrunch.com,texastech.com,theacc.com,ukathletics.com,usctrojans.com,utahutes.com,utsports.com,wsucougars.com##+js(set, blockAdBlock, trueFunc)
+*$script,redirect-rule=noopjs,domain=acusports.com|atlantic10.com|big12sports.com|bigten.org|cmumavericks.com|conferenceusa.com|dartmouthsports.com|daytonflyers.com|dbupatriots.com|dbusports.com|fduknights.com|floridagators.com|friscofighters.com|gamecocksonline.com|gobobcats.com|gocreighton.com|goetbutigers.com|golobos.com|gophersports.com|gopsusports.com|goracers.com|goshockers.com|goterriers.com|gotigersgo.com|gousfbulls.com|govandals.com|gowyo.com|goxavier.com|gozags.com|gozips.com|griffinathletics.com|guhoyas.com|gwusports.com|hailstate.com|hamptonpirates.com|hawaiiathletics.com|hokiesports.com|huskers.com|icgaels.com|iuhoosiers.com|jsugamecocksports.com|longbeachstate.com|loyolaramblers.com|lrtrojans.com|lsusports.net|morrisvillemustangs.com|msuspartans.com|muleriderathletics.com|mutigers.com|navysports.com|nevadawolfpack.com|niuhuskies.com|nulakers.ca|nkunorse.com|nuhuskies.com|nusports.com|oceanbreezenyc.org|okstate.com|olemisssports.com|omavs.com|ovcsports.com|owlsports.com|purduesports.com|redstormsports.com|richmondspiders.com|sfajacks.com|shupirates.com|siusalukis.com|smcgaels.com|smumustangs.com|soconsports.com|soonersports.com|themw.com|tulsahurricane.com|txst.com|txstatebobcats.com|ubbulls.com|ucfknights.com|ucirvinesports.com|uconnhuskies.com|uhcougars.com|uicflames.com|umterps.com|uncwsports.com|unipanthers.com|unlvrebels.com|uoflsports.com|usdtoreros.com|utahstateaggies.com|utepathletics.com|utrockets.com|uvmathletics.com|uwbadgers.com|villanova.com|wkusports.com|wmubroncos.com|woffordterriers.com|1pack1goal.com|bcuathletics.com|bubraves.com|goblackbears.com|golightsgo.com|gomcpanthers.com|goutsa.com|mercerbears.com|pirateblue.com|pirateblue.net|pirateblue.org|quinnipiacbobcats.com|towsontigers.com|tribeathletics.com|tribeclub.com|utepminermaniacs.com|utepminers.com|wkutickets.com|aopathletics.org|atlantichockeyonline.com|bigsouthnetwork.com|bigsouthsports.com|chawomenshockey.com|dbupatriots.org|drakerelays.org|ecac.org|ecacsports.com|emueagles.com|emugameday.com|gculopes.com|godrakebulldog.com|godrakebulldogs.com|godrakebulldogs.net|goeags.com|goislander.com|goislanders.com|gojacks.com|gomacsports.com|gseagles.com|hubison.com|iowaconference.com|ksuowls.com|lonestarconference.org|mascac.org|midwestconference.org|mountaineast.org|niu-pack.com|niuhuskies.com|oswegolakers.com|ovcdigitalnetwork.com|pacersports.com|rmacsports.org|rollrivers.com|samfordsports.com|uncpbraves.com|usfdons.com|wiacsports.com|alaskananooks.com|broncathleticfund.com|cameronaggies.com|columbiacougars.com|etownbluejays.com|gobadgers.ca|golancers.ca|gometrostate.com|gothunderbirds.ca|kentstatesports.com|lehighsports.com|lopers.com|lycoathletics.com|lycomingathletics.com|maraudersports.com|mauiinvitational.com|msumavericks.com|nauathletics.com|nueagles.com|nwusports.com|patriotathleticfund.com|pittband.com|principiaathletics.com|roadrunnersathletics.com|sidearmsocial.com|snhupenmen.com|stablerarena.com|stoutbluedevils.com|uwlathletics.com|yumacs.com|collegefootballplayoff.com|csurams.com|cubuffs.com|gobearcats.com|gohuskies.com|mgoblue.com|osubeavers.com|pittsburghpanthers.com|rolltide.com|texassports.com|thesundevils.com|uclabruins.com|wvuathletics.com|wvusports.com|arizonawildcats.com|calbears.com|cuse.com|georgiadogs.com|goducks.com|goheels.com|insidekstatesports.com|insidekstatesports.info|insidekstatesports.net|insidekstatesports.org|k-stateathletics.com|k-statefootball.net|k-statefootball.org|k-statesports.com|k-statesports.net|k-statesports.org|k-statewomenshoops.com|k-statewomenshoops.net|k-statewomenshoops.org|kstateathletics.com|kstatefootball.net|kstatefootball.org|kstatesports.com|kstatewomenshoops.com|kstatewomenshoops.net|kstatewomenshoops.org|ksuathletics.com|ksusports.com|scarletknights.com|showdownforrelief.com|syracusecrunch.com|texastech.com|theacc.com|ukathletics.com|usctrojans.com|utahutes.com|utsports.com|wsucougars.com
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=acusports.com|atlantic10.com|big12sports.com|bigten.org|cmumavericks.com|conferenceusa.com|dartmouthsports.com|daytonflyers.com|dbupatriots.com|dbusports.com|fduknights.com|floridagators.com|friscofighters.com|gamecocksonline.com|gobobcats.com|gocreighton.com|goetbutigers.com|golobos.com|gophersports.com|gopsusports.com|goracers.com|goshockers.com|goterriers.com|gotigersgo.com|gousfbulls.com|govandals.com|gowyo.com|goxavier.com|gozags.com|gozips.com|griffinathletics.com|guhoyas.com|gwusports.com|hailstate.com|hamptonpirates.com|hawaiiathletics.com|hokiesports.com|huskers.com|icgaels.com|iuhoosiers.com|jsugamecocksports.com|longbeachstate.com|loyolaramblers.com|lrtrojans.com|lsusports.net|morrisvillemustangs.com|msuspartans.com|muleriderathletics.com|mutigers.com|navysports.com|nevadawolfpack.com|niuhuskies.com|nulakers.ca|nkunorse.com|nuhuskies.com|nusports.com|oceanbreezenyc.org|okstate.com|olemisssports.com|omavs.com|ovcsports.com|owlsports.com|purduesports.com|redstormsports.com|richmondspiders.com|sfajacks.com|shupirates.com|siusalukis.com|smcgaels.com|smumustangs.com|soconsports.com|soonersports.com|themw.com|tulsahurricane.com|txst.com|txstatebobcats.com|ubbulls.com|ucfknights.com|ucirvinesports.com|uconnhuskies.com|uhcougars.com|uicflames.com|umterps.com|uncwsports.com|unipanthers.com|unlvrebels.com|uoflsports.com|usdtoreros.com|utahstateaggies.com|utepathletics.com|utrockets.com|uvmathletics.com|uwbadgers.com|villanova.com|wkusports.com|wmubroncos.com|woffordterriers.com|1pack1goal.com|bcuathletics.com|bubraves.com|goblackbears.com|golightsgo.com|gomcpanthers.com|goutsa.com|mercerbears.com|pirateblue.com|pirateblue.net|pirateblue.org|quinnipiacbobcats.com|towsontigers.com|tribeathletics.com|tribeclub.com|utepminermaniacs.com|utepminers.com|wkutickets.com|aopathletics.org|atlantichockeyonline.com|bigsouthnetwork.com|bigsouthsports.com|chawomenshockey.com|dbupatriots.org|drakerelays.org|ecac.org|ecacsports.com|emueagles.com|emugameday.com|gculopes.com|godrakebulldog.com|godrakebulldogs.com|godrakebulldogs.net|goeags.com|goislander.com|goislanders.com|gojacks.com|gomacsports.com|gseagles.com|hubison.com|iowaconference.com|ksuowls.com|lonestarconference.org|mascac.org|midwestconference.org|mountaineast.org|niu-pack.com|niuhuskies.com|oswegolakers.com|ovcdigitalnetwork.com|pacersports.com|rmacsports.org|rollrivers.com|samfordsports.com|uncpbraves.com|usfdons.com|wiacsports.com|alaskananooks.com|broncathleticfund.com|cameronaggies.com|columbiacougars.com|etownbluejays.com|gobadgers.ca|golancers.ca|gometrostate.com|gothunderbirds.ca|kentstatesports.com|lehighsports.com|lopers.com|lycoathletics.com|lycomingathletics.com|maraudersports.com|mauiinvitational.com|msumavericks.com|nauathletics.com|nueagles.com|nwusports.com|patriotathleticfund.com|pittband.com|principiaathletics.com|roadrunnersathletics.com|sidearmsocial.com|snhupenmen.com|stablerarena.com|stoutbluedevils.com|uwlathletics.com|yumacs.com|collegefootballplayoff.com|csurams.com|cubuffs.com|gobearcats.com|gohuskies.com|mgoblue.com|osubeavers.com|pittsburghpanthers.com|rolltide.com|texassports.com|thesundevils.com|uclabruins.com|wvuathletics.com|wvusports.com|arizonawildcats.com|calbears.com|cuse.com|georgiadogs.com|goducks.com|goheels.com|gostanford.com|insidekstatesports.com|insidekstatesports.info|insidekstatesports.net|insidekstatesports.org|k-stateathletics.com|k-statefootball.net|k-statefootball.org|k-statesports.com|k-statesports.net|k-statesports.org|k-statewomenshoops.com|k-statewomenshoops.net|k-statewomenshoops.org|kstateathletics.com|kstatefootball.net|kstatefootball.org|kstatesports.com|kstatewomenshoops.com|kstatewomenshoops.net|kstatewomenshoops.org|ksuathletics.com|ksusports.com|scarletknights.com|showdownforrelief.com|syracusecrunch.com|texastech.com|theacc.com|ukathletics.com|usctrojans.com|utahutes.com|utsports.com|wsucougars.com
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js:5,domain=12thman.com|auburntigers.com|baylorbears.com|bceagles.com|bgsufalcons.com|bradleybraves.com|butlersports.com|cyclones.com|denverpioneers.com|fgcuathletics.com|fightinghawks.com|fightingillini.com|friars.com|goarmywestpoint.com|gobison.com|goblueraiders.com|gocards.com|godeacs.com|goexplorers.com|gofrogs.com|gogriffs.com|gogriz.com|gomarquette.com|gopack.com|goprincetontigers.com
+||sidearm-syndication.s3.amazonaws.com^$script,redirect=noopjs,3p
+
+! https://github.com/NanoMeow/QuickReports/issues/2155
+@@||brid.tv/player/build/plugins/adunit.js$script,domain=pluralist.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4582
+vupload.com##+js(nowebrtc)
+vupload.com##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6493
+@@||savetolink.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2158
+@@||blogshinobijawi.blogspot.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2159
+karanapk.com##+js(set, google_jobrunner, true)
+
+! https://github.com/NanoMeow/QuickReports/issues/2165
+*$frame,3p,domain=ironysub.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/5940
+camhub.world##+js(nostif, visibility, 2000)
+||camhub.world/player/player_ads.html$frame,1p,redirect=noopframe
+! camhub.cc anti-adb/popunder
+camhub.cc##.table
+camhub.cc##+js(nostif, innerText, 2000)
+camhub.cc##+js(set, flashvars.popunder_url, '')
+! https://github.com/uBlockOrigin/uAssets/issues/10011
+camhub.*##.popunder-opener
+
+! averio.de anti adb
+@@||averio.de^$ghide
+
+! moneyhouse.ch anti adb
+moneyhouse.ch##+js(nostif, bait)
+
+! https://github.com/NanoMeow/QuickReports/issues/2175
+@@||itavisen.no^$ghide
+
+! megalink.pro anti adb
+megalink.*##+js(aopr, app_vars.force_disable_adblock)
+megalink.*##+js(set, blurred, false)
+megalink.*##+js(aeld, click, popunder)
+megalink.*##[href^="https://mob1ledev1ces.com/r/"]
+megalink.*###__bgd_link
+||i.imgur.com^$domain=megalink.*
+
+! theshedend.com anti adb
+theshedend.com##+js(rmnt, script, adblock)
+
+! https://github.com/NanoMeow/QuickReports/issues/2181
+sfile.mobi##+js(nano-sib)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6504
+softwaresblue.com##+js(acs, $, setTimeout)
+
+! https://github.com/NanoMeow/QuickReports/issues/2185
+mrpiracy.*##+js(acs, document.getElementById, deleted)
+mrpiracy.*##+js(aopr, LieDetector)
+mrpiracy.*##+js(nowoif)
+||mrpiracy.*/images/*.gif$image
+
+! canalplus.com anti adb + ads
+! https://github.com/uBlockOrigin/uAssets/issues/7575
+@@||canalplus-bo.net/web/canal/*$xhr,domain=canalplus.com
+@@||fwmrm.net/ad/*$xhr,domain=canalplus.com
+*$media,redirect=noopmp3-0.1s,domain=canalplus.com
+@@||bran-media.canalplus.pro^$media,domain=canalplus.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6508
+||vidads.gr^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/2188
+kino-zeit.de##+js(acs, getCookie)
+
+! https://github.com/NanoMeow/QuickReports/issues/2189
+! https://www.reddit.com/r/uBlockOrigin/comments/10lifv2/
+topstreams.*##+js(nowebrtc)
+topstreams.*##+js(acs, $, ads)
+topstreams.*##+js(acs, setTimeout, admc)
+topstreams.*##^script:has-text(admc)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/dq53hc/anti_adblock_on_jotapov/
+jotapov.com##+js(acs, jQuery, adblocker)
+jotapov.com##.jconfirm
+
+! https://github.com/uBlockOrigin/uAssets/issues/6511
+oload.*##+js(aopr, AaDetector)
+oload.*,streamhoe.*##+js(aopr, open)
+oload.*,streamhoe.*##+js(aopr, _pop)
+oload.*##+js(aopr, decodeURI)
+##[href^="https://klsdee.com/"]
+
+! https://github.com/NanoMeow/QuickReports/issues/2190
+@@||animex.*^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2197
+@@||moonline.*^$ghide
+moonline.*###clickfakeplayer
+
+! https://github.com/NanoMeow/QuickReports/issues/3060
+shorten.*##+js(aopr, AaDetector)
+shorten.*##+js(aopr, app_vars.force_disable_adblock)
+shorten.*##+js(aopr, parcelRequire)
+shorten.*##+js(nowoif)
+shorten.*###chromepop
+||shorten.*/sw.js$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/dr1eoe/how_do_i_block_this_antiadblock_ligainsiderde/
+ligainsider.de##+js(acs, $, MutationObserver)
+@@||ligainsider.de^$ghide
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/417
+drrtyr.mx##+js(aeld,, adb)
+dirrty.remix.es##.ad_target
+dirrty.remix.es##.adsbygoogle
+dirrty.remix.es##.AdZone300
+
+! https://github.com/NanoMeow/QuickReports/issues/2205
+@@||globaltvapp.net^$ghide
+
+! indaily.com.au anti adb
+indaily.com.au##.advertisement
+
+! https://www.reddit.com/r/uBlockOrigin/comments/drmhuh/how_to_remove_ads_from_bitcointalkorg/
+bitcointalk.org##:xpath(//span[contains(text(),"Advert")]/../..)
+bitcointalk.org##td:has(> span[class]:has-text(Advert))
+bitcointalk.org##.fpcontainer
+
+! https://github.com/NanoMeow/QuickReports/issues/2226
+fluentu.com##+js(aopr, __eiPb)
+
+! https://forums.lanik.us/viewtopic.php?f=103&p=150935#p150933
+forocoches.com##+js(aopr, pbjsChunk)
+forocoches.com##table.cajasnews > tbody > tr > td > table > tbody > tr:has(> td > a[rel=nofollow]:has-text(Promos))
+forocoches.com##table.cajasprin > tbody > tr > td:has(iframe[src^="//cdn.forocoches.com/lwa/forocoches/fc_promo.html"])
+forocoches.com##table.tborder#threadslist > tbody[id^="threadbits_forum_"] > tr:has(> [id^="td_threadtitle_"][style^="background-color: #"].alt1 > .smallfont > span)
+forocoches.com##table.tborder[id^="table"] > tbody:has(> tr > .alt1 [href][target]):has(strong)
+forocoches.com##table.tborder > tbody:has(> tr > .alt1 [href^="/link.php?url=https%3A%2F%2Fwww.pccomponentes.com"][target])
+forocoches.com##table.tborder > tbody:has(> tr > .alt1 > table > tbody > tr > td > a):has(strong):has(span > font > strong)
+forocoches.com##table.tborder > tbody:has(> tr > .alt1 > table > tbody > tr > td > table > tbody > tr > td > strong > a[target][href])
+forocoches.com##table.tborder[id^="table"] > tbody > tr > .alt1:has(> table[id^="table"] > tbody > tr > td > div[style] > a[style][href^="/foro/"] > strong)
+forocoches.com##table.tborder[id^="table"] > tbody:has(> tr > .alt1 > table[id^="table"] > tbody > tr > td > [href] + span > br + strong)
+forocoches.com###vbnotices
+m.forocoches.com##div.title-forum-display-destacado
+m.forocoches.com##.page > div > ul > li[style^="word-wrap:break-word; word-break:break-word; background-color: #"]
+m.forocoches.com##.page > div > ul[style]:has(> li > div[style] > a[style][href^="/foro/"] > strong)
+m.forocoches.com##ul > li:has([id*="adslot"])
+||cdn.forocoches.com/lwa/forocoches/*_promo.html$frame,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/2231
+@@||naruto-arena.net^$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/2233
+investmentwatchblog.com##+js(acs, Math, '0x)
+investmentwatchblog.com##+js(aopw, ABD)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/q3q7tf/ad_blocker_detected/
+! https://github.com/uBlockOrigin/uAssets/issues/19641
+animeshouse.net##+js(aopr, thumbad)
+@@||animeshouse.net^$ghide
+@@||animeshouse.net^$script,1p
+*$script,redirect-rule=noopjs,domain=animeshouse.net|olhonaviagem.com
+@@||edifier-ah.shop/*.js|$script,domain=animeshouse.net|feralhosting.com
+@@/*.js|$script,3p,domain=reign-ah.online|corsair-ah.shop
+olhonaviagem.com##div[style="margin-bottom: 10px; justify-content: center;"]
+
+! https://github.com/NanoMeow/QuickReports/issues/2238
+! https://github.com/uBlockOrigin/uAssets/issues/11371
+fangraphs.com##+js(acs, $, Math.random)
+fangraphs.com##+js(set, ezstandalone.enabled, true)
+fangraphs.com##.catchall728
+fangraphs.com##.fg-ra-desktop
+fangraphs.com##.fg-ra-mobile
+
+! https://github.com/uBlockOrigin/uAssets/issues/6527
+phoneswiki.com##+js(set, jQuery.adblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6528
+myadslink.com##+js(aeld, load, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6531
+filmonerileri.org##+js(acs, document.querySelector, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6533
+@@||kisshentai.tv^$ghide
+kisshentai.tv##.adv-container
+
+! 943thex.com live player anti adb
+||adservice.google.com/adsid/integrator.js$script,redirect=noopjs,domain=943thex.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2254
+@@||vidcrt.net^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6536
+@@||sabervivirtv.com^$ghide
+sabervivirtv.com##.ad-item
+sabervivirtv.com##.ad-sidebar
+
+! https://github.com/NanoMeow/QuickReports/issues/2224
+aol.com##.maas-item:has-text(our Partners)
+
+! https://github.com/NanoMeow/QuickReports/issues/2261
+@@||debridup.com^$script,xhr,1p
+
+! homad
+! https://github.com/uBlockOrigin/uAssets/issues/6541
+! https://github.com/uBlockOrigin/uAssets/issues/15698
+! https://github.com/uBlockOrigin/uAssets/issues/19453
+4players.de,buffed.de,gamesaktuell.de,gamezone.de,pcgames.de,videogameszone.de##+js(set, CustomEvent, noopFunc)
+golem.de,player.pcgameshardware.de##+js(no-xhr-if, damoh)
+vip.de,rtl.de,fitforfun.de,desired.de,kino.de,cinema.de##+js(no-xhr-if, svonm)
+desired.de##+js(ra, data-ivad-preroll-adtag, video, stay)
+||computer-bild.de/_static-assets/homad/homad.js
+||auto-bild.de/_static-assets/homad/homad.js
+||stern.de/__assets/homad
+spiegel.de##^script:has-text(homad)
+welt.de,~dutyfarm.welt.de##+js(json-prune, vastUrl)
+welt.de,~dutyfarm.welt.de##div[id][style^="z-index: 2"][style*="margin"][style*="auto"][style*="top"][style$="px; position: absolute;"]:remove()
+giga.de,kino.de,spieletipps.de##+js(rpnt, script, /\"homad\"\,/)
+t-online.de##+js(rpnt, script, /\"homad\":\{\"state\":\"enabled\"\}/, "homad":{"state":"disabled"})
+!#if !cap_html_filtering
+spiegel.de##+js(rmnt, script, homad)
+!#endif
+plus.rtl.de##+js(json-prune, adReinsertion)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7508#issuecomment-659267224
+||damoh.gmx.*/*$media,redirect=noop-0.1s.mp3,1p
+||united-infos.net^$domain=gmx.*|web.de
+! https://github.com/uBlockOrigin/uAssets/issues/6541#issuecomment-559272733
+focus.de##+js(json-prune, enabled, force_disabled)
+gmx.*,web.de##+js(aeld, timeupdate)
+*$media,redirect-rule=noop-0.1s.mp3,3p,domain=gmx.*|web.de
+! https://github.com/uBlockOrigin/uAssets/issues/7508#issuecomment-665541485
+!#if env_firefox
+@@||akamaiedge.net^$media,domain=gmx.*|web.de
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/6545
+tv2.no##+js(json-prune, enabled, testhide)
+
+! https://forums.lanik.us/viewtopic.php?p=151059#p151059
+@@||player.clevercast.com/players/video-js/video-js-plugins/videojs.ads.min.js$script,1p
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43843
+elamigosedition.com##+js(aost, document.addEventListener, blocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6548
+camcam.cc##+js(no-fetch-if, adsbygoogle)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6549
+ihow.info##+js(nostif, getComputedStyle, 250)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6552
+@@||eldia.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6560
+adshrink.it##+js(aeld, load, nextFunction)
+adshrink.it##+js(aopr, open)
+@@||googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=adshrink.it
+@@||googlesyndication.com/pagead/js/*/show_ads_impl$script,domain=adshrink.it
+||googlesyndication.com/pagead/js/adsbygoogle.js$xhr,redirect-rule=noopjs,domain=adshrink.it
+@@||shrink-service.it^$frame,domain=adshrink.it
+@@||cdn.trackjs.com/agent/v*/latest/t.js$script,domain=adshrink.it
+||shrink-service.it^$csp=frame-src
+shrink-service.it##+js(aopr, open)
+adshrink.it##.active.dimmer.ui:has-text(/Wait|Skip/i)
+||offer.alibaba.com^$frame,domain=adshrink.it
+
+! https://www.reddit.com/r/uBlockOrigin/comments/dvubaa/failed_to_load_content_please_disable_adblocker/
+vipstand.*##+js(nowoif, //)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2824
+turkanime.co##+js(aeld, , pop)
+turkanime.*##+js(nostif, blocked)
+*$script,redirect-rule=noopjs,domain=turkanime.*
+@@||turkanime.*^$ghide
+@@||turkanime.*/ad/$xhr,1p
+turkanime.*##div.col-xs-12:has-text(MMPORG OYUNLAR)
+turkanime.*###sponsored
+turkanime.*##.panel-title:has-text(REKLAM)
+turkanime.*##.AltkisimMenu
+video.sibnet.ru###vjs-overlayclip-box
+video.sibnet.ru##.vjs-overlayclip-box-close
+
+! allcalidad.net anti adb and popup
+allcalidad.*##+js(acs, doOnce)
+allcalidad.*##+js(aeld, , 0x)
+allcalidad.*##+js(aopw, smrtSB)
+allcalidad.*##+js(set, btoa, null)
+allcalidad.*##+js(ra, href, #clickfakeplayer)
+allcalidad.*##.table-hover.table > tbody > tr:has-text(Descargar Premium)
+*$script,3p,denyallow=cloudflare.com|cloudfront.net|facebook.net|fbcdn.net|googleapis.com|gstatic.com|heyoya.com,domain=allcalidad.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/6561
+*.gif$image,domain=stream1688.com
+*$media,domain=stream1688.com,redirect=noopmp3-0.1s
+
+! https://www.reddit.com/r/uBlockOrigin/comments/dmcm6b/how_to_disable_ublock_strict_blocking_popup/f4zfjji/
+! https://github.com/uBlockOrigin/uAssets/issues/17195
+123anime.*,123animes.*##+js(aopr, glxopen)
+123anime.*##+js(acs, setTimeout, popi)
+123anime.*##+js(nowoif)
+! 123animes.mobi/ru popup
+123animes.*##+js(aopr, AaDetector)
+123animes.*##div[id][style^="position: fixed; inset: 0px; z-index: 2147483647;"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/6562
+upfile.us##+js(nano-sib)
+
+! https://github.com/NanoMeow/QuickReports/issues/2283
+metro.us##+js(set, Adv_ab, false)
+games.metro.us##+js(rpnt, script, "isAdBlockerEnabled":true, "isAdBlockerEnabled":false)
+
+! oltnertagblatt .ch anti adb
+@@||nwch.az-cdn.ch^$script,domain=oltnertagblatt.ch
+
+! https://github.com/uBlockOrigin/uAssets/issues/6567
+*$media,domain=series-d.com,redirect=noopmp3-0.1s
+||imgur.com/*.gif$image,domain=series-d.com
+.gif$image,domain=series-d.com
+@@||cdn.jsdelivr.net/npm/*/fuckadblock$script,xhr,domain=series-d.com
+@@||googleusercontent.com^$media,domain=series-d.com
+@@||googlevideo.com/videoplayback$media,domain=series-d.com
+series-d.com##.mb-3.text-center.container-fluid
+@@||series-d.com^$ghide
+
+! enxf.net anti adb
+enxf.net##+js(acs, $, adblock)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/dwnkgn/listenonrepeatcom_has_an_antiadblock/
+listenonrepeat.com##+js(acs, googlefc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6571
+!#if !env_mobile
+news18.com##+js(aeld, scroll, getElementById)
+!#endif
+!#if env_mobile
+news18.com##+js(aeld, scroll, Mgid)
+news18.com##+js(aopr, getAdsScripts)
+news18.com##.ad-container
+news18.com##[class^="adv_placeholder_"]
+!#endif
+
+! https://github.com/NanoMeow/QuickReports/issues/2290
+spinbot.com##+js(aopr, angular)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6572
+xiaomi-miui.gr##+js(acs, $, detected)
+
+! https://github.com/NanoMeow/QuickReports/issues/2134
+@@||calciomercato.com^$ghide
+calciomercato.com##.adv
+
+! https://github.com/uBlockOrigin/uAssets/issues/8347
+! https://www.reddit.com/r/uBlockOrigin/comments/zeasej/
+forum.release-apk.com##+js(ra, style, ins, complete)
+forum.release-apk.com###page-header:has(+ .phpbb-ads-center:matches-css(height: 280px)):style(margin-bottom: -265px !important)
+forum.release-apk.com##.phpbb-ads-center:style(pointer-events: none !important)
+!forum.release-apk.com##^script:has-text(/\'load\'|document.onload/)
+forum.release-apk.com##+js(aeld, load, onload)
+forum.release-apk.com##+js(nobab)
+@@||forum.release-apk.com^$ghide
+@@||pagead2.googlesyndication.com/pagead/$script,domain=forum.release-apk.com
+*$frame,domain=forum.release-apk.com,redirect-rule=noopframe
+@@||googleads.g.doubleclick.net/pagead/*forum.release-apk.com$frame,domain=forum.release-apk.com
+forum.release-apk.com##ins:style(opacity: 0 !important; pointer-events: none !important)
+*$xhr,redirect-rule=nooptext,domain=forum.release-apk.com
+forum.release-apk.com##+js(acs, eval, replace)
+
+! https://github.com/NanoMeow/QuickReports/issues/2294
+adonisfansub.com##+js(nobab)
+
+! https://github.com/NanoMeow/QuickReports/issues/2295
+agefi.fr##+js(nostif, {r(), 0)
+
+! https://forums.lanik.us/viewtopic.php?p=151106#p151085
+horriblesubs.info##[class*="sponsor"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/6577
+doomovie-hd.com##+js(json-prune, adParam)
+||doomovie-hd.com/assets/img/banner-new/*$image,1p
+*.gif$domain=doomovie-hd.com,image
+doomovie-hd.com##[src^="data:image/gif;base64,"]
+
+! https://forums.lanik.us/viewtopic.php?f=91&t=43802
+ladepeche.fr##+js(aopr, localStorage)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43872
+projectfreetv.*##+js(aeld, , _0x)
+##.overlay-advertising-new
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/63019
+*$xhr,redirect-rule=nooptext,domain=freevocabulary.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2305
+cinemaxxl.de##+js(set, adblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6584
+anime-i.com##+js(nostif, nextFunction, 2000)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43877
+||google.com/adsid/integrator.js$script,redirect=noopjs,domain=961thebreeze.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6588
+cartoonth12.com##.header-ad
+*.gif$domain=cartoonth12.com,image
+@@||jwpcdn.com/player/$script,domain=player.cartoonth12.com
+*.mp4$media,redirect=noopmp3-0.1s,domain=cartoonth12.com
+@@||cartoonth12.com^$ghide
+cartoonth12.com##.dessert-frame
+cartoonth12.com##[href="https://www.sagame350.bet/"]
+cartoonth12.com##.video-player.responsive-player
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/424
+upzone.cc##+js(acs, document.getElementById, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6589
+##.header-menu-bottom-ads
+##.rkads
+###bt-ads
+*.gif$domain=doo4k.com,image
+*$media,domain=doo4k.com,redirect=noopmp3-0.1s
+@@||cdn.ekcdn.me/video.mp4$media,domain=doo4k.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2309
+@@||lutontoday.co.uk^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2310
+@@||kikiers.com^$ghide
+@@||kikiers.com^$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/2453
+! https://github.com/olegwukr/polish-privacy-filters/issues/67
+@@||cdntvn.pl^$script,domain=player.pl
+@@||player.pl^$cname
+@@||player.pl^$ehide
+/ad.xml$xhr,badfilter
+! https://github.com/uBlockOrigin/uAssets/issues/15609
+player.pl#@#+js(json-prune, movie.advertising.ad_server)
+! https://github.com/uBlockOrigin/uAssets/issues/17801
+$xhr,redirect-rule=noopjs,domain=player.pl
+player.pl##div.adsbygoogle.prebid.adocean.ado.ad.ads.advert.banner.reklama.linkSponsorowany.adsense.advertisments.reklama-top.adv_container:style(display: block !important)
+*$media,domain=player.pl,redirect=noopmp3-0.1s
+@@||tvn.hit.gemius.pl^$xhr,domain=player.pl
+
+! https://github.com/NanoMeow/QuickReports/issues/2318
+@@||jbzd.com.pl^$ghide
+
+! irisbuddies.ml (dead) anti adb
+||rawgit.com/fahimraza/FK/master/ad-unblocker.js^$script
+||cdn.jsdelivr.net/gh/Akshat-h/propeller/btagantiadb.js^$script
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43891#p151254
+news-herald.com##+js(aopr, Connext)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6600
+*.gif$domain=037-hd.com,image
+*$media,domain=037-hd.com,redirect=noopmp3-0.1s
+
+! https://github.com/uBlockOrigin/uAssets/issues/6602
+*$script,3p,denyallow=bootstrapcdn.com|disqus.com|jsdelivr.net|jwpcdn.com|fastly.net|fastlylb.net|jquery.com|hwcdn.net|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com,domain=movieshub.*
+
+! https://github.com/NanoMeow/QuickReports/issues/2321
+@@||kwik.*^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2325
+@@||sadeempc.com^$ghide
+sadeempc.com##[class^="buttonPress"]
+
+! https://github.com/NanoMeow/QuickReports/issues/2330
+@@||game-kentang.blogspot.com^$ghide
+game-kentang.blogspot.com##+js(nano-sib)
+
+! https://github.com/NanoMeow/QuickReports/issues/2338
+shortgoo.blogspot.com##+js(set, showAds, true)
+shortgoo.blogspot.com##+js(nano-sib)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6612
+@@||downloader.la^$ghide
+
+! ytmp3. plus ad and popup
+ytmp3.*##+js(nowoif)
+ytmp3.cc#@#+js(nowoif)
+ytmp3.cc##+js(nowoif, !/ytmp3|dropbox/)
+||ytmp3.*/ad/$frame
+! https://github.com/uBlockOrigin/uAssets/issues/11212
+||ytmp3.cc/js/ad*$script,1p
+
+! cariskuy.com anti adb
+cariskuy.com##+js(nostif, nextFunction, 450)
+
+||domnovrek.com^$3p
+
+! blackavelic.com anti adb
+blackavelic.com##+js(aeld, load, 2000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6614
+series-d.com##+js(nano-sib, curAd)
+series-d.com##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/2349
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=felanovia.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2350
+thelanb.com##+js(aeld, load, undefined)
+
+! https://github.com/NanoMeow/QuickReports/issues/2355
+planetaminecraft.com##+js(set, ab, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6620
+@@||aasarchitecture.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6618
+softwaredescargas.com##+js(aeld, DOMContentLoaded, scriptwz_url)
+softwaredescargas.com##+js(aopr, scriptwz_url)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/e0uvbc/justlightnovelscom_stuck_on_browser_checking/
+@@||justlightnovels.com^$ghide
+justlightnovels.com##.adsbyvli
+jnovels.com##+js(aopw, KillAdBlock)
+! https://charexempire.com/DWsil focus detection and popup
+codesnse.com###paras-devgenerate ~ *
+codesnse.com##[href^="https://play.google.com/"]
+cybertechng.com##+js(set, blurred, false)
+cybertechng.com##+js(set, go_popup, {})
+
+! https://github.com/NanoMeow/QuickReports/issues/2357
+cracking-dz.com##+js(aeld, load, 0x)
+
+! https://github.com/NanoMeow/QuickReports/issues/2363
+voipreview.org##+js(set, adblockEnabled, false)
+
+! https://github.com/NanoMeow/QuickReports/issues/2367
+@@||safelink-jozz.blogspot.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6621
+yusepjaelani.blogspot.com###showadblock, .modal-backdrop
+yusepjaelani.blogspot.com##body:style(overflow: auto !important)
+|about:$popup,domain=yusepjaelani.blogspot.com
+||yusepjaelani.blogspot.com^$csp=sandbox allow-forms allow-same-origin allow-scripts allow-modals allow-orientation-lock allow-pointer-lock allow-presentation allow-top-navigation
+yusepjaelani.blogspot.com##+js(nostif, Debug)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6624
+mega1080p.*##+js(aeld, DOMContentLoaded, btoa)
+mega1080p.*##.bnr
+@@||easyreaders.site^$ghide
+
+! https://www.reddit.com/r/uBlockOrigin/comments/dyhwim/how_to_block_ads_in_imdb_tv/
+! https://www.reddit.com/r/uBlockOrigin/comments/e2nc95/imdb_issue/
+! https://www.reddit.com/r/uBlockOrigin/comments/ox0gco/any_way_to_block_ads_on_imdb_tv/
+! /interstitial/*$xhr,redirect=noop-1s.mp4,domain=imdb.com
+||imdb.com/tr/*pageHit$xhr,redirect=noopjs,domain=imdb.com
+||fls-na.amazon.com/$xhr,redirect=noopjs,domain=imdb.com
+*$media,redirect=noopmp3-0.1s,domain=imdb.com,3p
+@@||media-imdb.com^$media,domain=imdb.com
+
+! https://forums.lanik.us/viewtopic.php?f=98&t=43932&p=151462#p151449
+presentation-ppt.com##+js(aeld, load, nextFunction)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6634
+*$frame,xhr,script,3p,domain=bolly4umovies.*
+
+! https://forums.lanik.us/viewtopic.php?f=91&t=43936
+femina.ch##+js(aopr, _sp_.mms.startMsg)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/mxeds6/adblocker_detectet_only_first_post_available/
+photovoltaikforum.com##+js(acs, $, offsetHeight)
+photovoltaikforum.com##.wcfAdLocation:upward(li)
+
+! fix mangahere.onl ads & anti adb
+mangahere.onl##+js(aopr, AdservingModule)
+mangahere.onl##+js(aopr, loadRunative)
+mangahere.onl##.container.ads-container
+||mangahere.onl/adsbygoogle.js$script,redirect=noopjs,1p
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/430
+soy502.com##+js(acs, document.getElementById, length)
+
+! https://github.com/NanoMeow/QuickReports/issues/2386
+*$script,3p,denyallow=101placeonline.com|bootstrapcdn.com|cloudflare.com|cloudflare.net|disqus.com|disquscdn.com|fastly.net|fastlylb.net|google.com|googleapis.com|gstatic.com|hcaptcha.com|hwcdn.net|jquery.com|jsdelivr.net|jwpcdn.com|recaptcha.net|sportscentral.io,domain=mlbstreams.to|nbastreams.to|nflbite.com|nflstreams.to|nhlstreams.to|soccerstreams.net
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pebw5s/not_able_to_watch_videos/
+hentaihaven.xxx##+js(noeval-if, debugger)
+*$xhr,redirect-rule=nooptext,domain=hentaihaven.xxx
+hentaihaven.xxx##+js(nowoif)
+@@||hentaihaven.xxx^$script,1p
+@@||hentaihaven.xxx^$ghide
+||thedevs.cyou/hh/script-manager.js
+! hentaihaven .com/icu ads, popup
+||hentaihaven.icu/wp-content/plugins/sscript-manager/
+||mult-imgs.cyou/images/*.gif$image,domain=hentaihaven.xxx
+hentaihaven.*##.main-sidebar[role="complementary"]
+! interstitial page
+hentaihaven.xxx##+js(aopw, Script_Manager)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/43599#issuecomment-559967206
+openloadmovies.*##+js(aopr, AaDetector)
+streamango.*###ad_buts
+
+! https://www.reddit.com/r/uBlockOrigin/comments/e3wccl/naughtymachinima_ads_before_video_not_blocked/
+naughtymachinima.com##+js(aopr, loadTool)
+naughtymachinima.com##+js(nowoif)
+||naughtymachinima.com/*banner
+||naughtymachinima.com/*preroll
+
+! https://github.com/NanoMeow/QuickReports/issues/2399
+@@||bonjourdefrance.com^$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/2400
+@@||remix.es^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/9907
+arabseed.*##+js(aeld, , _0x)
+||arabseed.*/sw.js$script,1p
+arabseed.*##.ads-aa
+
+! https://github.com/uBlockOrigin/uAssets/issues/6640
+! https://github.com/brave/brave-browser/issues/8453
+lapresse.ca##+js(set, noBlocker, true)
+lapresse.ca##+js(aopw, _sp_)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6641
+||nxbrew.com/sw.js$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/2413
+@@||tele-gratuit.net/analytics/adiframe.js$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/2414
+sportsnaut.com###dsk-banner-ad-a
+sportsnaut.com###dsk-box-ad-c
+
+! https://github.com/NanoMeow/QuickReports/issues/2418
+@@||seriesytv.tv^$ghide
+seriesytv.tv##+js(nowebrtc)
+||seriesytv.tv/*.html$frame,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6644
+doodle.com##+js(aopr, _sp_._networkListenerData)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6645
+seeitworks.com##+js(acs, document.getElementById, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6647
+televisiongratishd.com##+js(acs, adBlockDetected)
+televisiongratishd.com###ventana-flotante
+
+! https://github.com/uBlockOrigin/uAssets/issues/2180
+@@||hacknetfl1x.net^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/1699
+||googlesyndication.com/pagead/js/adsbygoogle.js$xhr,domain=jmusic.me,redirect-rule=noopjs
+##.mdp-deblocker-wrapper
+
+! https://github.com/uBlockOrigin/uAssets/issues/6652
+@@||classic-retro-games.com^$ghide
+classic-retro-games.com##ins.adsbygoogle, #ad, .game-ad
+/bab.min.js$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/2432
+kolyoom.com##+js(nobab)
+kolyoom.com##+js(set, adsbygoogle, null)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/432
+! https://github.com/AdguardTeam/AdguardFilters/issues/67191
+bde4.*#@#a[href*=".yabo816."]
+bde4.*##a[href*=".yabo816."]:remove()
+bde4.*##+js(nofab)
+bde4.*##+js(nano-sib)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43979&p=151701#p151701
+dailysport.*##+js(acs, String.fromCharCode, atob)
+dailysport.*,eplsite.uk##+js(aopr, AaDetector)
+dailysport.*,eplsite.uk##+js(aopr, open)
+eplsite.uk##[href="https://www.eplsite.uk/vm.html"]
+*$script,3p,denyallow=bootstrapcdn.com|cloudflare.com|cloudflare.net|googleapis.com|hwcdn.net|jsdelivr.net,domain=dailysport.*
+
+! https://github.com/NanoMeow/QuickReports/issues/2441
+@@||lesmoutonsrebelles.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6656
+@@||vietgamemod.net^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/148#issuecomment-562936063
+##.amp-ad-inner
+###placeAds
+@@||cdn.ampproject.org/*/amp-ad-*.js$script,domain=aajtak.intoday.in
+@@||taboola.com/*indiatoday$domain=ampproject.net
+@@||trc.taboola.com/indiatoday
+
+! dirtyship .com tabunder
+dirtyship.com##+js(aopr, dataPopUnder)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/e7v537/fluid_player_doesnt_work_when_ublock_is_on/
+porn00.org##+js(nowoif)
+porn00.org##.table
+porn00.org##div.headline[style]
+||ang-content.com/*.mp4$media,redirect=noopmp3-0.1s,domain=porn00.org
+
+! https://github.com/uBlockOrigin/uAssets/pull/10286
+@@||sonyliv.com^$ghide
+@@||sonyliv.com^$xhr,1p
+sonyliv.com##+js(json-prune, adProvider)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6662
+@@||realmofdarkness.net^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2465
+@@||magyarhang.org^$shide
+||magyarhang.org/*.gif$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/6675
+savevideo.tube##+js(aopr, AaDetector)
+savevideo.tube##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/2474
+files.cx##+js(aopr, AaDetector)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43994
+devoloperxda.blogspot.com##+js(aeld, load, onload)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=43996&p=151781#p151781
+celebmix.com##+js(set, jQuery.adblock, false)
+
+! https://github.com/NanoMeow/QuickReports/issues/2477
+vttpi.com##+js(acs, document.createElement, adblock)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/e9d8dz/adblockdetector_on_rakutentv/
+! https://github.com/uBlockOrigin/uAssets/issues/15819
+@@||rakuten.tv^$ghide
+@@||cdnjs.cloudflare.com/ajax/libs/rollbar.js/$script,domain=rakuten.tv
+@@||search.spotxchange.com/vast/$xhr,domain=rakuten.tv
+rakuten.tv##+js(no-xhr-if, /youboranqs01|spotx|springserve/)
+
+! https://github.com/NanoMeow/QuickReports/issues/2483
+@@||projectkorra.com/*/siropu/*/ads$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6681
+doofree88.com##+js(nano-sib, js-btn-skip, 1000)
+||doofree88.com/storage/go/banner*.gif$image,1p
+doofree88.com##.go-hard
+doofree88.com##.placeholder
+
+! https://github.com/NanoMeow/QuickReports/issues/2490
+insidermonkey.com##+js(acs, Math, '0x)
+
+! https://github.com/NanoMeow/QuickReports/issues/2492
+tr.savefrom.net##+js(nowoif)
+tr.savefrom.net##.second-btn-box
+
+! https://github.com/NanoMeow/QuickReports/issues/2501
+@@||meucdn.*^$script,xhr,1p
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=meucdn.vip
+@@||cdn.jsdelivr.net/npm/videojs-contrib-ads/$domain=meucdn.vip
+@@||meucdn.*^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6686
+##a[href^="http://adtrack"]
+##a[href*="/go.php?a_aid="]
+
+! https://github.com/NanoMeow/QuickReports/issues/2506
+@@||allvidview.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2516
+letras.mus.br##+js(nostif, r(), 0)
+letras.mus.br##[id^="pub"]
+
+! https://github.com/NanoMeow/QuickReports/issues/2513
+@@||batch.id^$ghide
+
+! https://forums.lanik.us/viewtopic.php?f=114&t=44101#p151985
+pakkotoisto.com##+js(acs, $, undefined)
+
+! https://github.com/NanoMeow/QuickReports/issues/2517
+androidonepro.com##+js(aopr, downloadJSAtOnload)
+
+! https://old.reddit.com/r/uBlockOrigin/comments/ecd6id/removing_scrollblock_on_tagesanzeigerch/
+! https://github.com/uBlockOrigin/uAssets/issues/6755
+! https://www.reddit.com/r/uBlockOrigin/comments/e6lash/cant_log_in_on_digital_news_website/fkrke3j/
+@@||tda.io^$xhr,domain=tagesanzeiger.ch
+@@||tagesanzeiger.ch^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2518
+rmcmv.*##+js(nosiif, visibility)
+rmcmv.*##[class*="ads"]
+
+! https://github.com/NanoMeow/QuickReports/issues/2521
+lecourrier-du-soir.com##+js(nosiif, iframe)
+
+! https://github.com/NanoMeow/QuickReports/issues/2524
+owllink.net##+js(nobab)
+owllink.net##+js(aopr, app_vars.force_disable_adblock)
+owllink.net##+js(aopr, open)
+owllink.net##+js(nowebrtc)
+owllink.net##+js(set, blurred, false)
+owllink.net##.box-main p
+owllink.net###link-view > br
+owllink.net##iframe[src*="publisherAddr"]
+owllink.net##[href^="https://padsbrown.com/"]
+owllink.net##[src^="https://url-coin.com/"]
+*$frame,script,3p,denyallow=consensu.org|google.com|gstatic.com|recaptcha.net|quantcast.com|cloudflare.com,domain=owllink.net
+||i.ibb.co^$image,domain=owllink.net
+@@||owllink.net^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6694
+9gag.com##[id^="sidebar-stream-"] > h4:has-text(Advertisement)
+
+! https://github.com/NanoMeow/QuickReports/issues/2298
+! https://github.com/NanoMeow/QuickReports/issues/2525
+gazzetta.it##+js(aeld, adblockActivated)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6702
+upstream.to##+js(acs, $, .css)
+upstream.to##+js(aopr, open)
+upstream.to##+js(aopr, _run)
+upstream.to##+js(nowebrtc)
+upstream.to##+js(set, cRAds, null)
+@@||upstream.to^$xhr,1p
+! *$script,3p,denyallow=cloudflare.com|cloudflare.net|gstatic.com|hwcdn.net|jquery.com|jsdelivr.net,domain=upstream.to
+
+! https://github.com/NanoMeow/QuickReports/issues/2529
+! https://github.com/NanoMeow/QuickReports/issues/4789
+! https://github.com/uBlockOrigin/uAssets/issues/16316
+arcadepunks.com##+js(aopr, penci_adlbock)
+arcadepunks.com##[class*="ads"]
+@@||arcadepunks.com^$ghide
+arcadepunks.com##.header-banner
+arcadepunks.com##[href^="https://www.arcadepunks.com/go/"]
+arcadepunks.com##.left-ad
+arcadepunks.com##.right-ad
+arcadepunks.com##.spMessageFailure
+arcadepunks.com##[href^="https://gameroomsolutions.com/"]
+arcadepunks.com##.custom-html-widget:not(.custom-html-widget:has([href*="arcadepunks.com"]))
+
+! https://github.com/NanoMeow/QuickReports/issues/2534
+osxinfo.net##+js(acs, $, btoa)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/edtpll/another_website_detecting_ublock/
+myneobuxportal.com##+js(set, jQuery.adblock, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6720
+wohnungsboerse.net##+js(aopr, Number.isNaN)
+@@||wohnungsboerse.net^$xhr,1p
+wohnungsboerse.net##[href*=".php"]
+
+! https://github.com/NanoMeow/QuickReports/issues/2548
+@@||football-lineups.com/dfp.js$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/2554
+negumo.com##+js(set, fabActive, false)
+
+! https://github.com/NanoMeow/QuickReports/issues/2557
+rysafe.blogspot.com##+js(nostif, nextFunction, 250)
+
+! impotsurlerevenu.org anti adb
+@@||impotsurlerevenu.org^$ghide
+
+! eletronicabr.com anti adb
+eletronicabr.com##+js(nostif, test, 100)
+
+! inkagames.com anti adb
+@@||inkagames.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2564
+@@||filmytoday.com^$ghide
+filmytoday.com##.advertisement, .adsbygoogle
+filmytoday.com##.i-am-centered
+filmytoday.com##.title-section:has-text(/adv/i)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6732
+@@||safetxt.*^$ghide
+safetxt.*##ins.adsbygoogle
+
+! https://github.com/NanoMeow/QuickReports/issues/2573
+cyberstumble.com##+js(aopr, b2a)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6736
+games.wkb.jp##+js(set, gWkbAdVert, true)
+games.wkb.jp##+js(set, noblock, true)
+@@||games.wkb.jp/ykg/assets/pc/ad_adsense_for_games$css,script,1p
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=games.wkb.jp
+
+! https://github.com/NanoMeow/QuickReports/issues/2582
+channelmyanmar.org##+js(aopr, adBD)
+channelmyanmar.org##+js(set, ai_dummy, true)
+channelmyanmar.org##+js(set, ulp_noadb, true)
+||channelmyanmar.org/banners/*$image,1p
+channelmyanmar.org##[src$=".gif"]
+||roda.site^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/2570
+asmwall.com##+js(aopr, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6754
+@@||mixdrop.to^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6761
+! https://github.com/uBlockOrigin/uAssets/issues/7190
+! https://github.com/uBlockOrigin/uAssets/issues/8842
+fandom.com##+js(set, wgAffiliateEnabled, false)
+kenshi.fandom.com##+js(set, ads, null)
+fandom.com##[id^="siderail_"][id*="_gamepedia"]
+fandom.com###bodyContent:style(width:100% !important)
+fandom.com##.instant-suggestion
+fandom.com##.top-ads-container
+||45tu1c0.com^
+!#if env_mobile
+fandom.com##.ad-slot-wrapper
+!#endif
+! https://github.com/uBlockOrigin/uAssets/issues/18777
+fandom.com##li.top-results__item span:has-text(Sponsored):upward(li)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/p721xg/no_more_popup_after_recent_update/
+139.99.33.192##.adpop
+gdriveplayer.*##+js(aopr, AaDetector)
+gdriveplayer.*##+js(nowoif, !gdrivedownload)
+! https://75.119.159.228/yuusha-yamemasu-episode-9/
+
+! https://github.com/realodix/AdBlockID/issues/163
+! https://github.com/realodix/AdBlockID/issues/182
+kordramass.com,kshowsubindo.org,senimovie.co##+js(acs, document.onclick, popunder)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ehhmg4/cant_stop_the_anti_adblock_notification_or_access/
+alliptvlinks.com##+js(aeld, load, ads)
+alliptvlinks.com##+js(aopr, eazy_ad_unblocker)
+alliptvlinks.com###arlinablock
+alliptvlinks.com##body:style(overflow: auto !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6765
+uptobox.com,uptostream.com##+js(set, jsUnda, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6767
+earnload.*##+js(aopr, app_vars.force_disable_adblock)
+earnload.*##+js(disable-newtab-links)
+||earnload.*/sw.js$script,1p
+*$image,3p,denyallow=earnload.com,domain=earnload.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/6768
+shop123.com.tw##+js(aopw, daCheckManager)
+orirom.com,romfirmware.com##+js(acs, eval, AdBlock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6770
+midiavip.com##+js(nobab)
+
+! https://github.com/NanoMeow/QuickReports/issues/2624
+evileaks.*##+js(acs, $, prompt)
+@@||evileaks.*^$ghide
+evileaks.*##ins.adsbygoogle
+
+! https://github.com/NanoMeow/QuickReports/issues/2631
+||adservice.google.com/adsid/integrator.js$xhr,redirect=noopjs,domain=maxedtech.com
+maxedtech.com##.widget_custom_html
+
+! https://github.com/NanoMeow/QuickReports/issues/2633
+*$xhr,redirect-rule=nooptext,domain=btik.com
+
+! https://github.com/realodix/AdBlockID/issues/187
+dewabioskop21.org###main-popup
+
+! https://github.com/NanoMeow/QuickReports/issues/2610
+||protect-ad.com^$all
+
+! popups drivefire .co/file/ FGZUI0DAGsHKdfW9NI2I
+drivefire.co##+js(aopr, AaDetector)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6776
+@@||yoursavegames.com^$ghide
+yoursavegames.com##ins.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/19174
+hexupload.net##+js(aopw, Fingerprint2)
+!#if env_mobile
+hexupload.net##+js(acs, document.createElement, rAb)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/6781
+@@||the-man.gr^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/7273
+cheatcloud.cc,cheater.ninja,cheatermad.com,cheatsquad.gg##+js(nano-sib, clearInterval)
+cheatsquad.gg##+js(nosiif, visibility, 1000)
+cheatermad.com##+js(nostif, offset)
+@@||cheatsquad.gg^$script,xhr,1p
+cheatsquad.gg##.tooltip::before
+cheatsquad.gg##.tooltip::after
+updown.link##+js(nano-stb, startDownload, 8000)
+! https://github.com/uBlockOrigin/uAssets/issues/7273#issuecomment-966551769
+@@||work.ink^$ghide
+*$frame,redirect-rule=noopframe,domain=work.ink
+! https://zodhacks.com/pet-simulator-x-saza-hub-easter/ timer
+*$script,domain=work.ink,redirect-rule=noopjs
+@@||work.ink^$xhr,1p
+! https://www.reddit.com/r/uBlockOrigin/comments/zu2myx/
+workink.click##+js(no-fetch-if, cloudfront)
+work.ink##.no-overlay
+! https://github.com/uBlockOrigin/uAssets/issues/14676
+work.ink##+js(ra, href, [href*="jump"], stay)
+@@||cdn.thisiswaldo.com/static/js/$script,domain=work.ink
+@@||doubleverify.com^$xhr,domain=work.ink
+||nextmillmedia.com^
+workink.click##+js(nowoif, !direct)
+work.ink##+js(nosiif, a0b)
+work.ink##+js(no-fetch-if, .js)
+work.ink##body > div:has(> a#link)
+work.ink##.opera-container:style(visibility: collapse !important;)
+work.ink##img[alt="Buff Banner"]:style(visibility: collapse !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/2645
+||firefaucet.win/*.gif$image
+
+||35.238.205.163^$all
+||releinemaoff.pro^
+
+! https://www.reddit.com/r/uBlockOrigin/comments/eknsyf/popups_ads_etc_on_these_sites/
+xanimeporn.com##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/2657
+@@||d1-dm.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/5038#issuecomment-571271555
+||300mbmovies4u.*/sw.js$script,1p
+
+! sensualgirls .org exo stuff
+sensualgirls.org##+js(aopr, document.dispatchEvent)
+sensualgirls.org##.wide_boxcontent:has-text(/adb/i)
+sensualgirls.org##.cbox_cont > div[style="text-align: center;"]
+sensualgirls.org##div[data-width][style*="background-image: url"]:style(background: none !important)
+
+! https://github.com/NanoMeow/QuickReports/issues/2674
+call2friends.com##+js(aopr, onload)
+call2friends.com#@#.adWrapper
+
+! https://github.com/NanoMeow/QuickReports/issues/2676
+bladesalvador.com##+js(set, adblock, false)
+
+! https://github.com/NanoMeow/QuickReports/issues/2679
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=folhabv.com.br
+folhabv.com.br##.publicidade-asynchronous
+
+! https://github.com/NanoMeow/QuickReports/issues/2682
+jacquieetmichel.net##+js(set, is_adblocked, false)
+
+! https://github.com/NanoMeow/QuickReports/issues/2686
+@@||keneono.site^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6796
+fruitlab.com##+js(set, adBlockDetected, noopFunc)
+@@||fruitlab.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6799
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=babygames.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6798
+@@||audio-sound-premium.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6797
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=okyanime.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5305#issuecomment-572308826
+! https://github.com/AdguardTeam/AdguardFilters/issues/115682
+@@||wallpaperwaifu.com^$ghide
+wallpaperwaifu.com##.ads-between-post:upward(.post-item)
+wallpaperwaifu.com##ins.adsbygoogle
+
+||padspms.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/6802
+sh0rt.cc##+js(aopr, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6804
+aeonax.com##+js(noeval-if, debugger)
+@@||aeonax.com^$ghide
+*$frame,redirect-rule=noopframe,domain=camera.aeonax.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2696
+@@||omekon.blogspot.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2698
+dobrapogoda24.pl##+js(nostif, , 1)
+
+! 9hentai onclick popup/under
+9hentai.*##+js(aeld, click, saveLastEvent)
+9hentai.*###ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/6807
+@@||chuppito.fr^$ghide
+||chuppito.fr/ext/*/privacypolicy/styles/all/template/remove_url.js$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/2701
+@@||rtl.it^$script,1p
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=rtl.it
+
+! https://github.com/uBlockOrigin/uAssets/issues/6814
+web2.0calc.*##+js(aopr, doads)
+||web2.0rechner.de/*/$frame
+||web2.0calc.*/*/$frame
+web2.0rechner.de,web2.0calc.*###abmodal, body > .in.modal-backdrop
+web2.0rechner.de,web2.0calc.*##body:style(overflow: auto !important)
+web2.0rechner.de,web2.0calc.*###nocreditsmodal
+web2.0rechner.de,web2.0calc.*##.first
+
+! https://github.com/uBlockOrigin/uAssets/issues/811
+@@||bzbasel.ch^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2722
+bacakomik.co##+js(nowoif)
+*.gif$domain=bacakomik.co,image
+
+! https://github.com/NanoMeow/QuickReports/issues/2740
+@@||mastercoria.com^$script,1p
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=44174
+gaybeeg.info##+js(acs, String.fromCharCode, 'shift')
+gaybeeg.info##+js(aopr, popjs)
+gaybeeg.info##+js(nowebrtc)
+*$script,3p,domain=gaybeeg.info
+
+! https://github.com/uBlockOrigin/uAssets/issues/10363
+keralatelecom.info##+js(nostif, adb)
+keralatelecom.info##.ai-viewports
+
+! https://github.com/uBlockOrigin/uAssets/issues/6823
+extreme-down.*##+js(acs, $, friendlyduck)
+extreme-down.*##+js(acs, Math, decodeURIComponent)
+
+! https://github.com/NanoMeow/QuickReports/issues/2748
+nzpocketguide.com##+js(aopr, adsanity_ad_block_vars)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6828
+webcamsdolls.com##+js(nostif, offsetWidth)
+*.php$script,domain=webcamsdolls.com
+webcamsdolls.com##.sponsor
+||mwcvu.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6829
+fussball.news##+js(aopr, adBlockDetected)
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=44188
+tvchoicemagazine.co.uk##+js(acs, $, onload)
+
+! nensaysubs.net anti adb
+@@||nensaysubs.net^$ghide
+||nensaysubs.net/images/logonensay.ico$image,1p,redirect=1x1.gif
+nensaysubs.net###outerdiv
+
+! gnula .se, .nu
+gnula.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/840
+stream.nbcsports.com##+js(set, adBlockEnabled, false)
+@@||v.fwmrm.net/ad/g/1$xhr,domain=stream.nbcsports.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2774
+@@||redsoccer.info^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2776
+porngo.com##+js(aopr, AaDetector)
+||porngo.com^$csp=child-src *
+porngo.com##+js(nowoif)
+*preRoll$xhr,domain=porngo.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6847
+*$xhr,redirect-rule=noopjs,domain=audioblog.com
+
+! new-gomovies. online popups
+new-gomovies.*##+js(aopr, Date.prototype.toUTCString)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6850
+@@||easy-firmware.com/templates/default/html/en/assets/js/fingerprint2.min.js$script,1p
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=44210
+@@||freetempsms.com^$ghide
+||s3.amazonaws.com/callloop/banners/$3p,image
+||mityneedn.com^
+||perfotrack.com^
+
+! https://github.com/NanoMeow/QuickReports/issues/2788
+||fundingchoicesmessages.google.com^$3p
+! https://github.com/orgs/uBlockOrigin/teams/ublock-filters-volunteers/discussions/289
+! google contributor anti adblock
+#@#[class^="div-gpt-ad"]
+#@#[id^="div-gpt-ad"]
+#@#div[id^="div-gpt-"]
+##[class^="div-gpt-ad"]:not([style^="width: 1px; height: 1px; position: absolute; left: -10000px; top: -"])
+##[id^="div-gpt-ad"]:not([style^="width: 1px; height: 1px; position: absolute; left: -10000px; top: -"])
+##div[id^="div-gpt-"]:not([style^="width: 1px; height: 1px; position: absolute; left: -10000px; top: -"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/6862
+@@||demokrasistyle.blogspot.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6864
+dloady.com##+js(acs, $, show)
+
+! https://github.com/NanoMeow/QuickReports/issues/2805
+sobatkeren.*##+js(nowoif)
+||sobatkeren.*/img/banner/$image
+
+! https://github.com/NanoMeow/QuickReports/issues/2806
+movieon21.*##+js(nowoif)
+*.gif$domain=movieon21.*,image
+
+! https://github.com/uBlockOrigin/uAssets/issues/6865
+pornfactors.com##+js(acs, jQuery, popunder)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/esrkxo/help_adblocker_detected/
+@@||javplayer.com^$ghide
+javplayer.com###player-advertising
+
+! https://github.com/uBlockOrigin/uAssets/issues/10413
+animekaizoku.com##+js(aopr, decodeURI)
+*$script,3p,denyallow=b-cdn.net|disqus.com|jsdelivr.net|jwpcdn.com|fastly.net|fastlylb.net|jquery.com|hetrixtools.com|hwcdn.net|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com|twimg.com|twitter.com,domain=animekaizoku.com
+
+! https://forums.lanik.us/viewtopic.php?p=152241#p152241
+||doubleclick.net^$domain=pccomponentes.com,important
+||googlesyndication.com^$domain=pccomponentes.com,important
+||googletagservices.com^$domain=pccomponentes.com,important
+||omtrdc.net^$xhr,domain=pccomponentes.com,important
+pccomponentes.com##div[id^="div-gpt-ad-"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/2475
+! https://www.reddit.com/r/uBlockOrigin/comments/17sd1co/request_fix_for_spacecom/
+techradar.com##+js(aopr, _sp_._networkListenerData)
+gamesradar.com,techradar.com,tomsguide.com,tomshardware.com,whathifi.com##.mobile-leaderboard-320-50:upward([style])
+androidcentral.com,gamesradar.com,livescience.com,pcgamer.com,space.com,techradar.com,tomsguide.com,tomshardware.com,whathifi.com,windowscentral.com##.related-articles-block
+androidcentral.com,gamesradar.com,livescience.com,pcgamer.com,space.com,techradar.com,tomsguide.com,tomshardware.com,whathifi.com,windowscentral.com##.van_taboola
+whathifi.com##.dfp-leaderboard-container
+whathifi.com###ultimedia_wrapper
+whathifi.com##.slot-leaderboard
+whathifi.com##.adunit
+
+! https://github.com/NanoMeow/QuickReports/issues/2836
+modebaca.com##+js(aopr, app_vars.force_disable_adblock)
+modebaca.com##+js(acs, $, click)
+modebaca.com##[href="https://www.tautan.pro/"]
+
+! crichd .sc / .com / .cx / to / .tv popups
+crichd.*##+js(aopr, AaDetector)
+
+! https://github.com/NanoMeow/QuickReports/issues/2846
+ticonsiglio.com##+js(aopr, jQuery.adblock)
+
+! https://github.com/NanoMeow/QuickReports/issues/1835
+mtlurb.com##+js(nostif, purple_box)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4737
+! 123moviesc. cyou
+123moviesc.*##+js(aopr, mm)
+
+! https://github.com/uBlockOrigin/uAssets/issues/2484
+mkvcinemas.*##+js(nowoif)
+*$script,3p,denyallow=googleapis.com,domain=mkvcinemas.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/6890
+debgen.fr##+js(acs, addEventListener, nextFunction)
+
+! https://github.com/NanoMeow/QuickReports/issues/2866
+@@||mabzicle.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6894
+*$popunder,domain=convert2mp3.tv,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6895
+daily-times.com##+js(aopr, _sp_._networkListenerData)
+
+! https://github.com/NanoMeow/QuickReports/issues/2868
+@@||googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=lexigram.gr
+
+! https://github.com/NanoMeow/QuickReports/issues/2869
+||vidazoo.com^$domain=readonepiece.com
+readonepiece.com###vidazoo-player-div
+
+! https://github.com/NanoMeow/QuickReports/issues/2870
+! https://github.com/uBlockOrigin/uAssets/issues/8411#issuecomment-752413056
+imgbaron.com##+js(aopr, loadTool)
+imgbaron.com##[src="https://imgbaron.com/chrome.ads.png"]
+imgbaron.com##p.newsbar_b
+imgbaron.com##div[style^="display: block; position: fixed; z-index"]
+imgbaron.com###fadeinbox
+
+! https://github.com/uBlockOrigin/uAssets/issues/15329
+! https://github.com/uBlockOrigin/uAssets/issues/16372
+! https://github.com/uBlockOrigin/uAssets/issues/16427
+! https://github.com/uBlockOrigin/uAssets/issues/20520
+@@||ads.hausbau-forum.de/openad.js$script,1p
+##.samBannerUnit, .samCodeUnit
+hausbau-forum.de##+js(set, checkAdsBlocked, noopFunc)
+hausbau-forum.de##^script:has-text(adsBlocked)
+
+! https://github.com/NanoMeow/QuickReports/issues/2878
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=adnan-tech.com
+
+! nbareplayhd.com anti adb
+nbareplayhd.com##+js(aopr, adblockDetector)
+
+! heavy-r .com nsfw ads (srcdoc)
+||heavy-r.com^$csp=child-src *
+heavy-r.com##.mob-ban
+heavy-r.com##.nopop.hd-bar
+
+! showbiz .cz ads (srcdoc)
+||showbiz.cz^$csp=child-src *
+
+! https://www.her.ie/celeb/what-ever-happened-to-enrique-iglesias-mole-269224 (scroll issue)
+her.ie##html:style(overflow: auto !important)
+
+! https://github.com/NanoMeow/QuickReports/issues/2889
+warps.club##+js(aopr, adblockDetect)
+
+! https://github.com/NanoMeow/QuickReports/issues/2890
+*$script,redirect-rule=noopjs,domain=texviewer.herokuapp.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2897
+fake-it.ws##+js(set, adsLoadable, true)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ew9p5z/anti_adblocker_on_881903com/
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=noopjs,domain=881903.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2901
+cuatrolatastv.blogspot.com##+js(nobab)
+cuatrolatastv.blogspot.com##+js(acs, _pop)
+||sites.google.com/site/rvdmarcrailcatrain/home/tomber.js$script
+
+! https://github.com/NanoMeow/QuickReports/issues/2902
+dramakrsubindo.blogspot.com##+js(aopr, open)
+||protectsurf-a.akamaihd.net^
+||akamaihd.net/*&affid
+
+! pelispedia. one popup
+pelispedia.*##+js(acs, allclick_Public)
+pelispedia.*##+js(nano-stb)
+pelispedia24.*,streamplusvip.xyz##+js(nowoif)
+pelispedia.*,pelispedia24.*##+js(ra, href, a#clickfakeplayer)
+pelispedia.*##+js(ra, href, #opfk)
+pelispedia.*##+js(ra, href, .fake_player > [href][target])
+premiumstream.live##+js(ra, href, .link)
+pelispedia.*##a.btns
+pelispedia.*##div.mb-5.text-center
+pelispedia.*##.cont.principal > .site-main > .links
+pelispedia.*##.img-responsive
+pelispedia.*##.mvic-btn
+pelispedia.*##[class^="page_speed_"][href] > img[src$="app.png"]
+pelispedia24.*##.button
+pelispedia24.*##.asgdc
+pelispedia24.*##.preplayer
+pelispedia24.*##[href^="/acceso-total-sin-limite"]
+||pelispedia.*/*sw.js$script,1p
+*$script,3p,denyallow=cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com|jsdelivr.net,domain=pelispedia.*
+pelisplayer.xyz##+js(aopr, doSecondPop)
+pelispedia.*##[href^="https://settledchagrinpass.com/"]
+
+! pelis28.co ads
+pelis28.*##+js(nowoif)
+pelis28.*##+js(ra, href, #clickfakeplayer)
+pelis28.*##.buttons-p
+pelis28.*###options-0
+
+! verpelistoday.com popup ads
+verepeliculas.com#@#.fake_player
+verepeliculas.com##+js(ra, href, .fake_player > a[href])
+verepeliculas.com##a[href^="https://www.verepeliculas.com/dowload/"]
+playembed.xyz,playtemporal.xyz##+js(nowoif)
+playembed.xyz##+js(set, clientSide.adbDetect, noopFunc)
+playnetutem1.xyz##+js(aopr, doSecondPop)
+
+! https://github.com/NanoMeow/QuickReports/issues/2903
+grid.id##+js(acs, Math, '\x)
+
+! https://github.com/NanoMeow/QuickReports/issues/2737
+kompasiana.com##+js(aopr, initAdserver)
+||asset.kompas.com/data/*/kgmedia/js/*notif$script
+
+! https://github.com/NanoMeow/QuickReports/issues/2912
+publish0x.com###registerModal, .show.fade.modal-backdrop
+publish0x.com##body:style(overflow: auto !important;)
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/1102
+*$script,redirect-rule=noopjs,domain=myschool-eng.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6907
+*$script,redirect-rule=noopjs,domain=ehubsoft.herokuapp.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/exo1ye/ieeeorg_interstitial/
+spectrum.ieee.org##+js(aopr, splashpage.init)
+
+! https://github.com/NanoMeow/QuickReports/issues/2925 doujindesu .ch, .site
+doujindesu.*##+js(aeld, load, 2000)
+
+! https://github.com/NanoMeow/QuickReports/issues/2930
+port.hu##+js(aeld, DOMContentLoaded, offsetHeight)
+port.hu##+js(nostif, offsetHeight)
+indavideo.hu##+js(nano-sib)
+indavideo.hu###ad
+indavideo.hu###preroll
+@@||port.hu/js/ads.min.js$script,1p
+@@||port.hu^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6911
+cutdl.xyz##+js(aopr, app_vars.force_disable_adblock)
+cutdl.xyz##+js(set, blurred, false)
+cutdl.xyz##.banner
+
+! https://github.com/NanoMeow/QuickReports/issues/2923
+dziennikbaltycki.pl,dzienniklodzki.pl,dziennikpolski24.pl,dziennikzachodni.pl,echodnia.eu,expressbydgoski.pl,expressilustrowany.pl,gazetakrakowska.pl,gazetalubuska.pl,gazetawroclawska.pl,gk24.pl,gloswielkopolski.pl,gol24.pl,gp24.pl,gra.pl,gs24.pl,kurierlubelski.pl,motofakty.pl,naszemiasto.pl,nowiny24.pl,nowosci.com.pl,nto.pl,polskatimes.pl,pomorska.pl,poranny.pl,sportowy24.pl,strefaagro.pl,strefabiznesu.pl,stronakobiet.pl,telemagazyn.pl,to.com.pl,wspolczesna.pl##+js(aeld, , show)
+||ppstatic.pl/*/reklama.js$script,domain=dziennikbaltycki.pl|dzienniklodzki.pl|dziennikpolski24.pl|dziennikzachodni.pl|echodnia.eu|expressbydgoski.pl|expressilustrowany.pl|gazetakrakowska.pl|gazetalubuska.pl|gazetawroclawska.pl|gk24.pl|gloswielkopolski.pl|gol24.pl|gp24.pl|gra.pl|gs24.pl|kurierlubelski.pl|motofakty.pl|naszemiasto.pl|nowiny24.pl|nowosci.com.pl|nto.pl|polskatimes.pl|pomorska.pl|poranny.pl|sportowy24.pl|strefaagro.pl|strefabiznesu.pl|stronakobiet.pl|telemagazyn.pl|to.com.pl|wspolczesna.pl,important
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ey5bd4/adblock/
+*$script,redirect-rule=noopjs,domain=onemanhua.com
+onemanhua.com##+js(aeld, /.?/, popMagic)
+onemanhua.com##+js(nostif, checkSiteNormalLoad)
+||onemanhua.com/js/ad/$image
+@@||onemanhua.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6920
+@@||euconfesso.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6919
+@@||rndnovels.com^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/49109
+! https://github.com/NanoMeow/QuickReports/issues/4327
+laksa19.github.io##+js(aost, console.log, /blob|injectedScript/)
+laksa19.github.io##+js(set, ASSetCookieAds, null)
+laksa19.github.io##+js(nostif, 0x)
+*$script,redirect-rule=noopjs,domain=laksa19.github.io
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/49181
+@@||guncelakademi.com^$ghide
+guncelakademi.com##ins.adsbygoogle
+
+! mangacanblog .com anti adb
+mangacanblog.com##+js(aeld, load, nextFunction)
+
+! javnew.net popups
+javnew.net##+js(acs, document.querySelectorAll, adConfig)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=44269
+@@||sololeveling.net^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2941
+motohigh.pl##+js(nostif, , 1)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=44272
+orangespotlight.com##+js(aopr, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6925
+thenation.com##+js(aopr, ___tp)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/49232
+@@||remixsearch.co^$ghide
+
+! https://www.camp-firefox.de/forum/thema/111753-%C2%B5block-origin-ad-blocker-diskussionsthread/?postID=1136485#post1136485
+t3n.de##+js(nostif, adBlockOverlay)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/49248
+@@||erovoice.us^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2947
+ar-atech.blogspot.com##+js(aopr, adBlockDetected)
+
+! https://github.com/NanoMeow/QuickReports/issues/2949
+*$script,redirect-rule=noopjs,domain=kurnasional.blogspot.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/49255
+newsonthegotoday.com##+js(aopr, STREAM_CONFIGS)
+newsonthegotoday.com##+js(ra, target, .clickbutton)
+newsonthegotoday.com##.clickbutton:not([data-href])
+newsonthegotoday.com##.viewtable:has(> center:has-text(▼ Scroll down to Continue ▼)) > a[href][target="_blank"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/49273
+okulsoru.com##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6926
+ex-foary.com##+js(aopr, app_vars.force_disable_adblock)
+ex-foary.com##+js(aopr, open)
+ex-foary.com##+js(nowebrtc)
+ex-foary.com##.banner-inner
+forex-trnd.com##+js(nosiif, visibility, 1000)
+||gkxyifeulfpb.com^
+||gregorfines.com^
+||needntrusts.com^
+
+! https://github.com/NanoMeow/QuickReports/issues/2951
+clixwarez.blogspot.com##+js(aopr, adBlockDetected)
+
+! https://github.com/NanoMeow/QuickReports/issues/2952
+allindiaroundup.com##+js(nostif, Detected, 500)
+
+! thewizardsmanse .com anti adb
+@@||thewizardsmanse.com^$script,1p
+
+! fellowsfilm .com anti adb
+fellowsfilm.com##+js(acs, document.querySelector, XF)
+fellowsfilm.com##[data-author="Advertisement"]
+
+! zwergenstadt .com anti adb
+zwergenstadt.com##+js(aeld, load, onload)
+
+! netaffiliation .com anti adb
+netaffiliation.com##+js(acs, $, hide)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6929
+gigaho.com##+js(aopr, onload)
+
+! https://github.com/NanoMeow/QuickReports/issues/2962
+@@||geekdrop.com^$ghide
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=44281
+@@||erepublik.tools^$ghide
+
+! ebook300.com/longfiles.com popups
+ebook3000.com,longfiles.com##+js(aopw, adcashMacros)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6932
+tapchipi.com##+js(nostif, mdp)
+
+! https://github.com/NanoMeow/QuickReports/issues/2963 popups
+oceanof-games.com##+js(aopr, open)
+
+! https://github.com/NanoMeow/QuickReports/issues/2968
+||poptival.com^
+
+! https://github.com/NanoMeow/QuickReports/issues/2973
+@@||insideedition.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2974
+hobby-machinist.com##+js(nostif, show)
+hobby-machinist.com##.samCodeUnit
+
+! https://github.com/NanoMeow/QuickReports/issues/2975
+jacquieetmichelelite.com##+js(acs, $, show)
+*$popunder,domain=jacquieetmichelelite.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2980
+*$script,redirect-rule=noopjs,domain=puregym.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2982
+@@||filegrade.com^$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/2988
+arenabg.com##+js(aopr, AaDetector)
+arenabg.com##[href^="http://bit.ly"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/f14wsh/antiadblock_on_honeyhunterworldcom/
+! https://github.com/NanoMeow/QuickReports/issues/1243
+@@||honeyhunterworld.com/*/js/blockadblock.js$script,1p
+@@||honeyhunterworld.com^$ghide
+honeyhunterworld.com##div[class*="ad_"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/49492
+@@||speed-down.org^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/49505
+dr-farfar.com##+js(aeld, , ads)
+dr-farfar.com##+js(aopr, mdpDeBlocker)
+dr-farfar.com##+js(nowoif)
+dr-farfar.com##.essb-sharebooster
+dr-farfar.com##.essb-sharebooster-overlay
+||mrfog.com^$domain=dr-farfar.net
+
+! https://forums.lanik.us/viewtopic.php?p=153496#p153496
+pornhat.*##+js(aopr, document.dispatchEvent)
+vr.pornhat.*#@#+js(aopr, document.dispatchEvent)
+pornhat.*##.bns-bl-new.bns-bl
+pornhat.*##div.player-bn
+pornhat.*##.video-block > .show.before-player
+pornhat.*##b
+pornhat.*##.top_spot
+||doublepimpads.com^$3p
+||pornhat.*/static/js/300x250.
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=44297
+bccondos.net###exampleModal
+bccondos.net##.in.fade.modal-backdrop
+bccondos.net##body:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6940
+yepi.com##+js(acs, $, modal)
+
+! https://github.com/NanoMeow/QuickReports/issues/2991
+@@||ponselharian.com^$ghide
+ponselharian.com##ins.adsbygoogle
+
+! https://github.com/NanoMeow/QuickReports/issues/2992
+napi.hu##+js(acs, $, show)
+
+! https://github.com/NanoMeow/QuickReports/issues/2996
+@@||gamepccrack.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/2997
+*$xhr,frame,3p,domain=pcgamez-download.com
+pcgamez-download.com##+js(aost, Math, inlineScript)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/49559
+av-uncen.com##+js(aopr, adBlockDetected)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/49560
+spaziogames.it##+js(acs, $, .test)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/147745
+boyfriendtv.com##+js(aopw, backgroundBanner)
+boyfriendtv.com##+js(aeld, click, interstitial)
+||cdn.nsimg.net/cache/landing^
+||catsnbootsncats2020.com^
+||boyfriendlive.com^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/3009
+! https://github.com/NanoMeow/QuickReports/issues/3281
+1shortlink.com##+js(set, letShowAds, true)
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noop.js:10,domain=1shortlink.com
+||youtube.com/embed/*$domain=1shortlink.com
+@@||1shortlink.com^$ghide
+1shortlink.com##[id*="ScriptRoot"]
+
+! numbeo .com anti adb
+@@||numbeo.com^$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/3010
+||googlesyndication.com/pagead/js/adsbygoogle.j$xhr,redirect=noopjs,domain=botayit.com
+
+! https://github.com/NanoMeow/QuickReports/issues/466
+vectorizer.io##+js(nostif, modal)
+vectorizer.io##[href^="https://track.fiverr.com/"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/f25295/ublocked_get_detected_in_this_site/
+||jsdelivr.net/*/levelmaxblock.js$script,3p
+
+! https://github.com/NanoMeow/QuickReports/issues/3016
+porndaa.com##+js(aeld, getexoloader)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/49626
+@@||earlymanga.website^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6945
+@@||sfirmware.com^$ghide
+||jsdelivr.net/*/adb-analytics$script,3p
+sfirmware.com##+js(nano-sib)
+sfirmware.com##.cc-window
+sfirmware.com##.post-ads
+sfirmware.com##.buy_on_amazon
+
+! https://github.com/uBlockOrigin/uAssets/issues/6946
+hostingunlock.com##+js(acs, $, show)
+
+! https://github.com/NanoMeow/QuickReports/issues/3029
+*$script,redirect-rule=noopjs,domain=tgbeautymedia.blogspot.com
+
+! https://github.com/NanoMeow/QuickReports/issues/3030
+wickedspot.org##+js(aopr, b2a)
+
+! https://github.com/NanoMeow/QuickReports/issues/3031
+*$script,redirect-rule=noopjs,domain=sportif.id
+
+! https://github.com/uBlockOrigin/uAssets/issues/6951
+@@||erai-raws.info^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/10829
+##[href*="//agacelebir.com"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/49747
+@@||smashresume.com^$ghide
+
+! NSFW popups exo ads
+18-teen-sex.com,18-teen-tube.com,18girlssex.com,18teen-tube.com,18tubehd.com,2017tube.com,3prn.com,sexmoza.com,yogranny.com,youfreepornotube.com,youngleak.com,zhlednito.cz##+js(acs, document.dispatchEvent, myEl)
+24pornvideos.com,2japaneseporn.com,xxxvideor.com,youngleak.com,zhlednito.cz##+js(aopr, ExoLoader.serve)
+zhlednito.cz##+js(nosiif, /^/)
+nakedarab-tube.com,xxxtubepass.com,yestubemature.com,yourhomemadetube.com,yourtranny-sex.com##+js(aopr, Aloader.serve)
+yeswegays.com,youramateurtube.com##+js(nowoif)
+ganstamovies.com,youngleak.com##+js(aeld, getexoloader)
+18girlssex.com##+js(aopr, decodeURI)
+||youramateurtube.com/sw.js$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/3035
+ringsidenews.com##+js(aopr, googletag)
+
+! https://github.com/NanoMeow/QuickReports/issues/3036
+watchmonkonline.com##+js(aopr, open)
+
+! https://github.com/NanoMeow/QuickReports/issues/3039
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=motorsport.tv,redirect-rule=google-ima.js
+||static.adsafeprotected.com/vans-adapter-google-ima.js$script,domain=motorsport.tv,redirect-rule=google-ima.js
+
+! https://github.com/NanoMeow/QuickReports/issues/3041
+convert-case.softbaba.com##+js(aopr, adblockDetector)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/f3qlxr/antiadblock/
+fotografareindigitale.com##+js(acs, jQuery, ai_adb)
+
+! https://github.com/NanoMeow/QuickReports/issues/3044
+nesia.my.id##+js(set, tidakAdaPenghalangAds, true)
+
+! https://github.com/uBlockOrigin/uAssets/pull/9791
+*$script,redirect-rule=noopjs,domain=allkaicerteam.com
+@@||allkaicerteam.com^$ghide
+allkaicerteam.com##ins.adsbygoogle
+
+! https://github.com/NanoMeow/QuickReports/issues/3048
+@@||meutimao.com.br^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/3050
+rbxoffers.com##+js(nostif, adblock)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6955
+tvn24.pl##+js(json-prune, playlist.movie.advertising.ad_server)
+@@||cdntvn.pl/*/advert.js$xhr,domain=tvn24.pl
+
+! https://www.reddit.com/r/uBlockOrigin/comments/f45bvt/stop_ublock_from_creating_new_tabs/
+gomoviesfree.*##+js(aopr, glxopen)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/49873
+@@||uragongaming.blogspot.com^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/49879
+brandstofprijzen.info##+js(aeld, load, antiblock)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/49892
+theandroidpro.com##+js(aopr, adBlockDetected)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/49925
+tiny.do##+js(aopr, app_vars.force_disable_adblock)
+tiny.do###download3:style(display: block !important;)
+tiny.do##a[href^="https://mob1ledev1ces.com"]
+tiny.do##.banner
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/89560
+netfuck.net##+js(aeld, DOMContentLoaded, adsBlocked)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6964
+webtor.io##+js(nowoif)
+webtor.io##.alerts
+webtor.io##.me-ad-container
+
+! https://github.com/NanoMeow/QuickReports/issues/3067
+phimgi.tv##+js(acs, jQuery, popup)
+@@||player.phimnhe.net^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/6965
+nirjonmela.com##+js(acs, $, AdBlock)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/78722
+thgss.com##+js(nosiif, adsbygoogle)
+@@||thgss.com^$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/50016
+u-s-news.com##+js(set, ulp_noadb, true)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=44320
+redbox.com##.rb-ad-leaderboard-container
+*$image,redirect-rule=2x2.png,domain=redbox.com
+
+! https://forums.lanik.us/viewtopic.php?p=153011#p153011
+yggtorrent.*##+js(aopw, Fingerprint2)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/f5nksl/antiadblock/
+thefastlaneforum.com##+js(nostif, .show, 1000)
+
+! https://github.com/NanoMeow/QuickReports/issues/3077
+zeeebatch.blogspot.com##+js(aopr, adBlockDetected)
+
+! https://github.com/NanoMeow/QuickReports/issues/3092
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=infolokerserang.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/50179
+*$xhr,redirect-rule=noop.txt,domain=tunein.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/13751
+! https://github.com/uBlockOrigin/uAssets/issues/18299
+@@||luscious.net^$ghide
+luscious.net##.ad_lead
+*$script,redirect-rule=noopjs,domain=luscious.net
+luscious.net##+js(aopr, console.clear)
+luscious.net##+js(aeld, popstate)
+luscious.net##+js(nowoif)
+luscious.net##a[rel$="sponsored"]
+luscious.net##div[class^="adDisplay-module"]
+luscious.net##.ad_section
+*$script,3p,denyallow=cdn77.org|cloudflare.net|googleapis.com|jsdelivr.net|jsdelivr.map.fastly.net,from=luscious.net
+@@*$xhr,domain=luscious.net,3p
+||luscious.net/advertisement/iframe/
+
+! downsub .com anti adb
+@@||downsub.com^$xhr,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/f7drk2/antiadblock_on_tizcyclingliveio/
+tiz-cycling-live.io##+js(acs, $, blocker)
+tiz-cycling-live.io###msg
+tiz-cycling.io##+js(acs, jQuery, blocker)
+
+! azarplus.com ads
+||azarplus.com/wp-content/uploads/*.gif$image,1p
+@@||azarplus.com/wp-content/uploads/*Publicidad*.jpg$image,1p
+@@||azarplus.com/wp-content/uploads/*Publicidad*.png$image,1p
+azarplus.com##.public-banner-3
+azarplus.com##.td-all-devices > [href][target="_blank"]
+azarplus.com###overbox3
+
+! https://github.com/NanoMeow/QuickReports/issues/3108
+! https://github.com/NanoMeow/QuickReports/issues/3232
+||cloudgallery.net^$csp=sandbox allow-forms allow-same-origin allow-scripts allow-modals allow-orientation-lock allow-pointer-lock allow-presentation allow-top-navigation
+||cloudgallery.net^$csp=script-src * 'unsafe-inline'
+||imghot.net^$csp=sandbox allow-forms allow-same-origin allow-scripts allow-modals allow-orientation-lock allow-pointer-lock allow-presentation allow-top-navigation
+||imghot.net^$csp=script-src * 'unsafe-inline'
+||imgzong.*^$csp=sandbox allow-forms allow-same-origin allow-scripts allow-modals allow-orientation-lock allow-pointer-lock allow-presentation allow-top-navigation
+||imgzong.*^$csp=script-src * 'unsafe-inline'
+cloudgallery.net,imghot.net##+js(aopr, AaDetector)
+cloudgallery.net,imghot.net##+js(aopr, console.clear)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11375
+/webroot/modern_theme/img/dwndbnr*$image,1p
+makemoneywithurl.com##+js(nowoif)
+makemoneywithurl.com##+js(set, timeSec, 0)
+makemoneywithurl.com###scroll.hidden, .footerLink.hidden:style(display: block!important)
+makemoneywithurl.com###next.getmylink
+makemoneywithurl.com##.box-main > div:not([class])
+
+! https://github.com/uBlockOrigin/uAssets/issues/9613
+dvdgayonline.com##+js(ra, href, #clickfakeplayer)
+dvdgayonline.com##+js(nano-stb, countdown, 1000, 0.02)
+dflix.top##+js(nowoif)
+dflix.top##body > div[class]:last-child
+||acacdn.com^$script,redirect-rule=noop.js,domain=dflix.top
+
+! wutime_adblock
+trade2win.com##+js(nostif, .show)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6984
+gomo.to##+js(aopr, glxopen)
+gomo.to##+js(nowoif)
+*$script,3p,denyallow=googleapis.com,domain=gomo.to
+
+! https://github.com/uBlockOrigin/uAssets/issues/6986
+! https://github.com/NanoMeow/QuickReports/issues/3690
+! https://github.com/NanoMeow/QuickReports/issues/4294#issuecomment-659086334
+iir.ai##+js(acs, Math, XMLHttpRequest)
+iir.ai##+js(aeld, load, .appendChild)
+iir.ai##+js(aopr, app_vars.force_disable_adblock)
+iir.ai##+js(aopr, open)
+iir.ai##+js(aopw, Fingerprint2)
+iir.ai##+js(set, blurred, false)
+iir.ai###link-view > div[style] + p[style] + center > [href][target]
+iir.ai##form > a[href][target]
+iir.ai##.box-main > a[href][target]
+*$script,3p,denyallow=google.com|gstatic.com|recaptcha.net,domain=iir.ai
+||iir.ai/sw$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6988
+trendsderzukunft.de##+js(aopr, onload)
+
+! https://github.com/NanoMeow/QuickReports/issues/3117
+||vidlii.com/js/main.js^$script,1p
+vidlii.com##+js(nosiif, visibility, 1000)
+vidlii.com##+js(set, blockAdBlock, trueFunc)
+vidlii.com##+js(set, adsbygoogle.loaded, true)
+*$xhr,redirect-rule=noopjs,domain=vidlii.com
+@@||vidlii.com^$ghide
+vidlii.com##ins.adsbygoogle
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/50316
+! https://github.com/uBlockOrigin/uAssets/issues/11851
+docer.*##+js(set, ads_unblocked, true)
+
+! https://github.com/NanoMeow/QuickReports/issues/3120
+download.htdrive.com##+js(acs, document.getElementById, bannerad)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6992
+onlinetutorium.com##+js(acs, addEventListener, google_ad_client)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20878
+fontyukle.net##+js(aost, setTimeout, onload)
+fontyukle.net##div.sponsor
+
+! https://www.reddit.com/r/uBlockOrigin/comments/f8fpya/cryptonetosruscripthastextad_nodes_isnt_hiding/
+@@||cryptonetos.ru^$ghide
+cryptonetos.ru##+js(acs, onload, adblock)
+cryptonetos.ru##.carousel-inner
+cryptonetos.ru##.ads
+cryptonetos.ru##.popup
+
+! cryptofuns.ru anti-adb
+cryptofuns.ru##+js(nowoif)
+cryptofuns.ru##+js(aopr, app_vars.force_disable_adblock)
+cryptofuns.ru##+js(aopr, adcashMacros)
+cryptofuns.ru##.popup, #overlay
+cryptofuns.ru##[href^="//a.o333o.com/"]
+cryptofuns.ru##[class^="_fa7"]
+
+! https://github.com/NanoMeow/QuickReports/issues/3131
+northwalespioneer.co.uk##+js(aopr, _sp_.mms.startMsg)
+
+! https://github.com/NanoMeow/QuickReports/issues/3133
+@@||indcit.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/3135
+||google.com/adsense/domains/caf.js$script,redirect=noopjs,domain=jestrudo.pl
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/50426
+! https://github.com/uBlockOrigin/uAssets/issues/11872
+modagamers.com##+js(acs, JSON.parse, atob)
+modagamers.com##+js(nostif, showModal)
+modagamers.com##+js(nano-stb)
+animetemaefiore.club##+js(nowoif)
+modagamers.com##+js(aopr, decodeURI)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7024
+@@*$ghide,domain=pomponik.pl|iplsc.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/50444
+ogrenciyegelir.com##+js(acs, document.getElementById, nextFunction)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/50483
+cdn77.org##+js(set, xxSetting.adBlockerDetection, false)
+cdn77.org###layerName_preroll, #layerName_postroll
+
+! nsfw batporno .com popunder
+batporno.com##+js(aopr, decodeURI)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/50482
+howtofixwindows.com##+js(set, better_ads_adblock, null)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7006
+||grammarist.com/*/*.jpg$script,1p
+grammarist.com###custom_html-3, #custom_html-5
+grammarist.com##small
+
+! https://github.com/uBlockOrigin/uAssets/issues/7007
+vidload.net##+js(aopr, AaDetector)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/50524
+sandiegouniontribune.com##+js(aopr, googlefc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/50548
+almezoryae.com##+js(acs, document.createElement, adblock)
+
+! https://github.com/NanoMeow/QuickReports/issues/3152
+femalefirst.co.uk##+js(aopr, ppload)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/457
+@@||shana.pe.kr^$ghide
+shana.pe.kr##ins.adsbygoogle
+
+! perfectmomsporn .com ads + popunder
+perfectmomsporn.com##+js(aopr, Aloader)
+perfectmomsporn.com##+js(noeval)
+
+! tubexxxone .com ads + popunder
+tubexxxone.com##+js(noeval)
+tubexxxone.com##+js(aopr, Aloader.serve)
+
+! theregister.co.uk
+theregister.co.uk##+js(aopr, RegAdBlocking)
+theregister.co.uk##+js(acs, document.createElement, a.adm)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7025
+remaxhd.*##+js(aopr, decodeURI)
+remaxhd.*##+js(nowoif)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11406
+shorteet.com##+js(set, blurred, false)
+shorteet.com##+js(set, open, undefined)
+shorteet.com##.banner
+*$script,3p,denyallow=gstatic.com|recaptcha.net,domain=shorteet.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7031
+mobilelegends.shop##+js(nano-sib)
+*$image,redirect-rule=2x2.png,domain=mobilelegends.shop
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/50731
+gogodl.com##+js(acs, document.getElementById, adblock)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/fbgjtx/how_to_block_adsbanners_on_cdiscountcom/
+cdiscount.com##+js(aopr, __eiPb)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=44368
+@@||toyota-club.eu^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/50758
+@@||9docu.*^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/50761
+@@||k258059.net^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/50762
+lightnovelworld.com##+js(set, importFAB, undefined)
+@@||lightnovelworld.com^$ghide
+lightnovelworld.com##.adsbox
+lightnovelworld.com##ins.adsbygoogle
+lightnovelworld.com##.vl-ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/7040
+! https://github.com/NanoMeow/QuickReports/issues/715
+vipracing.*##+js(acs, $, show)
+vipracing.*##+js(aopr, AaDetector)
+vipracing.*##[href="https://www.tvbarata.club/"]
+vipracing.*###vpp
+
+! https://github.com/uBlockOrigin/uAssets/issues/7041
+primedeportes.es##+js(aeld, load, onload)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7042
+sportstream.live##+js(aopr, checkABlockP)
+
+! https://github.com/NanoMeow/QuickReports/issues/3177
+@@||poring.world^$ghide
+poring.world##[data-ad-slot]
+
+! https://github.com/uBlockOrigin/uAssets/issues/4782
+||survivalservers.com^$frame,domain=ads.bdcraft.net
+@@||ads.bdcraft.net/js/interstitial.js$script,1p
+
+! https://forums.lanik.us/viewtopic.php?p=153233#p153233
+! https://www.reddit.com/r/uBlockOrigin/comments/fcaa0w/ads_come_back_after_refreshing/
+ddaynormandy.forumgaming.fr,neogeo-system.com##a[onclick][target]:upward(2)
+
+! btdb .eu popunder
+btdb.*##+js(aeld, , _0x)
+btdb.*##+js(aopr, console.clear)
+btdb.*##+js(aeld, , Date)
+btdb.*##+js(aopr, open)
+*$frame,script,xhr,3p,denyallow=bootstrapcdn.com|cdn77.org|cloudflare.com|cloudflare.net|disqus.com|disquscdn.com|facebook.com|facebook.net|fastly.net|fastlylb.net|fbcdn.net|google.com|googleapis.com|gstatic.com|hcaptcha.com|hwcdn.net|instagram.com|jquery.com|jsdelivr.net|jwpcdn.com|jwpsrv.com|plyr.io|twimg.com|twitter.com|recaptcha.net|wp.com,domain=btdb.*
+btdb.*##.alert-dismissible
+btdb.*##.alert
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/50811
+ujszo.com##+js(set, Drupal.behaviors.adBlockerPopup, null)
+
+! https://github.com/NanoMeow/QuickReports/issues/3185
+naniplay.com##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/3186
+@@||3amid-url.blogspot.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/3187
+librospreuniversitariospdf.blogspot.com##+js(nostif, getComputedStyle)
+*$script,3p,denyallow=disqus.com|disquscdn.com|jsdelivr.net|jwpcdn.com|fastly.net|fastlylb.net|jquery.com|hwcdn.net|hcaptcha.com|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com|googleusercontent.com|blogger.com|plyr.io,domain=librospreuniversitariospdf.blogspot.com
+
+! https://github.com/NanoMeow/QuickReports/issues/867
+! https://github.com/uBlockOrigin/uAssets/issues/19534
+@@||appnee.com^$ghide
+appnee.com##ins.adsbygoogle
+appnee.com###babasbmsgx
+appnee.com##[href^="https://appnee.com/advertising/"] > [src^="https://img.appnee.com/other/"][alt="Ads Place"]
+appnee.com##+js(rmnt, script, alert)
+
+! wojtekczytawh40k.blogspot.com anti-adb
+wojtekczytawh40k.blogspot.com##+js(acs, addEventListener, ADBLOCK)
+
+! atdhe .cc / sx popups, ads
+atdhe.*##+js(popads-dummy)
+atdhe.*##[href^="https://horti.brovada.eu/"]
+atdhe.*###bannerInCenter
+||bitcoines.com^$3p
+
+! 5299 .tv anti adb
+5299.tv##+js(acs, jQuery, setTimeout)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/50855
+@@||scaleya.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/10166
+files.im##+js(acs, decodeURI, decodeURIComponent)
+files.im##+js(nano-stb, tick)
+||files.im/ppa
+
+! https://github.com/NanoMeow/QuickReports/issues/3193
+pharmaceutical-technology.com##+js(acs, jQuery, click)
+||pharmaceutical-technology.com/wp-content/*skin.jpg$image
+
+! https://github.com/NanoMeow/QuickReports/issues/3202
+*$xhr,redirect-rule=nooptext,domain=savesubs.com
+savesubs.com##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/3200
+lebahmovie.com##+js(aopr, decodeURI)
+||lebahmovie.com/sw.js$script,1p
+lebahmovie.com##.idmuvi-topbanner-aftermenu
+*.gif$domain=lebahmovie.com,image
+||ohbayersbur.pro^
+
+! https://github.com/uBlockOrigin/uAssets/issues/7053
+||global.proper.io/salon.min.js$script,redirect=noopjs,domain=salon.com
+salon.com##.ad-topper
+
+! https://github.com/NanoMeow/QuickReports/issues/3203
+creditcardrush.com##+js(nostif, adsBlocked)
+||doubleclick.net/pagead/id$xhr,redirect=nooptext,domain=creditcardrush.com
+
+! https://github.com/NanoMeow/QuickReports/issues/3191
+! https://github.com/uBlockOrigin/uAssets/issues/16523
+@@||dynamicpapers.com^$ghide
+dynamicpapers.com##ins.adsbygoogle
+dynamicpapers.com##.ezoic-ad
+
+! https://github.com/NanoMeow/QuickReports/issues/3219
+newsmax.com##+js(set, fake_ad, true)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/50951
+@@||mintik.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/3220
+@@||playdoe.xyz^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/7061
+ockles.com##+js(nano-sib)
+duit.cc##+js(aopr, decodeURI)
+duit.cc##+js(acs, eval, ignielAdBlock)
+@@||duit.cc^$ghide
+*$image,redirect-rule=1x1.gif,domain=duit.cc|ockles.com
+duit.cc##[id*="ScriptRoot"], .adsbygoogle, .amp-unresolved
+
+! https://github.com/NanoMeow/QuickReports/issues/3226
+theouterhaven.net,watchallchannels.com,wikipekes.com##+js(acs, jQuery, ai_adb)
+semuanyabola.com##+js(acs, decodeURIComponent, ai_)
+watchallchannels.com##[href^="https://www.xvinlink.com/"]
+watchallchannels.com##.widget-title
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51029
+@@||seriesynovelas.online^$ghide
+seriesynovelas.online##+js(nowoif)
+
+! https://github.com/NanoMeow/QuickReports/issues/3230
+truyentranhaudio.online##+js(acs, jQuery, adblocker)
+
+! https://github.com/NanoMeow/QuickReports/issues/3233
+carbonite.co.za##+js(acs, $, AdBlock)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51063
+@@||romsforever.co^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51069
+interracial.com##+js(nowoif)
+interracial.com##[src^="https://www.interracial.com/player/html.php"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51099
+@@||memexcomputer.it^$ghide
+memexcomputer.it##ins.adsbygoogle
+
+! https://github.com/NanoMeow/QuickReports/issues/3237
+layarkaca21indo.com##+js(aopr, adBlockDetected)
+
+! https://github.com/NanoMeow/QuickReports/issues/2109
+! https://github.com/uBlockOrigin/uAssets/issues/14433
+@@||forbes.com^$ghide
+forbes.com##.vestpocket
+forbes.com##fbs-ad
+forbes.com##.ad-unit:not(.text-ad):not(.textads)
+forbes.com##.footer-ad-labeling
+forbes.com##.ad-rail
+! https://www.reddit.com/r/uBlockOrigin/comments/14d7npb/
+forbes.com##.ed-wrap.rafeed__block
+forbes.com###featured-partners
+! https://github.com/easylist/easylist/issues/15513
+forbes.com##.amp-ad-container
+
+||jootizud.net^
+
+! https://github.com/uBlockOrigin/uAssets/issues/10165
+*$3p,denyallow=google.com|googleapis.com|gstatic.com,domain=uplinkto.*
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51125
+! https://github.com/AdguardTeam/AdguardFilters/issues/51218
+porno-tour.*##+js(aopr, document.dispatchEvent)
+porno-tour.*##+js(nostif, innerText, 2000)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/459
+popcornstream.*##+js(nostif, blur)
+popcornstream.*##+js(aeld, , btoa)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51152
+oyungibi.com##+js(set, jQuery.adblock, false)
+
+! https://github.com/NanoMeow/QuickReports/issues/3251
+! https://github.com/NanoMeow/QuickReports/issues/4020
+turkmmo.com##+js(acs, $, AdBlock)
+turkmmo.com##+js(nostif, samOverlay)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51157
+@@||firefiles.org^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51160
+animealtadefinizione.it##+js(acs, addEventListener, adb)
+animealtadefinizione.it##+js(aopr, AaDetector)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51168
+jumpmanclubbrasil.com.br##+js(acs, addEventListener, nextFunction)
+jumpmanclubbrasil.com.br##.home-ad-con
+
+! rentbyowner .com popunder
+rentbyowner.com##+js(nowoif, !refine?search)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5189#issuecomment-596677601
+@@||psprices.com^$ghide
+psprices.com##[href*=".smartadserver.com"]
+psprices.com##body:style(background-color: white !important)
+
+! https://github.com/NanoMeow/QuickReports/issues/3257
+ikaza.net##+js(aopr, showAds)
+
+! anti adb zerozero .pt
+@@||zerozero.pt^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/3263
+tatangga.com##+js(acs, eval, AdBlock)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51244
+@@||torrentvhd.biz^$ghide
+||fegortius.com^$3p
+||weblion777.github.io^$3p
+*$xhr,3p,domain=torrentvhd.biz
+||torrentvhd.biz/sw.js$script,1p
+||corported.com^$3p
+||kataprius.com^
+torrentvhd.biz##center
+
+! https://github.com/NanoMeow/QuickReports/issues/3268
+itechfever.com##+js(nobab)
+
+! exoclick ads, popunder
+airsextube.com,asianbabestube.com,bigtitsxxxfree.com,blowjobpornset.com,entertubeporn.com,finexxxvideos.com,freesexvideos24.com,fuckhairygirls.com,gopornindian.com,grandmatube.pro,grannyfucko.com,grannyfuckxxx.com,hd-analporn.com,hiddencamhd.com,hindiporno.pro,indianbestporn.com,japanesemomsex.com,japanxxxass.com,massagefreetube.com,maturepussies.pro,megajapansex.com,new-xxxvideos.com,xxxblowjob.pro,xxxtubegain.com,xxxvideostrue.com,onlinegrannyporn.com,agedtubeporn.com,agedvideos.com,freebigboobsporn.com,tubeinterracial-porn.com,best-xxxvideos.com,bestanime-xxx.com,blowxxxtube.com,callfuck.com,teenhubxxx.com,tubepornasian.com,xxxtubedot.com,blowjobfucks.com,dirtyasiantube.com,maturewomenfucks.com,pornmaturetube.com,setfucktube.com,tourporno.com,do-xxx.com,dotfreesex.com,dotfreexxx.com,easymilftube.net,electsex.com,erospots.info,fineretroporn.com,freehqtube.com,freshmaturespussy.com,freshsexxvideos.com,fuckedporno.com,gallant-matures.com,hqhardcoreporno.com,getitinside.com,girlssexxxx.com,glamourxxx-online.com,vintagepornnew.com,tubevintageporn.com,goxxxvideos.com,grouppornotube.com,hqxxxmovies.com,hqsex-xxx.com,hqamateurtubes.com,hotpussyhubs.com,hdpornteen.com,indecentvideos.com,ifreefuck.com,kittyfuckstube.com,lightxxxtube.com,momstube-porn.com,modelsxxxtube.com,milfpussy-sex.com,nudistube.com,nudisteens.com,nudismteens.com,nude-beach-tube.com,nicexxxtube.com,neatpornodot.com,neatfreeporn.com,bigtitsporn-tube.com,tubehqxxx.com,nakedbbw-sex.com,onlineteenhub.com,online-xxxmovies.com,pussyhothub.com,pornxxxplace.com,pornoteensex.com,pornonote.pro,pornoaid.com,pornclipshub.com,whitexxxtube.com,sweetadult-tube.com,sweet-maturewomen.com,sexyoungclips.com,sexymilfsearch.com,sextubedot.com,hqmaxporn.com,sexlargetube.com,sexhardtubes.com,tubepornstock.com,xfuckonline.com##+js(noeval)
+airsextube.com,asianbabestube.com,bigtitsxxxfree.com,blowjobpornset.com,entertubeporn.com,finexxxvideos.com,freesexvideos24.com,fuckhairygirls.com,gopornindian.com,grandmatube.pro,grannyfucko.com,grannyfuckxxx.com,hd-analporn.com,hiddencamhd.com,hindiporno.pro,indianbestporn.com,japanesemomsex.com,japanxxxass.com,massagefreetube.com,maturepussies.pro,megajapansex.com,new-xxxvideos.com,xxxblowjob.pro,xxxtubegain.com,xxxvideostrue.com,acutetube.net,agedtubeporn.com,agedvideos.com,onlinegrannyporn.com,freebigboobsporn.com,tubeinterracial-porn.com,best-xxxvideos.com,bestanime-xxx.com,blowxxxtube.com,callfuck.com,teenhubxxx.com,tubepornasian.com,xxxtubedot.com,blowjobfucks.com,dirtyasiantube.com,maturewomenfucks.com,pornmaturetube.com,setfucktube.com,tourporno.com,do-xxx.com,dotfreesex.com,dotfreexxx.com,easymilftube.net,electsex.com,fineretroporn.com,freehqtube.com,freshmaturespussy.com,freshsexxvideos.com,fuckedporno.com,gallant-matures.com,hqhardcoreporno.com,getitinside.com,girlssexxxx.com,glamourxxx-online.com,vintagepornnew.com,tubevintageporn.com,goxxxvideos.com,grouppornotube.com,hqxxxmovies.com,hqsex-xxx.com,hqamateurtubes.com,hotpussyhubs.com,hdpornteen.com,indecentvideos.com,ifreefuck.com,kittyfuckstube.com,lightxxxtube.com,momstube-porn.com,modelsxxxtube.com,milfpussy-sex.com,nicexxxtube.com,neatpornodot.com,neatfreeporn.com,bigtitsporn-tube.com,tubehqxxx.com,nakedbbw-sex.com,onlineteenhub.com,online-xxxmovies.com,pussyhothub.com,pornxxxplace.com,pornoteensex.com,pornonote.pro,pornoaid.com,pornclipshub.com,whitexxxtube.com,sweetadult-tube.com,sweet-maturewomen.com,sexyoungclips.com,sexymilfsearch.com,sextubedot.com,hqmaxporn.com,sexlargetube.com,sexhardtubes.com,tubepornstock.com,xfuckonline.com##+js(aopr, Aloader.serve)
+activevoyeur.com,allbbwtube.com,alltstube.com,cockmeter.com##+js(acs, document.dispatchEvent, myEl)
+ariestube.com,asian-teen-sex.com,18asiantube.com,wholevideos.com,asianporntube69.com,babeswp.com,bangyourwife.com,bdsmslavemovie.com,bdsmwaytube.com,bestmaturewomen.com,classicpornvids.com,cockmeter.com,cocogals.com,pornpaw.com,dawntube.com,desihoes.com,desimmshd.com,dirtytubemix.com,plumperstube.com,enormousbabes.net,erowall.com,exclusiveindianporn.com,figtube.com,amateur-twink.com,freeboytwinks.com,freegrannyvids.com,freexmovs.com,freshbbw.com,frostytube.com,fuckhottwink.com,fuckslutsonline.com,gameofporn.com,gayboyshd.com,getitinside.com,giantshemalecocks.com,erofus.com,hd-tube-porn.com,hardcorehd.xxx,hairytwat.org,iwantmature.com,justababes.com,juicyflaps.com,jenpornuj.cz,javteentube.com,hard-tube-porn.com,klaustube.com,kaboomtube.com,lustyspot.com,lushdiaries.com,lovelynudez.com,dailyangels.com,ljcam.net,myfreemoms.com,mybestxtube.com,nakenprat.com,oosex.net,oldgrannylovers.com,ohueli.net,pornuploaded.net,pornstarsadvice.com,alotporn.com,bobs-tube.com,pornohaha.com,pornmam.com,pornhegemon.com,pornabcd.com,porn-hd-tube.com,pandamovies.pw,teensporn.tv,thehentaiworld.com,pantyhosepink.com,queenofmature.com,realvoyeursex.com,realbbwsex.com,rawindianporn.com,onlygoldmovies.com,rainytube.com,stileproject.com,slutdump.com,nastybulb.com,babesinporn.com,wantedbabes.com,sextube-6.com,porntubegf.com,sassytube.com,smplace.com,maturell.com,nudemilfwomen.com,pornoplum.com,widewifes.com,wowpornlist.xyz,vulgarmilf.com,oldgirlsporn.com,freepornrocks.com,desivideos.*##+js(aopr, document.dispatchEvent)
+8teenxxx.com,activevoyeur.com,allschoolboysecrets.com,boobsforfun.com,breedingmoms.com,cockmeter.com,collegeteentube.com,cumshotlist.com,porn0.tv,ritzysex.com,ritzyporn.com,sexato.com,javbobo.com,sokobj.com##+js(aopr, ExoLoader.serve)
+bdsmporntub.com,femdomporntubes.com##+js(aopr, Popunder)
+comicxxx.eu##^meta[http-equiv="refresh"]
+comicxxx.eu###dclm_modal_content
+comicxxx.eu##*:style(filter: none !important)
+comicxxx.eu###dclm_modal_screen
+||be-well.es^
+blowjobgif.net##+js(aopr, ExoDetector)
+favefreeporn.com,onlygayvideo.com,peachytube.com,stepsisterfuck.me##+js(aopr, ExoLoader.addZone)
+decorativemodels.com,erowall.com,freyalist.com,guruofporn.com,jesseporn.xyz,kendralist.com,vipergirls.to,lizardporn.com,wantedbabes.com,bustybloom.com,exgirlfriendmarket.com,nakedneighbour.com##+js(aopr, loadTool)
+comicxxx.eu,mybestxtube.com,onlyhgames.com,pornobengala.com,pornicom.com,xecce.com,teensporn.tv,pornlift.com,reddflix.com,superbgays.com##+js(aopr, open)
+classicpornbest.com,desihoes.com,indianpornvideo.org,porn18sex.com,slaughtergays.com,sexiestpicture.com##+js(aopr, decodeURI)
+classicpornbest.com##+js(aeld, popstate)
+classicpornbest.com##+js(aopr, localStorage)
+embedy.me##+js(nowoif, !embedy)
+reddflix.com##+js(aopr, LieDetector)
+erospots.info##+js(aopr, Pub2)
+gameofporn.com##+js(aeld, , exopop)
+jemontremonminou.com,jemontremasextape.com,jemontremabite.com##+js(aopr, localStorage)
+porndollz.com,xnxxvideo.pro,xvideosxporn.com,onlyhgames.com,filmpornofrancais.fr,pictoa.com##+js(aeld, getexoloader)
+nackte.com##+js(aopr, jsUnda)
+older-mature.net##+js(aopr, doOpen)
+canalporno.com,dreamamateurs.com,eroxia.com,porndoe.com,pornozot.com##+js(aopr, ExoLoader)
+alotporn.com##+js(aopw, __htapop)
+alotporn.com##+js(aopr, console.clear)
+bobs-tube.com##+js(nostif, innerText, 2000)
+bobs-tube.com##+js(set, flashvars.mlogo, '')
+bobs-tube.com##.adv_nad_player
+bobs-tube.com##.sponsored_top
+dreamamateurs.com##+js(popads-dummy)
+pornforrelax.com##+js(aopr, adver.abFucker.serve)
+pornforrelax.com##+js(aeld, , _blank)
+fatwhitebutt.com,smplace.com,slaughtergays.com,sexiestpicture.com,sassytube.com,vipergirls.to,xh.video##+js(nowoif)
+fatwhitebutt.com##+js(aeld, , _blank)
+freepornrocks.com##+js(aeld, , open)
+tubev.sex##+js(aopw, displayCache)
+tubev.sex##[class^="sp_block"]
+pictoa.com##+js(aeld, , 0x)
+lovelynudez.com##+js(aopr, popit)
+javbobo.com,nudismteens.com##+js(aopr, exoNoExternalUI38djdkjDDJsio96)
+*$script,3p,denyallow=fluidplayer.com|jwpcdn.com|wp.com|cdn77.org|facebook.com|facebook.net|fbcdn.net|instagram.com|disqus.com|disquscdn.com|jwpsrv.com|plyr.io|jsdelivr.net|twimg.com|twitter.com|fastly.net|fastlylb.net|jquery.com|hwcdn.net|hcaptcha.com|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com,domain=filmpornofrancais.fr
+
+||classicpornbest.com^$csp=script-src *
+*$script,xhr,3p,domain=lovelynudez.com
+||teenhooker.net^$frame,1p
+*$script,3p,domain=classicpornbest.com
+classicpornbest.com##.h-bns-bl
+||youvideoporno.mobi^$3p
+||nudismteens.com/tensnuddy.js
+||javbobo.com/little-hall-f39d/
+||pornpaw.com/never.js
+
+comicxxx.eu###tracking-url
+dirtytubemix.com##.on-video-dark
+boobsforfun.com##.adcontainer
+breedingmoms.com##.embaners
+breedingmoms.com##.h-bn
+pornpaw.com##.ipprtcnt
+pornpaw.com##div[style="height:250px;display:block;"]
+erospots.info##.custom-html-widget.textwidget
+amateur-twink.com##.banner
+amateur-twink.com##.pl_adv
+freyalist.com##.stripper
+ftopx.com##.advert
+fuckedporno.com##.bannersinner
+fuckhardporn.com##.player_ad_block
+fuckhardporn.com###player_adv_start
+fuckhardporn.com###skim
+gameofporn.com###container
+gameofporn.com##.block-pub-side
+cockmeter.com###alfa_promo_parent
+||girlscanner.cc/check.php
+girlscanner.cc##[href*="/check.php"]
+girlscanner.cc##div.side-box
+vipergirls.to##[src="files/se.gif"]
+vipergirls.to##.body_wrapper > [id^="ad_global"], #notices.notices
+mrsexe.com###disclaimer
+mrsexe.com##.reveal-modal-bg
+mrsexe.com###exovid
+mrsexe.com##.vjs-poster
+xnxxvideo.pro##.video-archive-ad
+xvideosxporn.com##[href*="bawafx.com/"]
+pornstarsadvice.com##.banners
+bobs-tube.com##.advertising
+bobs-tube.com##.player-related-videos
+bobs-tube.com##.adv
+pornforrelax.com##.vda-item
+porn613.net##[src="about:blank"]
+superbgays.com###block
+superbgays.com###CloseAd
+@@||bobs-tube.com/player/player_ads.html$1p
+dreamamateurs.com##[href^="http://ezofferz.com/"]
+*$frame,domain=sexrura.pl
+pictoa.com###tab-gallery
+pictoa.com###tab-footer
+||bo4news.biz^
+||bobs-tube.com/sw$script,1p
+||checking-your-browser.com^
+||crentgate.com^
+||obitube.com^$frame,1p
+||redtub3xxx.com^$frame,1p
+
+##.bloc-pub
+##.bloc-pub2
+###invideo_data
+*/api/spots/$frame,script
+/api/spots/*^fill=$xhr
+/api/spots/*&kw=$xhr
+###invideo_2
+##.hor_banner
+###invid_call
+###invideo_new
+##.aan_fake
+##.aan_fake__video-units
+##.rps_player_ads
+##[src^="//dombnrs.com/"]
+*.gif$domain=javbobo.com,image
+/frtd_ldr_$script,1p
+/bknd_ldr_$script,1p
+pornoplum.com,vulgarmilf.com,oldgirlsporn.com,maturell.com,nakedolders.com,nudemilfwomen.com,widewifes.com##iframe:upward(2)
+besttwinkass.com##[class*="_Bns"]
+nylonbabez.net,nylonpornpictures.net,stockingspornpics.com##.preview:has(.nat-block)
+||sexrura.com^$frame,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/3280
+acdriftingpro.com##+js(nostif, offsetHeight)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51340
+urlpay.net##+js(nano-sib)
+urlpay.net##^script:has-text('shift')
+urlpay.net##^script:has-text(\'shift\')
+urlpay.net##+js(acs, String.fromCharCode, 'shift')
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51332
+olinevid.com###layerName_preroll, #layerName_postroll
+*$script,redirect-rule=noopjs,domain=olinevid.com
+@@||olinevid.com^$ghide
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=olinevid.com
+
+! https://github.com/NanoMeow/QuickReports/issues/3286
+sekilastekno.com##+js(aopr, app_vars.force_disable_adblock)
+sekilastekno.com##+js(nowoif, wapka)
+sekilastekno.com##+js(no-fetch-if, ads)
+sekilastekno.com##[href^="https://poptival.com/direct"]
+sekilastekno.com##+js(set, blurred, false)
+||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect=noopjs:10,domain=apk.sekilastekno.com
+apk.sekilastekno.com##[href="https://www.tautan.pro/"]
+apk.sekilastekno.com##[href^="https://www.poptival.com/direct"]
+apk.sekilastekno.com##[width="200"][height="60"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/fhkx7s/theracecom_detecting_adblock/
+@@||the-race.com^$ghide
+the-race.com##.ad_container_default
+
+! https://github.com/NanoMeow/QuickReports/issues/3282
+savealoonie.com##+js(aopr, mdp_deblocker)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51422
+@@||mangafeeds.com^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/7097
+tempr.email##+js(set, adblock, false)
+tempr.email###HeaderBanner
+
+! https://github.com/uBlockOrigin/uAssets/issues/9779
+teenager365.com##+js(acs, document.addEventListener, adsbygoogle)
+teenager365.com##.video-archive-ad
+
+! https://github.com/NanoMeow/QuickReports/issues/3290
+lkc21.net##+js(aopr, AaDetector)
+lkc21.net##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51446
+@@||musicpremieres.com^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51555
+iptvspor.com##+js(aopr, adBlockDetected)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51556
+plugincim.com##+js(aopr, adBlockDetected)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51557
+fivemturk.com##+js(aopr, adBlockDetected)
+fivemturk.com##[src^="https://i.hizliresim.com/"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51558
+sosyalbilgiler.net##+js(aopr, adBlockDetected)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51563
+nadidetarifler.com##+js(set, koddostu_com_adblock_yok, null)
+nadidetarifler.com##.advert-side
+
+! https://github.com/NanoMeow/QuickReports/issues/3312
+hwreload.it##+js(acs, $, show)
+
+! https://github.com/NanoMeow/QuickReports/issues/3314
+suzylu.co.uk##+js(set, adsbygoogle, trueFunc)
+suzylu.co.uk##+js(set, player.ads.cuePoints, undefined)
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=suzylu.co.uk
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51615
+@@||alfaloji.org^$ghide
+alfaloji.org##ins.adsbygoogle
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51629
+lenkino.*##+js(nostif, innerText, 2000)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/fjsj2c/block_ads_on_mailde_debug_to_find_a_filter/
+mail.de###euccBanner
+
+! https://www.reddit.com/r/uBlockOrigin/comments/fjud23/adblock_detector_on_positivefeedback/
+positive-feedback.com##.ad-row-horizontal
+positive-feedback.com##.banner-right
+positive-feedback.com##.right-ad-wrapper
+positive-feedback.com##.archive_ad_block
+positive-feedback.com##.load-screen
+
+! https://github.com/NanoMeow/QuickReports/issues/3318
+medicalnewstoday.com##div[id="__next"] > div[class^="css-"] > div > section > div:matches-css-before(content: /ADVERTISEMENT/)
+medicalnewstoday.com##div[id="__next"] > div[class^="css-"] > aside:has(> div:matches-css-before(content: /ADVERTISEMENT/))
+medicalnewstoday.com##div[data-dynamic-ads]
+medicalnewstoday.com##div[class^="css-"]:matches-css-before(content: /ADVERTISEMENT/)
+medicalnewstoday.com##hl-adsense
+medicalnewstoday.com##.css-rp3d6
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51656
+pekalongan-cits.blogspot.com##+js(aeld, load, nextFunction)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51665
+cheatglobal.com##+js(acs, addEventListener, nextFunction)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51674
+mega-hentai2.blogspot.com##+js(aopr, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7110
+macrumors.com##+js(aopr, adthrive)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51673
+underhentai.net##+js(nano-sib)
+underhentai.net##+js(nowoif, !t.me)
+underhentai.net##.hidden-sm
+underhentai.net##.visible-xs
+underhentai.net##[onclick^="window.open('https://landing."]
+underhentai.net##.sidebar > div[class] > .loading
+||adf.underhentai.net^$frame,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51683
+palermotoday.it##+js(nostif, bADBlock)
+
+! https://github.com/NanoMeow/QuickReports/issues/3321
+discordfastfood.com##+js(nostif, clientHeight)
+
+! https://github.com/NanoMeow/QuickReports/issues/3324
+||googlesyndication.com/pagead/js/adsbygoogle.js$xhr,redirect-rule=noopjs,domain=btgyama.blogspot.com
+*$script,domain=btgyama.blogspot.com,redirect-rule=noopjs
+
+! https://github.com/NanoMeow/QuickReports/issues/2649
+thumpertalk.com##+js(nostif, location)
+*$xhr,redirect-rule=nooptext,domain=thumpertalk.com
+@@||thumpertalk.com^$ghide
+thumpertalk.com##.focus-ad
+
+! https://forums.lanik.us/viewtopic.php?f=96&t=44455
+facciabuco.com##+js(nostif, , 4000)
+
+! https://github.com/NanoMeow/QuickReports/issues/3323
+@@||customercareal.com^$ghide
+customercareal.com##a[id^="actionlinkid_"]
+customercareal.com###locked_action_link.disabled:style(cursor:pointer !important; opacity:1 !important; pointer-events:auto !important)
+customercareal.com##+js(nano-sib)
+
+! https://github.com/NanoMeow/QuickReports/issues/3332
+miniurl.*##+js(aopr, app_vars.force_disable_adblock)
+miniurl.*##+js(set, blurred, false)
+miniurl.*##.banner
+miniurl.*##div[style="width:970px;height:90px;display: inline-block;margin: 0 auto"]
+*$script,3p,denyallow=google.com|gstatic.com|recaptcha.net,domain=miniurl.*
+||miniurl.*/sw.js$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51713
+arabic-robot.blogspot.com##+js(acs, document.createElement, adblock)
+arabic-robot.blogspot.com###preloader
+
+! https://github.com/NanoMeow/QuickReports/issues/3334
+@@||nsfwmega.com^$ghide
+
+! popups https://forums.lanik.us/viewtopic.php?f=64&t=44458
+mavanimes.co##+js(aopr, AaDetector)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51785
+freegogpcgames.com##+js(nowoif)
+freegogpcgames.com##+js(no-xhr-if, googlesyndication)
+freegogpcgames.com##+js(nostif, show)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51787
+@@||nxmac.com^$ghide
+nxmac.com##.alert-errors.in.fade.alert
+nxmac.com##ins.adsbygoogle
+
+! rizaldi.web.id anti-adb
+@@||rizaldi.web.id^$ghide
+
+! smiechawatv.pl anti-adb
+smiechawatv.pl##+js(nowoif)
+smiechawatv.pl##[href^="http://smiechawatv.cupsell.pl/"]
+smiechawatv.pl##[href^="https://www.cda.pl/smiechawaTV/"]
+
+! digitalrev4u.com anti-adb
+digitalrev4u.com##.header_banner
+digitalrev4u.com##[href^="https://shop.olympus.eu/"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51807
+gun-otaku.blogspot.com##+js(aopr, adBlockDetected)
+gun-otaku.blogspot.com###HTML16
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51819
+@@||get-digital-help.com^$ghide
+get-digital-help.com##.ezoic-ad
+get-digital-help.com##.adthrive-ad
+
+! nefree .com anti adb
+@@||nefree.com^$ghide
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ffss3e/detected_by_blockadblock/fkxdi7k/
+onworks.net##+js(set, adBlockDetected, null)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51828
+pdfkitapp.com##+js(aopr, adBlockDetected)
+pdfkitapp.com##.clearfix.container.header-main
+
+! dlapk4all .com popups
+dlapk4all.com##+js(aopr, glxopen)
+dlapk4all.com##+js(aeld, , _0x)
+apk4all.com##.control.field > .is-danger.button
+
+! 4tymode. win anti adb
+4tymode.win##+js(aeld, load, nextFunction)
+
+! https://github.com/NanoMeow/QuickReports/issues/3347
+@@||watchonlyfoolsandhorses.com^$ghide
+watchonlyfoolsandhorses.com##[id*="ScriptRoot"]
+watchonlyfoolsandhorses.com##.module_single_ads
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/462
+@@||brownsboys.com^$ghide
+@@||mrsbrownsb.blogspot.com^$ghide
+mrsbrownsb.blogspot.com##.section.featured-post
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51905
+qpython.club##+js(aeld, DOMContentLoaded, AdBlock)
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=44471
+galvinconanstuart.blogspot.com##+js(acs, $, open)
+
+! https://forums.lanik.us/viewtopic.php?p=153698#p153698
+freep.com##+js(set, adsEnabled, true)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51923
+@@||robloxexploitz.com^$ghide
+robloxexploitz.com##ins.adsbygoogle
+
+! https://github.com/NanoMeow/QuickReports/issues/3358
+downloadsoft.net##+js(acs, document.createElement, adblock)
+downloadsoft.net##+js(set, better_ads_adblock, 1)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51961
+@@||teledyski.info^$ghide
+teledyski.info###r-s1
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51973
+@@||tudogamesbr.com^$ghide
+tudogamesbr.com##+js(nowoif)
+tudogamesbr.com##+js(nano-stb, /.?/, , 0.02)
+
+! songsio. com popup
+*$script,3p,domain=songsio.com
+||nfxktxuwx.com^
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/51985
+faupto.com##+js(aopr, show_ads_gr8_lite)
+dogemate.com##+js(nowoif)
+dogemate.com##+js(acs, $, .filter)
+faupto.com,dogemate.com##+js(aopr, disableButtonTimer)
+faupto.com##+js(nano-sib)
+*$frame,script,3p,denyallow=bootstrapcdn.com|consensu.org|google.com|gstatic.com|hcaptcha.com|hwcdn.net|jquery.com|recaptcha.net|wp.com,domain=faupto.com
+*$3p,script,frame,denyallow=bootstrapcdn.com|cloudflare.com|google.com|googleapis.com|gstatic.com|hcaptcha.com|hwcdn.net|jquery.com|recaptcha.net,domain=dogemate.com
+faupto.com##[href^="https://brave.com"]
+faupto.com##.shadow.bg-dark
+dogemate.com##div[class][style="width:300px;height:250px;display: inline-block;margin: 0 auto"]
+@@||dogemate.com/banner/$image,1p
+dogemate.com##img[id^="ads-"]:style(visibility: hidden !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10608
+claimcrypto.cc##+js(aopr, app_vars.force_disable_adblock)
+claimcrypto.cc##+js(aopr, adBlockDetected)
+claimcrypto.cc##[class^="bmadblock"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/7139
+@@||sledujserialy.*^$script,1p
+||sledujserialy.*/theme/json/episode.ad.php^$frame
+sledujserialy.*##div[id][style="position: absolute; top: 0; left: 0; width: 100%; height: 380px; text-align: center;"]
+sledujserialy.*###super_secret_ad
+
+! https://github.com/NanoMeow/QuickReports/issues/3369
+@@||taiba-dz.blogspot.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/3370
+onnime.net##+js(aopr, AaDetector)
+
+! https://github.com/NanoMeow/QuickReports/issues/3372
+softx64.com##+js(nostif, blocker, 100)
+
+! nysainfo.pl anti-adb
+nysainfo.pl##+js(aopr, mdpDeBlocker)
+nysainfo.pl###mdp-deblocker-js-disabled
+
+! napolipiu.com anti-adb
+napolipiu.com##+js(aopr, tie)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52076
+manpeace.org##+js(aopr, document.write)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/463
+@@||judicialcaselaw.com^$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52152
+@@||boardgamesonline.net^$ghide
+boardgamesonline.net##ins.adsbygoogle
+
+! anti adb games.newsobserver .com
+newsobserver.com##+js(set, Adv_ab, false)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/488
+! https://www.reddit.com/r/uBlockOrigin/comments/y5nbir
+findandfound.ga,png.is##+js(aopr, adb_checker)
+nohat.cc,png.is##+js(aopr, ignore_adblock)
+png.is,nohat.cc##+js(aopr, $.prototype.offset)
+png.is,nohat.cc##+js(no-fetch-if, adsbygoogle)
+findandfound.ga##+js(aopr, $.prototype.html)
+findandfound.ga##+js(aopr, onload)
+findandfound.ga##+js(ra, oncontextmenu, body)
+||nohat.me^$3p
+@@||nohat.me/s?*k=$xhr,domain=png.is|nohat.cc
+
+! line25 .com popunder
+line25.com##+js(aopr, decodeURI)
+
+! https://github.com/NanoMeow/QuickReports/issues/3395
+! https://github.com/NanoMeow/QuickReports/issues/3404
+hmc-id.blogspot.com,jemerik.com##+js(nostif, AdBlock)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/foskpy/visual_of_videos_blocked/
+noxx.to##+js(aopr, AaDetector)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52225
+thelayoff.com##+js(nostif, alert)
+thelayoff.com##.epp-bf
+
+! https://github.com/uBlockOrigin/uAssets/issues/7153
+fuskator.com##+js(aopr, ea.add)
+fuskator.com##+js(noeval)
+
+! https://github.com/NanoMeow/QuickReports/issues/3401
+bostoncommons.net##+js(aopr, eddOptions)
+bostoncommons.net##+js(aopr, LieDetector)
+bostoncommons.net##+js(nostif, adsBlocked)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52266
+e9china.net##+js(aeld, load, blocker)
+
+! https://github.com/NanoMeow/QuickReports/issues/3403
+isminiunuttum.com##+js(acs, document.getElementById, block)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52305
+@@||bigbrothercanada.ca^$ghide
+*$script,redirect-rule=noopjs,domain=bigbrothercanada.ca
+bigbrothercanada.ca##.video-adTile
+bigbrothercanada.ca##.adWrapper
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/468
+@@||bolognatoday.it^$ghide
+
+! newtorrentgame .com popups
+||d2klx87bgzngce.cloudfront.net^$script,redirect=noopjs
+newtorrentgame.com##^script:has-text('shift')
+newtorrentgame.com##^script:has-text(\'shift\')
+
+||allbloggingtips.com^$3p
+
+! sunbtc.space anti-adb
+@@||sunbtc.space^$ghide
+sunbtc.space##+js(set, adBlock, false)
+
+! ero18.cc anti-adb/popups/ads
+@@||ero18.cc^$ghide
+ero18.cc##[href^="https://rapidgator.net/"]
+
+! pstream .net anti adb / example: https://www.pstream .net/e/KJxQ2W0P91WW00L
+! https://github.com/NanoMeow/QuickReports/issues/3815
+pstream.net##+js(acs, String.fromCharCode, atob)
+pstream.net##+js(nosiif, length)
+pstream.net##+js(nostif, length)
+pstream.net##+js(nowebrtc)
+pstream.net##+js(nowoif)
+pstream.net##head:has(style[id*="videojs"]) + body > *:not(.video-js)
+@@||pstream.net^$ghide
+@@||pstream.net^$xhr,1p
+*$script,1p,redirect-rule=noopjs,domain=pstream.net
+||lologhfd.com^$all
+
+! https://github.com/uBlockOrigin/uAssets/issues/7163
+suanoticia.online##+js(nano-sib)
+bibliotechsuper.com##[href="https://bibliotechsuper.com/"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52409
+shurt.pw##+js(aopr, app_vars.force_disable_adblock)
+shurt.pw##+js(aopw, adcashMacros)
+shurt.pw##+js(nowoif)
+shurt.pw##body > div[style]:has(input[type="button"])
+shurt.pw##div[style*="z-index:99999"] > div[style*="width:300px"]
+*$frame,denyallow=google.com|hcaptcha.com,domain=shurt.pw
+*$script,3p,denyallow=google.com|gstatic.com|hcaptcha.com|jsdelivr.net|recaptcha.net,domain=shurt.pw
+||vdo.ai^$3p
+||short.pe^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/fqjltj/podcast_advert/
+art19.com##+js(json-prune, ad_pods.0.ads.0.segments.0.media ad_pods.1.ads.1.segments.1.media ad_pods.2.ads.2.segments.2.media ad_pods.3.ads.3.segments.3.media ad_pods.4.ads.4.segments.4.media ad_pods.5.ads.5.segments.5.media ad_pods.6.ads.6.segments.6.media ad_pods.7.ads.7.segments.7.media ad_pods.8.ads.8.segments.8.media)
+art19.com##.art19-notifications-list
+
+! https://github.com/NanoMeow/QuickReports/issues/3409
+||marketbeat.com/scripts/modal/*
+marketbeat.com##+js(aeld, mouseleave, NativeDisplayAdID)
+marketbeat.com###mb-bar
+marketbeat.com##[id*="pnlAd"]
+marketbeat.com##a[href*="NativeDisplayAdID"]
+
+! https://github.com/NanoMeow/QuickReports/issues/3422
+linkconfig.com##+js(nano-sib)
+
+! https://github.com/NanoMeow/QuickReports/issues/3426
+*$script,redirect-rule=noopjs,domain=onbatch.my.id
+@@||onbatch.my.id^$ghide
+onbatch.my.id##[id*="ScriptRoot"]
+
+! https://github.com/NanoMeow/QuickReports/issues/3427
+jkoding.xyz##+js(nostif, _0x)
+
+! bt4g.unblocked .to popups
+bt4g.unblocked.to##+js(aopr, open)
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/470
+@@||controlc.com^$ghide
+||twitch.tv^$xhr,3p,domain=controlc.com
+controlc.com##[href^="http://redact.dev"]
+
+! https://github.com/NanoMeow/QuickReports/issues/3430
+@@||sharing.wtf^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/10788
+legendas.dev##+js(refresh-defuser)
+investnewsbrazil.com##+js(nano-stb, contador, *, 0.001)
+investnewsbrazil.com##+js(acs, Light.Popup.create)
+||oyesrhweyma.com^
+
+! https://github.com/NanoMeow/QuickReports/issues/3432
+libreriamo.it##+js(nostif, ai_adb)
+
+! boost.ink link-hijack // boost.ink/ia7o
+boost.ink##+js(disable-newtab-links)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52499
+! https://github.com/AdguardTeam/AdguardFilters/issues/116034
+@@||easyexploits.com^$ghide
+easyexploits.com##+js(aopr, mm)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52512
+*$script,redirect-rule=noopjs,domain=fishki.net
+@@||fishki.net^$ghide
+fishki.net###privacypolicy
+
+! https://github.com/NanoMeow/QuickReports/issues/3439
+dailymaverick.co.za##+js(nostif, t(), 0)
+
+! https://github.com/NanoMeow/QuickReports/issues/3446
+notiziemusica.it##+js(aopw, adBlockDetected)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7343
+dood.*,doods.pro,dooood.*,ds2play.com##+js(aopw, DoodPop)
+d0o0d.com,do0od.com,dood.*,ds2video.com##+js(acs, decodeURI, decodeURIComponent)
+dood.*##+js(aopr, __aaZoneid)
+d0o0d.com,do0od.com,dood.*,doods.pro,dooood.*,ds2play.com,ds2video.com##+js(nowoif)
+d0o0d.com,do0od.com,dood.*,doods.pro,doodstream.*,dooood.*,ds2play.com,ds2video.com##+js(rmnt, script, /adblock|popunder/)
+d0o0d.com,do0od.com,dood.*,doods.pro,doodstream.*,dooood.*,ds2play.com,ds2video.com##^script:has-text(/adblock|popunder/)
+/sw.js$script,domain=d0o0d.com|do0od.com|dood.*|doods.pro|dooood.*|ds2play.com|ds2video.com
+||declareave.com^
+||dexchangegenius.com^
+$popup,3p,domain=ds2play.com,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/7175
+androgamer.org##+js(acs, jQuery, ai_adb)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52613
+@@||fiches-auto.fr^$ghide
+fiches-auto.fr###bulle_avvis
+fiches-auto.fr##.adsbygoogle:style(visibility: collapse !important)
+
+! https://github.com/NanoMeow/QuickReports/issues/3451
+ludigames.com##+js(nostif, ads)
+
+! pixsera
+! https://github.com/uBlockOrigin/uAssets/issues/7180
+! https://github.com/uBlockOrigin/uAssets/issues/9123
+imgair.net,imgblaze.net,imgfrost.net,pixsera.net,vestimage.site,imgwia.buzz,pixlev.*##+js(nano-sib, timer)
+imgair.net,imgblaze.net,imgfrost.net,pixsera.net,vestimage.site,imgwia.buzz,pixlev.*##+js(nowoif, !/prcf.fiyar|themes|pixsense|.jpg/)
+imgair.net,imgblaze.net,imgfrost.net,pixsera.net,vestimage.site,imgwia.buzz,pixlev.*##+js(set, hold_click, false)
+imgair.net,imgblaze.net,imgfrost.net,pixsera.net,vestimage.site,imgwia.buzz,pixlev.*##div[id][style^="position: fixed; display: block; width: 100%;"]
+*$frame,script,3p,denyallow=googleapis.com,domain=imgair.net|imgblaze.net|imgfrost.net|pixsera.net|vestimage.site|imgwia.buzz|pixlev.*
+@@/wp-content/plugins/eazy-ad-unblocker/*$script,domain=imgair.net|imgblaze.net|imgfrost.net|pixsera.net|vestimage.site|imgwia.buzz|pixlev.*
+@@||imgair.net^$script
+nemenlake.*##+js(nowoif)
+||hottracker.biz^
+||explorads.xml-v4.ak-is2.net^
+||expmdiadi.com^
+||vehavings.biz^
+||antoiew.com^
+||kooolboomin.com^
+||shyvanas.top^$all
+||linksprf.com^$3p
+||searchwithme.net^
+||shacsda.name^$3p
+||ghostsinstance.com^
+||genishury.pro^$popup
+
+imgpiluka.website,imgxhtue.website,imgpuloki.online,imgmilu.store,picliume.store,pixmela.online,imgpukrr.site,picuekr.site,pixotor.cfd,imgmgh.site,imgnefl.site,imglekw.site,imgsdi.site,imgneor.store,imgsdi.store,imgpukxxr.site,imgsdi.website,imgsxo.site,imgxto.store,imgutkr.store,imghhr.online,imglaiw.store,imgotw.store,imgpai.online,imgqyrew.store,imgutkr.online,imgvue.online,imgxgf.store,imgxqy.online,imgbibam.online,imgngf.online,imgqaz.online,imgulur.online,imgurj.online,imgurt.online,imgwtz.online,imgwxr.online,imgwzr.online,imgyre.online,imgbak.store,imgbek.store,picler.store,piclerx.store,piclerz.store,pixlev.store,pixmax.store,pixmex.store,imgbaex.store,imgbah.online,imgbaie.online,imgbango.store,imgbier.store,imgbimn.store,imgbqw.store,imgbuba.online,imgbwe.store,imgbxs.online,imgcao.store,imgnwe.online,imgqge.store,imgqxb.online,imgteq.online,imgtex.online,imgtuta.online,imgwqr.online,imgwww.store,imgxza.store,imgezx.sbs,imgbcxsb.store,imgbcxs.store,imgbake.cfd,imgmffg.sbs,imgmffgtr.sbs,imgnbg.sbs,imgngc.sbs,imgnmh.cfd,imgqte.sbs,imguthes.sbs,imgwag.cfd,imgwang.cfd,imgwety.sbs,imgxuh.cfd,imgxytw.cfd,imgycgey.sbs,imgyruy.cfd,imgyusa.cfd,imgyyqey.sbs,imgyer.store,imgxhs.store,imgwekr.online,imgwbfh.online,imgwak.online,imgutry.online,imgutiyu.online,imgutbbn.online,imgubfd.online,imgrei.online,imgqec.online,imgpaiou.online,imgpaiki.online,imgmjj.store,imgfa.store,imgbutrt.store,imgbty.store,imgbdl.store,imgngh.sbs,imgbbfg.pics,imgjhrjjr.pics,imgleko.pics,imgluki.pics,imgnffe.pics,imgnnnf.pics,imgrwqz.pics,imgtweqz.pics,imgxzgf.pics,imgyyeryt.pics,picbbc.one,picbbdr.one,picbest.one,picbhrt.one,picnrrt.one,picqqw.one,picqr.one,picqtwe.one,picsjre.one,piczzaq.one,imgqazx.sbs,imgiruyw.online,picnerr.cfd,pichfer.cfd,picbbeq.cfd,picqaxs.cfd,picxxdd.cfd,picqweff.cfd,pickjsn.cfd,piczzxsw.cfd,picbbbde.cfd,picbdd.cfd,imgbahxg.sbs,imgxune.sbs,imgqklw.shop,pixqkhgrt.shop,pixqbngg.shop,pixqwet.shop,pixmos.shop,imgtgd.shop,imgcsxx.shop##+js(aopr, console.clear)
+imgpiluka.website,imgxhtue.website,imgpuloki.online,imgmilu.store,picliume.store,pixmela.online,imgpukrr.site,picuekr.site,pixotor.cfd,imgmgh.site,imgnefl.site,imglekw.site,imgsdi.site,imgneor.store,imgsdi.store,imgpukxxr.site,imgsdi.website,imgsxo.site,imgxto.store,imgutkr.store,imghhr.online,imglaiw.store,imgotw.store,imgpai.online,imgqyrew.store,imgutkr.online,imgvue.online,imgxgf.store,imgxqy.online,imgbibam.online,imgngf.online,imgqaz.online,imgulur.online,imgurj.online,imgurt.online,imgwtz.online,imgwxr.online,imgwzr.online,imgyre.online,imgbak.store,imgbek.store,picler.store,piclerx.store,piclerz.store,pixlev.store,pixmax.store,pixmex.store,imgbaex.store,imgbah.online,imgbaie.online,imgbango.store,imgbier.store,imgbimn.store,imgbqw.store,imgbuba.online,imgbwe.store,imgbxs.online,imgcao.store,imgnwe.online,imgqge.store,imgqxb.online,imgteq.online,imgtex.online,imgtuta.online,imgwqr.online,imgwww.store,imgxza.store,imgezx.sbs,imgbcxsb.store,imgbcxs.store,imgbake.cfd,imgmffg.sbs,imgmffgtr.sbs,imgnbg.sbs,imgngc.sbs,imgnmh.cfd,imgqte.sbs,imguthes.sbs,imgwag.cfd,imgwang.cfd,imgwety.sbs,imgxuh.cfd,imgxytw.cfd,imgycgey.sbs,imgyruy.cfd,imgyusa.cfd,imgyyqey.sbs,imgyer.store,imgxhs.store,imgwekr.online,imgwbfh.online,imgwak.online,imgutry.online,imgutiyu.online,imgutbbn.online,imgubfd.online,imgrei.online,imgqec.online,imgpaiou.online,imgpaiki.online,imgmjj.store,imgfa.store,imgbutrt.store,imgbty.store,imgbdl.store,imgngh.sbs,imgbbfg.pics,imgjhrjjr.pics,imgleko.pics,imgluki.pics,imgnffe.pics,imgnnnf.pics,imgrwqz.pics,imgtweqz.pics,imgxzgf.pics,imgyyeryt.pics,picbbc.one,picbbdr.one,picbest.one,picbhrt.one,picnrrt.one,picqqw.one,picqr.one,picqtwe.one,picsjre.one,piczzaq.one,imgqazx.sbs,imgiruyw.online,picnerr.cfd,pichfer.cfd,picbbeq.cfd,picqaxs.cfd,picxxdd.cfd,picqweff.cfd,pickjsn.cfd,piczzxsw.cfd,picbbbde.cfd,picbdd.cfd,imgbahxg.sbs,imgxune.sbs,imgqklw.shop,pixqkhgrt.shop,pixqbngg.shop,pixqwet.shop,pixmos.shop,imgtgd.shop,imgcsxx.shop##+js(nano-sib, timer)
+imgpiluka.website,imgxhtue.website,imgpuloki.online,imgmilu.store,picliume.store,pixmela.online,imgpukrr.site,picuekr.site,pixotor.cfd,imgmgh.site,imgnefl.site,imglekw.site,imgsdi.site,imgneor.store,imgsdi.store,imgpukxxr.site,imgsdi.website,imgsxo.site,imgxto.store,imgutkr.store,imghhr.online,imglaiw.store,imgotw.store,imgpai.online,imgqyrew.store,imgutkr.online,imgvue.online,imgxgf.store,imgxqy.online,imgbibam.online,imgngf.online,imgqaz.online,imgulur.online,imgurj.online,imgurt.online,imgwtz.online,imgwxr.online,imgwzr.online,imgyre.online,imgbak.store,imgbek.store,picler.store,piclerx.store,piclerz.store,pixlev.store,pixmax.store,pixmex.store,imgbaex.store,imgbah.online,imgbaie.online,imgbango.store,imgbier.store,imgbimn.store,imgbqw.store,imgbuba.online,imgbwe.store,imgbxs.online,imgcao.store,imgnwe.online,imgqge.store,imgqxb.online,imgteq.online,imgtex.online,imgtuta.online,imgwqr.online,imgwww.store,imgxza.store,imgezx.sbs,imgbcxsb.store,imgbcxs.store,imgbake.cfd,imgmffg.sbs,imgmffgtr.sbs,imgnbg.sbs,imgngc.sbs,imgnmh.cfd,imgqte.sbs,imguthes.sbs,imgwag.cfd,imgwang.cfd,imgwety.sbs,imgxuh.cfd,imgxytw.cfd,imgycgey.sbs,imgyruy.cfd,imgyusa.cfd,imgyyqey.sbs,imgyer.store,imgxhs.store,imgwekr.online,imgwbfh.online,imgwak.online,imgutry.online,imgutiyu.online,imgutbbn.online,imgubfd.online,imgrei.online,imgqec.online,imgpaiou.online,imgpaiki.online,imgmjj.store,imgfa.store,imgbutrt.store,imgbty.store,imgbdl.store,imgngh.sbs,imgbbfg.pics,imgjhrjjr.pics,imgleko.pics,imgluki.pics,imgnffe.pics,imgnnnf.pics,imgrwqz.pics,imgtweqz.pics,imgxzgf.pics,imgyyeryt.pics,picbbc.one,picbbdr.one,picbest.one,picbhrt.one,picnrrt.one,picqqw.one,picqr.one,picqtwe.one,picsjre.one,piczzaq.one,imgqazx.sbs,imgiruyw.online,picnerr.cfd,pichfer.cfd,picbbeq.cfd,picqaxs.cfd,picxxdd.cfd,picqweff.cfd,pickjsn.cfd,piczzxsw.cfd,picbbbde.cfd,picbdd.cfd,imgbahxg.sbs,imgxune.sbs,imgqklw.shop,pixqkhgrt.shop,pixqbngg.shop,pixqwet.shop,pixmos.shop,imgtgd.shop,imgcsxx.shop##div[id][style^="position: fixed; display: block; width: 100%;"]
+imgpiluka.website,imgxhtue.website,imgpuloki.online,imgmilu.store,picliume.store,pixmela.online,imgpukrr.site,picuekr.site,pixotor.cfd,imgmgh.site,imgnefl.site,imglekw.site,imgsdi.site,imgneor.store,imgsdi.store,imgpukxxr.site,imgsdi.website,imgsxo.site,imgxto.store,imgutkr.store,imghhr.online,imglaiw.store,imgotw.store,imgpai.online,imgqyrew.store,imgutkr.online,imgvue.online,imgxgf.store,imgxqy.online,imgbibam.online,imgngf.online,imgqaz.online,imgulur.online,imgurj.online,imgurt.online,imgwtz.online,imgwxr.online,imgwzr.online,imgyre.online,imgbak.store,imgbek.store,picler.store,piclerx.store,piclerz.store,pixlev.store,pixmax.store,pixmex.store,imgbaex.store,imgbah.online,imgbaie.online,imgbango.store,imgbier.store,imgbimn.store,imgbqw.store,imgbuba.online,imgbwe.store,imgbxs.online,imgcao.store,imgnwe.online,imgqge.store,imgqxb.online,imgteq.online,imgtex.online,imgtuta.online,imgwqr.online,imgwww.store,imgxza.store,imgezx.sbs,imgbcxsb.store,imgbcxs.store,imgbake.cfd,imgmffg.sbs,imgmffgtr.sbs,imgnbg.sbs,imgngc.sbs,imgnmh.cfd,imgqte.sbs,imguthes.sbs,imgwag.cfd,imgwang.cfd,imgwety.sbs,imgxuh.cfd,imgxytw.cfd,imgycgey.sbs,imgyruy.cfd,imgyusa.cfd,imgyyqey.sbs,imgyer.store,imgxhs.store,imgwekr.online,imgwbfh.online,imgwak.online,imgutry.online,imgutiyu.online,imgutbbn.online,imgubfd.online,imgrei.online,imgqec.online,imgpaiou.online,imgpaiki.online,imgmjj.store,imgfa.store,imgbutrt.store,imgbty.store,imgbdl.store,imgngh.sbs,imgbbfg.pics,imgjhrjjr.pics,imgleko.pics,imgluki.pics,imgnffe.pics,imgnnnf.pics,imgrwqz.pics,imgtweqz.pics,imgxzgf.pics,imgyyeryt.pics,picbbc.one,picbbdr.one,picbest.one,picbhrt.one,picnrrt.one,picqqw.one,picqr.one,picqtwe.one,picsjre.one,piczzaq.one,imgqazx.sbs,imgiruyw.online,picnerr.cfd,pichfer.cfd,picbbeq.cfd,picqaxs.cfd,picxxdd.cfd,picqweff.cfd,pickjsn.cfd,piczzxsw.cfd,picbbbde.cfd,picbdd.cfd,imgbahxg.sbs,imgxune.sbs,imgqklw.shop,pixqkhgrt.shop,pixqbngg.shop,pixqwet.shop,pixmos.shop,imgtgd.shop,imgcsxx.shop##div[style="width:100%;height:110px"]
+imgpiluka.website,imgxhtue.website,imgpuloki.online,imgmilu.store,picliume.store,pixmela.online,imgpukrr.site,picuekr.site,pixotor.cfd,imgmgh.site,imgnefl.site,imglekw.site,imgsdi.site,imgneor.store,imgsdi.store,imgpukxxr.site,imgsdi.website,imgsxo.site,imgxto.store,imgutkr.store,imghhr.online,imglaiw.store,imgotw.store,imgpai.online,imgqyrew.store,imgutkr.online,imgvue.online,imgxgf.store,imgxqy.online,imgbibam.online,imgngf.online,imgqaz.online,imgulur.online,imgurj.online,imgurt.online,imgwtz.online,imgwxr.online,imgwzr.online,imgyre.online,imgbak.store,imgbek.store,picler.store,piclerx.store,piclerz.store,pixlev.store,pixmax.store,pixmex.store,imgbaex.store,imgbah.online,imgbaie.online,imgbango.store,imgbier.store,imgbimn.store,imgbqw.store,imgbuba.online,imgbwe.store,imgbxs.online,imgcao.store,imgnwe.online,imgqge.store,imgqxb.online,imgteq.online,imgtex.online,imgtuta.online,imgwqr.online,imgwww.store,imgxza.store,imgezx.sbs,imgbcxsb.store,imgbcxs.store,imgbake.cfd,imgmffg.sbs,imgmffgtr.sbs,imgnbg.sbs,imgngc.sbs,imgnmh.cfd,imgqte.sbs,imguthes.sbs,imgwag.cfd,imgwang.cfd,imgwety.sbs,imgxuh.cfd,imgxytw.cfd,imgycgey.sbs,imgyruy.cfd,imgyusa.cfd,imgyyqey.sbs,imgyer.store,imgxhs.store,imgwekr.online,imgwbfh.online,imgwak.online,imgutry.online,imgutiyu.online,imgutbbn.online,imgubfd.online,imgrei.online,imgqec.online,imgpaiou.online,imgpaiki.online,imgmjj.store,imgfa.store,imgbutrt.store,imgbty.store,imgbdl.store,imgngh.sbs,imgbbfg.pics,imgjhrjjr.pics,imgleko.pics,imgluki.pics,imgnffe.pics,imgnnnf.pics,imgrwqz.pics,imgtweqz.pics,imgxzgf.pics,imgyyeryt.pics,picbbc.one,picbbdr.one,picbest.one,picbhrt.one,picnrrt.one,picqqw.one,picqr.one,picqtwe.one,picsjre.one,piczzaq.one,imgqazx.sbs,imgiruyw.online,picnerr.cfd,pichfer.cfd,picbbeq.cfd,picqaxs.cfd,picxxdd.cfd,picqweff.cfd,pickjsn.cfd,piczzxsw.cfd,picbbbde.cfd,picbdd.cfd,imgbahxg.sbs,imgxune.sbs,imgqklw.shop,pixqkhgrt.shop,pixqbngg.shop,pixqwet.shop,pixmos.shop,imgtgd.shop,imgcsxx.shop##+js(nowoif, !/prcf.fiyar|themes|pixsense|.jpg/)
+imgpiluka.website,imgxhtue.website,imgpuloki.online,imgmilu.store,picliume.store,pixmela.online,imgpukrr.site,picuekr.site,pixotor.cfd,imgmgh.site,imgnefl.site,imglekw.site,imgsdi.site,imgneor.store,imgsdi.store,imgpukxxr.site,imgsdi.website,imgsxo.site,imgxto.store,imgutkr.store,imghhr.online,imglaiw.store,imgotw.store,imgpai.online,imgqyrew.store,imgutkr.online,imgvue.online,imgxgf.store,imgxqy.online,imgbibam.online,imgngf.online,imgqaz.online,imgulur.online,imgurj.online,imgurt.online,imgwtz.online,imgwxr.online,imgwzr.online,imgyre.online,imgbak.store,imgbek.store,picler.store,piclerx.store,piclerz.store,pixlev.store,pixmax.store,pixmex.store,imgbaex.store,imgbah.online,imgbaie.online,imgbango.store,imgbier.store,imgbimn.store,imgbqw.store,imgbuba.online,imgbwe.store,imgbxs.online,imgcao.store,imgnwe.online,imgqge.store,imgqxb.online,imgteq.online,imgtex.online,imgtuta.online,imgwqr.online,imgwww.store,imgxza.store,imgezx.sbs,imgbcxsb.store,imgbcxs.store,imgbake.cfd,imgmffg.sbs,imgmffgtr.sbs,imgnbg.sbs,imgngc.sbs,imgnmh.cfd,imgqte.sbs,imguthes.sbs,imgwag.cfd,imgwang.cfd,imgwety.sbs,imgxuh.cfd,imgxytw.cfd,imgycgey.sbs,imgyruy.cfd,imgyusa.cfd,imgyyqey.sbs,imgyer.store,imgxhs.store,imgwekr.online,imgwbfh.online,imgwak.online,imgutry.online,imgutiyu.online,imgutbbn.online,imgubfd.online,imgrei.online,imgqec.online,imgpaiou.online,imgpaiki.online,imgmjj.store,imgfa.store,imgbutrt.store,imgbty.store,imgbdl.store,imgngh.sbs,imgbbfg.pics,imgjhrjjr.pics,imgleko.pics,imgluki.pics,imgnffe.pics,imgnnnf.pics,imgrwqz.pics,imgtweqz.pics,imgxzgf.pics,imgyyeryt.pics,picbbc.one,picbbdr.one,picbest.one,picbhrt.one,picnrrt.one,picqqw.one,picqr.one,picqtwe.one,picsjre.one,piczzaq.one,imgqazx.sbs,imgiruyw.online,picnerr.cfd,pichfer.cfd,picbbeq.cfd,picqaxs.cfd,picxxdd.cfd,picqweff.cfd,pickjsn.cfd,piczzxsw.cfd,picbbbde.cfd,picbdd.cfd,imgbahxg.sbs,imgxune.sbs,imgqklw.shop,pixqkhgrt.shop,pixqbngg.shop,pixqwet.shop,pixmos.shop,imgtgd.shop,imgcsxx.shop##div[class][style="display: block;"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/fqjo82/pandora_just_started_detecting_ad_blocker_wont/
+! https://github.com/uBlockOrigin/uAssets/issues/12733
+@@||pandora.com/web-version/*.json$xhr,1p
+*$script,redirect-rule=noopjs,domain=pandora.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52633
+zuketcreation.net##+js(nosiif, visibility, 1000)
+||clk.sh^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52643
+hentaipornpics.net##+js(acs, $, zendplace)
+hentaipornpics.net##+js(aeld, mouseover, event.triggered)
+
+! https://github.com/NanoMeow/QuickReports/issues/3457
+@@||templateshub.net^$ghide
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/89752
+! https://github.com/AdguardTeam/AdguardFilters/issues/89758
+gaypornhdfree.*##+js(aeld, DOMContentLoaded, adsBlocked)
+
+||giftcardbouns.com^
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52702
+*$xhr,3p,redirect-rule=nooptext,domain=podu.me
+*/ads$media,redirect-rule=noopmp3-0.1s,domain=podu.me
+||podu.me/*/advertisement^$xhr,1p
+podu.me##.adv-contanier
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/62436
+programmiedovetrovarli.it##+js(aost, encodeURIComponent, inlineScript)
+
+! https://forums.lanik.us/viewtopic.php?f=103&t=44512
+@@||bolsanow.com^$ghide
+
+! https://github.com/NanoMeow/QuickReports/issues/3460
+funzen.net##+js(nostif, mdpDeBlocker)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7186
+acessarlink.online,subdowns.com##+js(nano-stb, , , 0)
+subsvip.com##+js(nano-stb, , 10000, 0)
+subsvip.com###botaoBloqueio
+subsvip.com###botaoLink:style(display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9520
+smoner.com##+js(aopr, app_vars.force_disable_adblock)
+smoner.com##+js(set, blurred, false)
+smoner.com##.form-group:has(> div#box[style="display: inline-block;"])
+*$script,3p,denyallow=google.com|gstatic.com|recaptcha.net,domain=smoner.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/9841
+javcl.com##+js(nostif, 0x)
+javcl.com##+js(nosiif, 0x)
+javcl.com###wrapfabtest:style(height:1px !important;width:1px !important)
+
+! https://github.com/NanoMeow/QuickReports/issues/3470
+c1ne.co##+js(aopr, mdpDeBlocker)
+
+! https://github.com/NanoMeow/QuickReports/issues/3471
+thesukan.net##+js(aost, String.prototype.charCodeAt, ai_)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52789
+@@||suj.nu^$ghide
+suj.nu##.ads
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52791
+ru-xvideos.me##+js(nostif, innerText, 2000)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/mk2kad/ublock_detected_again/
+! https://fp.apps2app.com/2022/01/1.html#?o=c67546ceabdca453b44c4fa796138c912c1e49e9cedb1fb97d2d578f218318534aa79e99a895a230
+*$script,redirect-rule=noopjs,domain=apps2app.com
+apps2app.com##.adsbygoogle:style(width:1px!important;height:1px!important;min-width:1px!important;min-height:1px)
+apps2app.com##+js(aeld, load, removeChild)
+apps2app.com##+js(nostif, $)
+apps2app.com##+js(nano-sib, gotolink)
+apps2app.com##+js(ra, disabled, button)
+apps2app.com##+js(rc, hidden, button)
+apps2app.com##button:style(display: inline-block !important)
+apps2app.com###timer
+! https://github.com/uBlockOrigin/uAssets/issues/12391
+toolss.net##+js(acs, eval, replace)
+toolss.net##+js(no-fetch-if, googlesyndication)
+@@||toolss.net^$ghide
+toolss.net##.sidebar_adds
+toolss.net##ins.adsbygoogle
+||toolss.net^$3p
+toolss.net###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+toolss.net##div[id^="wpsafe-wait"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52825
+jav.sh##+js(aopr, AaDetector)
+jav.sh##+js(aopr, document.regexpSrcDomainPlaceholder)
+jav.sh##center > div
+*$script,3p,denyallow=cloudflare.com,domain=jav.fm|jav.sh|jav.vin
+
+! hdmovie8 .com => sexhd .co popups
+sexhd.co##+js(aopr, open)
+
+! scrubson. blogspot.com anti adb + popups
+scrubson.blogspot.com##+js(aopr, adcashMacros)
+
+! nsfw aquariumgays .com anti adb + popups
+aquariumgays.com##+js(aopr, _cpp)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52831
+maxidbr.com##+js(acs, addEventListener, nextFunction)
+
+! redecanais.bz ads
+redecanais.*###guerejo
+redecanais.*###guerejoback
+redecanais.*###iframeCore____
+allgamesejogos.*,bemestarglobal.*,dietafitness.fun,gamesgo.*,lojadebicicleta.com.br,redecanais.*,topauto.fun##[id="colunas"]:style(display: block !important;)
+
+! https://github.com/NanoMeow/QuickReports/issues/3477
+vz.lt##+js(acs, $, adblock)
+vz.lt##.banners
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52866
+javxxx.me###player_3x2_container_inner
+*/player/plugins/vast-*.js$script
+
+! https://github.com/NanoMeow/QuickReports/issues/3487
+testlanguages.com##+js(set, sgpbCanRunAds, true)
+
+! nsfw porncomics .me popups
+porncomics.me##+js(aopr, open)
+
+! https://github.com/NanoMeow/QuickReports/issues/3494
+paginadanoticia.com.br##+js(aopr, pareAdblock)
+paginadanoticia.com.br##.banner-img
+
+! https://github.com/uBlockOrigin/uAssets/issues/7198
+watchtvseries.video##+js(nosiif, visibility, 1000)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/52934
+! https://github.com/NanoMeow/QuickReports/issues/4083
+tr.link##+js(nowoif, ppcnt)
+tr.link##+js(ra, data-ppcnt_ads, main[onclick])
+||tr.link/js/sweets.js$script,1p
+||tr.link/*/sweet.js$script,1p
+||tr.link/push/push.js$script,1p
+tr.link##.sweet-alert
+tr.link##.sweet-overlay
+
+! celebmasta.com video ad/banner
+||celebmasta.com/vast/$1p
+celebmasta.com##img.size-medium
+celebmasta.com##+js(aopr, dataPopUnder)
+
+! https://github.com/NanoMeow/QuickReports/issues/3500
+faucetdump.com##+js(acs, $, ads)
+
+! https://github.com/NanoMeow/QuickReports/issues/3504
+@@||beti.club^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/7200
+@@||superuser.cz^$ghide
+
+! https://www.reddit.com/r/uBlockOrigin/comments/fvpk26/can_someone_help_me_block_a_popup/
+orsm.net##+js(aopr, open)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/fvvmal/trying_to_hide_scriptblock_warning_on/
+fernsehserien.de##+js(aopr, googlefc)
+
+! https://forums.lanik.us/viewtopic.php?p=153975#p153975
+@@||precitaj.si^$ghide
+precitaj.si##ins.adsbygoogle
+
+! https://github.com/NanoMeow/QuickReports/issues/3512
+lg-firmwares.com##+js(nano-sib)
+@@||lg-firmwares.com^$ghide
+lg-firmwares.com##.cc-window, .buy_on_amazon, .post-ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/7202
+! https://github.com/uBlockOrigin/uAssets/issues/12571
+animeblix.*##+js(nowoif)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53052
+hd-tch.com##+js(acs, addEventListener, nextFunction)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53080
+2kspecialist.net##+js(acs, addEventListener, blocker)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53084
+digit77.com##+js(acs, addEventListener, Blocker)
+
+! pcmag.com whitespace caused by a necessary exception in EasyList
+pcmag.com###adkit_billboard:style(padding-top: 0px!important;)
+
+! kutubistan.blogspot.com/softdroid4u.blogspot.com anti-adb
+! https://github.com/AdguardTeam/AdguardFilters/issues/53098
+kutubistan.blogspot.com,softdroid4u.blogspot.com,cosmomaker3.blogspot.com##+js(acs, addEventListener, blocker)
+
+! khmer7.org anti-adb
+khmer7.org##+js(acs, addEventListener, blocker)
+khmer7.org##+js(aopr, adcashMacros)
+
+! proxyserverlist24.top anti-adb
+proxyserverlist24.top##+js(acs, addEventListener, blocker)
+proxyserverlist24.top###HTML1, #HTML5, .Feed.widget, [href^="http://www.linkev.com/"], [href^="https://brave.com/"]
+
+! gudangfirmwere.com anti-adb
+gudangfirmwere.com##+js(acs, addEventListener, AdBlocker)
+
+! kamerabudaya.com anti-adb
+kamerabudaya.com##+js(acs, addEventListener, adblock)
+kamerabudaya.com##.ads, div.adsadsense, #HTML1
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53099
+gbadamud.blogspot.com##+js(acs, addEventListener, blocker)
+gbadamud.blogspot.com##.pinterestjo, .googlejo
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81005
+javtiful.com##+js(acs, document.addEventListener, adsBlocked)
+javtiful.com##+js(acs, String.fromCharCode, 'shift')
+javtiful.com##+js(acs, addEventListener, -0x)
+javtiful.com##+js(aopr, decodeURI)
+javtiful.com##body > div[style*="z-index:"]
+javtiful.com##[href^="//"][rel="nofollow norefferer noopener"]
+fakyutube.com##+js(nowoif)
+fakyutube.com##+js(aopr, __Y)
+supervideo.*##+js(aopr, AaDetector)
+/tag*.js$script,domain=supervideo.tv|supervideo.one
+
+! nsfw thisav .com popups
+*$script,redirect-rule=noopjs,domain=thisav.com
+thisav.com##^script:has-text('shift')
+thisav.com##^script:has-text(\'shift\')
+||antirgiocub.com^
+||intellipopup.com^$script,redirect=noopjs
+||antirgiocub.com^$script,redirect=noopjs
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53153
+@@||enterinit.com^$ghide
+enterinit.com##.bs-wrap-gdpr-law
+enterinit.com##*::selection:style(background-color:#338FFF!important)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53214
+buzz50.com##+js(acs, jQuery, blocker)
+buzz50.com##[href^="http://buzz50.co.uk/"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/78143
+||cdn.jsdelivr.net/*/dist/js/wgd-core.min.js$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/11113
+premid.app##+js(nosiif, innerHTML)
+premid.app##+js(nano-sib, clearInterval)
+@@||premid.app/ads/ads$xhr,1p
+@@||premid.app^$ghide
+premid.app##ins.adsbygoogle
+
+! https://github.com/NanoMeow/QuickReports/issues/3527
+thejobsmovie.com##+js(nostif, adsBlocked)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/53238
+@@||techdracula.com^$ghide
+techdracula.com##ins.adsbygoogle
+
+! https://github.com/NanoMeow/QuickReports/issues/98
+||bwtsrv.com^$3p
+
+! thememazing .com broken page + other anti adb
+! fix mdpDeBlocker + some other anti-adb
+||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,xhr,redirect=googlesyndication_adsbygoogle.js:5,domain=~zipextractor.app
+||pagead2.googlesyndication.com^$xhr,redirect=noop.js
+
+! regex
+/^https?:\/\/(?:www\.|[0-9a-z]{7,10}\.)?[-0-9a-z]{5,}\.com\/\/?(?:[0-9a-f]{2}\/){2,3}[0-9a-f]{32}\.js/$script,xhr,3p,redirect=noop.js
+! https://github.com/easylist/easylist/issues/6476
+/^https?:\/\/(?:[a-z]{2}\.)?[0-9a-z]{5,16}\.[a-z]{3,7}\/[a-z](?=[a-z]{0,25}[0-9A-Z])[0-9a-zA-Z]{3,26}\/\d{4,5}(?:\?[_v]=\d+)?$/$script,3p,match-case,redirect=noop.js
+/^https?:\/\/(?:[a-z]{2}\.)?[0-9a-z]{7,16}\.com\/[a-z](?=[a-z]{0,25}[0-9A-Z])[0-9a-zA-Z]{3,26}\/(?:[1-6]\d{4}|[3-9]\d{3})\??(?:_=\d+|v=\d)?$/$frame,xhr,popup,3p,match-case
+/^https?:\/\/(?:[a-z]{2}\.)?[0-9a-z]{7,16}\.website\/[a-z](?=[a-z]{0,25}[0-9A-Z])[0-9a-zA-Z]{3,26}\/(?:[1-6]\d{4}|[3-9]\d{3})\??(?:_=\d+|v=\d)?$/$frame,xhr,popup,3p,match-case
+! https://github.com/easylist/easylist/issues/6471
+/\/t\/[0-9]{3}\/[0-9]{3}\/a[0-9]{4,9}\.js$/$script
+/^https?:\/\/[0-9a-z]{13,14}\.cloudfront\.net\/\?[a-z]{3,5}=\d{6,7}$/$script,xhr,3p
+! https://github.com/easylist/easylist/pull/9330
+/^https:\/\/[0-9a-f]{10}\.[0-9a-f]{10}\.com\/[0-9a-f]{32}\.js$/$script,3p
+! globalThis
+/^https?:\/\/[0-9a-f]{50,}\.s3\.amazonaws\.com\/[0-9a-f]{10}$/$xhr,3p
+/^https?:\/\/s3\.us-east-1\.amazonaws\.com\/[0-9a-f]{50,}\/[0-9a-f]{10}$/$xhr,3p
+! propeller new variants
+/^https?:\/\/[a-z]{8,15}\.top(\/(?:\d{1,5}|0NaN|articles?|browse|index|movie|news|pages?|static|view|web|wiki)){1,4}(?:\.html|\/)$/$frame,3p,match-case
+/^https?:\/\/[a-z]{8,15}\.top\/(?!api|available|team)[a-z]{4,}\.json$/$xhr,3p,match-case
+/^https?:\/\/[a-z]{8,15}\.top\/[-a-z]{4,}\.css\?aHR0c[\/0-9a-zA-Z]{33,}=?=?$/$css,3p,match-case
+/^https?:\/\/[a-z]{8,15}\.top\/[a-z]{4,}\.png\?aHR0c[\/0-9a-zA-Z]{33,}=?=?$/$image,3p,match-case
+/^https?:\/\/[a-z]{8,15}\.xyz(\/(?:\d{1,5}|0NaN|articles?|browse|index|movie|news|pages?|static|view|web|wiki)){1,4}(?:\.html|\/)$/$frame,3p,match-case
+/^https?:\/\/[a-z]{8,15}\.xyz\/(?!api|available|team)[a-z]{4,}\.json$/$xhr,3p,match-case
+/^https?:\/\/[a-z]{8,15}\.xyz\/[-a-z]{4,}\.css\?aHR0c[\/0-9a-zA-Z]{33,}=?=?$/$css,3p,match-case
+/^https?:\/\/[a-z]{8,15}\.xyz\/[a-z]{4,}\.png\?aHR0c[\/0-9a-zA-Z]{33,}=?=?$/$image,3p,match-case
+.top/event|$xhr,3p
+.xyz/event|$xhr,3p
+! hilltopads
+/^https?:\/\/[-a-z]{6,}\.com?\/[a-d][-\.\/_A-Za-z][DHWXm][-\.\/_A-Za-z][59FVZ][-\.\/_A-Za-z][6swyz][-\.\/_A-Za-z][-\/_0-9a-zA-Z][-\.\/_A-Za-z][-\/_0-9a-zA-Z]{22,162}$/$script,xhr,3p,match-case
+/^https?:\/\/[-a-z]{6,}\.info\/[a-d][-\.\/_A-Za-z][DHWXm][-\.\/_A-Za-z][59FVZ][-\.\/_A-Za-z][6swyz][-\.\/_A-Za-z][-\/_0-9a-zA-Z][-\.\/_A-Za-z][-\/_0-9a-zA-Z]{22,162}$/$script,xhr,3p,match-case
+/^https?:\/\/[-a-z]{6,}\.pro\/[a-d][-\.\/_A-Za-z][DHWXm][-\.\/_A-Za-z][59FVZ][-\.\/_A-Za-z][6swyz][-\.\/_A-Za-z][-\/_0-9a-zA-Z][-\.\/_A-Za-z][-\/_0-9a-zA-Z]{22,162}$/$script,xhr,3p,match-case
+/^https?:\/\/[-a-z]{6,}\.xyz\/[a-d][-\.\/_A-Za-z][DHWXm][-\.\/_A-Za-z][59FVZ][-\.\/_A-Za-z][6swyz][-\.\/_A-Za-z][-\/_0-9a-zA-Z][-\.\/_A-Za-z][-\/_0-9a-zA-Z]{22,162}$/$script,xhr,3p,match-case
+
+! Defuse pointless online tool too causing hardship to volunteers
+! https://twitter.com/gorhill/status/1583581072197312512
+*$3p,domain=d3ward.github.io
+@@*$redirect-rule,domain=d3ward.github.io
+d3ward.github.io##.textads
+
+! As of 2020-04-09, new filters will be added to year-based sublists
+
+!#include filters-2020.txt
+!#include filters-2021.txt
+!#include filters-2022.txt
+!#include filters-2023.txt
+!#include filters-2024.txt
+
+! Link shortener filters go into their own dedicated list
+!#include ubo-link-shorteners.txt
+
+!#if env_mobile
+!#include filters-mobile.txt
+!#endif
diff --git a/uAssets/filters/lan-block.txt b/uAssets/filters/lan-block.txt
new file mode 100644
index 0000000..8845737
--- /dev/null
+++ b/uAssets/filters/lan-block.txt
@@ -0,0 +1,101 @@
+[uBlock Origin]
+! Title: Block Outsider Intrusion into LAN
+! Last modified: %timestamp%
+! Expires: 29 days
+! Description: Prevents public internet sites from digging into your local LAN files.
+! Requested here: https://github.com/uBlockOrigin/uAssets/issues/4318
+! Revived for: https://github.com/uBlockOrigin/uBlock-issues/issues/1070
+! Homepage: https://github.com/uBlockOrigin/uAssets
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+!
+! ——— LAN
+! https://en.wikipedia.org/wiki/Private_network
+!
+/^\w+:\/\/10\.(?:(?:[1-9]?\d|1\d\d|2(?:[0-4]\d|5[0-5]))\.){2}(?:[1-9]?\d|1\d\d|2(?:[0-4]\d|5[0-5]))[:/]/$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+/^\w+:\/\/172\.(?:1[6-9]|2\d|3[01])(?:\.(?:[1-9]?\d|1\d\d|2(?:[0-4]\d|5[0-5]))){2}[:/]/$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+/^\w+:\/\/192\.168(?:\.(?:[1-9]?\d|1\d\d|2(?:[0-4]\d|5[0-5]))){2}[:/]/$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+! Includes link-local
+/^\w+:\/\/\[f(?:[cd][0-9a-f]|e[89a-f])[0-9a-f]:[0-9a-f:]+\][:/]/$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+!
+! Ipv4 link-local addresses for network autoconfiguration https://github.com/gwarser/filter-lists/issues/5
+/^\w+:\/\/169\.254\.(?:[1-9]\d?|1\d{2}|2(?:[0-4]\d|5[0-4]))\.(?:[1-9]?\d|1\d{2}|2(?:[0-4]\d|5[0-5]))[:/]/$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+!
+! Ipv6 from ipv4 transition addresses https://github.com/gwarser/filter-lists/issues/6
+! |127.0-255. |10.0-255. |172.16-31.
+! | | | |192.168.
+! | | | | |169.254.
+! | | | | | |0-255.0-255
+/^\w+:\/\/\[::ffff:(?:7f[0-9a-f]{2}|a[0-9a-f]{2}|ac1[0-9a-f]|c0a8|a9fe):[0-9a-f]{1,4}\][:/]/$third-party,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+!
+! ——— localhost
+! https://en.wikipedia.org/wiki/Localhost
+!
+/^\w+:\/\/127\.(?:(?:[1-9]?\d|1\d\d|2(?:[0-4]\d|5[0-5]))\.){2}(?:[1-9]?\d|1\d\d|2(?:[0-4]\d|5[0-5]))[:/]/$3p,domain=~0.0.0.0|~127.0.0.1|~[::1]|~[::]|~intel.cn|~intel.co.id|~intel.co.jp|~intel.co.kr|~intel.com|~intel.com.br|~intel.com.tw|~intel.de|~intel.fr|~intel.la|~intel.vn|~local|~localhost|~mega.nz
+||[::1]^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||localhost^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+!
+! ——— any local
+! https://en.wikipedia.org/wiki/0.0.0.0
+!
+||0.0.0.0^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||[::]^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+!
+! ——— .local TLD
+! https://en.wikipedia.org/wiki/.local
+!
+||local^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+!
+! ——— .arpa
+||home.arpa^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+!
+! ——— known local service and router configuration domains
+!
+||airbox.home^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||airport^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||arcor.easybox^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||aterm.me^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||bthub.home^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||bthomehub.home^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||congstar.box^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||connect.box^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||console.gl-inet.com^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||easy.box^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||etxr^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||fire.walla^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||fritz.box^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||fritz.nas^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||fritz.repeater^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||giga.cube^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||hi.link^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||hitronhub.home^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||homerouter.cpe^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||huaweimobilewifi.com^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||localbattle.net^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||myfritz.box^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||mobile.hotspot^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||ntt.setup^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||pi.hole^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||plex.direct^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local|~app.plex.tv
+||repeater.asus.com^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||router.asus.com^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||routerlogin.com^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||routerlogin.net^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||samsung.router^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||speedport.ip^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||steamloopback.host^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||tplinkap.net^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||tplinkeap.net^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||tplinkmodem.net^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||tplinkplclogin.net^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||tplinkrepeater.net^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||tplinkwifi.net^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||web.setup^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+||web.setup.home^$3p,domain=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+!
+! https://github.com/uBlockOrigin/uAssets/issues/19005
+@@||127.0.0.1^$xhr,domain=battlelog.battlefield.com
+!
+! https://github.com/uBlockOrigin/uAssets/pull/20768
+@@||127.0.0.1^$3p,domain=musicbrainz.org
+!
+! ——— END
diff --git a/uAssets/filters/legacy.txt b/uAssets/filters/legacy.txt
new file mode 100644
index 0000000..9b9fdee
--- /dev/null
+++ b/uAssets/filters/legacy.txt
@@ -0,0 +1,169 @@
+! Title: uBlock filters -- Legacy
+! Last modified: %timestamp%
+! Expires: 11 days
+! Description: Filters to address issues specific to legacy versions of uBO.
+! Homepage: https://github.com/uBlockOrigin/uAssets
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+!
+! GitHub issues: https://github.com/uBlockOrigin/uAssets/issues
+! GitHub pull requests: https://github.com/uBlockOrigin/uAssets/pulls
+
+! https://github.com/uBlockOrigin/uAssets/issues/5120
+@@||svonm.com/hd-main.js$script,domain=kicker.de|kino.de|videos.giga.de|video.spieletipps.de
+!#if env_chromium
+@@||svonm.com/hd-main.js$script,domain=kicker.de|kino.de|videos.giga.de|video.spieletipps.de,badfilter
+!#endif
+!#if env_firefox
+@@||svonm.com/hd-main.js$script,domain=kicker.de|kino.de|videos.giga.de|video.spieletipps.de,badfilter
+!#endif
+!#if env_mobile
+@@||svonm.com/hd-main.js$script,domain=kicker.de|kino.de|videos.giga.de|video.spieletipps.de,badfilter
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/5186
+||fwmrm.net/ad/*$script,redirect=noopjs,domain=nationalgeographic.com
+@@||fwmrm.net/*/fox_live/AdManager.js$script,domain=nationalgeographic.com
+
+! https://github.com/easylist/easylist/issues/3261#issuecomment-483481215
+@@||adswizz.com/anon.npr-mp3/*$object,domain=podbay.fm
+@@||adswizz.com/anon.npr-podcasts/*$object,domain=podbay.fm
+
+! https://github.com/uBlockOrigin/uAssets/issues/1633#issuecomment-487359894
+|about:blank|$popup,domain=fileflares.com,badfilter
+
+! https://github.com/easylist/easylist/issues/4185#issuecomment-567586648
+||cbsistatic.com/*/dw-tracking$script,important,redirect=noopjs,domain=techrepublic.com,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/7440
+greatist.com#@##modal-host
+greatist.com,healthline.com,medicalnewstoday.com#@##modal-host:style(display: none !important;)
+
+! https://github.com/ryanbr/fanboy-adblock/issues/1360#issuecomment-634700528
+lawrievetgroup.co.uk###js-consent-wrapper
+lawrievetgroup.co.uk##body:style(overflow: auto !important;)
+
+! how-to => https://github.com/gorhill/uBlock-for-firefox-legacy/issues/236#issuecomment-691697404
+! https://github.com/DandelionSprout/adfilt/issues/63#issuecomment-678681675
+@@*$websocket,domain=hydracdn.accountant|hydracdn.band|hydracdn.builders|hydracdn.com|hydracdn.com.ph|hydracdn.dog|hydracdn.fm|hydracdn.la|hydracdn.net|hydracdn.net.ph|hydracdn.network|hydracdn.nyc|hydracdn.org|hydracdn.org.ph|hydracdn.ph|hydracdn.pub|hydracdn.theater|hydracdn.vegas|hydracdn.vg|hydracdn.website|hydracdn.wedding|hydracdn.ws
+*$popunder,domain=s.to|serienstream.be|serienstream.cc|serienstream.ch|serienstream.com.ph|serienstream.de|serienstream.farm|serienstream.fm|serienstream.group|serienstream.in|serienstream.io|serienstream.la|serienstream.me|serienstream.net.ph|serienstream.online|serienstream.org|serienstream.org.ph|serienstream.partners|serienstream.ph|serienstream.photography|serienstream.restaurant|serienstream.ru|serienstream.salon|serienstream.site|serienstream.tv|serienstream.ws|serienstream.xyz
+@@*$css,1p,domain=acortalo.adult|acortalo.com|acortalo.com.ph|acortalo.dev|acortalo.dog|acortalo.film|acortalo.fm|acortalo.gmbh|acortalo.la|acortalo.marketing|acortalo.mobi|acortalo.net|acortalo.net.ph|acortalo.org|acortalo.org.ph|acortalo.ph|acortalo.ski|acortalo.studio|acortalo.tk|acortalo.vacations|acortalo.vg|acortalo.ws|acortalo.xyz|megadescarga.net
+@@*$ghide,domain=acortalo.adult|acortalo.com|acortalo.com.ph|acortalo.dev|acortalo.dog|acortalo.film|acortalo.fm|acortalo.gmbh|acortalo.la|acortalo.marketing|acortalo.mobi|acortalo.net|acortalo.net.ph|acortalo.org|acortalo.org.ph|acortalo.ph|acortalo.ski|acortalo.studio|acortalo.tk|acortalo.vacations|acortalo.vg|acortalo.ws|acortalo.xyz|megadescarga.net
+*$popunder,domain=acortalo.adult|acortalo.com|acortalo.com.ph|acortalo.dev|acortalo.dog|acortalo.film|acortalo.fm|acortalo.gmbh|acortalo.la|acortalo.marketing|acortalo.mobi|acortalo.net|acortalo.net.ph|acortalo.org|acortalo.org.ph|acortalo.ph|acortalo.ski|acortalo.studio|acortalo.tk|acortalo.vacations|acortalo.vg|acortalo.ws|acortalo.xyz|acortar.net|insurances.tips|megadescarga.net|megadescargas.net
+@@||cdnjs.cloudflare.com/ajax/libs/fuckadblock/3.2.1/fuckadblock.$script,domain=acortalo.adult|acortalo.com|acortalo.com.ph|acortalo.dev|acortalo.dog|acortalo.film|acortalo.fm|acortalo.gmbh|acortalo.la|acortalo.marketing|acortalo.mobi|acortalo.net|acortalo.net.ph|acortalo.org|acortalo.org.ph|acortalo.ph|acortalo.ski|acortalo.studio|acortalo.tk|acortalo.vacations|acortalo.vg|acortalo.ws|acortalo.xyz|megadescarga.net
+*$popup,domain=vipbox.app|vipbox.art|vipbox.barcelona|vipbox.best|vipbox.bid|vipbox.biz|vipbox.bz|vipbox.cc|vipbox.ch|vipbox.co|vipbox.co.uk|vipbox.com|vipbox.com.br|vipbox.com.cn|vipbox.com.ph|vipbox.com.pl|vipbox.cooking|vipbox.courses|vipbox.cz|vipbox.de|vipbox.direct|vipbox.email|vipbox.eu|vipbox.fm|vipbox.fr|vipbox.futbol|vipbox.in|vipbox.info|vipbox.it|vipbox.la|vipbox.live|vipbox.luxury|vipbox.marketing|vipbox.me|vipbox.mobi|vipbox.net|vipbox.org|vipbox.org.ph|vipbox.ph|vipbox.pl|vipbox.ru|vipbox.se|vipbox.site|vipbox.so|vipbox.tk|vipbox.tv|vipbox.town|vipbox.uk|vipbox.vg|vipbox.vip|vipbox.world|vipbox.ws,3p
+*.gif$domain=mangaku.asia|mangaku.cc|mangaku.co|mangaku.com|mangaku.com.ph|mangaku.courses|mangaku.de|mangaku.es|mangaku.eu|mangaku.fm|mangaku.gold|mangaku.in|mangaku.info|mangaku.la|mangaku.loan|mangaku.me|mangaku.net.ph|mangaku.nl|mangaku.org|mangaku.org.ph|mangaku.ph|mangaku.pro|mangaku.pw|mangaku.site|mangaku.tk|mangaku.vg|mangaku.vip|mangaku.ws,image
+*banner$domain=sexwebvideo.casa|sexwebvideo.com|sexwebvideo.com.ph|sexwebvideo.clothing|sexwebvideo.coupons|sexwebvideo.fit|sexwebvideo.fm|sexwebvideo.industries|sexwebvideo.info|sexwebvideo.la|sexwebvideo.me|sexwebvideo.net|sexwebvideo.net.ph|sexwebvideo.news|sexwebvideo.org.ph|sexwebvideo.pet|sexwebvideo.ph|sexwebvideo.rentals|sexwebvideo.vg|sexwebvideo.ws,frame
+/invoke.js$script,domain=mirrorace.boutique|mirrorace.center|mirrorace.com|mirrorace.com.ph|mirrorace.education|mirrorace.estate|mirrorace.fm|mirrorace.immo|mirrorace.la|mirrorace.ltd|mirrorace.net|mirrorace.net.ph|mirrorace.org|mirrorace.org.ph|mirrorace.ph|mirrorace.store|mirrorace.vg|mirrorace.vip|mirrorace.ws
+!*$script,3p,denyallow=cloudflare.com|disqus.com|google.com|disquscdn.com,domain=solarmovie.ag|solarmovie.app|solarmovie.asia|solarmovie.at|solarmovie.bar|solarmovie.be|solarmovie.buzz|solarmovie.cab|solarmovie.casa|solarmovie.cc|solarmovie.center|solarmovie.ch|solarmovie.city|solarmovie.cloud|solarmovie.cn|solarmovie.co|solarmovie.co.nz|solarmovie.com.co|solarmovie.com.ph|solarmovie.courses|solarmovie.cz|solarmovie.date|solarmovie.de|solarmovie.deign|solarmovie.digital|solarmovie.dk|solarmovie.dog|solarmovie.download|solarmovie.email|solarmovie.eu|solarmovie.expert|solarmovie.film|solarmovie.fit|solarmovie.fm|solarmovie.fr|solarmovie.fun|solarmovie.gallery|solarmovie.host|solarmovie.in|solarmovie.ink|solarmovie.kim|solarmovie.la|solarmovie.life|solarmovie.live|solarmovie.love|solarmovie.me|solarmovie.media|solarmovie.movie|solarmovie.ms|solarmovie.mx|solarmovie.name|solarmovie.net|solarmovie.net.ph|solarmovie.network|solarmovie.news|solarmovie.one|solarmovie.org.ph|solarmovie.ph|solarmovie.pl|solarmovie.press|solarmovie.red|solarmovie.ru|solarmovie.run|solarmovie.sg|solarmovie.show|solarmovie.site|solarmovie.so|solarmovie.space|solarmovie.team|solarmovie.tech|solarmovie.tel|solarmovie.tk|solarmovie.today|solarmovie.vegas|solarmovie.video|solarmovie.vg|solarmovie.video|solarmovie.vip|solarmovie.website|solarmovie.wedding|solarmovie.win|solarmovie.work|solarmovie.works|solarmovie.world|solarmovie.ws|solarmovie.wtf|solarmovie.xyz
+*$script,3p,domain=mangovideo.cab|mangovideo.care|mangovideo.careers|mangovideo.club|mangovideo.cn|mangovideo.com|mangovideo.com.ph|mangovideo.digital|mangovideo.fish|mangovideo.fm|mangovideo.ist|mangovideo.la|mangovideo.ltda|mangovideo.net.ph|mangovideo.org.ph|mangovideo.ph|mangovideo.pw|mangovideo.solar|mangovideo.vg|mangovideo.ws|mangovideo.xyz
+!*$script,3p,denyallow=cloudflare.com|disqus.com|google.com|disquscdn.com|googleapis.com|gstatic.com,domain=veranime.capital|veranime.com|veranime.com.ph|veranime.courses|veranime.es|veranime.expert|veranime.fm|veranime.gratis|veranime.la|veranime.me|veranime.net|veranime.net.ph|veranime.org.ph|veranime.ph|veranime.school|veranime.tk|veranime.tv|veranime.vg|veranime.voyage|veranime.ws|veranime.xxx|veranime.xyz
+!*$script,3p,denyallow=cloudflare.com|disqus.com|google.com|disquscdn.com|googleapis.com|gstatic.com,domain=verhentai.church|verhentai.com.ph|verhentai.deals|verhentai.education|verhentai.fm|verhentai.immo|verhentai.istanbul|verhentai.la|verhentai.limited|verhentai.mortgage|verhentai.mx|verhentai.net|verhentai.net.ph|verhentai.online|verhentai.org|verhentai.org.ph|verhentai.ph|verhentai.productions|verhentai.quebec|verhentai.vg|verhentai.ws|verhentai.xxx|verhentai.xyz
+@@||t8cdn.com/js/lazyload.min.js$script,domain=tube8.biz|tube8.blog|tube8.buzz|tube8.club|tube8.co|tube8.com|tube8.cool|tube8.democrat|tube8.fyi|tube8.info|tube8.maison|tube8.name|tube8.net|tube8.ninja|tube8.online|tube8.org|tube8.pink|tube8.plus|tube8.red|tube8.rocks|tube8.rodeo|tube8.shiksha|tube8.site|tube8.social|tube8.space|tube8.store|tube8.tech|tube8.tel|tube8.today|tube8.vg|tube8.video|tube8.vip|tube8.works|tube8.wtf|tube8.zone
+*$frame,3p,domain=txxx.app|txxx.best|txxx.bid|txxx.buzz|txxx.camera|txxx.camp|txxx.casa|txxx.cc|txxx.ch|txxx.cloud|txxx.co|txxx.co.uk|txxx.com|txxx.com.br|txxx.com.cn|txxx.com.es|txxx.com.ph|txxx.cz|txxx.de|txxx.download|txxx.email|txxx.fm|txxx.fr|txxx.gives|txxx.in|txxx.life|txxx.net.ph|txxx.org|txxx.info|txxx.jetzt|txxx.la|txxx.life|txxx.me|txxx.mobi|txxx.ninja|txxx.online|txxx.org.ph|txxx.party|txxx.ph|txxx.pl|txxx.porn|txxx.pro|txxx.protection|txxx.pw|txxx.rocks|txxx.ru|txxx.shop|txxx.space|txxx.tel|txxx.tk|txxx.today|txxx.tube|txxx.uk|txxx.vg|txxx.video|txxx.work|txxx.world|txxx.ws|txxx.xyz
+*$popunder,3p,domain=txxx.app|txxx.best|txxx.bid|txxx.buzz|txxx.camera|txxx.camp|txxx.casa|txxx.cc|txxx.ch|txxx.cloud|txxx.co|txxx.co.uk|txxx.com|txxx.com.br|txxx.com.cn|txxx.com.es|txxx.com.ph|txxx.cz|txxx.de|txxx.download|txxx.email|txxx.fm|txxx.fr|txxx.gives|txxx.in|txxx.life|txxx.net.ph|txxx.org|txxx.info|txxx.jetzt|txxx.la|txxx.life|txxx.me|txxx.mobi|txxx.ninja|txxx.online|txxx.org.ph|txxx.party|txxx.ph|txxx.pl|txxx.porn|txxx.pro|txxx.protection|txxx.pw|txxx.rocks|txxx.ru|txxx.shop|txxx.space|txxx.tel|txxx.tk|txxx.today|txxx.tube|txxx.uk|txxx.vg|txxx.video|txxx.work|txxx.world|txxx.ws|txxx.xyz
+!*$script,3p,denyallow=bootstrapcdn.com|disqus.com|jsdelivr.net|jwpcdn.com|fastly.net|fastlylb.net|jquery.com|hwcdn.net|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com,domain=desiupload.bid|desiupload.cheap|desiupload.co|desiupload.com|desiupload.com.ph|desiupload.cool|desiupload.exposed|desiupload.fm|desiupload.holiday|desiupload.in|desiupload.info|desiupload.ink|desiupload.la|desiupload.limo|desiupload.me|desiupload.net|desiupload.net.ph|desiupload.online|desiupload.org|desiupload.org.ph|desiupload.ph|desiupload.site|desiupload.store|desiupload.vet|desiupload.vg|desiupload.ws|desiupload.xyz
+!*$script,3p,denyallow=disqus.com|jsdelivr.net|jwpcdn.com|fastly.net|fastlylb.net|jquery.com|hwcdn.net|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com,domain=downloadhub.accountant|downloadhub.best|downloadhub.bid|downloadhub.biz|downloadhub.blog|downloadhub.blue|downloadhub.buzz|downloadhub.casa|downloadhub.cc|downloadhub.cloud|downloadhub.cn|downloadhub.co.in|downloadhub.co.uk|downloadhub.com|downloadhub.com.ph|downloadhub.cool|downloadhub.cz|downloadhub.de|downloadhub.dk|downloadhub.fans|downloadhub.fm|downloadhub.fun|downloadhub.guide|downloadhub.guru|downloadhub.host|downloadhub.info|downloadhub.ind.in|downloadhub.ink|downloadhub.io|downloadhub.ist|downloadhub.it|downloadhub.kim|downloadhub.la|downloadhub.life|downloadhub.live|downloadhub.london|downloadhub.love|downloadhub.ltd|downloadhub.me|downloadhub.mobi|downloadhub.movie|downloadhub.name|downloadhub.net|downloadhub.net.in|downloadhub.net.ph|downloadhub.ninja|downloadhub.one|downloadhub.org|downloadhub.org.ph|downloadhub.ph|downloadhub.pink|downloadhub.plus|downloadhub.press|downloadhub.pro|downloadhub.rest|downloadhub.rocks|downloadhub.run|downloadhub.shop|downloadhub.space|downloadhub.store|downloadhub.stream|downloadhub.tech|downloadhub.tips|downloadhub.tech|downloadhub.today|downloadhub.trade|downloadhub.uno|downloadhub.us|downloadhub.vg|downloadhub.vin|downloadhub.vip|downloadhub.website|downloadhub.wiki|downloadhub.win|downloadhub.work|downloadhub.world|downloadhub.ws|downloadhub.wtf
+!*$script,3p,denyallow=bootstrapcdn.com|disqus.com|jsdelivr.net|jwpcdn.com|fastly.net|fastlylb.net|jquery.com|hwcdn.net|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com|facebook.net,domain=extramovies.art|extramovies.asia|extramovies.bar|extramovies.best|extramovies.blog|extramovies.blue|extramovies.buzz|extramovies.casa|extramovies.co.in|extramovies.co.uk|extramovies.com.ph|extramovies.country|extramovies.cymru|extramovies.de|extramovies.degree|extramovies.eu|extramovies.events|extramovies.exposed|extramovies.fit|extramovies.fm|extramovies.guru|extramovies.host|extramovies.in|extramovies.ind.in|extramovies.ink|extramovies.kim|extramovies.la|extramovies.ltd|extramovies.me|extramovies.media|extramovies.mobi|extramovies.net.ph|extramovies.nl|extramovies.one|extramovies.online|extramovies.org|extramovies.org.in|extramovies.org.ph|extramovies.party|extramovies.ph|extramovies.pink|extramovies.plus|extramovies.pw|extramovies.rent|extramovies.ru|extramovies.shop|extramovies.site|extramovies.solar|extramovies.space|extramovies.store|extramovies.surf|extramovies.tk|extramovies.today|extramovies.trade|extramovies.uno|extramovies.vg|extramovies.watch|extramovies.website|extramovies.work|extramovies.world|extramovies.ws|extramovies.xyz|extramovies.yokohama
+@@||cdn-u.frustasi.org//src//check.js$script,domain=ustreamix.com|ustreamix.com.ph|ustreamix.cooking|ustreamix.events|ustreamix.fm|ustreamix.immo|ustreamix.info|ustreamix.la|ustreamix.live|ustreamix.net|ustreamix.net.ph|ustreamix.org|ustreamix.org.ph|ustreamix.ph|ustreamix.pink|ustreamix.stream|ustreamix.tools|ustreamix.vg|ustreamix.wine|ustreamix.ws
+!*$script,3p,denyallow=disqus.com|jsdelivr.net|jwpcdn.com|fastly.net|fastlylb.net|jquery.com|hwcdn.net|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com,domain=moviespapa.apartments|moviespapa.asia|moviespapa.bar|moviespapa.best|moviespapa.bid|moviespapa.bingo|moviespapa.biz|moviespapa.casa|moviespapa.casino|moviespapa.cc|moviespapa.co|moviespapa.com|moviespapa.com.ph|moviespapa.engineering|moviespapa.eu|moviespapa.farm|moviespapa.fit|moviespapa.fm|moviespapa.fun|moviespapa.fund|moviespapa.guru|moviespapa.host|moviespapa.in|moviespapa.info|moviespapa.la|moviespapa.live|moviespapa.me|moviespapa.mobi|moviespapa.name|moviespapa.net|moviespapa.net.ph|moviespapa.online|moviespapa.org|moviespapa.org.ph|moviespapa.ph|moviespapa.press|moviespapa.pro|moviespapa.pw|moviespapa.red|moviespapa.rest|moviespapa.rocks|moviespapa.security|moviespapa.site|moviespapa.tk|moviespapa.today|moviespapa.trade|moviespapa.vg|moviespapa.vip|moviespapa.work|moviespapa.ws|moviespapa.xyz
+@@||akvideo.stream^$script,domain=wstream.builders|wstream.camp|wstream.cn|wstream.com|wstream.com.cn|wstream.com.ph|wstream.de|wstream.eu|wstream.exchange|wstream.finance|wstream.fm|wstream.host|wstream.in|wstream.io|wstream.it|wstream.la|wstream.me|wstream.menu|wstream.miami|wstream.net|wstream.net.ph|wstream.org.ph|wstream.ph|wstream.restaurant|wstream.ru|wstream.se|wstream.solar|wstream.vg|wstream.video|wstream.vip|wstream.ws|wstream.xyz
+||cf-se.com^$script,domain=linkvertise.adult|linkvertise.barcelona|linkvertise.catering|linkvertise.claims|linkvertise.co|linkvertise.com|linkvertise.com.br|linkvertise.com.ph|linkvertise.condos|linkvertise.de|linkvertise.download|linkvertise.fm|linkvertise.info|linkvertise.ist|linkvertise.la|linkvertise.net|linkvertise.net.ph|linkvertise.online|linkvertise.org|linkvertise.org.ph|linkvertise.ph|linkvertise.stream|linkvertise.systems|linkvertise.vg|linkvertise.wine|linkvertise.ws
+||streamrail.net^$script,domain=linkvertise.adult|linkvertise.barcelona|linkvertise.catering|linkvertise.claims|linkvertise.co|linkvertise.com|linkvertise.com.br|linkvertise.com.ph|linkvertise.condos|linkvertise.de|linkvertise.download|linkvertise.fm|linkvertise.info|linkvertise.ist|linkvertise.la|linkvertise.net|linkvertise.net.ph|linkvertise.online|linkvertise.org|linkvertise.org.ph|linkvertise.ph|linkvertise.stream|linkvertise.systems|linkvertise.vg|linkvertise.wine|linkvertise.ws
+*$frame,xhr,script,3p,domain=bolly4umovies.attorney|bolly4umovies.co|bolly4umovies.com.ph|bolly4umovies.fm|bolly4umovies.info|bolly4umovies.la|bolly4umovies.lease|bolly4umovies.mobi|bolly4umovies.net.ph|bolly4umovies.ninja|bolly4umovies.online|bolly4umovies.org.ph|bolly4umovies.ph|bolly4umovies.reisen|bolly4umovies.site|bolly4umovies.store|bolly4umovies.tk|bolly4umovies.vg|bolly4umovies.video|bolly4umovies.wedding|bolly4umovies.ws|bolly4umovies.xyz
+@@*$script,1p,domain=mshares.biz|mshares.casa|mshares.cash|mshares.co|mshares.com.ph|mshares.fm|mshares.garden|mshares.la|mshares.net|mshares.net.ph|mshares.org|mshares.org.ph|mshares.ph|mshares.reise|mshares.reviews|mshares.sex|mshares.tax|mshares.team|mshares.tk|mshares.vg|mshares.ws
+!*$script,3p,denyallow=bootstrapcdn.com|disqus.com|jsdelivr.net|jwpcdn.com|fastly.net|fastlylb.net|jquery.com|hwcdn.net|recaptcha.net|cloudflare.com|cloudflare.net|google.com|googleapis.com|gstatic.com,domain=bollyflix.art|bollyflix.best|bollyflix.cc|bollyflix.church|bollyflix.club|bollyflix.co|bollyflix.co.in|bollyflix.co.uk|bollyflix.com.ph|bollyflix.cymru|bollyflix.dance|bollyflix.de|bollyflix.equipment|bollyflix.events|bollyflix.fm|bollyflix.fun|bollyflix.hospital|bollyflix.in|bollyflix.info|bollyflix.la|bollyflix.life|bollyflix.live|bollyflix.me|bollyflix.mobi|bollyflix.net|bollyflix.net.ph|bollyflix.online|bollyflix.org|bollyflix.org.ph|bollyflix.ph|bollyflix.pro|bollyflix.red|bollyflix.services|bollyflix.site|bollyflix.storage|bollyflix.tk|bollyflix.vg|bollyflix.vip|bollyflix.website|bollyflix.work|bollyflix.world|bollyflix.ws|bollyflix.wtf|bollyflix.xyz
+!*$3p,denyallow=googleapis.com|google.com|gstatic.com|recaptcha.net|hcaptcha.com|code.jquery.com|stackpath.bootstrapcdn.com|cdn.jsdelivr.net,domain=link1s.camp|link1s.com|link1s.com.ph|link1s.date|link1s.fm|link1s.la|link1s.net|link1s.net.ph|link1s.org.ph|link1s.ph|link1s.quebec|link1s.tires|link1s.tk|link1s.tools|link1s.vg|link1s.ws|link1s.xyz
+
+! https://www.reddit.com/r/uBlockOrigin/comments/jst6yb/watchseriesso_cloudflare_loop/
+watchseries.so#@#+js(no-setInterval-if.js, visibility, 1000)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8509
+biznes.interia.pl,pomponik.pl##+js(nostif, , 500)
+biznes.interia.pl,pomponik.pl#@#+js(set-constant, isAdblockDetected, 0)
+biznes.interia.pl,pomponik.pl#@#+js(set-constant, Inpl.Abd.onDetected, noopFunc)
+
+! https://github.com/MrAlex94/Waterfox/issues/1937
+translatum.gr##+js(remove-attr, style, html[style="display: none;"])
+
+! https://github.com/DandelionSprout/adfilt/issues/63#issuecomment-813028969
+bt.no##.disable-cogwheel
+
+! Previous workarounds for $domain wildcards in Dandelion Sprout's Nordic Filters
+/_bm/abd$script,domain=eurosport.no|eurosport.dk
+/entag.js$script,domain=eniro.no|eniro.dk|proff.no|proff.dk
+/insert_grtv_stats.$xhr,domain=gamereactor.no|gamereactor.dk
+/prerolls/*$domain=gamereactor.no|gamereactor.dk
+/videojs.ima.$script,domain=gamereactor.no|gamereactor.dk
+@@||fwmrm.net/ad/$image,xhr,domain=viafree.no|viafree.dk
+@@||fwmrm.net/crossdomain.xml$xhr,domain=viafree.no|viafree.dk
+@@||imasdk.googleapis.com/js/sdkloader/ima3.$script,domain=gamereactor.no|gamereactor.dk
+@@||mparticle.com^*/login$domain=discoveryplus.no|discoveryplus.dk
+@@||openx.gamereactor.dk/www/delivery/fc.php$xhr,domain=gamereactor.no|gamereactor.dk
+||akamai.net^$script,domain=eniro.no|eniro.dk
+||akamaihd.net^$media,domain=discoveryplus.no|discoveryplus.dk
+||client-stream-events.mtg-api.com^$domain=viafree.no|viafree.dk
+||dnitv.com^$media,domain=discoveryplus.no|discoveryplus.dk
+||freewheel-mtgx-tv.akamaized.net^$media,redirect=noopmp4,domain=viafree.no|viafree.dk
+||media.gamereactor.dk/*Promo$redirect=noopmp4,domain=gamereactor.no|gamereactor.dk
+||media.gamereactor.dk/prerolls$redirect=noopmp4,domain=gamereactor.no|gamereactor.dk
+||openx.gamereactor.dk/multi.php?$important,script
+||ssl.p.jwpcdn.com^*/freewheel.js$important,script,domain=eurosport.no|eurosport.dk
+||ssl.p.jwpcdn.com^*/jwpsrv.js$important,script,domain=eurosport.no|eurosport.dk|gamereactor.no|gamereactor.dk|vg.no
+||ssl.p.jwpcdn.com^*/sharing.js$important,script,domain=eurosport.no|eurosport.dk|gamereactor.no|gamereactor.dk
+||ssl.p.jwpcdn.com^*/vast.js$important,script,domain=eurosport.no|eurosport.dk|gamereactor.no|gamereactor.dk|vg.no
+!#if env_chromium
+||prod-adops-proxy.dnitv.net^$empty,domain=discoveryplus.no|discoveryplus.dk
+!#endif
+
+! https://forum.palemoon.org/viewtopic.php?f=70&t=27299
+dnb.no##.dnb-modal__overlay:style(z-index: -1 !important;)
+dnb.no###dnb-modal-root:style(z-index: 9999 !important;)
+
+! https://forum.palemoon.org/viewtopic.php?f=70&t=27293#p219453
+windfinder.com##.map-container:style(position: fixed !important;)
+windfinder.com##.mapconfig:style(position: fixed !important;)
+windfinder.com##.site-header:style(position: fixed !important;)
+
+! https://forum.palemoon.org/viewtopic.php?p=219512#p219512
+vg.no###global-navigation:style(z-index: 9999 !important;)
+
+! https://github.com/easylist/easylist/issues/9743#issuecomment-971891354
+insider.co.uk##[id^="div-gpt-ad"]:style(width:1px!important;height:1px!important;min-height:1px!important)
+
+! https://github.com/easylist/easylist/issues/10035#issuecomment-994852233
+danica.no,danicapension.dk,danskebank.co.uk,danskebank.com,danskebank.dk,danskebank.fi,danskebank.no,danskebank.se,danskeci.com#@#.cookie-consent-banner
+danica.no,danicapension.dk,danskebank.co.uk,danskebank.com,danskebank.dk,danskebank.fi,danskebank.no,danskebank.se,danskeci.com#@#.cookie-consent-banner:not(body)
+danica.no,danicapension.dk,danskebank.co.uk,danskebank.com,danskebank.dk,danskebank.fi,danskebank.no,danskebank.se,danskeci.com#@#.cookie-consent-banner-modal
+danica.no,danicapension.dk,danskebank.co.uk,danskebank.com,danskebank.dk,danskebank.fi,danskebank.no,danskebank.se,danskeci.com#@##cookie-text
+
+! unblock ping
+$ping,third-party,badfilter
+$other,third-party,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/12737
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=tvguia.es
+
+! https://github.com/easylist/easylist/issues/12011#issuecomment-1126739940
+megaxh.com,xhwide1.com,xhamster16.*,hamsterix.*,xhplanet1.com,xhamster13.*,xhamster18.*,xhamster19.*,xhamster11.*,xhamster5.*,xhamster10.*,xhamster4.*,xhamster3.*,xhamster2.*,xhamster.*#@#.cookies-modal
+megaxh.com,xhwide1.com,xhamster16.*,hamsterix.*,xhplanet1.com,xhamster13.*,xhamster18.*,xhamster19.*,xhamster11.*,xhamster5.*,xhamster10.*,xhamster4.*,xhamster3.*,xhamster2.*,xhamster.*#@#.cookies-modal:not(body):not(html)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13778
+@@||googletagmanager.com/gtm.js$script,domain=bestselgerklubben.no|kitchn.no
+@@||googletagmanager.com/gtag/js$script,domain=kitchn.no
+
+! https://github.com/uBlockOrigin/uAssets/issues/16259
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=eitb.eus
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/2347
+rocketnews24.com,soranews24.com,youpouch.com#@#+js(nostif, rejectWith)
+rocketnews24.com,soranews24.com,youpouch.com#@#+js(set-attr, .lazy, src, [data-sco-src])
+rocketnews24.com,soranews24.com,youpouch.com#@#div[id$="content"] img.lazy:style(opacity: 1 !important;)
+youpouch.com#@#.post-content img.lazy:style(opacity: 1 !important;)
+
+! https://github.com/uBlockOrigin/uBlock-discussions/discussions/789#discussioncomment-6811760
+! https://www.reddit.com/r/uBlockOrigin/comments/154vtwy/getting_ads_on_youtube/jxiy8io/
+youtube.com,youtubekids.com,youtube-nocookie.com##+js(json-prune, playerResponse.adPlacements playerResponse.playerAds playerResponse.adSlots adPlacements playerAds adSlots legacyImportant)
+
+! https://github.com/uBlockOrigin/uAssets/commit/51730b6c5ed3e900e41bb058129608807b23cb76#commitcomment-127164376
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,important,redirect=google-ima.js:5,domain=abczdrowie.pl|animezone.pl|antyradio.pl|chillizet.pl|claudia.pl|echirurgia.pl|elevensports.pl|elle.pl|elleman.pl|fm.tuba.pl|focusnauka.pl|games.cdn.famobi.com|glamour.pl|grydladzieci.pl|ipla.tv|ipla.tv|kobieta.pl|meloradio.pl|mojegotowanie.pl|mojpieknyogrod.pl|money.pl|national-geographic.pl|parenting.pl|partner.redefine.pl|playpuls.pl|pluscdn.pl|polsatgo.pl|polsatnews.pl|polsatsport.pl|przyslijprzepis.pl|radioplus.pl|radiozet.pl|sadeczanin.info|tvokazje.pl|tvp.pl|twojapogoda.pl|video.onnetwork.tv|videotarget.pl|wp.pl|wtk.pl|interia.pl|www.polsatnews.pl|autocentrum.pl,badfilter
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=autocentrum.pl
diff --git a/uAssets/filters/privacy.txt b/uAssets/filters/privacy.txt
new file mode 100644
index 0000000..fbaac21
--- /dev/null
+++ b/uAssets/filters/privacy.txt
@@ -0,0 +1,937 @@
+! Title: uBlock filters – Privacy
+! Last modified: %timestamp%
+! Expires: 7 days
+! Description: |
+! Some of these filters make use of the `important` filter option,
+! which purpose is to guarantee that a filter won't be overriden by
+! exception filters.
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+! Homepage: https://github.com/uBlockOrigin/uAssets
+!
+! GitHub issues: https://github.com/uBlockOrigin/uAssets/issues
+! GitHub pull requests: https://github.com/uBlockOrigin/uAssets/pulls
+
+! https://adblockplus.org/forum/viewtopic.php?f=2&t=38703
+! 1st-party "recommendations" should never depends on a 3rd-party doing the job:
+! this is just disguised tracking
+||taboola.com^$3p
+
+! Redirect to neutered Google Analytics
+||google-analytics.com/analytics.js$script,redirect=google-analytics_analytics.js:5
+
+! Redirect to neutered Google Analytics Experiments
+||google-analytics.com/cx/api.js$script,redirect=google-analytics.com/cx/api.js:5
+
+! https://github.com/gorhill/uBlock/issues/1411
+! https://www.reddit.com/r/firefox/comments/3pwcey/firefox_extension_download_manager_s3_asks_for/
+! https://www.reddit.com/r/chrome/comments/473ves/help_how_to_remove_qipru_redirect_when_searching/
+||lnkr.us^$doc
+||icontent.us^$doc
+||qip.ng^$doc
+||qip.ru^$doc
+! https://github.com/gorhill/uBlock/issues/1411#issuecomment-201031771
+||ratexchange.net^
+||adnotbad.com^
+||serverads.net^
+||takethatad.com^
+||tradeadsexchange.com^
+
+! https://www.reddit.com/r/ublock/comments/47o2ih/ublock_disabling_all_javascript_links/d0fhock
+! Time to bring this filter out of experimental status
+||googletagservices.com/tag/js/gpt.js$script,xhr,redirect=googletagservices.com/gpt.js:5
+||securepubads.g.doubleclick.net/tag/js/gpt.js$script,redirect=googletagservices_gpt.js:5
+||pagead2.googlesyndication.com/tag/js/gpt.js$script,redirect=googletagservices_gpt.js:5
+
+! https://github.com/gorhill/uBlock/issues/1265
+||scorecardresearch.com/beacon.js$script,redirect=scorecardresearch.com/beacon.js:5
+
+! https://github.com/uBlockOrigin/uAssets/issues/7
+||google-analytics.com/ga.js$script,redirect=google-analytics.com/ga.js:5
+
+! https://www.eff.org/deeplinks/2014/07/white-house-website-includes-unique-non-cookie-tracker-despite-privacy-policy
+! https://github.com/uBlockOrigin/uAssets/issues/1713
+! https://github.com/uBlockOrigin/uAssets/issues/6319
+! https://github.com/gorhill/uBlock/issues/1384
+! https://github.com/uBlockOrigin/uAssets/issues/11003
+||addthis.com/*/addthis_widget.js$script
+##.addthis_toolbox
+
+! Examples of what is fixed by even an unfilled dummy API:
+! https://twitter.com/kenn_butler/status/709163241021317120
+! https://adblockplus.org/forum/viewtopic.php?f=10&t=48183
+! https://forums.lanik.us/viewtopic.php?f=64&t=32161
+! https://forums.lanik.us/viewtopic.php?f=64&t=30670
+||googletagmanager.com/gtm.js$script,redirect=googletagmanager_gtm.js:5
+
+! https://github.com/gorhill/uBlock/issues/1082
+! https://github.com/gorhill/uBlock/issues/1250#issuecomment-173533894
+! https://github.com/gorhill/uBlock/issues/2155
+||widgets.outbrain.com/outbrain.js$script,redirect=outbrain-widget.js:5,domain=~vice.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/713
+||google-analytics.com/analytics.js$important,script,redirect=google-analytics.com/analytics.js,domain=support.amd.com
+||googletagmanager.com/gtm.js$important,script,redirect=googletagmanager.com/gtm.js,domain=support.amd.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/3251
+teamskeet.com##+js(set, $.tstracker, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/4138
+rediff.com##a[onclick^="trackURL"]:remove-attr(onclick)
+rediff.com##a[onmousedown^="return enc(this,'https://track.rediff.com"]:remove-attr(onmousedown)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/b9qsix/new_reddit_tracks_a_ton_more_data_someone_said/
+! https://github.com/uBlockOrigin/uAssets/commit/5563840a319a26025290e17f4e9401b201ac2b99#commitcomment-118042265
+||reddit.com/api/jail^$xhr,1p
+! https://www.reddit.com/r/uBlockOrigin/comments/tihpyw/oldredditcom_outbound_tracking_via_out_reddit_com/i1f290z/?context=3
+old.reddit.com##a.outbound[data-outbound-url]:remove-attr(data-outbound-url)
+!reddit.com##+js(set, Object.prototype.allowClickTracking, false)
+! https://www.reddit.com/r/worldnews/
+! https://github.com/uBlockOrigin/uAssets/issues/18938
+www.reddit.com##+js(rpnt, script, "outboundUrl", "outbound")
+www.reddit.com##+js(json-prune, data.*.elements.edges.[].node.outboundLink)
+www.reddit.com##+js(json-prune, data.children.[].data.outbound_link)
+||redditstatic.com/shreddit/sentry-$domain=reddit.com
+reddit.com##+js(aopw, STICKY_CANARY)
+! reddit.com##+js(aost, fetch, Ee/</<)
+reddit.com##reddit-breadcrumbs
+||www.reddit.com/|$xhr,1p,method=post
+
+! https://github.com/uBlockOrigin/uAssets/pull/5578
+||colpirio.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/pull/5997
+docs.google.com##+js(no-xhr-if, method:POST url:/logImpressions)
+! https://github.com/uBlockOrigin/uAssets/issues/7960
+www.google.*##+js(set, rwt, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6538
+liberation.fr,officedepot.fr,oui.sncf##+js(acs, document.createElement, '.js')
+sfr.fr##+js(aopr, _oEa)
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/780#issuecomment-558734257
+brillen.de##+js(acs, document.createElement, 'script')
+||marketing.net.*^$1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/7118
+||vidtech.cbsinteractive.com^*/tracking/$script,redirect=noop.js,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/7178
+!#if env_chromium
+||carsensor.net/usedcar/modules/clicklog_$xhr,1p,important,redirect=noop.txt
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/478#issuecomment-612229916
+/analytics/analytics.$~xmlhttprequest,3p
+/ga_setup.js$3p
+/googleanalytics.js$3p
+! https://github.com/uBlockOrigin/uAssets/issues/11262
+-google-analytics/$domain=~wordpress.org,badfilter
+-google-analytics/$3p,domain=~wordpress.org|~brookson.co.uk
+
+! https://github.com/uBlockOrigin/uAssets/pull/4961
+||the-japan-news.com/modules/js/lib/fgp/fingerprint2.js$script,redirect=fingerprint2.js,important
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57295
+||mtsa.com.my/mtcs.php/pageview/track^$image
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57325
+||api.tumblr.com/*/share/stats$script,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/7833
+frogogo.ru##+js(aopw, ADMITAD)
+||artfut.com/static/tagtag.$script,3p,redirect=noop.js
+
+! xhamster stats collection
+||collector.xhamster*.*^
+
+! https://github.com/uBlockOrigin/uAssets/issues/8105
+! block known tracking honeypots
+||copyhomework.com^
+||coursecopy.com^
+||quiztoolbox.com^
+||quizlookup.com^
+||studyeffect.com^
+||testbooksolutions.com^
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/1388
+@@||googletagmanager.com/gtm.js$script,redirect-rule,domain=rocketnews24.com
+
+! https://github.com/uBlockOrigin/uAssets/commit/ee5aec09e45376b7e6fb50ff56cb54425826df0d#commitcomment-44879744
+/stats.php?*event=$image
+
+! beastpics.club etc.
+/check.php?t=*&rand=$image,1p
+
+! https://github.com/easylist/easylist/issues/6724
+/jquery.js?*&rx=*&foxtail=$image,1p
+||jsdelivr.net/npm/skx@*/optical.js
+
+! hd21 group sites analytics
+/counter/?domain=$image,1p
+||hd21.com/ajax/track?
+
+! drtuber.desi analytics
+||drtuber.*/ajax/track?track_type=
+
+! dekki.com analytics
+||playbrain.io/analytics/
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/80625
+tweakers.net##+js(aost, btoa, send)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81533
+||yuktamedia.com^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81778
+||gamedock.io^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/9103
+*$script,redirect-rule=noopjs,domain=kruidvat.nl
+kruidvat.nl##.async-hide:style(opacity:1.0 !important)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/75098
+||stats.webgames.io^
+
+! https://www.reddit.com/r/uBlockOrigin/comments/niiytr/help_needed_filtering_wwwsporizle1pw/
+||sporizle1.pw/embed/*?stat=$frame
+
+! https://github.com/uBlockOrigin/uAssets/issues/9273
+||blogfoster.com^$3p
+
+! mettablog.com
+||myanalytic.net^$3p
+
+! simply-hentai.com beacon
+||t.simply-hentai.com^
+
+! https://search.brave.com/search?q=Chromium
+search.brave.com##+js(no-fetch-if, body:browser)
+
+! https://github.com/uBlockOrigin/uAssets/pull/9472
+||d3bch4rrbnbe5n.cloudfront.net/pxl.png^
+
+! https://github.com/uBlockOrigin/uAssets/issues/9123
+/visilabs.min.js
+
+! https://github.com/orgs/uBlockOrigin/teams/ublock-filters-volunteers/discussions/354
+||civicscience.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/9932
+/\/[a-z0-9]{12}\/[a-zA-Z0-9\/\+\-]{97,106}$/$match-case,script,1p,strict1p
+/^https?:\/\/[0-9a-z]{11,13}\.[^\/]*\/[a-zA-Z0-9\/\+\-]{90,106}$/$match-case,script,1p,strict3p
+/dataunlocker$script,1p,domain=~dataunlocker.com
+/www\.eldorado\.gg\/[a-zA-Z0-9]{10,13}\.js/$1p,script,domain=eldorado.gg
+||ampl.cinotes.com^
+||data-saver-cindi.herokuapp.com^
+||cdn.cindicator.com/$script,3p
+!#if cap_html_filtering
+botcomics.com,cefirates.com,chandlerorchards.com,comicleaks.com,marketdata.app,monumentmetals.com,tapmyback.com,ping.gg,revistaferramental.com.br,hawpar.com,alpacafinance.org,nookgaming.com,enkeleksamen.no,kvest.ee,creatordrop.com,panpots.com,cybernetman.com,bitdomain.biz,gerardbosch.xyz,fort-shop.kiev.ua,accuretawealth.com,resourceya.com,tracktheta.com,adaptive.marketing##^script:has-text("join('')")
+alpacafinance.org,tt.live,future-fortune.com,abhijith.page,furucombo.app,madrigalmaps.com,adventuretix.com##^script:has-text('join("")')
+panprices.com,intercity.technology,freelancer.taxmachine.be,kodalia.com,adria.gg,fjlaboratories.com##^script:has-text(api.dataunlocker.com)
+!#else
+botcomics.com,cefirates.com,chandlerorchards.com,comicleaks.com,marketdata.app,monumentmetals.com,tapmyback.com,ping.gg,revistaferramental.com.br,hawpar.com,alpacafinance.org,nookgaming.com,enkeleksamen.no,kvest.ee,creatordrop.com,panpots.com,cybernetman.com,bitdomain.biz,gerardbosch.xyz,fort-shop.kiev.ua,accuretawealth.com,resourceya.com,tracktheta.com##+js(rmnt, script, /join\(\'\'\)/)
+alpacafinance.org,tt.live,future-fortune.com,abhijith.page,madrigalmaps.com,adventuretix.com##+js(rmnt, script, /join\(\"\"\)/)
+panprices.com,intercity.technology,freelancer.taxmachine.be,adria.gg,fjlaboratories.com##+js(rmnt, script, api.dataunlocker.com)
+!#endif
+
+! https://www.reddit.com/r/uBlockOrigin/comments/opoba7/washington_post_showing_ad_placeholders/
+||washpost.nile.works^
+
+! https://github.com/easylist/easylist/commit/6457d9a221b19bf6d011d314d0bf14476d18f428#commitcomment-54257940
+/p13n/batch/action/*$image
+
+! Ad-Shield
+! https://github.com/uBlockOrigin/uAssets/issues/9717
+loawa.com,ygosu.com,sportalkorea.com,algumon.com,hancinema.net,enetnews.co.kr,edaily.co.kr,economist.co.kr,etoday.co.kr,hankyung.com,isplus.com,hometownstation.com,kagit.kr,inven.co.kr,viva100.com,joongdo.co.kr,jjang0u.com,tenbizt.com,tvreport.co.kr,newautopost.co.kr,mememedia.co.kr,mobilitytv.co.kr,cboard.net,a-ha.io,interfootball.co.kr,fourfourtwo.co.kr,apkmirror.com,dotkeypress.kr,viewcash.co.kr,tripplus.co.kr,enterdiary.com,mtodayauto.com,genshinlab.com,hotplacehunter.co.kr,mystylezip.com,majorgeeks.com,poro.gg,maple.gg,lolchess.gg,dak.gg,newdaily.co.kr,meconomynews.com,brandbrief.co.kr,dfast.kr,thephoblographer.com,dogdrip.net,youtu.co,honkailab.com,warcraftrumbledeck.com,golf-live.at,mlbpark.donga.com,gamingdeputy.com,thestockmarketwatch.com,capress.kr,carandmore.co.kr,maxmovie.kr,motorgraph.com,newsbell.co.kr,tminews.co.kr,thehousemagazine.kr,hardreset.info,metabattle.com,thesaurus.net,maketecheasier.com,tweaksforgeeks.com,issuya.com,alle-tests.nl,topstarnews.net,allthetests.com,motorbikecatalog.com,heraldcorp.com##+js(set-local-storage-item, adshield-analytics-uuid, $remove$)
+loawa.com,ygosu.com,sportalkorea.com,algumon.com,hancinema.net,enetnews.co.kr,edaily.co.kr,economist.co.kr,etoday.co.kr,hankyung.com,isplus.com,hometownstation.com,kagit.kr,inven.co.kr,viva100.com,joongdo.co.kr,jjang0u.com,tenbizt.com,tvreport.co.kr,newautopost.co.kr,mememedia.co.kr,mobilitytv.co.kr,cboard.net,a-ha.io,interfootball.co.kr,fourfourtwo.co.kr,apkmirror.com,dotkeypress.kr,viewcash.co.kr,tripplus.co.kr,enterdiary.com,mtodayauto.com,genshinlab.com,hotplacehunter.co.kr,mystylezip.com,majorgeeks.com,poro.gg,maple.gg,lolchess.gg,dak.gg,newdaily.co.kr,meconomynews.com,brandbrief.co.kr,dfast.kr,thephoblographer.com,dogdrip.net,youtu.co,honkailab.com,warcraftrumbledeck.com,golf-live.at,mlbpark.donga.com,gamingdeputy.com,thestockmarketwatch.com,capress.kr,carandmore.co.kr,maxmovie.kr,motorgraph.com,newsbell.co.kr,tminews.co.kr,thehousemagazine.kr,hardreset.info,metabattle.com,thesaurus.net,maketecheasier.com,tweaksforgeeks.com,issuya.com,alle-tests.nl,topstarnews.net,allthetests.com,motorbikecatalog.com,heraldcorp.com##+js(set-local-storage-item, as_profile_cache, $remove$)
+loawa.com,ygosu.com,sportalkorea.com,algumon.com,hancinema.net,enetnews.co.kr,edaily.co.kr,economist.co.kr,etoday.co.kr,hankyung.com,isplus.com,hometownstation.com,kagit.kr,inven.co.kr,viva100.com,joongdo.co.kr,jjang0u.com,tenbizt.com,tvreport.co.kr,newautopost.co.kr,mememedia.co.kr,mobilitytv.co.kr,cboard.net,a-ha.io,interfootball.co.kr,fourfourtwo.co.kr,apkmirror.com,dotkeypress.kr,viewcash.co.kr,tripplus.co.kr,enterdiary.com,mtodayauto.com,genshinlab.com,hotplacehunter.co.kr,mystylezip.com,majorgeeks.com,poro.gg,maple.gg,lolchess.gg,dak.gg,newdaily.co.kr,meconomynews.com,brandbrief.co.kr,dfast.kr,thephoblographer.com,dogdrip.net,youtu.co,honkailab.com,warcraftrumbledeck.com,golf-live.at,mlbpark.donga.com,gamingdeputy.com,thestockmarketwatch.com,capress.kr,carandmore.co.kr,maxmovie.kr,motorgraph.com,newsbell.co.kr,tminews.co.kr,thehousemagazine.kr,hardreset.info,metabattle.com,thesaurus.net,maketecheasier.com,tweaksforgeeks.com,issuya.com,alle-tests.nl,topstarnews.net,allthetests.com,motorbikecatalog.com,heraldcorp.com##+js(set-local-storage-item, as_accetpable_ads_blocked_cache, $remove$)
+loawa.com,ygosu.com,sportalkorea.com,algumon.com,hancinema.net,enetnews.co.kr,edaily.co.kr,economist.co.kr,etoday.co.kr,hankyung.com,isplus.com,hometownstation.com,kagit.kr,inven.co.kr,viva100.com,joongdo.co.kr,jjang0u.com,tenbizt.com,tvreport.co.kr,newautopost.co.kr,mememedia.co.kr,mobilitytv.co.kr,cboard.net,a-ha.io,interfootball.co.kr,fourfourtwo.co.kr,apkmirror.com,dotkeypress.kr,viewcash.co.kr,tripplus.co.kr,enterdiary.com,mtodayauto.com,genshinlab.com,hotplacehunter.co.kr,mystylezip.com,majorgeeks.com,poro.gg,maple.gg,lolchess.gg,dak.gg,newdaily.co.kr,meconomynews.com,brandbrief.co.kr,dfast.kr,thephoblographer.com,dogdrip.net,youtu.co,honkailab.com,warcraftrumbledeck.com,golf-live.at,mlbpark.donga.com,gamingdeputy.com,thestockmarketwatch.com,capress.kr,carandmore.co.kr,maxmovie.kr,motorgraph.com,newsbell.co.kr,tminews.co.kr,thehousemagazine.kr,hardreset.info,metabattle.com,thesaurus.net,maketecheasier.com,tweaksforgeeks.com,issuya.com,alle-tests.nl,topstarnews.net,allthetests.com,motorbikecatalog.com,heraldcorp.com##+js(set-local-storage-item, as_adblock_cache, $remove$)
+apkmirror.com,dotkeypress.kr,viewcash.co.kr,tripplus.co.kr,enterdiary.com,mtodayauto.com,hotplacehunter.co.kr,mystylezip.com,majorgeeks.com,poro.gg,maple.gg,lolchess.gg,dak.gg,meconomynews.com,brandbrief.co.kr,dfast.kr,youtu.co,mlbpark.donga.com,capress.kr,carandmore.co.kr,maxmovie.kr,motorgraph.com,newsbell.co.kr,tminews.co.kr,thehousemagazine.kr,hardreset.info,metabattle.com,maketecheasier.com,topstarnews.net,heraldcorp.com##+js(noeval-if, /07c225f3\.online|content-loader\.com|css-load\.com|html-load\.com/)
+!#if cap_html_filtering
+apkmirror.com,dotkeypress.kr,viewcash.co.kr,tripplus.co.kr,enterdiary.com,mtodayauto.com,hotplacehunter.co.kr,mystylezip.com,majorgeeks.com,poro.gg,maple.gg,lolchess.gg,dak.gg,meconomynews.com,brandbrief.co.kr,dfast.kr,youtu.co,mlbpark.donga.com,capress.kr,carandmore.co.kr,maxmovie.kr,motorgraph.com,newsbell.co.kr,tminews.co.kr,thehousemagazine.kr,hardreset.info,metabattle.com,maketecheasier.com,motorbikecatalog.com,heraldcorp.com##^script:has-text(KCgpPT57bGV0IGU)
+issuya.com,topstarnews.net##^script:has-text(error-report.com)
+!#else
+apkmirror.com,dotkeypress.kr,viewcash.co.kr,tripplus.co.kr,enterdiary.com,mtodayauto.com,hotplacehunter.co.kr,mystylezip.com,majorgeeks.com,poro.gg,maple.gg,lolchess.gg,dak.gg,meconomynews.com,brandbrief.co.kr,dfast.kr,youtu.co,mlbpark.donga.com,capress.kr,carandmore.co.kr,maxmovie.kr,motorgraph.com,newsbell.co.kr,tminews.co.kr,thehousemagazine.kr,hardreset.info,metabattle.com,maketecheasier.com,motorbikecatalog.com,heraldcorp.com##+js(rmnt, script, KCgpPT57bGV0IGU)
+issuya.com,topstarnews.net##+js(rmnt, script, error-report.com)
+!#endif
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/91230
+||nsfw.xxx/vendor/fingerprint/fingerprint2.min.js$script,redirect=fingerprint2.js,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/9799
+! https://github.com/AdguardTeam/AdguardFilters/issues/102311
+||collector.xhwebsite.com^
+||collector.hamsterix.*^
+||collector.xhwide1.com^
+
+! https://www.reddit.com/r/uBlockOrigin/comments/p9lity/how_to_block_favicon_popups_on_these_websites/
+||g.jwpsrv.com/g/gcid-*?notrack$frame
+
+! https://github.com/uBlockOrigin/uAssets/issues/10012
+tacobell.com##+js(set, bmak.js_post, false)
+
+! https://github.com/easylist/easylist/pull/9136
+||cloudflare.com/ajax/libs/fingerprintjs2/$script,redirect=fingerprint2.js,important,domain=gamebox.gesoten.com
+
+! https://github.com/easylist/easylist/pull/9137
+||gamerch.com/s3-assets/library/js/fingerprint2.min.js$script,redirect=fingerprint2.js,important
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/95660
+||ahentai.top/counter.php
+
+! https://github.com/easylist/easylist/pull/9370
+||tr.jianshu.com^
+
+! https://github.com/easylist/easylist/pull/9469#issuecomment-950179366
+/lib/f_ad_code.js
+
+! https://github.com/Yuki2718/adblock/issues/40
+! https://github.com/Yuki2718/adblock/issues/44
+! https://www.reddit.com/r/uBlockOrigin/comments/udaxzt/block_fingerprinting_javascript_with_completely/i8xaru3/
+/\.com\/[-_0-9a-zA-Z]{4,}\/[-\/_0-9a-zA-Z]{25,}$/$script,1p,domain=gu-global.com|uniqlo.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/r06yju/sur_in_english_website_recognises_ad_blocker/
+||metrics.surinenglish.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/10615#issuecomment-980221624
+@@||natureetdecouvertes.com^*/pixel.png$~third-party,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/10630
+||cm.bilibili.com/cm/api/$xhr
+
+! https://github.com/uBlockOrigin/uAssets/issues/10679
+||wannads.com/api/track/fingerprint^
+
+! https://github.com/uBlockOrigin/uAssets/issues/10690
+||wuzhuiso.com^$removeparam=src
+
+! https://github.com/uBlockOrigin/uAssets/pull/10610
+||statwup.huya.com^
+||va.huya.com^
+||e-stat.huya.com^
+
+! pornocolombiano.net analytics
+||analytics.tiendaenoferta.com^
+
+! https://github.com/uBlockOrigin/uAssets/issues/10995
+||zhihu.com^$removeparam=hybrid_search_source
+||zhihu.com^$removeparam=hybrid_search_extra
+
+! https://github.com/easylist/easylist/issues/6724#issuecomment-1003172754
+! https://github.com/uBlockOrigin/uAssets/pull/15692#issuecomment-1321098072
+blog.skk.moe##+js(no-fetch-if, body:/[\w\W]{700}/)
+skk.moe##+js(no-fetch-if, method:/post|posT|poSt|poST|pOst|pOsT|pOSt|pOST|Post|PosT|PoSt|PoST|POst|POsT|POSt|POST/)
+blog.skk.moe##+js(no-fetch-if, /\/post\/.*\.json/)
+/cfga/jquery.js?$image
+/npm/sks@0.*/lazyload.js$script,3p
+
+! jzzo.com,xxxvogue.net, etc.
+/s/js/ta-2.3.js?
+
+! https://github.com/uBlockOrigin/uAssets/issues/11152#issuecomment-1011094338
+||rjno1.com/cdn-cgi/challenge-platform/h/b/scripts/invisible.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/11278
+||mynewsmedia.co/*/Linkpage/ads_stats_controller.php
+||gplinks.co/Auth/ads_stats_controller.php
+
+! https://github.com/uBlockOrigin/uAssets/issues/9970
+||videovard.*/api/front/view^$xhr,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/11644
+endbasic.dev,jmmv.dev##+js(no-xhr-if, method:POST)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/106875
+||b90.yahoo.co.jp^
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/110958
+||jsdelivr.net^*/fp.min.js$script,redirect-rule=fingerprint3.js:10
+
+! https://github.com/uBlockOrigin/uAssets/issues/11885
+/log/*$xhr,domain=vizcloud.*|vizcloud2.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/11895
+||serasaexperian.com.br/dist/scripts/fingerprint2.js^$redirect=fingerprint2.js,script,important
+
+! https://www.reddit.com/r/uBlockOrigin/comments/u13isu/how_to_block_fathom_tracking
+/?p=%2F*&h=https%3A%2F%2F*&r=&sid=*&qs=*&cid=$image,1p
+/?h=https%3A%2F%2F*&r=&sid=*&qs=*&cid=$image,1p
+/?v=eyJoIjoiaHR0cHM6Ly9$image,1p
+/?v=eyI*sImgiOiJodHRwczovL$image,1p
+!/^https?:\/\/[-.0-9a-z]+\/script\.js$/$script,1p,strict3p,match-case
+
+! https://www.reddit.com//r/uBlockOrigin/comments/u4ef87/webtoons_redirects_to_loginfracom_and_back_to/
+webtoons.com##+js(set, ccsrv, '')
+webtoons.com##+js(set, lcs_SerName, '')
+
+! https://github.com/uBlockOrigin/uAssets/issues/13059
+||hdslb.com/bfs/cm/cm-sdk/static/js/bili-collect.js$script,redirect=noop.js,domain=bilibili.com,important
+
+! https://vostanimez.com/Episode/shokei-shoujo-no-ikiru-michi-the-executioner-and-her-way-of-life-vostfr-saison-1-episode-6-streaming-hd/
+||imsdb.pw/player/ip.php
+
+! tarnkappe. info tracking
+tarnkappe.info##+js(aopr, Matomo)
+://posthog.$script,domain=~posthog.com
+
+! https://assets.acdn.no/pkg/@amedia/browserid/1.1.6/index.js trackers
+! https://github.com/uBlockOrigin/uAssets/pull/13408#issuecomment-1341756510
+! ||no/api/aid/users/self?filter=*tracking$xhr
+
+! https://github.com/uBlockOrigin/uAssets/issues/13958
+||play.google.com/store/apps/*referrer$removeparam=referrer
+||apps.apple.com/*/app/*referrer$removeparam=referrer
+
+! https://github.com/uBlockOrigin/uAssets/issues/13970
+||securemetrics.apple.com/b/ss/*maps$image,important
+
+! techpowerup. com ping
+||techpowerup.com/__botcheck$xhr
+
+! darkreader. org pings
+||stats.darkreader.app^
+||statistics.darkreader.app^
+||counter.darkreader.app^
+||herokudns.com^$xhr,domain=darkreader.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/14653
+||hktvmall.com/yuicombo?$script,removeparam=/_ui/shared/common/js/analytics/with-intersection-track.js
+||hktvmall.com/yuicombo?$script,removeparam=/_ui/shared/common/js/InappCommunicationManager.js
+||hktvmall.com/yuicombo?$script,removeparam=/_ui/shared/common/js/util/jquery.analytics-utils.js
+||hktvmall.com/yuicombo?$script,removeparam=/^\/_ui\/desktop\/common\/js\/uiAnalytics\//
+||hktvmall.com/_ui/desktop/common/js/uiAnalytics/
+||hktvmall.com/_ui/shared/common/js/analytics/with-intersection-track.js
+||hktvmall.com/_ui/shared/common/js/util/jquery.analytics-utils.js
+||hktvmall.com/yuicombo|$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/14850#issuecomment-1249571859
+/discourse-fingerprint-
+
+! https://github.com/easylist/easylist/issues/13695
+ericdraken.com##+js(aopr, dataLayer)
+ericdraken.com##^script[async]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81856
+/s/s/js/m/om.js?v=
+
+! https://github.com/uBlockOrigin/uAssets/issues/4059
+! https://github.com/AdguardTeam/AdguardFilters/issues/135665
+://vip.*/?pge=$image,3p
+://ply.*/?v=$image,3p
+
+! brave.com analytics
+||brave.com/static-assets/js/analysis.js
+
+! https://www.girlsofdesire.org/galleries/kana-kusakabe/00.html
+/images/*/analytics.js$domain=girlsofdesire.org
+
+! t3n.de tracking
+||cl.t3n.de^
+||c2shb.pubgw.yahoo.com/admax/bid/partners/PBJS
+
+! doucolle.net analytics
+||blozoo.info/js/inouttool/
+
+! https://github.com/uBlockOrigin/uAssets/issues/16478
+!||linkedin.com/li/track$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/16730#issuecomment-1427957300
+utreon.com##+js(no-xhr-if, utreon.com/pl/api/event method:POST)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16731
+/^https:\/\/[0-9a-z]{7,25}\.com\/v2(?:\/0\/)?(?=[-_0-9a-z]{0,84}[A-Z])(?=[-_a-zA-Z]{0,84}[0-9])[-_0-9a-zA-Z]{54,85}(#\?v=[0-9a-f]{32})?$/$script,xhr,3p,match-case
+! https://github.com/uBlockOrigin/uBlock-discussions/discussions/461
+!#if ext_devbuild
+/^https:\/\/[0-9a-z]{7,25}\.com\/(?:build|bundles|chunks|dist|files|j|public|scripts|static)?\/?[0-9a-f]{6,15}\/?[0-9a-f]{21,36}(?:[-.](?:ma?in|prod|index))?(?:\.js)?$/$script,3p,match-case
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/16751
+zhihu.com##+js(no-xhr-if, log-sdk.ksapisrv.com/rest/wd/common/log/collect method:POST)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/114908#issuecomment-1438714714
+||torimochi.line-apps.com^$image,redirect=1x1.gif
+
+! bilibili.com browser fingerprint collect
+||api.bilibili.com/x/internal/gaia-gateway/ExClimbWuzhi$xhr,1p
+
+! https://github.com/easylist/easylist/issues/14723
+||p.typekit.net/p.css$css,redirect-rule=noop.css
+||p.typekit.net/p.css$css,domain=browserstack.com|bungie.net|robertsspaceindustries.com,redirect=noop.css,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/17041
+-telemetry.officeapps.live$ping,xhr
+
+! https://github.com/uBlockOrigin/uAssets/issues/17119
+||flow.microsoft.com/providers/Internal.Telemetry
+
+! https://github.com/uBlockOrigin/uAssets/issues/17120
+||client-telemetry.roblox.com^
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11rjv8n/
+||kemono.party/js/script.js
+
+! AdSpyglass tracker
+/api/click/*?c=$image
+
+! redirector
+||cj.dotomi.com^
+||contentads.click^
+||new-twinks.com^
+||pingleflavor.xyz^
+||suptrkdisplay.com^
+||terperbelomo.info^
+||thebestoffers4you.net^
+||trck.eczyl.com^
+||trcp.gamefantech.com^
+||turbotrck.art^
+||new-psh.com^
+||track.opt-tds.com^
+||track.link-tds.com^
+||freetrckr.com^
+||news-pewuce.com^
+||tranderous.com^
+||cjewz.com^
+||chpok.site^
+||communityease.click^
+||driversign.click^
+||smartaccess.biz^
+||adonsonlyd.xyz^
+
+! https://github.com/uBlockOrigin/uAssets/issues/17786
+! https://github.com/uBlockOrigin/uAssets/issues/20569
+||adthrive.com^$removeparam,from=~mediaite.com|~a-z-animals.com
+
+! branch.io sites
+||cdn.branch.io/branch-latest.min.js$important,domain=nbc.com|pac-12.com
+
+! onesignal-sites
+||onesignal.com^$domain=blurayufr.xyz|columbian.com|faqwiki.us|freecoursesonline.me|ftuapps.dev|gamersdiscussionhub.com|levelupalone.com|onehack.us|xiaomitools.com
+
+! narrative.com sites
+||narrativ.com^$domain=androidauthority.com
+
+! optimizely-sites
+! https://github.com/uBlockOrigin/uAssets/issues/18787
+! https://www.reddit.com/r/uBlockOrigin/comments/157utus/articles_on_mindbodygreencom_wont_load/
+||optimizely.com^$domain=mindbodygreen.com
+||mindbodygreen.com/js/optimizely-$script,1p
+mindbodygreen.com##+js(set-local-storage-item, segmentDeviceId, $remove$)
+
+! matomo-sites
+||pl.kukaj.to/kukac.js
+
+! geoip.cdn.arkadiumhosted.com
+||geoip.cdn.arkadiumhosted.com^$domain=bestforpuzzles.com|charlotteobserver.com|dailygazette.com|independent.co.uk|miamiherald.com|standard.co.uk|word.tips
+
+! sites with beacons
+*$ping,domain=webnovel.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17652
+*$xhr,3p,denyallow=github.com|stripe.com|fpjs.pro,domain=fingerprint.com|~dev.fingerprint.com
+||fingerprint.com^$strict3p,domain=fingerprint.com|~dev.fingerprint.com|~dashboard.fingerprint.com
+||dashboard.fingerprint.com^$strict3p,xhr,domain=dashboard.fingerprint.com
+fingerprint.com,~dev.fingerprint.com##+js(no-xhr-if, method:POST)
+
+! lightboxcdn.com
+||lightboxcdn.com^$domain=androidauthority.com|variety.com
+||lightboxcdn.com/*/digibox.gif?
+||lightboxcdn.com/*/jsonp/z?
+
+! firebase analytics
+/firebase-analytics.js$script,domain=zefoy.com
+zefoy.com##+js(set, firebase.analytics, noopFunc)
+! https://github.com/AdguardTeam/AdguardFilters/issues/156959
+||firebase.googleapis.com^$domain=hotmediahub.com
+
+! PMC-sites tracking
+/pmc-plugins/pmc-social-share-bar/*/tracking.js
+
+! McClatchy-sites tracking
+/ng.gif?s*&e=$image,strict3p
+||logging.pw.adn.cloud^
+
+! https://github.com/easylist/easylist/pull/16317#issuecomment-1593693211
+!||analytics-sdk.yle.fi^$script,1p,important
+!yle.fi##+js(set, yleAnalytics, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18562
+bikesales.com.au##^html > head > :is([name="canonical"], [rel="canonical"]):not([content*="/details/"]):upward(1) > script[src*="optimizely"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/7646
+! https://github.com/AdguardTeam/AdguardFilters/issues/154632
+||telemetry*.transcend.io^
+
+! https://www.eevblog.com/forum/buysellwanted/ fingerprint
+||eevblog.com/forum/fp.php
+
+! https://www.s4c.cymru/clic/series/864836464?sup=1 trackers
+||2cnt.net/j0=$image,domain=s4c.cymru
+||player-api.s4c-cdn.co.uk/analytics/$domain=s4c.cymru
+
+! https://github.com/uBlockOrigin/uAssets/issues/18880
+||aas.medialaben.no/a/
+
+! https://nv.ua/ tracking cookie
+! https://github.com/uBlockOrigin/uAssets/commit/299bcbbf7faed0f1007dc32197438f8c9a28af28#r122193300
+||remp.nv.ua/assets/lib/js/remplib.js
+
+! https://github.com/uBlockOrigin/uBlock-issues/discussions/2714#discussioncomment-6396384
+! https://github.com/uBlockOrigin/uAssets/issues/21516
+!#if env_chromium
+*$permissions=browsing-topics=(),from=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+*$permissions=idle-detection=(),from=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+*$permissions=join-ad-interest-group=(),from=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+*$permissions=run-ad-auction=(),from=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+*$permissions=attribution-reporting=(),from=~localhost|~127.0.0.1|~[::1]|~0.0.0.0|~[::]|~local
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/19100
+/^https:\/\/kick\.com\/[0-9A-z]{16}\/[0-9A-z]{16}\?apiKey=/$script,1p,match-case,domain=kick.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/1576b91/this_malicious_script_should_be_blocked/
+||protesidenext.com^
+||simonzody.com^
+
+! https://www.nickjr.com/video/n0d0md/gabby-s-dollhouse-gabby-s-dollhouse-official-trailer
+||tags.tiqcdn.com^$domain=nickjr.com
+||events.paramount.tech^$redirect=nooptext,domain=nickjr.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/19194
+||mps.nbcuni.com/images/MPS-STATISTIC-REPORTING.png
+
+! https://github.com/uBlockOrigin/uAssets/issues/19221
+||ab.blogs.es/abtest.png^$image,3p,domain=xataka.com|trendencias.com,redirect=1x1.gif,important
+
+! Click Trackers
+! https://reddit.com/r/uBlockOrigin/comments/14t3y1d/
+lite.duckduckgo.com##+js(href-sanitizer, a[href^="//duckduckgo.com/l/?uddg="], ?uddg)
+! https://androidauthority.com/third-party-reddit-apps-statement-3332238/
+androidauthority.com##+js(href-sanitizer, a[href^="https://androidauth.wpengine.com/wp-json/api/advanced_redirect?ref="], ?ref)
+||androidauthority.com/api/locate/
+! https://github.com/uBlockOrigin/uBlock-issues/issues/2531#issuecomment-1512373333
+mozilla.org##+js(href-sanitizer, a[href^="https://app.adjust.com/"][href*="?redirect="], ?redirect)
+! https://pcgamingwiki.com/wiki/Grand_Theft_Auto_V
+pcgamingwiki.com##+js(href-sanitizer, a[href^="https://www.dpbolvw.net/click-"][href*="?url="], ?url)
+pcgamingwiki.com##+js(href-sanitizer, a[href^="https://greenmangaming.sjv.io/c/"][href*="?u="], ?u)
+! https://starstyle.com
+starstyle.com##+js(href-sanitizer, a[href^="https://go.skimresources.com/"][href*="&url=http"], ?url)
+! https://insidehook.com/deals
+insidehook.com##+js(href-sanitizer, a[href^="https://click.linksynergy.com/deeplink?id="][href*="&murl="], ?murl)
+insidehook.com##+js(href-sanitizer, a[href*="?"][href*="&url=http], ?url)
+insidehook.com##+js(href-sanitizer, a[href*="?"][href*="&u=http"], ?u)
+! [NSFW] https://fap18.net/video/88120176/danny-d-2-milfs-and-that-big-cock?c=milf & https://fap18.net/xid/45560506/ and similar
+fap18.net,xxxmom.net,fuck55.net,gofucker.com,sexu.tv,vid123.net,babe8.net,beeg.porn##+js(href-sanitizer, a[href^="/vp/player/to/?u=http"]\, a[href^="/vp/download/goto/?u=http"], ?u)
+! [NSFW] https://losporn.org/black-beautys-10-watch-online-free and similar
+! https://github.com/uBlockOrigin/uAssets/issues/20330
+losporn.org,streamporn.li,pandamovies.org,bananamovies.org,xopenload.net,adultdvdparadise.com,speedporn.net,mangoporn.net,pandamovie.info,mangoporn.co,mangoparody.com,xxxscenes.net,pornkino.cc,watchxxxfree.pw,pandamovie.in,speedporn.pw,watchfreexxx.net,youwatchporn.com,watchpornfree.info,pandamovies.me,xtapes.me,netflixporno.net,pornwish.org,freeomovie.info,fullxxxmovies.me,watchpornx.com,xxxparodyhd.net,xxxstream.me,pornwatch.ws,xopenload.pw,onstreams.net,playpornfree.xyz,pandamovies.pw,streamporn.pw,xopenload.me##+js(href-sanitizer, a[href^="https://drivevideo.xyz/link?link=http"], ?link)
+! https://nowinstock.net/computers/videocards/nvidia/rtx4090/
+nowinstock.net##+js(href-sanitizer, a[href^="https://click.linksynergy.com/deeplink?id="][href*="&murl="], ?murl)
+nowinstock.net##+js(href-sanitizer, a[href^="http://go.redirectingat.com"][href*="&url="], ?url)
+nowinstock.net##+js(href-sanitizer, a[href*="?"][href*="&u=http"], ?u)
+! https://paypal.com/uk/home
+paypal.com##+js(href-sanitizer, a[href^="https://app.adjust.com/"][href*="?fallback=http"], ?fallback)
+! https://elotrolado.net/hilo_el-podcast-de-eol-episodio-43-e3-cronica-de-una-muerte-anunciada_2360079
+elotrolado.net##+js(href-sanitizer, a[href^="https://go.redirectingat.com?url=http"], ?url)
+! [NSFW] https://tube188.com/catalog/cheating/
+tube188.com##+js(href-sanitizer, a[href^="/check.php?"][href*="&url=http"], ?url)
+! https://tomshardware.com/news/windows-11-gaming-benchmarks-performance-vbs-hvci-security
+tomshardware.com##+js(href-sanitizer, a[href^="https://click.linksynergy.com/deeplink?id="][href*="&murl=http"], ?murl)
+! http://disq.us/p/2vt2qs2
+! https://github.com/uBlockOrigin/uAssets/issues/20066
+disqus.com##+js(href-sanitizer, a[href^="https://disq.us/url?url="][title^="http"], [title])
+disqus.com##+js(href-sanitizer, a[href^="https://disq.us/?url=http"], ?url)
+disqus.com##a[href][data-link-out]:remove-attr(data-link-out)
+! https://steamcommunity.com/games/221410/announcements/detail/1602634609636894200
+steamcommunity.com##+js(href-sanitizer, a[href^="https://steamcommunity.com/linkfilter/?url=http"], ?url)
+steamcommunity.com##+js(href-sanitizer, a[href^="https://steamcommunity.com/linkfilter/?u=http"], ?u)
+! https://colab.research.google.com/ - Needs sign-in
+colab.research.google.com##+js(href-sanitizer, a[href^="https://colab.research.google.com/corgiredirector?site=http"], ?site)
+! https://www.xda-developers.com/lenovo-yoga-7i-500-deal/
+xda-developers.com##+js(href-sanitizer, a[href^="https://shop-links.co/link/?"][href*="&url=http"], ?url)
+! https://www.reddit.com/r/uBlockOrigin/comments/17psek6/what_exactly_is_jdoqocycom_and_why_does_every/
+isthereanydeal.com##+js(href-sanitizer, a[href^="http://www.jdoqocy.com/click-"][href*="?URL=http"], ?URL)
+isthereanydeal.com##+js(href-sanitizer, a[href^="https://track.adtraction.com/t/t?"][href*="&url=http"], ?url)
+! https://github.com/easylist/easylist/issues/18317#issuecomment-1895677833
+metager.org##+js(href-sanitizer, a[href^="https://metager.org/partner/r?link=http"], ?link)
+
+! https://chataigpt.org
+/detroitchicago/dpv.gif?$image
+/detroitchicago/imp.gif$ping
+
+! Tracking cookies
+! fastly click-through
+beaumontenterprise.com,chron.com,ctinsider.com,ctpost.com,expressnews.com,houstonchronicle.com,lmtonline.com,middletownpress.com,mrt.com,newstimes.com,nhregister.com,registercitizen.com,sfchronicle.com,stamfordadvocate.com,thehour.com,timesunion.com##+js(cookie-remover, realm.cookiesAndJavascript)
+! heavyfetish.com tracking
+heavyfetish.com##+js(set, flashvars.event_reporting, '')
+heavyfetish.com##+js(cookie-remover, kt_qparams)
+heavyfetish.com##+js(cookie-remover, kt_ips)
+heavyfetish.com##+js(cookie-remover, kt_referer)
+! https://github.com/uBlockOrigin/uAssets/issues/18588
+! https://github.com/uBlockOrigin/uAssets/commit/bae8d13992b1c754f83dc268060a8079973d3253#commitcomment-118856194
+nypost.com,pagesix.com##+js(json-prune, dataLayer.trackingId user.trackingId)
+columbian.com,nypost.com,pagesix.com##+js(cookie-remover, blaize_tracking_id)
+! https://www.factable.com/history/maps-that-show-us-a-new-perspective/3/
+factable.com##+js(cookie-remover, akaclientip)
+factable.com##+js(cookie-remover, hive_geoloc)
+! https://github.com/uBlockOrigin/uAssets/issues/17149#issuecomment-1651198474
+watchporn.to##+js(cookie-remover, kt_ips)
+! https://www.bing.com/
+! https://www.msn.com/en-us/money/markets/elon-musk-s-outlook-on-our-future-turns-dour/ar-AA1iZxwn
+bing.com,msn.com##+js(cookie-remover, MicrosoftApplicationsTelemetryDeviceId)
+! https://capcom.fandom.com/wiki/Gallery:Bishamon
+fandom.com##+js(set-cookie, tracking_session_id, OK, , reload, 1)
+fandom.com##+js(set-cookie, Geo, OK)
+! https://www.clickorlando.com/weather/2023/09/06/cone-computer-models-more-lee-forecast-to-become-major-hurricane/
+clickorlando.com##+js(set-cookie, bitmovin_analytics_uuid, OK)
+
+! Query parameter stripping
+! Google ads/analytics
+$removeparam=gbraid
+$removeparam=wbraid
+$removeparam=gclsrc
+$removeparam=gclid
+! https://support.google.com/analytics/answer/10071811
+$removeparam=_gl
+! https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters
+$removeparam=dclid
+! Facebook analytics
+$removeparam=fbclid
+$removeparam=fb_action_ids
+$removeparam=fb_action_types
+$removeparam=fb_comment_id
+$removeparam=fb_ref
+$removeparam=fb_source
+! Yandex Metrika
+$removeparam=ysclid
+$removeparam=yclid
+! https://help.ads.microsoft.com/apex/index/3/en/60000
+$removeparam=msclkid
+! Wicked Reports click tracking
+$removeparam=wickedid
+! https://tsunen.team-lab.com/?twclid=2-3bhrj1ny7p11v5r9pap3anqge
+$removeparam=twclid
+! Hubspot tracking https://knowledge.hubspot.com/ads/ad-tracking-in-hubspot
+$removeparam=__hsfp
+$removeparam=__hssc
+$removeparam=__hstc
+$removeparam=_hsenc
+$removeparam=hsa_acc
+$removeparam=hsa_ad
+$removeparam=hsa_cam
+$removeparam=hsa_grp
+$removeparam=hsa_kw
+$removeparam=hsa_la
+$removeparam=hsa_mt
+$removeparam=hsa_net
+$removeparam=hsa_ol
+$removeparam=hsa_src
+$removeparam=hsa_tgt
+$removeparam=hsa_ver
+$removeparam=hsCtaTracking
+! MailChimp click tracking
+$removeparam=mc_eid
+! Adobe SiteCatalyst Campaign Tracking ID parameter
+$removeparam=s_cid
+! vero
+$removeparam=vero_conv
+$removeparam=vero_id
+! Olytics
+! https://github.com/brave/brave-browser/issues/17451
+! https://github.com/brave/brave-browser/issues/13644
+! https://www.reddit.com/r/uBlockOrigin/comments/16c6rq0/why_does_ublockorigin_break_this_websites_login/
+$removeparam=rb_clickid
+$removeparam=oly_anon_id
+! https://github.com/brave/brave-browser/issues/11579
+$removeparam=_openstat
+! https://github.com/brave/brave-browser/issues/17507
+$removeparam=ml_subscriber
+$removeparam=ml_subscriber_hash
+! https://github.com/brave/brave-browser/issues/22082
+$removeparam=oft_id
+$removeparam=oft_k
+$removeparam=oft_lk
+$removeparam=oft_d
+$removeparam=oft_c
+$removeparam=oft_ck
+$removeparam=oft_ids
+$removeparam=oft_sk
+! https://github.com/AdguardTeam/AdguardFilters/issues/89869
+! email subscriptions tracking
+$removeparam=bsft_clkid
+$removeparam=bsft_eid
+$removeparam=bsft_mid
+$removeparam=bsft_uid
+$removeparam=bsft_aaid
+$removeparam=bsft_ek
+! https://github.com/brave/brave-browser/issues/25691
+$removeparam=guce_referrer
+$removeparam=guce_referrer_sig
+! Matomo/Piwik
+$removeparam=mtm_campaign
+$removeparam=mtm_cid
+$removeparam=mtm_content
+$removeparam=mtm_group
+$removeparam=mtm_keyword
+$removeparam=mtm_medium
+$removeparam=mtm_placement
+$removeparam=mtm_source
+$removeparam=pk_campaign
+$removeparam=pk_medium
+$removeparam=pk_source
+! ActiveCampaign
+! https://github.com/brave/brave-browser/issues/26295
+$removeparam=vgo_ee
+! Cxense clickthrough tracking
+$removeparam=cx_click
+$removeparam=cx_recsOrder
+$removeparam=cx_recsWidget
+! adjust.com tracking
+$removeparam=gps_adid
+$removeparam=unicorn_click_id
+$removeparam=adjust_creative
+$removeparam=adjust_tracker_limit
+$removeparam=adjust_tracker
+$removeparam=adjust_adgroup
+$removeparam=adjust_campaign
+! impact.com
+$removeparam=ir_campaignid
+$removeparam=ir_adid
+$removeparam=irclickid
+$removeparam=ir_partnerid
+! https://github.com/brave/brave-browser/issues/34578
+$removeparam=_kx
+! https://github.com/DandelionSprout/adfilt/discussions/163#discussioncomment-5867802
+$removeparam=asc_campaign,domain=aboutamazon.com|amazon.*|amzn.to
+$removeparam=asc_refurl,domain=aboutamazon.com|amazon.*|amzn.to
+$removeparam=asc_source,domain=aboutamazon.com|amazon.*|amzn.to
+! youtube.com - Copy video URL at its search result via mouse right click.
+||youtube.com^$removeparam=pp
+! https://github.com/AdguardTeam/AdguardFilters/issues/159953
+! https://github.com/uBlockOrigin/uAssets/issues/20586#issuecomment-1898819333
+$removeparam=si,domain=youtu.be|youtube-nocookie.com|music.youtube.com|www.youtube.com
+! Embedded tweets
+$removeparam=refsrc,domain=twitter.com|x.com
+$removeparam=ref_src,domain=twitter.com|x.com
+$removeparam=ref_url,domain=twitter.com|x.com
+! Twitter
+$removeparam=cxt,domain=twitter.com|x.com
+$removeparam=s,domain=twitter.com|x.com
+! https://github.com/brave/adblock-lists/pull/1455
+! eBay tracking parameters
+||www.ebay.$removeparam=ssspo
+||www.ebay.$removeparam=sssrc
+||www.ebay.$removeparam=ssuid
+||www.ebay.$removeparam=mkevt
+||www.ebay.$removeparam=mkcid
+||www.ebay.$removeparam=_trkparms
+||www.ebay.$removeparam=_trksid
+||www.ebay.$removeparam=amdata
+||www.ebay.$removeparam=mkrid
+||www.ebay.$removeparam=campid
+! https://github.com/uBlockOrigin/uAssets/issues/18938#issuecomment-1693238481
+! https://community.brave.com/t/unable-to-open-reddit-com-urls-in-private-tabs/503125/4
+!#if env_firefox
+||reddit.com^$removeparam=rdt,doc
+!#endif
+! Exceptions
+@@||web.archive.org/*/http$removeparam
+
+! https://github.com/easylist/easylist/issues/16468#issuecomment-1691717458
+natgeotv.com##+js(no-xhr-if, /VisitorAPI|AppMeasurement/)
+natgeotv.com##+js(set, Visitor, {})
+||fichub.com/plugins/adobe/lib/$xhr,domain=natgeotv.com,important
+
+! https://comikey.com/
+||house.comikey.com/unw.gif?$image,1p
+
+! https://github.com/easylist/easylist/issues/17135
+||googletagmanager.com/gtag/js$domain=starblast.io,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/19954
+||cdn.cuty.io/fps.js^$domain=tickzoo.tv
+
+! https://github.com/uBlockOrigin/uAssets/issues/19998
+||roshy.tv/wp-content/uploads/perfmatters/gtagv4.js
+
+! https://lenovo.com/us/en/legal/copytrade/?orgRef=[...] - Search Google for "Lenovo copyright", Click on the first result
+www.lenovo.com##+js(aost, history.replaceState, injectedScript)
+
+! https://developers.google.com/tag-platform/tag-manager/server-side/send-data
+! https://simoahava.com/analytics/server-side-tagging-google-tag-manager
+!*$1p,strict3p,script,header=via:1.1 google
+
+! PersianBlocker filters
+! web.bale.ai - Tracking (OS and browser)
+!#if !env_mobile
+web.bale.ai##+js(trusted-set, navigator.userAgent, Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/119.0.0.0 Safari/537.36)
+!#else
+web.bale.ai##+js(trusted-set, navigator.userAgent, Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML\, like Gecko) Chrome/119.0.6045.66 Mobile Safari/537.36)
+!#endif
+! https://www.halaldownload.com/%d8%af%d8%a7%d9%86%d9%84%d9%88%d8%af-%d9%82%d8%b3%d9%85%d8%aa-6-%d9%81%d8%b5%d9%84-2-%d8%b2%d8%ae%d9%85-%da%a9%d8%a7%d8%b1%db%8c-%d8%a8%d8%a7%d8%b2%da%af%d8%b4%d8%aa/ - Download links
+||upera.shop/ref/$doc,uritransform=/^\/ref\/[^\/]+//
+
+! https://www.makeuseof.com/best-vs-code-chatgpt-extensions/ - Tracking cookies
+androidpolice.com,makeuseof.com,movieweb.com,xda-developers.com##+js(cookie-remover, /articlesRead|previousPage/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20440
+/^https?:\/\/chat\.openai\.com\/ces\/v1\/[a-z]$/$xhr,1p,domain=chat.openai.com,method=post
+
+! https://github.com/uBlockOrigin/uAssets/issues/20530
+airtel.in##+js(no-xhr-if, analytics/bulk-pixel)
+
+! https://elevenlabs.io/dubbing - Stores the last dubbing result
+elevenlabs.io##+js(set-local-storage-item, IIElevenLabsDubbingResult, $remove$)
+
+! Pepper redirection - pepper.ru/deals/post-428233 | pepper.pl/promocje/post-750379 | dealabs.com/bons-plans/post-2674687
+chollometro.com##+js(href-sanitizer, a[href*="https://www.chollometro.com/visit/"][title^="https://"], [title])
+dealabs.com##+js(href-sanitizer, a[href*="https://www.dealabs.com/visit/"][title^="https://"], [title])
+hotukdeals.com##+js(href-sanitizer, a[href*="https://www.hotukdeals.com/visit/"][title^="https://"], [title])
+mydealz.de##+js(href-sanitizer, a[href*="https://www.mydealz.de/visit/"][title^="https://"], [title])
+nl.pepper.com##+js(href-sanitizer, a[href*="https://nl.pepper.com/visit/"][title^="https://"], [title])
+pepper.it##+js(href-sanitizer, a[href*="https://www.pepper.it/visit/"][title^="https://"], [title])
+pepper.pl##+js(href-sanitizer, a[href*="https://www.pepper.pl/visit/"][title^="https://"], [title])
+pepper.ru##+js(href-sanitizer, a[href*="https://www.pepper.ru/visit/"][title^="https://"], [title])
+preisjaeger.at##+js(href-sanitizer, a[href*="https://www.preisjaeger.at/visit/"][title^="https://"], [title])
+promodescuentos.com##+js(href-sanitizer, a[href*="https://www.promodescuentos.com/visit/"][title^="https://"], [title])
+pelando.com.br##+js(href-sanitizer, a[href*="https://www.pelando.com.br/api/redirect?url="], ?url)
+! desidime.com##+js(href-sanitizer, a[href*="https://www.desidime.com/links?ref=][href*="&url="], &url)
+
+! https://www.aachener-zeitung.de/
+||r.aachener-zeitung.de^
+||prod-mhaa.mhtr.be^
+||mhtr.be/public/tr/tracker.min.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/21342
+proboards.com,winclassic.net##+js(rmnt, script, vglnk)
+proboards.com,winclassic.net##^script:has-text(vglnk)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21384
+! FootprintDNS
+||res.office365.com/footprint/v*/scripts/fp-min.js$script
+||res.office365.com/footprint/v*/scripts/fpconfig.json$script
+||atmrum.net/rum.js$script
+||atmrum.net/client/v*/atm/fpv*.min.js$script
+||atmrum.net/conf/v*/atm/fpconfig.min.json$script
+||config.fp.measure.office.com/conf/v*/*/fpconfig.min.json$script
+||fp.msedge.net/conf/v*/asgw/fpconfig.min.json?monitorId=asgw$script
+/apc/trans.gif
+/apc/r.gif
+||atmrum.net/report/v*/atm/r.gif
+||fp.msedge.net/r.gif
+||odinvzc.azureedge.net/apc/trans.gif
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/168248
+||bi-tracker-cn.rivergame.net/event/tracker$xhr,redirect=noop.txt
+
+! https://baomoi.com/ - Tracking pixels
+||api.baomoi.com/*/n/images/su$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/22077
+coursera.org##+js(no-fetch-if, eventing)
+||coursera.org/*/eventing/
+
+! https://github.com/uBlockOrigin/uAssets/issues/22076
+||rambler.ru/*#rcmrclid=$uritransform=/#rcmrclid=.*//
+
+! Merge in resource-abuse.txt
+!#include resource-abuse.txt
diff --git a/uAssets/filters/quick-fixes.txt b/uAssets/filters/quick-fixes.txt
new file mode 100644
index 0000000..524fc89
--- /dev/null
+++ b/uAssets/filters/quick-fixes.txt
@@ -0,0 +1,182 @@
+! Title: uBlock₀ filters – Quick fixes
+! Last modified: %timestamp%
+! Expires: 8 hours
+! Description: Immediate, temporary filters to fix websites
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+! Homepage: https://github.com/uBlockOrigin/uAssets
+! Forums: https://github.com/uBlockOrigin/uAssets/issues
+
+! https://github.com/uBlockOrigin/uAssets/issues/21445
+*$script,redirect-rule=noopjs,domain=dropgalaxy.*
+*$xhr,redirect-rule=nooptext,domain=dropgalaxy.*
+*$frame,redirect-rule=noopframe,domain=dropgalaxy.*
+*$image,redirect-rule=32x32.png,domain=dropgalaxy.*
+@@||dropgalaxy.*^$ghide
+||d1rp4yowwe587e.cloudfront.net^$script,domain=dropgalaxy.*,important
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=dropgalaxy.*
+||pocpoc.io^$domain=dropgalaxy.*
+||mobileoffers-ep-download.com^$domain=dropgalaxy.*
+@@||histats.com/js.js$script,domain=dropgalaxy.*
+@@||popads.net/js/adblock.js$script,domain=dropgalaxy.*
+@@||cdn.jsdelivr.net/gh/prebid/*$script,domain=dropgalaxy.*
+@@*$script,xhr,from=dropgalaxy.*,to=googlesyndication.com|doubleclick.net|rsc.cdn77.org|vlitag.com|adoto.net|a2zapk.com|login.popmonetizer.com
+dropgalaxy.*##+js(nowoif)
+dropgalaxy.*##+js(set, window.isAdblockActive, false)
+dropgalaxy.*##+js(trusted-set, document.visibilityState, visible)
+dropgalaxy.com#@#+js(abort-current-script, document.onkeydown)
+dropgalaxy.*##+js(set, supportedBrowsers, )
+dropgalaxy.*##html.i-amphtml-inabox
+dropgalaxy.*##[id^="TR-"][tr-id][style*="z-index: 9999"]
+
+! aternos anti adb
+aternos.org##.header-center:style(margin-top:-5000px !important;)
+aternos.org##.sidebar:style(width: 1.745px !important;)
+aternos.org##.ad-dfp:style(min-height: 0.1485mm !important; height: 0.1485mm !important;)
+
+! pixsera
+! https://github.com/uBlockOrigin/uAssets/issues/9123
+! https://github.com/orgs/uBlockOrigin/teams/ublock-filters-volunteers/discussions/423/comments/6
+imgqklw.shop,pixqkhgrt.shop,pixqbngg.shop,pixqwet.shop,pixmos.shop,imgtgd.shop,imgcsxx.shop,imgcssd.shop,imguwjsd.sbs,pictbbf.shop,pixbryexa.sbs,picbqqa.sbs,pixbkghxa.sbs,imgmgf.sbs,picbcxvxa.sbs,imguee.sbs,imgmffmv.sbs,imgbqb.sbs##+js(aopr, console.clear)
+imgqklw.shop,pixqkhgrt.shop,pixqbngg.shop,pixqwet.shop,pixmos.shop,imgtgd.shop,imgcsxx.shop,imgcssd.shop,imguwjsd.sbs,pictbbf.shop,pixbryexa.sbs,picbqqa.sbs,pixbkghxa.sbs,imgmgf.sbs,picbcxvxa.sbs,imguee.sbs,imgmffmv.sbs,imgbqb.sbs##+js(nano-sib, timer)
+imgqklw.shop,pixqkhgrt.shop,pixqbngg.shop,pixqwet.shop,pixmos.shop,imgtgd.shop,imgcsxx.shop,imgcssd.shop,imguwjsd.sbs,pictbbf.shop,pixbryexa.sbs,picbqqa.sbs,pixbkghxa.sbs,imgmgf.sbs,picbcxvxa.sbs,imguee.sbs,imgmffmv.sbs,imgbqb.sbs##div[id][style^="position: fixed; display: block; width: 100%;"]
+imgqklw.shop,pixqkhgrt.shop,pixqbngg.shop,pixqwet.shop,pixmos.shop,imgtgd.shop,imgcsxx.shop,imgcssd.shop,imguwjsd.sbs,pictbbf.shop,pixbryexa.sbs,picbqqa.sbs,pixbkghxa.sbs,imgmgf.sbs,picbcxvxa.sbs,imguee.sbs,imgmffmv.sbs,imgbqb.sbs##div[style="width:100%;height:110px"]
+imgqklw.shop,pixqkhgrt.shop,pixqbngg.shop,pixqwet.shop,pixmos.shop,imgtgd.shop,imgcsxx.shop,imgcssd.shop,imguwjsd.sbs,pictbbf.shop,pixbryexa.sbs,picbqqa.sbs,pixbkghxa.sbs,imgmgf.sbs,picbcxvxa.sbs,imguee.sbs,imgmffmv.sbs,imgbqb.sbs##+js(nowoif, !/prcf.fiyar|themes|pixsense|.jpg/)
+imgqklw.shop,pixqkhgrt.shop,pixqbngg.shop,pixqwet.shop,pixmos.shop,imgtgd.shop,imgcsxx.shop,imgcssd.shop,imguwjsd.sbs,pictbbf.shop,pixbryexa.sbs,picbqqa.sbs,pixbkghxa.sbs,imgmgf.sbs,picbcxvxa.sbs,imguee.sbs,imgmffmv.sbs,imgbqb.sbs##div[class][style="display: block;"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/16lmeri/youtube_antiadblock_and_ads_september_18_2023/k1wl8df/
+!#if !cap_html_filtering
+!#if env_firefox
+youtube.com##+js(json-prune, playerResponse.adPlacements playerResponse.playerAds playerResponse.adSlots adPlacements playerAds adSlots legacyImportant)
+!#endif
+!#endif
+||youtube.com/s/desktop/*/jsbin/desktop_polymer.vflset/desktop_polymer.js$~doc,uritransform=/desktop\/\w+\/jsbin/desktop\/ae5198ff\/jsbin/,domain=www.youtube.com
+youtube.com#@##scroll-container > #items.ytd-merch-shelf-renderer
+youtube.com#@##primary > .ytd-two-column-browse-results-renderer.style-scope > #masthead-ad.ytd-rich-grid-renderer > .ytd-rich-grid-renderer.style-scope > .ytd-banner-promo-renderer.style-scope
+! https://github.com/easylist/easylist/commit/4333b1c91fccd689165da54eae62b382a67f4837
+youtube.com#@#ytd-watch-info-text > #info-container > #info > span:has-text(/\d+\s[pP]rod/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18476
+! VOE sites
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,3p,redirect=google-ima.js,domain=seanshowcould.com
+seanshowcould.com##+js(nowoif)
+seanshowcould.com##+js(set, console.clear, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16083
+dragontea.ink##html:not(:has(link[href="https://dragontea.ink/xmlrpc.php"], link[href="/cdn-cgi/styles/challenges.css"])) > body:not(.page-template)
+dragontea.ink##[id$="ink_1000x100_anchor_top"][class="stpdr rendered"][data-google-query-id][style]:style(position: absolute !important;)
+dragontea.ink##[id$="ink_1000x100_anchor"][class="stpdr rendered"][data-google-query-id][style]:style(position: absolute !important;)
+dragontea.ink###stpd_close:remove()
+dragontea.ink##ins[id^="gpt_unit_/"][style="display: block !important; width: 100vw !important; height: 100vh !important; inset: 0px auto auto 0px !important; clear: none !important; float: none !important; margin: 0px !important; max-height: none !important; max-width: none !important; opacity: 1 !important; overflow: visible !important; padding: 0px !important; position: fixed !important; vertical-align: baseline !important; visibility: visible !important; z-index: 2147483647 !important; background: transparent !important;"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/16533
+||kiktu.com/wp-json/wp-statistics/$xhr,important
+||kiktu.com/wp-content/plugins/azee-safelink/img/clickheretodownload*.png$image,1p
+||kiktu.com/wp-content/plugins/azee-safelink/img/Download*.png$image,1p
+||kiktu.com/wp-content/plugins/azee-safelink/img/download_btns*.png$image,1p
+||kiktu.com/wp-content/plugins/azee-safelink/img/play*.jpg$image,1p
+||kiktu.com/wp-content/plugins/azee-safelink/img/StartDownload*.gif$image,1p
+techcyan.com,kiktu.com,upshrink.com,trangchu.news,banaraswap.in###btx1, #btx2, #wg-genx > .mediafire:style(visibility: hidden !important;)
+techcyan.com,kiktu.com,upshrink.com,trangchu.news,banaraswap.in##+js(spoof-css, #btx1\, #btx2\, #wg-genx > .mediafire, visibility, visible)
+.click/?s=$popup,domain=techcyan.com|kiktu.com|upshrink.com|trangchu.news|banaraswap.in
+*$image,domain=techcyan.com|kiktu.com|upshrink.com|trangchu.news|banaraswap.in,redirect-rule=2x2.png:5
+
+! https://github.com/uBlockOrigin/uAssets/issues/20401
+infinityscans.xyz,infinityscans.net##+js(no-fetch-if, /googlesyndication|bidgear|marreerouens|pubfuture/, length:1735)
+infinityscans.xyz,infinityscans.net##+js(nowoif)
+*$script,redirect-rule=noopjs,domain=infinityscans.xyz|infinityscans.net
+*$xhr,domain=infinityscans.xyz|infinityscans.net,redirect-rule=nooptext
+*$frame,redirect-rule=noopframe,domain=infinityscans.xyz|infinityscans.net
+*$image,redirect-rule=1x1.gif,domain=infinityscans.xyz|infinityscans.net
+||infinityscans.xyz/sw.js$script,1p
+!#if cap_html_filtering
+infinityscans.xyz,infinityscans.net##^script:has-text(;break;case $.)
+!#else
+infinityscans.xyz,infinityscans.net##+js(rmnt, script, ;break;case $.)
+!#endif
+
+! https://github.com/easylist/easylistgermany/issues/216
+! https://github.com/uBlockOrigin/uAssets/issues/21504
+www.chip.de##+js(rpnt, style, img{display:block;}, {display: none !important;}, condition, /aspect-ratio:\s?auto/)
+www.chip.de##+js(rpnt, style, {display:block;width:auto;padding:0;}, {display: none !important;}, condition, /aspect-ratio:\s?auto/)
+www.chip.de##body.l-DownloadListing > div:has(> div > ul a[href^="https://www.chip.de/downloads/"] img[src^="https://im.chip.de/"])
+www.chip.de##body.l-DownloadListing .wrapper-safe.mt-sm > .fb > section:not(.Listing) ul:has(> li a[href^="https://www.chip.de/downloads/"] img[src^="https://im.chip.de/"])
+www.chip.de###CR[class="Downloads-Detail"] > #G32 > #M1 > [class="wrapper-safe"] > [class="fb mt-lg"] > [class="fb-col-lg-4 is-hidden-sm is-hidden-md"] > *:has(a img[src*="https://im.chip.de/ii/"])
+www.chip.de###CR[class="Downloads-Detail"] > #G32 > #M1 > [class="wrapper-safe"] ul[class="List is-separated"]:has(a img[src*="https://im.chip.de/ii/"])
+www.chip.de###CR[class="Downloads-Detail"] > #G32 > #M1 > [class="wrapper-safe"] > div:has(> div > div > section > ul[class="List is-separated"] a img[src*="https://im.chip.de/ii/"])
+www.chip.de###CR[class="Downloads-Detail"] > #G32 > #M1 > [class]:not([class="wrapper-safe"], [class="fb mt-lg"]) ul[class="List is-separated"]:has(a img[src*="https://im.chip.de/ii/"])
+www.chip.de###CR[class="Downloads-Detail"] > #G32 > #M1 > [class]:not([class="wrapper-safe"], [class="fb mt-lg"]):has(> main > div > div > section > ul[class="List is-separated"] a img[src*="https://im.chip.de/ii/"])
+www.chip.de###CR:is(.Downloads-Select, .Downloads-Getfile) > #G32 > #M1 > [class="wrapper-safe"] > [class^="fb mt-"] > div[class="fb-col-lg-4 is-hidden-sm is-hidden-md"] > div[class]:has(a img[src*="https://im.chip.de/ii/"])
+www.chip.de###CR:is(.Downloads-Select, .Downloads-Getfile) > #G32 > #M1 > [class="wrapper-safe"] > [class^="fb mt-"] > section > [class]:has(ul[class="List is-separated"] a img[src*="https://im.chip.de/ii/"])
+www.chip.de###CR:is(.Downloads-Select, .Downloads-Getfile) > #G32 > #M1 > [class]:not([class="wrapper-safe"]) ul[class="List is-separated"]:has(a img[src*="https://im.chip.de/ii/"])
+www.chip.de###CR:is(.Downloads-Select, .Downloads-Getfile) > #G32 > #M1 > [class]:not([class="wrapper-safe"]):has(main section ul[class="List is-separated"] a img[src*="https://im.chip.de/ii/"])
+www.chip.de###CR:is(.Downloads-Select, .Downloads-Getfile) > #G32 > #M1 > [class="wrapper-safe"] > *:not([class^="fb mt-"]) ul[class="List is-separated"]:has(a img[src*="https://im.chip.de/ii/"])
+www.chip.de###CR:is(.Downloads-Select, .Downloads-Getfile) > #G32 > #M1 > [class="wrapper-safe"] > *:not([class^="fb mt-"]):has(> div > div > section > ul[class="List is-separated"] a img[src*="https://im.chip.de/ii/"])
+www.chip.de###CR.Downloads-Select > #G32 > #M1 > [class="wrapper-safe"] > [class^="fb mt-"] > section > [class]:has(> a[style="display:flex;"] > div:has-text(Anzeige))
+www.chip.de##body[class="l-DownloadListing is-sticky"] > [class="Main Main--Skyscraper"] > .Main__Container > main[class="Downloads DownloadListing bg-white mt-xs"] > [class="mt-sm wrapper-bleed bg-blue"] + [class="wrapper-safe"]:has(a img[src*="https://im.chip.de/ii/"])
+www.chip.de##body[class="l-DownloadListing is-sticky"] > [class="Main Main--Skyscraper"] > .Main__Container > div[class="wrapper-safe"] > div > ul[class="List is-separated"]:has(a img[src*="https://im.chip.de/ii/"])
+www.chip.de##body[class="l-DownloadListing is-sticky"] > [class="wrapper-safe"] > [class] ul[class="List is-separated"]:has(a img[src*="https://im.chip.de/ii/"])
+www.chip.de##body[class="l-DownloadListing is-sticky"] > [class]:has(> div > div > div:only-child > section:only-child > ul[class="List is-separated"] a img[src*="https://im.chip.de/ii/"])
+! restore speed (the anti adblock script causing lag spikes)
+!#if cap_html_filtering
+www.chip.de##^script:has-text(.slice(0, -1); })
+www.chip.de##^script:has-text((Math.PI).toFixed(10).slice(0, -1);)
+!#else
+www.chip.de##+js(rmnt, script, .slice(0\, -1); })
+www.chip.de##+js(rmnt, script, (Math.PI).toFixed(10).slice(0\, -1);)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/21553
+gamedrive.org##+js(aost, document.querySelector, /showModal|chooseAction|doAction|callbackAdsBlocked/)
+gamedrive.org##+js(acs, eval, replace)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15428
+!#if cap_html_filtering
+bitcotasks.com##^script:has-text(AdblockRegixFinder)
+||bitcotasks.com/assets/js/mainjs.php$script,1p,replace=/entry.duration > 0/entry.duration < 10/
+.js|$script,redirect-rule=none:10,domain=bitcotasks.com
+!#else
+bitcotasks.com##+js(rmnt, script, AdblockRegixFinder)
+@@||static.ads-twitter.com/uwt.js$script,domain=bitcotasks.com
+@@||coinzillatag.com/lib/fp.js$script,domain=bitcotasks.com
+!#endif
+bitcotasks.com##+js(aeld, blur, event.triggered)
+||bitcotasks.com/assets/ads.php$frame,1p
+
+! paste. fo ads
+paste.fo##a:has-text(Free:)
+paste.fo##a[href^="https://anonsmm.com/?utm_source"], a[href="https://cryptochanger.to/"], a[href="https://sellsn.io/"]
+paste.fo##a *:matches-css-after(content:/Free:/)
+paste.fo##a *:matches-css-before(content:/Free:/)
+/paste\.fo\/[A-Z0-9]{70,110}\.(gif|jpeg)$/$image,1p,domain=paste.fo
+||paste.fo/clk*.php?as=$xhr
+paste.fo##a[href] img:not([src$=".php"])
+
+! perchance - broken by its dev
+!perchance.org##+js(set, String.prototype.includes, trueFunc)
+!perchance.org##+js(rpnt, script, '/if(\n){1,}.*\.*\("."\)\).\{([\s\S]*?)\}/gms', )
+!perchance.org##+js(rpnt, script, '/if\(([^;]+)\)[^{]+{\s+throw.*\(".*"\);\s+.*;\s+}/gm', )
+!perchance.org##+js(rpnt, script, '/if\(..*\[\`.*\`\]\("."\)\) \{([\s\S]*?\}){2}/gm', )
+perchance.org##+js(rpnt, script, '/if\s\(..*\[\`.*\`\]\("."\)\) \{([\s\S]*?\}){2,}/gm', 'if (location.href.indexOf("ai-") !== -1) {String.prototype.includes=function (){return true};};riot.mount(\'app\', {generator: window.generatorData,dependencies: window.generatorDependenciesData,});window.successfulPageLoad = true;')
+perchance.org##+js(rpnt, script, '/if(\s){0,}\(..*\[\`.*\`\]\("."\)\) \{([\s\S]*?\}){2,}/gm', 'if (location.href.indexOf("ai-") !== -1) {String.prototype.includes=function (){return true};};riot.mount(\'app\', {generator: window.generatorData,dependencies: window.generatorDependenciesData,});window.successfulPageLoad = true;')
+perchance.org##+js(nostif, document.body.innerHTML)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21944
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg#@#[data-card-metrics-id]
+
+! https://github.com/uBlockOrigin/uAssets/commit/453b544f310c39c7d2512391c3c02838143ad999
+@@||agoda.com/*/book/$removeparam
+
+! https://github.com/uBlockOrigin/uAssets/issues/21987
+bild.de##+js(set, __NUXT__.state.advertisement.adBlockWallEnabled, false)
+
+! ytlarge detection
+@@||ytlarge.com^$ghide
+ytlarge.com##+js(no-fetch-if, doubleclick)
+ytlarge.com##+js(rmnt, script, /adblock|_0x/i)
+@@*.js|$script,3p,domain=ytlarge.com
+@@||ytlarge.com^$script,1p
+
+! Ad-Shield
+! https://github.com/uBlockOrigin/uAssets/issues/21385
+/loader.min.js$xhr,script,domain=loawa.com|ygosu.com|sportalkorea.com|algumon.com|hancinema.net|enetnews.co.kr|edaily.co.kr|economist.co.kr|etoday.co.kr|hankyung.com|isplus.com|hometownstation.com|kagit.kr|inven.co.kr|honkailab.com|warcraftrumbledeck.com|genshinlab.com|thestockmarketwatch.com|thephoblographer.com,replace=/\)\]\(\(function [a-zA-Z0-9]{2}\([a-zA-Z0-9]{2}\)\{/)]((function neutralized() {/
+/loader.min.js$xhr,script,domain=loawa.com|ygosu.com|sportalkorea.com|algumon.com|hancinema.net|enetnews.co.kr|edaily.co.kr|economist.co.kr|etoday.co.kr|hankyung.com|isplus.com|hometownstation.com|kagit.kr|inven.co.kr|honkailab.com|warcraftrumbledeck.com|genshinlab.com|thestockmarketwatch.com|thephoblographer.com,replace=/\)\]\(\(function [a-zA-Z0-9]{2}\([a-zA-Z0-9]{2}\)\{var/)]((function neutralized(){var/
diff --git a/uAssets/filters/resource-abuse.txt b/uAssets/filters/resource-abuse.txt
new file mode 100644
index 0000000..416eee8
--- /dev/null
+++ b/uAssets/filters/resource-abuse.txt
@@ -0,0 +1,149 @@
+! Title: uBlock filters – Resource abuse
+! Last modified: %timestamp%
+! Expires: 7 days
+! Description: |
+! To foil sites potentially abusing CPU/bandwidth resources without informed
+! consent. Any such resource-abuse scripts MUST be opt-in, with complete
+! informed consent from the visitor.
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+! Homepage: https://github.com/uBlockOrigin/uAssets
+!
+! GitHub issues: https://github.com/uBlockOrigin/uAssets/issues
+! GitHub pull requests: https://github.com/uBlockOrigin/uAssets/pulls
+
+! https://github.com/uBlockOrigin/uAssets/issues/659
+/edgemesh.*.js$script,domain=~edgemesh.com|~edgeno.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/803
+||safelinkconverter.com^$script,3p
+
+! https://forums.lanik.us/viewtopic.php?p=129545#p129545
+/adsensebase.js$script
+
+! other miners
+://api.*/lib/native.wasm$3p
+||rawgit.com/Pocketart/$script,3p
+
+! https://github.com/hoshsadiq/adblock-nocoin-list/issues/101
+*$csp=worker-src 'none',domain=lewd.ninja|milujivareni.cz
+/angular8.js
+
+! https://github.com/hoshsadiq/adblock-nocoin-list/issues/104
+||fileone.tv^$csp=child-src 'none';frame-src 'self' *;worker-src 'none';
+
+! https://www.reddit.com/r/uBlockOrigin/comments/7tgjce/new_cryptocurrency_mining_website_not_blocked_by/
+tasma.ru##+js(aopw, decodeURIComponent)
+
+! https://github.com/hoshsadiq/adblock-nocoin-list/issues/137
+||leitor.net^$csp=worker-src 'none';
+
+! https://github.com/uBlockOrigin/uAssets/issues/1503
+shrink-service.it##+js(aopr, WebAssembly)
+
+*$csp=worker-src 'none',domain=flashx.pw|vidoza.net
+
+! https://github.com/uBlockOrigin/uAssets/pull/818#issuecomment-365770341
+djs.sk##+js(aopr, miner)
+
+! https://github.com/uBlockOrigin/uAssets/issues/1602
+||thevideo.*^$csp=worker-src 'none';
+
+! https://github.com/uBlockOrigin/uAssets/issues/1826
+*$csp=worker-src 'none',domain=powvideo.net
+
+! https://github.com/gorhill/uBlock/issues/3675
+||potomy.ru^$csp=worker-src 'none'
+
+! miners https://github.com/uBlockOrigin/uAssets/issues/2198
+*$csp=worker-src 'none',domain=megapastes.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2309#issuecomment-389725332
+||sickrage.ca^$csp=worker-src 'none'
+||sorteosrd.com^$csp=worker-src 'none'
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=41585
+! https://github.com/uBlockOrigin/uAssets/issues/19214
+./M5q5.js$script
+||hostingcloud.*^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/3542
+||hdvid.tv^$csp=worker-src 'none'
+
+! https://github.com/uBlockOrigin/uAssets/issues/3643
+||void.cat^$csp=worker-src 'none'
+
+! https://github.com/uBlockOrigin/uAssets/issues/4152
+||dragonballzpolo.*^$csp=worker-src 'none'
+
+! https://github.com/uBlockOrigin/uAssets/issues/3134
+*$csp=worker-src 'none',domain=unblocktheship.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/549
+steamplay.*##+js(aopw, CoinNebula)
+
+! revdl . com avoids miners
+||revdl.com^$csp=worker-src 'none';
+
+! https://github.com/uBlockOrigin/uAssets/commit/d7a8d46e7dd4d978a395517bba5f98abcec998b8#commitcomment-33156535
+||firstonetv.*^$csp=worker-src 'none';
+||firstone.*^$csp=worker-src 'none';
+||firstonetv.*^$csp=connect-src 'none';
+
+! https://github.com/uBlockOrigin/uAssets/issues/6433
+||backend.dna-delivery.com^$domain=france.tv|rt.com
+||cdn.streamroot.io/dna-client/$script,domain=prod-player.tf1.fr
+! https://github.com/uBlockOrigin/uAssets/issues/6433#issuecomment-817198277
+france.tv##+js(nowebrtc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7449
+||csgo.xyz^$doc
+
+! https://github.com/uBlockOrigin/uAssets/issues/10537
+||inside-out.xyz^$csp=worker-src 'none'
+
+! https://github.com/uBlockOrigin/uAssets/issues/10602
+! ||sdkapi.douyucdn.cn/p2p?$xhr
+||douyucdn.cn/front-publish/stream-sdk-lib-master/dyp2pxp2p_*.js$script,domain=douyu.com
+
+! https://github.com/uBlockOrigin/uAssets/pull/10610
+! ||p2p.huya.com^$xhr
+||msstatic.com/huya/*/p2plib.js$script
+
+! Block some Chinese web pages from using P2P
+bilibili.com,dandanzan.top,nunuyy.*,v.qq.com##+js(nowebrtc)
+
+! https://github.com/uBlockOrigin/uAssets/pull/11475
+||monerominer.rocks/miner-mmr/webmnr.min.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/12648
+||sudonull.com/stop-ru.js
+
+! https://www.reddit.com/r/uBlockOrigin/comments/tznsj6/help_creating_a_block_filter_for_background/
+app.koinly.io##.login-page:style(-webkit-animation: none !important)
+
+! https://github.com/uBlockOrigin/uAssets/pull/12979
+knowyourmeme.com##+js(nosiif, blogherads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14043
+*$websocket,domain=linuxtracker.org
+
+! https://www.reddit.com/r/uBlockOrigin/comments/z10oav/
+||dek5iqd53g59a.cloudfront.net^
+
+! https://github.com/uBlockOrigin/uAssets/issues/16734
+||cdn-prod.securiti.ai/consent/auto_blocking/$domain=xfinity.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/18400
+deviantart.com##+js(aost, Math.sqrt, update)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17711#issuecomment-1595710648
+duplichecker.com,plagiarismchecker.co,plagiarismdetector.net,searchenginereports.net,smallseotools.com##*:style(animation: none !important;)
+
+! https://tapewithadblock.org/v/8BeO77VBQbfovrj/ high CPU
+tapewithadblock.org##+js(rmnt, script, /RegExp\(\'/, condition, RegExp)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/17nnfzm/how_to_stop_url_from_spamming_itself_so_that_when/
+||survey.alchemer.eu/s3/$frame,3p,domain=airforce-technology.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/20690
+meeting.tencent.com##+js(no-xhr-if, /(trace|beacon)\.qq\.com/)
diff --git a/uAssets/filters/ubo-link-shorteners.txt b/uAssets/filters/ubo-link-shorteners.txt
new file mode 100644
index 0000000..50b13d0
--- /dev/null
+++ b/uAssets/filters/ubo-link-shorteners.txt
@@ -0,0 +1,835 @@
+! Title: uBlock filters – Link shorteners
+! Last modified: %timestamp%
+! Expires: 5 days
+! Description: Filters optimized for uBlock, to be used along EasyList
+! Homepage: https://github.com/uBlockOrigin/uAssets
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+!
+! GitHub issues: https://github.com/uBlockOrigin/uAssets/issues
+! GitHub pull requests: https://github.com/uBlockOrigin/uAssets/pulls
+
+! gplinks all domains (gplinks.co/EWu8)
+! https://github.com/uBlockOrigin/uAssets/issues/20140
+*$frame,redirect-rule=noopframe,domain=gplinks.co|phixshop.com|ggbazaar.in|ignoupur.in|hindityping.net|indiasarkari.com|ktgnews.com|1stepforlife.in|djppclub.com|mpscstudyhub.com|jankarihubedu21.com|gachalifeoldversionapk.net
+@@||gplinks.in/track/$script,xhr,domain=gplinks.co|phixshop.com|ggbazaar.in|ignoupur.in|hindityping.net|indiasarkari.com|ktgnews.com|1stepforlife.in|djppclub.com|mpscstudyhub.com|jankarihubedu21.com|gachalifeoldversionapk.net
+@@||doubleclick.net^$script,xhr,domain=phixshop.com|ggbazaar.in|ignoupur.in|hindityping.net|indiasarkari.com|ktgnews.com|1stepforlife.in|djppclub.com|mpscstudyhub.com|jankarihubedu21.com|gachalifeoldversionapk.net
+@@*$ghide,domain=gplinks.co|phixshop.com|ggbazaar.in|ignoupur.in|hindityping.net|indiasarkari.com|ktgnews.com|1stepforlife.in|djppclub.com|mpscstudyhub.com|jankarihubedu21.com|gachalifeoldversionapk.net
+phixshop.com,ggbazaar.in,ignoupur.in,hindityping.net,indiasarkari.com,ktgnews.com,1stepforlife.in,djppclub.com,mpscstudyhub.com,jankarihubedu21.com,gachalifeoldversionapk.net##center:others()
+phixshop.com,ggbazaar.in,ignoupur.in,hindityping.net,indiasarkari.com,ktgnews.com,1stepforlife.in,djppclub.com,mpscstudyhub.com,jankarihubedu21.com,gachalifeoldversionapk.net##+js(aopw, AdBDetected)
+phixshop.com,ggbazaar.in,ignoupur.in,hindityping.net,indiasarkari.com,ktgnews.com,1stepforlife.in,djppclub.com,mpscstudyhub.com,jankarihubedu21.com,gachalifeoldversionapk.net##+js(set, count, 0)
+phixshop.com,ggbazaar.in,ignoupur.in,hindityping.net,indiasarkari.com,ktgnews.com,1stepforlife.in,djppclub.com,mpscstudyhub.com,jankarihubedu21.com,gachalifeoldversionapk.net##[id*="iframe"], [id*="gpt_unit"], [id*="div-gpt-"]:style(height:0.0001px !important;)
+gplinks.co##.bg-soft-primary, a.exclude-pop.smartlink, .exclude-pop.quiz-container, #PlayQuiz, #quiz-frame, .exclude-popad
+||gamezop.com^$domain=gplinks.*
+gplinks.co##+js(set, blurred, false)
+gplinks.co##+js(aopr, clickCount)
+*$script,3p,denyallow=cloudflare.com|github.io|google.com|googleapis.com|gstatic.com|hwcdn.net|jquery.com|recaptcha.net|tipsforce.com|unpkg.com,domain=gplinks.co
+
+! XpShort New (http://xpshort.com/Alpha_5_Complete_Batch)
+hindialphabet.online,dissenttimes.com,malaaiwap.com,khesarilalyadavmp3.in,dhunwap.com.in##+js(nano-sib, _0x, *, 0.001)
+hindialphabet.online,dissenttimes.com,malaaiwap.com,khesarilalyadavmp3.in,dhunwap.com.in##.safeb:style(display: block !important;)
+hindialphabet.online,dissenttimes.com,malaaiwap.com,khesarilalyadavmp3.in,dhunwap.com.in##h2~*, #safeform~*, #sidebar, .entry-title, h2, .entry-content.post-body, .post-footer, .all-flex, #breadcrumb, .comments-system-blogger
+xpshort.com##+js(set, blurred, false)
+xpshort.com##.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/20600
+go.publicearn.com##.page-header > h3, .banner, .bg-soft-primary
+@@*$ghide,domain=iisfvirtual.in|starxinvestor.com
+iisfvirtual.in,starxinvestor.com##+js(rmnt, script, googlesyndication)
+iisfvirtual.in,starxinvestor.com##+js(set, count, 0)
+iisfvirtual.in,starxinvestor.com###tp98, #btn6:style(display: block !important;)
+iisfvirtual.in,starxinvestor.com##[id$="-Ads"], [id*="-gpt-ad"], center > h3, #skull, #content, #btnx, .mh-clearfix.mh-wrapper:remove()
+
+! https://github.com/uBlockOrigin/uAssets/issues/16533
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6895297
+techcyan.com,kiktu.com,upshrink.com,trangchu.news,banaraswap.in##+js(acs, $, google_ads_iframe_)
+@@*$ghide,domain=techcyan.com|kiktu.com|upshrink.com|trangchu.news|banaraswap.in
+@@*$xhr,domain=techcyan.com|kiktu.com|upshrink.com|trangchu.news|banaraswap.in
+*$image,domain=techcyan.com|kiktu.com|upshrink.com|trangchu.news|banaraswap.in,redirect-rule=1x1.gif
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=techcyan.com|kiktu.com|upshrink.com|trangchu.news|banaraswap.in
+||player.aniview.com/script/*$script,redirect-rule=noopjs,domain=techcyan.com|kiktu.com|upshrink.com|trangchu.news|banaraswap.in
+techcyan.com,kiktu.com,upshrink.com,trangchu.news,banaraswap.in##body:style(overflow: visible !important;)
+@@||upshrink.com^$script,1p
+upshrink.com##+js(aeld, DOMContentLoaded, iframe)
+upshrink.com##+js(set, blurred, false)
+upshrink.com##^script:has-text(/iframe|setTimeout|0x/)
+||blogspot.com/*/s336/Upshrink336x280.jpg
+||upshrink.in^$frame,1p
+||upshrink.in/updealz-1^$frame,domain=upshrink.com
+/wp-content/uploads/play.webp$domain=techcyan.com|kiktu.com|upshrink.com|trangchu.news|banaraswap.in
+
+! https://github.com/uBlockOrigin/uAssets/issues/15469
+! Mlwbd Download
+||tactictablepolite.com^$script,domain=freethemesy.com|tech24us.com
+tech24us.com,freethemesy.com##+js(nano-sib, counter, *, 0.02)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14673
+! psa.wf Download Shorteners
+get-to.link##+js(nowoif)
+enit.in,financerites.com##+js(nostif, , 5)
+enit.in##+js(nowoif)
+enit.in##+js(set, blurred, false)
+enit.in,financerites.*##+js(nano-stb, downloadBtn, *)
+enit.in##footer, div#gads.banner-inner
+enit.it###gads[disabled]:remove-attr(disabled)
+enit.in,financerites.*##.footerLink.hidden:style(display: block !important;)
+enit.in,financerites.*##.getlink:others()
+trip.businessnews-nigeria.com,te-it.com,world2our.com,mobi2c.com,tech5s.co,ez4mods.com,sinonimos.de,bluetechno.net,forexit.online###go_d:remove-attr(disabled)
+trip.businessnews-nigeria.com,te-it.com,world2our.com,mobi2c.com,sinonimos.de,bluetechno.net,forexit.online###submitBtn, #go_d, #devozon-snp, #submitBtn, #tp-snp1, #go_d2:others()
+trip.businessnews-nigeria.com,te-it.com,world2our.com,mobi2c.com,tech5s.co,ez4mods.com,sinonimos.de,bluetechno.net,forexit.online###submitBtn, #go_d, #devozon-snp, #submitBtn, #tp-snp1, #go_d2:style(display: block !important;)
+junkyponk.com,healthfirstweb.com,vocalley.com,yogablogfit.com,howifx.com,en.financerites.com##+js(set, timeSec, 0)
+junkyponk.com,healthfirstweb.com,vocalley.com,yogablogfit.com,howifx.com,en.financerites.com##+js(nano-stb, getlink, *, 0.001)
+junkyponk.com,healthfirstweb.com,vocalley.com,yogablogfit.com,howifx.com,en.financerites.com##+js(noeval-if, replace)
+junkyponk.com,healthfirstweb.com,vocalley.com,yogablogfit.com,howifx.com,en.financerites.com###gads
+junkyponk.com,healthfirstweb.com,vocalley.com,yogablogfit.com,howifx.com,en.financerites.com##.getlink, #getlink:remove-attr(disabled)
+junkyponk.com,healthfirstweb.com,vocalley.com,yogablogfit.com,howifx.com,en.financerites.com##.container:style(font-size: 0px !important;)
+junkyponk.com,healthfirstweb.com,vocalley.com,yogablogfit.com,howifx.com,en.financerites.com##.container > center:others()
+en.financerites.com##form:others()
+||cmp.quantcast.com^$domain=healthfirstweb.com|vocalley.com|yogablogfit.com|howifx.com|en.financerites.com|junkyponk.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/86849
+ez4short.com##+js(aopr, app_vars.force_disable_adblock)
+ez4short.com##+js(set, blurred, false)
+techmody.io##+js(nano-sib, , *, 0)
+tech5s.co##+js(noeval-if, ads)
+tech5s.co,ez4mods.com##+js(nano-sib, /.?/, *, 0.02)
+tech5s.co,ez4mods.com##.btn-primary, #go_d, #tp-snp1, #go_d2:others()
+tech5s.co,ez4mods.com##+js(aopr, adBlockDetected)
+||cmp.quantcast.com^$domain=tech5s.co|themezon.net
+||push-sdk.$3p
+||a.labadena.com^$popup
+||feistyhelicopter.com^$popup
+
+! easysky.in focus and timer
+! https://github.com/uBlockOrigin/uAssets/issues/20810
+easysky.in,veganab.co##+js(set, blurred, false)
+veganab.co,camdigest.com##+js(nano-sib, /wpsafe|wait/, *, 0.001)
+veganab.co,camdigest.com###wpsafe-link, #section2:style(display: block !important;)
+veganab.co,camdigest.com###wpsafe-link, #section2:others()
+techy.veganab.co##.text-left, div.inst.box, .banner-inner
+
+! earn2me.com (earn2me.com/kVFvyX)
+recipese.com,easyworldbusiness.com,riveh.com###yuidea-snp, #yuidea-btn-after, a[href]:style(display: block !important;)
+recipese.com,easyworldbusiness.com,riveh.com##center, [src*="google.com/recaptcha/"]:others()
+recipese.com,easyworldbusiness.com,riveh.com##+js(nano-sib, timer, *, 0.02)
+blog.filepresident.com##.box-main > [src], .content, .r-bg, .short, .download-btn, h4
+
+! https://github.com/uBlockOrigin/uAssets/issues/19345
+naukrilelo.in##+js(no-fetch-if, ads)
+naukrilelo.in##+js(nano-sib, timer, 1300)
+naukrilelo.in###tp98, #tp-snp2:style(display: block !important;)
+naukrilelo.in###tp98, #tp-generate, #tp-snp2, [src*="https://www.google.com/recaptcha"]:others()
+adrinolinks.in##+js(set, blurred, false)
+wikitraveltips.com,amritadrino.com##+js(noeval-if, /fairAdblock|chp_adblock|adsbygoogle\.js/)
+amritadrino.com##.g-recaptcha, #tp-snp2, .captcha-check, [src*="google.com/recaptcha/"]:others()
+wikitraveltips.com,amritadrino.com##+js(ra, disabled, #tp-snp2)
+wikitraveltips.com,amritadrino.com##+js(set, count, 0)
+wikitraveltips.com,amritadrino.com##+js(set, detectAdBlock, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16217
+@@||exeo.app^$ghide
+exeo.app##.actions, .earning-steps ~*, .earning-steps, header, footer, .ad-element
+
+! https://github.com/uBlockOrigin/uAssets/issues/21430
+||iili.io^$image,domain=theforyou.in|gyanitheme.com|hipsonyc.com
+gyanitheme.com,hipsonyc.com##+js(rpnt, script, /^window\.location\.href.*\'$/gms)
+tech.hipsonyc.com,hostadviser.net,theforyou.in###waiting, #pop-button:style(display: block !important;)
+tech.hipsonyc.com,hostadviser.net,theforyou.in###waiting, #pop-button, .modal-content:others()
+gyanitheme.com,hipsonyc.com##+js(nano-stb, gotoo, *)
+hipsonyc.com###notarobot, #gotolink:style(display: block !important;)
+hipsonyc.com,~tech.hipsonyc.com###notarobot, #gotolink:others()
+hipsonyc.com###adtera
+hipsonyc.com###getlink[disabled]:remove-attr(disabled)
+hipsonyc.com###gotolink[disabled]:remove-attr(disabled)
+hipsonyc.com##+js(nano-sib, countDown)
+@@*$ghide,domain=theforyou.in|gyanitheme.com|hipsonyc.com
+theforyou.in,gyanitheme.com,hipsonyc.com##+js(no-xhr-if, adsbygoogle)
+go.gyanitheme.com,go.theforyou.in,go.hipsonyc.com##+js(set, blurred, false)
+go.gyanitheme.com,go.theforyou.in,go.hipsonyc.com##.blog-item, .banner-inner, footer
+gyanitheme.com#@##ad-top
+theforyou.in,gyanitheme.com,hipsonyc.com,hostadviser.net##.getox
+||buoydeparturediscontent.com^$all
+
+! LinkShortify (https://lksfy.com/ovKOaZ)
+bookszone.in##+js(nano-sib, timer, *)
+bookszone.in###tp98, #jatinbtn-continue:style(display: block !important;)
+bookszone.in###tp98, #jatinbtn-continue:others()
+graphicuv.com##+js(aost, setTimeout, adsBlocked)
+graphicuv.com##+js(nano-sib, /.?/, *)
+graphicuv.com###popup, #blur-background
+graphicuv.com,learnmany.in###btn6:style(display: block !important;)
+graphicuv.com,learnmany.in###btn6:others()
+learnmany.in##+js(rmnt, script, deblocker)
+shortix.co###btn6, #tp98:style(display: block !important;)
+shortix.co###btn6, #tp98:others()
+
+! owllink.net & birdurls.com (go.owllink.net/1wij6ola)
+uptechnologys.com,sevenjournals.com###yuidea-snp, #btn6:style(display: block !important;)
+uptechnologys.com,sevenjournals.com###yuidea-snp, #btn6, center, [src*="google.com/recaptcha"]:others()
+uptechnologys.com,sevenjournals.com##+js(nano-sib, /.?/, *, 0.001)
+uptechnologys.com,sevenjournals.com###yuidea-snp, #btn6, #yuidea, #countdown:others()
+uptechnologys.com,sevenjournals.com##+js(acs, eval, replace)
+sevenjournals.com##+js(nobab)
+||cmp.quantcast.com^$domain=uptechnologys.com|sevenjournals.com
+
+! cut.lc Shortner
+yalifin.xyz,lrncook.xyz###makingdifferenttimer:style(display: block !important;)
+yalifin.xyz,lrncook.xyz##+js(nano-sib, /.?/, *, 0.02)
+yalifin.xyz,lrncook.xyz##center:others()
+
+! vlsshort.com,V2links,vzu.us
+gadgetsreview27.com,newsbawa.com##center:others()
+gadgetsreview27.com,newsbawa.com##+js(nano-sib, /.?/, *, 0.02)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20808
+! https://github.com/uBlockOrigin/uAssets/pull/20826
+loaninsurehub.com,tophostingapp.com,fc-lc.*##+js(nowoif)
+loaninsurehub.com##+js(aeld, mouseup, _blank)
+tophostingapp.com,digitalmarktrend.com,fc-lc.*###iframe_id, .text-left
+webhostingpost.com,tophostingapp.com,digitalmarktrend.com##.row, p, H2.text-center
+webhostingpost.com,tophostingapp.com,digitalmarktrend.com##+js(nano-sib)
+webhostingpost.com,tophostingapp.com,digitalmarktrend.com##+js(rmnt, script, queue.addFile)
+webhostingpost.com,tophostingapp.com,digitalmarktrend.com##+js(no-xhr-if, ezoic)
+tophostingapp.com,digitalmarktrend.com,webhostingpost.com##+js(no-fetch-if, googlesyndication)
+loaninsurehub.com##+js(rmnt, script, deblocker)
+loaninsurehub.com##+js(nano-sib, /.?/, *, 0.02)
+loaninsurehub.com###getlink:style(display: block !important;)
+loaninsurehub.com###getlink:others()
+loaninsurehub.com###iframe_id, .vc_column-inner, .td-footer-wrap, #overlay
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-7094584
+fc-lc.xyz##+js(no-fetch-if, adsbygoogle)
+fc-lc.xyz##+js(aeld, , /_blank/i)
+||curryfielddistribution.com^
+||turbiditedeklehexoses.monster^
+||whitepark9.com^
+||tophostingapp.com/dwn-$image
+
+! https://terabox.fun/sl/2omxpMMJdo anti-adb
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=hotmediahub.com|terabox.fun|fansonlinehub.com|teralink.me|terashare.me|teraearn.com
+@@*$ghide,domain=hotmediahub.com|terabox.fun|fansonlinehub.com|teralink.me|terashare.me|teraearn.com
+||gamerplay*.space^$domain=hotmediahub.com|terabox.fun|fansonlinehub.com|teralink.me|terashare.me|teraearn.com
+fansonlinehub.com,hotmediahub.com,terabox.fun,teralink.me,terashare.me,teraearn.com##body:style(overflow: auto !important;)
+fansonlinehub.com,hotmediahub.com,terabox.fun,teralink.me,terashare.me,teraearn.com##[id^="pop-ad"], div.artical-content, .full-box, .bottom-adsense, .article-recommend, .article-next, [id^="ad-box-"], .full-ctr
+terabox.fun##.short-link-home-bottom
+fansonlinehub.com,hotmediahub.com,terabox.fun,teralink.me,terashare.me,teraearn.com##+js(json-prune, web_share_ads_adsterra_config wap_short_link_middle_page_ad wap_short_link_middle_page_show_time data.ads_cpm_info)
+fansonlinehub.com,hotmediahub.com,terabox.fun,teralink.me,terashare.me,teraearn.com##+js(nano-stb, value, *)
+fansonlinehub.com,hotmediahub.com,terabox.fun,teralink.me,terashare.me,teraearn.com##+js(nano-sib, clearInterval, *)
+! https://github.com/uBlockOrigin/uAssets/issues/19284
+4funbox.com,nephobox.com,1024tera.com,terabox.*##+js(set, Object.prototype.isAllAdClose, true)
+4funbox.com,nephobox.com,1024tera.com,terabox.*##.ad-eggplant, .operate-box
+
+! https://github.com/uBlockOrigin/uAssets/issues/20872
+@@||linkvertise.com^$ghide
+linkvertise.com##+js(acs, addEventListener, DOMNodeRemoved)
+linkvertise.com##+js(acs, document.dispatchEvent, CustomEvent)
+linkvertise.com##+js(acs, onload, adsbygoogle)
+linkvertise.com##+js(aeld, load, nextFunction)
+linkvertise.com##+js(json-prune, data.meta.require_addon data.meta.require_captcha data.meta.require_notifications data.meta.require_og_ads data.meta.require_video data.meta.require_web data.meta.require_related_topics data.meta.require_custom_ad_step data.meta.og_ads_offers data.meta.addon_url data.displayAds data.linkCustomAdOffers)
+linkvertise.com##+js(json-prune, data.getDetailPageContent.linkCustomAdOffers)
+linkvertise.com##+js(json-prune, data.getTaboolaAds.*)
+linkvertise.com##+js(nano-sib)
+linkvertise.com##+js(set, isAdBlockActive, false)
+linkvertise.com##.skeleton__image > ngx-skeleton-loader[appearance="line"] > span.progress:empty
+||streamrail.com^$script,domain=linkvertise.*
+
+! link.vipurl.in
+androidquest.com##+js(no-fetch-if, ads)
+androidquest.com##+js(nano-sib, /.?/, *, 0.02)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10817
+try2link.com##+js(aopr, app_vars.force_disable_adblock)
+try2link.com##+js(set, blurred, false)
+try2link.com##+js(aopr, popUp)
+try2link.com##.text-left.box-main2, footer
+fx-gd.net,healthy4pepole.com,hightrip.net###submitBtn, #go_d, #wolfexe-snp:style(display: block !important;)
+fx-gd.net,healthy4pepole.com,hightrip.net###submitBtn, #go_d, #wolfexe-snp:others()
+fx-gd.net,healthy4pepole.com,hightrip.net##+js(nano-sib, /.?/, *, 0.02)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/78778
+jameeltips.us##+js(aopr, app_vars.force_disable_adblock)
+jameeltips.us##+js(set, blurred, false)
+jameeltips.us#@#.banner-728x90
+||jameeltips.us^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71409
+*$script,domain=gainbtc.*,redirect-rule=noopjs
+gainbtc.click##._hide
+gainbtc.click##.panel-heading > center
+||adcryp.to^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ynjx62/
+! https://www.reddit.com/r/uBlockOrigin/comments/18zs6ip/detection_adblock/
+fadedfeet.com,homeculina.com,ineedskin.com,kenzo-flowertag.com,lawyex.co,mdn.lol##+js(nostif, /adblock|isRequestPresent/)
+mdn.lol##+js(no-fetch-if, bmcdn6)
+mdn.lol##form[id]:style(display: block !important;)
+mdn.lol##.form-group > div[style^="width:"]
+mdn.lol##div[style^="width:"][style$=" height: 90px;"]
+mdn.lol##+js(acs, window.onload, devtools)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16153
+btcbitco.in##+js(acs, window.onload, innerHTML)
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-5741055
+btcbitco.in,btcsatoshi.net,cempakajaya.com,crypto4yu.com,readbitcoin.org,wiour.com##+js(set, document.hasFocus, trueFunc)
+btcbitco.in,btcsatoshi.net,cempakajaya.com,crypto4yu.com,gainl.ink,readbitcoin.org,wiour.com##+js(no-fetch-if, /adoto|\/ads\/js/)
+gainl.ink##+js(set, blurred, false)
+gainl.ink##+js(nowoif)
+ohionowcast.info,wiour.com##+js(aeld, load, htmls)
+@@||acceptable.a-ads.com/1^$xhr,domain=gainl.ink
+@@||googletagmanager.com/gtm.js$domain=btcbitco.in|btcsatoshi.net|crypto4yu.com|gainl.ink|readbitcoin.org|wiour.com
+gainl.ink#@##adclose
+btcbitco.in,btcsatoshi.net,cempakajaya.com,crypto4yu.com,gainl.ink,manofadan.com,readbitcoin.org,wiour.com##^script:has-text(htmls)
+btcbitco.in,btcsatoshi.net,cempakajaya.com,crypto4yu.com,gainl.ink,manofadan.com,readbitcoin.org,wiour.com##html, body:style(overflow: auto !important;)
+!#if !cap_html_filtering
+btcbitco.in,btcsatoshi.net,cempakajaya.com,crypto4yu.com,gainl.ink,manofadan.com,readbitcoin.org,wiour.com##+js(rmnt, script, htmls)
+!#endif
+||bitcotasks.com//files/banners/banner-
+||cryptocoinsad.com/ads/js/slider_right.js$script,redirect=noopjs
+btcbitco.in##+js(acs, addEventListener, devtools)
+btcbitco.in,btcsatoshi.net,wiour.com##+js(acs, document.getElementById, ads)
+crypto4yu.com,manofadan.com,readbitcoin.org##+js(acs, addEventListener, ads)
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6671505
+bitcotasks.com##+js(nostif, offsetWidth)
+btcbitco.in,btcsatoshi.net,wiour.com##.post > center > [href] > img
+btcbitco.in,btcsatoshi.net,crypto4yu.com,readbitcoin.org,wiour.com##+js(nowoif, ?key=)
+/invoke.js$script,redirect-rule=noop.js,domain=btcbitco.in|btcsatoshi.net|crypto4yu.com|readbitcoin.org|wiour.com
+||cryptocoinsad.com/ads/js/popunder.js$script,redirect=noop.js,domain=btcbitco.in|btcsatoshi.net|crypto4yu.com|readbitcoin.org|wiour.com
+||acceptable.a-ads.com^$frame,redirect-rule=noop.html,domain=btcbitco.in|btcsatoshi.net|crypto4yu.com|readbitcoin.org|wiour.com
+btcbitco.in,btcsatoshi.net,crypto4yu.com,readbitcoin.org,wiour.com##div.text-center[id]:style(height: 100px !important;)
+@@||static.surfe.pro/js/net.js$domain=btcbitco.in|btcsatoshi.net|crypto4yu.com|readbitcoin.org
+@@||surfe.pro/net/teaser$xhr,domain=btcbitco.in|btcsatoshi.net|crypto4yu.com|readbitcoin.org
+btcbitco.in##+js(set, isRequestPresent, true)
+||bmcdn6.com^$script,redirect-rule=noop.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/21549#issuecomment-1869871771
+blog.cryptowidgets.net,blog.insurancegold.in,blog.wiki-topia.com##.col,.form-group,._hide
+blog.cryptowidgets.net,blog.insurancegold.in,blog.wiki-topia.com##center > [style] > [id]:not(:has-text(Go to step2)):style(display: block !important;)
+blog.cryptowidgets.net,blog.insurancegold.in,blog.wiki-topia.com##form[id][method="post"] :is(h2,h3:not(#click),h4,p,ul)
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-8002410
+blog.cryptowidgets.net,blog.insurancegold.in,blog.wiki-topia.com##+js(rmnt, script, /\/detected\.html|Adblock/)
+blog.cryptowidgets.net,blog.insurancegold.in,blog.wiki-topia.com##+js(set, isRequestPresent, true)
+blog.cryptowidgets.net,blog.insurancegold.in,blog.wiki-topia.com##+js(rpnt, script, = false;, = true;, condition, innerHTML)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15805
+blog.coinsvalue.net,blog.cookinguide.net,blog.freeoseocheck.com##.col,.form-group,._hide,.g-recaptchaa
+blog.coinsvalue.net,blog.cookinguide.net,blog.freeoseocheck.com##center > [style] > [id]:style(display: block !important;)
+blog.coinsvalue.net,blog.cookinguide.net,blog.freeoseocheck.com##form[id][method="post"] :is(h2,h3:not(#click),h4,p,ul)
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-7999398
+blog.coinsvalue.net,blog.cookinguide.net,blog.freeoseocheck.com##+js(rmnt, script, /\/detected\.html|Adblock/)
+blog.coinsvalue.net,blog.cookinguide.net,blog.freeoseocheck.com##+js(set, isRequestPresent, true)
+blog.coinsvalue.net,blog.cookinguide.net,blog.freeoseocheck.com##+js(rpnt, script, = false;, = true;, condition, innerHTML)
+
+! aylink.co popup ads
+! https://github.com/uBlockOrigin/uAssets/issues/18108
+aylink.co##+js(rmnt, script, toast)
+aylink.co,gitizle.vip,shtms.co##+js(aopr, xmlhttp)
+aylink.co,gitizle.vip,shtms.co##+js(nano-sib)
+aylink.co,gitizle.vip,shtms.co##+js(ra, data-ppcnt_ads|onclick, #main)
+aylink.co,gitlink.pro,gitizle.vip,shtms.co##.alternative-ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/14189
+! https://www.reddit.com/r/uBlockOrigin/comments/vfu0a2/something_hides_the_captcha/
+@@||shorterall.com^$ghide
+@@||allgroups.online^$script,css,domain=promo-visits.site|satoshi-win.xyz|shorterall.com
+@@*$script,1p,domain=promo-visits.site|satoshi-win.xyz
+*$frame,redirect-rule=noopframe,domain=promo-visits.site|satoshi-win.xyz|shorterall.com
+*$script,redirect-rule=noopjs,domain=promo-visits.site|satoshi-win.xyz|shorterall.com
+*$xhr,3p,domain=promo-visits.site,redirect-rule=nooptext
+promo-visits.site,satoshi-win.xyz,shorterall.com##+js(set, blurred, false)
+promo-visits.site,satoshi-win.xyz,shorterall.com###qc-cmp2-container + p
+shorterall.com##+js(nostif, alert)
+shorterall.com##+js(acs, decodeURI, decodeURIComponent)
+shorterall.com##+js(aopw, atOptions)
+promo-visits.site,shorterall.com##+js(nowoif)
+*$popup,domain=promo-visits.site|shorterall.com
+@@||displayvertising.com^$script,domain=promo-visits.site|shorterall.com
+@@||c.adsco.re^$script,domain=promo-visits.site|shorterall.com
+@@||adsco.re/p$xhr,domain=promo-visits.site|shorterall.com
+@@||ads.themoneytizer.com^$script,domain=promo-visits.site|shorterall.com
+@@||c.tmyzer.com^$xhr,domain=promo-visits.site|shorterall.com
+@@||gum.criteo.com/sid/json$xhr,domain=promo-visits.site|shorterall.com
+@@||prebid.smilewanted.com^$xhr,domain=promo-visits.site|shorterall.com
+! https://github.com/uBlockOrigin/uAssets/issues/8997
+@@||promo-visits.site^$ghide
+||ultimateaderaser.com^$all
+/click?pid=*&offer_id=
+satoshi-win.xyz##+js(nostif, nextFunction)
+satoshi-win.xyz##+js(ra, onclick, .btn-success.get-link, stay)
+satoshi-win.xyz##+js(set, fouty, true)
+satoshi-win.xyz##.banner-inner
+promo-visits.site,shorterall.com##.btn-primary:style(visibility: visible !important;)
+promo-visits.site##+js(ra, disabled, .btn-primary)
+promo-visits.site###newlayercontent
+/php_code.php?sid=$domain=promo-visits.site|satoshi-win.xyz|shorterall.com,important
+homeairquality.org##+js(aeld, blur, focusOut)
+homeairquality.org##+js(no-fetch-if, googletagmanager)
+homeairquality.org##+js(set, detectAdblock, noopFunc)
+! https://github.com/uBlockOrigin/uAssets/issues/17222
+@@||homeairquality.org^$ghide
+*$script,redirect-rule=noopjs,domain=homeairquality.org
+homeairquality.org##.ezo_ad
+homeairquality.org##.adtester-container:style(min-height: 0px !important; max-height: 1px !important; opacity: 0 !important;)
+mynewsmedia.co##+js(no-fetch-if, googlesyndication)
+! https://github.com/uBlockOrigin/uAssets/issues/14189#issuecomment-1280373773
+@@||ads.themoneytizer.com/s/requestform.js?$script,domain=satoshi-win.xyz
+@@||gibevay.ru/retarget/get$script,domain=satoshi-win.xyz
+@@||googletagservices.com/tag/js/gpt.js$script,domain=satoshi-win.xyz
+@@||govbusi.info^$script,domain=satoshi-win.xyz
+@@||themoneytizer.com^$frame,domain=satoshi-win.xyz
+@@||umekana.ru/retarget/get$script,domain=satoshi-win.xyz
+@@||zatnoh.com/pw/*=eyJ.js$script,domain=satoshi-win.xyz
+satoshi-win.xyz##^responseheader(refresh)
+||googletagmanager.com/gtag/js$script,redirect-rule=googletagmanager_gtm.js:10,domain=satoshi-win.xyz
+||id5-sync.com^$image,redirect-rule=1x1.gif,domain=satoshi-win.xyz
+|about:blank$popup,domain=satoshi-win.xyz
+||funuzai.ru^$popup
+
+! https://github.com/uBlockOrigin/uAssets/issues/18745
+! https://github.com/uBlockOrigin/uAssets/issues/21436
+encurtandourl.com##+js(nostif, getComputedStyle, 250)
+encurtandourl.com##+js(nostif, nextFunction)
+encurtandourl.com##+js(set, blurred, false)
+encurtandourl.com##.banner
+@@||overgal.com^$ghide
+overgal.com##+js(no-fetch-if, googlesyndication)
+overgal.com##+js(nano-sib, timeLeft, *, 0.001)
+||ad.tradertimerz.media^
+
+! https://github.com/uBlockOrigin/uAssets/issues/18747
+suaurl.com##+js(rmnt, script, /window\.open|window\.location\.href|document\.addEventListener|\$\(document\)\.ready.*show/)
+suaurl.com##+js(rpnt, script, /document\.querySelector\('div\.textads\.banner-ads.banner_ads\.ad-unit\.ad-zone\.ad-space\.adsbox'\)/, document)
+suaurl.com##+js(aopr, document.oncontextmenu)
+suaurl.com##+js(aopr, shortcut)
+suaurl.com##+js(aost, document.querySelector, suaads)
+suaurl.com##+js(nano-sib, cont, *, 0.001)
+suaurl.com##+js(aopw, confCapcha)
+suaurl.com###btn-capcha > button:remove-attr(disabled)
+||suaurl.com^$csp=style-src *
+
+! https://www.reddit.com/r/uBlockOrigin/comments/18irmvf/i_was_detected/
+mamahawa.com##+js(rpnt, script, /window\.location\.href='.*';/, , condition, openLink)
+forextrader.site##+js(set, blurred, false)
+forextrader.site##+js(aopr, scriptUrls)
+10short.pro,mamahawa.com,lollty.pro##+js(nano-sib, timer, *, 0.001)
+10short.pro,mamahawa.com,lollty.pro##.text-left
+
+! https://www.reddit.com/r/uBlockOrigin/comments/18mhh9o/help_i_was_identified/
+@@||postazap.com^$ghide
+postazap.com##+js(set, blurred, false)
+postazap.com##+js(set, count, 0)
+postazap.com##.archive-container,.single-post-container
+postazap.com##[href^="https://1wvfbz.top/"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/18n1z83/the_countdown_timer_on_this_site_will_not_go_down/
+rawlazy.si##+js(nano-stb, /\$\('|ai-close/, *, 0.001)
+bigdata.rawlazy.si##+js(nano-sib, counter, *, 0.001)
+rawlazy.si##.content-text.lh-16.font-12x
+
+! Bitlinks
+! https://github.com/uBlockOrigin/uAssets/issues/19926
+! https://github.com/uBlockOrigin/uAssets/issues/19928
+paidinsurance.in,conghuongtu.net,coinseidon.com###wpsafelinkhuman, #wpsafe-link:style(display: block !important;)
+paidinsurance.in,conghuongtu.net,coinseidon.com###wpsafelinkhuman, #wpsafe-link:others()
+placementsmela.com###wpsafe-link:style(display: block !important;)
+placementsmela.com###wpsafe-link:others()
+
+! https://github.com/uBlockOrigin/uAssets/issues/20243
+cryptokinews.com,techmirror.in##+js(nano-sib)
+cryptokinews.com,techmirror.in##center:others()
+
+! https://github.com/uBlockOrigin/uAssets/issues/20333
+! https://github.com/uBlockOrigin/uAssets/issues/20696
+!#if cap_html_filtering
+sugarona.com,nishankhatri.xyz,highkeyfinance.com,amanguides.com##^script:has-text(AdbModel)
+!#else
+sugarona.com,nishankhatri.xyz,highkeyfinance.com,amanguides.com##+js(rmnt, script, AdbModel)
+!#endif
+nishankhatri.xyz###pro-continue, #pro-btn, #my-btn:style(display: block !important;)
+nishankhatri.xyz###pro-continue, #pro-btn, #my-btn:others()
+sugarona.com###my-btn, #my-btn2:style(display: block !important;)
+sugarona.com###my-btn, #my-btn2:others()
+reminimod.co,highkeyfinance.com,amanguides.com##+js(no-fetch-if, ads)
+reminimod.co,highkeyfinance.com,amanguides.com###wpsafe-link:style(display: block !important;)
+reminimod.co,highkeyfinance.com,amanguides.com###wpsafe-link:others()
+blog.disheye.com###gourl:style(display: block !important;)
+blog.disheye.com###gourl:others()
+
+! cuty.io (https://cutty.app/b6InEDRzF8NF)
+exego.app,cutlink.net,cutsy.net,cutyurls.com,cutty.app##.steps-to-earn, .flex.share-icons-container, .register-banner, fieldset, .partners-container, .actions
+exego.app,cutlink.net,cutsy.net,cutyurls.com,cutty.app##+js(aeld, click, handleClick)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20776
+aduzz.com,bitcrypto.info###wpsafe-link:style(display: block !important;)
+aduzz.com,bitcrypto.info###wpsafe-link:others()
+aduzz.com,bitcrypto.info##+js(no-fetch-if, ads)
+aduzz.com,bitcrypto.info##+js(set, wpsafelinkCount, 0)
+
+! https://go.tinys.click/jzEDHsQHbNTokEJrRorG
+tinys.click##+js(noeval-if, adsBlocked)
+tinys.click##+js(rmnt, script, antiAdBlockerHandler)
+tinys.click##+js(set, blurred, false)
+tinys.click##+js(set, go_popup, {})
+tinys.click##.text-left, .banner-inner, .separator, .gmr-box-content, div[id^="wpsafe-wait"]
+tinys.click###wpsafe-generate, #wpsafe-link:style(display: block !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21531
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6583759
+bitzite.com##+js(aeld, load, htmls)
+bitzite.com##+js(ra, href, .MyAd > a[target="_blank"])
+bitzite.com##.buttonnya:style(display: block !important;)
+bitzite.com##.buttondownload:style(display: block !important;)
+bitzite.com##div[id^="countdownText"]
+||bitzite.com/dtban.jpg
+bitzite.com##+js(aeld, DOMContentLoaded, antiAdBlockerHandler)
+bitzite.com##+js(nano-sib, timer)
+bitzite.com##center, .modal-overlay
+bitzite.com##form > div[id], [id*="wpsafe"]:style(display: block !important;)
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-7987540
+bitzite.com##+js(aeld, DOMContentLoaded, location.href)
+bitzite.com##+js(acs, document.createElement, onerror)
+*$image,redirect-rule=1x1.gif,domain=bitzite.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/20083
+cpmlink.pro##+js(ra, data-ppcnt_ads, , stay)
+cpmlink.pro##+js(nowoif, php)
+cpmlink.pro##+js(nano-sib)
+cpmlink.pro###toasts, .alternative-ad
+bildirim.link##+js(set, Notification, undefined)
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-7144221
+aiimgvlog.fun##+js(no-xhr-if, popunder)
+aiimgvlog.fun##+js(acs, eval, replace)
+aiimgvlog.fun##+js(acs, addEventListener, google_ad_client)
+@@||aiimgvlog.fun^$ghide
+aiimgvlog.fun##+js(aopw, AdbModel)
+aiimgvlog.fun##+js(aeld, , popMagic)
+aiimgvlog.fun##+js(set, protection, noopFunc)
+aiimgvlog.fun##+js(set, document.hasFocus, trueFunc)
+aiimgvlog.fun##form[id]:style(display: block !important;)
+aiimgvlog.fun##form > div[id][style="display: none;"]:style(display: block !important;)
+aiimgvlog.fun###widescreen2
+aiimgvlog.fun##div[id][style="position:fixed;bottom: 0px;left: 0px;z-index:999999;"]
+cpm.icu##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19931
+appsbull.com,diudemy.com,maqal360.com###tristana, #_append, #myDiv, .text-center.start:others()
+appsbull.com,diudemy.com,maqal360.com##+js(nano-stb, div_form)
+appsbull.com,diudemy.com,maqal360.com###tristana, #_append, #myDiv:style(display: block !important;)
+@@*$ghide,domain=appsbull.com|diudemy.com|maqal360.com
+appsbull.com,diudemy.com,maqal360.com##+js(aeld, load, htmls)
+appsbull.com,diudemy.com,maqal360.com##+js(rmnt, script, onerror)
+appsbull.com,diudemy.com,maqal360.com##+js(aopr, document.write)
+@@||cdn.jsdelivr.net^$script,domain=appsbull.com|diudemy.com|maqal360.com
+appsbull.com,diudemy.com,maqal360.com##+js(set, private, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19747
+mphealth.online##+js(rmnt, script, onerror)
+mphealth.online###yuidea-btn-after, #yuidea-btmbtn:style(display: block !important;)
+mphealth.online###yuidea-btn-after, #yuidea-btmbtn:remove-attr(disabled)
+mphealth.online###yuidea-btn-after, #yuidea-btmbtn:others()
+mphealth.online###content:style(font-size: 0px !important;)
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6912053
+antonimos.de,quesignifi.ca##+js(set, waitTime, 0)
+antonimos.de,quesignifi.ca###checkclick:style(display: block !important;)
+easycut.io##+js(set, blurred, false)
+||i.gyazo.com^$domain=insurancexblog.blogspot.com
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6872017
+sahlmarketing.net###link:remove-attr(disabled)
+sahlmarketing.net###link, center, #yuidea-snp, #btn6:style(display: block !important;)
+sahlmarketing.net##+js(set, count, 0)
+
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6780052
+blog.panytourism.online###link1s-snp:style(display: block !important;)
+panyshort.link##+js(set, blurred, false)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20032
+mayaremix.in,unfoldedstars.com,neverdims.com,bit4me.info,deltabtc.xyz,mbjremix.com##div#wpsafe-link:style(display: block !important;)
+mayaremix.in,unfoldedstars.com,neverdims.com,bit4me.info,deltabtc.xyz,mbjremix.com##div#wpsafe-link:others()
+
+! https://github.com/uBlockOrigin/uAssets/issues/19235
+apkupload.in,ezeviral.com,pngreal.com,ytpng.net##+js(no-fetch-if, ads)
+apkupload.in,ezeviral.com,dailynew.online,pngreal.com,ytpng.net###wpsafe-generate, #wpsafe-link:style(display: block !important)
+apkupload.in,dailynew.online,ezeviral.com,pngreal.com,ytpng.net##div[id^="wpsafe-wait"]
+ezeviral.com,pngreal.com###overlay
+techusnews.com###tp-generate, #tp-snp2:style(display: block !important;)
+techusnews.com##div[id^="tp-wait"]
+ezeviral.cok,pngreal.com##.adb
+
+! https://ryuugames. com/eng-knowledge-fever-uncensored/ download timer
+ryuugames.com###wpsafe-link:style(display: block !important;)
+ryuugames.com###wpsafe-wait1,#wpsafe-link:others()
+
+! https://github.com/uBlockOrigin/uAssets/issues/18677
+blog24.me##+js(aeld, DOMContentLoaded, adsBlocked)
+blog24.me##+js(aeld, load, htmls)
+blog24.me##+js(nostif, alert)
+blog24.me##+js(aopr, Swal.fire)
+blog24.me##^script:has-text(htmls)
+*$script,redirect-rule=noopjs,domain=blog24.me
+*$xhr,redirect-rule=nooptext,domain=blog24.me
+@@||blog24.me^$ghide
+blog24.me##form > [id]:style(display: block !important;)
+@@||pagead2.googlesyndication.com^$xhr,domain=blog24.me
+blog24.me##.adb-overlay
+
+! intercelestial.com skip countdown (https://pahe.me/monster-2023-web-dl-480p-720p-1080p/)
+||intercelestial.com^$csp=script-src 'self' * 'unsafe-inline'
+intercelestial.com##+js(nano-stb, , *, 0.1)
+intercelestial.com###landing, .soractrl:others()
+linegee.net##.kecil:others()
+
+! https://github.com/uBlockOrigin/uAssets/issues/21549
+rsadnetworkinfo.com,rsinsuranceinfo.com,rsfinanceinfo.com,rsgamer.app,rssoftwareinfo.com,rshostinginfo.com,rseducationinfo.com##+js(set, isRequestPresent, true)
+rsadnetworkinfo.com,rsinsuranceinfo.com,rsfinanceinfo.com,rsgamer.app,rssoftwareinfo.com,rshostinginfo.com,rseducationinfo.com##+js(rmnt, script, adblock)
+rsadnetworkinfo.com,rsinsuranceinfo.com,rsfinanceinfo.com,rsgamer.app,rssoftwareinfo.com,rshostinginfo.com,rseducationinfo.com##table.d,table.c
+rsadnetworkinfo.com,rsinsuranceinfo.com,rsfinanceinfo.com,rsgamer.app,rssoftwareinfo.com,rshostinginfo.com,rseducationinfo.com##form > div[id]:style(display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21597
+cravesandflames.com##+js(set, go_popup, {})
+cravesandflames.com##[href^="https://apps.apple.com/"]
+cravesandflames.com##[href^="https://play.google.com/"]
+
+! https://www.reddit.com/r/uBlockOrigin/comments/1928sew/adblock_being_detected/
+filmypoints.in##+js(nano-sib, timer, 1000, 0.001)
+filmypoints.in##+js(set, count, 0)
+filmypoints.in###btn11:style(display: block !important;)
+filmypoints.in##.mh-wrapper,#btn1
+filmypoints.in##.col-md-12 > .wpsafe-top ~ :is(h2,h3,h4,p,ul)
+
+! tnshort.net (go.tnshort.net/grammarly)
+! https://github.com/uBlockOrigin/uAssets/issues/18477#issuecomment-1870857116
+financeyogi.net,finclub.in##+js(nano-sib, timer, *, 0.001)
+financeyogi.net,finclub.in###btn2, #btn5, #tp-snp2:style(display: block !important;)
+financeyogi.net,finclub.in###btn2, #btn5, #tp-snp2:others()
+
+! linksfire.co (link.linksfire.co/dLvqhe)
+! https://github.com/uBlockOrigin/uAssets/issues/8102
+blog.linksfire.co##+js(aopr, app_vars.force_disable_adblock)
+blog.linksfire.co##[href^="https://b3stcond1tions.com/"]
+blog.linksfire.co##div.separator > b
+blog.linksfire.co##.banner
+blog.linksfire.co##.ex2
+blog.linksfire.co##.link-details
+linksfire.*##+js(aopr, open)
+bartendingexpert.com###yuidea-snp:style(display: block !important;)
+bartendingexpert.com###yuidea-snp:others()
+freethailottery.live,progfu.com##+js(nano-sib, timer, 1600, 0.001)
+freethailottery.live,progfu.com##center, [src*="google.com/recaptcha/"], #yuidea-snp:style(display:block !important)
+freethailottery.live,progfu.com##center, [src*="google.com/recaptcha/"], #yuidea-snp:others()
+
+! linkco.pro (linkco.pro/N8kQfv)
+easywithcode.tech,letest25.co,truevpnlover.com##+js(nano-sib, timer, *, 0.001)
+loanteacher.in###tp-snp2:style(display: block !important;)
+letest25.co,loanteacher.in,truevpnlover.com###tp-snp2:others()
+easywithcode.tech###cross-snp2:others()
+
+! dollerlinksd.in (dollerlinksd.in/ZN4p)
+rphost.in,vedamdigi.tech##+js(nano-sib, timer, *, 0.001)
+rphost.in###tp-snp2:others()
+vedamdigi.tech###cross-snp2:others()
+vedamdigi.tech##.g-recaptcha, #cross-verify-go, .captcha-check, [src*="google.com/recaptcha/"]:others()
+
+! linkpays.in (linkpays.in/Kdk)
+insuranceinfos.in###center, #wpsafe-snp, #btn11, #btn6:style(display: block !important;)
+insuranceinfos.in###center, #wpsafe-snp, #btn11, #btn6:others()
+
+! shorturllinks.com (shorturllinks.com/pv1TizfJ1)
+appkamods.com##+js(rmnt, script, deblocker)
+appkamods.com###tp98, #btn6:style(display: block !important;)
+appkamods.com###tp98, #btn6:others()
+
+! instantearn.in (instantearn.in/lnwOySrW)
+cancelguider.online##+js(nano-sib, timer, *, 0.001)
+cancelguider.online###tp-snp2, #cross-snp2:others()
+petrainer.in###rtg-snp2:style(display: block !important;)
+petrainer.in###rtg-snp2:others()
+
+! instantlinks.in (instantlinks.in/Ve33sw)
+investorveda.com##+js(nano-sib, count, *, 0.001)
+investorveda.com###hometimerstartbtn, #hometimer, #yuidea-btmbtn, #btn6:style(display: block !important;)
+investorveda.com###hometimerstartbtn, #hometimer, #yuidea-btmbtn, #btn6:others()
+
+! revcut.net (go.revcut.net/OW71rahtyb4)
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-7478083
+!#if cap_html_filtering
+coingraph.us##^script:has-text(AdBlock)
+!#else
+coingraph.us##+js(rmnt, script, AdBlock)
+!#endif
+coingraph.us##+js(aeld, contextmenu)
+coingraph.us##+js(rpnt, script, totalTime < 240000, false)
+coingraph.us###form > [id], #wpsafe-link3, .wpsafelink-button, #wpsafelinkhuman, #wpsafe-link4, [src*="google.com/recaptcha/"]:style(display: block !important;)
+coingraph.us###form > [id], #wpsafe-link3, .wpsafelink-button, #wpsafelinkhuman, #wpsafe-link4, [src*="google.com/recaptcha/"]:others()
+coingraph.us##.base-timer
+
+! onepagelink.in (onepagelink.in/fn0O)
+techkeshri.com###tp-snp2:style(display: block !important;)
+techkeshri.com###tp-snp2:others()
+
+! mdisk.pro / omegalinks.in (mdisk.pro/SxUtzZl)
+meclipstudy.in###notarobot, #gotolink:style(display: block !important;)
+meclipstudy.in###notarobot, #gotolink:others()
+meclipstudy.in###gotolink[disabled]:remove-attr(disabled)
+
+! cutt.ly (cutt.ly/QwF6jGZS)
+sportsonfr.com###wpsafe-link:style(display: block !important;)
+sportsonfr.com###wpsafe-link:others()
+
+! linkvhoriz.com (linkvhoriz.com/DZI6s)
+gurumu.net,kreatifparenting.com###wpsafe-link:style(display: block !important;)
+gurumu.net,kreatifparenting.com###wpsafe-link:others()
+
+! https://github.com/uBlockOrigin/uAssets/pull/21704
+foodupe.com###doad,.locked-action-link
+foodupe.com###donead:style(display: block !important;)
+foodupe.com##a[onclick*="adlink()"]:remove-attr(onclick)
+bloggingdaze.com##.locked-action-link
+bloggingdaze.com##a.get-link.disabled:remove-class(disabled)
+
+! shotzon.com (enagato.com/nOlVu)
+! https://github.com/AdguardTeam/AdguardFilters/issues/91553
+enagato.com##+js(aopr, open)
+enagato.com##+js(set, blurred, false)
+codesnse.com##+js(set, go_popup, {})
+codesnse.com##+js(nano-sib, counter, *, 0.001)
+codesnse.com##[href^="https://app.adjust.com/"]
+codesnse.com###paras-btn-after:others()
+
+! pandaznetwork.com (pandaznetwork.com/TN8cD)
+pandaznetwork.com##+js(set, blurred, false)
+freemodsapp.xyz###wpsafe-link:style(display: block !important;)
+freemodsapp.xyz###wpsafe-link:others()
+
+! nanolinks.in (nanolinks.in/4o78F)
+itscybertech.com##+js(nano-sib, counter)
+itscybertech.com###combtn, .download.medium.button:style(display: inline-block !important;)
+itscybertech.com##[src*="https://www.google.com/recaptcha/api2/"], #postlink, #my_captcha_form, #gtbtn2, #combtn, #displaySeconds:others()
+leadcricket.com,freebrightsoft.com,lyricsbaazaar.com,ezeviral.com###wpsafe-snp, .modal-content:style(display: block !important;)
+leadcricket.com,freebrightsoft.com,lyricsbaazaar.com,ezeviral.com###wpsafe-snp, .modal-content:others()
+ibyt.in###yuidea:style(display: block !important;)
+ibyt.in###yuidea:others()
+computerpedia.in###tp98, #countdown:style(display: block !important;)
+computerpedia.in###tp98, #countdown, [src*="https://www.google.com/recaptcha"]:others()
+computerpedia.in##+js(nano-sib, count, *, 0.001)
+computerpedia.in##+js(no-fetch-if, syndication)
+freebrightsoft.com##+js(nano-sib, timer)
+freebrightsoft.com##+js(ra, disabled, .get-link)
+freebrightsoft.com##+js(rc, disabled, .get-link)
+takez.co##+js(nano-sib, timer)
+takez.co##+js(nano-stb, shortenbl)
+takez.co##+js(nano-stb, enbll)
+takez.co###gtbtn, #displaySeconds
+takez.co###toshowtrlink, #gtbtn2:style(display: block !important;)
+takez.co###toshowtrlink, #gtbtn2, .divTableCell, #postfooterOk:others()
+
+! https://github.com/uBlockOrigin/uAssets/issues/21811
+! modijiurl.com/ZTnw
+loanoffering.in##+js(no-xhr-if, ads)
+loanoffering.in##+js(nano-sib, counter, *)
+loanoffering.in###startButton, #rtg-snp2:style(display: block !important;)
+loanoffering.in###startButton, #tp98, #rtg-snp2, [src*="google.com/recaptcha"]:others()
+loanoffering.in##.tie-container, #tie-wrapper:style(min-height:initial !important;)
+loanoffering.in##overlay, #BR-Footer-Ads, #loadingContainer
+
+! adsfly.in (adsfly.in/K9cXk)
+techurlshort.in###notarobot, #btn7:style(display: block !important;)
+techurlshort.in###notarobot, #btn7:others()
+
+! sub4unlock.com (daniblogs.com/BF/956195hx)
+sub4unlock.com###file:remove-attr(disabled)
+sub4unlock.com###file:others()
+
+! https://github.com/uBlockOrigin/uAssets/issues/21837
+dlink2.net##+js(rpnt, script, var seconde = 10;, var seconde = 0;)
+dlink2.net##+js(set-cookie, clictune_pop, off)
+*$frame,domain=dlink2.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/21893
+howtoconcepts.com##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/153146
+lifesurance.info##+js(set, showadas, true)
+lifesurance.info##center:others()
+
+! moonlinks.in (moonlinks.in/bvbvuK)
+! https://github.com/uBlockOrigin/uAssets/issues/21993
+cybercityhelp.in##+js(rmnt, script, adsbygoogle)
+cybercityhelp.in###username[required]:remove-attr(required)
+akcartoons.in,cybercityhelp.in###tp982, #btn6:style(display: block !important;)
+akcartoons.in,cybercityhelp.in###tp982, #btn6:others()
+
+! https://go.unlockner.com/EPMJf
+! https://github.com/uBlockOrigin/uAssets/issues/22001
+iconicblogger.com##+js(rmnt, script, catch)
+iconicblogger.com###wpsafe-link:style(display: block !important;)
+iconicblogger.com###wpsafe-link:others()
+
+! https://github.com/uBlockOrigin/uAssets/issues/22024
+segurosdevida.site###wpsafe-generate, #wpsafe-link:style(display: block !important;)
+segurosdevida.site##[id^="wpsafe-wait"], #content-wrapper
+
+! https://github.com/uBlockOrigin/uAssets/issues/21907 (https://shrs.link/cvLcBL)
+@@||dg.jamwoodvises.com^$popup,domain=shareus.io
+||dg.jamwoodvises.com^$doc
+shareus.io##+js(trusted-set, document.visibilityState, hidden)
+shareus.io##+js(nano-sib, , , 0.001)
+shareus.io#@#.adunit-container
+
+! https://tii.la/qczmBQKd
+! https://github.com/uBlockOrigin/uAssets/issues/18944
+*$script,redirect-rule=noopjs,domain=tii.la
+*$image,domain=tii.la,redirect-rule=1x1.gif
+@@||tii.la^$ghide
+@@||tii.la/cloud_theme/ads/*$xhr,1p
+tii.la##+js(no-fetch-if, /googlesyndication|inklinkor/)
+tii.la##+js(no-xhr-if, /pagead2\.googlesyndication\.com|inklinkor\.com/)
+tii.la##+js(nostif, ads)
+tii.la##+js(acs, XMLHttpRequest, adb)
+tii.la##+js(rmnt, script, adb_detected)
+tii.la##+js(set, blurred, false)
+tii.la##.myads
+tii.la##[id^="div-gpt-"]
+tii.la##.banner-inner:remove()
+blogtechh.com,tii.la##+js(nowoif)
+blogtechh.com,host2loan.com##+js(set, timeSec, 0)
+||shrinkearn.com/modern_theme/img/dwndbnr1.png$image,redirect-rule=1x1.gif
+gr8.cc##.row > .col-12 > .blocks
+
+! https://github.com/bogachenko/fuckfuckadblock/issues/167
+loan2host.com,tei.ai,tii.ai##+js(aopr, app_vars.force_disable_adblock)
+loan2host.com,tei.ai,tii.ai##+js(acs, Math, XMLHttpRequest)
+loan2host.com,tei.ai,tii.ai##+js(aopr, open)
+loan2host.com,tii.ai##+js(aopw, Fingerprint2)
+loan2host.com,tii.ai##+js(aopr, LieDetector)
+loan2host.com,tei.ai,tii.ai##+js(set, blurred, false)
+||tei.ai/sw.js
+||tii.ai/*sw*.js$script,1p
+||loan2host.com/*sw*.js$script,1p
+loan2host.com,tii.ai##[href^="https://bestcond1tions.com/"]
+loan2host.com,tii.ai##.banner-inner
+loan2host.com,tei.ai,tii.ai###link-view > center
+*$script,3p,denyallow=consensu.org|google.com|gstatic.com|recaptcha.net,domain=loan2host.com|tei.ai|tii.ai
+
+! http://go.megafly.in/znj2u7olam
+! https://github.com/uBlockOrigin/uAssets/issues/18719
+techacode.com##+js(nostif, nextFunction, 250)
+techacode.com##+js(nobab)
+techacode.com##+js(noeval-if, adb)
+mtraffics.com##+js(nowoif, _blank)
+! https://github.com/uBlockOrigin/uAssets/discussions/17361#discussioncomment-6886166
+techacode.com,sahlmarketing.net###link, #btn6, #yuidea-snp:remove-attr(disabled)
+techacode.com,sahlmarketing.net##+js(set, count, 0)
+techacode.com##+js(aopr, SMart1)
+techacode.com##+js(rmnt, script, deblocker)
+techacode.com##+js(no-xhr-if, /doubleclick|googlesyndication/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/22045
+hit-films.com###btn6:style(display: block !important;)
+hit-films.com###btn6:others()
+
+! https://filelimited.com/KswO7
+trickms.com##+js(set, count, 0)
+trickms.com###tp98[disabled]:remove-attr(disabled)
+trickms.com###tp-snp2:style(display: block !important;)
+trickms.com###tp98, #btn6, #tp-snp2:others()
diff --git a/uAssets/filters/ubol-filters.txt b/uAssets/filters/ubol-filters.txt
new file mode 100644
index 0000000..9d658bb
--- /dev/null
+++ b/uAssets/filters/ubol-filters.txt
@@ -0,0 +1,65 @@
+! Title: uBO Lite filters
+! Last modified: %timestamp%
+! Expires: 4 days
+! Description: Filters optimized for uBO Lite
+! Homepage: https://github.com/uBlockOrigin/uAssets
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+!
+! GitHub issues: https://github.com/uBlockOrigin/uAssets/issues
+! GitHub pull requests: https://github.com/uBlockOrigin/uAssets/pulls
+
+! https://github.com/uBlockOrigin/uBOL-issues/issues/8
+||pushbullet.com^$3p,badfilter
+
+! https://github.com/uBlockOrigin/uBOL-issues/issues/10
+*$frame,script,3p,denyallow=google.com|googleapis.com|gstatic.com|hcaptcha.com|recaptcha.net,domain=sxyprn.com|sxyprn.net
+
+! popular sites addressed by entity filters
+pornhub.com##+js(set, page_params.holiday_promo, true)
+pornhub.com###pb_block
+pornhub.com###relatedVideosCenter > .wrapVideoBlock
+spankbang.com,spankbang.mov##+js(nowoif)
+
+! problems by $redirect-rule
+! CHP
+! /ads-api. in EL
+||ads-api.twitter.com/|$xhr,3p,redirect=nooptext
+||media.fastclick.net/|$xhr,3p,redirect=noop.txt
+||ads.facebook.com/|$xhr,3p,redirect=noop.txt
+||advice-ads.s3.amazonaws.com/|$xhr,3p,redirect=noop.txt
+||ads.youtube.com/|$xhr,3p,redirect=noop.txt
+||ads.reddit.com/|$xhr,3p,redirect=noop.txt
+||ads.pinterest.com/|$xhr,3p,redirect=noop.txt
+||adversal.com/|$xhr,3p,redirect=noop.txt
+||sovrn.com/|$xhr,3p,redirect=noop.txt
+||ads.tiktok.com/|$xhr,3p,redirect=noop.txt
+||propellerads.com/|$xhr,3p,redirect=noop.txt
+||infolinks.com/|$xhr,3p,redirect=noop.txt
+||realsrv.com/popunder1000.js$xhr,3p,redirect=noop.txt
+||exdynsrv.com/video-slider.js$xhr,3p,redirect=noop.txt
+! BAB
+! https://github.com/orgs/uBlockOrigin/teams/ublock-filters-volunteers/discussions/377
+||adclixx.net^$script,3p,redirect=nobab2.js
+||adnetasia.com^$script,3p,redirect=nobab2.js
+||adtrackers.net^$script,3p,redirect=nobab2.js
+||bannertrack.net^$script,3p,redirect=nobab2.js
+||ads.twitter.com/favicon.ico$image,3p,redirect=32x32.png
+||advertising.yahoo.com/favicon.ico$image,3p,redirect=32x32.png
+||doubleclickbygoogle.com/favicon.ico$image,3p,redirect=32x32.png
+||google.com/adsense/start/images/favicon.ico$image,3p,redirect=32x32.png
+||gstatic.com/adx/doubleclick.ico$image,3p,redirect=32x32.png
+
+! https://github.com/uBlockOrigin/uBOL-issues/issues/26
+@@||succeedscene.com/ads_*/ads.load.js$script
+
+! https://github.com/uBlockOrigin/uAssets/commit/2da9930ccf5816a4c99d55bfd0f8b322ffd2d834
+! https://github.com/uBlockOrigin/uAssets/issues/16945
+/^https:\/\/[a-z]{7,16}\.[a-z]{3,7}\/[a-z0-9]{14}\/\d{5}$/$3p,script,redirect=noop.js
+! https://community.brave.com/t/nsfw-poop-mom-pop-up/512459
+/^https:\/\/[a-z]{2}\.[a-z]{7,14}\.com\/r[0-9A-Za-z]{10,16}\/[A-Za-z]{5}$/$script,3p
+
+! https://github.com/uBlockOrigin/uBOL-issues/issues/30
+||intuitcdn.net/*/intuit-analytics.$script,3p,redirect=noop.js
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11h42bd/anti_adblocker_on_a_switch_rom_site_of_all_places/
+nsw2u.com##+js(aeld, , Adb)
diff --git a/uAssets/filters/unbreak.txt b/uAssets/filters/unbreak.txt
new file mode 100644
index 0000000..69acc23
--- /dev/null
+++ b/uAssets/filters/unbreak.txt
@@ -0,0 +1,5182 @@
+! Title: uBlock filters – Unbreak
+! Last modified: %timestamp%
+! Expires: 5 days
+! Description:
+! Filters optimized for uBlock Origin, to unbreak sites broken as
+! a result of 3rd-party filter lists enabled by default.
+! Homepage: https://github.com/uBlockOrigin/uAssets
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+!
+! GitHub issues: https://github.com/uBlockOrigin/uAssets/issues
+! GitHub pull requests: https://github.com/uBlockOrigin/uAssets/pulls
+
+! https://github.com/uBlockOrigin/uAssets/issues/729
+! https://github.com/NanoMeow/QuickReports/issues/1636
+||2mdn.net/instream/video/client.js$script,redirect=noopjs,domain=video.foxnews.com
+||cdn.krxd.net^$script,redirect=noopjs,domain=video.foxnews.com
+@@||akamaihd.net/player/*/akamai/amp/prebid/*$script,domain=static.foxnews.com
+@@||global.fncstatic.com^*/ads.js$script,domain=foxnews.com
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=insider.foxnews.com
+
+! Chrome store feedback
+! To counter `top.mail.ru` in Peter Lowe's
+||top.mail.ru^$badfilter
+||top.mail.ru^$3p
+
+! `amazon-adsystem.com` is blocked by Peter Lowe's. The neutered script should
+! help lower chances of breakage. Examples:
+! - http://www.food.com/recipe/oven-baked-sweet-plantains-80130 (slideshow controls broken)
+! - [add more]
+! https://github.com/uBlockOrigin/uAssets/issues/317
+||amazon-adsystem.com/aax2/amzn_ads.js$script,redirect=amazon-adsystem.com/aax2/amzn_ads.js
+||amazon-adsystem.com/aax2/amzn_ads.js$script,redirect=noopjs,domain=player.performgroup.com
+
+! This potentially unbreaks sites broken by EasyPrivacy's `/b/ss/*&aqe=`
+! Confirmed for:
+! - http://www.surfline.com/video/ (links not working)
+! - https://github.com/gorhill/uBlock/issues/529
+! - http://www.scotrail.co.uk/check-your-journey (via https://twitter.com/andy_pee_tho/status/710508529405263872)
+*/b/ss/*&aqe=$image,redirect=1x1-transparent.gif
+
+! This unbreak video player:
+! - http://www.cnet.com/videos/big-mac-survives-molten-copper-and-heats-up-internet-ep-233/
+! And possibly other sites -- `taboola.com` is blocked by Peter Lowe's.
+||cdn.taboola.com/libtrc/*/loader.js$script,redirect=noopjs,important,domain=cnet.com
+
+! https://adblockplus.org/forum/viewtopic.php?f=1&t=44930
+! https://github.com/uBlockOrigin/uAssets/issues/4353#issuecomment-449159137
+! https://github.com/jspenguin2017/uBlockProtector/issues/1085
+@@||data.cnn.com/jsonp/cfg/*/videoconfig/cnn/desktop/domesticsectionconfig.json$script,domain=cnn.com
+@@||cnn.com/.element/apps/cvp/3.0/cfg/spider/cnn/expansion/ad_policy.xml$xhr,domain=cnn.com
+@@||z.cdn.turner.com/analytics/cnnexpan/jsmd.min.js$script,domain=cnn.com
+@@||cdn.turner.com/cnn/van/resources/*/scripts/vendor/loggly.tracker.js$xhr,domain=trentonian.com
+@@||cdn.cnn.com/analytics/cnn_arabic/jsmd.min.js$script,1p
+! https://github.com/uBlockOrigin/uAssets/issues/16276
+@@||mssl.fwmrm.net/libs/*$script,domain=go.cnn.com
+
+! http://www.slideshare.net/aidanajoyce/adblocking-blocking-more-than-ads
+||ggwebcast.com/*/kaltura/ga/urchin.js$script,redirect=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/148
+@@||media2.intoday.in/aajtak/$script,domain=aajtak.intoday.in|indiatoday.intoday.in
+
+! https://twitter.com/6pod4/status/806927623272022016
+@@||jimmyjohns.com/Scripts/angularytics*.js$1p,script
+
+! This unbreaks video playback on sky.de
+! To counter `analytics.edgesuite.net` and `adobedtm.com` in EasyPrivacy
+@@||analytics.edgesuite.net/html5/akamaihtml5-min.js$script,domain=sky.de
+@@||analytics.edgekey.net/html5/akamaihtml5-min.js$script,domain=sky.de
+@@||assets.adobedtm.com^$script,domain=sky.de
+
+! This unbreaks video playback on sfgate.com and other sites
+! To counter `ensighten.com` in EasyPrivacy
+@@||d29xw9s9x32j3w.cloudfront.net/players/library/*$domain=seattlepi.com|sfgate.com
+@@||ensighten.com/hearst/news/Bootstrap.js$script,domain=ctpost.com|houstonchronicle.com|mysanantonio.com|newstimes.com|seattlepi.com|sfchronicle.com|sfgate.com|timesunion.com
+@@||googleapis.com/js/sdkloader/ima3.js$script,domain=seattlepi.com|sfgate.com
+@@||spotxcdn.com/integration/directsdk/*$script,domain=seattlepi.com|sfgate.com
+@@||spotx.tv/directsdk/*$script,domain=seattlepi.com|sfgate.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/314
+! To counter `adobedtm.com` in EasyPrivacy
+@@||assets.adobedtm.com^$script,domain=rogers.com
+
+! https://twitter.com/valentijn/status/854269062863605764
+@@||atlassian.com^*/analytics.js$script,1p
+
+! https://twitter.com/WolliWolta/status/867788502729195520
+! To counter `sumo.com` in Peter Lowe's
+||sumo.com^$badfilter
+||sumo.com^$3p,badfilter
+||sumo.com^$3p,domain=~beewits.com|~dante-ri.hr
+
+! https://twitter.com/iSachinMaharana/status/870303158198611968
+! To counter `sumo.com`, `sumome.com` in Peter Lowe's
+@@||sumo.com^$domain=shopify.com
+@@||sumome.com^$domain=shopify.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/441
+! https://github.com/easylist/easylist/issues/2586
+||bbci.co.uk^*/analytics.js$script,redirect=noopjs,domain=bbc.co.uk
+||static.bbc.co.uk/bbcdotcom/*/adverts.js$script,1p,important,redirect=noopjs
+
+! https://forums.lanik.us/viewtopic.php?f=64&p=136474
+/ga_setup.js$badfilter
+
+! https://www.reddit.com/r/uBlockOrigin/comments/6mios7/not_allowing_some_sites_to_load_up
+||lexus.com/lexus-share/js/tracking_omn/s_code.js$script,important,1p,redirect=noopjs
+
+! https://twitter.com/datamafia/status/887743901443866624
+pythonjobshq.com##+js(aopr, Keen)
+
+! http://forums.mozillazine.org/viewtopic.php?f=38&t=3032369
+@@||hdliveextra-a.akamaihd.net^$domain=nbcsports.com
+@@||mps.nbcuni.com^$script,domain=csnne.com
+
+! https://twitter.com/ckrailo/status/897876373750005761
+@@||myaccounts.capitalone.com^$script,1p
+! https://github.com/uBlockOrigin/uAssets/issues/16469
+@@||travel.capitalone.com/api/v0/tracking/event$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/3998
+! https://github.com/uBlockOrigin/uAssets/issues/4831
+! https://github.com/uBlockOrigin/uAssets/issues/5133
+@@||cdn.ampproject.org/*/amp-geo-$script,domain=bozemandailychronicle.com|engadget.com|kmbc.com|koat.com|pilotonline.com|richmond.com|stltoday.com|amp.tmz.com|tucson.com|amp.usatoday.com|watchdog.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/648
+@@/blockadblock.$script,domain=blockadblock.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/6yqvey/help_site_does_not_load_when_javascript_is/
+||carambo.la^*/getAngularLayer$script,redirect=noopjs,domain=imleagues.com
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=38262
+||oakley.com/_ui/dist/scripts/vendor/tealium.js$script,1p,redirect=noopjs,important
+! https://github.com/easylist/easylist/commit/95d5301f133a55af58ae42da56b95270b0f013a7
+||oakleysi.com/_ui/dist/scripts/vendor/tealium.js$redirect=noopjs,important
+
+! Reported in Chrome store: "Orange portal http://www.orange.fr/portail is freezed"
+orange.fr#@##o_carrepub
+orange.fr###o_carrepub:style(height: 1px; margin: 0; min-height: auto; visibility: hidden; width: 1px;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/715
+@@||mpsnare.iesnare.com/snare.js$script,domain=costco.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/737
+@@||thermofisher.com/*/analytics.sitecatalyst.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/750
+@@||citi.com/cards/*/tracking.js$script
+@@||eccmp.com/*/conversen-SDK.js$script,domain=citi.com
+
+! https://github.com/gorhill/uBlock/issues/3138
+@@||fbcdn.net/safe_image.php?$image,domain=facebook.com|facebookcorewwwi.onion|facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=38688
+@@||googletagmanager.com/gtm.js$script,domain=fullcontact.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/786
+@@||flightradar24.com/static/*/statistics.js$script,1p
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=38922
+||camping.info/*/fingerprint2.min.js$script,1p,redirect=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/823
+||static.clmbtech.com^$script,redirect=noopjs,domain=businessinsider.in
+@@||businessinsider.in/analytics_js/*$script,1p
+
+! https://forums.lanik.us/viewtopic.php?f=90&t=39007
+@@||smartclip.net^$script,domain=energy.de
+energy.de#@##ad_home
+
+! https://github.com/uBlockOrigin/uAssets/issues/842
+||msavideo-a.akamaihd.net^$media,redirect=noopmp3-0.1s,domain=msn.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/7dp25k/fyi_ublock_origin_is_blocking_important_elements/dpzx4c1/
+@@||stats.g.doubleclick.net/dc.js$script,domain=ticketfly.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/850
+@@||mpsnare.iesnare.com/snare.js$script,domain=citiretailservices.citibankonline.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/851
+@@||adobedtm.com^*/satellitelib-$script,domain=comenity.net
+! Reported through email: http://www.kia.ca/build-and-price-kia
+@@||adobedtm.com/*/satelliteLib-$script,domain=kia.ca
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=37974
+@@||ensighten.com/*/prod/Bootstrap.js$script,domain=espn.com
+@@||espncdn.com/redesign/*/js/espn-analytics.js$script,domain=espn.com
+@@||registerdisney.go.com/*/responder/responder.js$script,domain=espn.com
+! fix video player
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=espn.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/878
+||adservex.media.net/videoAds.js$script,redirect=noopjs,domain=forbes.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/168#issuecomment-349736800
+@@||recipes.timesofindia.com/*ads.cms$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/923
+@@||honeybadger.io/*/honeybadger.min.js$script,domain=clark.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/1007
+@@||rtl.be/videos/player/vp4_webanalytics.js$script,1p
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/778
+reyada.com#@#.ads_area
+
+! https://github.com/uBlockOrigin/uAssets/issues/1152#issuecomment-354683032
+@@||ads.adaptv.advertising.com/*einthusan.tv*$xhr,domain=imasdk.googleapis.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1308
+@@||js.center.io^$domain=randpac.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1316
+||googletagservices.com/tag/js/gpt.js$script,redirect=noopjs,domain=radio-canada.ca|tvguide.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/7rwh1a/ublock_preventing_clicks_to_buttons_on_firefox/
+||iworkfor.nsw.gov.au/Scripts/ga.js$script,1p,redirect=noopjs
+
+! https://www.reddit.com/r/uBlockOrigin/comments/7seigr/video_not_showing_up_because_of_adblock/
+||agkn.com/*/tag.js$script,redirect=noopjs,domain=netd.com
+||dogannet.tv/*/third_party/comscore/*$script,redirect=noopjs,domain=netd.com
+||gemius.pl/gplayer.js$script,redirect=noopjs,domain=netd.com
+||netd.com/js/piwik-plugin.js$script,1p,redirect=noopjs
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,xhr,domain=netd.com
+@@||js.duhnet.tv/*/player/html5/*/comscore/streamsense$script,xhr,domain=netd.com
+
+! http://forums.mozillazine.org/viewtopic.php?f=47&t=3037666
+@@||bom.gov.au/*/analytics.js$script,1p
+
+! https://forums.lanik.us/viewtopic.php?f=64&p=131656
+||gcmgames.com.br/*/google.analytics.trackingcode.js$script,1p,redirect=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/1444
+@@||visa.com/*/analytics/analytics.js$script,1p
+@@||visa.com/*/analytics/ntpagetag.js$script,1p
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/843
+@@||gemius.pl/xlgemius.js$script,domain=jn.pt
+@@||secure.netscope.marktest.pt/netscope-gemius.js$script,domain=jn.pt
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/848
+@@||gemius.pl/xlgemius.js$script,domain=dn.pt
+@@||marktest.pt/netscope-gemius.js$script,domain=dn.pt
+
+! https://github.com/uBlockOrigin/uAssets/issues/1516
+hintergrundbild.org#@#.ads1
+
+! https://forums.lanik.us/viewtopic.php?p=132243#p132243
+@@||crackle.com/*/crypto-js.js$script,1p
+
+! https://github.com/NanoAdblocker/NanoDefender/issues/24#issuecomment-365117795
+@@/cdn-cgi/pe/bag2?*optimizely.com$domain=coindesk.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1535
+/adstream.$badfilter
+/adstream.$domain=~adstream.com|~adstream.com.ro
+
+! https://github.com/uBlockOrigin/uAssets/issues/1543
+@@||ak.sail-horizon.com/scout/$script,domain=businessinsider.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1557
+@@||tracker.btorrent.xyz^$websocket
+
+! https://github.com/uBlockOrigin/uAssets/issues/1564
+@@||cloudflare.com/ajax/libs/*$script,domain=androidcentral.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1628
+||player.ooyala.com/*/ad-plugin/pulse.min.js$script,redirect=noopjs,domain=lpga.com
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/869
+@@||gemius.pl/xlgemius.js$script,domain=tsf.pt
+@@||secure.netscope.marktest.pt/netscope-gemius.js$script,domain=tsf.pt
+
+! https://twitter.com/tomshardware/status/968607805786722305
+||cdn.auth0.com/*/analytics.min.js$script,redirect=noopjs,domain=tomsguide.com
+
+! https://forums.lanik.us/viewtopic.php?p=133318#p133318
+@@||api.opinary.com/poll/*$xhr,domain=pressekompass.net
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/875
+! https://github.com/jspenguin2017/uBlockProtector/issues/1020
+@@||userscloud.com/js/vendor/core/bootstrap.js$script,1p
+@@||usercdn.com^$frame,domain=userscloud.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/8371j7/ublockorigin_blocking_the_submit_button_on_my_web/
+@@||cdn.mxpnl.com/libs/mixpanel-*.min.js$script,domain=demandforce.com
+
+! https://forums.lanik.us/viewtopic.php?p=133691#p133691
+@@||streamplay.to^*/manifest.mpd$xhr
+@@||streamplay.to^*.mp4$xhr
+@@||streamplay.to^*.m4s$xhr
+
+! https://www.reddit.com/r/uBlockOrigin/comments/83odfj/ublock_breaking_sites_which_lists_should_i/
+||frog.wix.com/da-client$image,redirect=1x1-transparent.gif,domain=deviantart.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1704#issuecomment-372543282
+! https://forums.lanik.us/viewtopic.php?f=64&t=43860&p=151105#p151105
+@@||pages.bostonglobe.com/login/js/lib/AppMeasurement.js$script,1p
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=40233&p=133912#p133911
+! https://github.com/NanoMeow/QuickReports/issues/4254
+||player.ooyala.com/*/analytics-plugin/$script,redirect=noopjs
+
+! https://forums.lanik.us/viewtopic.php?p=133969#p133969
+@@||code.adsales.snidigital.com/conf/ads-config.js$script,domain=foodnetwork.com
+
+! video broken https://it.blastingnews.com/cultura-spettacoli/2018/01/video/marco-iaconianni-in-arte-dj-squalo-nello-zoo-di-105-004790175.html
+@@||googletagservices.com/tag/js/gpt.js$script,domain=blastingnews.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/85oqui/ublock_origin_on_igncom/
+@@||ign.com/newsfeed-block$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/1747
+@@||cxense.com/cx.js$script,domain=letelegramme.fr
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=40264
+br.de##+js(set, akamaiDisableServerIpLookup, noopFunc)
+
+! To counter `o0bc.com` in Peter Lowe's
+! unbreaks boston.com
+||o0bc.com^$badfilter
+||o0bc.com^$3p,domain=~boston.com|~bostonglobe.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1818
+@@||gatesnotes.com/*/jquery.iframetracker.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/1825
+||smartlook.com^$badfilter
+||smartlook.com^$3p
+
+! https://github.com/jspenguin2017/uBlockProtector/issues/884
+@@||gemius.pl/gplayer.js$script,domain=play.tv3.lt
+
+! https://github.com/uBlockOrigin/uAssets/issues/1907
+@@||ws-na.assoc-amazon.com^$image,domain=4tests.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1954
+@@||ncjrs.gov/fsrscripts/*$1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/1968#issuecomment-381358444
+@@||cdn.boomtrain.com/analyticstrain/snopes/analyticstrain.min.js$script,domain=snopes.com
+@@||boomtrain.com/identify/resolve$xhr,domain=snopes.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/8czb3t/fullstorycom_blocked/
+||fullstory.com^$badfilter
+||fullstory.com^$3p
+||fullstory.com/s/fs.js$script
+
+! https://github.com/reek/anti-adblock-killer/issues/4010
+@@||google-analytics.com/analytics.js$script,domain=developers.google.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2101
+||vidtech.cbsinteractive.com/*/tracking/comscore/comscore.streaming.$script,redirect=noopjs,domain=zdnet.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2107
+! https://github.com/uBlockOrigin/uAssets/issues/6284
+cyclingnews.com##+js(aopr, MONETIZER101.init)
+cyclingnews.com##+js(nano-stb, /outboundLink/)
+cyclingnews.com##.global-banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/2112
+@@||login.ingbank.pl/*/vendor/dtm/*$script,1p
+
+! https://forums.lanik.us/viewtopic.php?p=136057#p136057
+@@|https://api-secure.solvemedia.com^$script
+
+! https://forums.lanik.us/viewtopic.php?p=136565#p136565
+@@||openx.tv/embed/$domain=m4ufree.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2295
+! https://github.com/NanoMeow/QuickReports/issues/3400
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect=google-ima.js,domain=click2houston.com|clickondetroit.com|clickorlando.com|ksat.com|local10.com|news4jax.com|wsls.com,important
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,domain=click2houston.com|clickondetroit.com|clickorlando.com|ksat.com|local10.com|news4jax.com|wsls.com
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=40769
+@@||flyertalk.com/forum/*/ckeditor/core/log.js$script,1p
+
+! https://www.bikeforums.net/forum-suggestions-user-assistance/1144311-text-entry-box-doesn-t-show-up-unless-i-disable-ublock-origin.html
+@@||bikeforums.net/*/ckeditor/core/log.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/3094
+@@||imagebam.com/assets/js/image_bootstrap.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/2309
+/.*(\/proxy|\.wasm|\.wsm|\.wa)$/$websocket,xhr,domain=reactor.cc|sickrage.ca|sorteosrd.com|streamplay.to,badfilter
+/proxy|$websocket,xhr,domain=reactor.cc|sickrage.ca|sorteosrd.com|streamplay.to
+.wasm|$websocket,xhr,domain=reactor.cc|sickrage.ca|sorteosrd.com|streamplay.to
+.wsm|$websocket,xhr,domain=reactor.cc|sickrage.ca|sorteosrd.com|streamplay.to
+.wa|$websocket,xhr,domain=reactor.cc|sickrage.ca|sorteosrd.com|streamplay.to
+
+! https://www.reddit.com/r/uBlockOrigin/comments/8kh4zc/kotaku_embedded_twitter_images_not_displaying/
+! https://github.com/uBlockOrigin/uAssets/issues/3680
+avclub.com,clickhole.com,deadspin.com,earther.com,gizmodo.com,jalopnik.com,jezebel.com,kotaku.com,lifehacker.com,splinternews.com,theinventory.com,theonion.com,theroot.com,thetakeout.com#@#div[id^="dfp-ad-"]
+kotaku.com#@##dfp-ad-2
+kotaku.com#@##dfp-ad-1
+! https://www.reddit.com/r/uBlockOrigin/comments/9p41kw
+||x.kinja-static.com/assets/packaged-js/OnionAM.$script,domain=avclub.com|clickhole.com|deadspin.com|earther.com|gizmodo.com|jalopnik.com|jezebel.com|kotaku.com|lifehacker.com|splinternews.com|theinventory.com|theonion.com|theroot.com|thetakeout.com
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=40826
+@@||d1xrtnyoeeet33.cloudfront.net/assets/js/lib/*$script,domain=calgaryherald.com|calgarysun.com|canoe.com|edmontonsun.com|financialpost.com|leaderpost.com|lfpress.com|montrealgazette.com|nationalpost.com|ottawacitizen.com|ottawasun.com|theprovince.com|thestarphoenix.com|torontosun.com|vancouversun.com|windsorstar.com|winnipegsun.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2353
+@@||cbsistatic.com/*/comscore.streaming.$script,domain=cbsnews.com
+! https://github.com/uBlockOrigin/uAssets/issues/8863
+@@||tealium.cbsnews.com/*/prod/utag.js$script,1p
+! https://www.cbsnews.com/live/ video breakage
+! https://www.reddit.com/r/uBlockOrigin/comments/1109rgn/
+! https://github.com/easylist/easylist/commit/c22014abecb3c95212c72e8462d4fac3df2eb878
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=cbsnews.com,redirect=google-ima.js,important
+||imasdk.googleapis.com/js/sdkloader/ima3_debug.js$script,domain=cbsnews.com,redirect=google-ima.js,important
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,domain=cbsnews.com
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai_debug.js$script,domain=cbsnews.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2357
+@@||pandora.com/web-version/*_comscore.$script,1p
+@@||pandora.com/web-version/*_googleAnalytics.$script,1p
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=40856
+@@||ms-mt--api-web.*/ads/*$xhr,domain=coches.net
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=40478
+@@||flightapi.travix.com/flight$xhr,domain=cheaptickets.nl|vayama.com
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=40868
+||v.embed-cdn.com/v8/player.js$script,domain=streamable.com
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=40884
+calgarysun.com,canoe.com,edmontonsun.com,financialpost.com,nationalpost.com,ottawasun.com,theprovince.com,torontosun.com,winnipegsun.com#@#.adsizewrapper
+
+! https://github.com/uBlockOrigin/uAssets/issues/2451
+! https://github.com/NanoMeow/QuickReports/issues/546
+@@||sonycrackle.com/vendor/AdManager.js$script,1p
+@@||fwlive.sonycrackle.com/ad/*$script,1p
+@@||imrworldwide.com/novms/*/ggcm*.js$script,domain=sonycrackle.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/8nzgpp/1168_expedia_search_results_not_displaying_unless/
+@@||travel-assets.com/datacapture/*$script,domain=expedia.co.uk
+
+! https://github.com/uBlockOrigin/uAssets/issues/2453
+@@||btstatic.com/tag.js$script,domain=vw.com
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=40943
+@@/wp-content/plugins/popup-builder-$image,css,script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/2460#issuecomment-395008661
+motherless.com#@#iframe[style]
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=40973
+@@||static.bbc.co.uk/radio/player/*/script/logger.js$script,domain=bbc.co.uk
+
+! https://forums.lanik.us/viewtopic.php?f=96&t=40978
+forbes.it#@#.ad-row
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/98
+@@||api.sbs.com.au/js/tracking/ondemand.js$script,1p
+
+! Reported in review section of AMO:
+! "Homedepot.com, cannot load order history"
+! "Frigidaire.com, [...] registration page refused to submit"
+! https://github.com/uBlockOrigin/uAssets/issues/6812
+/analytics/analytics.$~xhr,badfilter
+@@||play2.qbrick.com/framework/modules/analytics/analytics.min.js$script
+
+! https://github.com/uBlockOrigin/uAssets/issues/2550
+britannica.com###md-media-overlay-ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/2552
+@@||cbs.wondershare.com/*pid=
+
+! https://github.com/uBlockOrigin/uAssets/issues/2662
+@@/mma/?t$image,domain=newsblaze.com
+
+! https://forums.lanik.us/viewtopic.php?p=138218#p138218
+||tag.navdmp.com/$script,redirect=noopjs,domain=globoesporte.globo.com
+
+! https://adblockplus.org/forum/viewtopic.php?f=1&t=57357&start=0
+@@||statics.estadao.com.br/*/portal/js/comscore/$script,domain=estadao.com.br
+@@||statics.estadao.com.br/*/utils/publicidade/dfp.min.js$script,domain=estadao.com.br
+
+! https://news.ycombinator.com/item?id=17455223
+@@||msecnd.net/scripts/a/ai.0.js$script,domain=msropendata.com
+
+! https://www.camp-firefox.de/forum/viewtopic.php?f=4&t=111753&start=1605#p1087440
+! Clicking through photos is broken
+||tagcommander.com/*/tc_$script,important,domain=n-tv.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/2814
+@@||static-olxeu.akamaized.net/static/olxbg/*/js/tracking/ninja.js$script,domain=olx.bg
+
+! https://twitter.com/vertis/status/1016876677408755713
+! To counter `optimizely.com` in Peter Lowe's list
+||optimizely.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/2852
+@@||cc.naver.com/cc$frame,1p
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/128
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=sbs.com.au
+
+! https://github.com/uBlockOrigin/uAssets/issues/2890
+! https://github.com/NanoMeow/QuickReports/issues/865
+||src.litix.io/core/*/mux.js$script,redirect=noopjs,domain=kanald.com.tr
+@@||gatr.hit.gemius.pl/gplayer.js$script,domain=kanald.com.tr
+
+! https://github.com/uBlockOrigin/uAssets/issues/2930
+||bridgetrack.com^$badfilter
+||bridgetrack.com^$3p
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=41218
+@@||academia.edu/*/users/*/stats/*$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/2931
+! https://github.com/uBlockOrigin/uAssets/issues/2966
+@@||fusion.ddmcdn.com^$script,domain=ahctv.com|animalplanet.com|cookingchanneltv.com|destinationamerica.com|discovery.com|discoverylife.com|diynetwork.com|foodnetwork.com|hgtv.com|investigationdiscovery.com|motortrend.com|sciencechannel.com|tlc.com|travelchannel.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/3034
+@@||cdn.scarabresearch.com/js/*/scarab-v*.js$script,domain=remixshop.com
+@@||recommender.scarabresearch.com/merchants/*$xhr,domain=remixshop.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/3057
+@@||addthis.com/js/*/addthis_widget.js$script,domain=sainsburys.jobs
+
+! https://www.reddit.com/r/uBlockOrigin/comments/93feu6/unblock_a_major_portuguese_isp_domain/
+||nostv.pt/Scripts/fingerprint2.min.js$script,redirect=noopjs,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/93ztf6/how_to_block_ad_but_still_stream_content/
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=iheartradio.ca
+@@||iheartradio.ca^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/3115
+@@||google-analytics.com/analytics.js$script,domain=umterps.com
+
+! https://github.com/easylist/easylist/issues/1668
+! https://github.com/easylist/easylist/issues/1676
+@@||evidon.com/geo/*$script,domain=cnet.com|marieclaire.com|techrepublic.com|zdnet.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/3167
+@@||cdn.amplitude.com/libs/amplitude-*.gz.js$script,domain=letgo.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/9634p5/ublock_origin_is_hiding_reddit_posts_and_making/
+@@||gateway.reddit.com/desktopapi/*$xhr,1p
+
+! https://forums.lanik.us/viewtopic.php?f=103&t=40699
+||fuegodevida.com^$popup,3p,badfilter
+
+! https://github.com/NanoAdblocker/NanoCore/issues/201
+@@||nxp.com/*/resources/scripts/analytics/webanalytics.js$script,1p
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=41502
+@@||apply.indeed.com/$frame,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/1225#issuecomment-416297077
+@@||anyporn.com/key.jsx$script,1p
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/172#issuecomment-416314453
+@@||static.iqiyi.com/js/player_v1/sdk/*$script,1p
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=41498
+||youboranqs01.com^$3p,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/3363
+@@||usopen.org/AppMeasurement.js$script,1p
+
+! Reported through email: many Canadian car sites broken because of
+! `d2cmedia.ca` in Peter Lowe's. Examples:
+! https://www.hyundailongueuil.com/neufs/Hyundai-Elantra%20GT-2018.html
+! https://www.complexekia.com/demonstrateurs/Kia-Soul-2018-id7101681.html
+||d2cmedia.ca^$badfilter
+||d2cmedia.ca^$~image,~font
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=41563
+||youbora.com^$3p,badfilter
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=41562
+@@||tredir.go.com/capmon/$script,domain=disney.com
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=41588
+||smartsuppchat.com^$3p,badfilter
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=41612
+@@||discover.com/discover/reporting/AppMeasurement.js$1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/2364#issuecomment-420346996
+@@*$media,domain=camwhores.tv
+
+! fix nfl.com fantasy.nfl.com site and video breakage
+@@||static.parsely.com/p.js$script,domain=nfl.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/9gn4is
+@@||a.4cdn.org/*.json$xhr,domain=4chan.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/3516
+@@||cdn.cxense.com/cx.js$script,domain=mega.cl
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=41714
+@@||v.fwmrm.net/ad/$script,xhr,domain=destinationamerica.com
+@@||src.litix.io/core/*/mux.js$script,domain=destinationamerica.com
+
+! https://github.com/NanoMeow/QuickReports/issues/107
+warszawawpigulce.pl#@#.code-block-5, .eklama, #undermenu-block, .code-block-6
+warszawawpigulce.pl##.eklama
+
+! https://github.com/uBlockOrigin/uAssets/issues/3532
+@@||ftse.com/Products/*/scripts/analytics_$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/3540
+@@||geoip.nekudo.com/api/*$xhr,domain=opentable.com
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=41793
+@@||backend.worldoftulo.com/$script,domain=barometern.se
+
+! https://github.com/NanoMeow/QuickReports/issues/133
+! https://github.com/NanoMeow/QuickReports/issues/181
+@@||surveywall-api.survata.com^$domain=survata.net
+
+! https://github.com/NanoMeow/QuickReports/issues/180
+@@||publicwww.com/images/labels$image,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/3671
+@@||googletagmanager.com/gtm.js$script,domain=hellofresh.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/3672
+@@||vice.com/*/AdobeAnalyticsSDK$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/3676
+@@||twitter.com/*/profiles/show/*$xhr,1p
+@@||twitter.com/*/status/*conversation_id$xhr,1p
+
+! https://adblockplus.org/forum/viewtopic.php?f=10&t=60372&start=0
+@@||mssl.fwmrm.net/p/abc_live/$script,domain=abc.go.com
+@@||v.fwmrm.net/ad/g/1$script,domain=abc.go.com
+@@/VisitorAPI.js$script,domain=abc.go.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/3733
+@@||ajax.googleapis.com^$script,domain=dailywire.com
+@@||soundcloud.com^$script,domain=dailywire.com
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=41984
+@@||savings.bizx.info^$domain=sourceforge.net
+@@||bizx.info^$websocket,domain=sourceforge.net
+
+! bloomberg videos
+@@||cdn.gotraffic.net^$domain=bloomberg.*
+@@||js.spotx.tv/directsdk/$script,domain=bloomberg.*
+@@||spotxcdn.com/integration/directsdk/$script,domain=bloomberg.*
+@@||search.spotxchange.com^$xhr,domain=bloomberg.*
+@@||sourcepointcmp.bloomberg.com/ccpa.js$script,domain=bloomberg.*
+
+! https://github.com/easylist/easylist/issues/2103
+@@||go.com/disneyid/responder$frame,1p
+
+! linkdrop.net broken (no captcha)
+@@||ajax.googleapis.com^$script,domain=linkdrop.net
+
+! https://github.com/easylist/easylist/issues/2111
+@@||connect.facebook.*/*/AudienceNetworkPrebid.js$script,domain=cbssports.com
+
+! https://github.com/NanoMeow/QuickReports/issues/235
+@@||javmost.com/ad*.php$frame,1p
+@@||javpost.net^$frame,domain=javmost.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/2043#issuecomment-432499527
+@@||js.helltraffic.com/fluidplayer/$script,css,domain=tubewolf.com
+||js.helltraffic.com/fluidplayer/scripts/webvtt.min.js$script,important,domain=tubewolf.com
+tubewolf.com##.bnnrs-player
+tubewolf.com##.bnnr
+
+! https://github.com/uBlockOrigin/uAssets/issues/3823
+@@||mm-syringe.com^$script,domain=mysanantonio.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/9rnaq5/possible_memory_leak/
+@@||utility.rogersmedia.com/utility.js$domain=todaysparent.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/3883
+@@||onphpid.com^$css,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/3894
+@@||wsj.net/*/cxense-candy.js$script,domain=wsj.com
+@@||scdn.cxense.com/cx.$script,domain=wsj.com
+@@||zqtk.net^$script,domain=wsj.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/3929
+@@||androidgreeve.*^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/3955
+@@||github.com/*/contributors$xhr,1p
+@@||gitlab.com^$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/3975
+@@||monero.crypto-webminer.com/monero.html$frame,domain=monero-miner.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/3995
+||p.jwpcdn.com/*/vast.js$script,important,domain=timesnownews.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/3999
+@@||google-analytics.com/analytics.js$script,domain=panerabread.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/9t71mf/ublock_origin_breaks_conde_nast_video_player
+@@||googletagservices.com/tag/js/gpt.js$script,domain=pitchfork.com
+@@||securepubads.g.doubleclick.net/gpt/pubads_impl$script,domain=pitchfork.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4001
+@@||pub.247-inc.net/psp/platform/*$frame,domain=bbystatic.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4010
+||admost.com^$script,important,domain=sahadan.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4021
+|https://$3p,image,script,domain=damimage.com|imagedecode.com|imageteam.org,badfilter
+@@||imgview.pw^$ghide
+! https://github.com/uBlockOrigin/uAssets/issues/4993
+@@||imgdew.com/js/*$script,domain=imgdew.pw
+
+! https://github.com/uBlockOrigin/uAssets/issues/4036
+! https://github.com/uBlockOrigin/uAssets/issues/16113
+pasteboard.co##+js(set, nads.createAd, trueFunc)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/9xm0ou/abccom_not_loading_not_solvable/
+go.com#@#.has-ad
+
+! https://www.reddit.com/r/uBlockOrigin/comments/9ye98t
+@@||edgedatg.com/aws/assets/cp/web/assets/js/*/AppMeasurement.js$script,domain=disneynow.go.com
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=42199
+@@||static.adsnative.com/static/js/render.*.js$script,domain=streamable.com
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=42216
+@@||litix.io/core/$script,domain=velocity.com|motortrend.com
+@@||fusion.ddmcdn.com/app/*/comscore.streaming.$script,domain=velocity.com|motortrend.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4226
+||computerworld.com/*/gpt_includes.js$script,redirect-rule=googletagservices_gpt.js
+
+! https://www.reddit.com/r/uBlockOrigin/comments/a3r5e1/site_not_rendering_properly_with_ublockorigin/
+@@||adverts.ie/css/$css,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/4275
+riderplanet-usa.com#@##ad_1
+
+! https://github.com/uBlockOrigin/uAssets/issues/4268#issuecomment-445490940
+adproceed.com#@#.single-ad
+
+! https://www.winboard.org/threads/interaktion-auf-website-nicht-moeglich-wwm-trainigslager.250843/
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=wwm.rtl.de
+
+! https://forums.lanik.us/viewtopic.php?p=144166#p144166
+hwupgrade.it#@#a[href^="https://www.amazon."][href*="tag="]
+hdblog.it#@#a[href^="https://www.amazon."][href*="tag="]
+
+! https://github.com/NanoMeow/QuickReports/issues/462
+@@||startpage.com^$popup,domain=msn.com
+
+! https://forums.lanik.us/viewtopic.php?f=90&t=42355
+@@||ticketonline.de^$frame,domain=stage-entertainment.de
+
+! https://forums.lanik.us/viewtopic.php?p=144333#p144333
+||marketo.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/4484
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=classicreload.com
+
+! https://github.com/uBlockOrigin/uAssets/pull/4486
+@@||easyweb.td.com/*/loggingService.js$script,1p
+@@||plugin.intuitcdn.net/ua-parser-js/*/ua-parser.min.js$script,domain=qbo.intuit.com
+
+! https://www.camp-firefox.de/forum/viewtopic.php?p=1101018#p1101018
+@@||laola1.at/?proxy=js/build/layout$script,1p
+
+! newser.com broken search by EasyList
+@@||google.com/afsonline/*$script,domain=newser.com
+
+! https://forums.lanik.us/viewtopic.php?p=144724#p144724
+@@/isomorphic/system/modules/ISC_Analytics.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/3703#issuecomment-453920675
+@@||instagram.com^$popup,domain=msn.com
+
+! https://github.com/easylist/easylist/issues/2631
+/performancetimer.js$badfilter
+
+! https://forums.lanik.us/viewtopic.php?p=144884#p144884
+@@||ipinfo.io/?token$xhr,domain=webtv.ert.gr
+
+! https://github.com/uBlockOrigin/uAssets/issues/4675
+! https://github.com/uBlockOrigin/uAssets/issues/4784
+@@||trbas.com/jive/$script,domain=baltimoresun.com|capitalgazette.com|chicagotribune.com|citypaper.com|dailypress.com|mcall.com|orlandosentinel.com|pacificsandiego.com|sandiegouniontribune.com|sun-sentinel.com
+
+! broken site vidtudu . com
+@@||vidtodo.com^$css,image,domain=vidtudu.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4708
+@@||art19.com^$xhr,domain=merriam-webster.com
+@@||graph.facebook.com^$xhr,domain=merriam-webster.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4748
+tomsguide.com#@#.widget-ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/4760
+@@||static.sunmedia.tv/integrations/*$script,domain=api.gooru.live|elespanol.com|periodistadigital.tv
+
+! https://forums.lanik.us/viewtopic.php?p=145240#p145240
+*$3p,script,redirect=noopjs,domain=lolalytics.com
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=42539
+@@||dev.visualwebsiteoptimizer.com^$script,domain=cars.usnews.com
+
+! https://forums.lanik.us/viewtopic.php?p=145284#p145284
+/adlead.$domain=~adlead.com|~adlead.pro|~adlead.ru,badfilter
+/adlead.$domain=~adlead.com|~adlead.pro|~adlead.ru|~adlead.immo
+
+! https://github.com/uBlockOrigin/uAssets/issues/4784#issuecomment-459778667
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=chicagotribune.com|mcall.com
+
+! ranker.com breakage (prev / next)
+@@||cdn.zidedge.com/zp/ranker/$script,domain=ranker.com
+@@||petametrics.com^$script,domain=ranker.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4793
+@@||popeyes.com/*/clicktrack?$xhr,1p
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/265
+@@||adserver.pandora.com/haymaker/api/v1/serve/$xhr,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/anljwh/ubo_breaks_httpsbigtenorg/
+@@||s3.amazonaws.com/assets.sidearmsports.com/statcollector/statcollector.min.js$script,domain=bigten.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/4812
+! https://github.com/uBlockOrigin/uAssets/issues/18905
+||evergage.com^$badfilter
+||ti.com/assets/js/headerfooter/$script,badfilter
+@@||texasinstruments.evergage.com^$script,domain=ti.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4876
+hawaiitribune-herald.com,thegardenisland.com,westhawaiitoday.com#@#.header-ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/4674#issuecomment-463743899
+@@||vshare.eu/$popup,domain=putlockers.fm
+
+! https://github.com/uBlockOrigin/uAssets/issues/4909
+@@||adobedtm.com^*/satellitelib-$script,domain=virginmobile.ca
+
+! https://forums.lanik.us/viewtopic.php?p=145834#p145834
+dday.it#@#.sponsored
+
+! https://twitter.com/RyuTechGaming/status/1098525246687248384
+@@||europarl.europa.eu/website/webanalytics/*$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/714
+@@||code.adsales.snidigital.com/conf/ads-config.js$script,domain=travelchannel.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5000
+||tailtarget.com/profiles.js$script,redirect=noopjs,domain=superesportes.com.br,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/5012
+nypost.com,pagesix.com#@#.recirc
+@@||widgets.outbrain.com/outbrain.js$script,domain=nypost.com|pagesix.com
+@@||odb.outbrain.com/utils/get?url$script,domain=nypost.com|pagesix.com
+
+! https://forums.lanik.us/viewtopic.php?p=145951#p145951
+||xbooru.com/script/application.js$badfilter
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=42677
+@@||s2.coinmarketcap.com^$image
+
+! https://github.com/NanoMeow/QuickReports/issues/730
+@@||load.sumome.com^$script,domain=beewits.com
+
+! fix goducks.com
+! broken by '/js/analytics.' in EasyPrivacy
+||goducks.com/components/js/analytics.js$script,1p,redirect=noopjs
+
+! https://www.reddit.com/r/uBlockOrigin/comments/awb85y/radiocom_streaming_doesnt_work_with_ublockorigin/
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=player.radio.com
+@@||live.streamtheworld.com/*banners$media,domain=player.radio.com
+
+! https://forums.lanik.us/viewtopic.php?p=146140#p146140
+||tags.bluekai.com/$script,redirect=noopjs,domain=6abc.com|abc30.com|abc7.com|abc7chicago.com|abc7news.com|abc7ny.com|abc11.com|abc13.com
+! https://github.com/uBlockOrigin/uAssets/commit/11c602478e60975f9b9ee80341a975169d8b3939#commitcomment-32629346
+@@||wlne.images.worldnow.com/ads/*.jpg?auto=web$image,domain=abc6.com
+@@||wlne.images.worldnow.com/ads/*.png$image,domain=abc6.com
+
+! https://github.com/easylist/easylist/issues/2935
+@@||src.fedoraproject.org/static/issues_stats.js$script,1p
+
+! https://github.com/easylist/easylist/issues/2998
+@@||puch-ersatzteile.at/static/*/Magento_GoogleAnalytics/*$script,1p
+
+! https://github.com/abp-filters/abp-filters-anti-cv/issues/102#issuecomment-472241581
+@@||static1.dmcdn.net/playerv5/*$script,domain=laprovence.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5125
+@@||adobedtm.com^*/satellitelib-$script,domain=papers.ssrn.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5127
+@@||cdn.taplytics.com/taplytics.min.js$script,domain=es.wallapop.com
+
+! breakage caused by Yavli-filters in EasyList
+@@||youtube.com/yts/jsbin/*$script,domain=breathecast.com|classicalite.com|crossmap.com|hallels.com|newseveryday.com|returnofkings.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/1720
+@@||fls-na.amazon.*/1/batch/1/OP/$image,domain=amazon.*
+
+! https://www.reddit.com/r/uBlockOrigin/comments/b7dh6s/cant_change_stlyes_on_4chan_with_ubo_active/
+@@||4cdn.org^$script,domain=4chan.org
+
+! https://forums.lanik.us/viewtopic.php?p=146870#p146870
+@@||api.coinmarketcap.com/$xhr,domain=unblock.net
+
+! https://forums.lanik.us/viewtopic.php?p=146878#p146878
+@@||adsynth-ofx-quotewidget-prod.herokuapp.com/api/$xhr,domain=widget-yahoo.ofx.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5295
+!#if !env_chromium
+@@||player.aniview.com/script/*/AVmanager.js$domain=inquirer.net
+!#endif
+
+! fix broken links at blick.ch
+! caused by EasyPrivacy
+@@||da.admeira.ch/adm_signaturscript.js$script,domain=blick.ch
+! https://github.com/NanoMeow/QuickReports/issues/5
+@@||browser.sentry-cdn.com/*/bundle.min.js$script,domain=blick.ch
+
+! https://forums.lanik.us/viewtopic.php?p=146915#p146915
+@@||eastprodcdn.azureedge.net/bundles/*velaro$script
+||velaro.com^$3p,badfilter
+
+! https://github.com/NanoMeow/QuickReports/issues/939
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=boo.tw|b00.tw
+
+! https://www.reddit.com/r/uBlockOrigin/comments/b9ns52/cant_purchase_games_on_epic_game_store_while_this/
+@@||tracking.epicgames.com/tracking.js$1p
+
+! mattinopadova .gelocal.it broken page
+@@||scripts.repubblica.it/$script,domain=gelocal.it
+
+! https://github.com/NanoMeow/QuickReports/issues/84#issuecomment-480528757
+@@/playvideo.php$frame,domain=myvidster.com
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/287
+||linetv.tw/public/scripts/ads.js$important,1p
+@@||google-analytics.com/analytics.js$script,domain=linetv.tw
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$domain=linetv.tw
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ba52ij/vlive_site_preventing_streaming_while_ublock_is/
+! https://www.reddit.com/r/uBlockOrigin/comments/jli3g7/workaround_vlivetv_update_infinite_loading_again/
+! https://www.vlive.tv/video/219020 broken video
+@@||naver.com/adcall$xhr,script,domain=vlive.tv
+
+! https://github.com/NanoMeow/QuickReports/issues/952
+@@||scripts.agilone.com^$frame,domain=davidstea.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5323
+@@||vlscppe.microsoft.com/fp/tags.js$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/991
+@@||cdnperf.com/js/rollbar.js$script,1p
+@@||perfops.net^$script,domain=cdnperf.com
+
+! https://github.com/NanoMeow/QuickReports/issues/992
+||dccss.banggood.com^$badfilter
+
+! https://forums.lanik.us/viewtopic.php?p=147048#p147048
+@@||9anime.*/user/ajax/$xhr,1p
+
+! https://github.com/easylist/easylist/issues/3261
+@@||adswizz.com/anon.npr-mp3/*$media,domain=podbay.fm|podbean.com
+@@||adswizz.com/anon.npr-podcasts/*$media,domain=podbay.fm|podbean.com
+! https://www.reddit.com/r/uBlockOrigin/comments/k8xd8x/playerfm_certain_podcasts_unplayable_with_ubo/
+@@||player.fm^$cname
+
+! https://github.com/NanoMeow/QuickReports/issues/958
+kzstock.blogspot.com#@##ad-target
+
+! https://github.com/uBlockOrigin/uAssets/issues/5395
+@@||app.tallo.com/assets/javascripts/app/studentstats/statCount.$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/1059
+@@||kolumbus.fi/cgi-bin/counter.cgi$image,1p
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=42965
+||olx.com.br^*/lurker.$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/5479
+@@||api.deep.bi/v3/init.js$script,domain=elconfidencial.com
+
+! https://forums.lanik.us/viewtopic.php?p=147310#p147310
+||hawk.pcgamer.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/5499
+@@||viu.tv/assets/js/comScore.*.min.js$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/bl24wp/readcomiconline_issues/
+@@||readcomiconline.to/$xhr,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/1160
+@@||adobedtm.com^*/satellitelib-$script,domain=skysportaustria.at
+
+! https://github.com/uBlockOrigin/uAssets/issues/5533
+||miniusa.com/etc/designs/mini/js/vendor/tracking/*$script,1p,redirect=noopjs
+
+! https://www.reddit.com/r/uBlockOrigin/comments/blgisr/cannot_click_through_to_video_on_nhlcom/
+@@||doubleclick.net/gampad/ads*nhl.com$xhr,domain=imasdk.googleapis.com
+@@||static.adsafeprotected.com/vans-adapter-google-ima.js$script,domain=nhl.com
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/323
+@@||d8rk54i4mohrb.cloudfront.net/js/video.js$script,domain=forbes.com
+
+! scrolling broken drstevenlin .com
+drstevenlin.com##html:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/5559
+tele5.de##.break-ads
+
+! https://forums.lanik.us/viewtopic.php?p=147357#p147357
+! https://forums.lanik.us/viewtopic.php?p=150840#p150840
+||exoclick.com^$doc,badfilter
+||exoclick.com^$badfilter
+||exoclick.com^$3p
+@@||exoclick.com/privacy-and-cookies-policy/*$popup
+@@||api.exoclick.com^$domain=exoclick.com
+
+! https://github.com/easylist/easylist/issues/3440
+@@||lp-cdn.lastpass.com/lporcamedia/*/dist/scripts/analyticsjs.js$script,1p
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/578
+detroitnews.com###partner-poster-0
+
+! https://forums.lanik.us/viewtopic.php?p=147578#p147578
+@@||fontspring.com/analytics/hi.gif$image,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/bpt2b5/getting_big_ads_4_ads_x_2_sponsored_content_on/
+||thelibertydaily.com^$csp=script-src 'self' *.leadpages.net *.gstatic.com *.google.com *.googleapis.com *.playwire.com *.facebook.com *.bootstrapcdn.com,badfilter
+||bigleaguepolitics.com^$csp=script-src 'self' *.leadpages.net *.gstatic.com *.google.com *.googleapis.com *.playwire.com *.facebook.com *.bootstrapcdn.com *.twitter.com *.spot.im,badfilter
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/583
+@@||googletagmanager.com/gtm.js$script,domain=rappi.com.mx
+
+! https://github.com/NanoMeow/QuickReports/issues/1257
+@@||piasecznonews.pl/wp-content/plugins/wppas/$1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/bqmliz/not_working_on_1movies_anymore/
+! https://www.reddit.com/r/uBlockOrigin/comments/e85st9/www41moviesis_ads_arent_being_blocked/
+@@*$media,domain=1movies.is
+||acloudvideos.com/video_ads/$media,domain=1movies.is,important
+
+! https://github.com/NanoMeow/QuickReports/issues/1262
+@@||gstatic.com/images/branding/*/adsense$image,domain=safebrowsing.google.com
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=43042
+||curalate.com/api/v1/metrics/
+/api/v1/metrics$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/5662
+@@||nbc*.com/includes/AppMeasurement.js$script,1p
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=43073&p=147868#p147852
+://adv.$domain=adv.asahi.com|~adv.bet|~adv.blue|~adv.cincsys.com|~adv.cryptonetlabs.it|~adv.derfunke.at|~adv.design|~adv.digimatix.ru|~adv.ec|~adv.ee|~adv.gg|~adv.lack-girl.com|~adv.michaelgat.com|~adv.msk.ru|~adv.neosystem.co.uk|~adv.rest|~adv.ru|~adv.tools|~adv.trinet.ru|~adv.ua|~adv.vg|~adv.vn.ua|~adv.works|~adv.yomiuri.co.jp|~advids.co|~farapp.com|~pracuj.pl|~r7.com|~typeform.com|~welaika.com,badfilter
+://adv.$domain=adv.asahi.com|~adv.bet|~adv.blue|~adv.chunichi.co.jp|~adv.cincsys.com|~adv.cryptonetlabs.it|~adv.derfunke.at|~adv.design|~adv.digimatix.ru|~adv.ec|~adv.ee|~adv.gg|~adv.hokkaido-np.co.jp|~adv.lack-girl.com|~adv.michaelgat.com|~adv.msk.ru|~adv.neosystem.co.uk|~adv.rest|~adv.ru|~adv.tools|~adv.trinet.ru|~adv.ua|~adv.vg|~adv.vn.ua|~adv.works|~adv.yomiuri.co.jp|~advids.co|~farapp.com|~pracuj.pl|~r7.com|~typeform.com|~welaika.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5688
+||amazonaws.com^*/funders-$domain=globalvoices.org,badfilter
+
+! https://github.com/NanoMeow/QuickReports/issues/1296#issuecomment-496773275
+calgaryherald.com#@#.local-branding
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/608
+/google-analytics-$~image,badfilter
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=43091
+||scroll.com^$3p,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/5764
+@@||ebates.com/dist/static/*/analytics/*$script,1p
+@@||rakuten.com/dist/static/*/analytics/*$script,1p
+
+! #1589 csp filters breaking injecting filters / pages
+@@*$csp,domain=activistpost.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5768
+@@||d24n15hnbwhuhn.cloudfront.net/libs/amplitude-$script,domain=gethuman.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5784
+@@||cdnjs.cloudflare.com/ajax/libs/videojs-contrib-ads/*/videojs.ads.css$stylesheet,domain=abcya.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5796
+@@||hyundaiusa.com/js/analytics/analytics.js$script,1p
+
+! https://twitter.com/localnewsman/status/1137958542927835136
+@@||appspot.com/api/*/feed/tag$xhr,domain=apnews.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5841
+@@||djnf6e5yyirys.cloudfront.net/js/friendbuy.min.js$script,domain=imperfectfoods.com|imperfectproduce.com
+@@||friendbuy.com^$xhr,frame,domain=imperfectfoods.com|imperfectproduce.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5848
+@@||src.litix.io/videojs/*/videojs-mux.js$script,domain=dmax.de|tlc.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/5849
+carbuzz.com##.cb-comments__create-form:style(margin-top: 30px !important;)
+carbuzz.com##.cb-post-block-images-swiper .cb-post-block__comments .collapseable-comments__collapse:style(margin-bottom: 0px !important;)
+carbuzz.com##.cb-post-block-images-swiper .cb-post-block__comments:style(margin-bottom: 0 !important; top: -97px !important;)
+carbuzz.com##.cb-post-block-images-swiper .collapseable-comments__collapseable:style(margin-bottom: -80px !important;)
+carbuzz.com##.cb-post-block__comments:style(padding-bottom: 0 !important;)
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=43181&p=148363#p148363
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=player.sdpg.tv
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=43131
+#@#a[href^="https://badoinkvr.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/5726#issuecomment-503789864
+queerpride.de#@#.category-advertorial
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/366
+@@||10minuteschool.com/wp-content/plugins/duracelltomi-google-tag-manager/js/gtm4wp-download-tracker.js$1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/5880
+||madmimi.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/5883
+@@||discordapp.net/external/*$image,domain=discordapp.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5891 Prensa Ibérica 360
+@@||estaticos.*/elementosWeb/ew/js/multimedia/player/videojs-contrib-ads/videojs.ads.min.js$xhr,domain=diaridegirona.cat|diariodeibiza.es|diariodemallorca.es|diarioinformacion.com|eldia.es|emporda.info|farodevigo.es|laopinioncoruna.es|laopiniondemalaga.es|laopiniondemurcia.es|laopiniondezamora.es|laprovincia.es|levante-emv.com|lne.es|mallorcazeitung.es|regio7.cat|superdeporte.es
+
+! https://github.com/NanoMeow/QuickReports/issues/1477
+||assets.adobedtm.com/launch-$script,important,domain=bellinghamherald.com|bnd.com|bradenton.com|centredaily.com|charlotteobserver.com|elnuevoherald.com|fresnobee.com|heraldonline.com|heraldsun.com|idahostatesman.com|islandpacket.com|kansas.com|kansascity.com|kentucky.com|ledger-enquirer.com|macon.com|mcclatchydc.com|mercedsunstar.com|miamiherald.com|modbee.com|myrtlebeachonline.com|newsobserver.com|sacbee.com|sanluisobispo.com|star-telegram.com|sunherald.com|theolympian.com|thenewstribune.com|thestate.com|tri-cityherald.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5936
+@@||media.nintendo.com/share/include/*/js/tracking/*$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/cetv3v/
+@@||cpt-static.gannettdigital.com/*-comscore$xhr
+
+! https://github.com/uBlockOrigin/uAssets/issues/5986
+@@||en25.com/*/DELOITTECENTRALEUROPELIMITED/*$image,css,script,domain=register.deloittece.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5992
+||xtremetop100.com^$badfilter
+||xtremetop100.com^$3p
+
+! https://twitter.com/msanserif/status/1153636967856271361
+@@||adobedtm.com/*/satelliteLib-$script,domain=manage.linkt.com.au
+
+! https://github.com/uBlockOrigin/uAssets/issues/5999
+@@||blackberrymobile.com/emea/core/modules/*/site_tracking.js$script,1p
+
+! https://forums.lanik.us/viewtopic.php?p=148931#p148590
+@@||ezoic.net/wabbit/$script,domain=gerweck.net
+
+! https://github.com/NanoMeow/QuickReports/issues/1922
+@@||api.unidadeditorial.es/sports/v1/events/*$xhr
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=43318&p=148940#p148939
+@@||googleapis.com/xxx-mightyparty.appspot.com/$3p,xhr,script,frame
+
+! https://github.com/NanoMeow/QuickReports/issues/1581
+@@||static.lci.fr/assets/scripts/common/xiti.js$script,1p
+
+! https://github.com/easylist/easylist/issues/3802
+japan-webike.*,webike.*,webike-china.cn#@#.ad_box
+japan-webike.*,webike.*,webike-china.cn#@#.ad_title
+
+! https://github.com/uBlockOrigin/uAssets/issues/6026
+codeproject.com#@#[style*="base64"]
+
+! https://github.com/NanoMeow/QuickReports/issues/1600
+@@||squid.gazeta.pl/bdtrck/*$frame,domain=wyborcza.pl
+@@||squid.gazeta.pl/bdtrck/*$xhr,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/1619
+@@||wallpaperplay.com^$ghide
+wallpaperplay.com##.adsbygoogle
+
+! https://forums.lanik.us/viewtopic.php?p=149059#p149059
+@@||imasdk.googleapis.com/pal/sdkloader/pal.js$script,domain=watch.motortrend.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6055
+||googletagservices.com/tag/js/gpt.js$script,redirect=noopjs,domain=ladbible.com
+
+! https://www.drupal.org/project/webmasters/issues/3073568
+@@||register.drupal.org/ga*.js$xhr,1p
+
+! fix boattrader .com image gallery
+@@||boatwizard.com/ads_prebid.min.js$script,domain=boattrader.com
+
+! https://github.com/NanoMeow/QuickReports/issues/1652
+@@||shop.bbc.com/skin/$script,1p
+
+! https://github.com/easylist/easylist/issues/3788
+@@||products.wera.de^$xhr,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/1668
+@@||alicdn.com/*/tracker$script,domain=lazada.com.my
+
+! https://www.reddit.com/r/uBlockOrigin/comments/cq6jff/help_for_newbie_sportsnetca_issues/
+@@||sportsnet.ca/wp-content/plugins/$script,css,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6085
+@@||rte.ie/djstatic/dotie/js/tracker.js$script,1p
+@@||src.litix.io/theoplayer/*$script,domain=rte.ie
+rte.ie##.alert.callout
+rte.ie###gpt-leaderboard
+! https://github.com/uBlockOrigin/uAssets/issues/17023
+@@||cloudfront.loggly.com/js/loggly.tracker-2.1.min.js$script,domain=rte.ie
+
+! https://github.com/NanoMeow/QuickReports/issues/1676
+@@||cdn.rawgit.com/*/jquery_lazyload/*$script,domain=javmost.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/crjkqq/problems_with_brave_browser_links_ublock_blocks/
+#@#a[href^="https://laptop-updates.brave.com/download/"]
+
+! https://forums.lanik.us/viewtopic.php?p=149283#p149283
+motherless.com#@#.media-linked
+
+! https://github.com/NanoMeow/QuickReports/issues/1696
+indoxx1.center#@#.lazy
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=43425
+/^https?:\/\/(35|104)\.(\d){1,3}\.(\d){1,3}\.(\d){1,3}\//$popup,3p,badfilter
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=43426&p=149429#p149426
+@@||myreadingmanga.info/wp-content/uploads/*.jpg$image,1p
+||myreadingmanga.info/wp-content/uploads/*.gif$image
+
+! https://github.com/easylist/easylist/issues/3942
+||pmdstatic.net^$3p,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/2870#issuecomment-528066013
+@@||api.infowarsmedia.com/videojs-event-tracking/$script,1p
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=43469&p=149630#p149630
+techradar.com#@#a[href^="https://amazon."][href*="tag="]
+
+! https://github.com/uBlockOrigin/uAssets/issues/6257
+@@||game-cdn.poki.*^$frame,1p
+@@||poki-gdn.com^$frame
+
+! https://github.com/uBlockOrigin/uAssets/issues/6262
+||api.stopad.io/link/*/pixel$image,1p,redirect=1x1.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/6267
+@@||yimg.com/ss/rapid$script,domain=aol.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6270
+@@||sibo.nl/catalogus/de/files/html/static/analytics.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6272
+@@||motika.com.mk/wp-content/plugins/ajax-hits-counter/$xhr,1p
+||motika.com.mk/reklam$image
+
+! https://github.com/uBlockOrigin/uAssets/issues/6282
+@@||d2wzl9lnvjz3bh.cloudfront.net/frosmo.easy.js$script,domain=tally-weijl.com
+@@||frosmo.com/tally-weijl-product-listing/$xhr,domain=tally-weijl.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6288
+||clustrmaps.com^$image,redirect=32x32-transparent.png,domain=motls.blogspot.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/d3mrfr/how_to_unblock_ebay_sponsored_listings/
+ebay.com#@#li.s-item:has(span:has-text(SPONSORED))
+
+! https://github.com/uBlockOrigin/uAssets/issues/6304
+@@||e-dnevnik.skole.hr^$ghide
+
+! https://www.reddit.com/r/uBlockOrigin/comments/cxhr9u/ublock_origin_1220_is_out/f0catse/
+! https://forums.lanik.us/viewtopic.php?p=149797#p149797
+@@||viafoura.*^$script,domain=20minutes.fr
+@@||rcijeux.fr/game/20minutes/$frame,domain=20minutes.fr
+
+! https://github.com/NanoMeow/QuickReports/issues/283
+@@||opgg-static.akamaized.net/*/tracker.js$script,domain=op.gg
+
+! https://github.com/uBlockOrigin/uAssets/commit/69bced5eba64f7960acaa5fa85df06958fb64a93#commitcomment-35179436
+twitter.com#@#article[role="article"]:has-text(Promoted)
+
+! To counter the adswizz filter in Peter Lowe's list
+||adswizz.com^$badfilter
+||adswizz.com^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/d6zbqv/login_popup_for_disqus_being_blocked/
+@@||disqus.com/next/login/$popup
+
+! whitelisting recaptcha .net
+@@||recaptcha.net/recaptcha/
+
+! https://github.com/uBlockOrigin/uAssets/issues/6334
+||rtl.de/pf/resources/js/videotracking.min.js$script,redirect=noopjs,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6338
+@@||gstatic.com/*/adwords/partnerspublic/partners_public_*/partners/main.dart.js$script
+
+! https://www.reddit.com/r/uBlockOrigin/comments/d8uc9z/remove_peter_lowes_list_from_company_ublock/f1ed6id/
+@@||en25.com^$image,domain=eloquaeditors.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6352
+@@||googletagmanager.com/gtm.js$script,domain=carvana.com
+
+! https://github.com/NanoMeow/QuickReports/issues/1319
+@@||moatads.com/aolvidibleapi*$script,domain=bloombergquint.com
+
+! https://github.com/easylist/easylist/issues/4114
+/thermostat.js$badfilter
+/thermostat.js$script,domain=royle.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6401
+! https://www.reddit.com/r/uBlockOrigin/comments/14ru0x8/
+@@||ad.admitad.com/g/*&ulp=http$doc
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ddlli7/blocking_on_quest_od_uk_causes_video_error/
+@@||litix.io/videojs/$script,domain=questod.co.uk
+
+! https://github.com/easylist/easylist/issues/4108
+||unileversolutions.com/*/config/analytics.js$script,3p,important,redirect=noopjs
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=43671&p=150291#p150286
+||farnell.com/*tracking.js$script,1p,redirect=noopjs
+
+! https://www.reddit.com/r/uBlockOrigin/comments/dg0679/load_more_comments_not_working/
+! https://github.com/AdguardTeam/AdguardFilters/issues/147282
+@@||x.kinja-static.com/assets/packaged-js/trackers$script
+||x.kinja-static.com/assets/packaged-js/trackers$script,domain=clickhole.com|deadspin.com|gizmodo.com|jalopnik.com|jezebel.com|kotaku.com|lifehacker.com|splinternews.com|theinventory.com|theonion.com|theroot.com|thetakeout.com,important
+clickhole.com,deadspin.com,gizmodo.com,jalopnik.com,jezebel.com,kotaku.com,lifehacker.com,splinternews.com,theinventory.com,theonion.com,theroot.com,thetakeout.com##+js(set, ga, noopFunc)
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=43663#p150230
+||ultimedia.com/api/widget/$xhr,domain=techradar.com|tomsguide.com|tomshardware.com|videogamer.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2023
+@@||bazaarvoice.com/prod/static/*/bv-analytics.js$script,domain=chemistwarehouse.com.au
+
+! https://www.reddit.com/r/uBlockOrigin/comments/dhfvp8/the_buy_buttons_on_my_website_are_being_hidden_by/
+@@||authorityhacker.com/wp-content/*/plugins/duracelltomi-google-tag-manager/*$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/di9zaq/ublock_origin_breaking_page_but_not_blocking/
+@@||parse.ly/page-data/help/api/analytics/$xhr,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/diaoj6/comments_no_longer_loading_on_masslivecom/f3umxm9/?context=8&depth=9
+@@||viafoura.co^$domain=masslive.com
+
+! https://github.com/gorhill/uBO-Extra/issues/119#issuecomment-543469244
+*/videoplayback?expire$media,redirect=noopmp3-0.1s,domain=webmd.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6456
+@@||googletagmanager.com/gtm.js$script,domain=eclipse.org
+
+! https://www.reddit.com/r/uBlockOrigin/comments/dktx86/weather_radar_not_showing_up_on_website/
+@@||modules-prod.franklyinc.com/cml.js$script,domain=newson6.com
+
+! https://news.ycombinator.com/item?id=21325661
+arstechnica.com#@#a[href^="https://www.amazon."][href*="tag="]
+
+! https://github.com/NanoMeow/QuickReports/issues/2114
+@@||webticketing2.cinestar.de/app/scripts/provider/GoogleTagManager.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6474
+@@||analytics.analytics-egain.com/onetag/$script,domain=xfinity.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6480
+||pushengage.com^$badfilter
+
+! https://github.com/easylist/easylist/issues/4185
+! https://github.com/uBlockOrigin/uAssets/issues/8616
+*/dw-tracking$script,important,redirect=noopjs,domain=techrepublic.com
+||adtech.redventures.io/lib/*/bidbarrel-techrepublic-$script,important,redirect=noop.js,domain=techrepublic.com|zdnet.com
+
+! https://github.com/easylist/easylist/issues/4203
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect=google-ima.js,important,domain=player.earthtv.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6490
+@@||dogtime.com/wp-content/plugins/bwp-minify/min/*-google-analytics-$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/8133
+@@||los40.com^$ghide
+@@||epimg.net^$image,domain=los40.com
+! @@*/*slot*.js$script,xhr,domain=los40.com
+@@||epimg.net/js/pbs/prebid$script,domain=los40.com
+@@||epimg.net/js/comun/avisopcdidomi2.js$script,domain=los40.com
+@@||doubleclick.net/tag/js/gpt.js$script,domain=los40.com
+@@||doubleclick.net/gpt/pubads_impl_$script,domain=los40.com
+@@||doubleclick.net/gampad/ads?$xhr,domain=los40.com
+||googlesyndication.com/safeframe/*/container.html$frame,redirect-rule=noop.html,domain=los40.com
+||vod.playoncenter.com/videos/*.mp4$media,domain=los40.com
+||streamtheworld.com/ondemand/creative?cat=cm-preroll$xhr,redirect=nooptext,domain=los40.com
+los40.com##+js(ra, class|style, div[id^="los40_gpt"])
+los40.com##+js(set, huecosPBS.nstdX, null)
+stories.los40.com##+js(json-prune, config.globalInteractions.[].bsData)
+los40.com##[class^="advertising"]
+los40.com##iframe[id^="google_ads_iframe"]:style(max-height: 1px !important;)
+los40.com##div[id^="google_ads_iframe_"]:style(max-height: 1px !important;)
+los40.com##.amp-animate:remove()
+los40.com##.estirar.envoltorio_publi
+los40.com##.publi_luto_horizontal:style(max-height: 1px !important;)
+los40.com##.publi_luto_vertical
+los40.com##.cont_webpush
+los40.com###adunit
+! https://los40.com/los40/2020/11/20/videos/1605885399_459822.html - video broken when pausing
+@@||assets.adobedtm.com/extensions/*/AppMeasurement.min.js$script,domain=los40.com
+! https://www.reddit.com/r/uBlockOrigin/comments/14anfyg/
+los40.com##+js(set, DTM.trackAsyncPV, noopFunc)
+los40.com##+js(no-fetch-if, googlesyndication)
+
+! https://github.com/uBlockOrigin/uAssets/issues/3462#issuecomment-547684961
+@@||ipinfo.io/json$xhr,domain=futbollibre.online
+
+! https://forums.lanik.us/viewtopic.php?f=64&p=150848#p150848
+@@||safecurr.g2afse.com/click?pid=*&offer_id$popup
+
+! https://github.com/NanoMeow/QuickReports/issues/2199
+@@||tvtime.com/ga-assets/*$1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/drl79f/ublock_is_blocking_button_actions_on_page/
+@@||epaper.eenadu.net/Home/GetAds$xhr,1p
+@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,domain=epaper.eenadu.net
+@@||securepubads.g.doubleclick.net/gpt/pubads_impl$script,domain=epaper.eenadu.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/6518
+@@||taboola.com^$script,domain=gizmodo.com.au|lifehacker.com.au
+
+! chess table broken https://2700chess.com/games/vachier-lagrave-wei-r1.1-hamburg-2019-11-03
+@@||2700chess.com/js/analysis.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6523
+||assets.adobedtm.com/*/satelliteLib$script,redirect-rule=noopjs,domain=8world.com
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=noopjs,domain=8world.com
+||player.ooyala.com^$script,redirect-rule=noopjs,domain=8world.com
+||scorecardresearch.com/*/plugins/$script,redirect=noopjs,domain=8world.com
+
+! broken site https://www.sky.com/watch/title/series/090664e1-402f-492b-ac52-595aed218812/britannia
+@@||analytics.global.sky.com/sky-tags/*/sky-tags-without-adobe.min.js$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/2255
+@@||sourcepoint.vice.com^$script,xhr,domain=video.vice.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2253
+@@||mac-torrent-download.net^$ghide
+mac-torrent-download.net##[href^="//sundhopen.site/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/7910
+@@||metacritic.com/js/omniture/uuid.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6539
+@@||pinpng.com^$css,1p
+@@||pngfind.com^$css,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/dvha50/having_issues_with_twitter_embeds_on_kotakucomau/
+@@||automate-prod.s3.amazonaws.com/minified_logic.js$xhr,domain=kotaku.com.au
+
+! https://github.com/NanoMeow/QuickReports/issues/2274
+@@||googletagservices.com/tag/js/gpt.js$script,domain=phonearena.com
+
+! https://github.com/NanoMeow/QuickReports/issues/232#issuecomment-555086451
+pcgamer.com#@#.hawk-widget
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=43885
+@@||spankmasters.com/EmbedPlayer.aspx$frame
+
+! broken videos on reuters.com
+! https://github.com/uBlockOrigin/uAssets/issues/8447#issuecomment-1077703228
+! https://github.com/uBlockOrigin/uAssets/issues/8447#issuecomment-1579287955
+@@||reutersmedia.net/*/js/rcom-scroll-tracker.js$script,domain=reuters.com
+@@||cdn.permutive.com^$script,domain=reuters.com
+@@||api.permutive.com/*/batch/$xhr,domain=reuters.com
+@@||api.permutive.com/v2.0/*$xhr,domain=reuters.com
+@@||googletagmanager.com/gtm.js$script,domain=reuters.com
+@@||imasdk.googleapis.com/js/sdkloader/ima3_debug.js$script,domain=reuters.com
+! https://github.com/AdguardTeam/AdguardFilters/issues/152828
+@@||pixel.adsafeprotected.com/services/pub$xhr,domain=reuters.com
+! https://github.com/uBlockOrigin/uAssets/issues/19382
+@@||try.abtasty.com^$script,domain=reuters.com
+||try.abtasty.com/shared/analytics$script,domain=reuters.com,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/6601
+@@||cdn.mxpnl.com/libs/mixpanel-*-latest.min.js$script,domain=groupme.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2328
+@@||googletagmanager.com^$script,domain=subscriptions.amd.com
+@@/gtm.js$script,domain=subscriptions.amd.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6613
+@@||googletagmanager.com/gtm.js$script,domain=pochta.ru
+@@||google-analytics.com/analytics.js$script,domain=pochta.ru
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=43928
+@@||captcha.px-cdn.net^$script
+@@||perimeterx.net/api/v2/collector/ocaptcha$xhr
+
+! fix fembed.com download button
+*$script,3p,domain=fembed.com,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/4542#issuecomment-559369797
+@@||mixdrop.co^$frame
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=43926
+@@||promo.com/shopify/shopify-store-script.js$script
+@@||promo.local/shopify/shopify-store-script.js$script
+@@||promo.com/shopify-backend/*/user-videos/public/video-urls$xhr
+
+! https://www.reddit.com/r/uBlockOrigin/comments/e4zk0b/live_chat_link_disappears_when_ublock_is_enabled/
+@@||googletagmanager.com/gtm.js$script,domain=thenorthface.com
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=43950&p=151548#p151548
+@@||tag.rightmessage.com^$domain=conservation-careers.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/e6do2r/seems_like_ublock_is_blocking_too_much/f9qd3ak/
+@@||tags.bkrtx.com/js/bk-coretag.js$script,domain=thequint.com
+
+! https://forums.lanik.us/viewtopic.php?f=91&t=43718&p=151658#p150548
+||systeme.io^$~image,3p,badfilter
+
+! https://www.reddit.com/r/uBlockOrigin/comments/e6lash/cant_log_in_on_digital_news_website/
+@@||track.tagesanzeiger.ch^$script,1p
+@@||tagger.opecloud.com^$xhr,domain=tagesanzeiger.ch
+@@||tgt.tamedia.ch/*/api/$xhr,domain=tagesanzeiger.ch
+! https://github.com/uBlockOrigin/uAssets/issues/6729
+@@||tdn.da-services.ch/libs/prebid$script,domain=tagesanzeiger.ch
+
+! https://github.com/uBlockOrigin/uAssets/issues/6673
+@@||amazon.jobs/assets/analytics-$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/2466
+@@||en25.com^$script,domain=oracle.com
+||t.eloqua.com^$badfilter
+||t.eloqua.com^$3p
+
+! https://www.wilderssecurity.com/threads/ublock-a-lean-and-fast-blocker.365273/page-166#post-2878656
+@@||google-analytics.com/ga.js$script,domain=bimi.jorudan.co.jp
+
+! https://github.com/uBlockOrigin/uAssets/issues/707#issuecomment-565051652
+! broken videos at telegraph.co.uk the videos are behind a paywall
+! example https://www.telegraph.co.uk/news/2020/06/18/like-churchill-de-gaulle-1940-britain-france-united-against/
+@@||notice.sp-prod.net^$frame,domain=telegraph.co.uk
+@@||tags.crwdcntrl.net/*/cc.js$script,domain=telegraph.co.uk
+! https://www.reddit.com/r/uBlockOrigin/comments/jg2gxq/videos_wont_load_on_telegraphcouk/
+@@||privacy-mgmt.com^$script,domain=telegraph.co.uk
+! https://github.com/uBlockOrigin/uAssets/issues/12635
+||adobedtm.com^*/satellitelib-$script,domain=telegraph.co.uk,important
+telegraph.co.uk##+js(set, _satellite, {})
+telegraph.co.uk##+js(set, _satellite.getVisitorId, noopFunc)
+
+! https://github.com/NanoMeow/QuickReports/issues/2489
+@@||costco.com.mx/*/js/trackermediator.js$script,1p
+
+! fix player volume button
+yugioh.com##.cookie-policy-container-invisible.cookie-policy-container
+
+! https://github.com/NanoMeow/QuickReports/issues/2499
+@@||google.com/js/gweb/analytics/doubletrack.js$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/2502
+@@||acdn.adnxs.com/video/mediation/$script,domain=thechive.com
+@@||acdn.adnxs.com/video/player/vastPlayer/VastPlayer.js$script,domain=thechive.com
+@@||petametrics.com^$script,domain=thechive.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6693
+||advertising.com^$badfilter
+||advertising.com^$3p
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=43962&p=151979#p151600
+@@||static.goolive.de/media/static/images/smileys/ad.gif$image
+
+! https://github.com/NanoMeow/QuickReports/issues/2526
+||gratis.com/file/*/global/gtm.min.js$script,1p,redirect=noopjs
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=44087
+*$3p,image,domain=rd.com,badfilter
+*$3p,xhr,domain=rd.com,badfilter
+
+! https://github.com/NanoMeow/QuickReports/issues/1261
+@@||viu.com/*/tracking/$script,1p
+||amazonaws.com^$xhr,redirect-rule=nooptext,domain=viu.com
+viu.com##.ad-ph
+viu.com##.banner_ad_label
+! https://www.reddit.com/r/uBlockOrigin/comments/100djj5/
+viu.com##+js(no-xhr-if, mobileanalytics)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6723
+@@||ak.sail-horizon.com/spm/spm$script,domain=watch.wwe.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6744
+@@||aliexpress.com^*?af=$3p,popup,domain=umidigi.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2589
+qqcinema21.com#@#.headads
+qqcinema21.com##a[rel="nofollow"]:has(img)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6769
+! https://github.com/NanoMeow/QuickReports/issues/2628
+! https://github.com/AdguardTeam/AdguardFilters/issues/70398
+begadistrictnews.com.au,bendigoadvertiser.com.au,goulburnpost.com.au,maitlandmercury.com.au,newcastleherald.com.au##.subscribe-article .subscriber-hider:style(display:block!important)
+begadistrictnews.com.au,bendigoadvertiser.com.au,goulburnpost.com.au,maitlandmercury.com.au,newcastleherald.com.au##.subscribe-article .subscribe-truncate:style(max-height:unset!important;order:unset!important;)
+begadistrictnews.com.au,bendigoadvertiser.com.au,goulburnpost.com.au,maitlandmercury.com.au,newcastleherald.com.au##.subscribe-article .subscribe-truncate::before:style(background:none!important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6784
+||pega.com^$3p,badfilter
+
+! whentai .com broken pages
+@@||whentai.com/combine.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6793
+@@||googletagmanager.com/gtm.js$script,domain=kaspersky.fr
+@@||google-analytics.com/analytics.js$script,domain=kaspersky.fr
+
+! https://www.reddit.com/r/uBlockOrigin/comments/elt1tf/cant_use_fandomcom_search_function_with_ublock/
+@@||wikia.nocookie.net/*/abtesting,$script,domain=fandom.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6806
+@@||nowgoal.com/Control/GetAd.aspx$script,1p
+nowgoal.com##[href^="/ad/"]
+
+! https://github.com/NanoMeow/QuickReports/issues/1060#issuecomment-573116039
+@@||afcs.dellcdn.com^$css,domain=dell.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2731
+@@||downloadgameps3.com/wp-content/plugins/*/wpdcookiejs/customcookie.js$script,1p
+
+! https://forums.lanik.us/viewtopic.php?p=152412#p152412
+@@||ccdn.es/advertising-UseCases-factory-js-factory.$script,domain=coches.net
+
+! Idealista rental listing is not shown on third-party websites
+||idealista.com^$3p,domain=~idealista.com,badfilter
+
+! https://github.com/NanoMeow/QuickReports/issues/2771
+@@||apollo-ireland.akamaized.net/*/files/*$image,domain=otodom.pl
+
+! https://github.com/uBlockOrigin/uAssets/issues/6558
+@@||bloomberg.com/*/captcha/captcha.js$script,1p
+@@||hotelscombined.com/*/captcha/captcha.js$script,1p
+@@||seekingalpha.com/*/captcha/$script,1p
+@@||pxchk.net/api/*/collector/ocaptcha$xhr
+
+! https://github.com/uBlockOrigin/uAssets/issues/6853
+@@||coreldraw.com/static/common/scripts/omni-tracking/omni-tracking.min.js$script,1p
+@@||ipm.corel.com/static/common/scripts/omni-tracking/omni-tracking.min.js$script,1p
+@@||securepubads.g.doubleclick.net^$script,domain=bearteach.com
+bearteach.com###externalinject-gpt-passback-iframe
+
+! broken pages / videos due to blocking recoco
+@@||recoco.it^$image,xhr,domain=heavy-r.com|porngo.com|showbiz.cz|tostreamit.com|vumoo.to|bodysize.org
+
+! as suggested https://www.reddit.com/r/uBlockOrigin/comments/esv7pe/servicehotelscom_not_working_properly_with_ublock/
+@@||travel-assets.com/datacapture/$script,domain=service.hotels.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/6869
+@@||google-analytics.com/analytics.js$script,domain=payment.mts.ru
+
+! https://github.com/uBlockOrigin/uAssets/issues/6871
+@@||src.litix.io/jwplayer/$script,domain=video.eurosport.com
+@@||assets.adobedtm.com/extensions/*/AppMeasurement.min.js$script,domain=video.eurosport.com
+
+! videos broken hideout .co
+@@||services.brid.tv/player/build/plugins/adunit.js$script,domain=hideout.co
+@@||hideout.*^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6879
+@@||en25.com^$domain=plan.seek.intel.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2852
+@@/embed/*$frame,domain=underhentai.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/6394#issuecomment-578846960
+@@||uiz.io/links/popad$popup
+
+! https://github.com/NanoMeow/QuickReports/issues/2859
+@@||mediadebrid34.site/ads1/css/*$css,1p
+
+! ilmeteo .it broken video
+@@||4strokemedia.com^$xhr,script,domain=ilmeteo.it
+||imasdk.googleapis.com/js/sdkloader/ima3.js^$script,redirect-rule=noopjs,domain=ilmeteo.it
+
+! https://github.com/NanoMeow/QuickReports/issues/2923
+dziennikbaltycki.pl,dzienniklodzki.pl,dziennikpolski24.pl,dziennikzachodni.pl,echodnia.eu,expressbydgoski.pl,expressilustrowany.pl,gazetakrakowska.pl,gazetalubuska.pl,gazetawroclawska.pl,gk24.pl,gloswielkopolski.pl,gol24.pl,gp24.pl,gra.pl,gs24.pl,kurierlubelski.pl,motofakty.pl,naszemiasto.pl,nowiny24.pl,nowosci.com.pl,nto.pl,polskatimes.pl,pomorska.pl,poranny.pl,sportowy24.pl,strefaagro.pl,strefabiznesu.pl,stronakobiet.pl,telemagazyn.pl,to.com.pl,wspolczesna.pl#@#+js(set-constant, pp_adblock_is_off, trueFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/6924
+||px.moatads.com/pixel.gif$image,domain=abcya.com,redirect-rule=1x1.gif
+
+! netaffiliation .com Peter Lowe's
+||metaffiliation.com^$badfilter
+||metaffiliation.com^$3p,domain=~netaffiliation.com
+||netaffiliation.com^$badfilter
+||netaffiliation.com^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/254#issuecomment-583161266
+@@||jssdkcdns.mparticle.com/js/*/mparticle.js$script,domain=nbc.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2990
+@@||gamepciso.com/wp-content/plugins/*/wpdcookiejs/customcookie.js$script,1p
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/455#issuecomment-585289023
+@@||sourcepoint.mgr.consensu.org/$xhr,domain=spiegel.de
+
+! https://www.reddit.com/r/uBlockOrigin/comments/f2n92g/pornhub_stuck_forever_loading_video_only_when/
+@@||gstatic.com^$script,domain=pornhub.com|pornhub.org|pornhub.net
+
+! https://github.com/NanoMeow/QuickReports/issues/3053
+@@||unifi.com.my/*/gtm.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/6957
+||fox43.com/assets/js-libs/comscore/comscore.min.js$script,redirect=noop.js,1p
+
+! https://forums.lanik.us/viewtopic.php?p=153022#p153022
+@@||qualifioapp.com^$script,frame,domain=football365.fr
+
+! https://github.com/uBlockOrigin/uAssets/issues/6970
+||5newsonline.com/assets/*/comscore.min.js$script,1p,redirect=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/6990
+||blockadblock.com^$badfilter
+||blockadblock.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/7003
+@@||try.abtasty.com/$script,domain=shop.euromaster.de
+@@||google-analytics.com/analytics.js$script,domain=shop.euromaster.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/7004
+@@||redfin.com/rift$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/7005
+! https://github.com/uBlockOrigin/uAssets/issues/7012#issuecomment-592815205
+||cedexis.com^$3p,badfilter
+
+! Conversation broken allthingsvegas .com
+@@||pix.spot.im/api/$xhr,domain=allthingsvegas.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7019
+amnews.com###div-gpt-ad-instory-bottom
+
+! https://www.reddit.com/r/uBlockOrigin/comments/fac407/airtelin_login_broken_with_default_list/
+@@||adobedtm.com^*/satellitelib-$script,domain=airtel.in
+
+! bz-berlin.de broken video player
+@@||showheroes.com/playlist/*$xhr,domain=bz-berlin.de
+@@||static.showheroes.com^$script,domain=bz-berlin.de
+@@||video-library.showheroes.com^$script,domain=bz-berlin.de
+
+! https://www.reddit.com/r/uBlockOrigin/comments/faqspo/ublock_breaks_the_site/
+@@||firestonecompleteautocare.com/*/VisitorAPI.js$script,1p
+
+! https://github.com/easylist/easylist/issues/5013
+@@||piwik.discoursehosting.net^$domain=forum.matomo.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/7001
+||spade.sci.twitch.tv^$badfilter
+||spade.sci.twitch.tv^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/7030
+||ntv.io^$badfilter
+||ntv.io^$3p,badfilter
+||ntv.io^$3p,domain=~teslarati.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7036
+@@||modules-prod.franklyinc.com/cml.js$script,domain=news9.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7038
+@@||nbc29.com/*/arcAdsJS/$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/3214
+@@||cloudfront.net/wp-content/themes/visualdna-com/*$css,domain=visualdna.com
+
+! https://github.com/NanoMeow/QuickReports/issues/3218
+@@||googletagmanager.com/gtm.js$script,domain=vier.be
+
+! https://www.reddit.com/r/uBlockOrigin/comments/fextvk/ublock_blocking_moosend_web_form/
+@@||cdn.stat-track.com/statics/moosend-tracking.min.js$script,domain=miranpeterman.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ff20to/currently_having_an_issue_with_uniquestreamnet/
+@@||wpfc.ml/b.gif$image,domain=uniquestream.net
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ew4m1h/
+! https://www.reddit.com/r/uBlockOrigin/comments/worqwb/
+@@||bamgrid.com^$domain=disneyplus.com|starplus.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/fftyuf/annoying_message_in_portuguese_sites/
+@@||googletagservices.com/tag/js/gpt.js$script,domain=abola.pt
+@@||securepubads.g.doubleclick.net/gpt/pubads_impl$script,domain=abola.pt
+@@||tpc.googlesyndication.com/safeframe/*/container.html$other,domain=abola.pt
+@@||securepubads.g.doubleclick.net/gampad/$xhr,domain=abola.pt
+! broken slide
+@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,domain=jn.pt|ojogo.pt|plataformamedia.com
+@@||securepubads.g.doubleclick.net/gpt/pubads_impl$script,domain=jn.pt|ojogo.pt|plataformamedia.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7092
+@@||pingjs.qq.com/h5/stats.js$script,domain=ushareit.com
+
+! https://forums.lanik.us/viewtopic.php?p=153533#p153533
+@@||coral.coralproject.net^
+
+! https://github.com/NanoMeow/QuickReports/issues/3319
+@@||ak.sail-horizon.com/spm/spm$script,domain=cnbc.com
+
+! https://github.com/NanoMeow/QuickReports/issues/3362
+examiner.com.au,theadvocate.com.au,thecourier.com.au##.subscriber-hider:style(display:inherit!important)
+examiner.com.au,theadvocate.com.au,thecourier.com.au##.subscribe-truncate::before:style(background:none!important)
+examiner.com.au,theadvocate.com.au,thecourier.com.au##.subscribe-truncate:style(order:0!important;max-height:inherit!important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7140
+||widgets.outbrain.com/outbrain.js$script,redirect=noopjs,domain=newsbreak.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7125
+@@||images.digi.com.my/*/google_tag/*$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/7156
+||widgets.outbrain.com/outbrain.js$script,redirect=noopjs,domain=bongino.com
+
+! https://www.mariogames.be/es-Super_Bomberman_5_Snes_Game
+mariogames.be#@##adsContainer
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=mariogames.be
+
+! elpais.com
+@@||epimg.net^$image,domain=elpais.com
+@@||epimg.net/js/comun/comun.min.js$script,domain=elpais.com
+@@||epimg.net/js/comun/*/lazyload.min.js$script,domain=elpais.com
+
+! https://github.com/NanoMeow/QuickReports/issues/3367#issuecomment-604698224
+||static.adsafeprotected.com/vans-adapter-google-ima.js$script,redirect=noopjs,domain=forbes.com
+
+! https://forums.lanik.us/viewtopic.php?p=153771#p153771
+pornhub.com#@#a[href^="https://www.moscarossa.biz/"]
+torino2006.it#@#a[href^="https://www.moscarossa.biz/"]
+recensionihot.com#@#a[href^="https://www.moscarossa.biz/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/7165
+@@||inside-graph.com^$domain=bergdorfgoodman.com|horchow.com|lastcall.com|neimanmarcus.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7166
+@@||bounceexchange.com^$domain=thelaundress.com
+
+! animeland .us download buttom broken
+@@||animeland.us^$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/7173
+@@||cdn.broadstreetads.com/init-*min.js$script,domain=vtdigger.org
+
+! https://www.reddit.com/r/uBlockOrigin/comments/fro2n2/captcha_does_not_load_in_kissanimeru/fm0h3pd/?context=8&depth=9
+@@||hcaptcha.com/captcha/$xhr
+
+! CNAME akinator .com
+@@||akinator.com.cdn.ezoic.net^$css,font,image,script,domain=akinator.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ftmipe/help/
+||onemanhua.com/js/dynamicjs.js$badfilter
+
+! nascar .com videos broken
+! https://www.reddit.com/r/uBlockOrigin/comments/10ir17a/
+@@||nascar.com^$xhr,domain=imsa.com|nascar.com
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=imsa.com,redirect-rule=google-ima.js
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=nascar.com
+@@||moatads.com/nascar$script,domain=nascar.com
+@@||mb.moatads.com^$script,domain=nascar.com
+@@||nascar.com/tagmanager/*/prod/advertising-tags.js$script,1p
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=44525
+||allporncomic.com^*=$script,badfilter
+
+! https://www.reddit.com/r/uBlockOrigin/comments/fvdiij/ublockorigin_blocking_a_site_we_own/
+@@||js.maxmind.com/js/apis/geoip2/*/geoip2.js$script,domain=12handz.com
+
+! https://github.com/NanoMeow/QuickReports/issues/3448
+@@||downdetector.com/*/javascript/adscript.js$script
+@@||static.ziffdavis.com/sitenotice/evidon-barrier.js$script,domain=allestoringen.*|downdetector.*|xn--allestrungen-9ib.*
+@@||static.ziffdavis.com/sitenotice/*/translations/$script,domain=allestoringen.*|downdetector.*|xn--allestrungen-9ib.*
+! https://github.com/uBlockOrigin/uAssets/issues/8974
+@@||securepubads.g.doubleclick.net/gpt/pubads_$script,domain=allestoringen.*|downdetector.*|xn--allestrungen-9ib.*
+
+! https://forums.lanik.us/viewtopic.php?p=154035#p154035
+@@||imasdk.googleapis.com/js/sdkloader/ima3$script,domain=vmf.edge-apps.net
+@@||iframe.statics.space/magma/stable/libs/contribAds/*/videojs.ads.min.js$script,domain=vmf.edge-apps.net
+
+! https://forums.lanik.us/viewtopic.php?p=154046#p154046
+! CNAME
+@@||youtube-ui.l.google.com^$frame
+@@||edgecastcdn.net^$script,frame
+@@||twimg.twitter.map.fastly.net^$script
+
+! https://github.com/NanoMeow/QuickReports/issues/418#issuecomment-612550068
+*$image,css,3p,xhr,domain=thepiratebay.org,badfilter
+*$xhr,domain=thepiratebay.org,badfilter
+
+! CNAME https://www.reddit.com/r/uBlockOrigin/comments/fzzua6/no_subtitle_on_uptostream_with_firefox/
+@@||uptobox.com^$xhr,domain=uptostream.com
+
+! CNAME https://github.com/NanoMeow/QuickReports/issues/3028#issuecomment-613626867
+@@||sp-prod.net^$script,xhr,domain=spiegel.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/2503
+@@||hulkshare.com/combine/*$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/3580
+@@||assets.adobedtm.com/*/satelliteLib-$script,domain=mitelcel.com
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/480
+|https://$frame,3p,domain=series9.to,badfilter
+
+! CNAME https://github.com/uBlockOrigin/uAssets/issues/7264
+@@||pxys.ezoic.net^$font,domain=forum.thaivisa.com
+
+! https://github.com/easylist/easylist/issues/5214
+||techsidea.website^$popup,badfilter
+||onlineshopping.website^$popup,3p,badfilter
+
+! https://github.com/NanoMeow/QuickReports/issues/3636
+@@||quiz.stroeermediabrands.de/$script,xhr,domain=kino.de
+
+! https://mod.reddit.com/mail/all/djas6
+@@||geo-targetly.com/geolocation$3p,script,domain=stache.com
+
+! trafic .ro blocked Peter Lowe's
+||trafic.ro^$badfilter
+||trafic.ro^$3p
+
+! https://github.com/NanoMeow/QuickReports/issues/3632#issuecomment-621503457
+|https://$script,3p,domain=thepiratebay.org,badfilter
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/54684
+*$script,3p,domain=animepahe.com,badfilter
+
+! https://www.reddit.com/r/uBlockOrigin/comments/gbends/search_result_blocked_by_easylist_filter/
+@@||google.*/search$popup
+
+! https://github.com/NanoMeow/QuickReports/issues/3720
+*$script,3p,domain=putlockertv.to,badfilter
+
+! https://github.com/NanoMeow/QuickReports/issues/2590#issuecomment-622422589
+@@||js.duhnet.tv/*/player/html5/$script,domain=cnnturk.com
+
+! https://github.com/NanoMeow/QuickReports/issues/2130#issuecomment-622965678
+@@||scdn.co/cdn/js/gtag.$script,domain=spotify.com
+@@||spclient.wg.spotify.com/$xhr,domain=spotify.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7306
+||d26b395fwzu5fz.cloudfront.net/keen-tracking-$script,redirect=noopjs,domain=campaign.stickr.co
+
+! https://github.com/NanoMeow/QuickReports/issues/3749
+||valuecommerce.com^$badfilter
+||valuecommerce.com^$3p
+
+! unbreak asianclub player
+@@||asianclub.*/asset/default/player/plugins/vast$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/3763
+wallpaperaccess.com#@#.ads1
+wallpaperaccess.com##+js(nano-sib)
+
+! https://forums.lanik.us/viewtopic.php?p=154477#p154477
+@@||svc.dynamics.com^*t/$frame
+||svc.dynamics.com/f/m/
+
+! https://github.com/NanoMeow/QuickReports/issues/3613#issuecomment-624193788
+washingtonpost.com#@#.pb-md.pt-md
+
+! https://www.reddit.com/r/uBlockOrigin/comments/gen8cr/ublock_causing_some_webpages_to_load_blank_on/
+order-order.com#@#.tag-sponsored
+
+! broken by french list https://github.com/uBlockOrigin/uAssets/issues/6851#issuecomment-626328180
+*$frame,3p,domain=vidcloud9.com,badfilter
+
+! unbreak clipwatching player on firefox
+!#if env_firefox
+@@*$csp=worker-src 'none',domain=clipwatching.com
+!#endif
+
+! CNAME broken video pornerbros .com
+@@||amazonaws.com^$xhr,domain=pornerbros.com
+
+! femmeactuelle .fr broken videos
+@@||tra.scds.pmdstatic.net/advertising-core/$script,xhr,domain=femmeactuelle.fr
+
+! moondoge.co.in unbreak timer
+@@||moondoge.co.in/js/fingerprint2.js$script,1p
+
+! unbreak cartoonth12.com player
+*$script,3p,domain=cartoonth12.com,badfilter
+
+! amazon_apstag.js
+||amazon-adsystem.com/*/apstag.js$script,xhr,redirect-rule=amazon_apstag.js:5
+
+! https://github.com/uBlockOrigin/uAssets/issues/7397
+@@||reference.medscape.com/public/vptrack_iframe.html$frame,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/7399
+*$script,image,css,frame,3p,domain=animetrick.com,badfilter
+
+! unblock treasuredata .com home page
+||treasuredata.com^$badfilter
+||treasuredata.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/7424
+@@||log.mmstat.com/eg.js$script,domain=youku.com
+! https://github.com/AdguardTeam/AdguardFilters/issues/153515
+@@||ws.mmstat.com/ws$websocket,domain=v.youku.tv
+
+! https://github.com/uBlockOrigin/uAssets/issues/7429
+@@||insights-collector.newrelic.com/*/events$xhr,domain=diariosur.es|diariovasco.com|elcorreo.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7432
+||sibautomation.com^$frame,redirect=noopframe
+
+! https://github.com/uBlockOrigin/uAssets/issues/7435
+@@||api.ipstack.com/*access_key=$xhr,domain=acehardware.com
+
+! https://github.com/NanoMeow/QuickReports/issues/3892
+@@||c.s-microsoft.com/mscc/statics/*$css,domain=microsoft.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7438
+@@||pier1.com/static/*/js/analytics.bundle.js$script,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/1659
+||streamplay.*/jquery-$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/7439
+*$image,redirect-rule=1x1.gif,domain=play.cadenaser.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/fini9h/subtitles_not_showing_up_on_solarmovieto/
+@@||fmovies.to/subtitles/*$xhr
+
+! https://github.com/NanoMeow/QuickReports/issues/3925
+@@||googletagmanager.com/gtm.js$script,domain=movistar.es
+
+! https://github.com/uBlockOrigin/uAssets/issues/7454
+! https://github.com/uBlockOrigin/uAssets/issues/13156
+! cb2.com, balance.vanillagift.com
+@@||ssl.kaptcha.com/collect/sdk$script,xhr
+
+! https://github.com/uBlockOrigin/uAssets/issues/7456
+@@-ad0.$domain=azure.com
+@@-ad1.$domain=azure.com
+@@-ad2.$domain=azure.com
+@@-ad3.$domain=azure.com
+@@-ad4.$domain=azure.com
+@@-ad5.$domain=azure.com
+
+! https://github.com/NanoMeow/QuickReports/issues/3943
+@@||wcs.naver.net/wcslog.js$script,domain=happymoney.co.kr
+
+! https://github.com/uBlockOrigin/uAssets/issues/7467
+*$script,redirect-rule=noopjs,domain=corriere.it
+
+! https://github.com/NanoMeow/QuickReports/issues/3970
+||cdn.parsely.com/keys/nfl.com/p.js$script,important,redirect=noop.js,domain=nfl.com
+
+! https://forums.lanik.us/viewtopic.php?p=154888#p154888
+*$popup,domain=uptobox.com,badfilter
+
+! CNAME https://forums.lanik.us/viewtopic.php?p=154928#p154928
+@@||sdv.fr^$script,domain=ladepeche.fr
+
+! https://forums.lanik.us/viewtopic.php?p=154953#p154953
+*$script,3p,domain=zt-za.com,badfilter
+*$frame,3p,domain=zt-za.com,badfilter
+*$script,3p,domain=zt-protect.com,badfilter
+*$script,3p,domain=zt-protect.net,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/7509
+@@||www.googletagmanager.com/gtm.js$script,domain=vw-sklep.pl
+
+! https://www.reddit.com/r/uBlockOrigin/comments/gwouix/how_to_get_around_sites_hiding_relevant_content/
+getcoloringpages.com#@#.adsBlock
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/56799
+*$script,redirect-rule=noopjs,domain=hopkinssports.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/gx03e0/cloudfares_ddos_protection/
+/transparent.gif?ray=$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/6838
+||crazyegg.com^$badfilter
+||crazyegg.com^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/gy800s/larenait_videos_are_broken/
+@@||media.larena.it/media/lib/cmp/quantcast.js$script,1p
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=larena.it
+*$script,domain=larena.it,redirect-rule=noopjs
+
+! unblock items on wotcheatmods
+*$css,3p,domain=wotcheatmods.com,badfilter
+*$script,3p,domain=wotcheatmods.com,badfilter
+*$image,3p,domain=wotcheatmods.com,badfilter
+
+! https://github.com/NanoMeow/QuickReports/issues/4078
+@@||api.useinsider.com^$domain=lenovo.com
+@@||image.useinsider.com/lenovosg/$image,domain=lenovo.com
+@@||inside-graph.com^$domain=lenovo.com
+@@||confirmit.com/api/$domain=lenovo.com
+
+! https://github.com/NanoMeow/QuickReports/issues/3663#issuecomment-643001491
+||opensubtitles.org^*.js|$script,domain=opensubtitles.org,badfilter
+
+! cutcaptcha.com|filecrypt.* CNAME
+@@||bullads.net^$script,frame,xhr,domain=filecrypt.co|cutcaptcha.com|filecrypt.cc
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/57295
+@@||static.motortrader.com.my/advert/$image,domain=motortrader.com.my
+
+! https://www.wilderssecurity.com/threads/ublock-a-lean-and-fast-blocker.365273/page-180#post-2922999
+@@||choice.faktor.io^$frame,script,xhr,domain=gids.tv
+
+! alidns.com CNAME
+@@||alibaba.tanx.com^$domain=alidns.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/h8xspv/adobedtm_static_filter_breaks_page_functionality/
+@@||adobedtm.com^*/satellitelib-$script,domain=finishlibrary.steelcase.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/hap1nl/kimcartoonto_beta_2_server/
+|https://$xhr,3p,domain=kimcartoon.to,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/7569
+@@||mensjournal.com.cdn.ezoic.net^$domain=mensjournal.com
+
+! youthhealthmag broken search
+|https://$script,3p,domain=youthhealthmag.com,badfilter
+
+! vcpost broken search
+|https://$script,3p,domain=vcpost.com,badfilter
+
+! universityherald broken search
+|https://$script,3p,domain=universityherald.com,badfilter
+
+! vix .com broken page
+@@||cdn.taboola.com/libtrc/$script,domain=vix.com
+
+! https://github.com/NanoMeow/QuickReports/issues/4172
+.net/ads/$badfilter
+
+! https://github.com/NanoMeow/QuickReports/issues/2057
+nfmovies.com#@#+js(aopr, $myui)
+@@||nfmovies.com/static/side.jpg$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/4636#issuecomment-648915041
+|https://$xhr,3p,domain=cloudvideo.tv,badfilter
+|https://$css,3p,domain=cloudvideo.tv,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/7330#issuecomment-649186403
+@@||cdn.plyr.io/*/plyr.svg$xhr,domain=mp4upload.com
+
+! https://github.com/NanoMeow/QuickReports/issues/4192
+arthromed.de#@##ad_3
+
+! broken video on cookinggames .com
+@@||bitent.com/lock_html5/adPlayer/v*/adPlayer.js$script,domain=cookinggames.com
+
+! unbreak saltspringexchange .com
+saltspringexchange.com#@#.single-ad
+
+! broken videos youav .com
+*$script,3p,domain=youav.com,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/7614
+@@||wp.com/*/wp-content/plugins/master-slider/public/assets/css/blank.gif$image,domain=hearthstone-decks.net
+
+! aupetitparieur .com videos broken
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=aupetitparieur.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7623
+@@||pxys.ezoic.net^$domain=lanaciondigital.es
+
+! themeslide .com broken
+*$xhr,redirect-rule=noopjs,domain=themeslide.com
+
+! https://github.com/NanoMeow/QuickReports/issues/4290
+@@||front.usereserva.com/libraries/*/GTM.min.js$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/hp7cm8/
+@@||fhi.no^$cname
+
+! https://github.com/uBlockOrigin/uAssets/issues/7664
+||logsss.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/7666
+@@||google.*^$cname
+
+! https://forums.lanik.us/viewtopic.php?f=62&t=44917
+/ads1.$badfilter
+
+! broken video player https://www.gmx.net/magazine/sport/fussball/bundesliga/transfermarkt-2020-bundesliga-coronakrise-euro-zweimal-umdrehen-34888082
+@@||fluid.4strokemedia.com/www/delivery/asyncspc.php$xhr,1p
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=4strokemedia.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7676
+@@||cand.li/api/assets/$xhr,1p
+
+! https://forums.lanik.us/viewtopic.php?p=155737#p155737
+@@||cravitus.*/api/adverts/*$xhr,domain=cravitus.com|cravitus.lt
+
+! broken videos on pornhive .tv => videobin .co/embed
+*$frame,3p,domain=pornhive.tv,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/7686
+@@||s0.2mdn.net/ads/studio/Enabler.js$script,domain=kabum.com.br
+
+! https://github.com/NanoMeow/QuickReports/issues/2472
+@@||couponcabin.com/ga.*.js$1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/7695
+||slickdeals.net/scripts/*/js-campaign-tracking.js$script,1p,redirect=noop.js
+||slickdeals.net/scripts/*/SD_Analytics.js$script,1p,redirect=noop.js
+
+! https://github.com/NanoMeow/QuickReports/issues/4376
+! https://github.com/uBlockOrigin/uAssets/issues/16861
+@@||ezodn.com/detroitchicago/$script
+@@||ezodn.com/detroitchicago/consentsettings.js
+@@||ezodn.com/cmp/v2/cmp.js$script
+@@||gvl.ezodn.com/gvlcache/GVL.json$xhr
+@@||ezodn.com/v2/cmp.js$script
+! https://github.com/uBlockOrigin/uAssets/issues/22051
+##.ez-sidebar-wall
+
+! https://forums.lanik.us/viewtopic.php?p=155897#p155897
+@@||xozilla.com^$cname
+
+! https://forums.lanik.us/viewtopic.php?p=155908#p155908
+||cxense.com^$badfilter
+||cxense.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/7700
+@@||api.ipstack.com/check?access_key=$xhr
+||ipstack.com^$badfilter
+
+! sedoparking .com unbreak
+||sedoparking.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/7706
+verizon.com##+js(set, newPageViewSpeedtest, noopFunc)
+! Verizon chat broken (https://www.verizon.com/support/contact-us/)
+
+! unlock disqus stuff
+*$script,3p,domain=hentaihaven.org,badfilter
+
+! https://github.com/NanoMeow/QuickReports/issues/4430#issuecomment-667551461
+humanbenchmark.com##+js(set, pubg.unload, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7719
+@@||t8cdn.com/js/lazyload.min.js$script,domain=tube8.*
+
+! moviesweb .info thunbs + player broken
+|https://$frame,3p,domain=moviesweb.info,badfilter
+|https://$image,3p,domain=moviesweb.info,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/7723
+@@||message-fra.sp-prod.net^$script,xhr,domain=manager-magazin.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/7728
+||doubleclick.net/tag/js/gpt.js$script,redirect-rule=googletagservices_gpt.js,domain=aristeguinoticias.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/i3nd76/cant_get_site_to_show_video/
+@@||news12.com^$frame,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/4462
+! https://www.reddit.com/r/uBlockOrigin/comments/j2y8on/
+@@||treg.hearstnp.com/treg.js$script,domain=sfchronicle.com|sfgate.com
+
+! https://github.com/NanoMeow/QuickReports/issues/4465
+politico.com##+js(set, generateGalleryAd, noopFunc)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/9hy3s7/mlb_standings_not_working/
+! https://github.com/NanoMeow/QuickReports/issues/810
+! https://github.com/uBlockOrigin/uAssets/issues/6503
+||googlevideo.com^$media,redirect=noopmp4-1s,domain=mlb.com
+
+! CNAME science-et-vie .com broken by some "clever" regex in liste fr (imported by adguard fr)
+@@||science-et-vie.com^$cname
+
+! https://github.com/NanoMeow/QuickReports/issues/4478
+@@||assets.adobedtm.com^*/mbox-contents-$script,domain=nsat.collegeboard.org
+
+! https://github.com/NanoMeow/QuickReports/issues/4253
+hubblespacetelescope.blogspot.com#@#.vertical-ads
+
+! tegna sites broken by -tracking.js? in EasyPrviacy
+*/tegna-tracking.js$script,important,1p,redirect=noop.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/7770
+@@||ogjs.infoglobo.com.br/*/scripts/templates/advertising/$script,domain=oglobo.globo.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7778
+@@||cdn.dynamicyield.com/api/$script,domain=washingtonexaminer.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7781
+!#if env_chromium
+@@||subaru.com/guides/*/libs/adobe/AppMeasurement.js$script,1p
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/7784
+@@||track.rundschau-online.de/cre-1.0/tracking/$script,1p
+@@||track.rundschau-online.de/*/static/jssdk.js$script,1p
+@@||track.rundschau-online.de/*/api/$xhr,1p
+
+! https://github.com/NanoMeow/QuickReports/issues/4540
+officedepot.co.cr##+js(set, mediator, noopFunc)
+officedepot.co.cr##+js(set, Object.prototype.subscribe, noopFunc)
+! https://github.com/uBlockOrigin/uAssets/issues/20525
+||groupbycloud.com/gb-tracker-client-3.min.js$domain=officedepot.co.cr,important
+officedepot.co.cr##+js(set, gbTracker, {})
+officedepot.co.cr##+js(set, gbTracker.sendAutoSearchEvent, noopFunc)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ifvbor/
+!#if env_firefox
+||circularhub.com^$3p,badfilter
+!#endif
+
+! https://mod.reddit.com/mail/all/ghxid
+@@||static.wellsfargo.com/tracking/main/utag.js^$script,domain=wellsfargo.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7834
+@@||cdn-net.com/cc.js$script,domain=showroomprive.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7856
+eslint.org#@#.sponsor-link
+
+! https://github.com/uBlockOrigin/uAssets/issues/2381#issuecomment-685824829
+|https://$xhr,3p,domain=zippyshare.com,badfilter
+
+! CNAME https://github.com/uBlockOrigin/uAssets/issues/7872
+@@||privacy-mgmt.com^$script,domain=n-tv.de
+
+! cname https://github.com/uBlockOrigin/uAssets/issues/7589#issuecomment-687312936
+@@||privacy-mgmt.com^$script,domain=chip.de
+! https://github.com/uBlockOrigin/uAssets/issues/18763
+praxistipps.chip.de#@#a[target][href^="https://x.chip.de/"]:upward(div[id])
+
+! https://www.yogajournal.com/video broken videos
+@@||uid.mavencoalition.io^$xhr,domain=yogajournal.com
+
+! cname => bild .de tweet blocked => https://www.bild. de/digital/smartphone-und-tablet/handy-und-telefon/apple-laedt-ein-iphone-12-wird-am-15-september-vorgestellt-72806876.bild.html
+@@||privacy-mgmt.com^$script,domain=bild.de
+
+! https://github.com/NanoMeow/QuickReports/issues/4669
+@@||arthromed.de^$ghide
+@@||arthromed.de/fileadmin/*$image,1p
+@@||maps.googleapis.com/maps/api/*$image,domain=arthromed.de
+
+! https://www.bz-berlin.de/video broken video
+@@||sp-prod.net/wrapperMessagingWithoutDetection.js$script,domain=bz-berlin.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/7896
+!#if env_mobile
+@@||tags.crwdcntrl.net^*/cc_af_ajax.js$script,domain=pigeons.biz
+!#endif
+
+! https://www.reddit.com/r/uBlockOrigin/comments/iqa1xn/ublock_is_blocking_the_disqus_button_on_sport1de/
+@@||sp-prod.net^$xhr,domain=sport1.de
+
+! unbreak emedemujer.com images
+@@||emedemujer.com/wp-content/plugins/dfp-ads/assets/js/google-ads.min.js$script,1p
+
+! cname handelsblatt .com broken
+@@||privacy-mgmt.com^$script,domain=handelsblatt.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7922
+@@||geo.leadboxer.com/GeoIpEngine/$script,domain=opentracker.net
+
+! https://github.com/NanoMeow/QuickReports/issues/4498#issuecomment-694559797
+||doubleclick.net/tag/js/gpt.js$script,redirect-rule=googletagservices_gpt.js,domain=usnews.com
+usnews.com##+js(set, Object.prototype.vjsPlayer.ads, noopFunc)
+
+! cname https://github.com/uBlockOrigin/uAssets/issues/7928
+! https://github.com/NanoMeow/QuickReports/issues/4738
+! https://github.com/uBlockOrigin/uAssets/issues/6541#issuecomment-699550913
+! https://github.com/uBlockOrigin/uAssets/issues/7971
+@@||privacy-mgmt.com^$script,domain=faz.net|focus.de|golem.de|stern.de
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ivsm1o/blocking_vistaprint_customisation/
+@@||promotique.com.au^*/Common/ga.js$script,1p
+
+! unbreak push home page vendigamus .com
+||vendigamus.com^$badfilter
+||vendigamus.com^$3p
+
+! pornvibe .org some videos broken blocking https://ssl.p.jwpcdn.com/6/12/jwplayer.js
+*$script,3p,domain=pornvibe.org,badfilter
+
+! sun-sentinel .com today's top videos broken
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=sun-sentinel.com
+
+! slide show broken https://www.floridatravellife.com/gallery/historic-snapshots-of-baseball-heroes-spring-training-in-florida/
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=floridatravellife.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7938
+@@||open.spotify.com^$cname
+
+! https://github.com/uBlockOrigin/uAssets/issues/7951
+@@||itorrents.org/torrent/$popup
+@@||torrage.info/download$popup
+
+! https://github.com/uBlockOrigin/uAssets/issues/7955
+@@||d28julafmv4ekl.cloudfront.net/*.mp3?$media,domain=imdb.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7961
+@@||googletagmanager.com/gtm.js$script,domain=lavanguardia.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/4636#issuecomment-699869544
+|https://$script,3p,domain=cloudvideo.tv,badfilter
+
+! meilleurpronostic .fr video broken
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=meilleurpronostic.fr
+
+! imagefap unbreaking videos
+|https://$xhr,3p,domain=imagefap.com,badfilter
+
+! comments broken lequipe .fr
+@@||lequipe.fr^$cname
+! https://www.reddit.com/r/uBlockOrigin/comments/12geigq/
+! https://www.lequipe.fr/tv/videos/live/k6oih7JyuEmhrnqwBZT video breakage
+||lequipe.fr/*/prebid.js$redirect-rule=noopjs
+
+! https://github.com/NanoMeow/QuickReports/issues/4773
+@@||universal-sci.com/detroitchicago/minneapolis.js$script,1p
+@@||universal-sci.com/detroitchicago/rochester.js$script,1p
+@@||ssl.google-analytics.com/ga.js$script,domain=universal-sci.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7980
+||exs.pl/embed*.php$script,domain=~wgospodarce.pl|~szczecinek.com|~polityka.pl|~ototorun.pl|~natemat.pl|~plonszczak.pl,badfilter
+||exs.pl/embed*.php$script,domain=~wgospodarce.pl|~szczecinek.com|~polityka.pl|~ototorun.pl|~natemat.pl|~plonszczak.pl|~24jgora.pl|~24wroclaw.pl|~brodnica-cbr.pl|~ciechanowinaczej.pl|~ddb24.pl|~e-wyszogrod.pl|~egarwolin.pl|~egorzow.pl|~ekspresjaroslawski.pl|~eprzasnysz.pl|~esiemiatycze.pl|~fakty.bialystok.pl|~galopuje.pl|~golub-cgd.pl|~gpr24.pl|~ibialoleka.pl|~ibielsk.pl|~ikampinos.pl|~imokotow.pl|~inowroclaw.info.pl|~iochota.pl|~iotwock.pl|~ipragapoludnie.pl|~iskierniewice.pl|~itvpiaseczno.pl|~izabelin24.pl|~izoliborz.pl|~izyrardow.pl|~kurierbytowski.com.pl|~kurierpodlaski.pl|~lipno-cli.pl|~lowicz24.eu|~mylomza.pl|~nolesnica.pl|~nowinynyskie.com.pl|~nswiecie.pl|~nwloclawek.pl|~olawa24.pl|~poluje.pl|~pultusk24.pl|~rypin-cry.pl|~sejny.net|~splendo.pl|~tp.com.pl|~tulegnica.pl|~twojradom.pl|~wabrzezno.pl|~wideoportal.tv|~wio.waw.pl|~wterenie.pl|~zambrow.org|~zlotowskie.pl|~zycie.pila.pl|~zyciekalisza.pl
+
+! https://github.com/uBlockOrigin/uAssets/issues/8015
+@@||ziyu.net^$domain=tenki-yoho.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/8018
+@@||ing.pl^$cname
+
+! cname https://github.com/NanoMeow/QuickReports/issues/4824
+@@||privacy-mgmt.com^$script,domain=wunderweib.de
+
+! CNAME https://github.com/uBlockOrigin/uAssets/issues/8033
+@@||privacy-mgmt.com^$script,domain=praxisvita.de
+
+! https://www.reddit.com/r/neopets/comments/jaqza5/
+@@||cdn.playwire.com/bolt/js/zeus/embed.js$script,domain=neopets.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/8036
+@@||lubin.pl^$cname
+
+! https://github.com/uBlockOrigin/uAssets/issues/8040
+@@||ze.tt/wp-content/plugins/zett-cmp/dist/sourcepoint.js$script,1p
+@@||sp-prod.net/wrapperMessagingWithoutDetection.js$script,domain=ze.tt
+
+! https://github.com/uBlockOrigin/uAssets/issues/6541#issuecomment-711043998
+! https://www.spieletipps.de/artikel/10555/1/ broken video
+@@||cdn.privacy-mgmt.com/wrapperMessagingWithoutDetection.js$script,domain=giga.de|spieletipps.de
+
+! thehockeywriters.com broken images
+@@||ezojs.com/detroitchicago/cmbv2.js$script,domain=thehockeywriters.com
+
+! https://ads.spotify.com/en-US/culture-next/the-2020-report/ blank page
+@@||google-analytics.com/analytics.js$script,domain=ads.spotify.com
+
+! https://www.fox.com/watch/bdb5db80949b2226d9caa10c08dc1032/ broken video
+@@||link.theplatform.com/*/media/*?affiliate=$xhr,domain=fox.com
+
+! CNAME broken site https://www.netzwelt.de/
+@@||privacy-mgmt.com^$script,domain=cmp.netzwelt.de
+! https://www.netzwelt.de/news/179120-ps5-vorbestellen-kaufen-haendler-shops-ladung.html broken video
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$domain=netzwelt.de
+
+! https://forums.lanik.us/viewtopic.php?p=157232#p157232
+hwupgrade.it#@#.wrapper-xyz
+
+! https://github.com/uBlockOrigin/uAssets/issues/8115
+@@||das-bumerang-projekt.de/*/boomerang.js$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/66801
+@@||serviceyock.me/api/advertise/$xhr,domain=yock.games
+
+! https://github.com/uBlockOrigin/uAssets/issues/8141
+@@||omggamer.com/detroitchicago/dayton.js$script,1p
+
+! lebigdata .fr, objetconnecte .net broken by detroitchicago filter
+@@||lebigdata.fr/detroitchicago/$script,1p
+lebigdata.fr##.background-cover
+||lebigdata.fr/wp-content/uploads/*/cote.png$image
+@@||objetconnecte.net/detroitchicago/dayton.js$script,1p
+
+! https://github.com/NanoAdblocker/NanoFilters/issues/432
+||bde4.com^$csp=script-src 'self' * 'unsafe-inline',badfilter
+||bde4.cc^$csp=script-src 'self' * 'unsafe-inline',badfilter
+
+! https://github.com/easylist/easylist/issues/6360
+@@||javbucks.com^$css,domain=javhd.com
+
+! Image unviewable on Vivaldi
+||otaserve.net^$frame,redirect-rule=noop.html,domain=chan.sankakucomplex.com
+chan.sankakucomplex.com##iframe[src^="//c.otaserve.net"]
+
+! https://www.votespa.com/Voting-in-PA/Pages/Pennsylvania-Voter-Election-Security-Information.aspx# blocked image
+@@||votespa.com/banners/*$image,1p
+
+! https://uktvplay.uktv.co.uk/shows/les-miserables/watch-online - broken player controls
+uktvplay.uktv.co.uk##.video-overlay
+uktvplay.uktv.co.uk##.vjs-ad-control-bar.vjs-control-bar
+
+! https://github.com/uBlockOrigin/uAssets/issues/8200
+store.petvalu.com##.store_locator_loading
+
+! https://forums.lanik.us/viewtopic.php?f=91&p=157553#p157553
+@@||caradisiac.com^$cname
+
+! animepahe broken images
+@@||animepahe.com^$cname
+
+! https://github.com/uBlockOrigin/uAssets/issues/8230
+hero-magazine.com###header:style(position: inherit !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8250
+!#if env_firefox
+@@||googlesyndication.com/pagead/js/adsbygoogle.js$script,domain=caminogeek.com
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/7766#issuecomment-731743962
+! https://github.com/uBlockOrigin/uAssets/issues/20569
+@@||ads.adthrive.com/sites/*/ads.min.js$script,domain=a-z-animals.com|brewerfanatic.com|northsidebaseball.com|pimylifeup.com|twinsdaily.com
+@@||ads.adthrive.com/builds/core/*$script,domain=a-z-animals.com|brewerfanatic.com|northsidebaseball.com|pimylifeup.com|twinsdaily.com
+pimylifeup.com##+js(no-fetch-if, marmalade)
+a-z-animals.com,brewerfanatic.com,northsidebaseball.com,pimylifeup.com,twinsdaily.com#@#.adthrive
+a-z-animals.com,brewerfanatic.com,northsidebaseball.com,twinsdaily.com#@#.adthrive-video-player
+
+! egy.best broken download buttons
+||cdn-static.egybest.*/packed/$badfilter
+
+! https://github.com/easylist/easylist/issues/6536#issuecomment-734950467
+||securepubads.g.doubleclick.net/tag/js/gpt.js$script,important,redirect=noop.js,domain=indy100.com
+
+! broken video => https://www.boysfood. com/free-porn-videos/39188768/perfect-boobs-nia-nacci-in-action
+@@||googleads.github.io/videojs-ima/$css,domain=boysfood.com
+
+! strict-blocked and broken by Peter Lowe's and anti-adb
+||crypto-loot.org^$badfilter
+||crypto-loot.org^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/k7saee/
+@@||ssl-images-amazon.com/*/satelliteLib-$script,domain=audible.*
+
+! unviewable subtitle https://github.com/easylist/easylist/commit/4282a904a8036cf8b7d81247ba910e99ddb063e7
+digg.com##.single-story > header:style(margin-top: 40px !important)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kaarfm/
+@@||news.com.au/*/meta-analytics/$script,1p
+
+! unlock biroads .com
+||biroads.com^$badfilter
+||biroads.com^$3p
+
+! https://www.hessenschau.de/suche/index.nc.html?query=livestream broken livestreams
+@@||sensic.net^$frame,domain=hessenschau.de
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kc5ugq/
+businessinsider.com##+js(nosiif, setInterval)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8371
+autoblog.com###ymm-sub-nav:style(top:0px !important)
+
+! broken page https://www.beppegrillo.it/grilloteca/
+beppegrillo.it#@#a[href^="https://www.amazon."][href*="tag="]
+
+! https://github.com/uBlockOrigin/uAssets/issues/8380
+@@||imasdk.googleapis.com/js/sdkloader/ima3$script,xhr,domain=venn.tv
+
+! https://forums.lanik.us/viewtopic.php?p=157928#p157928
+*$script,3p,domain=coinmarketcap.com,badfilter
+
+! babesxworld site blocked by french list
+*$script,domain=babesxworld.com,badfilter
+
+! https://www.reddit.com/r/uBlockOrigin/comments/knsw09/
+||go.netcraftsmen.com^$1p,frame
+
+! allow sign-in on kitsunekko.net
+@@||apis.google.com/js/platform.js$script,domain=kitsunekko.net
+
+! https://www.gamespot.com/gallery/the-best-movies-and-tv-you-probably-missed-in-2020/2900-3665/ broken images
+@@||cbsistatic.com/*/js/compiled/siteAdsBidBarrel.js$script,domain=gamespot.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71283
+player.tubia.com#@#.companion-ads
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/71428
+researchgate.net##.lite-page__header-navigation--with-ad:style(top: 0 !important;)
+researchgate.net##.research-resources-summary__inner.is-sticky:style(top: 0 !important;)
+
+! darknetdiaries..com cname
+@@||adserver.va3.megaphone.cloud^$media,domain=podigee.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kpl5ty/
+||data.over-blog-kiwi.com^$badfilter
+
+! nydailynews.com TODAY'S TOP NEWS VIDEOS on article pages
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=nydailynews.com
+
+! unbreak the site (Peter Lowe's)
+||mparticle.com^$badfilter
+||mparticle.com^$3p
+
+! https://twitter.com/welcoMattic/status/1348572029444907009
+seazon.fr##+js(no-fetch-if, url:ipapi.co)
+
+! Fix chatbot on https://brave.com/brave-ads/ via Peter Lowes List
+||targeting.api.drift.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/8450
+@@/wp-content/plugins/woocommerce-google-adwords-conversion-tracking-tag/*/admin$1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/8456
+@@||pch.com^$cname
+
+! https://www.reddit.com/r/uBlockOrigin/comments/kwnggu/legitimate_enterprise_website_being_blocked_by/
+@@||microcat-america.superservice.com/content/microcat-dist/js/$script,1p
+
+! https://myaccount.chicagotribune.com/300/home
+||myaccount.chicagotribune.com/assets/scripts/tag-manager/googleTag.js$script,redirect=googletagmanager.com/gtm.js,important
+
+! temporary fix https://forums.lanik.us/viewtopic.php?f=90&t=45628
+druckerchannel.de#@##DCGA_CONTAINER
+druckerchannel.de###DCGA
+
+! cname issues on signup
+@@||idolbucks.com^$script,domain=idols69.com|ocreampies.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/8512
+@@||calcioefinanza.it^$cname
+
+! https://github.com/easylist/easylist/pull/7082
+||vrsmash.com/assets/script$badfilter
+
+! override Peter Lowe's filter
+||piano.io^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/8515
+@@||google-analytics.com/analytics.js$script,redirect-rule=google-analytics.com/analytics.js,domain=indigenousoap.com
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=42660
+/transparent-pixel.$badfilter
+
+! seeitlive.co CPU spike
+*$script,redirect-rule=noopjs,domain=seeitlive.co
+||confiant-integrations.global.ssl.fastly.net/*/gpt_and_prebid$script,important,domain=seeitlive.co
+||netdna-ssl.com/sbly-ads/sbly-prebid-$script,important,domain=seeitlive.co
+
+! https://github.com/uBlockOrigin/uAssets/issues/8538
+@@||widget-provider.production.ippen.space/widget-components/widget-quiz.bundle.js$script,domain=buzzfeed.de
+@@||widget-provider.production.ippen.space/api/widgets/*$xhr,domain=buzzfeed.de
+
+! verhentai.top broken images
+@@||a.realsrv.com/video-slider.js$script,domain=verhentai.top
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/74505
+! https://github.com/uBlockOrigin/uAssets/issues/9807
+@@||imasdk.googleapis.com/js/sdkloader/ima3.$script,domain=independent.co.uk
+@@||cdn.permutive.com/*-web.js$domain=independent.co.uk
+@@||pub.pixels.ai/wrap-independent-prebid-lib.js$script,domain=independent.co.uk
+@@||static.adsafeprotected.com/iasPET.1.js$script,domain=independent.co.uk
+@@||independent.co.uk/*/prebid.*.js$script,1p
+independent.co.uk##+js(no-fetch-if, doubleclick)
+@@||adsafeprotected.com/services/$xhr,domain=independent.co.uk
+
+! to counter Peter Lowe's filters (breaking the site itself)
+||chartbeat.com^$badfilter
+||chartbeat.net^$badfilter
+||chartbeat.com^$3p
+||chartbeat.net^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/lijud0/another_site_blocking_videos/
+||static.adsafeprotected.com/vans-adapter-google-ima.js^$script,redirect-rule=noopjs,domain=tyla.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ligv21/the_ublock_origin_doesnt_seem_to_work_on_the_cnbc/
+@@||static-redesign.cnbcfm.com/dist/components-PcmModule-Ads-BoxInline$script,domain=cnbc.com
+
+! blocked by PL
+||blogtopsites.com^$badfilter
+||blogtopsites.com^$3p
+
+! CNAME broken comments
+@@||serieslatinoamerica.tv^$cname
+
+! https://www.reddit.com/r/uBlockOrigin/comments/loexoa/cant_figure_out_how_to_unblock_reviews_on_a_site/
+@@||googletagmanager.com/gtm.js$script,domain=well.ca
+
+! adssettings.google.com blocked by PL
+||ads.youtube.com^$badfilter
+||ads.youtube.com^$domain=~ads.youtube.com
+
+! up-load. io broken by french list
+*$script,1p,domain=up-load.io,badfilter
+*$xhr,domain=up-load.io,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/8629
+||epimg.net/t.gif$image,redirect-rule=1x1.gif,domain=as.com
+
+! https://github.com/uBlockOrigin/uAssets/pull/8635
+!#if env_mobile
+||experience.tinypass.com/xbuilder/experience/execute$xhr,domain=fastcompany.com
+!#endif
+
+! revcatch. com unlock page itself (3p blocked by EP)
+||revcatch.com^$badfilter
+
+! bing reverse image search broken by EL
+bing.com#@#a[href*="/aclick?ld="]
+bing.com##.ins_exp.vsp
+! https://github.com/uBlockOrigin/uAssets/issues/9093
+bing.com##:matches-path(~/shop) a[href*="/aclick?"]:not(.vsp_ads)
+! https://github.com/easylist/easylist/issues/7240
+!#if env_firefox
+bing.com##+js(nosiif, logQueue, 10000)
+!#endif
+
+! unlock site page cpmstar. com (Peter Lowe's)
+||cpmstar.com^$badfilter
+||cpmstar.com^$3p
+
+! click-through broken by PL, 3p blocked by EP
+! ex. https://app.seedapp.jp/click/v1/ad/122?site=1843&article=4454
+||appsflyer.com^$badfilter
+||appsflyer.com^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/m0o63g/page_damage_report/
+||cdn.shopify.com/*assets/pixel.gif$image,redirect=1x1.gif,domain=metrovac.com,important
+
+! https://www.reddit.com/r/uBlockOrigin/comments/m1fzip/can_devs_please_unblock_this_legit_website/
+! https://github.com/uBlockOrigin/uAssets/issues/12046 cname breakage
+||actonsoftware.com^$badfilter
+
+! watcho. com home page very slow loading
+watcho.com##+js(nano-stb, isPeriodic, *)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/m1thyx/cant_play_mahjong_games/
+||consensu.org^$badfilter
+
+! go-links. net page broken
+@@||go-links.net/stylesheets/ads.css$css,1p
+
+! news38.de broken images
+||news38.de/resources/*$image,1p,redirect-rule=1x1.gif
+
+! histats. com unlock the site itself
+||histats.com^$badfilter
+||histats.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/8724
+@@||ksr-research.com^$cname
+
+! https://github.com/uBlockOrigin/uAssets/issues/8727
+@@||bsdex.de^$cname
+
+! https://forums.lanik.us/viewtopic.php?p=159121#p159121
+||go.nordvpn.net^$3p,badfilter
+
+! ncaa.com march madness live stream broken by =728x90_ in EasyList
+@@||warnermediacdn.com^$xhr,domain=ncaa.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/m8lp8a/broken_site/
+! https://github.com/uBlockOrigin/uAssets/issues/11435
+uschovna.cz#@#body:style(background:none !important;)
+uschovna.cz##body:style(background-image:none !important)
+@@||cz.mrezadosa.com^$xhr,domain=uschovna.cz
+uschovna.cz##.branding:upward([target="_blank"])
+
+! https://github.com/easylist/easylist/issues/7462#issuecomment-803561739
+||milkygoodness.xyz^$badfilter
+||milkygoodness.xyz/js/optscript/
+
+! https://www.reddit.com/r/uBlockOrigin/comments/mc68fz/website_is_broken/
+@@||garantibbva.ro/templates/analytics.html^$xhr,1p
+
+! savethechildren. it / net / org downloading pdf is broken
+@@||googletagmanager.com/gtm.js$script,domain=savethechildren.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/7917#issuecomment-808324590
+@@||dilbert.com/assets/$script,1p
+
+! Fix https://golf.com/news/tour-confidential-match-play-concession-augusta-womens-am/
+@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,redirect-rule,domain=golf.com
+
+! unbreak voe.sx download page
+*$popup,3p,domain=voe.sx,badfilter
+||3r1kwxcd.top^$popup,3p,badfilter
+||3r1kwxcd.top^$popup,badfilter
+@@||google.com^$font,domain=voe.sx
+
+! https://github.com/uBlockOrigin/uAssets/issues/8823
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=discoveryplus.in
+
+! unbreak vermangasporno.com download button
+vermangasporno.com#@#a[target="_blank"][rel="noopener noreferrer"] > img
+
+! https://github.com/uBlockOrigin/uAssets/issues/8850
+@@||fundingchoicesmessages.google.com^$script,domain=bbc.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/67655
+!#if env_firefox
+@@||dev.visualwebsiteoptimizer.com/j.php$domain=watch.impress.co.jp
+@@||dev.visualwebsiteoptimizer.com/v.gif$domain=watch.impress.co.jp
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/8947
+@@||googleads.g.doubleclick.net/ads/preferences/*/opt*?continue$doc
+
+! https://github.com/uBlockOrigin/uAssets/issues/4333#issuecomment-824591245
+||thepiratebay.$script,domain=pirateproxy.live|thehiddenbay.com|thepiratebay.org,badfilter
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/81533
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=rotana.net,redirect-rule=google-ima.js
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,domain=rotana.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/8966
+@@||babiato.co/conversations/$1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/n1h7l1/ublock_detected/
+@@||shahid.mbc.net^$cname
+
+! https://www.reddit.com/r/uBlockOrigin/comments/n28dkp/blocking_buttons_and_cant_move_videos_in_youtube/
+@@||creator.zmags.com/channels.js^$script,domain=sallybeauty.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/9016
+@@||powr.io/powr.js$script,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/9018
+@@||fluid.4strokemedia.com/www/delivery/asyncspc.php^$xhr,domain=formulapassion.it
+@@||cdnb.4strokemedia.com/carousel/v4/comScore-JS-$script,domain=formulapassion.it
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=formulapassion.it,redirect-rule=google-ima.js
+formulapassion.it#@#.qc-cmp2-container
+formulapassion.it#@##qc-cmp2-main
+formulapassion.it#@#.qc-cmp2-main
+
+! https://github.com/uBlockOrigin/uAssets/issues/8940#issuecomment-834267785
+@@||movie.momo-net.com/_embed/video.php$frame
+
+! https://github.com/uBlockOrigin/uAssets/issues/7784#issuecomment-834300187
+@@||stuttgarter-zeitung.de/*/tracking/$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/9047
+@@||cdn.jsdelivr.net^*/js/analytics.min.js$script,domain=starfiles.co|starfiles.ml
+
+! https://github.com/uBlockOrigin/uAssets/issues/9085
+@@_advertisement_$domain=splatoonwiki.org,script,image,css
+
+! https://www.reddit.com/r/uBlockOrigin/comments/nasaxz/problem_on_site_homehacksco/
+*$script,redirect-rule=noopjs,domain=animalchannel.co|homehacks.co|parentingisnteasy.co|seeitlive.co|spotlightstories.co
+
+! https://twitter.com/Armstrong/status/1393153389752692736
+! Blocked by Peter Lowe's
+||baremetrics.com^$badfilter
+||baremetrics.com^$3p
+
+! https://jbbs.shitaraba.net/bbs/read.cgi/internet/25463/1598352715/183
+@@||googletagmanager.com/gtm.js$script,domain=dpoint.jp
+
+! https://www.welt.de/politik/deutschland/article231179597/Antisemitismus-bei-Anti-Israel-Demos-Schaeuble-fordert-harte-Strafen.html broken looking page scroll down
+@@||taboola.com/*/axelspringer-dieweltprojectberlin/*$script,domain=welt.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/9102
+@@||static-ppp.portalcdn.com/$script,domain=pornhub.com
+pornhub.com#@#iframe[width][height*="px"]
+
+! https://ilakovac.com/teespring-ublock-issue/
+@@||googletagmanager.com/gtm.js$script,redirect-rule,domain=bela.gifts
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=46190
+||smartadserver.com^$badfilter
+||smartadserver.com^$3p,domain=~smartadserver.de,badfilter
+||smartadserver.com^$3p,domain=~smartadserver.fr|~smartadserver.de
+smartadserver.*#@#[href*=".smartadserver.com"]
+smartadserver.*#@#a[href*=".smartadserver.com"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/9153
+||vidible.tv^$badfilter
+
+! adshrink.it blocked by PL
+||adshrink.it^$badfilter
+||adshrink.it^$3p
+
+! broken by RUAdlist
+@@||sl.lindernman.xyz/$xhr,3p,domain=hitbits.io|pentafaucet.com
+
+! bad filters in smed79 french list
+*$xhr,3p,domain=teleriumtv.net,badfilter
+*$script,3p,domain=elitegol.me,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/9320
+@@||gannettdigital.com/universal-web-client/master/$xhr,domain=usatoday.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/9365
+||klaviyo.com^$badfilter
+
+! unbreaking reddit reply email
+@@||click.redditmail.com^*ref_source=email
+
+! https://github.com/uBlockOrigin/uAssets/issues/9405
+brasilescola.uol.com.br#@#.banner
+
+! https://github.com/uBlockOrigin/uAssets/issues/9406
+||tags.news.com.au/prod/heartbeat/*/MediaSDK.min.js$script,redirect=noop.js,important
+
+! https://twitter.com/4skvictor/status/1402115535597281288
+@@||googletagmanager.com/gtm.js$script,domain=coronavirus.vic.gov.au
+
+! https://www.reddit.com/r/uBlockOrigin/comments/nwoz95/manga_scanlating_blog_wont_work_properly/
+@@||drive.google.com/file/*/preview?*-auto-ads-$frame,domain=kntstuff.blogspot.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/nxm2km/some_images_get_blocked_on_malwaretipscom/
+@@||malwaretips.com/blogs/wp-content/uploads/*/Sponsored-Links$image,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ny0q3d/this_extension_is_breaking_certain_website/
+@@||jep-asset.akamaized.net/jiostaticresources/*/js/adobe-analytics.js$script,domain=jio.com
+
+! https://twitter.com/darkpenguin_efb/status/1403355367745097733
+||googletagmanager.com/gtag/js$script,redirect=noop.js,domain=video.isilive.ca
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=46125
+#@#a[href^="https://www.sheetmusicplus.com/"][href*="?aff_id="]
+#@#a[href^="https://www.sheetmusicplus.com/?aff_id="]
+
+! https://kcjervis.github.io/jervis/#/operation image broken by rules like /banner/468
+@@||kcjervis.github.io/jervis/static/media/src/images/ships/banner/
+
+! https://github.com/uBlockOrigin/uAssets/issues/9441
+woman.excite.co.jp##+js(ra, data-woman-ex, a[href][data-woman-ex])
+
+! https://github.com/easylist/easylist/pull/7713
+demae-can.com##+js(ra, data-trm-action|data-trm-category|data-trm-label, .trm_event, stay)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9451
+@@||pluralsight.com/analytics/analytics-facade$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/9470
+@@||plantuml.com^$cname
+
+! https://www.reddit.com/r/uBlockOrigin/comments/o9qoo8/videos_wont_play_on_etonlinecom/
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,domain=etonline.com
+@@||media.amlg.io^$image,domain=etonline.com
+
+! https://github.com/easylist/easylist/pull/7905
+@@||cloudfront.net/ad-navi/$css,image,domain=kinro.ntv.co.jp
+@@||minnanokaigo.com/img/page/ad-navi/parts/$image,1p
+
+! https://girlsnews.tv - fix search
+@@||googletagmanager.com/gtm.js$script,domain=girlsnews.tv
+
+! https://github.com/uBlockOrigin/uAssets/issues/9575
+@@||googletagmanager.com/gtm.js$script,redirect-rule,domain=lingvolive.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/9576
+@@||boots.*/wcsstore/eBootsStorefrontAssetStore/javascript/Analytics.js$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/pull/9592
+@@||google-analytics.com/analytics.js$script,redirect-rule=google-analytics.com/analytics.js,domain=ultimateclassicrock.com
+@@||googletagmanager.com/gtm.js$script,redirect-rule=googletagmanager.com/gtm.js,domain=ultimateclassicrock.com
+
+! https://unito.life infinite call to keentracking
+unito.life##^script:has-text(KeenTracking)
+unito.life##+js(acs, KeenTracking)
+
+! https://github.com/uBlockOrigin/uAssets/issues/7882#issuecomment-879063247
+@@||formulatv.com/js/cmp2.js$script,1p
+@@||googletagmanager.com/gtm.js$script,domain=formulatv.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ojxi5i/all_townsquare_media_sites_disappear_when_the/
+||google-analytics.com/analytics.js$script,redirect-rule=noopjs,domain=hudsonvalleypost.com|seacoastcurrent.com|popcrush.com,important
+||googletagmanager.com/gtm.js$script,redirect-rule=noopjs,domain=hudsonvalleypost.com|seacoastcurrent.com|popcrush.com,important
+
+! https://www.reddit.com/r/uBlockOrigin/comments/o44syz/
+! https://www.reddit.com/r/uBlockOrigin/comments/ol5q56/
+@@||google-analytics.com/analytics.js$script,3p,redirect-rule,domain=k2radio.com|kowb1290.com|koel.com|loudwire.com
+@@||googletagmanager.com/gtm.js$script,3p,redirect-rule,domain=k2radio.com|kowb1290.com|koel.com|loudwire.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/9605
+@@||googletagmanager.com/gtm.js$script,domain=megacritic.ru
+
+! Reported through email
+@@||googletagmanager.com^$redirect-rule,domain=invisibleoranges.com|nj1015.com|tasteofcountry.com|wyrk.com|xxlmag.com
+@@||google-analytics.com^$redirect-rule,domain=invisibleoranges.com|nj1015.com|tasteofcountry.com|wyrk.com|xxlmag.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/9659
+adyou.me##button.flleft.btn-lg.btn-warning.btn.skip:style(display:block !important)
+adyou.me#@#+js(addEventListener-defuser, /^(?:click|mousedown)$/, bypassEventsInProxies)
+adyou.me#@#+js(no-setInterval-if, (), 500)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9670
+@@||freebcc.org/assets/img/ad_$image
+
+! https://www.reddit.com/r/uBlockOrigin/comments/otmkbp/extension_not_blocking_all_ads/
+@@||weather.com/content/assets/*wxAdTargeting$script,1p
+@@||ssl.p.jwpcdn.com/player/plugins/googima/$script,domain=weather.com
+||imasdk.googleapis.com/js/sdkloader/ima3.js^$script,redirect-rule=noopjs,domain=weather.com
+! https://www.reddit.com/r/uBlockOrigin/comments/x3fskl/
+@@||jssdkcdns.mparticle.com/js/*/mparticle.js$script,domain=weather.com
+@@||micro.rubiconproject.com/prebid/dynamic/$script,domain=weather.com
+@@||ssl.p.jwpcdn.com/player/*/googima.js$script,domain=weather.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ouu67c/full_screen_doesnt_work_on_coolmathgamescom/
+coolmathgames.com##+js(set, network_user_id, '')
+
+! https://www.reddit.com/r/uBlockOrigin/comments/ovy8cg/why_is_the_image_on_this_page_blocked_no_matter/
+@@||b-cdn.net^*-adap.jpg$image,domain=techxplore.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/9692
+||hb.afl.rakuten.co.jp^$badfilter
+||hb.afl.rakuten.co.jp^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/oxcp5b/site_namesorg_broken/
+@@||names.org^$cname
+
+! being blocked by PL and causes infinite calls ex. 80-e.ru,mathcats.com
+||clustrmaps.com^$image,redirect-rule=1x1.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/9763
+@@||amazon-adsystem.com/*/apstag.js$script,redirect-rule=amazon_apstag.js,domain=video.sky.it
+
+! https://www.reddit.com/r/uBlockOrigin/comments/p3r66u/strange_ubo_behavior_in_filtering_search_on/
+@@||googletagmanager.com/gtm.js$script,redirect-rule=googletagmanager.com/gtm.js,domain=autotrader.ca
+
+! https://www.reddit.com/r/uBlockOrigin/comments/p7i6fp/website_is_static_while_ublock_is_activated/
+@@||rmwilliams.com/on/demandware.static/Sites-rmwINTL-Site/*/modules/app/app.tealium.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/9802
+@@||player.avplayer.com/script/*/avcplayer.js$script,domain=bdnewszh.com
+@@||player.avplayer.com/script/*/libs/hls.min.js$script,domain=bdnewszh.com
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=46688
+||ads.pinterest.com^$badfilter
+||ads.pinterest.com^$3p
+
+! fix genieesspv console
+! CNAME issue by JPF
+@@||console.genieesspv.jp^$domain=admin.genieessp.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/9859
+@@||tutanota.com/fr.js$1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/9873
+@@||go.pardot.com/$frame,domain=womensworldbanking.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/9893
+@@||api.ipdata.co/?api-key=$script,domain=wttw.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/9903
+@@||cdn.ampproject.org/*/amp-geo-$script,domain=9to5google.com|9to5mac.com
+! https://www.reddit.com/r/uBlockOrigin/comments/1265axi/
+@@||cdn.viglink.com/api/$script,domain=9to5google.com
+! https://www.reddit.com/r/uBlockOrigin/comments/198to3q/comments_on_sites_dark_theme_unreadable/
+@@||googletagmanager.com/gtm.js?id=GTM-THGGVXB$script,domain=9to5google.com
+@@||fundingchoicesmessages.google.com/f/$script,domain=9to5google.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pglvdm/
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=olympics.com
+
+! https://github.com/easylist/easylist/issues/8990
+://ads.$popup,domain=~smartnews.com,badfilter
+://ads.$popup,domain=~kakaku.com|~smartnews.com
+
+! https://jbbs.shitaraba.net/bbs/read.cgi/internet/25463/1598352715/232
+!#if env_mobile
+@@||bwb101.goo.ne.jp/b.js$domain=news.goo.ne.jp
+@@||log000.goo.ne.jp/js/VLTraceDMD.js$domain=news.goo.ne.jp
+!#endif
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=42810
+||azadify.com^$3p,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/9983
+@@||googletagmanager.com/gtm.js$script,domain=giftcards.com
+
+! https://github.com/uBlockOrigin/uAssets/pull/10005 CNAME breakage by Peter Lowe's
+||smart-traffik.com^$badfilter
+
+! https://github.com/tofukko/filter/issues/46
+||googlevideo.com/videoplayback?$media,redirect=noop-1s.mp4,domain=safeframe.googlesyndication.com
+safeframe.googlesyndication.com##.left-container
+! https://github.com/AdguardTeam/AdguardFilters/issues/156301
+@@||g.doubleclick.net/pagead/images/gmob/close-circle-30x30.png$image,domain=safeframe.googlesyndication.com
+@@||gstatic.com/admanager/outstream/rewarded_web_video_$script,domain=safeframe.googlesyndication.com
+@@||google-analytics.com/analytics.js$domain=bihann.com|nehannn.com
+
+! https://github.com/easylist/easylist/commit/c1e5cea211d41c5547f58321e5dae56ac834fce0
+||tercept.com^$badfilter
+||tercept.com^$3p
+
+! broken sportschau.de live stream
+! https://github.com/AdguardTeam/AdguardFilters/issues/145948
+||wdr.de/*/tracker/tracker.min.js$script,redirect-rule=noop.js,domain=sportschau.de
+@@||de-config.sensic.net/sui-connector.js$script,domain=sportschau.de
+
+! unbreak https://uiz.io/QfCH from https://github.com/AdguardTeam/AdguardFilters/issues/54339
+@@||bigappboi.com/captchalocker/js/popup.js.php
+@@||bigappboi.com/cp/js/captcha.js.php
+
+! fix video https://www.pussyspace.com/live/anna_lus/
+! https://github.com/AdguardTeam/AdguardFilters/issues/143346
+@@||chaturbate.com/in/$frame,domain=cbhours.com|pussyspace.*
+
+! https://www.reddit.com/r/uBlockOrigin/comments/purjil/ubo_prevent_video_from_loading_on/
+@@||tra.scds.pmdstatic.net/advertising-core/$script,domain=businessinsider.fr
+
+! https://github.com/uBlockOrigin/uAssets/issues/10078
+@@||googletagmanager.com/gtm.js$script,domain=gall.nl
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pwi2p7/wondrium_what_am_i_doing_wrong/
+@@||wondrium.com/static/version1632408975/frontend/Wondrium/default/en_US/js/analytics.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10093
+xunta.gal#@##anuncio
+
+! https://www.reddit.com/r/uBlockOrigin/comments/pyfove/ublock_origin_breaks_corsairs_website_when_using/
+@@||googletagmanager.com/gtm.js$script,redirect-rule,domain=corsair.com
+
+! https://www.reddit.com/r/firefox/comments/pz3427/why_gamedevelopercom_former_gamasutra_loads_a/
+@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,redirect-rule,domain=gamedeveloper.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/10146
+@@tracking/ninja.js$script,domain=olx.ro,badfilter
+
+! docs.tealium.com blocked by PL
+||tealium.com^$badfilter
+||tealium.com^$3p
+
+! https://github.com/tofukko/filter/issues/49
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect-rule,domain=heim.jp
+
+! https://github.com/easylist/easylist/issues/9412 cname blocked by PL
+@@||777partner.com^$image,media,domain=jetztlive.com
+
+! www.23qb.net cname issue by AG Chinese/EL China
+@@||cdn.cloudflare.net^$script,domain=23qb.net
+
+! fix mf-realty.jp top image
+@@||googletagmanager.com/gtm.js$script,redirect-rule,domain=mf-realty.jp
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qcw76h/ublocks_blocks_then_page_stops_loading/
+myair2.resmed.com##+js(no-xhr-if, cloudflare.com/cdn-cgi/trace)
+||cloudflare.com/cdn-cgi/trace$xhr,3p,redirect-rule=noop.txt,domain=~funimation.com|~1bit.space|~1bitspace.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/10285
+@@||d2wy8f7a9ursnm.cloudfront.net/*/bugsnag.min.js$script,domain=crust.com.au
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qde4r9/video_player_is_blocked_by_ublock/
+||d2r1yp2w7bby2u.cloudfront.net/js/localforage.min.js$script,redirect-rule=noopjs,domain=sonyliv.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qeo32a/stooqpl_stooqcom_stopped_working_yesterday/
+@@||fundingchoicesmessages.google.com^$script,domain=stooq.com|stooq.pl
+
+! https://github.com/easylist/easylist/issues/2436#issuecomment-946886270
+@@*ad2.$image,domain=sophiabushfan.net
+@@_advertisment.$image,domain=gorgeouspfeiffer.com
+@@_advertisement_$image,domain=jennifer-lawrence.com
+@@/advertisements_$image,domain=jessica-biel.at
+@@/advertising_$image,domain=timfahlbusch.com
+@@/advertisment/*$image,domain=taylorpictures.net
+@@/advertisements-$image,domain=jennifer-lawrence.com
+@@/ad_campaigns/*$image,domain=alicia-vikander.com
+@@/adverts/*$image,domain=emily-blunt.com|isla-fisher.net|islafisher.net|reese-witherspoon.org|reesewitherspoon.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/10348
+@@||cloudflare.com/cdn-cgi/trace$xhr,domain=54647.io
+
+! travelerdoor blocked request spam
+travelerdoor.com##+js(no-xhr-if, cloudflare.com/cdn-cgi/trace)
+
+! Store selection broken https://www.simon.com/mall/king-of-prussia/stores
+@@||googletagmanager.com/gtm.js$script,redirect-rule,domain=simon.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/qnoufw/pop_ups/hji42s0/
+@@||wewon.to^$xhr,media,domain=soap2day.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/10441
+pewresearch.org##+js(set, ga, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10444
+@@||asset.fwcdn2.com/js/storyblock.js$script,domain=narcity.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/10594
+@@||cdn.questionpro.com^$css
+
+! https://github.com/uBlockOrigin/uAssets/issues/10582
+@@||rdstation.com.br^*api/$xhr
+
+! Reported internally, this unbreaks:
+! https://www.shockwave.com/gamelanding/mahjong-birds.jsp
+@@||googletagmanager.com/gtm.js$script,domain=www.shockwave.com
+||videoplayerhub.com^$script,domain=shockwave.com,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/10615
+||natureetdecouvertes.com^$1p,image,redirect-rule=2x2.png
+
+! https://github.com/uBlockOrigin/uAssets/issues/10629
+!#if env_mobile
+||cxense.com/cx.js$script,redirect-rule=noop.js,domain=itmedia.co.jp
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/10643
+ilbianconero.com##.no-scroll:style(overflow:auto!important)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/r4z0zj/how_to_unblock_elements_tweets_blocked_by_jsnofloc/
+@@||googletagmanager.com/gtm.js$script,domain=insideevs.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/10694
+@@||googletagmanager.com/gtm.js$script,domain=suspilne.media
+
+! https://github.com/uBlockOrigin/uAssets/issues/10770
+@@||cdn.casamireasa.biz/deploys/www/delivery^$domain=canale.live
+@@||canale.live/reclama/$1p
+@@||canale.live/player-tv/$css,1p
+
+! unbreak https://gogoplay1.com/videos/kero-kero-chime-episode-30's download popup
+@@||gogoplay1.com/download?id=$popup
+
+! https://github.com/uBlockOrigin/uAssets/issues/10852
+@@||google-analytics.com/analytics.js$script,redirect-rule,domain=nordvpn.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/10847
+||static.chotot.com/storage/js/prebid-ads.js$script,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/10919
+@@||cibng.ibanking-services.com^$cname
+@@||ppl.ibanking-services.com^$cname
+
+! https://github.com/uBlockOrigin/uAssets/issues/10927
+warscrap.io##.squareAdContainer
+warscrap.io##.main-menu-bottom
+warscrap.io###warscrap-io_336x280
+warscrap.io###warscrap-io_728x90
+
+! https://github.com/uBlockOrigin/uAssets/issues/10943
+@@||fmkorea.com/modules/point/icons/*$image,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10950
+*$script,3p,domain=animeflv.net,badfilter
+
+! https://www.kurashiru.com/articles/b327275a-2dc9-4458-982f-58a95d89030d layout broken on mobile
+kurashiru.com#@#[id^="div-gpt-ad"]:style(width:1px!important;height:1px!important;min-width:1px!important;min-height:1px!important;margin:0!important;padding:0!important;overflow:hidden!important;opacity:0!important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10958
+@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,domain=meteoetradar.com
+@@||securepubads.g.doubleclick.net/gpt/pubads_impl_$script,domain=meteoetradar.com
+meteoetradar.com##+js(no-xhr-if, doubleclick)
+
+! https://github.com/uBlockOrigin/uAssets/issues/10960
+@@||explore.agilent.com/GlobalOptOut^$frame,1p
+@@||p04a.hs.eloqua.com^$frame,domain=agilent.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/11026
+@@||video.repubblica.it^$cname
+
+! https://github.com/uBlockOrigin/uAssets/issues/10946
+@@||cloudflare.com/cdn-cgi/trace$xhr,redirect-rule=noop.txt,domain=benchmarkuniverse.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/11077
+||sammobile.com^*/newrelic.js$script,1p,redirect=noop.js,important
+||plausible.io/js/plausible.js$script,redirect=noopjs,important
+*$script,redirect-rule=noopjs,domain=sammobile.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/11109
+@@||shakeshack.com/sites/default/files/google_tag/*$script,1p
+@@||googletagmanager.com/gtm.js$script,domain=shakeshack.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/11158
+@@||googletagmanager.com/gtm.js$script,domain=microcenter.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/7220#issuecomment-1004560136
+@@||s0.2mdn.net/instream/html5/ima3.js$script,domain=eurogamer.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/5131#issuecomment-1007971628
+@@||cdn.vox-cdn.com/packs/js/concert_ads-*.js$script,domain=theverge.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/11246
+@@||s0.2mdn.net/instream/html5/ima3.js$script,domain=as.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/11258
+@@||nocturnetls.net^$script,1p
+
+! cname https://github.com/uBlockOrigin/uAssets/issues/11275
+@@||relay-client-c01.iocnt.net^$script,domain=www.businessinsider.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/11299
+@@||mypearson.com^*/ga.min.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/11308#issuecomment-1013865830
+||tags.tiqcdn.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/11334
+@@||inbenta.io/prod/*/tracking/events$xhr,domain=knab.nl
+
+! https://github.com/uBlockOrigin/uAssets/issues/11349
+@@||thetoc.gr/Content/images/blank.gif$image,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/11372
+! https://github.com/uBlockOrigin/uAssets/issues/18848
+gumtree.com.au#@#.header--is-new-sticky-behaviour
+gumtree.com.au#@#.ad-cnt
+gumtree.com.au#@#[data-ad-name]
+
+! https://forums.lanik.us/viewtopic.php?t=47165
+@@||aps.hearstnp.com/Scripts/loadAds.js$script,domain=timesunion.com
+timesunion.com##div.setHeight.stickyWrapper
+
+! https://github.com/uBlockOrigin/uAssets/issues/11398
+@@||delmarlearning.com^$1p,script
+
+! https://github.com/uBlockOrigin/uAssets/issues/11414
+||prebid.elespectador.com^$script,redirect-rule=googletagservices_gpt.js,1p,important
+
+! https://www.reddit.com/r/uBlockOrigin/comments/s9edog/
+@@||read.amazon.*/embed?$frame,3p,domain=goodreads.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/11450
+profit.ro##.zc_top_mobil:style(display: block !important;)
+profit.ro##.zc_rectangle
+profit.ro##.zc_top
+
+! https://www.reddit.com/r/uBlockOrigin/comments/sbkktu/popup_ad_and_site_blocks_developer_tools/
+himovies.to#@#a[onclick]
+
+! https://github.com/uBlockOrigin/uAssets/issues/11457
+! https://github.com/uBlockOrigin/uAssets/issues/18932
+@@||streaming.adswizz.com^$3p,media,domain=deezer.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/11472
+@@||load.sumo.com^$script,domain=gopractice.ru
+@@||sumo.com/api/$xhr,domain=gopractice.ru
+@@||sumo.com/services$xhr,domain=gopractice.ru
+
+! https://forums.lanik.us/viewtopic.php?f=64&t=40469
+@@||google.com/recaptcha/$frame,script
+
+! https://github.com/uBlockOrigin/uAssets/issues/11533
+||rudaw.net/images/$image,1p,redirect-rule=1x1.gif,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/11539
+@@||google-analytics.com/analytics.js$script,redirect-rule=google-analytics.com/analytics.js,domain=layrite.com
+
+! comment section broken by Peter Lowe’s list
+! https://www.tagesspiegel.de/politik/klima-siegel-fuer-gas-und-atomkraftwerke-die-oekologische-mogelpackung-beschaedigt-den-ruf-der-eu/28029446.html#kommentare
+@@||script.ioam.de/iam.js$script,domain=tagesspiegel.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/11550
+@@||mpsnare.iesnare.com/snare.js$script,domain=rossmann.de
+
+! walletinvestor. com scrolling broken
+walletinvestor.com##body:style(overflow: auto !important;)
+walletinvestor.com###bio_ep_bg
+
+! https://github.com/uBlockOrigin/uAssets/issues/11580
+@@||sololearn.com/api/*/comments/*$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/11593
+@@||googletagmanager.com/gtm.js$script,redirect-rule=googletagmanager.com/gtm.js,domain=aeriagames.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/11592
+@@||ads.imprezzer.com/js/imprezzer2.min.js$script,domain=mgronline.com
+@@||ads.imprezzer.com/js/multisize_responsive.js$script,domain=mgronline.com
+@@||ads.imprezzer.com/js/multisize_bottompage_responsive.js$script,domain=mgronline.com
+@@||ads.imprezzer.com/js/imprezzer_vip2.js$script,domain=mgronline.com
+mgronline.com##[href^="https://www.hotelscombined.co.th/"]
+
+! website, not a tracker
+||lp.tfd-corp.co.jp^$badfilter
+||info.neg.co.jp^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/11675
+@@||video-api.yql.yahoo.com/*/video/alias/channels/$xhr,domain=sports.yahoo.com
+sports.yahoo.com#@#.H\(400px\) > .VideoPlayer
+sports.yahoo.com#@#.H\(400px\).Pos\(r\)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11285
+||relish.com^$domain=seriouseats.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/106875
+@@||googletagmanager.com/gtm.js$domain=www3.nissan.co.jp
+*$script,redirect-rule=noop.js,domain=nissan.co.jp
+
+! https://github.com/uBlockOrigin/uAssets/issues/11716
+abczdrowie.pl#@#+js(aost, WP.prebid, onLoad)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11715
+@@||nexus.ensighten.com/easyjet/*/Bootstrap.js$script,domain=easyjet.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/11850
+||dan-ball.jp/*.gif$image,redirect-rule=1x1.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/11864
+@@||cdn.stat-rock.com/player.js$script,domain=autofaucet.dutchycorp.space
+
+! https://github.com/uBlockOrigin/uAssets/issues/11877
+@@||api.thingiverse.com/banner/*/pageAd$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/11858
+idnes.cz#@#+js(abort-current-script, String.fromCharCode)
+
+! https://github.com/NanoMeow/QuickReports/issues/2573
+cyberstumble.com##.td-animation-stack-type0-1:style(opacity:1 !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/11959
+pearsonclinical.com##.aligner
+
+! https://github.com/uBlockOrigin/uAssets/issues/8629#issuecomment-1062033466
+*$image,domain=asfan.as.com,redirect-rule=1x1.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/12108
+#@##banner_ad
+
+! mpsconline. gov.in breakage
+@@||mpsconline.gov.in^$ghide
+
+! https://github.com/uBlockOrigin/uAssets/issues/12159
+||booking.rm.dk/selvbooking/*/analytics/*$xhr,1p,redirect-rule=nooptext
+
+! https://github.com/uBlockOrigin/uAssets/issues/12196
+@@||chanrycz.com/cdn-cgi/apps/head/*.js|$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/tdjn7n/webcamshowsorg_videos_nolonger_working_tried_a/
+*$script,3p,domain=mixdrop.co,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/12244
+||mixpanel.com^$badfilter
+||mixpanel.com^$3p
+
+! Counters `clustrmaps.com` from Peter Lowe's List
+||clustrmaps.com^$badfilter
+||clustrmaps.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/10775
+! https://github.com/uBlockOrigin/uAssets/issues/14124
+@@||doci.pl/aserver/$frame,1p
+@@||docer.pl/aserver/$frame,1p
+@@||ovh.webshark.pl^$script,domain=doci.pl|docer.pl
+@@||static.webshark.pl/$script,domain=doci.pl|adk.freedisc.pl|docer.pl
+@@||static.webshark.pl/static/js/library/aserver/helper.js$script,domain=adk.musody.com|docero.de
+@@||adk.docer.pl/asrv/$frame,1p
+@@||doci.pl^$ghide
+@@||docer.pl^$ghide
+docer.pl#@##ad
+docer.pl#@#[class^="ad-"]
+@@||webshark.pl^$script,domain=doceru.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/12298
+@@||assets.adobedtm.com/extensions/*/AppMeasurement$script,domain=trygghansa.se
+
+! https://github.com/uBlockOrigin/uAssets/issues/12401
+@@||cdn.mavic.com/sites/default/files/google_tag/google_tag/*$script,1p
+@@||googletagmanager.com/gtm.js$script,domain=mavic.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/12491
+@@||ad.doubleclick.net/ddm/trackclk/*https://www.unieuro.it
+
+! https://github.com/uBlockOrigin/uAssets/issues/12503
+@@||widgets.outbrain.com/outbrain.js$script,domain=welt.de
+@@||mv.outbrain.com/Multivac/api/get?url=$script,domain=welt.de
+@@||images.outbrainimg.com/transform/v3/$image,domain=welt.de
+
+! https://pc-play.games.dmm.com/play/oshirore/ campaign banner (need login)
+! The blocking exception can be removed after Apr. 5, but maybe cosmetic should be kept for future.
+shiropro-re.net#@##ad_link
+@@||assets.shiropro-re.net/html/image/ad5.png
+
+! https://github.com/uBlockOrigin/uAssets/issues/12521
+||zdf.de/atinternet/live/smarttag.js$badfilter
+
+! https://github.com/finnish-easylist-addition/finnish-easylist-addition/issues/406
+gigantti.fi##.mat-drawer-container:style(overflow-x: auto !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12573
+united.no#@#.page-ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/12559
+@@||freegeoip.app/json/*$xhr,domain=hamwaves.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/12574
+@@||oasjs.kataweb.it^$script,domain=repubblica.it
+
+! si.com breakage
+si.com#@#.is-below-header-ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/12498
+@@||edge.permutive.app^$script,domain=watch.globaltv.com
+@@||api.permutive.com/v*/geoip$xhr,domain=watch.globaltv.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/12636
+@@/1.gif?$image,1p,domain=kanjiku.net
+@@/2.gif?$image,1p,domain=kanjiku.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/12642
+@@||dealersite4.d2cmedia.ca^$domain=schlueterhyundai.com
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/2084
+@@||wwwjuwanshe.pp8.com^$3p,domain=juwanshe.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/12666
+@@||googletagmanager.com/gtm.js$script,domain=all.accor.com|login.accor.com
+@@||googletagmanager.com/gtag/js$script,domain=all.accor.com|login.accor.com
+@@||google-analytics.com/analytics.js$script,domain=all.accor.com|login.accor.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/12692
+@@||ipapi.co^*json$xhr
+
+! https://github.com/uBlockOrigin/uAssets/issues/12712
+@@||coinzillatag.com/lib/display.js$script,domain=ad-doge.com
+@@||sentry-cdn.com^$script,domain=ad-doge.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/115360
+security-demo.extrahop.com##+js(nostif, ad blocker)
+@@||app.pendo.io/data/guide.js/*$script,domain=security-demo.extrahop.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/12773
+@@||google-analytics.com/analytics.js$script,domain=reykjaviksailors.is
+@@||googletagmanager.com/gtag/js$script,domain=reykjaviksailors.is
+
+! https://github.com/uBlockOrigin/uAssets/issues/12764
+@@||kingarthurbaking.com/sites/default/files/google_tag/$script,1p
+@@||googletagmanager.com/gtm.js$script,domain=kingarthurbaking.com
+kingarthurbaking.com##^html > head > link[rel="canonical"]:not([href*="/recipes/"]):upward(2) script:has-text(googletagmanager)
+
+! https://github.com/uBlockOrigin/uAssets/issues/12772
+cadenadial.com##+js(aost, History, /(^(?!.*(Function|HTMLDocument).*))/)
+
+! cname breakage by CHN list $script,subdocument,third-party,websocket,xmlhttprequest,domain=yemancomic.com
+@@||psl.2cycomic.com^$script,domain=yemancomic.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/12896
+@@||builder-assets.unbounce.com^$css,domain=duden.de
+@@||builder-assets.unbounce.com/published-js/main.bundle-$script,domain=duden.de
+
+! unbreak video
+@@||ricasdelicias.online/social.php$popup,domain=animesonline.cz
+
+! fix slide images
+@@||laptopoutlet.co.uk/wysiwyg/asus/rise-up/popunder-$image,1p
+@@||laptopoutlet.co.uk/wysiwyg/lenovo/*_popunder_$image,1p
+
+! unbreak streamtape frame
+@@||streamadblockplus.com^$frame,domain=streamtape.com
+
+! fix https://eimusics.com/digital-single-yama-moonwalker/ auto close tab
+@@||eimusics.com^$popunder,domain=ouo.io
+
+! besthdgayporn. com video broken
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=besthdgayporn.com
+@@||besthdgayporn.com/wp-content/plugins/$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/117014 blocked by PL
+@@||bongacash.com/js/videojs/video.js
+
+! cname breakage by AG Spanish ||cloudfront.net^$domain=pelisplushd.net|cuevana3.*
+@@||dsag3w1du2cu2.cloudfront.net^$image,domain=cuevana3.la
+
+! https://github.com/uBlockOrigin/uAssets/issues/13083
+@@||gcdn.2mdn.net/videoplayback/$media,domain=app.plex.tv
+
+! https://github.com/uBlockOrigin/uAssets/issues/13095
+@@||hqq.to/e/*$csp,domain=gomo.to
+
+! https://github.com/uBlockOrigin/uAssets/issues/13094#issuecomment-1119503790
+@@||photopea.com/promo/no_ads.png$xhr,1p
+
+! www.divascam.com cname breakage
+@@||new.xlovecam.com^$xhr,domain=divascam.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/13161
+||go.usa.gov^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/13157
+@@||assets.adobedtm.com/extensions/*/AppMeasurement$script,domain=conad.it
+
+! override Peter Lowe's filter
+||t.co^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/13197
+||lacentrale.fr/static/fragment-layout/tracking-$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/13290
+@@||app.detrack.com/api/v2/tracking$xhr
+
+! https://github.com/uBlockOrigin/uAssets/issues/13316
+@@||cdnjs.cloudflare.com/cdn-cgi/trace$xhr,domain=piliapp.com
+
+! stern plus article links not clickable
+@@||google-analytics.com/analytics.js$script,redirect-rule=google-analytics.com/analytics.js:5,domain=stern.de
+@@||googletagmanager.com/gtm.js$script,redirect-rule=googletagmanager_gtm.js:5,domain=stern.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/13393#issuecomment-1139089175
+@@||c.amazon-adsystem.com/aax2/apstag.js$script,domain=oggi.it
+@@||components2.rcsobjects.it/rcs_adv/v1/distro/dfp/common/prebid$script,domain=oggi.it
+@@||static.adsafeprotected.com/iasPET$script,domain=oggi.it
+
+! https://github.com/uBlockOrigin/uAssets/commit/d4142849f5accc8f04308fd4f0a00286fe145b97#commitcomment-74791148
+@@||location.api.useinsider.com^$xhr,domain=nontongp.xyz
+
+! https://github.com/uBlockOrigin/uAssets/issues/13284
+! flix
+@@||googletagmanager.com/gtm.js$script,domain=lacuracao.pe|mumzworld.com|teds.com.au|tsbohemia.cz|target.com.au
+||flixsyndication.net^$3p,badfilter
+||flixsyndication.net/delivery/static/tracking/$script,important
+
+! https://github.com/uBlockOrigin/uAssets/pull/13443
+tamin.ir#@#.ads2
+@@||tamin.ir/content/ads/
+
+! voeunblock2.com break by EL regex filter
+@@||voeunblock2.com^$frame,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/13489
+job.mt.de,job.nw.de#@#^script:has-text(===):has-text(/[\w\W]{16000}/)
+job.mt.de,job.nw.de#@#+js(nostif, .call(null), 10)
+
+! https://github.com/uBlockOrigin/uAssets/issues/8629#issuecomment-1142720254
+@@||ak-ads-ns.prisasd.com/prebid/prebid_noticias.js$script,domain=as.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/5288#issuecomment-1142727136
+||elpais.com/t.gif$image,1p,redirect-rule=1x1.gif,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/13512
+||fwcdn2.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/13538
+@@||app.link/_r?sdk$script,domain=ecwid.com
+@@||api2.branch.io/v1/url$xhr,domain=ecwid.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/13615
+@@||cdn.appdynamics.com/adrum/adrum-*.js$domain=santander.cl
+
+! https://github.com/uBlockOrigin/uAssets/issues/13655
+||ads.tiktok.com^$badfilter
+
+! https://www.reddit.com/r/uBlockOrigin/comments/vdl0mx/videos_fail_to_load_on_oe24at/
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect=google-ima.js,important,domain=oe24.at
+
+! https://github.com/uBlockOrigin/uAssets/issues/13737
+@@||m.faz.net^$cname
+
+! https://github.com/uBlockOrigin/uAssets/issues/13768
+@@||last.fm/static/js-build/tracking/tealium-utag-set.js$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/vf5dyc/cant_play_bubble_game/
+! https://github.com/uBlockOrigin/uAssets/issues/13814
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=html5.gamedistribution.com
+@@||hb.improvedigital.com/pbw/headerlift.min.js$script,domain=html5.gamedistribution.com
+@@||hb.improvedigital.com/pbw/prebid/*$script,domain=html5.gamedistribution.com
+||tag.atom.gamedistribution.com^$xhr,redirect-rule=nooptext,1p
+! https://github.com/uBlockOrigin/uAssets/issues/15382
+@@||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect-rule,domain=html5.gamedistribution.com
+! https://github.com/uBlockOrigin/uAssets/issues/13814#issuecomment-1415669318
+html5.gamedistribution.com##+js(no-fetch-if, api)
+@@||cdn.cookielaw.org/*/OtAutoBlock.js$script,xhr,domain=html5.gamedistribution.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/13781
+! ||cdn.branch.io^$badfilter
+@@||cdn.branch.io/branch-latest.min.js$script,domain=watch.tataplay.com
+
+! https://forums.lanik.us/viewtopic.php?p=164436#p164436
+@@||ad.doubleclick.net/clk*travel*&destinationURL=$doc
+
+! unlock legit page simpletraffic. co
+||simpletraffic.co^$badfilter
+||simpletraffic.co^$3p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/vmcd4l/songstatscom_backend_domain_blocked_again/
+@@||data.songstats.com/api/v1/analytics/$xhr,1p
+
+! https://forums.lanik.us/viewtopic.php?t=47647-video-di-sky-incorporati-in-altre-pagine
+||4strokemedia.com^$3p,badfilter
+@@||4strokemedia.com^$script,xhr,domain=oasport.it
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=oasport.it
+@@||secure.quantserve.com/quant.js$script,domain=oasport.it
+oasport.it#@#.adv
+oasport.it#@#[id^="div-gpt-ad"]:style(width:1px!important;height:1px!important;min-width:1px!important;min-height:1px!important;margin:0!important;padding:0!important;overflow:hidden!important;opacity:0!important)
+! https://github.com/uBlockOrigin/uAssets/issues/16309
+@@||components2.rcsobjects.it/rcs_adv/*/distro/dfp/common/prebid$script,domain=video.gazzetta.it
+@@||c.amazon-adsystem.com/aax2/apstag.js$script,domain=video.gazzetta.it
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=video.gazzetta.it,redirect-rule=google-ima.js
+video.gazzetta.it##+js(set, google.ima.OmidVerificationVendor, {})
+video.gazzetta.it##+js(set, Object.prototype.omidAccessModeRules, {})
+
+! vice. com cookie banner reappear after every reload
+||sourcepoint.vice.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/13878
+@@||tags.tiqcdn.com/utag/bluestem/main/prod/utag.sync.js$script,domain=fingerhut.com
+@@||monetate.net^$script,xhr,domain=fingerhut.com
+
+! funny.pho. to cannot switch the language
+||hits.informer.com/log.php$image,domain=funny.pho.to,redirect-rule=1x1.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/13935
+factable.com##+js(set, googletag.cmd, {})
+factable.com##.puicontainer
+factable.com##.pohcontainer
+
+! https://github.com/uBlockOrigin/uAssets/issues/13938
+@@/prebid-ads/adsensebase.js$script,redirect-rule=prebid-ads.js,domain=darkreading.com
+
+! cname unlocking stream https://www.streamonfoot.xyz/77-rmc-en-ligne.html
+@@||streaming.adswizz.com^$media,domain=streamonfoot.xyz
+
+! affiliate.rakuten.co.jp broken
+||ba.afl.rakuten.co.jp^$badfilter
+||ba.afl.rakuten.co.jp^$3p
+
+! https://github.com/easylist/easylist/commit/9768261aea3ca545b7a4f9021c4721ff2aaa21a6#commitcomment-78591398
+beckershospitalreview.com##html,body:style(overflow: auto !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14051
+*$frame,domain=mcrypto.club|luckydice.net,redirect-rule=noopframe
+||cryptocoinsad.com/ads/show.php$frame,redirect-rule=noop.html
+
+! https://github.com/uBlockOrigin/uAssets/issues/14063
+thequint.com#@#._4xQrn
+thequint.com##._4xQrn:style(max-height:0px)
+thequint.com##span:has-text(ADVERTISEMENT)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14072
+@@||gstatic.*/recaptcha/
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/125072
+||wpfc.ml^$image,redirect-rule=1x1.gif,domain=thestoryexchange.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/14118
+||da-services.ch^$3p,badfilter
+
+! privacy settings broken on kleinanzeigen.de/gdpr
+@@||googletagmanager.com/gtm.js$script,redirect-rule=googletagmanager_gtm.js:5,domain=kleinanzeigen.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/14141
+! https://github.com/uBlockOrigin/uAssets/issues/14150
+! https://github.com/uBlockOrigin/uAssets/issues/15183
+@@||novelgames.com^$script,1p
+@@||cdn.intergi.com^$script,domain=novelgames.com
+@@||cdn.intergient.com^$domain=novelgames.com
+@@||cdn.intergient.com^$1p
+||novelgames.com/flashgames/*/banner_660x250.png
+*$image,domain=novelgames.com,redirect-rule=1x1.gif
+*$script,domain=novelgames.com,redirect-rule=noopjs
+*$xhr,domain=novelgames.com,redirect-rule=nooptext
+novelgames.com##+js(nano-sib, skipAdSeconds, , 0.02)
+novelgames.com###gameEtTopRight.commonEt:style(height: 0 !important;)
+novelgames.com###gamelistCategories:style(margin-bottom: auto !important;)
+novelgames.com##.gamelistGame.commonEt
+novelgames.com##div[id^="forums"][id*="Et"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/14148
+@@||scanurl.net^$ghide
+scanurl.net##.adsbygoogle
+
+! https://github.com/uBlockOrigin/uAssets/issues/14258
+||exponea.com^$badfilter
+||exponea.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/14251
+||assets.springserve.com^$media,domain=app.plex.tv,redirect=noopmp3-0.1s
+
+! https://github.com/uBlockOrigin/uAssets/issues/14382
+@@||holidaypark.de/sites/default/files/public/google_tag/*$script,1p
+@@||googletagmanager.com/gtm.js$script,domain=holidaypark.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/14400
+mitula.com.br#@#.adsList
+
+! https://github.com/uBlockOrigin/uAssets/issues/14393
+@@||mpsnare.iesnare.com/snare.js$script,domain=lenovo.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/14399
+dpp.org.tw#@#.ad_url
+
+! https://github.com/uBlockOrigin/uAssets/issues/14443
+@@||media.sailthru.com/composer/images$image,domain=link.square-enix-games.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/14445
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=radiomitre.cienradios.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/14454
+@@||d1z2jf7jlzjs58.cloudfront.net/p.js$script,domain=tg24.sky.it
+@@||parsely.com/keys/skytg24.it$script,domain=tg24.sky.it
+
+! https://github.com/uBlockOrigin/uAssets/issues/14458
+@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,redirect-rule=googletagservices_gpt.js:5,domain=olx.pt
+
+! https://github.com/uBlockOrigin/uAssets/issues/14484
+@@||cdn.intergi.com/hera/tyche.js$script,domain=raider.io
+@@||hb.vntsm.com/v3/live/ad-manager.min.js$script,domain=raider.io
+raider.io##.rio-zone--wrapper
+
+! https://github.com/uBlockOrigin/uAssets/issues/14490
+||lastpass.com/assets/js/analyticsjs.js$script,redirect=google-analytics.com/analytics.js,important
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/128061
+azby.fmworld.net##+js(no-xhr-if, /recommendations.)
+@@||images.taboola.com/taboola/image/fetch/$image,domain=azby.fmworld.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/14553
+nybooks.com#@#.top-ad-wrapper
+nybooks.com##.ad-spacing
+
+! https://github.com/uBlockOrigin/uAssets/issues/14546
+@@||cdn-ue1-prod.tsv2.amagi.tv/beacon$xhr,domain=watch.truecrimenetworktv.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/14584
+@@||google-analytics.com/analytics.js$script,redirect-rule=google-analytics.com/analytics.js:5,domain=xeroshoes.com
+@@||googletagmanager.com/gtag/js$script,redirect-rule=googletagmanager_gtm.js:5,domain=xeroshoes.com
+@@||googletagmanager.com/gtm.js$script,redirect-rule=googletagmanager_gtm.js:5,domain=xeroshoes.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/14596
+@@||googletagmanager.com/gtag/js$script,redirect-rule=googletagmanager_gtm.js:5,domain=myshows.me
+
+! https://github.com/easylist/easylist/issues/13078#issuecomment-1227428013
+/YandexAds.$badfilter
+/YandexMetric.$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/14609
+@@||googleads.github.io/videojs-ima/node_modules/video.js/dist/video.min.js$script,domain=climatempo.com.br
+@@||googleads.github.io/videojs-ima/node_modules/video.js/dist/video-js.min.css$css,domain=climatempo.com.br
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/128545
+@@||googletagservices.com/tag/js/gpt.js$script,redirect-rule,domain=thedailybeast.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/14693
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=ultimedia.com,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/14723
+tcsjerky.com##body.body-load:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14817
+filecrypt.co#@?#form > .protection.online ul > li:not(.buttons):-abp-has(> div:not(.circle_captcha))
+
+! https://github.com/uBlockOrigin/uBlock-issues/discussions/2264
+ehftv.com##.blackPlayer
+
+! https://github.com/uBlockOrigin/uAssets/discussions/14823
+thespruceeats.com#@#[data-ad-width]
+thespruceeats.com##.mntl-leaderboard-spacer
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/129795
+||baidu.com/*/track.gif?$image,redirect=1x1.gif,important,domain=jump2.bdimg.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/14877
+@@||assets.evolutionadv.it/violations/comingsoon.it.violations.js$script,domain=comingsoon.it
+@@||ads.pubmatic.com/AdServer/js/pwt/*/3021/pwt.js$script,domain=comingsoon.it
+*$script,domain=comingsoon.it,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/14878
+unrealengine.com##+js(no-xhr-if, /api/analytics)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/130017
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=zee5.com,redirect-rule=google-ima.js
+zee5.com##+js(set, Object.prototype.setDisableFlashAds, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14865
+@@||assets.adobedtm.com/*source.min.js$script,domain=msds.open.ac.uk
+
+! https://github.com/uBlockOrigin/uAssets/issues/14963
+@@||googletagmanager.com/gtag/*$script,domain=redx.com.bd
+
+! https://github.com/easylist/easylist/commit/a1dfdcb3158f463578bb9a5737934b95d5fe7025#commitcomment-84400982
+javcrave.com#@#.widget_custom_html
+
+! https://github.com/uBlockOrigin/uAssets/issues/13324
+! https://github.com/uBlockOrigin/uAssets/issues/15004
+! https://github.com/uBlockOrigin/uAssets/issues/17803
+@@||index.hr/thirdparty/brid/*$script,1p
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=index.hr
+@@||amazon-adsystem.com/aax2/apstag.js$script,domain=index.hr
+
+! https://www.netac.com/product/SSD-10 => broken product images
+||sohu.com/cityjson$script,domain=netac.com,redirect=noopjs,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/15086
+@@||soapps.net^*live/loader/counter.js$script
+
+! https://twitter.com/205serieslovema/status/1576555285417951233
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect-rule,domain=amachamusic.chagasi.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/15077#issuecomment-1261068202
+@@||amazon-adsystem.com/*/apstag.js$script,redirect-rule,domain=weather.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/xv9d2a/
+@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,redirect-rule,domain=honestjohn.co.uk
+
+! https://github.com/uBlockOrigin/uAssets/issues/15153
+@@||googletagmanager.com/gtag/js$script,redirect-rule,domain=contactpoints.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/15172
+@@||mxpnl.com/libs/mixpanel-*.min.js$domain=barracudanetworks.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/15211
+wco.tv##+js(no-xhr-if, api)
+
+! palatifini. it broken
+palatifini.it##.show.fade.modal-backdrop
+palatifini.it##body:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/13859#issuecomment-1277362585
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=raiplay.it
+
+! https://www.reddit.com/r/uBlockOrigin/comments/y3yeg4/
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=kotaku.com
+||imasdk.googleapis.com^$frame,domain=kotaku.com,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/15300
+@@||cmp.dmgmediaprivacy.co.uk/cmp/*$script,domain=gbnews.uk
+@@||cmp.dmgmediaprivacy.co.uk/*/vendor-list.json$xhr,domain=gbnews.uk
+@@||cmp.dmgmediaprivacy.co.uk/gdpr/*$xhr,domain=gbnews.uk
+
+! https://github.com/uBlockOrigin/uAssets/issues/15312
+dmzj.com##body:style(overflow: auto !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15351
+@@||pnp.co.za/pnpstorefront/_ui/shared/js/analyticsmediator.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/15437
+||encar.com/js/*/analytics.js$script,1p,redirect-rule=noop.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/15426
+@@||cdn.logrocket.io/LogRocket.min.js$script,domain=webappui.jobnimbus.com
+@@||cdn.logrocket.io/logger-1.min.js$script,domain=webappui.jobnimbus.com
+
+! z-lib home pages connections breakage
+/1pixel.php$badfilter
+/1pixel.php$domain=~1lib.domains|~singlelogin.app|~z-lib.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/15447
+@@||my.hrw.com/dashboard/js/workbench/utils/analytics.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/15435
+@@||google-analytics.com/analytics.js$script,redirect-rule,domain=youtube.videodeck.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/15502
+@@||pearson.com/osbrowserchecker/prd/thirdPartyCookie.html$frame,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/15402
+@@||xweb.instagram.com/ads/preferences/ad_topics/$frame,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/15408
+mail.google.com#@#div[aria-label="Ads"]
+
+! https://github.com/DandelionSprout/adfilt/issues/7#issuecomment-560023272
+! https://github.com/AdguardTeam/AdguardFilters/issues/144897
+! https://github.com/uBlockOrigin/uAssets/issues/15531
+@@||tra.scds.pmdstatic.net/pmd-browsertools/$script,domain=gala.fr
+@@||tra.scds.pmdstatic.net/$xhr,domain=gala.fr
+! https://github.com/uBlockOrigin/uAssets/issues/15531#issuecomment-1305952402
+@@||tra.scds.pmdstatic.net/sourcepoint/$script,domain=programme-tv.net
+@@||securepubads.g.doubleclick.net/gampad/ads$xhr,domain=programme-tv.net
+! https://www.voici.fr/tele/la-boite-a-secrets-le-geste-de-zaz-qui-a-decontenance-faustine-bollaert-zaptv-751722 broken video
+||d1z2jf7jlzjs58.cloudfront.net/p.js$script,redirect=noopjs,domain=voici.fr
+! https://www.reddit.com/r/uBlockOrigin/comments/11oi8jg/
+geo.fr##.ads
+@@||tra.scds.pmdstatic.net/sourcepoint/*/sourcepoint.min.js$script,domain=geo.fr
+@@||tra.scds.pmdstatic.net/advertising-core/*/core-ads.js$script,domain=geo.fr
+@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,domain=gala.fr|geo.fr|voici.fr
+@@||securepubads.g.doubleclick.net/gpt/pubads_impl_$script,domain=gala.fr|geo.fr|voici.fr
+gala.fr,geo.fr,voici.fr##+js(set, DD_RUM.addTiming, noopFunc)
+gala.fr,geo.fr,voici.fr##+js(no-xhr-if, doubleclick)
+gala.fr,geo.fr,voici.fr#@#[data-ads-core]
+
+! https://forums.lanik.us/viewtopic.php?t=47859-lemonde-fr
+@@||cmp.huffingtonpost.fr/js/huffpost.min.js$script,1p
+@@||cmp.huffingtonpost.fr/html/huffpost/wall-large.html?css=/css/huffpost/wall-large.min.css$xhr,1p
+@@||cmp.huffingtonpost.fr/api/consent$xhr,1p
+@@||cmp.lemonde.fr/js/lemonde.min.js$script,1p
+@@||cmp.lemonde.fr/html/lemonde/wall-tunnel-abo-essential.html?css=/css/lemonde/wall.min.css$xhr,1p
+@@||cmp.lemonde.fr/api/consent$xhr,1p
+lemonde.fr#@#.gdpr-lmd-wall
+
+! https://th4-app.taximail.com/campaign-detail/3#overview UI breakage
+@@||taximail.com/js/analytics.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/15552
+@@||assets.adobedtm.com/*.js$script,domain=accounts.o2.co.uk
+||assets.adobedtm.com/*source.min.js$script,domain=accounts.o2.co.uk,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/15561
+instagram.com#@#div[style="max-height: inherit; max-width: inherit;"]:has(span:has-text(Paid partnership with ))
+
+! https://github.com/uBlockOrigin/uAssets/issues/15647
+||wisepops.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/15635
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,3p,domain=ici.tou.tv
+
+! https://github.com/uBlockOrigin/uAssets/issues/15661
+@@||aniview.com/api/$script,xhr,domain=gamingbible.co.uk
+@@||player.avplayer.com/script/*/avcplayer.js$script,xhr,domain=gamingbible.com
+@@||micro.rubiconproject.com/prebid/dynamic/$script,xhr,domain=gamingbible.com
+*$script,redirect-rule=noopjs,domain=gamingbible.com
+*$xhr,redirect-rule=nooptext,domain=gamingbible.com
+gamingbible.com##[data-cypress="sticky-header"]
+gamingbible.com##[data-cypress="sticky-ads"]
+gamingbible.com##div[id] > .dfp-ad-unit:upward(1)
+
+! shavetape. cash(streamtape alias) download blocked
+*$popup,3p,domain=shavetape.cash,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/15715
+gloucestershirelive.co.uk##+js(set, chameleonVideo.adDisabledRequested, true)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15720
+/^https?:\/\/[0-9a-z]{8,}\.xyz\/.*/$3p,~media,domain=apiyoutube.cc|clicknupload.to|daddyhd.com|poscitech.click|sportcast.life,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/15744
+@@||abcmouse.com/*/analytics.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/15760
+@@||argos.co.uk/utag/utag.sync.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/15771
+||samash.com^$script,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/15768
+@@||google.com/adsense/search/ads.js$script,domain=diigo.com
+
+! https://forums.lanik.us/viewtopic.php?t=47902-join-megaphonetv-com-rej
+||join.megaphonetv.com^$3p,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/15608
+@@||video.qq.com/getvinfo$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/135819
+filelu.com#@#.banner_ads
+
+! https://github.com/uBlockOrigin/uAssets/issues/15880
+||arcgis.com/apps/instant/node_modules/templates-common-library/structuralFunctionality/telemetry/AppMeasurement.js$script,1p,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/15876
+/google-tag-manager.min.js$script,domain=511tactical.com,redirect-rule=googletagmanager_gtm.js
+
+! herz-fuer-tiere.de images hidden
+@@||herz-fuer-tiere.de^$cname
+
+! https://github.com/uBlockOrigin/uAssets/issues/15926
+@@||wikipedia.org/api/rest*$xhr,1p
+
+! zeenews.india.com videos broken by peter's /adguard mobile ads filter list
+@@||ads.pubmatic.com/AdServer/js/pwt$script,domain=zeenews.india.com
+
+! https://admin.thexyz.com/MyAccount/Profile breakage
+@@||admin.thexyz.com/javascript/services/analytics.js$script,domain=admin.thexyz.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/16022
+||esputnik.com^$3p,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/16052
+@@||id.flybuys.com.au/assets/scripts/fingerprint2.min.js$script,domain=id.flybuys.com.au
+
+! https://github.com/uBlockOrigin/uAssets/issues/16077
+@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,redirect-rule=googletagservices_gpt.js:5,domain=aibusiness.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/16070
+@@||nr-data.net^$domain=chaturbate.com
+@@||js-agent.newrelic.com^$script,domain=chaturbate.com
+
+! remove bait
+.io/ads/$badfilter
+
+! https://github.com/tofukko/filter/issues/79
+@@||googletagmanager.com/gtm.js$domain=buhitter.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/16091
+! https://github.com/uBlockOrigin/uAssets/issues/16265
+@@||discover.com/*/visitorAPI.js$script,1p
+@@||discover.com/*/AppMeasurement.js$script,1p
+@@||discover.com/*/AppMeasurement.min.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/16128
+@@||img.kleinanzeigen.de/api/$image,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/12112#issuecomment-1366134900
+*$script,3p,from=uqload.com,badfilter
+||opsktp.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/16137
+@@||hub.docker.com/*/repositories/plausible/analytics/tags/$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/16167
+||parsely.com^$badfilter
+||parsely.com^$3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/16177
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=gizmodo.com,redirect-rule=google-ima.js
+
+! https://github.com/uBlockOrigin/uAssets/pull/16191
+! broken by Peter's Lowe
+@@||mcs-va.tiktok.com/v1/user/webid$xhr
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/138848
+@@||tn.voyeurhit.com/contents/$image,domain=voyeurhit.tube
+
+! https://github.com/uBlockOrigin/uAssets/issues/16259
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=eitb.eus
+eitb.eus##.body--onPlayer--ads:remove-class(body--onPlayer--ads)
+
+! https://github.com/uBlockOrigin/uAssets/commit/66a1e58b63f86e73f0bf596b3cd4e82d4b6781d9
+||counter2.blog.livedoor.com^$badfilter
+||counter2.blog.livedoor.com^$image
+
+! bad filter from CZE, SVK: EasyList Czech and Slovak breaking
+! topserialy. si, sledujfilmy. io etc
+#@#[id^="etarget"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/16286
+arsiv.mackolik.com##+js(set, AdmostClient, {})
+
+! https://github.com/easylist/easylist/issues/14533
+@@||content.gap.com/fp/*.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/16304
+@@||cohesion.bankrate.com/cohesion/cohesion-latest.min.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/16328
+||mycourses.pearson.com/shared/static/*/component/ga.min.js$script,1p,redirect=google-analytics.com/analytics.js,important
+
+! https://www.reddit.com/r/uBlockOrigin/comments/10cx3sw/
+/img/ads/Spinner.png$image,redirect-rule=1x1.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/16394
+||coveo.com^$script,domain=basspro.com,redirect-rule=noopjs
+
+! fix https://pointmall.rakuten.co.jp/gacha
+@@||googletagmanager.com/gtm.js$domain=pointmall.rakuten.co.jp
+
+! https://www.reddit.com/r/uBlockOrigin/comments/10i8c3u/
+@@||cdn.blueconic.net/akc.js$script,domain=akc.org
+@@||akc.blueconic.net^$image,script,xhr,domain=akc.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/16464
+||permutive.com^$badfilter
+||permutive.com^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/138429
+instagram.com#@?#article[role="presentation"] > div[style]:-abp-has(span:-abp-contains(/Anzeige|Gesponsert|Sponsored|Geborg|Sponzorováno|Sponsoreret|Χορηγούμενη|Publicidad|Sponsoroitu|Sponsorisé|Bersponsor|Sponsorizzato|広告|광고|Ditaja|Sponset|Gesponsord|Sponsorowane|Patrocinado|Реклама|Sponsrad|ได้รับการสนับสนุน|May Sponsor|Sponsorlu|赞助内容|贊助|প্রযোজিত|પ્રાયોજિત|स्पॉन्सर्ड|Sponzorirano|ಪ್ರಾಯೋಜಿತ|സ്‌പോൺസർ ചെയ്‌തത്|पुरस्‍कृत|प्रायोजित|ਪ੍ਰਾਯੋਜਿਤ|මුදල් ගෙවා ප්‍රචාරය කරන ලදි|Sponzorované|விளம்பரதாரர்கள்|స్పాన్సర్ చేసింది|Được tài trợ|Спонсорирано|Commandité|Sponsorizat|Спонзорисано/))
+
+! https://github.com/uBlockOrigin/uAssets/issues/16515
+@@||uicdn.com/shared/sentry/*/bundle.min.js$script,domain=gmx.co.uk|gmx.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/14641
+@@||cdn.bluebillywig.com/apps/player/*/admanager$script,domain=digital-photography-school.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/16571
+@@||googletagmanager.com/gtm.js$script,domain=riteaid.com
+@@||googletagmanager.com/gtag/js?id=G$script,domain=riteaid.com
+riteaid.com##^html > body:not(.catalogsearch-result-index):upward(1) > head > script:has-text(googletagmanager)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16569
+@@||js.monitor.azure.com/scripts/$script,domain=efilecabinet.net
+
+! unbreak sign up on NSFW sites
+@@/signup.php?mode=async&action=show_security_code$image,1p
+
+! https://github.com/easylist/easylist/issues/14805
+! https://github.com/uBlockOrigin/uAssets/issues/16606
+@@/akam/13/*$script,xhr,1p,domain=easyjet.com|ing.nl
+
+! https://github.com/uBlockOrigin/uAssets/issues/16071#issuecomment-1418675044
+@@||collector-*.px-client.net/b/g$xhr,domain=www.crunchbase.com
+
+! https://www.radiox.co.uk/festivals/parklife-2023-headliners-line-up-tickets-stage-times/ audio breakage
+@@||googletagmanager.com/gtm.js$script,domain=www.radiox.co.uk
+radiox.co.uk##^body:not(:has(#remixd-audio-player)) > script:has-text(googletagmanager)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/10x6sp8/
+! Home page live video breakage
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=yaktrinews.com,redirect-rule=google-ima.js
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,domain=yaktrinews.com
+||dai.google.com/*/id3-events.json
+
+! https://github.com/orgs/uBlockOrigin/teams/ublock-filters-volunteers/discussions/459/comments/49
+/1.gif?$badfilter
+/2.gif?$badfilter
+/3.gif?$badfilter
+! distro.tv
+||i.jsrdn.com/i/1.gif?
+! www.d1spas.com
+||qbk1.com/1.gif?
+! news.cn
+||webd.home.news.cn/1.gif?
+
+! https://github.com/uBlockOrigin/uAssets/issues/16694
+@@||app.link^$script,domain=fluz.app
+@@||api2.branch.io/v1/open$xhr,domain=fluz.app
+
+! https://wnynewsnow.com/2023/02/10/substance-abuse-obesity-concerns-top-chautauqua-county-health-assessment/ video breakage
+wnynewsnow.com#@#.ez-video-wrap
+@@||videosvc.ezoic.com/play$xhr,domain=wnynewsnow.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/112yprq/
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=mathgames.com,redirect-rule=google-ima.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/16765
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=tunegenie.com,redirect-rule=google-ima.js
+tunegenie.com##.adcontainer
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/142640
+itmedia.co.jp###ulCommentWidget[style*="display"]:style(display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16786
+@@||ftb.ca.gov/js/webtrends.min.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/16801
+@@||wordcounter.icu^$cname
+
+! https://github.com/uBlockOrigin/uAssets/issues/16827
+jacksonguitars.com##+js(set, analytics, {})
+
+! https://github.com/uBlockOrigin/uAssets/issues/16850
+@@||manchestereveningnews.co.uk^$xhr,script,1p
+@@||mirror.co.uk^$script,xhr,1p
+@@/@trinitymirrordigital/withnail/*prebid$script,xhr,1p
+@@||bcp.crwdcntrl.net/*/data$xhr
+@@||tags.crwdcntrl.net^$script,domain=dailystar.co.uk|liverpoolecho.co.uk|football.london|devonlive.com|buzz.ie|inyourarea.co.uk|cornwalllive.com|coventrytelegraph.net|dublinlive.ie|glasgowlive.co.uk|kentlive.news|essexlive.news|lincolnshirelive.co.uk|insider.co.uk|bathchronicle.co.uk|birminghammail.co.uk|cheshire-live.co.uk|corkbeo.ie|crewechronicle.co.uk|croydonadvertiser.co.uk|dailypost.co.uk|dailyrecord.co.uk|derbytelegraph.co.uk|edinburghlive.co.uk|examinerlive.co.uk|gazettelive.co.uk|getreading.co.uk|getsurrey.co.uk|grimsbytelegraph.co.uk|hampshirelive.news|hulldailymail.co.uk|irishmirror.ie|liverpool.com|mylondon.news|nottinghampost.com|rossendalefreepress.co.uk|southportvisiter.co.uk|staffordshire-live.co.uk|stokesentinel.co.uk|walesonline.co.uk
+
+! https://github.com/easylist/easylist/issues/15021
+||googleadservices.com/pagead/conversion.js$script,redirect=noop.js,domain=ncsoft.jp,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/16883
+@@||matomo.paizo.com/piwik.js$1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/16891
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=lifehacker.com
+@@||pubads.g.doubleclick.net/gampad/ads*lifehacker$xhr,domain=imasdk.googleapis.com
+||googlevideo.com/videoplayback?expire$media,domain=lifehacker.com,redirect=noopmp3-0.1s
+
+! https://github.com/uBlockOrigin/uAssets/issues/16931
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=doubtnut.com,redirect=google-ima.js,important
+||api.doubtnut.com/v2/web-landing/web-ads-info$xhr,redirect=nooptext
+
+! Event manager
+@@||ads-api.twitter.com^$xhr,domain=analytics.twitter.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/16961
+||appcdn01.xyz^$badfilter
+
+! https://github.com/easylist/easylist/issues/15018
+! https://github.com/uBlockOrigin/uAssets/issues/17578
+! https://github.com/AdguardTeam/AdguardFilters/issues/148311
+||connatix.com^$badfilter
+||connatix.com^$3p
+||connatix.com^$3p,removeparam=cid
+@@||cd.connatix.com/connatix.player.js$3p,script,domain=accesousa.com|accuweather.com|adweek.com|bellinghamherald.com|bnd.com|bradenton.com|centredaily.com|charlotteobserver.com|easternstandardtimes.com|elnuevoherald.com|flkeysnews.com|fresnobee.com|heraldonline.com|heraldsun.com|hollywoodreporter.com|idahostatesman.com|indiewire.com|islandpacket.com|interestingengineering.com|kansas.com|kansascity.com|kentucky.com|ledger-enquirer.com|loot.tv|macon.com|mahoningmatters.com|mcclatchydc.com|mercedsunstar.com|miamiherald.com|modbee.com|myrtlebeachonline.com|newsobserver.com|reuters.com|sacbee.com|sanluisobispo.com|star-telegram.com|sunherald.com|thenewstribune.com|theolympian.com|thestate.com|tri-cityherald.com|variety.com
+hollywoodreporter.com#@#.cnx-player-wrapper
+hollywoodreporter.com#@#[id^="jwplayer"]
+@@||cds.connatix.com/p/*/connatix.player.$3p,script
+@@||cds.connatix.com/p/*/player.css$3p,css
+@@||connatix.com/elements/*/cnx-lead-style.css$3p,css
+@@||capi.connatix.com/core/pls$3p,xhr
+@@||img.connatix.com/pid-$3p,image
+@@||vid.connatix.com/pid-$3p,media,xhr
+@@||cds.connatix.com/p/*/elements.ui.$3p,script
+@@||cds.connatix.com/*/hls$script,3p
+! https://www.reddit.com/r/uBlockOrigin/comments/1837a7a/video_not_playing_on_kansascom/
+@@||cds.connatix.com/p/*/cSyncRemoteEntry.js^$3p,script
+#@#.wps-player-wrap
+! https://github.com/uBlockOrigin/uAssets/issues/17646
+@@||img.connatix.com/*.jpg$3p,image,domain=accuweather.com
+! https://www.thestate.com/sports/college/university-of-south-carolina/usc-baseball/article276291411.html no need connatix
+bellinghamherald.com,bnd.com,bradenton.com,centredaily.com,charlotteobserver.com,flkeysnews.com,fresnobee.com,heraldonline.com,heraldsun.com,idahostatesman.com,islandpacket.com,kansas.com,kansascity.com,kentucky.com,ledger-enquirer.com,macon.com,mahoningmatters.com,mcclatchydc.com,mercedsunstar.com,miamiherald.com,modbee.com,myrtlebeachonline.com,newsobserver.com,sacbee.com,sanluisobispo.com,star-telegram.com,sunherald.com##^html:not(:has(video)) > head > script:has-text(connatix.com)
+loot.tv##^html:not(:has(#connatixPlayerID)) > head > script[src*="connatix"]
+thestate.com##^html > head > script:has-text(connatix.id):upward(1) > script:has-text(window.cnx)
+variety.com##^html > head > link[rel="canonical"]:not([href*="/video/"]):upward(1) > script[src*="connatix"]
+
+! connatix.com recommended articles/videos
+! https://github.com/uBlockOrigin/uAssets/issues/10867
+@@||cd.connatix.com/connatix.playspace.js^$script,3p,domain=adweek.com
+@@||cds.connatix.com/p/*/connatix.playspace.dc.js^$script,3p,domain=adweek.com
+@@||cds.connatix.com/p/*/connatix.playspace.css^$css,3p,domain=adweek.com
+@@||connatix.com/core/story^$xhr,method=post,3p,domain=adweek.com
+||adweek.com^$removeparam=traffic_source
+! https://github.com/uBlockOrigin/uAssets/issues/20200
+@@||cds.connatix.com/*/cSyncRemoteEntry.js$script,domain=accuweather.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17000
+mediaite.com#@#.adthrive-video-player
+mediaite.com##.adthrive-video-player:style(padding-bottom: 0 !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/9807#issuecomment-1451781619
+@@||googletagmanager.com/gtag/js$script,domain=independentespanol.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17011
+@@||api.aws.parking.godaddy.com/v1/parking/landers/$xhr
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/144470
+@@||rt.rtoaster.jp/Rtoaster.js$script,domain=jreastmall.com
+
+! unbreak sagicheck.jp - checking bad url pattern triggers strict-blocking
+@@||sagicheck.jp/jp/check/$doc
+
+! https://github.com/uBlockOrigin/uAssets/issues/17071
+||lightning.cnn.com/launch/$script,redirect-rule=noopjs
+
+! https://www.reddit.com/r/uBlockOrigin/comments/11lwhym/
+@@||catchup.thisisdax.com/*.m4a$media,domain=globalplayer.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17124
+||scandichotels.com/Static/js/tracking/tracking-data-init.js^$script,1p,important
+scandichotels.com##+js(set, datalayer, [])
+
+! https://github.com/uBlockOrigin/uAssets/pull/17134
+muropaketti.com##body.noImages .content img:style(display: inline-block !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17168
+@@||sa.etp-prod.com/analytics.js/v*/analytics.min.js$script,domain=vrv.co
+
+! https://github.com/uBlockOrigin/uAssets/issues/15628
+@@||partner-api.sddan.com/api/*/public/partner/$xhr,domain=6play.fr
+
+! unbreaking PageViews widget on blogspot
+@@||blogspot.com/b/stats$xhr,1p
+
+! TV-Program information can't be retrieved (Lowe's list)
+! @@||securepubads.g.doubleclick.net/pagead/ppub_config$xhr,domain=telsu.fi
+! @@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,domain=telsu.fi
+! @@||securepubads.g.doubleclick.net/gpt/pubads_impl_$script,domain=telsu.fi
+
+! https://github.com/uBlockOrigin/uAssets/issues/17230
+@@||martech.condenastdigital.com/lib/martech.js$script,domain=newyorker.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17231
+||trust-provider.com^*/trustlogo.js$3p,badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/8240
+@@||myntra.com/beacon/user-data^$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/17228#issuecomment-1475997052
+@@*google*$script,frame,xhr,domain=kulturalnemedia.pl
+
+! https://github.com/uBlockOrigin/uAssets/issues/17254
+@@||api.calven.app/analytics/$xhr,domain=calven.app|calven.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/146517
+@@||googletagmanager.com/gtm.js$script,domain=nespresso.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17322
+@@||securepubads.g.doubleclick.net/pagead/managed/js/gpt/*/pubads_impl.js$script,domain=mediaite.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/126wfiw/
+jayisgames.com##.widget-topad:style(padding-bottom: 20px !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/146946
+@@||fpnpmcdn.net/v*/loader$script,domain=app.writesonic.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/1287czd/
+*$image,redirect-rule=1x1.gif,domain=go-girl.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/147113
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=pac-12.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/147042
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=vtvgiaitri.vn,redirect-rule=google-ima.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/17388
+stylist.co.uk##+js(set, Object.prototype.isInitialLoadDisabled, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17384
+hornoxe.com#@#div.post:has(a[href^="https://www.amazon.de/"])
+hornoxe.com##.ivycat-post:has(a[href^="https://www.amazon.de/"])
+
+! https://github.com/uBlockOrigin/uAssets/issues/17439
+@@||securepubads.g.doubleclick.net/pagead/managed/js/gpt/*/pubads_impl.js$script,domain=jn.pt
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/147510
+@@||securepubads.g.doubleclick.net/pagead/managed/js/gpt/*/pubads_impl.js$script,domain=scotsman.com
+scotsman.com##[class*="AdContainer"]
+scotsman.com##[class*="AdLoading"]
+scotsman.com##[class*="Ads__Container"]
+scotsman.com##[class*="Billboard__Root"]
+scotsman.com##^html:not(:has([class^="Dailymotion__Wrapper"])) > head > script:has-text(gptScript)
+
+! https://github.com/tofukko/filter/issues/83
+@@||taboola.com/magazine/$domain=taboolanews.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17498
+dark-gaming.com##+js(no-xhr-if, lr-ingest.io)
+
+! https://twitter.com/forestone05/status/1644686599500996608
+@@||user.userguiding.com/sdk/identify$xhr,domain=xaris.ai
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/120883
+||nettix.fi/*/nettiauto_analytics.js$script,domain=nettiauto.com,important
+nettiauto.com##+js(set, listingGoogleEETracking, noopFunc)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/12hgnfo/
+@@||simcotools.app/assets/adsense-*.js$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/12hwt0e/
+||startpage.com/sp/adsense/$script,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/17532
+@@||api.aws.parking.godaddy.com/*/domains/*$xhr,3p
+
+! https://github.com/uBlockOrigin/uAssets/issues/17535
+thaiairways.com##+js(set, dcsMultiTrack, noopFunc)
+thaiairways.com##+js(set, urlStrArray, noopFunc)
+||thaiairways.com/static/common/js/wt_js/webtrends.min.js$script,1p,important
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/148109
+@@||sf.ezoiccdn.com/ezoimgfmt/$image,domain=kosmofoto.com
+@@||sf.ezoiccdn.com/ezossp/https/kosmofoto.com/_static/$script,domain=kosmofoto.com
+@@||sf.ezoiccdn.com/ezossp/https/kosmofoto.com/wp-content/$script,domain=kosmofoto.com
+@@||sf.ezoiccdn.com/ezossp/https/kosmofoto.com/wp-includes/$script,domain=kosmofoto.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/148089
+@@||miclaro.com.gt/assets/analytics.*.js$script,1p
+@@||tags.bkrtx.com/js/bk-coretag.js$script,domain=miclaro.com.gt
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/148251
+doodle.com#@#.AdsSlot
+doodle.com#@#.AdsLayout
+doodle.com##.AdsLayout__top-container
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/148485
+||hager.com/*/youtubeblocker.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/17649
+@@||promodarceky.sk/kategorie/reklamne*$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/17650
+||bing.com/rewardsapp/reportactivity?$badfilter
+||bing.com/geolocation/write?$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/17653
+||cdn.onesignal.com^$badfilter
+
+! sho.com broken search
+||sho.com/www/sho/lib/omniture/AppMeasurement.js$xhr,1p,redirect-rule=noop.js
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/148618
+cerbahealthcare.it##+js(set, pa, {})
+cerbahealthcare.it##+js(set, Object.prototype.setConfigurations, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/148781
+! https://github.com/uBlockOrigin/uAssets/issues/17685
+@@||googletagmanager.com/gtm.js$script,domain=dzonline.de|marveloptics.com|wn.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/17697
+@@||securepubads.g.doubleclick.net/pagead/managed/js/gpt/*/pubads_impl.js$script,domain=today.line.me
+
+! https://indianexpress.com/login/ breakage
+@@||ua.indianexpress.com/api/geoip/resolve$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/17708
+@@||googletagmanager.com/gtm.js$script,domain=radio-canada.ca
+
+! https://github.com/uBlockOrigin/uAssets/issues/17633
+@@||static.chartbeat.com^$domain=repubblica.it
+
+! unbreak sugoroku64.ad-link.jp (account required)
+||ad-link.jp/sugoroku64/static/img/promotion_5/spacer.gif$image,redirect-rule=1x1.gif,domain=sugoroku64.ad-link.jp
+
+! https://github.com/uBlockOrigin/uAssets/issues/17729
+securegames.iwin.com##+js(no-xhr-if, /gtm.js)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17733
+pcwelt.de#@#a[href^="https://pvn.mediamarkt.de/"]
+pcwelt.de#@#a[href^="https://pvn.saturn.de/"]
+
+! wgplayer breakages
+! https://github.com/AdguardTeam/AdguardFilters/issues/143493
+! games
+@@||scylla.wgplayer.com/f_webp/*$image
+@@||universal.wgplayer.com/tag/$script,domain=brightygames.com|eminiclip.ro|sisigames.com|yoho.games
+@@||wgplayer.com/*/wgAds.$script,domain=brightygames.com|eminiclip.ro|sisigames.com|yoho.games
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=brightygames.com|eminiclip.ro|sisigames.com|yoho.games
+brightygames.com,yoho.games##^html > head > meta[property="og:url"]:not([content*="/games/"], [content*="/play/"]):upward(1) > script:has-text(wgplayer)
+eminiclip.ro##^html:not(:has(#thegame)) > head > script:has-text(wgplayer)
+sisigames.com##^#index-games:upward(html) > head > script:has-text(wgplayer)
+! videos
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=canvids.com
+@@||afv.wgplayer.com/*/wgPlayer.js$script,domain=canvids.com
+@@||afv.wgplayer.com/*/conf.json$xhr,domain=canvids.com
+
+! yollamedia breakages - games
+@@||portal.cdn.yollamedia.com/storage/$script,domain=pozirk.com
+pozirk.com##^html:not(:has(iframe#game)) > head > script[src*="yollamedia.com"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/143476
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=cargames.com,redirect-rule=google-ima.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/17752
+sensacine.com##+js(aopr, JadIds)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/149223
+! https://github.com/AdguardTeam/AdguardFilters/issues/149624
+ewrc-models.com,ewrc-results.com#@#.cardAd
+
+! https://www.news8000.com/ anti-adb and homepage video breakage
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=news8000.com
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,domain=news8000.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/143292
+tiendaenlinea.claro.com.ni##+js(set, Object.prototype.bk_addPageCtx, noopFunc)
+tiendaenlinea.claro.com.ni##+js(set, Object.prototype.bk_doJSTag, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17810
+||cs.co^$badfilter
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/149499
+delta.com#@#.adv-container
+
+! https://github.com/uBlockOrigin/uAssets/issues/17836
+||shop.motorolasolutions.com/msi-files/libs/dynatrace.js$script,redirect-rule=noopjs,from=shop.motorolasolutions.com
+||shop.motorolasolutions.com/msi-files/page-tags/head/dynatrace-loader.js$script,redirect-rule=noopjs,from=shop.motorolasolutions.com
+
+! To counter `statcounter.com` in Peter Lowe's
+! https://github.com/uBlockOrigin/uAssets/commit/1142bef68ee287d27f6191c433ff8491570b6612
+||statcounter.com^$badfilter
+||statcounter.com^$3p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/142003
+vindobona.org#@#.ads_footer
+vindobona.org##.adZoneM
+vindobona.org##.adZonePC
+vindobona.org##.sponsored
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/141963
+@@||lngtd.com/ehftv_ros.js$script,domain=ehftv.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/17891
+@@||analytics.google.com^$domain=firebase.google.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/16128
+@@||kleinanzeigen.de^$ghide
+kleinanzeigen.de###liberty-vip-billboard
+/images/ad/*$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/17946
+decathlon.in##body:style(opacity: 1 !important;)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/150232
+hihonor.com#@#.ad-section
+hihonor.com#@#.ad-wrap
+
+! https://github.com/uBlockOrigin/uAssets/issues/17976
+@@||cacheorcheck.mopinion.com/survey/public/json-config$xhr,domain=findmystreet.co.uk
+@@||collect.mopinion.com/assets/surveys/*/js/survey.min.js$script,domain=findmystreet.co.uk
+@@||deploy.mopinion.com^$script,xhr,domain=findmystreet.co.uk
+@@||googletagmanager.com/gtm.js$script,domain=findmystreet.co.uk
+
+! https://filelu.com/madwieowurdk incorrect hiding
+filelu.com#@#.banner_ads:not(:empty)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18014
+@@||click.allkeyshop.com/*&source=www.allkeyshop.com$doc
+*$1p,inline-script,script,domain=click.allkeyshop.com
+click.allkeyshop.com##+js(refresh-defuser)
+
+! https://github.com/uBlockOrigin/uAssets/issues/17923
+@@||autocomplete.clearbit.com^$xhr
+
+! https://github.com/uBlockOrigin/uAssets/issues/18048
+neilpatel.com##+js(no-xhr-if, ip-api)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/150818
+@@||cdn.logly.co.jp^$image,domain=www.asahi.com
+
+! https://jbbs.shitaraba.net/bbs/read.cgi/internet/25463/1618326670/156
+@@||dti.ne.jp/cgi-bin/Count.cgi?$image,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/150912
+@@||googletagmanager.com/gtm.js$script,domain=tele2.ee
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/138457
+@@||tags.tiqcdn.com/utag/aaa/main/prod/utag.sync.js$script,domain=apps.calif.aaa.com
+||tags.tiqcdn.com/utag/aaa/main/prod/utag.js$script,domain=aaa.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/138092
+iphoneincanada.ca#@#a[href^="https://click.linksynergy.com/fs-bin/"]
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/137631
+javgg.net#@#.home_iframead
+javgg.net##.home_iframead > iframe:upward(1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18188
+||braze.eu^$badfilter
+
+! https://github.com/easylist/easylist/issues/16004
+@@||support.microsoft.com/supportformslib/oneds/dist/ms.analytics-web-
+
+! https://github.com/uBlockOrigin/uAssets/issues/18196
+||success.act-on.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/18212
+/tagcommander.$badfilter
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/151654
+@@||mark.isbank.com.tr^$script,image,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/151554
+@@||proton.me/*/google-ads-$image,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/151657
+tieba.baidu.com##+js(set, passFingerPrint, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/151774
+@@||analytics-*.clickdimensions.com/*/pages/$frame,domain=crm.digital.nhs.uk
+
+! https://github.com/uBlockOrigin/uAssets/issues/16440
+@@||h-microsoft.online-metrix.net^$xhr,domain=ave9858.github.io|massgrave.dev|docs.atlasos.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/17621#issuecomment-1567160350
+sofascore.com#@#[display^="block,none"]
+sofascore.com#@#[display^="none,none"]
+sofascore.com##.adUnitBox
+
+! https://github.com/uBlockOrigin/uAssets/issues/18322
+! too broad
+/mixpanel.$domain=~mixpanel.com,badfilter
+
+! https://linktr.ee/admin/settings breakage
+linktr.ee##+js(set, DD_LOGS, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18336
+/webTracking.$domain=~webtracking.girard-agediss.com,badfilter
+/webtracking.min.js
+||qualzz.com/assets/trackingScript/webtracking.js
+||webtracking.fe.union-investment.de^
+
+! https://github.com/uBlockOrigin/uAssets/issues/9764
+@@||imasdk.googleapis.com/pal/sdkloader/pal.js$script,domain=pluto.tv
+
+! https://github.com/uBlockOrigin/uAssets/issues/18345
+metastats.net##.col-md-6:style(height: 150px !important;)
+metastats.net###page-wrapper > div.row:nth-of-type(1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18357
+@@||4chan.org/adv/$image,domain=boards.4channel.org
+
+! https://github.com/uBlockOrigin/uAssets/issues/18296
+! To counter `siteintercept.qualtrics.com` in PL list
+||siteintercept.qualtrics.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/18410
+*$script,domain=abcya.com,redirect-rule=noopjs
+
+! https://github.com/uBlockOrigin/uAssets/issues/18441
+||googletagmanager.com/gtag/js$script,redirect-rule=noop.js:10,domain=scobel.pasaz24.pl
+
+! https://www.nj.com/news/2023/06/scammed-swindled-or-mistreated-see-if-your-nj-county-will-take-on-your-consumer-problem.html paywall hidden
+@@||googletagmanager.com/gtm.js$script,domain=nj.com
+@@||apps.sophi.io/latest/al-nj.segments.min.js$script,domain=nj.com
+@@||nj.com/DG/DEFAULT/rest/rpc/$xhr,1p
+www.nj.com##^html > head > :is(meta[name="subscriber_only"][content="false"], meta[property="og:url"]:not([content*=".html"])):upward(html) script:has-text(/googletagmanager|window\.sophi/)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/147jvgy
+goku.sx##.st-hidden:remove-class(st-hidden)
+goku.sx##.st-btn:not(.st-first):style(display: inline-block !important; min-width: 50px !important; width: 50px !important;)
+goku.sx##.st-btn > img:style(margin: auto !important; display: block !important;)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18481
+@@||cloudflare.com/cdn-cgi/trace$xhr,domain=mgnet.xyz
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/153437
+@@||googletagmanager.com/gtm.js$script,domain=akbank.com
+@@||useinsider.com^$domain=akbank.com
+||log.api.useinsider.com^$domain=akbank.com,important
+||hit.api.useinsider.com^$domain=akbank.com,important
+||inference.api.useinsider.com^$domain=akbank.com,important
+||useinsider.com^$image,redirect-rule=2x2.png,domain=akbank.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/153392
+@@||googletagmanager.com/gtm.js$script,domain=nrj-play.fr
+
+! https://github.com/uBlockOrigin/uAssets/issues/18510
+@@||www.googletagmanager.com/gtm.js$script,domain=nykaa.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/18512
+@@||cdn.pendo.io/agent/static/*$script,domain=recruiting.adp.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/153977
+@@||bat.bing.com/bat.js$script,domain=northwell.edu
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/154110
+@@||cdn.segmentify.com^$css,image,script,domain=mediamarkt.com.tr
+@@||img.segmentify.com^$image,domain=mediamarkt.com.tr
+@@||per2.segmentify.com^$xhr,domain=mediamarkt.com.tr
+@@||googletagmanager.com/gtm.js$script,domain=mediamarkt.com.tr
+||googletagmanager.com/gtm.js?*&l=dataLayer$script,domain=mediamarkt.com.tr,important
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/154297
+@@||vbt.io^$css,image,domain=landing.davidho.sg
+
+! https://www.reddit.com/r/uBlockOrigin/comments/14er5u6/
+@@||challenges.cloudflare.com/turnstile/$3p,script
+
+! https://github.com/uBlockOrigin/uAssets/issues/18576
+||analytics.google.com^$badfilter
+||analytics.google.com^$3p
+@@||google-analytics.com^$domain=analytics.google.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/18638
+||click.aliexpress.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/18674
+/statspage.$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/18684
+||sqrt-5041.de^$xhr,domain=joyn.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/18713
+||yext-pixel.com/store_pagespixel^$xhr,redirect=1x1.gif,domain=vippetcare.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/18715
+||googletagmanager.com/gtm.js$important,domain=fandom.com
+||cdn.optimizely.com/js/$important,domain=fandom.com
+fandom.com##+js(set, optimizely, {})
+fandom.com##+js(set, optimizely.initialized, true)
+
+! Wish list button doesn't work (EP and Lowe)
+! https://www.festool.com/products/new-products/new-products/576894---txs-18-basic
+! https://www.festoolcanada.com/products/systainer,-sortainer-and-systainer-port/systainer/577346---sys3-df-m-137
+@@||googletagmanager.com/gtm.js$script,domain=festool.*|festoolcanada.com|festoolusa.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/18725
+uqload.co#@#+js(abort-current-script, document.createElement, break;case $.)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18720
+@@||areaclienti.generali.it/AreaClienti/plugins/dynatrace-cordova-plugin/$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/18722
+eksisozluk111.com##.ad-banner:remove()
+
+! Broken by Lowe's list
+! https://github.com/uBlockOrigin/uAssets/issues/18734
+@@||googletagmanager.com/gtm.js$script,domain=aruba.it
+
+! https://github.com/uBlockOrigin/uAssets/issues/18735
+@@||googletagmanager.com/gtm.js$script,domain=pec.it
+
+! Lowe break content loading & customer assistant tool
+@@||googletagmanager.com/gtm.js$script,domain=lippu.fi
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/155149
+@@||koshien-live.net/*/adtag.xml$xhr,domain=vk.sportsbull.jp
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect=google-ima.js,domain=vk.sportsbull.jp,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/18800
+/spacer.gif?$image,redirect-rule=1x1.gif
+
+! https://github.com/uBlockOrigin/uAssets/issues/18795
+||googleoptimize.com/optimize.js$domain=grasshopper.com,important
+grasshopper.com##+js(set, google_optimize, {})
+grasshopper.com##+js(set, google_optimize.get, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/16742
+||epson.com.cn/common/new/js/tracking_code.js$1p,important
+epson.com.cn##+js(set, _gsq, {})
+epson.com.cn##+js(set, _gsq.push, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18859
+consali.com,topstreamfilm.io#@#a[href^="https://consali.com/"]
+
+! https://github.com/uBlockOrigin/uAssets/issues/18853
+yandex.*#@#+js(aopr, Object.prototype.renderDirect):matches-path(/\/(?:weather\/|pogoda\/|hava\/)/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/18873
+||script-at.iocnt.net/iam.js$domain=oe24.at,important
+oe24.at##+js(set, iom, {})
+oe24.at##+js(set, iom.c, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/155647
+@@||craftaro.com/build/assets/GoogleAd-$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/155632
+||nextday.media^$script,redirect-rule=noopjs,domain=gpblog.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/14uixq0/spotim_problems_again/jra8ilr/
+@@||jill.fc.yahoo.com/v1/client/js$script,domain=techcrunch.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/156401
+platform.autods.com##+js(set, _conv_q, {})
+platform.autods.com##+js(set, _conv_q.push, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/156357
+indiatimes.com#@#div:has(> div[id^="div-gpt-ad-"])
+indiatimes.com##.nonAppView > div div[class]:not([id]) > div[id^="div-gpt-ad"]:upward(1)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19045
+! https://github.com/uBlockOrigin/uAssets/issues/19096
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,domain=kcra.com|wcvb.com
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=kcra.com|wcvb.com
+kcra.com,wcvb.com##+js(set, google.ima.settings.setDisableFlashAds, noopFunc)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/1523lt8/videos_not_playing_on_wionewscom/
+@@||ads.pubmatic.com/AdServer/js/pwt/*/pwt.js$script,domain=wionews.com
+wionews.com##^link[rel="canonical"]:not([href^="https://www.wionews.com/videos/"]) ~ script#pwt_script
+
+! https://github.com/uBlockOrigin/uAssets/issues/14619#issuecomment-1640036726
+@@||securepubads.g.doubleclick.net/pagead/managed/js/gpt/*$script,domain=moviepilot.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/19067
+@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,domain=filmstarts.de
+@@||securepubads.g.doubleclick.net/pagead/managed/js/gpt/*/pubads_impl.js$script,domain=filmstarts.de
+@@||securepubads.g.doubleclick.net/gampad/ads$xhr,domain=filmstarts.de
+@@||cdn.lib.getjad.io/library/*$script,domain=filmstarts.de
+@@||cdn.lib.getjad.io/prebid/*$script,domain=filmstarts.de
+@@||amazon-adsystem.com/*/apstag.js$script,redirect-rule=amazon_apstag.js:5,domain=filmstarts.de
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/156669
+@@||hs.eloqua.com^$frame,domain=anthology.com
+
+! https://www.reddit.com/r/uBlockOrigin/comments/157utus/articles_on_mindbodygreencom_wont_load/
+@@||mindbodygreen.com/ads-leaderboard-ad-$script,domain=www.mindbodygreen.com
+
+! browsing-topics breakages
+@@||cjisonline.com^$permissions=browsing-topics=()
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/157342
+futura-sciences.com##+js(set, pa, {})
+futura-sciences.com##+js(set, pa.privacy, {})
+
+! https://github.com/uBlockOrigin/uAssets/issues/19164
+||adobe.com/newrelic.js$script,redirect-rule=noopjs,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/19168
+wikihow.com##+js(set, Object.prototype.getTargetingMap, noopFunc)
+!#if env_chromium
+@@||wikihow.com^$ghide
+@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,domain=www.wikihow.com
+@@||securepubads.g.doubleclick.net/pagead/managed/js/gpt/*/pubads_impl.js$script,domain=www.wikihow.com
+wikihow.com##ins.adsbygoogle
+wikihow.com##.wh_ad_active:style(margin: 0 !important; visibility: collapse !important;)
+!#endif
+
+! https://github.com/uBlockOrigin/uAssets/issues/19169
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=startrek.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/19147
+citibank.com.sg##+js(set, populateClientData4RBA, noopFunc)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/157420
+@@||hikmall.com/js/sensorsdata.min.js$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/157584
+mytempsms.com#@##container-ad
+
+! https://github.com/uBlockOrigin/uAssets/issues/19211
+||dynatrace.com^$script,redirect-rule=noopjs,domain=bcbstx.com
+
+! https://247sports.com/player/chance-robinson-46114146/ video breakage
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect=google-ima.js,domain=247sports.com,important
+
+! https://github.com/finnish-easylist-addition/finnish-easylist-addition/discussions/416#discussioncomment-6595712
+@@||mpsnare.iesnare.com/snare.js$script,domain=elgiganten.dk|elgiganten.se|elkjop.no|gigantti.fi|power.fi
+
+! https://github.com/uBlockOrigin/uAssets/issues/19338
+@@||wurfl.io/wurfl.js$script,domain=adshnk.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/158430
+szbz.de##+js(set, iom, {})
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/158410
+@@||a.omappapi.com/app/campaign-views/*-optin.json$xhr,domain=app.monstercampaigns.com
+@@||a.omappapi.com/users/*/images/$image,domain=app.monstercampaigns.com
+@@||a.omappapi.com/app/campaign-views/*-success.json$xhr,domain=app.monstercampaigns.com
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/158351
+@@||googletagmanager.com/gtm.js$script,domain=villeroy-boch.fr
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/159452
+||tradeinsights.net^$badfilter
+||tradeinsights.net^$3p
+
+! https://github.com/uBlockOrigin/uBlock-discussions/discussions/814
+/^https?:\/\/[www.0-9a-z]{7,}\.com\/.*\/invoke\.js$/$script,3p,badfilter
+
+! https://api.dock.agacad.com/public/vendors/arkancecz/products/6063246f9cc1c62e03076378/installation/2024 - download breakage
+api.dock.agacad.com##+js(rpnt, script, /window\.dataLayer.+?(location\.replace\(\S+?\)).*/, $1)
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/159573
+||tm.jsuol.com.br/uoltm.js$script,domain=uol.com.br,important
+uol.com.br##+js(set, YT.ImaManager, noopFunc)
+uol.com.br##+js(set, UOLPD, {})
+uol.com.br##+js(set, UOLPD.dataLayer, {})
+
+! https://myspace.com/myspace/video/charles-bradley-the-ferris-wheel-interviews/109587715 - video breakage
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect=google-ima.js,domain=myspace.com,important
+
+! https://www.carmagazine.co.uk/car-reviews/smart/-1-suv/ - images breakage
+||bauersecure.com/dist/js/prebid/$script,redirect=noopjs,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/19438
+@@||googletagmanager.com/gtm.js$script,domain=abcam.com
+abcam.com##^link[rel="canonical"]:not([href*="pageconfig=contactus"]):upward(html) script.optanon-category-C0001
+
+! https://github.com/uBlockOrigin/uAssets/issues/19459
+@@||my.petinsurance.com/assets/js/new-relic.js$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/19522
+gazzetta.gr##+js(set, Adman, {})
+
+! https://github.com/uBlockOrigin/uAssets/issues/19519
+ewybory.eu#@#.advertisment
+
+! https://www.reddit.com/r/uBlockOrigin/comments/168muv8/ublock_messing_up_functionality_of_site/
+digicol.dpm.org.cn##+js(set, dplus, {})
+digicol.dpm.org.cn##+js(set, dplus.track, noopFunc)
+
+! https://github.com/easylist/easylist/issues/16855
+||adobedtm.com^*/satelliteLib-$script,domain=poweredbycovermore.com,important
+poweredbycovermore.com##+js(set, _satellite, {})
+poweredbycovermore.com##+js(set, _satellite.track, noopFunc)
+
+! https://www.vrsicilia.it/ - Video breakage
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect=google-ima.js,domain=vrsicilia.it,important
+
+! https://www.reddit.com/r/uBlockOrigin/comments/16axzwg/missing_table_of_contents_and_logo_at_the_top/
+neurotray.com##+js(nano-stb, /EzoIvent|TDELAY/, 5000)
+@@||sf.ezoiccdn.com/ezoimgfmt/$image,3p,domain=neurotray.com
+@@||sf.ezoiccdn.com/ezossp/$script,3p,domain=neurotray.com
+||sf.ezoiccdn.com/ezossp/https/neurotray.com/?local_ga_js=$script,3p,domain=neurotray.com,important
+! https://www.reddit.com/r/uBlockOrigin/comments/17wsdz5/some_content_missing_on_neurotraycom/
+@@||go.ezodn.com^$css,image,3p,domain=neurotray.com
+@@||go.ezodn.com/tardisrocinante/$script,3p,domain=neurotray.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/19658
+@@||receiita.xyz^$popup,domain=animexhd.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/12214 - Video breakage
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,important,redirect=google-ima.js:5,domain=abczdrowie.pl|animezone.pl|antyradio.pl|chillizet.pl|claudia.pl|echirurgia.pl|elevensports.pl|elle.pl|elleman.pl|fm.tuba.pl|focusnauka.pl|games.cdn.famobi.com|glamour.pl|grydladzieci.pl|ipla.tv|ipla.tv|kobieta.pl|meloradio.pl|mojegotowanie.pl|mojpieknyogrod.pl|money.pl|national-geographic.pl|parenting.pl|partner.redefine.pl|playpuls.pl|pluscdn.pl|polsatgo.pl|polsatnews.pl|polsatsport.pl|przyslijprzepis.pl|radioplus.pl|radiozet.pl|sadeczanin.info|tvokazje.pl|tvp.pl|twojapogoda.pl|video.onnetwork.tv|videotarget.pl|wp.pl|wtk.pl|interia.pl|www.polsatnews.pl|autocentrum.pl
+
+! https://www.reddit.com/r/uBlockOrigin/comments/16gwdpd/virgin_media_player_not_visible_with_ublock/
+virginmediatelevision.ie##+js(set, google.ima.dai, {})
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=virginmediatelevision.ie
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,domain=virginmediatelevision.ie
+
+! https://www.3bmeteo.com/meteo/italia/video - Video breakage
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect=google-ima.js,domain=3bmeteo.com,important
+3bmeteo.com##+js(nano-sib, adv, *)
+
+! [NSFW] https://deepnude.to/ - Missing "userid" and "identifier" cookies from FingerprintJS
+/fingerprint2.min.js$script,3p,redirect=fingerprint2.js,important
+! https://www.reddit.com/r/uBlockOrigin/comments/nw4ayj/ublock_origin_x_picoworkers/
+/fingerprint2.js$script,3p,redirect=fingerprint2.js,important
+! https://github.com/uBlockOrigin/uBlock-issues/issues/2830
+sproutgigs.com##+js(fingerprint2)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19792
+larazon.es##+js(set, gfkS2sExtension, {})
+larazon.es##+js(set, gfkS2sExtension.HTML5VODExtension, noopFunc)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/16od89r/ublock_blocking_cloudflare_security_challenge/
+@@||toolbaz.com/tardisrocinante/screx.js$script,1p
+@@||toolbaz.com/tardisrocinante/vitals.js$script,1p
+
+! simple counter
+||rays-counter.com^$3p,badfilter
+
+! https://github.com/easylist/easylist/commit/6f7043d0dcf5a2102e852b8b5d84adad3285a4ca
+||d347cldnsmtg5x.cloudfront.net/util/1x1.gif$image,domain=aplaceforeverything.co.uk,redirect=1x1.gif,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/19835
+||linkvertise.com^$badfilter
+
+! https://www.reddit.com/r/uBlockOrigin/comments/y5njca/paramount_watch_history/
+! https://www.reddit.com/r/uBlockOrigin/comments/16qj0d1/chrome_adblock_scripts_for_disneyhulu/k1xzvyy/
+@@||sparrow.paramountplus.com/streamer/$xhr,1p
+
+! https://twitter.com/CBC/status/921114049835864066
+@@||cbc.ca/*/cbc-stats-$script,1p
+! http://forum.canucks.com/topic/388440-pgt-philadelphia-flyers-at-vancouver-canucks-dec-15-2018/?page=2&tab=comments#comment-14661218
+@@||ads.rogersmedia.com/cbc$frame,domain=cbc.ca
+! https://github.com/uBlockOrigin/uAssets/issues/17367
+! https://github.com/easylist/easylist/commit/e70a55b94612ecc30d962ccfb9629dda466dc2e8
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect=google-ima.js,domain=cbc.ca|~gem.cbc.ca,important
+! https://github.com/uBlockOrigin/uAssets/issues/19899
+cbc.ca##+js(aeld, click, /event_callback=function\(\){window\.location=t\.getAttribute\("href"\)/)
+
+! https://github.com/uBlockOrigin/uAssets/issues/14891#issuecomment-1733439932
+@@||moja-ostroleka.pl/mapa/sensorsData.json$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/7636#issuecomment-1735168592
+2.87.160.7$badfilter
+||2.87.160.7^
+
+! https://github.com/easylist/easylist/commit/4e879784ca6f890711898f80bfed34c008b2e2f9
+||d2ma0sm7bfpafd.cloudfront.net/wcsstore/waitrosedirectstorefrontassetstore/custom/js/analyticseventtracking/$script,domain=waitrosecellar.com,important
+waitrosecellar.com##+js(set, AnalyticsEventTrackingJS, {})
+waitrosecellar.com##+js(set, AnalyticsEventTrackingJS.addToBasket, noopFunc)
+waitrosecellar.com##+js(set, AnalyticsEventTrackingJS.trackErrorMessage, noopFunc)
+
+! https://www.reddit.com/r/uBlockOrigin/comments/16unn3u/
+@@||jobillico.com/js/vuejs/gtag/gtag.js$script,1p
+
+! https://www.reddit.com/r/uBlockOrigin/comments/16v3lpv/
+@@||fpjscdn.net/*/loader_$script,domain=boomy.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/19932
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=gospodari.com,redirect=google-ima.js,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/19948
+@@||googletagmanager.com/gtm.js$script,domain=freepik.com
+@@||googletagmanager.com/gtag/js$script,domain=freepik.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/19961
+kicker.de##+js(set, initializeslideshow, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/19962
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$script,domain=sonyliv.com
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect=google-ima.js,domain=sonyliv.com,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/19996
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=theonion.com
+||adsafeprotected.com^$script,redirect-rule=noopjs,domain=theonion.com
+theonion.com##+js(nano-stb, b(), 3000)
+theonion.com##+js(nano-stb, ads, *)
+
+! https://forums.lanik.us/viewtopic.php?t=48313-instapundit-com&p=166621#p166621
+instapundit.com#@#.postad
+instapundit.com#@#.ad-space:not(.textads)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20013
+@@||adobedtm.com^*/satelliteLib-$script,domain=costco.*
+
+! https://github.com/uBlockOrigin/uAssets/issues/20045
+@@||googletagmanager.com/gtm.js$script,domain=aarhustech.dk
+
+! https://github.com/uBlockOrigin/uAssets/issues/20054
+||go.xlirdr.com^$xhr,removeparam
+
+! https://github.com/uBlockOrigin/uAssets/issues/20128
+@@||googletagmanager.com/gtag/js$script,redirect-rule=googletagmanager_gtm.js:5,domain=trovvve.com
+
+! https://forums.lanik.us/viewtopic.php?p=166657-video-player-blocked#p166657
+||sonar.viously.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/20199
+as.com##+js(set, DTM.trackAsyncPV, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20202
+||cdn.usefathom.com/script.js$domain=sharpen-free-design-generator.netlify.app,important
+sharpen-free-design-generator.netlify.app##+js(set, fathom, {})
+sharpen-free-design-generator.netlify.app##+js(set, fathom.trackGoal, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20235
+buytesmart.com##body[style*="display: none"]:remove-attr(style)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20256
+||img.service.belboon.com^$badfilter
+||partner.service.belboon.com^$badfilter
+||ui.service.belboon.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/20279
+/nielsen.js$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/20319
+help.cashctrl.com##+js(set, Origami, {})
+help.cashctrl.com##+js(set, Origami.fastclick, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20300
+@@||microsoft.com/*/aria-web-telemetry$script,1p
+
+! https://github.com/AdguardTeam/AdguardFilters/issues/164921
+||hbb.afl.rakuten.co.jp^$badfilter
+||hbb.afl.rakuten.co.jp^$3p
+
+! unbreak player
+*$script,3p,denyallow=cloudflare.com|googleapis.com,domain=javgg.club|javgg.net,badfilter
+*$script,3p,denyallow=cloudflare.com|fluidplayer.com|googleapis.com,domain=javgg.club|javgg.net
+
+! https://github.com/uBlockOrigin/uAssets/issues/20410
+||quantcast.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/20449
+@@||wurfl.io/wurfl.js$script,domain=keukenatlas.nl
+
+! https://github.com/uBlockOrigin/uAssets/issues/20457
+*.gif$image,redirect=1x1.gif,domain=holybooks.com,important
+
+! https://github.com/uBlockOrigin/uAssets/issues/20509
+@@||src.litix.io/videojs/$script,domain=nasa.gov
+
+! https://github.com/uBlockOrigin/uAssets/issues/20564
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=google-ima.js,domain=moviesandtv.myvi.in
+@@||moviesandtv.myvi.in/videojs/videojs-contrib-ads.min.js$script,domain=moviesandtv.myvi.in
+
+! https://github.com/uBlockOrigin/uAssets/issues/20579
+@@||cdn.lib.getjad.io^$script,domain=vidaextra.com
+@@||c.amazon-adsystem.com/aax2/apstag.js$script,domain=vidaextra.com
+@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,domain=vidaextra.com
+@@||securepubads.g.doubleclick.net/pagead/managed/js/gpt/*/pubads_impl.js$script,domain=vidaextra.com
+@@||securepubads.g.doubleclick.net/gampad/ads$xhr,domain=vidaextra.com
+
+! https://mod.reddit.com/mail/perma/1rqklb/2iwe9l
+www.reddit.com,new.reddit.com##.subredditvars-r-ublockorigin [role="dialog"]>div:style(width: auto !important)
+
+! https://github.com/uBlockOrigin/uAssets/issues/20575
+@@||static.knowledgehub.com/global/images/ping.gif?$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/20667
+lumens.com##+js(set, _satellite, {})
+lumens.com##+js(set, _satellite.track, noopFunc)
+
+! https://github.com/uBlockOrigin/uAssets/issues/15697
+||analytics.skroutz.gr/analytics.min.js^$script,1p,redirect-rule=noop.js
+
+! https://github.com/uBlockOrigin/uAssets/issues/20723
+@@||hdblog.it/new_files/ajax/bf_new.php$frame,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/20516#issuecomment-1826097268
+@@||worker.clerkprod-cloudflare.net^$xhr,domain=qiwi.gg
+
+! https://www.reddit.com/r/uBlockOrigin/comments/183dw7h/ublockorigin_crashing_firefox_on_uncommongoodscom/
+@@||cdns.brsrvr.com/v1/br-trk-*.js^$script,3p,domain=uncommongoods.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/20960
+@@||ads.viralize.tv/player/$domain=automoto.it|moto.it|ilrestodelcarlino.it|quotidiano.net
+@@||ads.viralize.tv/display/$domain=automoto.it|moto.it|ilrestodelcarlino.it|quotidiano.net
+@@||ads.viralize.tv/t-bid-opportunity/$domain=automoto.it|moto.it
+@@||ads.viralize.tv/d-vast/$domain=automoto.it|moto.it
+@@||ads.viralize.tv^|$domain=automoto.it|moto.it
+@@||monetize-static.viralize.tv/prebid.min.$domain=automoto.it|moto.it
+
+! https://www.independent.co.uk/news/world/americas/inside-oceangate-titan-submarine-imploded-b2367062.html (broken video by Lowe's list)
+@@||npttech.com/advertising.js$domain=independent.co.uk
+
+! https://github.com/uBlockOrigin/uAssets/issues/21050
+||inmobi.com^$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/21056
+@@||twinkie.xyz/cdn-cgi/apps/$script,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/20681#issuecomment-1842744953
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,3p,redirect-rule=google-ima.js,domain=androidpolice.com
+@@||cdn.adsninja.ca/adsninja_client$css,script,3p,domain=androidpolice.com
+@@||androidpolice.com^$ghide
+androidpolice.com##.adsninja-ad-zone:not(.adsninja-valstream)
+
+! Override EasyList Germany exceptions
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,important,redirect=google-ima.js,domain=atv.at|autobild.de|chip.de|computerbild.de|gentside.de|oe24.at|ohmymag.de|phonostar.de|schwaebische.de|spielaffe.de|sport.sky.de|wetteronline.de
+
+! https://github.com/uBlockOrigin/uAssets/issues/21286
+||jsrdn.com^$badfilter
+
+! cname https://github.com/uBlockOrigin/uAssets/issues/21297#issuecomment-1848938391
+@@||geo.dailymotion.com^$cname
+
+! https://github.com/uBlockOrigin/uAssets/issues/21380
+||munchkin.marketo.net/munchkin.js$script,important,redirect=noop.js,domain=st.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/21396
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,3p,redirect=google-ima3,domain=humix.com|mistergadget.tech,important
+
+! https://forums.lanik.us/viewtopic.php?t=48320-meijer-com
+meijer.com#@#.product-grid__product:has(.product-tile__sponsored)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21446
+/web-vitals.$script,redirect-rule=noopjs,domain=amazon.com
+@@||amazonwebservicesinc.tt.omtrdc.net/m2/amazonwebservicesinc/ubox/raw$xhr,3p,domain=aws.amazon.com
+||amazonwebservicesinc.tt.omtrdc.net/m2/amazonwebservicesinc/ubox/raw$xhr,3p,removeparam,domain=aws.amazon.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/21456
+||cdnwebonplay.gviet.vn/public/js/player/ads/ima3.js$script,3p,redirect=google-ima.js,domain=vtvcab.vn,important
+
+! https://github.com/easylist/easylist/commit/a61d7fa546dfceab90b75d646622979d16122960 backup
+@@||amazon.*/action-impressions/1/OP/$xhr,1p
+
+! https://github.com/uBlockOrigin/uAssets/issues/21731
+msn.com#@#.intra-article-module
+
+! https://github.com/uBlockOrigin/uAssets/issues/21741
+#@#[id^="adv-"]:not(#adv-settings)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21750
+commande.rhinov.pro##+js(set, Sentry, {})
+commande.rhinov.pro##+js(set, Sentry.init, noopFunc)
+
+! https://www.thethings.com/winona-ryder-never-had-children-special-bond-stranger-things-kids/ broken video
+||imasdk.googleapis.com/js/sdkloader/ima3.js$script,3p,redirect-rule=google-ima.js,domain=thethings.com
+@@||cdn.adsninja.ca/adsninja_client$css,script,3p,domain=thethings.com
+@@||thethings.com^$ghide
+thethings.com##.adsninja-ad-zone:not(.adsninja-valstream)
+
+! https://github.com/uBlockOrigin/uAssets/issues/21780
+||awswaf.com^*/telemetry$badfilter
+
+! https://github.com/uBlockOrigin/uAssets/issues/21773
+@@||cdn.pendo.io/agent/static/*/pendo.js$script,domain=netsecure.adp.com
+
+! https://github.com/uBlockOrigin/uAssets/issues/21771#issuecomment-1877992060
+@@||googletagmanager.com/gtm.js$script,3p,domain=syracuse.com
+@@||apps.sophi.io/latest/al-syracuse.segments.min.js$script,3p,domain=syracuse.com
+@@||syracuse.com/DG/DEFAULT/rest/rpc/$script,1p
+
+! https://github.com/uBlockOrigin/uBlock-issues/issues/3072
+!#if env_chromium
+||community.ipinfo.io^$csp=worker-src 'none'
+!#endif
+
+! https://github.com/gorhill/uBlock/commit/1cac61a9a4193801105e8586bc540e9ddcb00d51
+! remove once the above commit comes to stable
+@@||agoda.com/*/book/$removeparam
+
+! https://github.com/easylist/easylistgermany/issues/340
+helpster.de#@##ad_sidebar_left_container
diff --git a/uAssets/templates/easylist-annoyances.template b/uAssets/templates/easylist-annoyances.template
new file mode 100644
index 0000000..70ff76c
--- /dev/null
+++ b/uAssets/templates/easylist-annoyances.template
@@ -0,0 +1,22 @@
+[Adblock Plus 2.0]
+! Title: EasyList – Annoyances
+! Last modified: %timestamp%
+! Expires: 7 days (update frequency)
+%include easylist:template_header.txt%
+!
+!--------------------------General blocking rules-----------------------------!
+%include easylist:fanboy-addon/fanboy_annoyance_general_block.txt%
+!------------------------General element hiding rules-------------------------!
+%include easylist:fanboy-addon/fanboy_annoyance_general_hide.txt%
+!-------------------------Third-party blocking rules--------------------------!
+%include easylist:fanboy-addon/fanboy_annoyance_thirdparty.txt%
+!--------------------------Specific blocking filters--------------------------!
+%include easylist:fanboy-addon/fanboy_annoyance_specific_block.txt%
+!------------------------Specific element hiding rules------------------------!
+%include easylist:fanboy-addon/fanboy_annoyance_specific_hide.txt%
+%include easylist:fanboy-addon/fanboy_annoyance_specific_uBO.txt%
+!------------------------Rules for international sites------------------------!
+%include easylist:fanboy-addon/fanboy_annoyance_international.txt%
+!---------------------------------Allowlists----------------------------------!
+%include easylist:fanboy-addon/fanboy_annoyance_allowlist.txt%
+%include easylist:fanboy-addon/fanboy_annoyance_allowlist_general_hide.txt%
diff --git a/uAssets/templates/easylist-chat.template b/uAssets/templates/easylist-chat.template
new file mode 100644
index 0000000..edc8c05
--- /dev/null
+++ b/uAssets/templates/easylist-chat.template
@@ -0,0 +1,7 @@
+[Adblock Plus 2.0]
+! Title: EasyList – Chat Widgets
+! Expires: 9 days
+! Last modified: %timestamp%
+%include easylist:template_header.txt%
+!
+%include easylist:fanboy-addon/fanboy_chatapps_third-party.txt%
diff --git a/uAssets/templates/easylist-cookies.template b/uAssets/templates/easylist-cookies.template
new file mode 100644
index 0000000..a2521c2
--- /dev/null
+++ b/uAssets/templates/easylist-cookies.template
@@ -0,0 +1,23 @@
+[Adblock Plus 2.0]
+! Title: EasyList – Cookie Notices
+! Last modified: %timestamp%
+! Expires: 7 days (update frequency)
+%include easylist:template_header.txt%
+!
+!--------------------------General blocking rules-----------------------------!
+%include easylist:easylist_cookie/easylist_cookie_general_block.txt%
+!------------------------General element hiding rules-------------------------!
+%include easylist:easylist_cookie/easylist_cookie_general_hide.txt%
+!-------------------------Third-party blocking rules--------------------------!
+%include easylist:easylist_cookie/easylist_cookie_thirdparty.txt%
+!--------------------------Specific blocking filters--------------------------!
+%include easylist:easylist_cookie/easylist_cookie_specific_block.txt%
+!------------------------Specific element hiding rules------------------------!
+%include easylist:easylist_cookie/easylist_cookie_specific_hide.txt%
+%include easylist:easylist_cookie/easylist_cookie_specific_uBO.txt%
+!------------------------Rules for international sites------------------------!
+%include easylist:easylist_cookie/easylist_cookie_international_specific_hide.txt%
+%include easylist:easylist_cookie/easylist_cookie_international_specific_block.txt%
+!---------------------------------Allowlists----------------------------------!
+%include easylist:easylist_cookie/easylist_cookie_allowlist_general_hide.txt%
+%include easylist:easylist_cookie/easylist_cookie_allowlist.txt%
diff --git a/uAssets/templates/easylist-newsletters.template b/uAssets/templates/easylist-newsletters.template
new file mode 100644
index 0000000..bdf163a
--- /dev/null
+++ b/uAssets/templates/easylist-newsletters.template
@@ -0,0 +1,28 @@
+[Adblock Plus 2.0]
+! Title: EasyList – Newsletter Notices
+! Last modified: %timestamp%
+! Expires: 7 days (update frequency)
+%include easylist:template_header.txt%
+!
+!--------------------------General blocking rules-----------------------------!
+%include easylist:fanboy-addon/fanboy_newsletter_general_block.txt%
+!------------------------General element hiding rules-------------------------!
+%include easylist:fanboy-addon/fanboy_newsletter_general_hide.txt%
+!-------------------------Third-party blocking rules--------------------------!
+%include easylist:fanboy-addon/fanboy_newsletter_thirdparty.txt%
+!--------------------------Specific blocking filters--------------------------!
+%include easylist:fanboy-addon/fanboy_newsletter_specific_block.txt%
+%include easylist:fanboy-addon/fanboy_newsletter_shopping_specific_block.txt%
+!------------------------Specific element hiding rules------------------------!
+%include easylist:fanboy-addon/fanboy_newsletter_specific_hide.txt%
+%include easylist:fanboy-addon/fanboy_newsletter_specific_uBO.txt%
+%include easylist:fanboy-addon/fanboy_newsletter_shopping_specific_uBO.txt%
+%include easylist:fanboy-addon/fanboy_newsletter_shopping_specific_hide.txt%
+!------------------------Rules for international sites------------------------!
+%include easylist:fanboy-addon/fanboy_newsletter_international_block.txt%
+%include easylist:fanboy-addon/fanboy_newsletter_international_hide.txt%
+!---------------------------------Allowlists----------------------------------!
+%include easylist:fanboy-addon/fanboy_newsletter_allowlist.txt%
+%include easylist:fanboy-addon/fanboy_newsletter_allowlist_general_hide.txt%
+%include easylist:fanboy-addon/fanboy_newsletter_shopping_allowlist.txt%
+%include easylist:fanboy-addon/fanboy_newsletter_shopping_allowlist_general_hide.txt%
diff --git a/uAssets/templates/easylist-notifications.template b/uAssets/templates/easylist-notifications.template
new file mode 100644
index 0000000..9aba65d
--- /dev/null
+++ b/uAssets/templates/easylist-notifications.template
@@ -0,0 +1,22 @@
+[Adblock Plus 2.0]
+! Title: EasyList – Notifications
+! Last modified: %timestamp%
+! Expires: 7 days (update frequency)
+%include easylist:template_header.txt%
+!
+!--------------------------General blocking rules-----------------------------!
+%include easylist:fanboy-addon/fanboy_notifications_general_block.txt%
+!------------------------General element hiding rules-------------------------!
+%include easylist:fanboy-addon/fanboy_notifications_general_hide.txt%
+!-------------------------Third-party blocking rules--------------------------!
+%include easylist:fanboy-addon/fanboy_notifications_thirdparty.txt%
+%include easylist:fanboy-addon/fanboy_sounds_thirdparty.txt%
+!--------------------------Specific blocking filters--------------------------!
+%include easylist:fanboy-addon/fanboy_notifications_specific_block.txt%
+!------------------------Specific element hiding rules------------------------!
+%include easylist:fanboy-addon/fanboy_notifications_specific_hide.txt%
+%include easylist:fanboy-addon/fanboy_notifications_specific_uBO.txt%
+!------------------------Rules for international sites------------------------!
+!---------------------------------Allowlists----------------------------------!
+%include easylist:fanboy-addon/fanboy_notifications_allowlist.txt%
+%include easylist:fanboy-addon/fanboy_notifications_allowlist_general_hide.txt%
diff --git a/uAssets/templates/easylist-social.template b/uAssets/templates/easylist-social.template
new file mode 100644
index 0000000..8bd010c
--- /dev/null
+++ b/uAssets/templates/easylist-social.template
@@ -0,0 +1,22 @@
+[Adblock Plus 2.0]
+! Title: EasyList – Social Widgets
+! Last modified: %timestamp%
+! Expires: 7 days (update frequency)
+%include easylist:template_header.txt%
+!
+!--------------------------General blocking rules-----------------------------!
+%include easylist:fanboy-addon/fanboy_social_general_block.txt%
+!------------------------General element hiding rules-------------------------!
+%include easylist:fanboy-addon/fanboy_social_general_hide.txt%
+!-------------------------Third-party blocking rules--------------------------!
+%include easylist:fanboy-addon/fanboy_social_thirdparty.txt%
+!--------------------------Specific blocking filters--------------------------!
+%include easylist:fanboy-addon/fanboy_social_specific_block.txt%
+!------------------------Specific element hiding rules------------------------!
+%include easylist:fanboy-addon/fanboy_social_specific_hide.txt%
+%include easylist:fanboy-addon/fanboy_social_specific_uBO.txt%
+!------------------------Rules for international sites------------------------!
+%include easylist:fanboy-addon/fanboy_social_international.txt%
+!---------------------------------Allowlists----------------------------------!
+%include easylist:fanboy-addon/fanboy_social_allowlist_general_hide.txt%
+%include easylist:fanboy-addon/fanboy_social_allowlist.txt%
diff --git a/uAssets/templates/easylist.template b/uAssets/templates/easylist.template
new file mode 100644
index 0000000..e44f5ad
--- /dev/null
+++ b/uAssets/templates/easylist.template
@@ -0,0 +1,41 @@
+[Adblock Plus 2.0]
+! Title: EasyList
+! Expires: 6 days (update frequency)
+! Last modified: %timestamp%
+! Diff-Path: %diffpath%#easylist
+! Diff-Expires: 317 minutes
+
+%include easylist:template_header.txt%
+!
+!-----------------------General advert blocking filters-----------------------!
+%include easylist:easylist/easylist_general_block.txt%
+%include easylist:easylist/easylist_general_block_dimensions.txt%
+%include easylist:easylist/easylist_general_block_popup.txt%
+!------------------------General element hiding rules-------------------------!
+%include easylist:easylist/easylist_general_hide.txt%
+%include easylist:easylist/easylist_allowlist_general_hide.txt%
+!---------------------------Third-party advertisers---------------------------!
+%include easylist:easylist/easylist_adservers.txt%
+%include easylist:easylist/easylist_adservers_popup.txt%
+%include easylist:easylist_adult/adult_adservers.txt%
+%include easylist:easylist_adult/adult_adservers_popup.txt%
+!-----------------------------Third-party adverts-----------------------------!
+%include easylist:easylist/easylist_thirdparty.txt%
+%include easylist:easylist/easylist_thirdparty_popup.txt%
+%include easylist:easylist_adult/adult_thirdparty.txt%
+%include easylist:easylist_adult/adult_thirdparty_popup.txt%
+!----------------------Specific advert blocking filters-----------------------!
+%include easylist:easylist/easylist_specific_block.txt%
+%include easylist:easylist/easylist_specific_block_popup.txt%
+%include easylist:easylist_adult/adult_specific_block.txt%
+%include easylist:easylist_adult/adult_specific_block_popup.txt%
+!------------------------Specific element hiding rules------------------------!
+%include easylist:easylist/easylist_specific_hide.txt%
+%include easylist:easylist/easylist_specific_hide_abp.txt%
+%include easylist:easylist_adult/adult_specific_hide.txt%
+!-----------------------Allowlists to fix broken sites------------------------!
+%include easylist:easylist/easylist_allowlist.txt%
+%include easylist:easylist/easylist_allowlist_dimensions.txt%
+%include easylist:easylist/easylist_allowlist_popup.txt%
+%include easylist:easylist_adult/adult_allowlist.txt%
+%include easylist:easylist_adult/adult_allowlist_popup.txt%
diff --git a/uAssets/templates/easyprivacy.template b/uAssets/templates/easyprivacy.template
new file mode 100644
index 0000000..517cb9a
--- /dev/null
+++ b/uAssets/templates/easyprivacy.template
@@ -0,0 +1,57 @@
+[Adblock Plus 1.1]
+! Title: EasyPrivacy
+! Expires: 6 days (update frequency)
+! Last modified: %timestamp%
+! Diff-Path: %diffpath%#easyprivacy
+! Diff-Expires: 317 minutes
+
+%include easylist:template_header.txt%
+!
+!-----------------General tracking systems-----------------!
+%include easylist:easyprivacy/easyprivacy_general.txt%
+%include easylist:easyprivacy/easyprivacy_general_emailtrackers.txt%
+!-----------------Third-party tracking domains-----------------!
+%include easylist:easyprivacy/easyprivacy_trackingservers_general.txt%
+%include easylist:easyprivacy/easyprivacy_trackingservers_thirdparty.txt%
+%include easylist:easyprivacy/easyprivacy_trackingservers_mining.txt%
+%include easylist:easyprivacy/easyprivacy_trackingservers_admiral.txt%
+%include easylist:easyprivacy/easyprivacy_trackingservers_notifications.txt%
+%include easylist:easyprivacy/easyprivacy_trackingservers.txt%
+!-----------------International third-party tracking domains-----------------!
+%include easylist:easyprivacy/easyprivacy_trackingservers_international.txt%
+!-----------------Third-party tracking services-----------------!
+%include easylist:easyprivacy/easyprivacy_thirdparty.txt%
+!-----------------International third-party tracking services-----------------!
+%include easylist:easyprivacy/easyprivacy_thirdparty_international.txt%
+!-----------------Individual tracking systems-----------------!
+%include easylist:easyprivacy/easyprivacy_specific.txt%
+%include easylist:easyprivacy/easyprivacy_specific_perimeterx.txt%
+!-----------------Extension specific systems-----------------!
+%include easylist:easyprivacy/easyprivacy_specific_uBO.txt%
+!-----------------Individual cname tracking systems-----------------!
+%include easylist:easyprivacy/easyprivacy_specific_cname_dataunlocker.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_a8net.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_plausible.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_tracedock.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_at-internet.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_adobe.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_acton.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_otto.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_commanders-act.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_ingenious-technologies.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_np6.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_criteo.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_oracle.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_ad-ebis.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_eulerian.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_keyade.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_lead-forensics.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_webtrekk.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_wizaly.txt%
+%include easylist:easyprivacy/easyprivacy_specific_cname_branch.txt%
+!-----------------International individual tracking systems-----------------!
+%include easylist:easyprivacy/easyprivacy_specific_international.txt%
+!-----------------------Allowlists to fix broken sites------------------------!
+%include easylist:easyprivacy/easyprivacy_allowlist.txt%
+!----------------Allowlists to fix broken international sites-----------------!
+%include easylist:easyprivacy/easyprivacy_allowlist_international.txt%
diff --git a/uAssets/templates/ublock-annoyances.template b/uAssets/templates/ublock-annoyances.template
new file mode 100644
index 0000000..32b6005
--- /dev/null
+++ b/uAssets/templates/ublock-annoyances.template
@@ -0,0 +1,8 @@
+! Title: uBlock filters – Annoyances
+! Expires: 7 days
+! Last modified: %timestamp%
+! Diff-Path: %diffpath%#ublock-annoyances
+! Diff-Expires: 317 minutes
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+
+%include uAssets:filters/annoyances.txt%
diff --git a/uAssets/templates/ublock-badware.template b/uAssets/templates/ublock-badware.template
new file mode 100644
index 0000000..4c78fd2
--- /dev/null
+++ b/uAssets/templates/ublock-badware.template
@@ -0,0 +1,8 @@
+! Title: uBlock filters – Badware risks
+! Expires: 5 days
+! Last modified: %timestamp%
+! Diff-Path: %diffpath%#ublock-badware
+! Diff-Expires: 317 minutes
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+
+%include uAssets:filters/badware.txt%
diff --git a/uAssets/templates/ublock-filters.template b/uAssets/templates/ublock-filters.template
new file mode 100644
index 0000000..fad1f2b
--- /dev/null
+++ b/uAssets/templates/ublock-filters.template
@@ -0,0 +1,16 @@
+! Title: uBlock filters
+! Expires: 5 days
+! Last modified: %timestamp%
+! Diff-Path: %diffpath%#ublock-filters
+! Diff-Expires: 317 minutes
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+
+%include uAssets:filters/filters.txt%
+
+%include uAssets:filters/filters-2020.txt%
+
+%include uAssets:filters/filters-2021.txt%
+
+%include uAssets:filters/filters-2022.txt%
+
+%include uAssets:filters/filters-2023.txt%
diff --git a/uAssets/templates/ublock-privacy.template b/uAssets/templates/ublock-privacy.template
new file mode 100644
index 0000000..30be9c5
--- /dev/null
+++ b/uAssets/templates/ublock-privacy.template
@@ -0,0 +1,10 @@
+! Title: uBlock filters – Privacy
+! Expires: 7 days
+! Last modified: %timestamp%
+! Diff-Path: %diffpath%#ublock-privacy
+! Diff-Expires: 317 minutes
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+
+%include uAssets:filters/privacy.txt%
+
+%include uAssets:filters/resource-abuse.txt%
diff --git a/uAssets/templates/ublock-quick-fixes.template b/uAssets/templates/ublock-quick-fixes.template
new file mode 100644
index 0000000..c3fc0bf
--- /dev/null
+++ b/uAssets/templates/ublock-quick-fixes.template
@@ -0,0 +1,8 @@
+! Title: uBlock filters – Quick fixes
+! Expires: 12 hours
+! Last modified: %timestamp%
+! Diff-Path: %diffpath%#ublock-quick-fixes
+! Diff-Expires: 317 minutes
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+
+%include uAssets:filters/quick-fixes.txt%
diff --git a/uAssets/templates/ublock-unbreak.template b/uAssets/templates/ublock-unbreak.template
new file mode 100644
index 0000000..39fa6a7
--- /dev/null
+++ b/uAssets/templates/ublock-unbreak.template
@@ -0,0 +1,8 @@
+! Title: uBlock filters – Unbreak
+! Expires: 5 days
+! Last modified: %timestamp%
+! Diff-Path: %diffpath%#ublock-unbreak
+! Diff-Expires: 317 minutes
+! License: https://github.com/uBlockOrigin/uAssets/blob/master/LICENSE
+
+%include uAssets:filters/unbreak.txt%
diff --git a/uAssets/thirdparties/easylist/easylist-annoyances.txt b/uAssets/thirdparties/easylist/easylist-annoyances.txt
new file mode 100644
index 0000000..ede7ffb
--- /dev/null
+++ b/uAssets/thirdparties/easylist/easylist-annoyances.txt
@@ -0,0 +1,3544 @@
+[Adblock Plus 2.0]
+! Title: EasyList – Annoyances
+! Last modified: %timestamp%
+! Expires: 7 days (update frequency)
+! *** easylist:template_header.txt ***
+!
+! Please report any unblocked adverts or problems
+! in the forums (https://forums.lanik.us/)
+! or via e-mail (easylist@protonmail.com).
+!
+! Homepage: https://easylist.to/
+! Licence: https://easylist.to/pages/licence.html
+! GitHub issues: https://github.com/easylist/easylist/issues
+! GitHub pull requests: https://github.com/easylist/easylist/pulls
+!
+!--------------------------General blocking rules-----------------------------!
+! *** easylist:fanboy-addon/fanboy_annoyance_general_block.txt ***
+/1-popupally-pro-code.js
+/amp-apester-
+/arscode-ninja-popups/*$~stylesheet
+/copy_text.js
+/cx-scrolldepth.js
+/dealsaver/widget/*
+/dreamgrow-scroll-triggered-box/js/script.js
+/ExitIntentPopUp.js
+/fartscroll.js
+/jquery.simplemodal.$script,domain=breakingdefense.com
+/nrelate_js.min.js
+/onlineopinionV5/oo_engine.min.js
+/onlineopinionV5/oo_style.js
+/Opinion8.min.js
+/opinionlab/oo_style.css
+/pageAutoRefresh.
+/plugins/advanced-browser-check/js/script.js
+/plugins/popup-maker/*$script,domain=~tracktion.com|~upride.cc
+/plugins/scroll-triggered-boxes/assets/js/script.min.js
+/plugins/wordpress-popup/*$~stylesheet
+/plugins/wp-emailfeedburnerpop/*
+/plugins/wp-greet-box/js/functions.js
+/plugins/wp-greet-box/js/js-mode.js
+/pubExchange.min.js
+/q2w3-fixed-widget.min.js
+/rating-widget/resources/css/site-rating.css
+/recommend.php$subdocument,~third-party
+/tab-slide/assets/js/tab_slide.js
+/tapatalkdetect.js
+/upprev.js
+/upprev_js.php
+/userlike-cdn-
+/vto_plus/js_loader.php
+/wp-content/plugins/ko-fi-button/js/widget.js
+/wp-content/plugins/popover/js/public.min.js
+/wpmu-lib/js/wpmu-ui.3.min.js
+! Anti-Rightclick/copy/devtools
+/antirightclick.js
+/block-console.js
+/block-right-click.js
+/browserDetection/jquery.reject.js
+/console-ban.min.js
+/console-blocker/app-detect.js
+/detect.dev.js
+/devtools-detect.js
+/devtools-detect/index.js
+/devtools-detector.js
+/devtools-detector.min.js
+/disable-devtool.js
+/disable-devtool.min.js
+/disable-right-click-images/script.js
+/disable-right-click-js.js
+/disabled-source-disabled-right-click-and-content-protection/*
+/disablerightclick.js
+/jcwp-copy-paste-blocker/jcorgcpbjs.js
+/no-right-click-images.js
+/no-right-click.js
+/norightclick.js
+/plugins/rightclick/*
+/t42-content-protector/js/protector.min.js
+! Anti-Snow affects
+/cf-christmasification-public.js
+/cf-christmasification-public.min.js
+/christmas-snow.js
+/jquery.snow.js
+/letitsnow.min.js
+/magic-snowflakes/dist/snowflakes.min.js
+/puresnow.js
+/script/snow.js
+/snow-fall.js
+/snow-falling.js
+/snow-storm.js
+/snow.min.js
+/snow/snow.js
+/snowfall-master.min.js
+/snowfall.jquery.js
+/snowfall.jquery.min.js
+/snowstorm-min.js
+/snowstorm.js
+/snowstorm.min.js
+/snowstorm2.js
+/wp-snow-effect-pro-public.js
+/wp-snow-effect-pro/public/js/jsnow.js
+/wp-snow-effect-public.js
+/wp-snow-effect/public/js/jsnow.js
+! https://github.com/easylist/easylist/pull/8551
+/journey/compiler/*
+! sounds
+/popup-builder/public/sound/*
+! Taboola
+/taboola-header.js
+/taboola.js
+/taboola/loader.js
+/taboolaHead.js
+! Outbrain
+/obtp.js
+/outbrain.js
+/outbrainAd.
+! ---------- Scroll To Top Buttons ----------
+/avada-to-top.js
+/back-top-btn.png
+/back_to_top.js
+/back_to_top_
+/bt_pagetop.gif
+/bt_pagetop.png
+/btn_back2top.png
+/btn_gotop.gif
+/btn_gotop.png
+/btn_pagetop.gif
+/btn_pagetop.png
+/button_to_top.png
+/csBackToTop.js
+/dynamic.to.top.min.js
+/hs.go-to.js
+/hs.go-to.min.js
+/ic_pagetop.png
+/ic_pagetop.svg
+/icon_gototop.png
+/icon_scrollup.svg
+/plugins/wp-scroll-to-top/scr_js.js
+/sbtt.js
+/scroll-to-top.png
+/scroll-to-top/*$~stylesheet
+/scroll-top-and-bottom/*
+/scroll-top.jpg
+/scroll-top.js
+/scroll-top.png
+/scroll_top.png
+/scroll_top.svg
+/scrollBtnTop.png
+/scrolltopcontrol.js
+/scrolltotop.js
+/scrollToTop.min.js
+/scrollToTop.png
+/scrollup_button.js
+/simple-back-to-top//js/sbtt.js
+/to_pagetop.png
+/topbutton.js
+/ui.totop_.png
+/wpfront-scroll-top.min.js
+_backToTop.
+! Test filters for embeded/in-article video ads
+/banner/videos/player.htm?$subdocument
+/plugin/banner/videos/*$subdocument
+! Particles dynamic background
+/jquery.particleground.js
+/jquery.particleground.min.js
+/particles-sel.js
+!------------------------General element hiding rules-------------------------!
+! *** easylist:fanboy-addon/fanboy_annoyance_general_hide.txt ***
+###FooterboardMobile
+###ac-lre-player
+###ac-lre-player-ph
+###amp-smart-banner-download
+###article_sharing_footer
+###cxense_widget
+###envato-widget
+###feedback-bottomentry
+###feedback_callout
+###feedback_widget_tab
+###feedbacklinktab
+###feedburner_left
+###feedburner_right
+###feedburneremailwidget-3
+###gc_message_bar
+###hellobar-container
+###hellobar-takeover
+###hellobar-wrapper
+###hellobar_container
+###jbb_widget_customizable
+###meebo-iframe
+###mvp-prev-next-wrap
+###noti_msg
+###oneSignalBell
+###onesignal-bell-container
+###onesignal-popover-container
+###phxtags-belowcontent
+###piano_bottom_ribbon_wrapper
+###prev-next-wrap
+###prev-post-wrap
+###pubexchange_widget2
+###readNextWidget
+###sdac_feedburner_widget-3
+###simplereach-slide-element
+###sumotest-badge
+###uservoice-feedback
+###uservoice-feedback-tab
+###widget_detail_postlinks
+###wpd-bubble-wrapper
+###wpfront-notification-bar-spacer
+###wpl-likebox
+###zerg-target
+##.UpNext-Wrapper
+##.abicon-feed
+##.android-smart-banner
+##.article-next-sticky
+##.bbccom_text
+##.block-simplenews
+##.dailydeal_wrapper
+##.dd_ajax_float
+##.feedbackTab
+##.floatingfeedback
+##.fyre-notifier-container
+##.g1-teaser
+##.gt-popup
+##.homeDonateCta
+##.house-ad-wrap
+##.inlinkz-widget
+##.ione-widget-jobs
+##.jnews_popup_post_container
+##.klarna-banner
+##.notifyjs-corner
+##.ntfc_overlay
+##.ntfc_popup
+##.onesignal-bell-container
+##.onesignal-customlink-container
+##.onesignal-slidedown-container
+##.partage_reseaux_sociaux
+##.pin-it-btn-wrapper
+##.plista-suggestions
+##.ppsPopupShell
+##.prev-next-article
+##.prevNextPost
+##.readmore-pop-up
+##.recommended-flyout-wrap
+##.sailthruRecommendation
+##.td-more-articles-box
+##.trustpilot-widget
+##.upNext-container
+##.widget-feedburner
+##.widget_al2fb
+##.widget_feedburnerformwidget
+##.widget_feeds
+##.widget_ione-jobs_v2
+##.widget_mailster_signup
+##.widget_mc4wp_widget
+##.widget_mybloglog
+##.widget_pushpad_widget
+##.widget_sdac_feedburner_widget
+##.widget_social_icons
+##.widget_wysija
+##.wpmchimpa-overlay-bg
+! bodyscience.com.au
+##.preezie-widget-modal
+! Someone also bought popups
+###cb-widget-sales-pop
+###goodreviews-wrapper
+###message-purchased.wn-background-template-type-2
+###message-purchased.wn-extended
+###mps-sales-notification
+###recent_sales_ticker
+###sales-pop-plugin
+##.cbSalesPopContainer
+##.ck-sp-app-wrapper
+##.fomo-notification-container
+##.js-pn.payment-notification
+##.noti-container-main
+##.wpcsn-notification-inner
+##.yo-notification
+! Outbrain
+###around-the-web
+###g-outbrain
+###js-outbrain-module
+###js-outbrain-relateds
+###outbrain
+###outbrain-id
+###outbrain-section
+###outbrain1
+###outbrainWidget
+###outbrain_widget_0
+##.ArticleFooter-outbrain
+##.ArticleOutbrainLocal
+##.OUTBRAIN
+##.Outbrain
+##.article_OutbrainContent
+##.box-outbrain
+##.c2_outbrain
+##.component-outbrain
+##.ob-smartfeed-wrapper
+##.outbrain
+##.outbrain-ads
+##.outbrain-bloc
+##.outbrain-content
+##.outbrain-group
+##.outbrain-module
+##.outbrain-placeholder
+##.outbrain-recommended
+##.outbrain-reserved-space
+##.outbrain-widget
+##.outbrain-wrap
+##.outbrain-wrapper
+##.outbrain-wrapper-outer
+##.outbrainWidget
+##.outbrain__main
+##.outbrain_container
+##.outbrain_skybox
+##.outbrainbox
+##.sics-component__outbrain
+##.voc-ob-wrapper
+##.widget_outbrain
+##.widget_outbrain_widget
+! Taboola
+###block-taboolablock
+###js-Taboola-Container-0
+###moduleTaboolaRightRail
+###possible_taboola
+###taboola
+###taboola-above-homepage-thumbnails
+###taboola-below-article-thumbnails
+###taboola-below-article-thumbnails-2
+###taboola-below-disco-board
+###taboola-below-main-column
+###taboola-belowarticle
+###taboola-bottom
+###taboola-bottom-main-column
+###taboola-div
+###taboola-homepage-thumbnails
+###taboola-horizontal-toolbar
+###taboola-in-feed-thumbnails
+###taboola-mid-main-column-thumbnails
+###taboola-native-right-rail-thumbnails
+###taboola-right-rail
+###taboola-right-rail-text-right
+###taboola-right-rail-thumbnails
+###taboola-right-rail-thumbnails-2nd
+###taboola-text-2-columns-mix
+###taboola-vid-container
+###taboola-widget-wrapper
+###taboola_bottom
+###taboola_side
+###taboola_wrapper
+##.divider-taboola
+##.js-taboola
+##.m-article-taboola
+##.taboola
+##.taboola-banner
+##.taboola-bottom-adunit
+##.taboola-container
+##.taboola-frame
+##.taboola-inbetweener
+##.taboola-like-block
+##.taboola-module
+##.taboola-recommends
+##.taboola-sidebar
+##.taboola-sidebar-container
+##.taboola-skip-wrapper
+##.taboola-thumbnails-container
+##.taboola-vertical
+##.taboola-wrapper
+##.taboolaDiv
+##.taboola_module
+##.taboolaloader
+##.trc-first-recommendation
+##.trc-spotlight-first-recommendation
+##.trc_excludable
+##.trc_spotlight_item
+##[data-taboola-options]
+! advocate.com (Video PIP following)
+##.vjs-pip-y-bottom
+! medium nag
+##div.l > .acu.act
+! Google signin popup
+###credential_picker_container
+###credential_picker_iframe
+! Google signin popup (fixes)
+thebetterindia.com##.vspl__gtap-notification-content
+thebetterindia.com##.vspl__gtap-notification-overlay
+! Google signin popup (fixes)
+dashboard.razorpay.com#@##credential_picker_container
+! st343.com/thepointrestaurantandbar.com/locomexicanrestaurant.com/wishbonerestaurant.com
+###consumer-app > #navbar-wrap > .pm-root-announcement
+###consumer-app > .modals-wrap > .pm-follow-v2
+##.pm-follow-wrap
+! nbc websites app element
+##.bp-banner
+! hotjobs widget
+###hot-jobs
+! Medium-based sites (Bottom bar)
+##.js-stickyFooter.u-bottom0.u-fixed
+##.postActionsBar-container
+##.u-zIndexMetabar.u-fixed
+! Gannett close buttons
+###back-to-home > .back-to-home-button
+###close-btn-wrapper > #close-back-btn
+##.article-section > .ui-button-close
+##.close-wrap > .close-overlay
+! Gannett Feedback box
+##.gnt_m_fs.gnt_m
+! Self-promo Ads
+###nca-behavioural-banner-wrapper
+##.RelatedStoriesSupportUsComboInlineContentresponsive
+##.cm-failsafe
+##.cm-hero-container
+##.cn_ecom_placement
+##.consumer-marketing-unit--article-mid-content
+##.cta_magazine_subscription_wrap
+##.ecom-header
+##.ecom-placement
+##.ecom-promo2
+##.featured-post-banner__newsletter-signup
+##.g-cta-subscribe
+##.hdr-sub-ad-01
+##.nca-block-promo-banner
+##.newsblock-support-cta
+##.newsltter-iframe
+##.pn-single-post-wrapper__newsletter-signup
+##.subscription-tout
+! ---------- RSS Buttons ----------
+###floaty-rss
+###follow-rss
+###footer-rss
+###footerrss
+###rightSocialRss
+###rss-subscribe
+###rsslisting
+###sidebar-rss
+###social-links-rss
+##.addthis-rss
+##.follow-link-rss
+##.follow-rss
+##.followRSS
+##.follow__rss
+##.follow_us_rss
+##.footer-rss
+##.footerButtonRSS
+##.footerRSS
+##.p-footer-rssLink
+##.rss-blogroll
+##.rss-footer
+##.widget_rssiconwidget
+!! ---------- Scroll to top ----------
+###ArrowToTop
+###BackToTop
+###BtmToPageTopArea
+###Imgback2top
+###J_returntop
+###PAGE_TOP_LINK
+###ReturnToTop
+###ScrollToTopButton
+###ScrollToTopContainer
+###T-Hoch-Btn
+###ToTopButtom
+###WidgetScrollToTop
+###arrow-scroll-top
+###arrow_to_site_top
+###ast-scroll-top
+###auto-top-link
+###back-to-the-top
+###back-to-top-arrow
+###back-to-top-btn
+###back-to-top-button
+###back-to-top-icon
+###back-to-top-scroll
+###back-top
+###back-top-btn
+###back-top-top
+###back2top
+###backToTopButton
+###backToTop_RT
+###back_to_top_now
+###backtotop-scroll
+###backtotopbutton
+###backtotoplink
+###base_scrollToTop
+###bigslam-footer-back-to-top-button
+###bktotopbtn
+###block-backtotop
+###bt-backtop
+###bt-scroll-top
+###btn--back-to-top
+###btn-back-top
+###btn-go-top
+###btn-scroll-up
+###btn-to-top
+###btn_backtt
+###btn_control_totop
+###button-to-top
+###button-totop
+###buttonScrollTop
+###bw-scroll-top
+###c-backtotop-btn
+###cb-to-top
+###cw_to_top
+###divGoTop
+###div_gotop_outer
+###dynamic-to-top
+###edgtf-back-to-top
+###eltdf-back-to-top
+###fav-backtotop
+###fl-to-top
+###float-btn-backtotop
+###footer-0-BackToTop
+###footer-back-to-top
+###footer-to_top_button
+###footer_scroll_top
+###g1-back-to-top
+###gh-bt
+###gkBackToTop
+###gkTopLink
+###go-to-bottom
+###go-to-top
+###goDownFooter
+###goToTop
+###goToTopButton
+###goToUp
+###goTopFooter
+###goto-top
+###goto-top-page
+###gotoTop
+###gotoTopWrapper
+###gototop:not(body)
+###gp-to-top
+###imPageToTop
+###img_goTop
+###inline-related-post
+###int-btn-top
+###iron-back-top
+###jGoTop
+###jas-backtop
+###jiordano-totop
+###jm-back-top
+###js-back-to-top
+###js-backtoTop
+###js-btnGoTop
+###js-pagetop-btn
+###jsn-gotoplink
+###jump-to-top
+###jump-top
+###jwDisqusBackToTop
+###ktz-backtotop
+###layoutscrolltop
+###linkbacktop_top
+###mainToTopAnchor
+###main_scroll_icon
+###menu-back-to-top
+###mgs-scrollup
+###mkd-back-to-top
+###mkdf-back-to-top
+###move-to-top
+###move_to_top
+###mt-scrollup
+###navBackToTop
+###neklo_scrolltotop_arrow
+###nino-scrollToTop
+###np-scrollup
+###nv-scrollup
+###onTop3
+###page-go-up
+###pageStick-Backtop-btn
+###pagescrolltop
+###picto-to-top
+###pix--totop
+###pl_common_scrollToTop
+###pojo-scroll-up
+###pro-scroll-top
+###qodef-back-to-top
+###return-to-top
+###returnOnTop
+###return_to_top
+###sbttBacktotop
+###scrl-top
+###scroll-top-button
+###scroll-top-link
+###scroll-top-top
+###scroll-toplink
+###scroll-up-button
+###scrollToTopButton
+###scroll_back_to_top
+###scroll_to_top
+###scroll_top_div
+###scroll_top_wrap
+###scroll_totop
+###scrolltoptop
+###scrolltotop
+###scrolltotop_button
+###scrollup_button
+###site-scroll-top
+###siteBackToTop_small_box
+###spnGoTop
+###sticky-back-to-top
+###sttotop
+###tab-to-top
+###tbScrollToTop
+###tc-footer-btt-wrapper
+###theme-go-to-top
+###to-top-button
+###to-top-container
+###to-top-link
+###toPagetop
+###toTo_button
+###toTopLink
+###to_top:not(body)
+###to_top_scrollup
+###top-to-top
+###tornasu
+###tothetop
+###tothetopbtn
+###totop-btn
+###totop-scroller
+###totopBtn
+###totopscroller
+###ts-back-to-top
+###tweScrollTop
+###ui-to-top
+###uiGoToTop
+###uix_jumpToFixed
+###uix_jumpToTopFixed
+###ultra-go-top
+###up-to-top
+###up_scroll_arrow
+###volver-arriba
+###w2b-StoTop
+###wp-smooth-scroll
+###wpfront-scroll-top-container
+###wrap-scroll-toplink
+###xb_ScrollDown
+###xb_ScrollUp
+##.BackToTop
+##.Backtotop
+##.Bt_Gotop
+##.Button-BackToTop
+##.ButtonBackToTop
+##.Footer__backToTopButton
+##.GlobalFooter-backToTop
+##.GlobalFooter-backToTopSection
+##.JumpToTop
+##.NextCheatButton
+##.Page-footer-back-to-top
+##.PageHeaderWithMenu-backTop
+##.ScrollTop
+##.SiteScrollToTopButton
+##.TopGoTop
+##.W_gotop
+##.a-back-to-top
+##.a-core-scroll-to-top
+##.ab__scroll_to_top
+##.ant-back-top
+##.arrow_scroll_up
+##.arrow_up
+##.artee-back-to-top
+##.article-back-to-top
+##.article-return-to-top
+##.aside-backtop
+##.aside-item-top
+##.aux-goto-top-btn
+##.axScrollToTop
+##.b-back-to-top
+##.b-button-to-top
+##.b-footer__btn_up
+##.b-scroll-to-top
+##.b-scroll_to_top
+##.back-to-top-btn
+##.back-to-top-button
+##.back-to-top-container
+##.back-to-top-cta
+##.back-to-top-link
+##.back-to-top-sticky
+##.back-to-top-wrap
+##.back-to-top-wrapper
+##.back-to-top:not(body):not(html)
+##.back-to-top__button
+##.back-to-top_button
+##.back-top
+##.back-top-btn
+##.back-top-top
+##.back-top_button
+##.back2top
+##.backToTop
+##.backToTopButton
+##.backToTopIcon
+##.backToTopVisible
+##.backTopLink
+##.back_Top
+##.back_Top_Icon
+##.back_Top_wp
+##.back_to_top
+##.back_to_top_link
+##.back_top_bg
+##.back_top_top
+##.back_up_but
+##.backto-top
+##.backtop
+##.backtopbutton
+##.backtotop
+##.backtotop-bubble
+##.backtotopbutton
+##.backtotopx
+##.bc_goto_top
+##.bcp-block-back-to-top
+##.bd-backtotop-1
+##.bfc-scroll-to-top
+##.bigslam-footer-back-to-top-button
+##.block_to_top
+##.blog-back-to-top
+##.body-back-to-top
+##.body-btn-top
+##.body-scrollToTop
+##.bof-scroll-top
+##.bottom-scroll-top
+##.box-scrollToTop
+##.bt-pagetop
+##.btn--move-to-top
+##.btn--toTop
+##.btn-back-to-top
+##.btn-cmn-pagetop-wrap
+##.btn-go-top
+##.btn-goto-top
+##.btn-pb-back-to-top
+##.btn-return-top
+##.btn-scroll-to-top
+##.btn-scroll-to-top-container
+##.btn-scroll-top
+##.btn-scroll-up
+##.btn-to-top
+##.btn-top[href^="#"]
+##.btn-tw-backtotop
+##.btn.gotop
+##.btn2top
+##.btnBackTop
+##.btn_backtt
+##.btn_gototop
+##.button--scroll-top
+##.button--toTop
+##.button-back-top
+##.button-go-up
+##.button-scroll-to-top
+##.button-to-top
+##.bw-scroll-top
+##.c-back-to-top
+##.c-back-to-top-cta
+##.c-back-top
+##.c-footer__back-to-top
+##.c-totop
+##.c_pagetop
+##.category-page__back-to-top--button
+##.ccm_go_top
+##.cp-footer-scroll-top
+##.crc-backToTop
+##.ct-js-btnScrollUp
+##.ct-scrollUpButton
+##.ct-totop
+##.custom-back-to-top
+##.dc-go-top
+##.dmtop
+##.dp-footer__to-top
+##.dvt-go-top
+##.eb-toc-go-top
+##.ef3-back-to-top
+##.enigma_scrollup
+##.et_pb_scroll_top
+##.eut-back-top
+##.f-footer__btn_up
+##.f-go-top
+##.fi-back-to-top
+##.fjs-scroll-to-top
+##.fk-ui-goTop
+##.fk_siteBackToTop
+##.footer--scrolltop
+##.footer--totop
+##.footer-back-to-top
+##.footer-back-top
+##.footer-backtotop
+##.footer-button-top
+##.footer-link-to-top
+##.footer-scroll-totop
+##.footer-to-top
+##.footer-top-of-page
+##.footerBackToTop
+##.footerBackToTopLink
+##.footer__back-to-top
+##.footer__back-to-top-button
+##.footer__back-to-top-container
+##.footer__backtotop-btn
+##.footer__go-to-top
+##.footer__nav-to-top
+##.footernavigation__scrollUp
+##.fwscrolltotop
+##.g1-back-to-top
+##.g1-back-to-top-on
+##.ga-scrolltop-anchor
+##.gantry-totop-wrapper
+##.generate-back-to-top
+##.glyphicon-arrow-up
+##.gn-backtotop
+##.go-to-top
+##.go-to-top--btn
+##.go-to-top-arrow
+##.go-to-top-button
+##.go-to-top-desktop
+##.go-to-top-page
+##.go-top
+##.go-top-button
+##.go-top-footer-btn
+##.go-top-wrapper
+##.go-top2
+##.go-up-btn
+##.go2top
+##.goBackTop
+##.goToTop
+##.goTop
+##.goTopButton
+##.go_to_top
+##.go_top_scroll
+##.goto-anchor-top
+##.goto-top
+##.goto-top-container
+##.gotop-btn
+##.gotop-wrapper
+##.gotop_btn
+##.gototop
+##.goup-container
+##.gpe_movetop
+##.gr-footer-back-top
+##.greatwp-scroll-top
+##.gs18-GoTop
+##.hestia-scroll-to-top
+##.hm_go_top
+##.hse-scrolltotop
+##.icon--totop
+##.icon-back-to-top
+##.infinite-footer-back-to-top-button
+##.ins-backtotop
+##.is-totop
+##.itemBackToTop
+##.itw-scrollTop
+##.ivu-back-top
+##.iyc-views-ScrollUp
+##.j-footer__btn_up
+##.jquery-back-to-top
+##.js--scroll-top
+##.js-back-to-top
+##.js-back-to-top-story
+##.js-backToTop
+##.js-button-totop
+##.js-pageTop
+##.js-persistent-nav-top
+##.js-s-f-back-to-top
+##.js-scroll-top:not(html):not(body)
+##.js-scrollTop
+##.js-scroll_to_bottom
+##.js-scroll_to_top
+##.js-toTop
+##.js-top-btn
+##.jsButtonToTop
+##.js_Link_GoUp
+##.js__back-to-top
+##.js_btn_gotop
+##.js_go_up
+##.js_scroll_top
+##.js_to-top
+##.jsbd-Backtotop
+##.jscroll-to-top_link
+##.jump-to-top
+##.jupiterx-scroll-top
+##.kleanity-footer-back-to-top-button
+##.kleo-go-top
+##.layout__scroll-to-top
+##.layoutscrolltop
+##.lia-component-common-widget-scroll-to
+##.link_GoUp
+##.link_to_top
+##.m-ButtonScrollTop
+##.m-back-to-top
+##.m-go-top
+##.m-scroll-top
+##.main-icon--pagetop
+##.material-scrolltop
+##.menu-back-to-top
+##.mh-back-to-top
+##.mintwp-scroll-top
+##.mk-go-top
+##.mnmd-go-top
+##.mod-totop
+##.ms-scroll-to-top-button
+##.mvp-fly-top
+##.mvp-to-top
+##.mypresta_scrollup
+##.nav--back-to-top
+##.navigate-to-top
+##.o-back-to-top
+##.o-backtop
+##.on--totop
+##.os-back-to-top
+##.oui-back-to-top
+##.p-pagetop-btn
+##.page-to-top-visible
+##.pagetop-btn
+##.pb-back-to-top
+##.penci-go-to-top-floating
+##.pgevoke-backtotop
+##.pi-scroll-top-arrow
+##.picto-to-top
+##.pix--totop
+##.prodToTop
+##.q-back-to-top-button
+##.q-mod-back-to-top-button
+##.qc-back-to-top
+##.qw-scrollbutton-top
+##.remonter-la-page
+##.retour_haut
+##.return-to-top
+##.returnToTop
+##.return_top
+##.rh-footer-back-to-top
+##.rlx-back-top
+##.rtp-back-to-top
+##.ruby-back-top
+##.s-btn-gotop
+##.s-f-back-to-top
+##.s-gotop-wrap
+##.s5_scrolltotop
+##.sc-back-to-top
+##.scroll-back-to-top-wrapper
+##.scroll-to-top-arrow
+##.scroll-to-top-btn
+##.scroll-to-top-button
+##.scroll-to-top-class
+##.scroll-to-top-link
+##.scroll-to-top-show
+##.scroll-to-top-square:not(body)
+##.scroll-to-top.btn
+##.scroll-to.top
+##.scroll-top-arrow
+##.scroll-top-btn
+##.scroll-top-button
+##.scroll-top-inner
+##.scroll-top-wrapper
+##.scroll-up-button
+##.scroll-up-button-wrapper
+##.scroll-up-cta
+##.scroll2top
+##.scrollToTop
+##.scrollToTopBtn
+##.scrollToTopButton
+##.scrollToTopLink
+##.scrollToTopText
+##.scrollTo_top
+##.scrollTopButton
+##.scrollUp-child
+##.scroll__to__top
+##.scroll__top
+##.scroll_to_top
+##.scroll_to_top_icon
+##.scroll_top_btn
+##.scrollbtntop
+##.scrollto_top
+##.scrolltop-btn
+##.scrolltotopbutton
+##.scrollup-container
+##.scroolTop:not(body):not(html)
+##.sf-back-to-top
+##.sh-back-to-top
+##.show-top-button
+##.shunno-top
+##.simplifytotop
+##.single-scroll-top
+##.site-footer__back-to-top
+##.site-scroll-top
+##.siteAside_toTop
+##.siteFooter__goTop
+##.slideToTop
+##.sm-page-scroll-to-top
+##.sp-scroll-up
+##.st-site-scroll-top
+##.sticky-back-to-top
+##.sticky_totop_box
+##.stotop
+##.stp--nav-to-top
+##.stt-gototop
+##.styliumToTop
+##.sublink_back_top
+##.sunfw-scrollup
+##.ta_back-to-top
+##.tab-to-top
+##.tb-scroll-to-top
+##.tc-back-to-top
+##.tc-btt-wrapper
+##.td-scroll-up
+##.td-scroll-up-visible
+##.tdr-backtop
+##.ti_scroll
+##.tm-scroll-top
+##.to-pagetop
+##.to-the-top
+##.to-top-btn
+##.to-top-link
+##.toTheTop
+##.toTopBtn
+##.toTopBtnF
+##.toTopButton
+##.to_the_top
+##.top-of-page-button
+##.top-of-page-link
+##.topofpage
+##.torna-su
+##.tornaSu
+##.tornaSuBtn
+##.torna_su
+##.tornasu
+##.tothetop
+##.totop_button
+##.totopbuttom
+##.totopbutton
+##.txt_back_top
+##.u-scrollButtons
+##.ui-back-to-top
+##.ui-backtotop
+##.ui-fixed-panel-go-top
+##.ui-go-top
+##.ui-scrollToTop
+##.ui-to-top
+##.up-to-top
+##.verso-go-top
+##.visible.scroll-to-top
+##.vw-scroll-to-top
+##.vw_m511_back_top
+##.vw_m520_topbar
+##.w-gotop
+##.w-toplink
+##.widget-goto-top
+##.wp-to-top
+##.yjscroll
+##.yukari_git
+##[aria-label="Back to top"]
+##[data-trackname="page-top"]
+##[title="Back to Top"]
+##[title="Go to Top"]
+##a[data-webtrekk="button.scroll_to_top"]
+##a[href="#Back to the top of page"]
+##a[href="#back-to-top"]
+##a[href="#pagetop"]
+##a[href="#scrolltop"]
+##a[href="#top-of-page"]
+##a[href="#tothetop"]
+##a[title="Back To Top"]
+##a[title="Back to top"]
+##a[title="Go To Top"]
+##div#back_to_top
+! ziprecruiter.com widget
+###zipsearch_container
+##.zr_alerts_widget_container
+##.zr_alerts_widget_link
+! fansided sites
+##.format-standard > .fixed-article-nav
+! Autoplay video ads
+##.ad400
+! Slider Elements
+###inner-wrap > .slide-dock-on
+##.site-content > .slide-dock-on
+! huffingtonpost most popular
+##.rail > .ad_spot + .most-popular
+! Google Translate Chrome Nag
+##div[style^="behavior:url(#default#homePage) url(#default#userData);background-color:"]
+! AOL top Bar
+##div[id$="-top-message-bar"][style="top: 0px; display: block;"]
+! Google default search switch nag
+###searchform > #gb > #gbw .gb_Mc[aria-label="promo"] > .gb_ea
+! Google default homepage nag
+###searchform > #gb > #gbw .gb_Vc[aria-label="promo"] > .gb_ga
+!-------------------------Third-party blocking rules--------------------------!
+! *** easylist:fanboy-addon/fanboy_annoyance_thirdparty.txt ***
+||1worldonline.com^$third-party
+||24smi.org^$third-party
+||37signals.com^$third-party
+||a.mailmunch.co/app/$script,third-party
+||actionbutton.co^$third-party
+||activehosted.com^$third-party
+||addinto.com^$third-party
+||adobe-campaign.com^$third-party
+||advantagemedia.com^$third-party
+||allpass.salemwebnetwork.com^$third-party
+||amazonaws.com/fby.js
+||amazonaws.com/fby/
+||amazonaws.com/mailmunch/$script
+||amazonaws.com^*/feedback-v2.js
+||apester.com^$third-party
+||api.branch.io^$third-party
+||api.giphy.com^*/related?$third-party
+||api.search.live.net^$third-party,domain=~bing.com
+||app.convertful.com^$third-party
+||app.e2ma.net^$third-party
+||app.leadspin.dk^$third-party
+||appboy.eu^$third-party
+||attraqt.io^$third-party
+||autolinkmaker.itunes.apple.com^$third-party
+||batch.com^$third-party
+||beeketing.com^$third-party
+||behamics.com^$third-party
+||beopinion.com^$third-party
+||bibblio.org^$third-party
+||bing.com*/bootstrap.js$third-party
+||bing.com/widget/render/$third-party
+||blockmetrics.com^$third-party
+||blogcatalog.com^$third-party
+||blogengage.com^$third-party
+||bloglines.com^$third-party
+||blogtopsites.com^$third-party
+||bookmrk.us^$third-party
+||brightinfo.com^$third-party
+||browser-updater.yandex.net^
+||btn.createsend1.com^$third-party
+||bunnycdn.ru/assets/_bnx/
+||carambo.la^$third-party
+||cdn-1.tstatic.net/js/copy.js
+||celebjihad.com^$third-party
+||civicscience.com/widget/jspoll/$third-party
+||connect.ekomi.de^$third-party
+||connect.nosto.com^$third-party
+||contentexchange.me^$third-party
+||contextly.com^$third-party
+||convertflow.co^$third-party
+||convertsocial.com^$third-party
+||copypoison.com^$third-party
+||copyrightcontent.org^$third-party
+||cre.ma^$third-party
+||creativecommons.org^$image,third-party
+||ctctcdn.com/js/signup-form-widget/$third-party
+||curator.io^$third-party
+||cursors-4u.net^$third-party
+||cxpublic.com^$third-party
+||d15r06k2ko210l.cloudfront.net^
+||d2ip7iv1l4ergv.cloudfront.net^$domain=~zeddit.com
+||d2yyd1h5u9mauk.cloudfront.net^
+||d9etzk30b05yg.cloudfront.net^
+||desipearl.com^$third-party
+||dhpikd1t89arn.cloudfront.net^
+||diigo.com/images/diigo-icon/$third-party
+||discordapp.com/api/servers/*/widget.json$third-party,xmlhttprequest
+||disqus.com/api/*/listRelated.json?
+||dotmailer-surveys.com^$third-party
+||download.skype.com/share/$third-party
+||eff.org/bloggers/badges/$third-party
+||emsecure.net^$subdocument,third-party
+||engage.im^$third-party
+||enquoted.com^$third-party
+||eventful.com^$third-party
+||exitintel.com^$third-party
+||factors.ai^$third-party
+||fark.com/js/$third-party
+||feed.mikle.com^$third-party
+||feedaty.com^$third-party
+||feedbackify.com/f.js$third-party
+||feedblitz.com^$third-party
+||feedburner.com^$image,third-party
+||flashgroup.com^$third-party
+||fluidsurveys.com^$third-party
+||folloyu.com^$third-party
+||foursixty.com^$third-party
+||freetellafriend.com^$third-party
+||frizbit.com^$third-party
+||fwix.com^$third-party
+||gatherup.com^$third-party
+||georiot.com^$third-party
+||getdrip.com^$third-party
+||getfivestars.com^$third-party
+||getglue.com^$third-party
+||getkudos.me^$third-party
+||getmailcounter.com^$third-party
+||getresponse.com^$third-party
+||getscoutapp.com^$third-party
+||getwoohoo.com^$third-party
+||givealittle.co.nz/widget/$subdocument,third-party
+||goemotify.com^$third-party
+||goodreads.com/review/custom_widget/$third-party
+||google.com/shopping/customerreviews/$subdocument,third-party
+||google.com/uds/?file=orkut&
+||gravityrd-services.com^$third-party
+||groupon.com^*/affiliate_widget/$third-party
+||healthgrades.com^$third-party
+||hellobar.com^$third-party
+||hnbutton.appspot.com^$third-party
+||hnlike.com^$third-party
+||honcode.ch^$third-party
+||hoodline.com^$third-party
+||hsleadflows.net^$third-party
+||identi.ca/js/identica-badge.js$third-party
+||img.fark.net/pub/$third-party
+||increasingly.co^$third-party
+||informvisitors.com^$third-party
+||instaemail.net^$third-party
+||instapaper.com/e2$third-party
+||instapaper.com/javascript/$third-party
+||insticator.com^$third-party
+||instiengage.com^$third-party
+||integrate.thrive.today^
+||intelligems.io^$third-party
+||intern.forskning.no^$third-party
+||internetdefenseleague.org^$third-party
+||invite.linescale.com^$third-party
+||jisbar.com^$third-party
+||jobamatic.com^$third-party
+||jobs.thejobnetwork.com^$third-party
+||jobvite.com/widget20.js$third-party
+||js.brow.si^$third-party
+||jsdelivr.net/npm/devtools-detector
+||jsdelivr.net/npm/disable-devtool
+||judge.me^$third-party
+||jugglu.com^$third-party
+||justanswer.com^$third-party
+||kaango.com/feCustomWidgetDisplay/$third-party
+||ko-fi.com/cdn/widget/$third-party
+||leadacity.net^$third-party
+||leadfamly.com^$third-party
+||leadpages.co^$third-party
+||letreach.com^$third-party
+||letsgetsocialnow.com^$third-party
+||licensebuttons.net^$image,third-party
+||ligatus.com^$third-party
+||linkwithin.com^$third-party
+||list-manage.com/subscribe/
+||list-manage1.com/subscriber-count?$third-party
+||live4sport.net^$third-party
+||liveintent.com^$third-party
+||lpages.co/serve-leadbox/$third-party
+||madmimi.com/signups/$third-party
+||magimg.com/random?$third-party
+||mail.bonnier-subscriptions.com^$subdocument
+||mailjet.com/statics/js/widget.modal.js$third-party
+||mailjet.com/widget/$third-party
+||mailmunch.s3.amazonaws.com^
+||manychat.com^$third-party
+||maven.io^*/widget.js$third-party
+||mg2connext.com^$third-party
+||misosoup.io^$third-party
+||mixi.media^$third-party
+||mobj.space/js/appsdiscover/$third-party
+||moreshare.com^$third-party
+||mozo.com.au/widgets/$third-party
+||my.leadpages.net^$third-party
+||my.sendinblue.com/users/subscribe/$third-party
+||myeffecto.com^$third-party
+||myvoicenation.com^$third-party
+||newsgator.com^$third-party
+||newsletter2go.com^$third-party
+||newswhip.com^$third-party
+||nonissue.com^$third-party
+||notifyon.com^$third-party
+||nrcdn.com/custom-script/$third-party
+||nrelate.com^$third-party
+||octaneai.com^$third-party
+||opiniac.com^$third-party
+||opinionbar.com^$third-party
+||opinionstage.com^$third-party
+||opmnstr.com^$third-party
+||optimonk.com^$third-party
+||optinmonster.com^$third-party
+||optkit.com^$third-party
+||optmnstr.com^$third-party
+||optmstr.com^$third-party
+||optnmnstr.com^$third-party
+||optnmstr.com^$third-party
+||os.tc^$third-party
+||page2rss.com^$third-party
+||pageimprove.io^$third-party
+||parse.ly^$third-party
+||partner.dw.com^$third-party
+||pelcro.com^$third-party,domain=newsweek.com
+||phoenix-widget.com^$third-party
+||pippity.com^$third-party
+||placehold.it^$third-party
+||placeholder.com^$third-party
+||platform.loyaltylion.com^
+||plaxo.com^$third-party
+||player.anyclip.com^$script,third-party
+||plista.com^$third-party
+||plugin.me2day.net^$third-party
+||postquare.com^$third-party
+||powerjobs.com^$third-party
+||poxo.com^$third-party
+||pressly.com^$third-party
+||primetag.net^$third-party
+||printfriendly.com^$~subdocument,third-party
+||privy.com^$third-party
+||promoshq.wildfireapp.com^$third-party
+||promotion.monster.com^$third-party
+||promotions.newegg.com^$third-party
+||prooffactor.com^$third-party
+||publisher.monster.com^$third-party
+||purch.com^$script,third-party
+||pushnotifications.click^$third-party
+||qeryz.com^$third-party
+||qrius.me^$third-party
+||quote.fm/services/button/$third-party
+||r42tag.com^$third-party
+||radioonlinehd.net/ads/
+||rankdirectory.org^$third-party
+||rating-widget.com^$third-party
+||rdstation.com.br^$third-party
+||realclearpolitics.com^*/widget_wrapper_$third-party
+||recommendedbookies.co.uk^$third-party
+||reevoo.com^$third-party
+||reftagger.com^$third-party
+||repost.us^$third-party
+||research.net^$third-party
+||reviewability.com^$third-party
+||rightmessage.com^$third-party
+||rokt.com^$third-party
+||royapp.com^$third-party
+||rsspump.com^$third-party
+||s3.amazonaws.com/scripts.hellobar.com/$third-party
+||sail-horizon.com/scout/$third-party
+||sail-horizon.com^$third-party
+||sail-personalize.com^$third-party
+||sales-pop-dot-autoketing-production-sdk.appspot.com^$third-party
+||savvysource.com^$third-party
+||scorespro.com^$third-party
+||scoutle.com^$third-party
+||screenpopper.com^$third-party
+||scribol.com^$third-party
+||scrolltotop.com^$third-party
+||sendsay.ru^$third-party
+||senzari.com^$third-party
+||sg-autorepondeur.com^$third-party
+||sharenice.org^$third-party
+||sidelinesapp.com^$third-party
+||siteswithcontent.com^$third-party
+||skysa.com^$third-party
+||slashdot.org^$third-party
+||sleeknote.com^$third-party
+||sleeknoteboxcontent.sleeknote.com^$third-party
+||smartnewsquiz.com^$third-party
+||smi.pp.ua^$third-party
+||smi.today^$third-party
+||smi2.ru^$third-party
+||smiinformeri.online^$third-party
+||snapwidget.com^$third-party
+||sociallist.org^$third-party
+||socialoomph.com^$third-party
+||socialsnowball.io^$third-party
+||socialtwist.com^$third-party
+||socialvibe.com^$third-party
+||sodahead.com^$third-party
+||squarelovin.com^$third-party
+||statictapcdn-a.akamaihd.net^$third-party
+||storystack.com^$third-party
+||streamspread.com^$third-party
+||styld-by.com^$third-party
+||substack.com/embed$third-party
+||superwidget-assets.gowatchit.com^$third-party
+||surfingbird.ru^$third-party
+||survey.constantcontact.com^$third-party
+||survey.io^$third-party
+||surveygizmo.com^$~subdocument,third-party
+||swiftypecdn.com^$third-party,domain=~swiftype.com
+||swishu.com^$third-party
+||synapsys.us^$third-party
+||systeme.io^$third-party
+||tapcdn.com/mosaic/tap_button.js
+||teamautofollow.com/modules/mod_jtwitter/
+||techbeat.com/wp-content/custom-php/$third-party
+||theechosystem.com^$third-party
+||thelovebucks.com^$third-party
+||theoutplay.com^$third-party
+||tinker.com^$third-party
+||tippola.com^$third-party
+||toolbar.avg.com^$third-party
+||top100-images.rambler.ru^$third-party
+||top100.ru^$third-party
+||topsy.com^$third-party
+||tstatic.net/js/copy.js
+||tuenti.com^$third-party
+||turnsocial.com^$third-party
+||tweetup.com^$third-party
+||uatu.newsquestdigital.co.uk^$third-party
+||ui-widgets.preezie.io/apps/widget/preezie-cta.esm.js
+||upscri.be^$third-party
+||usablenet.com^$third-party
+||usefomo.com^$third-party
+||userdatatrust.com^$third-party
+||vhmengine.com^$third-party
+||vicomi.com^$third-party
+||vk.com/images/$third-party
+||volomedia.com^$third-party
+||vuukle.com/widgets/quiz.html$third-party
+||wahwahnetworks.com^$third-party
+||web.delighted.com^$third-party
+||webme.com/designs/globals/snow2.js
+||webseed.com/javascripts/messagebar.js
+||weworkremotely.com^$third-party
+||wheelysales.com^$third-party
+||widget.adviceiq.com^$third-party
+||widget.beop.io^
+||widget.breakingburner.com^$third-party
+||widget.clipix.com^$third-party
+||widget.clutch.co^$third-party
+||widget.gleamjs.io^$script,third-party,domain=~gleam.io
+||widget.gyde.one^$third-party
+||widget.justwatch.com^
+||widget.pico.tools^$third-party
+||widget.trustpilot.com^$third-party
+||widget.zoorate.com^$third-party
+||widgets.dzone.com^$third-party
+||widgets.itunes.apple.com^$third-party
+||widgets.recruitology.com^
+||widgets.sprinkletxt.com^
+||widgets.tapcdn.com^$third-party
+||widgetsplus.com^$third-party
+||wisepops.com^$third-party
+||wishpond.com^$third-party,domain=~markanthonywineandspirits.ca
+||worldgravity.com^$third-party
+||wp.com/www.feedburner.com/fb/$image
+||ws.audioscrobbler.com^$third-party,domain=~play.google.com|~spotify.com
+||xhamsterlive.com/api/external/$third-party
+||yimg.com/uq/syndication/
+||yimg.com^*/GoldenGate.
+||yottos.com^$third-party
+||youappi.com/widget/$third-party
+||youtube.com/v/*autoplay$third-party,domain=7chan.org|boards.4chan.org
+||ytimg.com^*/www-subscribe-widget-$script
+||zaparena.com^$third-party
+||zdassets.com/ekr/snippet.js
+||zeddit.com^$third-party
+||zergnet.com^$third-party
+||zfacts.com^$third-party
+||ziprecruiter.com/jobs-widget/$third-party
+||zoomanalytics.co^$third-party
+||zotabox.com^*/widgets.js$third-party
+! Someone also bought fomo popups
+/wp-content/plugins/woocommerce-notification/*
+||api.postscript.io/v2/public/popups/
+||app.actionfeed.net/app/popup.js
+||cdn.shopify.com/extensions/*/salekit-v2.js
+||goldendev.win/shopify/show-recent-orders/
+||goodreviews.io^$third-party
+||load.fomo.com^$third-party
+||toastibar-cdn.makeprosimp.com^$third-party
+||widget-social-proof-api.one.store^
+! 3rd-party sounds
+||acquire.io/assets/sound/
+||amazonaws.com/alive5cdn/$media
+||apex.live/media/$media
+||app.chaport.com/sounds/
+||app.onlim.com/app/assets/audios/
+||appspot.com/sounds/chatmsg.mp3
+||azureedge.neti^$media,domain=oct8ne.com
+||bac-assets.com/chat/spa-assets/$media,domain=bankofamerica.com
+||bac-assets.com/spa/widgets/www-chat/$media,domain=bankofamerica.com
+||callback24.io/sounds/
+||carchat24.com/inpagechat/audio/$media
+||carrotquest.app/sounds/
+||cdn-widget.callpage.io/build/sounds/
+||channel.io/plugin/$media
+||chat.octadesk.services/embed/static/media/$media
+||chatango.com/pcache/sounds/
+||cleversite.ru/client/default/sound/
+||cliengo.com^$media
+||cloudfront.net/prod/media/$domain=birdeye.com
+||collectcdn.com^$media
+||contivio.com/Chat2/audio/
+||crisp.chat/static/sounds/
+||czater.pl/assets/sounds/
+||driftqa.com/conductor/assets/media/
+||echatsys.com/sounds/
+||fxcity.pl/images/mp4/$media
+||goftino.com/static/assets/$media
+||gubagoo.io/v4/media/
+||helpscout.net/static/ui-sounds/
+||intelliticks.com/prod/common/$media
+||jivo.ru/sounds/
+||jivosite.com/sounds/
+||js.driftt.com/conductor/assets/media/
+||js.driftt.com/deploy/assets/static/audio/
+||js.intercomcdn.com/audio/
+||kommunicate.io/kommunicate/$media
+||leadback.ru/sounds/$media
+||leadgenic.ru/production/$media
+||live2support.com/uploads/sound/
+||livebeep.com/visitor/events/$media
+||livechatinc.com/widget/static/media/
+||lpsnmedia.net/le_unified_window/$media
+||me-talk.ru/support/sounds/
+||nice-incontact.com/inContact/ChatClient/$media
+||phenompeople.com/txm-bot/prod/$media
+||purechatcdn.com/Content/Audio/
+||qualified.com/packs/$media
+||quicktext.im/assets/audio/
+||raychat.io/assets/widget/audio/
+||reamaze.com/audio/
+||revechat.com/client/sound/
+||richpanel.com/audio/
+||salesmartly.com/sounds/
+||smartsuppcdn.com/assets/sounds/
+||snapengage.com/sounds/
+||static.olark.com/jsclient/sounds/
+||static.widget.trengo.eu/assets/$media
+||streamwood.ru/img/$media
+||tars-file-upload.s3.amazonaws.com^$media
+||tawk.to/*/audio/
+||tidiochat.com^$media
+||userbot.ai/widget-chat/dist/audio/
+||userway.org/widgetapp/sounds/
+||widget.awhy.it/chat/img/$media
+||widget.insent.ai/static/media/
+||widgets.binotel.com/w/chat/$media
+||wpengine.com/wp-content/mu-plugins/wpengine-dotcom/audio/
+||zdassets.com/web_widget/$media
+||zohocdn.com/salesiq/*/sound/
+||zopim.com/widget/sounds/
+||zyratalk.com/contractorschatbot/$media
+! Taboola
+||taboola.com^$third-party
+||taboolasyndication.com^$third-party
+! Outbrain servers
+||outbrain.com^$third-party
+! Embedded video Annoyances
+||player.gliacloud.com^$third-party
+||sendtonews.com/player/sidebar.php?$third-party
+!--------------------------Specific blocking filters--------------------------!
+! *** easylist:fanboy-addon/fanboy_annoyance_specific_block.txt ***
+||aeon.co/_next/static/chunks/SupportBannerHeader.
+||api.qwant.com/*/homepage/trends?
+||cm.usatoday.com^
+||designtaxi.com/css/remodal.css
+||feedback.wwe.com/survey/
+||firesticktricks.com/wp-content/plugins/popup-builder/
+||freedownloadmanager.org/ajax/on_exit_v2.php
+||freedownloadmanager.org/js/th_win_
+||google.com^*/friendconnect.js
+||jobs.mobilemarketingreads.com^
+||js.dhresource.com/survey/$domain=dhgate.com
+||neighbourly.co.nz/stuff/
+||newegg.com/newegg/survey/
+||planelogger.com/Content/Images/avitop6.gif
+||pornve.com/img/300x250f.gif
+||psyche.co/_next/static/chunks/SupportBannerHeader.
+||rule34.xxx/images/shirt2.jpg
+||sabcnews.com^*-iabsa-
+||sp-marketing-assets.s3.us-west-2.amazonaws.com^$domain=heraldnet.com
+||wikimedia.org/w/index.php?title=Special:BannerLoader
+! ---------- Scroll To Top Buttons ----------
+||breedingmoms.com/js/top.js
+||dailypioneer.com/images/top.png
+||filmaffinity.com/images/arrow-up2.png
+||jefftucker.org/travels/res/pagetop.svg
+||myip.ms/css/red/images/nav_
+!------------------------Specific element hiding rules------------------------!
+! *** easylist:fanboy-addon/fanboy_annoyance_specific_hide.txt ***
+e-reader-info.com,foreignpolicy.com,seatguru.com###TB_overlay
+e-reader-info.com,foreignpolicy.com,seatguru.com###TB_window
+beautyhigh.com,thevivant.com###acquisition-bar-wrapper
+econotimes.com###adPopup
+neowin.net###ajax-spinner
+jobisjob.co.uk###alert-footer-box
+123apps.com,mp3cut.net,online-video-cutter.com###allapps-extension-popup
+slashdot.org###announcement
+indianexpress.com###append_breaking_box
+arnnet.com.au###art-next_signifier
+independent.co.uk###article-im-prompt
+publishersweekly.com###bbstar-popin
+slideme.org###block-block-10
+energy.gov###block-follow-site
+hrw.org###block-signupbarblock
+neonnettle.com###bottomBar
+didyouknowfacts.com###callout
+knowyourmeme.com,ndtv.com###cboxOverlay
+arabtimesonline.com,elpasoheraldpost.com,loadthegame.com###check-also-box
+medicaldaily.com,ndtv.com###colorbox
+rttnews.com###divMVPopup
+amazines.com###divStayTopLeft
+railstutorial.org###dropBG
+bit.pt,channelbiz.co.uk,channelbiz.it,itespresso.fr,itespresso.it,silicon.de,silicon.es,silicon.fr###editorial-popin
+westernjournal.com###firefly-poll-container
+youtube4kdownloader.com###fixed-addon-banner
+uberhumor.com###fixed_bottom_bar_back
+uberhumor.com###fixed_bottom_bar_text
+streetinsider.com###floating_footer
+entireweb.com###footer
+worldfinance.com###footer_fixed
+fansshare.com###galemail
+ebay.com###gh-bt
+thumbzilla.com###greeting
+stackoverflow.com###hireme
+startpage.com###home-top-banner
+bizarrepedia.com###in_and_out
+soft32.com###in_touch
+computerhope.com###infobar
+deepl.com###iosAppAdPortal
+codecanyon.net###js-customer-satisfaction-popup
+irccloud.com###limits > a
+phoronix.com###main > script + [style]
+motogp.com###main_footer
+planner5d.com###modal-confirmTerms
+xkcdb.com###nagbox
+90percentofeverything.com###nav-above
+amazon.com###nav-upnav
+amazon.ca,amazon.co.uk,amazon.com,amazon.com.au###nav-upnav[style]
+mcsweeneys.net###navigation
+stuff.co.nz###neighbourly
+boomlive.in###news_on_exit
+ifixit.com###notifications
+rt.com###offers
+mp4upload.com###over
+addons.opera.com###overlay
+seroundtable.com###pagelinks
+pagesix.com###pagesix-app-flyout__wrapper
+dmv-practice-test.com###pop-up-show
+imagenimage.com,imagenpic.com,imageshimage.com,imagetwist.com###popupOverlay
+ambotv.com###post-nav
+crimereads.com,lithub.com###post_more_wrapper
+picturecorrect.com###promo
+cosmicscans.com###radio-player-container
+aquamanga.com,reaperscans.com###radio_content
+petside.com###recommendo
+favbrowser.com###related
+sfist.com###related-module
+girlonthenet.com###related-posts > div
+fudzilla.com###relatedarticleflyoutbx2
+designobserver.com###relatedposts
+whatsoniphone.com###rp_list
+geeksaresexy.net,mayoclinic.com,nintendogal.com###rss
+beautyhigh.com###scStb
+organicauthority.com###scroll-box
+allvoices.com,statetechmagazine.com,thesixthaxis.com###scrollingDiv
+moshtix.com.au###sectionMoshtixSubscribeForm
+appbrain.com###send-email
+datamation.com,support.mozilla.org###sg-popup
+songsterr.com###showroom
+realitytvworld.com###sideheadlinescontainer2
+phonescoop.com###socpage
+rediff.com###span_subscibe
+softpedia.com###spsbtns
+slashdot.org###stackcommerce-adwrap
+lookbook.nu###sticky_container
+wqxr.org###story-chunk
+afr.com###story_tools
+okmagazine.com###text-3
+modamee.com###text-34
+consortiumnews.com###text-5
+bonjourlife.com,visualnews.com###toHide
+amtrak.com,collegiatetimes.com,titantv.com###toolbar
+japantimes.co.jp###top_jump
+greenweddingshoes.com,techday.com###un-button
+digitalrev.com,ieee.org,makeagif.com,post-gazette.com,tldrlegal.com,yourtvseri.es###uvTab
+mrfood.com###viewportGreyout
+metro.co.uk###we-need-monies
+pornhub.com###welcome
+informer.com###wi-plugin-corner
+websiteoutlook.com###wo_ext
+youtube.com###yt-lang-alert-container
+photobucket.com###zenbox_tab
+imcdb.org##.JustWatch
+who.com.au##.MagDriver
+online-stopwatch.com##.OSAd_full
+kbb.ca##.PopupBackground
+atlasobscura.com##.ProgrammaticMembershipCallout--taboola-member-article-container
+news.bloomberglaw.com,news.bloombergtax.com##.TheArticleClothesline_wrapper_2LSY-
+bradblog.com##.TopBar
+amp.reddit.com##.UpsellModal
+groupon.com,wivb.com##.actions
+arstechnica.com##.ad_xrail
+atheistrepublic.com##.af-form
+nofilmschool.com##.af-form-wrapper
+protrumpnews.com##.affiliate-disclaimer
+worldhistory.org##.ahe-ad
+screamingfrog.co.uk##.animate-fly
+soundcloud.com##.announcement
+tutsplus.com##.announcement-bar
+deeditor.com##.ant-alert
+careerkarma.com##.ant-modal-root
+tiktok.com##.app-promotion
+forbesindia.com##.artical-controls
+knowablemagazine.org##.article-flyout
+crainscleveland.com,crainsnewyork.com##.article-recommended
+goodmorningamerica.com##.article-tools
+elespanol.com##.article__arrow
+elespanol.com##.article__footer-nav
+pokernews.com##.article__suggest
+iclarified.com##.article_footer
+imagetwistcams.com,strip.chat,stripchat.com,xhamsterlive.com##.auth-modal-signup
+stickam.com##.awdSnsIcons
+livejournal.com##.b-fader
+ethnews.com,goodnet.org,newstalkzb.co.nz,springer.com##.banner
+userbenchmark.com##.be-caption
+userbenchmark.com##.be-lb
+userbenchmark.com##.be-ls
+userbenchmark.com##.be-mr
+rawstory.com##.below-content-appeal
+eepower.com##.bg-overlay
+bhaskar.com##.bgTB
+multiplesclerosisnewstoday.com##.bio-lead-form
+any.run##.black-friday-banner
+wsadirectory.com##.blockOverlay
+pixsor.com,vippix.com##.bookmarks
+thedarewall.com##.bottom-bar
+alarabiya.net##.bottom-nav
+ctovision.com,fullepisode.info,phonerpt.com,umpcportal.com##.bottomcontainerBox
+tactxflashlights.com##.boxzilla-container
+apkcombo.com##.browser-extension
+bigthink.com##.bt-block__inner
+ncrypted.net##.btm-left-popupbox
+fbi.gov##.castle-nextprev
+sportsocratic.com##.cb-customize-desktop
+revisionworld.co.uk##.ccc-widget
+similarsites.com##.ceiizM
+asus.com##.check-survey-info
+convertio.co##.chrome-app
+meet.jit.si##.chrome-extension-banner
+techcrunch.com##.close-button
+phoenixnap.com##.code-block
+knowyourmeme.com##.combo-wrapper
+freemake.com,next-gen.biz##.community
+avg.com,copykat.com,snagfilms.com##.connect
+themoscowtimes.com##.contribute-teaser-mobile
+xhamster.com,xhamster.desi##.creator-promo-bg
+timesofisrael.com##.crm-post-module
+frontpagetech.com##.cs-entry__prev-next-item
+upqode.com##.cursore-uq
+emails-checker.net##.custom-social-proof
+datacamp.com##.dc-ps-banner-wrapper
+neowin.net##.deals
+slashdot.org##.deals-footer
+opensecrets.org##.dontprintme
+the-sun.com##.dpa-variant-sidebar
+dhgate.com##.drainagebanner
+rightwingwatch.org##.dropdown-banner
+edugeek.net##.eg-ics-rss-64px
+computingunleashed.com##.email
+logicbuy.com##.email_signup
+booking.com##.emk_footer_update
+codecalamity.com##.entry-bar
+slickdeals.net,x2download.com,xranks.com,y2meta.com,yt5s.com##.extension
+qwant.com##.extension-item
+audio-joiner.com,convert.io,extract.me,online-voice-recorder.com,pdf.io,video-converter.com,webcamera.io##.extension-popup
+smhlmao.com##.f-page
+indexwp.com##.fancybox-overlay
+indexwp.com##.fancybox-wrap
+7is7.com,criosweb.ro##.feed
+computingunleashed.com##.feeds
+istreamy.com##.fixed-nav
+anandtech.com,citytv.com,games.on.net,slantmagazine.com,superbooyah.com,twitchy.com,unhearit.com##.follow
+wisebread.com##.follow-block
+pcpro.co.uk##.foobar-wrapper
+egoallstars.com,egotastic.com,washingtonian.com,wwtdd.com##.footer
+atlasobscura.com##.footer-banner
+drugs.com##.footer-feature
+ajc.com##.footer-wrapper
+hiapkdownload.com,modapkdown.com##.fot-float-box
+thestar.com.my##.freeModal
+ispreview.co.uk##.g_bar
+china.com,hackingloops.com##.go_top
+techweez.com##.gofollow
+justjaredjr.com##.grabtherssfeed
+world-of-satellite.com##.guestwarn
+askubuntu.com,mathoverflow.net,serverfault.com,stackexchange.com,stackoverflow.com,superuser.com##.hero-box
+qwant.com##.home__snippet__extension
+surveymonkey.com##.homepage-banner
+timeshighereducation.com##.homepage-hero
+inews.co.uk##.inews__back-to-top
+esetindia.com##.jqmOverlay
+esetindia.com##.jqmWindow
+mims.com##.jquery-modal.blocker
+askubuntu.com,mathoverflow.net,serverfault.com,stackexchange.com,stackoverflow.com,superuser.com##.js-dismissable-hero
+askubuntu.com,mathoverflow.net,serverfault.com,stackexchange.com,stackoverflow.com,superuser.com##.js-freemium-cta
+euronews.com##.js-swip-btn
+mail.zoho.com##.jsBookmarkExtn
+avclub.com,deadspin.com,gizmodo.com,jalopnik.com,jezebel.com,kotaku.com,lifehacker.com,theinventory.com,theonion.com,theroot.com,thetakeout.com##.js_commerce-inset-permalink
+haberiniz.com.tr##.kanews-banner
+similarsites.com##.kapuda
+ctrlq.org##.labnolFB
+modernluxury.com##.leaderboard
+theweek.co.uk##.leaf
+wbur.org##.lenoir-campaign
+pole-emploi.fr##.link-top
+kakaocorp.com##.link_top
+disqus.com##.login-overlay__wrapper
+sony.net##.ly_pagetop-main
+cheknews.ca##.mailchimp-form
+rogerebert.com##.mailing-list
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.de,amazon.es,amazon.fr,amazon.in,amazon.nl,amazon.sg##.maple-banner
+fandom.com##.marketing-notifications
+motherless.com##.media-action-networks
+hotklix.com##.menu
+amazon.com##.mini-atf
+time.com##.mobile-anchor-container
+bournemouthecho.co.uk,jobomas.com,patient.info##.modal
+bournemouthecho.co.uk,decalgirl.com,feedspot.com,jobomas.com,police.uk,younow.com##.modal-backdrop
+sportsadda.com##.modal-freeplay
+92q.com,cassiuslife.com,espnrichmond.com,foxync.com,hellobeautiful.com,hiphopnc.com,hotspotatl.com,ipowerrichmond.com,joycolumbus.com,kissdetroit.com,kissrichmond.com,kysdc.com,magicbaltimore.com,majic945.com,majicatl.com,mybaltimorespirit.com,myboomatl.com,mycolumbusmagic.com,mycolumbuspower.com,myhoustonmajic.com,mymajicdc.com,mypraiseatl.com,myspiritdc.com,newsone.com,newstalkcleveland.com,oldschool1053.com,praise1027detroit.com,praisebaltimore.com,praisecharlotte.com,praisecleveland.com,praisedc.com,praisehouston.com,praiseindy.com,praisephilly.com,radionowhouston.com,radionowindy.com,rnbcincy.com,rnbphilly.com,thebeatdfw.com,theboxhouston.com,thelightnc.com,tlcnaptown.com,wiznation.com,wolbbaltimore.com,woldcnews.com,wzakcleveland.com,zhiphopcleveland.com##.module-recommended
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.de,amazon.es,guardianbookshop.co.uk##.moduleBookmarkLinks
+urbandictionary.com##.mug-ad
+retroist.com##.nav-links
+rwe.com##.navToTop
+canonclast.com,futurecapetown.com,kqed.org,worldarchitecture.org##.navigation
+filehorse.com##.networking
+dhgate.com##.new-pack-mask
+dhgate.com##.new-pack-pop
+ndtv.com##.new_nextarrow
+ndtv.com##.new_prevarrow
+bmwblog.com,gwinnettdailypost.com,porn5.com##.next
+ethnews.com,pokerupdate.com,wn.com##.next-article
+thetablet.co.uk##.next-article-btn
+businesstech.co.za,mybroadband.co.za##.next-previous-article
+contactmusic.com##.nextArticle
+catchnews.com##.next_stories_div
+ancient-origins.net##.nextart
+bellasugar.com.au##.node-navigation
+reed.co.uk,thecourier.co.uk,thephuketnews.com##.notification
+hth-kitchen.com##.notificationbar
+latinospost.com##.nw_cont
+latinospost.com##.nwletter
+politifact.com##.o-disruptor
+slickdeals.net##.omegaBanner
+dnainfo.com,minus.com,virginislandsdailynews.com##.overlay
+stargazette.com##.overlay-arrows-anchor
+astronomy.com,feedspot.com##.overlay-wrapper
+app.slack.com##.p-download_modal.c-fullscreen_modal.ReactModal__Overlay--after-open
+app.slack.com##.p-ia__workspace_banner.p-client__banners
+southfloridagaynews.com##.pagenav
+4sysops.com##.pagination-sticky
+clevelandjewishnews.com,kmov.com,kptv.com##.paging-link
+atheistrepublic.com##.pane-aweber-webform
+playbuzz.com##.pb-page-overlay
+latestgadgets.tech,rebooti.com##.popnav
+classicalite.com##.popup_bg
+okmagazine.com##.popupad-base
+rap-up.com,wellnessmama.com##.post-nav
+weebly.com##.powered-by
+ddnews.gov.in##.pre_next
+reddit.com##.premium-banner
+reddit.com##.premium-banner-outer
+streetinsider.com##.premium_signup
+bmwblog.com,gwinnettdailypost.com,porn5.com##.prev
+thetablet.co.uk##.prev-article-btn
+stylist.co.uk##.promo
+propublica.org##.promo-newsletter-signup-2
+mediaite.com##.promo-sidebar
+jns.org##.registration-popup
+shopstyle.com##.ribbon
+booksnreview.com##.rightbox1
+plataformamedia.com##.saxon-bb-block
+clubcall.com##.section-sticky-footer
+justjaredjr.com##.sidebarbutton
+healthboards.com##.sign
+licensing.biz,mobile-ent.biz##.sign-up
+investopedia.com##.signup
+github.com##.signup-prompt
+wowway.net##.single-cube_clusters_promo-cluster_hrefWrapper
+theguardian.com##.site-message
+hannity.com##.sitewide-tout
+hannity.com##.sitewide-tout_l
+mrskin.com##.so-parallax
+latinospost.com##.soc_box
+thehindu.com##.spl-article-bottom
+blogcritics.org##.spread
+goodthingsguy.com##.ss-pu-container
+engadget.com,thehollywoodgossip.com##.sticky
+i24news.tv##.sticky-bottom-banner-wrapper
+laphamsquarterly.org##.sticky-issue
+space.com##.sticky-player-background
+californiasunday.com##.story-actions
+ibtimes.co.uk,knoxnews.com##.story_tools
+gamingonphone.com##.stream-item-top
+medianama.com##.sub-form
+thesmokinggun.com##.sub-links
+gulfnews.com##.subscribe
+gpfans.com##.taboonews
+businessinsider.com,insider.com##.targeted-recommended
+genengnews.com##.td-more-articles-box
+wpneon.com##.theiaStickySidebar
+tiktok.com##.tiktok-zeo9hm-DivPromotionContainer
+tecmint.com##.top-bar
+dailymaverick.co.za##.top_stories
+narcity.com##.tv-section
+adotas.com,boldprogressives.org,drsinatra.com,hotscripts.com,mac-forums.com,mercola.com,pier1.com,squawkfox.com,thebolditalic.com,underarmour.com,warrior.com##.ui-dialog
+squawkfox.com##.ui-dialog-overlay
+boldprogressives.org,drsinatra.com,hotscripts.com,mac-forums.com,mercola.com,pier1.com,thebolditalic.com,underarmour.com,warrior.com##.ui-widget-overlay
+venturebeat.com##.vb_widget
+imagetwistcams.com,strip.chat,stripchat.com,xhamsterlive.com##.view-cam-watching-limit
+grist.org,motherjones.com##.widget
+sciencefocus.com##.widget-area-above-footer
+welovetrump.com##.widget-area.sidebar
+spring.org.uk##.widget_hustle_module_widget
+tp-link.com##.widgets-top-banner
+youtube-nocookie.com,youtube.com##.ytp-ce-playlist
+youtube-nocookie.com,youtube.com##.ytp-pause-overlay
+portableapps.com##[alt="RSS"]
+privacywall.org##div[style="top:0;right:0;position:absolute"]
+ispreview.co.uk##div[style="width:100%;clear:both;"]
+forbes.com##fbs-ad
+celebified.com##footer
+! Self-promo Ads
+progressive.org###XHMSPXWS
+truthout.org###XYGYXDQD
+investors.com###action_insert_15511419671934590
+thurrott.com###announcment-banner
+democracynow.org###appeal
+wikihow.com###article_courses_banner
+autoblog.com###autoblog-daily-digest
+bing.com###b_pole
+learn.microsoft.com###banner-holder
+pimylifeup.com###block-2
+startpage.com###block-display
+apkmody.io###body-fixed-footer
+fflogs.com,warcraftlogs.com###bottom-banner-fallback
+aeon.co###bottom-portal
+wikipedia.org###centralNotice
+dailymail.co.uk###chromelessPlayer
+theguardian.com###contact-the-guardian
+euractiv.com###contribs_banner
+thejournal.ie###contribution-prompt-overlay
+search.brave.com###cta-make-default
+news9live.com###cube_spinner
+marijuanamoment.net###custom_html-8
+liliputing.com###custom_html-9
+sunsky-online.com###divWelcome
+the74million.org###donate_rocket
+isglobal.org###donation-button-footer
+kriptomat.io###earn-sidebar
+proprofs.com###exit_popup_custom
+zacks.com###featured_zacks_rank_stocks
+theshot.net.au###fixed_footer
+halifaxexaminer.ca###gallery-1
+geekwire.com###geekwire-events-sidebar
+geekwire.com###geekwork-sidebar
+marketplace.org###global-giving-item
+kqed.org###header-cts
+archlinux.org###home-donate-button
+theshot.net.au###home_row_1
+dailymaverick.co.za###in-article-action-1
+alternet.org,rawstory.com###kindest-container
+gq-magazine.co.uk###link-banner
+investors.com###login-banner
+dailywire.com###lts-banner
+libertynation.com###memberZoneFullSub
+texastribune.org###message-bar-id
+mikesmoneytalks.ca###mikes_reading
+amazon.com###mobile-immersive-player
+spiked-online.com###notice-banner
+proprofs.com###over-overlay
+amazon.com###percolate-ui-ilm_div
+marketingweek.com###piano_catfish_wrapper_bottomfull
+asia.nikkei.com###pianoj_ribbon
+novinite.com###popup
+kyivindependent.com###popup-patreon
+lastmomenttuitions.com###popups
+dailymaverick.co.za###post-article-footer
+capsulenz.com,interest.co.nz###pp-banner
+lastmomenttuitions.com###preload
+interest.co.nz###presspatron-footer
+salemnews.net###promo
+northcountrypublicradio.org###promo_insert_container
+investors.com###researchTools
+dailymaverick.co.za###ribbon-container
+fflogs.com,warcraftlogs.com###right-ad-box
+fflogs.com###right-vertical-banner
+pocketgamer.com###site-background
+humblebundle.com###site-xpromo-banner
+wikipedia.org###siteNotice
+orbispatches.com###sitetop
+marinetraffic.com###skyscraper_container_front
+undark.org###special-message
+spiked-online.com###sticky-footer
+finbold.com###sub-intent
+theglobeandmail.com###subscription-pencil-area
+slideserve.com###suggestion
+austinchronicle.com###support-bar
+the74million.org###support_box
+news.crunchbase.com###text-8
+ghacks.net###the-day-in-history
+topic.com###third-party--viewport-bottom
+freightwaves.com###tie-block_521
+geekwire.com###tips-sidebar
+themedialine.org###tmlPopupDonate
+nashvillescene.com###tncms-region-article_bottom
+lmtribune.com###tncms-region-page_sticky_anchor
+coingecko.com###top-announcement-header
+kyivindependent.com###top-banner
+fflogs.com,warcraftlogs.com###top-banner-fallback
+insidethegames.biz###top-story-alert
+marinetraffic.com###topBanner
+tipranks.com###top_ribbon
+w2g.tv###w2g-center-doit
+amazon.com###watchNow_feature_div
+metro.co.uk###we-need-monies
+philosophynow.org###welcome_box
+auto.economictimes.indiatimes.com###yolooverlay
+sfstandard.com###zoom-event
+fivebooks.com##.-donate
+imgur.com##.Ad
+photonics.com##.BOX_MarginOut
+wgbh.org##.BottomPopupModule
+atlasobscura.com##.DDPageSiderailAds
+tabletmag.com##.DonationPopup
+talkingpointsmemo.com##.Footer__ModalAds
+techlila.com##.IRPP_button
+oilprice.com##.JoinCommunityBtnContainer
+marieclaire.com.au##.MagDriver
+disk.yandex.com,disk.yandex.ru##.PSHeader-Center
+talkingpointsmemo.com##.PostArticleAsk
+sacurrent.com##.PromoTopBar
+popsci.com##.PromotionalStripe
+l2beat.com##.ReportFloatingBanner
+zerohedge.com##.TheMarketEarHomePageSidebar_container__dCIOv
+laist.com##.TogglerWrapper
+tripadvisor.com##.ZkqhQ
+aarp.org##.aarpe-site-banner
+support.apple.com##.accsoffer-wrapper
+turners.co.nz##.ad-container
+newrepublic.com##.ad-container-house
+twitchquotes.com##.ad-parent
+thejakartapost.com##.ad-v-box
+thejakartapost.com##.ads-large-leaderboard
+universetoday.com##.adv-link
+hindawi.com##.advWrapper
+adexchanger.com##.adx-membership
+amtrak.com##.agr-callout
+thefire.org##.alert-banner
+science.org##.alert-donation
+downloaddevtools.com##.alert-warning
+damemagazine.com##.an_independent
+darkreading.com##.announcement
+thebookseller.com##.ao-cpa
+dailysabah.com##.aos-animate
+apnews.com##.ap_banner-container
+coinpaprika.com##.api-promo-banner
+apkmirror.com##.apkm-timed-slider
+nature.com##.app-featured-row__item
+disk.yandex.com##.app-promo-banner
+grist.org##.appeal-bar-donation-list
+grist.org##.appeal-bar-text
+thewalrus.ca##.area-arbitrary.widget_custom_html
+gothamist.com##.article-donation-CTA
+thetyee.ca##.article-footer--builder-ask
+atlasobscura.com##.article-gastro-interruptor
+newsroom.co.nz##.article-support
+damemagazine.com##.article-support-bump
+damemagazine.com##.article-top-donate-bump
+aarp.org##.backgroundParsys
+freecodecamp.org,monkeytype.com,singsnap.com,wikipedia.org##.banner
+flaticon.com##.banner-campaign
+icij.org##.banner-donation-default-inline
+icij.org##.banner-donation-default-sidebar
+thespectator.com##.bannerExternalContainer
+kyivindependent.com##.bannerPatreonCommon
+kyivindependent.com##.bannerPatreonFreedomOfPress
+bitfinex.com##.banners-banner
+billboard.com##.bb-pro-promotional-banner
+out.com##.bean-house-promo
+snopes.com##.become_member_section
+inthesetimes.com##.bg-blackest
+beincrypto.com##.bic-custom-banner
+zycrypto.com##.block-3
+thenational.scot##.block-article-shoutout
+consumer.org.nz##.block-general-copy
+insideedition.com##.block-tip-block
+newsnow.co.uk##.blocker
+aclu.org##.blocklink-container
+news.crunchbase.com##.blog-footer-cta
+news.crunchbase.com##.blog-sidebar-ad
+blog.avast.com##.blog-sidebar-ad-img
+lambdatest.com##.blog__cta__signup
+mljar.com##.blogsidebarimg
+jacobin.com##.bn-at
+flaticon.com##.bn-space
+churchmilitant.com##.body-copy > div > [href="/user/subscribe"]
+gofugyourself.com##.books
+inthesetimes.com##.border-red
+restofworld.org##.bottom-bar
+stoodnt.com##.boxzilla-center-container
+stoodnt.com##.boxzilla-overlay
+arxiv.org##.bps-banner
+mcsweeneys.net##.breaking-news-container
+investors.com##.broadcast-text
+404media.co##.btn-primary
+vox.com##.c-article-footer-cta
+marketplace.org##.c-callout-banner
+marketplace.org##.c-fetured-cards__card-freeform
+marketplace.org##.c-splash-backdrop
+folha.uol.com.br##.c-subscribe-ads
+folha.uol.com.br##.c-top-signup
+ny1.com##.caption-container
+aarp.org##.caregivingPromotion
+nationalpost.com##.carousel-widget
+educba.com,thecoastnews.com##.code-block
+americanwirenews.com##.coffer-box
+alistapart.com##.coil-banner-message-container
+foxbusiness.com,foxnews.com##.commenting-nation-promo
+kyivindependent.com##.commercialServicesBanner
+citybeat.com,cltampa.com##.commitchange-donate
+dallasobserver.com##.comp-shell-supportus
+bitdegree.org##.companion
+wired.com##.consumer-marketing-unit--article-mid-content
+gq.com##.consumer-marketing-unit--cm-footer
+ici.radio-canada.ca##.container-adbox-autopromo
+vox.com##.contribute-banner
+thejournal.ie##.contribution-prompt
+thepostmillennial.com##.contributions-container
+thepostmillennial.com##.contributions-epic
+onegreenplanet.org##.cookbook-button-section
+bitdegree.org##.countdown-container
+wellgames.com##.cross-promo
+c-span.org##.cspan-ad-still-prebid-placeholder
+tsn.ca##.cta-element
+commondreams.org##.d-print-none.position-relative
+texastribune.org##.db-frame-pinned
+lambdatest.com##.demo__cta
+streamable.com##.desktop-banner
+dailyfx.com##.dfx-dnaQuizBanner
+dailyfx.com##.dfx-ftgBannerWidget
+dailyfx.com##.dfx-inHouseGuideBannerComponent
+swordscomic.com##.dialog-invitation
+designtaxi.com##.displayboard
+fullfact.org,opendemocracy.net##.donate
+rabble.ca##.donate-bar
+rabble.ca,sciencenews.org##.donate-box
+lifesitenews.com##.donate-callout
+insideclimatenews.org##.donate-cta
+mprnews.org##.donateAsk
+democracynow.org##.donate_banner
+peoplesworld.org##.donate_strip
+revolver.news##.donation-header
+jam-news.net##.donation-popup-box
+citizensforethics.org##.donation__container
+bgr.com##.dont-miss
+nzherald.co.nz##.down.premium-toaster
+aliexpress.com,aliexpress.us##.drogue-poplayer-modal
+dailynewshungary.com##.dtafter
+linktr.ee##.eWFZXO
+libertynation.com##.embedshortcode
+dealnews.com##.engagement
+tech.hindustantimes.com##.entryPointBanner
+escapistmagazine.com##.escapist-plus
+banggood.com##.exclick.top-item
+aeon.co##.fdQVQf
+clevescene.com,metrotimes.com,orlandoweekly.com,riverfronttimes.com,sacurrent.com##.fdn-support-us-button-block
+smashingmagazine.com##.feature-panel
+educba.com##.five-sixths
+truthout.org##.fixed-bottom
+total-croatia-news.com##.fixed-slider-height
+goodmenproject.com##.floatingchat-container-wrap
+azuremagazine.com##.flyout
+pirg.org##.flyout1
+bikeradar.com##.footer-promotional
+climeworks.com##.footerCtaBanner
+grist.org##.footer__cta-wrapper
+jotform.us##.formFooter-wrapper
+propublica.org##.fundraising-letter-inline
+spotlightpa.org##.ga\:component\:main\:inline\:support
+thewalrus.ca##.gala_banner
+quadraphonicquad.com##.gb-donate_wrapper
+flyingmag.com##.get-magazine
+forums.opera.com##.get-opera
+artnews.com##.get-the-magazine__outer
+readtangle.com,thecompanion.app##.gh-portal-triggerbtn-iframe
+slaynews.com##.give-embed-form-wrapper
+insideedition.com##.got-tip
+mydailyfreedom.com,patriotfetch.com##.gpoll_enabled_wrapper
+grist.org##.grist-modal-ad-blocker
+bowhuntingmag.com,firearmsnews.com,flyfisherman.com,gameandfishmag.com,gundogmag.com,gunsandammo.com,handgunsmag.com,in-fisherman.com,northamericanwhitetail.com,outdoorchannelplus.com,petersenshunting.com,shootingtimes.com,wildfowlmag.com##.has-promo
+texastribune.org##.has-vert-bar--padded-xxl
+duckduckgo.com##.header--aside.js-header-aside > .header--aside__item > [class]
+wdet.org##.header-donate
+myanimelist.net##.header-mini-banner
+themarkup.org##.header-stripe
+infoq.com##.header__bottom__events
+xhamster.com,xhamster.desi##.heading-promo
+insidethegames.biz##.hide-for-contributors
+48hills.org##.hills-inline-full-width
+heise.de##.ho-bg.z-0.relative
+di.fm##.homepage-upsell
+techcrunch.com##.homepage__event-promo
+betootaadvocate.com##.hustle-slidein-content
+miaminewtimes.com##.ia-support
+insideclimatenews.org##.icn-donate-block
+informationisbeautiful.net##.iib-banner-link
+informationisbeautiful.net##.iib-page-promo
+metservice.com##.img-responsive-container
+snopes.com##.in-house-placement
+brighteon.com##.index_top_banner
+thespinoff.co.nz##.infinite-scroll-divider
+road.cc##.info-subscription-box
+iranwire.com##.iw-ad-slider
+nationofchange.org##.jetpack-lazy-image--handled
+thecanary.co##.join-panel
+bonappetit.com,wired.com##.journey-unit
+fool.ca##.js-badger-accordion
+archive.org##.js-donate-banner
+grist.org##.js-membership-ad.membership-ad
+themarkup.org##.js-promotion
+defensescoop.com,fedscoop.com##.js-stickybar
+virgool.io##.js-userLogin-popup.popup-register
+golem.de##.li-reset
+thejakartapost.com##.loginAds
+londonnewsonline.co.uk##.londo-target
+pravda.com.ua##.m_banner
+investors.com##.market-banner
+themedialine.org##.mdl-section-donate-banner
+warontherocks.com##.member-button-container
+rigzone.com##.memberEngagementOverlay
+bitchute.com##.membership-container > .spa
+bitchute.com##.membership-container > span
+atlasobscura.com##.membership-creative
+axios.com##.membership-cta
+birdwatchingdaily.com##.membership-promotion-header-banner
+euobserver.com##.membership-upsell
+bakusai.com##.menuTopAds
+eurogamer.net,rockpapershotgun.com,vg247.com##.merch_component
+chicagotribune.com##.met-button-varB
+chicagotribune.com##.met-header-toast
+chicagotribune.com##.met-toaster-zepcomponent
+miraheze.org##.mh-notice
+motherjones.com##.mj-adblock-widget
+moneyweb.co.za##.mny-promo-popup
+disk.yandex.com##.mobile-badges
+banggood.com##.modal-newbie
+propublica.org##.module-donate
+darkreading.com##.more-insights
+last.fm##.mpu-subscription-upsell
+urbandictionary.com##.mug-ad
+miraheze.org##.mw-dismissable-notice
+dailyexpose.uk,nironmagnetics.com##.mysticky-welcomebar-fixed-wrap
+mozilla.org##.mzp-c-sticky-promo
+lbry.tv##.nag
+odysee.com##.nag--helpful
+opendemocracy.net##.navigation__donate
+buzzfeednews.com##.newsblock-tips
+skeptoid.com##.noprint > td
+infoq.com##.notice
+designtaxi.com##.nt-displayboard
+backpacker.com##.o-content-cta
+backpacker.com##.o-promo-module
+amp.thehackernews.com##.offers
+omgubuntu.co.uk##.omg-hero-button
+app.slack.com##.p-upgrades_button
+topic.com##.pages-Article-pianoContainer
+eff.org##.pane-site-banner
+independentaustralia.net##.panelSubscription
+blizzardwatch.com##.patreon-sidebar
+techcrunch.com##.piano-ribbon-container
+damninteresting.com##.plea
+jacobin.com##.po-sr-sb__container
+bigissue.com##.polaris__flexible-cta
+bigissue.com##.polaris__sticky-subscription
+theweek.com##.polaris__subscription
+flaticon.com##.premium-autop
+theglobeandmail.com##.premium-chain-rail
+wowhead.com##.premium-promo-row
+foxnews.com,infoq.com,threadreaderapp.com##.promo
+processengineering.co.uk##.promo--small
+knowablemagazine.org##.promo-article-dark
+carsandbids.com##.promo-bar
+lmtribune.com##.promo-button
+komando.com##.promo-cta
+thesaturdaypaper.com.au##.promo-footer-strap-wrapper
+instructables.com##.promo-link
+investing.com##.promo-strip-wrapper
+404media.co##.promo-unit
+ebaumsworld.com##.promoAd
+apkmirror.com##.promotedApp
+consumer.org.nz,themarkup.org##.promotion
+racingtv.com##.promotion__asset
+racingtv.com##.promotion__overlay
+bikeradar.com##.promotional-content
+outlookindia.com##.promotional_subscribeNow
+thenationalpulse.com##.pulse__ad-wrapper
+metager.org##.quicktip[type="spendenaufruf"]
+abovethelaw.com##.recent-jobs-widget
+4kdownload.com##.recommend
+nzherald.co.nz##.recommended-articles__heading
+indy100.com##.reg-block
+golfdigest.com##.relatedRiser
+infoq.com##.related__group
+citynews.ca##.replacement-image
+the74million.org##.republish
+usmagazine.com##.right-rail
+thenest.com##.right-rail-promo
+skeptoid.com##.right-sidebar
+capital.com##.riskWarning
+commondreams.org##.rm-sticky-parent
+damemagazine.com##.row_background_red_padding
+4kdownload.com##.sale-line
+biometricupdate.com##.sb_spotlight
+slideshare.net##.scribd-ad-exit-modal
+golem.de##.sdgSlotContainer
+wbur.org##.section--takeover
+aarp.org##.section.membership
+news.crunchbase.com##.see-plans-cta
+searchenginejournal.com##.sej-widget-box
+spiked-online.com##.sell-wrap
+salisburyjournal.co.uk##.send-us-your-news-cta
+algemeiner.com##.sendtip
+thecritic.co.uk##.sf-header-subscription__content
+thecritic.co.uk##.sf-subscribe
+aarp.org##.sharp-c-configurable-carousel__slide--multi
+arstechnica.com##.shepherd-has-cancel-icon
+buzzfeed.com##.shoppingWrapper_packageWrapper__UR6JD
+shazam.com##.shz-frame-apps-banner
+shazam.com##.shz-frame-promotionbanner
+mcsweeneys.net##.side-banner
+techcrunch.com##.sidebar > .rightrail--promo
+investopedia.com##.sim-promo
+propublica.org##.site-header__banner
+newsnow.co.uk##.site-ribbon
+slate.com##.slate-plus-promo
+sporcle.com##.sporcle-promo
+imobie.com##.sprtadv
+scientificamerican.com##.spw__banner
+bleepingcomputer.com##.stackcommerce-widget
+thespinoff.co.nz##.staffInlineBannerOuter
+i24news.tv##.sticky-bottom-banner
+bitdegree.org##.sticky-bubble-wrp
+goodmorningamerica.com##.sticky-footer
+scmp.com##.stickyLinks
+thebulwark.com##.store-footer
+dcist.com##.story-appeal
+cryptorank.io##.styled__Wrapper-sc-1xbee9a-0
+newsweek.com##.subscribe-block-wrapper
+nautil.us##.subscribe-cta
+thesaturdaypaper.com.au##.subscriber-push-end
+spectator.co.uk##.subscription-banner
+artscanvas.org##.suggestion-box
+bigbangnews.com##.sumate
+golem.de##.supplementary
+codastory.com##.support
+novaramedia.com##.support-bar
+thecanary.co##.support-img
+novaramedia.com##.support-section
+road.cc##.support-subscribe
+agsiw.org##.support-us__wrapper___28JTY
+vg247.com##.supporters_promo
+banggood.com##.suspended-banner-wrap
+food.com##.sweeps-promo
+toucharcade.com##.ta_patreonWidget
+dieselworldmag.com##.text-22
+theblock.co##.theblockpro
+theblock.co##.theblockresearch
+pjmedia.com##.thm-piano-bottom
+pjmedia.com,townhall.com##.thm-piano-eop
+newsnow.co.uk##.ticker
+themedialine.org##.tml-popup-donate-holder
+cnn.com##.toast-popup
+aliexpress.com,aliexpress.us##.top-banner-container
+crypto.com##.top-banner__item
+healthday.com##.top-bar-promo
+banggood.com##.top-item
+educba.com##.topbar
+redstate.com##.tp-container-inner
+truthout.org##.truth-post-content-after
+kyivindependent.com##.ukraine-daily-side-banner
+techcrunch.com##.upcoming-events
+flightradar24.com##.upgrade-button
+vigilantcitizen.com##.vigil-after-article
+techguide.com.au##.w-nt.h-ni
+w2g.tv##.w2g-doit
+w2g.tv##.w2g-top-message-small
+reason.com##.webathon-leaderboard
+reason.com##.webathon-meter
+reason.com##.webathon-meter-widget
+thurrott.com##.widget > [href="https://www.thurrott.com/thurrott-premium"]
+nationalpost.com##.widget--local-ads
+cpuid.com##.widget-advert-300-sticky
+cpuid.com##.widget-advert-336
+gulftoday.ae##.widget-advertisement-card
+startpage.com##.widget-install-legacy
+chicagoreporter.com##.widget-support-tcr
+factcheck.org##.widget_factcheck_donate_widget
+grist.org##.wp-block-article-donation
+desmog.com##.wp-image-2011
+realitycheck.radio##.wp-image-241027
+dailyevergreen.com,dailyexpose.uk,thewalrus.ca##.wppopups-whole
+wionews.com##.writeforwionbanner
+youtube.com##.ytd-statement-banner-renderer
+zerohedge.com##[class^="Banner_"]
+picsart.com##[class^="hintWrapper"]
+picsart.com##[class^="pa-monetization"]
+jurist.org##[href="/apply/"]
+dailyhodl.com##[href="https://dailyhodl.com/alerts/"]
+mljar.com##[href="https://github.com/mljar/mercury"]
+macdailynews.com##[href^="https://apple.news/subscription"]
+phemex.com##[href^="https://phemex.com/bonus"]
+walletinvestor.com##[href^="https://premium.walletinvestor.com/"]
+theguardian.com##[name="SlotBodyEnd"]
+theguardian.com##[name="StickyBottomBanner"]
+xhamster.com,xhamster.desi##a[class*="promoMessageBanner-"]
+tech-camp.in##a[data-gtm-tcb="TCB_CLICK_scrollbanner_default_exp_income"]
+tech-camp.in##a[data-gtm-tcb^="TCB_CLICK_buntyubanner_"]
+amazon.com##div[class^="DesktopFlexBannerLayout-module__playerContainer_"]
+semafor.com##div[class^="styles_floatingBanner_"]
+softwarekeep.com##img[alt="Banner"]
+gettr.com##img[alt="GETTR coin"]
+! Paging overlays (previous/next page)
+archdaily.com###article-navigation
+castanet.net###backtotop
+uberhumor.com###bluenext
+uberhumor.com###blueprevious
+euractiv.com###bsf_rt_progress_bar_container
+sabcnews.com###floating-nextprev
+thecourier.com###nextStoryTitle
+thecourier.com###previousStoryTitle
+inquirer.net###read-next-2018
+crossroadstoday.com###slidepanel
+census.gov###thumbs_div
+tech.hindustantimes.com##.alsoReadSectionAppend
+thepost.co.nz,thepress.co.nz,waikatotimes.co.nz##.article-navbar
+thepress.co.nz##.article-navigation-buttons
+thespinoff.co.nz##.article-peep
+1news.co.nz##.articleSuggestStories
+bozemandailychronicle.com,thespec.com##.asset-paging
+bgdailynews.com,bramptonguardian.com,citizentribune.com,clintonherald.com,crossroadstoday.com,dentonrc.com,gazette.com,guelphmercury.com,kentuckytoday.com,khq.com,kilgorenewsherald.com,kmaland.com,ktbs.com,kulr8.com,lufkindailynews.com,nashvillescene.com,nbcrightnow.com,news-gazette.com,newsmirror.net,ottumwacourier.com,phillytrib.com,pulaskicountyweekly.com,starlocalmedia.com,thecentersquare.com,thesuburban.com,thetimestribune.com,unionleader.com,wdel.com,wdrb.com,wfmz.com,wvnews.com##.asset-paging-container
+emergingrisks.co.uk##.avia-post-nav
+dailyvoice.com##.b-scroll-to-next-article
+cockroachlabs.com##.blog-back-header
+paleofuture.com##.blog-item-pagination
+indianexpress.com##.breaking-scroll
+lawandcrime.com,mediaite.com,whiskeyraiders.com##.c-article-nav-arrows
+thesun.ie##.carousel__nav
+themonthly.com.au##.desktop-buttons-row
+mdpi.com##.direction
+game-news24.com##.floating-post-navigation
+darko.audio##.g1-teaser
+itweb.co.za##.itw-prevnext
+euronews.com##.js-swip-btn
+malaymail.com##.latest-news
+aajtak.in,businesstoday.in,gnttv.com##.mainBorromSliderSec
+metro.co.uk##.metro-swipe-prompt
+carsales.com.au##.more-articles-placeholder
+mlbtraderumors.com##.nav-arrow
+racquetmag.com##.navigation_between_posts
+fixya.com##.next-arrow
+adexchanger.com,manilatimes.net,news24.com##.next-article
+bizcommunity.com##.next-navigation-container
+oneindia.com##.oi-footer-bottom-ad-btns
+msn.com##.paddle
+alligator-sunglasses.com,bucketlistseekers.com##.pagination
+deadline.com##.pmc-u-background-white.pmc-u-margin-b-0
+theprp.com##.post-preview-prev
+ew-nutrition.com##.post_navigation
+businessmirror.com.ph##.posts-pagination
+fixya.com##.prev-arrow
+nymag.com,vulture.com##.prev-next
+statnews.com##.recirculation-bar
+indiatoday.in##.recommended__widget
+armradio.am##.show-check-also
+science.org##.show-recommended
+spacetourismguide.com##.single-navigation
+strevel.com##.single-next
+strevel.com##.single-prev
+buggedspace.com,curioustic.com##.single_page_navigator
+rferl.org,voanews.com##.slide-in-wg
+thestar.com.my##.slider-story
+dailymail.co.uk##.swipe-bar
+aberdeenlive.news,belfastlive.co.uk,birminghammail.co.uk,bristolpost.co.uk,buckinghamshirelive.com,business-live.co.uk,buzz.ie,cambridge-news.co.uk,cheshire-live.co.uk,chroniclelive.co.uk,cornwalllive.com,coventrytelegraph.net,dailypost.co.uk,dailyrecord.co.uk,dailystar.co.uk,derbytelegraph.co.uk,devonlive.com,dorset.live,dublinlive.ie,edinburghlive.co.uk,essexlive.news,examinerlive.co.uk,gazettelive.co.uk,getsurrey.co.uk,glasgowlive.co.uk,gloucestershirelive.co.uk,grimsbytelegraph.co.uk,hertfordshiremercury.co.uk,hulldailymail.co.uk,insider.co.uk,irishmirror.ie,kentlive.news,lancs.live,leeds-live.co.uk,leicestermercury.co.uk,lincolnshirelive.co.uk,liverpoolecho.co.uk,manchestereveningnews.co.uk,mirror.co.uk,mylondon.news,norfolklive.co.uk,nottinghampost.com,ok.co.uk,oxfordshirelive.co.uk,plymouthherald.co.uk,somersetlive.co.uk,staffordshire-live.co.uk,stokesentinel.co.uk,walesonline.co.uk,wiltshirelive.co.uk##.swipe-prompt
+cinelinx.com,geopoliticalfutures.com,itmunch.com##.td-more-articles-box
+twistedvoxel.com##.tt-shortcode-1
+cheddar.com##.upnext-container
+denvergazette.com,fauquier.com,galvnews.com,herald-zeitung.com,lmtribune.com,nashvillescene.com#.asset-paging
+courier-journal.com,courierpress.com,detroitnews.com,freep.com,greenbaypressgazette.com,jsonline.com,lohud.com,northjersey.com,sheboyganpress.com,tallahassee.com,theadvertiser.com##promo-up-next
+! Aliexpress 1p popup spam
+aliexpress.com,aliexpress.us##.image-poplayer-modal
+! dhgate.com 1p popup spam
+dhgate.com##.promo-coupon-pack
+dhgate.com##.promo-pack-mask
+! Youtube TV promos
+youtube.com##.ytd-primetime-promo-renderer
+youtube.com##ytd-brand-video-singleton-renderer
+! instgram.com hovercards
+instagram.com##.HoverCard
+! medium.com blogs
+##.screenContent > .u-bottom0
+! Google notifications
+www.google.com##[jscontroller][data-limp] > .zQSHZb.cH2VZe[style^="right:"] > .gLpFG
+##div > div + [aria-label="promo"][role="region"][data-ved]
+! google.com maps survey
+google.com,grow.google###google-hats-survey
+! google.com Signin pop
+www.google.ac,www.google.ae,www.google.at,www.google.be,www.google.bg,www.google.by,www.google.ca,www.google.ch,www.google.cl,www.google.co.id,www.google.co.il,www.google.co.in,www.google.co.jp,www.google.co.ke,www.google.co.kr,www.google.co.nz,www.google.co.th,www.google.co.uk,www.google.co.ve,www.google.co.za,www.google.com,www.google.com.ar,www.google.com.au,www.google.com.br,www.google.com.co,www.google.com.ec,www.google.com.eg,www.google.com.hk,www.google.com.mx,www.google.com.my,www.google.com.pe,www.google.com.ph,www.google.com.pk,www.google.com.py,www.google.com.sa,www.google.com.sg,www.google.com.tr,www.google.com.tw,www.google.com.ua,www.google.com.uy,www.google.com.vn,www.google.cz,www.google.de,www.google.dk,www.google.dz,www.google.ee,www.google.es,www.google.fi,www.google.fr,www.google.gr,www.google.hr,www.google.hu,www.google.ie,www.google.it,www.google.lt,www.google.lv,www.google.nl,www.google.no,www.google.pl,www.google.pt,www.google.ro,www.google.rs,www.google.ru,www.google.se,www.google.sk###div[jscontroller="MaoVMd"][jsdata*="nTLyye;"]
+www.google.ac,www.google.ae,www.google.at,www.google.be,www.google.bg,www.google.by,www.google.ca,www.google.ch,www.google.cl,www.google.co.id,www.google.co.il,www.google.co.in,www.google.co.jp,www.google.co.ke,www.google.co.kr,www.google.co.nz,www.google.co.th,www.google.co.uk,www.google.co.ve,www.google.co.za,www.google.com,www.google.com.ar,www.google.com.au,www.google.com.br,www.google.com.co,www.google.com.ec,www.google.com.eg,www.google.com.hk,www.google.com.mx,www.google.com.my,www.google.com.pe,www.google.com.ph,www.google.com.pk,www.google.com.py,www.google.com.sa,www.google.com.sg,www.google.com.tr,www.google.com.tw,www.google.com.ua,www.google.com.uy,www.google.com.vn,www.google.cz,www.google.de,www.google.dk,www.google.dz,www.google.ee,www.google.es,www.google.fi,www.google.fr,www.google.gr,www.google.hr,www.google.hu,www.google.ie,www.google.it,www.google.lt,www.google.lv,www.google.nl,www.google.no,www.google.pl,www.google.pt,www.google.ro,www.google.rs,www.google.ru,www.google.se,www.google.sk##div.nD2EKb.VEELad
+! Feedback Buttons
+startpage.com###feedback-button-container
+pbtech.com###feedback-side
+devdiscourse.com###feedbackBtn
+office.com###supFeedbackWrapper
+youtube.com###yt-feedback
+youtube.com###yt-hitchhiker-feedback
+nationaltoday.com##.c-holidayPlug
+courier-journal.com,courierpress.com,detroitnews.com,freep.com,greenbaypressgazette.com,jsonline.com,lohud.com,northjersey.com,sheboyganpress.com,tallahassee.com,theadvertiser.com,tiktok.com,usatoday.com##.feedback
+accuweather.com##.feedback-banner
+dickssportinggoods.com##.feedback-container-bottom
+dictionary.com##.feedback-link
+stuff.co.nz##.feedback-link-wrapper
+organicfacts.net##.fixed-bottom
+newegg.com##.floating-right-tools
+pbtech.com##.js-track-ad
+howtogeek.com##.message
+ft.com##.n-feedback__container
+ebay.at,ebay.co.uk,ebay.com,ebay.com.au,ebay.de,ebay.es,ebay.fr,ebay.it,ebay.nl,ebay.pl##.s-feedback
+support.microsoft.com##.supStickyFeedback
+itmunch.com##.td-header-top-menu-full
+ebay.com##.vi-feedback
+! ---------- RSS Buttons ----------
+abovetopsecret.com###RSS
+thetech.com###rss
+rebelnews.com##.abnormal-icon
+newswars.com##.btn-warning
+lasexta.com##.footer_rrss
+avtoradio.ru,chronicle.co.zw,eurocash.pl,globo.com,metrodaily.hk,thetruthaboutcars.com##.rss
+dailymail.co.uk##.rss_feeds_buttons
+africacheck.org,independent.com.mt,monthlyreview.org,telekom.com,thetruthaboutcars.com##.subscribe
+!! ---------- Scroll to top ----------
+mitsubishicorp.com###GoTop
+asahi.com###ToTop
+gayboystube.com###action-up
+annualreviews.org###article-back-to-top
+britishland.com###auto-top-link
+shameless.com###b2t
+whtop.com###back
+al-watan.com,appdate.lk,duhuliye.com,krdb.com,leakedzone.com,qatar-tribune.com,slocounty.ca.gov###back-to-top
+stoneberry.com###backTo
+toplegal.it,tsc.ca,vov.vn###backToTop
+cdw.com###backToTopWrapper
+medicinenet.com,mega4upload.com###backTop
+foodstuffsa.co.za,hardwarezone.com.sg,holidayswithkids.com.au,panoramapolitico.co,vgleaks.com###back_to_top
+investigativepost.org###backtoTop
+crazysales.com.au###backtop
+lleida.com,news.ki.se,soundonsound.com###backtotop
+blaauwbergbeachhotel.co.za###btTop
+qatarairways.com###btn-back-to-top
+azernews.az###btn-up
+boomlive.in###button
+tasvideos.org###button-scrolltop
+wahoofitness.com###dyTopButton
+topauto.co.za###eltd-back-to-top
+lamborghini-tractors.com###floatArrowUp
+informer.com###float_top
+mydeal.com.au###floatingScrollBtn
+softroboticstoolkit.com###footer
+weeklyrecess.com###go-top
+erome.com###goTop
+fanfreegames.com###go_to_top
+aorus.com,insidebitcoins.com###gotop
+houzz.com###hzScrollTop
+gamespot.com###in-page-nav
+pcpj.org###infinite-footer
+motto-jp.com###js-pagetop
+mitsui.com###js_globalFooterButtonTop
+basket4ballers.com###linkTop
+whtop.com###menu-back
+ebin.pub###myBtnGoToTop
+musicredone.com###myBtnScroll
+kohls.com,samsclub.com###oo_tab
+macromill.com,mhi.com,smth.jp###pageTop
+census.gov,chugai-pharm.co.jp,nyk.com###pagetop
+bingplaces.com###pagination_Arrow
+accessoires-asus.com###retourHaut
+news.mingpao.com###return_top_2023
+baystatebanner.com###scroll-back
+advister.it,aeromalls.com,ecrater.com,gadgetstouse.com,hard-drive.net,hotels.com,iphoneitalia.com,safetydetectives.com,theblondeabroad.com,thefintechtimes.com,yoshuabengio.org###scroll-to-top
+dihi.org,trutone.ca###scroll-top
+morbidology.com,rivanimation.com,spuf.org,theoverclocker.com,uska.ch,wdet.org###scroll-up
+alldomains.hosting,permanentstyle.com###scrollToTop
+123ink.ca,americanmusical.com,itdevices.ca,joemonster.org,kingofcocaine.com,primecables.ca###scrollUp
+vipcars.com###scroll_top
+astrofame.com###scrolling-top
+generalist.academy###scrollup
+winzzguitars.com###site-scroll
+irusa.org###slide_top
+ugreen.com###t4s-backToTop
+thegamecrater.com###to-top-wrap
+arigatojapan.co.jp,stuttgarter-zeitung.de,theapplepost.com###toTop
+staradvertiser.com###top-anchor
+dollartree.com###top-button-block
+meganstarr.com,secretatlas.com###top-link
+logistik-watchblog.de###topAnchor
+clxgaming.com###topButton
+earthcam.com###topScroll
+jam-news.net###topScroller
+democracynow.org###top_anchor
+pestor.nl###topcontrol
+routard.com###topscroll
+vesti.ua###up-page
+g2a.com###upPageToolbar
+fboomporn.com,xcafe.com###upper
+reinsurancene.ws###upprev_box
+hellsgamers.com###veilon_gotop
+pyrexoriginal.com###wr-back-top
+ozsale.com.au##.BqJep
+emojipedia.org##.ScrollToTop_scroll-to-top__mLPhy
+getty.edu##.a-scroll-top-btn
+stacker.com##.actions-scroll-to-top
+analdin.com,reverbpress.com,uinterview.com##.arrow-up
+goafricaonline.com##.arrow-up-container
+thenassauguardian.com##.arrow_carrot-2up
+thesaturdaypaper.com.au##.article-footer-container
+allaboutcd.com##.atbs-ceris-go-top
+goodwillfinds.com##.b-back_to_top
+help.twitter.com##.b17-scroll-top-button
+celebritycruises.com,err.ee,onthegotours.com,savoredjourneys.com,wanderlustcrew.com##.back-to-top
+mangatoto.com##.back-to-top-bot
+dealnews.com##.back-to-top-outer
+atozmath.com##.backToTop33
+topuniversities.com##.back_top
+zerosette.it##.backto
+paradisehill.cc##.block-to-top
+bravotube.net##.btn-up
+ipaddress.com##.btt
+qmul.ac.uk##.btt__inner
+staples.ca##.button--back-to-top
+kiz10.com##.button-gotop
+movehub.com##.button-scroll
+tech.co##.button-scroll-top
+urbanoutfitters.com##.c-pwa-back-to-top__icon
+rktbns.de,visitnordic.com##.cd-top
+catch.com.au##.css-pt0h6u
+parsintl.com##.eut-back-top
+about.bgov.com##.fab__scrollTop
+byjus.com##.fixed-up-arrow
+easeus.com##.float_totop
+newrepublic.com##.footer__middleRow
+jw.com.au##.footer__scroll-top
+global.toyota##.footer_pagetop
+xpics.me##.gain
+goodnes.com##.gdn-component-gdn-back-to-top
+thecydia.com##.gizmo-jtop
+kimcilonly.top##.gmr-ontop
+duo.com##.go-to-top-btn
+aorus.com##.go-top-div
+ciiradio.com,reverso.net,smutr.com##.go-up
+medibang.com##.go_top
+cardekho.com##.gsst_scroll-btn
+chinadaily.com.cn##.hui-dingbu
+indiamike.com##.im-go-top-btn
+daumpotplayer.com##.ir-arriba
+tradeinn.com##.irTop
+nomuraholdings.com##.js-PageTop
+cryptoglobe.com##.js-go-to
+airliquide.com##.js-scroll-down
+gettr.com##.jss82 > svg > circle
+buyee.jp##.jump
+roadiscalling.com,slothytech.com,theinvisibletourist.com##.kadence-scroll-to-top
+scandi.travel##.kapee-back-to-top
+klook.com##.klook-icon-Top
+otsukai.com##.l-footer-back-btn
+solarisbus.com##.l-sec--scroll-menu__btn
+pole-emploi.fr##.link-top
+kakaocorp.com##.link_top
+bbc.com##.lx-commentary__top-link
+sony.net##.ly_pagetop-main
+teamfortress.tv##.mod-to-top
+rwe.com##.navToTop
+nine.com.au##.ninemsn-footer-top
+ny.gov##.nygov-back-to-top
+motherless.com##.page-to-top-link-wrapper
+bayer.com,jpx.co.jp##.page-top
+sportstarlive.com##.page-up
+narita-transit-program.jp##.pageTop
+iphone-mania.jp##.page_top
+emb-japan.go.jp,skyticket.com##.pagetop
+japantimes.co.jp##.pagetop-wrap
+simpleflying.com##.pk-icon-up
+hackread.com,hightimes.com##.pk-scroll-to-top
+bingehulu.com##.progress-wrap
+ca.gov,muslimshop.fr##.return-top
+pronouns.page##.scroll-btn
+eatsmarter.com##.scroll-button
+timesofmalta.com##.scroll-notification-container
+boredpanda.com,peoplematters.in##.scroll-to-top
+bl.uk,carscoops.com,piunikaweb.com,trabalhabrasil.com.br##.scroll-top
+game-news24.com,manilatimes.net##.scroll-up
+toyota.co.uk,toyota.ie##.scrollTo
+gadgets360.com,pinkluna.com.br##.scrollToTop
+khronos.org,kyivpost.com##.scroll_to
+ukranews.com##.scroll_top
+peekyou.com##.scrollmeup
+frameboxxindore.com,host-tools.com,hostelworld.com,news9live.com,paramorefans.com,sahomeowner.co.za,spacetourismguide.com,tribuneindia.com##.scrolltop
+nsfw.xxx##.scrolltop-button
+microchip.com##.scrolltotop
+cryptonomist.ch,globalguideline.com,iogames.onl,isanek.com##.scrollup
+tiktok.com##.show-top
+pbtech.co.nz,pbtech.com##.showUp
+grundig.com##.site-footer__up
+bay.com.mt,tennesseestar.com,themichiganstar.com,theminnesotasun.com,theohiostar.com##.sm-up-container
+motoringnz.com##.sp-back-to-top
+sears.com##.tap-top
+nasilemaktech.com##.td-read-down
+nme.com##.td-scroll-up
+adguard.com##.theme-back-to-top-button
+cacm.acm.org,cnbctv18.com,ekathimerini.com,gbnews.com,porngem.com##.to-top
+radaris.com##.toTop
+ny.thepaperfair.com##.top-bottom
+cheatcc.com,thrillophilia.com##.top-button
+butterwithasideofbread.com,dirtyship.com,momontimeout.com##.topButton
+nomadicmatt.com,vdigitalservices.com##.topbutton
+hispantv.com,minitool.com##.totop
+spjeff.com##.totop-br
+nftplazas.com##.trx_addons_scroll_to_top
+nippon.com##.u-pagetop
+news.arizona.edu##.ua-zen-back-to-top
+xhamster.com,xhamster.desi##.up-arrow
+epicgames.com,wapbold.net##.up-button
+webuycars.co.za##.up-scroll
+newrepublic.com##.upArrow
+itweb.co.za##.v-btn--bottom
+wondershare.com##.wsc-gotop
+tiktok.com##[aria-label="Scroll to the top"]
+motorsport.com##[data-id="documentScrollToTop"]
+kimcartoon.li##[href="#"]
+nordstrom.com##[href="#back-to-top"]
+nexusmods.com##[title="Back to top"]
+urlgalleries.net##[title="Go to top"]
+kitguru.net##[title="Scroll To Top"]
+wallpaperflare.com##[title="back to top"]
+!! .icon-top
+landian.vip,russian-sex.me##.icon-top
+!! .goUp
+34travel.me,porngsstube.com##.goUp
+!! #scrollup
+budapester.hu,news.northwestern.edu###scrollup
+!! #to-top
+699pic.com,al-akhbar.com,mariahcarey.com,osgamers.com,powvideo.net###to-top
+!! .top-link
+hofbraeu-muenchen.de,middleeasteye.net,visitberlin.de,wbal.com##.top-link
+!! #top-link
+angelshack.co.za,avantishop.it,lacomunicazione.it,motorscribes.com###top-link
+!! #go-top
+casinodelavallee.com,cryptobizmagazine.com,financialexpress.com,ideaandcreativity.com,ijn.com,nationwideradiojm.com,tv360nigeria.com###go-top
+!! #scrollTop
+indiatimes.com,marketbusinessnews.com,moniteurautomobile.be,philstar.com,timesnownews.com,xiachufang.com###scrollTop
+!! #scrolltop
+centrosuono.com,gigaset.com,luchtvaartnieuws.nl,miui.com,mytheresa.com,pcbeta.com###scrolltop
+!! #totop
+alalam.ir,consorzioautolinee.it,ixosofficial.com,kapook.com,maxcasa.com,murripatrizia.it,nilox.com,nomisma.it,publish0x.com,rstore.it###totop
+!! .gotop
+4399.cn,cna.com.tw,cts.com.tw,dailypioneer.com,digitimes.com.tw,mmm100.com,moneycontrol.com,rti.org.tw,sport-express.ru,weather.com.cn##.gotop
+!! .btn-top
+worldjournal.com##.btn-top
+!! .top
+abitare-in-altoadige.it,automobilismo.it,bostonherald.com,ciclismo.it,cosmosup.com,cyclistmagazine.it,dailysignal.com,foxnews.com,freeviewnz.tv,germany.travel,haier.com,motociclismo.it,nrc.nl,shopperplus.ca,sivtimes.com,strategic-culture.org,svp.eu,thefappening.wiki,velaemotore.it,visitnsw.com,wikiway.com,wohnen-in-suedtirol.it##.top
+!! .cd-top
+aurecongroup.com,boomlive.in,calendario-365.it,caltex.co.za,cdt.ch,consumer.bz.it,dmail.it,drivesouth.co.nz,filmatipornohd.com,gasoline-station.com,gov.il,kellergrigliati.it,millenniumpost.in,paginesi.it,pastebin.com,premierchristian.news,revistablogurilor.ro,rti.org.tw,saras.it,secondnexus.com,shine.cn,suninternational.com,thebridge.in,unifiedlayers.com,valdelsa.net,vog.it,wifi.id##.cd-top
+!! #up
+altoadigelatte.com,cine974.com,europeanjournalists.org###up
+!! .up
+atramentowka.com,latuaitalia.ru,link11.com,oil-land.pl,picardirebel.co.za,sklep-art-meb.pl,subscribe.ru,tv-soyuz.ru##.up
+!! #top
+bd.com,isocellitalia.it,livelaw.in,nation-news.ru,vpnranks.com###top
+!! .scroll-to-top
+business-standard.com,gulftoday.ae,hsn.com,ingolstadt-today.de,iol.co.za,labouroutlook.org,lessknownfacts.com,multiup.eu,multiup.org,origo.hu,pbteen.com##.scroll-to-top
+!! #scroll_top
+hasznaltauto.hu,koreaboo.com,myfaith.tv,szalonauto.hu###scroll_top
+!! #toTop
+amiventures.net,jqueryscript.net,mieuxvivresante.fr,popmythology.com,pourquoidocteur.fr###toTop
+!! .toplink
+hessenschau.de,hr-bigband.de,hr-fernsehen.de,hr-inforadio.de,hr-rundfunkrat.de,hr-sinfonieorchester.de,hr-werbung.de,hr.de,hr1.de,hr2.de,hr3.de,hr4.de,iinspirationalquotess.com,orthochristian.com,pravoslavie.ru,telekom.com,you-fm.de##.toplink
+!! a[href="#top"]
+albayan.ae,antennebrandenburg.de,autoscout24.it,billboard.it,calendario-365.it,chinadialogue.net,cricbuzz.com,dagospia.com,dz-algerie.info,israeltoday.co.il,lvh.it,nca.aero,regione.marche.it,repsol.com,tradetracker.com,vodafone.de##a[href="#top"]
+!! .top-btn
+filmix.ac,motor-doctor.co.uk,motor-doctor.nl,motordoctor.at,motordoctor.ch,motordoctor.co.no,motordoctor.de,motordoctor.dk,motordoctor.es,motordoctor.fi,motordoctor.fr,motordoctor.gr,motordoctor.hu,motordoctor.it,motordoctor.pl,motordoctor.pt,motordoctor.ro,motordoctor.se##.top-btn
+!! #backtotop
+adl.org,coreight.com,cosedicasa.com,gamepro.de,gamestar.de,oantagonista.com,theepochtimes.com###backtotop
+!! #topButton
+gedidigital.it,noen.at###topButton
+!! .spu-bg
+laluce.news,supermarkt-inside.de##.spu-bg
+!! #slidebox
+di.com.pl,emol.com,orizzontescuola.it###slidebox
+!! #btn-top
+lepratiquedugabon.com,olx.ua###btn-top
+!! .arrowup
+sputnik-abkhazia.ru,sputnik-georgia.ru,sputnik-ossetia.ru,sputniknewslv.com##.arrowup
+!! .backtop
+humanresourcesonline.net,valor.com.br,wanda.cn##.backtop
+!! #softMessages-list
+dealabs.com,mydealz.de###softMessages-list
+!! #spotlight
+groupon.de,groupon.fr###spotlight
+!! .cc-FloatingButtonBar
+motorsportpics.de,vansoestklassiekers.nl##.cc-FloatingButtonBarContainer-button-scroll
+! Popout videos
+cnbc.com###jw-container[aria-label="Video Player"][style*="width: 300px;"]
+gamereactor.eu###videoContainer.playersmall[style^="position: relative; aspect-ratio: initial; background: black; margin-bottom:"]
+abcnews.go.com##.StickyVideoPlayer.VideoPlayer[style=""]
+cnet.com##.c-avStickyVideo
+thehill.com##.cross-sign
+thehill.com##.desktop-floating-player
+newsweek.com##.videocontent-wrapper.stickyPlayer[style*="top: 0px;"]
+! Used with generichide
+cwtv.com###user_optin_banner
+rawstory.com##.go-top-btn
+jewishpress.com##.td-scroll-up
+docs.github.com##[aria-label="Scroll to top"]
+! Include ubO specific
+
+
+! *** easylist:fanboy-addon/fanboy_annoyance_specific_uBO.txt ***
+audioholics.com##.modal
+audioholics.com##.modal-backdrop
+! linuxbabe.com
+linuxbabe.com##.pum-active
+linuxbabe.com##html:style(overflow: auto !important)
+! fastcompany.com
+fastcompany.com##.fancybox-overlay
+fastcompany.com##body,html:style(height: auto !important; overflow: auto !important)
+! huckberry.com
+huckberry.com##body,html:style(height: auto !important; overflow: auto !important)
+huckberry.com##.modal-content
+huckberry.com##.fade
+! bestrecipes.com.au (forced login)
+bestrecipes.com.au##+js(cookie-remover.js, br_mc)
+! xda-developers.com (forced login)
+androidpolice.com,cbr.com,collider.com,dualshockers.com,gamerant.com,howtogeek.com,makeuseof.com,movieweb.com,pocketnow.com,thegamer.com,thetravel.com,xda-developers.com##+js(cookie-remover.js, articlesRead)
+! zippia.com (forced login) https://github.com/uBlockOrigin/uAssets/issues/21354
+zippia.com##+js(nosiif, /onGatedSignupPopupTrigger|zippia-popup/)
+zippia.com##+js(set-local-storage-item, gatedSignupTimerCounter, $remove$)
+zippia.com##+js(cookie-remover, _zippia-popup-s_t)
+! opensecrets.org
+opensecrets.org##.is-visible.js-init.Modal
+opensecrets.org##+js(rc, js-no-scroll, html, stay)
+! kartable.fr
+kartable.fr##push-more-content
+kartable.fr##body,html:style(overflow: auto !important; position: initial !important;)
+! shein.com
+shein.com##.c-vue-coupon
+shein.com##.sui-modal
+shein.com##body:style(overflow: auto !important; position: initial !important;)
+! abhiandroid.com
+abhiandroid.com##.cp-modal-popup-container
+abhiandroid.com##body,html:style(height: auto !important; overflow: auto !important)
+! forvo.com
+forvo.com##.mfp_academy-enjoy-private-lesson-popup
+forvo.com##html:style(overflow: unset !important)
+! revolver.news
+revolver.news##body:style(overflow: auto !important;)
+revolver.news##.blocker
+! route-fifty.com
+route-fifty.com##.interstitial-show
+route-fifty.com##body:style(overflow: auto !important;)
+! ociservices.gov.in
+ociservices.gov.in###advisoryModadId1
+ociservices.gov.in##.modal-backdrop
+ociservices.gov.in##body,html:style(overflow: auto !important; position: initial !important;)
+! 4399.com
+4399.com##+js(aopr, defaultbackgroundimg)
+! onegreenplanet.org (Fix page, when attempting to print)
+onegreenplanet.org##body:style(display: block !important)
+! .swal2-container
+e360.yale.edu##.swal2-container
+e360.yale.edu##body,html:style(overflow: auto !important; position: initial !important;)
+! valuewalk.com
+valuewalk.com##.mfp-ready
+valuewalk.com##body,html:style(overflow: auto !important; position: initial !important;)
+! insidethegames.biz
+insidethegames.biz###contribute-modal
+insidethegames.biz##.modal-backdrop
+insidethegames.biz##body,html:style(overflow: auto !important; position: initial !important;)
+! themoscowtimes.com
+themoscowtimes.com##.contribute-modal
+themoscowtimes.com##.contribute-bar
+themoscowtimes.com##body:style(overflow: auto !important;)
+! inquinte.ca (intro)
+inquinte.ca##.redirect-background
+inquinte.ca##+js(rc, blocked, body, stay)
+! gmarket (right click) https://github.com/easylist/easylist/issues/11894
+gmarket.co.kr##+js(set, document.oncontextmenu, noopFunc)
+gmarket.co.kr##+js(set, document.onmousedown, noopFunc)
+! For the overlay
+!www.youtube.com###ytd-watch-flexy[player-unavailable] #player-container-outer.ytd-watch-flexy:style(visibility: visible !important;)
+!www.youtube.com###yt-playability-error-supported-renderers:style(display: none !important;)
+! https://github.com/uBlockOrigin/uAssets/issues/21076
+grammarly.com##.ReactModalPortal:has-text(confidence)
+grammarly.com##body:style(overflow: auto !important;)
+! neilpatel.com
+neilpatel.com##.mfp-ready
+neilpatel.com##+js(rc, mfp-popup-exit-quiz-v2, , stay)
+neilpatel.com##body,html:style(overflow: auto !important; position: initial !important;)
+! levernews.com
+levernews.com##.lp-popup__iframe-wrapper
+levernews.com##body,html:style(overflow: auto !important; position: initial !important;)
+! newrepublic.com (popup)
+newrepublic.com##.blink-sdk-widget-container
+newrepublic.com##body,html:style(overflow: auto !important; position: initial !important;)
+! https://github.com/uBlockOrigin/uAssets/issues/13976
+defenseone.com,govexec.com,nextgov.com,route-fifty.com##.interstitial
+defenseone.com,govexec.com,nextgov.com,route-fifty.com##body:style(overflow-x: auto !important; overflow-y: scroll !important; margin-right: 0 !important;)
+! imagecolorpicker.com
+imagecolorpicker.com###geist-ui-modal
+imagecolorpicker.com##body,html:style(overflow: auto !important; position: initial !important;)
+! walletinvestor.com
+walletinvestor.com###bio_ep
+walletinvestor.com###bio_ep_bg
+walletinvestor.com##body:style(overflow: scroll !important)
+! 4kdownload.com (fix top empty space)
+4kdownload.com##.page-header:style(top:0 !important)
+! redfin.com (mobile app white space)
+redfin.com##+js(rc, stickyBanner, , stay)
+! t-nation.com
+t-nation.com##.toggle_lb_scrolling_mobile
+t-nation.com##body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! Disabling copy/paste
+banistmo.com##+js(ra, oncontextmenu|onselectstart|ondragstart|oncopy|oncut|onpaste|onbeforecopy)
+! democracynow.org
+democracynow.org###overlay
+democracynow.org###campaign_modal
+democracynow.org##body,html:style(overflow: auto !important; position: initial !important;)
+! truthout.org
+truthout.org###XABNJHEY
+truthout.org##.fun-widget-backdrop-holder
+truthout.org##body:style(overflow: auto !important; position: initial !important;)
+! https://github.com/uBlockOrigin/uAssets/issues/20636
+fantasyfootballhub.co.uk##+js(set-session-storage-item, modalViewed, true)
+! brainly.co.id
+brainly.co.id##.js-react-registration-toplayer
+brainly.co.id##body.sg-dialog-no-scroll:style(overflow: auto !important; position: static !important;)
+! https://www.analyticsvidhya.com (login nag)
+analyticsvidhya.com##+js(nostif, loginModal)
+! deepl.com (login nag and app popup)
+deepl.com##+js(set-local-storage-item, LMT_freeUserUsageBlock, $remove$)
+deepl.com##+js(set-local-storage-item, onboardingData, $remove$)
+! https://github.com/uBlockOrigin/uAssets/pull/20135
+github.com##button[data-testid="copilot-popover-button"]
+! watchsomuchproxy.com
+watchsomuchproxy.com###ModalWindow
+watchsomuchproxy.com##.modal-backdrop
+watchsomuchproxy.com###btnStopAds
+watchsomuchproxy.com##body:style(overflow: scroll !important)
+! Exit overlay
+firstcoastnews.com,wtsp.com,ajc.com,wusa9.com,wfaa.com,9news.com,fox2now.com,wcnc.com,13newsnow.com,wsvn.com,abc15.com,wwltv.com,wkyc.com,wthr.com,11alive.com,wcnc.com,wusa9.com,wfaa.com,9news.com,fox2now.com,abc15.com,wwltv.com,wkyc.com,wthr.com,11alive.com##+js(ra, data-name="exitInterstitial", , stay)
+! Floating video
+texasmonthly.com##.float-player
+texasmonthly.com##+js(rc, float-player, , stay)
+yahoo.com##+js(rc, vp-docked, , stay)
+yahoo.com##+js(rc, vp-docked-mode, , stay)
+msnbc.com,today.com,nbcnews.com##.styles_stuck__gtILi
+msnbc.com,today.com,nbcnews.com##+js(rc, styles_stuck__gtILi, , stay)
+thehill.com##+js(rc, desktop-floating-player, , stay)
+independent.co.uk##+js(rc, sticky, , stay)
+independent.co.uk,allrecipes.com##+js(rc, jw-flag-floating, , stay)
+nbc4i.com,ktla.com,ktsm.com,kark.com,myarklamiss.com,nwahomepage.com,mytwintiers.com,news10.com,wavy.com##.desktop-video-title-bar
+nbc4i.com,ktla.com,ktsm.com,kark.com,myarklamiss.com,nwahomepage.com,mytwintiers.com,news10.com,wavy.com##.desktop-floating-player
+nbc4i.com,ktla.com,ktsm.com,kark.com,myarklamiss.com,nwahomepage.com,mytwintiers.com,news10.com,wavy.com##+js(rc, desktop-floating-player, , stay)
+telemundopr.com,nbcchicago.com,nbcdfw.com,nbcboston.com,nbcconnecticut.com,nbcphiladelphia.com,nbcsandiego.com,nbclosangeles.com,nbcnewyork.com,nbcbayarea.com##+js(rc, video-flyout--fixed, , stay)
+kbtx.com,kptv.com##.powa-sticky
+kbtx.com,kptv.com##+js(rc, powa-sticky, , stay)
+wusa9.com,wkyc.com,9news.com,11alive.com##.video__docker_state_docked
+wfaa.com,wkyc.com,9news.com,11alive.com##+js(rc, video__docker_state_docked, , stay)
+6abc.com,abc11.com,abc13.com,abc30.com,abc7.com,abc7chicago.com,abc7news.com,abc7ny.com##.dock
+6abc.com,abc11.com,abc13.com,abc30.com,abc7.com,abc7chicago.com,abc7news.com,abc7ny.com##+js(rc, dock, , stay)
+! cbsnews.com (Floating video)
+cbsnews.com##+js(rc, floating, , stay)
+cbsnews.com##.floating
+!------------------------Rules for international sites------------------------!
+! *** easylist:fanboy-addon/fanboy_annoyance_international.txt ***
+##.odkl-klass-stat
+||linker.ba^$third-party
+||pichak.net/blogcod/$third-party
+! ---------- Non-english Site Specific Hiding Rules ----------
+thscore.mobi###returnTop
+! ---------- German Site Specific Hiding Rules ----------
+baguette.at###TopBtn
+valentins.de###arrow-up
+unsertirol24.com###beginn-arrow
+reifenpresse.de###custom_html-2
+foerderland.de###footerFlyout
+nw.de###nl-box
+icx-shop.de###scrolltopbutton
+soeren-hentzschel.at###storage-notice
+osthessen-news.de###toTop
+mathe24.net###wrapperdiv
+finanzfrage.net,gutefrage.net##.Bigfoot-navigationUp
+phoenix.de##.c-toplink
+kress.de##.cta
+seniorenportal.de##.custom-topbutton
+radiokoeln.de##.fab__scroll
+spektrum.de##.footer__nl
+kicker.de##.kick__scroll-top-ic
+kontextwochenzeitung.de##.kontextpermail
+therese-moelk.at##.pageup
+matratzen.info##.postNavigation
+donaukurier.de##.scroll-to-top-outer
+vonovia.de##.scroll-top
+strato.de##.scrollBtn
+woxikon.de##.secondary-footer
+kostenlose-urteile.de##.simplemodal-container
+kostenlose-urteile.de##.simplemodal-overlay
+linux-magazin.de##.to-top-container
+baden.fm##.top-clone
+motorsport-total.com##a[data-target="top"]
+wdr.de##a[href="#goToHead"]
+derbund.ch##div[class^="BackToTop_"]
+stol.it##div[class^="UpScroll_"]
+||mdsngpush.finanzen.net^
+||trustedshops.com/bewertung/widget/$third-party
+! ---------- French Site Specific Blocking Rules ----------
+||auto-moto.com^*/iframe-box-article.html
+||avis-verifies.com^$third-party
+||boosterblog.com/ban/$third-party
+||carrefour.fr/footer-sticky-banner?
+||manga-sanctuary.com/include/ajax/popup_actu.php
+||onaregarde-pourvous.com/api/$third-party
+||out.be/widgets/$third-party
+||sibforms.com^$domain=logiciels.pro
+||societe-des-avis-garantis.fr/wp-content/*/widgets/$third-party
+||tout-sur-le-web.com^$third-party
+! ---------- French Site Specific Hiding Rules ----------
+ilninth.wordpress.com###MsgContainer
+maisonapart.com###accept-top
+sncf-connect.com###block-patchonboardinginvictus
+auto-moto.com###crm_article_box
+cio-online.com###dialogueBox
+comment-economiser.fr###goup
+boursier.com###infos-boursier_panel
+ecoaustral.com###inscription-hebdo
+solutions-numeriques.com###previous
+comment-economiser.fr###simplemodal-container
+comment-economiser.fr###simplemodal-overlay
+lamanchelibre.fr###sticky_footer_article
+francearchives.gouv.fr###toTopBtn
+nwglobalvending.fr###toast
+journaldesfemmes.fr##.app_aside_nl
+electromenager-compare.com,homecine-compare.com,lcd-compare.com##.bar-thin
+automobile-magazine.fr##.bloc-nl
+lemondeinformatique.fr##.bloc-promo-nl
+lemondeinformatique.fr##.bloc.advice
+e-sante.fr##.box-one-click
+lemondeinformatique.fr##.box-question
+telesatellite.com##.btnpg
+airbnb.be##.flash-container
+easeus.fr##.float_totop
+ecommercemag.fr##.js-scrollTo
+4clik.com##.kHolder
+leroymerlin.fr##.l-search-evaluation
+ma-reduc.com##.m-scroll
+ffr.fr##.modal
+dealabs.com##.nav-banner
+la-croix.com##.next
+challenges.fr##.nl
+france24.com,rfi.fr##.o-self-promo--nl
+cuisineaz.com##.page-slideshow_cards_controls
+la-croix.com##.prev
+chektools.com##.prod-animation
+tourhebdo.com##.resocs
+assly.dz##.scroll_top
+loractu.fr##.sf-extensionfactory-link
+aquab0n.fr##.subscribe
+meteomedia.com##.woahbar
+telesatellite.com#?#.encadre.bleu:-abp-has(a[href^="https://eepurl.com/"])
+! ---------- Arabic Site Specific Hiding Rules ----------
+pramgnet.com###PoPAI
+sigma-4pc.com###check-also-box
+mawdoo3.com###move-down
+alkawthartv.ir###scroll
+iwaatch.com##.s-up
+youm7.com##.topTop
+! ---------- Chinese Site Specific Hiding Rules ----------
+jlhs.net,jzhx.net###DivBayWindow
+news.mydrivers.com###a_showhotnews_list_dia
+blog.csdn.net###asideWriteGuide
+acfun.cn###btn-top-shortcut
+music.163.com###g_backtop
+699pic.com###landlord
+jlhs.net###leftAdLayer
+map.baidu.com###message-panel
+thepaper.cn###pjax-switch
+ifeng.com###qrCode
+udn.com###story_related
+bcc.com.tw###topx
+cna.com.tw##.Subscription
+bilibili.com##.adblock-tips
+baidu.com##.app-bar
+qidian.com##.app-deversion
+acfun.cn,baidu.com##.app-guide
+juejin.cn##.app-link
+baidu.com##.app-side-banner
+mail.qq.com##.app_qrcode
+bilibili.com##.backup
+oschina.net##.codeBlock
+cloud.tencent.com##.com-back2top
+meijumi.net##.couplet_app
+deltareading.com##.el-backtop
+qidian.com##.focus-img
+baidu.com##.gotop-button
+fanyi.sogou.com##.img-banner
+sogou.com##.index-recommend
+sogou.com##.index-top
+hisense.com##.js-return-top
+qidian.com##.jsDownloadLink
+baike.com##.li-top
+baidu.com##.player-pause-code
+699pic.com##.qiye-pop
+qq.com##.qm_toolbarSubTitle
+699pic.com##.recharge
+juejin.cn##.recommend-box
+pan.baidu.com##.rights-section
+bilibili.com##.rocket-con
+4gtv.tv##.scrollUP
+kafan.cn##.scrolltopa
+njjzxl.net##.sitewidget-floatImgs-wrap
+699pic.com##.springtime-floatLink
+699pic.com##.springtime-pop
+baidu.com##.super-layer-promote
+meijumi.net##.tools_top
+baidu.com##.topA
+qq.com##.top_announce
+people.com.cn##.topb
+mtime.com##.topbar
+am730.com.hk##.topic-pagination
+699pic.com##.viewLimit
+cctv.com##.weima
+699pic.com##.winpopbg
+||4gtv.tv/image/scriptUP.svg
+||static.iqiyi.com/js/common/mars_v.js
+! ---------- Croatian Site Specific Hiding Rules ----------
+rast.hr###blokDiv
+nasiljudi.hr###footer
+hrportfolio.hr###kolac
+jutarnji.hr###side-article-widget
+apartmanija.hr###site_nt
+poba.hr##.meerkat
+sptv.hr##.scroll-top-arrow
+krovni-nosaci.hr##.topbarBox
+034portal.hr##.vijesti
+||ds-recommender.styria.hr^
+||linker.hr^$third-party
+||traffic.styria.hr^
+! ---------- Danish Site Specific Hiding Rules ----------
+! ---------- Dutch Site Specific Hiding Rules ----------
+hiswatewater.nl###back_to_top
+luchtvaartnieuws.nl###block-block-92
+hotel4golf.nl##.modal-backdrop
+want.nl##.pagination
+welingelichtekringen.nl##.top-slide
+! ---------- Finnish Site Specific Hiding Rules ----------
+nyt.fi###next-teaser
+iltalehti.fi##.terms-of-service-popup
+! ---------- Greek Site Generic Hiding Rules ----------
+capital.gr###infiload-return-top
+! ---------- Hebrew Site Specific Hiding Rules ----------
+walla.co.il##.walla-icon-arrow-up
+wheel.co.il##.xbFootNewsForm
+! ---------- Hungary Site Generic Hiding Rules ----------
+pcworld.hu###back_top
+oszkar.com###footerbar
+ingatlanbazar.hu###ib-scrolltop
+atlatszo.hu##.atop
+hrportal.hu##.fixedbox
+! ---------- Indian Site Specific Hiding Rules ----------
+dinamalar.com##.asset-paging
+! ---------- Italian Site Specific Blocking Rules ----------
+||24o.it^*/ias/
+||adessoin.tv/grafica/frecciaTop.png
+||blitzquotidiano.it^*/IAS_
+||blitzquotidiano.it^*/System24_
+||booster3d.com^$third-party
+||cambiodns.com/img/up.png
+||cml.to/robot/
+||cn24tv.it^*/mod_letter.
+||corriereobjects.it/rcs_cor_exit-page/
+||corriereobjects.it^*/box_notifiche_
+||cure-naturali.it/banner/
+||dirittierisposte.it/Images/corriere_sera.png
+||edintorni.net^$third-party
+||epeex.com^$third-party
+||fastweb.it^*/newsletter.
+||finanzaonline.com/notizie/popup_news$popup
+||hikoki-powertools.it/image/top-
+||it.hisamitsu/common/img/pageTop.jpg
+||js.adv.dadapro.net/collector.js/prcy.js?
+||lagazzettadelmezzogiorno.it/js/update.js
+||mastertop100.org^$third-party
+||notifiche.secoloditalia.it^
+||retewebitalia.net/banner/$third-party
+||reviews.shoppydoo.it^$third-party
+||secoloditalia.it^*/notify.
+||skyplayer.tiscali.it^$third-party
+||smiling.video^$third-party
+||tools.net-parade.it^$third-party
+||trovaprezzi.it/buttons/$third-party
+||videosynd.kataweb.it^$third-party
+||vistosulweb.com^*/Newsletter.
+||warnerbros.it^*/top.png
+||wittgenstein.it/wp-content/themes/wittgenstein/images/ilpost.png
+||wp.com/www.proiezionidiborsa.it/*/google-news-
+! ---------- Italian Site Specific Hiding Rules ----------
+lantidiplomatico.it###BoxGri
+focusjunior.it###FJToTop
+eunews.it###FRed_Arrow
+chcflorence.it,hiexpressbolognafiera.it,higenova.it,himilangaribaldi.com,hiturin.it,hizara.it,hotelcontinentalvenice.com###GOZERO
+dailybest.it###G_info
+blitzquotidiano.it,ladyblitz.it###IAS_container
+unimore.it###InAlto
+katorishintoryu.it###POPUPS_ROOT
+superguidatv.it###TGCom24HeaderBanner
+automoto.it,moto.it###arrow-back-top
+marsalace.it###back_to_top
+zona.eu###backtop
+ilfattonisseno.it,itacanotizie.it,qds.it,tempostretto.it,vistosulweb.com###blogup
+centrometeoitaliano.it###box-banner-messaggero
+money.it###button
+lantidiplomatico.it###centralNotice
+liberogioco.it###cg-top-button
+ilmetapontino.it###content-dock
+donewifi.it###dyscrollup-btn
+euractiv.it###ea-alert-menu
+trenitalia.com###go-bottom
+stabiachannel.it###go-up-banner
+cronacheancona.it###intestazione
+canavesenews.it,torinonews24.it###loader
+lavocedelnordest.eu###mb-scrollup
+eprice.it###moveUp
+it.hisamitsu###pageTop
+ansa.it###pg-slide
+formulapassion.it###pre-header
+monclick.it###scroll-top-container
+vloungebeach.tv###scroll_up
+mobimart.it###scrollblock
+chiesi.com###scrolltab
+uniroma1.it###sdb-wrapper
+laleggepertutti.it,tuttoandroid.net###sh_local
+3bmeteo.com###sidebar-video-fixed
+qualescegliere.it###slideUpForm
+romaest.cc,zipnews.it###slide_top
+orizzontescuola.it###slidingblock
+dirittierisposte.it###slimheader
+amazon.it###smart-app-banner
+centrometeolombardo.com###spot_popup
+arch.bz.it###srollTop
+comingsoon.it###tal
+adessoin.tv###tasto_top
+tp24.it###templatemo_container_barra
+ultimouomo.com###text-2
+emmepress.com###text-9
+wtc.genova.it###top-of-the-page
+greenstyle.it###topBtn
+fantacalcio.it###topbar
+cambiodns.com###torna
+orvieto24.it###vl-back-top
+alvolante.it###wrapper-header-small-up
+automobile.it##.ArrowGoTop
+ice.it##.ScrollTop
+ilvibonese.it##.acy-email-footer
+puntosicuro.it##.alert
+autoscout24.it##.app-banner
+adnkronos.com##.art-cta
+zoomsud.it##.article-navigation
+edilportale.com##.article-right
+multiplayer.it##.article_nav
+tempi.it##.article_newls_box
+iltempo.it##.articoli_correlati
+globalist.it##.back
+agi.it##.banner-register
+agendadigitale.eu,corrierecomunicazioni.it,economyup.it,insuranceup.it##.bottom-bar__up
+guardaserie.watch##.bottom-button-top
+engage.it##.box-engage-mag
+beverfood.com##.box-iscrizione
+red-live.it##.box-sponsor
+infobuildenergia.it##.box_dem
+wuerth.it##.btn-scroll-top
+pagamentidigitali.it##.btn_iscriviti
+lillapois.com##.btt-button
+funweek.it##.c-header__top-bar
+ilbianconero.com##.c-syndication
+lastampa.it##.call-iscrizione
+sportitaliabet.it##.cg-top-arrow
+giocodigitale.game##.cloux-mailchimp
+lastampa.it##.conferma_reg_nl
+ilfarmacistaonline.it##.containerBannerBox
+mowmag.com##.crm-card-next
+atletica.tv##.diretta-tv
+laleggepertutti.it##.footer-top-feild
+my-personaltrainer.it##.frecciabg
+grandangoloagrigento.it##.gotopbr
+imbruttito.com##.gototopdesk
+comuniciclabili.it,wikibit.it##.hc_scrollup
+radioitaliaannisessanta.it##.hm_go_top
+francescocosta.net,wittgenstein.it##.ilpost-header
+astrooroscopo.it##.in
+condominio.com,libero.it##.ir-arriba
+bastabugie.it##.iscrizione
+sky.it##.j-navTop
+penskeautomotive.it##.js-scroll-to
+ytong.it##.link-to-top
+linkiesta.it##.lkPopover
+gigapc.it##.modezuparrow
+avvenire.it##.moveToTop
+spaziogames.it##.nav-reveal
+notizie-inter.it##.navArticleItem
+everyeye.it##.nav_articoli
+ilsitodellozoo.com##.navbar-alt
+thelostavocado.com##.navbar-wrap
+leggioggi.it##.newsButton
+systems.bz##.on-top
+blauerusa.com##.onTop
+ricoh.it##.page-link-top
+nonsprecare.it##.partnerheader
+enzopennetta.it##.popmake
+astrooroscopo.it##.popup
+eunews.it##.popuparticoli
+storicang.it##.recibe
+bplaytipremia.com,tempoitalia.it##.scroll
+escort-advisor.com##.scroll_right
+assologico.it##.scrollbutton
+ilsole24ore.com##.scta
+biografieonline.it,meglio.it##.section-footer-nl
+gianlucadimarzio.com##.skySportsRow
+motori.net,siciliaoggi.com,siciliapress.it,tavoloeditoriradio.it##.sm-up-container
+suedtirol.info##.sticky-overlay__content--nl-popup
+anothersound.it##.to_top
+neveitalia.it##.top-bar
+informazionefiscale.it##.top-page
+davinotti.com##.top-scroll
+internazionale.it##.top_arrow_footer
+lagazzettadelmezzogiorno.it##.top_sali
+travelnostop.com##.toup
+lospecialista.tv##.widget_specialert
+vitatrentina.it##.wpdiscuz-front-actions
+||ilprimatonazionale.it^*/NEWSLETTER.png
+||superguidatv.it^*/head-tgCom.
+||zeusnews.it/pic/04.png
+! ---------- Japanese Site Specific Rules ----------
+kakakumag.com###_popIn_recommend
+jiji.com###_popIn_recommend_2
+otekomachi.yomiuri.co.jp###_popIn_right
+tv-tokyo.co.jp###bangumi_page_top
+oh-my-teeth.com###cta-sticky-banner
+jti.co.jp###footer-pagetop
+suumo.jp###js-pageTop
+280blocker.net,biglobe.ne.jp###page-top
+tabelog.com###page-up
+radionikkei.jp###page_top
+daiichi-kamotsu.co.jp,nhk.or.jp,webtsc.com###pagetop
+yahoo.co.jp###pg_top
+ec-store.net###rt\.popup-overlay_rt_popup_sws
+ec-store.net###rt_popup_sws
+gazoo.com###scroll-button
+diamond.jp###top-btn
+japanpost.jp###topBtn
+hotpepper.jp##.autoScrollBtn
+mbs.jp##.common-wrap--ranking
+mbs.jp##.common-wrap--recommend
+diners.co.jp,sumitclub.jp##.dc__pagetop
+webtsc.com##.footer-totop
+allnightnippon.com##.footer_pagetop
+plus.nhk.jp##.hls-player_message
+media.moneyforward.com##.home-ranking
+gazoo.com##.mailmag_link
+media.moneyforward.com##.mp-popin-analytics
+media.moneyforward.com##.mp-recommends
+video.fc2.com,video.laxd.com##.noLoginSticker
+ntv.co.jp##.ntv-pageTop
+gamespark.jp,response.jp##.page-top
+mobilenews.jp##.pagetop
+sports.yahoo.co.jp##.topPage
+video.fc2.com##div[style^="position: fixed; transition: right 1s ease-out 0s; bottom: 165px; padding: 0px; margin: 0px; border: none; z-index: 999;"]
+||api.popin.cc^$third-party
+||img.mixi.net^$third-party,domain=~mixi.jp
+||medibot-image.s3.ap-northeast-1.amazonaws.com/medibot_lp_
+||share.gree.jp^$third-party
+||tweetbuzz.jp^$third-party
+||yanmaga.jp/viewer/banner.html
+! ---------- Korean Site Specific Hiding Rules ----------
+auction.co.kr###btnSkipTop
+atlantaradiokorea.com###top_up
+radioseoul1650.com##.nav_top
+etnews.com##.sns_btn
+||kodcad.kr^$third-party
+! ---------- Latvian Site Specific Hiding Rules ----------
+delfi.lv###sbookmarks_left
+delfi.lv##.after_body
+delfi.lv##.notification-widget
+delfi.lv##.sbookmarks
+skaties.lv##.skaties-push-notification
+1a.lv##.up-btn
+! ---------- Norwegian Site Specific Hiding Rules ----------
+bighorn.no###consent
+dagbladet.no###db-inger
+bt.no##.flyout
+firkloveren.no##.reveal-modal-bg
+! ---------- Polish Site Specific Hiding Rules ----------
+wtk.com.pl###TB_window
+regenersis.pl###ctl00_cpanel
+di.com.pl###floating-box
+komorkomania.pl###floatingbar
+gsmonline.pl###jGrowl
+gosc.pl###l-overlay
+pkobp.pl###scrollie
+gornikzabrze.pl###sliding-popup
+pb.pl###smPopupBackground
+goldenline.pl###topReminder
+polska-ie.com##.arrow_carrot-2up
+player.pl##.cBox
+mpolska24.pl##.infoBox
+gda.pl##.shotimoo
+naszamlawa.pl##.slide_button
+pb.pl##.smPopupContainer
+rp.pl##.social-toolbar__container + .toolbar
+virginmobile.pl##.topPanelBlock
+gosc.pl##div[style*="position: fixed"]
+! ---------- Polish Site Specific Blocking Rules ----------
+||getreview.pl^$third-party
+! ---------- Portuguese Site Specific Hiding Rules ----------
+record.xl.pt###MenuDinamico
+record.xl.pt###apDiv2
+abril.com.br###barra-mini-home
+canaltech.com.br###floatBar
+maisfutebol.iol.pt###goUp
+sapo.pt###redesSociais
+tyrantscans.com###scTop
+taosect.com###ssttbutton
+abola.pt##.ancora
+revistaencontro.com.br##.fixed-btn-uai
+globo.com##.geral-nextprevious
+globo.com##.mc-column-taboola
+em.com.br##.read-more-about
+mundodastribos.com##.up_btn
+uc.pt##.warning-bar
+||noticiasautomotivas.com.br^*/receber-noticias.
+||revistaforum.com.br^*/jquery.fancybox.min.js
+||smonitor.com.br^$third-party
+||tribunademinas.com.br^*/banner-tribuna_-NEWS.
+! ---------- Romanian Site Specific Hiding Rules ----------
+! ---------- Russian Site Specific Blocking Rules ----------
+||5-tv.ru^*/up.png
+||gnezdo.ru^$third-party
+||kommersant.ru^*/top100.
+||mirtesen.ru^$third-party
+||static.smi2.net^$third-party
+||top100.rambler.ru^$third-party
+||tv-soyuz.ru^*/up.png
+||tvzvezda.ru^*/up_btn.
+! ---------- Russian Site Specific Hiding Rules ----------
+kinopoisk.ru###GOWrapper
+rzn.info###myNotification
+culture.ru###page-error-modal
+rbc.ru###popup_box
+rbc.ru###popup_inner
+tvrus.eu###scroll-to-top
+imperiya.by###scroller
+rt.ru###up-btn
+tvzvezda.ru###upbutton
+rambler.ru##._1I-d.pdoyk
+vestifinance.ru##.b-button-up
+ria.ru##.b-scroller-up
+traveller-eu.ru##.btn-btt
+bancaintesa.ru##.cb-goup
+5-tv.ru##.gttt
+ubr.ua##.job-block
+nededik.com##.kosehbr
+autowp.ru##.links
+interfax.ru##.matNav
+rzn.info##.panel-top-link
+ntv.ru##.popup_overlay
+rambler.ru##.scrollback
+kp.ru##.seti
+uralpress.ru##.sticker
+ubr.ua##.story-nav
+vz.ru##.up
+forbes.ru##.up-button-page
+vz.ru##.up-page
+kommersant.ru##.up_button
+itc.ua##.verticalPageNav
+avtoradio.ru##div[id^="unit_"]
+! ---------- Serbian Site Specific Blocking Rules ----------
+glas-javnosti.rs##.fa-feed
+||espreso.rs/widget?$third-party
+! ---------- Spanish Site Specific Hiding Rules ----------
+diariolibre.com###bannerRight4
+eleconomista.es###barra-nav
+telesurtv.net###bulletin
+leroymerlin.es###divFlotante
+ara.cat###editionNav
+lanacion.com.ar###notificacion-modal
+rae.es###overbox3
+excelsior.com.mx###suscription-block
+terra.es###trr-root
+rtve.es##.arrow
+expansion.com##.banda_suscripcion
+telesurtv.net##.btnBoletin
+elgrupoinformatico.com##.closelogod
+milenio.com##.eo-free
+infobae.com##.flyin-pb
+debate.com.mx##.footer__suscribe
+rac1.cat##.go-top
+elcomercio.pe##.go-up
+mundodeportivo.com##.home-nav-balls
+elgrupoinformatico.com##.relatednext
+larazon.es##.rrss
+cnnchile.com##.scroll-button
+applesencia.com,capitalibre.com,frenomotor.com,placeralplato.com,rootear.com,sportadictos.com,winphonemetro.com,xombit.com,xombitgames.com,xombitmusic.com##.top-button
+! ---------- Swedish Site Specific Hiding Rules ----------
+skatteverket.se,tullverket.se##.alertWrp
+fass.se##.starttopdialog
+bahnhof.se##.top-line-block
+||pusha.se^$third-party
+! ---------- Turkish Site Specific Hiding Rules ----------
+milliyet.com.tr###upNextWrapper
+markapark.com##.htext
+takvim.com.tr##.relatedNewsBox
+milliyet.com.tr##.sticky
+||ilan.gov.tr/widgets/$third-party
+||tmgrup.com.tr^*/tmdsurvey.
+! ---------- Ukranian Site Specific Hiding Rules ----------
+!---------------------------------Allowlists----------------------------------!
+! *** easylist:fanboy-addon/fanboy_annoyance_allowlist.txt ***
+@@||bibblio.org^*/bib-related-content.min.js$script,domain=hindawi.com
+@@||cdn.jsdelivr.net^*/jquery.particleground.min.js$domain=maxurlz.com
+@@||cdn.wisepops.com/shared/wisepops/$script,domain=bluecinema.ch
+@@||csm.cxpublic.com/Shueisha.js$domain=wpb.shueisha.co.jp
+@@||csm.cxpublic.com^$script,domain=mainichi.jp|tarzanweb.jp
+@@||gravityrd-services.com^$domain=hotstar.com|tv2play.hu|zinio.com
+@@||loader.wisepops.com/get-loader.js$domain=bluecinema.ch
+@@||mikesca.activehosted.com/f/embed.php$script,domain=concoursultimesousmaringourmiam.ca
+@@||odb.outbrain.com/utils/get?url=$script,domain=cnn.com
+@@||outbrain.com/outbrain.js$domain=cnn.com
+@@||popup.wisepops.com/my-wisepop$domain=bluecinema.ch
+@@||rest.contextly.com/pagewidgets/$domain=inc-aus.com
+@@||s.swiftypecdn.com/install/$script,domain=docs.ansible.com
+@@||s.swiftypecdn.com^$stylesheet,xmlhttprequest,domain=docs.ansible.com
+@@||static.zdassets.com/ekr/snippet.js$domain=jeedoo.com|skroutz.gr|xjuggler.de
+@@||taboola.com/libtrc/*/loader.js$domain=cnet.com|dailymail.co.uk|foxsports.com
+@@||zdassets.com/ekr/snippet.js$domain=app.buidlbox.io|bitsacard.com|consumercellular.com|meundies.com|myurbanjungle.com|nvidia.eu|pionex.com|portal.afterpay.com|streamelements.com|superbet.pl|support.zonealarm.com
+
+! *** easylist:fanboy-addon/fanboy_annoyance_allowlist_general_hide.txt ***
+portalvirtualreality.ru#@##go-to-top
+mercopress.com#@##goToTop
+lecyclo.com#@##goto-top
+cnn.com#@##outbrain_widget_0
+temaretik.com#@##scroll_to_top
+wedevs.com#@##scrolltotop
+polcol.ru,vamk33.ru#@##to_top:not(body)
+uservoice.com#@##uservoice-feedback
+uservoice.com#@##uservoice-feedback-tab
+cnn.com#@#.OUTBRAIN
+dell.com#@#.back-to-top-container
+realme.com#@#.btn-back-to-top
+facebook.com#@#.connect_widget
+youtube.com#@#.feed-icon
+ixbt.com#@#.glyphicon-arrow-up
+stackcommerce.com,zalando.com#@#.grecaptcha-badge
diff --git a/uAssets/thirdparties/easylist/easylist-chat.txt b/uAssets/thirdparties/easylist/easylist-chat.txt
new file mode 100644
index 0000000..f3f9d89
--- /dev/null
+++ b/uAssets/thirdparties/easylist/easylist-chat.txt
@@ -0,0 +1,195 @@
+[Adblock Plus 2.0]
+! Title: EasyList – Chat Widgets
+! Expires: 9 days
+! Last modified: %timestamp%
+! *** easylist:template_header.txt ***
+!
+! Please report any unblocked adverts or problems
+! in the forums (https://forums.lanik.us/)
+! or via e-mail (easylist@protonmail.com).
+!
+! Homepage: https://easylist.to/
+! Licence: https://easylist.to/pages/licence.html
+! GitHub issues: https://github.com/easylist/easylist/issues
+! GitHub pull requests: https://github.com/easylist/easylist/pulls
+!
+! *** easylist:fanboy-addon/fanboy_chatapps_third-party.txt ***
+###popin-salescontact
+##.b24-widget-button-wrapper
+##.chat_hammerbot-iframe-wrapper__outer
+##.drift-facade
+##.intercom-launcher
+##.intercom-lightweight-app
+##.m-chat-toggler
+##.sticky-button--whatsapp
+##yardi-widget-craigslist
+! Generic Blocks
+://webim.*/button.js
+://webim.*/button.php
+! Third-party chat
+||24nettbutikk.chat^$third-party
+||3cx.com/livechat/
+||3cx.uk^$third-party
+||acquire.io^$third-party
+||alive5.com^$third-party
+||apex.live^$third-party
+||api.botsonic.ai^$third-party
+||api.visitor.chat^$third-party
+||app.chaport.com^$third-party
+||app.mymaisie.com/static/chatbot-component/
+||assistant.almaintelligence.com^
+||astutebot.com^$third-party
+||awhy.it^$third-party
+||birdeye.com^$third-party
+||boldchat.com^$third-party
+||boost.ai/chatPanel/$third-party
+||bot.leadoo.com^$third-party
+||botgenes.org^$third-party
+||botmind.io^$third-party
+||call.chatra.io^
+||callpage.io^$third-party
+||carchat24.com^$third-party
+||carrotquest.io^$third-party
+||cdn.shopify.com/extensions/*/assets/inbox-chat-loader.js
+||chat-widget.hiverhq.com^
+||chat.broadly.com^$third-party
+||chat.gosquared.com^$third-party
+||chat.octadesk.services^$third-party
+||chatbase.co/embed.min.js
+||chatbot.com^$third-party
+||chatbot.pef.czu.cz^
+||chatbro.com^$third-party
+||chatdealer.jp^$third-party
+||chatwoot.on-mail.ru^$third-party
+||cibbot.com^$third-party
+||cliengo.com^$third-party
+||clientchatlive.com^$third-party
+||clients.streamwood.ru^$third-party
+||cloudfront.net/gosquared.js
+||connect.facebook.net^*/xfbml.customerchat.js
+||console.rul.ai^$third-party
+||contivio.com/Chat2/
+||conversiobot.com^$third-party
+||craft-talk.com^$third-party
+||crall.io^$third-party
+||crisp.chat^$third-party
+||daktela.com^$third-party
+||driftt.com^$third-party
+||echatsys.com^$third-party
+||embed.simplifeye.co^$third-party
+||engagebay.com^$third-party
+||evidence.io^$third-party
+||external.airport.ai^$third-party
+||fcc-online.pl/chat/
+||freshchat.com^$third-party
+||gladly.com/chat-sdk/
+||goftino.com^$third-party
+||googleapis.com/ebbot-web/
+||gorgias.chat^$third-party
+||gs-chat.com^$third-party
+||gso.amocrm.com^$third-party
+||gstatic.com/dialogflow-console/fast/messenger/
+||gubagoo.io^$third-party
+||happyfox.com^$third-party
+||helpscout.net^$third-party
+||hubspot.com/livechat-public/
+||iadvize.com/iadvize.js
+||inteliwise.com^$third-party
+||intelliticks.com^$third-party
+||intercomcdn.com^$third-party
+||jivosite.com^$third-party
+||js.zohocdn.com/ichat/$third-party,domain=~zoho.com|~zoho.eu|~zoho.in|~zohoshowtime.com
+||js.zohocdn.com/salesiq/js/floatbutton1_$third-party,domain=~zoho.com|~zoho.eu|~zoho.in|~zohoshowtime.com
+||ladesk.com/chat/
+||landbot.io^$third-party
+||lcmagentportal.appspot.com^$third-party
+||leadback.ru^$third-party
+||leadbooster-chat.pipedrive.com^$third-party
+||leadgenic.ru^$third-party
+||live2support.com^$third-party
+||livechatinc.com^$third-party
+||livehelpnow.net^$third-party
+||livetex.ru^$third-party,domain=~livetex.github.io
+||lptag.liveperson.net^
+||me-talk.ru^$third-party
+||melibo.de^$third-party
+||messenger.customerly.io^$third-party
+||mobilemonkey.com^$third-party
+||my.salesforce.com/embeddedservice/
+||mylivechat.com^$third-party
+||neurologic.com.br^$third-party
+||nice-incontact.com^$third-party
+||ocelotbot.com^$third-party
+||olark.com^$third-party
+||ommi-prod-widget.web.app^$third-party
+||onlim.com^$third-party
+||onwebchat.com^$third-party
+||pageview.activengage.com^
+||personaclick.com^$third-party
+||phenompeople.com/txm-bot/prod/prod.js
+||phplivesupport.com^$third-party
+||podium.com^$third-party
+||production.raptive.ai^$third-party
+||purechat.com^$third-party
+||qualified.com^$third-party
+||quicktext.im^$third-party
+||raychat.io^$third-party
+||readyplanet.com^$third-party
+||reamaze.com^$third-party
+||richpanel.com^$third-party
+||salesforceliveagent.com^$third-party
+||salesiq.zoho.com^$third-party
+||sendinblue.com^$third-party
+||service.force.com^$third-party
+||serviceform.com^$third-party
+||shopify.com^*/shopifyChatV1.js
+||smart.generaxion.fi^$third-party
+||smartarget.online^$third-party
+||smartsuppcdn.com^$third-party
+||smartsuppchat.com^$third-party
+||smith.ai^$third-party
+||smooch.io^$third-party
+||snapengage.com^$third-party
+||snapsmedia.io^$third-party
+||sprinklr.com/api/livechat/$third-party
+||st.chatango.com^$third-party
+||stadtwerk.bot^$third-party
+||storage.googleapis.com/code.snapengage.com/
+||supportai.yandex/widget/$third-party
+||talkative-cdn.com^$third-party
+||tawk.to^$third-party
+||thankful.ai^$third-party
+||thelivechatsoftware.com^$third-party
+||tidio.co^$third-party
+||tidiochat.com^$third-party
+||twilio.com^$third-party
+||unibuddy.co^$third-party
+||usemessages.com/conversations-embed.js
+||userback.io/widget/
+||userbot.ai^$third-party
+||userlike-cdn-widgets.*.amazonaws.com^
+||userway.org^$third-party
+||vergic.com^$third-party
+||web.kodabots.com^$third-party
+||web.pypestream.com/launcher.js
+||webchat.omni.cafe^
+||webim.ru^$third-party
+||widget.chatbot.laiye.com^
+||widget.helpcrunch.com^
+||widget.insent.ai^$third-party
+||widget.intercom.io^
+||widget.kommunicate.io^
+||widget.moin.ai^$third-party
+||widget.superchat.de^$third-party
+||widget.trengo.eu^
+||widget.writesonic.com^$third-party
+||widgetinstall.com/plugin/chat.js
+||widgets.binotel.com/chat/
+||widgets.binotel.com/getcall/
+||widgets.leadconnectorhq.com^
+||worldchatbox.worldfone.vn^$third-party
+||zammo.ai^$third-party
+||zdassets.com/web_widget/
+||zohopublic.com/watchws?$third-party
+||zopim.com^$third-party
+||zyratalk.com^$third-party
diff --git a/uAssets/thirdparties/easylist/easylist-cookies.txt b/uAssets/thirdparties/easylist/easylist-cookies.txt
new file mode 100644
index 0000000..2310761
--- /dev/null
+++ b/uAssets/thirdparties/easylist/easylist-cookies.txt
@@ -0,0 +1,28739 @@
+[Adblock Plus 2.0]
+! Title: EasyList – Cookie Notices
+! Last modified: %timestamp%
+! Expires: 7 days (update frequency)
+! *** easylist:template_header.txt ***
+!
+! Please report any unblocked adverts or problems
+! in the forums (https://forums.lanik.us/)
+! or via e-mail (easylist@protonmail.com).
+!
+! Homepage: https://easylist.to/
+! Licence: https://easylist.to/pages/licence.html
+! GitHub issues: https://github.com/easylist/easylist/issues
+! GitHub pull requests: https://github.com/easylist/easylist/pulls
+!
+!--------------------------General blocking rules-----------------------------!
+! *** easylist:easylist_cookie/easylist_cookie_general_block.txt ***
+-consent-banner-
+-consent-banner.
+-cookie-banner-$~image
+-cookie-banner.
+-cookie-bar.
+-cookie-cnil.
+-cookie-consent-$~script
+-cookie-consent.$~script,domain=~django-cookie-consent.readthedocs.io
+-cookie-consent.js
+-cookie-dialog.
+-cookie-filter/$script
+-cookie-law-popup.
+-cookie-notice-
+-cookie-notice.
+-cookie-policy.
+-cookie-popup.
+-eu-cookie/$script
+-eu-cookies/$script
+-gdpr-cookie-$~script
+-gdpr-min.js
+-rodo.min.js
+.cookie-law.$script
+.cookielaw.js
+.cookiesdirective.js
+.EuCookieCompliance.min.js
+.gdpr.js
+.gdpr.min
+.PrivacyDataNotice.
+.uk-cookie-consent-js.js
+/1990kb_cookieconsent.min.js
+/1_cookie.js
+/24cookiebar.js
+/?spu_action=spu_load$xmlhttprequest
+/__enzuzo-cookiebar.js
+/_cookie-monster.js
+/_cookie_banner.js
+/_cookie_consentement.js
+/_cookiebar.js
+/_cookieconsent.js
+/_cookielaw_mip.js
+/_cookienotice.js
+/_gz/_privacy.
+/_js__cookie_functions.js
+/acc.cookienotification.js
+/adk-iubenda.js
+/adsconsent.min.js
+/adscookies.js
+/ajax/cookie-policy/*
+/ajax/gdpr-desc
+/alertcookie.js
+/alertcookies.js
+/alertcookies.min.js
+/all-cookieconsent-js.js
+/am-cookie-ban/js/js.cookie.min.js
+/am2-gdpr-public.js
+/amasty/amgdpr/cookie.js
+/amasty/amgdpr/main.js
+/amCookieApproval.min.js
+/amds-cookies.js
+/amp-consent-
+/amundi-consent-disclaimer.js
+/analytics-trackoutbound.js
+/analytics_cookie.js
+/app.dsgvo.min.js
+/approvazione-gdpr/*
+/asesor-cookies-para-la-ley-en-espana/html/front/principal.js
+/assets/gdpr/*
+/assets/kwkuni.js
+/aucor-cookie-consent/*
+/avada-privacy.js
+/avg-cookie.js
+/avia-snippet-cookieconsent.js
+/avisCookies.min.js
+/aviso_cookies.css
+/aviso_cookies.js
+/avisos_legales/cookies.js
+/AwCookieConsent.js
+/aws-cookie/*
+/b2c.cookie-
+/bandeau.cookie.js
+/bandeaucnilcookies.js
+/bandeaucookie.js
+/banner-cookies.js
+/banner_cookie.js
+/bb-cookies.js
+/bc-cookie-consent/assets/js/klaro-config.js
+/bc-cookie-consent/assets/js/klaro.js
+/becookiebar.js
+/bgmp-gdpr.js
+/bica-cookie-alert/js/bica.min.js
+/bluelabs-gdpr.js
+/borlabs-cookie-prioritize.min.js
+/borlabs-cookie.min.js
+/borlabs-cookie/vendor-list.json
+/brainforce.cookies/jquery.ihavecookies.min.js
+/branding/cb-scripts-
+/bs5-cookie-consent/js/cookie.js
+/build/js/it-cc.js
+/bundle-gdpr.min.js
+/c4s_cookie_notification.js
+/cbgCConsent.js
+/cc_cookie.js
+/ccbundle.min.js
+/ccbundle2.min.js
+/ccm/public/app.js
+/ccm19.js
+/ccm19/public/app.js
+/ccm19/public/index.php/app.js
+/ccpa/getPrivacyFlag?
+/ccpa/prod/*
+/checkCookieConsent/*
+/chefcookie.min.js
+/ckpl-webc.min.js
+/cm-body.js
+/cmp-init.js
+/cmp-loader.js
+/cmp-sp.js
+/cmp.bundle.js
+/cmp.complete.bundle.js
+/cmp/cmp.js
+/cmp/cmp.min.js
+/cmp3p.js
+/cmp_didomi.js
+/cmp_puk.js
+/cmp_shim.js
+/cmpBundle.min.js
+/cmpCookie.js
+/cmpui-banner.js
+/cmpui-popup.js
+/cms-cookie-bubble.js
+/cms_cookies_acceptance/cookie_policies-
+/cnil.js
+/cnil.min.js
+/common-cookie-bar.min.js
+/complianz.min.js
+/consent-banner-
+/consent-box.js
+/consent-layer-loader.js
+/consent-manager.js
+/consent-manager.min.js
+/consent-modal.js
+/consent-tracking-api.js
+/consent.min.js?
+/consent/app.js?
+/consent/cookie.js
+/consent/public/app.js
+/consent_banner.js
+/consent_v2/choice.js
+/consentbanner-fragment/public/js/app.
+/consentbar/consent-bar.min.js
+/consentcookie.js
+/consentcookie.min.js
+/coockiealert.js
+/coockieconsent.js
+/cookie-accept.js
+/cookie-alert.js
+/cookie-alert.min.js
+/cookie-banner.js
+/cookie-banner.min.js
+/cookie-banner/*
+/cookie-banner_v2.js
+/cookie-bar.js
+/cookie-bar.min.js
+/cookie-check.js
+/cookie-choices.js
+/cookie-cnil.js
+/cookie-compliance.js
+/cookie-compliance.min.js
+/cookie-consent-dialog.js
+/cookie-consent-dialogue.js
+/cookie-consent-LGPD/jquery.ihavecookies.js
+/cookie-consent-lib.js
+/cookie-consent-main/asm_config.js
+/cookie-consent-min.js
+/cookie-consent.js
+/cookie-consent.min.js
+/cookie-control.js
+/cookie-disclaimer.js
+/cookie-disclaimer.min.js
+/cookie-footer.js
+/cookie-hint.js
+/cookie-hinweis.js
+/cookie-hinweis.min.js
+/cookie-hinweis/script-v2.js
+/cookie-info.js
+/cookie-info.min.js
+/cookie-information.js
+/cookie-information.min.js
+/cookie-law-info-ccpa.js
+/cookie-law.js
+/cookie-layer.js
+/cookie-manager/script.js
+/cookie-master.js
+/cookie-message.js
+/cookie-message.min.js
+/cookie-modal.js
+/cookie-monster/production/*
+/cookie-notice-
+/cookie-notice.js
+/cookie-notice.min.js
+/cookie-notice/js/front.min.js
+/cookie-notice/js/jquery.ihavecookies.min.js
+/cookie-notif.js
+/cookie-notification.js
+/cookie-notification.min.js
+/cookie-option.js
+/cookie-overlay-pl.js
+/cookie-policy.css
+/cookie-policy.js
+/cookie-policy.min.js
+/Cookie-popup-
+/cookie-popup.js
+/cookie-popup.min.js
+/cookie-popup?
+/cookie-privacy-
+/cookie-prompt.js
+/cookie-richtlinie.js
+/cookie-terms.js
+/cookie-though.js
+/cookie-warning.js
+/cookie.banner.js
+/cookie.euck.js
+/cookie.latest.min.js
+/cookie.notice.js
+/cookie.notice.min.js
+/cookie.notify.js
+/cookie.pack.js
+/cookie.policy.min.js
+/cookie.umd.min.js
+/cookie/cookie-bar
+/cookie/cookie2.js
+/cookie/cscript.js
+/cookie/klaro-config-de.js
+/cookie/klarox.js
+/cookie/permissionbar-latest.js
+/cookie/require-opt-in.js
+/cookie/support-opt-in.js
+/cookie_agree.css
+/cookie_agreement_dialogue.js
+/cookie_alert*.js
+/cookie_banner-
+/cookie_banner.js
+/cookie_banner.min.js
+/cookie_banner/*
+/cookie_banner_
+/cookie_bar.js
+/cookie_consent.$~stylesheet
+/cookie_consent/*
+/cookie_consent_js.js
+/cookie_consent_min_js.js
+/cookie_flyout.js
+/cookie_hint.js
+/cookie_info.css
+/cookie_info.js
+/cookie_information_$script
+/cookie_it.js
+/cookie_law.js
+/cookie_layer.js
+/cookie_legal_$script
+/cookie_msg.js
+/cookie_notice.js
+/cookie_notice.min.js
+/cookie_notifier.js
+/cookie_notifier/cn.min.js
+/cookie_policy.js
+/cookie_policy/ack.js
+/cookie_warning.js
+/cookie_ws.js
+/cookieaccept.js
+/cookieaccept.min.js
+/cookieaccept.php
+/cookieacceptance.js
+/cookieacceptance.min.js
+/cookieAgree.js
+/cookieAgree.min.js
+/cookieAgreement.js
+/cookieajx.php
+/cookiealert.js
+/cookiealert.min.js
+/cookiealert/*
+/CookieAlertBootStrapper.js
+/cookiebadge.min.js
+/cookieban.js
+/cookiebanner.js
+/cookiebanner.min.js
+/cookiebanner/consent.js
+/cookieBannerLoader.js
+/CookieBannerToIncludeCompiled.js
+/cookiebar-latest.min.js
+/cookiebar.jquery.$script
+/cookiebar.js
+/cookiebar.min.js
+/cookiebar/*
+/cookiebar_$~stylesheet
+/cookieblocker.min.css
+/cookiebox.js
+/cookiebox.min.js
+/CookieBubble.js
+/cookieBubble.min.js
+/cookiechoice.js
+/cookiechoices-v3.js
+/cookiechoices.js
+/cookiechoices.min.js
+/cookiechoicesfic.js
+/cookiecode.dist.min.js
+/cookiecompliance.js
+/cookiecompliancy.js
+/cookiecompliancy.min.js
+/cookieConsent-$script
+/cookieconsent.bundle.js
+/cookieconsent.js
+/cookieconsent.latest.min.js
+/cookieconsent.min.$~stylesheet
+/cookieconsent.umd.js
+/cookieconsent/*
+/cookieconsent?
+/cookieconsent_.min.js
+/cookieconsentbar.js
+/cookieconsentpopup.js
+/CookieConsentTracking-SetCookieDnt
+/cookiecontrol-
+/cookiecontrol.js
+/cookiecontroller.js
+/cookiecutter.js
+/cookiecutter.min.css
+/cookiecuttr.css
+/cookiecuttr.js
+/cookiecuttr/*
+/cookied.js
+/cookiedeclaration.ashx
+/cookiedirective*.js
+/cookiedisclaimer.css
+/cookiedisclaimer.js
+/cookiedisclaimer.min.css
+/cookiedisclosure.js
+/cookiedisclosure/core.js
+/cookiedisclosure/inpage_v2.js
+/cookieDSVGo.min.js
+/cookiefly/frontend/*
+/cookiefly/resources/assets/js/frontend.js
+/cookiegdpr.js
+/cookiegdpr.min.js
+/cookiehint.js
+/cookiehint.min.js
+/cookiehinweis.js
+/cookiehinweis.min.js
+/cookieinfo.js
+/cookieinfo.min.js
+/cookieinfo2.min.js
+/cookieInfofr.js
+/cookiejar.js
+/cookiejar.min.js
+/cookiejs.js
+/cookieLaw-vanilla.js
+/cookielaw.js
+/cookielaw.min.js
+/cookielaw_allinone.js
+/cookielaw_mip.js
+/cookielawinfo-domainfix.js
+/CookieLawProduct/resources/generatejs
+/cookielay.js
+/cookielayer.js
+/cookielayover-min.js
+/cookielayover.js
+/cookielegal.js
+/cookiemanagement.js
+/cookiemessage.js
+/cookieMessage.min.js
+/cookieModal.js
+/cookiemonster.js
+/cookiemonster.mg
+/cookieMonster.min.js
+/cookiemsg.js
+/cookiemsg.min.js
+/cookieMunchr.min.js
+/cookienote.css
+/cookienote.js
+/cookienotice-bootstrap.js
+/cookienotice.build.js
+/cookienotice.js
+/cookienotice.min.js
+/cookienotif.js
+/cookieNotification.js
+/cookieNotification.min.js
+/cookienotificationbar.min.js
+/CookieNotifier.js
+/CookieNotifier.min.js
+/cookienotify-
+/cookieNSCconsent.min.js
+/cookieok.js
+/cookieopt-min.js
+/cookieOptin.js
+/cookieOverlay.js
+/cookieparty.config.php
+/cookieparty.min.js
+/cookieplugin/cookie.js
+/cookieplus-addon-blocker.js
+/cookiepolicy.js
+/cookiepolicy.min.js
+/cookiepolicybanner.js
+/cookiepolicyga.js
+/cookiepopup?
+/cookieprivacy.js
+/cookieprivacy.min.js
+/cookies-anekis.js
+/cookies-banner$script
+/cookies-consent.js
+/cookies-directive.js
+/cookies-disclaimer.js
+/cookies-enabler.js
+/cookies-enabler.min.js
+/cookies-eu-banner.js
+/cookies-for-comments/css.php
+/cookies-info.js
+/cookies-info.min.js
+/cookies-manager.js
+/cookies-manager.min.js
+/cookies-message.js
+/cookies-message.min.js
+/cookies-monster.js
+/cookies-note.js
+/cookies-notice.js
+/cookies-notification.js
+/cookies-notification.min.js
+/cookies-policy-notification-bar.min.js
+/cookies-policy.js
+/cookies-policy.min.js
+/cookies-popup.js
+/cookies-popup.min.js
+/cookies-window.js
+/cookies-window.min.js
+/cookies/bundle.min.js
+/cookies_alert.js
+/cookies_alert.min.js
+/cookies_bar.js
+/cookies_cnil.js
+/cookies_directive.js
+/cookies_gdpr.js
+/cookies_gdpr.min.js
+/cookies_it.js
+/cookies_komunikat.js
+/cookies_law.js
+/cookies_policy.js
+/cookies_policy.min.js
+/cookies_popup.js
+/Cookies_Pro.js
+/cookies_tlo.png
+/cookiesApproval.js
+/cookiesbanner.js
+/cookiesbanner/*
+/cookiesConsent.js
+/cookiesConsent.min.js
+/cookiescontrol-
+/cookiescript.js
+/cookiesdirective.js
+/cookiesdirective.min.js
+/cookiesdisclaimer.js
+/cookieser.js
+/cookieSettings.js
+/CookieSettingsManager?
+/cookiesgdpr?
+/cookiesJS.js
+/cookieslayer.js
+/CookiesManager.js
+/cookiesmanager.min.js
+/cookiesNotification.js
+/CookiesNotification.min.js
+/cookiesplus-front.js
+/cookiespolicy.js
+/cookiesPopup.js
+/cookiesPopup.min.js
+/cookiestatement.js
+/cookiestrip.min.js
+/cookieswidget.js
+/cookiesWidget/widget.js
+/cookieu.js
+/CookieWall/clb.js
+/cookiewall?
+/cookiewarn.js
+/cookiewarning-nosql.js
+/cookiewarning.js
+/cookiewarning.min.js
+/cookiewet.js
+/cookieWidget.js
+/cookiewookie.js
+/cookii.min.js
+/cookimize-cookie.js
+/cookpop.min.js
+/coolkies-walkies/js/min/cookies.js
+/cpex-cmp-upgrade.min.js
+/cpex-cmp.min.js
+/Cream_CookieConsent/js/check-cookie-consent.js
+/ct-ultimate-gdpr.js
+/cuk_core.js
+/cuk_core.min.js
+/data-consent.min.js
+/datenschutzV3.min.js
+/dc-cookie-notice-bar-public.js
+/debugged-cookiebar.min.js
+/designil-pdpa/*
+/dh_cookie_manager_1.js
+/didomi.js
+/didomi/loader.js
+/digicookies.js
+/disclaimer-cookies.js
+/dist/cookie-consent.
+/dist/cookie-disclaimer-
+/dist/gdpr-$domain=~express.co.uk
+/diyscmp.min.js
+/dkmb_gdpr.js
+/dl.cmp.min.js
+/dock-privacy-settings.esm.js
+/DonCookie.min.js
+/dsgvo-consent.js
+/dsgvo-cookie-consent.min.js
+/dsgvo-opt-in.css
+/dsgvo.js
+/dsgvo/consent-banner/*
+/dsgvo_2018.js
+/dsgvoCC.js
+/dsvgo.js
+/dywc.js
+/easy-cookies-policy/files/front.js
+/easycmp/index.js
+/echonetcookie.js
+/edcc.js
+/ElxtrConsent/ConsentController.js
+/emb-cnil-popup-rgpd.js
+/ercookiebar.
+/esb-privacy.js
+/etagen_cookie.js
+/eu-cookie-law-
+/eu-cookie-law.min.js
+/eu-cookie-policy.js
+/eu-cookie.js
+/eu-cookie.min.js
+/eu-cookielaw.js
+/eu-cookielaw.min.js
+/eu-notice.js
+/eu_cookie.js
+/eu_cookie_compliance.js
+/eu_cookies.js
+/eu_privacy.js
+/euc_cookie.js
+/euConsentConfig.json
+/eucookie.js
+/euCookieCompliance.theme.js
+/EUCookieDirective.js
+/eucookielaw.js
+/eucookielaw3.min.js
+/eucookienotice.js
+/eucookies.
+/eurocookie.css
+/eurogdpr/prod/utag.js
+/evidon-banner.js
+/evidon-sitenotice-tag.js
+/exponea.min.js
+/ext/kmacookies/Resources/*
+/feoCookies.min.js
+/feoCookiesGtmEvents.min.js
+/firebox-gdpr.js
+/Flurrybox_EnhancedPrivacy/js/view/popup.min.js
+/fnGdpr.js
+/fortune_cookie_popup.js
+/fs-cc.js
+/fs-cc.min.js
+/fx_cookiesV3.js
+/fxCookiesV3.css
+/g4cookies.js
+/gdpr-appliance.js
+/gdpr-assets-
+/gdpr-banner.js
+/gdpr-banner.min.js
+/gdpr-bundle.
+/gdpr-cmp-bootstrap.js
+/gdpr-cmp-stub.js
+/gdpr-compliance.js
+/gdpr-consent-
+/gdpr-consent.js
+/gdpr-consent.min.js
+/gdpr-consent/*
+/gdpr-cookie-compliance/dist/scripts/main.js
+/gdpr-cookie.js
+/gdpr-min.js
+/gdpr-popup-
+/gdpr-popup.js
+/gdpr-popup.min.js
+/gdpr-public.js
+/gdpr-public.min.js
+/gdpr-rw-cookie-notice.min.js
+/gdpr-v2.js
+/gdpr.bundle.
+/gdpr.min.js
+/gdpr/assets/js/init.js
+/gdpr/banner.js
+/gdpr/bundle.min.js
+/gdpr/disp.js
+/gdpr/gdpr.$script
+/gdpr/optInCookieSSR?
+/gdpr/pdcc.min.js
+/gdpr/spd.js
+/gdpr/tracker-loaders.js
+/gdpr_changes_v1.min.js
+/gdpr_consent.js
+/gdpr_consent.min.js
+/gdpr_dfp.js
+/gdpr_footer.js
+/gdpr_js_toi/*
+/gdpr_notice.js
+/gdpr_plugin.js
+/gdpr_popup.js
+/gdpr_popup.min.js
+/gdprcompliance/views/js/front.js
+/gdprcookie.js
+/gdprcookiepolicy.js
+/gdprDialog.js
+/gdprnotice.js
+/gdprpopup.js
+/gdprscript.js
+/gestionBandeauCookies.js
+/GestionCookiesCNILPlugin/js/bundle.js
+/gestione_cookie.js
+/GetCookieMessageDisplay?
+/gp-cookie-consent/v1/script.js
+/gp-cookie-consent/v2/script.js
+/grt-cookie-consent.min.js
+/gtm-consent.js
+/homepage-cookie-
+/hp-cookie-message.js
+/ht_cookielaw.js
+/hw-cookie-consent/latest/embed.js
+/i_CookieConsent.js
+/ibeugdpr.js
+/ibeugdpr.min.js
+/idxrcookies.js
+/ihavecookies/jquery.ihavecookies.min.js
+/ilmenite-cookie-consent.min.js
+/ilmenite-cookie-consent/*
+/implied-consent.min.js
+/implied-cookie-consent/*
+/in2cookiemodal.js
+/in2cookiemodalconfig.js
+/info_cookie.js
+/infobar-cookies.js
+/infocookies.js
+/informativa-cookie/*
+/informativa_cookie.js
+/informativa_cookie.min.js
+/InformativaCookies/*
+/initCookiebanner.js
+/intser_cookies.js
+/ionic-consent.js
+/ips.privacyCookie.js
+/iqitcookielaw/views/js/front.js
+/iticonseil-rgpd/*
+/iubenda/iubenda.js
+/iubenda_cs.js
+/iuscookie.min.js
+/iuscookie_dev.js
+/javascript-cookieconsent.js
+/javascript/gdpr?
+/jbcookies.css
+/jcookie.js
+/jcookie_v2.js
+/jcookielaw-iubenda.js
+/jEuCookieLaw.min.js
+/jquery.bpcookies.min.js
+/jquery.coo-kie.js
+/jquery.cookie-alert.js
+/jquery.cookie-madeincima.js
+/jquery.cookieaccept.js
+/jquery.cookieaccept.min.js
+/jquery.cookiebar.js
+/jquery.cookiebar.min.js
+/jquery.cookiebargenial.js
+/jquery.cookiecuttr.
+/jquery.divascookies-
+/jquery.eu-cookie-consent.js
+/jquery.fscookieconsent.js
+/jquery.tipsy.cookie.
+/jqueryCookieGuard.
+/js/CookieManager.js
+/js/cookiePolicy?
+/js/CookiePrompter-
+/js/eprivacy.js
+/js/onetrust/*
+/js/rodo.js
+/jscookieconsent.js
+/judgecookieaccept/*
+/KabimbaCookie.js
+/kameleoon.js
+/keksikysely.min.js
+/kixsimpletrack/views/js/front.min.js
+/klaro-config.js
+/klaro-cookieconsent/config.js
+/klaro-no-css.js
+/klaro-no-translations-no-css.js
+/klaro-styles.min.
+/leyCookies.js
+/lgdpscript.min.js
+/lgpd-cookie.js
+/lgpd-cookie/js/actions.js
+/lgpd-upside/assets/js/main.js
+/lgpd/cookie.js
+/lin_gdpr_cookiejar.js
+/ll_cookie_bar.js
+/loadcookieconsent.js
+/loom-cookie.js
+/loom_cookie.block.js
+/loom_cookie.main.js
+/lssicookies.js
+/Magento/base/default/js-cookie/cookie-wrapper.min.js
+/magento_theme/static/js/cookie-popup.
+/magento_theme/static/js/cookie_monster-js
+/MarkupCookieConsent.min.js
+/mb_cookies.js
+/mco-consent.js
+/mdv.cookie.js
+/mea-legal-consent.
+/mediamus-cookie.js
+/mekanismi_cookie_alert/js/script.js
+/messagingNoTcfApi.js
+/meWantCookies1.8.js
+/mfe-cookies/main.js
+/mindshape_cookie_consent/Resources/Public/JavaScript/cookie_consent.js
+/mkm-dsgvo-plugin/1-blocker.js
+/mod_cookie/tmpl/assets/js/cookie_script.js
+/mod_ebstickycookienotice/tmpl/assets/js/cookie_script.js
+/mod_logikamentecookielaw/screen.css
+/modal-gdpr.umd.js
+/module-rgpd.esm.js
+/mp_acookie.js
+/msmCookieConsent.js
+/mweb.cookie/js/cookie_info.aspx
+/mws-cookie-solution-config.json
+/nanoGDPR.min.js
+/nc-rgpd-cookies.css
+/nc-rgpd-cookies.min.js
+/neo-cookie-policy.js
+/newprivacypolicy.js
+/nibirumail.cookie.min.js
+/ninja-gdpr-compliance/assets/home/js/app.js
+/nl-cookie-law.js
+/npo_cookiecontrol.js
+/nsd-cookie-banner.js
+/nt-cookie-form.full.min.js
+/oil.*-RELEASE.min.js
+/oil/*-RELEASE.chunk.js
+/oiljs/*-RELEASE.min.js
+/on-cookie-response.js
+/one_trust/*
+/oneTrust-
+/oneTrust.
+/onetrust/consent/*
+/onetrustConsent.js
+/onpc-cookie-notice.js
+/opnWidget.js
+/opt-in-select/cookie/*
+/os19ccm/public/index.php/*
+/osb_consent.min.js
+/otBannerSdk.js
+/oxcookienote.min.js
+/pdcookiepro//views/js/front.js
+/pdcookiepro/cookie?
+/pescookies.min.js
+/pgcookies.min.js
+/pgdpr.min.js
+/pitprivacy.js
+/pixim-cookie.js
+/plg_system_cookieconfirm/js/cookieconfirm.js
+/pltk/pltk.js
+/plugin_cookie.js
+/plugins/easy-wp-cookie-popup/*
+/plugins/gdpr/dist/js/public.js
+/Plumrocket_CookieConsent/js/lib/js.cookie.js
+/pm-privacy.js
+/policy_cookie.js
+/policyaccept.js
+/politicacookies.js
+/pop_up_cookie.js
+/popupConsent.css
+/popupConsent.js
+/PopupCookie.js
+/popupcookieinit.js
+/popupcookies.js
+/pp-cookie-banner/CookieBannerWithContentBlocker/main.js
+/prettycookies.js
+/privacy-banner.js
+/privacy-banner/storefront-banner.js
+/privacy-consent-$script
+/privacy-cookie.js
+/privacy-cookies.js
+/privacy-manager.js
+/privacy-modal.js
+/privacy-policy.js
+/privacy/cookie.js
+/privacy_cookie.js
+/privacy_policy.js
+/privacy_v2_4.js
+/privacychoices.js
+/privacycookie/*
+/privacyopt.js
+/privacypolicy.js
+/privacyPopup/*
+/pro-cp-dialog.js
+/protocalCookie.js
+/pum-site-scripts-
+/pum-site-scripts.
+/pwcookielaw.js
+/pwd-cookie-consent.js
+/pxpcookies.js
+/qc-consent.js
+/qciol.min.js
+/qoob.cookielaw.min.js
+/quantastCmp.js
+/quantcast-choice.js
+/quick-cookie-consent-public.js
+/rdm-daac-notice-public.js
+/real-cookie-banner/public/*
+/redandblue-cookies/dist/js/index.js
+/retargetting/js/setcookie.js
+/rg-gdpr.js
+/rgpd.js
+/rgpd/discreto.min.js
+/rgpd/js/*
+/rgpd/view/*
+/rgpd_cookie_consent.php
+/rgpd_cookies/jquery.ihavecookies.min.js
+/rm-cookieconsent.js
+/rodo-agreement-popup.min.js
+/rodo-iframe?
+/rodo-plugin/js/rodo.js
+/rodo.min.js
+/rodo/assets/js/rim-scripts.min.js
+/rodo/messages-jsonp
+/rodo/rodo.js
+/rodo_rmf.js
+/rodoinfo.js
+/rodoinfo/*/remodal.js
+/Ronis_Cookie/js/segment-preferences-popup.js
+/roularta-gdpr.js
+/rtiCookieLaw.js
+/s4s-privacy-module/*$script
+/sc-gdpr-popup.js
+/script_cookie.js
+/script_cookies.js
+/scripts/cookiebar/*
+/sdk-gdpr.min.js
+/sdk.privacy-center.
+/seopress-cookies.min.js
+/SetConsentCookie.js
+/sf-tagomo-privacy.js
+/si-cookie-manager.js
+/sibbo-cmp-core.js
+/silverstripe-dsgvo-cookies/js/cookies.js
+/simpler-cookie-consent.umd.js
+/sizzlegdpr.snippet.min.js
+/sm-oo-consent.js
+/smart-cookie-kit/res/empty.js
+/smart-eu-cookies.min.js
+/snack-cmp_v2.min.js
+/snap-popup.js
+/sncmp.min.js
+/sni_cookie_privacy/js/cookie_consent.js
+/sp-config.min.js
+/sp-dsgvo-public.min.js
+/spcookieconsent/assets/js/script.js
+/spmsg20180522.js
+/stm-gdpr-compliance/assets/js/scripts.js
+/storedencookieconsent.js
+/super-cookie/swfobject/swfobject.js
+/superCookie-min.js
+/SwagCookiePermission/*
+/ta2021-plugin-cookie-consent/build/bundle.
+/tc_privacy/privacy.js
+/tcf/cookie.js
+/tcf2.js
+/Team23_SimpleCookie/js/simple-cookie.js
+/terms_of_service.js
+/tfcookie.js
+/thcookie.js
+/tm.cookie.js
+/tnzcookie/views/*
+/toucanCookie.js
+/tronic_gdpr-wordpress/js/scripts.js
+/trustArcHelper.js
+/TWCCookies.js
+/twcdisclaimer.js
+/uc-cmp/loader.js
+/uk-cookie-consent-js.js
+/ukcookie.js
+/um-gdpr.min.js
+/umich-cookie-consent.js
+/unibo-cookies.min.js
+/unitb-cmp.js
+/usecookies.js
+/usercentrics/cmp.js
+/util/gdpr/geo_v1.js
+/util/gdpr/geo_v3.js
+/vhs-assets-cookie-consent-init.js
+/vhs-assets-cookie-consent.js
+/vo-gdpr-compliance/Assets/js/front.min.js
+/w034CookieDirective.js
+/w4.cookiebar.js
+/wa_lib.js
+/Wamoco_CookieConsentUi/js/modal.js
+/warnCookies.js
+/we_cookie_consent/Resources/Public/Library/klaro/klaro.js
+/webtoffee-gdpr-cookie-consent/public/js/cookie-law-info-public.js
+/webtrekk_gdpr.js
+/webtrekk_gdpr.min.js
+/wecoma-lite.js
+/widget_cookieschecker.js
+/widget_privacy/scripts/init.js
+/wkp_cookies.js
+/wordpress-gdpr-custom.css
+/wp-content/plugins/cookies-and-content-security-policy
+/wp-gdpr-compliance/assets/js/front.min.js
+/wp-tarteaucitron-js-self-hosted/js/main.js
+/wp-tarteaucitron-js/js/tarteaucitron/tarteaucitron.js
+/wpca-frontend.min.js
+/wpie-common.min.js
+/wpjslib-ecom.js
+/wpjslib-sgap.js
+/wpjslib-stat.js
+/wps-cookie-consent/public/assets/js/main.js
+/ws5_eucookie/frontend/js/dist/main.js
+/wx-cookie-
+/x13eucookies/views/js/front.js
+/xt_cookie_consent.js
+/yobee-cmp.js
+/ys_cookie_consent/out/js/lib/klaro.js
+/z7_cookiemanager.js
+/zdconsent.js
+/zebra_cookie.js
+/zgdpr.min.js
+/zigcookie.js
+://ccm.*/app.js?
+! autoscout24
+/as24-cmp/consent-banner/*
+! geze.pl,geze.de,geze.bg,geze.ee,geze.co.uk..
+/Static/it-cc.js
+! TM
+/fp/check.js
+/fp/clear.png
+/fp/clear1.png
+/fp/clear2.png
+/fp/clear3.png
+/fp/es.js
+/fp/fp.swf
+/fp/HP?session_id
+/fp/tags.js
+/fp/top_fp.
+! https://github.com/AdguardTeam/AdguardFilters/blob/master/AnnoyancesFilter/sections/cookies_specific.txt#L53
+/pp-t-a-c.js
+!------------------------General element hiding rules-------------------------!
+! *** easylist:easylist_cookie/easylist_cookie_general_hide.txt ***
+###-CookieConsentContainer
+###ACCETTA_COOKIES
+###AF_GDPR
+###ATEDIN_cookie_warning
+###AVG-message
+###AVGcookiemelding
+###AcceptCookie
+###AcceptCookieContainer
+###AcceptCookieInfo
+###AcceptCookies
+###AcceptCookiesBannerTemplate
+###AcceptPrivacyDisclaimBoxWrap
+###AdatvedelmiInfosav
+###AgreeCookies
+###AiraGdprDialog
+###Akademi_CookiePolicy_bar
+###AlertCookie
+###AlertCookieBanner
+###AlertCookies
+###AlertDialogConatiner
+###AlertaCookies
+###AllowCookieContainer
+###AllowCookiesMessage
+###AllowCookiesModal
+###AllowCookiesWrapper
+###AnalyticsPrompt
+###AppCookieBar
+###ArsysCookieAcceptance
+###AspNetForm > #cookies
+###AvisoCOOKIES
+###AvisoCookie
+###AvisoCookies
+###AvisoCookieslaw
+###AvvisoCookie
+###AwCookieConsent
+###BBCookieToolDiv
+###BIPCookies
+###BMODCookieConsentBar
+###BOX_CookiePolicy
+###BWeuCookie
+###BandeauCNIL
+###BandeauCookie
+###BandeauCookies
+###BandeauInfoCookie
+###BanerINcookie
+###BannerLGPD
+###Banner_cookie_0
+###Banner_cookie_1
+###BarTab_divInformativaCookie
+###BarraCookie
+###BarraCookies
+###BasicCookie
+###BlkCookies
+###BodyContent_usrAcceptCookies_pnlAcceptCookies
+###BorlabsCookieBox
+###BortosCookie
+###BoxCookie
+###BsCookie
+###Button_Cookie
+###CCC_Cookies_wrapper
+###CCM_popup
+###CCPA-notification
+###CCPABanner
+###CCPANotice
+###CCPA_opt_out
+###CCompliance
+###CCookie
+###CGUCookie
+###CNIL
+###CNIL-cookie
+###CNIL-notice
+###CNILMessage
+###CNIL_message
+###CO--cookie-policy
+###COMUN-Cookie
+###COOK-ban
+###COOKIE-CONSENT-EU
+###COOKIEALERT
+###COOKIEEXPERTINFO
+###COOKIEHINWEIS
+###COOKIEMESSAGE
+###COOKIES
+###COOKIEWARNING
+###COOKIE_BANNER
+###COOKIE_HINWEIS
+###COOKIE_MHD_ALERT
+###COOKIE_NOTIF
+###COOKIE_OPT
+###COOKIE_WARNING
+###COOKIEmodal
+###COOKPM-BANNER
+###COWIcookiesdirective
+###CP_box
+###CPolicy
+###CPrivacy-Panel
+###CRTL_AlertCookie
+###CRTL_CookieAlert
+###CSG-cookie-notice
+###CWCookie
+###CenturiaCookieMonster
+###CerezUyari
+###CinemaAcceptCookieBar
+###ConsentBanner
+###ConsentCookie
+###ConsentCookiePopup
+###ConsentLayerWrapper
+###Consentement-cookies
+###CoockieAlert
+###CoockiesPage
+###Cookie
+###Cookie-Append
+###Cookie-Banner
+###Cookie-Consent
+###Cookie-Container
+###Cookie-Overlay
+###Cookie-Policy
+###Cookie-Popup
+###Cookie-container_outer
+###Cookie-scrolldown
+###CookieAccept
+###CookieAcceptContainer
+###CookieAcceptLayer
+###CookieAcceptance
+###CookieAcknowledgeInfo
+###CookieAdvice
+###CookieAkkoord
+###CookieAlarm
+###CookieAlert
+###CookieAlertBox
+###CookieAlertContainer
+###CookieAlerts
+###CookieBG
+###CookieBackground
+###CookieBanner
+###CookieBannerMessageContainer
+###CookieBannerNew
+###CookieBar
+###CookieBox
+###CookieButton
+###CookieCheck
+###CookieCheck_injected
+###CookieCon
+###CookieConsent
+###CookieConsentBanner
+###CookieConsentCheck2
+###CookieConsentContainer
+###CookieConsentDialog
+###CookieConsentDiv
+###CookieConsentGdpr
+###CookieConsentMessage
+###CookieConsentWrapper
+###CookieConsentement
+###CookieContainer
+###CookieControlWrapper
+###CookieDialog
+###CookieDisclaimer
+###CookieDisclaimerBanner
+###CookieDisclaimerPopup
+###CookieDiv
+###CookieEU
+###CookieEnableBox
+###CookieFooter
+###CookieFrage
+###CookieHandle
+###CookieHead
+###CookieHeader
+###CookieHint
+###CookieHinweis
+###CookieInfo
+###CookieInfoBlock
+###CookieInfoContainer
+###CookieInfoDesktop
+###CookieInfoOverlay
+###CookieInfoWrapper
+###CookieInformation
+###CookieInformationDialog
+###CookieInformationDiv
+###CookieInformationRoot
+###CookieInformer
+###CookieInformerView
+###CookieIntro
+###CookieKomunikat
+###CookieLAW
+###CookieLaw
+###CookieLawChoice
+###CookieLawContent
+###CookieLawHolder
+###CookieLayer
+###CookieLegalContainer
+###CookieLegislation_CookieAcceptPanel
+###CookieLey
+###CookieManClient
+###CookieManagerDialog
+###CookieManagerDialogWrapper
+###CookieMelding
+###CookieMessage
+###CookieMessageContainer
+###CookieMessageDiv
+###CookieMessageInner
+###CookieMessaging
+###CookieModal.is-active
+###CookieModal_cookiemodal
+###CookieMonster
+###CookieMonsterNAIH
+###CookieMsgBox
+###CookieNavigation
+###CookieNote
+###CookieNotice
+###CookieNoticeBox
+###CookieNoticeContainer
+###CookieNotification
+###CookieNotificationBar
+###CookieNotificationBarSpace
+###CookieNotificationContainer
+###CookieNotifier
+###CookieNotifiering
+###CookieOK
+###CookieOptInBanner
+###CookieOptInBox
+###CookieOverlay
+###CookieOverlayBox
+###CookiePane
+###CookiePanel
+###CookiePanelNegative
+###CookiePlus
+###CookiePolicy
+###CookiePolicyContainer
+###CookiePolicyDiv
+###CookiePolicyHeader
+###CookiePolicyMessage
+###CookiePolicyNotice
+###CookiePolicyOverlay
+###CookiePolicyPanel
+###CookiePolicy_div
+###CookiePopup
+###CookiePrivacy
+###CookiePrivacyNotice
+###CookiePubSet
+###CookieQBanner
+###CookieReportsBanner
+###CookieReportsBannerAZ
+###CookieReportsButton
+###CookieReportsMiniPanel
+###CookieReportsPanel
+###CookieRules
+###CookieSaveMsg
+###CookieSettingsContainer
+###CookieSlider
+###CookieSnackbar
+###CookieSticky_pnlCookieSticky
+###CookieT1Bar
+###CookieT2Bar
+###CookieTPC
+###CookieTool
+###CookieTopDiv
+###CookieTr
+###CookieUseApproval
+###CookieWall
+###CookieWarning
+###CookieWarningBar
+###CookieWarningBox
+###CookieWarningLink
+###CookieWarningPanel
+###CookieWarningRow
+###CookieWidget
+###CookieWin
+###CookieWrap
+###CookieWrapper
+###Cookie_EU
+###Cookie_Hinweis
+###Cookie_Layer
+###Cookie_inform
+###Cookiebanner
+###Cookiebar
+###Cookieconsent
+###Cookiecontain
+###Cookieinfo
+###CookielawBanner
+###Cookiemelding
+###Cookies
+###Cookies1_pnlCookieAcceptance
+###Cookies1_udp
+###CookiesAccept
+###CookiesAgreement_BoxAll
+###CookiesAlert
+###CookiesAlertContainerWPQ46_DOCQ1
+###CookiesAlertRow
+###CookiesArticle
+###CookiesBanner
+###CookiesBar
+###CookiesBestaetigen
+###CookiesBox
+###CookiesCompliance
+###CookiesConfirmation
+###CookiesContainer
+###CookiesCtrl
+###CookiesDisclaimer
+###CookiesDiv
+###CookiesInfo
+###CookiesInfos
+###CookiesLaw
+###CookiesLawMessage
+###CookiesLayer
+###CookiesModal
+###CookiesNotice
+###CookiesOverlay
+###CookiesPanel
+###CookiesPolicy
+###CookiesPopup
+###CookiesPrinc
+###CookiesPrivacy
+###CookiesUsageCont
+###CookiesWarning
+###CookiesWindow
+###Cookies_pnlCookies
+###Cookies_upCookies
+###Cookiezustimmung
+###CookisBanner
+###CookisWarning
+###CpHTMLCookieBar_bar
+###CybotCookiebotDialogBodyUnderlay
+###DCCookieLaw
+###DCINFO_COOKIE_AGB
+###DFLCookieConsent
+###DGPR
+###DIVcookies
+###DIVcookieswelcome
+###DLP_eu_cookie_disclosureOverlay
+###DO_CC_PANEL
+###DSGVO_container
+###DSGVOdisclaimer
+###DigitalPrint-cookie-alert
+###DisclaimCookie
+###DisclaimPrivacyBottomButton
+###DisclaimerCookies
+###DisplayCookieInfo
+###DivAceptarCookies
+###DivAllowCookies
+###DivBandeauCookies
+###DivCookies
+###DivCookiesInfoPanel
+###DivCookiesMessage
+###DivIdealCookLight
+###DivPolicyCookie
+###Div_CookieNag
+###Divcookie
+###DoWebCookiesConsent
+###EBCookies
+###EC-CookieLaw-Notification
+###ECScookiepanel
+###EPDirectiveInfo
+###EP_cookiesPopup
+###EUCOOK
+###EUComplianceNotification
+###EUCookie
+###EUCookie-Banner
+###EUCookieBar
+###EUCookieConsentBanner
+###EUCookieContainer
+###EUCookieFade
+###EUCookieMessage
+###EUCookieMsg
+###EUCookieNote
+###EUCookiePanel
+###EUCookiePolicyNotice
+###EUCookies
+###EUCookiesAlert
+###EUCookiesWarning
+###EUDirectiveCookiePanel
+###EU_Cookie_Message
+###EU_cookie
+###EUcookie
+###EUcookieBanner
+###EUcookieStatment
+###EncurioGdprSecurityBar
+###EuCookieBar-8
+###EuCookieBlock
+###EuCookieLawForm
+###Evaste_bottom
+###FT_Cookies
+###Footer-Cookie
+###Footer1_CookiePopup1_pnlDisclaimerPopup
+###Footer1_cCookiePopUp1_pnlDisclaimerPopup
+###FooterCookie
+###Footer_cookieLawBox
+###ForbotCookies
+###FormLayout_CookieWarningPanel
+###FrstCksDiv
+###GCUCookiePolicyWarning
+###GDPR-acceptDialogWrapper
+###GDPR-alert
+###GDPR-consent-alert
+###GDPR-cookies-notice
+###GDPRAlertBanner
+###GDPRConsent
+###GDPRConsentBar
+###GDPRConsentManagerContainer
+###GDPRConsentOverlay
+###GDPRCookie
+###GDPRCookieBox
+###GDPRCookieDisclaimer
+###GDPRCookieDisplay
+###GDPRDiv
+###GDPRFooter
+###GDPRModal
+###GDPRPopupContainer
+###GDPR_COOKIE
+###GDPR_Hint
+###GDPR_MainContainer
+###GDPR_block
+###GDPR_warning
+###GDPRpopup
+###GDPRtoast
+###GFSticky
+###GMI_Privacy_Policy
+###GRU-cookies-alert-iframe
+###GcCookieBox
+###Gdpr
+###Gdpr-policy
+###GdprCookieBanner
+###GdprCookieMessage
+###GdprEyebrow
+###Generictopmenu1_ServiceMenu1_PnlCookie
+###GibsonPrivacy
+###GlobalCookieBanner
+###GodBlessEUCookies
+###GritterContainer
+###GruUiWrapper
+###HCECookieManagerContainer
+###HFS_CookieHint
+###HFS_CookieHintBg
+###HGLCookieWarning
+###Header_CookiesLegacy_pnCookiesLegacy
+###Header_Header_ctl00_cookieDisclamer
+###HolderForCookieInfo
+###HoneywellEUCookie-Banner
+###IBTCookiePolicy
+###ICUserCookie_block
+###IDRodoPopUp
+###ID_DIV_GDPR_ALERT
+###ILNbar-cookie-policy
+###ILNcookieBanner
+###IM_close_cookie_notification_wrapper
+###IN_cookiebarwrapper
+###IdBannerAcceptPrivacy
+###InfoCookie
+###InfoCookieTlo
+###InformacjaOCookies
+###InformationCookies
+###InformativaCookie
+###JDCookieNotifier
+###JM_Cookie_Container
+###JM_cookielayer
+###JOISH987_bar_holder
+###JSEW-cookieDetection
+###JS_cookiesLawAcceptation
+###JScookieInfo
+###KBBCookieNotifier
+###KPNCookie
+###KPN_cookie
+###KSCookieConsent
+###KetoDietOz-pro-cookie-ify
+###KisiselVerilerinKorunmasi
+###Klick-cookie-consent-div
+###LB_cookies
+###LCookieBar
+###LGPD
+###LGPDdisclaimer
+###LSCookiePolicyPopup
+###Lab0cookie_pres
+###LabelAnzeigeCookie
+###LegalCookies
+###LegalsCookieHinweis
+###LleiCookies
+###LoggingCookie
+###MAFIADOCCOM_cookie_box
+###MCcookieChoiceInfo
+###MDCMSCookieNote
+###MODAL_lgpd
+###MSoftCookieWarn
+###M_cookieWarning
+###MainCookieBanner
+###MainCookies
+###Managebase_CookieBar_Container
+###MemoGadgetCookiebotDialog
+###MensajeCompruebaCookieSite
+###MensajeCompruebaCookieSiteTealium
+###MessageCookie
+###MessageInfo_panelCookie
+###Modal-cookie-alert
+###MsgCookie
+###MsjCookies
+###NJI-EmeaCookie
+###NLC_opaqueLayer
+###NLC_textLayer
+###NXOTool_authorize_cookies
+###NetsNOCookie
+###NotaCookies
+###Notifica_cookie
+###NotificationBar_cookie
+###ObsCnil
+###OkCookies
+###OknoWiadomosciCookie
+###PAcookies_consent_container
+###PCcookieBar
+###PConsentimento-Container
+###PLCookie
+###PL_container_cookies
+###PPcookie
+###PageCookieWarning
+###PanelCookieNotification
+###PanelCookieOverlay
+###PanelCookies
+###PaveCookies
+###PersonalDataInfoBar
+###Piper-Consent
+###PlayCookieInformationRoot
+###PnlCookie
+###PnlPrivacyAlert
+###PolitykaPrywatnosciCookie
+###PopUpCookie
+###PopUpCookies
+###PopupCookiesContainer
+###PrivacyBanner
+###PrivacyInformationConsent
+###PrivacyPolicyBanner
+###PrivacyPolicyBar
+###PrivacyPopup
+###PrivacyWarning
+###Privacy_Popup
+###Product_cookies-wrap
+###QUURcookieDisclosureOuter
+###RB_React_Component_CookieBanner_4
+###RGPD
+###RIEU-acceptCookies
+###RRZELegalBanner
+###RaeerGoogleCookiesBox
+###RodoNotificationWrapper
+###RootCookieTool
+###Row1_Column1_Cell1_CookieSettings_CookieSettings
+###SBS-cookie-widget
+###SC-cookies
+###SCK_MaximizedBanner
+###SH135-COOKIES
+###SRP_Cookie_Barre
+###SVDv3_cookie
+###SWCC3_CookieLawBanner
+###S_cookie_box
+###SgCookieOptin
+###ShowCookie
+###SiteInfoBanner[data-cookie-checker]
+###SiteMasterPage_updCookieDisclaimer
+###StCookieStyle-bar
+###StandOutCookie_Consent
+###StickyCookie-cookieSticky
+###SwOverlayCookies
+###TCCInfoCookie
+###TNTpageContentPlaceHolder_pnlCookieMessage
+###ToSPPAlert
+###ToU_float
+###UCCookies_pnl_cookie
+###UIFooter-consent
+###UKCookieWarning
+###VP_cookie
+###VbsFooter_CookiePanel1
+###ViatoCookieConsent
+###VineCookieConsentParent
+###WCPcookieBannerId
+###WP-cookie-info
+###WTCookieDiv
+###WarningWeAreUsingCookiesSweetSweetCookies
+###WeUseCookies
+###WeUseCookiesDesktop
+###WpaCookiePrivacyPolicy
+###YourCookieSettings
+###\5f CookieText
+###\5f _accept_cookie
+###\5f _ic-notice
+###\5f _ndcc_cookieImpliedConsent
+###\5f cookieConsentWrapper
+###\5f iph_cp_popup
+###_CookieConsent
+###_CookieConsentAccept
+###_CookieText
+###_DIV_COOK
+###_EAPM.TC
+###__CookieContainer
+###__agreementBar
+###__cookie-consent-wrapper
+###__cookieMessage
+###__cookie_consent
+###__cookiemsg
+###__cookies_
+###__cookies__
+###__fr_cookie_notifier
+###__ic-notice
+###__loadCookie
+###__ndcc_cookieImpliedConsent
+###__ndcc_cookieImpliedConsentBackdrop
+###__ntk_banner_cookie
+###__pb-cookie
+###__shopwired_consent_cookie_container
+###__shopwired_cookie_consent_container
+###__tealiumDNS_banner
+###__tealiumImplicitmodal
+###__traceurs_widget
+###__usrplcy
+###_avviso_cookie
+###_cc_banner
+###_cookieConsentWrapper
+###_cookieMessageDiv
+###_cookieNotificationBar
+###_cookiePopup
+###_cookie_banner
+###_cookie_message_bar
+###_cookie_script_hard
+###_cookie_script_settings
+###_cookie_script_small_opener
+###_cookiealert
+###_cookiebanner
+###_cookiebanner-opt-in-out
+###_cookienotice
+###_cookies-overlay
+###_cookies-popup
+###_cookies_info
+###_ctl0_pop_up_cnil
+###_evh-button
+###_evh-ric
+###_evidon-barrier-wrapper
+###_evidon_banner
+###_gdpr_box
+###_ghostery-message-row
+###_iph_cp_popup
+###_lcms_banerCookies
+###_nLoadCookies
+###_orkla-cookie-disclaimer
+###_prcy_info_bar
+###_s-cookie-notification-container
+###_ubuntu-it_cookie_policy
+###a-cookie
+###a25-CTUOC-cookies-warning
+###a3_cookie
+###a3p-cookie-banner
+###a8c-cookie-banner
+###aa-cookiebar
+###aaCookieBanner
+###aa_privacy_module
+###ab-cookie-advice
+###ab-cookiemodule
+###ab-cookiemodule-opc
+###ab1_cookie_bar
+###abb-cookie-banner
+###abe-gdpr
+###about-cookies
+###aboutCookieFooter
+###aboutCookieUsageBox
+###about_cookies
+###aboutcookies
+###absolute-cookies-panel
+###abw_consentbanner
+###ac_cookie_bar
+###ac_cookiebanner
+###ac_cookiesvalidation
+###acb-banner
+###accept-cookie-bar
+###accept-cookie-box
+###accept-cookie-compliance-section
+###accept-cookie-message
+###accept-cookie-permission
+###accept-cookie-wrapper
+###accept-cookies
+###accept-cookies-banner
+###accept-cookies-bar
+###accept-cookies-block
+###accept-cookies-div
+###accept-cookies-msg
+###accept-cookies-notice
+###accept-cookies-regulation
+###accept-use-cookie
+###acceptCookie
+###acceptCookieAlert
+###acceptCookieBanner
+###acceptCookieBar
+###acceptCookieContainer
+###acceptCookieDiv
+###acceptCookieMeg
+###acceptCookieModal
+###acceptCookieModalTemplate
+###acceptCookieOverlay
+###acceptCookiePG
+###acceptCookiePolicy
+###acceptCookiePolicyPopup
+###acceptCookies
+###acceptCookiesBar
+###acceptCookiesBox
+###acceptCookiesContainer
+###acceptCookiesDiv
+###acceptCookiesForm
+###acceptCookiesHolder
+###acceptCookiesId
+###acceptCookiesInfo
+###acceptCookiesPanel
+###acceptCookiesPop
+###acceptCookiesText
+###acceptCookiesWrapper
+###acceptTrackingCookieWrapper
+###acceptUserExperience
+###accept_Cookie
+###accept_agree
+###accept_cookie
+###accept_cookie_box
+###accept_cookie_modal
+###accept_cookie_overlay
+###accept_cookie_widget
+###accept_cookie_window
+###accept_cookie_wrapper
+###accept_cookies
+###accept_cookies_banner
+###accept_cookies_cont_outer
+###accept_cookies_div
+###accept_cookies_message
+###acceptance-cookie-modal
+###acceptance_of_cookies
+###acceptcookie
+###acceptcookiealert
+###acceptcookies
+###acceptcookiesWrapper
+###acceptcookieswrapper
+###accepteCookies
+###accepte_cookies
+###acceptedCookies
+###accepted_cookies
+###accepterCookie
+###accepterCookies
+###accessit-cookie-consent
+###accetta_cookie
+###accetta_cookies
+###accettazioneCookieCnt
+###accn-cookie-notice
+###aceitaCookies
+###aceptacioncookies
+###aceptarCookie
+###aceptar_cookies
+###aceptarcookie
+###aceptarcookies_fondo
+###ackcookie-popup
+###acknowledgeCookiesAndPrivacyModal
+###acknowledge_cookies
+###acmp-opt-in
+###acn_cook
+###acook.privacy
+###acookie
+###acookies
+###acookiesRoot
+###acris--cookie-permission--modal-overlay
+###acris--page-wrap--cookie-permission
+###acris_cookie_privacy_popup
+###acuarela-cookie-bar
+###ad-cookieBar
+###adc_aviso_cookies_bar_style
+###adcookies
+###addCookieBarInfo
+###adimo-cookie
+###admorris-cookie-wrapper
+###ads-cookie-consent
+###adscookie
+###adsense-constent-modal
+###adsimple-cookie-notice
+###adtoniq-msg-bar
+###adult-and-cookies
+###adv_cookie
+###adv_cookies
+###advertisement-cookies
+###advgdprpopin-global
+###adviceCookies
+###adviseCookies
+###advmc-cookie-notice
+###ae-cookiebar
+###ae-ru-privacy-banner
+###aeg-cookie-banner
+###aeucl.show
+###af-cookie-policy
+###afCookieControl-notice
+###afCookieControl-show
+###af_cookies-bar
+###afficheBandeauRgpd
+###agan_gdpr
+###agree-to-use-cookies
+###agree-with-cookies
+###agreeCookie
+###agreeNoticeWrapper
+###agreeWithCookies
+###agree_cookie_div
+###agree_cookies
+###agree_privacy_policy
+###agreecookies
+###agreementPrivacy
+###agrio_cookie_notification
+###ahhg-cookie-button
+###ahhg-cookie-window
+###aia-cookie-consent
+###aida-cookies-bar
+###aignescookie
+###aio-gdpr-cookie-notice
+###ajaxCookiesMessage
+###ajaxStyleJamCookiesMessage
+###ajax_cookies_usage_approval
+###akceptacja_cookies
+###akceptcookie
+###aldi-nord-cookiehint
+###alert-biscotti
+###alert-cnil
+###alert-cookie
+###alert-cookie-hint
+###alert-cookie-info-bar
+###alert-cookie-lgpd
+###alert-cookie-policy
+###alert-cookie-prof
+###alert-cookies
+###alert-cookies-toast
+###alert-eu-cookies
+###alert-privacy-update
+###alertCookie
+###alertCookiePolicy
+###alertCookies
+###alertMentionCookiesMessage
+###alertTop
+###alert_cookie
+###alert_cookie_msg
+###alert_cookie_optin
+###alert_cookie_popup
+###alert_cookieconsent
+###alert_cookies
+###alerta-cookies
+###alerta_cookies
+###alertacookie
+###alertcookie
+###alertcookies
+###alerte-cookie
+###alerte-cookies
+###alerte_cnil
+###alerte_cookie
+###alerte_cookies
+###alerte_tracking
+###alertpop-privacypolicy
+###alerts-policy
+###all4gn-cookie-policy-notification
+###all4nav-cookie-component
+###all4nav-cookie-policy-notification
+###allow-cookie-container
+###allow-cookie-message
+###allow-cookies-popup
+###allowCookieDiv
+###allowCookieMsg
+###allowCookieTypes
+###allowCookies
+###allowCookiesPopup
+###allowMarketingCookies_cont
+###allow_cookie_holder
+###allow_cookies
+###allow_cookies_container
+###allowcookie
+###allowcookieandthirdparty
+###allowcookiebanner
+###allowusecookies
+###alp-cookie-container
+###alsb_CNIL_notice
+###altCookiePolicyLegal
+###altea-cookiebox-wrapper
+###alternetCookieMessage
+###am-cookie
+###am2-gdpr
+###amccookies-bar
+###amcookieapproval
+###amds-cookie-layover
+###amds-cookie-message
+###amg-privacy-banner
+###amgdpr-cookie-block
+###amp-user-cookie
+###amp-user-notification-cookies
+###amp-user-notification-privacy
+###analytics-consent
+###analytics_cookie
+###andcookie
+###andytimes_privacy_div
+###announcement-eu-cookie
+###announcement-eucookielaw
+###announcementeCookies
+###annoying_cookie_alert
+###annoyingeucookiemsg
+###antilles-gdpr
+###anunt_cookies
+###any-cookieBar
+###anzeigen-einwilligung
+###ao-CookiePolicy
+###aoCookiePolicy
+###aoncookieconsentpopup
+###ap-cookie-wall
+###ap-cookiesConfirm
+###ap_cookie_toolbar
+###apache-cookie-bar
+###apccookies
+###apex_cookie_0
+###app > #cookies
+###app > .cookie
+###app > .cookies
+###app-cookie
+###app-cookie-bar
+###app-cookie-div
+###app-cookie-policy
+###app-page-site-cookies
+###app_gdpr
+###appify-cookie-bar
+###applyCookieBox
+###appx_cookie_banner_eu
+###archie-widget-privacy
+###area-cookie
+###area-cookie2021
+###area-cookie2021-sfondo
+###area_cookie_control
+###area_cookies
+###aria-policy
+###arkCookiesPrivacyPolicy
+###arkoCnilTracking-conteneur
+###arm_user_cookie_consent_popup
+###arte-cookie-banner
+###aruba_cookie_privacy_popup
+###arz-cookies-disclaimer
+###as-app-cookies
+###as-cookie-cutter
+###as-cookie-policy-bar
+###asc_ch_cookie
+###aside_cookie_pol
+###ask-gdpr-cookie
+###askCookies
+###askForCookiesBackground
+###askToAcceptCookies
+###ask_cookie_low
+###ask_cookie_ok
+###askcook
+###askcookies
+###askforcookie
+###asterix_cookie_widget
+###ate_cookie_dialog
+###atgcookies-container
+###atlas-cookie-banner
+###attain-cookies
+###attentionCookies
+###attention_cookies
+###au_cookiesalert
+###authPopupPolicyBanner
+###autoescapecookie
+###autorisationCookie
+###avcn_notification
+###avcns-wrapper
+###avency-neos-cookieenabler
+###avert_cookies
+###avertcookbis
+###avertissement-cookies
+###avertissementCNIL
+###avertissementCookies
+###avertissement_cookie
+###avertissement_cookies
+###averto-cookies
+###avg-cookie-bar
+###avg-cookie-bar-holder
+###avg-cookiebanner
+###avgOptIn-wrapper
+###avhcookieconsent
+###avianCookie
+###avis-cookies
+###avisCookies
+###avis_cockies
+###avis_cookies
+###aviscookies
+###aviso-banner
+###aviso-ck
+###aviso-coo
+###aviso-cookie
+###aviso-cookie-lgpd
+###aviso-cookies
+###aviso-lgpd
+###aviso-navegadores
+###aviso-politica-cookie
+###aviso-politica-privacidade
+###aviso-privacidade
+###avisoCookie
+###avisoCookies
+###avisoCookiesLayer
+###avisoLGPD
+###avisoUsoCookies
+###aviso_cookie
+###aviso_cookies
+###aviso_lgpd
+###avisocoockies
+###avisocookie
+###avisocookies
+###avisolegalcookies
+###avisolgpd
+###avs-cookie
+###avt-cookie-popup
+###avvisoCookie
+###avviso_cookie
+###avvisocuchi
+###aw-cookie-container
+###aw-cookie-overlay
+###aw_cookie_policy
+###awe-popin-cookies
+###awe_cookie
+###awsccc-sb-ux-c
+###axa-accepted-cookie
+###axs_cookie_toggle
+###b-cookie.barre-head
+###b14-cookiemenu
+###bCookieSlide
+###bJS_cookieBanner
+###ba_eu_cookie_law
+###babaorum-bar
+###backBlackCookies
+###backPopupCookie
+###backcolorcookies
+###backdrop-cookie-banner
+###background-cookies
+###ban-cookie
+###ban-mentions-legales
+###ban_rgpd
+###band-cookies
+###banda_cookie
+###bandacookie
+###bandeau-c
+###bandeau-cnil
+###bandeau-cookie
+###bandeau-cookies
+###bandeau-dxlabs-cookie
+###bandeau-rgpd
+###bandeau2cookie
+###bandeauAcceptationCookies
+###bandeauAccepterCookie
+###bandeauChoixCookie
+###bandeauCnil
+###bandeauCookie
+###bandeauCookieIdweb
+###bandeauCookies
+###bandeau_cgv
+###bandeau_cnil
+###bandeau_cookie
+###bandeau_cookie_cnil
+###bandeau_cookies
+###bandeau_cookies_footer
+###bandeau_cookies_online
+###bandeau_info
+###bandeau_popin_cookie
+###bandeaucookie-wrapper
+###bandeaucookies
+###bann-cook
+###banner-accept-cookies
+###banner-cookie
+###banner-cookie-banner
+###banner-cookie-consent
+###banner-cookie-law
+###banner-cookie-privacy-box
+###banner-cookiebanner-container
+###banner-cookies
+###banner-flotante-cookies
+###banner-gdpr
+###banner-gdpr-palazzina-container
+###banner-lgpd
+###banner-politica-cookies
+###banner-privacy
+###banner.cookies
+###bannerCNIL
+###bannerCnil
+###bannerCookie
+###bannerCookieContainer
+###bannerCookieLaw
+###bannerCookiePol
+###bannerCookies
+###bannerCookiesMostrar
+###bannerLGPD
+###bannerLgpd
+###banner_ck_policy
+###banner_cnil
+###banner_consenso_cookie
+###banner_cookie
+###banner_cookie_privacy
+###banner_cookiebar
+###banner_cookies
+###banner_cookies_trasparente
+###banner_lgpd
+###banner_privacy
+###banner_privacy_blitz
+###banner_rgpd
+###banner_top_cookie
+###bannercookie
+###bannercookies
+###bannerprivacy
+###banniere-cookie
+###banniere-cookies
+###banniere_information_utilisation_cookies
+###banrv_cookiecookie
+###bar-cookie-consent
+###bar-cookies
+###bar-header-cookie
+###bar-privacy
+###bar-zone-cookie-usage
+###barAgreeWithCookies
+###bar_cookies
+###bara_mesaje_cookie
+###baracookies
+###barra-cookies
+###barra-lgpd
+###barraAceptacionCookies
+###barraCOOKIE
+###barraCookies
+###barra_acceptar
+###barra_aviso_cookies
+###barra_cookie
+###barra_cookies
+###barra_dei_cookie
+###barra_legal_cookie
+###barraaceptacio
+###barraaceptacion
+###barraaviso
+###barracoki
+###barracookie
+###barracookies
+###barre-cookie
+###barreAlerteCookie
+###barreCookie
+###barre__cookie
+###barre_cookie
+###barre_cookie_contenu_centre
+###barre_cookies
+###barre_flottante_cookie
+###barre_legale_cookies
+###barre_top_secondaire
+###barritacookie
+###barritacookies
+###barritaloca
+###basalCookieFooter
+###bauerCookiePolicy
+###bauerCookiePolicyBanner
+###bb_cookies
+###bbccookies
+###bbcdBanner
+###bbh_gdpr_cookie_info_bar
+###bbtCookieBG
+###bbx_modal_cookie
+###bc-cookie-banner
+###bc-cookie-notice
+###bcCookies
+###bc_cookiecontrol
+###bcb-cookies-notice
+###bcc-cookie-bar
+###bcmsCookieInfoTextWrapper
+###bcmsCookieInfoWrapper
+###bcn-ccwr
+###bcookiewidget
+###bcpm-footer
+###bcpm-notification-outer-border
+###bd-cookie
+###becookiebarid
+###becookiebarpanelid
+###bel-cookie-info-banner
+###belkaCookies
+###better-cookie-bar
+###bettergdpr_cookie_banner
+###bettergdpr_user_menu_popup
+###bf-cookie-notice
+###bfg-cookie-policy-banner
+###bfr-cookielaw
+###bg-footer-privace-policy
+###bg-popupCookies
+###bg_cookie
+###bg_cookies
+###bgee_privacy_banner
+###bgon-cookie-bar
+###bib_CookieBox
+###bigcookies
+###bigf-cookie-bar
+###bim-studio-cookie-holder
+###bipo_avisocookies
+###biscuitFormDiv
+###bitbay-cookies
+###bk-cookie-consent-container
+###bkCookieBanner
+###bk_cookies_alert
+###bkcookie
+###blackout_cookie
+###blake_cookies_notice
+###blastnessCookieBanner
+###bloc-cookie
+###bloc-cookies-container
+###bloc-cookies-normal
+###blocCookies
+###bloc_cookie
+###bloc_cookie_annonce
+###bloc_cookies
+###bloc_header_message
+###bloc_rgpd
+###bloc_setcookie
+###block-agence-m-cookies-block
+###block-asn-privacy-cookie-privacy
+###block-bean-cookie-popup
+###block-btm_blocks-cookie_notice
+###block-ccpa
+###block-cookie-agreement
+###block-cookie-alert
+###block-cookie-compliance-cookie-compliance
+###block-cookie-disclaimer-cookie-disclaimer-block
+###block-cookie-form
+###block-cookie-info
+###block-cookie_policy-0
+###block-cookieblock
+###block-cookieconsent
+###block-cookieconsentbar
+###block-cookiepolicyblock
+###block-cookies-info
+###block-cookies-police
+###block-cookiesactive-cookiesactive-blockcode
+###block-cookiesnotice
+###block-cookiespopup
+###block-cookiewarning
+###block-csm-user-cookie-consent-message
+###block-custom_cookies-custom_cookies_eu
+###block-db-cookie-compliance-cookie-compliance-block
+###block-direct-control-cookies-accept
+###block-eucookieblock
+###block-eucookieblock-cookie-info
+###block-gdprcookiesblock
+###block-gdprmodal
+###block-hp-cookie-consent
+###block-inf-eu-cookie-cookie-disclaimer
+###block-lhg-cookie-usage
+###block-menucmt-push_loi_cookies
+###block-mnc-cnil-mnc-cnil-info-cookies
+###block-mwcookieconsent
+###block-nett-cookies-message
+###block-notifications-cookie
+###block-oyster-gdpr-cookie-policy
+###block-politicascookies
+###block-privacypolicybanner
+###block-privacypolicypopup
+###block-rgpd-bandeau
+###block-rgpd-rgpd-footer
+###block-rmg-cookie-policy-cookie-policy
+###block-site-agree-access-cookies
+###block-tbd-cookie-notice
+###block-wbt-block-domain-cookie
+###block-zodiac-site-cookie
+###blockAcceptCookie
+###blockCookieContainer
+###blockCookieInfo
+###block_cookie
+###blockcookies
+###blockdisclaimer
+###blockuecookielaw
+###blogger_cookie_notice
+###blok_cookie
+###bloque_ventanaCookies
+###bloquecookies
+###blusys_normativa_cookie
+###blz-cookieinfo
+###bmw-eprivacy-banner
+###bn-cookies
+###boite_dialog_cookie
+###bonaCookies
+###bonial-cmp-container
+###bootcooker-banner
+###botones_cookies
+###bottom-cookie
+###bottom-cookie-banner
+###bottom-cookies
+###bottomCookie
+###bottomCookieUsage
+###bottomStickyCookiesBox
+###bottom_cookie
+###bottom_info_cookies
+###box-accettazione-cookie
+###box-agree-gdpr-id
+###box-alert-cookie
+###box-cookie
+###box-cookie-01
+###box-cookie-notice
+###box-cookie-overlay
+###box-cookie-warning
+###box-cookies
+###box-gdpr
+###boxCookie
+###boxCookies
+###boxTextCookie
+###boxZgodaNaCookie
+###box_cookie
+###box_cookie_accept
+###box_cookie_acceptance
+###box_cookie_advert
+###box_cookie_info
+###box_cookie_policy
+###box_cookiepolicy
+###box_cookies_alert
+###box_cookies_error
+###box_cookies_info
+###box_info_cookie
+###box_lgpd
+###box_lgpd_cookie
+###boxcookie
+###boxcookielaw
+###bpcookies
+###bpr_cookie-alert
+###bpx-rgpd-cookie-popup
+###br-wordpress-cookie-notice
+###brCookieBanner
+###bra_cookieChoiceInfo
+###brain-cookie-optin-cookiebox
+###brandfour-cookie-block
+###brink-gdpr-cookie-notice
+###browser-cookie-warnin
+###browser-cookie-warning
+###brunelcookies
+###bry-consent
+###bsCookiesBanner
+###bs_cookie_alert_container
+###bscookie
+###bst-cookie-banner
+###bt-privacy-header
+###bt-privacy-overlay
+###btCookieConsentRoot
+###bt__cookie
+###bt_cookie
+###btn-cookie
+###btn-cookie-notice
+###btnOneTrust
+###bts-cookie-disclaimer
+###btz-cookie-popup
+###buko-gdpr-cookie-bar
+###bundle_cookie_bar
+###business-cookies-wrapper
+###button-cookies
+###button_cookies_validated
+###buzzblog-cookie-banner
+###buzzblogpro-cookie-banner
+###bv_cookie-law-info-bar
+###bvin-cookie-box
+###bw-gdpr_toaster
+###bwCookieConsent
+###bw_cookiechoice
+###bw_cookieoverlay
+###bwp-cookies-info
+###bws-cookie-notice
+###bys-cookiemessage
+###bytesize_cookie_explainer
+###bzCookieConsent
+###c-cookie-note
+###c-cookies
+###c-dcx-cookie
+###c-warning-container
+###c00kieMsg
+###c2g_cookie_dialog
+###c4sCookieOneClickModal
+###cAcceptBar
+###cCookieAlert
+###cCookieHeader
+###cCore_cookieNotice
+###cInfo.cInfo
+###cLayer.notice
+###cPolicy
+###cPrompt_bar
+###cPrompt_barSpacer
+###cSpace.cookieSpacer
+###cWarn.cookie
+###cWarn.cookies
+###c_agrem
+###c_cookie
+###ca_banner
+###ca_info_plus
+###cabcookies
+###cadre_alert_cookies
+###cadre_cookie
+###cadvise_bar
+###caja_cookies
+###cajacookies
+###callControll
+###camus-cookie-disclaimer
+###cap_PoliticaCookiesDiv
+###capa-cookie
+###capa-cookies
+###capaAceptaCookies
+###capaAvisoCookie
+###capaAvisoCookies
+###capaAvisoPoliticaCookies
+###capaAvisoPoliticaCookies_superior_mensajes
+###capa_acepta_cookies
+###capa_aviso_cookies
+###capa_cookie
+###capa_cookie_rgpd
+###capa_cookies
+###capa_lopd_cookies
+###capa_pol_cookies
+###capaefectos-cookie
+###carrot-frame-bumperCookies
+###cartelcookielegal
+###caseys-cookie-modal
+###caspian_cookiebar
+###catapult-cookie-bar
+###cb-cookie-holder
+###cb-cookie_consent
+###cb-cookieoverlay
+###cb_cookie_policy_default
+###cb_cookie_policy_popup
+###cb_cookie_policy_popup_shroud
+###cb_settings_alert_extended
+###cbcookies-bottom
+###cbcookies-top
+###cbt-consent-banner-wrapper
+###cc-banner
+###cc-cookie-consent
+###cc-cookie-law
+###cc-cookie-message
+###cc-cookie-notice
+###cc-cookie-overlay
+###cc-cookies
+###cc-modal
+###cc-modal-overlay
+###cc-notification
+###cc-notification-gutter
+###cc-notification-wrapper
+###cc-tag
+###cc.cc_dialog
+###ccMessage
+###cc__modal__container
+###cc__pageBlock
+###cc_bandeau
+###cc_banner
+###cc_banner-wrapper
+###cc_con
+###cc_cookieconsentnotice
+###cc_cookies
+###cc_dsgvo_banner
+###cc_policy
+###cc_privacy_layer
+###cc_zagiel
+###cca-cookies-holder
+###ccbar
+###ccbar_container
+###ccc-notify
+###ccc-overlay
+###ccc-state
+###cccenter-overlay-fixed
+###ccconsent
+###cccwr
+###ccfd-eucookielaw
+###ccfw-page-banner
+###ccgtm-banner
+###ccgtm-wrapper
+###cchinweis
+###cck-box
+###cckBanner
+###ccm-banner-wrap
+###ccm-cookiesDisclosure
+###ccm_notification
+###cconsent
+###cconsent-bar
+###cconsent-pop
+###ccookie_base_stile2
+###ccp-bnr-ck
+###ccp-overlay
+###ccpa-alert
+###ccpa-banner
+###ccpa-bar
+###ccpa-block
+###ccpa-consent-banner
+###ccpa-content
+###ccpa-cookie
+###ccpa-cookie-message
+###ccpa-footer
+###ccpa-notice
+###ccpa-notification-banner
+###ccpa-notification-banner_1-0
+###ccpa-prompt-wrapper
+###ccpa.container
+###ccpa.show
+###ccpa.without-overlay
+###ccpaAlert
+###ccpaBanner
+###ccpaContainer
+###ccpaFooter
+###ccpa_banner
+###ccpa_consent_banner
+###ccs-notification
+###ccservice-cookiesinfo
+###cct-box
+###cctoolRoot
+###cctr-js-modal
+###cd-cookie-bar
+###cd-cookie-bar-settings
+###cdf_annonceCookie
+###cdi_layer
+###cdn-banner-cookies
+###cdweb-cookie-law-info
+###cea-divCookiePolicy
+###celenus-cookies-container
+###center_bandeau_cookie
+###cerekKullanimUyari
+###cerezayarlari
+###ceva_toolbar_cookie
+###cewe-accept-cookies
+###cewe-permanent-info-bar
+###cf-cookie
+###cf-cookie-banner
+###cg-barra-cookies
+###cgCookies
+###cgRodoBackdrop
+###cgRodoModal
+###cg_cookie_bar
+###checkCookie
+###checkCookieBox
+###checkUPcookies
+###checkmkCookieNotice
+###chellocookies-bar
+###cherry-cookie-banner
+###chilly-cookie-accept
+###chromeframe-cookies
+###ci-rodo
+###ciacho
+###ciachoBar
+###ciachoinfo
+###ciar_cookie-accept-cookies
+###ciasteczka
+###ciasteczka-box
+###ciasteczkaInfoContainer
+###ciasteczka_alert
+###ciasteczko
+###ciasteczkowe_okno
+###ciasteczkowy_potwor
+###ciastka
+###ciastka_ajax
+###ciastka_wiadomosc
+###ciastkodiv
+###ciastkodivf
+###ciastoWarstwa
+###cicero_cookie_msg
+###cigi-cookie-banner-container
+###cintillo.cookies
+###ck-accept
+###ck-cookie-statement
+###ck-dialog
+###ckBar
+###ckC
+###ckWarning
+###ckWrap.ckW
+###ck_banner
+###ck_container_cookie
+###ck_dsclr
+###ck_dsclr_v2
+###ck_law
+###ckbr_banner
+###ckch
+###ckcnsnt
+###ckcnstwrp
+###ckew-resum-cookies
+###ckieacpt_container
+###ckieconsent
+###ckieprompt
+###ckkasten
+###ckkasten-container
+###ckm-cookie-cont
+###ckm-cookie-setting
+###ckmcookiescont
+###ckpolicy
+###ckpop.outer
+###cks.cks-v
+###ckwarning
+###cky-consent
+###cky-notification
+###cl-banner
+###cl-consent
+###cl-cookie
+###cl__cookie_alert
+###cl_banner
+###cl_modal
+###classCookie
+###clb-cookie-notice-lgpd
+###clearfy-cookie
+###clever-cookielaw
+###cliSettingsPopup
+###clickskeks-popup-outer-holder
+###clion_cookieBar__container
+###close-cookies
+###closeCookeiInfo
+###closeGdprContent
+###close_cnil
+###cloudmeCookieInfo
+###clr-cookie-bar-container
+###cm-cookie-accept
+###cm-cookie-policy
+###cm-cookie-popin
+###cm-cookie-window
+###cm-cookiebar
+###cm-cookies
+###cm4all-cookie-policy-page
+###cmFluxMessageCookies
+###cm_cookie_notification
+###cmanager-container
+###cmc-tracking-consent-form-step1
+###cmcb-informationLayer
+###cmconsent-message
+###cmp-cookie-notification
+###cmp-faktor-io
+###cmp-faktor-io-brand-consent-notice
+###cmp-faktor-io-parent
+###cmp-overlay.cmpoverlay
+###cmp-widget-wrapper
+###cmpBackdrop
+###cmpBanner
+###cmpMinimalPrompt
+###cmplz-cookiebanner-container
+###cms-cookie-wrapper
+###cms-cookies-consent
+###cms-module-legal-privacy-hint
+###cms-module-tracking-codes-backdrop
+###cms-module-tracking-codes-consent-hint
+###cmsCookieWarning
+###cmsInfoCk
+###cmscookie
+###cmsplus_cookies
+###cmt-wrapper-banner
+###cn-cookie
+###cnContainer
+###cnd-gdpr-container
+###cned_alerte_cookies
+###cnil
+###cnil-advert
+###cnil-banner
+###cnil-cookie
+###cnil-cookie-avertissement
+###cnil-cookie-panel
+###cnil-cookies
+###cnil-layer
+###cnil-msg
+###cnil-privacy-policy
+###cnilBanner
+###cnilCoockies
+###cnilCookie
+###cnilFooter
+###cnilNotification
+###cnilWarning
+###cnilWrapper
+###cnilZone
+###cnil_alert
+###cnil_alert_inner
+###cnil_alert_top
+###cnil_alert_top_inner
+###cnil_bandeau
+###cnil_banner
+###cnil_banner_consent
+###cnil_bar
+###cnil_bar_wrapper
+###cnil_cookie
+###cnil_cookie_message
+###cnil_cookie_optout
+###cnil_cookies
+###cnil_informations
+###cnil_optout
+###cnil_privacy
+###cnilbanner
+###cnilcookie
+###cnilcookies
+###cnildisclaimerLocation
+###cnilid
+###cnill_banner
+###cnilmessage
+###cnotice-footer-content-id
+###cntAlertCookie
+###cnt_cookies
+###co_bandeauCookie
+###co_cookiePolicyContainer
+###cobo_cookie_law
+###cockieSlide
+###codemasters_cookies
+###coe-cookie-disclaimer
+###coe_cookies_container
+###coe_cookies_placeholder
+###cofcookie
+###coiConsentBanner
+###cokPyt
+###cokbar
+###cokie-bar
+###cokieCover
+###cokieMain
+###cokiesinfo
+###colorify-pro-cookie-ify
+###com4cookies-container
+###com_cookie_policy
+###comavoo-ga-cookie-banner
+###common-CookieNotice
+###common-cookielaw-container
+###compliAcceptCookies
+###complianceBanner
+###complianceCookie
+###compliancecookie
+###component-cookie-banner
+###comspace-usercentrics
+###confermaCookie
+###confidentialite_cookie
+###confirm-cookie
+###confirm-cookie-modal
+###confirm-cookieontent
+###confirm-cookies
+###confirmCookie
+###confirmCookiePolicy
+###confirm_cookie
+###confirm_cookie_use
+###confirmedCookieNoteId
+###consensoCookies
+###consenso_cookie
+###consent-agreement
+###consent-banner
+###consent-banner-container
+###consent-banner-fw
+###consent-bar
+###consent-block
+###consent-bump
+###consent-cookie
+###consent-cookies
+###consent-footer
+###consent-layer-modal
+###consent-management-alert
+###consent-manager
+###consent-manager-backdrop
+###consent-manager-overlay
+###consent-mgmt-banner
+###consent-modal-bottombar
+###consent-modal-first
+###consent-modal-fw
+###consent-outer-wrapper
+###consent-popup
+###consent-slide
+###consent-toolbar
+###consent-tracking
+###consent.alert
+###consent.backdrop
+###consent.consent
+###consent.navbar-fixed-bottom
+###consentAccepted
+###consentBanner
+###consentBar
+###consentCookieDiv
+###consentDialog
+###consentFirst
+###consentFooter
+###consentFooterWrap
+###consentOverlay
+###consentPopup
+###consentWrapper
+###consent_assist_container
+###consent_banner
+###consent_blackbar
+###consent_c
+###consent_cookies_popup
+###consent_popup
+###consent_visitor
+###consent_wrapper
+###consentcookie
+###consentform_wrapper
+###consentfriend
+###consentlyr
+###consentpopup
+###contAdviseCookies
+###cont_cookie
+###cont_cookies
+###container-cnil
+###container-cookie
+###container-cookie-notification
+###container-cookies
+###containerCookie
+###containerCookieNotif
+###containerCookieWet
+###containerCookies
+###container_cookie
+###container_cookies
+###container_info_cnil
+###containercookies
+###contcookie
+###contenedor-banner-cookies
+###contenedor-politica-cookies
+###contenedorAceptacionCookies
+###contenedorCookie
+###contenedorCookies
+###contenedorCookies2
+###contenedor_cookies
+###contenedor_cookies_general
+###contenerAlertCookie
+###conteneur-cookie
+###conteneurCookies
+###contenido_capa_cookies
+###contenidoavisocookies
+###contenitoreBannerCookie
+###contenitoreCookie
+###contenitoredisclaimer
+###content > #cookie
+###content-alert-cookie
+###content-cookie
+###content-cookies
+###content-de-hinweis-cookie-richtlinie
+###content-pol-cookies
+###content-ucoc-cookies
+###contentInfoCookie
+###contentRecommendationWidget_PS_COOKIES_BANNER_ESPOT
+###content_cookie
+###contentcookies
+###coo-banner
+###cooMessage
+###coo_note
+###coocie
+###coocies_warning
+###coockie
+###coockie-bar
+###coockie-message
+###coockie-mex
+###coockie-modal
+###coockie-notification
+###coockie-warning
+###coockieAPContainer
+###coockieAlert
+###coockieAlertBox
+###coockieBar
+###coockieInfo
+###coockieMessage
+###coockie_agree
+###coockie_notice
+###coockie_pas
+###coockie_txt
+###coockieagree
+###coockiealert
+###coockiechoice
+###coockiepopup
+###coockies
+###coockies3wmDiv
+###coockies_box
+###coockies_warning
+###coockiewrap
+###cook-cont
+###cookAlert
+###cookEN
+###cookInf
+###cookNTrack
+###cookPol
+###cookPolicy-wrapper
+###cook_aff
+###cook_info
+###cookalert-holder
+###cookboxback
+###cookcon
+###cookcont
+###cookdiv
+###cookeControl_UpdatePanelCookie
+###cookeHint
+###cookemessagehandler
+###cooker_container
+###cooki
+###cooki_accept
+###cookicnil
+###cookidiv
+###cookie--disclaimer
+###cookie--info-wrapper
+###cookie-1
+###cookie-2
+###cookie-accep
+###cookie-accept
+###cookie-accept-alert
+###cookie-accept-banner
+###cookie-accept-bar
+###cookie-accept-box
+###cookie-accept-div
+###cookie-accept-footer
+###cookie-accept-line
+###cookie-accept-modal-div
+###cookie-accept-panel
+###cookie-accept-popup
+###cookie-accept-window
+###cookie-acceptance-banner
+###cookie-acceptance-widget
+###cookie-acceptance-wrapper
+###cookie-acceptation-popup
+###cookie-accepted
+###cookie-acception
+###cookie-accpet
+###cookie-aceptance
+###cookie-ack
+###cookie-acknowledgement
+###cookie-acknowledgement-control
+###cookie-adv
+###cookie-advarsel
+###cookie-advert
+###cookie-advice
+###cookie-advise
+###cookie-advise-panelID
+###cookie-advisory
+###cookie-agree
+###cookie-agree-1
+###cookie-agree-modal
+###cookie-agree-policy
+###cookie-agreement
+###cookie-agreement-box
+###cookie-agreement-info
+###cookie-agreement-wrapper
+###cookie-alert
+###cookie-alert-area
+###cookie-alert-banner
+###cookie-alert-box
+###cookie-alert-cgosbar
+###cookie-alert-cnt
+###cookie-alert-div
+###cookie-alert-message
+###cookie-alert-msg
+###cookie-alert-section
+###cookie-alert-wrapper
+###cookie-alerte
+###cookie-allow
+###cookie-allow-box
+###cookie-announcement
+###cookie-app
+###cookie-append
+###cookie-approval
+###cookie-auth
+###cookie-authorization
+###cookie-aviso
+###cookie-b
+###cookie-backdrop
+###cookie-background
+###cookie-background-disabled
+###cookie-background-overlay
+###cookie-band
+###cookie-bandeau
+###cookie-banner
+###cookie-banner--popup-wrapper
+###cookie-banner-1
+###cookie-banner-backdrop
+###cookie-banner-bespoke
+###cookie-banner-block
+###cookie-banner-center
+###cookie-banner-first-page
+###cookie-banner-host
+###cookie-banner-lgpd
+###cookie-banner-link
+###cookie-banner-message
+###cookie-banner-overlay
+###cookie-banner-panel
+###cookie-banner-root
+###cookie-banner-with-settings
+###cookie-banner-wrap
+###cookie-banner-wrapper
+###cookie-banner.fixed
+###cookie-banner2
+###cookie-banner_flag
+###cookie-bar-2019
+###cookie-bar-ardanta
+###cookie-bar-bottom
+###cookie-bar-fixed
+###cookie-bar-main
+###cookie-bar-message
+###cookie-bar-mob
+###cookie-bar-module
+###cookie-bar-warning
+###cookie-bar-wrapper
+###cookie-bar2
+###cookie-barBe
+###cookie-bar__wrapper
+###cookie-barbody
+###cookie-bg
+###cookie-bg-cover
+###cookie-binding
+###cookie-block
+###cookie-bnr
+###cookie-body
+###cookie-bottom
+###cookie-bottom-bar
+###cookie-bottom-content
+###cookie-bottom-layer
+###cookie-box
+###cookie-box-info
+###cookie-btn
+###cookie-button-banner
+###cookie-card
+###cookie-cc
+###cookie-check-box
+###cookie-checker
+###cookie-choice
+###cookie-choice-info
+###cookie-choices
+###cookie-choices-info
+###cookie-clear-bar
+###cookie-clicker
+###cookie-cnil
+###cookie-cnil-box
+###cookie-cnil-mobile
+###cookie-cnil-mobile-box
+###cookie-cnt
+###cookie-compliance
+###cookie-compliance-block
+###cookie-compliance-bottom
+###cookie-compliance-bottom-overlay
+###cookie-compliance-container
+###cookie-compliance-message
+###cookie-compliance-overlay
+###cookie-compliance-popup
+###cookie-compliance-wrap
+###cookie-compliant
+###cookie-compliant-conte
+###cookie-compliant-fondo
+###cookie-conditions
+###cookie-confirm
+###cookie-confirm-box
+###cookie-confirm-container
+###cookie-confirm-inner
+###cookie-confirmation
+###cookie-confirmation-dialog
+###cookie-cons-banner
+###cookie-consent
+###cookie-consent--js
+###cookie-consent--notice
+###cookie-consent--overlay
+###cookie-consent-actions
+###cookie-consent-banner
+###cookie-consent-bar
+###cookie-consent-bar-outer
+###cookie-consent-block
+###cookie-consent-box
+###cookie-consent-boxes
+###cookie-consent-check
+###cookie-consent-container
+###cookie-consent-content
+###cookie-consent-dialog
+###cookie-consent-dialog-bottom
+###cookie-consent-dialogBox
+###cookie-consent-explicit-modal
+###cookie-consent-fab
+###cookie-consent-form
+###cookie-consent-holder
+###cookie-consent-info
+###cookie-consent-info-wrapper
+###cookie-consent-layer
+###cookie-consent-local
+###cookie-consent-manager
+###cookie-consent-message
+###cookie-consent-new
+###cookie-consent-notice
+###cookie-consent-outer
+###cookie-consent-overlay
+###cookie-consent-popin
+###cookie-consent-popup
+###cookie-consent-root
+###cookie-consent-side-out
+###cookie-consent-tab
+###cookie-consent-target
+###cookie-consent-tool-placeholder
+###cookie-consent-typ9_background
+###cookie-consent-typ9_wrapper
+###cookie-consent-warning
+###cookie-consent-window
+###cookie-consent-wrap
+###cookie-consent-wrapper
+###cookie-consent__banner
+###cookie-consentt
+###cookie-conset-bar
+###cookie-cont
+###cookie-container2
+###cookie-content
+###cookie-content_placeholder
+###cookie-contest
+###cookie-contract
+###cookie-control
+###cookie-control-master
+###cookie-control-prompt
+###cookie-controll
+###cookie-cookie-div
+###cookie-copy
+###cookie-cosent
+###cookie-cube
+###cookie-cutter
+###cookie-deal-bottom
+###cookie-deal-bottom-cookie
+###cookie-declaration
+###cookie-dett
+###cookie-dialog-bar
+###cookie-dialogue
+###cookie-dialogue-div
+###cookie-dim
+###cookie-dimmer
+###cookie-directive
+###cookie-directive-bar
+###cookie-directive-container
+###cookie-directive-note
+###cookie-discalimer
+###cookie-disclaimer
+###cookie-disclaimer-bar
+###cookie-disclaimer-box
+###cookie-disclaimer-footer
+###cookie-disclaimer-modal
+###cookie-disclaimer-new
+###cookie-disclaimer-overlay
+###cookie-disclaimer-popup
+###cookie-disclaimer-region
+###cookie-disclaimer-vue
+###cookie-disclosure
+###cookie-disclosure-container
+###cookie-display
+###cookie-diss
+###cookie-disturber-surrounding
+###cookie-div
+###cookie-drawer
+###cookie-drop
+###cookie-element
+###cookie-erlaubnis
+###cookie-erlaubnis-wrapper
+###cookie-es
+###cookie-eu
+###cookie-eu-compliance-container
+###cookie-eu-law
+###cookie-finder
+###cookie-first
+###cookie-fixed-banner
+###cookie-fixed-layer
+###cookie-floater-wrap
+###cookie-foo
+###cookie-foot
+###cookie-footer
+###cookie-form
+###cookie-full
+###cookie-full-width
+###cookie-fullscreen
+###cookie-gdpr
+###cookie-global-envelope
+###cookie-gm-new
+###cookie-greatis
+###cookie-greeting-strip
+###cookie-handler
+###cookie-head
+###cookie-headband
+###cookie-header
+###cookie-header-container
+###cookie-hint
+###cookie-hint-box
+###cookie-hint-container
+###cookie-hint-layer
+###cookie-hint-message
+###cookie-hint-wrapper
+###cookie-hinweis
+###cookie-hinweis-container
+###cookie-holder
+###cookie-idna
+###cookie-ify
+###cookie-info
+###cookie-info-1
+###cookie-info-bar
+###cookie-info-block
+###cookie-info-box
+###cookie-info-div
+###cookie-info-hermer
+###cookie-info-layer
+###cookie-info-open
+###cookie-info-outer
+###cookie-info-panel
+###cookie-info-pannel
+###cookie-info-rodo
+###cookie-info-text
+###cookie-info-wrapper
+###cookie-infobar
+###cookie-inform
+###cookie-inform-message
+###cookie-information
+###cookie-information-banner
+###cookie-information-bar
+###cookie-information-layer
+###cookie-information-wrapper
+###cookie-informations
+###cookie-informer
+###cookie-inner-wrapper
+###cookie-invite
+###cookie-jar
+###cookie-jar-policy-banner
+###cookie-kontrol
+###cookie-law
+###cookie-law-bar
+###cookie-law-box
+###cookie-law-compliance
+###cookie-law-consent
+###cookie-law-consent-section
+###cookie-law-container
+###cookie-law-container-box
+###cookie-law-dialog
+###cookie-law-div
+###cookie-law-enforcer
+###cookie-law-fix
+###cookie-law-info-again
+###cookie-law-infos
+###cookie-law-message
+###cookie-law-note
+###cookie-law-notif
+###cookie-law-padding
+###cookie-law-popup
+###cookie-law-script
+###cookie-law-uw
+###cookie-law-wrap
+###cookie-law-wrapper
+###cookie-layer
+###cookie-layer-container
+###cookie-layer-overlay
+###cookie-layer-protector
+###cookie-layer-wrapper
+###cookie-legal
+###cookie-legal-info
+###cookie-legal-notice
+###cookie-legals
+###cookie-legislation
+###cookie-lightbox
+###cookie-line
+###cookie-list
+###cookie-manager
+###cookie-manager-dialog
+###cookie-manager-wrapper
+###cookie-mask
+###cookie-melding
+###cookie-melding-container
+###cookie-melding-top
+###cookie-meldung
+###cookie-mess
+###cookie-message
+###cookie-message-area
+###cookie-message-box
+###cookie-message-container
+###cookie-message-fixed
+###cookie-message-overlay
+###cookie-message-panel
+###cookie-message-text
+###cookie-message-wrapper
+###cookie-messsage-container
+###cookie-mini-popup
+###cookie-modal-2022
+###cookie-modal-backdrop
+###cookie-modal-bg
+###cookie-modal-container
+###cookie-modal-overlay
+###cookie-modern-info
+###cookie-modern-overlay
+###cookie-module
+###cookie-monstah
+###cookie-monster
+###cookie-monster-bar
+###cookie-monster-container
+###cookie-monster-root
+###cookie-monster-san
+###cookie-msg
+###cookie-msg-bar
+###cookie-msg-box
+###cookie-msg-wrapper
+###cookie-nag
+###cookie-navbar
+###cookie-nb-msg
+###cookie-new
+###cookie-norm
+###cookie-note
+###cookie-notf
+###cookie-noti
+###cookie-notice
+###cookie-notice-background
+###cookie-notice-banner
+###cookie-notice-bar
+###cookie-notice-blocker
+###cookie-notice-box
+###cookie-notice-container
+###cookie-notice-data-privacy-selector
+###cookie-notice-dialog
+###cookie-notice-header
+###cookie-notice-outer
+###cookie-notice-overlay
+###cookie-notice-platform
+###cookie-notice-popup
+###cookie-notice-section
+###cookie-notice-top
+###cookie-notice-top-banner
+###cookie-notice-uk
+###cookie-notice-v3
+###cookie-notice-wrap
+###cookie-notice-wrapper
+###cookie-notice-wrapper-advanced
+###cookie-notice2
+###cookie-notif
+###cookie-notifcation-banner
+###cookie-notifica
+###cookie-notification
+###cookie-notification-banner
+###cookie-notification-banner-wrapper
+###cookie-notification-bar
+###cookie-notification-block
+###cookie-notification-box
+###cookie-notification-container
+###cookie-notification-content
+###cookie-notification-header
+###cookie-notification-jc
+###cookie-notification-message
+###cookie-notification-overlay
+###cookie-notification-section
+###cookie-notification-wrapper
+###cookie-notificationbar
+###cookie-notifier
+###cookie-notify
+###cookie-notifyPanel
+###cookie-ntc
+###cookie-nyilatkozat
+###cookie-opt-in
+###cookie-opt-in-button
+###cookie-opt-in-footer
+###cookie-opt-out
+###cookie-optin
+###cookie-optout
+###cookie-overlay
+###cookie-overlay-container
+###cookie-overlay-footer
+###cookie-overlay-message
+###cookie-overlay-modal-box
+###cookie-overlay-wrapper
+###cookie-page
+###cookie-panel
+###cookie-panel-banner
+###cookie-panel-dialog
+###cookie-perm-bar
+###cookie-permissie
+###cookie-permission-bar
+###cookie-placeholder
+###cookie-pnl
+###cookie-police
+###cookie-policies
+###cookie-policy
+###cookie-policy-accept-bar
+###cookie-policy-agreement
+###cookie-policy-alert
+###cookie-policy-banner
+###cookie-policy-bar
+###cookie-policy-basic-holder
+###cookie-policy-block
+###cookie-policy-bottom-banner
+###cookie-policy-box
+###cookie-policy-consent
+###cookie-policy-consent-bar
+###cookie-policy-container
+###cookie-policy-dialog
+###cookie-policy-disclaimer
+###cookie-policy-hint
+###cookie-policy-holder
+###cookie-policy-info
+###cookie-policy-layer
+###cookie-policy-message
+###cookie-policy-modal
+###cookie-policy-msg
+###cookie-policy-nooverlay
+###cookie-policy-notice
+###cookie-policy-notification
+###cookie-policy-notification__microservice
+###cookie-policy-overlay-block-container
+###cookie-policy-popin
+###cookie-policy-popup
+###cookie-policy-section
+###cookie-policy-shadow
+###cookie-policy-sticky
+###cookie-policy-strap
+###cookie-policy-warning
+###cookie-policy-wrap
+###cookie-policy-wrapper
+###cookie-politicas.active
+###cookie-politics-popup
+###cookie-polityka
+###cookie-pop
+###cookie-pop-container
+###cookie-pop-up
+###cookie-popin
+###cookie-popin-wrapper
+###cookie-popover
+###cookie-popup-bar
+###cookie-popup-cont
+###cookie-popup-container
+###cookie-popup-content
+###cookie-popup-hintergrund
+###cookie-popup-inner
+###cookie-popup-outer
+###cookie-popup-overlay
+###cookie-popup-with-overlay
+###cookie-popup-wrapper
+###cookie-popup2
+###cookie-popup2-sticky-wrapper
+###cookie-powiadomienie
+###cookie-prefs
+###cookie-prefs-icon
+###cookie-prevent
+###cookie-privacy
+###cookie-privacy-banner
+###cookie-privacy-info
+###cookie-privacy-info-wrapper
+###cookie-privacy-policy
+###cookie-privacy-policy-banner
+###cookie-privacy-popup
+###cookie-privacy-wrapper
+###cookie-prompt
+###cookie-prompt-fixed
+###cookie-prompt-protector
+###cookie-pup
+###cookie-pupup-wrapper
+###cookie-question
+###cookie-question-banner
+###cookie-ram
+###cookie-region
+###cookie-regle
+###cookie-request
+###cookie-required
+###cookie-restriction
+###cookie-retargeting-module
+###cookie-ribbon
+###cookie-ribbon-1
+###cookie-richtlinie
+###cookie-richtlinie-notification
+###cookie-rodo
+###cookie-row
+###cookie-rules-top
+###cookie-screen
+###cookie-section
+###cookie-selector
+###cookie-setting-section
+###cookie-settings-alert
+###cookie-settings-cont
+###cookie-settings-container
+###cookie-settings-dlg
+###cookie-settings-layer
+###cookie-settings-wrapper
+###cookie-settings.cookie-settings
+###cookie-shadow
+###cookie-site-container
+###cookie-site-container-box
+###cookie-slide
+###cookie-slider
+###cookie-sliding-popup
+###cookie-space
+###cookie-spacer
+###cookie-statement
+###cookie-status-widget-holder
+###cookie-stick2
+###cookie-sticky
+###cookie-sticky-bar
+###cookie-store-section
+###cookie-strapline
+###cookie-strip
+###cookie-table
+###cookie-tajekoztatas
+###cookie-terms
+###cookie-text
+###cookie-text-banner
+###cookie-timtul-bot
+###cookie-tips
+###cookie-tissue
+###cookie-toast
+###cookie-toast-container
+###cookie-toolbar
+###cookie-toolkit
+###cookie-toolkit-wrap
+###cookie-tooltip
+###cookie-top-bar
+###cookie-topbar
+###cookie-topsticky
+###cookie-tunnel
+###cookie-ue
+###cookie-uni-kl
+###cookie-usage-alert
+###cookie-usage-notice
+###cookie-usage-notification
+###cookie-usage-panel
+###cookie-use-notice-wrapper
+###cookie-uzenet
+###cookie-varsel
+###cookie-view
+###cookie-vue-app
+###cookie-wall-wrapper
+###cookie-warn
+###cookie-warning
+###cookie-warning-app
+###cookie-warning-backdrop
+###cookie-warning-banner
+###cookie-warning-bar
+###cookie-warning-box
+###cookie-warning-container
+###cookie-warning-div
+###cookie-warning-gdpr
+###cookie-warning-is-stupid
+###cookie-warning-padding
+###cookie-warning-panel
+###cookie-warning-plugin
+###cookie-well
+###cookie-wet
+###cookie-widget
+###cookie-widget-confirm
+###cookie-window
+###cookie-wrap
+###cookie-wrapper
+###cookie-wrapper-container
+###cookie-ym
+###cookie-zone
+###cookie.active
+###cookie.alert
+###cookie.alert-warning
+###cookie.align-center
+###cookie.col-12
+###cookie.cookie
+###cookie.cookies
+###cookie.fixed
+###cookie.fixed-bottom
+###cookie.ng-scope
+###cookie.notice
+###cookie.p-4
+###cookie.rgpd
+###cookie.showme
+###cookie.view
+###cookie.w-100
+###cookie1
+###cookie18year
+###cookie2
+###cookie29
+###cookie2Meldung
+###cookie3arhMsg
+###cookie6876
+###cookieAcc
+###cookieAcceptBanner
+###cookieAcceptBar
+###cookieAcceptBox
+###cookieAcceptContainer
+###cookieAcceptContent
+###cookieAcceptInfo
+###cookieAcceptMessage
+###cookieAcceptModal___BV_modal_outer_
+###cookieAcceptOverlay
+###cookieAcceptPos
+###cookieAcceptWrapper
+###cookieAcceptance
+###cookieAcceptanceContainer
+###cookieAcceptation
+###cookieAcceptingContainer
+###cookieAccessFrame
+###cookieAck
+###cookieAcknowledge
+###cookieAcknowledgement
+###cookieAcknowledgementSpacer
+###cookieActiveId
+###cookieAd
+###cookieAdv
+###cookieAdvertising
+###cookieAdvice
+###cookieAdvise
+###cookieAdviseContainer
+###cookieAdvisor
+###cookieAgeCheck
+###cookieAgree
+###cookieAgreeBar
+###cookieAgreeForm
+###cookieAgreement
+###cookieAgreementBar
+###cookieAgreementBox
+###cookieAgreementContent
+###cookieAlarm
+###cookieAlarmBar
+###cookieAlert
+###cookieAlertBanner
+###cookieAlertBar
+###cookieAlertBig
+###cookieAlertBox
+###cookieAlertBoxID
+###cookieAlertCnt
+###cookieAlertContainer
+###cookieAlertLayer
+###cookieAlertMessage
+###cookieAlertWrap
+###cookieAlertWrapper
+###cookieAlert_popper
+###cookieAlerte
+###cookieAllow
+###cookieAllowWrap
+###cookieAnnoyer
+###cookieAnzeige
+###cookieArea
+###cookieAssistant
+###cookieAuth
+###cookieBAR
+###cookieBG
+###cookieBackdrop
+###cookieBackground
+###cookieBalk
+###cookieBan
+###cookieBandeau
+###cookieBandeauConsentement
+###cookieBanner
+###cookieBanner-gdpr
+###cookieBanner-main
+###cookieBannerBG
+###cookieBannerContainer
+###cookieBannerContent
+###cookieBannerContent_new
+###cookieBannerD
+###cookieBannerDBPrivacyNotice
+###cookieBannerDiv
+###cookieBannerGTV
+###cookieBannerInfo
+###cookieBannerMain
+###cookieBannerModal
+###cookieBannerOverlay
+###cookieBannerWrap
+###cookieBannerWrapper
+###cookieBanner\.banner
+###cookieBar
+###cookieBarBC
+###cookieBarContainer
+###cookieBarRGPDOverlay
+###cookieBarRGPDPop
+###cookieBarVisible
+###cookieBarWrapper
+###cookieBck
+###cookieBgOverlay
+###cookieBlackout
+###cookieBlock
+###cookieBlock2
+###cookieBlocker
+###cookieBnr
+###cookieBox
+###cookieBoxContainer
+###cookieBoxOverlay
+###cookieBoxWrapper
+###cookieBs
+###cookieC
+###cookieCDkeys
+###cookieCNIL
+###cookieCT
+###cookieCard
+###cookieCardBg
+###cookieCheck
+###cookieCheck-app
+###cookieChecker
+###cookieCheckerBanner
+###cookieChoice
+###cookieChoiceBanner
+###cookieChoiceBar
+###cookieChoiceBdrop
+###cookieChoiceInfo
+###cookieChoiceInfoAccept
+###cookieChoiceInfo_general
+###cookieChoiceModalOverlay
+###cookieChoiceNote
+###cookieChoicesID
+###cookieChooser
+###cookieClicker
+###cookieCnil
+###cookieCompliance
+###cookieComplianceBanner
+###cookieComplianceBox
+###cookieComplianceMessage
+###cookieComplianceNotice
+###cookieCompliancePolicyBox
+###cookieCompliancy
+###cookieCompliancyModal
+###cookieConatiner
+###cookieConcent
+###cookieConf
+###cookieConfigForm
+###cookieConfirm
+###cookieConfirmDiv
+###cookieConfirmation
+###cookieConfirmationBar
+###cookieConfirmationContainer
+###cookieConsens
+###cookieConsent
+###cookieConsentAlert
+###cookieConsentApp
+###cookieConsentBackdrop
+###cookieConsentBackground
+###cookieConsentBanner
+###cookieConsentBannerContainer
+###cookieConsentBar
+###cookieConsentBlock
+###cookieConsentBlok
+###cookieConsentBox
+###cookieConsentContainer
+###cookieConsentDialog
+###cookieConsentDiv
+###cookieConsentElId
+###cookieConsentForm
+###cookieConsentHolder
+###cookieConsentInitialBackdrop
+###cookieConsentMessage
+###cookieConsentMsg
+###cookieConsentNote
+###cookieConsentNotice
+###cookieConsentOverlay
+###cookieConsentPanel
+###cookieConsentPanelUp
+###cookieConsentPopup
+###cookieConsentPrompt
+###cookieConsentWindow
+###cookieConsentWrap
+###cookieConsentWrapper
+###cookieConsentWrapperConHolder
+###cookieConsent_Div
+###cookieCont
+###cookieContainer
+###cookieContener
+###cookieContent
+###cookieContraption
+###cookieControl
+###cookieControlWrapper
+###cookieControl_panelico
+###cookieController
+###cookieCookieBar
+###cookieCopy
+###cookieCorner
+###cookieCta
+###cookieDataProtection
+###cookieDeclarationWrapper
+###cookieDialog
+###cookieDialogCtnr
+###cookieDialogue
+###cookieDingsbums
+###cookieDirWrap
+###cookieDirective
+###cookieDisc
+###cookieDisclaimer
+###cookieDisclaimerBanner
+###cookieDisclaimerBox
+###cookieDisclaimerContainer
+###cookieDisclaimerDiv
+###cookieDisclaimerInfo
+###cookieDisclaimerNotif
+###cookieDisclaimerWrapper
+###cookieDisclamer
+###cookieDismissContent
+###cookieDisplay
+###cookieDisplayForm
+###cookieDiv
+###cookieDiv-Alert
+###cookieDivBackground
+###cookieDivContent
+###cookieDivCover
+###cookieDlg
+###cookieDlg1
+###cookieDough
+###cookieDrop
+###cookieDropDown
+###cookieEC
+###cookieEU
+###cookieElement
+###cookieErrorMessageDiv
+###cookieEu
+###cookieEuRuleBar
+###cookieFixed
+###cookieFooter
+###cookieFoundry
+###cookieFrame
+###cookieGDPRpopup
+###cookieGdpr
+###cookieGradient
+###cookieGuardMsg
+###cookieHTML
+###cookieHead
+###cookieHeader
+###cookieHint
+###cookieHintExt
+###cookieHintModalGeneral
+###cookieHint_container
+###cookieHinweis
+###cookieHolder
+###cookieHolster
+###cookieID
+###cookieIW
+###cookieIdiotLaw
+###cookieIdioticPolicyInfo
+###cookieIframe
+###cookieInfCont
+###cookieInfo
+###cookieInfoAcceptContainer
+###cookieInfoAry
+###cookieInfoBanner
+###cookieInfoBar
+###cookieInfoBottom
+###cookieInfoBox
+###cookieInfoContainer
+###cookieInfoContent
+###cookieInfoDesign_1
+###cookieInfoDialog
+###cookieInfoDiv
+###cookieInfoFooter
+###cookieInfoHolder
+###cookieInfoLayer
+###cookieInfoMain
+###cookieInfoMax
+###cookieInfoMessage
+###cookieInfoMsgOuter
+###cookieInfoMsgWrapper
+###cookieInfoNew
+###cookieInfoOrange
+###cookieInfoOutline
+###cookieInfoOverlay
+###cookieInfoOverlayBg
+###cookieInfoPanel
+###cookieInfoWindow
+###cookieInfoWrapper
+###cookieInfo_firstTime
+###cookieInfobox
+###cookieInformacja
+###cookieInformation
+###cookieInformationBoxWrapper
+###cookieInformationPopup
+###cookieInformativaBreve
+###cookieInformer
+###cookieInformerBooklet
+###cookieJSdiv
+###cookieJar
+###cookieKontener
+###cookieLY
+###cookieLab
+###cookieLaw
+###cookieLaw2015
+###cookieLawAcknowledgmentDiv
+###cookieLawAlert
+###cookieLawBanner
+###cookieLawBannerId
+###cookieLawBar
+###cookieLawBlock
+###cookieLawBoo
+###cookieLawBox
+###cookieLawComplianceMessage
+###cookieLawContainer
+###cookieLawDisclaimer
+###cookieLawHeader
+###cookieLawInfo
+###cookieLawInfoBreve
+###cookieLawInformation
+###cookieLawMessage
+###cookieLawPanel
+###cookieLawPnl
+###cookieLawPopup
+###cookieLawPopupContainer
+###cookieLawText
+###cookieLaw_banner
+###cookieLaw_cAlert
+###cookieLayer
+###cookieLayerMain
+###cookieLayout
+###cookieLegal
+###cookieLegislationInfo
+###cookieLevelIntercept
+###cookieLicense
+###cookieLine
+###cookieLoad
+###cookieMainPanel
+###cookieManagement
+###cookieMandate
+###cookieMelding
+###cookieMeldung
+###cookieMens
+###cookieMessage
+###cookieMessageArea
+###cookieMessageBanner
+###cookieMessageBar
+###cookieMessageContainer
+###cookieMessageDisplayDIV
+###cookieMessageDiv
+###cookieMessageHolder
+###cookieMessageModul
+###cookieMessageNotifyBanner
+###cookieMessageOuter
+###cookieMessageWrapper
+###cookieMessagelightbox
+###cookieMessagesContainer
+###cookieMgn
+###cookieModalBottom
+###cookieModalCenter
+###cookieModalLive
+###cookieModalOverlay
+###cookieModule
+###cookieMon
+###cookieMonster
+###cookieMonsterWrapper
+###cookieMsg
+###cookieMsg2
+###cookieMsgAlert
+###cookieMsgBlock
+###cookieMsgDiv
+###cookieMsgUser
+###cookieMsgWrapper
+###cookieMsgWrapper2
+###cookieNonsense
+###cookieNotSet
+###cookieNoteBox
+###cookieNoteWrap
+###cookieNotes
+###cookieNotf
+###cookieNotice
+###cookieNoticeAlert
+###cookieNoticeBanner
+###cookieNoticeContainer
+###cookieNoticeContent
+###cookieNoticeDialog
+###cookieNoticeElement
+###cookieNoticeMessage
+###cookieNoticePopup
+###cookieNoticePro
+###cookieNoticeUser
+###cookieNotice_container
+###cookieNotice_other
+###cookieNotif
+###cookieNotifaction
+###cookieNotification
+###cookieNotificationBanner
+###cookieNotificationBannerWrapper
+###cookieNotificationBar
+###cookieNotificationBootstrap
+###cookieNotificationContainer
+###cookieNotificationDialog
+###cookieNotificationLayer
+###cookieNotificationMain
+###cookieNotificationScreen
+###cookieNotifier
+###cookieNotifierWrapper
+###cookieNotify
+###cookieNotifyWrapper
+###cookieOK
+###cookieOk
+###cookieOkDiv
+###cookieOpacity
+###cookieOptIn
+###cookieOptInBarWrapper
+###cookieOptionsFooter
+###cookieOut
+###cookieOuter
+###cookieOuterContainer
+###cookieOverlay
+###cookieOverlayNotify
+###cookiePK
+###cookiePOPup
+###cookiePane
+###cookiePanel
+###cookieParag
+###cookieParisien
+###cookiePermission
+###cookiePermissionBar
+###cookiePermissionDialog
+###cookiePlaceholder
+###cookiePlugin
+###cookiePol
+###cookiePoliciesMessage
+###cookiePolicy-layer
+###cookiePolicyAgreement
+###cookiePolicyAlert
+###cookiePolicyAlertBox
+###cookiePolicyBackground
+###cookiePolicyBanner
+###cookiePolicyBar
+###cookiePolicyBar-overlay
+###cookiePolicyBlock
+###cookiePolicyBox
+###cookiePolicyContainer
+###cookiePolicyDialog
+###cookiePolicyDiv
+###cookiePolicyDrawer
+###cookiePolicyId
+###cookiePolicyInfo
+###cookiePolicyLable
+###cookiePolicyModal
+###cookiePolicyModal-NL
+###cookiePolicyNote
+###cookiePolicyNotice
+###cookiePolicyNoticeBox
+###cookiePolicyNotification
+###cookiePolicyOverlay
+###cookiePolicyOverlayRoot
+###cookiePolicyPopUp
+###cookiePolicyPopup
+###cookiePolicyPopupHTML
+###cookiePolicyText
+###cookiePolicyTooltip
+###cookiePolicyWarn
+###cookiePolicyWrapper
+###cookiePolicyZone
+###cookiePolicy_barra
+###cookiePolicy_cookie_advice
+###cookiePolicyw
+###cookiePolisyInfo
+###cookiePolitics
+###cookiePoolicy
+###cookiePop
+###cookiePopUp
+###cookiePopUpId
+###cookiePopUp_termo
+###cookiePopin
+###cookiePopupBG
+###cookiePopupBar
+###cookiePopupContainer
+###cookiePopupContent
+###cookiePopupForm
+###cookiePopupHolder
+###cookiePopupInfo
+###cookiePopupPanelClient
+###cookiePopupTarget
+###cookiePopupWrapper
+###cookiePrefIntro
+###cookiePrefIntro_underlay
+###cookiePreferencePanel
+###cookiePreferences_front-end
+###cookiePrev
+###cookiePrivacy
+###cookiePrivacyDeclaration
+###cookiePrivacyInfo
+###cookiePrivacyNotice
+###cookiePrivacyPolicy
+###cookiePrivacyPopup
+###cookiePrivacyWrapper
+###cookiePrivacy_header
+###cookiePrompt
+###cookiePromptWrapper
+###cookieQ
+###cookieQuestion
+###cookieRegulation
+###cookieRequestBox
+###cookieRequestLayer
+###cookieRichtlinie
+###cookieRules
+###cookieScreen
+###cookieScriptId
+###cookieSec
+###cookieSection
+###cookieSetting
+###cookieSettingsDialog
+###cookieSettingsOverlayToggle
+###cookieShortAlert
+###cookieShortInfoFooter
+###cookieSign
+###cookieSignpost
+###cookieSimpleHint
+###cookieSliderDiv
+###cookieSoftOptIn
+###cookieSpace
+###cookieSpan
+###cookieSplash
+###cookieStandar
+###cookieStartMessage
+###cookieState
+###cookieStatement
+###cookieStatementWrapper
+###cookieStatus
+###cookieStickyPanel
+###cookieStrip
+###cookieSuhlasFooter
+###cookieSupport
+###cookieTab
+###cookieTd
+###cookieTeaser
+###cookieTekst
+###cookieTerms
+###cookieTest
+###cookieTime
+###cookieTip
+###cookieTips
+###cookieTjek
+###cookieToast
+###cookieToaster
+###cookieToolWrapper
+###cookieToolbar
+###cookieTooltip
+###cookieTopCOntainer
+###cookieUBar
+###cookieUIContainer
+###cookieUsage
+###cookieUsageBanner
+###cookieUsageHint
+###cookieUsageMessage
+###cookieUsageNotification
+###cookieUsagePopIn
+###cookieUsagePopup
+###cookieUse
+###cookieUseAgreement
+###cookieUseInformation
+###cookieUseWarning
+###cookieUserAuthorisationBar
+###cookieUsingNotification
+###cookieValidatorMain
+###cookieVerificationBar
+###cookieView
+###cookieWall
+###cookieWallBackground
+###cookieWallBar
+###cookieWallModal
+###cookieWallOverlay
+###cookieWarn
+###cookieWarnBox
+###cookieWarnLayer
+###cookieWarning
+###cookieWarning-Pop
+###cookieWarningBox
+###cookieWarningContainer
+###cookieWarningDiv
+###cookieWarningLayer
+###cookieWarningLayout
+###cookieWarningMessage
+###cookieWarningMessageNew
+###cookieWarningModal
+###cookieWarningPanel
+###cookieWarningR
+###cookieWarningTable
+###cookieWarningText
+###cookieWarningWrapper
+###cookieWarnings
+###cookieWetgeving
+###cookieWidget
+###cookieWin
+###cookieWind
+###cookieWindowContainer
+###cookieWrap
+###cookieWrap0
+###cookieWrapper
+###cookieWrapperWithSettings
+###cookieWrp
+###cookieZone
+###cookie_
+###cookie_1
+###cookie_2
+###cookie__Wrapper
+###cookie__agreement__wrapper
+###cookie__alert
+###cookie__banner
+###cookie__bar
+###cookie__box
+###cookie__cookie
+###cookie__message
+###cookie__monster
+###cookie__panel-help
+###cookie__popup1
+###cookie__wrapper
+###cookie_acc_wrap
+###cookie_accept
+###cookie_accept_alert
+###cookie_accept_bar
+###cookie_accept_box
+###cookie_accept_cont
+###cookie_accept_container
+###cookie_accept_msg_block
+###cookie_accept_section
+###cookie_acceptation
+###cookie_acceptation_conteneur
+###cookie_accepter_div
+###cookie_acception
+###cookie_access_message_holder
+###cookie_adv
+###cookie_advice
+###cookie_advise
+###cookie_agree
+###cookie_agreement
+###cookie_alert
+###cookie_alert2
+###cookie_alert_bar
+###cookie_alert_box
+###cookie_alert_container
+###cookie_alert_content
+###cookie_alert_desktop
+###cookie_alert_div
+###cookie_alert_mobile
+###cookie_allow_fix
+###cookie_announce
+###cookie_approval
+###cookie_approve
+###cookie_approve_banner
+###cookie_approved
+###cookie_ask
+###cookie_assets
+###cookie_assistant
+###cookie_assistant_container
+###cookie_assistant_wrapper
+###cookie_auth
+###cookie_aviso
+###cookie_aviso_box
+###cookie_b
+###cookie_background
+###cookie_balk_top
+###cookie_bandeau
+###cookie_baner
+###cookie_banner-wrapper
+###cookie_banner_container
+###cookie_banner_cookie_info_bar
+###cookie_banner_footer
+###cookie_bar
+###cookie_bar_big_container
+###cookie_bar_container
+###cookie_bar_edit_button
+###cookie_bar_top
+###cookie_bar_v2
+###cookie_barre
+###cookie_belt
+###cookie_bg
+###cookie_bloc
+###cookie_block
+###cookie_bnr
+###cookie_bottom
+###cookie_bottom_bar
+###cookie_box
+###cookie_box_bar
+###cookie_box_header
+###cookie_box_header_message
+###cookie_box_info
+###cookie_box_overlay
+###cookie_caution
+###cookie_change
+###cookie_check
+###cookie_check_modal
+###cookie_check_wrapper
+###cookie_choice
+###cookie_choices
+###cookie_clicker
+###cookie_cnil
+###cookie_cnil_box
+###cookie_cointer
+###cookie_compliance
+###cookie_con
+###cookie_conf_banner
+###cookie_confirm
+###cookie_confirm_dv
+###cookie_confirmation
+###cookie_confirmation_box
+###cookie_consent
+###cookie_consent4435
+###cookie_consent_banner
+###cookie_consent_blocker
+###cookie_consent_box
+###cookie_consent_container
+###cookie_consent_cookiebar
+###cookie_consent_div
+###cookie_consent_header
+###cookie_consent_message
+###cookie_consent_notification
+###cookie_consent_outer
+###cookie_consent_overlay
+###cookie_consent_playzo
+###cookie_consent_popup
+###cookie_consent_wall
+###cookie_cont
+###cookie_container
+###cookie_content
+###cookie_control_popup
+###cookie_controller
+###cookie_cookie
+###cookie_custom
+###cookie_datenschutz
+###cookie_decline
+###cookie_desktop
+###cookie_dialog
+###cookie_dialog_wrap
+###cookie_directive
+###cookie_directive_container
+###cookie_disclaimer
+###cookie_disclaimer_container
+###cookie_disclaimer_wrapper
+###cookie_div
+###cookie_drop_container
+###cookie_eu
+###cookie_eu_bar
+###cookie_eu_recht
+###cookie_exit_form
+###cookie_exp
+###cookie_fascia
+###cookie_figyelmeztetes
+###cookie_footer
+###cookie_frame
+###cookie_gdpr
+###cookie_gld_cookie_flag
+###cookie_guidaservizi
+###cookie_guidline_box
+###cookie_hdr_showagain
+###cookie_header
+###cookie_header_top
+###cookie_headertop
+###cookie_hint
+###cookie_hinweis
+###cookie_holder
+###cookie_iagree
+###cookie_id
+###cookie_ilmoitus
+###cookie_ilmoitus_2020
+###cookie_ilmoitus_2020_overlay
+###cookie_info
+###cookie_info-bar
+###cookie_info_agree
+###cookie_info_area
+###cookie_info_bar
+###cookie_info_block
+###cookie_info_box
+###cookie_info_breve
+###cookie_info_container
+###cookie_info_div
+###cookie_info_message
+###cookie_info_response
+###cookie_info_startpage
+###cookie_info_topNav
+###cookie_info_txt
+###cookie_info_window
+###cookie_info_wrapper
+###cookie_infobox
+###cookie_inform
+###cookie_information
+###cookie_information_block
+###cookie_information_box
+###cookie_information_overlay
+###cookie_informativa_esd
+###cookie_informative
+###cookie_informer
+###cookie_inject
+###cookie_inline_form
+###cookie_it_bar_wrapper
+###cookie_jar_container
+###cookie_keuzes
+###cookie_kezeles
+###cookie_law
+###cookie_law-banner
+###cookie_law_advice
+###cookie_law_banner
+###cookie_law_box
+###cookie_law_compliance
+###cookie_law_container
+###cookie_law_dialog2
+###cookie_law_id
+###cookie_law_info
+###cookie_law_informations
+###cookie_law_message
+###cookie_law_mobile
+###cookie_law_msg
+###cookie_law_notice
+###cookie_law_notice_container
+###cookie_law_notification
+###cookie_law_warning
+###cookie_layer
+###cookie_layer_wrapper
+###cookie_legal
+###cookie_legal_display
+###cookie_leiste
+###cookie_level0
+###cookie_level1
+###cookie_lightbox
+###cookie_main_block
+###cookie_man
+###cookie_manage_container
+###cookie_management_header
+###cookie_manager_body_overlay
+###cookie_mask
+###cookie_melding
+###cookie_mensagem
+###cookie_mess
+###cookie_message
+###cookie_message_container
+###cookie_message_holder
+###cookie_message_website_policy
+###cookie_modal
+###cookie_modal_container
+###cookie_modal_div
+###cookie_modal_wrapper
+###cookie_module
+###cookie_monster
+###cookie_ms
+###cookie_msg
+###cookie_msg_2
+###cookie_msg_container
+###cookie_msn
+###cookie_nav
+###cookie_navbar
+###cookie_note
+###cookie_note_div
+###cookie_note_voll
+###cookie_noti
+###cookie_notice
+###cookie_notice_bar
+###cookie_notice_desktop
+###cookie_notice_wrapper
+###cookie_notices
+###cookie_notif
+###cookie_notification
+###cookie_notification_bar
+###cookie_notification_container
+###cookie_notification_wrap
+###cookie_notifier
+###cookie_notify
+###cookie_ok
+###cookie_ok1
+###cookie_opt
+###cookie_opt_in
+###cookie_opt_in_anchor
+###cookie_opt_in_container
+###cookie_optin
+###cookie_optin_back
+###cookie_optin_layer
+###cookie_overlay
+###cookie_panel
+###cookie_panel_2018
+###cookie_parent
+###cookie_permission
+###cookie_permission_banner
+###cookie_permissions_alert
+###cookie_permit
+###cookie_pol
+###cookie_policies
+###cookie_policy
+###cookie_policy-0
+###cookie_policy_accept
+###cookie_policy_alert
+###cookie_policy_banner
+###cookie_policy_banner_wrapper
+###cookie_policy_bar
+###cookie_policy_box
+###cookie_policy_check
+###cookie_policy_container
+###cookie_policy_div
+###cookie_policy_holder
+###cookie_policy_layer
+###cookie_policy_message
+###cookie_policy_message_container
+###cookie_policy_modal
+###cookie_policy_msg
+###cookie_policy_notice
+###cookie_policy_overlay
+###cookie_policy_popup
+###cookie_policy_pu
+###cookie_policy_rgpd
+###cookie_politics
+###cookie_politics_overlay
+###cookie_pop
+###cookie_popin_itsap_home
+###cookie_popin_itsap_overlay
+###cookie_popover_container
+###cookie_popup
+###cookie_popup_alert
+###cookie_popup_background
+###cookie_popup_bg
+###cookie_popup_container
+###cookie_popup_overlay
+###cookie_popup_wrapper
+###cookie_preferences_banner_root
+###cookie_prefs_bumper
+###cookie_priv_div
+###cookie_privacy
+###cookie_privacy_bar
+###cookie_privacy_box
+###cookie_privacy_holder
+###cookie_privacy_info_bar
+###cookie_privacy_popup
+###cookie_private
+###cookie_prompt
+###cookie_pupup_confirm
+###cookie_question
+###cookie_revoke
+###cookie_ribbon
+###cookie_richtlinie
+###cookie_script
+###cookie_section
+###cookie_set_accept
+###cookie_settings_modal
+###cookie_short
+###cookie_short_info
+###cookie_shout
+###cookie_show_info
+###cookie_shown
+###cookie_souhlas_div
+###cookie_statement
+###cookie_str
+###cookie_strip
+###cookie_stuff
+###cookie_tab_main
+###cookie_tajekoztato
+###cookie_terms
+###cookie_terms_div
+###cookie_text
+###cookie_text_header
+###cookie_tool_large
+###cookie_tool_small
+###cookie_toolbar
+###cookie_top
+###cookie_top_info
+###cookie_topdiv
+###cookie_txt
+###cookie_upper_div
+###cookie_usage
+###cookie_usage_banner
+###cookie_usage_container_id
+###cookie_ustawa
+###cookie_valid
+###cookie_warn
+###cookie_warn_text
+###cookie_warning
+###cookie_warning_area
+###cookie_warning_container
+###cookie_warning_content
+###cookie_warning_div
+###cookie_warning_notification_NOTIFICATION
+###cookie_warning_outer_wrapper
+###cookie_warning_overlay
+###cookie_warning_underlay
+###cookie_warnung
+###cookie_widget
+###cookie_wrap
+###cookie_wrapper
+###cookie_wrapper2
+###cookie_yes_info
+###cookie_zustimmung
+###cookiea_header
+###cookieabfrage
+###cookieaccept
+###cookieacceptance
+###cookieaccepter
+###cookieacceptlayer
+###cookieadd
+###cookieadv
+###cookieadvice
+###cookieadvise
+###cookieagree
+###cookiealarm
+###cookiealert
+###cookiealert-ibe
+###cookiealertMsg
+###cookiealert_container
+###cookiealert_content
+###cookiealertrow
+###cookiealertwrap
+###cookieallowbar
+###cookiearea
+###cookieask
+###cookieaviso
+###cookieavisoini
+###cookieb-banner
+###cookieback
+###cookiebackground
+###cookiebalk
+###cookiebalk-wrap
+###cookiebandeau
+###cookiebanner
+###cookiebanner-mask
+###cookiebanner-overlay
+###cookiebanner-root
+###cookiebanner-wrapper
+###cookiebanner-wrapper-id
+###cookiebannerAH
+###cookiebannerOverlay
+###cookiebanner_con
+###cookiebanner_wrapper
+###cookiebannercontainer
+###cookiebannerdiv
+###cookiebar
+###cookiebar--container
+###cookiebar-1
+###cookiebar-container
+###cookiebar-cookiepolicy
+###cookiebar-perm
+###cookiebar-root
+###cookiebar-wrap
+###cookiebar-wrapper
+###cookiebar18
+###cookiebarBox
+###cookiebarModal
+###cookiebar_container
+###cookiebar_content
+###cookiebar_playnation
+###cookiebar_wrapper
+###cookiebarcnt
+###cookiebarcontainer
+###cookiebarra
+###cookiebericht
+###cookiebg
+###cookieblack
+###cookieblock
+###cookieblokk
+###cookiebnr
+###cookiebot
+###cookiebottom
+###cookiebottombar
+###cookiebottomgradient
+###cookiebox
+###cookiebox-bg
+###cookiebox-wrapper
+###cookieboxM
+###cookiebuttons
+###cookiecheck
+###cookiechecker
+###cookiechoice
+###cookiechoiceinfo
+###cookieclaim_info_bar
+###cookieclaim_info_box
+###cookieclaim_overlay
+###cookiecnil
+###cookiecompliance
+###cookiecomplience
+###cookieconfirm
+###cookiecons
+###cookieconsent
+###cookieconsent-backlayer
+###cookieconsent-banner
+###cookieconsent-bg
+###cookieconsent-container
+###cookieconsent-container--simple
+###cookieconsent-dialog
+###cookieconsent-explicit-overlay
+###cookieconsent-explicit-popup
+###cookieconsent-frame
+###cookieconsent-implicit-popup
+###cookieconsent-overlay
+###cookieconsent-popup
+###cookieconsent-sticky
+###cookieconsent_banner
+###cookieconsent_bar
+###cookieconsent_container
+###cookieconsent_dialog
+###cookieconsent_text
+###cookieconsent_toast
+###cookieconsentbar
+###cookieconsentbox
+###cookieconsentformbox
+###cookieconsentgreyspace
+###cookieconsentmodal
+###cookieconsentpopup
+###cookiecontainer
+###cookiecontent
+###cookiecontrol
+###cookiecontrol_notice
+###cookiecrap
+###cookiedeclaration
+###cookiedesktop
+###cookiedetection
+###cookiedialog
+###cookiedialogbox
+###cookiedings
+###cookiedingsbums
+###cookiedirectiveButtonContainer
+###cookiedisallow-wrap
+###cookiedisallowoverlay
+###cookiedisc
+###cookiedisclaimer
+###cookiedisclaimer2022
+###cookiedisclosure
+###cookiedismiss
+###cookiediv
+###cookiee_alert
+###cookiefascia
+###cookiefeld
+###cookiefenster
+###cookiefloat
+###cookiefloater
+###cookiefmt
+###cookiefoot
+###cookiefooter
+###cookieform
+###cookieformdiv
+###cookiefrage
+###cookiefy_bar
+###cookiegap
+###cookiegdpr
+###cookieglobal
+###cookieguideline-wrapper
+###cookieheader
+###cookiehint
+###cookiehinw
+###cookiehinweis > .zentriert
+###cookiehinweis-wrapper
+###cookiehinweis.alert
+###cookiehinweis.container-fluid
+###cookiehinweis.js-aktiv
+###cookiehinweis.ym-grid
+###cookiehinweisbox_wrapper
+###cookiehinweisboxback
+###cookiehinweisdiv
+###cookieholder
+###cookiehuhu
+###cookieid.cookies
+###cookieify
+###cookieinfo
+###cookieinfo--container
+###cookieinfo-container
+###cookieinfo1
+###cookieinfo2
+###cookieinfoBlack
+###cookieinfo_txt
+###cookieinfo_xcookie
+###cookieinfobar
+###cookieinfobox
+###cookieinfobox-box
+###cookieinformation
+###cookieinformationbar
+###cookieinfotext
+###cookiejar
+###cookiejarconsentfullwidth
+###cookiekezeles
+###cookielaura
+###cookielaw
+###cookielaw-banner
+###cookielaw-bar
+###cookielaw-box
+###cookielaw-container
+###cookielaw-layer
+###cookielaw-popup-wrapper
+###cookielaw-view-holder
+###cookielaw-wrap
+###cookielaw2
+###cookielaw21
+###cookielaw_alert
+###cookielaw_banner
+###cookielaw_banner_container
+###cookielaw_msg
+###cookielaw_node
+###cookielaw_notice
+###cookielaw_overlay
+###cookielaw_shadow
+###cookielawdiscalimer
+###cookielawdiv
+###cookielawwarning
+###cookielawwrapper
+###cookielayer
+###cookielb
+###cookielegal
+###cookielegislation
+###cookielightbox
+###cookielista
+###cookiemanager_cookiebar
+###cookiemaster
+###cookiemeld
+###cookiemelder
+###cookiemelding
+###cookiemelding_popup
+###cookiemenu
+###cookiemessage
+###cookiemessage-root
+###cookiemessage-wrapper
+###cookiemessagebar
+###cookiemex
+###cookiemodalbar
+###cookiemodalbarplaceholder
+###cookiemodule
+###cookiemonster
+###cookiemonster_popup
+###cookiemsg
+###cookiemsgbox
+###cookiemuur
+###cookienfo
+###cookienote
+###cookienotice
+###cookienotice-container
+###cookienotice_container
+###cookienoticediv
+###cookienoticetab
+###cookienotif
+###cookienotification
+###cookienotification-bar
+###cookienotification-block
+###cookienotification_background
+###cookienotifier
+###cookienotify
+###cookienotify-wrapper
+###cookienotifybar
+###cookientf_div
+###cookienutzung
+###cookieok
+###cookieok_bar
+###cookieonpage
+###cookieopt
+###cookieoptin
+###cookieoptinoverlay
+###cookieouterframe
+###cookieoverlay
+###cookieoverlay_outer
+###cookiep
+###cookiepanel
+###cookiepermissionDialogBox
+###cookiepermissionprompt
+###cookieplugin
+###cookiepolicy
+###cookiepolicy-blok
+###cookiepolicy-container
+###cookiepolicy-div
+###cookiepolicy-main-outer
+###cookiepolicy-wrap
+###cookiepolicyContainer
+###cookiepolicy_area
+###cookiepolicybar
+###cookiepolicybg
+###cookiepolicycontainer
+###cookiepolicydiv
+###cookiepolicynotification
+###cookiepolicypopup
+###cookiepolicywrappershow
+###cookiepop
+###cookiepop-lulu_cookiepop
+###cookiepopcontainer
+###cookiepopup
+###cookiepopup-content
+###cookiepopupbg
+###cookiepopupdiv
+###cookiepopupheader
+###cookieprefs
+###cookieprivacy
+###cookieprivacy-bar
+###cookieprompt
+###cookiequestion
+###cookier-banner
+###cookierBayer
+###cookiera_figyelmezteto_doboz
+###cookieregels
+###cookieregpdRoot
+###cookiereminder
+###cookiereports-badge
+###cookies-2022-popup
+###cookies-acc
+###cookies-accept
+###cookies-accept-bar
+###cookies-accept-container
+###cookies-accept-info
+###cookies-accept-lightbox
+###cookies-accept-section-wrapper
+###cookies-acceptance
+###cookies-acceptance-ack
+###cookies-acceptance-box
+###cookies-ack-bar
+###cookies-ad
+###cookies-adv
+###cookies-advice
+###cookies-advice-footer
+###cookies-agree
+###cookies-agreebar
+###cookies-agreed-wrapper
+###cookies-agreement
+###cookies-agreement-bar
+###cookies-agreement-box
+###cookies-alert
+###cookies-alert-container
+###cookies-alert-dialog
+###cookies-alert-wrapper
+###cookies-alerta
+###cookies-allowed
+###cookies-approval
+###cookies-approval-popup
+###cookies-are-evil
+###cookies-auth
+###cookies-aviso
+###cookies-backdrop
+###cookies-banner
+###cookies-banner-block
+###cookies-banner-overlay
+###cookies-bar
+###cookies-bar-en
+###cookies-bar-etro
+###cookies-bar-pl
+###cookies-block
+###cookies-blok
+###cookies-bot
+###cookies-bottom
+###cookies-bottom-modal
+###cookies-box
+###cookies-box-inner
+###cookies-box-outer-layer
+###cookies-browser-ui-app
+###cookies-button-container
+###cookies-card
+###cookies-charter
+###cookies-check
+###cookies-cnil-banner
+###cookies-cnil-info
+###cookies-cnil-infos-content
+###cookies-compliance
+###cookies-conditions
+###cookies-consent
+###cookies-consent-container
+###cookies-consent-form
+###cookies-consent-popup
+###cookies-consent-section
+###cookies-consent-wrapper
+###cookies-consentimiento
+###cookies-cont
+###cookies-container
+###cookies-content
+###cookies-cookies-modal
+###cookies-cover
+###cookies-dialog
+###cookies-directive
+###cookies-disclaimer
+###cookies-disclaimer-bar
+###cookies-disclaimer-block
+###cookies-div
+###cookies-element
+###cookies-erlauben
+###cookies-eu-banne
+###cookies-eu-banner
+###cookies-eu-wrapper
+###cookies-fancybox
+###cookies-fixed
+###cookies-floating-strip
+###cookies-footer
+###cookies-form-overlay
+###cookies-gdpr-host
+###cookies-glass
+###cookies-gratki-info
+###cookies-guide
+###cookies-header
+###cookies-header-warning
+###cookies-holder
+###cookies-imm-wraper
+###cookies-info
+###cookies-info-alert
+###cookies-info-banner
+###cookies-info-bar
+###cookies-info-box
+###cookies-info-cnil
+###cookies-info-frame
+###cookies-info-modal
+###cookies-infobar
+###cookies-informacja
+###cookies-information
+###cookies-information-bar
+###cookies-information-popup
+###cookies-infos
+###cookies-interface
+###cookies-iprima
+###cookies-iraiser
+###cookies-jar
+###cookies-komunikat
+###cookies-law-banner
+###cookies-law-container
+###cookies-law-info-box
+###cookies-layer
+###cookies-layout-banner
+###cookies-legal
+###cookies-legislation-box
+###cookies-license
+###cookies-lightbox
+###cookies-m-c
+###cookies-management-bar-cointainer
+###cookies-manager-msg
+###cookies-message
+###cookies-message-container
+###cookies-message-container-en
+###cookies-message-div
+###cookies-message-main
+###cookies-message-src
+###cookies-messages
+###cookies-messages-wrapper
+###cookies-modal
+###cookies-modal-target
+###cookies-modal-wrapper
+###cookies-module
+###cookies-monster
+###cookies-msg
+###cookies-msg-wrapper
+###cookies-nag
+###cookies-navbar
+###cookies-navigation
+###cookies-note
+###cookies-notice
+###cookies-notif
+###cookies-notification
+###cookies-notification-bar
+###cookies-notification-popup
+###cookies-notify
+###cookies-ok-spacer
+###cookies-overlay
+###cookies-panel
+###cookies-permission
+###cookies-personalize
+###cookies-pol
+###cookies-policy
+###cookies-policy-banner
+###cookies-policy-bar
+###cookies-policy-container
+###cookies-policy-info
+###cookies-policy-mssg
+###cookies-policy-notification
+###cookies-policy-placeholder
+###cookies-policy-popup
+###cookies-policy-prompt
+###cookies-policy-warning
+###cookies-policy-wrapper
+###cookies-politics
+###cookies-pop-out
+###cookies-pop-up
+###cookies-popapito
+###cookies-popin
+###cookies-popover
+###cookies-popup
+###cookies-popup-modal
+###cookies-popup-overlay
+###cookies-popup-wrap
+###cookies-preferences-fixed
+###cookies-privacy
+###cookies-privacy-advice
+###cookies-privacy-policy-alert
+###cookies-privacy-policy-alert-small
+###cookies-prompt
+###cookies-region
+###cookies-regulation
+###cookies-rgpd-overlay
+###cookies-rgpd-popup
+###cookies-ribbon
+###cookies-rodo
+###cookies-section
+###cookies-settings-modal
+###cookies-short
+###cookies-sticky
+###cookies-sticky-wrapper
+###cookies-strip
+###cookies-tendina
+###cookies-terms
+###cookies-terms-info
+###cookies-terms-short
+###cookies-texto-corto
+###cookies-toolbar
+###cookies-top-bloc
+###cookies-topbar
+###cookies-ue
+###cookies-ue-agree-block
+###cookies-upozorneni
+###cookies-usage
+###cookies-usage-message
+###cookies-use
+###cookies-use-alert
+###cookies-use-page-padding
+###cookies-use-popup
+###cookies-using-message
+###cookies-val
+###cookies-verify
+###cookies-warn
+###cookies-warning
+###cookies-warning-box
+###cookies-warning-container
+###cookies-warning-message
+###cookies-wiadomosc-box
+###cookies-win
+###cookies-window
+###cookies-wrap
+###cookies-wrapper
+###cookies.active
+###cookies.activo
+###cookies.alert
+###cookies.alert-box
+###cookies.alert-dismissible
+###cookies.clearfix
+###cookies.container
+###cookies.container-fluid
+###cookies.cookies
+###cookies.display
+###cookies.fixed-bottom
+###cookies.hidden
+###cookies.hidden-print
+###cookies.hidden-sm
+###cookies.hidden-xs
+###cookies.hide-print
+###cookies.in
+###cookies.montserrat
+###cookies.notice
+###cookies.notifyBar
+###cookies.on
+###cookies.open
+###cookies.panel-pane
+###cookies.popup
+###cookies.py-2
+###cookies.row
+###cookies.show
+###cookies.sticky
+###cookies.toplayer
+###cookies.ver
+###cookies.visible
+###cookies123
+###cookiesAccept
+###cookiesAcceptance
+###cookiesAcceptedDiv
+###cookiesAceitar
+###cookiesAcknowledgement
+###cookiesAcknowledgementBg
+###cookiesAdrenaline
+###cookiesAdvert
+###cookiesAdvertise
+###cookiesAdvice
+###cookiesAdvise
+###cookiesAgreement
+###cookiesAgreementNotice
+###cookiesAlarm
+###cookiesAlert
+###cookiesAlertWidget
+###cookiesAllow
+###cookiesAllowingRequest
+###cookiesApprobation
+###cookiesArea
+###cookiesArticle
+###cookiesBand
+###cookiesBanner
+###cookiesBannerContainer
+###cookiesBar
+###cookiesBarAnnouncement
+###cookiesBox
+###cookiesCapa
+###cookiesCard
+###cookiesCheck
+###cookiesChecker
+###cookiesCondition
+###cookiesConfirm
+###cookiesConsent
+###cookiesConsentBar
+###cookiesConsentWidget
+###cookiesCont
+###cookiesContainer
+###cookiesCotainer
+###cookiesDialog
+###cookiesDialogue
+###cookiesDirective
+###cookiesDiscCont
+###cookiesDisclaimer
+###cookiesDiv
+###cookiesEU-box
+###cookiesFooter
+###cookiesForm:not(html):not(body)
+###cookiesHint
+###cookiesHint_1
+###cookiesHolder
+###cookiesHomeHeader
+###cookiesI
+###cookiesID
+###cookiesInfo
+###cookiesInfo2
+###cookiesInfoBar
+###cookiesInfoBlock
+###cookiesInfoBox
+###cookiesInfoBox1
+###cookiesInfoDiv
+###cookiesInformation
+###cookiesInformer
+###cookiesInfos
+###cookiesInitialDialog
+###cookiesLaw
+###cookiesLawComplaint
+###cookiesLayer
+###cookiesLayoutModule
+###cookiesLegacy
+###cookiesLegal
+###cookiesLegalMessage
+###cookiesLequipe
+###cookiesMain
+###cookiesMainWarningDiv
+###cookiesManagerFrameBox
+###cookiesMensajePolitica
+###cookiesMessage
+###cookiesMessageBanner
+###cookiesMessageContainer
+###cookiesModalContainer
+###cookiesModal_bottom
+###cookiesMsg
+###cookiesNotAccepted
+###cookiesNote
+###cookiesNotice
+###cookiesNoticeDiv
+###cookiesNoticeId
+###cookiesNotification
+###cookiesNotifier
+###cookiesNotify
+###cookiesOK
+###cookiesOkBox
+###cookiesOptInMessage
+###cookiesOptInMessageWrapper
+###cookiesOptinLayer
+###cookiesOuter
+###cookiesOverlay
+###cookiesPP
+###cookiesPage
+###cookiesPanel
+###cookiesPanelWrapper
+###cookiesPermission
+###cookiesPolicy
+###cookiesPolicyBanner
+###cookiesPolicyC
+###cookiesPolicyDisclaimer
+###cookiesPolicyHolder
+###cookiesPolicyInfo
+###cookiesPolicyMessage
+###cookiesPolicyModal
+###cookiesPolicyNotice
+###cookiesPolicyPlace
+###cookiesPolicyPopup
+###cookiesPolicySlide
+###cookiesPolicyWrapper
+###cookiesPoliticaPrivacidade
+###cookiesPop
+###cookiesPopUp
+###cookiesPopin
+###cookiesPopup
+###cookiesPrivacy
+###cookiesPrivacyPolicyContainerWrapper
+###cookiesPrompt
+###cookiesPromptWrapper
+###cookiesReglement
+###cookiesRequest
+###cookiesSection
+###cookiesShowFloaterFlat
+###cookiesSouhlasimBlok
+###cookiesStatement
+###cookiesStrip
+###cookiesSuhlas
+###cookiesT
+###cookiesTab
+###cookiesText
+###cookiesToast
+###cookiesToolbar
+###cookiesTopBloc
+###cookiesTopBlock
+###cookiesUsageFooter
+###cookiesUse
+###cookiesWarn
+###cookiesWarnMsg
+###cookiesWarning
+###cookiesWarningActive
+###cookiesWarningBackground
+###cookiesWarningBanner
+###cookiesWarningLoginPopUp
+###cookiesWarningMessage
+###cookiesWidget
+###cookiesWindow
+###cookiesWrap
+###cookiesWrapper
+###cookies[data-region-id="cookies"]
+###cookies[role="alert"]
+###cookies[role="dialog"]
+###cookies[style^="bottom:"]
+###cookies_
+###cookies_Background1
+###cookies_Info
+###cookies__banner
+###cookies__new
+###cookies__popup
+###cookies_accept
+###cookies_accept_box
+###cookies_accept_container
+###cookies_accept_overlay
+###cookies_accepted
+###cookies_ack
+###cookies_advice
+###cookies_advise
+###cookies_advisor
+###cookies_agree
+###cookies_agreement
+###cookies_alarm
+###cookies_albia
+###cookies_alert
+###cookies_alert_container
+###cookies_all
+###cookies_allowed_box
+###cookies_allowed_message
+###cookies_apla
+###cookies_ask
+###cookies_avertissement
+###cookies_aviso
+###cookies_b
+###cookies_band
+###cookies_banner
+###cookies_banner_alert
+###cookies_bar
+###cookies_barraaceptacion
+###cookies_bg
+###cookies_block
+###cookies_block_footer
+###cookies_border
+###cookies_bottom
+###cookies_box
+###cookies_box_disclaimer
+###cookies_box_info
+###cookies_brief_info
+###cookies_check
+###cookies_cnil_banner
+###cookies_compliance
+###cookies_cond
+###cookies_conditions
+###cookies_confirm
+###cookies_confirm_box
+###cookies_confirm_wrapper
+###cookies_confirmation_bar
+###cookies_consent
+###cookies_consent_container
+###cookies_consent_form
+###cookies_cont
+###cookies_contain
+###cookies_container
+###cookies_content
+###cookies_content_barre
+###cookies_custom
+###cookies_dialog
+###cookies_directive
+###cookies_disclaimer
+###cookies_div
+###cookies_div_main
+###cookies_ec_notice
+###cookies_enabled_container
+###cookies_entry
+###cookies_erlauben
+###cookies_et_traceurs_CNIL
+###cookies_eu
+###cookies_eu_acceptance
+###cookies_fade
+###cookies_footer
+###cookies_footer_info
+###cookies_footer_popup
+###cookies_footer_sec
+###cookies_gdpr_drawer
+###cookies_header
+###cookies_hint
+###cookies_inc
+###cookies_inf
+###cookies_info
+###cookies_info_box
+###cookies_info_header
+###cookies_info_panel
+###cookies_info_show
+###cookies_inform
+###cookies_information
+###cookies_infos
+###cookies_inner
+###cookies_law
+###cookies_layer
+###cookies_legal
+###cookies_legal_mention
+###cookies_legislation
+###cookies_lista
+###cookies_men
+###cookies_message
+###cookies_message_bar
+###cookies_message_container
+###cookies_message_info
+###cookies_modal
+###cookies_msg
+###cookies_msg_div
+###cookies_msg_subwrapper
+###cookies_msg_wrapper
+###cookies_notice
+###cookies_notice_banner
+###cookies_notice_widget_root
+###cookies_notif
+###cookies_notification
+###cookies_notifier
+###cookies_notifier_container
+###cookies_notify
+###cookies_notify_cont_all
+###cookies_notify_container
+###cookies_ocu
+###cookies_ok
+###cookies_oreo
+###cookies_overlay
+###cookies_overlay_shade
+###cookies_panel
+###cookies_panel_bg
+###cookies_permission
+###cookies_policies_alert
+###cookies_policy
+###cookies_policy_banner
+###cookies_policy_bar
+###cookies_policy_bg
+###cookies_policy_big_form
+###cookies_policy_box
+###cookies_policy_container
+###cookies_policy_popup
+###cookies_policy_wrap
+###cookies_polityka
+###cookies_pop
+###cookies_popin
+###cookies_popup
+###cookies_popup_container
+###cookies_pp
+###cookies_privacy
+###cookies_question
+###cookies_rep
+###cookies_request
+###cookies_section
+###cookies_show_dialog
+###cookies_sid_info
+###cookies_statement
+###cookies_strip
+###cookies_tab
+###cookies_terms
+###cookies_tic
+###cookies_toolbar
+###cookies_tresc
+###cookies_txt
+###cookies_view
+###cookies_viewer
+###cookies_warn
+###cookies_warning
+###cookies_wrapper
+###cookiesadv
+###cookiesagree
+###cookiesalert
+###cookiesarea
+###cookiesaviso
+###cookiesban
+###cookiesbanner
+###cookiesbar
+###cookiesblok
+###cookiesbox
+###cookiesc
+###cookiescheck
+###cookieschoice
+###cookiesck
+###cookiesck_accept
+###cookiesck_overlay
+###cookiesconcentbar
+###cookiesconfirm
+###cookiesconsent
+###cookiescontainer
+###cookiescontent
+###cookiescreen
+###cookiescript
+###cookiescript_badge
+###cookiescript_container
+###cookiescript_injected
+###cookiescript_injected_background
+###cookiescript_injectedone
+###cookiescript_main
+###cookiescript_wrapper
+###cookiesdialog
+###cookiesdirective-container
+###cookiesdisclaimer
+###cookiesdisplay
+###cookiesdiv
+###cookieseal-banner
+###cookiesection
+###cookiesenabled
+###cookiesesante
+###cookiesetdiv
+###cookiesettings
+###cookieseu-bar
+###cookieshit
+###cookieshoyer
+###cookiesinfo
+###cookiesinfo-navbar
+###cookiesinfo-wrapper
+###cookiesinfopnl_c
+###cookiesjsr
+###cookieslaw
+###cookieslawcheck
+###cookieslegal
+###cookieslider
+###cookieslista
+###cookiesmelding
+###cookiesmenu
+###cookiesmessage
+###cookiesmessagediv
+###cookiesmessages
+###cookiesms
+###cookiesmsg
+###cookiesnotice
+###cookiesnotify
+###cookiesor
+###cookiesoverview
+###cookiespace
+###cookiespane
+###cookiesplease
+###cookiesplus-basic
+###cookiesplus-modal-container
+###cookiesplus-overlay
+###cookiespolicy
+###cookiespolicydiv
+###cookiespolicymessage
+###cookiespop
+###cookiespopup
+###cookiespopup-layer
+###cookiespp
+###cookiesribbon
+###cookiess
+###cookiessection
+###cookiesss
+###cookiestat
+###cookiestatement
+###cookiesterms
+###cookiestext
+###cookiestrip
+###cookiesusage
+###cookieswarn
+###cookieswarning
+###cookieswarning_block
+###cookieswrap
+###cookietable
+###cookietc
+###cookietest
+###cookietext
+###cookietextdiv
+###cookiething
+###cookieticker
+###cookietoast
+###cookietoestemmingbalk
+###cookietoestemmingvlak
+###cookietop
+###cookietopbar
+###cookietopper
+###cookietrackingagreement
+###cookietroll
+###cookietron-bar
+###cookieu
+###cookieu_header
+###cookieudiv
+###cookieuse
+###cookieuseage
+###cookieusing
+###cookieveil
+###cookievjw
+###cookiewaarschuwing
+###cookiewarn
+###cookiewarn-panel
+###cookiewarnbar
+###cookiewarner
+###cookiewarning
+###cookiewarning-block
+###cookiewarning_header
+###cookiewarningcontainer
+###cookiewarningiframe
+###cookiewarnung
+###cookiewet
+###cookiewet-balk
+###cookiewet-hoek
+###cookiewetgeving
+###cookiewindow
+###cookiewookieblock
+###cookiewrap
+###cookiewrapper
+###cookiexndo
+###cookiezeile
+###cookii-message
+###cookii-overlay
+###cookinfo
+###cookinfoDIV
+###cookinfo_container
+###cookirPolicy
+###cookis-bg
+###cookis-box
+###cookistop
+###cookit
+###cookix-body
+###cooklaw
+###cooklay
+###cooklayer
+###cooknote-div
+###cookpol
+###cooktab
+###cooky
+###cooky-policy
+###cooky_policy
+###coolermaster-cookie-policy
+###cooooookies
+###coopCookieLayer
+###cop_confirm_cookie
+###corpCookieBanner
+###council_Cookies
+###coupling-media-hinweis-cookie-richtlinie
+###cozConsentNugget
+###cp-cookie-banner
+###cp-cookie-popup
+###cp-policy-container
+###cp2_cookie
+###cp_banner_container
+###cp_cookie_bar
+###cp_wrap
+###cpnb_manager_wrap_close_bg
+###cpnb_warningBoxBgOverlay
+###cpolicy-bar
+###cpolicy-holder
+###cpolicyHolder
+###cps-shaman-notifier
+###cpsCookieHintContainer
+###cqcqButton
+###cqcqPanel
+###cryout-cookies-notification
+###cs_politykacookies
+###csm-optin-bar
+###cssFConsentCookie
+###css_cookies_note
+###ct-uber-gdpr-cookie-popup
+###ct-ultimate-gdpr-cookie-open-shaddow
+###ct-ultimate-gdpr-cookie-popup
+###ctCookie
+###ct_cookie_prompt
+###cta-cookie
+###cta_prompt_bottom
+###ctl00_BarTab1_divInformativaCookie
+###ctl00_CiasteczkaPolityka_RNCockie_popup
+###ctl00_ContentPlaceHolder1_div_cookies
+###ctl00_CookieArea
+###ctl00_CookieConfirmPanel
+###ctl00_CookieInfo
+###ctl00_CookieMessage1_divCookie
+###ctl00_CookieMessage1_upCookie
+###ctl00_CookieWarning1
+###ctl00_Cookies_pnlCookies
+###ctl00_DivCookies
+###ctl00_EUCookiesWarning
+###ctl00_Footer_rnCookies_popup
+###ctl00_Header_CookieControl_pnlCookieTriangle
+###ctl00_IdCookies_DivBlanche
+###ctl00_PanelCookie
+###ctl00_PanelPolitykaPrywatnosci
+###ctl00_PanelRGPD
+###ctl00_chdr_pnlCookieHeader
+###ctl00_ckWarning
+###ctl00_cookieConsent_pnlCookie
+###ctl00_cookieNotice
+###ctl00_cookiePanel
+###ctl00_cookiePnl
+###ctl00_cookie_cookie_panel
+###ctl00_cookie_panel
+###ctl00_cookieconsent_ajaxPanel
+###ctl00_cookies
+###ctl00_cookies_pl
+###ctl00_ctl00_CookiePolicyMessage
+###ctl00_ctl00_CookiePolicy_cookiePolicy
+###ctl00_ctl00_cookieNotice
+###ctl00_ctl00_ctl00_cookieLawPnl
+###ctl00_ctl00_divCookiePolicyContainer
+###ctl00_ctl00_privacyUpdate
+###ctl00_ctl00_ucCookieAlert_updtCookie
+###ctl00_ctl06_CookieWrapper
+###ctl00_ctl14_pnlWeUseCookies
+###ctl00_ctlCookieDisclaimer_pnlDisclaimer
+###ctl00_ctrlUserStaticMenu_cookieDialogTopDiv
+###ctl00_divCookieMsg
+###ctl00_divCookies
+###ctl00_header1_CookieHeader
+###ctl00_informacjaCookiesLayout4
+###ctl00_informativaCookie_divInformativaCookie
+###ctl00_panCookieAbfrage
+###ctl00_panel_cookie
+###ctl00_pnlCookie
+###ctl00_pnlCookieMessage
+###ctl00_pnlCookieSettings
+###ctl00_pnlCookies
+###ctl00_pnlInformativaCookies
+###ctl00_pnl_cookie
+###ctl00_privacyCookies_LIPCNB_PrivacyandCookiesNoticePanel
+###ctl00_privacyUpdate
+###ctl00_theseusCookiePolicy_cookiePol
+###ctl00_theseusCookiePolicy_ulCookiePol
+###ctl00_ucDatenschutz
+###ctl00_upCookie
+###ctl01_ctl00_CookiePreferencesControl
+###ctl01_pnlCookieBanner
+###ctl01_uiCookieBanner
+###ctl04_cookies
+###ctl06_pnlCookieBanner
+###ctl08_Cookies
+###ctl08_pnlCookiePolicy
+###ctl09_uxCookieConsent
+###ctl10_pnlCookieBanner
+###ctl13_CookiePanel
+###ctl20_pnlCookie
+###ctl26_UpdatePanelCookie
+###ctl30_pnlCookie
+###ctlmActionsDiv_closeCookieBanner
+###ctn_cookies
+###ctr-cookies
+###ctrlHeader_divCookieText
+###ctrl_barra_cookies
+###ctt_w_cookie_notice
+###ctw-implied-consent
+###cu-cookie-alert
+###cu-privacy-notice
+###cuConsent
+###cult_cookie_accept
+###cust-cookie-modal
+###custcookie
+###custom-cookie-accept
+###custom-cookie-container
+###custom-cookie-message-banner
+###custom-header-cookie
+###customCookieLoadingBackground
+###custom_cookie
+###customise-cookies-main-bottom-notification
+###cw-cookieInfo
+###cw-data-cookie-legal
+###cwarn-box
+###cx-notification-wrap
+###cx_bottom_banner
+###czgdpr-mask
+###czgdpr-notice
+###d-cookiesWarning
+###d-cookiesWarningAdsLayout
+###d-notification-bar
+###d4-consent-banner
+###dAvisoCookie
+###dCookies
+###daextlwcnf-cookie-notice-container
+###dap-cookie-bar
+###darkener_cookie
+###dasCookieControl
+###data-disclaimer.disclaimer
+###data-privacy-bar
+###data-protection-banner
+###data-protection-notification
+###data-protection-overlay
+###data-protection-regulation
+###data-store-permission-popup
+###dataCollectPolicy
+###dataPrivacyDialog
+###data_protection_comment
+###data_protection_comment_mobile
+###dataprotectionmessage
+###datenschutz-banner
+###datenschutz-consent
+###datenschutz-layer
+###datenschutz_hinweis
+###datenschutz_info
+###datenschutz_popup
+###datenschutz_popup_background
+###datenschutzcontainer
+###datenschutzcoockie
+###datenschutzhinweis
+###datenschutzinfo
+###datenschutzinfo_spacer
+###datenschutzlayer
+###db-gdpr-cookie-consent
+###dcc_cookieMessageContainer
+###dck-cookies
+###dcookie
+###dd_cookie_bar
+###ddm_cookiepolicybanner
+###ddneu
+###dealersEPrivacyDisclaimer
+###debugged-cookiebar-container
+###declare-cookies
+###delta-gdpr
+###deluxecookies
+###dennis-cookie-notice
+###dennis-cookienote-container
+###deset-cookie-bar
+###desktop-banner-stripe
+###desktop-cookie-disclosure
+###desktopCookieMsg
+###devicookieinfo
+###dfc-cookie-concern-container
+###dgcookiesAlertBig
+###dgdsgvocookie
+###dgp_cookies
+###dgprcookiebanner
+###di-cookie-message
+###dialog-cookie
+###dialog-cookies
+###dialog-euCookie
+###dialog-modal-cookieadv
+###dialogAcceptCookiePolicy
+###dialogConfirmCookies
+###dialog_cookies
+###dialog_notification_cookie
+###dialogoCookies
+###didomi-notice
+###diffuse-cookie-notice
+###digipublica-cookie-shade
+###digischool_cookie_push
+###digo_cookies
+###din-cookie-banner
+###dinamoPrivacyPopup
+###dis-cookie-info-box
+###disCookieContainer
+###discl_cookie
+###disclaim_bar
+###disclaimer-box
+###disclaimer-cookie
+###disclaimer-cookies
+###disclaimer-cookies_bg
+###disclaimerBox
+###disclaimerC
+###disclaimerCookie
+###disclaimerCookies
+###disclaimerDialog_modal
+###disclaimerGDPR
+###disclaimer_cookie
+###disclaimer_cookies
+###dismiss-cookie-message
+###dismissable-cookie-policy
+###disney-cookie-policy-banner
+###disoflex-cookies
+###dispCPAA
+###display-cookie-consent
+###displayCookieUsageNotification
+###display_cookie_message
+###div-accept-cookies
+###div-cookie
+###div-cookie-consent
+###div-cookie-info
+###div-cookie-komunikat
+###div-cookie-monster
+###div-cookies
+###div-info-cookies
+###div-to-cookies
+###div-use-cookie
+###divAcceptCookie
+###divAceptaCookies
+###divAvisCookies
+###divAvisoCookies
+###divCPModal
+###divCheckCookie
+###divCookInfo
+###divCookie
+###divCookieAcceptance
+###divCookieAgreement
+###divCookieAlert
+###divCookieBanner
+###divCookieChoiceInfo
+###divCookieCompliance
+###divCookieConfirm
+###divCookieConsent
+###divCookieConsentInner
+###divCookieConsentMessageContainer
+###divCookieContainer
+###divCookieEU
+###divCookieEgate
+###divCookieInfo
+###divCookieInform
+###divCookieLaw
+###divCookieLearn
+###divCookieMsg
+###divCookieNotification
+###divCookieNotify
+###divCookiePolicy
+###divCookiePoliticaPrivacidade
+###divCookieStickyLayer
+###divCookieStickyLayerBackdrop
+###divCookieUsedNote
+###divCookieUyari
+###divCookieWarning
+###divCookies
+###divCookiesAlert
+###divCookiesBox
+###divCookiesCNIL
+###divCookiesConfirmation
+###divCookiesConsent
+###divCookiesF
+###divCookiesFixed
+###divCookiesMessage
+###divCookiesMsg
+###divCookiesPolicy
+###divCookies_pnlCookies
+###divDisclaimer
+###divFrmUserCookieConfirm
+###divInfoCookie
+###divInfoCookies
+###divInformacionCookies
+###divInformativaCookie
+###divInformativaCookies
+###divMainCookiesPolicy
+###divMensajeCookie
+###divMeracCookies
+###divMsgCookie
+###divPiskot
+###divPiskotki
+###divPolCookies
+###divPolicyAcceptance
+###divPolicyBar
+###divPrivacy
+###divProtectionViePrivee
+###divValidationCookieCharte
+###div_COOKIERICHTLINIE
+###div_CookieLaw
+###div_CookieLaw_parent
+###div_CookiePolicy
+###div_____e_privacy
+###div_accept_cookies
+###div_akceptacja
+###div_alert_cookies
+###div_bar_cookies_info
+###div_ciastka_info
+###div_cnil_cookie
+###div_coockies
+###div_cook
+###div_cookie
+###div_cookieInfo
+###div_cookie_ind
+###div_cookie_msg
+###div_cookienotice
+###div_cookies
+###div_cookies_accept
+###div_cookies_allow
+###div_cookies_nueva
+###div_cookies_warning
+###div_cookiespolicy_notification
+###div_cookis
+###div_gdpr_footer
+###div_info_cookie
+###div_info_cookies
+###div_message_cookies
+###div_politica_cookie
+###div_politique_cookie
+###div_politique_cookies
+###div_pop_cookie
+###div_sitecookie_ask
+###div_use_cookie
+###div_use_cookies
+###divccncookieprivacy
+###divconsent
+###divcook
+###divcookie
+###divcookieconsent
+###divcookiehinweis
+###divcookieok
+###divcookies
+###divi-life-cookie-popup
+###divmensagemcookie1
+###divprivacycookies
+###dk_gdpr
+###dkmcookie
+###dl_cookie
+###dl_cookieBanner
+###dl_cookie_footer
+###dlgCookies
+###dlg_cookie_frame
+###dlicookieusagewarning
+###dm-cookie-popup-container
+###dm_cookiela_bar
+###dm_show_cookies
+###dmpcookienotice
+###dmsCookiePopup
+###dmxPopupCookies
+###dn_cookie_notice_banner
+###dni-cookie-alert
+###dni-cookie-banner
+###dnn_plCookies
+###do-cookiepopup-container
+###doCookieAlert
+###doc-banner-cookie
+###docookiecookie
+###documentCookieInfo
+###dog-sp-privacy-button
+###dogmacookiehint
+###domCookieWarning:not(html):not(body)
+###donut-law
+###dotbandeaucookie
+###dp-cc-cookieconsent
+###dpWarningWrapper
+###dpcc-wrapper
+###dr-cookie-info-box
+###dr_blocking_div
+###drdsgvo_div
+###drop-cookie
+###ds-st-cookiesbar
+###ds_cookiebar
+###dsgvo--popup
+###dsgvo-banner
+###dsgvo-bottom
+###dsgvo-consent-layer
+###dsgvo-container
+###dsgvo-cookie
+###dsgvo-cookie-configurator
+###dsgvo-cookie-container
+###dsgvo-cookie-dnt-layer
+###dsgvo-cookie-layer
+###dsgvo-modal
+###dsgvo-modal-wrapper
+###dsgvo-opt-in
+###dsgvo-panel
+###dsgvoBox
+###dsgvoCookieBanner
+###dsgvoFooter
+###dsgvo_banner
+###dsgvo_box
+###dsgvo_cookie
+###dsgvo_cookie_hint
+###dsgvo_cookie_note
+###dsgvo_info
+###dsgvo_v2
+###dsgvo_wrapper
+###dspcookie
+###dsvgoAccept
+###dsvgoOverlay
+###dsvgo_cookie
+###dt_2018_tos_pp_update
+###dtx-cookie
+###dtyrd-highlight-cookie-background
+###dupCookies
+###dv-cookie-notice
+###dv-t3-consent-management-modal
+###dvAcceptCookie
+###dvAcceptCookies
+###dvCerezBilgisi
+###dvCookie
+###dvCookieBanner
+###dvCookieBar
+###dvCookieChk
+###dvCookieChoiceInfo
+###dvCookieInfo
+###dvCookieMessage
+###dvCookiePopup
+###dvCookies
+###dvPrivacy
+###dvRGPDcookie
+###dvSiteCookies
+###dv_cookies_alert
+###dvt_cookiechoiceinfo
+###dx-coki
+###dxCookieConsentContainer
+###dxm_ckScr_injected
+###dy-cookieInfo-container
+###dy_cookiebar_001
+###dynamic-cookies-bar
+###dynamic-cookies-bar-overlay
+###dywc
+###dywc_bglayer
+###e-privacy-message
+###e2e-cookie-banner
+###e3cookie
+###e3cookie-banner-container
+###eCookieConsentDialog
+###eCookieMsg
+###eKPC_Container
+###ePrivacy
+###ePrivacyBanner
+###ePrivacyDisclaimer
+###eStore_gdpr
+###e_cookieWarning
+###eac_cookie_message
+###eafw-cookies
+###eagerly-tools-cookie-overlay
+###easy-cookies-policy-main-wrapper
+###easyCookie
+###easycookieinfo
+###eawe_cookies_info
+###ebsninjabar-cookie-bar
+###ebutoo-easy-dsgvo-cookie-popup
+###ec-cookie-messages-container
+###ec-popup-modal[style="display:block"]
+###ecd_opt_in_banner
+###ecl-notice
+###ecl-notification
+###ecl_notification
+###eclcookie
+###ecomas-scch-ex
+###ecomas-scch-ex-bg
+###econda-pp2-banner
+###ecookie
+###ecookie_banner
+###ecran-cookies
+###ecranCookieAlert
+###ed-gdpr-cookie-bar
+###edcCookiesPolicyBanner
+###edp-cookies-banner
+###edp_Cookies_Disclaimer_Banner
+###edunetCookies
+###ee-cookies-message
+###eea-confirmation-outer
+###eed-cookie-banner
+###efx-banner-prompt
+###egg-cookie-bar
+###egmont-cookie-alert
+###egs-cookie-popup
+###ehms-cookie-info
+###ei_cookie
+###eikyoCookieConsent
+###eimm_box_cookie_alerte_message
+###eircom-cookies-notice
+###ek-cookies
+###eksCookiePrompt
+###el-cookie-consent
+###elGuestTerms
+###elc-cookie-consent
+###elc-cookie-consent-container
+###element_cookie_banner
+###elqOptInBannerDiv
+###elumbus-cookies
+###elux-cookie-consent
+###emc2pdc-disclaimer
+###emcCookieNotification
+###emea-cookie
+###emea-cookie-msg
+###emergenteCookies
+###emerse-consent-pop
+###emg_cookiewall
+###emnprivacyservice_ui
+###emobile-cookies-notice
+###empori-cookie-modal
+###enable-cookie-bar
+###enableCookie-cont
+###enablecookies
+###enedue_cookieBox
+###enhanced-privacy-popup
+###ensBannerBG
+###ensConsentWidget
+###ensModalWrapper[aria-labelledby*="Consent"]
+###ensModalWrapper[role]
+###ensNotifyBanner
+###ens_pr_mini.ens_pr_mini
+###entryCookie:not(body)
+###eocookie
+###ep-cookiesPopup_wrapper
+###epCookieConsent
+###ep_cookies_overlay
+###epdPlaceholder
+###eppcc-notification-container
+###eprivacy
+###eprivacy-outer
+###eps_cookie_info
+###erw-privacy-info
+###es-consent
+###es-cookie-consent-app
+###es_cookie_solution
+###escookie-box
+###esiAcceptCookieBar
+###esi_cookie_banner
+###esites-cookie-info
+###esl_cookie_info
+###esns_background_layer
+###esv-header-cookies
+###et-gdpr-popup
+###et_cookie_law
+###etd_cookie_alert
+###ettcl-cookie-alert
+###eu-banner
+###eu-biscuits
+###eu-cookie
+###eu-cookie-banner
+###eu-cookie-bar
+###eu-cookie-bar-notification
+###eu-cookie-compliance
+###eu-cookie-compliance-modal
+###eu-cookie-container
+###eu-cookie-content
+###eu-cookie-directive
+###eu-cookie-guideline
+###eu-cookie-irrsinn
+###eu-cookie-law
+###eu-cookie-law-popup
+###eu-cookie-message
+###eu-cookie-mobile
+###eu-cookie-msg
+###eu-cookie-notice
+###eu-cookie-notifier
+###eu-cookie-notify
+###eu-cookie-notify-wrap
+###eu-cookie-policy
+###eu-cookie-policy-banner-wrapper
+###eu-cookie-policy-popop
+###eu-cookie-policy-popup
+###eu-cookie-sliding-popup
+###eu-cookie-sliding-popup-overlay
+###eu-cookie-stuff
+###eu-cookie-warning-banner
+###eu-cookie-warning-div
+###eu-cookie-wrap
+###eu-cookielaw
+###eu-cookies
+###eu-cookies-banner
+###eu-cookies-consent
+###eu-cookies-directive
+###eu-cookies-law
+###eu-cookies-notification
+###eu-cookies2
+###eu-cp-banner
+###eu-gdpr-overlay
+###eu-law
+###eu-notifier
+###eu-okno
+###eu-privacy
+###eu-susenka
+###euCompliance
+###euConsent
+###euCookie
+###euCookieBanner
+###euCookieBar
+###euCookieDialog
+###euCookieDirective
+###euCookieDiv
+###euCookieInfoOuter
+###euCookieLaw
+###euCookieLawInfo
+###euCookieNotice
+###euCookieNotify
+###euCookiePanel
+###euCookieRequester
+###euCookieWarning
+###euCookieWrapper
+###euCookies
+###euCookiesLawBar
+###euCookiesQuestion
+###euCookiesZone
+###euLaw-alert
+###euNotice
+###euPopup
+###eu_compliance
+###eu_cookie
+###eu_cookie_alert
+###eu_cookie_banner
+###eu_cookie_bar
+###eu_cookie_consent
+###eu_cookie_container
+###eu_cookie_dialogue
+###eu_cookie_disclaimer
+###eu_cookie_law
+###eu_cookie_message_hide
+###eu_cookie_notice
+###eu_cookie_notify
+###eu_cookie_policy
+###eu_cookie_warning
+###eu_cookie_warning_banner
+###eu_cookiebox
+###eu_cookies
+###eu_cookies_box
+###eu_cookies_disclaimer
+###eu_cookies_overlay_content
+###eu_cookies_spacer
+###eu_law_cookie_ext_wrapper
+###eu_notice_content
+###eu_opt_in_cookie_banner
+###eu_user_consent_policy_container
+###eubanner
+###euc_box
+###euc_cookieBox
+###eucc
+###euccBanner
+###euck-note
+###eucl_panel
+###euconsent
+###eucookie
+###eucookie-contener
+###eucookie-notice
+###eucookie_bottom
+###eucookiebar
+###eucookiebar-outer
+###eucookiebox
+###eucookieconsent
+###eucookielaw
+###eucookielawbox
+###eucookielawcontainer
+###eucookienotice
+###eucookies
+###eucookies-note
+###eucookies-wrapper
+###eucookiewarn
+###eudomintl-cmb
+###eugdpr-banner
+###eugdpr_modal
+###eulaw
+###eulaw-bar
+###eupolicy
+###eupopup
+###euro_cookie_content
+###eurociastko
+###eurocookie
+###eurocookielaw
+###europeCookieNotice
+###eut-privacy-bar
+###eut_cookie_notice
+###ev-cookieText
+###evance-cookie-consent
+###event-alert-cookie
+###eventmag-pro-cookie-ify
+###evideCookiesNotify
+###ew-cookiebar-full
+###ew-cookieinfo-container
+###ewcm2_container
+###exent_cookie_modal
+###exologCookieLawBarContainer
+###expat_cookies
+###expl-gdpr-modal
+###expl-gdpr-wall
+###explicitCookieModal
+###explicit_cookie_consent
+###exponea-cookie-compliance
+###expresso-cookies
+###extendedPrivacyWarningPanel
+###external-cookie-bar
+###ez-cookie-dialog-wrapper
+###ez-cookies-wrap
+###f-cookie-policy
+###f6-cp-cookiebanner
+###f_cookie
+###f_gdprheaderarea
+###facebook-tracking-notice
+###facerig-cookies
+###factor_cookieconsent_open
+###faldon-cookies
+###faldonCookies
+###farmacja_cookie_alert
+###fascia-cookie
+###fascia-ue-popup
+###fast-cmp-settings
+###fb-cookie-law
+###fb-pixel-consent
+###fc-cookies-notification
+###fcCookie
+###fccCookieModal
+###fco-gdpr
+###fco-gdpr-mask
+###fd-notes-top-cookies
+###fdCookieLawBanner
+###fdih-cb
+###fdih_cookiebadge_wrapper
+###fdjTrackersConsent
+###feature_privacy-notice
+###femundo-cookie-bar
+###fg_cookie_plugin_general
+###fhb-cookie
+###fhr-cookie-bar
+###fhw_cookiehinweis
+###fi-cookieconsent
+###filter_gdpr
+###firstLogNanobar
+###firstTimeCookie
+###fit-cookieWallId
+###fixed-cookie
+###fixedCookieBar
+###fixedCookies
+###fk-terms
+###flag-cookies
+###flash-cookie
+###flash-cookie-policy
+###flashCookies
+###flashmessage-cookies
+###flex_cookie_popup
+###flex_cookie_popup ~ .modal-backdrop
+###flexibook_cookie_layer
+###floating_cookie
+###flxCookieBar
+###flxCookieControlCorner
+###foCookieNotice
+###fondo-aviso-cookies
+###fondo_aviso_cookies
+###fondo_cookies
+###fonto_oscuro
+###foodfood_cookie
+###foodify-pro-cookie-ify
+###foot_cookie
+###footer > #cookieConsent
+###footer > #cookies
+###footer > .cookies
+###footer-cnil-space
+###footer-cookie
+###footer-cookie-consent
+###footer-cookie-info-bar
+###footer-cookie-itlaw
+###footer-cookie-layer
+###footer-cookie-notice
+###footer-cookie-notifier
+###footer-cookie-policy
+###footer-cookie-popup
+###footer-cookies
+###footer-cookies-div
+###footer-cookieuse-block
+###footer-gdpr
+###footer-gdpr-box
+###footer-gdpr-wrapper
+###footer-lgpd
+###footerCk
+###footerCookie
+###footerCookieAlertContainer
+###footerCookieArticle
+###footerCookieBar
+###footerCookieDirective
+###footerCookieNotice
+###footerCookiePolicy
+###footerCookieaccept
+###footerCookies
+###footerGdprModal
+###footer_agreePrivacyCookies
+###footer_bottom_floating_line__cookies
+###footer_cook
+###footer_cookie
+###footer_cookie_bar_block
+###footer_cookies
+###footer_cookies_banner_wrapper
+###footer_cookies_o
+###footer_tc_privacy
+###footercookie
+###footercookie-container
+###footercookies
+###footmesscookie
+###form_CookieOK
+###form_cookie
+###form_cookies_wrapper
+###formalAgreementModal ~ #modalBackdrop
+###formalAgreementModal.custom-modal
+###foxify-pro-cookie-ify
+###fp-cookie-consent
+###fp-cookie-notice
+###fp-gdpr-bar
+###fp_cookieMessageContainer
+###fr3ex-cookiewarning
+###fr_cookieMessage
+###fr_cookie_alert
+###fr_cookie_container
+###frame-cookie
+###frameCookiesBox
+###frameaviso
+###framework_cookiewarning
+###front-no-cookies-warn
+###frosmo-cookie-notif-container
+###fs-cookiewarning
+###fsCookNTrack
+###fs_cookie_container
+###ftfacookie
+###ftr-cookies
+###fucking-eu-cookie
+###full-content-cookies
+###future-cookie-bar
+###fv-cookie
+###fwCookieBanner
+###fw_cookie
+###fw_cookies_optout
+###fxCookieInfoLayer
+###fxCookieInfoWindowBox
+###g4cookies-banner
+###gPrivacyPanelFrame
+###gServiceCookie
+###g_cookieNotification
+###gabCookieNote
+###gabarit_cnilcookie
+###gacookiemessage
+###gadget-cookies
+###gamigoCookie
+###gan_privacy
+###gant-cookie-law-modal
+###garnier-cookie-info
+###garrampa-cookienotice
+###gb-consent-management
+###gb_cc_bar
+###gb_sm_notification
+###gbc-cookie-directive-top
+###gbcookie
+###gbpl_oba
+###gbteccookie
+###gc_cookie_consent_banner
+###gc_web_user_allow_cookie_box
+###gccookiemessage
+###gcms_cookie_manager
+###gd-cookie-consent
+###gd-cookiebar
+###gdc-container.gdc-container
+###gdc-cookieSettings
+###gdpr--lista
+###gdpr-acceptance
+###gdpr-agreement
+###gdpr-agreement-wrapper
+###gdpr-alert
+###gdpr-banner
+###gdpr-banner-blurred-background
+###gdpr-banner-component
+###gdpr-banner-module
+###gdpr-banner-wrapper
+###gdpr-bar
+###gdpr-block
+###gdpr-blocking-page-overlay
+###gdpr-bottom
+###gdpr-bottom-banner
+###gdpr-bottom-banner-container
+###gdpr-box
+###gdpr-btn:not(button):not(input)
+###gdpr-challenge
+###gdpr-confirm
+###gdpr-consent-banner
+###gdpr-consent-box
+###gdpr-consent-container
+###gdpr-consent-form-wrapper
+###gdpr-consent-holder
+###gdpr-consent-popup
+###gdpr-consent-wrapper
+###gdpr-container
+###gdpr-container-background-fixed
+###gdpr-cookie
+###gdpr-cookie-background
+###gdpr-cookie-banner
+###gdpr-cookie-banner-container
+###gdpr-cookie-bar
+###gdpr-cookie-block
+###gdpr-cookie-blocked-layer
+###gdpr-cookie-consent
+###gdpr-cookie-consent-bar
+###gdpr-cookie-consent-popup
+###gdpr-cookie-disclaimer
+###gdpr-cookie-footer
+###gdpr-cookie-hint
+###gdpr-cookie-info
+###gdpr-cookie-law
+###gdpr-cookie-message
+###gdpr-cookie-message-container
+###gdpr-cookie-message-overlay
+###gdpr-cookie-notice
+###gdpr-cookie-notif
+###gdpr-cookie-overlay
+###gdpr-cookie-policy
+###gdpr-cookie-row
+###gdpr-cookie-wall
+###gdpr-cookieNotice
+###gdpr-cookies
+###gdpr-cookies-form
+###gdpr-cookies-notice
+###gdpr-cover
+###gdpr-dialog
+###gdpr-disclaimer
+###gdpr-filter
+###gdpr-footer
+###gdpr-header
+###gdpr-iesLxz-cookie-canvas
+###gdpr-iesLxz-cookie-message
+###gdpr-info-container
+###gdpr-is-fun
+###gdpr-law
+###gdpr-manager
+###gdpr-message
+###gdpr-message-modal
+###gdpr-modal-bottom
+###gdpr-modal-box
+###gdpr-modal-container
+###gdpr-modal-container-new
+###gdpr-navbar
+###gdpr-new-container
+###gdpr-notice
+###gdpr-notice-container
+###gdpr-notification
+###gdpr-notifier
+###gdpr-o
+###gdpr-optin-section
+###gdpr-options
+###gdpr-overlay
+###gdpr-policy-navbar
+###gdpr-pop
+###gdpr-popup
+###gdpr-popup-container
+###gdpr-privacy-strip
+###gdpr-region
+###gdpr-screen
+###gdpr-script
+###gdpr-section
+###gdpr-sticky-banner
+###gdpr-tooltip
+###gdpr-w
+###gdpr-warden-banner
+###gdpr-warning
+###gdpr-widget
+###gdpr-wrapper
+###gdpr-wrp
+###gdpr.m-active
+###gdpr.row
+###gdpr1Alert
+###gdpr20180829
+###gdprAccept
+###gdprAgree
+###gdprAlert
+###gdprAndCCPAMessage
+###gdprBand
+###gdprBanner
+###gdprBar
+###gdprBnnr
+###gdprBottomLayer
+###gdprBox
+###gdprCenter
+###gdprComplianceBanner
+###gdprComponent
+###gdprConsentPrompt
+###gdprContainer
+###gdprCookie
+###gdprCookieBanner
+###gdprCookieBanner--custom
+###gdprCookieConsentManagedSummary
+###gdprCookieLaw
+###gdprCookiePolicy
+###gdprCookiePopup
+###gdprCookieWrap
+###gdprCookiemManagerModal
+###gdprDialog
+###gdprDiv
+###gdprHeader
+###gdprLPDialog
+###gdprLPDialog_modal
+###gdprLegalNotification
+###gdprMessage
+###gdprNotice
+###gdprNotification
+###gdprPopup
+###gdprRibbon
+###gdprSettings
+###gdprTreated
+###gdprVxConsentBar
+###gdprWarning
+###gdprWindow
+###gdprWrapper
+###gdpr[data-cookies-policy-url]
+###gdpr_accept
+###gdpr_acception
+###gdpr_agree
+###gdpr_area
+###gdpr_b
+###gdpr_banner
+###gdpr_bar
+###gdpr_barretta
+###gdpr_basic
+###gdpr_box
+###gdpr_cnt
+###gdpr_compliance_wrapper
+###gdpr_consent
+###gdpr_consent_banner
+###gdpr_consent_dialogue
+###gdpr_container
+###gdpr_cookie
+###gdpr_cookie-notice
+###gdpr_cookie_banner
+###gdpr_cookie_line
+###gdpr_cookie_modal
+###gdpr_cookie_notice
+###gdpr_cookie_popup
+###gdpr_cookies
+###gdpr_dialogue
+###gdpr_float
+###gdpr_header_wrapper
+###gdpr_ip
+###gdpr_link
+###gdpr_message
+###gdpr_modal
+###gdpr_nav
+###gdpr_notice
+###gdpr_overflow
+###gdpr_overlay
+###gdpr_panel
+###gdpr_placeholder
+###gdpr_pop_container
+###gdpr_popin
+###gdpr_popup
+###gdpr_popup_bg
+###gdpr_popup_container
+###gdpr_user_consent_banner
+###gdpr_veryfirst
+###gdpr_veryfirst_layer
+###gdprbanner
+###gdprbar
+###gdprbx
+###gdprc_bar
+###gdprconsent
+###gdprcookie
+###gdprcookiealert
+###gdprcookiepopup
+###gdprdisclaimer
+###gdprpopup
+###gdprprompt
+###gdprsticky
+###gdprwarning
+###gdrp-bottom-message
+###gdrp-cookieoverlay
+###gdrp-wrapper
+###gdrpNotification
+###gds-cookie
+###gdycn_container
+###gel-cookie
+###gel-cookie-banner
+###geniem-cookie-notice
+###genium-cookie-bar
+###getIn_cookie_notice
+###gfkl_opt_in_cookie_banner
+###gh-cookieb
+###ghcookie-wrapper
+###ghostery-consent
+###gk-cookie-law
+###gld_base_cookie_breve
+###gld_cookie_flag
+###global > .rgpd
+###global-cookie-banner
+###global-cookie-info
+###global-cookie-message
+###global-cookies-banner
+###global-cookiewarning
+###global-message-cookies
+###globalCookieBar
+###globalCookies
+###global_default_cookie_policy
+###glowCookies-banner
+###gm-cookie
+###gm-cookies
+###gn-cookie-accept
+###gnconsent
+###gncookiebanner
+###gnews-pro-cookie-ify
+###golem-cookie-accept
+###google-policy-box
+###google_analytics_hinweis
+###gp-cookie-agreements
+###gpCookie
+###gpdr:not(body):not(html)
+###gpdrBannerAside
+###gpe-cookies-warn
+###gpf-cookiebar
+###gpl-flashes
+###gpsecCookieInformationContainer
+###gr-cookie-notice-banner
+###graze-cookie-message
+###grdp_barre_maxi
+###grdp_barre_mini
+###grey-bar-cookies-contents
+###grh_cookie-accept-cookies
+###gritter-notice-wrapper
+###grokit-cookies-consent-wrapper
+###grpd-consent
+###grsNotifyShell
+###gruntyCookie
+###gs-cookie-policy
+###gs-cookies-review
+###gsk-consent
+###gsoi-consent
+###gtcookies-modal
+###gtcookies-overlay
+###gtd-cookie-consent
+###gtm_cookie_panel
+###gtm_privacy
+###gujems-cookie-banner
+###gve-cookieconsent-consent-popup
+###gw_cookieDirective
+###gwz-cookies
+###h-cookie-policy
+###h24-CookieBar
+###hCookiePanel
+###hLibCookieInfo
+###hLibCookieInfo2
+###hPolicyCookieAlert
+###hamon-alert-cookie
+###hamon-banner
+###han-cookie-bar
+###happycookies
+###hardloop-cookie-notice
+###have-a-cookie
+###haveacookie
+###hays-cookie-notice
+###hb-cc-wrap
+###hbCookieConsentDialog
+###hc_evt_tooltip_modal
+###hc_hugs_cookie
+###hcm_cookie_container
+###hd-cookie-notice
+###hdg-cookie-accept
+###head-bar-cookie-info
+###headCookieAccept
+###head_cookie
+###headband-cookie
+###headband_cookies
+###header-coockie
+###header-cookie
+###header-cookie-bar
+###header-cookie-law
+###header-cookie-notice
+###header-cookielaw-form
+###header-cookies
+###header-gdpr
+###header-info-cookie
+###headerCookie
+###headerCookieArea
+###headerCookieLaw
+###headerCookies
+###headerCookiesAdvice
+###headerCookiesBar
+###headerPrivacyMsgWrap
+###headerTopBarMessageCookies
+###headerTopTracking
+###header_cookie_container
+###header_cookie_warning
+###header_cookies
+###header_tc_privacy
+###headerbar_cookies
+###headercookie
+###hebs-consent
+###hello-cookie
+###hellotrust_cookie_popup
+###heroku-cookie-banner
+###hf-cookie-notice
+###hfc-privacy-bar
+###hh_cookiewarning
+###hi-cookie-box
+###hi-eu-opt-in
+###hidden-cookie-message
+###hiddenCookie
+###hide_cookie
+###hidecookieinfoContent
+###hidecookieinfoObject
+###hinweisCookie
+###hinweis_cookies
+###hinweiscookie
+###hinweiscookieid
+###hiveextcookie_notice_render
+###hm-consent
+###hmcf_cookie_notice
+###hncookiegdpr
+###hofff-consent-banner
+###home-cookies
+###home-legal-infos-bottom
+###home-privacy-coookies
+###hoodCookieInfoBox
+###hotCookieBotDialogBackground
+###hp_cconsent
+###hr-cookies--container
+###hrw-cookie-dialog
+###hs-eu-cookie-confirmation
+###hs_cos_wrapper_cookie_notification
+###hs_show_banner_button
+###hso-cookies-message
+###hst3-cookieconsent-consent-popup
+###ht_cookielaw
+###htmlPopinCookies
+###html_cookieAgree
+###huk_cookie_prefernce_panel
+###hulk_cookie_bar
+###hv-cookie-banner
+###hv-gdpr
+###hvcookieeuDialog
+###hw_cookie
+###hw_cookie_law
+###hydra-fb-notice
+###hz-consents
+###i-can-has-cookie
+###i-cook
+###i-cookie-cnil
+###i-cookies-bar
+###i3-boxCookie
+###iCookieWarning
+###i_cookies
+###ia-cookie-choices
+###ia2_popupcookie
+###iai_cookie_wrapper
+###ibu-online-use-cookie-container
+###ibwarning_eucookies
+###ic_cookies_ar
+###icanhascookie
+###icc_message
+###iceCookieWrap
+###icegram_messages_container
+###icey_cookies
+###icm_cookie_container
+###icn_cookie_notice
+###icoCookieNotify
+###icoCookiesBanner
+###ico_banner
+###ico_cookie
+###icocookie_outer
+###icookies
+###ics-pp-cookies-accept
+###ictsuc_block
+###id-cookie
+###id-cookie-banner
+###id-cookies
+###id-cookiewarn
+###id-warning-cookies
+###idCokWrap
+###idCookieMsg
+###idCookiePerm
+###idCookiePolicyPanel
+###idCookiebar
+###idHrSysGipsDivBlackTransparentOverlay
+###idInformacaoCookie
+###idLGPD
+###idLeyCookies
+###idUserConsentPolicyWarning
+###id__cookieok
+###id_avviso_cookies
+###id_cookie_consent
+###id_cookie_show
+###id_cookieconsent
+###id_div_UseCookies
+###id_msgCnil
+###id_tr_cookies
+###idai-cookie-notice
+###idcookie
+###idea_cookie
+###idealing-consents
+###ideocookie-widget
+###idg-cookie-bar
+###idgcp__section
+###ididitallforthecookie
+###idium-cookies-notification-bar
+###idwcookie
+###idxcookies
+###idxrcookies
+###ietCookiePanel
+###ifab-cookie-banner
+###ifood_cookie
+###iframe-wrap-netinfo-consent
+###iframe_cookie
+###iframe_cookie_site
+###ige-cookie-policy
+###igo_cookie
+###igoweb_cookiepolicy_optout_info
+###iib-cookies
+###iimGdprRoot
+###ij-policy-disclaimer
+###ikanos-privacy-cookielayer
+###ilovecookies
+###imPolicycookiemessage
+###im_cookie_message
+###implicitCookieModal
+###imprint-cookie
+###improove-cookies
+###indexcookies
+###indication_cookie
+###inf_privacy
+###infcookie
+###info-about-cookies
+###info-banner-gdpr
+###info-bar-cookies
+###info-bar-cookies-info
+###info-cookie
+###info-cookies
+###info-cookies-banner
+###info-cookies-bar
+###info-cookies-top
+###infoCookie
+###infoCookieBanner
+###infoCookieCNIL
+###infoCookies
+###infoLocalCookies
+###infoPrivacy
+###info_about_cookies_area
+###info_cookie
+###info_cookie_background
+###info_cookie_exe
+###info_cookie_exel
+###info_cookie_ipzp
+###info_cookie_wrapper
+###info_cookies
+###info_cookies_block
+###info_cookies_l
+###infobanner-cookies
+###infobar-cookie
+###infobar[data-settings="bottom"]
+###infoboxcookie
+###infociasteczka
+###infocookie
+###infocookiefr
+###infocookies
+###infocookies2
+###inforCookieWallPopup
+###inforcwp
+###inform-cookies
+###informacionSobreCookies
+###informacja-o-cookies
+###informacjaOCiasteczkach
+###informacja_ciastka
+###informacja_o_ciasteczkach
+###informacja_o_cookie
+###informacja_o_cookies
+###informationAboutCookies
+###informations-cookies
+###informativa-breve-cookie_wrap
+###informativa-cookie
+###informativa-privacy
+###informativaBreveCookie
+###informativaCookie
+###informativaPrivacyCookiesDomElement
+###informativa_cookie
+###infosCookies
+###infos_cookie
+###infoscookies
+###ing-Cookie
+###ing-Cookiebody
+###ingameCookie
+###init-cookie-container
+###init-popup-cookie
+###inline-cookie-tab
+###inno_cookie_message
+###inpl_cp_cnt
+###inpsyde_cookie_bar_container
+###ins-cookie-popup
+###int-cookies-bar
+###interact-policy-consent
+###intercept-cookies
+###intser_cookie
+###inventise_cookie_policy
+###ip-user-consent
+###ipercookie
+###iprom_cp_wrapper
+###iqitcookielaw
+###irs_cookie_panel
+###is-cookie-warning
+###is-cookiealertr
+###isCookie
+###isaca-consent-wrapper
+###iside-cookies
+###islaeden-cookie-alert
+###it-cookiealert-container
+###it-eprivacy-root
+###ita-cookies-policy
+###itaxi-cookie
+###itc-cookie-notify
+###itc_cookieinfo
+###itlCookieInfo
+###itsbootstrapcookie
+###itv-cookie-notification
+###itv-glob-cookie-policy
+###iur-cookie-popup
+###ivu_privacy
+###iw-cookie-banner
+###iw-cookie-message
+###iws-accept-cookies-container
+###j-cookie-notification
+###j24-consent-cookie
+###jCookiePrivacy_div_testo
+###jQAlertAcceptCookie
+###jQueryCookieDisclaimer
+###jacksonville-optin
+###janela-aviso-lgp
+###jbcookies
+###jc-cookie-notice
+###jentis-consent-main
+###jentis_consent
+###jive-cookie-overlay
+###jix-accept-cookies
+###jix_acceptcookies_box
+###jlcookie_controlContainer
+###jlcookie_controlContent
+###jlcookie_controlMsg
+###jlcookie_controlMsgDeny
+###jlcookie_controlMsgFirst
+###jlp-cookie-container
+###jmCookieMessage
+###jms__cookie-consent__screen
+###journal-cookies
+###jq-cookie-law-info-bar
+###jq_cookies
+###jqmCookieMonster
+###jquery-cookie-law-script
+###jquery-cookie-popup
+###js--cookies
+###js--flash-message-cookies
+###js-TosPrivacy
+###js-accept-cookie
+###js-alert-cookie-window
+###js-band-cookies
+###js-banner-cookies
+###js-c-cookie-consent-banner
+###js-cConsent
+###js-ccpa
+###js-ccpa-banner
+###js-cnil--alert
+###js-consent-information-container
+###js-cookie-02-popup
+###js-cookie-03-popup
+###js-cookie-alert
+###js-cookie-approval
+###js-cookie-bar
+###js-cookie-box
+###js-cookie-consent
+###js-cookie-consent-bar
+###js-cookie-consent-container
+###js-cookie-container
+###js-cookie-dialog-box
+###js-cookie-disclaimer
+###js-cookie-footer-block
+###js-cookie-hint
+###js-cookie-inner
+###js-cookie-layer
+###js-cookie-modal
+###js-cookie-msg
+###js-cookie-notes
+###js-cookie-notice
+###js-cookie-notification
+###js-cookie-policy-banner
+###js-cookie-policy-default
+###js-cookie-popup
+###js-cookie-section
+###js-cookie-text
+###js-cookie-trigger
+###js-cookieBanner
+###js-cookieBox
+###js-cookieConsent-wrapper
+###js-cookieInfo
+###js-cookieWarning
+###js-cookiebar
+###js-cookielaw-alert
+###js-cookieloi
+###js-cookienotice
+###js-cookienotice-spacer
+###js-cookies-banner
+###js-cookies-bar
+###js-cookies-bloc
+###js-cookies-disclaimer
+###js-cookies-footer
+###js-cookies-info
+###js-cookies-msg-hide
+###js-cookies-notification
+###js-cookies-stripe
+###js-cookies-terms
+###js-cookies-wrapper
+###js-cookies.cookies
+###js-cybot-cookiebot-placeholder
+###js-data-protection-note
+###js-ext-cookie
+###js-gdpr-banner
+###js-gdpr-consent-banner
+###js-gdpr-cookie-open
+###js-gdpr-cookie-popup
+###js-gdpr-optin
+###js-gdprForm
+###js-header-cookie
+###js-hook-cookie
+###js-infos-cookies
+###js-ip-cookies
+###js-law--alert
+###js-mbCookieNoticeContainer
+###js-md-cookie
+###js-message-bar-cookie-authorization
+###js-message-bar-cookie-notice
+###js-message[data-id="cookie-policy"]
+###js-message[data-qa="cookie-message"]
+###js-module-cookie-policy
+###js-online-cookie-consent
+###js-optIn-banner
+###js-policy-eucookie
+###js-popup-cookie-block
+###js-popup-cookies
+###js-pullout-cookies
+###js-react-cookie-policy
+###js-site-cookie
+###js-site-cookie-banner
+###js-stormcc-banner
+###js-tar_cookiesBar
+###js-user-cookie-jar
+###jsCookieConsent
+###jsCookieContainer
+###jsCookieNotice
+###jsCookieNotification
+###jsCookiesPanel
+###jsGDPR
+###jsUseCookieTips
+###js\.cookie\.banner
+###js_accept_cookie_bar
+###js_cnil-bar
+###js_consent_bar
+###js_cookie-banner-ask
+###js_cookie-banner-zone
+###js_cookie-consent__main
+###js_cookie-monster
+###js_cookie_modal
+###js_cookie_modal_layer
+###js_cookie_msg
+###js_cookie_window
+###js_cookie_wish
+###js_dataNoticeSettings
+###js_euCookieBanner
+###js_euCookieModal
+###js_gdprTopBar
+###js_global-cookies
+###js_popup_cookies
+###js_pushDownCookieMessage
+###js_toprow_cookie
+###jsalert-cookiesaccept
+###jsn-cookies
+###jst_eu_cookie
+###julianaCookiesAlert
+###jumper_cookies
+###juncookiebar
+###jwsdw-cookieHint
+###jwsdw-cookieHint-container
+###k-cookie
+###k_cookieNotification
+###ka-cookies
+###kaCookieBar
+###kaio-cookie-ban
+###kakeboks
+###kaleva-cookie-consent
+###kanews-cookie-box
+###kashubCookie
+###kb-cookie-banner
+###kbCookiePolicy
+###kcookieinfo
+###kecookiehint
+###keksNotiz
+###keks_notice
+###keksbar
+###kekschecker
+###keksdose
+###kekse.dialog
+###keksi-consent
+###keksivehje
+###keksleiste
+###kg-cookie-popup
+###kgCookieWrapper
+###kgc-consent
+###khcookie
+###king-cookie
+###kjfCookieInfoBox
+###kkcookie
+###kl-cookies
+###klaro .cook-modal
+###km-cookie-accept
+###kn-gdpr-dialog
+###koekbalk
+###koekieBar
+###koekiemelding
+###koekiemonster
+###koekjePopup
+###kolacici-div
+###komplett-bescheuerte-cookie-warnung
+###komunikat-cookie
+###komunikat-cookies
+###komunikatCookies
+###komunikat_ciasteczka
+###komunikat_ciastka
+###komunikat_cookie
+###komunikat_rodo
+###kopageBar
+###kosilka_cookies_hlaska
+###kqs-cookie
+###krn-privacy-center
+###ksf-gdpr-notice
+###kt-cookies
+###ktCookieStatementContainer
+###kt_cookies
+###kuki-opozorilo
+###kukiuorning
+###kukiz
+###kv_gdpr_cookie_info_bar
+###kvkk_overlay
+###kvkk_popup
+###kw-cookie-policy
+###l-cookies
+###ladiescookienotice
+###lago_cookie_bar
+###lapg-cookie-banner
+###lapiech_cookies_field
+###largenet_consent
+###laumatcookiebox
+###lawEU
+###lay-cookielaw
+###layer-cookie
+###layer-cookie-notice
+###layer-cookies
+###layer-politique-gestion-cookies
+###layerAcceptCookie
+###layerCookies
+###layerCookiesPopgom
+###layer_cookie
+###layer_cookies
+###layer_cookies_publicitaires
+###layercookie
+###layout-cookie-banner
+###layout-cookie-consent-banner
+###layout-cookiemsg
+###layout_cookie-consent
+###lc-cookie-bar
+###lc_cookies-main
+###lc_webappCookieQuestion
+###lca-cookie-notification
+###ldCookieConfirm
+###ld_privacy_popup
+###ldcweb-cn
+###lddw-cookie-modal-box
+###ldnk-cookie
+###legal-cookie
+###legal-notification
+###legalLayer
+###legalNoticeCookie
+###legalNoticeHeader
+###legalNotificationEltId
+###legalUE
+###legal_cookie_banner
+###legal_cookie_holder
+###legal_cookie_privacy
+###legal_notice
+###legal_policy_cookies
+###legalbar.legal
+###legalcookie
+###legalinclude-cookie_banner
+###legalplus-cookies-banner
+###legcooki
+###legislation_cookie
+###lemmCookieControlDivContainerBG
+###lemmCookieJsDivContainer
+###lerumCookieContainer
+###les_cookies
+###lexar-accept-cookie
+###lexisnexis-cookies
+###lextro_cookies-bar
+###leyCookies
+###leycookie
+###leycookies
+###leydecookies
+###lf_cookie_msg
+###lgpd-bar
+###lgpd-confirmation
+###lgpd-consent-widget
+###lgpd-cookie
+###lgpd-cookie-banner-janela
+###lgpd-cookie-message
+###lgpd-message
+###lgpd-popup
+###lgpd-wrapper
+###lgpdPopup
+###lgpd_dialog
+###lgpd_optall
+###lh-consent-dialog
+###light_cookies_bar
+###lightbox-cnil
+###lightbox-gdpr
+###lincoscookie
+###lineCookieInfo
+###lisa-consent-container
+###lista-cookies
+###litespot-pro-cookie-ify
+###llCookieBar
+###llar-login-page-gdpr
+###lldcookiepop
+###lm-cookie-policy
+###lmf_privacy_cookiebar
+###lnCookieBar
+###lnkCerrarInformacionCookies
+###lo-privacy-banner
+###loadCookiePolicy
+###logon-snippet-icookie
+###loi-cookies
+###loi_ue_cookiee
+###loreal-cookie
+###lp_eu_container
+###lpcookies
+###lqd-gdpr
+###lscookiesMax
+###lsp_cookie_bar
+###lst-cookie-banner
+###lsw-cookie-bottom-box
+###luiAcceptCookieBar
+###lvp_cookiewarning
+###lwcn-cookie-notice-container
+###lws-cookie-message-outer
+###m-consent
+###m-cookie
+###m-cookie-info
+###m-cookie-overlay
+###m-cookienotice
+###m-global-disclaimer
+###m-notification-cookie
+###m31CookieInfo
+###mCCForm
+###mCookies
+###m_cookie_popup
+###m_wctrlFICookieConsent
+###ma-cmp-container
+###maCookieInfo
+###mab-cookie-notice-wrap
+###macchiato_cookies_wrapper
+###machete_cookie_container
+###macookie
+###mad-client-gdpr-consent-banner
+###magecomp-cookie-template
+###magestat-cookie-law-banner
+###main-cookie-accept
+###main-cookie-banner
+###main-cookies-banner-container
+###main-cookies-info
+###main-privacy
+###mainContainerCookies
+###mainCookieBanner
+###mainCookieBar
+###mainDivLegacyCookie
+###mainPrivacyDiv
+###mainTrackingOptinBox
+###maksimer-cookie-warning
+###malihu-cookies
+###manger-cookies
+###maofree_cookie
+###mappcookie
+###maracookiebox
+###marcoCivil
+###mask_cookies
+###masterpage_divCookieBanner
+###mat-eucookie
+###matomo-consent
+###matomoinfo-flyin
+###matrix-cookie-bar
+###mb_gdpr
+###mb_gdpr_warning
+###mbe-cookie-popup
+###mbientCookieNotice
+###mbm-cookieok_bar
+###mbm-eu_cookie_notify
+###mbmcookie
+###mcCookie
+###mcCookiesLawMessage
+###mcc-cookie-overlay
+###mcd_cookie_popup
+###mch-cookie-consent
+###mcm-cookie-notice
+###mco-consent
+###mcookie
+###md-cookie-directive
+###md-lgpd
+###mde-consent-modal-container
+###mdvCookie
+###me_cookie_zone
+###mekormaConsent
+###mensaje-cookies
+###mensajeCookie
+###mensajeCookies
+###mensaje_acepta_cookies
+###mensaje_aceptar_cookies
+###mensaje_cookies
+###menscookie
+###mention-cookies
+###mention_cookie
+###mention_cookies
+###mentions-cookies
+###message--cnil
+###message-cookie
+###message-cookie-consent
+###message-cookies
+###message-cookies-bar
+###messageCnil
+###messageCookie
+###messageCookiePolicy
+###messageID_user_info_cookiePolicy
+###message_cookie
+###message_cookie_info_accept
+###message_cookies
+###message_rgpd
+###messagecookies
+###messaggio_cookie
+###messaggio_cookies
+###messcookie
+###messengerSpecialCookie
+###metaCiasteczko
+###meteor-cookies-notice
+###metisCookieTopBar
+###metro_cookie_choice_info
+###mev-consent-banner
+###mf_cookie_box
+###mfn-gdpr
+###mg-cookie
+###mg-usercookie
+###mgcookies
+###mhp-cl.mhp-cl
+###microdigital-cookie-backdrop
+###microdigital-cookie-warning
+###mindmedia_cookie_accepted
+###miniccookie
+###minoc-cookie-bar
+###mio-cookie-popup
+###mirvanoscookie
+###miscookies
+###miseucookielaw
+###missatge_cookie
+###mixcookies
+###mj-cookie-consent
+###mk-cookie
+###mkCookieBar-bar
+###mktg_Cookie
+###mktg_Cookie_Wrap
+###mktzr_cookie_policy
+###mlUsingCookies
+###mla-gdpr-light
+###mm-ccpa-notice
+###mm-content-cookies
+###mmMS--bottom-notification
+###mmMS--notification
+###mm_cc_modal_overlay
+###mm_t07_cookie_box
+###mmmmm-cookies
+###mms-consent-portal-container
+###mms-cookie-disclaimer
+###mmsCookieLayer
+###mn_cookieinfo_holder
+###mnd-cookie-bar
+###mnp_cookie_confirmation
+###mntsinfotech-cookie-bar
+###mobiUsingCookies
+###mobile-cookie-disclaimer
+###mobile-privacy-law
+###mobile-sticky-bottom
+###mod-cookieBar
+###mod-cookies-warrning
+###mod-darmas-cookies
+###mod-eprivacyoptin
+###mod-eu-cookies-overlay
+###mod-privacy-policy
+###mod-privacy-policy-banner-1
+###mod-svmb-cookie-layer-1
+###modPrivacySettings
+###mod_cookie
+###mod_cookie_c
+###mod_gdpr_container
+###modal-aviso-cookie
+###modal-aviso-cookies
+###modal-bannercookies
+###modal-card-email-notice
+###modal-cokies
+###modal-cookie-background
+###modal-cookie-consent
+###modal-cookie-info
+###modal-cookie-law
+###modal-cookie-man
+###modal-cookie-setting
+###modal-cookiedisclaimer
+###modal-cookies
+###modal-cookies-backdrop
+###modal-cookies-consent
+###modal-cookies-general
+###modal-cookies-policy
+###modal-cookiewarning
+###modal-gdpr
+###modal-ley-cookies
+###modal-rodo-info
+###modal-root .RgpdPopup
+###modalAceptCookies
+###modalCook.mostrar-modal
+###modalCookie
+###modalCookieBanner
+###modalCookieComp
+###modalCookieConsent
+###modalCookieContainer
+###modalGDPR
+###modalLGPD
+###modalStaticAvisoCookies
+###modal_cookie
+###modal_cookie-mask
+###modal_cookies:not(html):not(body)
+###modal_lgpd
+###modalbakgdpr
+###modalcookies
+###modalrgpd
+###modalsource_privacy_widget
+###modssgdpr_cookie_bar
+###module-about-cookies
+###module-cookies
+###module_cookies
+###monitcookie
+###moomoocookiealert
+###moon-cookies
+###moove_gdpr_cookie_info_bar
+###moove_gdpr_cookie_modal
+###moove_gdpr_save_popup_settings_button
+###morph-cookie-bar
+###moscacookie
+###mostrar_aceptcookie
+###moto-cookies-container
+###motorsCookieMsg
+###mow_cookie_info_dialog
+###mp-misc-cookie-bar
+###mp_cookie
+###mpc_cookie_intro
+###mps-cookie-hint
+###mrcoockie
+###mrcookies-wrapper
+###mrvCookieBanner
+###mrw_cookielaw_banner
+###ms-cookie-banner
+###ms-cookie-consent-banner
+###ms-cookie-policy
+###ms-cookies-info
+###msCookie
+###ms_cookie_ok
+###mscc-cookie-container
+###msccBanner
+###msg-cookie
+###msg-cookie-container
+###msg-cookie-level0
+###msg-cookie-taggare
+###msg-cookies
+###msg-lv-cookies
+###msgCookie
+###msgCookies
+###msgCookies-wrapper
+###msg_LGPD
+###msg_cookie
+###msg_cookies
+###msg_cookies_fbox
+###msgbox_cookies
+###msgcookie
+###msgcookies
+###msgexpandcookies
+###msicookie
+###mspb_alert_cookie
+###msr_cookies
+###mss-legal-banner
+###mssg-cookies-warning
+###mstm-cookie
+###mt-cookie-main-container
+###mt2-cookies-info
+###mtbn-privacy-banner
+###mtcookieconsent
+###mtv-cookie-notification
+###mtv-cookies
+###muma-cookies
+###mvo-cookie-message
+###mw-cookie-policy
+###mxw_rgpd_cookie
+###my-agile-privacy-notification-area
+###my-barracookies
+###my-cookie__consent
+###my-cookie__popup
+###my-cookies-alert
+###myCookieConsent
+###myCookieModal
+###myCustomCookieLayer
+###myLoaderCookies
+###myModal.ccModal
+###myModalCookie
+###myModalCookies
+###myModalrgpd
+###myUserConsent
+###mybyte_media_cookiehinweis
+###mycmpAlertBig
+###mycmpRoot
+###mycookie
+###mycookie_loader_window
+###mycookiebar
+###mycookietip
+###myh-cookieconsent-box
+###mymodal_cookie
+###mz-cookies-policy
+###mz_genericOverlay
+###n-popup-cookies
+###n-popup-privacy
+###n2g_box_cookie_alerte_message
+###nCookie
+###n_cookie_info
+###nacc-overlay
+###nafets_imprint-cookie
+###name-ga-cookie-accept-bar
+###nav-cookie
+###navCookie
+###navCookies
+###nav_cookie
+###navbar-cookie
+###navbar-cookies
+###navbar-privacy
+###navbarCookie
+###navve-cookie-block
+###nbcCookieChoice
+###ncCookieAlert
+###ncRgpdRoot
+###nca-cookieaccept-line
+###ncl-cookie-opt-out
+###nd-cookie-alert
+###nebula-cookie-notification
+###nefos-cookie-container
+###neo_cookie_advice
+###nerolisCookies
+###nestigo-cookie-notice
+###netgraf_cookie_alert
+###netirs_top_cookie_popup
+###nety_cookie
+###new-cookie
+###new-cookies
+###newCookieDisclaimerBanner
+###newCookieHead
+###newCookieNotificationLayer
+###newCookiesAlert
+###newCookiesBanner
+###newPolicyWrapper
+###new_cookies
+###newcookie_x
+###newcookiebanner
+###next_accept_cookie
+###nextcookie
+###nextlevelsCookieBox
+###nfPPBar
+###nf_cookiebanner
+###nfa-cookie-cookie-banner
+###nfcCookieNote
+###nfcookieAcceptModal
+###nge_box_cookie_alerte_message
+###ngo-cookie-policy-banner
+###ngo_box_cookie_alerte_message
+###nh-neth-gdpr-cookie-popup
+###nhm-cookie-notify
+###nibirumail_cookie_advice
+###nimgrowler
+###nk-cookie-consent
+###nk_cookie_privacy_message
+###nl_id_cookie--container
+###nld_cookies
+###nm-cookieWrapper
+###no-cookie
+###no-cookie-doorkeeper
+###noConsentAlertModal
+###nocookie
+###nocookieaktiv
+###nolis-cookie-consent
+###non-blocking-consent-notification
+###nordic-footer__cookies
+###norificare_cookie
+###norm_cookie_note
+###norm_cookies
+###normativaEU
+###notAgreedForCookies
+###notaCookie
+###nota_cookies
+###notatekpl_cookielaw
+###noteOnCookies
+###note_cookie
+###notescookies
+###notice--cookie
+###notice-cook
+###notice-cookie
+###notice-cookie-block
+###notice-cookie-block-info
+###notice-cookie-content
+###notice-cookie-policy
+###notice-cookie-preferences
+###notice-cookies
+###notice.cookies
+###noticeAboutCookies
+###noticeCookies
+###noticePopup
+###noticePrivacy
+###notice_cnil
+###notice_privacy
+###notice_visitor
+###notices-cookie-policy-warning
+###notif--privacy
+###notif-cookie-consent
+###notifCookie
+###notifica_cookies
+###notificacio-cookies
+###notificacion_mensaje_cookies
+###notificare-cookies
+###notification-allowCookies
+###notification-cookie
+###notification-cookies
+###notificationBoxCookiesUsage
+###notificationCookies
+###notification_4cookies
+###notification__cookie
+###notification_cookie
+###notification_cookies
+###notification_cookiewarning
+###notification_of_cookie
+###notificationcookie
+###notify-bar[data-cookie-name="notify-cookies"]
+###notify-policy-cookie
+###notify.cookie
+###notifyCookie
+###notifyCookieBot
+###notifyCookies
+###notify_cookie
+###notifycookies
+###noty-cnil
+###notyCookie
+###nov_popup_cookie_warning
+###nova_cookie_disclaimer
+###novablog-cookie-banner
+###np-cookie-consent
+###np-gdpr-modal
+###np_cookie_law
+###npmCookieBanner
+###npo_cc_notification
+###npo_cc_notification_wrapper
+###nq_cnilbanner
+###nq_cookie_notice
+###nrdq-cookie-notice
+###ns-cookie-button
+###nso_cookie_banner
+###ntcc[data-cookie-bar]
+###nu_bottom_alert_dialog_accept_cookies
+###nuk-cookieMessage
+###nur_cw_cookies_overlay
+###nur_cw_cookies_popup
+###nve_cookie
+###nvx-cookies
+###nw_cookie_alert_box
+###nw_gdpr_view_id
+###nwcook-message
+###nwe-cookie-bar
+###nx_gdpr_modal
+###nx_gdpr_modal2
+###nx_gdpr_modal_main
+###nx_gdpr_modal_main1
+###nx_gdpr_modal_main2
+###nxs-ccpa-banner
+###nyh_cookie-message
+###nzme-notification
+###o-cookie
+###o-cookie-law
+###o-cookiePolicyOverlay
+###o2fCookieConsentDialog
+###o99_cookie-information
+###oH_cookie
+###oPrivallyApp
+###ob-cookies
+###objCookieConsent
+###obt_ga_banner
+###oc_cb_wrapper
+###ocn-cookie-inner
+###ocn-cookie-wrap
+###oct-policy.fixed-bottom
+###ocw_conteneur
+###odav-cookie-consent
+###oddcookie
+###ode-cookie-popup
+###oe-cookie-consent-dialogue
+###oemaceptacion
+###oft_cookieConsent
+###ogcc_barContainer
+###oil-privacy-button
+###oil-privacy-form
+###okCookie
+###ok_cookie
+###okcookie
+###okcookies
+###oknoCookie
+###okno_cookie
+###okno_rcookie
+###okookie-box
+###omnilegal-cookie-bar
+###omtom-cookie-notification
+###onetag_cookie_law
+###onetrust-banner-sdk
+###onetrust-consent-sdk
+###onlyCookie
+###onyx_cookiesinfo_bar
+###onyx_cookiesinfo_spacer
+###openCookie
+###openModalCookies
+###openglobal_privacy_widget
+###optanon
+###optanon-overlay
+###optin-bannerDiv
+###optin-bar
+###optin-optin-header
+###optin-optout
+###optinCookie
+###optinckycontainer
+###or_cookie
+###os_app_cookiewarn
+###osomcookie
+###ost-cookiewall-container
+###ot-ccpa-banner
+###ot-sdk-btn:not(button)
+###otp-privacy
+###otrcookiecompliancediv
+###oupcookiepolicy_message
+###over-cookies-msg
+###overlay-accept-cookies
+###overlay-coockie
+###overlay-cookie
+###overlay-cookie-popup
+###overlay-cookielaw-form
+###overlay-cookies
+###overlayContentCookie
+###overlayCookie
+###overlayCookie2015
+###overlayCookieNotification
+###overlayCookies
+###overlayTradeCCT2
+###overlay_consent
+###overlay_cookie
+###overlay_cookies
+###overlay_pri
+###overlay_privacyCookie
+###overlaycookies
+###overtopcookies
+###ow_cookie_consent_container
+###ownCookieLayer
+###ozy-cookie_notice_banner
+###p80_cookie_notice_wrapper
+###pCookieModal
+###pCookieModalV1
+###pCookieWarning
+###p_ciInner
+###p_lt_ctl00_CookieNotice_pnlCookieNotice
+###p_p_id_cookie_WAR_cookieportlet_
+###p_p_id_cookiespolicyportlet_WAR_cookiespolicyportlet_
+###packt_gdpr_container
+###page > .privacy-optin
+###page-advice-cookie
+###page-cookie-banner
+###page-cookies
+###page-cookies-bar
+###pageCookies
+###pageUseCookieDiv
+###page_cookie_menu
+###pages_cookie_consent
+###pamCookieLayer
+###panCookieContainer
+###panCookieRequest
+###pan_cookies
+###panel-cookie
+###panel-cookie-usage
+###panel-cookies
+###panelCookie
+###panelCookiesInfo
+###panel_cookie
+###panel_cookie_bottom
+###panel_cookie_dol
+###panelcookies
+###pantalla-Cookies
+###pantalla_cookies
+###pao_warning_cookie
+###paperify-pro-cookie-ify
+###paperplane-cookie-notice
+###paragraph_cookie
+###parent_SiteCookieMessageContainer
+###park-cookiebar-el
+###part-cookies
+###pasek_ciasteczka
+###pasek_komunikat_cookie
+###pastilla-cookie
+###pax-cookies-message-container
+###pb-cookies-policy-banner
+###pbAcceptCookies
+###pb_cookie_consent
+###pb_cookie_message
+###pbb-cookielaw
+###pc-cookie-notice
+###pc-cookies-notice
+###pccmsCookiesAlert
+###pd_cookielaw
+###pdpa-popup
+###pdpa-privacy-policy
+###pecr-compliance-banner
+###pecr-cookie-banner-wrapper
+###pecr-cookie-warning
+###permiso_cookies
+###permission-bar
+###permission-bar-prompt
+###permission_request_box
+###perpetuum-cookie-bar
+###pf-cookie-hint
+###pfCookieNotice
+###pfizer_cookies_policy
+###pfwCookiePreferences
+###pg-cookiesInfo
+###pg-gdpr
+###pgdg-gdpr
+###ph-cookies-akkoord
+###phCookieConsent
+###phew_cookie_popup
+###phrase_notification_cookies
+###piano-infobar-container
+###pie_menu_cookies
+###piskotOpozorilo
+###piskoti
+###piskotki
+###piskotki_div
+###piskotki_obvestilo
+###piskotki_wrapper
+###piwik-banner-container
+###piwik-flyin
+###pixcookie
+###pjAcceptCookieBar
+###pl-sp-privacy-button
+###pl_cookie
+###pl_cookies
+###platform_cookie_policy_bar
+###please-approve-cookies
+###plenty-cookie-bar
+###plg-cookienotice
+###plikiCookiesPop
+###plugin_cookie_int
+###pm--cookie-permission
+###pm-cookie
+###pm-cookie-banner
+###pm-cookie-consent
+###pm-cookie-notif
+###pm-privacy-banner
+###pm13_cookie_info
+###pm15_cookie_info
+###pm_cookies
+###pmc_toupp_notice
+###pnl-cookies
+###pnl-cookies-warning
+###pnlApproveCookiesUsage
+###pnlCookie
+###pnlCookieBanner
+###pnlCookieBar
+###pnlCookieConsent
+###pnlCookieFooter
+###pnlCookieInfo
+###pnlCookieMessage
+###pnlCookieNotice
+###pnlCookieStatus
+###pnlCookies
+###pnlCookiesNotification
+###pnlEUCookieBanner
+###pnlPrivacy
+###pnn-cookie
+###pnscookie
+###poityka-ciastek
+###pol-cookies
+###polCockie
+###polCookies
+###pol_cookies
+###poland_cookie_cont
+###policiyAlert
+###policy-accept
+###policy-banner
+###policy-cookie
+###policy-cookie-notice
+###policy-cookies-banner
+###policy-div
+###policy-modal-banner
+###policy-popup
+###policy-settings-info
+###policy-validation
+###policy-warning-container
+###policy-warning-popup
+###policy-window
+###policyAlertPanel
+###policyBannerWrapper
+###policyBar
+###policyConsent
+###policyCookie
+###policyCookieInformation
+###policyCookies
+###policyCookiesLayer
+###policyMessage
+###policyNotice
+###policyPanel
+###policyPopup
+###policyPopupContainer
+###policy_cookie
+###policy_header
+###policy_message
+###policy_notice
+###policy_wrapper
+###polish-cookie-note
+###politica-cookies
+###politica-privacidade-lgpd
+###politicaCookie
+###politicaCookies
+###politicaDeCookies
+###politicaPrivacidade
+###politica_cookies
+###politica_de_cookies
+###politica_de_cookies_container
+###politica_de_privacidad
+###politicacookies
+###politique_confidentialite
+###polityka-ciastek
+###polityka-cookie
+###polityka-cookies
+###polityka-prywatnosci
+###polityka-prywatnosci-tlo
+###politykaPrywatnosciHolder
+###polityka_cookie_exel
+###polityka_cookies
+###polityka_okno
+###politykacooki
+###politykacookies
+###politykaprywatnosci
+###poolcookiebadge
+###pop-cookie
+###pop-cookie-backdrop
+###pop-cookies
+###pop-gdpr
+###pop-up-cookie
+###pop-up-cookies
+###popCookie
+###popInCookieContainer
+###popUpCookies
+###popUpCookiesContainer
+###popUpInfosLegal
+###pop_cookies
+###pop_rgpd
+###pop_site_cookie
+###popcc12
+###popcook
+###popcookie
+###popcookies
+###popin-accept-cookie
+###popin-cgu-cookie
+###popin-cnil
+###popin-cookie
+###popin-cookies
+###popinCookie
+###popinCookies
+###popin_cookie
+###popin_cookies
+###popin_infoscookies
+###popin_tc_privacy
+###popincookie
+###poprgpd
+###popup--cookies
+###popup-accept-cookies
+###popup-announcements
+###popup-ccpa
+###popup-container-aviso
+###popup-coockie
+###popup-cookie
+###popup-cookie-agreement
+###popup-cookie-block
+###popup-cookie-cnil
+###popup-cookie-container
+###popup-cookie-contenedor
+###popup-cookie-policy
+###popup-cookie-policy-small
+###popup-cookie-wall
+###popup-cookieConsent
+###popup-cookies
+###popup-cookies-18
+###popup-cookies-bottom
+###popup-cookies-overlay
+###popup-cookies-police
+###popup-disclaimer
+###popup-gdpr
+###popup-mask-rdo
+###popup-privacypolicy
+###popup-webpage-cookie
+###popupAvvisoCookies
+###popupCNIL-container
+###popupCookie
+###popupCookies
+###popup_cnil
+###popup_cookie
+###popup_cookie_contener_main
+###popup_cookie_info
+###popup_cookie_information
+###popup_cookie_law
+###popup_cookies
+###popup_cookies_modal
+###popup_cookies_policy
+###popup_info_cookie
+###popup_loicookie
+###popupcookie
+###popupcookies
+###popupdescookies
+###popupgdpr
+###popuprgpd
+###portal-cookie-info
+###portal-cookieoptout
+###positiv_cookies_field
+###powa-cookie
+###pp-cookie-notice
+###ppCookies
+###pp_cookie
+###pp_cookie_consent
+###pp_cookielaw
+###ppa-cookies
+###ppcookie
+###ppms_cm_bar_overlay
+###ppms_cm_popup_overlay
+###pq-page-top-cookie
+###praivacy-cookie-notice
+###praivacy-notice
+###pravda-cookie-usage
+###preferences-cookie-consent
+###pregdpr
+###preheader_cookies
+###prettyCookie_message
+###prevent_cookies
+###prfrm_cookie_bnr
+###pricacy_popup
+###pricepirates-cookie-accept
+###prihvacamKolacice
+###primus-cc
+###prio1-cookie-consent-small
+###privacidadBar
+###privacy-advise
+###privacy-alert
+###privacy-alert-blur
+###privacy-banner
+###privacy-bar
+###privacy-bottombar
+###privacy-consent
+###privacy-consent-banner
+###privacy-consent-overlay
+###privacy-cookie
+###privacy-cookie-banner
+###privacy-cookie-info
+###privacy-cookieMessage
+###privacy-disclaimer
+###privacy-fixed-bottom
+###privacy-footer
+###privacy-hint
+###privacy-information-cookie-notice
+###privacy-layer
+###privacy-message-bar
+###privacy-msg-container
+###privacy-note
+###privacy-notice-box
+###privacy-notification-banner
+###privacy-overlay-banner
+###privacy-police
+###privacy-policies-banner
+###privacy-policy-banner
+###privacy-policy-bar
+###privacy-policy-global-message
+###privacy-policy-link-wrapper
+###privacy-policy-modal
+###privacy-policy-note
+###privacy-policy-notice
+###privacy-policy-notification
+###privacy-policy-panel
+###privacy-policy-popup
+###privacy-policy-updated
+###privacy-pop-up
+###privacy-popup
+###privacy-popup-container
+###privacy-shield
+###privacy-statement-wrapper
+###privacy-statement:not(.checkbox)
+###privacy-toast
+###privacy-update
+###privacyAndCookieNoticePanel
+###privacyAndCookiesConfirmation
+###privacyAnnouncement:not(body)
+###privacyBanner
+###privacyBar
+###privacyBox
+###privacyConsent
+###privacyCookie
+###privacyCookieDisclaimer
+###privacyCookieLayer
+###privacyCookiesPolicyMessageContainer
+###privacyDisclaimer
+###privacyHint
+###privacyNotePopupContainer
+###privacyNoticeUpdate
+###privacyNotification
+###privacyNotifyContainer
+###privacyOptionsCookieOptIn
+###privacyOuterContainer
+###privacyOverlay
+###privacyPolicyBar
+###privacyPolicyBox
+###privacyPolicyCookies
+###privacyPolicyInfo
+###privacyPolicyLayer
+###privacyPolicyLayerN
+###privacyPolicyNote
+###privacyPolicyOverlay
+###privacyPolicyPopup
+###privacyPopup
+###privacySlider
+###privacyTopBar
+###privacyWarining
+###privacyWarningBanner
+###privacyWrapper
+###privacy_accept
+###privacy_agreement
+###privacy_bandeau
+###privacy_banner
+###privacy_bar
+###privacy_barre
+###privacy_blockscreen
+###privacy_box_container
+###privacy_cookie
+###privacy_cookie_note
+###privacy_cookie_popup
+###privacy_cookiepolicy
+###privacy_cookies
+###privacy_cover
+###privacy_info_content
+###privacy_info_overlay
+###privacy_law
+###privacy_message_alert_div
+###privacy_modal
+###privacy_notice
+###privacy_policy_banner
+###privacy_policy_bar
+###privacy_policy_link_window
+###privacy_popup
+###privacy_terms_cookies
+###privacy_widget
+###privacybanner
+###privacybanner_modal
+###privacybar
+###privacycookie
+###privacycookie-div-supertop
+###privacyhint
+###privacymanager
+###privacymessage
+###privacynotice
+###privacypolicy:not(input)
+###privacypolicycontainer
+###privacypopup
+###privatBanner
+###private-policy
+###privatePolicyHolder
+###pro-cp-dialog-banner
+###pro-cp-dialog-wrapper
+###pro_cookiebox
+###pro_euclp_cookies_box
+###prompt-cookies
+###pronamic_cookie_holder
+###prosite_cookie_advarsel
+###psCookieDisclaimer
+###psCookieSliderConBot
+###ps_cookiebar_cookies
+###ptCookieBarWrap
+###ptCookieConsent
+###ptalkcookie
+###publicCookieUsage
+###purch-gdpr-banner
+###push_alert
+###pv-cookie-dialog
+###pw-cookie-banner
+###pw_cookies
+###pwcc-cookie-consent
+###pwcr-cd-cookie-usage-disclaimer
+###pwebcookiesnotifi
+###pww-cookie
+###px-cookie-bar-extended
+###px-cookie-consent
+###px-cookie-consent-overlay
+###px-cookiebar
+###pxa-cookie-bar
+###q-cookie-box
+###q8-cookie-compliance
+###qPrivacyBanner
+###qbCookieConsent
+###qb_cookie_consent_main
+###qball_co_cookie-footer
+###qc_choice_3pc_frame
+###qg-toast
+###ql-cookie-consent-box
+###qookies_habitat
+###qthemeCookieBanner
+###qubit-eu-cookie
+###r42CookieBar
+###rabCookieSlider
+###raisio-cookie-notification
+###ramka_ciasteczka_info
+###rapidstaff-cookie__banner
+###rapidweaver_privacy_message
+###ras-cookie-container
+###razer-pro-cookie-ify
+###rb-cookie-container
+###rb_cookieBox
+###rbiCookiePolicy_pushDownBoxWrapper
+###rbiCookiePolicy_spacer
+###rc-ley-cookies-dialogo
+###rcCookiePopUp
+###rcCookies
+###rdm-cookie-consent
+###react-app-CookieConsentBanner
+###react-cookie
+###react-cookie-approval
+###react-cookie-bar
+###react-cookie-warning
+###react_element__cookiebar
+###red_cookie_restriction
+###redim-cookiehint
+###redim-cookiehint-bottom
+###redim-cookiehint-modal
+###regens-cookie-setting
+###region_cookies_infos
+###rek_blocker
+###remember_cookie
+###reminder.privacy-reminder
+###remoteCookie
+###render-cookies-notification
+###requestCookies
+###res-cockie
+###resultCheckCookieMSG
+###results-cookies-alert
+###rg-cookie-check
+###rgPrivacyBanner
+###rg_container_cookie
+###rgdp.rgpd
+###rgpb.rgpd
+###rgpd-accept-cookies
+###rgpd-band
+###rgpd-banner
+###rgpd-bar-container
+###rgpd-consent
+###rgpd-cookies
+###rgpd-cookies-modal
+###rgpd-cookies-modal-wrapper
+###rgpd-general
+###rgpd-infos
+###rgpd-little-validated
+###rgpd-modal
+###rgpd-msg.alert
+###rgpd-notice
+###rgpd-overlay
+###rgpd-popin
+###rgpd-popup-container
+###rgpd-wrapper
+###rgpd.rgpd
+###rgpd.smart-popin
+###rgpd.without-overlay
+###rgpdAlert
+###rgpdCookiesHacce
+###rgpdModal
+###rgpdXooit
+###rgpd__info__
+###rgpd_backdrop
+###rgpd_bandeau
+###rgpd_banner
+###rgpd_bloc
+###rgpd_bouton
+###rgpd_demande
+###rgpd_main
+###rgpd_main_content
+###rgpd_obj
+###rgpd_popin
+###rgpd_pp
+###rgpd_tray
+###rgpdbar
+###rgpdbox
+###rgpdcookie
+###rgpdcookie-panel-root
+###rgpdmsg
+###rgpdpopup
+###rgs-main-context-bar
+###rgwp-cookie-modal
+###rgwp-cookie-policy
+###rhulcookieaccept
+###ribbon-cookies-agree
+###rich-id-cookies-regulation
+###richpages_cookieconsent
+###rk-accept-cookies
+###rm-cookieconsent
+###rm-cookies-wrapper
+###rnCookieConsent_popup
+###rndcookie_banner
+###rnw_cookies_banner
+###rodo-bar
+###rodo-block
+###rodo-info-box
+###rodo-modal
+###rodo-modal-all
+###rodo-overlay
+###rodo-pop
+###rodo-popup-container
+###rodo-popup-overlay
+###rodoAlert
+###rodoBox
+###rodoCookie
+###rodoInfoForm
+###rodoNotificationWrapper
+###rodoRow
+###rodoWrapper
+###rodo_accept
+###rodo_env
+###rodo_modal
+###rodo_popup
+###rodoinfo
+###rodonew
+###rodonf-app-ux
+###root-cookie-notice
+###root-cookiebanner
+###rotorCookie
+###row-cookie
+###rqif_info_banner
+###rs_cookie_declaration
+###rs_cookie_manager_popup:not(.modal)
+###rs_cookie_manager_popup_shadow
+###rsseo-cookie-accept
+###rtPrivacyBanner
+###rtl-cookie-message
+###rtl-cookie-notification
+###rtl_cookie_small
+###rto-cookie-notice
+###rtpprivacycontent
+###rtsCookies
+###rtveCookiePolicy
+###ruban-cnil
+###rvacookies
+###rvdwCookiePolicy
+###rw_accept_cookie
+###rw_alert_cookies
+###rwd-cookie-message
+###rwdcookiesinfo
+###rws-cookie-bar
+###rx-cookie-wrapper
+###rynCookiePolicy
+###s-avviso-cookie
+###s-cookie
+###s-ui-cc-container
+###s-ui-cc-navbar
+###s1-cookie-banner
+###s112_accept_cookies
+###s2m_cookies_optin_dialog
+###s4c-cookie-wrapper
+###s_cookie_msg
+###s_s_cookieInfoContainer
+###saglasnost-container
+###salsa-policies-advice
+###sanoma-consent-bar
+###sanoma-consent-bar-mobile
+###sap-disclaimer
+###sb-cookie-compliance-overlay
+###sb-privacy-policy
+###sbEuCookieConsentBox
+###sbeu-cookie
+###sc-alert-box-wrapper
+###sc-cookie-notification
+###sc-cookies-info
+###sc-gdpr-box
+###scCookieModal
+###sc_thispolicy
+###scc-consent
+###scc-cookie-bar
+###scc-cookie-consent
+###scc-mask
+###sccCookieBanner
+###schifters-gdpr-container
+###scmp-popin
+###scms-cc-cookie-bar
+###scnb-cookie-bar
+###sd-eu-cookies
+###sdCookieBanner
+###sdbCookieLegalContainer
+###sdgdpr_modal_wrapper
+###se-cookies-message-container
+###seccao1 > #cookie
+###secciocookies
+###section-cookie
+###section-cookie_notitication
+###section-cookies
+###section_cookie
+###section_rgpd
+###seedDivCookieLawId
+###seedDivCookiewLawInfo
+###segnalazione_cookies_ext
+###selly-cookies
+###semocookie-handler
+###seobloggertips-cookie-ify
+###seraCookie
+###seravo-cookie-banner
+###services-cookie
+###sf-cookie-consent
+###sf-cookie-modal
+###sfCookieWarningBar
+###sfCookieWarningBarSpacer
+###sfh-cookies-info
+###sg-cookies-wrapper-outside
+###sgCookiesPolicyBar
+###sg_cookie_consent_message
+###sgcookies
+###sgs_cookie
+###shadow-cookies
+###shaim_cks
+###shaim_cks_eu
+###shareProfileLink
+###shared_gdpr_footer
+###shark-cookie
+###shop-cookie
+###shopify-section-cookies
+###shopify-section-cookies_law
+###shopify-section-cookies_popup
+###shopify-section-gdpr-cookie-notice
+###shopify-section-gdpr-dialog
+###shopify-section-gdpr-notice
+###shopify-section-global-cookie-consent
+###shopillaxcookielaw-wrapper
+###shorthand-gdpr-container
+###shortpixel-cookies
+###show-cookie
+###showCookie
+###showCookieInfo
+###show_banner_cookies
+###show_cookie
+###show_cookie_content
+###show_cookies
+###showcookie
+###showcookiealert
+###showcookieinfo
+###showcookielaw
+###showcookieprivacy_popup
+###showcookietxt
+###si-bst-cookie-notice
+###siee-cookie-bar
+###sikomor_cookies
+###simple-cookie
+###simple-cookie-banner
+###simple-cookie-consent
+###simple-eu-cookiecontrol
+###simple-eu-cookiecontrol-overlay
+###simpleAcceptCookie
+###simpleCookieBar
+###simpleCookieConsent-popup
+###simpleCookieDialog
+###simpleclick_uis_cookieconsent
+###simplecook
+###simplecookienotification
+###simplecookienotification_v01
+###site-alert-cookienotice
+###site-banner-gdpr
+###site-cookie
+###site-cookie-notice
+###site-cookie-policy
+###site-cookiebar
+###site-cookies
+###site-cookies-banner
+###site-footer__cookies
+###site-footer_alert_cookie
+###site-notification-cookie-consent
+###site-notification-policy-change
+###site-optin-header
+###site-we-use-cookies
+###site-wide-cookie-message
+###siteCookie
+###sitePrivacyModal
+###site_cookie_warning
+###site_cookies_warning_id
+###site_footer__cookie_consent
+###site_info_cookies
+###site_msg_cookie
+###sitecookiebanner
+###sitemanager-cookie-bar
+###siteusescookiewarningstrip
+###siu_cookiehinweis
+###siv_cookieBanner
+###sizzle-gdpr
+###sizzle-gdpr-supressor
+###sk-cookies
+###skcookies
+###skpcsb-cookie-banner
+###skv-cookie-banner
+###sky-cookie-bar
+###skycom-cookie-wrapper
+###sl_cookie_info
+###slapukai
+###slashadmin_eucookielaw
+###slc-cookie-banner
+###slcookieconsent
+###slickModalCookie
+###slide-in-cookie
+###slide_header_cookies
+###slideit-cookie
+###sliding-popup-cookies-cont
+###slidingCookieDiv
+###slx_cookie_law
+###sm-eu-cookie-banner
+###sm_optin_btn_review
+###small-popup-cookies-overlay
+###smart-cmp-host
+###smartcookies_frame
+###smartweb-eucookie-werra
+###smcc_header_cookieaccept
+###sme_cookie
+###smecookienotice
+###smile-cookie-wrapper
+###smileCookieControl
+###smile_cookieception_bandeau
+###sn_cookies
+###snackbar-cookie-info
+###snippet--cookies
+###snippet-cookieAllow-cookieAllow
+###snippet-cookieBar-
+###snippet-cookieControl-cookieInfo
+###snippet-cookieStrip-cookieStrip
+###snippet-cookiesAgreementControl-bar
+###snmcookies
+###soi-global-privacy-info
+###soopacookie
+###sottocookie
+###soycontrolcookies
+###soycontrolcookies_container
+###sp-cookie-consent
+###sp-gdpr-consent-ui
+###spartooCookies
+###spc-popup-cookie
+###spcookiegdpr
+###speakout-cookie-template
+###spfcookiebanner
+###spicookiebanner
+###spletko-cookies
+###spoilerCookie
+###spotbuzz-pro-cookie-ify
+###sprachhinweis
+###sprd-consent
+###sputnik_cookie_policy_banner
+###sr-cookie-policy
+###sraCookieBanner
+###sscCookieStatement
+###sst-footer-ccpa-note
+###st-cookie-policy-popup
+###stCookiebox
+###st_cookie
+###st_gdpr_iframe
+###sta-gdpr-modal-overlay
+###stars-cookie-notification
+###starter-pro-cookie-consent
+###startsiden-cookie-disclaimer
+###startsiden-gdpr-disclaimer
+###static-cookie-policy-message
+###stdCookie
+###stg-privacy-bar
+###sticky-bar-cookie-wrapper
+###sticky-bar-gdpr
+###sticky-cookie-warning
+###sticky-cookies
+###sticky-popup-cookies
+###stickyWarningCookiePolicy
+###stickycookiePolicy
+###stickynote4cookies
+###stitch-cookie-notification
+###stk-cookie-bar
+###stm_gdpr_popup-main
+###stnc-cookiecontract
+###sto-cookieMessage
+###stopcookinfo
+###storefront_cookie_widget
+###storm-cookie
+###stormCookieMelding
+###stormCookiePopup
+###stormCookieWall
+###stormdigital-cookieWallId
+###storyify-pro-cookie-ify
+###stravaCookieBanner
+###strawberry-cookiebar
+###stripe-cookie
+###stripe_hammon
+###stt-cookie
+###subserviceCookiesBar
+###sui-TcfFirstLayerModal
+###summus_cookie_info
+###sun-cookieMessage
+###sun-cookieMessageInner
+###supermag-cookie-ify
+###survey_bar
+###suti.suti
+###sutiTajekoztato
+###suti_figyelmeztetes
+###suti_figyelmeztetes_ablak_fix
+###suti_info
+###suti_kezeles
+###sutibox
+###sutik
+###sutik_hasznalata_figyelmeztetes
+###sutike
+###sv-cookie-consent
+###svtCookieInformationContainer
+###swEUCookiesID
+###sw_cookies
+###swcookies-wrapper
+###swe-cookie-banner-small
+###swl-cookie-wrapper
+###sxc_confirmation
+###sxoCookiesAlert
+###syl-cookie-monster
+###synapse-cookie-banner-1
+###synergi_cookie_wrapper
+###synergi_inner_information
+###sysCookieMessage
+###sysCookies
+###szCookiePolicy
+###szcookiewrp
+###szkCookieInfoBox
+###szoCookieBar
+###t2meucookielaw
+###t3CookieNotice
+###t4m-dsgvo-consent
+###t_cookieInfo
+###table-cookie
+###tarteaucitron-overlay
+###tarteaucitron-root
+###tarteaucitronAlertBig
+###tavisocookies
+###taxiCookieConsent
+###tbCookieConsent
+###tbweb_cookies_footer
+###tc-consent
+###tc-privacy-wrapper
+###tc_cnil_popup
+###tc_cookie_opt
+###tc_priv_CustomOverlay
+###tc_privacy
+###tc_privacy_bottom_fix
+###tc_privacy_wrapper
+###tc_rgpd_popup
+###tcccookies
+###tcn_notice
+###tealium-cookies
+###tealium_ensModalBG
+###teconsent
+###temelcookiepop
+###template-cookie-policy
+###tenantAcceptText
+###terminosCookies
+###termly-code-snippet-support-banner
+###termo-de-cookie
+###termo-de-cookie_invi
+###termos-cookie
+###terms-privacy-consent
+###termsAndPrivacyFloater
+###termsNotice
+###terms_cookie_container
+###termscookie
+###tescoCookieNotification
+###tesco_cookie_widget
+###tesco_policy_widget1
+###textAcceptCookies
+###textInfoCookies
+###texto_aviso_cookies
+###texxas-cookie-accept
+###tfcookie-backdrop
+###tfcookie-modal
+###tfe-cookie-bar
+###tfe-cookie-lightbox
+###tfe-cookie-lightbox-smokelayer
+###tfl-cookies
+###tfm_dsgvo_disclaimer
+###tfo_cookies
+###tgbgdpr-overlay
+###th--eucookie
+###the-cookie
+###theCookie
+###theCookieNote
+###theLawCookie
+###the_cookies3
+###thecookie
+###theeclbox
+###theme_cookie
+###theseusCookiePolicy_ulCookiePol
+###thinkconsent-notice-wrapper
+###thiscookiemessage
+###tiFy_CookieLaw
+###tid_cookieWarning
+###tify_cookie_policy
+###tindie_cookie_alert
+###tins_cookie_bar
+###tipCookies
+###tiroir_cookie
+###tiv-cookie-bar
+###tl-cookie-popup-box
+###tlCommonGdprBanner
+###tlCookieComplienceInitialWrapper
+###tlo_cookie
+###tlp-cookies-popup
+###tlscookieseu-bar
+###tmPrivacyDialog
+###tmPrivacyOverlay
+###tmPrivacyStyle
+###tmp_legal_bar
+###tmrc_cookie_footer_info
+###tn-cookiebar
+###tnw_cookieconsent
+###tnzcookie_bottom
+###toast-cookies
+###toastLgpd
+###toasts > #toastsWrapper
+###tofino-notification
+###toog-cookies
+###toolbar-cookie
+###toolbar_cookies
+###tooltip-cookie
+###tooltip-privacy-shown
+###top-cookie-section
+###top-cookie-wrapper
+###top-message-info-cookie
+###topCookie
+###topCookieBanner
+###topCookiesID
+###topEuCookieAlert
+###top_cookiePopUp
+###top_cookie_popup
+###top_header_cookie_message
+###topbar-cookie-container
+###topbar-cookies
+###topcookie
+###tos-banner
+###tosbanner
+###townside-cookiebar-outer
+###tp-cookie-script
+###tpl-cookie-policy
+###trCookie
+###trackCookieBar
+###tracker-banner
+###tracker-warning
+###trackers-ask-consent-gdpr
+###tracking-agree.sticky-bottom
+###tracking-consent
+###tracking-consent-block-page
+###tracking-consent-dialog-new
+###tracking-consent-header-container
+###tracking-cookies
+###trackingCookie
+###trackingPermissionBar
+###tracking_consent_modal
+###tracking_hinweis
+###trackingcookie-banner
+###tranzystorcookies
+###travelta-cookie-bar
+###triad_gdpr_consent
+###trigCookie
+###tripix-cookie-consent-notice
+###trjs-cookies-element
+###tronic-gdpr
+###truongblogger-cookie-ify
+###truste-banner
+###truste-button
+###truste-consent-track
+###truyo-consent-module
+###ts_cookie_info
+###tscookiebar
+###tso-cookie-bar
+###tt-cookie-alert
+###tt-cookie-badge
+###tt-cookie-check
+###tt-cookie-notice
+###tt-cookie-overlay
+###tt-cookie-window
+###tt-cookiebar-frame
+###tt_cookies
+###ttcookie-outer
+###ttg-accept-cookie
+###ttgFooterCookieHinweis
+###tto-cookieMessage
+###ttr-cookie-banner
+###tu-cookies-eu-compliance
+###tui_widget_CookieNotifier_0
+###tv-cookie
+###tv-cookie-1
+###tv2-cookie-alert
+###tv2cookiebar
+###tvlcookies
+###tvsa-cookie
+###tw-cookie
+###twCookieConsent
+###twcCookieDiv
+###tweCookie
+###tx-emhcookiebanner-bannerwidget
+###tx-mgenbase-cookieconsent-notice
+###tx_cookieconsent_preferences_edit
+###tx_cookies
+###tx_cpscookieinfobox_pi1
+###tx_fe_cookies-banner
+###tx_mpcpiwik_banner_container
+###tx_wwcookie_message
+###txtCookies
+###tytul_rodo
+###uapp-banner
+###ub24-cookie-container
+###uc-banner-modal
+###uc-btn-outside-click-banner-modal
+###uc-central-banner-modal
+###uc-privacy-chip
+###ucn-gdpr-banner
+###udf-cookie-message
+###udl-cookie
+###udtCookiebox
+###ue-cookie-notify
+###ue-cookie-warning
+###ue_cookie
+###uecookie
+###uecookies
+###uf-privacy-banner
+###ufg-cookies
+###ug3-cookie-info
+###uhfCookieAlert
+###ui-allow-cookies
+###ui-cookie
+###ui-cookie-policy
+###ui-cookie-support-notification
+###ui-id-cookies
+###uiCookieConsent
+###ui_cookieblk
+###ujszo_cookiealert
+###uk-cookie-use
+###ukCookie
+###ukCookieHeader
+###ukCookiePopUp
+###ukCookiePopup
+###uk_cookie_container
+###ukoo-cookies-wrapper
+###ukoo_cookielaw
+###ukoocookielaw
+###unCookieCnt
+###un_cookie_message
+###uni-cookie-policy
+###uni_accept_cookie
+###unideb-gdpr-block
+###unileverCookiePopup
+###unisanta-cookie-mensagem
+###unitcookieonpageBar
+###unitscookie-law
+###uo_cookie_banner
+###uoc_cookie_intro
+###uodcookienotice
+###up-cookie
+###up-gdpr-banner
+###updatedPrivacyPolicy
+###us-cookies
+###us_cookies_msg
+###uscookies
+###use-of-cookie
+###useCookieAgreement
+###useCookiesAcceptBlock
+###useCookiesCont
+###use_cookie
+###use_cookie_remind
+###use_cookies
+###use_of_cookie
+###usecookies
+###user-agreement-notify
+###user-cookie-confirm
+###user-cookie-message
+###user-cookie-msg-box
+###userAgreementBanner
+###userConsentDatas
+###user_cookies
+###user_optin_banner
+###usercookieshow
+###usermsgCookie
+###usingCookies
+###usingCookiesBanner
+###using_cookies
+###usoPoliticaCookies
+###uso_cookies
+###uso_dei_cookie
+###usocookies
+###usrConsent
+###usrcookies
+###ustawaCookie
+###ut-cookie-bar
+###ut_cookie_warning_bar
+###utilisation-des-cookies
+###utilisationCookies
+###v-cookielaw
+###v-cookiemessage
+###v4core_cookie_settings
+###va-cookie-consent
+###va-cookie-consent-bg
+###vad-cookie
+###valid_cookies
+###validationCookie
+###varian-gdpr-consent
+###vc-bar-cookie
+###vcm-v-consent-sdk
+###vd-cookie-alert
+###vd-cookie-banner
+###vd-cookie-banner-spacer
+###vencookies
+###ventana-cookies
+###ventanaCookies
+###veravisocookie
+###verificar-cookies
+###vesti-GDPR-frame
+###vh-cookie-terms
+###vhb-consentlayer
+###viewCookies
+###viewlet-cookiepolicy
+###viewlet-disclaimer
+###vismo-cookie-wrapper
+###viucom-cookie-bar
+###vive-cookie-notice
+###vk_cookie_manager--banner
+###vm-cookie-bar
+###vml-cookie-notice
+###vogons-cookies-master
+###voiello-cookie-disclaimer
+###vop-cookie-control
+###vp-js-cookies__notice
+###vrgpd_bandeau
+###vrn-cookie
+###vs-cookie-warning
+###vs-cookiehinweis
+###vs-cookies-policy
+###vsccookieConsent
+###vscookieAlertCont
+###vsebinaOpozorilaCookie
+###vsm_cookie_check
+###vt-ccb-notify
+###vtrick-pro-cookie-ify
+###vu_consent
+###vu_layer_cookie_content
+###vue-app-privacy-bar
+###vueCookie
+###vueGdpr
+###vue_cookielaw
+###vvc_cookie
+###vwdCookieBar
+###w-cookies-notice
+###w18lara_tgplugin_consent
+###w2u_cookie_notice
+###w357_cpnb
+###w3s-cookies
+###w4u-cookie-info
+###wCookieNotice
+###waCookie
+###waGDPR
+###wa_cmpOverlay
+###waf-cookie-popup
+###wagento-cp-wrap
+###wah-gdpr-popup
+###wantcookies
+###warn-cookies-area
+###warnCookies
+###warn_cookies
+###warning-cookie
+###warningCookies
+###warning_EU_cookiemsg
+###warning_cookie
+###warning_cookies
+###warningcookieId
+###warp_cookie_warning
+###warp_cookie_warning_mobile
+###warstwa_cookie
+###wbCookiePolicy
+###wbo-cookie-layer-wrapper
+###wc-gdpr-widget
+###wck-cookie-popup-infobox
+###wcpConsentBannerCtrl
+###wcss-cookie-banner
+###wd-consent-tool
+###wd-cookie-container
+###wdgPrivacyBox
+###wdg_cookie_bar
+###wdm-cookienote
+###we-use-cookie
+###we-use-cookies
+###weUseCookies
+###weUseCookiesInfo
+###weUseCookiesPopup
+###we_use_cookies
+###webLianderCookieBanner
+###web_cookielaw_popup
+###webarx-cookie-notice
+###webdevCookiesAlertContainer
+###webefektiv_gdpr_cookie_info_bar
+###website-cookies
+###website-cookies-prompt
+###websiteIsUsingCookie
+###webwerk-cookies
+###wehavecookies
+###welcomebar-wrapper
+###welcomebar-wrapper-gdpr
+###weusecookies
+###wfPrivacyNotice
+###wf_cookie_notice_wrapper
+###wg-cookie
+###wgdpr-cookie-bar
+###wh_cookie_advice
+###whitbread_cookie_wrapper
+###wiAcceptcookiesBlock
+###widget-alert-using-cookie
+###widget-cookie-message
+###widget-cookiebar
+###widget-cookies
+###widget-cookies-access
+###widget-vrtcookiebalk
+###widgetCookieConsent
+###widget_cookies
+###widget_privacy_cookies
+###wimPrivacyBanner
+###winCookieWarning
+###wincookie
+###winerist-cookie-info
+###wizjo-cookies
+###wk_cookiebar
+###wl-cookie-datenschutz-message
+###wmh-cookie-eu-alert
+###wn_cookiebar
+###wnd_cookie_bar
+###wolf-gdpr
+###wp-cookie-hinweis
+###wp-cookies
+###wp-cookies-info
+###wp-gdpr-cookie-notice
+###wp-gdpr-cookie-notice-wrap
+###wpUsingCookies
+###wp_cookie_policy
+###wpca-bar
+###wpca-box
+###wpca-popup-modal
+###wpcui_cookie_bar_main_body
+###wpf_cookie-alert
+###wpk-cookie-consent
+###wpnb-bar
+###wpx_cookie
+###wq-cookie-banner
+###wr-cookie
+###wrap > #cookies
+###wrap-cookie-bottom
+###wrap-cookie-controls
+###wrap-cookies
+###wrap-cookies-gdpr
+###wrapCookie
+###wrap_alert_message_cookie
+###wrap_alert_message_cookie2
+###wrap_info_gdpr
+###wrapper > #cookie-container
+###wrapper--cookie
+###wrapper-aviso-cookies
+###wrapper-cookie
+###wrapper-cookies
+###wrapperCookieBar
+###wrapperMensajeCookie
+###wrapper_cookies
+###ws-banner-cookie-notification
+###ws-cookie-banner
+###ws-cookie-consent-msg
+###ws-cookie-notifier-bar
+###ws-cookie-notifier-modal
+###ws-cookie-notifier-modal-bg
+###ws-cookie-wrapper
+###wsModalAgreementPrivacy
+###wsMsgWnd
+###ws_cookie_layer
+###ws_cookie_privacy
+###wsbcook_alert
+###wsjconsent
+###wsjpecrga
+###wsxgon-cookiedisclaimer
+###wt-confirm-layer
+###wt-cookie
+###wt-cookie-bar
+###wt-cookie-box
+###wt_cookieconsent
+###wt_notice_cookie
+###wtm_cookie_bar
+###wucAcceptCookies_panAcceptCookies
+###wvc-privacy-policy-message-content
+###ww-cookie-information
+###ww_cookie_consent
+###wwf-cookie
+###wycookieContainer
+###wymagania_sklepu_alert
+###x-cookie
+###x-cookie-banner
+###x-core-toast-message-cookies-div
+###x13pmcookiebar
+###xanda-cookie-policy
+###xckPopup
+###xcookiebar
+###xcookies
+###xm-cookiePolicy-container
+###xrootCookieRules
+###xt-cookies-policy
+###xte__cookie-disclaimer
+###xx-cookies-plugin
+###xx0o-cookie
+###ydp_cookie_message
+###yn-cookie-banner
+###yourCookieChoices
+###yourCookieSettings
+###yoyoCookie
+###yucs-eprivacy
+###yuden_gdpr_background
+###yuden_gdpr_popup
+###yw-cookie-gdpr
+###yw-cookie-n
+###z-cookie-note
+###z7cookienote
+###zCookieConsent
+###zCookieMessage
+###z_cookie_accept
+###zadir-cookie-policy
+###zajadam_cookies
+###zapf-cookie-banner
+###zapytaj_o_cookies
+###zaz-nb-plugin-cookie-message
+###zc_cookie_notice
+###zc_homepage_bara_cookies
+###zc_notice
+###zcob-cookies
+###zcookie
+###zdprivacy-content
+###zeraxo-cookie-bar
+###zerotier-cookie-consent-banner
+###zezwolenieNaCookie
+###zgoda-cookie-sec
+###zgoda_cookie
+###zgoda_cookies
+###zgodacookie
+###zid_banner
+###zjekoza_ciasteczka_alert
+###zk_polityka_ciastek
+###zmbCookiesNotification
+###zn-privacy-notice
+###zonaCookies
+###zone-accept-cookie
+###zoneCookie
+###zone_cookie
+###zp-footer-cookiesettings-overlay
+###zpcookie-banner
+###zse-cookie-container
+###zsmsg-policy
+###zw_cookie_law_short_info
+##.-active.cookies
+##.-cookie-disclaimer
+##.-s-cookie-bar
+##.-show.privacy-policy
+##.A5-cookie-banner
+##.ABTastyPluginCookieConsentBanner
+##.AP_mod-bm-cookies
+##.AW-cookie-consent
+##.AcceptCookie-Fixed
+##.AcceptCookies-container
+##.AcceptCookiesModulePopUp
+##.AgreementBanner__wrapper
+##.AnalyticCookieConsent
+##.AvisoCookies
+##.Aviso_cookies
+##.BandeauCookieGlob
+##.BannerPrivacyInformation
+##.BlogHeader__cookies-banner
+##.BorlabsCookie
+##.C21-cookie-banner
+##.CCPABanner
+##.CCcookiewarning
+##.CInfo[data-cookie-info]
+##.CLawBanner
+##.CNIL
+##.CO11_cookie
+##.COOKIE-it
+##.COOKIECONSENT_BANDEAU
+##.COOKIENOTICE
+##.COOKIE_BOX
+##.COOKIE_PRIVACY_CONT
+##.COOKIE_USAGE_ACCEPT
+##.CTcookie-container
+##.C_Cookie_Policy
+##.CaixaCookies
+##.CerezPp
+##.CnilCookiesConfirmation
+##.CnilCookiesWarning
+##.CoChOutBox
+##.Common-Privacy-HeaderCookiesMessage
+##.Component[data-component="CookieFooter"]
+##.ConCookieInfo
+##.ConfirmCookieMessageBox
+##.ConsentHint
+##.ConsentPanel
+##.ConsentedCookieBlock
+##.ConsentsBannerOverlay
+##.Container--cookies
+##.ContainerCookies
+##.ControlCookies-alert-show
+##.Cookie--base
+##.Cookie--bottom
+##.Cookie--ibe
+##.Cookie-Consent
+##.Cookie-Consent--show
+##.Cookie-bar
+##.Cookie-consent-block
+##.Cookie-notice__container
+##.CookieAcceptImageDivClass
+##.CookieAcceptLayer
+##.CookieAcceptPanel
+##.CookieAcceptance
+##.CookieAcceptanceWrapper
+##.CookieAcknowldegementContainer
+##.CookieAgreement
+##.CookieApprove
+##.CookieBanner
+##.CookieBanner2
+##.CookieBannerDiv
+##.CookieBannerOfMw
+##.CookieBannerOfPc
+##.CookieBar
+##.CookieBarWrapper
+##.CookieBar__Wrapper
+##.CookieBaxGr
+##.CookieBox
+##.CookieBtn
+##.CookieChecker
+##.CookieChoiceContainer
+##.CookieCompliance
+##.CookieComplianceContainer
+##.CookieComplianceContainer-veil
+##.CookieConsent-Container
+##.CookieConsent-Wrapper-BackgroundBox
+##.CookieConsent-firstinfo
+##.CookieConsent-wrapper
+##.CookieConsentArea
+##.CookieConsentBanner
+##.CookieConsentContainer
+##.CookieConsentMemo
+##.CookieConsentOverlay
+##.CookieConsent__host
+##.CookieContainer
+##.CookieControlBanner
+##.CookieDirectiveDisplay
+##.CookieDirectiveHeight
+##.CookieDisclosure
+##.CookieDiv
+##.CookieEButton
+##.CookieHint
+##.CookieInfoBar
+##.CookieInfoPanel
+##.CookieInfoText
+##.CookieInformation
+##.CookieInformationContainer
+##.CookieLawWrapper
+##.CookieLayer
+##.CookieLayout
+##.CookieMessage
+##.CookieMessageDiv
+##.CookieModal
+##.CookieMonsterBox
+##.CookieMsg
+##.CookieNote
+##.CookieNotice
+##.CookieNotice-Drawer
+##.CookieNoticeBanner
+##.CookieNoticeContainer
+##.CookieNotification
+##.CookieNotification-bar
+##.CookieNotificationPopUp
+##.CookieNotificationTopBar
+##.CookieNotify
+##.CookieNotifyWidget__wrapper
+##.CookieOptIn
+##.CookieOverlay
+##.CookiePanel
+##.CookiePerm
+##.CookiePolicy
+##.CookiePolicy-Contener
+##.CookiePolicyBar
+##.CookiePolicyManager-Banner
+##.CookiePolicyMessageBox
+##.CookiePolicyNotification
+##.CookiePolicyWidget
+##.CookiePolicy_subdiv
+##.CookiePopUp
+##.CookiePopup
+##.CookiePrivacyBanner
+##.CookiePromo
+##.CookieTopDisclaimer
+##.CookieUseApproval
+##.CookieWarning
+##.CookieWarningComponent
+##.CookieWarning__wrapper
+##.CookieWindow
+##.Cookie_Banner
+##.Cookie_Pane
+##.Cookie_Terms
+##.Cookie__Banner
+##.Cookie__banner
+##.Cookie__container
+##.Cookie_bar
+##.Cookie_modal
+##.Cookiebar
+##.Cookieconsent-wrapper
+##.Cookiepolicy[data-id="cookie-policy"]
+##.Cookiepopupbox
+##.Cookies-Container
+##.Cookies-notification
+##.CookiesAccept-Body
+##.CookiesAlert
+##.CookiesBanner
+##.CookiesBanner-root
+##.CookiesBanner-show
+##.CookiesBannerModalOverlay
+##.CookiesBar
+##.CookiesConsent
+##.CookiesConsent_root
+##.CookiesContainer
+##.CookiesFooter
+##.CookiesHinweisOuter
+##.CookiesInfo
+##.CookiesInfoMain
+##.CookiesLawContainer
+##.CookiesLayer
+##.CookiesMessageBlock
+##.CookiesMessageContainer
+##.CookiesNotification
+##.CookiesNotificationsPopUp__OuterContainer
+##.CookiesOK
+##.CookiesOk
+##.CookiesPolicy-banner
+##.CookiesPolicyBanner
+##.CookiesPopup-middle
+##.CookiesPopup__Container
+##.CookiesTermsConsent
+##.CookiesUsage
+##.CookiesWarning
+##.Cookies_CookiesPopin
+##.Cookies_alert
+##.Cookies_block
+##.CoreCookie
+##.DVWebNode-cookie-banner-wrapper
+##.DVWebNode-cookie-compliance-notification-wrapper
+##.DisclaimerCookieComponent
+##.DmxlabsKooke
+##.EU-cookie
+##.EUCookieBanner
+##.EUCookieBox
+##.EUCookieInfo
+##.EUCookieLawBar
+##.EUCookieNotice
+##.EUCookieNotice_content
+##.EUCookiePolicyContainer
+##.EUCookiePopup
+##.EUc
+##.EWSCookieConsentOverlay
+##.EnablingCookies
+##.EprivacyBanner
+##.EuCookieBar
+##.EuCookieSheet
+##.EuCookiesNotificationView
+##.EuropeanCookieBar
+##.F6-cookies_w_js-entrypoint
+##.FE_COOKIELAW
+##.FOOTER_COOKIES
+##.FooterCookieGL
+##.G005-global-cookie-notification
+##.GAcookies
+##.GDPR-Msg
+##.GDPR-WelcomeBanner
+##.GDPR-cookies
+##.GDPR-notification
+##.GDPR-popup-container
+##.GDPR-toast
+##.GDPR-tools-consent
+##.GDPR.ng-star-inserted
+##.GDPRPanel
+##.GDPRPanel--visible
+##.GDPRPanel-root
+##.GRU_banner
+##.Gdpr-policy
+##.Gdpr-policy-desktop
+##.GdprBanner
+##.GdprBanner__bg
+##.GdprCookiesPopup
+##.GlobalConsentBar
+##.GlobalCookie
+##.GrowmarkGDPR_Wrapper
+##.HU-cookie-policy
+##.Header-cookie
+##.HrSys-Gips-DivIBox
+##.HrSys-Gips-iBoxDivContent
+##.IP__CookieConsent
+##.ITPCookieContainer
+##.ITPcookiebar
+##.Important[msgid="cookie-info"]
+##.JS_cookieBar
+##.JScookies-part
+##.J_agreeCookieModal
+##.Kolaciky
+##.LAW_cookie_alert
+##.LGPD
+##.LGPD-popup-wrapper
+##.LGPDWarning
+##.LooprCookieConsent
+##.M4T-cookie
+##.MB-108-cookie-hinweis
+##.MCookieQuestionBox
+##.Message--cookies
+##.MessageBlockCookie
+##.ModThomasCookiesC
+##.Modal--cookie-message
+##.ModalCookiesBackground
+##.Navbar-cookieCompliance
+##.Navbar-toastContainer
+##.Notification--cookieNotice
+##.NotificationCookies
+##.NovemediaCookiePolicyBox
+##.O-CookieLaw
+##.ObsCnilWarning
+##.PPolicyDisclaimer
+##.Page-cookies
+##.PartialCookieCompliance
+##.PartialCookieCompliance-hp
+##.PiwikPROConsentForm-container
+##.PolicyNotifications
+##.PopMessage.cookie
+##.PopupGDPR
+##.PortletGestionDesCookiesCNIL
+##.PositionBottom.as-oil
+##.PrivacyCookieAccepted
+##.PrivacyModeHeader
+##.PrivacyNote
+##.PrivacyPolicyNotice
+##.PrivacySettingsBanner
+##.RACKWrapper
+##.RGPD_message
+##.RGPDcookie
+##.RV_cookiedir
+##.Rgpd-component
+##.Rgpd-notice
+##.RgpdBanner-component
+##.RodoNotyfication
+##.Root_cookieConsentBanner
+##.S01M97-CookieAlert
+##.S01M97-CookieAlert--overlay
+##.SCK_Banner
+##.SLNotificationBar
+##.SP-ConsentBanner
+##.SP-ConsentBanner__spacer
+##.SP-CookieUsageNotification
+##.Section-Cookie
+##.Seeems-EuCookie-Notification
+##.Site-rgpd
+##.SiteLayout-cookieBar
+##.SiteMessage--cookie
+##.SiteUseCookies
+##.SiteWideCookie
+##.SitecookiemessageContainer
+##.TOSBanner
+##.TS-CookieLegalNotice
+##.TdkShowCookie
+##.Template_CookiesBox
+##.TheCookieBanner
+##.ThirdPartyCookiesAlert
+##.Towa-Gdpr-Plugin
+##.TxHfCookieHint
+##.UECookie
+##.UICookieBanner
+##.UN_FRAME_gdpr
+##.W034_Cookie_Directive
+##.WW-cookiemodul
+##.WeUseCookiesNotice
+##.WebsiteCookies
+##._360cookieDialog
+##._CookieBox_cookieBox
+##.___eucookiePopup
+##.__cookieNotice
+##.__cookie_policy
+##.__cookies
+##.__cookies_msg
+##.__gdpr-main
+##.__gdprConfirmOverlay
+##._cookie
+##._cookie-advanced--active
+##._cookie-banner
+##._cookie-bar
+##._cookie-consent
+##._cookie-info
+##._cookieBanner
+##._cookiebanner-opt-in-out
+##._cookies
+##._cookies-cookie
+##._cookies-cookies-bar
+##._cookies_policy_popup
+##._floating-banner[floating-banner-id="cookies"]
+##._gdpr-notify-header
+##._gdprCookieBanner
+##._iph_cp_standalone
+##._jsCookiePopup
+##._legal-alert_eryle1
+##._xui-cookies-notice-overlay
+##.a--cookie
+##.a-cookie
+##.a-derive-cookie
+##.a3p-cookie-banner-wrap
+##.aa-cookie-alert
+##.aa30-cookies-policy
+##.aard-cookie-container
+##.ab-cookie-disclaimer
+##.abbr__cookiebanner
+##.abc-cookies-wrapper
+##.abcookielaw
+##.abcookielawbg
+##.abe-gdpr-banner
+##.abnormMediaCookieConsent
+##.abstractCmpDisclaimer
+##.abt-cookieNotification
+##.ac-cookie-compliance
+##.ac-cookie-policy-banner-container
+##.ac-cookie-wrap
+##.ac-cookies
+##.acast-cookie-consent-portal
+##.acc-cookie
+##.acc-cookie-message-background
+##.accept-box--rodo
+##.accept-cookie-bar
+##.accept-cookie-container
+##.accept-cookie-outer
+##.accept-cookie-warning-box
+##.accept-cookie-window
+##.accept-cookie-wrap
+##.accept-cookie-wrapper
+##.accept-cookies-banner
+##.accept-cookies-blockuk
+##.accept-cookies-cont
+##.accept-cookies-container
+##.accept-cookies-modal
+##.accept-cookies-notice
+##.accept-cookies-policy
+##.accept-cookies-prompt
+##.accept-cookies-toast
+##.accept-cookies-wrapper
+##.accept-cookies__wrapper
+##.accept-my-cookie
+##.accept-privacy-policy
+##.accept-privacypolicy
+##.acceptCookieBar
+##.acceptCookieBox
+##.acceptCookieButton
+##.acceptCookieComponent
+##.acceptCookieContainer
+##.acceptCookieDialog
+##.acceptCookieDiv
+##.acceptCookieMessage
+##.acceptCookieNotice
+##.acceptCookiesBox
+##.acceptCookiesContainer
+##.acceptCookiesMobile
+##.acceptCookiesModal
+##.acceptCookiesPanel
+##.acceptCookiesWrapper
+##.accept_adatvedelem
+##.accept_cookie
+##.accept_cookie_slot
+##.accept_cookies
+##.accept_cookies-wrapper
+##.accept_cookies_action
+##.accepterCookie
+##.acceptmycookie-bar
+##.acceptsitecookies
+##.access-cookies
+##.accessibility-bar-cookies
+##.accetta-container
+##.accetta_cookie
+##.accettacookie
+##.accettazioneCookies
+##.accookie
+##.accord_cookies
+##.acepta_cookies
+##.aceptar_cookies
+##.acris-cookie-consent:not(.is--modal)
+##.act-cookie-notification
+##.action-cookie
+##.active-cookie-menu
+##.active.cookie
+##.active.cookie-banner
+##.active.rgpd-modal
+##.activebar-container._privacy_fix
+##.activity-cookie
+##.adblock-cookies
+##.add-get-cookie
+##.add_cookies
+##.addcookielaw
+##.addthis-cookie
+##.ade-cookie-bar
+##.adeo-cookie-disclaimer
+##.adk-cookie-wrapper
+##.adn-cookie-panel
+##.adn-cookie-pannel-container
+##.adp-popup
+##.adp-popup-overlay
+##.adroll_consent_container
+##.adsk-gdpr-footer-wrapper
+##.adv--300x250
+##.adv--728x90
+##.adv-cookie
+##.advertising-cookie-use
+##.advice-cookie
+##.advmc-cookie-notice
+##.af-cookie
+##.af-cookies
+##.af-cookies-background
+##.afe-cookie-banner
+##.affenkekse
+##.aficionado--cookies-wrapper
+##.afm-Cookies
+##.ag-cookie
+##.ag-cookie-policy
+##.ag-cookie-policy-wrapper
+##.ag-cookie-policy__wrapper
+##.ag_cookie_alert_window
+##.ag_cookie_banner
+##.ag_user_alert_window_content
+##.agegate-cookie
+##.agenda-cookie-consent
+##.agg-warning-banner-cookie-policy
+##.agicookies
+##.agn-cookie-consent
+##.agn-cookie-consent-inner-wrapper
+##.agn-cookie-consent-outer-wrapper
+##.agree-cookie-wrap
+##.agree-cookies
+##.agree-with-cookies
+##.agreeSocialTrackingBox
+##.agreecookiesc
+##.agreement-cookie
+##.agreement-eu-cookies
+##.ahb-cookiebanner
+##.ai-m-cookie-layer
+##.ai-m-overlay-background
+##.aim-cookie-notice--wrapper
+##.ajax_cookie_container
+##.ajs-cookies
+##.ajs-message
+##.ak-cookie
+##.ak-cookie__banner
+##.ak-cookies-banner
+##.ak_rgpd
+##.akf__cookie
+##.akismet_comment_form_privacy_notice
+##.alert--cookie
+##.alert--cookieconsentblock
+##.alert--cookies
+##.alert-bandeau-cookie
+##.alert-banner--cookie
+##.alert-box-cookie__layout
+##.alert-box-cookies
+##.alert-cnil
+##.alert-compliance.fixed-bottom
+##.alert-coocies
+##.alert-coockie
+##.alert-cookie-banner
+##.alert-cookie-button
+##.alert-cookie-consent
+##.alert-cookie-message
+##.alert-cookie-notice
+##.alert-cookie-notice-container
+##.alert-cookie-policy
+##.alert-cookie-usage
+##.alert-cookies-backdrop
+##.alert-cookies-banner
+##.alert-cookies-bar
+##.alert-cookies-box
+##.alert-cookies-consent
+##.alert-cookies-policy
+##.alert-cookiewarning
+##.alert-message.cookie
+##.alert-privacy-disclaimer
+##.alert-rgpd
+##.alert-site-cookie
+##.alert-tracking-cookie
+##.alert-warning-footer
+##.alert-wrapper-cookie
+##.alert.ccpa-message
+##.alert.rgpd
+##.alertCookiesCnil
+##.alertLDGPBackground
+##.alertPolicyCookies
+##.alertViePrivee
+##.alert[data-behaviour="cookie-banner"]
+##.alert[data-cookie="banner-cookie"]
+##.alert[data-name="eu_biscuits"]
+##.alert[data-ng-if="showCookieDisclaimer"]
+##.alert[ng-if="cookieAlert"]
+##.alert[ng-if="showCookieDisclaimer"]
+##.alert__RGPD
+##.alert__cookie
+##.alert_background_coockies
+##.alert_container.cookie
+##.alert_cookie
+##.alert_cookies
+##.alert_wrapper.cookie
+##.alerta-cookie
+##.alerta-cookies
+##.alertaLGPD
+##.alerta_cookies
+##.alertacookies
+##.alertbar--trackingHorizontal
+##.alertbar--trackingVertical
+##.alertbar[data-alert="cookie"]
+##.alertcookie
+##.alerte-cookie
+##.alerte_cookie
+##.alerte_cookie_content
+##.alerts--eu-cookie-bar
+##.alerts-manager-container
+##.alf_cookieLaw
+##.aliensanimatecookiein
+##.alienscookie-banner
+##.allert-cookies
+##.allow-cookie-banner
+##.allow-cookie-container
+##.allow-cookie-notification
+##.allow-cookie-panel
+##.allow-cookie-stripe
+##.allow-cookie-wrapper
+##.allow-cookies-dialog
+##.allow-cookies-info
+##.allow_cookies_container
+##.allowed-cookies
+##.allreadycookie
+##.alltricks-CnilRibbon
+##.als-cookie-button
+##.alt_lgpd_cookies
+##.altamira-gdpr-cookie-consent
+##.alternative_cookie_layer_background
+##.alternative_cookie_layer_holder
+##.alternetCookieMessage
+##.altium-privacy-bar
+##.altumcode-cookie-notification-wrapper
+##.alvinecookieinfo
+##.am-cookie-notice
+##.am-cookiebar
+##.am2-gdpr
+##.amcb-cookie-ban
+##.amdb-lgpd-consent
+##.amgdpr-cookie
+##.ams-m-cookie-warning
+##.amz-cookies-notice
+##.analytics-consent
+##.analytics__consent
+##.andcookie
+##.animate-cookie-message
+##.animate-cookie-notice
+##.animate-cookies
+##.animated.gdpr-container
+##.announcement-cookie
+##.announcement-cookie-wrapper
+##.announcement-eu-cookie
+##.anonymous-consent-banner
+##.anonymousToSConsent_mask
+##.anunt-cookie
+##.ao-cookie-container
+##.aod-cookie-consent
+##.ap-c-message-wrap[data-controller="cmessage"]
+##.ap-cookie-consent-container
+##.ap-cookiesalert-container
+##.apa-consent-banner
+##.apa-consent-reset
+##.apa-consent-wrapper
+##.app-cookie
+##.app-cookie-agreement
+##.app-cookie-banner
+##.app-cookie-card
+##.app-cookie-consent
+##.app-cookie-container
+##.app-cookie-line
+##.app-cookie-line-inner
+##.app-cookie-notice
+##.app-cookie-row
+##.app-cookies-agreement-banner
+##.app-disclaimer-rgpd
+##.app-gdpr-notice
+##.app-root > .cookies
+##.app-wrapper-cookies
+##.app__cookies
+##.app__misc-cookie__consent
+##.app_cookie_alert
+##.app_gdpr--2
+##.approve-cookies
+##.approve-cookies-header
+##.approveCookiesBar
+##.apptiker-cookie-bar
+##.appx-cookie-banner-eu
+##.apropo-widgets-toolbar-cookie-container
+##.ar__cookie_info
+##.argent_cookies
+##.aroundCookie
+##.arsorsCookie_wrapper
+##.art-cookie
+##.arv-cookies__wrapper
+##.as-oil[data-qa="oil-Layer"]
+##.as__cookie-banner
+##.asa-cookie-notification
+##.asset_balaNotification
+##.assignment--cookies
+##.aszfLayerContent
+##.atlants_cook_wrapper
+##.atm-cookies-disclaimer
+##.atvi-banner-cmp
+##.atvi-cookie-disclaimer
+##.atvi-privacy-policy-module
+##.aurora-nanobar
+##.auskunft-cookies
+##.austria_cookie_law
+##.auth-cookie
+##.automart-cookiealert
+##.av-cookie-wrapper
+##.avCookieLaw
+##.avalanche-message
+##.avertissement-cookies
+##.avertissementCookie
+##.avertissementCookieContenu
+##.avertissementCookies
+##.avg-cookie-notice
+##.avg-cookiebar
+##.avg-cookies__toggle
+##.avhcookieconsent
+##.avia-cookie-consent
+##.avia-cookie-consent-wrap
+##.avia-cookiemessage-bottom
+##.aviso-cookies
+##.aviso-cookies-layer
+##.aviso-de-cookies
+##.aviso-gestion-cookies
+##.aviso-lgpd
+##.aviso-politica-cookies
+##.avisoCookie
+##.avisoCookies
+##.avisoCookiesContent
+##.avisoCookiesFixo
+##.avisoCookiesTxt
+##.avisoLGPD
+##.avisoPoliticacookies
+##.aviso__cookies
+##.aviso_cookie
+##.aviso_cookies
+##.aviso_lgpd_body
+##.avisocookie
+##.avisocookies
+##.avisolgpd-bar
+##.avs-cookie-message
+##.avvisoCookie
+##.avviso_cookie
+##.aw-cookie-alert
+##.aw-cookie-banner-overly
+##.aw-cookie-law
+##.aw-cookies
+##.aw2-nav-top-cookie
+##.awave_consent_modal_backdrop
+##.awave_consent_modal_open
+##.awe-popkies-content
+##.awe-popkies-layer_dark
+##.awe_cookie
+##.awe_cookie_settings
+##.awesome-eu-cookies
+##.awn-cookie-compliance
+##.aws-cookie-consent
+##.axa-cookies
+##.axaCookie
+##.axi-cookie-consent-wrapper
+##.axmcookie-notice-container
+##.axs-md-cookie
+##.b--cookies
+##.b-accept-cookie
+##.b-cconsent
+##.b-content-asset_cookie_hint
+##.b-cookie-banner
+##.b-cookie-banner--fixed
+##.b-cookie-banner__inner
+##.b-cookie-consent
+##.b-cookie-hint
+##.b-cookie-notice-banner
+##.b-cookie-notification
+##.b-cookie-overlay
+##.b-cookie-policy
+##.b-cookie-popup
+##.b-cookie-text
+##.b-cookie-warning
+##.b-cookieBanner
+##.b-cookieBox
+##.b-cookieConsent
+##.b-cookieDialog
+##.b-cookie__body
+##.b-cookie__container
+##.b-cookie_hint
+##.b-cookies
+##.b-cookies-alert
+##.b-cookies-bar
+##.b-cookies-informer
+##.b-cookies-message
+##.b-cookies_banner_container
+##.b-cookies_informer
+##.b-cookies_notification
+##.b-dsgvo-banner
+##.b-footer-cookie
+##.b-header-cookie
+##.b-notification-push__wrapper
+##.b-policy-info
+##.b-popup-cookie_wrap
+##.b-privacy-policy
+##.b-stripe_content_cookie
+##.b10-cookie-notification
+##.bCnil
+##.b__cookies
+##.b_cookieBanner
+##.b_cookienotice
+##.ba-banner-disclaimer
+##.ba-cookies
+##.ba_cookie_bar
+##.ba_popup_cookie
+##.backcookie
+##.backdrop-cookie-policy
+##.backdrop-cookies
+##.backdrop-ley-cookies
+##.background-petrol-cookie
+##.background_alertcookie
+##.background_cookie_banner
+##.badge_privacy
+##.baked-cookies-bar
+##.ban-cookies
+##.band--gdpr
+##.banda-cookie
+##.bandaAceptacion
+##.bandacookies
+##.bandeau-accept-cookie
+##.bandeau-cnil
+##.bandeau-cookie
+##.bandeau-cookie-bottom
+##.bandeau-cookie-wrapper
+##.bandeau-cookies
+##.bandeau-information-cookies
+##.bandeau-sellsecure
+##.bandeau-wrapper
+##.bandeauCookie
+##.bandeauCookies
+##.bandeau__cookies
+##.bandeau_cnil
+##.bandeau_consent
+##.bandeau_cookie
+##.bandeau_cookies
+##.bandeaucnil
+##.bandeaucnilcookies
+##.baner-cookie
+##.bankid-cookie
+##.bann-cookie
+##.banner--cookie
+##.banner--cookie-policy
+##.banner--cookies-eu
+##.banner--cookies-policy
+##.banner--gdpr
+##.banner--lgpd
+##.banner-aceptacion-cookies
+##.banner-consent-all
+##.banner-cookie
+##.banner-cookie-background
+##.banner-cookie-consent
+##.banner-cookie-container
+##.banner-cookie-policy
+##.banner-cookie-wrapper
+##.banner-cookies
+##.banner-cookies-2
+##.banner-cookies-alert
+##.banner-cookies-show
+##.banner-cookies-wrapper
+##.banner-cookies__wrapper
+##.banner-espa-wrapper
+##.banner-eu-cookie
+##.banner-gdpr
+##.banner-lgpd
+##.banner-lgpd-consent
+##.banner-lgpd-consent-container
+##.banner-lgpd-container
+##.banner-lgpd__container
+##.banner-message-cpopup
+##.banner-policy-wrap
+##.bannerCookie
+##.bannerCookies
+##.bannerInformativaEU
+##.bannerLGPD
+##.bannerPrivacyAcceptance
+##.banner[data-banner="cookies"]
+##.banner__cookies
+##.banner__overlay--cookie
+##.banner_accept_cookies
+##.banner_cokie
+##.banner_consenso_cookie
+##.banner_cookie
+##.banner_cookies
+##.banner_lgpd
+##.banner_policy
+##.bannercookie
+##.banniereCookies
+##.banniere_cookie
+##.bannierecookie
+##.bar--cookie-bar
+##.bar--cookienote
+##.bar--cookies
+##.bar-cookie
+##.bar-cookies
+##.bar-cookies-gtm
+##.bar-cookies-ph
+##.bar-eu-cookies
+##.bar.cookie
+##.bar.udc-bar-holder
+##.barCookie
+##.bar_privacy
+##.barra-aviso-privacidad
+##.barra-cookie
+##.barra-cookies
+##.barra-cookies-modal
+##.barra_cookie
+##.barra_cookies
+##.barre-cookie
+##.barre-info-cookies
+##.barreInfoCookies2
+##.barre__cookie
+##.barre_cookie
+##.barre_cookies
+##.base-cookies
+##.base_privacy_policy_notification
+##.basel-cookies-popup
+##.basel_cookie_bar
+##.basic--draw-message-bar-cookie-notice
+##.basic_features-cookiemessage
+##.bau100_cookie-bar
+##.bau__cookiebanner
+##.bayer-cookie-disclaimer
+##.bb-accept-cookies
+##.bb-consentbanner
+##.bb-cookie-notice
+##.bb-cookies
+##.bb-cookies-dialog-wrapper
+##.bb-header__accept-cookies
+##.bba-popup-cookies
+##.bbl-cookie-consent
+##.bc-cookie-banner
+##.bc-cookie-disclaimer
+##.bcOptInOptoutNotifier
+##.bcee-cookies
+##.bcekmece_cookies_div
+##.bcookiez
+##.bcpNotificationBar
+##.bdBuzzCookiePolicy
+##.bdcookies
+##.bdew__cookiebanner
+##.bdf-cookie-policy-popup
+##.bds_mini_cookie_policy
+##.bdu-cookie-consent-bar
+##.be-gdpr-cookie-notice-bar
+##.beans-cookies-notification__container
+##.bel-cookie
+##.bel-cookie-banner
+##.bengor-cookies
+##.betterwp-cookie-notice
+##.beuc-cookie
+##.bezzo-cookies-bar
+##.bf-cookie-container
+##.bf-cookie-wrapper
+##.bf_gdpr_box
+##.bg_cookie
+##.bg_cookies
+##.bg_gdpr_popup
+##.bgcookies
+##.bh-cookies-popup-background
+##.bh-cookies-warning
+##.bh-layerCookieLaw
+##.bhCookieBoxWrapper
+##.bica-inline
+##.bicevida_fixed-cookies
+##.bipPasekCookie
+##.biscotto.sc-bottom
+##.biscuit-message
+##.biscuit-usage
+##.biscuitbox-wrapper
+##.biscuits-usage
+##.bk-cookie-alert-snackbar
+##.bk-cookie-container
+##.bk-cookie-message
+##.bk-cookieBar
+##.bk-cookies
+##.bk-cookies__wrapper
+##.bkg_cookie
+##.black-bg-cookie
+##.blindtoolbox-cookie
+##.blk-Cookie
+##.blk-Disclaimer
+##.blk-cookie-disclaimer
+##.blk_coockies
+##.bloc-cookie-banner
+##.bloc-cookie-d
+##.bloc-cookies
+##.blocCookie
+##.blocCookies
+##.bloc_cnil
+##.bloc_cookie
+##.bloc_cookie_tracking
+##.bloc_cookies
+##.bloccookie
+##.block--bean-cookie-consent
+##.block--block-mw-cookie-consent
+##.block--cookie
+##.block--cookie-consent
+##.block--cookie-notification
+##.block--cookieconsent
+##.block--mw-cookie-consent
+##.block-CookieBlock
+##.block-accept-cookies
+##.block-artwhere-gdpr
+##.block-awave-consent
+##.block-b4n-cookie-bar
+##.block-bnf-cookies
+##.block-cipix-cookiecontrol
+##.block-clc-cookies-policy
+##.block-cookie-accept-notify
+##.block-cookie-approval
+##.block-cookie-banner
+##.block-cookie-notification
+##.block-cookie-popup
+##.block-cookie-usage
+##.block-cookiedisclaimer
+##.block-cookiepopup
+##.block-cookies-alerte
+##.block-cookies-dialog-block
+##.block-cookies-information
+##.block-cookies-popup
+##.block-cookies-rgpd
+##.block-cookies-rgpd-block
+##.block-cookies-warning
+##.block-cookiesactive
+##.block-eucookieblock
+##.block-gdpr-cookie-banner
+##.block-info-cookie
+##.block-khst-cookie-approval
+##.block-lsw-cookie
+##.block-notification--cookies
+##.block-por-cookies
+##.block-rgpd
+##.block-vito-cookie-popup
+##.block-wax-cookie-consen
+##.block-wax-cookie-consent
+##.block.cookies
+##.blockCookieAgreementWrapper
+##.blockCookieBanner
+##.blockCookieNotice
+##.blockCookieNotification
+##.blockCookies
+##.block__content-cookies
+##.block__window--gdpr
+##.block_consent
+##.block_cookie
+##.block_cookie--show
+##.block_cookie_popup
+##.block_mess_cookies
+##.blockcookies
+##.blocknav-gestion-cookies
+##.blogCookieCover
+##.blog__cookie
+##.bloque-cookies
+##.bloqueLegalCookies
+##.bloque_ventanaCookies
+##.bloquecookies
+##.bls-cookie-policy
+##.bluelabs-gdpr__bar
+##.blur-cookie-consent
+##.bmcookie
+##.bmg-gdpr-wrapper
+##.bmj-cookie-noticebar-content
+##.bmp-cookies
+##.bms-cookie-container
+##.bmu-cookie-disclaimer
+##.bmw-cookie-notification-holder
+##.bn-cookie-panel
+##.bn-cookie-prompt__container
+##.bn-cookies
+##.bn-cookies-wr
+##.bnt_cookieBar
+##.boc-cookies
+##.body-overlay[data-show-cookie-banner-overlay]
+##.body-warnCookie
+##.boldcookieBarOverlay
+##.bonialCmpBanner
+##.bootom-cookie-wrap
+##.border-cookieBorder
+##.borlabsCookieShow
+##.born-cookie-wrapper
+##.born-cookies
+##.bottom--cookie-bar
+##.bottom--cookie-bar-overlay
+##.bottom-0.cookies
+##.bottom-bar-cookie
+##.bottom-bar-cookies
+##.bottom-cookie-block
+##.bottom-cookie-consent
+##.bottom-cookie-info
+##.bottom-cookie-wrap
+##.bottom-cookie-wrapper
+##.bottom-cookie-wrapper-2
+##.bottom-cookies-background
+##.bottom-cookies-oreder
+##.bottom-zone__privacy-policy
+##.bottom.cookie__section
+##.bottomAlert
+##.bottomCookies
+##.bottomPrivacyAll
+##.bottom__cookie-block
+##.bottom_cookie
+##.bottom_cookie_block
+##.bottom_optout_announce
+##.box--cookie
+##.box--cookies
+##.box-accept-cookies
+##.box-agree-gdpr
+##.box-alert-cookie-inside
+##.box-aviso-cookies
+##.box-cookie
+##.box-cookie-consent
+##.box-cookie-container
+##.box-cookie-content
+##.box-cookie-disclamer
+##.box-cookie-eu-law
+##.box-cookie-info--overlay
+##.box-cookie-notice
+##.box-cookies
+##.box-info-cookie
+##.box-politica-privacidade-footer
+##.box-txt-cookies
+##.boxAvvisoCookie
+##.boxChkCookie
+##.boxChkCookieWrap
+##.boxContentCookie
+##.box_Cookie
+##.box_cookie
+##.box_cookie_allow
+##.box_cookies
+##.boxzilla-cookies-popup
+##.bp-cookie-banner
+##.bp-cookie-notice-wrapper
+##.bpa-cookie-banner
+##.bpx-rgpd-cookie-bottomPanel
+##.bqglobalrgpd-banner
+##.br-cookiebar
+##.brabo-cookie-container
+##.brewster-cookie-bar-notification
+##.bring-cookie-container
+##.brk_eu_cookie_msg
+##.browserfeatures-cookiesneeded
+##.bruut-cookie
+##.bs-cookie-notice
+##.bs-gdpr-law
+##.bs-popup-cookie
+##.bs-privacy-cookie-consent-mw-provider-overlay
+##.bs-suop-cookies
+##.bs-wrap-gdpr-law
+##.bsd-contribForm-gdpr-modal
+##.bstar-cookie-info
+##.bstcmfw-cookie-wrapper
+##.btw-cookie-policy-widget
+##.btx-cookie-notification
+##.btz-cookie-popup__card
+##.buha-cookie-banner
+##.butterBar
+##.butterBar--privacy
+##.bvCookiesBar
+##.bw-cookie
+##.bwCookieMessage
+##.bwp-cookie-bar
+##.bwx-cookie-consent-wrapper
+##.bx-info-cookie
+##.bx-landing-cookies-popup-warning
+##.bx-main-cookie-policy
+##.bxst-main-cookie-policy
+##.by_cookie_policy
+##.bycookies-container
+##.bz-cookie
+##.c-CookieBanner
+##.c-CookieDisclaimer
+##.c-CookieNotice
+##.c-accept-cookie
+##.c-alert--cookie
+##.c-alert-cookie
+##.c-announcement--cookie
+##.c-app-cookies
+##.c-app-cookies--bottom
+##.c-app-cookies--ribbon
+##.c-appBanner
+##.c-bandeau-rgpd
+##.c-banner-cookie
+##.c-bannercookies
+##.c-bannercookies--opened
+##.c-banners__wrapper
+##.c-barra_cookies
+##.c-bg-secondary.cc-bottom-bar
+##.c-block-cookie-disclaimer
+##.c-cnil-wrapper
+##.c-consent-form
+##.c-consent-overlay
+##.c-consentLayer__innerBox
+##.c-consentTracking
+##.c-consent__bar
+##.c-consentcookie
+##.c-consentcookie--active
+##.c-cookie--disclaimer
+##.c-cookie-banner
+##.c-cookie-banner--default
+##.c-cookie-banner-container
+##.c-cookie-banner__wrapper
+##.c-cookie-banner_background
+##.c-cookie-banner_modal
+##.c-cookie-bar
+##.c-cookie-block
+##.c-cookie-box
+##.c-cookie-configurator
+##.c-cookie-consent
+##.c-cookie-consent--default
+##.c-cookie-consent-banner
+##.c-cookie-consent-modal
+##.c-cookie-disclaimer
+##.c-cookie-info
+##.c-cookie-information
+##.c-cookie-law
+##.c-cookie-message
+##.c-cookie-msg-holder
+##.c-cookie-note
+##.c-cookie-notice
+##.c-cookie-notice__popup
+##.c-cookie-notification
+##.c-cookie-notification-bar
+##.c-cookie-notifier
+##.c-cookie-panel
+##.c-cookie-policy
+##.c-cookie-popunder
+##.c-cookie-warning
+##.c-cookie-warning-panel
+##.c-cookie-wrapper
+##.c-cookieAccept
+##.c-cookieBanner
+##.c-cookieBanner--overlay
+##.c-cookieBar
+##.c-cookieContainer
+##.c-cookiePolicy
+##.c-cookiePolicy-box
+##.c-cookie__banner
+##.c-cookie__container
+##.c-cookie__message--middle
+##.c-cookiebanner
+##.c-cookiebar
+##.c-cookiehint
+##.c-cookiepopup
+##.c-cookies-acceptance-msg
+##.c-cookies-alert
+##.c-cookies-bar
+##.c-cookies-block
+##.c-cookies-consent
+##.c-cookies-disclaimer-modal
+##.c-cookies-info
+##.c-cookies-notice
+##.c-cookies-notification-banner
+##.c-cookiesDisclaimer
+##.c-cookiesPanel
+##.c-cookies__alert
+##.c-cookies__bar
+##.c-cookies__container
+##.c-cookies__content
+##.c-cookies__frame
+##.c-cookies__popup
+##.c-cookies__wrapper
+##.c-cookiewarning
+##.c-dialog--cookie
+##.c-dsgvo
+##.c-floating.c-window
+##.c-fnd-cookie-acceptance
+##.c-footer-cookie-big
+##.c-footer__cookies
+##.c-gc-cookiebar
+##.c-gdpr-alert
+##.c-gdpr-banner
+##.c-gdprPopup
+##.c-gdprbar
+##.c-gdprcookie
+##.c-headband-cookies
+##.c-info--cookie
+##.c-js-cookiebox
+##.c-legalBanner
+##.c-message--cookie-alert
+##.c-notice.c-floating
+##.c-notification-bar__overlay
+##.c-notify-cookie
+##.c-onetrust-backup
+##.c-popin-cookies
+##.c-popup-cookie-simple
+##.c-privacy-consent-modal
+##.c-privacy-module
+##.c-privacy-notification
+##.c-privacy-protection-banner
+##.c-rm-cookiebanner
+##.c-rodo-bar
+##.c-simple-cookie-consent
+##.c-toast--gdpr
+##.c-unique_cookie-attention
+##.c09--cookie
+##.c22_cookie_consent_banner_container
+##.c24-cookie
+##.c2cookiebannersm
+##.c2g_daimler_cookie_dialog_overlay
+##.c3-cookie-notice
+##.c3po-banner
+##.c62-cookies-bar
+##.cAcceptBar
+##.cCookiePolicy
+##.cGDPR
+##.cGDPR_Notice_Community
+##.cS-cookie
+##.c_cookie
+##.c_cookie-badge
+##.c_cookie-notice
+##.c_cookie-policy
+##.c_cookiePolicy
+##.c_cookies
+##.c_cookiewall
+##.ca-consent-cookie-bar-wrap
+##.ca-cookie-consent
+##.cabeceraCookie
+##.cabosseadsbloc
+##.cadreCookieFooter
+##.cadre_alert_cookies
+##.caixa_minimalista
+##.caja_cookies
+##.calibr8-cookie-compliance
+##.can_gdpr_fixed_banner
+##.capa-cookie
+##.capa-cookies
+##.capaAvisoCookies
+##.capaCookie
+##.capaCookies
+##.capaCookiesNew
+##.capaFondoCookies
+##.capaPopup
+##.capa_cookie
+##.capa_cookies
+##.capacookies
+##.captify-iframe
+##.captify-widget
+##.caption-cookie
+##.card-lgpd
+##.card-lgpd-overlay
+##.card.cookie
+##.card__window--gdpr
+##.cart_cookie
+##.cartware_cookieconsent
+##.case-cookie-alert
+##.cav2-notification_cookie
+##.cb-banner
+##.cb-cookie-bar
+##.cb-cookie-popup
+##.cb-cookieConsentBanner
+##.cb01-cookie-bar
+##.cb_msgCookie
+##.cbannercontainer-sq_cp
+##.cbar-wrapper
+##.cbar_banner
+##.cbb-cookie-info
+##.cbc-cookie-notice
+##.cbc-cookie-notice__wrapper
+##.cc-banner
+##.cc-banner-granular
+##.cc-banner-wrapper
+##.cc-blockingScreen
+##.cc-bottom-left.cc-window
+##.cc-bottom.cc-banner
+##.cc-bottom.cc-floating.cc-window
+##.cc-cookie-banner
+##.cc-cookie-consent-banner-modal
+##.cc-cookiecontainer
+##.cc-cookies
+##.cc-cookies-container
+##.cc-cookies-overlay
+##.cc-cookies-page
+##.cc-customdialog
+##.cc-dialog-backdrop
+##.cc-dialog-pane
+##.cc-dialog-wrapper
+##.cc-dialog[aria-label="cookie-consent"]
+##.cc-fixed-bottom
+##.cc-fullscreen-bg
+##.cc-individual-cookie-settings
+##.cc-individual-cookie-settings-overlay
+##.cc-message-bottom
+##.cc-nb-main-container
+##.cc-notification
+##.cc-onconsent-analytics
+##.cc-onconsent-social
+##.cc-policy
+##.cc-policy-overlay
+##.cc-privacy-bottom-container
+##.cc-stop-overlay
+##.cc-theme-classic.cc-window
+##.cc-type-opt-in.cc-floating
+##.cc-window-banner
+##.cc-window.cookie
+##.cc-window.cookie-model
+##.cc-wrapper > .cc-inner
+##.cc[data-notice="cookies"]
+##.cc__bg
+##.cc__wrapper
+##.cc_baner-wrapper
+##.cc_banner
+##.cc_banner-wrapper
+##.cc_banner-wrapper_FB
+##.cc_banner_FB
+##.cc_consent
+##.cc_container
+##.cc_container_FB
+##.cc_cookieAlert
+##.cc_cookie_message
+##.cc_dialog.cc_css_reboot
+##.cc_disclaimer_box
+##.cc_gccp-wrapper
+##.cc_overlay_lock
+##.ccbar.ccpane
+##.ccbar_pos_bottom
+##.ccbarbody .ccpane
+##.ccc > .ccc-popup
+##.ccc-widget
+##.ccc_banner-wrapper
+##.cccenter-show-banner
+##.cccookie-area
+##.ccdiv
+##.ccg-cookie-consent-banner
+##.cck-consent-bar
+##.cck-msg
+##.cckBannerInner
+##.ccklayer
+##.cclayerBottom.cclayer
+##.cclist.ccpane
+##.ccm-CookieConsentPopup
+##.ccm-banner-small
+##.ccm-bottom-slide
+##.ccmcss_oic
+##.ccp-overlay-fullscreen
+##.ccpa-alert
+##.ccpa-banner
+##.ccpa-banner-container
+##.ccpa-banner-root
+##.ccpa-consent-bar
+##.ccpa-container
+##.ccpa-cookie-notification
+##.ccpa-message-banner
+##.ccpa-notice-wrapper
+##.ccpa-notification
+##.ccpa-notification-banner
+##.ccpa-notification-banner_1-0
+##.ccpa-overlay
+##.ccpa-popup
+##.ccpa-slideup
+##.ccpa-slideup--row
+##.ccpaBanner
+##.ccpa_container_class
+##.ccpa_opt_out_banner
+##.ccpa_opt_out_reset
+##.ccpabar
+##.ccpacookie-banner
+##.ccwrap
+##.cczcook_banner-wrapper
+##.cd__cookie
+##.cdl-cookies
+##.cdp-cookies-alerta
+##.ce-banner-html
+##.ce-cookie-banner
+##.ce-cookieconsent
+##.ce_rsce_tao_fixed_note
+##.ce_rsce_vision_fixed_note
+##.center-gdpr
+##.center_cookies
+##.cerez-bildirim
+##.cerez-mesaji
+##.cerez-politikasi-container
+##.cerez-popup-box
+##.cerezPopupUyari
+##.cerezbilgisi
+##.cerezsorgula
+##.cf-annoying-eu-cookie-message
+##.cf__main-block
+##.cfmCookieLayer
+##.cfrcookiebar
+##.cg-cookie-policy-disclaimer
+##.cg-cookie-warning
+##.cg-cookies-banner
+##.cgu-cookie-overlay-shadow
+##.ch-cookie-consent
+##.ch2-dialog-bottom
+##.change-cookie-settings
+##.check-accept-google-analytics
+##.checkCookie
+##.checkcookie
+##.checkcookies
+##.chimunthu-lgpd-bar-main
+##.choc-banner
+##.chr-cookie-banner
+##.chsoft-cookies
+##.chsoft-cookies-main
+##.ci-privacy-hint
+##.ci-rodo-footer
+##.ciacho
+##.ciacho2-wrap-container
+##.ciasteczka
+##.ciasteczka-info
+##.ciasteczka_info
+##.ciasteczko-info
+##.ciastka
+##.ciastka_ostrzezenie
+##.cigi-cookie-banner
+##.cili-cookies
+##.cin_cookie_notification
+##.cint-cookiebot
+##.cipBackgroundOverlay
+##.cipCookieOverlay
+##.circus-gdpr-cookie-bar
+##.ciyashop-cookies-info
+##.cj-privacy-settings
+##.ck-Banner
+##.ck-banner
+##.ck-cookie-w
+##.ck-notiz
+##.ckWarning
+##.ck_banner
+##.ck_infocookie
+##.cki-unaccepted
+##.cki-wrap
+##.cklowpopContainer
+##.ckn-container
+##.cky-consent-bar
+##.cky-overlay
+##.cl-consent
+##.cl-tertiary.cookie
+##.cl_bar
+##.cl_cookie_privacy_layer
+##.cl_gdpr_banner
+##.class-cookieconsent
+##.class_rgpd
+##.clb-cookie-notice-lgpd-container
+##.clearfix > #cookies
+##.clearfix.cookie
+##.clearfy-cookie
+##.clearfy-cookie--bottom
+##.clever-cookielaw
+##.client-cookies-notice
+##.clm-cookie-banner
+##.clone-cookie-alert
+##.close-centered-cookie-message-lq
+##.close-cookies
+##.close-mobile-cookie
+##.closeCookieParent
+##.closeCookiePolicy
+##.cls-cookie
+##.cm-cookie-geo
+##.cm-cookie-policy
+##.cm-cookie-pop
+##.cm-cookie__prompt
+##.cm-cookies
+##.cm-message
+##.cm-notification-container
+##.cm-user-message
+##.cm-wrapper-wrapper.inner
+##.cm_disclaimer
+##.cm_disclaimer-banner
+##.cmc-cookie-policy-banner
+##.cmnstr-activated
+##.cmp-app_gdpr
+##.cmp-ban-nocookie
+##.cmp-cookie
+##.cmp-cookie-message
+##.cmp-cookie-notification
+##.cmp-cookie-policy
+##.cmp-cookie-stmt
+##.cmp-cookie-wrapper
+##.cmp-popup-cookies
+##.cmp-teaser__subcontent
+##.cmpBoxWelcomeOptIn
+##.cmp_cookies_usage_wr
+##.cmpboxWelcomeGDPR
+##.cmplz-show-banner
+##.cmplz-tcf-banner-hidden
+##.cmpwrapper
+##.cms-cookie-layer
+##.cms-cookielaw
+##.cmsCookieNotification
+##.cms_cookie_wrapper
+##.cms_dp_bar_fixed
+##.cn-banner
+##.cn-cookie
+##.cn-dsgvo-privacy-notice
+##.cn-first-time-seen
+##.cn-position-bottom
+##.cnct_lgpd_box
+##.cnil-alert
+##.cnil-alert-inner
+##.cnil-banner
+##.cnil-banner-v2
+##.cnil-block
+##.cnil-cookie
+##.cnil-cookie-alert
+##.cnil-cookies
+##.cnil-message
+##.cnil-panel
+##.cnil-panel--displayed
+##.cnil-warning
+##.cnilContainer
+##.cnilCookies
+##.cnilNotification
+##.cnil_consent
+##.cnil_cookie
+##.cnil_warning
+##.cnilinfo
+##.cnl-cookies
+##.cnst-container
+##.cnt-ckcnsntmngr
+##.cnt-cookies
+##.cnt-text-info-cookie
+##.cntx-cookie-info
+##.cntx-cookie-modal-handler
+##.cnwrap
+##.co-cookNotification
+##.co-cookie-policy-banner
+##.co-cookies-disc-bar
+##.co_consent_message_container
+##.cockie-popup
+##.cockie-popup-wrap
+##.cod-cookie-container
+##.coi-consent-banner
+##.cokWrap
+##.cokie-box
+##.cokieAlert
+##.cokies.pf
+##.cokkie-consent-dialog
+##.cokkie-lyr
+##.col-9 > #cookie
+##.col-sm-8.cookie
+##.col-xs-10.cookie
+##.col.modal-cookie
+##.color-texto-cookies
+##.com-cookie
+##.com-cookie-policy
+##.combinedConsent_bottom
+##.combined_consent_js_inited
+##.common-cookie
+##.common-cookieNotice
+##.common-cookies
+##.common-gdpr-box
+##.common-header-gdpr
+##.commonPrivacy__bar
+##.common__cookie
+##.common_prompt-cookie-bg
+##.communikat_cookie
+##.comp-cookie-policy-banner
+##.comp-cookie_banner
+##.comp-dsgvo-banner
+##.comp-modal-cookie
+##.comp__cookieBar
+##.compliance-eu-cookie-banner
+##.complianceoverlay
+##.component--message__cookies
+##.component-Exports-CookiesBar
+##.component-banner-cookie
+##.component-consent-banner-consent-banner
+##.component-cookie
+##.component-cookie-alert
+##.component-cookie-banner
+##.component-cookie-bar
+##.component-cookie-info-bar
+##.component-cookie-notification
+##.component-cookie-overlay-wrapper
+##.component-cookie-policy
+##.component-cookie-popup
+##.component-cookiealert
+##.component-cookies
+##.component-cookies-message
+##.component-cookies-msg
+##.component-cookies-popup
+##.component_eu_eprivacy_option
+##.component_gdprMessage__container
+##.componente-aviso-cookies
+##.componente-aviso-cookies-botoes
+##.components-cookie-law-basic
+##.comx-cookies-banner
+##.con-kit-component-cookie-banner
+##.con-kit-gdpr-cookie-pop-up
+##.cond_utilis_cookie
+##.confidentialite_header
+##.configMessages__footer.configMessages
+##.confirm-cookie-container
+##.confirm-cookie__wrapper
+##.confirm-cookies-container
+##.confirm_cookies_box
+##.connect-cookie-bar
+##.consent-animation
+##.consent-at-bottom
+##.consent-background-overlay
+##.consent-banner
+##.consent-bar
+##.consent-bg-dark
+##.consent-confirmation-banner
+##.consent-container
+##.consent-container--banner
+##.consent-content
+##.consent-cookie-banner
+##.consent-cookie-box--lightbox
+##.consent-cookie-wrapper
+##.consent-cookies
+##.consent-cookies-dialog
+##.consent-cta
+##.consent-holder
+##.consent-layer
+##.consent-layer-v2
+##.consent-management-alert
+##.consent-management-simple
+##.consent-manager-layer
+##.consent-manager-overlay
+##.consent-manager.banner
+##.consent-message
+##.consent-modal-first
+##.consent-modal__overlay
+##.consent-module-roadblock
+##.consent-panel
+##.consent-pop-up
+##.consent-popover
+##.consent-popup
+##.consent-toast
+##.consent-toolbar
+##.consent-ui--banner
+##.consent-wall-overlay
+##.consent-warning-container
+##.consent-wrap-outer
+##.consent-wrapper
+##.consent-wrapper-active
+##.consent.cookies
+##.consent.row
+##.consentBanner
+##.consentBarWrapper
+##.consentContainer
+##.consentLayover
+##.consentOverlayContent
+##.consentPopup
+##.consentWrapper
+##.consent[ng-controller="cookieConsentCtrl"]
+##.consent__alert
+##.consent__banner
+##.consent__cookies
+##.consent_box
+##.consent_breadcrumbs
+##.consent_cookies
+##.consent_manager-background
+##.consent_required_overlay
+##.consentbarcontainer
+##.consentement_cookie
+##.consentement_cookies
+##.consentimentoCookie
+##.consently-bar
+##.consentr-container
+##.consentr-notification
+##.consents-bar
+##.console-head-cookies
+##.const__cookie-banner
+##.consumer-privacy-banner
+##.cont-cookie
+##.contCookie
+##.cont_avis_galetes
+##.container ~ div[data-react-class="CookieAgree"]
+##.container-avisocookies
+##.container-banner-cookie
+##.container-cookie
+##.container-cookie-advise
+##.container-cookie-bar
+##.container-cookie-consent
+##.container-cookie-melding
+##.container-cookie-notice
+##.container-cookie-policy
+##.container-cookie-popup
+##.container-cookie-wp-palmas
+##.container-cookies
+##.container-cookiesBar
+##.container-fluid.cookie-modal
+##.container-fluid.cookies
+##.container-gdpr-cookie-banner
+##.container-lgpd
+##.container-notificacao-lgpd
+##.container.cookieinfo
+##.containerBox-cookies
+##.containerCookie
+##.containerCookieDisclaimer
+##.containerGDPR
+##.containerOuterCookie
+##.container__cookiesPolicy
+##.container_content_cookie
+##.container_cookie
+##.container_cookies
+##.container_modal_cookies
+##.contao-cookiebar
+##.contcookies
+##.contenedor-cookies
+##.contenedor-ley-cookies
+##.contenedorAvisoCookies
+##.contenedor_cookies
+##.content--cookie-js
+##.content-alert-browser
+##.content-alert-cookie
+##.content-con-cookie
+##.content-cookie
+##.content-cookies
+##.content-legale-cookie
+##.contentCookie
+##.contentCookieBox
+##.contentRender_name_plugins_common_cookie_banner
+##.contentRender_name_plugins_common_gdpr_banner
+##.content_cookies
+##.conteudo-cookie-accepted
+##.conteudoCookies
+##.contiene-cookie
+##.contieneCookies
+##.coo-banner
+##.coo_banner-notice
+##.cooces__wrap
+##.coockie
+##.coockie-bar
+##.coockie-block
+##.coockie-line
+##.coockie-message
+##.coockie-popup
+##.coockie-warning
+##.coockieBar
+##.coockieLaw
+##.coockiePolicy
+##.coockieWindow
+##.coockie_banner
+##.coockie_popup
+##.coockie_txt
+##.coockiebar
+##.coockiediv
+##.coockiehinweis
+##.coockies
+##.coockies-block
+##.coockies-message
+##.coockies-popup
+##.coockiesModalContainer
+##.coockiesPolicy
+##.coockies_alert
+##.coockiesfixed
+##.cooike_alert_box
+##.cook-accept
+##.cook-popup
+##.cook-window
+##.cookLink
+##.cook_msg
+##.cook_plcy
+##.cook_using_perm
+##.cookacceptor
+##.cookbx
+##.cookcontainer
+##.cookeEnabler
+##.cookeHint
+##.cooki-container
+##.cooki_baner_wrp
+##.cookie > .box
+##.cookie > .rgpd
+##.cookie--active
+##.cookie--banner
+##.cookie--bar-container
+##.cookie--consent--root
+##.cookie--desktop
+##.cookie--form
+##.cookie--layer
+##.cookie--notification
+##.cookie--overlay
+##.cookie--permission
+##.cookie--polityka
+##.cookie--popup
+##.cookie--section
+##.cookie--top
+##.cookie--unset
+##.cookie--visible
+##.cookie--wrap
+##.cookie--wrap__on
+##.cookie-03
+##.cookie-1
+##.cookie-Banner
+##.cookie-above
+##.cookie-accept-area
+##.cookie-accept-banner
+##.cookie-accept-bar
+##.cookie-accept-block
+##.cookie-accept-box
+##.cookie-accept-default
+##.cookie-accept-notice
+##.cookie-accept-overlay
+##.cookie-accept-popup
+##.cookie-accept-style
+##.cookie-acceptance
+##.cookie-acceptance-banner
+##.cookie-acceptance-container
+##.cookie-acceptance-dialog
+##.cookie-acceptance-message
+##.cookie-acceptance-modal
+##.cookie-acceptancebox
+##.cookie-acceptation-module
+##.cookie-acception
+##.cookie-acceptor
+##.cookie-acknowledgement
+##.cookie-adv
+##.cookie-advert
+##.cookie-advertisement
+##.cookie-advertisment
+##.cookie-advice
+##.cookie-advise
+##.cookie-advisor
+##.cookie-age
+##.cookie-aggrement-block-container
+##.cookie-agree
+##.cookie-agree-popup
+##.cookie-agree-with-use
+##.cookie-agree-wrapper
+##.cookie-agreed
+##.cookie-agreement
+##.cookie-agreement-container
+##.cookie-agreement-wrapper
+##.cookie-alert--top
+##.cookie-alert-1
+##.cookie-alert-2
+##.cookie-alert-2018-c
+##.cookie-alert-box
+##.cookie-alert-box-wrapper
+##.cookie-alert-container
+##.cookie-alert-holder
+##.cookie-alert-msk
+##.cookie-alert-outer
+##.cookie-alert-panel
+##.cookie-alert-strip-container
+##.cookie-alert-wrap
+##.cookie-alert-wrapper
+##.cookie-all
+##.cookie-allcontent
+##.cookie-allow-block
+##.cookie-allow-confirm
+##.cookie-and-privacy-container
+##.cookie-announce
+##.cookie-announcement
+##.cookie-approval__wrapper
+##.cookie-approvement
+##.cookie-area
+##.cookie-arksigner
+##.cookie-assistant
+##.cookie-assistant-wrapper
+##.cookie-attention
+##.cookie-back
+##.cookie-backdrop
+##.cookie-ban
+##.cookie-band
+##.cookie-baner
+##.cookie-banner--disable-overlay
+##.cookie-banner--simple
+##.cookie-banner--wrapper
+##.cookie-banner--wrapper-js
+##.cookie-banner-backdrop
+##.cookie-banner-background
+##.cookie-banner-backside-tealium
+##.cookie-banner-bg
+##.cookie-banner-block
+##.cookie-banner-blocking-div
+##.cookie-banner-body-overlay
+##.cookie-banner-bottom
+##.cookie-banner-box
+##.cookie-banner-button
+##.cookie-banner-component-container
+##.cookie-banner-cont
+##.cookie-banner-container
+##.cookie-banner-desktop
+##.cookie-banner-footer
+##.cookie-banner-info
+##.cookie-banner-info-bar-container
+##.cookie-banner-inner
+##.cookie-banner-js
+##.cookie-banner-layer
+##.cookie-banner-lgpd
+##.cookie-banner-lgpd-container
+##.cookie-banner-lgpd_text-box
+##.cookie-banner-modal-backdrop
+##.cookie-banner-msg
+##.cookie-banner-old
+##.cookie-banner-outer
+##.cookie-banner-outer-container
+##.cookie-banner-overlay
+##.cookie-banner-section
+##.cookie-banner-shadow
+##.cookie-banner-shroud
+##.cookie-banner-styr
+##.cookie-banner-tm
+##.cookie-banner-tm__overlay
+##.cookie-banner-view
+##.cookie-banner-white
+##.cookie-banner-window
+##.cookie-banner.navbar-fixed-bottom
+##.cookie-banner.toast
+##.cookie-banner__bottom
+##.cookie-banner__bottom-panel
+##.cookie-banner__cnt
+##.cookie-banner__container
+##.cookie-banner__overlay
+##.cookie-banner__section
+##.cookie-banner__wrapper
+##.cookie-bar--active
+##.cookie-bar--bottom
+##.cookie-bar--type-manage
+##.cookie-bar-active-blocker
+##.cookie-bar-alert
+##.cookie-bar-backdrop
+##.cookie-bar-con
+##.cookie-bar-container
+##.cookie-bar-inner
+##.cookie-bar-mask
+##.cookie-bar-message
+##.cookie-bar-new
+##.cookie-bar-notification
+##.cookie-bar-notifications
+##.cookie-bar-outer
+##.cookie-bar-popover
+##.cookie-bar-section
+##.cookie-bar-uniqa
+##.cookie-bar-wp
+##.cookie-bar-wrap
+##.cookie-bar-wrapper
+##.cookie-bar2
+##.cookie-bar__inner
+##.cookie-bar__wrapper
+##.cookie-bar_component
+##.cookie-bar_container
+##.cookie-bar_inner
+##.cookie-bar_outer
+##.cookie-barre
+##.cookie-bg
+##.cookie-bg-wrap
+##.cookie-bg-wrapper
+##.cookie-block
+##.cookie-block-visible
+##.cookie-body
+##.cookie-body-overlay
+##.cookie-book
+##.cookie-bot
+##.cookie-bottom
+##.cookie-bottom-main
+##.cookie-bottom-place
+##.cookie-box
+##.cookie-box-en
+##.cookie-box-wrapper
+##.cookie-box__overlay
+##.cookie-box__wrap
+##.cookie-bubble
+##.cookie-button-consent
+##.cookie-callout
+##.cookie-card_popup_fixed
+##.cookie-cell
+##.cookie-choice
+##.cookie-choices--info
+##.cookie-choices-info
+##.cookie-class
+##.cookie-clickall
+##.cookie-cnf-banner
+##.cookie-cnf-banner--background
+##.cookie-cnil
+##.cookie-cnt
+##.cookie-collapsible
+##.cookie-compliance-banner
+##.cookie-compliance-banner-wrapper
+##.cookie-compliance-container
+##.cookie-compliance-desk
+##.cookie-compliance-message
+##.cookie-compliance-popup
+##.cookie-complience-banner
+##.cookie-condition
+##.cookie-conditions
+##.cookie-confirmation
+##.cookie-confirmation-notice
+##.cookie-confirmation__box
+##.cookie-consen
+##.cookie-consent--GDPR
+##.cookie-consent--box
+##.cookie-consent--ep3
+##.cookie-consent--normal
+##.cookie-consent--show
+##.cookie-consent--wrapper
+##.cookie-consent-acknowledgement-conatiner
+##.cookie-consent-advanced
+##.cookie-consent-alert
+##.cookie-consent-app
+##.cookie-consent-area
+##.cookie-consent-backdrop
+##.cookie-consent-background
+##.cookie-consent-badge
+##.cookie-consent-banner-container
+##.cookie-consent-banner-opt-out
+##.cookie-consent-banner-overlay
+##.cookie-consent-banner__wrapper
+##.cookie-consent-bar-overlay
+##.cookie-consent-bar-wrap
+##.cookie-consent-bottom
+##.cookie-consent-box
+##.cookie-consent-comp
+##.cookie-consent-component
+##.cookie-consent-container
+##.cookie-consent-container-v2
+##.cookie-consent-ctr
+##.cookie-consent-darkener
+##.cookie-consent-dialog
+##.cookie-consent-dialogue
+##.cookie-consent-dialogue__advertising
+##.cookie-consent-div
+##.cookie-consent-embed-overlay
+##.cookie-consent-flyout
+##.cookie-consent-footer
+##.cookie-consent-header-wrapper
+##.cookie-consent-holder
+##.cookie-consent-jolt
+##.cookie-consent-layer
+##.cookie-consent-local
+##.cookie-consent-manager
+##.cookie-consent-message
+##.cookie-consent-notice
+##.cookie-consent-notify
+##.cookie-consent-overlay-background
+##.cookie-consent-panel
+##.cookie-consent-panel-message
+##.cookie-consent-pnl
+##.cookie-consent-popup-overlay
+##.cookie-consent-popup-wrap
+##.cookie-consent-prompt
+##.cookie-consent-prompt-container
+##.cookie-consent-rectangle-wrapper
+##.cookie-consent-request
+##.cookie-consent-revoke
+##.cookie-consent-shadow-bg
+##.cookie-consent-shadow-layer
+##.cookie-consent-splash
+##.cookie-consent-v2
+##.cookie-consent-wall-overlay
+##.cookie-consent-widget
+##.cookie-consent-wrap
+##.cookie-consent-wrapper
+##.cookie-consent.bottom
+##.cookie-consent.invers
+##.cookie-consent.show
+##.cookie-consent.shown
+##.cookie-consent[data-closable]
+##.cookie-consent[data-controller]
+##.cookie-consent__bar
+##.cookie-consent__bar-container
+##.cookie-consent__container
+##.cookie-consent__dialog
+##.cookie-consent__overlay
+##.cookie-consent__wrapper
+##.cookie-consent_overlay
+##.cookie-conset-bar
+##.cookie-cont
+##.cookie-contain
+##.cookie-container-main
+##.cookie-container-most
+##.cookie-container-selector
+##.cookie-content-container
+##.cookie-content-overlay
+##.cookie-content-ribbon
+##.cookie-control
+##.cookie-control-banner
+##.cookie-control-bar
+##.cookie-control-container
+##.cookie-control-content
+##.cookie-control__banner
+##.cookie-copy
+##.cookie-core
+##.cookie-cover
+##.cookie-cube
+##.cookie-curtain
+##.cookie-dark-filter
+##.cookie-data-warning
+##.cookie-demo
+##.cookie-demo-on
+##.cookie-description
+##.cookie-desktop
+##.cookie-dialog
+##.cookie-dialog-center
+##.cookie-dialog-container
+##.cookie-dialog-wrapper
+##.cookie-dialogue
+##.cookie-directive-alert
+##.cookie-directive-container
+##.cookie-directive-overlay
+##.cookie-disclaimer--default
+##.cookie-disclaimer--overlay
+##.cookie-disclaimer-backdrop
+##.cookie-disclaimer-background
+##.cookie-disclaimer-banner
+##.cookie-disclaimer-box
+##.cookie-disclaimer-component
+##.cookie-disclaimer-container
+##.cookie-disclaimer-holder
+##.cookie-disclaimer-mask
+##.cookie-disclaimer-message
+##.cookie-disclaimer-notice
+##.cookie-disclaimer-overlay-container
+##.cookie-disclaimer-wrapper
+##.cookie-disclosure-message
+##.cookie-drop-down
+##.cookie-dropdown
+##.cookie-enter-done
+##.cookie-eu-msg
+##.cookie-event-block
+##.cookie-fade
+##.cookie-fb-title
+##.cookie-fb-top
+##.cookie-fix
+##.cookie-fixed
+##.cookie-fixed-footer
+##.cookie-fixed-hint
+##.cookie-flash
+##.cookie-float
+##.cookie-fn
+##.cookie-footer
+##.cookie-footer--wrapper
+##.cookie-footer-banner
+##.cookie-footer-bar
+##.cookie-footer-container
+##.cookie-footer-dialog
+##.cookie-footer-msg
+##.cookie-frame
+##.cookie-full-bleed
+##.cookie-fw-container
+##.cookie-gdpr-popup-ovelayer
+##.cookie-gdpr__banner
+##.cookie-gdpr__fade-in
+##.cookie-giodo
+##.cookie-go
+##.cookie-grow
+##.cookie-guard-msg
+##.cookie-guideline
+##.cookie-handling-new
+##.cookie-hint-container
+##.cookie-hint-wrapper
+##.cookie-holder
+##.cookie-hopper
+##.cookie-hu-container
+##.cookie-icerik
+##.cookie-identification
+##.cookie-image-wrapper
+##.cookie-img
+##.cookie-info-background
+##.cookie-info-banner
+##.cookie-info-bar
+##.cookie-info-block
+##.cookie-info-block-section
+##.cookie-info-box
+##.cookie-info-box-agree
+##.cookie-info-box-overlay
+##.cookie-info-close-wrapper
+##.cookie-info-cont
+##.cookie-info-container
+##.cookie-info-content
+##.cookie-info-dropdown
+##.cookie-info-header
+##.cookie-info-layer
+##.cookie-info-modal
+##.cookie-info-more-options-background
+##.cookie-info-more-options-layer
+##.cookie-info-notification-window-conatiner
+##.cookie-info-overlay
+##.cookie-info-slider
+##.cookie-info-strip
+##.cookie-info-text
+##.cookie-info-wrapper
+##.cookie-info__panel
+##.cookie-info__panel--show
+##.cookie-infobar
+##.cookie-infobox-wrp
+##.cookie-inform
+##.cookie-inform-and-ask
+##.cookie-information
+##.cookie-information-bar
+##.cookie-information-cont
+##.cookie-information-container
+##.cookie-information-panel
+##.cookie-information-text
+##.cookie-information-wrapper
+##.cookie-informative-message
+##.cookie-informer
+##.cookie-informer-holder
+##.cookie-infos
+##.cookie-inner
+##.cookie-inner-container
+##.cookie-inquiry--settings
+##.cookie-insert
+##.cookie-item
+##.cookie-item-protection
+##.cookie-jar
+##.cookie-jvns
+##.cookie-kutu
+##.cookie-l
+##.cookie-label
+##.cookie-label-wrapprer
+##.cookie-landing
+##.cookie-lasche
+##.cookie-lasche-hp
+##.cookie-law
+##.cookie-law-alert
+##.cookie-law-approval-wrapper
+##.cookie-law-banner
+##.cookie-law-bar
+##.cookie-law-block
+##.cookie-law-block-wrapper
+##.cookie-law-box
+##.cookie-law-cont
+##.cookie-law-container
+##.cookie-law-dialog
+##.cookie-law-dialog-contentwrapper
+##.cookie-law-info
+##.cookie-law-info-bar
+##.cookie-law-message
+##.cookie-law-notice
+##.cookie-law-notice-container
+##.cookie-law-overlay
+##.cookie-law-policy
+##.cookie-law-text
+##.cookie-law-wrapper
+##.cookie-law__container
+##.cookie-layer-advanced
+##.cookie-layer-background
+##.cookie-layer-bottom
+##.cookie-layer-container
+##.cookie-layer-new
+##.cookie-layer-visible
+##.cookie-layer-wrapper
+##.cookie-layer__overlay
+##.cookie-layer__wrapper
+##.cookie-layerbody
+##.cookie-layers
+##.cookie-lb-bottom
+##.cookie-legal
+##.cookie-legal-banner
+##.cookie-legal-box
+##.cookie-legal-content
+##.cookie-legal-info
+##.cookie-legal-notice
+##.cookie-legal-overlay
+##.cookie-legislation
+##.cookie-lgpd
+##.cookie-lgpd-popup
+##.cookie-line
+##.cookie-line__layer
+##.cookie-listener
+##.cookie-madness
+##.cookie-management-overlay
+##.cookie-manager--extended
+##.cookie-manager-banner
+##.cookie-manager-consent
+##.cookie-manager-dialog
+##.cookie-manager-overlay
+##.cookie-manager-popup__container
+##.cookie-manager-portlet
+##.cookie-mark
+##.cookie-mask
+##.cookie-mat-wrapper
+##.cookie-melding
+##.cookie-melding-fond
+##.cookie-melding-wrapper
+##.cookie-mention
+##.cookie-mes
+##.cookie-mesaj
+##.cookie-mess
+##.cookie-message-2020
+##.cookie-message-banner
+##.cookie-message-bar
+##.cookie-message-block
+##.cookie-message-blocking-background
+##.cookie-message-box
+##.cookie-message-container
+##.cookie-message-desktop
+##.cookie-message-modal-overlay
+##.cookie-message-overlay
+##.cookie-message-wrapper
+##.cookie-message.cmsFlexible
+##.cookie-message__bar
+##.cookie-message__container
+##.cookie-message__wrap
+##.cookie-message__wrapper
+##.cookie-messages
+##.cookie-messaging
+##.cookie-messaging-component
+##.cookie-min-panel
+##.cookie-modal-backdrop
+##.cookie-modal-bg
+##.cookie-modal-message
+##.cookie-modal-overlay
+##.cookie-modal__overlay
+##.cookie-mode__wrap
+##.cookie-module
+##.cookie-module-wrapper
+##.cookie-monster
+##.cookie-monster-dialog
+##.cookie-monster-overlay
+##.cookie-monster__container
+##.cookie-msg-bar
+##.cookie-msg-box
+##.cookie-msg-info
+##.cookie-msg-info-container
+##.cookie-msg-wrap
+##.cookie-msg__content
+##.cookie-nag
+##.cookie-nagbar
+##.cookie-nav
+##.cookie-navbar
+##.cookie-none
+##.cookie-not-confirm-banner
+##.cookie-note
+##.cookie-note--wrap
+##.cookie-note-container
+##.cookie-note-popup
+##.cookie-note-wrapper
+##.cookie-note__wrapper
+##.cookie-notf
+##.cookie-notice--isVisible
+##.cookie-notice--visible
+##.cookie-notice--wrapper
+##.cookie-notice-2
+##.cookie-notice-alert
+##.cookie-notice-banner
+##.cookie-notice-bar
+##.cookie-notice-bottom
+##.cookie-notice-container
+##.cookie-notice-content
+##.cookie-notice-dialog
+##.cookie-notice-dsvgo
+##.cookie-notice-fixed
+##.cookie-notice-footer
+##.cookie-notice-full-container
+##.cookie-notice-holder
+##.cookie-notice-inner
+##.cookie-notice-overlay
+##.cookie-notice-popup
+##.cookie-notice-root
+##.cookie-notice-top
+##.cookie-notice-ui
+##.cookie-notice-wrap
+##.cookie-notice-wrapper-privacypolicy
+##.cookie-notice.alert
+##.cookie-notice.alert-secondary
+##.cookie-notice.bottom
+##.cookie-notice.top
+##.cookie-notice__background
+##.cookie-notice__inner
+##.cookie-notice__overlay
+##.cookie-noticebar
+##.cookie-notif
+##.cookie-notif-banner
+##.cookie-notification--external
+##.cookie-notification-alert
+##.cookie-notification-backdrop
+##.cookie-notification-banner
+##.cookie-notification-bar
+##.cookie-notification-block
+##.cookie-notification-box
+##.cookie-notification-bubble
+##.cookie-notification-container
+##.cookie-notification-es
+##.cookie-notification-header
+##.cookie-notification-holder
+##.cookie-notification-message
+##.cookie-notification-modal
+##.cookie-notification-msg
+##.cookie-notification-wrap
+##.cookie-notification__bar
+##.cookie-notification__wrap
+##.cookie-notification__wrapper
+##.cookie-notification_wr
+##.cookie-notifications
+##.cookie-notifier
+##.cookie-notifier-content
+##.cookie-notifikasjon
+##.cookie-notify
+##.cookie-notify-block
+##.cookie-notify-container
+##.cookie-notify-popup
+##.cookie-notify__wrapper
+##.cookie-ntf
+##.cookie-nudge
+##.cookie-offer
+##.cookie-ok
+##.cookie-on-top
+##.cookie-one
+##.cookie-opa
+##.cookie-operation-message
+##.cookie-opt-in
+##.cookie-opt-in-overlay
+##.cookie-opt-out
+##.cookie-optin
+##.cookie-optin-modal
+##.cookie-options-hook
+##.cookie-outer
+##.cookie-outer-container
+##.cookie-outer-container-wrap
+##.cookie-outer-wrapper
+##.cookie-outter
+##.cookie-oven-widget
+##.cookie-over
+##.cookie-overLay
+##.cookie-overlay-box
+##.cookie-overlay-modal-box
+##.cookie-overlay-wrapper
+##.cookie-pane
+##.cookie-pane--shown
+##.cookie-panel-content
+##.cookie-panel-overlay
+##.cookie-permission
+##.cookie-permission--backdrop
+##.cookie-permission--dim
+##.cookie-permission-banner
+##.cookie-permission-container-big
+##.cookie-permission-container-overlay
+##.cookie-permission-footer
+##.cookie-permission-prompt
+##.cookie-plugin
+##.cookie-police
+##.cookie-policies
+##.cookie-policy--block
+##.cookie-policy--container
+##.cookie-policy-accept
+##.cookie-policy-aggressive-popup
+##.cookie-policy-agree
+##.cookie-policy-agreement
+##.cookie-policy-alert
+##.cookie-policy-area
+##.cookie-policy-banner-bar
+##.cookie-policy-bar
+##.cookie-policy-bar-base
+##.cookie-policy-bar-bottom
+##.cookie-policy-belt
+##.cookie-policy-block
+##.cookie-policy-bottom
+##.cookie-policy-box
+##.cookie-policy-class
+##.cookie-policy-consent
+##.cookie-policy-cont
+##.cookie-policy-container
+##.cookie-policy-content
+##.cookie-policy-dialog
+##.cookie-policy-disclaimer
+##.cookie-policy-div
+##.cookie-policy-durex
+##.cookie-policy-element
+##.cookie-policy-footer
+##.cookie-policy-form
+##.cookie-policy-gdpr
+##.cookie-policy-inform
+##.cookie-policy-june-2019-notice
+##.cookie-policy-layer
+##.cookie-policy-message
+##.cookie-policy-modal
+##.cookie-policy-msg
+##.cookie-policy-note
+##.cookie-policy-notice
+##.cookie-policy-notice-container
+##.cookie-policy-notification
+##.cookie-policy-opt-out
+##.cookie-policy-overlay
+##.cookie-policy-panel
+##.cookie-policy-popin
+##.cookie-policy-popup
+##.cookie-policy-prompt
+##.cookie-policy-section
+##.cookie-policy-snackbar
+##.cookie-policy-statement
+##.cookie-policy-summary
+##.cookie-policy-tips
+##.cookie-policy-tips-wrapper
+##.cookie-policy-warning
+##.cookie-policy-warning-container
+##.cookie-policy-widget
+##.cookie-policy-window
+##.cookie-policy-wrap
+##.cookie-policy-wrapper
+##.cookie-policy__card
+##.cookie-policy__container
+##.cookie-policymsg
+##.cookie-politics
+##.cookie-pop
+##.cookie-pop-main
+##.cookie-pop-up
+##.cookie-pop-up-component
+##.cookie-pop-up-container
+##.cookie-pop-up-overlay
+##.cookie-pop-wrap
+##.cookie-popUp
+##.cookie-popin
+##.cookie-popover
+##.cookie-popover--active
+##.cookie-popup-bar
+##.cookie-popup-box
+##.cookie-popup-container
+##.cookie-popup-first
+##.cookie-popup-mobile-wrapper
+##.cookie-popup-overlay
+##.cookie-popup-win
+##.cookie-popup-wrapper
+##.cookie-popup.variantSelectMobile
+##.cookie-popup__content
+##.cookie-popup__heading
+##.cookie-popup__wrapper
+##.cookie-pp
+##.cookie-preference-modal
+##.cookie-preference__overlay
+##.cookie-privacy
+##.cookie-privacy-banner
+##.cookie-privacy-container
+##.cookie-privacy-message
+##.cookie-privacy-notice
+##.cookie-privacy-policy-popup
+##.cookie-privacy-popup
+##.cookie-processed
+##.cookie-promo
+##.cookie-prompt
+##.cookie-prompt-container
+##.cookie-prompt-wrap
+##.cookie-prompt-wrapper
+##.cookie-prompt__outer
+##.cookie-prompter
+##.cookie-question
+##.cookie-region
+##.cookie-request
+##.cookie-request-ctn
+##.cookie-revoke-hidden
+##.cookie-ribbon
+##.cookie-ribbon-component
+##.cookie-richtlinie
+##.cookie-rodo
+##.cookie-rodo--center
+##.cookie-rodo-dialog
+##.cookie-rogla-div
+##.cookie-row
+##.cookie-rules-wrapper
+##.cookie-runway
+##.cookie-script-content
+##.cookie-section
+##.cookie-set-pop-up
+##.cookie-setting-bottom-bar
+##.cookie-setting-message
+##.cookie-settings--simple
+##.cookie-settings-alert
+##.cookie-settings-band
+##.cookie-settings-message
+##.cookie-settings.fixed-bottom
+##.cookie-settings.is-visible
+##.cookie-settings__container
+##.cookie-settings__overlay
+##.cookie-show-bar
+##.cookie-show-bar-bottom
+##.cookie-sign
+##.cookie-signbody
+##.cookie-siteusage-notice
+##.cookie-slide-container
+##.cookie-slide-down
+##.cookie-slider
+##.cookie-snack
+##.cookie-snippet
+##.cookie-splash
+##.cookie-stage
+##.cookie-statement
+##.cookie-statement-popup
+##.cookie-status
+##.cookie-status-message
+##.cookie-sticky
+##.cookie-sticky-flex
+##.cookie-sticky-holder
+##.cookie-sticky-wrap
+##.cookie-stikey-nav
+##.cookie-strip
+##.cookie-stripe
+##.cookie-substrate
+##.cookie-tab
+##.cookie-table
+##.cookie-teade
+##.cookie-teaser
+##.cookie-tekst
+##.cookie-terms
+##.cookie-thing
+##.cookie-though
+##.cookie-time
+##.cookie-tip
+##.cookie-tip-bg
+##.cookie-tip-container
+##.cookie-tip-wrap
+##.cookie-to-top
+##.cookie-toast
+##.cookie-toast-wrap
+##.cookie-toaster
+##.cookie-tool
+##.cookie-tool-container
+##.cookie-toolbar
+##.cookie-tooltip
+##.cookie-tooltip-content
+##.cookie-tooltip_popup
+##.cookie-top
+##.cookie-top-banner
+##.cookie-topbannercontainer
+##.cookie-tos-footer
+##.cookie-txt
+##.cookie-ui-dialog
+##.cookie-undiz
+##.cookie-usage
+##.cookie-usage-info
+##.cookie-usage-info-block
+##.cookie-usage-msg
+##.cookie-usage-notification
+##.cookie-usage-notify
+##.cookie-usage-popup
+##.cookie-usage-widget
+##.cookie-usage-wrapper
+##.cookie-use
+##.cookie-use-popup
+##.cookie-used-note
+##.cookie-usgae
+##.cookie-uslovi
+##.cookie-uzenet
+##.cookie-verplicht-melding
+##.cookie-wall-container
+##.cookie-wall-form
+##.cookie-wall-wrapper
+##.cookie-warn-modal
+##.cookie-warn-msg
+##.cookie-warning
+##.cookie-warning-banner-view
+##.cookie-warning-bar
+##.cookie-warning-container
+##.cookie-warning-content
+##.cookie-warning-message
+##.cookie-warning-modal--ribbon
+##.cookie-warning-panel
+##.cookie-warning-popup
+##.cookie-warning-wrapper
+##.cookie-warning__overlay
+##.cookie-warning__wrapper
+##.cookie-warning_show
+##.cookie-warningbar
+##.cookie-warnung
+##.cookie-widget
+##.cookie-widget--open
+##.cookie-widget-holder
+##.cookie-widget-v2
+##.cookie-window
+##.cookie-window-block
+##.cookie-window-overlay-no-settings
+##.cookie-window-select
+##.cookie-wr
+##.cookie-wrap
+##.cookie-wrap-content
+##.cookie-wrap-tip
+##.cookie-wrapp
+##.cookie-wrapper-popup
+##.cookie-wrn-wrapper
+##.cookie-z-index
+##.cookie.alert
+##.cookie.alerte
+##.cookie.anchored-toast
+##.cookie.banner
+##.cookie.bg-white
+##.cookie.change-message--on-click
+##.cookie.container-fluid
+##.cookie.conteudo
+##.cookie.cookie-fullfat
+##.cookie.cookie-lowfat
+##.cookie.custom
+##.cookie.fixed
+##.cookie.fixed-bottom
+##.cookie.is-show
+##.cookie.is-visible
+##.cookie.isVisible
+##.cookie.jquery-notify-bar
+##.cookie.js-banner
+##.cookie.kozepre_igazit
+##.cookie.mb-0
+##.cookie.message
+##.cookie.messages
+##.cookie.navbar-fixed-bottom
+##.cookie.opt-in
+##.cookie.p-active
+##.cookie.popup
+##.cookie.rewoke
+##.cookie.row
+##.cookie.top-info
+##.cookie.v-alert
+##.cookie.visible
+##.cookie.widget
+##.cookie.widget_text
+##.cookie24_banner-wrapper
+##.cookie5
+##.cookieAcc
+##.cookieAccept
+##.cookieAcceptBox
+##.cookieAcceptPanel
+##.cookieAcceptPopup
+##.cookieAcceptWindow
+##.cookieAcceptWrapper
+##.cookieAcceptance
+##.cookieAcceptanceBox
+##.cookieAcceptanceOverlay
+##.cookieAcceptationModule
+##.cookieAccepted
+##.cookieAccepterGrayBody
+##.cookieAccepterPopup
+##.cookieAccepterSlider
+##.cookieActive
+##.cookieAd
+##.cookieAdvice
+##.cookieAdvise
+##.cookieAgree
+##.cookieAgreement
+##.cookieAlert
+##.cookieAlertBarContainer
+##.cookieAlertBarMessage
+##.cookieAlertBigTop
+##.cookieAlertBox
+##.cookieAlertContainer
+##.cookieAlertDesktop
+##.cookieAlertLayer
+##.cookieAlertWrapper
+##.cookieAllert
+##.cookieAnnoyer
+##.cookieApprove
+##.cookieAsker
+##.cookieBackground
+##.cookieBan
+##.cookieBandeau
+##.cookieBanner--layer
+##.cookieBannerActive
+##.cookieBannerContainer
+##.cookieBannerDisclaimerWrap
+##.cookieBannerOverlay
+##.cookieBannerText
+##.cookieBannerWrapper
+##.cookieBanner__banner
+##.cookieBanner__wrapper
+##.cookieBar-filler
+##.cookieBar-new-style
+##.cookieBarAniIn
+##.cookieBarContainer
+##.cookieBarInner
+##.cookieBarOverlay
+##.cookieBarReviewDesktop
+##.cookieBarTop
+##.cookieBarWrapper
+##.cookieBarX
+##.cookieBar__container
+##.cookieBea
+##.cookieBlk
+##.cookieBlock
+##.cookieBlog
+##.cookieBnr
+##.cookieBnrWrp
+##.cookieBottom
+##.cookieBox
+##.cookieBox-wrapper
+##.cookieBoxBackground
+##.cookieBoxWrap
+##.cookieBox__wrapper
+##.cookieBtn:not(button)
+##.cookieBubble
+##.cookieCD
+##.cookieCallout
+##.cookieCheck
+##.cookieCheckMainPanel
+##.cookieChoiceInfo
+##.cookieClass
+##.cookieClose
+##.cookieCnilCustom
+##.cookieCnilMakheia
+##.cookieCompliance
+##.cookieCon
+##.cookieConcent
+##.cookieConfirmOverlay
+##.cookieConfirmation
+##.cookieConfirmationMessage
+##.cookieCons
+##.cookieConsent-0-2-1
+##.cookieConsent-dialog
+##.cookieConsentAlert
+##.cookieConsentBanner
+##.cookieConsentBar
+##.cookieConsentBarContainer
+##.cookieConsentContainer
+##.cookieConsentContent
+##.cookieConsentCustomize-dialog
+##.cookieConsentFooter
+##.cookieConsentHinweis
+##.cookieConsentHinweisOverlay
+##.cookieConsentLayer
+##.cookieConsentMessage
+##.cookieConsentPanel
+##.cookieConsentPopup
+##.cookieConsentShort
+##.cookieConsentWrapper
+##.cookieConsentWrapperCon
+##.cookieContainer
+##.cookieContainerV2
+##.cookieControl
+##.cookieControl__Bar
+##.cookieControl__BarContainer
+##.cookieCorrector
+##.cookieCover
+##.cookieDetailsWrap
+##.cookieDialog
+##.cookieDialogTop
+##.cookieDialogue
+##.cookieDirWrap
+##.cookieDirective
+##.cookieDiscl
+##.cookieDisclaimerBox
+##.cookieDisclaimerContainer
+##.cookieDisclaimerContainerWrapper
+##.cookieDisclaimerV2
+##.cookieDisclaimerWrapper
+##.cookieDiv
+##.cookieDrawer
+##.cookieEN
+##.cookieEU
+##.cookieElement
+##.cookieEng
+##.cookieFancybox
+##.cookieFloater
+##.cookieFlyer
+##.cookieFlyout
+##.cookieFooter
+##.cookieFooterDiv
+##.cookieFooterbg
+##.cookieForm
+##.cookieForward
+##.cookieGate
+##.cookieGco
+##.cookieHandler
+##.cookieHeader
+##.cookieHeaderCenter
+##.cookieHeaderContainer
+##.cookieHeaderWrapper
+##.cookieHint
+##.cookieHintContainer
+##.cookieHintExtended
+##.cookieHinweis
+##.cookieInfoBar
+##.cookieInfoBox
+##.cookieInfoWindow
+##.cookieInfoWrapper
+##.cookieInfo_container
+##.cookieInformation
+##.cookieInformationBar
+##.cookieInformationContainer
+##.cookieInside
+##.cookieJs
+##.cookieK
+##.cookieLaw-box
+##.cookieLaw:not(body):not(html)
+##.cookieLawBar
+##.cookieLawBoo
+##.cookieLawBox
+##.cookieLawPopup
+##.cookieLawPopupContainer
+##.cookieLawPro
+##.cookieLayer
+##.cookieLayer__content
+##.cookieLegal
+##.cookieLegalComp
+##.cookieLegalContainer
+##.cookieLegal_comp
+##.cookieLight
+##.cookieMSG
+##.cookieMain
+##.cookieMainPanel
+##.cookieMaster
+##.cookieMelding
+##.cookieMeldung
+##.cookieMess
+##.cookieMessageBar
+##.cookieMessageBox
+##.cookieMessageContainer
+##.cookieMessageDiv
+##.cookieMessagePanel
+##.cookieMessageWrapper
+##.cookieModal
+##.cookieModalBox
+##.cookieModal__background
+##.cookieModuleContainer
+##.cookieMonster
+##.cookieMonster-info
+##.cookieMsgContainer
+##.cookieMsgWrap
+##.cookieNotAccepted
+##.cookieNote
+##.cookieNotes
+##.cookieNoti
+##.cookieNotice
+##.cookieNotice--isVisible
+##.cookieNotice2
+##.cookieNoticeA
+##.cookieNoticeBalloon
+##.cookieNoticeBar
+##.cookieNoticeBox
+##.cookieNoticeContainer
+##.cookieNoticeContent
+##.cookieNoticePopUp
+##.cookieNoticeTextContainer
+##.cookieNoticeType1
+##.cookieNoticeWrapper
+##.cookieNotice__container
+##.cookieNotif
+##.cookieNotification
+##.cookieNotificationBanner
+##.cookieNotificationBar
+##.cookieNotificationContainer
+##.cookieNotificationPopup
+##.cookieNotificationWidget
+##.cookieNotification_container
+##.cookieNotifierWrapper
+##.cookieNotify
+##.cookieNotifyBar
+##.cookieOptIn
+##.cookieOptOutBoxWrapper
+##.cookieOuter
+##.cookieOverlay
+##.cookieOverlayBox
+##.cookieP
+##.cookiePack
+##.cookiePanel
+##.cookiePermisionInfo
+##.cookiePermission
+##.cookiePermitWrapper
+##.cookiePoliceBlock
+##.cookiePolicy-banner
+##.cookiePolicy-popup
+##.cookiePolicyA
+##.cookiePolicyAgreement
+##.cookiePolicyB
+##.cookiePolicyBannerOuter
+##.cookiePolicyBnr
+##.cookiePolicyBox
+##.cookiePolicyContainer
+##.cookiePolicyCustom
+##.cookiePolicyGomag
+##.cookiePolicyLightBox
+##.cookiePolicyLightBoxOverflowBg
+##.cookiePolicyMessage
+##.cookiePolicyNotice
+##.cookiePolicyNotify-wrapper
+##.cookiePolicyOverlay
+##.cookiePolicyPopup
+##.cookiePolicySnippet
+##.cookiePolicyText
+##.cookiePolicyWrapper
+##.cookiePolicy__fixBlock
+##.cookiePoliticsNotification
+##.cookiePoliticsWrapper
+##.cookiePopPup
+##.cookiePopUp
+##.cookiePopUpOuterDiv
+##.cookiePopUpWrap
+##.cookiePopin
+##.cookiePopin__overlay
+##.cookiePopup:not(body)
+##.cookiePopupContainer
+##.cookiePopupPart
+##.cookiePopupSmall
+##.cookiePrivacy
+##.cookiePrivacyInfoDiv
+##.cookiePrompt_outerWrapper
+##.cookiePush
+##.cookieQuery
+##.cookieReminder
+##.cookieReminderWrapper
+##.cookieRestriction
+##.cookieRichtline_container
+##.cookieRow
+##.cookieScript
+##.cookieSection
+##.cookieSelectDiv
+##.cookieSettings
+##.cookieSettingsBtn
+##.cookieShell
+##.cookieShowClass
+##.cookieStatement
+##.cookieStatement-block
+##.cookieTermsContent
+##.cookieText
+##.cookieTipWrap
+##.cookieTkd
+##.cookieToTop
+##.cookieToast
+##.cookieTool
+##.cookieToolbar
+##.cookieTooltip:not(html)
+##.cookieTooltipKontener
+##.cookieTop
+##.cookieTriangle
+##.cookieUsageAlertMainContainer
+##.cookieUseWarning
+##.cookieUserAgreement
+##.cookieViolator
+##.cookieViolator-fixed
+##.cookieViolatorFixed
+##.cookieVisible:not(body)
+##.cookieWalaDiv
+##.cookieWallWrapper
+##.cookieWarn
+##.cookieWarning
+##.cookieWarningBackground
+##.cookieWarningBox
+##.cookieWarningContainer
+##.cookieWarningSection
+##.cookieWetgeving
+##.cookieWetgevingModal
+##.cookieWidget
+##.cookieWindow
+##.cookieWrap
+##.cookieWrapp
+##.cookieWrapper
+##.cookieWrp
+##.cookie[data-cookie-info]
+##.cookie[data-cookie-notice]
+##.cookie[data-cookie]
+##.cookie[data-privacy-policy]
+##.cookie[data-selector="cookies-bar"]
+##.cookie[ng-hide="cookiesAccepted"]
+##.cookie[role="alertdialog"]
+##.cookie_Banner
+##.cookie__accept
+##.cookie__alert--active
+##.cookie__area
+##.cookie__background
+##.cookie__banner
+##.cookie__bar
+##.cookie__block
+##.cookie__box
+##.cookie__callout
+##.cookie__column
+##.cookie__consent
+##.cookie__container
+##.cookie__content
+##.cookie__div
+##.cookie__flex
+##.cookie__float--container
+##.cookie__floating
+##.cookie__floating--bottom
+##.cookie__footer
+##.cookie__inner
+##.cookie__manager
+##.cookie__message
+##.cookie__message-container
+##.cookie__modal
+##.cookie__notification
+##.cookie__overlay
+##.cookie__panel
+##.cookie__policy
+##.cookie__policy-notice
+##.cookie__prompt
+##.cookie__reveal
+##.cookie__show
+##.cookie__top
+##.cookie__wall
+##.cookie__warn__wrap
+##.cookie__warning-messaging
+##.cookie__window
+##.cookie__wrap
+##.cookie__wrapper
+##.cookie__wrapper_noneuuk
+##.cookie_accept
+##.cookie_accept_container
+##.cookie_accept_notebox
+##.cookie_acceptance
+##.cookie_accepter
+##.cookie_acept
+##.cookie_ack
+##.cookie_adv2
+##.cookie_advice
+##.cookie_agreement
+##.cookie_alert
+##.cookie_alert_cont
+##.cookie_alert_message
+##.cookie_approve
+##.cookie_approved_bar
+##.cookie_area
+##.cookie_background
+##.cookie_backwrap
+##.cookie_ban
+##.cookie_banner
+##.cookie_banner--root
+##.cookie_banner-handled
+##.cookie_banner_background
+##.cookie_banner_container
+##.cookie_banner_footer
+##.cookie_banner_overlay
+##.cookie_banner_section
+##.cookie_banniere
+##.cookie_bar
+##.cookie_bar_base
+##.cookie_bar_text
+##.cookie_bar_v2
+##.cookie_bar_wrapper
+##.cookie_barra
+##.cookie_bg
+##.cookie_block
+##.cookie_blocker
+##.cookie_bolck
+##.cookie_bot
+##.cookie_box
+##.cookie_box_shadow
+##.cookie_check
+##.cookie_choice
+##.cookie_cntnr_st
+##.cookie_confirm
+##.cookie_consent:not(body):not(html)
+##.cookie_consent__alert
+##.cookie_consent_banner
+##.cookie_consent_banner_container
+##.cookie_consent_dialog
+##.cookie_consent_holder
+##.cookie_consent_overlay
+##.cookie_consent_popup
+##.cookie_consent_title
+##.cookie_cont
+##.cookie_container
+##.cookie_container_wrapper
+##.cookie_content
+##.cookie_cst
+##.cookie_discalimer_english
+##.cookie_disclaimer
+##.cookie_disclosure
+##.cookie_display
+##.cookie_div
+##.cookie_enable_popup
+##.cookie_eu_bar
+##.cookie_eu_container
+##.cookie_evil_over
+##.cookie_float
+##.cookie_flyout
+##.cookie_footer_fixed
+##.cookie_frame_background
+##.cookie_gdpr
+##.cookie_grayL
+##.cookie_helper
+##.cookie_hidden
+##.cookie_hint
+##.cookie_hinweis
+##.cookie_inf
+##.cookie_info
+##.cookie_info_box1
+##.cookie_info_container
+##.cookie_info_content
+##.cookie_info_wrap
+##.cookie_info_wrapper
+##.cookie_inform
+##.cookie_informatie
+##.cookie_information--active
+##.cookie_information--bar
+##.cookie_information--overlay
+##.cookie_information--top
+##.cookie_inner
+##.cookie_law
+##.cookie_law_container
+##.cookie_law_dialog
+##.cookie_law_reveal_dialog
+##.cookie_law_reveal_overlay
+##.cookie_layer
+##.cookie_lbox
+##.cookie_licence
+##.cookie_loading
+##.cookie_logo
+##.cookie_m
+##.cookie_main_block
+##.cookie_melding
+##.cookie_meldung
+##.cookie_mess
+##.cookie_message
+##.cookie_message_box
+##.cookie_message_container
+##.cookie_message_displayed
+##.cookie_message_wrap
+##.cookie_mob
+##.cookie_modal_button_v5
+##.cookie_modal_outer
+##.cookie_module
+##.cookie_monster
+##.cookie_monster_box
+##.cookie_msg_blk
+##.cookie_newsletter
+##.cookie_note
+##.cookie_note_bkg
+##.cookie_notice
+##.cookie_notice_block
+##.cookie_notice_blue
+##.cookie_notice_overlay
+##.cookie_notice_wrap
+##.cookie_notice_wrapper
+##.cookie_notif
+##.cookie_notife
+##.cookie_notification
+##.cookie_notification_block
+##.cookie_notification_container
+##.cookie_notification_wrapper
+##.cookie_notify
+##.cookie_opruz
+##.cookie_optin
+##.cookie_optin_box
+##.cookie_overlay
+##.cookie_overlay_container
+##.cookie_overlayshow
+##.cookie_panel
+##.cookie_panel_new
+##.cookie_picking_block
+##.cookie_plugin
+##.cookie_policy
+##.cookie_policy_banner
+##.cookie_policy_bar
+##.cookie_policy_box
+##.cookie_policy_component
+##.cookie_policy_cont
+##.cookie_policy_container
+##.cookie_policy_message
+##.cookie_policy_outer
+##.cookie_policy_pop
+##.cookie_politics
+##.cookie_popup_alignment
+##.cookie_popup_wrapper
+##.cookie_position_bottom
+##.cookie_preferences_banner
+##.cookie_privacy
+##.cookie_privacy_alert
+##.cookie_privacy_block
+##.cookie_privacy_info_bar
+##.cookie_privacy_law_bar
+##.cookie_privacy_line
+##.cookie_privacy_policy
+##.cookie_ramka
+##.cookie_rf_type_panel
+##.cookie_rf_type_window
+##.cookie_ribon
+##.cookie_richtlinien
+##.cookie_rolldown
+##.cookie_row
+##.cookie_rules
+##.cookie_sav
+##.cookie_schema_dark
+##.cookie_second_block
+##.cookie_section
+##.cookie_setting
+##.cookie_settings_bottom
+##.cookie_settings_container
+##.cookie_settings_toggle
+##.cookie_statement
+##.cookie_statement_spacer
+##.cookie_sticker
+##.cookie_sticker_wrapper
+##.cookie_strip
+##.cookie_tab
+##.cookie_tag
+##.cookie_tajekoztato
+##.cookie_takeover
+##.cookie_tip
+##.cookie_tipbox
+##.cookie_tips
+##.cookie_toolbar
+##.cookie_track
+##.cookie_usage
+##.cookie_usage_banner
+##.cookie_usage_notifier
+##.cookie_usage_notifier2
+##.cookie_usage_notify
+##.cookie_verif
+##.cookie_warn
+##.cookie_warn_box
+##.cookie_warning
+##.cookie_warning_box
+##.cookie_warning_container
+##.cookie_warning_new
+##.cookie_warning_wrap
+##.cookie_wrap_bottom
+##.cookie_wrapper
+##.cookie_wrapper-bottom
+##.cookie_wrapper_tool
+##.cookie_wrp
+##.cookieabfrage
+##.cookieable
+##.cookieaccept
+##.cookieaccept_wrapper
+##.cookieacceptance
+##.cookieacceptance__base
+##.cookieadv
+##.cookieadvise
+##.cookiealarm
+##.cookiealert
+##.cookieatata
+##.cookiebadge
+##.cookiebalk
+##.cookiebanner--container
+##.cookiebanner--js
+##.cookiebanner-inner
+##.cookiebanner-legacy
+##.cookiebanner-overlay
+##.cookiebanner-warning
+##.cookiebanner__container
+##.cookiebanner__top
+##.cookiebanner_background
+##.cookiebannerpopup
+##.cookiebannerv2
+##.cookiebar--variant1
+##.cookiebar-adm
+##.cookiebar-block
+##.cookiebar-container
+##.cookiebar-message
+##.cookiebar-panel
+##.cookiebar-tpl
+##.cookiebar-wrapper
+##.cookiebar:not(body):not(html)
+##.cookiebar__overlay
+##.cookiebar_container
+##.cookiebar_wrapper
+##.cookiebarcontainer
+##.cookiebarholder
+##.cookiebarinner
+##.cookiebg:not(body):not(html)
+##.cookieblock
+##.cookieboks
+##.cookiebottom
+##.cookiebox-wrapper
+##.cookieboxM
+##.cookieboxStart
+##.cookiecall
+##.cookiecheck
+##.cookiecheck_banner-wrapper
+##.cookieclose
+##.cookiecnil
+##.cookieconsent-backdrop
+##.cookieconsent-banner
+##.cookieconsent-container
+##.cookieconsent-dialog
+##.cookieconsent-overlay
+##.cookieconsent-overlay-light
+##.cookieconsent-popup
+##.cookieconsent-popup-background
+##.cookieconsent-ru
+##.cookieconsent-shade
+##.cookieconsent-simple
+##.cookieconsent-wrap
+##.cookieconsent-wrapper
+##.cookieconsent__wrap
+##.cookieconsentbanner
+##.cookieconsentbar
+##.cookieconsentcomponent
+##.cookieconsentcontainer
+##.cookiecontainer
+##.cookiecontent
+##.cookiecontrol
+##.cookiecontrol-alert-box-wrapper
+##.cookiecrap
+##.cookiecutter
+##.cookied-content
+##.cookied:not(body):not(html)
+##.cookiedOuter
+##.cookiedetails
+##.cookiedialog
+##.cookiedimerda
+##.cookiedisclaimer
+##.cookiedisclaimerblock
+##.cookiediv
+##.cookiedoor_padded
+##.cookiefascia
+##.cookiefloater
+##.cookiefooter
+##.cookieframe
+##.cookieheader
+##.cookieheight
+##.cookiehint
+##.cookiehinweis
+##.cookieinfo-bg
+##.cookieinfo-content
+##.cookieinfo:not(body)
+##.cookieinfo__container
+##.cookieinfobannerWrapper
+##.cookieinfobar
+##.cookieinfoblock
+##.cookieinfoholder
+##.cookieinformation
+##.cookieinformationarea
+##.cookieinfos
+##.cookiejar-bottom
+##.cookiejar-content
+##.cookiejs-banner-wrapper
+##.cookiekat
+##.cookiekbb
+##.cookielabel
+##.cookielaw-alert
+##.cookielaw-banner
+##.cookielaw-bar
+##.cookielaw-bottom
+##.cookielaw-container
+##.cookielaw-info
+##.cookielaw-msg
+##.cookielaw-panel
+##.cookielaw-setcookiepolicy-form
+##.cookielaw-wrapper
+##.cookielaw:not(body):not(html)
+##.cookielawHinttop
+##.cookielaw_overlay
+##.cookielaw_wrapper
+##.cookielawbar
+##.cookielawinfobar
+##.cookielawpopup-container
+##.cookielayer
+##.cookielayer__layer
+##.cookielegal
+##.cookieleiste
+##.cookielevel__bar
+##.cookieline
+##.cookieloop
+##.cookielopd
+##.cookiemadness
+##.cookiemaindiv
+##.cookieman-show
+##.cookiemanager
+##.cookiemanager_banner--container
+##.cookiemanager_show_simple
+##.cookiemelding-container
+##.cookiemelding:not(html):not(body)
+##.cookiemeldung
+##.cookiemessage
+##.cookiemessage-holder
+##.cookiemessage__overlay
+##.cookiemessageblock
+##.cookiemessageplaceholder
+##.cookiemon
+##.cookiemonster-container
+##.cookiemonster:not(html):not(body)
+##.cookiemsg
+##.cookienav
+##.cookienote
+##.cookienote__overlay
+##.cookienotice-bar
+##.cookienotice-box
+##.cookienotice-container
+##.cookienotice-content
+##.cookienotice-inner
+##.cookienotice-wrap
+##.cookienotification
+##.cookienotify
+##.cookieopt-holder
+##.cookieoptin
+##.cookieoptions
+##.cookieoverlay
+##.cookieoverlay-x
+##.cookiepanel
+##.cookiepanel_overlay
+##.cookiepermissionprompt
+##.cookieplus
+##.cookieplus-cookie-consent
+##.cookieplus-extended
+##.cookieplus-modern
+##.cookiepol
+##.cookiepolicepopup
+##.cookiepolicy
+##.cookiepolicy--active
+##.cookiepolicy-block
+##.cookiepolicy-dropdown
+##.cookiepolicy-txt
+##.cookiepolicy-wrap
+##.cookiepolicy-wrapper
+##.cookiepolicyBanner
+##.cookiepolicy__container
+##.cookiepolicybar
+##.cookiepolicyclass
+##.cookiepolicyfooter
+##.cookiepolicyoverlay
+##.cookiepolicytext
+##.cookiepolitik
+##.cookiepoll
+##.cookiepopin
+##.cookiepopup
+##.cookiepopup-cont
+##.cookiepopup-container
+##.cookiepopupbox
+##.cookiepopupcontainer
+##.cookiepopupwrapper
+##.cookiepreferences_popup
+##.cookieprivacy
+##.cookiepu
+##.cookiequestion
+##.cookierbar
+##.cookierinfor
+##.cookierow
+##.cookies--active
+##.cookies--agree
+##.cookies--bar
+##.cookies--container
+##.cookies--explicit
+##.cookies--implicit
+##.cookies--info
+##.cookies--not-accepted
+##.cookies--notification
+##.cookies--pop
+##.cookies--right
+##.cookies--show
+##.cookies-1
+##.cookies-accept
+##.cookies-accept--block
+##.cookies-accept-block
+##.cookies-accept-container
+##.cookies-accept-form
+##.cookies-accept-info
+##.cookies-accept-message
+##.cookies-acceptance
+##.cookies-acceptance-overlay
+##.cookies-acceptance-panel
+##.cookies-acceptance-wrapper-common
+##.cookies-acceptation-banner
+##.cookies-accepted:not(body):not(.page)
+##.cookies-adv
+##.cookies-advert
+##.cookies-advice
+##.cookies-advisor
+##.cookies-aggreement
+##.cookies-agree
+##.cookies-agreement
+##.cookies-agreement-block
+##.cookies-agreement-class
+##.cookies-agreement-desktop
+##.cookies-agreement-enter-done
+##.cookies-agreement-wrapper
+##.cookies-alert
+##.cookies-alert-alerta
+##.cookies-alert-bar
+##.cookies-alert-block
+##.cookies-alert-box-wrapper
+##.cookies-alert-container
+##.cookies-alert-wider-wrap
+##.cookies-alert-wrapper
+##.cookies-alert__wrapper
+##.cookies-alerta
+##.cookies-allow
+##.cookies-allowance
+##.cookies-allowed[role="dialog"]
+##.cookies-analytics-info
+##.cookies-and-privacy-border
+##.cookies-and-privacy-notification
+##.cookies-and-tracking
+##.cookies-andromeda
+##.cookies-area
+##.cookies-back-body
+##.cookies-backdrop
+##.cookies-band
+##.cookies-band-overlay
+##.cookies-bandeau
+##.cookies-banner-backdrop-wrapper
+##.cookies-banner-component
+##.cookies-banner-container
+##.cookies-banner-enabled
+##.cookies-banner-shown
+##.cookies-banner-wrap
+##.cookies-banner__c
+##.cookies-banner__container
+##.cookies-banner__overlay
+##.cookies-bar
+##.cookies-bar-layout
+##.cookies-bar-new
+##.cookies-bloc
+##.cookies-block
+##.cookies-blok
+##.cookies-bottom
+##.cookies-bottom-banner
+##.cookies-bottom-container
+##.cookies-box
+##.cookies-box-info
+##.cookies-box-module
+##.cookies-bubble
+##.cookies-bullshit
+##.cookies-caja-texto
+##.cookies-callout-wrapper
+##.cookies-caveat
+##.cookies-claim
+##.cookies-cnt
+##.cookies-communicate
+##.cookies-compliance-block
+##.cookies-component-lgpd
+##.cookies-concent-dialog
+##.cookies-conf
+##.cookies-config-aviso
+##.cookies-confirm
+##.cookies-confirm-block
+##.cookies-confirmation-dialog
+##.cookies-confirmation-wrapper
+##.cookies-consent-banner-component
+##.cookies-consent-container
+##.cookies-consent-panel
+##.cookies-consent-popup
+##.cookies-consent-wrapper
+##.cookies-container
+##.cookies-container-uk
+##.cookies-container_inverse
+##.cookies-content
+##.cookies-conteudo
+##.cookies-control
+##.cookies-control-container
+##.cookies-ctn
+##.cookies-dark-filter
+##.cookies-dialog
+##.cookies-dialog-box
+##.cookies-dialog__wrapper
+##.cookies-directive
+##.cookies-disclaimer
+##.cookies-disclaimer-bar
+##.cookies-disclaimer-wrapper
+##.cookies-disclosure-overlay
+##.cookies-div
+##.cookies-div-footer
+##.cookies-elixregtech
+##.cookies-es-container
+##.cookies-eu
+##.cookies-eu-bg
+##.cookies-field
+##.cookies-flex
+##.cookies-floating
+##.cookies-footer
+##.cookies-footer-bar
+##.cookies-footer-block
+##.cookies-footer-i
+##.cookies-gdpr
+##.cookies-gioodo-require
+##.cookies-global
+##.cookies-gradient
+##.cookies-handshake-wrapper
+##.cookies-header
+##.cookies-hint
+##.cookies-hint-container
+##.cookies-hinweis
+##.cookies-holder
+##.cookies-iframe
+##.cookies-inUse-alert
+##.cookies-info-backgrond
+##.cookies-info-banner
+##.cookies-info-box
+##.cookies-info-container
+##.cookies-info-static
+##.cookies-info:not(html):not(body)
+##.cookies-info_banner
+##.cookies-infobar
+##.cookies-information
+##.cookies-information-area
+##.cookies-informer
+##.cookies-informer-section
+##.cookies-infos
+##.cookies-inner
+##.cookies-label
+##.cookies-law
+##.cookies-law-bar
+##.cookies-law-info
+##.cookies-law-wrapper
+##.cookies-layer
+##.cookies-layout-module
+##.cookies-layout-pagina
+##.cookies-left
+##.cookies-legislation
+##.cookies-lightbox
+##.cookies-lightbox-accept
+##.cookies-line
+##.cookies-lista
+##.cookies-main
+##.cookies-main-banner
+##.cookies-main-overlay
+##.cookies-management-bar
+##.cookies-management-button
+##.cookies-manager-banner
+##.cookies-mass
+##.cookies-message-container
+##.cookies-message-panel
+##.cookies-message-popup
+##.cookies-message-window
+##.cookies-message-wrapp
+##.cookies-mod
+##.cookies-mod-bar
+##.cookies-modal-backdrop
+##.cookies-modal:not(body):not(html)
+##.cookies-modal__background
+##.cookies-modal__overlay
+##.cookies-module
+##.cookies-msg
+##.cookies-msg-box
+##.cookies-msg-widget
+##.cookies-msg-wrapper
+##.cookies-nav
+##.cookies-nav-bar
+##.cookies-nofication
+##.cookies-normative__container
+##.cookies-not-set:not(body)
+##.cookies-note
+##.cookies-notice-alert
+##.cookies-notice-msg
+##.cookies-notices-container
+##.cookies-notification
+##.cookies-notification--wrap
+##.cookies-notification-bar
+##.cookies-notification-portlet
+##.cookies-notification-wrapper
+##.cookies-notifications
+##.cookies-notificator
+##.cookies-notify
+##.cookies-notify-modal
+##.cookies-notis
+##.cookies-obligation-clause
+##.cookies-open:not(body)
+##.cookies-overlay
+##.cookies-overlay-container
+##.cookies-overlay-widget
+##.cookies-overlay__container
+##.cookies-page-filter
+##.cookies-panel
+##.cookies-panel-gdpr
+##.cookies-pdpa
+##.cookies-policy--active
+##.cookies-policy-alert
+##.cookies-policy-banner
+##.cookies-policy-bar
+##.cookies-policy-block
+##.cookies-policy-card
+##.cookies-policy-container
+##.cookies-policy-content
+##.cookies-policy-disclaimer
+##.cookies-policy-message
+##.cookies-policy-popover-container
+##.cookies-policy-popup
+##.cookies-policy-sec
+##.cookies-policy-trigger
+##.cookies-policy:not(body):not(html)
+##.cookies-politic
+##.cookies-pop-alert
+##.cookies-pop-up
+##.cookies-popap
+##.cookies-popin
+##.cookies-popup
+##.cookies-popup-container
+##.cookies-popup-wrapper
+##.cookies-popupbox
+##.cookies-portlet
+##.cookies-privacy
+##.cookies-privacy-sticky
+##.cookies-prompt
+##.cookies-pwrap
+##.cookies-question
+##.cookies-raw
+##.cookies-region
+##.cookies-reminder
+##.cookies-reminder-v2
+##.cookies-request
+##.cookies-ribbon
+##.cookies-rodo
+##.cookies-row
+##.cookies-rules
+##.cookies-save
+##.cookies-scrollbar
+##.cookies-sec
+##.cookies-second
+##.cookies-section
+##.cookies-settings
+##.cookies-settings-box
+##.cookies-slide
+##.cookies-statement
+##.cookies-sticker
+##.cookies-sticky
+##.cookies-stn
+##.cookies-strip
+##.cookies-stripe
+##.cookies-style
+##.cookies-tema-blanco
+##.cookies-text
+##.cookies-tip
+##.cookies-tooltip
+##.cookies-top
+##.cookies-top-notice
+##.cookies-tracking--bottom
+##.cookies-type
+##.cookies-ue
+##.cookies-usage
+##.cookies-usage-container
+##.cookies-usage-content
+##.cookies-usage-info
+##.cookies-used-notice
+##.cookies-v2
+##.cookies-view
+##.cookies-warn
+##.cookies-warning
+##.cookies-warning-container
+##.cookies-warning-footer
+##.cookies-warning-wrap
+##.cookies-widget-body
+##.cookies-window
+##.cookies-wr
+##.cookies-wrap
+##.cookies-wrapper
+##.cookies-wrp
+##.cookies-wrp__cookies
+##.cookies.active
+##.cookies.alert
+##.cookies.alert--full
+##.cookies.alert-dismissible
+##.cookies.banner
+##.cookies.bottom
+##.cookies.callout
+##.cookies.dark
+##.cookies.dialog
+##.cookies.info
+##.cookies.is-open
+##.cookies.is-shown
+##.cookies.pb-0
+##.cookies.print-hidden
+##.cookies.privacyLaw
+##.cookies.row
+##.cookies.show:not(html):not(body)
+##.cookies.site-msg
+##.cookies.slideInUp
+##.cookies.sv-layout
+##.cookies.sv-vertical
+##.cookies.text-center
+##.cookies1
+##.cookies22
+##.cookiesAcceptation
+##.cookiesAgree
+##.cookiesAgreement
+##.cookiesAlert
+##.cookiesAlertBox
+##.cookiesAlertWrapper
+##.cookiesAviso
+##.cookiesBackground
+##.cookiesBannerBlock
+##.cookiesBannerOverlay
+##.cookiesBannerShown
+##.cookiesBar-holder
+##.cookiesBar:not(body)
+##.cookiesBgCls
+##.cookiesBloc
+##.cookiesBlock
+##.cookiesBottom
+##.cookiesBottomBar
+##.cookiesBox
+##.cookiesC
+##.cookiesClass
+##.cookiesConfirm
+##.cookiesConfirmation
+##.cookiesConsentPopUp
+##.cookiesConsent_outer
+##.cookiesContainer
+##.cookiesContent
+##.cookiesCorreios
+##.cookiesDisabledBanner
+##.cookiesDisclaimer
+##.cookiesFooter
+##.cookiesHeader
+##.cookiesHide
+##.cookiesInfo
+##.cookiesInfoBlock
+##.cookiesInfoBox
+##.cookiesInfoHolder
+##.cookiesInfo_modal
+##.cookiesInformation
+##.cookiesInformer
+##.cookiesLawAcceptation
+##.cookiesLayer
+##.cookiesLegalRules
+##.cookiesManagement:not(body):not(html)
+##.cookiesMessage
+##.cookiesMessageBanner
+##.cookiesMessageLayer
+##.cookiesMessageWrap
+##.cookiesMsg
+##.cookiesMsg_wrap
+##.cookiesNavMessage
+##.cookiesNew
+##.cookiesNote
+##.cookiesNotice
+##.cookiesNoticeContainer
+##.cookiesNotification
+##.cookiesNotificationOuter
+##.cookiesNotification__wrapper
+##.cookiesNotification_v1
+##.cookiesOptin
+##.cookiesOverlay
+##.cookiesOverlay2
+##.cookiesOverlay2Box
+##.cookiesPanel
+##.cookiesPanelBackground
+##.cookiesPie
+##.cookiesPiskot
+##.cookiesPol
+##.cookiesPolicy
+##.cookiesPolicyContainer
+##.cookiesPopUp
+##.cookiesPopup
+##.cookiesPrivacyLayer
+##.cookiesPro
+##.cookiesShow
+##.cookiesSiteMessage
+##.cookiesStrip
+##.cookiesTip
+##.cookiesTipIframe
+##.cookiesTop_div
+##.cookiesTxt
+##.cookiesUsageMessage
+##.cookiesWarning
+##.cookiesWarning-container
+##.cookiesWarningContainer
+##.cookiesWindow
+##.cookiesWr
+##.cookiesWrap
+##.cookiesWrapper
+##.cookiesWrp
+##.cookies[data-plugin-acceptcookies]
+##.cookies[data-plugin-cookie]
+##.cookies__background
+##.cookies__banner
+##.cookies__banner__wrapper
+##.cookies__bar
+##.cookies__bar__header
+##.cookies__block
+##.cookies__box
+##.cookies__card
+##.cookies__content
+##.cookies__div--div-overlay
+##.cookies__info
+##.cookies__info_block
+##.cookies__inner
+##.cookies__layover
+##.cookies__message
+##.cookies__modal
+##.cookies__notice
+##.cookies__notification
+##.cookies__overlay
+##.cookies__panel
+##.cookies__popup
+##.cookies__section
+##.cookies__show
+##.cookies__std
+##.cookies__wr
+##.cookies__wrap
+##.cookies__wraper
+##.cookies_accept
+##.cookies_accept_containter
+##.cookies_acceptance
+##.cookies_active
+##.cookies_advice
+##.cookies_advide
+##.cookies_aff
+##.cookies_agree
+##.cookies_agreement
+##.cookies_alert
+##.cookies_alert_wrapper
+##.cookies_allowed
+##.cookies_apply
+##.cookies_avis
+##.cookies_b
+##.cookies_background
+##.cookies_bandeau
+##.cookies_banner_backdrop
+##.cookies_banner_wrapper
+##.cookies_bar
+##.cookies_bloc
+##.cookies_block
+##.cookies_bottom
+##.cookies_box
+##.cookies_confirm
+##.cookies_confirmation
+##.cookies_consent
+##.cookies_consent-show
+##.cookies_consent_banner
+##.cookies_cont
+##.cookies_container
+##.cookies_content
+##.cookies_cookie
+##.cookies_ctas
+##.cookies_cuerpo
+##.cookies_declaration
+##.cookies_disclaimer
+##.cookies_disclaimer_container
+##.cookies_div
+##.cookies_eu
+##.cookies_eu_sa
+##.cookies_footer
+##.cookies_full
+##.cookies_header
+##.cookies_info
+##.cookies_kontener
+##.cookies_law_compliance_footer
+##.cookies_layer
+##.cookies_management-overlay
+##.cookies_management-topbar
+##.cookies_message
+##.cookies_message_bar
+##.cookies_message_container
+##.cookies_modal
+##.cookies_msg
+##.cookies_notice
+##.cookies_noties
+##.cookies_notification
+##.cookies_notifier
+##.cookies_overlay
+##.cookies_overlay-wrapper
+##.cookies_overlay_wrapper
+##.cookies_panel_2022
+##.cookies_pdisclaimer
+##.cookies_policy
+##.cookies_policy_alert
+##.cookies_policy_box
+##.cookies_policy_container
+##.cookies_policy_inform_wrapper
+##.cookies_popin
+##.cookies_popup
+##.cookies_popup_bottom_container
+##.cookies_privacy_wrapper
+##.cookies_regulation__container
+##.cookies_sticky
+##.cookies_strip-wrapper
+##.cookies_v16
+##.cookies_warn
+##.cookies_warning
+##.cookies_warning_bar
+##.cookies_wrap
+##.cookies_wrapper
+##.cookies_yes
+##.cookies_yum
+##.cookiesacceptancemsg
+##.cookiesalert
+##.cookiesanswer
+##.cookiesbanner
+##.cookiesbar
+##.cookiesblk
+##.cookiesbottom
+##.cookiesbox
+##.cookiesbox-bubble
+##.cookiesbythebook
+##.cookiesc
+##.cookiesdirective-wrapper
+##.cookiesdiv
+##.cookieseal-banner-body
+##.cookiesec
+##.cookieset
+##.cookiesettings
+##.cookiesframe
+##.cookieshade
+##.cookiesheader
+##.cookieshoyer
+##.cookiesinfo
+##.cookiesinfobox
+##.cookiesinformation
+##.cookiesite_mainpopup
+##.cookieslaw
+##.cookiesloaded
+##.cookiesmanager
+##.cookiesmessage
+##.cookiesms
+##.cookiesnotice
+##.cookiesnotification
+##.cookiespane
+##.cookiespanel
+##.cookiesplash
+##.cookiesplue-acb-banner
+##.cookiesplus-center
+##.cookiespolicy
+##.cookiespop-conainer
+##.cookiespopup
+##.cookiesq
+##.cookiess
+##.cookiestrip
+##.cookiestripwrap
+##.cookiesusage
+##.cookiesvis
+##.cookieswrapper
+##.cookiesy
+##.cookieterms
+##.cookietest_bno
+##.cookietext
+##.cookietoaster
+##.cookietool-message
+##.cookietop
+##.cookietopbanner
+##.cookietxt
+##.cookieusage-confirm
+##.cookieusage__base
+##.cookieuse-open
+##.cookievarning-wrap
+##.cookiew-law-banner
+##.cookiewLawLayer
+##.cookiewall-container
+##.cookiewall-wrapper
+##.cookiewall__wrapper
+##.cookiewallpopup
+##.cookiewarn
+##.cookiewarning-bar
+##.cookiewarning-container
+##.cookiewarning-inner
+##.cookiewarning-wrapper
+##.cookiewarning:not(body):not(html)
+##.cookiewarning_bg
+##.cookiewarning_fg
+##.cookiewarning_wrapper
+##.cookiewarningbox
+##.cookiewet
+##.cookiewetgeving
+##.cookiewidget
+##.cookiewindow.toast1
+##.cookiewrap
+##.cookiewrapper
+##.cookiewrapper-disclosure
+##.cookiez
+##.cookify
+##.cookillian-alert
+##.cookinfo
+##.cookinfo__wrapper
+##.cookinfo_bottom
+##.cookinfo_top
+##.cookiz
+##.cookmsg
+##.cookpopup
+##.cooksiediv
+##.cookskom
+##.cookwarning
+##.cookwarningcz
+##.cooky-policiy
+##.coooooookie
+##.copkiePolicy
+##.core-CookiesPolicy
+##.core-cookie-consent
+##.cornerPolicyTab
+##.correosCookies
+##.coucou.cookie_slide
+##.cp-CookiesDisclaimer
+##.cp-alert-message
+##.cp-banner
+##.cp-box-alert
+##.cp-box-alert-popup
+##.cp-cookie-banner
+##.cp-cookie-bar
+##.cp-cookie-tip
+##.cp-cookie-wrap
+##.cp-cookies
+##.cp-curtain-container
+##.cp-info-bar-container
+##.cp-module-info_bar
+##.cp-popup
+##.cp-popup-container:not(body):not(html)
+##.cp-popup-overlay
+##.cp-slider-popup
+##.cp1CookieBanner
+##.cpModalWin
+##.cpOverlay[data-cookie-consent-overlay]
+##.cp_cookie-dialog
+##.cpb-privacy-policy-widget
+##.cpck-banner
+##.cpg_message_info
+##.cph-ccpa_banner
+##.cpm-cookies
+##.cpnb-inner
+##.cpnb-modal-show-fade-out
+##.cpnb-outer
+##.cpnb-top
+##.cpolicy-warning
+##.cppa.section
+##.cps-banner
+##.cpt-cookie-banner
+##.creatim-cookie-notice
+##.creavea-banner-consentement-cookie
+##.creavea-container-cookie-consent
+##.cru-cookie-policy
+##.cs-cookie
+##.cs-cookie-bar-container
+##.cs-cookie-overlay
+##.cs-info-wrapper
+##.cs-row__cookie-bar
+##.csi-cookie-banner-container
+##.csppp-container
+##.cspx-cookies-bar
+##.css-cookie-banner
+##.ct-cookie-consent-pop
+##.ct-ultimate-gdpr-cookie-fullPanel-overlay
+##.ctCookieTerms
+##.cta-cookie
+##.ctl_CookieWarning
+##.ctn-cookies
+##.ctn_cookies
+##.ctrlCookieBar
+##.cuki.cukipre
+##.cust-espa
+##.custom-ch-cookie-notice
+##.custom-container-lgpd
+##.custom-cookie-banner
+##.custom-cookie-footer-banner
+##.custom-cookie-msg
+##.custom-cookies
+##.customCookie
+##.customCookieBackdrop
+##.custom_cookie
+##.custom_cookie-policy
+##.customer-info-block__coockie
+##.customise-cookies-main
+##.cv-cookie-banner
+##.cv2-wrapper
+##.cwc-cookie-banner-ui-sdk
+##.cwcookielaw
+##.cwcookielawbg
+##.cws-cookies-notification
+##.cwt-cookie-confirmation
+##.cx_cookieNotice
+##.cxa-cookie-notification
+##.cy-popin-cookie
+##.cybot-cookiebot-placeholder
+##.cz-cookie-bar
+##.cz-cookie-notice
+##.cz-cookiebar
+##.d-cc--modal-backdrop
+##.d-cookie-bar
+##.d-cookieBannerView
+##.d-cookies
+##.dCookiesAlert
+##.d_co_box
+##.daac-desktop-notice
+##.dagCookieDisclaimer
+##.dah-consent-manager-overlay
+##.dark.gdpr-settings
+##.das-cookie
+##.das-cookie-banner
+##.dashblog-cookie-banner-wrap
+##.data-privacy-banner
+##.data-protection-notice
+##.dataPrivacyOverlay
+##.dataProtectionSettingsWrapper
+##.dataprivacy-cookies-note
+##.datebook-cookies
+##.datenschutzbanner
+##.datenschutzcookie
+##.datenschutzhinweis
+##.db-cookie-remark
+##.dbayCookieSelect
+##.dbe-content_cookie
+##.dbh-cookie-disclaimer
+##.dbi__cookiebanner
+##.dbk-cookiebar
+##.dbtfy-cookie_box
+##.dc-cookie-control-toggler
+##.dc-cookie-disclaimer
+##.dcCookieBar
+##.dcCookieBarBackground
+##.dce-privacy
+##.dci-cookie-consent-banner
+##.dcm-cookies
+##.dcn-privacy-policy-cookie
+##.dcx-cookie-consense
+##.dcxa-notification-cookies
+##.de-cookie-popup
+##.de-cookie-warning-wrap
+##.de-footer__cookie
+##.deacookiedt
+##.deal-cookie
+##.debat-cookies
+##.debilni-eu-susenky
+##.defaultCookie
+##.dekra-gdpr
+##.delimitaTermosCookie
+##.delta_domain_cookie
+##.dentro-cookie
+##.depo-cookies
+##.derive-cookie-drop
+##.desktop_cookie_block
+##.despre-cookie-info
+##.devrocket-cookie
+##.devsite-notification-eu-cookie
+##.dfc-cookie-info-bar-container
+##.dft-cookies.open
+##.dfx-cookiesNotification
+##.dg-cookies
+##.dg-cookies__wrapper
+##.dgp-consent
+##.dgpr-drop-down
+##.dgtl-consent
+##.dh_cookie_manager_1
+##.dhl-cgk
+##.di-cookie-consent-pop
+##.dialog-cookie-settings
+##.dialogBanner__inner[data-qa="cookie-banner"]
+##.dialogCookieWarning
+##.dialog[aria-label="cookieconsent"]
+##.dialogue-cookie
+##.didomi-notice-banner
+##.digimadi-cc-wrapper
+##.dina-cookiebanner
+##.direttiva2009_136_CE
+##.disc-cookies
+##.disclaimer-cookie
+##.disclaimer-cookies-message
+##.disclaimer-cookies:not(body):not(html)
+##.disclaimerContainer
+##.disclaimerCookie
+##.disclaimerCookies
+##.disclaimerPrivacy
+##.disclaimer_cookies
+##.disclaimerbanner
+##.disclaimermessage
+##.disclaimers-lgpd
+##.disclame_block
+##.disclamer_cookie
+##.disclosure-notification
+##.discrete-cookie
+##.dismiss-cookie
+##.dismiss_cookies
+##.dismissable-cookie-policy
+##.disoflex-cookies
+##.display-cookie
+##.display-cookies
+##.display_cookie_btn
+##.display_cookies
+##.div-banner-cookie-centrale
+##.div-cookie
+##.divAllowCookies
+##.divContenitoreCookies
+##.divCookie
+##.divCookieBanner
+##.divCookieBar
+##.divCookieDisclaimer
+##.divCookiePolicyPopoutOuter
+##.divCookiePopUp
+##.divCookiePopUpContainer
+##.divCookieWarning
+##.divCookiebotTab
+##.divCookies
+##.divCookiesWarning
+##.divFooterCookie
+##.divLeyCookies
+##.div_CookieLaw
+##.div_CookieNoticeContainer
+##.div_alert.cookie
+##.div_cookie_bg
+##.div_cookie_hint
+##.div_cookie_top
+##.div_cookies
+##.divascookies
+##.divcookie
+##.dj-cookie--visible
+##.dk-cookies-bar
+##.dl_cookieBanner_container
+##.dl_cookieBanner_outer
+##.dl_cookie_footer--visible
+##.dl_cookies_policy_advert
+##.dm--cookie-consent-banner
+##.dm-cookie-banner
+##.dmg-cookie-info
+##.dn-cookie-acceptance
+##.dn-cookie-container
+##.dni-notifications_cookie-notification
+##.dnt-using-cookies
+##.dnt_banner-wrapper
+##.dnvgl-cookie-container
+##.dom-content--eu-banner
+##.domacica-cookies-policy
+##.done-gdpr-alert-box-bg
+##.done-gdpr-alert-box-modal
+##.done-gdpr-alert-box-wrapper
+##.dot-cc-wrapper
+##.dot-cookie-prompt
+##.dot_cookies
+##.doyoulikecookies
+##.dp-cookie-legal
+##.dpdpa--popup
+##.dpl-cookie-banner
+##.dr-cookie-info-box
+##.dr-message-cookie
+##.dr_cookies_v2_container
+##.drawer-cookies
+##.drc-cookie-policy
+##.dri-ncookies-alert
+##.ds-cookiebar
+##.ds-cookies-wrapper
+##.ds2-cookie-disclaimer
+##.dsdvo-cookie-notice
+##.dsg-cookie-alert
+##.dsgvo-banner
+##.dsgvo-confirmation
+##.dsgvo-consent--popup
+##.dsgvo-container
+##.dsgvo-cookie_consent
+##.dsgvo-cookiebanner
+##.dsgvo-footer
+##.dsgvo-modal
+##.dsgvo-modal-overlay
+##.dsgvo-overlay
+##.dsgvo-widget__popup
+##.dsgvo-widget__popup-bg
+##.dsgvo-wrapper
+##.dsgvoApproval
+##.dsgvoLayer
+##.dsgvo_footer
+##.dsgvo_overlay
+##.dsvgo-cookie-overlay
+##.dt-cookie-consent
+##.dt-cookie-dialog
+##.dtcookie-overlay
+##.dtcookie__wrap
+##.dtm-cookie-banner
+##.dtx-cookie
+##.dtyrd-cookie-consent
+##.du_consent
+##.duc-base_cookie-consent
+##.duet--cta--cookie-banner
+##.dv-cookie-banner
+##.dv-cookies
+##.dvCookies
+##.dvcookies-banner-container
+##.dvore-accept-cookie-container
+##.dvore_prg_accept_cookie_container
+##.dvscookies-banner-contai
+##.dvscookies-banner-container
+##.dw_cookies
+##.dwa-embed-cookie-consent-container
+##.dwcc-cookieconsent
+##.dxml-cookie-modal-background
+##.e-consents-alert
+##.e-cookie
+##.e-cookie-info
+##.e-cookie-message
+##.e-cookie-wrapper
+##.e-cookieBar
+##.e-cookiebar
+##.e-cookies
+##.e-cookies-warning
+##.e-note__cookies
+##.e-tron-cookies-notice
+##.e3_cookies
+##.e3n_cookiebanner
+##.eCookiesBanner
+##.eGDSCookiesOverlay
+##.ePrivacyOuterWrapper
+##.ea-cookie-disclaimer
+##.ea-cookies-bar
+##.eav-cookielayer
+##.eb-cookie
+##.ebc-cookie-compliance-banner
+##.eboxCookieBar
+##.eboxCookieLaw
+##.ebu-cookies-layer__modal
+##.ec-cookie-bar
+##.ec-cookie-policy
+##.ec-gtm-cookie-directive
+##.ec-notice--warning
+##.ec-notices__wrap
+##.ecaupo-cookie
+##.ecb-cookieConsent
+##.ecdcCookiePolicy
+##.ecmt-notification-cookies
+##.ecom-cookie_box
+##.ecom-cookiebar
+##.ecomcookielaw-holder
+##.ed-cookies-bar
+##.edcc-cookie-bar
+##.eds-notification-bar
+##.edx-cookie-banner-wrapper
+##.ee-intro-banner__consent
+##.efilli-layout-legacy
+##.eg-cc-banner
+##.egm-cookie-flyout
+##.egmont-cookie-alert
+##.egmont-cookies
+##.eh-cookie-disclaimer
+##.eh-cookieinfo
+##.ei_cookie
+##.eightworks-cookie-consent-plus
+##.eightworks-cookie-consent-plus-toggler
+##.eii-ccpa-cookie
+##.ek-cookie
+##.eksCookieContainer
+##.el-cookie-consent
+##.el-cookie-consent-area
+##.elan42-disclaimer-banner
+##.elca-gdpr
+##.element-cookie-banner
+##.elfsight-widget-cookie-consent
+##.emb-cp-dialog
+##.emb-cp-wrapper
+##.embeddedCookieConsentPopup
+##.emerson-cookie
+##.emg-cookie-bar
+##.emgcookie
+##.emka-cookies-bottom-layer
+##.emm-cookie-info
+##.emp-cookies-policy
+##.ems-cookie-bnr
+##.en-EngagementBanner__CookieBar
+##.en_gdpr
+##.enable_marketing_cookies
+##.encart_cookie
+##.enerjisa-cerez-politikasi-cookie-bar
+##.eng_cookie_inner
+##.enhanced-privacy-cookie-policy
+##.ensModalBackdrop
+##.ensNotifyBanner
+##.ensNotifyBannerWrapper
+##.ensureCookie
+##.env-modal-cookies
+##.eocookie
+##.eone--cookie-banner
+##.eos-cookies-warning
+##.ep-cookie-consent
+##.ep-cookies-bar
+##.ep-cookies-info-wrapper
+##.ep_cookies
+##.epic-cookie-banner
+##.epp-cookie
+##.epp-lb-inner
+##.eprivacy-banner--displayed
+##.eprivacy-banner-container
+##.eprivacy-banner__container
+##.eprivacy-cookie
+##.eprivacy-plugin
+##.eprivacy_cookie
+##.eprjcookie
+##.epson_cookienotice
+##.epublishing-eu-cookies
+##.error.cookie
+##.erw-gdpr-notice-footer
+##.es-cookie-solution
+##.esil-global-section__cookie-banner
+##.espa-banner-fixed
+##.espa-hover-image
+##.espa-image
+##.espa-logos__container
+##.espabanner
+##.espcookie
+##.esri-cookie
+##.estrategy-cookie-popup
+##.estrategy-cookie-popup-mobile
+##.et-cookie
+##.et_cookie_consent
+##.etiCookieBanner
+##.ets_cookie_banber_block
+##.eu-banner
+##.eu-compliance
+##.eu-compliance-message
+##.eu-cookie-banner
+##.eu-cookie-bar-notification
+##.eu-cookie-compliance-popup-open:not(body):not(html)
+##.eu-cookie-div-initial
+##.eu-cookie-info
+##.eu-cookie-law
+##.eu-cookie-law-wrapper
+##.eu-cookie-message
+##.eu-cookie-nag
+##.eu-cookie-notice
+##.eu-cookie-notification
+##.eu-cookie-panel
+##.eu-cookie-policy
+##.eu-cookie-policy-banner-wrapper
+##.eu-cookie-policy-content
+##.eu-cookie-policy-note
+##.eu-cookie-policy-wrapper
+##.eu-cookie-popup
+##.eu-cookie-prompt
+##.eu-cookie-show
+##.eu-cookie-warning
+##.eu-cookie-wrap
+##.eu-cookie-wrapper
+##.eu-cookies
+##.eu-cookies-alert
+##.eu-cookies-bar-cookies-bar
+##.eu-cookies-bar-cookies-bar-settings
+##.eu-cookies-bar-cookies-bar-wrap
+##.eu-cookies-bar:not(body)
+##.eu-cookies-message
+##.eu-cookies-msg
+##.eu-cookies-policy
+##.eu-cookies-show
+##.eu-cookies-wrapper
+##.eu-law-container
+##.eu-pruda-cookies
+##.eu-suck-my-cookie
+##.euCookie
+##.euCookie-outer
+##.euCookieContainer
+##.euCookieInfobarWrapper
+##.euCookieLaw
+##.euCookieLayer
+##.euCookieModal
+##.euCookieNotice
+##.euCookiePanel
+##.euCookiePolicy
+##.euCookiePopupContainer
+##.euCookiePopupSpacer
+##.euCookieStripe
+##.euCookieWarn
+##.euCookies
+##.euCookiesPolicy
+##.euPolicy
+##.euPrivacy_cookiesMsg
+##.eu__cookie--container
+##.eu_cc_law
+##.eu_cookie_consent
+##.eu_cookie_warning_popup
+##.eu_cookie_wrapper_2
+##.eu_cookies
+##.eu_cookies_alert
+##.eu_coookie_toolbar
+##.eucookie
+##.eucookie-pop-up
+##.eucookie_block
+##.eucookie_disclaimer
+##.eucookie_notication
+##.eucookie_wrapper
+##.eucookiebar
+##.eucookielaw
+##.eucookielaw-banner
+##.eucookiemanager
+##.eucookies
+##.eucookies-wrapper
+##.eudsgvo
+##.eugdpr-block
+##.eula-cookie-banner
+##.eulawbox
+##.eupopup-background
+##.eupopup-container
+##.eupopup-container-bottomright
+##.eupopup-containereu
+##.eurocookie
+##.eut-privacy-wrapper
+##.ev-cookie-banner
+##.evaste-container
+##.evasteseloste
+##.evidon-banner
+##.evil-cookie-bar
+##.evo-gdpr-box
+##.evt-cookie-element
+##.exp-cookies
+##.expanded.gdpr
+##.explicit-cookie-container
+##.explicit-cookie-container-wrapper
+##.exponea-banner
+##.exponea-banner--cookie
+##.exponea-cookie
+##.exponea-cookie-backdrop
+##.expressconsentAlert
+##.ext-cookie
+##.extra-cookies-popup
+##.extreme-cookie
+##.exzocookie
+##.eyg-cookie-policy-msg
+##.ez-cookie-banner
+##.ezoic-floating-bottom
+##.f-cookie-banner
+##.f-cookie-consent
+##.f-cookie-consent-bottom
+##.f-data-policy
+##.f-eu-cookies
+##.f_cookie
+##.f_gdpr
+##.fa-cookie
+##.faldonCookies
+##.fasciaCookie
+##.fb-cookie-law
+##.fb-cookies-bar
+##.fbPageBanner
+##.fbar-cookie-policy
+##.fc-cookies
+##.fck-eu-cookies
+##.fcs-cookie-component
+##.feature-consent-dialog
+##.feedback-message.cookie
+##.feld-cookienotice
+##.feo_share_cookies_bar
+##.festival-cookie
+##.fever-cookie__bar
+##.ffCookie-modal
+##.fg-cookiesdirective
+##.fhCookieLaw
+##.fi-cookie-banner
+##.fil-cookie-policy
+##.filCookiesCnil
+##.finex-cookiebar
+##.fit-cookieWall-overlay
+##.fiu-cookie-banner
+##.fix-cookie-msg-bar
+##.fixcookie
+##.fixed-bottom.cookie-consent
+##.fixed-bottom.cookies
+##.fixed-bottom.showPrivacy
+##.fixed-cookie
+##.fixed-cookie-aria
+##.fixed-cookie-content
+##.fixed-cookie-prl
+##.fixed-msg--cookies
+##.fixed-top.cookies
+##.fixed.cookies_law
+##.fixedCookieOverlay
+##.fixedCookiePolicy
+##.fixed[data-cookiebar]
+##.fixed_cerez
+##.fixed_cookiePolicy
+##.fixed_cookies
+##.fl-cookie-notice
+##.fl-cookie-notice--container
+##.flash--cookie
+##.flash--cookie-banner
+##.flash-rgpd
+##.flash[data-cookie="eu_cookie"]
+##.flashmessage-cookies
+##.flat-cm-cookie
+##.flatsome-cookies
+##.flatsome-cookies--active
+##.flazio-cookie
+##.flc-cookie-notice
+##.flex-cookies-statement
+##.flex.cookie
+##.flex_cookie_popup_bottom
+##.flexi-cookie
+##.flexit_cookie
+##.floating-bar[data-cookie-name="cookie_notice"]
+##.floating-cookie-info
+##.floating-cookie-policy
+##.flowCookie
+##.fluv-eu-coockies-wrapper
+##.fluxedConsentPopup
+##.fm-cookieBanner
+##.fn-cookie-show-bar
+##.fn-cookiebar
+##.fn-cookiebar-style
+##.fnn-cookiemanager
+##.fo-cookie
+##.fo-cookies-policy
+##.focus-cookies
+##.foi-cookie-banner
+##.fond_bandeau_coockies
+##.fondcookies2
+##.fondo-aviso-cookies
+##.foo-bar-cookie
+##.foobar-cookie
+##.fool_text_cookie
+##.foooter-privacy-policy
+##.footer-bottom > #cookies
+##.footer-cnil
+##.footer-cnil-wr
+##.footer-cookie
+##.footer-cookie-banner
+##.footer-cookie-consent
+##.footer-cookie-container
+##.footer-cookie-notice
+##.footer-cookie-notification
+##.footer-cookie-notifier
+##.footer-cookie-policy
+##.footer-cookie-popup
+##.footer-cookie-warning
+##.footer-cookie-wrapper
+##.footer-cookies
+##.footer-cookies-alert
+##.footer-cookies-bar
+##.footer-cookies-policy
+##.footer-cookies-wrapper
+##.footer-gdpr
+##.footer-gdpr-modal
+##.footer-kvkk
+##.footer-new__cookie-notice
+##.footer-notification--cookie-policy
+##.footer-privacy-banner
+##.footer-privacy-popup
+##.footer-private-policy
+##.footer-section-cookie
+##.footer-sticky__cookie-policy
+##.footer-terms-notification
+##.footer-v2__privacy
+##.footerCookies
+##.footer__accept-cookies
+##.footer__coockies
+##.footer__cookie
+##.footer__cookie-alert--wrapper
+##.footer__cookie-banner
+##.footer__cookie-info
+##.footer__cookiebar
+##.footer__cookies
+##.footer__eu-cookie
+##.footer__gdrp
+##.footer__privacy-cookie
+##.footer_cerezpolitikasi
+##.footer_cnil
+##.footer_cookie
+##.footer_cookieReminder
+##.footer_cookie_alert
+##.footer_cookie_bar
+##.footer_cookie_policy
+##.footer_cookies
+##.footer_eu_cookie
+##.footer_privacy-container
+##.footerck
+##.footprint_cookie
+##.force-eu-cookies
+##.form--cookie-bar
+##.form-box-cookiemessage
+##.formbarConsent
+##.formidaCookie
+##.forum-cookie-notices
+##.fp-cookie-bar
+##.fp-cookie-consent
+##.fp_cookie
+##.fp_cookies
+##.fr-c-message-wrap
+##.fr-consent-banner
+##.fr-cookie-bar
+##.fr-cookie-disclaimer
+##.fr_showCookieLegalInfo
+##.frame-small.cookies
+##.framework_cookies
+##.freeprivacypolicy-com---nb
+##.freeprivacypolicy-com---nb-simple
+##.frigg-cookiewarning-container
+##.frontendPrivacy__consentBanner
+##.fs-cc-banner2_component
+##.fs-cc-banner3_component
+##.fs-cc-banner3_component-2
+##.fs-cc-banner4_component
+##.fs-cc-banner_component
+##.fs-cc-component
+##.fs-cc-cookie
+##.fs-cc-cookie-symbol
+##.fs-cookie-bar
+##.ft-cookie-disclaimer
+##.ft__cookies
+##.ftc-cookies-popup
+##.fti-cookie-banner
+##.fucking-eu-cookies
+##.fullwidth.cookie
+##.func-cookie
+##.fusion-privacy-bar
+##.future-cookie-bar
+##.fw-dialog[aria-labelledby="cookie-policy-content"]
+##.fw_cookie
+##.fworks_consent_bar
+##.fworks_consent_bar_init
+##.fws-cookie-container
+##.fxs_alertCookies
+##.fxxl-cookie-mainmodal
+##.fz-use-cookies
+##.g-alert-cookie
+##.g-consent-manager-banner
+##.g-cookie
+##.g-cookie-bar
+##.g-cookieNotice
+##.g-cookiebar
+##.g-cookies
+##.ga-google-analytics-pro-optout
+##.ga-ui-cookiebar
+##.gaCookieConsent
+##.gaicoMessage
+##.gaoop[data-gaoop_ua]
+##.gb-cookie-consent
+##.gb-cookies
+##.gb-gnb__notice-bar
+##.gbi-cookiebar
+##.gbp-cookieinfo
+##.gc_message_bar_bottom
+##.gcc-cookies
+##.gcprivacy-hint
+##.gcusescookies_banner_block
+##.gd-cookie-bar
+##.gdbr_banner
+##.gdbr_banner_wrapper
+##.gdl-cookie-dialog
+##.gdlr-core-privacy-box-wrap
+##.gdn-wrap
+##.gdn-wrap-desktop
+##.gdn-wrap-mobile
+##.gdp_cookie_widget
+##.gdpr--popup
+##.gdpr-Popup
+##.gdpr-advice-desktop
+##.gdpr-agree
+##.gdpr-agreement-box
+##.gdpr-alert
+##.gdpr-alert-bar
+##.gdpr-alert-bottom
+##.gdpr-alert-box-wrapper
+##.gdpr-area
+##.gdpr-ask-modal
+##.gdpr-banner
+##.gdpr-banner--slideup
+##.gdpr-banner-container
+##.gdpr-banner-content-wrapper
+##.gdpr-banner-processed
+##.gdpr-banner-wrapper
+##.gdpr-bar
+##.gdpr-bar-wrapper
+##.gdpr-bg
+##.gdpr-blk
+##.gdpr-block
+##.gdpr-block-privacy
+##.gdpr-block-wrap
+##.gdpr-bottom-banner
+##.gdpr-box
+##.gdpr-button
+##.gdpr-card-wrapper
+##.gdpr-compliance-wrapper
+##.gdpr-component-holder
+##.gdpr-confirmation
+##.gdpr-consent
+##.gdpr-consent--hidden
+##.gdpr-consent-backdrop
+##.gdpr-consent-banner
+##.gdpr-consent-bar
+##.gdpr-consent-bar-box
+##.gdpr-consent-container
+##.gdpr-consent-element-wrapper
+##.gdpr-consent-guard-cookie-notice
+##.gdpr-consent-panel
+##.gdpr-content
+##.gdpr-content_blk-indepth
+##.gdpr-cookie-alert-wrap
+##.gdpr-cookie-banner
+##.gdpr-cookie-banner-wrapper
+##.gdpr-cookie-bar
+##.gdpr-cookie-bar-bottom
+##.gdpr-cookie-box
+##.gdpr-cookie-consent
+##.gdpr-cookie-consent-banner
+##.gdpr-cookie-disclaimer
+##.gdpr-cookie-finsweet-1
+##.gdpr-cookie-layer
+##.gdpr-cookie-layer--active
+##.gdpr-cookie-message
+##.gdpr-cookie-modal
+##.gdpr-cookie-notice
+##.gdpr-cookie-notice-filter
+##.gdpr-cookie-notice-modal
+##.gdpr-cookie-policy
+##.gdpr-cookie-popup
+##.gdpr-cookie-wrap
+##.gdpr-cookie-wrapper
+##.gdpr-cookieNotice
+##.gdpr-cookie_message
+##.gdpr-cookiebanner
+##.gdpr-cookies
+##.gdpr-cookies-hint
+##.gdpr-cookies-line
+##.gdpr-cookies-welcome-box
+##.gdpr-dialog
+##.gdpr-dialog-wrapper
+##.gdpr-disclaimer
+##.gdpr-disclaimer__overlay
+##.gdpr-eu
+##.gdpr-float-banner
+##.gdpr-footer
+##.gdpr-footer-alert-box-wrapper
+##.gdpr-full-page-wrapper
+##.gdpr-headband
+##.gdpr-header
+##.gdpr-headerWrapper
+##.gdpr-hellobar
+##.gdpr-info
+##.gdpr-info-bar
+##.gdpr-mask
+##.gdpr-message
+##.gdpr-message-banner
+##.gdpr-messenger-modal
+##.gdpr-modal-block
+##.gdpr-modal-dialog
+##.gdpr-modal-notify
+##.gdpr-modal-overlay
+##.gdpr-modal-wrapper
+##.gdpr-msg
+##.gdpr-notice
+##.gdpr-notice-container
+##.gdpr-notice-policy-container
+##.gdpr-notification
+##.gdpr-notification-banner
+##.gdpr-onboarding-container
+##.gdpr-opt-in-widget
+##.gdpr-optin-view
+##.gdpr-outer
+##.gdpr-overlay
+##.gdpr-overlay--initial
+##.gdpr-overlay--video
+##.gdpr-overlay-container
+##.gdpr-panel
+##.gdpr-pn-container
+##.gdpr-policy-bar
+##.gdpr-policy.toaster
+##.gdpr-pop-over
+##.gdpr-popin
+##.gdpr-popup
+##.gdpr-popup-modal-class
+##.gdpr-privacy-banner
+##.gdpr-privacy-bar
+##.gdpr-privacy-notice
+##.gdpr-privacy-preferences
+##.gdpr-prompt
+##.gdpr-reveal
+##.gdpr-row
+##.gdpr-section
+##.gdpr-settings-sm
+##.gdpr-status-hold
+##.gdpr-sticky-container
+##.gdpr-sticky-footer
+##.gdpr-sticky_message
+##.gdpr-stickybar
+##.gdpr-support
+##.gdpr-tab
+##.gdpr-terms-banner
+##.gdpr-terms-popup
+##.gdpr-text-align
+##.gdpr-warning
+##.gdpr-warning-slide-up
+##.gdpr-wrap
+##.gdpr-wraper
+##.gdpr.consent
+##.gdpr.page-window
+##.gdprBackgound
+##.gdprBalk
+##.gdprBanner
+##.gdprBannerWrapper
+##.gdprBanner__overlay
+##.gdprBlock
+##.gdprBnnr
+##.gdprBoxContainer
+##.gdprContainer
+##.gdprContainerWrapper
+##.gdprCookieAlertPopup
+##.gdprCookieBanner_container
+##.gdprCookieLaw
+##.gdprCookieWrapper
+##.gdprForm
+##.gdprLegalNotification
+##.gdprManagerMessage
+##.gdprMessage
+##.gdprNotice
+##.gdprPopup
+##.gdpr[data-gdpr-popup]
+##.gdpr__A
+##.gdpr__banner
+##.gdpr__container
+##.gdpr__cookie
+##.gdpr__cookie_consent
+##.gdpr__overlay
+##.gdpr__popup
+##.gdpr__wrapper
+##.gdpr_accept_cookie
+##.gdpr_approve
+##.gdpr_banner
+##.gdpr_banner_top
+##.gdpr_bar
+##.gdpr_base
+##.gdpr_cn-bottom
+##.gdpr_compliance
+##.gdpr_consent_dialog
+##.gdpr_consent_popup
+##.gdpr_cookie
+##.gdpr_cookie_alert_box
+##.gdpr_cookie_banner
+##.gdpr_cookie_bar
+##.gdpr_cookie_bar_cont
+##.gdpr_cookie_notice
+##.gdpr_cookiebar
+##.gdpr_cookies_banner_wrapper
+##.gdpr_discplaimer
+##.gdpr_div
+##.gdpr_gdpr-composer-panel__toolbar
+##.gdpr_hdr
+##.gdpr_hook
+##.gdpr_infobar_postion_bottom
+##.gdpr_ip
+##.gdpr_main
+##.gdpr_msg
+##.gdpr_msgbox
+##.gdpr_note
+##.gdpr_notice_container
+##.gdpr_overlay
+##.gdpr_popup
+##.gdpr_popup_wrap
+##.gdpr_redesign
+##.gdpr_theme_anonymous
+##.gdpr_v2
+##.gdpr_wrapper
+##.gdprbar
+##.gdprbox
+##.gdprbox__wrapper--simple
+##.gdprboxcolor
+##.gdprcookie
+##.gdprcookie-layer
+##.gdprcookie-mask
+##.gdprcookie-wrapper
+##.gdprcookie_blocker
+##.gdprcookies-modal-section
+##.gdprcookies-modal-wrapper
+##.gdprcp-cookies-bar
+##.gdprfade
+##.gdprfooter
+##.gdprmodal
+##.gdprmodal-backdrop
+##.gdprpopup
+##.gdprrhs
+##.gdprsuite-cookie-bar-display
+##.gdrp-banner-content
+##.gdrp-cookie-banner-wrapper
+##.gdrp-popup-content
+##.gdrp-wrap.gdrp-show
+##.gdrp__overlay
+##.gds-cookie
+##.gebaeck-notice
+##.gecko-cookies-popup
+##.geistlichde24x-cookie-opt-in
+##.gem-c-cookie-banner
+##.general-block-cookie
+##.general-cookie-notification
+##.general_data_protection_regulation
+##.generic-cookie-notification
+##.gettcookie-banner-wrapper
+##.gf-cookies
+##.gfl-widget-gdpr-wrap
+##.ghost-cookiebar
+##.ghostery-implied-consent-notice
+##.gi-cookie-banner
+##.gigyaNotify
+##.ginger_banner-wrapper
+##.gizlilik-cookies
+##.gj-cookie-prompt
+##.gk-cookie-policy
+##.gl-cookie-banner-wrapper
+##.glCookieMessage
+##.glatCookieBar
+##.global-alert--cookie-notice
+##.global-cookie
+##.global-cookie-banner
+##.global-cookie-bar
+##.global-cookie-curtain
+##.global-cookie-message
+##.global-cookie-msg
+##.global-cookie-notice
+##.global-cookie-tip
+##.global-cookiepopup
+##.global-cookies
+##.global-gdpr-container
+##.global-gdpr-popup
+##.global-level-alert
+##.global-message_cookie
+##.globalPrivacyBar
+##.globalcookiepolicycontainer
+##.glowCookies__banner
+##.glowCookies__show
+##.gmt_consent_popup
+##.gmt_gdpr
+##.gmt_gdpr_button_config
+##.gn-cookie-alert
+##.gn-cookies-warning
+##.gno-cookies-panel
+##.go-mdl-cookies-drct-warning
+##.google-disclaimer-wrapper
+##.google_line_tracking
+##.googleadwordsconversiontracking-cookie
+##.govuk-cookie-banner
+##.gp-cookie-banner
+##.gp-cookies-container
+##.gp-gdpr__belt
+##.gp-modal__cookies
+##.gp-plugin-cookie-consent
+##.gpdr-agreement
+##.gpdr-wrapper
+##.gpdrBannerContainer
+##.gpm-cookie-accepted
+##.gpm-cookie-accepted-container
+##.gpn-gdpr-container
+##.gr-consent
+##.gr-cookie-overlay
+##.gravitoCMP-background-overlay
+##.gray-with-bg-img-cookies
+##.grdp-container
+##.grdp-popup
+##.great-eu-cookies
+##.grecaptcha-badge
+##.group-header-placeholder-cookie
+##.grp-header__cookiedisclaimer
+##.grsNotifyBar
+##.grt-cookie
+##.grt-cookie-active
+##.grve-privacy-wrapper
+##.gsCookieDisclaimer
+##.gsk-cookieconsent-outer
+##.gt-cookie-bar
+##.gt-cookies-warning
+##.gt-ui-cookie-bar
+##.gtec-popup-datenschutz
+##.gud_cookie_pl
+##.guesty-cookie-notice
+##.guj-cb
+##.gw-cookie-consent
+##.h-cookies
+##.hLibCookieExpanded
+##.hal-cookienotice
+##.handle-cookies-container
+##.has-cookie-message:not(body)
+##.hbcom-cookiepanel
+##.hc-cookie-consent-bar
+##.hc-privacydisclaimer
+##.hde-cookie-consent
+##.hdlint-cookie-container
+##.head-cookie-container
+##.head-cookies
+##.headCookieBar
+##.headband-cookie
+##.header--cookies
+##.header--worldwide__cookies
+##.header-bar-cookies
+##.header-cnil
+##.header-cnil-bar
+##.header-cookie
+##.header-cookie-banner
+##.header-cookie-bar
+##.header-cookie-content
+##.header-cookie-notice
+##.header-cookie-policy
+##.header-cookie-wet
+##.header-cookies
+##.header-cookies-alert
+##.header-cookies-component
+##.header-cookies-popup
+##.header-declaration[data-customer-popup="cookie"]
+##.header-gdpr
+##.header-gdpr--visible
+##.header-gdpr__container
+##.header-message--cookie
+##.header-message--cookie__container
+##.header-notice-cookies
+##.header-privacy-policy
+##.header-wrapper__cookie
+##.headerCookie
+##.headerCookies
+##.header__accept-cookies-bar
+##.header__cookie
+##.header__cookies
+##.header__cookies-notice__wrapper
+##.header__cookiespolicy
+##.header__rdc-cookie-disclaimer
+##.header_cookie
+##.headerbar_cookies
+##.hearye
+##.hello-rodo
+##.hello-rodo--show
+##.herbyCookieConsent
+##.herne_cookie_consent_container_pre_outerbox2
+##.hfs_pageCookieHint
+##.hi-cookie-block
+##.hidden-xs.eu-policy
+##.hide-cookie-setting-button
+##.hideFirstLoadPopUpCookiePolicy
+##.hig-cookie-bar__container
+##.hirma-cookies
+##.hl-cookies-header
+##.hld-cookie-disclaimer
+##.ho-cookies
+##.hof-CookieBar
+##.home-footer__cookies
+##.home-privacy-coookies
+##.home_cookie-notice
+##.home_cookie_box
+##.homepage-cookie-block
+##.homepg-cookie-container
+##.hongo-cookie-policy-wrapper
+##.hook--cookie
+##.hook--cookie--placeholder
+##.hook-cookies-msg
+##.hp-cookie-notice
+##.hp-cookiebar
+##.hp-cookies
+##.hpm-alert-cookies
+##.hsh-cookie-banner
+##.hsp-cookies
+##.ht-nav-cookienotification
+##.hts-rgpd
+##.hu-position-bottom.hu-wrapper
+##.hu-position-center.hu-wrapper
+##.huawei-cookie
+##.huishu-cookie-monster-banner-container
+##.hv_privacy_prompt
+##.hw-cookie-popup
+##.hwcc_cookie_bar
+##.hwcookiebanner
+##.hx_cookie-banner
+##.hx_cookie-banner-main
+##.hybrid-cookie-modal-container
+##.hz-consents-banner
+##.hz-visitor-consents
+##.i-am-ok-with-cookies
+##.i-cookie-policy-notice
+##.i-cookieDialog
+##.i-layout__cookie-notification
+##.iCookie
+##.iCookieBar
+##.ia-m-cookie-flyout
+##.iai_cookie
+##.ib-cookie-bar
+##.ib-cookie-info-container
+##.ib-global-cookie-notice
+##.ib-m-cookie-banner
+##.ibeCookieBanner
+##.ibx-coockie-agree
+##.ic-cookie-banner
+##.ic-cookies-alert-text
+##.ic-gdpr-popup
+##.icaal-cookie-notice
+##.icl-LegalConsentBanner
+##.icms-cookiealert
+##.ico-cookie-wrapper
+##.id-CookieConsent
+##.idc-privacy-notice
+##.identity-noticebar
+##.identity-noticebar-content
+##.idgcp__section
+##.idm-cookie-overlay
+##.idm-cookie-policy
+##.iframe_cookies
+##.igrowl-cookie
+##.ilikecookies
+##.ilovecookies
+##.iltempocookies
+##.imPolicycookiemessage
+##.imc-cookie
+##.important-banner--cookies
+##.impuls-cookie-monster-banner
+##.impuls-cookie-monster-banner-container
+##.inbentaCookie
+##.inconsent-bar
+##.incrypted-cookie-bar
+##.index__cookie__body
+##.index_cookieNotification__1-VLN
+##.index_cookies
+##.inerCookie
+##.info-banner__cookie-policy
+##.info-block.cookies
+##.info-content-cookies
+##.info-cookie
+##.info-cookies
+##.info-message--cookie-agreement
+##.infoCocke
+##.infoCookie
+##.infoCookies
+##.info_cookie
+##.info_cookie_popup
+##.info_cookies
+##.info_cookies_banner
+##.infocookie
+##.infocookies
+##.informativa-breve
+##.informativa-cookie
+##.informativa-cookies
+##.informativa_cookie
+##.informativo-lgpd
+##.infos-cookie
+##.infos-gestion-cookies
+##.infoscookies
+##.ing-CookieManagementNext
+##.initial-cmp-container-overlay
+##.inktheme-cookies
+##.inline-cookies-panel
+##.inner_cnil
+##.innoPrivacy
+##.ins-el-cookie-alert
+##.ins-v-cookie-alert
+##.inscookies-banner-container
+##.inside-cookie
+##.intercept-cookies
+##.intgrtn-cookie-popup
+##.ip-cookie-banner
+##.iparCookieNotice
+##.iparsys.cookies
+##.ipx_cookie_overlay
+##.ir_cookiehint
+##.is-active.cookie
+##.is-active.cookies
+##.is-cookie-banner:not(body)
+##.is-cookie-message
+##.is-visible.cookies
+##.it-eprivacy-backdrop
+##.it_privacy_notice
+##.itbl-c-cookies-consent
+##.itemlgpd
+##.iubenda-cs-left
+##.iubenda-ibadge
+##.iv-ui-website-cookie-compliance
+##.iw-cc-banner
+##.iw-cookie-overlay
+##.iw-cookie-window
+##.iwcc-background
+##.iweb-cookie-bar
+##.ixi_accept_cookies
+##.izee-cookie-alert
+##.j-cookie
+##.j-cookie-disclaimer
+##.j-cookie-message
+##.j-cookieAlert
+##.j-cookieConsentPanel
+##.j-cookieContainer
+##.j-cookieDisclaimer
+##.j-cookieLaw
+##.j-cookieModal
+##.j-cookies
+##.j-gdpr-message
+##.j-welcome-privacy
+##.jCookie
+##.ja-cookie-consent
+##.ja_gdpr
+##.jb-cookie
+##.jb.cookie
+##.jbr-cookie-banner
+##.jc-cookiemanager
+##.jcb-cookie-disclaimer
+##.jcookie-navbar
+##.jd-rodo
+##.jd-rodo-2
+##.jg-chrome-cookie-consent
+##.jix_acceptcookies_box
+##.jlc-wm-cookie-policy
+##.jlp-cookie-info-container
+##.jnc-cookie
+##.jnews-cookie-law-policy
+##.johnnys-cookie-warning
+##.jpcookiepopup-container
+##.jqCookieAcceptContainer
+##.jq_cookie-strip
+##.jq_cookiePolicy
+##.jq_cookies_msg
+##.jqmAlertWindow
+##.jqmOverlay
+##.js--cookie-consent
+##.js--cookie_outer
+##.js--cookiecontrol
+##.js--cookies-consent
+##.js--lgpd-container
+##.js-Cookie
+##.js-CookieBanner
+##.js-CookieCompliance
+##.js-CookieConsent
+##.js-CookieConsentV2
+##.js-Cookies
+##.js-EU-cookie
+##.js-accept-cookie
+##.js-accept-cookie-box
+##.js-accept-cookie-container
+##.js-accept-cookies-banner
+##.js-accept-terms-holder
+##.js-acceptCookieDiv
+##.js-acceptUseCookie
+##.js-alert-cookie
+##.js-allow-cookie-banner
+##.js-allow-cookies
+##.js-attention-we-use-cookies
+##.js-badge-cookie-msg
+##.js-banner-cookie
+##.js-bannerLGPD
+##.js-basic_features-cookiemessage
+##.js-bcookie--box-info
+##.js-bengor-cookies
+##.js-bottom-notif-msg-cookie
+##.js-bottom-notif-msg-privacy
+##.js-box-termo-lgpd
+##.js-c-cookies-notification-banner
+##.js-cbc-cookie-notice
+##.js-cc-announcement
+##.js-cmp-cookiesBar
+##.js-consent-banner
+##.js-consent-bar
+##.js-consent-form
+##.js-consent-notice
+##.js-consent-panel
+##.js-consent-popup
+##.js-consent-react-root
+##.js-coockie
+##.js-cook.page-cook
+##.js-cookie
+##.js-cookie--modal
+##.js-cookie-advert-container
+##.js-cookie-agree
+##.js-cookie-agreement
+##.js-cookie-alert
+##.js-cookie-alert1
+##.js-cookie-banner
+##.js-cookie-banner-blur
+##.js-cookie-banner-container
+##.js-cookie-banner-terminal
+##.js-cookie-bar
+##.js-cookie-close
+##.js-cookie-compliance:not(html):not(body)
+##.js-cookie-configurator
+##.js-cookie-confirm
+##.js-cookie-confirmation
+##.js-cookie-consent
+##.js-cookie-consent-banner
+##.js-cookie-consent-bar
+##.js-cookie-consent-block
+##.js-cookie-consent-container
+##.js-cookie-consent-layer
+##.js-cookie-consent-message
+##.js-cookie-consent-module
+##.js-cookie-consent-wrap
+##.js-cookie-container:not(html):not(body)
+##.js-cookie-copy
+##.js-cookie-data-warning
+##.js-cookie-dialog
+##.js-cookie-directive
+##.js-cookie-disclaimer
+##.js-cookie-disclosure-banner
+##.js-cookie-footer
+##.js-cookie-headband
+##.js-cookie-hint
+##.js-cookie-holder
+##.js-cookie-iframe
+##.js-cookie-info
+##.js-cookie-info__panel
+##.js-cookie-infomation
+##.js-cookie-information-popup
+##.js-cookie-law
+##.js-cookie-line
+##.js-cookie-mask
+##.js-cookie-message
+##.js-cookie-message-placeholder
+##.js-cookie-modal
+##.js-cookie-modal-container
+##.js-cookie-monster-overlay
+##.js-cookie-msg
+##.js-cookie-notation
+##.js-cookie-notice
+##.js-cookie-notice-full-container
+##.js-cookie-notification
+##.js-cookie-notification-banner
+##.js-cookie-notify
+##.js-cookie-offer
+##.js-cookie-overlay
+##.js-cookie-panel
+##.js-cookie-policy
+##.js-cookie-policy-banner
+##.js-cookie-policy-box
+##.js-cookie-policy-header
+##.js-cookie-popin-overlay
+##.js-cookie-popover
+##.js-cookie-popup-app
+##.js-cookie-popup-container
+##.js-cookie-privacy
+##.js-cookie-prompt
+##.js-cookie-rgpd
+##.js-cookie-warning
+##.js-cookie-warning-container
+##.js-cookie-widget
+##.js-cookieAcceptanceInformation
+##.js-cookieBanner
+##.js-cookieComply
+##.js-cookieConsent
+##.js-cookieHeader
+##.js-cookieInfo
+##.js-cookieMessage
+##.js-cookieNote
+##.js-cookieOverlay
+##.js-cookieSticky
+##.js-cookie_bar
+##.js-cookie_hint
+##.js-cookie_policy
+##.js-cookiebanner
+##.js-cookiebanner-wrap
+##.js-cookiebar
+##.js-cookiehint
+##.js-cookieinfolayer
+##.js-cookielayer
+##.js-cookieloop
+##.js-cookiemodal
+##.js-cookies
+##.js-cookies-agree-container
+##.js-cookies-agreement
+##.js-cookies-agreement-notification
+##.js-cookies-alert
+##.js-cookies-backdrop
+##.js-cookies-banner
+##.js-cookies-bar
+##.js-cookies-block
+##.js-cookies-block_t
+##.js-cookies-box
+##.js-cookies-consent
+##.js-cookies-eu
+##.js-cookies-message
+##.js-cookies-not-accepted
+##.js-cookies-notice
+##.js-cookies-page-filter
+##.js-cookies-panel
+##.js-cookies-popup
+##.js-cookies-popups
+##.js-cookies-target
+##.js-cookiesAdv
+##.js-cookies__disclamer
+##.js-cookies_informer
+##.js-cookies_notice
+##.js-cybot-cookiebot-placeholder
+##.js-data-protection-popup
+##.js-disclaimer-dismiss
+##.js-eu-co0k1es
+##.js-eu-cookie-law
+##.js-eu-cookie-notice
+##.js-f-cookie-banner
+##.js-fever-cookies
+##.js-footer-cookie-banner
+##.js-ft-cookies
+##.js-g-cookie
+##.js-gdpr
+##.js-gdpr-banner
+##.js-gdpr-consent-container
+##.js-gdpr-cookie-banner
+##.js-gdpr-cookie-box
+##.js-gdpr-header
+##.js-gdpr-info
+##.js-gdpr-notice
+##.js-gdpr-notice-dialog-overlay
+##.js-gdpr-popup
+##.js-gdpr-tooltip
+##.js-gdprAlert
+##.js-global-cookie-message
+##.js-global-cookies
+##.js-global-privacy
+##.js-global-privacy-messages
+##.js-global-skrp-messages
+##.js-global-top-message-cookies
+##.js-id--cookieconsent
+##.js-infoBarCookies
+##.js-layer-cookies
+##.js-lgpd
+##.js-lwpcngNotice
+##.js-main-cookie-banner
+##.js-message-cookies
+##.js-modal-cookie
+##.js-modal-first-cookie
+##.js-my-cookie
+##.js-nanobar-first-login
+##.js-nn-cookie
+##.js-notification-cookie-banner
+##.js-notify-cookie
+##.js-np-cookie-notice
+##.js-occlss-alert-cookiepopup
+##.js-page-cookies
+##.js-page-kvkk
+##.js-page__gdpr
+##.js-panel-cookie
+##.js-personalInformationNotice
+##.js-policy-popup
+##.js-policy_banner
+##.js-policypopup
+##.js-popup-cookie-simple
+##.js-privacy-consent
+##.js-privacy-notification
+##.js-privacy-policy-alert
+##.js-privacy-policy-bar
+##.js-privacy-policy-message-box
+##.js-react-component-CookieNotification
+##.js-rst-gdpr
+##.js-setcookiepolicy
+##.js-show.cookie-modal
+##.js-silent-consent
+##.js-site-cookie__info
+##.js-siteCookies
+##.js-sticky-cookies
+##.js-sticky-footer-cookie
+##.js-sundio-cookie-dialog
+##.js-terms-of-use-disclaimer
+##.js-tm-cookie-container
+##.js-toast-cookies
+##.js-tracking-popup
+##.js-ug-alert-cookie
+##.js-visitorNotice
+##.js-warning-top--cookies
+##.js-website-cookie-notification
+##.js.tc-banner
+##.jsCookieContainer
+##.jsCookieDiag
+##.jsCookieWarning
+##.jsCookies
+##.jsCookiesAlert
+##.jsCookiesMessage
+##.jsCookiesPopUp
+##.jsCustomCloseCookie
+##.jsCustomCookieWrap
+##.jsEUCookieInfobarDisplay
+##.jsGdprBar
+##.jsGdprNoticeHolder
+##.jsModalRodo
+##.js__banner-gdpr
+##.js__cookie
+##.js__cookie-information
+##.js__cookie-information_banner
+##.js__cookie-modal
+##.js__cookie_popup
+##.js_accept_cookie
+##.js_alertCookieCNIL_container
+##.js_ck_container
+##.js_cookie-manager
+##.js_cookie_law
+##.js_cookie_message_container
+##.js_cookies_container
+##.js_cookies_disabled_layer
+##.js_cookies_wrapper
+##.js_gdpr_cookie_banner
+##.js_header-cookie-bar
+##.jsbd-Cookie
+##.jubCookWarn
+##.jum-notification-cookie
+##.jumbotron--cookielayer
+##.june2018cookies
+##.junith-cookienote
+##.jw-widget-show-cookies-policy
+##.k4-cookie
+##.kacookie-cm-window
+##.kadence-conversion-banner
+##.kakor-bar
+##.kali-cc-bandeau
+##.kb-ck-bar-notify-block
+##.kb-cookie-banner
+##.kbc_cookie
+##.kbc_cookie_wrap
+##.keckse-info
+##.keksbar
+##.keksbox-overlay
+##.keksbox-overlay-layer
+##.keksi-banner
+##.keksikyselyModalElement
+##.kent-cookie-bar
+##.kgmModal-cookie
+##.kia-cookie
+##.kick-kcm-settings
+##.kigo-cookies
+##.kik-cookiebanner
+##.kitt-cookie-warning
+##.kitt-cookie-warning_show
+##.kjfCookieInfoBox
+##.kk-gdpr
+##.kl-cookienote
+##.klaroPlaceholder
+##.klicked-privacy-banner
+##.km-cookies-component
+##.koekiemelding
+##.koekje_bar_content
+##.kokku-cookie-banner
+##.kom_polityka_prywatnosci
+##.komunikat-panel-cookies
+##.komunikat_cookies
+##.koning-cookie-control
+##.kontener_cookie
+##.kookiecheck
+##.kp-cookies__cloak
+##.kraken-cookie-warning
+##.krhCookieBanner
+##.ks-cookies
+##.ksma-block-cookie-notice
+##.kt-cookies-bar
+##.kt-cookies-popup
+##.kt_cookie
+##.kth-toast--bottom
+##.kue-cookie-notification
+##.kuki-js
+##.kukiwrapx
+##.kv-ee-gdpr-banner
+##.kvk-cookie
+##.kvk-footer-body
+##.kvk-footer-warning
+##.kvk-onay
+##.kvkk-bottom
+##.kvkk-frame
+##.kvkkpop
+##.kvvk-cookie
+##.kw-slider__coockie-layer
+##.kwpcc-cookie-banner
+##.l-consent_banner
+##.l-cookie
+##.l-cookie-alert
+##.l-cookie-banner
+##.l-cookie-confirm
+##.l-cookie-consent-popup
+##.l-cookie-law
+##.l-cookie-notice-container
+##.l-cookie-policy
+##.l-cookie-pop
+##.l-cookie-popup
+##.l-cookieNotification
+##.l-cookiePopup
+##.l-cookieWrapper
+##.l-cookies
+##.l-cookies__banner
+##.l-disclaimer
+##.l-footer_cookieAlertBox
+##.l-gdpr-banner
+##.l-global-footer__cookie
+##.l-header-container__privacy-prompt
+##.l-modal-cookie
+##.l-page__cookies
+##.l-sticky-gf__accept
+##.l4w-cookies-bar
+##.lag-cookie-policy-wrapper
+##.lam-cookie-container
+##.lamium-cookie-consent
+##.landend-infobar-dark
+##.landing-cookies
+##.landing-cookiesbanner
+##.lang-cookie
+##.lannebo-cookiebot
+##.law_cookie
+##.law_cookies
+##.law_cookies_test_ACM
+##.laws-cookies
+##.layer--fixed-bottom[cookiebar]
+##.layer-cookie
+##.layer-cookies
+##.layer-cookies-wrapper:not(html):not(body)
+##.layerCookie
+##.layer_cookie
+##.layout-cookie-banner
+##.layoutFloating[is="basis-cookie"]
+##.layout__cookies-policy-notification
+##.layout__disclaimer
+##.layout__overlays__cookieNotice
+##.lazim-cookie-alert
+##.lb-cookie-banner-wrapper
+##.lbx--cookies
+##.lc-gdpr
+##.ld-cookie-notice
+##.lds-cookie-consent
+##.lds__privacy-policy
+##.left.udc-holder
+##.legal-acknowledgement:not(body):not(html)
+##.legal-alert-popup
+##.legal-banner-region
+##.legal-cookie
+##.legal-cookie-eu-hint
+##.legal-cookie-wrapper
+##.legal-cookiebar
+##.legal-info__alert-cookie
+##.legal-message-wrapper
+##.legalCookie
+##.legalUE
+##.legal_cookie_block
+##.legaladvice
+##.legalwarning
+##.lemon_cookie_window_outer_wrapper
+##.letus-use-cookies
+##.leyCookies
+##.lf-cookie-law-default
+##.lg-cookie
+##.lgcookieslaw-banner
+##.lgcookieslaw-overlay
+##.lgcookieslaw_banner
+##.lgcookieslaw_overlay
+##.lgi-bgcontainer-privacybanner
+##.lgi_privacybanner
+##.lgpd-aceite-container
+##.lgpd-all
+##.lgpd-banner
+##.lgpd-bar
+##.lgpd-bar-float-container
+##.lgpd-bar-wrapper
+##.lgpd-box
+##.lgpd-content
+##.lgpd-div
+##.lgpd-layer
+##.lgpd-message
+##.lgpd-modal
+##.lgpd-modal-content
+##.lgpd-notice
+##.lgpd-notice-wrap
+##.lgpd-notice__container
+##.lgpd-policy-compliance-main
+##.lgpd-section
+##.lgpd-wrapper
+##.lgpd_bar
+##.lgpd_cookie-overlay
+##.lgpd_wd_box
+##.liCookiePol
+##.lia-cookie-banner-alert
+##.lib-privacy-cookie-registry
+##.lightbox-backdrop-cookie-consent
+##.lilayout-header-cookiebar
+##.lista-cookies
+##.lite-cookie-consent
+##.litho-cookie-policy-wrapper
+##.ll_cookiebar_bottom
+##.ll_cookiebar_light
+##.lld-cookieconsentbanner
+##.lms-notice-wrapper
+##.lnd-Cookies_Wrapper
+##.loading_cookie_mainkuangjia
+##.login-cookie-message
+##.loi_cookie__wrapper
+##.loi_hamon
+##.loving-eu-cookies
+##.lower-cookie-banner
+##.lp-code > #cookie
+##.lp-cookie-approval
+##.lp-cookie-banner
+##.lp-cookie-consent
+##.lp-cookie-warning
+##.lp-widget-cookie-banner
+##.lp__cookie_tooltip
+##.lpsCookieInfo
+##.lsConsent
+##.luana-module-cookie-policy
+##.lucid-cookie-compliance
+##.lumis-service-privacyterm
+##.lupcom_cookie_switch
+##.lus-cookie
+##.lus-cookie-pre
+##.luxar_disclaimer_container
+##.lvm-compliance-confirm-alert
+##.lwpcngNotice
+##.lxb_cm-message
+##.m--cookie-consent
+##.m-048-cookie-notification-wrapper
+##.m-Cookie
+##.m-alert-banner--cookie
+##.m-bar--cookie
+##.m-basic-cookie
+##.m-basic-cookie-refresh
+##.m-cookie
+##.m-cookie-alert
+##.m-cookie-alert-1
+##.m-cookie-banner
+##.m-cookie-bar
+##.m-cookie-confirm
+##.m-cookie-consent
+##.m-cookie-disclaimer
+##.m-cookie-info
+##.m-cookie-intro
+##.m-cookie-notice
+##.m-cookie-notification
+##.m-cookie-popup
+##.m-cookieBar
+##.m-cookieInfo
+##.m-cookiePolicy
+##.m-cookie_banner
+##.m-cookiecontrol
+##.m-cookiehint
+##.m-cookielayer
+##.m-cookiepolicy
+##.m-cookies
+##.m-cookies-alert
+##.m-cookies-bar
+##.m-cookies__wrapper
+##.m-gdpr-alert-banner
+##.m-global-message--cookie
+##.m-header-cookie-notice
+##.m-heads-up-banner
+##.m-message-banner
+##.m-notice_PrivacyPolicy
+##.m-notification-layer
+##.m-popup__cookies
+##.m-privacy
+##.m-privacy-consent
+##.m-privacy-lightbox
+##.m-privacy-options
+##.m-react-ccm__settings-layer
+##.m-stripe--cookie
+##.m-tracking-banner
+##.m159-cookies
+##.m5-cookie
+##.m6Cookies_overlay
+##.mCCF--bottom
+##.mSuiteCookieFade
+##.m_cookie
+##.m_cookie-disclaimer
+##.m_cookie_notice
+##.m_cookies
+##.m_privacy_statement
+##.ma-CookiesDirective_Container
+##.ma_cookie_popover
+##.mac-header-cookie-banner-section
+##.mad_cookie_banner
+##.magenio_alertcookie
+##.magnus-cookie
+##.main-cookie-alert
+##.main-cookie-title
+##.main-cookie-warning
+##.main-cookies
+##.main-cookies-warning
+##.main-footer-cookie-info
+##.main-privacy-popup
+##.mainCookieAlerta
+##.mainCookiePopup
+##.mainCookiesPopUp
+##.mainPrivacyBar
+##.mainPrivacyDiv
+##.mainPrivacyModal
+##.managecookie
+##.managerCookies
+##.mantinga-cookie-notice
+##.marco-civil-banner
+##.marked-cookie-consent__modal
+##.maserati-cookie
+##.maskRodo
+##.masque_cookie_wall
+##.mast-c-banners-cookie
+##.matomo_banner
+##.matriz2-cookie-notification-position-bottom
+##.max_wp_cookie_notification
+##.mb-content-cookie
+##.mb-ol-privacy-box-footer
+##.mb_cookie
+##.mb_informativa_cookies
+##.mbt-cookie__notice
+##.mc-consents-wrapper
+##.mcApi_cookies
+##.mcd-cookie-manager-layer
+##.mcl-cookie-bar
+##.mcq-cookie-banner
+##.md-consent
+##.md-cookie
+##.md-cookie-blocker
+##.md-cookie-default
+##.md-cookie-warning
+##.md-cookies-advice
+##.mdstrCookieLocation
+##.mdx-std-cookie-popup
+##.med-cookies
+##.melindres-banner
+##.melis-gdpr-banner-container
+##.mensaje-cookie
+##.mentionCookie
+##.menu-con-cookies
+##.menuCookie
+##.message--cnil
+##.message--cookie
+##.message--cookie-warning
+##.message--cookies
+##.message-cockies
+##.message-cookie
+##.message-cookie-banner
+##.message-cookies
+##.message-demande-cookies
+##.message-demande-cookies-wrapper
+##.message-euwarning
+##.message-modal-cookie
+##.message-notification_ct
+##.message-overlay--cookie
+##.message-panel[data-notice-id="cookieNotice"]
+##.message-we-use-cookies
+##.message[data-cc-modal]
+##.message_cookie
+##.messages--cookie
+##.messages_cookies
+##.messaggio_cookie
+##.messaggio_cookies
+##.mf-cookie-banner
+##.mf-cookie-model
+##.mg-cookie
+##.mgdpr-popup
+##.mgv-cookies-banner
+##.mgxCookieConsent
+##.mh5_CookieNotice
+##.mi-cookie-banner
+##.mi-gdpr
+##.mid-cookies
+##.mihoyo-cookie-tips
+##.mikit_bandeau_cookies
+##.milibooCookie
+##.min-cookie-container
+##.min-cookiebanner
+##.minPppWrp_cookie
+##.minPpp_cookie
+##.miniConsent
+##.mini_cookie_stack
+##.mipro-cookie-notice
+##.misc-popup-cookie
+##.mj-box-cookie-alert
+##.mj-consent__banner
+##.mj-gdpr-consent-banner
+##.mj-js-container-cookie-alert
+##.mj_gdpr_banner
+##.mjs-cookie-notice
+##.mk-cookie-notification
+##.mk-cookieBox
+##.mkCookieBanner
+##.mk_cookie_policy
+##.mkocookies
+##.mkt_consent_manager_wrapper
+##.ml-cookie-wrap
+##.mla-gdpr-light
+##.mm-cookie-banner
+##.mm-cookies
+##.mm-modal-accept-cookies
+##.mm-page > #cookie
+##.mm-page > #cookiehinweis
+##.mm-page > .cookie-settings
+##.mm-page > .cookies
+##.mmCookieInfoBoxUser
+##.mmCookies
+##.mm_cookie_layer
+##.mmcookiepref-plugin
+##.mms-cookielayer
+##.mmtools-cookie-bar
+##.mmui-cookie-disclaimer
+##.mnd-cookie-bar
+##.mnd-cookies
+##.mo-com-cookies
+##.mo-sitePriv
+##.mobrog-v1-cm-cookie-consent-banner
+##.moc-cookie-container
+##.mod-CookieMessage
+##.mod-aw_cookieabfrage
+##.mod-cookie
+##.mod-cookie-alert
+##.mod-cookie-bar
+##.mod-cookie-consent
+##.mod-cookie-consent__dialog
+##.mod-cookie-disclaimer
+##.mod-cookie-law-consent
+##.mod-cookie-layer
+##.mod-cookie-notice
+##.mod-cookie-warning
+##.mod-cookiebar
+##.mod-cookielayer
+##.mod-cookiepolicy
+##.mod-cookies:not(body):not(html)
+##.mod-cookiewarning
+##.mod-disclaimer
+##.mod-lgpd
+##.mod-lgpd-cabecalho
+##.mod-overlay[data-topic="consent"]
+##.mod-privacypolicy
+##.mod-website-cookies
+##.modCookieBar
+##.modCookiesConsent
+##.modFinancialCookies
+##.modUt_cookie_privacy_1
+##.mod_cms_cookie_bar
+##.mod_cookie-bar
+##.mod_cookie_bar
+##.mod_cookie_notification
+##.mod_cookie_policy
+##.mod_cookiebar_optin
+##.mod_cookiebar_optin_slim
+##.mod_cookieconfirmation
+##.mod_cookienotification
+##.mod_ixcnb_cookie_notice
+##.mod_ka_contao_cookies_banner
+##.mod_privacy_optin
+##.mod_privacy_optin_medium
+##.mod_privacy_optin_slim
+##.modal--cookies-backdrop
+##.modal-accept-cookies
+##.modal-aviso-cookie
+##.modal-bannercookies
+##.modal-box-cookie-policy-message
+##.modal-cc-cookies
+##.modal-content-cookie-message
+##.modal-coockie
+##.modal-cookie-backdrop
+##.modal-cookie-bg
+##.modal-cookie-body
+##.modal-cookie_block
+##.modal-cookies-color
+##.modal-cookies-window
+##.modal-dialogCookies
+##.modal-enter-done.rgpd-modal
+##.modal-ley-cookies
+##.modal-lgpd
+##.modal-privacy_active
+##.modal-strip[data-cookie]
+##.modal-window-cookies
+##.modal.sm_optin_bg
+##.modal.udc-bar-holder
+##.modal.udc-ovr
+##.modal__content--cookies
+##.modal__cookie--message
+##.modal__cookies
+##.modal_lgpd
+##.modal_mask.cookies
+##.modaleCookies
+##.mode-cookie-tip
+##.model-cookies
+##.module--cookie
+##.module-alert-cookie
+##.module-cookie
+##.module-cookie-banner
+##.module-cookie-bar
+##.module-cookie-info
+##.module-cookie-layer
+##.module-cookie-note
+##.module-cookieinfo
+##.module-cookies
+##.module-cookies-advice
+##.module-cookies-notification
+##.module-cookies-wrapper
+##.module-gdpr-acceptance
+##.module-notification--cookies
+##.module-special-cookie-banner
+##.moduleCookiesBox
+##.module__cookiebanner
+##.module_consent__main
+##.module_cookie-notice
+##.module_cookie_consent
+##.module_messages_cookies
+##.modules--cookiebar
+##.modulesden-cookies-bar
+##.moduletable-privacy-popup
+##.modulo-accettazione-cookies
+##.moduloCookieAlert
+##.mol-ads-cmp
+##.mola-cookie-notice
+##.molecule-cookiemessage
+##.monk-cookies
+##.moon2-statisticsOptBox
+##.moove-gdpr-align-center
+##.moove-gdpr-dark-scheme
+##.moove-gdpr-light-scheme
+##.moove_gdpr_cookie_info_bar
+##.moove_gdpr_cookie_modal_open
+##.mostrarCapacookies
+##.moto-cookie-notification
+##.mp-cookie-banner
+##.mp-cookie-placeholder
+##.mp-cookies
+##.mp-cookies-inform-bar
+##.mp-show-cookies
+##.mpsp-lgpd-banner
+##.mpt-cookie-banner
+##.mrpix--cookie-permission--overhead-container
+##.mrtn-cookie-policy-noty
+##.ms-cookie-compliance
+##.ms-cookie-ok
+##.msCookieBanner
+##.msg-cookie
+##.msg-cookies
+##.msg-tray--cookie
+##.msg.cookies
+##.msgAvisoCookies
+##.msg_cookie
+##.msg_cookies
+##.msgbox-CookieConsent
+##.msgcookie
+##.msgwrapper.gdpr
+##.msit-cookie-information-wrapper
+##.msl2CookieNotice
+##.msn-cookies
+##.msr-cookie-notification
+##.mst-gdpr__cookie-bar-wrapper
+##.mt-SharedCookieLayer
+##.mt-cc-bnnr
+##.mt-cookie-consent-bar
+##.mtcookie--visible
+##.mtde-rgpd-window
+##.mtvcookienotificationscontainer
+##.mu-cookie-box
+##.mu_cookie
+##.mu_cookie_background
+##.mui-cookie-banner
+##.mui-js-cookie-banner
+##.muniweb-cookies
+##.mup-cookie
+##.must_show_cookie
+##.mv-cookies
+##.mv-cookies-wrapper
+##.mvh-gdpr-banner
+##.mw-cookiewarning-container
+##.mw-dsgvo-cookie-slidebar-fixed-bg_01
+##.mw-dsgvo-cookie-slidebar_01
+##.mw-dsgvo-overlay
+##.mw-dsgvo-overlay-background
+##.mw-notification-tag-cookiePolicy
+##.mw_cookie_bar
+##.mw_cookie_info_bar
+##.mxd-cookie-bar
+##.mxd-new-cookie-bar
+##.mxm-cookie-alert
+##.mxu-cookie-consent
+##.my-cookie__wrapper
+##.my-cookies
+##.myCookieBar
+##.my_cookielayer_overlay
+##.mycmpAlertBigBottom
+##.mycookies
+##.myshp_cookies_warning
+##.mz-cookies-policy-bar
+##.mz_cookieConsent
+##.n--help_cookie-banner
+##.n-cookie-notice
+##.n-cookies-container
+##.n-cookies-info
+##.n040-cookie-alert
+##.naf-cookies-popup
+##.nagmsg_cookie
+##.namespace-cookie-policy
+##.nanobar-cookie-cog
+##.narizeni-eu-cookies
+##.nasa-cookie-notice-container
+##.natCookieInfo
+##.nav-cookie-disclaimer
+##.nav-new-cookie-disclaimer
+##.nav__cookies
+##.nav_cookies
+##.navbar-cookie
+##.navbar-cookies
+##.navbar-fixed-bottom.cookies
+##.navbar-gdpr
+##.navbar-privacy
+##.navigation-cookiebbanner
+##.navigation-notification__cookiebar
+##.navigation__cookies
+##.naylor-privacy-banner
+##.nazar-cookies-message
+##.nb--cookiepopup
+##.nb-cookie
+##.nbd-cookie-wrapper
+##.nbn-cookie-info
+##.nbsCookieNotice
+##.nca-cookiesaccept-line
+##.ncgWeAreUsingCookies
+##.ncmp__banner
+##.ncmp__normalise
+##.ncoi---behind
+##.nd-cookieBar
+##.neCookiesMessage
+##.nebotheme-cookie-bar
+##.ned-modal-cookie-banner
+##.nedfinity-cookie-consent-notification
+##.neo-footer__cookieBar
+##.neon-cookiebar
+##.new-cookie
+##.new-cookie-banner
+##.new-cookie-rules
+##.new-cookie-wrapper
+##.new-cookies-info
+##.new-eu-cookies
+##.newCnilBanner
+##.new_cookie_info
+##.newsletter-notification--cookies
+##.next-cookie-banner
+##.next-cookie-banner__wrapper
+##.next-cookieholder
+##.nexus-cookie-banner
+##.nf-cookies
+##.nf-js-cookiebox
+##.nf-procookie-bottom-bar
+##.nf-procookie-wrapper
+##.ng-cookie-footer
+##.ng-isolate-scope[data-cookie-message]
+##.ng-scope[data-cookie-policy-directive]
+##.ng-scope[data-ng-controller="CookieSignController"]
+##.ng-scope[data-ng-show="showCookieBanner"]
+##.ng-scope[ng-controller="CookieCtrl"]
+##.ng-scope[ng-controller="CookiesAcceptCtrl"]
+##.ng-scope[ng-controller="CookiesConsentCtrl"]
+##.ng-scope[ng-controller="cookie"]
+##.ng-scope[ng-controller="cookieCtrl"]
+##.ng-scope[ng-controller="cookieLawCtrl"]
+##.ng-scope[ng-if="cookieWarning"]
+##.ng-scope[ng-if="showCookieInfo"]
+##.ng-star-inserted.cookie
+##.ng-star-inserted.cookies
+##.ngs-cookie-bar
+##.nh-cookie
+##.ni-cookieConsent
+##.nitea-cookie-info-container
+##.njt-gdpr
+##.njt-gdpr-full_width
+##.njt-gdpr-popup
+##.nk-cookie-alert
+##.nk-cookie-banner
+##.nkmcookiealert
+##.nl-cookie-bar
+##.nl-cookiepolicy
+##.nl_cookies
+##.nm-cookiepolicy
+##.nmCookieNotifier
+##.nnp-app-cookie-info
+##.no--cookie
+##.no-cookie-consent-warning
+##.no-cookie-wrapper
+##.no-cookies:not(body):not(html)
+##.no-eika-cookieconsent
+##.noat-cookie-consent__banner
+##.noe_cookie_cnil
+##.nokia-cookies-wrapper
+##.nonmodal--cookie
+##.normativa-cookies
+##.nors_cookies_notice
+##.not-accepted.cookie
+##.note_cookie
+##.notice--cookies-policy
+##.notice--int-cookies
+##.notice-bar
+##.notice-block.cookies
+##.notice-cookie
+##.notice-cookies-horizontal
+##.notice-gdpr
+##.notice-tou
+##.noticeCookiesContent
+##.noticeCookiesUse
+##.notice_cookies
+##.notice_notice_cookies
+##.notif-bar
+##.notif-cookie__wrapper
+##.notifCookie
+##.notif_cookie_panel
+##.notifica_cookiebar
+##.notificacao-estatica
+##.notificacion-cookies
+##.notification--CNIL
+##.notification--GDPR
+##.notification--cookie
+##.notification--cookie-alert
+##.notification--cookies
+##.notification-banner--cookie
+##.notification-bar--cookie
+##.notification-bar[data-bar-type="gdpr"]
+##.notification-bar[data-id="cookiedisclaimer"]
+##.notification-base__cookies
+##.notification-container.cookie
+##.notification-cookie
+##.notification-cookie-policy
+##.notification-cookie__wrapper
+##.notification-cookiehint
+##.notification-cookies
+##.notification-gdpr
+##.notification-layout[ng-class="cookie-bar"]
+##.notification-widget.cookie
+##.notification-wrapper-bottom
+##.notification.cookie
+##.notification.cookie-consent
+##.notification.cookies:not(body):not(html)
+##.notification.show-cookie
+##.notificationBar[data-notification-cookiepolicy]
+##.notificationPanel--cookieBar
+##.notification[data-notification="accept-cookies"]
+##.notification[data-notification="coockieConsent"]
+##.notification__box--persistentcookie
+##.notification__content-cookie
+##.notification__cookies
+##.notification__item--cookie
+##.notification__message.cookies
+##.notification__wrapper[data-id="cookies"]
+##.notification_box.cookie
+##.notification_cookie
+##.notification_wrap[data-cookie-notification]
+##.notifications-bar__info-message--cookie
+##.notify--cookie
+##.notify-banner[ir-notify]
+##.notify-cookie
+##.notify-cookies
+##.notify-cookies-policy-container
+##.notifyCookie
+##.notifyCookieInner
+##.notifyCookiesPanel
+##.notify_cookie-wrapper
+##.notify_cookie-wrapper-bottom
+##.notifyjs-cookiebar-base
+##.notifyjs-notify-cookies-info
+##.noty_cookie
+##.noun-cookie-container
+##.np-cookie-notice
+##.np-gdpr-modal
+##.np_DialogConsent
+##.npn-cookie
+##.npo_cc_regular
+##.nq-c-CookieBar
+##.nq-c-RgpdBar
+##.nq-c-rgpdBar
+##.nr-cookie-accept
+##.nr-cookie-notification
+##.nr-cookie-notification-component
+##.nr-cookie-notification__wall
+##.nr-cookie-notification__wrapper
+##.nr-privacy-modal-box-v2
+##.nrcookie
+##.nrf-disclaimer
+##.nrg-cookie-popup
+##.ns-cookie-consent
+##.ns-cookie-privacy-wrapper
+##.ns-cookies
+##.ns-cookies-accept
+##.ns-type-cookies
+##.nsg--cookies.nsg--notification
+##.nsk-cookie-popup
+##.nt-footer-cookie-statement
+##.ntfCookie
+##.nts-notification-cookie
+##.nu-cookies-alert-container
+##.nux-signup-cookie-notice-content
+##.nv-cookie-notification
+##.nvcookies
+##.nvcookies-outer
+##.nvt_cookienotice
+##.nvx-cookies
+##.nvx-cookies__wrapper
+##.nwjs_cookie_consent
+##.nwm-cookies
+##.nx-cookie-policy-popup
+##.nxm2CookieBar
+##.nytc---cookiebanner---container
+##.o-CookiesBanner-container
+##.o-cookie
+##.o-cookie-banner
+##.o-cookie-bar
+##.o-cookie-layer
+##.o-cookie-message
+##.o-cookie-overlay
+##.o-cookieOk
+##.o-cookielaw
+##.o-cookielayer
+##.o-cookies
+##.o-cookies-message
+##.o-cookies-notice-widget__container
+##.o-cookies-notice__container
+##.o-cookies__row
+##.o-core-cookie-notification
+##.o-dsgvo-wrapper
+##.o2x-cookiebar-wrapper
+##.o7cookie-info-prompt-wrap
+##.oCookie
+##.o_cookies_discrete
+##.oaveacookieconsent
+##.oax-cookie-msg
+##.ob-cookies
+##.ob-cookies-content
+##.ob-eu-cookie-consent
+##.ob-public-widget-cookies
+##.obfx-cookie-bar-container
+##.obs_cnil
+##.oc-disclaimerMessage
+##.oc_cb_wrapper
+##.occlss-alert--cookiepopup
+##.ocm-container--banner
+##.octo-cookie-consent
+##.odav-cookie-consent
+##.oddcookie
+##.oe-cookies-law
+##.oh_cookie_notice_wrapper
+##.oi-ccpa-notice
+##.oi-ccpa-toggle
+##.ojc_consent
+##.okCookiePanel
+##.okookie
+##.old-cookie
+##.olw-cookie
+##.oly-web-ui_cookie-container
+##.om-cookie
+##.om-cookie-agreement
+##.omc-cookie-consent-banner-popup
+##.omnium_cookies_popup_wrapper
+##.on.cookie
+##.on.rgpd
+##.once-upon-ga-consent
+##.one-alert--cookie
+##.one-cookie-banner
+##.oneTrustLayer
+##.oneindia-cookie-notification
+##.onepager_general_cookiepolicy
+##.onetrust-pc-dark-filter
+##.online-cookie-consent
+##.onp-cookie-consent-container
+##.ons-cookie
+##.ont-cookies
+##.ont-cookies-wrapper
+##.oo-cookie-notice
+##.oon-ds-banner
+##.opacity_layer_consent
+##.opc-cookie-message
+##.opc-manager-cookie
+##.open.cookies
+##.open.rgpd
+##.opl-cookie-control
+##.opt-action-bar
+##.optanon-alert-box-wrapper
+##.optanon-show-settings
+##.optanon-toggle-display
+##.optin-stats
+##.optinCookie
+##.optomaCookieWrap
+##.or-cookie__banner
+##.orakelAdvice
+##.orbis-cookie-notice-form
+##.org-cookie-mini
+##.ort-cookie-banner
+##.osano-cm-window
+##.oscookies
+##.osw-privacy
+##.ot-cookie-consent
+##.ot-sdk-show-settings
+##.ot_cookie_settings_btn
+##.ou-cookies-bar
+##.outer-privacy-top-navigationBar
+##.outerCookieBar
+##.ovcookie
+##.overlay--cookie
+##.overlay-cookie
+##.overlay-cookie-block
+##.overlay-cookies
+##.overlay-message--cookies
+##.overlayCookie
+##.overlayCookies
+##.overlay__cookie
+##.overlay__shadow--cookie-consent
+##.overlay_cookiebanner
+##.overlay_pri
+##.overlayblackCookie
+##.overlaycookie
+##.overlaycookieconsent
+##.ow-cookie-wrapp
+##.ow_cookie
+##.owl_cookie_information_js
+##.p-coockie
+##.p-cookie-consent
+##.p-cookie-layer
+##.p-cookie-prompt
+##.p-cookieBox
+##.p-cookiebar
+##.p-cookies
+##.p-fixed.rgpd
+##.p-gdpr
+##.p-gdpr-modal
+##.p-max-width_cookie
+##.p-notification-bar-cookieconsent
+##.p-top_cookie-agreement
+##.p_cookie
+##.pabk_cookie
+##.padding.cookies
+##.padding_gdpr
+##.page > .cookie
+##.page > .cookies
+##.page--cookie
+##.page-banner__cookie
+##.page-consent
+##.page-cookie
+##.page-cookie-banner
+##.page-cookie-warn
+##.page-cookies
+##.page-cookies-info
+##.page-cookies-overlay
+##.page-dialog-dsgvo
+##.page-header__cookie
+##.page-header__cookie-notifyer
+##.page-privacy__dialog_banner
+##.page-warning_cookies
+##.page-wrap--cookie-permission
+##.pageCookies
+##.pageFooter-acceptCookies
+##.pageHCookie
+##.page__cookie
+##.page__cookie-disclaimer
+##.page__cookies
+##.page__disclaimer--cookies
+##.page__gdpr
+##.page__survey-cookie-info
+##.pageinfo-cookie
+##.pane-cookie-content-type
+##.pane-cookie-disclaimer
+##.panel-cookie
+##.panel-cookies
+##.panel_cookie
+##.panta-js-cookieNotificationBar
+##.paper-client-privacy-agreement
+##.par-privacy-policy-info
+##.parent-box-cookies
+##.paris-cookies-banner
+##.park-cookiebar
+##.park-snackbar-cookies
+##.part-cookies
+##.partial-cookie
+##.pasek_cookie
+##.pasw2015cookies-cookie-pop
+##.paveCookies
+##.pb-CookiesConsent
+##.pb-app__accept-cookie-banner
+##.pb-cookie-banner
+##.pb-cookie-container
+##.pb-cookies
+##.pc-cookie-accept
+##.pc-cookie-bar
+##.pc-cookie-consent
+##.pcf-cookie
+##.pci-global-cookies
+##.pcookie
+##.pcookies
+##.pcy_cookie_notice
+##.pdpa-cookie
+##.pdx-cookie-container
+##.pea_cook_bottomright
+##.pea_cook_more_info_popover
+##.pea_cook_wrapper
+##.penci-gprd-law
+##.penci-wrap-gprd-law
+##.per-cookies-and-terms
+##.personaCookie
+##.personal-data-protection-bar
+##.personalDataConfirmWrapper
+##.personalizationMessageWrapper
+##.pescookies
+##.petra-cookie-info-container
+##.pf-cookie-directive
+##.pfs-cookies-bar
+##.pfx-cookie-consent
+##.pg-cookie
+##.ph-cookie-compliance
+##.ph-cookie-info
+##.ph-cookie-popup-v2-view2-default
+##.ph-cookies
+##.philadelphia-optin-visible
+##.philoro_cookies--popover
+##.phpro-cookie-notice
+##.phs-cookie-popup-area
+##.phunk-cookie-wrapper
+##.pi-cookie-message
+##.pi-cookie-notice
+##.pie_cookie
+##.pied_cnil
+##.pitconsent-banner
+##.piwik-notice-container
+##.pix-cookie-banner
+##.pj-ui-cookie-banner
+##.pko-cookie-rodo
+##.pko-cookie-rodo-overlay
+##.pl-cookie-popup
+##.pl-cookies
+##.pl-cookies-cta
+##.pl-cookies-cta-contain
+##.plate-cookies
+##.platform--cookies--container
+##.plazma-cookie-bar
+##.plazma-cookie-bar--active
+##.plg_system_eprivacy_module
+##.plr_cookie_warning
+##.plugin-cookieconsent
+##.plugin_cookie
+##.pm-cookie
+##.pm-gdpr
+##.pmc-cookie-consent-block
+##.pmw--cookies-cookie-button
+##.pn-cookies-banner
+##.pn_cookieconsent
+##.pnl-cookie
+##.pnlCookiemelding
+##.pnotify-cookies
+##.pny-cookie-consent
+##.pofo-cookie-policy-wrapper
+##.polcookies
+##.policy-accept-bar
+##.policy-alert
+##.policy-banner
+##.policy-bar
+##.policy-bottom
+##.policy-box
+##.policy-cookie
+##.policy-cookies
+##.policy-message.cookie
+##.policy-notification--privacy-policy
+##.policy-warning-banner
+##.policy-window
+##.policy.cookie
+##.policyChk
+##.policyMessage
+##.policy_footer
+##.policy_notification
+##.politic__cookie
+##.politica-cookies
+##.politica-cookies-bar
+##.politica-cookies-box
+##.politica-cookies-cont
+##.politica-cookies-container
+##.politica-de-cookies
+##.politica-privacidade
+##.politica-privacidade-lgpd
+##.politicaCookies
+##.politicaRewards
+##.politica_cookies
+##.politicacookies
+##.politics_cookie
+##.politique_cookie
+##.polityka-cookie
+##.polityka_ciastek
+##.polityka_prywatnosci
+##.polityka_prywatnosciWrapper
+##.pop-cnil
+##.pop-cookie
+##.pop-cookiebox
+##.pop-cookiepolicy
+##.pop-cookies
+##.pop-up-cookie
+##.pop-up-cookie-alert-block
+##.pop-up-cookies
+##.pop_cookies
+##.pop_up_cookie
+##.popgdpr
+##.popin-cnil
+##.popin-cookies
+##.popin-cookies-modal
+##.popinCookie
+##.popinCookies
+##.popover-cookie
+##.popover-md.cookie
+##.popup--cookie
+##.popup--cookie-handling
+##.popup--cookies__wrapper
+##.popup--policy-absolutely
+##.popup-alert-notice
+##.popup-allow-cookies
+##.popup-aviso-cookie
+##.popup-aviso-cookies
+##.popup-choose-cookies
+##.popup-cookie--on
+##.popup-cookie-2018
+##.popup-cookie-background
+##.popup-cookie-banner
+##.popup-cookie-notice-wrap
+##.popup-cookie-policy
+##.popup-cookie-show
+##.popup-cookie-warning
+##.popup-cookie:not(body)
+##.popup-cookie__box
+##.popup-cookie__shadow
+##.popup-cookieconsent-down
+##.popup-cookies
+##.popup-cookies-section
+##.popup-gdpr
+##.popup-message-cookies
+##.popup-message-cookies-is-visible
+##.popup-message.cookie
+##.popup-overlay-cookies
+##.popup-politica
+##.popup-rodo
+##.popup-screen-rodo
+##.popup.cookie-consent
+##.popupBannerWrapper
+##.popupCookie
+##.popupCookieAccept
+##.popupCookies
+##.popup[data-popup="popup-cookie"]
+##.popup__cookie
+##.popup__cookies
+##.popup_block_Cookies
+##.popup_block_cookie
+##.popup_cookie
+##.popup_cookie_adsense
+##.popup_cookie_position_left
+##.popup_cookies
+##.popup_cookies_wrap
+##.popup_policies
+##.popupcoockie
+##.popupcookie
+##.popupform-cookies
+##.portal-youAreHere-cookie-wrap
+##.portlet_cookie_policy
+##.postel-cookies
+##.poswp-databar
+##.povoleniCookies
+##.pp-accept-cookies-block
+##.pp-cookie
+##.pp-cookie-banner
+##.pp-cookie-warning
+##.pp-cookie__content
+##.pp-cookies-notice
+##.ppa-notice
+##.ppg-cookies
+##.ppms_cm_consent_bar
+##.ppr_priv_document_cookie_banner
+##.pps-privacy-policy-strip
+##.pr-cookie-notice
+##.pr-cookie-overlay
+##.pr-cookie-policy
+##.pre-head__cookie-info
+##.pre-header-cookie-notice
+##.preModalCookie
+##.precokieinner
+##.preventAcceptance
+##.primo-cookie-compliance-placeholder
+##.privacy-alert
+##.privacy-and-cookies
+##.privacy-banner
+##.privacy-banner-wrapper
+##.privacy-bar
+##.privacy-bar-container
+##.privacy-bar__container
+##.privacy-blocking-overlay
+##.privacy-center-cta
+##.privacy-concerns
+##.privacy-consent-banner__overlay
+##.privacy-consent-info-cta
+##.privacy-control-badge
+##.privacy-controls-banner
+##.privacy-cookie
+##.privacy-cookie-alert
+##.privacy-cookie-banner
+##.privacy-cookie-bar
+##.privacy-cookies
+##.privacy-disclaimer
+##.privacy-disclaimer-banner
+##.privacy-footer-block
+##.privacy-hint
+##.privacy-info-container
+##.privacy-info-message
+##.privacy-infos
+##.privacy-init-wall
+##.privacy-manager__banner
+##.privacy-manager__overlay
+##.privacy-message-overlay
+##.privacy-notice--simple
+##.privacy-notice-background
+##.privacy-notice-inner
+##.privacy-notification-container
+##.privacy-policies-banner
+##.privacy-policy-banner
+##.privacy-policy-bar
+##.privacy-policy-consent
+##.privacy-policy-cookie
+##.privacy-policy-cookies
+##.privacy-policy-cookies-informer
+##.privacy-policy-message
+##.privacy-policy-modal
+##.privacy-policy-notice
+##.privacy-policy-notice-bar
+##.privacy-policy-popup
+##.privacy-policy-prompt--modal
+##.privacy-policy-toast
+##.privacy-policyis-sticky
+##.privacy-popup
+##.privacy-popup-overlay
+##.privacy-popup-wrapper
+##.privacy-prompt-wrapper
+##.privacy-shield-banner
+##.privacy-terms-cookies
+##.privacy-toast
+##.privacy-update
+##.privacy-warning
+##.privacyAlertBox
+##.privacyBanner
+##.privacyBar
+##.privacyCookie
+##.privacyCookieBox
+##.privacyLawAlert
+##.privacyMelding
+##.privacyNotice
+##.privacyNotification
+##.privacyPolicyBanner
+##.privacyPolicyBar
+##.privacyPolicyBlk
+##.privacyPolicyPopup
+##.privacyPolicyWarn
+##.privacySettingsPopup
+##.privacyTop
+##.privacy__popup
+##.privacy_banner
+##.privacy_consent
+##.privacy_cookies_policy
+##.privacy_div
+##.privacy_law_bg
+##.privacy_notice
+##.privacy_notification
+##.privacy_policy-info
+##.privacy_policy.alert
+##.privacy_policy.alert-dismissible
+##.privacy_policy.alert-warning
+##.privacy_policy__container
+##.privacy_policy_banner
+##.privacy_policy_bg
+##.privacy_policy_botm
+##.privacy_policy_info
+##.privacy_policy_message_box
+##.privacy_policy_pop
+##.privacy_prompt_bottom
+##.privacy_protection_cookie_banner
+##.privacy_settings_interface.popup
+##.privacy_warning
+##.privacybanner
+##.privacybanner_notice
+##.privacycookie
+##.privacycookiebanner
+##.privacyhint
+##.privacyinfo
+##.privacyouterwrapper
+##.privacypolicies-com---nb
+##.privacypolicies-com---nb-interstitial-overlay
+##.privacypolicy-accept
+##.privacypolicymessagebox_header
+##.privacypolicystripe
+##.privacysettings__banner
+##.privacywall-banner[data-is-visible]
+##.privacywire-wrapper
+##.privasypolicy-info
+##.private-cookies-modal
+##.privatePolicy
+##.pro_cookie-layer-ng
+##.proko-cookie-consent
+##.promoAlert-cookiepops
+##.prompt-cookielaw
+##.prompt_cookies
+##.propeller-cookieconsent
+##.protectCookieBanner
+##.ps-Cookies
+##.ps-cookies
+##.psg-cookie
+##.pt-cookie-bar
+##.public_legal_cookies
+##.puppet-cookie-banner
+##.pure-cookies-notice-container
+##.pure-cookies-notice-wrapper
+##.purple-cookie-info
+##.push-cnil
+##.pusherpanel-cookienotice
+##.puu-cookie
+##.pv-cookies
+##.pw-cookie-consent
+##.pw-cookie-consent-v2
+##.pw-cookie-consent-v2-backdrop
+##.pw-cookie-window
+##.pw_consent_messagediv
+##.pw_cookies
+##.pwd-cookie-consent-customize
+##.pwebbox-plugin-cookie_policy
+##.pws_cookie_bar
+##.pxl_cookie_bar
+##.py-1.cookie
+##.py-3.rgpd
+##.py-4.cookie
+##.pz-disclaimer--cookie
+##.q-legal-notification
+##.q-notification[class*="gdpr"]
+##.q-silent-consent
+##.q_cookies
+##.qa-alert--cookies
+##.qa-cookie-notice
+##.qa-snackbar-ccpa
+##.qb-cookielaw-bar
+##.qc-cmp-showing
+##.qc-cmp-ui-container
+##.qd-cookie-popup
+##.qg-consent
+##.qni-cookmsg
+##.qp-cookies-alert
+##.qt-cookie-consent-box-wrapper
+##.quick-cookie-bar
+##.r-cookie
+##.r-cookie-bar
+##.r-cookie-footer
+##.r-cookies
+##.r-gdpr-cookies
+##.r-gdpr-popup
+##.radioplayer-anno
+##.radioplayer-cookie-consent
+##.radish-cookie-bar
+##.radish-rcc-bar
+##.rah-cookie-consent
+##.rank-cookie-bar
+##.rasthaber-cookie
+##.rb-accept-cookies
+##.rb-cookie
+##.rb-cookie-backdrop
+##.rb-cookie-disclaimer
+##.rb-cookingalert
+##.rc-cookie-banner
+##.rcw-c-cookiedisclaimer
+##.rd__cookie-bar
+##.rdgdprao-cookie-banner
+##.rdm-daac-notice-template
+##.react--module__cookies
+##.react-cookie-banner
+##.react-cookie-gdpr-blocker
+##.react-cookie-gdpr-dialog
+##.react-cookie-law-dialog
+##.react-navi-ea-cookie-disclaimer
+##.react-reveal[class*="cookie-banner"]
+##.readcookie
+##.rectangleCookies
+##.recurly-gdpr
+##.redhat-cookie-banner
+##.region-cookie-ban
+##.region-cookiemelding
+##.region-disclaimer-component
+##.region-disclaimer[data-cookie_name="cookiedisclaimer"]
+##.region-gdpr
+##.region-rodo-info
+##.regional-cookie-warning
+##.requestCookies
+##.resCookiecon-wrapper
+##.reshare_cookiewarning
+##.responsive-app__cookies
+##.responsiveFooterBarContent
+##.resultCookie
+##.retail-cookie-layer
+##.reveal-modal-bg-cookie
+##.reveal-modal-cookie
+##.reveal-modal[id*="cookie"]
+##.rey-cookieNotice
+##.rgpd-alert
+##.rgpd-banner
+##.rgpd-bar
+##.rgpd-block
+##.rgpd-blockage
+##.rgpd-consent
+##.rgpd-container
+##.rgpd-cookie
+##.rgpd-cookiebar
+##.rgpd-cookies
+##.rgpd-cookies-banner
+##.rgpd-cookies-toolbox
+##.rgpd-data-control-banner
+##.rgpd-encart
+##.rgpd-fixed-bar
+##.rgpd-footer
+##.rgpd-general-box
+##.rgpd-info_bar
+##.rgpd-inner
+##.rgpd-layer
+##.rgpd-navbar
+##.rgpd-notice
+##.rgpd-notification
+##.rgpd-popin
+##.rgpd-popup
+##.rgpd-wrapper
+##.rgpd.view
+##.rgpdBan
+##.rgpdCookie
+##.rgpd_backdrop
+##.rgpd_banner
+##.rgpd_banner_alert
+##.rgpd_box
+##.rgpd_message
+##.rh-cookie-consent
+##.rhweb-overlay-cookie-change
+##.ribbon-_cookie
+##.ribbon-cookie
+##.right-floating-cookie
+##.riquadroAvvisoPrivacy
+##.riscms_cookieleiste
+##.rjwp-cookie-law-popup
+##.rltcp_information_cookie
+##.rlx-cookie
+##.rlx-cookie-bar
+##.rm-cookie
+##.rm-cookies-alert
+##.rm-cookies-belt
+##.rm-cookies-ol
+##.rmgCookieAlert
+##.rnk-CookiesPolicy
+##.rnt_cookie
+##.rock-cookie-popup
+##.rodo-accept
+##.rodo-alert
+##.rodo-cookies-panel-module
+##.rodo-height
+##.rodo-info
+##.rodo-info-box
+##.rodo-info-box-overlay
+##.rodo-info__content
+##.rodo-info__overlay
+##.rodo-modal
+##.rodo-not-small-modal
+##.rodo-overlayer
+##.rodo-popup
+##.rodo-popup_popup
+##.rodo-wrapper
+##.rodo-wrapper-1
+##.rodoAlert
+##.rodoPopup
+##.rodo__accept
+##.rodo__container
+##.rodo_cookies_popup
+##.rodo_info
+##.rodoaccept
+##.roh-cookies
+##.row--cookie-compliance
+##.row-cookiebar
+##.row-cookies
+##.row[data-test-selector*="cookie-banner"]
+##.rp-CookiesConsent
+##.rs-alert-cookie
+##.rs-cookie-consent
+##.rstboxCookieBar
+##.rsu-cookies
+##.rt-cookiepolicy-notice
+##.rts-cookie-warning
+##.rts-cookies-warning-pannel
+##.rts-module-cookies-message
+##.rvl-Banner-cookieBanner
+##.rw-cookie-consent
+##.rw-cookie-notification
+##.rxtcookiedisclaimer__container
+##.ry-cookie-permission
+##.s--message[class*="cookie-notice"]
+##.s-10-cookie-consent
+##.s-app-cookies
+##.s-cookie
+##.s-cookie-disclaimer
+##.s-cookie-hint
+##.s-cookie-notification-bar
+##.s-cookie-popup
+##.s-cookie__modal5
+##.s-cookiebar
+##.s-cookies
+##.s-cookies-info
+##.s-cookies-info-inner
+##.s-cookies-warning
+##.s-cookies__container
+##.s-cookies__wrapper
+##.s-gdpr
+##.s-navigation-tool-panel-disclaimer
+##.s1-cookie-banner
+##.s20-cookie-banner__container
+##.s2022-cookie-bar__veil
+##.s2mCookiesOptinDialog
+##.s3-cookie-message-wrap
+##.s360-cookie-hint-wrapper
+##.s_cookie-banner
+##.sage-cookies
+##.sams-cookie-modal
+##.sana-cookiebar
+##.sanoma-optin-bar
+##.save-cookies
+##.save-cookies-rte
+##.sb-banners--cookie
+##.sb-cookie-info-box
+##.sb-cookies-alert
+##.sb-ncookies-alert
+##.sc-cookie
+##.sc-cookie-banner
+##.sc-cookies
+##.sc-gdpr
+##.sc-gdpr-banner
+##.sc-m-cookie-consent-banner
+##.sc-privacy-banner
+##.scg-cookie-banner
+##.sch-datacontroller
+##.scha__cookie-banner
+##.scmp-popin
+##.sco-cookie-confirm
+##.scommerce-gdpr-cookienotice
+##.score-cookie-disclaimer-alert
+##.scp-cookie-consent-outer-wrap
+##.scr-adv-cookies
+##.screen-overlay-cookie
+##.screen.cookie
+##.script-privacyPolicy-cookie
+##.script_cookie_banner
+##.scroll-fix.cookies
+##.scroller > .cookie
+##.scw-cookie
+##.sd-cookie-banner
+##.sd-cookie-notification
+##.sd_cookiespolicy
+##.sdc-site-cookie-notice
+##.sdl-notification-cookie-bar
+##.sdl-web-cookie-bar
+##.seat_cookie_bar
+##.section--bannerCookie
+##.section--cookie-consent
+##.section--cookie-policy
+##.section--cookieBar
+##.section--cookies
+##.section-cookie
+##.section-cookie-message
+##.section-cookieNotification
+##.section-cookies
+##.section-notification-cookies
+##.section-popup-gdpr
+##.section__cookie--message
+##.section__cookie-toggle
+##.section__cookies
+##.seers-cmp-banner-bar
+##.seers-cmp-cookie-data-hol
+##.segb-cookiecompliance
+##.seic-cookie
+##.selectorCookieLawMessage
+##.self-contain-cookie
+##.sem-cookie-notice
+##.sentence--cookie--container
+##.seopress-user-consent
+##.seopress-user-consent-backdrop
+##.setrappelcookies
+##.sets-cookie
+##.sf-consent
+##.sf-cookie-banner
+##.sf-cookie-consent
+##.sf-cookie-consent-outer
+##.sf-cookiedisclaimer
+##.sf-cookies-banner
+##.sf_widget_permission
+##.sfs-cookie-container
+##.sg-cookie-consent
+##.sg-cookie-container
+##.sg-cookie-notice
+##.sg-cookie-policy
+##.sg-cookie-policy-popup
+##.sg-cw-cookie
+##.sgcc-cookies
+##.sgdpr-box
+##.sgs-cookies-consent
+##.sgsCookies
+##.sh-cookie
+##.sh-cookie-alert
+##.sh-cookie-banner
+##.sh-cookie-confirmation
+##.sh-cookie-dialog
+##.sh-cookies-track
+##.sh-show-cookies-track
+##.shadow-cookie
+##.shadow-cookie-banner
+##.shadow-cookieBanner
+##.shareaholic-cookie-consent
+##.shared-alert__cookie
+##.shared-components-cookies
+##.shared-cookie-consent
+##.shared-cookies
+##.shared__cookie-banner
+##.shark-cookie
+##.shb-accept-cookies-box
+##.shiftr-cookie-notice
+##.shopui-eu-cookie-bar
+##.show-banner-cookies
+##.show-concord-banner
+##.show-cookie-container
+##.show-cookie-notifyer
+##.show-cookie-popup:not(body):not(html)
+##.show-eu-cookie
+##.show-gdpr:not(body)
+##.show-notice-cookie
+##.show.udc-bar-holder
+##.show.udc-ovr
+##.showGDPR
+##.showPrivacyCookie
+##.show[class*="cookie-notice"]
+##.show_cookie:not(body):not(html)
+##.show_cookies
+##.showed-cookie-notice
+##.showed.cookies
+##.shrm-gdpr
+##.sibbo-layout
+##.sig-cookie-banner__container
+##.signatu-consent
+##.siko-cookie-disclaimer
+##.simple-cookie-bar
+##.simple-cookies-wrapper
+##.sisu-cookie
+##.site-GDPR-banner
+##.site-beacon-cookies
+##.site-cookie-alert
+##.site-cookie-banner
+##.site-cookie-container
+##.site-cookie-content
+##.site-cookie-disclaimer
+##.site-cookie-info
+##.site-cookie-panel
+##.site-cookie-popup
+##.site-cookie-warning
+##.site-cookieBanner
+##.site-cookies
+##.site-cookies-banner
+##.site-cookies-info
+##.site-cookies-wrapper
+##.site-footer-cookie-banner
+##.site-footer-cookiebanner
+##.site-gdpr-banner
+##.site-gdpr-message
+##.site-header-cookies
+##.site-header-react__cookies-notice-desktop
+##.site-message--cookies
+##.site-message--first-pv-consent
+##.site-message.cookie
+##.site-module--site-cookie
+##.site-msg-cookie
+##.site-needs-cookies
+##.site-notice-wrapper
+##.site-policy-consent-notification
+##.site-popup.consent
+##.site-privacypolicy
+##.site-use-cookie-container
+##.site-uses-cookies-block
+##.site-wide-notice--gdpr
+##.siteCookie
+##.siteCookies
+##.siteCookies--bottom
+##.site_block_wrap_cookie
+##.site_cookies_container
+##.site_cookies_container_open
+##.site_cookies_message
+##.site_cookiesplash
+##.site_header_cookie
+##.site_privacycookies__content
+##.siteplanner-modules-cookie-policy-notice
+##.sites-cookie-notice
+##.sites-cookie-notice-fit
+##.sitesmart-cookies
+##.sitewide-banner--cookie-consent
+##.sjs-eu-cookie
+##.sk-component--cookie-message
+##.sk-cookie-message
+##.ska-cookies
+##.skr-cookieBox
+##.sky-component-cookie-notice
+##.sl-cookie-banner
+##.sl-cookie-consent
+##.slice_Cookies
+##.slideIn.cookie
+##.slideout-cookies
+##.sliding-cookies-bottom
+##.sliding-privacy-popup
+##.sm-cookie-agreement
+##.sm-cookie-consent
+##.sma-cookie-wrapper
+##.small.cookie-consent
+##.small_gdpr_popup_holder
+##.smart-eu-cookies
+##.smcc_bottom_cookieaccept_container
+##.smile-cookie-notification-container
+##.sml_cookiepolicy
+##.smoothie-consent
+##.smrt-ncookies-alert
+##.smt-cookie-note
+##.snackbar-cookie
+##.snackbar-cookie-container
+##.sncmp-app_gdpr
+##.sneakycookie-container
+##.snigel-cmp-framework
+##.so-cookie-wrapper
+##.so-gdpr__cookie-notification
+##.soe-cookie-policy
+##.sok-consent-bottom-bar
+##.sol-cookie-container
+##.sol-cookie-cover
+##.sol-cookie-message
+##.sos-cookie
+##.sotic-cookies
+##.souhlas-cookies
+##.sovrn-gdpr
+##.sp-cookie-banner
+##.sp-cookie-warning
+##.sp-dsgvo-popup-overlay
+##.sp-gdpr-cookie-notice-wrapper
+##.sp-m-cookies-container
+##.spCookieNotice
+##.sp_ad_wrapper
+##.space-cookie-notice
+##.spd-cookie
+##.spec-cookie-optin
+##.spectrum-cookie-policy-banner
+##.spex-cookieConsent
+##.spicy-consent-wrapper
+##.spk-cookie-banner-wrap
+##.spkcookie
+##.sprd-consent
+##.sprd-cookie-banner
+##.sqrcookie
+##.srax-accept-cookies
+##.src-components-CookiePolicy-__style__root
+##.srf-cookie-notice
+##.ss-modal-cookies
+##.ssf-cookie-banner
+##.st-consent-banner
+##.st-cookie-notice
+##.st_notification_wrap
+##.stampenCookieContainer
+##.stapfoto-cookie-melding
+##.state-is-ccpa
+##.statisticsOptBox
+##.status-cookies
+##.sticker-gdpr
+##.sticky-bar--cookie
+##.sticky-cookie
+##.sticky-cookie-container:not(html):not(body)
+##.sticky-cookie-footer
+##.sticky-cookie-information
+##.sticky-cookie-warning
+##.sticky-cookielawbanner
+##.sticky-cookies
+##.sticky-cookies-popup
+##.sticky-footer-cookie-info
+##.stickyCookiePolicy
+##.sticky_cookie
+##.sticky_cookie_warning
+##.stickycookie
+##.stickyfooter-cookie-alert-box-wrapper
+##.stlCookieToast
+##.stn-cookies
+##.stn_cookieoptin
+##.storm-cookie
+##.stormdigital-cookieWall-overlay
+##.stripe-claim-cookie
+##.stripe_cookies
+##.striscia-cookies
+##.stt-cookie
+##.stupidCookieConsent
+##.sty_cookie_monster_cont
+##.styleCookies
+##.su-cookiebar
+##.sub-footer > .cookie
+##.subscribe-cookie
+##.suchen-cookie-privacy-toast
+##.sug-notice--privacy
+##.sui-CmpBanner
+##.sui-CookieBanner
+##.sui-cookie-warning
+##.sulco-cookies
+##.sunday-cookie-consent
+##.superpwa-sticky-banner
+##.support-bootom-cookie
+##.surs-cookies-wrapper
+##.sutiwarning
+##.sv-CookieWindow
+##.sv-cookie-consent-banner
+##.sv-cookie-notification
+##.sv-cookieConsent
+##.sv-se-soleilit-CookieMessage
+##.sv-text-portlet.cookie
+##.sw-cookie-container
+##.sw-cookieBanner__overlay
+##.sw-cookies-banner
+##.sw19b-cookie-banner
+##.swCookie
+##.swCookieBannerWarpper
+##.swg-overlay-cookie
+##.swic-cookie-permission-container
+##.swiftLegalCompliance
+##.swnza_banner
+##.sws-cookie-notification
+##.sx-cookie-consent
+##.sx-cookie-notice
+##.sx-cookies
+##.sxcookie
+##.symantec-cp-banner
+##.symposia-cookie-accept
+##.syno_cookie_element
+##.sys_cc-cookies
+##.sys_header_toolbar_cookie_text
+##.system-notice.cookie
+##.sz-meta__cookies
+##.szc_widebox
+##.s·footer-gdpr
+##.t-cookie
+##.t-footer__cookie-disclaimer
+##.t3-cookie-notice
+##.tCook
+##.tCookiesInfoblock
+##.tab-cookies
+##.tab2-rodo-bar
+##.tancmbnr
+##.tao-cookie-hint
+##.tar_cookiesBar
+##.tarteaucitronAlertBigBottom
+##.tarteaucitronBeforeVisible
+##.taxcodeandprivacy-cookienotice-bar
+##.tbcookie
+##.tc-cookie-banner
+##.tc-cookie-compliance
+##.tc-cookies-alerta
+##.tc-privacy-banner
+##.tc-privacy-overlay
+##.tcCookiesDialogWrapper
+##.tcu-cookies-dpgr-banner
+##.td-gdpr
+##.td-gdpr__cookiemessage
+##.td__nav__cookieNotice
+##.td_rq_modal-cookie
+##.tealium-cookie-banner
+##.template-cookie-consent
+##.template-footer__cookies
+##.tenc-header__cookies
+##.tendina-cookie
+##.termLGPD
+##.termly-consent
+##.termo-aceite-lgpd
+##.termoCookie
+##.termos-politica
+##.termos_cookie_privacidade
+##.terms-conditions-bottom-line
+##.terms-cookies
+##.termsfeed-com---nb-interstitial-overlay
+##.termsfeed-com---reset
+##.tesco-cookie
+##.test-cookie-notification
+##.text-center.cookie
+##.text-center.cookie-consent
+##.text-cookie
+##.text-cookies-notification
+##.texteAlerteCookie
+##.texto_cookies
+##.tf-cookiePolicyModal
+##.tftl-08-cookie
+##.tg-info-cookie
+##.tgdprc-cookie-bar-display
+##.th-cookie-banner
+##.th-cookie-popup
+##.thb-cookie-bar
+##.thcookie-overlay
+##.the-cookie-banner
+##.the-cookiejar
+##.the-gdpr
+##.theCookie
+##.theFriendlyCookieMonster
+##.theeclbox
+##.this_site_uses_cookies
+##.thomann-cookie-consent-overlay
+##.thscookies
+##.tibrr-cookie-consent-container
+##.ticker_cookie
+##.tietosuojabox
+##.tk-Footer-cc
+##.tk-cookie-container
+##.tkn-cookie-accept__area
+##.tm-cookie-banner
+##.tm-cookie-container
+##.tm-cookie-dialog-root
+##.tm-cookies
+##.tm-cookies-consent
+##.tmCookieBox
+##.tmb-cookie-choice
+##.tmcookienotice
+##.tmo-cookie-melding
+##.tn-cookieInfo-area
+##.tna-cookie-banner
+##.tnf-cookie
+##.tnw_cookieconsent
+##.tnzcookie_container
+##.toast--cookies
+##.toast--mod-cookie-desc
+##.toast-block-cookies
+##.toast-cookie
+##.toast-cookie-active
+##.toast-cookie-container
+##.toast-cookies
+##.toast-primary.toast
+##.toast-type-newCookie
+##.toastCookiePolicy
+##.toast[data-dismissable-id="cookieinfo"]
+##.toaster--cookie-policy
+##.tof-cookies
+##.toolbar-cookies
+##.top-alert--cookie-message
+##.top-cookie
+##.top-cookie-banner
+##.top-cookie-info
+##.top-cookie-notification
+##.top-cookie-wrapper
+##.top-cookies
+##.top-cookies-container
+##.top-header-gdpr
+##.top-info-cookie
+##.top-info-cookies
+##.top-message[data-vcv-top-banner]
+##.top-pop-message--cookie
+##.top-row[data-container="cookiebox"]
+##.top-wrapper-cookieinfo
+##.topComponent__cookieBanner
+##.topCookiesMsg
+##.top_banner--gdpr
+##.top_cookie
+##.top_cookie_pannel
+##.top_message_cookies_message
+##.topcookies
+##.topmessage-cookie
+##.topslidein.cookies
+##.tos-Banner-dismissable
+##.tos-footer
+##.tos-update-banner
+##.touchdesign-cookie-privacy
+##.tp-cookie-law
+##.tp_cookie
+##.tpca-container
+##.tpl-cookies
+##.tpl-g-cookies
+##.tplis-cl-cookies
+##.tr-DismissibleBanner
+##.tr-cookies-banner
+##.tr-privacy-banner
+##.tr-privacy-policy-banner
+##.tracking-banner
+##.tracking-banner-wrapper
+##.tracking-consent
+##.tracking-consent-banner
+##.tracking-consent-cta
+##.tracking-consent-dialog
+##.tracking-consent-notice
+##.tracking-consent-overlay
+##.tracking-consent-popup
+##.tracking-contenant
+##.tracking-disclaimer
+##.tracking-widget[data-tracking-widget]
+##.trackingCookiesDisclaimer
+##.trackingNoticeOverlay
+##.tracking_cookie_header
+##.tracking_cookie_hideable
+##.trd-cookie-backdrop
+##.tre-cookie-disclaimer
+##.trillian-cookie-consent-banner
+##.trox-consent-manager
+##.truste-sf-banner
+##.truste_box_overlay
+##.truste_cm_outerdiv:not(body):not(html)
+##.truste_overlay:not(body):not(html)
+##.ts-cookie-consent
+##.ts3-cookie-popup
+##.ts_privacy_adv
+##.tscUiNotificationMiddleWrapper
+##.tsccb-banner-container
+##.tsd-cookie-notice
+##.tsd-cookie__outer
+##.tsl-cookiebanner
+##.tsp-cookie
+##.tt-bsh-cookiebar
+##.tt-cookie-backdrop
+##.tt-cookie-bar
+##.tt-cookie-bar-module
+##.tt_cookie_banner
+##.ttacjs__overlay
+##.ttconsent
+##.tui-gdpr
+##.tutorial_banner_cookie
+##.tv2-js-cookie-alert
+##.tvcmscookies-notice
+##.tw-cookie
+##.tw-user-consent-container
+##.twindigital-cookie-consent
+##.twododigital--cookie
+##.tws-accept-cookies--wrapper
+##.twt-cookies-banner
+##.tx-bsd-cookie
+##.tx-conn-cookie-consent
+##.tx-cookiebanner
+##.tx-cookieoptin
+##.tx-dm-cookies
+##.tx-ewi-eyecookie
+##.tx-ggcookiebanner
+##.tx-it24cookies-pi1
+##.tx-modalcookiebanner-overlay
+##.tx-om-cookie-consent
+##.tx-panda-cookie
+##.tx-pascoe-consent-manager
+##.tx-pnfcnil
+##.tx-tandncookie
+##.tx-whzcookieconsent-banner
+##.tx_cookiemonster_dataprotection_overlay
+##.tx_fe_cookies
+##.txc_cookie_infobox
+##.txtcoockies
+##.tygh-top-cookies
+##.type-cookieLaw
+##.type-cookieacceptpage
+##.typify-cookie-popup
+##.u-banner-cookies
+##.u-cookie
+##.u-cookie-banner
+##.u-cookies-consent
+##.u-lab-bar
+##.u-lab-cookie-law
+##.u12-data-protection-notice
+##.ub-emb-bar-frame
+##.ubg-cookies-banner
+##.uc-cookie
+##.uc-cookie-block
+##.uc-cookies
+##.ucgCookieBar
+##.ucm-banner-pos--push
+##.ucn-block
+##.ucookieC
+##.ud-component--eu-cookie-message--app
+##.ud-component--footer--eu-cookie-message
+##.udgdpr-cookie-policy-notice
+##.ue-c-site-message--cookies
+##.ueltje-cookie-accept
+##.ug3-cookie-info-container
+##.ugc-cookie-bar
+##.ui-cookie-blocked-page-cover
+##.ui-cookie-blocked-warning-container
+##.ui-cookie-message
+##.ui-cookie-notice
+##.ui-cookie-policy
+##.ui-cookie-tooltip
+##.ui-cookie-warning
+##.ui-cookie2
+##.ui-cookieAgree
+##.ui-cookies
+##.ui-cookies-banner
+##.ui-cookies-notice-overlay
+##.ui-dialog-cookies
+##.ui.cookie.nag
+##.uiCookiesHint
+##.uitk-gdpr-banner
+##.uk-cookie
+##.uk-cookie-banner
+##.uk-cookies
+##.uk-first-column.uk-alert
+##.uk-flex-center.uk-grid-collapse
+##.uk-notification-bottom-center
+##.uk-notification-bottom-left
+##.uk-notify-message-info
+##.uk-position-fixed.cookies
+##.ukCookiePolicy
+##.ulCookiePol
+##.ultimize_cookie_notification_container
+##.umuCookieMain
+##.un_cookieConfirm
+##.un_cookie_policy
+##.uni-cookie-policy
+##.uninav-cookie-law-container
+##.unitcookieonpage
+##.universalcookiedisclaimer
+##.unq-cookie
+##.uo-first-cookie
+##.up-form-cookie
+##.up2-cookie-div
+##.upsd__lgpd__render
+##.upsell-gdpr-banner-container
+##.uqv2-consent-popup
+##.use-cookie
+##.use-cookie-block
+##.use-cookie-box
+##.use-cookie-component
+##.use-cookie-container
+##.use-cookies-block-fixed
+##.use-cookies_main
+##.useCookieBox
+##.useCookiesInfo
+##.use_cookie
+##.use_cookies
+##.usecookie-container
+##.usecookies
+##.useofcookies-tip
+##.user-alerts__cookies
+##.user-consent.ui-dialog
+##.user-cookie-consent-section
+##.user-cookie-notice
+##.userTipBanner--agreed_to_terms
+##.usercookiemanagement
+##.usercookieshow
+##.usermsgCookie
+##.usernotification--cookie-usage
+##.using-cookie
+##.using-cookie-block
+##.uso-cookie
+##.ut_cookie_privacy_c1
+##.utwente-cookiebar
+##.uu5-bricks-cookie-bar-bottom
+##.uucookies-container
+##.uwp-cookie-banner
+##.ux-accept-cookies
+##.ux-cookie-layer
+##.v-A_-cookie__monster
+##.v-app-PortletCookiesLaw
+##.v-consent-banner
+##.v-cookie-bar
+##.v-cookieconsent
+##.v-privacy-policy-popup
+##.v-site-cookie-banner
+##.v-window-cookieDialogWindow
+##.v2-cookie-disclaimer
+##.v2_cookies_container
+##.validrgpd
+##.valu-cookie-notice
+##.vbcn-backdrop
+##.vc-cookie-consent
+##.vc-cookieconsent
+##.ventana-cookies
+##.veriAltBar
+##.vf-CookieBar
+##.vf-alert-cookies
+##.vf-banner
+##.vf-privacy-policy-popup
+##.vfcc__overlay
+##.vg-cookie-notification-popup
+##.vgcookies
+##.viacomcookiebar
+##.viacomcookiebar-extended
+##.vibrant-app_gdpr
+##.view-gdpr
+##.viia-cookie
+##.virtualgroup-cookie-notice-wrapper
+##.visible-cookies:not(body)
+##.visible.cookies
+##.visitorcookie
+##.vismo-cookies
+##.vito--cookie
+##.vk-cookie-notification
+##.vk_cookie_compliance
+##.vlb-cookies
+##.vlcookies_box
+##.vm-gdpr
+##.vm_cookieBarWrapper
+##.vmapi-infocookies-wrapper
+##.vmn_banner-wrapper
+##.vn-cookie-notice
+##.vncookie-container
+##.voc-cookie-message
+##.vp-cookie-consent
+##.vs-notification--cookie
+##.vtex-cookies
+##.vtl-cb-main-widget
+##.vtm-cookiebanner
+##.vw-cookie-alert
+##.vw-header--accept-cookies
+##.vw_js_cookie_eu_policy
+##.vw_system_notification_opt_in
+##.vwd4_cookie_policy
+##.w--cookie
+##.w-100.cookie
+##.w-cookie-banner
+##.w-cookie-bar
+##.w-cookie-notice
+##.w-cookie-notification
+##.w-info-cookie
+##.w-modal[class*="privacyalert"]
+##.w-notifications__noty_cookie
+##.w18lara_tgplugin_consent_bodyback
+##.w2t-banner
+##.w3_cnil
+##.waGDPR_consentButton
+##.waGDPR_modalFrameBackground
+##.waconcookiemanagement
+##.waconcookiemanagement-cookiebar
+##.wad-banner-cookie
+##.wami_cookie_div
+##.wander-cookie
+##.warn-cookie
+##.warning--policy
+##.warning-cookie
+##.warning-cookie-law
+##.warning-cookies
+##.warning-message.cookie
+##.warning-policy
+##.warning-top--cookies
+##.warning.cookie
+##.warningCookie
+##.warningCookieRgpd
+##.warningCookieWrap
+##.warningMessagePanel.cookies
+##.warning_EU_cookiemsg
+##.warning_cookie_block
+##.warp_cookie_warning_barrier
+##.wasa_cookies
+##.wbUKCookies
+##.wb_cookie_policy
+##.wbu_cookie-wrapper
+##.wc-defaults-gdpr
+##.wc-gdpr-template
+##.wc-gdpr-template-large
+##.wc_privacy_notice
+##.wcc-cookie-policy
+##.wcookies
+##.wd-cookie
+##.wd-cookies
+##.wd-cookies-popup
+##.wd-widget-js.wd-data-usage-confirm
+##.wd_cookie
+##.we-cookie-banner
+##.we-have-cookies
+##.we-use-cookie
+##.we-use-cookies
+##.we-using-cookie
+##.weCookie
+##.weCookieBar
+##.weUseCookies
+##.weald-gdpr-container
+##.web-cookies
+##.web-cookies-inline
+##.webgatha-cookies-info
+##.webshop-cookie-warning
+##.website-cookie-banner
+##.website-cookie-notification
+##.website-cookies
+##.wecookiepop-container
+##.wee-cookie
+##.welcome--cookies
+##.welcome-cookies
+##.welcome-privacy
+##.wf-cookie-consent
+##.wg_cookie
+##.wgt-cookies
+##.wi-cookie-banner
+##.widget--cookieConsent
+##.widget--cookies
+##.widget--enable-cookies-box
+##.widget-GdprCookieBanner
+##.widget-consent
+##.widget-consent-dialog
+##.widget-cookie
+##.widget-cookie-banner
+##.widget-cookie-notification
+##.widget-cookieOptIn
+##.widget-gdpr-banner
+##.widget-gdpr-cookie-banner
+##.widget-type_system_widget_v4_modal_cookie_1
+##.widget.cookies
+##.widget__contact__item--cookie
+##.widget_alertcookie
+##.widget_coala-widget-cookie_banner
+##.widget_cookieconsentwidget
+##.widget_eu_cookie_law_widget
+##.win_cookies
+##.wkd-cookie-policy
+##.wkp-cookie
+##.wl---cookieWarning
+##.wl_cookie
+##.wmdk-cookie-notice-wrapper
+##.wnet_cookiespolicy
+##.wolf-consentment-bar
+##.wolford-allow-cookies
+##.woocommerce-store-notice
+##.woodmart-cookies-popup
+##.woody-cookies-toolbox
+##.wordpress-consent-manager__wrapper
+##.wordpress-gdpr-open-privacy-settings-modal
+##.wordpress-gdpr-popup
+##.wordpress-gdpr-privacy-settings-popup-container
+##.wp-cookie-prompt
+##.wp-cookies
+##.wp-gdpr-cookie-notice-wrap
+##.wp-gdpr-popup
+##.wp-privacy-prompt-dialog-box
+##.wp-pt-cookie-consent
+##.wp-statistics-opt-out
+##.wp_privacy_cookie_wall-prompt-dialog-box
+##.wpc-cookie-warning
+##.wpcc-bottom
+##.wpcc-container
+##.wpcg-br.wpcg-lay-out
+##.wpcn_banner-wrapper
+##.wpcookie-seen
+##.wpcui-cookie-bar-body
+##.wpcui-cookie-bar-display
+##.wpfresh4-cookie-pop
+##.wpfresh5-cookie-pop
+##.wpgdpr-modal-dialogg
+##.wpgdprc
+##.wpgdprc-consent-bar
+##.wphack-cookie-wrapper
+##.wpmaster-cookie-content
+##.wpmaster-cookie-wrapper
+##.wpr-cookiebalk
+##.wprcb-cookie-bar
+##.wrap-cookie-banner
+##.wrap-cookie-info
+##.wrap-cookie-info-ext
+##.wrap-cookie-placeholder
+##.wrap-cookie-policy-message
+##.wrap-cookie-site
+##.wrap-cookies
+##.wrap-cookies-desktop
+##.wrap-cookies-infos
+##.wrap-gdpr
+##.wrap__cookie
+##.wrap_cookie
+##.wrap_cookie_policy
+##.wrap_cookie_site
+##.wrap_cookies
+##.wrapp-cookie
+##.wrapper > #ot-sdk-btn
+##.wrapper--cookies
+##.wrapper--cookies-disclaimer
+##.wrapper-banner-cookie
+##.wrapper-banner-rgpd
+##.wrapper-cookie
+##.wrapper-cookie-bar
+##.wrapper-cookies
+##.wrapper-gdpr
+##.wrapper-notify-cookies
+##.wrapperCookie
+##.wrapperCookies
+##.wrapper_cookie
+##.wrapper_cookies
+##.wrappercookie
+##.wraps-cookie-info
+##.ws-cookie-content
+##.ws-cookie-notice
+##.ws-cookie__wrapper
+##.ws-cookiebar-wrapper
+##.wsc-cookies-bar
+##.wsite-cookie-opt-out--wrapper
+##.wsr--data-protection
+##.wt-confirm-layer
+##.wt-cookie-box-wrapper
+##.wt-cookie-consent
+##.wt-notice-cookie
+##.wta-cookies-policy
+##.wuCookieBanner
+##.wundery-cookie-banner
+##.wundery-cookie-banner-bottom
+##.ww-cookiewall
+##.wwdj-cookie-accept__area
+##.wwp-gdpr_bar
+##.wwwschutz_cmp_showing
+##.wx-cookie-ppp
+##.wx_consentbanner
+##.wz-cc-container
+##.x-cookie-acceptance
+##.x-cookie-consent
+##.x-cookie-disclaimer
+##.x-cookie-open
+##.x-cookies
+##.x-cookies-modal
+##.x-danone-cookies
+##.x-el[data-aid*="COOKIE_BANNER"]
+##.x-lgpd-popup
+##.xcookie
+##.xenofit-cookiebar
+##.xf-cookie-hint
+##.xl2-cookie-layer
+##.xm_matomo
+##.xola-pii-consent-banner
+##.xpr-cookieModal
+##.xs-fixed[data-module="cookie_banner"]
+##.xs4all-cookieWall
+##.xs4all-cookieWall-overlay
+##.xsCookieConsent
+##.xxx-cookies-tooltip
+##.xy-consent
+##.xzlgcook
+##.ya-allow-cookie
+##.yd-jig-cookielaw
+##.yellow.rgpd
+##.yn-cookies
+##.ysdb-cookiealert
+##.ysolCookieInfoBox
+##.yt-consent-banner
+##.z-banner-cookie
+##.z-cookie
+##.z-cookie-alert
+##.z-cookie-banner
+##.z-cookieBar
+##.z-cookieBar_text
+##.z-cookieBar_wrapper
+##.z-cookiepolicy
+##.z-cookies
+##.z-navicat-header-cookieBar
+##.z16_cookies_banner-wrapper
+##.zalrt-zcookies-alert
+##.zapp-cookie-consent
+##.zapp-cookie-consent-wrap
+##.zapp-cookiemessage-bottom
+##.zebra-cookie-banner-popup
+##.zen-privacypolicypopup
+##.zenario_cookie_consent
+##.zenconsent-popup
+##.zgoda_na_cookie
+##.zgody-popup
+##.zh-cookieBox
+##.zig-lists-attentieregels
+##.zilch-cookie-message
+##.zk-cookies-container
+##.zm-cookies-notification
+##.zn-cookies
+##.zone-cookies
+##.zpWinThemeCookie
+##.zpconsentinfo
+##.zpm-cookie
+##.zyro-cookies
+##.сookieAgreement
+##COOKIE-HEADER
+##DCINFO_COOKIE_AGB
+##GDPR-NOTICE
+##[app-cookie-banner-control]
+##[aria-describedby="cookie-box-message"]
+##[aria-describedby="cookie-information"]
+##[aria-describedby="cookieprivacy"]
+##[aria-describedby="cookies-policy-message"]
+##[aria-describedby="dialog-eu-cookie-law"]
+##[aria-describedby^="cookie-wall-"]
+##[aria-label="Cookies banner"]
+##[aria-labelledby="cookie-dialog"]
+##[aria-labelledby="cookie-wall-heading"]
+##[aria-labelledby="ui-dialog-title-cookiebox"]
+##[cnn-cookie-policy]
+##[cookie-unique-name]
+##[data-alert-cookie]
+##[data-at-selector="cookie-banner"]
+##[data-automation="cookies-banner"]
+##[data-behaviour="cookie-popup"]
+##[data-bind="visible: showCookieWarning"]
+##[data-ccpa]
+##[data-component-class-name="cookieLightbox"]
+##[data-cookie-name="cookiesDirective"]
+##[data-cookie-number]
+##[data-cookie-popup]
+##[data-cookie-validity-days]
+##[data-cookie="uso-accept-cookies"]
+##[data-cookie^="cookie.disclaimer"]
+##[data-cvent-id="cookie-banner"]
+##[data-cy="cookie-banner"]
+##[data-cy="cookie-notice"]
+##[data-cy="cookiebar"]
+##[data-dialog-id="accept-cookies"]
+##[data-dmid*="cookiebar-"]
+##[data-dmscookie]
+##[data-g-name="CookieBanner"]
+##[data-gaoop_hide_after_close]
+##[data-inc="cookies"]
+##[data-include="cookie"]
+##[data-include="cookies"]
+##[data-key="cookies-warning"]
+##[data-module="CookieBanner"]
+##[data-module="cookies"]
+##[data-name="cookieNotice"]
+##[data-name^="CookiesNotification"]
+##[data-notification="CookiePolicyAgreement"]
+##[data-qa="CookieBar"]
+##[data-qa="txtGdprCookiePopup"]
+##[data-react-class*="CookieConsentBanner"]
+##[data-react-class="EUCookieBanner"]
+##[data-react-component="CookiePrompt"]
+##[data-ref="cookies"]
+##[data-rgpd-inc]
+##[data-role="cookie-notice"]
+##[data-s-type="cookie-message"]
+##[data-selector="cookie-policy"]
+##[data-target="coockie"]
+##[data-test-id="CookiePopup"]
+##[data-test-id="check-cookie-consent"]
+##[data-test-id="cookie-consent-banner"]
+##[data-test-id="cookie-policy-banner"]
+##[data-test="cookie-banner"]
+##[data-test="cookie-policy-sheet"]
+##[data-test="gdpr-cookies-popup"]
+##[data-test="gdpr-modal"]
+##[data-testid="accept-cookies-banner"]
+##[data-testid="consent-banner"]
+##[data-testid="cookie-bar"]
+##[data-testid="cookie-policy"]
+##[data-testid="cookie-popover"]
+##[data-testid="cookieBanner-widget"]
+##[data-testid="cookieConsentBanner"]
+##[data-testid="cookie_banner_v2_container"]
+##[data-testid="cookienotice-container"]
+##[data-testid="cookies-module"]
+##[data-testid="cookies_footer"]
+##[data-testid="main-cookies-banner-container"]
+##[data-token="gdpr_cookie_notice"]
+##[data-type="cookie-addsense"]
+##[data-ui-test="cookieAlert"]
+##[data-unique-cookie-name]
+##[data-veci="cookies-policy"]
+##[data-view-name="privacy-updated-notice"]
+##[href="https://devowl.io/wordpress-real-cookie-banner/"]
+##[id="lux-cookie-dialog"]
+##[name="cookie-info"]
+##[name="cookiewarning"]
+##[ng-controller="CookieBannerCtrl"]
+##[ng-show^="cookiePolicyCtrl"]
+##[type="cookie-notification"]
+##[x-data="cookieBanner()"]
+##[x-show="showCookieConsent"]
+##accept-cookie-box
+##acidjs-xcookie-consent
+##adcookies
+##alterdata-cookie-tool
+##amedia-privacybox
+##amp-consent
+##amp-user-notification
+##app-accept-cookie
+##app-aviso-cookie
+##app-aviso-cookies
+##app-banner[arialabel*="Cookies"]
+##app-cb-cookies
+##app-ccpa-banner
+##app-cookie
+##app-cookie-banner
+##app-cookie-bar
+##app-cookie-consent
+##app-cookie-consent-banner
+##app-cookie-consent-feature
+##app-cookie-consent-modal
+##app-cookie-consent-popup
+##app-cookie-footer
+##app-cookie-info
+##app-cookie-msg
+##app-cookie-notification
+##app-cookie-policy
+##app-cookie-popup
+##app-cookie-prompt
+##app-cookie-rules
+##app-cookie-warning
+##app-cookie-widget
+##app-cookies
+##app-cookies-agreement
+##app-cookies-alert
+##app-cookies-banner
+##app-cookies-box
+##app-cookies-confirm
+##app-cookies-consent
+##app-cookies-modal
+##app-cookies-notice
+##app-cookies-policy
+##app-cookies-policy-updated
+##app-cookies-popup
+##app-cookies-toast
+##app-foncia-cookie-banner
+##app-footer-modal-cookie
+##app-pop-up-cookies
+##app-rodo
+##app-root app-cookie-acceptance
+##ark-cookiebar
+##aside[class="rgpd"]
+##atlas-logon-cookie-policy
+##avis-cookies
+##awsui-alert[dismiss*="CookieBanner"]
+##aza-cookie-message
+##b2c-cookies-notification
+##body > .btn-cookie
+##browser-login-cookie-notification
+##c-community-cookie-consent-banner
+##c-cookie-consent
+##c-ecp-cookies-banner
+##c-osf-cookie-consent-banner
+##cbn-cookies
+##cg-cookies-banner
+##cloudflare-app[app="cookiless"]
+##cloudflare-app[app="tibrr-cookie-consent"]
+##cmm-cookie-banner
+##cmpviews-cookies-accept
+##cn-cookie-agreement
+##col-cookie-info-banner
+##comply-consent-manager
+##con-cookie-popup
+##consent
+##consent-notification
+##cook-disclaimer
+##cookie-agreement-block
+##cookie-alert
+##cookie-banner
+##cookie-bar
+##cookie-confirmation
+##cookie-consent
+##cookie-consent-banner
+##cookie-consent-component
+##cookie-drawer-policy
+##cookie-info
+##cookie-law-banner
+##cookie-modal
+##cookie-notice
+##cookie-notification
+##cookie-permission
+##cookie-policy
+##cookie-policy-popin
+##cookie-popup
+##cookie-warning
+##cookie-wrap
+##cookie_notice
+##cookiebox
+##cookies-consent
+##cookies-gdpr
+##cookies-hint
+##cookies-notification
+##cookies-overlay
+##cookies-policy
+##cookies-popup
+##cookies-requirement
+##cookies-warning
+##cookies.ng-scope
+##cookiless-div
+##cru-cookie-policy
+##cts-disclaimer-cookies
+##dayaway-cookie-consent
+##dialog.cookie-policy
+##dile-cookies-consent
+##div[data-automation="privacy-banner-wrapper"]
+##div[data-banner="cookies"]
+##div[data-borlabs-cookie-wrap]
+##div[data-box-name="cookie policy"]
+##div[data-cmp-no-consent]
+##div[data-component="cookie-policy"]
+##div[data-component="cookieContent"]
+##div[data-components="pdr-ws1lib-header"]
+##div[data-container-acceptcookies]
+##div[data-cookie-law-banner-selector]
+##div[data-cookie-notification]
+##div[data-cookie-path]
+##div[data-cookie-warning]
+##div[data-cookiebanner]
+##div[data-cookiebar]
+##div[data-cookielayer-init]
+##div[data-corgi-component="cookie-banner"]
+##div[data-etsy-promo-cookie-expires]
+##div[data-gdpr-consent-prompt]
+##div[data-id="cookieBar"]
+##div[data-id="cookie_dialog"]
+##div[data-is-cookieinfo]
+##div[data-module="cookie_banner"]
+##div[data-notificationid="cookie"]
+##div[data-pnp-mi-id="mi-cookies"]
+##div[data-pov-accept-cookies-message]
+##div[data-privacy-consent]
+##div[data-react-class="CookieNotice"]
+##div[data-role="cookie-policy-banner"]
+##div[data-section-type="CookiesBanner"]
+##div[data-selector="container@cookiebar"]
+##div[data-selen-group="cookies-bar"]
+##div[data-selenium="CookieBanner"]
+##div[data-storage-item^="t886cookiename_"]
+##div[data-test-sell-cookie-banner]
+##div[data-test="cookie-policy-banner"]
+##div[data-testid="cookie-disclaimer"]
+##div[data-testid="cookie-policy-banner"]
+##div[data-wzb="CookieNotification"]
+##div[element-structure-cookiemonster]
+##div[js-cookies]
+##div[ld-scope="cookie-consent"]
+##div[ng-click="self.setCookieDisclaimer()"]
+##div[spec="cookie-disclaimer"]
+##dk-cookie-warning
+##dva-m-cookie-flyout
+##ea-truste-consent-bar
+##edn-cookie
+##emv-anonymous-consent-management-banner
+##eo-cookie-bar
+##epaas-consent-drawer-shell
+##esn-cookie-disclaimer
+##eu-cookie-compliance
+##fab-cookie-control-banner2
+##fdp-widget-cookie-consent
+##footer > #cookies
+##footer > .cookie
+##form[name="FormLeggeCookies"]
+##g-cookie-policy
+##gdpr-age-consent-modal
+##gdpr-consent
+##gdpr-cookies
+##gdpr-policies
+##gdprpopupmod
+##gds-consent-manager
+##gfp-cookie-policy-notice
+##gj-cookie-prompt
+##hma-cookie-notification
+##idg-cookie-info-bar
+##iframe[name="googlefcPresent"]
+##ing-ui-rba-cookie
+##ir-cookie-consent
+##jsa-cookie
+##kuma-cookie-bar
+##lgpd-cookie
+##lgpd-cookie-terms
+##lib-privacy-policy-toast
+##lnb-cookie-policy-overlay
+##loop-cookie
+##luno-cookie-preferences
+##m-cookies-notice
+##mct-templater-cookie-consent
+##md-toast.cookies-toast
+##mip-cookie-info
+##n9-disclaimer-cookies
+##nges-cookie-notification
+##nl-cookie-notice
+##nosid-cookie-banner
+##ns-cookie-privacy-tip
+##o-cookie-law
+##ocaso-global-modal
+##oct-cookie-consent
+##ods-accept-cookies-message
+##of-cookies-notice
+##ofi-cookie-box-widget
+##onl-cookie
+##outer-wrapper-cookie
+##pd-cookie-banner
+##pdo-cookies-policy
+##pp-cookie-dialog
+##privacy-policy-toast
+##proactua-cookie-consent
+##puma-cookie-banner
+##rtk-cookies-notice
+##s72-cookie-consent
+##sd-cookies-widget
+##section > .cookie
+##section[class*="_CookieNotice"]
+##section[data-component="Com3Cookie"]
+##section[data-test-id="cookie-notice"]
+##section[data-view="cookiePolicy"]
+##sell-cookie-banner
+##shb-cookie-accept
+##shb-cookie-consent
+##sibbo-cmp-layout
+##sj-cookie-banner
+##son-cookie-consent
+##staedtler-cookie-banner
+##suchen-cookie-privacy-toast
+##tag-cookie-banner
+##thor-cookies
+##thread-cookie-notice
+##tpl-cookieconsent
+##ts-cookie-msg
+##tui-cookie-bar
+##tui-cookie-consent
+##tuugo-notification
+##uc-cookie-notification
+##ugc-cookie-banner
+##ux-cookie-layer
+##vc-site-cookiepolicy-dialog
+##veiss-cookies
+##vls-cookie-banner
+##voc-cookie-warning
+##wc-cookies
+##web-cookie-consent
+##wecoma-lite
+##wieland-cookie-banner
+##wp-cookie-notification-banner
+##wx-cookie-policy-notification
+##xk-cookie-policy-warning
+##yd-cookie-notice
+##yg-cookie-confirm
+##ytd-app ~ iron-overlay-backdrop
+##ytd-consent-bump-renderer
+##ytd-mealbar-promo-renderer
+##ytg-notification-footer
+##zapf-cookie-banner
+! div specific (not body)
+##article.c-cookies
+##article.cookie-banner
+##article.cookie-container
+##aside#cookie-popup
+##aside#eu_cookie_law_widget-2
+##aside.amgdprjs-bar-template
+##aside.bottom-cookies
+##aside.cookie-banner
+##aside.cookie-bar
+##aside.cookie-popup
+##div#ACClayerBackground
+##div#ACCsmallCookieLayer
+##div#__tealiumGDPRcpPrefs
+##div#__tealiumGDPRecModal
+##div#accept-cookie
+##div#accept-cookie-container
+##div#aceptar_container
+##div#allow-cookies
+##div#cc-consent-container
+##div#cc_container
+##div#ccpa-consent
+##div#ccpaCookieBanner
+##div#cmc-cookie-policy-banner
+##div#cmp-app-container
+##div#consent-cookie-container
+##div#consent-manager-container
+##div#consentComponentContainer
+##div#consentContainer
+##div#consentframe
+##div#contenedor-cookies
+##div#cookie-accept-container
+##div#cookie-acceptance
+##div#cookie-alert-container
+##div#cookie-banner-container
+##div#cookie-banner_container
+##div#cookie-bar
+##div#cookie-bar-container
+##div#cookie-bar-prompt
+##div#cookie-check
+##div#cookie-choice-container
+##div#cookie-info-container
+##div#cookie-law-banner
+##div#cookie-popup
+##div#cookieBotHide1
+##div#cookieConsentModal
+##div#cookieConsentStickyFooter
+##div#cookiePopup
+##div#cookie_banner
+##div#cookies-background
+##div#cookies-pop
+##div#cookiesApproval
+##div#cookiesLightbox
+##div#cookiesdirective
+##div#dcCookieHelper
+##div#dcCookieHelper--bg
+##div#eu-cookies-popup
+##div#gdpr-cookie-accept
+##div#gdprCookieBar
+##div#gdprpatronInfoleiste
+##div#gdprpatronInfoleisteOverlay
+##div#lgpd
+##div#lgpd-banner
+##div#lgpd-warning-container
+##div#privacy_policy
+##div#shadCookie
+##div#tracking-consent-dialog
+##div#whCookieManager
+##div.-cookie
+##div.-cookie-notice
+##div.-cookies
+##div.-cookies-notice
+##div.-cookies__alert
+##div.AcceptCookies
+##div.BoxCookie
+##div.ConsentCookie
+##div.Cookie
+##div.Cookie-banner
+##div.Cookie-notice
+##div.Cookie-wrapper
+##div.CookieAccept
+##div.CookieAlert
+##div.CookieConfirmation
+##div.CookieInfo
+##div.CookieMessage__cookieMessage
+##div.CookiePrompt
+##div.CookieWrapper
+##div.Cookie__Popup
+##div.Cookies
+##div.CookiesWrap
+##div.EUCookie
+##div.GdprCookieConsent-ConsentContainer
+##div.GdprCookieConsent-ConsentContainerOverlay
+##div.PrivacyBanner
+##div.PrivacyCookie
+##div.accept-cookie
+##div.accept-cookies
+##div.accept-rgpd
+##div.acceptCookie
+##div.acceptCookies
+##div.accept__cookies
+##div.acceptcookie
+##div.acceptcookies
+##div.accepted-cookies
+##div.agreecookie
+##div.alert-cook
+##div.alert-cookie
+##div.alert-cookies
+##div.alert-gdpr
+##div.alertCookie
+##div.alertCookies
+##div.alert__cookies
+##div.allow-cookie
+##div.allow-cookies
+##div.allowcookie
+##div.ap-cookie-consent
+##div.app-cookies
+##div.ask-cookie
+##div.askcook
+##div.aviso-cookie
+##div.aw-cookie-banner
+##div.b--cookie
+##div.b-cookie
+##div.block-cnil
+##div.block-cookie
+##div.block-cookie-warning
+##div.block-cookies
+##div.blog-cookie
+##div.bottom-cookies
+##div.box_lgpd
+##div.c-consent
+##div.c-cookie
+##div.c-cookieConsent
+##div.c-cookieconsent
+##div.c-cookies
+##div.c-gdpr
+##div.cPolicy
+##div.cc-CookieWarning
+##div.cc-revoke
+##div.ccpa-message
+##div.ccpa-notice
+##div.civic_cookie__banner
+##div.civic_cookie__overlay
+##div.cnil
+##div.cnil-popup
+##div.confirm-cookie
+##div.consent-banner-container
+##div.consent-bg
+##div.consent-dialog
+##div.consent-show
+##div.consent-summary-shown
+##div.consent-tracking
+##div.consentbanner
+##div.containerCookies
+##div.conten-cookies
+##div.coockiesdiv
+##div.cookie--bar
+##div.cookie--blur
+##div.cookie--notice
+##div.cookie--wrapper
+##div.cookie-accept
+##div.cookie-accept-container
+##div.cookie-background
+##div.cookie-banner
+##div.cookie-banner-wrapper
+##div.cookie-bar
+##div.cookie-bar--is-visible
+##div.cookie-bar-visible
+##div.cookie-black
+##div.cookie-bloc
+##div.cookie-choices
+##div.cookie-compilance
+##div.cookie-compliance
+##div.cookie-confirm
+##div.cookie-consent
+##div.cookie-consent-banner
+##div.cookie-consent-bar
+##div.cookie-consent-block
+##div.cookie-consent-modal
+##div.cookie-consent-open
+##div.cookie-consent-overlay
+##div.cookie-consent-popup
+##div.cookie-consent-show
+##div.cookie-consent-window
+##div.cookie-container
+##div.cookie-content
+##div.cookie-details
+##div.cookie-directive
+##div.cookie-disclaimer
+##div.cookie-disclamer
+##div.cookie-disclosure
+##div.cookie-div
+##div.cookie-eu
+##div.cookie-gdpr
+##div.cookie-header
+##div.cookie-hint
+##div.cookie-hinweis
+##div.cookie-hold
+##div.cookie-info
+##div.cookie-layer
+##div.cookie-message
+##div.cookie-msg
+##div.cookie-notice
+##div.cookie-notice-big
+##div.cookie-notice-body
+##div.cookie-notice-consent
+##div.cookie-notice-open
+##div.cookie-notice-visible
+##div.cookie-notice-wrapper
+##div.cookie-notification
+##div.cookie-notification-wrapper
+##div.cookie-on
+##div.cookie-overlay
+##div.cookie-padding
+##div.cookie-panel
+##div.cookie-parent
+##div.cookie-policy
+##div.cookie-policy-banner
+##div.cookie-policy-head
+##div.cookie-policy-info
+##div.cookie-policy-info--center
+##div.cookie-policy-open
+##div.cookie-popup
+##div.cookie-preferences-banner
+##div.cookie-reminder
+##div.cookie-show
+##div.cookie-visible
+##div.cookie-warn
+##div.cookie-wrapper
+##div.cookieBackgaround
+##div.cookieBanner
+##div.cookieBar
+##div.cookieConsent
+##div.cookieDisclaimer
+##div.cookieHolder
+##div.cookieInfo
+##div.cookieMessage
+##div.cookieMsg
+##div.cookieNav
+##div.cookiePolicy
+##div.cookiePop
+##div.cookiePrompt
+##div.cookieTextsWrapper
+##div.cookie__alert
+##div.cookie__backdrop
+##div.cookie__compliance
+##div.cookie__disclaimer
+##div.cookie__info
+##div.cookie__layer
+##div.cookie__notice
+##div.cookie__popup
+##div.cookie_agree
+##div.cookie_agree_wrap
+##div.cookie_alarm
+##div.cookie_head
+##div.cookie_header
+##div.cookie_msg
+##div.cookie_popup
+##div.cookie_text
+##div.cookie_visible
+##div.cookiebackground
+##div.cookiebanner
+##div.cookiebox
+##div.cookieconfirm
+##div.cookieconsent
+##div.cookieholder
+##div.cookiehtml
+##div.cookienotice
+##div.cookiepop
+##div.cookieprompt
+##div.cookies--visible
+##div.cookies-banner
+##div.cookies-body
+##div.cookies-btm
+##div.cookies-consent
+##div.cookies-cont
+##div.cookies-fixed
+##div.cookies-message
+##div.cookies-modal-container
+##div.cookies-notice
+##div.cookies-pan
+##div.cookies-parent
+##div.cookies-pop
+##div.cookies-splash
+##div.cookies-visible
+##div.cookiesAcceptance
+##div.cookiesBanner
+##div.cookies__alert
+##div.cookies__first
+##div.cookies__outer
+##div.cookies_banner
+##div.cookies_design
+##div.cookies_open
+##div.cookies_panel
+##div.cookies_pop
+##div.cookiescreen
+##div.cookiesection
+##div.cookiespace
+##div.cookiesplace
+##div.cookiestatement
+##div.cookieswindow
+##div.dev-cookie
+##div.dp--cookie-consent
+##div.edu-modal-cookie
+##div.eu-cookie
+##div.eu-cookie-compliance-banner
+##div.eu-cookie-compliance-banner-info
+##div.eu-overlay
+##div.eu_cookie
+##div.euconsent
+##div.eupopup
+##div.ezmob-footer
+##div.gdpr
+##div.gdpr-bottom
+##div.gdpr-confirm
+##div.gdpr-cookie
+##div.gdpr-cookieconsent-container
+##div.gdpr-cookieconsent-overlay
+##div.gdpr-cookieconsent-settings
+##div.gdpr-popup-border
+##div.gdpr-show
+##div.gdpr-wrapper
+##div.gdprWrapper
+##div.grid-cookie
+##div.i-cookie
+##div.is-cookie
+##div.is-cookies
+##div.js-cookie-consent-overlay
+##div.js-cookie-note
+##div.js-cookie-note--overlay
+##div.js-cookie-template
+##div.js-disclaimer
+##div.layer_cookies
+##div.layout-cookie
+##div.lgpd-popup
+##div.lgpd-warning
+##div.messagecookies
+##div.mod_cookies
+##div.msgCookie
+##div.notice--cookie
+##div.notificationpopup
+##div.pageCookie
+##div.pagecookies
+##div.panelCookies
+##div.popUpCookies
+##div.popupcookies
+##div.privacy-consent
+##div.privacy-info
+##div.privacy-message
+##div.privacy-modal
+##div.privacy-module
+##div.privacy-note
+##div.privacy-notice
+##div.privacy-overlay
+##div.privacy-police
+##div.privacy-popup-container
+##div.privacy_prompt
+##div.section--cookie
+##div.section-gdpr
+##div.show-cookie-box
+##div.show-cookie-consent
+##div.show-cookie-policy
+##div.show-cookies
+##div.site-cookie
+##div.sqs-cookie-banner-v2
+##div.v-cookie
+##div.w-cookie
+##div.with-cookie
+##div[data-cookie-disclaimer]
+##form.cookie-bar--fluid
+##form.cookieBanner
+##nav.cookie-consent-banner
+##p.alert-cookie
+##section#accept-cookie-container
+##section#tracking-consent-dialog
+##section.Cookie-notice
+##section.c-cookie
+##section.c-cookieconsent
+##section.c-cookies
+##section.cookie-alert
+##section.cookie-banner
+##section.cookie-bar
+##section.cookie-consent
+##section.cookie-message
+##section.cookie-popup
+##section.cookie__privacy
+##section.cookies_banner
+!amundi.lu/amundi.dk/amundi.es
+###disclaimer_amundi
+! autoscout24.*
+###as24-cmp-popup
+! fixpart.fi https://github.com/easylist/easylist/issues/17478
+##.fp-cookie-modal
+! https://github.com/easylist/easylist/pull/13571
+##div.amgdprcookie-modal-container
+##div.ammodals-overlay
+! mrowkamyslenice.pl,dolmat.pl,mrowkajaslo.pl,mrowkabusko.pl
+###rodopopup.popup
+! .CookieConsent
+###ctl02 > .CookieConsent
+###form > div > .CookieConsent
+##.is-active.CookieConsent
+##.navbar > .CookieConsent
+##footer > .CookieConsent
+##header > .CookieConsent
+! XenForo < 2.2.11, e.g. wjunction.com,forum.zwame.pt,obsproject.com,phica.eu,xfitalia.it
+##.js-notice.notice--cookie
+! XenForo >= 2.2.12, e.g. https://xenforo.com/community
+##.notice--cookieAdvanced
+! my.invisalign.cz / my.invisalign.eu / my.invisalign.nl
+##.cookie_cookie-bar__2c3Jq
+! hotelleuka.com / trafik.eu /taxienalicante.com
+##.darkvclob.bc.minvclob
+! sevendeya.es/escosan.com/inmobiliariaidealpisos.com
+##.cajaNegraAlerta
+##.modalNuestraCookies
+! sanierer.at/florenz-moebel.at/informance.at/livingcarpets.com
+###ccm_welcome
+##.ccm_show.ccm
+! cuny.jobs/southerncompany-engineer.jobs/tradesmen.jobs
+##div.cookie-consent--visible
+##section.cookie-consent--visible
+! asfromania.ro
+###cp-dialog.cp-wrapper
+! onyx-healthcare.com
+##.active.GDPR
+! lippes.com
+##.active.disclaimer
+! gis2go.nl / enigmatry.info
+###confirm.jqmConfirm
+! calabrie.nl / glampingguide.fr / lodgetent.nl
+###st_popup.stElement
+! cabinetdelacourse.com/lemoel-immobilier.com/vconsult-immobilier.com
+##.theme1._1oph9f9._3hmsj._1xb7gam
+! cookie-law-info-bar (not made generic to avoid overlays/disabled scrollbars)
+! https://publicwww.com/websites/%22.cli-modal-backdrop%22/
+###cookie-law-info-bar ~ .cli-modal-backdrop
+###cookie-law-info-bar[style*="border-box; display:"]
+###cookie-law-info-bar[style*="border-box; padding:"]
+###cookie-law-info-bar[style*="bottom:"]
+###cookie-law-info-bar[style*="top: 0px"]
+###cookie-law-info-bar[style*="top:0px"]
+###footer > #cookie-law-info-bar
+###footercontent > #cookie-law-info-bar
+##.container > #cookie-law-info-bar
+##.footer > #cookie-law-info-bar
+##.site-content > #cookie-law-info-bar
+! travnik-realizace.cz/klapal.cz/gammalab.sk
+##.current.blocker.blocker-cookies.jquery-modal
+! starbucks.co.th,ikey.com,movildata.com,pepscan.com
+! https://publicwww.com/websites/master-popups-cookieplus/
+##.mpp-container-position-bottom-bar
+##.mpp-container-position-middle-center
+##.mpp-container-position-top-bar
+! immobil-niederkofler.it/wlkmndys.com/schulenriedenburg.at/kroatien-liebe.com
+! woche-der-meinungsfreiheit.de/wolkenweit.de
+##.pixelmate-banner-bottom
+##.pixelmate-general-banner-wrapper
+! icecat.ru/icecat.fr/icecat.pt
+##.src-containers-cookie-notice-style__cookieNoticeWrapper--1pQtK
+! fzone.cz/fdrive.cz/mobilenet.cz
+##.cmp--var-e.cmp__wrapper
+! yui3 consent, fundamenta.hu
+##.yui3-widget-mask
+##.yui3-widget.cooke-popup
+! letsports.com.br,ateliedaterra.com.br,atitude10.com,displays.com.br
+##[class^="cookieBox-"]
+! ant-notifications
+##.ant-notification-bottom.ant-notification
+! vconsult-immobilier.com,lemoel-immobilier.com,costier-immobilier.com,immorevente.fr,immosurmesure.fr,marin-immobilier.fr,tara-immobilier.com
+##._ghxfkh._3hmsj
+! tasteslovenia.si
+##.gdprBG
+##.privacySettings:not(html):not(body)
+! vsl.dk/vsl.dk/tandteknikerforeningen.dk/serviceforbundet.dk
+##.main_container > .consent_site_cover
+##.main_container > .consent_window
+! vinted.co.uk / vinted regional
+##.sticky-footer > div > div > .c-cell
+! pubpub.org (https://forums.lanik.us/viewtopic.php?p=153103)
+###page-wrapper-component > .legal-banner-component
+! poki (https://github.com/ryanbr/fanboy-adblock/issues/1166)
+###app-root.c > .z
+! coches.net / vibbo.com / milanuncios.com / infojobs.net
+##.sui-CmpUi > .sui-MoleculeNotification
+! tuttishop.ch / farnhammaltings.com / ledluxor.com / sammic.fr
+##.noty_cont > li > .noty_alert > .noty_message
+! superconstellation.org
+##.uk-position-z-index.uk-position-bottom
+! volkswagen
+##.vw5-statisticsOptBox
+! oath.com https://github.com/ryanbr/fanboy-adblock/issues/472
+###cmp-container-id
+###cmp-ui-iframe
+! cookie forum forms
+! summonerswar-fanforum.de / igvw.de/igvwforum/index.php
+###cookies > form
+! Amp Cookies
+###amp-user-notification
+###amp-user-notification1
+! Common Cookie element
+###sliding-popup.sliding-popup-top
+##.biscotto > .biscotto-inner
+##body.sliding-popup-processed > #sliding-popup
+! zoover
+##.docked-bottom.info-bar
+! columbiasportswear (various internation)
+##header > #notify-bar
+! Ebay European Coookies
+###gh-gb
+##.gh-banner
+##.gh-banner-active
+! Google-cookie
+###epbar
+###gb[style="min-width: 980px;"] > .gb_wb
+###pushdown > .gb_ib
+###pushdown > .gb_wb
+##div > #cnsh[style="display: block;"]
+##div[style="min-width: 750px;"] > .gb_wb
+! skoda
+##.skoda5-statisticsOptBox
+! Tomshardware
+###prism-modal.prism-modal
+! Kinja-related sites
+###newprivacy > .alert-box
+! international generic
+###bottom_dialog > #bottom_dialog_inner
+###ck_row
+###dgsvoLayer
+###kki_div
+###lytic_askbox
+###sf-minisite-toolbar
+###xcm-bar
+###zwcc
+##.as-oil-content-overlay
+##.bst-panel
+##.c_i_container
+##.cmplz-soft-cookiewall
+##.elisa-navi-cookie-and-consent-disclaimer
+##.rcc-panel
+##.recocliv2
+##.show.cp-wrap
+!-------------------------Third-party blocking rules--------------------------!
+! *** easylist:easylist_cookie/easylist_cookie_thirdparty.txt ***
+||acconsento.click^$third-party
+||admiral.mgr.consensu.org^$third-party
+||akamaihd.net/cpmt/
+||alicdn.com/puckinn/cookie-consent-sdk/
+||amazonaws.com/privacy-notice.js
+||analytics-consent-manager.azureedge.net^
+||app.livemarketshoppers.com^$script,third-party
+||app.yeps.io/loader?
+||appconsent.io^
+||assetlab.io/consent/
+||axept.io^$third-party,domain=~axeptio.eu
+||axeptio.eu^$third-party
+||baycloud.com/tgcl.min.js
+||c.evidon.com/dg/dg.js$script
+||californiatimes.com/gdpr/
+||cc.anytrack.de^
+||ccm19.de^$third-party
+||ccm19boros.de^$third-party
+||ccmp.eu^$third-party
+||ccpa-script.psg.nexstardigital.net^
+||ccpa.sp-prod.net^
+||cdn-cookieyes.com/client_data/
+||cerezgo.com^$third-party
+||civiccomputing.com^*/cookieControl-
+||civiccomputing.com^*=cookie$third-party
+||clickio.mgr.consensu.org^$third-party
+||clickiocdn.com/t/cmp/$third-party
+||clickiocmp.com^$third-party
+||clickskeks.at^$third-party
+||cloudstorage.secureserver.net/recomm-apps-upm/
+||cmp.gemius.com^
+||cmp.quantcast.com/choice/*/www.themoneytizer.com/choice.js
+||cmp.setupcmp.com^
+||cmp.sibbo.net^
+||collectconsent.com^$third-party
+||conscent.in^$third-party
+||consensu.io^$third-party
+||consensu.org/gdpr/$third-party
+||consent.dadoslegais.com^
+||consent.digiapi.com^
+||consent.dk^$third-party
+||consent.prointernet.com^
+||consent.trustarc.com/get?name=$subdocument,domain=avantiwestcoast.co.uk|oracle.com
+||consent.truste.com/get?name=notice.js$script
+||consentag.eu^$third-party
+||consentframework.com^$third-party
+||consentmanager.mgr.consensu.org^$third-party
+||consentmanager.net^$third-party
+||controlcookies.com^$third-party
+||cookie-accept.com^$third-party
+||cookie-lista.cz^$third-party
+||cookie-script.com^$third-party
+||cookie.consents.app^
+||cookie.pearshealthcyber.com^
+||cookie.support^$third-party
+||cookieapi.incomit.dk^
+||cookieapi2.incomit.dk^
+||cookieassistant.com^$third-party
+||cookiebot.com^$third-party
+||cookiebox.ro^$third-party
+||cookiechoices.org^$third-party
+||cookiecode.nl/dist/latest.js
+||cookieconsent.com^$third-party
+||cookiefirst.com^$third-party
+||cookieform.pl^$third-party
+||cookiehub.net^$third-party
+||cookieinformation.com/*/*.js$third-party
+||cookieinformation.com^$subdocument,third-party
+||cookieinfoscript.com^$third-party
+||cookielab.dk^$third-party
+||cookiemanager.onm.de^
+||cookiemanager1.contentforces.com^$third-party
+||cookiemonster.is^$third-party
+||cookieq.com^$third-party
+||cookiereports.com^$third-party
+||cookies.fo^$third-party
+||cookies.innershed.co.uk^
+||cookiescript.info^$third-party
+||cookiespool.com^$third-party
+||cookiesregister.deltacommerce.com^
+||cookietagmanager.net^$third-party
+||cookiethough.dev^$third-party
+||cookietractor.com^$third-party
+||cookiewidget.eu^$third-party
+||crta.and.co.uk^
+||cscript-cdn-irl.cassiecloud.com/loader.js
+||cscript-cdn-use.cassiecloud.com/loader.js
+||cscript-cdn-use.concordia.ca/loader.js
+||d2eucw4fxv7nil.cloudfront.net^
+||d3macwxrvlvlf8.cloudfront.net/cookie-service/
+||dmgmediaprivacy.co.uk^$third-party
+||donkeymob.com^$third-party
+||ecookie.nl^$third-party
+||efilli.com/efl.js
+||efilli.com^$third-party
+||elmobot.eu^$third-party
+||falconcookie.de^$third-party
+||fastcmp.com^$third-party
+||fc2.com/share/js/gdpr/
+||form-renderer.trustarc.com/browser/client.js
+||freeprivacypolicy.com^$third-party
+||fsdn.com/con/js/sftheme/cmp2.js
+||fusedeck.net^$third-party
+||gatekeeperconsent.com^$third-party
+||gdpr-legal-cookie.beeclever.app^$third-party
+||gdpr-service.herokuapp.com^$third-party
+||gdpr-settings.s3.amazonaws.com^
+||gdpr.es^$third-party
+||gdpr.studybreakmedia.com^
+||getcomplied.com^$third-party
+||getsitecontrol.com^$third-party
+||global.mgr.consensu.org^$third-party
+||goadopt.io^$third-party
+||grvmedia.com^$third-party
+||gstatic.com/glue/cookienotificationbar/
+||hs-banner.com^$third-party
+||hu-manity.co/hu-banner.min.js
+||illow.io/public/cookies/
+||incomaker.b-cdn.net/wpjcz.js
+||inmobi.com^$third-party
+||intermarkets.net^$third-party
+||iubenda.com^$third-party
+||izinal.com^$third-party
+||jimstatic.com/ckies.js
+||ketchjs.com/lanyard/
+||kookiecheck.cz/static/script/
+||lawwwing.com/widgets/$third-party
+||legalmonster.com^$third-party
+||lgpdy.com^$third-party
+||live.mrf.io/statics/1w/$script,xmlhttprequest
+||macaron-cookie-data.decms.eu^
+||marfeel.mgr.consensu.org^$third-party
+||messaging.sourcepoint.com^
+||mgr.consensu.org/iframe.html
+||microsoft.com/mscc/
+||mycookies.it^$third-party
+||network-n.com^$third-party
+||ocdn.eu/blikk_static/blikk/consent_v2/
+||ogury.mgr.consensu.org^$third-party
+||oil.axelspringer.com^$third-party
+||onetag.mgr.consensu.org^$third-party
+||onetrust.com^$third-party
+||onetrust.mgr.consensu.org^$third-party
+||optanon.blob.core.windows.net^
+||orangeclickmedia.com^$third-party
+||orangepix.it/cookie/
+||plugin.management^
+||privacidade.integra.global^$third-party
+||privacy-cdn.sixfifty.com^
+||privacy-center.org^$third-party
+||privacy.clion.agency^$third-party
+||privacy.digimedia.com^
+||privacy.wum.rocks^
+||privacybee.com^$third-party
+||privacylab.it^$third-party
+||privacymanager.io^$third-party
+||privacytools.com.br^$third-party
+||private.dmscookie.com^$third-party
+||publy.net^$third-party
+||pubtech.ai^$third-party
+||quantcast.mgr.consensu.org^$third-party
+||raccogliereilconsenso.com^$third-party
+||recogerconsentimiento.com^$third-party
+||registroconsensi.it^$third-party
+||ressource.gdpr-banner.awsmpsa.com^
+||s.eick.it/js/consentUi.js
+||s.yimg.com/oa/consent.js
+||safeopt.com^$third-party
+||sammledenkonsens.com^$third-party
+||scrookie.nl^$third-party
+||sddan.mgr.consensu.org^$third-party
+||secureprivacy.ai/secureprivacy-plugin/$third-party
+||securiti.ai/consent/
+||seeyourdata.de^$third-party
+||sharethis.mgr.consensu.org^$third-party
+||sibboventures.mgr.consensu.org^$third-party
+||signatu.com^$third-party
+||smart.idmnet.pl/consent/
+||smartcookies.it^$third-party
+||smarteucookiebanner.upsell-apps.com^
+||sourcepoint.mgr.consensu.org^$third-party
+||t.atmng.io^$third-party
+||tarteaucitron.io/load.js
+||termly.io^$third-party
+||thirdfloor.it^$third-party
+||thisisdone.com/gdpr/$third-party
+||transcend.io^$third-party
+||truendo.com^$third-party
+||truevaultcdn.com^$third-party
+||truyoproductionuscdn.truyo.com^
+||ucookie.app^$third-party
+||uniconsent.mgr.consensu.org^*.cmp.js$third-party
+||unpkg.com/cookie-though
+||usercentrics.eu^$third-party
+||volksbund-cookie.de^$third-party
+||webcache-eu.datareporter.eu^
+||webcache.datareporter.eu^
+||widget.clym-sdk.net^$third-party
+||widgets.openli.com^
+||wpcc.io^$third-party
+||x-c.eu^$third-party
+! privacy-mgmt.com
+||cdn.privacy-mgmt.com^$domain=anisearch.com|anisearch.de|anisearch.es|anisearch.fr|anisearch.it|anisearch.jp|consent-manager.ft.com|idealo.co.uk|marketwatch.com|startsiden.no|taz.de|wsj.com
+! Consent Trackers
+||opencmp.net^$script,third-party
+!--------------------------Specific blocking filters--------------------------!
+! *** easylist:easylist_cookie/easylist_cookie_specific_block.txt ***
+/otSDKStub.js$script,domain=dhl.de
+/ppp/js/permission-client$domain=hilfe.gmx.net|mein.web.de|meinaccount.gmx.net
+/wp-content/blog-plugins/wordads-classes/js/notice.bundle.js$script
+||7plus.com.au/js/CookieNotice
+||agicssecurity.com/Header/ajax/cookie.php
+||arfeconsultors.com/static/js/vendor/cookies-text-ca.js
+||asus.com/js/*/alert-info.js
+||banner.cookiescan.com^
+||beckett.design/system/scripts/apc/apc.js
+||beyondtrust.com^*cookie-notice$xmlhttprequest,domain=beyondtrust.com
+||bysarahkhan.com/wp-content/plugins/surbma-yes-no-popup/
+||cb-mms.carbuyer.co.uk^
+||cc.werk3.de/public/app.js
+||cdn-cookieyes.com^$domain=lykke.com|meiro.io|tarisio.com
+||cdn259.talksport.com^
+||channel4.com/consent/
+||cmp-static.nature.com^
+||cmp.cdn.thesun.co.uk^
+||cmp.cdn.thesun.ie^
+||cmp.courrierinternational.com^
+||cmp.finn.no^
+||cmp.graziadaily.co.uk^
+||cmp.huffingtonpost.fr^
+||cmp.infopro-digital.com^
+||cmp.lavie.fr^
+||cmp.lemonde.fr^
+||cmp.lepoint.fr^
+||cmp.netzwelt.de^
+||cmp.nouvelobs.com^
+||cmp.osano.com^
+||cmp.parkers.co.uk^
+||cmp.playpilot.com^
+||cmp.tech426.com^
+||cmp.tek.no^
+||cmp.telerama.fr^
+||cmp.uniconsent.com^
+||cmpv2.pcworld.com^
+||coco.we-online.com/public/app.js
+||conclude.com/assets/build/combined.$script
+||consent.23g.io^
+||consent.amateurphotographer.co.uk^
+||consent.canalboat.co.uk^
+||consent.cmp.oath.com^
+||consent.cookiefirst.com^
+||consent.nationalworld.com^
+||consent.pilotweb.aero^
+||consent.stuff.tv^
+||consent.thecountrysmallholder.com^
+||consent.thegreatoutdoorsmag.com^
+||consent.truste.com^$script,domain=docs.oracle.com|thehindubusinessline.com|wunderground.com
+||cookie-consent.festo.com^
+||cookiebot.eu/uc.js$domain=casio.com|epochtimes.de|expert.de|feinewerkzeuge.de|ikarus.de
+||cookies.lmt.lv^
+||corporate.modivo.com/layout/default/dist/js/cmp.js
+||credit-suisse.com/media/assets/aep/ot-cmp/
+||dam.bbcchannels.com^*/outside-iframe.js
+||dropboxstatic.com/static/atlas/privacy_consent/
+||duotonesports.com^*/public/ccm
+||emerse.com/consent.js
+||famobi.com/assets/js/consent.js
+||flaine.com/build/js/tarteaucitron/
+||freedoflondon.com/Styles/dialog-popup/jquery-ui.js
+||freetls.fastly.net/main/sd-cmp-$domain=spanishdict.com
+||fuse.forbes.com^
+||gallup.com/ux/gcb/
+||gdpr-api.sharethis.com^
+||gdpr.internetbrands.com^
+||government-and-constitution.org/js/consent.js
+||harpercollins.co.uk/js/cookie.js
+||hunstoncanoeclub.co.uk/media/system/js/modal.js
+||icgp.ie/ionic-consent/
+||immozentral.com/js/stylecc
+||inblu.com^*/cookies.js
+||itv.com/itvstatic/assets/cookies-prompt/
+||jacquelinewilson.co.uk/style/cookies.css$stylesheet
+||jimmychoo.com^*/first-time-visitor-
+||jobsite.co.uk/viewlets/consent/
+||jzzo.com/jss/cp01.js
+||kayak.*/privacy/
+||kotaku.com/wrapper/*/gdpr/$xmlhttprequest,domain=kotaku.com
+||lacompagnie.com/Content/dist/templates/common/popupCookies/
+||liquidweb.com/ajax/dataconsentcookies
+||live.mrf.io/cmp/$domain=m.washingtontimes.com
+||mad-daily.com^*/cp-module-
+||marketwatch.com/asset/ace/djcmp.
+||masaltos.com/js/cookies-
+||medicalnewstoday.com/api/ccpa
+||mms.cmpsky.com^
+||myanimelist.net/js/cmp.js
+||mymuesli.com/assets/js/modules/Default/Static/Consent.js
+||next-immo.com/js/cookies.1.min.js
+||nike.com/fragments/privacy-consent?
+||novaljaturist.com/datacollectionpolicy/
+||ogs.google.com/widget/callout?$subdocument,domain=play.google.com
+||omgubuntu.co.uk/wp-content/plugins/omg-magnific/magnific.min.js
+||onlive.co.uk/account/cookie_notice
+||parliamentlive.tv/cookie/
+||prada.com/utag/prada/
+||privacy.claytonhomes.com^
+||privacypolicy.trgr.be^
+||propcom.co.uk/cookie/
+||purevpn.com/loadGdprView
+||push-content.springernature.io^$script
+||route-fifty.com/cookie-policy
+||rtx.com/-/media/base-themes/scroll-lock/
+||sdi.co.uk/cookies/
+||sheinsz.ltwebstatic.com/she_dist/assets/backup-onetrust.$script,domain=shein.co.uk
+||sm-sp.followfollow.com^
+||sourcepoint-mms.aetv.com^
+||sourcepoint-mms.history.com^
+||sourcepoint-mms.mylifetime.com^
+||sourcepoint.avclub.com^
+||sourcepoint.deadspin.com^
+||sourcepoint.dexerto.com^
+||sourcepoint.gizmodo.com^
+||sourcepoint.jalopnik.com^
+||sourcepoint.lifehacker.com^
+||sourcepoint.theonion.com^
+||sourcepoint.theroot.com^
+||sourcepoint.thetakeout.com^
+||storage-mart.com/sm-policy-banner.js
+||stromnetz-hamburg.de/matomo/js/
+||synology.com/js/syno/syno_cookie_element.js
+||tags.tiqcdn.com^$script,domain=firstdirect.com|santander.pl|swisscom.ch
+||tvpworld.com/files/portale-v4/polityka-prywatnosci/js/tvp-tcfapi.js
+||umich.edu/apis/umcookieconsent/
+||vandalism-sounds.com^*/notices.min.js
+||vg247-p2.vg247.com^
+||vg247-uk.vg247.com^
+||vinted.*/api/*/banners
+||windguru.cz/forms/consent.php
+||yimg.com^*/guce.js
+! hotelscombined.* momondo.*
+/privacy/providers/CookiesDataProvider
+! Amasty_GdprCookie
+/Amasty_GdprCookie/*$domain=reclay.at|reclay.de|schleich-s.com
+! https://github.com/easylist/easylist/issues/13127
+/wp-content/plugins/cookie-law-info/public/js/cookie-law-info-public.js
+! privacy-mgmt.com script specific
+! https://github.com/easylist/easylist/issues/12806
+/wrapperMessagingWithoutDetection.js$domain=10kysymysta.fi|2050.de|4fansites.de|4players.de|abiristeilyt.fi|ableitungsrechner.net|abonnement.hln.be|about-drinks.com|ad-alliance.de|adressa.no|advnture.com|aero.de|aftenbladet.no|airliners.de|aktuality.sk|akuankka.fi|altaposten.no|alypaa.com|androidcentral.com|anfieldwatch.co.uk|anime2you.de|apotheken-umschau.de|ariadneathome.nl|ariva.de|auto-motor-und-sport.de|autobild.es|autoexpress.co.uk|automobil-elektronik-kongress.de|autotrack.nl|autotrader.co.uk|autoweek.nl|autowereld.nl|autozeitung.de|avisa-st.no|axelspringer.com|azet.sk|baby-und-familie.de|badoo.com|bafoeg-rechner.de|bautipps.it|bbc.com|bbcgoodfood.com|bbheute.de|bergfex.com|berliner-kurier.de|bestcheck.de|bietigheimerzeitung.de|bikeradar.com|bistro.sk|bitpipe.com|bitpipe.com.br|bladet.no|blick.de|blocket.se|bloomberglinea.com|bnr.nl|boerse.de|bordercountiesadvertizer.co.uk|borncity.com|brighttalk.com|bucksfreepress.co.uk|buffed.de|burda-forward.de|business-punk.com|businessinsider.com|businessinsider.es|calculadora-de-derivadas.com|calculadora-de-integrales.com|camping.info|capital.de|caradisiac.com|caravaning.de|cardscout.de|carmagazine.co.uk|carthrottle.com|cavallo.de|celticway.co.uk|channelpartner.de|charlieintel.com|chefkoch.de|chesterstandard.co.uk|chinahandys.net|cinema.de|cio.com|cio.de|classical-music.com|classicfm.com|clever-tanken.de|closeronline.co.uk|computec.de|computerfrage.net|computerhoy.com|computerweekly.com|computerwoche.de|computerworld.com|countypress.co.uk|countytimes.co.uk|cravenherald.co.uk|crn.com|cryptoticker.io|csoonline.com|dagallemaal.be|dagbladet.no|dailyresearchplot.com|deine-tierwelt.de|deluxemusic.de|demorgen.be|denofgeek.com|derivative-calculator.net|dexerto.com|digilehdet.fi|digitalartsonline.co.uk|discoverwildlife.com|dk-online.de|donaldduck.nl|dpd.com|dpd.de|duden.de|dudleynews.co.uk|dumont.de|dunfermlinepress.com|dvd-forum.at|e24.no|eatsmarter.com|ecomento.de|edpc.eu|eigenhuiseninterieur.nl|eiu.com|elbil24.no|elektroauto-news.net|elle.de|empireonline.com|entertainmentdaily.co.uk|esquire.de|essen-und-trinken.de|esslinger-zeitung.de|expertreviews.co.uk|falmouthpacket.co.uk|familie.de|faroutmagazine.co.uk|fd.nl|feelingwonen.be|filext.com|finanzen100.de|finanzfrage.net|finanznachrichten.de|finanztreff.de|findagrave.com|flair.nl|flights-idealo.co.uk|flowmagazine.nl|flugrevue.de|folkebladet.no|footballtransfers.com|fourfourtwo.com|frag-mutti.de|framtidinord.no|fussballfieber.de|futisporssi.fi|futurism.com|gaelmaison.be|gamesindustry.biz|gamesradar.com|gardenersworld.com|gaspedaal.nl|gat.no|gazetteandherald.co.uk|geo-television.de|geo.de|gladbachlive.de|globalplayer.com|goal.com|godt.no|goedgevoel.be|goom.net|greenocktelegraph.co.uk|gruenderkueche.de|guide-epargne.be|guitarworld.com|gutefrage.net|gutekueche.at|hampshirechronicle.co.uk|handelsblatt.com|hannover.de|harpersbazaar.de|haus.de|helpforum.sky.com|helpster.de|herefordtimes.com|himosjuhannus.fi|hitc.com|hitra-froya.no|hobbyconsolas.com|hockeygm.fi|ht.no|humo.be|ibancalculator.com|idealo.at|idealo.co.uk|idealo.com|idealo.de|idealo.dk|idealo.es|idealo.fi|idealo.fr|idealo.in|idealo.it|idealo.nl|idealo.no|idealo.pl|idealo.pt|idealo.se|iltapulu.fi|impartialreporter.com|indebuurt.nl|independer.be|innherred.no|instyle.de|integral-calculator.com|integral-calculator.ru|integralrechner.de|intermediair.nl|iskelma.fi|iskelmafestivaali.fi|itpro.co.uk|itpro.com|itromso.no|jameda.de|jamiegeller.co|jetzt.de|jobat.be|joe.be|justjared.com|justthenews.com|jysari.fi|kachelmannwetter.com|kiosk.nl|kk.no|kkuriren.se|klamm.de|klara.be|kn-online.de|komando.com|krzbb.de|kuechengoetter.de|kuopiorock.fi|lancashiretelegraph.co.uk|laptopmag.com|lbc.co.uk|leaderlive.co.uk|lecker.de|leijonaporssi.fi|lemagit.fr|leonberger-kreiszeitung.de|lepoint.fr|leserreisen.mz-web.de|leukstetickets.nl|libelle.nl|liberation.fr|liigaporssi.fi|linux-magazin.de|livefortheoutdoors.com|livescience.com|livingathome.de|livios.be|ln-online.de|lossebladen.nl|lovelybooks.de|maclife.de|macwelt.de|macworld.com|maennersache.de|malservice.aftonbladet.se|margriet.nl|marieclaire.co.uk|mcnmotorcycleshow.com|mediaimpact.de|meidastouch.com|mein-schoener-garten.de|meineorte.com|menshealth.de|mensjournal.com|meteologix.com|mijnenergie.be|minmote.no|mishtalk.com|mixed-news.com|mnm.be|monenergie.be|morewithvpro.com|mountainbike-magazin.de|moz.de|muehlacker-tagblatt.de|mumsnet.com|musicradar.com|myfitnesspal.com|myhomebook.de|n-page.de|nationalevacaturebank.nl|nebenan.de|nehnutelnosti.sk|nelonen.fi|nelonenmedialive.fi|netdoktor.de|netmoms.de|networkworld.com|neuepresse.de|nexttv.com|nexusmods.com|nitro-tv.de|nnn.de|northwaleschronicle.co.uk|nostalgie.be|nouveau.nl|nowtv.com|nowtv.it|noz.de|nrj.be|oekotest.de|onvista.de|oskar.de|oudersvannu.nl|parool.nl|pcgamer.com|pcgamesn.com|pclifecyclemanagement.com|pcwelt.de|pcworld.com|pcworld.es|pent.no|phonostar.de|photovoltaikforum.com|planet3ds.de|planetds.de|planetgameboy.de|planetiphone.de|planetradio.co.uk|planetswitch.de|planetvita.de|playboy.de|playpilot.com|playstationportable.de|podme.com|podplay.com|politico.eu|portablegaming.de|prad.de|praxisvita.de|pricespy.co.uk|pride.com|prignitzer.de|primo.be|prinz.de|proplanta.de|qmusic.be|qmusic.nl|qz.com|racefans.net|radio.at|radio.de|radio.dk|radio.es|radio.fr|radio.it|radio.net|radio.pl|radio.pt|radio.se|radio1.be|radio2.be|radiocity.fi|radionova.fi|radioplay.fi|radiopooki.fi|rakennuslehti.fi|realitytitbit.com|reclamefolder.nl|redensarten-index.de|reisefrage.net|rheinpfalz.de|rmj.fi|roadbike.de|rockfest.fi|romfordrecorder.co.uk|rtl-passion.de|rtlplus.de|rugbydump.com|rugbyonslaught.com|sanakirja.org|sanoma.fi|scholieren.com|schoolbank.nl|schwarzwaelder-bote.de|sciencefocus.com|second-hand.it|seher.no|selbermachen.de|senioren-ratgeber.de|shz.de|si.com|sir-apfelot.de|sky.de|skysports.com|snow-forecast.com|sol.no|somersetcountygazette.co.uk|soundis.gr|southwalesargus.co.uk|spaargids.be|space.com|speed.io|spielaffe.de|sportbible.com|sportnews.bz|sportnieuws.nl|sportsmole.co.uk|sporza.be|spox.com|startpagina.nl|stijlvol-wonen.com|story.nl|streampicker.de|stubru.be|studis-online.de|studyflix.de|stuff.tv|stuttgarter-nachrichten.de|stuttgarter-zeitung.de|sueddeutsche.de|sueddeutscher-verlag.de|suedtirolnews.it|suomipopfestivaali.fi|suomitutka.fi|sv-veranstaltungen.de|svz.de|swmh.de|swp.de|t3.com|t3n.de|tahkojuhannus.fi|tammerfest.fi|tecchannel.de|techadvisor.com|techadvisor.fr|techhive.com|techradar.com|techstage.de|techtarget.com|techtarget.de|techtarget.fr|telegraph.co.uk|telepolis.de|telmi.it|testedich.de|teveblad.be|thatgrapejuice.net|the-decoder.com|the-decoder.de|the-sun.com|theboltonnews.co.uk|thecelticblog.com|thechelseachronicle.com|thedailymash.co.uk|thedrive.com|theloadout.com|thenational.scot|thenorthernecho.co.uk|thepeoplesperson.com|thepinknews.com|thepoke.co.uk|thescottishsun.co.uk|theserverside.com|thestreet.com|thesun.co.uk|thesun.ie|thetab.com|thetimes.co.uk|tijdschrift.nl|toggo.de|tomshardware.com|topgear.com|totaaltv.nl|travelbook.de|tronderbladet.no|tv14.de|tv2.no|tvfamilie.be|tvnow.at|tvnow.de|unnuetzes.com|unsere-helden.com|utopia.de|vaalikone.fi|vdi-nachrichten.com|veronicasuperguide.nl|vice.com|vip.de|visit-hannover.com|viva.nl|vkmag.com|vkz.de|voice.fi|vol.no|volkskrant.nl|vox.de|vrt.be|vrtinternational.com|vtm.be|vtmgo.be|vtwonen.be|vtwonen.nl|wallstreet-online.de|wanajafestival.fi|watfordobserver.co.uk|webwinkel.ad.nl|webwinkel.bndestem.nl|webwinkel.destentor.nl|webwinkel.ed.nl|webwinkel.gelderlander.nl|webwinkel.pzc.nl|webwinkel.volkskrant.nl|wetteronline.de|whathifi.com|whats-on-netflix.com|wieistmeineip.de|willy.radio|windowscentral.com|winhappy.com|wirralglobe.co.uk|wisden.com|wiwo.de|wonenlandelijkestijl.com|worcesternews.co.uk|wowtv.de|www.sky.com|www.sky.it|zozitdat.nl|zvw.de
+! cmp.quantcast.com specifics
+||cmp.quantcast.com^$script,domain=168.hu|24.hu|9gag.com|advertiserandtimes.co.uk|aek365.org|agoravox.tv|agrarszektor.hu|aguaita.cat|aixmi-news.gr|alvolante.it|anandtech.com|anatropinews.gr|androidhow.eu|anglocelt.ie|aostasera.it|apkmirror.com|araberara.it|arkadium.com|armaghi.com|arvokisat.com|askandyaboutclothes.com|athensmagazine.gr|auto1.fi|autoevolution.com|autoszektor.hu|autotriti.gr|autotypos.gr|autovillage.co.uk|avgi.gr|awfulannouncing.com|balls.ie|bankingnews.gr|base64encode.org|baseball-reference.com|bedienungsanleitu.ng|beebom.com|belfastlive.co.uk|birminghammail.co.uk|blogit.fi|blograffo.net|bloody-disgusting.com|bluerating.com|boingboing.net|boredpanda.com|boxrec.com|bright.nl|bristolpost.co.uk|bruksanvisni.ng|bruksanvisningpdf.no|businessnews.gr|businesspost.ie|bustle.com|buzz.ie|buzzfeed.com|buzzfeednews.com|calciomercato.com|cambridge-news.co.uk|cambridgeindependent.co.uk|camelcamelcamel.com|capital.gr|car.gr|carscoops.com|century21.pt|champion.gg|chattestdu.de|cheatsheet.com|cheshire-live.co.uk|chroniclelive.co.uk|citizen.co.za|cityam.com|clevescene.com|cm-tv.pt|cmjornal.pt|cnn.gr|comozero.it|comuniate.com|comunio.de|comunio.es|concertarchives.org|confidenze.com|convertcase.net|cornwalllive.com|coventrytelegraph.net|csakfoci.hu|cyclingweekly.com|dagospia.com|dailypost.co.uk|dailyrecord.co.uk|dailystar.co.uk|defencenet.gr|deliaonline.com|derbytelegraph.co.uk|devonlive.com|diarimes.com|digital-forum.it|dirtfish.com|docer.pl|donnaglamour.it|donnons.org|doogal.co.uk|dotabuff.com|dublinlive.ie|ebredigital.cat|ebresports.cat|eccgreece.gr|echoboomer.pt|ecodelchisone.it|economx.hu|edinburghlive.co.uk|ekathimerini.com|elcorreoweb.es|elitedaily.com|eltravesser.cat|elvallenc.cat|enternity.gr|enyugat.hu|espalhafactos.com|esport1.hu|ethnos.gr|eurheilu.org|euro2day.gr|euromaidanpress.com|euroweeklynews.com|examinerlive.co.uk|ezgif.com|f1sport.it|fandomwire.com|fark.com|femina.hu|fichier-pdf.fr|figyelo.hu|findance.com|fiorentinanews.com|fiorentinauno.com|flash.pt|flashback.org|flatpanelshd.com|foititikanea.gr|fokidanews.gr|folhetospromocionais.com|food-supply.se|forbes.it|foreca.com|foreca.de|foreca.dk|foreca.ee|foreca.fi|foreca.fr|foreca.gr|foreca.lv|foreca.pl|foreca.ro|foreca.se|forecaweather.com|forvo.com|freeads.co.uk|freizeitmagazinplus.de|g1novelas.fun|game-experience.it|gamekapocs.hu|gamesystemrequirements.com|gawker.com|gayburg.com|gazettelive.co.uk|gazzetta.gr|gekkonen.net|gepigeny.hu|getsurrey.co.uk|gettr.com|gianlucadimarzio.com|giornaledeinavigli.it|glasgowlive.co.uk|gloucestershirelive.co.uk|gonews.it|gpfans.com|grampianonline.co.uk|granthamjournal.co.uk|gsplus.hu|guru3d.com|handleidi.ng|hasznalati-utasitasok.hu|hauskimmat.fi|hejto.pl|herkkusuut.com|hertfordshiremercury.co.uk|hirado.hu|hirklikk.hu|html-cleaner.com|huang-dan.vn|huffingtonpost.gr|huffpost.com|iefimerida.gr|igenyesferfi.hu|iho.hu|ilcentro.it|ilcittadinomb.it|ilcuoreinpentola.it|ilgallo.it|ilmainensanakirja.fi|imerisia.gr|index.hu|infodefensa.com|informazionefiscale.it|infostart.hu|insider.gr|instrukcjaobslugipdf.pl|inverness-courier.co.uk|inverse.com|invisibletext.com|irc-galleria.net|irishradiolive.com|joblo.com|jornaldenegocios.pt|jta.org|juhend.ee|juridicas.com|kaposvarmost.hu|kapsels.net|kayttooh.je|kentlive.news|kentonline.co.uk|kicktipp.ch|kicktipp.co.uk|kicktipp.com|kicktipp.de|kicktipp.fr|kilokalori.net|klubradio.hu|koeajolle.com|konsolifin.net|kontranews.gr|kotimaatutuksi.fi|ku.fi|kullanimkilavuzu.com.tr|kuvake.net|lacittadisalerno.it|lacronica.net|laliiga.com|lanotiziagiornale.it|lanuovaprovincia.it|laregion.es|laskurini.fi|latuaauto.com|lavocedeltrentino.it|lcpdfr.com|lectormanga.com|lectortmo.com|leeds-live.co.uk|leicestermercury.co.uk|leijonat.com|letras.com|life.hu|lightnovelpub.com|lincolnshirelive.co.uk|linkvertise.com|liverpoolecho.co.uk|lleida.com|lomamatkalle.fi|lopcio.cat|lwlies.com|lynnnews.co.uk|m4sport.hu|magnesianews.gr|magyarepitok.hu|magyarnarancs.hu|maidenhead-advertiser.co.uk|makeitmeme.com|mamaclever.de|manchestereveningnews.co.uk|manua.ls|manual.ar|manual.bo|manual.com.ve|manual.cr|manual.do|manual.ec|manual.gt|manual.hn|manual.md|manual.nz|manual.pa|manual.pe|manual.sv|manualdeinstructiuni.ro|manualeduso.it|manuales.com.co|manuales.mx|manualpdf.cl|manualpdf.co.il|manualpdf.com.br|manualpdf.es|manualpdf.ge|manualpdf.in|manualpdf.pt|manuals.ca|manuals.co.uk|manualspdf.ru|manualypdf.cz|marketnews.gr|maxima.pt|mediaklikk.hu|medicalexcellencetv.it|megatv.com|meneame.net|menoinfo.fi|metropoli.net|metrotimes.com|mindmegette.hu|minecrafteo.com|minutesports.fr|mirror.co.uk|mobilarena.hu|modesdemploi.fr|mononews.gr|monza-news.it|motorbakery.com|motorbox.com|mtva.hu|mundodevalor.me|musescore.com|musicmundial.com|muycomputer.com|muycomputerpro.com|mylondon.news|myonlineradio.at|myonlineradio.de|myonlineradio.hu|myonlineradio.sk|myradioendirect.fr|myradioenvivo.ar|myradioenvivo.mx|myradioonline.cl|myradioonline.es|myradioonline.it|myradioonline.pl|myradioonline.ro|nainen.com|nanoreview.net|napi.hu|nationalreview.com|neokohn.hu|neolaia.gr|neowin.net|newburytoday.co.uk|newmoney.gr|newsauto.gr|newsbomb.gr|newscon.net|newsit.gr|newsprima.it|nhlsuomi.com|ni.dk|noizz.hu|nookazon.com|nordic.ign.com|nostemedia.fi|noticiasaominuto.com|notiziaoggi.it|notizie.it|nottinghampost.com|novaconca.cat|novatarrega.cat|nove.firenze.it|nownews.gr|nydus.org|nylon.com|observador.pt|oeffentlicher-dienst.info|oggicronaca.it|olsztyn.com.pl|ominho.pt|onalert.gr|online-tech-tips.com|onlinetvrecorder.com|order-order.com|ot.gr|outputter.io|overclock.net|pallarsdigital.cat|paopantou.gr|parameter.sk|paraphraser.io|parapolitika.gr|paratiritis-news.gr|patient.info|patrisnews.com|pc-builds.com|pcguia.pt|pcworld.hu|pcwplus.hu|pdfmanualer.dk|pellanews.gr|penzcentrum.hu|pestisracok.hu|petapixel.com|petit-fichier.fr|petofilive.hu|petunjuk.co.id|phandroid.com|phoronix.com|pienimatkaopas.com|pietsmiet.de|pistonheads.com|playdome.hu|player.hu|playpilot.com|policenews.gr|portfolio.hu|postal.pt|potku.net|pplware.sapo.pt|pr0gramm.com|pressgiochi.it|prevezanews.gr|prezzibenzina.it|primaalessandria.it|primabelluno.it|primabergamo.it|primabiella.it|primabrescia.it|primachivasso.it|primacomo.it|primacremona.it|primacuneo.it|primadituttomantova.it|primadituttomilano.it|primadituttoverona.it|primafirenze.it|primailcanavese.it|primaillevante.it|primalamartesana.it|primalariviera.it|primalavalcamonica.it|primalavaltellina.it|primalecco.it|primalodi.it|primamerate.it|primamodena.it|primamonza.it|primanovara.it|primapadova.it|primapavia.it|primareggioemilia.it|primarovigo.it|primasaronno.it|primasettimo.it|primatorino.it|primatreviglio.it|primatreviso.it|primavenezia.it|primavercelli.it|primavicenza.it|prirocnikpdf.si|prirucky.sk|prirucnici.hr|proff.no|pronews.gr|protagon.gr|protothema.gr|publico.pt|pwinsider.com|qollanmalar.uz|racedepartment.com|radiosei.it|raketa.hu|reader.gr|real.gr|receitasdalyra.com|record.pt|remixsearch.net|researchgate.net|retesport.it|ridikul.hu|riemurasia.net|ripollesdigital.cat|rokasgramataspdf.lv|rolex.com|rssing.com|rubitv.cat|rugbynetwork.net|sabado.pt|sagepub.com|salernogranata.it|sapo.pt|sardiniapost.it|sciencealert.com|sdna.gr|secretchicago.com|secretnyc.co|secretsanfrancisco.com|segmentnext.com|setmanarilebre.cat|shropshirestar.com|sienafree.it|sitytrail.com|skai.gr|sketsi.net|smartbrief.com|sneakertoast.com|soccerway.com|softpedia.com|somersetlive.co.uk|sonobi.com|sorozatbarat.club|spaldingtoday.co.uk|spellcheck.net|sport-fm.gr|sportdog.gr|sportitalia.com|sportsupa.com|sportti.com|star.gr|stara.fi|staynerd.com|stokesentinel.co.uk|suffolknews.co.uk|sulinformacao.pt|suomi24.fi|suomif1.com|suomifutis.com|suomikiekko.com|suomikoris.com|suomiurheilu.com|superbru.com|susijengi.com|szegedma.hu|szeretlekmagyarorszag.hu|tanea.gr|tarragonadigital.com|tasty.co|techblog.gr|techspot.com|tecmint.com|telenicosia.it|telsu.fi|tempoitalia.it|tennisnews.gr|tenyek.hu|terveydenasialla.com|testeri.fi|the-race.com|theatlantic.com|thebest.gr|themirror.com|thessnews.gr|thestreamable.com|theweek.com|tilannehuone.fi|time.is|timeanddate.com|timeout.com|timesofisrael.com|timesofmalta.com|tinderinparhaat.com|todotest.com|topontiki.gr|tovima.gr|tradera.com|trustedreviews.com|tvrepublika.pl|tvxs.gr|tyyliniekka.fi|udhezimet.al|ukradiolive.com|unboxholics.com|unknownphone.com|uploadvr.com|uputstvo.rs|urbaanisanakirja.com|usermanuals.au|vadovaspdf.lt|valioliiga.com|vallesabbianews.it|vau.fi|velvet.hu|venturebeat.com|vidas.pt|videogameschronicle.com|viikonloppu.com|viranomaisuutiset.fi|vivicrema.cremaonline.it|voetbalprimeur.nl|voicenews.gr|volleyball.it|voria.gr|vozpopuli.com|walesonline.co.uk|webnews.it|wedotv.com|whatismyipaddress.com|wikimonde.com|wordcounter.icu|worldpopulationreview.com|wow-professions.com|xcweather.co.uk|xn----2lbcmca4cdtsdb1c.gr|xn--80aaexjatkpdggghih8b1a2yhv.com.ua|xn--80adah2aybmok5f.bg|xn--80apbinjhb8d.xn--d1alf|xn--80aweql3c59aea5q.xn--80ao21a|xn--l2bmcno7cen.xn--i1b6b1a6a2e|xn--vg1b14l6tk.xn--3e0b707e|xuletas.es|youfly.com|yourmoney.com|yourtipster.gr|youweekly.gr|zarpanews.gr|zenger.news|zonalocale.it|zoom24.it|zougla.gr
+! cookielaw.org specifics
+||cookielaw.org^$domain=aarrelehti.fi|aiheenasyopa.fi|boxrox.com|callawaygolfpreowned.com|cdon.fi|elisaviihde.fi|finder.fi|findit.fi|findus.fi|ign.com|intel.com|koneviesti.fi|maaseuduntulevaisuus.fi|metrotukku.fi|mtv.fi|mtvyritys.fi|ouka.fi|rollingstone.com|skanska.fi|sponda.fi|suomela.fi|suomi24.fi|urbandictionary.com|viestimedia.fi
+! trustcommander.net
+||cdn.trustcommander.net/privacy/$script
+! teufelaudio
+||teufel.*/privacy-layer
+||teufelaudio.*/privacy-layer
+! cookiepro.com specifics
+||cookiepro.com^$domain=urbandictionary.com
+! fundingchoicesmessages (consents)
+||fundingchoicesmessages.google.com^
+!------------------------Specific element hiding rules------------------------!
+! *** easylist:easylist_cookie/easylist_cookie_specific_hide.txt ***
+lyrath.com###ACClayerBackground
+adoc.pub###ADOCPUB_cookie_boxx
+jman.tv###ActionBar
+raikago.com###Autoketing-Spu__cookieBanner-module__wrapCookieBanner
+sausageandciderfestival.co.uk###CC_Bar
+coek.info###COEKINFO_cookie_box
+ambulance-photos.com,bus-and-coach-photos.com,classic-and-vintage-cars.com,construction-and-excavation.com,fire-engine-photos.com,military-vehicle-photos.com,planesandchoppers.com,racing-car-photos.com,shipsandharbours.com,taxi-photos.com,traction-engines.net,tractor-photos.com,train-photos.com,truck-photos.net###CQ
+snitcher.com###CoCon
+wineinvestmentfund.com###Contentplaceholder1_TAEB3815A051_Col00
+nymity.com###CookieAcceptSubLayout1_cookiesmessageshown
+fruugo.co.nz###CookieBanner
+mauldineconomics.com###CookieControl
+lttstore.com###Cookies-wrapper
+saleappliancesltd.co.uk###CybotCookiebotDialogWrapper
+edoc.pub###EDOCPUB_cookie_box
+epdf.tips###EPDFTIPS_cookie_box
+franchisegator.com###EUWarning
+aberdeenplumberservices.co.uk,firstcallmotorbreakdown.co.uk,pattheduck.com###FISLCC
+megabus.com###GB_overlay
+gamivo.com###GTM-cookie-consent
+xclacksoverhead.org###LegalCookieNotice
+moam.info###MOAMINFO_cookie_box
+pdfcoffee.com###PDFCOFFEECOM_cookie_box
+mikolaimusic.com,project7armor.com,vakigrad.com###POPUPS_ROOT
+provantage.com###PP
+lvvwd.com###PolicyNotice
+phonevalidator.com,skipsmasher.com,spydialer.com###PopupMessage
+findhs.codes###PrivacyAlert
+brighteon.tv###PrivacyNotice
+theregister.com###RegCTBWF
+charmsoflight.com###SCAhldr
+creativecow.net###SCK
+adventurecu.org###StickyFooter
+realtor.ca###TOUMsgCon
+digit-photo.com###TwGi0pOnXb-page
+warnerbros.com###WB-floating-notice
+postojnska-jama.eu###\5f iCD
+gillian-guide.github.io,globox1997.github.io###__consent
+govirtuo.com###__next > div[class^="virtuo_"]
+ups.com###__tealiumImplicitmodal
+coloradocollege.edu###_pc
+tuya.com###_th-trust
+abramsbooks.com###abr_cookie_modal
+jemako.com###acb-wrapper
+presta-module.com###acbModal
+brulocalis.brussels###acc-bottom
+sharedinvestigator.com###accept-sip-popup-container
+dallasinnovates.com,hawke.ai###acceptance
+hoverwatch.com###acceptbar
+manorbythelake.co.uk###acf-cookie-notice
+mod.io###achtung-overlay
+calpacifichomes.com###acknowledgeCookiesAndPrivacyModal
+jobisjob.co.uk###adevinta_consents_cookies_universal_widget
+vapostore.com###adns_cookies_container
+javlibrary.com###adultwarningmask
+aecom.com###aecomCookieNotificationBar
+spbtv.online###agreeC
+basecamelectronics.com###agreement-alert
+bracketfights.com,tiermaker.com###agreementMessage
+ibispaint.com###agreementPane
+airvpn.org###air_cookielaw_container
+chefoo.co.uk,godbolt.org###alert
+rome2rio.com###alert-banner
+youtube.com###alert-banner > .ytd-browse > .yt-alert-with-actions-renderer
+supermicro.com###alert-container
+fhs.swiss###alert-nlpd
+ubet.com.mt###alert_message
+cbc.ca###alert_modal
+heli-one.com###alertmessagewrp
+adcoffee.io###analytics-id
+buckle.com###analytics-prompt
+ao.com###aoMessageHolder
+rugbycoachweekly.net###aos-Cookie-Modal
+uktv.co.uk###back-to-old-site
+shadycharacters.co.uk###banner
+interreg-maritime.eu###banner-overlay-top-page
+shannons.com.au###banner-policies
+bitly.com###banner-spacer
+ancestry.co.uk###bannerOverlay
+harrys.com###banners
+singularshirts.com###bcmp_footer
+project529.com,shop.naturtrend.com###blackout
+aliciagame.com###block-block-6
+london-dental-implant.co.uk###block-london-cookies
+merkle.com,merkleinc.com###block-security-block
+ncaa.com###block-termsofservice
+croatia.rit.edu###blockScrn
+lucidsamples.com###blocksplash
+ab-biotics.com###bloquar_web
+airfleets.net###blur
+afootballreport.com###botnot
+helitecnics.com###botonfooter
+neilpatel.com###bottom-bar
+babeland.com###bottomAlert
+litmind.com###bottom_notice
+freemake.com###bottombar
+cnnsofake.news###bottompopup
+beruby.com###box-shadow
+beersofeurope.co.uk,bootscore.me###bs-cookie-settings
+melijoe.com###bsg-widget-container
+agar.io###btn-privacy-settings
+brandwatch.com###bw-cookie-sys-active
+stemcellclinic.com###c-2
+viomi.com###c-home-tips
+hydraulic-breaker.biz###cCInfo
+netcarshow.com###cNag
+ghx.com###cNotice
+brandonford.com,hartefamilymotors.com###ca-consent-root
+iberianlawyer.com###ca_banner
+campfirewriting.com###campfire-cookie-banner
+infomir.eu###cb
+accounts.meister.co,meisterlabs.com,mindmeister.com###cb-wrapper
+xtraining.kaspersky.com###cbanner
+ubs.com###cboxContent
+armorgames.com###cc-alert
+sdaa-france.com,yellow.place###cc-bar
+waterfall-d-mannose.com###cc-cont
+consoleconnect.com,pccwglobal.com###cc-overlay
+aam-us.org###cc-window
+warwickstudentpad.co.uk###cc_cookie_banner
+skargards.com###cc_dialog
+ovigo.tv###ccnst__main
+ericdraken.com###cconsent-section
+providentcu.org###ccpa
+rohan.co.uk###ccpop
+1parola.it,1word.ws,bestwordlist.com,listediparole.it,ortograf.ws,wikwik.org###cd
+duffay-publicite.com###ch-cookie-consent-modal
+zealy.io###chakra-toast-manager-bottom-right
+cigionline.org###cigi-cookie-consent-container
+news.cision.com###cision-cookie-policy-banner
+apkmoddone.com###ckWrp
+newindianexpress.com###ckgre
+nch.com.au,nchsoftware.com###ckndiv
+bghotelite.com###clb_wr
+cmegroup.com###cmePermissionQuestion
+c3ny.org,means-of-production.com###cnb
+cnbc.com###cnbcgdpr
+courier.net###cnetc
+dnaindia.com,india.com###co-container
+apmhealtheurope.com###coConsent
+mappcouk.com###coki61
+atlasrogues.com###comingsoon
+roseburnbar.co.uk###comp-jhspwm9f
+shadertoy.com###compliance
+nflp.com###compliance-notice
+msn.com###conditionalbanner
+imei24.com###cons
+yopmail.com###cons-pop
+allsaints.com,can-am.brp.com,rag-bone.com###consent-dialog
+netcraft.com###consent-form
+niwa.co.nz###consent-request
+krunker.io,moomoo.io###consentBlock
+privateproperty.co.za###consentManager
+pendleton-usa.com###consentTracking
+wedely.com###consent_cont
+pkgs.org###consent_notice
+mtlfab.com,sporx.com###consentdiv
+hampel-auctions.com###consentmanager
+dovizborsa.com###container > #tools._h4
+mozio.com###container > .dd
+tinder.com###content > span > .App > div[class*="Start"]
+trendmicro.com###content-policy
+convertri.com###convertri-script-consent
+wotinfo.net###coo
+alcoholics-anonymous.org.uk,campingenfola.com,cryps.info,imagefu.com###cook
+mathsisfun.com###cookOK
+enermax.com###cookice-text
+cookieshark.eu###cookie--Modal
+peterchristian.co.uk,peterchristianoutfitters.com###cookie-acceptancce
+shop.naturtrend.com###cookie-appliance-popup-box
+velosure.co.uk###cookie-bar-template
+yousign.com###cookie-consent-app
+store.azeron.eu###cookie-consent-background
+github.com###cookie-consent-banner
+store.azeron.eu###cookie-consent-foreground
+laspalmerasapartments.com###cookie-consent-notification
+ecigarettedirect.co.uk###cookie-message-slide-in
+renewcanceltv.com###cookie-notice
+dirsyncpro.org###cookie-notice-modal
+energylivenews.com###cookie-notification-mask
+kimkim.com###cookie-permissions-footer
+asus.com###cookie-policy-info-bg
+gorillas.io,simbrief.com###cookie-settings
+startermotoralternator.com###cookie-status
+511mt.net###cookieBannerHolder
+investtech.com###cookieConsentDialogue
+gezondheidsplein.nl###cookieForm
+sharphomeappliances.com###cookieModuleModal
+moringa.com###cookieNoticeSoww
+bdonline.co.uk,fieldsofskibbereen.ie,thegrocer.co.uk###cookiePolicy
+forbestravelguide.com###cookiePolicyWrap
+viavisolutions.com###cookieRibbon
+bulgarianproperties.com###cookie_bar_new
+sendgb.com###cookie_disabled
+search.podcastmusic.com,sourceaudio.com###cookie_manager
+download.pixelexperience.org###cookieconsent\:desc
+cvedetails.com###cookieconsentwarningcontainer
+europa-plc.com,oustudentsshop.com###cookieplate
+accolade.eu###cookies-component
+tangomode-aga.eu###cookies-law
+misterhorse.com###cookies-start-modal
+biovendor.com###cookiesAdv
+lift.co.za###cookiesBanner
+worksheetcrafter.com###cookiesFormContainer
+berger-tools.co.uk###cookiesOptions202212
+berger-tools.co.uk###cookiesOverlay202212
+freemius.com###cookies_opt_in
+chucklingcheese.co.uk###cookies_v2_backdrop
+farmina.com###cookieslayer
+kramp.com###cookiewall-modal
+mdachieve.com,pharmachieve.com###copyright-2
+atos.net,dsm.com,tesco.ie,unify.com###cp
+wayofleaf.com###cpop
+paramountplus.com###cps-shaman-notifier
+zortrax.com###cs-popup
+thebagster.com###ctl00_privacybanner_pnlPrivacyPolicy
+animeschedule.net###custom-consent-wrapper
+nofluffjobs.com###customized-consent-sdk
+dllsearch.net,droidchart.com,exescan.net,go4mosaic.com,lcdchart.com,routerchart.com,slatechart.com###cw
+dexigner.com###cwarn
+xbrats.com###cwarningpopup
+wsj.com###cx-notification
+crecipe.com###cxcx
+littlerealestate.com.au###da-float-cookie
+agrarshop-online.com###darkBack
+mobily.com.sa###data_priv_bar
+ibm.com###dbdm--message
+pdfprof.com###dddhh
+universitysupplystore.com###demo-overlay
+filmon.com###design-switcher
+binary.com###dialog_notification
+fimfiction.net###dimmers
+innovaphone.com###disableBackground
+claridges.com###disc-bg
+one-line.com###disclaimer-bar
+owasp.org###disclaimer-container
+belfastmet.ac.uk###div-alerts-wrapper
+atlasformen.co.uk###divBottomStickyLayer
+newser.com###divCM
+goccl.co.uk###divMessage
+microsoft.com###divNRMain
+hinman.org###divPopup
+tenerife-guided-walks.com###dmPopup
+tenerife-guided-walks.com###dmPopupMask
+dobbies.com###dobbies_cookie_widget
+drupal.org###drupalorg-crosssite-gdpr
+starwest-botanicals.com###eapps-cookie
+swann-morton.com###easyNotification
+overunity.com###ecl_outer
+ebookfriendly.com###ecmr
+eib.org###eib-popup-policy
+fiveirongolf.com###elementor-popup-modal-16781
+educa2.madrid.org###emCookieWrapper
+missouriquiltco.com###enjoySomeCookies
+petri.com###enlivy-kit-cookie-policy-container
+govnet.ro###enterSiteModal
+tor.com###entry-content__footer-popup
+live.com,microsoft.com,office.com,skype.com,visualstudio.com,windows.com,xbox.com###epb
+schindelhauerbikes.com###etrpop
+trampaboards.com###eu_cookie_instructions
+nickfinder.com###europe_cookies_siht
+brandvia.com###expander-header-teaser
+plsx.com###fade
+cricbuzz.com###feedback-bar
+aitopics.org###fixed-footer
+toffeeweb.com###fixedFooter
+metatrader4.com###float-vertical-panel
+yodiz.com###footMsgYodiz
+alternative.me,motorsport.com,pdf24.org###footer
+flynas.com###footer-message
+moneytalksnews.com###footer-overlay
+tuasaude.com###footerWidgets
+a2clones.com###footer_good_id
+cioreview.com###footerr
+wahl.com###form-popups
+freakonomics.com###fre_cookie_modal
+frosmo.com###frosmoPopup
+teamcoco.com###ft
+musicmap.info###fullscreen-overlay
+play.google.com###gb > div[style*="background-color"]
+flooringsuppliescentre.co.uk###gdpr_cookie-mainWrapp
+myedit.online###gdpr_notes
+mid-day.com###gdprbx
+lloyd.com###globalerror
+draeger.com###globalnotification
+wdl.warburg.sas.ac.uk###greyout
+btn-digital.com###growls-br
+timefmtoronto.com###guacBg2
+mercateo.com###header-popup-info
+wattsindustries.com###header1_overlay2
+eutelsat.com###header_higher
+trendsmap.com###header_message
+zylom.com###headerbar_privacy
+fitzpatrickreferrals.co.uk###hellobar
+heroesprofile.com###heroesprofile-alert
+goodsstall.co.uk###hideme
+odyssey.starbucks.com###hw-cookie-alert
+exchange.uk.com###ibox
+flatme.it###ic
+ericdepaoli.com###icegram_messages_container
+bbycompanystore.com,keithurban.net,medtronicshop.com,moments-shop.com,themagpiesalute.com###important-notice
+zoover.co.uk###info-bar
+limundo.com###info-modal
+the-match-factory.com###infoBar
+totalping.com###info_1656718626
+apgsecuritysolutions.co.uk###infobar
+headfirstbristol.co.uk###injected_cookie_notice
+succulent-plant.com###inner
+all3dp.com###iubenda-cs-banner
+jetbeds.com###jb-notifications-container
+jif.com###jms__cookie-consent__screen
+playstation.com###js-SIEWS1lib-header-Base
+lawrievetgroup.co.uk###js-consent-wrapper
+unbound.com###js-cookies
+shellenergy.co.uk###js-footer
+travelwisconsin.com###js-stickyhead
+gainesvillecoins.com###jsGDRP
+glashuette-original.com###js_dataNnoticeBackdrop
+glashuette-original.com###js_dataNnoticeBtns
+juno.co.uk,junodownload.com###juno-cookie-consent
+forbes.com###ketch-consent-overlay
+shanebarker.com###kt-layout-id_e3c48e-e4
+brandfolder.com###lanyard_root
+halifax-online.co.uk###lbganalyticsCookies
+seeker.com###legal-notice
+adultswim.com###legal-notification
+escapefromtarkov.com###legalLightBlock
+tmz.com###legalbar
+air-austral.com###legalconcerns
+ticketpros.co.za###list-builder
+techpost.online###lixXO-cookies
+foodnutritiontable.com###loading
+wittur.com###loggedbar
+puigusa.com###lycok
+sky.com###mast-notifications
+mbc.net###mbc-policy
+logicconcept.eu###mc_top_bar
+908devices.com,comrex.com,pbsinternational.org,pendar.com###mcb-wrap
+hand2mind.com###md-cookienotice
+allabout-japan.com###meerkat-wrap
+iplogger.org,psyonix.com,rocketleague.com,rocketleagueesports.com,wts.com###message
+web.peatus.ee###messageBar
+scrabble-solver.com###messages
+cyclemiles.co.uk###messages-cont
+jjb-collection.com###mi-container
+misskey.io###misskey-ga-cookie-accept-bar
+discoversanangelo.com###mm_cc_modal_overlay
+wowza.com###modal-3vufhe18z0kd
+aqara.com###modal-agreement
+thepointofsale.com###modal-background
+alvin-almazov.com###modal-cache__overlay
+hmc.org.uk###modal-mask
+thepointofsale.com,umm.nordpoolgroup.com###modal-overlay
+umm.nordpoolgroup.com###modalMain
+shellsmart.com###modal_container
+eurocirc.org###msgBox_error
+solicitor.info###msgbg
+betsson.com###msgwrapper
+extreme.com,mtn.co.za,mtnbusiness.co.za###my-welcome-message
+rockstarcoders.com###myAlert
+interface.com,kon-boot.com,southerntravelsindia.com,tcf.org###myModal
+spandidos-publications.com###navbar
+anthonytravel.com###nb
+nba.com###nba_tos
+aptoide.com###news
+metal-shop.eu###nextcreBotDialog
+plotz.co.uk,skyremotecodes.co.uk###nfaModal
+plotz.co.uk,skyremotecodes.co.uk###nfaPopup
+lycoschat.com###nomnom
+bydautomotive.com.au###noticeModal
+co-opinsurance.co.uk###noticePanel
+cnn.com###notice_banner
+autoglass.co.uk###noticedivwrap
+amcharts.com###notices
+checkpoint.com,csl-computer.com,pomvom.com,proscia.com,yesgolive.com###notification
+eastlondonradio.org.uk###notification-area
+londonreal.tv###notification-bar
+pacesuite.com###notification-cont
+youtube.com###notification-footer
+cnn.com###notification-legal
+asiatatler.com###notification-msg-container
+tresorit.com###notification-wrapper
+codeplay.com###notificationPopup
+guideautoweb.com###notifications
+majorrv.com,shadypinesrv.com###notify
+adverts.ie,boards.ie,dailyedge.ie,did.ie,the42.ie,thejournal.ie###notify-container
+international-friends.net###noty_bottom_layout_container
+dometechnology.com###noty_layout__bottomCenter
+steamgriddb.com###noty_layout__bottomRight
+novapdf.com###novapdf_accept_cookies
+professionalbatterychargers.com###nscmsboxboxsimple
+spreaker.com###nt_container
+nvu.io###nvu-consent
+northwell.edu###nwh_footer_banner_legal
+novaramedia.com###obligation-bar
+postgraduatesearch.com###ol
+pollylingu.al###opt-form
+atlantic.money###opt-in
+accenture.com###optanon-minimize-wrapper
+harvester.co.uk###optin-optout
+baltimoresun.com,chicagotribune.com,nydailynews.com###osanoCustomDialogDiv
+b1tv.ro,harveynorman.ie,zdnet.com###ot-sdk-btn
+challengethebrain.com,tribunesandtriumphs.org###outer-consent
+panasonicproclub.com###over
+nbcnews.com###overaly_dy_message
+futbollab.com###overbox-politica
+jukegames.com,n-mobile.net###overbox3
+blacklibrary.com###overlayMask
+boxenterprise.net###page--area__bottom
+b2eu-consulting.eu###page-disable
+belkin.com###pagebanner
+voissy.com###pb-navbar-cookies-accept
+pdfescape.com###pdfe_cmp
+phobs.net###phobs-cookie-consent
+wi-fi.org###pi_tracking_opt_in_div
+piensasolutions.com###piensaCookieAcceptance
+themilitarystore.co.uk###pixelpop
+amazon.com###pldn-deep-link
+windy.com###plugin-consent
+holidayfactory.co.za###polgpr
+simsdom.com###policies
+buyamower.co.uk,reddingo.com,you.dj###policy
+4sgm.com###policy-bar
+apkpure.com###policy-info
+eccles.utah.edu###policy-message
+fgcu.edu###policy-notification
+nba.com###policy_wrapper
+decoyroom.net,emazeinc.com,prolawnaugusta.com###policycontainer
+isa-sociology.org###politica
+365businessfinance.co.uk###pop-up
+global.wf.com###pop-up-footer
+vanguardsmoke.com###pop_wholes
+vanguardsmoke.com###pop_wholes_bg
+pamgolding.co.za###popi-notification
+akasiacountryclub.co.za###popiAlert
+educba.com###popmake-378149
+ticketpros.co.za###popup-box-terms
+chocolateminecraft.com###popup1
+growthtechnology.com###popupbanner
+melaniemartinezmusic.com###pp-footer
+r-studio.com,r-tt.com###pp-info
+tapatalk.com,walfordweb.com###pp_b
+gainward.com,palit.com###pp_info
+gainward.com,palit.com###pp_overlay
+pacsun.com###pptou-sticky
+autoevolution.com###prajiturele
+jangmidiamonds.com###preloader
+fxstreet.com###prestitial-handle
+3q.video,mondaq.co.uk,mondaq.com,prevac.eu,tesda.gov.ph,vindy.com###privacy
+worldjournal.com###privacy-agreement
+business-humanrights.org###privacy-choices
+monitor.civicus.org###privacy-choices-banner
+weather.com###privacy-data-notice
+dnddiceroller.com###privacy-div
+playstation.com###privacy-header
+canalplus.com###privacy-manager
+studiocanal.com###privacy-manager-popin
+xceptance.com###privacy-message
+dailyjournal.com,islamicfinder.org###privacy-modal
+govt.nz###privacy-notification
+atlanticsuperstore.ca,nofrills.ca,realcanadiansuperstore.ca###privacy-policy
+foundryvtt.com###privacy-policy-prompt
+fa-mag.com###privacy-policy-sticky
+telegraph.co.uk###privacy-settings-prompt
+dolarhoje.com###privacy-warning
+germanveryeasy.com###privacyDiv
+library.tc.columbia.edu###privacyNotice
+jimmybeanswool.com###privacyPolicyAcceptForm
+wordchumscheat.com,worddominationcheat.com###privacyUpdate
+cbronline.com###privacy_content
+online2pdf.com###privacy_msg
+dailyjigsawpuzzles.net###privacy_notification
+ids-imaging.com###privacycheck
+keil.com###privacymodule
+zoomin.tv###privacyoverlay
+rocketleague.com###privmessage
+procreate.art###pro-banner
+scalemates.com###prv
+spiking.com###prvcypop
+ftcguardian.com###prvcypop_4
+rcwilley.com###rcDrawer
+totalmerchandise.co.uk###react-cookie-consent
+insightturkey.com###readed_contract_row
+researchgate.net###rg-us-cookie-banner
+elanco.com###ribbon
+ricochet.com###ricochet-cookie-bar
+zomato.com###root > div:first-child:not(:only-child)
+wrigleys.co.uk###rpcm
+dopesnow.com###rs-cookie-banner
+tenuser.com###rsp
+nvd.rwth-aachen.de###rwth-cb
+caymancompass.com###s-consent-modal
+smcworld.com###s-modal
+sanitas.com###sanitasCookieAlert
+seetickets.com###seeGdprCookieConsent
+sentaifilmworks.com###sfw-msg
+nac-philippines.org###sgcboxWrapper
+people.cn###shengmingTip
+alpenglowindustries.com###shopify-pc__banner
+burelfactory.com###shopify-section-cookie-bar
+urbanbar.com###shopify-section-cookie-modal
+manlymanco.com,seedbarn.com###shopify-section-fixed-message
+koifootwear.com###shopify-section-popup
+edealinfo.com###showFTCMessage
+edealinfo.com###showFTCMessage-back
+convertlive.com###sid-container
+investing.com###sideNotificationZone
+pqimemory.com###simple-notice-wrap-content
+centurion-magazine.com###simple-notification
+isa.org###simplemodal-container
+mercedesamgf1.com###simplemodal-overlay
+earthcp.com###site-overlay
+openstylelab.org###site-wide-legal-notice
+hidive.com###siteMsgSlideUpBG
+bluearan.co.uk###slider
+accu.org,octoparse.com###snackbar
+benttram.com,pressreader.com,surbma.com###snackbar-container
+sonic.com###snc-data-disclosure
+wasserklinik.com###snppopup-welcome
+hotukdeals.com###softMessages-list
+eumostwanted.eu###sortingPreference
+m.emsc.eu###splashscreen
+stackguides.com###spopupCont
+selectcamp.com###ssobar
+killstar.com###static-cookie-bar
+openweather.co.uk###stick-footer-panel
+yow.ca###sticky
+gotoparts.com###sticky-bar
+tesco.com###sticky-bar-wrapper
+equilar.com,ffonts.net,whatfontis.com###sticky-popup
+firefoxosdevices.org###storage-notice
+streamify.io###streamify-gdpr
+kameleoon.com###tarteaucitronRoot
+tatsubuilder.com###tatsu-header-container
+google.ae,google.at,google.be,google.bg,google.by,google.ca,google.ch,google.cl,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.nz,google.co.th,google.co.uk,google.co.ve,google.co.za,google.com,google.com.ar,google.com.au,google.com.br,google.com.co,google.com.ec,google.com.eg,google.com.hk,google.com.mx,google.com.my,google.com.pe,google.com.ph,google.com.pk,google.com.py,google.com.sa,google.com.sg,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vn,google.cz,google.de,google.dk,google.dz,google.ee,google.es,google.fi,google.fr,google.gr,google.hr,google.hu,google.ie,google.it,google.lt,google.lv,google.nl,google.no,google.pl,google.pt,google.ro,google.rs,google.ru,google.se,google.sk###taw > div > [data-ved]
+kaec.net,thelawpages.com###terms
+cars.co.za###terms-and-conditions
+liveindex.org###terms-bar
+classicalradio.com,di.fm,jazzradio.com,radiotunes.com,rockradio.com,zenradio.com###terms-message-region
+yourkit.com###terms-wrapper-id
+bpsa.co.uk###terms_container
+whatismymovie.com###termsandconds
+colorit38.com###test_alert
+bitzarium.com###textBox
+fixedbyvonnie.com###tfade
+wetshaving.store,xtremeplasma.com###tile-gdpr-banner
+fixedbyvonnie.com###tlight
+atel-electronics.com###tmp_cookies
+gotokyo.org###tmp_local_bar
+guess.eu,visiontechusa.com###toast
+rapidssl.com,thawte.com###toolbar
+insights.nzherald.co.nz###top-banner-in-content
+artuk.org###top-notice
+supremenewyork.com###top_notice
+equalweb.com###topbar
+gamepedia.com,mmo-champion.com###tos-banner
+cartoonnetwork.com###tos-bar
+toughnickel.com###tos_update_band
+tp-link.com###tp-cookie
+ergonbike.com###tracking-modal
+stingray.com###tracking-popup
+privacy.org.nz###trackingmessage
+undercurrentnews.com###ucn-gdpr-overlay
+strikermanager.com###ue
+netflix.com###uma > div > .message
+search.brave.com,search.brave4u7jddbv7cyviptqjc7jusxh72uik7zt6adtckl5f4nwy2v72qd.onion###usage-metrics
+search.brave.com###usage-metrics-notice
+censor.net###usage_notice
+americanexpress.co.uk,americanexpress.com,americanexpress.de,americanexpress.it###user-consent-management-binary-banner-overlay
+resy.com###user-consent-management-granular-banner-overlay
+busybeeblog.com###user_disclaimer
+iboysoft.com###user_popup
+bunkerworld.com###userprompt
+mediline.eu.com###using-cookies
+vipcars.com###vc-cookie-policy
+wpbakery.com###vcv-top-banner
+factmag.com###vf-pop
+vive.com###vive-cookie-notice
+ritdye.com###vue-app > .v_bg\:peach-300
+sabanci.com###warning-bar
+dompe.com###warning-popup
+iflicks.in###welcome
+taiwanplus.com###welcomeMsg
+johnfrederick.co.uk###wp-notification
+f1forgottendrivers.com###wpcg-box
+janrain.com###wptbheadline1
+wpx.net###wpx-cookie-agreement
+here.com###wrapper
+wyze.com###wyze-cookie-banner
+coindix.com###xbanner
+spiceworks.com###zdprivacy-content-new
+framer.com##.--framer-cookie-banner-container
+dublininquirer.com##.-alert.-fixed.notice
+alpari.com,alpariforex.org##.-footer__notice
+nhl.com##.-left.nhl-c-toast
+rns.id##.AgreeCookiePolicy_cookiePolicy__OUbeU
+port.ac.uk##.Alert
+cryptokitties.co##.Banner
+giphy.com##.Banner-sc-iopojr
+rottweil-ammunition.com##.BannerManager
+quora.com##.Banner___StyledFlex-sf9g3d-0
+plaid.com##.Banner_banner__D6XZ9
+company.plarium.com##.Banner_cookiesBannerModalOverlay__y4uC8
+songsterr.com##.Bmu26z
+cryptokitties.co##.BottomBanner
+guilded.gg##.BottomFixedBanner-container
+bgextras.co.uk##.CB393_opts
+napaonline.com##.CCPA
+classicalarchives.com##.Cdiv
+2nt.com,say-move.org##.CoZ9Nu8Z
+weverse.io##.CookieAgreeView_container__qYaK3
+tsi.com##.CookieConsent > .o-container
+elitesingles.com##.CookieConsent_cookie-consent__nuLuI
+russellandbromley.co.uk##.CookieControl
+lyte.com##.CookiePopUp_cookiePopUp__2mB8Q
+retn.net##.CookieWindow__Wrapper-sc-uhdlpk-0
+cybervisiontech.com##.Cookies-module--cookie--2ydR3
+traderjoes.com##.CookiesAlert_cookiesAlert__3qSl1
+fitline.com##.CookiesGDPR_initial__2ePNF
+malaysiaairlines.com##.CookiesNotificationBtmOverlaySticky
+andersenlab.com##.CookiesPolicy-module--wrapper--8pHca
+movadex.com##.CookiesPopup_root__h_m4j
+accounts.ucas.com,nngroup.com##.CybotEdge
+basspro.com,cabelas.com##.DisclosurePopupContainer
+tietalent.com##.EQRlj
+picoxr.com##.EjUUOLYo3tCrc6j7Mapv
+navafresh.com##.FeatureBar_root___INU8
+talixo.com##.FloatingBoxesContainerBottom
+blonded.co##.FooterNotice
+kyivindependent.com##.Footer_cookies__3_gEh
+debenhams.com##.FqVeA
+onebrandssweepstakes.com,tjc.co.uk##.GDPR
+atoocall.com##.GDPRPopup-module--popup--3chjm
+venngage.com##.GDPR_main__fxmFf
+boosty.to##.GdprOffer_block_Ir4kJ
+boosty.to##.GdprOffer_root_pCuOO
+airasia.com##.Gdpr__GdprParentWrapper-sc-z30mcl-0
+flyfi.com##.HASH_COOKIE_ALERT_GRID_ITEM_FIXED
+tunemymusic.com##.HeaderMenu_CookieAlert__ipEfK
+rythm.fm##.Homepage_banner__Bo2QI
+poebuilds.net##.HzPhN
+blix.gg##.J75RiVJTxgBjGwxgE1z-Lg\=\=
+kw.com##.KWBanner
+quora.com##.LoadingDots___StyledFlex-sc-1r7wywh-1
+print24.com##.ModalSubModule_overlay__3PmWQ
+tunnelmb.net##.MqsPw
+fwg-vg-linz.de##.Mrku11502
+account.samsung.com##.MuiDrawer-modal
+bbb.org##.MuiDrawer-root
+tryzapp.com##.MuiGrid-align-items-xs-center
+tvtv.us##.MuiPaper-elevation6[role="alert"]
+app.matchit.me##.MuiPaper-elevation7
+calorieking.com##.MuiPaper-elevation8
+account.samsung.com##.MuiPaper-root[style="transform: none; transition: transform 225ms cubic-bezier(0, 0, 0.2, 1) 0ms;"]
+demo.yubico.com##.MuiSnackbarContent-root[role="alert"]
+gpic.com##.MyConsent_Outer
+forums.sherdog.com##.Notice
+freewebsitetemplates.com,wilderssecurity.com##.Notices
+leti.com##.NoticesBox
+llbean.com##.NotificationBanner_showBanner
+jaguar.co.uk,landrover.co.uk##.NotificationBar
+userstyles.org##.NotificationLine
+sungod.co##.PageCookieConsentBanner
+rows.com##.PnyGo
+midasbuy.com##.PopCookie_active__UWi7E
+cs.money##.Popover_wrapper__feCxt
+cjbayliss.co.uk,hcdltd.com##.PopupOverall
+powercolor.com##.Privacy
+weather.com##.PrivacyFeedCard--PrivacyFeedCard--3_Fk5
+fashionmodeldirectory.com,naturalnews.com,newstarget.com##.PrivacyNotice
+accobrands.com,kensington.com##.Promotional-corner
+lemonade.social##.Q1MNk.rE5s-._9cuRr._1aCsL._3DQXI
+eneba.com##.R05cUo
+bigfishgames.com##.ReactModalPortal
+gx.games,gx.me##.ReactModal__Overlay--after-open
+huawei.com##.ReadPolicy
+parrot.com##.RgpdDrawer_rgpd_drawer__2VCU0
+bethesda.net##.RiotWrapper-visor-alert-RiotWrapper-visor-alert5
+drweb.com##.SHOWIT-msg_showed
+spotlistr.com##.Shell-cookieNotice
+berenjaklondon.com##.Site-cookies
+cnn.com##.TermsOfService__component
+chillys.com##.TheConsent
+mtn.co.za##.Toast
+alecu.org##.ToastGdpr__wrapper__7lpbP
+lareviewofbooks.org##.Toastify
+6abc.com,abc11.com,abc13.com,abc30.com,abc7.com,abc7chicago.com,abc7news.com,abc7ny.com##.Tooltip
+fotor.com##.UseCookie_useCookieModle__6d4kz
+vermontcountrystore.com##.VCSCookieControl
+clipchamp.com##.Xlovq
+seekube.com##._1AsHk
+afkgaming.com##._1CIbC
+msg.com##._1HoCd
+temu.com##._1UdBUwni
+visitoslo.com##._1bhMQS
+2gis.com.cy##._1hywetf
+podchaser.com##._1jjw47h3
+timesnownews.com,zoomtventertainment.com##._1poBZ
+hiberworld.com##._1u7AkTjy
+studocu.com##._21b991318444
+tunnelmb.net##._23LkM
+knfilters.com##._29gQfUz-bz_NyWhPRpjOSe
+911tabs.com##._29v-t
+dreamhack.com##._2IIiex-CsxtuW7QGZ_oO5z
+wifimap.io##._2PfBI6K7JwmWPipDUq09x5
+tattoodo.com##._2VK6WPH
+temu.com##._2d-8vq-W
+cnn.com##._2dc7d020
+ostermann.eu##._2hGJl
+connect.bein.com,connect.beinsports.com##._2xjUQo64nY9HqhaEoBZzQy
+alliander.com##._387623d88e68aefb0eebd5af522ae062
+steambackgrounds.com##._3FMjZWrktfnucZvMMGToOx
+deviantart.com##._3V2rG
+wifiman.com##._3fcHG
+inovretail.com##._3joWt
+temu.com##._3jx6xu29
+reddit.com##._3q-XSJ2vokDQrvdG6mR__k
+afkgaming.com##._4hwc1
+medizzy.com##._6rnbkp0
+osf.io##._CookieBanner_1k6aw9
+tango.me##._De3j
+wolframalpha.com##._Sjp9
+edclub.com##.__CC_popup
+osf.io##.__cookie-banner__2a81b
+getorca.com##.__css-cFqwsP
+medicinechest.co.uk##._aju
+incogni.com##._cookie-consent_tpc72_1
+bitvavo.com##._cookiePresenter_isjkl_1
+pixiv.net##._gdpr-notify-header
+dic.pixiv.net##._gdpr-notify-header_replace
+instagram.com##._he402
+my.macpaw.com##._notification_qpb1z_1
+abplive.com##._p_policy
+luisaviaroma.com##._vgSl0cx4ao
+crossfit.com##._wrapper_1u43b_17
+1ipb.com##.a-warning
+cloudup.com##.a8c-cookie-banner
+norm.store##.above-pages-container > .animation-container
+nicequest.com##.ac
+presta-module.com##.acbBackdrop
+greenfields.eu##.accept-alert
+nwslsoccer.com##.accept-cookies-snackbar
+plugins.jetbrains.com##.acceptance-popup
+ibuypower.com##.acceptcookie_contain__JVvcU
+biglink.to##.acquisition-footer-row-wrap
+mymuesli.com##.active.mask
+scanace.com##.advbox
+hongqi-auto.com##.agree
+svitla.com##.agree-popup
+ticketmaster.ca##.agree-terms
+hedonism.com##.agreedPP
+marcocm.com##.agreement-popup
+factory.pixiv.net##.agreement-to-last-term
+festival-fabula.org##.agreetop
+itvmedia.co.uk##.alert--active
+espn.com##.alert--fixed
+goodmorningamerica.com,historicengland.org.uk##.alert-banner
+acs.org##.alert-banner__cookie
+labour.org.uk##.alert-bar-footer
+evaair.com,ksu.org.mt,orthomol.com,zombiearmy.com##.alert-box
+shredit.co.uk##.alert-container
+fixstars.com##.alert-cookie
+norwegianreward.com##.alert-danger
+coincarp.com,penseurope.com##.alert-dismissible
+hashflare.io##.alert-dismissible:not(.alert-success)
+jotti.org,unogs.com##.alert-info
+local.standard.co.uk##.alert-pad
+digita.ai##.alert-popup
+cityindex.co.uk##.alert-section
+marcelmarket.co.uk##.alert-server
+fandm.edu##.alert-wrapper
+aia.co.nz##.alertFooterContent
+drive360.co.za##.alert_box
+autotask.com##.alertbar
+investec.com##.alerts-top
+aliexpress.com##.aliexpress-notice
+marsh.com##.alt-opt-secure
+coloursofistria.com##.altcm-z-50
+eyeons.com##.alternis-cookie
+codesignal.com##.analytics-banner
+ems.press##.analytics-consent-popup
+eggflow.com##.analytics-info
+tipranks.com##.anchorbottomLeft
+headforpoints.com,sudlisboa.com##.ancr-pos-bottom
+playngo.com##.anim-banner-enter-done
+mnetplus.world##.anim__cookie__box-bg
+giraffe360.com##.animate-privacy-policy-show
+equiti.com,equitiglobalmarkets.ae,wowhead.com##.announcement
+civilsociety.co.uk##.announcement-banner
+commsec.com.au,soundcloud.com##.announcements
+cursr.app##.ant-bottom-left
+globalhome.solarmanpv.com##.ant-modal-root
+billhop.com,findmcserver.com,newtextdocument.com##.ant-notification
+cryptoquant.com##.ant-row-center
+apkfree.com##.apf1
+similarweb.com##.app-cookies-notification
+leo.org##.app-footer-content
+2captcha.com##.app-level-notifications
+crucial.com##.app-light > div[style*="fixed"]
+bbc.com##.app__domestic-disclaimer
+start.me##.app__message
+mubi.com##.appear-enter-done.e1yvnz5c0
+graymattersnyc.com##.appify_rcc_row
+boschrexroth.africa##.ar-cp
+annualreviews.org##.ar-news-footer
+argaam.com##.argaam-policy
+kingscross.co.uk##.argent_consent
+linkedin.com##.artdeco-global-alert
+leo.org##.as-oil
+scinapse.io##.asUhxHVGRjM9QNWMLelO5
+icelandair.com##.assets_container__3EEp3
+subaru.com##.at-banner-container
+scandalbeauties.com##.attention-msg
+welcometothejungle.com##.axeptio_mount
+hush-uk.com##.b-header-message
+makingyourmoneysimple.com,rimowa.com##.b-modal
+bitrefill.com##.b-vsrR8W
+login.coinbase.com##.b1oya23n
+cleveroad.com##.bK_mV
+cinch.co.uk##.bQ_kb
+login.vitalsource.com##.bUWSlZ
+fairygodboss.com##.bYTdiA
+stubhub.com##.bZrBz
+which.co.uk##.b_g
+hi.com##.backDrop
+chess24.com,mediensysteme.at##.background
+reasonstudios.com##.banner
+uber.com##.banner--bottom
+tiltingpoint.com##.banner-217
+oceanrepublik.com##.banner-block-screen
+bitpay.com##.banner-container
+makeprintable.com##.banner-hints
+calgaryhomes.ca##.banner-message
+nuget.org##.banner-notice
+aboutcookies.org,pinsentmasons.com##.banner-overlay
+23andme.com,tunnelbear.com##.banner-wrap
+treasure.chess.com##.banner-wrapper
+twunroll.com,worthpoint.com##.bannerContainer
+wetransfer.com##.banner__container
+allquiet.app##.banner__root
+forums.lenovo.com##.banner_alert
+petalmail.com##.banner_box
+my.machinations.io##.banner_container
+journiapp.com##.base-modal
+virgintvgo.virginmedia.com##.base-notification
+prestamarketing.com##.basicLightbox
+batchgeo.com##.batchgeo-cookie-notice
+ridehighcountry.com.au##.bb-bootstrap-alerts
+bbc.com##.bbc-bmxm2b
+opentip.kaspersky.com##.bd80ac
+pushkin.institute##.beono-flashmessage
+keep.eu##.best-cookies
+huffpost.com##.bf-toaster
+portsmouth.co.uk##.bg-alert
+neofinancial.com##.bg-backgroundStrong
+deno.land,ulster.rugby##.bg-black
+789ten.com##.bg-black-deep.rounded-md
+wimhofmethod.com##.bg-blue-r1
+linkedin.com##.bg-color-background-container-tint.top-2
+sifted.eu##.bg-darkGray
+cambridge.org,caymanchem.com##.bg-darker-gray
+unitedglobalsim.com##.bg-green
+mastersintime.com##.bg-green-200
+icoone.com##.bg-modal
+capadriano.com##.bg-opacity-75
+amana.app##.bg-pink-brand
+rowertour.com##.bg-trans-full-cookie
+roxi.tv##.bg-white.w-full.fixed
+icoone.com##.bh-modalInfoCookies
+bagigia.com##.bica-content
+config.figma.com##.bigmaker-cg-cookies-box
+theculturetrip.com##.billboard__BillboardStyled-pxsd1b-0
+latestdeals.co.uk##.bk3oq
+seikowatches.com##.blk-Disclaimer
+tnvacation.com##.block-cookie-acceptance-block
+cvent.com##.block-notifications-block
+qwerty.eu##.block_avg_privacy
+matrixgames.com,slitherine.com##.blockingOverlay
+vinylgourmet.com##.blockrollingtext
+abplive.in##.blur-bg
+gorenje.com##.blurry-background
+hubspot.com##.bmWVPb
+m.tomtop.com##.bm_dialog
+m.tomtop.com##.bm_dialogBg
+alle.com##.bnjRmV
+copilot.microsoft.com##.bnp_cookie_banner
+ulysse.com##.border-dark-10.border.rounded.shadow
+educative.io##.border-primary-lightP1.border-t.flex-col.flex
+algolia.com##.bot-0.left-0
+marketinghack.net##.bot-alert-box
+walmart.ca##.bottom-0.ph3-hdkp.nav-clickable-padded
+cala.ca,nshpca.ca##.bottom-alert
+cleanmymac.com##.bottom-banner
+asket.com##.bottom-fixed-container
+ofisitebg.com##.bottom-freezed-bar
+learntotradethemarket.com##.bottom-navbar
+benchmark.unigine.com##.bottom-notice
+gameleap.com##.bottom-right
+cointelegraph.com##.bottom-zone
+warbyparker.com##.bottomLeft__O0HMt
+hostkey.com##.bottomMessages
+fullcontact.com##.bottomRight__WEJOY
+qeeq.com##.bottomTipBarContainer
+matrixetf.finance##.bottom_Policy
+goodwillfinds.com,pcrichard.com##.bottom__OvpYA
+xhamster.com##.bottom_message
+onemoretrip.net##.bottom_text
+tutorialsinhand.com##.bottomcontent
+fonegeek.com##.bottomfloat
+coinmerce.io##.bottommodal
+collapse.news,health.news,naturalnews.com,newstarget.com,veteranstoday.news##.bottompopup
+sendgb.com##.bounceInLeft
+ebin.pub##.box-cookie-policy
+teenage.engineering##.box[style="width: 243px; height: 30px; background-color: rgb(39, 39, 39); border-radius: 100px;"]
+wattsindustries.com##.box_background
+wattsindustries.com##.box_contents
+unstop.com##.box_right_bottom
+elitedaily.com##.bp
+tango.me##.bpEVj
+brainandlife.org##.breaking-container
+group.pingan.com##.browser-notification
+icanschool.eu##.btncn2
+handy-games.com##.bugme
+desiindian-brighton.co.uk,royalspiceworthing.com##.bxUGXS
+perlego.com##.bzGIHv
+co-wheels.org.uk,livingnorth.com##.c-CookieConsent
+audiotag.info##.c-agree
+jobs.ch,jobup.ch##.c-alert
+sunweb.co.uk##.c-backdrop
+skygroup.sky##.c-banner-shadow
+rapidtyping.com##.c-c
+rebirth-hannover.de,werum.com##.c-callout
+index.co##.c-consent-manager
+kalahariresorts.com##.c-dialog-cookie
+officetimeline.com##.c-gjHvZA
+moment.co##.c-hUKRYQ
+sigma-global.com##.c-info-pane__container
+bo3.gg##.c-modal-cookie
+okdo.com##.c-notification-bar
+resmed.com##.c-notifications-wrapper
+loveholidays.com,loveholidays.ie##.c-o--
+rimowa.com##.c-rimpopin-wrapper--privacy
+hiltonheadisland.org##.c-site-alerts
+corporate.comcast.com##.c-top-banner
+ustgear.com,wheelertools.com##.c-tracking-consent
+ii.co.uk##.c01194
+queengarnet.com##.c0211
+chatreplay.stream##.c1wnhq38.container
+aplus.com##.c206
+prepler.com##.c2696372827
+eyetvforum.com##.cAnnouncementPageTop
+seascanner.co.uk##.cMfuAJ
+shadow.tech##.cPoFwU
+whatsonstage.com##.cRXBfl
+paladins.com##.cWeIbH
+datsun.co.in,infiniti-abudhabi.com,infiniti-alghassan.com,infiniti-azerbaijan.com,infiniti-bahrain.com,infiniti-dubai.com,infiniti-jordan.com,infiniti-kuwait.com,infiniti-lebanon.com,infiniti-oman.com,infiniti-qatar.com,infiniti-singapore.com,infiniti.co.uk,infiniti.com,infiniti.com.hk,infiniti.com.my,infiniticars.com.au##.c_128
+8bitplay.com##.c__cake
+deskmat.io##.c_innerbox
+kinesiotaping.com##.cachePopup
+recyclingproductnews.com##.card-cookie-notice
+cazoo.co.uk##.cazoo-consent-manager__sc-1ly4q7x-0
+enovap.com##.cb-container
+liveramp.com##.cb_modal
+pornone.com##.cbann
+tax.service.gov.uk##.cbanner-govuk-cookie-banner
+jadlonomia.com##.cbar-container
+currencyrate.today##.cc-alert
+viralnova.com##.cc-banner
+rotapanel.com##.cc-bottom
+wallpapershome.com##.cc-dialog
+download.pixelexperience.org##.cc-dismiss.cc-btn
+pronouns.page##.cc-modal
+smartbear.com##.cc-pop
+yoursoccerdose.com##.cc-simple
+mysoapbox.com##.cc_modal
+drakecircus.com##.ccc-widget
+ccn.com##.ccn-consent
+plebbin.com##.ccp-pop
+hannity.com,oxfordhotel.com,thespotlyte.com##.ccpa
+edenfantasys.com##.ccpa-cont
+orcadian.co.uk##.cd-container
+source.chromium.org##.cdk-overlay-pane > .mat-snack-bar-container
+help.coinbase.com,www.coinbase.com##.cds-fixed-f1v5p9l4
+spectrocloud.com##.cduapN
+cyberseceurope.com,fsr.eui.eu##.ce-banner
+talkspace.com##.cf-background-overlay
+aircharter.sg##.cf.header-bar
+fromsmash.com##.cgu-container
+cleveroad.com##.ch_jZ
+streamparty.com,trynoice.com##.chakra-collapse
+hypeclothinga.com##.chakra-fade
+litebit.eu##.chakra-modal__content-container
+litebit.eu##.chakra-modal__overlay
+kbs.co.kr##.chrome_pick
+baldursgate3.game##.ciastko
+tonies.com##.cjBwKv
+myvi.in##.ck-container
+phone-updates.com##.ckWrap
+img.ly##.cke-overlay
+ruijienetworks.com##.cke2022fr
+stayinwales.co.uk##.ckinfo-panel
+clineva.com##.clineva-cookies-info
+oipc.bc.ca##.clsPopupContainer
+ppg.com##.cm
+singular.com.cy##.cm-notification-container
+blik.com##.cm-overlay
+moddrop.com##.cm-z-4
+cmon.sg##.cmon-privacy-disclaimer
+aia.com.sg##.cmp-experiencefragment
+aia.com##.cmp-notification-action-panel
+manulife.com##.cmp-ntfbanner
+evoestate.com##.cnc-container
+cnn.com##.cnn-toast--tos
+meteopower.com##.cnt223
+canvasondemand.com##.cod-notifications
+coe.int##.coe-cookies-consent-popup
+baskbank.com##.coh-ce-cpt_cookie_consent-d004124e
+bocchibagno.com##.cokies
+themillionroses.com##.cokkie-banner
+scnat.ch##.command-bar
+disqus.com##.comment-policy-refresh
+vivo.com##.common_prompt-privacy-bg
+stylist3d.com##.comp-accept-cookies-popup
+sonicdrivein.com##.comp-cookie-banner_cookie__SnsnZ
+casioindiashop.com##.compare-bg
+casioindiashop.com##.compareProMiniView
+browardpalmbeach.com,dallasobserver.com,houstonpress.com,miaminewtimes.com,phoenixnewtimes.com,westword.com##.compliance
+riversidecompany.com,tcgplayer.com##.compliance-banner
+unitedtalent.com##.compliance.banner
+scanofthemonth.com##.component-cookie-notice
+polleverywhere.com##.component-notification
+gold.razer.com##.component-sticky-dialog
+conductor.com##.conductor-cs-content
+agenda.brussels,visit.brussels##.confirm
+pinelab-plugins.com##.consent-block
+sees.com##.consent-ctnr
+fancentro.com##.consent-message
+firstgroup.co.uk##.consent-modal
+justwatch.com##.consent-notification
+sportskeeda.com##.consent-pop-up
+app.traderepublic.com##.consentCard
+fullscript.com##.consent__popup
+remotly.com##.consent_container
+azureprice.net##.consent_container__YUEm1
+xing.com##.consent_wrapper
+vcol.co.uk##.consentmaincontainer
+papayaplay.com##.cont--cookie
+operanewsapp.com##.container
+cityoflondon.gov.uk##.container-floating-notifications
+bankofengland.co.uk,cityoflondon.police.uk##.container-notifications
+antoineonline.com##.container-overlay
+writerduet.com##.container.pb-4.pt-4
+onthehub.com##.containerDefaultClass
+iconscout.com##.container_hP6iH
+lantower.com##.containerv2--tracking-consent
+chucklingcheese.co.uk##.cookie-accept-bar-v2
+syrf.org.uk##.cookie-alert-banner
+pinpointproperties.com##.cookie-authority
+uxcel.com##.cookie-banner-wrap
+thewhitecompany.com##.cookie-banner__dimmer
+surferseo.com##.cookie-banner_component
+markit.eu##.cookie-bar-m
+ninerocksgames.com##.cookie-bar_overlay__0y49X
+navigare-yachting.com##.cookie-box-popup
+goodlawproject.org##.cookie-card
+allyouplay.com##.cookie-card_container
+dreamingreece.com##.cookie-consent-inner
+cameronhouse.co.uk,postimees.ee##.cookie-container
+ford.co.uk,news.northeastern.edu,theatlantic.com##.cookie-disclaimer
+tachyon.eco##.cookie-exp
+answerthepublic.com##.cookie-main
+british-assessment.co.uk##.cookie-management-intro
+parliament.uk##.cookie-manager
+holobuilder.com##.cookie-manager-main-container
+privacy.samsung.com##.cookie-noneu
+victors.co.uk##.cookie-notice-visible
+aptoide.com##.cookie-notice__CookieNoticeWrapper-sc-186p755-0
+aptible.com##.cookie-notice_container__dJUAA
+tonyschocolonely.com##.cookie-notification-minimal
+kids.lego.com##.cookie-overlay_cookieOverlayContainer__V7Glz
+thirtyoneeight.org##.cookie-page-overlay
+rdu.com##.cookie-panel-wrapper
+vinumpetri.com##.cookie-permission-container
+evocsports.com##.cookie-permission-overlay
+slidelizard.com##.cookie-popup-dialog
+acquire.io##.cookie-popup_component
+up.ac.za##.cookie-preferences-container
+lavueltaholanda.com##.cookie-prefs-wrapper
+eagle.cool##.cookie-promt
+lenovo.com##.cookie-remind-warpper
+outfit7.com##.cookie-settings
+cloud.vmware.com##.cookie-usage-banner
+rebeltech.co.za##.cookie-wall
+woktowalk.com##.cookieAceptance
+oxefit.com##.cookieBar
+fydeos.com,fydeos.io##.cookieBox___2OASs
+help.na.panasonic.com##.cookieConfirmPadding
+allcleartravel.co.uk##.cookieConsentContainer
+monitalks.xyz##.cookiePopup_entered__2rs67
+zeebiz.com##.cookieScreenOverlay
+vivid.money##.cookieSettings__contentContainer__iZXMG
+flatspot.pictures##.cookieShit
+icicibank.com##.cookieTextArea
+aanstellingspas.nl##.cookieWallContainer
+athleticgreens.com##.cookie_LRb5A
+canva.dev##.cookie_consent_container__xf8T4
+m.emsc.eu##.cookie_container
+tunetank.com##.cookie_container__w6Qh1
+cdp.net##.cookie_dismiss_container
+businesscardmanager.com##.cookie_setting_popup
+atlanticahotels.com##.cookieagreement
+bitfeed.co,worldbook.com##.cookiebanner
+plitch.com##.cookiebar-overlay
+paymentcloudinc.com##.cookiebtn
+autotoll.com.hk##.cookies-agreement-container
+gstarcad.net##.cookies-ask
+gomosafer.com##.cookies-body
+eib.org##.cookies-home_overlay
+brocoders.com##.cookies-modal-module--wrapper--17WJR
+augur.net##.cookies-notice__StyledCookieNotice-ub3ifz-0
+logon.slc.co.uk##.cookies-overly
+bloobloom.com##.cookies-policy-holder
+herbiesheadshop.com##.cookies-politic__section
+proactiveinvestors.co.uk##.cookies-popup
+altingunband.com##.cookies-regulation
+imagetwistcams.com,strip.chat,stripchat.com,xhamsterlive.com##.cookies-reminder-v2
+keralanotes.com##.cookies-show
+ucoin.net##.cookies-warning
+aidude.info##.cookiesConsent__wrapper
+vertiv.com##.cookiesOptInBanner
+coupert.com##.cookiesPolicy_cookie_warp__76VwO
+linmot.com##.cookies__cover
+stalirov.lawyer##.cookies_ntf
+cryptonews.net##.cookies_processing
+obarbershop.com##.cookies_section
+erregame.com##.cookieshow
+coop.co.uk##.coopssn-c-cookienotice
+austrian.com,austrianairlines.ag,austriantechnik.at##.cop
+apk-store.org##.cop_dmca
+city-of-portsmouth-college.ac.uk##.copc-cookie-banner
+duracell.com##.copro
+semanticscholar.org##.copyright-banner
+bandcamp.com##.corp-banners
+skygroup.sky##.corporate-notice-banner
+aoc.com##.country-popup
+ecosys.net,vertica.com##.courier-modal-overlay
+hik-connect.com##.coverShow
+videojug.com##.cp-alert-message
+mad-daily.com##.cp-info-bar-container
+itv.com##.cp_dialog
+drafty.co.uk##.cpc-float
+deployhq.com##.crumbs-banner
+odds.am##.cs
+louisvuitton.com##.cs_banner
+filen.io##.css-11l9fez
+drive.filen.io##.css-13xwjmo
+balthasarspeyr.org##.css-1lhf63g
+quillbot.com##.css-1lxznmp
+carawayhome.com##.css-1m7ve5s
+byfood.com##.css-1p1652i
+streamelements.com##.css-1tg1tld
+mubi.com##.css-1usnlyf
+luminskin.com##.css-1w0y2es
+airhelp.com##.css-1w881em
+ello.co##.css-46bss5
+filen.io##.css-4xyt0u
+tiktok.com##.css-bu8whx-DivBannerContainer
+account.mylio.com##.css-dji7rw
+deals.ghacks.net,deals.thehackernews.com,store.entrepreneur.com##.css-h52rc8
+taongafarm.com##.css-muxznr-cookie-consent--Panel
+creator.nightcafe.studio##.css-vloulf
+quixel.com##.css-wzviqn
+c-magazine.com##.css__oiassf
+national-lottery.co.uk##.cu_k_modal_main_box
+unitedpets.com##.cupjma
+hisense.co.uk##.curtain
+glamwize.com##.customcookie--banermain
+tannoy.com##.cv2-wrapper
+careerswales.gov.wales##.cw-cookies-policy-banner
+tonies.com##.cwJWme
+eoportal.org##.cy-cookie-popup
+framer.com##.cy-cookieBanner
+blockchain.com##.czabrb
+visitczechrepublic.com##.czt-cookie-bar__backdrop
+pronouns.page##.d-block
+dynv6.com##.d-cc--modal
+dynv6.com##.d-cc--modal-backdrop
+app.resmio.com##.dAPneM.sc-fFGjHI
+mondly.com##.dEImJY
+mywot.com##.dLClwL
+screen.studio##.dPyLkZ
+fotka.com##.dSDHpy
+10015.io##.dSErOH
+10clouds.com##.dSmGNF
+uphold.com##.dXDXdB
+aeon-fitness.com##.darkScreen
+systematica.com##.darken
+roundshot.com##.data-consent-edge
+chess24.com##.dataConsentModal
+dashboard.stripe.com##.db-CookieBanner
+formidable.com##.ddYHQV
+tensorflow.org##.devsite-footer-utility
+cloud.google.com##.devsite-snackbar-inner
+dhl.com##.dhl-cgk
+powys.gov.uk##.dialog--cookie-consent-prompt
+navigator-bs.gmx.com##.dialog-app__blocker
+secure.imvu.com##.dialog-manager
+glamourdresser.com,segpay.com##.dialog-message
+blocksite.co,freeman.com,poperblocker.com##.dialog-widget-content
+adesfoods.co.uk##.dialogBody
+designmodo.com##.dialogContainer
+atombank.co.uk##.dieHVN
+capture.dropbox.com##.dig-Snackbar[role="alert"]
+lovehoney.co.uk,lovehoney.com.au##.dis_message
+taste.com.au##.disclaimer-note
+armdocs.com##.disclaimer-notice
+cheynecapital.com##.disclaimer-overlay
+news.com.au##.disclaimer-text
+joom.com##.disclaimer___z2DLJ
+xmarkets.db.com##.disclaimer_web
+virustotal.com##.disclaimers-container
+zacks.com##.disclosure-fixed-slab
+codes.co.uk##.discreet-alert
+refinitiv.com##.dismissible-banner
+flowrite.com##.div-block-217
+fxmembers.com##.div_sticky
+transamerica.com##.dmb-notifications-ajax-wrapper
+bbc.com##.domestic-header-wrapper
+mla.org##.donate-banner
+dotvvm.com##.dotvvm-contrib-cookie-bar
+vesselfinder.com##.downfooter
+kdanmobile.com##.dqgoYn
+dreame.com##.drawer-wrapper
+piensasolutions.com##.drop
+fimfiction.net##.drop-down-pop-up-container
+buffcoach.net##.dsgvowpplugin-globaloptin
+glugglugplanet.com##.dummy-text
+singaporeair.com##.dwc--SiaCookie__PopupCookie
+msnbc.com##.dy_full_width_notifications_container
+dunelm.com##.e13q590n1
+livelarq.com##.e1jo60ce0
+bbc.com##.e1nbsi9l0
+unacademy.com##.e1tbxojk0
+toggl.com##.e1ve63r2
+farfetch.com##.e1wbdw5z0
+tiktok.com##.e1ynhqbi1
+rockstargames.com##.e43d3b99d34fff780c89
+creelighting.com##.e4bq44o2
+thestandardatcollegestation.residentportal.com##.e4xblt30
+hiab.com##.eCqAjI
+yourstory.com##.eHPTvF
+arc.dev##.eJWPZO
+netgear.com##.ePTdMY
+cervelo.com##.eSJQoN
+aicpa.org##.eSivhb.sc-kAdXeD
+i-subdigital.com##.eb-1
+i-sub.co.uk##.eb-shd1
+midasbuy.com##.eea-pop
+carvago.com##.ees0v8i1
+tech.eu##.efilli-layout-legacy
+egym.com##.egym-prompt
+bbc.com##.eh3hs0a5
+marksandspencer.com##.ekergnt3
+mubi.com##.el38f2b0
+elasticemail.com##.elastic-cookie-notice
+my.bulbapp.com##.elementor-element-10ff3dc7
+optodir.com##.elementor-element-3f06401
+aquaglide.com##.elementor-element-7bf6fcab
+fxhome.com##.elementor-location-footer
+icepanel.io,picockpit.com##.elevation-8
+harrods.com##.en7ymfe0
+engagebay.com##.engagebay-gdpr-dialog
+shop.elsevier.com##.enq2el0
+ml-quant.com##.ettof6h4
+airproducts.co.uk##.eu-dp
+componentsearchengine.com##.eu-message
+hotelesmares.com,skinmc.net##.eu-popup
+prospan.com.au##.eu-privacy
+bojoko.com##.evt-notification-bottom
+ezil.me##.ew776696
+exidegroup.com##.exide-gtm-scripts-modal-wrapper
+exitlag.com##.exl-cookie-banner
+parcelsonline.postoffice.co.uk##.explicit-cookie-banner-wrapper
+reolink.com##.explorer-n-privacy
+forums.xfinity.com##.f-cmp-flyout-wrapper
+remitly.com##.f4lpvwd
+wooclap.com##.fCtBiE
+stubhub.com##.fDuFEv
+canva.com##.fFOiLQ.Ekl2FA.RNFNIA._9y-BYQ._1CzyGhb
+aeza.net##.fVImSL
+tpusa.com##.fZiPAG
+lightinthebox.com##.fade-in
+marshall-leasing.co.uk##.fadeMe
+avid.com##.fancybox-opened
+avid.com,editus.lu,trenes.com##.fancybox-overlay
+editus.lu##.fancybox-wrap
+getdatakick.com##.featherlight
+microsoft.com##.feedback-visible
+tresorit.com##.fg_n3
+figma.com##.figma-b970kx
+lumendatabase.org,thebodyshop.com##.first-time-visitor
+ecmsglobal.com##.firstTimeTip
+thefurnshop.co.uk##.fixBar
+privacysavvy.com##.fixed
+ihl-databases.icrc.org##.fixed-overlay
+mobileshop.eu##.fixed-warning
+gnosispay.com##.fixed.bg-gp-green-100
+nordpass.com##.fixed.bg-grey-darkest
+tomtom.com##.fixed.bottom-24
+developer.arm.com##.fixedPolicyBox
+bleacherreport.com##.fixedRegion
+flyone.eu##.fixed_btm_bg
+spinnaker-watches.com##.fixedbar
+imobie.com##.fixedbot
+iotransfer.net##.fl-accept
+squareup.com##.flash-bottom
+adrianaallen.com##.flash-fixed-bottom
+change.org##.flash-message-announcement
+deutscheam.com,dws.com##.flash-message__wrapper
+kicker.com##.flex-container
+drivereasy.com,gatestoneinstitute.org,iobit.com##.float-bar
+reddit.watch##.float-bottom
+servermall.com##.float-cookie-wrapper
+cloudmounter.net,electronic.us,elmedia-video-player.com,eltima.com,ftp-mac.com,macdroid.app,net-usb.com##.float-message__wrap
+mql5.com##.float-vertical-panel
+azimutyachts.com,azimutyachts.com.mt##.floatFooter
+3dslash.net##.floatPopup
+businessleadersmalta.com,maltatoday.com.mt##.floating-bar
+green-circle.co##.floating-group.FloatingGroup.bubble-element
+novantas.com##.foobar-container
+cioapplicationseurope.com,doubleviking.com,fallentitans.com,peakd.com##.footer
+subzero-wolf.com##.footer-announcement
+clausporto.com##.footer-fixed-bar
+swipe.io##.footer-notice
+amphenol-cs.com##.footer-notification-popup
+teijin-china.com.cn,teijin.co.jp,teijin.com##.footer-policy
+cygnet-infotech.com,hackerone.com##.footer-popup
+whimn.com.au##.footer-statements
+palmbeachpost.com##.footer-wrapper
+min.io##.footer__banner
+brighamandwomens.org,brighamandwomensfaulkner.org,massgeneral.org##.footer__notice
+vireohealth.com##.footer_privacy_policy
+ulefone.com##.footermsg
+modapkdown.com##.fot-fixd
+msn.com##.fpCdm
+octopusev.com##.frubGX
+f-secure.com##.fs-consent
+huntoffice.co.uk,huntoffice.ie##.fs-cookie-banner
+ssactivewear.com##.fs_cc-banner_component
+dorkingrfc.com##.fsi-layout-notices
+relishbistroseattle.com##.fsn-notifications
+evermotion.org##.full-overlay
+fedex.com##.fxg-alert__fdx_cookie_notice
+fxstreet.com##.fxs_footer
+cgtn.com##.g-dialog
+replika.ai,replika.com##.gEQwvO
+pro.coinbase.com##.gNNMVp
+kdanmobile.com##.gQIDcO
+whatsnewonthenet.com##.gaoop
+graviti.com##.gas-cookie-bar
+themeflood.com##.gatewayContainer
+outdoorgb.com##.gb_cookie_info
+greatbigcanvas.com##.gbc-notifications
+gallup.com,strengthsquest.com##.gcb_35556
+leapyear.io##.gdpr--modal
+principledtechnologies.com##.gdpr-check
+advocate.com##.gdpr-cookie-wrapper
+3dexperience.3ds.com##.gdpr-modal
+ecwid.com,liberties.eu##.gdpr-window
+shop.animalbiome.com##.gdpr__holder
+mitac.com##.gdpr_block
+zionsbank.com##.genesis-cookie-consent
+gamefound.com##.gfu-floating-message
+gosugamers.net##.gg-css-77iu9o
+downloadcrew.com##.ginger_banner
+burgerking.co.nz,burgerking.co.uk##.gkHgcP
+santacruzbicycles.com##.gkZcgz
+brake-eng.com##.gl-cm
+pagespeed.web.dev##.glAfi
+linkedin.com##.global-alert
+houseoffraser.co.uk##.global-messages
+mozilla.org##.global-notice
+wankz.com##.global-notif
+istockphoto.com##.global-notification-container
+telenor.com##.global-overlay-background
+thinkwithgoogle.com##.global-toast--cookie-toast
+matrixgames.com,slitherine.com##.globalAnnouncement
+telstra.com.sg##.globalOptIn
+wisehosting.com##.glow-banner
+android.com,registry.google,safety.google##.glue-cookie-notification-bar
+stealthex.io##.gmEwWa
+ecospaints.net##.gmt_block_screen
+supabase.com##.go2072408551
+goout.net##.goout-cookie-overlay
+caymangoodtaste.com,cookiebot.com##.granify-widget-container
+inov-8.com##.grey-bg
+msnursepro.org##.gs-cookie-wall
+milwaukeecylinder.com##.guTily
+bordersdown.net##.guestwarn
+guggenheim.org##.guggen-consent
+ada.com##.gyhOpk
+yourstory.com##.hAPLOA
+bazarchic.com##.hCTOEm
+omnislots.com##.has-notification
+mooncascade.com##.hcGMUu
+office.com##.headPopup
+veeam.com##.header-component__messages-overlay
+vetshop.co.uk##.header-message
+igvault.com##.header-perm
+cryorig.com##.header-sheet
+hivehome.com##.header-stacked-message
+uspatriottactical.com##.header-top-banner
+start.fyi##.headnote
+aerostar.com##.hello-bar
+acquire.io##.home-announcement
+devhut.net##.ht-notification-section
+dessireethompson.com##.hu-wrapper
+huawei.com##.huawei-bootom-cookie
+consumer.huawei.com##.huawei-convergent-cookie
+zeroturnaround.com##.hud
+troopsdirect.org##.hustle-popup
+cloud.huawei.com##.hwid-bannerBox-portal
+c.po.co##.hy-musk-wrapper
+weverify.eu##.iAgreePopup
+bazarchic.com##.iUSvIy
+esimplus.me##.iZOOOK
+iaawg.com##.iaawg-cookie-consent
+ibm.com##.ibm-show
+insideclimatenews.org##.icn-sticky-footer
+vinylgourmet.com##.icon_rollingtext
+quora.com##.idETaN
+login.vitalsource.com##.ifsBBD
+doff.co.uk##.ig_action_bar
+dashboard.honeygain.com##.ildiEr
+struttandparker.com##.important-message-banner
+cirdancapital.com##.info-bar
+sportingbet.com##.info-message
+livescore.com,livescore.eu,livescores.com##.info-msg
+comscore.com##.info_banner
+napster.com##.info_box
+livescore.com##.infobar
+iiyama.com##.infobar-message
+reddit.com##.infobar-toaster-container
+ramboll-environ.com##.infoboxHolder
+thagson.com##.init_message
+marshall-leasing.co.uk##.inital
+sydneyvapeshub.com##.ins-cookie-banner
+mymorrisons.com##.inset-0.absolute
+picturehouses.com##.interim-banner
+jamesallen.com##.iqysxs
+ironstudios.com##.ironusa-cookie-modal-0-x-modal
+uizard.io##.irypxG
+curiousconcept.com##.is-consent
+vuejsdevelopers.com##.is-fixed-bottom.navbar
+freshcotton.com##.is-modal
+pagetiger.com##.is-open
+nordicguarantee.com##.itc-cc
+insighttimer.com##.items-start.flex.rounded
+itv.com##.itv-glob-foot__cookies
+heycar.co.uk##.iwIYCG
+pictures.reuters.com##.iziToast-wrapper
+slideshare.net##.j-tos-update-banner
+nordiskfilm.com##.jOSWZa
+gronda.eu##.jaEgfx
+fairfx.com##.jdbeLT
+jevena.com##.jevena-cookie-consent
+cbtnuggets.com##.jiIEgt
+webapps.geohive.ie##.jimu-widget-splash
+judge.me##.jm-cookie-bar
+forumcommunity.net##.jnote
+originalclub.co##.journal-header-notice-73
+princesrisborough.com##.jpiwikGrowler
+princesrisborough.com##.jpiwikOverlay
+roly.eu##.jq-toast-single
+soft32.com##.jquery-notify-bar
+bcu.ac.uk##.js-action-bar
+newsnow.co.uk##.js-alerts-container
+gaijin.net##.js-cb-policy
+agenda.brussels##.js-confirm
+curiocity.com,littlepotatoes.com##.js-consent-box
+osprey.com##.js-cookie-consent-popup__bg
+ibinder.com##.js-cookiebot
+g-star.com##.js-dialog--cookie
+jimmychoo.com,versace.com##.js-first-visit-banner
+forums.freebsd.org##.js-notices
+rslartunion.com.au##.js-notification
+itv.com##.js-site-alert
+itv.com##.js-site-alert-content
+cgtn.com##.js-tools-dialog
+getaround.com##.js_cookie-consent
+latoken.com##.jss1097
+effectivealtruism.org##.jss144
+mile.cloud##.jss4
+hubsite365.com##.jss468
+arcanys.com##.jss63
+gettr.com##.jss67
+helium.com##.jsx-352197324
+notion.so##.jsx-539809080
+codementor.io##.jtGnmx
+jetbluevacations.com,paisly.com##.jtp-skinny-gdpr
+jetbluevacations.com##.jtpsdk-body-blackout
+jetbluevacations.com##.jtpsdk-popup-modal
+kegworks.com##.ju_Con
+trontv.com##.jw-popups
+trontv.com##.jw-popups-backdrop
+trontv.com##.jw-popups-container
+whitebit.com##.k4w6
+uizard.io##.kCsINM
+app.resmio.com##.kGlvNA.sc-gxYJeL
+hootsuite.com##.kUxIsB
+sms.esimplus.me##.kVTekw
+play.acast.com##.kaNSQD
+sikkasoft.com##.kb-container
+theculturetrip.com##.kcTwAg
+nreal.ai##.kcmHGd
+bronze.ai##.kdNCNe
+kdkcn.com##.kdk-cookie
+loxam.com##.khZIi
+qservicetruck.eu##.kinLVY
+pixiv.net##.kjvIqh
+honeygain.com##.kksiKu
+depop.com##.klIvEu
+avontyres.com##.koekjesbalk
+smallpdf.com##.krHGwU
+archdaily.com##.kth-toast
+alfen.com##.l-cookie-control
+lexus.co.uk,lexus.eu##.l-disclaimer
+addgene.org##.l-dismissible-msg
+lacoste.com##.l-fixed--bottom
+wiley.com##.l-notification
+campfirewriting.com##.lDcxu
+instagram.com##.lOPC8
+inoreader.com##.landing_promo_banner_top
+evs.com##.language-switcher
+gaia.com##.layer-modal-footer
+gfbv.ch##.layout-messages
+airlinecheckins.com##.layout-row
+indiegogo.com##.layoutHeader-informationMessageWrapper
+iconsumer.com##.lb_overlay
+limerickleader.ie##.leaderboard_container
+glencore.com##.left-3
+siter.io##.left.dialog
+formationsgroup.com##.legacy
+dherbs.com##.legal-agreement
+olymp.com##.legal-banner
+pubpub.org##.legal-banner-component
+yahoo.com##.legal-footer
+foxsports.com##.legal-message-container
+99airdrops.com,bluenile.com##.legal-notice
+sacoorbrothers.com##.legal-warning
+fanbox.cc##.leiKOL
+soundsmag.com##.lepopup-popup-container
+soundsmag.com##.lepopup-popup-overlay
+bayernlb.com##.lg-backdrop
+filmelier.com##.lgpd
+lawinsider.com##.light-blue-bordered-card
+taminggaming.com##.lightbox
+linkfly.to##.linkfly-ctx-notifications
+cirrus.com##.links-are-reversed
+leadliaison.com##.ll_banner
+jw.org##.lnc-firstRunPopup
+hotelya.top##.lock-cookies
+sig-global.co.uk##.login-wrapper
+office.com##.m-alert
+skyperfectjsat.space##.m-box-policy
+visitwales.com##.m-noticeBar
+thisoldhouse.com##.m-privacy-options
+webnovel.com##.m-streamer
+sc.com,uobgroup.com.sg##.m-warning-alert
+insideevs.com,motor1.com,motor1.uol.com.br,rideapart.com##.m1-footer-messages
+magicplan.app##.magicplan-cookie-banner
+account.mailpoet.com##.mailpoet-privacy-banner
+gear.cdprojektred.com##.main-cookies-1M-
+justcause.com##.main-site-notes
+optica.org,osa.org##.maintenance-popup
+bypass.city##.mantine-Dialog-root
+kdkcn.com,operanewsapp.com,realme.com##.mask
+hydra.bot##.max-w-screen-md.z-40
+vallartasupermarkets.com##.mb-accept-cookies-banner
+mbc.net##.mbc-policy
+unono.net##.mceRow--relative
+microchip.com##.mchp-cookie
+materialdistrict.com##.md-modal-wrap
+3dprinting.com##.mdl-js-bigsnackbar
+fifa.com##.mdl-overlay
+opengapps.org##.mdl-snackbar
+mercusys.com##.mercusys-cookie-eu
+adobe.com,investors.com,merixstudio.com,sapabuildingsystem.com,steadfastnz.nz,tartybikes.co.uk,timesofisrael.com##.message
+bladehq.com##.message-accept-container
+heedbook.com,poop.vids.rip##.message-alert
+gametwist.com##.message__container
+runmap.net,wandermap.net##.messages
+foreignaffairs.com##.messages--container--bottom
+met.com##.met-cookie
+metrobankonline.co.uk##.metro-cookiebar__block
+malaysiaairlines.com##.mfp-bg
+malaysiaairlines.com##.mfp-wrap
+mercedes-benz-bus.com,mercedes-benz.com##.mgs-cookie
+spotify.com##.mh-message-bar
+mitele.es##.mitele-consent
+transparency.org##.mk-c-modal
+midronome.com##.ml-notification
+amazon.com##.mo-wp
+ny.thepaperfair.com##.mob-cookie-consent
+xhamster.com##.mobile-4488f.wrapper-4488f
+qmee.com##.mobile-app-hidden
+ctdi.eu##.mod_cookiebar_optin_medium
+onlineradiobox.com##.modal--cookies
+firstgroup.co.uk##.modal-backdrop
+myanimelist.net##.modal-container
+myanimelist.net##.modal-content
+myanimelist.net##.modal-content-overlay
+esto.eu##.modal-coockies
+cybershoke.net##.modal-enter-done
+kk.org##.modal-footer
+oranum.com##.modal-inner
+digimobil.es,youinvest.co.uk##.modal-overlay
+barclays.net##.modal-pecr
+ahotu.com##.modal-window
+timp.pro##.modal-wrapper
+thebagster.com##.modalBackground
+moaa.org##.modal__overlay
+labsnews.com##.modal__policy
+newdayspharmacy.com##.modal_terms
+lovestoriesintimates.com##.modals-wrapper
+sekwens.com##.module-abovebox
+compress-or-die.com##.module_global-cookie-consent
+lemonade.finance##.molecule-cookie-box
+motherless.com##.motherless-cookie-wrapper
+arcade1up.com##.mount
+unityj.com##.mpp-container-position-bottom-bar
+motorsport.com,motorsport.uol.com.br##.ms-footer-messages
+motorsport.com##.ms-header-messages
+faapy.com,minneapolis.org,visitcos.com##.msg
+floridashistoriccoast.com##.msg--cookie-consent
+firstsave.co.uk##.msgBox
+cablexpress.com##.mura-cta__container
+linuxreviews.org,miraheze.org##.mw-cookiewarning-container
+h-farm.com##.mx-0.w-100.row
+riot.im##.mx_MatrixToolbar
+viladomat.com##.my-modal-overlay
+mygovid.ie##.mygovid-overlay
+ft.com##.n-messaging-slot
+businessoffashion.com##.navbar-notification
+findicons.com,freeimages.com,vector.me##.navbar-qards
+bloomberg.com##.navi-terms-of-service
+userbenchmark.com##.nb-parent
+wik-walsoe.com##.ncm-ready
+ncts.ie##.nctoverlay
+giovannicosmetics.com##.needsclick
+neliosoftware.com##.nelio-popup-wrapper
+simpleimageresizer.com##.new-consent-popup-wrapper
+simsherpa.com##.newcookielayer
+iwanttfc.com##.ng-confirm-box
+gog.com##.ng-scope._floating-banner
+sizzle.co.uk##.ng-toast--bottom
+account.samsung.com##.ng-trigger.action-bar
+pswgames.com##.ng-trigger.ng-tns-c35-0
+leer.com##.nine-gdpr
+netjetseurope.com##.nj-header-prompt
+nianticlabs.com,pokemongolive.com##.nl-cpb
+xing-news.com##.no-cookie
+blogfree.net##.note
+goplextor.com##.note-policy
+anime2enjoy.com##.notice-board
+naturesgold.ie,rockandsnow.com##.notice-item-success
+dreamworks.com##.notice-modal
+ambassadorcruiseline.com##.notice-modal--cookies
+ambassadorcruiseline.com##.notice-modal__overlay--cookies
+carlsjr.com,hardees.com##.notice-window
+veritasbooksonline.com##.notice-wrap
+windowsbbs.com##.notice_-1
+square-enix-games.com##.notice_Notices_29tRQ
+aquasana.com##.notice__banner
+global.bittrex.com##.notification--content
+harvester.co.uk##.notification--notification
+brouwland.com,collaw.ac.nz,collaw.edu.au,collegalpractice.com##.notification-alert
+callisto.sds.com,samueladams.com##.notification-banner
+gumtree.com##.notification-box
+autotrader.co.za,speedtest.net##.notification-container
+conquestador.com##.notification-list
+meineke.com##.notification-popup-overlay
+nordot.io,tennistv.com##.notification-wrapper
+parallels.com##.notification.orange
+cheddar.com##.notificationBanner__banner___38gx8
+teletoon.com##.notificationBar
+listen.tidal.com##.notificationWrapper--2lyVW
+noxum.com##.notification__banner
+cancer.org.au##.notification_banner
+insurancebusinessmag.com##.notification_strip
+amateur.tv##.notificationbar
+epaderm.com,molnlycke.ca##.notifications
+myscript.com##.notifications-outer
+mindbodyonline.com##.notifications-wrapper
+bimbim.com##.notifier-message
+livesirina.com##.notifier-wrapper
+filmstreaming-de.life##.notifier_dmca_js
+sax.co.uk##.notify
+systweak.com##.notify-ensure
+uzairways.com##.notifyCookies
+getabstract.com##.notifybar
+visitkorea.or.kr##.notipop_bg
+blockspoint.com##.notizWrapper
+giveagradago.com,precision-people.uk##.ns-box
+nowness.com##.ns-info-bar
+bestlivecamsites.com##.ntfc-bar
+advisor.ca##.nua-gdpr-banner
+castrol.com##.nv-notification-header
+nexcess.net##.nx-1e5c67c
+decider.com,nypost.com,pagesix.com##.nyp-sitewide-notice
+novaljaturist.com##.o-data
+bo3.gg##.o-modal
+lepiantagionidelcaffe.com##.o-popup--cookies
+oralb.ca##.ob-cookiesoverlay-modal
+occrp.org##.occrp-cookie-overlay
+artemes.org##.oe_structure.modal-content
+ackerwines.com##.omw-modal-overlay
+norma-ammunition.com##.on-screen-messages
+suncorp.com.au##.one-pixel-margin-bottom.sg-Box
+petsathome.com##.onetrust
+anker.com,signinapp.com##.opacity-100
+girlfriend.com##.opacity-100.translate-y-0
+torquemag.io,wpengine.com,wpengine.com.au##.opt-in-modal
+tafelberg.co.za,waltons.co.za##.optin-sdk-root
+origin.com##.origin-sitestripe
+eventix.io##.ot-cookies
+cbsnews.com##.ot-fade-in
+3dviewer.net##.ov_bottom_floating_panel
+webapps.geohive.ie##.overlay
+hero-wars.com##.overlay--cookie_banner_without_icons
+jackjones.com,jjxx.com,mamalicious.com,only.com,onlyandsons.com,veromoda.com##.overlay-backdrop
+cashstar.com##.overlay-banner
+suntrustoil.com##.overlay-container
+banjaran.com.sg##.overlay-mobile-styles-enabled
+tata.com##.overlayPop
+maisonstandards.com##.overlay_full_screen
+noahcompendium.co.uk##.overlays
+endclothing.com##.owra-d
+esignal.com##.p-0.overflow-auto.flex-col
+thekey.academy##.p-dialog-enter-done
+youronlinechoices.com##.p15
+orientaltrading.com##.p_drawer_wrapper
+onepunchmanworld.com##.page-bg > .wrapper
+eforms.com##.page-bottom-message-box
+adyen.com##.page-cookie-bar
+geberit.com##.page-hint-box
+plymouth.ac.uk##.page-notification
+ionos-group.com##.page-overlay
+nick.com,tvland.com##.page-overlay_wrapper
+fundedbyme.com##.pageNotification
+schrack-seconet.com##.pageOverlay
+ticketmaster.ca##.page__legal-link
+advisto.com##.page_warning
+tickets.siampark.net##.panel_cookies
+maximapaints.com##.pb-sm.container
+ancientegyptmagazine.com,minervamagazine.com##.pcb
+appoutlet.github.io,touchstonerenard.com##.pcb__banner
+checkraka.com##.pdpa-popup
+spainhouses.net##.persistentMessage
+nordwindairlines.ru##.personal-data
+perfectcorp.com##.pf-header-cookiestatement
+planetfitness.com##.pf-privacy-policy-notice
+free-power-point-templates.com##.pg-modal-blackout
+pspdfkit.com##.pgp
+wlf.org##.pin-b.fixed
+botify.com##.pin-b.pin-l.fixed
+typhoonhospitality.com##.pin-r.pin-b.fixed
+pixpa.com##.pixpa-cookies-wrapper
+ideasoft.io##.police
+essayshark.com,pixlr.com##.policies
+designs.ai,globe.com.ph,parcfrontenac.com,riverterracegardens.com,viber.com##.policy
+esquire.com##.policy-bar
+pxhere.com,wallhere.com##.policy-info
+shazam.com##.policy-label
+moonactive.com##.policy-main-wrraper
+qvalia.com##.policy-notice
+sickipedia.net##.policy-panel
+razor.com##.policy-pop-up
+likeyouth.org##.policy-popup
+azizibank.af##.policyNote
+next4biz.com##.policy__area
+top-password.com,tribel.com##.policy_popup
+guitarinstructor.com##.policybanner
+nh-collection.com,nh-hotels.com##.politicaRewards
+process.st##.pookie
+bim.yaskawa.com##.pop
+floydsbarbershop.com##.pop-content
+orbitaltoday.com##.pop-up
+thecrownestate.co.uk##.pop-up-banner
+arrowheadcu.org##.popbox
+maisonstandards.com##.popin_consent
+aboardtheworld.com##.popmake
+egglifefoods.com,goodtimesoakland.com,organicawines.co.uk##.popup--cookies
+thelocalchoice.co.za##.popup-access
+andrewmarc.com,donnakaran.com,ghbass.com,iq.com,petalsearch.com,replicon.com##.popup-container
+dadavidson.com##.popup-container-bottom
+musee-mccord-stewart.ca##.popup-container-confidentiality
+jacksonsauction.com##.popup-dialog
+cancerresearch.org##.popup-inner
+skippersreview.com##.popup-overlayPop
+haiermedical.com##.popup-window
+smartclient.com##.popupPolicies
+plsx.com##.popup_block
+abplive.in##.popup_desktop
+vtechkids.com##.popup_privacy
+cnn.com##.popup_tosEdition
+ramsayhealth.co.uk##.popupbox
+thesslstore.com##.popuphome
+nationaljeweler.com##.pp
+md5hashing.net,muse.mu##.pp-footer
+tapatalk.com##.pp-p
+ppg.com##.ppg-c-cookie-container
+thefamouspeople.com##.ppreloaded_lightbox
+vesselfinder.com##.pprem
+makingyourmoneysimple.com##.pps-popup
+lasportivausa.com##.pr-cookie-modal-bottom
+powerreviews.com##.prd-wrap
+ultimaker.com##.preferences-bar
+easyeda.com##.priv-tips
+aweray.com,cbc.ca,dailyselect.co.uk,ferrerocareers.com,focustaiwan.tw,lcsc.com,ridegoshare.com##.privacy
+shoppersdrugmart.ca##.privacy-agreement
+flyscoot.com##.privacy-bar
+luisaviaroma.com##.privacy-box
+sundayworld.com##.privacy-button
+cancerfac.org##.privacy-callout
+dashlane.com##.privacy-consent-enter-done
+dynegy.com,home.kpmg##.privacy-container
+ign.com,pcmag.com##.privacy-content
+gadventures.com##.privacy-control
+aw-lab.com##.privacy-data
+genesis.com##.privacy-dialog
+araviscapital.com##.privacy-holder
+businessinsider.com##.privacy-link
+petalmaps.com##.privacy-menu
+uniprot.org##.privacy-panel
+tribalwars2.com##.privacy-policty-bar
+btgpactualdigital.com##.privacy-policy-desktop
+youmail.com##.privacy-policy-notification_policy-notification-modal__wasyO
+hotdeals.com##.privacy-policy-pop
+thenewdaily.com.au##.privacy-policy-slideup
+apollointeractive.com##.privacy-rights
+petalmaps.com##.privacy-setting
+data.worldbank.org##.privacy-widget
+getdigital.co.uk##.privacy-wrapper
+teamgroupinc.com##.privacyArea
+kingspec.com##.privacyBox
+intelligentinsurer.com##.privacyLaw
+zmags.com##.privacyPrompt
+okaysou.com##.privacy_box
+mitu.tv##.privacy_check
+localrent.com##.privacy_policies
+crystalfontz.com##.privacy_statement
+turbovpn.com##.privacy_tips
+diotec.com##.privacyoption_overlay
+ubs.com##.privacysettings__banner
+lilysilk.com##.privacywrap
+aiscore.com##.privaryClass
+parliament.scot##.projects-takeover
+caithnesslodges.scot##.prominent
+espn.com##.promo-banner-container
+loggly.com##.promotion
+poundshop.com##.promotion-strip-wrapper
+newscientist.com##.prompt
+hyundaicanada.com##.province-selector
+compuprint.com##.pryck
+goodrx.com##.pt-10
+creality3dofficial.com,creality3dofficial.eu##.pub-tip
+trackingmore.com##.public-cookie
+mega.nz##.public-service-anouncement
+bbc.co.uk##.pulse-banner
+metaswitch.com,teanabroad.org##.pum-container
+givedirectly.org##.push-banner-consent
+everfest.com##.push-down-cta
+abcnews.go.com##.push-me
+devonlive.com##.pwa-prompt
+my.nordaccount.com##.px-12.py-3
+sdrplugins.com##.px_-h-auto.px_-z-index-10000
+spotic.net##.py-16.h-full.w-full.max-w-sm
+decrypt.co##.py-3.max-w-full
+starlingbank.com##.pykGnVXQId7R0_iS8Y0R
+nytimes.com##.pz-hide-newsreader
+upscalepics.com##.q-card__section
+nicequest.com##.qk.qj.qi
+abetterrouteplanner.com##.r-145dblm.r-nc4a30
+mycards.hdfcbank.com##.r-1p0dtai
+book.hacktricks.xyz,docs.safe.global##.r-l13dpy
+wolvesville.com##.r-u8s1d.r-1r74h94.r-1nlw0im.css-1dbjc4n
+niceareas.co.uk##.rayAlertBox
+carrot.tech##.rcc
+sportsnet.ca##.rdm-daac-notice-template
+atlas.nomic.ai,digitalbook.io##.react-cookienotice-root
+blacklimba.com##.recommendation-modal__backdrop
+hazlitt.net##.region-masthead-inner
+layar.com##.remarketing-banner
+fixedfloat.com##.reminder
+carhartt.com##.reveal-modal
+marsh.com##.reveal-modal-bg-white
+beerwulf.com,islamicfinder.org##.reveal-overlay
+merlin.foyer.work,solanamobile.com##.rhc-banner
+mrgugu.com##.rhvQa
+ricola.com##.ricola-cookie-info
+haikuanimator.com##.rmq-d60b84d6
+southwestcoastpath.org.uk##.roar-body
+itinari.com##.root-8abb4
+itinari.com##.root-bca09
+totalserversolutions.com##.rplm-alert
+seamless.ai##.rs-message-info
+limaeasy.com##.rstbox
+jeffs.com,scandinaviansoul.com##.rstboxes
+hangseng.com##.rwd-header-cookie-section
+pdl.co.nz##.s-notification
+sanitas.com##.sanitas-cookie-alert-container
+northflank.com##.sc-3f37244c-0.jMKrJw
+smiteproleague.com##.sc-EHOje
+saleor.io##.sc-cooIXK
+safetyculture.com##.sc-cookie-pop
+scorpion.co##.sc-cookie-popup
+amplerbikes.com##.sc-edLOhm
+leibniz.com##.sc-hAsxaJ
+privfile.com##.sc-noti-banner
+travelrepublic.ie##.sc-u-padding-y-m
+trade.bisonapp.com##.sc-ywFzA
+tartybikes.co.uk##.screen
+corporate.dow.com##.screenBlockOverlay
+snapchat.com##.sds-modal-overlay
+worldbookday.com##.section--alert-panel
+showcasecinemas.co.uk##.section-prompt
+merkleinc.com##.security-policy
+sparxmaths.uk##.select-school-footer
+solaxpower.com##.sep-cookies-boxs
+carrerajeans.com##.sessionnotification
+colormango.com##.setprivacy
+mycharisma.com##.sgpb-popup-dialog-main-div-wrapper
+mycharisma.com##.sgpb-popup-overlay
+chitika.com##.sh-page-notice
+theifab.com##.shadow-3xl
+xcite.com.sa##.shadow-sm.bg-white
+groovy.bot##.shadow.text-white.bg-gray-dark-mid
+volumo.com##.shared_container__OZnf_
+studio9p.com##.shellCookies
+gwpharm.com##.show
+central1.com##.show-cookie-div
+ademus.eu,callingfans.com,creators.deepfake.com,nappy.co,wallpaper.to##.showBanner
+nikkei.com##.show_s1oy9cxe
+maxtena.com##.showcookiedialog
+tarot.com##.shown
+thedrum.com##.signup-cta__fixed
+sim-networks.com##.sim-cookies-popup
+dendrite.ai,subspace.money##.simple-cookie-widget
+cwbank.com##.simple-dismiss-alert
+euroclear.com##.simple-modal
+euroclear.com##.simple-modal-overlay
+eurekahedge.com##.simplemodal-container
+eurekahedge.com##.simplemodal-overlay
+tricentis.com##.site-banner
+up.ac.za##.site-blur-container
+newstatesman.com,orchardthievescider.ie##.site-footer
+last.fm##.site-message
+myride.lethbridge.ca##.site-message-banner-warning
+preplounge.com##.site-modals-container
+scu.mb.ca##.site-modals__modal--cookie
+bitcatcha.com,kaminario.com##.site-notification
+preplounge.com##.site-overlay
+gov.im,xnt.mt##.site-warning
+lenovo.com##.siteAlertMessage
+tmt-magazine.com##.sitealert
+nsg.com##.sitecookiepolicy
+decider.com,nypost.com,pagesix.com##.sitewide-notice
+freeremarkabletools.com##.skin-option
+racycles.com##.slide-up
+bandhanbank.com##.sliding-popup
+cofunds.co.uk##.smContainerInner
+sterkinekor.com##.snack
+httpstatus.io##.snackbar
+grover.com##.snackbar-enter-done
+hotukdeals.com##.softMessages-item
+sonos.com##.sonoscontent-banner
+developers.kern.ai##.space-y-4.items-center
+thermofisher.com##.specialMsg
+spinbackup.com##.spin-ai-gtm-banner
+spreadshirt.com##.sprd-consent
+zebrapen.ca##.spu-bottom-bar
+thewalrus.ca##.spu-position-top-bar
+spox.com##.spxcib
+bonsaipartners.eu##.sqs-slide-layer-content
+fusemagazine.com##.sqs-slide-wrapper
+donsje.com##.src-components-connected-dialog-dialog__root_open--1JzrN
+andwander.com##.src-components-utils-___ModalOverlay__zigzag-modal___2pOXm
+disk-o.cloud##.src-ui-Cookie-Cookie__root--3Lml4
+openweathermap.org##.stick-footer-panel
+hyundaicanada.com##.sticky-cookie-policy-container
+grafana.com,scoresaber.com,staterbros.com##.sticky-footer
+tc.columbia.edu##.sticky-notice-wrap
+alvexo.com##.sticky_bottom_wrap
+daft.ie##.strapline-container
+stwater.co.uk##.stw-alert
+prodigygame.com##.styles__CookieConsentBanner-sc-1cms38v-9
+papateide.com##.styles_weUseCookies__Zg_yb
+meteoblue.com##.successMessage
+spiceworks.com##.sui-site-message-container
+savills.co.uk##.sv-cookie-management
+gitpod.io##.svelte-17l8iln
+phemex.com##.svelte-1xhi46c.wrap
+chatreplay.stream##.svelte-dx0l3i
+lucozadeenergy.com##.swal2-show
+haier.com##.swiper-slide-img-txt
+taschen.com##.switch-prompt
+amplitude-studios.com,games2gether.com##.system-notification-container
+termly.io##.t-consentPrompt
+distro.tv##.tandc-wrapper
+app.machobb.com##.tblr-bottom
+playok.com##.tcell
+tudorwatch.com##.tdr-ribbon
+yahoo.com##.tdv2-applet-nagbar
+dnspod.com##.tea-news
+abcnews.go.com##.terms-alert-fixed
+depmap.org##.terms-and-conditions-wrapper
+kambly.com##.terms-cond
+cnn.com##.terms-of-service
+fijiairways.com##.terms-of-use
+machinations.io##.terms-privacy
+jangmidiamonds.com##.termsfeed-pc1-notice-banner
+1news.co.nz##.test-notificationPopup
+trilogyfs.com##.tf-full-screen-search-wrap
+adelaidenow.com.au,cairnspost.com.au,couriermail.com.au,dailytelegraph.com.au,geelongadvertiser.com.au,goldcoastbulletin.com.au,heraldsun.com.au,ntnews.com.au,themercury.com.au,townsvillebulletin.com.au,weeklytimesnow.com.au##.tgc-footer_disclaimer
+termshub.io##.th-ccb
+tokeninsight.com##.ti-cookie-container
+tonic.com##.ti-pastry--banner
+tiktok.com##.tiktok-sdk-cookie-banner
+tastedive.com##.tk-Footer
+trademachines.com##.tm-cookie-dialog-root
+thenew.institute##.tni-trackers
+iloveimg.com##.toast-bottom-left
+ikea.com##.toast-container
+odeoncinemasgroup.smg.com##.toast-info
+studee.com##.toast-notification
+mobilbahis49.com##.toast-wrapper
+cmocro.com,toptests.co.uk##.toastify-bottom
+laurentianbank.ca##.top-0.sticky
+china-airlines.com,flyscoot.com##.top-bar
+easternpointtrust.com##.top-bar-container---notice
+skystore.com##.top-notification-container
+player.fm##.top-promo
+globalsources.com##.top-wrapper-box
+hankooktire.com##.top_ep_wrap
+buystuffdirect.com##.top_notice
+dahuasecurity.com##.top_tip_wrap
+e-lawresources.co.uk##.topbarBox
+pokernow.club##.tos-agreement
+untappd.com##.tos-banner
+ncaa.com##.tos-container
+whitepages.com##.tos-modal-wrapper
+syfy.com##.tos-popup
+razer.com##.tos-razer-js
+tovatt.com##.tovatt-gdprpopup
+talentplug.com##.tp-popin-cookies
+thepodcasthost.com##.tph-cookie-notice
+thomsonreuters.com##.tr-DismissibleBanner
+nyit.edu##.tracking
+fabasoft.com##.tracking-alert
+didriksons.com##.tracking-consent-v2
+didriksons.com##.tracking-consent-v2__modal
+reimaginethegame.economist.com##.tracking_banner---trackingBanner---3gk_S
+theblues-thatjazz.com##.transbox1
+global.miui.com##.transition-all.rounded-t.fixed
+secure.imvu.com##.transparent-overlay
+troax.com##.troax-messages
+tropter.com##.tropter-cookiesbar
+truendo.com##.truendo_container
+teleticketservice.com##.ts-header-message
+jigsawplanet.com##.ts-msg
+ascio.com##.tt_popover_container
+salesscreen.com##.tw-fixed
+lautorite.qc.ca##.tx_amfcookies
+nwtc.edu##.u-background--default-dark
+nfumutual.co.uk##.u-bg-padd
+asendiausa.com##.ui-alert
+chregister.ch##.ui-notificationbar
+touchemedia.com##.ui-privacy
+zend.com##.ui-resizable
+leespring.com##.uilock
+superiorwallpapers.com,wallpapermania.eu##.uk-alert
+doodrive.com##.uk-position-fixed
+etletstalk.com##.ulp-overlay
+etletstalk.com##.ulp-window-top-center
+ultimaker.com##.um-consent-bar
+tcm.com##.universal-footer__ribbon
+awareproductions.com##.up
+anisearch.com##.urgent-msg
+liveagent.com##.urlslab-skip-all
+cnn.com,liveuamap.com##.user-msg
+timhortons.co.uk##.user-permission
+shine.cn##.user-terms-hint
+fxsolver.com##.userMessage
+arksurvivalevolved.zone##.userNotice
+fontspring.com##.user_notice
+aiseesoft.com,apeaksoft.com,easeus.com,fonelab.com,tipard.com,videoproc.com,vidmore.com##.usernotice_pop
+freewebstore.com##.utilities_grant_panel_show
+remax.com##.utility-container
+visualiq.com##.utilityBar
+singtel.com##.ux-consent-banner
+clipper-teas.us##.v--modal-overlay
+trustpid.com##.v-bottom-sheet
+villagebakery.co.uk##.v-cookie-container
+rypsv.scot##.v-dialog
+andyguitar.co.uk##.v-dialog__content
+lcsc.com##.v-footer
+bluecatnetworks.com##.v-mdu-notice
+auctelia.com##.v-snack--bottom
+whitepages.com##.v-snack__content
+surveyjs.io##.v2-class---popup--cookies
+coupons.cnet.com##.vc
+dailysabah.com##.veriAltBar
+remosoftware.com##.visitornotice
+trendyol.com##.vnotify-container
+verpex.com##.vpx-gdprModal
+herbiesheadshop.com##.vue-disclaimer-popup
+blocksmc.com,nodecheck.io##.w-100
+curio.io##.w-screen
+lyst.com##.w5yGp
+foundico.com##.warn-wrap
+netio-products.com##.warning-modal
+ada.com##.wbl72e-0-footer
+capterra.com##.welcome-banner
+inflight.pacwisp.net##.wisp-modal
+wizards.com##.wizardCookieBanner
+webopedia.com##.wo-consent
+wonderplugin.com##.wonderplugin-box
+payhawk.com##.wookiee-wrapper
+unityassetcollection.com##.wpcb-banner
+hangfire.io##.wpcb-container
+ghresources.com##.wpt-modal
+ridero.eu##.wrapper-notify
+dubz.live##.wrapper.show
+applehousetravel.co.uk,e-sportsbetting.nl,flysharp.com,iddoberger.com,mandrarossatour.com,o-nine.co.uk,onetime.bet,onetimecasino.com,onetimecasinos.com,southalltravel.co.uk,stashdesign.dk,stfly.com,stsports.com,studio-eastwood.nl,theholidayteam.co.uk,thkarayannis.gr,toysupermarket.ie,utelindenberg.com##.wrapperbtm
+atticskateshop.com,elevatedbws.com,erotic-discount.eu,tjinstoko.eu,tricoloresports.com##.wsa-cookielaw
+warthunder.com##.wt-cb
+waterfordwhispersnews.com##.wwn-gdpr-modal
+spoonflower.com##.x-global-dialog
+xvideos.com##.x-message
+eneba.com##.xIPhuO
+thomas-krenn.com##.xtxNavigationOffCanvasOverlay
+thomas-krenn.com##.xtxNavigationOffCanvasOverlayCookie
+thenounproject.com##.yCpfT
+hazardexonthenet.net##.yellow
+cuddlebug.co##.yeps-bar
+codesandbox.io##.yhmpN
+dideo.tv##.youtube-terms-banner
+youtube.com##.yt-consent
+gitconnected.com##.yu.yt.ys.gi.u.od
+yahoo.com##.yucs-eprivacy
+yvr.ca##.yvr-cookies
+nordcheckout.com##.z-1.bg-grey-lighter
+nft.coinbase.com##.z-10
+mooseknucklescanada.com##.z-1000
+mudpie.com##.z-30
+pizzahut.co.uk##.z-600
+starlingbank.com##.zYsLEJxzmfBA2Jbfgv8V
+dnb.com##.za43bb12b864a3f8d_privacyBanner
+zoho.com##.zbottom-cookie-container-outer
+santatracker.google.com##SANTA-NOTICE
+trustnet.com##USER-TYPE-POPUP
+dollarshaveclub.com##[aria-describedby="banner-description"]
+lemonade.com##[aria-describedby="cookie-consent-description"]
+1password.com##[aria-label="Cookie Consent"]
+perlego.com##[aria-label="cookie banner"]
+norwegianholidays.com##[aria-label="cookieconsent"]
+app.wooclap.com##[aria-labelledby="cookie-banner-title"]
+weedmaps.com##[aria-labelledby="notification_label"]
+picarto.tv##[class*="CookieCompliance_"]
+kaspersky.com##[class*="CookiesAccept"]
+biathlonworld.com##[class*="Modal__SmokeScreen-"]
+plente.com##[class*="SnackbarMessages__snackbar_"]
+payback-ltd.com##[class*="cookiesPopUp"]
+noovo.ca##[class*="modalstyles__StyledModalContainer-"]
+weedmaps.com##[class*="styles__BannerContainer-"]
+bitbrain.com##[class^="CookiesManager"]
+btc-alpha.com##[class^="Cookies_container"]
+graphql.braintreepayments.com##[class^="GDPR-module_"]
+app.revolut.com##[class^="Overlay__OverlayBase-sc-"]
+signin.rockstargames.com##[class^="RockstarCookiesBanner_"]
+omio.com##[class^="app-container-"]
+visartech.com##[class^="cookie-banner-"]
+rsdelivers.com##[class^="cookie-policy-component_"]
+ganjing.com##[class^="cookie_notice"]
+bybit.com##[class^="style_gdpr"]
+underarmour.com##[class^="trustarc_consent"]
+fischer-technology.com##[data-ajax-loading="false"]
+myworkdayjobs.com##[data-automation-id="legalNotice"]
+uber.com##[data-baseweb="toaster"]
+abc.net.au##[data-component="CookieBanner"]
+jdslabs.com##[data-component="cookieBanner"]
+koenigsegg.com##[data-component="n3-cookie-notice"]
+teenage.engineering##[data-cy="cookie-consent"]
+iol.co.za##[data-dialog="true"]
+wizards.com##[data-fetch-key="TheCookiePrompt:0"]
+framer.com##[data-framer-name="Desktop"]
+framer.com##[data-framer-name="Mobile"]
+indeed.com##[data-gnav-region="GlobalPrivacyControlBanner"]
+wellcomecollection.org##[data-test-id="cookie-notice"]
+jooble.org##[data-test-name="_termsOfServices"]
+intermatic.com##[data-test-selector="drawer_CookiePolicy"]
+youtrack.jetbrains.com##[data-test="alert-container"]
+backmarket.com##[data-test="banner"]
+coinbase.com##[data-testid="banner-container"]
+airhelp.com##[data-testid="cookiesNotice"]
+spectrum.ieee.org##[data-toggle-property="gdpr"]
+oneclickcover.com##[data-v-5f675fc8]
+reddit.com##[reddit-cookie-banner]
+stuffthatworks.health##[role="alertdialog"]
+academy.com##[role="complementary"]
+forbesafrica.com##[style*="position: fixed; left: 0px; top: 0px;"]
+jabref.org##[style^="background-color: rgb(24, 28, 31);"]
+tascaly.com##[style^="position: fixed; left: 3%; right: 3%;"]
+goodboy.ninja##[style^="width: 100%; height: 100%; position: fixed;"]
+excelviewer.herokuapp.com##[style^="z-index:90000000; position: fixed;"]
+acretrader.com##acre-cookie-consent
+shab.ch##agb-bar
+wallet.kukai.app##app-agreement
+orcid.org##app-banners
+wanakaapp.nz##app-cookie-notice
+iryo.eu##app-cookies-manager
+duelz.com##app-tiny-alert
+essential.gg##banner-content
+blim.com##blim-header-message
+openbookpublishers.com##body > .menu-header
+goodboy.ninja##body > div > .card
+facebook.com##body:not([style^="margin-bottom"]) div[data-testid="cookie-policy-banner"]
+success.trendmicro.com##c-dcx-cookie
+23degrees.io##consent-toast
+access.login.nhs.uk##core-cookie-banner
+medium.com##div > .branch-journeys-top
+c.realme.com##div > .cookie-privacy
+yahoo.com##div.js-applet-view-container-main > div.fixed-win[style^="background:"]
+ayuda-cloud-servers.donweb.com,corrupt.wiki,developer.rocket.chat,docs.abaddon.me,docs.betteruptime.com,docs.coreframework.com,docs.fluentbit.io,docs.flutterflow.io,docs.ibracorp.io,docs.jabref.org,electronforge.io,filebrowser.org,guides.cryptowat.ch,meshnet.nordvpn.com,support.saleae.com,wiki.valhelsia.net##div.r-1xcajam.css-175oi2r
+audiomack.com##div[class*="ConfirmMessage-module__cookie-"]
+ppi2pass.com,schweser.com##div[class^="AlertD_container"]
+livexp.com##div[class^="BannerGDPR_"]
+rally.io##div[class^="Banner_banner_"]
+carvertical.com##div[class^="BisquitsBanner_"]
+monzo.com##div[class^="CookieAlert-"]
+manychat.com##div[class^="CookieBumper"]
+clearvpn.com##div[class^="CookieConsentBanner_"]
+evervault.com##div[class^="CookieDirective"]
+icontainers.com##div[class^="CookieMessagestyled_"]
+udtech.co##div[class^="CookiesAgreement"]
+net-pocket.com##div[class^="CookiesInfo_"]
+secrid.com##div[class^="CookiesLabel_"]
+internxt.com##div[class^="Footer_cookiesBgFallback"]
+tinely.com##div[class^="GdprAcceptance_container"]
+porsche.com##div[class^="LegalDisclaimer_"]
+nytimes.com##div[class^="MX_COMPLY_GDPR_COMPLIANCE_"]
+architecturaldigest.com,bonappetit.com,cntraveler.com,gq.com,newyorker.com,pitchfork.com,self.com,teenvogue.com,them.us,vanityfair.com,vogue.com,wired.com##div[class^="MessageBannerWrapper-"]
+kurgo.com##div[class^="PrivacyNotice"]
+similarsites.com##div[class^="PrivacyNotification_"]
+podimo.com##div[class^="SmallCookie"]
+senecalearning.com##div[class^="Toast-module--wrapper-"]
+eightyupgrades.com,luxexpress.eu##div[class^="cookie-banner"]
+toptal.com##div[class^="cookie-banner-module_wrapper"]
+editorji.com##div[class^="cookie-banner_"]
+7news.com.au,atlasvpn.com,sortter.com,stylewe.com##div[class^="cookie-consent"]
+hype4.academy##div[class^="cookieBanner_"]
+xhamster.com##div[class^="cookiesAnnounce-"]
+bbtv.com##div[class^="index-module--cookiebanner-"]
+skissan.com##div[class^="index-module--overlay"]
+lbank.com##div[class^="index_cookies-"]
+weatherbug.net##div[class^="notificationFooter_"]
+i.mi.com##div[class^="order-"][class*="policy-"]
+musicboard.app##div[class^="popup_overlay_"]
+berlitz.com##div[class^="style__StickyAlertWrapper-sc-"]
+start.gg##div[class^="styles_banner_"]
+coin360.com##div[class^="styles_cookiesBanner_"]
+youtube.com##div[class^="ytd-consent"]
+gitpod.io##div[data-analytics*="cookie"]
+cookpad.com##div[data-controller*="cookies-consent"]
+editorx.com##div[data-hook="ccsu-banner-wrapper"]
+cam4.com##div[data-name="CookieConsent"]
+docs.portainer.io##div[data-rnwr700-1moh23t-e1k2in-tceitz="true"]
+tstheerastourfilm.com##div[data-section="cookies"]
+patreon.com##div[data-tag="cookie-disclosure"]
+pinnacle.com##div[data-test-id="Cookie-PolicyBanner"]
+regain.us##div[data-testid="cookie-banner"]
+deepl.com##div[data-testid="dl-cookieBanner"]
+reddit.com##div[style*="--Toaster-indicatorColor"]
+pango.education##div[style*="position: fixed; left: 0px; top: 0px; width: 100%;"]
+autodude.dk,autodude.fi,autodude.no,autodude.se,valostore.fi,valostore.no,valostore.se##div[style="background-color: rgb(240, 240, 240);"]
+cplusplus.com##div[style="background:#eed;padding:10px;margin:0;text-align:center;border-bottom:1px solid #446"]
+igta5.com##div[style="position: fixed; bottom: 0px; left: 0px; width: 100%; padding: 20px; background-color: rgba(0, 0, 0, 0.8); color: rgb(255, 255, 255); text-align: center; z-index: 9999;"]
+g4tv.com##div[style^="align-items: baseline; background: rgb(53, 53, 53)"]
+openpli.org##div[style^="background-color:#FF9595"]
+bundlestars.com##div[style^="background: #424242; "]
+exactli.com##div[style^="background: linear-gradient"]
+qrzcq.com##div[style^="border: 2px solid blue;"]
+stargreen.com##div[style^="color: rgb(238, 238, 238);"]
+openpli.org##div[style^="height:20px;background-color:#FAFFDC;"]
+globaltuners.com,psychomedia.qc.ca,speedtestcustom.com,zerochan.net##div[style^="position: fixed; bottom"]
+calendardate.com##div[style^="position: fixed; left: 0px; bottom: 0px;"]
+exporterhub.io,goodingco.com,nllb.metademolab.com,socean.fi##div[style^="position: fixed; left: 0px; top: 0px;"]
+nytimes.stats.com##div[style^="position: fixed; overflow: auto; bottom: 0px; padding: 16px 32px;"]
+inverto.tv##div[style^="position: fixed; z-index: 10000;"]
+playok.com##div[style^="position: fixed;"]
+carsized.com##div[style^="position:fixed;display:block;"]
+diffnow.com##div[style^="width: 100%; display: flex;"]
+conferience.com##div[style^="width: 380px;max-width:"]
+podbean.com##div[style^="z-index: 999"]
+bosch-professional.com##dock-privacy-settings
+angular.dev##docs-cookie-popup
+fi.google.com##fi-cookie-consent
+gcore.com##gcore-cookies-settings
+globalsolaratlas.info##gsa-cookie-banner
+my.games##header > .gdpr
+ingwb.com##ingwb-cookiebar
+international.pagseguro.com##le-cookies-consent
+duckduckgo.com##li[data-layout="ad"]
+material.io##mio-cookie-notice
+beatstars.com##mp-snackbar-info-messages
+moovitapp.com##mv-cookie-banner
+shaw.ca##notification-block
+weatherbug.com##notification-footer
+playpaxdei.com##paxdei-cookie-consent
+redd.it,reddit.com##shreddit-async-loader[bundlename="reddit_cookie_banner"]
+reddit.com##shreddit-cookie-banner
+truecaller.com##span > .max-w-md.shadow-lg
+pacificpower.net,rockymountainpower.net##wcss-cookie-banner
+web.dev##web-snackbar
+! https://www.jobinrome.com/network
+###app > div > .vm--container
+! Just Eat
+just-eat.co.uk,just-eat.es,justeat.it##div[data-cookie-consent-overlay]
+just-eat.dk##div[data-qa="granular-privacy-settings"]
+just-eat.ie##div[data-qa="jet-privacy-settings"]
+just-eat.ch,just-eat.fr,lieferando.at,lieferando.de,pyszne.pl,takeaway.com,thuisbezorgd.nl##div[data-qa="privacy-settings"]
+! wayfair
+wayfair.co.uk,wayfair.de,wayfair.ie##.FooterPopups
+! roninwear.
+roninwear.com,roninwear.de,roninwear.fi,roninwear.fr,roninwear.hu,roninwear.it,roninwear.pt,roninwear.us###wrapper-dx-coki
+!! ##div[class^="cookie__"]
+4templates.com,epal.gg,thegoodocs.com,thewallsthotel.com##div[class^="cookie__"]
+!! .adn-message
+aperitif.no,byggmesteren.as,cosmosmagazine.com,estatenyheter.no,forskning.no,forsvaretsforum.no,journalisten.no,khrono.no,m24.no,sciencenordic.com,sciencenorway.no##.adn-message
+!! #cknt
+1med.tv,mediasphera.ru,waldorf-expertenservice.de###cknt
+!! .cookie-consent-container
+cv.ee,cv.lv,cvonline.lt##.cookie-consent-container
+!! .cc-window-wrapper
+brothers-graphics.com,dryrobe.com,dxracer-germany.de,lockcard.de##.cc-window-wrapper
+!! .swal2-container
+kyounoryouri.jp,natalfortatacadista.com.br,outage.report##.swal2-container
+!! .cc-container
+comfeel.cz,drpalani.com,easygujaratityping.com,fibt.com,joberty.com,klaxit.com,majordentalclinics.com,parkovaniplzen.cz,pidentists.com,studentbostader.se,westlaimplants.com##.cc-container
+!! #cc-container
+busterplugholes.com.sg,charleslandaudentistry.co.uk,weptech.de###cc-container
+!! .info
+earthcp.com,landsbokasafn.is,sh2000.ru,vienormali.it##.info
+!! #cookieNote
+alarme4.com,badmoebel-shop.de,bikesportworld.de,bivvyonsummit.de,businessgateways.com,classicfactory24.com,clous.eu,dachplatten24.de,direkthaar.de,drhittich.com,durasat.de,eifel.de,entia.de,feingeisterei.de,felgenfuchs.de,fightersworld.com,g-estore.com,graffitistore.gr,gutschild.de,hamamsahara.de,honetastik.de,humidor-import.de,kaempgen.de,klingelknopf24.de,kurtgaden.de,marketender.de,martin-schmid-blechblaesernoten.de,mizu-shop.de,nachbestellservice.de,naturdarm-shop.de,ostfriesentee.de,phonetastik.de,sarras-shop.com,seven-arrows.de,sfo.gov.uk,shop.peraqua.com,shop.train-safe.de,star-beauty.de,starshooter.de,tattoo-tools.de,tommis-sportshop24.de,wohn-werk.de,zukunft.business###cookieNote
+!! .activebar-container
+akeebabackup.com,batteryequivalents.com,camara.net,culturagiapponese.it,displays.agneovo.com,imunify360.com,instituto-camoes.pt,isokon.si,kalymnos-isl.gr,luxos.com,randevau.hu,reshade.me,v-tac.eu##.activebar-container
+!! favoptic.*
+favoptic.de,favoptic.dk,favoptic.fi,favoptic.no##.cookie_consent_alert
+!! .custom-consent
+emerald-heizijde.be,rivo.be,upperleft.be,vooruitzicht.be##.custom-consent
+!! landal.*
+landal.at,landal.be,landal.ch,landal.co.uk,landal.com,landal.de,landal.dk,landal.no##consent-slide-in-component
+!! traventia.*
+traventia.es,traventia.fr##.CookiesBanner_PostionBanner__Yh_Dm
+!! msmode.*
+msmode.be,msmode.de,msmode.es,msmode.lu,msmode.nl##.modal-background
+!! mtbiker.*
+mtbiker.cz,mtbiker.de,mtbiker.hu,mtbiker.shop,mtbiker.sk###biscuitModal
+!! lovehoney.com
+lovehoney.ca,lovehoney.co.nz,lovehoney.com,lovehoney.eu##.dis_message
+!! #headband
+maidenfrance.fr,plurielmedia.com,rencontres-gratuite.fr###headband
+!! PrivacyBanner_
+holidayinnclub.com,payloadcms.com##[class^="PrivacyBanner_"]
+!! #cookies_acceptance
+courtika.com,essor.ca,groupedpa.com,laturquoise.ca,pmtroy.com,rockebilly.com,tremblayassurance.com,univesta.com###cookies_acceptance
+!! .consent-box
+ostsee24.de,photofiltres.fr##.consent-box
+!! style_container__
+bossautoukraine.com.ua,tray.io##[class^="style_container__"]
+!! .notification-bar
+bettyblocks.com,clinicalges.es,koncon.nl,mmcgbl.com,pressenter.group,steadfast.com.sg,up-team.cz##.notification-bar
+!! .cookiefox
+indomus.it,karmandala.de##.cookiefox
+!! .vwo-overlay
+acierto.com,jcb.com,webuyanycar.com,webuyanyvan.com,yougov.co.uk,yougov.com##.vwo-overlay
+!! .usn-notification
+blueislands.com,eduroam.ba,getselfhelp.co.uk,lethbridge.ca,merthyr.ac.uk,mfy.org.uk,netsupportdemo.nl,oceole.fr,pedicurereinajansen.nl,povv.be##.usn-notification
+!! #modal
+altersgerechtesbad.de,global.jcb,jcbeurope.eu,lueur.org,picnic.app###modal
+!! .consent-manager
+at5.nl,nhnieuws.nl,prettynailshop24.de##[class^="consent-manager"]
+!! .v-snack__wrapper
+amiunique.org,armegoszto.hu,kaidee.com,rewardlink.io##.v-snack__wrapper
+!! .FeatureBar_root___INU8
+freshcart.se,ninelife.no,store.pw.live##.FeatureBar_root___INU8
+!! .v-overlay
+abnt.org.br,adressen.schober.de,andyguitar.co.uk,bimedis.ru,ichbindeinauto.de,mp.cz,order.fiveguys.fr,promotionbasis.de,rypsv.scot,trustpid.com##.v-overlay
+!! .cky-consent-container
+abels.co.uk,beebeeboard.com,cetpenedes.cat,cvonline.varbamisteenused.ee,eurooptions.co.uk##.cky-consent-container
+!! Cookie_
+appmetrica.yandex.comm,sook.space##[class^="Cookie_"]
+!! .cookie123-popup
+123-3d.nl,123accu.nl,123ink.se,123inkt.nl,123led.nl,123schoon.nl,123tinta.es,kabelshop.nl##.cookie123-popup
+!! .notification-bar-container
+onepercentclub.com,samenvoordebuurt.nl##.notification-bar-container
+!! #popupDivC
+loi.it,panzerionline.com,rotta.it,safelserramenti.com###popupDivC
+!! .popup--cookies
+electroheads.com,wellaware.eu##.popup--cookies
+!! .wrapper
+asatransforma.org.br,byoplanet.com,cablelink.com.ph,fubo.tv,hirezstudios.com,mobileinternetbanking.com,tehnogama.com,viacaogatopreto.com.br##.wrapper
+!! #notice
+boss-nekretnine.hr,carbonite.com,connect.coron.tech,eltern-bildung.at,housemethod.com,lider.hr,optimus.co.im,yoy.tv###notice
+!! .panel--cookie
+fitfortravel.nhs.uk##.panel--cookie
+!! #popupDiv
+cghearthayurveda.com,denteuropa.de,digitalagencynetwork.com,fonehouse.co.uk,metrofone.co.uk,prakritishakti.com###popupDiv
+!! #epd
+astersrl.eu,bicielettrica.torino.it,hausbetreuer.eu,mercatino-software.it,mptfp.gob.es,timonesrl.com###epd
+!! #cbar
+gocards.nl,mooiedeal.nl,radioluisteren.fm,reischecker.nl,slepicar.cz,slepicar.pl,slepicar.sk,tvgids24.nl,zien.tv###cbar
+!! .Cookiebar_
+eestipank.ee,visitsweden.de##div[class^="Cookiebar"]
+!! .mst-gdpr__cookie-bar-overlay
+sklepmartes.pl##.mst-gdpr__cookie-bar-overlay
+!! cookies-banner
+latribune.ca,lesoleil.com,livejournal.com,px.dev,takealot.com##[class^="cookies-banner"]
+!! .notification-banner
+foolproof.com.sg,foxbusiness.com,foxnews.com,vgchartz.com##.notification-banner
+!! #cookieSettings
+bloemenvanblok.nl,vileda.de###cookieSettings
+!! #cookieman-modal
+bmeia.gv.at,bwi.de,easybell.de,foodwatch.org,jku.at,kunstmuseum-moritzburg.de,landsberg.de,lempertz.com,merten.de,starnbergammersee.de,stmwi.bayern.de,w-hs.de###cookieman-modal
+!! .CookieDialog
+eyescan.nl,happycoins.com,socialbrothers.nl##.CookieDialog
+!! luna.amazon
+luna.amazon.co.uk,luna.amazon.de###cookie_consent_dialog
+!! sandberg
+sandberg.es,sandberg.fr,sandberg.world###privalert-container
+!! .message-footer-panel
+mojehobby.pl,super-hobby.at,super-hobby.be,super-hobby.co.uk,super-hobby.com,super-hobby.de,super-hobby.es,super-hobby.fr,super-hobby.it,super-hobby.lv,super-hobby.pt,super-hobby.rs##.message-footer-panel
+!! .fixed-bottom
+atproperties.com,autotrader.com,coingecko.com,disponivel.com,dogruhaber.com.tr,equisys.com,excellent-hemd.de,farmers.com,fordblueadvantage.com,g2g.com,gateway.one,getmailbird.com,ilkha.com,innn.it,jsonquerytool.com,lobaevarms.com,modoko.com.tr,muze.gen.tr,parklot.pl,plantnet.org,remove.bg,rotadooeste.com.br,shroomers.app,skokka.com,speisebaron.de,susicka.cz,tjsc.jus.br,unscreen.com,wallpaperdirect.com##.fixed-bottom
+!! .navbar-fixed-bottom
+atomizer.gr,biblio.co.uk,comfortclick.com,discountoffice.nl,nowemiasteczko.pl,ornox.fr,polimarky.pl##.navbar-fixed-bottom
+!! .banner
+apgbio.com,cheddar.com,co-operative.coop,couchsurfing.com,cyscale.com,diagnosticquestions.com,fluidra.ba,fullscreen.com,haymarketbooks.org,human-facts.com,incyte.jp,jumia.ci,jumia.co.ke,jumia.com.eg,jumia.com.gh,jumia.com.ng,jumia.com.tn,jumia.dz,jumia.ma,jumia.sn,jumia.ug,modrinth.com,oceanmata.com,peer5.com,pluralsight.com,securitylab.github.com,subaru.be,usatoday.com,versobooks.com,zando.co.za##.banner
+!! .notice
+brightree.com,cgtrader.com,configserverfirewall.com,cortesdecima.com,delo.si,dialight.com,discordapp.com,dotmailer.com,evgo.com,exposition-osiris.com,fcc-fac.ca,foreground.com.au,fritchy.com,hilltopads.com,keenfootwear.com,medicalxpress.com,mygwork.com,outsideonline.com,pajilleros.com,phys.org,pokemon-trainer.com,revolver.news,shire.com,slovenskenovice.si,snbforums.com,socialmediagirls.com,techxplore.com,thresholdtrailseries.com,ubuntu18.com,vialibri.net##.notice
+!! GDPRConsent
+cambash.com,massivecams.com,nordforme.org,nordvpn.com##[class^="GDPRConsent"]
+!! .modal-overlay
+fahrrad-xxl.de,maxict.nl,mook.com.tw,paposertanejo.com,plus.pl,plushbezlimitu.pl,rolfsbuss.se,solresor.se,starcar.de##.modal-overlay
+!! .cookie-wrapper
+pickmypostcode.com##.cookie-wrapper
+!! .cc
+bdsi.de,hyle.appspot.com,johanneswerk.de,niederoesterreich-card.at##.cc
+!! #cc_div
+doctoranytime.gr,netzreform.de,opensocietyfoundations.org,otter.finance,stanceldavid.sk###cc_div
+!! .cc_div
+blocktechnology.eu,brgroup.cz,candylipz.sk,vitkovicecylinders.cz##.cc_div
+!! .u-bottomFixer
+androidforums.com,audi-sport.net,broadbandforum.co,builtbybit.com,digital-eliteboard.com,forum.proxmox.com,forums.hfboards.com,head-fi.org,hobby-machinist.com,hypixel.net,styleforum.net,websleuths.com,yttalk.com##.u-bottomFixer
+!! .js-bottomFixTarget
+namepros.com##.js-bottomFixTarget
+!! CookieBox
+codewise.com,nawozy.eu##[class^="CookieBox"]
+!! .modal-consents
+chaussures.fr,eapavi.lv,eavalyne.lt,ecipele.hr,eobutev.si,eobuv.com.ua,epantofi.ro,epapoutsia.gr,eschuhe.at,obuvki.bg,zapatos.es##.modal-consents
+!! .cookie-setting
+beleuchtung.at,beleuchtung.de,fotistikosmos.gr,lambimaailm.ee,lampak.hu,lampamania.es,lampamania.pt,lampemania.dk,lampite.bg,lampmani.se,lampupasaule.lv,lempumanija.lt,liderlamp.pl,luciamo.it,lumimania.be,lumimania.fr,luminam.ro,programia.cz,spokojenypes.cz,svet-svetil.si,svet-svietidiel.sk,svet-svitidel.cz,svijet-svjetiljki.hr,valomania.fi##.cookie-setting
+!! .cn-layer
+lindner-group.com,lindner-norit.com##.cn-layer
+!! .consent
+acast.com,bais.de,birgit-bittermann.de,builds.gg,catcat.com,checkyourmath.com,ciaoflorence.it,codementor.io,costume.dk,culturecalling.com,dateks.lv,discoversouthcarolina.com,franklintech.com,gezondheidsplein.nl,grandepremio.com.br,grips-automation.com,grotekleren-webwinkel.nl,iyengaryoga.it,klartale.no,mbc.net,mcdonalds.hu,megfoglak.hu,onzetaal.nl,pinterestacademy.com,scentre.pl,smarttrip.it,speicherguide.de,therisecalifornia.com,uio.no##.consent
+!! .consent-overlay
+2pdfconverter.com,allradio.nl,changefaces.com,chartle.com,clashtv.app,diagrameditor.com,elektro-plus.com,fakechatapp.com,files2zip.com,fotofilter.de,glitterphoto.net,htmlgames.com,mapimage.com,mindmapeditor.com,neonspellen.nl,phideo.com,photocollage.com,photoeditor.com,photoenlarger.com,photofilters.com,photofiltres.fr,photoresizer.com,postermaker.com,printscreenshot.com,qrapp.com,stripbackground.com,toonytool.com,uio.no,wordclouds.com,youtubetrimmer.com##.consent-overlay
+!! .consents
+estetic-dent-sklep.pl,miodykrupiec.pl,modnakiecka.pl,niewiem.pl,planszostrefa.pl,questsport.shop,skarbyroztocza.com,wkdzik.pl##.consents
+!! #consent
+alarabiya.net,alhadath.net,bagira.bg,cardzmania.com,chiccentre.com,cleverreisen.de,co.jpf.go.jp,datacite.org,digminecraft.com,drugstore.bg,e-confirm.de,eismoinfo.lt,find-dvd.co.uk,framar.bg,ft.com,heathrowexpress.com,heroforge.com,hifi4you.de,holition.com,hospiz-bodhicharya.de,hospiz-horizont.de,hunsruecktouristik.de,itt.bg,jtl-software.de,kaeltewolf.de,kauppasatama.fi,kigu.nl,kinopolis.de,kunstnet.de,lacsiboltja.hu,mapcarta.com,notebookinfo.de,nperf.com,pardini.de,plasico.bg,produkt.easyweb.travel,reisebuero-marzian.de,reisetreff-muecke.de,schulthess.ch,stat.gov.lt,techonthenet.com,terminal-bgt.de,tourismos.net,touristikerfotos.net,wellnissimo.de,zitatezumnachdenken.com###consent
+!! ^.cookiesBanner-
+interacty.me,wetaca.com##div[class^="cookiesBanner"]
+!! .cli-bar-popup
+reproduccionasistida.org,salmonsoftware.ie,wemabank.com##.cli-bar-popup
+!! .cky-modal-backdrop
+gecina.fr,kettlewellcolours.co.uk,popsa.com,startupjobs.cz##.cky-modal-backdrop
+!! CookiesModal
+alcatraz.ai,dobro.ru,lawline.se##[class^="CookiesModal"]
+!! eyesandmore.*
+eyesandmore.be,eyesandmore.de,eyesandmore.nl,eyesandmore.se###cookie-dialog-wrapper
+!! .ltcn
+apteekkari.fi,arbesko.com,energiauutiset.fi,kilpisjarvenretkeilykeskus.fi,mara.fi,mestaruusliiga.fi,mmsaatio.fi,nysse.fi,palkeet.fi,vitriini.fi,yllas.fi##.ltcn
+!! #Consent
+ferienbon.de,hfm-stb.de,hoffmann-medien.com###Consent
+!! #cc-wrapper
+flanco.ro,ip-adress.com###cc-wrapper
+!! .cc_dialog
+it-notes.dragas.net,lehmanns.de,solas.ie##.cc_dialog
+!! .cc-grower
+lansol.de,simply-yummy.de,volcanoteide.com##.cc-grower
+!! .cb
+adammendrek.cz,airsoft.ch,airsoftzone.at,armamat.at,poistenievyhodne.sk,racius.com##.cb
+!! .CA
+efkoart.cz,ellexgk.cz,eltasat.cz,kawio.cz,majkl3d.cz,majkl3d.sk,marusik.cz,niwa.cz,softcotton.pl,top-dent.cz,woolife.cz##.CA
+!! .cookie-text
+crimetime.com,elba.sk,karakartal.com,kartelluk.com,pmkariyer.com,sarsilmaz.com,superfb.com,webaslan.com##.cookie-text
+!! .cb-overlay
+grillfuerst.de,pss.sk##.cb-overlay
+!! .jsFixedMessage
+eufy.com,kurasu.kyoto,popcandyco.com,seenebula.com,soundcore.com##.jsFixedMessage
+!! #cboxOverlay
+abrakadabra.com,dumtiskaren.cz,evaair.com,flender.com.cn,harmony.co.il,heuristic.pl,laboratoria.net,luxprom.pl,motonera.com,mydoka.com,play.tv,portal.by.aok.de,ppkbjelovar.com,premium-aerotec.com,stokrotka.pl,sudnews.it,surflightingdesign.com,testo.com,transletra.pl,ubs.com###cboxOverlay
+!! #cboxWrapper
+stokrotka.pl###cboxWrapper
+!! #colorbox
+abrakadabra.com,etherealmechanics.info,evaair.com,flender.com.cn,heuristic.pl,laboratoria.net,luxprom.pl,mydoka.com,play.tv,portal.by.aok.de,ppkbjelovar.com,premium-aerotec.com,surflightingdesign.com,testo.com,transletra.pl###colorbox
+!! .cookies-component
+proprospan.ru,worksmile.com##.cookies-component
+!! #cc-main
+jackbox.tv,kirchberg.ch,ndsas.sk,trakt.tv###cc-main
+!! #cc--main
+alde.se,arbetsgivarverket.se,bambulab.com,blackcomb-shop.eu,blog.fanfiktion.de,boardgamegeek.com,cdw.com,cdwg.com,defector.com,feedoptimise.com,flowforge.com,packtpub.com,reteimprese.it,spielregeln-spielanleitungen.de,stocksy.com,streetsblog.org,suncalc.org,teksavvy.com,ungeziefer-ratgeber.info,wifiwijs.nl###cc--main
+!! .c--anim
+a24films.com,accademia-agricoltura.it,actualidadempleo.es,aftermath.site,alpha-heidelberg.de,amperecomputing.com,auraton.cz,bicidastrada.it,brnooffice.cz,byu.edu,cgmfinance.it,cubeshot.io,diderot.sk,ebikecult.it,elettricomagazine.it,emmellearredamenti.com,fanfiktion.de,fazzini.sk,fcvysocina.cz,federgolf.it,ferbafran.com,fiumewine.com,floorpark.cz,gaminternational.it,giga-hamburg.de,handylex.org,hippogroup.it,import-sport.com,izolace-info.cz,klasikcz.eu,locandadelledune.it,macrent.se,mtbcult.it,nabytek-alesvit.cz,nasejimky.cz,natureticabielli.it,netzwerk-kinderschutz-msh.de,nicelocal.com.de,passionemaglie.it,perugiassisi.org,plateuptools.com,plus-gp-joule.de,ppeshop.cz,rptuning.cz,ruinimarco.it,santarcangelobasket.com,sbcomp.cz,senkyrik.cz,shop.dicompass.cloud,sponkovacky-kovani-vruty.cz,svet-topeni.eu,systeminit.com,tagvenue.com,tgyou24.it,tokarex.cz,trakt.tv,tuttopisa.com,universoinformatico24.it,vinoplacek.cz,vkcyklosport.cz,www.query.cz,xn--audiodiqualit-1db.com,yalemedicine.org,zeno.fm##.c--anim
+!! #wr-c
+ahprofi.cz,akros.cz,aspshop.cz,fiskars-shop.cz,fiskars-shop.sk,kancelarska-kresla.cz,leifheit-shop.cz,leifheit-shop.sk,mpmshop.eu,rafoshop.cz,relaxin.cz,superdiskont.sk,yatun.cz###wr-c
+!! .gdpr
+aviationweek.com,metallica.com,phonemore.com,srilankan.com,sydsvenskan.se##.gdpr
+!! .gdpr-wrapper
+ezviz.com,hikvision.com##.gdpr-wrapper
+!! #GDPR
+agegeek.com,bit-tech.net,evanews.eu,memorycard.guru,pratt.edu,tedpella.com,yokohamatoyopet.jp###GDPR
+!! .z-999
+flexiti.com##.z-999
+!! .z-100
+cote.co.uk,ennismore.com,gemini.pl,sallys-shop.de##.z-100
+!! .cookie-bar
+ansell.com.cn,karriartips.se##.cookie-bar
+!! #ws_eu-cookie-container
+absolut-canoe.de,adt-diamantwerkzeuge.de,aluscout.de,blasmusik-shop.de,deinsportsfreund.de,diekleinewerft.de,druckerpatronenexpress.de,duftfeeling.de,edesign24.de,ersatzteil-shop24.de,eurotabak.de,futterscheune.com,glitzerpueppi.de,growland.fr,joergs-sportladen.de,julido.de,kabelschuhe-shop.de,kartons24.de,lanade.de,meine-hochzeitsdeko.de,nmav.de,pflanzen-mauk.de,shop.cosch-edelstahl.de,tesla-lighter.de,watchband-berlin.com,wischmopps.de###ws_eu-cookie-container
+!! #banerRoot
+gessteel.com,institutrocafort.com,masllombart.com###banerRoot
+!! .legal-consent
+mall.cz,mall.hr,mall.hu,mall.sk,mimovrste.com##.legal-consent
+!! #cookie-consent
+anixe.pl,moebel-berning.de,uhrzeit123.de###cookie-consent
+!! moebelix / xxxlutz
+moebelix.cz,moebelix.sk,moemax.at,moemax.ch,moemax.de,moemax.hr,moemax.hu,moemax.ro,moemax.si,momax.pl,poco.de,xxxlutz.at,xxxlutz.ch,xxxlutz.cz,xxxlutz.de,xxxlutz.hu,xxxlutz.ro##._v-qs6Y5hTXMmFt87
+!! .bg-green-200
+horloge.nl,orologio.it,relogios.pt,watch.co.uk##.bg-green-200
+!! helifix
+helifix-cz.cz,helifix.co.nz,helifix.co.uk,helifix.com,helifix.com.au,helifix.de,helifix.it,helifix.nl###black-band-container
+! Morningstar
+morningstar.at,morningstar.be,morningstar.ca,morningstar.ch,morningstar.co.uk,morningstar.com,morningstar.de,morningstar.dk,morningstar.es,morningstar.fi,morningstar.fr,morningstar.hk,morningstar.it,morningstar.nl,morningstar.no,morningstar.pt,morningstar.se,morningstarbr.com###additionalInfoe
+!! allthingslive
+allthingslive.be,allthingslive.com,allthingslive.dk,allthingslive.fi,allthingslive.no,allthingslive.se##[class*="CookieBannerPro_"]
+!! CookieBar
+dagrasso.pl,freedomtreks.co.uk,hiveon.com,hiveon.net,kritikos-sm.gr,skisafari.com,watch.plex.tv##div[class^="CookieBar"]
+!! .cookie-check
+connection.com,eink.com,govconnection.com,macconnection.com##.cookie-check
+!! .cc-window
+ablebits.com,bund-naturschutz.de,e-infra.com,gesundheit-nds.de,ionos-group.com,justia.com,malaysiaairlines.com,sf311.org,wedolit.eu,zesty.tech##.cc-window
+!! .popup
+agcopartsbooks.com,beiersdorf.com,digitfoto.de,efootwear.eu,engeo.ch,gps-viewer.com,hypeauditor.com,kiswe.com,mellerud.de,mesampoulesgratuites.fr,mindmatrix.net,mymuesli.com,salesmanago.pl,swayhotels.com,topographic-map.com,travelexpress.pl,yclients.com,zabkagroup.com##.popup
+!! .popup-wrapper
+celticfc.com,devart.com,fulhamfc.com,nottinghamforest.co.uk,schuttetweewielers.nl,taptapp.rs##.popup-wrapper
+!! .popup-overlay
+enders-personalmarketing.de,huffingtonpost.fr,infozona.hr,jeitto.com.br,raygun.com,the-red.de,trilec.be,xn--logopdie-werner-4kb.de##.popup-overlay
+!! ^.PrivacyPolicy
+aliexpress.ru,bondfaro.com.br,buscape.com.br,ocean-archive.org,onexgroup.pl,quebarato.com.br,sketch.pixiv.net,zoom.com.br##div[class^="PrivacyPolicy"]
+!! .modal-dialog
+environmental-finance.com,hepatitiscgids.nl,institutopioxi.org.br,profiltro.com.br,redebeneditina.org.br##.modal-dialog
+!! .notificationBarsWrapper
+jaguarbrasil.com.br,landrover.co.jp##.notificationBarsWrapper
+!! .notificationBars
+jaguar-me.com,jaguar.at,jaguar.be,jaguar.ca,jaguar.co.jp,jaguar.co.za,jaguar.com,jaguar.com.au,jaguar.cz,jaguar.de,jaguar.es,jaguar.fr,jaguar.it,jaguar.nl,jaguarportugal.pt,jaguarusa.com,landrover-me.com,landrover.at,landrover.be,landrover.ca,landrover.com,landrover.com.au,landrover.com.hk,landrover.cz,landrover.es,landrover.fr,landrover.gi,landrover.it,landrover.nl,landrover.pt,landrover.ru##.notificationBars
+!! .notification
+3arena.ie,about.me,ad-maven.com,bertil.com,bethesda.net,blog.aujourdhui.com,brandalley.co.uk,cambridge.org,delfortgroup.com,dlink.com,eveningtelegraph.co.uk,fastcompany.com,gw2treasures.com,idea-bank.ro,inc.com,istotne.pl,lidl-ni.co.uk,lidl.co.uk,lidl.com.mt,lidl.dk,lidl.ie,lidl.lt,lidl.ro,lidl.se,light-it.net,lojasrenner.com.br,lucasentertainment.com,megawrzuta.pl,ministrants.com,moviepilot.de,mvagusta.com,pelit.fi,podoplus.be,postimees.ee,preoday.com,proff.dk,provincieantwerpen.be,puregym.com,redbet.com,sciencex.com,spreds.com,stormgain.com,telia.fi,toluna.com,versus-omega.com.tr,vialibri.net,wmeentertainment.com,ybs.co.uk,yola.com,zaplo.dk,zepass.com##.notification
+!! #overlay
+aramon.com,bat.com,bata.com.au,calimove.com,castroniaviacatania.com,cerler.com,formigal-panticosa.com,giftsfactory.ru,ihk-nuernberg.de,javalambre-valdelinares.com,muenchen.rotary.de,nanu-nana.at,nanu-nana.de,nuk.de,shokobrand.ru,testmy.net,top-dots.com,vbo.be,vtech-hub.de,xn--allestrungen-9ib.de,xn--gnstiger-reisen-zvb.de,zif-berlin.org###overlay
+!! .sp-overlay
+hotelkingscourt.cz,sgl.gr,titanic.com.tr,trunews.com##.sp-overlay
+!! .reveal-modal-bg
+artnovion.com,buerger-profikueche.de,buerger.de,carhartt.com,facsa-eoficina.grupogimeno.com,inmoernio.com,inmomariacristina.com,inmonortealde.com,karriere-suedwestfalen.de,maisonsetappartements.fr,pli-petronas.com,southwark.gov.uk,swatch.com,torebrings.se,tucasatoledo.com,verdi-eiendom.no,warburg-bank.de##.reveal-modal-bg
+!! #lgpd-container
+alunopresente.org.br,connectparts.com.br,educacaoeterritorio.org.br,livredetrabalhoinfantil.org.br,portal.aprendiz.uol.com.br,territoriosemrede.org.br###lgpd-container
+!! .cookie_modal
+bolsamaisbrasil.com.br,tabuladigital.com.br,team.drund.com##.cookie_modal
+!! CookiePolicy
+btc.com,criminalip.io,esportbet.io,glossika.com,podimo.com,rangewell.com,roguecompany.com,stableton.com,tvb.com,zinio.com,ziniounlimited.com##div[class^="CookiePolicy"]
+!! CookieNotice
+bitkubnft.com,bloomberglaw.com,dopper.com,engen.co.za,insailing.ru,kentik.com,news.bloombergtax.com,scite.ai##div[class^="CookieNoti"]
+!! CookiesNoti
+dryg.pl##div[class^="CookiesNoti"]
+!! .cookie-notice
+acidcow.com,amaze.org,artdentis.com,bankofengland.co.uk,breadandbutter.ru,castlefineart.com,drgerard.eu,ecosia.org,harveynichols.com,jetset-hairextensions.nl,kappahl.com,mageba-group.com,mashable.com,motocard.com,nc-planica.si,ncfu.ru,onlinedrugtraining.com,pagetiger.com,pryor.com,publicpositions.com,rex-royal.ch,tvsquared.com,viboom.com,vidal.ru,vixx.nl,worldtestchampionship.com,xtreme.pt,zonstudio.nl##.cookie-notice
+!! #toast-container
+alppimatkat.fi,als.royalholloway.ac.uk,bubblemaths.com,ecosto.fi,homenet.no,kialo.com,kindredgroup.com,kuntarekry.fi,lokinn.com,nelly.com,nlyman.com,quedo.es,schoolworkspace.co.uk,sozialleistungen.info,startnext.com,telecomtv.com###toast-container
+!! .toast
+agritrader.eu,befunky.com,bidvestbank.co.za,bisu.com.tr,byutv.org,cmo.de,dlford.io,freesound.org,interflora.by,interflora.ee,itineraricamper.it,pasfoto-frederiksberg.dk,puzzlemaster.ca,szybkopraca.pl,tbs.com,tntdrama.com,usave.co.uk##.toast
+!! .gdprModal
+aminarubinacci.it,atlasstoked.com,avlonbg.com,butor-mirjan24.hu,castroniaviacatania.com,cheapoutdoor.nl,diamante.sk,fraggerzstuff.pt,franc-music-shop.com,gecoshop.com,gritija.lt,lafermeducbd.fr,meterspec.it,mirjan24.de,papirbolt.com,premiumtools.ro##.gdprModal
+!! ^.CookiesConsent
+cam4.com,ddctoolbox.com,pusher.com##div[class^="CookiesConsent"]
+!! class*="CookieConsent"
+bungie.net,certik.com,etonshirts.com,footshop.com,forzafootball.com,get-in-engineering.de,heavenhr.com,mec.ca,pictogrammers.com,prezly.com,print24.com,repvue.com,scmagazine.com,sierranevada.es,visitstockholm.com,zilliz.com##div[class*="CookieConsent"]
+!! .consent-banner
+twitch.tv##.consent-banner
+!! .dialog-lightbox-message
+1800runaway.org,aceprensa.com,ak-asya.com.tr,alivia.org.pl,almeidastextile.pt,ancon.io,caltex.co.za,cerre.eu,cofense.com,cronycle.com,direct-carpets.com,experiorfinancial.com,fermedelinciaux.be,fft.mt,getspace.us,gilmoreglobal.com,ingeniamc.com,janninebarron.com,lsisoftware.pl,lucerna-chem.ch,luukku.com,lwab.se,maltaconsulting.mt,marathonhr.com,marshfieldpre-school.co.uk,medyascope.tv,mitreprinting.co.uk,realvnc.com,ritchy.com,rwi.se,shotam.info,smackcoders.com,takeoff.org.mt,terracreta.gr,terveyskauneus.fi,tvpop.com.br,tzumi.com,vrxdb.com,webdesignspecialistamsterdam.nl,webdesignspecialistdenhaag.nl,whatcounts.com##.dialog-lightbox-message
+!! .dialog-lightbox-widget
+ardutronix.de,awdisbrands.com,blackmusicscholar.com,coachdaveacademy.com,courses.heatgeek.com,cover-4-less.com,dogfoodreviews.com,elegis.com.br,itepexam.com,martonmedia.pl,mindigital.gr,onlyonce.today,renovainvest.com.br,saferpass.com,satel.pl,sublabmusic.com,tealstreet.io,thebfa.org,veracore.com,victorvision.com.br##.dialog-lightbox-widget
+!! .t657
+2035.university,alfabusinessweek.ru,bohoo.ru,dcciv.ru,domino-sveta.ru,evisa-russia.ru,examus.com,floristtina.ru,geniusreferrals.com,millionviews.ru,nadessert.com,niagara-pu.ru,ollinprofessional.ru,qapp.tech,sales-battle.ru,tilda.cc,usedesk.ru,waterlamp.de,xianti.fr,zaslon-ul.ru##.t657
+!! .t886
+adex.com,bolotova.site,dailydaisy.ru,fizza.se,granat.by,ifarm.fi,iseven.ee,itlawyers.ru,mcbrothers.ru,mu.se,papadon.com.ua,podpiska.org,r7-office.ru,ralabs.org,saimaa-life.com,slurm.io,snabznak.ru,socioinform.com,stoic.ai,variti.io,way2success.club,webexovet.ru,whoosh-bike.ru##.t886
+!! .t887
+1cgs.net,beauty-nova.ru,kv-techno.ru,likvidater.ru,netpeak.net,timberg-battery.ru,xn--80asghhd1h.xn--p1ai##.t887
+!! .t972
+batichiffrage.fr,financebaby.de,jush.pl,minecraftfortress.org,tab.digital##.t972
+!! #gdpr-consent
+facebookblueprint.com,kalenderwoche.at,kalenderwoche.de,lemon-school.sk,mmtop200.com,numerodesemaine.fr,podconsultsbutik.dk,skillshop.exceedlms.com,thornburg.com,ugenr.dk,ukenr.no,veckonr.se###gdpr-consent
+!! #didomi-host
+ivoox.com,marianne.net,rtl.be###didomi-host
+!! ^cookie-consent
+icabanken.se,mitsubishi-motors.gr,sortter.fi,verwaltung.bund.de##div[class^="cookie-consent"]
+!! ^cookies_
+crex24.com,mission.com.pl,mpastucha.pl,octoparse.fr,pik-broker.ru,prof-us.com.pl,stamped.io,subtleartmovie.com,tstheerastourfilm.com,zbigniewzych.pl##[class^="cookies_"]
+!! .cookies__wrapper
+atelierpierreculot.com,biegamy.pl,bio-restaurant.lu,brusselsbybike.com,campingettelbruck.lu,codi.coop,ecofirst.eu,ecotrel.lu,eislek.lu,ekkoist.com,falko.nl,horex.pl,hub-charleroi.be,in-line.ru,longevita.ua,maastd.nl,maredoc.lu,net-film.ru,protetikafm.cz,rehasuisse.ch,ryvage.com,shop-krastsvetmet.ru,slavutina.ru,sporticos.com,thuer-co.ch,ua-development.com,ugda.lu,x30.ch,xn--neugren-r2a.ch##.cookies__wrapper
+!! #cookiebannerModal
+gamalostfestivalen.no,glhf.zone,myhealth.bg,qinn.es,sidibel.com###cookiebannerModal
+!! .cookies
+21buttons.com,2x2.su,4-72.com.co,acaplast-group.com,acaplast.com,adscompass.com,advstreet.ru,aegeanbalticbank.com,agerip.com.br,agugiarofigna.com,aislamientostrapaga.com,akado.ru,aliorbank.pl,alty.co,amikado.com,amnesty.org,angolodelregalo.it,angora.com.pl,aoc.com,apcloud.es,aphome.es,apppay.com.br,aquasain.com,aragon.es,arbiton.com,ascensorescaas.com,asda.com,asgi.es,ashridge.org.uk,aslimnica.lv,asmcf.org,aspe-uk.eu,astondoapiroteknia.com,astra-mag.com,autempoeuropie.pl,auto1.fi,auto10.com,auto24.org,avanga.org,bacelic.hr,bahianoticias.com.br,bandainamcostudios.my,bayfer.es,baza.io,bcm.marketing,belarus24.by,belivehotels.com,bemob.com,bfc.pl,bim-bike.hr,binomo.com,biofoodolbia.com,blomedry.com,bokadirekt.se,bolagsverket.se,boltengine.com,boomverzorgingmichiel.be,brandmake.nl,bubble-ecoworking.com,bubok.com.ar,caaquebec.com,calltouch.ru,carowall.com,cashconverters.es,cavex.co.uk,cdnnow.pro,cdnnow.ru,centromaiez.com,certafarmacia.com.br,ch1ef.ru,chemistdirect.co.uk,chiavalon.hr,chilexpress.cl,chophytol.ru,ciar.london,cienpalacios.com,cineworld.co.uk,city-story.ru,classen.pl,coinbase.com,compendium.com.ua,conquistainternet.com,consumeraffairs.org.uk,corporate.it,cp.pt,crytek.com,custplace.com,cutterbrooks.com,cyberctm.com,danwood.de,darking.cz,darnitsa.ua,dehoniane.it,depintxopote.com,desirebutik.pl,dhosting.pl,diahelp.net,diamantea.com,diariodelaribera.net,diher.es,dille-kamille.de,divinity.game,dobro.hr,doctoralilianamarrero.com,doit.software,domarket.ru,dorotheum.com,duplicatephotosfixer.com,dur.ac.uk,dvdmax.pl,e-bebek.com,e-dostavka.by,e-glossa.it,ebschool.cz,edifier.com,egyptair.com,egzaminy.edu.pl,eirsport.ie,electra-vitoria.com,elmachips.com.br,emall.by,emea.com.tr,enable-javascript.com,equall.gr,espariga.lv,estudiotextilcolor.com,etymon-solutions.com,eudita.es,euromedictorun.pl,eurozine.com,everybody-s.com,evisa.express,evropochta.by,fair.bg,fannatic.be,fastpersonal.ru,feelunique.com,fieldtriphealth.nl,filtrosfera.pl,fitpatrol.pl,flatironsquare.co.uk,fluid.co.uk,fnsea.fr,folklore-society.com,fondazionehenraux.it,food.vkusvill.ru,foodforsoul.it,forsettlement.com,fortressbp.com,fotomatonia.com,free3dbase.com,freevpnplanet.com,friendsfit.cz,friendsofeurope.org,froneri.ru,fuegodevida.com,ga-lo.com,gamdias.com,game-game.com,game-game.com.ua,game-game.ee,gandalf.com.pl,garajecentrobilbao.com,gartic.io,gdplegal.es,geschenking.de,gheed.com,glavred.info,gmzp.pl,goboony.be,golfdondurma.com.tr,gps-viewer.com,grandvision.com,graneleiro.com.br,graspop.be,guggenheim-bilbao.eus,gumenadom.si,gurutzekogurasoak.eus,havkom.se,hemocentroriopreto.com.br,hi-fi.ru,hitdiscount.by,hmv.com,honda.co.za,hopdoddy.com,hospitaldebase.com.br,hotel-merlin.cz,hotel-spider.com,hotelbellaire.com,hotelhaven.fi,hotelskeppsholmen.se,houkesloot.nl,hp-store.hr,hse.ru,huntshowdown.com,iamhungry.fr,iasgp.org,iden.team,idiomaster-arrasate.com,igsoft.be,ilbestiariorivista.it,ileanafundi.com,ilmainensanakirja.fi,imaginanet.com,inagrm.com,indepth.dev,ingrad.ru,inmogestionretail.com,intendit.se,intergameonline.com,italotreno.it,itkkit.com,itubaina.com.br,iwp.be,izi.si,jefferson-hifi-video.fr,justicaeleitoral.jus.br,kabola.hr,kaitseliit.ee,kiauto.fr,kituramirus.com,kudosrewards.gg,laboratoriohlab.com.br,lama-media.com,larepublica.co,laskort.com,latiendadelaspegatinas.com,lavardi.ru,ldavinci.edu.pe,lelieuunique.com,lenovostore.hr,les33.ru,lfv.se,ligaforty.com.br,luxottica.com,lvsas.sk,m-fashion.pl,m.brettspielwelt.de,mabanque.bnpparibas,macpaw.com,madalinliviu.ro,mailjet.com,makandracards.com,mannheimerswartling.se,markups.kdanmobile.com,marsgaming.eu,martinrandall.com,maschinenportal24.de,mayoly-spindler.ru,mcc.live,medela.co.uk,media-sense.com,melag.com,melag.de,metaflux-ts.cz,metalomarao.pt,mikronis.hr,milanowek.pl,mindshareworld.com,mindswarms.com,mlp-advokat.ru,mm.ck.ua,mnemonic.io,moby.it,mobylines.com,mobylines.de,mobylines.fr,mobylines.nl,modirum.com,monetizze.com.br,monterail.com,mpccreative.io,mute.design,myinvestor.es,mzk.zgora.pl,najlepszemeble.pl,nanocad.com,nascentdesign.com,naszefutrzaki.eu,nedbank.co.za,nederlandsebrouwers.nl,neumaticoszorroza.com,nichiha.ru,niedziela.pl,nikubowling.pl,nobis.se,nobishotel.se,northmagnetic.com,nowports.com,o-ma-god.com,okocrm.com,omaweetraad.nl,onas.org.pl,onderdelenlijn.nl,oneticket.cz,onpoint.ru,onwelo.com,operakallaren.se,optima.hr,orientalmart.co.uk,orona.it,orona.ru,orona.uk,oru.se,ostrog.com,otkritkiok.ru,oxfloormultistep.com,panamaamerica.com.pa,panfasad.com,parfumsclub.de,parkerenharlingen.nl,paysale.com,pecres.es,perfumesclub.co.uk,perfumesclub.com,perfumesclub.fr,perfumesclub.it,perfumesclub.nl,perfumesclub.pt,permak.com.tr,photonengine.com,picnic.app,pics.io,pildorasdefe.net,pjon.org,pkpcargo.com,playgwent.com,ponovnauporaba.si,poolboy.eu,portalnovosti.com,previssima.fr,pribram.cz,prof53.ru,profidomo.pl,propertygem.pl,proton.com,proxyparts.com,proxyparts.de,proxyparts.es,proxyparts.fr,proxyparts.pl,puntodepartida.com,radeon-pro.github.io,radio-ecuador.com,referendum.gov.pl,reinbold-entsorgungstechnik.com,renaultbryanston.co.za,renaultfourways.co.za,renaultretailgroup.es,resumebuild.eu,rktbns.de,rowery-indiana.pl,royalparks.org.uk,rss.com,rtl.hr,rubyroidlabs.com,rusvpn.com,samsonite.ro,sapphiretech.com,sapphiretech.com.cn,sbsjager.sk,scamner.com,scobel.pasaz24.pl,screenflanders.be,segurcontrol.es,sejmsenat2019.pkw.gov.pl,selfhost.de,sellix.io,selo-zelenoe.ru,sgu.se,sharafdg.com,sikera.com,singulart.com,sisjointressenter.se,sistic.com.sg,skillbox.ru,sky.com.mx,slicethepie.com,sosbernuciemati.lv,spiderfoot.net,sprawdzonyfizjoterapeuta.pl,sprinter-avto.com,spth.gob.es,srazenazver.cz,stallmastaregarden.se,staltrans.ru,stanumamoy.com,stb.com.tn,stratoflow.com,streetfootballworld.org,strefawalut.pl,stuttafordvanlines.co.za,sudzibas.lv,summa.es,supercast.com,supertrezor.sk,svww.de,swood.pl,sylan.pl,taylorandfrancis.com,tdsexport.com,technolove.ru,tekniikkaosat.fi,teknikdelar.se,telsu.fi,terilogy.com,tescomobile.ie,testeri.fi,thea-nordic.dk,thenottingham.com,thisisplayground.com,thomas-elliott.co.uk,threadreaderapp.com,tireshop.ua,tirrenia.it,todomecanica.com,topographic-map.com,topvintage.com,topwayschool.com,trempak.co.za,trend-russia.ru,tse.jus.br,tuplus.com.co,twinings.co.uk,udruga-gradova.hr,ukcisa.org.uk,ukmail.com,umicore.com,unian.info,unian.net,unian.ua,universiteitleiden.nl,unknownphone.com,unpoly.com,uob.edu.om,uptodown.com,urtekram.com,userinyerface.com,ustavprava.cz,uxfocus.cz,valledeelda.com,veb.net,ver-tv.online,verstraete.biz,vestaconsultores.com,vfs.cz,vips.com.mx,visolit.net,vizologi.com,vocesmexico.com,volvocars.com,vvdntools.com,warhammerchampions.com,webawards.com.ua,webdock.dk,webdock.io,welfarepartners.ie,westpandi.com,wesur.fr,weweler.eu,wid.com.pl,wilko.com,wizards.com,wkruk.pl,worldeducation.hr,wybory.gov.pl,wyylde.com,xlhome.co.id,youareinapp.com,zadovoljstvozaposlenika.hr,zelena-akcija.hr,zerolives.com,zieduveikals.lv,zoom.earth##.cookies
+!! .cookie
+18virginsex.com,5corners.ru,7-price.com,7mind.de,abb.com,abcproxy.com,aeroflot.com,agrituber.it,agroportal.ua,akeshofsslott.se,akstel.ru,alahome.hu,alexab2b.com,altervista.org,alutech-group.com,anglianwater.co.uk,anybus.com,applefirmwares.com,apteka911.ua,artgranit.md,ask.fm,asko-home.ru,atomstroy.net,autoreisen.com,avans.nl,avecodebondt.nl,awesomic.io,bancontact.com,bancontactpayconiq.com,bc-nark.ru,bcci.tv,beauty-wellart-oase.de,bebouw.nl,bestofshirt.de,bestsellers.hu,bevachip.hu,bino.lv,bitpunk.de,blueflamingo.cz,boele.nl,boosteroid.com,bosporshop.ru,brownmac.com,bug.hr,calista-opt.ru,callcredit.co.uk,calvertjournal.com,canariatravel.cz,capujemedrogeriu.sk,castleton.edu,cbeci.org,ccaf.io,cct.hu,certh.gr,charuel.ru,chefsforchefs.co.uk,cibeg.com,citizen.com.ph,citizenwatch.com.tw,ckglobtour.cz,clubtshe.com,coasul.com.br,conferencemanager.dk,corvalliscustom.com,cosgroup.com.ua,coubassistant.com,crazydomains.co.uk,credem.it,customessaymeister.com,danielsen.eu,daparto.de,darkflash.com,dbpublishing.pl,dealburn.fr,debonthvanhulten.nl,delet.jhi.pl,dermashop.hu,derwaldhof.com,dgtpartners.cz,digiakademie.cz,dirk.nl,domkipogorzelica.com,drega.de,dschool.ru,dubotechniek.nl,dw.com,dynamicasrl.com,eastwoodfinancial.co.uk,eatstoats.com,ebz-bildung.de,edu-sense.com,edukatico.org,eegmp3.com,egmus.vip,ehecatl.com.mx,ekogrunty.ru,elcidiomas.com,eldoled.com,enver.nl,environment.ee,environment.lt,environment.lv,eponuda.com,escala.be,estaldo.com,ethex.org.uk,etimad.sa,euroweldgroup.lt,everpharma.ru,fahrschule-schober.de,fahrschule-schoeps.de,fairfair.at,farecompare.com,ffr.fr,filescan.io,finansowysupermarket.pl,findeks.com,firefox-usb.com,firstshop.hu,fitfoodway.ro,flygbussarna.se,focuscamera.hu,folkart.com.tr,forever21.com,forgeworld.co.uk,forsunkiopt.ru,foxenergy.pl,fs.com,fuchswacker.de,fum.info.pl,fuzuloto.com,g-ca.fr,g-ygol.ru,gdr.pl,gen-i.si,gensbouw.nl,genuinewriting.com,gestoriaverdugo.es,ggkm.ru,gha.org.uk,gheed.com,girlstyle.com,glashuette-original.com,global.abb,globtour.sk,gmhost.hosting,gooddollar.org,goossentepas.nl,gophonebox.com,greve.nl,gruzim-vse.com,gtlk.ru,gyorgyteabolt.hu,hafnertraktoren.com,happywithyoga.com,hashrating.com,hemostop.ro,hempel.co.uk,hempelyacht.com,here.com,hesselbyslott.se,hinet.net,hino.ru,hitmotors.ru,hmi-basen.dk,homij.nl,hotelterminus.bg,houseofjamie.com,hreyfing.is,hud.ac.uk,humboldt-foundation.de,humdes.com,hwilson.net,hzpp.hr,ichastaliklari.org,ichwillmeinmotorradloswerden.de,idemitsu.com,ikwilvanmijnautoaf.nl,ikwilvanmijnscooteraf.nl,imp.ac.at,infrest.de,innovabr.com.br,inpgi.it,intellishore.dk,intexty.com,investcapital.com.mt,iplt20.com,island-green.ru,itape.com,itresume.ru,jaguarlandrover.com,jahodovevino.sk,japanmotors.pl,jazzwelt.sk,jeffery-west.co.uk,joautok.hu,jv.ru,kaktus.ua,kanal-o.ru,karatekyokushin.hu,katolikus.hu,kayseriseker.com.tr,kessel.nl,key-test.ru,kitchentime.dk,kitchentime.no,kitchentime.se,kiwipress.hu,koketsfavoriter.se,komandor-ufa.com,kondorwessels-amsterdam.nl,kongreskrio.pl,kora.fr,koreanair.com,korzinka.uz,kroondekoning.nl,kurskdrama.ru,kwh-seniorenbetreuung.de,kws.nl,la-cabane-de-lyon.fr,landmarkpark.co.uk,lastberget.com,lava-drops.com,le.lt,lechpils.pl,leonorgreyl.com,les.gov.mt,licitanet.com.br,lileya.com.ua,liptonicetea.com,llider.ru,ludwig.guru,m64.info,machinestock.com,magdeburger.com.tr,magnaparte.com,magwai.ru,makujakauppa.fi,mandarinoriental.com,massanzug-online.at,massanzug-online.ch,massanzug-online.de,matratzen-concord.de,mazowieckie.com.pl,mci.gov.sg,mclaren.com,mcnallycontractors.com,medianauka.pl,meetingselection.se,megamallbucuresti.ro,megatop.by,metallbau-mueller.de,midacbatteries.com,mik.eu,missingvideo.com,mjoomen.nl,mkkedr.ru,mmgastro.pl,mobitec.be,modecom.com,model-kartei.de,modhoster.com,mofa.gov.sa,moneywise.co.uk,morgenwonen.nl,mp3poolonline.com,mpl.be,mpr-shop.ru,mtp.pl,mts.by,muskathlon.com,mydraw.com,myseason.gr,mysky.com.ph,mysobersupport.com,mysteriumvpn.com,mysurveylab.com,narbutas.fr,narbutas.ru,nasbyslott.se,naslovenskejvlne.sk,nationalcircus.org.uk,natwest.com,nbb-netzgesellschaft.de,neon-service.pl,netbiter.com,news247.gr,nodum.io,nornickel.com,novaindex.com,novyny.live,npl.co.uk,nudo.com.tr,obligacjeskarbowe.pl,occrp.org,oceandegrace.com,octotree.io,oggusto.com,okbssp.ru,okko.ua,oldgoesyoung.com,olinecontact.ru,olisen.se,onlinesim.ru,onlineszerszam.hu,onzeveilingonline.nl,opc.de,opendata.mkrf.ru,oscillo.ru,otouczelnie.pl,oxin-growers.nl,pansula.sk,paraf.com.tr,parafgenc.com.tr,parat.com,paulymeubles.be,payconiq.be,pc.domains,pch-dienstengroep.nl,pdfreaderpro.com,pepperl-fuchs.com,petrovax.ru,polar.ru,polstor.pl,postoffice.co.uk,pretty.presslogic.com,prima.pl,primeconstruction.pl,prodir.com,promenada.ro,promenadanovisad.rs,propiteer.com,prs-international.nl,purnatur.eu,quale-vita.com,quantum-inspire.com,quelpneu.com,radiologie-stuttgart.eu,railcom.nl,rb.is,rbs.co.uk,redditinc.com,regione.puglia.it,repertuarim.com,revanchedelafemme.de,rientiestuinmachines.nl,ringoo.ua,rmh.ru,roalddahl.com,rosersbergsslott.se,rostec.ru,rottinghuis.nl,rowenta.com,roxroyal.com,rozochka.ru,russwood.co.uk,rutoken.ru,safaco.pl,safedns.com,samocat.net,samsunghealthcare.com,sbh-ausbau.de,schwarz-horn.de,scotchwhisky.com,sddhelp.ru,secapital.lu,sekom.com.tr,sense.org.uk,sgt-oelsnitz.de,sheldrickwildlifetrust.org,shojin.co.uk,sibsoc.ru,silverlake.com,silverstonetek.com,sintez.online,siticard.ru,skiline.cc,skoroprint.com,skytteholm.se,sleek-mag.com,smitsneuchatel.nl,softhints.com,software.charliemonroe.net,soinc.com.tw,sovremennik.ru,sovrhistory.ru,spaceinspace.ru,spartanien.de,specialdeal.at,sports-esta.com,squirt.org,ssessments.com,stamendekoning.nl,stammzellen-verstehen.de,starcar.de,statusbrew.com,strive4.bg,student.is,sulu.io,super.fm,svitroslyn.ua,swing-cut.de,swinoujscie-apartamenty.com,sylimarol.pl,syntevo.com,syntrabrussel.be,szerszamoutlet.hu,t-mobile.nl,targipiw.lublin.pl,tatuzinho.com.br,tdlorien.ru,team-mediaportal.com,techleap.nl,techmart.bg,teenmegaworld.net,tenko.ua,thegap.at,theoddshop.nl,tidart.com,tk-alpha.ru,tminn.com,togetherall.com,top-electronics.com,top4mobile.ro,trailfinders.com,treasurytoday.com,tri-shop24.de,trickyoldteacher.com,trodat.sk,trosastadshotell.se,tt-72.ru,tubidy.news,tuneupmedia.com,tw-calc.net,tw1.ru,twitchstrike.com,typhoon.coffee,ufkesapeldoorn.nl,ufs-online.ru,ukastrum.ru,ulfsundaslott.se,unicheck.com,unicreditgroup.eu,unimax.com.tw,union.hu,universalna.com,unternehmensbericht.boehringer-ingelheim.de,urbanlifehk.com,utilities.nl,vanagtmaal.nl,vanderpoelterneuzen.nl,vandevenbv.nl,vcz.hr,veluwezoomverkerk.nl,vialis.nl,vigszinhaz.hu,virgin-atlantic.com,visserensmitbouw.nl,volkergroundengineering.co.uk,volkerhighways.co.uk,volkerinfra.co.uk,volkerlaser.co.uk,volkerrail.co.uk,volkerstevin.co.uk,volkerwessels.co.uk,vrsrail.nl,vsf.nl,vshanab.nl,vwinfra.nl,vwt-belgium.be,vwvastgoed.nl,wannawork.com,wantbaby.info,warmbat.nl,weareplaystation.fr,wessels-zeist.nl,wesselsrijssen.nl,westo.nl,wgmarienehe.de,wmt.top,wome.com.tr,woodupp.fr,wpnew.ru,wykop.pl,x-lam.it,xn--80ahmohdapg.xn--80asehdb,xo-securite.com,yachtclubgames.com,yamibuy.com,yavitrina.ru,youtubedownloadersite.com,ytddownloader.com,zahnarzt-dr-hoff.de,zettains.ru,zielonykamien.pl,zoomarket.by,zorgid.eu,zrin-otkup.com,zuhalmuzik.com##.cookie
+stockstories.com##.cookis
+!! .veil
+adidas.ae,adidas.co.za,adidas.com,adidas.com.eg,campchef.com,colehaan.co.jp,elizabetharden.com.au,federalpremium.com,gnc.com.ph,homebyames.com,hoptimist.com,kusmitea.com,lee.com,leifheit.dk,silmaasema.fi,speer.com##.veil
+!! .backdrop
+ads.nipr.ac.jp,data-driven-forms.org,genome.eu,hoyer.de,weddyplace.com##.backdrop
+!! .lightbox-backdrop
+der-hexenkessel.de,fikkieshop.com,improsystem.it,kierratyskeskuspatina.fi,laura-und-felix.de,madiosport.nl,mundschutzgermany.de,portugeseproducten.nl,ullas-batterieladen.de##.lightbox-backdrop
+!! #cookiebannerModal/.modal-backdrop
+digitalhumanrightslab.org,jomdesign.no,linuxlars.net,linuxlars.no,mein-kochbuch.org,robertborges.net,ropet.org,via-ferrata-lantosque.fr,vikja.no###cookiebannerModal
+digitalhumanrightslab.org,jomdesign.no,linuxlars.net,linuxlars.no,mein-kochbuch.org,robertborges.net,ropet.org,via-ferrata-lantosque.fr,vikja.no##.modal-backdrop
+!! #cookiesConsentDialog
+cadcrowd.com,eledo.online###cookiesConsentDialog
+!! .inset-0.fixed
+aplikuj.pl,extract.pics,hopetv.org,londonciv.org.uk,schletter-group.com,stringfurniture.com##.inset-0.fixed
+!! #sp_message_container
+bloomberg.co.jp,hitc.com##div[id^="sp_message_container_"]
+!! .tw-bottom-0
+blickers.com,blindewandplanken.nl,businessoffashion.com,cloud.ionos.com,naiin.com##.tw-bottom-0
+!! .cookiesConsent
+bestreisengroup.pl,oasistours.com.pl,volare.pl##.cookiesConsent
+!! #dm-cookie-popup-container
+activ-shop.sk,ajom.cz,ateashop.cz,bestlook.sk,biokrasa.sk,bohemiagoldcrystal.com,budkykrmitka.cz,caj-kava-cokolada.sk,canape.cz,canape.sk,collonil.sk,crystalshop.cz,cykloservis.sk,detske-auticka.sk,dianashop.cz,dubaiperfumes.sk,dumbylinek.cz,enabytek-iveli.cz,eva-s.eu,fenster-jetzt.at,fenster-jetzt.de,funtown.cz,goodlift.cz,hanashop.sk,jbsanitary.cz,klbkoshopa.eu,koeder.cz,kojeneckysvet.cz,kozmetikaprezdravie.sk,krmimmasem.cz,kuchyne-vybaveni.cz,lanatura.cz,limenclothing.cz,litvinoff.cz,lovomarket.cz,lymfy.sk,mikrovahy.cz,mikrovahy.sk,moda4u.cz,montana.sk,mybabystore.cz,nabytekvakci.cz,nasemuzstvo.sk,norskysvetr.cz,okna-hned.cz,okna-hned.sk,papierove-sacky.sk,plavecke-pomucky.cz,profiscales.cz,reenactor.cz,reflexninazehlovacky.cz,sapreza.com,saver.sk,shop.objednavka.com,silvini.de,stvarms.cz,tara.cz,teplochladno.sk,westernobchod.sk,zanaromi.com,zbozik.cz,zdravi.online,zijemesportem.cz###dm-cookie-popup-container
+!! norclinic.com
+norclinic.com,normalink.es###c-cookies__modal
+!! .overlay
+agendeam.com.br,antikvarium.hu,appmetmij.be,appmetmij.nl,atraveo.de,bancontact.com,bancontactpayconiq.com,columbia.pe,cyscale.com,domstol.se,e-domizil.de,easycosmetic.at,easycosmetic.be,easycosmetic.ch,easycosmetic.de,giffits-werbeartikel.at,giffits-werbeartikel.ch,giffits.de,girolando.com.br,gkndirect.com,infocom.be,ing.nl,meteoprog.at,meteoprog.be,meteoprog.ch,meteoprog.com,meteoprog.com.pt,meteoprog.cz,meteoprog.de,meteoprog.dk,meteoprog.ee,meteoprog.es,meteoprog.fr,meteoprog.hu,meteoprog.it,meteoprog.lt,meteoprog.lv,meteoprog.nl,meteoprog.pl,meteoprog.ro,meteoprog.se,meteoprog.sk,mitsubishicarbide.net,orbussoftware.com,payconiq.be,sescsp.org.br,slantastoffe.de,soldaatvanoranje.nl,sportium.es,theopen.com,zitatezumnachdenken.com##.overlay
+!! optoma
+optoma.ae,optoma.co.uk,optoma.com,optoma.com.br,optoma.com.mx,optoma.de,optoma.es,optoma.fr,optoma.it,optoma.nl,optoma.pl,optoma.ru,optomaeurope.com,optomausa.com###msgbg
+!! nordicnest
+nordicnest.com,nordicnest.de,nordicnest.dk,nordicnest.es,nordicnest.fi,nordicnest.fr,nordicnest.jp,nordicnest.kr,nordicnest.nl,nordicnest.no,nordicnest.pl,nordicnest.se##div[style="opacity: 1; display: flex;"]
+!! .lightbox-backdrop
+breparat.de,camping-freizeitbedarf.de,countryphone.de,e-material.de,gamemonkey.fi,goldshop-ulm.de,hannibelle.de,hollandstyle.de,holzfee.com,italianfoodlovers.de,landkarten-und-grafiken.de,liebesache.de,livolo-deutschland.de,modehasen.de,motecs-shop.com,natura-samen.de,prestigeshopgbr.com,scandmarkt.com,schamanentraum.eu,seamless-fashion.de,sm-pc.de,superstreusel.de##.lightbox-backdrop
+!! #sliding-popup-cookies
+decovarrubias.es,q10gestion.com###sliding-popup-cookies
+!! .qc-cmp2-container
+centrometeoitaliano.it,in.gr,oraridiapertura24.it,order-order.com##.qc-cmp2-container
+!! .cookie-consent
+congeo.nl,forcepoint.com,geeksforgeeks.org,insightsengineering.github.io,merosch.nl,niaiu.pl,peoplematters.in,plmxpert.nl,sodutch.nl,vinkkoeltechniek.com,werkenbijversluis.nl##.cookie-consent
+!! cookiesConsentModal
+latitudeandlongitude.net###cookiesConsentModal
+!! #my-ctc-widget
+my-sportswear.de,myinstructorclub.com,sc24.com,soccer-fans-shop.de,store-connector.com,transpack-krumbach.at,transpack-krumbach.ch,transpack-krumbach.de,transpack-krumbach.it,tropenfit.de,vetro-star.de###my-ctc-widget
+!! .spu-bg
+80dni.pl,adventure-team.eu,ap-goal.pl,app.mycard520.com.tw,assuropoil.fr,badaniaprenatalne.pl,bellpolska.com.pl,bezprawaanirusz.pl,businesstraveller.pl,camping-le-ruisseau.fr,careego.pl,centrum-terapii.pl,certum.eu,certum.pl,clubdelux.pt,codzienniefit.pl,conference2go.com,dmsj.org,ecochemia.pl,edenred.hu,erif.pl,esportnow.pl,faktykonopne.pl,haft.com.pl,healthypsych.com,hearttoheartmedicalcenter.com,horizonconsulting.pt,hudolia.fr,indonesiaexpat.id,infokonsument.pl,instalnet.pl,intercyza-blog.pl,investjourney.pl,ironsky.pl,jasnastronamocy.info,jmdi.pl,joespizza.it,kamienieogrodowe.com,karmopedia.pl,kartanauczycielablog.pl,konsalnet.pl,lecourrier.es,leszekbloch.pl,madameedith.com,magasinsdeco.fr,mamysprawy.pl,maxbus.com.pl,mhtm.pl,mj.recipes,naszesprawy.eu,naszwybir.pl,nergb.ru,nowasprzedaz.pl,opentuition.com,opolo.com,osiedlenatura.com.pl,pandrwal.pl,piekarniabialogon.pl,pierwsze-kroki.com,poloniawroclaw.pl,predathor.pl,programistanaswoim.pl,przedawnione.pl,przedsiebiorcza.com,przedszkolankowo.pl,przesył-energii.pl,radiowarszawa.com.pl,rauhanpuolustajat.org,recreatisse.com,sds-automatyka.pl,spkomandytowa.pl,stanprawnynieruchomosci.pl,studiosante.pl,suwalki.pl,szkoleniamaciolek.com,teatr-capitol.pl,teleradiopadrepio.it,the-cca.org,towsrodku.pl,transportsitransfer.ro,viakable.com,wars.pl,warunki-zabudowy.com.pl,watergarden.com.tr,wharton.upenn.edu,worldclassfitness.be,wspolnotakrzyzasmolec.pl,x-plane.com,yaizakon.com.ua,yasumi.pl,zabieganamama.com,zatorland.pl,zebrapen.ca,zsm.edu.pl,zuch.media##.spu-bg
+!! .spu-box
+adventure-team.eu,certum.eu,healthypsych.com,jbrcapital.com,mundomagicotv.com,the-cca.org,viakable.com,worldclassfitness.be##.spu-box
+!! duab
+duab.eu,duab.fi,duab.se##.css-pum9l9
+!! ikea
+ikea.bg,ikea.com.cy,ikea.gr###required-cc
+!! cookieBanner_
+bookbeat.at,bookbeat.be,bookbeat.ch,bookbeat.co.uk,bookbeat.com,bookbeat.de,bookbeat.dk,bookbeat.fi,bookbeat.nl,bookbeat.no,bookbeat.pl,bookbeat.se,schwiizer-schueuemli.de##div[class*="cookieBanner_"]
+!! .top-0.fixed
+beepbeep.ie,chplatan.pl,matchpint.com.au,tylko.com##.top-0.fixed
+!! .cookie-policy
+box.co.uk,gq.co.za,ipon.hu,naruto-tube.org,pnas.org,schouw.dk,silmid.com##.cookie-policy
+!! .modal-cookie-policy (no scroll fix needed)
+handandstone.com##.modal-cookie-policy
+!! #sliding-popup
+alandsradio.ax,audirsclub.it,automobil.se,bell-labs.com,bigsocietycapital.com,camperlife.it,caroftheyear.se,cartoonnetwork.co.uk,eif.co.uk,endurobloggen.se,integralmemory.com,juce.com,kantarsifo.se,lanutrition.fr,meethue.com,middleeasteye.net,mopedgaraget.se,parkinsons.org.uk,rmg.co.uk,servimedia.es,spainbs.com,svjt.se,thalesgroup.com,topuniversities.com,ucas.com###sliding-popup
+!! .sliding-popup-bottom
+accessonline.com,ar.iiarjournals.org,asobostudio.com,avvir.no,axa-im.es,beko.fr,biorxiv.org,blikopnieuws.nl,bportugal.pt,cam.ac.uk,centrale-canine.fr,cervantes.es,ciee.org,circuitdigest.com,cmaj.ca,der-baecker-eifler.de,derprivatpatient.de,diena.lt,domradio.de,dtm.com,eluniversal.com.mx,encuentre-abierto.es,escort-ads.com,europapark.de,europol.europa.eu,exploregeorgia.org,fdp.de,financialsense.com,firmania.es,gsis.gr,handballerd.hu,helsinginkaupunginorkesteri.fi,herbatint.com,ilm.pri.ee,indstate.edu,intelligentcitieschallenge.eu,iphonefaq.org,iva.de,jneurosci.org,kodi.tv,kpnpensioen.nl,land.nrw,lexcellence.swiss,ligainsider.de,mags.nrw,manner.com,medindia.net,medrxiv.org,metromadrid.es,migros.fr,minsait.com,muhabirce.de,nationalinterest.org,news.ki.se,nibusinessinfo.co.uk,nnieuws.be,novartis.co.jp,nrscotland.gov.uk,nutella.com,oneforall.com,orange.be,osmanlicakelam.net,ovomaltine.de,paihdelinkki.fi,paladinomedia.com,piaggiogroup.com,pioneer-car.eu,prestashop.com,psau.edu.sa,questionmark.com,radiosaw.de,rae.es,reinisfischer.com,rotel.com,sandoz.com.tr,sergeferrari.com,sonntagsblatt.de,staff.ki.se,stainlessgames.com,thuisarts.nl,timeshighereducation.com,tolisihoni.com,topuniversities.com,total.com,trademark-clearinghouse.com,ucg.org,unesco.de,unicef.org,usccb.org,uwaterloo.ca,veganjunkfoodbar.com,veggiepeople.org,voltimum.de,voxmail.it,waffengebraucht.at,weightwatchers.com,wildlifetrusts.org,wis-wander.weizmann.ac.il,worldpressphoto.org,zanzu.be,ziraatkatilim.com.tr,zuerich.com##.sliding-popup-bottom
+!! .cookiesplus-modal
+alfombrashamid.es,autovilardell.com,blancmarine.com,carmenvazquez.es,fadenkreuz-shop.de,farmaciadejaime.es,hobbysaliplant.com,kalkumezquerra.com,lauraashley.es,maletia.com,mcracingsa.com,molpack.com,moverte.com,moviloff.es,mueblestudio.com,muellerglas.at,rhsgroup.ro,sakata3d.com,tomasbodero.com,vinoyalgomas.com##.cookiesplus-modal
+!! .cookiewall
+achemosgrupe.lt,avikogastro.cz,brockhoff.nl,cibit.nl,dbkeukens.nl,demakelaars.nl,dutchweek.nl,hurenbijwooove.nl,kroftman.com,woontank.nl##.cookiewall
+!! .modal--cookie
+pkprintprof.ru,themodernhouse.com,wildberries.by##.modal--cookie
+!! _modal_outer_
+marathonphotos.live,witbee.com##div[id*="_modal_outer_"]
+!! #rgpd
+brokerdefense.net,cfmradio.fr,cmm.fr,espace-competition.com,fareneit.fr,fermeturegarage.com,fmauto.fr,freemaths.fr,ic4.fr,restaurantdieppe.fr,sensationlarge.com,sonomix.ch,ville-eu.fr,voyagesdenis.com###rgpd
+!! .vd-message-wrapper
+dirbam.lt,otsintood.ee,visidarbi.lv,zaposlitev.net##.vd-message-wrapper
+!! #axeptio_overlay
+fleursdedragees.com,lacellesaintcloud.fr,metiers-proprete.com###axeptio_overlay
+!! .cookie_holder
+3dg-textile.bg,auto-onderdelen.nu,benjaminpaints.com##.cookie_holder
+!! .cookie_footer
+createdirect.ro,notebooksopron.hu,sanofidiabetesacademy.com,sharp-cut.com,stereopalma.com##.cookie_footer
+!! #cookiewall
+bestel-thuis.nl,deventerschouwburg.nl,dyade.nl,franckenmetaal.nl,fsin.nl,hracademy.nl,jozefschooltexel.nl,kentekenplaathouders.nl,marente.nl,molentochtschagerbrug.nl,nomilk2day.nl,online-boodschappen-bestellen.nl,online-drank-bestellen.nl,onlineetenbestellen.nl,pleyade.nl,schoenmaker.nl,sdhvormgeving.nl,theaterdestoep.nl,thijsseschool-texel.nl,vanderheijdengroep.nl,zwolsetheaters.nl###cookiewall
+!! .js--overlay
+alpha-tex.de,aromatico.com,aromatico.de,bremer-gewuerzhandel.de,detomaso-watches.com,edampfer24.de,fairtoner.de,ffpshop.de,futononline.de,hoffmann-speedster.com,kiids.de,lanius.com,mister-lady.at,mister-lady.com,motorsportmarkt.de,rbb.de,sennerei-lehern.de,shop.berliner-kaffeeroesterei.de,stoffkontor.eu,toner-dumping.de,torten-boutique.de,velken.de##.js--overlay
+!! .backdrop-cookie
+cambiarredo.com##.backdrop-cookie
+!! #cookies-block
+msm.co,xmasgiftsonline.nl###cookies-block
+!! .cookie-wall
+confused.com,lanzaloe.com,threadstone.eu,wembleypark.com##.cookie-wall
+!! .gdpr-body
+boromir.ro##.gdpr-body
+!! gdpr_
+commentcoder.com,eanews.ru##[class^="gdpr_"]
+!! .CookieDisclaimer
+cancerfonden.se##div[class^="CookieDisclaimer"]
+!! .overLay
+abundantgracetabernacle.org.uk,destemma.org,pacificandgold.co.uk##.overLay
+!! .CookieConsent
+bakkenbaeck.com,bluemail.me,breakingthenews.net,buildclub.com,business-standard.com,cmodx.com,cuevana-3.eu,cuevana3.eu,e-ville.com,fiorentinabaseball.it,fmc.hu,forbesafrica.com,fotmob.com,geeksforgeeks.org,greekflavours.com,haveibeentrained.com,hysky.de,ietf.org,likewisetv.com,nebula.tv,nordlayer.com,nordlocker.com,nyctourism.com,ocbase.com,officedepot.hu,opyn.co,pango.education,pcsx2.net,pichau.com.br,pixme.co.uk,polyhaven.com,puhekupla.com,quoted.tech,rcskinclinic.com,recalbox.com,reflexer.finance,salvagemarket.co.uk,sankei.com,senda.pl,senpa.io,sharpsecd.com,shuttle.rs,soldfy.com,soldfy.dk,soldfy.fi,soldfy.no,soldfy.se,sprintmedical.in,streamerbans.com,suzuki.ua,tayama.pl,u.sb,ubank.co.za,upgrade.chat,wheels.ca,zakzak.co.jp##.CookieConsent
+!! .m-smartbar-container
+hilti.com,hilti.dk,hilti.ru##.m-smartbar-container
+!! #policy-ribbon
+toc-goldratt.com,toc-goldratt.eu,toc-goldratt.in,tocreader.com###policy-ribbon
+!! onetrust
+aboutyou.de,accor.com,adobe.com,adshnk.com,afd.fr,aljazeera.com,allianz.pt,amtrak.com,apnews.com,arkadium.com,askubuntu.com,autoscout24.ch,avon.uk.com,azcentral.com,bankofhope.com,bluebuffalo.com,booking.com,breitbart.com,brides.com,bruckhaus.at,calendly.com,cbs.com,cleanipedia.com,cnn.com,coinmarketcap.com,coleparmer.fr,comicbook.com,consequence.net,costco.ca,cp.com,darkreading.com,digitaltrends.com,disneyplus.com,dnv-kema.tw,doodle.com,espn.com.sg,euronics.de,ew.com,fifa.com,ford.com,fpf.org,generali.sk,generaliceska.cz,gesund24.at,getyourguide.com,gitlab.com,hbomax.com,hm.com,huawei.com,hypebeast.cn,iamexpat.de,ikea.com,ilike-it.ro,indeed.com,informa.com,inkling.com,intl.startrek.com,konami.com,krunker.io,logitech.com,logitechg.com,marketingweek.com,mastercard.us,mathoverflow.net,maximintegrated.com,mention.com,mesaboogie.com,moccona.sg,motoscout24.ch,msn.com,natgeotv.com,nba.com,nfl.com,okazii.ro,paramountplus.com,politico.com,popculture.com,prioritypass.com,private-ai.com,professionals.tarkett.com,redbull.com,refinitiv.com,rte.ie,serverfault.com,skopenow.com,slack.com,slate.com,software.cisco.com,sony.com,soundcloud.com,sparknotes.com,spotify.com,stackexchange.com,stackoverflow.com,stories.com,subway.com,superuser.com,synchrony.com,teliacompany.com,thecloroxcompany.com,tidal.com,time.com,uclan.ac.uk,unicef.de,validity.com,vanityfair.com,vishay.com,vonage.com.ph,wetter.at,wired.co.uk,wired.com,wirkochen.at,xn--sterreich-z7a.at,zdnet.com###onetrust-consent-sdk
+accor.com,adobe.com,adshnk.com,aljazeera.com,allianz.pt,amtrak.com,apnews.com,arkadium.com,askubuntu.com,autoscout24.ch,avon.uk.com,azcentral.com,bankofhope.com,bluebuffalo.com,booking.com,breitbart.com,brides.com,calendly.com,cbs.com,cleanipedia.com,cnn.com,comicbook.com,consequence.net,costco.ca,cp.com,darkreading.com,digitaltrends.com,disneyplus.com,doodle.com,espn.com.sg,euronics.de,ew.com,fifa.com,ford.com,generali.sk,generaliceska.cz,gesund24.at,getyourguide.com,gitlab.com,hbomax.com,hm.com,huawei.com,ikea.com,indeed.com,informa.com,konami.com,krunker.io,logitech.com,logitechg.com,marketingweek.com,mastercard.us,mathoverflow.net,maximintegrated.com,mention.com,mesaboogie.com,moccona.sg,motoscout24.ch,msn.com,natgeotv.com,nba.com,nfl.com,okazii.ro,paramountplus.com,politico.com,popculture.com,private-ai.com,redbull.com,refinitiv.com,serverfault.com,skopenow.com,slack.com,slate.com,software.cisco.com,soundcloud.com,sparknotes.com,spotify.com,stackexchange.com,stackoverflow.com,subway.com,superuser.com,synchrony.com,thecloroxcompany.com,time.com,validity.com,vanityfair.com,vishay.com,wetter.at,wired.co.uk,wired.com,wirkochen.at,xn--sterreich-z7a.at,zdnet.com##.onetrust-pc-dark-filter
+!! .modal / .modal-backdrop (no broken scroll)
+3suisses.fr,aastavebniny.cz,ace-hotel-poitiers.com,agronatur.com.br,agrpartners.com,airnewzealand.eu,akvarianamiru.cz,aldi-sued.de,antonellajoias.com.br,aquateam-shop.de,atlasformen.co.uk,atlasformen.com,atlasformen.cz,atlasformen.de,atlasformen.hu,atlasformen.nl,atlasformen.pl,atlasformen.sk,audioprotesistas.org,bachmann-collectorsclub.co.uk,bachmann.co.uk,bijourama.com,bindergroesswang.at,bmeia.gv.at,bodensee-airport.eu,bospol.cz,buchbinder-sale.de,busmap.fr,bydy.com.br,camping-app.info,carimboartes.com.br,cipherlab-shop.de,claudianum.sk,comptoirdelhomme.com,d-art-design.de,dalui.com.br,declikdeco.com,deutsches-ausschreibungsblatt.de,digitalbonus.bayern,digiwallet.com,direct-cuves.fr,doc-du-juriste.com,domvast.nl,dreammachines.com.ua,epiphone.com,esjobogarden.se,eurodata.de,fabricadepremios.com,faifiltri.it,fiorestore.com.br,first-certificate.com,fischer-garten.de,fitnessraum.de,foodpass.com.br,fsacessorios.com.br,galaflorgmbh.de,galleria.com.pl,gezond.nl,gibson.com,golvprofilshop.se,greenpassgolf.com,gruenderland.bayern,grupocatalanaoccidente.com,guymy.com.br,hallofbrands.gr,haloursynow.pl,hliva-ustricna.cz,hofer.at,honeywell-aidc-shop.de,htb-wenzlow.de,icarojoias.com.br,ico.de,ilmonet.fi,ingsprinters.nl,insolve.hr,instalxpert.com,itineraire-metro.fr,junalo.com,kiennast.at,kojenecke-obleceni.eu,kontaktlinsenking.de,kramerguitars.com,kurse.eatsmarter.de,leadersummaries.com,lemoncurve.com,levnesporaky.cz,longchamp.com,loombard.pl,lydshop.no,maestroelectronics.com,mak.at,mapquest.co.uk,masjerez.com,massgeneralbrigham.org,mcglonemtg.com,mediensysteme.at,medika.ro,meine.aok.de,mencorner.com,michael-telecom.de,mohrsiebeck.com,nabytok-aldo.sk,naradesign.com.br,naz-feldberg.de,nazoberedonau.de,ncts.ie,paposertanejo.com,perfumeriasavenida.com,picardiegazette.fr,placedescommerces.com,pleines.de,pngwebicons.com,policia.es,premiumrent.ro,primus-apotheken-stadecken.de,pristupy.com,przekroj.pl,qv.co.nz,regueira.com,renasca.com.br,rentacarmaramures.com,rte.ie,schaden.news,schoenbrunn.at,seguroscatalanaoccidente.com,shop-datalogic.de,shop-honeywell.de,shop-motorola.de,shop-newland.de,shop-tsc.de,shop-zebra.de,sinalco.de,sinfonicadegalicia.com,sixt.com.tr,sokol-zidlochovice.cz,sorbas-frankfurt.de,soundbrothers-onlineshop.de,spartorama.gr,spectranet.com.ng,speedmoto.cz,startfrei.at,tabletteslorraines.fr,thechillidoctor.sk,thefoodmaker.com,thelittleboxoffice.com,theodorkoernerfonds.at,tonycar.cz,topprodukte.at,toshiba-tv.com,umm.nordpoolgroup.com,unidavi.edu.br,vaillant-group.com,varomajoias.com.br,videostart.cz,vileda.com,vileda.nl,vinaralia.com,vor.at,vyskovskyfotbal.cz,webkamery.online,xhamsternft.com,yellowtec.com,zshercikova.cz,zt.hu,zvetseni-rtu.info##.modal
+aastavebniny.cz,abp.nl,agronatur.com.br,aldi-sued.de,aldi.it,aluminiosbrinas.com,anacondastores.com,antonellajoias.com.br,aquateam-shop.de,asdatyres.co.uk,assurland.com,atlasformen.co.uk,atlasformen.com,atlasformen.cz,atlasformen.de,atlasformen.hu,atlasformen.nl,atlasformen.pl,atlasformen.sk,autoescuelalaflota.com,autoobuv.sk,bachmann-collectorsclub.co.uk,bachmann.co.uk,baer-schuhe.de,bahlsen.com,bmeia.gv.at,bodensee-airport.eu,bospol.cz,bpq.sk,br-automation.com,buchbinder-sale.de,burmester.de,bydy.com.br,camping-app.info,care-center.de,carimboartes.com.br,carolynspring.com,caseys.ie,chapter2bikes.com,cipherlab-shop.de,claudianum.sk,clinique-veterinaire.fr,compra.fredolsen.es,corpseuropeensolidarite.fr,courseware-marketplace.com,d-sport.cz,dalui.com.br,dedriefonteinen.be,dermaplan.com,deutsches-ausschreibungsblatt.de,digimobil.es,distpopular.com,dizioneri.com,djshop.de,dnbeiendom.no,domvast.nl,dreammachines.com.ua,duffay-publicite.com,ebxan.ch,ecodrog.com,elektroskandia.no,elia.eus,eosc-eu.cloud.garr.it,esjobogarden.se,eubos.de,eurodata.de,expertulbanilor.ro,extremes-loisirs.fr,facadepartners.be,faifiltri.it,fc-carlzeiss-jena.de,felix1.de,feralpisalo.it,fh-salzburg.ac.at,fiorestore.com.br,first-certificate.com,fit-body.cz,fitnessraum.de,flixable.com,foodpass.com.br,freshcotton.com,fsacessorios.com.br,galleria.com.pl,gearsay.com,gezond.nl,godbolt.org,golvprofilshop.se,greenflagaward.org,greenpassgolf.com,grupocatalanaoccidente.com,guymy.com.br,gynekologie-streda.cz,hagemeyer.de,hallofbrands.gr,haloursynow.pl,harrisscarfe.com.au,hepatitiscgids.nl,higcapital.es,hliva-ustricna.cz,hofer.at,honeywell-aidc-shop.de,hoteledenmar.com,houthandel-loose.be,houthandelonline.nl,htb-wenzlow.de,icarojoias.com.br,ico.de,ilmonet.fi,imobiliare.ro,innovaiberica.com,inselflieger.de,insolve.hr,instalxpert.com,interactivebrokers.com,isybank.com,italieaparis.net,izmopics.com,jannys-eis.com,jansvanda.cz,junalo.com,kaleb.cz,karolviajes.es,kiennast.at,kojenecke-obleceni.eu,konfer.online,kontaktlinsenking.de,kramerguitars.com,kurse.eatsmarter.de,labofun.be,leadersummaries.com,leifheit.dk,lendwise.com,levnesporaky.cz,lignoshop.de,longchamp.com,ludonauta.es,lydshop.no,m-h.cz,mainz05.de,mak.at,masjerez.com,meetings.smartrecovery.org,meine.aok.de,meteo.fvg.it,mgames.rs,michael-telecom.de,miteco.gob.es,mohrsiebeck.com,mymoments.de,nabytek-aldo.cz,nabytok-aldo.sk,naradesign.com.br,naz-feldberg.de,nazoberedonau.de,ncts.ie,nichtraucherhelden.de,odhadyareality.cz,omg.de,osmer.fvg.it,panodyssey.com,pezbo.cz,picardiegazette.fr,pilous.hu,pivovar-krakonos.cz,placedescommerces.com,pleines.de,plusultra.es,pokalkoenig.de,policia.es,posta.si,primus-apotheken-stadecken.de,pristupy.com,prostata-hilfe-deutschland.de,puntfont.com,radikalswim.com,refashion.fr,regueira.com,renasca.com.br,sanasa.com.br,schaden.news,schnelltest-apotheke.de,schoenbrunn.at,seguroscatalanaoccidente.com,sfasemicon.com.ph,shop-datalogic.de,shop-honeywell.de,shop-motorola.de,shop-newland.de,shop-tsc.de,shop-zebra.de,silbonshop.com,sinalco.de,sinfonicadegalicia.com,smart-metz.fr,smart-mulhouse.fr,smart-nancy.fr,socradar.io,sole-runner.com,sorbas-frankfurt.de,soundbrothers-onlineshop.de,speedmoto.cz,sredime.rs,startfrei.at,stellfeld-ernst.de,stinem.cz,stoeckle.com,strmiska.cz,strmiska.eu,suitur.com,synlab.fr,tabletteslorraines.fr,tanibus.com,targetsupport.nl,tarifcheck-partnerprogramm.de,theodorkoernerfonds.at,tonycar.cz,topprodukte.at,umm.nordpoolgroup.com,unidavi.edu.br,usporedi.hr,valentins.de,varomajoias.com.br,vhs.frankfurt.de,videostart.cz,vileda.com,vileda.nl,vm.co.mz,vor.at,vyskovskyfotbal.cz,welko.cz,wobit.com.pl,wohlleben-sports.de,woonfonds.mijnleninginzicht.nl,xlust24.com,yellowtec.com,zahnarzt-popov.de,zeleneudoli.cz,zshercikova.cz,zt.hu,zvetseni-rtu.info##.modal-backdrop
+!! pp_b.pp-p (dhealingforum.com,flowerhornrusforum.com,sinfuldestinyericole.com,celebritystorylibrary.com)
+###pp_b.pp-p
+!! .cookie-banner
+africanreporter.co.za,albertonrecord.co.za,alexnews.co.za,asia.nikkei.com,barbertontimes.co.za,bedfordviewedenvalenews.co.za,benonicitytimes.co.za,bereamail.co.za,boksburgadvertiser.co.za,bookwhen.com,brakpanherald.co.za,capricornreview.co.za,carletonvilleherald.com,citybuzz.co.za,comarochronicle.co.za,corridorgazette.co.za,cumlaudeimmobilia.com,dagmersellen.ch,deezer.com,developer.chrome.com,estcourtnews.co.za,eyethunews.co.za,fourwaysreview.co.za,gatlinburg.com,germistoncitynews.co.za,hazyviewherald.co.za,heidelbergnigelheraut.co.za,highvelder.co.za,highwaymail.co.za,ikrix.com,joburgeastexpress.co.za,kathorusmail.co.za,kemptonexpress.co.za,kormorant.co.za,krugersdorpnews.co.za,ladysmithgazette.co.za,lensculture.com,letabaherald.co.za,maritzburgsun.co.za,medipolis.de,midrandreporter.co.za,newcastleadvertiser.co.za,northcliffmelvilletimes.co.za,northcoastcourier.co.za,northeasterntribune.co.za,northernnatalcourier.co.za,northglennews.co.za,parysgazette.co.za,phoenixsun.co.za,potchefstroomherald.co.za,publicdomainreview.org,publiceyemaritzburg.co.za,randburgsun.co.za,randfonteinherald.co.za,rekordcenturion.co.za,rekordeast.co.za,rekordmoot.co.za,rekordnorth.co.za,reviewonline.co.za,ridgetimes.co.za,risingsunchatsworth.co.za,risingsunlenasia.co.za,risingsunoverport.co.za,roodepoortnorthsider.co.za,roodepoortrecord.co.za,rosebankkillarneygazette.co.za,sandtonchronicle.co.za,sedibengster.com,skandia.se,southcoastherald.co.za,southcoastsun.co.za,southerncourier.co.za,southlandssun.co.za,sowetourban.co.za,springsadvertiser.co.za,standertonadvertiser.co.za,student.com,tembisan.co.za,tiktok.com,vaalweekblad.com,vryheidherald.co.za,westside-eldos.co.za,witbanknews.co.za,zabars.com,zululandobserver.co.za##.cookie-banner
+!! #CybotCookiebotDialog
+alberts.de,anwaelte-stade.de,apetro.pt,biomarkt.de,colegiopedroarrupe.pt,danbolig.dk,deepdiscount.com,deidesheimerhof.de,dskbank.bg,edmundoptics.co.uk,edmundoptics.com.au,edmundoptics.fr,ernaehrungs-umschau.de,homingxl.nl,hotel-wilder-mann.de,ihk.de,importcds.com,lindex.com,lundui.fi,luontoon.fi,nationalparks.fi,nfa.dk,pizzahutdelivery.ro,rosenthal.de,utinaturen.fi,zaunbau-hennig.de###CybotCookiebotDialog
+!! .c-cookie-popup
+novae.ca,studiekring.nl,thebelgianbed.com##.c-cookie-popup
+!! #modal-cookie
+acerta.be,bioplanete.com,confluence.rs,forming.com,hexagonmining.com,labofun.be,listech.com,miltenyibiotec.com,oase.com,pressca.com.br,schnelltest-apotheke.de###modal-cookie
+!! #cookie__modal
+prsformusic.com###cookie__modal
+!! #bluemask / .box
+finquesdelmar.com,hortdesantcebria.com,iglumedia.com###bluemask
+finquesdelmar.com,hortdesantcebria.com,iglumedia.com##.tbox
+!! .disclaimer-container
+amway.ua,areanorth.co.uk,day-tours-from-avignon.com,hari.ca##.disclaimer-container
+!! .cc-layer
+bta-international.com,dahlhaus-leuchten.de,poenvoorgroen.nl##.cc-layer
+!! #gdpr
+adp-enseignes.com,barocca.ro,branah.com,epiloglaser.com,fizzicseducation.com.au,gagaoolala.com,gocpa.ru,guideautoweb.com,harmilaw.com,knoema.com,knoema.ru,latrobe.edu.au,manda.co.jp,marketfinance.com,occto.or.jp,openresty.com.cn,otzyvua.net,project529.com,rentafont.com.ua,tampabay.com,tidesmarine.com,toei-metal.com,uwebergverlag.de,vitaslim.eu,wikihow.com,wikihow.it###gdpr
+!! #gdprOverlay
+vjoon.us###gdprOverlay
+!! .cookie-
+adler-lingenau.com,cinch.co.uk,copl.be##div[class^="cookie-"]
+!! #gdproverlay
+naylorsfinance.com###gdproverlay
+!! #_iCD
+gardenvillagebled.com,kck.si,lju-airport.si,ljubljana.si,maxi.si,mercator.si,mercatorgroup.si,nordica.ee,perutnina.com,prvahisa.si,terme-krka.com,visitljubljana.com,zale.si,zds.si###_iCD
+!! .modal only
+anpeandalucia.es,anpeasturias.es,anpecanarias.es,anpegalicia.es,crbinverbio.com,eldefensordelprofesor.es##.modal
+!! #gdpr-modal / .gdpr-modal
+arb.ro,autoobuv.sk,ecoxtrem.ro,educatiefinanciara.info,groundtruth.com,metropolitanresidence.ro,openpolitics.ro,redis.org,simplefx.com,tigernails.ro,traineedagen.se,trendresidence.ro###gdpr-modal
+adressa.no,alicecooper.com,altaposten.no,deptagency.com,driva.no,econt.com,fjuken.no,folkebladet.no,l-a.no,lp.no,peoplefone.lt,smp.no,soshace.com##.gdpr-modal
+!! .gdpr-container
+cvhelp.co.uk,hhmi.org,mjcb.io,smugmug.com,snapon.com,xvpn.io##.gdpr-container
+!! .consentmodal
+kaartje2go.be,kaartje2go.nl,sendasmile.de##.consentmodal
+!! #privacy
+bka.de,cieplodlakrakowa.pl,compitoinclasse.org,kancelariamzm.pl,kpr.pl,libro.cafe,mieszko.pl,paakallo.fi,parcocolosseo.it,tastoeffeuno.it###privacy
+!! .privacy
+bodohavn.no,brieffreund-gesucht.de,directours.com,edzl.lv,emezeta.com,homey.com.tr,hstock.org,inforoom.com.ua,naegele.it,one.ua,rbc.ua,vikingtemizlik.com.tr##.privacy
+!! .privacy-policy
+alfred.com,amino.dk,gigaom.com,gq.com.au,henrilloyd.com,hesapkurdu.com,hvylya.net,hyser.com.ua,hyser.ua,mta.tv,paymaster.ru,politeka.net,tupras.com.tr,ukrainci.com.ua,ukrainianwall.com,vocativ.com,znaj.ua,zumba.com##.privacy-policy
+!! #privacy-policy
+104.ua,bostools.nl,iprbookshop.ru,planetfitness.com,wccaviation.com###privacy-policy
+!! cdk-overlay-container
+afiklmem.com,antenne.at,betsafe.ee,betsafe.lv,canadasbusinessregistries.ca,casino.dk,clashapp.co,collibris-app.com,earnweb.com,educont.ru,ekuriren.se,eqmac.app,flyingblue.us,fr.vanguard,hw-zuschuss.daimler.com,iconnectfx.com,inshared.nl,it.vanguard,jobsforgeek.com,jobware.de,kauppakeskuswilla.fi,kkuriren.se,mediaportal.regione.lombardia.it,mobilbahis623.com,nl.vanguard,nordicbet.dk,rekonise.com,rsu.de,shopstyle.co.uk,skiclub-villingen.de,source.chromium.org,spedition.de,tacobot.tf,townsmith.de,vanguard.co.uk,vanguardmexico.com##.cdk-overlay-container
+!! #cdk-overlay-0
+cs.android.com###cdk-overlay-0
+!! .trackingmanager
+grosstadt-mission.de,loewe-stiftung.de,simufact.com,simufact.de,stadt-mission.de,strelow-dichtungen.de##.trackingmanager
+!! #pdcc-modal-bg
+apartamentosllobet.com,miriamginecologia.com,ondarza-abogados.com###pdcc-modal-bg
+!! .sqs-announcement-bar
+blueflag.global,lemoncode.net,records.team,stoeger.net##.sqs-announcement-bar
+!! #klaro / .klaro
+40gold.de,afh-group.de,auto-rhein.de,belfortinternational.be,berghotel-sudelfeld.de,buecher-sale.de,buecher.de,builtbybel.com,cd-cc.si,christ-sucht-christ.de,comet-cine-center.de,deskmodder.de,dnca-investments.com,duracell.co.uk,duracell.com.au,duracell.de,duracell.dk,duracell.es,duracell.fr,duracell.it,duracell.nl,duracell.pl,estudiografenno.com.br,eukanuba.eu,flooring.regupol.de,gipuzkoa.eus,handicap-love.de,hechingen.zollernalb-kinos.de,jokers.de,kinopalast-neuburg.de,klaro.org,kubi-online.de,kug.ac.at,lumos-kino-nidda.de,luontoliving.com,lvstrucks.nl,mewo-mm.de,mischgastauchen.de,muehlhausen.filmpalast.de,muesliswap.com,nunido.de,oelwechsel-muenchen.de,osteopathiepraxis-hamburg.de,papier-mettler.com,pasts.lv,petermachtpause.de,pohjanmaan.fi,pohjanmaan.se,powerhouse-fitness.co.uk,prolific.co,publicidadconcursal.es,radldiscount.de,rebreather-ccr.de,redaktionsbuero-niemuth.de,roman-graf.ch,saldus.lv,salesviewer.com,schachermayer.at,schrack-seconet.com,suedtirol.com,supplementa.com,tarif4you.de,tauchen-richtig-lernen.de,trendingtopics.eu,triaswestland.nl,trimix-tauchen.de,volksmusik-notenshop.de,volksmusiknoten.de,westerhofcafe-im-stielerhaus.de###klaro
+einbecker-morgenpost.de,filati-outlet.com,filati.cc,filati.de,filati.ru,heizung-billiger.de##.klaro
+vorwaerts.de##.klaro-button
+!! #cc
+bistum-essen.de,bistumlimburg.de,bjr.de,bundesanzeiger-verlag.de,camerapricebuster.co.uk,dbk.de,domicile-emploi.net,dtvp.de,ecouter-en-direct.com,fairtrade-deutschland.de,fairtrade.at,hey.bayern,journalist.de,languagelab.nl,mariahimmelfahrtimtaunus.de,neuwagenduft.de,radioemu.com,volksbund.de###cc
+!! schaefer
+schaefer-container-systems.com,schaefer-container-systems.de,schaefer-it-systems.com,schaefer-it-systems.de##.bg-overlay
+schaefer-container-systems.com,schaefer-container-systems.de,schaefer-it-systems.com,schaefer-it-systems.de##.cc-window
+!! .cookies__container
+ascentmanagement.ca,franciszkaniewieliczka.pl,knieskinderzoo.ch,lvgmc.lv,simpleone.ru,tablaocordobes.es##.cookies__container
+!! #popup
+aquacard.co.uk,blsspain-russia.com,darricau.com,demarko-trailers.com,frescomarket.it,genmab.com,hmgma.ru,informacatania.it,lgtechno.ru,tuoclub.it,tuodi.it,vatten.ru,weathersa.co.za,weespreventief.nl,worldpower.com.tr###popup
+!! .posf.react-onclickoutside
+eurorelais.de,fewoferien.de,holidayhomes.com,maisondevacances.fr##.posf.react-onclickoutside
+!! CookiePopup
+bitcoin-store.net,brain.fm,shopbuddies.be,shopbuddies.co.uk,shopbuddies.de,shopbuddies.fi,shopbuddies.fr,shopbuddies.it,shopbuddies.nl,shopbuddies.pl,shopbuddies.se##[class^="CookiePopup"]
+!! .CookiesBanner
+monzoapp.com,oscarproperties.com,zoominfo.com##[class^="CookiesBanner"]
+!! .blocker
+alquilovers.com,event.pubg.com,monurgencepilule.fr##.blocker
+!! .cookieConsent
+centreforaviation.com,joinhoney.com,picofme.io,scinapse.io,truewealth.ch,x2o.be##[class^="cookieConsent"]
+!! .alert
+24h-pflege-check.de,adata.com,afribaba.bi,afribaba.bj,afribaba.cd,afribaba.cf,afribaba.co.ke,afribaba.co.tz,afribaba.co.za,afribaba.com,afribaba.gq,afribaba.mg,afribaba.ml,afribaba.ng,afribaba.so,afribaba.tg,afribaba.ug,afribobo.com,agencedelaposte.com,agroterra.com,ahlulbayt.tv,aia.com.ph,aicom.pl,akvis.com,alivecolors.com,allsmo.com,altervista.org,amadeus.com,americanairlines.fi,armpension.com,askdifference.com,asklion.co.uk,bankid.com,banklinth.ch,barker.com.tr,basilica.ro,batpower.fi,betmagician.com,bim-review.com,bpi-aia.com.ph,broadcasting-services.eu,bucurobor.ro,calamos.com,cfainstitute.org,chatron.pt,cleantalk.org,coalsoft.cz,communitycouncils.scot,comune.novara.it,convert-my-image.com,costaclub.com,delonghi.ru,dirigentindustria.it,e-marilyn.pl,efinancialcareers.com,eichendorff21.de,eks.sk,enablingguide.sg,exatasistemas.com.br,fandor.com,faperme.it,fazauto.com.br,fecareers.co.uk,findaphd.com,fitd.it,fredlist.com,gambling-affiliation.com,gamesjobsdirect.com,garantibbva.com.tr,go4schools.com,graco.com,grupoautentica.com.br,gtalfh.com,hallo-minden.de,hattrick.org,hotelbellevue.lv,hotelier101.com,integrasul.com.br,iochpe.com.br,itaincontri.com,jetcs.co,jobflurry.com,jobsinwales.com,kenweego.com,kupbilet.pl,laislabonita.fm,lankamaailma.fi,lavozdegalicia.es,lawyersonline.co.uk,lifescience.net,linuxcompatible.org,localcouncillor.scot,lonelyplanet.com,lth.se,m-a.org.uk,mazeikiai.lt,montenisa.com,nature.com,netonnet.no,netonnet.se,netweather.tv,newhome.ch,nexaresources.com,nironmagnetics.com,norwegian.com,nyman.media,openuserjs.org,osevio.com,osthammar.se,pneusb2b.com,policlinicovalencia.es,poolandspacentre.co.uk,povr.com,pozyx.io,privacy.gov.ph,rcip.co.il,rshb.ru,saperesalute.it,schlaganfall-hilfe.de,siderweb.com,smorgasbord.com,smullers.nl,stocktoninformationdirectory.org,stylevamp.de,supercell.com,sweetcare.pt,tchncs.de,teogkaffespecialisten.dk,theonlinesurgery.co.uk,tinyurl.com,tufauto.it,tullverket.se,uabstyle.it,ukpressonline.co.uk,upolujebooka.pl,ustabilir.com,valka.cz,varlesca.pl,vernemq.com,viewsonic.com,viewsoniceurope.com,visitnarva.ee,warp2search.net,yithlibrary.com,youngsseafood.co.uk,yumisu.pl##.alert
+!! cookieBanner
+arbys.com,buffalowildwings.com,dashboard-deutschland.de,neoplants.com,oresundstag.se##[class^="cookieBanner"]
+!! petermeyerverlag.de / ischiawandern.com/ pb-schredl.de
+##.wrap > .consent-widget
+!! Cookies_
+consumer-legal.com,generatedata.com,matchbook.com,profim.eu,profim.fr,profim.pl,traffic.productions,vyos.io##div[class^="Cookies_"]
+!! CookieBanner
+abc.net.au,amie.so,app.daily.dev,bbfc.co.uk,billhop.com,cars.co.za,channel5.com,coinbase.com,consoles.radioplayer.cloud,deluxemusic.de,desiindian-brighton.co.uk,drbuho.com,fingerprint.com,foodcorner.dk,forum.effectivealtruism.org,hackney.gov.uk,harrys.com,itzipitzipizza.dk,javabusinesscompetition.id,klientboost.com,lendo.se,letsenhance.io,lindahall.org,luminpdf.com,make.com,monzo.com,mrpizzahastings.co.uk,oddschecker.com,onceupon.photo,qured.us,skyvegas.com,socratesdergi.com,start.ru,sweatco.in,theculturetrip.com,trelson.com,tri.global,unum.co.uk,westerracu.com##div[class*="CookieBanner"]
+!! CookieBanner_
+acffiorentina.com,breastcancer.org,gieffektivt.no,spline.design,svoi.ru,urbanarmorgear.com##div[class^="CookieBanner_"]
+!! CookieBannerstyle_
+gomibo.at,gomibo.be,gomibo.ch,gomibo.co.uk,gomibo.cy,gomibo.cz,gomibo.de,gomibo.dk,gomibo.ee,gomibo.es,gomibo.fi,gomibo.fr,gomibo.gr,gomibo.hr,gomibo.ie,gomibo.it,gomibo.lt,gomibo.lu,gomibo.mt,gomibo.no,gomibo.pl,gomibo.pt,gomibo.ro,gomibo.se,gomibo.si,gomibo.sk##div[class^="CookieBannerstyle_"]
+!! .active.legacy
+batida.de,kuemmerling.de,lutter-und-wegner.de,menger-krug.de##.active.legacy
+!! .amgdprcookie-modal-template
+icko-apiculture.com##.amgdprcookie-modal-template
+!! .bottom-0.position-fixed
+carsharingi.ru,clipartsfree.net,nmsu.edu,tech-america.com,waracle.com##.bottom-0.position-fixed
+!! .bottom-0.right-0
+educationendowmentfoundation.org.uk,givingwhatwecan.org,rshb.ru##.bottom-0.right-0
+!! .bottom-0.relative
+onassis.org##.bottom-0.relative
+!! .bottom-0.fixed
+1password.com,70mai.com,aberrant.io,actievandedag.nl,aksam.com.tr,androidide.com,aplikuj.pl,app.daily.dev,archive.ics.uci.edu,auf1.info,auf1.tv,auroracloud.dev,avislease.sk,back4app.com,ballonvaartcentrumvanmanen.nl,barecollective.com,bbcrewind.co.uk,bcfc.com,bellevue-hamburg.de,bestsellers.hu,betapage.co,biljardihuolto.fi,blickers.com,blog.appsignal.com,blomus.com,bookiply.com,boords.com,britishrenewables.com,bsbfashion.com,bulldogjob.com,bulldogjob.pl,canal1.com.co,canaries.co.uk,clubmed.co.nz,clubmed.co.uk,clubmed.com.ar,clubmed.com.mx,clubmed.ru,clubmed.se,clubmed.us,codeclimate.com,count.co,cryptomaan.eu,curiositystream.com,czepeku.com,deepsource.io,delio.com.pl,digi.no,discords.com,divvydiary.com,drank.nl,eluniverso.com,elvah.de,emiratespost.ae,espres.so,everifin.com,evolutionary-insights.com,fanzo.com,financestrategists.com,first-law.com,flakehub.com,focus-entmt.com,form3.tech,fvd.nl,garbanzo.io,gauss.hr,glideapps.com,goflink.com,greenmatch.co.uk,ground.news,haproxy.com,hendy.co.uk,hrt.hr,hyte.com,ideo.com,idprotect.trendmicro.com,institute.global,invezz.com,iotworldtoday.com,ipon.hu,jdoodle.com,jimejinak.cz,jobicon.pracuj.pl,jobyaviation.com,jokerguide.com,keeb-finder.com,kick.com,klachtenkompas.nl,kyero.com,licenseglobal.com,lounges.tv,matkakeisari.fi,mclarenstore.com,medimagazin.com.tr,mein-apothekenmanager.de,mitec.net,moises.ai,munichmag.de,nationalprivacytest.org,nativebase.io,nbg.gov.ge,newsbreak.com,nexcess.net,nitronationworldtour.com,oko.press,opening-hours.today,ouraring.com,parqet.com,pazarama.com,perille.fi,prettylittlething.com,privee.ai,prographers.com,propello.bike,puma.com,qwertee.com,ranzijn.nl,raport.pse.pl,regiojet.at,regiojet.com,regiojet.de,regiojet.hu,regiojet.pl,regiojet.sk,regiojet.ua,regiojethotels.at,regiojethotels.com,runmercury.com,selfstock.com,shakuro.com,skyfi.com,skynet.ru,smartthingsfind.samsung.com,snoop.app,sportfondsenbadamsterdamoost.nl,spotlighttheatres.com,star.com.tr,streamawards.de,stylesandpartners.com,tekninen.fi,teltonika-networks.com,thehappytoolbox.com,truthsocial.com,tu.no,tweetyai.com,twitchcon.com,uc.pt,unox.com,vegetology.com,wizzair.com,wyylde.com,zubi.swiss##.bottom-0.fixed
+!! .bottom-2
+argyle.com,artma-zaproszenia.pl,avif.io,lahella.fi##.bottom-2
+!! .bottom-6
+boostroyal.nl,wimotic.fr##.bottom-6
+!! .bottom-5
+cinobo.com,jdslabs.com,lukso.network,platform.stability.ai,simtex.io,skyline-emu.one,vloot.io##.bottom-5
+!! .bottom-8
+dr-anns.com,lightyear.one,vecer.com##.bottom-8
+!! .bottom-4
+desenio.se,justo.ca,moises.ai,my.openbb.co,promobit.com.br,remnote.com,shuttle.rs,stableaudio.com,thecycle.game,urlcast.io##.bottom-4
+!! .bottom-3
+accu-components.com,accu.co.uk,knock.app##.bottom-3
+!! .bottom-16
+fikfap.com,tweetdeleter.com##.bottom-16
+!! .bottom
+joom.com,labyrinthos.co,rshb.ru,travelbags.nl##.bottom
+!! .py-2 (mobile inapp uses .bottom-0.fixed)
+newsbreak.com##.py-2.px-2
+!! .jGrowl
+bitfactura.com,bitfaktura.cz,efakturierung.de,invoiceocean.com,invoiceocean.hr,invoiceocean.rs##.jGrowl
+!! .modal-cookie
+161.97.70.5,acro.police.uk,aio.media,banggood.com,contabilizei.com.br,crocoblock.com,jfservice.ru,loans-hub.com,medcentr-tula.ru,militecbrasil.com.br,museum-brandhorst.de,nasha-set.ru,onetoyshop.ru,pebmed.com.br,profsvar.com,restauracjaverona.pl,royalprestige.com,uvex-safety-shop.de,xn--80aa3ak5a.xn--p1ai,xn--b1addckdrqixje4a.xn--p1ai,xn--f1awi.xn--p1ai,zlimovel.com.br##.modal-cookie
+!! .modal-cookies
+ace-hotel.com,asiapulppaper.com,awwwards.com,berendeeviprudi.ru,blowtex.com.br,bmalaw.com.br,detoxy.cz,dicampus.es,femeval.es,flawless.pl,geografica.com.br,knott-anhaenger-shop.de,knott-remolque-tienda.es,knott-trailer-shop.com,normadet.com,normagrup.com,normalit.com,normalux.com,riafinancial.com,sa-luz.com,sourcefurniture.com,spirou.com,vanhumbeeckfreres.be,vivara.com.br,xn--90asehmeeq.xn--p1ai,zehnder.su##.modal-cookies
+!! .modalcookies
+aerored.es,biodramina.es,fisiocrem.es##.modalcookies
+!! #cookie-container
+elisa.rekrytointi.com,fhstp.ac.at,haanindustrial.com,ippies.nl,picniq.co.uk,sophianum.nl,tatasteelonbrand.com###cookie-container
+!! #cookieModal
+dedriefonteinen.be,globalfamilydoctor.com,glyn.com,grundstueckspreise.info,happypenguin.altervista.org,krungsri.com,meteo.fvg.it,mtn.ng,selgros24.pl,thegrangesurgery.webgp.com,thewolfsound.com,trbchemedica.co.uk###cookieModal
+!! .modalCookies
+blog.mega-energie.fr,filmotecadecine.com,meuhyundai.com.br,softwaretogo.de##.modalCookies
+! .ns-type-noticeolder
+aj-chambers.com,allenday.co.uk,bdiresourcing.com,charitytalent.com,constructrecruitment.com,probejobs.co.uk,zentechtalent.com##.ns-type-notice
+!! .k-overlay
+bodahl.com,corktyrewholesale.ie,donegaltyres.com,gusondack.se,ija.dk,jbtyres.co.uk,keithrevinstyres.ie,lusktyres.com,martincorleytyres.ie,mileagetyres.ie,nationaltyres.ie,redflagtyres.com,renew.ie,thetyrebarn.co.uk,thetyrebox.ie,tyredepotltd.ie##.cookieWindowWrapper
+arrowtyres.com,batyres.com,bodahl.com,cicatalysts.co.uk,corktyrewholesale.ie,donegaltyres.com,gusondack.se,ija.dk,jbtyres.co.uk,keithrevinstyres.ie,lusktyres.com,martincorleytyres.ie,mileagetyres.ie,nationaltyres.ie,phoenixtyres.ie,redflagtyres.com,renew.ie,thetyrebarn.co.uk,thetyrebox.ie,tyredepotltd.ie##.k-overlay
+!! #cookiesModal
+7art.cz,artdeco.cz,auctionxchange.ie,blacklimba.com,bodyfactory.cz,brela.cz,buzzaar.eu,chemical-anchors.com,conferences-scientific.cz,cutishelp.com,d-sport.cz,dataelcom.sk,dentalplanet.cz,dobreoci.cz,easy-menu.io,envero.cz,eurogat.eu,formanka.net,frezovanie-kominov.eu,getlini.lv,golfagency.cz,grillnor.cz,hrad-cervenyujezd.cz,innovaiberica.com,irishcob.cz,it-svet.cz,jdsupra.com,jigsawconferences.co.uk,jiranek.cz,klik-klap.cz,lazne-lipova.cz,likvidaciafiriem.sk,meditacnipolstare.cz,mirdacars.cz,missprincessworld.com,mobilnydom.eu,nabytek-aldo.cz,nerezove-kominy.sk,oddo.fr,olovo.eu,oteuamigo.pt,ottovo-nakladatelstvi.cz,pivonaklic.cz,plance.cz,prodej-karavanu-dante.cz,pujcovna-karavanu-dante.cz,raledo.cz,restauraceukostela.cz,return-my-parcel.com,sacr.cz,savane.com.br,servispc.com,skiland.cz,skisvarc.cz,sslmarket.at,sslmarket.com,sslmarket.de,sslmarket.sk,stromac.cz,tanatech.cz,upmyshop.com,ural.cz,virivky-sauny.eu,welko.cz,whippets-dog.cz,widara.com,xodax.cz,zmenazdravotnipojistovny.cz,zubni-lekarka.cz###cookiesModal
+!! #modalCookies
+cetelem.es,diskus.cz,ernest-inn.com,q2bstudio.com###modalCookies
+!! #cookies2020
+bizartgallery.com,e-kiriazis.gr,irakleitos.gr,sapon.gr,skolahotelnictvi.cz,topithari.gr,urology-athens.gr,yachtdeals.gr###cookies2020
+bizartgallery.com,e-kiriazis.gr,irakleitos.gr,sapon.gr,skolahotelnictvi.cz,topithari.gr,urology-athens.gr,yachtdeals.gr###cookies2020overlay
+!! cookieNot
+citigroup.com,clearscore.com,voguescandinavia.com##div[class^="cookieNot"]
+!! #cookiemodal
+santam.co.za###cookiemodal
+!! .otPlaceholder
+baseball24.com,basketball24.com,cricket24.com,darts24.com,diretta.it,eredmenyek.com,flashresultats.fr,flashscore.ca,flashscore.co,flashscore.co.id,flashscore.co.kr,flashscore.co.uk,flashscore.co.za,flashscore.com,flashscore.com.br,flashscore.com.ua,flashscore.de,flashscore.es,flashscore.fi,flashscore.fr,flashscore.ge,flashscore.info,flashscore.it,flashscore.nl,flashscore.pt,flashscore.ru.com,flashscore.vn,flashscorekz.com,golflive24.com,handball24.com,horseracing24.com,icehockey24.com,livescore.in,livesport.com,liveticker.com,motorsport24.com,scoreboard.com,soccer24.com,soccerstand.com,tennis24.com,volleyball24.com##.otPlaceholder
+! .js-cookie-popup
+barcin.com,messageresponse.net,pvcbuis.com##.js-cookie-popup
+!! .cookie-modal
+24smi.org,777score.com,777score.ru,777score.ua,bahamar.com,brandkizz.com,bronze.ai,bslesnica.pl,cashper.fr,chainguard.dev,cinestar.cz,cut.org.br,diagram.com,dutchbros.com,einbecker-morgenpost.de,evl.fi,ford.hr,geis-group.sk,geis.pl,giropay.de,gminaboleslawiec.pl,harrisandjones.co.uk,hudy.cz,icas.com,koehlers-forsthaus.de,mbhszepkartya.hu,mcveiculos.com.br,metro.style,nationalworldplc.com,netkoncept.com,nslookup.io,prusice.pl,przemysl.pl,starbucks.com.sg,testfully.io,toysrus.ca,treatstock.co.uk,treatstock.com,undime.org.br,vitens.nl,zeleneudoli.cz##.cookie-modal
+!! ^cookie-modal
+bankera.com,gsm55.com,simon.studio##div[class^="cookie-modal"]
+!! .MuiContainer-maxWidthMd
+royalpanda.com##.MuiContainer-maxWidthMd
+!! .MuiSnackbar-anchorOriginBottomLeft
+imecedestek.com,news.uavsa.org,paper.li,swapcoin.cc,tuco.co##.MuiSnackbar-anchorOriginBottomLeft
+!! .MuiSnackbar-anchorOriginBottomCenter
+allinone.im,bigsummergolf.com,fashionunited.ca,fashionunited.com,fashionunited.de,pokecardmaker.net,pricellent.pl,services.gerep.fr,skrapp.io,svgator.com,thelowdown.com,tvtv.ca##.MuiSnackbar-anchorOriginBottomCenter
+!! .MuiDrawer-paperAnchorDockedBottom
+evee.co.nz,evee.com.au##.MuiDrawer-paperAnchorDockedBottom
+!! .ui-dialog
+abnova.com.tw,albumartexchange.com,benelli-motor.cz,bio-rad.com,dofus-le-film.com,dofus.com,drago-restaurant.de,dragorestaurant.de,gloucestershire.gov.uk,hillwig.de,infowine.com,krosmaster.com,lekarna.us,lookandlearn.com,miastograf.pl,mympchain.com,nacex.es,portwell.com.tw,siampark.net##.ui-dialog
+!! .ui-widget-overlay
+abnova.com.tw,albumartexchange.com,americantourister.at,americantourister.hu,belizia.fi,benelli-motor.cz,bintercanarias.com,bio-rad.com,boggi.com,cashconverters.es,dofus-le-film.com,dofus.com,gregorypacks.com,hillwig.de,infowine.com,krosmaster.com,lekarna.us,lipault.fr,lookandlearn.com,miastograf.pl,mympchain.com,nacex.es,portwell.com.tw,quiksilver-europe.at,quiksilver-store.se,quiksilver.be,quiksilver.ch,quiksilver.co.uk,quiksilver.de,quiksilver.dk,quiksilver.es,quiksilver.fi,quiksilver.fr,quiksilver.ie,quiksilver.it,quiksilver.lu,quiksilver.nl,quiksilver.pt,rollingluggage.com,rollingluggage.de,rollingluggage.dk,rollingluggage.fr,rollingluggage.hu,rollingluggage.nl,rollingluggage.no,rollingluggage.pl,spaetzlesuche.de,strandlins.com,tumi.com,tumi.com.mx,tumi.pt,wescobroadcast.com,yocasino.es##.ui-widget-overlay
+!! .disclaimer
+apllogistics.com,atraveo.de,bridgeland.com,countwordsfree.com,dielinke.berlin,e-domizil.de,earthcp.com,foxsports.com.au,froneri.pl,goyabu.vip,gregorys.gr,hafnarfjordur.is,hsleiden.nl,lexus.com.cy,lexus.gr,lexus.ie,lexus.no,lexus.ro,lexus.sk,migliori-siti-di-incontri.it,myanimelist.vip,naturgenussfestival.de,news.com.au,rosatomflot.ru,sgtech.co.il,sinfonia.is,swapspace.co,totalplay.com.mx,tudogostoso.com.br,webhint.io##.disclaimer
+!! #disclaimer
+1ps.ru,albaparty.org,aldeparty.eu,amundi.pl,animesdigital.org,animesgames.net,biodiv.be,bitmoji.com,clementoni.com,decisiondeskhq.com,future.mcmaster.ca,gloss.ua,greybox.com,icanw.org,limscave.com,liveradio.ie,snp.org,volksbuehne.berlin###disclaimer
+!! .MuiDialog-root
+allinone.im,jsonquerytool.com,mydirtyhobby.com,sweetcombecottages.co.uk##.MuiDialog-root
+!! .MuiSnackbar-root
+bloggersnetworkdaily.com,coingate.com,customerservicedaily.com,dailyhuntingnews.com,exceldailynews.com,logistica.la,mysilife.com,schlossbergapotheken-zeitung.de,taipeinewsnetwork.com,therobbreview.org##.MuiSnackbar-root
+!! .bottom-0
+aktiivikristinusko.fi,aktiveschristentum.de,aktivkeresztenyseg.hu,aktivkristendom.dk,aktivkristendom.no,aktivkristendom.se,aktivnoyekhristianstvo.ru,aktywnechrzescijanstwo.pl,appsmith.com,askfinny.com,badael.org,bateswells.co.uk,bishopfox.com,burnleyfootballclub.com,centricabusinesssolutions.ie,checkoutwithcoupon.com,cherryservers.com,cheshirecommunityfoundation.org.uk,christenzijn.nl,christianismeactif.fr,cll.net.nz,clubmed.co.il,consumentenbond.nl,crestinismactiv.ro,cristianesimoattivo.it,cristianismoativo.org,csirt.gov.it,d2iq.com,deceiveinc.com,devstudio.bg,egis-group.com,forumdamobilidadeinteligente.pt,freshboxed.com.au,glinche-automobiles.com,globusgroup.com,gloot.com,graphy.com,matador-diervoeders.be,matador-diervoeders.com,medpets.fr,milliescookies.com,mirabilisapartments.com,moonpay.com,nooz-optics.com,nucleusnetwork.com,piggy.eu,pro.kraken.com,qualityedge.com,rambox.app,refurbed.at,refurbed.es,refurbed.it,regiojet.cz,sfc.edu,slice.is,studiorebels.nl,tengr.ai,teym.eu,thaicycling.or.th,theburydirectory.co.uk,tpg.com,truecaller.com,undercovertea.es,valasztas.hu,vilavitaparc.com,wallstreetenglish.in.th,webcatalog.io,wentworthpuzzles.com,yourparkingsign.co.uk,zennio-deutschland.de,zennio.com,zennio.com.au,zennio.mx,zymurgorium.com##.bottom-0
+!! .mysticky-welcomebar-fixed-wrap
+fabocompany.com,polipc.hu##.mysticky-welcomebar-fixed-wrap
+!! mod_cms_accept_tags
+1fckleve.de,adlerparkett.com,aip-pflege.de,alcona.info,alpinschule-kopp.at,andersoneurope.com,anschlussbahnprofis.com,antonbogner.com,arco-obrigheim.de,atemag.de,ausber.de,auto-damm.de,auto-mertens.de,berghotel-habbel.de,betten-star.de,bindschaedel.com,bio-weihnachtsbaum-versand.de,blumen-hannweg.de,bne-kompass.de,broemmelhaupt.de,bruggerhof-camping.at,bs-bauprogramm.de,campuscore.eu,ciborius-gruppe.de,cleobadtra.de,co-chamberorchestra.com,conzieglio.de,dambacher-werkstaetten.de,dezze.net,drmerkundpartner.de,ednt.de,elisental.de,emtrion.de,energie-loesungen.de,europeanavmalliance.org,fahrradlange.de,flink-fleissig.de,gaestehaus-mira.de,gartengestaltung-brunnert.de,gerwenshof.de,gesundheitshaus-berlin.de,glas-schneider.de,gras-tippkemper.de,green-pixelbox.de,gut-vorwald.de,handlampen.com,haug-cnc.de,hausspitaler.at,hecht-dieper.de,hedgework.de,hermes-klapplaeden.de,hoergeraete-pavel.de,hoertechnik.ch,holz-koehrmann.de,horn-ist-vorn.at,hotel-hausammeer.de,ibs-pm.de,imp-ag.de,jbwebart.de,jobcenter-lippe.de,jobcenter-remscheid.de,kanzlei-goebel-partner.de,kari-farming.de,kawasaki-lastenesel.de,kirchenkreis-kleve.de,kongress-arbeitsrecht.de,kranz-kunststofftechnik.de,kreativefreizeit.de,kuk-is.de,kumbichlhof.com,lag-jugend-und-film.de,lebenmitkrebs-rsk.de,loesi.de,lucom.de,mamivac.com,marktundtrend.de,mc-fotobox.de,minervis.com,minol.de,minolenergie.de,mosaik-management.de,mth-containerdienst.de,nantis.de,neudel-verpackungen.de,neufang-akademie.de,nexpotential.com,nickel-immobilien.de,nkr-treppen.de,nmi-tt.de,noerdliches-fichtelgebirge.de,nolte-fliesen.de,norsonic.de,oberschule-bergen.de,ofs-filtration.com,olymp-cd.de,pferdetransport.co.at,pixogram.com,pro-massivholz.de,prowin-bt.net,rattania.de,rauch-import.at,rechtsanwaltinberlin.com,restaurant-passat.de,riedenauer-education.de,ritter-von-boehl.de,rt-specht.de,saegewerk-fuessenich.de,schmallenberger-familienzentren.de,schmitt-fleischwaren.de,schnapsbrennereispitaler.at,schroeder-gas.de,schueler-nachhilfe.net,sebastiankrull.de,security-berlin.de,security-sicherheitsdienst-frankfurt.de,security-sicherheitsdienst-stuttgart.de,sensorik-loesungen.de,sg-strietwald.de,ski-gmbh.com,soziokultur-thueringen.de,struber-entsorgung.com,struck-recycling.de,technologie-medien.de,theater-eisleben.de,tierheim-wipperfuerth.de,tischlerei-brummert.de,treble-light.com,ttc-werden48.de,tujareisen.de,tuwas-deutschland.de,twc-grebe.de,urologie-am-wilhelmsplatz.de,vdc-faust.ch,villapaulus.de,voegeler-bau.de,vwa-hochschule.de,waagen-friederichs.de,wegschaider.at,weihnachtsbaumhof.de,wg-riesa.de,wild-bikes.de,wn-zentralklinik.de,wohnungen-und-haeuser-in-brandenburg.de,younited.de,zelle-immobilien.de,zurell-samina.de##.mod_cms_accept_tags
+!! .cli-modal-backdrop
+datakauppa.fi,larionews.com,misaij.fi,puglia.com,reproduccionasistida.org,salmonsoftware.ie,wemabank.com##.cli-modal-backdrop
+!! cookie-law-info-bar
+1bazar.sk,300dollardatarecovery.com,42krunning.com,78rpm.club,aboutitgroup.co.za,acino.ru,adevinta.com,adimorahblog.com,admiralparkhotel.com,admvital.com,advister.it,agrolio.com,aldrimer.no,ammirati.org,arcasting.it,arcturus.be,autexier.fr,author-it.com,autobusweb.com,beatotemilano.it,biogaran.fr,bodymaja.fi,bookinglive.com,bookitit.com,boost.com.mt,boticadelpuerto.com,briefyourmarket.com,carujeme.cz,carzine.gr,castgroup.com.br,castlebrook.fr,ciociaria24.net,clevergirlfinance.com,codinaarchitectural.com,colisexpat.com,contact-telephone.com,copenhagenlightfestival.org,costcocouple.com,crimsontech.jp,cryptogyani.com,cuatroochenta.com,designtagebuch.de,doogweb.es,dsgta.ch,dynamicauctioneers.co.za,ecole-steiner-verrieres.org,eluxemagazine.com,enthralling.eu,entrepreneursdumonde.org,eteknix.com,ferienwohnungen-ignazhof.de,fitinteriors.com,florianwmueller.com,francemuseums.fr,fromthemurkydepths.co.uk,gamalin.com,gazteberri.eus,gentjazz.com,gezond.info,glutarama.com,grupafachowiec.eu,gs1es.org,guildford-dragon.com,gulf.de,hotel-engiadina.ch,howwegettonext.com,ibmix.de,iempresa.net,ilpatronato.it,implantate.org,ina.hr,infusioncentre.co.za,innoplexus.com,jalkapallon-mm.fi,jtag.com,kegsofftap.com.au,kleinjagtlust.nl,kudowa.pl,kuluttaja.fi,kunstverein-friedrichshafen.de,kuribay.fr,larionews.com,lazertelecom.com,louroe.com,lubiehrubie.pl,lzautomobile.de,majorleaguetrading.com,materom.ro,mbbuzz.com,mimioconnect.com,mirusmed.com,misaij.fi,mizunogolf.com,myllarin.fi,newcare.agency,oley.com,pcs.com.mt,pierregignoux.fr,podcaliptus.com,popcorncinemashow.com,power-sprays.com,power-type.com,praktijkreestenregge.nl,pylades.com,radioalfacastelgoffredo.it,radiogalileo.it,radioitaliacina.com,radiologen-mansfelder-land.de,radioplayeritalia.it,regioneo.pl,reinventer-le-monde.fr,remadewithlove.nl,renasterea.ro,ridecake.com,rinconpsicologia.com,robertobeloki.com,router-kaufen.com,rubbella.nl,runspree.com,sannicandro.org,seapointleisure.ie,shellsoul.com,sigfox.fr,silverbt.com,sivamspa.it,smcexclusive.co.za,softsuggester.com,sora24.it,spaccioitalia.com,spinbreak.fr,ssarezzo.it,sub5.se,theghostinmymachine.com,thesushitimes.com,tilomotion.com,ttigroup.com,tuxera.com,unimooc.com,uvetgbt.com,vimentis.ch,webmanuals.aero,whatsup.es,wide-angle.nl,windowsteca.net,woesteland.nl,woodeal.fr,wpweb.com,zampadigallina.com,zapolsky.fr###cookie-law-info-bar
+!! .wt-cli-cookie-bar-container
+360-surf.com,aaepa.com,abakion.dk,abast.es,academiaados.com,actafarma.com,addiction-ssa.org,aepsal.com,agendaconsulting.co.uk,agronegocios.es,airbreizh.asso.fr,alcaldes.eu,allegrodev.com,alpha-furnishing.com,altiden.dk,amiu.genova.it,ariva.ag,astar.se,automobilandia.com,aviareps.de,aviationvoice.com,bakon.com,bandce.co.uk,bastelnmitkids.de,bayardad.com,bio-bretagne-ibb.fr,bitcoinwisdom.com,bnh.no,broschtextil.de,bucksmore.com,calderaspas.co.uk,cambio.se,cannabigold.pl,catchsoftware.com,caupenne-co.com,cellnex.com,centre-congres-rennes.fr,chestnut-tree-house.org.uk,clandellamusica.it,cleantotaal.nl,collinsdictionary.com,communitycu.ie,concorsando.it,constructioncanada.net,construred.com,corkandross.org,cosmo-one.gr,coursenplus.be,cple-langues.fr,creative-itc.com,crewrepublic.de,cuh.ie,doortal.fr,dotykacka.cz,dronedeliverycanada.com,dsigrupo.com,duodecim.fi,ebury.es,ebury.pl,edsunloisirs.com,effektiv.se,efmdglobal.org,ek.fi,embedsocial.com,emds.com,emvo-medicines.eu,enerad.pl,enhancedworld.com,epic.com.mt,epidor.com,ersnet.org,escueladesarts.com,esneca.com,espaces-atypiques.com,espira.no,evotec.es,fagorarrasate.com,fairplane.de,fast-fluid.com,fenadismer.es,finances-pedagogie.fr,finlays.net,fnusa-icrc.org,foodiesmagazine.nl,forbes.sk,frameworkha.org,franet.es,galimmo.com,gditalia.biz,genesalenergy.com,globalcanopy.org,globalfocusmagazine.com,goqubits.com,granhotelsolymar.com,groupecham.com,handypark.de,happy-or-not.com,hdl.fi,headlandconsultancy.com,headspace.dk,hisense.co.uk,hopitalmarielannelongue.fr,iaki.it,icert.fr,icreatemagazine.nl,icredit.be,ifria.fr,ihs.com.mt,ikerjimenez.com,ilfdublin.com,infantandtoddlerforum.org,infos-grancanaria.com,instagiv.com,intapp.com,intellisurvey.com,iris-eng.com,isit-paris.fr,jardinsdebroceliande.fr,kartenkaufrausch.de,kauneimmatjoululaulut.fi,kaypahoito.fi,kdlehti.fi,keravanenergia.fi,klarakompetens.se,kompare.hr,lab49.com,lancr.eu,letastingroom.com,letterkennycu.ie,liderlamp.es,lih.lu,linkosuo.fi,lmc.co.uk,locarchives.fr,lucta.com,mabi.fr,marktechpost.com,mbda-systems.com,medeflyonrhone.fr,medilaser.fi,medrio.com,merkendiewerken.be,microprecision.com,modasosteniblebcn.org,monasteriopiedra.com,moovapps.com,morakniv.se,motionmill.com,motorgas.nl,mpedia.fr,multimodaal.vlaanderen,najlepsiebrany.sk,naturfarm.dk,nevaly.com,nikonlenswear.com,no1copperpot.com,northamericanherbandspice.com,nytida.se,oblixcapital.com,oxfordinternationalenglish.com,pagel.com,paingone.com,peoplesafe.co.uk,persianasbarcelona.com,pilotchemical.com,pisla.fi,polideportivomalilla.com,pontsnormandietancarville.fr,portanatura.it,premium-organics.com,propharmagroup.com,quies.fr,rainbows.co.uk,raisio.com,raisioaqua.com,raypa.com,readcoop.eu,real-fix.com,refugeecouncil.org.uk,resartis.org,rett.es,reval.com,rheinzahn.de,rotterdam.info,rotterdampartners.nl,roydswithyking.com,salli.com,sammons.co.uk,selectabase.co.uk,sentieriselvaggi.it,seopan.es,sezz.be,sinituote.fi,skintechpharmagroup.com,slyrs.com,smartschool.be,sofiero.se,sosbebesrobadosmadrid.com,sourcebreaker.com,spannocchia.org,spond.com,spreekwoorden-gezegden.nl,steeltube.sk,stmodwen.co.uk,stockmanagementlabs.com,sundayworld.co.za,swedma.se,swimmersdaily.com,tampereenseutu.fi,tappx.com,techvalor.net,tenzing.pe,theingeniousgroup.co.uk,thepeoplespension.co.uk,thetradecentrewales.co.uk,thinktwice-secondhand.be,tieke.fi,tilda.com,timgroup.com,topelectricsuv.com,tpt.com,tropicalpoint.it,tuhlteim.de,turitop.com,twenergy.com,tyj.fi,unitedforwildlife.org,univrses.com,urbaser.com,valdeluz.com,vapo.fi,vardaga.se,vialink.fr,ville-floirac33.fr,voicesage.com,watercool.de,wd40.es,wd40.pt,weetabix.co.uk,weetabixfoodcompany.co.uk,wifinity.co.uk,wikimedia.de,womeninsport.org,yubico.com,zvwab.de##.wt-cli-cookie-bar-container
+!! #exampleModalCenter
+roval.be,roval.eu,roval.nl,rovalaluminium.fr###exampleModalCenter
+!! .cc-overlay
+bellaffair.com,biomedcentral.com,colop.com,computerwelt.at,der-metronom.de,dtv.de,hardtwaldsiedlung-karlsruhe.de,herold.at,internorm.com,jacob.de,jhdversicherungen.de,laenderbahn.com,leuchtturm.ch,leuchtturm.com,leuchtturm.de,leuchtturm.es,leuchtturm.fr,leuchtturm1917.com,leuchtturm1917.de,libraries.merton.gov.uk,mylibrary.merton.gov.uk,rcodezero.at,semikolon.com,springernature.com,torquato.de,vinzenz-klinik.de##.cc-overlay
+!! .avada-footer-scripts
+atalmedial.nl,avanhost.com,bioneer.dk,conferencetech.com,designengineerconstruct.com,dgob.de,domuslaundry.com,geniessertouren.org,institutomarketing.es,karwendelhaus.com,response.gr,santeria.milano.it,sindastra.de,specim.fi,tisak.hr,turkishbank.co.uk##.avada-footer-scripts
+!! .modal-cacsp-position
+0mas000.com,3-be.se,aardeboerconsument.nl,acib.es,adler-wolfspark.de,almaqua.com,atass.org,beno-zilina.sk,bet-duberseuil.com,bielypotok.com,biometricvox.com,bretislavka.cz,budos.fr,but-konto.de,cealicante.org,cekantour.sk,ceoma.org,cero.cz,clg.cz,condohotele.eu,creativeworks.com.mx,cs3marketing.com,delogica.com,derkundschafter.de,digim.pl,dsd-dostal.cz,eisbratislava.org,enredadios.com,epoplast.sk,escolasagrera.cat,eurocentra.cz,eworks.sk,femsinspace.com,fiebach-minninger.com,flordeesgueva.es,fmpack.com,funtechadventures.com,gamacisa.com,gemeinde-nordharz.de,grandhotelgarden.com,growzer.com,grupoicsolutions.com,helsingborg.se,hop-shop.hr,hotelbeverlypark.com,hotelcalina.com,hotelpimar.com,hotelstatt.se,hotelstraznice.cz,ihka.be,imrvere.com,intertechnic.sk,iwareprint.pl,klinikakrasyandel.cz,lasalita.org,lerroux.com,limoncomunicacion.com,lineten.com,lofbergs.fi,macla.eu,mapalomo.com,metaling-jajce.com,nordicmedtest.se,odbpaderno.it,orientalysbeaute.com,pallejabcn.com,parimeo.de,productosdieteticos.es,profile.es,proske-sanitaer.de,psicologia-estrategica.com,rbbeautycenter.com,reprogir.cat,ruvztv.sk,sagobygden.se,schweintaal.sk,sgfinanciera.com,signframing.nl,soloducha.es,sortirahaguenau.fr,sosfinance.cz,tendermedia.es,totalmar.com,totimpressio.com,veclaicene.lv,vins-loupiac.com,visitaluksne.lv##.modal-cacsp-position
+!! .modal-backdrop (only)
+airnewzealand.eu,aluminiosbrinas.com,arlingtoncemetery.mil,arthrex.com,axminster.co.uk,cfdbetting.com,ctbrand.store,daf.be,daf.co.uk,daf.com,daf.fr,daf.global,daf.nl,daf.ru,daf.se,daftrucks.de,daftrucks.dk,daftrucks.it,daftrucks.pl,daftrucks.sk,denmans.co.uk,digiwallet.com,easy-menu.io,epiphone.com,ferratum.co.uk,fiveguys.co.uk,flaine.com,flipsnack.com,gibson.com,globalfamilydoctor.com,happypenguin.altervista.org,hyperoptic.com,interactivebrokers.co.uk,interactivebrokers.com.au,interactivebrokers.ie,kon-boot.com,lam.co.mz,maestroelectronics.com,mapquest.co.uk,mecaniculanului.ro,medtronic.com,missprint.co.uk,myshopi.com,nuri.com,primaresearch.org,pristupy.com,promptamcs.com,qv.co.nz,regro.at,rexel.co.uk,rexel.de,rexel.fr,rexel.nl,rexel.se,riddle.com,schaecke.at,spectranet.com.ng,spezialcycle.it,thefoodmaker.com,toshiba-tv.com,whatismymovie.com##.modal-backdrop
+!! .bottom_notice
+autoacores.com,auxbonnesoccasions.fr,campersclassifieds.com,dogbreedersgallery.com,follam.com,komdaame.com,le-vide-grenier.net,lexylist.com,makina.si,milpasiones.com,nuli.at,ocazie.ro,orozje.eu,realestate.ro,ukads.org,vente-achat-commerces.fr,weltcars.com##.bottom_notice
+!! #fancybox-overlay/#fancybox-wrap
+aeerc.com,centreceramique.nl,eplan.at,eplan.ch,eplan.co.uk,eplan.de,eplan.es,eplan.hr,fusacq.com,illicopharma.com,kathond.be,kathond.com,kathond.de,kathond.nl,motointegrator.de,optisweb.com,petcure.de,petcure.nl###fancybox-overlay
+aeerc.com,centreceramique.nl,eplan.at,eplan.ch,eplan.co.uk,eplan.de,eplan.es,eplan.hr,fusacq.com,illicopharma.com,kathond.be,kathond.com,kathond.de,kathond.nl,motointegrator.de,optisweb.com,petcure.de,petcure.nl###fancybox-wrap
+!! .elementor-location-popup
+calabria7.it,firstbanknigeria.com,radioromanista.it,whatson.is##.elementor-location-popup
+!! elementor-popup-modal
+caldigit.com##.elementor-element-31e18001
+acogo.pl,alcatelmobile.com,alpedhuez.com,apotheke-villingen.de,audirvana.com,bananathaischool.com,bearable.app,bebocommunication.fr,begindot.com,beyondthebox.it,blocksite.co,boulderholisticvet.com,budgetinsurance.com,buehlerzuerich.ch,codesignal.com,codeworks.me,conjunctconsulting.org,correctiv.org,cover-4-less.com,dialdirect.co.uk,discoveryfrance.fr,dissept.com,doyouevenblog.com,droneacademy.com,dunense.com,easycookasia.de,editalo.pro,epoha.com.hr,everydaymarksman.co,faktograf.hr,fortisclothing.co.uk,funnelytics.io,green.hr,herbata.info,hombresevolucionantes.com,howsmart.pl,interreg-croatia-serbia.eu,interreg-hr-ba-me.eu,kalani-home.com,lajtmobile.pl,leica-enthusiast.de,lemondeencommun.info,lionsroar.com,loading.com.br,mainzahn.com,mcg-digital.de,megasvet.cz,mekongpackraft.com,mondenissin.com,mudes.org.br,nineambell.com,outkick.com,paperlessmovement.com,parametric-architecture.com,po-bandzie.com.pl,pogodadlaslaska.pl,porttechnology.org,rdlfitness.com,realitysandwich.com,reputationup.com,restaurant-tribeca.com,romo-tonder.dk,roonlabs.com,rse-get-it-right.org.uk,schwabenhaus.de,selle-proust.fr,spolem.olawa.pl,stoppub.fr,strasbourg-europe.eu,surfacescan.co.uk,thecountersignal.com,thegapdecaders.com,tldallas.com,tutolino.net,urbex-tour.com,vr-expert.nl,weglot.com,whereyourebetween.com,wolfgangkrebs.com,woovin.com,zencare.org##.elementor-popup-modal
+!! .uk-notify-message
+elfshare.com,tickazilla.com##.uk-notify-message
+!! sellpy
+sellpy.at,sellpy.com,sellpy.de,sellpy.dk,sellpy.fi,sellpy.nl,sellpy.se##.gUbXEK
+!! hertz
+hertz.at,hertz.be,hertz.ch,hertz.co.uk,hertz.cz,hertz.de,hertz.es,hertz.fi,hertz.fr,hertz.ie,hertz.it,hertz.lt,hertz.nl,hertz.no,hertz.pl,hertz.pt,hertz.se,hertzdk.dk###light-box-1
+hertz247.co.uk,hertz247.com,hertz247.de,hertz247.fr,hertz247.pt##.lb-eucl.lbBgScreen
+hertz247.co.uk,hertz247.com,hertz247.de,hertz247.fr,hertz247.pt##.lb-eucl.lbFgBox
+! .z-50
+actievandedag.nl,bairesdev.com,bootstrap.academy,doppelherz.com,energydashboard.co.uk,freelway.com,help.adjust.com,livecounts.io,mymorrisons.com,perplexity.ai,posthog.com,zealy.io##.z-50
+! scotiabank
+roynat.com,scotiabank.com,scotiafunds.com,scotiaitrade.com,scotialifefinancial.com,scotiawealthmanagement.com##.alert-sticky
+! groupon
+groupon.ae,groupon.be,groupon.ca,groupon.com.au,groupon.es,groupon.it,groupon.nl,groupon.pl###spotlight
+! sensorsdata
+sensorsdata.cn,sensorsdata.com##.index-module--CookieAuthShow--io6F7
+! Multi domains
+ancestry.com,ancestry.de,ancestry.fr,ancestry.it,ancestry.mx,ancestry.se###bannerOverlay
+alko-garden.de,alko-garden.hu,alko-garden.it,alko-garden.pl###divDisabledBackground
+mresell.at,mresell.co.uk,mresell.com.au,mresell.de,mresell.es,mresell.fi,mresell.it,mresell.nl,mresell.se###popup_wrapper
+boyden.ca,boyden.com,boyden.de###site-terms
+amazon.ca,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.tr,amazon.de,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.se###sp-cc
+klingspor-latinoamerica.com,klingspor.ae,klingspor.at,klingspor.bg,klingspor.ca,klingspor.cl,klingspor.cn,klingspor.co.th,klingspor.co.uk,klingspor.co.za,klingspor.com.au,klingspor.com.br,klingspor.com.pe,klingspor.cz,klingspor.dk,klingspor.es,klingspor.fi,klingspor.fr,klingspor.hr,klingspor.hu,klingspor.id,klingspor.in,klingspor.it,klingspor.mx,klingspor.my,klingspor.net.vn,klingspor.nl,klingspor.nz,klingspor.pl,klingspor.pt,klingspor.ro,klingspor.rs,klingspor.se,klingspor.sg,klingspor.si,klingspor.ua,klingsporooo.ru###vinegar-bottle
+aia.com,aia.com.sg##.alertFooterContent
+st1.com,st1.fi,st1.se##.backdrop
+happypancake.fi,happypancake.nl,happypancake.se##.bar.jsx-341223085
+shopee.es,shopee.fr,shopee.pl##.bpGouG
+st1.com,st1.fi,st1.se##.cookie-consent-modal
+royaldesign.co.uk,royaldesign.com,royaldesign.de,royaldesign.dk,royaldesign.fi,royaldesign.jp,royaldesign.kr,royaldesign.no,royaldesign.se##.e1trcp210
+ticketswap.com,ticketswap.fr,ticketswap.nl,ticketswap.uk##.e3v4wli0
+! #popinGA
+ocblab.co.uk,ocblab.es,ocblab.fr###popinGA
+! vanguard
+ch.vanguard,fr.vanguard,it.vanguard,nl.vanguard##.cdk-overlay-pane
+vanguard.com,vanguardinvestments.de,vanguardinvestments.dk,vanguardinvestments.se##.disclaimer_box
+vanguard.com,vanguardinvestments.de,vanguardinvestments.dk,vanguardinvestments.se##.transbox
+! .ReactModal__Overlay
+gcds.com,great.gov.uk,make.org,oralb.ca,swapcard.com,tommy.com##.ReactModal__Overlay
+! #cookie
+2020da.com,2jewels.it,abi-und-jetzt.com,accon.com,add0n.com,adlbg.com,adventures-kompakt.de,aflite.co.uk,airotel.gr,alepia.pl,alternative-zu.de,andrewsandbrown.co.uk,antologien.dk,aon.com,aphaccountants.co.uk,aqform.com,archimagazine.com,artifolk.co.uk,assm.ch,atom42.co.uk,atramentowka.com,audiototaal.com,autonoleggioilgirasole.it,autozine.de,autozine.nl,babanet.hu,bakersmall.co.uk,balans.nu,bbvonline.net,bee.com.mt,belemsofthotel.com.br,belushis.com,best-faucets.com,betradar.com,bimibroccoli.ch,bimibroccoli.co.uk,bimibroccoli.dk,bimibroccoli.it,bimibroccoli.nl,bimibroccoli.se,bimibrocoli.fr,bimibrocolis.pt,bimibrokkoli.de,bimibrokkoli.no,bimiparsakaali.fi,bokono.pl,bookingsouthtyrol.com,boxnation.com,bulles-de-bonheur.com,bulpittcrocker.com,bunkeroil.no,burg-lindenfels.de,butterworthsaccountants.co.uk,buty-mustang.pl,camionsupermarket.it,cateno.no,citroen-club.it,clouders.co.uk,codedwebmaster.com,comlab.ch,comune.montecchio-maggiore.vi.it,comunemarrubiu.it,confidisystema.com,constructionguarantee.ie,coolweb.gr,cosmeticdentistry.hu,cpia1.roma.it,cretetv.gr,crossleyanddavis.net,dartshopper.de,debex-potsdam.de,decolove.com,delitosinformaticos.com,disclose.ngo,docmicro.com,doctorberlin.de,domwroc24.pl,dufa.com.tr,e-dewocjonalia.eu,e-doggy.com,e-doggy.pl,easttothesun.com,ecoemi.lv,econsteel.de,ekosklad.si,eleader.biz,elektro-met.pl,ellathebee.de,emilie-fayet.com,emiter.net.pl,enistation.com,eqavet.eu,ericom.com,esselunga.it,essentraextrusion.de,essentraextrusion.eu,estetic-dent-sklep.pl,esve.cz,europa-vrachtwagens.nl,europe-mountains.com,extramagazine.eu,ezzocard.com,facialfeminizationsurgery.com,fft.co.uk,fiberatlantic.com,fino.hr,fitout.de,fixeta.com,flexerasoftware.com,flexrun-software.de,flipspot.de,flowfitonline.com,foodplus.eu,freedayshop.es,fremantlemedia.com,g-o-hannover.de,garycansick.co.uk,gencboya.com.tr,geoweb.it,gezor.pl,giornaledicalabria.it,goldankauf123.de,gopractice.ru,gov.pl,grace96.com,grilloagrigarden.ru,grillofrance.fr,gulfstream.com,hannoversche-kassen.de,hartleyfowler.com,haushalts-robotic.de,hdmecze.com,hearingdogs.org.uk,hemp.pl,hivatas.com,holystone.com.tw,homanit.org,horlogerie4you.fr,hotelplzen.cz,hug-baustoffe.ch,hupx.hu,iadvize.com,iglazura24.pl,imu.nl,inf.org,inscience.news,it-shop24.pl,italiarecensioni.com,jag.pl,jsol.co.jp,kaffeeverband.de,kalinowo.pl,kb.se,kernesundfamilieshop.dk,keyboardco.com,kicc.org.uk,klockor4you.nu,kmcchain.de,kmcchain.eu,koloknet.hu,konzerthaus-dortmund.de,koupelny-sen.cz,kube.no,kud.pl,la-tour.ch,lawebdelprogramador.com,legebatterijen.nl,legslavishelite.com,lexiq.hu,lifescience.net,lightexpert.nl,lonewolfonline.net,lubricantesruescas.com,ludusa.com,lutecium.org,lvr.de,mailion.ru,makspower.no,mallorca.de,man4car.com,maxwelland.co.uk,mdo.hu,meblemagnat.pl,megastore.com.mt,messinaline.it,michael-adamson.co.uk,mirfrance.com,mirka.com,mobileroadie.com,modryzub.eu,monitoruljuridic.ro,mouseprice.com,mustang-batai.lt,mustang-cevlji.si,mustang-chaussures.fr,mustang-cipele.hr,mustang-cipo.hu,mustang-incaltaminte.ro,mustang-scarpe.it,mustang-schoenen.be,mustang-shoes.pl,mustang-sko.dk,mustang-skor.se,mustang-zapatos.es,mutualhelp.eu,myoffice.ru,myofficehub.ru,naszezoo.pl,naukawpolsce.pl,neurologe-freiburg.de,nik-technik.de,nik.bg,njiva.si,notebookspecialista.hu,novema-nova.hr,nspcc.org.uk,obuv-mustang.ru,oil-land.pl,oilplusltd.com,onenessscotland.org,oprogramowanie-przychodnia.pl,order.wreckfestgame.com,orologi4you.it,osnews.pl,papiernikbyempik.com,parkerpartnership.co.uk,pcforce.pl,pcinplzen.cz,peakbusinesssolutions.com,persoonlijkegezondheidscheck.nl,peterjarman.com,photogirl.cz,phpipam.net,pilarohy.cz,pilot-frixion.be,pilot-frixion.ch,pilot-frixion.fr,pilot-frixion.it,pilot-frixion.uk,pisoscentro.com,pizzacasa.hu,pizzerieplzen.cz,pma.com.au,politikon.es,pomegranateconsulting.co.uk,portaley.com,positronx.io,pracuj.pl,prestashop.com,pretix.eu,priorygroup.com,proglib.io,proklima-hannover.de,promennt.is,prosenectute.ch,przyjaznarekrutacja.pl,pszs.eu,publishwhatyoufund.org,qtravel.pl,raaccountants.com,radcom.ro,raising-ducks.com,relojes4you.es,revistablogurilor.ro,rimini.com,ritmo.it,rodacciai.fr,saa.co.uk,sach-mat.cz,sail-lastminute.com,sainsburysenergy.com,samw.ch,sandisonlang.com,sanfrancescopatronoditalia.it,sassari.tv,schoenen-mustang.nl,schoms.ac.uk,schulze-architektur.com,scienceinpoland.pl,searchlightmagazine.com,sedecal.com,shelties-vom-uhleneck.de,siamfoods.com,simmons-simmons.com,sinko-soko.jp,skanetrafiken.se,sklep-art-meb.pl,sklep-wadima.pl,sklep.3mk.pl,sklep.cyfronika.com.pl,sklep.wodbud.com.pl,skovdyrkerne.dk,spesati.it,squash4you.pl,stadt.no,stamfordstone.co.uk,starlane.com,stca.co.uk,stiripesurse.ro,storiadeifilm.it,stpaccounts.com,studiobio.cz,subarufanclub.cz,submitaplan.com,supernet.hr,svitol.it,svjedocanstva.com,swiat-sypialni.pl,swiatloistyl.pl,swissid.ch,tadeevo.com,tanktrouble.com,technutty.co.uk,techtransfer.pt,tenis.net,terredeshommes.org,thebmc.co.uk,timeshop4you.co.uk,tomasexpediciones.es,toomeymotorgroup.co.uk,torp-fasteners.no,toyota-td.jp,triplan.dk,tutsandtips.com,tvcorner.com,uhren4you.de,uni-miskolc.hu,uni-und-dann.com,unsee.cc,unwire.hk,vag247.com,vandpieseauto.com,velanet.it,videokedvenc.hu,virtualeye.pl,virtuveslietas.lv,vzajemna.si,wacoaccountants.co.uk,wellcard.at,weller.com.pl,wertigo.ru,wheatley-group.com,windpress.info,wirtschaftsfoerderung-hannover.de,xfutbol.pl,youngminds.org.uk,zbmath.org###cookie
+! #cookies
+123comparer.fr,abcz.org.br,adams-music.cz,adequate.pl,advancedinstaller.com,agenttravel.es,agro-xardin.com,agrointel.ro,ah-me.com,alergia-allegra.pl,alltube.tv,amilian.de,anpost.ie,antagonist.nl,any.run,apotheekzorg.nl,aquariumforums.co.uk,aquedah.com,aquila.pl,arag.com,arctest.fi,arlestourisme.com,asauto.ro,aspias.net,asta-yachting.hr,astillerosamado.com,ataudesgallego.com,atemfito.com,atleticodemadrid.com,auberge-maison-rouge.com,auchan.pl,autoampel.de,autopitonline.ro,awilux.cz,ayraviation.com,bagoasdomar.com,bakker-repair.nl,bakkersliedrecht.com,bankmillennium.pl,baromfiudvar.hu,bazar.club,bimyou.es,bioliq.pl,bl.uk,blockfloete.eu,bnext.es,boardstar.cz,bockleder.de,boettcher-fahrraeder.de,bta.bg,caminodosar.com,campleaders.com,canadiansolar.com,carbonicaslandeira.com,caribbeanjobs.com,celulares.com,cext.es,chineame.com,cifas.org.uk,cityhotel-muenster.de,citylets.co.uk,claveweb.com,climaprecios.com,clinicaconcheiro.com,clublablanca.com,co-x.at,coinsofhope.eu,complia.es,composteladigital.com,conan-kolekcja.pl,coreixample.com,cork1point.com,crcinfrared.com,crmorrow.com,cuerosnoroeste.com,cw.com.tw,cyfrowe.pl,czytio.pl,delkom.pl,desgphoto.com,designsociety.org,devriesinvestmentservices.nl,digitel.sk,dobreprogramy.pl,doorstore.co.uk,dosilmaronas.com,dzieje.pl,educalingo.com,eimenuts.com,eitb.eus,ekino-tv.pl,elegant.be,elenplast.com,eliteracingclub.co.uk,eltesan.com.tr,emiko.de,emtype.net,emunewz.net,enmark2.com,eporner.com,eska.tv,espais360.com,espectaculospereira.com,esquelasdeasturias.com,essenjet.com,estiber.com,exfopino.com,f5auto.ro,factoriadeproyectos.com,fbhvc.co.uk,feyenoord.com,fidelidade.pt,fidelitypensionmanagers.com,film-news.co.uk,filman.cc,filmboxextra.pl,filmladder.nl,firma5.com,fitnessclubs4.pl,fokus.tv,forbiddenplanet.co.uk,freemeteo.by,freemeteo.ch,freemeteo.com,freemeteo.gr,freemeteo.hu,freemeteo.nl,freemeteo.rs,fresgestin.com,fulltilt.com,garciasabate.com,gastro-muenster.de,gaygo.tv,geilemaedchen.com,generali.pl,gestalylopez.com,ghetaldus.hr,globalgolf.com,globalpetrolprices.com,gourmibox.com,gov.hu,gov.pl,gpstraining.co.uk,grupapartner.pl,grupodom.es,gta5grand.com,guntin.net,gupy.fr,harper-adams.ac.uk,hautarzt-perchtoldsdorf.at,hepsor.ee,hepsor.lv,heuristic.pl,hi-tec.com.pl,history.bnpparibas,hoewilikstrakswonen.nl,holmesmill.co.uk,homecinemachoice.com,hostisoft.com,hotel-baud.com,hotel-continental.com.ve,hudebnishop.cz,humbersideairport.com,ibeesoft.com,icex.es,igorsicinski.com,ikar-centrum.pl,illiquidx.com,imperiaonline.org,implantoloski-center.si,improven.com,inmobi.com,intercon.systems,interfaceconcept.com,intur.com,iplogger.org,irishjobs.ie,iso-chemie.eu,istac.at,itc-pa.pl,itpstudio.pl,izikart.co.uk,jcea.agr.hr,jenox-akumulatory.pl,jomast.co.uk,josilq.pl,justice.bg,kasystefczyka.pl,keesvanderspek.nl,kj.de,kosmiczni.pl,ladel.sk,lamuscle.it,lebenundtod.com,lemmon.es,lenceriaintimabonet.com,lexika.hu,lloydsbankinggroup.com,lolabrause.ch,loqueleo.com,lordicon.com,luckyshepherd.com,luluteveiculos.com.br,lupopornohd.it,luxury-spa.cz,maderasornanda.com,magnadijital.com.tr,marcodaspias.com,mardeesteiro.com,mareespeche.com,mccarthyisuzu.co.za,mediamaratonvitoriagasteiz.com,mediasetitalia.com,megateh.eu,membean.com,mercatdesantantoni.com,merceariabio.pt,mervynstewart.com,metbiocat.eu,mfa.bg,minfin.bg,mitino-center.ru,mittonhallhotel.co.uk,moistureguard.cz,monaditas.com,monebrosdiy.co.uk,moviles.com,movistarriders.gg,mplgrandouest.org,multicare.pt,muzo.fm,my-meteo.com,myfitnessplace.pl,myjob.mu,mzbouw.nl,nasze-kino.tv,newberry.cz,newsweek.pl,ni-host.com,nocilla.es,nocujmy.pl,noisli.com,nowa.tv,nuriabello.com,obrasgnovoa.com,okteleseguros.pt,okz.hr,onauto.ro,ondevio.com,onlinecsapagy.hu,ordineavvocati.bari.it,oriffpl-cn.fr,ormandygroup.com,os3ti.com,osetrovatelstvo.eu,ottisoftware.com,oxastredeanos.com,paczkawruchu.pl,pamasat.es,panfurware.com,pb.edu.pl,pcase.it,pharmalot.nl,phillipsvolkswagen.co.uk,phoenixproject.at,phonearena.com,phphulp.nl,piaseczno.eu,picload.org,piese-auto-oradea.ro,pilkanozna.pl,pkpsa.pl,plantflags.com,play.pl,playclassic.games,playretrogames.net,pokernews.com,police.uk,polloslaino.com,polotv.pl,polsat.pl,polskiprzemysl.com.pl,portal.seg-social.gob.es,portalnaval.com.br,praguerealestate.cz,prazskereality.cz,premiumcredit.co.uk,primecomputer.co,priv.pl,private.com,privatecastings.com,procuradoresensantiago.com,profmetkol.pl,propetan.com,proteum.co.uk,psimarta.com,puromarketing.com,q2shop.co.uk,q2shop.com,q2shop.fr,q2shop.it,q2shop.pt,ra-ktp.de,radiocaroline.co.uk,raffaeleinghilterra.it,rdnester.eu,realdevelopment.pl,realmadryt.pl,ren.pt,resortleaders.com,restaurant-lamaryllis.com,restauranteapedra.com,retraitesdeletat.gouv.fr,ricardoazkue.com,rockserwis.fm,rotterdam.info,sachdelnoroeste.es,safetica.com,saint-gobain.co.uk,samcook.eu,samorzad.pap.pl,santmartieix.com,saudedosorriso.com,saurclient.fr,sawauto.ro,sc17.it,schuller.es,scl.org,scm-handball.de,sector04.com,separacionydivorcio.es,servigest.info,sikana.tv,sjdavidsonmotors.co.uk,smallerearth.com,so-mad.fr,sofiamosquera.com,solidas.be,solutions-numeriques.com,spa24bergerac.org,spreadthequote.com,stalderag.ch,starcool.com.tr,station-orange.com,structo.ee,studentski.net,sunporno.com,suomentivoli.fi,supermolon.com,support.tonies.com,svetratanu.cz,sync.me,t-es-qui.com,tablademareas.com,tech-review.de,tellows-au.com,tellows-fi.com,tellows-ng.com,tellows-tr.com,tellows.asia,tellows.at,tellows.be,tellows.co,tellows.co.nz,tellows.co.uk,tellows.co.za,tellows.com,tellows.com.br,tellows.cz,tellows.de,tellows.dk,tellows.es,tellows.fr,tellows.gr,tellows.hu,tellows.in,tellows.it,tellows.jp,tellows.mx,tellows.net,tellows.nl,tellows.org,tellows.pl,tellows.pt,tellows.ru,tellows.se,tellows.tw,telspy.org,the-storyteller.eu,the-tls.co.uk,theatre-news.com,theburlingtonfiles.org,thefilmclub.it,theglobaleconomy.com,theodora.com,tnpetroleo.com.br,toquedeletra.com.br,torunskiefirmy.pl,traegerwerk-thueringen.de,tranny.one,trasteroselpato.com,tripolo.pl,triton-reagents.de,tsb.co.uk,tugramy.pl,tupornogratis.xxx,tv4.pl,tv6.com.pl,twsd-ag.de,twsd-sa.de,ukrainianinpoland.pl,uni-muenster.de,va90c-online.de,valfre.es,vcssoluciones.com,venen-ordination.at,verema.com,veremasolidaria.org,vest-auto.ro,viveirosgastrar.com,vizjer.pl,voxmusic.tv,vypocitejto.cz,wearemarketing.com,weldricks.co.uk,wilsonsofrathkenny.co.uk,woekomat.de,wroc.pl,wsws.org,wszczecinie.pl,xioci.com,xn--diseowebames-dhb.com,xn--diseowebengalicia-ixb.com,xn--diseowebmilladoiro-q0b.com,xn--diseowebsantiagodecompostela-0xc.com,xnostars.com,yesvids.com,yoo-ci.com,zdrofit.pl,zdrofitzdrowemiejsce.pl,zkl.hr,zlatydul.cz,zonexecutive.com###cookies
+! (formerly known as mobile.twitter.com)
+twitter.com###react-root > div > div > .rn-gvpnoh
+twitter.com##[data-reactroot] > [class] + [class]:last-child
+! twitter.com##.r-13qz1uu.r-tvv088.css-1dbjc4n
+twitter.com##.css-1dbjc4n.r-12vffkv > .r-12vffkv > .css-1dbjc4n[data-testid="BottomBar"] > .css-1dbjc4n.r-1awozwy.r-1sw30gj.r-15ce4ve
+twitter.com##.r-13qz1uu.r-1f1sjgu.r-ymttw5.r-1d7fvdj.r-18u37iz.r-15ce4ve.r-1sw30gj.r-1awozwy.css-1dbjc4n
+twitter.com##.r-13qz1uu.r-1f1sjgu.r-ymttw5.r-1d7fvdj.r-18u37iz.r-9hvr93.r-1m3jxhj.r-1awozwy.css-1dbjc4n
+twitter.com##.r-13qz1uu.r-tvv088.r-d9fdf6.r-1d7fvdj.r-18u37iz.r-1upvrn0.r-1m3jxhj.r-1awozwy.css-1dbjc4n
+twitter.com##.r-13qz1uu.r-tvv088.r-d9fdf6.r-1d7fvdj.r-18u37iz.r-qo02w8.r-1m3jxhj.r-1awozwy.css-1dbjc4n
+twitter.com##.rn-gvpnoh.rn-eps6nq.rn-13qz1uu
+! Custom Filters
+istockphoto.com#?#.warning:-abp-has([data-cookie-type])
+moebelix.at#?#body > div > div:-abp-has(#jentis_consent)
+play.google.com#?#.gb_g:-abp-contains(cookie)
+sonarhome.pl#?#.fixed:-abp-has(.cookies-scrollbar)
+studocu.com#?#.undefined:-abp-has([data-test-selector="click-the-cookie-banner"])
+yogainternational.com#?#div[class^="elements__Banner-"]:-abp-has(> div > a[href$="-privacy-policy"])
+! googlefunding consent warning
+##div[style*="box-shadow: rgb(136, 136, 136) 0px 0px 12px; color: "]
+! medium blogs
+blog.discord.com,codeburst.io,eand.co,infosecwriteups.com,medium.com,medium.engineering,netflixtechblog.com,plainenglish.io,primegaming.blog,towardsdatascience.com,uxdesign.cc,windscribe.com#?#body > div:not([class]):not([id]) > div[class*=" "]:-abp-has(> div > div > div[class] > a[href^="https://policy.medium.com/medium-privacy-policy-"])
+blog.discord.com,codeburst.io,eand.co,infosecwriteups.com,medium.com,medium.engineering,netflixtechblog.com,plainenglish.io,primegaming.blog,towardsdatascience.com,uxdesign.cc,windscribe.com#?#div:-abp-has(div[role='alert'] > a[href^="https://policy.medium.com/medium-privacy-policy-"])
+! Used with generichide
+guicheweb.com.br,mercadolibre.com###alert_cookie
+msi.com###ccc
+thefreedictionary.com###cmpBanner
+support.github.com###consent-banner
+google.ae,google.at,google.be,google.bg,google.by,google.ca,google.ch,google.cl,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.nz,google.co.th,google.co.uk,google.co.ve,google.co.za,google.com,google.com.ar,google.com.au,google.com.br,google.com.co,google.com.ec,google.com.eg,google.com.hk,google.com.mx,google.com.my,google.com.pe,google.com.ph,google.com.pk,google.com.py,google.com.sa,google.com.sg,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vn,google.cz,google.de,google.dk,google.dz,google.ee,google.es,google.fi,google.fr,google.gr,google.hr,google.hu,google.ie,google.it,google.lt,google.lv,google.nl,google.no,google.pl,google.pt,google.ro,google.rs,google.ru,google.se,google.sk###consent-bump
+smallseotools.com###cookie-bar
+netflix.com###cookie-disclosure
+whatsapp.com###cookie-policy-banner
+seopolarity.com###cookieAlert
+flightaware.com###cookieDisclaimerContainer
+duplichecker.com###cookie_directive_container
+depositfiles.com,dfiles.eu,dfiles.ru###cookie_popup
+adblockplus.org###cookiebar
+tweaktown.com###cookies_footer_sec
+easyjet.com,experian.co.uk,postoffice.co.uk###ensNotifyBanner
+reddit.com###eu-cookie-policy
+next-episode.net###eu_cookies_disclaimer
+up-load.io###gdpr-cookie-notice
+support.arcgames.com###gdpr-wall
+hindustantimes.com###gdprpopup
+tf1.fr###tc-privacy-wrapper
+shirtsofcotton.com###udtDark
+bild.de,welt.de##.as-oil
+hiltonheadisland.org##.c-site-alerts
+icq.com##.ca_wrap
+flattr.com,thebarchive.com##.cc_banner
+indiatimes.com##.consent-popup
+tidal.com##.cookie-info
+basemark.com##.cookie-law
+enfsolar.com##.cookie-policy-banner
+allmusic.com##.cookie-policy-box
+xfreehd.com##.cookieAcceptBox
+msn.com##.cookieBanner
+elamigosedition.com##.cookiePolicyBBottom
+sarenza.de##.cookies-band-overlay
+ajinomoto.co.jp,meteoblue.com,wsj.com##.gdpr-message
+github.com##.hx_cookie-banner
+ivi.tv##.lowest-teaser
+mgtv.com##.m-agreement
+symbolab.com##.nl-cookiepolicy
+rp-online.de##.park-snackbar-cookies
+alabama.travel##.privacy-wrapper
+material.angular.io##app-cookie-popup
+tumblr.com##div#cmp-app-container
+tiktok.com##tiktok-cookie-banner
+! Multi-national sites
+globalblue.com,globalblue.ru##.gbnew-cookie-bar
+! Include ubO specific
+
+
+! *** easylist:easylist_cookie/easylist_cookie_specific_uBO.txt ***
+||clickio.mgr.consensu.org^$script,redirect-rule=noop.js,domain=mdn.lol
+! :style fixes
+gsk-gebro.at,voltadol.at###app:style(overflow: auto !important;)
+mtvuutiset.fi###onetrust-consent-sdk:style(display: none)
+intersport.es,intersport.nl###wrapper:style(overflow: auto !important;)
+mtvuutiset.fi##.container:has(.consent-blocking-embed-message) ~ #onetrust-consent-sdk:style(display: block !important)
+mega.io,mega.nz##.cookie-dialog.mega-dialog
+mega.io,mega.nz##.fm-dialog-overlay
+wetter.at##.full.blured:style(filter: none !important;)
+voas.fi##body:style(position: static !important)
+bosch-easycontrol.com##.modal-open:style(overflow: auto !important; padding-right: 0 !important;)
+mega.io,mega.nz##.overlayed .bottom-page.scroll-block:style(filter: none !important; -webkit-filter: none !important)
+gesund24.at,oe24.at,wirkochen.at##.wrapper.blured:style(filter: none !important;)
+merkur.dk,beststartup.eu,gislaved-banden.be,gislaved.es,gislaveddack.se,gislaved-tires.nl,gislaved.ca,gislaved-banden.be,gislaved-tyres.com,apk-vk.at,deichmann.com,vanharen.nl,grueneerde.com,cdu-fraktion.berlin.de,e-wie-einfach.de,hl.co.uk,kupplung.de,markets.com,mulders-opel.nl,nerim.com,nmhh.hu,researchaffiliates.com,sparkasse.at,tf1.fr,wgv.de,zdf.de,zsgarwolin.pl##body,html:style(height: auto !important; overflow: auto !important)
+fletcherlandgoedhotelrenesse.nl,ubaldi.com,pirelli.com,inkasso.de,diners.hr,gibson.com,prenatal.nl,springfarma.com,saturn.de,malmoopera.se,swedbankrobur.se,slow-cosmetique.com,tartanblanketco.com,witway.nl,mediamarkt.at,mediamarkt.de,mediamarkt.es,mediamarkt.nl,mediaworld.it,pc-canada.com,adiva.hr,roborock.com,baniwak.com,hallmark.co.uk,wko.at,gemini.pl,weba.be,dozapteka.pl,doz.pl,iskon.hr,hucoco.fr,pqs.app,effector.pl,zikodermo.pl,allecco.pl,villagrancanaria.com,ktchng.com,igra.evroopt.by,hitdiscount.by,mercedes-benz.cr,rexbo.de,napojecerveny.cz,modibodi.co.uk,theodorkoernerfonds.at,bueromoebel-experte.de,atu.de,burgia.de,beobank.be,sap-press.com,kaputt.de,regenwald-schuetzen.org,musicboard.app,tensar.co.uk,inmocion.pt,flos.com,dockin.de,nalewkababuni.pl,analyticsindiamag.com,atalmedial.nl,nobbot.com,cowaymega.ca,pcgamer.com,mp.cz,spar.hu,universcine.com,toshiba-aircondition.com,xhamster.com,md-store.de,matador.tires,pillowfort.social,goteborg2023.com,transip.eu,comwales.com,tedbaker.com,parkem.co.uk,finlayson.fi,aabeam.co.uk,podcast.hu,g21-vitality.cz,holidayhypermarket.co.uk,opendigitalservices.com,fortuneo.fr,kika.ee,kika.lt,maif.fr,share-your-photo.com,halebop.se,jbf.no,vinusta.com,suzuki.de,but.fr,malaikaraiss.com,lbms.cz,tedbaker.com,flying15.org.uk,mejorconsalud.as.com,wohlleben-sports.de,louwman.nl,consorsbank.de,all4running.be,all4running.nl,zuerilaufcup.ch,bokio.se,alpinloacker.com,ladyzone.bg,btvplus.bg,businessnovinite.bg,btvsport.bg,btvnovinite.bg,nordfishing77.at,baaam.se,rog-forum.asus.com,seneca.juntadeandalucia.es,earlystage.pl,visitgreengoods.com,silbonshop.com,e-zikoapteka.pl,redo.si,kamdi24.de,blogs.pcsoft.fr,itprofessionalism.org,jobcenter-ge.de,renault-hoffmann-niedernhausen.de,ing.es,sweatybetty.com,espaces-atypiques.com,crisismagazine.com,cinemas-lumiere.com,eurowings.com,newsday.com,ofaj.org,cdiscount.com,aldi.us,rastreator.com,portalprzedszkolny.pl,bere.co.uk,here.com,msds.open.ac.uk,tavid.ee,papalencyclicals.net,te.com,belcolade.com,sgbdigital.de,kektura.hu,kefalonia-griechenland.com,galadurham.co.uk,imagelinenetwork.com,wide-angle.nl,becombi.com,profilemagazine.com,optimocard.ro,faszination-tauchsport.de,kite-team.de,afrikahandel.de,cgwisdom.pl,hainaut-caravaning.be,futterfleisch24.de,crediteurope.ro,kolbe.de,hsk-handel.de,thepensionsregulator.gov.uk,throttleman.com,lanidor.com,dajanarodriguez.cz,krampouz.com,plassenburg.de,stadtwerke-weilburg.de,guide-du-perigord.com,sanidirect.nl,bossy.it,mojanorwegia.pl,protein-projekt.de,byseum.de,danbolig.dk,aknw.de,cesky-sport.cz,getaround.com,epenta.sk,gdpr.se,theweather.net,meteoblue.com,ziegert-group.com,rapidonline.com,marianne.net,pszow.pl,artejanatvalbadia.it,erstecardclub.hr,sparkassenverband.at,elpicazo.org,varaderey.es,productosmanchegos.es,whatuni.com,intergastro.ch,intergastro.de,intergastro.com,intergastro.at,lemke.de,porho.fi,pushchairexpert.com,vanvoordenalmere.nl,opel-hekkert.nl,juurlink.nl,opelrentenaar.nl,opc-opel.nl,burgauto.nl,smits-autos.nl,opelvannunen.nl,autobedrijf-boskamp.nl,bergsteyn.nl,broekhuis-opel.nl,vandertholen.nl,autojetten.nl,tpsgarage.com,liewesroden-opel.nl,nemck.cz,flyuia.com,miceportal.com,church-footwear.com,teplickedorty.cz,akumo.cz,cspoa.org,edge1s.com,sooco.nl,esaa-eu.org,salzer.at,statech.com.pl,statech.cz,statech.ro,stadtwerke-bonn.de,statech.hu,renault-beier.de,capristores.gr,pullman-barcelona-skipper.com,grandmercurephuketpatong.com,strmix.com,pullman-dubai-creek-citycentre.com,movenpickresortwaverlyphuquoc.com,premierresidencesphuquoc.com,swissotelthebosphorus.com,novotelkolkata.com,mercuredubaihotel.com,pullman-mandelieu.com,newerapub.com,autohillen.nl,autohuisdelfzijl.nl,transgourmet.de,open24.ee,livoo.fr,era.be,cellini.co.id,gerth.de,aldi-blumen.de,lexibo.com,erlus.com,giga-hamburg.de,webfleet.com,readspeaker.com,dehogerielen.be,strumentimusicali.net,klarta.pl,ddg.info,hemden-meister.de,tgsoft.it,polskieradio.pl,validoo.se,fijiairways.com,medplus24.de,ebilet.pl,radioapp.lv,papierkram.de,lotto.pl,happypenguin.altervista.org,stofkiosken.dk,ccoo.es,sekisuialveo.com,swissboardforum.ch,psmw.de,reformasurgull.com,bitburger.com,dojusagro.lt,dirk.nl,dojuslatvija.lv,bitburger.de,bueffelbill.com,marin-milou.com,sammlershop24.de,sportsdome24.de,kunsthauswien.com,szef-sprzedazy.pl,as-sprzedazy.pl,e-commerce-24.pl,bettersafe.at,petiteamelie.fr,behaviourchangeagency.com,femibion.rs,petiteamelie.com,petiteamelie.nl,petiteamelie.de,petiteamelie.co.uk,petiteamelie.be,informacjazarzadcza.pl,bioquelle.at,cursoemvideo.com,africatours.dk,barnardos.org.uk,incorez.com,segro.com,collinsaerospace.com,igeacps.it,cowaymega.com,johannische-kirche.org,toyotabank.pl,team.blue,vanmoer.com,centrumrowerowe.pl,zurueckzumursprung.at,apedys.org,aaron.ai,solidus-solutions.com,audioteka.com,labiosthetique.pl,labiosthetique.nl,labiosthetique.dk,labiosthetique.it,labiosthetique.at,labiosthetique.com,labiosthetique.de,daa-sh.de,labiosthetique.es,labiosthetique.fr,labiosthetique.ch,thebathcollection.com,springmerchant.com,valadie-immobilier.com,wassererleben.ch,garante.es,elliottwave-forecast.com,penta.cz,lamborghini.com,statik.be,credit-cooperatif.coop,avantiwestcoast.co.uk,motorradonline.de,otoprzychodnie.pl,renzgroup.de,renzgroup.uk,renzgroup.fr,intex.fr,fixtout.fr,car-interface.com,casper.network,centrum.sk,malijunaki.si,trivago.co.uk,miumiu.com,clickdoc.fr,alma.be,developer.nintendo.com,ajanvaraus.veripalvelu.fi,fello.se,vivawest.de,niko.eu,takarekbank.hu,takareklizing.hu,takarekbank.hu,tissus.net,smartsavebank.co.uk,millenniumprize.org,3r-ambiental.com.br,meinspielplan.de,koleso-gizni.com.ua,hepster.com,pointomega.de,pcmweb.nl,tattoo-equipment.eu,uhrzeit123.de,sbk.org,peterstaler.de,die-badgestalter.de,produx.ch,blackforest-still.de,forosupercontable.com,novasep.com,mobacoffee.de,parcours-formations.fr,europemetalfil.fr,debatpublic.fr,institutfrancais.com,frischeparadies.de,smileypack.de,1xinternet.de,dpfdirekt.de,fruchthof.at,guerande-cosmetics.com,inmobiliariacanalejas.com,salusinv.es,aiconsultores.com,wobit.com.pl,essence.com,moellegaarden.dk,silkeborgcaravancenter.dk,e-kruk.pl,kg-camping.dk,bronderslevcaravan.dk,kais-caravan.dk,antonscamping.dk,le-camping.dk,dancamper.dk,camping-specialisten.dk,finom.co,vattenfall.com,dosenbach.ch,haddonstone.com,paqui.com,bnet-internet.cz,zanidakis.gr,reschimica.com,backedbybayer.com,monolithdesign.it,viknanovi.ua,petit-bateau.gr,haineshop.ro,zapanines.es,sklep-szachy.pl,alfalabsystem.eu,franc-music-shop.com,spelspul.nl,isstbn.cz,emax-haustechnik.de,alumniportal-deutschland.org,trackbikes.com.br,topsolid.es,orange.es,lilliputpress.ie,chilledpackaging.co.uk,handypark.de,skousen.no,2move.dk,beaconhospital.ie,medimax.de,went.at,libelium.com,elavon.pl,artforum.sk,motoblouz.es,mexiconewsdaily.com,paulandshark.com,motoblouz.com,mdu.se,overclockers.co.uk,mcrent.eu,dibaq.com,piron.it,amitek.it,telia.lv,delaware.pro,delaware.co.uk,delaware.cn,delawareconsulting.com,fitplus.is,ibistallinncenter.ee,bnn.de,danline.dk,beko.com,ak-asya.com.tr,notarisvrancken.be,unicredit.it,apogeeagency.com,sanluisgarbage.com,printsimple.eu,springpool.de,metroag.de,capitatranslationinterpreting.com,budaimaganrendelo.hu,louisedamas.fr,freshservices.cz,eci.ie,bergslagenssparbank.se,raypa.com,cbs.dk,elavon.co.uk,gamepro.de,credit-suisse.com,idoc.eu,aurumcars.de,iberostar.com,maximehotellisbon.com,radissonhotels.com,realhotelsgroup.com,shopstyle.co.uk,cancercentrum.se,dagvandewetenschap.be,hotelsbarriere.com,kruk.eu,louisvuitton.com,nsinternational.com,pronovabkk.de,reidl.de,steinmetz-baldauf.de,techopital.com,ticsante.com,tuttitalia.it,lidentitenumerique.laposte.fr,meinbildkalender.de##body,html:style(overflow: auto !important; position: initial !important;)
+germany.travel##body.consent-overlay:style(overflow:auto !important)
+analog.com,zeoob.com##body.modal-open:style(overflow:auto !important)
+bbc.com##body:has(div[class*="Styled"][class*="Container"] [data-testid="bbc-logo-wrapper"]) > .fc-consent-root:style(display: flex !important)
+html5games.com##div[class="app-container"]:style(filter:none !important;opacity:1 !important)
+initse.com,microlinkpc.com,cashper.fr,mailhilfe.de,lesfruitsetlegumesfrais.com,abt-sportsline.de,otpbank.ro,1blu.de,argenta.be,asseco.com,case-score.com,cornelsen.de,dnbeiendom.no,esprit.de,gesundheit-nordhessen.de,hillreporter.com,interfriendship.at,interfriendship.ch,interfriendship.com,interfriendship.de,iracing.com,kh.hu,marbles.com,nerdstar.tv,noriel.ro,o2.fr,okazik.pl,openfoam.org,openreach.com,pamiatki.pl,pressherald.com,qioz.fr,rocket-league.com,sajt-znakomstv-interfriendship.ru,savoriurbane.com,sufilog.com,svenskakyrkan.se,techbone.de,techmot24.pl,technikmuseum.berlin,ultraleicht-trekking.com,viennahouse.com,we-worldwide.com,western-men.com,wins.pl,uvex-safety-shop.de##html:style(overflow: auto !important)
+townsmith.de,riverisland.com##html:style(position: static !important; overflow: auto !important; width: auto !important;)
+! ##*:style(filter: none !important)
+albeco.com.pl,amzs.si,bandenexpert.be,bosch-connected-world.com,bosch-easycontrol.com,bosch-ebike.com,bosch-home.at,bosch-home.be,bosch-home.bg,bosch-home.co.uk,bosch-home.com,bosch-home.com.tr,bosch-home.dk,bosch-home.ee,bosch-home.es,bosch-home.fi,bosch-home.fr,bosch-home.gr,bosch-home.ie,bosch-home.lt,bosch-home.lu,bosch-home.lv,bosch-home.nl,bosch-home.no,bosch-home.pl,bosch-home.pt,bosch-home.ro,bosch-home.rs,bosch-home.ru,bosch-home.se,bosch-home.si,bosch-iot-suite.com,bosch-thermotechnology.com,bosch.io,boschautomotiveservicesolutions.com,boschblog.hu,boschwiperblades.com,bsh-group.com,carefully.be,cellardoor.co,dansaccent.be,de-de.eundl.de,deineapotheke.at,delo.si,droptica.com,droptica.pl,eenendaal.nl,elmleblanc-optibox.fr,elring.ae,elring.cn,elring.com,elring.com.tr,elring.de,elring.fr,elring.it,elring.pl,elring.pt,elring.ru,epilog.net,equi-elite.com,eurosupps.nl,exakta.se,exaktacreative.se,exaktasoftware.se,frankenbrunnen.de,g-star.com,gamersgate.com,gramatica-alemana.es,gsk-gebro.at,harry-gerlach.de,heinz.st,hetwkz.nl,home-connect.com,icscards.nl,immohal.de,internetlekarna.cz,jobs2work.be,jobs2work.nl,kiron.ngo,kozijnen-hijnekamp.nl,lekarenvkocke.sk,lekarna-bella.cz,lekarna-oaza.cz,lekarnalemon.cz,lekarnasvjosefa.cz,leoni.com,leoni.ro,lowrider.at,lsi-bochum.de,magdeleyns.be,mbusassep.com,memo-book.pl,mesto.de,miethke.com,mikrocop.com,mobile-fueling.de,monservicechauffage.fr,myschlossberg.com,nalewkababuni.pl,neff-home.com,neff.ru,nissantechmate.com,omniwood.be,ostrzegamy.online,pin-freunde.de,polarisdealersolutions.com,profilo.com,qinetiq.com,random-group.olafneumann.org,recallinformatica.com.br,rexrothonair.com,rodekruis.be,rule34.paheal.net,sandboxservices.be,schulze-immobilien.de,share-your-photo.com,skb-leasing.si,slimbee.cz,sr-ramenendeuren.be,stoertebeker-brauquartier.com,stoertebeker-eph.com,stoertebeker.com,subaruretailersolutions.com,taschenhirn.de,topographic-map.com,truphone.com,uhrzeit123.de,umcutrecht.nl,unileverfoodsolutionslatam.com,veiligverkeer.be,verumvinum.se,voltadol.at,voordeeluitjes.nl,vorteile.net,vsv.be,womex.com,workshopsveiligverkeer.be,worldcard.n##*:style(filter: none !important)
+! ##*:style(opacity: 1 !important;)
+gramatica-alemana.es,forosupercontable.com,kosta.at,qinetiq.com,moteurnature.com##*:style(opacity: 1 !important;)
+! ##body,html:style(position: unset !important)
+daswetter.at,diners.hr,pogoda.com,meteored.cl,tameteo.com,tempo.pt,meteored.com.ar,meteored.mx,tempo.com,daswetter.com,ilmeteo.net,yourweather.co.uk,tiempo.com,airam.fi,sparda-a.de,sparda-ostbayern.de,sparda-bw.de,sparda-hessen.de,sparda-n.de,sparda-m.de,sparda-west.de,sparda.de,dws.com,mulders-opel.nl##body,html:style(position: unset !important)
+! ##body:style(overflow: scroll !important)
+uva.nl,deutschebank-dbdirect.com,hipotecaonline.db.com,kubikum.com,okazii.ro,terveyskirjasto.fi##body:style(overflow: scroll !important)
+! ##body:style(overflow: auto !important;)
+anwb.nl,craftserve.pl,comune.palermo.it,abconcerts.be,adidas.at,adidas.be,adidas.ca,adidas.ch,adidas.cl,adidas.co,adidas.co.in,adidas.co.kr,adidas.co.nz,adidas.co.th,adidas.co.uk,adidas.com,adidas.com.ar,adidas.com.au,adidas.com.br,adidas.com.my,adidas.com.ph,adidas.com.vn,adidas.cz,adidas.de,adidas.dk,adidas.es,adidas.fi,adidas.fr,adidas.gr,adidas.ie,adidas.it,adidas.mx,adidas.nl,adidas.no,adidas.pe,adidas.pl,adidas.pt,adidas.ru,adidas.se,adidas.sk,aerotime.aero,akku-shop.nl,akkushop-austria.at,akkushop-b2b.de,akkushop-schweiz.ch,akkushop-turkiye.com.tr,akkushop.de,akkushop.dk,allegro.cz,allegro.pl,allegrolokalnie.pl,amd-moebel.de,anadibank.com,anderleven.nl,animail.se,aok.de,arbeitsagentur.de,arkenzoo.se,atomichub.io,aubi-plus.de,autoersatzteile.de,automathoogeveen.nl,autonet.ro,back2front.be,backmarket.at,backmarket.be,backmarket.co.uk,backmarket.com,backmarket.de,backmarket.es,backmarket.fi,backmarket.fr,backmarket.gr,backmarket.ie,backmarket.it,backmarket.pt,backmarket.se,backmarket.sk,bajapress.com,batterie-boutique.fr,bbc.com,becker-antriebe.shop,bimedis.com,bing.com,bioplanete.com,bitbrain.com,bloosz.nl,bluelightcard.co.uk,boohoo.com,borgch.nl,bosch-home.at,bosch-home.be,bosch-home.bg,bosch-home.co.uk,bosch-home.com,bosch-home.com.tr,bosch-home.dk,bosch-home.ee,bosch-home.es,bosch-home.fi,bosch-home.fr,bosch-home.gr,bosch-home.ie,bosch-home.lt,bosch-home.lu,bosch-home.lv,bosch-home.nl,bosch-home.no,bosch-home.pl,bosch-home.pt,bosch-home.ro,bosch-home.rs,bosch-home.ru,bosch-home.se,bosch-home.si,boschwiperblades.com,brabus.com,bremerhaven.de,bsh-group.com,cadcompany.nl,calvinklein.at,calvinklein.be,calvinklein.bg,calvinklein.ch,calvinklein.co.uk,calvinklein.com,calvinklein.cz,calvinklein.de,calvinklein.dk,calvinklein.ee,calvinklein.es,calvinklein.fi,calvinklein.fr,calvinklein.hr,calvinklein.hu,calvinklein.ie,calvinklein.it,calvinklein.lt,calvinklein.lu,calvinklein.lv,calvinklein.nl,calvinklein.pl,calvinklein.pt,calvinklein.ru,calvinklein.se,calvinklein.si,calvinklein.sk,capaciteitentestoefenen.com,cbp4you.fr,cexpr.es,cgi.com,choircompany.nl,congresoaep.org,correosexpress.com,coseleurope.eu,creative-looks.nl,czc.cz,dagje-texel.nl,damsgaardscaravancenter.dk,datakauppa.fi,de-de.eundl.de,deutsche-alpenstrasse.de,deutschesapothekenportal.de,dewit-elektro.nl,dnb.no,dragnsurvey.com,drumplezier.nl,dunelm.com,educhel.ru,eduface.ru,edumsko.ru,ellisphere.fr,endgamegear-shop.co.uk,endgamegear.be,endgamegear.ch,endgamegear.com,endgamegear.de,endgamegear.es,endgamegear.fr,endgamegear.lu,endgamegear.nl,endgamegear.pt,enesco.co.uk,enluse.com,eon.pl,erfurter-bahn.de,esv.info,exali.de,fanipogody.pl,fashion-trends.nl,festo.com,fil-luge.org,finantia.com,finantia.es,finnkino.fi,fitx.de,flierefluiterraalte.nl,focusonreproduction.eu,fortressgroup.nl,fransdegrebber.nl,freixenet-onlineshop.de,fussballgucken.info,gamersgate.com,gasterijkruisberg.nl,get-in-engineering.de,gov.lv,hawle.de,heinz.st,hellenicbank.com,hetwkz.nl,home-connect.com,hscollective.org,huispromotie.nl,iclas.org,icould.com,icverpleegkundige.com,improvethenews.org,imoradar24.ro,imu.nl,interestingengineering.com,inwerk.de,ionos.de,ionos.fr,isx.nl,ivaucher.pt,jenrmarketing.nl,kangasalansanomat.fi,keravanenergia.fi,kinky.nl,kitakerjaremote.com,komerso.pl,konstnarsnamnden.se,krungsri.com,kupbilecik.com,kupbilecik.de,kupbilecik.pl,kurierzamojski.pl,lastenbesparen.com,ledlenser.com,lektury.gov.pl,liberbank.es,litebit.eu,lulus.com,manutd.com,masmovil.es,maxi-pet.ro,mcnetiq.nl,mega-image.ro,mehilainen.fi,miltenyibiotec.com,moneyluckfreedom.com,musti.no,mustijamirri.fi,my.acea.it,mycall.no,myfabrics.co.uk,mystats.nl,naamelijk.nl,neff-home.com,neff.ru,neuseeland-haus.de,nickyverbeek.nl,nobilia.de,noblechairs.de,nokia.com,nonsolocap.it,northernpowergrid.com,oddo.fr,oekolandbau.de,ogloszenia.plock.pl,okto.tv,omviajesyrelatos.com,only-fitness.nl,openfoodnetwork.org.uk,otpportalok.hu,outdooractive.com,palladiumboots.de,paruvendu.fr,patient.info,pensjonistforbundet.no,petenkoiratarvike.com,pickup.de,planeo.de,pricerunner.com,pricerunner.dk,pricerunner.se,profilo.com,proteineshakes.nl,pyroweb.de,readly.com,realgap.co.uk,regione.puglia.it,renewal.ru,riga.lv,rocrivor.nl,rodekruis.be,runningheroes.com,schoenherr.eu,schroders.com,schuurman-schoenen.nl,seatgeek.com,senec.com,sentres.com,sevdesk.at,sevdesk.de,shop.halebop.se,shopilya.com,skinnyminds.nl,slankmetlinda.nl,smartphonehoesjes.nl,snp.nl,socialpress.pl,spotlightstores.com,stoffe.de,stromnetz.berlin,stwbs.de,subaruretailersolutions.com,successinsights.nl,swatch.com,swedbank.com,swisscom.ch,t-mobile.com,t-mobile.nl,taschenhirn.de,taxiboeken.be,techbone.net,technotrafficcontrol.nl,tele2.nl,telecomitalia.it,terc.hu,thebackmarket.nl,theblueschronicles.com,thebureauinvestigates.com,thehuddle.nl,thematchahouse.com,tme.eu,tommy.com,toni-maccaroni.de,topannonces.fr,topographic-map.com,toyota.astra.co.id,tyg.se,ufz.de,uktv.co.uk,umcutrecht.nl,understandingsociety.ac.uk,uniroyal.pl,urbanarrow.com,uwfysiotherapeut.com,veiligverkeer.be,vetzoo.no,vetzoo.se,vivamanchester.co.uk,volkswagen-newsroom.com,vsv.be,waitrose.com,warta.pl,wel-com.nl,wentronic.com,wentronic.pl,wesocialmen.com,wikifolio.com,workshopsveiligverkeer.be,wtk.pl,wu.ac.at,wwz.ch,yoigo.com,yvonnebennetti.com,zapatos.es,zwic.nl,kavosdraugas.lt##body:style(overflow: auto !important;)
+##.js-consent.consent
+wtk.pl###GDPR-modal
+mediamarkt.de,saturn.de###__tealiumGDPRecModal > #privacy-layer__wrapper
+techopital.com,ticsante.com###coLab
+smartphonehoesjes.nl###consent
+smartphonehoesjes.nl###consent__overlay
+neuseeland-haus.de###cookie-notice-lightbox-overlay
+esv.info###cookieBannerModal
+aerotime.aero###cookie_settings
+ellisphere.fr###cookies
+interfriendship.at,interfriendship.ch,interfriendship.com,interfriendship.de,sajt-znakomstv-interfriendship.ru,western-men.com###cookies-dlg
+cornelsen.de###cornelsen-consent-manager
+ogloszenia.plock.pl###dialog-rodo
+truphone.com##.z-50.bg-opacity-50
+schroders.com###disclaimerModal
+sparda-a.de,sparda-ostbayern.de,sparda-m.de,sparda-bw.de,sparda-hessen.de,sparda-n.de,sparda-west.de,sparda.de###overlay--modal
+albeco.com.pl###pol-background
+albeco.com.pl###pol-c
+craftserve.pl###rodo
+deutschesapothekenportal.de###staticBackdrop
+deutschesapothekenportal.de###staticBackdropCookiebotLoading
+runningheroes.com##body > div > .css-1dbjc4n
+kinky.nl###termsPopup
+louisvuitton.com###ucm-wrapper
+nonsolocap.it###xk
+deutsche-alpenstrasse.de,fil-luge.org##.CookieBarOuter
+atomichub.io##.CookieModal
+regione.puglia.it##.HCookieBar-Hoverlay
+masmovil.es##.MuiDialog-root
+cbp4you.fr##.Popup
+tommy.com##div[class*="ReactModal__Overlay--cookie"]
+ylasatakunta.fi##.ag_cookie_banner
+noriel.ro##.agreementMessage
+noriel.ro##.agreementOverlay
+snp.nl##.anwbr-cookie-layer
+swatch.com##.b-modal
+swatch.com##.b-modal_overlay
+swisscom.ch##.backdrop
+bluelightcard.co.uk##.blocker
+litebit.eu##.blur-modal
+asseco.com##.body-overlay
+wikifolio.com##.c-modal__container
+lulus.com##.c-sg--disclaimer
+lulus.com##.c-site-overlay
+ceramtec-group.com##.cc-floating.cc-window
+ceramtec-group.com##.cc-window-blocker
+eon.pl##.clb-container
+html5games.com##.consent-box-holder
+dnb.no##.consent-modal-main
+airam.fi##.cookie-consent
+wu.ac.at##.cookie-notice-modal-layer
+varusteleka.com,varusteleka.fi##.cookie_settings_container
+spotlightstores.com##.cookies-popup-wrapper
+manutd.com##.dialog-overlay
+mega-image.ro##.kezQbY
+dnbeiendom.no##.dnb-modal__overlay
+rocrivor.nl##.fancybox-is-open
+toni-maccaroni.de##.fancybox-overlay-fixed
+bbc.com##.fc-consent-root
+cexpr.es,correosexpress.com##.fullscreen-container
+1blu.de##.glightbox-container
+egmont.com##.jOSWZa
+uniroyal.pl##.js-cookie-banner > div
+stackapps.com,askubuntu.com,mathoverflow.net,serverfault.com,stackexchange.com,stackoverflow.com,superuser.com##.js-consent-banner
+focusonreproduction.eu##.jss151
+focusonreproduction.eu##.jss156
+e-wie-einfach.de##.js_modal_cookie
+hetwkz.nl,umcutrecht.nl##.menu-wrapper
+okazik.pl,savoriurbane.com,techmot24.pl,zsgarwolin.pl##.mfp-ready
+autonet.ro,dragnsurvey.com,litebit.eu,warta.pl##.modal
+mycall.no##.modal--consent
+finantia.com,finantia.es##.modal-back
+enesco.co.uk,aerotime.aero,amd-moebel.de,analog.com,atomichub.io,aubi-plus.de,autonet.ro,bosch-easycontrol.com,brabus.com,bremerhaven.de,cancercentrum.se,case-score.com,coseleurope.eu,craftserve.pl,deutschesapothekenportal.de,dragnsurvey.com,e-wie-einfach.de,erfurter-bahn.de,esprit.de,esv.info,exali.de,imoradar24.ro,interestingengineering.com,ivaucher.pt,krungsri.com,ledlenser.com,lektury.gov.pl,miltenyibiotec.com,my.acea.it,mycall.no,nobilia.de,o2.fr,ogloszenia.plock.pl,okto.tv,podleze-piekielko.pl,schroders.com,spotlightstores.com,steinmetz-baldauf.de,t-mobile.com,t-mobile.nl,techbone.de,techbone.net,tele2.nl,telecomitalia.it,warta.pl,we-worldwide.com,wins.pl,wtk.pl,zeoob.com,otpbank.ro,anadibank.com,urbanarrow.com,becker-antriebe.shop,uvex-safety-shop.de,oddo.fr,schoenherr.eu,hawle.de,vandemoortel.de,bodensee-airport.eu##.modal-backdrop
+bitbrain.com##.eu-cookie-compliance-banner-wrapper
+iracing.com##.modal-background
+cancercentrum.se##.modal-dialog
+bioplanete.com,inwerk.de##.modal-overlay
+tme.eu##.o-modal-wrapper
+outdooractive.com,sentres.com##.oax_cookie_consent_modal
+marbles.com##.obcc
+otpportalok.hu##.pop_up_bg
+ionos.fr,ionos.de##.privacy-consent--backdrop
+ionos.fr,ionos.de##.privacy-consent--modal
+myabandonware.com##.qc-cmp2-container
+openfoodnetwork.org.uk##.reveal-modal-bg
+pronovabkk.de,reidl.de##.reveal-overlay
+imoradar24.ro##.show.modal-cookies
+pensjonistforbundet.no##.styles_show__1NqdZ
+pringles.com##.truste_box_overlay
+pringles.com##.truste_overlay
+intersport.es,kh.hu,nerim.com##.ui-widget-overlay
+verkkokauppa.com##.vk-cookie-notification
+harry-gerlach.de,schulze-immobilien.de##.wrap__cookie
+eduface.ru,edumsko.ru##.wrap_cookies_popup
+fantasyfootballgeek.co.uk##.wt-cli-cookie-bar
+voas.fi##[class="modal-coockie"]
+voas.fi##[id="coockie-modal"]
+datakauppa.fi##[id="cookie-law-info-bar"]
+mehilainen.fi##div[class*="HaluammePalvellaSinuaParemmin__ConsentDialog"]
+festo.com##div[class^="overlay--"]
+terveyskirjasto.fi##div[id^="general-cookies-modal"]
+minhaconexao.com.br##section[id][class]:has(:scope > div[class] > button[class][onclick^="onClickCookiesBannerWeb"])
+yoigo.com##thor-cookies
+! scripts
+ubuntu.com##+js(aeld, DOMContentLoaded, js-revoke-cookie-manager)
+finna.fi##+js(aeld, load, consentDialog)
+spotify.com##div > div[aria-live="polite"]:not([data-testid="top-result-card"])
+al.com,allkpop.com,calendarpedia.co.uk,ccn.com,cinemablend.com,cleveland.com,comicsands.com,duffelblog.com,foxvalleyfoodie.com,gamepur.com,gamerevolution.com,interestingengineering.com,keengamer.com,listenonrepeat.com,mandatory.com,merriam-webster.com,mlive.com,musicfeeds.com.au,newatlas.com,pgatour.com,playstationlifestyle.net,readlightnovel.org,secondnexus.com,sevenforums.com,sport24.co.za,sportsnaut.com,superherohype.com,thefashionspot.com,theodysseyonline.com,toledoblade.com,totalbeauty.com,westernjournal.com,windows101tricks.com##+js(aopr, __cmpGdprAppliesGlobally)
+claritin.ca##+js(aopr, cookieconsent.Popup)
+podleze-piekielko.pl##+js(aopr, cookieman)
+sss.fi##+js(aeld, load, function(){if(s.readyState==XMLHttpRequest.DONE)
+elgiganten.dk,elgiganten.se,elkjop.no,gigantti.fi##+js(set, cicc.cookie_cat_statistic, true)
+fruugo.at,fruugo.be,fruugo.cz,fruugo.de,fruugo.dk,fruugo.es,fruugo.fi,fruugo.gr,fruugo.hu,fruugo.ie,fruugo.it,fruugo.lu,fruugo.nl,fruugo.pl,fruugo.pt,fruugo.ro,fruugo.sk##+js(set, window.consentManagementEnabled, false)
+! Generichide fixes
+terravision.eu###catapult-cookie-bar
+queer.pl##.box-rodo
+imagia.ro##.gdpr-privacy-bar
+enen.eu##.popup-display
+7r6.com###banner-cookie
+de-baystars.doorblog.jp,ebay.es,ebay.co.uk,ebay.de,ebay.nl,ebay.it,ebay.pl,ebay.at,ebay.fr,ebay.com###gdpr-banner
+lumiafirmware.com###cookiesdirective
+nvidia.com###cookiePolicy-layer
+aa.com.tr###cookiepolicy
+pukarags.lv##.cookieControl
+koswhitepearls.gr##.cookieslaw
+radissonhotels.com##.overlaycookieconsent
+radissonhotels.com###__tealiumGDPRecModal
+piadinalumbro.gr##.cookie-message
+ft.com##.o-cookie-message
+onlyfans.com##.b-cookies-informer
+github.io,stadium.fi###cookie-bar
+dogemate.com###cconsent-bar
+europa.eu###cookie-consent-banner
+analog.com###cookie-consent-container.modal
+iseic.cz,epag.de,steelprofi.lv,polygon.pt,sportslegend.us,tcbc.us###cookie-law-info-bar
+chelseafc.com,kabum.com.br,fundacaolacaixa.pt,discord.com,attica-group.gr,uefa.com,coca-cola.se,coca-cola.be,coca-cola.no,cocacolanederland.nl,cocacolaep.com,pocketbook.de,cnn.com,blaklader.se,klimatechniker.net,eternit.co.uk,autocar.co.uk,cbre.fi,rexel.com,bab.la,wella.ru,geizhals.de,tripsavvy.com###onetrust-banner-sdk
+nhl.com,chelseafc.com,kabum.com.br,fundacaolacaixa.pt,discord.com,attica-group.gr,uefa.com,coca-cola.se,coca-cola.be,coca-cola.no,cocacolanederland.nl,cocacolaep.com,pocketbook.de,cnn.com,blaklader.se,klimatechniker.net,eternit.co.uk,autocar.co.uk,cbre.fi,rexel.com,bab.la,wella.ru,geizhals.de,tripsavvy.com###onetrust-consent-sdk
+patient.info###cookie-policy
+patient.info###cookie-policy-overlay
+ideait.ru###cookie_notification
+7r6.com,coinlyhub.com,fox-url.com,jwearn.com,linksly.co,mitly.us,ouofly.com###cookie-pop
+hl-live.de##.cookieconsent
+nyaa.net###cookie-warning
+key-hub.eu###cookieBanner
+bosch-easycontrol.com###cookielaw
+zeoob.com###cookies_modal
+nekomeowmeow.com###eu-cookie-law
+germany.travel##.consent
+experian.com.se##.cookieMessage
+litecompare.com##.cookie-revoke-hidden
+hexagame.io##.cookieWarning
+chelseafc.com##.cookies-message
+gesund24.at##.cookiesOverlay2
+oe24.at,wetter.at,wirkochen.at##.cookiesOverlay2Box
+cruisin.me,fraudstercrew.su,ignboards.com,memoryhackers.org##.notice--cookie
+roboticsandautomationnews.com##.pea_cook_wrapper
+arcadepunks.com##.penci-wrap-gprd-law
+westergaard.eu##.widget_eu_cookie_law_widget
+pressherald.com##.pum[data-popmake*="cookies"]
+publico.pt##.site-message--cookies
+games.dailymail.co.uk##[class^="CookieBanner"]
+arkadium.com##[class^="CookieMessage"]
+viget.com##[class^="gpdr-banner__"]
+seatgeek.com##[class^="withGDPRBanner__Wrapper-"]
+yourstorebox.com##.layout > .react-cookie-law-dialog
+! removeattr
+statik.be##+js(ra, inert, #mainContentBlock, stay)
+! removeclass
+winparts.be,winparts.eu,winparts.fr,winparts.ie,winparts.nl,winparts.se##+js(rc, cookie-consent-active, body, stay)
+sportano.sk,sportano.de,sportano.bg,sportano.hu,sportano.ro,sportano.cz##+js(rc, cookie-overlay-active, body, stay)
+klinik-am-ring.de##+js(rc, cookiebanner-body, body, stay)
+idg.se##+js(rc, idgcp__layer--active, html, stay)
+buildex.cz##+js(rc, modal-open, body, stay)
+gruenderservice.at##+js(rc, hasPopup, body, stay)
+caiacosmetics.com##+js(rc, darker, body, stay)
+pdc-big.nl,pdc-big.it,pdc-big.ie,pdc-big.fr,pdc-big.es,pdc-big.be,pdc-big.at,pdc-big.co.uk,pdc-big.de,pdc-big.com##+js(rc, scommerce-gdpr-disabled, div, stay)
+elio-systems.io,sanha.com##+js(rc, no-scroll, html, stay)
+recettesetcabas.com##+js(rc, compensate-for-scrollbar, body, stay)
+flinders.edu.au##+js(rc, gdpr-shown, body, stay)
+opera.com##+js(rc, cookie-consent__wrapper, div, stay)
+groningenairport.nl##+js(rc, cookies-request, body, stay)
+crocs.co.uk,crocs.eu,crocs.nl,crocs.fi,crocs.fr,crocs.de##+js(rc, cx-modal-open, html, stay)
+crocs.co.uk,crocs.eu,crocs.nl,crocs.fi,crocs.fr,crocs.de##+js(rc, cx-no-scroll, html, stay)
+elio-systems.io,sanha.com##+js(rc, e-cookie-bar-open, body, stay)
+rappjmed.ch##+js(rc, cookies-not-set, body, stay)
+stilord.fr,stilord.it,stilord.de,stilord.es##+js(remove-class, no-consent, html, stay)
+dasfutterhaus.at##+js(rc, is-blurred-cookiebox, html, stay)
+developer.paypal.com##+js(rc, ccpaCookieBanner-acceptedAll, body, stay)
+cpc2r.ch##+js(rc, cookies-show, .cookies-show, stay)
+zen.com##+js(rc, disable-background, body, stay)
+tecsafe.de,foxracingshox.de##+js(rc, cookie--not-set, body, stay)
+stromnetz.berlin##+js(rc, _cookiebanner, body, stay)
+websummit.com,thehustle.co##+js(rc, async-hide, html, stay)
+epochtimes.fr##+js(rc, ntd-gdpr-no-scroll, body, stay)
+ajbell.co.uk##+js(rc, modal-background, div, stay)
+economiapertutti.bancaditalia.it##+js(rc, pef-no-cookie, body, stay)
+quantamagazine.org,tradersunion.com##+js(rc, cookie-not-accepted, body, stay)
+phsgreenleaf.co.uk,phswashrooms.ie##+js(rc, c-body--locked-always, body, stay)
+mccolls.co.uk##+js(rc, global-cookie, div, stay)
+mccolls.co.uk##+js(rc, disable-scroll, , stay)
+crt.hr##+js(rc, bg-gray, div, stay)
+yourstorebox.com##+js(rc, cookie-active, body, stay)
+clickskeks.at##+js(rc, ccm-blocked, html, stay)
+clickskeks.at##+js(rc, ccm-blocked, body, stay)
+housell.com##+js(rc, is-modal-cookies-visible, body, stay)
+lactostop.de##+js(rc, layerActive, ,stay)
+spilger.de##+js(rc, cookiebar-open, body, stay)
+dbs.si##+js(rc, blur, body, stay)
+abcya.com##+js(rc, cookie, , stay)
+jongcdenv.be,umicore.jp,umicore.cn,umicore.pl,umicore.kr,umicore.co.th,umicore.fr,umicore.de,donneurdecellulessouches.be,stammzellenspender.be,stemcelldonor.be,umicore.com,umicore.com.br,koenvandenheuvel.be,stamceldonor.be,nahima.be##+js(rc, cookieconsent-active, body, stay)
+catused.com##+js(rc, cookieMsg, , stay)
+eujuicers.cz##+js(rc, cookie_consent__alert, , stay)
+graziellawicki.com,funnelcockpit.com##+js(rc, gdpr-cookie-notice-center-loaded, , stay)
+dnk.nl##+js(rc, has-open-cookie, ,stay)
+eam.de,eam-netz.de##+js(rc, om_cookie_active, , stay)
+tvp.pl##+js(rc, tvp-cookie-scroll-lock, , stay)
+cellardoor.co##+js(rc, cookie-overlay, , stay)
+ampire.de,verpackungsstadl.ch,imkershoperzgebirge.de,modellbahndealer.de,tillit-bikes.shop,bike-onlineshop.de,futspo.de,compravo.de,perpedale.de,modellbau-jung.de,verpackungsstadl.at,modellbau-vordermaier.de,bike-supply.de##+js(rc, disable, div, stay)
+wroc.pl##+js(rc, prevent-scroll, , stay)
+basenio.de##+js(rc, fog, , stay)
+fm-systeme.de##+js(rc, cookie-hint, , stay)
+gartenhotel-crystal.at,swffm.de,studentenwerkfrankfurt.de,dmsg.de,bgk.pl,pflegezeit-berlin.de,gpd-nordost-onlineberatung.de,proabschluss-beratung.de,hilfe-telefon-missbrauch.online,dww-suchtberatung.de,cyberforum.de,gutscheine.eurothermen.at,wolff-mueller.de,ras.bz.it##+js(rc, dp--cookie-consent, body, stay)
+wifiwien.at,wifikaernten.at,wifi.at##+js(rc, body-overlay-scrollable, , stay)
+wifiwien.at,wifikaernten.at,wifi.at##+js(rc, modal-open, , stay)
+5asec.pt,tui.dk,tui.fi,tui.no,tui.se##+js(rc, no-scroll, body, stay)
+pollfish.com##+js(rc, show-cookie-consent, , stay)
+werkenbijtrekpleister.nl,werkenbijkruidvat.be,rassenlijst.info,werkenbijiciparisxl.nl##+js(rc, is-active-cookiebar, , stay)
+tesa-labtec.com,tesatape.ru,tesa.com##+js(rc, -locked, , stay)
+flightradar24.com##+js(remove-class, has-banner, body.has-banner, stay)
+apk-vk.at##+js(rc, pointerevents, , stay)
+vietnamairlines.com##+js(rc, cookie-accept-required, , stay)
+incotec.com,croda.com##+js(rc, cookie-open, , stay)
+exaktafoto.se##+js(rc, cookiePopupVisible, , stay)
+campingdusoleil.com,hotel-la-chaumiere.com,les-anges-gardiens.fr,croco-kid.com,cambridge-centre.fr,equisud.com,allokebab-pau.fr,etre-visible.local.fr,mas-montebello66.com,camping-residentiel-les-marronniers-jura.fr,dj4events.fr,saintjoursexpertmaritime.com,az-renovation.fr,presquilemultiservices.com,hotel-aigoual.com,hotel-restaurant-pau.com,desrayaud-paysagistes.com,hotelsaintcharles.fr,agvillagecamarguais.com,joyella.com,gabriel-godard.com,artech-sellerie.com,motoclubernee.com,ledauphinhotel.com,cuisin-studio.com,biomeo-environnement.com,leman-instruments.com,esthetique-meyerbeer.com,institut-bio-naturel-nice.fr,nature-et-bois.fr,transmissions-bordeaux.com,kinechartreuse.com,corsegourmande.com,cotedecor.com,restaurant-la-badiane.fr,systelia.fr,lesjardinsinterieurs.com,helenevue.com,saubusse-thermes.com##+js(rc, unreadable-display, , stay)
+dehn.es,dehn.fr,dehn.it,dehn.hu,desitek.dk,dehn.at,dehn.de##+js(rc, mandatory_cookie_modal, , stay)
+wwz.ch##+js(rc, wwzoverlay--open, , stay)
+inyova.at,inyova.ch,inyova.de,ccalbacenter.com,wamu.org##+js(rc, gdpr-infobar-visible, , stay)
+momentive.com##+js(rc, cookie-enabled, , stay)
+kennedyslaw.com##+js(rc, cookie-overlay--open, , stay)
+elekta.com##+js(rc, cookie-banner-open, , stay)
+stratasysdirect.com,stratasys.com##+js(rc, overlay-content, body, stay)
+werkenbijkruidvat.nl##+js(rc, is-active-cookiebar, body, stay)
+ghacks.net##+js(rc, didomi-popup-open, body)
+cutoff.es,whyopencomputing.com##+js(rc, idxrcookies-block-user-nav, body, stay)
+mbanc.com##+js(rc, ccpa-banner, , stay)
+! set-cookie
+greenbuildingadvisor.com,finewoodworking.com##+js(set-cookie, taunton_user_consent_submitted, true)
+greenbuildingadvisor.com,finewoodworking.com##+js(set-cookie, taunton_user_consent_advertising, false)
+greenbuildingadvisor.com,finewoodworking.com##+js(set-cookie, taunton_user_consent_analytics, false)
+physikinstrumente.de,karlknauer.de,schoeck.com,resonate.coop,northgatevehiclehire.ie,badhall.at##+js(set-cookie, cookieconsent_status, allow)
+m.twitch.tv##+js(set-cookie, tachyon-accepted-cookie-notice, true)
+eboo.lu##+js(set-cookie, PostAnalytics, 0)
+kzvb.de##+js(set-cookie, cookie-optin, true)
+sartor-stoffe.de##+js(set-cookie, cookie-bar, 0)
+tridge.com##+js(set-cookie, cookieBannerHidden, true)
+asus.com##+js(set-cookie, isReadCookiePolicyDNT, No)
+asus.com##+js(set-cookie, isReadCookiePolicyDNTAa, false)
+drinksking.sk##+js(set-cookie, coookieaccept, ok)
+neuhauschocolates.com##+js(set-cookie, consentTrackingVerified, true)
+commandsuite.it##+js(set-cookie, consent, 0)
+oktea.tw##+js(set-cookie, allowGetPrivacyInfo, true)
+bafin.de,materna.de,bamf.de##+js(set-cookie, cookiebanner, 0)
+tenvinilo-argentina.com##+js(set-cookie, _tv_cookie_consent, y)
+tenvinilo-argentina.com##+js(set-cookie, _tv_cookie_choice, 1)
+eikaforsikring.no##+js(set-cookie, eika_consent_set, true)
+eikaforsikring.no##+js(set-cookie, eika_consent_marketing, false)
+eurowings.com##+js(set-cookie, ew_cookieconsent, 1)
+seventhgeneration.com##+js(set-cookie, cookie-agreed, 0)
+eurowings.com##+js(set-cookie, ew_cookieconsent_optin_b, true)
+eurowings.com##+js(set-cookie, ew_cookieconsent_optin_a, true)
+newpharma.be,newpharma.fr,newpharma.de,newpharma.at,newpharma.nl##+js(set-cookie, gdpr-agree-cookie, 1, , reload, 1)
+newpharma.be,newpharma.fr,newpharma.de,newpharma.at,newpharma.nl##+js(set-cookie, gdpr-consent-cookie-level3, 1)
+newpharma.be,newpharma.fr,newpharma.de,newpharma.at,newpharma.nl##+js(set-cookie, gdpr-consent-cookie-level2, 1)
+kapoorwatch.com##+js(set-cookie, ck-cp, accepted)
+paf.se##+js(set-cookie, cookieConsent, 1)
+thw.de,bafa.de,bka.de,bmbf.de##+js(set-cookie, gsbbanner, 0)
+weather.com##+js(set-cookie, __adblocker, false, , reload, 1)
+bolist.se##+js(set-cookie, cookies_marketing_ok, false)
+bolist.se##+js(set-cookie, cookies_ok, true)
+evivanlanschot.nl##+js(set-cookie, acceptCookies, 0)
+prenatal.nl##+js(set-cookie, marketingCookies, false)
+wagner-tuning.com##+js(set-cookie, CookieLaw_statistik 0)
+wagner-tuning.com##+js(set-cookie, CookieLaw_komfort, 0)
+wagner-tuning.com##+js(set-cookie, CookieLaw_personalisierung, 0)
+wagner-tuning.com##+js(set-cookie, CookieLaw, on)
+waitrosecellar.com##+js(set-cookie, wtr_cookie_consent, 1)
+waitrosecellar.com##+js(set-cookie, wtr_cookies_advertising, 0)
+waitrosecellar.com##+js(set-cookie, wtr_cookies_functional, 0)
+waitrosecellar.com##+js(set-cookie, wtr_cookies_analytics, 0)
+kvk.nl##+js(set-cookie, allowTrackingCookiesKvK, 0)
+kvk.nl##+js(set-cookie, cookieLevelCodeKVK, 1)
+kvk.nl##+js(set-cookie, allowAnalyticsCookiesKvK, 0)
+macfarlanes.com##+js(set-cookie, macfarlanes-necessary-cookies, accepted)
+pole-emploi.fr##+js(set-cookie, TC_PRIVACY_CENTER, 0)
+gardenmediaguild.co.uk##+js(set-cookie, AllowCookies, false, , reload, 1)
+samplerite.com,samplerite.cn##+js(set-cookie, consented, false)
+sororedit.com##+js(set-cookie, cookie_tou, 1, , reload, 1)
+blukit.com.br##+js(set-cookie, blukit_novo, true)
+biegnaszczyt.pl##+js(set-cookie, cr, true)
+staff-gallery.com##+js(set-cookie, gdpr_check_cookie, accepted, , reload, 1)
+itv.com##+js(set-cookie, accept-cookies, accepted)
+dvag.de##+js(set-cookie, dvag_cookies2023, 1)
+premierinn.com,whitbreadinns.co.uk,barandblock.co.uk,tabletable.co.uk,brewersfayre.co.uk,beefeater.co.uk##+js(set-cookie, consent_cookie, 1)
+premierinn.com,whitbreadinns.co.uk,barandblock.co.uk,tabletable.co.uk,brewersfayre.co.uk,beefeater.co.uk##+js(set-cookie, permissionExperience, false)
+premierinn.com,whitbreadinns.co.uk,barandblock.co.uk,tabletable.co.uk,brewersfayre.co.uk,beefeater.co.uk##+js(set-cookie, permissionPerformance, false)
+premierinn.com,whitbreadinns.co.uk,barandblock.co.uk,tabletable.co.uk,brewersfayre.co.uk,beefeater.co.uk##+js(set-cookie, permissionMarketing, false)
+allstarssportsbars.co.uk##+js(set-cookie, consent_analytics, false)
+allstarssportsbars.co.uk##+js(set-cookie, consent_received, true)
+babiesrus.ca,toysrus.ca,roomsandspaces.ca##+js(set-cookie, cookieModal, false)
+athletic-club.eus##+js(set-cookie, user-accepted-AEPD-cookies, 1)
+athletic-club.eus##+js(set-cookie, personalization-cookies-consent, 0, , reload, 1)
+athletic-club.eus##+js(set-cookie, analitics-cookies-consent, 0)
+wattoo.dk,wattoo.no##+js(set-cookie, sscm_consent_widget, 1)
+texthelp.com##+js(set-cookie, texthelp_cookie_consent_in_eu, 0)
+texthelp.com##+js(set-cookie, texthelp_cookie_consent, yes)
+courierexchange.co.uk,haulageexchange.co.uk##+js(set-cookie, nc_cookies, accepted)
+courierexchange.co.uk,haulageexchange.co.uk##+js(set-cookie, nc_analytics, rejected)
+courierexchange.co.uk,haulageexchange.co.uk##+js(set-cookie, nc_marketing, rejected)
+powerball.com,tlaciarik.sk,tiskarik.cz##+js(set-cookie, .AspNet.Consent, no, , reload, 1)
+sseriga.edu##+js(set-cookie, user_gave_consent, 1)
+sseriga.edu##+js(set-cookie, user_gave_consent_new, 1)
+rt.com##+js(set-cookie, rt-cb-approve, true)
+swrng.de##+js(set-cookie, CookieLayerDismissed, true)
+crfop.gdos.gov.pl##+js(set-cookie, RODOclosed, true)
+nurgutes.de##+js(set-cookie, cookieDeclined, 1)
+kpcen-torun.edu.pl##+js(set-cookie, cookieModal, true)
+opintopolku.fi##+js(set-cookie, oph-mandatory-cookies-accepted, true)
+debenhams.com##+js(set-cookie, dw_is_new_consent, true)
+archiwumalle.pl##+js(set-cookie, accept_political, 1)
+konicaminolta.ca,konicaminolta.us##+js(set-cookie, konicaminolta.us, 1)
+deutschebank-dbdirect.com,dbonline.deutsche-bank.es,deutsche-bank.es##+js(set-cookie, cookiesAnalyticsApproved, 0)
+deutschebank-dbdirect.com,dbonline.deutsche-bank.es,deutsche-bank.es##+js(set-cookie, hasConfiguredCookies, 1)
+deutschebank-dbdirect.com,dbonline.deutsche-bank.es,deutsche-bank.es##+js(set-cookie, cookiesPubliApproved, 0)
+hipotecaonline.db.com##+js(set-cookie, cookieAuth, 1)
+kangasalansanomat.fi##+js(set-cookie, kscookies, true)
+eif.org##+js(set-cookie, cookie-policy, true)
+press.princeton.edu##+js(set-cookie, cookie-agreed, 0)
+sugi-net.jp##+js(set-cookie, cookie-use-accept, false)
+understandingsociety.ac.uk##+js(set-cookie, ga-disable-UA-xxxxxxxx-x, true)
+autohero.com##+js(set-cookie, consent, 1)
+bargaintown.ie##+js(set-cookie, cookie-bar, no)
+tui.nl##+js(set-cookie, CookiesAccepted, no)
+doppelmayr.com##+js(set-cookie, essential, true)
+case-score.com##+js(set-cookie, cookieConfirm, true)
+case-score.com##+js(set-cookie, trackingConfirm, false)
+finimize.com##+js(set-cookie, cookie_consent, false)
+rtu.lv##+js(set-cookie, uce-cookie, N)
+sysdream.com##+js(set-cookie, tarteaucitron, false)
+cinemarkca.com##+js(set-cookie, cookiePolicies, true)
+wedding.pl##+js(set-cookie, wed_cookie_info, 1)
+neander-zahn.de##+js(set-cookie, cookie_optin_q, false)
+theadelphileeds.co.uk,tobycarvery.co.uk##+js(set-cookie, ce-cookie, N)
+viajesatodotren.com##+js(set-cookie, NTCookies, 0)
+ticketingcine.fr##+js(set-cookie, alertCookie, 1, , reload, 1)
+agenziavista.it##+js(set-cookie, gdpr, 1)
+bitecode.dev##+js(set-cookie, hideCookieBanner, true)
+mjob.si##+js(set-cookie, obligatory, true)
+mjob.si##+js(set-cookie, marketing, false)
+mjob.si##+js(set-cookie, analytics, false)
+airportrentacar.gr##+js(set-cookie, cookieControl, true)
+plos.org##+js(set-cookie, plosCookieConsentStatus, false)
+autohaus24.de##+js(set-cookie, user_accepted_cookies, 1)
+gadis.es##+js(set-cookie, analyticsAccepted, false)
+gadis.es##+js(set-cookie, cookieAccepted, true)
+ford-kimmerle-reutlingen.de,autohaus-reitermayer.de,autohaus-diefenbach-waldbrunn.de,autohaus-diefenbach.de,autohaus-musberg.de,ford-ah-im-hunsrueck-simmern.de,ford-arndt-goerlitz.de,ford-autogalerie-alfeld.de,ford-bacher-schrobenhausen.de,ford-bathauer-bad-harzburg.de,ford-behrend-waren.de,ford-bergland-frankfurt-oder.de,ford-bergland-wipperfuerth.de,ford-besico-glauchau.de,ford-besico-nuernberg.de,ford-bischoff-neumuenster.de,ford-bodach-borgentreich.de,ford-bunk-saarbruecken.de,ford-bunk-voelklingen.de,ford-busch-kirchberg.de,ford-diermeier-muenchen.de,ford-dinnebier-leipzig.de,ford-duennes-regensburg.de,ford-fischer-bochum.de,ford-fischer-muenster.de,ford-foerster-koblenz.de,ford-fuchs-uffenheim.de,ford-geberzahn-koeln.de,ford-gerstmann-duesseldorf.de,ford-haefner-und-strunk-kassel.de,ford-hartmann-kempten.de,ford-hartmann-rastatt.de,ford-hatzner-karlsruhe.de,ford-heine-hoexter.de,ford-hentschel-hildesheim.de,ford-hessengarage-dreieich.de,ford-hessengarage-frankfurt.de,ford-hga-windeck.de,ford-hommert-coburg.de,ford-horstmann-rastede.de,ford-janssen-sonsbeck.de,ford-jochem-stingbert.de,ford-jungmann-wuppertal.de,ford-kestel-marktzeuln.de,ford-klaiber-bad-friedrichshall.de,ford-koenig-eschwege.de,ford-kohlhoff-mannheim.de,ford-kt-automobile-coesfeld.de,ford-lackermann-wesel.de,ford-ludewig-delligsen.de,ford-maiwald-linsengericht.de,ford-mertens-beckum.de,ford-meyer-bad-oeynhausen.de,ford-mgs-bayreuth.de,ford-mgs-radebeul.de,ford-muecke-berlin.de,ford-norren-weissenthurm.de,ford-nrw-garage-duesseldorf.de,ford-nrw-garage-handweiser.de,ford-nuding-remshalden.de,ford-ohm-rendsburg.de,ford-reinicke-muecheln.de,ford-rennig.de,ford-roerentrop-luenen.de,ford-schankola-dudweiler.de,ford-sg-goeppingen.de,ford-sg-leonberg.de,ford-sg-neu-ulm.de,ford-sg-pforzheim.de,ford-sg-waiblingen.de,ford-storz-st-georgen.de,ford-strunk-koeln.de,ford-tobaben-hamburg.de,ford-toenjes-zetel.de,ford-wagner-mayen.de,ford-wahl-fritzlar.de,ford-wahl-siegen.de,ford-weege-bad-salzuflen.de,ford-westhoff-hamm.de,ford-wieland-hasbergen.de##+js(set-cookie, hide-gdpr-bar, true)
+vitalllit.com,fincaparera.com,dbnetbcn.com,viba.barcelona,anafaustinoatelier.com,lamparasherrero.com,calteixidor.cat,argentos.barcelona,anmarlube.com,anynouxines.barcelona,crearunapaginaweb.cat,cualesmiip.com##+js(set-cookie, promptCookies, 1)
+porndoe.com##+js(set-cookie, _cDaB, 1)
+porndoe.com##+js(set-cookie, _aCan_analytical, 0)
+porndoe.com##+js(set-cookie, _aGaB, 1)
+thinkingaustralia.com##+js(set-cookie, surbma-gpga, no)
+elrow.com##+js(set-cookie, elrowCookiePolicy, yes)
+ownit.se##+js(set-cookie, ownit_cookie_data_permissions, 1)
+velo-antwerpen.be##+js(set-cookie, Cookies_Preferences, accepted)
+velo-antwerpen.be##+js(set-cookie, Cookies_Preferences_Analytics, declined)
+wwnorton.com##+js(set-cookie, privacyPolicyAccepted, true)
+pc-canada.com##+js(set-cookie, Cookies-Accepted, true)
+mullgs.se##+js(set-cookie, cc-accepted, 2)
+1a-sehen.de##+js(set-cookie, cc-item-google, false)
+anker.com##+js(set-cookie, accept_cookies, accepted)
+feature.fm##+js(set-cookie, featureConsent, false, , reload, 1)
+comte.com##+js(set-cookie, accept-cookie, no)
+baltic-watches.com,np-brijuni.hr,vilgain.com##+js(set-cookie, consent, 0, , reload, 1)
+tradingview.com##+js(set-cookie, cookiePrivacyPreferenceBannerProduction, accepted)
+wevolver.com##+js(set-cookie, cookiesConsent, false)
+experienciasfree.com##+js(set-cookie, 2x1cookies, 1)
+freemans.com##+js(set-cookie, firstPartyDataPrefSet, true)
+kivikangas.fi##+js(set-cookie, cookies-required, 1, , reload, 1)
+kh.hu##+js(set-cookie, kh_cookie_level4, false)
+kh.hu##+js(set-cookie, kh_cookie_level3, false)
+kh.hu##+js(set-cookie, kh_cookie_level1, true)
+aplgo.com##+js(set-cookie, cookie_agreement, 1, , reload, 1)
+securityconference.org##+js(set-cookie, MSC_Cookiebanner, false)
+aha.or.at##+js(set-cookie, cookieConsent_marketing, false)
+fantasyfitnessing.com##+js(set-cookie, Fitnessing21-15-9, 0)
+chocolateemporium.com##+js(set-cookie, cookies_popup, yes)
+aha.or.at##+js(set-cookie, cookieConsent_required, true, , reload, 1)
+account.samsung.com##+js(set-cookie, sa_enable, off)
+crushwineco.com##+js(set-cookie, acceptcookietermCookieBanner, true)
+levi.pt##+js(set-cookie, cookie_status, 1, , reload, 1)
+fertagus.pt##+js(set-cookie, FTCookieCompliance, 1)
+rockpoint.cz,rockpoint.sk##+js(set-cookie, cookie-bar, 0)
+smiggle.co.uk##+js(set-cookie, cookiePopupAccepted, true)
+ubisoft.com##+js(set-cookie, UBI_PRIVACY_POLICY_VIEWED, true)
+ubisoft.com##+js(set-cookie, UBI_PRIVACY_ADS_OPTOUT, true)
+ubisoft.com##+js(set-cookie, UBI_PRIVACY_POLICY_ACCEPTED, false)
+ubisoft.com##+js(set-cookie, UBI_PRIVACY_VIDEO_OPTOUT, false)
+thulb.uni-jena.de##+js(set-cookie, jocookie, false)
+splityourticket.co.uk##+js(set-cookie, cookieNotification.shown, 1)
+eramba.org##+js(set-cookie, localConsent, false)
+openai.com##+js(set-cookie, oai-allow-ne, false)
+kupbilecik.com,kupbilecik.de,kupbilecik.pl##+js(set-cookie, allow-cookie, 1)
+kupbilecik.com,kupbilecik.de,kupbilecik.pl##+js(set-cookie, cookie-functional, 1)
+shopilya.com##+js(set-cookie, hulkCookieBarClick, 1)
+arera.it,haustier-berater.de,hfm-frankfurt.de##+js(set-cookie, CookieConsent, 1)
+zoommer.ge##+js(set-cookie, zoommer-cookie_agreed, true)
+studentapan.se##+js(set-cookie, accepted_cookie_policy, true)
+petcity.lt##+js(set-cookie, gdpr_cookie_token, 1)
+petcity.lt##+js(set-cookie, _consent_personalization, denied)
+petcity.lt##+js(set-cookie, _consent_analytics, denied)
+petcity.lt##+js(set-cookie, _consent_marketing, denied)
+tobroco.com,tobroco.nl,tobroco-giant.com##+js(set-cookie, cookieWall, 1)
+geosfreiberg.de##+js(set-cookie, no_cookies, 1)
+geosfreiberg.de##+js(set-cookie, hidecookiesbanner, 1)
+eapvic.org##+js(set-cookie, CookienatorConsent, false)
+tobroco.com,tobroco.nl,tobroco-giant.com##+js(set-cookie, cookieWallOptIn, 0)
+bammusic.com##+js(set-cookie, analyticsCookiesAccepted, false)
+green-24.de##+js(set-cookie, cf4212_cn, 1)
+bammusic.com##+js(set-cookie, mediaCookiesAccepted, false)
+bammusic.com##+js(set-cookie, mandatoryCookiesAccepted, true)
+phish-test.de##+js(set-cookie, gtag, true)
+bokadirekt.se##+js(set-cookie, BokadirektCookiePreferencesMP, 1)
+ford.lt,ford.pt,ford.fr,ford.de,ford.dk,ford.pl,ford.se,ford.nl,ford.no,ford.fi,ford.gr,ford.it##+js(set-cookie, cookieAcknowledged, true)
+data-media.gr##+js(set-cookie, data-privacy-statement, true)
+e-food.gr##+js(set-cookie, cookie_privacy_level, required)
+e-food.gr##+js(set-cookie, accepted_cookies, true, , reload, 1)
+bvmed.de##+js(set-cookie, MATOMO_CONSENT_GIVEN, 0)
+babyshop.com##+js(set-cookie, BABY_MARKETING_COOKIES_CONSENTED, false)
+babyshop.com##+js(set-cookie, BABY_PERFORMANCE_COOKIES_CONSENTED, false)
+babyshop.com##+js(set-cookie, BABY_NECESSARY_COOKIES_CONSENTED, true)
+griffbereit24.de##+js(set-cookie, consent_essential, allow)
+checkwx.com##+js(set-cookie, cookieshown, 1)
+calendardate.com##+js(set-cookie, warn, true)
+wefashion.ch,wefashion.fr,wefashion.lu,wefashion.be,wefashion.de,wefashion.nl##+js(set-cookie, optinCookieSetting, 1)
+brettspiel-angebote.de##+js(set-cookie, privacy-shown, true)
+brettspiel-angebote.de##+js(set-cookie, slimstat_optout_tracking, true)
+nio.com##+js(set-cookie, npp_analytical, 0)
+kancelarskepotreby.net##+js(set-cookie, inshopCookiesSet, true)
+kancelarskepotreby.net##+js(set-cookie, adsCookies, false)
+kancelarskepotreby.net##+js(set-cookie, performanceCookies, false)
+segment-anything.com##+js(set-cookie, sa_demo, false)
+sketch.metademolab.com##+js(set-cookie, animated_drawings, true)
+cambridgebs.co.uk##+js(set-cookie, cookieStatus, true)
+freizeitbad-greifswald.de##+js(set-cookie, swgCookie, false)
+giuseppezanotti.com##+js(set-cookie, cookieConsentPreferencesGranted, 1)
+giuseppezanotti.com##+js(set-cookie, cookieConsentMarketingGranted, 0)
+giuseppezanotti.com,xcen.se##+js(set-cookie, cookieConsentGranted, 1)
+biggreenegg.co.uk##+js(set-cookie, cookies-rejected, true)
+skihuette-oberbeuren.de##+js(set-cookie, NL_COOKIE_KOMFORT, false)
+skihuette-oberbeuren.de##+js(set-cookie, NL_COOKIE_MEMORY, true, , reload, 1)
+skihuette-oberbeuren.de##+js(set-cookie, NL_COOKIE_STATS, false)
+pwsweather.com##+js(set-cookie, pws_gdrp_accept, 1)
+xfree.com##+js(set-cookie, have18, 1)
+theweathernetwork.com##+js(set-cookie, pelm_cstate, 1)
+theweathernetwork.com##+js(set-cookie, pelm_consent, 1)
+monese.com##+js(set-cookie, accept-cookies, true)
+monese.com##+js(set-cookie, accept-analytical-cookies, false)
+monese.com##+js(set-cookie, accept-marketing-cookies, false)
+helmut-fischer.com##+js(set-cookie, cookie-level-v4, 0)
+myscience.org##+js(set-cookie, analytics_consent, yes)
+7-eleven.com##+js(set-cookie, sei-ccpa-banner, true)
+airwallex.com##+js(set-cookie, awx_cookie_consent, true)
+streema.com##+js(set-cookie, cookie_warning, 1)
+gov.lv##+js(set-cookie, allowCookies, 0)
+tise.com##+js(set-cookie, cookiePolicyAccepted, true)
+codecamps.com##+js(set-cookie, codecamps.cookiesConsent, true)
+avell.com.br##+js(set-cookie, cookiesConsent, true)
+moneyfarm.com##+js(set-cookie, consent_updated, true)
+bassolsenergia.com##+js(set-cookie, CookienatorConsent, false)
+simpl.rent##+js(set-cookie, acsr, 1)
+hubspot.com##+js(set-cookie, __hs_gpc_banner_dismiss, true)
+prodyna.com,zutobi.com##+js(set-cookie, cookieyes-necessary, yes)
+prodyna.com,zutobi.com##+js(set-cookie, cookieyes-other, no)
+prodyna.com,zutobi.com##+js(set-cookie, cky-action, yes)
+prodyna.com,zutobi.com##+js(set-cookie, cookieyes-functional, no)
+calm.com##+js(set-cookie, has-declined-cookies, true, , reload, 1)
+calm.com##+js(set-cookie, has-agreed-to-cookies, false)
+pubgesports.com##+js(set-cookie, essential, Y)
+pubgesports.com##+js(set-cookie, analytics, N)
+pubgesports.com##+js(set-cookie, functional, N)
+outwrite.com##+js(set-cookie, gradeproof_shown_cookie_warning, true)
+sberbank.com##+js(set-cookie, sber.pers_notice_en, 1)
+sbermarket.ru##+js(set-cookie, cookies_consented, yes)
+bgextras.co.uk##+js(set-cookie, CB393_DONOTREOPEN, true)
+sede.coruna.gal##+js(set-cookie, AYTO_CORUNA_COOKIES, 1, , reload, 1)
+czech-server.cz##+js(set-cookie, I6IISCOOKIECONSENT0, n, , reload, 1)
+hitech-gamer.com##+js(set-cookie, htg_consent, 0)
+bialettikave.hu##+js(set-cookie, cookie_oldal, 1)
+bialettikave.hu##+js(set-cookie, cookie_marketing, 0)
+bialettikave.hu##+js(set-cookie, cookie_jog, 1)
+canalplus.com##+js(set-cookie, cp_cc_ads, 0)
+canalplus.com##+js(set-cookie, cp_cc_stats, 0)
+canalplus.com##+js(set-cookie, cp_cc_required, 1)
+mader.bz.it##+js(set-cookie, ae-cookiebanner, true)
+mader.bz.it##+js(set-cookie, ae-esential, true)
+mader.bz.it##+js(set-cookie, ae-statistics, false)
+supply.amazon.co.uk##+js(set-cookie, ccs-supplierconnect, ACCEPTED)
+bhaptics.com##+js(set-cookie, accepted_cookies, yes)
+cleverbot.com##+js(set-cookie, note, 1)
+watchaut.film##+js(set-cookie, cookieConsent, required)
+tuffaloy.com,fanvue.com##+js(set-cookie, cookieConsent, accepted)
+electronoobs.com##+js(set-cookie, pd_cc, 1)
+xn--lkylen-vxa.se##+js(set-cookie, gdpr_ok, necessary)
+tiefenthaler-landtechnik.at,tiefenthaler-landtechnik.ch,tiefenthaler-landtechnik.de##+js(set-cookie, allowTracking, false)
+huisartsenpraktijkdoorn.nl##+js(set-cookie, cookies-marketing, N)
+varma.fi##+js(set-cookie, varmafi_mandatory, true)
+vyos.io##+js(set-cookie, VyosCookies, Accepted)
+digimobil.es##+js(set-cookie, analyticsConsent, false)
+digimobil.es##+js(set-cookie, adsConsent, false)
+teenage.engineering##+js(set-cookie, te_cookie_ok, 1)
+merrell.pl,converse.pl,shop.wf-education.com##+js(set-cookie, amcookie_policy_restriction, allowed)
+converse.com##+js(set-cookie, dw_cookies_accepted, 1)
+converse.com##+js(set-cookie, acceptConverseCookiePolicy, 0)
+buyandapply.nexus.org.uk##+js(set-cookie, gdpr-banner, 1)
+img.ly##+js(set-cookie, privacySettings, 1)
+cams.ashemaletube.com##+js(set-cookie, are_essential_consents_given, 1)
+cams.ashemaletube.com##+js(set-cookie, is_personalized_content_consent_given, 1)
+electronicacerler.com##+js(set-cookie, acepta_cookies_funcionales, 1)
+electronicacerler.com##+js(set-cookie, acepta_cookies_obligatorias, 1)
+electronicacerler.com##+js(set-cookie, acepta_cookies_personalizacion, 1)
+okpoznan.pl##+js(set-cookie, cookiepolicyinfo_new, true)
+ielts.idp.com##+js(set-cookie, acceptCookie, true)
+okpoznan.pl##+js(set-cookie, cookie_analytics, false)
+citibankonline.pl##+js(set-cookie, cookieConsent, 1)
+endlesstools.io##+js(set-cookie, et_cookie_consent, true)
+thehacker.recipes##+js(set-cookie, __gitbook_cookie_granted, no)
+mbhszepkartya.hu##+js(set-cookie, cookieBasic, true)
+casellimoveis.com.br##+js(set-cookie, cookieMold, true)
+embedplus.com##+js(set-cookie, ytprefs_gdpr_consent, 1)
+e-file.pl##+js(set-cookie, efile-cookiename-, 1)
+sp215.info##+js(set-cookie, plg_system_djcookiemonster_informed, 1, , reload, 1)
+empik.com##+js(set-cookie, cvc, true)
+app.moneyfarm.com##+js(set-cookie, consent_updated, true)
+senda.pl##+js(set-cookie, cookieConsent3, true)
+befestigungsfuchs.de##+js(set-cookie, acris_cookie_acc, 1, , reload, 1)
+cut-tec.co.uk##+js(set-cookie, termsfeed_pc1_notice_banner_hidden, true)
+parfum-zentrum.de,candy-store.cz##+js(set-cookie, cookie-bar, 0)
+gaytimes.co.uk##+js(set-cookie, cmplz_marketing, allowed)
+hello.one##+js(set-cookie, acknowledged, true)
+wildcat-koeln.de##+js(set-cookie, gdpr_shield_notice_dismissed, yes)
+libraries.merton.gov.uk##+js(set-cookie, luci_gaConsent_95973f7b-6dbc-4dac-a916-ab2cf3b4af11, false)
+libraries.merton.gov.uk##+js(set-cookie, luci_CookieConsent, true)
+tommy.hr##+js(set-cookie, ng-cc-necessary, 1)
+tommy.hr##+js(set-cookie, ng-cc-accepted, accepted)
+usit.uio.no##+js(set-cookie, PrivacyPolicyOptOut, yes)
+halonen.fi,carlson.fi##+js(set-cookie, consentAnalytics, false)
+halonen.fi,carlson.fi##+js(set-cookie, consentAdvertising, false)
+halonen.fi,carlson.fi##+js(set-cookie, consentPersonalization, false)
+halonen.fi,carlson.fi##+js(set-cookie, privacyExpiration, 1)
+halonen.fi,carlson.fi##+js(set-cookie, privacySettings, 1)
+demo-digital-twin.r-stahl.com##+js(set-cookie, cookieconsent_status, deny)
+la31devalladolid.com##+js(set-cookie, lr_cookies_tecnicas, accepted)
+la31devalladolid.com##+js(set-cookie, cookies_surestao, accepted, , reload, 1)
+mx.com##+js(set-cookie, hide-cookie-banner, 1)
+foxtrail.fjallraven.com##+js(set-cookie, fjallravenCookie, 1)
+dotwatcher.cc##+js(set-cookie, accept_cookie_policy, true)
+bazarchic.com##+js(set-cookie, _marketing, 0)
+bazarchic.com##+js(set-cookie, _performance, 0)
+bazarchic.com##+js(set-cookie, RgpdBanner, 1)
+seedrs.com##+js(set-cookie, seen_cookie_message, accepted)
+mypensiontracker.co.uk##+js(set-cookie, complianceCookie, on)
+endclothing.com##+js(set-cookie, cookieTermsDismissed, true)
+esimplus.me##+js(set-cookie, cookie-consent, 1)
+cineplanet.com.pe##+js(set-cookie, cookie-consent, 0)
+ecologi.com##+js(set-cookie, ecologi_cookie_consent_20220224, false)
+wamba.com##+js(set-cookie, appBannerPopUpRulesCookie, true)
+eurac.edu##+js(set-cookie, eurac_cookie_consent, true)
+akasaair.com##+js(set-cookie, akasaairCookie, accepted)
+rittal.com##+js(set-cookie, rittalCC, 1)
+wizards.com##+js(set-cookie, cookie-agreed, 2)
+worstbassist.com##+js(set-cookie, ckies_facebook_pixel, deny)
+worstbassist.com##+js(set-cookie, ckies_google_analytics, deny)
+worstbassist.com##+js(set-cookie, ckies_youtube, allow)
+worstbassist.com##+js(set-cookie, ckies_cloudflare, allow)
+worstbassist.com##+js(set-cookie, ckies_paypal, allow)
+worstbassist.com##+js(set-cookie, ckies_web_store_state, allow)
+zs-watch.com##+js(set-cookie, hasPolicy, Y)
+crown.com##+js(set-cookie, modalPolicyCookieNotAccepted, notaccepted)
+mesanalyses.fr##+js(set-cookie, MANA_CONSENT, true)
+teket.jp##+js(set-cookie, _ul_cookie_consent, allow)
+fish.shimano.com##+js(set-cookie, cookiePrefAnalytics, 0)
+fish.shimano.com##+js(set-cookie, cookiePrefMarketing, 0)
+fish.shimano.com##+js(set-cookie, cookiePrefThirdPartyApplications, 0)
+praxisplan.at##+js(set-cookie, trackingCookies, off)
+praxisplan.at##+js(set-cookie, complianceCookie, on)
+simsherpa.com##+js(set-cookie, acceptanalytics, no)
+simsherpa.com##+js(set-cookie, acceptadvertising, no)
+simsherpa.com##+js(set-cookie, acceptfunctional, yes)
+translit.ru##+js(set-cookie, consent18, 0, , reload, 1)
+renault-autocenterprignitz-pritzwalk.de,renault-spenrath-juelich.de##+js(set-cookie, hide-gdpr-bar, true)
+aruba.com##+js(set-cookie, ATA.gdpr.popup, true)
+aireuropa.com##+js(set-cookie, AIREUROPA_ENSIGHTEN_PRIVACY_BANNER_VIEWED, 1)
+skfbearingselect.com##+js(set-cookie, privacyNoticeExpireDate, 1)
+skfbearingselect.com##+js(set-cookie, privacyNoticeAccepted, true)
+scanrenovation.com##+js(set-cookie, policy_accepted, 1)
+ttela.se##+js(set-cookie, stampen-cookies-hide-information, yes)
+dominospizza.pl##+js(set-cookie, dominos_cookies_accepted, 1)
+devagroup.pl##+js(set-cookie, deva_accepted, yes)
+hintaopas.fi,ledenicheur.fr,prisjagt.dk,prisjakt.no,prisjakt.nu,pricespy.co.uk,pricespy.co.nz##+js(set-cookie, privacy_settings, 1)
+horecaworld.biz,horecaworld.be##+js(set-cookie, cookies_consent, 1)
+angelifybeauty.com##+js(set-cookie, cookies_modal, true)
+cotopaxi.com##+js(set-cookie, cookie_notice, 1)
+kaluga.hh.ru##+js(set-cookie, cookie_policy_agreement, true)
+justjoin.it##+js(set-cookie, cookiesPopup, 1)
+digibest.pt##+js(set-cookie, digibestCookieInfo, true)
+two-notes.com##+js(set-cookie, cookiesettings_status, allow)
+theverge.com##+js(set-cookie, _duet_gdpr_acknowledged, 1)
+daimant.co##+js(set-cookie, daimant_collective, accept, , reload, 1)
+secularism.org.uk##+js(set-cookie, cookies-notice, 1, , reload, 1)
+karriere-hamburg.de##+js(set-cookie, banner, 2, , reload, 1)
+musicmap.info##+js(set-cookie, privacy-policy-2023, accept)
+gasspisen.se##+js(set-cookie, user_cookie_consent, false)
+medtube.pl,medtube.es,medtube.fr,medtube.net##+js(set-cookie, cookiePolicy, 4)
+standard.sk##+js(set-cookie, standard_gdpr_consent, true)
+linmot.com##+js(set-cookie, cookie_accept, true)
+containerandpackaging.com##+js(set-cookie, cookieBanner, true)
+top-yp.de##+js(set-cookie, tncookieinfo, 1, , reload, 1)
+termania.net##+js(set-cookie, agree_with_cookies, 1)
+swisscard.ch##+js(set-cookie, sc-privacy-settings, true)
+account.nowpayments.io##+js(set-cookie, cookie-accepted, true)
+fizjobaza.pl##+js(set-cookie, cookie-accepted, yes)
+gigasport.at,gigasport.de,gigasport.ch##+js(set-cookie, consentAll, 1)
+velleahome.gr##+js(set-cookie, hide_cookies_consent, 1)
+nicequest.com##+js(set-cookie, nicequest_optIn, 1)
+handelsbanken.no,handelsbanken.com,handelsbanken.co.uk,handelsbanken.se,handelsbanken.dk,handelsbanken.fi##+js(set-cookie, shb-consent-cookies, false)
+songtradr.com##+js(set-cookie, cpaccepted, true)
+logo.pt##+js(set-cookie, cookieMessageDismissed, 1)
+logo.pt##+js(set-cookie, LG_COOKIE_CONSENT, 0)
+flexwhere.co.uk,flexwhere.de,pricewise.nl,getunleash.io,dentmania.de,free.navalny.com,latoken.com##+js(set-cookie, CookieConsent, true)
+flexwhere.co.uk,flexwhere.de##+js(set-cookie, gatsby-plugin-google-tagmanager, false)
+waitrose.com##+js(set-cookie, wtr_cookie_consent, 1)
+waitrose.com##+js(set-cookie, wtr_cookies_functional, 1)
+campusbrno.cz##+js(set-cookie, cookie-m-personalization, 0)
+campusbrno.cz##+js(set-cookie, cookie-m-marketing, 0)
+campusbrno.cz##+js(set-cookie, cookie-m-analytics, 0)
+secrid.com##+js(set-cookie, cookies, true)
+etsy.com##+js(set-cookie, ctc_rejected, 1)
+seb.se,sebgroup.com##+js(set-cookie, AcceptedCookieCategories, 1)
+deps.dev##+js(set-cookie, cookie_policy_acknowledgement, true)
+buf.build##+js(set-cookie, allowCookies, yes)
+starofservice.com##+js(set-cookie, cookieNotification, true)
+ytcomment.kmcat.uk##+js(set-cookie, privacy, true)
+gmx.com,gmx.fr##+js(set-cookie, euconsent-bypass, 1)
+karofilm.ru##+js(set-cookie, cookie_usage, yes)
+octopusenergy.it,octopusenergy.es##+js(set-cookie, dismissCookieBanner, true)
+octopusenergy.es##+js(set-cookie, switchCookies, 1)
+justanswer.es,justanswer.de,justanswer.com,justanswer.co.uk##+js(set-cookie, cbChecked, true)
+citilink.ru##+js(set-cookie, infoCookieUses, true)
+huutokaupat.com##+js(set-cookie, consent-data-v2, 0)
+kaggle.com##+js(set-cookie, ACCEPTED_COOKIES, true)
+emr.ch##+js(set-cookie, EMR-CookieConsent-Analytical, 0, , reload, 1)
+gem.cbc.ca##+js(set-cookie, gem_cookies_usage_production, 1)
+pumatools.hu##+js(set-cookie, cookie_level, 2)
+ici.tou.tv##+js(set-cookie, toutv_cookies_usage_production, 1)
+crunchyroll.com##+js(set-cookie, _evidon_suppress_notification_cookie, 1)
+emr.ch##+js(set-cookie, EMR-CookieConsent-Advertising, 0)
+clipchamp.com##+js(set-cookie, acceptCookies, true)
+ebikelohr.de##+js(set-cookie, COOKIES_NEWACCEPTED, 1)
+eurosender.com##+js(set-cookie, es_cookie_settings_closed, 1)
+melectronics.ch##+js(set-cookie, cookie-banner-acceptance-state, true)
+guard.io##+js(set-cookie, cookie_consent_seen, 1)
+dom.ru##+js(set-cookie, cookieAccepted, true)
+schrottpreis.org##+js(set-cookie, cookie_tag_accepted, true)
+nokportalen.se##+js(set-cookie, cookies_allowed, yes)
+dokiliko.com##+js(set-cookie, tracking, 0)
+valamis.com##+js(set-cookie, valamis_cookie_message, true, , reload, 1)
+valamis.com##+js(set-cookie, valamis_cookie_marketing, false)
+valamis.com##+js(set-cookie, valamis_cookie_analytics, false)
+sverigesingenjorer.se##+js(set-cookie, approvedcookies, no, , reload, 1)
+shop.almawin.de##+js(set-cookie, psd-google-ads-enabled, 0)
+shop.almawin.de##+js(set-cookie, psd-gtm-activated, 1)
+shop.almawin.de##+js(set-cookie, wishlist-enabled, 1)
+textshuttle.com##+js(set-cookie, textshuttle_cookie, true)
+zeitzurtrauer.de##+js(set-cookie, consentInteract, true)
+sumsub.com,atman.pl,fabriziovanmarciano.com,nationalrail.com,eett.gr,funkypotato.com,equalexchange.co.uk,swnsdigital.com##+js(set-cookie, cookielawinfo-checkbox-functional, yes)
+hemglass.se,sumsub.com,atman.pl,fabriziovanmarciano.com,nationalrail.com,eett.gr,funkypotato.com,equalexchange.co.uk,swnsdigital.com##+js(set-cookie, cookielawinfo-checkbox-necessary, yes)
+hemglass.se,sumsub.com,atman.pl,fabriziovanmarciano.com,nationalrail.com,eett.gr,funkypotato.com,equalexchange.co.uk,swnsdigital.com,gogolf.fi,hanse-haus-greifswald.de##+js(set-cookie, viewed_cookie_policy, yes)
+hemglass.se,gogolf.fi##+js(set-cookie, cookielawinfo-checkbox-advertisement, no)
+hemglass.se##+js(set-cookie, cookielawinfo-checkbox-performance, no)
+hemglass.se##+js(set-cookie, cookielawinfo-checkbox-analytics, no)
+skaling.de##+js(set-cookie, cookie-byte-consent-essentials, true)
+skaling.de##+js(set-cookie, cookie-byte-consent-showed, true)
+skaling.de##+js(set-cookie, cookie-byte-consent-statistics, false)
+bringmeister.de##+js(set-cookie, bm_acknowledge, yes)
+leibniz.com##+js(set-cookie, consent, 1)
+project529.com##+js(set-cookie, cookies_ok, true)
+clearblue.com##+js(set-cookie, kali-cc-agreed, true)
+drewag.de,enso.de##+js(set-cookie, cookiesAccepted, true)
+drewag.de,enso.de##+js(set-cookie, allowMarketingCookies, false)
+drewag.de,enso.de##+js(set-cookie, allowAnalyticalCookies, false)
+helitransair.com##+js(set-cookie, privacyLevel, 2, , reload, 1)
+more.com,nwslsoccer.com##+js(set-cookie, AcceptedCookies, 1)
+climatecentral.org##+js(set-cookie, userCookieConsent, true)
+resolution.de##+js(set-cookie, hasSeenCookiePopUp, yes)
+flagma.by##+js(set-cookie, privacyLevel, flagmajob_ads_shown, 1, , reload, 1)
+eatsalad.com##+js(set-cookie, userCookies, true)
+pacstall.dev##+js(set-cookie, privacy-policy-accepted, 1)
+web2.0calc.fr##+js(set-cookie, precmp, 1, , reload, 1)
+de-appletradein.likewize.com##+js(set-cookie, IsCookieAccepted, yes, , reload, 1)
+swissborg.com##+js(set-cookie, gatsby-gdpr-google-tagmanager, true)
+qwice.com##+js(set-cookie, legalOk, true)
+canalpluskuchnia.pl##+js(set-cookie, cp_cc_stats, 1, , reload, 1)
+canalpluskuchnia.pl##+js(set-cookie, cp_cc_ads, 1)
+uizard.io##+js(set-cookie, cookie-disclaimer, 1)
+e-chladiva.cz##+js(set-cookie, gdpr, 1)
+assos.com##+js(set-cookie, accept-cookies, true)
+stmas.bayern.de##+js(set-cookie, statistik, 0)
+novayagazeta.eu##+js(set-cookie, cookies-informer-close, true)
+kinopoisk.ru,yandex.ru##+js(set-cookie, gdpr, 0)
+stmas.bayern.de##+js(set-cookie, required, 1)
+go.netia.pl,polsatboxgo.pl##+js(set-cookie, rodo-reminder-displayed, 1)
+wst.tv##+js(set-cookie, cookie_consent_given, true)
+go.netia.pl,polsatboxgo.pl##+js(set-cookie, rodo-modal-displayed, 1)
+ing.it##+js(set-cookie, ING_GPT, 0)
+ing.it##+js(set-cookie, ING_GPP, 0)
+ing.nl##+js(set-cookie, cookiepref, 1)
+handelsbanken.se##+js(set-cookie, shb-consent-cookies, true)
+secondsol.com##+js(set-cookie, cookies_consent, 1)
+youcom.com.br##+js(set-cookie, termos-aceitos, ok)
+rule34.paheal.net##+js(set-cookie, ui-tnc-agreed, true)
+pnel.de,korodrogerie.de,der-puten-shop.de,katapult-shop.de,evocsports.com,shop.almawin.de,esm-computer.de,calmwaters.de,mellerud.de,akustik-projekt.at,vansprint.de,0815.at,0815.eu,ojskate.com,der-schweighofer.de,tz-bedarf.de,zeinpharma.de,weicon.com,dagvandewebshop.be,thiele-tee.de,carbox.de,riapsport.de,trendpet.de,eheizung24.de,seemueller.com,vivande.de,heidegrill.com,gladiator-fightwear.com,h-andreas.com,pp-parts.com,natuerlich-holzschuhe.de,massivart.de,malermeister-shop.de,imping-confiserie.de,lenox-trading.at,cklenk.de,catolet.de,drinkitnow.de,patisserie-m.de,storm-proof.com,balance-fahrradladen.de,magicpos.shop,zeinpharma.com,sps-handel.net,novagenics.com,butterfly-circus.de,holzhof24.de,w6-wertarbeit.de,fleurop.de,leki.com,extremeaudio.de,taste-market.de,delker-optik.de,stuhl24-shop.de,g-nestle.de,alpine-hygiene.ch,fluidmaster.it,cordon.de,belisse-beauty.de,belisse-beauty.co.uk,wpc-shop24.de,liv.si,leki.com,maybach-luxury.com,leiternprofi24.de##+js(set-cookie, cookie-preference, 1)
+karls-shop.de##+js(set-cookie, cookie-preference-v3, 1)
+firmen.wko.at##+js(set-cookie, consent, true)
+byggern.no##+js(set-cookie, cookies_accepted, yes)
+rostics.ru##+js(set-cookie, set-cookie, cookieAccess, 1)
+hife.es##+js(set-cookie, hife_eu_cookie_consent, 1)
+lilcat.com##+js(set-cookie, cookie-consent, accepted)
+hot.si##+js(set-cookie, permission_marketing_cookies, 0)
+hot.si##+js(set-cookie, permission_statistic_cookies, 0)
+hot.si##+js(set-cookie, permission_funktional_cookies, 1)
+hot.si##+js(set-cookie, cookieconsent, 1)
+dopt.com##+js(set-cookie, dopt_consent, false)
+oxfordonlineenglish.com##+js(set-cookie, ooe_cookie_policy_accepted, no)
+pccomponentes.fr,pccomponentes.com,pccomponentes.pt##+js(set-cookie, accept_cookie, 1)
+oead.at,innovationsstiftung-bildung.at,etwinning.at,arqa-vet.at,zentrumfuercitizenscience.at,vorstudienlehrgang.at,erasmusplus.at##+js(set-cookie, cookieconsent_status_new, 3)
+jeger.pl##+js(set-cookie, _acceptCookies, 1, , reload, 1)
+bo.de##+js(set-cookie, _reiff-consent-cookie, yes)
+thegamingwatcher.com##+js(set-cookie, snc-cp, 1)
+webtv.stofa.dk##+js(set-cookie, cookies-accepted, true)
+plusujemy.pl##+js(set-cookie, cookies-accepted, false)
+melkkobrew.fi##+js(set-cookie, cookies-required, 1, , reload, 1)
+asus.com.cn,zentalk.asus.com##+js(set-cookie, isReadCookiePolicyDNTAa, true)
+trouwenbijfletcher.nl,fletcher.nl,fletcherzakelijk.nl,intermatic.com##+js(set-cookie, acceptCookies, true)
+mubi.com##+js(set-cookie, mubi-cookie-consent, allow)
+asus.com.cn,zentalk.asus.com##+js(set-cookie, isReadCookiePolicyDNT, Yes)
+carsupermarket.com##+js(set-cookie, ce-cookie, N)
+lawrievetgroup.co.uk##+js(set-cookie, ivc_consent, 3)
+59northwheels.se##+js(set-cookie, cookie_accepted, 1)
+foto-gregor.de,kamera-express.de,kamera-express.be,kamera-express.nl,kamera-express.fr,kamera-express.lu##+js(set-cookie, cookie_accepted, false, , reload, 1)
+dhbbank.com,dhbbank.de,dhbbank.be,dhbbank.nl##+js(set-cookie, UserCookieLevel, 1)
+login.ingbank.pl##+js(set-cookie, sat_track, false)
+fabrykacukiernika.pl##+js(set-cookie, Rodo, 1)
+fabrykacukiernika.pl##+js(set-cookie, cookie_privacy_on, 1)
+peaks.com##+js(set-cookie, allow_cookie, false)
+3landesmuseen-braunschweig.de##+js(set-cookie, 3LM-Cookie, false)
+unifachbuch.de##+js(set-cookie, i_sc_a, false)
+unifachbuch.de##+js(set-cookie, i_cm_a, false)
+unifachbuch.de##+js(set-cookie, i_c_a, true)
+playlumi.com##+js(set-cookie, cookies-marketing, false)
+playlumi.com##+js(set-cookie, cookies-functional, true)
+playlumi.com##+js(set-cookie, cookies-preferences, false)
+chatfuel.com##+js(set-cookie, __cf_gdpr_accepted, false)
+studio3t.com##+js(set-cookie, 3t-cookies-essential, 1)
+studio3t.com##+js(set-cookie, 3t-cookies-functional, 1)
+studio3t.com##+js(set-cookie, 3t-cookies-performance, 0)
+studio3t.com##+js(set-cookie, 3t-cookies-social, 0)
+realgap.co.uk##+js(set-cookie, allow_cookies_marketing, 0)
+realgap.co.uk##+js(set-cookie, allow_cookies_tracking, 0)
+realgap.co.uk##+js(set-cookie, cookie_prompt_dismissed, 1)
+realgap.co.uk##+js(set-cookie, cookies_enabled, 1)
+hotelborgia.com##+js(set-cookie, cookie, 1, , reload, 1)
+hotelborgia.com##+js(set-cookie, cookie-analytics, 0)
+sweet24.de##+js(set-cookie, cc-set, 1, , reload, 1)
+zwembaddekouter.be##+js(set-cookie, allowCookies, 1, , reload, 1)
+flixclassic.pl##+js(set-cookie, rgp-gdpr-policy, 1)
+jobtoday.com##+js(set-cookie, jt-jobseeker-gdpr-banner, true, , reload, 1)
+deltatre.com##+js(set-cookie, cookie-preferences-analytics, no)
+deltatre.com##+js(set-cookie, cookie-preferences-marketing, no)
+withings.com##+js(set-cookie, withings_cookieconsent_dismissed, 1)
+withings.com##+js(set-cookie, cookieconsent_advertising, false)
+withings.com##+js(set-cookie, cookieconsent_statistics, false)
+blista.de##+js(set-cookie, cookieconsent_statistics, no)
+blista.de##+js(set-cookie, cookieconsent_essential, yes)
+hashop.nl##+js(set-cookie, cookie_preference, 1)
+gift.be##+js(set-cookie, CP_ESSENTIAL, 1)
+gift.be##+js(set-cookie, CP_PREFERENCES, 1)
+elevator.de,foryouehealth.de,merrell.pl,animaze.us,penn-elcom.com,curantus.de,mtbmarket.de,spanienweinonline.ch,novap.fr,shop.wf-education.com##+js(set-cookie, amcookie_allowed, 1)
+bizkaia.eus##+js(set-cookie, pc_analitica_bizkaia, false)
+bizkaia.eus##+js(set-cookie, pc_preferencias_bizkaia, true)
+bizkaia.eus##+js(set-cookie, pc_tecnicas_bizkaia, true)
+sinparty.com##+js(set-cookie, gdrp_popup_showed, 1)
+jobs.ch,jobup.ch##+js(set-cookie, cookie_consent_accept, true)
+deltatre.com##+js(set-cookie, cookie-preferences-technical, yes)
+depop.com##+js(set-cookie, gdpr__google__analytics, false)
+depop.com##+js(set-cookie, gdpr__depop__functional, true)
+mantel.com##+js(set-cookie, tracking_cookie, 1)
+armedangels.com##+js(set-cookie, cookie-preference, 2)
+armedangels.com##+js(set-cookie, cookie-preference_auto_accept, 1)
+armedangels.com##+js(set-cookie, cookie-preference_renew7, 1)
+e-dojus.lv##+js(set-cookie, pc234978122321234, 1)
+burnesspaull.com##+js(set-cookie, ck_pref_all, 1)
+oncosur.org##+js(set-cookie, ONCOSURCOOK, 2)
+ryanair.com##+js(set-cookie, RY_COOKIE_CONSENT, true)
+refurbished.at,refurbished.nl,refurbished.be,refurbishedstore.de##+js(set-cookie, COOKIE_CONSENT, 1, , reload, 1)
+refurbished.at,refurbished.nl,refurbished.be,refurbishedstore.de##+js(set-cookie, COOKIE_STATIC, false)
+refurbished.at,refurbished.nl,refurbished.be,refurbishedstore.de##+js(set-cookie, COOKIE_MARKETING, false)
+bayernportal.de##+js(set-cookie, cookieConsent, true, , reload, 1)
+bayernportal.de##+js(set-cookie, videoConsent, true)
+bayernportal.de##+js(set-cookie, comfortConsent, true)
+zipjob.com##+js(set-cookie, cookie_consent, 1)
+pricehubble.com##+js(set-cookie, cookieBannerAccepted, 1, , reload, 1)
+ilmotorsport.de##+js(set-cookie, cookieMsg, true, , reload, 1)
+monese.com##+js(set-cookie, accept-cookies, true)
+psbank.ru,myriad.social,exeedme.com,followalice.com##+js(set-cookie, cookie-consent, true)
+aqua-store.fr##+js(set-cookie, abz_seo_choosen, 1)
+voila.ca##+js(set-cookie, privacyAccepted, true)
+anastore.com##+js(set-cookie, cok, 1, , reload, 1)
+app.arzt-direkt.de##+js(set-cookie, ARE_DSGVO_PREFERENCES_SUBMITTED, true)
+dasfutterhaus.at##+js(set-cookie, dsgvo_consent, 1)
+e-pity.pl##+js(set-cookie, efile-cookiename-28, 1)
+fillup.pl##+js(set-cookie, efile-cookiename-74, 1)
+dailymotion.com##+js(set-cookie, cookie_policy_closed, 1, , reload, 1)
+barcawelt.de##+js(set-cookie, gvCookieConsentAccept, 1, reload, ,1)
+lueneburger-heide.de##+js(set-cookie, acceptEssential, 1)
+polizei.bayern.de##+js(set-cookie, baypol_banner, true)
+ourworldofpixels.com##+js(set-cookie, nagAccepted, true)
+polizei.bayern.de##+js(set-cookie, baypol_functional, true)
+jku.at##+js(set-cookie, CookieConsent, OK)
+matkahuolto.fi##+js(set-cookie, CookieConsentV2, YES)
+espacocasa.com,altraeta.it,centrooceano.it,allstoresdigital.com,cultarm3d.de,soulbounce.com,fluidtopics.com,uvetgbt.com,malcorentacar.com,emondo.de,maspero.it,kelkay.com,underground-england.com,vert.eco,turcolegal.com,magnet4blogging.net,moovly.com,automationafrica.co.za,jornaldoalgarve.pt,keravanenergia.fi,kuopas.fi,frag-machiavelli.de,healthera.co.uk,mobeleader.com,powerup-gaming.com,developer-blog.net,medical.edu.mt,deh.mt,bluebell-railway.com,ribescasals.com,javea.com,chinaimportal.com,inds.co.uk,raoul-follereau.org,serramenti-milano.it,cosasdemujer.com,luz-blanca.info,cosasdeviajes.com,safehaven.io,havocpoint.it,motofocus.pl,nomanssky.com,drei-franken-info.de,clausnehring.com,alttab.net,kinderleicht.berlin,kiakkoradio.fi,cosasdelcaribe.es,de-sjove-jokes.dk,serverprofis.de,biographyonline.net,iziconfort.com,sportinnederland.com,natureatblog.com,wtsenergy.com,cosasdesalud.es,internetpasoapaso.com,zurzeit.at,contaspoupanca.pt##+js(set-cookie, viewed_cookie_policy, yes, , reload, 1)
+backmarket.de,backmarket.co.uk,backmarket.es,backmarket.de,backmarket.be,backmarket.at,backmarket.fr,backmarket.gr,backmarket.fi,backmarket.ie,backmarket.it,backmarket.nl,backmarket.pt,backmarket.se,backmarket.sk,backmarket.com##+js(set-cookie, BM_Advertising, false, , reload, 1)
+backmarket.de,backmarket.co.uk,backmarket.es,backmarket.de,backmarket.be,backmarket.at,backmarket.fr,backmarket.gr,backmarket.fi,backmarket.ie,backmarket.it,backmarket.nl,backmarket.pt,backmarket.se,backmarket.sk,backmarket.com##+js(set-cookie, BM_User_Experience, true)
+backmarket.de,backmarket.co.uk,backmarket.es,backmarket.de,backmarket.be,backmarket.at,backmarket.fr,backmarket.gr,backmarket.fi,backmarket.ie,backmarket.it,backmarket.nl,backmarket.pt,backmarket.se,backmarket.sk,backmarket.com##+js(set-cookie, BM_Analytics, false)
+eleven-sportswear.cz,silvini.com,silvini.de,purefiji.cz,voda-zdarma.cz,lesgarconsfaciles.com,ulevapronohy.cz,vitalvibe.eu,plavte.cz,mo-tools.cz,flamantonlineshop.cz,sandratex.cz,norwayshop.cz,3d-foto.cz,neviditelnepradlo.cz,nutrimedium.com,silvini.cz,karel.cz,neviditelnepradlo.cz,silvini.sk##+js(set-cookie, DmCookiesAccepted, true, , reload, 1)
+eleven-sportswear.cz,silvini.com,silvini.de,purefiji.cz,voda-zdarma.cz,lesgarconsfaciles.com,ulevapronohy.cz,vitalvibe.eu,plavte.cz,mo-tools.cz,flamantonlineshop.cz,sandratex.cz,norwayshop.cz,3d-foto.cz,neviditelnepradlo.cz,nutrimedium.com,silvini.cz,karel.cz,neviditelnepradlo.cz,silvini.sk##+js(set-cookie, DmCookiesMarketing, false)
+eleven-sportswear.cz,silvini.com,silvini.de,purefiji.cz,voda-zdarma.cz,lesgarconsfaciles.com,ulevapronohy.cz,vitalvibe.eu,plavte.cz,mo-tools.cz,flamantonlineshop.cz,sandratex.cz,norwayshop.cz,3d-foto.cz,neviditelnepradlo.cz,nutrimedium.com,silvini.cz,karel.cz,neviditelnepradlo.cz,silvini.sk##+js(set-cookie, DmCookiesAnalytics, false)
+book-n-drive.de##+js(set-cookie, cookietypes, OK)
+cotswoldoutdoor.com,cotswoldoutdoor.ie##+js(set-cookie, consent_setting, OK, , reload, 1)
+cam.start.canon##+js(set-cookie, user_accepts_cookies, true)
+usnews.com##+js(set-cookie, gdpr_agreed, 4)
+researchaffiliates.com##+js(set-cookie, ra-cookie-disclaimer-11-05-2022, true)
+singkinderlieder.de##+js(set-cookie, acceptMatomo, true)
+store.ubisoft.com##+js(set-cookie, UBI_PRIVACY_POLICY_ACCEPTED, true)
+store.ubisoft.com##+js(set-cookie, UBI_PRIVACY_POLICY_VIEWED, true)
+store.ubisoft.com##+js(set-cookie, UBI_PRIVACY_VID_OPTOUT, false)
+store.ubisoft.com##+js(set-cookie, UBI_PRIVACY_VIDEO_OPTOUT, false)
+ba.com,britishairways.com##+js(set-cookie, BRITISHAIRWAYS_ENSIGHTEN_PRIVACY_BANNER_LOADED, 1)
+ba.com,britishairways.com##+js(set-cookie, BRITISHAIRWAYS_ENSIGHTEN_PRIVACY_BANNER_VIEWED, 1)
+ba.com,britishairways.com##+js(set-cookie, BRITISHAIRWAYS_ENSIGHTEN_PRIVACY_Functional, 1)
+cineman.pl,tv-trwam.pl##+js(set-cookie, ARE_FUNCTIONAL_COOKIES_ACCEPTED, true)
+cineman.pl,tv-trwam.pl##+js(set-cookie, ARE_MARKETING_COOKIES_ACCEPTED, true)
+cineman.pl,tv-trwam.pl##+js(set-cookie, ARE_REQUIRED_COOKIES_ACCEPTED, true)
+tv-trwam.pl##+js(set-cookie, HAS_COOKIES_FORM_SHOWED, true)
+qatarairways.com##+js(set-cookie, accepted_functional, yes)
+qatarairways.com##+js(set-cookie, accepted_marketing, no)
+qatarairways.com##+js(set-cookie, allow_the_cookie, yes)
+qatarairways.com##+js(set-cookie, cookie_visited, true)
+qatarairways.com##+js(set-cookie, drcookie, true)
+wedding.pl##+js(set-cookie, wed_cookie_info, 1)
+vivaldi.com##+js(set-cookie, acceptedCookies, true)
+emuia1.gugik.gov.pl##+js(set-cookie, cookieMessageHide, true)
+nike.com##+js(set-cookie, sq, 0)
+adidas.at,adidas.be,adidas.ca,adidas.ch,adidas.cl,adidas.co,adidas.co.in,adidas.co.kr,adidas.co.nz,adidas.co.th,adidas.co.uk,adidas.com,adidas.com.ar,adidas.com.au,adidas.com.br,adidas.com.my,adidas.com.ph,adidas.com.vn,adidas.cz,adidas.de,adidas.dk,adidas.es,adidas.fi,adidas.fr,adidas.gr,adidas.ie,adidas.it,adidas.mx,adidas.nl,adidas.no,adidas.pe,adidas.pl,adidas.pt,adidas.ru,adidas.se,adidas.sk##+js(set-cookie, notice_preferences, 2)
+colourbox.com##+js(set-cookie, cookie_consent_all, 1)
+ebilet.pl##+js(set-cookie, eb_cookie_agree, 1)
+myeventeo.com##+js(set-cookie, cookiesPolicy20211101, 1)
+snap.com##+js(set-cookie, sc-cookies-accepted, true)
+ratemyprofessors.com##+js(set-cookie, ccpa-notice-viewed-02, true)
+filen.io##+js(set-cookie, cookieConsent, yes)
+leotrippi.com,restaurantclub.pl,context.news##+js(set-cookie, cookieConsent, true)
+stilord.com,stilord.pl,stilord.de,stilord.fr##+js(set-cookie, plenty-shop-cookie, 0)
+quantamagazine.org##+js(set-cookie, acceptedPolicy, true)
+followalice.com##+js(set-cookie, cookie-consent, false)
+scaleway.com##+js(set-cookie, consent-analytics, false)
+hellotv.nl##+js(set-cookie, cookieConsentClosed, true)
+lasestrellas.tv##+js(set-cookie, _tvsPrivacy, true)
+hair-body-24.de,shopforyou47.de,kreativverliebt.de,anderweltverlag.com,octavio-shop.com,forcetools-kepmar.eu,fantecshop.de,hexen-werkstatt.shop,shop-naturstrom.de,biona-shop.de,camokoenig.de,bikepro.de,kaffeediscount.com,vamos-skateshop.com,holland-shop.com,avonika.com##+js(set-cookie, epCookieConsent, 0, , reload, 1)
+hurton.pl##+js(set-cookie, is_allowed_client_traking_niezbedne, 1, , reload, 1)
+officesuite.com##+js(set-cookie, intro, true)
+fups.com##+js(set-cookie, SeenCookieBar, true)
+songtradr.com##+js(set-cookie, cpaccpted, true)
+fups.com##+js(set-cookie, AllowCookies, true)
+scienceopen.com##+js(set-cookie, cookiesAccepted, 3)
+moebel-mahler-siebenlehn.de##+js(set-cookie, optOutsTouched, true)
+moebel-mahler-siebenlehn.de##+js(set-cookie, optOutAccepted, true)
+buidlbox.io##+js(set-cookie, cookiesAccepted, true)
+calendly.com##+js(set-cookie, gdpr_dismissal, true)
+batesenvironmental.co.uk##+js(set-cookie, analyticsCookieAccepted, 0)
+batesenvironmental.co.uk##+js(set-cookie, cookieAccepted, 0)
+ubereats.com##+js(set-cookie, uev2.gg, true)
+101internet.ru##+js(set-cookie, closeNotificationAboutCookie, true)
+bein.com,beinsports.com##+js(set-cookie, use_cookie, 1)
+tunnelmb.net##+js(set-cookie, cookie-policy, true)
+figshare.com##+js(set-cookie, figshareCookiesAccepted, true)
+hitado.de##+js(set-cookie, allowCookie, 1, , reload, 1)
+bitso.com##+js(set-cookie, bitso_cc, 1)
+gallmeister.fr##+js(set-cookie, eg_asked, 1)
+eco-toimistotarvikkeet.fi,proficient.fi##+js(set-cookie, AcceptKeksit, 0, , reload, 1)
+developer.ing.com##+js(set-cookie, cookiepref, true)
+larian.com##+js(set-cookie, cookie_analytcs, false, , reload, 1)
+larian.com##+js(set-cookie, cookie_accept, true)
+webtrack.dhlglobalmail.com,webtrack.dhlecs.com##+js(set-cookie, dhl-webapp-track, allowed)
+ehealth.gov.gr##+js(set-cookie, cookieconsent_status, 1)
+calvinklein.se,calvinklein.fi,calvinklein.sk,calvinklein.si,calvinklein.ch,calvinklein.ru,calvinklein.com,calvinklein.pt,calvinklein.pl,calvinklein.at,calvinklein.nl,calvinklein.hu,calvinklein.lu,calvinklein.lt,calvinklein.lv,calvinklein.it,calvinklein.ie,calvinklein.hr,calvinklein.fr,calvinklein.es,calvinklein.ee,calvinklein.de,calvinklein.dk,calvinklein.cz,calvinklein.bg,calvinklein.be,calvinklein.co.uk##+js(set-cookie, PVH_COOKIES_GDPR, Accept)
+calvinklein.se,calvinklein.fi,calvinklein.sk,calvinklein.si,calvinklein.ch,calvinklein.ru,calvinklein.com,calvinklein.pt,calvinklein.pl,calvinklein.at,calvinklein.nl,calvinklein.hu,calvinklein.lu,calvinklein.lt,calvinklein.lv,calvinklein.it,calvinklein.ie,calvinklein.hr,calvinklein.fr,calvinklein.es,calvinklein.ee,calvinklein.de,calvinklein.dk,calvinklein.cz,calvinklein.bg,calvinklein.be,calvinklein.co.uk##+js(set-cookie, PVH_COOKIES_GDPR_SOCIALMEDIA, Reject)
+calvinklein.se,calvinklein.fi,calvinklein.sk,calvinklein.si,calvinklein.ch,calvinklein.ru,calvinklein.com,calvinklein.pt,calvinklein.pl,calvinklein.at,calvinklein.nl,calvinklein.hu,calvinklein.lu,calvinklein.lt,calvinklein.lv,calvinklein.it,calvinklein.ie,calvinklein.hr,calvinklein.fr,calvinklein.es,calvinklein.ee,calvinklein.de,calvinklein.dk,calvinklein.cz,calvinklein.bg,calvinklein.be,calvinklein.co.uk##+js(set-cookie, PVH_COOKIES_GDPR_ANALYTICS, Reject)
+ofdb.de##+js(set-cookie, ofdb_werbung, Y, , reload, 1)
+dtksoft.com##+js(set-cookie, user_cookie_consent, 1)
+serverstoplist.com##+js(set-cookie, STAgreement, 1)
+tampereenratikka.fi##+js(set-cookie, cookielawinfo-checkbox-necessary, yes)
+tampereenratikka.fi##+js(set-cookie, cookielawinfo-checkbox-markkinointi, no)
+tampereenratikka.fi##+js(set-cookie, cookielawinfo-checkbox-tilastointi, no)
+tampereenratikka.fi##+js(set-cookie, viewed_cookie_policy, no)
+onnibus.com##+js(set-cookie, functionalCookies, true)
+onnibus.com##+js(set-cookie, contentPersonalisationCookies, false)
+onnibus.com##+js(set-cookie, marketingCookies, false)
+onnibus.com##+js(set-cookie, statisticalCookies, false)
+! set-local-storage-item
+omroepbrabant.nl##+js(set-local-storage-item, psh:cookies-other, false)
+omroepbrabant.nl##+js(set-local-storage-item, psh:cookies-seen, true)
+omroepbrabant.nl##+js(set-local-storage-item, psh:cookies-social, true)
+wunderground.com##+js(set-local-storage-item, wu.ccpa-toast-viewed, true)
+eversports.de##+js(set-local-storage-item, dnt, 1)
+eversports.de##+js(set-local-storage-item, dnt_a, 1)
+makerz.me##+js(set-local-storage-item, makerz_allow_consentmgr, 0)
+atlas.workland.com##+js(set-local-storage-item, cookie-consent, true)
+reebok.eu##+js(set-local-storage-item, SHOW_COOKIE_BANNER, no)
+alfa.com.ec,rts.com.ec,tropicalida.com.ec##+js(set-local-storage-item, CookiesConsent, 1)
+beermerchants.com##+js(set-local-storage-item, amCookieBarFirstShow, 1)
+saamexe.com##+js(set-local-storage-item, acceptedCookies, false)
+saamexe.com##+js(set-local-storage-item, viewedCookieBanner, true)
+app.bionic-reading.com##+js(set-local-storage-item, accept_all_cookies, false)
+nloto.ru##+js(set-local-storage-item, isCookies, 1)
+librinova.com##+js(set-local-storage-item, cookieconsent_status, false)
+format.bike##+js(set-local-storage-item, user_cookie, 1)
+khanacademy.org##+js(set-local-storage-item, ka:4:legal-updates, true)
+etelecinema.hu##+js(set-local-storage-item, cok, true)
+konicaminolta.com##+js(set-local-storage-item, cookieMessage, true)
+soquest.xyz##+js(set-local-storage-item, soCookiesPolicy, 1)
+region-bayreuth.de##+js(set-local-storage-item, GDPR:RBI:accepted, false)
+auth.hiring.amazon.com##+js(set-local-storage-item, cookieConsent, true)
+nationalexpress.de##+js(set-local-storage-item, contao-privacy-center.hidden, 1)
+go.bkk.hu##+js(set-local-storage-item, cookie_consent, false)
+bazaartracker.com##+js(set-local-storage-item, cookiesAgree, true)
+subscribercounter.com##+js(set-local-storage-item, ytsc_accepted_cookies, true)
+app.klarna.com##+js(set-local-storage-item, safe-storage/v1/tracking-consent/trackingConsentMarketingKey, false)
+app.klarna.com##+js(set-local-storage-item, safe-storage/v1/tracking-consent/trackingConsentAdvertisingKey, false)
+app.klarna.com##+js(set-local-storage-item, safe-storage/v1/tracking-consent/trackingConsentAnalyticsKey, false)
+instantspoursoi.fr##+js(set-local-storage-item, agreeToCookie, false)
+thealliance.ai##+js(set-local-storage-item, AI Alliance_ReactCookieAcceptance_hasSetCookies, true)
+temu.com##+js(set-local-storage-item, cookie_prompt_times, 1)
+vivenu.com##+js(set-local-storage-item, cookie-ack-2, true)
+librumreader.com##+js(set-local-storage-item, firstVisit, false)
+visnos.com##+js(set-local-storage-item, 2020-04-05, 1)
+polypane.app##+js(set-local-storage-item, dismissed, true)
+changelly.com##+js(set-local-storage-item, SET_COOKIES_APPROVED, true)
+glose.com##+js(set-local-storage-item, hasAcceptedCookies, true)
+yellow.systems##+js(set-local-storage-item, isCookiesNotificationHidden, true)
+renebieder.com##+js(set-local-storage-item, agreed-cookies, true)
+goodram.com##+js(set-local-storage-item, consentCookie, true)
+starwalk.space##+js(set-local-storage-item, SWCOOKIESACC, 1)
+codedead.com##+js(set-local-storage-item, hasAcceptedCookieNotice, true)
+studiofabiobiesel.com##+js(set-local-storage-item, fb-cookies-accepted, false)
+fydeos.com,fydeos.io##+js(set-local-storage-item, is_accept_cookie, true)
+jove.com##+js(set-local-storage-item, accept-jove-cookie, 1)
+argent.xyz##+js(set-local-storage-item, cookie_consent_bar_value, true)
+pixeden.com##+js(set-local-storage-item, pxdn_cookie_consent, true)
+akasha.org##+js(set-local-storage-item, akasha__cookiePolicy, true)
+ashleyfurniture.com##+js(set-local-storage-item, QMOptIn, false)
+5sim.net##+js(set-local-storage-item, isCookiesAccepted, true)
+safe.global##+js(set-local-storage-item, safe.global, false)
+jibjab.com##+js(set-local-storage-item, cookie_banner:hidden, true)
+filmzie.com##+js(set-local-storage-item, cookiesAccepted, false)
+vietjetair.com##+js(set-local-storage-item, accept_cookie_policy, true)
+betterprogramming.pub,medium.com,500ish.com,gitconnected.com,bettermarketing.pub,diylifetech.com,thebolditalic.com,writingcooperative.com,fanfare.pub,betterhumans.pub##+js(set-local-storage-item, 201805-policy|accepted, 1)
+kick.com##+js(set-local-storage-item, kick_cookie_accepted, true)
+jimdosite.com##+js(set-local-storage-item, cookies-selected, true)
+streamclipsgermany.de##+js(set-local-storage-item, cookiesAccepted, true)
+evernote.com##+js(set-local-storage-item, cookie-notice-dismissed, true)
+evernote.com##+js(set-local-storage-item, accepts-cookie-notice, true)
+octopusenergy.co.jp##+js(set-local-storage-item, dismissedPrivacyCookieMessage, 1)
+happiful.com##+js(set-local-storage-item, cookie_consent, false)
+improvethenews.org,plente.com##+js(set-local-storage-item, cookiePolicy, true)
+findmcserver.com##+js(set-local-storage-item, allowCookies, allowed)
+schneideranwaelte.de,traefik.io##+js(set-local-storage-item, cookie_consent, true)
+cityfalcon.ai##+js(set-local-storage-item, cookies_policy_status, true)
+digitalparking.city##+js(set-local-storage-item, cookies-accepted, true)
+vitotechnology.com##+js(set-local-storage-item, SWCOOKIESACC, 1)
+mediathekviewweb.de##+js(set-local-storage-item, allowCookies, true)
+solana.com##+js(set-local-storage-item, cookie_consent, 1)
+ef.co.id##+js(set-local-storage-item, accepted-cookies, true)
+alohafromdeer.com##+js(set-local-storage-item, cookies-consent, 0)
+fwd.com##+js(set-local-storage-item, cookieBannerRead, true)
+everywhere.game##+js(set-local-storage-item, acceptCookie, 0)
+fwd.com##+js(set-local-storage-item, cookieBannerReadDate, 1)
+geotastic.net##+js(set-local-storage-item, privacy-policy-accepted, true)
+worstbassist.com##+js(set-local-storage-item, cookies-selected, true)
+tattoodo.com##+js(set-local-storage-item, accepted_cookies, true)
+tattoodo.com##+js(set-local-storage-item, accepted_cookie, true)
+virginexperiencedays.co.uk##+js(set-local-storage-item, cookie-consent, true)
+evernote.com##+js(set-local-storage-item, accepts-cookie-notice, true)
+emag.berliner-woche.de,nordkurier.de##+js(set-local-storage-item, consentManager_shown, true)
+emag.berliner-woche.de,nordkurier.de##+js(set-local-storage-item, consent_necessary, true)
+emag.berliner-woche.de,nordkurier.de##+js(set-local-storage-item, consent_performance, false)
+everest-24.pl##+js(set-local-storage-item, cookie-closed, true)
+zave.it##+js(set-local-storage-item, framerCookiesDismissed, true)
+everest-24.pl##+js(set-local-storage-item, cookie-accepted, false)
+sneakerfreaker.com,cryptofalka.hu##+js(set-local-storage-item, cookieConsent, 1)
+walmart.ca##+js(set-local-storage-item, enableCookieBanner, false)
+flyingblue.com##+js(set-local-storage-item, cookie-consent-level, 1)
+byfood.com##+js(set-local-storage-item, byFoodCookiePolicyRequire, false)
+andsafe.de##+js(set-local-storage-item, ascookie--decision, true)
+edostavka.by,emall.by##+js(set-local-storage-item, isAcceptCookiesNew, true)
+onexstore.pl##+js(set-local-storage-item, marketing, false)
+onexstore.pl##+js(set-local-storage-item, technical, true, , reload, 1)
+onexstore.pl##+js(set-local-storage-item, analytics, false)
+eezy.nrw##+js(set-local-storage-item, contao-privacy-center.hidden, 1)
+evropochta.by##+js(set-local-storage-item, otherCookie, true)
+evropochta.by##+js(set-local-storage-item, saveCookie, true)
+hitado.de##+js(set-local-storage-item, hide-cookie-permission-1, true)
+inselberlin.de##+js(set-local-storage-item, userAcceptsCookies, 1)
+gronkh.tv##+js(set-local-storage-item, grnk-cookies-accepted, true)
+parrotsec.org##+js(set-local-storage-item, cookieConsent, true)
+dorkgpt.com##+js(set-local-storage-item, cookieConsent, false)
+adfilteringdevsummit.com##+js(set-local-storage-item, acceptCookies, no)
+learngerman.dw.com##+js(set-local-storage-item, hasAcceptedGdpr, true)
+garageproject.co.nz##+js(set-local-storage-item, accepted_cookies, true)
+gostanford.com##+js(set-local-storage-item, cookies-accept, true)
+namensetiketten.de##+js(set-local-storage-item, load-scripts-v2, 2)
+drafthound.com##+js(set-local-storage-item, acceptsAnalyticsCookies, false)
+drafthound.com##+js(set-local-storage-item, acceptsNecessaryCookies, true)
+wokularach.pl##+js(set-local-storage-item, display_cookie_modal, false)
+bidup.amtrak.com##+js(set-local-storage-item, pg-accept-cookies, true)
+eschuhe.de##+js(set-local-storage-item, __EOBUWIE__consents_accepted, true, , reload, 1)
+revanced.app##+js(set-local-storage-item, analytics, false)
+bahnland-bayern.de##+js(set-local-storage-item, contao-privacy-center.hidden, 1)
+flyingpapers.com##+js(set-local-storage-item, FP_cookiesAccepted, true)
+beta.character.ai##+js(set-local-storage-item, VISITED_0, true)
+beta.character.ai##+js(set-local-storage-item, OPTIONAL_COOKIES_ACCEPTED_0, true)
+bittimittari.fi##+js(set-local-storage-item, storagePermission, true)
+! set-session-storage-item
+erco.com##+js(set-session-storage-item, cookieMessageDisagree, true)
+smartwielen.lu##+js(set-session-storage-item, terms-and-policy-accepted, true)
+c6bank.com.br##+js(set-session-storage-item, ACCEPT_LGPD, true)
+gedik.com##+js(set-session-storage-item, acceptCookies, false)
+! acis
+vorteilshop.com,hagengrote.de##+js(acis, $, #modal-consent)
+sanha-shop.com##+js(acis, spanLinkClick, #cookiebanner)
+wizardshop.su##+js(acis, alertCookie)
+aphorisma.de,aphorisma-verlag.eu,aphorisma.org##+js(acis, doOnce)
+romshub.com##+js(acis, $, #kuk)
+stadtundgruen.de##+js(acis, $, #contentwrap)
+tredy-fashion.de##+js(acis, jQuery, synchronizeCookieNoteCookie)
+hildegardis-krankenhaus.de,st-agatha-krankenhaus.de##+js(acis, document.createElement, consent.cookiebot.com)
+connect.de##+js(acis, document.createElement, delivery/cmp)
+archiveofourown.org##+js(acis, $j, acceptTOS)
+! Admiral popups
+titantv.com,musicfeeds.com.au,minecraftalpha.net,worldpopulationreview.com,boston.com,britannica.com,download.mokeedev.com,freep.com,ijr.com,inquirer.net,legacy.com,nationalreview.com,nofilmschool.com,order-order.com,savvytime.com,techlicious.com,technicpack.net,thedraftnetwork.com,wrestlezone.com##+js(acis, document.createElement, admiral)
+! :remove()
+topographic-map.com###moduleCookies:remove()
+schwarzenbacher-kundl.at###CookieWrapper:remove()
+e-comas.com###ask-consent:remove()
+! (style="height: 0px;") scroll lock
+die-badgestalter.de##*:style(height: auto !important;)
+cursorinfo.co.il###cmp-iframe
+cursorinfo.co.il##body:style(overflow: auto !important)
+!! .modal/.modal-backdrop
+shelfnow.co.uk,dt.mef.gov.it,vinkylen.se,beststuff.hu,raffeldeals.com,strazmiejska.gda.pl,nunzium.com,lojista.rovitex.com.br,autoczescizielonki.pl,angelplatz.de,muellers-muehle.de,brainzap.de,waven-game.com,bankinter.com,atlasformen.ca,atlasformen.ch,atlasformen.nl,atlasformen.fr,atlasformen.ch,flaxmanestates.com,portalridice.cz,inland-casas.com,greenpandagames.com,amd.by,mrcrayfish.com,fruugonorge.com,incibeauty.com,nemtakeaway.dk,fruugo.fr,gekko-computer.de,moneytalkgo.com,oesterreichsenergie.at,stiftungsland.de,mesanalyses.fr,jysk.al,hela-shop.eu,localparticl.com,jobagent.ch,edeltalk.ticket.io,intercars.ro,kocbayi.com.tr,platnik.e-pity.pl,auth.leaseweb.com,spoutible.com,rajsvitidel.cz,nutsinbulk.eu,nutsinbulk.ie,nutsinbulk.co.uk,ben.nl,educado.pl,fruugo.se,elearningindustry.com,ispot.pl,uzsi.cz,akcr.cz,log.cz,domov-senioru-praha.cz,play-cricket.com,1pmobile.com,droitconstitutionnel.org,worldarchitecture.org,r-stahl.com,verwaltungs-jobs.ch,andwork.com,dyzurnet.pl,unobike.com,libenflex.com,centres-vaccination.fr,0rechner.de,hagengrote.ch,undelucram.ro,inno.be,schwalbetires.com,zill.de,hiwio.com,cfos-emobility.de,eurizon.hu,ker.mvmnext.hu,manthorpebp.co.uk,uniqueshop.gr,mprj.mp.br,paz.de,brotagonist.de,georg.at,towerhousewares.co.uk,negrini.com,lokalplus.nrw,arche.net,selexium.com,gesundheitsamt-bw.de,multipower.com,tu-clausthal.de,smb.museum,kopp-verlag.de,kodiko.gr,netz-noe.at,migration.qld.gov.au,rotork.com,pitstop.de,ostermaier.de,tarifcheck.de,seat-schneider.de,reichstein-opitz.de,fapyc.es,fit.technology,hallie-vanklooster.nl,liebeautos.de,gelderundsorg.de,misericordia-sesto.it,juguetesquevedos.com,marketingalumni.de,simac.fr,hoy-voy.com,petitieonline.com,petycjeonline.com,peticie.com,peticiq.com,architekturbedarf.de,eh-ludwigsburg.de,bakertilly-ca.com,quantelectronic.de,krungsricard.com,businesslincolnshire.com,zippity-outdoor.com,online.smith.com.ro,homedesignshops.nl,hotelnatureoviedo.com,loslagosnature.com,puebloastur.com,hosteriadetorazo.com,hotelesnature.com,finanzasparatodos.es,asfinag.at,reflects.com,capveriant.com,freyerleben.de,glibl.fr,reederei-frisia.de,deco-et-ambiances.fr,yurmax.cz,risikolebensversicherung.com,ammerlaender-versicherung.de,vestel-germany.de,detske-dekorace-lunami.cz,hatten.dk,graewe-shop.de,safenames.net,mykal.de,autobahn.de,zsamskrovi.cz,wambamfence.com,bestoftechnic.de,themisbar.com,trading.com,ocaso.es,kontrast.dk,mindtile.com,inforata.com,katholisch1.tv,teamaretuza.com,highlight-led.de,hemdenbox.de,shop.spd.de,vautron.de,wark24.de,openfinancebrasil.org.br,gartenversandhaus.de,ujam.com,unkrautfuchs.de,einrichten-design.de,starclassifieds.com,vernouillet28.fr,dealstunter.nl,4dimension.de,klascement.net,dalatrafik.se,villa-selvatico.com,eurodata.de,patnbk.com.tw,lascarrerasdecaballos.com,rowenta.gr,selexium-groupe.com,elevatr.com,gibbscam.com,kupfersmetzgermarkt.de,devoordeelmarkt.nl,farmfoods.co.uk,aucotec.com,ilcambiamento.it,adressit.com,growtopiagame.com,activeplacespower.com,globalcause.co.uk,moulinex.gr,renee.pl,onecall.no,check24-partnerprogramm.de,buddeautomobile.de,ractem.fr,libreriaproteo.com,bestexamszaragoza.com,psoemalaga.es,ractem.es,masterpro-collection.com,palafoxhoteles.com,ractem.de,ikasa.es,psicoaragon.es,rafer.es,mensagia.com,integratecnologia.es,netzteam.net,mainfer.com,grupointegra.es,highas.es,exxacon.cl,gestoriarubio.com,cerasroura.com,lacasonacasarural.com,bluefort.com,veteranemployment.co.uk,comprarenvalencia.com,hotel-oriente.com,grupousieto.com,mentolin.es,todolicenciaspty.com,compro-oro.eu,energydrink.fr,avanzartransportes.com,via-cg.com,estagilize.com.br,depildiodo.com,azmark.es,granfestival.es,inmopatraix.com,ticx.fr,mimpo.com,donamatilde.pt,srovpraxi.sk,crazypatterns.net,emk.de,netbox.cz,nanguang.de,druckweiterverarbeitung.de,surgestaffing.com,fordbdt.ro,ford-rulate.ro,isobil.com.tr,vintagebazaar.pt,solgar.com,greens-efa.eu,firmensms.at,lubexpert.ro,wolf-und-kollegen.de,manufactura-eggenburg.at,abser-t.com,automeister.hu,stardance.at,derwinkelhofer.at,restaurantelasarten.com,unfallvertretung.at,fiselgraf.es,topografica.net,restauranteseiruga.com,boller-binzen.de,autonet-group.ro,metallbearbeitung-wendt.de,automeister.ro,sesiasoft.com,camaracompostela.com,camaracoruna.com,sorteosamedida.com,cuponmobile.com,kiennast.at,elpidajob.gr,listapromos.com,clinicakorall.ro,fnapip.ro,mediadesign.at,efestarnow.pl,enerin.it,hotel-liszt.de,fegas.net,tradingsystems.it,almacenerotico.com,specialdiesel.com,nsa.bg,kolorslab.com,louisvilleladder.com,monkmakes.com,centro-shalom.com,autocheckcenter.ro,freefestival.co.uk,primaenergia.hu,icoiig.es,autonet-group.hu,gripumps.com,bja-augsburg.de,asadorderoxos.com,inkmaker.com,ikb.at,carglass.es,pharmindex-online.hu,mcahandicap.fr,acropole.fr,sirops.fr,taravoyages.com,commentreparer.com,sierranevada.es,1mmo.at,4-pfoten-fuer-sie.de,60k.com,a1.si,academiahotels.at,aplitop.com,aquafex.at,arbeiterkammer.at,archeshousing.org.uk,art-immobilien.at,audioweb.ro,ausflugstipps.at,austriareal.com,autoescuelalaflota.com,autonet-group.com,avis.com.tr,bazzar.rs,benimetal.com,berlinguainternationalschool.com,bianchi.sk,bluorbank.lv,bogner-eshop.cz,bonyplus.cz,bootsfuehrerschein.de,bopla.de,born2be.pl,box24corp.com,budget.com.tr,centerzaizobrazevanje.si,chez-nestor.com,cityreal.at,clubcode.bg,clubnuoveidee.it,covea-finance.com,cpratts.co.uk,crossfit-westerwald.de,cybernetix.fr,d-power-modellbau.com,dakcoatingnoord.nl,danesemilano.com,danneelsnv.be,davorin.sk,dcmemba.eu,defence.hu,der-druckerprofi.de,digiwallet.nl,doc-du-juriste.com,dockx.be,domainvendor.com,donauimmo.at,donauregion.at,drblitz-weblab.com,e-acceptgiro.nl,e-mobilbw.de,easyphp.org,edukacentar.hr,eichhorn-kinderwagen.de,eiendomspriser.no,elgusto.es,emobil-sw.de,enva.com,erfurt-tourismus.de,etsba.sk,etudes-et-analyses.com,eucoc.cloud,europcar.com.mx,excellent-hemd.de,fagorcommercial.com,fagorprofessional.pl,fitnesscamp-westerwald.de,flenhealth.com,fresh-jobs.uk,ftejerez.com,gamoni.de,gap360.com,gap360.de,gcorpgroup.com,gmgurban.com,gocollette.com,golnanpuratos.com,gorna-austria.pl,grazer.at,gruppocenseo.com,h-tec.us,heinz-glas.com,helbig.be,helpfulmonsters.com,heyupnow.com,hierwohnich.at,hot.at,hubitools.com,icmf.es,idlesband.com,idoctors.it,ifrs.org,ilmioartigiano.lvh.it,immo-gith.at,immo-knoll.com,immoagency.at,immogeidorf.at,immoi.at,innviertel-tourismus.at,inselradio.com,internetlekarna.cz,isabellefontaine.ca,ivolta.pl,ivoxpanel.be,jetspirit.be,jobijoba.de,jobscout24.ch,jouwictvacature.nl,just-gregory.net,kap4613.at,kocca.it,kultur.bz.it,kupzidle.cz,laboconnect.com,lasertack.com,lekarna-oaza.cz,lekarnasvjosefa.cz,lesaco.de,levi.com.bo,levi.com.py,liblox.com,lnl.com.hk,loca-linge.com,m3panel.no,m3panel.se,madmaxfashion.cz,maene.com,maklerpoint.at,manageritalia.it,manoferro.net,market.com.br,maximiles.co.uk,maximiles.com,medvidkovehracky.cz,mega.be,mega.nl,meinhandwerker.lvh.it,meinungsplatz.de,mh-stavebnictvi.cz,midwestbankcentre.com,miramodel.com,mirnockbauern.at,modellbau-metz.com,msvhousing.co.uk,muehlviertel.at,mycourant.com,nationaalbespaarcentrum.nl,nbanka.si,ncad.ie,nfe.de,noodweer.be,numares.us,oberoesterreich.at,oekb.at,opendesc.com,opendxmglobalx.com,openpdm.com,osimis.io,oventrop.com,p-plus.nl,packgo.es,paravol.org,patrouillesuisseshop.ch,phase-6.de,pimido.com,promondo.de,puratos.be,puratos.bg,puratos.co.id,puratos.co.jp,puratos.com.ar,puratos.com.au,puratos.com.my,puratos.fr,puratos.md,puratos.nl,puratos.pt,qastack.com.de,radniodnosi.hr,rbnainfo.com,readyart.fr,restaurants.st,reviewmeta.com,ridewill.it,sabadellpagofacil.com,sakral-orgel.de,samostojno-podjetnistvo.si,segeln-lernen.de,selectiepunt.nl,senosan.com,shopping.st,slimbee.cz,smythstoys.com,spacek.sk,sportbootfuehrerschein.de,sports.admiral.at,spsobor.ru,standaardboekhandel.be,studentenwerk-dresden.de,suedtirol.live,syder.es,synchrone.be,tamarine.com.br,targetmedia.eu,targetpay.com,targetsms.nl,taschen.com,tea4you.de,teamreal.at,ter-as.pt,thechillidoctor.sk,therealestate.at,tmleuven.be,tradeweb.com,trend-immotreuhand.at,trendy-mama.sk,trucksbook.eu,ttieurope.com,ttisuccessinsights.fr,tuwien.at,uni-mozarteum.at,upperaustria.com,viennaestate-makler.com,vinzenztreff.de,vivuspagofacil.es,wanderreitershop.com,wbimmo.at,weareknitters.de,wefit.club,wels.at,western.com.ph,witter-towbars.co.uk,wng.at,xm.com,xmarabia.net,xmtrading.com,zonercloud.com##.modal
+shelfnow.co.uk,dt.mef.gov.it,vinkylen.se,beststuff.hu,raffeldeals.com,strazmiejska.gda.pl,nunzium.com,lojista.rovitex.com.br,autoczescizielonki.pl,angelplatz.de,muellers-muehle.de,brainzap.de,waven-game.com,bankinter.com,atlasformen.ca,atlasformen.ch,atlasformen.nl,atlasformen.fr,atlasformen.ch,flaxmanestates.com,portalridice.cz,inland-casas.com,greenpandagames.com,amd.by,mrcrayfish.com,fruugonorge.com,incibeauty.com,nemtakeaway.dk,fruugo.fr,gekko-computer.de,moneytalkgo.com,oesterreichsenergie.at,stiftungsland.de,mesanalyses.fr,jysk.al,hela-shop.eu,localparticl.com,jobagent.ch,edeltalk.ticket.io,intercars.ro,kocbayi.com.tr,platnik.e-pity.pl,auth.leaseweb.com,spoutible.com,rajsvitidel.cz,nutsinbulk.eu,nutsinbulk.ie,nutsinbulk.co.uk,ben.nl,educado.pl,fruugo.se,elearningindustry.com,ispot.pl,uzsi.cz,akcr.cz,log.cz,domov-senioru-praha.cz,play-cricket.com,1pmobile.com,droitconstitutionnel.org,worldarchitecture.org,r-stahl.com,verwaltungs-jobs.ch,andwork.com,dyzurnet.pl,unobike.com,libenflex.com,centres-vaccination.fr,0rechner.de,hagengrote.ch,undelucram.ro,inno.be,schwalbetires.com,zill.de,hiwio.com,cfos-emobility.de,eurizon.hu,ker.mvmnext.hu,manthorpebp.co.uk,uniqueshop.gr,mprj.mp.br,paz.de,brotagonist.de,georg.at,towerhousewares.co.uk,negrini.com,lokalplus.nrw,arche.net,selexium.com,gesundheitsamt-bw.de,multipower.com,tu-clausthal.de,smb.museum,kopp-verlag.de,kodiko.gr,netz-noe.at,migration.qld.gov.au,rotork.com,pitstop.de,ostermaier.de,tarifcheck.de,seat-schneider.de,reichstein-opitz.de,fapyc.es,fit.technology,hallie-vanklooster.nl,liebeautos.de,gelderundsorg.de,misericordia-sesto.it,juguetesquevedos.com,marketingalumni.de,simac.fr,hoy-voy.com,petitieonline.com,petycjeonline.com,peticie.com,peticiq.com,architekturbedarf.de,eh-ludwigsburg.de,bakertilly-ca.com,quantelectronic.de,krungsricard.com,businesslincolnshire.com,zippity-outdoor.com,online.smith.com.ro,homedesignshops.nl,hotelnatureoviedo.com,loslagosnature.com,puebloastur.com,hosteriadetorazo.com,hotelesnature.com,finanzasparatodos.es,asfinag.at,reflects.com,capveriant.com,freyerleben.de,glibl.fr,reederei-frisia.de,deco-et-ambiances.fr,yurmax.cz,risikolebensversicherung.com,ammerlaender-versicherung.de,vestel-germany.de,detske-dekorace-lunami.cz,hatten.dk,graewe-shop.de,safenames.net,mykal.de,autobahn.de,zsamskrovi.cz,wambamfence.com,bestoftechnic.de,themisbar.com,trading.com,ocaso.es,kontrast.dk,mindtile.com,inforata.com,katholisch1.tv,teamaretuza.com,highlight-led.de,hemdenbox.de,shop.spd.de,vautron.de,wark24.de,openfinancebrasil.org.br,gartenversandhaus.de,ujam.com,unkrautfuchs.de,einrichten-design.de,starclassifieds.com,vernouillet28.fr,dealstunter.nl,4dimension.de,klascement.net,dalatrafik.se,villa-selvatico.com,eurodata.de,patnbk.com.tw,lascarrerasdecaballos.com,rowenta.gr,selexium-groupe.com,elevatr.com,gibbscam.com,kupfersmetzgermarkt.de,devoordeelmarkt.nl,farmfoods.co.uk,aucotec.com,ilcambiamento.it,adressit.com,growtopiagame.com,activeplacespower.com,globalcause.co.uk,moulinex.gr,renee.pl,onecall.no,check24-partnerprogramm.de,buddeautomobile.de,ractem.fr,libreriaproteo.com,bestexamszaragoza.com,psoemalaga.es,ractem.es,masterpro-collection.com,palafoxhoteles.com,ractem.de,ikasa.es,psicoaragon.es,rafer.es,mensagia.com,integratecnologia.es,netzteam.net,mainfer.com,grupointegra.es,highas.es,exxacon.cl,gestoriarubio.com,cerasroura.com,lacasonacasarural.com,bluefort.com,veteranemployment.co.uk,comprarenvalencia.com,hotel-oriente.com,grupousieto.com,mentolin.es,todolicenciaspty.com,compro-oro.eu,energydrink.fr,avanzartransportes.com,via-cg.com,estagilize.com.br,depildiodo.com,azmark.es,granfestival.es,inmopatraix.com,ticx.fr,mimpo.com,donamatilde.pt,srovpraxi.sk,crazypatterns.net,emk.de,netbox.cz,nanguang.de,druckweiterverarbeitung.de,surgestaffing.com,fordbdt.ro,ford-rulate.ro,isobil.com.tr,vintagebazaar.pt,solgar.com,greens-efa.eu,firmensms.at,lubexpert.ro,wolf-und-kollegen.de,manufactura-eggenburg.at,abser-t.com,automeister.hu,stardance.at,derwinkelhofer.at,restaurantelasarten.com,unfallvertretung.at,fiselgraf.es,topografica.net,restauranteseiruga.com,boller-binzen.de,autonet-group.ro,metallbearbeitung-wendt.de,automeister.ro,sesiasoft.com,camaracompostela.com,camaracoruna.com,sorteosamedida.com,cuponmobile.com,kiennast.at,elpidajob.gr,listapromos.com,clinicakorall.ro,fnapip.ro,mediadesign.at,efestarnow.pl,enerin.it,hotel-liszt.de,fegas.net,tradingsystems.it,almacenerotico.com,specialdiesel.com,nsa.bg,kolorslab.com,louisvilleladder.com,monkmakes.com,centro-shalom.com,autocheckcenter.ro,freefestival.co.uk,primaenergia.hu,icoiig.es,autonet-group.hu,gripumps.com,bja-augsburg.de,asadorderoxos.com,inkmaker.com,ikb.at,carglass.es,pharmindex-online.hu,mcahandicap.fr,acropole.fr,sirops.fr,taravoyages.com,commentreparer.com,sierranevada.es,1mmo.at,4-pfoten-fuer-sie.de,60k.com,a1.si,academiahotels.at,aplitop.com,aquafex.at,arbeiterkammer.at,archeshousing.org.uk,art-immobilien.at,audioweb.ro,ausflugstipps.at,austriareal.com,autoescuelalaflota.com,autonet-group.com,avis.com.tr,bazzar.rs,benimetal.com,berlinguainternationalschool.com,bianchi.sk,bluorbank.lv,bogner-eshop.cz,bonyplus.cz,bootsfuehrerschein.de,bopla.de,born2be.pl,box24corp.com,budget.com.tr,centerzaizobrazevanje.si,chez-nestor.com,cityreal.at,clubcode.bg,clubnuoveidee.it,covea-finance.com,cpratts.co.uk,crossfit-westerwald.de,cybernetix.fr,d-power-modellbau.com,dakcoatingnoord.nl,danesemilano.com,danneelsnv.be,davorin.sk,dcmemba.eu,defence.hu,der-druckerprofi.de,digiwallet.nl,doc-du-juriste.com,dockx.be,domainvendor.com,donauimmo.at,donauregion.at,drblitz-weblab.com,e-acceptgiro.nl,e-mobilbw.de,easyphp.org,edukacentar.hr,eichhorn-kinderwagen.de,eiendomspriser.no,elgusto.es,emobil-sw.de,enva.com,erfurt-tourismus.de,etsba.sk,etudes-et-analyses.com,eucoc.cloud,europcar.com.mx,excellent-hemd.de,fagorcommercial.com,fagorprofessional.pl,fitnesscamp-westerwald.de,flenhealth.com,fresh-jobs.uk,ftejerez.com,gamoni.de,gap360.com,gap360.de,gcorpgroup.com,gmgurban.com,gocollette.com,golnanpuratos.com,gorna-austria.pl,grazer.at,gruppocenseo.com,h-tec.us,heinz-glas.com,helbig.be,helpfulmonsters.com,heyupnow.com,hierwohnich.at,hot.at,hubitools.com,icmf.es,idlesband.com,idoctors.it,ifrs.org,ilmioartigiano.lvh.it,immo-gith.at,immo-knoll.com,immoagency.at,immogeidorf.at,immoi.at,innviertel-tourismus.at,inselradio.com,internetlekarna.cz,isabellefontaine.ca,ivolta.pl,ivoxpanel.be,jetspirit.be,jobijoba.de,jobscout24.ch,jouwictvacature.nl,just-gregory.net,kap4613.at,kocca.it,kultur.bz.it,kupzidle.cz,laboconnect.com,lasertack.com,lekarna-oaza.cz,lekarnasvjosefa.cz,lesaco.de,levi.com.bo,levi.com.py,liblox.com,lnl.com.hk,loca-linge.com,m3panel.no,m3panel.se,madmaxfashion.cz,maene.com,maklerpoint.at,manageritalia.it,manoferro.net,market.com.br,maximiles.co.uk,maximiles.com,medvidkovehracky.cz,mega.be,mega.nl,meinhandwerker.lvh.it,meinungsplatz.de,mh-stavebnictvi.cz,midwestbankcentre.com,miramodel.com,mirnockbauern.at,modellbau-metz.com,msvhousing.co.uk,muehlviertel.at,mycourant.com,nationaalbespaarcentrum.nl,nbanka.si,ncad.ie,nfe.de,noodweer.be,numares.us,oberoesterreich.at,oekb.at,opendesc.com,opendxmglobalx.com,openpdm.com,osimis.io,oventrop.com,p-plus.nl,packgo.es,paravol.org,patrouillesuisseshop.ch,phase-6.de,pimido.com,promondo.de,puratos.be,puratos.bg,puratos.co.id,puratos.co.jp,puratos.com.ar,puratos.com.au,puratos.com.my,puratos.fr,puratos.md,puratos.nl,puratos.pt,qastack.com.de,radniodnosi.hr,rbnainfo.com,readyart.fr,restaurants.st,reviewmeta.com,ridewill.it,sabadellpagofacil.com,sakral-orgel.de,samostojno-podjetnistvo.si,segeln-lernen.de,selectiepunt.nl,senosan.com,shopping.st,slimbee.cz,smythstoys.com,spacek.sk,sportbootfuehrerschein.de,sports.admiral.at,spsobor.ru,standaardboekhandel.be,studentenwerk-dresden.de,suedtirol.live,syder.es,synchrone.be,tamarine.com.br,targetmedia.eu,targetpay.com,targetsms.nl,taschen.com,tea4you.de,teamreal.at,ter-as.pt,thechillidoctor.sk,therealestate.at,tmleuven.be,tradeweb.com,trend-immotreuhand.at,trendy-mama.sk,trucksbook.eu,ttieurope.com,ttisuccessinsights.fr,tuwien.at,uni-mozarteum.at,upperaustria.com,viennaestate-makler.com,vinzenztreff.de,vivuspagofacil.es,wanderreitershop.com,wbimmo.at,weareknitters.de,wefit.club,wels.at,western.com.ph,witter-towbars.co.uk,wng.at,xm.com,xmarabia.net,xmtrading.com,zonercloud.com##.modal-backdrop
+shelfnow.co.uk,dt.mef.gov.it,vinkylen.se,beststuff.hu,raffeldeals.com,strazmiejska.gda.pl,nunzium.com,lojista.rovitex.com.br,autoczescizielonki.pl,angelplatz.de,muellers-muehle.de,brainzap.de,waven-game.com,bankinter.com,atlasformen.ca,atlasformen.ch,atlasformen.nl,atlasformen.fr,atlasformen.ch,flaxmanestates.com,portalridice.cz,inland-casas.com,greenpandagames.com,amd.by,mrcrayfish.com,fruugonorge.com,incibeauty.com,nemtakeaway.dk,fruugo.fr,gekko-computer.de,moneytalkgo.com,oesterreichsenergie.at,jysk.al,hela-shop.eu,localparticl.com,jobagent.ch,edeltalk.ticket.io,intercars.ro,kocbayi.com.tr,platnik.e-pity.pl,auth.leaseweb.com,spoutible.com,rajsvitidel.cz,nutsinbulk.eu,nutsinbulk.ie,nutsinbulk.co.uk,ben.nl,educado.pl,fruugo.se,elearningindustry.com,ispot.pl,uzsi.cz,akcr.cz,log.cz,domov-senioru-praha.cz,play-cricket.com,1pmobile.com,droitconstitutionnel.org,worldarchitecture.org,r-stahl.com,verwaltungs-jobs.ch,andwork.com,dyzurnet.pl,unobike.com,libenflex.com,centres-vaccination.fr,0rechner.de,hagengrote.ch,undelucram.ro,inno.be,schwalbetires.com,zill.de,hiwio.com,cfos-emobility.de,eurizon.hu,ker.mvmnext.hu,manthorpebp.co.uk,uniqueshop.gr,mprj.mp.br,paz.de,brotagonist.de,georg.at,towerhousewares.co.uk,negrini.com,lokalplus.nrw,arche.net,selexium.com,gesundheitsamt-bw.de,multipower.com,tu-clausthal.de,smb.museum,kopp-verlag.de,kodiko.gr,netz-noe.at,migration.qld.gov.au,rotork.com,pitstop.de,ostermaier.de,tarifcheck.de,seat-schneider.de,reichstein-opitz.de,fapyc.es,fit.technology,hallie-vanklooster.nl,liebeautos.de,gelderundsorg.de,misericordia-sesto.it,juguetesquevedos.com,marketingalumni.de,simac.fr,hoy-voy.com,petitieonline.com,petycjeonline.com,peticie.com,peticiq.com,architekturbedarf.de,eh-ludwigsburg.de,bakertilly-ca.com,quantelectronic.de,krungsricard.com,businesslincolnshire.com,zippity-outdoor.com,online.smith.com.ro,homedesignshops.nl,hotelnatureoviedo.com,loslagosnature.com,puebloastur.com,hosteriadetorazo.com,hotelesnature.com,finanzasparatodos.es,asfinag.at,reflects.com,capveriant.com,freyerleben.de,glibl.fr,reederei-frisia.de,deco-et-ambiances.fr,yurmax.cz,risikolebensversicherung.com,ammerlaender-versicherung.de,vestel-germany.de,detske-dekorace-lunami.cz,hatten.dk,graewe-shop.de,safenames.net,mykal.de,autobahn.de,zsamskrovi.cz,wambamfence.com,bestoftechnic.de,themisbar.com,trading.com,ocaso.es,kontrast.dk,mindtile.com,inforata.com,katholisch1.tv,teamaretuza.com,highlight-led.de,hemdenbox.de,shop.spd.de,vautron.de,wark24.de,openfinancebrasil.org.br,gartenversandhaus.de,ujam.com,unkrautfuchs.de,einrichten-design.de,starclassifieds.com,vernouillet28.fr,dealstunter.nl,4dimension.de,klascement.net,dalatrafik.se,villa-selvatico.com,eurodata.de,patnbk.com.tw,lascarrerasdecaballos.com,rowenta.gr,selexium-groupe.com,elevatr.com,gibbscam.com,kupfersmetzgermarkt.de,devoordeelmarkt.nl,farmfoods.co.uk,aucotec.com,ilcambiamento.it,adressit.com,growtopiagame.com,activeplacespower.com,globalcause.co.uk,moulinex.gr,renee.pl,onecall.no,check24-partnerprogramm.de,buddeautomobile.de,ractem.fr,libreriaproteo.com,bestexamszaragoza.com,psoemalaga.es,ractem.es,masterpro-collection.com,palafoxhoteles.com,ractem.de,ikasa.es,psicoaragon.es,rafer.es,mensagia.com,integratecnologia.es,netzteam.net,mainfer.com,grupointegra.es,highas.es,exxacon.cl,gestoriarubio.com,cerasroura.com,lacasonacasarural.com,bluefort.com,veteranemployment.co.uk,comprarenvalencia.com,hotel-oriente.com,grupousieto.com,mentolin.es,todolicenciaspty.com,compro-oro.eu,energydrink.fr,avanzartransportes.com,via-cg.com,estagilize.com.br,depildiodo.com,azmark.es,granfestival.es,inmopatraix.com,ticx.fr,mimpo.com,donamatilde.pt,srovpraxi.sk,crazypatterns.net,emk.de,netbox.cz,nanguang.de,druckweiterverarbeitung.de,surgestaffing.com,fordbdt.ro,ford-rulate.ro,isobil.com.tr,vintagebazaar.pt,solgar.com,greens-efa.eu,firmensms.at,lubexpert.ro,wolf-und-kollegen.de,manufactura-eggenburg.at,abser-t.com,automeister.hu,stardance.at,derwinkelhofer.at,restaurantelasarten.com,unfallvertretung.at,fiselgraf.es,topografica.net,restauranteseiruga.com,boller-binzen.de,autonet-group.ro,metallbearbeitung-wendt.de,automeister.ro,sesiasoft.com,camaracompostela.com,camaracoruna.com,sorteosamedida.com,cuponmobile.com,kiennast.at,elpidajob.gr,listapromos.com,clinicakorall.ro,fnapip.ro,mediadesign.at,efestarnow.pl,enerin.it,hotel-liszt.de,fegas.net,tradingsystems.it,almacenerotico.com,specialdiesel.com,nsa.bg,kolorslab.com,louisvilleladder.com,monkmakes.com,centro-shalom.com,autocheckcenter.ro,freefestival.co.uk,primaenergia.hu,icoiig.es,autonet-group.hu,gripumps.com,bja-augsburg.de,asadorderoxos.com,inkmaker.com,ikb.at,carglass.es,pharmindex-online.hu,mcahandicap.fr,acropole.fr,sirops.fr,taravoyages.com,commentreparer.com,sierranevada.es,1mmo.at,4-pfoten-fuer-sie.de,60k.com,a1.si,academiahotels.at,aplitop.com,aquafex.at,arbeiterkammer.at,archeshousing.org.uk,art-immobilien.at,audioweb.ro,ausflugstipps.at,austriareal.com,autoescuelalaflota.com,autonet-group.com,avis.com.tr,bazzar.rs,benimetal.com,berlinguainternationalschool.com,bianchi.sk,bluorbank.lv,bogner-eshop.cz,bonyplus.cz,bootsfuehrerschein.de,bopla.de,born2be.pl,box24corp.com,budget.com.tr,centerzaizobrazevanje.si,chez-nestor.com,cityreal.at,clubcode.bg,clubnuoveidee.it,covea-finance.com,cpratts.co.uk,crossfit-westerwald.de,cybernetix.fr,d-power-modellbau.com,dakcoatingnoord.nl,danesemilano.com,danneelsnv.be,davorin.sk,dcmemba.eu,defence.hu,der-druckerprofi.de,digiwallet.nl,doc-du-juriste.com,dockx.be,domainvendor.com,donauimmo.at,donauregion.at,drblitz-weblab.com,e-acceptgiro.nl,e-mobilbw.de,easyphp.org,edukacentar.hr,eichhorn-kinderwagen.de,eiendomspriser.no,elgusto.es,emobil-sw.de,enva.com,erfurt-tourismus.de,etsba.sk,etudes-et-analyses.com,eucoc.cloud,europcar.com.mx,excellent-hemd.de,fagorcommercial.com,fagorprofessional.pl,fitnesscamp-westerwald.de,flenhealth.com,fresh-jobs.uk,ftejerez.com,gamoni.de,gap360.com,gap360.de,gcorpgroup.com,gmgurban.com,gocollette.com,golnanpuratos.com,gorna-austria.pl,grazer.at,gruppocenseo.com,h-tec.us,heinz-glas.com,helbig.be,helpfulmonsters.com,heyupnow.com,hierwohnich.at,hot.at,hubitools.com,icmf.es,idlesband.com,idoctors.it,ifrs.org,ilmioartigiano.lvh.it,immo-gith.at,immo-knoll.com,immoagency.at,immogeidorf.at,immoi.at,innviertel-tourismus.at,inselradio.com,internetlekarna.cz,isabellefontaine.ca,ivolta.pl,ivoxpanel.be,jetspirit.be,jobijoba.de,jobscout24.ch,jouwictvacature.nl,just-gregory.net,kap4613.at,kocca.it,kultur.bz.it,kupzidle.cz,laboconnect.com,lasertack.com,lekarna-oaza.cz,lekarnasvjosefa.cz,lesaco.de,levaisseau.com,levi.com.bo,levi.com.py,liblox.com,lnl.com.hk,loca-linge.com,m3panel.no,m3panel.se,madmaxfashion.cz,maene.com,maklerpoint.at,manageritalia.it,manoferro.net,market.com.br,maximiles.co.uk,maximiles.com,medvidkovehracky.cz,mega.be,mega.nl,meinhandwerker.lvh.it,meinungsplatz.de,mh-stavebnictvi.cz,midwestbankcentre.com,miramodel.com,mirnockbauern.at,modellbau-metz.com,msvhousing.co.uk,muehlviertel.at,mycourant.com,nationaalbespaarcentrum.nl,nbanka.si,ncad.ie,nfe.de,noodweer.be,numares.us,oberoesterreich.at,oekb.at,opendesc.com,opendxmglobalx.com,openpdm.com,osimis.io,oventrop.com,p-plus.nl,packgo.es,paravol.org,patrouillesuisseshop.ch,phase-6.de,pimido.com,promondo.de,puratos.be,puratos.bg,puratos.co.id,puratos.co.jp,puratos.com.ar,puratos.com.au,puratos.com.my,puratos.fr,puratos.md,puratos.nl,puratos.pt,qastack.com.de,radniodnosi.hr,rbnainfo.com,readyart.fr,restaurants.st,reviewmeta.com,ridewill.it,sabadellpagofacil.com,sakral-orgel.de,samostojno-podjetnistvo.si,segeln-lernen.de,selectiepunt.nl,senosan.com,shopping.st,slimbee.cz,smythstoys.com,spacek.sk,sportbootfuehrerschein.de,sports.admiral.at,spsobor.ru,standaardboekhandel.be,studentenwerk-dresden.de,suedtirol.live,syder.es,synchrone.be,tamarine.com.br,targetmedia.eu,targetpay.com,targetsms.nl,taschen.com,tea4you.de,teamreal.at,ter-as.pt,thechillidoctor.sk,therealestate.at,tmleuven.be,tradeweb.com,trend-immotreuhand.at,trendy-mama.sk,trucksbook.eu,ttieurope.com,ttisuccessinsights.fr,tuwien.at,uni-mozarteum.at,upperaustria.com,viennaestate-makler.com,vinzenztreff.de,vivuspagofacil.es,wanderreitershop.com,wbimmo.at,weareknitters.de,wefit.club,wels.at,western.com.ph,witter-towbars.co.uk,wng.at,xm.com,xmarabia.net,xmtrading.com,zonercloud.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! .modal/.modal-backdrop (body only)
+genua.de,inselfaehre.de,e100.eu,repostuj.pl,italradio.org,joingoodcompany.nl,mit-dem-rad-zur-uni.de,ebenefits.es,leparfait.fr,thechillidoctor.cz,shark-helmets.com,generalivitality.fr,aprintex.be,4dimension.be,4dimension.fr,perfect-logic.com,riisrejser.dk,promosejours.com,generalivitality.com,schreinerei-ober.de,lacollectemedicale.fr##.modal
+genua.de,inselfaehre.de,e100.eu,repostuj.pl,italradio.org,joingoodcompany.nl,mit-dem-rad-zur-uni.de,ebenefits.es,leparfait.fr,thechillidoctor.cz,shark-helmets.com,generalivitality.fr,aprintex.be,4dimension.be,4dimension.fr,perfect-logic.com,riisrejser.dk,promosejours.com,generalivitality.com,schreinerei-ober.de,lacollectemedicale.fr##.modal-backdrop
+genua.de,inselfaehre.de,e100.eu,repostuj.pl,italradio.org,joingoodcompany.nl,mit-dem-rad-zur-uni.de,ebenefits.es,leparfait.fr,thechillidoctor.cz,shark-helmets.com,generalivitality.fr,aprintex.be,4dimension.be,4dimension.fr,perfect-logic.com,riisrejser.dk,promosejours.com,generalivitality.com,schreinerei-ober.de,lacollectemedicale.fr##body:style(position: static !important; overflow: auto !important; width: auto !important;)
+!! .modal/.modal-backdrop (html only)
+afaudio.co.uk,kuki.cz,mit-dem-rad-zur-arbeit.de,raiffeisen-mobil.at,vrsdigital.de##.modal
+afaudio.co.uk,kuki.cz,mit-dem-rad-zur-arbeit.de,raiffeisen-mobil.at,vrsdigital.de##.modal-backdrop
+afaudio.co.uk,kuki.cz,mit-dem-rad-zur-arbeit.de,raiffeisen-mobil.at,vrsdigital.de##html:style(position: static !important; overflow: auto !important; width: auto !important;)
+!! .modal (only)
+biker-boarder.de,loewenapothekebetzdorf.de,defence24.pl,cmteb.ro,roms-download.com,freeromsdownload.com,formation-industries-isere.fr,camaradeentreijuis.com.br,bergenlogistics.com,salmoiraghievigano.it,fluidui.com,duerbusch.de,puntocapsula.com,anais.digital,leso.at,cristobalbalenciagamuseoa.com,betriebsrat.de,unilink.pl,caminitodelrey.info,feiyr.com,napvoyages.fr,bulex.be,glow-worm.co.uk,hermann-saunierduval.it,protherm.cz,saunierduval.es,protherm.sk,protherm.ua,saunierduval.hu,press-shop.be,saunierduval.ro,saunierduval.at,awb.nl,generali.at##.modal
+biker-boarder.de,loewenapothekebetzdorf.de,defence24.pl,cmteb.ro,roms-download.com,freeromsdownload.com,formation-industries-isere.fr,camaradeentreijuis.com.br,bergenlogistics.com,salmoiraghievigano.it,fluidui.com,duerbusch.de,puntocapsula.com,anais.digital,leso.at,cristobalbalenciagamuseoa.com,betriebsrat.de,unilink.pl,caminitodelrey.info,feiyr.com,napvoyages.fr,bulex.be,glow-worm.co.uk,hermann-saunierduval.it,protherm.cz,saunierduval.es,protherm.sk,protherm.ua,saunierduval.hu,press-shop.be,saunierduval.ro,saunierduval.at,awb.nl,generali.at##body,html:style(overflow: auto !important; position: initial !important;)
+!! .modal (only, just body)
+mytime.de,entuk.org,albixon.de,hoehenberger-biokiste.de,pwn.pl,cinc.com##.modal
+mytime.de,entuk.org,albixon.de,hoehenberger-biokiste.de,pwn.pl,cinc.com##body:style(overflow: auto !important; position: initial !important;)
+!! .modal (only, just html)
+landwirtschaft.de##.modal
+landwirtschaft.de##html:style(overflow: auto !important; position: initial !important;)
+!! .modal-backdrop (not .modal)
+inactievooramnesty.nl,economycarrentals.com,verpackungsregister.org,galenpharma.de,printful.com,versteigerungspool.de,jegy.bahart.hu,inbayreuth.de,centrotiziano.it,kovoinox.cz,viaggiareinpuglia.it,kundisch.de,act-europe.eu,fazua.com,intelligenceonline.fr,bazar.cz,vmock.com,oxfordproducts.com,kwik-fit.com,praca.by,advantageaustria.org,favoptic.se,headsetwinkel.nl,thejunctionmemphis.com,kkh.de,agramonia.com,ecosatmadrid.com,omoda.nl,omoda.be,omoda.de,omoda.at,omoda.be,la-ola.de,colegiocostaadeje.clickedu.eu,portofoonwinkel.nl,pluspagos.com,akbank.de,bundesimmobilien.de,wifishop.nl,eibach.de,rightdeal.sk,pen-and-sword.co.uk,hotcinema.co.il,santelys.fr,pampatype.com,bdz.bg,givery.cz,givery.sk,germanwines.de,escort-side.dk,mielitekomedia.fi,alvaromoreno.com,carflexi.com,nanolab.cz,sportschrank.de,tu-darmstadt.de,ivam.de,airastana.com,bodyselect.com,gauloises.de,starmoney.de,blackburndesign.com,konferencje.pl,guarconsa.com,checkfrank.dk,raildude.com,aikikai.de,modivo.fr,modivo.gr,modivo.bg,modivo.hu,modivo.sk,modivo.ro,modivo.it,modivo.pl,modivo.lt,modivo.ua,modivo.lv,modivo.si,modivo.at,modivo.de,modivo.cz,cteasy.com,goodloot.cz,biblesociety.bg,continental-aftermarket.com,trading-point.com,aiti.gov.bn,csoszplatan.hu,airteam.shop,airteam.eu,brikett-rekord.com,nuessing.de,zoxs.de,routershop.nl,wijcontrolerenjedata.nl,esthesia.cz,novoserve.com,tropicfeel.com,naturstein-wilson.de,shooter-media-tv.de,hornerakusko.sk,hornirakousko.cz,pelix-media.de,regionedanubio.it,regiondunaj.cz,salzkammergut.at,oldstars.nl,qwic.de,qwic.eu,qwic.nl,cptm.sp.gov.br,file.com.tr,layerboots.com,kolegiata-sieradz.pl,sukia.com,first-business-travel.de,goldman-sachs.it,henrybetwin.com,academyofbusiness.pl,dubplate.be,codewordagency.com,cashconverters.es,cashconverters.pt,earthinnovation.org,tarifasmasmovil.es,onleihe.com,lalettrea.fr,actronics.no,journeyou.com,taxidoefkeries.com,faircore4eosc.eu,naturkraft.at,thenightleague.com,wissenschaft-shop.de,alpacaboerderij.be,telia.lt,think.ing.com,orangedigitalcenter.es,shoot-club.de,derkum-modellbau.com,modellbau-berlinski.de,libet.pl,errorfarealerts.com,vpiera.com,csobleasing.sk,sendiroo.fr,audis.it,agroservice.com.pl,mijazztel.com,osehero.pl,pranarom.fr,zoo-berlin.de,lufthansagroup.com,actronics-gmbh.de,imd-berlin.de,africaintelligence.com,hspv.nrw.de,sera.de,hotelius.co.uk,hotelius.com,cupohotelcolombia.com,estropical.com,todoviaje.es,cupohotel.com,castelatours.com,mapadinamics.com,istanbulplusriviera.com,grancanariareiser.no,safarati.com,escoper.com,locosxelmundo.com,ortolaviajes.com,travelbefore.it,guiatur.net,welovegreece.com,interpass-viagens.pt,narila.com,yoviajo.es,hotelius.fr,forcinaviaggi.it,wtfares.com,schizophrenianet.eu,barracudashoes.it,dpi-immo.fr,smbp.fr,immorev.com,formatype.com,i2c-construction.com,pavesderue.com,lilienthal.berlin,ferntech.co.nz,nmsu.edu,scroller.de,kunstmuseum-stuttgart.de,araani.com,top4fans.com,apothekerkammer.at,ig-immobilien.com,vlgpeer.com,hrci.org,flz.de,yd4k.com,epd4k.com,gd4k.com,smsmiles.com,happysmilesmeridian.com,happysmilestupelo.com,happysmileshornlake.com,leoprinting.lu,leoprinting.be,leoprinting.es,leoprinting.fr,leoprinting.at,leoprinting.de,leoprinting.nl,konrad-adenauer.de,wiener-staatsoper.at,vaxserve.com,zora.bg,hutchinson.com,flip.hu,sharewise.com,coperama.es,lamusardine.com,victoryliner.com,lichtsysteme-fischer.de,unna.de##.modal-backdrop
+inactievooramnesty.nl,economycarrentals.com,verpackungsregister.org,galenpharma.de,printful.com,versteigerungspool.de,jegy.bahart.hu,inbayreuth.de,centrotiziano.it,kovoinox.cz,viaggiareinpuglia.it,kundisch.de,act-europe.eu,fazua.com,intelligenceonline.fr,bazar.cz,vmock.com,oxfordproducts.com,kwik-fit.com,praca.by,advantageaustria.org,favoptic.se,headsetwinkel.nl,thejunctionmemphis.com,kkh.de,agramonia.com,ecosatmadrid.com,omoda.nl,omoda.be,omoda.de,omoda.at,omoda.be,la-ola.de,colegiocostaadeje.clickedu.eu,portofoonwinkel.nl,pluspagos.com,akbank.de,bundesimmobilien.de,wifishop.nl,eibach.de,rightdeal.sk,pen-and-sword.co.uk,hotcinema.co.il,santelys.fr,pampatype.com,bdz.bg,givery.cz,givery.sk,germanwines.de,escort-side.dk,mielitekomedia.fi,alvaromoreno.com,carflexi.com,nanolab.cz,sportschrank.de,tu-darmstadt.de,ivam.de,airastana.com,bodyselect.com,gauloises.de,starmoney.de,blackburndesign.com,konferencje.pl,guarconsa.com,checkfrank.dk,raildude.com,aikikai.de,modivo.fr,modivo.gr,modivo.bg,modivo.hu,modivo.sk,modivo.ro,modivo.it,modivo.pl,modivo.lt,modivo.ua,modivo.lv,modivo.si,modivo.at,modivo.de,modivo.cz,cteasy.com,goodloot.cz,biblesociety.bg,continental-aftermarket.com,trading-point.com,aiti.gov.bn,csoszplatan.hu,airteam.shop,airteam.eu,brikett-rekord.com,nuessing.de,zoxs.de,routershop.nl,wijcontrolerenjedata.nl,esthesia.cz,novoserve.com,tropicfeel.com,naturstein-wilson.de,shooter-media-tv.de,hornerakusko.sk,hornirakousko.cz,pelix-media.de,regionedanubio.it,regiondunaj.cz,salzkammergut.at,oldstars.nl,qwic.de,qwic.eu,qwic.nl,cptm.sp.gov.br,file.com.tr,layerboots.com,kolegiata-sieradz.pl,sukia.com,first-business-travel.de,goldman-sachs.it,henrybetwin.com,academyofbusiness.pl,dubplate.be,codewordagency.com,cashconverters.es,cashconverters.pt,earthinnovation.org,tarifasmasmovil.es,onleihe.com,lalettrea.fr,actronics.no,journeyou.com,taxidoefkeries.com,faircore4eosc.eu,naturkraft.at,thenightleague.com,wissenschaft-shop.de,alpacaboerderij.be,telia.lt,think.ing.com,orangedigitalcenter.es,shoot-club.de,derkum-modellbau.com,modellbau-berlinski.de,libet.pl,errorfarealerts.com,vpiera.com,csobleasing.sk,sendiroo.fr,audis.it,agroservice.com.pl,mijazztel.com,osehero.pl,pranarom.fr,zoo-berlin.de,lufthansagroup.com,actronics-gmbh.de,imd-berlin.de,africaintelligence.com,hspv.nrw.de,sera.de,hotelius.co.uk,hotelius.com,cupohotelcolombia.com,estropical.com,todoviaje.es,cupohotel.com,castelatours.com,mapadinamics.com,istanbulplusriviera.com,grancanariareiser.no,safarati.com,escoper.com,locosxelmundo.com,ortolaviajes.com,travelbefore.it,guiatur.net,welovegreece.com,interpass-viagens.pt,narila.com,yoviajo.es,hotelius.fr,forcinaviaggi.it,wtfares.com,schizophrenianet.eu,barracudashoes.it,dpi-immo.fr,smbp.fr,immorev.com,formatype.com,i2c-construction.com,pavesderue.com,lilienthal.berlin,ferntech.co.nz,nmsu.edu,scroller.de,kunstmuseum-stuttgart.de,araani.com,top4fans.com,apothekerkammer.at,ig-immobilien.com,vlgpeer.com,hrci.org,flz.de,yd4k.com,epd4k.com,gd4k.com,smsmiles.com,happysmilesmeridian.com,happysmilestupelo.com,happysmileshornlake.com,leoprinting.lu,leoprinting.be,leoprinting.es,leoprinting.fr,leoprinting.at,leoprinting.de,leoprinting.nl,konrad-adenauer.de,wiener-staatsoper.at,vaxserve.com,zora.bg,hutchinson.com,flip.hu,sharewise.com,coperama.es,lamusardine.com,victoryliner.com,lichtsysteme-fischer.de,unna.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! .modal-backdrop (not .modal) (Body)
+aurapol.com,digineb.eu,marshall.com,onehsn.com,magneticpoint.com,workbuster.com,grade.com,hetzner.com,onleihe.de##.modal-backdrop
+aurapol.com,digineb.eu,marshall.com,onehsn.com,magneticpoint.com,workbuster.com,grade.com,hetzner.com,onleihe.de##body:style(overflow: auto !important; position: initial !important;)
+!! .cli-modal-backdrop
+umbriasettegiorni.it,messinamagazine.it,funghimagazine.it,progrentis.com,factsd.com,cosasdeeducacion.es,videntetarotesmeralda.com,decoracionjaponesa.com,gildavenezia.it,benefit-plus.eu,hanwhasecurity.com,denia.com,management30.com,fantasyfootballgeek.co.uk,czyodebrac.pl,newfies-dialer.org,greatplacetowork.co.id,greatplacetowork.com.ph,ushio-staging.ewag.nl,ushio-staging.ewag.nl,moneris.pt,bluebird-europe.com,bluebird.hu,asimakopoulou.gr,demokracija.si,bessahotel.com,dragtaste.com,brnodaily.com,jobspin.cz,somme.fr,aquarius-divingtenerife.com##.cli-bar-popup
+umbriasettegiorni.it,messinamagazine.it,funghimagazine.it,progrentis.com,factsd.com,cosasdeeducacion.es,videntetarotesmeralda.com,decoracionjaponesa.com,gildavenezia.it,benefit-plus.eu,hanwhasecurity.com,denia.com,management30.com,fantasyfootballgeek.co.uk,czyodebrac.pl,newfies-dialer.org,greatplacetowork.co.id,greatplacetowork.com.ph,ushio-staging.ewag.nl,ushio-staging.ewag.nl,moneris.pt,bluebird-europe.com,bluebird.hu,asimakopoulou.gr,demokracija.si,bessahotel.com,dragtaste.com,brnodaily.com,jobspin.cz,somme.fr,aquarius-divingtenerife.com##.cli-modal-backdrop
+umbriasettegiorni.it,messinamagazine.it,funghimagazine.it,progrentis.com,factsd.com,cosasdeeducacion.es,videntetarotesmeralda.com,decoracionjaponesa.com,gildavenezia.it,benefit-plus.eu,hanwhasecurity.com,denia.com,management30.com,fantasyfootballgeek.co.uk,czyodebrac.pl,newfies-dialer.org,greatplacetowork.co.id,greatplacetowork.com.ph,ushio-staging.ewag.nl,ushio-staging.ewag.nl,moneris.pt,bluebird-europe.com,bluebird.hu,asimakopoulou.gr,demokracija.si,bessahotel.com,dragtaste.com,brnodaily.com,jobspin.cz,somme.fr,aquarius-divingtenerife.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! .wt-cli-cookie-bar-container
+lahacienda.co.uk,clever-zoeger.de,frusoed.dk,toptravelsights.com,mobilabonnemang.se,covivio.eu,loparex.com,pasquet.fr,expira.de,ackstorm.com,sdsdrives.com,nygart.dk,evelb.es,uebex.com,gulf.lu,jardincelas.com,mobilitytechgreen.com,mccinnovations.com,lacomarca.net,gocollette.com,iwatson.com,hautsdefrance.cci.fr,nordcloud.com,hlpklearfold.es,codigocarnaval.com,urbana.ie,enact.co.uk,netnews.com.mt,tvmnews.mt,one.com.mt,maggioreosp.novara.it,tbs-education.com,tbs-education.fr,go-fit.es,aslbi.piemonte.it,impacthub.net##.wt-cli-cookie-bar-container
+lahacienda.co.uk,clever-zoeger.de,frusoed.dk,toptravelsights.com,mobilabonnemang.se,covivio.eu,loparex.com,pasquet.fr,expira.de,ackstorm.com,sdsdrives.com,nygart.dk,evelb.es,uebex.com,gulf.lu,jardincelas.com,mobilitytechgreen.com,mccinnovations.com,lacomarca.net,gocollette.com,iwatson.com,hautsdefrance.cci.fr,nordcloud.com,hlpklearfold.es,codigocarnaval.com,urbana.ie,enact.co.uk,netnews.com.mt,tvmnews.mt,one.com.mt,maggioreosp.novara.it,tbs-education.com,tbs-education.fr,go-fit.es,aslbi.piemonte.it,impacthub.net##body,html:style(overflow: auto !important; position: initial !important;)
+!! .modal-cacsp-backdrop
+dentalgalindo.com,brutalvisual.com,archeologia.com.pl,letrayframe.com,osteofisintegral.es,uco.cat,buecheler-kollegen.de,seminariodeosma-soria.org,kamensenica.sk,movimentoofficinedelsud.it,trident.se,semanasantademalagaayeryhoy.com,diazfloristasestrella.com,cosechavida.com,centre-hypnose-moselle.com,broncoillustration.com,sumoingenio.com,aligepro.es,muevo.es,azulejosacedo.com,sana.cz,aliapinto.com,tsconline.es,polifast.it,napos.cz,gutshaus-neuendorf-usedom.de,kunterbunte-kinder.de,desatando.org,ledocom.cz,aliciasuarez.net,diabramar.com,lamagnalonga.org,benejamrefrigeracion.com,micropigmentacioncapilarbcn.com,revistaauge.com.ar,arcusnet.se,videogenic.es,grundschule-remagen.de,aceitessatunion.com,servigraphic.com.ar,textsteine.de,campergarage.es,administradorfincasblog.com,balgal.es,grafika-dtp-produkcia.sk,unmardeconstelaciones.com,salobella.com,careon.se,gymnosport.com,easyhomes.com.es,casavaledalama.pt,dosc.es,fcfoz.pt,berevolk.com,hvpropertyclearance.co.uk,calamo.se,elserratplanoles.com,bubblessea.es,disperator.se,ecoparquets.com,zlotaraczkalublin.pl,congresoscostadelsol.com,pneumaticiroma.it,asprona.es,virgendefatima.es,patronatpremia.cat,2points13.fr,3d3.es,abantos.es,abastanimacio.org,academiafrancesadebelleza.co,acaluca.org,acce.es,ad-particles.com,adea.sk,afplr.fr,agiletalon.fr,agiratou.com,aidaromero.com,alkoholochnarkotika.se,alligatorbioscience.se,anea.es,animala.es,antequerabelleza.com,apimadrid.net,aquatrend.sk,arabesque-formation.org,arrivamallorca.es,arteydeco.es,asapservicios.net,aspock.com,atout-voyages.com,autocareslazara.es,autocaresmariano.com,autoform.pl,ayudatranspersonal.com,bacabeton.cz,begalvi.com,bent-com.com,berliner-haeuser.de,bespokespain.com,bevent-rasch.se,bio-cord.es,biotropica.fr,bornes-eurorelais.fr,braeu-stueble.de,brendanoharamp.scot,briau.com,caleulalia.com,cande-sur-beuvron.com,carlhag.se,carrier.se,casadelaveiga.com,caytas.com.tr,cecjecuador.org.ec,cegef.com,centrediagonal.com,centropolisportivomassari.it,cerai.org,cervosgrup.com,chimeneasalicante.com,circodelshow.com,cliatec.com,clinicabadal.es,cometh-consulting.com,copysud.fr,cortilar.com,crystal-finance.com,ctangana.com,cugatresidencial.com,dake.es,datatal.se,degom.com,delfis.es,delogica.com,dentalcompany.es,descarpack.com.br,desfiladeroediciones.com,desomer.be,diarioandalucia.es,dibujos-animados.net,direkt-immobilie.de,dovozautznemecka.cz,drpuigdollers.com,dunamys.inf.br,easyimplantology.com,eb2b.com.pl,echo-mieszkania.pl,eclinic.com.sg,edgeict.com,eiglaw.com,elandexpediciones.es,emalec.com,enlighten.net,equifab.es,escuelanauticamarenostrum.com,esgrima.cat,espaisperconviure.es,etbygg.com,eurepieces.fr,euroenvio.com,eurotex.es,expertetfinance.fr,farmarsketrhyfuturum.cz,fastvisa.fr,fauxdiplomes.org,fisiolistic.com,fondazionealbertosordi.it,foyersekcjapolska.eu,fundacjaeds.pl,galeriaxanadu.pl,garcia-ibanez.com,gestenaval.com,glaskogen.se,globalteam.es,goia.org.pl,granibier.com,grundia.se,grupoisn.com,gruporhzaragoza.com,hagagruppen.se,halima-magazin.com,handelskammaren.com,helitecnics.com,helux.se,hermanosalcaraz.com,hjarnkoll.se,hmfoundation.com,hormimpres.com,hoteldeprony.fr,hotelroyalcatania.it,houjethai.nl,hummer.cz,icld.se,ict-project.it,imagelova.id,imprentalaspalmas.com,informamiele.it,inission.com,inmobiliariavolga.com,international-terra-institute.com,inwaspain.com,izkigolf.eus,jdmusic.se,juveycamps.com,karel1.nl,kaunokapiniuprieziura.lt,kcmkompresor.com,kewaccountants.co.uk,konkretplus.pl,krajci.cz,krisvagenut.se,kyoceracapetown.co.za,labaguette.pl,labintegrados.com,ladderupinc.com,landskronafoto.org,langarri.es,lawa.es,laxo.se,layher.se,lifetraveler.net,lindrooshalsa.se,lobolab.es,maisqueromanicorutas.com,mallandonoandroid.com,masconcas.com,mediabest.cz,megustaelvino.es,mensa.se,mestiteslilis.com,minutoprint.com,mirano.cz,mogador.cz,morphestudio.es,motoaxial.com,multiversidad.es,mundollaves.com,musicotherapie-federationfrancaise.com,nauticaravaning.com,nestville.sk,nestvillepark.sk,netromsoftware.ro,nojesfabriken.se,oddoneout.se,opako.pl,oserlafrique.com,paintballalcorcon.com,pallejabcn.com,penicilinafruits.com,peregrinoslh.com,permis-lausanne.ch,pernillaandersson.se,piazzadelgusto.it,pipi-antik.dk,plasticosgeca.com,plastimyr.com,portal.unimes.br,pro-beruf.de,prophecyinternational.com,psicoterapeuta.org,puertasprieto.com,puntosdefantasia.es,pzmk.org.pl,rastromaquinas.com,rectoraldecastillon.com,reinomineral.com,reklamefreunde.de,restauraciontalavera.es,restauranthispania.com,ristoranteeziogritti.it,rubinmedical.dk,rubinmedical.no,rubinmedical.se,sak.se,sammetais.com.br,sebastiancurylo.pl,serigrafiaiorgi.com,seyart.com,sgaim.com,sicamemt.org,siguealconejoblanco.es,sinfimasa.com,skp.se,skrobczynski.pl,slush.de,solebike.it,solu-watt.fr,soluzionainmobiliaria.es,somoparque.com,sorgingaztemoda.com,sroportal.sk,ssmf.se,stobrasil.com.br,stoparmut2015.ch,studiodimuro.com,subkultur-hannover.de,sustanciagris.com,szkt.sk,tagibergslagen.se,tallergastronomico.es,tarna.fhsk.se,tassenyalitzacio.com,tctech.se,teknoduegroup.it,teloliquido.com,temasa.es,textilprint.sk,thehouseofautomata.com,tmgernika.com,toastetmoi.fr,tollare.org,trattoriabolognesi.it,triperavigatana.com,tuckerfranklininsgrp.com,tuftuf.net,turuletras.com,umfmb.fr,upapsa.com,valenciatoday.es,vanghel-und-morawski.de,vickycan.com,ville-de-salles.com,webbigt.se,westlede.be,wiemker.org,woolink.co,wp.fratgsa.org,xatobaxestion.com,xfactor-gmbh.de,yougoenglish.com,zigmoon.com##+js(rc, modal-cacsp-open, , stay)
+dentalgalindo.com,brutalvisual.com,archeologia.com.pl,letrayframe.com,osteofisintegral.es,uco.cat,buecheler-kollegen.de,seminariodeosma-soria.org,kamensenica.sk,movimentoofficinedelsud.it,trident.se,semanasantademalagaayeryhoy.com,diazfloristasestrella.com,cosechavida.com,centre-hypnose-moselle.com,broncoillustration.com,sumoingenio.com,aligepro.es,muevo.es,azulejosacedo.com,sana.cz,aliapinto.com,tsconline.es,polifast.it,napos.cz,gutshaus-neuendorf-usedom.de,kunterbunte-kinder.de,desatando.org,ledocom.cz,aliciasuarez.net,diabramar.com,lamagnalonga.org,benejamrefrigeracion.com,micropigmentacioncapilarbcn.com,revistaauge.com.ar,arcusnet.se,videogenic.es,grundschule-remagen.de,aceitessatunion.com,servigraphic.com.ar,textsteine.de,campergarage.es,administradorfincasblog.com,balgal.es,grafika-dtp-produkcia.sk,unmardeconstelaciones.com,salobella.com,careon.se,gymnosport.com,easyhomes.com.es,casavaledalama.pt,dosc.es,fcfoz.pt,berevolk.com,hvpropertyclearance.co.uk,calamo.se,elserratplanoles.com,bubblessea.es,disperator.se,ecoparquets.com,zlotaraczkalublin.pl,congresoscostadelsol.com,pneumaticiroma.it,asprona.es,virgendefatima.es,patronatpremia.cat,2points13.fr,3d3.es,abantos.es,abastanimacio.org,academiafrancesadebelleza.co,acaluca.org,acce.es,ad-particles.com,adea.sk,afplr.fr,agiletalon.fr,agiratou.com,aidaromero.com,alkoholochnarkotika.se,alligatorbioscience.se,anea.es,animala.es,antequerabelleza.com,apimadrid.net,aquatrend.sk,arabesque-formation.org,arrivamallorca.es,arteydeco.es,asapservicios.net,aspock.com,atout-voyages.com,autocareslazara.es,autocaresmariano.com,autoform.pl,ayudatranspersonal.com,bacabeton.cz,begalvi.com,bent-com.com,berliner-haeuser.de,bespokespain.com,bevent-rasch.se,bio-cord.es,biotropica.fr,bornes-eurorelais.fr,braeu-stueble.de,brendanoharamp.scot,briau.com,caleulalia.com,cande-sur-beuvron.com,carlhag.se,carrier.se,casadelaveiga.com,caytas.com.tr,cecjecuador.org.ec,cegef.com,centrediagonal.com,centropolisportivomassari.it,cerai.org,cervosgrup.com,chimeneasalicante.com,circodelshow.com,cliatec.com,clinicabadal.es,cometh-consulting.com,copysud.fr,cortilar.com,crystal-finance.com,ctangana.com,cugatresidencial.com,dake.es,datatal.se,degom.com,delfis.es,delogica.com,dentalcompany.es,descarpack.com.br,desfiladeroediciones.com,desomer.be,diarioandalucia.es,dibujos-animados.net,direkt-immobilie.de,dovozautznemecka.cz,drpuigdollers.com,dunamys.inf.br,easyimplantology.com,eb2b.com.pl,echo-mieszkania.pl,eclinic.com.sg,edgeict.com,eiglaw.com,elandexpediciones.es,emalec.com,enlighten.net,equifab.es,escuelanauticamarenostrum.com,esgrima.cat,espaisperconviure.es,etbygg.com,eurepieces.fr,euroenvio.com,eurotex.es,expertetfinance.fr,farmarsketrhyfuturum.cz,fastvisa.fr,fauxdiplomes.org,fisiolistic.com,fondazionealbertosordi.it,foyersekcjapolska.eu,fundacjaeds.pl,galeriaxanadu.pl,garcia-ibanez.com,gestenaval.com,glaskogen.se,globalteam.es,goia.org.pl,granibier.com,grundia.se,grupoisn.com,gruporhzaragoza.com,hagagruppen.se,halima-magazin.com,handelskammaren.com,helitecnics.com,helux.se,hermanosalcaraz.com,hjarnkoll.se,hmfoundation.com,hormimpres.com,hoteldeprony.fr,hotelroyalcatania.it,houjethai.nl,hummer.cz,icld.se,ict-project.it,imagelova.id,imprentalaspalmas.com,informamiele.it,inission.com,inmobiliariavolga.com,international-terra-institute.com,inwaspain.com,izkigolf.eus,jdmusic.se,juveycamps.com,karel1.nl,kaunokapiniuprieziura.lt,kcmkompresor.com,kewaccountants.co.uk,konkretplus.pl,krajci.cz,krisvagenut.se,kyoceracapetown.co.za,labaguette.pl,labintegrados.com,ladderupinc.com,landskronafoto.org,langarri.es,lawa.es,laxo.se,layher.se,lifetraveler.net,lindrooshalsa.se,lobolab.es,maisqueromanicorutas.com,mallandonoandroid.com,masconcas.com,mediabest.cz,megustaelvino.es,mensa.se,mestiteslilis.com,minutoprint.com,mirano.cz,mogador.cz,morphestudio.es,motoaxial.com,multiversidad.es,mundollaves.com,musicotherapie-federationfrancaise.com,nauticaravaning.com,nestville.sk,nestvillepark.sk,netromsoftware.ro,nojesfabriken.se,oddoneout.se,opako.pl,oserlafrique.com,paintballalcorcon.com,pallejabcn.com,penicilinafruits.com,peregrinoslh.com,permis-lausanne.ch,pernillaandersson.se,piazzadelgusto.it,pipi-antik.dk,plasticosgeca.com,plastimyr.com,portal.unimes.br,pro-beruf.de,prophecyinternational.com,psicoterapeuta.org,puertasprieto.com,puntosdefantasia.es,pzmk.org.pl,rastromaquinas.com,rectoraldecastillon.com,reinomineral.com,reklamefreunde.de,restauraciontalavera.es,restauranthispania.com,ristoranteeziogritti.it,rubinmedical.dk,rubinmedical.no,rubinmedical.se,sak.se,sammetais.com.br,sebastiancurylo.pl,serigrafiaiorgi.com,seyart.com,sgaim.com,sicamemt.org,siguealconejoblanco.es,sinfimasa.com,skp.se,skrobczynski.pl,slush.de,solebike.it,solu-watt.fr,soluzionainmobiliaria.es,somoparque.com,sorgingaztemoda.com,sroportal.sk,ssmf.se,stobrasil.com.br,stoparmut2015.ch,studiodimuro.com,subkultur-hannover.de,sustanciagris.com,szkt.sk,tagibergslagen.se,tallergastronomico.es,tarna.fhsk.se,tassenyalitzacio.com,tctech.se,teknoduegroup.it,teloliquido.com,temasa.es,textilprint.sk,thehouseofautomata.com,tmgernika.com,toastetmoi.fr,tollare.org,trattoriabolognesi.it,triperavigatana.com,tuckerfranklininsgrp.com,tuftuf.net,turuletras.com,umfmb.fr,upapsa.com,valenciatoday.es,vanghel-und-morawski.de,vickycan.com,ville-de-salles.com,webbigt.se,westlede.be,wiemker.org,woolink.co,wp.fratgsa.org,xatobaxestion.com,xfactor-gmbh.de,yougoenglish.com,zigmoon.com##+js(rc, modal-cacsp-box, , stay)
+!! .avada-footer-scripts
+people-base-cbm.com,santander.pl,asbrav.org.br##.avada-footer-scripts
+people-base-cbm.com,santander.pl,asbrav.org.br##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cookie-warning-modal
+creative-looks.nl,ttisuccessinsights.nl,naamelijk.nl,thehuddle.nl,moneyluckfreedom.com,borgch.nl,mcnetiq.nl,only-fitness.nl,dagje-texel.nl,gasterijkruisberg.nl,isx.nl,skinnyminds.nl,proteineshakes.nl,dewit-elektro.nl,enluse.com,capaciteitentestoefenen.com,uwfysiotherapeut.com,flierefluiterraalte.nl,back2front.be,fortressgroup.nl,wel-com.nl,bajapress.com,drumplezier.nl,huispromotie.nl,automathoogeveen.nl,icverpleegkundige.com,wesocialmen.com,jenrmarketing.nl,anderleven.nl,technotrafficcontrol.nl,iclas.org,taxiboeken.be,bloosz.nl,nickyverbeek.nl,lastenbesparen.com,fransdegrebber.nl,fashion-trends.nl,slankmetlinda.nl,cadcompany.nl,choircompany.nl##.cookie-warning-modal
+!! .ReactModal__Overlay
+bokadirekt.se,wildwestdomains.com,hosteurope.de,tsohost.com,systembolaget.se,martifer.fr,123-reg.co.uk,opngo.com,martifer.com,martifer.es,martifer.pt,df.eu,groupama.fr,remppatori.fi,srv.fi##.ReactModal__Overlay
+bokadirekt.se,wildwestdomains.com,hosteurope.de,tsohost.com,systembolaget.se,martifer.fr,123-reg.co.uk,opngo.com,martifer.com,martifer.es,martifer.pt,df.eu,groupama.fr,remppatori.fi,srv.fi##body,html:style(height: auto !important; overflow: auto !important)
+!! .mfp-wrap/.mfp-bg
+foma.cz,juchheim-methode.de,ausbildung-weltweit.de,praktisch-unschlagbar.de,bne-portal.de,deutschlandstipendium.de,verfassungsschutz.de,pro-doma.cz,destatis.de,dshi-otradnoe.ru,polizei.de,bmel.de,zkbs-online.de,wir-sind-bund.de,casius.be,duesselraum.de,skm.pkp.pl,passau.de,chalkandnotch.com,onlinecourses.ooo,tampereenmusiikki.fi,traffiq.de,nfz-lodz.pl,atleticariccardi.it,fastdeal.pl,tehamatech.com,travebook.net,foodex.fr,minihof-liebau.at,helahuma.se,primaria-soldanu.ro,nest34.com,novaeterrae.eu,mecos.es,cavanmonaghansciencefestival.ie,blauesaenger.de,terre-emerse.it,ofpr.info,fight-academy.eu,foodex-sud.fr,cwanylis.pl,kazi-tani.com,archeologiapreventiva.com,webonallestimenti.it,hape.com,gtv.com.pl,schleswig-holstein.de,nalgeneiberia.com,decolight.gr,schulzmuseum.org,bvp.ie,pizza-diana.de,guiral.es,3di.it,elortzabotika.com,altor.ws,labrit.es,e-businessconsulting.it,gmc-media.com,nationalgallery.co.uk,simocowirelesssolutions.com,solymarhoteles.bookinweb.es,rescueanimalsireland.ie,poettinger.at,xn--bafg-7qa.de,capsugel.com,smartclinic.hu,erkanlitatilkoyu.com,piratescove.ie,bund.de,juliaestetica.com,lhv.ee,axa-im.it,axa-im.de,axa-im.com.sg,axa-im.fr,axa-im-usa.com,axa-im.co.uk,axa-im.com,axa-im.com##.mfp-bg
+foma.cz,juchheim-methode.de,ausbildung-weltweit.de,praktisch-unschlagbar.de,bne-portal.de,deutschlandstipendium.de,verfassungsschutz.de,pro-doma.cz,destatis.de,dshi-otradnoe.ru,polizei.de,bmel.de,zkbs-online.de,wir-sind-bund.de,casius.be,duesselraum.de,skm.pkp.pl,passau.de,chalkandnotch.com,onlinecourses.ooo,tampereenmusiikki.fi,traffiq.de,nfz-lodz.pl,atleticariccardi.it,fastdeal.pl,tehamatech.com,travebook.net,foodex.fr,minihof-liebau.at,helahuma.se,primaria-soldanu.ro,nest34.com,novaeterrae.eu,mecos.es,cavanmonaghansciencefestival.ie,blauesaenger.de,terre-emerse.it,ofpr.info,fight-academy.eu,foodex-sud.fr,cwanylis.pl,kazi-tani.com,archeologiapreventiva.com,webonallestimenti.it,hape.com,gtv.com.pl,schleswig-holstein.de,nalgeneiberia.com,decolight.gr,schulzmuseum.org,bvp.ie,pizza-diana.de,guiral.es,3di.it,elortzabotika.com,altor.ws,labrit.es,e-businessconsulting.it,gmc-media.com,nationalgallery.co.uk,simocowirelesssolutions.com,solymarhoteles.bookinweb.es,rescueanimalsireland.ie,poettinger.at,xn--bafg-7qa.de,capsugel.com,smartclinic.hu,erkanlitatilkoyu.com,piratescove.ie,bund.de,juliaestetica.com,lhv.ee,axa-im.it,axa-im.de,axa-im.com.sg,axa-im.fr,axa-im-usa.com,axa-im.co.uk,axa-im.com,axa-im.com##.mfp-wrap
+foma.cz,juchheim-methode.de,ausbildung-weltweit.de,praktisch-unschlagbar.de,bne-portal.de,deutschlandstipendium.de,verfassungsschutz.de,pro-doma.cz,destatis.de,dshi-otradnoe.ru,polizei.de,bmel.de,zkbs-online.de,wir-sind-bund.de,casius.be,duesselraum.de,skm.pkp.pl,passau.de,chalkandnotch.com,onlinecourses.ooo,tampereenmusiikki.fi,traffiq.de,nfz-lodz.pl,atleticariccardi.it,fastdeal.pl,tehamatech.com,travebook.net,foodex.fr,minihof-liebau.at,helahuma.se,primaria-soldanu.ro,nest34.com,novaeterrae.eu,mecos.es,cavanmonaghansciencefestival.ie,blauesaenger.de,terre-emerse.it,ofpr.info,fight-academy.eu,foodex-sud.fr,cwanylis.pl,kazi-tani.com,archeologiapreventiva.com,webonallestimenti.it,hape.com,gtv.com.pl,schleswig-holstein.de,nalgeneiberia.com,decolight.gr,schulzmuseum.org,bvp.ie,pizza-diana.de,guiral.es,3di.it,elortzabotika.com,altor.ws,labrit.es,e-businessconsulting.it,gmc-media.com,nationalgallery.co.uk,simocowirelesssolutions.com,solymarhoteles.bookinweb.es,rescueanimalsireland.ie,poettinger.at,xn--bafg-7qa.de,capsugel.com,smartclinic.hu,erkanlitatilkoyu.com,piratescove.ie,bund.de,juliaestetica.com,lhv.ee,axa-im.it,axa-im.de,axa-im.com.sg,axa-im.fr,axa-im-usa.com,axa-im.co.uk,axa-im.com,axa-im.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! .fancybox-container
+yellowbrick.nl,quiko.gr,hartorama.gr,tobaccopreventioncessation.com,kafkas.gr,intersport.gr,intersport.ro,intersport.bg,carflex.pro,carflex.fr,vwfs.pl,carshop24.at,seelenschoen.com,herwerthner.com,landhotel-kolb.at,alpenhof-ramsau.at,p-import.co.at,urlaub-bei-hartweger.at,karl-pitzer.com,malerei-ramsauer.at,bretterklieber.com,kirchenbichler.at,schlattham.at,rohrleitungsbau.at,zt-fritz.at,r-u-s.at,akustik-stegermaier.com,dream-design.at,sonnhof-ramsau.at,ek-bau.at,haingartner-holz.at,gasthof-ruescher.at,bubble-soccer.net,elektrofladischer.at,sport-scherz.at,fensterbank-express.at,bau-tadic.at,rhetorik-trainer.com,bauwerk-schladming.at,golfpichlarn.at,sonnberglifte.at,hondoscenter.com,intersport.com.cy,jpccr.eu,eventssystem.com,ks-gruppe.de,butor-mirjan24.hu,newtom.it,myray.it,virbac.ph,icelandicglacial.is,icelandicglacial.com,huaweistore.bg,huaweistore.gr##.fancybox-container
+yellowbrick.nl,quiko.gr,hartorama.gr,tobaccopreventioncessation.com,kafkas.gr,intersport.gr,intersport.ro,intersport.bg,carflex.pro,carflex.fr,vwfs.pl,carshop24.at,seelenschoen.com,herwerthner.com,landhotel-kolb.at,alpenhof-ramsau.at,p-import.co.at,urlaub-bei-hartweger.at,karl-pitzer.com,malerei-ramsauer.at,bretterklieber.com,kirchenbichler.at,schlattham.at,rohrleitungsbau.at,zt-fritz.at,r-u-s.at,akustik-stegermaier.com,dream-design.at,sonnhof-ramsau.at,ek-bau.at,haingartner-holz.at,gasthof-ruescher.at,bubble-soccer.net,elektrofladischer.at,sport-scherz.at,fensterbank-express.at,bau-tadic.at,rhetorik-trainer.com,bauwerk-schladming.at,golfpichlarn.at,sonnberglifte.at,hondoscenter.com,intersport.com.cy,jpccr.eu,eventssystem.com,ks-gruppe.de,butor-mirjan24.hu,newtom.it,myray.it,virbac.ph,icelandicglacial.is,icelandicglacial.com,huaweistore.bg,huaweistore.gr##body,html:style(overflow: auto !important; position: initial !important;)
+!! mod_cms_accept_tags
+stabila-promotion.com,stabila.com,rheinhessische.de,bergkamen.de,desch.com,bundesverband-systemgastronomie.de,croso.de,die-fischerstrasse.de##.mod_cms_accept_tags
+stabila-promotion.com,stabila.com,rheinhessische.de,bergkamen.de,desch.com,bundesverband-systemgastronomie.de,croso.de,die-fischerstrasse.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cookie-message
+tnt.it##.cookie-message
+! puravita.ch
+puravita.ch###cookie-banner-modal
+puravita.ch##.modals-overlay
+puravita.ch##body:style(overflow: auto !important; position: initial !important;)
+!! .modals-overlay
+bauhaus.no,bauhaus.se,parex.gr,lotto.it,paulandshark.com,taf.ba,dare2tri.com,t3micro.fr,t3micro.de,t3micro.it,t3micro.dk,t3micro.pl,t3micro.es,t3micro.pt,t3micro.se,t3micro.co.uk,t3micro.nl,t3micro.at,t3micro.be##.modals-overlay
+bauhaus.no,bauhaus.se,parex.gr,lotto.it,paulandshark.com,taf.ba,dare2tri.com,t3micro.fr,t3micro.de,t3micro.it,t3micro.dk,t3micro.pl,t3micro.es,t3micro.pt,t3micro.se,t3micro.co.uk,t3micro.nl,t3micro.at,t3micro.be##html:style(height: auto !important; overflow: auto !important)
+!! .basicLightbox
+authentic-plaza.com,kikka-activechair.com,bolerojunior.gr,szappan.hu,sanel.lv,zivara.ro,thegreenegg.ch,allegrigirarrosti.com,deco-in.ro,beboo.ro,sinopiarestauro.it,casabottega.net,shandhigson.co.uk,roscomponents.com,laboutiquemajorpigalle.com,armeriavarona.com,design-floral.ro,climahosteleria.es,svaposhop.fr,kalkito.gr,tuttopasticceria.it,markoshop.si,aminoprohealthcare.com##.basicLightbox
+authentic-plaza.com,kikka-activechair.com,bolerojunior.gr,szappan.hu,sanel.lv,zivara.ro,thegreenegg.ch,allegrigirarrosti.com,deco-in.ro,beboo.ro,sinopiarestauro.it,casabottega.net,shandhigson.co.uk,roscomponents.com,laboutiquemajorpigalle.com,armeriavarona.com,design-floral.ro,climahosteleria.es,svaposhop.fr,kalkito.gr,tuttopasticceria.it,markoshop.si,aminoprohealthcare.com##body,html:style(height: auto !important; overflow: auto !important)
+! doka.com
+doka.com##+js(set-cookie, hide_cookieoverlay_v2, 1, , reload, 1)
+doka.com##+js(set-cookie, socialmedia-cookies_allowed_v2, 0)
+doka.com##+js(set-cookie, performance-cookies_allowed_v2, 0)
+!! .cc-grower
+berocca.com.au,bepanthen.com.au,claratyne.com.au##.cc-grower
+berocca.com.au,bepanthen.com.au,claratyne.com.au##body,html:style(height: auto !important; overflow: auto !important)
+!! #ccc
+thracegroup.com,donlow.gr###ccc
+thracegroup.com,donlow.gr##body,html:style(overflow: auto !important; position: initial !important;)
+!! #cc
+breakwaterit.co.uk,unternehmensregister.de,transparenzregister.de,bundesanzeiger.de,publikations-plattform.de,leireg.de###cc
+breakwaterit.co.uk,unternehmensregister.de,transparenzregister.de,bundesanzeiger.de,publikations-plattform.de,leireg.de##body,html:style(height: auto !important; overflow: auto !important)
+!! .cc
+dpp.cz##.cc
+dpp.cz##body,html:style(height: auto !important; overflow: auto !important)
+! roshtein.com
+roshtein.com##.CookieConsent_wrapper__lsbBi
+roshtein.com##*:style(filter: none !important;opacity:1 !important;pointer-events:auto !important)
+!! pointerevents (only)
+correos.es,tranquilidade.pt,toureiffel.paris,ziegert-group.com,northernpowergrid.com,borgomontecedrone.it##*:style(pointer-events:auto !important; filter: none !important)
+!! pointerevents + overlayfilter
+cbsennistymon.com,fbreader.org,holzkern.com,seiko-boutique.de,condok.org,gasolinapromociones.bridgestone.es,locateyoursound.com,casadesignarredamenti.it,arredabook.it,mc-mutual.com,leserservice.ch,erdbeerprofi.de,edigroup.be,varcevanje-energije.si,enac.es,exagon.de,sozialversicherung-kompetent.de,dietz-motoren.de##*:style(filter: none !important;opacity:1 !important;pointer-events:auto !important)
+!! .cookieswindow (scroll)
+henleyglobal.com##body:style(overflow: auto !important;)
+!! .lbOverlay
+dukh.dk,lekiaviation.com,boligbeton.dk,ordblindenetvaerket.dk##.lbOuterWrapper
+dukh.dk,lekiaviation.com,boligbeton.dk,ordblindenetvaerket.dk##.lbOverlay
+dukh.dk,lekiaviation.com,boligbeton.dk,ordblindenetvaerket.dk##body:style(overflow: auto !important; position: initial !important;)
+!! onetrust scroll fix
+zurbrueggen.de,ilsole24ore.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! .gdpr-cookie-overlay
+convertia.com,inconcertcc.com##.gdpr-cookie-overlay
+convertia.com,inconcertcc.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! .rz-modal
+featherliteladders.com##.rz-modal
+featherliteladders.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! .current
+ejot.de,ejot.at,ejot.cn,ejot.co.uk,ejot.com,bingen-ruedesheimer.de,rainfordsolutions.com,stevensbikes.de,vehicle-certification-agency.gov.uk,bikesale.de,perfectingpilates.com,shirtee.com,ppfeurope.com,defencediscountservice.co.uk,peter-berger.info##.current
+ejot.de,ejot.at,ejot.cn,ejot.co.uk,ejot.com,bingen-ruedesheimer.de,rainfordsolutions.com,stevensbikes.de,vehicle-certification-agency.gov.uk,bikesale.de,perfectingpilates.com,shirtee.com,ppfeurope.com,defencediscountservice.co.uk,peter-berger.info##body,html:style(overflow: auto !important; position: initial !important;)
+!! #cookie-info (overlay)
+de-de.eundl.de##.modal-backdrop
+!! .s-cookie-info
+smow.fr,smow.com,smow.de##.s-cookie-info
+smow.fr,smow.com,smow.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! #usercentrics-root
+festool.com,festool.pl,festool.ua,festool.ru,festool.de,festoolusa.com###usercentrics-root
+festool.com,festool.pl,festool.ua,festool.ru,festool.de,festoolusa.com##body,html:style(height: auto !important; overflow: auto !important)
+!! .gdprModal
+nextdaycatering.co.uk,costautoricambi.com,digabrielericambi.it,pevgrow.com,pivo-ressel.si,kripa.it,complex-apicol.ro##.gdprModal
+nextdaycatering.co.uk,costautoricambi.com,digabrielericambi.it,pevgrow.com,pivo-ressel.si,kripa.it,complex-apicol.ro##body,html:style(overflow: auto !important; position: initial !important;)
+!! .dsvgpBannerContainer
+bederhomes.ch,beterhomes.ch,betterhome.ch,betterhomes-international.com,betterhomes.at,betterhomes.ch,betterhoms.ch##.dsvgpBannerContainer
+bederhomes.ch,beterhomes.ch,betterhome.ch,betterhomes-international.com,betterhomes.at,betterhomes.ch,betterhoms.ch##html:style(overflow: auto !important; position: initial !important;)
+!! .reveal__overlay
+digitalo.de,smdv.de##.reveal__overlay
+digitalo.de,smdv.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! .modals-wrapper
+cameraworld.co.uk,vitalpoint.cz,combat.pl,intersport.si,intersport.ba,intersport.me,intersport.hr,productosqp.com,alpinawein.de,hydroscand.co.za,hydroscand.dk,hydroscand.fr,navygreen-eshop.gr,drgoerg.com,bloomfashion.nl,artero.com,cd-lux.de,gutes-shop.de,elvezio.com,jeans-fritz.de,naturalpower.at,myrobotcenter.at,myrobotcenter.co.uk,myrobotcenter.de,intersport.rs,remarketed.com,wendoverart.com,alles-im-lackshop.de##.modals-wrapper
+cameraworld.co.uk,vitalpoint.cz,combat.pl,intersport.si,intersport.ba,intersport.me,intersport.hr,productosqp.com,alpinawein.de,hydroscand.co.za,hydroscand.dk,hydroscand.fr,navygreen-eshop.gr,drgoerg.com,bloomfashion.nl,artero.com,cd-lux.de,gutes-shop.de,elvezio.com,jeans-fritz.de,naturalpower.at,myrobotcenter.at,myrobotcenter.co.uk,myrobotcenter.de,intersport.rs,remarketed.com,wendoverart.com,alles-im-lackshop.de##body:style(overflow: auto !important; position: initial !important;)
+!! .privacy_headsup_overlay
+animail.se,musti.no,petenkoiratarvike.com,mustijamirri.fi,vetzoo.se,arkenzoo.se,vetzoo.no##.privacy_headsup
+animail.se,musti.no,petenkoiratarvike.com,mustijamirri.fi,vetzoo.se,arkenzoo.se,vetzoo.no##.privacy_headsup_overlay
+!! .fancybox-overlay
+hobbysaliplant.com,trcfrant.ru,artesaniasmontejo.com,fadenkreuz-shop.de,partycenter.ro,viduca.com,bioitalia.it,elrobleperfumado.com,sokalapesca.com,paraetpharmacie.com,protec-sai.es,shop-univer.de,outletbodegas.com,atelierstore.fr,zootecniasl.com,recail.es,ieftin-da-bun.ro,voltabaterias.com,fuzeau.com,pointblankmusicschool.com,acino.co.za,acino.swiss,pharmaciefontvieille.com,werkenmetmerken.nl,werkenmetmerken.be,marleyplumbinganddrainage.com,hungariasport.com,centroculturalmva.es,farajan.es,consorciorsumalaga.com,costadelsolmalaga.org,iznate.es,villanuevadelaconcepcion.es,parauta.es,sedella.es,teba.es,cartama.es,alozaina.es,elburgo.es,ojen.es,humilladero.es,benamocarra.es,cuevasdesanmarcos.es,alpandeire.es,cortesdelafrontera.es,benarraba.es,jimeradelibar.es,almargen.es,archez.es,benadalid.es,salares.es,totalan.es,pujerra.es,periana.es,ardales.es,birdingmalaga.es,carratraca.es,gaucin.es,algatocin.es,mollina.es,alfarnatejo.es,montecorto.es,alfarnate.es,valledeabdalajis.es,fuentedepiedra.es,almogia.es,jubrique.es,canillasdeaceituno.es,benalauria.es,elborge.es,riogordo.es,comares.es,cuevasbajas.es,villanuevadetapia.es,benamargosa.es,lavinuela.es,benahavis.es,gransendademalaga.es,monda.es,malagaviva.org,genalguacil.es,omau-malaga.com,atajate.es,villanuevadeltrabuco.es,campillos.es,cartajima.es,tolox.es,colmenar.es,serrato.es,sierradeyeguas.es,casabermeja.es,sendalitoral.es,juzcar.es,arriate.es,archidona.es,cutar.es,alameda.es,lavinuela.es,foxtons.co.uk,alexanderhall.co.uk,e-sigaret.ee,wuestenrot.at,faberkabel.de,sabinastore.com##.fancybox-overlay
+hobbysaliplant.com,trcfrant.ru,artesaniasmontejo.com,fadenkreuz-shop.de,partycenter.ro,viduca.com,bioitalia.it,elrobleperfumado.com,sokalapesca.com,paraetpharmacie.com,protec-sai.es,shop-univer.de,outletbodegas.com,atelierstore.fr,zootecniasl.com,recail.es,ieftin-da-bun.ro,voltabaterias.com,fuzeau.com,pointblankmusicschool.com,acino.co.za,acino.swiss,pharmaciefontvieille.com,werkenmetmerken.nl,werkenmetmerken.be,marleyplumbinganddrainage.com,hungariasport.com,centroculturalmva.es,farajan.es,consorciorsumalaga.com,costadelsolmalaga.org,iznate.es,villanuevadelaconcepcion.es,parauta.es,sedella.es,teba.es,cartama.es,alozaina.es,elburgo.es,ojen.es,humilladero.es,benamocarra.es,cuevasdesanmarcos.es,alpandeire.es,cortesdelafrontera.es,benarraba.es,jimeradelibar.es,almargen.es,archez.es,benadalid.es,salares.es,totalan.es,pujerra.es,periana.es,ardales.es,birdingmalaga.es,carratraca.es,gaucin.es,algatocin.es,mollina.es,alfarnatejo.es,montecorto.es,alfarnate.es,valledeabdalajis.es,fuentedepiedra.es,almogia.es,jubrique.es,canillasdeaceituno.es,benalauria.es,elborge.es,riogordo.es,comares.es,cuevasbajas.es,villanuevadetapia.es,benamargosa.es,lavinuela.es,benahavis.es,gransendademalaga.es,monda.es,malagaviva.org,genalguacil.es,omau-malaga.com,atajate.es,villanuevadeltrabuco.es,campillos.es,cartajima.es,tolox.es,colmenar.es,serrato.es,sierradeyeguas.es,casabermeja.es,sendalitoral.es,juzcar.es,arriate.es,archidona.es,cutar.es,alameda.es,lavinuela.es,foxtons.co.uk,alexanderhall.co.uk,e-sigaret.ee,wuestenrot.at,faberkabel.de,sabinastore.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! .ui-widget-overlay
+dcshoes.it,atticabank.gr,intersport.hu,mironet.cz,learnattack.de,campingcabodegata.com,campingred.es,campingriojerte.com,campingurbasa.com,campingboltana.com,campingcuenca.com,campingelastral.es,campingfuentescarrionas.com,campingelmolino.com,campingcastillo.com,campingcabodegata.es,lascorralizas.com,campingetxarri.com,campingdeharo.com,lagoresort.com,enracha.es,sgim.org,montkov.cz,birkenstock.com,piscine-champerret.fr,piscine-godard.fr,citeaquademie.fr,billetterie.elysee-montmartre.com,couzeo.fr,piscine-estrees.fr,espontoise.fr,complexe-citelium.fr,ca-laloue.fr,billetterie.stadetoulousain.fr,billetterie.stade.fr,duo-caudry.fr,lavague-plainevallee.fr,piscine-berlioux.fr,wetixpro.com,billetterie-bopb.fr,piscine-baker.fr,casinodeparis.fr,letrianon.fr,dragons-billetterie.com,aquazergues.fr,lo-obernai.fr,fcgticket.com,sceneo-capso.fr,helicea-cab.fr,billetterie-ffhandball.fr##.ui-widget-overlay
+dcshoes.it,atticabank.gr,intersport.hu,mironet.cz,learnattack.de,campingcabodegata.com,campingred.es,campingriojerte.com,campingurbasa.com,campingboltana.com,campingcuenca.com,campingelastral.es,campingfuentescarrionas.com,campingelmolino.com,campingcastillo.com,campingcabodegata.es,lascorralizas.com,campingetxarri.com,campingdeharo.com,lagoresort.com,enracha.es,sgim.org,montkov.cz,birkenstock.com,piscine-champerret.fr,piscine-godard.fr,citeaquademie.fr,billetterie.elysee-montmartre.com,couzeo.fr,piscine-estrees.fr,espontoise.fr,complexe-citelium.fr,ca-laloue.fr,billetterie.stadetoulousain.fr,billetterie.stade.fr,duo-caudry.fr,lavague-plainevallee.fr,piscine-berlioux.fr,wetixpro.com,billetterie-bopb.fr,piscine-baker.fr,casinodeparis.fr,letrianon.fr,dragons-billetterie.com,aquazergues.fr,lo-obernai.fr,fcgticket.com,sceneo-capso.fr,helicea-cab.fr,billetterie-ffhandball.fr##.ui-dialog
+atticabank.gr,intersport.hu,mironet.cz,campingcabodegata.com,campingred.es,campingriojerte.com,campingurbasa.com,campingboltana.com,campingcuenca.com,campingelastral.es,campingfuentescarrionas.com,campingelmolino.com,campingcastillo.com,campingcabodegata.es,lascorralizas.com,campingetxarri.com,campingdeharo.com,lagoresort.com,enracha.es,sgim.org,montkov.cz,birkenstock.com,piscine-champerret.fr,piscine-godard.fr,citeaquademie.fr,billetterie.elysee-montmartre.com,couzeo.fr,piscine-estrees.fr,espontoise.fr,complexe-citelium.fr,ca-laloue.fr,billetterie.stadetoulousain.fr,billetterie.stade.fr,duo-caudry.fr,lavague-plainevallee.fr,piscine-berlioux.fr,wetixpro.com,billetterie-bopb.fr,piscine-baker.fr,casinodeparis.fr,letrianon.fr,dragons-billetterie.com,aquazergues.fr,lo-obernai.fr,fcgticket.com,sceneo-capso.fr,helicea-cab.fr,billetterie-ffhandball.fr##body,html:style(overflow: auto !important; position: initial !important;)
+!! ##[data-popmake*="cookie_"]
+electric-scooters-bikes.be##[data-popmake*="cookie_"]
+electric-scooters-bikes.be##html:style(overflow: auto !important; position: initial !important;)
+! .modal / .modal-overlay
+alcodistributions.fr,alcodistribuciones.com,alcodistribuzioni.com,alcogrosshandler.de##.modal
+alcodistributions.fr,alcodistribuciones.com,alcodistribuzioni.com,alcogrosshandler.de##.modal-overlay
+alcodistributions.fr,alcodistribuciones.com,alcodistribuzioni.com,alcogrosshandler.de##html:style(position: static !important; overflow: auto !important; width: auto !important;)
+! canyon.com
+canyon.com##+js(rc, js-modalUnclosable, , stay)
+canyon.com##+js(remove-class, js-cookiesModal|is-open, .js-cookiesModal\,.is-open)
+canyon.com##body:style(overflow: auto !important; position: initial !important;)
+! drimsim.com
+drimsim.com##.remodal-wrapper
+drimsim.com##.remodal-overlay
+drimsim.com##+js(rc, remodal-bg, , stay)
+drimsim.com##body,html:style(overflow: auto !important;)
+! store.godox.eu
+store.godox.eu##.x13eucookies
+store.godox.eu##body:style(overflow: auto !important; position: initial !important;)
+!! .remodal-wrapper
+palladiumboots.de,yvonnebennetti.com##.remodal-overlay
+palladiumboots.de,yvonnebennetti.com##.remodal-wrapper
+!! .modal-root
+vevovo.be,vendezvotrevoiture.be,wirkaufendeinauto.at,vikoberallebiler.dk,wijkopenautos.nl,vikoperdinbil.se,noicompriamoauto.it,vendezvotrevoiture.fr,compramostucoche.es,wijkopenautos.be##.modal-root
+vevovo.be,vendezvotrevoiture.be,wirkaufendeinauto.at,vikoberallebiler.dk,wijkopenautos.nl,vikoperdinbil.se,noicompriamoauto.it,vendezvotrevoiture.fr,compramostucoche.es,wijkopenautos.be##body,html:style(overflow: auto !important; position: initial !important;)
+!! .coh-modal (Bayer)
+trkcancer.com,cteph.jp,kadinsagligitv.com,adempas.jp,berlis.ch,xarelto.ch,birthcontrol101.com,eylea.ch,gyndoc.ch,secuidadoutor.com.br,mybodymyway.com.au,endometriose-info.ch,your-life.hk,colaborator.jp,g4atokyo.jp,aspirinprotect.co.kr,ckdandt2d.com,your-life-sa.com,hoyelijo.com.ar,nubeqa.ch,loveeyesight.hk,aimhigher8.ca##.coh-modal
+trkcancer.com,cteph.jp,kadinsagligitv.com,adempas.jp,berlis.ch,xarelto.ch,birthcontrol101.com,eylea.ch,gyndoc.ch,secuidadoutor.com.br,mybodymyway.com.au,endometriose-info.ch,your-life.hk,colaborator.jp,g4atokyo.jp,aspirinprotect.co.kr,ckdandt2d.com,your-life-sa.com,hoyelijo.com.ar,nubeqa.ch,loveeyesight.hk,aimhigher8.ca##body,html:style(overflow: auto !important; position: initial !important;)
+!! Bayer sites
+bayaspirina.com.ar,actron.com.ar,restoralax.ca,aspirina-ca.com,rennie.com.ar,aerius.ca,flintstonesvitamins.ca,aleve.ca,hydrasense.ca,oneaday.ca,supradyn.com.ar,canesten.co.nz,bepanthol.cl,cardioaspirina.cl,aspirinetas.com.ar,bepanthene.com,aerius.net.au,empecid.com.ar,canesten.com.au,bepanthen.com.au,iberogast.com.au,clarityne.com.cn,nasonexallergy.com.au,claratyne.co.nz,bepanthen.co.nz,bezbryli.cz,bepanthen.ma,bepanthen.com.pe,bepanthen.com.sg,bepanthen.com.vn,bepanthen.com.ec,bepanthen.dz,losecextra.co.nz,antibiopro.com.vn##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cookieWarning-container
+eteam-winkler.de,kdn-elektro.de,elektro-kotz.de,elektro-service-rauh.de,elektroanlagenbuettner.de,be-connect.online,bayergruppe.com,bayer-wkt.de,bayer-wind.de,bayer-wd.de,elektro-joa.de,htechnik.de,ehk-service.de,bittner-tv.de,elektro-suelzner.de,elektro-leps.de,elektromax-hausgeraete.de,elektrotechnik-schedel.de,elkugmbh.de,ln-elektro-gmbh.de,weiss-blau-gmbh.de,sunbeam-energy.de,prokauf.com,lichtstudio-kerl.de,liebing-beese.de,hoeschel-baumann.de,hausgeraete-kraemer.de,gehlhaar-elektrotechnik.de,ehs-elektrotechnik.de,elektrojarschke.de,elektrotechnik-fleischmann.de,elektroseemueller.de,schoerling-blitz.de,ast-apolda.com,elektro-klippel.de,arntz-haustechnik.de,elektro-bindel.de,elektrotechnik-weiss.com,brandschutz-hamburg.de,wagnerelektrotechnik.de,el-kramer.de,mks-hof.de,wernz-elektro.de,e3-energy.de,sg-solar.de,elektrokrebs.de,elektro-roehrl.de,elektro-kreher.de,giegling-vonsaal.de,elektro-lehmann.com,ems-wurzen.de##.cookieWarning-container
+eteam-winkler.de,kdn-elektro.de,elektro-kotz.de,elektro-service-rauh.de,elektroanlagenbuettner.de,be-connect.online,bayergruppe.com,bayer-wkt.de,bayer-wind.de,bayer-wd.de,elektro-joa.de,htechnik.de,ehk-service.de,bittner-tv.de,elektro-suelzner.de,elektro-leps.de,elektromax-hausgeraete.de,elektrotechnik-schedel.de,elkugmbh.de,ln-elektro-gmbh.de,weiss-blau-gmbh.de,sunbeam-energy.de,prokauf.com,lichtstudio-kerl.de,liebing-beese.de,hoeschel-baumann.de,hausgeraete-kraemer.de,gehlhaar-elektrotechnik.de,ehs-elektrotechnik.de,elektrojarschke.de,elektrotechnik-fleischmann.de,elektroseemueller.de,schoerling-blitz.de,ast-apolda.com,elektro-klippel.de,arntz-haustechnik.de,elektro-bindel.de,elektrotechnik-weiss.com,brandschutz-hamburg.de,wagnerelektrotechnik.de,el-kramer.de,mks-hof.de,wernz-elektro.de,e3-energy.de,sg-solar.de,elektrokrebs.de,elektro-roehrl.de,elektro-kreher.de,giegling-vonsaal.de,elektro-lehmann.com,ems-wurzen.de##+js(rc, cookie-warning-open, , stay)
+!! .overlay
+autodoc.de,autodoc.se,auto-doc.at,auto-doc.fr,autodoc.co.uk,auto-doc.it,justinguitar.com,autoteiledirekt.de,hotcourses.ru,mathem.se,primehome.de,diebayerische.de,fups.com,goteborg.com,solcom.de,erdinger.de,auto-doc.be,auto-doc.ch,auto-doc.ie,auto-doc.pt,autodoc.be,autodoc.bg,autodoc.cz,autodoc.co.no,autodoc.dk,autodoc.ee,autodoc.fi,autodoc.gr,autodoc.hu,autodoc.lt,autodoc.lu,autodoc.lv,autodoc.nl,autodoc.pl,autodoc.si,autodoc.sk,autodoc24.ch,autodoc24.ro##.overlay
+autodoc.de,autodoc.se,auto-doc.at,auto-doc.fr,autodoc.co.uk,auto-doc.it,justinguitar.com,autoteiledirekt.de,hotcourses.ru,mathem.se,primehome.de,diebayerische.de,fups.com,goteborg.com,solcom.de,erdinger.de,auto-doc.be,auto-doc.ch,auto-doc.ie,auto-doc.pt,autodoc.be,autodoc.bg,autodoc.cz,autodoc.co.no,autodoc.dk,autodoc.ee,autodoc.fi,autodoc.gr,autodoc.hu,autodoc.lt,autodoc.lu,autodoc.lv,autodoc.nl,autodoc.pl,autodoc.si,autodoc.sk,autodoc24.ch,autodoc24.ro##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cdk-overlay-container (non-scroll fix)
+cursr.app##.cdk-overlay-container
+!! .cdk-overlay-container
+technomarket.bg,digit-concept.group,u-bordeaux.fr,skaarup-fjernvarme.dk,ppk.pzu.pl,flyingblue.se,iqair.com,swedbank.se,roseoftralee.ie,soubha.info,rfeda.es,vivirasturias.com,energym-nerac.com,alkhabar.ma,fo-renault.com,cgt-renault.com,audiolivres.info,app.web-byte.de,hotellallastra.com,fosps.com,emons.it,emons.de,emons.cz,emons.pl,emons.ch,emons.com,cristopower.com,rodovrefjernvarme.dk,skjernfjernvarme.dk,aarsfjv.dk##.cdk-overlay-container
+technomarket.bg,digit-concept.group,u-bordeaux.fr,skaarup-fjernvarme.dk,ppk.pzu.pl,flyingblue.se,iqair.com,swedbank.se,roseoftralee.ie,soubha.info,rfeda.es,vivirasturias.com,energym-nerac.com,alkhabar.ma,fo-renault.com,cgt-renault.com,audiolivres.info,app.web-byte.de,hotellallastra.com,fosps.com,emons.it,emons.de,emons.cz,emons.pl,emons.ch,emons.com,cristopower.com,rodovrefjernvarme.dk,skjernfjernvarme.dk,aarsfjv.dk##html:style(position: static !important; overflow: auto !important; width: auto !important;)
+!! .cookiemessagebackground
+1a-garten-krauss.de,floragard.de,kunzbaumschulen.ch,mauk-gartenwelt.de,rammes-gruenland.com,gartenbaumschule-becker.de,gartenwelt-dauchenbeck.de,garten-kremer.de,pflanzenkatalog.ley-baumschule.de,olerum.de,gartencenter-streb.de,1a-garten-hopp.de,1a-garten-weggler.de,1a-garten.de,app-baumschulen.de,aquatop-aachen.de,bauer-baumschulen.ch,baumschule-haid.de,baumschule-mueller.de,baumschule-plattner.de,baumschule-rosskamp.de,baumschule-stielau.de,baumschulen-suedost.at,bazle.de,beichel.com,bellandris-lueske.de,bellandris-woerlein.de,berghausener-blumentopf.de,blumen-dorn.de,blumen-eber.de,blumen-frondorf.de,blumen-osswald.com,blumen-radloff.de,blumen-tinneberg.de,blumen-wilking.de,blumenhof-pfeil.de,blumenland-halmer.de,blumenparadies-radtke.de,certech.de,dabluehichauf.de,deltaflor.de,donaumarkt-gartencenter.de,doschblumen.de,edelkamp.de,fahr-pflanzen.de,fenis-blumen.de,fgh.de,fischer-pflanzen.de,florado.de,florapark.de,florawelt.de,gaertnerei-dunst.de,gaertnerei-huebsch.de,gaertnerei-jandl.at,gaertnerei-jenkel.de,gaertnerei-otten.de,gaertnerei-petersen.de,gaertnerei-steinhilber.de,gaertnerei-sylvester.de,ganslmaier.de,garten-baumschule-woehrle.de,garten-center-spiegel.de,garten-reiter.de,garten-sauer.de,garten-vielfalt.de,gartencenter-bachmann.de,gartencenter-bergerhoff.de,gartencenter-braun.de,gartencenter-decker.de,gartencenter-erfurt.de,gartencenter-kruse.de,gartencenter-meckelburg.de,gartencenter-nickl.de,gartencenter-nordharz.de,gartencenter-schrieverhoff.de,gartencenter-stassen.de,gartengraaf.de,gartenundambiente.com,gartenvergnuegen-lochte.de,goeppert-gartencenter.de,hegemann-kwh.de,hollandpark.de,inflora.de,jensgerdes.de,kircher-collection.de,landgaertnerei-beier.de,magnus-gartenpark.de,mauch-garten.de,meineoldenburger.de,meyers-muehle.de,myrhodo.de,neiske.com,ottos-gartenparadies.de,pflanzen-breuer.de,pflanzen-fuer-unsere-gaerten.ch,pflanzenhof-plum.de,pflanzenhof-schuerg.de,pflanzenhof-vaihingen.de,pflanzenkonzepte.net,pflanzenmarkt-schlereth.de,pflanzenrichter.de,piardino.cz,piardino.eu,piardino.info,piardino.it,planterspunch.de,projektsicherheit.de,ritter-blumen.de,schley-gartencenter.de,schupp-gartencenter.de,seebauer.de,seeberger-pflanzenhof.de,selders-toni.de,shop.gaertnerei-heckel.com,sporleder-gaertnerei.de,stauden-siebler.de,stoecker-stauden.de,striebel-haus-des-gartens.de,uhlsalarymaxing.nhs.uk,urgibl.de,villaflora.de,voigt-pflanzenhof.de,weber-baumschule.de,wilsaflor.de,wingendorfer-gaertnerei.de,zanker.net,zirener-pflanzen.de##.cookiemessagebackground
+1a-garten-krauss.de,floragard.de,kunzbaumschulen.ch,mauk-gartenwelt.de,rammes-gruenland.com,gartenbaumschule-becker.de,gartenwelt-dauchenbeck.de,garten-kremer.de,pflanzenkatalog.ley-baumschule.de,olerum.de,gartencenter-streb.de,1a-garten-hopp.de,1a-garten-weggler.de,1a-garten.de,app-baumschulen.de,aquatop-aachen.de,bauer-baumschulen.ch,baumschule-haid.de,baumschule-mueller.de,baumschule-plattner.de,baumschule-rosskamp.de,baumschule-stielau.de,baumschulen-suedost.at,bazle.de,beichel.com,bellandris-lueske.de,bellandris-woerlein.de,berghausener-blumentopf.de,blumen-dorn.de,blumen-eber.de,blumen-frondorf.de,blumen-osswald.com,blumen-radloff.de,blumen-tinneberg.de,blumen-wilking.de,blumenhof-pfeil.de,blumenland-halmer.de,blumenparadies-radtke.de,certech.de,dabluehichauf.de,deltaflor.de,donaumarkt-gartencenter.de,doschblumen.de,edelkamp.de,fahr-pflanzen.de,fenis-blumen.de,fgh.de,fischer-pflanzen.de,florado.de,florapark.de,florawelt.de,gaertnerei-dunst.de,gaertnerei-huebsch.de,gaertnerei-jandl.at,gaertnerei-jenkel.de,gaertnerei-otten.de,gaertnerei-petersen.de,gaertnerei-steinhilber.de,gaertnerei-sylvester.de,ganslmaier.de,garten-baumschule-woehrle.de,garten-center-spiegel.de,garten-reiter.de,garten-sauer.de,garten-vielfalt.de,gartencenter-bachmann.de,gartencenter-bergerhoff.de,gartencenter-braun.de,gartencenter-decker.de,gartencenter-erfurt.de,gartencenter-kruse.de,gartencenter-meckelburg.de,gartencenter-nickl.de,gartencenter-nordharz.de,gartencenter-schrieverhoff.de,gartencenter-stassen.de,gartengraaf.de,gartenundambiente.com,gartenvergnuegen-lochte.de,goeppert-gartencenter.de,hegemann-kwh.de,hollandpark.de,inflora.de,jensgerdes.de,kircher-collection.de,landgaertnerei-beier.de,magnus-gartenpark.de,mauch-garten.de,meineoldenburger.de,meyers-muehle.de,myrhodo.de,neiske.com,ottos-gartenparadies.de,pflanzen-breuer.de,pflanzen-fuer-unsere-gaerten.ch,pflanzenhof-plum.de,pflanzenhof-schuerg.de,pflanzenhof-vaihingen.de,pflanzenkonzepte.net,pflanzenmarkt-schlereth.de,pflanzenrichter.de,piardino.cz,piardino.eu,piardino.info,piardino.it,planterspunch.de,projektsicherheit.de,ritter-blumen.de,schley-gartencenter.de,schupp-gartencenter.de,seebauer.de,seeberger-pflanzenhof.de,selders-toni.de,shop.gaertnerei-heckel.com,sporleder-gaertnerei.de,stauden-siebler.de,stoecker-stauden.de,striebel-haus-des-gartens.de,uhlsalarymaxing.nhs.uk,urgibl.de,villaflora.de,voigt-pflanzenhof.de,weber-baumschule.de,wilsaflor.de,wingendorfer-gaertnerei.de,zanker.net,zirener-pflanzen.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! #wdkCookie
+fmk-steuer.de###wdkCookie
+fmk-steuer.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! .featherlight
+scholpp.es,scholpp.pl,scholpp.it,ptc.eu,scholpp.com,abo24.de,overdrive.com,wetu.com##.featherlight
+scholpp.es,scholpp.pl,scholpp.it,ptc.eu,scholpp.com,abo24.de,overdrive.com,wetu.com##+js(rc, with-featherlight, , stay)
+!! .popup__backdrop
+tyleenslang.nl,schrikdraad.net,kruiwagen.net,pvcvoordeel.nl,pvcbuis.com##.popup__backdrop
+tyleenslang.nl,schrikdraad.net,kruiwagen.net,pvcvoordeel.nl,pvcbuis.com##.popup
+tyleenslang.nl,schrikdraad.net,kruiwagen.net,pvcvoordeel.nl,pvcbuis.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! .acris-cookie-consent
+jawoll.de,moebel-as.de,buss-wohnen.de,mline.com,bikebox-shop.de,electropapa.com,baer-shoes.com,baer-schuhe.de,baer-shoes.co.uk,baer-schuhe.ch,baer-schuhe.at,moses-verlag.de,roesle.com,arctic.de,graf-dichtungen.de,hegemeister-kiepenkerl.de,sperli.de,maksyna.com,klwshop.de,vosker.shop,amiga-life.com,catolet-world.com,catoletworld.com,keimling.de,keimling.ch,pro-biomarkt.de,cafe-royal.com,studio-ausruestung.de,blumixx.de,auro-per-klick.de,pro-aqua.com,licefa.de,jerry-s.com,moebel-buss.de,amicanda.com,duw-shop.de,naturbaustoffcentrum.de,licefa-eyewear.com,kineco-shop.de##.acris-cookie-consent
+jawoll.de,moebel-as.de,buss-wohnen.de,mline.com,bikebox-shop.de,electropapa.com,baer-shoes.com,baer-schuhe.de,baer-shoes.co.uk,baer-schuhe.ch,baer-schuhe.at,moses-verlag.de,roesle.com,arctic.de,graf-dichtungen.de,hegemeister-kiepenkerl.de,sperli.de,maksyna.com,klwshop.de,vosker.shop,amiga-life.com,catolet-world.com,catoletworld.com,keimling.de,keimling.ch,pro-biomarkt.de,cafe-royal.com,studio-ausruestung.de,blumixx.de,auro-per-klick.de,pro-aqua.com,licefa.de,jerry-s.com,moebel-buss.de,amicanda.com,duw-shop.de,naturbaustoffcentrum.de,licefa-eyewear.com,kineco-shop.de##.modal-backdrop
+jawoll.de,moebel-as.de,buss-wohnen.de,mline.com,bikebox-shop.de,electropapa.com,baer-shoes.com,baer-schuhe.de,baer-shoes.co.uk,baer-schuhe.ch,baer-schuhe.at,moses-verlag.de,roesle.com,arctic.de,graf-dichtungen.de,hegemeister-kiepenkerl.de,sperli.de,maksyna.com,klwshop.de,vosker.shop,amiga-life.com,catolet-world.com,catoletworld.com,keimling.de,keimling.ch,pro-biomarkt.de,cafe-royal.com,studio-ausruestung.de,blumixx.de,auro-per-klick.de,pro-aqua.com,licefa.de,jerry-s.com,moebel-buss.de,amicanda.com,duw-shop.de,naturbaustoffcentrum.de,licefa-eyewear.com,kineco-shop.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! .filter-modal-background
+tulodz.pl,solarkurier.pl,satkurier.pl##.filter-modal-background
+tulodz.pl,solarkurier.pl,satkurier.pl##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cookies-eu-box
+maxi-pet.ro##.cookies-eu-box
+!! .cookies-block-its-light
+chamonixholidays.com,sandiegoapartamentos.es,distinctiveportugal.com,tuapartamento.com,vacancescamargue.com,eivillas.com,andarlibre.com,solaga.fr,lisbonnecollection.pt,lisbonnecollection.fr,myhomesorrento.com,eivillas.com,catalunyacasas.com,alpvisionresidences.com,riumar-family-resort.de,btb.es,avoriazchalets.com,dickinsonvillas.com,lra-cannes.com,idealcostabrava.net,casesalento.com,villalia.com,basquestay.com,lagomaggioreservice.com,nerjaparadiserentals.com,apartamentos-alcoceber.es,villarentals.gr,orangecosta.com,lisbonnecollection.com,parque-montroig.com,olalahomes.com,feelporto.com,solhabitat.com,holavillas.com,shortletrentals.com##.cookies-block-its-light
+chamonixholidays.com,sandiegoapartamentos.es,distinctiveportugal.com,tuapartamento.com,vacancescamargue.com,eivillas.com,andarlibre.com,solaga.fr,lisbonnecollection.pt,lisbonnecollection.fr,myhomesorrento.com,eivillas.com,catalunyacasas.com,alpvisionresidences.com,riumar-family-resort.de,btb.es,avoriazchalets.com,dickinsonvillas.com,lra-cannes.com,idealcostabrava.net,casesalento.com,villalia.com,basquestay.com,lagomaggioreservice.com,nerjaparadiserentals.com,apartamentos-alcoceber.es,villarentals.gr,orangecosta.com,lisbonnecollection.com,parque-montroig.com,olalahomes.com,feelporto.com,solhabitat.com,holavillas.com,shortletrentals.com##body:style(overflow: auto !important; position: initial !important;)
+! superwatchman.com
+superwatchman.com##.cookies-popup-form
+superwatchman.com##+js(rc, cookies-shown, body, stay)
+! .cookie-html-wrap
+ecl.org##.cookie-html-wrap
+ecl.org##body,html:style(overflow: auto !important; position: initial !important;)
+! maestralia.com
+maestralia.com##.melindres-message-container
+maestralia.com##body:style(position: static !important; overflow: auto !important; width: auto !important;)
+!! debugged-cookieoptions-container
+theovaloffice.be###debugged-cookieoptions-container
+theovaloffice.be##body,html:style(overflow: auto !important; position: initial !important;)
+!! no-cookie
+bitburger-braugruppe.de##+js(rc, no-cookie, , stay)
+bitburger-braugruppe.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! .inset-0.fixed
+refurbed.at,refurbed.pl,reimsuche.de,refurbed.dk,refurbed.fr,refurbed.ie,refurbed.it,refurbed.nl,refurbed.se,refurbed.de,akubi-shop.de,teichitekten24.de,koempf24.ch,censhare.com##.inset-0.fixed
+refurbed.at,refurbed.pl,reimsuche.de,refurbed.dk,refurbed.fr,refurbed.ie,refurbed.it,refurbed.nl,refurbed.se,refurbed.de,wolff-finnhaus-shop.de,akubi-shop.de,teichitekten24.de,koempf24.ch,censhare.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! cookie-information-template-wrapper
+skousen.dk###cookie-information-template-wrapper
+skousen.dk##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cookie-toast-wrap
+cogalhome.com##.cookie-toast-wrap
+cogalhome.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cookie-sheet-small
+idesigni.co.uk##.cookie-sheet-small
+idesigni.co.uk##body,html:style(height: auto !important; overflow: auto !important)
+!! .ccm-modal
+apfelpage.de,click-learn.de,tanke-guenstig.de,pfh.de,herrenberg.de,landkreis-nu.de,versicherungsjournal.de,ikkbb.de,auerswald.de,wunschliste.de,hundund.de##.ccm-modal
+apfelpage.de,click-learn.de,tanke-guenstig.de,pfh.de,herrenberg.de,landkreis-nu.de,versicherungsjournal.de,ikkbb.de,auerswald.de,wunschliste.de,hundund.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! .wz-rgpd
+zone-artisanale.com,hole19.fr,akouashop.com,destock-stickers.fr,merecerise.com,acheter-lunettes.com,tortoraaugusto.com,lapiglove.com,dunemer.com,galets-decodesign.com,leprintempsdemarnie.fr,jetecroque.com,amisprix.fr,topvapote.com,lapetitechenille.be,e-discount-europe.com,holster-etfr.com,destravauxchezmoi.com,innovtools.com,fluidmotion.fr,motifpersonnel.com,agrafeuse-cloueuse.com,lesmotssontdescadeaux.com,les-trottinettes.com,makemyvan.fr,lasavonneriedenyons.com,escalier-colimacon.com,slowcontrol.com,pepiniere-botanique.com,parapluieparis.com,siemtech.fr,la-carte-aux-epices.fr,boutique.hifivideogambetta.com,jetrouvemespieces.com,bahya-culinaire.com,designfromparis.com,cameleon-shop.com,bio-tele.com,auto-media.fr,lemecblinde.com,mysweetconcept.com,bioviela.com,precieusesante.com,valve-up.com,e-metropolight.com,equipements-collectivites.fr,boutique-lost-funeraire.com,letruckdecharlotte.com,gii.fr,philatema.com,planete-muslim.com,aphrodisiaque-store.com,tigeraudio.eu,collectivites-equipements.fr,cristallehrer.com,linfusion.fr,agrafeuse-cloueuse.com##.wz-rgpd
+zone-artisanale.com,hole19.fr,akouashop.com,destock-stickers.fr,merecerise.com,acheter-lunettes.com,tortoraaugusto.com,lapiglove.com,dunemer.com,galets-decodesign.com,leprintempsdemarnie.fr,jetecroque.com,amisprix.fr,topvapote.com,lapetitechenille.be,e-discount-europe.com,holster-etfr.com,destravauxchezmoi.com,innovtools.com,fluidmotion.fr,motifpersonnel.com,agrafeuse-cloueuse.com,lesmotssontdescadeaux.com,les-trottinettes.com,makemyvan.fr,lasavonneriedenyons.com,escalier-colimacon.com,slowcontrol.com,pepiniere-botanique.com,parapluieparis.com,siemtech.fr,la-carte-aux-epices.fr,boutique.hifivideogambetta.com,jetrouvemespieces.com,bahya-culinaire.com,designfromparis.com,cameleon-shop.com,bio-tele.com,auto-media.fr,lemecblinde.com,mysweetconcept.com,bioviela.com,precieusesante.com,valve-up.com,e-metropolight.com,equipements-collectivites.fr,boutique-lost-funeraire.com,letruckdecharlotte.com,gii.fr,philatema.com,planete-muslim.com,aphrodisiaque-store.com,tigeraudio.eu,collectivites-equipements.fr,cristallehrer.com,linfusion.fr,agrafeuse-cloueuse.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! .fundo-aviso-cookies
+ufs.br##.fundo-aviso-cookies
+ufs.br##body,html:style(height: auto !important; overflow: auto !important)
+!! .dimmer2
+proteincompany.fi,proteinbolaget.se###cookie_consent_manager_wrapper
+proteincompany.fi,proteinbolaget.se##.dimmer2
+proteincompany.fi,proteinbolaget.se##+js(rc, dimmeractive, body, stay)
+!! gera.de
+gera.de##.cookie-banner-container
+gera.de##.cookie-banner-overlay-blocker
+gera.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! .if6_eprivacy
+sparkasse-heilbronn.de,ostsaechsische-sparkasse-dresden.de,s-jena.de,stadtsparkasse-oberhausen.de,sparkasse-pdh.de,berliner-sparkasse.de,frankfurter-sparkasse.de,ksk-koeln.de,mbs.de,sparkasse-allgaeu.de,sparkasse-freiburg.de,sparkasse-hannover.de,sparkasse-hrv.de,sparkasse-koelnbonn.de,sparkasse-oberlausitz-niederschlesien.de,sskm.de,sska.de##.if6_eprivacy
+sparkasse-heilbronn.de,ostsaechsische-sparkasse-dresden.de,s-jena.de,stadtsparkasse-oberhausen.de,sparkasse-pdh.de,berliner-sparkasse.de,frankfurter-sparkasse.de,ksk-koeln.de,mbs.de,sparkasse-allgaeu.de,sparkasse-freiburg.de,sparkasse-hannover.de,sparkasse-hrv.de,sparkasse-koelnbonn.de,sparkasse-oberlausitz-niederschlesien.de,sskm.de,sska.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! .dwa-cms-ui-cookie
+dasweltauto.com.mx,vgacertifiedpreowned.com.au,dasweltauto.se##.dwa-cms-ui-cookie
+dasweltauto.com.mx,vgacertifiedpreowned.com.au,dasweltauto.se##body,html:style(overflow: auto !important; position: initial !important;)
+!! #rgbd
+mfr-chessy.fr,mfr-lamure.fr,mfr-saint-romain.fr,mfr-lapalma.fr,mfrvilliemorgon.asso.fr,mfr-charentay.fr,mfr.fr###rgpd
+mfr-chessy.fr,mfr-lamure.fr,mfr-saint-romain.fr,mfr-lapalma.fr,mfrvilliemorgon.asso.fr,mfr-charentay.fr,mfr.fr##body,html:style(overflow: auto !important; position: initial !important;)
+!! axeptio_overlay
+domitys.fr###axeptio_overlay
+domitys.fr##.axeptio_widget[data-service="cookies"]
+domitys.fr##body,html:style(overflow: auto !important; position: initial !important;)
+!! #rodoScreenBg
+komerso.pl,socialpress.pl###rodoScreenBg
+!! #cookieconsent-overlay
+veiligverkeer.be,rodekruis.be,workshopsveiligverkeer.be,vsv.be###cookieconsent-overlay
+!! .cookie-preferences-forms
+nationaltrust.org.uk##.cookie-preferences-forms
+nationaltrust.org.uk##body:style(position: static !important; overflow: auto !important; width: auto !important;)
+!! .c-cookie-preferences
+unitedutilities.com##.c-cookie-preferences
+unitedutilities.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cookie-inquiry-wrapper
+doppelherz.ru,protefix.com,queisser.de,wgm-rastatt.de,litozin.de,stozzon.de,protefix.cz,protefix.be,ramend.de,protefix.ro,protefix.es,protefix.sk,queisser.pl,intakt-pc.de,pfotenfroh.vet,doppelherz-elearning.de,protefix.com.tr,hnpm-corp.com,doppelherz.ua,doppelherz-lithuania.com,doppelherz.lv,doppelherzpharma.de,protefix.ua,queisser.com##.cookie-inquiry-wrapper
+doppelherz.ru,protefix.com,queisser.de,wgm-rastatt.de,litozin.de,stozzon.de,protefix.cz,protefix.be,ramend.de,protefix.ro,protefix.es,protefix.sk,queisser.pl,intakt-pc.de,pfotenfroh.vet,doppelherz-elearning.de,protefix.com.tr,hnpm-corp.com,doppelherz.ua,doppelherz-lithuania.com,doppelherz.lv,doppelherzpharma.de,protefix.ua,queisser.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cookie-consent-overlay
+hej-natural.com,hej-natural.de##.cookie-consent-overlay
+hej-natural.com,hej-natural.de##body:style(overflow: auto !important; position: initial !important;)
+!! #modal-container
+skyscanner.net,skyscanner.ru,skyscanner.fi,skyscanner.no,skyscanner.nl,skyscanner.ro,skyscanner.com.ni,skyscanner.at,skyscanner.com.sg,skyscanner.es,skyscanner.co.nz,skyscanner.com.sa,skyscanner.com.bo,skyscanner.com.br,skyscanner.mx,skyscanner.it,skyscanner.ae,skyscanner.in,skyscanner.com.sv,skyscanner.ie,skyscanner.co.kr,skyscanner.com.pe,skyscanner.com.ph,skyscanner.com.pa,skyscanner.hu,skyscanner.com.gt,skyscanner.com.co,skyscanner.dk,skyscanner.co.th,skyscanner.com.hn,skyscanner.pt,skyscanner.tw,skyscanner.de,skyscanner.com.hk,skyscanner.com.tw,skyscanner.pl,skyscanner.com.tr,skyscanner.cz,skyscanner.com,skyscanner.cr,skyscanner.com.py,skyscanner.cl,skyscanner.com.ua,skyscanner.com.do,skyscanner.kr,skyscanner.co.id,skyscanner.ch,skyscanner.gg,skyscanner.ca,skyscanner.com.uy,skyscanner.com.ec,skyscanner.co.il,skyscanner.co.in,skyscanner.com.vn,skyscanner.se,skyscanner.com.ar,skyscanner.com.au,skyscanner.fr,skyscanner.jp,skyscanner.com.my,skyscanner.com.mx###modal-container
+skyscanner.net,skyscanner.ru,skyscanner.fi,skyscanner.no,skyscanner.nl,skyscanner.ro,skyscanner.com.ni,skyscanner.at,skyscanner.com.sg,skyscanner.es,skyscanner.co.nz,skyscanner.com.sa,skyscanner.com.bo,skyscanner.com.br,skyscanner.mx,skyscanner.it,skyscanner.ae,skyscanner.in,skyscanner.com.sv,skyscanner.ie,skyscanner.co.kr,skyscanner.com.pe,skyscanner.com.ph,skyscanner.com.pa,skyscanner.hu,skyscanner.com.gt,skyscanner.com.co,skyscanner.dk,skyscanner.co.th,skyscanner.com.hn,skyscanner.pt,skyscanner.tw,skyscanner.de,skyscanner.com.hk,skyscanner.com.tw,skyscanner.pl,skyscanner.com.tr,skyscanner.cz,skyscanner.com,skyscanner.cr,skyscanner.com.py,skyscanner.cl,skyscanner.com.ua,skyscanner.com.do,skyscanner.kr,skyscanner.co.id,skyscanner.ch,skyscanner.gg,skyscanner.ca,skyscanner.com.uy,skyscanner.com.ec,skyscanner.co.il,skyscanner.co.in,skyscanner.com.vn,skyscanner.se,skyscanner.com.ar,skyscanner.com.au,skyscanner.fr,skyscanner.jp,skyscanner.com.my,skyscanner.com.mx##body,html:style(overflow: auto !important; position: initial !important;)
+!! .arcticmodal-container
+cbs-nizhnegorskij.ru##.arcticmodal-container
+cbs-nizhnegorskij.ru##.arcticmodal-overlay
+cbs-nizhnegorskij.ru##body,html:style(overflow: auto !important; position: initial !important;)
+!! .modal-cookies
+belivehotels.com,hoteloasishamaca.com,orotavapalace.es##.modal-cookies
+belivehotels.com,hoteloasishamaca.com,orotavapalace.es##body,html:style(overflow: auto !important; position: initial !important;)
+! ib-hansmeier.de
+ib-hansmeier.de###obcookies_box
+ib-hansmeier.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! #cookies2020
+alifragis.com.gr,feelhealthy.gr,trimel.gr,aromaboutique.gr,works-hellas.com,exclusivevip.gr,mikroutsikos.gr,flamecontrol.gr,sunshine.gr,vlachakis-systems.com,derma-line.gr,skouras-carpets.gr,unijet-systems.com###cookies2020
+alifragis.com.gr,feelhealthy.gr,trimel.gr,aromaboutique.gr,works-hellas.com,exclusivevip.gr,mikroutsikos.gr,flamecontrol.gr,sunshine.gr,vlachakis-systems.com,derma-line.gr,skouras-carpets.gr,unijet-systems.com###cookies2020overlay
+alifragis.com.gr,feelhealthy.gr,trimel.gr,aromaboutique.gr,works-hellas.com,exclusivevip.gr,mikroutsikos.gr,flamecontrol.gr,sunshine.gr,vlachakis-systems.com,derma-line.gr,skouras-carpets.gr,unijet-systems.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! #pdcc-modal-bg
+hhccespanasur.org,joguiba.com,roscamat.de,temco.es,educacionbioparc.es,creameng.com,zucami.com,tecnospiromt.com,contabiliza.es,scalegas.com,ibizacorso.com,iber-dreams.com,mobiliagestion.es,mercamadrid.es,adnmotos.com,basquetalella.com,remolquesalzaga.com,iemdr.es,solucionesip.com,algaenergy.es,cbpozuelo.es,adcboadilla.es,cbelpalo.com,cbarroyomolinos.com,molinabasket.es,admpeleteiro.com,flashbacksalou.com,cbgetafe.es,baloncestoliceo.com,cafenix.com.uy,fscastrourdiales.com,sonologic.es,ebvila-real.com,murciacobras.es,inmoathome.com,yusteasociados.com,avilcasa.com,rugbycisneros.com,cbsantfeliuenc.com,balonmanodominicos.com,aguilasdemoratalaz.com,juventudsanse.es,macsatextile.com,cbarganda.com,btorrelodones.com,hirealestate.es,psiconsultants.es,milcom.es,disfracesgilmar.com###pdcc-modal-bg
+hhccespanasur.org,joguiba.com,roscamat.de,temco.es,educacionbioparc.es,creameng.com,zucami.com,tecnospiromt.com,contabiliza.es,scalegas.com,ibizacorso.com,iber-dreams.com,mobiliagestion.es,mercamadrid.es,adnmotos.com,basquetalella.com,remolquesalzaga.com,iemdr.es,solucionesip.com,algaenergy.es,cbpozuelo.es,adcboadilla.es,cbelpalo.com,cbarroyomolinos.com,molinabasket.es,admpeleteiro.com,flashbacksalou.com,cbgetafe.es,baloncestoliceo.com,cafenix.com.uy,fscastrourdiales.com,sonologic.es,ebvila-real.com,murciacobras.es,inmoathome.com,yusteasociados.com,avilcasa.com,rugbycisneros.com,cbsantfeliuenc.com,balonmanodominicos.com,aguilasdemoratalaz.com,juventudsanse.es,macsatextile.com,cbarganda.com,btorrelodones.com,hirealestate.es,psiconsultants.es,milcom.es,disfracesgilmar.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! #vt-cookie-box
+cantabria.es,expocolchon.es,metaltressl.com,clinicasusanagutierrez.com,almaceneslavin.com,lafuentonadesantillana.com,e8finsystem.com,gescan.es,elsoplao.es,drairadier.com,dougalls.es,idmarketing.es,indole.es,velfair.com,artroscopiaycadera.es,landaluce.com,cocinassoinco.es,nauticonuria.com,doctordiegoruizcasas.com,luminsa.es,vertary.com,gruporobledo.com,esquelasweb.com,motusa.es,perezcarro.com,cinbesa.com,casacarral.com,esteticarosi.com,trabajosverticalescantabria.es,tpi-maderas.com,lauranoval.com,caminolebaniego.com###vt-cookie-box
+cantabria.es,expocolchon.es,metaltressl.com,clinicasusanagutierrez.com,almaceneslavin.com,lafuentonadesantillana.com,e8finsystem.com,gescan.es,elsoplao.es,drairadier.com,dougalls.es,idmarketing.es,indole.es,velfair.com,artroscopiaycadera.es,landaluce.com,cocinassoinco.es,nauticonuria.com,doctordiegoruizcasas.com,luminsa.es,vertary.com,gruporobledo.com,esquelasweb.com,motusa.es,perezcarro.com,cinbesa.com,casacarral.com,esteticarosi.com,trabajosverticalescantabria.es,tpi-maderas.com,lauranoval.com,caminolebaniego.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! #mrm_gdpr
+abi.de,studienwahl.de##+js(set-cookie, mrm_gdpr, 1)
+abi.de,studienwahl.de##+js(set-cookie, necessary_consent, accepted)
+!! #cookies-flow-container
+noesis-corporation.com,nseguros.pt,oney.pt,noesis.pt,noesis.com.br,lusitania.pt###cookies-flow-container
+noesis-corporation.com,nseguros.pt,oney.pt,noesis.pt,noesis.com.br,lusitania.pt##body,html:style(height: auto !important; overflow: auto !important)
+!! #cookie-softer
+bachhaus.de,byseum.de,dreieich-museum.de,bronzezeit-bayern-museum.de,edvtage.de,fabrikmuseum-roth.de,floesser-lechbruck.de,freilandmuseum-fladungen.de,gasversorgung-biedenkopf.de,herkomer.de,hirtenmuseum.de,hotel-sonneck.com,imt-museum.de,isergebirgs-museum.de,jan-bouman-haus.de,kassel-recht.com,kasselwasser.de,kongress-palais.de,museen-schloss-aschach.de,museen-weissenburg.de,museum-am-dom.de,museum-der-hand.de,museum-hofmuehle.de,museum-landsberg.de,orgelbaumuseum.de,plassenburg.de,pro-mi-s.de,ralf-china.de,spielzeugmuseum-neustadt.de,spielzeugmuseum.net,stadtmuseum-amberg.de,stadtmuseum-kaufbeuren.de,stadtmuseum-neuburg.de,stadtwerke-weilburg.de,structogram.de,toepfermuseum-thurnau.de,trachtenkulturmuseum.de,vsninfo.de,zirkelmuseum.de,zvsn.de###cookie-softer
+bachhaus.de,byseum.de,dreieich-museum.de,bronzezeit-bayern-museum.de,edvtage.de,fabrikmuseum-roth.de,floesser-lechbruck.de,freilandmuseum-fladungen.de,gasversorgung-biedenkopf.de,herkomer.de,hirtenmuseum.de,hotel-sonneck.com,imt-museum.de,isergebirgs-museum.de,jan-bouman-haus.de,kassel-recht.com,kasselwasser.de,kongress-palais.de,museen-schloss-aschach.de,museen-weissenburg.de,museum-am-dom.de,museum-der-hand.de,museum-hofmuehle.de,museum-landsberg.de,orgelbaumuseum.de,plassenburg.de,pro-mi-s.de,ralf-china.de,spielzeugmuseum-neustadt.de,spielzeugmuseum.net,stadtmuseum-amberg.de,stadtmuseum-kaufbeuren.de,stadtmuseum-neuburg.de,stadtwerke-weilburg.de,structogram.de,toepfermuseum-thurnau.de,trachtenkulturmuseum.de,vsninfo.de,zirkelmuseum.de,zvsn.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! cookiehub.eu overlay
+plesk.com,leankoala.com##.ch2
+plesk.com,leankoala.com##body:style(overflow: auto !important; position: initial !important;)
+!! .screen-blocker
+dr-schweizer-schubert.com,siebenbuergisches-museum.de,eckstein-bandoneon.de,oh-heilbronn.de,boehringer.net,schule-mainhardt.de,museumsfreunde.org##.screen-blocker
+dr-schweizer-schubert.com,siebenbuergisches-museum.de,eckstein-bandoneon.de,oh-heilbronn.de,boehringer.net,schule-mainhardt.de,museumsfreunde.org##body,html:style(overflow: auto !important; position: initial !important;)
+!! .rodo
+rynekzdrowia.pl,horecatrends.pl,portalspozywczy.pl,motofaktor.pl##.rodo
+rynekzdrowia.pl,horecatrends.pl,portalspozywczy.pl,motofaktor.pl##body,html:style(overflow: auto !important; position: initial !important;)
+!! reveal
+wertarbeit-steinfurt.de##.reveal
+!! reveal-overlay
+southwark.gov.uk,wertarbeit-steinfurt.de,tendersdirect.co.uk,frankfurt.de,crazy-factory.com,habsburger.net,tangleangel.com,theimagingsource.tw##.reveal-overlay
+southwark.gov.uk,wertarbeit-steinfurt.de,tendersdirect.co.uk,frankfurt.de,crazy-factory.com,habsburger.net,tangleangel.com,theimagingsource.tw##body,html:style(overflow: auto !important; position: initial !important;)
+! vivantis.it
+vivantis.it,vivantis-shop.at,vivantis.hu,vivantis.ro,vivantis.cz,vivantis.sk###backdrop
+vivantis.it,vivantis-shop.at,vivantis.hu,vivantis.ro,vivantis.cz,vivantis.sk##body,html:style(overflow: auto !important; position: initial !important;)
+! .amgdprjs-bar-template
+bulk.com##.amgdprjs-bar-template
+bulk.com##body,html:style(overflow: auto !important; position: initial !important;)
+! #cookieModal
+argos-tradein.co.uk,maandag.be,flixable.com,nmsu.edu,higcapital.es###cookieModal
+argos-tradein.co.uk,maandag.be,flixable.com,nmsu.edu,higcapital.es##body,html:style(overflow: auto !important; position: initial !important;)
+!! .sgpb-popup-overlay
+ematic.co.za##.sgpb-popup-overlay
+ematic.co.za##.sgpb-popup-dialog-main-div-wrapper
+ematic.co.za##body,html:style(overflow: auto !important; position: initial !important;)
+!! .gdprOverlay
+epilog.net,skb-leasing.si,amzs.si##.gdprOverlay
+epilog.net,skb-leasing.si,amzs.si##.cookiesSplash
+!! .cookie
+squarehabitat-casra.fr,scholtenswerkplek.nl##.cookie
+squarehabitat-casra.fr,scholtenswerkplek.nl##body:style(overflow: auto !important; position: initial !important;)
+!! .cookie-modal-container
+samsoe.com##.cookie-modal-container
+samsoe.com##.modal-backdrop
+samsoe.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cookie-modal
+ovenclean.com,gebrauchtwagen-outlet.info,filmzie.com##.cookie-modal
+ovenclean.com,gebrauchtwagen-outlet.info,filmzie.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! #PrivacyCategoryAlert
+moebel-akut.de,smit-sport.de,justmusic.de###PrivacyCategoryAlert
+moebel-akut.de,smit-sport.de,justmusic.de##.modal-backdrop
+moebel-akut.de,smit-sport.de,justmusic.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! CookieBan
+go-e.com,auto1.com##div[class^="CookieBan"]
+go-e.com,auto1.com##body:style(overflow: auto !important; position: initial !important;)
+!! #overlay
+britishcornershop.co.uk,pickyou.ru,myrewardspoints.com###overlay
+britishcornershop.co.uk,pickyou.ru,myrewardspoints.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! #cookieNote
+malerblatt-medienservice.de,architekturbuch.de,medienservice-holz.de,leuchtstark.de###cookieNote
+malerblatt-medienservice.de,architekturbuch.de,medienservice-holz.de,leuchtstark.de##.modal-backdrop
+malerblatt-medienservice.de,architekturbuch.de,medienservice-holz.de,leuchtstark.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cookies-widget--light
+habitatparisien.com,giens.com,the-only-place.com,nerjaparadiserentals.com,rent-paris.com,mallorcaprivilege.com,rentlikehome.com,le-regent.fr,ma-villa-en-provence.fr,sleepaways.com,zewelcome.com,locastay.com,majordome-prive.fr,tahitiresidences.com,clickyourflat.com,benakey.com,conciergerie-remigriffoul.com,anderslocation.com,pelican-paros.com,smrraurisapartments.com,rose-vacances.com,casavaleriosb.com,carlton-riviera-cannes.com,sivotavillashotel.com,booking-locly.com,benakey.com,bookingsync.com##.cookies-widget--light
+habitatparisien.com,giens.com,the-only-place.com,nerjaparadiserentals.com,rent-paris.com,mallorcaprivilege.com,rentlikehome.com,le-regent.fr,ma-villa-en-provence.fr,sleepaways.com,zewelcome.com,locastay.com,majordome-prive.fr,tahitiresidences.com,clickyourflat.com,benakey.com,conciergerie-remigriffoul.com,anderslocation.com,pelican-paros.com,smrraurisapartments.com,rose-vacances.com,casavaleriosb.com,carlton-riviera-cannes.com,sivotavillashotel.com,booking-locly.com,benakey.com,bookingsync.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! _modal_outer_
+steirerjobs.at,eliis.eu,flip.ro,zvsaar.de,visittallinn.ee,inbank.ee,ekoplaza.nl,bookchoice.com,offshoreleaks.icij.org##div[id*="_modal_outer_"]
+steirerjobs.at,eliis.eu,flip.ro,zvsaar.de,visittallinn.ee,inbank.ee,ekoplaza.nl,bookchoice.com,offshoreleaks.icij.org##body,html:style(overflow: auto !important; position: initial !important;)
+!! #gdprCookieBarOverlay / .mst-gdpr__cookie-bar-overlay
+napakka.fi,lampshoponline.com,husted-emballage.dk,nordahl.se,besthealthfoodshop.com###gdprCookieBarOverlay
+napakka.fi,lampshoponline.com,husted-emballage.dk,nordahl.se,besthealthfoodshop.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! #ws-cookie-consent-widget
+trinta.net,clinicapardinas.com,ocurrodaparra.com,colegioemma.com,forsasesores.com,laburgueria.com,escenoset.es,ebainteriors.com,clinicadentalrv.com,dentoolapp.com,carbajobarrios.com,elmega.com,lacavita.com,globaltopografia.es,clinicaprodent.es,estudiometropolitano.com###ws-cookie-consent-widget
+trinta.net,clinicapardinas.com,ocurrodaparra.com,colegioemma.com,forsasesores.com,laburgueria.com,escenoset.es,ebainteriors.com,clinicadentalrv.com,dentoolapp.com,carbajobarrios.com,elmega.com,lacavita.com,globaltopografia.es,clinicaprodent.es,estudiometropolitano.com##body:style(overflow: auto !important; position: initial !important;)
+!! .cookie-banner-modal / #cookie-banner-modal
+bigoutlet.dk,rcmodeltruck.dk,travshoppen.dk##.cookie-banner-modal
+bigoutlet.dk,rcmodeltruck.dk,travshoppen.dk##body:style(overflow: auto !important; position: initial !important;)
+pigmentmarkets.com,wearconferences.com###cookie-banner-modal
+pigmentmarkets.com,wearconferences.com##body:style(overflow: auto !important; position: initial !important;)
+!! .mnd-cookie-modal
+stratic.de,flaschen-glaeser-und-dosen.de,royacosmetics.de,stilgut.com,verdeck.de,hygiene-shop.eu,torten-boutique.de,schellenberg-professional.de,schlemmer-metzgerei.de,bio-circle.com,futter-simon.de,s-r-p.com,in-kid.de,kosmetik-pinsel.com,heart-tec.de,weinhandel-fertsch.de,edampfer24.de,scheulenburg-direkt.de,stellfeld-ernst.de,koestner-shop.de,nowa-manufaktur.de,meyermotoren.de,gartenstuhl-kissen.de,schwab-rollrasen.de,lesenundschenken.de,hairstyletools.de,stellfeld-ernst.de,burmester.de,isa-racing.com,comiccave.de,kloundco.de,saunawelt-hamburg-shop.de,tischkulturshop.com,sport-praxenthaler.com,ravenol-shop.de,tinte.de,sennerei-lehern.de,topspeed-tt.com,hagemeyer.de,vsmedien-shop.de,beta-motor-shop.de,onlineshop-baumarkt.de,rocatronic.de,stellfeld-ernst.de,terra-australia.de,canidimondo.de,antenne-holm.de,luxury-gunstockblanks.com,lk-premiumpack.de,alpha-tex.de,kaffeeraum.com,reflectives.de,werder-ketshop.de,gokarthof.de,manufaktur-joerg-geiger.de,kiids.de,gruenewiese-shop.de,wurstladen.de,ic-kuh.de,aprotech.de,waschkampagne.de,stellfeld-ernst.de,walter-outlet.de,svgaustria.at,dermaplan.com,spielgeschenke.de,happy-schuh.de,orangepuzzle.de,lesezirkel-brabandt.de,wolkengarage.de,bccprinttechnik.de,kite-buddy.de,verpackungs-shop.net,regioware.de,sedulus.de,overhemden.com,powermetershop.de,futononline.de,hoffmann-speedster.com,motorsportmarkt.de##.js--modal
+stratic.de,flaschen-glaeser-und-dosen.de,royacosmetics.de,stilgut.com,verdeck.de,hygiene-shop.eu,torten-boutique.de,schellenberg-professional.de,schlemmer-metzgerei.de,bio-circle.com,futter-simon.de,s-r-p.com,in-kid.de,kosmetik-pinsel.com,heart-tec.de,weinhandel-fertsch.de,edampfer24.de,scheulenburg-direkt.de,stellfeld-ernst.de,koestner-shop.de,nowa-manufaktur.de,meyermotoren.de,gartenstuhl-kissen.de,schwab-rollrasen.de,lesenundschenken.de,hairstyletools.de,stellfeld-ernst.de,burmester.de,isa-racing.com,comiccave.de,kloundco.de,saunawelt-hamburg-shop.de,tischkulturshop.com,sport-praxenthaler.com,ravenol-shop.de,tinte.de,sennerei-lehern.de,topspeed-tt.com,hagemeyer.de,vsmedien-shop.de,beta-motor-shop.de,onlineshop-baumarkt.de,rocatronic.de,stellfeld-ernst.de,terra-australia.de,canidimondo.de,antenne-holm.de,luxury-gunstockblanks.com,lk-premiumpack.de,alpha-tex.de,kaffeeraum.com,reflectives.de,werder-ketshop.de,gokarthof.de,manufaktur-joerg-geiger.de,kiids.de,gruenewiese-shop.de,wurstladen.de,ic-kuh.de,aprotech.de,waschkampagne.de,stellfeld-ernst.de,walter-outlet.de,svgaustria.at,dermaplan.com,spielgeschenke.de,happy-schuh.de,orangepuzzle.de,lesezirkel-brabandt.de,wolkengarage.de,bccprinttechnik.de,kite-buddy.de,verpackungs-shop.net,regioware.de,sedulus.de,overhemden.com,powermetershop.de,futononline.de,hoffmann-speedster.com,motorsportmarkt.de##.js--overlay
+stratic.de,flaschen-glaeser-und-dosen.de,royacosmetics.de,stilgut.com,verdeck.de,hygiene-shop.eu,torten-boutique.de,schellenberg-professional.de,schlemmer-metzgerei.de,bio-circle.com,futter-simon.de,s-r-p.com,in-kid.de,kosmetik-pinsel.com,heart-tec.de,weinhandel-fertsch.de,edampfer24.de,scheulenburg-direkt.de,stellfeld-ernst.de,koestner-shop.de,nowa-manufaktur.de,meyermotoren.de,gartenstuhl-kissen.de,schwab-rollrasen.de,lesenundschenken.de,hairstyletools.de,stellfeld-ernst.de,burmester.de,isa-racing.com,comiccave.de,kloundco.de,saunawelt-hamburg-shop.de,tischkulturshop.com,sport-praxenthaler.com,ravenol-shop.de,tinte.de,sennerei-lehern.de,topspeed-tt.com,hagemeyer.de,vsmedien-shop.de,beta-motor-shop.de,onlineshop-baumarkt.de,rocatronic.de,stellfeld-ernst.de,terra-australia.de,canidimondo.de,antenne-holm.de,luxury-gunstockblanks.com,lk-premiumpack.de,alpha-tex.de,kaffeeraum.com,reflectives.de,werder-ketshop.de,gokarthof.de,manufaktur-joerg-geiger.de,kiids.de,gruenewiese-shop.de,wurstladen.de,ic-kuh.de,aprotech.de,waschkampagne.de,stellfeld-ernst.de,walter-outlet.de,svgaustria.at,dermaplan.com,spielgeschenke.de,happy-schuh.de,orangepuzzle.de,lesezirkel-brabandt.de,wolkengarage.de,bccprinttechnik.de,kite-buddy.de,verpackungs-shop.net,regioware.de,sedulus.de,overhemden.com,powermetershop.de,futononline.de,hoffmann-speedster.com,motorsportmarkt.de##.mnd-cookie-modal
+flaschen-glaeser-und-dosen.de,royacosmetics.de,stilgut.com,verdeck.de,hygiene-shop.eu,torten-boutique.de,schellenberg-professional.de,schlemmer-metzgerei.de,bio-circle.com,futter-simon.de,s-r-p.com,in-kid.de,kosmetik-pinsel.com,heart-tec.de,weinhandel-fertsch.de,edampfer24.de,scheulenburg-direkt.de,stellfeld-ernst.de,koestner-shop.de,nowa-manufaktur.de,meyermotoren.de,gartenstuhl-kissen.de,schwab-rollrasen.de,lesenundschenken.de,hairstyletools.de,stellfeld-ernst.de,burmester.de,isa-racing.com,comiccave.de,kloundco.de,saunawelt-hamburg-shop.de,tischkulturshop.com,sport-praxenthaler.com,ravenol-shop.de,tinte.de,sennerei-lehern.de,topspeed-tt.com,hagemeyer.de,vsmedien-shop.de,beta-motor-shop.de,onlineshop-baumarkt.de,rocatronic.de,stellfeld-ernst.de,terra-australia.de,canidimondo.de,antenne-holm.de,luxury-gunstockblanks.com,lk-premiumpack.de,alpha-tex.de,kaffeeraum.com,reflectives.de,werder-ketshop.de,gokarthof.de,manufaktur-joerg-geiger.de,kiids.de,gruenewiese-shop.de,wurstladen.de,ic-kuh.de,aprotech.de,waschkampagne.de,stellfeld-ernst.de,walter-outlet.de,svgaustria.at,dermaplan.com,spielgeschenke.de,happy-schuh.de,orangepuzzle.de,lesezirkel-brabandt.de,wolkengarage.de,bccprinttechnik.de,kite-buddy.de,verpackungs-shop.net,regioware.de,sedulus.de,overhemden.com,powermetershop.de,futononline.de,hoffmann-speedster.com,motorsportmarkt.de,lilienthal.berlin##body,html:style(overflow: auto !important; position: initial !important;)
+! homify.
+homify.ae,homify.ca,homify.cl,homify.co.id,homify.co.kr,homify.co.th,homify.co.uk,homify.co.za,homify.com.ar,homify.com.br,homify.com.co,homify.com.eg,homify.com.mx,homify.com.my,homify.com.tr,homify.com.ve,homify.com,homify.de,homify.es,homify.fr,homify.hk,homify.in,homify.it,homify.jp,homify.nl,homify.pe,homify.pk,homify.pl,homify.pt,homify.ru,homify.sa,homify.sg,homify.tw,homify.ua,homify.vn###cookie-banner.cookie-banner
+homify.ae,homify.ca,homify.cl,homify.co.id,homify.co.kr,homify.co.th,homify.co.uk,homify.co.za,homify.com.ar,homify.com.br,homify.com.co,homify.com.eg,homify.com.mx,homify.com.my,homify.com.tr,homify.com.ve,homify.com,homify.de,homify.es,homify.fr,homify.hk,homify.in,homify.it,homify.jp,homify.nl,homify.pe,homify.pk,homify.pl,homify.pt,homify.ru,homify.sa,homify.sg,homify.tw,homify.ua,homify.vn##body,html:style(overflow: auto !important; position: initial !important;)
+!! .modal-cacsp-position
+parking.praha.eu##.modal-cacsp-position
+parking.praha.eu##.modal-cacsp-backdrop
+parking.praha.eu##html:style(overflow: auto !important; position: initial !important;)
+!! .cookie-wrapper-container
+bensanitair.nl##.cookie-wrapper-container
+bensanitair.nl##body,html:style(overflow: auto !important; position: initial !important;)
+!! #tarteaucitronRoot
+pin-freunde.de,miethke.com###tarteaucitronRoot
+pin-freunde.de,miethke.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! #cookieman-modal
+horsch.com,luenen.de,stadt-wien.at,adfc-radtourismus.de,deutschland-per-rad.de,verl.de,jku.at,meraluna.de,dsj.de##.modal-backdrop
+horsch.com,luenen.de,stadt-wien.at,adfc-radtourismus.de,deutschland-per-rad.de,verl.de,jku.at,meraluna.de,dsj.de###cookieman-modal
+horsch.com,luenen.de,stadt-wien.at,adfc-radtourismus.de,deutschland-per-rad.de,verl.de,jku.at,meraluna.de,dsj.de##body:style(overflow: auto !important; position: initial !important;)
+!! .modal / filter
+vocachterberg.nl,bouwmatron.nl,handsonevents.nl,hkvastgoed.nl,retailmarketingpartner.nl,bigcheese.software,thecoachingcompany.nl,vansteenbergen-kas.nl,rijkenis.nl,pokonnaturado.nl,vanbeekbedden.nl,2da.nl,devo-veenendaal.nl,kozijnen-hijnekamp.nl,equi-elite.com##.modal
+! realpeoplemedia.co.uk
+realpeoplemedia.co.uk###gdpr_cookie-overlay
+realpeoplemedia.co.uk###gdpr_cookie-mainWrapp
+realpeoplemedia.co.uk##body,html:style(overflow: auto !important; position: initial !important;)
+!! #js-cc-modal
+mediapart.fr###js-cc-modal
+mediapart.fr##body:style(overflow: auto !important; position: initial !important;)
+!! .js-o-page__gdpr-overlay
+avhdairy.com,beleaf.eu,bontadivina.it,chaesbueb.ch,derscharfemaxx.com,emmi-aktifit.ch,emmi-benecol.ch,emmi-caffelatte.com,emmi-energy-milk.ch,emmi-good-day.com,emmi-industrie.com,emmi-kaltbach.com,emmi-luzerner.ch,emmi-pur.ch,emmi-republicofblends.fr,emmidessert.it,emmilangnau.ch,gerberfondue.ch,glaeserne-molkerei.de,goatmilkpowder.com,group.emmi.com,kaeserei-studer.ch,leeb-milch.at,lepetitchevrier.ch,lesa.ch,mylove-mylife.at,rachelli.it,regiomolkerei.ch,tonis.ch,walserstolz.at##.js-o-page__gdpr-overlay
+avhdairy.com,beleaf.eu,bontadivina.it,chaesbueb.ch,derscharfemaxx.com,emmi-aktifit.ch,emmi-benecol.ch,emmi-caffelatte.com,emmi-energy-milk.ch,emmi-good-day.com,emmi-industrie.com,emmi-kaltbach.com,emmi-luzerner.ch,emmi-pur.ch,emmi-republicofblends.fr,emmidessert.it,emmilangnau.ch,gerberfondue.ch,glaeserne-molkerei.de,goatmilkpowder.com,group.emmi.com,kaeserei-studer.ch,leeb-milch.at,lepetitchevrier.ch,lesa.ch,mylove-mylife.at,rachelli.it,regiomolkerei.ch,tonis.ch,walserstolz.at##body:style(overflow: auto !important; position: initial !important;)
+!! .zk-cookie-container
+zitekick.dk,eltechno.dk##.zk-cookie-container
+zitekick.dk,eltechno.dk##body,html:style(overflow: auto !important; position: initial !important;)
+!! #js-modern-cookie-modal-wrapper
+batteryempire.cz###js-modern-cookie-modal-wrapper
+batteryempire.cz##body,html:style(overflow: auto !important; position: initial !important;)
+!! .pum-overlay
+perfectdailygrind.com,gadu-gadu.pl##.pum-overlay
+perfectdailygrind.com,gadu-gadu.pl##body,html:style(overflow: auto !important; position: initial !important;)
+!! .js--overlay
+volksversand.de,mientus.com,leica-camera.com,espadrij.com,rucksack.de,leicashop.com,hygiene-shop.eu,businesshemden.com,arbrikadrex.de##.js--overlay
+volksversand.de,mientus.com,leica-camera.com,espadrij.com,rucksack.de,leicashop.com,hygiene-shop.eu,businesshemden.com,arbrikadrex.de##body,html:style(overflow: auto !important; position: initial !important;)
+!!
+gesundheitsmanufaktur.de##.modal--cookie
+gesundheitsmanufaktur.de##.js--overlay
+gesundheitsmanufaktur.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! .snoop-cc (overlay)
+snoopmedia.com,myguide.de,study-in-germany.de,daad.de##.snoop-cc
+snoopmedia.com,myguide.de,study-in-germany.de,daad.de##+js(rc, snoop-modal-open, body, stay)
+!! .js--modal
+feierstoff.de,ani-one.com,brilliant-ag.eu,hdt.de,motor-oel-guenstig.de##.js--modal
+feierstoff.de,ani-one.com,brilliant-ag.eu,hdt.de,motor-oel-guenstig.de##.js--overlay
+feierstoff.de,ani-one.com,brilliant-ag.eu,hdt.de,motor-oel-guenstig.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! .MuiSnackbar-root
+banknorwegian.de,fashionunited.info,fashionunited.com,fashionunited.fr,fashionunited.uk,fashionunited.de,fashionunited.nl,fashionunited.be,longines.com##.MuiDialog-root.MuiModal-root
+banknorwegian.de,fashionunited.info,fashionunited.com,fashionunited.fr,fashionunited.uk,fashionunited.de,fashionunited.nl,fashionunited.be,longines.com##html:style(overflow: auto !important; position: initial !important;)
+!! .MuiDialog-container
+owgr.com##.MuiDrawer-modal
+owgr.com,quebueno.es,nadia.gov.gr##.MuiDialog-container
+owgr.com,quebueno.es,nadia.gov.gr##.MuiBackdrop-root
+owgr.com,quebueno.es,nadia.gov.gr##body:style(overflow: auto !important; position: initial !important;)
+!! .js-cookie-wall
+unileverfoodsolutionslatam.com##.js-cookie-wall
+unileverfoodsolutionslatam.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! #cookiesConsentDialog
+kalkulator.hu,muszakiforum.hu,retel.sk,onlineuciliste.hr,bozponline.sk,skolaefektivne.sk,enviro.sk,osenioroch.sk,ucinkovitasola.si,dashofer.sk,varstvo-podatkov.si,szcoportal.sk,dashofer.hu,ppn.sk,pamprofi.cz###cookiesConsentDialog
+kalkulator.hu,muszakiforum.hu,retel.sk,onlineuciliste.hr,bozponline.sk,skolaefektivne.sk,enviro.sk,osenioroch.sk,ucinkovitasola.si,dashofer.sk,varstvo-podatkov.si,szcoportal.sk,dashofer.hu,ppn.sk,pamprofi.cz##.modal-backdrop
+kalkulator.hu,muszakiforum.hu,retel.sk,onlineuciliste.hr,bozponline.sk,skolaefektivne.sk,enviro.sk,osenioroch.sk,ucinkovitasola.si,dashofer.sk,varstvo-podatkov.si,szcoportal.sk,dashofer.hu,ppn.sk,pamprofi.cz##body,html:style(overflow: auto !important; position: initial !important;)
+! puzzleyou cookies
+puzzleyou.de,puzzleyou.at,puzzleyou.be,puzzleyou.ch,puzzleyou.co.uk,puzzleyou.com,puzzleyou.cz,puzzleyou.dk,puzzleyou.fi,puzzleyou.fr,puzzleyou.ie,puzzleyou.it,puzzleyou.lu,puzzleyou.pl,puzzleyou.se,puzzleyou.shop,puzzleyou.sk##.layer
+puzzleyou.de,puzzleyou.at,puzzleyou.be,puzzleyou.ch,puzzleyou.co.uk,puzzleyou.com,puzzleyou.cz,puzzleyou.dk,puzzleyou.fi,puzzleyou.fr,puzzleyou.ie,puzzleyou.it,puzzleyou.lu,puzzleyou.pl,puzzleyou.se,puzzleyou.shop,puzzleyou.sk##.cookie-policy-widget
+puzzleyou.de,puzzleyou.at,puzzleyou.be,puzzleyou.ch,puzzleyou.co.uk,puzzleyou.com,puzzleyou.cz,puzzleyou.dk,puzzleyou.fi,puzzleyou.fr,puzzleyou.ie,puzzleyou.it,puzzleyou.lu,puzzleyou.pl,puzzleyou.se,puzzleyou.shop,puzzleyou.sk###overlay
+puzzleyou.de,puzzleyou.at,puzzleyou.be,puzzleyou.ch,puzzleyou.co.uk,puzzleyou.com,puzzleyou.cz,puzzleyou.dk,puzzleyou.fi,puzzleyou.fr,puzzleyou.ie,puzzleyou.it,puzzleyou.lu,puzzleyou.pl,puzzleyou.se,puzzleyou.shop,puzzleyou.sk##body,html:style(overflow: auto !important; position: initial !important;)
+! mujkaktus.cz
+||mujkaktus.cz/kaktus-theme/js/gdpr-component-v2.js
+mujkaktus.cz##.gdpr-component
+mujkaktus.cz##body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! internetaptieka.lv
+internetaptieka.lv##.cookie-notify__wrap
+internetaptieka.lv##body:style(position: static !important; overflow: auto !important; width: auto !important;)
+!! tvp.info
+tvp.pl,tvp.info##div.tvp-cookie-overlay
+tvp.pl,tvp.info##html:style(overflow: auto !important; position: initial !important;)
+!! .cookie-consent-v2
+stickerapp.fr,stickerapp.es,stickerapp.dk,stickerapp.se,stickerapp.no,stickerapp.nl,stickerapp.co.uk,stickerapp.pl,stickerapp.fi,stickerapp.it,stickerapp.de,stickerapp.com,stickerapp.pt##.cookie-consent-v2
+stickerapp.fr,stickerapp.es,stickerapp.dk,stickerapp.se,stickerapp.no,stickerapp.nl,stickerapp.co.uk,stickerapp.pl,stickerapp.fi,stickerapp.it,stickerapp.de,stickerapp.com,stickerapp.pt##.modal-backdrop
+stickerapp.fr,stickerapp.es,stickerapp.dk,stickerapp.se,stickerapp.no,stickerapp.nl,stickerapp.co.uk,stickerapp.pl,stickerapp.fi,stickerapp.it,stickerapp.de,stickerapp.com,stickerapp.pt##body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! blacknut.com
+blacknut.com###__bna-cmp-display
+blacknut.com##body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! conotoxia
+cinkciarz.pl,conotoxia.com##ckpl-webc
+cinkciarz.pl,conotoxia.com##body,html:style(overflow: auto !important; position: initial !important;)
+! hartfordbusiness.com
+hartfordbusiness.com##.cookiesfullScreen
+hartfordbusiness.com##body:style(overflow: auto !important; position: initial !important;)
+! akbw.de
+akbw.de##.fc_underlay
+akbw.de##.fc_dialog
+akbw.de##body,html:style(overflow: auto !important; position: initial !important;)
+! futterhaus.de
+futterhaus.de##.js-cookiebox
+futterhaus.de##+js(rc, is-blurred-cookiebox, , stay)
+! warnung.bund.de
+warnung.bund.de##.datahint
+! pasticceriaquadrifoglio.com
+pasticceriaquadrifoglio.com##.js-o-page__gdpr-overlay
+pasticceriaquadrifoglio.com##body,html:style(overflow: auto !important; position: initial !important;)
+! bionic.co.uk
+bionic.co.uk##.inhouse-cookie-consent
+bionic.co.uk##body,html:style(overflow: auto !important; position: initial !important;)
+! sogeti.
+sogeti.ie,sogeti.de,sogeti.fi,sogeti.be,sogeti.lu,sogeti.no,sogeti.es,sogeti.se,sogeti.com##body,html:style(overflow: auto !important; position: initial !important;)
+! nytimes.com
+nytimes.com###complianceOverlay
+nytimes.com##body:style(overflow: auto !important;)
+! raja
+raja.fr,rajapack.at,rajapack.be,rajarani.de,rajapack.co.uk,rajapack.cz,rajapack.de,rajapack.dk,rajapack.es,rajapack.hu,rajapack.it,rajapack.nl,rajapack.no,rajapack.pl,rajapack.pt,rajapack.se,rajapack.sk##.js-otsdk
+raja.fr,rajapack.at,rajapack.be,rajarani.de,rajapack.co.uk,rajapack.cz,rajapack.de,rajapack.dk,rajapack.es,rajapack.hu,rajapack.it,rajapack.nl,rajapack.no,rajapack.pl,rajapack.pt,rajapack.se,rajapack.sk##body,html:style(overflow: auto !important; position: initial !important;)
+! scottsofstow.co.uk
+scottsofstow.co.uk###consent-manager
+scottsofstow.co.uk##+js(rc, consent-manager--popup, body, stay)
+scottsofstow.co.uk##+js(rc, consent-manager-open, body, stay)
+! bandenexpert.be
+bandenexpert.be##.modal
+bandenexpert.be##.modal-backdrop
+bandenexpert.be##body,html:style(overflow: auto !important; position: initial !important;)
+! traxmag.com
+traxmag.com##.popin-overlay
+traxmag.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! #cookies-alert
+ibersun.es###cookies-alert
+ibersun.es##body,html:style(height: auto !important; overflow: auto !important)
+!! #cookienotice_box
+daa-sh.de,daa-muenchen.de,daa-bremen.de,daa-augsburg.de,cyberone.de,daa-duisburg.de,daa-aachen.de,daa-hochrhein.de,daa-freiburg.de,daa-reutlingen.de,daa-aalen.de,daa-mainz.de,fachschule-sozialpaedagogik-dresden.de,daa-kassel.de,daa-ingolstadt.de,daa-landau.de,fachschule-sozialpaedagogik-berlin.de,logopaedieschule-osnabrueck.de,daa-pforzheim.de,daa-kempten.de,daa-albstadt.de,daa.de,daa-saarbruecken.de,daa-nordrhein.de,daa-moenchengladbach.de,ths-software.de,daa-friedberg.de,daa-trier.de,daa-bamberg.de,daa-wiesbaden.de,daa-goeppingen.de,daa.de,daa-coburg.de,daa-singen.de,daa-kirchheim.de,daa-giessen.de,daa-koblenz.de,daa-betzdorf.de,altenpflegeschule-st-ingbert.de,lasso.de###cookienotice_box
+daa-sh.de,daa-muenchen.de,daa-bremen.de,daa-augsburg.de,cyberone.de,daa-duisburg.de,daa-aachen.de,daa-hochrhein.de,daa-freiburg.de,daa-reutlingen.de,daa-aalen.de,daa-mainz.de,fachschule-sozialpaedagogik-dresden.de,daa-kassel.de,daa-ingolstadt.de,daa-landau.de,fachschule-sozialpaedagogik-berlin.de,logopaedieschule-osnabrueck.de,daa-pforzheim.de,daa-kempten.de,daa-albstadt.de,daa.de,daa-saarbruecken.de,daa-nordrhein.de,daa-moenchengladbach.de,ths-software.de,daa-friedberg.de,daa-trier.de,daa-bamberg.de,daa-wiesbaden.de,daa-goeppingen.de,daa.de,daa-coburg.de,daa-singen.de,daa-kirchheim.de,daa-giessen.de,daa-koblenz.de,daa-betzdorf.de,altenpflegeschule-st-ingbert.de,lasso.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cookie-modal/.bg-modal
+hifi-punkten.se,larsbengtsson.se,ljudmakarn.se##.cookie-modal
+hifi-punkten.se,larsbengtsson.se,ljudmakarn.se##.bg-modal
+hifi-punkten.se,larsbengtsson.se,ljudmakarn.se##html,body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! torfs.be
+torfs.be##.cookie-banner-fullscreen
+torfs.be##html,body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! zawszepomorze.pl
+zawszepomorze.pl##+js(rc, zp-gtm-scripts--blur, , stay)
+zawszepomorze.pl##.zp-gtm-scripts-modal-wrapper
+! coupondojo.com
+coupondojo.pl,coupondojo.com###rodo-message
+coupondojo.pl,coupondojo.com##.modal-backdrop
+coupondojo.pl,coupondojo.com##body,html:style(overflow: auto !important; position: initial !important;)
+! dogfydiet.com
+dogfydiet.com##.base-modal-dialog
+dogfydiet.com##body,html:style(overflow: auto !important; position: initial !important;)
+! canto.com
+canto.com##.cc-wrapper
+canto.com##body,html:style(overflow: auto !important; position: initial !important;)
+! ijaminecraft.com
+ijaminecraft.com###privacy-window
+ijaminecraft.com##body,html:style(overflow: auto !important; position: initial !important;)
+! droptica.com
+droptica.com,droptica.pl##.d-gtm-scripts-modal-wrapper
+! myschlossberg.com
+myschlossberg.com##.cc-overlay
+! wasserkunst-hamburg.de
+wasserkunst-hamburg.de###koekjeWidget
+wasserkunst-hamburg.de##+js(rc, dots, , stay)
+! lta.org.uk
+lta.org.uk##.lta-cookies-banner
+lta.org.uk##+js(rc, cookies-modal-open, , stay)
+! app.lepermislibre.fr
+app.lepermislibre.fr##.Modal_modal__jZRBf
+app.lepermislibre.fr##body,html:style(overflow: auto !important; position: initial !important;)
+! tameteo.nl
+tameteo.nl###gpdr
+tameteo.nl##body,html:style(overflow: auto !important; position: initial !important;)
+! .cookies-banner
+cremadescalvosotelo.com##.cookies-banner
+cremadescalvosotelo.com##body,html:style(overflow: auto !important; position: initial !important;)
+! steuerbot.com
+steuerbot.com##.klg0gr3
+steuerbot.com##.klg0gr6
+steuerbot.com##body:style(overflow: auto !important; position: initial !important;)
+steuerbot.com##*:style(filter: none !important;opacity:1 !important;pointer-events:auto !important)
+! brico-travo.com
+brico-travo.com##.modal-rgpd
+brico-travo.com##+js(rc, overlay, body, stay)
+! tuivillas.com
+tuivillas.com###cookie-consent-extended
+tuivillas.com##body,html:style(overflow: auto !important; position: initial !important;)
+! landespreis-bw.de
+landespreis-bw.de##.AP_mod-bm-layer
+landespreis-bw.de##body,html:style(overflow: auto !important; position: initial !important;)
+! multioferta.es
+multioferta.es###interOpacidadCookie
+multioferta.es##.dm_cookies_cont2
+multioferta.es##body,html:style(overflow: auto !important; position: initial !important;)
+! kosmas.cz
+kosmas.cz###qtip-blanket
+kosmas.cz###modalDialog
+kosmas.cz##body,html:style(overflow: auto !important; position: initial !important;)
+! craft-conf.com
+craft-conf.com###headlessui-dialog-overlay-19
+craft-conf.com###headlessui-dialog-17
+craft-conf.com##body,html:style(height: auto !important; overflow: auto !important)
+! 116117.fi
+116117.fi##.cookie-consent-blanket
+116117.fi##body,html:style(overflow: auto !important; position: initial !important;)
+! testwise.com
+testwise.com##gl-manage-cookies-modal
+testwise.com##html,body:style(overflow: auto !important; position: initial !important;)
+! paysend.com
+paysend.com##div[class^="styles__Overlay-"]
+paysend.com##body,html:style(overflow: auto !important; position: initial !important;)
+! klassik-stiftung.de
+klassik-stiftung.de##.logobar
+klassik-stiftung.de##body:style(overflow: auto !important; position: initial !important;)
+! eobuv. /efootware
+evzuttya.com.ua,eobuv.com,eobuv.cz,eobuwie.com.pl,ecipele.hr,eavalyne.lt,efootwear.eu,eschuhe.ch,eskor.se,chaussures.fr,ecipo.hu,eobuv.com.ua,eobuv.sk,epantofi.ro,epapoutsia.gr,escarpe.it,eschuhe.de,obuvki.bg,zapatos.es##.modal-consents
+eobuv.com,eobuv.cz,eobuwie.com.pl,ecipele.hr,eavalyne.lt,efootwear.eu,eschuhe.ch,eskor.se,chaussures.fr,ecipo.hu,eobuv.com.ua,eobuv.sk,epantofi.ro,epapoutsia.gr,escarpe.it,eschuhe.de,obuvki.bg,zapatos.es##.with-blurred-background
+eobuv.com,eobuv.cz,eobuwie.com.pl,ecipele.hr,eavalyne.lt,efootwear.eu,eschuhe.ch,eskor.se,chaussures.fr,ecipo.hu,eobuv.com.ua,eobuv.sk,epantofi.ro,epapoutsia.gr,escarpe.it,eschuhe.de,obuvki.bg,zapatos.es##.e-screen-overlay
+eobuv.com,eobuv.cz,eobuwie.com.pl,ecipele.hr,eavalyne.lt,efootwear.eu,eschuhe.ch,eskor.se,chaussures.fr,ecipo.hu,eobuv.com.ua,eobuv.sk,epantofi.ro,epapoutsia.gr,escarpe.it,eschuhe.de,obuvki.bg,zapatos.es##.e-consents-alert__wrapper
+eobuv.com,eobuv.cz,eobuwie.com.pl,ecipele.hr,eavalyne.lt,efootwear.eu,eschuhe.ch,eskor.se,chaussures.fr,ecipo.hu,eobuv.com.ua,eobuv.sk,epantofi.ro,epapoutsia.gr,escarpe.it,eschuhe.de,obuvki.bg,zapatos.es##body,html:style(overflow: auto !important; position: initial !important;)
+! roundhouse.org.uk
+roundhouse.org.uk##.cookie-policy
+roundhouse.org.uk##body,html:style(overflow: auto !important; position: initial !important;)
+! tonyschocolonely.com
+tonyschocolonely.com##.cookie-notification
+tonyschocolonely.com##.wrapper--locked:style(position: relative !important;)
+! grandado.com
+grandado.com##.css-126xj0f
+grandado.com##body:style(overflow: auto !important; position: initial !important;)
+! check24.de
+check24.de##.c24-cookie-consent-wrapper
+check24.de##body:style(overflow: auto !important; position: initial !important;)
+! la-vie-naturelle.com
+la-vie-naturelle.com##.ea-cookies-popin
+la-vie-naturelle.com##body,html:style(height: auto !important; overflow: auto !important)
+! 3f-filippi.com
+3f-filippi.com###ContainerCookie
+3f-filippi.com###ContainerOpacityCookie
+3f-filippi.com##body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! logopaedie-balzer.de
+logopaedie-balzer.de##.chimpify-overlay
+logopaedie-balzer.de##.ch-popup-cookies
+logopaedie-balzer.de##body,html:style(overflow: auto !important; position: initial !important;)
+! pdf-archive.com
+pdf-archive.com##.modal
+pdf-archive.com##.modal-backdrop
+pdf-archive.com##+js(rc, modal-open, , stay)
+! my.hidrive.com
+hidrive.com##.sj-overlay
+hidrive.com##body:style(height: auto !important; overflow: auto !important)
+! io.google
+io.google###cookie-bar-modal
+io.google##body:style(overflow: auto !important; position: initial !important;)
+! bm-lille.fr
+bm-lille.fr,e-mediatheque.sqy.fr,documentation.insp.gouv.fr,portaildocumentaire.inrs.fr##.cookies-management
+bm-lille.fr,e-mediatheque.sqy.fr,documentation.insp.gouv.fr,portaildocumentaire.inrs.fr##body,html:style(overflow: auto !important; position: initial !important;)
+! opmaatzagen.nl
+opmaatzagen.nl##.z-50
+opmaatzagen.nl##.shadow-lg.fixed
+opmaatzagen.nl##html,body:style(overflow: auto !important; position: initial !important;)
+! oper.koeln
+oper.koeln##.modal-mask
+oper.koeln##body,html:style(overflow: auto !important; position: initial !important;)
+! youthforum.org
+youthforum.org##+js(set-cookie, __cookie_consent, false)
+!! .cookiebanner
+bihealth.org##.cookiebanner
+bihealth.org##body,html:style(height: auto !important; overflow: auto !important)
+! boerse-stuttgart.de
+boerse-stuttgart.de##.bsg-cookie-layer
+boerse-stuttgart.de##body,html:style(overflow: auto !important; position: initial !important;)
+! mystats.nl
+mystats.nl##.modal
+mystats.nl##.modal-backdrop
+!! degiro
+degiro.co.uk,degiro.cz,degiro.ch,degiro.dk,degiro.gr,degiro.fr,degiro.ie,degiro.it,degiro.nl,degiro.co.no,degiro.hu,degiro.at,degiro.pl,degiro.fi,degiro.se,degiro.es,degiro.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! journal.hr
+journal.hr##+js(set-cookie, jour_cookies, 1)
+journal.hr##+js(set-cookie, jour_functional, true)
+journal.hr##+js(set-cookie, jour_analytics, false)
+journal.hr##+js(set-cookie, jour_marketing, false)
+!! BrockmanAllowedCookies
+eurogamer.nl,eurogamer.es,eurogamer.cz,eurogamer.net,eurogamer.pl,eurogamer.pt,rockpapershotgun.com,vg247.com##div#onetrust-consent-sdk
+eurogamer.nl,eurogamer.es,eurogamer.cz,eurogamer.net,eurogamer.pl,eurogamer.pt,rockpapershotgun.com,vg247.com##+js(set, BrockmanAllowedCookies.targeting, true)
+eurogamer.nl,eurogamer.es,eurogamer.cz,eurogamer.net,eurogamer.pl,eurogamer.pt,rockpapershotgun.com,vg247.com##+js(set, BrockmanAllowedCookies.functional, true)
+! howstuffworks.com
+howstuffworks.com##div#onetrust-consent-sdk
+howstuffworks.com##+js(set-cookie, gdpr_opt_in, 1)
+! topographic-map.com
+topographic-map.com##body,html:style(overflow: auto !important; position: initial !important;)
+! bienmanger.com
+bienmanger.com###bloc-bm-cookies-consent
+bienmanger.com##.modal-backdrop
+bienmanger.com##body,html:style(overflow: auto !important; position: initial !important;)
+! stickypassword.com
+stickypassword.com##+js(set-cookie, ad_storage, denied)
+stickypassword.com##+js(set-cookie, stickyCookiesSet, true)
+stickypassword.com##+js(set-cookie, analytics_storage, denied)
+!! .c--anim
+vesely-drak.cz,consordini.com,fitzmuseum.cam.ac.uk,hotdk2023.kre.hu,panwybierak.pl,bomagasinet.dk,miplantaweb.com,electronics.semaf.at,sfd.pl,flota.es,jobs.cz,prace.cz,eninternetgratis.com,unavidadeviaje.com,unavidadeviaje.com##.c--anim
+vesely-drak.cz,consordini.com,fitzmuseum.cam.ac.uk,hotdk2023.kre.hu,panwybierak.pl,bomagasinet.dk,miplantaweb.com,electronics.semaf.at,sfd.pl,flota.es,jobs.cz,prace.cz,eninternetgratis.com,unavidadeviaje.com,unavidadeviaje.com##body,html:style(overflow: auto !important; position: initial !important;)
+! conversion-rate-experts.com
+conversion-rate-experts.com##+js(set-cookie, user_experience_cookie_consent, false)
+conversion-rate-experts.com##+js(set-cookie, marketing_cookie_consent, false)
+! merkur.si
+merkur.si##+js(set-cookie, cookie_notice_dismissed, yes)
+merkur.si##+js(set-cookie, cookie_analytics_allow, no)
+merkur.si##+js(set-cookie, mer_cc_dim_rem_allow, no)
+! apmnews.com
+apmnews.com###coConsent
+apmnews.com##body,html:style(overflow: auto !important; position: initial !important;)
+! .klaro
+fussballgucken.info,taschenhirn.de,pyroweb.de##.klaro
+! clo3d.com
+clo3d.com##.loading-overlay
+clo3d.com##body,html:style(height: auto !important; overflow: auto !important)
+! beckhoff.com
+gesipa.fr,gesipa.de,gesipa.co.uk,gesipa.es,gesipa.at,gesipa.pl,gesipa.nl,gesipausa.com,gesipa.cz,gesipa.mx,gesipa.com.tr,gesipa.ro,sansebastianturismoa.eus,herrfors.fi,beckhoff.com,behobia-sansebastian.com###klaro
+gesipa.fr,gesipa.de,gesipa.co.uk,gesipa.es,gesipa.at,gesipa.pl,gesipa.nl,gesipausa.com,gesipa.cz,gesipa.mx,gesipa.com.tr,gesipa.ro,sansebastianturismoa.eus,herrfors.fi,beckhoff.com,behobia-sansebastian.com##body,html:style(overflow: auto !important; position: initial !important;)
+! igbce.de
+igbce.de##body:style(overflow: auto !important; position: initial !important;)
+! kbv.de
+116117.de,kbv.de###dialog_layer
+116117.de,kbv.de##body:style(overflow: auto !important; position: initial !important;)
+! theateramrand.de
+theateramrand.de###cookiebannerModal
+theateramrand.de##+js(rc, messages-active, , stay)
+! pelzer-stapler.de
+pelzer-stapler.de##.modal-dialog
+pelzer-stapler.de##body,html:style(overflow: auto !important; position: initial !important;)
+! 2ip.ru
+2ip.ru##.consent__notice
+2ip.ru##.body-blackout
+2ip.ru##body,html:style(overflow: auto !important; position: initial !important;)
+!! xhamster.com
+buktube.com,xhamster.com,xhamster2.com,xhamster3.com,xhamster.desi##.parental-bg
+buktube.com,xhamster.com,xhamster2.com,xhamster3.com,xhamster.desi##.parental-control
+buktube.com,xhamster.com,xhamster2.com,xhamster3.com,xhamster.desi##+js(rc, xh-thumb-disabled, html,stay)
+buktube.com,xhamster.com,xhamster2.com,xhamster3.com,xhamster.desi##.hasParental.cookies-modal:remove()
+buktube.com,xhamster.com,xhamster2.com,xhamster3.com,xhamster.desi##.container-724f7
+buktube.com,xhamster.com,xhamster2.com,xhamster3.com,xhamster.desi##.desktop-4488f
+buktube.com,xhamster.com,xhamster2.com,xhamster3.com,xhamster.desi##.cookiesAnnounce-efbd5
+buktube.com,xhamster.com,xhamster2.com,xhamster3.com,xhamster.desi##body,html:style(overflow: auto !important; position: initial !important;)
+!! #CybotCookiebotDialog
+woolworth.de,woolworth.pl,cajamar.es,refinery29.com,th-deg.de,netkom.de,dasinvestment.com###CybotCookiebotDialog
+woolworth.de,woolworth.pl,cajamar.es,refinery29.com,th-deg.de,netkom.de,dasinvestment.com###CybotCookiebotDialogBodyUnderlay
+refinery29.com,netkom.de##body:style(overflow: auto !important; position: initial !important;)
+woolworth.de,woolworth.pl,cajamar.es,th-deg.de,dasinvestment.com##body,html:style(overflow: auto !important; position: initial !important;)
+! petice.com
+petitionenligne.com,petitionenligne.be,petitionenligne.fr,petitionenligne.re,petitionenligne.ch,skrivunder.net,petitiononline.uk,petitions.nz,petizioni.com,peticao.online,skrivunder.com,peticiones.ar,petities.com,petitionen.com,petice.com,opprop.net,peticiok.com,peticiones.net,peticion.es,peticiones.pe,peticiones.mx,peticiones.cl,peticije.online,peticiones.co###cookie_consent_modal
+petitionenligne.com,petitionenligne.be,petitionenligne.fr,petitionenligne.re,petitionenligne.ch,skrivunder.net,petitiononline.uk,petitions.nz,petizioni.com,peticao.online,skrivunder.com,peticiones.ar,petities.com,petitionen.com,petice.com,opprop.net,peticiok.com,peticiones.net,peticion.es,peticiones.pe,peticiones.mx,peticiones.cl,peticije.online,peticiones.co##.modal-backdrop
+petitionenligne.com,petitionenligne.be,petitionenligne.fr,petitionenligne.re,petitionenligne.ch,skrivunder.net,petitiononline.uk,petitions.nz,petizioni.com,peticao.online,skrivunder.com,peticiones.ar,petities.com,petitionen.com,petice.com,opprop.net,peticiok.com,peticiones.net,peticion.es,peticiones.pe,peticiones.mx,peticiones.cl,peticije.online,peticiones.co##body,html:style(overflow: auto !important; position: initial !important;)
+petitionenligne.com,petitionenligne.be,petitionenligne.fr,petitionenligne.re,petitionenligne.ch,skrivunder.net,petitiononline.uk,petitions.nz,petizioni.com,peticao.online,skrivunder.com,peticiones.ar,petities.com,petitionen.com,petice.com,opprop.net,peticiok.com,peticiones.net,peticion.es,peticiones.pe,peticiones.mx,peticiones.cl,peticije.online,peticiones.co##+js(set-cookie, num_times_cookie_consent_banner_shown, 1)
+petitionenligne.com,petitionenligne.be,petitionenligne.fr,petitionenligne.re,petitionenligne.ch,skrivunder.net,petitiononline.uk,petitions.nz,petizioni.com,peticao.online,skrivunder.com,peticiones.ar,petities.com,petitionen.com,petice.com,opprop.net,peticiok.com,peticiones.net,peticion.es,peticiones.pe,peticiones.mx,peticiones.cl,peticije.online,peticiones.co##+js(set-cookie, cookie_consent_banner_shown_last_time, 1)
+! bimedis.com
+bimedis.com##.v-dialog__content
+bimedis.com##.v-overlay
+!! #framework-cookies
+alphatronmarine.com,amrecycling.nl,bassant.nl,bploodsen.nl,cilgro.nl,compair-airco.nl,desatel.nl,dewaagnederland.nl,diasta.com,digitalimpact.nl,dutchlightpro.nl,ecm.nl,elinex.nl,foundationforauditingresearch.org,golfclub-kleiburg.nl,golfschoolhitland.nl,hgrgevelrenovatie.nl,hitland.nl,horecadisposables.nl,iberdeli.nl,in2waste.eu,johntoy.nl,kwissle.com,landuwasco.nl,mfiv.nl,mgfruit.com,mommers.nl,nbkbv.com,piguillet.nl,plan-bee.nl,rhoongolfcenter.nl,romaro.nl,sport-people.nl,treijtel.nl,upinternational.nl,vandoornbv.nl,vanrooy.nl,vebecon.com,werkenbijdfzs.nl,werkenindetechniek.nl,joueco.nl###framework-cookies
+alphatronmarine.com,amrecycling.nl,bassant.nl,bploodsen.nl,cilgro.nl,compair-airco.nl,desatel.nl,dewaagnederland.nl,diasta.com,digitalimpact.nl,dutchlightpro.nl,ecm.nl,elinex.nl,foundationforauditingresearch.org,golfclub-kleiburg.nl,golfschoolhitland.nl,hgrgevelrenovatie.nl,hitland.nl,horecadisposables.nl,iberdeli.nl,in2waste.eu,johntoy.nl,kwissle.com,landuwasco.nl,mfiv.nl,mgfruit.com,mommers.nl,nbkbv.com,piguillet.nl,plan-bee.nl,rhoongolfcenter.nl,romaro.nl,sport-people.nl,treijtel.nl,upinternational.nl,vandoornbv.nl,vanrooy.nl,vebecon.com,werkenbijdfzs.nl,werkenindetechniek.nl,joueco.nl##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cmms_cookie_consent_manager
+mediathek.lfv-bayern.de##.cmms_cookie_consent_manager
+mediathek.lfv-bayern.de##body,html:style(height: auto !important; overflow: auto !important)
+mediathek.lfv-bayern.de##+js(set-cookie, privacy_hint, 1)
+!! .chakra
+lepermislibre.fr,brico.be,praxis.nl##.chakra-slide
+lepermislibre.fr,brico.be,praxis.nl##.chakra-modal__content-container
+lepermislibre.fr,brico.be,praxis.nl##.chakra-modal__overlay
+lepermislibre.fr,brico.be,praxis.nl##body,html:style(overflow: auto !important; position: initial !important;)
+! owners.kia.com
+owners.kia.com##.privacy-banner-contain
+owners.kia.com##body,html:style(overflow: auto !important; position: initial !important;)
+! bing.com
+bing.com##.bnp_cookie_banner
+! ecargo.com
+ecargo.com##+js(aopw, onscroll)
+! displayspecifications.com
+devicespecifications.com,displayspecifications.com##.window-overlay
+devicespecifications.com,displayspecifications.com##body,html:style(overflow: auto !important; position: initial !important;)
+! invisalign
+invisalign.de,invisalign.eu,invisalign.com.cy,invisalign.cz,invisalign.dk,invisalign.fi,invisalign.co.uk,invisalign.gr,invisalign.ie,invisalign.it,invisalign.ru,invisalign.fr,invisalign.nl,invisalign.no,invisalign.pl,invisalign.pt,invisalign.ch,invisalign.se,invisalign.sk##div[class^="ConciergePopup"]
+invisalign.de,invisalign.eu,invisalign.com.cy,invisalign.cz,invisalign.dk,invisalign.fi,invisalign.co.uk,invisalign.gr,invisalign.ie,invisalign.it,invisalign.ru,invisalign.fr,invisalign.nl,invisalign.no,invisalign.pl,invisalign.pt,invisalign.ch,invisalign.se,invisalign.sk##html:style(position: static !important; overflow: auto !important; width: auto !important;)
+! invisalign.es
+invisalign.es##div[class^="CookiePopup"]
+invisalign.es##html:style(position: static !important; overflow: auto !important; width: auto !important;)
+! heycar.co.uk
+heycar.co.uk##.Consent_cookieModal__IcNAf
+heycar.co.uk##body,html:style(overflow: auto !important; position: initial !important;)
+! cunardcruceros.com
+cunardcruceros.com##.prtltmmc-popup
+cunardcruceros.com##body:style(overflow: auto !important; position: initial !important;)
+! pubg.com
+pubg.com##.has-dimmed-bg
+pubg.com##body,html:style(overflow: auto !important; position: initial !important;)
+! technikum-wien.at
+technikum-wien.at##.cookie-banner_cookieBanner__pFUMz
+technikum-wien.at##body,html:style(overflow: auto !important; position: initial !important;)
+! farmer.pl
+farmer.pl###rodoPopup
+farmer.pl##+js(aopw, FrodoPV)
+! kombiverkehr.de
+kombiverkehr.de###consent_manager
+kombiverkehr.de##body,html:style(overflow: auto !important; position: initial !important;)
+! evium.de
+evium.de##.cdk-overlay-container
+evium.de##+js(rc, cdk-overlay-container, , stay)
+evium.de##.cdk-global-overlay-wrapper
+evium.de##.cdk-overlay-backdrop
+evium.de##body,html:style(overflow: auto !important; position: initial !important;)
+! voordeeluitjes.nl
+voordeeluitjes.nl##.cookie-banner-with-image
+voordeeluitjes.nl##body,html:style(height: auto !important; overflow: auto !important)
+! oponeo
+oponeo.it,oponeo.cz,oponeo.de,oponeo.es,oponeo.at,oponeo.nl,oponeo.hu,oponeo.fr,oponeo.sk,banden-oponeo.be,pneus-oponeo.be,oponeo.co.uk,oponeo.ie###consentsPolicyDialog
+oponeo.it,oponeo.cz,oponeo.de,oponeo.es,oponeo.at,oponeo.nl,oponeo.hu,oponeo.fr,oponeo.sk,banden-oponeo.be,pneus-oponeo.be,oponeo.co.uk,oponeo.ie##body,html:style(height: auto !important; overflow: auto !important)
+! buienradar.
+buienradar.be,buienradar.nl##.onboard-popup-container
+buienradar.be,buienradar.nl##.onboard-background
+buienradar.be,buienradar.nl##body,html:style(height: auto !important; overflow: auto !important)
+! plusportal.hr
+plusportal.hr##.cookies_popup-container
+plusportal.hr##body,html:style(overflow: auto !important; position: initial !important;)
+! #orejime
+masante.belgique.be###orejime
+masante.belgique.be##body,html:style(overflow: auto !important; position: initial !important;)
+! linsenplatz.de
+linsenplatz.de###keksGenehmigungsModal
+linsenplatz.de##.modal-backdrop
+linsenplatz.de##body,html:style(overflow: auto !important; position: initial !important;)
+! elkjop.no
+elkjop.no###cookie-information-template-wrapper
+elkjop.no##body:style(overflow: auto !important; position: initial !important;)
+! #modal-overlay
+searchforsites.co.uk###modal-overlay
+searchforsites.co.uk##body,html:style(overflow: auto !important; position: initial !important;)
+! .modal-overlay
+hema.com,hema.nl,bookmygarage.com,groofly.com,remax.at##.modal-overlay
+hema.com,hema.nl,bookmygarage.com,groofly.com,remax.at##body,html:style(overflow: auto !important; position: initial !important;)
+! .blur-mode
+turvakauppa.com##.modals-wrapper
+turvakauppa.com##.blur-mode
+turvakauppa.com##body:style(overflow: auto !important; position: initial !important;)
+! teufel.de
+teufel.de##.privacy-layer
+teufel.de##body,html:style(overflow: auto !important; position: initial !important;)
+! coolmath.com
+coolmath.com,coolmath4kids.com##.gdpr-overlay-background
+coolmath.com,coolmath4kids.com##body,html:style(overflow: auto !important; position: initial !important;)
+! aluypvc.es
+aluypvc.es##+js(set-cookie, cookiesConsent, 1)
+aluypvc.es##+js(set-cookie, cookiesStatistics, 0)
+aluypvc.es##+js(set-cookie, cookiesPreferences, 0)
+! vadhander.hogakusten.com
+vadhander.hogakusten.com,vadhander.kramfors.se##+js(set, settings.consent, true)
+! stewes.de
+stewes.de##+js(set, HB.CookieSettings.init, noopFunc)
+! gadgethacks cookie
+gadgethacks.com##+js(set, WHT.ShowConsentForm, trueFunc)
+! qastack.fr
+qastack.fr##+js(set, useGDPR, false)
+! xvideos.com
+xvideos.com##+js(set, xv.disclaimer.displayCookiePopup, noopFunc)
+! epayments.com
+epayments.com##.is-blocked
+epayments.com##+js(rc, b-dialog, , stay)
+epayments.com##html:style(overflow: auto !important)
+! svd.se
+svd.se##div[id^="sp_message_container_"]
+svd.se##+js(nostif, appendChild)
+! oscaro.com
+oscaro.com##.popin-cookie
+oscaro.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cookies-mask
+riacurrencyexchange.es##.cookies-mask
+riacurrencyexchange.es##body,html:style(overflow: auto !important; position: initial !important;)
+!! #template-container_cookie-consent
+fotoskoda.cz,e-glamour.pl###template-container_cookie-consent
+fotoskoda.cz,e-glamour.pl##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cookies
+iledefrance-mobilites.fr,genserenergy.com,scsplc.co.uk,intergen.com,morsesclubplc.com,graftonplc.com,resolutionlife.com##.cookies
+iledefrance-mobilites.fr,genserenergy.com,scsplc.co.uk,intergen.com,morsesclubplc.com,graftonplc.com,resolutionlife.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! pracodawcy.pracuj.pl/www.pracuj.pl/robota.pracuj.pl/zarobki.pracuj.pl
+pracuj.pl##+js(set-cookie, gpc_v, 1)
+pracuj.pl##+js(set-cookie, gpc_ad, 0)
+pracuj.pl##+js(set-cookie, gpc_analytic, 0)
+pracuj.pl##+js(set-cookie, gpc_audience, 0)
+pracuj.pl##+js(set-cookie, gpc_func, 0)
+!! .plusgate
+astroportal.com##.plusgate
+astroportal.com##body,html:style(height: auto !important; overflow: auto !important)
+!! .ui-widget-overlay
+billabong.fr,billabong.dk,billabong.co.uk,billabong-store.ie,billabong-store.pl,billabong.fi,roxy.fi,roxy.fr,roxy-denmark.dk,roxy-ireland.ie,roxy-store.se,roxy-uk.co.uk,glenair.it##.ui-widget-overlay
+billabong.fr,billabong.dk,billabong.co.uk,billabong-store.ie,billabong-store.pl,billabong.fi,roxy.fi,roxy.fr,roxy-denmark.dk,roxy-ireland.ie,roxy-store.se,roxy-uk.co.uk,glenair.it##body,html:style(height: auto !important; overflow: auto !important)
+! riceundspice.de
+riceundspice.de##.cookie-wrapper
+riceundspice.de##+js(rc, disabled, body, stay)
+! ejobs.ro
+ejobs.ro##.CookiesPopup
+ejobs.ro##html,body:style(overflow: auto !important; position: initial !important;)
+! happysocks.com
+happysocks.com##.cookies-consent-banner
+happysocks.com##+js(rc, lock-scroll, , stay)
+happysocks.com##+js(rc, disabled, header, stay)
+! lolaliza.com
+lolaliza.com##.mask-screen
+lolaliza.com##body,html:style(overflow: auto !important; position: initial !important;)
+! win2day.at
+win2day.at##+js(rc, cookie-not-accepted-overlay, , stay)
+win2day.at##body,html:style(height: auto !important; overflow: auto !important)
+!! #its--container_cook
+espatur.net,finquesballesta.com,espana-holiday.com,bellmon.com,mynice-vacances.fr,benneckerent.ru,turistcasa.it,alaparisienne.com,inmobiliariacanovas.com,hometown.ae,tranquilityvillarentals.com,rickettsluxury.com,blauhousealquileres.com,priorityvillas.com,solaga.co.uk,coroacoroa.com,iberorentapartments.com,kazaportugal.com,homesud.fr,dreamhomesrentals.com,vivalidays.com,alquilervacationesempuriabrava.com,solaga.es,webvillas.nl,vakantiewoninghuurcostabrava.com,alpineinspirations.com,playa-vacaciones.com,benneckerent.es,qtur.pt,zeusapartamentos.es,benneckerent.fr,solaga.dk,webvillas.net,mallorca4rent.com,lloguervacancesempuriabrava.com,villasduma.com,ferienwohnungmietencostabrava.com,vitivola.com,travelhabitat.es###its--container_cook
+espatur.net,finquesballesta.com,espana-holiday.com,bellmon.com,mynice-vacances.fr,benneckerent.ru,turistcasa.it,alaparisienne.com,inmobiliariacanovas.com,hometown.ae,tranquilityvillarentals.com,rickettsluxury.com,blauhousealquileres.com,priorityvillas.com,solaga.co.uk,coroacoroa.com,iberorentapartments.com,kazaportugal.com,homesud.fr,dreamhomesrentals.com,vivalidays.com,alquilervacationesempuriabrava.com,solaga.es,webvillas.nl,vakantiewoninghuurcostabrava.com,alpineinspirations.com,playa-vacaciones.com,benneckerent.es,qtur.pt,zeusapartamentos.es,benneckerent.fr,solaga.dk,webvillas.net,mallorca4rent.com,lloguervacancesempuriabrava.com,villasduma.com,ferienwohnungmietencostabrava.com,vitivola.com,travelhabitat.es##body,html:style(overflow: auto !important; position: initial !important;)
+!! #cc--main
+no.sove.nu,teleperformance.com,folkbiblioteken.lund.se,traiteurmerenda.com,mediccentre.pl,abouthungary.hu,profesia.sk,systhen.com,offresasaisir.fr,sagicheck.jp,zaugg.swiss,enterprise.fi,imusic.se,imusic.de,imusic.no,imusic.dk,imusic.co,allmusicitalia.it,forzapalermo.it###cc--main
+no.sove.nu,teleperformance.com,folkbiblioteken.lund.se,traiteurmerenda.com,mediccentre.pl,abouthungary.hu,profesia.sk,systhen.com,offresasaisir.fr,sagicheck.jp,zaugg.swiss,enterprise.fi,imusic.se,imusic.de,imusic.no,imusic.dk,imusic.co,allmusicitalia.it,forzapalermo.it##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cookie-wall
+whoohoo.pl##.cookie-wall
+whoohoo.pl##body,html:style(overflow: auto !important; position: initial !important;)
+! puregoldprotein.com
+puregoldprotein.com##.cookieConsentDialog
+puregoldprotein.com##body,html:style(overflow: auto !important; position: initial !important;)
+! kidioui.fr
+kidioui.fr##.cookieACK
+kidioui.fr##body,html:style(overflow: auto !important; position: initial !important;)
+! newsello.pl
+newsello.pl###ns_cookie_accepted
+newsello.pl##body,html:style(overflow: auto !important; position: initial !important;)
+! naturesfinest.pt
+naturesfinest.pt###googleConsentPopup
+naturesfinest.pt##body,html:style(overflow: auto !important; position: initial !important;)
+! tracker.fressnapf.de
+tracker.fressnapf.de##.page-overlay
+tracker.fressnapf.de##body:style(overflow: auto !important; position: initial !important;)
+! loopearplugs.com
+loopearplugs.com,arktis.de##.cc-window-wrapper
+loopearplugs.com,arktis.de###gdpr-blocking-page-overlay
+loopearplugs.com,arktis.de##body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! apfelband.de
+apfelband.de###gdpr-blocking-page-overlay
+apfelband.de##body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! riflessidiluce.it
+riflessidiluce.it##.gdpr-consent-tabs
+riflessidiluce.it##body,html:style(overflow: auto !important; position: initial !important;)
+! united-domains.de
+united-domains.de##.layer-overlay
+united-domains.de##.gen-layer
+united-domains.de##body:style(overflow: auto !important; position: initial !important;)
+!! .ck-user-cookie-consent-modal
+noblechairs.de##.ck-user-cookie-consent-modal
+! super.cz
+super.cz##.szn-cmp-dialog-container
+super.cz##html,body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! vroomly.com
+vroomly.com##.a
+vroomly.com##body,html:style(overflow: auto !important; position: initial !important;)
+! jobs.at
+jobs.at##.c-cookie-modal
+jobs.at##.c-cookie-modal-overlay
+jobs.at##body,html:style(height: auto !important; overflow: auto !important)
+!! sliding-popup-cookies
+fundacionasla.com###sliding-popup-cookies
+fundacionasla.com##body,html:style(overflow: auto !important; position: initial !important;)
+! interhyp.de
+interhyp.de##.__SSR_CONSENT_MANAGER__
+interhyp.de##html:style(position: static !important)
+! porp.pl
+porp.pl##.cookies-banner-bg
+porp.pl##+js(rc, blurred-page, ,stay)
+! nadeta.cz
+nadeta.cz,zonerpress.cz###inshopCookies
+nadeta.cz,zonerpress.cz##body,html:style(overflow: auto !important; position: initial !important;)
+! nuvucameras.com
+nuvucameras.com##.px-banner-cookies
+nuvucameras.com##body,html:style(overflow: auto !important; position: initial !important;)
+! computerbase.de https://www.reddit.com/r/uBlockOrigin/comments/thrxes/is_it_not_possible_to_block_a_dialog_element/
+computerbase.de##+js(set-cookie, consent, 1)
+computerbase.de##+js(set-cookie, OptanonAlertBoxClosed, 1)
+! unifique.com.br
+unifique.com.br###lgpd
+unifique.com.br##body,html:style(overflow: auto !important; position: initial !important;)
+! uhb.nhs.uk
+uhb.nhs.uk##.uhb-c-cookie-notice
+uhb.nhs.uk##body,html:style(overflow: auto !important; position: initial !important;)
+! pl.canalplus.com
+canalplus.com##.Overlayer
+canalplus.com##html,body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! clasohlson.com
+clasohlson.com##.cookie-bar-overlay
+clasohlson.com##body,html:style(overflow: auto !important; position: initial !important;)
+! answear.
+answear.ro,answear.cz,answear.bg,answear.sk,answear.hu,answear.com,answear.gr,answear.hr,answear.ua,answear.com.cy##.modal
+answear.ro,answear.cz,answear.bg,answear.sk,answear.hu,answear.com,answear.gr,answear.hr,answear.ua,answear.com.cy##body,html:style(height: auto !important; overflow: auto !important)
+! gesundheitsamt-2025.de
+gesundheitsamt-2025.de##.tx-lin-gdpr
+gesundheitsamt-2025.de##+js(rc, cookie-consent--present, , stay)
+! theprotocol.it
+theprotocol.it##.Container_c5dqj4m
+theprotocol.it##body:style(overflow-y: visible !important;)
+! just-eat.dk
+just-eat.dk##._1eRs3w
+just-eat.dk##body,html:style(height: auto !important; overflow: auto !important)
+! lekarna-bella.cz
+lekarna-bella.cz##.modal-backdrop
+lekarna-bella.cz##.modal
+lekarna-bella.cz##body:style(overflow: auto !important; position: initial !important;)
+! prosciutteriasandaniele.it
+prosciutteriasandaniele.it###page_hider
+prosciutteriasandaniele.it##body:style(overflow: auto !important; position: initial !important;)
+! konsument.at
+vki.at,konsument.at##+js(set-cookie, vkicookieconsent, 0)
+! bayernlb.de
+bayernlabo.de,bayernlb.de##.lg-backdrop
+bayernlabo.de,bayernlb.de##body:style(overflow: auto !important; position: initial !important;)
+! linztourismus.at
+linztourismus.at##.f__privacy-cookie-manager
+linztourismus.at##body,html:style(overflow: auto !important; position: initial !important;)
+! lightandland.co.uk
+lightandland.co.uk##.cc-outer
+lightandland.co.uk##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cookiewall
+mc-sloten.nl,cilinderdomein.nl,securitydiscount.nl##.cookiewall
+mc-sloten.nl,cilinderdomein.nl,securitydiscount.nl##body,html:style(overflow: auto !important; position: initial !important;)
+!! #cookiewall-modal
+b-immobree.be,lentebessen.be,heijtingmilieuservice.nl,floraluxbree.be###cookiewall-modal
+b-immobree.be,lentebessen.be,heijtingmilieuservice.nl,floraluxbree.be##.modal-backdrop
+b-immobree.be,lentebessen.be,heijtingmilieuservice.nl,floraluxbree.be##body,html:style(overflow: auto !important; position: initial !important;)
+!! .consentmodal
+kaartje2go.de##.consentmodal
+kaartje2go.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! .header-cookies-gdpr
+coastfashion.com,oasisfashion.com,warehousefashion.com,misspap.com,karenmillen.com,boohooman.com##.header-cookies-gdpr
+coastfashion.com,oasisfashion.com,warehousefashion.com,misspap.com,karenmillen.com,boohooman.com##+js(rc, header-gdrp-cookies-visible , , stay)
+coastfashion.com,oasisfashion.com,warehousefashion.com,misspap.com,karenmillen.com,boohooman.com##body:style(overflow: auto !important; position: initial !important;)
+!! .pb-header__overlay
+bhw.de,dslbank.de##.pb-header__overlay
+bhw.de,dslbank.de##body,html:style(overflow: auto !important; position: initial !important;)
+!! .c-cookie-popup
+abm-accountants.com,abdijsiteherkenrode.be,avlwoningbouw.be,vivantia.be,o-f-s.eu,a2o-architecten.be,thebelgianbed.com,adlon.be,rsc-slaapcomfort.com,antiek-albarello.com,enib.be,a2o-omgeving.be,design-home.be,eremex.be,dasbelgischebett.de,jagsonly.be,decoform.be,aptigu.be,kickbike.be,morphologicum.org,kwvanbladel.be,vaatkliniek.be,barbecues.be,sanik.be,browsbox.com,tuincenterlissens.be,royalcrown.be,dr-geeraerts-dermatologie.be,dewiekslag.be,omerus.be,microscope-shop.be,marlou.be,depaterstafel.eu,tri-active.be,durocub.be,delbruyere.be,hanssens.net,scherpesteen.be,aratina.com,gripsholm.be,noorwegenhitravissers.be,incadans.be,medibe.be,atirio.be,sani-lux.net,a2o.be,vado.be,jbavicon.com,hetbelgischbed.be,kindermolen.be,baeyens-l.be,p-laser.com,allimex.eu,granhold.com,bbcbb.be,adtemptare.be,a-spect.be,visitatiebottelare.be,groepmsi.be,deregenboog.be,vrijdagmarkt.net,nsi-be.com,liswood-tache.com,bartyde.be##.c-cookie-popup
+abm-accountants.com,abdijsiteherkenrode.be,avlwoningbouw.be,vivantia.be,o-f-s.eu,a2o-architecten.be,thebelgianbed.com,adlon.be,rsc-slaapcomfort.com,antiek-albarello.com,enib.be,a2o-omgeving.be,design-home.be,eremex.be,dasbelgischebett.de,jagsonly.be,decoform.be,aptigu.be,kickbike.be,morphologicum.org,kwvanbladel.be,vaatkliniek.be,barbecues.be,sanik.be,browsbox.com,tuincenterlissens.be,royalcrown.be,dr-geeraerts-dermatologie.be,dewiekslag.be,omerus.be,microscope-shop.be,marlou.be,depaterstafel.eu,tri-active.be,durocub.be,delbruyere.be,hanssens.net,scherpesteen.be,aratina.com,gripsholm.be,noorwegenhitravissers.be,incadans.be,medibe.be,atirio.be,sani-lux.net,a2o.be,vado.be,jbavicon.com,hetbelgischbed.be,kindermolen.be,baeyens-l.be,p-laser.com,allimex.eu,granhold.com,bbcbb.be,adtemptare.be,a-spect.be,visitatiebottelare.be,groepmsi.be,deregenboog.be,vrijdagmarkt.net,nsi-be.com,liswood-tache.com,bartyde.be##body,html:style(overflow: auto !important; position: initial !important;)
+!! #didomi-host
+as.com,mein-mmo.de,vecernji.hr,allocine.fr,francetvinfo.fr,leboncoin.fr###didomi-host
+as.com,mein-mmo.de,vecernji.hr,allocine.fr,francetvinfo.fr,leboncoin.fr##body,html:style(overflow: visible !important; padding-right: 0 !important; overflow-y: visible !important; overflow-x: visible !important)
+!! Didomi noop
+elconfidencial.com,euromaster.de,lavanguardia.com,strefabiznesu.pl,jofogas.hu,gamepro.de,melty.fr##+js(set, Didomi, noopFunc)
+! mkb.hu
+mkb.hu###gdpr-consent-modal
+mkb.hu##body,html:style(overflow: auto !important; position: initial !important;)
+!! .rgpd
+daelgrau.com,tisseront.com,felopateerpalace.com,bassereau.com,landreau.fr,roure-tours.com,etejoaillier.com,zegg-cerlati.com,bijouterieponsolle.com,frayssinet-joaillier.fr,dorise-joaillier.com,cre-or.fr,larroutis.fr,gourret.com,bijouterie-julian.com,or-azur.com,descours1893.fr,bg-bruno.com,longinus.fr,lombard-joaillier.com,bijouteriefrancor.com,bijouterie-leat.com,bijouterie-dutoyat.fr,bijouteriegeorges.fr,bijouterie-neuville.fr,vaneste.fr,haubois.com,bijouterie-nora.fr,bijouterie-fournier.com,gueguin-picaud.com,rb1890.fr,montres-shop.com,au-beffroi.com,joaillerie-hardy.com,beaumont-finet.com,bijouterie-doreille.com,ferret.fr##.rgpd
+daelgrau.com,tisseront.com,felopateerpalace.com,bassereau.com,landreau.fr,roure-tours.com,etejoaillier.com,zegg-cerlati.com,bijouterieponsolle.com,frayssinet-joaillier.fr,dorise-joaillier.com,cre-or.fr,larroutis.fr,gourret.com,bijouterie-julian.com,or-azur.com,descours1893.fr,bg-bruno.com,longinus.fr,lombard-joaillier.com,bijouteriefrancor.com,bijouterie-leat.com,bijouterie-dutoyat.fr,bijouteriegeorges.fr,bijouterie-neuville.fr,vaneste.fr,haubois.com,bijouterie-nora.fr,bijouterie-fournier.com,gueguin-picaud.com,rb1890.fr,montres-shop.com,au-beffroi.com,joaillerie-hardy.com,beaumont-finet.com,bijouterie-doreille.com,ferret.fr##body,html:style(overflow: auto !important; position: initial !important;)
+! healthline media
+greatist.com,healthline.com,medicalnewstoday.com,psychcentral.com###modal-host
+greatist.com,healthline.com,medicalnewstoday.com,psychcentral.com##body:style(overflow: auto !important; position: initial !important;)
+! nebo.app
+nebo.app##.banner
+nebo.app##+js(rc, fixed, , stay)
+! .evd-background
+sachsen-netze.de##.evd-background
+sachsen-netze.de##html,body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! la-becanerie.com
+la-becanerie.com###body-overlay
+la-becanerie.com##body,html:style(overflow: auto !important; position: initial !important;)
+! .frontendPrivacy__modalWrapper
+jugendundmedien.ch,jeunesetmedias.ch,giovaniemedia.ch,youthandmedia.ch##.frontendPrivacy__modalWrapper
+jugendundmedien.ch,jeunesetmedias.ch,giovaniemedia.ch,youthandmedia.ch##body,html:style(overflow: auto !important; position: initial !important;)
+! .g-consentmanager
+gemeinsam-klasse-sein.de,tk.de##.g-consentmanager
+gemeinsam-klasse-sein.de,tk.de##body,html:style(overflow: auto !important; position: initial !important;)
+! etransport.pl
+engeldirekt.de,fz-juelich.de,etransport.pl,skandia.se##.dimmer
+engeldirekt.de,fz-juelich.de,etransport.pl,skandia.se##body,html:style(overflow: auto !important; position: initial !important;)
+! wohnen-im-alter.de
+wohnen-im-alter.de###cookie-consent2
+wohnen-im-alter.de##body,html:style(overflow: auto !important; position: initial !important;)
+! sportland.com
+sportland.com,sportland.ee,sportland.fi,sportland.lt##.CookiePopup-DivWrapper
+sportland.com,sportland.ee,sportland.fi,sportland.lt##body,html:style(overflow: auto !important; position: initial !important;)
+! fuso-trucks.*
+fuso-trucks.ro,fuso-trucks.ch,fuso-trucks.fi,fuso-trucks.pl,fuso-trucks.dk,fuso-trucks.com.pt,fuso-trucks.fr,fuso-trucks.sk,fuso-trucks.es,fuso-trucks.de,fuso-trucks.at,fuso-trucks.no,fuso-trucks.be###popupModalOverlay
+fuso-trucks.ro,fuso-trucks.ch,fuso-trucks.fi,fuso-trucks.pl,fuso-trucks.dk,fuso-trucks.com.pt,fuso-trucks.fr,fuso-trucks.sk,fuso-trucks.es,fuso-trucks.de,fuso-trucks.at,fuso-trucks.no,fuso-trucks.be##body,html:style(overflow: auto !important; position: initial !important;)
+!! .backdrop-cookie
+theras-group.com,edencasa.it##.backdrop-cookie
+theras-group.com,edencasa.it##body,html:style(overflow: auto !important; position: initial !important;)
+!! .sliding-popup-bottom
+bibliotheek.be,axa-im.it,freiheit.org,itextpdf.com,manosunidas.org##.sliding-popup-bottom
+bibliotheek.be,axa-im.it,freiheit.org,itextpdf.com,manosunidas.org##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cookie-banner-modal-overlay
+plus500.es,plus500.at,plus500.org,plus500.com##.cookie-banner-modal-overlay
+plus500.es,plus500.at,plus500.org,plus500.com##html:style(overflow: auto !important; position: initial !important;)
+! carry.pl
+carry.pl##.cooksieslaw-block
+carry.pl##body:style(overflow: auto !important; position: initial !important;)
+! agrofertpolska.com
+agrofertpolska.com##.screen-darken
+agrofertpolska.com##body:style(overflow: auto !important; position: initial !important;)
+! .oxy-modal-backdrop
+sis.lt,heatgeek.com##.oxy-modal-backdrop
+sis.lt,heatgeek.com##body:style(overflow: auto !important; position: initial !important;)
+! gant.sk
+gant.sk##.vm--container
+gant.sk##html:style(position: static !important; overflow: auto !important; width: auto !important;)
+! #macaron_cookie_box /.cookie_wrap
+hoteldesartssaigon.com###macaron_cookie_box
+hoteldesartssaigon.com##body,html:style(overflow: auto !important; position: initial !important;)
+! landshut.de
+landshut.de##.main_self_overlay_cookie
+landshut.de##body,html:style(overflow: auto !important; position: initial !important;)
+! msgforbanking.de
+msgforbanking.de###jt-cookies-modal
+msgforbanking.de##body,html:style(overflow: auto !important; position: initial !important;)
+! groupeonepoint.com
+groupeonepoint.com##.js-cookies-container
+groupeonepoint.com##+js(rc, noScroll, , stay)
+! edpsciences.org
+edpsciences.org##+js(rc, cookie_notification, , stay)
+edpsciences.org##.mobile
+! seriesmania.com
+seriesmania.com##.popin-overlay
+seriesmania.com##body,html:style(overflow: auto !important; position: initial !important;)
+! clickskeks.at
+clickskeks.at##.ccm-root
+! bdl.leasingverband.de
+leasingverband.de##.cookie-note-opt-in
+leasingverband.de##body,html:style(overflow: auto !important; position: initial !important;)
+! nuc.edu
+nuc.edu##.wow-modal-overlay
+nuc.edu##html:style(overflow: auto !important; position: initial !important;)
+! arcane.no
+arcane.no##.index-module_overlay__dQcm5
+arcane.no##body,html:style(overflow: auto !important; position: initial !important;)
+! lifepointspanel.com
+lifepointspanel.com###cookie-modal-box
+lifepointspanel.com##.modal-backdrop
+lifepointspanel.com##body:style(overflow: auto !important; position: initial !important;)
+! happiesthealth.com
+happiesthealth.com##.dialog-lightbox-widget
+happiesthealth.com##body,html:style(overflow: auto !important; position: initial !important;)
+! mibe.de
+mibe.de###layer-wrapper
+mibe.de##+js(rc, layerActive, , stay)
+! 24helmets
+24helmets.co.uk,koliro.de,24helmets.de##.js--overlay
+24helmets.co.uk,koliro.de,24helmets.de###shpr-cookie-favour-consent-manager
+24helmets.co.uk,koliro.de,24helmets.de##body,html:style(overflow: auto !important; position: initial !important;)
+! bemmaisseguro.com
+bemmaisseguro.com##.all-terms
+bemmaisseguro.com##+js(rc, blocked-body, , stay)
+! taxfix.de
+taxfix.de###ccb-container
+taxfix.de##.dialog-type-lightbox
+taxfix.de##body:style(overflow: auto !important; position: initial !important;)
+! taxinstitute.ie
+taxinstitute.ie##.modal-cookie-policy
+taxinstitute.ie##html,body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! finnair.com
+finnair.com##fin-cookie-policy
+finnair.com##html:style(position: static !important; overflow: auto !important; width: auto !important;)
+! eurofirms.com
+selectionbyeurofirms.com,eurofirms.com##eui-cookie-acceptance-manager
+selectionbyeurofirms.com,eurofirms.com##body,html:style(overflow: auto !important; position: initial !important;)
+! conso.ro
+conso.ro##[class*="CookieConsent_"]
+conso.ro##html:style(overflow: auto !important)
+! *CookieConsent
+get-in-it.de##div[class*="CookieConsent"]
+get-in-it.de##body,html:style(overflow: auto !important; position: initial !important;)
+! tempcover.com
+tempcover.com###CookieConsentFullscreenWrapper
+tempcover.com##body,html:style(overflow: auto !important; position: initial !important;)
+! johnlewis.com
+johnlewis.com##.overlay-25Hoo
+johnlewis.com##html:style(overflow: auto !important; position: initial !important;)
+! easyparts.
+easyparts.com,easyparts.fr,easyparts-recambios.es,easyparts.fi,easyparts.nl,easyparts-rollerteile.de###cover
+easyparts.com,easyparts.fr,easyparts-recambios.es,easyparts.fi,easyparts.nl,easyparts-rollerteile.de###div_popup_cookies
+easyparts.com,easyparts.fr,easyparts-recambios.es,easyparts.fi,easyparts.nl,easyparts-rollerteile.de##body:style(overflow: auto !important; position: initial !important;)
+! correos.es
+correos.es##.sc-correos-cdk-cookies-module-h
+correos.es##.cmp-experiencefragment--cookies
+correos.es##body:style(overflow: auto !important; position: initial !important;)
+! guildford.gov.uk
+guildford.gov.uk###cookie-consent-prompt
+guildford.gov.uk##body:style(overflow: auto !important; position: initial !important;)
+! ebz-business-school.de
+ebz-business-school.de##.nf-procookie-overlay
+ebz-business-school.de##body,html:style(overflow: auto !important; position: initial !important;)
+! scheidegger.nl
+scheidegger.nl##.c-disclaimer
+scheidegger.nl##+js(rc, has-no-scroll, , stay)
+! takko.com
+takko.com##.cookie-policy-box-overlay
+takko.com##body,html:style(overflow: auto !important; position: initial !important;)
+! start-nrw.de
+start-nrw.de##.pvCookieOptIn
+start-nrw.de##body,html:style(overflow: auto !important; position: initial !important;)
+! jugend-praesentiert.de
+jugend-praesentiert.de##.modal
+jugend-praesentiert.de##+js(rc, messages-active, , stay)
+! markushaenni.com
+markushaenni.com##.incms-dpbanner
+markushaenni.com##body,html:style(overflow: auto !important; position: initial !important;)
+! opmaatzagen.nl
+tatararazors.com##.z-50.left-0.w-full.fixed
+tatararazors.com##.duration-700.transition-all.flex.bottom-0.fixed
+opmaatzagen.nl##.bottom-0.fixed
+tatararazors.com,opmaatzagen.nl##body,html:style(overflow: auto !important; position: initial !important;)
+! otelo.de
+otelo.de##.Lightbox
+otelo.de##body,html:style(overflow: auto !important; position: initial !important;)
+! sklepy-odido.pl
+sklepy-odido.pl##.layout-mask-dark
+sklepy-odido.pl##.consent-window
+sklepy-odido.pl##body,html:style(overflow: auto !important; position: initial !important;)
+! l-bank.de
+l-bank.de###bmLayerCookies
+l-bank.de##body,html:style(overflow: auto !important; position: initial !important;)
+! be.parkindigo.com/nl/
+parkindigo.com##.modal-dropdown
+parkindigo.com##body,html:style(overflow: auto !important; position: initial !important;)
+! leetchi.com
+leetchi.com##.LtCookiesModal
+leetchi.com##body,html:style(overflow: auto !important; position: initial !important;)
+! mazda.com.tr
+mazda.com.tr##.cookie-panel-container-2DmDm
+mazda.com.tr##body:style(overflow: auto !important; position: initial !important;)
+! ouderenfonds.nl
+ouderenfonds.nl##.c-modal
+ouderenfonds.nl##body,html:style(overflow: auto !important; position: initial !important;)
+!! .consent-background
+inwx.com,inwx.de,inwx.es,inwx.ch,inwx.at##.consent-background
+inwx.com,inwx.de,inwx.es,inwx.ch,inwx.at##body,html:style(overflow: auto !important; position: initial !important;)
+! uniqa.at
+uniqa.at##.tingle-modal
+uniqa.at##body,html:style(overflow: auto !important; position: initial !important;)
+! allegro.pl
+allegro.cz,allegro.pl,allegrolokalnie.pl###opbox-gdpr-consents-modal
+! stiwa.com
+stiwa.com###siwa-cookiebar
+stiwa.com##.modal-backdrop
+stiwa.com##body,html:style(overflow: auto !important; position: initial !important;)
+! lennar.com
+lennar.com##.MiniPanel_overlay__G9Y2c
+lennar.com##.CookieNoticeUS_miniPanel__2Mh5P
+lennar.com##body,html:style(overflow: auto !important; position: initial !important;)
+! hotelscombined
+hotelscombined.se,hotelscombined.gr,swoodoo.com##.YSUE
+hotelscombined.co.kr###HO_P
+hotels.biyi.cn,hotelscombined.se,hotelscombined.gr,hotelscombined.co.kr,swoodoo.com##body,html:style(overflow: auto !important; position: initial !important;)
+hotels.biyi.cn,hotelscombined.co.kr##.R9-Overlay
+! vaillant
+vaillant.de,vaillant.ba,vaillant.at,vaillant.be,vaillant.co.uk,vaillant.com,vaillant.com.ro,vaillant.cz,vaillant.de,vaillant.dk,vaillant.es,vaillant.fi,vaillant.fr,vaillant.hr,vaillant.hu,vaillant.info,vaillant.it,vaillant.nl,vaillant.no,vaillant.pl,vaillant.rs,vaillant.se,vaillant.si,vaillant.sk,vaillant.ua##.modal--theme-default
+vaillant.de,vaillant.ba,vaillant.at,vaillant.be,vaillant.co.uk,vaillant.com,vaillant.com.ro,vaillant.cz,vaillant.de,vaillant.dk,vaillant.es,vaillant.fi,vaillant.fr,vaillant.hr,vaillant.hu,vaillant.info,vaillant.it,vaillant.nl,vaillant.no,vaillant.pl,vaillant.rs,vaillant.se,vaillant.si,vaillant.sk,vaillant.ua##.cookiewarning:not(body):not(html)
+vaillant.de,vaillant.ba,vaillant.at,vaillant.be,vaillant.co.uk,vaillant.com,vaillant.com.ro,vaillant.cz,vaillant.de,vaillant.dk,vaillant.es,vaillant.fi,vaillant.fr,vaillant.hr,vaillant.hu,vaillant.info,vaillant.it,vaillant.nl,vaillant.no,vaillant.pl,vaillant.rs,vaillant.se,vaillant.si,vaillant.sk,vaillant.ua##body,html:style(overflow: auto !important; position: initial !important;)
+! cn.momondo.com
+cn.momondo.com##.R9-Overlay
+cn.momondo.com##body,html:style(overflow: auto !important; position: initial !important;)
+! postbank.de
+postbank.de##.cmpboxBG
+postbank.de##body,html:style(overflow: auto !important; position: initial !important;)
+! ages.at
+ages.at,ubook.at###supi
+ages.at,ubook.at##body,html:style(position: static !important; overflow: auto !important; width: auto !important;)
+! kissnofrog.com
+kissnofrog.com##.mdl-cookie-disclaimer-layer
+kissnofrog.com##.nt-cc
+kissnofrog.com##html:style(position: static !important; overflow: auto !important; width: auto !important;)
+! 21vek.by
+21vek.by###modal-cookie
+21vek.by##body,html:style(position: static !important; overflow: auto !important; width: auto !important;)
+! toujeo.com
+toujeo.com###modal-cookie-modal
+toujeo.com##.backdrop-filter
+toujeo.com##html,body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! insound.de
+insound.de##.js--overlay
+insound.de##.sizing--content
+insound.de##body,html:style(overflow: auto !important; position: initial !important;)
+! leslipfrancais.fr
+leslipfrancais.fr###nq_cnilbanner_container
+leslipfrancais.fr##+js(rc, no-scroll, body, stay)
+! phoenix.de
+phoenix.de##.ng-scope:style(filter: none !important;opacity:1 !important;pointer-events:auto !important)
+phoenix.de##+js(rc, blured, , stay)
+phoenix.de##.ps-outer
+! strato
+strato.es,strato.se,strato.fr,strato-hosting.co.uk,strato.de,strato.nl##.consent__wrapper
+strato.se,strato.de##+js(rc, noscroll, body, stay)
+strato.es,strato.fr,strato-hosting.co.uk,strato.nl##body,html:style(overflow: auto !important; position: initial !important;)
+! mishcon.com
+mishcon.com##+js(rc, has-overlay, , stay)
+mishcon.com##body:style(overflow: auto !important; position: initial !important;)
+! coolblue
+coolblue.nl,coolblue.de,coolblue.be##.modal-box
+coolblue.nl,coolblue.de,coolblue.be##body,html:style(overflow: auto !important; position: initial !important;)
+! metzler-stiftung.de
+metzler-stiftung.de##.cookieConfig
+metzler-stiftung.de##body,html:style(overflow: auto !important; position: initial !important;)
+! lightbox--cookie-consent
+bremischevb.de,meinebank.de,vb-rb.de,gladbacher-bank.de,nordthueringer-volksbank.de,bodenseebank.de,rb-oberaudorf.de,volksbank-trossingen.de,owl-immobilien.de,volksbank-backnang.de,volksbank-international.de,raiba-westhausen.de,vr-nopf.cz,vrbankimmobilien.de,cvw-privatbank-ag.de,rb-denzlingen-sexau.de,rv-banken.de,volksbank-remseck.de,raiba-gr.de,vrb-spangenberg.de,rb-berghuelen.de,vb-lauterecken.de,rb-sondelfingen.de,voba-deisslingen.de,saechsischer-gewinnsparverein.de,rb-hardt-bruhrain.de,volksbank-daaden.de,dervolksbanker.de,volksbank-kirnau.de,skbwitten.de,raiba-ndwa.de,volksbank-mittleres-erzgebirge.de,rb-eching.de,volksbank-aktiv.de,vbsuedemsland.de,voba-moeckmuehl.de,volksbank-freiburg.de,vbleos.de,meine-rvb.de,aachener-bank.de,muenchner-bank.de,volksbank-dh.de,volksbankeg.de,sparda-bank-hamburg.de,sparda-sw.de,volksbank-thueringen-mitte.de,vrbankeg.de,bernhauser-bank.de,vvrbank-krp.de,vvr-bank.de,vb-mittelhessen.de,vr-bayernmitte.de,vobadhk.de,rheingauer-volksbank.de,dovoba.de,vr-dachau.de##.darken-layer
+bremischevb.de,meinebank.de,vb-rb.de,gladbacher-bank.de,nordthueringer-volksbank.de,bodenseebank.de,rb-oberaudorf.de,volksbank-trossingen.de,owl-immobilien.de,volksbank-backnang.de,volksbank-international.de,raiba-westhausen.de,vr-nopf.cz,vrbankimmobilien.de,cvw-privatbank-ag.de,rb-denzlingen-sexau.de,rv-banken.de,volksbank-remseck.de,raiba-gr.de,vrb-spangenberg.de,rb-berghuelen.de,vb-lauterecken.de,rb-sondelfingen.de,voba-deisslingen.de,saechsischer-gewinnsparverein.de,rb-hardt-bruhrain.de,volksbank-daaden.de,dervolksbanker.de,volksbank-kirnau.de,skbwitten.de,raiba-ndwa.de,volksbank-mittleres-erzgebirge.de,rb-eching.de,volksbank-aktiv.de,vbsuedemsland.de,voba-moeckmuehl.de,volksbank-freiburg.de,vbleos.de,meine-rvb.de,aachener-bank.de,muenchner-bank.de,volksbank-dh.de,volksbankeg.de,sparda-bank-hamburg.de,sparda-sw.de,volksbank-thueringen-mitte.de,vrbankeg.de,bernhauser-bank.de,vvrbank-krp.de,vvr-bank.de,vb-mittelhessen.de,vr-bayernmitte.de,vobadhk.de,rheingauer-volksbank.de,dovoba.de,vr-dachau.de##+js(rc, cookie-consent-is-active, body, stay)
+bremischevb.de,meinebank.de,vb-rb.de,gladbacher-bank.de,nordthueringer-volksbank.de,bodenseebank.de,rb-oberaudorf.de,volksbank-trossingen.de,owl-immobilien.de,volksbank-backnang.de,volksbank-international.de,raiba-westhausen.de,vr-nopf.cz,vrbankimmobilien.de,cvw-privatbank-ag.de,rb-denzlingen-sexau.de,rv-banken.de,volksbank-remseck.de,raiba-gr.de,vrb-spangenberg.de,rb-berghuelen.de,vb-lauterecken.de,rb-sondelfingen.de,voba-deisslingen.de,saechsischer-gewinnsparverein.de,rb-hardt-bruhrain.de,volksbank-daaden.de,dervolksbanker.de,volksbank-kirnau.de,skbwitten.de,raiba-ndwa.de,volksbank-mittleres-erzgebirge.de,rb-eching.de,volksbank-aktiv.de,vbsuedemsland.de,voba-moeckmuehl.de,volksbank-freiburg.de,vbleos.de,meine-rvb.de,aachener-bank.de,muenchner-bank.de,volksbank-dh.de,volksbankeg.de,sparda-bank-hamburg.de,sparda-sw.de,volksbank-thueringen-mitte.de,vrbankeg.de,bernhauser-bank.de,vvrbank-krp.de,vvr-bank.de,vb-mittelhessen.de,vr-bayernmitte.de,vobadhk.de,rheingauer-volksbank.de,dovoba.de,vr-dachau.de##+js(rc, no-scroll, body, stay)
+!! .TraminoConsent
+zipfelbund.de,kueren.de,landhaus-thaumiller.de,schraudolf-oberstdorf.de,art-harder.de,ahrtal-klinik.de,kornau.de,bs-landschaftsarchitekten.de,reifenservice-oberstdorf.de,steinbockhuette.de,baldauf-oberstdorf.de,gaestehaus-schlegel.de,oberstdorf-buchen.de,fewo-heides-haus.de,lingg-oberstdorf.de,hoermann-kleinwalsertal.de,marktbaehnle.de,ferienwohnungen-rotzler.de,erholung-oberstdorf.de,dach-bau.info,landurlaub-allgaeu.de,ski-light.de,alte-sennerei.com,haus-bergbluemle.de,golfschwung.com,gasthof-riefenkopf.de,buehler-segelfreunde.de,neumann-grafik.de,breitachklamm.com,oberstdorf.de,ok-bergbahnen.com##.TraminoConsent
+zipfelbund.de,kueren.de,landhaus-thaumiller.de,schraudolf-oberstdorf.de,art-harder.de,ahrtal-klinik.de,kornau.de,bs-landschaftsarchitekten.de,reifenservice-oberstdorf.de,steinbockhuette.de,baldauf-oberstdorf.de,gaestehaus-schlegel.de,oberstdorf-buchen.de,fewo-heides-haus.de,lingg-oberstdorf.de,hoermann-kleinwalsertal.de,marktbaehnle.de,ferienwohnungen-rotzler.de,erholung-oberstdorf.de,dach-bau.info,landurlaub-allgaeu.de,ski-light.de,alte-sennerei.com,haus-bergbluemle.de,golfschwung.com,gasthof-riefenkopf.de,buehler-segelfreunde.de,neumann-grafik.de,breitachklamm.com,oberstdorf.de,ok-bergbahnen.com##body,html:style(overflow: auto !important; position: initial !important;)
+! elavon
+elavon.dk,elavon.no,elavon.se,elavon.de##body,html:style(overflow: auto !important; position: initial !important;)
+! pfleiderer.com
+pfleiderer.com##.overlay
+pfleiderer.com##.cc--banner
+pfleiderer.com##body,html:style(overflow: auto !important; position: initial !important;)
+! ville-cesson.fr
+ville-cesson.fr###myModalCookieConsent
+ville-cesson.fr##body:style(overflow: auto !important; position: initial !important;)
+! refunder.pl
+refunder.pl,refunder.se##.v--modal-overlay
+refunder.pl,refunder.se##body,html:style(overflow: auto !important; position: initial !important;)
+! krav-maga-online.de
+krav-maga-online.de##.v--modal-background-click
+krav-maga-online.de##.v--modal-overlay
+krav-maga-online.de##body,html:style(overflow: auto !important; position: initial !important;)
+! abrahue.org.br
+abrahue.org.br###LGPD
+abrahue.org.br##body,html:style(overflow: auto !important; position: initial !important;)
+! lekarnalemon.cz
+lekarnalemon.cz##.modal
+lekarnalemon.cz##.modal-backdrop
+! kitakerjaremote.com
+kitakerjaremote.com##.wpr-popup-open
+! wideroe.no
+wideroe.no##.cookie-modal-wrapper
+wideroe.no##.modal-backdrop
+wideroe.no##body,html:style(overflow: auto !important; position: initial !important;)
+! rsag.de
+rsag.de##.tx-ppw-cookie
+rsag.de##body,html:style(overflow: auto !important; position: initial !important;)
+! kikbuild.co.uk
+kikbuild.co.uk##.fade
+kikbuild.co.uk##body,html:style(overflow: auto !important; position: initial !important;)
+! calameo.com
+calameo.com,airbaltic.com##.cookie-alert
+calameo.com,airbaltic.com##body,html:style(overflow: auto !important; position: initial !important;)
+! rwe
+rwe.com,view.group.rwe##.cb
+rwe.com,view.group.rwe##body,html:style(height: auto !important; overflow: auto !important)
+! sanareva.pt
+sanareva.co.uk,sanareva.es,sanareva.it,sanareva.pt,atida.fr###cmpt_customer--cookie
+sanareva.co.uk,sanareva.es,sanareva.it,sanareva.pt,atida.fr##body,html:style(overflow: auto !important; position: initial !important;)
+! roschier.com
+roschier.com##.c-app-overlay
+roschier.com##body,html:style(overflow: auto !important; position: initial !important;)
+! planningportal.co.uk
+planningportal.co.uk##.tqc-modal__content-container
+planningportal.co.uk##.tqc-fade
+planningportal.co.uk##body:style(height: auto !important; overflow: auto !important)
+! huss-licht-ton.de
+huss-licht-ton.de###huss-modal
+huss-licht-ton.de##body,html:style(height: auto !important; overflow: auto !important)
+! zlavomat.sk
+zlavomat.sk##.message-overlay--cookie
+zlavomat.sk##body,html:style(overflow: auto !important; position: initial !important;)
+! lg.com
+lg.com##.dimmed
+lg.com##body:style(overflow: auto !important; position: initial !important;)
+! kupkolo.cz
+kupkolo.cz,dilynakotle.cz,xm.sk##.focus-cookiebara
+kupkolo.cz,dilynakotle.cz,xm.sk##body:style(overflow: auto !important; position: initial !important;)
+! auto.de
+auto.de##.modalWrapper
+auto.de##.css-8ndowl
+auto.de##html:style(overflow: auto !important; position: initial !important;)
+! contentkingapp.com
+contentkingapp.com###cookie-banner-general
+contentkingapp.com##.dialog-bg
+contentkingapp.com##body,html:style(overflow: auto !important; position: initial !important;)
+! cloudfoundry.org
+cloudfoundry.org###dark-fade
+cloudfoundry.org##body,html:style(height: auto !important; overflow: auto !important)
+! kubinaut.de
+kubinaut.de##hylo-cookie-banner
+kubinaut.de##.backdrop-no-tappable
+kubinaut.de##.hylo-cookie-banner-general
+kubinaut.de##body,html:style(overflow: auto !important; position: initial !important;)
+! BBVA
+bbva.es,bbvauk.com,bbva.be,bbva.fr,bbva.it,bbva.pt##+js(rc, cookiesgdpr__scroll, , stay)
+bbva.es,bbvauk.com,bbva.be,bbva.fr,bbva.it,bbva.pt##+js(nosiif, scroll)
+bbva.es,bbvauk.com,bbva.be,bbva.fr,bbva.it,bbva.pt##.cookiesgdpr
+! Czech overlays
+pivovarium.cz,arco-feed.cz,dajamatova.cz,vestax.net,larok.cz,egrus.cz,omnibooks.cz,dolin.eu,ispop.info,sfe.cz,kartum.cz,truhlarstvinavratil.cz,dja.cz,zszitomirska.info,jirislezak.cz,sirenipismasvateho.cz,mobilservis.sk,domaciobuv.com,mastrs.cz,thkadan.cz,zbrane-slany.cz,envirodesign.eu,bodysalon.cz##.blocker-cookies
+satvamed.cz,radekkrejci.cz,kuchyne-halas.cz,iwabijoux.cz,doprava-usti.cz,videopark.cz,ab-andrys.cz,chemicke-kotvy.cz,zshercikova.cz,pilous.hu,aljaoptik.cz,webkamery.online,berghof-systems.cz,whippets-dog.cz,ural.cz,mirdacars.cz,icmjh.cz,penzionudvojice.cz,chorvatsko.org,sprtec.info##.modal-backdrop
+pivovarium.cz,iwabijoux.cz,doprava-usti.cz,zshercikova.cz,pilous.hu,aljaoptik.cz,webkamery.online,arco-feed.cz,berghof-systems.cz,dolin.eu,ispop.info,sfe.cz,larok.cz,egrus.cz,omnibooks.cz,kartum.cz,truhlarstvinavratil.cz,sprtec.info,bodysalon.cz,zbrane-slany.cz,thkadan.cz,mastrs.cz,domaciobuv.com,chorvatsko.org,mobilservis.sk,sirenipismasvateho.cz,jirislezak.cz,penzionudvojice.cz,icmjh.cz,zszitomirska.info,ural.cz,whippets-dog.cz,mirdacars.cz,mirdacars.cz,vestax.net,dja.cz##body,html:style(overflow: auto !important; position: initial !important;)
+! audioboom.com
+audioboom.com###cookie-modal-12345
+audioboom.com##.modal-backdrop
+audioboom.com##body,html:style(overflow: auto !important; position: initial !important;)
+! envirodesign.eu
+envirodesign.eu##html:style(overflow: auto !important)
+! notaire.be/notaris.be
+notaire.be,notaris.be##html:style(overflow: auto !important; position: initial !important;)
+! .qc-cmp2-container
+joe.ie##.qc-cmp2-container
+joe.ie##body,html:style(overflow: auto !important; position: initial !important;)
+! umarex.com
+umarex.com##.disclaimer-bar
+umarex.com##body,html:style(overflow: auto !important; position: initial !important;)
+! biolib.cz
+biolib.cz##.consent-box__wrapper
+biolib.cz##body,html:style(overflow: auto !important; position: initial !important;)
+! smsparbank
+sparbankenikarlshamn.se,olandsbank.se,atvidabergsspb.se,avsparbank.se,alemssparbank.se,virserumssparbank.se,vimmerbysparbank.se,varbergssparbank.se,wwsparbank.se,vadstenasparbank.se,valdemarsvikssparbank.se,ulricehamnssparbank.se,tjorns-sparbank.se,tidaholms-sparbank.se,tjustbanken.se,sodrahestrasparbank.se,sodradalarnassparbank.se,sormlandssparbank.se,sparbankenvm.se,sparbankensjuharad.se,sparbankengoinge.se,sparbankengotland.se,sparbankeneken.se,sparbankenalingsas.se,sparbankenboken.se,snapphanebygdenssparbank.se,skurupssparbank.se,sidensjosparbank.se,salasparbank.se,roslagenssparbank.se,orustsparbank.se,norrbarke-sparbank.se,mjobackssparbank.se,markarydssparbank.se,ltvsparbank.se,leksandssparbank.se,lekebergssparbank.se,laholmssparbank.se,kindaydresparbank.se,ivetoftasparbank.se,sparbankennord.se,sparbankentanum.se,sparbankentranemo.se,sparbankenskane.se,sparbankenskaraborg.se,sparbankenrekarne.se,sparbankenlidkoping.se,sparbankenenkoping.se,hogsbysparbank.se,sparbanken.se,swedbank.lv,swedbank.cn,swedbank.fi,swedbank.se,swedbank.no,swedbank.dk,haradssparbanken.se,halsinglandssparbank.se,fryksdalenssparbank.se,ekebysparbank.se,dalsbank.se,bjursassparbank.se,tidaholms-sparbank.se,smsparbank.se,sparbankenvm.se,falkenbergssparbank.se##body,html:style(overflow: auto !important; position: initial !important;)
+! umea.se
+halmstad.se,sh.se,kungahuset.se,krokom.se,lansstyrelsen.se,kungsbacka.se,itsam.se,jonkoping.se,boras.se,vakin.se,umea.se,ornskoldsvik.se,ljusdal.se,ale.se,mullsjo.se,rattvik.se,statensmedierad.se,lerum.se,sandviken.se,lindesberg.se,nynashamn.se,ovikshem.se,emmaboda.se,sandnet.se,bjuv.se,fagersta.se,svenljunga.se,hogbobruk.se,mfof.se,vaxholm.se,vattenmyndigheterna.se,gnosjo.se,larcenter.nu,theglassfactory.se,borasstadsteater.se,sverigesdepabibliotekochlanecentral.se,odenbadet.se,sandbackapark.se,offentligarummet.se,gotaalvvvf.org,findit-solutions.se,sandvikenhus.se,sandvikenenergi.se,falkoping.se,nordanstig.se,tidaholm.se,bessemerskolan.se,ornskoldsviksgymnasium.com,soleil.se,highcoastartvalley.com,deermeadow.se,mfulvon.se,ekehagen.se,ungutveckling.com,varldsklass.se,bvvf.se,emmabodaenergi.se,highcoastartvalley.se,innovativsanering.se,ornskoldsviksgymnasium.se,ovikparkering.se,skolriksdag.se,smskaraborg.se,örnsköldsviksgymnasium.se,mojligheternashusab.se,weum.se,ungifalkoping.se,gislaved.nu,umea400.se,studerainorrbotten.se,tidningencurie.se##.sv-cookie-consent-modal
+halmstad.se,sh.se,kungahuset.se,krokom.se,lansstyrelsen.se,kungsbacka.se,itsam.se,jonkoping.se,boras.se,vakin.se,umea.se,ornskoldsvik.se,ljusdal.se,ale.se,mullsjo.se,rattvik.se,statensmedierad.se,lerum.se,sandviken.se,lindesberg.se,nynashamn.se,ovikshem.se,emmaboda.se,sandnet.se,bjuv.se,fagersta.se,svenljunga.se,hogbobruk.se,mfof.se,vaxholm.se,vattenmyndigheterna.se,gnosjo.se,larcenter.nu,theglassfactory.se,borasstadsteater.se,sverigesdepabibliotekochlanecentral.se,odenbadet.se,sandbackapark.se,offentligarummet.se,gotaalvvvf.org,findit-solutions.se,sandvikenhus.se,sandvikenenergi.se,falkoping.se,nordanstig.se,tidaholm.se,bessemerskolan.se,ornskoldsviksgymnasium.com,soleil.se,highcoastartvalley.com,deermeadow.se,mfulvon.se,ekehagen.se,ungutveckling.com,varldsklass.se,bvvf.se,emmabodaenergi.se,highcoastartvalley.se,innovativsanering.se,ornskoldsviksgymnasium.se,ovikparkering.se,skolriksdag.se,smskaraborg.se,örnsköldsviksgymnasium.se,mojligheternashusab.se,weum.se,ungifalkoping.se,gislaved.nu,umea400.se,studerainorrbotten.se,tidningencurie.se##.env-modal-dialog__backdrop
+halmstad.se,sh.se,kungahuset.se,krokom.se,lansstyrelsen.se,kungsbacka.se,itsam.se,jonkoping.se,boras.se,vakin.se,umea.se,ornskoldsvik.se,ljusdal.se,ale.se,mullsjo.se,rattvik.se,statensmedierad.se,lerum.se,sandviken.se,lindesberg.se,nynashamn.se,ovikshem.se,emmaboda.se,sandnet.se,bjuv.se,fagersta.se,svenljunga.se,hogbobruk.se,mfof.se,vaxholm.se,vattenmyndigheterna.se,gnosjo.se,larcenter.nu,theglassfactory.se,borasstadsteater.se,sverigesdepabibliotekochlanecentral.se,odenbadet.se,sandbackapark.se,offentligarummet.se,gotaalvvvf.org,findit-solutions.se,sandvikenhus.se,sandvikenenergi.se,falkoping.se,nordanstig.se,tidaholm.se,bessemerskolan.se,ornskoldsviksgymnasium.com,soleil.se,highcoastartvalley.com,deermeadow.se,mfulvon.se,ekehagen.se,ungutveckling.com,varldsklass.se,bvvf.se,emmabodaenergi.se,highcoastartvalley.se,innovativsanering.se,ornskoldsviksgymnasium.se,ovikparkering.se,skolriksdag.se,smskaraborg.se,örnsköldsviksgymnasium.se,mojligheternashusab.se,weum.se,ungifalkoping.se,gislaved.nu,umea400.se,studerainorrbotten.se##body,html:style(overflow: auto !important; position: initial !important;)
+!! .fancybox__container
+kovopolotovary.cz##.fancybox__container
+kovopolotovary.cz##body,html:style(overflow: auto !important; position: initial !important;)
+!! cookiesplus-modal / .fancybox-overlay
+nacidoparaserciclista.com,bonosbienestar.com,hennamorena.com,fiamtorino.eu,sinpuzzle.com##.cookiesplus-modal
+nacidoparaserciclista.com,bonosbienestar.com,hennamorena.com,fiamtorino.eu,sinpuzzle.com##.fancybox-overlay
+nacidoparaserciclista.com,bonosbienestar.com,hennamorena.com,fiamtorino.eu,sinpuzzle.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! cookiesplus-modal / .modal-backdrop
+veobio.es,40grados.net,tiendafvf.org,tiendafcarreras.org,ecoleduthe.com,tiendadeacuariofilia.es,biterswit.com,bolilleando.es,eisl.at,masfiesta.es,poryparami.es,puntatacco.it,ropitadenenes.com,sudeclope.fr,alfa-remani.com,lavaritamagica.com,latiendaclasica.com,midland.es,tiendagreenpeace.es##.cookiesplus-modal
+veobio.es,40grados.net,tiendafvf.org,tiendafcarreras.org,ecoleduthe.com,tiendadeacuariofilia.es,biterswit.com,bolilleando.es,eisl.at,masfiesta.es,poryparami.es,puntatacco.it,ropitadenenes.com,sudeclope.fr,alfa-remani.com,lavaritamagica.com,latiendaclasica.com,midland.es,tiendagreenpeace.es##.modal-backdrop
+veobio.es,40grados.net,tiendafvf.org,tiendafcarreras.org,ecoleduthe.com,tiendadeacuariofilia.es,biterswit.com,bolilleando.es,eisl.at,masfiesta.es,poryparami.es,puntatacco.it,ropitadenenes.com,sudeclope.fr,alfa-remani.com,lavaritamagica.com,latiendaclasica.com,midland.es,tiendagreenpeace.es##body,html:style(overflow: auto !important; position: initial !important;)
+!! .gdpr-modal
+lhsystems.com##.gdpr-modal
+lhsystems.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! .iubenda-cs-visible
+tomshw.it,brutkasten.com,rockol.it##.iubenda-cs-visible
+tomshw.it,brutkasten.com,rockol.it##body,html:style(overflow: auto !important; position: initial !important;)
+!! .vfm--inset
+lovebookonline.com,varma.fi##.vfm--inset
+lovebookonline.com,varma.fi##body,html:style(overflow: auto !important; position: initial !important;)
+! lekarenvkocke.sk
+lekarenvkocke.sk##.modal
+lekarenvkocke.sk##.modal-backdrop
+! limogeshabitat.fr (using #cookieModal instead of modal to prevent fp)
+limogeshabitat.fr##.modal-backdrop
+limogeshabitat.fr###cookieModal
+limogeshabitat.fr##body,html:style(overflow: auto !important; position: initial !important;)
+! kanalsportowy.pl
+kanalsportowy.pl##.app-cmp
+kanalsportowy.pl##body:style(overflow: auto !important; position: initial !important;)
+! recallinformatica.com.br
+recallinformatica.com.br##body,html:style(overflow: auto !important; position: initial !important;)
+! montpellierhandball.com
+montpellierhandball.com###cookies-messages-wrapper
+montpellierhandball.com##.fancybox-overlay
+montpellierhandball.com##body,html:style(overflow: auto !important; position: initial !important;)
+!! cookie-consent-cover / .cookie-consent-container
+amara.org##.cookie-consent-container
+amara.org##.cookie-consent-cover
+amara.org##body,html:style(overflow: auto !important; position: initial !important;)
+! zorgzaam010.nl
+zorgzaam010.nl###cookie-consent-container
+zorgzaam010.nl##body,html:style(overflow: auto !important; position: initial !important;)
+! cut.ac.cy
+cut.ac.cy###cookie-consent-modal
+cut.ac.cy##.modal-backdrop
+cut.ac.cy##body,html:style(overflow: auto !important; position: initial !important;)
+! guess.eu
+guess.eu##.js-footer-advanced-cookies-policy
+guess.eu##body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! readly.com
+readly.com##div[id^="CookieConsentDialog-react-"]
+! stoertebeker.com/stoertebeker-eph.com
+stoertebeker-brauquartier.com,stoertebeker.com,stoertebeker-eph.com###neusta-cookie-notice-modal
+stoertebeker-brauquartier.com,stoertebeker.com,stoertebeker-eph.com###overlay
+! okolobytu.cz
+okolobytu.cz##.rcb-banner
+okolobytu.cz##body,html:style(overflow: auto !important; position: initial !important;)
+! altenberg.de
+altenberg.de##.oax_modal_container
+altenberg.de##.oax_modal_bg
+altenberg.de##.oax_cookie_consent_modal
+altenberg.de##body,html:style(overflow: auto !important; position: initial !important;)
+! originalky.cz
+originalky.cz##.bs-dialog-overlay
+originalky.cz##.CookiesConfirmationView
+originalky.cz##body,html:style(overflow: auto !important; position: initial !important;)
+! tailorit.de
+tailorit.de##.pr-cookiemodal
+tailorit.de##body,html:style(overflow: auto !important; position: initial !important;)
+! enmca.eu
+enmca.eu###rgpd-overlay
+enmca.eu###rgpd-popin
+enmca.eu##body,html:style(overflow: auto !important; position: initial !important;)
+! arbeitsagentur.de
+arbeitsagentur.de##bahf-cookie-disclaimer-dpl3
+arbeitsagentur.de##bahf-cookie-disclaimer
+arbeitsagentur.de##.modal-backdrop
+! terre.tv
+terre.tv###modal-cmp
+terre.tv##.modal-backdrop
+terre.tv##body,html:style(overflow: auto !important; position: initial !important;)
+! emb-europe.com
+emb-europe.com###container-rgpd-fond
+emb-europe.com###container-rgpd
+emb-europe.com##body,html:style(overflow: auto !important; position: initial !important;)
+! novacad.fr
+novacad.fr###za_rgpd_modal
+novacad.fr##.modal-backdrop
+novacad.fr##body,html:style(overflow: auto !important; position: initial !important;)
+! conseil-national.medecin.fr
+||conseil-national.medecin.fr/ajax/cn-rgpd/
+conseil-national.medecin.fr###rgpd-overlay
+conseil-national.medecin.fr###rgpd-popin
+conseil-national.medecin.fr##body,html:style(overflow: auto !important; position: initial !important;)
+! schoolpetrov.ru
+schoolpetrov.ru##.confirm-cookie__wrapper
+schoolpetrov.ru##body,html:style(overflow: auto !important; position: initial !important;)
+! wentronic
+wentronic.com,wentronic.pl##.overlay-block
+! norwegianreward.com
+norwegianreward.com###modalDataConsent
+norwegianreward.com##body,html:style(overflow: auto !important; position: initial !important;)
+! eosc-eu.cloud.garr.it/aslbi.piemonte.it
+eosc-eu.cloud.garr.it##body:style(overflow: auto !important; position: initial !important;)
+aslbi.piemonte.it##body:style(overflow: auto !important; position: initial !important;)
+! loja.paulus.com.br
+loja.paulus.com.br##.vtex-modal-layout-0-x-modal--cookies-layout
+loja.paulus.com.br##body,html:style(overflow: auto !important; position: initial !important;)
+! neliosoftware.com
+neliosoftware.com##.nelio-cookie-modal
+neliosoftware.com##body,html:style(overflow: auto !important; position: initial !important;)
+! scitec.it
+scitec.it##body:style(overflow: auto !important; position: initial !important;)
+! peek-cloppenburg.de
+peek-cloppenburg.de,peek-cloppenburg.pl,peek-cloppenburg.at,peek-cloppenburg.nl##.cw-modal-overlay
+peek-cloppenburg.de,peek-cloppenburg.pl,peek-cloppenburg.at,peek-cloppenburg.nl##body:style(overflow: auto !important; position: initial !important;)
+! asklepios.com
+asklepios.com##.b-disclaimer
+asklepios.com##body,html:style(overflow: auto !important; position: initial !important;)
+! suntech.cz
+suntech.cz##.modal-popup
+suntech.cz##+js(rc, modal-show, , stay)
+! stockholmresilience.org
+stockholmresilience.org,ludvika.se,kammarkollegiet.se##.env-modal-dialog
+stockholmresilience.org,ludvika.se,kammarkollegiet.se##.env-modal-dialog__backdrop
+stockholmresilience.org,ludvika.se,kammarkollegiet.se##body:style(overflow: auto !important; position: initial !important;)
+! topsolid
+topsolid.com.tr,topsolid.ch,topsolid.es,topsolid.pt,topsolid.com,topsolid.de,topsolid.be,topsolid.it,topsolid.cz##body,html:style(overflow: auto !important; position: initial !important;)
+! cazenovecapital.com
+cazenovecapital.com###disclaimerModal
+cazenovecapital.com##.modal-backdrop
+cazenovecapital.com##body:style(overflow: auto !important; position: initial !important;)
+! vicampo.de
+vicampo.de##.overlay
+vicampo.de##.modal
+vicampo.de##html,body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! watt.sg
+watt.sg##.notification-bar
+watt.sg##body:style(overflow: auto !important; position: initial !important;)
+! allfunds.sg
+allfunds.sg##.afb-CookiesDark
+allfunds.sg##body:style(overflow: auto !important; position: initial !important;)
+! ing
+ing.jobs##.ui-widget-overlay
+! blome-uhren.de
+blome-uhren.de###juwCMP
+blome-uhren.de##body,html:style(height: auto !important; overflow: auto !important)
+! dolnimorava.cz
+dolnimorava.cz##.gc-Modal-body
+dolnimorava.cz##.gc-Modal-overlay
+dolnimorava.cz##body,html:style(height: auto !important; overflow: auto !important)
+! tannheimertal.com
+tannheimertal.com##.cc-window-backdrop
+tannheimertal.com##.cc-window
+tannheimertal.com##body,html:style(height: auto !important; overflow: auto !important)
+! officeprinciples.com
+officeprinciples.com##div.cookie-consent-banner
+officeprinciples.com###cookie-consent-banner
+officeprinciples.com##body,html:style(overflow: auto !important; position: initial !important;)
+! pricerunner
+pricerunner.com,pricerunner.dk,pricerunner.se###consent
+! statestreet.com
+statestreet.com###divCookieMaskLayer
+statestreet.com##body:style(overflow: auto !important; position: initial !important;)
+! artvertisement.de
+artvertisement.de###ccd-root
+artvertisement.de##body,html:style(overflow: auto !important; position: initial !important;)
+! sicherheitstraining24.de
+sicherheitstraining24.de##.up-modal
+sicherheitstraining24.de##body,html:style(overflow: auto !important; position: initial !important;)
+! tkb.ch
+tkb.ch##.cookie-banner-component
+tkb.ch##.modal-backdrop
+tkb.ch##body,html:style(overflow: auto !important; position: initial !important;)
+! uvex-safety
+uvex-group.com,uvex-safety.rs,uvex-safety.com.au,uvex-safety.be,uvex-safety.hr,uvex-safety.ee,uvex-safety.com,uvex-safety.co.id,uvex-safety.lv,uvex-safety.jp,uvex-safety.nl,uvex-safety.pt,uvex-safety.si,uvex-safety.at,uvex-safety.bg,uvex-safety.cz,uvex-safety.hu,uvex-safety.it,uvex-safety.lt,uvex-safety.com.my,uvex-safety.ro,uvex-safety.com.sg,uvex.co.za,uvex-safety.ch,uvex-safety.by,uvex-safety.se,uvex-heckel.fr,uvex-safety.in,uvex-safety.kz,uvex-safety.lu,uvex-safety.ae,uvex-safety.pl,uvex-safety.sk,uvex-safety.es,uvex-safety.com.tr,uvex-safety.uzd##uvex-cookie-banner
+uvex-group.com,uvex-safety.rs,uvex-safety.com.au,uvex-safety.be,uvex-safety.hr,uvex-safety.ee,uvex-safety.com,uvex-safety.co.id,uvex-safety.lv,uvex-safety.jp,uvex-safety.nl,uvex-safety.pt,uvex-safety.si,uvex-safety.at,uvex-safety.bg,uvex-safety.cz,uvex-safety.hu,uvex-safety.it,uvex-safety.lt,uvex-safety.com.my,uvex-safety.ro,uvex-safety.com.sg,uvex.co.za,uvex-safety.ch,uvex-safety.by,uvex-safety.se,uvex-heckel.fr,uvex-safety.in,uvex-safety.kz,uvex-safety.lu,uvex-safety.ae,uvex-safety.pl,uvex-safety.sk,uvex-safety.es,uvex-safety.com.tr,uvex-safety.uz##body,html:style(overflow: auto !important; position: initial !important;)
+!! #cookie-blackout-curtain
+theblueschronicles.com,vivamanchester.co.uk,icould.com###cookie-blackout-curtain
+!! #pandectes-banner
+schvarz.com,hairtalk.se###pandectes-banner
+schvarz.com,hairtalk.se##body,html:style(overflow: auto !important; position: initial !important;)
+! tk.mime.lv
+cesukoncertzale.lv,tk.mime.lv###mimeConsentCookieModal
+cesukoncertzale.lv,tk.mime.lv##body,html:style(overflow: auto !important; position: initial !important;)
+! beopen.lv
+beopen.lv###GDPR-modal
+beopen.lv##.modal-backdrop
+beopen.lv##body,html:style(overflow: auto !important; position: initial !important;)
+! lowrider.at
+lowrider.at###cookiehinweis_overlay
+! xsports.lv
+xsports.lv##.global-site-notice
+xsports.lv##*:style(opacity:1 !important;pointer-events:auto !important)
+! dodo.fr
+dodo.fr##*:style(opacity:1 !important;pointer-events:auto !important)
+! swal2-container consents
+anywhereesim.com##.swal2-container
+anywhereesim.com##body,html:style(overflow: auto !important; position: initial !important;)
+! womex.com
+womex.com###cookie-banner-modal
+womex.com##.modal-backdrop
+womex.com##body,html:style(overflow: auto !important; position: initial !important;)
+! leoni.com
+leoni.ro,leoni.com##privacy-settings
+! digikey
+digikey.co.za,digikey.cn,digikey.ee,digikey.at,digikey.be,digikey.bg,digikey.cz,digikey.dk,digikey.fi,digikey.fr,digikey.de,digikey.gr,digikey.hu,digikey.ie,digikey.it,digikey.lv,digikey.lt,digikey.lu,digikey.nl,digikey.no,digikey.pl,digikey.pt,digikey.ro,digikey.sk,digikey.si,digikey.es,digikey.se,digikey.ch,digikey.co.uk,digikey.co.il,digikey.com.mx,digikey.ca,digikey.com.br,digikey.co.nz,digikey.com.au,digikey.co.th,digikey.tw,digikey.kr,digikey.sg,digikey.ph,digikey.my,digikey.jp,digikey.in,digikey.hk,digikey.com##+js(rc, gdpr, , stay)
+! oem.ee
+oem.ee##.cookieModalComponent-modal
+oem.ee##.modal-backdrop
+oem.ee##body,html:style(overflow: auto !important; position: initial !important;)
+! publicholidays.ee
+publicholidays.ee###phg_cookies_modal
+publicholidays.ee##.reveal-overlay
+publicholidays.ee##body,html:style(overflow: auto !important; position: initial !important;)
+! collato.com
+collato.com##+js(set-session-storage-item, terms-and-policy-accepted, yes)
+collato.com##+js(set-session-storage-item, CookieBannerShown, yes)
+! swedbank.ee
+swedbank.ee###cookie-consent
+swedbank.ee##body,html:style(overflow: auto !important; position: initial !important;)
+! tavex.rs
+tavex.pl,tavex.ro,tavex.lv,tavex.fi,tavex.bg,tavex.hu,tavex.se,tavexbullion.co.uk,tavex.rs##.modaal-inline
+tavex.pl,tavex.ro,tavex.lv,tavex.fi,tavex.bg,tavex.hu,tavex.se,tavexbullion.co.uk,tavex.rs##.modaal-overlay
+tavex.pl,tavex.ro,tavex.lv,tavex.fi,tavex.bg,tavex.hu,tavex.se,tavexbullion.co.uk,tavex.rs##body,html:style(overflow: auto !important; position: initial !important;)
+! maxi.rs
+maxi.rs##.iVyhzP
+maxi.rs##.kezQbY
+maxi.rs##body,html:style(overflow: auto !important; position: initial !important;)
+! eurosupps.nl
+eurosupps.nl##.ptchr-gdprcookiecontainer
+eurosupps.nl##+js(remove-class, cookieopened, body, stay)
+! safedeliveries.nl
+safedeliveries.nl###cookiewall
+safedeliveries.nl##body,html:style(overflow: auto !important; position: initial !important;)
+! pikolinos.com
+pikolinos.com###blurBackground
+pikolinos.com##body,html:style(height: auto !important; overflow: auto !important)
+! dealabs mirrors
+chollometro.com,dealabs.com,hotukdeals.com,pepper.it,pepper.pl,preisjaeger.at,mydealz.de##+js(set-cookie, cookie_policy_agreement, 3)
+chollometro.com,dealabs.com,hotukdeals.com,pepper.it,pepper.pl,preisjaeger.at,mydealz.de##.popover--layout-fixed-bottomSheet
+chollometro.com,dealabs.com,hotukdeals.com,pepper.it,pepper.pl,preisjaeger.at,mydealz.de##.zIndex--modal.popover-cover
+chollometro.com,dealabs.com,hotukdeals.com,pepper.it,pepper.pl,preisjaeger.at,mydealz.de##body:style(overflow: auto !important;)
+! pathe.nl
+pathe.nl##+js(remove-class, cookiewall-active, body, stay)
+pathe.nl##body,html:style(overflow: auto !important; position: initial !important;)
+! etos.nl
+shopbuilder.co.nl,esportsclub.nl,etos.nl##body,html:style(overflow: auto !important; position: initial !important;)
+! allekringloopwinkels.nl
+allekringloopwinkels.nl##.cbar-overlay
+allekringloopwinkels.nl##.cbar-modal1
+allekringloopwinkels.nl##body,html:style(overflow: auto !important; position: initial !important;)
+! makelaarsland.nl
+makelaarsland.nl##.m-cookie-notice
+makelaarsland.nl##+js(remove-class, is-cookie-notice, body, stay)
+! bricklink.com
+bricklink.com##.cookie-notice
+bricklink.com##body,html:style(overflow: auto !important; position: initial !important;)
+! moteurnature.com
+moteurnature.com##.consentcontainer
+! bcc.nl
+bcc.nl###cookiewallmodal
+bcc.nl##.modal-backdrop
+bcc.nl##body,html:style(overflow: auto !important; position: initial !important;)
+! arla/milex
+arla.com,arlafoodsingredients.com,lurpak.com,arla.be,arlafoods.com.bd,arlafoods.ca,arla.cz,arla.com.cy,arlafoods.de,arlafoods.es,milex.com.do,arla.co.id,arla.it,arla.jp,arla.hu,arla.com.mt,arla.mx,arla.nl,arla.ng,arla.no,arla.ph,arla.pl,arla.com.sg,arla.fi,arla.tt,arlausa.com,arlafoods.gr,arla.ru,arla.co.il,arla.com.cn##body,html:style(overflow: auto !important; position: initial !important;)
+! candriam
+candriam.de,candriam.at,candriam.com,candriam.cl,candriam.ch,candriam.se,candriam.pt,candriam.no,candriam.lu,candriam.nl,candriam.it,candriam.ie,candriam.co.uk,candriam.fr,candriam.fi,candriam.sk,candriam.dk,candriam.es###cookie_disclaimer
+candriam.de,candriam.at,candriam.com,candriam.cl,candriam.ch,candriam.se,candriam.pt,candriam.no,candriam.lu,candriam.nl,candriam.it,candriam.ie,candriam.co.uk,candriam.fr,candriam.fi,candriam.sk,candriam.dk,candriam.es##.modal-backdrop
+candriam.de,candriam.at,candriam.com,candriam.cl,candriam.ch,candriam.se,candriam.pt,candriam.no,candriam.lu,candriam.nl,candriam.it,candriam.ie,candriam.co.uk,candriam.fr,candriam.fi,candriam.sk,candriam.dk,candriam.es##body,html:style(overflow: auto !important; position: initial !important;)
+! vestel.es
+vestel.es###cookieModuleModal
+vestel.es##.modal-backdrop
+vestel.es##body,html:style(overflow: auto !important; position: initial !important;)
+! bestinver.es
+bestinver.es##.bst-lightbox
+bestinver.es##body,html:style(overflow: auto !important; position: initial !important;)
+! pibank.es
+pibank.es###cookies-block
+pibank.es##body,html:style(overflow: auto !important; position: initial !important;)
+! danskebank
+nordania.dk,365direkte.no,danskebank.lv,danskebank.lt,danskebank.no,danskebank.fi,danskebank.dk,danskebank.com,danskebank.se,danskebank.co.uk,danskeci.com,danicapension.dk##.cookie-consent-banner-modal
+nordania.dk,365direkte.no,danskebank.lv,danskebank.lt,danskebank.no,danskebank.fi,danskebank.dk,danskebank.com,danskebank.se,danskebank.co.uk,danskeci.com,danicapension.dk##+js(rc, cookie-consent-banner-open, html, stay)
+! gewerbegebiete.de
+gewerbegebiete.de##.gg-cookie-blocker
+gewerbegebiete.de##html:style(overflow: auto !important; position: initial !important;)
+gewerbegebiete.de##+js(rc, modal-overlay, , stay)
+! calvinklein.*
+calvinklein.se,calvinklein.fi,calvinklein.sk,calvinklein.si,calvinklein.ch,calvinklein.ru,calvinklein.com,calvinklein.pt,calvinklein.pl,calvinklein.at,calvinklein.nl,calvinklein.hu,calvinklein.lu,calvinklein.lt,calvinklein.lv,calvinklein.it,calvinklein.ie,calvinklein.hr,calvinklein.fr,calvinklein.es,calvinklein.ee,calvinklein.de,calvinklein.dk,calvinklein.cz,calvinklein.bg,calvinklein.be,calvinklein.co.uk##.ck-modal--cookieModalMain
+! dehn
+dehn.es,dehn.fr,dehn.it,dehn.hu,desitek.dk,dehn.at,dehn.de##.flyout.cookie-layer
+dehn.es,dehn.fr,dehn.it,dehn.hu,desitek.dk,dehn.at,dehn.de##.dehn-cookieconsent-overlay
+dehn.es,dehn.fr,dehn.it,dehn.hu,desitek.dk,dehn.at,dehn.de##body,html:style(overflow: auto !important; position: initial !important;)
+! happyplates.com
+happyplates.com###happy-plates-modal
+happyplates.com##body:style(overflow: auto !important; position: initial !important;)
+! .darken
+icvs2023.conf.tuwien.ac.at##.darken
+icvs2023.conf.tuwien.ac.at##body,html:style(overflow: auto !important; position: initial !important;)
+!! #cookie-wall
+favi.sk,favi.hu,favi.hr,favi.it,favi.se,favi.co.uk,favi.ro,favi.pl,favi.cz###cookie-wall
+favi.sk,favi.hu,favi.hr,favi.it,favi.se,favi.co.uk,favi.ro,favi.pl,favi.cz##body,html:style(overflow: auto !important; position: initial !important;)
+!! .cookie-wall
+ansons.de##.cookie-wall
+ansons.de##.cw-modal-overlay
+ansons.de##body,html:style(overflow: auto !important; position: initial !important;)
+! bynco.com
+bynco.com##app-cookie-wall
+bynco.com##body,html:style(overflow: auto !important; position: initial !important;)
+! artemide.com
+artemide.com###amdCookieBanner
+artemide.com##.modal-backdrop
+artemide.com##body,html:style(overflow: auto !important; position: initial !important;)
+! mifcom
+mifcom.de,mifcom.ch##.scommerce-gdpr-backdrop
+mifcom.de,mifcom.ch##body,html:style(overflow: auto !important; position: initial !important;)
+! engelvoelkers.com
+engelvoelkers.com##.cookie-consent-dialog-container
+engelvoelkers.com##body,html:style(height: auto !important; overflow: auto !important)
+! adler-farbenmeister.com
+adler-colorshop.com,adler-farbenmeister.com##.look_cookieMenuOverlay
+adler-colorshop.com,adler-farbenmeister.com##body,html:style(overflow: auto !important; position: initial !important;)
+! gigamedia.net
+conectis.com,gigamedia.net##.cookie-perso
+conectis.com,gigamedia.net##body,html:style(overflow: auto !important; position: initial !important;)
+! cordia.fr
+francofa-eurodis.fr,cordia.fr###cookie_management_modal
+francofa-eurodis.fr,cordia.fr##.modal-backdrop
+francofa-eurodis.fr,cordia.fr##body,html:style(overflow: auto !important; position: initial !important;)
+! uvex-safety.co.uk
+uvex-safety.co.uk##uvex-cookie-banner
+uvex-safety.co.uk##body,html:style(overflow: auto !important; position: initial !important;)
+! vola.fr
+vola.fr###footer_fix
+vola.fr##body,html:style(overflow: auto !important; position: initial !important;)
+! aeroports-voyages.fr
+aeroports-voyages.fr###cookies-pane
+aeroports-voyages.fr##body,html:style(overflow: auto !important; position: initial !important;)
+! homap.fr
+homap.fr##.rgpdWarning
+homap.fr##body,html:style(overflow: auto !important; position: initial !important;)
+! sexeo.de
+sexeo.de##.onLoadModal
+sexeo.de##body,html:style(overflow: auto !important; position: initial !important;)
+! aelia.pl
+aelia.pl##.PrivacyModal
+aelia.pl##.show
+aelia.pl##body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! suince.es
+suince.es##.modal
+suince.es##.modal-backdrop
+suince.es##html:style(overflow: auto !important)
+! lafi.fr
+lafi.fr###popupifbk
+lafi.fr###popupif
+lafi.fr##body,html:style(overflow: auto !important; position: initial !important;)
+! erli.pl
+erli.pl##.IaWRa1h
+erli.pl##.BAHPp1y
+erli.pl##body,html:style(overflow: auto !important; position: initial !important;)
+! veikkaus.fi
+veikkaus.fi##.ModalContainer-module_modalContainer__38sVv
+veikkaus.fi##body:style(overflow: auto !important)
+! eden-park.com
+eden-park.com##.page-wrapper:style(opacity:1 !important;pointer-events:auto !important)
+! paradoxwikis.com
+paradoxwikis.com##.cookies-bar
+paradoxwikis.com##body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! catawiki.com
+catawiki.com##.cw-cookies-bar
+catawiki.com##body,html:style(height: auto !important; overflow: auto !important)
+! backmarket
+backmarket.co.uk,backmarket.es,backmarket.de,backmarket.be,backmarket.at,backmarket.fr,backmarket.gr,backmarket.fi,backmarket.ie,backmarket.it,thebackmarket.nl,backmarket.pt,backmarket.se,backmarket.sk,backmarket.com##.fixed.z-50
+backmarket.de##._3NAusrrr
+backmarket.de##.bottom-0
+backmarket.de##div.vue-portal-target
+backmarket.fi##div[data-testid="overlay"]
+backmarket.fi##.bg-white[class$="md:w-[640px]"]
+! terchemicals
+terchemicals-cee.com,ter-as.pt,ter-as.com,terfrance.fr,terchemicals.com,teringredients.es,teringredients.com,teritalia.com,trexanchemicals.com,ternordic.com,gehring-montgomery.com,terchemicals.com,teruk.co.uk,terasiapacific.com##.modal-backdrop
+terchemicals-cee.com,ter-as.pt,ter-as.com,terfrance.fr,terchemicals.com,teringredients.es,teringredients.com,teritalia.com,trexanchemicals.com,ternordic.com,gehring-montgomery.com,terchemicals.com,teruk.co.uk,terasiapacific.com##body,html:style(height: auto !important; overflow: auto !important)
+! business.panasonic
+panasonic.pl,business.panasonic.co.uk,business.panasonic.es,business.panasonic.fr,business.panasonic.it,business.panasonic.nl,business.panasonic.pl,business.panasonic.de,business.panasonic.dk,business.panasonic.cz,business.panasonic.no,business.panasonic.be,business.panasonic.com.tr,business.panasonic.se,business.panasonic.fi##body,html:style(overflow: auto !important; position: initial !important;)
+! n26.com
+n26.com###dialog-root > #gdpr-notice
+n26.com##body,html:style(overflow: auto !important; position: initial !important;)
+! improvethenews.org
+improvethenews.org##.css-am27me
+! roli.com
+roli.com##.lightboxes_BasicLightbox_basicLightbox_1Thxl
+roli.com##body,html:style(overflow: auto !important; position: initial !important;)
+! visti.it
+visti.it##.cookiedenyoverlay
+visti.it##+js(rc, blur, , stay)
+! kitchentime.fi
+kitchentime.fi##.cookie
+kitchentime.fi##.popup-overlay
+kitchentime.fi##body,html:style(overflow: auto !important; position: initial !important;)
+! terhi.fi
+terhi.fi###avenisPrivacyTools
+terhi.fi##.modal-backdrop
+terhi.fi##body,html:style(overflow: auto !important; position: initial !important;)
+! schroder.cz
+schroder.cz###disclaimerModal
+schroder.cz##.modal-backdrop
+schroder.cz##body,html:style(overflow: auto !important; position: initial !important;)
+! prague-catering.cz
+prague-catering.cz###euc
+prague-catering.cz##body,html:style(overflow: auto !important; position: initial !important;)
+! acara.cz
+acara.cz##.bs-dialog-overlay
+acara.cz##body,html:style(overflow: auto !important; position: initial !important;)
+! cvut.cz
+cvut.cz###ctu-cm
+cvut.cz##body,html:style(overflow: auto !important; position: initial !important;)
+! realCookieBanner (wp-exclude-emoji )(ending pg#18)
+pulpe.eu,ilonpolku.fi,oculyze.net,mikanews.de,bitreporter.de,zertificon.com,kieruneknorwegia.pl,mannschaft.com,windowspower.de,bbfun.de,schreiners-it.de,infobroker.de,1000-haushaltstipps.de,theoblog.de,notebook-doktor.de,base-chat.de,campingbuddies.de,saunahuus.de,krefindo.de,tuhlteim.de,getaawp.com,wrestling-point.de,englishradar.com,wt-onlineakademie.de,readyforboarding.pl,thegeekfreaks.de,picockpit.com,der-windows-papst.de,kjr-pi.de,splendid-internet.de,do.de,compact-online.de,fuckyeah.shop,kiyoua-news.de,tourismus-uckermark.de,angelmagazin.de,technik-hauptstadt.de,tuhlteim-pedia.de,fobizz.com,fabian-heinz-webdesign.de,jpgames.de,kulturpass-kino.de,aspies.de,frixtender.de,brauerei-strate.de,hookahx.de,frickeldave.de,leben-mit-ohne.de,ilyabiz.com,neuneinhalb.org,baycix.de,basta.berlin,herrlichergarten.de,spieltraum-berlin.de,patria.net,blog.ipc-computer.de,gaming-grounds.de,ekiwi-blog.de,erp-up.de,philosophia-perennis.com,tecsafe.de,devm.io,schnittmuster-datenbank.de,rosgovas.com,blu-ray-rezensionen.net,bricksforge.io,lenovocampus.de,rotlichtaus.de,louisreynier.com,stricken-online.com,haarausfall-stopp.com,cargoe.at,pandore-gendarmerie.org,pureselfmade.com,fild.de,m-m-m.de,yogainspires.co.uk,youngimages.de,katzenbaumdesign.de,goerlach-gmbh.com,lichtempfindlich.org,gasthaus-schmidmayer.de,narrwalla.de,efg-passau.de,gefahrgutjaeger.de,locafrique-sf.com,financeads.com,tutonaut.de,freegossip.gr,ltmemory.de,randombrick.de,playcentral.de,nachbelichtet.com,philosophenlexikon.de,schulebruetten.ch,almacenessanagustin.com,autoverwertung-berk.de,gosch.de,ousuca.com,stw-langenfeld.de,yurishop.it,europace.de,autobrinkmann.de,move-ment.at,techniknews.net,epages.com,thinkingwithyou.com,mfu-pilotenclub.at,artkon.de,running-green.de,danielederosa.de,ivfp.de,bs-achern.de,swiss-commerce.ch,asga.ch,ellasblog.de,gamenite.de,mmo-sankar.de,istaf-indoor.de,iqskitchen.de,ekiwi.de,nordlicht-ev.de,zimmerwetter.de,pinel-netzwerk.de,bierspot.de,lightcon.com,roschmann.de,simtarife.de,egon-w-kreutzer.de,terra-natur.com,devowl.io,cleverpush.com,subitec.com,kwerfeldein.de,tecalliance.net,viel-unterwegs.de,madame-lenormand.de,4kfilme.de,gymnasium-hochdahl.de,popp.eu,maniac.de,supertipp-online.de,winlocal.de,schiffe-und-kreuzfahrten.de,guiademayores.com,jankarres.de,nahrungsmittel-intoleranz.com,branson-germany.de,miriamkreativ.de,zaunbau-koch.de,bsk-consulting.de,windata.de,prodopa.de,zahnarzt-kuboth.de,audiovision.de,brachmannofficial.com,compari.net,computer-und-technik-im-wohnmobil.de,seifriz-preis.de,suitapp.de,rossoft.co.uk,wind-craft.eu,manyanet.org,mack-design.com,pocket-pirates-prt.de,tanzschulebogner.de,toplink.de,vg-veitsbronn-seukendorf.de,skiweltcup.tv,desser.co.uk,symposium.org,manneskraft-gesteigert.com,barracred.com.br,tv-sport.de,boheme-schwabing.de,spherity.com,tc-equipment.de,webfactory-i4.de,webtimiser.de,wp-ninjas.de,profiel.de,goeltzschtal-reisen.de,everbloom.eu,myclim8.com,smiley.blue,tulipize.com,burzaucebnic.sk,komm-mit.com,istdasvegan.eu,openforests.com,industriemedien.at,torinostoria.com,igvm.de,pinel.de,music-service-geiger.de,insidetrading.de,ls-service.at,blogyourthing.com,bildung-ab-50.de,teilzeitreisender.de,vivoil.com,borderline-plattform.de,accace.ro,lang-ag.com,reise-zikaden.de,restaurant-lindenhof.at,nmmn.com,exitroom.berlin,weiterbildungsfinder.de,erfurt-touristinformation.de,elisazunder.de,visconti.partners,plr-paket.de,spytunes.com,schneelaeuferzunft.de,flaviamelissa.com.br,flughafen.tips,webtapete.de,erbsenprinzessin.com,cranimax.com,ac-grimmen.de,floristasgarcia.es,monikabirknerfreedombusiness.de,lattinepersonalizzate.it,olmatic.de,die-werbeschmiede.de,supereight.net,visitmedia.de,egro-direktwerbung.de,alleingeborener-zwilling.com,actrento.com,antik-shop.de,accace.cz,happiness-bundles.com,classic-emaille.de,fakturia.de,beeze.de,brunozimmer.de,derhoerbuchblog.de,udo-lermann.de,ciss.de,volksfest-nuernberg.de,ubisys.de,wildbits.de,softedu.pl,maxkoch.de,mario-kaps.de,salzstreuner.de,goessential.com,tiesse.com,compagniefruitiere.fr,motivationstipp.de,holzkisten-fabrik.de,dasmagazin.de,akademie-management.de,salzerkfz.de,aglini.com,m38a1.de,thomasschlechter.de,smorfianapoletanaweb.it,vzm.de,proofing.de,kbmv-matting.de,vitalplus.com,karver-systems.com,boeser-chinese.de,reinhardstrempel.de,bewusstes-zentrum.de,bewusstes-zentrum.de,wildpark-ortenburg.de,24hessen.de,janamaenz.photography,prodottidellapiazza.it,continentale-hannover.de,accace.sk,wzl-zwickau.de,picipix.com,tkm-systemtechnik.de,drive4brands.de,brancaia.com,trirhena-consulting.de,pferde-hunde-therapie.de,ffzblossin.de,coyagaming.de,cocktailsworld.net,forum-koepenick.de,immobilien-skiba.de,penzkofer-bau.de,penzkofer-bau.de,fitnesscenter-schardt.de,abcteile24.de,wohnmobilcenter-drechsler.de,crossculture-academy.com,blhv.de,blindbild.com,zouboulis.com,esderaiz.com,ichbindochnichthierumbeliebtzusein.com,von-zinsen-leben.de,c-parts.de,accademiainformatica.com,lobetalarbeit.de,hannover-living.de,tsg6209weinheim.de,stefaniegoldmarie.com,dictum-shop.de,oakbeardcare.com,patchbox.com,lazyinvestors.de,frohreich.de,transport-versicherungen.info,mummelito.de,reisekontakte.at,ojas.de,stadt-schoeneck.de,piazzadeimestieri.it,fasteninfos.de,brodbeck-dd.de,hundewelpe.de,jadent.de,duft-werk.de,wunderpen.com,crazeuk.com,drhorvath.de,weingut-knipser.de,donostiroller.com,roemermann.com,bestwig.de,tango-flores.de,china-central-consultants.com,lacasadavantialsole.org,naturseifen-moosmed.de,akzent-magazin.com,wp-loft.de,welte-glasuren.com,balsamico.shop,sl-landschaftsgestaltung.de,betec.de,alquilerordenadores.com,bayern-kreativ.de,tim-ehling.com,signisalc.org,coworkingrepublic.com,dacsa.com,plzenoviny.cz,odw-journal.de,kasteninblau.de,lichttraeumer.de,missinfogeek.net,automatiksysteme.com,adzurro.de,vectorsoft.de,suedafrika-wein.de,noaf.de,hundgemacht.net,testefiorite.it,klsys.com,feuerhexen.de,lemarit.com,lameerooftop.com,ideentitaet.com,kaiser-mania.de,accace.com,naku.at,goldpreis24.de,ejwleo.de,josefbergs.com,caucasus-naturefund.org,energiemetropole-leipzig.de,von-neindorff-stiftung.de,locandazita.com,samadhi-vegetarian.de,host.pl,pentadoc-radar.com,kd-slovenija.de,accace.hu,stilweb.it,wolfgangallgaeuer.com,kohlkg.de,rechtsanwalt-nierfeld.de,karlhoeffkes.de,verstehepferde.de,socceressen.de,dcore.de,edr-software.com,denk-doch-mal.de,meinstream.net,stefan-froescher.eu,zabel-group.de,photofloh.de,annabeauty-stuttgart.de,swg-chemnitz.de,klicks-kaufen.de,levne-sauny.cz,versicherungsmakler-leistenschneider.de,arsdigita.de,flugschule-hochries.de,osmc.de,zumkutscher.de,evkirche-eilsen.de,thingybob.de,inicionet.com,feucht-obsttechnik.de,weimar-touristinformation.de,yplay.de,vcfrankfurt.de,derklassiker.de,lepetitmarchedauvergne.fr,gooloo.de,pizzeria-algusto.de,presto-personaldienste.de,wallygusto.de,frigge-dinstak.de,klangmassage-moser.de,grupo-loma.com,samenbank-berlin.de,flow-in-yoga.de,lb-consultores.com,b757.info,luegeten.ch,hof-droste.de,aachen50plus.de,arabesque-essen.de,grid.de,canvascga.com,mallorca-unternehmen.com,hauspanorama.de,vienna-interiors.at,music-on-net.de,baumarkt-vogl.at,knoblauch.de,rissland-kunststoffe.de,fahrstil.cc,hallesches-fotoatelier.de,dollenberg-isolierung.de,timo-bernhard.de,feuerwehr-oberau.de,kuechenboerse.de,erlebnispark-ziegenhagen.de,frauzuckerbroetchen.com,hopfner.info,tiermasseur-mannsberger.at,gcol.de,blueoceangaming.com,pinel-medizin.de,knauer-galabau.de,zahnarzt-dr-henkel.de,tonispizza-rastatt.de,wichmann.biz,schuetzendepot.de,horizonte.com,dayspamainz.de,gerdes-reisen.de,dg-pw.de,brill-art.de,carbon.ag,199-euro-computer.de,pndracingteam.net,sv-langenfeld.de,steinway-park-seesen.de,sonderversum.com,forwardis.com,verein-fairbund.de,hs-soft.com,backstagefrankfurt.de,hans-engelke.de,vapecoco.com,imprints.de,rolandgermany.com,fschemie-goettingen.de,hypnose.ac,estudio-nous.com,kunstmuseum-heidenheim.de,htvb.org,ridee.bike,zur-glocke.com,hotelkristall.it,babiceurican.cz,farbenherz.com,it-koehler.com,bklm-ahaus.de,gesundheitsladen-online.de,createchange.me##+js(set, realCookieBanner, undefined)
+! amway
+amway-estonia.com,amway-latvia.com,amway-lithuania.com,amway.es,amway.no,amway.nl,amway.co.uk,amway.com.tr,amway.pt,amway.be,amway.sk,amway.de,amway.ch,amway.gr,amway.ie,amway.se,amway.pl,amway.bg,amway.hr,amway.dk,amway.cz,amway.si,amway.ro,amway.fr,amway.fi,amway.it##+js(set, amw.isCookieConsentAccepted, true)
+amway-estonia.com,amway-latvia.com,amway-lithuania.com,amway.es,amway.no,amway.nl,amway.co.uk,amway.com.tr,amway.pt,amway.be,amway.sk,amway.de,amway.ch,amway.gr,amway.ie,amway.se,amway.pl,amway.bg,amway.hr,amway.dk,amway.cz,amway.si,amway.ro,amway.fr,amway.fi,amway.it##+js(set, amw.isMarketingCookiesAccepted, false)
+amway-estonia.com,amway-latvia.com,amway-lithuania.com,amway.es,amway.no,amway.nl,amway.co.uk,amway.com.tr,amway.pt,amway.be,amway.sk,amway.de,amway.ch,amway.gr,amway.ie,amway.se,amway.pl,amway.bg,amway.hr,amway.dk,amway.cz,amway.si,amway.ro,amway.fr,amway.fi,amway.it##+js(set, amw.isAnalyticsCookiesAccepted, false)
+! easyticket.de
+easyticket.de##.popup_wrapper
+easyticket.de###cookie_consent_popup_background
+easyticket.de##body,html:style(overflow: auto !important; position: initial !important;)
+! automarket.bg
+automarket.bg###cookies_policy_bottom_right
+automarket.bg##body,html:style(overflow: auto !important; position: initial !important;)
+! capaneoinvestments.com
+capaneoinvestments.com##.popup-disclaimer
+capaneoinvestments.com##.cookies-tooltip
+capaneoinvestments.com##body,html:style(overflow: auto !important; position: initial !important;)
+! sejlingsmedje.dk
+salten.dk,sejlingsmedje.dk##.cookiemodal_att2021
+salten.dk,sejlingsmedje.dk##body,html:style(overflow: auto !important; position: initial !important;)
+! movetex.com (Fixes unclickable overlay)
+movetex.com##.blur:style(opacity:1 !important;pointer-events:auto !important)
+movetex.com##html:style(overflow:auto !important)
+! kubikum.com
+kubikum.com##.absol_cookie
+kubikum.com###full_win
+! mycashbacks.com
+mycashbacks.com##[class^="CookieBox-"]
+mycashbacks.com##body,html:style(overflow: auto !important; position: initial !important;)
+! fortuluz.es
+fortuluz.es###legal-modal
+fortuluz.es##.modal-backdrop
+fortuluz.es##body,html:style(overflow: auto !important; position: initial !important;)
+! exakta
+exakta.se,exaktacreative.se,exaktasoftware.se##html:style(overflow: auto !important)
+! ingeborggaarden.dk
+tphotel.dk,ingeborggaarden.dk,gmf.dk##.lbOuterWrapper
+tphotel.dk,ingeborggaarden.dk,gmf.dk##.lbOverlay
+tphotel.dk,ingeborggaarden.dk,gmf.dk##body,html:style(height: auto !important; overflow: auto !important)
+! onderwijsvacaturebank.nl
+onderwijsvacaturebank.nl###CookieModal
+onderwijsvacaturebank.nl##.modal-backdrop
+onderwijsvacaturebank.nl##body,html:style(height: auto !important; overflow: auto !important)
+! haifachem.co.il
+haifachem.co.il###boxcustomover
+haifachem.co.il##body,html:style(overflow: auto !important; position: initial !important;)
+! cyberweek.tau.ac.il
+cyberweek.tau.ac.il###policy-modal
+cyberweek.tau.ac.il##.modal-backdrop
+cyberweek.tau.ac.il##body,html:style(overflow: auto !important; position: initial !important;)
+! patreon.com
+patreon.com###lanyard_root
+patreon.com##body,html:style(overflow: auto !important; position: initial !important;)
+! jll.
+jll.de,jll.fr,jll.fi,jll.cz,jll.be,jll.it,jll.lu,jll-mena.com,jll.co.uk,jll.nl,jll.pl,jll.co.il,jll.ro,jll.ru,jll.pt,jll.sk,jll.co.za,jll.es,jll.ch,jll.com.tr,jll.com.au,joneslanglasalle.com.cn,jllsweden.se,jll.com.tw,jll.co.id,joneslanglasalle.co.jp,jll.co.kr,jll.com.mo,jll.com.my,jll.nz,jll.com.ph,jll.com.sg,jll.com.lk,jll.co.th,joneslanglasalle.com.vn,jll.com.mx,jll.com,jll.com.co,jll.pe,jll.com.ar,jll.cl,jll.com.br,jll.ca##.ensNotifyBannerWrapper
+jll.de,jll.fr,jll.fi,jll.cz,jll.be,jll.it,jll.lu,jll-mena.com,jll.co.uk,jll.nl,jll.pl,jll.co.il,jll.ro,jll.ru,jll.pt,jll.sk,jll.co.za,jll.es,jll.ch,jll.com.tr,jll.com.au,joneslanglasalle.com.cn,jllsweden.se,jll.com.tw,jll.co.id,joneslanglasalle.co.jp,jll.co.kr,jll.com.mo,jll.com.my,jll.nz,jll.com.ph,jll.com.sg,jll.com.lk,jll.co.th,joneslanglasalle.com.vn,jll.com.mx,jll.com,jll.com.co,jll.pe,jll.com.ar,jll.cl,jll.com.br,jll.ca##body,html:style(height: auto !important; overflow: auto !important)
+! migros.com.tr
+migros.com.tr##.ng-trigger-presenceAnimation
+migros.com.tr##body,html:style(overflow: auto !important; position: initial !important;)
+! tibber.com
+tibber.com##.Consent
+tibber.com##body,html:style(height: auto !important; overflow: auto !important)
+! daruk-emelok.hu
+daruk-emelok.hu##.basicLightbox
+daruk-emelok.hu##body,html:style(height: auto !important; overflow: auto !important)
+! hooray-heroes.ca
+hooray-heroes.ca,hoorayheroes.co.uk###cookies
+hooray-heroes.ca,hoorayheroes.co.uk##body,html:style(overflow: auto !important; position: initial !important;)
+! kyoceradocumentsolutions
+kyoceradocumentsolutions.us,kyoceradocumentsolutions.ch,kyoceradocumentsolutions.co.uk,kyoceradocumentsolutions.de,kyoceradocumentsolutions.es,kyoceradocumentsolutions.eu,kyoceradocumentsolutions.fr,kyoceradocumentsolutions.it,kyoceradocumentsolutions.ru,kyoceradocumentsolutions.mx,kyoceradocumentsolutions.cl,kyoceradocumentsolutions.com.br##+js(set-cookie, marketingCookies, false)
+kyoceradocumentsolutions.us,kyoceradocumentsolutions.ch,kyoceradocumentsolutions.co.uk,kyoceradocumentsolutions.de,kyoceradocumentsolutions.es,kyoceradocumentsolutions.eu,kyoceradocumentsolutions.fr,kyoceradocumentsolutions.it,kyoceradocumentsolutions.ru,kyoceradocumentsolutions.mx,kyoceradocumentsolutions.cl,kyoceradocumentsolutions.com.br##+js(set-cookie, internalCookies, false)
+kyoceradocumentsolutions.us,kyoceradocumentsolutions.ch,kyoceradocumentsolutions.co.uk,kyoceradocumentsolutions.de,kyoceradocumentsolutions.es,kyoceradocumentsolutions.eu,kyoceradocumentsolutions.fr,kyoceradocumentsolutions.it,kyoceradocumentsolutions.ru,kyoceradocumentsolutions.mx,kyoceradocumentsolutions.cl,kyoceradocumentsolutions.com.br##+js(set-cookie, essentialsCookies, true)
+! samsonite.
+samsonite.com.pe,samsonite.com.co,samsonite.cl,samsonite.com.ar,samsonite.com.mx##.glow-banner
+samsonite.ie,samsonite.lu,samsonite.no,samsonite.sk,samsonite.se,samsonite.dk,samsonite.fi,samsonite.ma,samsonite.hu,samsonite.ch,samsonite.de,samsonite.fr,samsonite.nl,samsonite.cz,samsonite.it,samsonite.es,samsonite.at,samsonite.be,samsonite.co.uk,samsonite.pl,gregorypacks.com##.overlay-wrapper
+samsonite.ie,samsonite.lu,samsonite.no,samsonite.sk,samsonite.se,samsonite.dk,samsonite.fi,samsonite.ma,samsonite.hu,samsonite.ch,samsonite.de,samsonite.fr,samsonite.nl,samsonite.cz,samsonite.it,samsonite.es,samsonite.at,samsonite.be,samsonite.co.uk,samsonite.pl,gregorypacks.com##body,html:style(height: auto !important; overflow: auto !important)
+! americantourister.it
+tumi.com,americantourister.it##.overlay-wrapper
+tumi.com,americantourister.it##body,html:style(overflow: auto !important; position: initial !important;)
+! americanexpress.ch
+americanexpress.ch##.a-backdrop
+americanexpress.ch##.m-cookie-layer
+americanexpress.ch##body,html:style(overflow: auto !important; position: initial !important;)
+! starnet.md
+starnet.md##.cookie__settings
+starnet.md##body,html:style(overflow: auto !important; position: initial !important;)
+! 4dd.pl
+4dd.pl###rodoPopup
+4dd.pl##body,html:style(height: auto !important; overflow: auto !important)
+! tylko.com
+tylko.com##.ty-settings
+tylko.com##body,html:style(height: auto !important; overflow: auto !important)
+! telenor.se
+telenor.se##.modal-container
+telenor.se##.modal-backdrop
+telenor.se##body,html:style(height: auto !important; overflow: auto !important)
+! dabbolig.dk
+dabbolig.dk##cookie-widget
+dabbolig.dk##body,html:style(overflow: auto !important; position: initial !important;)
+! skforsyning.dk
+skforsyning.dk##.lbOuterWrapper
+skforsyning.dk##.lbOverlay
+skforsyning.dk##body,html:style(height: auto !important; overflow: auto !important)
+! dr.dk
+dr.dk###drcc-overlay
+dr.dk##body,html:style(height: auto !important; overflow: auto !important)
+! pasteleria.com
+pasteleria.com###cookieAlertModal
+pasteleria.com##.modal-backdrop
+pasteleria.com##body,html:style(height: auto !important; overflow: auto !important)
+! puratos.*
+puratos.pe,puratos.com.ph,puratos.com.br,puratos.ke,puratos.ch,puratos.pl,puratos.hu,puratos.gr,puratos.de,puratos.cz,puratos.com.cn,puratos.cl,puratos.ca,puratos.ee,puratos.at,puratos.co.cr,puratos.it,sharon-puratos.co.il,puratos.ie,puratos.com.ua,puratos.us,puratos.com.tr,puratos.co.th,puratos.com.tw,puratos.es,puratos.co.kr,puratos.com.mx,chipkinspuratos.co.za,puratos.rs,puratos.in,puratos.ru,puratos.ro,puratos.lv,puratos.lt,sofadex-puratos.ma,puratos.dk,puratos.co.uk,puratos.com##.modal-backdrop
+puratos.pe,puratos.com.ph,puratos.com.br,puratos.ke,puratos.ch,puratos.pl,puratos.hu,puratos.gr,puratos.de,puratos.cz,puratos.com.cn,puratos.cl,puratos.ca,puratos.ee,puratos.at,puratos.co.cr,puratos.it,sharon-puratos.co.il,puratos.ie,puratos.com.ua,puratos.us,puratos.com.tr,puratos.co.th,puratos.com.tw,puratos.es,puratos.co.kr,puratos.com.mx,chipkinspuratos.co.za,puratos.rs,puratos.in,puratos.ru,puratos.ro,puratos.lv,puratos.lt,sofadex-puratos.ma,puratos.dk,puratos.co.uk,puratos.com##body,html:style(height: auto !important; overflow: auto !important)
+! adef-emploi.fr / lumieresdelaville.net
+adef-emploi.fr,lumieresdelaville.net##.gdpr-module
+adef-emploi.fr,lumieresdelaville.net##body,html:style(height: auto !important; overflow: auto !important)
+! educhel.ru
+educhel.ru##.wrap_cookies_popup
+! jobijoba
+jobijoba.at,jobijoba.mx,jobstralia.com,jobijoba.be,jobijoba.es,jobijoba.de,jobijoba.ch,jobijoba.ru,jobijoba.ie,jobijoba.pt,jobijoba.it,jobijoba.com.br,jobijoba.com,jobijoba.co.uk##.modal-wrapper
+jobijoba.at,jobijoba.mx,jobstralia.com,jobijoba.be,jobijoba.es,jobijoba.de,jobijoba.ch,jobijoba.ru,jobijoba.ie,jobijoba.pt,jobijoba.it,jobijoba.com.br,jobijoba.com,jobijoba.co.uk##.modal-backdrop
+jobijoba.at,jobijoba.mx,jobstralia.com,jobijoba.be,jobijoba.es,jobijoba.de,jobijoba.ch,jobijoba.ru,jobijoba.ie,jobijoba.pt,jobijoba.it,jobijoba.com.br,jobijoba.com,jobijoba.co.uk##body,html:style(height: auto !important; overflow: auto !important)
+! share-your-photo.com
+share-your-photo.com###ccbox
+! esatto.se
+esatto.se##.iQaTEm
+esatto.se##body,html:style(height: auto !important; overflow: auto !important)
+! silverboats.fi
+silverboats.fi##.modal-privacy-tool
+silverboats.fi##.modal-backdrop
+silverboats.fi##body,html:style(height: auto !important; overflow: auto !important)
+! acquesi.it
+acquesi.it##.submenulayer-mobile
+acquesi.it##body,html:style(height: auto !important; overflow: auto !important)
+! turboimagehost.com
+turboimagehost.com##.asg-overlay
+turboimagehost.com##body,html:style(overflow: auto !important; position: initial !important;)
+! hsbc + assetmanagement.hsbc.com.sg mirrors
+!hsbc.de##.lightbox-overlay
+!hsbc.com.mt,hsbc.nl,hsbc.co.uk,hsbc.ch,hsbc.se,hsbc.es,hsbc.at,hsbc.be,hsbc.cz,hsbc.dk,hsbc.com,hsbc.gr,hsbc.de,hsbc.com.mx,hsbc.ca,hsbc.bm,hsbc.com.tw,hsbc.co.in,hsbc.co.jp,hsbc.com.sg,hsbc.fr###terms-and-conditions-modal
+!hsbc.com.mt,hsbc.nl,hsbc.co.uk,hsbc.ch,hsbc.se,hsbc.es,hsbc.at,hsbc.be,hsbc.cz,hsbc.dk,hsbc.com,hsbc.gr,hsbc.de,hsbc.com.mx,hsbc.ca,hsbc.bm,hsbc.com.tw,hsbc.co.in,hsbc.co.jp,hsbc.com.sg,hsbc.fr##.cookie-modal-container
+!hsbc.com.eg,hsbc.com.cn,hsbc.com.vn,hsbc.com.tw,hsbc.com.mo,hsbc.com.kw,hsbc.ch,hsbc.co.id,hsbc.am,hsbc.com,hsbc.nl,hsbc.com.mt,hsbc.de,hsbc.cz,hsbc.be,hsbc.es,hsbc.pl,hsbc.uk,hsbc.ie,hsbc.com.tr,hsbc.it,hsbc.fr,hsbc.gr,hsbc-transactionservices.de,hsbcnet.com##.cookie-notification
+!smartserve.hsbc,hsbc.ch,hsbc.com,hsbc.nl,hsbc.com.mt,hsbc.de,hsbc.cz,hsbc.be,hsbc.es,hsbc.pl,hsbc.uk,hsbc.ie,hsbc.com.tr,hsbc.it,hsbc.fr,hsbc.gr,hsbc-transactionservices.de,hsbcnet.com###__tealiumGDPRecModal
+hsbc.com.mt,hsbc.nl,hsbc.co.uk,hsbc.se,hsbc.es,hsbc.at,hsbc.cz,hsbc.dk,hsbc.com,hsbc.com.mx,hsbc.ca,hsbc.bm,hsbc.com.tw,hsbc.co.in,hsbc.co.jp,hsbc.com.sg,smartserve.hsbc,hsbc.ch,hsbc.de,hsbc.be,hsbc.pl,hsbc.uk,hsbc.ie,hsbc.com.tr,hsbc.it,hsbc.fr,hsbc.gr,hsbc-transactionservices.de,hsbcnet.com##body,html:style(overflow: auto !important; position: initial !important;)
+! dbschenker
+dbschenker-seino.jp,dbschenker-digital.cn,dbschenker.com,dbschenkerarkas.com.tr##.dialog--open
+dbschenker-seino.jp,dbschenker-digital.cn,dbschenker.com,dbschenkerarkas.com.tr##body,html:style(overflow: auto !important; position: initial !important;)
+! pickup.de
+pickup.de##.cookie-box
+pickup.de##.hfTMvA
+! hallhuber.com
+hallhuber.com##.cookie-box-modal
+hallhuber.com##body,html:style(height: auto !important; overflow: auto !important)
+! one4all.ie
+one4all.ie##body,html:style(height: auto !important; overflow: auto !important)
+! harveynorman (scroll fix)
+harveynorman.co.nz,harveynorman.com.sg,harveynorman.com.my##body,html:style(height: auto !important; overflow: auto !important)
+! pentagon-group.co.uk
+pentagon-group.co.uk###cookie
+pentagon-group.co.uk###cookies-dull-out
+pentagon-group.co.uk##body,html:style(overflow: auto !important; position: initial !important;)
+! opusteno.rs
+opusteno.rs###conditions-l
+opusteno.rs##body,html:style(overflow: auto !important; position: initial !important;)
+! elavon.ie
+elavon.ie##.cookiePolicy
+elavon.ie##body,html:style(height: auto !important; overflow: auto !important)
+! continental-corporation.cn
+continental.com,continental-corporation.cn##.c-cookiebanner__modal
+continental.com,continental-corporation.cn##body:style(overflow: auto !important; position: initial !important;)
+! speedway.fr
+speedway.fr###eCookieRgpd
+speedway.fr##body,html:style(height: auto !important; overflow: auto !important)
+! billiger.de
+billiger.de###cookie-banner-overlay
+billiger.de##body,html:style(height: auto !important; overflow: auto !important)
+! nintendo
+nintendo.co.uk,nintendo.fr,nintendo.de,nintendo.nl,nintendo.it,nintendo.pt,nintendo.es,nintendo.at,nintendo.ru,nintendo.co.za,nintendo.ch,nintendo.be##.plo-overlay
+nintendo.co.uk,nintendo.fr,nintendo.de,nintendo.nl,nintendo.it,nintendo.pt,nintendo.es,nintendo.at,nintendo.ru,nintendo.co.za,nintendo.ch,nintendo.be##body,html:style(height: auto !important; overflow: auto !important)
+! budgetair / cheaptickets
+budgetair.lv,budgetair.pt##.dUfdlN
+budgetair.es,budgetair.dk,vayama.com,budgetair.be,vayama.ie,budgetair.lv,budgetair.se,budgetair.com.tw,budgetair.com.au,budgetair.com,cheaptickets.sg,cheaptickets.be,cheaptickets.ch,cheaptickets.de,cheaptickets.nl,cheaptickets.hk,cheaptickets.co.th,flugladen.at,budgetair.in,budgetair.pt,budgetair.it,budgetair.co.uk,budgetair.nl,budgetair.fr,budgetair.es,flugladen.de##body,html:style(height: auto !important; overflow: auto !important)
+! jetcost
+jetcost.pl,jetcost.com,jetcost.com.br,jetcost.com.bo,jetcost.com.au,jetcost.cl,jetcost.com.co,jetcost.dk,jetcost.de,jetcost.es,jetcost.com,jetcost.hk,jetcost.com,jetcost.co.in,jetcost.co.id,jetcost.ie,jetcost.it,jetcost.hu,jetcost.com.my,jetcost.com.mx,jetcost.co.ve,jetcost.com.uy,jetcost.co.uk,jetcost.co.th,jetcost.se,jetcost.fi,jetcost.co.kr,jetcost.co.za,jetcost.com.sg,jetcost.ru,jetcost.ro,jetcost.pt,jetcost.com.ph,jetcost.com.pe,jetcost.at,jetcost.no,jetcost.co.nz,jetcost.nl###ck-modal-container
+jetcost.pl,jetcost.com,jetcost.com.br,jetcost.com.bo,jetcost.com.au,jetcost.cl,jetcost.com.co,jetcost.dk,jetcost.de,jetcost.es,jetcost.com,jetcost.hk,jetcost.com,jetcost.co.in,jetcost.co.id,jetcost.ie,jetcost.it,jetcost.hu,jetcost.com.my,jetcost.com.mx,jetcost.co.ve,jetcost.com.uy,jetcost.co.uk,jetcost.co.th,jetcost.se,jetcost.fi,jetcost.co.kr,jetcost.co.za,jetcost.com.sg,jetcost.ru,jetcost.ro,jetcost.pt,jetcost.com.ph,jetcost.com.pe,jetcost.at,jetcost.no,jetcost.co.nz,jetcost.nl##body,html:style(overflow: auto !important; position: initial !important;)
+! pt.virbac.com / vet.virbac.pt
+virbac.pt,virbac.com##.fancybox-is-modal
+virbac.pt,virbac.com##body,html:style(height: auto !important; overflow: auto !important)
+! vias.be
+vias.be###cookies-banner-overlay
+vias.be##body,html:style(height: auto !important; overflow: auto !important)
+! awwwards.com
+awwwards.com###lightbox-cookies
+awwwards.com##body,html:style(height: auto !important; overflow: auto !important)
+! leirovins.be
+leirovins.be###cookie-notice-overlay
+leirovins.be##body,html:style(height: auto !important; overflow: auto !important)
+! correosexpress.pt
+correosexpress.pt##.fullscreen-container
+correosexpress.pt##body,html:style(height: auto !important; overflow: auto !important)
+! fiftysix.nl
+fiftysix.nl##body,html:style(height: auto !important; overflow: auto !important)
+fiftysix.nl###dividePopupWrap
+! .mfp-ready
+huddle.today,eurogrow.es,crocs.com.mx,tikkio.com##.mfp-ready
+huddle.today,eurogrow.es,crocs.com.mx,tikkio.com##body,html:style(height: auto !important; overflow: auto !important)
+! didomi fixes
+okdiario.com,afnor-rus.ru,icsms.ru,naszemiasto.pl###didomi-host
+okdiario.com,afnor-rus.ru,icsms.ru,naszemiasto.pl##div[class^="didomi-consent-popup_"]
+mundodeportivo.com,okdiario.com,afnor-rus.ru,icsms.ru,naszemiasto.pl,sncf-connect.com##.didomi-screen-xlarge
+mundodeportivo.com,okdiario.com,naszemiasto.pl,sncf-connect.com##body,html:style(height: auto !important; overflow: auto !important)
+! ringside.ai
+ringside.ai###cookiecontrol-first
+ringside.ai##.bg-black87
+ringside.ai##body,html:style(height: auto !important; overflow: auto !important)
+! 6play.fr
+6play.fr##.bKetkC
+6play.fr##.bFhVRW.sc-1g9aw1k-1
+6play.fr##body,html:style(height: auto !important; overflow: auto !important)
+! klett.de
+klett.de##[id^="cookie-consent-"]
+klett.de##body,html:style(height: auto !important; overflow: auto !important)
+! modivo.pl
+modivo.pl##.modal-consents
+modivo.pl##body,html:style(height: auto !important; overflow: auto !important)
+! de.vanguard
+de.vanguard##.kEDzdV
+de.vanguard,vanguardmexico.com##body,html:style(height: auto !important; overflow: auto !important)
+! mitid.dk
+mitid.dk##.mitid-shared--cookie-warning-popup-modal-wrapper
+mitid.dk##.mitid-shared--cookie-warning-popup-overlay
+mitid.dk##body,html:style(height: auto !important; overflow: auto !important)
+! lemonde.fr
+lemonde.fr##.gdpr-lmd-standard
+lemonde.fr##.gdpr-lmd-wall
+lemonde.fr##body,html:style(height: auto !important; overflow: auto !important)
+! .m-layer / cookielaw-blur-background
+balay.es,constructa.com,gaggenau.com##.m-layer
+balay.es,constructa.com,gaggenau.com##+js(rc, cookielaw-blur-background, , stay)
+balay.es,constructa.com,gaggenau.com##body,html:style(overflow: auto !important; position: initial !important;)
+! imobiliare.ro
+imobiliare.ro##body,html:style(overflow: auto !important; position: initial !important;)
+imobiliare.ro##.showConsent
+! ostrzegamy.online
+ostrzegamy.online,memo-book.pl##.rodo-popup
+ostrzegamy.online,memo-book.pl##.rodo-overlay
+ostrzegamy.online,memo-book.pl##body,html:style(overflow: auto !important; position: initial !important;)
+! sj.se
+sj.se##.css-1yuoa0u
+sj.se##body:style(overflow: auto !important; position: initial !important;)
+! multimediago.pl
+multimediago.pl##.modal-cookie
+multimediago.pl##body,html:style(overflow: auto !important; position: initial !important;)
+! elring
+elring.ae,elring.cn,elring.com,elring.com.tr,elring.de,elring.fr,elring.it,elring.pl,elring.pt,elring.ru##.modal-cookie.modal
+elring.ae,elring.cn,elring.com,elring.com.tr,elring.de,elring.fr,elring.it,elring.pl,elring.pt,elring.ru##.modal-backdrop
+elring.ae,elring.cn,elring.com,elring.com.tr,elring.de,elring.fr,elring.it,elring.pl,elring.pt,elring.ru##body,html:style(overflow: auto !important; position: initial !important;)
+! sp-message
+loudersound.com,impulse.de,pcgamer.com,infoworld.com,kiplinger.com,omni.se,it-times.de,bitcoinmagazine.com,deliciousmagazine.co.uk,upday.com,theguardian.com,deutschlandcard.de,szbz.de,free-fonts.com,lieferzeiten.info,vice.com,newsnow.co.uk,out.com,streampicker.de,radiotimes.com,nowtv.com,kochbar.de,toggo.de,am-online.com,n-tv.de,newsandstar.co.uk,tag24.de,weltkunst.de,noveauta.sk,pnn.de,economist.com,crash.net,norwaytoday.info,insider.com,preis.de,ibroxnoise.co.uk,celtsarehere.com,nufcblog.co.uk,sport1.de,techconnect.com,followfollow.com,thespun.com,mazdas247.com,fastcar.co.uk,vitalfootball.co.uk,audi-sport.net,bumble.com,arcamax.com,dilbert.com,sportbible.com,givemesport.com,dartsnews.com,gpfans.com,justjared.com,justjaredjr.com,finanzen.at,flights-idealo.co.uk,idealo.com,idealo.se,idealo.nl,idealo.pl,idealo.pt,idealo.fi,idealo.dk,idealo.no,idealo.in,idealo.at,ladenzeile.at,berliner-zeitung.de,urbia.de,essen-und-trinken.de,wetter.de,rtl-living.de,vox.de,ladenzeile.de,advocate.com,idealo.de,wigantoday.net,economistgroup.com,transfermarkt.nl,transfermarkt.es,transfermarkt.pl,transfermarkt.pt,transfermarkt.at,transfermarkt.it,transfermarkt.fr,transfermarkt.de,transfermarkt.be,transfermarkt.co.uk,transfermarkt.us,footballfancast.com,cio.com,jezebel.com,splinternews.com,denofgeek.com,kinja.com,theinventory.com,rollingstone.de,sueddeutsche.de,csoonline.com,idealo.de,tvmovie.de,testberichte.de,pcgameshardware.de,4players.de,guj.de,bild.de,wieistmeineip.de,testbild.de,stylebook.de,skygroup.sky,speisekarte.de,haeuser.de,cmo.com.au,pcworld.co.nz,idealo.it,transfermarkt.jp,transfermarkt.co.id,autoexpress.co.uk,transfermarkt.com,esportsclub.nl,webwinkel.tubantia.nl,shopalike.nl,autoweek.nl,pcworld.es,macworld.es,idealo.es,businessinsider.es,motor.es,autobild.es,driving.co.uk,stern.de,pcgames.de,sport.de,idealo.fr,barrons.com,tori.fi,snow-forecast.com,tidende.dk,kraloyun.com,arnnet.com.au,bunte.de,handelsblatt.com,techbook.de,metal-hammer.de,macworld.co.uk,maxisciences.com,ohmymag.com,voici.fr,geo.de,businessinsider.de,heise.de,meinestadt.de,politico.eu,spieletipps.de,politico.eu,finanznachrichten.de,vtwonen.nl,stol.it##+js(rc, sp-message-open, html, stay)
+loudersound.com,impulse.de,pcgamer.com,infoworld.com,kiplinger.com,omni.se,it-times.de,bitcoinmagazine.com,deliciousmagazine.co.uk,upday.com,theguardian.com,deutschlandcard.de,szbz.de,free-fonts.com,lieferzeiten.info,vice.com,newsnow.co.uk,out.com,streampicker.de,radiotimes.com,nowtv.com,kochbar.de,toggo.de,am-online.com,n-tv.de,newsandstar.co.uk,tag24.de,weltkunst.de,noveauta.sk,pnn.de,economist.com,crash.net,norwaytoday.info,insider.com,preis.de,ibroxnoise.co.uk,celtsarehere.com,nufcblog.co.uk,sport1.de,techconnect.com,followfollow.com,thespun.com,mazdas247.com,fastcar.co.uk,vitalfootball.co.uk,audi-sport.net,bumble.com,arcamax.com,dilbert.com,sportbible.com,givemesport.com,dartsnews.com,gpfans.com,justjared.com,justjaredjr.com,finanzen.at,flights-idealo.co.uk,idealo.com,idealo.se,idealo.nl,idealo.pl,idealo.pt,idealo.fi,idealo.dk,idealo.no,idealo.in,idealo.at,ladenzeile.at,berliner-zeitung.de,urbia.de,essen-und-trinken.de,wetter.de,rtl-living.de,vox.de,ladenzeile.de,advocate.com,idealo.de,wigantoday.net,economistgroup.com,transfermarkt.nl,transfermarkt.es,transfermarkt.pl,transfermarkt.pt,transfermarkt.at,transfermarkt.it,transfermarkt.fr,transfermarkt.de,transfermarkt.be,transfermarkt.co.uk,transfermarkt.us,footballfancast.com,cio.com,jezebel.com,splinternews.com,denofgeek.com,kinja.com,theinventory.com,rollingstone.de,sueddeutsche.de,csoonline.com,idealo.de,tvmovie.de,testberichte.de,pcgameshardware.de,4players.de,guj.de,bild.de,wieistmeineip.de,testbild.de,stylebook.de,skygroup.sky,speisekarte.de,haeuser.de,cmo.com.au,pcworld.co.nz,idealo.it,transfermarkt.jp,transfermarkt.co.id,autoexpress.co.uk,transfermarkt.com,esportsclub.nl,webwinkel.tubantia.nl,shopalike.nl,autoweek.nl,pcworld.es,macworld.es,idealo.es,businessinsider.es,motor.es,autobild.es,driving.co.uk,stern.de,pcgames.de,sport.de,idealo.fr,barrons.com,tori.fi,snow-forecast.com,tidende.dk,kraloyun.com,arnnet.com.au,bunte.de,handelsblatt.com,techbook.de,metal-hammer.de,macworld.co.uk,maxisciences.com,ohmymag.com,voici.fr,geo.de,businessinsider.de,heise.de,meinestadt.de,politico.eu,spieletipps.de,politico.eu,finanznachrichten.de,vtwonen.nl,stol.it##div[id^="sp_message_container_"]
+! lisbonsaobentohotel.pt
+lisbonsaobentohotel.pt##.tpl-cookie
+lisbonsaobentohotel.pt##body,html:style(overflow: auto !important; position: initial !important;)
+! flyblueair.com
+flyblueair.com##.mfp-ready
+flyblueair.com##html:style(overflow: auto !important)
+! above9.travel
+above9.travel##.backdrop-blur-1
+above9.travel##body,html:style(overflow: auto !important; position: initial !important;)
+! norwegian.com
+norwegian.com##.nas-modal
+norwegian.com##body,html:style(overflow: auto !important; position: initial !important;)
+! cupt.gov.pl
+cupt.gov.pl###wiCookieBar1
+cupt.gov.pl##html:style(position: static !important; overflow: auto !important; width: auto !important;)
+! metro.*
+metro.ro,metro.pk,metro.rs,metro-tr.com,metro.sk,metro.at,metro.bg,metro.de,metro.fr,metro.hu,makro.cz,makro.pl,makro.nl##.consent-disclaimer
+metro.ro,metro.pk,metro.rs,metro-tr.com,metro.sk,metro.at,metro.bg,metro.de,metro.fr,metro.hu,makro.cz,makro.pl,makro.nl##body,html:style(height: auto !important; overflow: auto !important)
+! https://github.com/easylist/easylist/issues/9006
+sourceforge.net##+js(set-constant, window.cmpmngr.setConsentViaBtn, noopFunc)
+! elespanol.com
+elespanol.com###didomi-host
+elespanol.com###nhfp_didomi_block_page
+elespanol.com##body,html:style(overflow: auto !important; position: initial !important;)
+! foussier.fr
+foussier.fr##.ReactModal__Overlay
+foussier.fr##.ReactModalPortal
+foussier.fr##body,html:style(height: auto !important; overflow: auto !important)
+! dafy-moto.com
+dafy-moto.com##.pu-jliqhtlu
+dafy-moto.com##body:style(overflow: auto !important; position: initial !important;)
+! renewal.ru
+renewal.ru##.fancybox-container
+renewal.ru##.popup
+! autoersatzteile.de
+autoersatzteile.de##.overlay
+autoersatzteile.de##.popup--cookies
+! akkushop
+akku-shop.nl,akkushop-austria.at,akkushop-b2b.de,akkushop-schweiz.ch,akkushop-turkiye.com.tr,akkushop.de,akkushop.dk,batterie-boutique.fr##.akku-cookie-tools-design
+akku-shop.nl,akkushop-austria.at,akkushop-b2b.de,akkushop-schweiz.ch,akkushop-turkiye.com.tr,akkushop.de,akkushop.dk,batterie-boutique.fr##.js--overlay
+! airfrance
+airfrance.ae,airfrance.am,airfrance.at,airfrance.be,airfrance.bf,airfrance.bg,airfrance.bj,airfrance.ca,airfrance.cd,airfrance.cg,airfrance.ch,airfrance.cl,airfrance.cm,airfrance.co.ao,airfrance.co.il,airfrance.co.jp,airfrance.co.kr,airfrance.co.th,airfrance.co.uk,airfrance.co.za,airfrance.com.ar,airfrance.com.au,airfrance.com.br,airfrance.com.cn,airfrance.com.co,airfrance.com.do,airfrance.com.eg,airfrance.com.hk,airfrance.com.jo,airfrance.com.kh,airfrance.com.lb,airfrance.com.mx,airfrance.com.tr,airfrance.com.tw,airfrance.com.uy,airfrance.cz,airfrance.de,airfrance.dj,airfrance.dk,airfrance.dz,airfrance.es,airfrance.fi,airfrance.fr,airfrance.ga,airfrance.gf,airfrance.gp,airfrance.hr,airfrance.ht,airfrance.hu,airfrance.id,airfrance.ie,airfrance.in,airfrance.it,airfrance.lu,airfrance.ma,airfrance.mg,airfrance.ml,airfrance.mq,airfrance.mu,airfrance.my,airfrance.ne,airfrance.ng,airfrance.nl,airfrance.no,airfrance.pa,airfrance.pe,airfrance.pf,airfrance.pl,airfrance.pt,airfrance.re,airfrance.ro,airfrance.rs,airfrance.ru,airfrance.sa,airfrance.se,airfrance.sg,airfrance.si,airfrance.sk,airfrance.sn,airfrance.tg,airfrance.tn,airfrance.ua,airfrance.us,airfrance.vn##[id^="gdpr"]
+airfrance.ae,airfrance.am,airfrance.at,airfrance.be,airfrance.bf,airfrance.bg,airfrance.bj,airfrance.ca,airfrance.cd,airfrance.cg,airfrance.ch,airfrance.cl,airfrance.cm,airfrance.co.ao,airfrance.co.il,airfrance.co.jp,airfrance.co.kr,airfrance.co.th,airfrance.co.uk,airfrance.co.za,airfrance.com.ar,airfrance.com.au,airfrance.com.br,airfrance.com.cn,airfrance.com.co,airfrance.com.do,airfrance.com.eg,airfrance.com.hk,airfrance.com.jo,airfrance.com.kh,airfrance.com.lb,airfrance.com.mx,airfrance.com.tr,airfrance.com.tw,airfrance.com.uy,airfrance.cz,airfrance.de,airfrance.dj,airfrance.dk,airfrance.dz,airfrance.es,airfrance.fi,airfrance.fr,airfrance.ga,airfrance.gf,airfrance.gp,airfrance.hr,airfrance.ht,airfrance.hu,airfrance.id,airfrance.ie,airfrance.in,airfrance.it,airfrance.lu,airfrance.ma,airfrance.mg,airfrance.ml,airfrance.mq,airfrance.mu,airfrance.my,airfrance.ne,airfrance.ng,airfrance.nl,airfrance.no,airfrance.pa,airfrance.pe,airfrance.pf,airfrance.pl,airfrance.pt,airfrance.re,airfrance.ro,airfrance.rs,airfrance.ru,airfrance.sa,airfrance.se,airfrance.sg,airfrance.si,airfrance.sk,airfrance.sn,airfrance.tg,airfrance.tn,airfrance.ua,airfrance.us,airfrance.vn##body,html:style(overflow: auto !important; position: initial !important;)
+! muziker
+muziker.co.uk,muziker.com,muziker.at,muziker.be,muziker.bg,muziker.hr,muziker.cz,muziker.nu,muziker.ee,muziker.fi,muziker.fr,muziker.de,muziker.gr,muziker.hu,muziker.ie,muziker.it,muziker.lv,muziker.lt,muziker.lu,muziker.nl,muziker.pl,muziker.pt,muziker.ro,muziker.sk,muziker.si,muziker.es,muziker.se##.cookies-backdrop
+muziker.co.uk,muziker.com,muziker.at,muziker.be,muziker.bg,muziker.hr,muziker.cz,muziker.nu,muziker.ee,muziker.fi,muziker.fr,muziker.de,muziker.gr,muziker.hu,muziker.ie,muziker.it,muziker.lv,muziker.lt,muziker.lu,muziker.nl,muziker.pl,muziker.pt,muziker.ro,muziker.sk,muziker.si,muziker.es,muziker.se##body,html:style(overflow: auto !important; position: initial !important;)
+! boohoo.com
+boohoo.com##.header-cookies-gdpr
+boohoo.com##html[class*="cookies-visible"] > body::before
+! bosch
+boschwiperblades.com,bosch-home.ru,profilo.com,home-connect.com,neff.ru,neff-home.com,bosch-home.bg,bosch-home.ee,bosch-home.gr,bosch-home.ie,bosch-home.lv,bosch-home.pt,bosch-home.pl,bosch-home.si,bosch-home.rs,bosch-home.com.tr,bosch-easycontrol.com,ttwebpagecolombia.azurewebsites.net,monservicechauffage.fr,boschblog.hu,bosch-ebike.com,bosch-connected-world.com,bosch-iot-suite.com,bosch-climate.pe,bosch-climate.cl,bosch.io,rexrothonair.com,elmleblanc-optibox.fr,boschautomotiveservicesolutions.com,bosch-climate.mx,junkers.cl,bosch-climate.co,polarisdealersolutions.com,mbusassep.com,bosch-thermotechnology.com,subaruretailersolutions.com,nissantechmate.com##.BoschPrivacySettingsV2
+boschwiperblades.com,bosch-home.ru,profilo.com,home-connect.com,neff.ru,neff-home.com,bosch-home.bg,bosch-home.ee,bosch-home.gr,bosch-home.ie,bosch-home.lv,bosch-home.pt,bosch-home.pl,bosch-home.si,bosch-home.rs,bosch-home.com.tr,bosch-easycontrol.com,bosch-home.at,bosch-home.be,bosch-home.co.uk,bosch-home.com,bosch-home.dk,bosch-home.es,bosch-home.fi,bosch-home.fr,bosch-home.lt,bosch-home.lu,bosch-home.nl,bosch-home.no,bosch-home.ro,bosch-home.se,bsh-group.com,subaruretailersolutions.com##.m-layer
+! waitrose.com
+waitrose.com##+js(rc, modalOpen___gZykv, body)
+waitrose.com##.body-blackout
+waitrose.com##.closeOnClick___2g2S3
+||waitrose.com/ecom/assets/chunk-4912-50b6d74ba.js
+! topannonces.fr
+topannonces.fr,paruvendu.fr##.cmpcontainer
+||topannonces.fr/assets/js/cmp.min.js
+||paruvendu.fr^*/cmp.min.js
+! storyhouseegmon / egmont.com
+storyhouseegmont.dk,storyhouseegmont.no,storyhouseegmont.se,egmont.com,nordiskfilm.com##+js(rc, cookie-bar, , stay)
+storyhouseegmont.dk,storyhouseegmont.no,storyhouseegmont.se,egmont.com,nordiskfilm.com###CybotCookiebotDialog
+storyhouseegmont.dk,storyhouseegmont.no,storyhouseegmont.se,egmont.com,nordiskfilm.com##div[class^="Navigation__Overlay-"]
+storyhouseegmont.dk,storyhouseegmont.no,storyhouseegmont.se,egmont.com,nordiskfilm.com##body:style(overflow: auto !important)
+! tallink.com
+tallink.com###cms-web-consent-root
+tallink.com##.cws-modal-open:style(overflow: auto !important; pointer-events: auto !important;)
+! supla.fi
+!#if !adguard
+supla.fi##div[id^="sp_message_container_"]
+supla.fi##html.sp-message-open > body:not([style="overflow: hidden;"]):style(position: unset !important; margin-top: 0 !important; overflow: visible !important)
+!#endif
+! whatsapp.com
+faq.whatsapp.com,blog.whatsapp.com,www.whatsapp.com##[data-testid="wa_cookies_banner_modal"]
+faq.whatsapp.com,blog.whatsapp.com,www.whatsapp.com##+js(rc, hasCookieBanner, body, stay)
+! #cookie_disclaimer + (aeld, scroll, innerHeight)
+akaanseutu.fi,alueviesti.fi,kiuruvesilehti.fi,lempaala.ideapark.fi,lvs.fi,olutposti.fi,orivedensanomat.fi,pirmediat.fi,radiosun.fi,shl.fi,urjalansanomat.fi,ylojarvenuutiset.fi###cookie_disclaimer.cm_ui
+akaanseutu.fi,alueviesti.fi,kiuruvesilehti.fi,lempaala.ideapark.fi,lvs.fi,olutposti.fi,orivedensanomat.fi,pirmediat.fi,radiosun.fi,shl.fi,urjalansanomat.fi,ylojarvenuutiset.fi##+js(aeld, scroll, innerHeight)
+! anna.fi
+anna.fi##+js(set, tcfAllowUseCookies, true)
+! historianet.fi,tieku.fi
+historianet.fi,tieku.fi##.topscroll-banner
+historianet.fi,tieku.fi##+js(set, cicc.cookie_cat_functional, true)
+historianet.fi,tieku.fi##+js(set, cicc.cookie_cat_statistic, true)
+historianet.fi,tieku.fi##+js(set, cicc.cookie_cat_marketing, true)
+! tweakers.net
+tweakers.net##+js(set, tweakersConfig.userConfiguredConsent.youtube.approved, true)
+tweakers.net##+js(set, tweakersConfig.userConfiguredConsent.omny.approved, true)
+tweakers.net##+js(set, tweakersConfig.userConfiguredConsent.pcnltelecom.approved, true)
+tweakers.net##+js(set, tweakersConfig.userConfiguredConsent.googlemaps.approved, true)
+tweakers.net##+js(set, tweakersConfig.userConfiguredConsent.streamable.approved, true)
+tweakers.net##+js(set, tweakersConfig.userConfiguredConsent.soundcloud.approved, true)
+tweakers.net##+js(set, tweakersConfig.userConfiguredConsent.knightlab.approved, true)
+! yle.fi
+yle.fi##+js(set, yleConsentSdk._consentSdk._embedded_social_media, true)
+yle.fi##+js(set, yleConsentSdk.show, noopFunc)
+! philips-hue.com
+philips-hue.com##+js(set, cockieConsentManagement, noopFunc)
+! podimo.com
+podimo.com##.cookie
+podimo.com##+js(set, window.scrollTo, noopFunc)
+! kiertokanki.com
+kiertokanki.com##body:style(overflow: auto !important;)
+kiertokanki.com##.modal-backdrop
+kiertokanki.com##.modal:has(#eprivacy)
+! flip.bg
+flip.bg##div[id$="_modal_outer_"]:has(> .cookie-modal)
+flip.bg##.modal-open:style(overflow: auto !important;)
+! 50plusmatch.fi
+50plusmatch.fi##.compensate-for-scrollbar:style(margin-right: 0 !important)
+50plusmatch.fi##.fancybox-container:has(a[onclick="document.getElementById('privacy_more').style.display='block';"])
+! kymppikatsastus.fi (necessary and functional for chat)
+kymppikatsastus.fi##+js(set-cookie, cookielawinfo-checkbox-necessary, yes)
+kymppikatsastus.fi##+js(set-cookie, cookielawinfo-checkbox-toiminnalliset-evasteet, yes)
+kymppikatsastus.fi##+js(set-cookie, cookielawinfo-checkbox-analytics, no)
+kymppikatsastus.fi##+js(set-cookie, viewed_cookie_policy, yes)
+!------------------------Rules for international sites------------------------!
+! *** easylist:easylist_cookie/easylist_cookie_international_specific_hide.txt ***
+flvw.de###ConsentMsg
+wiki.resolution.de###Cookie-pop-up
+azubiheft.de###CookieModal
+hoklartherm.de###Cookie_content
+vdk.de###DSE
+tickets.vibus.de###DatenschutzFooter
+schwarzenbacher-kundl.at###NotificationWrapper
+audi-technology-portal.de###PrivacyManager
+eco-logisch.be###SiteOverlayPanel
+kiel-canal.de###a-banner
+medicis.be###acc-bottom
+kodinerds.net###adConsent
+soellner-reisen.de,volbers.com,weingut-meintzinger.de,zehnthof-weickert.de###agever
+lehner-versand.ch###am-cookie-bar
+die-mitte.ch###ampsandConsentElement
+skylineatlas.de###area2
+autoscout24.com,autoscout24.de###as24-cmp-popup
+brack.ch###b2c-consent
+ingelheim.de###banny-banner-outer
+muehlenapotheken.de,stellenvermittlung-nordkirche.de###bg-datenschutz
+xinedome.de###block-consent-block
+dreid.com###boxHolder
+tsuche.com###c-c
+afilio.de###c-overlay
+reinigungsberater.de###cC
+reinigungsberater.de###cCoverlay
+ggg-film.de###ca-layer
+ncm.de,outdoorfieber-shop.de###cb
+finanz-forum.de###cb82a-modal
+lfu.bayern.de###cbanner_container
+lfu.bayern.de###cbanner_overlay
+trendaward.de###cc-box
+sleep-hero.de###cc-card
+mixable.de###ccDialog
+prostata-hilfe-deutschland.de###ccModal
+deutsche-pop.com###ccm
+sslplus.de###ccmRoot
+stacherhof-zillertal.at###ccmodal-container
+hfg-gmuend.de###cconsent-modal
+rotary.de###checkCookieOkBox
+evas-teeplantage.de###ck-overlay
+kawai.de###ckctrl_box
+tschopp-holzbau.ch###claimer
+meteoradar.ch,meteoradar.com,metradar.ch###closeonaction
+beianrufsex.com,toolbrothers.com###cm
+civilpetition.de,freiewelt.net###cmmodal
+postleitzahl.org###cmp
+jmmgc.com###cnotice
+aktienportal1.de,eifelmoselzeitung.de,ep1.de###coPolicyMain
+direktbroker-fx.de###cologindiv
+ruegenmagic.de###confirm_cookies
+reka.ch###consent
+swissquote.ch###consent-form-root
+ihk-akademie.de,strawpoll.de###consent-overlay
+hotel-kornspeicher.de,michur.com,strickfairliebt.de,trebaxa.com###consent-tool
+beckmann-kg.de,kraemer.de###consentLayer
+claravital.de,dondo.de,trampolin-profi.de###consentmanager
+pharmadecor.be,van-overstraeten.be###consentmodal
+data-inside.de###container-banner
+schnelle-online.info###container-banner-over
+content.de###content-de-hinweis-cookie-richtlinie-blocking
+adressmonster.de###cookie
+querstarter.de###cookie-bar
+app.taxfix.de###cookie-consent-banner-container
+pokalkoenig.de###cookie-permission-modal
+brf.be###cookieDashboard
+waldbuehne-berlin.de###cookieManager
+avadas.de,sw-distribution.de###cookieManger
+sportauspuff-direkt.com###cookieNoteAGB
+wifikaernten.at###cookiePolicy
+westend61.de###cookie_Modal
+allyourhorses.de###cookie__consent
+laborjournal.de###cookie_popup1
+fondsprofessionell.de###cookieauth
+helaba.com###cookiebannerWrapper
+digitfoto.de###cookieds
+badoexen.de,bic-zwickau.de,blacksun2.com,br-so.com,br-so.de,butterspender.de,ceramic2000-5.de,die-aufbau.de,die-jugendkirche.de,dtk1888.de,fantashion.de,ferienhaus-liste.de,fricke-ritschel.de,frikadelli-racing-team.de,gelsenkirchen.de,gub-ing.de,ik-schneeberg.com,integion.de,klein-toys-shop.de,landhaus-burgdorf.ch,manfred-kunze.de,megabill.de,mentner-krane.de,partnerschaften-weltweit.de,r-pharm.de,revell.com,simpilio.de,ternitz.at,ternitz.gv.at,tragwerk-und-statik.de,walddorfhaeslach.com,worpswede24.de,zev-energie.de###cookiehinweis
+degum.de###cookiemanager
+volkswagen.be###cookiemgmt
+neumaerker.de###cookienote-bg-layer
+sweez.ch###cookiesBanner_background
+sweez.ch###cookiesBanner_wrapper
+wieisdemol.be###cover-div
+ewtc.de###cp
+ruegenwalder.de###csdialogbd
+ruegenwalder.de###csdialogmd2
+rentalens.ch###dabar
+guetsel.de###dark
+eve-audio.de###dark-privacy
+speisekarte24.de###dasu
+groener.de###data_privacy_popup
+weserwohnwelt.de###datenschutzBalgeNew
+paschal.de###decker
+entschuldigung.net,schulkreis.de###divModalScreen
+squale.ch###divcookiepolicy
+freiewaehler-hessen.de###dscookiebar_consent
+fairgarage.com,frohsinn-assenheim.de,gesangverein-assenheim.de,koegel-touristik.de,liste-finanzamt.de###dsgvo
+frivol.com###dsgvo-alert
+koegel-touristik.de###dsgvo_bglayer
+studierenplus.de###elOD1QB00O
+care-center.de###eprivacyModal
+first-class-and-more.de###fade
+fussballmafia.de###fbm_ga_dlg
+gutfried.de###fog
+apotal.de###footer
+pokewiki.de###gl-topbar-bg
+antonius.de###google-splash-screen
+rapool.de,softwarenetz.de###grayout
+urlaubstage.de###growls
+auktionssuche.de,baumpflege.ac,garten.ac,heim-und-haustiere.de,schwedisch-translator.de###hinweise
+can-apparatebau.de,ib-walz.de,intecprint.de,lions-club-kreuztal.de,rohrbach-elektrotechnik.com,schnabl-engineering.de,ssb-siegen.de,zentrifugen-service.de###hmc
+aqualip.de###idHrSysGipsDivBlackTransparentOverlay
+d-secour.de###importantMessages
+herole.de###incredible-cookie-furnace-generator
+bongu.de###infoBar
+alfafit.eu###info_cookies
+inovartis.eu,lankes-zirndorf.de###infobar
+jazzkeller69.de###jkjazzWidget
+dasgibtesnureinmal.de###jm-head
+newslichter.de###karmaSplash
+art-studios-inprogress.de###kb-container
+look-one.de###keks
+spaness.de###kekt-overlay
+mistercurtain.de###lock
+gorreri.com###loggedbar
+ltur.com###lturPageOverlay
+gutschild.de###mask
+fh-muenster.de###matomo-wrapper
+markenbaumarkt24.de###mb24klaro
+needforseat.de,robbenshop.de###mediameetsFacebookPixel--notification
+blauarbeit.de###messages-container
+meinegirokarte.de,vimpay.eu###modalBackground
+meinegirokarte.de,vimpay.eu###modalCookieAcceptance
+djshop.de###modalcontainer
+starmix.de###muffin
+hartz.info###my_privacy_policy
+newsaktuell.de###nacc-container
+newsaktuell.de###nacc-overlay
+flintbek.de,steffen-hanske.de###note
+parking.hamburg-airport.de###notificationBar
+parking.hamburg-airport.de###notificationBar_modal
+sh-mueller.de###notify
+rundfunkbeitrag.de###optInId
+happyweekend-club.com###page
+gasthof-bub.de###page_evconsent
+parkscout.com###parkteamcks
+picdumps.com###pcdc
+reddingo.ch###policy
+amt-kellinghusen.de,hemhofen.de,jetzendorf.de,mitteldithmarschen.de,weissenhorn.de###privacy-container
+sex-infos.ch###privacy-dislamer
+aqua-medic.de###privacy-info
+e-cooline.de###privacy-protection
+news5.de###privacyContainer
+garten-bienen.at###privacyCtrl
+dueren.de###privacy_policy_wrapper
+forsea.de,rasur-online.de###rahmen_ueber_die_ganze_seite_fuer_cookie
+forsea.de,rasur-online.de###rahmen_ueber_die_ganze_seite_rahmen_fuer_cookie_abfrage
+gab-umweltservice.de###rcpm
+gfoe-conference.de###sb-container
+sightseeing-kontor.de###sk-info
+servicebund.de###social-opt-in
+mydealz.de,preisjaeger.at###softMessages-list
+soldesign.de###solbox
+jetztlive.com###splash-consent
+urteile-gesetze.de###stickyFooter
+soeren-hentzschel.at###storage-notice
+eventfrog.ch###tf-modal-container
+autohauskenner.de###tools_consent_panel
+otto-office.com###top-notification_accept-machmichweg-guidelines
+vorablesen.de###tos_pp_update
+staatsbibliothek-berlin.de###tracking-info
+klinikum-neumarkt.de###tracking-message
+energie-und-management.de###trackingConsent
+tuigroup.com###tui-cc
+ru-geld.de###uca-info
+stadtwerke-herne.de,stadtwerke-witten.de###vinegar-bottle
+maengelmelder.essen.de###wdw-cookie-consent
+suhrkamp.de###whcm
+werksraeder24.de###wr24-cookie-notice
+printer-care.de###wwwschutz_div
+yatego.com###ycwBg
+yatego.com###ycwMo
+aok.de##.-open.csm
+filmmakers.de##.Aligner
+fertighaus.de##.BannerWrapper
+tempton.de##.ConsentBanner_locationFixture__vP_a4
+medizinfuchs.de##.ConsentHint
+ihk-bildungszentrum-cottbus.de##.DSGVO
+a-hausverwaltungen.de,ec-planegg-geisenbrunn.de,fdp-mh.de,hausmeister-service-augsburg.de,konzog-immobilien.de,mcg-org.com,metatag.de,rechtsanwalt-bultmann.de,ristorante-la-dolce-vita.com,tennis-kempten.de##.DSbox
+centrotherm.de##.H_s
+aqualip.de##.HrSys-Gips-iBoxDivOverlay
+jaguar.at,landrover.at##.Modal
+landrover.de##.NotificationBar
+snowfall-beads.de##.PopupOnTopScreen
+freshheads.com##.ReactModal__Overlay
+classpass.de##.SegmentManagerBanner_banner__deFuW
+awo-ruhr-mitte.de##.TrackingConfirm
+shopmate.eu##.W9qC
+covidtestzentrumleer.de,die-plank.de,haus-ladn.de,hutwiller.de,jumpropeberlin.com,leoschilbach.de,possmann.de,soka-onlineshop.de##._11VS8 > ._2obyY
+boulderhaus.net,haban-uhren.at,jumpropeberlin.com##._12d97
+basic-tutorials.de##._17rtltw
+classpass.de##._1IBPF6K6mUCIO_r-m80s3R
+boulderhaus.net,haban-uhren.at##._2mmyb
+touren-termine.adfc.de##.__ba843
+bundesheer.at##._sm_container
+propay.be##.accept_cookies_wrapper
+sojka-solutions.com##.active
+ajs-bw.de,kbaur-gmbh.com,tus-almena.de##.alertbanner
+muehlbacher.de##.alm--is-muehlbacher-cookie
+kedo.de##.amgdprcookie-modal-container
+ctt.de##.amgdprjs-bar-template
+aktieninvestor.net,klaus-grillt.de,promobricks.de,shop.ls-klima.de##.animate__none
+1avisum.de##.announcement
+peoples.ch##.app-message-modal-background
+bundeswehrkarriere.de##.autoprivacy
+sanko-solar.de##.avg-bar
+elbdeichcam.de,sne.at##.b-modal
+dfg.de##.bab-modul-cookie-consent
+shop.m-budget.migros.ch##.backdrop-filter
+roompot.de,vakantiegevoel.be##.background-fade
+laliberte.ch##.bandeau
+barzahlen.de##.banner-wrapper
+slewo.com##.banner_ack
+kontist.com,refurbed.de##.bg-opacity-50
+fembio.org,natur.com##.bg-wg-modal
+hausschuh.com,hausschuhexperte.de##.blackBody
+nijlen.be##.block-messages
+pott.de,wodka-gorbatschow.de##.blue-bg
+china-certification.com##.blueline-content-popup
+steiermarkschau.at##.blur-effekt-cookie
+galaxus.at,galaxus.de##.bnCqgP
+boerse-stuttgart.de##.bsg-header-warning
+bulthaup.com##.bulthaup-cookie-notice
+ziegert-immobilien.de##.bvknVl
+hey.car##.bxivGE
+galaxus.de##.bzTyHZ
+ineoskoeln.de##.c-alert
+abraxas.ch##.c-disclaimer--default
+frankenmarkter.at##.c-window
+brk-muenchen.de##.caBanner
+switchonshop.com##.cb
+sushiworldlouvain.be##.cc-banner
+fahrschulefuerth.de##.cc-info--closed
+bresser.de##.cc-modal-backdrop
+aussenrollo.de##.cc-screen
+boltenhagen.reisen##.cc_overlay
+bszam.de,poppen.de##.ccm-root
+bwv-stuttgart.de##.ce-cookieconsent
+bluesnews.de##.ce_rsce_oneo_fixed_note
+foodjobs.de##.ckOuter
+boley.de##.ckmsg
+sberbankdirect.de##.cm
+hifi-janssen.de##.cm-wp-container
+immoscout24.ch##.cmOzGN
+ihk-weiterbildung.de##.cmnstr
+ifaa.de##.cmnstr-outer
+verivox.de##.cmp-container
+textil24.net##.cmp_container
+schmidtnorm.at##.col-12 > div > div > .container
+lbbw.de##.component-data-protection-consent
+hawesko.de##.consent-cookie-box
+lichtwelle-erkrath.de,neander-energie.de,stadtwerke-erkrath.de##.consent-wrap
+hoeffner.de,moebel-kraft.de,sconto.de##.consentForm__container
+schwaebische.de##.consent_bar
+medistore.at##.consent_box_wrapper
+dbna.com##.consentbar
+weinzeche.de##.container-cookieconsent
+nomadays.de##.container-fixed-cookie
+andinet.de##.coo
+planet-beruf.de##.coo-con
+webcountdown.de##.cooBubble
+crossnative.com##.cookie-consent_overlay__SIXMM
+oeh-wu.at##.cookie-container
+matec.de,myconvotherm.de##.cookie-inquiry-wrapper
+idw.de##.cookie-manager__overlay
+moebel-rieger.de##.cookie-permission-background
+finis-feinstes.at##.cookie-shadow
+bodenaturkost.de##.cookieBanner_start
+parlament.gv.at##.cookieContent
+giffits-werbeartikel.at,giffits-werbeartikel.ch,giffits.de##.cookie_opt_in--wrapper
+proaurum.de##.cookiefirst-root
+weddyplace.com##.core-modal
+aok-erleben.de##.csm_wrapper
+barfuss.it##.css-1ienoy8.e1gi2aal2
+legalbird.de##.css-1tbvhrn.jss86
+hotelheller.de##.css-jyar7y
+propellermann.de,wg-elbtal.de##.cw_ov
+discover-utrecht.com##.dSWqfk
+jazzkeller69.de##.dark
+bbbank.de,berliner-volksbank.de,psd-aufwind.de,psd-berlin-brandenburg.de,psd-rhein-ruhr.de,psd-west.de,sparda-b.de,vrbankeg.de##.darken-layer
+deutsches-meeresmuseum.de##.data-consent
+haus-des-meeres.at##.data-privacy-settings-container
+senninger-metzgerei.at##.data-protection
+deutschestheater.de,komische-oper-berlin.de,theater-essen.de##.dataprotection
+hilzingen.de##.datenschutz
+dosamigos-ibb.de##.dd-cl-window
+digital.uni-passau.de##.dfm_cookie
+durchblick-durch-daten.de##.dialog-container
+spaetzlesuche.de##.dialog-no-close
+siedlungswerk.de##.dimmer
+groener.de##.disable_page_background_div
+grundlosproductions.ch##.disclaimer-component
+meinwomo.net##.divb
+laboremus.de##.drawer-cook
+la-palma24.info##.dvcookies
+ethno-klamotten.de,guru-shop.de,kolonialstilmoebel.com,tagesdecken.org##.dwlightbox-wrap
+ticketswap.de##.e3v4wli0
+hoyer.de##.ece7gmw2
+mywellness.de##.epp-modal
+evofitness.de##.euc0rq24
+bruggerhof-camping.at##.euf_overlay
+mietrechts-angriff-nein.ch##.f3cc
+sellpy.de##.fAalHQ
+tcs-mymed.ch##.fTwgjs
+eubos.de##.fade.modal
+bosch-stiftung.de##.fc_banner
+jba.gv.at##.fcc-cookie-modal
+sensorshop24.ch##.firstline
+knubel.de##.floating
+wort.lu##.footer-legal
+unifilm.de##.form-dsgvo
+frankonia.de##.fr-c-message
+melectronics.ch##.gArzUh
+galaxus.at,galaxus.de##.gIRfBN
+pfister.ch##.gTHyyR
+sportxx.ch##.gZTLuJ
+topfit-badgriesbach.de##.gatewayBar
+delano.de##.gatewayContainer
+delano.de##.gatewayWindowShade
+as-bremen.de,channel21.de##.gedepiar-info
+hygienical.de##.gewerbe-info
+deutschlandticket.de##.ghoviH
+siegelklarheit.de##.glasspane
+dreissigacker-wein.de##.global-background
+nebenan.de##.goodhood-components__nANBU
+services.gov.gr##.govgr-cookie-banner
+galaxus.de##.gzlDA-D
+elisabethenquelle.de,vita-cola.de##.hc-notice
+forum-ddr-grenze.de##.headeroverlay
+medienportal-sachsen-anhalt.de##.hinweis
+berlin-buehnen.de##.hylo-cookie-banner-general
+hey.car##.iUYzcs
+peoples.ch##.id-cookie-consent
+fh-aachen.de,hfwu.de,hs-coburg.de,hs-esslingen.de,hs-kempten.de,oth-regensburg.de,puresurfcamps.com,tum.de,uni-tuebingen.de,uni-ulm.de##.in2-modal__blackbox
+zuckerjagdwurst.com##.index-module--backdrop--3DX5v
+zuckerjagdwurst.com##.index-module--wrapper--5PhqF
+baeumler-gartentechnik.de,biener-viehhandel.de,blumenecke-online.de,ddtaxi.de,foto-barth.de,gasthof-loebl.de,getraenke-wagner.de,mobiles-saegewerk-tribale.de,otto-mueller-gmbh.de,plasek.de,praxis-dr-hauer.de,rahuebner.de,schmutzkiller-martens.de,schreinerei-geller.de,sportstudio-aktiv.de,suedkaelte.com,tischlermeister-hahn.de,torautomatic.de,weinhaus-zum-spielberg.de,xn--gnther-bau-9db.com##.infobar-wrapper
+tc-multimedia.de##.ins-notices
+werder.de##.is-active
+chalkr.de##.iw-cc-w
+assura.ch##.iwWeUP
+chevalierramsay.be##.iziToast-wrapper-topCenter
+knowunity.de##.jYccXc
+eifel-antik.de##.jmg-googlemaps-dsgvo-notification
+bremer-gewuerzhandel.de##.js--modal
+freiwilligenzentrum-mittelhessen.de##.js-dialog-wrapper
+krautreporter.de##.js-flash-messages-container
+piqd.de##.js-flash_message-container
+oetker.de##.js-pd-main
+mydirtyhobby.de##.jss178
+tierchenwelt.de##.kick-kcm-overlay
+go-windows.de##.kit-sticky-privacy
+paetsch-bremen.de##.ksd-gdpr-settings
+fairmondo.de##.l-news-header
+receiver.de,steckdosenleiste.org##.legalAdvice
+psd-rhein-ruhr.de##.lightbox
+bbbank.de,berliner-volksbank.de,sparda-b.de##.lightbox--cookie-consent
+airitsystems.de##.limz_cookieConsent
+bonify.de##.lleMAd
+etz.at##.loader
+wirklichweiterkommen.de##.lsa-dialog
+denkwerk.com##.m-cookie-message
+ticketfritz.de##.main-modal-div
+leoprinting.be##.mainstick
+jobstairs.de##.mcd-dialog-backdrop
+nbr.de##.mceRow--relative
+md-bayern.de,md-bremen.org,md-hessen.de,md-mv.de,md-niedersachsen.de,md-nord.de,md-nordrhein.de,md-rlp.de,md-saarland.de,md-sachsen.de,md-san.de,md-th.de,md-wl.de,medizinischerdienst.de##.mdk-cookiebar
+smart-refresh.com##.meldung
+krasserstoff.com##.messageboard__container
+landkreis-cham.de##.mfp-ready
+aucon-steuerberatung.de,iaa.de##.mmcm-container
+arbrikadrex.de,businesshemden.com##.mnd-cookie-modal
+hotel-metropol.at##.mod-cr
+euclaim.de##.modal--background
+koelner-philharmonie.de,konzerthaus.de##.modal-mask
+bmfgroup.de,lagerbox.com##.modal-wrapper
+clark.de,goclark.at##.modal__overlay
+ibadual.com##.modalcomplete
+myeducation.de##.modals-overlay
+phoenix-media.eu##.modals-wrapper
+creatiefschrijven.be##.modalwrapper
+demirjasarevic.com##.mpp-container
+foundrax.de##.mpp-container-position-bottom-bar
+krs-recht.de##.mpp-is-open
+tecedo.at##.msg-banner
+kraehe.de##.nav-cookie
+biancodipuro.ch##.ngcookiewarning
+kaelte-nuhn.com,kvvks.de,messe-kassel.de##.note
+onb.ac.at##.notification-wrapper
+klimaanlage.at##.notificationArea
+horizon.tv##.notifications-manager
+civey.com##.notifications-module_notificationContainer_3zCTN
+gewinnspiele.de,lotty.de##.npco_overlay
+raiffeisen-duengershop.de##.nptbccm
+unkrautfuchs.de,wohlleben-sports.de##.offcanvas
+otto-office.com##.ooB-black-overlay-machmichweg
+online-services.rundfunkbeitrag.de##.optInContainer
+belgium.be##.orejime-Notice
+albatrueffel.de##.overlay-container
+staige.tv##.overlay-content
+koenig.de##.overlay__wrapper
+mibaby.de##.overlay_buddy
+querstarter.de##.page-lock
+avl-ludwigsburg.de,packster.de##.page-overlay
+sport2000rent.com##.pageOverlay
+krankengym-zentrum.de,s3nnet.de##.pcb
+recordsale.de##.personalization-request
+bluemonty.de##.pixelmate-big-wrapper
+daemmen-lohnt-sich.de##.popover-background
+keg-gruber.at##.popup-banner
+lagermaulwurf.de##.popup-notification
+muzamuza.com##.popup-window
+parlament.gv.at##.popupOverlay
+hometogo.de##.posf.react-onclickoutside
+r-m.de##.privacy-container
+getdigital.de##.privacy-wrapper
+klimaanlage.at##.privacyControlBadge
+eve-audio.de##.privacycookieA
+cronn.de##.privacyoverlay
+pendix.de##.px-consent-dialog
+pro-retina.de,regenwald-schuetzen.org##.q4u_cc
+flyer.be##.region-announcements
+karriere-suedwestfalen.de,regioactive.de##.reveal-modal
+regioactive.de##.reveal-modal-bg
+onleihe.de,sofatutor.com##.reveal-overlay
+moebel.de##.rounded-xl.shadow-lg.bg-white
+doa-info.de##.rstboxes
+deutscher-fenstershop.de##.rule_assept
+update-fitness.ch##.s-cookie-banner
+mietz.app##.set-all-components-to-display-none-and-use-this-div-to-create-a-symbol
+fit4projects.at##.setcookie
+foto-gregor.de##.sf-modal
+artforma.de##.sg-cks-backdrop
+artforma.de##.sg-cks-info
+space.net##.sg-cookie-optin-banner-wrapper
+pneuhage.de##.site-blocker
+autopark.de,mentzl.de##.site-header-overlay
+plus-gp-joule.de##.spinner
+shop.bernhardtmoden.de##.ssts_lightbox_dark
+shop.bernhardtmoden.de##.ssts_lightbox_wrapper
+adsomenoise.de##.svelte-sac9e3
+parlament.gv.at##.svelte-uo7olx
+erotik.com##.swinger-consent
+blitzrechner.de##.sygnal24-gdpr-modal-wrap
+dav-summit-club.de##.theme-cookie-hint
+trixxo-arena.be##.ts-header-message
+verwaltung.bund.de##.u-flash-message
+sparwelt.de##.ui-notification
+die-fliesenwelt.de,elektro-thielmann.de##.ui-pnotify
+die-fliesenwelt.de,elektro-thielmann.de##.ui-pnotify-modal-overlay
+lipault.at##.ui-widget-overlay
+uni-passau.de##.upa_cookie
+cebit.de,messe.de##.user-notes-notification
+verivox.de##.usercentrics-bg
+aiseesoft.de##.usernotice_pop
+sudoku-knacker.de##.v-bottom-sheet
+ichbindeinauto.de##.v-dialog__content
+gartentraeume-sachsen-anhalt.de##.vcModalTarget
+ei2.at##.vm--container
+ullstein.de##.wBffM
+bresc.com,bresculinair.com##.wall
+oeaw.ac.at##.warning-popup
+watson.ch##.watson-cookie-footer
+hatex24.de##.widget-EyeCatcher
+rademacher.de##.widget-EyeCatcher--dropzone---preset-fixed
+badkeramik.de##.wpt-cc-banner
+warthunder.de##.wt-cb
+oase-teichbau.de##.z-100
+grills.de,koempf24.de##.z-100.justify-center
+mein-gartenshop24.de##.z-100.py-6
+gartengeraete-onlineshop.de##.z-100.py-6.max-h-screen
+moebel.de##.z-\[1000\].fixed
+swu.de##[class*="-banner"]
+gutscheine.de##[data-ssr-consent]
+meinungsstark.de##[role="dialog"]
+cecil.de##consent-layer
+berlin-buehnen.de##div.md\:tw-prose-xl.tw-prose
+berlin-buehnen.de##div.tw-prose > .hydrated > aside
+lizy.be,lizy.eu##div[class^="PopupCookies-"]
+sunrise.ch##div[class^="cookieBanner_"]
+aok-erleben.de##div[data-module="cookie-manager-dialog"]
+polizei.bayern.de##div[id*="_modal_outer_"]
+prospekt.aldi-sued.de##div[id^="ppms_cm_consent_popup_"]
+smart-mail.de##div[style*="position: fixed; padding-top:"]
+bodenaturkost.de##div[style*="top: 0px; left: 0px; height: 100%; width:100%; position: fixed; background-color: rgba(0, 0, 0, 0.6); z-index: 1000; text-align: center;"]
+pcwarehouse.be##div[style*="width: 100%; background-color: #474747; padding-top: 0px; margin-top: 0px;"]
+staige.tv##fanpage-cookie-notice
+oebv.net##form > div
+staige.tv##player-overlay
+jobs.ams.at##sn-cookie-banner
+mainz.de##sp-consent-banner
+cuxlandparks.de##sw-cookiemessage
+bettybossi.ch,coop-city.ch,coop.ch##swc-cookie-banner
+! ---------- French ----------
+editions-eni.fr,red-by-sfr.fr,sfr.fr###CkC
+esprit.presse.fr###CookieConsentPopup
+chaft.fr###Cookieslaw
+extremes-loisirs.fr###ModalCokkiePrivacyHome
+domaine-du-montmarin.com###\#cookie-banner
+decrypterlenergie.org###alert-mention
+allisonpr.fr###alert-slide-down
+brokerdefense.net###alertcookie
+laurentwillen.be###background-section
+pradel-france.com###bagdpr
+ameliconnect.ameli.fr###bandeauConsentement
+unions-pompiers.fr###bandeau_consent
+skitour.fr###box_coo
+zdnet.fr###catfish
+sarralbe.fr###cc-bar
+markem-imaje.fr###cd_wrapper
+bulles-de-bonheur.com,emilie-fayet.com###checkBrowser
+compte-famille.bry94.fr###ciril-cookie-banner
+infojobs.net###cmpContainer
+assurland.com###consentManagementPlatform
+esma-artistique.com###cookie-mention
+netty.fr###cookieBar-container
+izmopics.com,smart-metz.fr,smart-mulhouse.fr,smart-nancy.fr###cookieConcernPanel
+maindruphoto.com###cookieManageMeRoot
+anthemis.fr,france-biomedical-confort.com,innovair.fr###cootra-overlay
+anthemis.fr,france-biomedical-confort.com,innovair.fr###cootra-popup
+espace-securise.cogevie.fr###dastra-widget
+nendaz.org###disclaimerCtn
+gold.fr###discreto
+cliffordchance.com###div_cc_cc
+lactease.com###doria_banner_content
+calendrier-lunaire.net###ezcc
+supermarchesmatch.fr###fevad
+dossin.be###gdprcontent
+assure.ameli.fr###idPopupWARecueilConsentement
+paninimania.com###id_acco
+arteradio.com###intro-rgpd
+laportecontemporaine.shop###ism-consent-box
+vosfactures.fr###jGrowl
+sondagenational.com###legalCookies
+fromagesuisse.ch###legalnotice
+ma-calculatrice.fr###manger-des-minis-gateaux
+skitour.fr###masque
+cuevana3.io###mdl-ads
+maxifoot.fr###mfcok1
+fidinn.com,hairprice.fr,lorexfor-bois-de-chauffage.com,novastore.fr,pfhts.com,tec-racing.fr###mi-container
+pss-archi.eu###miam_div
+lepointdevente.com###modal-background
+jobijoba.com###modal-cookies-wrapper
+lepointdevente.com###modal-overlay
+revmed.ch###ng-cc
+giappo.com###normativa
+altaprofits.com###notification
+store-opart.fr###ocw_conteneur
+ameliconnect.ameli.fr###pageConsentement
+cleasite.fr###panel-user-info
+pharmasimple.com###pharmabiscuit-popin
+ortc.fr###pm-overlay
+storyjungle.io###popinlayer
+lebouquetafricain.com,lebouquetespagnol.com,lebouquetoceanindien.com,lebouquetportugais.com,lebouquetrusse.com,lepackrusse.com,ortc.fr,studiocanal.tv###privacy-manager
+canalplus.com###privacy-manager-popin
+laposte.fr###privacy-overlay
+planetsurfcamps.com###ps-consent
+fromage-beaufort.com###rgpd-form
+extramiante.fr###rgpdmask
+limportant.fr###spopupCont
+serrure-pas-cher.fr###tarteaucitronRoot
+clinique-veterinaire.fr###userConsentPolicy
+terre-des-seniors.fr###valid-cookies
+fretlink.com##.CookieWarning-module--cookies--2BTTW
+pharmacieduboulevard-tarbes.pharminfo.fr##.NavigationTracker__container
+bmgproductionmusic.fr##.Notification
+avoriaz.com##.Rgpd
+talixo.fr##.TrackingInfoBox
+maprocuration.gouv.fr##.VoteDisclaimer_voteDisclaimerContainer__27qgl
+poool.fr##.Xj54sYVCrpQ88itWMgaP
+campingderozarmor.fr##._11VS8 > ._2obyY
+euroterrasse.com,maatura.fr##.alert-cookie
+ants.gouv.fr##.ants-208
+carrefour.pf##.bBXpsZ
+starofservice.com##.bLORfk
+plateforme.freelance.com##.banner-container
+cv.fr##.bg-gray-900.p-5
+axa.ci##.block_cookies
+mazout-on-line.be,proxifuel.be##.cl-banner
+lamaisondusureau.com##.cmp-popin
+10doigts.fr##.cmp-wrapper
+utilemploi.fr##.cognito2
+inc-conso.fr##.consent-modal-content
+immo-leclercq.com##.consent_info
+lirelactu.fr##.container-0-5
+nomadays.fr##.container-fixed-cookie
+parcoursintegration.be##.container_priv_state
+glamuse.com##.cookbar-overlay
+terrasana.fr##.cookie-policy-component_cookieContainer__2Zc7b
+topachat.com##.cookie-wall
+documentation.insp.gouv.fr##.cookies-management
+yproject.fr##.css-2od2onqEMX
+tv5unis.ca##.css-cgxmy8
+vavabid.be##.css-uuqc7b
+autopolis.lu##.dialog
+infogreffe.fr##.dijitDialogUnderlayWrapper
+tdl.fr##.dimmer
+vanguardinvestments.fr##.disclaimer_box
+molotov.tv##.eRnhI
+aeg-powertools.eu##.exarIq
+economiecirculaire.org##.ext-el-mask
+libmanuels.fr##.f1n0ctg9
+poool-staging.fr##.fade-in-enter-done
+alp-isolation.fr,cepim.fr##.fancybox-container
+pharmacie-principale-joinville.apothical.fr,pharmaciedumontmarin.pharm-upp.fr##.fancybox-overlay
+pharmacie-principale-joinville.apothical.fr,pharmaciedumontmarin.pharm-upp.fr##.fancybox-wrap
+radiosetv.com##.fck
+laborex-mali.com##.first-visit-alert
+terredactu.com##.floating-bottom
+weclap.fr##.front_web_app_main_menu_front-web-app-main-menu-component_front_show_cookie_container
+arlettie.com##.gCKAuc
+1jeune1solution.gouv.fr##.gdpr_consent_widget__2StXk
+mesvoisins.fr##.goodhood-components__2PKga
+unifrance.org##.headerInfos
+woodbrass.com##.hidden-sm.hidden-md.row
+cyu.fr##.hide_click
+sanarmed.com##.iGefxm
+moncompte.ants.gouv.fr##.info-ban
+apec.fr##.info-sanitaire
+toulousemetro3.fr##.janusbanner
+grand-hotel-dieu.com##.jinLyg
+bricomarche.com##.js-GlobalPopin
+inshallah.com##.jss125
+aromatech.fr##.layout-cookies
+aromatech.fr##.layout-cookies__notice
+antwerpen.be##.m-overlay
+les-aides.fr##.mask
+latendresseencuisine.com##.mdc-snackbar
+rueducommerce.fr##.micromodal-slide.modal
+fr-com.com##.modal-content
+jobijoba.com##.modal-wrapper
+lafi.fr##.nota
+cis-immobilier.com##.nq-rgpd-bar
+axa.ci##.overlay_axa
+groupama.fr##.perfModal
+envol-vert.org##.popup
+italiangourmet.fr##.popup--cookies
+montmorillon.fr##.privacy
+thiriet.ch##.pv
+hometogo.fr##.react-onclickoutside
+actionaid.fr,animation-patrimoine-bordeaux.com,anime-store.fr,anrat.net,bnpetrole.net,centre-tao.com,com-libellule.fr,didilz.com,dimo.cat,ebox-auto.com,fantasticable.fr,ibzjobs.com,laurore-bourgogne.com,parisensuel.com,pierreberthe.com,ril-immo.fr,servichene.com,vwfinances.com##.rgpd
+atream.com##.rgpd-modal
+didilz.com##.rgpd-overlay
+ray-jules.com##.s-cookie__modal92
+lelivrescolaire.fr##.s1d26ck5
+le-querrien.com##.scroll-fix__inner
+nqt.fr##.sgpb-popup-dialog-main-div-wrapper
+nqt.fr##.sgpb-popup-overlay
+vinted.fr##.sticky-footer
+louisedamas.fr##.styles_PopinBanner__8waX5
+utilweb.fr##.tarteaucitron-magic-block
+guest-club.fr##.tl-bottom-0
+vanguardinvestments.fr##.transbox
+easeus.fr##.usernotice_pop
+tang-freres.fr##.welcome
+zennio.fr##.z-50
+catalogue.bm-grenoble.fr##[style="position: fixed; z-index: 10;"]
+nouvelair.com##[style^="position: fixed; left: 0px; top: 0px;"]
+solidaris-wallonie.be##app-pop-up-tracking
+wizbii.com##div[class^="gdpr_consent_"]
+domitys.fr##div[style*="background-color: rgba(0, 0, 0, 0.5);"]
+mathematiques-lycee.com##div[style^="position: fixed; bottom: 0;"]
+gemppi.org##div[style^="visibility: visible; position: absolute;"]
+fournisseur-energie.com##ppn-cookie
+! Site Specific filters (used with $generichide)
+onvasortir.com###infocookies
+! ---------- Arabic ----------
+hunalibya.com,manasati30.com###info-bottom
+la3eb.com##.AllowCookiesDisclaimer_cContainerActive__2ykWr
+asharq.com##.PrivacyPopupstyled__PrivacyPopupContainer-uk07rq-0
+misa.gov.sa##.cookie-desclaimer
+mt.gov.sa##app-mt-cookie
+! ---------- Belarusian ----------
+kst.by###a--bar
+abw.by###accept_terms
+rosting.by###bg_popup
+flagma.by###cookie-agreement
+deal.by##.H84S0
+korter.by##.NNvvT
+shop.by##.Page__CookiesPopup
+lamoda.by,lamoda.kz##._root_1mejd_2
+emall.by##.accept-cookies_all__3tDno
+shate-m.by##.blocker
+atlant.by##.confirm-panel
+shate-m.by##.cookie-alert-show
+ostrov-chistoty.by,ostrov-shop.by##.modal-delivery-data-data
+ostrov-chistoty.by,ostrov-shop.by##.modal-delivery-data-data-w
+minsk2019.by##.notification-container
+profit.by##.policy-footer
+oma.by##.popover-wrapper
+dsk-brest.by##.privacy_block
+godzilla.by##.privat-policy-wrapper
+21vek.by##.styles_agreementWrapper__3VVtf
+kufar.by##.styles_wrapper__YA4CR
+bnb.by##.warning
+edostavka.by##[class^="accept-cookies"]
+! ---------- Bosnian ----------
+beotel.net,verat.net###policyDiv
+mojposao.ba##.BF0HTNC-Jc-b
+klix.ba##.consent_wrapper
+sarajevo-airport.ba##.cp-area
+bhansa.gov.ba##.main-modal
+rentl.io##.sc-4oup69-1
+! ---------- Bulgarian ----------
+bgline.bg###bar-message
+holiday.by###pop-up-policy
+adamieva.info###privacy
+tennis24.bg###private_info
+sofiacomputers.net###uslpolzvane
+farmhopping.com##.AcceptCondition
+tv.yettel.bg##.Gdpr_layout__w-Fse
+edmarkinternational.bg,ehype.bg,ledivin.bg,visvitalisbg.com,zora.bg##.bottom-freezed-bar
+bittel.bg,carmen.bg##.c-website-notification
+formabania.bg##.header-notice
+praktiker.bg##.info-message
+bagira.bg,hit-electronics.com##.js-consent
+icap.bg##.mpp-container
+adamieva.info##.overlay
+audio-guide.bg,medspa.bg##.popup-policy
+primetech.bg##div[style^="color: rgb(51, 51, 51); text-align: center;"]
+! ---------- Chinese ----------
+4gtv.tv,ftv.com.tw,ftvnews.com.tw###Allow
+dailyview.tw###PrivacyAlert
+on.cc###acceptDisclaimer
+ilong-termcare.com###announcementHeader
+microjet.com.tw###ck_footer
+5230.com.tw,china-motor.com.tw,gem-man.com.tw,longchain.com.tw,mitsubishi-motors.com.tw###cmc8007
+dancingcrab.com.sg,lingzhivegetarian.com,tong-le.com.sg,tunglokpekingduck.com,tungloksignatures.com,tunglokteahouse.com###covid19
+linkedin.cn###js-notification-wrapper
+quan-riben.cn###meerkat-wrap
+keysecurity.com.tw,ruey-shing.com.tw###policy-warning
+tri.com.tw###privacyPanel
+young-shine.com.tw###rot_ctr1_bod_blk6_custom
+peopledaily.com.cn###shengmingTip
+daigobang.cn###sp-cc
+cnyes.com##._1GCLL
+acinverter.com.tw,gemini.com.tw,grtech.com.tw,truecom.com.tw##.advbox
+adidas.com.cn##.banner-fixed-bottom
+boostroyal.cn##.bg-black.fixed
+shop.pxmart.com.tw##.cBajnV
+timberland.com.tw##.cSAxXz
+infiniti.com.tw##.c_128
+cvimall.net##.chpFL
+converge.cn##.compliance
+qiuwenbaike.cn##.consent-notice
+crocs.com.hk##.cookie-accept-desktop
+ctee.com.tw##.cookie-concent
+news.pts.org.tw##.cookie-flex
+hozonauto.com##.cookie-tips
+unity.cn##.cookies-permission_2kEyTVGb
+news.tvb.com##.cookiesAgreeContainer
+hkdecoman.com##.copyright-bottom-nav
+mydress.com##.fHpfyn
+mobile01.com##.fixedbottom
+lincoln.com.cn##.footer-floating-tab
+edomtech.com##.footerPrivacy
+linkedin.cn##.global-alert-banner
+deco.jotun.cn##.hXZzBP
+goodwe.com##.he_cook
+allwinfood.com.tw##.header-sheet
+timberland.com.tw##.hlnDOI
+store.logitech.tw##.iWuDjp
+justsleep.com.tw##.index__cookie-bar___2sPLb
+kuaiche.com.tw##.jRSQPH
+metroasis.com.tw##.jlyLdS
+cri.cn##.js-dialog
+ka-cn.com##.js_cookBox
+canva.cn##.jv5LaQ
+mook.com.tw##.modal-privacy
+eximbank.com.tw##.notifybar
+cloudtest.com.tw##.policy
+setn.com##.privacy-area
+hypersonic.com.tw##.privacy-box
+inside.com.tw##.privacy-wrap
+marieclaire.com.tw##.privacyDesc
+lynkco.com.cn##.privacyPolicy
+ruggon.com.tw##.privacy_box
+u-car.com.tw##.privacyforsite
+skbank.com.tw##.space-mobile-inside-side
+accupass.com##.style-746d86c4-cookie-container
+tvb.com##.tvb-cookies
+! ---------- Croatian ----------
+hbor.hr###JPO
+vobco.hr###blokDiv
+liberal.hr###footer
+iarh.hr###kukijima
+tzdubrovnik.hr###mygdprPopupHR
+goe.irb.hr,iskon.hr###ng-cc
+biserzagorja.hr,charlotte.hr,eper.com.hr,interpreta.hr###page-disable
+hoval.hr###pageAlertBox
+usporedi.hr###privacyPolicyModal
+buro247.hr###subscriptionPopupBottom
+plodine.hr###swgdpr
+crocontrol.hr##.SiteAnnouncement
+infranet.hr##.ccb__edit
+generali.hr##.cd-module
+rba.hr,rbainvest.hr##.cd-module-main
+flair.hr##.css-8g6x3l
+hapih.hr,podravski.hr##.dialog-widget
+ljekarna-pablo.hr##.gdpr-container-wrapper
+buket.hr##.kukip
+agroproteinka.hr##.notice-container
+splendido.hr##.o-data
+tifon.hr##.popup2
+player.hr##.popup_hr
+brodportal.hr##.privatnost
+ic2montecchio.edu.it##div[style^="z-index:9999;display:block"]
+! ---------- Czech ----------
+nejlevnejsi-barvy-laky.cz###Box1002
+peugeot-plzen.cz###RessCookieBox
+cd.cz###c22overlay
+mevatec.cz,vastap.cz###c_law
+nabrigadu.info###cc--main2
+lezec-shop.cz###ccmng
+czc.cz###ccp-popup
+ssls.cz###ckb
+fler.cz###cookies-bar-bottom
+drmcd.cz###cookies-bar-dialog
+estetika-novotna.cz###cookiesModal
+solarenvi.cz,zahradnikrby.cz###cs_bx
+zahradnikrby.cz###cs_bx_envl
+radioteka.cz###cs_stripe
+incomputer.cz###ctl00_ewpz1_mainTemplateCtrl_footer_FormCookiesManager1_pnCmNavBar
+mojeid.cz###cznic-cookiebar
+svetpradla.cz###disable-click
+qr.cz###eu-fck
+bioconsult.cz###eu_cks
+etc-shop.cz###id-modal-backdrop
+prodejbrusiva.cz###js-cc-banner
+startujemeweby.cz###lista
+melodiecb.cz###myAlert2
+svcatlas-bios.cz###myConsentCookies
+vspj.cz###nastaveni-soukromi-banner
+zdopravy.cz###open_preferences_center
+peugeot-plzen.cz###popupContactBG
+offroadforum.cz###pp_b
+timestore.cz###snippet-cookieSettings-cookieInfo
+budpefak.pef.czu.cz###snippet-cookiesConsent-cookiesconsent
+osu.cz###souhlas
+inetprint.cz###stickyFooter
+abcsport.cz,aspshop.sk,diamantovekotouce.cz,grilguru.cz,grilguru.sk,palnas.cz,svitidla-led-lighting.cz,yshop.cz###wr-c
+tipsport.cz##.Consentstyled__Banner-sc-1csem4q-1
+edenred.cz##.Footer
+denikreferendum.cz##.GDPRPopup
+portal.vecr.cz##.Modal__modal-shown__RiL3y
+denikreferendum.cz##.PopupBackground
+2gis.cz##._1hywetf
+cc.cz##.b-cookie-bar
+uni-max.cz##.bar-Info
+cool-pizza.cz,cooltura-group.cz,pizza-cool.cz##.blockUI
+arasport.cz##.blocker-cookies
+eberry.cz##.c-cookie-consent-bar
+webmaxx.cz##.c-layer
+generali-investments.cz##.c-modal-cookies
+remauh.cz##.c_modal
+klinkercentrum.cz##.cc-banner-wrap
+phoca.cz##.cc-trigger
+rychloseznamka.cz##.cok
+californianwines.eu##.commonPrivacy
+dejtip.eu##.conset-wrap
+fraus.cz##.container__body
+autocont.cz##.cookie-fade-window
+bidli.cz,diadny.cz,domibags.cz,ibdkurz.cz,shop-wedrink.com##.cookies-canvas
+vzdelanibudoucnosti.cz##.cookies-dialog-wrapper
+realbonus.cz##.cookies-popup-short
+menicka.cz##.cookies_panel_wrp
+aquapalace.cz,obchod.crew.cz##.cs
+my2n-public.cz##.css-pv997c
+gastrokuchyn.cz##.electro-overlay
+eshop.bmkco.cz##.es-cookies-bar-wrapper
+vzdusin.cz,wellmall.cz##.euc
+eshop.elkov.cz##.fixed-centered
+eujuicers.cz##.flash
+azimutyachts.cz##.floatFooter
+dotacedestovka.cz##.fnx__cc
+rsts.cz##.gc-App
+sousede.cz##.hJiARM
+profiplants.cz##.important-question__backdrop
+profiplants.cz##.important-question__dialog
+lekarna.cz##.inconsent-cc
+itrebon.cz##.info-okno
+kudyznudy.cz##.j-cinfo
+nevyhazujto.cz##.jss363
+flajzar.cz##.justify-content-center
+dopravniinfo.cz##.kSIOTQ
+portalprazana.cz##.lavwna
+robe.cz##.lgGaFu.sc-AxiKw
+interion.cz##.mcc-modal
+autodily-pema.cz,automedik.cz,dufy.cz##.modalBackdrop
+autodily-pema.cz,automedik.cz,dufy.cz##.modalWindow
+pujckabingo.cz,pujckablesk.cz,pujckaliska.cz##.optinWrapper
+stapety.cz##.site-msg
+30tidennivyzva.cz,akvarista.cz##.sm-wrapper
+spravazeleznic.cz##.szdc--modal
+seznamzpravy.cz##.szn-cmp-dialog-container
+sallyx.org##.topInfo
+fler.cz##.ui_widgets_unit-cookies_pref2022_footer
+transformacni-technologie.cz##.upozorneni
+cernilov.cz##.userSettings
+esotravel.cz##.warning-modal
+coalsoft.cz##[style^="position: fixed; left: 0px;"]
+nacesty.cz##div.popup-shade
+supraphonline.cz##div[style^="text-align:left; padding: 10px 20px; background-color: #FFF;"]
+ceske-sjezdovky.cz##form[style^="display:block;position: fixed;"]
+! ---------- Danish ----------
+shipadvisor.dk###POPUPS_ROOT
+el-klinikken.dk###c-l-widget
+turtlespeed.dk###consentUI
+csgo.mtsl.dk###cookie-accepter
+autohjornet.com###cookiesAcceptWrapper
+bild-online.dk###fixedDiv2
+bygningskultur2015.dk,udlodningsmidler.dk###lbmodal
+udlodningsmidler.dk###lbmodal-overlay
+medarbejdernet.dk###modalLayer
+mybanker.dk###mybanker-cookie-consent
+royaldanishacademy.com##.b14cc
+autohjornet.com##.backgroundCoverWrapper_caw
+sygeforsikring.dk##.bg-sd-blue-secondary
+netbridge.dk##.blockbkg
+ah-finmekanik.dk##.border-body--bottom
+dustin.dk,dustinhome.dk##.c-overlay
+pendix.dk##.cc-dialog
+flex-media.dk##.cookie-modal-container
+shoppinstreet.dk##.custom-popup
+annonceupload.dk##.footer
+indkast.dk##.hp_cc
+hortiadvice.dk##.infobar-wrapper
+arndalspa.dk##.js-alert-privacy
+globase.dk##.mtsnb
+invita.dk,unoform.dk##.notificationbar
+wunderwear.dk##.pop-overlay
+bestiloghent.dk##.popup-container
+hirschsprung.dk##.popup-msg
+get-digital.dk##.privacy-wrapper
+saltogpeber.dk##.push-up
+e-conomic.dk##.region-page-bottom
+septima.dk##.septimacc
+marpro.dk##.sh-page-notice
+akurat.dk##.wpc-overlay
+akurat.dk##.wpc-popup
+1508.dk##div[class^="Cookies-module-"]
+! ---------- Dutch ----------
+kantoorartikelen-arnhem.com###BlurryBackground
+menziszorgkantoor.nl###Cookiewall
+maan.nl###IDFcookieV3
+voetbalnederland.nl###T1
+anwb.nl###TRCO-application
+recordplanet.nl###WGbeshrkgj
+huisjetehuur.nl###WGijgxkhjv
+impact-boek.nl###WGnzmheelh
+baronie.tv,baronietv.nl,buurtpas.nl###WGuzntteqh
+fiftyandmemagazine.be###acc-bottom
+grebbeberg.nl###acceptscp2012
+aktiefonline.nl###avg-container
+bewustnieuwbouw.nl###c-bar
+2doc.nl###ccm_notification_host
+autentiek.nl###ciWrapper
+blog.andwork.com###ckm
+pensioenleeftijdberekenen.nl###ckpol
+cdh.be###comp-jkmod7cm
+denhaagfm.nl,gld.nl,omroepwest.nl,omroepzeeland.nl,omropfryslan.nl,rtvdrenthe.nl,rtvnoord.nl,rtvoost.nl,rtvutrecht.nl###consent-plugin
+targetsupport.nl###consentModal
+ekoplaza.nl###cookie-prompt-modal___BV_modal_outer_
+l28.nl###cookie_popup_body
+doof.nl###cookiechoices
+hypotheek.nl###cookielaw_idf
+hypotheek.nl###cookielaw_idf_overlay
+molecaten.nl###cookies_modal
+pensioenschoonmaak.nl###cwet-wrapper
+weerstatistieken.nl###darker
+ergon.nl###ergcb
+rektoverso.be###ga-consent
+bigsnack.nl,plazafoodforall.nl,sligrofoodgroup.nl,vanhoeckel.nl###galleta-main
+medlon.nl###globalmessage_holder
+calorielijst.nl,dietenlijst.nl,koolhydratentabel.nl,receptentabel.nl###loading
+sicomputers.nl###mm-cc-wrap
+effeweg.nl###mp-popupoverlay1
+trafficshare.nl###notification
+ardanta.nl###notification-bar
+energiewonen.nl###stOverlay
+energiewonen.nl###stOverlayB
+picnic-supermarkt.nl###switch2
+bingoal.be###tocmask
+antwoordop.nl,schulinck.nl###udtDark
+webshop.nl##.Gdpr-module__gdpr___oxQjD
+unionriver.nl##.H_MhpZ
+woonfonds.mijnleninginzicht.nl##.ModalCookie
+optochtenkalender.nl##.PanelPopUp
+fleurametz.com,schrama.nl##._11ca_
+alex-soze.nl,almar-products.nl,leyuzu.nl,vanbeekkappers.nl##._12d97
+studeersnel.nl##._21b991318444
+alex-soze.nl,almar-products.nl,leyuzu.nl,vanbeekkappers.nl##._2mmyb
+studeersnel.nl##._cbad9bafd417
+gogoblog.nl##.absolute-dialog
+rotaserve.com##.avg
+vakantiegevoel.nl##.background-fade
+bibliotheeknijkerk.nl,bibliotheeknoord-veluwe.nl##.backgroundoverlay
+twentemilieu.nl##.balloon_notification
+trecnutrition.nl##.bar-display.container
+vspbv.nl##.block-121-1
+dnzb.nl##.bmaDyd
+zeelandnet.nl##.bnr-notice-curtain
+autovandaag.nl##.bo-cb-bar
+the-house.be##.bottom-20
+groene.nl##.c-notice
+qps.nl##.cc--window
+medischcontact.nl##.cc-popup
+bouter.nl##.cc_root
+vergelijk.nl##.cg-82
+vergelijk.nl##.cg-97
+dnzb.nl##.chJfPB
+werkenbijunica.nl##.ckOuter
+sportlink.nl##.cl_cookie_notice_container
+wehkamp.nl##.color-invert.font-size-small
+freo.nl##.component--freo-cookielevel
+tvgids.nl##.consent-backdrop
+seat.nl##.consent-wall-overlay
+nextenergy.nl##.cookie-components
+museum.nl##.cookie-overlay
+deroosbv.com##.cookie-permission-container-popup-backdrop
+ingsprinters.nl##.cookie-settings
+abmulderbv.nl,igorski.nl##.cookie-wall
+grandprixradio.nl##.cookies-popup-background
+grandprixradio.nl##.cookies-popup-dialog
+menzis.nl##.cookiewall
+drost.nl,eindesamenwonen.nl##.cookiewall-modal
+vakantieveilingen.be,vakantieveilingen.nl##.css-uuqc7b
+coppelaer.nl##.ct-modal
+iservoetbalvanavond.nl##.cuJDex
+azur-appartementen.be,castor-appartementen.be,regatta-appartementen.be,regatta.be,vonk-appartementen.be,vooruitzicht.be##.custom-consent
+iservoetbalvanavond.nl##.cvAQwL
+zoom.nl##.dialog_box__fai_1
+zoom.nl##.dialog_lightbox__1O1gC
+mora.nl##.dmccMakeSelection
+iservoetbalvanavond.nl##.eovNbj
+smulderstextiel.nl##.estrategy-cc-popup
+bedaffair.nl,thermostaat.eu,watispilling.nl##.fancybox-overlay
+vanweelbethesda.nl##.footer-msg
+aalst.be##.footer-notification
+urbanresort.nl##.freeze-overlay
+business.gov.nl##.hUapAL
+koienvijvercentrum.nl,stelcomfortshop.nl##.header-notice
+postnl.nl##.home > div > .hydrated
+independer.nl##.ind-cbar
+deofhet.nl##.index-module--container--15icm
+hypodomus-eindhoven.nl##.jc-bs3-container
+bcb-online.nl##.jqibox
+kennisopenbaarbestuur.nl##.jqmConfirm
+zoover.nl##.jss179
+zoover.nl##.jss236
+ketnet.be##.kRXOyz
+t-mobile.nl##.koekje-content
+werkenbijaldautomotive.nl##.krdknf
+leoprinting.nl##.mainstick
+ingeschrier.nl##.mention
+mijn.ditzozorg.nl##.mijn-cookie-consent
+ladybird.nl##.modals-overlay
+bibliotheeknijkerk.nl,bibliotheeknoord-veluwe.nl##.modalwindow
+calorielijst.nl,koolhydratentabel.nl,receptentabel.nl##.noblur
+cheaptickets.nl##.notificationContainer
+ziggogo.tv##.notifications-manager
+zeelandhome.nl##.onderbalk
+hardware.info##.oreo
+deurbeslag-expert.nl##.pin-b.fixed
+koentact.nl##.popmake
+myshipper.nl##.popup_main
+pro-alarm.nl##.popupbuilder-widget-content
+wehkamp.nl##.position-fixed
+prorail.nl##.prorail-cookie-popup
+pthu.nl##.pthu-dialog__modalbg
+gezondheidsplein.nl##.reveal-overlay
+asr.nl##.review-banner
+vanderlindentandartsen.nl##.row-md-split
+meistershof.nl##.rstboxes
+plenion.be##.s-cookie__modal32
+ketnet.be##.sc-gmmXAg.bfDcwE
+iservoetbalvanavond.nl##.sc-hGPBjI
+moderndentalcare.nl##.sh-page-notice
+claudiakookt.nl##.show.dark
+studiobybo.com##.site-notification
+maxaro.nl##.snackbar-container
+energiewonen.nl##.stPopup
+cameranu.nl##.stick-to-bottom
+voortgezetleren.nl##.style__SCookieBar-sc-uwjn3k-0
+visaquarium.nl##.tb
+eredivisie.eu,eredivisie.nl##.tdecc-content
+camperclubskeller.nl##.total-plus-privacy-policy
+nrc.nl##.user-confirmation-screen
+folders.nl##.v-bottom-sheet
+bolderman.nl,effeweg.nl##.via-modal--consent
+bongerscoaching.nl##.w3-animate-opacity > .w3-container
+bresculinair.nl,energiedirect.nl##.wall
+tuinartikelen.nu##.wsa-cookielaw
+gezondheidswinkel.nl##.z-50.bottom-2\.5
+ov-chipkaart.nl##[aria-describedby="cookie-banner-message"]
+zoover.nl##[data-cy="consent-wrapper"]
+npo.nl##ccm-notification
+landal.nl##consent-slide-in-component
+fyn.nl##cookie
+topradio.be##div[class^="CookieWall_"]
+waarmaarraar.nl##div[style="margin: 20px; padding-left:20px; padding-right:20px;border: 1px dotted #999999"]
+kromsnavelgedrag.nl##main ~ div
+! ---------- Estonian ----------
+rde.ee###freez_panel
+delfi.ee##.C-cookie-consent
+delfi.ee##.C-modal-overlay
+dominospizza.ee##.CookieBanner-background
+minu.etais.ee##.blue-bg
+parmetrans.ee##.cck\:cookie-notice__container
+squeeg.ee##.css-547crp
+teztour.ee##.dialog-window
+eestiloto.ee##.disclaimer-wrapper
+nostris.ee##.div_cooc
+aripaev.ee##.eVIZFv
+inrento.ee##.evocntc
+aripaev.ee##.gsOTvn
+ituudised.ee##.memKI
+tavid.ee##.modaal-overlay
+tavid.ee##.modaal-wrapper
+rahvaraamat.ee##.styles_cookieContainer__3pkMy
+otsintood.ee##.vd-message-wrapper
+cellbes.ee##.w1xroek9
+virtuaaltuur.tlu.ee##[style^="bottom: 0px; height: 50px;"]
+! ---------- Finnish ----------
+sportamore.com###__next > div.MuiBox-root:last-of-type
+viddla.fi###cookie-info-wrap
+stat.fi###cookie-modal
+ecoprint.info,karkkikuja.fi,konejatarvike.com###cp_popup
+virtasenkauppa.fi###gtmCookieBanner
+kiinteistomaailma.fi###km-ccw
+napsu.fi###napsu_cc
+br-automation.com###siwa-cookiebar
+apteekkiverkkokauppa.fi##.GBaseGDPRConsentDialog
+print24.com##.ModalSubModule_overlay__qg9IL
+lehtodigital.fi##.__ld_cookies
+hk.fi##.animate.mask
+vertaa.fi##.cg-97
+kirjastot.fi##.ch2-dialog-bottom
+valotehdas.fi##.cli-popupbar-overlay
+jenkki.fi##.container-agree
+hk.fi##.cookie-notice-lightbox
+huntteri.fi##.cookie_modal_overlay
+ladulle.fi##.cs-overlay
+valostore.fi##.css-13jewua
+ifolor.fi##.dialogBanner--align-bottom
+aatos.app##.eiabyj
+sporthammer.fi##.first-page-of-accept-cookies
+verkkokauppa.com##.gDFWtL
+madaracosmetics.fi##.gdprPopUp-root-1zT
+esri.fi##.gnav_notification-popup
+asiakaspalvelu.verkkokauppa.com##.hc-cookie-notification
+fyndiq.fi##.iNgGxy
+kicks.fi##.ir.iq.h
+pihlajalinna.fi##.jfCHNz
+tiendeo.fi##.kcLQzP
+kiitoskauppa.fi##.kiitos-cookies
+visitnaantali.com##.lms-consent-modal
+epressi.com##.lpcn
+tapahtumienkeskipohjanmaa.fi##.manage-consents-popup-wrapper
+kivikangas.fi,luurinetti.fi##.modal-cookie-consent
+mikkelinyt.fi##.ng-scope[ng-if$="customConsentManagement"]
+ilvesfoorumi.com,matkapuhelinfoorumi.fi,varasija.com##.notice--cookie
+kotipizza.fi##.notification-warning
+molnlycke.fi##.notifications
+cmore.fi##.onetrust-pc-dark-filter[style]
+cmore.fi##.onetrust-pc-dark-filter[style] + #onetrust-banner-sdk
+osta.museokortti.fi##.overlayclass
+vierumaki.fi##.overlays > .background
+suojakalvotukku.fi##.ribbon-280
+viherkuutio.fi##.rstbox
+tvo.fi##.s-dialog-position-bottom
+evl.fi##.site-overlay
+bussitkartalla.matkahuolto.fi##.svelte-77rizi
+timma.fi##.t-body-small.justify-content-center
+teosto.fi##.u-position-fixed.u-zindex-100
+clipper-teas.fi##.v--modal-overlay
+apollonian.eu##.v-snack--bottom
+varma.fi##.varma-footer-sticky
+vts.fi##.vt-disclaimer
+phonelife.fi##.w1xroek9
+sttinfo.fi##[class^="styledBarNotification__BarNotificationWrapper"]
+paivyri.fi##[style="width:100%;background-color:#F0F0F0;padding:10px;text-align:center"]
+bonusway.fi##bw-info-bar
+vertaa.fi##div > .cg-57
+espoo.fi,luvn.fi##div[aria-label="Denna webbplats använder webbkakor"]
+espoo.fi,luvn.fi##div[aria-label="Sivustolla käytetään evästeitä"]
+espoo.fi,luvn.fi##div[aria-label="This website uses cookies"]
+liiga.fi##div[class^="CookieConsent_container__"]
+lido.fi##div[class^="CookiesTooltipStyle_"]
+alasatakunta.fi,lapuansanomat.fi##div[style="position: fixed; bottom: 0px; left: 0px; right: 0px; display: flex; justify-content: center; z-index: 100000; transition: transform 200ms ease 0s;"]
+scandinavianphoto.fi##div[style^="opacity: 1; height: "][style$="px;"]
+linnunrata.org##div[style^="position:fixed;right:0;top:0;"]
+paivyri.fi##div[style^="style=width:100%;background-color:#F0F0F0;"]
+imt.fi##imt-consent-overlay
+lendo.fi##section[aria-label="Accept Cookies"]
+bittimittari.fi,hackthenetworks.fi,havaro.fi,kyberturvallisuuskeskus.fi,tietoturvamerkki.fi,traficom.fi,turvalistit.fi##section[class^="PrivacyConsentBanner_"]
+! ---------- Georgia ----------
+tkt.ge##.styles_acceptCookiesContainer__22cuY
+! ---------- Greek ----------
+xo.gr###CookieGdprConsentBanner
+lartigiano.gr###CookiesSection
+traderetail.gr###NMCookie_container
+restiasuites.gr###advert-once
+stigmap.gr###btm_terms
+whatsup.gr###ck_cookies
+eudoxus.gr###consentPlaceholder
+dod.gr###cookies_component
+kteohellas.gr###cookiesettings-dialog
+huli.gr###cp
+isyriza.gr###disclaimer
+insomnia.gr###elInsomniaCookieBar
+opto-center.gr###euc
+beautymark.gr###myPopup
+jamjar.gr###policy-notice
+global.bible###root > .eYGQDi
+bartuggi.gr###rstbox_2
+digas.gr###tc-pnl.opened
+delfinakia.gr###using-cookies
+ertflix.gr##.CookiePolicyInfo__container___2ddi-
+norlib.gr##.alertbanner
+voi-noi.gr##.bottombar
+dimotisnews.gr##.cc_obx
+electroholic.gr##.fix-bottom
+dustandcream.gr##.modals-wrapper
+lazoptics.gr##.new-cookie-supercontainer
+ntng.gr##.prvmodal
+novibet.gr##.setCookies
+sapsalis.gr##.termsnote
+cosmoteinsurance.gr##cookies-concent
+ertflix.gr##div[data-test="cookie-policy"]
+! ---------- Hebrew ----------
+diners.co.il##.message-container
+! ---------- Hungarian ----------
+alpinbike.hu,belteriajtok.hu,grandacs.hu,mester.hu###CLayer
+csillagpor.hu###a
+mobilarena.hu,prohardver.hu###accept-container
+logout.hu###accept_container
+hosch-kleber.hu###cinfo
+nmhh.hu###cookiewall-wrapper
+arenamall.hu###cp-bg
+arenamall.hu###cp-content
+tyukanyo.hu###cw
+solidusflotta.hu###cwarning
+nol.hu###didyou
+ingyen-van.hu###figyu
+szegedvaros.hu###footer
+mvm.hu###footer-consent
+telekom.hu###frame-modals
+liget.ro###jscookiemodal
+hrportal.hu###lableca
+ado1szazalek.com,boraszportal.hu,termalfurdo.hu###layout_advertising_bottom
+explo.hu,ksr.hu###marketingConsent
+liget.ro###page-mask
+momsport.hu###slider
+sportplaza.hu###spcookieoverlay
+gyakorikerdesek.hu###stialert
+e-cegjegyzek.hu###suti_csik
+leddiszkont.hu###sutidoboz
+bpn.hu,zalaon.hu##.ZebraDialog
+bpn.hu,zalaon.hu##.ZebraDialogOverlay
+whiskynet.hu##._2d_l9LWc
+awilime.com##.afcoo
+almaimotthona.hu##.aszfLayerContent
+rtlmost.hu##.bTPlRG
+avalonpark.hu##.c-widget
+royalora.hu##.cc-holder
+milanoajto.hu##.cdisclaimer
+fressnapf.hu##.cookie-base
+bkk.hu##.cookie-new-cnt
+foramax.hu,mp4bolt.hu##.ct
+obi.hu##.disc-cp
+fressnapf.hu##.grey-popup-layer
+rtlmost.hu##.hBHund
+jegveremklima.hu##.jegverem-cookie-wrapper
+tarifaexpert.hu##.lablec_suti_szabaly
+mall.hu##.legal-consent-wrap
+otpingatlanlizing.hu##.modal
+bonuszbrigad.hu##.newASZFLayer2
+4ig.hu##.not01-notification-container
+nepszamlalas2022.hu##.offcanvas-bottom
+atlatszo.hu##.popup_window
+brendon.hu##.position-fixed
+orvosilexikon.hu##.region-bottom
+bestdoor.hu##.rstbox
+telekom.hu##.sze2020-container
+casanetwork.hu##[style^="position: fixed; width: 39em; left: 50%;"]
+varfurdo.hu##div[style*="background-color: rgba(34, 34, 34, 0.8);"]
+rendi.hu##div[style="width:100%; background-color:black; padding: 8px; color:white; opacity:0.8; z-index:2000; position: fixed; bottom:0;"]
+laptopsystem.hu##div[style^="position:fixed; bottom:0;"]
+! ---------- Icelandic ----------
+laugavegshlaup.is,rmi.is##.Gdpr_gdpr__3CNbq
+stundin.is##.bottom-banner
+visir.is##.bottom-disclaimer
+crunch.is##.cooBox
+vodafone.is##.dismissable-terms
+landsbankinn.is##.e1vl7zat10
+sensa.is##.elementor-widget-icon-box.elementor-widget
+posturinn.is##.ewvKFq
+ruv.is##.h-40
+lesbian.is##.header-message
+heimkaup.is##.hos-bar
+sensa.is##.jet-popup__container
+swell.is##.p-5.z-10.fixed
+brim.is##.p-6.max-w-sm
+thecurrent.is##.px-40
+government.is,heilsugaeslan.is,stjornarradid.is##.session-text
+torshavn.fo##.sucd-banner
+! ---------- Indian ----------
+sbilife.co.in##.header-text-contener
+dinamalar.com##.quickslide
+jiosaavn.com##.site-message-container
+! ---------- Italian ----------
+whiteradio.it###Ck
+centrogamma.com###CosMooPopupMask
+culturagay.it###GPP
+amicidicasa.it,orchideaviaggi.it###G_info
+giovani.confindustrialeccoesondrio.it###POPUPS_ROOT
+opendotcom.it###RINGO-banner-backdrop
+ubuntu-it.org###\5f ubuntu-it_cookie_policy
+milano.corriere.it###_cpmt-iframe
+confcommercio.it###_it_nextmind_liferay_cookie_interceptor_CookieInterceptorPortlet_cookieInterceptorWrapper
+sudnews.it###absolute
+arearenting.it,athenaresort.com###acconsento-click
+affaronissimo.it###af-cw-box
+corsi.aiv01.it###age-verify
+centromedicobeb.it###alert
+webinforiv.it###banner
+indire.it###bannerContent
+agenziademanio.it###bannerInfo
+lattealberti.it###barra-policy
+cosedicasa.com###blur-bg
+ondarock.it###bottom-banner
+prezzoforte.it###bottombar
+corsi.aiv01.it###box-verify
+cruciverbaonline.it,giochigratisonline.it###boxRichiesta
+trapiantocapelli.it###byswind
+aldi.it###c-modal
+ladistanza.it###cMessage
+cassaforense.it,cfnews.it###cassaforense-cookies
+radiozammu.it###ccM
+markem-imaje.it###cd_wrapper
+emanuelaursino.it###cke_plc
+vita-a-timisoara.it###ckn
+leonardodicarlo.com###cm
+howrse.it###cmp-overlay
+infojobs.it###cmpContainer
+ederaspa.com###containerPrivacy
+edilportale.com###cookie-wall
+emiliaromagnasport.com,marchesport.info###cookieBarModal
+lifter.it###cookieDisclaimer
+melarossa.it###cookieMelaBanner
+radiofirenze.it###cookie_alert
+cliccasa.it###cookiemodal6547
+annunci.net###cookies_policy_bottom_left
+comune.info###cookup
+telea1.it###cooky_content
+aaannunci.it###dTcf
+sardegna1.tv###dcb-black-screen
+technonicol.it###disBot
+inartek.it###discl
+xtrawine.com###div-confirm-privacy
+opendotcom.it###divRINGOBanner
+donewifi.it###donewifi_cookie_advice
+solopornoitaliani.xxx###first-visit
+siti-isic.org###footer
+trovanumeri.com###hid
+gustosaricerca.it###holdon-overlay
+mariangelaguido.it###icegram_message_10971
+mondoprofessionisti.it###informativaPrivacy
+105.net,meteo.it,r101.it,radiomontecarlo.net,unitedmusic.com,virginradio.it###iubenda-cs-banner
+vmmotori.it###ll_banner
+vmmotori.it###ll_info
+programmitv.it###mag
+lifter.it###mask-overlay
+mato.muoversiatorino.it###messageBar
+molgroupitaly.it###mgit_notification
+e-tv.it,excelacademy.it###my-agile-privacy-notification-area
+meteomonopoli.it###my_privacy_widget
+demaiogroup.it,dematteogroup.it,gramscicafe.com###normativa
+tecnolatte.it###page_hider
+padovacalcio.it###pi_tracking_opt_in_div
+pusc.it###pixelfabrica-cs-banner
+sportrentino.it###popcookiesbg
+cinquantamila.it###privacy_advisor
+faxiflora.it###privacydiv
+la7.it###puthere
+rds.it###rds-cookie-preferences
+samaritansonlus.org###sB_injected
+netbet.it###sec-banner-div
+messinaline.it###slide-panel
+trova-aperto.it###sliding-popup
+paesifantasma.it###splashbox-advcorner
+digimobil.it###sticky-popup
+nlite.it,sigmastudio.it###system-message
+tuttoandroid.net###ta-cc-modal
+agronline.it###thepriv
+giornalelora.it###times-legal-notice
+isweb.it###trace-form
+leggiditalia.it###udtDark
+unipg.it###unipg-cookiechoice
+puglialive.net###visitor_info
+sexedchat.com###warning-popup
+gamershqitalia.it###wrapDisclaimer
+perungiorno.it###x1d_choise
+meyer.it###zf--alerts-panel
+muoversinpiemonte.it##.MIPConsent_full_screen__4uSwm
+riprovelox.it##._12d97
+riprovelox.it##._2mmyb
+oddschecker.com##._3uX5Ds
+abruzzo24ore.tv,capoluogo.com,economia24ore.it,energiarinnovabile.org,fosse-biologiche.it,gossip24ore.it,il24ore.it,ilmeteo24ore.it,matrimony.it,occhioallook.it,recensioni.tv,tuttosport24ore.it##._CL_main
+arbitrobancariofinanziario.it##.abf-no-cookie::after
+cerit.it,meteoeradar.it##.active
+intimerie.com##.alert-info
+bakecaincontrii.com##.alert-secondary
+vocetempo.it##.animate__animated.animate__slideInUp
+almaviva.it##.background-popup
+papersera.net##.black_overlay
+calcolostipendio.it##.bold_text
+bose.it##.bose-infoBar2016--fixedBottom
+finanziariatosinvest.it##.cc-link
+buyon.it##.cc_placeholder
+likesx.com##.cent
+mivoq.it##.check-policy
+fastwebdigital.academy##.ck_if
+iosi.nexi.it##.cl-banner-body
+ebible.it##.clm
+bontempi.it##.colaw-div
+centrogamma.com##.contPopup
+unirc.it##.content
+parmacalcio1913.com##.cookie_window
+relaxbanking.it##.cookies-consent-banner_cookiesConsentBanner__jswGH
+fashionunited.it##.css-1gjquoa
+bancobpm.it##.css-jyakza
+sevensalerno.it##.cw_container
+balarm.it##.cyn-banner
+dentisti-italia.it##.di-banner
+klepierre.it##.explicit_consent_backside
+itpornit.com##.first-visit
+beta.easytag.it##.freeprivacypolicy-com---nb-interstitial-overlay
+lsdlibri.it##.fullscreen_box_legale
+ilmanifesto.it##.info-banner
+mysmartbank.it##.info-bar-wrapper
+accademiadellacrusca.it##.info-privacy
+lsdlibri.it##.inibisci_sfondo
+pizzastories.le5stagioni.it##.inview_animate
+bofrost.it##.iziModal-overlay
+estendo.it##.jconfirm
+estendo.it##.jconfirm-cell
+justjoin.it##.jss218
+justjoin.it##.jss243
+processos.tribunais.org.pt##.justica-cookie_bar
+tv.quattroruote.it##.jw-popups
+ari.it,supermeteo.com##.message
+emiliaromagnasport.com,marchesport.info##.modal-backdrop
+telethon.it##.modalMessage
+tuttoamerica.it##.modal__overlay
+pasinigioielli.com##.modals-wrapper
+degoosta.com##.mpp-is-open.mpp-box
+pizzastories.le5stagioni.it##.mx-0.w-100.row
+initalia.it##.notice-wrap
+1950americandiner.it##.np-cookies__screen
+fieraforli.it##.ns-box
+optigura.it##.o-modal
+stihl.it##.optin
+oggi-in-tv.it##.privacy-msg
+italradio.org##.privacyStatement
+peer.tv##.rain1-cp-container
+rds.it##.rds-modal-popup
+casevacanza.it##.react-onclickoutside
+prelex.it##.rstboxes
+ship2shore.it##.s2s-cookie-banner
+juzaphoto.com##.s_bluebox
+ogrtorino.it##.sc-dxgOiQ
+tahititourisme.it##.site-footer__cookies
+arcafondi.it##.slds-backdrop
+arcafondi.it##.slds-modal
+roadnroll.it##.sqs-announcement-bar-custom-location
+closeup-archivio.it##.stickyFooter
+faradsrl.it##.svv-cookie-banner-container
+telcel.com##.telcel-banner-aviso-cookies
+ecommerce.it##.twcc__notice
+edizionicrescere.it##.ui-dialog
+edizionicrescere.it##.ui-widget-overlay
+anisearch.it##.urgent-msg
+papersera.net##.white_content
+70-80.it##.wordpress-gdpr-privacy-settings-popup-container
+koucla.it##.xcb
+yap-app.it##.yap-cookie-bar
+aicanet.it,eurojackpot.it##.yui3-widget-modal
+icdl.it##.yui3-widget.popup-view
+livorno-effettovenezia.it##.zaki_pch_banner
+legea.it##[style^="position:fixed;"]
+alpian.com##div[class*="-cookiesSection-"]
+giocabet.tv##div[id^="cntnt-"]
+centrocommercialetuscia.it##div[style=" width: 100%; margin: 0 auto; padding-top: 5px; padding-bottom: 5px; font-size:12px; z-index: 20"]
+mimprendo.it##div[style="background-color:#E2E2E2;float:left;position:fixed;top:50px;left:0; height:60px;width:100%;"]
+enerpoint.it##div[style="padding:10px;background:#f77900;text-align:center;font-size:12px;margin-bottom:15px;"]
+gomme-auto.it##div[style="position: fixed; z-index: 999; bottom: 0px; left: 0px; right: 0px; margin: 0px auto; max-width: 960px; min-width: 360px; overflow: hidden;"]
+buydifferent.it##div[style^="position: fixed; bottom:"]
+email.it##script + div[style^="background: #000000;"]
+! ---------- Japanese ----------
+lintec.co.jp###FooterPolicy
+jasis.jp###agreePanel
+hyojito.co.jp###agreement-area
+jbpo.or.jp###c_policy_wrap
+legoschool.jp###cookie-config
+juken-mikata.net###cookieAlt
+keisei.co.jp###cookiePolicy
+tokyostarbank.co.jp###floatArea
+wisdom.nec.com###func-cookie
+jaa.or.jp###js-gdpr
+3ple.jp###layer_board_area
+olfa.co.jp###modal-content
+osaka-seitetu.co.jp###modal-overlay
+officemaili.com###mordal
+tdk.com###onetrust-banner-sdk
+mainichi.jp###pi-pc-all-popupleft
+honeys-onlineshop.com###policy_modal
+bing.com###thp_notf_div
+maruchiba.jp###tmp_wrap_info_box
+narita-koi.com##.CookieConfirm
+tokyotokyo.jp##.annotation-area
+knb.ne.jp##.atention_cookie
+nhk.or.jp##.bottom_optout_announce
+ebarafoods.com##.consent_c
+camp-fire.jp##.cookie-policy-agreement-notification
+his-mobile.com##.cookieagree
+kani-honke.co.jp##.cookiediag
+octoparse.jp##.cookies_cookies__dWLfO
+imobie.jp##.fixedbot
+adidas.jp##.footersticky
+kaigolink.com##.hJUMlZ
+jpsearch.go.jp##.jps-privacy-confirmation
+nttpc.co.jp##.l_cookieAgree
+tedate.jp##.m-snackbar-notice
+osaka-seitetu.co.jp##.mod_message
+predge.jp##.modal-gdpr
+jma.or.jp##.modal_content
+jsps.go.jp##.notepanelWrap
+molnlycke.jp##.notifications
+techbang.com##.notify_stickie
+nhk.or.jp##.nw-modal
+tohotheater.jp##.optIn
+hicbc.com##.optinfo
+17wcee.jp##.panel
+mamastar.jp##.personalInfo__area
+fincity.tokyo##.policy
+ferrotec.co.jp##.policyFix
+layers.co.jp##.r-footer-cookie
+osaki.co.jp##.reuse-component
+picrew.me##.st-Terms_Wrapper
+adlittle.jp##.tarteaucitronBeforeVisible
+kankocho.jp##.v-snack--bottom
+vroid.com##div[class^="GDPR__Container-"]
+! ---------- Korean ----------
+kayak.co.kr###Ag6p
+ganttpro.kr##.global-statement
+! ---------- Latvian ----------
+muzikasinstrumenti.lv###PrivacyPolicy
+salidzini.lv###consent-box
+kurierbps.pl###cookie-inner
+kalkulatori.lv###euCCwin
+gov.lv,sargs.lv###manage-cookies
+csdd.lv###message-bar
+baltspaper.lv###msg-wrap
+latexport.lv###notification
+polymerclaylatvia.com###privacy-pop-up
+pmd.on.lv###z-terms-of-use
+bdct.lv##._2cB_o
+80.lv##._3YAeN
+torno.lv##.contentPadsL
+liepaja.lv##.dHtkwr
+baltacon.lv##.dnPvmg
+madaracosmetics.lv##.gdprPopUp-root-1zT
+investoruklubs.lv##.gsOTvn
+roly.lv##.jq-toast-single
+roly.lv##.jq-toast-wrap
+rct.lv##.mpp-container-position-bottom-bar
+reaton.lv##.policy
+ecobaltiavide.lv##.popup-filter
+aio.lv##.popup-message
+via-s.lv##.priv
+maminuklubs.lv##.set_cookie
+! ---------- Lithuanian ---------
+vokiskaideja.lt##.basicLightbox
+florinus.lt##.blah_blah_blah_holder
+lastmile.lt##.css-ctqdot
+bananacar.lt##.notification-wrapper
+vejutechnika.lt##.parent-container-idgy
+go4pro.lt##.wu_container
+! ---------- Norwegian ----------
+seher.no,sol.no,start.no###__next > div[class^="css"]
+dagsavisen.no###consent-container
+telenor.no###global-overlay-background
+nordiskporselen.com###kjeks
+eiendomsmegler1.no,sparebank1.no###opt-in
+steinhandel.no###topbar
+haugesundbk.net##.GDPRcontainer
+ngi.no##.bcc-container
+dagbladet.no##.cIwTNh
+seher.no##.cbxMtF
+smakmagasinet.no##.coco-wrapper
+dagbladet.no##.css-pp-box
+ruter.no##.fixed-messages
+oslosportslager.no##.footerCurtainCookie
+online.no##.global-overlay-background
+sveip.no##.kake_wrap
+nrk.no##.nrk-masthead__info-banner
+minnemi.no##.popup-overlay
+bighorn.no##.pp-announcement-bar-bottom
+helthjem.no##.schibsted-bar
+nordiskporselen.com##.w3-black
+nitedals.no##.wf-section
+direktesport.no##[aria-label="Informasjonskapsler"]
+vy.no##div[aria-live="polite"]
+norsk-tipping.no##div[data-test="cookie-toaster"]
+aftenposten.no##div[id^="sp_message_"]
+digiforms.no##fieldset
+! ---------- Philippines -----
+paynet.ph###data-privacy
+dunelondon.ph###header0
+edge.pse.com.ph###policy
+sfasemicon.com.ph###privacyPolicy
+kvarta.ph##.cookie_cookie__vw_fs
+nocontact.manilacity.ph##.jconfirm-light
+nocontact.manilacity.ph##.jconfirm-row
+insularlife.com.ph##.memo
+toysrus.com.ph##.popup-modal
+vistaland.com.ph##.privacy_modal
+axa.com.ph##.top-content-bar
+! ---------- Polish ----------
+dymosklep.pl###BoxCookie
+coig.com.pl,derma-line.waw.pl,digitalart.pl,grekop.pl,inter-arch.eu,metmax.com.pl,mijo.pl,rajdowiec.waw.pl,willastaropolska.pl,wypozyczalnialaptopow.pl,wypozyczalniaprojektorow.pl###BoxLine
+biznes.plus.pl###CAPPDialog
+pekaofaktoring.pl###COOKIE
+panasonic.pl###CP_Layer
+film.wp.pl,money.pl,pudelek.pl,sportowefakty.wp.pl,wiadomosci.wp.pl###WP-cookie-info
+heyprint.pl,treevi.pl###__cp
+lahtipro.pl,profix.com.pl,proline-tools.com.pl,tryton-tools.pl###alert_bar
+expozdrowie.pl###alert_popup
+tvgo.orange.pl###analyticsModal
+fitnessclubs4.pl,myfitnessplace.pl,zdrofit.pl,zdrofitzdrowemiejsce.pl###backdrop
+amarone.pl###bannerMSG
+codziennikfeministyczny.pl###bazinga-muffin-container
+posilkiwchorobie.pl###blur
+alipaczka.pl###bottom-charm
+zgrzyt.info###box-polityka-pr
+cda.pl###box_info
+geoblog.pl,simba.com.pl###cContainer
+promib.pl###cInfo
+drogi.gddkia.gov.pl###c_popek
+are.waw.pl###cc_popup
+televio.pl###ccnst__main
+webd.pl###cffc
+almamarket.pl,kozy.pl###claw
+pobieralnia.org###close
+generatorkodowkreskowych.pl###cn
+centrumrowerowe.pl###consentsPolicyDialog
+przyspiesz.pl###container_vsm
+krsystem.pl###cook
+eastnews.pl###cookie-frame
+przystanki.bialystok.pl###cookie-info-overlay
+binkowskihotel.pl###cookieWarningNew
+esbank.pl###cookie_info_es
+net-s.pl###cookie_info_sel1_n
+norgips.pl###cookiemodal
+parkwodny.pl###cookies-baner-wrapper
+zegarki-diament.pl###cookies-info-modal_background
+zegarki-diament.pl###cookies-info-modal_wrapper
+follak.com.pl,programnaukizachowania.pl,triopo.pl###cookies-law
+eostroleka.pl###cookiesRodo
+dowhan-nieruchomosci.pl###cookies_text
+drony.net,gadzetomania.pl,komorkomania.pl,otabletach.pl###cop
+polskatimes.pl,strefabiznesu.pl###cross-dialog
+federacja-konsumentow.org.pl,pewnykantor.pl###cu_bar
+przepisy100.pl###cxcx
+kinonh.pl###div_ac
+elektrykasklep.pl###ftccbcmd
+idream.pl###garua_cookie_consent_popup
+zmiksowani.pl###holdon-overlay
+bauer.pl###iframePopupContainer
+skleprycerski.com###important-notice
+sosulski.pl###inf
+eurocash.pl###info
+foto4u.pl,smakizycia.pl###info-bar
+bdl.lasy.gov.pl###infoDivContainer
+himountain.pl,opteam.pl,orszak.org,pwr.edu.pl###info_c_box
+eteacher.pl,speedtest.pl,wirtualis.pl###info_container
+webelite.pl###infobar
+motomoto.pl###itlbox
+flatart.pl###kekse
+lotto.pl###klauzula_informacyjna_nakladka
+berdsen.pl###kqs-box-tlo
+berdsen.pl###kqs-tlo
+borelioza.vegie.pl###menubar
+tupowstalapolska.pl###menusDiv
+almapress.com.pl,twojliquid.pl###message
+rankinglekarzy.pl###message-top-wrapper
+ministerstworeklamy.pl###messagePopup
+archiwa.gov.pl###message_box
+jak-ksiegowac.pl###message_wrap
+tripolo.pl###miastoszkolen
+capri-lublin.pl###mod98
+bilka.com.pl###mod99
+restauracjaverona.pl###modal-cookie-overlay
+redbullmobile.pl###more1
+dsdik.wroc.pl###mpopdw
+dsdik.wroc.pl###mpopup
+ttv.pl###msgLayer
+polskicaravaning.pl###myModalpol
+fiatklubpolska.pl###navbar_notice_1
+diyaudio.pl###navbar_notice_11
+mondeoklubpolska.pl###navbar_notice_12
+lovekrakow.pl###new-policy
+cefarm24.pl,e-zikoapteka.pl,gwp.pl,paramedyk24.pl,tanie-leczenie.pl###notice_bar
+sii.org.pl###notifycookie
+bdb.com.pl###plansza
+krosnocity.pl###polcia
+omcar.pl###policy
+archiwumalle.pl,basketzone.pl,getem.pl,kosmetykizameryki.pl###polityka
+pkspolonus.pl###popek
+poznan.pl###popup-peka
+erhem.pl###popupContact
+lca.pl,legnica.pl###popupDiv
+malachowski.pl###poscookielaw
+fizyka.org###pp
+browar-tenczynek.pl###privacy-policy-info
+ile-kalorii.pl###privacyMessage
+gazeo.pl###reg_all
+ftz.pl###roar-alert-wrap
+tanibus.com###rodo
+mojekatowice.pl###rodo-bar
+rp.pl###rodo-popup
+blog4u.pl###rodo_all
+proline-tools.com.pl###rodo_cookie
+geoportal.dolnyslask.pl###saycookie
+midparts.com.pl###simple-modal
+opel-sklep.com###simple-modal-overlay
+nocowanie.pl###site-navigation ~ div
+pepper.pl###softMessages-list
+sonriso.pl###sonriso-cookies
+epuap.gov.pl###specialbox-info
+gazetapolska.pl,gpcodziennie.pl###swsmodal
+gazetapolska.pl,gpcodziennie.pl###swsoverlay
+menmania.pl###times-legal-notice
+buliba.pl###tooltip-hook
+gerlach.org.pl###top0info
+greenmate.pl,negrasport.pl,shopii.pl,sklep-muzyczny.com.pl,sporto.com.pl,srebrnystyl.pl,termokubki.com.pl###topInfoContainer0
+acom.pl,aleokulary.com,dedalus.pl,epapierosylodz.pl,jupi24.pl,lunamarket.pl,maxsklep.pl,miadora.pl,negrasport.pl,pcoutlet.pl,scyzoryki.net,seger.pl,sklep.wodna-kraina.pl,zizako.pl###topInfoContainer1
+areatour.pl,dacter.pl,uni-tech.pl###topbar
+libra.com.pl###under_footer
+greatone.pl###zamknij_cookies
+empikbilety.pl,goingapp.pl##.CookieBar_cookieBar__3zsIk
+paynow.pl##.Cookies-module-cookies_121T
+mednavi.pl##.CookiesNotice
+bookland.com.pl##.GDPR-Popup
+policja.pl,przystanekhistoria.pl##.JSWrapper
+odrabiamy.pl##.Rodo_blur__cnKdN
+motopedia.otomoto.pl##.SRaBM
+reportaz.polskieradio.pl##.TermsOfUseModal_modalWrapper__3bWPX
+talixo.pl##.TrackingInfoBox
+przemyslprzyszlosci.gov.pl##._consent
+remedium.md##._cookie_cookies-panel__LMI9a
+genetico.pl##.abcd
+mpastucha.pl##.ad-modal
+alcalia.pl##.alcalia-cookies
+odsluchane.eu##.alert-flash
+poznanairport.pl##.alertBoxes
+tvporno.pl##.avwp-av
+tvporno.pl##.avwp-av-overlay
+foodjobs.pl##.b-modal
+castorama.pl##.background-overlay
+merida.com.pl##.ball-cookie
+marketerplus.pl##.bar--bottom
+organicvillage.pl##.basicLightbox
+mastersintime.pl##.bg-green-200
+bip.szczecin.wsa.gov.pl,bip.wroclaw.wsa.gov.pl##.bip-cookie-modal
+doladowania.orange.pl##.bm-privacy
+uwr.edu.pl##.bs-cookies__overlay
+discovereurope.esn.pl##.c__cake
+prohibita.pl##.ciachbtm-wrap-container
+vod.warszawa.pl##.cjcVDw
+forumrowerowe.org##.ckg
+agora.pl##.cm-overlay
+aterima-work.pl##.cm-popup-wrapper
+pracuj.pl##.cmulq7z
+sklep.szprychy.com##.config-messages
+rozetka.pl##.consent-layout
+ercomer.pl,miodykrupiec.pl,motohid.pl,planszostrefa.pl,questsport.shop,skarbyroztocza.com##.consents
+isystemy.pl##.cookie-div-main
+bezpiecznedane.gov.pl##.cookie-popup-modal
+lotto.pl##.cookie-wall
+ksiazece.pl,lech.pl,lechpils.pl,tyskie.pl,zubr.pl##.cookies--cloak
+uzdrowiskociechocinek.pl##.cookies-at
+uzdrowiskociechocinek.pl##.cookies-at-overlay
+supermedia.pl##.cookies-banner_component
+neo24.pl,neonet.pl##.cookiesBlockScss-backdrop-1fz
+neo24.pl,neonet.pl##.cookiesBlockScss-root-1Sg
+pracuj.pl##.cookies_cvyuaxh
+pracuj.pl##.cookies_dqxz9lg
+macronext.pl,stockwatch.pl##.cppa
+cyfrowyparking.pl##.css-1rixstu
+rocketjobs.pl##.css-1v1jtfq
+health-platform.online##.css-8gx3yz
+dajar.pl##.css-jjd2se
+hellohr.pl##.css-py4a32
+health-platform.online##.css-um19vb
+orange.pl##.css-yco2eg
+zdzis.com##.dDWWPk
+izodom2000.pl##.dialog-lightbox-widget
+pwpw.pl##.dialogblockrodo
+komornik.pl##.divModalDialog
+home.pl##.edxzdK
+czarymary.pl,drukowalnia.pl##.ek-bar
+ksiegaimion.com##.eucl
+rynekpierwotny.pl##.ezk280v3
+factcool.com##.fScrmm
+blu.com.pl##.faceted-overlay
+auto-motor-i-sport.pl,menshealth.pl,motocykl-online.pl,runners-world.pl,womenshealth.pl##.filter-modal-background
+ladnepodatki.pl##.fixed-bottom-right
+odjechani.com.pl##.guest_warn
+konkolnieruchomosci.pl,pani-teresa.com.pl,rw2010.pl,sprezyny-strozyk.pl,szkolkikornickie.pl##.head-page-information
+antyczek.pl##.header-banner
+plenti.app##.iBYipj
+polskitarg.pl##.iRhDdN
+goodie.pl##.ib
+melex.com.pl##.info_c_box
+nik.gov.pl##.informationBar
+czasnaherbate.net##.jconfirm
+st.pl##.jq-cookies
+ncplusgo.pl##.js-messages
+bhp-inka.pl##.js-modal-cookies
+ohmydev.pl##.jss256
+funclub.pl##.jss359
+praca.gov.pl##.klauzula-background-wyszarzony
+oferta.lotto.pl,raportdekra.pl##.landend-infobar-light
+mediaexpert.pl##.layout > .wrapper
+rejestracja.makro.pl##.layout-mask
+onholidays.pl##.layout_cookiesRule__2QouX
+kuehlschrank.com##.legalAdvice
+oex.pl##.m-cc
+dywanik.pl##.max-w-full
+kinomoc.com##.message-alert
+nasz-gabinet.pl##.message-window
+pepper.pl##.messages
+bezpiecznedane.gov.pl##.modal-backdrop
+eltrox.pl##.modal-gdpr
+autoefl.pl##.modal-legal
+hardware24.pl##.modalRODO
+aisko.pl##.module-header_notice
+mojbrzuch.pl##.monit
+advatus.com,advatus.pl,ip-sa.pl##.myModal-box
+dlapacjenta.pl,lomixshop.pl##.notice_bar
+urbancity.pl##.notification-alert-wrapper
+ucando.pl##.notifications
+eltrox.pl##.overlay-gdpr
+bilkom.pl##.policy
+revolution.pl##.popup-background
+mein-schauinsland.de##.popup-top-header
+masz.eu##.popupContent
+toczeniewdrewnie.pl##.position-bottom
+webprojekt.biz##.ppc
+hejto.pl##.py-4.px-6.items-center
+rankomat.pl##.rank-cookie-bar
+prk24.pl##.rk-cookie-overlay
+mas-sport.pl,minecraft.org.pl,motorlublin.eu,nastopy.pl##.rodo
+scanner.com.pl##.rstboxes
+home.pl##.sc-1ykjjm8-0.lofKxQ
+cire.pl##.sc-btewqU
+bazarynek.pl##.send_akt
+kamanet.pl##.sh-page-notice
+opel-sklep.com##.simple-modal
+grzejszczak.pl##.sook
+steamaster.pl##.steamaster-cookie-container
+konsbud-hifi.com.pl##.sticky-footer
+biznes2biznes.com##.stickynote2
+buki.org.pl##.styles_show__3i6kx
+anstar.edu.pl##.tarnow-cookies-wrapper
+kurnik.pl##.tcell
+parking-serwis.pl##.top
+omegasoft.pl##.ui-widget-content
+optyczne.pl##.w3-modal
+basenyogrodowe.pl##.x13eucookies
+strefamocy.pl##.x13eucookies__backdrop
+hejto.pl##.z-1200.border-primary-main
+pzkosz.pl##.zgoda_na_przetwarzanie
+shopee.pl##.zsav9a
+pracuj.pl##[data-test="modal-cookie-bottom-bar"]
+kurnik.pl,otoprzychodnie.pl##[style^="position: fixed; left: 0px; top: 0px;"]
+swiat-agd.com.pl##[style^="top:0;left:0;right:0;"]
+info-car.pl##app-accept-cookies
+pirolam.pl##body > div[style*="100%"]
+ingbank.pl##cookie-policy
+elektrotechnikautomatyk.pl##div[class^="GDPRCookieInfo_"]
+magentatv.pl##div[class^="styles__HeaderInfoBar"]
+flex.orange.pl##div[id^="CookiesPopup_"]
+elektrozysk.pl##div[style*="background:url(images/cookies_tlo.png)"]
+tge.com.pl##div[style=" background-color: #FAFAFA; border: 1px solid gray; border-radius: 10px 10px 10px 10px; box-shadow: 1px 1px 3px 0 gray; margin: 0 auto; padding: 10px 25px; width: 930px; background-color: #FAFAFA; border: 1px solid gray; border-radius: 10px; moz-border-radius: 10px; webkit-border-radius: 10px; box-shadow: 1px 1px 3px 0 gray; margin: 0 auto; padding: 10px 25px; width: 930px;"]
+radiofama.com.pl##div[style="border-top: 1px solid rgb(193, 193, 193); bottom: 0px; box-shadow: 0px -2px 4px rgb(193, 193, 193); position: fixed; padding: 10px 0px; left: 0px; right: 0px; text-align: center; width: 100%; z-index: 1000000; background-color: white;"]
+znak.pl##div[style="clear: both; font: normal 12px Arial; padding: 5px 0px 5px 10px;"]
+libertas.pl##div[style="clear:both;background:#fff;color:#000;padding:10px 3%;margin:0;position:fixed;bottom:0;border-top:1px solid #777;width:94%;"]
+devilpage.pl##div[style="padding:8px;"]
+kolbi.pl##div[style="position: fixed; left:0; right:0; bottom:0; height:34px; background-color:#eee; border-top: 1px solid black; z-index:1000; overflow: auto"]
+noclegi24h.pl##div[style="text-align: right; font-size: 9px; padding-right: 20px;"]
+v10.pl##div[style="width: 100%; background-color: rgb(0, 0, 0); margin: 0px; position: fixed; bottom: 0px; left: 0px; padding: 0px; height: 15px; line-height: 15px; text-align: center; color: rgb(255, 255, 255); z-index: 1000; font-family: Arial, Helvetica, sans-serif; font-size: 10px;"]
+linuxportal.pl##div[style="width: 100%; background: rgb(44, 48, 51) none repeat scroll 0% 0%; padding: 10px 0; color: #fff; border-top: 1px solid rgb(221, 221, 221); text-align: center; position: fixed; bottom: 0; z-index: 999999999;"]
+asd.pl##div[style="width: 100%;float: left;background: #fff;padding: 15px 0;position: fixed;top: 0px;left: 0px;text-align: center;color: #000;border-bottom: 1px #000 solid;z-index: 1000;"]
+noclegi24h.pl##div[style="width: 970px; border:1px solid gray; margin: 3px auto; color: gray; padding: 3px; text-align: center; font: 10px Verdana, sans-serif; background-color: #ffffff;"]
+e-elektron.pl##div[style="z-index: 100; font-family: Arial; font-size: 12px; text-align: center; opacity: 0.8; line-height: 12px; position: fixed; background: #f4f4f4; border: 1px solid #777; border-left: 0; border-right: 0; bottom: 0px; width: 100%; padding: 5px;"]
+salonroman.pl##div[style^="background-color: rgb(188, 153, 73);"]
+kinoteka.pl##div[style^="font-size: 13px;"]
+polomarket.pl##div[style^="font-size:12px;bottom:0;"]
+sfinks.org.pl##div[style^="left: 0px; top:"]
+mapa.targeo.pl##div[style^="position: absolute; z-index: 32000;"]
+androidmagazine.pl##div[style^="position: fixed; bottom:"]
+kurnik.pl##div[style^="position: fixed; display: table;"]
+footroll.pl##div[style^="position: fixed; left:"]
+vas.com.pl##div[style^="top:0;left:0;right:0;"]
+wszystko.pl##wpl-cookie-popup
+! ---------- Portuguese ----------
+mercatoemcasa.com.br###COOKIEBAR
+pinkluna.com.br###LGPD-StartEcom
+portugalglobal.pt###barramensagem
+assertivasolucoes.com.br###ck-container
+cliper.pt###cook
+ipn.pt###cookie-law-panel
+klminfo.com.br###cookiesmodal
+millenniumbcp.pt###ctl00_PoliticaCookies_divCookiesMsg
+doramogo.com,mangazim.com,superhentai.online###disclaimer
+bairroarte.com###dvcookie
+portal.fgv.br###fgv-lgpd
+icarros.com.br###isView
+boehringer-ingelheim.pt###it-eprivacy-root
+infopedia.pt###klaro-pe-overlay
+infopedia.pt###klaro-pe-window
+farmrio.com.br,pciconcursos.com.br###lgpd
+catracalivre.com.br###lgpd-box
+efacil.com.br###lgpdCookie
+infoescola.com###lgpd_banner
+midianews.com.br###lgpdbanner
+fapcom.edu.br,paulinos.org.br,paulus.com.br###loader-overlay
+cogna.com.br###lp-pom-box-528
+serasa.com.br###m-acc-description
+youcom.com.br###modal_aceiteycpol
+motorola.com.ar,motorola.com.br###motorola-cookies
+esmo.org###ng-cc
+quimis.com.br###politica-box
+caixa.gov.br###politicaPrivacidade
+vagalume.com.br###privacy-policy-div
+gauchazh.clicrbs.com.br###privacy-tools-banner
+webmotors.com.br###root > .sc-bdVaJa
+rtp.pt###rtpgeralcookiecontent
+tjmg.jus.br###termo-uso
+xalingo.com.br###wrng-agrmnt
+fiat.com.br##.CookieHolder_container__23g0s
+morana.com.br##.DykGo.sc-crzoAE
+magazineluiza.com.br##.FSeli
+talixo.pt##.TrackingInfoBox
+amaro.com##._container_1siqr_54
+terminalrodoviariobrasilia.com.br##.acceptPolice
+bancobmg.com.br##.acceptance-terms
+maistre.com.br,providenciadedeus.org.br##.aceite
+lisbonaha.pt##.adp-popup-wrap
+hugocursos.com.br,jogatina.com##.alerta
+curitiba.pr.gov.br,inaciomartins.pr.gov.br##.alertaCookies
+try.com.br##.bZEgfH
+consul.pt##.background-overlay
+unopar.com.br##.banner-fixed-box
+jornaldeitapetininga.com.br,oanhanguera.com.br##.banner_rodape_informando_cookies
+dgae.mec.pt##.bg-blue-grey-10
+webmotors.com.br##.bjRMar
+idec.org.br##.block-region-footer
+afestas.com.br##.bottom-popup-wrapper
+ecclesiae.com.br,videeditorial.com.br##.box-aceite-privacidade
+costanorte.com.br##.bswTsr
+escavador.com##.c-popup-consentimento
+treinaweb.com.br##.c_show
+pecattus.com.br##.caixa-alert
+nexojornal.com.br##.callahan-campaign
+petlove.com.br##.card-bottom
+suasvendas.com##.card.button-fixed
+pelando.com.br##.cbZEFj
+mercadoveggie.com.br##.center-bottom-fixed
+proximo.pt##.chakra-modal__content-container
+proximo.pt##.chakra-modal__overlay
+moto.com.br##.chakra-portal
+portaleds.com##.cke
+tuasaude.com##.consent-bar-wrapper
+piep.pt##.consentcookie_168_
+sescsp.org.br##.container-policy
+crimg.com.br##.containerAceite
+leitor.net,mangalivre.net##.cookie-notification
+asae.gov.pt,valecred.com.br##.cookiesModal
+bonitour.com.br##.css-19ioxj9
+bonitour.com.br##.css-rvc1fq
+aguadaspedras.com##.cxh7dt4uLi
+serralves.pt##.cxv51I18jhswcsDh
+jmonline.com.br##.dKgVKJ
+promobit.com.br##.e85akae0
+privalia.com##.fixedBar
+hotelgolfmarvimeiro.pt##.fixedblock
+bondfaro.com.br,quebarato.com.br##.floatingBarPrivacy
+posthaus.com.br##.foPcpY
+porcel.pt##.footer
+ericeirasurfskate.pt,istore.pt##.footer-fixed-bar
+cinemacao.com##.footer-warning
+imobiliariabaron.com.br##.gEBiRP
+jmonline.com.br##.gOHAgu
+compass.jeep.com.br##.gfUNpP
+buson.com.br##.gv-cookie-lgpd-alert-container
+discoverybrasil.com##.hCHxpg
+gazin.com.br##.hZeYRd
+chrysler.com.br,citroen.com.br,dodge.com.br,fiat.com.br,jeep.com.br,ram.com.br##.hub-info-bar-component
+gympass.com##.iTHgOb
+sioslife.com##.index-module--CookiesBanner--2ep-D
+honda.com.br##.info-notification
+santillanaespanol.com.br##.info-politica-all
+hyundai.com.br##.infobox-wrap
+theplayground.pt##.jWuEfS
+roly.pt##.jq-toast-wrap
+finistore.com.br##.js-show-reminder
+rede-expressos.pt##.jss4
+bauerexpress.com.br##.jss57
+idok.madeira.gov.pt##.jss68
+justica.gov.pt##.justica-cookie_bar
+magazineluiza.com.br##.kUgSEx
+agroolhar.com.br,classicline.com.br,cobasi.com.br,freitasbastos.com.br,institutophi.org.br,licitanet.com.br,miess.com.br,mprs.mp.br,olharconceito.com.br,olhardireto.com.br,olharjuridico.com.br,saber.com.br,unesc.br##.lgpd
+girolando.com.br##.lgpd-aceite
+sexlog.com##.lgpd-tooltip
+consorciocanopus.com.br,gazetafmcuiaba.com.br##.lgpdbanner
+revigres.pt##.llSNvP
+obramax.com.br##.lojaobramax-store-components-0-x-cookies-disclaimer
+loja.se.com##.lojaschneider-store-0-x-consentLgpd
+digital.estadao.com.br##.mdc-snackbar
+taosect.com##.modal-aviso-cookies
+vetnil.com.br##.modalCookies
+rockcode.com.br##.modalDialogAviso
+terra.com.br##.navbar-disclaimer
+terra.com.br##.navbar-modules-notifications
+livelo.com.br##.notifi
+agazeta.com.br##.notification-footer
+pbs.up.pt##.notificationBar
+ctcp.pt,isisoles.com##.notifino
+fazobetai.com##.one-button-cookies-popup
+band.uol.com.br##.opt-in
+logo.pt,tranquilidade.pt##.overlay-wrapper
+s1live.com##.p-3
+timing.pt##.policy
+impressora.com.br,impressorajato.com.br,madrugaosuplementos.com.br,vivona25.com.br##.policy-terms
+cursosgratisonline.com.br##.politicasPrivacidade
+churchsoftware.com.br##.popup-pro
+agazetafm.com,araraquaranews.com.br,slatual.com.br##.popup_footer
+gaz.com.br##.privacy-policy__popup
+starrcompanies.com.br##.privacy-warning
+rovitex.com.br##.rovitex-apps-0-x-cookieContainer
+blog.runrun.it##.sc-AxiKw
+direcaoconcursos.com.br##.sc-faada46b-0
+runrun.it##.sc-iBYQkv
+brainly.com.br##.section--3Yobl
+guiaimobiliario.pt##.site-wrap-cookie
+pernambucanas.com.br##.styles__CookieContent-sc-16mpd2a-0
+rdstation.com##.syn-container-banner1
+jornalopcao.com.br##.template-part-component-termos
+devmedia.com.br##.termos-politica
+tjmt.jus.br##.tjmtCookies__banner
+erecord.com.br##.toolkit-privacy-box
+r7.com##.toolkit-privacy-box__body
+cafelor.com.br##.x-cafeLor__lgpd
+rosenberger.com##.z7cmbnr
+shopee.com.br##.zsav9a
+plurall.net##[class^="PrivacyFooter_"]
+toyota.com.br##[class^="styles_molecule__cookies-"]
+privacy.com.br##alert
+ampli.com.br##cookie-police-bar
+lojasrenner.com.br##div[class^="ReactFooterCivilMark_notification_"]
+paodeacucar.com##div[class^="alert-cookiestyles"]
+americanas.com.br,shoptime.com.br,submarino.com.br##div[class^="lgpd-message-box_"]
+netmovies.com.br##div[class^="styles_acceptCookiesWrapper_"]
+telecine.com.br##div[data-testid="banner"]
+nike.com.br##div[data-testid="banner-cookies-terms"]
+csmarket.pt##div[style^="background:black; color:white; text-align:center;"]
+comoinvestir.thecap.com.br##div[style^="bottom: 0px; left: 0px;"]
+fepsa.pt##div[style^="height: 35px;"]
+offsbrasil.com.br##div[style^="position: fixed; width: 100%;"]
+apracas.pt##div[style^="text-align:center;position:fixed;"]
+! ---------- Romanian ----------
+viatransilvanica.com###accept-popup
+hotnews.ro###avert
+cursbnr.ro###avert_all_page
+adelaida.ro###barwrap
+hotero.ro###bgOver
+pcgarage.ro###ckieselect_i
+renting-tm.ro###ckn
+avertisment.ro###consentModal
+romedic.ro###cookbox
+pajurca.ro###cookiesmodal
+mediafax.ro###ot-sdk-btn
+foxracing.ro###overlay_gdpr_autentic
+foxracing.ro###overlay_gdpr_autentic_content
+kronikaonline.ro###page-mask
+nvt.ro###popupwindow
+fiscalitatea.ro,portalinvatamant.ro,portalprotectiadatelor.ro###terms
+mobilier-mirjan24.ro###window_overlay
+bancatransilvania.ro##.bannerWrapper
+certificat-covid.gov.ro##.bottom-banner.card > .card-body
+mailagent.ro##.cookie_modal
+asfromania.ro##.cp-overlay
+bestkids.ro##.gdprPolicy
+dulcisevents.ro##.header-notice
+dict.com##.lck-wrapper
+leroymerlin.ro##.loader
+caricaturist-la-evenimente.ro,greencleaning.ro##.m-wrapper-bg--glass
+promenada.ro##.popup-container
+verasys.ro##.sticky-alert
+altex.ro##.z-1050
+! ---------- Russian ----------
+abekker.ru###GDPR-container
+videosmile.ru###accept_q
+startsmile.ru###access_cookie
+spbtvonline.ru###agreeC
+clinic3.ru###agreedBanner
+ecolipetsk.ru###bg_popup
+bankinform.ru###bisCookieCompliance
+yvid.ru###cbb
+gorodperm.ru###cookb
+vladimir-city.ru###cookie_pp
+1000.menu###cookiescript_injected_wrapper
+printn1.ru###info-bott-message
+patee.ru###informer2
+fastbox.su###jsUsePersonalDataBlock
+upread.ru###kuk
+volnamobile.ru###message-block-cookie
+alfazdrav.ru###modalcookie
+forum-windows.net###ntf
+rosbank.ru###personal-data-processing
+hyundai-electronics.com.ru,iru.ru###policyBlockForFirstVisit
+antiplagiat.ru###policyConfirmation
+alter-science.info,alterexit.info,viziya.info###pop
+calltouch.ru###poppup-food
+sibur.ru###privacyPolicy
+rgs.ru###rgs-main-context-bar
+incom.ru###use_cookies_message-block
+bcs.ru##.Cbh_c
+metaratings.ru##.CookieAllowance_cookiesAllowance__78hAO
+sberdisk.ru##.CookieContainer_CookieContainer__1xqA-
+m.1gd.ru##.CookiePopup_overlay__1CXnV
+salonsecret.ru##.CookieWarning_root__Hyslm
+wowworks.ru##.CookieWindowstyle__block--1iXfq
+tass.ru##.Cookies_container__d0PFT
+meduza.io##.GDPRPanel-module-root
+afisha.ru##.GuwnG
+adrenalinecyber.ru,gamefuelmasters.ru##.H5Cmzb7vlc1Q28uw4l-Bv
+novayagazeta.eu##.Je58f
+etm.ru##.MuiAlert-standardSuccess
+maxi-retail.ru##.NotificationCookie_cookie__1jdBx
+citilink.ru##.PersonalDataConfirm
+mts.ru##.ToastRoot_wrapper__PFLGm
+detmir.ru##.X
+blablacar.ru##.ZueeA
+ratengoods.com##._1QGn
+novayagazeta.eu##._1iuln
+rocketbank.ru##._1zhzBm
+press.sber.ru##._20X2b
+culture.ru##._2GcIz
+alfadirect.ru##._2QU59
+afisha.ru##._2r-6f
+okko.tv##._313Cf
+voka.tv##._3u9jqhQV
+vsemayki.ru##._gTi8L8k
+2gis.ru,2gis.uz##._nlniiu
+bankprav.ru##.a-warning
+oreluniver.ru##.accept
+gastronom.ru##.accept-cookies-popup
+web-c.ru##.access-cookie
+culture.ru##.afWIX
+bancaintesa.ru##.agreement-substrate
+holodilnik.ru##.alert-compliance
+cenyvaptekah.ru##.alert-first-usage
+myfilology.ru##.alert-message
+domrfbank.ru##.announce-cookie
+podrozerowerowe.info##.appriseOuter
+podrozerowerowe.info##.appriseOverlay
+sirius-aero.ru##.b-cook
+autopoisk24.net##.b-popup
+shate-m.kz##.blocker
+detmir.ru##.bn
+finuslugi.ru##.bottom-message
+makc.ru##.bottom-notification
+likeni.ru,seonews.ru##.bottom-popup
+blackwot.ru##.brave_popup
+tvguru.ru##.c-modal
+apteka-april.ru##.c-notices > .hasButton.c-notice
+blablacar.ru##.cCPiMF
+afisha.timepad.ru##.ccookie-consent
+chance.ru##.check_cookie
+cardsmobile.ru##.cm-m_c-w
+web-axioma.ru##.confform
+aquagrunt.ru##.confidentalInfo
+2x2tv.ru##.cook-web
+mnogo.ru##.cook_LFPnK
+propb.ru##.cooke
+shate-m.kz##.cookie-alert-show
+supersamsev.ru##.cookie-consent-container-wrap
+domclick.ru##.cookie-root--3-0-3
+rusnano.com##.cookie__in
+gostest.com##.cookie__open
+afishainspring.ru##.cookie__q6bNp
+lays.ru##.cookie_inner_1vkWj
+rzd-partner.ru##.cookie_outer_div
+syrovarnya.com##.cookiesMessage_cookiesmessage__jAFno
+bml.ru##.cookiesModal
+myapples.ru##.copyright_fixed
+peterburg2.ru,restate.ru##.cow
+support.mts.ru##.cqBrN
+60cek.org##.cucheck
+kaida-fish.ru##.custom_message
+vivt.ru##.dangen-lable
+iksmedia.ru##.descl
+mathedu.ru##.dialog
+ichip.ru,ivd.ru,lisa.ru##.disclamer
+life-webmaster.ru##.div152
+love.mail.ru##.dnQAZn.sc-iFMAoI
+bbcrussian.com##.e1nbsi9l0
+7d.ru,bisexual.ru,datingspace.ru,friend4travel.ru,idating.ru,love-tomsk.ru,love.am,lovegio.ru,lubovmorkov.net,mamba.ru,missingheart.ru,znakomstvagood.ru,znakomstve.ru##.fTqTJk
+chodb.ru##.foobar-wrapper
+timeweb.cloud##.footer ~ .cc
+fotostrana.ru##.footer-cookie-agreement
+amway.ru##.footer-disclimer
+mironline.ru##.footer-personal-data
+multibonus.ru##.gAHLXB
+skoda-avto.ru##.gHUUHu
+ixbt.com,ixbt.games##.gdpr-root
+ozon.ru##.h7
+kwork.ru##.info-cookie-uses
+stgau.ru##.inform
+friday.ru##.information
+aerobilet.ru##.is-fixed-box
+wwf.ru##.is-header-message-dock
+bbr.ru##.is-message-ppd
+shatura.com##.js_cookie
+blablacar.ru##.kYSrqZ
+polenovo.ru##.lepopup-popup-container
+polenovo.ru##.lepopup-popup-overlay
+387878.ru,ankar70.ru,artfolio.bz,autocandy.ru,b-k.su,bibi-car.ru,centrmama.ru,dskcompany.ru,kmew-fasad.ru,kurch.ru,lpmotor.ru,medisclinic.ru,mypeptid.ru,nomades.ru,obivka-pro.ru,odaban.by,omnicomm-serov.ru,priles.ru,psy5.ru,retailbet.com,skin-health.ru,stroy-interer.ru,xn--80aaoinfqo1fb8a.xn--p1ai,xn--80aap0ajpfdfz.xn--p1ai,xn--80apbahcjkbhv5aaif8e.xn--p1ai,xn--90ahveejsb4f.xn--p1ai,xn--b1afjihhfefic4p.xn--p1ai##.m-wrapper-bg--glass
+polza.ru##.mCSB_container
+investpay.ru##.main-user-consent-request
+torg-pc.ru##.marketing-popup
+kfim.com##.message
+bestradio.fm,iblitzmods.ru,kinoby.ru,tvguru.ru##.message-alert
+merers.ru,strana.one,strana.today##.modal
+asna.ru##.modalCookies_root__356Q-
+shophair.ru##.modal_popup_sessid_box
+c-o-k.ru##.msg-text
+eldorado.ru##.nK
+bubble.ru##.notifications
+premier.one##.notifications-container
+culture.ru##.notify-bar
+lamoda.ru,lamoda.ua##.page > [class*="widget"]
+russia-tv.online##.page-footer__popup-cookie
+q-shopp.ru##.panel-warning
+kamkabel.ru##.panel_152_wp
+pegast.ru##.pgs-top
+finuslugi.ru##.plate___P4Xog
+delo-vcusa.ru,izpn.ru##.policy-popup
+newhollandsp.ru##.policy_popup
+henderson.ru##.politica
+duerr-ndt.ru##.popup-banner
+3332222.ru##.popup_4y628
+lovit.ru##.popup_wrapper
+pcradio.ru##.privacy-block
+hypegamenews.ru##.privacy_policy
+toldot.ru##.prwi
+yookassa.ru##.qa-gdpr
+aviasales.by,aviasales.kg,aviasales.kz,aviasales.ru,aviasales.ua,aviasales.uz##.s__y2gjNiIS0o1RA_5Ebnkw
+tacsafon.ru##.sample-popup
+sbis.ru##.sbisru-CookieAgreement
+zvuk.com##.sc-18olso3-0
+libmogilev.by##.sc-widget
+netology.ru##.shared-components-CookiesAgreement--root--2INjM
+spb-guide.ru##.snowdiv-modal
+datasystem.ru##.specialAlert
+nergb.ru##.spu-bottom-left
+forumdaily.com##.stpl_cookies_wrap
+tutu.ru##.style__disclaimer
+ingrad.ru##.styles-module__cookiesWarning--2mfHC
+lada.ru##.styles_container__1obM5
+66.ru,gorodvo.ru##.t-i-agree
+cloudtips.ru##.t657
+atlex.ru##.terms-popup
+credistory.ru##.toast-message
+vplaboratory.ru##.top-message
+test-help.com##.ui-pnotify
+dvige.ru##.uk-panel
+pfr.gov.ru##.user-data-processing-wrapper
+ticketstour.ru##.using-cookies
+sanremo-pizza.com##.v-cookie-notification
+bimedis.ru##.v-dialog__content
+eecmedical.ru##.welcome-popup
+warthunder.ru##.wt-cb
+yasno.live##.y-gdpr
+uralkarcher.ru##.zalupa
+ctc.ru##[class^="AcceptCookie_"]
+connectgas.ru##[class^="cookieAgreement"]
+4game.com##[class^="fcw-wrap-"]
+sberindex.ru##[class^="styles_Layout__cookiePanel_"]
+sdamgia.ru##[style^="text-align: left; position: fixed;"]
+fastvps.ru##app-cookies-accept
+rabota.sber.ru##div[class*="styled__CookieWrapper-"]
+skoda-avto.ru##div[class^="CookieAcceptBanner_"]
+novayagazeta.eu##div[class^="CookiesInformer_"]
+stoloto.ru##div[class^="Provider_container"]
+aliexpress.ru##div[class^="SnowPrivacyPolicyBanner_"]
+asna.ru##div[class^="modalCookies_"]
+litres.ru##div[data-test-id="cookieAcceptPopup"]
+7dach.ru##div[style^="background-color:#fff3cd; color: #856404;"]
+chaynikam.info##div[style^="position: fixed; bottom: 0px;"]
+delimobil.ru##footer
+mvideo.ru##mvid-cookie-notification
+postnauka.ru##notifications
+kion.ru##ui-web-alert
+! ---------- Serbian ----------
+elakolije.rs###kolacic
+nedeljnik.rs###kuki_upozorenje
+buro247.rs###subscriptionPopupBottom
+digiexpert.rs##.MuiAppBar-positionFixed
+ananas.rs##.cOMKpv
+shareit.rs##.e1gb18jo0
+ananas.rs##.iAXCIF
+shareit.rs##.itemsWrapper
+ananas.rs##.kddXcJ
+sky-express.rs##.pop-up-srb
+mojadomacica.rs##.slide-in-bottom
+truck1.rs##.t1-gdpr
+ctshop.rs##[style^="position: fixed; bottom: 0px;"]
+! ---------- Slovak ----------
+sortec.sk###I6-cookieConsent
+vaschovatel.sk###cbar
+etc-shop.sk###id-modal-backdrop
+akcneletaky.sk###infoCoo
+alkoshop.sk##.alkoshop-cookies-notice-bar
+commercservice.sk##.cc_disclaimer
+winnersgroup.sk##.cks-m
+svetbedniciek.sk##.cm--panel
+daffer.sk##.csXMIs
+nbazar.sk##.eu
+freemap.sk##.fm-toastS
+mhouse.sk##.js-cookies-overlay
+mhouse.sk##.js-cookies-setting-modal
+eso.sk##.mpp-is-open
+ndsas.sk##.navbar-fixed-top > .container
+hossafamily.sk##.p-cookie-bar
+inzeratyzadarmo.sk##.pd10-ing
+zebracomp.sk##.position-fixed.ov.shadow
+speedmeter.sk##.w_notice
+posta.sk##[src="https://static.posta.sk/cookies-consents/dialog/sk/index.html"]
+spsjm.sk##[style^="position: fixed; bottom: 0px;"]
+amaterky.sk##div[style^="padding-top: 10px; padding-bottom: 10px;"]
+magiogo.sk##div[style^="width: 100%; display: flex;"]
+! ---------- Slovenian ----------
+podcrto.si###cc-note
+generali.si###cd-module-modal-main
+energijaplus.si###ck-overlay
+zps.si###cookieContainerWrap
+easistent.com###cookie_popup
+emporium.si###grayOut
+zps.si###preload_over
+xxxlesnina.si##._1zBP5ruymc38ND7B
+dnevnik.si##.cc-wrapper
+generali.si##.cd-overlay
+mojpsihoterapevt.si##.cookieCont
+malice.gorenjegostinstvo.si##.cookie_agreement_container
+lancom.si##.css-1e6ozjc
+uni-lj.si##.dark
+carmec.si,g-sport.si,thalasso-lepavida.si##.fff
+noah.si##.kuki
+dihslovenia.si,komunala-mozirje.si##.md-cookies
+dihslovenia.si,komunala-mozirje.si##.md-overlay
+pikapolonica.si##.modals-overlay
+racunovodja.com##.polprosojno
+fran.si##[style^="margin:10% auto; width:80%;"]
+fran.si##[style^="position:fixed; top:0px;"]
+instal.si##body > .urejanjecenter
+park-skocjanske-jame.si##div[style*="text-align:center;-webkit-box-shadow:0px -5px 14px -4px rgba"]
+instal.si##tr > .napisnanogi
+instal.si##tr > .urejanjecenter
+valher.si##tr > td
+! ---------- Spanish ----------
+almacen-informatico.com###Informacion
+northgate.es###WindowLoad
+agendadeteatro.es###abdm-cookies-overlay
+as.com###acceptationCMPWall
+descifrandolaguerra.es###adam-cookie-banner
+lizipaina.es###additional
+sierraygonzalez.es###anuncio
+arsys.es###arsysCookieAcceptance
+alenergi.com,armeriapalacios.com,eitd.es,elandsl.es,hotelanoeta.com,mangasceramicas.com,seipli.com,webartean.com###aviso
+oloblogger.com###aviso_off
+ayuntamientoparla.es###avisolssi
+colchones.es###avisosusc
+amnesia.es,arguedas.es###barra
+galeriametro.com###barra_mensaje_cookies
+suitur.com###bs-gdpr-cookies-modal
+norvilsa.com###c-cookies__modalbar
+aerolineas.com.ar###c-message
+trajesdenovioporta.com###c-notice
+cdecomunicacion.es###ca_banner
+caf.com###cafModal
+parquesnacionales.cnig.es###capa_galleta
+elpicazo.org###configuracion_cookies
+contasimple.com###consentModeDialogContainer
+hotelhonucai.com###container-screen
+ilebara.es,maslife.es,piensoluegoactuo.com###container_opacity
+tienda.edicionesbabylon.es###cook
+packzum.com###cookie-area
+compra.fredolsen.es###cookie-policy-page
+web.centro-zaragoza.com###cookie-wrapper-objeto
+spargrancanaria.es###cookie_blocker
+griffon.es###cookiebar
+laboyanos.com###cookies-iki
+betania-patmos.org###cookies_configuration
+leyprodatos.es###cs_informationBar
+scatto.es###d-notification-bar
+oficinasmontiel.com###darklayer
+pulzo.com###divConsent
+distritopostal.es###ecl-container-box
+salonocasion.com###fb-cd
+armeriapalacios.com,eitd.es,elandsl.es,mangasceramicas.com,quimicaich.com,seipli.com,webartean.com###fondoaviso
+miteco.gob.es###fondotransparencia-gris
+inelenco.com###hid
+alihogar.es###hyl_coo
+chicasrapadas.net###itro_opaco
+chicasrapadas.net###itro_popup
+adtorpedo66.es###laputapolitica
+habitaclia.com###legalCookies
+hora.com.es###ley
+fpcyl.es###lopd_off
+aviatsa-hn.com,telerama.ec###lopdgddd
+mountain.es###messagebar
+plusultra.es###modal-cookies-2021-horizontal
+gruporeds.es###modalContainer
+deutsche-bank.es###modalCookie
+electan.com###notification
+btp.es,consorciocaucho.es,fotokamal.com,fundazintegra.com,grdar.com,laalacenademallorca.com,linguamania.es,mainzu.com,mueblesrustiko.com,murallamotor.com,nachovivancos.es,nemotec.com,privacytest.org,sociasyrossello.es###overbox3
+lacentral.com###page-overlay
+hirealestate.es###pdcc-message-container
+scherzo.es###pdcc-modal-bg
+tusclasesparticulares.com###pp
+esenviseu.net###qLtempOverlay
+montepiedad.com.mx###static-cover
+acega.es###system-message
+lecourrier.es###times-legal-notice
+uca.es###uca_popup_background
+laprensa.com.ec###wp-cookie-pro
+zylk.net###zylk_avisocookies
+unicajabanco.es##.CC05
+sdelsol.com##.COOKIES
+revistacromos.com.co##.Cookies-containerGeneral
+talixo.es##.FloatingBoxesContainerBottom
+liveagent.com##.Kolaciky
+telehit.com,televisa.com##.Privacy
+miravia.es##._container_1pm0r_1
+dkv.es##.ajax-progress
+exteriores.gob.es##.alert__msg-Wrapper
+premiosesland.com##.banner-body
+artesacro.org##.barra
+queway.es##.basicLightbox
+wenance.com##.bg-cookie
+sinfonicadegalicia.com##.bg-overlay
+franquiciasmalvon.com,malvon.es##.bg_popup
+nikonistas.com##.c-modal
+lasestrellas.tv##.cTWBhP
+infiniti.com.do,infiniti.com.pa,infiniti.mx,infinitipr.com##.c_128
+escac.com##.ccookiepopupwrapbanner
+amigo24.com,firadecocentaina.org##.cm-popup
+puntaldecoracion.com##.cm-wp-container
+bimi.es##.consentBoxes
+autosolar.es##.cookie-configuration
+goboo.com##.cookieBox_30V8b
+miravia.es##.cookies-authorize
+crezes.es,pdatos.com##.cookies-consent-modal
+servicios.utpl.edu.ec##.cookiesjsr-banner
+portalento.es##.cpMainPanel
+eltiempo.es##.curtain_lightbox
+casatarradellas.es##.dark-filter
+macro.com.ar##.data-privacy
+arsys.es##.drop
+icexalumni.com##.eHsNWB
+ingemecanica.com##.encabez
+birchbox.es##.fkOdSY
+tiendaboschonline.cl##.footer__terms
+campusesport.com##.fue-modal
+campusesport.com##.fue-modal-backdrop
+movistar.es##.fullOpacity
+elplantelsemilleros.com##.fusion-row
+promart.pe##.gh-info
+ganttpro.es##.global-statement
+tumi.com.mx##.glow-banner
+nn-computers.es##.hide
+madrid.es##.iam-cookie-control-modal
+madrid.es##.iam-cookie-control-modal-backdrop
+elperiodicodeaqui.com##.info_priv
+birchbox.es##.irKJYj
+bankio.es##.jss1
+fincaraiz.com.co##.jss268
+metrobilbao.eus##.jss45
+plataformaarquitectura.cl##.kth-toast
+elsalopez.es##.mceRow--relative
+beefgourmet.es##.mcnTemplatePageBanner
+solarventi.es##.mfp-bg
+solarventi.es##.mfp-wrap
+casafernando.es##.mobile-undersized-upper.mobile-forcehide
+karolviajes.es##.modal-avisos
+servihabitat.com##.modal-condiciones
+rodilla.es##.modals-wrapper
+pcexpansion.es##.mostrar
+nomada.gt##.noma-privacy
+metroecuador.com.ec##.notification-subs
+jornaldevieira.com##.notifino
+planamigo.org##.notify
+volarensopelana.com##.oxy-modal-backdrop
+theledstore.es##.pgc
+revista.seg-social.es##.portlet-cookies-layout-set
+extension.uned.es##.qCookieAnimacionEntrada
+fotocasa.es##.re-SharedCmp
+monchoscatering.com##.reveal-modal
+tablondeanuncios.com##.reveal-overlay
+juegosipo.com##.sipo1
+betano.com##.sticky-notification
+papajohns.es##.styles_snackbar__3iBTb
+coches.net,milanuncios.com##.sui-TcfFirstLayer
+clinicaplanas.com##.supercookies
+miravia.es##.svelte-1u5q59a
+intecca.uned.es##.toast-bottom
+contarcaracteres.com##.top-header
+fr9.es##.topBar
+sede-tu.seg-social.gob.es##.tuss-cookies
+musicalmarti.com##.ui-dialog-buttons
+anisearch.es##.urgent-msg
+crezes.es,pdatos.com,tasacion-costas.es##.vm--container
+crezes.es,pdatos.com##.vm--overlay
+metrobilbao.eus##[aria-label="Cookie settings panel"]
+forbesenespanol.com##[data-toast="f_cookies_acepted"]
+abonados.realvalladolid.es##a360-cookies-advice
+laroja.cl##app-privacy-policy
+bankintercomite.es##body > .cajatxt
+blogcindario.com,mforos.com##body > div[id][class]
+draeger.com##dw-global-notification
+! ---------- Israeli ----------
+lastminute.co.il##app-notifications-container
+!----------- Macedonian -----------
+loging.mk##.showBackdrop
+loging.mk##.showConsent
+! ---------- Catalan ----------
+lacasadelspantalons.cat##.fc-consent-root
+fueib.org##.fue-modal
+fueib.org##.fue-modal-backdrop
+entrades.palauguell.cat##.popupBarraCookie
+flaixfm.cat##.popup_bg
+! ---------- Swedish ----------
+partille-tool.se,sutars.com###CookiesSettings
+apricon.se###approvebox
+kontorsmaterial.se###cbckFullscreenBlocker
+kontorsmaterial.se###cbckchangeholderFirst
+anmalarbetsskada.se###coockieinfo
+vwgroup.se###cookiemgmt
+risskov.se###cookiemodal
+unionen.se###eu-cookie-compliance-overlay
+greencounsel.se###getCookieConsentDialog
+apricon.se###glass
+askimsrostfria.se###js-cm-claw
+scb.se###kakrutan
+hotellhudik.se,strandhotel.se###mb_modules_popups_Container
+svd.se###schibsted-data-controller-sticky
+fragasyv.se###siteflash
+electrokit.com###top-bar
+roninwear.se###wrapper-dx-coki
+kvalster.se###y
+bt.se##.FCSVc
+instrumentcenter.se##.Of52aacb8
+blocket.se##.SchibstedBanner__Wrapper-sc-ell7hi-0
+newsworthy.se##.Snack
+barnebys.se##._1jurJi
+sl.se##._2Ip6f9Jcpe_edCoe1Ts2mM
+torebrings.se##.alert-box
+minmyndighetspost.se##.alertWrap
+sellpy.se##.bERasM
+app.lysa.se##.baked-dough-consent
+fz.se##.blck-info
+nacka.se##.c-message
+kulturbolaget.se##.c-messages
+swestat.se##.c-w
+inet.se##.c1hsuii6
+eidar.se##.cc-page
+liberalerna.se##.ccnt-app
+buyersclub.se##.component\:cookie-consent-dialog
+jak.se##.consent-backdrop
+omsystembolaget.se##.consent-handler
+jabb.se##.cookie-consent-sv
+tonerlagret.se##.cookie-cutter
+lagenhetsbyte.se##.cookie-modal-wrapper
+estea.se##.css-1r4ubx3
+icebug.se##.css-4uxznl
+lifebutiken.se##.cuGsyh
+eddler.se##.dk-header-info-message
+semper.se##.dyxlIn
+rwi.se##.elementor-location-popup
+sellpy.se##.fAalHQ
+sydostran.se##.fluffy-Wrapper-fluffy--v0dzrt
+jobbsafari.se##.hBzXzJ
+bus4you.se##.header__banner
+sportson.se##.info-message
+irishantverk.se##.infobar-bottom
+otsuka.se##.inset-0.fixed
+marginalen.se##.is-active.modal
+filminstitutet.se##.js-info-banner
+secure.handelsbanken.se##.js-shb-inss-login__cookie-consent
+nudient.se##.jss113
+naturvardsverket.se##.kZfGDX
+digg.se##.key-182uxz
+greencounsel.se##.md-dialog-backdrop
+sapabuildingsystem.se##.message
+outl1.se##.o1f-a
+osterbottenstidning.fi,sydin.fi,vasabladet.fi##.online-notifications
+veidekke.se##.overlay
+reco.se##.pms
+earlybird.delivery##.policy-notice
+smhi.se##.polopolyNotification
+tanka.se##.popUpWrapper
+alltombostad.se##.pop_box
+get-digital.se##.privacy-wrapper
+seb.se##.pw-cookie-consent-v2
+gleerupsportal.se##.sc-cjibBx
+traningspartner.se##.sd-object-if > .sd-object-code
+polder.se##.sd-object-if.sd-object
+huge.se##.section-cookies-notice-outer
+lysa.se##.snackbar-wrapper
+socialstyrelsen.se##.sos-ck-cnsnt-mgnr
+barnebys.se##.style_consent-banner__Fns2J
+sodrateatern.com##.styles__CookiebarWrap-g5ab7n-0
+verktygsboden.se##.wp27nvx
+hemfrid.se##.xdmFo
+hallakonsument.se##[aria-label="Kakinformation"]
+elfynd.se##[style="position: fixed; bottom: 0px; left: 0px; right: 0px;"]
+ikalender.se##[style^="width:100%;background-color:#F0F0F0;"]
+blockbuster.dk,sfanytime.com##div[class^="GlobalCookieBanner__"]
+hejalbert.se##div[class^="styles_cookiesContainer_"]
+vk.se##div[style^="display: flex; align-items: center;"]
+itab.se##div[style^="position: fixed; left: 0px; top: 0px;"]
+! ---------- Thai ----------
+komchadluek.net###accept-cookie-footer
+posttoday.com###box-policy
+nipa.co.th###cookie-con-head
+settrade.com###pdpa-policy
+siamsport.co.th###popup-ss
+sanook.com##.Pdpa
+thailandpost.co.th##.becookies-outer-container
+vroom.truevirtualworld.com##.card-cookie
+thaiza.com##.ck-acpt-container
+dict.longdo.com##.consent-div
+scb.co.th##.consent_section
+glo.or.th##.cookie-wapper
+asiaplus.co.th##.cookies--wrapper
+set.or.th##.cookies-pdpa
+techsauce.co##.cwc-cookie-banner-ui-sdk
+true.th##.enter-done
+kapook.com##.footer-policy
+forfur.com##.footerpolicy
+becteroradio.com,teroradio.com##.policy
+toyota.co.th##.popup__pdpa
+pantip.com##.pt-snackbar__surface
+bnn.in.th##.the-pdpa-consent-bar
+punpro.com##div[class^="CookieSession"]
+! ---------- Turkish ----------
+find.com.tr###KVK_Cerez
+mamak.bel.tr###cPrompt_Holder
+yemektekeyifvar.com###cb-lightbox
+izmitsu.com.tr###cerez_div
+oyunlarskor.com###cerez_kabul
+yorukoglusut.com.tr###close-me
+izocam.com.tr###closePoliciesDiv
+karakartal.com,superfb.com,webaslan.com###consentdiv
+fujifilmshop.com###consident
+mepasenerji.com###dataPolicies
+ciftcilaw.com.tr###div_cc_cc
+hostixo.com###general-tos
+kitapyurdu.com###js-popup-container
+altin.in,oses.com.tr,ruinadalia.com.tr###kvkk
+defacto.com.tr###kvkk_notification
+kayaholding.com.tr###kvkkbox
+suslusozluk.com###lightsout
+casper.com.tr,kutahyaporselen.com###mcTopTooltip
+natro.com###readed_contract_row
+tatgida.com###topbar-hide
+oz.av.tr##.Legal
+columbia.com.tr##.MuiCollapse-wrapperInner
+apigo.com.tr##.ant-notification
+ikonambalaj.com.tr##.bottom-center
+afyonhaberturk.com,agesahayatemeklilik.com.tr,avivasa.com.tr,aydinyeniufuk.com.tr,balikesirartihaber.com,blokhaber.com,bomba15.com,burdurgazetesi.com,denizli20haber.com,dirilispostasi.com,egegundem.com.tr,eldedemokrasi.com,enpolitik.com,euromsg.com,gazetevatan.com,haberimizvar.net,hedefgazetesi.com.tr,isdunyasindakadin.com,ispartamhaber.com,kahtases.com,kocaelisabah.com,mhrs.gov.tr,offtherecord.com.tr,plastikciyiz.biz,sabancivakfi.org,seffafbelediyecilik.com,tarsusgazetesi.com,vansesigazetesi.com,yenigolcuk.com##.cerez
+iys.org.tr##.cerezall
+saltur.com.tr##.cerezkullanimi
+hosting.com.tr##.contract-popup
+hepsijet.com##.cookie-policy_cookiePolicy__9xbaz
+pinarsu.com.tr##.cookieContent
+beinsports.com.tr##.cookie_cookie__3NG06
+e-bargello.com,pt.com.tr##.cp
+neredekal.com##.css-1fl0mfv
+tatildekirala.com##.css-1px8sx
+kizilayicecek.com.tr##.data-policy
+uyelik.dr.com.tr##.dataBar
+ak-asya.com.tr##.dialog-type-lightbox
+encazip.com##.eHzdtJ
+blablacar.com.tr##.eejIlc.sc-mqugsu-0
+fibabanka.com.tr##.efilli-layout-fibabanka
+getir.com##.faOyhg
+yucebasmakine.com.tr##.fadeInUp
+gezinomi.com##.fixedprotectionOfData
+kampanya.peugeot.com.tr##.ihm-popup
+kampanya.peugeot.com.tr##.ihm-popup-overlay
+denizozel.com##.kvk
+yigitalisveris.com.tr##.kvk-information-master
+suslusozluk.com##.modal-show
+haber365.com.tr##.modalx
+boxofficeturkiye.com##.notification__wrapper
+paribu.com##.policies
+betuyab.com.tr,yenisafak.com##.policy
+dask.gov.tr##.polite__alert
+kitapyurdu.com##.popupContainer
+qp.com.tr##.porto-block-html-top
+gedik.com##.protectionOfData
+cci.com.tr##.res-bottom-bar
+zipatotr.com##.sabitkvkk
+blablacar.com.tr##.sc-mqugsu-0.eejIlc
+scbam.com##.scbam-modal-list_b004
+ups.com.tr##.stickfooter
+abone.com.tr,kargomsende.com,tdp.com.tr,turkuvazabone.com##.sticky-footer
+fikriyat.com,sabah.com.tr,turkuvazradyolar.com,yeniasir.com.tr##.veriAltBar
+favori.com.tr##.vnotify-container
+yenisafak.com##.ys-cookie-modal
+sekerbank.com.tr##div[class^="cookiebox_cookieBox"]
+icrypex.com##layout-cookies
+! ---------- Ukrainian ----------
+gradinamax.com.ua###GDPR-container
+varianty.lviv.ua###accept
+violity.com###floating_agreement
+mullerol.com.ua###parent_popup
+facenews.ua###pblock
+zoo-food.com###policy
+sport.ua###policy-accept
+shop.tefal.ua###root div[class^="cookieMessage-root"]
+m.censor.net###usage-notice-message
+i.ua##.Disclaimer
+casers.org##._2vwI89r3xy1E9vUpxC1-q
+casers.org##._3k10c1fUHhHZWUjcCu09Ve
+volia.com##.agreeCookie\.component__cookieWrapper
+kurs.com.ua##.background-popup
+ire.com.ua##.block
+booknet.ua##.bn_cookies
+carta.ua##.carta-policy-bottom
+alfa-tv.ua##.cook
+gigatrans.ua##.coook
+meest.shopping##.df__cookie-popup
+my.ua##.gLfiyr
+stolarfund.com##.gNBxMM
+today.ua##.politic_confidel
+forklog.com,forklog.com.ua##.terms_popup
+inter.ua##.warning
+kernel.ua,root-nation.com##[role="dialog"]
+olx.ua##div[data-testid="cookies-overlay__container"]
+! ---------- Indonesian ----------
+horiguchi.id###bgLayers_comp-jhq7mc72
+rajabacklink.com###idpop_cookie
+nutriclub.co.id##.footer__notification
+myorbit.id##[style="align-items: center; background-color: rgb(237, 245, 252); padding-top: 12px; padding-bottom: 12px; -webkit-box-align: center;"]
+! ---------- Vietnamese ----------
+vdes.vn##.cookieBanner_show__1E8Dj
+ants.vn##.sg-popup-content
+! ---------- Welsh ----------
+360.cymru###negesCaniatad
+
+! *** easylist:easylist_cookie/easylist_cookie_international_specific_block.txt ***
+||9jdq2a.poco.de^
+||amazonaws.com/website/js/tagcommander/$domain=cosmosdirekt.de
+||baustellenabsicherung24.de^*/koekje.
+||boxspring-welt.ch/public/app.js
+||byom.de/js/cookie.de.js
+||caseking.de/engine/Shopware/Plugins/Local/Frontend/CasekingCookieConsent/
+||cc.diewebsitemacherei.de^
+||cc.labu24.de^
+||cc.mpa-web.de^
+||ccm1.dlr.de^
+||cmp.bordverpflegung.de/public/app.js
+||cmp.pcwelt.de^
+||cmp.tvspielfilm.de^
+||consent-bist.de/public/app.js
+||consent-wrapper.jameda.de^
+||consent.autopflege24.net/app.js
+||consent.berliner-kurier.de^
+||consent.daa.net/app.js
+||consent.deutsches-schulportal.de/public/app.js
+||consent.gutefrage.net^
+||consent.maerkischekiste.de/public/app.js
+||consent.perry-rhodan.net^
+||consent.werner-mertz.de^
+||consent2.rheinische-anzeigenblaetter.de^
+||consenttool.haendlerbund.de^
+||cookies.ptj.de^
+||electriclove.at/*/api/cookie-settings
+||emondo.de/wp-content/plugins/borlabs-cookie/
+||epccm19.com/app.js
+||fc.vodafone.de^
+||flvw.de/media/plugins/ConsentManager/ConsentManager.min.js
+||gedk-consent.he-webpack.de/public/app.js
+||henryschein.at^*/CookieList.aspx
+||howatherm.de/frontend/media/cm/
+||kefalonia-griechenland.com/RR_KE_ccm19/
+||lights-on.io/public/app.js
+||marketing.mafell.de/consent/public/app.js
+||mobile.de/api/consent/static/js/loader.js
+||piazza.cc/public/app.js
+||postleitzahl.org/images/consent.php
+||privacy.wum.rocks/public/app.js
+||saturn-klima.de/wp-content/a0a206f468204945563d799b8f319215.js
+||seduction-magazin.de/wp-content/plugins/borlabs-cookie/
+||sprengel-pr.com/public/app.js
+||stefke-heilbronn.de/wp-content/1ae6d298321568877d478a611c6536f4.js
+||strato.de^*/consent.js
+||tauschticket.de/js/cnst.js
+||up-cookiemon.wavecdn.net^
+||vag.de/typo3conf/ext/cookieman/
+||weddstyle.de/bilder/banner/$image
+! ---------- French ----------
+||brsimg.com/gdpr/$domain=boursorama.com
+||cmp.histoire-et-civilisations.com^
+||consent.prismamedia.com^
+||consentement.ouest-france.fr^
+||cookies.leadplace.fr^
+||docteurclic.com/ajax/ajax_get_disc.aspx
+||gmx.fr/uim/bidding/consent.js
+||googletagmanager.com/gtm.js$script,domain=stihl.fr
+||jeu.video^*/partners.js
+||privacy.footmercato.net^
+||ratp.fr/modules/custom/ratp_tarteaucitron/
+||static.lefigaro.fr/figconsent/
+||thesiteoueb.net/js/cm-head.js
+||vape-phone.fr/bundles/webtoolcore/js/newCookieChoice.js
+||var.uicdn.net/shopsshort/privacy/v1/bundle.
+||veodys.fr/api/cmp/
+||vidal.fr/includes/components/consent-cookie/consent.js
+! ---------- Belarusian ----------
+||gemma.by/catalog/view/javascript/lightcookie/
+! ---------- Bulgarian ----------
+! ---------- Chinese ----------
+! ---------- Croatian ----------
+||styria.hr^*/cookies.min.js
+! ---------- Czech ----------
+||cmp.vizus.cz^
+||consent.t-mobile.cz^
+||h.seznam.cz/js/cmp2/scmp-int.js$domain=en.mapy.cz
+||me9ddf.moebelix.cz^
+||profesia.cz/assets/js/cookie_consent_
+! ---------- Danish ----------
+||tv2a.dk/consent/
+||tv2a.dk/oil.
+! ---------- Dutch ----------
+||ccm.npo.nl^
+||cmp.deondernemer.nl^
+||cookie.vrt.be^
+||cookie.wieni.be^
+||cookies.jeugdjournaal.nl^
+||cookies.nos.nl^
+||cookies.ster.nl^
+||nojazz.eu/nl/client/drimble.nl/init.js
+||tmgonlinemedia.nl/cc$script
+||voorkeuren.tvgids.nl^
+! ---------- Finnish ----------
+||a-lehdet.fi^*/cmp.js
+||browser-consent-front.coco.s-cloud.fi/js/$script
+||cdn.gravito.net^$script
+||cmp.tori.fi^
+||cookielaw.org/scripttemplates/*/assets/*.json$xmlhttprequest,domain=elisa.fi
+||cookielaw.org/scripttemplates/*/assets/otCommonStyles.css$xmlhttprequest,domain=elisa.fi
+||elisa.fi/consent-management/
+||gravitocdn.blob.core.windows.net/lightcmp/$script,domain=veho.fi
+||jimms.fi/Scripts/jimmsconsent.min.js$script,domain=jimms.fi
+||krookmedia.fi/wp-content/plugins/cookie-law-info/$script,domain=krookmedia.fi
+||multitronic.fi/en/ajax/getConsentForm/
+||pirkkalainen.fi/wp-content/plugins/cookie-law-info/legacy/public/js/cookie-law-info-public.js
+||serviceform.com/serviceform-tools/privacy/sf-privacy-partner.js$script,domain=kotitesti.fi
+||storage.googleapis.com/om-gravito-cmp/$script
+||suomenmaa.fi/wp-content/plugins/gdpr-cookie-compliance$domain=suomenmaa.fi
+||tapionverkkokauppa.fi^*/js.cookie.min.js$script
+||vaikuttajamedia.fi^*/markuk_evastevaroitus.js
+||vpd.fi/datalayer/index/cookieContent/$xmlhttprequest,domain=vpd.fi
+! ---------- Greek ----------
+||aia.gr/cookie/
+||cmp.soundis.gr^
+||shop.mango.com/st-cookies/
+! ---------- Hebrew ----------
+! ---------- Hungarian ----------
+||atmedia.hu/hirtv.hu_consent.js
+||kronikaonline.ro/template/kronika/js/js_cookie.js
+||szekelyhon.ro/template/szekelyhon_new/js/js_cookie.js
+! ---------- Icelandic ----------
+! ---------- Indian ----------
+! ---------- Italian ----------
+||ansa.it/sito/js/cookie_wall.js
+||bastabugie.it/it/cookies.js
+||beautydea.it^*/consent_$script
+||blog.omlet.it/wp-content/themes/omlet/js/consent.min.js
+||cippy.it/Scripts/toastr.js
+||cms24.it/js/kekse.js
+||cookie.aerostatonet.it^
+||cookierulez.sqrt64.it^$third-party
+||cookies.gardena.net^
+||creaweb.it/cookie/
+||credit-agricole.it/cookies/cookies.min.js
+||cure-naturali.it/cookies?
+||effekt.it/analytics/
+||fastweb.it/cookie-center/
+||informagiovani-italia.com/consenso.js
+||kkaio.com/templates/t4_blank/js/ck.js
+||londraweb.com/consenso_lw.js
+||meteorete.it/cookie.js
+||ok-salute.it^*/cookie-law-info-public-
+||ontuscia.it/wp-content/373b3827289b712eddc077c6e8bfdef8.js
+||plug.it^*/cmp.min.js
+||privacyportal.fatergroup.com^
+||rcsobjects.it/rcs_cpmt/
+||spesasicura.com/Scripts/cookie.js
+||stbm.it/utility-fe/prod/general/network.common.v2.js
+||triboo.direct/cookie_triboodirect/
+||velvetgossip.it^*/gdprvelvet.js
+! ---------- Japanese ----------
+||cmp.impress.co.jp^
+||gdpr.api.bcdn.jp^
+||gdpr.laxd.com^
+! ---------- Korean ----------
+! ---------- Latvian ----------
+! ---------- Norwegian ----------
+||widforss.no/bundles/consent-init
+! ---------- Polish ----------
+||4hifi.pl/scripts/jquery.cookie.js
+||allegrostatic.com/opbox-rodo-consent-modal/
+||animesub.info/skrypty/pierdolecookie.js
+||cmp.computerworld.pl^$script
+||cmp.cxo.pl^$script
+||cmp.idg.pl^$script
+||cmp.internetstandard.pl^$script
+||cmp.pcworld.pl^$script
+||consensu.infor.pl^
+||cookie.gazeta.pl^
+||cookies.fakt.pl^
+||cookies.forbes.pl^
+||gry-online.pl/js/cookie2.js
+||interia.pl/rodo-iframe
+||lubuskie.pl/themes/src/cookie.js
+||nexto.pl/js/nexto/jm_cookie_message.js
+||niewygodne.info.pl/pierwsza.htm
+||nowehoryzonty.pl/js/cookies.js
+||orange.pl/ocp-http/map/js/cookies.js
+||prideandglory.pl/polityka_cookies.js
+||rodo.agora.pl^
+||rp.pl/cmp/
+||sycow.pl/a/cookie.js
+||zgody.infor.pl^
+! ---------- Portuguese ----------
+! ---------- Romanian ----------
+||bricodepot.ro^*/cookie-wrapper.js
+! ---------- Russian ----------
+||remixshop.com/bg/site/ajaxCheckCookiePolicy
+! ---------- Slovak ----------
+||cookies.teraz.sk^
+! ---------- Slovenian ----------
+! ---------- Spanish ----------
+||advgo.net/borostcf/
+||atv.pe/wp-content/plugins/ned-cookies-form/
+||cookies.unidadeditorial.es^
+||digitalmedia-comunicacion.com/cookie/v2/script2.js
+! ---------- Swedish ----------
+||hemnet.se/assets/packs/consent.
+||privacy.schibsted.com^
+! ---------- Thai ----------
+||matichon.co.th^*/pdpa.js
+||wongnai.com/_api/consents/
+! ---------- Turkish ----------
+||efilli.com/layouts/efilli.layouts.js
+||tmgrup.com.tr^*/tmdconsent-
+||yenivatan.at/wp-content/1ed7e68247b9e059b94a36b825654e58.js
+||yenivatan.at/wp-content/2494179630e471e4ae996d8139692663.js
+! ---------- Ukrainian ----------
+||consent.themeteocompany.com^
+!---------------------------------Allowlists----------------------------------!
+! *** easylist:easylist_cookie/easylist_cookie_allowlist_general_hide.txt ***
+cera.coop#@##CookieBanner
+fdm-travel.dk,power.no,skousen.dk,skousen.no,whiteaway.com,whiteaway.no,whiteaway.se#@##CookieConsent
+smooth-on.com#@##CookieNotice
+finanzmarktwelt.de#@##CybotCookiebotDialogBodyUnderlay
+online.no,telenor.no#@##__tealiumGDPRcpPrefs
+downdetector.com#@##_evh-button
+la7.it#@##_evh-ric
+withings.com#@##analytics_cookie
+sonyliv.com#@##app-cookie-div
+pharmastar.it#@##cc-modal
+bundesanzeiger.de#@##cc_banner
+bing.com#@##cc_container
+gogolf.fi#@##cliSettingsPopup
+muoversiatorino.it#@##cmplz-cookiebanner-container
+swedbank.se#@##component-cookie-banner
+youtube.com#@##consent-bump
+dnb.no#@##consent-modal
+consent.yahoo.com,paypal.com#@##consent.consent
+bbc.com#@##consentBanner
+dnb.no#@##consentContainer
+wacom.com#@##consent_blackbar
+voas.fi#@##coockie-modal
+japanrailpass.net#@##cookie-accept
+feierabend.de#@##cookie-banner
+dm-drogeriemarkt.it#@##cookie-bar
+bremer-gewuerzhandel.de,gents.com,keobeer.com.cy,ms-reptilien.de,officiallondontheatre.com,retterspitz.de#@##cookie-consent
+channel4.com#@##cookie-consent-banner
+unobike.com#@##cookie-info
+elkjop.no#@##cookie-information-template-wrapper
+mypensiontracker.co.uk#@##cookie-law
+gogolf.fi#@##cookie-law-info-again
+gogolf.fi#@##cookie-law-info-bar ~ .cli-modal-backdrop
+dominospizza.pl#@##cookie-message
+biblioteka.wroc.pl,makelaarsland.nl#@##cookie-notice
+asialadies.de,avladies.de,badeladies.de,behaarteladies.de,bizarrladies.de,busenladies.de,danbolig.dk,deutscheladies.de,devoteladies.de,dominanteladies.de,erfahreneladies.de,escorts24.de,exklusivladies.de,finanzen.ch,fkk24.de,grosseladies.de,hobbyladies.de,jungeladies.de,kollegin.de,kussladies.de,ladies.de,latinaladies.de,massierendeladies.de,mollyladies.de,nsladies.de,nymphomaneladies.de,orientladies.de,osteuropaladies.de,piercingladies.de,rasierteladies.de,retterspitz.de,schokoladies.de,stilord.com,stilord.de,stilord.fr,stilord.pl,tattooladies.de,tsladies.de,zaertlicheladies.de,zierlicheladies.de#@##cookie-overlay
+sonyliv.com#@##cookie-policy
+flybe.com#@##cookie-policy-modal
+danskebank.fi#@##cookie-text
+publicspace.org#@##cookie-wrap
+fluidtravel.it#@##cookie-wrapper
+evaair.com#@##cookie.cookie
+birdpix.nl,nederpix.nl#@##cookieAccept
+cam.start.canon#@##cookieArea
+ad.win.nl,auszug.at,berlinartweek.de,gov.lv,humboldtforum.org,kulturprojekte.berlin,search.itaa.be#@##cookieConsent
+ad.win.nl#@##cookieConsentBox
+dt.mef.gov.it#@##cookieConsentForm
+researchaffiliates.com#@##cookieDialog
+snp.nl#@##cookieLayer
+dhbbank.nl#@##cookieModalCenter
+gazzettaconcorsi.eu#@##cookieNotice
+conso.ro#@##cookiePolicy
+crown.com#@##cookiePolicyModal
+search.itaa.be#@##cookieWrapper
+gogolf.fi#@##cookie_hdr_showagain
+1a-automarkt.de,1a-finanzmarkt.de,1a-immobilienmarkt.de,1a-reisemarkt.de,1a-singleboerse.de,1a-stellenmarkt.de#@##cookie_info
+1a-automarkt.de,1a-finanzmarkt.de,1a-immobilienmarkt.de,1a-reisemarkt.de,1a-singleboerse.de,1a-stellenmarkt.de#@##cookie_info_block
+1a-automarkt.de,1a-finanzmarkt.de,1a-immobilienmarkt.de,1a-reisemarkt.de,1a-singleboerse.de,1a-stellenmarkt.de#@##cookie_info_wrapper
+geenstijl.nl#@##cookie_wall
+play-cricket.com#@##cookieaccept
+schleswig-holstein.de,thw.de,zensus2022.de#@##cookiebanner
+refoweb.nl#@##cookieconsent
+gocomics.com#@##cookieconsent-container
+book-n-drive.de#@##cookiedialog
+gruenderservice.at#@##cookiehint
+stadtwerke-weilburg.de#@##cookiehinweis
+jku.at,warta.pl#@##cookieman-modal
+qastack.fr#@##cookies-accept
+elrow.com#@##cookies-banner
+qastack.fr#@##cookies-consent
+elmzell.se#@##cookies-content
+asda-photo.co.uk#@##cookies-nag
+withings.com#@##cookies.active
+arbeiterkammer.at#@##cookiesContainer
+mymuesli.com#@##cookies_consent
+succulent-plant.com,vaillant.at,vaillant.be,vaillant.co.uk,vaillant.com,vaillant.com.ro,vaillant.cz,vaillant.de,vaillant.dk,vaillant.es,vaillant.fi,vaillant.fr,vaillant.hr,vaillant.hu,vaillant.info,vaillant.it,vaillant.nl,vaillant.no,vaillant.pl,vaillant.rs,vaillant.se,vaillant.si,vaillant.sk,vaillant.ua#@##cookiewarning
+afcdp.net#@##cooky
+allocine.fr#@##didomi-host
+abc.es,as.com,corrieredellosport.it,elcomercio.es,elconfidencial.com,elindependiente.com,seguro.elespanol.com,tuttosport.com#@##didomi-notice
+aireuropa.com#@##ensModalWrapper[role]
+aireuropa.com#@##ensNotifyBanner
+nocookielaw.com#@##eu-cookie-law
+sans.org#@##gdpr-agreement
+fairfitters.de#@##gdpr-blocking-page-overlay
+kalenderwoche.de#@##gdpr-consent
+deleteme.com#@##gdpr-cookie-message
+warframe.com#@##gdprSettings
+savpieces.envienord.fr#@##gdpr_consent
+icims.com#@##gdpr_container
+ing.jobs#@##gdprconsent
+meteored.com.py,tameteo.nl#@##gpdr:not(body):not(html)
+ieatfoodtours.co.uk,londraculturale.it,onceinrome.com,weliketuscany.it#@##js-cookie-notice
+imoradar24.ro#@##modal-cookies
+christianconcern.com#@##moove_gdpr_cookie_info_bar
+microsoft.com#@##ms-cookie-banner
+coolpc.com.tw,coolpc.tw#@##mycookie
+swedbank.se#@##new-cookies
+xsports.lv#@##notice-cookie-block
+irancircle.com#@##notice_visitor
+1001games.com,1001hry.cz,1001jeux.fr,1001jocuri.ro,1001jogos.com.br,1001jogos.pt,1001pelit.com,1001spiele.de,3sat.de,aerztezeitung.de,arkadium.com,avisendanmark.dk,billa.at,blaklader.at,blaklader.be,blaklader.ca,blaklader.com,blaklader.cz,blaklader.de,blaklader.dk,blaklader.ee,blaklader.es,blaklader.fi,blaklader.fr,blaklader.ie,blaklader.it,blaklader.nl,blaklader.no,blaklader.pl,blaklader.se,blaklader.uk,blick.ch,boomerang-tv.pl,cbslocal.com,chvnoticias.cl,cmore.fi,coca-cola.co.za,computerbase.de,cosplaycentral.com,costco.com,credit-suisse.com,dhl.de,dicebreaker.com,digitalfoundry.net,elkspel.nl,elle.se,eurogamer.cz,eurogamer.pl,eurogamer.pt,forexlive.com,funnygames.be,funnygames.it,funnygames.nl,gameinformer.com,gamesindustry.biz,gamespot.com,geizhals.de,giochixl.it,gioco.it,glamourmagazine.co.uk,gmx.com,grajteraz.pl,guloggratis.dk,heute.at,howstuffworks.com,igrixl.ru,ilsole24ore.com,isladejuegos.com,jatekokxl.hu,jelly.deals,jetztspielen.ws,karriere.at,konami.com,larousse.fr,logitech.com,mail.com,mensjournal.com,mesta.net,milwaukeetool.eu,mtvuutiset.fi,natgeotv.com,nutmeg.com,oe24.at,okazii.ro,paixnidiaxl.gr,panasonic.com,pushsquare.com,redbull.com,reisetopia.de,rockpapershotgun.com,rtlplay.be,rtlxl.nl,ryobitools.eu,sony.pl,spel.nl,spelletjes.nl,spelo.se,spillespill.no,spilxl.dk,sport.pl,stern.de,storia.ro,technics.com,thehaul.com,thejournal.ie,thepopverse.com,thetrainline.com,tokfm.pl,travelbook.de,tunein.com,uphold.com,vg247.com,videoland.com,vkmag.com,vol.at,wetter.at,wowbiz.ro,zdf.de,zoom.us#@##onetrust-banner-sdk
+1001games.com,1001hry.cz,1001jeux.fr,1001jocuri.ro,1001jogos.com.br,1001jogos.pt,1001pelit.com,1001spiele.de,20min.ch,3sat.de,aerztezeitung.de,arkadium.com,avisendanmark.dk,billa.at,blaklader.at,blaklader.be,blaklader.ca,blaklader.com,blaklader.cz,blaklader.de,blaklader.dk,blaklader.ee,blaklader.es,blaklader.fi,blaklader.fr,blaklader.ie,blaklader.it,blaklader.nl,blaklader.no,blaklader.pl,blaklader.se,blaklader.uk,blick.ch,boomerang-tv.pl,cbslocal.com,chvnoticias.cl,cmore.fi,cnn.com,coca-cola.co.za,computerbase.de,cosplaycentral.com,costco.com,credit-suisse.com,dhl.de,dicebreaker.com,digitalfoundry.net,elkspel.nl,elle.se,eurogamer.cz,eurogamer.pl,eurogamer.pt,forexlive.com,funnygames.be,funnygames.it,funnygames.nl,gameinformer.com,gamesindustry.biz,gamespot.com,geizhals.de,giochixl.it,gioco.it,glamourmagazine.co.uk,gmx.com,grajteraz.pl,guloggratis.dk,heute.at,howstuffworks.com,igrixl.ru,ilsole24ore.com,isladejuegos.com,jatekokxl.hu,jelly.deals,jetztspielen.ws,karriere.at,konami.com,larousse.fr,logitech.com,mail.com,mensjournal.com,mesta.net,milwaukeetool.eu,mtvuutiset.fi,natgeotv.com,nutmeg.com,oe24.at,okazii.ro,paixnidiaxl.gr,panasonic.com,pushsquare.com,redbull.com,reisetopia.de,rockpapershotgun.com,rtlplay.be,rtlxl.nl,ryobitools.eu,sony.pl,southpark.de,spel.nl,spelletjes.nl,spelo.se,spillespill.no,spilxl.dk,sport.pl,stern.de,storia.ro,technics.com,thehaul.com,thejournal.ie,thepopverse.com,thetrainline.com,tokfm.pl,travelbook.de,tunein.com,uphold.com,vg247.com,videoland.com,vkmag.com,vol.at,wetter.at,wowbiz.ro,zdf.de,zoom.us#@##onetrust-consent-sdk
+api.newsguardtech.com#@##optanon
+ign.com#@##policyNotice
+edeka.de,schwaebische.de,tf1.fr,tf1info.fr#@##popin_tc_privacy
+attestation.app,grapheneos.org,ilpiemontetivaccina.it,minden.co.jp,mozilla.org,readthedocs.io,sportdiver.com,thunderbird.net,usps.com#@##privacy-policy
+edeka.de,schwaebische.de,tf1.fr,tf1info.fr#@##tc-privacy-wrapper
+fortune.com,lighting.philips.de#@##teconsent
+forgeandfortune.com#@##toasts > #toastsWrapper
+aruba.com#@#.CookiePopup
+aa.com,bancaifis.it#@#.Cookies:not(body)
+telegraaf.nl#@#.CookiesOK
+rai.it,rainews.it,raiplaysound.it#@#.PositionBottom.as-oil
+api.newsguardtech.com#@#.accept-cookie-container
+shop.coronetpeak.co.nz#@#.accept-privacy-policy
+rai.it,rainews.it,raiplaysound.it#@#.as-oil-content-overlay
+rai.it,rainews.it,raiplaysound.it#@#.as-oil[data-qa="oil-Layer"]
+epayments.com#@#.b-cookie-policy
+vocearancio.ing.it#@#.banner-cookie
+mistertennis.com#@#.banner_cokie
+chronicle.com#@#.bcpNotificationBar
+volantino.carrefour.it#@#.c-cookie
+klinkercentrum.cz,openfiber.it,rete.toscana.it,supertennis.tv#@#.cc-banner
+cyberforum.de,hartmanngruppe.net#@#.cc-floating
+bryzgunoff-photography.de,msa-berlin.de,sahne-band.de#@#.cc-individual-cookie-settings
+hartmanngruppe.net,rete.toscana.it#@#.cc-revoke
+fairfitters.de#@#.cc-theme-classic.cc-window
+hartmanngruppe.net#@#.cc-type-opt-in.cc-floating
+cyberforum.de,hartmanngruppe.net#@#.cc-window[aria-describedby*="consent"]
+cyberforum.de,hartmanngruppe.net#@#.cc-window[aria-label*="consent"]
+countries.goodhood.eu,morningstar.ca,mysoapbox.com,tangerine.ca#@#.cc_container
+mbanc.com#@#.ccpa-banner
+cooleffect.org#@#.ce-banner
+cebupacificair.com#@#.close-cookies
+varzesh3.com#@#.cm-message
+onet.pl#@#.cmp-app_gdpr
+webfail.com#@#.cmpboxWelcomeGDPR
+teslamag.de,vkmag.com,winfuture.de#@#.cmpwrapper
+consent.capitalone.com,consent.yahoo.com,funnycase.pl,lawrievetgroup.co.uk,nvidia.com,oath.com,reglomobile.fr#@#.consent-container
+fietsen123.nl,t-online.de#@#.consent-content
+verivox.de#@#.consent-holder
+bol.com#@#.consent-modal
+consent.yahoo.com,fietsen123.nl,lawrievetgroup.co.uk,payments.amazon.co.jp,payments.amazon.co.uk,payments.amazon.com,payments.amazon.de,payments.amazon.es,payments.amazon.fr,payments.amazon.in,payments.amazon.it,simplii.com#@#.consent-wrapper
+calameo.com#@#.consent.cookies
+svenskhalsokost.se#@#.cookie-accept
+bitburger-braugruppe.de#@#.cookie-age
+calameo.com#@#.cookie-alert-container
+boursorama.com,nuxeo.com,swedbank.se#@#.cookie-banner:not(body):not(html)
+janrain.com,moemax.de,xxxlshop.de#@#.cookie-bar
+dreher.it,withings.com#@#.cookie-body
+sundhed.dk#@#.cookie-box
+biblioteka.wroc.pl,evaair.com#@#.cookie-btn
+danica.no,danicapension.dk,danskebank.co.uk,danskebank.com,danskebank.dk,danskebank.fi,danskebank.no,danskebank.se,danskeci.com#@#.cookie-consent-banner
+keobeer.com.cy,winparts.be,winparts.eu,winparts.fr,winparts.ie,winparts.nl,winparts.se#@#.cookie-consent-box
+getaround.com#@#.cookie-consent-modal
+artyferia.pl#@#.cookie-consent-show
+berliner-volksbank.de,stickerapp.com,stickerapp.de#@#.cookie-consent-v2
+winparts.be,winparts.eu,winparts.fr,winparts.ie,winparts.nl,winparts.se#@#.cookie-consent-wrap
+boehringer.net#@#.cookie-consent-wrapper
+metro.de,oreo.com,swedbank.se#@#.cookie-container
+calameo.com,danbolig.dk,feierabend.de,rusta.com,schwaebisch-hall.de#@#.cookie-content
+danbolig.dk,mega.io#@#.cookie-dialog
+axa-im-usa.com,axa-im.ch,axa-im.co.uk,axa-im.com,axa-im.com.sg,axa-im.de,axa-im.es,axa-im.fr,axa-im.it,axa-im.se,metro.de,realassets.axa-im.com#@#.cookie-disclaimer:not(body)
+sevdesk.de#@#.cookie-footer
+gostanford.com#@#.cookie-holder
+squla.nl#@#.cookie-info-block
+stilord.com,stilord.de,stilord.fr,stilord.pl#@#.cookie-info-box
+mediamarkt.de,mediamarkt.nl#@#.cookie-info-modal
+asialadies.de,avladies.de,badeladies.de,behaarteladies.de,bizarrladies.de,busenladies.de,deutscheladies.de,devoteladies.de,dominanteladies.de,erfahreneladies.de,escorts24.de,exklusivladies.de,fkk24.de,grosseladies.de,hobbyladies.de,jungeladies.de,kollegin.de,kussladies.de,ladies.de,latinaladies.de,massierendeladies.de,mollyladies.de,nsladies.de,nymphomaneladies.de,orientladies.de,osteuropaladies.de,piercingladies.de,rasierteladies.de,schokoladies.de,tattooladies.de,tsladies.de,zaertlicheladies.de,zierlicheladies.de#@#.cookie-info-text
+asialadies.de,avladies.de,badeladies.de,behaarteladies.de,bizarrladies.de,busenladies.de,deutscheladies.de,devoteladies.de,dominanteladies.de,erfahreneladies.de,escorts24.de,exklusivladies.de,fkk24.de,grosseladies.de,hobbyladies.de,jungeladies.de,kollegin.de,kussladies.de,ladies.de,latinaladies.de,massierendeladies.de,mollyladies.de,nsladies.de,nymphomaneladies.de,orientladies.de,osteuropaladies.de,piercingladies.de,rasierteladies.de,schokoladies.de,tattooladies.de,tsladies.de,zaertlicheladies.de,zierlicheladies.de#@#.cookie-info:not(body):not(html)
+kulturprojekte.berlin#@#.cookie-infos
+clickky.biz#@#.cookie-inner
+evaair.com,genua.de#@#.cookie-item
+bbcstudios.com#@#.cookie-message-container
+foodnetwork.it,kramp.com#@#.cookie-message:not(html):not(body)
+filmzie.com,nederlandseloterij.nl,puzzels.ad.nl,puzzels.bd.nl,puzzels.bndestem.nl,puzzels.destentor.nl,puzzels.ed.nl,puzzels.gelderlander.nl,puzzels.parool.nl,puzzels.pzc.nl,puzzels.trouw.nl,puzzels.tubantia.nl,puzzels.volkskrant.nl,tropicana.fr#@#.cookie-modal
+squla.nl#@#.cookie-modal-overlay
+tennisassa.fi#@#.cookie-monster
+findagrave.com#@#.cookie-msg
+schwaebisch-hall.de#@#.cookie-note
+biblioteka.wroc.pl#@#.cookie-notice-container
+evernote.com#@#.cookie-notice-visible
+hype.it,labanquepostale.fr,nexxt.fastweb.it,rosbank.ru,vocearancio.ing.it,wire.com#@#.cookie-on
+finanzen.ch#@#.cookie-overlay
+bbcstudios.com,cvce.eu,fotopuzzle.de,hearst.co.uk#@#.cookie-policy
+squla.nl#@#.cookie-policy-consent
+squla.nl#@#.cookie-policy-modal
+newpharma.be#@#.cookie-policy-popup
+fotopuzzle.de#@#.cookie-policy-wrapper
+logo.pt#@#.cookie-popUp
+60millions-mag.com#@#.cookie-popup
+realme.com#@#.cookie-privacy
+lot.com#@#.cookie-promo
+biblioteka.wroc.pl#@#.cookie-revoke-hidden
+lieferando.de#@#.cookie-statement
+sg-zertifikate.de#@#.cookie-sticky
+drewag.de,enso.de,lvbet.pl,proglib.io,sudoku.com#@#.cookie-visible
+ollca.com,samsung.com,verisign.com#@#.cookie-warning
+ollca.com#@#.cookie-warning-content
+birdpix.nl,nederpix.nl#@#.cookieAccept
+morizon.pl,tweakers.net#@#.cookieBar
+moniteurautomobile.be#@#.cookieBox
+westfalia.de#@#.cookieConsentContent
+westfalia.de#@#.cookieConsentFooter
+birdpix.nl,nederpix.nl,openfiber.it#@#.cookieContainer
+alekhbariya.net,bancacentroemilia.it,hunterdouglas.com,nmsu.edu,paz.de,telecomitalia.it#@#.cookieModal
+tweakers.net#@#.cookieNotice
+cam.start.canon#@#.cookieStatement
+pfand-gehoert-daneben.de#@#.cookie__wrapper
+cam.start.canon#@#.cookie_accept
+crazy-factory.com#@#.cookie_banner
+pressassociation.com#@#.cookie_bar
+security.nl#@#.cookie_consent:not(body):not(html)
+withings.com#@#.cookie_container
+withings.com#@#.cookie_message
+mitsubishielectric.com#@#.cookie_policy
+sonyliv.com#@#.cookie_popup
+inkblot.art,marokko.nl#@#.cookiealert
+schleswig-holstein.de#@#.cookiebanner:not(body)
+azerty.nl,vorwahlen-online.de#@#.cookiebar
+vandebron.nl#@#.cookiebar-container
+cnvinternationaal.nl,dt.mef.gov.it#@#.cookiebar:not(body):not(html)
+futterhaus.de#@#.cookiebox
+hardware.info#@#.cookiecontainer
+book-n-drive.de#@#.cookiedialog
+balay.es,bosch-home.at,bosch-home.be,bosch-home.com,bosch-home.dk,bosch-home.es,bosch-home.fi,bosch-home.fr,bosch-home.lt,bosch-home.lu,bosch-home.nl,bosch-home.no,bosch-home.ro,bosch-home.se,bsh-group.com,constructa.com,home-connect.com,neff-home.com#@#.cookielaw-setcookiepolicy-form
+gids.tv#@#.cookiemessage
+keobeer.com.cy#@#.cookienote
+asialadies.de,avladies.de,badeladies.de,behaarteladies.de,bizarrladies.de,busenladies.de,deutscheladies.de,devoteladies.de,dominanteladies.de,erfahreneladies.de,escorts24.de,exklusivladies.de,filmmusic.io,fkk24.de,grosseladies.de,hobbyladies.de,jungeladies.de,kollegin.de,kussladies.de,ladies.de,latinaladies.de,massierendeladies.de,mollyladies.de,nsladies.de,nymphomaneladies.de,orientladies.de,osteuropaladies.de,piercingladies.de,rasierteladies.de,schokoladies.de,tattooladies.de,tsladies.de,zaertlicheladies.de,zierlicheladies.de#@#.cookies-accept
+trading212.com#@#.cookies-consent-popup
+amarujala.com,fish.shimano.com#@#.cookies-container
+bankmillennium.pl#@#.cookies-info
+mydealz.de#@#.cookies-message
+vtimes.io#@#.cookies-modal:not(body):not(html)
+vtimes.io#@#.cookies-modal__background
+hotspotty.net,little-clogs-holidays.co.uk#@#.cookies-not-set:not(body)
+diy.com#@#.cookies-policy
+elrow.com#@#.cookies-popup
+dominospizza.pl#@#.cookies-visible
+logon.slc.co.uk#@#.cookies-wrap
+tatilsepeti.com#@#.cookies.active
+delhaize.be#@#.cookiesModal
+hublot.com#@#.cookies_consent-show
+logo.pt#@#.cookies_container
+educhel.ru#@#.cookies_popup
+dolomitiwalkinghotel.it,kristalski.com#@#.cookietext
+xlbygg.se#@#.cookievarning-wrap
+canal.be,samsung.com,vaillant.de,xlbygg.se#@#.cookiewarning:not(body):not(html)
+apkpure.com#@#.cp-banner
+e-dym.pl,earthsky.org#@#.cp-popup
+earthsky.org#@#.cp-popup-container:not(body):not(html)
+restock.ca#@#.custom_cookie
+abc.es,as.com,corrieredellosport.it,elconfidencial.com,elindependiente.com,seguro.elespanol.com,tuttosport.com#@#.didomi-notice-banner
+20minutos.es,goplay.be,ouest-france.fr,strefabiznesu.pl#@#.didomi-screen-xlarge
+myrobotcenter.at,myrobotcenter.co.uk,myrobotcenter.de#@#.ec-gtm-cookie-directive
+aireuropa.com#@#.ensNotifyBanner
+aida64.com,nvidia.com,vchaspik.ua#@#.eu-cookie-compliance-popup-open
+verivox.de#@#.gdpr-button
+washingtonpost.com#@#.gdpr-consent
+washingtonpost.com#@#.gdpr-consent-container
+simoncuchillerias.com#@#.gdpr-consent-tabs
+simoncuchillerias.com#@#.gdpr-consent-tabs-v2
+officiallondontheatre.com,sans.org#@#.gdpr-content
+cerave.es#@#.gdpr-cookies
+standaard.be#@#.gdpr-dialog
+slovnaftludom.sk#@#.gdpr-footer
+officiallondontheatre.com#@#.gdpr-overlay
+totalcasino.pl,yamahawaverunners.com#@#.gdpr-popup
+wufoo.com#@#.gdpr-prompt
+farmmedia.com#@#.gdpr-warning
+simoncuchillerias.com#@#.gdprModal__placeholder
+sans.org#@#.gdprNotice
+icims.com#@#.gdpr_wrapper
+unicredit.it#@#.infocookie
+suzuki.co.nz#@#.js-cookie
+geleidehond.nl#@#.js-cookie-alert
+uniroyal.pl#@#.js-cookie-banner
+hildesheimer-allgemeine.de#@#.js-cookie-consent
+capstan.fr#@#.js-cookie-container
+bd-advocaten.nl,elmzell.se#@#.js-cookie-container:not(html):not(body)
+newpharma.be#@#.js-cookie-policy
+mymuesli.com#@#.js-cookies-consent
+balay.es,bosch-home.at,bosch-home.be,bosch-home.com,bosch-home.dk,bosch-home.es,bosch-home.fi,bosch-home.fr,bosch-home.lt,bosch-home.lu,bosch-home.nl,bosch-home.no,bosch-home.ro,bosch-home.se,bsh-group.com,constructa.com,home-connect.com,neff-home.com#@#.js-setcookiepolicy
+suedtirolerjobs.it#@#.m-cookie-consent
+makelaarsland.nl#@#.m-cookie-notice
+genua.de#@#.m-cookiecontrol
+voas.fi#@#.modal-coockie
+christianconcern.com#@#.moove-gdpr-align-center
+christianconcern.com#@#.moove-gdpr-dark-scheme
+xsports.lv#@#.notice-cookie
+balay.es,bosch-home.at,bosch-home.be,bosch-home.com,bosch-home.dk,bosch-home.es,bosch-home.fi,bosch-home.fr,bosch-home.lt,bosch-home.lu,bosch-home.nl,bosch-home.no,bosch-home.ro,bosch-home.se,bsh-group.com,constructa.com,home-connect.com,neff-home.com#@#.o-cookielaw
+cmore.fi,larousse.fr,zoom.us#@#.onetrust-pc-dark-filter
+api.newsguardtech.com#@#.optanon-alert-box-wrapper
+blaklader.at,blaklader.be,blaklader.ca,blaklader.com,blaklader.cz,blaklader.de,blaklader.dk,blaklader.ee,blaklader.es,blaklader.fi,blaklader.fr,blaklader.ie,blaklader.it,blaklader.nl,blaklader.no,blaklader.pl,blaklader.se,blaklader.uk#@#.optanon-show-settings
+costco.com,howstuffworks.com,southpark.de#@#.ot-sdk-show-settings
+ms-reptilien.de,retterspitz.de#@#.page-wrap--cookie-permission
+rodoviariadooeste.pt#@#.pea_cook_wrapper
+idolmaster.jp,okwave.co.jp#@#.policy-box
+gamersgate.com#@#.popup-gdpr
+hemmersbach.com#@#.privacy-policy-consent
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws#@#.privacyBar
+metallica.com#@#.privacy_policy_message_box
+online.no,telenor.no#@#.privacy_prompt
+uniroyal.pl#@#.privacyhint
+seb.se#@#.pw-cookie-consent-v2
+unicredit.it#@#.pws_cookie_bar
+motofaktor.pl#@#.rodo-accept
+farmacja.pl#@#.rodo-modal
+fabrykacukiernika.pl#@#.rodo-popup
+motofaktor.pl#@#.rodo__container
+ondacero.es#@#.sibbo-layout
+edeka.de,schwaebische.de,tf1.fr,tf1info.fr#@#.tc-privacy-banner
+edeka.de,schwaebische.de#@#.tc-privacy-overlay
+lighting.philips.de#@#.truste_box_overlay
+lighting.philips.de#@#.truste_overlay:not(body):not(html)
+ahsgr.org,lurker.land#@#.uk-flex-center.uk-grid-collapse
+playcode.io#@#.welcome-privacy
+stergioufamily.gr#@#.x-cookies-modal
+ceramtec-group.com,openfiber.it,rete.toscana.it#@#[aria-label="cookieconsent"]
+devowl.io#@#[href="https://devowl.io/wordpress-real-cookie-banner/"]
+ollca.com#@#app-cookie-warning
+frag.jetzt#@#app-cookies
+eurostar.com,mediamarkt.de,online.no,telenor.no#@#div#__tealiumGDPRecModal
+tumblr.com#@#div#cmp-app-container
+dcinside.com#@#div#privacy_policy
+elmzell.se#@#div.c-cookies
+educationconnection.com#@#div.ccpa-message
+legifrance.gouv.fr#@#div.cnil
+baden-wuerttemberg.de,calameo.com#@#div.cookie-alert
+autohaus24.de,cera.coop,channel4.com,intersport.de#@#div.cookie-banner
+epochtimes.it,onnibus.com,stilord.com,stilord.de,stilord.fr,stilord.pl#@#div.cookie-bar
+dovoba.de,forcetools-kepmar.eu,moreincommon.de#@#div.cookie-consent
+sevdesk.de#@#div.cookie-consent-modal
+ieatfoodtours.co.uk,onceinrome.com,weliketuscany.it#@#div.cookie-consent-popup
+webtrack.dhlecs.com,withings.com#@#div.cookie-container
+bensanitair.nl,calameo.com#@#div.cookie-content
+sverigesingenjorer.se#@#div.cookie-layer
+account.here.com,calvinklein.at,calvinklein.be,calvinklein.bg,calvinklein.ch,calvinklein.co.uk,calvinklein.com,calvinklein.cz,calvinklein.de,calvinklein.dk,calvinklein.ee,calvinklein.es,calvinklein.fi,calvinklein.fr,calvinklein.hr,calvinklein.hu,calvinklein.ie,calvinklein.it,calvinklein.lt,calvinklein.lu,calvinklein.lv,calvinklein.nl,calvinklein.pl,calvinklein.pt,calvinklein.ru,calvinklein.se,calvinklein.si,calvinklein.sk,caritas-international.de,ieatfoodtours.co.uk,londraculturale.it,onceinrome.com,readly.com,shop.forster.at,uktv.co.uk,weliketuscany.it#@#div.cookie-notice
+gostanford.com#@#div.cookie-notification
+retterspitz.de#@#div.cookie-overlay
+finnair.com#@#div.cookie-policy
+squla.nl#@#div.cookie-popup
+bensanitair.nl,correosexpress.com,dreher.it,gov.lv,milesandbarr.co.uk,puzzels.ad.nl,puzzels.bd.nl,puzzels.bndestem.nl,puzzels.destentor.nl,puzzels.ed.nl,puzzels.gelderlander.nl,puzzels.parool.nl,puzzels.pzc.nl,puzzels.trouw.nl,puzzels.tubantia.nl,puzzels.volkskrant.nl,statestreet.com#@#div.cookie-wrapper
+altenberg-dom.de#@#div.cookieHolder
+sonyliv.com#@#div.cookie_popup
+iledefrance-mobilites.fr#@#div.cookies-banner
+bazaar-online.gr,stergioufamily.gr#@#div.cookies-modal-container
+onas.org.pl#@#div.cookies-visible
+coastalliving.com,commercialtrucktrader.com,cookinglight.com,efarma.com,esselunga.it,essence.com,ew.com,fix-price.com,food.com,fortune.com,gct.com,golf.com,health.com,hellogiggles.com,instyle.com,metallica.com,mirjan24.pl,my.games,ochotnicy.waw.pl,people.com,realsimple.com,ria.com,si.com,slovnaftludom.sk,smooth-on.com,southernliving.com,time.com,touchnote.com,travelandleisure.com,zulily.com#@#div.gdpr
+nutaku.net#@#div.js-disclaimer
+dbschenker.com#@#div.privacy-modal
+etrodo.de,linkezeitung.de,securiti.ai,skfbearingselect.com#@#div.privacy-notice
+arzagagolf.it#@#div.v-cookie
+inspirock.com,loxam.com#@#div.with-cookie
+etsy.com#@#div[data-gdpr-consent-prompt]
+facebook.com,messenger.com#@#div[data-testid="cookie-policy-banner"]
+cookielaw.org#@#section.cookie-banner
+ondacero.es#@#sibbo-cmp-layout
+yoigo.com#@#thor-cookies
+! truste fixes
+concursolutions.com,forbes.com,formula1.com,fortune.com,proximus.be,proximustv.be,sap.com,tmz.com,tripit.com#@##consent_blackbar
+concursolutions.com,forbes.com,formula1.com,fortune.com,proximus.be,proximustv.be,sap.com,tmz.com,tripit.com#@##truste-consent-track
+concursolutions.com,forbes.com,formula1.com,fortune.com,proximus.be,proximustv.be,sap.com,tmz.com,tripit.com#@#.truste_box_overlay
+concursolutions.com,forbes.com,formula1.com,fortune.com,proximus.be,proximustv.be,sap.com,tmz.com,tripit.com#@#.truste_overlay:not(body):not(html)
+
+! *** easylist:easylist_cookie/easylist_cookie_allowlist.txt ***
+@@/assets/cookiebanner.$domain=homify.ae|homify.ca|homify.cl|homify.co.id|homify.co.kr|homify.co.th|homify.co.uk|homify.co.za|homify.com|homify.com.ar|homify.com.br|homify.com.co|homify.com.eg|homify.com.mx|homify.com.my|homify.com.tr|homify.com.ve|homify.de|homify.es|homify.fr|homify.hk|homify.in|homify.it|homify.jp|homify.nl|homify.pe|homify.pk|homify.pl|homify.pt|homify.ru|homify.sa|homify.sg|homify.tw|homify.ua|homify.vn
+@@/complianz-gdpr-premium/cookiebanner/$script,~third-party
+@@/cookie_law/plugin.js$script,~third-party
+@@/otBannerSdk.js$domain=1001games.com|1001hry.cz|1001jeux.fr|1001jocuri.ro|1001jogos.com.br|1001jogos.pt|1001pelit.com|1001spiele.de|10play.com.au|20min.ch|24kitchen.pt|3sat.de|a1.ro|aachener-zeitung.de|abc.com|account.t-mobile.com|albertsons.com|aljazeera.com|all.accor.com|antena3.ro|avon.uk.com|beko.com|bergfreunde.de|bet.com|bigbearmountainresort.com|blaklader.be|blaklader.ca|blaklader.ch|blaklader.com|blaklader.cz|blaklader.de|blaklader.dk|blaklader.ee|blaklader.es|blaklader.fi|blaklader.fr|blaklader.ie|blaklader.nl|blaklader.pl|blaklader.se|blaklader.uk|blick.ch|boomerang-tv.pl|breitbart.com|cbs.com|cbslocal.com|cbsnews.com|cbssports.com|cc.com|channel5.com|chvnoticias.cl|ci.ford.com|cmore.fi|cnet.com|comicbook.com|computerbase.de|cookielaw.org|costco.ca|costco.com|costcopharmacy.ca|crunchyroll.com|cwtv.com|darkreading.com|developer.confluent.io|dhl.de|digitaltrends.com|disney.co.uk|disney.de|disney.dk|disney.es|disney.fi|disney.fr|disney.it|disney.nl|disney.no|disney.pl|disney.pt|disney.se|docs.vmware.com|elisa.fi|elkspel.nl|elle.se|epicgames.com|eurogamer.cz|eurogamer.de|eurogamer.es|eurogamer.it|eurogamer.net|eurogamer.nl|eurogamer.pl|eurogamer.pt|fordblueadvantage.com|foxchannels.com.tr|ga.de|games.miamiherald.com|gamespot.com|geappliances.com|giantbomb.com|giochixl.it|glamour.de|glovoapp.com|gmx.co.uk|gmx.com|gmx.fr|gq-magazine.co.uk|gqmagazine.fr|grajteraz.pl|heute.at|id.trimble.com|ikea.com|ikonpass.com|indiewire.com|informationweek.com|isladejuegos.com|jatekokxl.hu|kanald.ro|karriere.mcdonalds.de|kawasaki.com|kijk.nl|kralmuzik.com.tr|larousse.fr|lippu.fi|listen.tidal.com|louvrehotels.com|mail.com|mcdelivery.de|mensjournal.com|mesta.net|metabomb.net|metacritic.com|metrobyt-mobile.com|midomi.com|milwaukeetool.eu|motorsport-total.com|movistar.es|mtv.com|mtvuutiset.fi|muscleandfitness.com|nachrichten.at|nascar.com|natgeotv.com|netzwelt.de|new.cappex.com|newegg.com|newyorker.com|next.co.uk|nhl.com|nintendo.at|nintendo.be|nintendo.ch|nintendo.co.uk|nintendo.co.za|nintendo.com|nintendo.de|nintendo.es|nintendo.fr|nintendo.it|nintendo.pt|nintendo.ru|npr.org|ntv.com.tr|nutmeg.com|oe24.at|olx.pl|olympics.com|paixnidiaxl.gr|palisadestahoe.com|papajohns.com|paramountplus.com|peacocktv.com|pitchfork.com|player.pl|popculture.com|popeyes.com|popeyeschicken.ca|popsugar.co.uk|porn300.com|proximus.be|pumpkin.care|quora.com|redbull.com|reuters.com|roastmarket.de|rockpapershotgun.com|rp-online.de|rte.ie|rtlnieuws.nl|rtlplay.be|rtlxl.nl|rts.ch|ryobitools.eu|saarbruecker-zeitung.de|safeway.com|shop.mango.com|skateboarding.transworld.net|sony.pl|soundcloud.com|southpark.de|southpark.lat|southparkstudios.com|spel.nl|spelletjes.nl|spelo.se|spiele.bild.de|spiele.stern.de|spillespill.no|spilxl.dk|squareup.com|start.gg|superporn.com|surfer.com|syfy.com|ted.com|teenvogue.com|thejournal.ie|thetrainline.com|tips.at|tokfm.pl|toteraz.pl|tredz.co.uk|tripadvisor.at|tripadvisor.be|tripadvisor.ca|tripadvisor.ch|tripadvisor.cl|tripadvisor.cn|tripadvisor.co|tripadvisor.co.id|tripadvisor.co.il|tripadvisor.co.kr|tripadvisor.co.nz|tripadvisor.co.uk|tripadvisor.co.za|tripadvisor.com|tripadvisor.com.ar|tripadvisor.com.au|tripadvisor.com.br|tripadvisor.com.eg|tripadvisor.com.gr|tripadvisor.com.hk|tripadvisor.com.mx|tripadvisor.com.my|tripadvisor.com.pe|tripadvisor.com.ph|tripadvisor.com.sg|tripadvisor.com.tr|tripadvisor.com.tw|tripadvisor.com.ve|tripadvisor.com.vn|tripadvisor.de|tripadvisor.dk|tripadvisor.es|tripadvisor.fr|tripadvisor.ie|tripadvisor.in|tripadvisor.it|tripadvisor.jp|tripadvisor.nl|tripadvisor.pt|tripadvisor.ru|tripadvisor.se|trustpilot.com|trustradius.com|tunein.com|tvguide.com|tvn.pl|tvn24.pl|udemy.com|uefa.com|upc.pl|uphold.com|usanetwork.com|usmagazine.com|vanityfair.com|vg247.com|victorinox.com|videoland.com|vimeo.com|vizio.com|vkmag.com|vogue.co.jp|vogue.co.uk|vogue.com|vogue.com.tw|vogue.de|vogue.es|vogue.fr|vogue.in|vogue.it|vogue.mx|vogue.ph|volksfreund.de|wallapop.com|wargaming.net|westernunion.com|wired.com|worldoftanks.ru|worldsurfleague.com|wrangler.com|yvesrocher.com.tr|zdf.de|zdnet.com|zoom.us
+@@/zig_cookiepolicybar/*/CookieBar.js$script,~third-party
+@@||django-cookie-consent.readthedocs.io^$~third-party
+! https://github.com/ryanbr/fanboy-adblock/issues/721#issuecomment-443395851
+! https://github.com/ryanbr/fanboy-adblock/issues/1133
+@@/wp-content/plugins/bwp-minify/min/?*,wp-content$script,stylesheet,~third-party
+@@/wp-content/plugins/wp-minify/min/?*,wp-content$script,stylesheet,~third-party
+@@||192.168.*/privacy_policy.js$~third-party
+@@||3332222.ru/cookie-popup.$~third-party
+@@||366.bg/cookieconsent/cookieconsent.min.js$~third-party
+@@||a.fsdn.com/con/js/sftheme/cmp2.js$script,domain=m.slashdot.org
+@@||adblockplus.org/img/cookie-notice.svg$~third-party
+@@||adtipp.de/js/cookiebanner.js
+@@||aicasanitaire.fr/extras/min/$script,~third-party
+@@||alicdn.com/js/*/cookie-info.js$script
+@@||alicdn.com/js/*/ws-cookie.js$script
+@@||aliunicorn.com^*/cookie-info.js
+@@||alphavps.com/assets/js/services/CookiesConsent.min.js
+@@||ampproject.org^*/amp-consent-$domain=9to5google.com|9to5mac.com|connectthewatts.com|dronedj.com|electrek.co|lelum.pl|martdroid.de|spaceexplored.com|www-history-com.cdn.ampproject.org
+@@||api.mercari.jp/experiments/get_running_experiments_by_name$xmlhttprequest,domain=jp.mercari.com
+@@||api.transcend.io/privacy/graphql$xmlhttprequest
+@@||apikeys.civiccomputing.com^$xmlhttprequest,domain=videogameschronicle.com
+@@||app.weathercloud.net/assets/*/CookieMonster.min.js$~third-party
+@@||appscdn.camilyo.software/cookie-consent/static/cookiesBlocker.min.js$script,domain=vtsz.cz
+@@||arbetsgivarverket.se/js/cookieconsent.js$script,~third-party
+@@||assets.travix.com/client/cookie-banner-$script
+@@||astrogaming.com/etc.clientlibs/logitech-common/clientlibs/onetrust.$script,~third-party
+@@||banking.fyrst.de/translations/*-cookiedisclaimer$~third-party,xmlhttprequest
+@@||barclays.co.uk^*/cookiepolicy.js$~third-party
+@@||bbci.co.uk^*/cookie-library.min.js
+@@||betterworldbooks.com/app/components/cookienotice.js$script,~third-party
+@@||blizzcon.com/static/scripts/bootstrap-blz-cookie-consent.js$script,~third-party
+@@||blizzcon.com/static/scripts/vendor/cookie-consent-filter-compat.js$script,~third-party
+@@||brandexperience-group.com/assets/js/cookie.notice.min.js$script,~third-party
+@@||budgetthuis.nl^*/cookieBar-$script,~third-party
+@@||c.evidon.com/sitenotice/evidon-sitenotice-tag.js$script,domain=southpark.de|southparkstudios.nu
+@@||cafedelapaix.fr/assets/plugins/bwp-minify/min/$script,~third-party
+@@||campus.arte.tv/js/components/cookie-banner.js
+@@||carport-diagnose.de/script/cookieconsent.min.js$~third-party
+@@||cdn-national-lottery.co.uk/c/js/cuk_core.min.js
+@@||cdn.appconsent.io^$script,domain=commentcamarche.net|journaldesfemmes.fr|lachainemeteo.com|lefigaro.fr|linternaute.com
+@@||cdn.jsdelivr.net/gh/Wruczek/Bootstrap-Cookie-Alert@gh-pages/cookiealert.js$script,domain=inkblot.art
+@@||cdn.jsdelivr.net^*/cookieconsent.min.js$domain=papekenworth.com
+@@||cdn.opencmp.net/tcf-v2/cmp-latest.js$script,domain=foraum.de
+@@||cdn.opencmp.net/tcf-v2/cmp-stub-latest.js$script,domain=idowa.de
+@@||cdn.trustcommander.net/privacy/$script,domain=edeka.de|tf1.fr|tf1info.fr
+@@||ceramtec-group.com^*/cookieconsent.min.js
+@@||chasecdn.com^*/cookie.js$script,domain=chase.com
+@@||choices.consentframework.com^$domain=frandroid.com|numerama.com
+@@||civiccomputing.com^*/cookieControl-$script,domain=amplitude.com|kit.co|msi.com|pilates.com|romania-insider.com|stagecoachbus.com|videogameschronicle.com
+@@||client.axept.io^$domain=welcometothejungle.com
+@@||cloudflare.com^*/cookieconsent.min.js$domain=cards.thm.de|ehftv.com|pixelexperience.org|pixieset.com|rijbewijskeuringennederland.nl|sammobile.com|xnview.com
+@@||cloudfront.net^*/lib.f-cookie-banner.$script,domain=just-eat.co.uk|just-eat.es|just-eat.ie|justeat.it
+@@||cmp-consent-tool.privacymanager.io^$subdocument,domain=dailybuzz.nl|esquire.de|futurezone.at|geenstijl.nl|gids.tv|kinuskikissa.fi|kleinezeitung.at|kurier.at|lablue.de|nettivuokraus.com|omroepbrabant.nl|parra.nu|plusonline.nl|profil.at|rtvnoord.nl|vesti.bg|weeronline.nl|weerplaza.nl
+@@||cmp.osano.com^$script,domain=lucidchart.com|meeting.guidepoint.com
+@@||computerbase.de^*/consent/$script,xmlhttprequest
+@@||computerbase.de^*/scripttemplates/$script,xmlhttprequest
+@@||consent.cmp.oath.com^$script,domain=cyclingnews.com|express.co.uk|techcrunch.com
+@@||consentmanager.mgr.consensu.org/delivery/$stylesheet,xmlhttprequest,domain=sourceforge.net
+@@||consentmanager.net^$script,subdocument,domain=bluray-disc.de|lippu.fi|racingnews365.com|spar.hu|teslamag.de|test.de|vkmag.com|webfail.com|winfuture.de
+@@||cookie-consent.ingatlancdn.com^$script,domain=immobilienungarn.net|ingatlan.com|realestatehungary.hu
+@@||cookiebot.com/uc.js$domain=bakingmad.com|flughafen-zuerich.ch|lidl.gr|stock3.com|zuiderzeemuseum.nl
+@@||cookiebot.com^$domain=apetro.pt|apoteket.se|asambeauty.com|bankia.es|bergbauernmilch.de|berlingske.dk|biomarkt.de|bt.dk|caisse-epargne.fr|cajamar.es|cineplex.de|danbolig.dk|dasinvestment.com|derivate.bnpparibas.com|digimon.kochfilms.de|digitaltrends.com|dr.dk|egmont.com|ekstrabladet.dk|elmzell.se|euroatla.pt|fidelityhouse.eu|finanzmarktwelt.de|fof.se|formule1.nl|harzwasserwerke.de|hoyavision.com|kino.dk|login.nos.pt|mein-grundeinkommen.de|neue.at|nngroup.com|nordiskfilm.com|plaion.com|quandoo.it|refinery29.com|rhein-ruhr.stadtmobil.de|scubadiving.com|sportdiver.com|stern.de|storyhouseegmont.dk|storyhouseegmont.no|storyhouseegmont.se|swspremberg.de|toyota-forklifts.se|vn.at|warscrap.io|werder.de|werkenbijlidl.nl|wwf.fi|xn--myeblttle-z2a.de
+@@||cookielawinfo.com^$~third-party
+@@||crazy-factory.com/ajax_box_cookie_banner.php$~third-party
+@@||d3skrbn3b616hn.cloudfront.net/b/mw/lib.f-cookie-banner.$script,domain=menulog.com.au
+@@||data.gov.hk/assets/shared/js/scripts/cookieAlert.js$~third-party
+@@||dayforcehcm.com/CandidatePortal/Scripts/CandidatePortal/Cookie/CookieBanner.js$~third-party
+@@||dayforcehcm.com/CandidatePortal/StaticViews/CandidatePortal/Cookie/$~third-party
+@@||demarches.interieur.gouv.fr/js/tarteaucitron/
+@@||deutsche-weihnachtsmaerkte.de/booster/$~third-party
+@@||dl.gmx.com/permission/oneTrust/consent/$~third-party
+@@||dl.mail.com/permission/oneTrust/consent/$~third-party,xmlhttprequest
+@@||dr-sup.de/_Resources/Static/Packages/$stylesheet,~third-party
+@@||ecookie.nl/build/$domain=playseatstore.com
+@@||einthusan.tv/gdpr-consent-quantcast.js$~third-party
+@@||embedplus.com/iframe-cookie-consent.aspx$subdocument
+@@||eok.ee/javascripts/cookiebar.js$~third-party
+@@||erlebnissennerei-zillertal.at/typo3conf/ext/bh/Resources/*/cookie-popup.$~third-party
+@@||euromaster.de/v/$script,~third-party
+@@||eurosportplayer.com/cms/articles/cookie-banner?$xmlhttprequest
+@@||evbstatic.com^*/cookie_header.js
+@@||evidon.com/sitenotice/$domain=etonline.com|popsugar.co.uk|telegraph.co.uk
+@@||exali.de/static/theme/assets/js/cookieBanner.js
+@@||files.bbci.co.uk^*/cookie-banner/$script,domain=bbc.co.uk
+@@||fordblueadvantage.com/cars-for-sale/client/js/cookiebanner.$~third-party
+@@||fourseasons.com/alt/apps/fshr/shared/gdpr-banner.$~third-party
+@@||fourseasons.com/alt/fshr/shared/$~third-party
+@@||fundingchoicesmessages.google.com/i/$script,domain=kledgeb.blogspot.com
+@@||fvd.nl/_nuxt/cookiebanner.$~third-party
+@@||gamersgate.com/js/cookieconsent.js$script,~third-party
+@@||gazetabilgoraj.pl/wp-content/plugins/uk-cookie-consent/
+@@||gdpr-wrapper.privacymanager.io/gdpr/$script,xmlhttprequest,domain=dailybuzz.nl|esquire.de|futurezone.at|geenstijl.nl|gids.tv|kinuskikissa.fi|kleinezeitung.at|kurier.at|lablue.de|nettivuokraus.com|omroepbrabant.nl|parra.nu|pickmypostcode.com|plusonline.nl|profil.at|rtvnoord.nl|verkeerplaza.nl|vesti.bg|weeronline.nl|weerplaza.nl
+@@||gdpr.privacymanager.io^$script,domain=dailybuzz.nl|diepresse.com|esquire.de|futurezone.at|geenstijl.nl|gids.tv|kinuskikissa.fi|kleinezeitung.at|kurier.at|lablue.de|nettivuokraus.com|omroepbrabant.nl|parra.nu|plusonline.nl|profil.at|rtvnoord.nl|vesti.bg|weeronline.nl|weerplaza.nl
+@@||geo.privacymanager.io^$xmlhttprequest,domain=omroepbrabant.nl|plusonline.nl|weerplaza.nl
+@@||geolocation.onetrust.com/cookieconsentpub/$xmlhttprequest,domain=~cbsnews.com|~cnbc.com|~metacritic.com|~teenvogue.com|~vogue.co.jp|~vogue.co.uk|~vogue.com|~vogue.com.tw|~vogue.de|~vogue.es|~vogue.fr|~vogue.in|~vogue.it|~vogue.mx|~vogue.ph
+@@||getsysteminfo.com/javascript/cookieconsent.min.js$script,~third-party
+@@||gigacloud.ua^*/cookieconsent.min.js$~third-party
+@@||gizmochina.com/wp-content/plugins/cookie-law-info/public/js/cookie-law-info-public.js$~third-party
+@@||gmx.net/magazine/consent-management/|
+@@||golem.de/abo/setconsentcookie.php
+@@||gouvernement.fr^*/tarteaucitron/$~third-party
+@@||gstatic.com/brandstudio/kato/cookie_choice_component/$script,domain=blog.google
+@@||handies.com/wp-content/uploads/pum/pum-site-scripts.js$~third-party
+@@||hellenicbank.com/portalserver/*/cookies-consent.js$script
+@@||hintertuxergletscher.at/typo3conf/ext/bh/Resources/Public/$~third-party
+@@||hktdc.com/resources/cookieconsent/$~third-party
+@@||honoku.com/_app/immutable/chunks/cookiebanner.$~third-party
+@@||hp.com^*/caas-privacy-cookie-$script
+@@||ibadual.com/design/ibadual/javascript/cookieconsent.min.js$~third-party
+@@||idtech.com/_nuxt/CookieWarning.$script
+@@||ikea.com^*/cookieconsent-onetrust-js.js
+@@||impossible3ds.com/wp-content/plugins/uk-cookie-consent/js/uk-cookie-consent-js$~third-party
+@@||intersport.no/cookiewall?$~third-party
+@@||jaybirdsport.com/etc.clientlibs/logitech-common/clientlibs/onetrust.$~third-party
+@@||jimstatic.com/cookieControl.js$domain=msa-berlin.de|sahne-band.de
+@@||khl.ru^*/cookieconsent.min.js
+@@||krainz-loipersdorf.at/statics/js/cookieconsent.js$~third-party
+@@||kuechencenterweber.de/js/cookiebanner.js$~third-party
+@@||lacoste.com^*/cookie-consent.js
+@@||leanlibrary.com/wp-content/plugins/complianz-gdpr/assets/js/cookieconsent.min.js$~third-party
+@@||lecourrier-du-soir.com^*/uk-cookie-consent-js
+@@||lightningmaps.org^*/cookieconsent.$script,stylesheet
+@@||lockwood-avenue.com^*/cookielaw/$~third-party
+@@||login.csdisco.com^$generichide
+@@||logitech.com/etc.clientlibs/logitech-common/clientlibs/onetrust.$~third-party
+@@||logitechg.com/etc.clientlibs/logitech-common/clientlibs/onetrust.$~third-party
+@@||mediateurfevad.fr/wp-content/plugins/CookieInfo/js/CookieInfo.js$~third-party
+@@||microsoft.com/api/privacy/cookieconsent?$xmlhttprequest,domain=docs.microsoft.com
+@@||muestair.ch/fileadmin/dev/scripts/cookiebar.js$~third-party
+@@||my101.me^$generichide
+@@||mynexity.fr/App_Themes/V3/js/Didomi.js$~third-party
+@@||nectar.com/lib/cookieBanner.js$~third-party
+@@||newpharma.be/dist/cookie_policy.$~third-party
+@@||news.microsoft.com/wp-content/plugins/microsoft-oembeds/$~third-party
+@@||nice.fr/bundles/manacc/librairies/cookiecuttr/$~third-party
+@@||nle.nl/assets/label/nle/js/cookieBar-$~third-party
+@@||norlysplay.dk/public/js/cookie-banner.$~third-party
+@@||notice.sp-prod.net^$subdocument,domain=telegraph.co.uk
+@@||ochotnicy.waw.pl/plugins/system/gdpr/$~third-party
+@@||oddschecker.com/cookie-policy-banner/$~third-party
+@@||onepage.io/api/v1/cookie-service/lib/$script
+@@||onetrust.com/consent/$domain=konami.com|nintendolife.com|panasonic.com|pushsquare.com|technics.com
+@@||onetrust.com/request/$xmlhttprequest
+@@||onetrust.com/scripttemplates/$domain=konami.com|nintendolife.com|panasonic.com|pushsquare.com|technics.com
+@@||onetrust.com/vendorlist/$domain=nintendolife.com|pushsquare.com
+@@||onetrust.com/webform/$subdocument
+@@||onlineservice.ewr-gmbh.de/ui.components.extended/material/nli-cookie-banner/$script,~third-party
+@@||ouestfrance-immo.com/min/f=/js/common/$~third-party
+@@||ozracing.com/templates/oz/js/vendor/cookies-enabler.min.js
+@@||parastorage.com/services/wix-thunderbolt/dist/cookiesManager.
+@@||playoverwatch.com/static/externals/cookie-consent-filter-compat.js
+@@||policy.app.cookieinformation.com^$domain=altibox.no|elkjop.no|fdm-travel.dk|jysk.nl|power.no|skousen.dk|skousen.no|whiteaway.com|whiteaway.no|whiteaway.se
+@@||portal.aae.at^*/cookieconsent.js$script,~third-party
+@@||portal.energie-graz.at/kundenportal/css/cookieconsent/$~third-party
+@@||portal.energie-graz.at/kundenportal/js/lib/cookieconsent.js$~third-party
+@@||privacypolicies.com/public/uploads/$image,~third-party
+@@||privacyportal-cdn.onetrust.com^$xmlhttprequest,domain=materialplus.io|minehut.com
+@@||purpleair.com/js/gdpr-cookie-consent-popup-plugin/$~third-party
+@@||quantcast.mgr.consensu.org/cmp.js$script,domain=cyclingnews.com|express.co.uk|independent.co.uk|ladbible.com
+@@||quantcast.mgr.consensu.org/GVL-v2/$domain=adnkronos.com|bsshotel.it|centrometeoitaliano.it|comingsoon.it|express.co.uk|fantacalcio.it|fly4free.com|gianlucadimarzio.com|ilbianconero.com|independent.co.uk|livetennis.it|money.it|skoften.net|vi.nl|wackojaco.com
+@@||quantcast.mgr.consensu.org/tcfv2/$domain=adnkronos.com|centrometeoitaliano.it|comingsoon.it|express.co.uk|fantacalcio.it|fly4free.com|gianlucadimarzio.com|ilbianconero.com|independent.co.uk|livetennis.it|money.it|skoften.net|vi.nl|wackojaco.com
+@@||quantcast.mgr.consensu.org^*/choice.js$domain=centrometeoitaliano.it|cerebriti.com|comingsoon.it|cyclingnews.com|express.co.uk|fantacalcio.it|fly4free.com|gianlucadimarzio.com|gingergeneration.it|ilbianconero.com|kueez.com|livetennis.it|money.it|player.livespotting.com|skoften.net|space.com|tviplayer.iol.pt|vi.nl|wackojaco.com
+@@||quantcast.mgr.consensu.org^*/cmp2.js$script,domain=bikeperfect.com|centrometeoitaliano.it|cerebriti.com|cnews.fr|comingsoon.it|cyclingnews.com|dailyrecord.co.uk|digitalcameraworld.com|einthusan.tv|express.co.uk|f1aldia.com|fantacalcio.it|fly4free.com|gamesradar.com|gianlucadimarzio.com|guitarplayer.com|ilbianconero.com|independent.co.uk|indy100.com|kueez.com|ladbible.com|laptopmag.com|livescience.com|livetennis.it|livingetc.com|mirror.co.uk|musicradar.com|nfl.com|pcgamer.com|player.livespotting.com|porconocer.com|protothema.gr|realhomes.com|researchgate.net|skoften.net|space.com|t3.com|techradar.com|tomsguide.com|tomshardware.com|tumblr.com|vi.nl|wackojaco.com|whathifi.com|whattowatch.com
+@@||retrogames.cc/js/cookieconsent.min.js$~third-party
+@@||ringcentral.com/etc.clientlibs/commons/clientlibs/utility/onetrust-helper/$~third-party
+@@||riwal.com/includes/js/components/cookiebar.js$script
+@@||rtlplay.be/oneTrust-$~third-party
+@@||salonkee.cloud/data/other/js/cookie-consent-
+@@||santepubliquefrance.fr/rgpd/smarttag.js$script,~third-party
+@@||schibsted.io^*/gdpr-bundle.js
+@@||sdk.privacy-center.org^$script,domain=20minutos.es|abc.es|allocine.fr|as.com|autopista.es|beinsports.com|belfasttelegraph.co.uk|bfmtv.com|bonduelle.it|ciclismoafondo.es|cnews.fr|corrieredellosport.it|decathlon.pl|dumpert.nl|dziennikwschodni.pl|dziennikzachodni.pl|ebuyclub.com|elcomercio.es|elconfidencial.com|europe1.fr|filmweb.pl|fip.fr|france24.com|franceculture.fr|franceinter.fr|francetvinfo.fr|frandroid.com|funradio.fr|gamepro.de|gamestar.de|gloswielkopolski.pl|gofeminin.de|goplay.be|hbvl.be|ivoox.com|jeanmarcmorandini.com|jeuxvideo.com|jofogas.hu|krone.at|lavanguardia.com|leboncoin.fr|lequipe.fr|marianne.net|mein-mmo.de|melty.fr|metronieuws.nl|motociclismo.es|mountainbike.es|movilzona.es|mundo-geo.es|mundodeportivo.com|mundogravel.es|na.se|naszemiasto.pl|nieuwsblad.be|numerama.com|onmeda.de|podcasts.leparisien.fr|publicsenat.fr|recup.paylib.fr|revistaoxigeno.es|rfi.fr|rtl.be|rtl.fr|seguro.elespanol.com|sensacine.com|serially.it|sncf-connect.com|softonic.com|soycorredor.es|sportlife.es|standaard.be|strefabiznesu.pl|telegraaf.nl|trailrun.es|triatlonweb.es|tuttosport.com|vecernji.hr|xataka.com
+@@||sdrplay.com^*/pum-site-scripts.js$~third-party
+@@||se.com/myschneider/assets/onetrust.$~third-party
+@@||shop.bora-sauna.de/components/cookieconsent2/build/cookieconsent.min.js
+@@||sonnenverlauf.de/scripts/cookieconsent.min.js$~third-party
+@@||sourcepoint.mgr.consensu.org^$domain=t3n.de
+@@||sourcepointcmp.bloomberg.*/mms/get_site_data?$domain=bloomberg.co.jp|bloomberg.com
+@@||spacecentre.co.uk^*/uk-cookie-consent-js
+@@||st.getsitecontrol.com/main/runtime/$script,domain=beaconclimbing.com
+@@||stabila.com/bundles/marketingsuite/css/cookie-bar.css
+@@||starhotels.com^*/cookiesdisclaimer.js$script
+@@||static.axept.io/sdk-slim.js$script,domain=www.welcometothejungle.com
+@@||static.go3.tv/file/go3/resources/*/onetrust.html$domain=play.tv3.lt|tv3play.skaties.lv
+@@||stayathomemum.com.au/wp-content/plugins/beautiful-and-responsive-cookie-consent/public/cookieNSCconsent.min.js$script,~third-party
+@@||steuerberatung-berlin.de/cookiepolicynotification/javascript/jquery.cookie.policy.min.js$~third-party
+@@||strava.com/cookie-banner.js$~third-party
+@@||stwater.co.uk^*/cookie-banner.stw_props.json$~third-party
+@@||suncalc.org/scripts/cookieconsent.min.js
+@@||superrichthailand.com/cookie-policy/cookie-policy.js
+@@||superrichthailand.com/privacy-policy/privacy-policy.js
+@@||sweetmarias.com/static/$script,~third-party
+@@||swisstph.ch/*/gdpr.min.js$~third-party
+@@||swnsdigital.com/*/webtoffee-gdpr-cookie-consent/$~third-party
+@@||tefl.com/lib/jquery.cookiebar.js
+@@||theautopian.com/content/plugins/complianz-gdpr/core/assets/js/cookieconsent.min.js
+@@||tinder.com/static/build/chunks/CookiePolicyBanner-$script
+@@||tiwag.at/typo3conf/ext/bh/Resources/*/cookie-popup.$~third-party
+@@||topocentras.lt/js/CookieConsent-$~third-party
+@@||trafficengland.com/resources/
+@@||trinitymedia.ai/player/$script,subdocument
+@@||tripcdn.com/modules/ibu/online-flight/common-cookie-banner.$domain=trip.com
+@@||tv.sibbo.net/v2/sibbo-cmp-core.js$script,domain=atresplayer.com
+@@||tweakers.net/ajax/cookie-consent/$~third-party,xmlhttprequest
+@@||tweakers.net/x/styles/components/cookiebar/cookie_bar.css$~third-party
+@@||tygodniksiedlecki.com/assets/mobile/cookiebar/jquery.cookiebar.js
+@@||universumglobal.com/wp-content/plugins/cookie-law-info/
+@@||virginmediatelevision.ie/*/cookienotice.js$script,~third-party
+@@||vistaalegre.com/public/js/vendor/$script,stylesheet,~third-party
+@@||vps2day.com/wp-content/plugins/complianz-gdpr/core/assets/js/cookieconsent.min.js$~third-party
+@@||washingtonpost.com/gdpr-consent/$subdocument,xmlhttprequest
+@@||wasing.co.uk/global/cookie/$~third-party
+@@||wcpstatic.microsoft.com/mscc/lib/v2/wcp-consent.js$domain=azure.com|blogs.bing.com|blogs.windows.com|customsearch.ai|halowaypoint.com|mcr.microsoft.com|nonprofit.microsoft.com|pcmanager-en.microsoft.com|pcmanager.microsoft.com|serviceshub.microsoft.com|setup.microsoft.com|todo.microsoft.com|web.groupme.com|zone.msn.com
+@@||wesendit.com/lib/cookieconsent.min.js$~third-party
+@@||whufc.com/modules/custom/clubcast_core/js/cookie-consent.$~third-party
+@@||widgets.getsitecontrol.com^$script,domain=beaconclimbing.com
+@@||workingtitlefilms.com/site-content/plugins/nbcu-plugins/bwp-minify/$stylesheet
+@@||www.digikey.*/cookie-notice.css$stylesheet,~third-party
+@@||x-plarium.com/browser/canvas/*/cookiesbanner.js$domain=plarium.com
+@@||xe.com/themes/xe/js/react/cookie-consent.$script,~third-party
+@@||zappo.fr/assets/plugins/bwp-minify/min/$script,~third-party
+@@||ziffstatic.com^*/zdconsent.js$domain=allestoringen.be|allestoringen.nl|downdetector.ae|downdetector.ca|downdetector.cl|downdetector.co.nz|downdetector.co.uk|downdetector.co.za|downdetector.com|downdetector.com.ar|downdetector.com.au|downdetector.com.br|downdetector.com.co|downdetector.cz|downdetector.dk|downdetector.ec|downdetector.es|downdetector.fi|downdetector.fr|downdetector.gr|downdetector.hk|downdetector.hr|downdetector.hu|downdetector.id|downdetector.ie|downdetector.in|downdetector.it|downdetector.jp|downdetector.mx|downdetector.my|downdetector.no|downdetector.pe|downdetector.ph|downdetector.pk|downdetector.pl|downdetector.pt|downdetector.ro|downdetector.ru|downdetector.se|downdetector.sg|downdetector.sk|downdetector.tw|downdetector.web.tr|humblebundle.com|ign.com|xn--allestrungen-9ib.at|xn--allestrungen-9ib.ch|xn--allestrungen-9ib.de
+! www.douglas.de/www.douglas.at
+@@||www.douglas.*/public/cookieconsent.
+! International
+@@||amigosmuseoreinasofia.org/assets/js/cookiecuttr/jquery.cookie.js
+@@||areaclienti.generali.it/AreaClienti/plugins/
+@@||candidat.pole-emploi.fr^*/modules/jquery-eu-cookie-law-popup.js$script
+@@||cdn.rp.pl/cmp/cmp.min.js
+@@||cdn.transcend.io/cm/$script,domain=outlier.org|pluralsight.com|visible.com
+@@||cdp.pl/skin/*/cookies.js
+@@||ciaopeople.it^*/sdk-gdpr.$script,domain=cookist.com|cookist.it|fanpage.it|geopop.it|ohga.it
+@@||cloudflare.com^*/cookieconsent.min.js$domain=bab.la|firkloveren.no|satkurier.pl
+@@||cmp-assets.pubtech.ai/vendorList/$xmlhttprequest,domain=ilgiorno.it|ilrestodelcarlino.it|iltelegrafolivorno.it|lanazione.it|quotidiano.net
+@@||cmp.pubtech.ai/124/pubtech-cmp-v2.js$domain=ilgiorno.it|ilrestodelcarlino.it|iltelegrafolivorno.it|lanazione.it|quotidiano.net
+@@||cmpv2.cookist.it/embed2/rmi/1.2.5|$subdocument
+@@||cmpv2.fanpage.it/embed2/rmi/1.2.5|$subdocument
+@@||components2.rcsobjects.it/rcs_cpmt/v1/distro/youreporter_ct.js$domain=youreporter.it
+@@||consent.cookiefirst.com/banner.js$domain=betten.de
+@@||content.unicredit.it/etc/designs/ucpublic/it/*/informativa_cookie.js$script,stylesheet,~third-party
+@@||content.unicredit.it/etc/designs/ucpublic/it/css/cookie/main.css
+@@||cookiefirst.com^$domain=hemmersbach.com|proaurum.de
+@@||cyrk-zalewski.com.pl^*/CookieInfo.js$script
+@@||ebok.vectra.pl/components/layout/cookie-bar/
+@@||firkloveren.no/skin/$script,stylesheet
+@@||footroll.pl/js/vendor/cookiebox.min.js
+@@||gogolf.fi/wp-content/plugins/webtoffee-gdpr-cookie-consent/$~third-party
+@@||holiday.aquila.pl/min/f=/js/$script
+@@||idg.se/idg-consent.min.js$script
+@@||internazionale.it/assets/js/cookies_gdpr.js?
+@@||iubenda.com^$script,stylesheet,subdocument,xmlhttprequest,domain=105.net|3bmeteo.com|all3dp.com|ansa.it|artribune.com|automoto.it|brutkasten.com|capital.it|cioccolatonippon.it|darkhorizons.com|deejay.it|gelocal.it|huffingtonpost.it|ilgazzettino.it|ilmattino.it|ilmessaggero.it|ilsecoloxix.it|lastampa.it|leanplayer.com|leggo.it|m2o.it|mediaset.it|mee6.xyz|meteo.it|moto.it|movieplayer.it|mowmag.com|multiplayer.it|player.boom973.com|r101.it|radiomontecarlo.net|repubblica.it|rockol.it|saratoga.it|today.it|tomshw.it|virginradio.it
+@@||kalaydo.de^*/cookie-consent.jsc.js$domain=kalaydo.de
+@@||kjellmann.no^*/cookielaw/css/cookielaw.css$stylesheet
+@@||learner.mycreds.ca/assets/js/services/cookiesConsent.min.js$~third-party
+@@||learner.mycreds.ca/r/assets/*/cookiesConsent.json$~third-party
+@@||meine.postbank.de/*-cookieDisclaimer-*.json$~third-party,xmlhttprequest
+@@||muoversiatorino.it/wp-content/plugins/complianz-gdpr/cookiebanner/js/complianz.min.js$script,~third-party
+@@||my.sevdesk.de/shared/components/CookieConsent/CookieConsentModal.html$xmlhttprequest
+@@||mymuesli.com/assets/js/cookiespopup.js$script
+@@||nowegumy.pl/cookiecuttr.js
+@@||openai.com/compliance/cookie_consent/$~third-party
+@@||orangeclickmedia.com/tech/libs/js.cookie.min.js$domain=protothema.gr
+@@||otter.finance/assets/js/cookieconsent.js
+@@||polenka.pl/wp-content/plugins/cookie-law-info/js/cookielawinfo.js$script
+@@||portalbici.es/lib/cookiecuttr/$script
+@@||prezzibenzina.it/www2/js/jquery.cookiebar.js$domain=prezzibenzina.it
+@@||radio24.ilsole24ore.com/plugins/cordova-plugin-onetrust-cmp/www/OneTrust.js$script,~third-party
+@@||rai.it/dl/components/js/cookiebanner/
+@@||rai.it^*/cookie.pack.js$script
+@@||rainews.it/common/assets/js/cookieBanner.js$script
+@@||rainews.it/dl/components/js/cookiebanner/$script,xmlhttprequest
+@@||rainews.it^*/cookie.pack.js$script
+@@||raiplaysound.it/common/assets/js/cookieBanner.js$script
+@@||raiplaysound.it/dl/components/js/cookie.pack.js$script
+@@||raiplaysound.it/dl/components/js/cookiebanner/$script,xmlhttprequest
+@@||studentenwoningweb.nl/KRN/Scripts/jquery.cookiecuttr.js
+@@||swissmed.com.pl/js/jquery.cookiecuttr.js
+@@||sync.transcend.io/consent-manager/$subdocument,domain=outlier.org
+@@||telekom.hu/fiokom/api/settings/consent-management/statement-block-groups$xmlhttprequest,domain=telekom.hu
+@@||termsfeed.com/public/cookie-consent/*/cookie-consent.js$domain=rentastar.pt
+@@||topschool.pl/wp-content/plugins/CookieInfo/js/CookieInfo.js$script
+@@||usercentrics.eu^$script,subdocument,xmlhttprequest,domain=atv.at|bayer04.de|douglas.de|festool.at|festool.be|festool.bg|festool.ch|festool.cn|festool.co.kr|festool.co.uk|festool.co.za|festool.com|festool.cz|festool.de|festool.dk|festool.es|festool.fi|festool.fr|festool.hu|festool.ie|festool.it|festool.lt|festool.nl|festool.no|festool.pl|festool.pt|festool.ro|festool.ru|festool.se|festool.sk|festool.ua|festoolcanada.com|festoolusa.com|flaschenpost.de|immowelt.de|joyn.de|kicker.de|morenutrition.de|paketshop.myhermes.de|postbank.de|prosieben.at|puls4.com|ran.de|sat1.at|schlager.radio|sportdeutschland.tv|srf.ch|verivox.de|wetter.com
+@@||vendorlist.consensu.org/vendorlist.json$xmlhttprequest,domain=telegraph.co.uk|tf1.fr
+@@||vesmir.cz/components/eu_cookie/$script
+@@||vulcangas.com^*/cookie-notice/$script
+@@||webtv.stofa.dk/public/js/cookie-banner.$script,~third-party
+@@||wikia.nocookie.net^$script,domain=fandom.com
+@@||zensus2022.de/SiteGlobals/Modules/CookieBanner/*/CookieBanner.json?$~third-party,xmlhttprequest
diff --git a/uAssets/thirdparties/easylist/easylist-newsletters.txt b/uAssets/thirdparties/easylist/easylist-newsletters.txt
new file mode 100644
index 0000000..ce45b0e
--- /dev/null
+++ b/uAssets/thirdparties/easylist/easylist-newsletters.txt
@@ -0,0 +1,5210 @@
+[Adblock Plus 2.0]
+! Title: EasyList – Newsletter Notices
+! Last modified: %timestamp%
+! Expires: 7 days (update frequency)
+! *** easylist:template_header.txt ***
+!
+! Please report any unblocked adverts or problems
+! in the forums (https://forums.lanik.us/)
+! or via e-mail (easylist@protonmail.com).
+!
+! Homepage: https://easylist.to/
+! Licence: https://easylist.to/pages/licence.html
+! GitHub issues: https://github.com/easylist/easylist/issues
+! GitHub pull requests: https://github.com/easylist/easylist/pulls
+!
+!--------------------------General blocking rules-----------------------------!
+! *** easylist:fanboy-addon/fanboy_newsletter_general_block.txt ***
+-footer-newsletter.
+-newsletter-popup.
+-newsletterwidget.
+-square-newsletter.
+/ame-newsletter-public.js
+/assets/newsletter-
+/banner/newsletter.jpg
+/banner/newsletter.png
+/banner/newsletter.svg
+/bannerino-newsletter.png
+/BannerNewsletter.jpg
+/BannerNewsletter.png
+/bloc_newsletter.jpg
+/blocknewsletter.js
+/Components/newsletter/*
+/email_newsletter_
+/embeds/newsletter/*
+/ENewsletter_
+/feedburner-subscription-widget/style.css
+/footer-newsletter.jpg
+/footer-newsletter.js
+/hustle/assets/hustle-ui/js/hustle-ui.min.js
+/iscriviti-newsletter.css
+/klaviyo_subscribe.js
+/layout/newsletter.png
+/leadin-subscribe.min.js
+/mailup-email-and-newsletter-subscription-form/*
+/media/newsletters/*
+/mega-subscribe-popup/js/script.js
+/modals/newsletter&
+/modals/newsletter?
+/Netsteps_NewsletterPopup/js/newsletter-popup.min.js
+/newsletter-300x250.jpg
+/newsletter-300x250.png
+/newsletter-app.js
+/Newsletter-Banner-
+/newsletter-banner.jpg
+/newsletter-banner.png
+/newsletter-campaign-manager/latest.js
+/newsletter-inline.js
+/newsletter-pack.min.css
+/newsletter-pack.rtl.min.css
+/newsletter-pattern.png
+/newsletter-popin.js
+/newsletter-portlet/js/main.js
+/newsletter-promo-
+/newsletter-signup.js
+/newsletter-signup.min.js
+/newsletter-subscribe-
+/newsletter-subscription-
+/newsletter/popup-
+/newsletter/popup/*
+/newsletter2011_
+/newsletter_banner.jpg
+/newsletter_banner.png
+/newsletter_wdgts.js
+/newsletter_widget.js
+/newsletterpopup.css
+/newsletterpopup.js
+/newsletterpopup.min.js
+/newsletterpro/views/js/app_front.min.js
+/newsletters/modal/*
+/newsletters/widget/*
+/NewsletterSubscription.js
+/newsletterwidget/mngcep/mg2nw.min.js
+/plugins/newsletter/style.css
+/plugins/newsletter/subscription/validate.js
+/plugins/optin-monster/assets/js/api.js
+/popinnewsletter.css
+/popinNewsletter.js
+/ps_emailsubscription.js
+/rdstation-popup.min.js
+/sapo_newsletters.js
+/subscribe-popup.js
+/subscriber.newsletter.js
+/td-newsletter/style.css
+/thrive-leads/thrive-dashboard/js/dist/frontend.min.js
+/tz-nwslttr.js
+/v1/newsletters/*
+/wonderplugin-popup-engine.js
+/wp-subscribe-pro/js/wp-subscribe-form.js
+/wysija-newsletters/css/validationEngine.jquery.css
+/xwpblocks-newsletter-subscription-style.css?
+!------------------------General element hiding rules-------------------------!
+! *** easylist:fanboy-addon/fanboy_newsletter_general_hide.txt ***
+###Bloque_EX_Newsletter
+###Bloque_EX_NewsletterTematico
+###EmailOptin
+###FlyoutSignupModalWrapper
+###FooterNewsletter
+###GlobalSlotHeaderNewsletter
+###HPNewsletter
+###Masthead-Newsletter
+###MobileNewsLetterFormContainer
+###NNSubscribeBar
+###Newsletter-Sign-Up
+###Newsletter-Signup
+###NewsletterOverlay
+###NewsletterSignUp
+###NewsletterSignUpSidebar
+###NewsletterSticky_pnlNewsletterSticky
+###NewsletterSubscribe
+###PopupSignupForm_0
+###RColNewslatter
+###SideNewsletterBox
+###Subscribe-Article-Bottom
+###SubscribePopUpBox
+###SubscribePushNotificationPanel
+###Widget-Newsletter
+###ad-box-newsletter
+###ad-newsletter
+###alertNewsletter
+###app_newsletter
+###appeal-newsletter
+###article-im-prompt
+###article-newsletter-signup
+###article-newsletter-slot
+###article-promo-newsletter
+###articleFooter-newsletterSignup
+###barNewsletter
+###bb-newsletter-section
+###bb_newsletter
+###bigbox_newsletter
+###bignewsletter
+###bloc-newsletter
+###bloc_newsletter
+###block-dfp-subscriptions-block
+###block-mailchimp-signup-newsletter
+###block-modalnewslettersignup
+###block-newsletteraside
+###block-newsletteroverlay
+###block-newsletterpopup
+###block-nodepagebelownewsletter
+###block-quick-subscribe-footer
+###block-romaniainsiderfreenewsletter-2
+###block-romaniainsiderfreenewsletter-3
+###block-sailthru-basic-newsletter
+###block-sailthru-newsletters
+###blog_subscription-3
+###blog_subscription-4
+###blog_subscription_unit
+###bottom_newsletter
+###box_nl_subscribe
+###boxes-box-newsletter
+###cm-popup-overlay
+###collapse-newsletter
+###contentBarNewsletter
+###cs-newsletter
+###data-newsletter
+###divNewsletterPromoPopup
+###divnewsletters
+###divnewslettertipo_1
+###divnewslettertipo_2
+###e2ma_signup_form
+###email-alerts-button
+###email-display-trigger
+###email-exitintent-widget
+###email-footer
+###email-marketing-widget
+###email-modal-bg
+###email-news-subscribe
+###email-opt-in
+###email-opt-in-bottom
+###email-popup-back
+###email-posts-to-subscribers-2
+###email-rotator-wrapper
+###email-signup-sidebar
+###email-subscribers-2
+###email-subscribers-3
+###email-subscription-modal
+###email-widget-wrapper
+###engagement-newsletter
+###et_newsletter
+###exit-overlay-inline
+###featured-newsletter
+###floating_subscribe
+###follow-newsletter
+###foot-subscribe
+###footer--newsletter--wrapper
+###footer-email-form
+###footer-email-signup
+###footer-newsletter
+###footer-newsletter-link
+###footer-newsletter-mobile
+###footer-newsletter-signup
+###footer-newsletter-subscribe
+###footer-sign-up
+###footer-signup
+###footer-subscribe
+###footer-subscribe-large
+###footer-subscription-modal
+###footerEmailSignup
+###footerNewsletter
+###footerSubscribe
+###footer__newsletter-signup
+###footer_block_newsletter
+###footer_email_bar
+###footer_newsletter
+###footer_newsletter_signup
+###form-footer-newsletters
+###form-newsletter-footer
+###formNewsletterShow
+###form_iscrizione_newsletter
+###free-signup-newsletter
+###fusion-email-signup-modal
+###gastro-email-roadblock-modal
+###gigya-newsletter-social
+###gkNewsletter
+###global-footer_newsletter
+###gnt_atomsnc
+###grow-me-inline-subscribe-cta-root-0
+###header-newsletter-promo
+###header-subscribe
+###header-subscribe-box
+###home-newsletter
+###home_newsletter
+###id_newsletter_subscription_popup
+###iframe-newsletter
+###inContentEmail
+###injected-newsletter
+###injector-signup
+###inline-subscribe-form
+###inscription_newsletter
+###instream_newsletter_signup
+###iscrizione_newsletter
+###js-mobile-subscribe-bar
+###js-newslettermodal
+###js-overlayEmailSignup
+###js-subscription-box
+###leaflet-newsletter-form
+###left-footer-subscribe
+###left-newsletters-form
+###leftcol_subscribe
+###leftnewslettersubsblock
+###list-newsletter-form
+###m-inline-newsletter
+###mailchimp-top-bar
+###mailing-list-popup
+###mailing-list-signup
+###mc-frontpage-subscribe
+###mc-signup-in-post
+###mc_embed_signup_nojs
+###mc_embed_signup_scroll
+###misty-newsletter-subscribe
+###ml-newsletterform
+###mm_newsletter
+###mobileNewsletterInput
+###mod-newsletter-1
+###mod-newsletter-signup-1
+###mod-newsletter-signup-2
+###modal-email-widget
+###modale_inscription_newsletter
+###moduleNewsletter
+###ms-newsletter-2
+###ms-newsletter-3
+###new-nl-placeholder
+###new_newsletter
+###new_newsletter_subscription
+###newletterF
+###newletterspanel
+###news-ltr
+###newsLetter-signup-box
+###newsLetterAsset
+###newsLetterFooterDiv
+###newsLetterForm
+###newsLetterSignUp
+###newsLetterWidgetSection
+###newsPopup
+###newsSignFoot
+###newsletter-ad
+###newsletter-alert-signup
+###newsletter-background
+###newsletter-banner
+###newsletter-banner-bottom
+###newsletter-below-post
+###newsletter-bottom-bar
+###newsletter-button
+###newsletter-callout
+###newsletter-component
+###newsletter-container
+###newsletter-content-wrap
+###newsletter-content-wrapper
+###newsletter-cta
+###newsletter-exit-modal
+###newsletter-flag
+###newsletter-floating
+###newsletter-footer
+###newsletter-form-article-page
+###newsletter-form-container
+###newsletter-form-footer
+###newsletter-form-holder
+###newsletter-iframe
+###newsletter-incentive
+###newsletter-inline
+###newsletter-inline-widget
+###newsletter-interstitial
+###newsletter-interstitial-dialog
+###newsletter-interstitial-div
+###newsletter-invite
+###newsletter-lateral
+###newsletter-module
+###newsletter-notification
+###newsletter-overlay
+###newsletter-pop-in
+###newsletter-popin
+###newsletter-popup-cont
+###newsletter-popup-container
+###newsletter-popup-fixed
+###newsletter-popup-left
+###newsletter-popup-overlay
+###newsletter-promo
+###newsletter-prompt
+###newsletter-rail
+###newsletter-reg
+###newsletter-roadblock
+###newsletter-row
+###newsletter-shortcode
+###newsletter-side-widget
+###newsletter-sidebar
+###newsletter-sidebar-subscribe
+###newsletter-signUpWidget
+###newsletter-signup-box-contents
+###newsletter-signup-dialog
+###newsletter-signup-footer
+###newsletter-signup-form
+###newsletter-signup-load
+###newsletter-signup-overlay
+###newsletter-signup-overlay_background
+###newsletter-signup-short-form
+###newsletter-signup-sidebar
+###newsletter-single-step
+###newsletter-slide
+###newsletter-slideout
+###newsletter-slider
+###newsletter-strip
+###newsletter-subscribe-
+###newsletter-subscribe-sidebar
+###newsletter-subscription-inline
+###newsletter-subscription-popup
+###newsletter-teaser
+###newsletter-toggle
+###newsletter-top-banner
+###newsletter-top-text
+###newsletter-widget
+###newsletter-widget__wrapper
+###newsletter-wrp
+###newsletter1
+###newsletterBar
+###newsletterFlyIn
+###newsletterFooter
+###newsletterFooterDiv
+###newsletterFormWrapper
+###newsletterLBContainer
+###newsletterLateral
+###newsletterModuleForm
+###newsletterOverlay
+###newsletterOverlayBg
+###newsletterPromo-outter
+###newsletterPromoModule
+###newsletterPush
+###newsletterPush-overlay
+###newsletterSidebar
+###newsletterSidebarBox
+###newsletterSignUpDialog
+###newsletterSignUpForm
+###newsletterSignUpHeader
+###newsletterSignupPromo
+###newsletterStickyBanner
+###newsletterSubContainer
+###newsletterSubscription
+###newsletterSubscriptionPopup
+###newsletterWidget
+###newsletter_360
+###newsletter_articles
+###newsletter_articolo
+###newsletter_block_left
+###newsletter_box_sidebar
+###newsletter_div
+###newsletter_form_3div
+###newsletter_form_box
+###newsletter_info_container
+###newsletter_middle
+###newsletter_mod
+###newsletter_popup
+###newsletter_popup_overlay
+###newsletter_post
+###newsletter_promo
+###newsletter_ribbon
+###newsletter_sidebar_form
+###newsletter_signup_footer
+###newsletter_signup_ft
+###newsletter_signup_fullwidth
+###newsletter_signup_side
+###newsletter_smartbar
+###newsletter_sub_form
+###newsletter_subscription_box
+###newsletter_subscription_footer
+###newsletter_widget-2
+###newsletterad
+###newsletterbox
+###newsletterflyin
+###newsletterins
+###newslettermailboxID
+###newsletters-1-form
+###newsletters-1-form-wrapper
+###newsletters-2-form
+###newsletters-footer-content
+###newsletters-signup-sidebar
+###newsletters_inline
+###newsletters_rdr
+###newslettershow
+###newspopup_overlay
+###newspopup_popup
+###nl-fixed-bottom
+###nlSliderSignup
+###nl_popin
+###nl_signup_rr
+###nletter1
+###nletter2
+###nlpopupmask
+###nls_form_widget-2
+###nm-subscribe-box
+###nm-subscribe-wrapper
+###nmSignUpContainer
+###node-basic-newsletter
+###node-email-widget
+###noti_wrap
+###notification-articleblock
+###notification-subscribe-newsletter
+###nwslFooter
+###onesignal-popover-container
+###openNewsletter
+###optinform-container
+###overlay-email-signup
+###overlay-newsletter001
+###overlayPopinNewsletter
+###pcm-subscribe
+###pf-newsletter-form
+###piano-article-newsletter
+###piano-newsletter-inline
+###pnlFooterNewsletterSignup
+###popinNewsletter
+###popular-newsletter
+###popup-newsletter
+###popup-newsletter-software
+###popupNewsletter
+###popup_newslettter
+###portlet-newsletter
+###post-newsletter
+###pp-subscribe
+###primary-nav-subscribe
+###promo-subscription
+###promo-subscription-overlay
+###quick-signup-article-widget
+###rail-newsletter
+###rb-newsletter
+###registerNlArticle
+###related-newsletter
+###relatedNavNewsletter
+###remodalnewsletter
+###rhs_newsletter
+###right-slidead-popup
+###rightNavNewsletter
+###rr-newsletter-signup
+###rr_newsletter
+###sailthru-basic-newsletter-form
+###sailthru-email-form-wrapper
+###sailthru-newsletters-email-form-wrapper
+###sailthru-subscribe-sidebar
+###sam-newsletter-form
+###sam-newsletter-signup
+###sbnewsletter-signup-wrap
+###sdac_subscribe_widget-3
+###sendpress_signup
+###share-newsletter
+###sib_embed_signup
+###side-newsletter-signup
+###sidebar-block-newsletters
+###sidebar-email-subscription
+###sidebar-email-widget
+###sidebar-newsletter
+###sidebar-newsletter-form
+###sidebar-newsletter-signup
+###sidebar-newsletter-wrapper
+###sidebar-subscribe
+###sidebar-subscribe-box
+###sidebar_newsletter
+###sidebarnewsletter
+###sidebarnewsletter_wrapper
+###sidenewsletter
+###sign-up-footer-container
+###sign-up-newsletter__form
+###signUpPromoFooter
+###signup-in-sidebar-newsletter
+###signup-inline-newsletter
+###signup_interstitial
+###signup_interstitial_overlay
+###signup_newsletter
+###signup_right_sidebar
+###single-newsletter-btn
+###single-newsletter-signup
+###sleek-subscribe
+###slice-container-newsletterForm-articleInbodyContent
+###slice-container-newsletterForm-exitIntent
+###span_subscibe_top
+###ssnewsletter
+###sssubscribe-wrapper
+###subNewsletter
+###subNewsletterV1
+###subcribeNewsletter
+###subscribe-block-bottom
+###subscribe-box-mobile
+###subscribe-nl-content
+###subscribe-popin
+###subscribe-widget
+###subscribe-widget-bottom
+###subscribe-widget-top
+###subscribeCTA
+###subscribeMWForm
+###subscribeNJ
+###subscribePopup
+###subscribePopupform
+###subscribeRect
+###subscribeSmall
+###subscribeToolBar
+###subscribe_form_fixed
+###subscribe_modal_container
+###subscribe_notification
+###subscribe_overlay_container
+###subscribe_popup
+###subscribe_widget-3
+###subscribepopup
+###subscribeside
+###subscribewrap
+###subscription-dock
+###subscriptionCenter
+###subscriptionHeader
+###subsribe_right
+###ta_newsletter
+###tab_newsletter
+###taboola-newsletter
+###tc_newsletter
+###td-box-newsletter
+###td-newsletter-home
+###td-sailthru-form
+###teaser-newsletter
+###touchpointNewsletters
+###uglipop_content_fixed
+###uglipop_overlay
+###ui-join-newsletter
+###uic_newsletter
+###v-subscribe-article-form
+###v-subscribe-short-form
+###v2campaignmidpage
+###widget-newsletter-signup
+###widgetNewsletter
+###wp-subscribe
+###wp_newsletter
+##.ArticleNewsletterForm
+##.ArticleNewsletterForm-title
+##.BannerNewsletter
+##.BoxNewsletter
+##.CTA-module_enews
+##.CampaignType--popup.exit-intent
+##.DivNewsLetter
+##.Form-newsletter-breaker-wrapper
+##.GRDC_newsletters
+##.GSOC_newsletterRegistration
+##.Homepage-newsletter
+##.MultiColorSubscribeWidget
+##.NewsLetterForMobile
+##.NewsLetterLeftSide
+##.NewsLetterSource
+##.Newsletter-Overlay
+##.Newsletter-center
+##.Newsletter-shortcode
+##.NewsletterBanner
+##.NewsletterBox--footer
+##.NewsletterColumn
+##.NewsletterEmbed-container
+##.NewsletterHome
+##.NewsletterModule
+##.NewsletterRegister
+##.NewsletterSection
+##.NewsletterSignupInset
+##.NewsletterSubscription
+##.NewsletterWidget--style-full-width
+##.Newsletter_container
+##.NlInsert
+##.PHNewsletter
+##.Sailthru_Subscribe
+##.SignUpNewsletter
+##.SignupFooter
+##.StageNewsletter
+##._newsletter-signup-trigger
+##._newsletterContentPromo
+##.a-newsletter
+##.actions-newsletter
+##.alo_easymail_widget
+##.anchored--newsletter
+##.ap-signup-inline
+##.area-newsletter
+##.ars-newsletter-callbox
+##.article--newsletter--wrapper
+##.article-block--newsletter
+##.article-bottom-newsletter
+##.article-bottom-newsletter-promo
+##.article-bottom-newsletter_box
+##.article-chimp-subscribe
+##.article-content__widget-group--newsletter-slot
+##.article-footer-newsletter
+##.article-footer__subscribe
+##.article-gutter-signup
+##.article-news-letter
+##.article-newsletter-module
+##.article-newsletter-module__inner
+##.article-newsletter-subscription
+##.article-newsletter-wrapper
+##.article-sidebar-newsletter
+##.article-signup-widget
+##.article-signup_wrapper
+##.article-slidein-newsletter
+##.article-subscribe-container
+##.article-subscription-widget
+##.article-tile-newsletter
+##.article-tools-newsletter
+##.article__newsletter
+##.article__subscribe
+##.article_footer_newsletter
+##.article_footer_subscribe
+##.article_newsletter_signup
+##.article_page_right_subscribe
+##.articles-newsletter
+##.aside-common-subscribe
+##.aside-little_newsletter
+##.aside-subscribe-module
+##.aside__newsletter--footer__wrapper
+##.aside__newsletter__wrapper
+##.at_nwletters
+##.at_subscribe
+##.b-email-popup
+##.b-email-popup-backdrop
+##.b-email-subscribe-drawer
+##.b-email-subscribe-form
+##.b-footer-subscribe
+##.b-newsletter
+##.b-newsletter-modal
+##.b-newsletter-signup
+##.b-post-subscription
+##.bNewsletter
+##.banner-newsletter
+##.banner_newsletter
+##.bar_newsletter
+##.bb-newsletter
+##.bchnews_newsletter_container
+##.bd-subscribe-wrapper
+##.be-newsletter-widget
+##.bfp-newsletter-signup
+##.bg-newsletter-signup
+##.bk-section-subscribe
+##.bk-subscribe-email
+##.bk-subscribe-popup
+##.bl_newsletter
+##.bloc-info-newsletter
+##.bloc-recup-email
+##.blocSubscribeRight
+##.block--newsletter--alt
+##.block--newsletter-signup
+##.block-content-newsletter
+##.block-email-alerts-footer
+##.block-mailchimp-signup
+##.block-newsletter-signup
+##.block-social-newsletter
+##.block-sp-frontpage-newsletter
+##.block_newsletter
+##.blog-signup-container
+##.blog_signup_box
+##.blog_subscription
+##.body-subscribtion-box
+##.bottom_signup_newsletter
+##.bottom_subscribe
+##.box--newsletter
+##.box-iscrizione-newsletter
+##.box-newsletter-article
+##.box-newsletter-category
+##.bs-newsletter-pack
+##.bs-subscribe-newsletter
+##.btmNewsletter
+##.btn-newsletter-head
+##.btn_big_newsletter
+##.bx-teaser-container--newsletter
+##.c-Footer__subscribe
+##.c-articleNewsletter_form
+##.c-call--newsletter
+##.c-cta--newsletter
+##.c-list-subscribe
+##.c-native-newsletterbox
+##.c-newsletter--cta
+##.c-newsletter--default
+##.c-newsletter--footer
+##.c-newsletter-article__content
+##.c-newsletter-banner
+##.c-newsletter-context
+##.c-newsletter-form
+##.c-newsletter-form__inner
+##.c-newsletter-promo
+##.c-newsletter-section
+##.c-newsletter-signup
+##.c-newsletter-subscribe
+##.c-newsletter-widget
+##.c-newsletterSticky
+##.c-newsletterSubscribe_form
+##.c-popular__collection--newsletter
+##.c-popular__newsletter
+##.c-post-actions__newsletter
+##.c-promo-box--newsletter
+##.c-reengageNewsletter
+##.c-subscribe-newsletter-banner
+##.c-touchpoint-newsletters
+##.c-widget--newsletter
+##.c25__newsletter
+##.callout--subscribe
+##.captation-email-bottom
+##.card--newsletter
+##.card-newsletter
+##.card-newsletter-signup
+##.chunk-newsletter
+##.cli-newsletter-placement
+##.cm_newsletter
+##.cmg_signup_box
+##.column--newsletter
+##.column-newsletter
+##.column-subscribe
+##.com-newsletter
+##.comp-newsletter-newslettersignup
+##.component-emailsubscription
+##.component-newsletter-cta
+##.component-newsletter-signup
+##.component-newsletter-subscribe
+##.connect_newsletter
+##.cont-newsletter
+##.cont-newsletter-header
+##.cont_popup_suscripicion_boletin_load
+##.container-form-newsletter
+##.container_newsletter
+##.container_row--newsletter
+##.contains-newsletter
+##.content--newsletter
+##.content-c__newsletter--box
+##.content-mod-newsletter-right
+##.content-subscribe-block
+##.content-toaster--newsletter
+##.content-well-newsletter
+##.content_newsletter
+##.cta-subscribe
+##.cta__item--newsletter
+##.daily-news-letter
+##.daily-newsletter
+##.daily_email_signup
+##.default-newsletter
+##.desktop-newsletter
+##.divFooterEmailSignUp
+##.divSubscrbtionBox
+##.dmnc_features-cta-newsletter-cta-newsletter-module__J4vZB
+##.duet--cta--newsletter
+##.e-newsletter
+##.e-newsletter-block
+##.e-newsletter-block__initial
+##.e-newsletter-block_footer
+##.e-newsletter-overlay
+##.e-newsletter-wrapper
+##.e-newsletter_modal
+##.eapp-popup-content-main
+##.ebm-subscribe
+##.edm-subscribe
+##.email-acquisition
+##.email-cta
+##.email-onboard-inline
+##.email-promo-box
+##.email-sign-up-box
+##.email-signup-form-wrapper
+##.email-signup-holder
+##.email-signup-lightbox
+##.email-signup-module
+##.email-submit-article-footer
+##.email-subscribe-box-large
+##.email-subscription-div
+##.email-subscription-promo
+##.email-subscription-sidebar
+##.email-subscription-wrap
+##.email-subscription-wrap-sidebar
+##.email-subscription__wrapper
+##.email-widget-container
+##.emailSubscribeBox
+##.emailSubscriptionsPopover
+##.email_podpis-wrapper
+##.email_subscribe__container
+##.email_subscribe_box
+##.email_subscribe_container
+##.email_subscribe_option
+##.emailnewsletter_cmp
+##.encart-newsletter
+##.endpage_newsletter_signup
+##.enews-widget
+##.enews-wrapper
+##.enewsletter
+##.entry-footer-subscribe
+##.entry-newsletter
+##.entryNewsletter
+##.eoa__newsletter-signup
+##.essb-subscribe-form-content
+##.et_bloom_flyin
+##.et_newsletter_widget
+##.et_pb_newsletter:not(.et_pb_login)
+##.expert-newslater
+##.f-newsletter
+##.fancy-inpost-newsletter
+##.featured_newsletter
+##.fixed-overlay-subscription
+##.fixed_newslettor
+##.flexible-content--newsletter
+##.float-newsletter-bar
+##.floating-newsletter-container
+##.flyout-newsletter-rr
+##.flyover-email-cta
+##.follow-embed__newsletter
+##.follow-subscribe
+##.followit--follow-form-container
+##.foo-newsletter
+##.footer--newsletter
+##.footer-banner-newsletter
+##.footer-col-subscribe
+##.footer-email-signup-container
+##.footer-email-wrap
+##.footer-n__newsletter
+##.footer-nav-newsletters
+##.footer-news-subscribe
+##.footer-newslatter
+##.footer-newsletter
+##.footer-newsletter-box
+##.footer-newsletter-cta
+##.footer-newsletter-form
+##.footer-newsletter-section
+##.footer-newsletter-signup
+##.footer-newsletter-social
+##.footer-newsletter-wrapper
+##.footer-newsletters
+##.footer-sign-up
+##.footer-sign-up-form
+##.footer-signup
+##.footer-social-email
+##.footer-subscrabe-box
+##.footer-subscribe
+##.footer-subscribe-form
+##.footer-subscribe-section
+##.footer-subscribe-widget
+##.footerEmail
+##.footer__newsletter
+##.footer__newsletter-form
+##.footer__subscribe
+##.footer_box_newsletter
+##.footer_form_newsletter
+##.footer_newsletter
+##.footer_subscribe
+##.footer_subscription_block
+##.footeremail
+##.footernewsletter
+##.form-newsletter-container
+##.form-newsletter-content
+##.form-signup-articlebottom
+##.form__newsletter-subscribe
+##.form__newsletter-subscribe--block
+##.formkit-form.seva-form
+##.formkit-slide-in
+##.ft_newsletter
+##.ftr-nwsltr
+##.fuzoBox--newsletter
+##.fxs_suscribe
+##.gcap-layout-popup
+##.gd-newsletter-subscribe-box-outer
+##.gd-newsletter-subscribe-container
+##.gdm-newsletter-banner__container
+##.generic-article__body--newsletter
+##.genericNewsletter
+##.getresponse-signup
+##.getresponse-signup-container
+##.gh-subscribe
+##.giga-email-subscribe
+##.gigyaNewsletterSignup
+##.gk-amp-newsletter
+##.global-article-newsletter
+##.global-nav__subscribe-toggle
+##.global-newsletter-sign-up
+##.gmg-subscribe-widget
+##.gnt_m_nls
+##.h-newsletter
+##.h-register-newsletter
+##.h-subscribe
+##.h-teaser-newsletter
+##.ha-c-newsletter-promo
+##.ha-c-newsletter-promo__content
+##.hasNewsletter
+##.hdSubscribeFooter
+##.head-email-signup
+##.header-newsletter-box
+##.headerNewsletterCtaOverlay
+##.header__newsletter
+##.hellobar-signup
+##.hero-sidebar-newsletter
+##.home-enews-signup
+##.home-newsletter
+##.home-newsletter-container
+##.home-newsletter-widget
+##.home-subscribe-col
+##.home-subscribe__signup-form
+##.homeNewsletter
+##.homeSubscribeCTAContainer
+##.homepage-bottom-email-signup
+##.homepage-newsletter
+##.homepage__top-grid__newsletter
+##.hs-subscribe-form-wrap
+##.hypelab-newsletter
+##.i-newsletter-w
+##.ibnewsletter-embedded
+##.ibnewsletter-popup
+##.ibnewsletter-wrapper
+##.ic-alert-email-newsletter-signup
+##.ifklicked-subscribe
+##.ifklicked-subscribe-form
+##.ifklicked-subscribe-form-below
+##.in-article-newsletter-form
+##.inarticle-newsletter-widget
+##.inbody__newsletter
+##.incontent-newsletter
+##.ing-newsletter-box
+##.inhouse__subscription-ribbon
+##.inject_signup
+##.inlaysignup-container
+##.inline-breaking-news-newsletter
+##.inline-email-signup-container
+##.inline-newsletter-campaign
+##.inline-newsletter-middle
+##.inline-newsletter-module
+##.inline-newsletter-subscribe
+##.inline-subscription-module
+##.inlineNewsletterSignup
+##.inlineNewsletterSubscription
+##.inlineNewsletter__wrapper
+##.inscription-newsletter
+##.intextNewsletter
+##.ione-widget-bp_newsletter_signup
+##.ione-widget-social_conversion
+##.ipWidget-Newsletter
+##.is-newsletter
+##.is-style-newsletter
+##.iscriviti-newsletter
+##.iscrizione-newsletter
+##.iscrizione_newsletter
+##.iscrizionenewsletter
+##.item-list-newsletter-box
+##.item-newsletter
+##.item-newsletter-article
+##.item-subscribe
+##.j-subscribe-block
+##.j_newsletter_subscribe
+##.jetpack_subscription_widget
+##.jq-Newsletter
+##.jq_inscription_newsletter
+##.js-captation-email-bottom
+##.js-e-newsletter-popup-container
+##.js-email-promo
+##.js-email-widget
+##.js-form-newsletter
+##.js-inline-newsletter-signup
+##.js-magazineSubscriptionPopin
+##.js-newsletter
+##.js-newsletter-sign-up-form
+##.js-newsletter-signup
+##.js-newsletter-signup__popup-bg
+##.js-newsletter-subscribe
+##.js-newsletter-subscription-footer
+##.js-newsletter-subscription-popup
+##.js-newsletter-widget
+##.js-popup-newsletter
+##.js-react-mailchimp-newsletter
+##.js-sidebar-signup
+##.js-subscription-combo-box
+##.js-tealium-newsletter
+##.js_newsletter-btn--subscribe
+##.js_newsletter-form-inline
+##.js_newsletter_curation_form
+##.keystone-newsletter-class
+##.kl-bx-newsletter
+##.klaviyo_flyout
+##.l-footer__newsletter
+##.l-main__newsletters
+##.lien-newsletter
+##.link-newsletter
+##.listbuilder-popup-embedded
+##.lnk-newsletter
+##.lon-newsletter-tout
+##.m-brand-engagement
+##.m-footer-newsletter
+##.m-form-newsletter
+##.m-generic-cta--email-signup
+##.m-newsletter-box
+##.m-newsletter-signup
+##.m-newsletter-toaster
+##.m-newsletter_light
+##.m-site-foot--newsletter
+##.m-subscribe-widget
+##.m4p-newsletter-form
+##.mail-newsletter
+##.mailchimp-lists-user-subscribe-form
+##.mailerlite-form
+##.mailing-list-signup
+##.mailingList--sidebar
+##.mailmunch-popover
+##.mailmunch-popover-content
+##.mailmunch-scrollbox
+##.mailpoet_form_popup_overlay
+##.main-footer__newsletter
+##.mainbody-subscribe
+##.markato-form-wrapper-tall
+##.mashicon-subscribe
+##.mb-newsletter
+##.mc-newsletter-alertes
+##.mc-newsletter-image
+##.mc-newsletter-signup
+##.mc4wp-ajax
+##.mc4wp-form
+##.md-newsletter
+##.memo-newsletter-widget
+##.mf-subscribe-widget
+##.miniNewsletterSignupForm
+##.mjs-whisper
+##.ml-webforms-popup-overlay
+##.ml_signup_article
+##.mo-has-email.moOptinForm
+##.mo-optin-form-lightbox
+##.mobile-newsletter-mobile
+##.mobile-subscribeBox
+##.mobile_newsletter
+##.mobileadvert
+##.mod-newsletter
+##.mod-newsletter2
+##.modal-email-widget
+##.modal-suggest-newsletter
+##.modal-suggest-newsletter-pro
+##.modal-wide-newsletter
+##.module--email-promo
+##.module-footer-newsletter-signup
+##.module-gallery-zergnet
+##.module-newsletter-subscribe
+##.module-sign-up
+##.module_newsletter
+##.moduletable_newsletterform
+##.moduletablenewsletter_signup
+##.modulo_captacion_newsletter
+##.molecule-newsletter
+##.mom-newsletter
+##.momizat-news_letter
+##.mt-subscribe
+##.mtbn-newsletter-bar
+##.multi-newsletter-signup
+##.mvp-post-sub-wrap
+##.n_subscribe_wdgt
+##.naf-newsletter-footer
+##.nav-newsletter
+##.nav-newsletter-subsribe-form
+##.nesting_newsletter
+##.network-footer__ca-newsletter
+##.newLetterSectionBox
+##.new_newsletter_subscription
+##.newedge-newsletter
+##.newletter-main-wrapper
+##.newletter-sidebar
+##.newletter_container
+##.newletterpopupbox
+##.newnl-signup
+##.news-article__newsletter
+##.news-detail-newsletter-cta
+##.news-letter-signup-wrapper
+##.news-letter-widget
+##.newsLetter-subscription
+##.newsLetter-subscription-wrapper
+##.newsLetterCon
+##.newsLetterHolder
+##.newsLetterSec
+##.newsLetter_menu
+##.newsLettetPb
+##.newsSignupRR
+##.news_form_wraper
+##.news_letter_signup
+##.newsblock-newsletter-signup
+##.newsbriefsignup
+##.newsleterHome
+##.newsletter--article
+##.newsletter--blog-container
+##.newsletter--container
+##.newsletter--dark
+##.newsletter--eil
+##.newsletter--floatfixed
+##.newsletter--footer
+##.newsletter--initial
+##.newsletter--logged-out
+##.newsletter-390
+##.newsletter-abo-header
+##.newsletter-acton-form-rightsidebar
+##.newsletter-advertisement
+##.newsletter-area
+##.newsletter-article
+##.newsletter-article-bottom
+##.newsletter-article-cta
+##.newsletter-article-footer
+##.newsletter-b2b
+##.newsletter-banner
+##.newsletter-banner-sidebar
+##.newsletter-bar
+##.newsletter-bar-right
+##.newsletter-blk
+##.newsletter-block-new
+##.newsletter-block-wrapper
+##.newsletter-bottom
+##.newsletter-bottom-article
+##.newsletter-box-news
+##.newsletter-btn
+##.newsletter-buttom
+##.newsletter-c
+##.newsletter-call-to-action
+##.newsletter-callout
+##.newsletter-capture
+##.newsletter-card
+##.newsletter-center-form
+##.newsletter-cleverreach
+##.newsletter-col
+##.newsletter-compact
+##.newsletter-component
+##.newsletter-content-page
+##.newsletter-cta
+##.newsletter-cta-box
+##.newsletter-desktop
+##.newsletter-dialog
+##.newsletter-dialog-box
+##.newsletter-diverter-card
+##.newsletter-dropin
+##.newsletter-element__form
+##.newsletter-email-signup
+##.newsletter-embeb
+##.newsletter-fields
+##.newsletter-fixed
+##.newsletter-flex-text
+##.newsletter-flex-text_boxy
+##.newsletter-fly-in
+##.newsletter-flyout-wrap
+##.newsletter-foot
+##.newsletter-footer
+##.newsletter-form-NewsletterFooter
+##.newsletter-form-border
+##.newsletter-form-wrap
+##.newsletter-frame
+##.newsletter-from
+##.newsletter-grab
+##.newsletter-headline
+##.newsletter-icon-footer
+##.newsletter-inline-flex
+##.newsletter-inline-newsletter-signup-wrapper
+##.newsletter-inline-unit
+##.newsletter-inline-widget
+##.newsletter-inline-wrapper
+##.newsletter-inner
+##.newsletter-inner-container
+##.newsletter-input
+##.newsletter-insert
+##.newsletter-interstitial
+##.newsletter-intro
+##.newsletter-introtext
+##.newsletter-l
+##.newsletter-l-modal
+##.newsletter-l-wrapper
+##.newsletter-layer-wrapper
+##.newsletter-light-registration
+##.newsletter-lightbox
+##.newsletter-link
+##.newsletter-listSidebar-box
+##.newsletter-message
+##.newsletter-mini-banner
+##.newsletter-mobile
+##.newsletter-modal-background
+##.newsletter-modal-overlay
+##.newsletter-modal__background
+##.newsletter-modtipo2
+##.newsletter-nav-btn
+##.newsletter-notification-box
+##.newsletter-opt
+##.newsletter-optin
+##.newsletter-overlay
+##.newsletter-overlay-footer
+##.newsletter-plug
+##.newsletter-pop
+##.newsletter-pop-in
+##.newsletter-popin
+##.newsletter-popup-background
+##.newsletter-popup-container
+##.newsletter-popup-desktop
+##.newsletter-popup-on-scroll-version
+##.newsletter-popup-subscribe-block
+##.newsletter-popup-wrap
+##.newsletter-popups
+##.newsletter-promo
+##.newsletter-promo-container
+##.newsletter-promotion-module
+##.newsletter-pure
+##.newsletter-push
+##.newsletter-r
+##.newsletter-recomendation-wrapper
+##.newsletter-right-col
+##.newsletter-right-rail
+##.newsletter-rightbar
+##.newsletter-root
+##.newsletter-rotator
+##.newsletter-sb
+##.newsletter-shortcode
+##.newsletter-sidebar
+##.newsletter-sidebar-widget
+##.newsletter-sidebar-wrapper
+##.newsletter-sign-up-block
+##.newsletter-sign-up-popup-mask
+##.newsletter-signup--homepage
+##.newsletter-signup-article-wrapper
+##.newsletter-signup-banner
+##.newsletter-signup-block
+##.newsletter-signup-box
+##.newsletter-signup-component
+##.newsletter-signup-container
+##.newsletter-signup-container2
+##.newsletter-signup-dialog
+##.newsletter-signup-dnd
+##.newsletter-signup-form
+##.newsletter-signup-home
+##.newsletter-signup-link
+##.newsletter-signup-mod
+##.newsletter-signup-module
+##.newsletter-signup-overlay
+##.newsletter-signup-primary
+##.newsletter-signup-promo
+##.newsletter-signup-sidebar
+##.newsletter-signup-wrap
+##.newsletter-signup-wrapper
+##.newsletter-signup2
+##.newsletter-signup__container
+##.newsletter-simple
+##.newsletter-slideout
+##.newsletter-small
+##.newsletter-social
+##.newsletter-social-wrapper
+##.newsletter-sticky
+##.newsletter-sticky-block
+##.newsletter-stickybar
+##.newsletter-su-mod
+##.newsletter-sub-banner
+##.newsletter-subscribe-panel
+##.newsletter-subscribe-popup-overlay
+##.newsletter-subscribe-section
+##.newsletter-subscription-link
+##.newsletter-subscription-popup
+##.newsletter-tease
+##.newsletter-teaser
+##.newsletter-toaster
+##.newsletter-top
+##.newsletter-trigger
+##.newsletter-unit
+##.newsletter-wide
+##.newsletter-widget
+##.newsletter-widget-outer-container
+##.newsletter-widget__wrapper
+##.newsletter-wrap
+##.newsletter-wrapper-sidebar
+##.newsletter-zone
+##.newsletter.box
+##.newsletter.cta
+##.newsletter.node
+##.newsletter.panel-body
+##.newsletter.widget
+##.newsletter1
+##.newsletterArticle
+##.newsletterBg1
+##.newsletterBlock
+##.newsletterBox
+##.newsletterBtn
+##.newsletterCallout
+##.newsletterCassetto
+##.newsletterCondensed
+##.newsletterCont
+##.newsletterContentModule
+##.newsletterCta
+##.newsletterCtaContainer
+##.newsletterFeed
+##.newsletterFloating
+##.newsletterFmt
+##.newsletterFooter
+##.newsletterForm
+##.newsletterForm-exitIntent
+##.newsletterHead
+##.newsletterInbodyContent
+##.newsletterLink
+##.newsletterModal
+##.newsletterPlacement
+##.newsletterPrompt
+##.newsletterQRWrapper
+##.newsletterSection
+##.newsletterSidebar
+##.newsletterSidebarContainer
+##.newsletterSignup-wrapper
+##.newsletterSignupBox
+##.newsletterSingle
+##.newsletterSlideIn
+##.newsletterSub
+##.newsletterSubsModule
+##.newsletterSubscribe
+##.newsletterSubscribeContainer
+##.newsletterSubscription
+##.newsletterThurii_rdr
+##.newsletterUR_Normal
+##.newsletterWidget
+##.newsletterWrapper
+##.newsletter__callout
+##.newsletter__card
+##.newsletter__cta
+##.newsletter__headline
+##.newsletter__signup
+##.newsletter__slidein
+##.newsletter__title
+##.newsletter__wrap
+##.newsletter__wrapper
+##.newsletter_and_social
+##.newsletter_area
+##.newsletter_background
+##.newsletter_banner_inline
+##.newsletter_bar
+##.newsletter_bg
+##.newsletter_block
+##.newsletter_box
+##.newsletter_callout
+##.newsletter_callout_box
+##.newsletter_center_form
+##.newsletter_email
+##.newsletter_footer
+##.newsletter_footer_container
+##.newsletter_form
+##.newsletter_formBlock
+##.newsletter_holder
+##.newsletter_home
+##.newsletter_info
+##.newsletter_inline
+##.newsletter_location
+##.newsletter_on
+##.newsletter_promo
+##.newsletter_reg_widget
+##.newsletter_register
+##.newsletter_rodape
+##.newsletter_root_inner
+##.newsletter_row
+##.newsletter_section
+##.newsletter_sidebar
+##.newsletter_sign_like
+##.newsletter_signup_footer
+##.newsletter_signup_overlay
+##.newsletter_signup_promo
+##.newsletter_signup_unit
+##.newsletter_signup_widget
+##.newsletter_signupbox
+##.newsletter_social
+##.newsletter_social_form
+##.newsletter_subscribe
+##.newsletter_subscribeForm
+##.newsletter_subscribe_banner
+##.newsletter_subscription
+##.newsletter_subscription_top_embed
+##.newsletter_testo
+##.newsletter_widget
+##.newsletter_wrapper
+##.newsletterban
+##.newsletterbg
+##.newsletterbloc
+##.newsletterbottom
+##.newsletterbox
+##.newslettercapping
+##.newsletterdiv
+##.newsletterform_wrap
+##.newslettergf_wrapper
+##.newsletterlinebox
+##.newslettermodal
+##.newslettermultiple
+##.newsletteronpage
+##.newsletterpop_dialog_background
+##.newsletters-form
+##.newsletters-signup
+##.newsletters-subscribe-form-ajax
+##.newsletters-widget
+##.newsletters__response
+##.newsletters_topbar
+##.newslettersignin
+##.newslettersignup
+##.newslettersignuparea
+##.newslettersrssbox
+##.newsletterssignupmodules
+##.newslettersubscrive
+##.newslettertr
+##.newsletterwidget
+##.newslettreastuce
+##.newsltter-iframe-new
+##.newsmail-signup
+##.newspack-inline-popup
+##.newspack-lightbox-placement-bottom
+##.newspack-newsletter-prompt-inline
+##.newspack-newsletter-prompt-overlay
+##.newspack-popup
+##.newssignup
+##.ng-newsletter
+##.nk-newsletter-blocco-invito-registrazione
+##.nl-newsletter_signup
+##.nl-signup-inline
+##.nl-signup-scrollbox
+##.nl-subscription-container
+##.nl-subscription-inarticle
+##.nlSignUpForm
+##.nlSubscribe
+##.nlWidgetMain2
+##.nletter-cont
+##.nls-subscribe
+##.nlsubscribe-block
+##.nn-newsletter
+##.node-email-subscribers-form
+##.node-newsletter-subscribe
+##.notification-results
+##.notifications-wrapper
+##.nse_subscription-list
+##.nslr-subscb
+##.nw_form_newsletters
+##.nw_icon_newsletter
+##.nwletter-box
+##.nwletters
+##.nws-cnt
+##.nyp-zephr-flyout
+##.o-Newsletter
+##.o-email-only-signup
+##.o-footer__newsletter
+##.o-footer__newsletter-signup
+##.o-site-footer__newsletter
+##.o-widget__newsletter
+##.ob-Newsletter
+##.object-newsletter-subscription
+##.object-subscribe-newsletter
+##.oi-dailyalerts
+##.oi-dailyalerts-signup
+##.omeda-newsletter-block
+##.omniture_email
+##.open-modal-email-panel
+##.openNewsletter
+##.opinion-template--newsletter
+##.opt-in-email-signup-drawer
+##.optin-monster
+##.optin-monster-api
+##.optin-monster-overlay
+##.optin-monster-saas-overlay
+##.optin-overlay
+##.ot-subscribe-widget
+##.our_newsletter_block
+##.outerHeaderCtaNewsletterWrap
+##.p-footer-subscribe
+##.page--newsletter
+##.page-footer-signups
+##.page-tail-newsletter-wrap
+##.pane-bean-email-capture
+##.pane-bonnier-newsletter-0
+##.pane-email-opt-in
+##.pane-hp-newsletter
+##.pane-mailchimp-signup-newsletter
+##.pane-newsletter-modal
+##.pane-newsletter-newsletter-subscribe
+##.pane-newsletters
+##.pane-saveur-enewsletter-block
+##.pane-subscribe-box
+##.pane-subscribe-callout
+##.panel-newsletter-subscribe
+##.park-footer__newsletter
+##.partial-cta-newsletter
+##.partial-newsletter
+##.pb-f-global-mailchimp-signup
+##.pb-f-global-newsletter-sign-up
+##.pb-f-page-newsletter
+##.pb-f-page-newsletter-inLine
+##.pb-f-page-newsletter-inStream
+##.pb-subscribe
+##.pc-newsletter-sidebar
+##.pdb-newsletter
+##.pdb-newsletter_3col
+##.pdb-newsletter_article
+##.pdb-sign-up
+##.pgevoke-header-row2-right-newsletters
+##.piano--sidebar
+##.piano-inline-promo
+##.piano-newsletter
+##.piano_newsletter_large_widget-2
+##.plugin-newsletter
+##.plugin-newsletter__inner
+##.pmc-newsletter
+##.polaris__newsletter
+##.polaris__newsletter--form
+##.pop-subscribe
+##.popin-newsletter
+##.popinNewsletter-content
+##.popinNewsletter-overlay
+##.popup-subscriber-btn
+##.popupSubscribe
+##.portlet--newsletter
+##.portletSubscribeFormPortlet
+##.post-card--newsletter
+##.post-newsletter
+##.postSubscribeByEmail
+##.post__footer__newsletter
+##.pre-footer-email-signup
+##.pre-footer-subscribe
+##.pre-header-subscribe
+##.prism-newsletter-form
+##.promo--newsletters
+##.promo-newsletter-dfp
+##.promo-newsletter-signup-2
+##.promo-newsletters
+##.ps-widget--email-optin
+##.psmag_subscribe_box_wrapper
+##.psp_newsletter_subscribe
+##.pwa-envelope-subscribe-banner
+##.r-footer--newsletter
+##.rc-newsletter-widget-new
+##.react-newsletter-overlay
+##.reference-email-tip-box
+##.regNewsletter
+##.reg_newsletter
+##.region-newsletter
+##.register-newsletter
+##.register-signup-promo
+##.register_block_newsletter
+##.revue-embed-form
+##.rhs_subscribe_outer
+##.ri-newsletter
+##.right-subscribe
+##.right-subscribe-top
+##.right_rail_email_signup
+##.rj-newsletter-signup
+##.row__newsletter
+##.rr_newsletter
+##.rst-newsletterbox
+##.sailthru-signup-widget
+##.saxon-subscribe-block
+##.sb-signup-container
+##.sc-newsletter
+##.section--newsletter
+##.section-content-newsletter
+##.section-newsletter
+##.section-newsletter-cta
+##.section-newsletters
+##.section__newsletter
+##.section_newsletter
+##.sendinblue-newsletter-mergefields
+##.sendinblue-signup-subscribe-form
+##.service-newsletter
+##.seva-overlay
+##.sfba_subscribe_form
+##.sfsi_subscribe_Popinner
+##.shortcode-inline-newsletter
+##.shortcode-newsletter
+##.sib-newsletter-form
+##.side-alert-newsletter
+##.side-bar--subscribe-module
+##.side-newsletter
+##.side-subscribe
+##.sideBoxSubscribe
+##.side_subscribe
+##.sidebar--newsletter
+##.sidebar-block-newsletter
+##.sidebar-email-signup
+##.sidebar-email-signup-container
+##.sidebar-mailchimp
+##.sidebar-newsletter
+##.sidebar-newsletter-promo
+##.sidebar-newsletter-prompt
+##.sidebar-newsticker-wrapper
+##.sidebar-signup-box
+##.sidebar-subscribe
+##.sidebar-subscribe-box
+##.sidebar-subscribe-box-wrapper
+##.sidebar-subscribe-container
+##.sidebar-subscribe-form
+##.sidebar-tile-subscribe
+##.sidebar-widget--subscribe
+##.sidebar-widget-newsletter
+##.sidebarNewsletter
+##.sidebarNewsletterAd
+##.sidebarSubscription
+##.sidebar__newsletter
+##.sidebar__signup
+##.sidebar__subscribe
+##.sidebar__widget_subscribe
+##.sidebar_email_signup
+##.sidebar_newsletter_sign_up
+##.sidebar_subscribe
+##.sidebar_subscriber_body
+##.sidebarbox_newsletter
+##.sidesignup
+##.sign-up-form-single
+##.sign-up-inbox
+##.sign-up-newsletter
+##.sign-up-newsletter-border
+##.sign-up-strip
+##.signup-bar_wrapper
+##.signup-button-newsletter
+##.signup-callout
+##.signup-form--footer
+##.signup-form--header
+##.signup-form__inline
+##.signup-newsletter
+##.signup-newsletter-sidebar
+##.signup-sidebar
+##.signup-tout
+##.signup-with-checkboxes
+##.signup_module
+##.signup_slider
+##.signupnws
+##.simplenews_custom-newsletter
+##.single-newsletter-signup
+##.single-post-newsletter
+##.single-post__content__subscribe
+##.single-sidebar--newsletter
+##.site-foot__newsletter
+##.site-footer-newsletter
+##.site-footer-newsletter-form
+##.site-footer__newsletter
+##.site-footer__section-newsletter
+##.site-masthead-subscribe-wrap
+##.siteSubscribe
+##.skinny-sign-up
+##.skinny-signup
+##.slice-container-newsletterForm
+##.slide-in--newsletter
+##.slidedown-newsletter
+##.slider_newsletter-container
+##.slideup-newsletter-optin
+##.sm_newsletter
+##.small-newsletter
+##.smart-ajax-subscribe-form
+##.smartmag-widget-newsletter
+##.smile-prompt-frame-container
+##.sml_subscribe_widget
+##.socialNewsletter
+##.social_newsletter_box
+##.ssb-subscribe-box
+##.st-newsletter-widget
+##.start-newsletter
+##.static-email-subscribe
+##.sticky-newsletter
+##.stickyFooterSubscribe
+##.stickyNewsletterBar
+##.sticky_newsletter
+##.stickybar--newsletter
+##.subNewsLetter
+##.sub_newsletter
+##.subnewsletter
+##.subscribe-article-bottom
+##.subscribe-banner
+##.subscribe-block-wrapper
+##.subscribe-blurb
+##.subscribe-box-wide
+##.subscribe-box-wrapper
+##.subscribe-callout
+##.subscribe-feed
+##.subscribe-float
+##.subscribe-header-panel
+##.subscribe-module
+##.subscribe-newletter
+##.subscribe-newsl
+##.subscribe-newsletter
+##.subscribe-newsletters-cta
+##.subscribe-pop
+##.subscribe-popover
+##.subscribe-popup-fade
+##.subscribe-popup-overlay
+##.subscribe-promo
+##.subscribe-prompt-overlay
+##.subscribe-right
+##.subscribe-share
+##.subscribe-slide
+##.subscribe-top-page
+##.subscribe-widget-container
+##.subscribe-widget-sidebar
+##.subscribeNewsletter
+##.subscribePopup
+##.subscribeShortcodeContainer
+##.subscribeWidget
+##.subscribeWidgetContainer
+##.subscribe__header
+##.subscribe_btn
+##.subscribe_cont
+##.subscribe_envelope
+##.subscribe_fix
+##.subscribe_footer
+##.subscribe_popup1
+##.subscribe_widget
+##.subscribe_widget_item
+##.subscription-box-cntr
+##.subscription-cta-widget
+##.subscription-form-container
+##.subscription-newsletter-button
+##.subscription-popup-overlay
+##.subscription-promo
+##.subscription-toaster
+##.subscription-unit
+##.subscription_popup__wrapper
+##.suc-newsletter
+##.t-a-subscribe-1
+##.t-newsletter
+##.tab-content-newsletter
+##.tds-newsletter
+##.teaser-newsletter
+##.teaser__shoulder-banner--newsletter
+##.tg-newsletter
+##.tgc-newsletter-signup
+##.thb-newsletter-form
+##.thim-newlleter-homepage
+##.tile_newsletterSubscription
+##.title-newsletter
+##.tl-newsletter-widget
+##.tm-editoral-subscription
+##.tnp-subscription
+##.tnp-subscription-minimal
+##.tout_subscribe
+##.tpd-newsletters-form
+##.ts-newslatter
+##.ts-newsletter
+##.tsq_sailthru_newsletter_widget
+##.tt-newsletter-subscribe-footer
+##.ttgFooterNewsletterFlyInWrapper
+##.tve-leads-lightbox
+##.tve-leads-widget
+##.type-newsletter-signup
+##.ub_block-newsletter
+##.ue-c-article__newsletter-widget
+##.ue-c-newsletter-widget
+##.unit--newsletter
+##.unitnewsletter
+##.vc-email-subscribe__wrapper
+##.vspl__section--newsletter
+##.wcpopupmodal-open
+##.wcpopupmodal-wrapper-open
+##.wdt_newsLetter
+##.wide-newsletter
+##.wideNewsletterWrap
+##.widget--subscribe-inline
+##.widget-email-cta
+##.widget-embed.newsletter
+##.widget-had-subscribe
+##.widget-newsletter
+##.widget-newsletter-block
+##.widget-newsletter-form-style
+##.widget-newsletter-fter
+##.widget-newsletter-newsletter
+##.widget-newsletter-sign-up
+##.widget-newsletter-sign-up__form
+##.widget-newsletter-signup
+##.widget-newsletter-wrap-2
+##.widget-ngs-subscribe
+##.widget-subscribe
+##.widget-subscribe_widget
+##.widgetSidebarSubscription
+##.widget__subscribe
+##.widget_abonews
+##.widget_blog_subscription
+##.widget_bs-newsletter-mailchimp
+##.widget_bs-subscribe-newsletter
+##.widget_dm_newsletter_widget
+##.widget_email-subscribers-form
+##.widget_email_subscribe
+##.widget_home_newsletter
+##.widget_jnews_module_element_ads
+##.widget_jtsvnewslettersignupwidget
+##.widget_mailchimpsf_widget
+##.widget_mailerlite_widget
+##.widget_mailpoet_form
+##.widget_mailster_signup
+##.widget_mc4wp_form_widget
+##.widget_mymail_signup
+##.widget_newsletter
+##.widget_newsletter-pack
+##.widget_newsletter_manager
+##.widget_newsletter_sidebar
+##.widget_newsletter_signup
+##.widget_newsletter_widget
+##.widget_newsletters
+##.widget_newsletterwidget
+##.widget_newsletterwidgetminimal
+##.widget_nls_form_widget
+##.widget_ns_mailchimp
+##.widget_sailthru_signup_widget
+##.widget_signupwidget
+##.widget_subscribe-form
+##.widget_subscribe_box
+##.widget_subscribe_widget
+##.widget_subscriber_widget
+##.widget_text_newsletter
+##.widget_woo_customsubscribewidget
+##.widget_woo_subscribe
+##.widgetnewsletter
+##.wotd-promo__subscribe
+##.wotd-side__subscribe
+##.wp-block-newsletter
+##.wp-block-signup-new
+##.wp-block-xwp-newsletter-subscription
+##.wp-nwletter-popup
+##.wp_email_capture_widget
+##.wpd-sbs-title
+##.wpdev-newsletter-signup
+##.wpdiscuz-subscribe-bar
+##.wrap-newsletter
+##.wrapper-box-suscription-newsletter
+##.wrapper-button-newsletter
+##.wrapper-newsletter
+##.wrapper_suscribe_home
+##.yel-email-popup
+##.yel-popup-main-wrapper
+##.yikes-mailchimp-container
+##.yt-mailchimp-subscription-form-widget
+##.z-newsletter-signup-bottom
+##[data-ajax-newsletter-subscription-container]
+##[data-block-type="block:newsletter"]
+##[data-module="newsletter-signup"]
+##[data-nc="nc-newsletter"]
+##[data-target="#newsletter-modal"]
+##[data-testid="NewsletterSubscribeFormWrapper"]
+##[data-testid="newsletter-promo-widget"]
+##app-emailsubscribe
+##app-newsletter-widget
+##div.newsletter-image
+##div[data-newsletter-1]
+##div[data-newsletter-2]
+##gannett-atoms-component-newsletter-cta
+##hl-newsletter-cta
+##journey-inline-newsletter
+! div elements
+##div#NewsletterPromo
+##div#block-newsletter
+##div#box_newsletter
+##div#enewsletter
+##div#fixed-newsletter
+##div#formNewsLetters-block
+##div#inline-newsletter
+##div#newsletter-subscribe-box
+##div#newsletter-subscription
+##div#newsletterSignupBox
+##div#newsletterSubscribe
+##div#newsletter_block
+##div#newsletter_signup
+##div#newsletter_signup_article
+##div#newsletter_signup_form
+##div#newsletter_subscribe
+##div#newsletter_subscription
+##div#newsletter_wrapper
+##div#newsletterblock
+##div#sign-up-newsletter
+##div#subscription_box
+##div.InArticleSignup
+##div.InlineNewsletter
+##div.NewsletterBox
+##div.NewsletterSignUp
+##div.NewsletterSignUp_container
+##div.NewsletterSignup
+##div.NewsletterSignupBlock
+##div.NewsletterSignupForm
+##div.article-newsletter
+##div.article-newsletter-container
+##div.article-newsletter-signup
+##div.aside-newsletter
+##div.aside-newsletter-box
+##div.bloc-newsletter
+##div.bloc_newsletter
+! ##div.block-newsletter
+##div.box-newsletter
+##div.box_newsletter
+##div.bs-mailchimp-newsletter
+##div.c-newsletter-article
+##div.c-newsletterSignup
+##div.c-newsletter_signup_box
+##div.c-newsletterbox
+! ##div.email_newsletter
+! ##div.entry-email-signup
+##div.form_newsletter_signup
+##div.inline-newsletter
+##div.inline-newsletter-signup
+##div.m-newsletter
+##div.mod-newsletter-signup
+##div.mod-newsletters
+##div.module-newsletter
+##div.module-newsletter-signup
+##div.newsletter-head
+##div.newsletter-inline
+##div.newsletter-mod
+##div.newsletter-section
+##div.newsletter-sign-up-popup
+##div.newsletter-subscribe
+##div.newsletter-subscribe-box
+##div.newsletter-subscribe-container
+##div.newsletter-subscribe-widget
+##div.newsletter-subscription-inline
+##div.newsletter-subscription-module
+##div.newsletter.row
+##div.newsletter.section
+##div.newsletter.signup
+##div.newsletter_single
+##div.promo-newsletter
+##div.promo-subscribe
+##div.promos-newsletter
+##div.single-newsletter
+##div.site-newsletter
+##div.subscribe_newsletter
+##section.NewsletterSignUp
+! stltoday.com/buffalonews.com
+##div[id^="pu-email-form-"]
+! beursduivel.be,debeurs.nl,belegger.nl
+###ctl00_NewsletterFooter_UpdateForm
+! substack
+##.markup.body > .subscribe-widget
+##.markup.body > .subscription-widget-wrap
+##.post-end-cta-full
+##.single-post-container > .subscribe-footer
+##div[class*="frontend-components-SubscribePrompt-"]
+! spot-im newsletter (israelnationalnews.com)
+##[data-spot-im-class="card-container"]
+! wix sites
+###WIX_ADS
+! alextimes.com
+##.cpcta-flyin
+! gastongazette.com
+###dialog-message.slideDown
+! medium.com related newsletters
+##.js-stickyFooter.u-fixed
+! nlgate Newsletter
+###nlgate
+###nlgate-overlay-0
+! Various uk Football splashes
+###splash_mask
+###splash_mask + #splash_box
+! columbiasportswear.co.uk / columbiasportswear.fi etc
+##.overflow-wrapper > #notify-bar
+! cartoonnetwork.es/cartoonnetwork.fr
+##.front-page > #sliding-popup
+!-------------------------Third-party blocking rules--------------------------!
+! *** easylist:fanboy-addon/fanboy_newsletter_thirdparty.txt ***
+||api.pico.tools^$third-party
+||app.avada.io^$third-party
+||appspot.com/newsletter/dhtml?
+||blink.net/json/$xmlhttprequest
+||buy-au.piano.io/checkout/template/cacheableShow?*&experienceId=*&widget=template
+||cdn.shopify.com/proxy/*.smsbump.com/
+||confirmsubscription.com^$third-party
+||d2cmvbq7sxx33j.cloudfront.net/email/prod_amnews_iframe_section_braze.html
+||data.reachplc.com^
+||default.salsalabs.org/api/widget/
+||downloads.mailchimp.com/js/signup-forms/popup/unique-methods/embed.js$script,third-party
+||embeds.beehiiv.com^
+||joinsubtext.com^$subdocument,third-party
+||justone.ai/embed/csd.html$subdocument
+||lightboxcdn.com/vendor/$script,third-party
+||mailerlite.com/js/universal.js
+||maillist-manage.com^$third-party
+||mailmojo.no/sdk.js
+||nordiskemedier.dk/remodal/
+||optinly.net^$third-party
+||pico.tools/load/build.js
+||popupsmart.com^$third-party
+||promio-connect.com/register/
+||sample.dragonforms.com^$subdocument,third-party
+||secondstreetapp.com/audience_signup_widgets/
+||secondstreetapp.com/embed/$subdocument,third-party
+||sendlane.com^$third-party
+||sparkloop.app^$script,third-party
+||spinasale.com^$third-party
+||subscription-forms.smsbump.com^
+||targetbay.com^$third-party
+||wheelioapp.azureedge.net^
+||yourmarketingemail.com^$third-party
+!--------------------------Specific blocking filters--------------------------!
+! *** easylist:fanboy-addon/fanboy_newsletter_specific_block.txt ***
+||afrik21.africa/wp-content/themes/afrik21/images/news.png
+||app.viralsweep.com^$domain=insidethemagic.net
+||artdaily.cc/subscribe.html
+||beehiiv.com^$domain=marktechpost.com
+||chan.sankakucomplex.com/javascripts/sp/s-new.js
+||chemistwarehouse.com.au/edm_collector.html
+||dw.com/webapi/iframes/widget/
+||ewnews.com/wp-content/themes/dw-focus/newsletter.png
+||form.flodesk.com^$domain=stacker.com
+||forms-content.sg-form.com^$domain=12tomatoes.com
+||forms.aweber.com^$domain=thetruthaboutguns.com
+||gn-flagpoles.api.bbci.co.uk^
+||herokuapp.com/email$domain=peopleofcolorintech.com
+||indiatimes.com/subscriptionhomepage.cms
+||insidesources.com/wp-content/themes/insidesources/js/jquery.fancybox.js
+||listrakbi.com^$script,domain=ruralking.com
+||loader.wisepops.com^$domain=grist.org
+||newsletter.bdnews24.com^
+||nscreenmedia.com/wp-content/uploads/subscribe-nscreen-newsletter.jpg
+||p.ynet.co.il^$subdocument
+||p2a.co/embed/widget/app/$domain=thefire.org
+||psyche.co/_next/static/chunks/PopupManager.
+||researchnews.cc/subscribe.html
+||scmp.com/misc/inkstone_sub_widget/
+||subscriptions.cbc.ca^$xmlhttprequest
+||theintercept.com/xbuilder/$script
+||thejewishstar.com/images/enews-ad.png
+||tinypass.com/api/tinypass.min.js$script,domain=thedailybeast.com
+||waterfordwhispersnews.com/wp-content/themes/therex-child/js/_newsletter-article-signup.js
+
+! *** easylist:fanboy-addon/fanboy_newsletter_shopping_specific_block.txt ***
+||ibspot.com/klaviyo_form
+||listrakbi.com/scripts/$script,domain=ninjakitchen.com
+||ping.contactpigeon.com^
+!------------------------Specific element hiding rules------------------------!
+! *** easylist:fanboy-addon/fanboy_newsletter_specific_hide.txt ***
+insiderintelligence.com###ArticleNewsletterBottom
+3f-filippi.com###BannerNewsletter_Container
+e-day.ro###CoverPop-cover
+nextshark.com###FbridgeSGWidget
+commerce.gov###GD-snippet-form
+kitchenparade.com###HTML1
+all4women.co.za###InnerSub
+audiofilemagazine.com###NewsletterModal
+beautycrew.com.au###NewsletterSignUpSideHero
+photonics.com###PAN_UserAlert
+gayemagazine.com###POPUPS_ROOT
+investing.com###PromoteSignUpPopUp
+all4women.co.za###SectionSub
+cnnsofake.news,health.news###SubscribeForm
+cnnsofake.news,collapse.news,health.news,newstarget.com,veteranstoday.news###Widget15
+yoncu.com###YncLightBox
+ndtv.com###\5f _cricketsubscribe
+pirg.org###action
+admonsters.com###adm-signupbar
+oag.ca.gov###ag-newsletter
+safetyfirstaid.co.uk###ajaxNewsletter
+jobisjob.co.uk###alert-box-multiple
+jobisjob.co.uk###alert-footer-div
+bramptonguardian.com,simcoe.com###app-overlay
+dailydot.com###archive-item-top-newsletter
+reseller.co.nz###art-next_signifier
+thebarentsobserver.com###article-newsletter
+gulfnews.com###article-nl-wrap
+dlnews.com###article-sign-up
+humanevents.com###article-signup
+androidpolice.com,cbr.com,collider.com,dualshockers.com,gamerant.com,howtogeek.com,makeuseof.com,movieweb.com,pocketnow.com,screenrant.com,thegamer.com,thetravel.com,xda-developers.com###articleNewsletterForm
+favesouthernrecipes.com###articleNewsletterSignup_div
+arnnet.com.au###article_bottom_promo
+medicalnewstoday.com###banner-sticky
+xconfessions.com###baseModalContainer
+breitbart.com###bbd_incontent
+designtaxi.com###below-article
+politico.com###below-story-text > .story-enhancement
+caribjournal.com###black_mask
+unchainedcrypto.com###block-10 > .container > .background-gradient
+esquireme.com###block-12
+musically.com###block-15
+airfactsjournal.com###block-2
+newsroom.co.nz###block-24
+breathedreamgo.com###block-4
+spacenews.com###block-5
+decode39.com###block-8
+mcgill.ca###block-bean-weekly-newsletter
+qsrmagazine.com###block-elettersubform
+privacyinternational.org###block-newsletterlink-2
+kingarthurbaking.com###block-recipenewslettersignup
+craftsman.com###block-righthandsideblockform
+africacheck.org###block-webform
+lifenews.com###blockModalPopupDiv
+particular.net###blog-subscription-form
+timescolonist.com###body-subscribe
+menafn.com###bottom3
+gardeningknowhow.com###bounce
+healthcareitnews.com,mobihealthnews.com###boxes-box-subsctiption_middle
+businesspost.ie###bp_piano_homepage_newsletter_container
+tmz.com###browser-notifications-prompt
+telesurenglish.net###bulletin
+dreambigtravelfarblog.com,interacnetwork.com###cbox
+gatestoneinstitute.org,globalvoices.org,ibtimes.com.au,sinya.com.tw,westhawaiitoday.com###cboxOverlay
+gatestoneinstitute.org###cboxWrapper
+ambcrypto.com###cm-embed_signup
+cpr.org###coWondersWrapper
+coconuts.co###coco-newsletter-sidebar
+globalvoices.org,sinya.com.tw,westhawaiitoday.com###colorbox
+monthlyreview.org###connect
+americasquarterly.org###corner-slider
+cryptopolitan.com###cp-newsletter-block
+lbcgroup.tv###ctl00_MainContent_NewsLetter28_DivMainControl
+guidedoc.com###curtain
+si.com###customComponent-1
+si.com###customComponent-2
+property360.co.za###customForm
+pridesource.com###custom_html-11
+loyaltylobby.com###custom_html-2
+nocamels.com###custom_html-23
+securityboulevard.com###custom_html-29
+codeur.com,techguide.com.au###custom_html-3
+saabplanet.com###custom_html-30
+theregister.co.nz###custom_html-32
+legacy.com###custom_html-4
+biznews.com###custom_html-7
+ostechnix.com###custom_html-9
+democracynow.org###daily_digest_modal
+dailycaller.com###dc-home-tab-bar
+marketingdive.com###desktop-inline-signup
+digg.com###digg-subscribe
+insidethegames.biz###ealert-banner
+eco-business.com###eb-bottom-banner
+hiresaudiocentral.com###elementor-popup-modal-40
+jewishpress.com###ema_signup_form
+crisismagazine.com###email
+masterclass.com###email-capture
+thehackernews.com###email-outer
+disqus.com###email-signup
+statcounter.com###email-subscribe
+courthousenews.com###email-subscribers
+sciencenews.org###emailConversion
+chemistryworld.com###eme-global-head
+luxomo.com###esns_background_layer
+insights.globalspec.com###exit-intent-registration-modal
+itmunch.com###exitpopup-modal
+csmonitor.com###expanded-message
+hcn.org###exposeMask
+mv-voice.com,paloaltoonline.com###express-signup
+csmonitor.com###ezve-inbody-newsletter-widget
+bizcommunity.com###facebox
+bizcommunity.com###facebox_overlay
+beforeitsnews.com###fancybox-overlay
+beforeitsnews.com###fancybox-wrap
+miningweekly.com,polity.org.za###fde_bar
+advfn.com###featured-news
+thefederalistpapers.org###firefly-poll-container
+breathedreamgo.com###fluentform_6
+openspeedtest.com###footBox3
+independent.co.uk###footerPrompt
+engineeringnews.co.za###footerbar
+ripleys.com###form_newsletter-blog
+ripleys.com###form_newsletter-sub-single
+knewz.com###forms-block_ee1e843a9348070a466c6e3f908c9703
+pcipolicyportal.com###g-bottom1
+quadraphonicquad.com###gb-reg-modal-block
+quadraphonicquad.com###gb-reg-modal-reg
+patriotfetch.com###gform_widget-3
+warontherocks.com###gform_wrapper_1
+verybestbaking.com###gigya-subscribe-with-email-screen
+healthleadersmedia.com###hcpro-misc-form
+admonsters.com###hdr_sign-up
+hollywoodlife.com###hlifenewsletter
+medcitynews.com###home-sidebar-1-container
+healthcareitnews.com,mobihealthnews.com###home-subscription-row
+thebulwark.com###homeCtaSection
+americanmilitarynews.com###homeSignUp
+atlasobscura.com###homepage-newsletter-component
+motherjones.com###homepage-newsletter-promo
+motherjones.com###homepage-subscription-promo
+wikihow.com###hp_newsletter
+collato.com###hs-web-interactives-top-anchor
+entrepreneur.com###hsNewletterFooterSub-container
+asia.nikkei.com###in-article-newsletter-signup
+theblaze.com###inarticle-sponsored-headline
+statista.com###infographicNewsletter
+semafor.com###inline-africa-form
+semafor.com###inline-business-form
+semafor.com###inline-flagship-form
+semafor.com###inline-media-form
+semafor.com###inline-principals-form
+semafor.com###inline-technology-form
+jif.com###jms-tray
+greatvaluevacations.com###js-subscribe-takeover
+argusdelassurance.com###jsNewsletterContainer
+wakingtimes.com###kajabi-form
+techstudiomumbai.com###kt-popup-newsletter
+theinformation.com###lead-sticky-banner
+modernretail.co###lead_newsletter
+rhino.com###lightboxWrapper
+chorus.fm###liner-notes
+audioholics.com###mail-list-button
+neonnettle.com###mailList
+steamdeckhq.com###mailerlite-form_1
+allkpop.com,snowbrains.com,tokyohive.com###mailing-list
+rapidtvnews.com###masthead
+museumcrush.org###mc-signup-iframe
+moneyweb.co.za###mc_embed_signup1
+dot.la###mc_embed_signup_bar
+barrettsportsmedia.com###media_image-2
+plagiarismtoday.com###media_image-3
+cryptopotato.com###mo_optin_widgets-2
+guidedoc.com###modal-overlay
+rebelnews.com###module_form
+nationalgeographic.com###natgeo-marketing-inline-email-footer-frame1-module2
+screenshot-media.com###new-home-row-3
+screenshot-media.com###new-home-row-7
+coffeecompany.com.au###newpopup
+easternstandardtimes.com###news-letter-pop
+thenation.com###news-letters
+chicagotribune.com,nydailynews.com###news_letter_div
+momontimeout.com###newsbox
+getprice.com.au,keshaofficial.com,lepoint.fr###newsletter
+empr.com,endocrinologyadvisor.com,hematologyadvisor.com,mcknights.com,mcknightshomecare.com,medicalbag.com,neurologyadvisor.com,ophthalmologyadvisor.com,optometryadvisor.com,thecardiologyadvisor.com###newsletter-asset
+foodandwaterwatch.org###newsletter-block-bottom
+startribune.com###newsletter-boot
+austinchronicle.com###newsletter-box
+lapresse.ca###newsletter-hub-promo-box
+cryptonews.com,infotel.ca,thejc.com###newsletter-modal
+christiantoday.com,fodors.com,nocamels.com,talotekniikka-lehti.fi,theface.com###newsletter-popup
+knowablemagazine.org###newsletter-promo-item
+eenewseurope.com###newsletter-register
+thejc.com###newsletter-reminder
+semafor.com###newsletter-sign-up
+awapress.com,gbnews.com,nakedsecurity.sophos.com,ridefox.com###newsletter-signup
+news.wttw.com###newsletter-signup-bar-01
+designtaxi.com###newsletter-subscribe-div
+essence.com###newsletter-subscribe-modal
+law.justia.com###newsletter-subscription-aside-widget
+trip101.com###newsletterCheckbox
+comicbook.com,popculture.com###newsletterModal
+usafacts.org###newsletter__sticky
+miningjournal.net,minotdailynews.com,salemnews.net###newsletter_article
+rigzone.com###newsletter_subscription
+charismamag.com,roughstock.com###newsletter_widget
+mapyourshow.com###newsletterform
+lapresse.ca###newsletters-subscription-box-root
+thenextweb.com###newslettersignup
+silicon.co.uk,silicon.de,silicon.es,silicon.fr,silicon.pt###nl-overlay
+arkansasonline.com###nlForm
+medicinenet.com###nlModule
+newsmax.com###nmsbma__container
+healthing.ca###notification
+energylivenews.com###notification-bars
+gazette.com###nsltr
+oneesports.gg###oes-sticky-footer-bar
+startmycar.co.za###omnisend-dynamic-container
+safetyfirstaid.co.uk,soleyama.com###overlay
+irishpost.com###overlay-form-container
+moneyweb.co.za###overlayPromo
+mrctv.org###pardotForm
+rawstory.com###piano-infobar-container
+hyperallergic.com###pico_prompt
+gameworldobserver.com###popmechanic-snippet
+artdaily.cc,radioandmusic.com,researchnews.cc###popup
+inhope.org###popup-home
+peoplesworld.org###popupModal
+nitrokey.com###popup_newsletter
+shtfplan.com###post-article-subscribe
+nerdist.com###pr-sidebar-subscribe
+trailspace.com###prefooter
+jpost.com###premium-link
+dentonrc.com,sfexaminer.com###promo-designer-modal-custom-pop
+scientificamerican.com###promo-header
+rhino.com###promotion_banner
+egmnow.com###pt_dark_over
+queerty.com###queerty-article-email-prompt
+techmeme.com###recnl
+businessesforsale.com###reg-promo
+baystatebanner.com###reg5-form-fon
+publish0x.com###registerPopup
+churchmilitant.com###restrict-access-model
+proactiveinvestors.co.uk###right-sidebar > .myproactive-newsletter
+cined.com###right-widget-d-newsletter_form_widget-17
+cined.com###right-widget-top-newsletter_form_widget-14
+thecoastnews.com###robly_embed_signup
+save.ca###savingSignupWidget
+bankinfosecurity.com###section-newsletter-blk
+12tomatoes.com###sg_email
+loudshop.com###shopify-section-popups
+clutchpoints.com###sib-form
+mv-voice.com###side-block-01
+mv-voice.com,paloaltoonline.com###side-block-02
+mv-voice.com,paloaltoonline.com###side-block-04
+shieldsgazette.com###sidebar-newsletter-signup
+permanentstyle.com###signUpWrapperOuter
+washingtonmonthly.com###signup
+livenation.co.nz###signup-component
+aetv.com,historytoday.com###signup-popup
+businesstimes.com.sg###signup-wrapper
+6sqft.com###signupWrapper
+seatguru.com###signup_large
+247wallst.com###signupbar
+domainnamewire.com###simple-banner
+breakingenergy.com###simplemodal-overlay
+nationalobserver.com###site-broadcast
+insights.globalspec.com###sitewide-overlay
+soundsmag.com###slide-in-box
+amd.com###slidebox
+logisticsit.com###slidingbar
+infodocket.com###smallmeternote
+preppykitchen.com###sml_subscribe_widget
+groupon.co.uk,groupon.com,groupon.ie,livingsocial.com###spotlight
+news.northwestern.edu###sticky
+history.com###sticky-email-updates
+bamsmackpow.com,gamesided.com,gojoebruin.com###sub-footer
+spectator.com.au###subForm
+soundandvision.com###sub_pop
+screendaily.com###subs-ribbon
+appstorm.net,beforeitsnews.com,celebrity.red,codastory.com,dailygood.org,dlnews.com,fjolt.com,homeofdirectcommerce.com,marineelectronics.com,swimswam.com,technostall.com,u.today,worldwatchmonitor.org###subscribe
+designtaxi.com###subscribe-box
+readysetcloud.io###subscribe-embed
+buttondown.email###subscribe-form
+fridaythings.com###subscribe-home
+investordaily.com.au###subscribe-main
+intomore.com###subscribe-wide-side
+fivebooks.com###subscribeButton
+digg.com###subscribePromotion
+wined.co.za###subscribeWrapper
+culturewhisper.com###subscribe_black_box
+catholicculture.org###subscribe_container
+theweekendsun.co.nz###subscribe_email_form
+mediapost.com,weta.org###subscribe_form
+fsf.org###subscribeblock
+musictimes.com###subscription
+treehugger.com###subscription-island_1-0
+sundayworld.co.za###tdi_134
+techopedia.com###techo_custom_hellobar
+theplaylist.net###text-10
+steakschool.com,wakingtimes.com###text-11
+otakuusamagazine.com,powerlineblog.com###text-12
+christiannews.net,independent.com,sportsspectrum.com###text-15
+worthynews.com###text-19
+guides.wp-bullet.com,slightnorth.com###text-2
+everydaycheapskate.com,nextplatform.com###text-26
+franklincounty-news.com,guides.wp-bullet.com,medcitynews.com###text-3
+nextplatform.com###text-36
+ghacks.net,propertywheel.co.za###text-37
+fightthenewdrug.org###text-39
+chargedevs.com,gomag.com,mauritiustimes.com###text-4
+hellenicshippingnews.com###text-40
+arynews.tv###text-43
+powerlineblog.com,propertywheel.co.za###text-6
+29secrets.com,itmunch.com,pqube.co.uk###text-8
+theplaylist.net###text-9
+theanalyst.com###the_analyst_subscribe_widget-2
+techinformed.com###ti-subscribe-form
+armradio.am###tie-newsletter-3
+dnronline.com###tncms-block-529772
+nashvillescene.com###tncms-region-article_bottom
+postandcourier.com,starlocalmedia.com###tncms-region-article_instory_bottom
+thesuburban.com###tncms-region-global-side-secondary
+thenewstack.io###tns-post-newsletter
+thenewstack.io###tns-promo-daily
+the74million.org###toaster_banner
+filmaffinity.com###top-anch
+news-medical.net###topic-notification-signup-box
+drewberquist.com,lifezette.com###totalpoll
+semafor.com###vertical-signup-form
+ozbargain.com.au###visitor-notice
+matomo.org###wbounce-modal
+backroads.com###webform-submission-e-mail-popup-node-2111-form-ajax
+politico.com###weekend-promo
+bbc.com###zephr-message
+sciencenews.org###zephr-user-form-root
+pirg.org##.-gg\:1.-mb\:3
+fivebooks.com##.-newsletter
+newshub.co.nz##.ArticleAttribution
+laist.com##.ArticlePage-aside-content
+outdoorstatus.com##.ArticleSignupForm
+fatherly.com,mic.com##.BMP
+talkingpointsmemo.com##.BackchannelFormWidget
+kpbs.org##.Banner
+cnbc.com##.CNBCFooter-info
+popsugar.com##.EmailAcquisitonstyles__EmailAcquisitionOuterContainer-sc-1b9duud-0
+dailymemphian.com##.EmailSignup
+zazzle.com##.EmailSignupForm
+2-spyware.com##.EsolEmailSubscribeWidget
+cbssports.com##.EventPromoInline
+toptal.com##.FGceuF2n
+fender.com##.FooterSignup__SignupContainer-sc-bzm7ki-0
+racingamerica.com##.Footer__topsection
+straightdope.com##.Form-wrapper
+meforum.org##.GLSideBarSlider
+autonomous.ai##.GetRewardsBlock_GetRewardsBlock__3tHaD
+decrypt.co##.GridItem.hEYXVm.sc-39129d7e-1
+thefinancialdiet.com##.Hd__banner
+interestingengineering.com##.Home_blueprint__LJ6KT
+atlasobscura.com##.Homepage__email-container
+ozy.com##.IndexStyled__NewsletterSection-x8xg4h-5
+nationalgeographic.com##.InlineEmail__Container
+theurbanlist.com##.InlineForm
+goodrx.com##.LbnIX
+wmagazine.com##.M0a
+meltingpot.com##.MPHomepageModalWidget
+coingape.com##.Mainads
+outdoorstatus.com##.Modal
+aeon.co##.NLFormInsertFromCMS
+thedrive.com##.NewsLetter
+thefinancialdiet.com##.NewslBanner
+i-d.vice.com,theintercept.com,who.com.au##.Newsletter
+newscientist.com##.NewsletterPromotion
+ranker.com##.NewsletterSubscription_main__V_dFS
+cntraveler.com##.NewsletterWrapper-JRxKg
+complex.com##.Newsletter__NewsletterContainer-sc-1ysnx0y-0
+interestingengineering.com##.Newsletter_newsletter__TOVA7
+newscientist.com##.NewslettersPanel
+coingape.com##.Newslettershare
+benjamingroff.com##.OPF__embedded-form
+oann.com##.PD_modal
+prospect.org,sbstatesman.com##.PicoSignupForm
+thedailybeast.com##.ProductCalloutNewsletterModule
+kpbs.org##.PromoD
+kpbs.org##.PromoNewsletter
+bigissue.com##.ReactModal__Overlay
+abc7.com,abc7ny.com##.Shfq
+futurework.org.au##.SiteFooter_signup
+opensecrets.org##.StayConnected
+outsystems.com##.Subscribe
+riverbender.com##.SubscribeBox
+nordvpn.com##.SubscribeSection
+naturalnews.com##.Subscription-Article-Box
+rt.com##.Subscription-isReact
+intego.com##.Subscription_sub_wrapper__eQ6n1
+talkingpointsmemo.com##.SubstackWidget
+asmag.com##.SubtoNew_box
+gatesnotes.com##.TGN_site_FullOverlay
+which.co.uk##.ToolSignpost__container--1h2Ap
+inverse.com##.VrW
+axios.com##.\!bg-blue-core
+thequint.com##._1iwhd
+otcmarkets.com##._2hrcOcFIZM
+swarajyamag.com##._2kI9l
+kilgorenewsherald.com##._inline-form
+eweek.com##._jotform_newsletter
+footwearnews.com##._newsletter_11ikw_1
+indiewire.com##._newsletter_foipp_1
+stylecaster.com##._newsletter_nu1a3_1
+nytimes.com##.a8f50c72
+the18.com##.above-email
+answersingenesis.org##.actionbox
+horse-canada.com##.active-campaign-form
+merriam-webster.com##.active-subscribe
+walletinvestor.com##.ad-align-center
+crn.com##.ad-imu-sticky
+drugtargetreview.com##.advads-background
+bucketlistjourney.net,goodnewsnetwork.org,guru99.com##.af-form-wrapper
+techspree.net##.after-post
+insidermedia.com##.alert
+uinterview.com##.alert-discreet
+averagelinuxuser.com##.alertbar
+algemeiner.com##.alg_subscribe_cont
+voiceofsandiego.org##.amp-wp-be55f39
+moneysavingexpert.com##.analytics-tiplistbox
+geekwire.com##.announcement-box
+americanwirenews.com##.anw-subscribe
+asiaone.com##.ao-newsletter
+artofmanliness.com##.aom-subscribe
+freevector.com##.app-footer
+thenetnaija.co##.app-subscribe
+whatculture.com##.app-wrapper--wide
+brainstation.io##.article-content__subscribe-rail
+manilatimes.net##.article-embedded-newsletter-form
+vocativ.com##.article-footer
+pressdemocrat.com##.article-inline-promo
+reuters.com##.article-prompt__container__3uXJV
+wionews.com##.article-registration-form
+futurity.org##.article-signup
+anothermag.com##.article-subscribe-box
+cinesprint.com##.article-subscription
+publishersweekly.com##.articleRelatedSignup
+ft.com##.article__content-sign-up
+sputnikglobe.com##.article__news-services-subscribe
+3dprint.com##.article__subscribe
+hackster.io##.article_layout__signupCTA__2MHYh
+coinspeaker.com##.aside-little_newsletter
+nationalreview.com##.aside-module--promo-module
+nationalreview.com##.aside-newsletter
+thewellnesscorner.com##.aspect-ratio-newsletterbox
+brownstone.org##.astra-advanced-hook-7207
+classicalite.com##.at-subsc
+atavist.com##.atavist-mailchimp
+winnipegfreepress.com##.atf-signup
+peoplesworld.org##.attachment-full
+cyberdaily.au##.b-sideSub
+nysun.com##.backdrop-blur-sm
+processengineering.co.uk##.background--dark
+oilprice.com##.background_lozad
+duckduckgo.com,duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion##.badge-link--newsletter
+cbn.com##.banner--subscribe
+balkangreenenergynews.com##.banner-text
+kyivindependent.com##.bannerBelarus
+airtahitinui.com##.bannerleads
+technologynetworks.com##.base_subscribe_footer
+thedriven.io##.basic_mailchimp_widget
+bringatrailer.com##.bat-theme-widget-constant-contact
+propublica.org##.bb-callout
+chron.com,fastcompany.com,inc.com##.bcToaster
+captainaltcoin.com##.bee-page-container
+moneysavingmom.com##.before-content
+kyivindependent.com##.belarusWeekly__wrapper
+apnews.com##.bellow-article
+sfstandard.com##.bg-\[\#FCF5EB\]
+sfstandard.com##.bg-\[\#FFEFD9\]
+iotworldtoday.com##.bg-black.border
+dlnews.com##.bg-blue-750
+newsbreak.com##.bg-blue-link
+dlnews.com##.bg-bottom.bg-\[length\:100\%_100\%\]
+catchnews.com##.bg-col-blue
+searchengineland.com##.bg-ftr-subscribe
+thebaffler.com##.bg-graphite
+extremetech.com,thefinancialbrand.com##.bg-gray-100
+nextshark.com##.bg-gray-800
+invezz.com##.bg-grey-700.inv-sidebar-widget
+canberratimes.com.au,theland.com.au##.bg-indigo-700
+themessenger.com##.bg-left-top.bg-cover
+washingtonengager.com##.bg-light.card
+nextshark.com##.bg-newsletter
+altfi.com##.bg-tertiary
+thebudgetsavvybride.com##.bg-turquoise-500
+thepostmillennial.com##.bg-warning
+beincrypto.com##.bic-newsletter
+b92.net##.bilten-signup
+a16z.com##.bio-lp-newsletter
+albawaba.com##.black-box
+bigkitchen.com##.blackOverlay
+reason.com##.blackout
+restofworld.org##.block--homepage-newsletter
+kffhealthnews.org##.block--newsletter
+crazyforcrust.com##.block-about__right
+ancient-origins.net##.block-ao-activecampaign
+datacenterdynamics.com##.block-channel_subscription
+joyfoodsunshine.com,spendwithpennies.com##.block-ebook
+noracooks.com,tastesbetterfromscratch.com##.block-email
+budgetbytes.com##.block-email-subscribe
+humanesociety.org##.block-email-subscription-block
+etonline.com##.block-et-newsletter
+acouplecooks.com##.block-inline-email
+almanac.com##.block-listraksubscribe-block
+tastesbetterfromscratch.com##.block-meal-plan
+jocooks.com##.block-media-feature-image
+ncronline.org##.block-ncr-api-emailmarketing
+foodfolksandfun.net##.block-news
+averiecooks.com,bingehq.com,streamsgeek.com##.block-newsletter
+cbn.com##.block-newsletter-block
+crazyforcrust.com##.block-newsletter-cta
+crazyforcrust.com##.block-newsletter-cta-sidebar
+feastingathome.com##.block-newsletter-share
+datacenterdynamics.com##.block-registration_prompt
+backroads.com##.block-sign-up-for-our-email-newsletter
+abeautifulmess.com,afamilyfeast.com,airandspaceforces.com,thebestcakerecipes.com##.block-subscribe
+ttnews.com##.block-webform-block
+press-start.com.au##.block-wrap-mailing
+umaar.com##.blog-subscribe-inline
+kiplinger.com##.blueconic-article__wrapper
+ctvnews.ca##.bm-footer__wrapper__subscribeButton
+english.nv.ua##.bn-subscribe
+computerenhance.com,duffelblog.com,platformer.news,substack.com,theankler.com##.body > .subscribe-widget
+esquire.com##.body-tip
+ntd.com##.border-\[\#000777\]
+bookmundi.com##.border-neutral-200.border-b.bg-white
+nysun.com##.border-sunGolden
+mashable.com##.border-warmgray-100
+quillette.com##.border.bg-white.mb-4
+spotlightpa.org##.bottom-0.fixed
+simpleanalytics.com##.bottom-20
+brighteon.com##.bottom-banner
+allevents.in##.bottom-right-subscribe
+bizcommunity.com##.bottom-slideIn
+businesstimes.com.sg##.bottom-wrap
+libhunt.com##.bottom-wrapper
+whitehouse.gov##.bottomcta-wrapper
+educatedguesswork.org##.box
+contexttravel.com##.box--teal-accent
+bangkokpost.com##.box-informed
+monochrome-watches.com##.boxzilla-bottom-right-container
+geopoliticalfutures.com,iafrica.com,kdnuggets.com,marijuanamoment.net,naturalblaze.com,wakingtimes.com##.boxzilla-container
+geopoliticalfutures.com,iafrica.com,kdnuggets.com,marijuanamoment.net,naturalblaze.com,wakingtimes.com##.boxzilla-overlay
+geopoliticalfutures.com##.boxzilla-slide-in-free-newsletter-2
+nordvpn.com##.brand-popup
+federalnewsnetwork.com,staradvertiser.com##.breaking-news-signup
+venturebeat.com##.briefings-boilerplate
+fabriziovanmarciano.com##.brx-popup
+bigthink.com##.bt-block__inner
+telesurenglish.net##.btnBoletin
+legalfutures.co.uk##.button-wrap-large
+racked.com##.c-action-box
+theamericanconservative.com##.c-article-comments-banner__content
+nature.org##.c-article-cta__inner-narrow
+tidbits.com##.c-banner
+thenextweb.com##.c-channel__cta
+thehustle.co##.c-content-form
+newsroom.co.nz##.c-cta-footer
+newsroom.co.nz##.c-cta-side
+vox.com##.c-entry-sidebar
+legit.ng##.c-footer-subscribe
+securelist.com##.c-form--newsletter
+smashingmagazine.com##.c-garfield__nl
+gq-magazine.co.uk##.c-infobar-wrapper
+businessplus.ie##.c-margin-top-m.ct-div-block
+thisoldhouse.com##.c-newsletter-signup-box
+cnet.com##.c-newsletterInlineUnit
+noovomoi.ca##.c-newslettersticky
+chasingcars.com.au##.c-notification-bar
+eatthis.com##.c-postup-widget
+newstalkzb.co.nz##.c-promo
+lawandcrime.com,mediaite.com##.c-promo-slice__link
+gallup.com##.c-quick-subscribe
+texastribune.org##.c-sign-up
+blooloop.com##.c-signup
+nature.com##.c-site-messages
+northdevongazette.co.uk,takebackourtech.org##.c-subscribe
+theamericanconservative.com##.c-subscribe-email__wrap
+arrowheadpride.com,badlefthook.com,barcablaugranes.com,bavarianfootballworks.com,bleedinggreennation.com,bloggingtheboys.com,bloodyelbow.com,brightsideofthesun.com,cagesideseats.com,celticsblog.com,eater.com,goldenstateofmind.com,libertyballers.com,managingmadrid.com,mmafighting.com,mmamania.com,polygon.com,silverscreenandroll.com,sounderatheart.com,vox.com##.c-toaster
+securelist.com##.c-widget-subscribe
+clutchpoints.com##.cGNRWC
+sportsline.com##.cWZgjA
+yahoo.com##.caas-figure-with-pb[style="max-height: 192px"]
+benzinga.com##.call-to-action-container
+eurasianet.org,vancouversun.com##.callout
+npr.org##.callout-end-of-story-mount-piano-wrap
+thegazette.com##.capdigest_sign_up_page_breaker
+bustle.com##.card-180737953
+thepostmillennial.com##.card-body
+finbold.com##.card-subscribe
+neowin.net##.category-bar
+faithwire.com##.catfish
+3dprintingspot.com##.cb-box
+crazyforcrust.com,easypeasyfoodie.com,thetinylife.com##.cb-box__wrapper-center_modal
+mygermanyvacation.com##.cb-ready
+consumerreports.org##.cda-newsletter
+classicsdujour.com##.cdj-vip
+americastestkitchen.com##.ceQgIx
+sputnikglobe.com##.cell-subscribe
+032c.com##.chakra-modal__overlay
+thenextweb.com##.channel-cta
+arcamax.com##.channel-subscribe
+androidpcreview.com,raptitude.com,thelittlekitchen.net##.ck_form_container
+iliketomakestuff.com##.ck_vertical_subscription_form
+spectator.com.au##.cm-form-container
+medpagetoday.com##.cme-join
+hightimes.com##.cnvs-block-core-group-1584033042831
+hightimes.com##.cnvs-block-section-1584032551831
+hightimes.com##.cnvs-block-section-sidebar-inner[style="top: 81px;"]
+beckernews.com##.code-block
+unherd.com##.code-block-4
+evolvepolitics.com##.code-block-6
+thebeaverton.com##.coil-banner-message-container
+mv-voice.com,paloaltoonline.com##.comment-hunter-block
+sacurrent.com##.comp-landing-newslettersignup
+vogue.com##.component-cnid-modal-backdrop
+judicialwatch.org##.component-daily-update-sticky
+nfib.com##.connected
+wired.com##.consumer-marketing-unit--cm-footer
+wired.com##.consumer-marketing-unit--display-rail
+pokcas.com##.contact-wrapper
+businesstimes.com.sg##.container-content-1
+pcmag.com##.container-xs.bg-gray-lightest
+chron.com,sfgate.com##.containerDailyPromo
+sportspromedia.com##.content-block-sidebar-form
+commondreams.org##.content_newsletter_wrapper
+defenseone.com##.conversion-module
+the-line-up.com##.copyRight-div
+english.nv.ua##.coronavirus_subscribe
+crainsnewyork.com##.crain-newsletter-v2-wrapper
+hightimes.com,mysteriesrunsolved.com##.cs-entry__subscribe
+foreigndesknews.com,hackread.com,hightimes.com,mysteriesrunsolved.com##.cs-site-subscribe
+patch.com##.css-1at62qq
+fxstreet.com##.css-1pwg5fl
+scientificcoder.com##.css-e2xo3p
+fxstreet.com##.css-kmucxv
+bet.com##.css-mha66v-Box-Flex-StyledNewsletterLayout
+stylist.co.uk##.css-uwbbg5
+businessplus.ie##.ct-link-text
+biznews.com,bridgemi.com,thenation.com##.cta
+themarkup.org##.cta--subscribe
+bigissue.com##.cta--subscription
+bigbearrealestateagent.com##.cta-container
+digitimes.com##.cta-link
+audiofilemagazine.com##.cta-small
+carsauce.com##.cta46_component
+itsfoss.com##.cta__inner
+kuow.org##.cta_newsletters_explore
+the74million.org##.cta_snippet
+bigissue.com##.ctas-container
+esportsawards.com##.current
+perfectdailygrind.com##.custom-a-banner
+realtor.com##.custom-email-signup-article-page
+irishexaminer.com##.custom-functionality-newsletter
+8newsnow.com##.custom-html-widget
+taylorswift.com##.custom-mailing-list
+sweepstakesfanatics.com##.custom_signup
+irishexaminer.com##.d-flex.row
+okmagazine.com##.dNsyER
+kiwi.com##.dQrqPv
+plough.com##.daily-callout-list
+timesofisrael.com##.daily-edition-signup
+scmagazine.com##.daily-scan-form
+beermenus.com##.dark-gradient-bg
+americastestkitchen.com##.ddTdsP
+defiantamerica.com##.defia-right-rail-newsletter
+dailyfx.com##.dfx-ftgBannerWidget
+dailyfx.com##.dfx-inHouseEducationSubmoduleBanner
+dailyfx.com##.dfx-inHouseGuideBannerComponent
+dailyfx.com##.dfx-inHouseNewsletterBanner
+brownstone.org,homesteading.com,innotechtoday.com,jewishjournal.com,nowtoronto.com,shapeways.com##.dialog-lightbox-widget
+deliciousmagazine.co.uk##.digital-download-wrapper
+livemint.com##.disclamerText
+floridianpress.com##.diverse-subscribe
+dailykos.com##.dk-action-embed
+strategic-culture.org##.dk-newsletter
+culture.org##.dm-sign-form-wapper
+arkansasonline.com##.dml-wrapper
+news.bitcoin.com##.doZemb
+opendemocracy.net##.donation-cta-contentbottom
+opendemocracy.net##.donation-cta-contenttop
+news-daily.com##.double-padding-top
+forksoverknives.com##.download-block
+drugtargetreview.com##.drugt-before-you-go
+inverse.com##.dsa
+umaar.com##.dt-tip-subscribe
+todaysparent.com##.e1989g6g1
+cosmopolitan.com##.e1iisoe612
+todaysparent.com##.e1mzwxyl0
+americastestkitchen.com##.eDjLlw
+gizmodo.com##.eLECQk
+earthsky.org##.earth-widget
+eco-business.com##.eb-promotions--subscribe
+namelymarly.com##.ebook
+zyro.com##.ebook-banner
+christiantoday.com##.ebookbox
+dailywire.com##.ejwz8lp1
+thehustle.co##.elementor-30860
+geneticliteracyproject.org##.elementor-element-1922719
+geneticliteracyproject.org##.elementor-element-241f781c
+bingehulu.com##.elementor-element-2db20597
+analyticsindiamag.com##.elementor-element-36dbceb
+hiresaudiocentral.com##.elementor-element-3b03fc7c
+reclaimthenet.org##.elementor-element-4a768d4
+reclaimthenet.org##.elementor-element-4d0d798
+loyaltylobby.com##.elementor-element-515d4e87
+reclaimthenet.org##.elementor-element-5f1bc6f
+lakegenevacountrymeats.com##.elementor-element-5f8f7d3
+thehustle.co##.elementor-element-7fa78070
+reclaimthenet.org##.elementor-element-7fc59b9
+backthetruckup.com##.elementor-element-81f85b2
+dailysceptic.org##.elementor-element-85562d2
+innotechtoday.com##.elementor-element-8da89b7
+techgenix.com##.elementor-element-8e82188
+reclaimthenet.org##.elementor-element-9064f85
+whereyourebetween.com##.elementor-element-ba0e7fd
+lakegenevacountrymeats.com##.elementor-element-dc75b6d
+reclaimthenet.org##.elementor-element-f34dabf
+analyticsindiamag.com,houseandleisure.co.za,lalaskinessentials.com,parametric-architecture.com,redhuntlabs.com,swidget.com,techbomb.ca,tlv1.fm,whereyourebetween.com##.elementor-popup-modal
+theintercept.com##.elements-InlineNewsletterForm-innerContainer
+washingtontimes.com##.email-alerts
+nzherald.co.nz##.email-boost
+a-z-animals.com##.email-box
+physics.aps.org##.email-callout
+cars.com,invezz.com##.email-capture
+invezz.com##.email-capture__zigzag
+reddit.com##.email-collection-banner
+lenfestinstitute.org##.email-footer
+thegatewaypundit.com##.email-list-subscribe
+rte.ie##.email-marketing-embed
+americastestkitchen.com##.email-newsletter-form
+autodidacts.io##.email-optin-widget
+nfcw.com##.email-sidebar-signup
+alexcityoutlook.com,crooksandliars.com,drewberquist.com,heartlandalliance.org,kentuckytoday.com,kulr8.com,lifezette.com,msmagazine.com,newsmirror.net,novaramedia.com,redvoicemedia.com,refinery29.com,trueachievements.com##.email-signup
+thenation.com##.email-signup-module
+sperry.com##.email-signup-offer-wrap
+mikehuckabee.com##.email-signup-section
+themarshallproject.org##.email-signup-v2-js
+spectator.org##.email-signup-widget
+rei.com##.email-signup__container
+staradvertiser.com##.emailbox
+lmtribune.com##.emphasis-h2
+theinertia.com##.enews-backdrop
+nzgeo.com##.enews-container
+visitcalifornia.com##.enewsBanner
+texasmonthly.com##.eoa__newsletter-signup
+thescoop.us##.essb_mailform
+tennesseestar.com##.et_bloom_below_post
+diycarserviceparts.co.uk,online-tech-tips.com,onthegotours.com##.et_bloom_popup
+cocktailsaway.com##.et_pb_widget
+captainaltcoin.com##.exit-intent-acm
+bookmundi.com##.exit-modal
+publicdomainreview.org##.exit-modal__shade
+boomlive.in##.exit-window-modal
+freethink.com##.f-block--form-text
+edition.cnn.com##.factbox_inline-small
+zmescience.com##.fb-inst
+herwholesomekitchen.com##.fd-focus-visible-applied
+cookienameddesire.com##.fd-form-popup
+barefootuniverse.com,bestbeefrecipes.com,herwholesomekitchen.com##.fd-modal
+damndelicious.net,sdxcentral.com##.featured-subscribe
+treehugger.com##.featured-taxonomy-section__newsletter-signup
+technologynetworks.com##.featuredVendors
+mybroadband.co.za##.feed-newsletter
+fender.com##.fender-EmailSignup
+outandaboutwithkids.com.au##.ff-63da3514de520bd60dc34604
+dailydot.com##.figma-framed
+twitchquotes.com##.financetldr-top-bar
+twitchquotes.com##.financetldr-top-bar-card
+datamation.com,esecurityplanet.com,eweek.com,webopedia.com,www.serverwatch.com##.fit-omv2-modal
+breathedreamgo.com##.five.row
+en.mercopress.com##.fixed-footer
+blog.feedspot.com##.fixedBar
+blockworks.co##.flex-col.flex.border-t.p-10.gap-4
+breakingnews.ie##.flex.bg-gray-900.pt-12
+aclu.org##.floating-action-wrapper
+thebulletin.be##.floorad
+bikerumor.com,gearjunkie.com##.flyout_newsletter_center
+factinate.com##.flytap-container
+cryptopolitan.com,izismile.com,techsupportalert.com##.followit--follow-form-container
+audfree.com##.foot-newsletter
+iai.tv##.footer--signup
+mediamatters.org##.footer--upper
+blog.duncangeere.com,blog.elevatedataviz.com##.footer-cta
+grid.news##.footer-daily-drop
+howtogeek.com##.footer-email
+paloaltonetworks.com,techxplore.com##.footer-form
+minitool.com##.footer-join-wrapper
+letsencrypt.org##.footer-newsletter-col
+moonpalacecancun.com##.footer-newsletter__form
+stereogum.com##.footer-right__box
+citusdata.com##.footer-sub
+dharmann.com##.footer-sub-form
+atlasobscura.com##.footer-subscribe
+staples.com##.footer-subscribe-form__formWrapper
+everout.com##.footer-top-block
+foodfolksandfun.net##.footer-widgets-1
+pirg.org##.footer1-signup
+healthshots.com##.footerNewletSub
+memeburn.com,ventureburn.com##.footerSub
+ipwatchdog.com##.footer__bar
+popsci.com##.footer__content
+streetartnews.net##.footer__heading
+christian.org.uk##.footer__mailing
+bellingcat.com##.footer__mailing__right
+thefader.com##.footer_content
+nutritioninsight.com##.footer_form_section
+sebgorka.com##.footer_newsletter_wrap
+gsmserver.com##.footer_subscribe_subscribe-wrap
+devdiscourse.com,upi.com##.form-inline
+righto.com##.form-preview
+tech.co##.form-simple
+mychicagosteak.com##.form-version-cid-1
+flotrack.org##.form-view
+rebelnews.com##.form-wrap
+shenandoahah.com##.form__container
+valuewalk.com##.formkit-form
+algemeiner.com##.formnews
+christianpost.com##.fpeb-0822
+neurologyadvisor.com,ophthalmologyadvisor.com,optometryadvisor.com##.fr-dialogmodal
+prodvana.io##.framer-2ydke7-container
+tomtop.com##.freePointWrap
+nutriciously.com##.freebie-opt-in-form
+adventistworld.org,farmersweekly.co.nz##.frm_form_fields
+amnesty.org.uk##.front-newsletter
+amazonadviser.com,apptrigger.com,arrowheadaddict.com,bamsmackpow.com,fansided.com,gamesided.com,gojoebruin.com,hiddenremote.com,lastnighton.com,lawlessrepublic.com,mlsmultiplex.com,netflixlife.com,playingfor90.com,stormininnorman.com,winteriscoming.net##.fs-daily
+bangkokpost.com##.ft--stay-informed
+politicshome.com##.ftr-subsWrap
+screenbinge.com##.ftr-subscribe
+etonline.com##.full-bleed-newsletter
+realitycheck.radio##.fusion-builder-row-5
+fxstreet.com##.fxs_global_alert
+businesstimes.com.sg##.g-3.row
+swarajyamag.com##.gKJ-p > ._3PrBd
+spotlightpa.org##.ga\:component\:main\:homepage\:midpage\:tout
+spotlightpa.org##.ga\:component\:main\:sidebar\:rail-newsletter
+spotlightpa.org##.ga\:component\:main\:sidebar\:top\:promo-image
+crisismagazine.com##.gb-container-6d731b3a
+quadraphonicquad.com##.gb-reg-modal-overlay
+electronicintifada.net##.get-updates
+pulsenews.co.kr##.getnews
+lacolon.com##.gf_form_mail_wrapper
+thegadgetflow.com##.gfl-blogpost-daily-digest
+socialistworker.co.uk##.gform_fields
+catholicherald.co.uk,centralmaine.com,kusc.org,mondoweiss.net,motoring.com.au,pv-magazine-usa.com,sunjournal.com,thecollegefix.com,threatpost.com,trendingpolitics.com,tylerwoodgroup.com,whoprofits.org,womensagenda.com.au,wvexplorer.com,yellowhammernews.com##.gform_widget
+atlanticcouncil.org,dictionary.com,pressherald.com,thefinancialbrand.com,trendingpolitics.com,undark.org,vtdigger.org##.gform_wrapper
+supercombomagazine.com##.gh-foot-menu
+highsignal.io,improvethenews.org,quillette.com,stanfordreview.org,supercombomagazine.com##.gh-portal-triggerbtn-iframe
+americastestkitchen.com##.glmCCk
+team17.com##.global-newsletterBanner
+usatoday.com##.gnt_m_th_em
+marketbeat.com##.gradient-purple
+heysocal.com##.gradient_subscription
+freshplaza.com##.grey_background
+insauga.com##.grid-article-subscribe-container
+medicaldaily.com,wonkette.com##.grwf2-wrapper
+medicaldaily.com##.grwf2_backdrop
+booking.com##.gta-link-track
+otakumode.com##.guest-mail
+globalvoices.org##.gv-mailchimp-form-container
+garyvaynerchuk.com##.gv-widget-mailinglist
+trip.com##.h5-subscribe-card-con
+aclu.org##.has-background-yellow
+forkast.news##.has-blue-grey-very-light-background-color
+coloradosun.com##.has-light-gray-background-color
+favfamilyrecipes.com##.has-quinary-background-color
+aircargonext.com,baltimoremagazine.com,cargofacts.com,interrupt.memfault.com,medcitynews.com##.hbspt-form
+architectmagazine.com,jlconline.com##.hd-promo
+biztechmagazine.com##.hdr-top
+theprovince.com##.header-breaking__secondary
+techonomy.com##.header-newsletter-cta
+paleohacks.com##.header-optin
+iflscience.com##.header-secondary
+nextcity.org##.header-tools
+rightwingwatch.org##.header__top
+pulselive.co.ke,pulselive.ug##.header_subscribe
+forksoverknives.com,history-computer.com##.hello-bar
+a-z-animals.com##.hello-bar-container
+forksoverknives.com##.hello-overlay
+news.crunchbase.com##.herald-txt-module
+itsfoss.com,therighthairstyles.com##.hero
+chatelaine.com,macleans.ca##.hero-sidebar
+wusfnews.wusf.usf.edu##.hnf-container-fluid
+scientificamerican.com##.home-banner
+vinepair.com##.home-email-cta
+saksfifthavenue.com##.home-email-signup
+guidingtech.com##.home-form
+houzz.com##.home-owner-carousel-section
+publishersweekly.com##.home-promo-center-right-bottom
+nationaltoday.com##.home-section-register
+sojo.net##.home-sidebar-signup
+nomadicmatt.com##.home-signup
+factmag.com##.home-social-area
+yesmagazine.org##.home-subscribe
+washingtonengager.com##.home-subscribe-header
+democracynow.org##.home_daily_digest
+opencv.org##.homepage-email-icon
+reverb.com##.homepage-marketing-callout
+businessinsider.com,insider.com##.homepage-newsletter-module
+laughingsquid.com##.hosting-below-post
+manilatimes.net##.hp-newsletter-form
+webmd.com##.hp-nl-main
+citizensforethics.org##.hp_signup__container
+topgear.com##.hrWTog
+blog.payara.fish##.hs-form-private
+sfchronicle.com##.hst-freeform
+wallhere.com##.hub-newsletter
+mustsharenews.com##.hustle-inline
+radaronline.com##.iJCSsk
+insideclimatenews.org##.icn-newsletter-block
+floridianpress.com##.if-signup-sidebar
+christianpost.com##.iframe-popup-full
+informationisbeautiful.net##.iib-signup
+nj.com##.impact-subscribe-cta
+smithsonianmag.com##.in-article-newsletter
+nativenewsonline.net##.in-article-signupbox
+iamexpat.ch,iamexpat.de,iamexpat.nl##.in-article-sub-form
+adexchanger.com##.in-content-house
+adexchanger.com##.in-house
+butterwithasideofbread.com##.in-post-recipe-save
+leftfootforward.org##.in_frame_sub
+xrprightnow.com##.independent_mailchimp_widget
+theinertia.com##.inertia-newsletter-home
+inews.co.uk##.inews__email-signup
+inews.co.uk##.inews__masthead
+rferl.org##.infgraphicsAttach
+boomlive.in##.info-container2
+vcpost.com##.info-message
+routesonline.com##.infoBlock
+nypost.com##.inline-module--newsletter
+businessinsider.com,ekathimerini.com,insider.com##.inline-newsletter-form
+themarshallproject.org,utilitydive.com##.inline-signup
+technologynetworks.com##.inner_content_lazy_load_content_divider
+amgreatness.com,bookmundi.com##.inset-0.fixed
+lawenforcementtoday.com##.inside-right-sidebar
+oxygen.com##.insider-exclusive__container
+biztechmagazine.com##.insider-register-one-form-wrapper
+sap-press.com##.interstitial
+qd-europe.com##.invader-overlay
+money.usnews.com##.investedpromo
+cnbc.com##.investigation-wrapper
+topgear.com##.iqwqGM.lbWKus
+indyweek.com,wisconsinwatch.org##.is-layout-constrained
+lgbtqnation.com##.is-style-default
+newsroom.co.nz##.j-cta-side-form
+inverse.com##.j1J
+fatherly.com##.jNY
+techopedia.com##.jan-bg-dotted
+desmog.com##.jet-popup
+judicialwatch.org,thenewcivilrightsmovement.com##.join
+guidingtech.com##.join-newsletter
+forksoverknives.com##.join-section
+braindecoder.com##.join-widget
+authoritynutrition.com##.joinus
+techrepublic.com##.jotform-wrapper
+bonappetit.com##.journey-template--cm_footer
+gq.com##.journey-unit__container
+mindbodygreen.com##.jpKUNM
+smarteranalyst.com##.jquery-modal
+atlasobscura.com##.js-email-ask-form
+premierchristian.news##.js-esend-user
+duckduckgo.com,duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion##.js-footer-card
+linuxjournal.com##.js-form-item-email
+datacenterdynamics.com##.js-mktoFormBlock
+gamespot.com##.js-nlsub
+404media.co##.js-popup
+creditcards.com##.js-signup-visibility
+highya.com##.js-swimingBlock-stoper
+avclub.com,deadspin.com,gizmodo.com,jalopnik.com,kotaku.com,lifehacker.com,qz.com,theinventory.com,theonion.com,theroot.com,thetakeout.com##.js_modal_exit_intent
+qz.com##.js_qz_newsletter_signup_placeholder
+avclub.com,deadspin.com,gizmodo.com,jalopnik.com,jezebel.com,kotaku.com,lifehacker.com,theinventory.com,theonion.com,theroot.com,thetakeout.com##.js_subscribe
+draxe.com##.ju_Con
+draxe.com##.ju_overlay
+komando.com##.k3-prefs-center-modal-background
+news.bitcoin.com##.kBbvFB
+qz.com##.kHmXgL
+christinacooks.com##.kadence-conversion-wrap
+kdnuggets.com##.kd_bottom
+scarletink.com##.kg-signup-card
+digitalocean.com##.khfYvn
+radaronline.com##.ktcwqY
+book.dmm.co.jp##.l-areaDetailBanner
+cointelegraph.com##.l-footer__col_subscription
+legit.ng,tuko.co.ke##.l-header__subscribe
+footwearnews.com##.l-newsletter
+gawker.com##.lMQ
+axios.com##.landing-page-cta
+e-flux.com##.landing-subscribe
+dreambigtravelfarblog.com##.large-footer-shot
+lifewire.com##.latest-issue-spotlight
+gearjunkie.com##.ldm-cta
+soaphub.com##.ldm-newsletter-promo-inner
+punchdrink.com,tastecooking.com##.lead-capture-campaign
+simpleanalytics.com##.left-0
+webcodegeeks.com##.lepopup-popup-container
+webcodegeeks.com##.lepopup-popup-overlay
+omnivorescookbook.com##.lh-subscribe
+alldayidreamaboutfood.com##.light-box-shadow
+rhino.com##.lightboxOverlay
+tuc.org.uk##.listings_sign_up
+loveandlemons.com##.lnl-theme-widget-subscribe-popup
+okmagazine.com##.lnolAx
+news.bitcoin.com##.loASTO
+madewell.com##.loyalty
+wakingtimes.com##.lp-bar__iframe-wrapper
+trendhunter.com##.lp__formPopCont
+gawker.com##.lqj
+lifesitenews.com##.lsn-petitions
+lifesitenews.com##.lsn-subscribe
+history.com##.m-brand-engagement
+thestreet.com##.m-custom-component
+parade.com##.m-flex-nav--right-engagement
+minnpost.com##.m-form-minnpost-form-processor-mailchimp
+boston.com##.m-generic-cta--email-signup
+minds.com##.m-modal-bg
+politifact.com##.m-supporter
+marinelink.com,marinetechnologynews.com,worldenergynews.com##.magazine-subscription
+advocate.com##.magazine__banner
+israellycool.com##.mail-chimp
+expressvpn.com##.mail-popup
+kyivindependent.com##.mailBoxBanner
+otakumode.com##.mailMagazine
+autoaction.com.au##.mail_signup
+papermag.com##.mailchimp-form
+thetrek.co##.mailchimp-subscribe
+thewalrus.ca##.mailchimpAjax
+thefinancialist.com##.mailchimp_form
+ewn.co.za##.mailer-signup-sidebar
+audubon.org,guernicamag.com,outinsa.com##.mailing-list
+food52.com##.mailing-list-banner
+food52.com##.mailingListRoot
+ebar.com##.mailinglist
+psu.edu##.mailinglist-form
+leadership.ng##.mailster-form
+markammay.com##.markamayNewsletter
+theglobeandmail.com##.marketing-container-wrapper
+blog.lastpass.com##.marketo
+aei.org##.marketo-form-block
+moneyweb.co.za##.markets-widget
+moneyweb.co.za##.markets-widget-content
+telegraph.co.uk##.martech-newsletter-unit
+examiner.com.au##.max-w-7xl
+mashable.com##.max-w-9xl
+decrypt.co##.max-w-prose
+futurism.com##.max-w-screen-lg.w-full
+joydeepdeb.com##.mb-4.card
+washingtonpost.com##.mb-lg-mod.bh.b
+spokesman.com##.mb4.pa4.pb5.overflow-auto.tc.flex.flex-column.bg-center.cover.bg-dark-red.white
+techgenyz.com##.mb4wp-form-wrapper
+landline.media##.mc-embed
+dlife.com##.mc4wp-form
+arabnews.com,castanet.net,tribalfootball.com##.mc_embed_signup
+elespanol.com##.md-suscription
+digg.com##.md\:p-6.p-3.rounded-md
+themedialine.org##.mdl-fixed-informer
+themedialine.org##.mdl-section-subscribe
+chronicle.com##.media-width-half
+kissanadu.com##.member-register
+wbur.org##.menahga-campaign
+livecoinwatch.com##.message
+thetyee.ca##.messaging-zone
+orlandosentinel.com##.met-footer-toast
+duffelblog.com,platformer.news,substack.com,theankler.com##.meta-info-block
+themighty.com##.meta-join
+mv-voice.com##.meter-warning-box
+paloaltoonline.com##.meter-warning-text
+metro.co.uk##.metro-email-signup
+investing.com##.mid-page-promo-btn-wrapper
+missouri.edu##.miz-layer
+motherjones.com##.mj-text-cta
+heartfm.co.za##.mk-subscribe-link
+thegazette.com##.ml-form-embedContainer
+thebestcakerecipes.com##.ml-vertical-align-center
+lung.org##.modaal-overlay
+abc15.com##.modal--content
+unknowncomicbooks.com##.modal--newsletter
+christiantoday.com##.modal-container
+ensemblemagazine.co.nz##.modal-subscribe
+indiainfoline.com##.modal-wraper
+cooking.nytimes.com##.modal_modal-window-container__26ycp
+greenbuildingadvisor.com##.module--email-cta
+deansforimpact.org##.module-fixed-sign-up
+cracked.com##.module-newsletter
+nplusonemag.com##.module-subscribe
+pennlive.com##.module__promo
+ici.radio-canada.ca##.most-popular-newsletter-container
+rare.us##.move-social__inner
+cybersecurityventures.com##.mpc-callout
+msmagazine.com##.ms-actions
+autosport.com,motorsport.com##.ms-footer_top
+msnbc.com##.msnbcDaily__footer
+insideevs.com,motor1.com##.msnt-mail-dialog
+insideevs.com##.msnt-mail-footer
+itweb.co.za##.mt-3.itw-noprint
+cloudflare.com##.mt6.ph2.bg-blue4
+theworld.org##.mui-style-19k9qdy
+visualcapitalist.com##.mvp-widget-home-head
+tampabay.com##.my-32
+mayoclinic.org##.myc-subscription-form
+ft.com##.n-sliding-popup
+tutorialslink.com##.n-subscribe-footer
+nature.com##.nature-briefing
+shine.cn##.nav-tools
+nationalinterest.org##.nav__mag
+asweetpeachef.com,biggerbolderbaking.com,bookshop.org,craftboxdirect.com,dailycaller.com,gamebyte.com,geoffanderson.dk,glerups.com,highcarbhannah.co,kurufootwear.com,mobellageret.dk,motor1.com,mychicagosteak.com,mylivelobster.com,readwrite.com,redrightvideos.com,rocketeyewear.com,staples.ca,thesatanictemple.com,tibi.com,unknowncomicbooks.com,warpedsense.com##.needsclick[aria-label][style]
+thehill.com##.network-footer__newsletter
+vegancooking.com##.never-miss
+allmusic.com##.new-release-newsletter-promo-tile
+freightwaves.com##.new-subscription-mjd
+hindustantimes.com##.new__newsletter__signup
+techwalla.com##.newletter-signup-wrapper
+khaleejtimes.com##.newletter-widget-wrapper
+healthyceleb.com##.news-form
+autocarindia.com,india.com,isglobal.org,sassymamahk.com##.news-letter
+apnews.com##.news-letter-button
+healthing.ca##.news-letter-form
+apnews.com##.news-letter-input
+presstv.ir##.news-signup-container
+the-line-up.com##.newsLettetPb
+ksl.com##.newsSignup
+drive.com.au##.newsSubscribe
+morningconsult.com##.news__subscribe
+weta.org##.news_signup
+whmi.com##.newsextras
+newsbtc.com##.newsform
+as.com##.newsl-suscribe__content
+financialit.net##.newslatter-s
+psychologies.com##.newslatter_box
+theblaze.com##.newsletter-2020
+theintercept.com##.newsletter-block__content
+dailydot.com##.newsletter-button
+health.com##.newsletter-dialog-header-link
+carnewschina.com##.newsletter-for-scroll
+mobilesyrup.com##.newsletter-form-container
+popsugar.com.au##.newsletter-form-wrapper
+beinsports.com,wftv.com,wpxi.com,wsbtv.com##.newsletter-header
+gothamist.com##.newsletter-home
+mcknights.com,mcknightshomecare.com##.newsletter-html-asset
+ibtimes.co.uk,ibtimes.com##.newsletter-in-article
+almanac.com##.newsletter-incontent
+robbreport.com##.newsletter-link
+sandiegoreader.com##.newsletter-m
+177milkstreet.com##.newsletter-main-old
+177milkstreet.com##.newsletter-mini
+notateslaapp.com##.newsletter-mod
+bloomberg.com,forward.com,latimes.com,sandiegouniontribune.com,tvinsider.com,wamu.org##.newsletter-module
+advocate.com##.newsletter-overlay
+amu.tv##.newsletter-page
+sportico.com##.newsletter-podcast
+mikebloomberg.com,superdeluxeedition.com##.newsletter-popup
+scientificamerican.com##.newsletter-promo
+thepitchkc.com##.newsletter-promo-box
+narcity.com##.newsletter-prompt
+poynter.org##.newsletter-section
+audacy.com,darkreading.com,everydayhealth.com,gamedeveloper.com,historyextra.com,radiotimes.com,sciencefocus.com##.newsletter-sign-up
+capitaltransport.com##.newsletter-sign-up-wrapper
+news24.com##.newsletter-signup--group
+foreignpolicy.com##.newsletter-signup-and-ads
+newsweek.com##.newsletter-signup-horizontal
+moneycontrol.com##.newsletter-signup-rhs
+frontofficesports.com##.newsletter-sticky-bar
+peoplematters.in##.newsletter-sub-fixed
+theasianparent.com##.newsletter-subscribe-card-warp
+scientificamerican.com##.newsletter-subscribe-container
+newyorker.com##.newsletter-subscribe-form
+essence.com##.newsletter-subscribe-inline
+youcouldtravel.com##.newsletter-subscription-block
+thecradle.co##.newsletter-subscription_newsletterform__ulg8Q
+straightarrownews.com##.newsletter-tout
+eatthis.com##.newsletter-window
+gadgets-africa.com,ijnet.org,jam-news.net,webmd.com##.newsletter-wrapper
+hartfordbusiness.com##.newsletterBoxSidebar
+inthesetimes.com##.newsletterForm
+technologyreview.com##.newsletterSection__wrapper--1_GPA
+circleid.com##.newsletterSignUpBox
+chromeunboxed.com##.newsletterSignupBlock
+bigislandnow.com##.newsletterSignupGrid
+petri.com##.newsletterWide
+usafacts.org##.newsletter__block
+greatbritishchefs.com##.newsletter__title-image-overlay
+agsiw.org##.newsletter__wrapper___14iH8
+mycause.com.au##.newsletter_container
+petmd.com##.newsletter_flyout_newsletterFlyout__ms6QT
+timeout.com##.newsletter_inline
+timeout.com##.newsletter_inline_banner
+fromthegrapevine.com##.newsletter_modal
+stakingrewards.com##.newsletter_newsletter__sU4Yv
+fairplanet.org##.newsletter_popup
+weareexplorers.co##.newsletter_sidebar_block
+thegazette.com##.newsletter_sign_up_page_breaker
+shakira.com##.newsletter_signup
+themoscowtimes.com##.newsletterbanner
+christiantoday.com##.newsletterbox
+gardeningknowhow.com##.newsletterform
+almanac.com##.newsletters-signup-wrapper
+therealnews.com##.newspack-lightbox
+recipetips.com##.newsshort
+maketecheasier.com##.newsub-box
+worldcrunch.com##.nl-container
+searchengineland.com##.nl-inline-form
+hero-magazine.com##.nl-side
+hilltimes.com##.nl-signup-container
+investigativepost.org##.nl-small-cta
+searchengineland.com##.nl-stacked-form
+thecourier.com##.nlSignup
+pulse.com.gh,pulse.ng,pulselive.co.ke,pulselive.ug##.nl_reg
+dx.com##.nlbox
+timesofisrael.com##.nlsignup
+reviewjournal.com##.nlsm-small
+fiercewireless.com##.node--type-embed-promo
+realclearscience.com##.notif-wrapper
+law.justia.com##.notification-banner
+ar15.com##.notify
+advisor.ca##.nua-newsletter
+businesstraveller.com##.nw-ns-main
+as.com##.nwl
+lawandcrime.com##.o-callout__newsletter
+outsideonline.com##.o-content-cta
+ft.com##.o-message
+oneesports.gg##.oes-hbs-dedicated-card
+rtrfm.com.au##.offYourDial
+babylonbee.com##.offset-lg-0.col-lg-12
+babylonbee.com##.offset-md-0.col-md-12
+deccanherald.com##.opt_widget_main
+voxeurop.eu##.optin-form
+evonomics.com##.optshorts
+hardtofind.com.au##.otp-overlay
+lifenews.com##.outerModalPopupDiv
+output.com##.output-mag-newsletter-form
+themessenger.com##.overflow-hidden.relative.w-\[300px\]
+themessenger.com##.overflow-hidden.relative.xl\:px-9
+bookforum.com,fairplanet.org,focus-arztsuche.de,ny1.com,realclearpolitics.com,realclearscience.com,tubefilter.com##.overlay
+focus-arztsuche.de##.overlay-modal
+artandeducation.net##.overlayer
+babylonbee.com,notthebee.com##.overscroll-contain
+whysobeerious.com##.oxy-alert-box
+foreignaffairs.com##.p-0.container-fluid > .mt-5
+marketbeat.com##.p-3.h-100
+insightcrime.org##.page-general__newsletter-btn
+thebulletin.be##.pane-bulweb-general-bulletinguide-block
+thebulletin.be##.pane-bulweb-general-registration-block
+electronicintifada.net##.pane-mailchimp-signup-ei-readers
+traveller.com.au##.panel--subscribe
+pedestrian.tv##.panel-signup-footer
+verybestbaking.com##.paragraph--type--gdn-contact-us
+goodnes.com##.paragraph--type--gdn-newsletter-ii
+biztechmagazine.com##.paragraph--type--linked-image
+rsf.org##.paragraph--type--newsletter
+labiotech.eu##.pb-8
+nejm.org##.pb-house-message
+playboy.com##.pb-newsletter
+playbuzz.com##.pb-site-subscription
+bonappetit.com##.persistent-bottom
+dieselworldmag.com##.php_widget-15
+washingtontimes.com##.piano-fixed-footer-two
+mathrubhumi.com##.piano-newsletter-article
+wbur.org##.pinegrove-campaign
+massispost.com##.pk-subscribe-container
+hightimes.com##.pk-subscribe-form-widget
+foreigndesknews.com,hackread.com##.pk-subscribe-form-wrap
+ny1.com##.playerBlocker
+crikey.com.au##.pm-todays-newsletter-block
+dot.la##.pop-up-content
+thefader.com##.popular_posts
+morningconsult.com,pbs.org##.popup
+wanderlust.co.uk##.popup-box
+eyebuydirect.com##.popup-effect
+homecookingadventure.com##.popup-signup
+businessinsider.com,eyebuydirect.com##.popup-wrapper
+kyivindependent.com##.popupBannerSubscribeUd
+sheetmusicplus.com##.popupNeedDelayAppear
+rugbyworldcup.com##.popupRegistrationForm--show
+longevity.technology##.popup_bg
+styletread.co.nz,styletread.com.au##.popup_overlay
+rairfoundation.com##.popupally-overlay-gfcr-1
+bicycleretailer.com##.post-article-signup
+venturebeat.com##.post-boilerplate
+themarshallproject.org##.post-footer-subscribe-promo
+earthsky.org##.post-subscribe
+ip2location.com##.pre-footer-subscribe-box
+kob.com##.preloaded_lightbox
+offshore-energy.biz##.premium-popup
+zookeys.pensoft.net##.previewPageSubscribe
+realtor.com##.product-specific-widget
+allmusic.com,theconversation.com##.promo
+fox4news.com,fox7austin.com##.promo-image
+endocrineweb.com##.promo-inline
+newsweek.com##.promo-link
+whiskeyraiders.com##.promo-unit
+sciencefocus.com##.promotion-cards
+portseurope.com##.pum-container
+celebrityaccess.com##.pum-overlay
+thebaltimorebanner.com##.push-notification-inline-cta
+themessenger.com##.px-5.bg-navy
+babylonbee.com,notthebee.com##.py-6.px-6
+sprintmedical.in##.py-8.bg-gradient
+australianforeignaffairs.com,quarterlyessay.com.au##.qe-news--inline
+independent.ie##.quick_subscribe
+allthatsinteresting.com##.r-klde5a.r-1awozwy.css-175oi2r
+theparisreview.org##.rail-enews
+oregonlive.com##.rawhtml
+news.yahoo.com##.react-wafer-Featurebar
+theinformation.com##.read-this-article-banner-container
+adage.com##.recirculationCTA
+al-monitor.com##.region--trending.region
+africacheck.org##.region-footer-third
+feedspot.com##.regoverlay
+reuters.com##.regular-article-layout__newsletter__3wzPk
+triblive.com##.related
+visittopeka.com##.reveal-modal
+audiofilemagazine.com##.reveal-modal-bg
+onlinepokerreport.com##.ribbon
+scmp.com##.right-content.third-article__right-content
+thediscoveriesof.com##.right-footer
+axios.com##.right-rail-cta
+indiewire.com##.right-side > .u-padding-tb-20
+tweaktown.com##.right_subscribe
+religionnews.com##.rns-newsletter-embed-content
+religionnews.com##.rns-pop-up-wrapper
+thestreamable.com##.rounded-3.px-5
+notthebee.com##.rounded-lg.px-6
+urbandictionary.com##.rounded-md.md\:p-8.mb-4.dark\:text-white
+newshub.co.nz##.rounded6.wrapper
+wikihow.com##.rr_newsletter_class
+recipetips.com##.rtJqibox
+niemanlab.org##.s2-bottom-emailpromo
+motortrend.com##.sII9F
+ahchealthenews.com##.savicom-subscribe-widget
+thebudgetsavvybride.com##.savvy-target
+idropnews.com##.sb3
+complex.com##.sc-2ff98d60-0
+wayfairertravel.com##.search-container2
+wethegeek.com##.sec-subscribe
+sainsburysmagazine.co.uk##.section--blue.section
+247wallst.com##.section-email-sub
+kimpetras.com##.section-subscribe
+carsdirect.com##.sectionBlockInsiderInfo
+searchenginejournal.com##.sej-hello-bar
+searchenginejournal.com##.sej-subscribe-form
+searchenginejournal.com##.sej-widget
+iphoneincanada.ca##.send-footer
+ianvisits.co.uk##.sendysubscribe
+dailyedge.ie,thejournal.ie##.separator-newsletter-redesign
+alldayidreamaboutfood.com,inspiredtaste.net##.seva-overlay
+webmd.com##.sf-nls-wrapper
+creativedestructionmedia.com,delacortereview.org,floridianpress.com,marktechpost.com,mediaplaynews.com,thefullpint.com##.sgpb-popup-dialog-main-div-wrapper
+asianjournal.com,creativedestructionmedia.com,delacortereview.org,floridianpress.com,marktechpost.com,mediaplaynews.com,prescouter.com,thefullpint.com##.sgpb-popup-overlay
+vtdigger.org##.shop-promo
+aetv.com##.show-newsletter-container
+platformer.news,substack.com##.show-subscribe
+swissinfo.ch##.si-teaser--newsletter-subscription
+inquirer.net,offthebeatenpoints.com##.sib-form
+technology.org,tourscanner.com##.sib_signup_form
+worldcrunch.com##.side-bar-nl-wrap
+foodfolksandfun.net##.side-news-box
+chromeunboxed.com##.sideMC
+thewalrus.ca##.sidebar-above-footer
+hotelnewsresource.com##.sidebar-block-signup
+thehustle.co##.sidebar-feed-hustle
+caribjournal.com##.sidebar-form
+youcouldtravel.com##.sidebar-item-subscribe-form
+techgenix.com##.sidebar-optin
+curiocity.com##.sidebar-section--subscribe
+inspiredtaste.net,tuc.org.uk##.sidebar-signup
+thesaturdaypaper.com.au##.sidebar-sticky--briefing
+ghafla.com##.sidebar.col-md-3
+fortune.com##.sidebarPlea
+therecord.media##.sidebar__widget--newsletter
+masterinvestor.co.uk##.sidebar_nl
+total-croatia-news.com##.sign-newsletter
+politico.com##.sign-up-21
+theculturetrip.com##.sign-up-bannerstyled__SignUpBannerWrapper-sc-13sjkk5-0
+foreignaffairs.com,monocle.com##.sign-up-container
+thepinknews.com##.sign-up-form
+themonthly.com.au##.sign-up-form-latest
+carsales.com.au##.sign-up-widget-placeholder
+americamagazine.org##.signUp
+charlestonbusiness.com,columbiabusinessreport.com,gsabusiness.com,scbiznews.com##.signUpWrapper
+livemint.com##.signUpcardStory
+dzone.com##.signin-prompt
+addictivetips.com,additudemag.com,armytimes.com,biblegateway.com,biopharmadive.com,elie.net,fullfact.org,insidehook.com,moon.com,motorsportweek.com,mumbrella.com.au,quantamagazine.org,reinsurancene.ws,tatemcrae.com,theafricareport.com,thecourier.co.uk,tripstodiscover.com,tubefilter.com##.signup
+pnas.org##.signup-ad
+shareable.net##.signup-area
+simonandschuster.com##.signup-background
+admonsters.com,autocar.co.uk,bookmundi.com##.signup-block
+codeproject.com,reviewjournal.com##.signup-box
+themonthly.com.au##.signup-box-container
+justdetention.org,screenshot-media.com##.signup-container
+xbiz.com##.signup-form
+additudemag.com##.signup-global
+drewberquist.com,lifezette.com,redvoicemedia.com,revolver.news##.signup-modal
+chronicle.com##.signup-module
+futurity.org##.signup-section
+insidehook.com##.signup-text
+thegadgetflow.com##.signup.blog-sidebar-section
+americanprogress.org,clashdaily.com,redrightvideos.com,thinkamericana.com##.signup1
+americanprogress.org##.signup2
+tubefilter.com##.signupAfter
+tubefilter.com##.signupInline
+campusreform.org##.signup_card
+wbez.org##.signup_email
+trutravels.com##.signup_section
+compellingtruth.org##.signupprint
+the-sun.com##.sim-module-wrapper
+simplywall.st##.simpl-sws-below-post
+niemanlab.org##.simple-endofarticleemail
+beliefnet.com##.simple-row-signup
+niemanlab.org##.simple-sidebar-emailsignupbox
+patheos.com##.simple-signup
+leons.ca##.simpleltkmodal-container
+leons.ca##.simpleltkmodal-overlay
+blendernation.com##.simplemodal-container
+blendernation.com##.simplemodal-overlay
+celebrityaccess.com##.single-footer-subscribe
+hollywoodinsider.com##.single-page-subscription
+reason.com##.single-post-signup-box
+nme.com##.site-footer-mailing-list
+oxygen.com##.site-footer__insider-promo
+faithwire.com##.site-ftr__subscribe
+citizensforethics.org##.site-header__secondary-nav
+ccjdigital.com,equipmentworld.com##.site-newsletter-menu
+abplive.com##.skl-widget
+salemreporter.com##.skybox-trial
+mixed-news.com##.slbElement
+carnegieendowment.org##.slide-in
+genuine-people.com##.slide-up-banner
+blog.resy.com##.slot1
+ieee.org##.sml_article_static
+suomenmaa.fi##.smm-newsletter
+secretchicago.com##.smn-banner-newsletter
+secretchicago.com##.smn-home-section__sticky-container
+johncodeos.com##.snp-bld-showme
+nhm.ac.uk##.social-signup--container
+experts-exchange.com##.solutionLeadCapture
+herbiesheadshop.com,ukragroconsult.com##.sp-form-outer
+thecurrent.com##.space-y-8 > .subscribe-form
+forecourttrader.co.uk,fruitnet.com##.spinPromo
+metro.co.uk##.spot-im-spotlight
+newblueontario.com,thedial.world##.sqs-popup-overlay
+straitstimes.com##.st-newsletter
+statnews.com##.stat-hubspot-signup
+al-monitor.com##.stay-in-touch
+technologyreview.com##.stayConnected__wrapper--22zXu
+carsdirect.com##.stayInformedWidget
+venturebeat.com##.sticky-briefings-cta
+alaraby.co.uk,fbi.gov,newarab.com,puck.news##.sticky-footer
+appgrooves.com##.sticky-signup-section
+protocol.com##.sticky-target
+tn.com.ar##.sticky_top
+interacnetwork.com##.stripe--newsletter
+barrons.com##.style--newsletter-signup-bottom--1Spc175x
+inyourarea.co.uk##.styles_DesktopBottomBarSubscriptionForm_21C_s
+semafor.com##.styles_newsletterSection__6CWXE
+reclaimthenet.org##.su-box
+blacknews.com##.sub
+thehackernews.com,yardbarker.com##.sub-button
+fansided.com,lastnighton.com,netflixlife.com,stormininnorman.com,winteriscoming.net##.sub-footer-container
+attilasec.com##.sub-form
+investmentnews.com##.subPopupTop
+salon.com##.sub_promo
+nautil.us##.subscibe-bar
+3dprint.com##.subscribe--sidebar
+bookforum.com##.subscribe-ad__corner
+countynewscenter.com,vallejosun.com##.subscribe-area
+stereogum.com##.subscribe-article
+lovefoodnotcooking.com,nautil.us,rabble.ca,spectator.org##.subscribe-bar
+greenbiz.com##.subscribe-block-container
+mamamia.com.au##.subscribe-border-bottom
+404media.co,christiantoday.co.nz,christiantoday.com.au,classicalite.com,faithpot.com,heatmap.news,infoq.com,mamamia.com.au,onmilwaukee.com,oversixty.co.nz,paloaltonetworks.com,save.ca##.subscribe-box
+albawaba.com,sport360.com##.subscribe-btn
+howtogeek.com##.subscribe-button
+reviewgeek.com##.subscribe-button-direct-link
+mediatrust.com##.subscribe-callout-bar
+narcity.com,sciencenews.org,straightarrownews.com##.subscribe-cta
+aorus.com,nutritioninsight.com,packaginginsights.com##.subscribe-div
+cafemom.com##.subscribe-enter-done
+euroweeklynews.com##.subscribe-for-news
+memri.org##.subscribe-for-updates
+allthings.how,armageddonexpo.com,businesstech.co.za,itsfoss.com,jurist.org,pandotrip.com,pissdaily.com,rigzone.com##.subscribe-form
+theanalyst.com##.subscribe-form-footer
+bongino.com##.subscribe-form-home
+thefinancialbrand.com##.subscribe-free
+superwatchman.com##.subscribe-header
+itweb.co.za##.subscribe-input-box
+rt.com##.subscribe-layout
+spaceref.com##.subscribe-line-link
+media4growth.com##.subscribe-ltr
+techpout.com##.subscribe-medium
+meetup.com##.subscribe-modal
+wccftech.com,westhawaiitoday.com##.subscribe-now
+longislandpress.com,metro.us##.subscribe-now-box
+thecanary.co##.subscribe-panel
+spectrum.ieee.org##.subscribe-podcast
+tpain.com##.subscribe-popup
+politics.co.uk##.subscribe-popup-container
+aciafrica.org,catholicnewsagency.com##.subscribe-post
+alvarotrigo.com##.subscribe-s
+bitdegree.org,philadelphiaherald.com##.subscribe-section
+metro.us##.subscribe-section-container
+thefire.org##.subscribe-sticky
+thenewdaily.com.au##.subscribe-strap
+semanticscholar.org##.subscribe-tile
+splash247.com##.subscribe-widget
+bikeexif.com##.subscribe-win
+press-start.com.au##.subscribe-wrap
+chargedretail.co.uk##.subscribe1
+iflscience.com##.subscribeBox
+zookeys.pensoft.net##.subscribeForEmail
+controleng.com##.subscribePromo
+bartendersbusiness.com##.subscribeToOurNewsletter
+thejc.com##.subscribe__footer
+dualipa.com##.subscribe__form
+pbs.org##.subscribe__form-wrapper
+thenationalpulse.com##.subscribe__popover
+therealnews.com##.subscribe__style-1
+publicintegrity.org##.subscribe__style-6
+breathecast.com##.subscribe_div
+drive.com.au##.subscribe_drive-subscribe-content__wrapper__eL0k9
+topuniversities.com##.subscribe_news_letter
+mobilemarketingmagazine.com##.subscribe_section_wrap
+cookingclassy.com##.subscribebar
+natashaskitchen.com##.subscribenew
+nationaltoday.com##.subscriber-box
+broadwayworld.com##.subscribtion-form
+todayonline.com##.subscription-block
+blog.phylum.io,newyorker.com##.subscription-form
+tripsavvy.com##.subscription-island--home
+broadsheet.com.au##.subscription-modal
+channelnewsasia.com##.subscription__content
+fora.ie##.subscriptions
+idiva.com##.sunscribe-cont
+freightwaves.com##.super-form
+aerospaceamerica.aiaa.org##.supplement
+bigbangnews.com##.suscribehorizontal
+securityweek.com##.sw-newsletter
+propublica.org##.syndicated-modal
+utilitydive.com##.t-signup-navigation
+techrepublic.com##.ta-campaign-widget
+techrepublic.com##.ta-campaign-widget__popup-wrapper
+marktechpost.com##.td-a-rec-id-content_inline
+cinelinx.com##.td-all-devices
+carnewschina.com##.td-pb-span4.tdi_127
+kbb.com##.td_block_kbb_bestcardeals_subscription_form
+carnewschina.com##.tdi_117
+opindia.com##.tdi_174
+ghpage.com##.tdm-popup-modal-wrap
+fangoria.com##.terror-teletype
+jpl.nasa.gov##.text-center.bg-gray-light
+nymag.com,thecut.com##.text-form-wrapper
+canarymedia.com##.text-gray-600.mt-5.py-4
+nodejs.libhunt.com##.text-strong-invite
+thefederalistpapers.org##.tgp-ic-subscribe-box
+theinformation.com##.ti-awareness-bar
+them.us##.ticker-view
+ncaa.com##.tile-newsletter
+moneysavingexpert.com##.tip-email-popup
+ba-bamail.com##.tm-desk-reg-box-wrapper
+ba-bamail.com##.tm-join-box
+themedialine.org##.tml-in-content-block--subscribe
+thenation.com##.tn-inline-cta-module
+thenewdaily.com.au##.tnd-strapline
+thenewdaily.com.au##.tnd-subscribe-modal
+thenew.institute##.tni-newsletterModal
+haproxy.com##.to-sky-100
+themarshallproject.org##.toast-notifications-container
+theculturetrip.com##.toaststyled__ToastArticleWrapper-sc-1i4l75i-0
+justthenews.com##.top-bar
+topauto.co.za##.top-newsletter
+auto.economictimes.indiatimes.com##.top-newsletter-subs
+businesstech.co.za,mybroadband.co.za##.top-subscribe
+slaynews.com##.totalpoll-container
+independent.co.uk##.tp-active
+independent.co.uk,nationalobserver.com##.tp-backdrop
+hbr.org,heraldscotland.com,nationalpost.com,scotsman.com,suntimes.com,vancouversun.com##.tp-container-inner
+tp-link.com##.tp-follow-container
+independent.co.uk,nationalobserver.com##.tp-modal
+babylonbee.com,notthebee.com##.transition-opacity
+teleticketservice.com##.ts-banner-overlay-first
+crypto-news-flash.com##.tve-leads-shortcode
+drivencarguide.co.nz##.tw-text-white.tw-bg-gray-900
+texasobserver.org##.txo-newsletter__outer
+skinnyms.com##.type-join-today-cta
+wwd.com##.u-width-300.lrv-u-background-color-black
+alamocitygolftrail.com##.uabb-modal-parent-wrapper
+processengineering.co.uk##.ub-emb-container
+techmeme.com##.ubub
+biztechmagazine.com,iclg.co.uk,ptitchef.com##.ui-dialog
+nugs.net##.ui-dialog-newsletter
+bestreviews.com,biztechmagazine.com,madewell.com,ptitchef.com##.ui-widget-overlay
+forums.macrumors.com##.uix_sidebarInner
+chatelaine.com,macleans.ca##.under-article-widget-nl
+blog.google##.uni-newsletter-toast
+craftybaking.com##.upper
+usa.gov##.usa-sign-up
+census.gov##.uscb-container-foreground
+census.gov##.uscb-email-subscription
+vice.com##.user-newsletter-signup
+aarp.org##.uxdia-c-widget--newsletter
+techguide.com.au##.vc_single_image-wrapper
+techguide.com.au##.vc_wp_text
+biztechmagazine.com##.views-field-field-cta-slide-image
+theshoecompany.ca##.vip-enrollment-banner
+wateronline.com##.vm-hello-bar
+wateronline.com##.vm-newsletter-signup-bait
+wateronline.com##.vm-newsletterbribe
+biblegateway.com##.votd-subscribe-form
+elpais.com##.w-cta.w
+inferless.com##.w-form
+simpleflying.com##.w-newsletter-in_article
+bodybuilding.com##.w21_middle-bar__newsletter
+elpais.com##.w_tx
+wbur.org##.wall-actions
+thetoyinsider.com##.wds-block-newsletter
+searchenginejournal.com##.web-dwn
+health.harvard.edu##.welcome-popup
+dictionary.com##.widget
+hpcwire.com##.widget-2
+mygaming.co.za,printmag.com##.widget-area
+offshore-energy.biz##.widget-dynamic
+nextplatform.com##.widget-no-mobile
+blog.vidizmo.com##.widget-type-blog_subscribe
+domainnamewire.com##.widget-wrap.widget_text
+vancouverisawesome.com##.widget-wysiwyg
+moroccoworldnews.com##.widget__form-subscribe
+tennesseestar.com##.widget_bloomwidget
+doctornerdlove.com##.widget_convertkit_form
+humansbefree.com,insidethemagic.net,momfabulous.com,mpost.io,pymnts.com,wersm.com##.widget_custom_html
+worldscreen.com##.widget_execphp.widget
+onelifeadventures.com.au##.widget_infusionsoft
+touristspy.com##.widget_mo_optin_widgets
+decider.com##.widget_nypost_decider_social_connect_widget
+quipmag.com##.widget_oih_opt_in_widget
+sentinelone.com##.widget_s1_signup
+truthout.org##.widget_text
+retbit.com##.widget_text.zox-side-widget
+watchtime.net##.widget_wt-newsletter-widget
+boulderweekly.com##.wisepops-container
+boulderweekly.com,insideclimatenews.org##.wisepops-root
+creepycatalog.com##.wp-block-cata-newsletter
+interiordesign.net##.wp-block-id-newsletter
+freshoffthegrid.com##.wp-block-kadence-rowlayout
+bikerumor.com,gearjunkie.com##.wp-block-ldm-blocks-call-to-action
+blockclubchicago.org##.wp-block-lede-common-newsletter
+thewrap.com##.wp-block-newsletter-builder-signup-form
+observer.com##.wp-block-observer-newsletters
+pewresearch.org##.wp-block-prc-block-promo
+san.com##.wp-block-san-san-inarticle-newsletter-signup
+visualcapitalist.com##.wp-image-1216
+sciencefocus.com##.wp-image-136378
+thefinancialdiet.com##.wp-image-18627
+lifeinnorway.net##.wp-image-9836
+accessnow.org##.wp-popup
+5pillarsuk.com,raya.com##.wpcf7
+ipatriot.com##.wpdev-email-signup
+visualcapitalist.com##.wpforms-ajax-form
+skinnyms.com,thestayathomechef.com,vacationstravel.com##.wpforms-container
+freecoursenet.cc##.wpforms-validate
+autocar.co.nz,health-e.org.za##.wpforms-widget
+nintendosoup.com,thehappyfoodie.co.uk##.wppopups-whole
+amazingribs.com##.wpsta-ar-newsletter-1st-page-view
+expressvpn.com##.wrap-subscribe
+countryviewah.com##.wrap__newsletter
+wwd.com##.wwd-subscribe-now-banner-ad-container
+wwd.com##.wwd-subscribe-now-banner-background
+loyalfordogs.com##.your-help
+brucelee.com,fridaythings.com,paleofuture.com,stability.ai,worldofreel.com##.yui-popup-container-node
+culturemap.com##.z-newsletter
+nypost.com,pagesix.com##.zephr-component
+bbc.com##.zephr-overlay
+minds.com##M-MODAL
+therealdeal.com##[class*="Newsletter"]
+axios.com##[class*="StoryPageCTA_story-page-cta_"]
+animalchannel.co,homehacks.co,parentingisnteasy.co,relieved.co,seeitlive.co,spotlightstories.co,sweetandsavory.co##[class="md:mt-10"]
+androidauthority.com##[class] > [class] > form[class]
+nowthisnews.com,thrillist.com##[class^="EmailAcquisitonstyles"]
+zerohedge.com##[class^="ExitModalNewsletter_"]
+dailyhive.com##[class^="IframeNewsletter_iframe-"]
+zerohedge.com##[class^="MidArticleNewsletter_"]
+dailyhive.com##[class^="NewsletterModule_newsletter_"]
+audialab.com##[class^="PopUp_"]
+coindesk.com##[class^="article-sign-up-"]
+snexplores.org##[class^="widget-resources_"]
+charlieintel.com,dexerto.com##[data-cy*="Newsletter"]
+dexerto.com##[data-cy="SignupWidget"]
+psyche.co##[data-cy="layout-newsletter-signup"]
+psyche.co##[data-ga-view-prompt="psyche_footer_banner_newsletter"]
+psyche.co##[data-ga-view-prompt="psyche_midarticle_insert_newsletter_oatmeal"]
+psyche.co##[data-ga-view-prompt="psyche_popup_rightcorner_newsletter_oatmeal"]
+nytimes.com##[data-gtm-element="newsletter_loaf_form"]
+wsj.com##[data-inset_type="newsletterinset"]
+insideottawavalley.com##[data-lpos="headlines-newsletter"]
+sundayworld.com##[data-mht-widget="signu-up-black-background"]
+thisismoney.co.uk##[data-newsletter]
+walletinvestor.com##[data-section="header_top"]
+walletinvestor.com##[data-section="news_header_top"]
+foreignpolicy.com##[data-shortcode-newsletter]
+theguardian.com##[data-spacefinder-type="model.dotcomrendering.pageElements.NewsletterSignupBlockElement"]
+topgear.com##[data-testid="NewsletterFooter"]
+sifted.eu##[data-testid="in-house-ad-climatetech"]
+thurrott.com##[data-thurrott-layout-section-footer-section="newsletter"]
+thurrott.com##[data-thurrott-section="inline-form"]
+oann.com##[href="/alerts"]
+jewishworldreview.com##[href="/subs.php"]
+techcabal.com##[href="https://techcabal.com/newsletter"]
+linuxiac.com##[href^="https://subscribe.linuxiac.com/"]
+yahoo.com##[href^="https://subscription.yahoo.net/Newsletter/"]
+icij.org##[id*="_modal_outer_"]
+fxstreet.com##[id^="subscribetonewsletterv2_"]
+middleeasteye.net##[style^="display: flex; align-items: center; justify-content: center;"]
+factcheck.org##a[href*="/subscribe/"]
+quantamagazine.org##a[href="#newsletter"]
+time.com##a[href^="https://cloud.newsletters.time.com/signup?"]
+refinery29.com##aside
+cars.com##cars-newsletter-signup
+blockworks.co##div > .p-10.gap-4
+bustle.com##div.lqj:last-child
+usnews.com##div.mb5 > react-trigger
+thepointsguy.com##div[class*="EmailSignUp_"]
+theatlantic.com##div[class^="BottomLeaflets_newsletter_"]
+wired.com##div[class^="ConsumerMarketingUnitThemedWrapper-"]
+patch.com##div[class^="ContentBlocks_CardDetail__SubscribeBlock"]
+usnews.com##div[class^="KioskFirstClass__Container-"]
+thescore.com##div[class^="NewsletterCard_"]
+theglobeandmail.com##div[class^="NewsletterOnArticleSubscribe_"]
+interestingengineering.com,newsday.com##div[class^="Newsletter_"]
+timeout.com##div[class^="_inlineNewsletter_"]
+zicasso.com##div[class^="article-page-module--article__newsletter"]
+cpr.org##div[class^="newsArticleSignup_"]
+bramptonguardian.com,buzzfeed.com,buzzfeednews.com,coindesk.com,cpr.org,petmd.com,sciencenews.org,snexplores.org,zicasso.com##div[class^="newsletter"]
+engadget.com##div[data-component="NewsletterCard"]
+scmp.com##div[data-qa="NewsletterWidgetContainer-NewsletterWidget"]
+rootforamerica.com##div[id^="PopupOverLay_SF_"]
+thenation.com##div[id^="inline_cta_"]
+haaretz.com##div[id^="newsletter"]
+rootforamerica.com##div[id^="pframe_SF_"]
+theblaze.com##div[id^="sWidget_-_Newsletter_"]
+niemanlab.org##div[style^="border: 1px dashed #a51c30; color: #333;"]
+dailydot.com##footer
+bbc.com##img[alt="News Daily banner"]
+michiganmedicine.org##labcoat-promo
+extremetech.com##section > .mt-8
+regain.us##section[data-testid="newsletter-section"]
+!! medium
+codeburst.io,medium.com##[class][style="bottom: 0px;"]
+!! thelocal
+thelocal.at,thelocal.ch,thelocal.de,thelocal.dk,thelocal.es,thelocal.fr,thelocal.it,thelocal.no,thelocal.se##.ml-manual-widget-container
+!! Counter uBO Ghide
+edmontonjournal.com##.newsletter-widget
+!! #shopify-section-newsletter-popup
+kyliejennershop.com###shopify-section-newsletter-popup
+!! .subscription-widget-wrap
+emianalysis.com,hamiltonnolan.com##.subscription-widget-wrap
+!! .mailpoet_form
+chipsandcheese.com,exputer.com,logitheque.com,mixed-news.com,notionthings.com,phonandroid.com,sardiniapost.it,slaynews.com,tech4gamers.com,tomshardware.fr##.mailpoet_form
+!! signUpForm_
+fastxmovie.com,missionimpossible.com,teenagemutantninjaturtlesmovie.com,thesupermariobros.movie,transformersmovie.com##div[class^="signUpForm_"]
+!! .bottom-0.fixed
+cnnindonesia.com,notthebee.com,nysun.com##.bottom-0.fixed
+!! .join_email_capture_component
+potterybarnkids.com##.join_email_capture_component
+!! .form-nl
+kongnews.it,petitchef.com,petitchef.es,petitchef.it,ptitchef.com##.form-nl
+!! .newsLetter
+1news.co.nz,desh.co.in,pgpf.org,yaoota.com##.newsLetter
+!! .nl-box
+ccm.net,commentcamarche.net,hugolescargot.com,journaldesfemmes.fr,journaldunet.com,linternaute.com##.nl-box
+!! .nl-block
+francetvinfo.fr,orizzontescuola.it##.nl-block
+!! #mailsignup
+techzine.eu,techzine.nl###mailsignup
+!! .suscribe
+motor.com.co,thejakartapost.com,ultimominuto.news##.suscribe
+!! #newsletter-form
+altreconomia.it,dezeen.com,discogs.com,sbs.com.au,soft112.com###newsletter-form
+!! .NewsletterForm
+edweek.org,francebleu.fr,telegraaf.nl##.NewsletterForm
+!! .copyRight-div
+earlybirdbooks.com,openroadmedia.com,theportalist.com##.copyRight-div
+!! .ml-subscribe-form
+dailynewshungary.com,designersbrasileiros.com.br,fosspost.org,justrunlah.com,michaelwest.com.au,osxdaily.com,roadiscalling.com,upinthesky.nl##.ml-subscribe-form
+!! .subscription
+alhayat.tv,alquds.co.uk,augustman.com,brighteon.com,cgsociety.org,cityam.com,healthboards.com,livejournal.com,news.bg,noticiasmagazine.pt##.subscription
+!! .sign-up
+fakartany.com,iai.tv,loopchicago.com,loopnet.com,nintendonews.com##.sign-up
+!! .subscription-box
+borsonline.hu,faroutmagazine.co.uk,magyarnemzet.hu,metropol.hu,ripost.hu,thecaterer.com,veol.hu,vg.hu##.subscription-box
+!! .modal/.modal-backdrop (no broken scroll)
+answear.ua,ba-bamail.com,kenyabuzz.com,tinysociety.co,vogue.com##.modal
+ba-bamail.com,breakingdefense.com,nordvpn.com,poolsupplies.com,protel.co.nz,publish0x.com,pv-magazine.com,tinysociety.co##.modal-backdrop
+!! .form-newsletter
+exchangerates.org.uk,vozpopuli.com##.form-newsletter
+!! .newsletter-signup
+247sports.com,4029tv.com,abovethelaw.com,blackburnnews.com,bookriot.com,citiblog.co.uk,citusdata.com,clickorlando.com,cockroachlabs.com,creation.com,dailybee.com,dailysignal.com,dallasinnovates.com,euobserver.com,fox10phoenix.com,fox13news.com,fox13seattle.com,fox26houston.com,fox29.com,fox32chicago.com,fox35orlando.com,fox4news.com,fox5atlanta.com,fox6now.com,foxla.com,greencarreports.com,hcn.org,japantimes.co.jp,jta.org,kcci.com,kcra.com,ketv.com,kmbc.com,koat.com,koco.com,komando.com,ksbw.com,ktvu.com,livescience.com,motherjones.com,mynbc5.com,newsweek.com,nugs.net,progressive.org,publicdomainreview.org,q13fox.com,readbetting.com,readcars.co,readceltic.com,readfashion.co,readfilm.co,readfood.co,readgaming.co,readmanutd.com,readmotorsport.com,readmusic.co,readshowbiz.co,readtv.co,san.com,slate.com,sportsworldnews.com,tastecooking.com,techfinitive.com,thebeliever.net,thekitchenmagpie.com,tomsguide.com,toofab.com,tvtropes.org,undark.org,wapt.com,wbaltv.com,wcvb.com,wdsu.com,wesh.com,wgal.com,wisn.com,wjcl.com,wlky.com,wlwt.com,wmtw.com,wmur.com,womanandhome.com,wpbf.com,wqxr.org,wtae.com,wvtm13.com,wxii12.com,wyff4.com##.newsletter-signup
+!! .newsletter-container
+advocate.com,out.com,pastemagazine.com,san.com,weeklyrecess.com##.newsletter-container
+!! .newsletter-modal
+knowablemagazine.org,louderwithcrowder.com,lung.org,monitor.co.ug,san.com,the-line-up.com,theportalist.com,tokmanni.fi##.newsletter-modal
+!! .newsletterSignup
+chemistryworld.com,flightglobal.com,fruitnet.com,screendaily.com,thegrocer.co.uk##.newsletterSignup
+!! NewsletterSignup
+context.news,defector.com,dirt.fyi,goop.com,hellgatenyc.com,nationalworld.com,streetsblog.org,which.co.uk##div[class*="NewsletterSign"]
+!! insider.com/businessinsider.com
+businessinsider.com,insider.com##.inline-newsletter-signup
+!! #newsletterForm
+applefirmwares.com###newsletterForm
+!! .newsletter-subscription
+alarabiya.net,deutschland.de,globo.com,intego.com,letrap.com.ar,news24.com,phonearena.com,recepty.cz,sundayworld.com##.newsletter-subscription
+!! .newsletter-subscription-form
+idealista.pt##.newsletter-subscription-form
+!! ##a[href*="/newsletter"]
+adweek.com,avclub.com,chicoer.com,coloradodaily.com,coloradohometownweekly.com,corriere.it,dailybreeze.com,dailybulletin.com,dailycamera.com,dailydemocrat.com,dailynews.com,deadspin.com,denverpost.com,detroitnews.com,dw.com,eastbaytimes.com,eco-business.com,euobserver.com,eurweb.com,gizmodo.com,helpnetsecurity.com,infowars.com,jalopnik.com,japantoday.com,jezebel.com,kotaku.com,lifehacker.com,lowellsun.com,marinij.com,mendocinobeacon.com,mercurynews.com,montereyherald.com,ocregister.com,orovillemr.com,pap.pl,paradisepost.com,pasadenastarnews.com,pe.com,post-gazette.com,presstelegram.com,readingeagle.com,record-bee.com,redbluffdailynews.com,redlandsdailyfacts.com,santacruzsentinel.com,scotsman.com,spokesman.com,stuff.co.nz,telegraph.co.uk,thereporter.com,theroot.com,thetakeout.com,times-standard.com,timesheraldonline.com,ukiahdailyjournal.com,web.dev,whittierdailynews.com,willitsnews.com,wsj.com##a[href*="/newsletter"]
+!! .newsletter-box
+borsonline.hu,brandingmag.com,business-punk.com,cosmosmagazine.com,dealnews.com,it-times.de,libhunt.com,metropol.hu,ripost.hu##.newsletter-box
+!! #NewsletterModal
+dallasobserver.com,miaminewtimes.com,phoenixnewtimes.com,westword.com###NewsletterModal
+!! #mc-embedded-subscribe-form
+dagelijksestandaard.nl,egyptianstreets.com,evonomics.com,gimmesomeoven.com,investordaily.com.au,macrumors.com,reductress.com,reliefweb.int,theawesomer.com,themichiganstar.com,theminnesotasun.com,theohiostar.com,wweek.com###mc-embedded-subscribe-form
+!! #mc_embed_signup
+agenziaimpress.it,alreporter.com,benwajdi.com,bisnis.com,biznews.com,bowenislandundercurrent.com,burnabynow.com,californiasunday.com,capitolhillseattle.com,caribjournal.com,chinafile.com,churchmilitant.com,cinainitalia.com,circuitdigest.com,cjr.org,cointelegraph.com,current.org,dailyfreepress.com,dailytimes.com.pk,davidemaggio.it,delta-optimist.com,demokraatti.fi,exstreamist.com,firstpost.com,francescocosta.net,gamereactor.dk,gamereactor.es,gamereactor.eu,gamereactor.fi,gamereactor.fr,gamereactor.no,gamereactor.se,ghafla.com,howlermagazine.com,ilfarosulmondo.it,ilprimatonazionale.it,indiaclimatedialogue.net,informagiovani-italia.com,iowapublicradio.org,kliknijwzdrowie.pl,kyivpost.com,lacapital.com.ar,lapatilla.com,lascimmiapensa.com,leoweekly.com,majorgeeks.com,meteonetwork.it,metrotime.be,mg.co.za,moked.it,money.it,national-justice.com,newzimbabwe.com,nextbigfuture.com,nsnews.com,ny1.com,onorient.com,pallacanestrotrieste.it,pcgamesn.com,pharmacyscanner.it,planetware.com,playstationbit.com,politifact.com,portlandmercury.com,prescouter.com,publinews.gt,punchng.com,resett.no,richmond-news.com,russia-insider.com,techzilla.it,thedrinknation.com,thegrayzone.com,theloadout.com,thestandnews.com,thestar.com.my,thestranger.com,thethaiger.com,trancentral.tv,tricitynews.com,tvsvizzera.it,vvox.it,wayfm.com,winedharma.com,worldhistory.org,wpr.org###mc_embed_signup
+onmeda.de##.mc_embed_signup
+!! .newsletter
+01net.it,2gb.com,4investors.de,aawsat.com,addictivetips.com,administradores.com.br,adventures.com,advisoronline.it,aeroporto.net,airliners.de,airqualitynews.com,aldianews.com,alexander-wallasch.de,algemeiner.com,antlionaudio.com,apracticalwedding.com,arab24.com,artnews.com,astrooroscopo.it,atimes.com,atlantadailyworld.com,atlatszo.hu,autoguide.com,automotive-fleet.com,basketinside.com,billboard.com,bintmusic.it,biometricupdate.com,bit.pt,bitmag.com.br,boardgameprices.co.uk,boerse-express.com,bolzano-bozen.it,bostonglobe.com,bostonmagazine.com,brindisisera.it,brooklynbased.com,businessfleet.com,carpicalcionews.it,ccmagazine.es,cdt.ch,cheapies.nz,chicagodefender.com,chiesadimilano.it,cittaceleste.it,clevelandclinic.org,cnn.com,coachmag.co.uk,completesportsnigeria.com,condominioweb.com,corsedimoto.com,crn.com,cronista.com,crypto.news,cuisineetvinsdefrance.com,cyberscoop.com,dazeddigital.com,delamar.de,denofgeek.com,deraktionaer.tv,diepresse.com,digiday.com,digitaleterrestrefacile.it,dirt.com,discoverymedia.com,dissipatio.it,dojacat.com,dreambigtravelfarblog.com,edscoop.com,electronicsweekly.com,elmostrador.cl,enstarz.com,epicurious.com,essentialbaby.com.au,essentialkids.com.au,estrelando.com.br,etonline.com,euractiv.com,euractiv.de,eventfinda.co.nz,evz.ro,ezalenyeg.hu,familyhandyman.com,fandom.com,fantamagazine.com,fashionotes.com,fcinter1908.it,fdr.com.br,fedscoop.com,fleetfinancials.com,fmc.hu,focusardegna.com,forbesafrica.com,forzaroma.info,francetvinfo.fr,gazzamercato.it,giornaledibrescia.it,gizchina.com,gogedizioni.it,golssip.it,goodbye.be,goodfood.com.au,goodnet.org,goodrx.com,gooieneemlander.nl,government-fleet.com,greatbritishchefs.com,greenbot.com,haarlemsdagblad.nl,handdoekentoiletpapier.nl,hannity.com,hcb.net,hdwallpapers.in,healthday.com,hngn.com,hodinkee.com,hollywoodreporter.com,horse-canada.com,hottopics.ht,huffpost.com,i24news.tv,icij.org,ilgiorno.it,ilmilanista.it,ilposticipo.it,ilrestodelcarlino.it,ilsecoloxix.it,ilsussidiario.net,iltascabile.com,imasters.com.br,indypendent.org,infoq.com,investopedia.com,israeltoday.co.il,itasportpress.it,itechpost.com,jewishjournal.com,jfrog.com,jns.org,jornaldenegocios.pt,jornaldocomercio.com,jstor.org,juvenews.eu,key4biz.it,kipparilehti.fi,kleinezeitung.at,kpfa.org,lanazione.it,lanutrition.fr,laopinion.com,laprensafl.com,laraza.com,lctmag.com,legab.it,leidschdagblad.nl,leitgamhof.com,lescienze.it,life.com,linkiesta.it,lintellettualedissidente.it,livability.com,longislandpress.com,lvh.it,madeinbz.info,maplin.co.uk,maritimejobs.com,massivesci.com,mcsweeneys.net,mediagol.it,meteolive.it,michiganchronicle.com,mlb.com,mmajunkie.usatoday.com,mondoudinese.it,moodiedavittreport.com,motorionline.com,multichannel.com,muscleandfitness.com,muslimnews.co.uk,nationalinterest.org,networkworld.com,newbeauty.com,newframe.com,newpittsburghcourier.com,newrepublic.com,newsdeeply.com,nofilmschool.com,noordhollandsdagblad.nl,nooun.net,noticiasrcn.com,numericalcio.it,offresasaisir.fr,oilcity.news,out-law.com,ozbargain.com.au,padovasport.tv,paidcontent.org,paratimujer.us,participaties.nl,passioneinter.com,pbs.org,phonandroid.com,pianetagenoa1893.net,pianetamilan.it,piriform.com,pitchfork.com,pomade.com,prospectmagazine.co.uk,psfk.com,quickanddirtytips.com,quotidiano.net,rainbowplantlife.com,recombu.com,record.pt,redsharknews.com,revealnews.org,rivistacontrasti.it,rollingstone.com,sabado.pt,sangbadpratidin.in,sapo.pt,sassuolocalcionews.it,schoolbusfleet.com,sciencemag.org,screencrush.com,servus.com,sfitalianheritage.org,sheknows.com,silicon.co.uk,silicon.de,silicon.es,slashfilm.com,sourcingjournal.com,speedcafe.com,sportavellino.it,sportico.com,spy.com,startpage.com,statescoop.com,superfly.fm,surfer.com,swz.it,syria.tv,taste.com.au,tasteofhome.com,techbeat.com,tenniscircus.com,thawrah2day.com,the-decoder.com,the-decoder.de,the-star.co.ke,thedrinknation.com,theepochtimes.com,theitaliantimes.it,themeshreport.com,thenevadaindependent.com,theodysseyonline.com,thetruthaboutcars.com,time.com,timeslive.co.za,timesofisrael.com,topdocumentaryfilms.com,toronews.net,torresette.news,toutelanutrition.com,transworld.net,travelweekly.com,trendy.letudiant.fr,truckinginfo.com,truthdig.com,tuasaude.com,tunisna.tv,tuttobolognaweb.it,tvquran.com,twice.com,twitchy.com,undercurrentnews.com,usatoday.com,usopen.org,valori.it,variety.com,verdesmares.com.br,verportugal.net,vibe.com,violanews.com,voetbalnieuws.be,voltaaomundo.pt,voxeurop.eu,voydeviaje.com.ar,vtvgujarati.com,web3wire.news,wgnamerica.com,wikihow.com,wikitribune.com,wizworkwear.com,workscoop.com,worktruckonline.com,wwd.com,ziarulevenimentul.ro##.newsletter
+!! #newsletter
+7digital.com,aawsat.com,acpm.fr,alligator-sunglasses.com,atalanta.it,bloomberg.com,boldsky.com,cjr.org,codefresh.io,dailymaverick.co.za,deploy.equinix.com,download3k.com,drivespark.com,envol-vert.org,filmibeat.com,fundatiacaleavictoriei.ro,gainkit.com,gamblingitalia.com,gardeningaustralia.com.au,gizbot.com,hispantv.com,iol.pt,lacnews24.it,langenscheidt.com,largus.fr,leseclaireuses.com,lintellettualedissidente.it,malwarebytes.org,mattinonline.ch,mayoclinic.com,misya.info,modern-banking.at,modern-banking.de,monitorimmobiliare.it,movies.com,nativeplanet.com,ohmyrockness.com,oneindia.com,opendemocracy.net,pdfcoffee.com,penny-arcade.com,pewforum.org,pewresearch.org,producebluebook.com,publicradio.org,quantamagazine.org,radiospeaker.it,rivistastudio.com,salemnews.net,scottishrugby.org,silhouettedonna.it,soldioggi.it,sscnapoli.it,styleite.com,termometropolitico.com,termometropolitico.it,terranuova.it,thetruthaboutcars.com,thewalrus.ca,valgardena.it,vidaextra.com,wdcb.org###newsletter
+!! .newsletter-block
+gaytimes.co.uk,momentarecovery.com,slate.fr,starlocalmedia.com,thedial.world##.newsletter-block
+!! .newsletter-form
+aeiou.pt,appfigures.com,businesstimes.com.sg,challenges.fr,cined.com,cnnturk.com,dnevnik.bg,eff.org,foxnews.com,frandroid.com,infostart.hu,news247.gr,pitcherlist.com,securityaffairs.com,superdeluxeedition.com,usmagazine.com,visualstudiomagazine.com,wayfairertravel.com,wsbtv.com##.newsletter-form
+!! .subscribe
+404media.co,a-z-animals.com,al-shabaka.org,alhurra.com,allocine.fr,android.gs,artscanvas.org,attn.com,bamargera.com,blackagendareport.com,boardingarea.com,briefly.co.za,broadwayworld.com,cheeserank.com,chicagomag.com,cityandstateny.com,classicalite.com,coincodex.com,coinspeaker.com,cointelegraph.com,cybernews.com,dailyfeed.co.uk,damndelicious.net,defense.gov,defenseone.com,divascancook.com,downshiftology.com,ebayinkblog.com,electronicsweekly.com,foxnews.com,freshersworld.com,fromthegrapevine.com,gadgets360.com,gellerreport.com,gimmesomeoven.com,gotquestions.org,govexec.com,greece-is.com,greenbot.com,hpcwire.com,ilglobo.com.au,inc-aus.com,indaily.com.au,irishpost.com,jewishinsider.com,lafiamma.com.au,livewellbakeoften.com,messynessychic.com,miaminewtimes.com,mouser.com,mpr.org,mumbrella.com.au,mygaming.co.za,naij.com,naija.ng,nationalpost.com,ndtv.com,news.usc.edu,newsclick.in,newsmaxtv.com,newsroom.co.nz,newsthump.com,nextgov.com,notquitenigella.com,outerplaces.com,pando.com,pandodaily.com,parentherald.com,people.com,player.one,politicsweb.co.za,poundsterlinglive.com,professionearchitetto.it,rabble.ca,rbth.com,recipetineats.com,route-fifty.com,searchengineland.com,selenagomez.com,seroundtable.com,shopify.engineering,skiptomylou.org,smartcompany.com.au,space.com,spacenews.com,spoonuniversity.com,statescoop.com,stream.org,svpino.com,techeye.net,ted.com,teenchatdecoder.com,theaircurrent.com,thefinancialbrand.com,therichest.org,today.ucsd.edu,tourismupdate.co.za,tuko.co.ke,tv.com,twice.com,up.com,vagabomb.com,viewfromthewing.com,wackymania.com,wccftech.com,windows7news.com##.subscribe
+!! .subscribe-block
+greenbiz.com,iranwire.com,techtimes.com,vcpost.com##.subscribe-block
+! Advanced element hiding rules for Adblock Plus
+androidauthority.com#?#div[class^="-_"] > form:-abp-contains(newsletters)
+cultofmac.com#?#.section > .wrapper:-abp-contains(Newsletters)
+indiewire.com#?#.l-section > .u-border-dark-blue:-abp-contains(Newsletters)
+! Generichide
+news.artnet.com###ouibounce-modal
+calgaryherald.com,edmontonjournal.com,montrealgazette.com,ottawacitizen.com,thestarphoenix.com###pn-newsletter-signup
+merriam-webster.com##.footer-subscribe-block
+soccity.net##.newsletter-block
+itechpost.com##.nw_cont
+news.artnet.com##.theme-newsletter-signup
+! uBO-specific fixes
+
+
+! *** easylist:fanboy-addon/fanboy_newsletter_specific_uBO.txt ***
+protocol.com###form_out
+theconversation.com##.MuiDialog-root
+socialitelife.com##.mfp-ready
+audioholics.com,protocol.com,theconversation.com##body:style(overflow: auto !important;)
+otisoatmilk.co.nz,socialitelife.com##html:style(overflow:auto !important)
+! #shopify-section-newsletter-popup
+chillamo.com,zerobreeze.com,otisoatmilk.co.nz###shopify-section-newsletter-popup
+chillamo.com,zerobreeze.com,otisoatmilk.co.nz##html:style(overflow:auto !important)
+! nationalgeographic.com
+nationalgeographic.com##+js(aeld, scroll)
+nationalgeographic.com##.EmailStickyFooter__Modal
+nationalgeographic.com##body:style(overflow: auto !important; position: initial !important;)
+! Newspaper newsletter
+npr.org,vice.com,forward.com,nationalobserver.com,washingtontimes.com,monroenews.com,poconorecord.com##.tp-backdrop
+npr.org,vice.com,forward.com,nationalobserver.com,washingtontimes.com,monroenews.com,poconorecord.com##.tp-modal
+npr.org,vice.com,forward.com,nationalobserver.com,washingtontimes.com,monroenews.com,poconorecord.com##body:style(height: auto !important; overflow: auto !important)
+! 404media.co
+404media.co##.outpost-cta
+404media.co##body,html:style(overflow: auto !important; position: initial !important;)
+! hollywoodunlocked.com
+hollywoodunlocked.com##.featherlight
+hollywoodunlocked.com##body,html:style(overflow: auto !important; position: initial !important;)
+! americastestkitchen.com
+americastestkitchen.com##.tp-container-inner
+americastestkitchen.com###piano-modal-backdrop
+americastestkitchen.com##body,html:style(overflow: auto !important; position: initial !important;)
+! artribune.com
+artribune.com##+js(set-cookie, m6e-newsletter, 1)
+! duluthtrading.com
+duluthtrading.com##+js(set-local-storage-item, emailLightBox, true)
+! globoshoes.com
+globoshoes.com##.main-overlay-container
+globoshoes.com##body:style(overflow: auto !important; position: initial !important;)
+! thefp.com
+thefp.com###myEmailModal
+thefp.com##body:style(overflow: scroll !important)
+! dailyvoice.com
+dailyvoice.com##.b-modal.b-dialog
+dailyvoice.com##body:style(overflow: auto !important; position: initial !important;)
+! cityam.com
+cityam.com##.subscription-modal
+cityam.com##+js(rc, js-page-scroll-lock, body, stay)
+! blooloop.com
+blooloop.com##.c-popup
+blooloop.com##body,html:style(overflow: auto !important; position: i nitial !important;)
+! loyalfordogs.com
+loyalfordogs.com##+js(set-local-storage-item, join-popup-closed, true)
+! fine-day.com
+fine-day.com##.chakra-portal
+fine-day.com##html,body:style(overflow: auto !important; position: initial !important;)
+! spotlightpa.org
+spotlightpa.org##.inset-0.fixed
+spotlightpa.org##body,html:style(overflow: auto !important; position: initial !important;)
+! expatexplore.com
+expatexplore.com,scmagazine.com,vadimkravcenko.com##.swal2-container
+expatexplore.com,scmagazine.com,vadimkravcenko.com##html,body:style(overflow: auto !important; position: initial !important;)
+! bankbazaar.com
+bankbazaar.com##.oneTapLoginModal
+bankbazaar.com##.modal-backdrop
+bankbazaar.com##.dimmer
+bankbazaar.com##body:style(overflow: auto !important; position: initial !important;)
+! dallasnews.com
+dallasnews.com##.dmnc_features-cta-newsletter-cta-newsletter-module__eQOmx
+dallasnews.com##.dmn-newsletter-overlay
+dallasnews.com###courier-body-wrapper:style(overflow: auto !important; position: initial !important;)
+! .mntl-dialog--campaign
+investopedia.com##.mntl-dialog--campaign
+investopedia.com##html,body:style(overflow: auto !important; position: initial !important;)
+! all3dp.com
+all3dp.com##.modal-container
+all3dp.com##+js(rc, root-modal-container-open, body, stay)
+! mashable.com
+mashable.com##.bx-impress
+mashable.com##body:style(overflow: auto !important; position: initial !important;)
+! sfstandard.com
+sfstandard.com##.items-start.fixed
+sfstandard.com##body:style(height: auto !important; overflow: auto !important)
+! .mntl-dialog--campaign
+simplyrecipes.com,shape.com,verywellhealth.com,southernliving.com,thespruceeats.com,seriouseats.com,allrecipes.com,tripsavvy.com,travelandleisure.com,verywellmind.com,foodandwine.com##.mntl-dialog--campaign
+simplyrecipes.com,shape.com,verywellhealth.com,southernliving.com,thespruceeats.com,seriouseats.com,allrecipes.com,tripsavvy.com,travelandleisure.com,verywellmind.com,foodandwine.com##html,body:style(overflow: auto !important; position: initial !important;)
+! .brazen-modal
+matadornetwork.com##.brazen-modal
+matadornetwork.com##body:style(height: auto !important; overflow: auto !important)
+! milwaukeetool.com
+milwaukeetool.com###modal-darkener
+milwaukeetool.com##.lead-gen-pop-up
+milwaukeetool.com##body,html:style(overflow: auto !important; position: initial !important;)
+! sainsburysmagazine.co.uk
+sainsburysmagazine.co.uk##.subscription-popup
+sainsburysmagazine.co.uk##body:style(overflow: auto !important; position: initial !important;)
+! cityandstateny.com
+cityandstateny.com##.conversion-module
+cityandstateny.com##body:style(overflow: auto !important;)
+cityandstateny.com##+js(rc, interstitial, aside, stay)
+! hackster.io
+hackster.io##.styles__dialog__1KnWX
+hackster.io##body:style(height: auto !important; overflow: auto !important)
+! swissinfo.ch
+swissinfo.ch###newsletter-flyin
+swissinfo.ch##body,html:style(overflow: auto !important; position: initial !important;)
+! oneesports.gg
+oneesports.gg###onePassportOverlay
+oneesports.gg###onePassportModal
+oneesports.gg##html,body:style(overflow: auto !important; position: initial !important;)
+! shoppingsouthparkmall.com
+shoppingsouthparkmall.com##.gooble-omodal
+shoppingsouthparkmall.com##body:style(height: auto !important; overflow: auto !important)
+! ello.co
+ello.co##.asDecapitated
+ello.co##body,html:style(overflow: auto !important; position: initial !important;)
+! cube-magazin.de
+cube-magazin.de##.cs-newsletter-registration-overlay
+cube-magazin.de##.js--overlay
+cube-magazin.de##body,html:style(overflow: auto !important; position: initial !important;)
+! frontofficesports.com
+frontofficesports.com##.newsletter-popup
+frontofficesports.com##.body-overlay
+frontofficesports.com##html,body:style(overflow: auto !important; position: initial !important;)
+! vallejosun.com
+vallejosun.com##div[id^="popup-smart-root-"]
+vallejosun.com##body,html:style(overflow: auto !important; position: initial !important;)
+! forbestravelguide.com
+forbestravelguide.com###cboxOverlay
+forbestravelguide.com###colorbox
+forbestravelguide.com##html,body:style(overflow: auto !important; position: initial !important;)
+! .boxzilla-overlay
+thebaffler.com##.boxzilla-overlay
+thebaffler.com##.boxzilla-container
+thebaffler.com##html,body:style(overflow: auto !important; position: initial !important;)
+! travelcaffeine.com
+travelcaffeine.com##.featherlight
+travelcaffeine.com##body,html:style(overflow: auto !important; position: initial !important;)
+! rebelnews.com
+rebelnews.com##html:style(overflow: auto !important)
+rebelnews.com##.remodal-wrapper
+rebelnews.com##.remodal-overlay
+! freshbooks.com
+freshbooks.com##.trackingSection-modal
+freshbooks.com##.modal-backdrop
+freshbooks.com##body,html:style(overflow: auto !important; position: initial !important;)
+! verybestbaking.com
+verybestbaking.com##.gdn-popup-modal
+verybestbaking.com##html,body:style(overflow: auto !important; position: initial !important;)
+! contiki.com
+contiki.com##.lcw-modal__parent
+contiki.com##body,html:style(overflow: auto !important; position: initial !important;)
+! foreignaffairs.com
+foreignaffairs.com##.newsletter-backdrop
+foreignaffairs.com##body,html:style(overflow: auto !important; position: initial !important;)
+! newrepublic.com
+newrepublic.com##.blink-sdk-widget-container
+newrepublic.com##html:style(overflow: auto !important)
+! publish0x.com (newsletter)
+publish0x.com###registerPopup
+publish0x.com##body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! brighteon.com (newsletter)
+brighteon.com##.overlay
+brighteon.com##body,html:style(overflow: auto !important; position: initial !important;)
+! elimento.com
+elimento.com##.popup-modal-mask
+elimento.com##.has-newsletter
+elimento.com##body,html:style(overflow: auto !important; position: initial !important;)
+! tsunagujapan.com
+tsunagujapan.com##.js-modal_wrap
+tsunagujapan.com##html,body:style(overflow: auto !important; position: initial !important;)
+! thenation.com
+thenation.com##.tp-modal-overscroll-prevented
+thenation.com##.tp-modal
+thenation.com##.tp-backdrop
+thenation.com##body,html:style(overflow: auto !important;)
+! carsalesbase.com
+bitcoinke.io,carsalesbase.com##.modal-wrap
+bitcoinke.io,carsalesbase.com##body,html:style(overflow: auto !important; position: initial !important;)
+! ftm.eu (newsletter)
+ftm.eu##.blockingOverlay
+ftm.eu##html:style(overflow: auto !important)
+! .subscribe/.conversion-module
+gcn.com,washingtontechnology.com,fcw.com##.subscribe
+gcn.com,washingtontechnology.com,fcw.com##.conversion-module
+gcn.com,washingtontechnology.com,fcw.com##html,body:style(overflow: auto !important; position: initial !important;)
+! .modal/.modal-backdrop
+bibleportal.com,uinterview.com,moneycontrol.com,fermatslibrary.com,worlddogfinder.com,insauga.com,moroccoworldnews.com,thecradle.co,vegnews.com,bandt.com.au,pbsamerica.co.uk,wateronline.com,boredpanda.com,artnet.com,bongino.com,lensculture.com,patch.com,projectcbd.org,media4growth.com,nycgo.com,thepostmillennial.com,zorbabooks.com,bellhelmets.com,humanevents.com##.modal
+bibleportal.com,uinterview.com,moneycontrol.com,fermatslibrary.com,worlddogfinder.com,insauga.com,moroccoworldnews.com,thecradle.co,vegnews.com,bandt.com.au,pbsamerica.co.uk,wateronline.com,boredpanda.com,artnet.com,bongino.com,lensculture.com,patch.com,projectcbd.org,media4growth.com,nycgo.com,thepostmillennial.com,zorbabooks.com,bellhelmets.com,humanevents.com##.modal-backdrop
+bibleportal.com,uinterview.com,moneycontrol.com,fermatslibrary.com,worlddogfinder.com,insauga.com,moroccoworldnews.com,thecradle.co,vegnews.com,bandt.com.au,pbsamerica.co.uk,wateronline.com,boredpanda.com,artnet.com,bongino.com,lensculture.com,patch.com,projectcbd.org,media4growth.com,nycgo.com,thepostmillennial.com,zorbabooks.com,bellhelmets.com,humanevents.com##body:style(overflow: auto !important;)
+! .avada-footer-scripts
+envol-vert.org,latina.com##.avada-footer-scripts
+envol-vert.org,latina.com##body,html:style(overflow: auto !important; position: initial !important;)
+envol-vert.org##.cp-modal-popup-container
+! geopoliticalmonitor.com
+geopoliticalmonitor.com###maillist-modal
+geopoliticalmonitor.com##.modal-backdrop
+geopoliticalmonitor.com##body:style(height: auto !important; overflow: auto !important)
+! lonelyplanet.com
+lonelyplanet.com##.jsx-3f4fe83626c3275
+lonelyplanet.com##html,body:style(overflow: auto !important; position: initial !important;)
+! glassblocktint.com
+glassblocktint.com##.cp-modal-popup-container
+glassblocktint.com##body:style(height: auto !important; overflow: auto !important)
+! forsvaretsforum.no
+forsvaretsforum.no##.mm-popup-wrapper
+forsvaretsforum.no##body:style(height: auto !important; overflow: auto !important)
+! curiocity.com (newsletter)
+curiocity.com##.fancybox-is-open
+curiocity.com##body:style(overflow: auto !important;)
+! thethaiger.com (newsletter overlay, fix scrollbar)
+thethaiger.com##html:style(overflow: auto !important;)
+! ba-bamail.com (newsletter overlay, fix scrollbar)
+ba-bamail.com##body:style(overflow: auto !important;)
+! petri.com
+petri.com###bww-advertising-popup-overlay
+petri.com##body,html:style(overflow: auto !important; position: initial !important;)
+! babylonbee.com (newsletter overlay)
+babylonbee.com##.modal-backdrop
+babylonbee.com##body:style(overflow: auto !important;)
+! informatykzakladowy.pl (newsletter overlay)
+informatykzakladowy.pl##body:style(overflow: auto !important;)
+! prowritingaid.com (newsletter overlay)
+prowritingaid.com##.exit-popup
+prowritingaid.com##body:style(overflow: auto !important;)
+! kitchentime (newsletter overlay)
+kitchentime.com,kitchentime.de,kitchentime.dk,kitchentime.fi,kitchentime.no,kitchentime.se##.popup-overlay
+kitchentime.com,kitchentime.de,kitchentime.dk,kitchentime.fi,kitchentime.no,kitchentime.se##body,html:style(height: auto !important; overflow: auto !important)
+! axios.com
+axios.com##.Modal_ctaContainer__kHYHl
+axios.com##body,html:style(overflow: auto !important; position: initial !important;)
+! megacatstudios.com (newsletter overlay)
+dailynewsegypt.com,hdwalle.com,megacatstudios.com,scholarlykitchen.sspnet.org##.mfp-bg
+dailynewsegypt.com,hdwalle.com,megacatstudios.com,scholarlykitchen.sspnet.org##.mfp-wrap
+dailynewsegypt.com,hdwalle.com,megacatstudios.com,scholarlykitchen.sspnet.org##html:style(overflow:auto !important)
+! syfy.com (newsletter overlay)
+syfy.com##.blog-post__gated__wrapper
+syfy.com##body,html:style(overflow: auto !important; position: initial !important;)
+! nieuwsblad.be (newsletter overlay)
+nieuwsblad.be##.cj-root
+nieuwsblad.be##body:style(overflow: auto !important;)
+! .pum
+hypebot.com,fatgirlskinny.net,moneymagpie.com,verdadeiroolhar.pt,thecanary.co##.pum
+hypebot.com,fatgirlskinny.net,moneymagpie.com,verdadeiroolhar.pt,thecanary.co##html:style(overflow:auto !important)
+! washingtonpost.com
+washingtonpost.com###wall-bottom-drawer
+washingtonpost.com##.regwall-overlay
+washingtonpost.com##html:style(height: auto !important; overflow: auto !important)
+! rakentaja.fi
+rakentaja.fi###ctl00_verkkolehdenmainos
+rakentaja.fi##.in.fade.modal-backdrop
+rakentaja.fi##body:style(overflow: auto !important)
+! theepochtimes.com (newsletter)
+theepochtimes.com##.showTopNav
+theepochtimes.com##body,html:style(overflow: auto !important; position: initial !important;)
+! milenio.com
+milenio.com##html:style(overflow: auto !important; position: initial !important;)
+! staradvertiser.com (newsletter popup)
+staradvertiser.com##.breakingPopUp
+staradvertiser.com##.modal-backdrop
+staradvertiser.com##body,html:style(overflow: auto !important; position: initial !important;)
+! numero.com (newsletter popup)
+numero.com##.type-newsletter_subscription
+numero.com##body,html:style(overflow: auto !important; position: initial !important;)
+! theblock.co (newsletter overlay)
+theblock.co##.modal-container
+theblock.co##body:style(overflow: auto !important;)
+! cryptobriefing.com (newsletter scroll fix)
+cryptobriefing.com##body,html:style(overflow: auto !important; position: initial !important;)
+! https://www.microsoft.com/en-gb/d/surface-laptop-4/946627fb12t1?activetab=pivot:overviewtab (popup)
+! https://github.com/easylist/easylist/pull/12673 (don't remove www.)
+www.microsoft.com###modalsRenderedAfterPageLoad
+www.microsoft.com##.modal-backdrop
+www.microsoft.com##body,html:style(overflow: auto !important; position: initial !important;)
+! readtangle.com (newsletter intro)
+readtangle.com##.intro
+readtangle.com##body,html:style(overflow: auto !important; position: initial !important;)
+! fxstreet.com (scroll fix)
+fxstreet.com##body,html:style(overflow: auto !important; position: initial !important;)
+! .g1-newsletter
+mediadump.com##.g1-newsletter
+mediadump.com##body,html:style(overflow: auto !important; position: initial !important;)
+! .g1-popup-newsletter
+impulkits.com,bygonely.com,musclecarsandtrucks.com,thepetslife.online##.g1-popup-newsletter
+impulkits.com,bygonely.com,musclecarsandtrucks.com,thepetslife.online##body,html:style(overflow: auto !important; position: initial !important;)
+! decrypt.co (newsletter)
+decrypt.co##.left-0.top-0.fixed
+decrypt.co##body:style(overflow: auto !important; position: initial !important;)
+! yesmagazine.org (newsletter)
+yesmagazine.org##.fajardo-campaign
+yesmagazine.org##body:style(overflow: auto !important; position: initial !important;)
+! thebfd.co.nz (newsletter)
+thebfd.co.nz##body:style(overflow: auto !important; position: initial !important;)
+! tietoevry.com
+tietoevry.com##body:style(overflow: auto !important)
+! beckershospitalreview.com
+beckershospitalreview.com##.becker_doubleclick
+beckershospitalreview.com##body:style(overflow: auto !important)
+! .fancybox-overlay
+therecord.com,parent.com##.fancybox-overlay
+therecord.com,parent.com##body,html:style(overflow: auto !important; position: initial !important;)
+! .fancybox-container
+scetv.org,berkeleyearth.org##.fancybox-container
+scetv.org,berkeleyearth.org##body:style(overflow: auto !important; position: initial !important;)
+! posylka.de
+posylka.de##.modal-custom--overlay
+posylka.de##html,body:style(overflow: auto !important; position: initial !important;)
+! upworthy.com
+upworthy.com##.mailchimp-popup-overlay-upworthy
+upworthy.com##.mailchimp-popup-upworthy
+upworthy.com##body:style(overflow: auto !important; position: initial !important;)
+! sportskeeda.com
+sportskeeda.com##.newsletter-ui
+sportskeeda.com##body:style(overflow: auto !important; position: initial !important;)
+! .reveal-overlay
+brandingmag.com,straightarrownews.com,staygenerator.com##.reveal-overlay
+brandingmag.com,straightarrownews.com,staygenerator.com##body,html:style(overflow: auto !important; position: initial !important;)
+! www.dgb.de
+dgb.de##.js-newsletter-popup-inner
+dgb.de##.js-newsletter-popup
+dgb.de##+js(rc, js-show-newsletter-popup, , stay)
+! nimsdai.com (newsletter overlay)
+nimsdai.com##.newsletter-popup
+nimsdai.com##body,html:style(overflow: auto !important; position: initial !important;)
+! taloon.com (newsletter overlay)
+taloon.com##.modals-wrapper
+taloon.com##body._has-modal:style(overflow: auto !important)
+! cjr.org
+cjr.org###interContainer
+cjr.org###interVeil
+cjr.org##html:style(overflow: auto !important; position: initial !important;)
+! coinbase.com
+coinbase.com##.ReactModal__Overlay
+coinbase.com##body:style(overflow: auto !important; position: initial !important;)
+! cnn.com
+cnn.com##.bx-impress
+cnn.com##html:style(overflow: auto !important; position: initial !important;)
+! zyro.com
+zyro.com##.ebook-before-leave-modal
+zyro.com##body:style(overflow: auto !important; position: initial !important;)
+! worldcrunch.com
+worldcrunch.com##div[id*="snewsletter-popup-MailChimp_"]
+worldcrunch.com##*:style(filter: none !important)
+worldcrunch.com##body,html:style(height: auto !important; overflow: auto !important)
+! bonappetit.com
+bonappetit.com##.journey-unit__container
+bonappetit.com##+js(cookie-remover.js, pay_ent_pass)
+bonappetit.com##+js(cookie-remover.js, pay_ent_msmp)
+! toysrus.ca/babiesrus.ca
+babiesrus.ca,toysrus.ca##+js(set-cookie, isNewsletterPopupShown, false, , reload, 1)
+! clutchpoints.com (newsletter popup)
+clutchpoints.com##+js(set-local-storage-item, allSIBWidgetSeen, true)
+! semafor.com
+semafor.com##+js(set-session-storage-item, floating-sign-up-dismissed, true)
+! arcade1up.com
+arcade1up.com##.tingle-modal
+arcade1up.com##body:style(overflow: scroll !important; position: unset !important)
+! esquire.com
+delish.com,esquire.com##journey-modal-newsletter
+delish.com,esquire.com##body:style(overflow: auto !important; position: initial !important;)
+! treblezine.com
+treblezine.com##.newsletter-popup
+treblezine.com###newsletter-popup
+treblezine.com##body,html:style(height: auto !important; overflow: auto !important)
+! pv-magazine-usa.com
+pv-magazine-usa.com###newsletter-modal
+pv-magazine-usa.com##body,html:style(height: auto !important; overflow: auto !important)
+! substack.com
+construction-physics.com,sambowman.co,asiasentinel.com,understandingai.org,hamiltonnolan.com,aporiamagazine.com,garbageday.email,jacobwolf.report,semianalysis.com,dossier.today,engineeringleadership.xyz,piratewires.com,slowboring.com,flowstate.fm,popular.info,newsletter.banklesshq.com,antiracismnewsletter.com,racket.news,eugyppius.com,dkb.blog,duffelblog.com,theankler.com,fullstackeconomics.com,substack.com,platformer.news##.intro-popup
+construction-physics.com,sambowman.co,asiasentinel.com,understandingai.org,hamiltonnolan.com,aporiamagazine.com,garbageday.email,jacobwolf.report,semianalysis.com,dossier.today,engineeringleadership.xyz,piratewires.com,slowboring.com,flowstate.fm,popular.info,newsletter.banklesshq.com,antiracismnewsletter.com,racket.news,eugyppius.com,dkb.blog,duffelblog.com,theankler.com,fullstackeconomics.com,substack.com,platformer.news##+js(remove-class, show-intro-popup, , stay)
+! apotekfordeg.no
+apotekfordeg.no##.newsletter-modal
+apotekfordeg.no##.modal-backdrop
+apotekfordeg.no##body:style(overflow: auto !important; position: initial !important;)
+! thebulwark.com
+thebulwark.com##.lity-opened
+thebulwark.com##body:style(overflow: auto !important; position: initial !important;)
+! spring.org.uk
+spring.org.uk##.hustle-popup
+spring.org.uk##body,html:style(overflow: auto !important; position: initial !important;)
+! homehacks.co
+relieved.co,sweetandsavory.co,animalchannel.co,seeitlive.co,parentingisnteasy.co,spotlightstories.co,homehacks.co###email-modal-overlay
+relieved.co,sweetandsavory.co,animalchannel.co,seeitlive.co,parentingisnteasy.co,spotlightstories.co,homehacks.co###email-modal-container
+relieved.co,sweetandsavory.co,animalchannel.co,seeitlive.co,parentingisnteasy.co,spotlightstories.co,homehacks.co##body:style(overflow: auto !important; position: initial !important;)
+! lilysilk.com
+lilysilk.com##.subscribe-maskLayer
+lilysilk.com##.subscribe-popup
+lilysilk.com##body:style(overflow: auto !important; position: initial !important;)
+! dgmlive.com
+dgmlive.com##.modal
+dgmlive.com##.modal-backdrop
+dgmlive.com##body:style(overflow: auto !important; position: initial !important;)
+! reclaimthenet.org
+pcipolicyportal.com,reclaimthenet.org##.elementor-popup-modal
+pcipolicyportal.com,reclaimthenet.org##body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! thetruthaboutcars.com
+thetruthaboutcars.com###cms-popup
+thetruthaboutcars.com##body:style(position: static !important; overflow: auto !important; width: auto !important;)
+! mofi.com
+mofi.com###shopify-section-popup
+mofi.com##body,html:style(position: static !important; overflow: auto !important; width: auto !important;)
+! jumia
+jumia.ci,jumia.co.ke,jumia.com.eg,jumia.com.gh,jumia.com.ng,jumia.com.tn,jumia.dz,jumia.ma,jumia.sn,jumia.ug##.popup
+jumia.ci,jumia.co.ke,jumia.com.eg,jumia.com.gh,jumia.com.ng,jumia.com.tn,jumia.dz,jumia.ma,jumia.sn,jumia.ug##body,html:style(position: static !important; overflow: auto !important; width: auto !important;)
+! atlasobscura.com
+atlasobscura.com##.modal-backdrop
+atlasobscura.com##.modal-sm-fullscreen
+atlasobscura.com##body:style(overflow: auto !important; position: initial !important;)
+! #newsLetterSignup
+abeka.com###newsLetterSignup
+abeka.com##.modal-backdrop
+abeka.com##body,html:style(overflow: auto !important; position: initial !important;)
+! psychcentral.com
+psychcentral.com###modal-host
+psychcentral.com##body,html:style(overflow: auto !important; position: initial !important;)
+! heraldlive.co.za,dispatchlive.co.za
+heraldlive.co.za,dispatchlive.co.za###register-popup-backdrop
+heraldlive.co.za,dispatchlive.co.za##.register-modal-popup-wrapper
+heraldlive.co.za,dispatchlive.co.za##body,html:style(overflow: auto !important; position: initial !important;)
+! recyclingproductnews.com
+recyclingproductnews.com##[style*="opacity:"]
+recyclingproductnews.com##.card-newsletter-modal
+recyclingproductnews.com##body,html:style(overflow: auto !important; position: initial !important;)
+! #newsletterPopupOverlay
+statista.com###newsletterPopupOverlay
+statista.com##body,html:style(overflow: auto !important; position: initial !important;)
+! ##.email-subscription-modal
+logicool.co.jp##.email-subscription-modal
+logicool.co.jp##body[style="overflow: hidden;"]:style(overflow: auto !important;)
+! https://launer.com/c/women
+launer.com##.modal:has([style^='background-image: url("/assets/newsletter-'])
+launer.com##html:style(overflow: auto !important)
+
+! *** easylist:fanboy-addon/fanboy_newsletter_shopping_specific_uBO.txt ***
+trutone.ca,frontrunners.ca,fruugo.co.uk,lull.com,otterbox.com,pulseuniform.com,saksfifthavenue.com,shop.pbs.org,szucstermekek.com,zumub.com##.modal
+trutone.ca,frontrunners.ca,fruugo.co.uk,lull.com,otterbox.com,pulseuniform.com,saksfifthavenue.com,shop.pbs.org,szucstermekek.com,zumub.com##.modal-backdrop
+trutone.ca,frontrunners.ca,fruugo.co.uk,lull.com,otterbox.com,pulseuniform.com,saksfifthavenue.com,shop.pbs.org,szucstermekek.com,zumub.com##body:style(overflow: auto !important; position: initial !important;)
+! tweeters.ca
+shop.libbey.com,italianluxurygroup.com.au,tiedex.co.uk,tweeters.ca##.shopify-section-group-popup-group
+shop.libbey.com,italianluxurygroup.com.au,tiedex.co.uk,tweeters.ca##body:style(overflow: auto !important; position: initial !important;)
+! sweetteacaviar.com
+sweetteacaviar.com###swell-overlay
+sweetteacaviar.com###swell-popup
+sweetteacaviar.com##[id^="smsbump-form-"]
+sweetteacaviar.com##body,html:style(overflow: auto !important; position: initial !important;)
+! urbanoutfitters.com
+urbanoutfitters.com##+js(set-local-storage-item, modalViewed, 1)
+! dollartree.com
+dollartree.com###email-signup-template
+dollartree.com##.modal-backdrop
+dollartree.com##body,html:style(overflow: auto !important; position: initial !important;)
+! yvonnebennetti.com
+yvonnebennetti.com##+js(set-cookie, MCPopupClosed, yes)
+! foliosociety.com
+foliosociety.com##.modals-overlay
+foliosociety.com##.popup-newsletter
+foliosociety.com##body:style(overflow: auto !important; position: initial !important;)
+! drinkspy.co.nz
+drinkspy.co.nz##.modal-backdrop
+drinkspy.co.nz##body:style(overflow: auto !important; position: initial !important;)
+! mightyape.co.nz
+mightyape.co.nz##.newsletter-nag-modal
+mightyape.co.nz##.modal-backdrop
+mightyape.co.nz##+js(rc, modal-open, body, stay)
+! paulaschoice.com
+paulaschoice.com##+js(set-local-storage-item, signUpModalClosed_slot-paulaschoice_us-global-signUpModal-sfmcModal, 1)
+! mountainwarehouse.com
+mountainwarehouse.com###sledgehammer
+mountainwarehouse.com##body,html:style(overflow: auto !important; position: initial !important;)
+! littleburgundyshoes.com
+littleburgundyshoes.com##.modal-email-signup
+littleburgundyshoes.com##.modal-backdrop
+littleburgundyshoes.com##body:style(overflow: auto !important; position: initial !important;)
+! journeys.ca
+journeys.ca###modalSignup
+journeys.ca##.modal-backdrop
+journeys.ca##body:style(overflow: auto !important; position: initial !important;)
+! tradedepot.co.nz
+tradedepot.co.nz##.modal
+tradedepot.co.nz##.modal-background
+tradedepot.co.nz##body:style(overflow: auto !important; position: initial !important;)
+! .dy-modal-container
+harborfreight.com##.dy-modal-container
+harborfreight.com##body:style(overflow: auto !important; position: initial !important;)
+! .reveal-modal-bg
+generalpants.com##.reveal-modal
+generalpants.com##.reveal-modal-bg
+generalpants.com##body:style(overflow: auto !important; position: initial !important;)
+! dsw.com
+dsw.com##.overlay
+dsw.com##body,html:style(overflow: auto !important; position: initial !important;)
+! bedbathandbeyond.com
+bedbathandbeyond.com###page_triggers
+bedbathandbeyond.com##body,html:style(overflow: auto !important; position: initial !important;)
+! .reveal-overlay
+networldsports.ca,summitracing.com##.reveal-overlay
+networldsports.ca,summitracing.com##body,html:style(overflow: auto !important; position: initial !important;)
+! racketsandrunners.ca
+racketsandrunners.ca##.popUp-overlay
+racketsandrunners.ca##body,html:style(overflow: auto !important; position: initial !important;)
+! saucerco.com
+saucerco.com##+js(set-cookie, newsletter-newsletter-popup, true)
+! backcountry.com
+backcountry.com##.chakra-modal__content-container
+backcountry.com##.chakra-portal
+backcountry.com##body,html:style(overflow: auto !important; position: initial !important;)
+! modesens.com
+modesens.com###signmd___BV_modal_outer_
+modesens.com##body,html:style(overflow: auto !important; position: initial !important;)
+! allbirds.
+allbirds.co.nz,allbirds.com,allbirds.com.au###backdrop-container
+allbirds.co.nz,allbirds.com,allbirds.com.au##.EmailSignupModal__portal
+allbirds.co.nz,allbirds.com,allbirds.com.au##body,html:style(overflow: auto !important; position: initial !important;)
+! pbteen.com
+pbteen.com##.join_email_capture_component
+pbteen.com##body:style(overflow: auto !important; position: initial !important;)
+! #shopify-section-popups
+atelierskn.com###shopify-section-popups
+atelierskn.com##body,html:style(overflow: auto !important; position: initial !important;)
+! ipowerqueen.com
+aihome.com.my,ipowerqueen.com##.mfp-ready
+aihome.com.my,ipowerqueen.com##body,html:style(overflow: auto !important; position: initial !important;)
+! .modal/.modal-overlay
+revolve.com,fwrd.com##.modal
+revolve.com,fwrd.com##.modal-overlay
+revolve.com,fwrd.com##body,html:style(height: auto !important; overflow: auto !important)
+! rktbns.de
+rktbns.de##.arcticmodal-container
+rktbns.de##.arcticmodal-overlay
+rktbns.de##body,html:style(overflow: auto !important; position: initial !important;)
+! torpedo7.co.nz
+torpedo7.co.nz##.open-js-modal-full
+torpedo7.co.nz##body,html:style(overflow: auto !important; position: initial !important;)
+! liquidationgta.com
+liquidationgta.com##.mfp-bg
+liquidationgta.com##.mfp-wrap
+liquidationgta.com##body,html:style(overflow: auto !important; position: initial !important;)
+! .swal2-container
+vat19.com##.swal2-container
+vat19.com##body,html:style(height: auto !important; overflow: auto !important)
+! #shopify-section-newsletter-popup
+detroitmodular.com,metrocheese.com,bwpsales.com,fitnessav.com,gronkfitnessproducts.com,hockeylion.ca,justcloseoutscanada.ca,kitchenutopia.ca,lakshmistores.com###shopify-section-newsletter-popup
+detroitmodular.com,metrocheese.com,bwpsales.com,fitnessav.com,gronkfitnessproducts.com,hockeylion.ca,justcloseoutscanada.ca,kitchenutopia.ca,lakshmistores.com##body,html:style(height: auto !important; overflow: auto !important)
+! shopify-section-signup-modal
+flovitamins.com###shopify-section-signup-modal
+flovitamins.com##body:style(overflow: auto !important; position: initial !important;)
+! .silk-modal-root
+vitaminworld.com##.silk-modal-root
+vitaminworld.com##body:style(overflow: auto !important; position: initial !important;)
+! razer.com
+www.razer.com##.modal-backdrop
+www.razer.com##.modal-newsletter
+www.razer.com##body:style(overflow: auto !important; position: initial !important;)
+! ballantynes.co.nz
+ballantynes.co.nz##.modal-backdrop
+ballantynes.co.nz##.modal-scrollable
+ballantynes.co.nz##body,html:style(overflow: auto !important; position: initial !important;)
+! pushmycart.com
+pushmycart.com##.popup
+pushmycart.com##body,html:style(overflow: auto !important; position: initial !important;)
+! .modal-wrapper
+publiclands.com##.modal-wrapper
+publiclands.com##body:style(overflow: auto !important; position: initial !important;)
+! leevalley.com
+leevalley.com###newsletter-signup-modal
+leevalley.com##.lv-modal-blocker
+leevalley.com##body:style(overflow: auto !important; position: initial !important;)
+! massivetoyblowout.ca
+massivetoyblowout.ca##.wcb-md-modal
+massivetoyblowout.ca##.wcb-md-overlay
+massivetoyblowout.ca##body:style(overflow: auto !important; position: initial !important;)
+! sears.com
+sears.com##+js(set-session-storage-item, banner_session, true)
+! sharperimage.com
+sharperimage.com##+js(set-cookie, mystery_popup, true)
+! sweetwater.com
+sweetwater.com##+js(set-cookie, sws-gwpop, 1)
+! glasses.com
+glasses.com###newsletter-modal
+glasses.com##.form-container
+glasses.com##body,html:style(height: auto !important; overflow: auto !important)
+! olaproducts.co.nz
+olaproducts.co.nz##.newsletter__lightbox
+olaproducts.co.nz##body,html:style(height: auto !important; overflow: auto !important)
+! pitviper.com
+pitviper.com##.yotpo-smsbump-modal__backdrop
+pitviper.com##[id^="smsbump-form-"]
+pitviper.com##body,html:style(height: auto !important; overflow: auto !important)
+! levi.com
+levi.com##.full-vp-welcome-modal-wrapper
+levi.com##body:style(overflow: auto !important; position: initial !important;)
+! build.com
+build.com###modal-root
+build.com##body:style(overflow: auto !important; position: initial !important;)
+! williams-sonoma.com
+williams-sonoma.com###join-email-campaign
+williams-sonoma.com##body:style(overflow: auto !important; position: initial !important;)
+! tsc.ca
+tsc.ca##.email-popup__overlay
+tsc.ca##body:style(overflow: auto !important; position: initial !important;)
+! wafuu.com
+wafuu.com##.contact-form
+wafuu.com##.modal-backdrop
+wafuu.com##body:style(overflow: auto !important; position: initial !important;)
+! overstock.com
+overstock.com###page_triggers
+overstock.com##body:style(overflow: auto !important; position: initial !important;)
+! deskhero.ca
+deskhero.ca##.react-responsive-modal-root
+deskhero.ca##body:style(overflow: auto !important; position: initial !important;)
+! calvinklein.*
+calvinklein.at,calvinklein.be,calvinklein.bg,calvinklein.ch,calvinklein.co.uk,calvinklein.com,calvinklein.cz,calvinklein.de,calvinklein.dk,calvinklein.ee,calvinklein.es,calvinklein.fi,calvinklein.fr,calvinklein.hr,calvinklein.hu,calvinklein.ie,calvinklein.it,calvinklein.lt,calvinklein.lu,calvinklein.lv,calvinklein.nl,calvinklein.pl,calvinklein.pt,calvinklein.ru,calvinklein.se,calvinklein.si,calvinklein.sk##.ck-modal--newsletter-modal-wrapper
+calvinklein.at,calvinklein.be,calvinklein.bg,calvinklein.ch,calvinklein.co.uk,calvinklein.com,calvinklein.cz,calvinklein.de,calvinklein.dk,calvinklein.ee,calvinklein.es,calvinklein.fi,calvinklein.fr,calvinklein.hr,calvinklein.hu,calvinklein.ie,calvinklein.it,calvinklein.lt,calvinklein.lu,calvinklein.lv,calvinklein.nl,calvinklein.pl,calvinklein.pt,calvinklein.ru,calvinklein.se,calvinklein.si,calvinklein.sk##body:style(overflow: auto !important; position: initial !important;)
+! humankinetics.com
+humankinetics.com##.fancybox-overlay
+humankinetics.com##body,html:style(overflow: auto !important; position: initial !important;)
+! assos.com
+assos.com##+js(set-cookie, popup-newsletter, true)
+! .fancybox-container
+headphonebar.com,jolinne.com##.fancybox-container
+headphonebar.com,jolinne.com##body:style(overflow: auto !important; position: initial !important;)
+! partsinmotion.co.uk
+partsinmotion.co.uk###fancybox-overlay
+partsinmotion.co.uk##body,html:style(overflow: auto !important; position: initial !important;)
+! biglots.com
+ardene.com,biglots.com,toysrus.ca##.modal
+ardene.com,biglots.com,toysrus.ca##body,html:style(overflow: auto !important; position: initial !important;)
+! fredmeyer.com
+fredmeyer.com##.kds-Modal-overlay
+fredmeyer.com##body:style(overflow: auto !important; position: initial !important;)
+! geizdental.de
+authenticoilco.com,geizdental.de##.modals-wrapper
+authenticoilco.com,geizdental.de##body:style(overflow: auto !important; position: initial !important;)
+! stylewe.com
+stylewe.com###cartx-wrap
+stylewe.com##body:style(overflow: auto !important; position: initial !important;)
+! dell.com
+dell.com###mh-ext-signupemail-modal
+dell.com##body:style(overflow: auto !important; position: initial !important;)
+! temu.com
+temu.com###bg-simple-portal-container
+temu.com###bg_pc_benefit_download_modal_container_id
+temu.com##body:style(overflow: auto !important; position: initial !important;)
+
+! *** easylist:fanboy-addon/fanboy_newsletter_shopping_specific_hide.txt ***
+alldayshirts.com###GeneralSaleBanner
+edikted.com###SMSBump-Modal
+nfm.com###att_lightbox_email
+gpulive.com###automizely_marketing_popup_bars
+misterworker.com###block_footer_custom
+thegoodguys.com.au###catalogueDrawer
+arcade-sound.com###cb-announement-bar
+wards.com###cred-bnr-top
+gourmetfoodstore.com###divInterstitialContainer
+overstock.com###dynamic_banners
+costco.com###email-popup-title
+cb2.ca###emailCheckFooter
+cruise.com###emailFooter
+zumiez.com###emailInfobar
+beautycounter.com###emailSignupRoot
+evitamins.com###email_signup
+eastporters.com###ep-footer-subscribe
+offers.com###extras-container
+ozsale.com.au###footer-collect-emails
+denon.com###footer-email-sign-up-form
+gazelle.com###footer-newsletter-subscribe-form
+tirerack.com###footerNewEmail
+fleetnetwork.ca###footerSubcribeForm
+adorama.com###global-footer-main_contact
+trlnutrition.com###grow-consent-modal
+homehardware.ca###hh-newsletter
+markselectrical.co.uk###info-popup-overlay
+factorydirect.ca###insiderEmailAlert
+theiconic.com.au###interstitial
+tenaquip.com###join-mailing-footer
+ulta.com###js-stickyEmailSignUpFooter
+johnsonfitness.com###lb-wrapper-autonewsletter
+techforless.com###lightbox_container
+okvape.co.uk###lootly-widget
+reigningchamp.com,ruralking.com,shop.reigningchamp.com###ltkpopup-container
+reigningchamp.com,shop.reigningchamp.com###ltkpopup-overlay
+volquartsen.com###mailing-list
+enjoybot.com###mambasms-forms-container
+menards.com###mcomEmailBanner
+crazysales.com.au###middleSubscribe
+hive.co.uk###news
+agriaffaires.it,intersport.com.au,petroleumservicecompany.com###newsletter
+cottonon.com###newsletter-entry-footer
+mwave.com.au###newsletterForm
+akkogear.com###newuser_promotion_ad
+edenfantasys.com###nlSubscriptionForm
+overstock.com###omailContainer
+audiogeeks.com,keepgo.com###omnisend-forms-container
+virginexperiencedays.co.uk###onExit
+kedak.online###ouibounce-modal
+shopcytee.com###popup
+d2-store.com###popup_box
+drinkfreshjuice.com###shopify-section-entry-popup
+store.drlivingood.com###shopify-section-newsletter
+hificentre.com###shopify-section-static_site_popup
+biblio.co.uk,biblio.com###subscribe
+fingerhut.com###subscribe-app
+tkmaxx.com###tjx-newsletter
+markselectrical.co.uk###voucher-request-popup
+aeromalls.com###widget-newsletter
+eneba.com##.BFm46L
+llbean.com##.Footer_email-form
+schottnyc.com##.NEWSLETTER_ONENTRY
+littlewordsproject.com##.Newsletter
+dauletapparel.com,laurentferrier.ch##.NewsletterPopup
+elgato.com##.NewsletterPopup_newsletter-popup__1pFRF
+penguin.co.uk##.NewsletterSignup_wrapper__mTmqu
+homary.com##.RegisterAndGetOFF
+grove.co##.TheFooterSignUp
+jbhifi.com.au##._13cnlxs2af
+dicksmith.co.nz,dicksmith.com.au,kogan.com,mattblatt.com.au##._1iiWS
+wayfair.com##._4zodakb._4zodaka
+allmodern.com,birchlane.com,jossandmain.com##._9u2nava_713
+adidas.com##._footer_newsletter_1ecdc_1
+happy-trail.com##.alo-newletter
+mightyskins.com,pinkstork.com##.amped-wrapper
+aritzia.com##.ar-newsletter-tc__sheet
+hudsonappliance.com##.avb-magento-form
+goodwillfinds.com##.b-footer-newsletters
+toysrus.ca##.b-footer_email
+boohoo.com##.b-newsletters
+techforless.com##.backdrop
+bestpricenutrition.com,fallindesign.com##.beautify__newsletter
+guitarcenter.com##.bg-borderMoreLightColor
+shopkitchenclique.com##.blp-container
+chapters.indigo.ca##.browsepopup
+freepeople.com,urbanoutfitters.com##.c-pwa-email-signup--footer
+anthropologie.com##.c-pwa-form
+made-in-china.com##.campaign-pop-container
+made-in-china.com##.campaign-pop-mask
+shopperplus.ca##.connect-us
+flashtrend.co.nz##.container-news-sub
+stoneberry.com##.cordial-email-signup
+minted.com##.css-1dwh0gf
+katespade.com##.css-81stxx
+lakeside.com,ltdcommodities.com##.css-jh5v8h
+robinsonsshoes.com##.cta-modal
+pagani.co.nz##.curtain
+123ink.ca,primecables.ca##.customer-gift
+underground-england.com##.dialog-lightbox-widget
+fruitarian.store,naturalsound.ca,shellsoul.com,sigav.com##.dialog-type-lightbox
+doitbest.com##.dib-footer-signupemail
+gourmetfoodstore.com##.divInterstitialBGCover
+thegoodguys.com.au##.drawerTitleTextWrapper
+dickssportinggoods.com##.dsg-react-footer-cwu-sign-up
+nectarsleep.com##.dy-act-overlay
+taurususa.com##.eb-init
+belk.com##.email-alert-signup
+pulseuniform.com##.email-bar20
+homestore.zola.com##.email-capture-component
+otterbox.com##.email-input
+arb.com.au##.email-overlay
+hobbylobby.com##.email-sign-up-form
+crucial.com,magazines.com,napacanada.com##.email-signup
+iherb.com##.email-subscription-container
+levi.com##.email-subscription-form
+offers.com##.email-updates
+rosegal.com##.email-wrap
+hammacher.com##.emailBox
+cultbeauty.co.uk,cultbeauty.com,lookfantastic.com,myprotein.com,myprotein.it,myvitamins.com,thehut.com##.emailReengagement
+mcguckin.com##.email_SignUp
+ngpstoreusa.com##.emthemesModez-footer-topColumns
+edmfast.com,joelinksstore.com,priceblaze.com,rosmancomputers.com.au,t-shirt.ca,theonlinedrugstore.com,youritdelivered.com##.emthemesModez-footer-topColumns-wrapper
+target.com.au##.enews-quick
+rona.ca##.enewsSubscribeModal
+wayfair.com##.fINiis
+hifiheadphones.co.uk,shop.artnoise.ca##.fancybox-container
+yinibinibaby.com##.fd-modal
+esourceparts.ca##.foo-newsletter
+dhgate.com##.foot-login
+wholesomeculture.com##.footer--subscribe
+arcade-sound.com,gizmogoober.com,justripenutrition.com##.footer-block--newsletter
+halseymusicstore.com,localthreads.com.au##.footer-block__newsletter
+crutchfield.com##.footer-card-email
+keychron.com##.footer-col--newsletter
+fleshlight.eu##.footer-cta
+123ink.ca,primecables.ca,shopperplus.ca##.footer-customer-gift
+farmandfleet.com##.footer-email-signup
+renodepot.com##.footer-fixed
+carshopinc.com##.footer-head
+btr.com##.footer-info-col--newsletter
+sunsetmicro.com##.footer-info-newsletter-inn
+rightstufanime.com##.footer-mailing-list-signup
+vistashops.com##.footer-mid
+hugesupplements.com##.footer-newsletter-block
+eastendprints.co.uk##.footer-newsletterTop
+marshallheadphones.com##.footer-newsletter__container
+kitchenaid.com##.footer-productsignup
+sportchek.ca##.footer-section__newsletter_signup
+canadiantire.ca##.footer-social-share-icon__container-1
+canadianbestseller.com,moon-audio.com,sportsgirl.com.au##.footer-top
+autoplicity.com##.footer-top-follow-us
+publiclands.com##.footerEmailSignUp-container
+fantasticfurniture.com.au##.footerSubscribeMe
+inov-8.com##.footer__banner
+walgreens.com##.footer__email-sign-up
+revzilla.com##.footer__email-signup
+mandmdirect.com##.footer__signup
+spigen.com,teufel.ch,teufel.de,teufelaudio.at,teufelaudio.be,teufelaudio.com,teufelaudio.es,teufelaudio.fr,teufelaudio.it,teufelaudio.nl,teufelaudio.pl##.footer__subscription
+barnesandnoble.com##.for-email
+shein.com##.ft-right-email
+overstock.com##.fusion-emailSignup
+123ink.ca,primecables.ca,shopperplus.ca##.gift-bag
+123ink.ca,primecables.ca,shopperplus.ca##.git-bag-pop
+bunnings.co.nz##.gkDSfm
+healthyone.us##.h-newslatter--newsletter
+target.com##.hKxMSJ
+crazysales.com.au##.home_fixed-subscribe__JNPlW
+thedevicedepot.com##.interact
+dhgate.com##.j-foot-login
+shein.com##.j-quick-register-container
+brandsmartusa.com##.join-email-list-wrapper
+jared.com,zales.com##.join-list
+templeandwebster.com.au##.js-footer-email-capture
+shop.amoreterra.com##.js-section__promo-pop
+harbourbookshop.co.uk##.jsFixedMessage
+hugesupplements.com,loveyourmelon.com,ritual.com,well.ca##.ju_Con
+dbrand.com##.ju_iframe
+hugesupplements.com,loveyourmelon.com,ritual.com,well.ca##.ju_overlay
+tanga.com##.jumbotron
+runningwarehouse.com.au##.l-footer-join
+oakandluna.com##.l2VEg
+indiegogo.com##.layoutFooter-newsletterSignUp-form
+freemans.com##.lb_overlay
+frontrunnercolombo.co.nz,paceathletic.com##.lg-backdrop
+frontrunnercolombo.co.nz,paceathletic.com##.lg-outer
+lowes.com##.lhMiox
+clinique.com##.loyalty-offer-overlay
+fortnine.ca##.main-footer-newsletter
+grabone.co.nz##.main-footer__subscribe
+blackwells.co.uk##.main-sign-up
+rosegal.com##.mask
+quzo.net##.mfp-wrap
+fanatics.com,opositiv.com##.modal
+factorydirect.ca##.modal-backdrop
+thorne.com##.modal-div
+tradetested.co.nz##.modal-newsletterModal
+lowes.ca##.modalStyled
+opositiv.com##.modal_overlay
+balfesbikes.co.uk##.modular-footer-socials
+jcrew.com##.module-footer__signup
+becextech.co.nz##.news
+tradeinn.com##.newsFooter
+computerlounge.co.nz##.newsLetterSignupWrapper
+citybeach.com,everything5pounds.com,worldwidevoltage.com##.newsletter-block
+ultra1plus.com##.newsletter-pop-up-container
+networkdevicesinc.com##.newsletter-row
+awesomebooks.com##.newsletter-section
+supplementwarehouse.com.au##.newsletter-style-4
+fatquartershop.com,thebrick.com##.newsletter-wrapper
+wob.com##.newsletterContainer
+kathmandu.co.nz,kathmandu.com.au##.newsletterForm-1Gx
+lauramercier.com##.newsletter__col
+mince.nl##.newsletter_container
+thegame.cool##.newsletter_section
+onebioshop.com##.nt_se_newsletter2
+urbanoutfitters.com##.o-pwa-modal-overlay
+ultra1plus.com##.overlay
+officeworks.com.au##.ow-signup
+deciem.com,theordinary.com##.page_footer-container_newsletter_sticky
+pcliquidations.com##.pclHotDeals
+bkstr.com##.persistentcomponent
+shoppersdrugmart.ca##.plp__newsLetterSignUp__3GXDU
+rouleurcycles.co.nz##.ply-backdrop
+pagani.co.nz,seastarsuperbikes.co.uk##.popup
+hifiheadphones.co.uk,towerhousewares.co.uk##.popup-modal
+wearesync.co.uk##.popup-wrapper
+atlanticsuperstore.ca##.product-details-page__ad-unit
+anacondastores.com,harrisscarfe.com.au,spotlightstores.com##.promo-banner
+touchy-style.com##.promo-popup
+onlineshop.oxfam.org.uk##.promotion-messages
+hippieshine.com,totallypersonal.co.uk,workprotools.store##.proof-factor-app
+glassons.com,hallensteins.com##.ps-curtain
+herbiesheadshop.com##.pulse-subscribe
+ceenergynews.com##.pum-overlay[data-popmake*="newsletter-signup-popup"]
+zappos.com##.qi-z
+freemans.com##.quitifyBannerContainer
+musiciansfriend.com##.responsive-footer_email-signup
+drinkcirkul.com##.reveal-newsletter
+drinkcirkul.com##.reveal-overlay
+cosmicnz.co.nz##.s-popup
+samsclub.com##.sc-footer-desktop-sect01
+epomaker.com##.sf__newsletter-section
+theiconic.co.nz,thesoapery.co.uk##.signup-form
+burkesoutlet.com##.signup-wrapper
+countryroad.com.au##.signup_form_container
+princessauto.com##.simpleltkmodal-container
+princessauto.com##.simpleltkmodal-overlay
+nostalgiaproducts.com##.site-announcement
+sweetwater.com##.site-footer-col--subscribe
+navafresh.com##.site-footer-newsletter__one-half
+jaysresales.com##.site-footer__item-inner--newsletter
+prohockeylife.com##.site-newsletter-bar
+teepop.com##.spin-modal
+lambland.co.uk,solestop.com##.springbot-overlay
+supplementwarehouse.com.au##.spy-newsletter
+geekbuying.com##.sub_bg
+angara.com##.subcription-block
+jbhifi.co.nz,topflightautomotive.com##.subscribe
+newegg.ca,newegg.com##.subscribe-box
+i-tech.com.au##.subscribe-footer
+etsy.com,global.microless.com##.subscribe-form
+cottonon.com##.subscribe-tab
+standout.co.uk##.subscription-block
+suncoastparts.com##.t-newsletter-form--container
+microperfumes.com##.tap-email
+nordstrom.com##.tfCi0
+getrxd.com##.top-footer-wrapper
+sleepworld.com##.top-start
+sportsmans.com##.tw-email-signup-section
+ugreen.com##.ug-footer-subscribe
+bathandbodyworks.com,fye.com##.ui-dialog
+aritzia.com,bathandbodyworks.com,fye.com##.ui-widget-overlay
+lcpshop.net##.ulp-window-container
+volksbank.it##.vb-magazine-newsletter
+dsw.ca##.vip-enrollment-banner
+audioadvice.com##.white-bkg
+beverageforyou.com##.widget-popup
+canadianbestseller.com##.woocommerce-store-notice
+monkeyoffice.co.uk##.wrapNewsletterFooter
+harveynorman.co.nz##.wufoo-form-container
+zappos.com##.xh-z
+ooshtush.com,rgmwatches.com##.yui-popup-container-node
+kayak.com##[aria-label="Receive our newsletter."]
+shopcjglobal.com##flashy-popup
+! smsbump-form-
+bergautodesign.com,braveandkindbooks.com,bwpsales.com,deal4.ca,fwdformnutrition.com,gizmogoober.com##[id^="smsbump-form-"]
+!! zavvi.
+zavvi.ca,zavvi.cn,zavvi.com,zavvi.com.au,zavvi.de,zavvi.es,zavvi.ie,zavvi.it,zavvi.nl##.emailReengagement
+!! .needsclick
+##.kl-private-reset-css-Xuajs1.needsclick
+##.needsclick[aria-label][style]
+!! shopify-section-popups
+awables.com,camerawholesalers.com,flight-model.com,p2nstore.co.uk,simcoeav.ca###shopify-section-popups
+!! #shopify-section-popup
+backroadslondon.com,bazaar-foods.co.uk,fsaproshop.com,modify71.co.uk,ownsilent.international,roughandreadywholefoods.co.uk,vibergboot.eu,vulkit.com###shopify-section-popup
+!! .newsletter
+1stplace4trophies.co.uk,a2zphoneselectronics.com,bodybuildingwarehouse.co.uk,crazysales.com.au,deichmann.com,electroeshop.com,everymarket.com,grandandtoy.com,jdpower.com,pinkluna.com.br,qualitymobilevideo.com,roguefitness.com,sapstjean.com,servers4less.com,shop.juliamichaelsofficial.com,skyairline.com,surveillance-video.com,technologygalaxy.com,teksavvy.com,tuffshop.co.uk##.newsletter
+!! #ps__widget_container
+comfortoneshoes.com,getrawnutrition.com,groovelife.com,mypatriotsupply.com,myvidaorigins.com,revivesups.com###ps__widget_container
+!! a[href*="/newsletter"]
+innovations.com.au##a[href*="/newsletter"]
+!! .bottom-0.fixed
+refurbly.se##.bottom-0.fixed
+!! .newsletter_
+bhphotovideo.com##[class^="newsletter_"]
+!! calvinklein.*
+calvinklein.at,calvinklein.be,calvinklein.bg,calvinklein.ch,calvinklein.co.uk,calvinklein.com,calvinklein.cz,calvinklein.de,calvinklein.dk,calvinklein.ee,calvinklein.es,calvinklein.fi,calvinklein.fr,calvinklein.hr,calvinklein.hu,calvinklein.ie,calvinklein.it,calvinklein.lt,calvinklein.lu,calvinklein.lv,calvinklein.nl,calvinklein.pl,calvinklein.pt,calvinklein.ru,calvinklein.se,calvinklein.si,calvinklein.sk##div[class^="NewsletterBanner_"]
+!! .ReactModal__Overlay
+rugs.ca##.ReactModal__Overlay
+!! .inset-0.fixed
+anker.com##.inset-0.fixed
+!! .modal
+baybloorradio.com,bizpromo.co.nz,de-santis.it,thebrick.com##.modal
+!! .modal-backdrop
+baybloorradio.com,bizpromo.co.nz,de-santis.it,drinkfreshjuice.com,underarmour.ca,underarmour.cl,underarmour.co.nz,underarmour.com,underarmour.com.au,underarmour.com.br,underarmour.com.mx,underarmour.com.my,underarmour.de,underarmour.es,underarmour.eu,underarmour.fr,underarmour.it,underarmour.nl##.modal-backdrop
+!! underarmour
+underarmour.ca,underarmour.cl,underarmour.co.nz,underarmour.com,underarmour.com.au,underarmour.com.br,underarmour.com.mx,underarmour.com.my,underarmour.de,underarmour.es,underarmour.eu,underarmour.fr,underarmour.it,underarmour.nl###emailPopUpModal
+!! #omnisend-dynamic-container
+a1supplements.com,allyouplay.com,factoryfast.com.au,globaleparts.com,huskymoto.co.uk,jj-motorsports.com,mavigadget.com,myvillagegreen.com,nevstudio.com,northwestohioliquidations.com,noticethereckless.com,orbitgear.net,orka.ca,pastimesports.ca,santiemidwest.com,skinhelpzone.com,supplementschester.co.uk,thetruthbeautycompany.com,toolsplus.com###omnisend-dynamic-container
+!! #smile-ui-container
+5percentnutrition.com,legacytoys.com,myotcstore.com,myvillagegreen.com,newvaping.com,nisupplements.com###smile-ui-container
+!! .ba-widget-namespace
+australianorganicproducts.com.au,bodynutritionuk.co.uk,deal4.ca,ish.guitars,jdstorefashion.com,phyllisdunn93.myshopify.com,pixibow.com,runninwildkids.co,unwiredshop.ca,winnerscircle.com##.ba-widget-namespace
+!! .modals-wrapper
+powgen.fr,sensilab.se##.modals-wrapper
+!! .is-moved-by-drawer
+##.drawer__header-container.is-moved-by-drawer
+!! #mc_embed_signup
+burelfactory.com,itm.com###mc_embed_signup
+!! .newsletter-signup
+londondrugs.com,reverb.com##.newsletter-signup
+!! newsLetterCont
+bestbuy.ca##[class^="newsLetterCont"]
+! International
+valgourmand.com###footer-primary
+tuinartikelen.nu###formNewsletterFooter
+td-toys.it###iqitpopup
+td-toys.it###iqitpopup-overlay
+pinlight.eu###newsletterBox
+clementoni.com###shopify-section-promo-pop
+brics.it##.MuiDialog-container
+brics.it##.MuiDialog-root
+soliver.de##.asf-newsletter
+refurbed.at,refurbed.de,refurbed.dk,refurbed.fr,refurbed.ie,refurbed.it,refurbed.nl,refurbed.se##.bg-refurbed-blue
+hightechplace.com##.block-subscribe
+laredoute.fr##.footer-newsletter-block
+avantisport.nl##.footer__blocks__newsletter
+woolworth.de,woolworth.pl##.form-newsletter-subscription
+bruneau.fr##.isg-shared-banner-popin
+bruneau.fr##.mrk-footer-newsletter
+thepitchfootball.com##.newsletter-box
+smulderstextiel.nl##.newsletterform
+optigura.fr##.o-modal
+italiangourmet.fr##.popup--newsletter
+consul.pt##.popupNewsletter
+dcshoes.fr##.r-1ups-description
+tvsatshop.cz##.s1-newsletter-outer
+soldfy.se##.subscribe-sec
+viata.fr##.vi-newsletter-subscribe__content
+distrelec.fr##app-newsletter
+olimpstore.f##div[style*="position: fixed; width: 100%;"]
+!------------------------Rules for international sites------------------------!
+! *** easylist:fanboy-addon/fanboy_newsletter_international_block.txt ***
+||dagelijksestandaard.nl^*/ddsnieuwsbrief.jpg
+! French
+||bbc7dcd54670499dbd3ba50c33600830.pages.ubembed.com^
+||quechoisir.org/push/
+||rtl.be^*/box-newsletters.js
+||sibforms.com/serve/$domain=leptidigital.fr
+! Hungarian
+||link.sportal.blikk.hu/join/
+! Italian
+||newsletter.beautydea.it^
+||pagamentidigitali.it^*/newsletter.jpg
+! Spanish
+! Russian
+||currenttime.tv/a/signup-sidebar-widget/
+! Portugese
+||sibforms.com/serve/$domain=jm-madeira.pt
+
+! *** easylist:fanboy-addon/fanboy_newsletter_international_hide.txt ***
+onlinehaendler-news.de###article-subscribe
+deraktionaer.de###boersen-briefing
+gamepro.de,gamestar.de###footer-bold
+efahrer.chip.de###newsletter-subscription-popup
+kfz-betrieb.vogel.de###nl_block
+skylineatlas.de###ouibounce-modal
+skylineatlas.de###persoblock
+thegap.at###thegapnewsletter
+rtde.tech##.Subscription-isReact
+studysmarter.de##.ab-feature-popup
+sn.at##.box-emarsys
+bluray-disc.de##.daily-newsletter-anmeldung_r
+diepresse.com##.newsletter-form--article
+lto.de##.newsletter-layer
+focus.de##.nl_subscription_form
+nextpit.de##.np-nl-widget
+haus.de##.paragraph-wrapper--ParagraphNewsletter
+herz-fuer-tiere.de##.promo__newsletter
+weinkenner.de##.sib_signup_form
+netzwelt.de##.subscribeboard
+skylineatlas.de##.underlay
+watson.ch##.watson-snippet__newsletter
+pfister.ch##[class^="style__NewsletterPopupComponent"]
+! French
+jeuxvideo-live.com###Newsletters
+lamanchelibre.fr###articleFormNL
+comment-economiser.fr###bloc_newsletter_bas
+fourchette-et-bikini.fr###newsletter-container + #legal-terms
+comment-economiser.fr###newsletter_box
+pcastuces.com###newsletter_descri
+pcastuces.com###newsletter_titre
+citoyens.com###nlsubscribe
+sanctuary.fr###popup_actu
+brgm.fr###spb-block-popinnewsletter
+lopinion.fr##.PromoFooter
+lopinion.fr##.User-subscription-form
+ecommercemag.fr##.bandeau-abo-nl
+auto-moto.com##.bloc-netitmail
+paruvendu.fr##.bp14_recevoirannonces
+lesmobiles.com##.c-homepage__newsletter-block
+casting.fr##.casting-card-subscribe-newsletter
+justgeek.fr##.cs-entry__subscribe
+doctissimo.fr##.doc-newsletter-banner-wrapper
+pcastuces.com##.inscriptionmail
+toutelanutrition.com##.musthave-right
+lorientlejour.com##.newsletter-box-container
+leparisien.fr##.nl-article-card
+mariefrance.fr##.nl-social
+homap.fr##.nlregister
+capital.fr##.pmcInsert
+traxmag.com##.push-subscribe-newsletter-wrapper
+hostinger.fr##.registration-banner__bg
+slate.fr##.relance-newsletter
+mayottehebdo.com##.spu-bg
+mayottehebdo.com##.spu-box
+loractu.fr##.subscribe-nl
+aciafrique.org##.subscribe-post
+vert.eco##.vert-subscribe-aside
+maison-travaux.fr##.widget-first
+mayottehebdo.com##aside.widget_custom_html
+rtl.be##box-newsletters
+! Czech
+portal.rozhlas.cz###cro-common-newsletter-ecomail-entityform-edit-form
+signalfestival.com##.drawer--newsletter
+! Arabic
+aljadeed.tv###formNL
+alaraby.co.uk##.block-custom-mailchimp-subscription
+al-sharq.com##.boxemail
+sasapost.com##.email-subscription-footer
+acimena.com##.subscribe-post
+! Chinese
+storm.mg###lock_pre_desc
+cyberctm.com##.news-control
+am730.com.hk##.subscribox
+boutirmall.com##.subscription-section
+! Danish
+samvirke.dk##.block-sam-newsletter-popup
+! Dutch
+iexgeld.nl###ctl00_Newsletter_UpdateForm
+belegger.nl###ctl00_ctl00_NewsletterFooter_UpdateForm
+iex.nl###ctl00_ctl00_footer_newsletter_UpdateForm
+tostrams.nl###ctl00_ctl00_newsletter_UpdateForm
+tostrams.nl###ctl00_newsletter_UpdateForm
+boerenbusiness.nl##.aanmelden
+sport247.be##.article-detail-nieuwsbrief
+hpdetijd.nl##.block-cta__subscribe
+kro-ncrv.nl##.call-to-action__container
+frankwatching.com##.container-fullwidth-subscription
+drimble.nl##.email-grid-item
+tvgids.nl##.footer__subscription
+beursduivel.be,iexprofs.nl##.js-blocknwlsub
+gezondheidsnet.nl##.nieuwsbrief
+eurogamer.nl##.signup-promo
+israeltoday.nl##.single_post_sub_form
+deondernemer.nl##[id^="newsletter_"]
+id.nl##div[class*="newsletter_content-side_"]
+! Finnish
+mobiili.fi###text-61
+tyyliniekka.fi##.hustle-popup
+netrauta.fi##.modals-wrapper
+iltalehti.fi##.newsletter-popup-elements
+metsalehti.fi##.subscribe-newsletter_wrapper
+valitutpalat.fi##a[href="https://uutiskirje.valitutpalat.fi"]
+moottori.fi#?#.item.sidebar.reader-comp.main-gray-bg:-abp-has(a[href="/tilaa-moottorin-uutiskirje/"])
+! Greek
+epoliteia.gr##.dialog-lightbox-widget
+! Hebrew
+10dakot.co.il##.aside_subscribe
+! Hungary
+! Indian
+gujaratsamachar.com##.email-subscriber
+news13.in##.n13_foot_subscribe
+! Indonesia
+oneesports.id##.oes-hbs-dedicated-article
+oneesports.id##.oes-hbs-sticky-bar
+cnnindonesia.com##.subscribe__fixed
+! Italian
+leggioggi.it,rollingstone.it###exitpopup-modal
+financecommunity.it###footernews
+frankmerenda.com###ppsPopupBgOverlay
+fides.org###subcribe-nl
+bitcity.it###subscription-form
+internazionale.it###weekly_newsletter
+mentelocale.it##.RegNewsletterBox
+focusrisparmio.com##.Subscribe
+agi.it##.agi-newsletter
+editorialedomani.it##.article-footer
+boatindustry.it,boatsnews.it,pescare.news##.box-hebdo
+mistergadget.tech##.box-mail-chimp
+giornaledibrescia.it##.boxNewsletterArticle-BUON
+artribune.com##.c-newsletter_wrap
+internazionale.it##.cta_nl_ext_container
+bergamonews.it##.custom-newsletter-container
+financecommunity.it##.dialog-lightbox-message
+newslinet.com##.dialog-widget-content
+ilcorrieredelgiorno.it##.elementor-element-7c001dd6
+visitami.paginemediche.it##.email-container-footer
+policymakermag.it,startmag.it##.essb-subscribe-form
+pambianconews.com##.essb_mailform
+leggioggi.it##.exitpopup-modal-window
+proiezionidiborsa.it##.fancybox-overlay
+forbes.it##.forbes-newsletter
+forbes.it##.forbes-newsletter-invite
+uominietrasporti.it##.form-newsletter
+hwupgrade.it##.form-offerte
+digital4.biz##.form_iscriviti
+euractiv.it##.gform_widget
+juventus.com##.jcom-c-promo-newsletter
+ilcittadinomb.it##.ma_div
+bsnews.it##.mailpoet_form_popup
+bsnews.it##.mailpoet_form_popup_overlay
+myvalley.it##.mailpoet_form_widget
+italia-informa.com##.modulonewsletter
+laleggepertutti.it##.news-letter
+gioconews.it##.nl
+affaritaliani.it##.nl-bottom-content
+letelegramme.fr##.nl-form-inscription
+mrw.it##.nl-signup-frm
+starbene.it##.nlslim
+billboard.it##.pk-subscribe-form-wrap
+thelostavocado.com##.section-subscription
+astrospace.it##.sib_signup_box_inside_2
+mole24.it##.sib_signup_form
+2night.it##.subscribe-article
+corrieredellumbria.it,corrierediarezzo.it,corrieredisiena.it##.subscribe-widget
+milanodabere.it##.subscribeDataTable
+fastweb.it##.tuplus-newsletter
+ortodacoltivare.it,pressgiochi.it##.widget_sib_subscribe_form
+ilfattoalimentare.it,melarossa.it,secoloditalia.it##.widget_wpmailup_widget
+sentieriselvaggi.it##.wpcf7
+formiche.net##.wrapallwowpopup
+funweek.it##.xnc-form-general__container
+01net.it##a[href="/iscriviti-alla-newsletter"]
+gds.it,qualenergia.it##a[title="Newsletter"]
+ftaonline.com,trend-online.com##app-mailing
+ilgiorno.it,ilrestodelcarlino.it,iltelegrafolivorno.it,lanazione.it,quotidiano.net##div[class^="Newsletter_"]
+! Japanese
+japantimes.co.jp###newsletter1-offer
+!! Norwegian
+! Polish
+portalprzedszkolny.pl###newsletterOnline-68
+komerso.pl##.newsletter-post
+! Portuguese
+infomoney.com.br##.ad-aside
+b9.com.br##.c-newslatter-box
+crusoe.com.br##.catchment-box
+melodijolola.com##.content_mailchimp
+macmagazine.com.br##.cs-site-subscribe
+folhadelondrina.com.br##.form-email-container
+poder360.com.br##.form-subscribe
+infomoney.com.br##.im-cta
+uol.com.br##.jupiter-news-notice
+pcguia.pt##.lepopup-popup-container
+pcguia.pt##.lepopup-popup-overlay
+moneytimes.com.br##.mc-optin
+poder360.com.br##.navigation-menu__form-create
+olhardigital.com.br##.newsV2-assinar
+noticiasaominuto.com##.newsletter-form-block
+oantagonista.com.br##.newsletter_form_amp_inner
+em.com.br,globo.com##.newsletters
+noticiasaominuto.com##.nl-space
+observador.pt##.obs-cta
+correiobraziliense.com.br##.revue-embed
+letras.mus.br##.subscribeBox
+letras.mus.br##.subscribeNews
+ojogo.pt##.t-d6-nl-1
+jn.pt##.t-footer-nl
+expansao.co.ao##.t-nl-box-1
+dinheirovivo.pt##.t-s18-i
+tecmundo.com.br##.tec--widget-thebrief
+maquinadoesporte.com.br##.wpforms-widget
+! Romanian
+bucataras.ro##.nl-content
+bucataras.ro##.sidebar-nl
+kudika.ro##.subscribers-area
+! Russian
+kommersant.uk##.article-subscribe
+interfax.ru##.bss_show_subscribe
+tonkosti.ru##.journal-subscribe
+aif.ru##.overlay
+aif.ru##.subscribe_popup
+aif.ru##.subscribe_wid
+kommersant.uk##.subscription-form
+! Serbian
+b92s.net##.bilten-signup
+! Spanish
+cooperativa.cl###mc_register_iframe
+deia.eus,diaridegirona.cat,diariocordoba.com,diariodeibiza.es,diariodemallorca.es,elcorreogallego.es,eldia.es,elperiodicodearagon.com,elperiodicoextremadura.com,elperiodicomediterraneo.com,emporda.info,farodevigo.es,informacion.es,laopinioncoruna.es,laopiniondemalaga.es,laopiniondezamora.es,laprovincia.es,levante-emv.com,lne.es,mallorcazeitung.es,noticiasdealava.eus,noticiasdegipuzkoa.eus,noticiasdenavarra.com,regio7.cat,superdeporte.es###nlt_signup_botton
+epe.es###nlt_signup_botton_desktop
+elinformador.mx,informador.mx###suscribe
+pauta.cl###suscripcion
+elpais.com.uy###widgetNewsHolder
+ara.cat##.ara-newsletter
+elordenmundial.com##.boletin-wrapper
+librotea.com##.close-popup-overlay
+economipedia.com##.cta-suscripcion
+eluniverso.com##.flujo-suscripciones
+pauta.cl##.mail_box
+salud180.com##.mailchimp-links
+elespanol.com##.md-subscription
+economipedia.com##.mf-modal-iframe
+economipedia.com##.mf-modal-overlay
+depor.com##.navbar-nm__n
+elfinanciero.com.mx##.newsletter-subscription
+elpais.com.uy##.nsl-form-container
+librotea.com##.popup-acm
+perfil.com##.pw-nl-su__container
+cooperativa.cl##.rotulo-newsletter
+naiz.eus##.s-footer__newsletter
+tycsports.com##.subs-box
+lavozdegalicia.es##.subs_box
+elgrafico.com,laprensagrafica.com##.suscribe
+laverdadnoticias.com##.suscribehorizontal
+bigbangnews.com,tonica.la##.suscribevertical
+todomecanica.com##.suscripcion
+telva.com##.ue-c-nl-banner
+ipmark.com##.woo-login-popup-sc-modal
+ipmark.com##.woo-login-popup-sc-modal-overlay
+telesurtv.net##.wpFootSuscrip
+! Swedish
+elplural.com##.btn-subscribe
+! Turkish
+! Ukranian
+minfin.com.ua##.mail-subscribe-user
+donpatriot.news##.news__subscribe
+!---------------------------------Allowlists----------------------------------!
+! *** easylist:fanboy-addon/fanboy_newsletter_allowlist.txt ***
+@@||buy.tinypass.com/checkout/template/cacheableShow$subdocument,domain=technologyreview.com|thenation.com
+@@||e24.no/cnp-assets/components-NewsletterWidget.$~third-party
+@@||el-vidas.nl^*/phpcuong_newsletter/$script
+@@||list-manage.com/subscribe/post-json?
+@@||pico.tools/load/build.js$script,domain=escapistmagazine.com
+@@||tedox.de/*/js/footer.js$script,~third-party
+
+! *** easylist:fanboy-addon/fanboy_newsletter_allowlist_general_hide.txt ***
+store.acousticsounds.com,uof.digital#@##mc_embed_signup_scroll
+onepercentclub.co.uk#@#.et_pb_newsletter
+moonpalacecancun.com#@#.footer-newsletter
+jamesclear.com,wpamaze.com#@#.formkit-form.seva-form
+axios.com#@#.is-newsletter
+varma.fi#@#.needsclick[aria-label][style]
+uol.com.br#@#.newsletter-article
+oetker.de#@#.newsletter-component
+sourceforge.net#@#.psp_newsletter_subscribe
+doctorofcredit.com#@#.wpdiscuz-subscribe-bar
+novojornal.co.ao#@#div.box-newsletter
+
+! *** easylist:fanboy-addon/fanboy_newsletter_shopping_allowlist.txt ***
+! fanboy_newsletter_shopping_allowlist.txt
+
+! *** easylist:fanboy-addon/fanboy_newsletter_shopping_allowlist_general_hide.txt ***
+! fanboy_newsletter_shopping_allowlist_general_hide.txt
diff --git a/uAssets/thirdparties/easylist/easylist-notifications.txt b/uAssets/thirdparties/easylist/easylist-notifications.txt
new file mode 100644
index 0000000..0296473
--- /dev/null
+++ b/uAssets/thirdparties/easylist/easylist-notifications.txt
@@ -0,0 +1,1391 @@
+[Adblock Plus 2.0]
+! Title: EasyList – Notifications
+! Last modified: %timestamp%
+! Expires: 7 days (update frequency)
+! *** easylist:template_header.txt ***
+!
+! Please report any unblocked adverts or problems
+! in the forums (https://forums.lanik.us/)
+! or via e-mail (easylist@protonmail.com).
+!
+! Homepage: https://easylist.to/
+! Licence: https://easylist.to/pages/licence.html
+! GitHub issues: https://github.com/easylist/easylist/issues
+! GitHub pull requests: https://github.com/easylist/easylist/pulls
+!
+!--------------------------General blocking rules-----------------------------!
+! *** easylist:fanboy-addon/fanboy_notifications_general_block.txt ***
+-fb-notification/
+-push-notification.$domain=~github.com
+-push-notification/$domain=~github.com
+-push-worker-
+/amp-user-notification-
+/amp-web-push-
+/assets/www/notification.
+/av/push-
+/build/push.js
+/checkPush.js
+/content/js/push.js
+/fcmPush.js
+/FeedifySW.js
+/flying_push.
+/get_onesignal_
+/gm-push-notification-
+/ilabspush.
+/imports/notifications.
+/inpl.webpush.
+/jquery-notification.
+/jsb/pushnotifications?
+/maximizly-push.
+/modules/notifications.$domain=~forum.vivaldi.net
+/mp-web-notification.
+/multi-desktop-notification.
+/myPushDc.
+/nadz-sdk.
+/netmera_worker.
+/notification-ext.
+/notification-prod-sw.js
+/notification-sw.js
+/notification/indexdbwrapper.
+/notification/notify.js
+/notifications_lazy.
+/notifyme.js
+/notifyme.min.js
+/one-signal.
+/onesignal-free-
+/onesignal-modal.
+/onesignal.js
+/onesignal.min.
+/onesignal/manifest.
+/onesignalfix.
+/OneSignalSDK-
+/OneSignalSDKUpdaterWorker.
+/OneSignalSDKWorker.
+/openpushwoosh_
+/perfecty-push-
+/plugins/tfnotifier-wp/*
+/plugins/wp-notification-bars/*
+/prpushsw.
+/push-notification-
+/push-notification.
+/push-notification/*
+/push-notifications.$~stylesheet
+/push-notifications/*
+/push-notifications?
+/push-pro-site-settings/*
+/push-sw.
+/push-worker-$script
+/push-wrap.js
+/push.*/list_notificaciones.php
+/push/notification-
+/push/offer/*
+/push/sbscr.
+/push/sbscrp.
+/push/subscribe.
+/push_app.js
+/push_newsletter_
+/push_notification.
+/push_notification/*
+/push_notification_
+/push_notifications.
+/push_subscription.
+/push_token_
+/pushes/firebase.
+/pushes/notification.
+/PushexSDK.
+/pushly-sdk.
+/pushly-sw.
+/pushmessageworker.
+/pushnews.min.
+/pushnote-
+/pushnotification.
+/pushNotifications.js
+/pushnotifications/*
+/pushNotificationSdkNew.
+/pushpro-lib.js
+/pushpushgo/*
+/pushsubscribe.
+/pushtoast-
+/pushv2.js
+/pushwoosh-
+/pushwooshNotification/*
+/pushy-ver.js
+/russmediapush/*
+/scripts/onesignal.
+/sendpulse/*$domain=~sendpulse.ua
+/sendsay_push_
+/site-notification-desk.
+/sna-pushwoosh.
+/subscribe-push-notifications.js
+/t2push.
+/wdt_notifyjson.
+/web-push-
+/web-push-notification/*
+/web-push-worker.
+/web-push.
+/web-push/init.
+/webalert-notification
+/webnotf.js
+/webnotification.
+/webpush-production.js
+/webpush.
+/webpush/*
+/webpush_register.
+/webPushIframe.
+/webPushNotifications.
+/wonderpush,
+/wonderpush.
+/wordpress-fire-push/*
+_push_sw.
+_revotas_push.
+! Mobile notifications
+/app-banner/*$xmlhttprequest
+/jquery.androidbanner.js
+/js-mobile-*/header_$script
+/js/jquery.smartbanner.js|
+/js/jquery.smartbanner.min.js|
+/mobile-welcome-overlay/*$script
+/smart-app-banner.js
+!------------------------General element hiding rules-------------------------!
+! *** easylist:fanboy-addon/fanboy_notifications_general_hide.txt ***
+###FCMpush-slidedown-container
+###NotificationsAskMsg
+###SubscribePush
+###SubscribePushNotificationPanel
+###Znotify_Prompt
+###\5f __tdspushdiv
+###___ndtvpushdiv
+###app-promo-overlay
+###auplusflash
+###auwnotificationpopup
+###bigpicture-webpush-widget
+###browser-notifications-prompt
+###confirmaPush_Cont
+###cont_webpush
+###crocopush_banner
+###desktop-notification-ask-dialog
+###desktop-notifications
+###dialog-push-notification
+###divPnot
+###edrone--push--alert--box
+###frizbit-prompter
+###ggpush-main-area
+###grow-consent-modal
+###hint-push-service
+###ilabspush-optin-container
+###jeapie-prompt-widget
+###js-gcm-notif
+###lwp-popover-container
+###modalCognitoPush
+###my_web_push_app_box_confirm
+###nlSubscriptionCookie
+###noti_msg
+###noti_subscribe_dialog
+###notification-permission
+###notification-push
+###notificationAllowPrompt
+###notificationPopUp
+###notificationPopup
+###notify-optin-wrap
+###og-banner
+###oiNotification
+###onesignal-popover-container
+###pa-push-notification-subscription
+###popUpNotification
+###push-alert-block
+###push-notification
+###push-notification-box
+###push-notification-pop-up
+###push-overlay
+###push-prompt
+###push-subscription-button
+###push-subscription-prompt
+###pushAdUpBanner
+###pushNotification
+###pushNotification-disclaimer
+###pushOffer
+###pushSec
+###pushSubscribeModal
+###push_alert
+###push_notifications
+###push_subscribe
+###push_switcher
+###pushbanner
+###pushinstruments_popup
+###pushpushgo-container
+###pushwoosh-pop
+###qrzpush-prompt-widget
+###shopify-section-order-notifications
+###smart_push_smio_overlay
+###smart_push_smio_window
+###spm_msg_push_notification
+###subscribeToPush
+###visilabs_web_push_perm_box
+###web-alerts-modal
+###web-push-prompt
+###webPushPopup
+###webpush-info-div
+###webpushSelctorFormId
+###webpush_modal
+###webpush_overlay_back
+###webpush_soft_prompt
+###webpushr-prompt-wrapper
+###widget-pushNotification
+##.FCMpush-slidedown-container
+##.PushNotification--base
+##.PushNotification--top
+##.PushNotification-popover-dialog
+##.PushSubscription-block
+##.apn-popover-container
+##.b-notification-push
+##.b-push-notification
+##.bk-wonderpush
+##.block-sbase-bene-newsletter
+##.branded-app-shortcode-inarticle
+##.bs-push-noti
+##.bubble-push
+##.c-push-notification
+##.cleverpush-backdrop
+##.cleverpush-confirm
+##.cont_webpush
+##.contentwebpush
+##.desktop-notification-ask-dialog
+##.dmgpush-popover-container
+##.e-push-notification-popup
+##.et_push_notification
+##.firebase-slidedown-container
+##.frizbit-prompt
+##.grv-dialog-host
+##.hs-push
+##.htpush-chrome-style-notification
+##.i-push-notification
+##.id-StoryElement-embed--cleverPush
+##.insider-opt-in-notification
+##.item-newsletter-form
+##.j-push-notifications-feature
+##.jeg_push_notification_content
+##.js-custom-push-notifications
+##.js-notifications-button
+##.js-push-allow
+##.kraken-popup
+##.lightbox-push
+##.m-notifications-banner
+##.m-webpush-layer
+##.message-push-notification
+##.modal-push
+##.naf-web-notifications-popup
+##.nav-link--notification-handler
+##.notBar
+##.notf-overlay
+##.notificacao.registerPush
+##.notification-prompt-wrapper
+##.notification-pwa
+##.notification-upsell-push
+##.notify-optin-wrap
+##.ns-notification-popup
+##.ntfc_overlay
+##.ntfc_popup
+##.oi-notify
+##.page__notifications
+##.perfecty-push-dialog-container
+##.push-area-btn
+##.push-bx
+##.push-message
+##.push-modal-wrapper
+##.push-notice
+##.push-notification-box
+##.push-notification-opt-in
+##.push-notification-popover
+##.push-notification-prompt
+##.push-notifications-primer
+##.push-overlay
+##.push-popup
+##.push-subscription-alert
+##.push-subscription-button
+##.push-subscription-prompt
+##.push-subscription-wrapper
+##.push-wrap:not(body):not(html)
+##.push-wrapper:not(body):not(html)
+##.pushNotWrap
+##.pushNotification
+##.push_back
+##.push_notification
+##.push_notifications_alert
+##.push_subscribe
+##.push_warn
+##.pushinstruments
+##.pushly_popover
+##.pushowl-optin
+##.pwa-modal-prompt
+##.rdmapps-push-dialog
+##.setrow-push-popup-container
+##.showtvPushOverlay
+##.simple-subscription-form
+##.softPush_notification
+##.surveymonkey-popup
+##.tsoft-push--in-notification
+##.ud_webpush_sticky
+##.web-notification
+##.web-push
+##.web-push-box
+##.webpush_wrap
+##.window-push
+##.wordpress-fire-push-popup
+##.ys-push
+##[data-cypress="soft-push-notification-modal"]
+##[soft-push-notification-modal]
+##amp-web-push-widget
+##div[class^="container_NotificationsBanner_"]
+! Mobile Notifications
+###SmarterBannerContainer
+###appInstallNotification
+###appinstall_bnr
+###aside-app-banner
+###bannerInstallApp
+###branch-banner-iframe
+###custom_smartbanner
+###daraz-smart-banner
+###download_app_banner_btn
+###floatingAppButton
+###head-app-download
+###inlineBannerForApp
+###iossmartbanner
+###js-getAppHeader
+###mn-app-banner
+###smart-bnr-rbcapp
+###smartbanner-desktop
+###smartbanner.android
+###smartbanner.ios
+###xm_app_stickyHeader
+##.app-ad-container-desktop
+##.app-banner-container
+##.app-banner-header
+##.app-down-banner-container
+##.appInstlBnr
+##.app_banner_link
+##.appbnr-box
+##.appdown_popup
+##.banner-download-app-hidden
+##.branch-banner
+##.c-app-banner-header-wrap
+##.c-app-install
+##.c-install-banner
+##.c-notification-link-app
+##.cept-banner-link
+##.footer-app-download
+##.footer__download-app-container
+##.gh-app-banner
+##.gta-header-banner
+##.header-app-banner
+##.headerGetApp
+##.installAppPopup-top
+##.js-link-to-app
+##.js-openAppBox
+##.mobile-app-banner
+##.mobile-download-app-tout
+##.mobile-web-redirect-bar
+##.mopile-app-banner
+##.native-app-banner
+##.open-app-banner
+##.p-webtoapp-banner
+##.rsttop-webtoapp-banner-overlay
+##.smart-banner-collection
+##.smart-banner-download
+##.smartbanner--android
+##.smartbanner--ios
+##.smartbanner-android
+##.smartbanner-container
+##.smartbanner-desktop
+##.smartbanner-ios
+##.smartbnr-android
+##.smartbnr-ios
+##.tmblr-iframe--app-cta-button
+##.z-bit-smartbanner
+##[class^="adjust-smart-banner"]
+##a[href^="http://www.mobi24.net/"]
+##a[href^="https://www.mobi24.net/"]
+##amp-app-banner
+! substack
+##.subscription-widget-wrap > .show-subscribe
+! spot.im Notifications
+##[class*="NotificationsBell__notificationsWrapper-"]
+! International
+###uutiskirje-nosto
+!-------------------------Third-party blocking rules--------------------------!
+! *** easylist:fanboy-addon/fanboy_notifications_thirdparty.txt ***
+||api-push.com^$third-party
+||bildirnet.com^$third-party
+||braze.com^$third-party
+||cappushino.com^$third-party
+||cdn.qgr.ph^$third-party
+||cdn.qgraph.io^$third-party
+||centrnotify.com^$third-party
+||checke.biz^$third-party
+||confirmit.com^$third-party
+||conforama-push.com^$third-party
+||contentsitesrv.com/js/push/$third-party
+||css.xjsx.lol^$third-party
+||digipush.io^$third-party
+||dpns-notifications.com^$third-party
+||easyfeeed.com^$third-party
+||evolok.net^$third-party
+||farteniuson.com^$third-party
+||getnotification.me^$third-party
+||irpush.com^$third-party
+||jubi.ai/buttonbot/$script,third-party
+||krakenoptimize.com^$third-party
+||luravius.com^$third-party
+||neopush.io^$third-party
+||news2day.me^$third-party
+||notification-time.com^$third-party
+||notification.tubecup.net^
+||notix.io^$third-party
+||ntvsw.com^$third-party
+||partishion.com^$third-party
+||pathlime.com^$third-party
+||popmechanic.ru^$third-party
+||propush.net^$third-party
+||puscomosca.com^$third-party
+||push-centr.com^$third-party
+||push-centr.net^$third-party
+||push-engage.com^$third-party
+||push-notifications.top^$third-party
+||push-pro.net^$third-party
+||push.bytesignal.com^
+||push.daksham.in^$third-party
+||push.delivery.ethinking.de^
+||push.delivery^$third-party
+||push.esputnik.com^
+||push.getbeamer.com^
+||push.knd.ro^
+||push.newscraft.io^
+||push.reamaze.com^
+||push.rollout.io^$third-party
+||push.world^$third-party
+||pushaddict.com^$third-party
+||pushango.com^$third-party
+||pushassist.com^$third-party
+||pushaya.com^$third-party
+||pushbaza.com^$third-party
+||pushbots.com^$third-party
+||pushbox.info^$third-party
+||pushcentr.com^$third-party
+||pushchev.info^$third-party
+||pushcrew.com^$third-party
+||pushdealer.com^$third-party
+||pushe.co^$third-party
+||pusherapp.com^$third-party
+||pushinpage.com^$third-party
+||pushinstruments.com^$third-party
+||pushjunky.com^$third-party
+||pushkahouse.com^$third-party
+||pushkaplus.com^$third-party
+||pushly.com^$third-party
+||pushmaster-cdn.xyz^$third-party
+||pushmejs.com^$third-party
+||pushnews.eu^$third-party
+||pushnotifications.click^$third-party
+||pushouse.com^$third-party
+||pushowl.com^$third-party
+||pushpad.xyz^$third-party
+||pushpanda.io^$third-party
+||pushpro.io^$third-party
+||pushprofit.ru^$third-party
+||pushprospush.com^$third-party
+||pushpushgo.com^$third-party
+||pushstack.it^$third-party
+||pushtide.com^$third-party
+||pushvip.ru^$third-party
+||pushwhy.com^$third-party
+||pushy.ai^$third-party
+||quarepush.com^$third-party
+||quaruzon.com^$third-party
+||realpush.media^$third-party
+||realpush.network^$third-party
+||revpusher.com^$third-party
+||sckxppzdm.com^$third-party
+||signaly.co^$third-party
+||snrcdn.net^$third-party
+||spacepush.ru^$third-party
+! ||staq-cdn.com/grow/$third-party
+||system-notify.app^$third-party
+||topswp.com^$third-party
+||unative.com^$third-party
+||viafoura.net/push_handlers.js
+||virtualpushplatform.com^$third-party
+||webpush.jp^$third-party
+||webpushr.com^$third-party
+||webpushs.com^$third-party
+||whitepush.biz^$third-party
+||worldpush.co^$third-party
+||wps.relateddigital.com^$third-party
+||wpush.biz^$third-party
+||wpushsdk.com^$third-party
+||xedo.me^$third-party
+||youlead.pl/webpushprompt.js
+! Stand-alone, in Easyprivacy
+||accengage.net^$third-party
+||actirinius.com^$third-party
+||aimtell.com^$third-party
+||alertme.news^$third-party
+||amazonaws.com/cdn.aimtell.com/
+||aswpsdkeu.com^$third-party
+||aswpsdkus.com^$third-party
+||bildirt.com^$third-party
+||bosspush.com^$third-party
+||browserpusher.com^$third-party
+||cdn-sitegainer.com^$third-party
+||cleverpush.com^$third-party
+||copush.com^$third-party
+||cracataum.com^$third-party
+||danorenius.com^$third-party
+||digitalpush.org^$third-party
+||edrone.me^$third-party
+||face-push.com^$third-party
+||feedify.net^$third-party
+||feraciumus.com^$third-party
+||fernomius.com^$third-party
+||fkondate.com^$third-party
+||foxpush.com^$third-party
+||foxpush.net^$third-party
+||getback.ch^$third-party
+||getpush.net^$third-party
+||getpushmonkey.com^$third-party
+||gravitec.net^$third-party
+||heroesdom.com^$third-party
+||jeeng.com^$third-party
+||kattepush.com^$third-party
+||master-push.com^$third-party
+||master-push.net^$third-party
+||misrepush.com^$third-party
+||moengage.com^$third-party
+||mp3vizor.com^$third-party
+||najva.com^$third-party
+||nativesubscribe.pro^$third-party
+||notifadz.com^$third-party
+||notifpush.com^$third-party
+||notify.solutions^$third-party
+||olgtex.com^$third-party
+||on-push.com^$third-party
+||onepush.app^$third-party
+||provesrc.com^$third-party
+||psh.one^$third-party
+||push-ad.com^$third-party
+||push-free.com^$third-party
+||push-house.net^$third-party
+||pushalert.co^$third-party
+||pushbird.com^$third-party
+||pushbullet.com^$third-party
+||pushengage.com^$third-party
+||pushex.io^$third-party
+||pushible.com^$third-party
+||pushify.com^$third-party
+||pushwoosh.com^$third-party
+||reprocautious.com^$third-party
+||sendpulse.com^$third-party
+||setrowid.com^$third-party
+||shroughtened.com^$third-party
+||sm-epsilon.com^$third-party
+||snd.tc^$third-party
+||subscribers.com^$third-party
+||truenat.bid^$third-party
+||truepush.com^$third-party
+||urbanairship.com^$third-party
+||viapush.com^$third-party
+||webpu.sh^$third-party
+||whiteclick.biz^$third-party
+||wnpbdan.bid^$third-party
+||wonderpush.com^$third-party
+||wwclicknews.club^$third-party
+||wwclicktm.club^$third-party
+||xtremepush.com^$third-party
+! Mobile notifications
+||app.adjust.net.in/smart_banner
+||mobi24.net^$third-party
+
+! *** easylist:fanboy-addon/fanboy_sounds_thirdparty.txt ***
+||acquire.io/assets/sound/
+||amazonaws.com/alive5cdn/$media
+||apex.live/media/$media
+||app.chaport.com/sounds/
+||app.onlim.com/app/assets/audios/
+||appspot.com/sounds/chatmsg.mp3
+||azureedge.neti^$media,domain=oct8ne.com
+||bac-assets.com/chat/spa-assets/$media,domain=bankofamerica.com
+||bac-assets.com/spa/widgets/www-chat/$media,domain=bankofamerica.com
+||callback24.io/sounds/
+||carchat24.com/inpagechat/audio/$media
+||carrotquest.app/sounds/
+||cdn-widget.callpage.io/build/sounds/
+||channel.io/plugin/$media
+||chat.octadesk.services/embed/static/media/$media
+||chatango.com/pcache/sounds/
+||cleversite.ru/client/default/sound/
+||cliengo.com^$media
+||cloudfront.net/prod/media/$domain=birdeye.com
+||collectcdn.com^$media
+||contivio.com/Chat2/audio/
+||crisp.chat/static/sounds/
+||czater.pl/assets/sounds/
+||driftqa.com/conductor/assets/media/
+||echatsys.com/sounds/
+||fxcity.pl/images/mp4/$media
+||goftino.com/static/assets/$media
+||gubagoo.io/v4/media/
+||helpscout.net/static/ui-sounds/
+||intelliticks.com/prod/common/$media
+||jivo.ru/sounds/
+||jivosite.com/sounds/
+||js.driftt.com/conductor/assets/media/
+||js.driftt.com/deploy/assets/static/audio/
+||js.intercomcdn.com/audio/
+||kommunicate.io/kommunicate/$media
+||leadback.ru/sounds/$media
+||leadgenic.ru/production/$media
+||live2support.com/uploads/sound/
+||livebeep.com/visitor/events/$media
+||livechatinc.com/widget/static/media/
+||lpsnmedia.net/le_unified_window/$media
+||me-talk.ru/support/sounds/
+||nice-incontact.com/inContact/ChatClient/$media
+||phenompeople.com/txm-bot/prod/$media
+||purechatcdn.com/Content/Audio/
+||qualified.com/packs/$media
+||quicktext.im/assets/audio/
+||raychat.io/assets/widget/audio/
+||reamaze.com/audio/
+||revechat.com/client/sound/
+||richpanel.com/audio/
+||salesmartly.com/sounds/
+||smartsuppcdn.com/assets/sounds/
+||snapengage.com/sounds/
+||static.olark.com/jsclient/sounds/
+||static.widget.trengo.eu/assets/$media
+||streamwood.ru/img/$media
+||tars-file-upload.s3.amazonaws.com^$media
+||tawk.to/*/audio/
+||tidiochat.com^$media
+||userbot.ai/widget-chat/dist/audio/
+||userway.org/widgetapp/sounds/
+||widget.awhy.it/chat/img/$media
+||widget.insent.ai/static/media/
+||widgets.binotel.com/w/chat/$media
+||wpengine.com/wp-content/mu-plugins/wpengine-dotcom/audio/
+||zdassets.com/web_widget/$media
+||zohocdn.com/salesiq/*/sound/
+||zopim.com/widget/sounds/
+||zyratalk.com/contractorschatbot/$media
+!--------------------------Specific blocking filters--------------------------!
+! *** easylist:fanboy-addon/fanboy_notifications_specific_block.txt ***
+/firebase-messaging.js$script,domain=tribunnews.com
+||9to5terminal.com/push.js
+||abendpoint.com/dist/js/push.js
+||alerts.ndtv.com^
+||alerts.thedailystar.net^
+||alibaba.com/sw.js
+||annahar.com/assets/js/notifications.js
+||astian.org/?push_notification_sw
+||bdstatic.com/linksubmit/push.js
+||bigbangnews.com/sw.js
+||dailymail.co.uk/api/web-push-notification/
+||gadgetsnow.com/sw.cms
+||hindustantimes.com/messaging-sw.js
+||hindustantimes.com/sw.js
+||hindustantimes.com^*/ht-notification-
+||hulkprod.anm.co.uk/api/web-push-notification/
+||imyfone.com/*/notification/$script
+||indiatimes.com/pn/
+||iol.co.za/sw.js
+||kogan.com/sw.js
+||latestdeals.co.uk/sw.js
+||msn.com/bundles/v1/homePage/latest/experiences_conditional-banner
+||ndtv.com/js/breaking_pushalert_revised.js
+||ndtv.com/sw.js
+||newsukraine.rbc.ua/sworker.js
+||nookazon.com/firebase-messaging-sw.js
+||notify.hindustantimes.com^
+||push.cnnindonesia.com^
+||renaultsport.com/spip.php?page=sw.js
+||rottentomatoes.com/service-worker/sw.js
+||rt.com/homescreen-sw.js
+||scmp.com/sw.js
+||seattletimes.com/wp-content/plugins/st-user-messaging/$script
+||sportskeeda.com/js/production/web-notifications/
+||techwalla.com/push-service-worker.js
+||telegraphindia.com/akam-sw.js
+||timesnownews.com/sw.js
+||ultimedia.com/js/common/notification.js
+! International
+||0564.ua/assets/d6ade384/js/alertsWidget.js
+||ad-hoc-news.de/js/push.js
+||agazeta.com.br/assets/javascript/notification.js
+||cnnindonesia.com/sw.js
+||dcnews.ro/sm-
+||elpais.com.uy/utms.js
+||flashscore.fr^*/build/notifications.
+||futura-sciences.com/clientscript/push.js
+||horoscope.fr/notifications/
+||metrobilbao.eus/firebase-messaging-sw.js
+||push.neko-san.fr^
+||pushme.magellanotech.it^
+||tio.ch/js/api.push.js
+||tutto.tv/wp-content/plugins/plugin-notifiche-
+! Mobile Notifications
+!------------------------Specific element hiding rules------------------------!
+! *** easylist:fanboy-addon/fanboy_notifications_specific_hide.txt ***
+tbsnews.net###___tbspushdiv
+redbull.com###bottom-notifications
+thehindu.com,thehindubusinessline.com###gsi_overlay
+masrawy.com,yallakora.com###izooto-optin
+kizi.com###kizi-popover-dialog
+tdtube.net###main-fixed
+iol.pt###popover
+livenation.co.nz###push-notifications-popup
+google.com###pushdown
+nrl.com###vue-prompt-toast
+live.erinn.biz###win_appinstallhint
+alarabiya.net,indiatimes.com###wzrk_wrapper
+tenor.com##.LanguageBanner
+bing.com##.PopinAnimation
+airship.com##.PushNotification
+chaturbate.com##.RoomSignupPopup
+reddit.com##.XPromoBlockingModal
+reddit.com##.XPromoInFeed
+improvethenews.org##.__floater
+startpage.com##.a-gl-tp__gcsa
+nzherald.co.nz##.action-bar
+informationweek.com##.announcement
+tmz.com##.browser-notifications-prompt
+smocca.jp##.c-box-app_banner
+cnet.com##.c-globalNotification
+techwalla.com##.component-push-notification
+manutd.com##.custom-popup
+advfn.com##.cw-prompt-alert
+mediaexpert.pl##.dynamic-modal
+msn.com##.homepage-banner
+yummly.com##.house-promo-root
+ft.com##.instant-alert-cta
+recyclingproductnews.com##.modal-notifications
+techpowerup.com##.notice-content
+correiobraziliense.com.br##.noticia_notificacao
+laarena.com.ar##.notificacion-modal
+business-standard.com##.notification-col
+wnep.com##.page__notifications
+post-gazette.com##.pg-notifybox
+pnas.org##.pop-notification
+iclarified.com##.pushmodal
+startpage.com##.s-toast
+pnas.org##.signup-alert-ad
+ghpage.com##.tds-call-to-action1
+gptoday.net##.webpush_popup
+waze.com##.wz-downloadbar
+reddit.com##.xPromoAppStoreFooter
+chrome.google.com##[role="banner"] > div[class][role="dialog"][aria-labelledby="promo-header"]
+!! International
+segre.com###body_modal_5bNRsFSmILUgICbhc8pp
+diarimes.com###body_modal_mLuzd6bcGWwnVCvfwvBU
+mundodeportivo.com###gg-alert
+toy-people.com###notification_alert_container
+hesport.com###notification_pp
+animefire.net###page-mask
+interfax.ru##.popupNowReading
+!aerzteblatt.de###pushy
+formulatv.com###resetUI
+valoraanalitik.com###spopup
+animefire.net###sub_buttons
+animefire.net###sub_modal
+abendzeitung-muenchen.de###webpush-app
+muziker.at,muziker.be,muziker.bg,muziker.co.uk,muziker.com,muziker.cz,muziker.de,muziker.ee,muziker.es,muziker.fi,muziker.fr,muziker.gr,muziker.hr,muziker.hu,muziker.ie,muziker.it,muziker.lt,muziker.lu,muziker.lv,muziker.nl,muziker.nu,muziker.pl,muziker.pt,muziker.ro,muziker.se,muziker.si,muziker.sk###webpush-popup
+focus.de###wpBreakingNewsBanner
+rd.fi###zone-header-wrapper
+areena.yle.fi##.PauseRecommendations__PauseRecommendationsBackground-sc-1abti0d-0
+romait.it##.alert
+nu.nl##.breakingpush
+zillow.com##.cQZIoF
+kariyer.net##.download-app-wrapper
+actionnetwork.com##.follow-author__button
+dietplus.jp##.js-app-bg
+buyma.com##.js-app-download-url
+ziare.com##.modal-backdrop
+tuttoandroid.net,tuttotech.net##.modal-notifiche
+ziare.com##.modal__wp
+aamuposti.fi,heinavedenlehti.fi,helsinginuutiset.fi,iisalmensanomat.fi,ita-savo.fi,itahame.fi,joutsenolehti.fi,juvanlehti.fi,kaakonkulma.fi,kangasniemenlehti.fi,keski-hame.fi,keski-uusimaa.fi,keskilaakso.fi,koillis-savo.fi,kouvolansanomat.fi,ksml.fi,kymensanomat.fi,lansi-savo.fi,lansi-uusimaa.fi,lansisaimaa.fi,lansivayla.fi,loviisansanomat.fi,luumaenlehti.fi,mantsalanuutiset.fi,mattijaliisa.fi,miilu.fi,pielavesi-keitele.fi,pitajalainen.fi,pitajanuutiset.fi,puruvesi.net,savonsanomat.fi,seinajoensanomat.fi,sipoonsanomat.fi,sisa-savolehti.fi,soisalonseutu.fi,tamperelainen.fi,uusimaa.fi,uutis-jousi.fi,vantaansanomat.fi,viikkosavo.fi##.note--promoted
+jornaldenegocios.pt##.notificacao
+elconsolto.com,masrawy.com##.notification
+metroworldnews.com.br##.notification-subs
+almanar.com.lb##.notification-wrap
+sport.ro##.notification-wrapper
+ozmall.co.jp##.oz__headApp
+mail.ru##.ph-balloo
+actionnetwork.com##.promotion-card__container
+flvto.biz##.push-offer
+rd.fi##.region-sidebar-second-inner > .block-block
+diariandorra.ad##.subscribe-notifications
+thebeliever.net##.subscriber-popup-container
+news.mail.ru##.tooltip_width_huge
+actionnetwork.com##.user-component__trial
+sbt.com.br##.webpush
+bank.gov.ua##.widget-pushNotification
+kokemaenjokilaakso.fi##[class|="col-sm"] > .boksiharmaa
+zora.bg##cc-web-push-popup
+rtsplaneta.rs##ms-allow-notification-modal
+tt.com##ttwww-emarsys-push-notification
+cba24n.com.ar##view-firebase-prompt
+! Mobile app Notifications
+bhaskar.com###APP_INSTALL_POPUP_CONTAINER_ID
+thefastmode.com###ChromeAppPromotion
+paypal.com###PPAppDownloadBannerContainer
+newsmax.com###SMSbanner
+trakt.tv###android-beta-wrapper
+google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.cn,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.bz,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.nf,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.je,google.jo,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tk,google.tl,google.tm,google.tn,google.to,google.tt,google.vg,google.vu,google.ws###app > div.visible > div[role="dialog"][jsaction^="focusout:promotion.dismiss;"]
+m.calciomercato.com###app-download
+kriptomat.io###app-popup
+sports.yahoo.com###app-promo
+linkedin.com###app-upsell-container
+m.economictimes.com###appDwnldBanner
+m.aiscore.com###appLink
+brandeli.com###appbuner
+dtac.co.th###banner_dtacapp
+looopings.nl###blogAppbox
+gadgets360.com###bnotify
+nbcsandiego.com###branch-amp-journey
+deepl.com###callout-subtitle-chromeExtensionPromo
+castbox.fm###channelAppBar
+deepl.com###dl_app_banner_popup
+map.baidu.com###downloadnativepopupUlink
+economictimes.indiatimes.com###float_app_ET
+codeur.com###follow-modal
+kogan.com###footer-native-banner
+mercari.com###getTheAppFooter
+patreon.com###half-sheet-app-banner
+ventusky.com###header > .ii[href]
+aliexpress.com,aliexpress.us###header-float-banner
+web.quizknock.com###header_iosapp_link
+trakt.tv###ios-official-wrapper
+ivoox.com###jq-box-app
+kinarino.jp###js-appeal-top-banner
+euronews.com###js-smart-banner
+kinarino-mall.jp###js-view-in-app
+twitter.com###layers div[class="css-1dbjc4n r-l5o3uw r-97e31f"]
+zillow.com###local-app-upsell
+pixlr.com###mobile-variant
+oneindia.com###open-app
+windy.com###open-in-app
+geeksforgeeks.org###openInApp-modal
+timesnownews.com###openin-app
+zillow.com###pfs-upsell
+linkedin.com###protip-capsule
+cookpad.com###ru-promotion-banner
+mail.google.com###sdppromo
+cbsnews.com,yelp.com###smart-banner
+m.jpost.com###smartBanner
+2br.co.uk,deviantart.com,dw.com,eurosport.com,nzherald.co.nz,photobucket.com,spiegel.de,tvnz.co.nz###smartbanner
+mail.google.com###speedbump
+google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.cn,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.bz,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.nf,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.je,google.jo,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tk,google.tl,google.tm,google.tn,google.to,google.tt,google.vg,google.vu,google.ws###stUuGf
+vietnamairlines.com###store-notify
+newsgram.com###sw-wrapper
+observer-reporter.com###tncms-block-689490
+imgur.io##.Ad
+redfin.com##.AppInstallBannerWrapper
+reddit.com##.AppSelectorModal__body
+metservice.com##.Footer-section-image
+minne.com##.MinneAppBanner_root__di0Qk
+behance.net##.PrimaryNav-appLinkContainer-bhx
+airasia.com##.QRPopUp__QRPopUpWrapper-sc-8gx7le-0
+www.google.com##.QWEVge
+imgur.io##.ShareButtons-backdrop
+imgur.io##.ShareButtons-wrapper
+behance.net##.SimplifiedPushToMobilePrompt-root-Sct
+beebs.app##.SmartAppBanner-module__container___sK72V
+audi-sport.net##.TapatalkBanner_Container
+reddit.com##.TopNav__promoButton
+lbcgroup.tv##.TopicPresentation
+tenor.com##.UpsellPill
+reddit.com##.XPromoBottomBar
+duolingo.com##._15MEM
+grammarly.com##._16m8p-button
+bigbasket.com##._1dBfC
+m.economictimes.com##._2rMIm
+wifiman.com##._3BIlj
+asos.com##._3bNxItQ
+instagram.com##._acc8
+m.webtoons.com##._appDownloadPopup
+m.apkpure.com##.aegon-down-item
+smartfren.com##.alert-download
+skysports.com##.android-banner
+filmix.ac##.android-telegram-main
+coincodex.com##.app
+washingtonpost.com##.app-adoption-banner
+m.calciomercato.com,mygwork.com,similarweb.com,spooncast.net,substack.com,whosampled.com##.app-banner
+mygwork.com##.app-banner--overlay
+republika.rs##.app-box
+financialexpress.com,indianexpress.com##.app-btn
+klook.com##.app-download
+aljazeera.com,ebay.com##.app-download-banner
+sportskeeda.com##.app-download-modal
+gumtree.com.au##.app-download-wrapper
+news.yahoo.com,tracker.gg##.app-promo
+atlasobscura.com##.app-store-heading
+banggood.com##.app-top-bar
+banggood.com##.app-top-height
+makemytrip.com##.appDnldCnt
+bleacherreport.com##.appInstallButton
+kijiji.ca##.appMarketingWrapper-909710043
+oilprice.com##.app_download_ad
+izi.travel##.app_message
+theepochtimes.com##.app_promo
+cookpad.com##.app_promotion
+cookpad.com##.appinstall
+atlasobscura.com##.apple-store-icon
+re-katsu.jp##.appli
+flightradar24.com##.applink-container
+happytv.rs##.apps-download
+qatarairways.com##.appstore
+ny1.com##.article-app-prompt
+msn.com##.articlePage_continueReadingButtonPrimary-DS-EntryPoint1-1
+nltimes.nl##.ath-phone
+castbox.fm##.banner
+gibiru.com##.banner-button
+animeanime.global##.banner-click-app
+startpage.com##.banner-top
+m.yelp.com##.banner__09f24__A12gg
+coinpaprika.com##.banners-wrapper
+deepl.com##.bg-deepl-blue
+canberratimes.com.au##.bg-gray-100.block
+breakingnews.ie##.bg-gray-900
+ivoox.com##.bg-lightest.wrapper
+meetup.com##.bg-midnightDark.align-center.flex
+kickstarter.com##.bg-navy-200
+evasoes.pt##.bloco_nl
+m.bilibili.com##.bottom
+banggood.com##.bottom-app-contain
+map.baidu.com##.bottom-banner-float
+commaful.com##.bottom-section-signup
+al-monitor.com##.breaking-news-alert
+warbyparker.com##.c-hYggeK
+dailywire.com##.c-link
+cricbuzz.com##.cbz-leaderboard-banner
+clayandbuck.com##.cnb-download-app-at-mobile
+coinpaprika.com##.coins-mobile-banner
+kijiji.ca##.container-3757608091
+folhetospromocionais.com##.corner-popup-container
+cookpad.com##.css-1azakc
+neeva.com##.cta-search-result-result__extensionCTAContainer-4d4uV
+actionnetwork.com##.cta-wrapper__child
+kuow.org##.cta_download
+expedia.at,expedia.co.id,expedia.co.in,expedia.co.jp,expedia.co.kr,expedia.co.nz,expedia.co.th,expedia.co.uk,expedia.com,expedia.com.ar,expedia.com.au,expedia.com.hk,expedia.com.sg,expedia.de,expedia.dk,expedia.es,expedia.fi,expedia.fr,expedia.it,expedia.nl,expedia.no,expedia.se,hotels.com,vrbo.com##.customer-notification-container
+ivoox.com##.d-flex.dark-gray-banner
+duckduckgo.com##.ddg-extension-hide
+dailyfx.com##.dfx-bottomFixedSlot
+supercluster.com##.doormat__overlay
+m.webtoons.com##.downapp_area2
+diariolasamericas.com,express.co.uk##.download-app
+student.com##.download-banner
+m.bilibilicomics.com##.download-btn
+coincodex.com##.download-coincodex-app
+podbean.com##.download-dialog
+bisnis.com##.download-disini
+metar-taf.com##.download-info
+m.bilibilicomics.com##.download-popup
+caixinglobal.com##.downloadAPP
+cryptonews.net##.download_the_app
+zomato.com##.drRXJW
+al-sharq.com##.dwn-app
+actionnetwork.com##.e7h0b9a0
+probuilds.net##.experiment-height-expanded
+capitaloneshopping.com##.extension-modal
+startpage.com##.extension-store-widget-container
+m.bilibili.com##.fe-ui-open-app-btn
+marokko.nl##.floatbar
+actionnetwork.com##.follow-author__button
+cookpad.com##.footer-1azakc
+myanimelist.net##.footer-app
+pink.rs##.footer-apps
+news24.com##.footer__app-links
+thepinknews.com##.footer__top-bar
+goobike.com##.gb_appbnrs
+boredpanda.com,citizen.com,coincodex.com##.get-app
+imgur.io##.get-app-block
+coincodex.com##.get-app-wrapper
+citizen.com##.get-modal.modal
+9gag.com##.get-the-app-banner
+hindustantimes.com##.getApp
+moneycontrol.com##.get_app_sticky_btn
+booking.com##.gta-link-track
+m.hoyolab.com##.guide-download-drawer
+guides.gamepressure.com##.guide19-app-cc
+rent.com##.h-100
+kiwi.com##.hXbfoy
+coinunited.io##.home-div-block-app-2
+canada411.ca##.hubapp
+liputan6.com##.iframe-widget-mobile-gateway
+gumtree.com##.image-app-banner
+shazam.com##.info
+vanceai.com##.install-app
+dideo.tv##.install-app-banner
+trip.com##.install-bottom
+news18.com##.instlsapp_fxd
+terabox.com##.introduce-sticky-btn
+tanp.jp##.js-appDownloadHeaderBanner
+duckduckgo.com##.js-open-in-app
+my.mintmobile.com##.justify-content-end.rounded-1.g-0.p-3
+sauna-ikitai.com##.l-headerApp
+ahchealthenews.com##.livewell-widget
+klarna.com##.ljtbes
+gayemagazine.com##.lvMF7
+m.bilibili.com##.m-video2-awaken-btn
+webnovel.com##.m_down_app_wrap
+imyfone.com##.magicmic-popu-banner
+castbox.fm##.main-body-banner > .box
+merckmanuals.com,msdmanuals.com##.marketing-block-wrapper
+inoreader.com##.mid_hero
+google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.cn,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.bz,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.nf,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.je,google.jo,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tk,google.tl,google.tm,google.tn,google.to,google.tt,google.vg,google.vu,google.ws##.ml-promotion-container
+uinterview.com,usbair.com##.mobile-app
+kariyer.net##.mobile-app-download
+fortnitetracker.com##.mobile-app-preview
+discogs.com##.mobile-apps
+disk.yandex.com,disk.yandex.ru##.mobile-badges
+speedtest.net##.mobile-pretest
+speedtest.net##.mobile-pretest-2
+reddit.com##.mobile-web-redirect-bar
+malaysiaairlines.com##.mobileapp
+airtelkenya.com##.modal-content-popup
+speedtest.net##.modal-overlay
+moovitapp.com##.moovit-banner
+m.bilibili.com##.mplayer-widescreen-callapp
+google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.cn,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.bz,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.nf,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.je,google.jo,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tk,google.tl,google.tm,google.tn,google.to,google.tt,google.vg,google.vu,google.ws##.nWi0wf.kDTz5c
+skynews.com.au##.nca-et-rendered
+mobile.here.com##.newbanner
+myvi.in##.newgetAppsec
+wowhead.com##.notifications-dialog
+outsideonline.com##.o-promo-module
+france24.com##.o-pwa-ah2s
+linkedin.com##.omnibanner
+india.com,oneindia.com##.open-app
+tinyview.com##.open-app-container
+flightradar24.com##.open-in-app-button
+m.moboreader.com##.openApp
+hindustantimes.com##.openAppButton
+cgtn.com##.openBtn
+m.bilibili.com##.openapp-dialog
+livemint.com##.openinApp
+livemint.com##.openinApp2
+newegg.com##.our-apps
+satellitemap.space##.overlay-open-in-app-button
+kinarino-mall.jp##.p-appeal-top-banner__container
+sbs.com.au##.pane-bean-in-house-ad
+islambook.com##.panel-danger
+dahuasecurity.com##.partners
+shazam.com##.phones
+pocketnet.app##.popup
+m.bilibilicomics.com##.popup-wrapper
+m.bilibilicomics.com##.primary.action-bar
+paveldogreat.github.io##.promo
+newson.us##.promoHeader
+pizzahut.co.nz##.promote-app
+beermenus.com##.pure-button-round
+hostelworld.com##.qr-wrapper
+quora.com##.qu-bg--blue.qu-full
+twitter.com##.r-97e31f.r-l5o3uw.css-1dbjc4n
+google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.cn,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.bz,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.nf,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.je,google.jo,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tk,google.tl,google.tm,google.tn,google.to,google.tt,google.vg,google.vu,google.ws##.rbgrBd div[role="dialog"] > div[jsaction^="settings."] button[jsaction^="settings.useApp;"]
+medscape.com##.rel-links-media
+speedtest.net##.result-area-ad
+rekhta.org##.rt_AppBtn
+ticketmaster.com##.sc-16ox40n-1.eDwNYV
+geekdashboard.com##.section--download
+fdownload.app##.section-app-fb
+cbn.com##.section-region-sidebar
+investing.com##.seeThisInPopup
+comicsvalley.com##.sgpb-popup-dialog-main-div-wrapper
+oneplus.com##.side-download-dialog
+the42.ie,thejournal.ie##.sidebar > .widget
+sportskeeda.com##.sidebar-app-download
+glas-javnosti.rs##.skini
+crypto.com,zacks.com##.smart-banner
+minne.com##.smartAppBanner
+forfun.com,imgur.com,kaltura.com,sowetanlive.co.za,turkishairlines.com##.smartbanner
+cnnindonesia.com##.smartbanner_new
+whosampled.com##.spSlot
+amazon.com##.sparkle-container
+m.moovitapp.com##.splash-footer
+inquisitr.com##.stay-in-touch
+airtel.com##.sticky-section-top
+www.google.com##.tCroyc
+m.tribunnews.com##.tapp-banner
+trip.com##.tcp-h5-install-banner
+trip.com##.tcp-h5-install-popup
+techgenyz.com##.td-fix-index.tds-button
+telegram.org##.tg_try_desktop
+twitter.com##.toast.client_prompt
+hs.fi##.toast__background--app-marketing
+fatmap.com##.top-0.sticky
+zaim.net##.top-fix
+m.investing.com##.topHeader--signup
+fortnitetracker.com##.trn-site-appbar
+fortnitetracker.com##.trn-site-appbar__apps
+tropter.com##.tropter-app-teaser
+expedia.com##.uitk-bottom-sheet
+wondershare.com##.upload-box
+reddit.com##.upsell_banner
+9gag.com##.use-app
+actionnetwork.com##.user-component__trial-button
+ventusky.com##.vj
+walmart.ca##.w_6wTF
+walmart.com##.w_XgwP
+gadgets360.com##.web_dialog
+linkedin.com##.windows-app-upsell
+bisnis.com##.wrapper__ads-download
+ny1.com##.wxAlertBar
+oculus.com##.xz9dl7a.x83z2og.x12qgom3
+tumblr.com##.y8Hml
+i.redd.it,reddit.com##[bundlename="bottom_bar_xpromo"]
+travala.com##[class*="BannerApp_container"]
+qwant.com##[class*="DownloadQwantApp-module_"]
+qwant.com##[class*="MobileAppToast-module_"]
+substack.com##[class*="frontend-components-SubscribePrompt"]
+reddit.com##[data-testid="bottom-cell-wrapper"]
+reddit.com##[data-testid="bottom-sheet-upsell-wrapper"]
+weatherbug.com##[href="/appdownload"]
+wpxi.com##[href="/mobile-apps/"]
+theapplepost.com##[href^="https://apps.apple.com/app/"]
+reddit.com##[slot="use-app"]
+ozmall.co.jp##[style="display:table;background:#f3f3f3;padding:3%;"]
+google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.cn,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.bz,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.nf,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.je,google.jo,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tk,google.tl,google.tm,google.tn,google.to,google.tt,google.vg,google.vu,google.ws##body > div[style="min-height: 100%; display: none;"] + div[style="visibility: visible;"] > div[jsowner]
+reddit.com##bottom-bar[app-link-params]
+areena.yle.fi##button[aria-label="Jaa ohjelma"]
+weatherbug.net##display-ad-widget
+m.bilibili.com##div[class*="-openapp"]
+genius.com##div[class*="AndroidBannermobile_"]
+thescore.com##div[class*="GetTheAppModal_"]
+giphy.com##div[class*="OpenInAppContainer-"]
+thescore.com##div[class^="GetTheApp__fullScreenContainerScrolldown--"]
+m.aliexpress.ru##div[class^="PseudoSmartBanner_"]
+kraken.com##div[class^="fc-94f32b27"]
+barandbench.com##div[class^="header-two-m__download-links_"]
+fedex.com##fedex-smart-banner
+twitter.com##header[role="banner"] > ._3oxnid3o._3f2NsD-H
+9animetv.to##img[alt="App Download"]
+google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.cn,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.bz,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.nf,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.je,google.jo,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tk,google.tl,google.tm,google.tn,google.to,google.tt,google.vg,google.vu,google.ws##mobile-promo
+weatherbug.net##smart-app-banner
+fedex.com##trk-shared-smart-app-banner
+voicy.jp##v-sp-download
+reddit.com##xpromo-top-button
+! Advanced element hiding rules for Adblock Plus
+analyticsindiamag.com#?#.elementor-section-content-middle[data-settings="{\"background_background\":\"classic\"}"]:-abp-has(a[href^="https://play.google.com/store/apps"])
+
+! *** easylist:fanboy-addon/fanboy_notifications_specific_uBO.txt ***
+downace.com##+js(acis, requestPermission)
+news18.com##+js(acis, serviceworker.register)
+! International
+rd.fi##.nivoSlider:remove()
+puuilo.fi##.cf-container-wrapper
+puuilo.fi##body:style(overflow: auto !important)
+! autoevolution.com
+autoevolution.com###notif_asker_div
+autoevolution.com##body,html:style(height: auto !important; overflow: auto !important)
+! phonearena.com
+phonearena.com###pa-survey-modal
+phonearena.com##.pa-modal-backdrop
+phonearena.com##body:style(overflow: auto !important; position: initial !important;)
+! ask.fm (forced app download / login page) https://github.com/easylist/easylist/pull/12751
+ask.fm##.lightbox_overlay
+ask.fm##body:style(overflow: auto !important)
+! reddit.com (mobile)
+reddit.com##.XPromoBlockingModal
+reddit.com##.XPromoPopup__overlay
+reddit.com##.XPromoBlockingModalRpl
+reddit.com##.PreviewDrawer
+reddit.com##.XPromoPopup
+reddit.com##.XPromoPill
+reddit.com##shreddit-experience-tree
+reddit.com##+js(aeld, block-body-scrolling)
+reddit.com##body.scroll-disabled:style(overflow: visible!important; position: static!important;)
+reddit.com##.XPromoPopupRpl
+reddit.com##body:style(pointer-events:auto !important;)
+reddit.com##.XPromoInFeed
+amp.reddit.com##.AppSelectorModal__body
+reddit.com##+js(set-local-storage-item, xpromo-consolidation, 1)
+reddit.com##+js(rc, scroll-disabled, body, stay)
+amp.reddit.com##.upsell_banner
+!#if env_mobile
+reddit.com##body:style(overflow: auto !important;)
+!#endif
+! tiktok
+tiktok.com##+js(set-session-storage-item,webapp_first_open_cta, 1)
+tiktok.com##.e1pecv674.css-99ed1t-DivFooterGuide
+tiktok.com##.e1x4pa920.css-18fyv6p-DivFloatButtonWrapper
+! lightnovelworld.com
+lightnovelworld.com###lnwappmsg
+lightnovelworld.com##html:style(overflow: auto !important;)
+! bestbuy.com (mobile UA open-app)
+bestbuy.com##+js(set-local-storage-item, smartBannerDismissed, 1)
+bestbuy.com###smartbannerContainer
+bestbuy.com##body:style(margin-top:0px !important)
+! expedia.com
+expedia.at,expedia.co.id,expedia.co.in,expedia.co.jp,expedia.co.kr,expedia.co.nz,expedia.co.th,expedia.co.uk,expedia.com.ar,expedia.com.au,expedia.com.hk,expedia.com.sg,expedia.de,expedia.dk,expedia.es,expedia.fi,expedia.fr,expedia.it,expedia.no,expedia.se,hotels.com,expedia.nl,expedia.com###app-layer-customer-notification-centered-sheet-dialog
+expedia.at,expedia.co.id,expedia.co.in,expedia.co.jp,expedia.co.kr,expedia.co.nz,expedia.co.th,expedia.co.uk,expedia.com.ar,expedia.com.au,expedia.com.hk,expedia.com.sg,expedia.de,expedia.dk,expedia.es,expedia.fi,expedia.fr,expedia.it,expedia.no,expedia.se,hotels.com,expedia.nl,expedia.com##body,html:style(overflow: auto !important; position: initial !important;)
+! rappler.com
+asia.nikkei.com,businesspost.ie,rappler.com##.tp-modal
+asia.nikkei.com,businesspost.ie,rappler.com##.tp-backdrop
+asia.nikkei.com,businesspost.ie,rappler.com##body:style(height: auto !important; overflow: auto !important)
+! flipboard.com (in-app overlay)
+!flipboard.com##.modal-overlay
+!flipboard.com##body:style(overflow: visible!important; position: static!important;)
+!flipboard.com##.outbound-link.button--primary
+! behance.net (in-app overlay)
+behance.net##.js-vue-mobile-app-upsell
+behance.net##body,html:style(overflow: auto !important; position: initial !important;)
+behance.net##.PrimaryNav-appLinkContainer-bhx
+! ifunny (in-app overlay)
+ifunny.co##.aq4y._0sJI
+ifunny.co##body,html:style(overflow: auto !important; position: initial !important;)
+! sprintmedical.in
+sprintmedical.in##.react-responsive-modal-root
+sprintmedical.in##body:style(height: auto !important; overflow: auto !important)
+! trip.com (app download overlay)
+trip.com##.tcp-h5-install-pop
+trip.com##body:style(overflow: auto !important; position: initial !important;)
+! dailymail.co.uk (popup notification)
+! dailymail.co.uk##+js(aopr, DM.later)
+! player.fm
+player.fm##.bottom-promo-overlay
+player.fm##.bottom-promo
+player.fm##body,html:style(overflow: auto !important; position: initial !important;)
+! wunderground.com
+wunderground.com##+js(rc, enable-sda, body, stay)
+! m.economictimes.com
+m.economictimes.com###prominentOverlay
+m.economictimes.com##body,html:style(overflow: auto !important; position: initial !important;)
+! m.yelp.com
+m.yelp.com,m.yelp.co.uk,m.yelp.ca,m.yelp.com.au,m.yelp.co.nz,m.yelp.dk,m.yelp.de,m.yelp.fi,m.yelp.cz,m.yelp.fr,m.yelp.es,m.yelp.pt,m.yelp.it,m.yelp.no,m.yelp.se,m.yelp.ie,m.yelp.com.tr,m.yelp.com.br,m.yelp.nl,m.yelp.com.mx,m.yelp.co.jp,m.yelp.com.tw,m.yelp.be##div[class^="overlay__09f24"]
+m.yelp.com,m.yelp.co.uk,m.yelp.ca,m.yelp.com.au,m.yelp.co.nz,m.yelp.dk,m.yelp.de,m.yelp.fi,m.yelp.cz,m.yelp.fr,m.yelp.es,m.yelp.pt,m.yelp.it,m.yelp.no,m.yelp.se,m.yelp.ie,m.yelp.com.tr,m.yelp.com.br,m.yelp.nl,m.yelp.com.mx,m.yelp.co.jp,m.yelp.com.tw,m.yelp.be##body,html:style(overflow: auto !important; position: initial !important;)
+m.yelp.com,m.yelp.co.uk,m.yelp.ca,m.yelp.com.au,m.yelp.co.nz,m.yelp.dk,m.yelp.de,m.yelp.fi,m.yelp.cz,m.yelp.fr,m.yelp.es,m.yelp.pt,m.yelp.it,m.yelp.no,m.yelp.se,m.yelp.ie,m.yelp.com.tr,m.yelp.com.br,m.yelp.nl,m.yelp.com.mx,m.yelp.co.jp,m.yelp.com.tw,m.yelp.be##[aria-label*="Download the Yelp app"]
+m.yelp.com,m.yelp.co.uk,m.yelp.ca,m.yelp.com.au,m.yelp.co.nz,m.yelp.dk,m.yelp.de,m.yelp.fi,m.yelp.cz,m.yelp.fr,m.yelp.es,m.yelp.pt,m.yelp.it,m.yelp.no,m.yelp.se,m.yelp.ie,m.yelp.com.tr,m.yelp.com.br,m.yelp.nl,m.yelp.com.mx,m.yelp.co.jp,m.yelp.com.tw,m.yelp.be##[data-testid="OpenAppButton"]
+! thedesignlove.com
+thedesignlove.com##.cp-overlay
+thedesignlove.com##body,html:style(overflow: auto !important; position: initial !important;)
+! linkedin.com
+linkedin.com##.promo-bottom-sheet
+linkedin.com##body:style(overflow: auto !important; position: initial !important;)
+! imgur.io
+imgur.io##.SeeImgurOIA-overlay
+imgur.io##.SeeImgurOIA-container
+imgur.io##body:style(overflow: auto !important; position: initial !important;)
+! coinpaprika.com (app)
+coinpaprika.com##.coins-promo
+coinpaprika.com##body:style(overflow: auto !important; position: initial !important;)
+! slickdeals.net (app)
+slickdeals.net##.sdModalOverlay
+slickdeals.net##.bottomBarContainer
+slickdeals.net##body:style(overflow: auto !important; position: initial !important;)
+! canva.com (mobile app, and scroll fix)
+canva.com##.BB_TDQ[style="height: auto; max-height: 66vh;"]
+canva.com##body:style(overflow: auto !important; position: initial !important;)
+! ebay (scanner app on load)
+ebay.com##.pc-dweb
+ebay.com##html:style(overflow: auto !important; position: initial !important;)
+! audius.co
+audius.co##[class*="AppRedirectPopover_container_"]
+audius.co##+js(rc, scrollLock, , stay)
+audius.co##body:style(overflow: scroll !important)
+! cnet.com (shopping popup)
+cnet.com##.c-globalModal
+cnet.com##.c-shoppingExtModal
+cnet.com##.modal-backdrop
+cnet.com##.modalSelector
+cnet.com##body:style(height: auto !important; overflow: auto !important)
+! simpleswap.io (mobile UA)
+simpleswap.io##.iRXLZi
+simpleswap.io##body,html:style(overflow: auto !important; position: initial !important;)
+! m.webtoons.com
+m.webtoons.com##.pop_download_home
+m.webtoons.com##.dim
+m.webtoons.com##body,html:style(overflow: auto !important; position: initial !important;)
+! 9gag
+9gag.com##.open-in-app
+9gag.com##body:style(overflow: auto !important;)
+! insider.com,businessinsider.com
+insider.com,businessinsider.com##.in-app-banner
+insider.com,businessinsider.com##body:style(overflow: auto !important; position: initial !important;)
+insider.com,businessinsider.com##.app-button
+! makemytrip.com (mobile)
+makemytrip.com##.appDnldOffers
+makemytrip.com##.overlay-wrapper
+makemytrip.com##body:style(overflow: unset !important)
+! thestar.com
+thestar.com##.kumulos-background-mask
+thestar.com##.kumulos-prompt
+thestar.com##body,html:style(overflow: auto !important; position: initial !important;)
+thestar.com##+js(rc, kumulos-background-mask-blur, , stay)
+! sports.ndtv.com
+sports.ndtv.com###__cricketsubscribe
+sports.ndtv.com###overlaybtn
+sports.ndtv.com##body,html:style(overflow: auto !important; position: initial !important;)
+! inews.hket.com
+inews.hket.com##.app-redirect-panel
+inews.hket.com##+js(rc, no-scroll, html, stay)
+inews.hket.com###app-floating-button
+! jp-m.banggood.com (remove top empty space on mobile)
+jp-m.banggood.com##+js(rc, show-app-bar, , stay)
+! realestate.co.nz
+realestate.co.nz##.z-overlay
+realestate.co.nz##body:style(height: auto !important; overflow: auto !important)
+! miravia.es
+miravia.es###g_download_bar
+miravia.es##html:style(--g-header-top-pos: 0vw !important;)
+! instacart.com
+instacart.com###native-app-upsell-interstitial
+instacart.com##body:style(height: auto !important; overflow: auto !important)
+! emailnator.com
+emailnator.com##.modal
+emailnator.com##.modal-backdrop
+emailnator.com##+js(rc, modal-open, , stay)
+emailnator.com##html,body:style(position: static !important; overflow: auto !important; width: auto !important;)
+emailnator.com##.top-banner
+! m.investing.com (Collapse top)
+m.investing.com##.withAppBanner:style(top:0 !important)
+! vrbo.com
+vrbo.com###app-layer-customer-notification-centered-sheet-dialog
+vrbo.com##+js(rc, has-uitk-sheet, body, stay)
+! similarweb.com (Collapse top)
+similarweb.com##+js(rc, app-banner-parent, body, stay)
+similarweb.com##.app-header:style(top:0 !important)
+! eksisozluk111.com
+eksisozluk111.com###app-suggestion-container
+eksisozluk111.com##body,html:style(overflow: auto !important; position: initial !important;)
+! mydramalist.com
+mydramalist.com##+js(rc, smartbanner-active, body)
+! smocca.jp
+smocca.jp##+js(set, history.state, undefined)
+! patreon.com (mobile)
+patreon.com##+js(aeld, touchmove, preventDefault)
+!------------------------Rules for international sites------------------------!
+!---------------------------------Allowlists----------------------------------!
+! *** easylist:fanboy-addon/fanboy_notifications_allowlist.txt ***
+@@||bostonherald.com^*/webpush.js$script,~third-party
+@@||braze.com/api/$domain=deezer.com
+@@||forums.opera.com/assets/src/modules/notifications.js$~third-party
+@@||inevent.com/js/wizard/pushNotification.js$script,~third-party
+@@||learner.mycreds.ca/assets/js/modules/notifications.min.js$~third-party
+@@||ledevoir.com/js/web-push.js$script,~third-party
+@@||oakley.com^*/notifications.js$~third-party
+@@||paste.crdroid.net/assets/js/modules/notifications.js$script,~third-party
+@@||snrcdn.net/sdk/3.0/synerise-javascript-sdk.min.js$domain=komputronik.pl
+@@||st.mycdn.me/static/*/WebPush.js$script,domain=ok.ru
+@@||webpush.jp/js/browserpushv3.js$domain=zakzak.co.jp
+! Mobile Notifications
+@@||anadolu.edu.tr/assets/js/jquery.smartbanner.js$~third-party
+@@||assure.ameli.fr^*/smart-app-banner.js$~third-party
+@@||mafia.ua/js/jquery.smartbanner.js$script,~third-party
+@@||mirage.ru/js/jquery.smartbanner.js$script,~third-party
+
+! *** easylist:fanboy-addon/fanboy_notifications_allowlist_general_hide.txt ***
+audionetwork.com,carlsenfritzoe.no#@##push-container:not(body):not(html)
+mega.nz#@#.notification-button
+joinhandshake.com,online.rsb.ru#@#.notifications-wrapper
+asbclassic.co.nz,envirowaste.co.nz,harmoney.co.nz,harmoney.com.au,mstream.io,rocketlabusa.com,underconsideration.com#@#.push-wrap:not(body):not(html)
+arabbank.com.au,color4care.co.uk,color4care.dk,color4care.fi,color4care.no,operon.pl,vardvaskan.se#@#.push-wrapper:not(body):not(html)
+rescuetime.com#@#.web-notification
+! Mobile notifications
+mobi24.net#@#a[href^="http://www.mobi24.net/"]
+mobi24.net#@#a[href^="https://www.mobi24.net/"]
diff --git a/uAssets/thirdparties/easylist/easylist-social.txt b/uAssets/thirdparties/easylist/easylist-social.txt
new file mode 100644
index 0000000..dbb32f1
--- /dev/null
+++ b/uAssets/thirdparties/easylist/easylist-social.txt
@@ -0,0 +1,14520 @@
+[Adblock Plus 2.0]
+! Title: EasyList – Social Widgets
+! Last modified: %timestamp%
+! Expires: 7 days (update frequency)
+! *** easylist:template_header.txt ***
+!
+! Please report any unblocked adverts or problems
+! in the forums (https://forums.lanik.us/)
+! or via e-mail (easylist@protonmail.com).
+!
+! Homepage: https://easylist.to/
+! Licence: https://easylist.to/pages/licence.html
+! GitHub issues: https://github.com/easylist/easylist/issues
+! GitHub pull requests: https://github.com/easylist/easylist/pulls
+!
+!--------------------------General blocking rules-----------------------------!
+! *** easylist:fanboy-addon/fanboy_social_general_block.txt ***
+-buttons-facebook.
+-buttons-twitter.
+-facebook-likeButton-
+-facebook-share.
+-facebook-widget.
+-fb-share.
+-fbpopup.
+-follow-icon-
+-follow-icons.
+-follow-us-icons.
+-followicons.
+-footer-igram.
+-footer-social-
+-footer-social.
+-footer-youtube-
+-footer_social.
+-redes-facebook.
+-redes-gplus.
+-redes-instagram.
+-redes-pinteres.
+-redes-twitter.
+-redes-youtube.
+-share-bar/$~stylesheet
+-share-buttons2.
+-share-buttons3/$~stylesheet
+-share-save/
+-share-sprite-
+-share-sprite.
+-share-tools-
+-share-twiiter.
+-share-whatsapp.
+-sharebar-
+-sharebar.
+-ShareButton2.
+-ShareButton_
+-sharebuttons_
+-shareit.
+-sharetools-
+-shareWidget.
+-sharing-popin.
+-slide-social-
+-social-panel.
+-social-panel/
+-social-popup-
+-social-post-sharer/$~stylesheet
+-social-sidebar.
+-Social-Sidebar/
+-social-slider/
+-social-twitterhover-
+-sociaux.$domain=~centres-sociaux.fr
+-sprite-social-
+-sticky-social/
+-subscribe-social.
+-toolbar-social.
+-twitterbirdsprite.
+-webicon-facebook-
+-webicon-linkedin-
+-webicon-twitter-
+-webicon-youtube-
+.easyshare:
+.facebookLikePopUp.
+.fb-like/
+.fbshare.js
+.mobile-share.
+.pluckCount.
+.share.dossierheader.
+.share.lead.
+.share.utils.
+.shareaholic-
+.sharebar.js
+.sharecount.
+.shareCounts.
+.sharetool.
+.sharing.js
+.simpleshare.
+.social/share/
+.sociallocker.
+/a2a_share_
+/accesspress-social-
+/actionsnshare/*
+/add-mymsn2.
+/addthis-stumble.
+/addthis_horizontal.
+/addthis_widget.
+/addtoany-
+/addtoany.
+/addtogoogle.
+/addtomyyahoo4.
+/advanced-social-widget/*$~stylesheet
+/advinstagram/*
+/aI_sns.
+/amp-social-
+/aolshare/*
+/app/social.
+/appSocialShare/*
+/article-shares.
+/article-social/*
+/ArticleSocialShare.
+/ashare.js
+/ayoshare.js
+/badge_twitter.
+/banner-social.
+/banner/social/*
+/banniere_facebook_
+/bookmark/fbk.
+/bookmarksite_google.
+/bottom-facebook.
+/bottom-twitter.
+/bottone-condividi.
+/bouton-fb.
+/bouton-youtubue.
+/bt_delicious.
+/bt_dmotion_
+/bt_g_twitter_
+/bt_share_
+/btn/follow?
+/btn_share_
+/btnFoursquare.
+/btnShareSprite.
+/btnsSocialMedia.
+/button1-share.
+/button_custom_twitter.
+/button_share.
+/button_social_
+/bwSocialIcons.
+/cevhershare.js
+/chs/share/*
+/cht/share/*
+/circle_share.
+/cnw.share.
+/commentshareicons.
+/common/sns/*
+/common/sns_
+/commons/social/*
+/commonSprites/social/*
+/cool-share/plugin.js
+/diggdigg-floating-bar.js
+/ej-socialslider/static/slideout.js
+/emailaddthis.
+/facebook-fan.
+/facebook-follow-
+/facebook-footer-
+/facebook-page-popup-cadence/*$~stylesheet
+/facebook-page-promoter-lightbox/includes/launch/launch.min.js
+/facebook-pagelike-widget/*
+/facebook-popup-
+/facebook-side.
+/facebook-vertical.
+/facebook/likes?
+/facebook_badge-
+/facebook_badge.
+/facebook_footer.
+/facebook_like_button.
+/facebook_ppd.
+/facebook_sidebar.
+/facebook_social.
+/Facebook_Social_
+/facebook_top_icon.
+/facebookbadge.
+/facebookBtmIcon.
+/FacebookFanWidgetFrame.
+/facebookFooterIcon-
+/facebookHeader.
+/facebooksharebutton.
+/FacebookShares?
+/facebooksmall2.
+/facebooksocialplugins.
+/facebooksocialplugins/*
+/facebooksquare.
+/FacebookTimeline?
+/facebooktrafficdriver.
+/facebookwidget.
+/fb-onmouseover.
+/fb-pixel.js
+/fb-post.
+/fb-traffic-pop.
+/fb-traffic-pop/*
+/fb-widget.
+/fb_modeles.css
+/fb_side.
+/fb_small.
+/fb_subscribe.
+/fbcirclebtn.
+/fbfooter.
+/fblikefp.
+/fbook-share-
+/fbpop.js
+/fbpromo.
+/fbshare.
+/fbshare2.
+/fbsubscribe.
+/feedburner_64.
+/FeedlyButton_
+/feedSprite_
+/floating-social/*
+/floating-wpp.min.
+/flw-twitter.
+/follow-facebook.
+/follow-footer-
+/follow-gplus.
+/follow-icon-
+/follow-icons.
+/follow-linkedin.
+/follow-mobile.
+/follow-on-twitter.
+/follow-twitter-
+/follow-twitter.
+/follow-us-icon-
+/follow-us-icons.
+/follow-us-on-
+/follow-us-twitter.
+/follow-us.$~stylesheet
+/follow-widget-
+/follow-widget.
+/follow-with-google-
+/follow-youtube.
+/follow/Facebook-
+/follow/Twitter-
+/follow/YouTube-
+/follow_instagram.
+/followusontwitter.
+/footer-facebook-
+/footer-facebook.
+/footer-fb-
+/footer-google-
+/footer-google.
+/footer-instagram-
+/footer-Instagram.
+/footer-linkedin-
+/footer-linkedin.
+/footer-pintrest.
+/footer-social
+/footer-twitter-
+/footer-twitter.
+/footer-vk-
+/footer-youtube-
+/footer/facebook-
+/footer/facebook.
+/footer/facebook_
+/footer/instagram-
+/footer/instagram.
+/footer/linkedin.
+/footer/pinterest.
+/footer/social-
+/footer/social/*
+/footer/social_
+/footer/twit-
+/footer/twitter-
+/footer/twitter.
+/footer/twitter_
+/footer/youtube.
+/footer_facebook.
+/footer_pinterest-
+/footer_sociale.
+/footer_socials_
+/footer_twitter.
+/footer_twitter_
+/footer_youtube.
+/footerFacebookIcon.
+/footerSocialIcons.
+/footerSocialNet2.
+/footerSocialSprite.
+/footerTwitterIcon.
+/gadgets/Social/*
+/gallery/social/*$image
+/gen-share-master/assets/js/frontend/application.min.js
+/GetPocketButton_
+/gfx/socials/*
+/gg-share.
+/gigya-socialize-for-wordpress/*$~script,~stylesheet
+/gm-button-social.
+/graphics/share/*
+/guys_social.
+/Handlers/Sharrre.ashx?
+/HatenaButton_
+/head-social.
+/header_social_
+/header_socials.
+/headerSocialIcons.
+/headline_share_
+/highlight-and-share.js
+/highlight_share.
+/icon_share_
+/icon_sharethis_
+/icon_sns_
+/icons-follow-
+/Images/mobile-share-
+/itpsocialbuttons/images/*
+/itpsocialbuttons/style.css
+/Javascripts/Social.js
+/jiathis_share.css
+/jinda-facebook-lightbox/public/*
+/jquery-pin-it-button-for-images/js/jpibfi.client.js
+/jquery.shareaholic-publishers-sb.min.js
+/jquery.stp.min.js
+/lg-share.js
+/like_button.js
+/like_button.png
+/likebox.php
+/likefacebook.jpg
+/likefacebook.png
+/likegate.js
+/likesScript.js
+/linkedin_footer.jpg
+/linkedin_footer.png
+/mod_socialmedialinks/icons/*
+/mod_socialmedialinks/style.css
+/mod_socialslider/tmpl/*
+/myshare/assets/js/*
+/needsharebutton.js
+/needsharebutton.min.css
+/o3-social-share-styles.css
+/overlayShare.js
+/pandalocker.$script
+/pin_it_button.png
+/pinit-button.png
+/pinit.html?
+/pinterest-footer-icon.png
+/pinterest-footer-icon.svg
+/pinterest-footer-svg.ashx
+/pinterest-footer.ashx
+/pinterest-for-woocommerce-save-button.min.js
+/pinterest-for-woocommerce-tracking.min.js
+/pinterest-over.jpg
+/pinterest-over.png
+/pinterest_tag.js
+/pintrest-button.png
+/plugins/add-to-any-subscribe/subscribe_
+/plugins/add-to-any/addtoany.min.js
+/plugins/anmiated-twitter-bird/js/tripleflap.js
+/plugins/bookmarkify/*
+/plugins/delicious-bookmark-button/delit.js
+/plugins/dpSocialShare/js/jquery.dpSocialShare.js
+/plugins/easy-facebook-likebox/*
+/plugins/easy-twitter-feeds/public/js/widget.js
+/plugins/facebook-button-plugin/js/script.js
+/plugins/facebook-fanbox-popup/assets/js/spu.js
+/plugins/facebook-like-content-locker/js/pop.js
+/plugins/facebook-page-promoter-$~stylesheet
+/plugins/facebookpopuppro/js/facebookpopup.js
+/plugins/getsocial/lib/getsocial.js
+/plugins/knxdt-bookmarks-wordpress-plugin/css/style.css
+/plugins/light-social/*$~stylesheet
+/plugins/like-box-pro/includes/javascript/front_end_js.js
+/plugins/like-fb/js/popup.js
+/plugins/mashsharer/assets/js/mashsb.min.js
+/plugins/osd-social-media-sharing/includes/style.css
+/plugins/pinterest-pin-it-button-on-image-hover-and-post/js/pinit.js
+/plugins/rtsocial/js/rtss-main.js
+/plugins/share-and-follow/*$image
+/plugins/share-social/icons/*$image
+/plugins/simple-social-sharing-widgets-icons/*$~stylesheet
+/plugins/slide-in/js/wdsi.js
+/plugins/sociable-re/images/*
+/plugins/sociable/*$~stylesheet
+/plugins/socialbox/assets/*
+/plugins/socialfans-counter/assets/js/socialfans-script.js
+/plugins/socialgrid/static/img/*
+/plugins/StickySocialBar/js/sharefront.js
+/plugins/subscribe-connect-follow-widget/images/*
+/plugins/tweet-this/icons/*
+/plugins/tweetmeme/button.js
+/plugins/ultimate-follow-me/*
+/plugins/ultimate-social-deux/public/assets/js/min/us.script-min.js
+/plugins/viperbar/client/js/front.js
+/plugins/wordpress-social-ring/*
+/plugins/wp-plus-one/wp-plus-one.js
+/plugins/wp-social-toolbar-pro/js/corescripts.js
+/plugins/wp-tweet-button/tweetn.png
+/prisna-social-counter.css
+/qa-social-share.css
+/Resources/twitter-$~xmlhttprequest
+/rrshare.js
+/scrollShareMenu.html
+/share-bar-1.min.js
+/share-bar/build/index.js
+/share-bar/share-bar.js
+/share-button?
+/share-controller.js
+/share-controller.min.js
+/share-leadoff-public.js
+/share-on-diaspora-css.php
+/share.php?buttons=
+/share/count?
+/share/footer/*
+/share/frame/*
+/share42.js
+/share_button?
+/share_count.js
+/share_iframe.js
+/share_popup.js
+/share_sprite.png
+/share_toolbar.js
+/share_view.js
+/share_wechat.jpg
+/share_wechat.png
+/share_weibo.jpg
+/share_weibo.png
+/shareaholic.js
+/shareArrow.png
+/sharebar.js
+/shareBar/*
+/sharebars/*
+/shareBtn_
+/shareBTNs.
+/sharebutton?
+/sharebutts.
+/sharecount/*
+/sharecounter?
+/sharecounts/*
+/shared-social-
+/shared/btn_
+/shared/social/*
+/sharedaddy.js
+/sharedaddy/sharing.min.js
+/sharedcount.
+/shareFacebook.
+/Sharefb.
+/sharefb_
+/sharefrom/*
+/shareicon-
+/shareiconnew/*
+/shareIcons.$~stylesheet
+/shareit.
+/shareit_
+/sharelike.
+/shareon.iife.js
+/shareon.min.css
+/sharePost/*
+/sharer.js
+/shares/batch?
+/sharestats.cache.php?
+/shareStyle.
+/sharethis-buttons.
+/sharethis.js
+/sharethis_
+/shareThisIcons.
+/sharetool.php?
+/shareTools.js
+/sharetools/*$image
+/sharetools/*$script
+/sharetoolsnew.
+/shareTT.
+/Sharetw.
+/sharetw_
+/shareTwitter.
+/shareWidgetBackgrounds.
+/shariff-sharing/*
+/shariff.min.js
+/sharing-buttons.
+/sharing/sprites/*
+/sharing_icons/*
+/SharingBar/*
+/sharrre.jsp?$xmlhttprequest
+/sharrre_
+/shr_btn_
+/shrMain.min.js
+/sibar-social.
+/sidebar-facebook-
+/sidebar-follow.
+/sidebar-pinterest-
+/sidebar-social.
+/sidebar-twitter.
+/sidebar/social/*
+/sidebar_facebook.
+/sidebar_gplus.
+/sidebar_social_
+/sidebar_twitter.
+/sidenav_instagram_
+/sidenav_tumblr_
+/sideShare_
+/silicon-counters/*
+/simple-share-$~stylesheet
+/simple-social-sharing/*$~stylesheet
+/simpleshare.js
+/simplified-social-
+/site/share/*
+/SiteImages/facebook.
+/SiteImages/Twitter.
+/skm/assets/share/*
+/sl_share-public.
+/slick-social-
+/sm-share-
+/sm-youtube-
+/sm_share_
+/smart_share.
+/sme-facebook-$image
+/sn_share_
+/snaShare.
+/sns_naverband.
+/snstoolbar.
+/soc_bottom_
+/soc_facebook2.
+/socbutton/*
+/sociables/*
+/social-badges.
+/social-bar-
+/social-bar.
+/social-bookmark.
+/social-bookmarks-generator/*
+/social-bookmarks/*
+/social-footer.
+/social-impulse/*
+/social-media-widget/*$~stylesheet
+/social-network-icons-
+/social-networks-icon.
+/social-overlay-
+/social-plugin/*
+/social-plugins.
+/social-popup/*
+/social-profiles-widget/*$~stylesheet
+/social-proof-
+/social-search-
+/Social-Sidebar.
+/social-signs.
+/social-traffic-pop.$~stylesheet
+/social-traffic-pop/*
+/social-twit.
+/social-url-generator.
+/social-widgets-
+/social.icon.
+/social/bar?
+/social/footerIcons.
+/social/foursquare_
+/social/link-
+/social/linked-in-
+/social/pinit_
+/social/sprite-
+/social2s.min.js
+/social_apple
+/social_badges/*
+/social_badges_
+/social_balloon-
+/social_black/*
+/social_bookmark_icons/*
+/social_bookmarking.
+/social_bookmarking/*$image
+/social_bookmarks/*
+/social_footer.
+/social_header.
+/social_headers.
+/social_hovers.
+/social_hub/*
+/social_popup.
+/social_subscribe_
+/social_tools.
+/social_tube-
+/social_widget.$~stylesheet
+/social_widget/*
+/social_widget?
+/socialappsintegrator.
+/socialbadges.
+/socialbar-
+/socialbar.$~stylesheet
+/socialbar_
+/socialBarSprite.
+/SocialBookmark/*
+/socialbookmarkerbot_images/*
+/socialbookmarks.
+/socialbookmarks/*
+/socialcore-
+/socialcount.
+/socialcounters/*
+/socialcounts/*$script
+/socialCounts?
+/socialfacebookdark.
+/socialfooter.
+/socialFooterSprite.
+/socialgoogledark.
+/socialhomesprite2.
+/socialite.js
+/socialite.min.js
+/socialize/*$~stylesheet
+/sociallocker-
+/socialmediabar_
+/socialmediabuttons.
+/SocialMediaFooter.
+/SocialMediaLink/*
+/socialMediaPinterestButton.
+/socialmediaround.
+/socialmediasajax/*
+/socialmediasprite.
+/socialmediasprites2.
+/socialNetFooter.
+/socialnetwork-buttons/*
+/socialNetworkSprite.
+/socialplugins/*
+/socialpod-
+/socialShareCount.
+/SocialSharePlugin.
+/socialshares.
+/SocialShareSprite.
+/socialsheet.
+/socialsite/*
+/socialSmall/*
+/SocialSprite.
+/socialsprites.
+/socialstat?
+/socialtwitter1.
+/socialtwitterdark.
+/socialview-
+/socialwd/*
+/socila-media-
+/sociofluid/*$~script,~stylesheet
+/socjal/facebook.
+/socjal/twitter.
+/squaresocial-
+/stocktwits_share.
+/suivez-nous-facebook.
+/suivez-nous-google.
+/suivez-nous-twitter.
+/suivez-nous-youtube.
+/synved-social/image/*
+/tabs/social/*
+/tarful-share-public.js
+/tools/newSideShare/*
+/tweet_footer.
+/tweetbutton.
+/tweetcount.
+/tweetgrid.
+/twfollowfp.
+/twfooter.
+/twitbadge.
+/twitter-follow-
+/twitter-footer-
+/twitter-timeline-
+/twitter-v2.
+/twitter-widget-
+/twitter-widget.
+/twitter/lookup?
+/twitter_badge.
+/twitter_bubble_
+/twitter_follow.
+/twitter_footer.
+/twitter_header.
+/twitter_square.
+/twitter_subscribe.
+/twitter_tasto_
+/twitterbadge.
+/twitterbadge/*
+/twitterFetcher_
+/twitterfloat.js
+/twitterfollow.
+/twitterfollowbadge/*
+/twitterlib.
+/twitteron.
+/twitterpin.
+/twitterPrev.
+/twittersquare.
+/twitterwidget.
+/twitterWidgetHeader.
+/validateArticleShareCount.
+/videojs-share.
+/view/share_
+/view_social_
+/viewboxTraffic_min.js
+/visual/social/*
+/vk_button.
+/weiboshare.html
+/whatsapp-button.
+/whatsapp_button.
+/whatsapp_icon.
+/whatsappblogger.js
+/whatsappshare.
+/whtapp-mob.
+/whtapp-web.
+/widget/share?
+/widget/share_
+/widget_add_this_
+/Widgets/*/Tweets?
+/widgets/sharing-
+/widgets/socials/*
+/widgets/twitter/*
+/win-sm-icons.
+/wordpress-popup/*$domain=ahchealthenews.com
+/wp-content/*/social_$~stylesheet
+/wp-content/plugins/advanced-facebook-content-locker/*
+/wp-followme/*
+/wp-social-media-
+/wp-social-toolbar/*
+/xnapp/share/*
+/xsocial-icons.
+/xsocial_sprites_
+/ya-share.js
+_facebook_banner/
+_footer_share_
+_footer_socials.
+_footer_twitter.
+_header_share.
+_instagram_badge
+_instagram_hover.
+_mvsocialbuttons/
+_pinterest_square_
+_share_bookmark.
+_share_widget_
+_sharrre.php?
+_slideshare.
+_small_share.
+_sns-hatena.
+_sns_me2day.
+_social-bar/
+_social_badge_$~xmlhttprequest
+_social_bookmark/
+_social_bookmarks/
+_social_footer_
+_socialfancysliders/
+_socialmediabox_
+_socialtoggle.
+_sosyal_bar.
+_sp_social/
+_twitter_follow.
+! jquery bpopup
+/jquery.bpopup.$script,domain=telechargerunevideo.com
+! https://www.wpvideolock.com/
+/wp-content/plugins/videolock/*$script
+!------------------------General element hiding rules-------------------------!
+! *** easylist:fanboy-addon/fanboy_social_general_hide.txt ***
+###BottomSocialLinks
+###FBslideout
+###FaceBookStayInTouch
+###FaceBookTab
+###FacebookActivity
+###FacebookContainer
+###FacebookLikeBox
+###FacebookRecentActivity
+###FacebookSocialBox
+###Follow-Sharebar
+###FollowUs
+###Follow_Buttons
+###Followers1
+###FooterSocialList
+###Footer__facbook
+###Footer__linkedin
+###Footer__twitter
+###HeadSocials
+###HomeSocial
+###ImgSocial
+###PanelFacebook
+###SHARE_LINKS
+###Share-bar2
+###Share-share
+###Share1
+###Share2
+###ShareButton
+###ShareEntryPoint
+###ShareItemBtn
+###ShareLinksHeader
+###ShareOpener
+###SharePanel
+###ShareSidebar
+###ShareSkype
+###ShareThisCustom
+###ShareTools
+###ShowsRightSocial
+###SideBarSocialMedia
+###Side_Block_Facebook
+###SnsBtn
+###SnsFollow
+###Social-Box
+###Social-Container-Right
+###Social-Left
+###Social-Sidebar
+###SocialBookmarksContainer
+###SocialBooksTop
+###SocialContainer
+###SocialFixedshare
+###SocialMedia
+###SocialMediaBox
+###SocialNetworkIconContainer
+###SocialShare
+###SocialShareArticle
+###SocialToolTipFlyOutJs
+###SocialWidgetLinks
+###Social_Box
+###Social_tab
+###SocialbarInline
+###Socialize
+###StickySocialContainer
+###ToolsShareStory
+###TopMenuSocial
+###TopShareMenu
+###UISideShareBar
+###VKPopupWrapper
+###a1fbsharebtn
+###aFBShare
+###aFBShare2
+###aFbLikeBottom
+###aI_sns
+###aShareFacebook
+###aa_header_shares
+###action-share
+###actionShare
+###actionsnshare
+###adbl-social-icons
+###add-this-btns
+###addThis
+###addsSocial
+###addshare
+###addsharetop
+###addthis-block
+###addthis-button
+###addthis_sharing_toolbox
+###addthis_toolbox_new
+###addthiswrapper
+###advanced-twitter-widget
+###advancedsocialwidget
+###af_resSociaux
+###after-share
+###ajmint-socialbuttons
+###alchetronShareCard
+###amp-social-share
+###ao-share-wrapper
+###aol-follow
+###apriBoxCondividi
+###ar1web-social
+###area-vertical-social
+###arevicofancy-overlay
+###arevicofancy-wrap
+###arpae-footer-socialBar
+###artShareButtons
+###artShareLinks
+###art__tools_share
+###art_social
+###article-bottom-social-links
+###article-detail-social-icons
+###article-follow-us
+###article-footer-social-share
+###article-header-share
+###article-headline-facebook
+###article-headline-social-list
+###article-left-side-share-panel
+###article-reveal-share
+###article-share-floating
+###article-sharebar
+###article-sharebox
+###article-sharer
+###article-sharers
+###article-social
+###article-social-bar
+###article-social-bottom
+###article-social-buttons
+###article-social-facebook
+###article-social-head
+###article-social-share
+###article-social-shares
+###article-social-top
+###article-social-twitter
+###article-social-wrap
+###articleShare
+###articleShareFloats
+###articleSocialFooter
+###article_actions_socialmedia
+###article_bottom_fb_fanspage_like
+###article_share
+###article_share_bottom
+###article_share_rail
+###article_social
+###article_tools_share
+###article_tools_share_li
+###article_twitter
+###articlebottomsharinglinks
+###articles-footer-social
+###articlesocial
+###as-share-window
+###aside-social-links-container
+###asidesociallinks
+###at-instapaper
+###at4-share
+###at_social
+###atchm-sidebar-social
+###author-links-social
+###author-socials
+###authorshare_wrap
+###authorsocial
+###badge-facebook-like
+###badge-google-plusone
+###badge-pinterest
+###badge-twitter
+###badge_facbeook
+###badge_reddit
+###badge_twitter
+###badges-share-block
+###band_social
+###banner-social
+###bar-social
+###barre-partage
+###base64-share-facebook
+###base64-share-google
+###base64-share-twitter
+###base64-share-vk
+###bbbtmshare
+###bdshare
+###be-social
+###beesocial
+###belowpost-like
+###biz-share
+###bk_follow
+###bk_share
+###blgentrysocial
+###blgtwitter
+###blksocial
+###bloc-follow
+###bloc_follow_us
+###block-menu-menu-footer-social
+###block-menu-menu-header-social
+###block-menu-menu-share
+###block-menu-menu-social
+###block-menu-menu-social-icons
+###block-menu-menu-social-icons-top
+###block-menu-menu-social-links
+###block-menu-menu-social-media-links
+###block-menu-menu-social-menu
+###block-menu-menu-social-networks
+###block-menu-social-identity
+###block-minisocialsharingblock
+###block-ridiculouslyresponsivesocialsharebuttons
+###block-sharing-links
+###block-sharingbuttons-1
+###block-sharingbuttons-2
+###block-simpleshare
+###block-social
+###block-social_badges-0
+###block-social_badges-1
+###block-socialfooter
+###block-sociallinks
+###block-socialmedia
+###block-socialmediaaccounts-2
+###block-socialmedialinks
+###block-socialmedialinks-2
+###block-socialmenu
+###block-socialsblock
+###block-socialsharingblock
+###blog-follow
+###blog-follow-widget
+###blog-follow-wrapper
+###blog-share-widget
+###blog-social
+###blogShareLink
+###blog_social
+###bottom-share
+###bottom-share-buttons
+###bottom-share-tools
+###bottom-social
+###bottom-story-socials
+###bottomSocialSharePlugins
+###bottom_share_widget
+###bottom_social_share
+###bottomsocial
+###bottoniSocialContainer
+###box_social
+###box_social_bookmarks
+###boxes-box-cng_social_media_fa_small
+###boxes-box-follow_us
+###browse-social
+###bsocial
+###btShareFacebook
+###btnShareFacebook
+###btnShareFb
+###btnShareForecast
+###btnShareLinks
+###btnShareMessenger
+###btnShareTwitter
+###btnShareWhatsApp
+###btnSharetw
+###byard-socializer
+###byline-facebook-share
+###byline-share
+###bylineShare
+###bylineSocialMore
+###c-main-share-bar
+###cm-social-overlay
+###cmg-head-share-menu
+###cmg_facebook
+###cmg_instagram
+###cmg_twitter
+###cmsms_latest_bottom_tweets
+###cnnShare2
+###cns-social-links
+###commentsShare
+###communityshare
+###connectWithUs
+###connect_share
+###consol-share
+###container-reseaux-sociaux
+###content-article-share
+###content-share-top
+###content-sharer-article
+###content-social
+###content-social-2
+###content-socialshare
+###contentSharerResult
+###content_share
+###contributor-social-media
+###count_r2r
+###crestashareicon
+###crestashareiconincontent
+###csSocial
+###ctSocialShare
+###ctl00_BarTab1_social_bookmark
+###ctl00_DescriptionBlock_lblTwitter
+###ctl00_GoogleLink
+###ctl00_Header_social1
+###ctl00_cphMainContent_ContentBloc_ctl00_pnlSocialShare
+###ctl00_ctl00_ConMainBody_ConMainBody_Share1_socialSharing
+###ctl00_facebookLink
+###ctl00_linkedinLink
+###ctl00_twitterLink
+###ctl00_ucFaceBook_facebook
+###ctl00_wordpressLink
+###ctl00_youtubeLink
+###ctn-social
+###custom-social
+###custom-tweet-button
+###custom_share
+###cxShareLinks
+###dcssb-facebook
+###dcssb-plusone
+###dcssb-twitter
+###dd-footer-social
+###dd-navigation-social
+###desktop-share-wrapper
+###desktop-social-buttons
+###details-share-icon-link
+###dhSocial
+###diaspora-button-container
+###digg-widget
+###digg-widget-container
+###digg_module
+###digg_upcoming_content
+###div-reseaux-sociaux
+###divFacebook
+###divFacebookFollowMe
+###divShareBarButtons
+###divShareButtons
+###divShareText
+###divShareURL
+###divSideShare
+###divSocial
+###divSocialRail
+###divTwitterFollowMe
+###div_footer_social_icon
+###div_twitter_follow_button
+###divtwitterWidget
+###dl_share_icons
+###donate-social
+###drop-btn-share
+###dvTwitter
+###e_mailit_custom_position
+###ea-social-footer-links
+###ea-social-header-links
+###ej-plugin-socialslideout
+###em-sharer
+###embed-share
+###embed-share-button
+###entry-footer-social-buttons
+###entry-header-social-buttons
+###entry-social-float
+###enw-share-btn
+###epoch-floating-social
+###essbsocialprofileswidget-2
+###esv-sharebox
+###et-post-share
+###et-social-icons
+###eut-post-social-bar
+###eventSocialMedia
+###f-social
+###fShare
+###fa_share
+###facebook-after-post
+###facebook-bottom-like-box
+###facebook-box
+###facebook-embed
+###facebook-fan
+###facebook-fanbox
+###facebook-feed
+###facebook-flyer-2
+###facebook-footer-like-box
+###facebook-header-link
+###facebook-iframe-placeholder
+###facebook-like
+###facebook-like-box
+###facebook-like-outer
+###facebook-like-page
+###facebook-like-popup
+###facebook-like-site-module
+###facebook-like-wrapper
+###facebook-likebox
+###facebook-likebox-wrap
+###facebook-link
+###facebook-module
+###facebook-page-plugin
+###facebook-panel
+###facebook-popup
+###facebook-share
+###facebook-share-bot
+###facebook-slider
+###facebook-social-wrapper
+###facebook-twitter-block
+###facebook-twitter-block-bottom
+###facebook-twitter-page-top
+###facebook-wdgt
+###facebook-widget
+###facebook-widget-sidebar
+###facebook-win
+###facebookActivity
+###facebookActivityWidget
+###facebookBox
+###facebookButtonHome
+###facebookButtonInside
+###facebookFan
+###facebookFans
+###facebookIcon
+###facebookJoin
+###facebookLike
+###facebookLikeBox
+###facebookLikeButton
+###facebookLikeContainer
+###facebookM
+###facebookPopUpLikeBox
+###facebookPromo
+###facebookRecommend
+###facebookRodape
+###facebookShareButton
+###facebookSlideIn
+###facebookTab
+###facebookTabset
+###facebookWidget
+###facebookWindow
+###facebookWrapper
+###facebook_2_popup
+###facebook_begen
+###facebook_box
+###facebook_container
+###facebook_facepile
+###facebook_fanpage
+###facebook_like
+###facebook_like_bar
+###facebook_like_bar_single
+###facebook_like_box
+###facebook_likebox
+###facebook_link
+###facebook_overlay
+###facebook_page_block
+###facebook_page_block_lenta
+###facebook_plugin
+###facebook_popup
+###facebook_promo
+###facebook_reader_wrapper
+###facebook_recommendations
+###facebook_right
+###facebook_share
+###facebook_slider_widget
+###facebook_social_300
+###facebook_social_sidebar
+###facebook_subscribe
+###facebook_teaser
+###facebookbox
+###facebookbtn
+###facebookheader
+###facebookjs
+###facebooklike
+###facebooklikebox-2
+###facebooknotification
+###facebookpadcat-hp
+###facebookpopup-fan-exit
+###facebookpopup-fanback
+###facebooksocialplugin
+###facebooktrend
+###facebookwidget
+###fan-exit
+###fan-follow-promo
+###fanback
+###favsocial-list
+###fb-activity
+###fb-activity-feed
+###fb-activity-widget
+###fb-bar
+###fb-box
+###fb-decoy
+###fb-facepile
+###fb-fan-box
+###fb-fanbox
+###fb-friction-less
+###fb-like
+###fb-like-block
+###fb-like-box
+###fb-like-btn
+###fb-like-button
+###fb-likebox
+###fb-link-box
+###fb-link-only
+###fb-lk-bx
+###fb-pop
+###fb-rec-box
+###fb-recommend
+###fb-scroll-popup
+###fb-share-count
+###fb-share-counter-link
+###fb-side-like
+###fb-social-callout-div
+###fb-social-top-buttonOFF
+###fb-timeline-btn
+###fb-timeline-driver
+###fb-wrapper-div
+###fbActivityStream
+###fbBox2
+###fbBoxContent
+###fbDiv
+###fbLike
+###fbLikeBox
+###fbLikeButton
+###fbLikeSendtwitter_menu
+###fbLikebox
+###fbOnscroll
+###fbPanel
+###fbPopUp
+###fbPopupBG
+###fbShare
+###fbShareButton
+###fbShareWall
+###fbSlider
+###fbSocial
+###fbSubLoading
+###fb_300x250
+###fb_comment_btn
+###fb_container
+###fb_faces_frame
+###fb_fanpage_box
+###fb_fly_2
+###fb_header
+###fb_like_fan_page_layer
+###fb_like_header
+###fb_like_page_div
+###fb_like_pop
+###fb_like_widget
+###fb_likebox
+###fb_link
+###fb_linkedIn_page_header
+###fb_page_container
+###fb_reader_container
+###fb_share
+###fb_share_btn
+###fb_share_button
+###fb_social
+###fb_socialPageLink
+###fb_twitter_bar
+###fb_video_link
+###fb_widget
+###fbbestshare
+###fbbox
+###fbbox-relocated
+###fbbox1
+###fbfanbox
+###fbinvite
+###fblike
+###fblike1
+###fblikebg
+###fblikebot
+###fblikebot123
+###fblikebutton
+###fblikebutton2018
+###fblikeheader
+###fblikepop
+###fblikepop_ads
+###fbookulous-flyer
+###fbplikebox
+###fbpromo_pop
+###fbrecommend
+###fbshare
+###fbshare_container
+###fbshre
+###fbslidebox
+###fbsticker
+###fbtab-box
+###fbtw
+###fbtwitter
+###fcbk
+###fdbk_tab
+###feeds-facebook
+###feeds-flickr
+###feeds-google
+###feeds-twitter
+###feeds-youtube
+###field-wrapper-share-this-article
+###film_social_nav
+###fixed-bar-social-icons
+###fixed-share-btn
+###fixed-social-media
+###fixedShareMenu
+###fixed_social
+###fl_social_share_widget-2
+###floatSocial
+###floatSocialShares
+###float_fb_plugin
+###floating-share
+###floating-share-box
+###floating-share-box-wrapper
+###floating-sharebar
+###floatingShare
+###floatingSocialMenu
+###floatingSocialShare
+###floatshare
+###floaty-facebook
+###floaty-social-media-icons-bg
+###floaty-twitter
+###follow-aol-footer
+###follow-bar
+###follow-bar-buttons
+###follow-block
+###follow-block-sidebar
+###follow-box
+###follow-buttons
+###follow-facebook
+###follow-footer
+###follow-icons
+###follow-links
+###follow-me
+###follow-sidetab
+###follow-social-items
+###follow-tools
+###follow-top
+###follow-twitter
+###follow-us-block
+###follow-us-block-body
+###follow-us-box
+###follow-us-buttons
+###follow-us-footer
+###follow-us-rhs
+###follow-us-widget
+###follow-widget
+###followBar
+###followBox
+###followFB
+###followFBSvg
+###followFacebook
+###followGoogle
+###followIcons
+###followLinks
+###followSlider2
+###followTWSvg
+###followTab
+###followTwiiter
+###followTwitter
+###followUs
+###followUsBox
+###followUsButtons
+###followUsContainerD
+###followUsFooter
+###followUsRight
+###follow_bar
+###follow_box
+###follow_btns
+###follow_buttons
+###follow_dui
+###follow_facebook
+###follow_facebook_icon
+###follow_ftr
+###follow_icons
+###follow_pinterest_icon
+###follow_social_links
+###follow_twitter
+###follow_twitter_icon
+###follow_us
+###follow_us_block
+###follow_us_left
+###follow_us_panel
+###followbb
+###followbigbutton
+###followbtn2
+###followface
+###followlinks
+###followtwit
+###followus
+###followwrap
+###foot-social
+###footSocial
+###footer--social-links
+###footer-facebook
+###footer-facebook-icon
+###footer-fb
+###footer-fb-button
+###footer-follow-us
+###footer-follow-us-facebook
+###footer-follow-us-youtube
+###footer-google-icon
+###footer-instagram-icon
+###footer-share
+###footer-share-facebook
+###footer-share-google
+###footer-share-linkedin
+###footer-share-list
+###footer-share-twitter
+###footer-social
+###footer-social-link
+###footer-social_share
+###footer-socials
+###footer-title-social
+###footer-tumblr-icon
+###footer-twitter
+###footer-twitter-icon
+###footer-twitterfeed
+###footer-twttr
+###footer-youtube
+###footer-youtube-icon
+###footerBottomShare
+###footerConnect
+###footerFacebookLike
+###footerFollow
+###footerShare
+###footerShareIcons
+###footerSocial
+###footerSocialBox
+###footerSocialButtons
+###footerSocialIcons
+###footerSocialLinks
+###footerSocialMenu
+###footerSocialNet
+###footer_block_social
+###footer_feeds
+###footer_follow
+###footer_follow_us
+###footer_social
+###footer_social_div
+###footer_social_facebook
+###footer_social_follow
+###footer_social_google
+###footer_social_icons
+###footer_social_instagram
+###footer_social_youtube
+###footer_socialmedia
+###footer_tweet
+###footer_widget_social
+###fsb-social-bar
+###galleryPlayerShare
+###galleryShare
+###gc-facebook
+###gc-twitter
+###getSocial
+###gkSocial
+###gkSocialAPI
+###global-share
+###global-share-right
+###global-social-bar
+###global-social-networking
+###globalSocialLinks
+###globalSocialPromo
+###globalSocialPromoWrap
+###gs-social-sharebuttons
+###gs-social-top
+###gs-social-top_gig_containerParent
+###gsocial-container
+###gtm-header-instagram
+###gz-facebook-page-share
+###h-nav_social
+###h-social
+###hb-share-icons
+###hc_followus
+###hc_social_links_ft
+###hdr-twitter
+###hdrFBLike
+###hdrSocialPromo
+###hdr_social_row
+###head-share-nav
+###headSnsBtn
+###headSocial
+###head_share
+###header-bebo
+###header-facebook-social-link
+###header-follow
+###header-share
+###header-share-icon-container
+###header-social
+###header-social-apps-v2
+###header-social-block
+###header-social-container
+###header-social-fb
+###header-social-icons
+###header-social-links
+###header-social-media
+###header-social-nav
+###header-social-share-holder
+###header-social-twitter
+###header-social_icons-wrapper
+###header-socials
+###header-toggle-share
+###header-youtube-social-link
+###headerSocial
+###headerSocialIcons
+###header_social_wrapper
+###headersearchsocial
+###headersocial
+###headline_social
+###heateor_ss_browser_popup_bg
+###hellobar-bar
+###hellobar-modal
+###hellobar-modal-background
+###help-social-buttons
+###heroSocial
+###highlight-share
+###highlight-share__popup
+###home-social
+###homeRightNavSocial
+###homeSharePinterest
+###homeShareTwitter
+###homeSocial
+###homeTwitterWrapper
+###homepageShare
+###homesociallinks
+###horizontalsocial
+###hover_share
+###hp_share_options
+###hpsocial
+###hshare
+###ht_follow_wrap
+###hwSocialMedia-Cont
+###iNavSocial
+###ic_footer_share-wrapper
+###ic_social_box
+###iconSocialFacebook
+###iconSocialInstagram
+###iconSocialTwitter
+###iconSocialYoutube
+###icons_social_networks
+###id_HeaderAddthis
+###id_facebook_share
+###id_mail_share
+###id_twitter_share
+###id_whatsapp_share
+###iframe-facebook
+###incsharebox
+###index-fb-likebox
+###index-social
+###industryTweet
+###inline-share-buttons
+###inline_shares_box
+###innersharelink
+###instagram-link
+###instagramM
+###instlogo
+###ione-facebook-like-3
+###iscfbbblikewidget
+###it_social_tabs-3
+###item_share
+###itemshare
+###itp-fshare
+###jSharer
+###je_socialicons
+###join-us-facebook
+###js-Social-Share-0
+###js-SocialWidget-Container
+###js-Stay-Connected-Container-0
+###js-Twitter-Container
+###js-article-image-share
+###js-article-share-top
+###js-avSharing
+###js-btnShowShare
+###js-dialog-social-overlay
+###js-item-social-slider
+###js-react-share
+###js-share
+###js-share-links
+###js-share-menu-wrap
+###js-social-btns
+###js-social-link-button
+###js-sticky-sharebar
+###js-top-fb-block
+###jsEditor_share
+###js_to-top_page-share-container
+###klasSocial
+###koddostu_facebook_begen
+###kotak-facebook
+###l-social-float
+###large_share_wrapper
+###last-twitter
+###latest-tweets
+###layout-social
+###lbShareFacebook
+###leftColFBplugin
+###leftShare
+###leftShareTools
+###leftSideSocialBox
+###leftSocialBlock
+###left_float_social
+###left_socail
+###left_social_share
+###leiste-social-buttons
+###lg-footer-socials
+###lg-menuprincipale-socials
+###liFacebookTwitter
+###li_share
+###lightboxShare
+###likeThisPost
+###likeThisPostProminent
+###likeTweetPlus
+###likebuttonarea
+###likegate
+###likeus-wrapper-outer
+###linkShare
+###linkdoni-social
+###linkedin-share-counter-link
+###linkedin_social_sidebar
+###list--share-buttons
+###listMasterShareListBottom
+###lnkSocial
+###logShare
+###logo-socials-follow
+###lr_social_tout
+###ls-facebook-box
+###ls-twitter-box
+###lst-facebook
+###lst-instagram
+###lst-twitter
+###lud_social_box
+###lv_social_icons_widget-4
+###m_facebook
+###m_social_networks
+###main-article-social
+###main-share
+###main-social
+###mainShare
+###main_socials
+###mainlist_social_stuff
+###mainshare
+###mainsitesocial
+###marge_socials
+###marvel_social
+###mashfbar-header
+###mashsocial
+###mast-share
+###masthead-follow
+###masthead-social
+###masthead-socialblock2
+###mcd_facebook
+###mcd_twitter
+###md_follow
+###mediacontentsharebuttons
+###mediasocialfollow
+###mega-footer-social-media
+###menu--social-channels
+###menu-cuckoo-social-menu
+###menu-footer-social-icons
+###menu-footer-social-links
+###menu-footer-social-list
+###menu-footer_social
+###menu-gridlove-social
+###menu-header-social
+###menu-herald-social
+###menu-item-facebook
+###menu-item-social
+###menu-item-tumblr
+###menu-item-twitter
+###menu-manu-social-media
+###menu-menu-footer-social
+###menu-reseaux-sociaux
+###menu-share
+###menu-share-float
+###menu-social
+###menu-social-1
+###menu-social-2
+###menu-social-buttons
+###menu-social-fb
+###menu-social-header
+###menu-social-icons
+###menu-social-icons-menu
+###menu-social-icons-responsive
+###menu-social-items
+###menu-social-links
+###menu-social-menu
+###menu-social-menu-1
+###menu-social-menu-sidebar
+###menu-social-navigation
+###menu-social-sidebar
+###menu-social-twt
+###menu-social2
+###menu-socialnbt
+###menu-socila-footer
+###menu-top-social
+###menuSocial
+###menu_servizio_social
+###menu_social
+###menuf-socialnetworks
+###menuh-socialnetworks
+###metabox_share
+###meteored_share
+###mgs-footer-follow
+###mini-panel-share_widgets
+###mini-panel-share_widgets_general
+###mm-like-facebook
+###mm-share-twitter
+###mmg_share_buttons
+###mn_facebook_like_box_container
+###mn_social_share_bar_2
+###mn_social_sidebar
+###mobile-share-bar
+###mobile-share-boxbottom
+###mobile-share-button
+###mobile-social
+###mobileShare
+###mobileShareBottom
+###mobileShareTop
+###mod-socialhub
+###mod_facebook_activity_feed
+###mod_follow
+###modal-fb
+###module-fbActivityFeed
+###module-fbLikeBox
+###module-rightrail-social-widget
+###module-social-media-bar
+###moduleSocialLinks
+###module_digg
+###module_fblike
+###module_social_links
+###modulo-buttons-share
+###more_share
+###mrf-shareOptions
+###mrt-node-Side-0-CanvasShareButtons
+###multiplesocialwidget-id
+###multix_icons_facebook
+###mvp-author-box-soc-wrap
+###mvp-fly-soc-wrap
+###mvp-foot-soc
+###mvp-nav-soc
+###mvp-nav-soc-list
+###mvp-post-soc-wrap
+###mvp-soc-mob-wrap
+###mvp-top-nav-soc
+###nShare
+###nSocial
+###native-addthis
+###nav-fb-link
+###nav-fbook
+###nav-gplus
+###nav-shareScreen-trigger
+###nav-social-top
+###nav-twitter
+###navFSocialUL
+###navFacebook
+###navPinterest
+###navSocialIcons
+###navTwitter
+###nav_social_links
+###navbar-menu-social
+###navbar-social
+###navigation-social
+###navigation-social-media
+###navigation-social-networking
+###navigation_sociale
+###networkedblogs_container
+###networkedblogs_nwidget_container
+###networkedblogs_nwidget_widget
+###new-facebook-side
+###new-social-bar-int
+###newGigyaShareBottom-Holder
+###newGigyaShareBottom-HolderCenter
+###newGigyaShareTop
+###newGigyaShareTop-Holder
+###newSocialContainer
+###new_share_icons
+###new_socials_nav
+###newfacebookpanel
+###news-detail-social-top
+###news-social-share
+###news_share_bottom
+###newsharebar
+###newsocial
+###newstweetbar
+###nmSocial
+###no_po_share
+###node-share-top
+###nodeshare
+###not-signed-in-social
+###offer_social
+###orkut_share
+###other-social-bar
+###pShareContent
+###pSocialPrint
+###page-share
+###pageFooterSocial
+###pageHeaderTopSocial
+###pageIconGoogle
+###pageIconTwitter
+###page_like_box
+###page_shareButton
+###pageshare
+###panel-social
+###panelSocial
+###partShare
+###peek-share
+###pinfollow
+###pins-feed-follow
+###pinshare
+###pinterest-link
+###pinterest-share
+###pinterestLink
+###pinterest_button
+###plat-social-widget
+###player-social-share
+###playerIconsSocial
+###playerShare
+###plug-facebook
+###plug-twitter
+###pmFacebook
+###popup-social
+###popupFbLikeBox
+###popup_social
+###post-footer-share
+###post-share-bottom
+###post-share-buttons
+###post-share-float
+###post-share-icons
+###post-share-tools-container
+###post-side-share-left
+###post-social
+###post-social-wrap
+###post-socials
+###post-socialshare
+###postShareID
+###postShareSnsWrapper
+###post_follow_buttons
+###post_info_share
+###post_share_buttons
+###post_sharethis
+###post_social
+###post_tweet
+###postfblike
+###postheader_share
+###postshare
+###pp-share-menu
+###pp-social
+###reseau-social
+###reseaux-sociaux
+###reseaux_sociaux
+###reseaux_sociaux_menu
+###reseauxsociaux
+###reseauxsociauxHeader
+###rhs_social
+###right-share-module
+###right-side-facebook
+###rightSocial
+###rightSocialFacebook
+###rightSocialGoogle
+###rightSocialLinkedin
+###rightSocialTwitter
+###rightshare
+###rightsocial
+###rr-social-widget-chiclets
+###rr-social-widget-facebook
+###rr-social-widget-twitter
+###rr_social_tout
+###rsShareToggleBtn
+###rs_facebook
+###rs_twitter
+###rs_youtube
+###rshare
+###rsociaux
+###rt_social
+###sb-social
+###sb_facebook
+###sb_fb_like
+###sb_instagram
+###scroll-social
+###scrollingSocial
+###sdac_footer_facebook_widget-3
+###section-footer-social
+###section-header-follow
+###selectionShare
+###selectionShareable
+###share-above-desktop
+###share-ad-dropdown
+###share-ad-inner
+###share-ad-link
+###share-addthis
+###share-area
+###share-article-below
+###share-bar
+###share-bar-fixed
+###share-bar-vt
+###share-below-desktop
+###share-bottom
+###share-box-flank
+###share-box-footer
+###share-box-top
+###share-btns
+###share-button-fixed
+###share-button-templatoid
+###share-buttons
+###share-card
+###share-center-pro
+###share-facebook
+###share-facebook-menu
+###share-fb
+###share-follow
+###share-footer
+###share-in-content
+###share-left
+###share-li
+###share-linkedin
+###share-links
+###share-menu
+###share-menu-btn
+###share-modal-link
+###share-module
+###share-module-bottom
+###share-module-top
+###share-more
+###share-nav
+###share-panel-vert
+###share-pinterest
+###share-post
+###share-project-button
+###share-reddit
+###share-retweet
+###share-series
+###share-services-container
+###share-sidebar-wrapper
+###share-sticky
+###share-sticky-bar
+###share-strip
+###share-target-wrapper
+###share-this
+###share-this-article
+###share-this-hover
+###share-this-topams
+###share-to-any
+###share-toggle
+###share-tools
+###share-tools-fixed
+###share-tools-title
+###share-track-fb
+###share-track-tw
+###share-trigger
+###share-tweet
+###share-twitter
+###share-twitter-menu
+###share-unit
+###share-video
+###share-widget
+###share-widget-buttons
+###share-wrap
+###share-wrapper
+###share-youtube
+###share42
+###shareArticle
+###shareBadges
+###shareBar
+###shareBarOutterWrapper
+###shareBarTop
+###shareBarWrapper
+###shareBg
+###shareBlock
+###shareBottom
+###shareBox
+###shareBt
+###shareBtn
+###shareBtn_footer
+###shareBtns
+###shareButton
+###shareButton1
+###shareButton_onclick
+###shareButtons
+###shareBylineInner
+###shareColumn
+###shareContainerId
+###shareCountNumber
+###shareCustomLogo
+###shareData
+###shareDivVerticalContainer
+###shareDropdown
+###shareFixedBottom
+###shareFloat
+###shareFriend
+###shareGallery
+###shareHorizontal
+###shareIcoDiv_
+###shareIcons
+###shareIconsH
+###shareId
+###shareImg
+###shareIt
+###shareLink
+###shareLinkArticle
+###shareLinkToolBar
+###shareLinks
+###shareMenu
+###shareOptionMore
+###shareOverlay
+###sharePage
+###sharePageButtons
+###sharePageControl
+###sharePinterest
+###sharePlugInBar
+###sharePostrow
+###shareRail
+###shareRecipe
+###shareRowBottom
+###shareShelf
+###shareSide
+###shareSideContainer
+###shareSidebarHolder
+###shareSocial
+###shareStrip
+###shareTab
+###shareTags
+###shareThis
+###shareThisDisplay
+###shareThisTrigger
+###shareTool
+###shareToolBarContainer
+###shareToolBottom
+###shareToolTop
+###shareTop
+###shareTopBtn
+###shareTotal
+###shareTxt
+###shareUrl
+###shareV
+###shareV_w
+###shareVertHolder
+###shareVertical
+###shareWidgetTop
+###share_300_250_c
+###share_RS
+###share_and_rate
+###share_art
+###share_bar
+###share_bar1
+###share_block
+###share_bottom
+###share_box
+###share_box_aw
+###share_box_left2
+###share_btn_top
+###share_bttns
+###share_button
+###share_button_row
+###share_buttons
+###share_buttons_gig_containerParent
+###share_buttons_single_page
+###share_buttons_wrapper
+###share_cnt
+###share_container
+###share_count
+###share_data
+###share_div
+###share_div_float
+###share_email_desktopSocialBar
+###share_facebook
+###share_facebook2
+###share_facebook_trigger
+###share_feed
+###share_gallery_box
+###share_google
+###share_htn
+###share_hub_box
+###share_icon
+###share_icons
+###share_it
+###share_links
+###share_now
+###share_options
+###share_panel
+###share_popout
+###share_pos
+###share_rail
+###share_side_bar
+###share_slidedown
+###share_social_buttons
+###share_social_icons
+###share_social_sidebar
+###share_spot
+###share_this
+###share_to
+###share_tools
+###share_top
+###share_tw
+###share_twitter
+###share_video
+###share_wrap
+###share_wrapper
+###shareaholic-bar
+###sharebar
+###sharebar-bottom-image
+###sharebar-contenuto
+###sharebar-custom
+###sharebar-global
+###sharebar-side
+###sharebar-sticky-oas
+###sharebar-wrapper
+###sharebarBottom
+###sharebarDiv2
+###sharebarTop
+###sharebar_fixed
+###sharebar_outer_wrapper
+###sharebar_wrapper
+###sharebarp
+###sharebarx
+###sharebot
+###sharebox
+###sharebox_div
+###shareboxwrapper
+###sharebtns
+###sharebtnsingle
+###sharebtnwrap
+###sharebuttons
+###sharecont
+###sharecopy
+###sharecount
+###shared-services-comments
+###sharediv
+###sharefeature
+###sharefloat
+###sharefloattitle
+###sharefooter
+###sharehorizontalbox
+###shareicon
+###shareicons
+###sharelink
+###sharelinks
+###sharelist
+###sharemark
+###shareme
+###shareme-nav
+###shareplus
+###shareplus_overlay
+###shareplus_sticker
+###sharepost
+###sharer
+###sharer-box
+###sharer-toggle
+###sharerBar
+###sharereceiver
+###shareside
+###sharestrip
+###sharestrip_bottom
+###sharesumo
+###sharetab
+###sharetag
+###sharethis
+###sharethis-listings
+###sharethis_floater
+###sharetoolContainer
+###sharetools-container
+###sharetools-masthead
+###sharetoolscontainer
+###sharetop
+###sharetop_share
+###sharevertical
+###sharevideo
+###sharewrapper
+###sharing-bar
+###sharing-box
+###sharing-button
+###sharing-buttons
+###sharing-column
+###sharing-floater
+###sharing-icons
+###sharing-is-caring
+###sharing-options
+###sharing-palette
+###sharing-plugins
+###sharing-sidebar
+###sharing-widget
+###sharingBlock
+###sharingLinks
+###sharing_bar
+###sharing_buttons
+###sharing_container
+###sharing_tools
+###sharing_twitter
+###sharingbar
+###sharingbtn
+###sharingcolumn
+###sharingfooter
+###show-sharing-buttons
+###shr-btns
+###shrbar
+###side-fb-likes
+###side-follow-us
+###side-share
+###side-social
+###side-social-links-wrapper
+###side_facebook
+###side_social
+###sidebar-facebook
+###sidebar-facebook-activity
+###sidebar-fb-social-reader
+###sidebar-image-facebook
+###sidebar-right-social
+###sidebar-share
+###sidebar-social
+###sidebar-social-widget
+###sidebar-socials
+###sidebar-twitter
+###sidebar-twtr-feed
+###sidebar-youtube
+###sidebarShare
+###sidebarSocial
+###sidebarSocialMenu
+###sidebar_share
+###sidebar_share_links
+###sidebar_share_title
+###sidebar_social
+###sidebar_social_icons
+###sidesocial
+###siga-facebook
+###siga-twitter
+###simple-share-buttons-container
+###simple_socialmedia
+###single-header-social-menu
+###single-share
+###single-share-bot
+###single-share-ex
+###single-share-side
+###single-social-media
+###singlePostShareTop
+###singlesubscribe
+###site-share
+###site-share-bar
+###site-share-footer
+###site-social
+###siteNavShare
+###site_content_facebook_div
+###siteshare
+###sitewide-social
+###sl_share_tw
+###slatest_twitter
+###slideshowSocial
+###sliding_social
+###sm-share-cnt
+###sm_follow_us
+###sm_share
+###smthemes_share
+###sns-btn
+###snsBlockArea
+###snsFollow
+###snsWrapperBottom
+###snsWrapperTop
+###sns_bar
+###sns_btns
+###social-2
+###social-actions
+###social-aside
+###social-badges
+###social-bar
+###social-bar-bottom
+###social-bar-top
+###social-block
+###social-block-wrapper
+###social-bookmark-container
+###social-bookmarks-menu
+###social-border
+###social-bottom
+###social-box
+###social-box-home
+###social-box-vert
+###social-boxs
+###social-breadcrumbs
+###social-btn-menu
+###social-buttons-bottom
+###social-buttons-category
+###social-buttons-margin
+###social-buttons-margin-wrapper
+###social-buttons-nav
+###social-buttons-spacing
+###social-buttons-transporter
+###social-buttons-wrapper
+###social-channels
+###social-col
+###social-column
+###social-community-popup
+###social-context-container
+###social-count
+###social-counter-widget-1
+###social-counter-widget-2
+###social-counter-widget-3
+###social-cta
+###social-digest
+###social-dropdown-anchor
+###social-email
+###social-engage
+###social-facebook
+###social-fb
+###social-fb-snapchat-cta-like
+###social-feeds-tabs
+###social-fixed-links
+###social-float
+###social-float-block
+###social-floater
+###social-floating
+###social-follow
+###social-follow-article-body
+###social-follow-box
+###social-follow-inarticle
+###social-followers-group
+###social-foot
+###social-footer
+###social-grid-container
+###social-head
+###social-header
+###social-hub
+###social-icon-menu-byline
+###social-icon-menu-container
+###social-icons-3
+###social-icons-block
+###social-icons-right
+###social-icons-wrap
+###social-inline
+###social-instagram
+###social-island
+###social-launch
+###social-like-us
+###social-link
+###social-link-menu
+###social-links
+###social-links-big
+###social-links-bottom
+###social-links-container
+###social-links-facebook
+###social-links-foot
+###social-links-layer
+###social-links-toggle
+###social-links-top
+###social-links-twitter
+###social-loop
+###social-media-bar
+###social-media-bar-h
+###social-media-box
+###social-media-footer
+###social-media-header
+###social-media-hub
+###social-media-icons
+###social-media-icons-container
+###social-media-links
+###social-media-menu
+###social-media-nav
+###social-media-navigation
+###social-media-share
+###social-media-sidebar
+###social-media-things
+###social-media-wrapper
+###social-media_ad-container
+###social-media_footer
+###social-meta
+###social-module-1
+###social-module-container
+###social-nav
+###social-nav-holder
+###social-nav-links
+###social-navbar
+###social-navigation
+###social-nella-sidebar
+###social-networking-icons-round
+###social-networking-images
+###social-networks-footer-block
+###social-networks-widget
+###social-new-widget
+###social-overlay
+###social-overlay-wrap
+###social-photo
+###social-pinterest
+###social-plugins
+###social-plugins_bottom
+###social-popup
+###social-profiles
+###social-profiles-widget-wrapper
+###social-projects
+###social-promo
+###social-promo-flyin
+###social-rail
+###social-reader
+###social-right
+###social-share
+###social-share-Count
+###social-share-bottom
+###social-share-buttons
+###social-share-buttons-block
+###social-share-buttons-wrapper
+###social-share-count
+###social-share-footer-icons
+###social-share-inline
+###social-share-links-side
+###social-share-selection
+###social-share-sidebar-widget
+###social-share-top
+###social-share-video
+###social-share-with-friend-by-email
+###social-sharebox
+###social-sharing
+###social-sharing-bar
+###social-sharing-buttons
+###social-sharing-buttons-footer
+###social-sharing-widget-mobi-sticky
+###social-side
+###social-side2
+###social-sidebar
+###social-single-margin
+###social-sites-wrapper
+###social-slideout
+###social-slider
+###social-slider-menu
+###social-space
+###social-spotify
+###social-stats
+###social-sticky
+###social-subscribe-search
+###social-tabs
+###social-text
+###social-toolbox
+###social-tools-bottom-container
+###social-tools-panel
+###social-tools-panel_gig_containerParent
+###social-tools-top-container
+###social-tools-vertical
+###social-tools-wrapper
+###social-topWrap
+###social-vert
+###social-vertical
+###social-view
+###social-votes
+###social-widget
+###social-widgets
+###social-wrap
+###social-wrapper
+###social-wscs
+###social-youtube
+###social-yt
+###social2
+###social4iv
+###socialAreaStoryBlog
+###socialArticle
+###socialB
+###socialBadge
+###socialBanner
+###socialBar
+###socialBarre
+###socialBarreBG
+###socialBlocElements
+###socialBlockFollow
+###socialBlog
+###socialBookMarks
+###socialBookmarkLinks
+###socialBookmarks
+###socialBottom
+###socialBoxOuter
+###socialBtn
+###socialButton
+###socialButtonOnPage
+###socialButtons
+###socialClickCountWidget
+###socialColumn
+###socialConnect
+###socialConnects
+###socialContainer
+###socialCounterWidget
+###socialEntryBar
+###socialFB
+###socialFacebook
+###socialFeedItem
+###socialFeedbackBar
+###socialFeet
+###socialFloatVert
+###socialFloor
+###socialFollow
+###socialFooter
+###socialGoogle
+###socialGrid
+###socialHead
+###socialHeader
+###socialHighlighted
+###socialHolder
+###socialIcons
+###socialIconsBox
+###socialIconsContainer
+###socialIconsFoot
+###socialInner
+###socialInstagram
+###socialLikeFacebook
+###socialLikeTwitter
+###socialLinks
+###socialLinksContainer
+###socialLinksLeft
+###socialLinksMainColumns
+###socialLogos
+###socialMedia
+###socialMedia-facebook
+###socialMedia-linkedin
+###socialMedia-twitter
+###socialMediaBar
+###socialMediaBox
+###socialMediaBoxout
+###socialMediaBtns
+###socialMediaCallout
+###socialMediaFacebook
+###socialMediaFlyouts
+###socialMediaGray
+###socialMediaHorizontalToolbar
+###socialMediaLeisteMobilSticky
+###socialMediaMenu
+###socialMediaNav
+###socialMediaReddit
+###socialMediaSection
+###socialMediaShare
+###socialMediaStumbleUpon
+###socialMediaTwitter
+###socialMediaVerticalToolbar
+###socialMediaWidget
+###socialModal
+###socialModule
+###socialNav
+###socialNetworkBox
+###socialNetworkIcons
+###socialNetworking
+###socialNetworkingBar
+###socialNetworks
+###socialNetworksBar
+###socialNlBloc
+###socialOverlay
+###socialOverlayRemix
+###socialPinterest
+###socialPluginFB
+###socialPopup
+###socialPromote_facebook
+###socialPromote_googleplusone
+###socialPromote_twitter
+###socialPush
+###socialRight
+###socialShare
+###socialShare1
+###socialShare2
+###socialShare3
+###socialShareMenuBtn
+###socialShareModule
+###socialSharePrivacyCtrl
+###socialShareVerticalWrapper
+###socialSharing
+###socialSharingDiv
+###socialSharingToolsBox
+###socialSideBar
+###socialSidebar
+###socialSidebarNew
+###socialSiteSites
+###socialStart
+###socialTabs
+###socialToolbarContainer
+###socialToolbarHolder
+###socialTools
+###socialTop
+###socialTw
+###socialTwitter
+###socialTwitterBadge
+###socialView
+###socialWidget
+###socialWidgetPopup
+###socialWidgets
+###socialWidgetsWrap
+###socialWire
+###socialWrap
+###socialWrapper2
+###socialYouTube
+###social_badges
+###social_bar
+###social_bar_left
+###social_bar_top_gig_containerParent
+###social_bkm_wrap_top
+###social_block
+###social_body
+###social_book
+###social_bookmark
+###social_bookmarking_module
+###social_bookmarks
+###social_bookmarks_list
+###social_bottom
+###social_bottom_float
+###social_box
+###social_box_container
+###social_btn_fb
+###social_btn_g
+###social_btn_tw
+###social_btns
+###social_bugger
+###social_button_toaster
+###social_buttons_global
+###social_circles
+###social_connect_holder
+###social_cont
+###social_facebook
+###social_fb
+###social_fixed
+###social_float_box
+###social_follow
+###social_followers
+###social_footer
+###social_googleplus
+###social_head
+###social_home
+###social_hook
+###social_hub
+###social_icon1
+###social_icon2
+###social_icon_article_top
+###social_icons
+###social_icons_widget
+###social_in
+###social_in_header
+###social_instagram
+###social_large
+###social_link
+###social_links
+###social_linksnewspaper
+###social_list
+###social_media
+###social_media_container
+###social_media_icons
+###social_media_links
+###social_media_list
+###social_media_page_share
+###social_media_widget
+###social_menuShare1
+###social_mobile
+###social_module
+###social_more
+###social_nav
+###social_net
+###social_network_links
+###social_network_links_3
+###social_network_mobile_footer
+###social_networking_block
+###social_networks-2
+###social_new
+###social_ok
+###social_panel
+###social_pi
+###social_pinterest
+###social_popup
+###social_pro_counter
+###social_right
+###social_room
+###social_section
+###social_share
+###social_share_actions
+###social_share_bar
+###social_share_desktop
+###social_share_wrapper
+###social_sharing
+###social_side
+###social_side_links
+###social_sidebar
+###social_sidebar_container
+###social_slider
+###social_snap_bar
+###social_snapchat
+###social_tab
+###social_table
+###social_tabs
+###social_top
+###social_tw
+###social_twitter
+###social_vertical_box
+###social_vkontakte
+###social_widget
+###social_widget-11
+###social_widget-4
+###social_widget-8
+###social_widget_iframe
+###socialarticlelinks
+###socialbar
+###socialbar-container
+###socialbar-fixed
+###socialbar-mobile
+###socialbar-nav
+###socialbarwrapper
+###socialblock
+###socialbookmark
+###socialbookmark-con
+###socialbookmarks
+###socialbox
+###socialbox-container
+###socialbox-float
+###socialbtns
+###socialbugs
+###socialbutterfly
+###socialbuttonnav
+###socialbuttons
+###socialbuttonsbox
+###socialcontainer2
+###socialcount
+###socialcounters
+###socialdiv
+###socialdock
+###socialemail
+###socialfeed
+###socialfloat
+###socialfly
+###socialfollowbar
+###socialfollowbox
+###socialfooter
+###socialgroups-info-vk
+###socialhdr
+###socialicon
+###socialicons
+###socialiconsContainer
+###socialicons_sticky
+###socialine
+###socialise-most-rec
+###socialist_networking
+###socialize-this
+###socialize-toolbox
+###socialize_top_right
+###socializethis
+###socialleft
+###sociallinks
+###socialmedia-bottom
+###socialmedia-icons
+###socialmedia-share
+###socialmedia_small
+###socialmedia_tools
+###socialmediabar
+###socialmediabuttons
+###socialmediacrap
+###socialmediaicons
+###socialmediasidebar
+###socialmobile
+###socialmobilicon
+###socialnav
+###socialnet
+###socialnet2
+###socialnets
+###socialnetworkblock
+###socialpopup
+###socialpopup2
+###socialpost
+###socialprivacy
+###socialprofiles-2
+###socialreader_content
+###socialrht
+###socials-top
+###socials-top-wrap
+###socials_popup
+###socialscene
+###socialshare
+###socialshare-fixed
+###socialshare_btns
+###socialshareblock
+###socialshareprivacy
+###socialsharing
+###socialsidebar
+###socialslider
+###socialslider-contener
+###socialsticky
+###socialtabs_fb
+###socialtabs_gp
+###socialtabs_tw
+###socialtabz
+###socialthree
+###socialtoolkit
+###socialtop
+###socialvibe
+###socialvibe_badge
+###socialwrap
+###socialz
+###sociobar1
+###socmed_buttons
+###socmed_container
+###socmediaBar
+###spArticleFunctionSocial
+###spSocialBookmark
+###sprite-mshare
+###ssba_twitter_share
+###st-social
+###stDigg
+###static-social
+###staticsocialbar
+###stayConnectedBlock
+###stereoSocial
+###sticky-footer-social-icons
+###sticky-share
+###sticky-sharing
+###sticky-sharingbar-container
+###sticky-social
+###sticky-social-list
+###sticky-social-nav
+###sticky-social-sidebar
+###stickyShare
+###stickySharer
+###stickySharing
+###stickySocial
+###sticky_sharing
+###stickyshare
+###storyShareButton
+###storyShareContainer
+###story_share_after
+###story_social_buttons
+###story_social_toolbar_top_container
+###subFooterSocial
+###subheader-social-box
+###subscribe-and-share
+###subscribe-facebook
+###subscribe-icons-2
+###subscribeSocial
+###subscribe_under_post
+###subscribebox-widget-2
+###subscribebox-widget-3
+###subscription-box
+###surveyshare-buttons
+###svgFacebook
+###svgGoogle
+###svgTwitter
+###svgYoutube
+###sys_shareButtons
+###t-sns
+###tab-share
+###tabcontent_facebook
+###table_shareus
+###tb_share
+###td_menusocial
+###top-bar-social
+###top-link-social
+###top-share
+###top-share-buttons
+###top-social-L
+###top-social-links
+###top-social-share-buttons-container
+###top-socials-follow
+###topSocial
+###top_nav_share_tools
+###top_share
+###top_share_link
+###top_share_widget
+###top_sharebuttons
+###top_sharebuttons_placeholder
+###top_social_fb
+###top_social_g
+###top_social_networks_container
+###top_social_twit
+###topnavSocial
+###topshare
+###topsharearea
+###topsharebar
+###topsocial
+###tp-social
+###tpSharesContainer
+###tronReddiShare
+###tsocial
+###twShare
+###tw_socialPageLink
+###tweet-button
+###tweetContainer
+###tweet_it_bro
+###tweet_share
+###tweetmemeAndFacebook
+###tweetroll
+###twit-feed
+###twitBox
+###twitSocial
+###twiter_share
+###twitt-button
+###twitter-2
+###twitter-after-post
+###twitter-alm-timeline
+###twitter-announcement-bg
+###twitter-badge
+###twitter-box
+###twitter-button
+###twitter-button-content
+###twitter-entry
+###twitter-facebook-widgets
+###twitter-feed
+###twitter-follow
+###twitter-follow-box
+###twitter-icon
+###twitter-link
+###twitter-module
+###twitter-panel
+###twitter-promo
+###twitter-sb
+###twitter-share
+###twitter-side-widget
+###twitter-sidebar
+###twitter-sidebar-re
+###twitter-sidebar-sg
+###twitter-social-tab
+###twitter-video-share-counter
+###twitter-widget
+###twitter-widget-sidebar
+###twitter2
+###twitterBlock
+###twitterBtn
+###twitterContainer
+###twitterFollow
+###twitterFollowBadge
+###twitterM
+###twitterModule
+###twitterSearch
+###twitterShareButton
+###twitterWidgetHeader
+###twitter_banner
+###twitter_btn
+###twitter_button
+###twitter_content
+###twitter_follow
+###twitter_link
+###twitter_linkage
+###twitter_module
+###twitter_panel
+###twitter_promo
+###twitter_right
+###twitter_share
+###twitter_share_link
+###twitter_social
+###twitter_social_sidebar
+###twitter_splash
+###twitter_stream
+###twitter_timeline-2
+###twitter_watch
+###twitter_widget
+###twitterbtn
+###twitterbuts
+###twitterfeed
+###twitterfllowBoxSmall
+###twittericon
+###twitterlike
+###twittertweetsearch
+###twitterwrapper
+###twtr-link-only
+###ugf-facebook
+###universal-social-share
+###utilitybar-social
+###v-share
+###validationSocial
+###vbseo-likes
+###vce_social_menu
+###vert-share
+###vertical-share-wrapper
+###vertical-social-bar
+###verticalSharebar
+###verticalSnsBar
+###verticalSocialToolBar
+###viber_share
+###video-detail-share
+###video-social
+###videoShareToEmailBtn
+###videoShareToEmbed
+###vjs-voc-social-share
+###votvShare_top
+###vps_like_box
+###vps_like_fade
+###vps_share_box
+###vps_share_fade
+###vshares
+###vv_moduleFacebook_overlay
+###w-i-socials-small
+###w2bSocialPlaceholder
+###w_twitter_wrapper
+###wallet-socials
+###wao-social-icons
+###watch-social
+###watch_page_social
+###wdb-bottom-social
+###wdsb-share-box
+###we-share-social-icons
+###webui-shareTools
+###week_fb_like
+###whatsAppShareLink
+###whatsapp-share
+###whatsappshare
+###wibiyaToolbar
+###widgedsocial
+###widget-Twitter_Tweets
+###widget-facebook
+###widget-followbar
+###widget-sharebar
+###widget-social
+###widget-twitter
+###widget_facebook
+###wk_socialbar
+###wksocial
+###wktwitter
+###woca-social-widget
+###wolf-jp-share
+###wp-share-wrap
+###wp_fb_like_button
+###wp_social_popup_and_get_traffic
+###wp_twitter_goodies_profile_widgets
+###wpcw_social-7
+###wpzoom-social-widget
+###wpzoom-widget-social-2
+###wrap-sharing
+###wsu-social-channels
+###xe-header-social-nav
+###xing-share
+###youmightlike
+###yt-widget
+###ytSocial
+###z2t_social
+###z_social
+###z_socialBg
+###zoom-social-icons-widget
+###zoom-social-icons-widget-1
+###zoom-social-icons-widget-2
+##.-movie-info-share
+##.-socialsharing
+##.ActionButton--share
+##.AllSocialFeeds
+##.AppFooter-social
+##.Article-headerSocialButton
+##.Article-socialShare
+##.ArticleBottomShareComponent
+##.ArticleHeaderShareComponent
+##.ArticlePage-sharing
+##.ArticleSocialMediaTopBar
+##.ArticleTombstone-shareHeading
+##.ArticleTombstone-shareLink
+##.ArticleView-bottomShares
+##.ArticleView-shares
+##.Article__socialShare
+##.Article__socialShareContent
+##.BlogDetail-Footer-share
+##.Blogs-Share
+##.BoxSocial
+##.BroSocial
+##.BtnShareGroup
+##.ButtonSharing
+##.ButtonsSharing
+##.ClickFacebookLike
+##.CustomSocial
+##.Custom_Facebook_Page
+##.DP-ShareBox
+##.DiggThisButton
+##.DivShareNews
+##.EE-social
+##.Entry-infoSocial
+##.EntryShare
+##.EntryShareButton
+##.Entry_Sharer_Buttons
+##.FB-follow
+##.FBLikeBox
+##.FHSocial
+##.FacebookBoxMainPage
+##.FacebookFollowButton
+##.FacebookICN
+##.FacebookLike
+##.FacebookShare
+##.FacebookShareButton
+##.FacebookTwitter
+##.Facebook_like
+##.FbShare
+##.FeatureShare
+##.FeatureSocial
+##.FloatSocialShareContainerWrapper
+##.FollowButton
+##.FollowByEmail
+##.FollowUs
+##.Footer-groupSocials
+##.Footer-links-social
+##.Footer-section-social
+##.Footer-section-social-item
+##.Footer-share
+##.Footer-socialButtons
+##.FooterSocial
+##.FooterSocialMedia
+##.Footer__Facebook
+##.Footer__Twitter
+##.Footer__Upper--Social
+##.Footer___socialIcons
+##.Footer___socialLogo
+##.Gallery-Share
+##.GigyaShareBarBottomControl
+##.GigyaShareBarTopControl
+##.Header-social
+##.Header-socialIcons
+##.HeaderGrid-socialList
+##.Header__Button--Social
+##.Hero-Share-SocialLink
+##.IcnSocials
+##.IcoSocial
+##.IconSocialMedia
+##.LayoutSocialTools
+##.LikeBox
+##.LikeButton
+##.LikeContainer
+##.LineShareButton
+##.LinkedinFollowButton
+##.Links-Social
+##.ListSocial
+##.MainListSocial
+##.ModuleSocialIcons
+##.NativeSocialMedia
+##.NavSocial-facebook
+##.NavSocial-instagram
+##.NavSocial-li
+##.NavSocial-twitter
+##.NavSocial-ul
+##.Nav__Social
+##.Navbar__follow
+##.NewSocial_Gab
+##.NewSocial_Mewe
+##.NewSocial_Pinterest
+##.NewSocial_SteemIt
+##.NewSocial_Twitter
+##.NewsMaterial-sidebar
+##.NnSocialMediaContainer
+##.OMSocialDiv
+##.ObsShare
+##.PIN-share-button
+##.PNShare
+##.PageSharingMenu
+##.PinItButton
+##.PinterestButtonContainer
+##.PinterestICN
+##.PlusFollowers
+##.PostFooter__share
+##.PostFooter__shareButtons
+##.PostPicture__pinterest-button
+##.PostShareAfterContent
+##.PostShareBeforeContent
+##.PostSocial
+##.PremiumObitShare
+##.QUISocialList
+##.RadSocialShare
+##.RelookingFooter__social
+##.SL_Share
+##.SOCIAL
+##.SUD_socail_links
+##.SectionsContent__Socials
+##.SelfSocial
+##.Share-bar
+##.Share-buttons
+##.Share-item
+##.Share-item--social
+##.Share-reveal
+##.ShareAndComments
+##.ShareBar
+##.ShareBar-shareItems
+##.ShareBarRight
+##.ShareBlock-isReact
+##.ShareBox
+##.ShareBtnHold
+##.ShareButton
+##.ShareButton-headerWrapper
+##.ShareButton-shareContainer
+##.ShareButtons
+##.ShareButtons__link
+##.ShareCta
+##.ShareDropdown-trigger
+##.ShareFloat
+##.ShareIcons
+##.ShareImage
+##.ShareIndexBut
+##.ShareIt
+##.ShareLinks
+##.ShareLinksContainer
+##.ShareList
+##.ShareMenu
+##.ShareOptions
+##.SharePanelText
+##.SharePanelVisibleButton
+##.SharePrompt
+##.ShareRail
+##.ShareRow
+##.ShareSocialFB
+##.ShareSocialWrap
+##.ShareSource
+##.ShareTab
+##.ShareThis
+##.ShareThisBlock
+##.ShareThisButton1
+##.ShareThisButton2
+##.ShareThisButton4
+##.ShareThisMainPanel
+##.ShareThisPage
+##.ShareThis_Title
+##.ShareToolBarTop
+##.ShareTools
+##.Share_Buttons
+##.Share_FB
+##.Share_Icons
+##.Share_TW
+##.Sharebar
+##.Sharer
+##.Sharer_icon
+##.Sharer_inner
+##.Sharer_link
+##.Shariff
+##.Sharing-list
+##.SharingContainer
+##.SidebarBox--facebook
+##.SidebarBox--social
+##.SidebarBox--twitter
+##.SidebarSocialLinks
+##.Sidebar_followus
+##.SingleArticleSocialContainer
+##.SiteFooterSocial
+##.SiteFooter__follow
+##.SiteHeader__social-links
+##.Social-Media
+##.Social-link
+##.SocialAccordion
+##.SocialArticleHeader
+##.SocialArticleIcons
+##.SocialBar
+##.SocialBar__component
+##.SocialBookmark
+##.SocialBooks
+##.SocialCta
+##.SocialFollow
+##.SocialGroupIcon
+##.SocialIcon
+##.SocialIcon-link
+##.SocialIconNews
+##.SocialIcons
+##.SocialIconsBlock
+##.SocialKit
+##.SocialLiksFooter
+##.SocialLiksHeader
+##.SocialLinks
+##.SocialLinks--footer
+##.SocialLinks-linkContainer
+##.SocialList
+##.SocialList-component
+##.SocialList-item
+##.SocialMediaInjectionDiv
+##.SocialMediaLinks
+##.SocialMediaShareButton
+##.SocialMedia_share
+##.SocialMenuItemLinkIcon
+##.SocialNetwork-moreServices
+##.SocialNetworkItem
+##.SocialNetworkLinks
+##.SocialPluginsWidget
+##.SocialRibbon
+##.SocialRing_Widget
+##.SocialRow
+##.SocialSection
+##.SocialShare
+##.SocialShare-socialShare
+##.SocialShares
+##.SocialSharing
+##.SocialSharingContainer
+##.SocialSharingWrapper
+##.SocialThis
+##.SocialTool_
+##.SocialTools
+##.SocialToolsWidget
+##.SocialTwitter
+##.Social_Widget
+##.Social_container
+##.Social_title
+##.Socialbuttons
+##.Socials
+##.Socials-root
+##.Ssns-head
+##.StickyShareBlock
+##.StlyeSocial
+##.StoryShare
+##.StoryShareBar
+##.StoryShareBottom
+##.SynFacebookLike
+##.SynTwitterShare
+##.TWShare
+##.Teaser-info-shares
+##.Tfacebook
+##.Total_Shares_Box
+##.Trend-social
+##.Ttwitter
+##.Twitter-icon
+##.TwitterActivity
+##.TwitterArea
+##.TwitterButton
+##.TwitterDiv
+##.TwitterFollowButton
+##.TwitterFollowUs
+##.TwitterICN
+##.TwitterShareButton
+##.TwitterTweetButton
+##.Twitter_Widget
+##.Twitter__social
+##.UrgentSocialLink
+##._footer__social
+##._rmSocial
+##._socialF
+##._socialsScr
+##._wf-social
+##._wrapShares
+##.a-btn-facebook
+##.a-footer-share
+##.a-footer__share
+##.a-header__share
+##.a-icon-share-email
+##.a-icon-share-facebook
+##.a-icon-share-pinterest
+##.a-icon-share-twitter
+##.a-link--facebook
+##.a-picto-social
+##.a-share
+##.a-social-btn
+##.a2a-buttons
+##.a2a_floating_style
+##.a2a_vertical_style
+##.aFNSNS
+##.aI_sns_facebook
+##.aI_sns_google
+##.aI_sns_instagram
+##.aI_sns_twitter
+##.aToolType-share
+##.aToolType-social
+##.a__share
+##.a_social_bas_fb
+##.a_social_bas_twt
+##.aa-share-article
+##.aa_share
+##.aa_soc_sidebar
+##.aa_socials
+##.aai-social-media
+##.ab-esport-social-share
+##.ab-fb-page-plugin-container
+##.abBtnFacebook
+##.abShareFb
+##.abSocialFbLikesCount
+##.abh_social
+##.aboutShareLinks
+##.aboutSocialLinks
+##.above-content-share-tools
+##.above-content-sharebar
+##.above-nav-social
+##.abp-social-div
+##.absurdsharediv
+##.abtlikebox
+##.accueil_socials
+##.acticle__social
+##.action--share
+##.action-box-social
+##.action.mailto.friend
+##.actionlinks__shares
+##.actionlinks__title
+##.actions-bar-share
+##.actions-social
+##.actions-sociaux
+##.actions_facebook
+##.actions_sharethis
+##.actions_twitter
+##.actnbr-has-follow
+##.acx-social-icons-desc
+##.ad-sharing
+##.ad-sharing__link
+##.ad-social
+##.adSocial
+##.adb-footer-social
+##.adblSocialContainer
+##.adblSocialIcons
+##.add-this
+##.addition__share
+##.addsSocialItem
+##.addsSocialWrapper
+##.addthis-block-pre-content
+##.addthis-block-sidebar
+##.addthis-button
+##.addthis-container
+##.addthis-div
+##.addthis-facebook
+##.addthis-footer
+##.addthis-googleplus
+##.addthis-linkedin
+##.addthis-single-wrap
+##.addthis-smartlayers
+##.addthis-smartlayers-desktop
+##.addthis-twitter
+##.addthis-vertical-layout
+##.addthis-wrapper
+##.addthis:not(body)
+##.addthisContainer
+##.addthisShareV1
+##.addthisToolbarBtm
+##.addthisToolbarTop
+##.addthisTop
+##.addthis_32x32_style
+##.addthis_bar
+##.addthis_button
+##.addthis_button_compact
+##.addthis_button_digg
+##.addthis_button_expanded
+##.addthis_button_facebook
+##.addthis_button_facebook_follow
+##.addthis_button_facebook_like
+##.addthis_button_instagram
+##.addthis_button_linkedin
+##.addthis_button_more
+##.addthis_button_plurk
+##.addthis_button_print
+##.addthis_button_reddit
+##.addthis_button_tumblr
+##.addthis_button_tweet
+##.addthis_button_twitter
+##.addthis_button_twitter_follow
+##.addthis_button_whatsapp
+##.addthis_container
+##.addthis_container_alt2
+##.addthis_custom_button
+##.addthis_default_style
+##.addthis_digg
+##.addthis_email
+##.addthis_fallback
+##.addthis_header
+##.addthis_horizontal
+##.addthis_horizontal_follow_toolbox
+##.addthis_inline_share_toolbox
+##.addthis_jumbo_share
+##.addthis_native_toolbox
+##.addthis_responsive_sharing
+##.addthis_separator
+##.addthis_sharing_toolbox
+##.addthis_toolbox
+##.addthis_toolbox_alt2
+##.addthis_toolbox_container
+##.addthis_toolbox_horz
+##.addthis_total_count
+##.addthisbuttons
+##.addtoany
+##.addtoany_list
+##.addtoany_share_save
+##.addtoany_share_save_container
+##.adfacebook
+##.adh-mobile-share
+##.adi-share
+##.adi-share-flyout
+##.admania_postsocial
+##.admania_singleshare
+##.admania_socialsharecount
+##.adv-social-links
+##.advanced-social-widget
+##.advancedsocialwidget
+##.af-btn-fb
+##.af-share
+##.af-social-btn-big
+##.af-social-btns
+##.af-social-share-v2
+##.af_share_buttons
+##.after-post-social-media-container
+##.agencies-about-share
+##.agi-mediagallery-social-container
+##.ah_share
+##.aht-sns
+##.aiir-share
+##.aiir-share__list
+##.ajmint-social-counts
+##.akamai-share
+##.akp-sharebar-fixed
+##.alchetronShareCard
+##.all-share-links
+##.allshare_buttons
+##.altshare
+##.amc-social
+##.amp-facebook
+##.amp-o-share-tools
+##.amp-o-social-bar
+##.amp-social-bar
+##.amp-social-container
+##.amp-social-style
+##.amp-social-wrap
+##.amp-socialicons
+##.amp-wp-share
+##.amp-wp-social
+##.ampforwp-social-icons
+##.ampforwp-social-icons-wrapper
+##.ampstart-social-follow
+##.ampz-icon-facebook
+##.ampz-icon-twitter
+##.ampz_facebook
+##.ampz_twitter
+##.an_player_share
+##.ankeiler__fblikes
+##.answer__share
+##.answer_shares
+##.anv-splash-share
+##.ao-share-wrapper
+##.aol-faux-facebook-like
+##.aol-follow
+##.aol-share
+##.aol-share-container
+##.ap-article-social
+##.ap-follow-widget
+##.apFollowWidget
+##.app--table-cell__share
+##.app-bar-share
+##.app-list-share
+##.app-share-trigger
+##.app_btn_share
+##.app_share_icons
+##.app_share_mod
+##.app_share_nl
+##.append_social_share
+##.apps-social
+##.aps-social-icon-wrapper
+##.apsc-facebook-icon
+##.apsc-icons-wrapper
+##.apsc-twitter-icon
+##.apss-social-share
+##.apss-social-share-sidebar
+##.ar1web-social
+##.aricle-share
+##.aricle-sticky-share
+##.arq-lite-facebook
+##.arq-lite-instagram
+##.arq-lite-twitter
+##.arqam-lite-widget-counter
+##.arqam-widget-counter
+##.arqam_counter-widget
+##.arr--share
+##.art-nb-share
+##.art-share
+##.art-share-nav
+##.art-share__list
+##.art-shares
+##.art-sharing
+##.art-sharre
+##.art-sns
+##.art-social
+##.art-social-bar
+##.art-social-toolbar
+##.art-topbar_share
+##.art19-social-share
+##.artShare
+##.artShareFixW
+##.art__tools--share
+##.art_share_rev
+##.art_share_right
+##.art_shr_top
+##.artcl-social-media
+##.arti-sharing-wrapper
+##.artical-social-media-share
+##.article--share
+##.article--sharebutton
+##.article--social
+##.article-aside__social-icons
+##.article-bottom-share
+##.article-bottom-sharing
+##.article-bottom-social-share
+##.article-box-social
+##.article-byline-shares
+##.article-card__share
+##.article-content-sharing
+##.article-content__share-group
+##.article-core__sticky-share
+##.article-fbs-sharing
+##.article-followNav
+##.article-followistic
+##.article-footer-share
+##.article-footer-social
+##.article-footer__share
+##.article-footer__sharing
+##.article-full__share
+##.article-gutter-share
+##.article-gutter__social
+##.article-head__share
+##.article-header-sharing
+##.article-header-social
+##.article-header__share
+##.article-icon-share
+##.article-inside-shareable-box
+##.article-low-meta__shares
+##.article-media-icons
+##.article-meta-share__share
+##.article-meta-social
+##.article-meta__social
+##.article-mobile-social-share
+##.article-open_shere
+##.article-page-share-buttons
+##.article-page-sharing
+##.article-page-social-dropdown
+##.article-page__social
+##.article-page__social-wrapper
+##.article-pic-soc
+##.article-rail__social
+##.article-selection-shares
+##.article-share-cnt
+##.article-share-social
+##.article-share__item
+##.article-share__link
+##.article-share_badges
+##.article-sharer
+##.article-sharer-sticky
+##.article-shares
+##.article-shares-links
+##.article-shares-stub
+##.article-sharing
+##.article-sharing-actions
+##.article-sharing-nav
+##.article-sharing-top
+##.article-side-share
+##.article-side-share-ynetnews
+##.article-sidebar-action-facebook
+##.article-sidebar-action-twitter
+##.article-soc
+##.article-soc-for-mobile
+##.article-sociable-top
+##.article-social
+##.article-social-bar
+##.article-social-bar-floating
+##.article-social-bookmark
+##.article-social-bottom
+##.article-social-bottom-popover
+##.article-social-box
+##.article-social-btn
+##.article-social-button
+##.article-social-buttons
+##.article-social-col
+##.article-social-container
+##.article-social-float
+##.article-social-icons
+##.article-social-icons-container
+##.article-social-links
+##.article-social-media
+##.article-social-opts
+##.article-social-overlay
+##.article-social-panel
+##.article-social-rel
+##.article-social-section
+##.article-social-share
+##.article-social-sharing
+##.article-social-sidebar
+##.article-social-toolbar
+##.article-social-tools
+##.article-social-top
+##.article-social-wrapper
+##.article-socialMedia
+##.article-social__meta--share-count
+##.article-socials
+##.article-sticky-nav__shares
+##.article-subline-share
+##.article-title-share
+##.article-top-bar-share
+##.article-twitter-experiment
+##.article-v2-rail__social
+##.articleFooterSocial
+##.articleFooterSocialSharing
+##.articleFooterSocials
+##.articleHeaderSocialSharing
+##.articleHeader__shareLinks
+##.articleIconLinksContainer
+##.articleMetadata__share
+##.articleShare
+##.articleShare-buttons
+##.articleShareBar
+##.articleShareBox
+##.articleShareLinks
+##.articleSharing
+##.articleSharingBlock
+##.articleSharing_bottom
+##.articleSocial
+##.articleSocialBar
+##.articleSocialBookmarks
+##.articleSocialButtons
+##.articleSocialLinks
+##.articleSocialMedia
+##.articleSocialNetwork
+##.articleToolbarShare
+##.article__actions__social
+##.article__commentBubble-socialShare
+##.article__details--desktop-share
+##.article__details__share
+##.article__fb-share
+##.article__footer-share-title
+##.article__footer__likes
+##.article__footer__sharing
+##.article__head-socials
+##.article__header__share
+##.article__info__share
+##.article__item_share
+##.article__likes
+##.article__likes-title
+##.article__meta_social
+##.article__share
+##.article__share-bar
+##.article__share-btns
+##.article__share-buttons
+##.article__share-links
+##.article__share-title
+##.article__share_box
+##.article__sharebar
+##.article__shares
+##.article__sharing
+##.article__sharing-module
+##.article__social
+##.article__social--links
+##.article__social-icons
+##.article__social-links
+##.article__social-menu
+##.article__social-share
+##.article__socialButtons
+##.article__social__link
+##.article__social__list
+##.article__socials
+##.article_bottom_share
+##.article_container_toolbar_share
+##.article_content_share_text
+##.article_detail_share
+##.article_facebook
+##.article_footer_pinterest
+##.article_footer_share
+##.article_header_share
+##.article_left_share
+##.article_pageshare_add
+##.article_pinterest
+##.article_share
+##.article_share_buttons
+##.article_share_container
+##.article_shares
+##.article_shares_mobile
+##.article_sharing
+##.article_social
+##.article_social_share
+##.article_social_sharing_box
+##.article_social_wrap
+##.article_socials
+##.article_top_social
+##.articlebottomsharinglinks
+##.articlek_share_wrap
+##.articleshare-new
+##.articlesharebox
+##.articleshares
+##.artlsocl
+##.ashare_box
+##.asicon-facebook
+##.asicon-google-plus
+##.asicon-twitter
+##.aside-follow__social
+##.aside-news-box-share
+##.aside-social
+##.aside-social__widget__wrapper
+##.aside-socials
+##.asideShareFB
+##.asideShareTwitter
+##.asideSocial
+##.asideSocial-article
+##.asideWithSharebar
+##.asocial-area
+##.aspexifblikebox
+##.aspexifbsidebox
+##.asset-inline-share-tools
+##.asset-inline-share-tools-bottom
+##.asset-share
+##.astrsocial
+##.at-icon-facebook
+##.at-icon-pinterest_share
+##.at-share
+##.at-share-btn
+##.at-share-v
+##.at4-jumboshare
+##.atButtonFacebook
+##.atButtonPinterest
+##.atend_sns
+##.atfollowwidget
+##.au-share
+##.author-bio__social
+##.author-card__social
+##.author-follow-button
+##.author-profile-social
+##.author-share
+##.author-social
+##.author-social-style2
+##.author-social__share
+##.author-socials
+##.authorSocial
+##.authorSocialTools
+##.author_social
+##.author_socialmedia
+##.author_socials
+##.author_socs
+##.authorbox-social
+##.av-share-box
+##.av-social-share
+##.avSharing
+##.av_content_facebook
+##.av_content_twitter
+##.avia_fb_likebox
+##.avia_socialcount
+##.awp-media-share-container
+##.az-share-buttons
+##.b-advert-social-wrapper
+##.b-article-image-footer__social-link
+##.b-article-share__buttons
+##.b-article__social
+##.b-articles__b__share
+##.b-button_type_list-one_fb-square
+##.b-buttons_social
+##.b-c-social
+##.b-dop-social-links
+##.b-employee-item__social
+##.b-event_links__share__block
+##.b-facebook-like
+##.b-fast-access__list-item_share
+##.b-fb_share
+##.b-follow-us
+##.b-footer-social-icons
+##.b-footer__social
+##.b-footer_social
+##.b-gallery__btn_share
+##.b-header__nav-social
+##.b-header__social
+##.b-header__social-box
+##.b-image-share
+##.b-imperial_social
+##.b-overlay-soc.b-overlay-soc_act
+##.b-post-socials
+##.b-pub-detail__share
+##.b-s-share
+##.b-share
+##.b-share-btn__count
+##.b-share-button
+##.b-share-button-group
+##.b-share-media__main-position
+##.b-share__facebook
+##.b-share__twitter
+##.b-sharebar
+##.b-sharelist
+##.b-sidebar-menu__socials
+##.b-sidebar-social
+##.b-social-icon-star
+##.b-social-icon-star-empty
+##.b-social-icons
+##.b-social-icons_vertical
+##.b-social-links--slide-out
+##.b-social-popup
+##.b-social-share
+##.b-social-squared
+##.b-social-userbar__expand-button
+##.b-social-userbar__soc-container
+##.b-social-widget
+##.b-social_like_box
+##.b-socialnets
+##.b-socialpane
+##.b-socials
+##.b-socials-subscribe
+##.b-ss-share
+##.b-topic__socials
+##.b-widget-sharing
+##.b-ya-share
+##.b2jsocial
+##.bI-topnav-stationsocialfb
+##.bI-topnav-stationsocialtw
+##.bI-topnav-stationsocialyt
+##.bSharePage
+##.b_facebook
+##.b_footer__socialmedia
+##.b_like
+##.b_share
+##.b_soc_bottom
+##.b_social
+##.b_social_icons
+##.b_socialbar
+##.b_youtube
+##.badge-facebook-share
+##.badge-pinterest-share
+##.badge-share
+##.badge-social-footer
+##.badge-twitter-share
+##.badges_v2
+##.banner-promo-fb
+##.banner-social
+##.banner-social-icons
+##.banner_tweets
+##.bar-social
+##.bb-nav-social
+##.bb-nav-social-container
+##.bb-share-bar-container
+##.bb-social
+##.bb-social-link
+##.bc-author-socials
+##.bc-socials
+##.bc_social_icons
+##.bctt-click-to-tweet
+##.bd-FooterFollow-Icon
+##.bd-FooterSocials-item
+##.bd-social
+##.bd-socialicon
+##.bdaia-social-io
+##.bdaia-social-links
+##.bdaia-widget-facebook
+##.beSocialShare
+##.beacon-social
+##.bean-social-profiles
+##.bean-social-subscribers
+##.bean_wiz_share
+##.beauty-bookmarks
+##.becomeFanFollow
+##.begeni-social
+##.beh-social-links-list
+##.beingSocial
+##.below-article-share-block
+##.besocial
+##.bestwp-share-buttons
+##.better-social-counter
+##.bg-button-twitter
+##.bg-share
+##.bgShare.fb
+##.bgShare.instagram
+##.bgShare.tiktok
+##.bgShare.twiiter
+##.bgShare.youtube
+##.bg_popup-social__wrap
+##.bi-share
+##.big-pinterest-icon
+##.big-red-socialmediabar
+##.big-share
+##.big-share-button
+##.big-share-buttons
+##.big-share-col
+##.big-share-container
+##.big_facebook_share
+##.bigsocialblock__bg
+##.bigsocialblock__item
+##.bigsocialblock__social-icon
+##.bimber-microshare-item-share
+##.bio-share-bloc
+##.bio-social
+##.bio-socials
+##.bio-with-share
+##.bio__social
+##.biz-share
+##.biz-social_links
+##.bk-dt-share
+##.bk-profile-socialicons
+##.bk-share-box-top
+##.bk-socialbox
+##.bk-socialicons-facebook
+##.bk-socialicons-twitter
+##.bk_allsocial
+##.bk_facebook_share
+##.bk_google_share
+##.bk_linkedin_share
+##.bk_pinterest_share
+##.bk_quicksocial
+##.bk_vk_share
+##.bl_instagram
+##.bl_likebox
+##.bl_socialbox
+##.bl_tweets
+##.blip-follow-us
+##.blk-form-social
+##.bloc-article-partage
+##.bloc-info-facebook
+##.bloc-info-twitter
+##.bloc-share
+##.bloc-social
+##.blocSociaux
+##.bloc_float_share
+##.bloc_social
+##.bloccosocial-home
+##.block--social-share
+##.block-addtoany
+##.block-addtoany-addtoany_button-instance
+##.block-altsocial
+##.block-ap-twitter
+##.block-block-footersocialmedia
+##.block-block-socialmedia
+##.block-click-twitter
+##.block-cta__socials
+##.block-ec_facebook
+##.block-ec_social
+##.block-facebook
+##.block-facebook-inner
+##.block-fb-social
+##.block-fb_like
+##.block-follow-social
+##.block-follow-tni
+##.block-followus
+##.block-ibtmedia-social
+##.block-idg_twitter
+##.block-minisocialsharingblock
+##.block-osdc-social-block
+##.block-scmedia-social-share-buttons
+##.block-share-bis
+##.block-share-large
+##.block-share__item
+##.block-sharebar
+##.block-sharethis
+##.block-shariff
+##.block-simple-share
+##.block-social
+##.block-social-header
+##.block-social-media
+##.block-social-media-links
+##.block-social-network
+##.block-social-share
+##.block-social-share-block
+##.block-social-share-links
+##.block-socialmedia
+##.block-socials
+##.block-socialsharingblock
+##.block-trinity-social
+##.block-twitter
+##.block-umhs-share
+##.blockShare
+##.blockSocial
+##.blockSocialLink
+##.block_240_socials
+##.block_follow-us
+##.block_post_social
+##.block_share
+##.block_social
+##.block_social_activity
+##.block_social_aside
+##.block_social_counter
+##.block_socialshare
+##.blocreseauxsociaux
+##.blocsocial.fb
+##.blocsocial.post
+##.blocsocial.twt
+##.blog-follow
+##.blog-inline-share
+##.blog-post-info-bar-share
+##.blog-post-meta-share-count
+##.blog-post-meta-share-count-num
+##.blog-post-share
+##.blog-post-share-aside
+##.blog-share
+##.blog-share-box
+##.blog-share-container
+##.blog-share-toolbar
+##.blog-social
+##.blog-social-buttons
+##.blog-social-icons
+##.blog-social-item
+##.blog-social-left
+##.blog-social-side-bar
+##.blog-social-side-bar-top
+##.blogIndexFollowOn
+##.blog_post_share
+##.blog_share_social_box
+##.blogs-social-wrp
+##.bloque-social
+##.bloqueRedesSociales
+##.bloqueRedesSocialesPie
+##.blox-social-tools-horizontal
+##.blvs-share-button
+##.bn-social-list
+##.bn-social-share
+##.bna-share-btn
+##.bnn-social-share
+##.bo-social-outline-light
+##.bookmark-share
+##.bot_aa_share
+##.bot_sociales
+##.botart-share-line
+##.boton_googleplus
+##.boton_twitter
+##.botones-sociales-wrapper
+##.bottom-article-share
+##.bottom-bar--sharing
+##.bottom-bar-share-button
+##.bottom-footer__social
+##.bottom-meta--share
+##.bottom-share
+##.bottom-share-1
+##.bottom-share-buttons
+##.bottom-share-module
+##.bottom-share-wrapper
+##.bottom-sharebar
+##.bottom-shares
+##.bottom-sharethis
+##.bottom-social
+##.bottom-social-buttons
+##.bottom-social-share
+##.bottom-socialbar
+##.bottom-socials
+##.bottom-top-social
+##.bottomSocialBtns
+##.bottomStormShareSec
+##.bottom__share
+##.bottom_share
+##.bottom_share_buttons
+##.bottom_share_panel
+##.bottom_shares
+##.bottom_social
+##.bottomsocial
+##.bottone-social
+##.bottoni-social
+##.bottwitterarticle
+##.bouton_sociaux
+##.box-app-phone-share
+##.box-facebook
+##.box-followus
+##.box-repro-social
+##.box-share
+##.box-share-content-group
+##.box-share-group
+##.box-share-master-container
+##.box-share-on
+##.box-social
+##.box-social-buttons
+##.box-social-icons
+##.box-social-share
+##.box-social-share__list
+##.box-social-share__wrapper
+##.box-social-share__wrapper--fixed
+##.box-social2
+##.box-twitter-script
+##.box1__footer-share-box
+##.boxSocial
+##.box_ShareContent
+##.box_condivisione
+##.box_followme
+##.box_msg_social
+##.box_social
+##.box_social_media
+##.box_social_ticker_fixed
+##.boxed-sharing-icons
+##.boxsocial
+##.boxsociale
+##.boxzilla-like-us-facebook
+##.bp-share-btn
+##.bp-share-button
+##.bpro-social
+##.bq-tweet
+##.bq_shareDiv
+##.br-fblike
+##.brand-share-button
+##.brand-social
+##.brand-social-icons
+##.breakingNews__socialMedia
+##.brid-share-button
+##.brid-share-button-holder
+##.brid-share-control
+##.brief-socialnetwork
+##.brk-sharebar
+##.brk-sharebar-abcd
+##.brojShareova
+##.bsocialwidget
+##.bss_share_container
+##.bt-share
+##.bt-social-share
+##.btFacebook
+##.btLinkedIn
+##.btTwitter
+##.bt__footer__social
+##.bt__sharebtn__container
+##.bt__sharebtn__md
+##.bt__tab__list__socials
+##.bt_facebook
+##.bt_instagram
+##.bt_share
+##.bt_social
+##.bt_tweet
+##.bt_twitter
+##.btfb
+##.btm_share_sns
+##.btm_sharethis_wrapper
+##.btn--facebook-share
+##.btn--googleplus-share
+##.btn--gplus
+##.btn--reddit-share
+##.btn--schmocial
+##.btn--share
+##.btn--sns
+##.btn-bottom-social
+##.btn-common-social-header
+##.btn-custom-social-full
+##.btn-facebook-lg
+##.btn-facebook-like
+##.btn-fbook-share
+##.btn-follow--facebook
+##.btn-follow--googleplus
+##.btn-follow--linkedin
+##.btn-follow--twitter
+##.btn-group-social
+##.btn-icon--social
+##.btn-icon--social--alt
+##.btn-more-share
+##.btn-reseaux-sociaux
+##.btn-shares
+##.btn-shares-toolbox
+##.btnShareFacebook
+##.btnShareTwitter
+##.btnShareWhatsapp
+##.btnSocialStumbleUpon
+##.btnTwitterConnect
+##.btn_delicious
+##.btn_furl
+##.btn_share
+##.btn_shareContact
+##.btn_social
+##.btn_twit
+##.bts_social
+##.btsocialfooter
+##.bttn-share
+##.bu-share
+##.buha-icon--facebook
+##.buha-icon--twitter
+##.buha-icon--vimeo
+##.buha-social-media-share-links
+##.buttShare
+##.button-fblike
+##.button-network_facebook
+##.button-network_twitter
+##.button-pinterest
+##.button-share
+##.button-share-facebook
+##.button-share-home
+##.button-share-twitter
+##.button-share__bar
+##.button-share__media
+##.button-share__media--facebook
+##.button-share__media--google
+##.button-share__media--mail
+##.button-share__media--pinterest
+##.button-share__media--twitter
+##.button-social
+##.button-social-share
+##.button-toggle-share
+##.button-twitter
+##.button__share
+##.button__social
+##.button_list_menu_social
+##.button_pinterest
+##.button_share
+##.button_share_sapo
+##.button_share_sidebar
+##.button_twitter
+##.buttons-share
+##.buttonsShare
+##.buttons__share-medium
+##.buttons__share-small
+##.bw-social
+##.bw_sharetom
+##.bx-footer__social-links
+##.byline-share
+##.byline-shares
+##.byline-sharing
+##.bylineSocialHandle
+##.byline__social-handle
+##.c-Footer__links__social
+##.c-NavSocial
+##.c-NavSocial-item
+##.c-article-header__social
+##.c-article-share
+##.c-article__sharing
+##.c-article_closingInfo_share
+##.c-article_service_option-btnShare
+##.c-articlehead__detail__share
+##.c-articlenav__socialsharing
+##.c-aside--subscribe
+##.c-author__social-media
+##.c-block__share
+##.c-blog-social
+##.c-bolt-share
+##.c-bottom-player__share-btn
+##.c-btnShare
+##.c-footer-social
+##.c-footer-social-channels
+##.c-footer-social-link
+##.c-footer-social-media
+##.c-footer__follow-us
+##.c-footer__list--follow
+##.c-footer__social
+##.c-footer__social-links
+##.c-footer__social-list
+##.c-footer__social-list-item
+##.c-footer__social-media
+##.c-footer__socials-list
+##.c-header__social
+##.c-header_social
+##.c-home-share-box
+##.c-icon--whatsapp
+##.c-list--social
+##.c-main-footer__social
+##.c-mainheader__share
+##.c-mainsocial
+##.c-nav-social
+##.c-navbar-primary__social
+##.c-page-footer-social-media
+##.c-poll-share__social
+##.c-poll-share__text
+##.c-post-engage-share
+##.c-post-engage-shares
+##.c-post-share__links
+##.c-redes-sociais
+##.c-scribblelive__social
+##.c-share
+##.c-share-article
+##.c-share-box-social-item
+##.c-share-social
+##.c-share-social--sticky
+##.c-share-tools
+##.c-share-tools__group
+##.c-share1
+##.c-share_link
+##.c-sharebar
+##.c-sharebtn
+##.c-sharefixed
+##.c-sharing--menu
+##.c-site-footer__social-icons
+##.c-sns
+##.c-social-bar
+##.c-social-box
+##.c-social-buttons--popover
+##.c-social-buttons__item
+##.c-social-buttons__twitter
+##.c-social-container
+##.c-social-menu
+##.c-social-navigation
+##.c-social-share
+##.c-social-shares
+##.c-social-sharetool
+##.c-social-sharing
+##.c-social-wrap
+##.c-socialSharebar_container
+##.c-social__list
+##.c-social__networks
+##.c-socialbar
+##.c-socialchannels
+##.c-socials
+##.c-socials-aside
+##.c-socialshare
+##.c-tab-bar__social
+##.c-teaser_share
+##.c-teaser_shareLink
+##.c-tools-share
+##.c-top-bar__social
+##.c-twitter-post-widget
+##.c25__social
+##.c5-social-sidebar
+##.c5-ss-share
+##.c5ab_social_counter
+##.cShareLink
+##.c_facebook
+##.c_hxcms_social_buttons
+##.c_share
+##.c_sharebtmcol1
+##.c_sharebtmdiv
+##.c_sharebtns
+##.c_sharelftcol
+##.c_sharetitle
+##.c_social-toolbar
+##.c_social_btns
+##.c_social_media
+##.ca-article__social
+##.caas-share-section
+##.cactus-share-and-like
+##.cadre-reseaux-sociaux
+##.callout-highlight-share
+##.callout-sharenews
+##.canvas-share-buttons
+##.caption-social
+##.card-post__shareBtn
+##.card-post__shareSection
+##.card-share
+##.card__share
+##.card__share-action
+##.card__shareBtn
+##.card__social
+##.care2_share_bar
+##.carshare
+##.cat-hdr-share
+##.catalog-generation__share
+##.categories-topbar__socials
+##.category-share
+##.catfish--social
+##.cb-social-sharing
+##.cb_share_block
+##.cbn-socials
+##.ccm-block-social-links
+##.ccm_social__box
+##.ccm_social_buttons
+##.ccm_social_header
+##.cd-fb-like-widget
+##.cd-social-sharing
+##.cda-social-share__container
+##.cdc_social_icons
+##.cdj-socials
+##.cf-print-share
+##.cf-social-buttons
+##.cff-share-container
+##.cff-share-link
+##.cff-share-tooltip
+##.cfp-footer_social
+##.cfp-utilitynav_social-items
+##.checkout-share
+##.chegg-social-widget
+##.ci-socials-ignited
+##.cikk_socials_container
+##.circle-facebook-share
+##.circle-share
+##.circle-twitter-share
+##.citizen_gplus_box
+##.citizen_twitter_box
+##.cl-social
+##.clanky_side_social
+##.clanok_social
+##.clay-share
+##.clean-share-box
+##.clip-sharing-social-wrapper
+##.clk-pinit
+##.club_func_social
+##.cmSocialMediaList
+##.cmSocialMediaListContainer
+##.cmg-share
+##.cmg-share-bar
+##.cmg-share-box
+##.cmp_share_container
+##.cmplx-shares
+##.cmuShareWidget
+##.cn-social-links
+##.cnbc-share-bottom
+##.cnbc-share-top
+##.cne-share
+##.cnfooter-share
+##.cnt_followers
+##.cnwShare_boxes
+##.col-fb
+##.col-flipboard
+##.col-reddit
+##.col-sharing
+##.col-social
+##.col-social-page
+##.col_dx_social
+##.collapsible-share-widget
+##.color-social-button
+##.colorShareBtn
+##.column-social
+##.com-footer-m-social-list
+##.comedy_share
+##.comedy_share_title
+##.comment-share
+##.comment-share__buttons
+##.comment-sharing-share
+##.comment-social
+##.commentShare
+##.commentShareSec
+##.comment__share
+##.comment_share
+##.comment_share_link
+##.comment_share_toggle
+##.comments-and-share
+##.comments-share
+##.comments-social
+##.comments__likes
+##.common-social
+##.common-social-link
+##.common-social-list
+##.common-ui-facebook-bottom
+##.commonSocial
+##.common_share
+##.commonheader_social
+##.community-footer-social
+##.community__social
+##.community__social-desc
+##.community__social-ico
+##.community__social-item
+##.comp-share
+##.comp-social-channels
+##.comp_right_SNS
+##.companyBarSocial
+##.compartir-social
+##.component-facebook-like
+##.component-pinterest
+##.component-social
+##.component-social-feeds-v1
+##.component-social-follow
+##.component-social-share
+##.components-ShareButton-___ShareButton__button
+##.condivisioni-articolo
+##.connect-button-facebook
+##.connect-button-gplus
+##.connect-button-instagram
+##.connect-button-twitter
+##.connect-icon-container
+##.connect-icons
+##.connect-instagram
+##.connect-sidebar-widget
+##.connect-social-button
+##.connect-social-icons
+##.connect-social-items
+##.connect-with-us
+##.connect-with-us-widget
+##.connect-youtube
+##.connectFbFlyout
+##.connect_widget_button_count_including
+##.connectwithusbox
+##.cont-social-header-top-bar
+##.contSocial
+##.cont_reseaux_icon
+##.cont_social
+##.cont_text_edit_social_box
+##.contact-module__btns
+##.contactSocialMedia
+##.container-links-social-media
+##.container-share-group
+##.container-share-middle
+##.container-share-small
+##.container_home_social
+##.container_social_footer
+##.container_social_header
+##.container_social_home
+##.containertwitter
+##.contenedor_redes_sociales
+##.content-footer-social
+##.content-item-explicitShare
+##.content-share-article
+##.content-share-col
+##.content-share-wrap
+##.content-social-distribution
+##.content-social-media
+##.content-social-share-videos
+##.content-top-social
+##.contentShare
+##.contentShareButtons
+##.contentShareLeft
+##.contentSocialBar
+##.content__box__share
+##.content__share
+##.content__share--header
+##.contentcolumnrightsocial
+##.contentshare
+##.convosharebuttons
+##.cookie-bottom-layer
+##.copyright-socials
+##.core-share
+##.cosmo-social
+##.count-facebook
+##.count-googleplus
+##.count-twitter
+##.countShare
+##.counted-share-vertical
+##.counter-globalLikeBox
+##.counter-share
+##.cover-day-box--share
+##.cp-follow-buttons
+##.cp-share-list-entry-share
+##.cp-share-list-itens
+##.cp-social-flyin
+##.cp-social-media
+##.cp-topsocial
+##.cq-footer-social
+##.crafty-social-buttons
+##.cresta-share-icon
+##.crm-share-list
+##.crunchify-social
+##.cs-entry__after-share-buttons
+##.cs-share
+##.cs-single-post-share
+##.cs-social-icon
+##.csbwfs-social-widget
+##.csc_social_counter
+##.csf-sharing
+##.cshare
+##.cshare-wrapper
+##.csi_sharing
+##.css-social-sidebar
+##.css-socialmedialogos
+##.cstm-plugin-share-sec
+##.cstm-plugin-share-sec-top
+##.ct-footer-socials
+##.ct-header-socials
+##.ct-share
+##.ct-share-box
+##.ct-share-icons
+##.ct-sharing
+##.ct-top-sharing
+##.ctf-tweets
+##.ctv-v2-share-wrapper
+##.cu-share-inline-mobile
+##.cunjo-social-profiles
+##.current-article-button-facebook
+##.currentArticleShareIcons
+##.cus-sidebar-social-media-connect
+##.custom-fb-button
+##.custom-follow-bar
+##.custom-follow-button
+##.custom-google-plus-button
+##.custom-nav-social-media
+##.custom-share-button
+##.custom-shareFb
+##.custom-sharing
+##.custom-sharing-link
+##.custom-soc
+##.custom-social
+##.custom-social-buttons
+##.custom-social-icon
+##.custom-social-media
+##.custom-social-share
+##.custom-social-share-wrapper
+##.custom-social-widgets
+##.custom-tweet-button
+##.custom_block_sociallinks_beta
+##.custom_fb_button
+##.custom_share
+##.custom_social
+##.custom_socialnet
+##.custombtnsociaux
+##.customfollow-us
+##.customsocial
+##.customsocialmod
+##.cw51social
+##.cwshare
+##.cxf-column-social
+##.d-comment__action--share
+##.d-post-share-btns
+##.d-share
+##.d-share-buttons
+##.d-social-list
+##.d-social-widjets
+##.d1-social-article
+##.d3-o-share-bar
+##.dSocialBtn
+##.dSocialButton
+##.dan-shariff-wrapper
+##.dark-social
+##.dashicons-facebook
+##.dashicons-twitter
+##.data-section-share
+##.date-bar-mailto
+##.date-bar-print
+##.dc-social-float
+##.dc-social-slick
+##.dc-social-slick-content
+##.dcm-menu-social-new
+##.dcm-story-new__story-share-container-wrapper
+##.dd-article-social
+##.dd-share-bar-wrapper
+##.dd-share-buttons
+##.dd-social
+##.dd_post_share
+##.ddc-social-share
+##.de-footer-social-logo
+##.deatil_social_liks
+##.decom-share
+##.default-layout-footer-social
+##.default-layout-header-social
+##.default-share
+##.delfi-social
+##.delicious-blogbadge
+##.delicious_icon
+##.desktop-share
+##.desktop-sharrre-bar
+##.desktop-social
+##.desktopShareBar
+##.det-media-fb-btn
+##.det-media-tw-btn
+##.detShare
+##.detail-article__share-button
+##.detail-page-share
+##.detail-share
+##.detail-share-btIco
+##.detail-share-item
+##.detail-social
+##.detailShare
+##.detailShareBlock
+##.detail__social
+##.detail_share_buttons
+##.detailed-social
+##.detailed_sharingIcons
+##.details-share
+##.details-share-bar
+##.details-share-but
+##.details-share-wrap
+##.detay-head-share
+##.deu_share_top_container
+##.deviation-share
+##.df-social-connect
+##.df-top-bar-social
+##.dfd-share-icons
+##.dfm-share-widget
+##.dh-social-icons-panel
+##.dialog-social
+##.dialog-social-bottom
+##.dialog-social-fb
+##.digg-button
+##.digg-module
+##.digg-widget
+##.diggShare
+##.diggWidgetry
+##.digg_button
+##.digg_icon
+##.diggthis
+##.diks-dropdown--share
+##.div-share
+##.divFacebookButton
+##.divFacebookShareButton
+##.divFooterSocial
+##.divGooglePlus
+##.divLiensSociaux
+##.divShareBottom
+##.divSocial
+##.div_article_share
+##.div_modal_like
+##.div_share
+##.div_share_cnt
+##.dl_footer__socials
+##.dmSocialFacebook
+##.dmSocialHub
+##.dmSocialTwitter
+##.dm_article_share
+##.dm_social_buttons
+##.dm_social_nav_22x22
+##.dmg-social-icon
+##.dn-sns
+##.doc-menu-social
+##.doc-videoshare
+##.docked-sharebar
+##.docked-sharebar-docking-container
+##.document-share
+##.don-share
+##.dp-share
+##.dpArticleShare
+##.dpsp-network-btn
+##.dpsp-networks-btns-share
+##.dpsp-networks-btns-sidebar
+##.dpsp-pinterest
+##.dpsp-share-text
+##.dpsp-total-share-wrapper
+##.drag-social-button-best
+##.dropdown-button-social
+##.dropdown-share-buttons
+##.dropdown-social
+##.ds-share-link
+##.ds-share-list
+##.ds-social
+##.ds2-main-footer--social
+##.dshare
+##.dslc-social
+##.dslc-social-icon
+##.dsp_social
+##.dt_social_single
+##.dtm-footer-social-link
+##.dv-social-media
+##.dvNewDetailShare
+##.dw-social-icons
+##.dwg-footer-plank__social
+##.dy-social-btn-container
+##.dyt-social
+##.dzone-social-buttons
+##.e-footer--social
+##.e-header--sociallist
+##.e-icon-facebookf
+##.e-icon-instagram
+##.e-icon-pinterest
+##.e-icon-twitter
+##.e-mailit_toolbox
+##.e-pinterest-link
+##.e-shares_count
+##.e-social_links
+##.e-subpost_share
+##.e1-social-widgets__content
+##.e14-sharing-icons-div
+##.eShareBar
+##.eSocialButtons
+##.e_share
+##.e_socials
+##.e_widget_share_buttons
+##.ea-share-count-button
+##.ea-share-count-wrap
+##.eapps-social-share-buttons
+##.ear-social_sharing
+##.easy-share
+##.easy-social-profile-buttons-class
+##.easy-social-share-buttons3-class
+##.easy-social-share-fans-counter
+##.easylikeandshare
+##.easyshareit
+##.ebm-share-item
+##.ee-footer-social
+##.eg-footer-icon-facebook
+##.eg-footer-icon-instagram
+##.eg-footer-icon-twitter
+##.eg-footer-icon-vk
+##.eg-footer-icon-youtube
+##.eg_header_facebook
+##.eg_header_twitter
+##.eg_header_youtube
+##.eh-widget--toggle-share
+##.eight8_social_media_footer
+##.eins-facebook
+##.eins-twitter
+##.ekit_social_media
+##.el-icon-facebook
+##.el-icon-twitter
+##.el33t_social_container
+##.elSocial
+##.ele-share
+##.elem-info__share
+##.element-share
+##.element-share-block
+##.element-share-ftr
+##.element-sharethis
+##.element-socialbookmarks
+##.element-socials
+##.elementor-social-icon
+##.elementor-social-icons-wrapper
+##.elementor-widget-facebook-page
+##.elementor-widget-share-buttons
+##.elementor-widget-social-icons
+##.elementos_redes_sociais
+##.email-share
+##.email-share-link
+##.email-sharetool
+##.email-to-us
+##.email_share
+##.embed-social-buttons
+##.end-social
+##.entry-aside-shares
+##.entry-bottom-share
+##.entry-footer-share
+##.entry-meta-share
+##.entry-meta-social
+##.entry-share
+##.entry-share-footer
+##.entry-share-head
+##.entry-share-icons
+##.entry-shares
+##.entry-sharethis
+##.entry-sharing
+##.entry-sharing-bottom
+##.entry-sharing-buttons
+##.entry-sharing-group
+##.entry-sharing__list
+##.entry-sidebar-sharing
+##.entry-social
+##.entry-social-bar
+##.entry-social-buttons
+##.entry-social-connect
+##.entry-social-content
+##.entry-socials
+##.entry-top-share
+##.entryShare
+##.entry__meta__share
+##.entry__meta__share--facebook
+##.entry__meta__share--twitter
+##.entry__share
+##.entry_share
+##.entry_share-trigger
+##.entry_social
+##.entypo-share
+##.entypo-social
+##.enw-footer__shareList
+##.ep-icon-facebook-logo
+##.ep-icon-twitter-logo
+##.ep-sharing-button
+##.ep-sharing-buttons
+##.epaddthis
+##.epcl-share-container
+##.epi-social-links
+##.eplayer-share-social
+##.esi-slide
+##.esocial
+##.ess-share-text
+##.ess-social-sharing
+##.essb-fans-facebook
+##.essb-fans-google
+##.essb-fans-twitter
+##.essb-fans-youtube
+##.essb-flyin
+##.essb-mobile-sharepoint
+##.essb-social-followers-variables
+##.essb_bottombar
+##.essb_item
+##.essb_link_pinterest
+##.essb_link_twitter
+##.essb_links
+##.essb_links_list
+##.essb_share
+##.essbfc-container
+##.essbfc-facebook
+##.essbfc-instagram
+##.essbis-hover-overlay
+##.et-extra-social-icons
+##.et-social-google-plus
+##.et-social-icon
+##.et-social-icons
+##.et-social-links
+##.et_pb_social_media_follow
+##.et_social_facebook
+##.et_social_fadein
+##.et_social_flyin
+##.et_social_follow
+##.et_social_heading
+##.et_social_icons_container
+##.et_social_inline
+##.et_social_mobile
+##.et_social_networks
+##.et_social_pinterest
+##.et_social_popup
+##.et_social_sidebar_networks
+##.et_social_twitter
+##.etsocialmediahyperlink
+##.eut-bar-socials
+##.eut-social-bar
+##.eut-social-share-facebook
+##.eut-social-share-googleplus
+##.eut-social-share-reddit
+##.eut-social-share-tumblr
+##.eut-social-share-twitter
+##.ev-social
+##.ev-social-media-links
+##.event-share-center
+##.event-social-box
+##.eventShare
+##.events-header_main-nav_item-social
+##.ew-social-icons
+##.exp-video-player__topbar__share
+##.expand-share
+##.expanded_story_socialmedia
+##.external_social_share
+##.extra-social
+##.extra-social-links
+##.extra_share
+##.extreme-share
+##.eyebrow-share-widget
+##.eyelusions-article-likebox
+##.eyelusions-social-wrap
+##.f-sns
+##.f1-article--footer-share-wrapper
+##.f1-social-networks
+##.fBsocial
+##.fButtonLarge
+##.faceBookButton
+##.faceBookShareContainer
+##.facebook--like
+##.facebook-activity
+##.facebook-activity-container
+##.facebook-badge
+##.facebook-banner
+##.facebook-banner-wrapper
+##.facebook-bar
+##.facebook-bg
+##.facebook-big-share
+##.facebook-block
+##.facebook-block-height
+##.facebook-bn_site-overlay
+##.facebook-box
+##.facebook-box-widget
+##.facebook-broadcasting-widget
+##.facebook-button-colorbox
+##.facebook-button-link
+##.facebook-circle
+##.facebook-connect-dialog
+##.facebook-count
+##.facebook-count-single
+##.facebook-custom
+##.facebook-facepile
+##.facebook-fans
+##.facebook-floating-button
+##.facebook-flyout
+##.facebook-follow
+##.facebook-follow-button
+##.facebook-follow-pop-from-side
+##.facebook-footer
+##.facebook-ft
+##.facebook-group-box
+##.facebook-hover
+##.facebook-hover-horizontal
+##.facebook-icon-small
+##.facebook-image
+##.facebook-inner
+##.facebook-like
+##.facebook-like-bottom
+##.facebook-like-box
+##.facebook-like-box-holder
+##.facebook-like-button-head
+##.facebook-like-button__caption
+##.facebook-like-large
+##.facebook-like-message-holder
+##.facebook-like-static
+##.facebook-likebox
+##.facebook-likebox-promo
+##.facebook-menu
+##.facebook-messenger-avatar
+##.facebook-modal
+##.facebook-module
+##.facebook-p
+##.facebook-page-effect
+##.facebook-page-plugin
+##.facebook-page-widget
+##.facebook-plain-control
+##.facebook-popup
+##.facebook-recommend
+##.facebook-right-rail
+##.facebook-row
+##.facebook-section
+##.facebook-share-bottom
+##.facebook-share-btn
+##.facebook-share-button
+##.facebook-share-link
+##.facebook-share-story
+##.facebook-sharer
+##.facebook-sharetool
+##.facebook-sidebar
+##.facebook-sidebar-outer
+##.facebook-social
+##.facebook-social-likes
+##.facebook-social-wrapper
+##.facebook-solid-control
+##.facebook-toolbar
+##.facebook-top
+##.facebook-top-button
+##.facebook-twitter
+##.facebook-twitter-share
+##.facebook-twitter-wrap
+##.facebook.box
+##.facebook2
+##.facebook28Ico
+##.facebookActivity
+##.facebookBloc_png
+##.facebookButtonDiv
+##.facebookCountDiv
+##.facebookFanBox
+##.facebookFans
+##.facebookFeed
+##.facebookFrame
+##.facebookGroup
+##.facebookHomepageBottom
+##.facebookImage
+##.facebookItem
+##.facebookLike
+##.facebookLikeBoxSmall
+##.facebookLikeboxContentContainer
+##.facebookLink
+##.facebookOptions
+##.facebookOuter
+##.facebookRec
+##.facebookRecentActivity
+##.facebookRecommend
+##.facebookRecommendation
+##.facebookShare
+##.facebookShareAlert
+##.facebookShareButton
+##.facebookShareIcon
+##.facebookShareToolsContainer
+##.facebookShare__button
+##.facebookSharer
+##.facebookSite
+##.facebookSocialIcon
+##.facebookSs
+##.facebookThis
+##.facebookTwitterIcons
+##.facebookWidgetry
+##.facebookWrapperModule
+##.facebook_24
+##.facebook_activity
+##.facebook_badge
+##.facebook_block
+##.facebook_box
+##.facebook_box_sidebar
+##.facebook_button_bg
+##.facebook_cont
+##.facebook_fanbox
+##.facebook_follow
+##.facebook_follower
+##.facebook_icn
+##.facebook_icon
+##.facebook_image
+##.facebook_indiv_widget
+##.facebook_large
+##.facebook_left
+##.facebook_like
+##.facebook_like_box
+##.facebook_like_pane
+##.facebook_likes_facebook_page
+##.facebook_logo
+##.facebook_net
+##.facebook_new
+##.facebook_plugin_container
+##.facebook_plugin_parent_block
+##.facebook_pop
+##.facebook_recommendations_sidebar
+##.facebook_share
+##.facebook_share_count
+##.facebook_shows_ad_cale
+##.facebook_sm
+##.facebook_tease
+##.facebook_top
+##.facebook_widget
+##.facebookactivity
+##.facebookbox
+##.facebookbutton
+##.facebookcommon
+##.facebookcss
+##.facebooklike
+##.facebooklikefeature
+##.facebooklink
+##.facebooklogo_bottom
+##.facebookshare
+##.facebookshare_div
+##.facewrapper
+##.fastsocialshare_container
+##.fb-activity-module
+##.fb-activity-widget
+##.fb-cont
+##.fb-controls__like
+##.fb-count-flag
+##.fb-custom-share
+##.fb-custom-share-mobile
+##.fb-desktop
+##.fb-exit-popup-container
+##.fb-exit-popup-inner
+##.fb-fan-page
+##.fb-fanpage
+##.fb-flyin
+##.fb-follow-button
+##.fb-follow-link
+##.fb-footer
+##.fb-footer-recommend
+##.fb-footer-share
+##.fb-like-after-lead
+##.fb-like-article-wrapper
+##.fb-like-box
+##.fb-like-box-outer
+##.fb-like-box-wrapper
+##.fb-like-buttons
+##.fb-like-container
+##.fb-like-container-text
+##.fb-like-div
+##.fb-like-holder
+##.fb-like-widget
+##.fb-like2
+##.fb-messenger--collapse
+##.fb-msg
+##.fb-outer
+##.fb-page-like
+##.fb-pageFeed
+##.fb-popup-rec
+##.fb-promo
+##.fb-recommend
+##.fb-sb
+##.fb-send-to-messenger
+##.fb-share
+##.fb-share-article
+##.fb-share-balloon-container-focus
+##.fb-share-button
+##.fb-share-container
+##.fb-share-new
+##.fb-share-post
+##.fb-share-single
+##.fb-sharing
+##.fb-slider
+##.fb-social-likebox-plugin
+##.fb-subscribe
+##.fb-tw-gp-com
+##.fb-tweet
+##.fb-twitter
+##.fb-widget
+##.fb-xfbml-parse-ignore
+##.fbActivity
+##.fbBox
+##.fbBtn
+##.fbLike
+##.fbLikeBox
+##.fbLikeBtn
+##.fbLikeCounter
+##.fbLikeFlyout
+##.fbLikeLogo
+##.fbLogo
+##.fbPageAlert
+##.fbRecommend
+##.fbRecsSide
+##.fbShare
+##.fbShareButton
+##.fbShareTrigger
+##.fbSocialPluginWr
+##.fbStripeVer-facebook
+##.fbSubheader
+##.fbTOP
+##.fbTwitter
+##.fb_all_area
+##.fb_all_inner
+##.fb_badge
+##.fb_bar
+##.fb_blocco
+##.fb_connect_240
+##.fb_content_loader
+##.fb_content_share
+##.fb_find_box
+##.fb_horrorbox
+##.fb_iframe_nourl
+##.fb_iframe_widget_w
+##.fb_like_and_share
+##.fb_like_area
+##.fb_like_box
+##.fb_like_cont
+##.fb_like_group_page
+##.fb_like_wrap
+##.fb_mob2
+##.fb_mobile
+##.fb_plug
+##.fb_promoBox
+##.fb_recommendations_container
+##.fb_recommendations_header
+##.fb_report_icon
+##.fb_share
+##.fb_share_button
+##.fb_share_count_wrapper
+##.fb_share_link
+##.fb_share_size_Small
+##.fb_sharebutton
+##.fb_sidebar
+##.fb_social
+##.fb_t_icon
+##.fb_text_all
+##.fb_timeline_wrapper
+##.fb_widget
+##.fb_wrap
+##.fbar_blog_share
+##.fbbackground
+##.fbbigshare
+##.fbbsb-button
+##.fbbsb-buttons
+##.fbbutton
+##.fbcirclebtn
+##.fbfanpage
+##.fbfollow
+##.fbicon_like_left
+##.fbilike
+##.fblbForm
+##.fblike-all
+##.fblike_box
+##.fblike_container
+##.fblikebox
+##.fblikebtn
+##.fbliketop
+##.fblink
+##.fblke
+##.fbook-share
+##.fbook_like
+##.fbplugin_1
+##.fbpopup
+##.fbpopup-container
+##.fbpromo
+##.fbshare
+##.fbshare-icon
+##.fbshare_btn
+##.fbshare_gm_p
+##.fbsira
+##.fbslideout
+##.fbsmallshare
+##.fbtw_bot
+##.fbtw_top
+##.fbtweet
+##.fbwidth
+##.fc-social-media-header
+##.fe-share
+##.feature-photos-share-tool
+##.featureSocial
+##.featured-article-fb
+##.featured-author-info-social
+##.featuredPagesSocial
+##.feed-facebook-link
+##.feed-instagram-link
+##.feed-twitter-link
+##.feedburnerFlareBlock
+##.feedly_24
+##.ff-icon-share
+##.ff-share-wrapper
+##.fi-article__social-wrap
+##.fi-footer-link__social
+##.fi-social-channels--svg
+##.fi-social-facebook
+##.fi-social-google-plus
+##.fi-social-instagram
+##.fi-social-linkedin
+##.fi-social-pinterest
+##.fi-social-share
+##.fi-social-share__icons
+##.fi-social-twitter
+##.fi-social-youtube
+##.fi_sns
+##.fin_page_sharing
+##.find-on-facebook
+##.findusGooglePlus
+##.findusPinterest
+##.findusYouTube
+##.firms-single-share
+##.first-social-block
+##.firstblockfb
+##.fix-share
+##.fixed-bar-social-icons
+##.fixed-bottom-facebook-widget
+##.fixed-fb-like-box
+##.fixed-header__nav__social__icon
+##.fixed-like-box
+##.fixed-share
+##.fixed-share-bar
+##.fixed-share-btns
+##.fixed-sharebar
+##.fixed-side-social-container
+##.fixed-soc-icon
+##.fixed-social
+##.fixed-social-bar
+##.fixed-social-media
+##.fixed-social-share
+##.fixed-social-wrap
+##.fixedShareMenu
+##.fixedShareSection
+##.fixedhead-share
+##.fixedsocial
+##.fixtweet
+##.fl-share
+##.fl-social-icons
+##.flag-show-social
+##.flare-button-icon
+##.flare-follow
+##.flare-horizontal
+##.flatSocial
+##.flaticon-facebook
+##.flaticon-facebook2
+##.flaticon-facebook3
+##.flaticon-linkedin1
+##.flexi-social-connect
+##.flexshare
+##.float-share
+##.float-social-shares
+##.floatDivSocial
+##.floatShare
+##.float_sharer
+##.floatee-social-buttons
+##.floater-share
+##.floating-facebook
+##.floating-google
+##.floating-header-share
+##.floating-share
+##.floating-share-bar
+##.floating-share-buttons
+##.floating-share-component__list
+##.floating-share-icons
+##.floating-share-wrap
+##.floating-social
+##.floating-social-container
+##.floating-twitter
+##.floating-youtube
+##.floatingShare
+##.floatingShareButtonContainer
+##.floatingSocial
+##.floating_share_button
+##.floating_share_container
+##.floatinglikebox
+##.floatredesSociales
+##.fluid-share-cameraroll-view
+##.fluid_share_container
+##.fluid_share_wrapper
+##.fly-social-icos
+##.fly-text-share
+##.flybox-share
+##.flying-social
+##.flyout-facebook
+##.fn-article-social-share
+##.fn-header-social-links
+##.fn-social-followus
+##.fnb-social
+##.fng-social
+##.fo-Footer_Container_Social
+##.fo-social-follow
+##.foc-social-share
+##.fodicon-facebook
+##.fodicon-google-plus
+##.fodicon-tumblr
+##.fodicon-twitter
+##.foglia-social-inside
+##.follow-appeal-container
+##.follow-author-mini
+##.follow-bar
+##.follow-bar-wrapper
+##.follow-button-facebook
+##.follow-button-gplus
+##.follow-button-twitter
+##.follow-embed__social
+##.follow-facebook
+##.follow-instagram
+##.follow-iphone
+##.follow-link-facebook
+##.follow-link-twitter
+##.follow-link-wrapper
+##.follow-linkedin
+##.follow-pinterest
+##.follow-property-facebook
+##.follow-property-flickr
+##.follow-property-gplus
+##.follow-property-pinterest
+##.follow-property-tumblr
+##.follow-property-twitter
+##.follow-recirc
+##.follow-rs
+##.follow-share
+##.follow-sharer-icon
+##.follow-site
+##.follow-social
+##.follow-social-media
+##.follow-sprite
+##.follow-text
+##.follow-tumblr
+##.follow-tw
+##.follow-twit
+##.follow-twitter
+##.follow-twt
+##.follow-us-block
+##.follow-us-box
+##.follow-us-button
+##.follow-us-component__networks
+##.follow-us-container
+##.follow-us-facebook
+##.follow-us-google
+##.follow-us-icons
+##.follow-us-inline
+##.follow-us-on-instagram-container
+##.follow-us-on-module
+##.follow-us-on-twitter
+##.follow-us-panel
+##.follow-us-right-sidebar
+##.follow-us-twitter
+##.follow-us-txt
+##.follow-us-widget
+##.follow-us-wrapper
+##.follow-us__links
+##.follow-us__networks
+##.follow-vulture
+##.follow-widget
+##.follow-widget-facebook
+##.follow-widget-instagram
+##.follow-widget-twitter
+##.follow-widget-youtube
+##.follow-widgets-wrap
+##.follow-yahoo
+##.follow-youtube
+##.follow-yt
+##.followFooter
+##.followGoogle
+##.followServices
+##.followShare
+##.followSocial
+##.followTwitter
+##.followUs-mostread
+##.followUsBox
+##.followUsButtons
+##.followUsContainer
+##.followUsDiv
+##.followUsLinks
+##.followUsModule
+##.followUsSocialMedia
+##.followYouTube
+##.followYoutube
+##.follow__item
+##.follow__list
+##.follow_author_twitter
+##.follow_icons_container
+##.follow_right_block
+##.follow_share
+##.follow_twitter
+##.followandshare
+##.followbl
+##.followbox
+##.followbtn_ac
+##.followistic-box
+##.follows-channel_fb
+##.follows-channel_twitter
+##.followus-footer
+##.followus-icons
+##.followus-links
+##.followus-static
+##.followus_net
+##.followus_social
+##.followusbx
+##.followuson
+##.followustxt
+##.fondo_social
+##.fontawesome-facebook
+##.fontawesome-google-plus
+##.fontawesome-twitter
+##.foo-facebook
+##.foo-linkedin
+##.foo-twitter
+##.foo_social
+##.foot-info__socials
+##.foot-share
+##.foot-soc-fb
+##.foot-soc-list
+##.foot-soc-twit
+##.foot-social
+##.foot-social-p
+##.foot-socials
+##.foot-summary-buttons-share
+##.foot-twit
+##.footSocIcons
+##.footSocial
+##.footer--contact-social
+##.footer--social
+##.footer--social-icons
+##.footer--social-link
+##.footer-GlobalSocialIcons
+##.footer-a-social
+##.footer-bots-item--facebook
+##.footer-bots-item--telegram
+##.footer-bottom-social
+##.footer-bottom__social
+##.footer-bottom__social-links
+##.footer-col-social
+##.footer-component__social-icons
+##.footer-connect
+##.footer-connect-links
+##.footer-contact-social
+##.footer-contacts__socials
+##.footer-content-social
+##.footer-eletter-social
+##.footer-facebook
+##.footer-facebook-icon
+##.footer-fb
+##.footer-fb-btn
+##.footer-fb-icon
+##.footer-follow
+##.footer-follow-text
+##.footer-follow-us
+##.footer-followUs
+##.footer-followus
+##.footer-global__socialmedia
+##.footer-grazia__social
+##.footer-headings-social-icons
+##.footer-icon-facebook
+##.footer-instagram
+##.footer-instagram-icon
+##.footer-links--social
+##.footer-links-followus
+##.footer-links-social
+##.footer-logos--social
+##.footer-ls-social
+##.footer-main-bottom-social
+##.footer-main-standard-social-list
+##.footer-main__socials
+##.footer-nav-connect
+##.footer-nav-social
+##.footer-network-social
+##.footer-pin
+##.footer-pinterest-icon
+##.footer-primary__social-media-wrapper
+##.footer-quote-share
+##.footer-secondary-social
+##.footer-secondary__social
+##.footer-section-social
+##.footer-section__social-links
+##.footer-share
+##.footer-share-bar
+##.footer-share-bar-container
+##.footer-share-bar-social
+##.footer-share-bar-social-link
+##.footer-share-button
+##.footer-share-buttons
+##.footer-share-list
+##.footer-share-section
+##.footer-shareButton
+##.footer-sharer
+##.footer-sharers
+##.footer-sharing
+##.footer-site-social
+##.footer-sns
+##.footer-social
+##.footer-social-block
+##.footer-social-buttons
+##.footer-social-heading
+##.footer-social-icons-container
+##.footer-social-links
+##.footer-social-n
+##.footer-social-ul
+##.footer-socialIcons
+##.footer-social__components
+##.footer-sociallink
+##.footer-sociallinks
+##.footer-socialmedia
+##.footer-socialmedia-share
+##.footer-socialmediaIcon
+##.footer-socials
+##.footer-socials-section
+##.footer-solcial-btn
+##.footer-top__social
+##.footer-tumblr
+##.footer-tw
+##.footer-tw-icon
+##.footer-tweet
+##.footer-twitter
+##.footer-twitter-icon
+##.footer-twitterLink
+##.footerButtonFacebook
+##.footerButtonGoogle
+##.footerButtonTwitter
+##.footerFacebook
+##.footerFollow
+##.footerFollowUs
+##.footerMainContent__socialButton
+##.footerMainMoreSocial
+##.footerNav--social
+##.footerNavSocials
+##.footerNewSocial
+##.footerSeguici
+##.footerShare
+##.footerSocial
+##.footerSocialIcons
+##.footerSocialShares
+##.footerSocials
+##.footerYouTube
+##.footer_NewsletterSocialIcon
+##.footer__bottom-social
+##.footer__content-social
+##.footer__desktop__bottom__top__social
+##.footer__follow
+##.footer__icons--social
+##.footer__link--social
+##.footer__links__social
+##.footer__list--social
+##.footer__nav--social
+##.footer__nav-social
+##.footer__navbar__socials-container
+##.footer__navigationSocial
+##.footer__section-social
+##.footer__sharethrough
+##.footer__sns
+##.footer__sns-area
+##.footer__soc
+##.footer__soc_container
+##.footer__soc_fb
+##.footer__soc_li
+##.footer__social
+##.footer__social-block
+##.footer__social-channels
+##.footer__social-icon
+##.footer__social-items
+##.footer__social-links
+##.footer__social-list
+##.footer__social-media
+##.footer__social-media-container
+##.footer__social-menu
+##.footer__social-wrapper
+##.footer__socialButtons
+##.footer__socialIcon
+##.footer__socialNetwork
+##.footer__socialNetworkItem
+##.footer__socialmedia
+##.footer__socials
+##.footer_fb
+##.footer_follow
+##.footer_followUs
+##.footer_global_nav_sns_inner
+##.footer_head_social
+##.footer_link_socials
+##.footer_link_socials_list
+##.footer_nav_social
+##.footer_right_social
+##.footer_share
+##.footer_social
+##.footer_social-icon
+##.footer_social_bar
+##.footer_social_button
+##.footer_social_facebook
+##.footer_social_gplus
+##.footer_social_icons
+##.footer_social_links
+##.footer_social_social-networks
+##.footer_social_twitter
+##.footer_social_wrapper
+##.footer_socialblock
+##.footer_socialnav
+##.footer_socials
+##.footer_socialtab
+##.footer_sosial
+##.footer_sprite_facebook
+##.footer_sprite_twitter
+##.footer_sshare
+##.footerbottomsocial
+##.footerlinks.social
+##.footernav-social
+##.footernavigation__social
+##.footerr-social
+##.footersocial
+##.footersocialbtn
+##.footersociallinks
+##.footsocial
+##.footsocialize
+##.forbes-share-page
+##.format-social-buttons
+##.forum-share
+##.fotSocial
+##.fotterSocialNet
+##.fourSq-widget
+##.fr_sns
+##.frame-social
+##.frontpage-social-block
+##.fticon-facebook
+##.fticon-twitter
+##.fticon-youtube
+##.ftnd-footer-follow
+##.ftop-social
+##.ftr-share
+##.ftr-social
+##.ftr-social-links
+##.ftr-socials
+##.ftr__follow
+##.ftr_social_links
+##.ftrd_share
+##.ftv-player-share
+##.full-article-basic__share
+##.full-article-sharelinks
+##.full-custom-social-links
+##.full_share_container
+##.full_social
+##.fuse_social_icons_links
+##.fusion-sharing-box
+##.fusion-social-network-icon
+##.fv-sharing
+##.fv-sharing-bottom
+##.fv-social
+##.fv_sharing
+##.fv_sharing_classic
+##.fvfacebook_share
+##.fyre-share-button
+##.fyre-share-link
+##.g-header__share
+##.g1-drop-the-socials
+##.g1-social
+##.g1-social-icons
+##.g1-socials-item
+##.g1-socials-section
+##.g1-twitter
+##.gPlusLogo
+##.gPlusPageBadge_widget
+##.g_share
+##.ga-linkedin
+##.ga-socials
+##.gab-bttn
+##.gab_share_widget
+##.gab_social_widget
+##.gabfire_share_widget
+##.gadget_page_share
+##.gadget_post_share
+##.galepro-core-sharebtn
+##.galepro-core-social-share
+##.galepro-core-socialicon-share
+##.galeriSocial
+##.gall-info-share
+##.galleria-share
+##.gallery-share
+##.gallery-share-container-small
+##.gallery-sharing
+##.gallery-social
+##.gallery-social-icons
+##.gallery-social-links__description
+##.gallery__share
+##.gallery__share-buttons
+##.gallery__share-page
+##.gallery__share-pinterest
+##.gallery__share-twitter
+##.gallery__social
+##.gallery__social-icon
+##.gameShareWidget
+##.gb-share
+##.gc_social_floating
+##.gd-newsletter-subscribe-sharelinks
+##.gdhp-share
+##.gdlr-social-share
+##.geShareTool
+##.geekmag-share-buttons
+##.general_social_icons
+##.generic_share
+##.genericon-facebook
+##.genericon-facebook-alt
+##.genericon-instagram
+##.genericon-linkedin
+##.genericon-pinterest
+##.genericon-twitter
+##.genericon-youtube
+##.genesis-simple-share-juice
+##.gensharelinks
+##.gesso-social-selection-area
+##.get-social
+##.getfaceBook
+##.getshare-button
+##.getsocial
+##.gf2_follow
+##.gf_nav-follow-icons
+##.gf_social
+##.gfacebook
+##.ggm-social-share-bar
+##.ggshare
+##.gig-button-container--reddit
+##.gig-comment-shareLink
+##.gig-composebox-share
+##.gig-followbar
+##.gig-reaction-bar-container
+##.gig-share-bar-container
+##.gig-share-button-container
+##.gig-simpleShareUI
+##.gigya-share
+##.gigya-share-bar
+##.gigya-share-btns
+##.gigya-sv
+##.gigyaShareBottom
+##.gigyaShareDirectApi
+##.gizmo-fb-mini
+##.gizmo-twitter
+##.gk-amp-social-share
+##.gk__share
+##.glide-slide-sharebar
+##.global--social--share-menu
+##.global-fb-like
+##.global-follow_us
+##.global-footer-snsarea
+##.global-footer-social
+##.global-footer-social-sharing
+##.global-footer__social
+##.global-footer__social-link
+##.global-share
+##.global-social
+##.globalFacebook
+##.globalInstagram
+##.globalSocialLinks
+##.globalTwitter
+##.global_sharing_controls
+##.glyphicon-gplus
+##.glyphicon-instagram
+##.glyphicon-telegram
+##.glyphicons-share-alt
+##.gmg-follow-us-widget
+##.gms-social-links
+##.gmt-social-buttons
+##.gn-col-share
+##.gn_social-container
+##.gnt_ss_a
+##.go-twit
+##.good_old_share_specificfeeds_follow
+##.goodsIntro_share
+##.goodsShare
+##.goodshare
+##.google-share
+##.google-share-btn
+##.google-share-button
+##.google-shareButton
+##.google-sharetool
+##.google-social-float-icon
+##.google-widget
+##.googleShareButton
+##.gp-author-social-icons
+##.gp-share
+##.gp-share-button
+##.gp-share-email
+##.gp-share-tumblr
+##.gp-social-counts-list
+##.gr-panel--social
+##.gr-twitter
+##.grayShareBtn
+##.greyContentShare
+##.grid-socialwrap
+##.gridlove-content-share
+##.gridlove-share
+##.gridlove-share-item
+##.gridlove-share-wrapper
+##.gridlove-soc-menu
+##.group--social
+##.grpSocial
+##.gs-c-share-tools
+##.gs-share
+##.gs-sharebar
+##.gs-social-incontent
+##.gs-social-popup-trigger
+##.gs_social_signals
+##.gshare
+##.gsn-social
+##.gsn-social-sidebar
+##.gsocialbar
+##.gt-social-menu
+##.gt_twitter
+##.gtm-articleFbShareA
+##.gtm-articleFbShareB
+##.gtm-clipboard-share-button
+##.gtm-email-share-button
+##.gtm-facebook-share-button
+##.gtm-social
+##.gtm-social-link
+##.gtm-twitter-share-button
+##.gtmStickyShare
+##.gtm_footer_facebook
+##.gtm_footer_googleplus
+##.gtm_footer_instagram
+##.gtm_footer_twitter
+##.gtm_share_top_facebook
+##.gtm_share_top_google
+##.gtm_share_top_twitter
+##.gtv-mod9-share
+##.gtv-mod9-share-facebook
+##.gtv-mod9-share-twitter
+##.gui-btn-sm-facebook
+##.gui-btn-sm-google
+##.gui-btn-sm-instagram
+##.gui-btn-sm-linkedin
+##.gui-btn-sm-pinterest
+##.gui-btn-sm-twitter
+##.gui-btn-sm-youtube
+##.guides16-social-top
+##.h-button-social
+##.h-c-social
+##.h-do-share
+##.h-share
+##.h-social-fb
+##.h-social-nl
+##.h-social-yt
+##.h5ToggleShare
+##.h5ab-print-button-container
+##.haber-sosyal
+##.haber_sosyal
+##.haberaltshare
+##.has-button-share
+##.hat_social_tab
+##.hatena-bookmark-button
+##.hatena-btn-icon
+##.hatenabutton
+##.hb-social-icons-widget
+##.hc_social
+##.hcf-action-share
+##.hcf-header-socials
+##.hcf-socials-widgets
+##.hd-share-btn
+##.hd-social-icons
+##.hd_shr_sct
+##.hdr-social
+##.hdsocial2
+##.head-fb
+##.head-post-share
+##.head-share2
+##.head-social-links
+##.head-twt
+##.headShare
+##.headSocialBtnWrap
+##.headSocialLinksListFacebook
+##.headSocialLinksListTwitter
+##.head_nav_social_fb
+##.head_nav_social_tw
+##.header-banner-menu__social
+##.header-bottom-share-button
+##.header-btn__facebook
+##.header-contact-link--facebook
+##.header-contact-link--twitter
+##.header-controls__share-toggle
+##.header-facebook
+##.header-fb-share
+##.header-fixed-social-icon
+##.header-follow-list
+##.header-follow-social
+##.header-follow-us
+##.header-g-plus-share
+##.header-google-plus
+##.header-icon-instagram
+##.header-interna-share
+##.header-item-social
+##.header-item__social
+##.header-main-socs
+##.header-menu__social
+##.header-nav-social
+##.header-nav-social-facebook
+##.header-nav-social-instagram
+##.header-nav-social-twitter
+##.header-pagina__social
+##.header-pin-it
+##.header-right-social
+##.header-section-social
+##.header-share
+##.header-share-facebook
+##.header-share-links
+##.header-share-social
+##.header-share-title
+##.header-share-twitter
+##.header-shares
+##.header-social--link
+##.header-social-area
+##.header-social-btn
+##.header-social-button
+##.header-social-button-fb
+##.header-social-button-gp
+##.header-social-button-tu
+##.header-social-button-tw
+##.header-social-button-yt
+##.header-social-buttons
+##.header-social-facebook
+##.header-social-icons
+##.header-social-insta
+##.header-social-item
+##.header-social-link
+##.header-social-links
+##.header-social-list
+##.header-social-media
+##.header-social-media-block
+##.header-social-share
+##.header-social-shares
+##.header-social-shim
+##.header-social-twitter
+##.header-socials
+##.header-special-social
+##.header-sub-area-sns
+##.header-tools-social-links
+##.header-top-social
+##.header-top-social-link
+##.header-top__social
+##.header-twitter
+##.headerFacebook
+##.headerGPlusIcon
+##.headerShare
+##.headerShareIconWrap
+##.headerShareIcons
+##.headerSocialIcons
+##.headerSocialLink
+##.headerSocialLinks
+##.headerSocial__socialLinks
+##.header__badge--app-share
+##.header__content__social
+##.header__nav-social
+##.header__sharing-item
+##.header__social
+##.header__social-accounts
+##.header__social-button
+##.header__social-buttons
+##.header__social-icons
+##.header__social-list
+##.header__social-media
+##.header__social-nav
+##.header__social-section
+##.header__socialMedia
+##.header__socials
+##.header__toggle--share
+##.header_fb_icon
+##.header_follow_button
+##.header_nav_social
+##.header_share_part
+##.header_sharing
+##.header_sns
+##.header_social
+##.header_social-media
+##.header_social-row
+##.header_social_buttons
+##.header_social_icon
+##.header_social_img
+##.header_social_text
+##.header_top_bar_socs
+##.headerfacebookicon
+##.headersocial:not(body):not(html)
+##.headersocials
+##.headersticky__share
+##.headertwittericon
+##.headline-sns
+##.headsocial
+##.headsocial-wrapper
+##.headsocialicons
+##.headsocialitem
+##.heateorSssSharingRound
+##.heateorSsspSharing
+##.heateor_sss_sharing_container
+##.heateor_sss_sharing_ul
+##.heateor_sssp_sharing_container
+##.heder-socail
+##.hentry-share
+##.hentry__share
+##.herald-share
+##.herald-share-content
+##.herald-soc-nav
+##.hero-player__share
+##.hero-social
+##.hero-unit__share
+##.hero__share-title
+##.hf--facebook
+##.hf--linkedin
+##.hf--twitter
+##.hh-facebook
+##.hh-googleplus
+##.hh-social-links
+##.hh-socialmedia
+##.hh-twitter
+##.hi-hd-share
+##.hidden-nav-share
+##.hideSocial
+##.hideshare-wrap
+##.highlight-menu-twitter
+##.hld-social-media-component-wrapper
+##.hls-share-button
+##.hls-share-container
+##.hm-sm__sharing
+##.hn-share-button
+##.hnav-social-list
+##.ho-co-social
+##.hola_share_player_btn
+##.hola_share_player_btn_wrapper
+##.home-about-shareButton
+##.home-follow-us-buttons
+##.home-social-callout
+##.home-social-links
+##.home__social
+##.home__social__item
+##.homepage-facebook-widget
+##.homepage-footer-share-buttons
+##.homepage-social
+##.homepage-twitter
+##.homepage-twitter-widget
+##.homepage_social_link
+##.horiz_share
+##.horizontal-share
+##.horizontal-share-block
+##.horizontal-share-buttons
+##.horizontal-share-menu
+##.horizontal-social-links
+##.horizontal.social
+##.hot-on-social-wrap
+##.hot-topics-follow-us
+##.hover-social-media-top
+##.hover_share
+##.hp-main-pane-social
+##.hp-right-pane-social
+##.hp-social
+##.hp-ss-share
+##.hp-ss-text-info-bar-share
+##.hp-tab-share
+##.hp_box-followus
+##.hp_box-social
+##.hp_share
+##.hp_simple-share-buttons
+##.hp_sociaisIcons
+##.hpshareico
+##.hs-blog-social-share
+##.hs-social-block
+##.hsaali-social
+##.ht-share
+##.htIndexSocialButtons
+##.ht_facebook_widget
+##.ht_socials_widget
+##.html5PlayerShare
+##.huge-it-share-buttons
+##.huge-share-box
+##.hwFooterSocial
+##.hwSocial
+##.hwSocialMedia
+##.ib-sliderShare
+##.ibbsocial
+##.icn-addthis
+##.icn-footer-facebook
+##.icn-footer-twitter
+##.icn-footer-youtube
+##.icn_follow_email
+##.icn_follow_facebook
+##.icn_follow_mobile
+##.icn_follow_text
+##.icn_follow_twitter
+##.icomoon-facebook
+##.icomoon-facebook2
+##.icomoon-google-plus
+##.icomoon-instagram
+##.icomoon-mail
+##.icomoon-pinterest
+##.icomoon-tumblr
+##.icomoon-twitter
+##.icomoon-twitter2
+##.icomoon-youtube
+##.icon--app-store
+##.icon--dailymotion
+##.icon--facebook
+##.icon--facebook-simple
+##.icon--facebook__white
+##.icon--flickr
+##.icon--footer-social
+##.icon--instagram
+##.icon--linkedin
+##.icon--linkedin__white
+##.icon--pinterest
+##.icon--share
+##.icon--share--light
+##.icon--snapchat
+##.icon--twitter
+##.icon--twitter__white
+##.icon--vine
+##.icon--youtube
+##.icon-circle-facebook
+##.icon-circle-google
+##.icon-circle-instagram
+##.icon-circle-tumblr
+##.icon-circle-twitter
+##.icon-circle-youtube
+##.icon-commu_share
+##.icon-condividi
+##.icon-connect
+##.icon-dailymotion
+##.icon-delicious
+##.icon-digg
+##.icon-facebook-24
+##.icon-facebook-32
+##.icon-facebook-alt
+##.icon-facebook-bg
+##.icon-facebook-box
+##.icon-facebook-circle
+##.icon-facebook-circled
+##.icon-facebook-encircled
+##.icon-facebook-icon
+##.icon-facebook-official
+##.icon-facebook-rect
+##.icon-facebook-round
+##.icon-facebook-sharing
+##.icon-facebook-sign
+##.icon-facebook-square
+##.icon-facebook-squared
+##.icon-facebook-sticky
+##.icon-facebook-white
+##.icon-facebook16
+##.icon-facebook2
+##.icon-facebook_master
+##.icon-fackbook
+##.icon-fark
+##.icon-fb-footer
+##.icon-fb-small
+##.icon-fb-square
+##.icon-fb-white
+##.icon-fb2
+##.icon-flickr
+##.icon-flipboard
+##.icon-footer-facebook
+##.icon-footer-twitter
+##.icon-footer-youtube
+##.icon-hacker-news
+##.icon-header-facebook
+##.icon-header-googleplus
+##.icon-header-twitter
+##.icon-holder-social
+##.icon-icon_facebook
+##.icon-icon_twitter
+##.icon-icons_facebook-share
+##.icon-icons_twitter-share
+##.icon-icons_twitter-top-share
+##.icon-inq-facebook
+##.icon-inq-twitter
+##.icon-insta
+##.icon-instagram-box
+##.icon-instagram-circle
+##.icon-instagram-encircled
+##.icon-instagram-icon
+##.icon-instagram-white
+##.icon-instagram_master
+##.icon-instagramm
+##.icon-ion-android-share-alt
+##.icon-link--share
+##.icon-linkedin-box
+##.icon-linkedin-circled
+##.icon-linkedin-sign
+##.icon-linkedin-square
+##.icon-linkedin-squared
+##.icon-linkedin2
+##.icon-linkedin_box
+##.icon-list--social
+##.icon-meneame
+##.icon-mixcloud
+##.icon-odnoklassniki
+##.icon-pinterest-circle
+##.icon-pinterest-circled
+##.icon-pinterest-encircled
+##.icon-pinterest-p
+##.icon-pinterest-round
+##.icon-pinterest-share
+##.icon-pinterest-sign
+##.icon-pinterest-sticky
+##.icon-pinterest-white
+##.icon-pinterest16
+##.icon-pinterest3
+##.icon-pinterest_master
+##.icon-pintrest
+##.icon-plusone
+##.icon-plusone-mini
+##.icon-pocket
+##.icon-polyvore
+##.icon-post-share
+##.icon-s-facebook
+##.icon-s-twitter
+##.icon-sd-facebook
+##.icon-sd-instagram
+##.icon-sd-linkedin
+##.icon-sd-pinterest
+##.icon-sd-twitter
+##.icon-share-alt
+##.icon-share-facebook
+##.icon-share-instagram
+##.icon-share-linkedin
+##.icon-share-tumblr
+##.icon-share-twitter
+##.icon-share-vine
+##.icon-share12
+##.icon-share2
+##.icon-sharethis
+##.icon-sidebar-share
+##.icon-sina-weibo
+##.icon-social-facebook
+##.icon-social-facebook-circle
+##.icon-social-flickr
+##.icon-social-google-circle
+##.icon-social-googleplus
+##.icon-social-instagram
+##.icon-social-instagram-circle
+##.icon-social-linkedin
+##.icon-social-linkedin-green
+##.icon-social-mail-circle
+##.icon-social-messenger
+##.icon-social-pinterest
+##.icon-social-round-fb
+##.icon-social-round-google
+##.icon-social-round-twitch
+##.icon-social-round-twt
+##.icon-social-round-youtube
+##.icon-social-spotify
+##.icon-social-tumblr
+##.icon-social-twitter
+##.icon-social-twitter-circle
+##.icon-social-whatsup2
+##.icon-social-youtube
+##.icon-social__link
+##.icon-social_facebook_bl
+##.icon-social_twitter_bl
+##.icon-soscmed
+##.icon-soundcloud
+##.icon-tumblr-box
+##.icon-tumblr-circle
+##.icon-tumblr-square
+##.icon-tumblr-white
+##.icon-tw-footer
+##.icon-tw-white
+##.icona-social
+##.icone-social
+##.iconeFacebook
+##.iconeTwitter
+##.iconeshare
+##.iconfacebook
+##.icongoogleplus
+##.iconic-social-facebook
+##.iconic-social-google-plus
+##.iconic-social-twitter
+##.iconinstagram
+##.iconochive-share
+##.icons-circle-social
+##.icons-twitter_follow_small
+##.icons_share_footer
+##.icons_social
+##.iconsocial
+##.icos-social
+##.id-AdditionalHeaderContent-el--socialMedia
+##.id-Amp-socialShare
+##.idc-share
+##.idvl-socs-tools
+##.idz-social-icon
+##.if-SocialLinks
+##.ig-share-button
+##.ig_social
+##.ikonz-social
+##.il-social-links
+##.ilsb-share
+##.image-share
+##.image-share-box
+##.image-social
+##.image_sharing_bar
+##.img-share-overlay
+##.img-share-twt
+##.img-social
+##.imgShare
+##.img__sharer
+##.img_pin_button
+##.imgshare_buttons_wrap
+##.imgsharet
+##.imkt-social-buttons
+##.imkt-social-buttons-group
+##.in-page-share
+##.in-post-social
+##.in-shareicon
+##.in-social
+##.in-socialbx
+##.in_icon
+##.in_social
+##.in_socials
+##.index_sns
+##.info-article__social
+##.info-sns-list
+##.info__share
+##.info_share
+##.ing-social
+##.inline-share
+##.inline-share-buttons
+##.inline-share-tools
+##.inline-share-tools-label
+##.inline-sharebar
+##.inline-sharing
+##.inline-social
+##.inline-social-icons
+##.inline_socials
+##.inner-header-social
+##.inner-share-bar
+##.inner-social
+##.innerShare
+##.inpage-social-links
+##.inpage_social_box
+##.inpost-byline-social
+##.inpost-social
+##.ins-social-media
+##.insideArticleShare
+##.instagram-follow
+##.instagram-follow-button
+##.instagram-followers
+##.instagram-hover
+##.instagram-icon
+##.instagram-link
+##.instagram-wrapper
+##.instagram.icon
+##.instagramIcon
+##.instagramIcon__link
+##.instagram_follow
+##.instagram_icon
+##.instagram_logo
+##.instagram_share
+##.instagramicon
+##.instalink
+##.instela-share-button
+##.interested_in_social
+##.intro-share-container
+##.intro-social
+##.ion-android-share-alt
+##.ion-share
+##.ion-social-facebook
+##.ion-social-google
+##.ion-social-googleplus
+##.ion-social-linkedin
+##.ion-social-twitter
+##.ion-social-viadeo
+##.ione-widget-facebook-activity
+##.ione-widget-youtube_playlist
+##.ioshare
+##.ip-follow-us-popup
+##.ipsShareButton
+##.ipsfocus_sFacebook
+##.ipsfocus_sGoogle
+##.ipsfocus_sTwitter
+##.ipsfocus_social
+##.is-Social
+##.is-size-social-icons
+##.is-social
+##.ishare
+##.islandfm-social-icons
+##.ism_box_facebook
+##.ism_box_google
+##.ism_box_linkedin
+##.ism_box_pinterest
+##.ism_box_twitter
+##.ism_share_counts
+##.isocial
+##.it-share
+##.it-social-tabs
+##.item--social
+##.item-actions__share-actions
+##.item-basic-social
+##.item-facebook
+##.item-google-plus
+##.item-share
+##.item-share-list
+##.item-share-social
+##.item-share-tools
+##.item-shares
+##.item-sharing
+##.item-sharings
+##.item-social-facebook
+##.item-social-row
+##.item-social-twitter
+##.item-twitter
+##.item-whatsapp
+##.itemFacebook
+##.itemShare
+##.itemShareBtns
+##.itemSocial
+##.itemSocialLink
+##.itemSocialLinks
+##.itemSocialLinksBlock
+##.itemSocialMedia
+##.itemSocialSharing
+##.itemTwitter
+##.item_share_gplus
+##.item_share_inline
+##.items-share
+##.itemview-share
+##.itp-social-buttons-box
+##.itw-dropdown-share-box
+##.itw-footer-social
+##.iuvm-social
+##.iyc-views-SocialNetworksBox
+##.j-article-share
+##.j-header-follow-us
+##.j-player-social-header
+##.j-share-button-container
+##.j-share-buttons
+##.j-social
+##.j-social-actions
+##.j-social-button
+##.j-twitter
+##.jSocialShare
+##.janrainEngagePublishShareBar
+##.janrainShareCountContainer
+##.janrainSocialBar
+##.janrainSocialPlaceholder
+##.janrain_share
+##.jd-social-share
+##.jeg_author_socials
+##.jeg_custom_share_wrapper
+##.jeg_post_share
+##.jeg_share_button
+##.jeg_share_top_container
+##.jeg_sharelist
+##.jeg_social_icon_block
+##.jeg_socialcounter
+##.jetpack-social-navigation
+##.jetpack-social-widget-item
+##.jetpack_widget_social_icons
+##.jiathis_style
+##.jiathis_top
+##.jj_sl_facebook
+##.jj_sl_twitter
+##.jj_sl_youtube
+##.jl-social-media
+##.join-social-panel
+##.joinSocial
+##.joomla_add_this
+##.joomsharebar_vert
+##.jr-social
+##.js--email-social-promo
+##.js-Share
+##.js-article-details-share-sticky
+##.js-article-media-share-toggle
+##.js-block-fb
+##.js-cookie-light
+##.js-custom-pinterest-button
+##.js-fbshare-btn
+##.js-fig-tools__share
+##.js-follow-user
+##.js-followState
+##.js-gig-social-bar
+##.js-home-social
+##.js-icon-facebook
+##.js-icon-twitter
+##.js-justin-share
+##.js-n-share
+##.js-nag-window-social
+##.js-nav-social-icon
+##.js-pgm-social-share
+##.js-popup-share
+##.js-postShareWidget
+##.js-sc-share-button
+##.js-sd-social
+##.js-selection-twitter
+##.js-share-article
+##.js-share-body
+##.js-share-btn
+##.js-share-button
+##.js-share-button-container
+##.js-share-button-twitter
+##.js-share-count
+##.js-share-email
+##.js-share-facebook
+##.js-share-more
+##.js-share-pinterest
+##.js-share-popup
+##.js-share-property
+##.js-share-social-sticky
+##.js-share-this
+##.js-share-to-facebook
+##.js-share-tracking
+##.js-share-twitter
+##.js-shareButton
+##.js-sharebuttons
+##.js-sharecount
+##.js-shares_btn
+##.js-sharing-buttons
+##.js-sharing-popup-facebook
+##.js-sharing-popup-linkedin
+##.js-sharing-popup-twitter
+##.js-social
+##.js-social-bar
+##.js-social-facebook
+##.js-social-instagram
+##.js-social-media-link
+##.js-social-share
+##.js-social-share-component
+##.js-social-share-list
+##.js-social-toolbar
+##.js-social-twitter
+##.js-social-widgets
+##.js-social_share_buttonbar
+##.js-socialise
+##.js-socialise-wrapper
+##.js-socials
+##.js-sticky-social-widget
+##.js-toggle-share-block
+##.js-topic__socials
+##.js-triggerShare
+##.js-tweet-button
+##.js-twitter-share
+##.js-video-social-panel
+##.js-wkis-social-share-bar
+##.jsShare
+##.js_follow-buttons
+##.js_socialMedia
+##.js_staticShare
+##.jsbd-gtm-footerSocialLink
+##.jssocials
+##.jssocials-share
+##.jssocials-share-facebook
+##.jssocials-share-link
+##.jssocials-share-logo
+##.jssocials-share-pinterest
+##.jssocials-shares
+##.juiz_sps_item
+##.jupiterx-social-share-wrapper
+##.jw-button-share
+##.jw-settings-sharing
+##.jw-sharing-dock-btn
+##.jwsharethis
+##.kento-social-share
+##.keystone-social-author
+##.kindleWidget
+##.kiwi-nw-facebook
+##.kiwi-nw-google-plus
+##.kiwi-nw-linkedin
+##.kiwi-nw-twitter
+##.kiwi-share-bar-wrapper
+##.kl-share
+##.kl-social-link
+##.klasSideSocialLinks
+##.klicked-see-first
+##.kmd_social_widget
+##.kodda_social_link
+##.kopa-share-post
+##.kopa-social-static-widget
+##.ksm-post-facebook
+##.ksm-post-twitter
+##.ktz-sharedpost
+##.l-article-header__block--share
+##.l-footer-social
+##.l-footer__social
+##.l-header-share
+##.l-highlight__social
+##.l-home-instagram-wrapper
+##.l-news-article-social
+##.l-social
+##.labelsocial
+##.lafo-social
+##.lafoo-footer-social
+##.lancio-sharebar
+##.landing-feed--story-shares
+##.landing-share-right-widget
+##.large-share-bar
+##.large-share-bar-container
+##.large-share-button
+##.largeShareBar
+##.large_share_panel
+##.largefbbutton
+##.largetwitterbutton
+##.latestTweet
+##.latestshowsocial
+##.layer_share_on
+##.layout-footer-shares
+##.lazy-share-widget
+##.lazysocialbuttons
+##.lb-card-share-menu
+##.lbShareFacebook
+##.leaf-social-inner
+##.leaf_sbm_button_space_hatena
+##.leafs-sns
+##.leafs-sns-below
+##.left-nav-social-wrapper
+##.left-panel-social-icon
+##.left-share-bar-wrapper
+##.left-side-sharing-block
+##.left-side-social
+##.left-sidebar-social
+##.left-social
+##.left-social-group
+##.left_aside_sns
+##.left_share
+##.left_share_bar
+##.leftcol_social
+##.leftsharebtn
+##.leftside-socialshare
+##.leftsocial
+##.leftsocial_icon
+##.legacy-social-bar
+##.lets-social-count-wrap
+##.lf-facebook
+##.lf-share-item
+##.lf-share-item-link
+##.lf-share-item-wrapper
+##.lf-social-bookmarks
+##.lf-twitter
+##.lh-postSnsInner
+##.liSocialFacebook
+##.liSocialGoogle
+##.liSocialLinkedIn
+##.liSocialTwitter
+##.libsyn-social-button
+##.lien-facebook
+##.lien-instagram
+##.lien-twiter
+##.lien-youtube
+##.lightsocial_container
+##.like-and-subscribe
+##.like-b
+##.like-block
+##.like-box
+##.like-box-wrap
+##.like-button-facebook
+##.like-button-google
+##.like-button-twitter
+##.like-cta-container
+##.like-fb
+##.like-holder
+##.like-layer
+##.like-on-facebook
+##.like-share
+##.like-slider
+##.like-us
+##.likeUsLayer
+##.like_block
+##.like_block_rendered
+##.like_box_holder
+##.like_box_slideup_close
+##.like_box_widget_facbook
+##.like_buttons
+##.like_share.left
+##.like_wall
+##.like_widget
+##.likebox-widget
+##.likeboxes
+##.likebtn
+##.likebutton
+##.likecount-div
+##.likedisdiv
+##.likegate
+##.likegate-dimmer
+##.likegate-overlay
+##.likegate-v2
+##.likely__widget
+##.likes-block
+##.likes-block_left
+##.likes-box
+##.line-btn-icon
+##.line-social
+##.linfoShare
+##.link-facebook
+##.link-fb
+##.link-instagram
+##.link-linkedin
+##.link-social
+##.link-social-media
+##.link-tumblr
+##.link-twitter
+##.link-youtube
+##.linkList-social
+##.linkListShareImg
+##.linkSocials
+##.linkSocials-fb
+##.linkSocials-gp
+##.linkSocials-in
+##.linkSocials-pi
+##.linkSocials-tw
+##.link_facebook
+##.link_sns
+##.link_twitter
+##.linkdoni-social-item
+##.linked-in-icon
+##.linked_icon
+##.linkedin-btn
+##.linkedin-hover
+##.linkedin-icon-small
+##.linkedin-link
+##.linkedin-share
+##.linkedin-sharetool
+##.linkedinShareIcon
+##.linkedin_icon
+##.linkedin_icon_shared
+##.linkedin_share
+##.linkedin_top
+##.linkedinbox
+##.linkedinlink
+##.linkendinIcon
+##.links-social
+##.links.social
+##.linter_social_icons
+##.list--footer-social
+##.list--social
+##.list-footer-socials
+##.list-inline.social
+##.list-item-facebook
+##.list-item-twitter
+##.list-reseaux-sociaux
+##.list-share
+##.list-share__item
+##.list-social
+##.list-socials
+##.list-socshare
+##.listTrailerShare
+##.list_article_share
+##.list_share
+##.list_sns
+##.listing-share
+##.listing-share-email
+##.listing-share-item
+##.listing-share2
+##.listing_icon_social
+##.lit-guides-social
+##.live-play-by-play-message-share
+##.live-share-item
+##.live-share__link
+##.live-share__title
+##.live-socialicons
+##.live-text__footer__share
+##.lk-fb
+##.lk-tw
+##.lmt__target_toolbar__share
+##.ln_share_button
+##.lnc-share
+##.lnkFacebook
+##.lnks-social
+##.lo-header_social
+##.lo-header_social_icon
+##.lo-social_icon
+##.locshare-share-button
+##.loggedout-follow-normal
+##.loghi_social
+##.logo-social
+##.logo_social
+##.logos_redes_sociais
+##.long-form-social
+##.long_post_share_digg
+##.long_post_share_twiiter
+##.longform-inline-share-module
+##.longform-share-icon
+##.longform-share-text
+##.longform-social
+##.longform__share
+##.longform_header_share
+##.longread-share
+##.look-social
+##.lp-global-footer__social-list
+##.lp-magazin-sharing-bar
+##.lp_share
+##.lr-share-vertical-fix
+##.lr-social-box
+##.lr_ver_share_widget
+##.lrshare-icon32
+##.lrshare_flat
+##.lrshare_interfacebox
+##.ls-social-links
+##.lsi-social-icons
+##.lst-shrpst
+##.lst-social
+##.lst_social
+##.lt_nav-share
+##.lv-ShareArticle
+##.lx-share-tools
+##.lx-share-tools__items
+##.lx-share-tools__panel
+##.lx-sidebar-social-media
+##.lx-stream-post__footer-share
+##.ly-share
+##.ly-share-list
+##.lzd-follow-us-icon
+##.m-SocialLinksFresh
+##.m-app-footer--social
+##.m-article-share
+##.m-article-share__link
+##.m-article-socialbar
+##.m-article__follow-bar
+##.m-article__share-buttons
+##.m-article__socials
+##.m-brand-engagement--social-link
+##.m-btn-facebook
+##.m-btn-instagram
+##.m-btn-twitter
+##.m-btn-youtube
+##.m-entry__social
+##.m-fbook
+##.m-feature-social-buttons
+##.m-footer-social
+##.m-footer__follow__content
+##.m-footer__social-container
+##.m-global-header__facebook
+##.m-global-header__g-plus
+##.m-global-header__twitter
+##.m-global-header__youtube
+##.m-gplus
+##.m-header--social-nav
+##.m-header__social
+##.m-header__social-button
+##.m-icon-facebook
+##.m-icon-fb
+##.m-icon-instagram
+##.m-icon-ln
+##.m-icon-tw
+##.m-icon-youtube
+##.m-insta
+##.m-item-post-sharing
+##.m-navbar--menu-facebook
+##.m-navbar--menu-google-plus
+##.m-navbar--menu-linkedin
+##.m-navbar--menu-pinterest
+##.m-navbar--menu-social
+##.m-navbar--menu-tumblr
+##.m-navbar--menu-twitter
+##.m-share
+##.m-share-bar
+##.m-share-bar__link
+##.m-share-buttons
+##.m-share-buttons__inner-wrapper
+##.m-share-list
+##.m-share_selection_contextual
+##.m-share_site
+##.m-sharebar
+##.m-shared__item
+##.m-shares
+##.m-sharing
+##.m-sharing-toolbar
+##.m-sharing-toolbar-vertical
+##.m-site-nav__social
+##.m-site-social
+##.m-site-social-networks
+##.m-sns
+##.m-social
+##.m-social--button
+##.m-social--facebook
+##.m-social--no-count
+##.m-social--pinterest
+##.m-social--pinterest-pin-it
+##.m-social--twitter
+##.m-social-adhesive-wrap
+##.m-social-bar
+##.m-social-container
+##.m-social-media__share
+##.m-social-share
+##.m-socialIcons__icon
+##.m-socialShareButton__item
+##.m-socialbar
+##.m-socials
+##.m-socials--top
+##.m-socials__button
+##.m-socials__list
+##.m-twit
+##.m-ytube
+##.m3Share
+##.m3d-sharing
+##.mT-socialLinks
+##.m_follow_us
+##.m_share
+##.m_social-icon-container
+##.macleans-social-footer__item
+##.macleans-social-footer__wrap
+##.mad__follow__social-link
+##.mad__social-network--teaser
+##.mad__social_network--custom
+##.mag_social
+##.magazine-bar__social
+##.magazine-share
+##.mail-share
+##.mail_share_desktop
+##.main-adsocial
+##.main-article-share-count
+##.main-article-share-counts
+##.main-content__share
+##.main-footer__bottom__social
+##.main-footer__menu_bottom__social
+##.main-footer__redes-sociais
+##.main-footer__social
+##.main-footer__socials
+##.main-head__social-2
+##.main-header__social
+##.main-nav--social
+##.main-nav-social
+##.main-nav__social-dropdown
+##.main-single-share
+##.main-social
+##.main-sub-social
+##.mainFooterBottomFacebook
+##.mainFooterBottomSlideshare
+##.mainListingSocial
+##.mainMenuSocialItem
+##.mainShare
+##.mainSocial-Content
+##.mainVerticalArticleSharingLinks
+##.main__header--social
+##.main__share
+##.main_search_social
+##.main_share_panel
+##.mainbav-hd-share
+##.map_share_links
+##.map_share_links_16_twitter
+##.markerly-sidebar-sharing
+##.mashfs-popup-share
+##.mashicon-facebook
+##.mashicon-google
+##.mashicon-linkedin
+##.mashicon-reddit
+##.mashicon-share
+##.mashicon-twitter
+##.mashsb-box
+##.mashsb-container
+##.mashsb-micro
+##.mashsb-micro-toggle
+##.mashsharer-box
+##.mast-facebook
+##.mast-head__soial-links
+##.masterSocialbutton
+##.masterfooter__section--social
+##.masthead-club__social
+##.masthead-sm-btn--facebook
+##.masthead-sm-btn--twitter
+##.masthead-social
+##.masthead__dropdown-socials
+##.masthead__socials-links
+##.material-icons-share
+##.materna-shariff
+##.mb-header__social
+##.mb-social
+##.mbc-social-link
+##.mbdev-custom-social-links
+##.mbt-bookmarking
+##.mbt_social_floating
+##.mc-globalfooter__sns
+##.mc-share-post
+##.mc-share-toggle
+##.mc-social-icons
+##.md-list-share
+##.md-lite-share
+##.md-mainArticle__share
+##.md-sharebar
+##.md-sharethis-toolbox-floatingbutton_placement
+##.md-social-toolbar-circle
+##.mdSocialButton
+##.mdi-facebook
+##.mdi-share
+##.mdi-share-variant
+##.mdi-twitter
+##.mdl_followUs
+##.media-engage-share
+##.media-menu-sharemenu
+##.media-object__social
+##.media-share-box
+##.media-share-button
+##.media-sharemenu-container
+##.media-social
+##.media-social-share-links
+##.mediaShare
+##.mediaShareGroup
+##.media__share
+##.mejs-share
+##.mejs-share-button
+##.meme-share-box
+##.menu--footer-social
+##.menu--social-media
+##.menu--social-media-links
+##.menu-article-share
+##.menu-ext-social
+##.menu-facebook
+##.menu-fb
+##.menu-footer-social
+##.menu-footer-social-container
+##.menu-header-links-container
+##.menu-header-social-container
+##.menu-item-follow
+##.menu-item-type-social
+##.menu-latest-footer-social-menu-container
+##.menu-link-facebook
+##.menu-link-instagram
+##.menu-link-twitter
+##.menu-name-menu-social-links
+##.menu-reseaux-sociaux-container
+##.menu-section-social
+##.menu-share
+##.menu-sliding-social-container
+##.menu-social-buttons
+##.menu-social-buttons-container
+##.menu-social-container
+##.menu-social-footer
+##.menu-social-gplus
+##.menu-social-icons
+##.menu-social-instagram
+##.menu-social-links
+##.menu-social-links-container
+##.menu-social-media-menu-container
+##.menu-social-menu-container
+##.menu-social-navigation-container
+##.menu-social-profiles-container
+##.menu-socnav
+##.menu-tumblr
+##.menu-twitter
+##.menu-twttr
+##.menuFacebook
+##.menuSocialBar
+##.menuSocialFAI
+##.menuTwitter
+##.menu__link--facebook
+##.menu__link--twitter
+##.menu__link--youtube
+##.menu__social-media-icons
+##.menu_share
+##.menu_social
+##.menusocial
+##.meraki_social_top_li
+##.message-share
+##.messageShareButtons
+##.messenger-barra
+##.meta-articles__social
+##.meta-panel__social
+##.meta-share
+##.meta-share-bottom
+##.meta-share-count
+##.meta-share-expand
+##.meta-share-post-social-header
+##.meta-share-top
+##.meta-share-wrapper
+##.meta-shares
+##.meta-shb-buttons
+##.meta__share
+##.meta__shares
+##.meta__social
+##.method_share
+##.metro-social
+##.mf-single-article-share
+##.mf-social-item
+##.mf-social-list
+##.mgm-share-pinterest
+##.mgm-social-share
+##.mh-share-button
+##.mh-share-buttons
+##.mh-social-icons
+##.mh-social-nav
+##.mh_magazine_facebook_page
+##.mhp1138_shareBtn
+##.microcontent-shares
+##.midlands-share-story
+##.minds-social
+##.mini-share
+##.mini-share-post
+##.mini-social-button
+##.mini-social-icons
+##.mini-social-media-sharing
+##.mini-social-share
+##.mini-social-share-list
+##.mini-socials
+##.mini-widget-social
+##.minimal-nav__social
+##.minimalshare
+##.minitwitter-widget
+##.mit-share
+##.mit-share-trigger
+##.mit-social
+##.mk-header-social
+##.mkd-blog-single-share
+##.mkd-share-link
+##.mkd-social-share-title
+##.mkdf-blog-share
+##.mkdf-single-tags-share-holder
+##.mkdf-social-icon-widget
+##.mks_social_widget
+##.ml-footer-social-links
+##.ml-share
+##.mmg_share_button
+##.mn_mbn_share
+##.mn_share_module
+##.mn_social_button
+##.mng-follow
+##.mnu-ico-fb
+##.mnu-ico-tw
+##.mnu-ico-yt
+##.mob-sharing
+##.mobile-facebook
+##.mobile-footer-share
+##.mobile-share-buttons-spacer
+##.mobile-sharing-tools
+##.mobile-social
+##.mobile-social-tray
+##.mobile-social-wrapper
+##.mobile-socialshare-bottom
+##.mobile-socialshare-top
+##.mobileShare
+##.mobile_footer_follow_btn
+##.mobilesocial
+##.mobilesocials
+##.mod-facebook
+##.mod-facebook-fanbox
+##.mod-fb-connect
+##.mod-fb-share
+##.mod-fb-share-callout
+##.mod-follow
+##.mod-shareBox
+##.mod-sharing-with-topper
+##.mod-social
+##.mod-social-bar
+##.mod-social-bar-item
+##.mod-social-navigation
+##.mod-socialFollow
+##.mod-socialmedia
+##.mod-twitter
+##.modSharing
+##.modSocialbar
+##.mod_facebook
+##.mod_follow_us
+##.mod_footer_sociallist_iconlink
+##.mod_social
+##.mod_teaser_social
+##.mod_twitter
+##.modal-fb
+##.modal-share-icons
+##.modalwrapper-container__sharebar
+##.module--share
+##.module-default-social
+##.module-follow
+##.module-follow-us
+##.module-share-tools
+##.module-shared
+##.module-social-share-icons
+##.module-story-social
+##.module-twitter
+##.moduleLSocialPlugins
+##.moduleSocial
+##.module__share
+##.moduletable_facebook
+##.moduletablesocialmod
+##.mom-share-buttons
+##.mom-share-post
+##.mom-social-icons
+##.mom-social-share
+##.mom-socials-counter
+##.mom-socials-widget
+##.mom_social_counter
+##.momizat-facebook
+##.momizat-social-icons
+##.momizat-social_counter
+##.momizat-twitter
+##.moreShare
+##.moreShareIcons
+##.more_btn_soc
+##.moretweetsmsg
+##.most-shared
+##.most-shared--container
+##.most-shared--placeholder
+##.motherboard-widget-social
+##.motogpSocial
+##.move-social
+##.movie-share
+##.mozedia-social
+##.mpf-i-share
+##.mplSocials
+##.mps-article-social
+##.mps-social
+##.mr_shareLabel
+##.mr_social_sharing_wrapper
+##.ms-footer_socials
+##.ms-share-container
+##.ms-share_inline
+##.ms-social-bar
+##.msc-facebook
+##.msc-googlePlus
+##.msg-share
+##.msk-well-social
+##.mtm-footer-social__links
+##.mtphr-social-widget-links
+##.mtphr-twitter-widget
+##.mts-social-share-links
+##.mts_googleplus
+##.mu-btn-pinterest
+##.mu-share
+##.mu-social-links
+##.mu-social-share
+##.multiplesocialwidget-wrapper
+##.mvp-alp-soc-list
+##.mvp-foot-soc-list
+##.mvp-nav-soc-but
+##.mvp-nav-soc-wrap
+##.mvp-post-soc-email
+##.mvp-post-soc-list
+##.mvp-post-soc-pin
+##.mvp-post-soc-twit
+##.mvp-post-soc-wrap
+##.mvp-soc-mob-email
+##.mvp-soc-mob-list
+##.mvp-soc-mob-pin
+##.mvp_facebook_widget
+##.mvp_social_widget
+##.my-fa-share-alt
+##.myspace-big
+##.mytweet
+##.myyahooHeadButton
+##.n-facebook
+##.n-pinterest
+##.n-share-icon
+##.n-shares
+##.n-twitter
+##.nSF_recentShares
+##.nShare
+##.naked-social-share
+##.nano-share
+##.nationalsocialshare
+##.native-share
+##.native-share-wrapper
+##.nativeShareCount
+##.nativeShareCountContainer
+##.nav--share
+##.nav--social
+##.nav--social-box
+##.nav--socials
+##.nav--stay-connected
+##.nav-bar-facebook
+##.nav-bar__social-links__link
+##.nav-button-facebook
+##.nav-button-pinterest
+##.nav-button-twitter
+##.nav-features__social
+##.nav-follow-us
+##.nav-footer-social
+##.nav-icon-facebook
+##.nav-icon-googleplus
+##.nav-icon-instagram
+##.nav-icon-twitter
+##.nav-inner-social-wrap
+##.nav-instagram
+##.nav-list-social-links
+##.nav-logo__social
+##.nav-primary-bottom-socialLinks
+##.nav-share
+##.nav-share-btn
+##.nav-share-count
+##.nav-soc-but
+##.nav-social
+##.nav-social-left
+##.nav-social-links
+##.nav-social-media-links
+##.nav-social-right
+##.nav-social-wrap
+##.nav-socials__link
+##.nav-top__item-social
+##.nav-youtube
+##.navSocial
+##.navSocial-item
+##.navSocial-list-item
+##.navSocialDiv
+##.nav__fake--social
+##.nav__item--social
+##.nav__local__share
+##.nav__share
+##.nav__social
+##.nav__social-button
+##.nav_facebook
+##.nav_menu_social
+##.nav_pinterest
+##.nav_share
+##.nav_social
+##.nav_social_container
+##.nav_twitter
+##.nav_weibo
+##.navbar-social
+##.navbar-social-share
+##.navbar-sociallink
+##.navbar__nav__facebook__button
+##.navbar__nav__twitter__button
+##.navbar__social
+##.navicon-facebook
+##.navicon-twitter
+##.navigation-menu__item--social
+##.navigation-menu__item__social
+##.navigation-socialmedia
+##.navigation-socials
+##.navigation__socialmedia
+##.navsocial
+##.naytev-share-toolbar
+##.nb-share
+##.nb-share-by-email
+##.nb-social
+##.nb-social-links
+##.nb-socialpanel
+##.nc_socialPanel
+##.ncpost-share-links
+##.nda-image-share__wrapper
+##.nda-navbar__share
+##.nda-share-post
+##.ndn_icon_share
+##.ndn_toggleShare
+##.need-share-button-default
+##.netPost_socialProfiles
+##.network-bar-social-media-links
+##.network-social-box
+##.new-bdsharebuttonbox
+##.new-footer-social
+##.new-post__social
+##.new-share
+##.new-side-share
+##.new-social
+##.newGigyaShare
+##.newSharerButtons
+##.newSocialBar
+##.newSocialButtons
+##.newSocialShareButton
+##.newSocialShareButtons
+##.new_facebook_16
+##.new_sharebar
+##.new_sharebar_bookmark
+##.new_sharebar_email
+##.new_sharebar_facebook
+##.new_sharebar_pinterest
+##.new_sharebar_twitter
+##.new_social_icon
+##.newarticle__social
+##.newdetailsocialwrapper
+##.newheader__old-social
+##.news-article-social-icons-wrapper
+##.news-article__share-content
+##.news-body-share
+##.news-content-share
+##.news-detail-share
+##.news-fix-share
+##.news-header-social
+##.news-item-sharing
+##.news-share
+##.news-share-article
+##.news-share-box
+##.news-share-button
+##.news-share-button-down
+##.news-sharing
+##.news-social-container
+##.newsDetailSocialMediaBox
+##.newsItemSharer
+##.newsSocialLinkTable
+##.news__share
+##.news_detail_share_wrapper
+##.news_head_fb
+##.news_item__social
+##.news_share
+##.news_share_botton_cont
+##.news_shares
+##.news_sns
+##.newsblock-page-footer__links__social
+##.newsfull__share
+##.newsletter__social-links
+##.newsplus_social
+##.nextgen-share-tools
+##.nfy-detail-social-media
+##.nfy-social-icons
+##.nfy-social-links
+##.ng-sharekit
+##.ngs-share-button
+##.ngs-t-share-button
+##.nhsShareSocials
+##.ni-share
+##.nice-menu-menu-social-menu
+##.nk-social-follow-us
+##.nm-social-list
+##.nmSocialMain
+##.nmg-footer__social
+##.nn-follow-us
+##.nn-header-main__social
+##.nn-social-icons-header
+##.nn-social-list
+##.node-content-body-share
+##.node-share
+##.node-share-buttons
+##.node-share-sm
+##.node-social
+##.node-social-buttons
+##.node-social-media
+##.node__social-links
+##.normal_social
+##.noticias-single__share
+##.noticon-facebook-alt
+##.noticon-instagram
+##.noticon-twitter
+##.notizia_share_wrapper
+##.nova_reseau-sociaux
+##.novashare-buttons-wrapper
+##.np-article-social-links
+##.npStoryShare
+##.nr-social-share-section
+##.ns-social
+##.nugget-share__btn
+##.nui-share
+##.null-instagram-feed
+##.nv-post-share
+##.nw-bottom-social
+##.nw-fb-page-panel
+##.nw-share-dropdown
+##.nw-sharing-buttons
+##.nw-social-container
+##.nw__social-wrapper
+##.nyh_share
+##.nypr-social-icons
+##.o-PinterestEmbed
+##.o-articleSocial
+##.o-articleSocial-row
+##.o-btn--share
+##.o-button--share
+##.o-footer__social
+##.o-footer__socials
+##.o-mobile-share-footer
+##.o-newsletter_and_social
+##.o-shareBooster__item
+##.o-social-icon
+##.oSocial
+##.oSocialLinks
+##.o_footer_social_media
+##.o_r_url_social_facebook
+##.o_r_url_social_twitter
+##.ob-ShareBar-share
+##.obs-block-follow
+##.oc-social-share-logos
+##.ocArticleFooterShareContainer
+##.ocArticleFooterShareLinksWrapper
+##.oceanwp-about-me-social
+##.oe_social_share
+##.official-social2
+##.oi-share
+##.oi_soc_header
+##.om-share-bar
+##.om-social-links
+##.omc-social-media-icon
+##.omc-social-small
+##.one-head-share-block
+##.one-head-share-links
+##.onenews_share
+##.onesongblock-share_block
+##.onp-sociallocker-overlap-box
+##.ont-social-networks
+##.oo-share
+##.open-share
+##.open-share-list
+##.open-share-toolbar
+##.open-social-layer
+##.open_share_box
+##.openshare
+##.opinion-menu-social
+##.opinion-template--headerBody-social-icons
+##.opju_socialmedia_widget
+##.opt-social_horizontal-row
+##.opt-social_horizontal-row_link
+##.opt-social_vertical-column
+##.opt360-share-buttons-article-start
+##.opt360-share-buttons-sidebar
+##.os-c-social
+##.os-social-bar
+##.ot-social-widget
+##.our_sharing
+##.ovSocialHeader
+##.overfooter-social
+##.overlay-open-share
+##.overlay_facebook
+##.ow-social-icons
+##.oxy-social-icons
+##.p-article-social-share
+##.p-button-social
+##.p-footer-c-section--social
+##.p-footer-global-block-item02-other-social
+##.p-footer-social
+##.p-post-shareItem
+##.p-post-shareList
+##.p-social-widget
+##.paCmsArticle-section-header-social
+##.padded-footer-connect
+##.page-context-nav__share-menu
+##.page-controls--share
+##.page-controls-share
+##.page-fb-like
+##.page-footer-social
+##.page-footer__social
+##.page-footer__social-link
+##.page-footer__social-links
+##.page-footer_social
+##.page-header-social
+##.page-header__social
+##.page-header_social
+##.page-product__socials
+##.page-share
+##.page-share-box
+##.page-share-button
+##.page-share-wrapper
+##.page-shareTray
+##.page-social
+##.page-social-counters
+##.page-socialshare
+##.pageFbLike
+##.pageFooter--left-social
+##.pageHead-share
+##.pageShareBtns
+##.pageSocial
+##.page_facebookFanPage
+##.page_share
+##.page_sharing_widgets
+##.pane-ajd-sharebar
+##.pane-ajd-sharebar-sharebarvideo
+##.pane-connect-w-us
+##.pane-custom-social-networking-links
+##.pane-exponent-social-fb-like-box
+##.pane-facebook-activity
+##.pane-fb-profile-widget
+##.pane-follow-site
+##.pane-klw-follow
+##.pane-klw-share
+##.pane-menu-footer-social-links
+##.pane-menu-footer-social-menu
+##.pane-menu-menu-site-social-widget
+##.pane-post-social-post-social-block
+##.pane-share-widgets
+##.pane-share-widgets-article
+##.pane-share-widgets-general
+##.pane-sharethis
+##.pane-sharethis-sharethis
+##.pane-sharethis-sharethis-block
+##.pane-social-follow-links
+##.pane-social-links
+##.pane-social-plugins-social-plugins-widget
+##.pane-social-widget-items
+##.pane-socialblock
+##.pane-storypage-sharethis
+##.panel--follow
+##.panel--social
+##.panel--social-wrap
+##.panel-follow-social
+##.panel-follow-us
+##.panel-list--social
+##.panel-share-networks
+##.panel-social-facebook
+##.panel-social-googleplus
+##.panel-social-twitter
+##.panelSocial
+##.panelTweets
+##.pangea_social_icons
+##.par-footer-social
+##.par-sharepad
+##.parent-shareBox
+##.parent_share
+##.parler-bttn
+##.parler-icon
+##.partage-twitter
+##.partage_contenu
+##.pathSocialIcons
+##.patient-likebox
+##.patreon-button-facebook
+##.patreon-button-google-plus
+##.patreon-button-pinterest
+##.patreon-button-tumblr
+##.patreon-button-twitter
+##.pb-f-global-sharebar
+##.pb-f-page-newsletter-inLine
+##.pb-f-sharebars-top-share-bar
+##.pb-f-static-social-icons
+##.pb-side-social_bar
+##.pb-social-count
+##.pbtsharethisbutt
+##.pcf-social-media-wrapper
+##.pda-topmenusocial
+##.pdb-share
+##.pdb-share-block
+##.pdb-social
+##.pds-share
+##.pen_social_networks
+##.penci-facebook_page
+##.penci-social-buttons
+##.penci-social-counter
+##.penci-social-share-footer
+##.penci-social__content
+##.penci-social__item
+##.penci-social_counter
+##.penci_facebook_widget
+##.penci_social_widget
+##.persistent-menu_share-links
+##.personal-social-btns
+##.pfooter__content__social
+##.pg-caption-share
+##.pg-follow
+##.pg-share-box
+##.pg-share-button
+##.pg-share-buttons
+##.pg-share-facebook
+##.pg-share-icon
+##.pg-share-icon-e-mail
+##.pg-share-icon-facebook
+##.pg-share-icon-linkedin
+##.pg-share-icon-twitter
+##.pg-share-linkedin
+##.pg-share-mail
+##.pg-share-pinterest
+##.pg-share-twitter
+##.pg-shareBar
+##.pg-shareBar-share
+##.pgevoke-contentarea-socialbuttons
+##.pgevoke-header-row2-right-social
+##.pgm-social-share
+##.ph-header-social
+##.phd_social
+##.phillyfooter-social
+##.phillysocial
+##.photo-share
+##.photoListSocialShare
+##.photo_social
+##.photoblock-footer-social
+##.phpval_pvp4_socialshare
+##.phshare
+##.pic-share
+##.picto-reseaux-sociaux
+##.picto_facebook
+##.picto_googleplus
+##.picto_twitter
+##.pin-img-btn
+##.pin-it
+##.pin-it-btn
+##.pin-it-btn-shortcode-wrapper
+##.pin-it-button
+##.pin-it-large
+##.pin-share
+##.pin-social
+##.pinButton
+##.pin_custom_button
+##.pin_share
+##.pinit-btn
+##.pinit-btn-container
+##.pinit-button
+##.pinit-overlay
+##.pinitShare
+##.pinit_btn
+##.pinterest-btn
+##.pinterest-button
+##.pinterest-custom-share
+##.pinterest-follow
+##.pinterest-footer-share
+##.pinterest-holder
+##.pinterest-hover-container
+##.pinterest-icon
+##.pinterest-inner
+##.pinterest-link
+##.pinterest-post-share
+##.pinterest-share
+##.pinterest-share-btn
+##.pinterest-share-button
+##.pinterest-sharetool
+##.pinterest-top-button
+##.pinterest-transparent
+##.pinterest-wrapper
+##.pinterest.share
+##.pinterest1
+##.pinterestButton
+##.pinterestComponentShare
+##.pinterestShare
+##.pinterestShareTrigger
+##.pinterest_24
+##.pinterest_btn
+##.pinterest_cont
+##.pinterestbg
+##.pinteresticon
+##.pintrest-link
+##.pintrest-share
+##.pintshare
+##.pionusnews-social-widget
+##.pionusnews_social_counter
+##.pipdig_widget_social_icons
+##.pk-share-buttons-item
+##.pk-share-buttons-link
+##.pk-share-buttons-wrap
+##.pk-social
+##.pk-social-links-items
+##.pk-social-links-wrap
+##.pl-nav-group--social
+##.pl-social-counter
+##.pl-social-counters
+##.place-share
+##.player-share-toggle
+##.player-social-share
+##.player__share
+##.plg_socialshare
+##.pluckButtonDiv
+##.pluckCountDiv
+##.plugin-socialshare
+##.plus-one-top-button
+##.plus-share-container
+##.plusone-link
+##.plusone_tigger
+##.pm-socialmedia
+##.pn-social-icons
+##.pnFacebookLikeBtn
+##.pn__share
+##.pn_socialmedia_widget
+##.po-hr-fl__sharing
+##.pocket-btn-icon
+##.pod_share
+##.polaris__social--icon
+##.poll-share
+##.poll-share-box
+##.poll-social-header
+##.poll-social-icons
+##.popover-share
+##.popover-sharing
+##.popySocial
+##.post--share
+##.post--side-menu--social
+##.post-actions-share
+##.post-actions-shares
+##.post-content-share
+##.post-content__sticky-social
+##.post-email-share
+##.post-fb
+##.post-fb-like
+##.post-flikebox
+##.post-footer-share
+##.post-footer-social
+##.post-footer__share
+##.post-full-content__social-footer
+##.post-header-section-social
+##.post-header_sharing-counter
+##.post-header_social-row
+##.post-like-share
+##.post-meta-share
+##.post-meta-social
+##.post-meta__option--fb
+##.post-meta__option--gplus
+##.post-meta__option--twitter
+##.post-meta__sharing
+##.post-metasocial
+##.post-on-social-media
+##.post-share
+##.post-share-area
+##.post-share-b
+##.post-share-bar
+##.post-share-block
+##.post-share-bot
+##.post-share-box
+##.post-share-box-circle
+##.post-share-buttons
+##.post-share-count
+##.post-share-data
+##.post-share-element
+##.post-share-email
+##.post-share-facebook
+##.post-share-float
+##.post-share-icons
+##.post-share-item
+##.post-share-links
+##.post-share-menu-item
+##.post-share-panel
+##.post-share-pinterest
+##.post-share-pt
+##.post-share-row
+##.post-share-social
+##.post-share-toolbar
+##.post-share-twitter
+##.post-share-whatsapp
+##.post-share-widget
+##.post-share__sticky-wrapper
+##.post-sharebox
+##.post-sharebtns
+##.post-sharebuttons
+##.post-sharing
+##.post-sharing-bd
+##.post-sharrre
+##.post-soc-count
+##.post-soc-pin
+##.post-soc-share
+##.post-soc-twit
+##.post-social
+##.post-social-buttons
+##.post-social-goog
+##.post-social-header
+##.post-social-pin
+##.post-social-plugins
+##.post-social-wrapper
+##.post-socials
+##.post-tweet
+##.postDelicious
+##.postDigg
+##.postFacebookIcon
+##.postShare
+##.postShareBtn
+##.postSocial
+##.postSocialBar
+##.postToFacebookFeed
+##.postTwitter
+##.postTwitterIcon
+##.post__fb-page-plugin
+##.post__pin-link
+##.post__share
+##.post__share--facebook
+##.post__share--share
+##.post__share--twitter
+##.post__share--whatsapp
+##.post__share--white
+##.post__share-social
+##.post__single-social
+##.post__social-container
+##.post__social-item
+##.post_share_center
+##.post_share_dig
+##.post_share_facebook
+##.post_share_icons
+##.post_share_stuff
+##.post_share_text
+##.post_share_top
+##.post_share_twitter
+##.post_shares
+##.post_shrBtn_topBox
+##.post_sociable
+##.post_social_link
+##.post_toolbar_share
+##.postbit-social
+##.postcontent__socials
+##.postfblike
+##.postshare
+##.postsw-share
+##.powa-share
+##.powerbarBoxDiv
+##.powerkit_social_links_widget
+##.pp-share-grid-item
+##.pp-social-block
+##.pp-social-icon
+##.pp-social-icons
+##.pp-social-share-content
+##.ppr_priv_share
+##.praxis-social-links
+##.pre-footer-social
+##.pre25SocialLinks
+##.prefooter__social
+##.prettySocial
+##.pretty_social
+##.prettysocial
+##.pri-share
+##.primary-share-buttons
+##.primary-social-buttons
+##.primaryFooter-top-social
+##.print-share
+##.print_and_shares
+##.prisna-social-counter
+##.prisna-social-counter-in-widget
+##.prl-header-social
+##.prod-social-wrapper
+##.prodShareBlock
+##.product-details__share
+##.product-info-social
+##.product-share
+##.product-share-v3
+##.product-social-area
+##.product-social-icon-wrapper
+##.product-social-media
+##.productSocial
+##.product__share
+##.project-activity-twitter
+##.project-share-icons
+##.promo-carousel-social
+##.promo-linkedin
+##.promote-facebook
+##.promote-twitter
+##.promotion-button-fb
+##.promotion-button-twitter
+##.property-social-icons
+##.ps-facebook-liken
+##.psd-sharebar
+##.psd-sharebar-icon
+##.pst-share
+##.pswp__button--share
+##.pt-share
+##.pterest
+##.pub-page-share-tools
+##.public-share
+##.public-social-icons
+##.pull-quote-share
+##.pullquote-share
+##.pullquote_shares_wrapper
+##.pw-button-email
+##.pw-button-facebook
+##.pw-button-flipboard
+##.pw-button-twitter
+##.pw-facebook
+##.pw-googleplus
+##.pw-share-popups
+##.pw-share-tools
+##.pw-twitter
+##.pwebfblikebox
+##.pws_share_btn
+##.pxFacebook
+##.pxTwitter
+##.q_social_icon_holder
+##.qa-share-tools
+##.qf_socials
+##.ql-facebook
+##.ql-instagram
+##.ql-snapchat
+##.ql-twitter
+##.qlsocialicons
+##.qlwapp-button
+##.qode-blog-share
+##.qode-share-title
+##.qodef-social-share
+##.qrtui-c-gallery1-slide_tools_share
+##.qs-subscripe-btn
+##.qt-shareicon
+##.qt-sharepage
+##.qt-socialicon
+##.qticon-share
+##.question-socials
+##.quick-links__social
+##.quickshare
+##.quickshare-container
+##.qw-sharepage-large
+##.qw_social
+##.r-footer--social
+##.r-likes-wrapper
+##.r1-share
+##.r105_container_social_box_text_edit
+##.r7twitter-title
+##.ra-share
+##.ra-share-f
+##.ra-share-t
+##.radium-builder-widget-facebook-like-box
+##.rads-share
+##.rads-social
+##.rainbox_share
+##.rambler-share
+##.rawhtml_twitter_widget
+##.rc-fb-widget
+##.rc_social
+##.rcom-social-site-footer
+##.rcshare
+##.rd-sidebar-social-link
+##.rd_mobile_social
+##.rd_social_container
+##.rde-share-popup
+##.rdsocial
+##.rdy_share
+##.rdy_share-item
+##.react-share__ShareButton
+##.react_share_icons
+##.readmore-social
+##.really_simple_share
+##.receipt-social-icon-container
+##.recipe-infos-users__share
+##.red-fb
+##.red-footer__social-items
+##.red-linkedin
+##.red-tumblr
+##.red-twitter
+##.red-youtube
+##.red_social_aside
+##.reddit-icon
+##.reddit-share-btn
+##.reddit-share-button
+##.reddit-sharetool
+##.reddit_button
+##.reddit_icon_shared
+##.redes-sociais
+##.redes-sociales
+##.redes-sprite-facebook
+##.redes-sprite-twitter
+##.redes_sociales
+##.redes_sociales_zz2
+##.redesign-social-icon-link
+##.redesign-social-icon-list
+##.redit_button
+##.redwaves_social_icons
+##.region-share-inner
+##.region-social
+##.region-social-links
+##.region-social-share
+##.related-share
+##.related-social
+##.related-tweets
+##.report-process-share
+##.reporter-social-buttons
+##.reseaux-footer
+##.reseaux-share
+##.reseaux-soc
+##.reseaux-sociaux
+##.reseaux-sociaux-list
+##.reseauxSociaux
+##.reseaux_sociaux_am
+##.resoc-fb
+##.resp-sharing-button
+##.resultShare
+##.retweet
+##.reuters-share
+##.rev-reaction-share
+##.review-social-icons2
+##.review_sharebar_vertical
+##.rf-footer__socials
+##.rfb-social-network-list
+##.rfd-sharetools
+##.rhd-social-box-wrapper
+##.ri-facebook
+##.ri-instagram
+##.ri-twitter
+##.right-rail-connect
+##.right-share-module
+##.right-slider-fb
+##.right-social
+##.right-social-wrapper
+##.rightAreaSharingItem
+##.rightNavSocial
+##.rightShare
+##.rightSidesocialBAr
+##.right__side__socials
+##.right_rail-follow_us
+##.right_social
+##.right_social_block
+##.right_social_mg
+##.right_socials_wrap
+##.rlx-footer-share
+##.rlx-footer-social
+##.rm-footer-social
+##.rmd-Share
+##.rmp-sharing
+##.rn_SocialBookmarkLink
+##.rnsocial
+##.rollover-fb
+##.rollover-shares
+##.rollover-tw
+##.rollover-vk
+##.ros-social-media
+##.round-btn-share
+##.round-social-buttons
+##.round-social-collection
+##.rounded-social
+##.row-social
+##.rpPostLikeCntnr
+##.rpPostLikeWrap
+##.rr-share
+##.rrss__button
+##.rrss__button--email
+##.rrss__button--facebook
+##.rrss__button--twitter
+##.rrss_pie
+##.rrssb-buttons
+##.rrssb-buttons-container
+##.rs-menu-facebook
+##.rs-prod-socialshare
+##.rs-twitter-widget
+##.rsShareToggleBtn
+##.rs_facebook_actus
+##.rsn-gigya-sharebar-container
+##.rss-social
+##.rss-social-head
+##.rssapp-card-social
+##.rt-social-buttons
+##.rtli-master-social-share
+##.rtsocial-container
+##.rtv__share
+##.rtx-Share
+##.rui-footer-social
+##.rui-social
+##.rvt-c-footer-social
+##.ryot_share
+##.s-btns
+##.s-content__share
+##.s-f__social
+##.s-facebook
+##.s-get-social
+##.s-get-social-share
+##.s-googleplus
+##.s-instagram
+##.s-linkedin
+##.s-nav-social
+##.s-pinterest
+##.s-share
+##.s-share-button
+##.s-sns-link
+##.s-social
+##.s-social-item
+##.s-t-share-icon
+##.s-t-share-icon-c
+##.s-twitter
+##.s-youtube
+##.s1-module-share
+##.s1-social
+##.s1-social-button
+##.s1-social-button-facebook
+##.s1-social-button-twitter
+##.s24-art-share
+##.s_facebook
+##.s_fb
+##.s_google
+##.s_gplus
+##.s_instagram
+##.s_share_box
+##.s_tumblr
+##.s_twitter
+##.s_youtube
+##.saboxplugin-socials
+##.safirShare
+##.sal-leaf-accessori-sharebox
+##.save-share
+##.sb-blog-follow-wrap
+##.sb-likeshare
+##.sb-social
+##.sb-social-counter
+##.sb-social-counter-widget
+##.sbCount
+##.sbSocial
+##.sbSocialData
+##.sb_share
+##.sbm-follow-fb
+##.sbn-entry-social
+##.sc--facebook
+##.sc--google-plus
+##.sc--twitter
+##.sc-button-share
+##.sc-logo-social
+##.sc-pinterest-image-share
+##.sc-share-button
+##.sc-social
+##.sc-social-links
+##.sc-social-sharing
+##.scShareBoxRow
+##.scShareText
+##.scSocialIconsWidget
+##.sc_sns
+##.scl-shr-btns
+##.scpin-detector
+##.scrbbl-post-opts-wrap-share
+##.scrbbl-tb-share-actions
+##.scriptlesssocialsharing
+##.scroll-nav-social-item
+##.scroll-navigation-facebook
+##.scroll-navigation-twitter
+##.scroll-triggered-box
+##.scroll_fixed_wrapper_social
+##.scrolling_share
+##.scsb_facebook
+##.scsb_share
+##.scsb_sharebuttons
+##.scsb_twitter
+##.sd-news-sidebar-social
+##.sd-news-social-container
+##.sd-share
+##.sd-share-icon
+##.sd-sharing
+##.sd-social
+##.sd-social-icon-text
+##.sd-widget-teaser-share
+##.sd_footer--follow_us
+##.sdc-site-share
+##.sdw-share
+##.search-and-share
+##.search-social
+##.search-social-icons
+##.sec-socialgeneral
+##.secArtShare
+##.sec_share
+##.second-social-block
+##.second_part_redes_sociais
+##.secondaryNav-social
+##.secondarySahre
+##.section-follow
+##.section-post-intro-share
+##.section-sharebar
+##.section-social
+##.section_footer-social-links
+##.section_social
+##.section_social_link
+##.section_social_title
+##.seda_share
+##.seguici-sui-social
+##.select-share
+##.selection-sharing
+##.selectionSharer
+##.selfPromo__box--social
+##.sequex-social-icons
+##.serious-share
+##.service-links-facebook-like
+##.service-links-google-plus-one
+##.service-links-linkedin-share-button
+##.service-links-scmp-weibo-widget
+##.service-links-twitter-widget
+##.sexy-bookmarks
+##.sf-share-bar
+##.sf-sharing
+##.sf-social
+##.sf-widget-holder
+##.sfacebook
+##.sfmsb-follow-social-buttons
+##.sfollow_fb
+##.sfollow_tw
+##.sfsi_widget
+##.sg-facebook-btn
+##.sg-social
+##.sg-social-media-icons
+##.sg-twitter-btn
+##.sg-twitter-share
+##.sh-btn-fb
+##.sh-btn-insta
+##.sh-btn-twitter
+##.sh-btn-yt
+##.sh_facebook
+##.share--aside
+##.share--bottom
+##.share--column
+##.share--extra
+##.share--facebook
+##.share--item
+##.share--pocket
+##.share--twitter
+##.share-0
+##.share-a
+##.share-action
+##.share-additional
+##.share-addthis
+##.share-alt
+##.share-anchor
+##.share-and-comments
+##.share-area
+##.share-art
+##.share-article
+##.share-article-button
+##.share-article-loop
+##.share-article-sec
+##.share-article-slider
+##.share-article-social
+##.share-article-tools
+##.share-article-vertical
+##.share-article-via-email
+##.share-b
+##.share-badges
+##.share-bar
+##.share-bar--bottom
+##.share-bar--detail
+##.share-bar--side
+##.share-bar-container
+##.share-bar-decs
+##.share-bar-highlight
+##.share-bar-icon
+##.share-bar-item
+##.share-bar-item-desktop
+##.share-bar-medium-container
+##.share-bar-outer-cont
+##.share-bar-small
+##.share-bar-small-container
+##.share-bar-with-dropdown
+##.share-bar-wrap
+##.share-bar__item
+##.share-bar__link
+##.share-bar__list
+##.share-before
+##.share-bg
+##.share-bis-item
+##.share-bis-link
+##.share-bis-list
+##.share-block
+##.share-block-item
+##.share-blog
+##.share-body
+##.share-body-bottom
+##.share-bottom
+##.share-bottom-fixed
+##.share-bottom-new
+##.share-box-fixed
+##.share-box-inner
+##.share-box-new
+##.share-box-wrapper
+##.share-boxGalleryArticle
+##.share-btn
+##.share-btn-container
+##.share-btn-lnks
+##.share-btns
+##.share-btns-contain
+##.share-bttn
+##.share-button--email
+##.share-button--facebook
+##.share-button--linkedin
+##.share-button--twitter
+##.share-button-group
+##.share-button-inpage
+##.share-button-list
+##.share-button-quotes
+##.share-button-wrapper
+##.share-buttons-2
+##.share-buttons-area
+##.share-buttons-bar
+##.share-buttons-bottom
+##.share-buttons-box
+##.share-buttons-container
+##.share-buttons-fixed
+##.share-buttons-large
+##.share-buttons-line
+##.share-buttons-list
+##.share-buttons-multi
+##.share-buttons-sidebar
+##.share-buttons-top
+##.share-buttons-widget
+##.share-buttons-wrapper
+##.share-buttons__item
+##.share-buttons__text
+##.share-butts
+##.share-circle
+##.share-column
+##.share-comment-etc
+##.share-component
+##.share-contain
+##.share-container.vertical
+##.share-count
+##.share-count-container
+##.share-counters
+##.share-data
+##.share-delicious
+##.share-desktop
+##.share-digg
+##.share-dropdown
+##.share-duplc
+##.share-element
+##.share-elements
+##.share-email
+##.share-entry
+##.share-entry-meta
+##.share-event
+##.share-facebook
+##.share-facebook-like
+##.share-facebook-long
+##.share-facebook-twitter
+##.share-fb
+##.share-fbmessenger
+##.share-feed
+##.share-filled
+##.share-fixed-desktop
+##.share-flat
+##.share-flipboard
+##.share-float
+##.share-float--visible
+##.share-float-overlay
+##.share-float-panel
+##.share-float__facebook
+##.share-float__title
+##.share-float__twitter
+##.share-floating
+##.share-follow
+##.share-follow-tab
+##.share-footer
+##.share-furl
+##.share-fx
+##.share-gab
+##.share-global
+##.share-goo
+##.share-google
+##.share-google-plus-1
+##.share-googlebookmarks
+##.share-googleplus
+##.share-googleplus-icon
+##.share-gp
+##.share-gplus
+##.share-group
+##.share-head
+##.share-heading
+##.share-help
+##.share-holder
+##.share-horiz
+##.share-horizontal
+##.share-hover
+##.share-icon-bar
+##.share-icon-container
+##.share-icon-list
+##.share-icon-small
+##.share-icon-toggle
+##.share-icons-bottom
+##.share-icons-box
+##.share-icons-list
+##.share-icons-meraki
+##.share-icons-sticky-box
+##.share-icons-wrapper
+##.share-iconsGalleryArticle
+##.share-ig
+##.share-in-article
+##.share-in-footer
+##.share-in-post-fb
+##.share-in-post-gplus
+##.share-in-post-tw
+##.share-indicator
+##.share-info-btn
+##.share-info-facebook
+##.share-info-googleplus
+##.share-info-pinterest
+##.share-info-twitter
+##.share-inline-footer-reddit
+##.share-inner
+##.share-inner-wrp
+##.share-instagram
+##.share-interaction
+##.share-it
+##.share-item--google
+##.share-item-horizontal
+##.share-items
+##.share-kit__facebook
+##.share-kit__instagram
+##.share-kit__linkedin
+##.share-kit__twitter
+##.share-kit__youtube
+##.share-label
+##.share-label-text
+##.share-launch
+##.share-left
+##.share-legend
+##.share-line
+##.share-link-button
+##.share-link-container
+##.share-link-facebook
+##.share-link-twitter
+##.share-linkedin
+##.share-links--link
+##.share-links-footer
+##.share-links-label
+##.share-list
+##.share-list-button-box
+##.share-list-container
+##.share-mail
+##.share-me
+##.share-media-side-fold
+##.share-media__a_tag
+##.share-medium
+##.share-menu
+##.share-menu-component
+##.share-message
+##.share-messenger
+##.share-mewe
+##.share-mini
+##.share-module
+##.share-module--button-wrap
+##.share-module--count
+##.share-more
+##.share-more-wrap
+##.share-nav
+##.share-new
+##.share-newsvine
+##.share-nl
+##.share-on
+##.share-on-link
+##.share-on-title
+##.share-on-whsp
+##.share-open-button
+##.share-open-modal
+##.share-opera
+##.share-or
+##.share-pannel
+##.share-pictures-overlay
+##.share-pin
+##.share-pinterest
+##.share-pinterest-dialog
+##.share-pinterest-icon
+##.share-platform
+##.share-plus
+##.share-plusone
+##.share-pn
+##.share-podcast
+##.share-popup
+##.share-popups-component
+##.share-position
+##.share-post
+##.share-post-box
+##.share-prefix
+##.share-rail
+##.share-reddit
+##.share-row
+##.share-rrss
+##.share-save
+##.share-scanning
+##.share-section
+##.share-service-button
+##.share-service-icon-sharebar
+##.share-service-visible
+##.share-servise-block
+##.share-set
+##.share-show-modal
+##.share-side
+##.share-side-bar
+##.share-side-buttons
+##.share-sidenav-box
+##.share-signature
+##.share-signup
+##.share-single
+##.share-sites-thumbs
+##.share-sm-icons
+##.share-socBtns
+##.share-social
+##.share-social-bottom
+##.share-social-box
+##.share-social-icon
+##.share-social-link
+##.share-social-links
+##.share-social-list
+##.share-social-media
+##.share-socials
+##.share-soundcloud
+##.share-steemit
+##.share-sticky
+##.share-sticky--buttons
+##.share-sticky--count
+##.share-story
+##.share-story-container
+##.share-story-mobile__engagement
+##.share-stuff
+##.share-tags
+##.share-telegram
+##.share-test-result
+##.share-text
+##.share-text-holder
+##.share-this
+##.share-this-article
+##.share-this-content
+##.share-this-mobile
+##.share-this-new
+##.share-this-page
+##.share-this-popover
+##.share-this-post
+##.share-this-static
+##.share-this-tip
+##.share-this__area
+##.share-this__btn
+##.share-tick
+##.share-tiktok
+##.share-title
+##.share-to
+##.share-to-soc
+##.share-to-whatsapp-wrapper
+##.share-toggle
+##.share-toggle-button
+##.share-tool
+##.share-toolbar
+##.share-toolbar-box
+##.share-toolbar-container
+##.share-toolbar__container
+##.share-tools
+##.share-tools--primary
+##.share-tools--secondary
+##.share-tools-buttons-top
+##.share-tools-container
+##.share-tools-curated
+##.share-tools-footer
+##.share-tools-list
+##.share-tools-wrapper
+##.share-top
+##.share-top-new
+##.share-topic
+##.share-total-top
+##.share-tray
+##.share-trigger
+##.share-tumblr
+##.share-tumblr-icon
+##.share-tw
+##.share-twitter
+##.share-twitter-icon
+##.share-vertical
+##.share-via-facebook
+##.share-viber
+##.share-video
+##.share-video-link
+##.share-wa
+##.share-wb
+##.share-weather-fb
+##.share-weibo
+##.share-whatsapp
+##.share-widget
+##.share-widget-box
+##.share-widgets
+##.share-with-friends
+##.share-with-prompt
+##.share-wrap
+##.share-wrapper
+##.share-wx
+##.share-wx-item
+##.share-youtube
+##.share-zone
+##.share42init
+##.share4u
+##.shareAction
+##.shareActions
+##.shareAfterAuthors
+##.shareArea
+##.shareArticle
+##.shareArticleButtons
+##.shareArtigo
+##.shareArtigoDesktop
+##.shareBar
+##.shareBarBottom
+##.shareBarFloatter
+##.shareBarPostBottom
+##.shareBarTop
+##.shareBar_gigya
+##.shareBlock
+##.shareBottom
+##.shareBox
+##.shareBox-article
+##.shareBox2
+##.shareBoxMeasure
+##.shareBoxes
+##.shareBtm
+##.shareBtn
+##.shareBtnContainer
+##.shareBtns
+##.shareButt
+##.shareButtonByline
+##.shareButtonList
+##.shareButtons
+##.shareButtons-button
+##.shareButtons-buttons
+##.shareButtons-label
+##.shareButtonsHolder
+##.shareButtonsSprite
+##.shareButtonsvideo
+##.shareComment
+##.shareCon
+##.shareContHQ
+##.shareContainer
+##.shareContainerBottom
+##.shareContainerList
+##.shareContainerTop
+##.shareContainer_two
+##.shareControl
+##.shareCount
+##.shareCta
+##.shareDiv
+##.shareDropDown
+##.shareE
+##.shareEmail
+##.shareExternal
+##.shareFB
+##.shareFace
+##.shareFacebook
+##.shareFb
+##.shareFix
+##.shareFloating_column
+##.shareForm
+##.shareFrame
+##.shareGP
+##.shareGPlus
+##.shareGroup
+##.shareGrp
+##.shareH
+##.shareIcons
+##.shareInFocus
+##.shareItem-twitter
+##.shareItemLikeBox
+##.shareLeft
+##.shareLi
+##.shareLike
+##.shareLink
+##.shareLinks
+##.shareList
+##.shareListBox
+##.shareListing
+##.shareMSN
+##.shareMe
+##.shareMeSingle
+##.shareMenu
+##.shareMenu--vertical
+##.shareMenu__item
+##.shareModalWindowBottom
+##.shareModule
+##.shareModuleBar
+##.shareMore
+##.shareMoreBtn
+##.shareMoreLink
+##.shareNarrow
+##.shareNav
+##.shareNews
+##.shareOption
+##.shareOption-wrap
+##.sharePad
+##.sharePage
+##.sharePanel
+##.sharePinterest
+##.sharePopup__wrap
+##.sharePost
+##.sharePrint
+##.shareProp
+##.shareRow
+##.shareSelector
+##.shareShare
+##.shareSide
+##.shareSideBar
+##.shareSocial
+##.shareSocialArticle
+##.shareSocialButtons
+##.shareSprite
+##.shareSticky
+##.shareSubscribe
+##.shareTW
+##.shareText
+##.shareTextAUI
+##.shareThis
+##.shareThisArticle
+##.shareThisHeaderBox
+##.shareThisPost
+##.shareThisShare
+##.shareThisWrapper
+##.shareThis_button
+##.shareTitle
+##.shareToSocial
+##.shareTool
+##.shareToolBar
+##.shareToolbar
+##.shareTools
+##.shareTop
+##.shareTrig
+##.shareTwit
+##.shareTwitter
+##.shareUsOn
+##.shareVideo
+##.shareWa
+##.shareWhat
+##.shareWidget
+##.shareWidth1
+##.shareWrap
+##.share__btn--js
+##.share__button
+##.share__button-container
+##.share__buttons
+##.share__call-to-action
+##.share__comments
+##.share__container--article
+##.share__facebook
+##.share__header-btn
+##.share__icon
+##.share__icons__container
+##.share__inner
+##.share__instagram
+##.share__item
+##.share__link
+##.share__links
+##.share__list
+##.share__social-items
+##.share__text
+##.share__tools
+##.share__twitter
+##.share__wrapper
+##.share__youtube
+##.share_and_discuss_box
+##.share_area
+##.share_area_item
+##.share_arti_srevamp
+##.share_article
+##.share_article_icons
+##.share_bar
+##.share_bar_container
+##.share_bar_wrapper
+##.share_base_container
+##.share_bk
+##.share_blk
+##.share_block
+##.share_block_art
+##.share_block_sub
+##.share_bottom
+##.share_bottom_1
+##.share_bottons
+##.share_box
+##.share_box_text
+##.share_boxes_new
+##.share_boxes_wraper
+##.share_btn
+##.share_btn_white
+##.share_btns
+##.share_bubble
+##.share_button
+##.share_button_container
+##.share_button_dropdown
+##.share_button_facebook
+##.share_button_google
+##.share_buttons
+##.share_buttons_col_1
+##.share_buttons_container
+##.share_buttons_single_page
+##.share_buttons_style
+##.share_center
+##.share_con
+##.share_container
+##.share_content
+##.share_content_container
+##.share_control
+##.share_count
+##.share_counter
+##.share_cover
+##.share_cta
+##.share_digg
+##.share_email_article
+##.share_entry
+##.share_facebook
+##.share_fb
+##.share_google
+##.share_group
+##.share_h
+##.share_hidden
+##.share_horizontal
+##.share_icon
+##.share_icons
+##.share_icons1
+##.share_icons_big
+##.share_icons_container
+##.share_img_main
+##.share_index
+##.share_inline_header
+##.share_issue
+##.share_items
+##.share_items1
+##.share_lbox
+##.share_line
+##.share_link
+##.share_linkedin
+##.share_links
+##.share_list
+##.share_mod_ul
+##.share_nav
+##.share_ok
+##.share_panel
+##.share_part_dailym
+##.share_part_facebook
+##.share_part_insta
+##.share_part_twitter
+##.share_part_youtube
+##.share_pin_img
+##.share_pinterest
+##.share_pluging
+##.share_post
+##.share_post_footer
+##.share_post_side
+##.share_posts
+##.share_product
+##.share_question
+##.share_rdr
+##.share_row
+##.share_sct
+##.share_sharethis
+##.share_side_center
+##.share_sidebar
+##.share_sm
+##.share_small
+##.share_social
+##.share_square
+##.share_story
+##.share_tb
+##.share_this
+##.share_this_content
+##.share_this_icons
+##.share_this_page_article_bottom
+##.share_this_page_article_toolbar
+##.share_this_story_box
+##.share_three
+##.share_title_button
+##.share_title_text
+##.share_to_box
+##.share_toggle
+##.share_toi
+##.share_tool
+##.share_tool_24
+##.share_tool_container
+##.share_toolbox
+##.share_tools
+##.share_top
+##.share_total
+##.share_trigger
+##.share_tw
+##.share_twitter
+##.share_two
+##.share_txt
+##.share_under_post
+##.share_v2
+##.share_ver
+##.share_vid
+##.share_vk
+##.share_w
+##.share_wa
+##.share_widget
+##.share_widgets
+##.share_with_friends
+##.share_wrap
+##.share_wrapper
+##.sharea
+##.sharea-goo
+##.shareaholic-canvas
+##.shareaholic-like-buttonset
+##.shareaholic-show-on-load
+##.shareaholic-ui
+##.shareall
+##.shareb
+##.sharebar
+##.sharebar-bg
+##.sharebar-home
+##.sharebar-mobile
+##.sharebar-outer-vertical
+##.sharebar-radial
+##.sharebar-share
+##.sharebar-shareicon
+##.sharebar-top-desktop
+##.sharebarWrapper
+##.sharebar__sharecount
+##.sharebar_expanded
+##.sharebar_mainsites
+##.sharebarbtn
+##.sharebear
+##.sharebelow-twitter
+##.sharebg
+##.sharebottom
+##.sharebox
+##.sharebox-button
+##.sharebox-outer
+##.sharebox_new
+##.sharebtn
+##.sharebtns
+##.sharebutcont
+##.sharebutdrop
+##.sharebutt
+##.sharebutt__wrapper
+##.sharebutton
+##.sharebuttoncontainer
+##.sharebuttons
+##.sharebuttonu
+##.sharecont
+##.sharecontainer
+##.sharecount-item
+##.sharecount-social-btns
+##.shared-bar
+##.shared-counts-button
+##.shared-counts-icon-label
+##.shared-counts-label
+##.shared-counts-wrap
+##.shared-text-social
+##.shared_block
+##.shared_menu
+##.sharedaddy
+##.sharedaddy-sidebar
+##.sharedesktop
+##.sharefacebook
+##.sharefb
+##.sharefloater
+##.sharefull
+##.sharegoogle
+##.sharegrid
+##.shareicon
+##.shareicons
+##.shareiconsbg
+##.shareinclude
+##.shareing-title
+##.shareinpost
+##.shareinsta
+##.shareintro
+##.shareit
+##.shareitem
+##.shareits
+##.sharekit
+##.sharelcol
+##.sharelight
+##.sharelike
+##.shareline
+##.sharelines
+##.sharelink
+##.sharelink-pin
+##.sharelinkcont
+##.sharelinkedin
+##.sharelinks
+##.sharelist
+##.sharelist__item
+##.sharelist__items
+##.sharelizers
+##.sharelordhtml
+##.sharembed
+##.sharemedia
+##.sharemenu
+##.sharemeta
+##.sharemore
+##.sharenewsin
+##.sharenlike
+##.shareokez
+##.shareonclick
+##.shareovanje
+##.shareovi
+##.sharepage
+##.sharepanel
+##.sharepanel__bottom
+##.sharepanel__buttons
+##.sharepinterest
+##.shareplatform
+##.shareplusone
+##.sharepop
+##.sharepost
+##.sharepostwide
+##.sharer
+##.sharer-0
+##.sharer-btn
+##.sharer-delicious
+##.sharer-digg
+##.sharer-facebook
+##.sharer-googleplus
+##.sharer-holder
+##.sharer-icon
+##.sharer-images-container
+##.sharer-linkedin
+##.sharer-tumblr
+##.sharer-twitter
+##.sharer-vk
+##.sharerBar
+##.sharer__wrapper
+##.sharer_buttons
+##.sharerich-wrapper
+##.sharers
+##.sharertitle
+##.shares--floating
+##.shares-comment
+##.shares-horizontal
+##.shares-icon
+##.shares-top
+##.shares-vertical
+##.sharesWrapper
+##.shares__item
+##.shares_icon
+##.shares_tally
+##.sharesocial
+##.sharesocials
+##.sharetags
+##.sharetastic
+##.sharetext
+##.sharethis
+##.sharethis-bar
+##.sharethis-bottom
+##.sharethis-button
+##.sharethis-buttons
+##.sharethis-container
+##.sharethis-hor
+##.sharethis-inline-share-buttons
+##.sharethis-link
+##.sharethis-social
+##.sharethis-wrapper
+##.sharethisButton
+##.sharethispage
+##.sharetip-wrap
+##.shareto
+##.sharetool
+##.sharetool__item
+##.sharetool__list
+##.sharetool_bg
+##.sharetools
+##.sharetools-overlay
+##.sharetoolsnew
+##.sharetop
+##.sharetumblr
+##.sharetweet
+##.sharetweeter
+##.sharetwitter
+##.sharevertical
+##.sharewidget
+##.sharewrapper
+##.sharewww
+##.sharewykop
+##.sharico2
+##.shariff-button
+##.sharify-btn-facebook
+##.sharify-btn-gplus
+##.sharify-btn-linkedin
+##.sharify-btn-pinterest
+##.sharify-btn-pocket
+##.sharify-btn-reddit
+##.sharify-btn-twitter
+##.sharify-container
+##.sharing--footer
+##.sharing-area
+##.sharing-bar
+##.sharing-block
+##.sharing-bottom
+##.sharing-box
+##.sharing-btn:not(.btn-comments):not(.btn-copy-url):not(.btn-mail)
+##.sharing-button
+##.sharing-buttons
+##.sharing-buttons-set
+##.sharing-container
+##.sharing-counters
+##.sharing-div
+##.sharing-element-facebook
+##.sharing-element-mail
+##.sharing-element-twitter
+##.sharing-facebook
+##.sharing-fb
+##.sharing-google-plus
+##.sharing-home
+##.sharing-info
+##.sharing-item
+##.sharing-link
+##.sharing-links
+##.sharing-links--body__item
+##.sharing-links--header
+##.sharing-links--story
+##.sharing-links__share
+##.sharing-open
+##.sharing-option
+##.sharing-options
+##.sharing-popup
+##.sharing-social
+##.sharing-sticky
+##.sharing-tool
+##.sharing-tool-wrapper
+##.sharing-toolbar
+##.sharing-tools
+##.sharing-top-float
+##.sharing-twitter
+##.sharing-twt
+##.sharing-vertical
+##.sharing-widget
+##.sharing-widget__btn
+##.sharing-wrap
+##.sharing-zone
+##.sharingBar
+##.sharingBox
+##.sharingButton
+##.sharingButtonVertical
+##.sharingButtonsText
+##.sharingContainer
+##.sharingHandlers
+##.sharingHd
+##.sharingIconEmail
+##.sharingIconFacebook
+##.sharingIconLinkedIn
+##.sharingIconMoreServices
+##.sharingIconTwitter
+##.sharingLinks
+##.sharingList
+##.sharingOptions
+##.sharingPanel
+##.sharingSticky
+##.sharingToolBar
+##.sharingToolbar
+##.sharingTools
+##.sharingToolsBox
+##.sharing__list
+##.sharing_block
+##.sharing_box
+##.sharing_button
+##.sharing_buttons
+##.sharing_container
+##.sharing_controls
+##.sharing_furniture
+##.sharing_label
+##.sharing_links
+##.sharing_menu
+##.sharing_nw
+##.sharing_social_count
+##.sharing_tools
+##.sharing_tools_gall
+##.sharing_wide
+##.sharingfooter
+##.sharingfooter__external
+##.sharingicons
+##.sharinginarticle
+##.sharinglink
+##.sharings
+##.sharings_box
+##.sharingtb
+##.sharingtools-anon
+##.sharingwrap
+##.sharkskin-footer-social
+##.sharre-container
+##.sharrre
+##.sharrre-container
+##.sharrre_widget
+##.shars__socials
+##.shars__visible
+##.show-all-sharetool
+##.show-share
+##.show-share-count
+##.showShareMore
+##.show_facebook_widget
+##.show_social
+##.showing-shares
+##.showme-share-buttons
+##.showsocial
+##.showthread-social
+##.shr-bookmarks
+##.shr-btn
+##.shr-btn-scl2
+##.shr-btn-tbl
+##.shr-btns
+##.shr_btn
+##.shr_bx
+##.shre-icon
+##.shre_social
+##.shrsg
+##.si-share
+##.si-share-box
+##.sib-post-share-buttons
+##.sib-shareButton
+##.sics-component__footer__secondary-social
+##.sics-component__sharebar
+##.side-article-share
+##.side-facebook
+##.side-pinterest
+##.side-post-social
+##.side-social
+##.side-social-buttons
+##.side-social-links
+##.side-social-links-wrapper
+##.side-socials
+##.side-sticky-share
+##.side-twitter
+##.sideBarShare
+##.sideBarSocial
+##.sideShare
+##.sideShareContainer
+##.side_share_parent
+##.side_sns
+##.side_social
+##.side_social_media
+##.side_twitter
+##.side_twitterfollow
+##.sidebar--share-article
+##.sidebar--social-list
+##.sidebar--social-list--ul
+##.sidebar-action-share
+##.sidebar-bluetweets
+##.sidebar-component--social-share
+##.sidebar-facebook
+##.sidebar-fb-container
+##.sidebar-fb-like
+##.sidebar-gplus
+##.sidebar-share
+##.sidebar-share-item
+##.sidebar-share-item-twitter
+##.sidebar-share-widget
+##.sidebar-social
+##.sidebar-social-btn
+##.sidebar-socials
+##.sidebar-socila
+##.sidebar-tile-facebook
+##.sidebar-twitter
+##.sidebarFollow
+##.sidebarSocial
+##.sidebar__header--twitter
+##.sidebar__share
+##.sidebar__share-options-list
+##.sidebar__sharing
+##.sidebar_button_social
+##.sidebar_facebook
+##.sidebar_social
+##.sidebar_socialmediabox
+##.sidebar_socials
+##.sidebarbox__facebook_fan_counter
+##.sidebarsharer
+##.sidebarsocial
+##.sidebartwitter
+##.sideblock_social
+##.sideblock_twitter
+##.sidefacebook
+##.sideshares-slidein
+##.sidesocial
+##.sign-up-follow
+##.simple-follow-module
+##.simple-share
+##.simple-share-buttons-container
+##.simple-social-icons
+##.simpleShare
+##.simple_socialmedia
+##.simplesocial
+##.simplesocialbuttons
+##.simplesocialbuttons_inline
+##.single-article-social
+##.single-article__social__bottom
+##.single-aside-social-wrap
+##.single-content-share
+##.single-fb-share
+##.single-item-share
+##.single-meta-sharing
+##.single-post-meta-data__social-sharing
+##.single-post-share
+##.single-post-share-box-container
+##.single-post-sharing-button
+##.single-post-sharing-button-label
+##.single-post-sharing-button-list
+##.single-post-social
+##.single-post-socials
+##.single-post__share
+##.single-share
+##.single-share-bar
+##.single-share-box-container
+##.single-share-logo
+##.single-share-pinterest
+##.single-sharing-btns
+##.single-sidebar-share
+##.single-social-button
+##.single-social-button-email
+##.single-social-button-whatsapp
+##.single-social-wrap
+##.single-socials-icons
+##.singleMultiple-share
+##.singlePostShare
+##.singlePostShareButton
+##.singlePostShareButtonTwitter
+##.singleSocialShares
+##.single__content-share
+##.single__floating-share
+##.single__share
+##.single__share__label
+##.single__social
+##.single_post_share_container
+##.single_post_share_icon_post
+##.single_post_share_icons
+##.single_post_share_reddit
+##.single_share
+##.single_share_bar
+##.single_share_block
+##.single_share_buttons_wrapper
+##.single_sharebar
+##.single_social
+##.single_view_top_social_wrap
+##.singlefollowme
+##.singlepage-socialicons
+##.singlepost_share
+##.singlesocialfootericon
+##.sinsocialshare
+##.sinsocialshareright
+##.site-follow-us
+##.site-footer-col-social
+##.site-footer-facebook
+##.site-footer-flipboard
+##.site-footer-follow
+##.site-footer-google-plus
+##.site-footer-instagram
+##.site-footer-twitter
+##.site-footer-youtube
+##.site-footer__social
+##.site-footer__social-link
+##.site-footer__social-links
+##.site-footer__social-list
+##.site-footer__socials
+##.site-head-social--small
+##.site-header-nav__social-icon
+##.site-header-social
+##.site-header__article-share
+##.site-header__share
+##.site-header__share-icons
+##.site-header__social-icon
+##.site-header__social-links
+##.site-header__top-facebook
+##.site-header__top-twitter
+##.site-nav--socials
+##.site-nav-social
+##.site-nav-social-facebook
+##.site-nav-social-google-plus
+##.site-nav-social-item
+##.site-nav-social-items
+##.site-nav-social-twitter
+##.site-nav-social-youtube
+##.site-navigation__right-social
+##.site-share-button
+##.site-share-buttons-container
+##.site-share-placeholder
+##.site-share-wrapper
+##.site-social
+##.site-social-icon
+##.site-social-menu
+##.site-social-networks
+##.site-stats-fb
+##.site-stats-tweet
+##.site-sticky-social-right
+##.site-topbar-social
+##.siteFooterSocialList
+##.siteFooter_social
+##.siteFooter_socialCon
+##.siteFooter_socialHeader
+##.siteFooter_socialItem
+##.siteNavSocial
+##.siteSocialIcons
+##.siteSocialIcons_wrapper
+##.site__footer-social-links
+##.site_share
+##.sitepageShare
+##.sitewide-footer--social-nav
+##.sitewide-header-social
+##.sitewide-social-media
+##.siu_socialmedia_2
+##.sky-component-social-share
+##.sl-fb-sharer-button
+##.slate-footer__follow-slate
+##.slickshare
+##.slide-desc-share
+##.slide-share-container
+##.slide_likebox
+##.slideout-follow
+##.slider-eo__share
+##.slider-social
+##.sliderSocialIconWrapper
+##.slideshow-share
+##.slideshow-share-buttons
+##.slideshow__header-share
+##.slim-header--social-icons
+##.slinkedin
+##.sm-marketing-social
+##.sm-page-widget-sociallinks
+##.sm-share-follow
+##.sm-share-social-buttons
+##.sm-social
+##.sm-social-links-horizontal
+##.sm4-article-share
+##.sm4FollowWidget
+##.sm4ShareWidget
+##.sm4WidgetArticleShare
+##.sm_facebook
+##.sm_share_badge
+##.sm_twitter
+##.small-facebook
+##.small-sharing-btn
+##.small-twitter
+##.smallsocial
+##.smallsocialbutton
+##.smbt-social-icons
+##.smshare
+##.sn-share
+##.sna-whatsapp
+##.snapchat-share-button
+##.snei-social
+##.snp-fb
+##.sns-bar
+##.sns-btn-wrap
+##.sns-btns
+##.sns-con
+##.sns-fb
+##.sns-link
+##.sns-link-wrap
+##.sns-list__item--facebook
+##.sns-list__item--hatena
+##.sns-list__item--twitter
+##.sns-section
+##.sns-share
+##.sns-share-area
+##.sns-share-icon
+##.sns-share02
+##.sns-sharing
+##.sns-tw
+##.sns-wrapper
+##.sns-yt
+##.snsBox
+##.snsPalette
+##.snsWrapper
+##.snsZone
+##.sns_box
+##.sns_box_single
+##.sns_comm
+##.sns_follow
+##.sns_right
+##.sns_share
+##.sns_sub
+##.sns_tile_wrapper
+##.snsb-balloon
+##.snsshare
+##.sny-footer-social-links
+##.so_facebook
+##.so_instagram
+##.so_linkedin
+##.so_twitter
+##.soc-bar-btn
+##.soc-bg-fb
+##.soc-bg-ig
+##.soc-bg-li
+##.soc-bg-tw
+##.soc-block
+##.soc-btn
+##.soc-btns
+##.soc-buttons-good
+##.soc-facebook
+##.soc-fb
+##.soc-google
+##.soc-gplus
+##.soc-ico
+##.soc-icon-bar
+##.soc-icon-circle
+##.soc-icons
+##.soc-icons-bar
+##.soc-insta
+##.soc-instagram
+##.soc-link
+##.soc-linked
+##.soc-links
+##.soc-media
+##.soc-media-sharing
+##.soc-menu
+##.soc-pint
+##.soc-pinterest
+##.soc-share-cont
+##.soc-tu
+##.soc-tw
+##.soc-twi
+##.soc-twitter
+##.soc-widget
+##.soc-youtube
+##.soc-yt
+##.socBmXing
+##.socButtons
+##.socFbLikeShare
+##.socFbShare
+##.socFollowMod
+##.socIcon
+##.socNetButton
+##.socNetworks-footer-article
+##.socRight
+##.socShare
+##.socWidget
+##.soc_box2
+##.soc_btn
+##.soc_hello_ials
+##.soc_icon
+##.soc_icon-facebook
+##.soc_icon-instagram
+##.soc_icon-linkedin
+##.soc_icon-mail
+##.soc_icon-twitter-3
+##.soc_icons
+##.soc_link
+##.soc_share_icons
+##.soc_sharing
+##.soc_square
+##.soc_tabs
+##.soc_tw
+##.socail-area
+##.socail-icons
+##.socail-share
+##.socailMediaLinks
+##.socail_media
+##.socailmain
+##.socblock
+##.socbtn
+##.socbtn_fb
+##.socbtn_gp
+##.socbtn_in
+##.socbtn_ok
+##.socbtn_rs
+##.socbtn_tw
+##.socbtn_vk
+##.socbtn_yt
+##.soci_icon_wrap
+##.sociaPayLasim
+##.sociable
+##.sociable-box
+##.sociable_tagline
+##.sociables
+##.social--article
+##.social--email
+##.social--facebook
+##.social--fb
+##.social--horizontal
+##.social--instagram
+##.social--mail
+##.social--pin-custom
+##.social--pinterest
+##.social--share
+##.social--share-links
+##.social--share-wrap
+##.social--share_btn
+##.social--snapchat
+##.social--social-link
+##.social--top
+##.social--tw-custom
+##.social--twitter
+##.social--twolines
+##.social--vertical
+##.social-Facebook
+##.social-action
+##.social-addthis
+##.social-align-default
+##.social-apps
+##.social-area
+##.social-area-syncer
+##.social-aside
+##.social-background
+##.social-badge
+##.social-badges
+##.social-banner
+##.social-banners
+##.social-bar-article
+##.social-bar-bottom
+##.social-bar-button-share
+##.social-bar-facebook
+##.social-bar-h
+##.social-bar-inline
+##.social-bar-new
+##.social-bar-pinterest
+##.social-bar-right
+##.social-bar-sticky
+##.social-bar-tumblr
+##.social-bar-twitter
+##.social-bar-widget
+##.social-bar-wrapper
+##.social-barker
+##.social-big
+##.social-big-buttons
+##.social-big-container
+##.social-bk-news
+##.social-block
+##.social-block-content
+##.social-block-news-page
+##.social-block-news-page-update
+##.social-block-tabs-wrapper
+##.social-blocks
+##.social-bookmakrs-container
+##.social-bookmark
+##.social-bookmark-links
+##.social-bookmarks
+##.social-botton
+##.social-bottons
+##.social-box-facebook
+##.social-box-float
+##.social-box-footer
+##.social-box-tab
+##.social-box-twitter
+##.social-box-widget
+##.social-btn-area
+##.social-btn-article
+##.social-btn-container
+##.social-btn-facebook
+##.social-btn-list
+##.social-btn-loader
+##.social-btn-twitter
+##.social-btn-wrapper
+##.social-btns
+##.social-btns-new
+##.social-btns-vert-wrapper
+##.social-bubble
+##.social-button-box
+##.social-button-group
+##.social-button-heading
+##.social-button-row
+##.social-button-small
+##.social-button-wrapper
+##.social-button-wrapper-underpost
+##.social-button1
+##.social-button__wrapper
+##.social-buttons--content
+##.social-buttons--content-before
+##.social-buttons--follow
+##.social-buttons--uk
+##.social-buttons-bottom
+##.social-buttons-compact
+##.social-buttons-contact
+##.social-buttons-container
+##.social-buttons-float
+##.social-buttons-footer
+##.social-buttons-global__facebook
+##.social-buttons-global__twitter
+##.social-buttons-home
+##.social-buttons-left
+##.social-buttons-module
+##.social-buttons-r
+##.social-buttons-right
+##.social-buttons-sidebar
+##.social-buttons-thumb
+##.social-buttons-twitter
+##.social-buttons-v2
+##.social-buttons-vertical
+##.social-buttons-wrapper
+##.social-buttons1
+##.social-buttons__item
+##.social-buttons__list
+##.social-buttons__list--icon
+##.social-buttons_right-sticky
+##.social-card_box
+##.social-channel-links
+##.social-charms
+##.social-circles
+##.social-circles-facebook
+##.social-circles-instagram
+##.social-circles-twitter
+##.social-clipped-fb
+##.social-clipped-tw
+##.social-col
+##.social-color
+##.social-column
+##.social-columns
+##.social-component__link
+##.social-container-bottom
+##.social-container-inner
+##.social-conteiner
+##.social-contenitore-footer
+##.social-controls
+##.social-count
+##.social-count-boxes
+##.social-count-wrap
+##.social-counter
+##.social-counter-man
+##.social-counter-metro
+##.social-counter-widget
+##.social-counter-wrap
+##.social-counter-wrapper
+##.social-counters
+##.social-counts-single
+##.social-cta
+##.social-deferred
+##.social-displayer
+##.social-div
+##.social-div-icon
+##.social-el
+##.social-exit-intent-wrapper-wrapper
+##.social-expand-control
+##.social-expanded
+##.social-ext
+##.social-f
+##.social-facebook-link
+##.social-fb
+##.social-fbook
+##.social-feed-twitter
+##.social-feeds-v1-content
+##.social-fixed
+##.social-fixed-bar
+##.social-fixed-links
+##.social-fl
+##.social-float
+##.social-floating
+##.social-follow
+##.social-follow-bar
+##.social-follow-block
+##.social-follow-box
+##.social-follow-button
+##.social-follow-buttons
+##.social-follow-buttons__button
+##.social-follow-item
+##.social-follow-items
+##.social-follow-list
+##.social-follow-small
+##.social-follow-us__list
+##.social-follow__container
+##.social-followers
+##.social-foot
+##.social-footer
+##.social-footer-block
+##.social-footer-ctr
+##.social-footer-fb
+##.social-footer-icon
+##.social-footer-pin
+##.social-footer-tw
+##.social-footer-wrap
+##.social-foursquare
+##.social-full
+##.social-group
+##.social-group-top
+##.social-groups
+##.social-h
+##.social-head
+##.social-head-list
+##.social-header
+##.social-height
+##.social-helpers
+##.social-holder-min
+##.social-home
+##.social-horizontal
+##.social-houzz
+##.social-hovers
+##.social-hp
+##.social-hp-items
+##.social-hub
+##.social-icon-ar
+##.social-icon-background
+##.social-icon-bar
+##.social-icon-block
+##.social-icon-buttons
+##.social-icon-container
+##.social-icon-container-footer
+##.social-icon-group
+##.social-icon-img
+##.social-icon-link
+##.social-icon-linkedin
+##.social-icon-list
+##.social-icon-one
+##.social-icon-t
+##.social-icon-table
+##.social-icon-twitter
+##.social-icon-wrap
+##.social-icon-wrapper
+##.social-icon2
+##.social-icons-2
+##.social-icons-a
+##.social-icons-b
+##.social-icons-b__link
+##.social-icons-big
+##.social-icons-black
+##.social-icons-block
+##.social-icons-bottom-set
+##.social-icons-c
+##.social-icons-classic
+##.social-icons-color-black
+##.social-icons-container
+##.social-icons-desktop
+##.social-icons-float
+##.social-icons-footer
+##.social-icons-footer-bottom
+##.social-icons-holder
+##.social-icons-item
+##.social-icons-links
+##.social-icons-list
+##.social-icons-new
+##.social-icons-radius
+##.social-icons-small
+##.social-icons-special
+##.social-icons-sticky
+##.social-icons-title
+##.social-icons-top
+##.social-icons-v2
+##.social-icons-white
+##.social-icons-widget
+##.social-icons-wrap
+##.social-icons-wrapper
+##.social-icons_1
+##.social-icons__icons
+##.social-icons__link
+##.social-img-btn
+##.social-inline
+##.social-inline-list
+##.social-inner
+##.social-insta
+##.social-instagram
+##.social-kit__item
+##.social-layer-link
+##.social-layzing
+##.social-left
+##.social-like
+##.social-like-buttons
+##.social-like-module
+##.social-likes
+##.social-likes-icons
+##.social-likes-pane
+##.social-likes__button
+##.social-likes__counter
+##.social-likes__icon
+##.social-likes__widget
+##.social-likes_ready
+##.social-likes_visible
+##.social-line-button
+##.social-link-bot
+##.social-link-col
+##.social-link-container
+##.social-link-email
+##.social-link-facebook
+##.social-link-fb
+##.social-link-header
+##.social-link-image
+##.social-link-info
+##.social-link-item
+##.social-link-list
+##.social-link-pinterest
+##.social-link-top
+##.social-link-tw
+##.social-link-twitter
+##.social-link-wrapper
+##.social-linkedin
+##.social-links-block
+##.social-links-horiz
+##.social-links-list
+##.social-links-text
+##.social-links-title
+##.social-links-tooltip
+##.social-links-widget
+##.social-links-wrap
+##.social-links__container
+##.social-links__items
+##.social-links__list
+##.social-linksnbt
+##.social-list-art
+##.social-list-bubble
+##.social-list-container
+##.social-list-footer
+##.social-list-icon
+##.social-list:not(html):not(body)
+##.social-listing:not(html):not(body)
+##.social-main-footer
+##.social-meadia-share
+##.social-media--container
+##.social-media-16x16
+##.social-media-banner
+##.social-media-bar
+##.social-media-bar-fixed
+##.social-media-block
+##.social-media-box
+##.social-media-box-wrapper
+##.social-media-button
+##.social-media-button-container
+##.social-media-buttons
+##.social-media-buttons-footer
+##.social-media-buttons-single
+##.social-media-call-to-action
+##.social-media-column
+##.social-media-connect
+##.social-media-connect--readonly
+##.social-media-div:not(html):not(body)
+##.social-media-facebook
+##.social-media-fixed
+##.social-media-follow
+##.social-media-follow-wrapper
+##.social-media-footer
+##.social-media-googleplus
+##.social-media-head-icons
+##.social-media-header
+##.social-media-icon
+##.social-media-icon-hack
+##.social-media-icon-list
+##.social-media-icons-menu
+##.social-media-items
+##.social-media-lhc-item
+##.social-media-li
+##.social-media-link
+##.social-media-list-container
+##.social-media-module
+##.social-media-nav
+##.social-media-nav__sticky
+##.social-media-outer
+##.social-media-page
+##.social-media-page-wrap
+##.social-media-pages
+##.social-media-panel
+##.social-media-profiles
+##.social-media-service-module
+##.social-media-share
+##.social-media-share-buttons
+##.social-media-share-links
+##.social-media-sharer
+##.social-media-sharing
+##.social-media-sharing-buttons
+##.social-media-twitter
+##.social-media-widget
+##.social-media-widget-container
+##.social-media-widget-icon-bar
+##.social-media-wrapper
+##.social-menu-btn-bottom
+##.social-menu-desktop
+##.social-menu-fix
+##.social-menu-item
+##.social-menu-span
+##.social-meta-count
+##.social-meta-facebook
+##.social-meta-item
+##.social-meta-twitter
+##.social-methods
+##.social-methods-wide
+##.social-mobile__share
+##.social-network-sharing
+##.social-network-wrapper
+##.social-network.widget
+##.social-networking
+##.social-networks-2
+##.social-networks-bayside
+##.social-networks-container
+##.social-networks-float
+##.social-networks-footer
+##.social-networks-link
+##.social-networks-links
+##.social-networks-list
+##.social-networks__badges
+##.social-networks__item
+##.social-networks__wrapper
+##.social-news-buttons
+##.social-newsletter
+##.social-newsletter-container
+##.social-node
+##.social-node-2
+##.social-note
+##.social-nt
+##.social-number-large
+##.social-onscroll
+##.social-options
+##.social-overlay
+##.social-page-btns
+##.social-pages
+##.social-panel
+##.social-pin
+##.social-pinterest
+##.social-pinterst
+##.social-plug-in
+##.social-plugin-twitter
+##.social-plugins
+##.social-plugins-small
+##.social-plugins-widget
+##.social-pod
+##.social-popover
+##.social-popup
+##.social-popup-backdrop
+##.social-post
+##.social-post-share
+##.social-power
+##.social-print
+##.social-profile-icons
+##.social-profiles
+##.social-profiles-list
+##.social-profiles-nav
+##.social-profiles-widget
+##.social-promo
+##.social-promo-rail
+##.social-promote-box
+##.social-prompt
+##.social-prompt--btn
+##.social-rel
+##.social-right
+##.social-right-xs
+##.social-rightbar-buttons
+##.social-rocket-inline-buttons
+##.social-room
+##.social-root
+##.social-row
+##.social-scroll
+##.social-search-icons
+##.social-sec
+##.social-section
+##.social-section-links
+##.social-sendmail
+##.social-separator
+##.social-services
+##.social-shadow
+##.social-shar-bar
+##.social-share
+##.social-share--column
+##.social-share--desktop
+##.social-share--linkedin
+##.social-share--sticky
+##.social-share-area
+##.social-share-article
+##.social-share-articolo
+##.social-share-bar
+##.social-share-bar-container
+##.social-share-block
+##.social-share-bottom
+##.social-share-box
+##.social-share-btn
+##.social-share-btns
+##.social-share-button
+##.social-share-buttons
+##.social-share-buttons-wrapper
+##.social-share-circle
+##.social-share-collection
+##.social-share-container
+##.social-share-count
+##.social-share-count-full
+##.social-share-counter__shares
+##.social-share-counts-cont
+##.social-share-custom
+##.social-share-expand
+##.social-share-facebook
+##.social-share-flat
+##.social-share-footer
+##.social-share-google
+##.social-share-head
+##.social-share-head-article
+##.social-share-hed
+##.social-share-icons
+##.social-share-label-wrap
+##.social-share-lede-image
+##.social-share-left
+##.social-share-link
+##.social-share-links
+##.social-share-list
+##.social-share-nav
+##.social-share-nota-single
+##.social-share-options
+##.social-share-overlay
+##.social-share-product
+##.social-share-single
+##.social-share-single-top
+##.social-share-svg
+##.social-share-text
+##.social-share-tiles
+##.social-share-title
+##.social-share-toolbar
+##.social-share-twitter
+##.social-share-wrap
+##.social-share-wrapper
+##.social-share1
+##.social-share__button
+##.social-share__list
+##.social-share__wrapper
+##.social-sharebar
+##.social-shared
+##.social-sharer
+##.social-sharer-holder
+##.social-shares
+##.social-shares-wrapper
+##.social-sharethis-post
+##.social-sharing--article
+##.social-sharing-bar__li
+##.social-sharing-baseline
+##.social-sharing-bot
+##.social-sharing-bottom
+##.social-sharing-btn
+##.social-sharing-button
+##.social-sharing-buttons
+##.social-sharing-item
+##.social-sharing-link
+##.social-sharing-tool
+##.social-sharing-top
+##.social-sharing-v2
+##.social-sharing-vertical
+##.social-sharing-zone
+##.social-sharing__icons
+##.social-sharing__link
+##.social-show-links
+##.social-side-float
+##.social-side-nav
+##.social-sidebar
+##.social-siderail-l
+##.social-single
+##.social-site
+##.social-site-links
+##.social-sites
+##.social-sliver
+##.social-socialButtons
+##.social-sondage
+##.social-space
+##.social-stack
+##.social-stacker
+##.social-static
+##.social-statistics-widget
+##.social-stats
+##.social-stats-box
+##.social-stick
+##.social-sticky
+##.social-sticky-bar
+##.social-sticky-wrapper
+##.social-story-bar
+##.social-strip
+##.social-strip-medium
+##.social-strip-wrapper
+##.social-stripe
+##.social-stroke-icon
+##.social-stub
+##.social-stuff
+##.social-sub
+##.social-subnav
+##.social-subscribe
+##.social-subscribe-banner
+##.social-surface-rr
+##.social-tab
+##.social-tab-i
+##.social-tab-mini
+##.social-tabs
+##.social-tabset
+##.social-tail
+##.social-taskbar
+##.social-telegramm
+##.social-tiny
+##.social-to
+##.social-toggle
+##.social-tool
+##.social-toolbar__wrap
+##.social-tools-additional
+##.social-tools-bottom
+##.social-tools-home
+##.social-tools-primary
+##.social-tools-wrapper
+##.social-tools-wrapper-bottom
+##.social-tooltip
+##.social-top-barz
+##.social-top-btn
+##.social-top-icos
+##.social-track
+##.social-utilities
+##.social-utility
+##.social-utils-top
+##.social-vertical
+##.social-warfare-container
+##.social-widget
+##.social-widget-li
+##.social-widget-sidebar
+##.social-widget-td
+##.social-widgets
+##.social-widgets-large
+##.social-wrap-box
+##.social-wrap-outer
+##.social-wrp
+##.social.kiosk
+##.social.nav
+##.socialActions
+##.socialActionsBottom
+##.socialActionsTop
+##.socialB
+##.socialBadge
+##.socialBadges
+##.socialBanner
+##.socialBar
+##.socialBar-single
+##.socialBarForum
+##.socialBarHeader
+##.socialBarNews
+##.socialBarVert
+##.socialBottom
+##.socialBox
+##.socialBtn
+##.socialBtnLi
+##.socialBtnList
+##.socialBtns
+##.socialButton
+##.socialButtonArea
+##.socialButtonBig
+##.socialButtons
+##.socialButtonsContainer
+##.socialButtonsToggle
+##.socialButtonsWdg
+##.socialButtonv1
+##.socialButtonv2
+##.socialCTALink
+##.socialChannels
+##.socialCnt
+##.socialColumn
+##.socialConnect
+##.socialCont
+##.socialContacts
+##.socialContainer
+##.socialContainerDesktop
+##.socialContainerWrap
+##.socialCount
+##.socialCounter
+##.socialCounterFacebook
+##.socialDotCom-home
+##.socialEl
+##.socialFBContainer
+##.socialFacebook
+##.socialFeed
+##.socialFext
+##.socialFixOuter
+##.socialFixed
+##.socialFloat
+##.socialFloating
+##.socialFollow
+##.socialFooter
+##.socialFooterIcon
+##.socialFull
+##.socialGroup
+##.socialHPright
+##.socialHeader
+##.socialHolder
+##.socialHubIcon
+##.socialHubInnerDiv
+##.socialHubWrapper
+##.socialIconContainer
+##.socialIconImg
+##.socialIconList
+##.socialIconNew
+##.socialIconRibbon
+##.socialIconStripes
+##.socialIconWrapper
+##.socialIconsArticlesBottom
+##.socialIconsList
+##.socialIconsRect
+##.socialIconsWrapper
+##.socialIcons_link
+##.socialIn
+##.socialInfo
+##.socialInner
+##.socialIntro
+##.socialItem
+##.socialItems
+##.socialLabel
+##.socialLarge
+##.socialLikes
+##.socialLink
+##.socialLinkBar
+##.socialLinks
+##.socialLinks-alt
+##.socialLinks2
+##.socialLinksContainer
+##.socialLinksNew
+##.socialList
+##.socialList_postPage
+##.socialListings
+##.socialLks
+##.socialLnk
+##.socialLogo
+##.socialLogos
+##.socialM
+##.socialMedia
+##.socialMedia-google
+##.socialMedia-linkedin
+##.socialMediaArea
+##.socialMediaBlock
+##.socialMediaBox
+##.socialMediaButtonBar
+##.socialMediaButtons
+##.socialMediaButtonsBlock
+##.socialMediaContainer
+##.socialMediaFollowLinks
+##.socialMediaIcon
+##.socialMediaIconlg
+##.socialMediaIcons
+##.socialMediaIconsSection
+##.socialMediaLinkContainer
+##.socialMediaLinks
+##.socialMediaList
+##.socialMediaModule
+##.socialMediaOnHeader
+##.socialMediaRefer
+##.socialMediaShare
+##.socialMediaSidebar
+##.socialMediaToolbar
+##.socialMediaWraper
+##.socialMedias
+##.socialMegaBar
+##.socialMenu
+##.socialMiniBox
+##.socialMod
+##.socialNav
+##.socialNavButtons
+##.socialNetContainer
+##.socialNetIcons
+##.socialNetwork--shares
+##.socialNetwork-container
+##.socialNetworkBox
+##.socialNetworkButtons
+##.socialNetworking
+##.socialNetworks
+##.socialNew
+##.socialOptionsTop
+##.socialPageLinks
+##.socialPanel
+##.socialPart
+##.socialPinterest
+##.socialPlugins
+##.socialPopouts
+##.socialPopup
+##.socialPostBottomBar
+##.socialRight
+##.socialRightBlock
+##.socialRoll
+##.socialSection
+##.socialShare
+##.socialShare-block
+##.socialShare-btn
+##.socialShareBar
+##.socialShareButtons-container
+##.socialShareDM
+##.socialShareFB
+##.socialShareFooter
+##.socialShareGP
+##.socialShareHover
+##.socialShareINSTA
+##.socialShareIcon
+##.socialShareLinks
+##.socialShareScroll
+##.socialShareTW
+##.socialShareWrap
+##.socialShareYT
+##.socialSharing
+##.socialSharingBar
+##.socialSharingFtr
+##.socialSharingLargeButtons
+##.socialSharing__icons
+##.socialSideBar
+##.socialSidebar
+##.socialSingle
+##.socialSite
+##.socialSquare
+##.socialSticky
+##.socialStickyBanner
+##.socialStrip
+##.socialStyle1
+##.socialStyle2
+##.socialStyle3
+##.socialSub
+##.socialSubFooter
+##.socialTab
+##.socialTestata
+##.socialTile
+##.socialTiles
+##.socialToggle
+##.socialToolBar
+##.socialToolbar
+##.socialTools
+##.socialTop
+##.socialTwitter
+##.socialUrl
+##.socialUtils-bottom
+##.socialV2
+##.socialVideodetay
+##.socialVisible
+##.socialWidget
+##.socialWidgetBottomBox
+##.socialWidgets-horizontalBar
+##.socialWrap
+##.socialWrapper
+##.social_300w
+##.social_Gplus
+##.social_Tab
+##.social__addthis
+##.social__badge
+##.social__bar
+##.social__button-container
+##.social__container
+##.social__expand
+##.social__facebook
+##.social__facebook_wrap
+##.social__fb
+##.social__fb_share_btn
+##.social__follow
+##.social__icon
+##.social__icons
+##.social__item
+##.social__link
+##.social__list
+##.social__network
+##.social__row
+##.social__share
+##.social__tw
+##.social__twitter
+##.social__wrap
+##.social__you
+##.social__youtube
+##.social_accounts
+##.social_actions
+##.social_actions01_cont
+##.social_area
+##.social_b
+##.social_badges_above
+##.social_bar
+##.social_bar_menu
+##.social_bar_sites
+##.social_bind
+##.social_blk
+##.social_block--article
+##.social_block--overlay
+##.social_block_content
+##.social_bookmark
+##.social_bookmarking_module
+##.social_bookmarks
+##.social_bookmarks_title
+##.social_bot
+##.social_bottom
+##.social_box_count
+##.social_boxes
+##.social_btm
+##.social_btn_single
+##.social_but
+##.social_buttons_bar
+##.social_buttons_new
+##.social_buttons_top
+##.social_buttons_top_nav
+##.social_butts
+##.social_callouts
+##.social_collumn_container
+##.social_containerx
+##.social_count
+##.social_counter-left
+##.social_counts
+##.social_data
+##.social_di
+##.social_digg
+##.social_div
+##.social_fb_like
+##.social_fix
+##.social_float_panel
+##.social_flyout
+##.social_follow
+##.social_follow_icons_bottom
+##.social_follow_main
+##.social_follow_us
+##.social_foot
+##.social_footer
+##.social_form_holder
+##.social_gg
+##.social_global
+##.social_h_nets
+##.social_header
+##.social_header_icons
+##.social_i_30x30
+##.social_ico
+##.social_ico_box
+##.social_icon_ms
+##.social_icon_set
+##.social_icons_wrap
+##.social_imageover
+##.social_images
+##.social_img
+##.social_ioc
+##.social_island
+##.social_item
+##.social_layer
+##.social_like
+##.social_link
+##.social_link_logo
+##.social_link_mobile
+##.social_link_wrapper
+##.social_linkedin
+##.social_links
+##.social_links_con
+##.social_links_container
+##.social_links_footer
+##.social_links_sticky
+##.social_links_top
+##.social_links_wrapper
+##.social_linksnewspaper
+##.social_list
+##.social_list_of_icons1
+##.social_logos
+##.social_m
+##.social_m_a
+##.social_media_buttons_frontend
+##.social_media_container
+##.social_media_header
+##.social_media_icon
+##.social_media_links
+##.social_media_list
+##.social_media_section
+##.social_media_share
+##.social_media_ul_li_a
+##.social_menu_icon
+##.social_menu_network
+##.social_mob
+##.social_mobile
+##.social_network_links
+##.social_ntw
+##.social_options
+##.social_page_boxes
+##.social_pages
+##.social_popup
+##.social_post
+##.social_round
+##.social_row
+##.social_rufilm
+##.social_sec
+##.social_section
+##.social_share-hover
+##.social_share_actions
+##.social_share_bar
+##.social_share_blk
+##.social_share_box
+##.social_share_box_wrapper
+##.social_share_btn
+##.social_share_button_wrapper
+##.social_share_buttonbar
+##.social_share_buttons
+##.social_share_cb
+##.social_share_container
+##.social_share_counter
+##.social_share_fb
+##.social_share_h
+##.social_share_left
+##.social_share_list_holder
+##.social_share_privacy
+##.social_share_privacy_area
+##.social_share_table
+##.social_share_tw
+##.social_share_wrapper
+##.social_sharer
+##.social_shares
+##.social_sharing
+##.social_sharing_module
+##.social_sharing_panel
+##.social_sidebar
+##.social_single
+##.social_slide_in
+##.social_sm
+##.social_static_bar
+##.social_sticky
+##.social_stily_interne
+##.social_subscribe
+##.social_tabs
+##.social_toolbar
+##.social_tools
+##.social_top
+##.social_tout
+##.social_tumblr
+##.social_tw
+##.social_twit
+##.social_txt1
+##.social_vert
+##.social_vk
+##.social_w_box
+##.social_widget
+##.social_widget_container
+##.social_widget_item
+##.social_widget_table
+##.social_widgets
+##.social_wrap_inner
+##.social_wrapper
+##.social_wrapper2
+##.social_youtube
+##.socialaccounts
+##.socialakamai
+##.socialarea
+##.socialb
+##.socialb_tg
+##.socialbadge
+##.socialbar-mobile
+##.socialbar-sidebar
+##.socialbar-sidebar-item
+##.socialbar-wrap-bottom
+##.socialbarwrapper
+##.socialbkmark
+##.socialblock_top_border
+##.socialbot
+##.socialbox-style-classic
+##.socialbox-widget
+##.socialbox2
+##.socialboxp
+##.socialboxsingle
+##.socialbtns
+##.socialbutton
+##.socialbutton--facebook
+##.socialbutton--twitter
+##.socialbuttons
+##.socialbx
+##.socialchrome-grid
+##.socialcomman
+##.socialconnectbutton
+##.socialcont
+##.socialcontainer
+##.socialcount
+##.socialcountb
+##.socialdefault
+##.socialdigg
+##.socialdiv
+##.sociale_media:not(html):not(body)
+##.socialem
+##.socialfancysliderCenterInner
+##.socialfancysliderCenterOuter
+##.socialfancysliderFixed
+##.socialfancysliderForm
+##.socialfancysliderHead
+##.socialfancysliderRight
+##.socialfancysliderWrap
+##.socialfbinsta
+##.socialfollow
+##.socialfollowercounter
+##.socialfooter
+##.socialfooter--fb
+##.socialfooter_links
+##.socialh
+##.socialheader
+##.socialicns
+##.socialicon
+##.socialiconheader
+##.socialicons
+##.socialicons-header
+##.socialicontd
+##.socialicr
+##.socialimglink
+##.socialink
+##.socialinks
+##.socialite-instance
+##.socialite-widget
+##.socialite-widget-item
+##.socialitehover
+##.socialization_content
+##.socialize-containter
+##.socialize-icon--facebook
+##.socialize-icon--linkedin
+##.socialize-icon--twitter
+##.socialize-like
+##.socialize-link
+##.socialize-top
+##.socializeIt
+##.socializer
+##.socializer-share-bar
+##.sociall_container
+##.sociallinks
+##.sociallinksadd
+##.sociallist
+##.socially-btn
+##.socialmain
+##.socialmedia--ArticleFacebook
+##.socialmedia--ArticleTwitter
+##.socialmedia-article
+##.socialmedia-buttons
+##.socialmedia-container
+##.socialmedia-footer
+##.socialmedia-menu
+##.socialmedia-side
+##.socialmediaDetails
+##.socialmedia_article_linkbox
+##.socialmedia_float
+##.socialmedia_link
+##.socialmedia_toolbox
+##.socialmediaarea
+##.socialmediabanner
+##.socialmediabar
+##.socialmediabottom
+##.socialmediabox
+##.socialmediabox_heading
+##.socialmediafollow
+##.socialmediaicons
+##.socialmedialinks
+##.socialmenu
+##.socialmobile
+##.socialn2_links
+##.socialn_links
+##.socialnav
+##.socialnav-item
+##.socialnavbar
+##.socialnetworkbox
+##.socialno
+##.socialnonsense-wide-articles
+##.socialplugin
+##.socialplugins
+##.socialpop-container
+##.socialpopdust
+##.socialright
+##.socials-bar
+##.socials-block
+##.socials-box
+##.socials-btns
+##.socials-con
+##.socials-container
+##.socials-footer
+##.socials-icons
+##.socials-items
+##.socials-label
+##.socials-list
+##.socials-menu
+##.socials-round
+##.socials-share
+##.socials-text
+##.socials-widget
+##.socials-wrap
+##.socials__buttons
+##.socials_box
+##.socials_buttons
+##.socials_content
+##.socials_white
+##.socials_widget
+##.socialsbigicons
+##.socialsbox
+##.socialscroll
+##.socialshare
+##.socialshare--floating
+##.socialshare-icons2
+##.socialshare-wrapper
+##.socialshare2
+##.socialshare_inside
+##.socialsharebtm
+##.socialsharep
+##.socialsharer
+##.socialshares
+##.socialsharetop
+##.socialsharex
+##.socialsharing
+##.socialside
+##.socialsidebar
+##.socialsidehed
+##.socialsider
+##.socialsnap-social-followers-widget
+##.socialstrip
+##.socialstuff
+##.socialszwei
+##.socialtab
+##.socialtab_container
+##.socialtags
+##.socialtools
+##.socialtoolstext
+##.socialtopb
+##.socialts
+##.socialwidget
+##.socialwrap
+##.sociaux
+##.sociaux_suivre
+##.socicn
+##.socicon
+##.socicon-facebook
+##.socicon-googleplus
+##.socicon-instagram
+##.socicon-linkedin
+##.socicon-twitter
+##.socicon-youtube
+##.socila-icons
+##.socio
+##.sociotags
+##.socmark_container
+##.socmed2
+##.socmedIcons
+##.socmedgoogle
+##.socmedia
+##.socmedia-logo
+##.socmedicons
+##.socnav
+##.socnet_left_float
+##.socnet_shares_cont
+##.socshare
+##.sofacebook
+##.sogoogle
+##.solid-social-icons
+##.some-icon-share
+##.song-social
+##.song_header-share_buttons
+##.sopinterest
+##.sosialShareContainer
+##.sosial_links
+##.sosiallar
+##.sosmedshare
+##.sosyalAglar
+##.sotwitter
+##.sow-social-media-button
+##.spIconLinkTwitter
+##.sp_facebook
+##.sp_google
+##.sp_social
+##.sp_social_share
+##.sp_twitter
+##.sparkling-social
+##.spcv_message-share-link
+##.spe-share-wrap
+##.spine-social-channels
+##.sppre_message-share
+##.sppre_message-share-button
+##.sprfacebook
+##.sprite-facebook
+##.sprite-facebook15x15
+##.sprite-facebook25x25
+##.sprite-fb
+##.sprite-google-plus25x25
+##.sprite-icon-fb
+##.sprite-icon-gp
+##.sprite-icon-tw
+##.sprite-icon-yt
+##.sprite-pinterest_16
+##.sprite-product-sharing
+##.sprite-share-facebook
+##.sprite-share-fb
+##.sprite-share-googleplus
+##.sprite-share-pinterest
+##.sprite-share-twitter
+##.sprite-social
+##.sprite-social-facebook
+##.sprite-social-google
+##.sprite-social-instagram
+##.sprite-social-pinterest
+##.sprite-social-twitter
+##.sprite-social-youtube
+##.sprite-twitter
+##.sprite-twitter25x25
+##.sprite-twitter_16
+##.sprite-youtube
+##.sprite_condividi_facebook_button
+##.sprite_condividi_twitter_button
+##.sprite_facebook
+##.sprite_google
+##.sprite_pinterest
+##.sprite_social
+##.sprite_social_media
+##.sprite_twitter
+##.sprite_youtube
+##.sprites-facebook
+##.sprites-linkedin
+##.sprites-twitter
+##.sprlinkedin
+##.sprtelegram
+##.sprtwitter
+##.sprwhatsapp
+##.sqs-block-socialaccountlinks-v2
+##.sqs-slice-social-icons
+##.sqs-svg-icon--list
+##.square-social
+##.squareShareButtons
+##.srg-share-icon
+##.srg-share-icon-container
+##.ss-facebook
+##.ss-follow-network
+##.ss-follow-total-counter
+##.ss-ic
+##.ss-inline-share-content
+##.ss-instagram
+##.ss-share
+##.ss-share-network-content
+##.ss-sharing-container
+##.ss-shr
+##.ss-social-button-wrapper
+##.ss-social-circle
+##.ss-social-icons-container
+##.ss-social-regular
+##.ss-social-share-label
+##.ss-total-shares
+##.ss-twitter
+##.ss-whatsapp
+##.ss_sharebar
+##.ss_social
+##.ssb-share
+##.ssb_followers
+##.ssba-share-text
+##.ssba_diggit_share
+##.ssba_email_share
+##.ssba_facebook_share
+##.ssba_pinterest_share
+##.ssba_reddit_share
+##.ssba_share_link
+##.ssba_sharecount
+##.ssba_twitter_share
+##.ssbas-wrap
+##.ssbp-container
+##.sscb-facebook
+##.sscb-googleplus
+##.sscb-pinterest
+##.sscb-twitter
+##.sshare-facebook
+##.sshare-google
+##.sshare-linkedin
+##.sshare-twitter
+##.sshare_buttons
+##.ssharec
+##.ssk-facebook
+##.ssk-google-plus
+##.ssk-linkedin
+##.ssk-pinterest
+##.ssk-sharethis
+##.ssk-twitter
+##.ssk-vk
+##.ssochial
+##.ssocial
+##.sss_shares_block
+##.sst-social-share
+##.ssto-share-buttons
+##.st-custom-button
+##.st-social-block
+##.st-social-share-buttons
+##.st-social__share
+##.st-socialnetwork
+##.st-topbar-social
+##.st_digg_custom
+##.st_email_custom
+##.st_facebook_custom
+##.st_facebook_hcount
+##.st_facebook_large
+##.st_facebook_vcount
+##.st_googleplus_custom
+##.st_googleplus_large
+##.st_googleplus_vcount
+##.st_linkedin_custom
+##.st_linkedin_large
+##.st_pinterest_custom
+##.st_pinterest_large
+##.st_pinterest_vcount
+##.st_reddit_custom
+##.st_sharebar_new
+##.st_sharethis
+##.st_sharethis_custom
+##.st_sharethis_large
+##.st_story_topshare
+##.st_tumblr_large
+##.st_twitter_custom
+##.st_twitter_hcount
+##.st_twitter_large
+##.st_twitter_vcount
+##.stack-list-share
+##.stack-share-bar
+##.stacked-social-buttons
+##.stacker-shares
+##.standard-social-buttons
+##.standard-social-icons
+##.standingShareBar
+##.start-social-fb2
+##.start-social-twitter2
+##.static-social
+##.static-social-bar
+##.std-social
+##.sti-share-box
+##.stick-share
+##.stick_social
+##.sticky-likebox
+##.sticky-share
+##.sticky-share-bar
+##.sticky-share-bar__icon
+##.sticky-shares-wrap
+##.sticky-side-share
+##.sticky-social
+##.sticky-social-block-social
+##.sticky-social-buttons
+##.sticky-social-group
+##.sticky-social-icons-lg
+##.sticky-social-inside
+##.sticky-social-share
+##.sticky-wrapper--likegate
+##.stickyNav-social
+##.stickyVerticalSocialContainer
+##.sticky_footer_social_facebook
+##.sticky_footer_social_google
+##.sticky_sharing
+##.sticky_social
+##.sticky_socialbar
+##.stickyshare
+##.stickysocial
+##.stm-gallery-action-unit[title="Share"]
+##.stm-share
+##.stm-shareble
+##.stm-socials
+##.stm-socials__icon
+##.storifycon-share
+##.story-action-share
+##.story-article__body__left__social-share
+##.story-button-share
+##.story-col-share
+##.story-footer-social
+##.story-header__social
+##.story-kapitel-socials
+##.story-leaf-social-btns
+##.story-meta-footer-sharetools
+##.story-rail-twitter
+##.story-share
+##.story-share--end
+##.story-share-btns
+##.story-share-buttons
+##.story-share-container
+##.story-share-tools
+##.story-social
+##.story-social-bar
+##.story-social-media
+##.story-social-share
+##.story-social-share-fix
+##.story-social-widget
+##.story-tool-share
+##.story-tools-social
+##.story-top-social
+##.story__share
+##.story__social
+##.story_allsocial
+##.story_share
+##.story_share_blk
+##.story_share_text
+##.story_social_share
+##.story_tools_social_buttons_top
+##.storypage-share
+##.storyshare
+##.storysharebottom
+##.storysocial
+##.str-social-sidebar
+##.strapline__social
+##.stream-social-cta
+##.stripe-social
+##.stripped-down-sharebar
+##.strx-simple-sharing-sidebar-buttons
+##.stt-share
+##.stuff-social
+##.stwitter
+##.su-social-media-container
+##.sub-bar-social
+##.sub-page-feature-social-icons
+##.subHeaderSocial
+##.subNavSocial
+##.subShare
+##.sub_fb
+##.sub_gplus
+##.sub_jeu_social_facebook
+##.sub_jeu_social_twitter
+##.sub_sns
+##.sub_socialMedia
+##.sub_twitter
+##.subfooter-social
+##.submeta__share
+##.subnav-right__social
+##.subnav-share-news-alert
+##.subnav-share-news-alert__link
+##.subpost_share
+##.subscribe-follow
+##.subscribe-option-facebook
+##.subscribe-option-twitter
+##.subscribeSocialTool
+##.subscribe__follow
+##.subscribe__social-container
+##.subscribe_ad
+##.subscribe_block
+##.subscribe_facebook
+##.subscribe_fb
+##.subscribe_followistic
+##.subscribe_gp
+##.subscribe_icons
+##.subscribe_tw
+##.subscribe_twitter
+##.subsubmenu__share
+##.sucuri_social_icons_widget
+##.sumome-image-sharer
+##.sumome-share-client-wrapper
+##.superads-social-icons
+##.sv-social
+##.svg-facebook
+##.svg-googleplus
+##.svg-icon-facebook
+##.svg-icon-instagram
+##.svg-icon-twitter
+##.svg-instagram
+##.svg-shareicon
+##.svg-social
+##.svg-twitter
+##.svgIcon--facebookFilled
+##.svgIcon--twitterFilled
+##.svp-share
+##.swf-sn-share-link
+##.swf-social-site
+##.switchShare
+##.swp-hover-pin-button
+##.swp_social_panel
+##.syn-sharelist
+##.synved-social-button
+##.szoSocialMediaShare
+##.t-a-info-share
+##.t-a-share-1
+##.t-abc-footer-share
+##.t-af-share-1
+##.t-af-share-2
+##.t-article-container_footer_share
+##.t-article-funcs-share-2
+##.t-article-media-share-toggle
+##.t-article-share-btn-1
+##.t-content__shares
+##.t-said-share
+##.t-share-more
+##.t-share-twitter
+##.t-site-share-1
+##.t-social-buttons
+##.t1__toolsbar__share__container
+##.tShare
+##.t_social
+##.t_twitter
+##.ta_followWidget
+##.tab-shareLinkButtons
+##.tab_social
+##.tafSocialButton
+##.tag-line-social
+##.tags-share
+##.tags-share-box
+##.talk-sharing__facebook
+##.talk-sharing__other
+##.talk-sharing__twitter
+##.talksShareSpan
+##.tasti-social-top
+##.tb-social-buttons
+##.tbr-social
+##.tbt_social
+##.tc-sharing-controls
+##.tcArticleSocialShare
+##.tc_socialbuttons
+##.tcsn_widget_social_network
+##.td-float-sharing
+##.td-header-social
+##.td-icon-facebook
+##.td-icon-googleplus
+##.td-icon-instagram
+##.td-icon-twitter
+##.td-icon-youtube
+##.td-post-sharing
+##.td-post-sharing-bottom
+##.td-post-sharing-style1
+##.td-post-sharing-top
+##.td-share
+##.td-social-icon-wrap
+##.td-social-list
+##.td-social-sharing
+##.td-social-sharing-button
+##.td-social-wrap
+##.td_block_social_counter
+##.td_shareus
+##.td_social_counter
+##.td_social_type
+##.tdb_single_post_share
+##.tdm-social-item-wrap
+##.tdm-social-wrapper
+##.tdm_block_socials
+##.tdr-footer__block-social
+##.tds-social1
+##.teaser-social-share
+##.teaser_social_block_trigger
+##.teasershare
+##.tech-social
+##.tecnavia_img_share_icon
+##.ted-share-buttons
+##.telegram-share
+##.telegram-share-button
+##.telegram_link
+##.tempShareToolsHolder
+##.text-m-join-us-on-facebook
+##.text_list_inline
+##.tf-share
+##.tg-followus
+##.tg-socialicons
+##.tg-tlc-storymeta_sharing-wrapper
+##.tg-tweet-this
+##.tgc-footer_social
+##.tgc-magazine-branding-banner_social
+##.tge-sharing-buttons
+##.tgla7-share
+##.th-sharecounts
+##.tha__socialItem
+##.thb-social-links-container
+##.thb-social-top
+##.the-social-links
+##.theChampSharing
+##.the_champ_sharing_container
+##.the_champ_sharing_ul
+##.theme-icon-facebook
+##.theme-icon-pinterest
+##.theme-icon-twitter
+##.theme-socialmedia
+##.theshare
+##.thesocialbar
+##.thesocialbarform
+##.thesocialbartext
+##.thim-author-social
+##.thirdShareBox
+##.thr-social-share
+##.thread-share
+##.thread-share-bar
+##.thread-share-bar-buttons
+##.thread-share__button
+##.thread-submission-socialSharing
+##.thrv_tw_qs
+##.ticker-tweet
+##.tile_facebook
+##.tile_pinterest
+##.tile_twitter
+##.tipsy-social-icon-container
+##.titleSocial
+##.titre-widget.facebook
+##.titre-widget.twitter
+##.tk-footer-social-icons
+##.tl_share_button
+##.tlc-slide-facebook
+##.tlc-slide-tweet
+##.tm-follow-link
+##.tm-follow-link-site
+##.tm-footer-social
+##.tm-sb-socials
+##.tm-sb-text
+##.tm-share-this
+##.tm-social
+##.tm-social-facebook
+##.tm-social-icon-buttons
+##.tm-social-icons
+##.tm-social-instagram
+##.tm-social-link
+##.tm-social-networks
+##.tm-social-pinterest
+##.tm-social-twitter
+##.tm-social-youtube
+##.tm-socialicons
+##.tmblr-iframe--follow-teaser
+##.tmg-amp-social-share
+##.tmg-amp-social-share-fb
+##.tmg-amp-social-share-twitter
+##.tmo-share
+##.tn-single-share-wrap
+##.tn-social-bar-wrap
+##.tn-topbar-social-wrap
+##.to-social-follow
+##.to4-social
+##.tochka-share
+##.toggle-share-options
+##.toggleSocialBox
+##.tool-share
+##.toolbar-facebook
+##.toolbar-linkedin
+##.toolbar-share
+##.toolbar-sharing
+##.toolbar-twitter
+##.toolbar_button_list_social
+##.toolbox-share
+##.toolkit-social-share
+##.tools-share
+##.toolsShare
+##.tools__share--button
+##.toolsbar-share
+##.toolssocial
+##.tooltip-news-share-box
+##.tooltip_facebook
+##.tooltip_google
+##.tooltip_twitter
+##.top-article-social
+##.top-bar__social
+##.top-nav-facebook
+##.top-nav-social
+##.top-nav-twitter
+##.top-nav__social
+##.top-share
+##.top-share-area
+##.top-share-block
+##.top-share-post
+##.top-sharebar
+##.top-sharing
+##.top-social
+##.top-social-icon
+##.top-social-icons
+##.top-social-item
+##.top-social-links
+##.top-social-share
+##.top-socialbar
+##.top-socials
+##.top-subscribe-facebook
+##.top-subscribe-instagram
+##.top-subscribe-pinterest
+##.top-subscribe-twitter
+##.topMenu__toolbar__social
+##.topShareBtns
+##.topSliceShare
+##.topSocial
+##.top__facebook
+##.top__instagram
+##.top__pinterest
+##.top__social
+##.top__twitter
+##.top_follow_us
+##.top_nav__social_icons
+##.top_news_social
+##.top_share
+##.top_share_link
+##.top_sharedlinks
+##.top_socail
+##.top_social
+##.top_social_icons
+##.top_social_networks
+##.top_social_views_wrap
+##.topbar-facebook
+##.topbar-social
+##.topbar-socials
+##.topbar-twitter
+##.topbar-youtube
+##.topbar__social-media
+##.tophead__share
+##.topic-share
+##.topic-social__caption
+##.topic-social__list
+##.topic_socials
+##.topline-social
+##.topmenu_facebook
+##.topmenu_twitter
+##.topmenu_youtube
+##.topmenusocial
+##.topshare
+##.topshareItem
+##.topshareLink
+##.topsocial
+##.topsocialicn
+##.toptwitterarticle
+##.total-share-count-container
+##.total-shares
+##.totalShares
+##.total_share
+##.tp-shares
+##.tp-shares__box
+##.tpShare
+##.tpcrn-shr-post
+##.tpd-social-links
+##.track-action-Facebook
+##.track-action-LinkedIn
+##.track-action-Twitter
+##.tracking_article_social
+##.transparencySocialMediaContainer
+##.trb_masthead_fb
+##.trb_sc
+##.trb_sharelines
+##.trb_socialize
+##.trd-nav-social-container
+##.trending-bar__social-link
+##.trending_head_share
+##.trigger-share-list
+##.triggerShare
+##.triggerSocialBottom
+##.tronSocialShareIcon
+##.tronWhatsappIcon
+##.trtFbShare
+##.tru_facebook
+##.tru_pinterest
+##.tru_twitter
+##.tru_youtube
+##.ts-facebook_like
+##.ts-share-bar
+##.ts-socials
+##.tsocial
+##.tsso_likeshare_box
+##.tt-share
+##.tt-social-media-footer
+##.tumblr-footer-share
+##.tumblr-icon
+##.tumblr-link
+##.tumblr-post-share
+##.tumblr-share
+##.tumblrlink
+##.tunein_widget
+##.tve__info__share
+##.tve_social_items
+##.tw-leaf-info-share-fb
+##.tw-leaf-info-share-tw
+##.tw-share
+##.tw-share-new
+##.twd-footer-social-stripe
+##.tweet-article
+##.tweet-btn
+##.tweet-btn-container
+##.tweet-follow
+##.tweet-link-button
+##.tweet-results
+##.tweet-string
+##.tweet-this
+##.tweetThis
+##.tweet_btn
+##.tweet_button
+##.tweet_container
+##.tweet_meme
+##.tweet_this
+##.tweetbox
+##.tweetbtn
+##.tweeter
+##.tweeter_follower
+##.tweeti
+##.tweetmeme
+##.tweetmeme-sharer
+##.tweetmeme_div
+##.tweets-box
+##.tweets_footer
+##.twite__share-button
+##.twiter-share
+##.twiticon
+##.twitshare
+##.twitter-24x24
+##.twitter-announcement-content
+##.twitter-banner
+##.twitter-bg
+##.twitter-bgrnd
+##.twitter-btn
+##.twitter-btn-icon
+##.twitter-bubble
+##.twitter-content-wrapper
+##.twitter-count-single
+##.twitter-custom
+##.twitter-div
+##.twitter-feed
+##.twitter-feed-wrapper
+##.twitter-follow
+##.twitter-follow-box
+##.twitter-follow-promotion
+##.twitter-follow-us
+##.twitter-followers
+##.twitter-footer
+##.twitter-footer-share
+##.twitter-ft
+##.twitter-google-follow-box
+##.twitter-grid-widget
+##.twitter-hashtag
+##.twitter-hd
+##.twitter-hover
+##.twitter-hover-horizontal
+##.twitter-inner
+##.twitter-join-widget
+##.twitter-link
+##.twitter-link-button
+##.twitter-module
+##.twitter-overlay-container
+##.twitter-plain-control
+##.twitter-popup
+##.twitter-post-share
+##.twitter-promo
+##.twitter-section
+##.twitter-share
+##.twitter-share-btn
+##.twitter-share-button
+##.twitter-share-container
+##.twitter-shareButton
+##.twitter-shares
+##.twitter-sharetool
+##.twitter-sharing
+##.twitter-sidebar-button
+##.twitter-social
+##.twitter-solid-control
+##.twitter-square
+##.twitter-thirst
+##.twitter-ticker-widget
+##.twitter-timeline
+##.twitter-timeline-rendered
+##.twitter-tweet-button
+##.twitter-tweet-button-single
+##.twitter-w
+##.twitter-widgets
+##.twitter-wrap
+##.twitter-wrapper
+##.twitterBTN
+##.twitterBadge
+##.twitterBarForSb
+##.twitterBloc_png
+##.twitterBlock
+##.twitterBox
+##.twitterBoxMainPage
+##.twitterButtonDiv
+##.twitterConnect
+##.twitterCountDiv
+##.twitterFeed
+##.twitterFeedReader
+##.twitterFeeds
+##.twitterFeedsMR
+##.twitterFollow
+##.twitterIcon
+##.twitterIcon__link
+##.twitterImage
+##.twitterItem
+##.twitterLink
+##.twitterPanel
+##.twitterShare
+##.twitterShareAlert
+##.twitterShareButton
+##.twitterShareContainer
+##.twitterShareIcon
+##.twitterShareToolsContainer
+##.twitterShareTrigger
+##.twitterSocialIcon
+##.twitterSs
+##.twitterTweet__button
+##.twitterWidget
+##.twitterWidgetWrapper
+##.twitterWidgetry
+##.twitterWrapper
+##.twitter_activity
+##.twitter_ad
+##.twitter_badge
+##.twitter_btn
+##.twitter_bttn
+##.twitter_div
+##.twitter_feed
+##.twitter_feed_wrap
+##.twitter_follow
+##.twitter_follow_button
+##.twitter_followers
+##.twitter_footer
+##.twitter_icn
+##.twitter_icon
+##.twitter_icon_shared
+##.twitter_link
+##.twitter_mob2
+##.twitter_mobile
+##.twitter_share_button
+##.twitter_share_count
+##.twitter_sm
+##.twitter_social
+##.twitter_sub
+##.twitter_tease
+##.twitter_tile
+##.twitter_tweet_group_page
+##.twitter_widget
+##.twitterbird
+##.twitterbox
+##.twitterboxot
+##.twitterbtn
+##.twitterbutton
+##.twittercommon
+##.twitterfeed
+##.twitterfollow
+##.twitterfollowme
+##.twitterjo
+##.twitterlink
+##.twitterpage
+##.twittershare
+##.twittertop
+##.twitterupdates
+##.twitterwall-icon
+##.twitterwidth
+##.twitterwrappes
+##.two-col-social
+##.twrshare-icon
+##.twshare
+##.twshare_gm_p
+##.twt-btn
+##.twt-icon
+##.twt_btn
+##.twt_social
+##.twtr
+##.twtr-follow
+##.twtr-ftr
+##.twtr-link
+##.twtr-widget
+##.twtr_plug
+##.twttr-widget-wrap
+##.tx-rb-socialmediaicons
+##.tx-timtabsociable-pi1
+##.ty-social-link
+##.ty-social-link-block
+##.typcn-social-twitter
+##.tz-share-link
+##.tz_tweet_widget
+##.u-btni-share
+##.u-side-col--mailmagazine-share
+##.u-side-col--share--body
+##.u-socialWrapper
+##.ubshare
+##.ucf-social-links
+##.uhf-social-links
+##.ui-fixed-panel-share
+##.ui-fixed-panel-shares
+##.ui-follow-social
+##.ui-home-follow
+##.ui-icon-facebook
+##.ui-icon-gplus
+##.ui-icon-linkedin
+##.ui-icon-twitter
+##.ui-share-component
+##.ui-share-page
+##.ui-social
+##.ui-social-btn
+##.ui-social-buttons
+##.ui-social-fixed
+##.ui-social-med
+##.ui-social-share
+##.ui-social-sharing
+##.ui-social-wrapper
+##.ui-socialbar-image
+##.ui-socials
+##.uiButtonFacebook
+##.uiButtonGooglePlus
+##.uiButtonTwitter
+##.uix_socialMedia
+##.uix_socialMediaLinks
+##.uk-icon-facebook
+##.uk-icon-facebook-square
+##.uk-icon-google-plus
+##.uk-icon-instagram
+##.uk-icon-linkedin
+##.uk-icon-slideshare
+##.uk-icon-twitter
+##.uk-icon-twitter-square
+##.uk-icon-xing
+##.uk-icon-youtube
+##.uk-panel.menushare
+##.ukbf-social
+##.ul-social
+##.ulFooterSocial
+##.ulSocial
+##.ulSocialmedia
+##.ul_share
+##.ultimatesocial
+##.under-article-share
+##.under_social
+##.undocked-share
+##.uni-selection-sharer
+##.uni-social
+##.unikrn-social
+##.uninav-icon-fb
+##.uninav-icon-tw
+##.uninav-icon-yt
+##.unspoken-getconnected
+##.up-next--share
+##.uplayer-social-button-container
+##.upperpanel__social
+##.upsell-facebook
+##.uptl_container-share
+##.us-footer__social
+##.us_facebook
+##.us_facebook_fan_count_link
+##.us_fan_count_button
+##.us_googleplus
+##.us_linkedin
+##.us_pinterest
+##.us_posts_top
+##.us_reddit
+##.us_share
+##.us_share_buttons
+##.us_share_text
+##.us_twitter
+##.us_twitter_fan_count
+##.us_youtube_fan_count
+##.user-dashboard-share
+##.user-share
+##.user-share-button-wrapper
+##.user-share-settings
+##.user__socials-list
+##.user_activity_like_block
+##.usr-social
+##.ut2-social-link-block
+##.util-bar-btn-facebook
+##.util-bar-btn-share
+##.util-bar-btn-twitter
+##.util-bar-flyout-nav-share
+##.util-bar-module-firefly-visible
+##.util-bar-module-share
+##.utilities-fblike-twitter
+##.utility-share
+##.utility-social
+##.utils_social_tracking
+##.uvpjs__btn-share
+##.v-A_-footer__socialmedia
+##.v-follow-share
+##.v2Social_Shares
+##.v4_header-social
+##.vaShare
+##.vbseo_share
+##.vc-social-bar
+##.vc_box_social_bottom
+##.vc_box_social_colored
+##.vc_box_social_white
+##.vc_container_social
+##.vc_container_social_button
+##.vc_container_social_button_footer
+##.vc_generic_sharre
+##.vc_share_link_container
+##.vc_social_button
+##.vc_social_button_cont
+##.vc_social_buttons
+##.vc_social_fixed_footer
+##.vc_social_general_icons
+##.vc_social_icons
+##.vc_social_icons_btn
+##.vce-share-bar
+##.vce-share-items
+##.vce-social-profile-icon
+##.vce-social-profile-icons
+##.vcrSocial
+##.ve-player_share-links
+##.ve2_sharebox
+##.vert-social-sharing-bar
+##.vertical-share-widget
+##.vertical-sharing-block
+##.vertical-social
+##.vertical-social-icons
+##.vertical-social-links
+##.vf-share-bar
+##.vf-share-bar-vertical
+##.vf-share-button
+##.vf-share-icon
+##.vf-share-option
+##.vf-share-options
+##.vgc-social
+##.vhs-social
+##.vidSocialBar
+##.video--share
+##.video-page-social
+##.video-share
+##.video-share-b
+##.video-share-icons
+##.video-share-tools
+##.videoMetadata__social
+##.videoShare
+##.videoShareBox
+##.video_actions_share
+##.video_actions_sharebutton
+##.video_share
+##.video_share_item
+##.video_share_tools
+##.videofull__share
+##.view_share
+##.views-field-addtoany-share-2
+##.vjs-facebook
+##.vjs-icon-share
+##.vjs-share-block
+##.vjs-share-button
+##.vjs-share-control
+##.vjs-share-menu-button
+##.vjs-share2
+##.vjs-social-share
+##.vjs-twitter
+##.vjs-voc-social-share
+##.vk-share
+##.vk-side-widget
+##.vkontaktelink
+##.vlog-share-single
+##.vlog-social-icons
+##.vltSocialLinks
+##.voc-article-share-btn
+##.voc-article-share-wrapper
+##.voc-header-share-btn
+##.voc-share-fb
+##.voc-share-tw
+##.voc-social
+##.voc-social-share
+##.vocativ-social-sidebar
+##.vod_program_social
+##.vod_share
+##.vodl-region-article__social-share-bar
+##.voxde-social-share
+##.vp-share
+##.vpl_SharingBut
+##.vrg_container_social_box
+##.vrt-social-links
+##.vs-facebook
+##.vs-social
+##.vs-social-link
+##.vs-twitter
+##.vsac-social
+##.vshare
+##.vuukle-powerbar
+##.vuukle-powerbar-vertical
+##.w-button-social
+##.w-share
+##.w-shareontwitter
+##.w-sharing
+##.w-sharing-count
+##.w-sharing-icon
+##.w-sharing-item
+##.w-social
+##.w-socials
+##.w-socials-list
+##.w-tweet
+##.w2bslikebox
+##.w_social_link
+##.wa-share-btn-container
+##.walrus_social_buttons
+##.wb-share
+##.wbtz-share-btn
+##.wc_social_plugin_wrapper
+##.wc_ss_btns
+##.wccfSocial
+##.wcs-facebook
+##.wcs-google
+##.wcs-socialIconsWrapper
+##.wcs-twitter
+##.wcs-youtube
+##.wdb-social
+##.wdgt_sharelink
+##.wdrrShare
+##.wds-is-follow-us
+##.wds-tweet
+##.wds-tweet-container
+##.wds-tweet-data
+##.wdt_social_share
+##.web_widget_socialBar
+##.wf-social
+##.whatsapp-barra
+##.whatsapp-share
+##.whatsapp-share-btn
+##.whatsapp-share-button
+##.whatsapp-share-desktop
+##.whatsapp.icon
+##.whatsapp_banner
+##.whatsapp_share
+##.whoShare
+##.whtapp-web
+##.widget--twitter
+##.widget-ahsocial
+##.widget-altervista-social
+##.widget-article-follow
+##.widget-author__socials
+##.widget-cardoza-fb-like
+##.widget-easy-twitter-feed-widget-container
+##.widget-facebook-timeline
+##.widget-fb-recommendations
+##.widget-follow
+##.widget-follow-us
+##.widget-followus
+##.widget-header-social
+##.widget-live-tweets
+##.widget-share
+##.widget-share--rows
+##.widget-share__social
+##.widget-share__wrapper
+##.widget-sharebar-container
+##.widget-sharrre
+##.widget-sns-subscribe
+##.widget-social
+##.widget-social-counter
+##.widget-social-facebook
+##.widget-social-follower
+##.widget-social-icons
+##.widget-social-links
+##.widget-social-twitter
+##.widget-social_menu
+##.widget-tasti-social
+##.widget-twitter-timeline
+##.widgetFB
+##.widgetFollowUs
+##.widgetSocialFacebook
+##.widget_FacebookActivity
+##.widget_FacebookLikeBox
+##.widget_Twidget
+##.widget_a2a_follow_widget
+##.widget_add_to_any_subscribe_widget
+##.widget_alloy_social
+##.widget_anyusertwitterfeed
+##.widget_armonioso_social_icons
+##.widget_be_widget_social_follow
+##.widget_better-social-counter
+##.widget_bimber_widget_facebook_page
+##.widget_boombox_social
+##.widget_bs-likebox
+##.widget_cbs_follow_us_widget
+##.widget_cbs_social_share_widget
+##.widget_cf_social_media_widget
+##.widget_connect-social
+##.widget_connect_facebook
+##.widget_connect_instagram
+##.widget_connect_twitter
+##.widget_connect_youtube
+##.widget_custom-twitter-feeds-widget
+##.widget_do_shortcode_instagram_widget
+##.widget_dpsp_social_media_follow
+##.widget_easy_facebook_page_plugin
+##.widget_epcl_social
+##.widget_essbsocialfollowerscounterwidget
+##.widget_facebook-like-box
+##.widget_facebook_box
+##.widget_facebook_like_activity_widget
+##.widget_facebook_like_box
+##.widget_facebook_likebox
+##.widget_facebook_page_plugin_widget
+##.widget_facebook_widget
+##.widget_facebookactivityfeed
+##.widget_fans_widget
+##.widget_fb_like
+##.widget_fb_page
+##.widget_follow
+##.widget_follow_box
+##.widget_follow_button_widget
+##.widget_follow_cb_sidebar_widget
+##.widget_follow_us
+##.widget_g1_socials
+##.widget_getconnected
+##.widget_googleplus
+##.widget_heateor_sssp_follow
+##.widget_ione-facebook-activity
+##.widget_ione-facebook-like
+##.widget_ione-social_conversion
+##.widget_jnews_social
+##.widget_jnews_social_counter
+##.widget_latest_tweets_widget
+##.widget_likeBox
+##.widget_likebox
+##.widget_mhsidebarsocialwidget
+##.widget_mkd_social_icon_widget
+##.widget_mos_social
+##.widget_n2_social_contacts
+##.widget_novashare_follow_widget
+##.widget_nypost_social_widget
+##.widget_oauth_twitter_widget
+##.widget_omg_widgets_social_widget
+##.widget_pb_connect_box
+##.widget_postmedia_social_site_connect
+##.widget_prisna-social-counter
+##.widget_psmag_mailsocial_column_2
+##.widget_radium_social_fans
+##.widget_reallysimpletwitterwidget
+##.widget_redwaves_fbpage_widget
+##.widget_related_tweets
+##.widget_rotatingtweets_widget
+##.widget_round_social_media_buttons_widget
+##.widget_rt_social_media
+##.widget_siliconcounters
+##.widget_sn_social_boxes
+##.widget_social
+##.widget_social-feed
+##.widget_social-pane
+##.widget_social_contact_display
+##.widget_social_count
+##.widget_social_counter
+##.widget_social_follow
+##.widget_social_links
+##.widget_social_media
+##.widget_social_networks
+##.widget_social_profiles
+##.widget_social_sidebar
+##.widget_socialbox_widget_nw
+##.widget_socialcount_widget
+##.widget_socialcounter
+##.widget_socialcountplus
+##.widget_socialize
+##.widget_socialmenu
+##.widget_socialnetworklinks_widget
+##.widget_socials
+##.widget_socials_ignited
+##.widget_sow-social-media-buttons
+##.widget_strx-simple-sharing-sidebar-widget
+##.widget_subscribeHere
+##.widget_synved_social_follow
+##.widget_synved_social_share
+##.widget_tie-instagram-theme
+##.widget_tilt_social_widget
+##.widget_tj_twitter
+##.widget_trifacebookbox_widget
+##.widget_ts_widgets_social_icons
+##.widget_tweetblender
+##.widget_tweets
+##.widget_twitter
+##.widget_twitter_duas_colunas
+##.widget_twitter_enhanced
+##.widget_twitter_latest
+##.widget_twitter_timeline
+##.widget_twitter_widget
+##.widget_twitterfeed
+##.widget_twittertimeline
+##.widget_twitterupdate
+##.widget_ultimatesocialdeuxfancount_widget
+##.widget_ultimatumsocial
+##.widget_vania_fblike
+##.widget_vb_google_plus
+##.widget_vb_search_social_tips
+##.widget_vw_widget_social_counter
+##.widget_vw_widget_social_subscription
+##.widget_wc_shortcodes_social_icons
+##.widget_weblizar_twitter
+##.widget_woo_twitter
+##.widget_woodojo_tweets
+##.widget_wpcom_social_media_icons_widget
+##.widget_wpdev_social_follow_widget
+##.widget_wpgrade_social_links
+##.widget_wpgrade_twitter_widget
+##.widget_wpshower_follow_us
+##.widget_wptelegram_widget_widget
+##.widget_youtube_subscribe
+##.widgetfacebook
+##.widgetsocial
+##.widgettwitter
+##.win-subscribe-popup-box
+##.wishlists-success-social-wrap
+##.wk-twitter
+##.wl-ico-facebook
+##.wl-ico-pinterest
+##.wl-ico-twitter
+##.wl-share-buttons
+##.wl-socialcount-shortcode
+##.wlistingsinglesocialmedia
+##.wm-social-profiles
+##.wn-share-button
+##.wotr_article_share
+##.wowbook-control-share
+##.wp-block-algori-social-share-buttons-block-algori-social-share-buttons
+##.wp-block-social-links
+##.wp-embed-gallery-desc-share
+##.wp-embed-share
+##.wp-flybox_tab
+##.wp-graphics-social-tools
+##.wp-post-share
+##.wp-post-share2
+##.wp-share
+##.wp-share-button
+##.wp-social-icons
+##.wp_followme_c2
+##.wp_social_bookmarking_light
+##.wp_social_single_share_wrapper
+##.wpa-social-icons
+##.wpautbox-socials
+##.wpbfsb-schema-org
+##.wpcw-widget-social
+##.wpdev-bottom-single-social
+##.wpdev-desktop-social
+##.wpdev-social-btn
+##.wpdev-social-fb
+##.wpdev-social-gp
+##.wpdev-social-tw
+##.wpdev-top-share
+##.wpdev-twitter
+##.wpex-social-share
+##.wpex-social-share-wrap
+##.wplogout-float-social-wrapper
+##.wplogout-social-wrapper
+##.wps-seo-booster-social-buttons
+##.wpsc-share
+##.wpsocial-shareBox
+##.wpsocials
+##.wpsr-floatbar-movable
+##.wpsr-floatbar-white
+##.wpusb-btn
+##.wpusb-square-plus
+##.wpzoom-facebook-3
+##.wrap-social
+##.wrapPin > .pin
+##.wrapSocialHead
+##.wrap__sns
+##.wrapp-soc-icons
+##.wrapper-fixed-social-buttons
+##.wrapper-share
+##.wrapper-share-social
+##.wrapper-social-share-bar
+##.wrapper-sticky-gigya
+##.wrapper-sticky-social
+##.wrapperSocial
+##.wrapper_fb_like
+##.wrapper_fb_share
+##.wrapper_share_home
+##.wrapper_social
+##.wri-share
+##.ws-c-social-slice__icons
+##.wsapp
+##.wsite-social
+##.wsite-social-item
+##.wsj-amp-share
+##.wtv-social-hidden
+##.wtv-social-share
+##.wwn-share-top-wrapper
+##.www-m-social-buttons
+##.wx-fb-activity
+##.wx-local-tweets-hdr
+##.wx-overview-twitter-module-wrap
+##.wx-social-share-ls-wrapper
+##.wx-social-share-story-facebook
+##.wx-social-share-story-gplus
+##.wx-social-share-story-pinterest
+##.wx-social-share-story-twitter
+##.wx-social-share-story-wrapper
+##.wysiwygContent-social
+##.wz-footer-sidebar__social
+##.x-entry-share
+##.x-facebook
+##.x-item-share-wrapper
+##.x-social-facebook
+##.x-social-global
+##.x-social-item
+##.x-social-twitter
+##.x-social-youtube
+##.x-tmblr
+##.xenfocus-social
+##.xplayer-share-control
+##.xreboo-social-share
+##.xs_social_counter_widget
+##.ya-share2
+##.yeniShare
+##.ymsb-facebook-module
+##.ymsb-retweet-module
+##.yn-share-social
+##.yom-fb-like
+##.yom-follow-fb
+##.yom-free-html-facebook
+##.yom-twitter
+##.yom-twittertimeline
+##.youtube-follow-bar
+##.youtube-follow-us
+##.youtube_follower
+##.youtube_footer
+##.yr-social-list
+##.yt-social-sharing
+##.ytp-share-button
+##.ytsub-wrapper
+##.yui3-socialbutton-content
+##.z-share-belt
+##.zalo-share-button
+##.zmdi-facebook
+##.zmdi-instagram
+##.zmdi-twitter
+##.zmdi-youtube-play
+##.zocial-facebook
+##.zocial-googleplus
+##.zocial-instagram
+##.zocial-linkedin
+##.zocial-pinterest
+##.zocial-twitter
+##.zocial-vimeo
+##.zocial-youtube
+##.zone-reseaux-sociaux
+##.zoom-social-icons-widget
+##.zox-post-soc-list
+##.zox-post-soc-stat-list
+##.zox-top-soc-wrap
+##.zozo-social-icons
+##.zozo_social_link_widget
+##.zss-follow-us
+##.zts-sharer
+##AMP-SOCIAL-SHARE
+##BOLT-SHARE
+##FACEBOOK-SHARE-BUTTON
+##MY-SHARE-BUTTON
+##SHARE-BUTTON
+##SOCIAL-SHARING
+##TC-ARTICLE-SOCIAL-SHARE
+##TWITTER-SHARE-BUTTON
+##[data-bvo-type="share"]
+##[data-social="share"]
+##[data-target="#social-share"]
+##[data-target="share-review"]
+##[data-testid="prism-share"]
+##[data-tracking-zone="share"]
+##[data-trigger="share-links-manager"]
+##[data-xtclick^="social::"]
+##[eapps-link="share"]
+##a[data-share="popup"]
+##a[href^="fb-messenger://share/?"]
+##a[href^="fb-messenger://share?link="]
+##a[href^="http://pinterest.com/pin/create/bookmarklet/"]
+##a[href^="http://pinterest.com/pin/create/button/"]
+##a[href^="http://pinterest.com/pin/create/link/"]
+##a[href^="http://reddit.com/submit"]
+##a[href^="http://service.weibo.com/share/share.php?url="]
+##a[href^="http://twitthis.com/twit?url"]
+##a[href^="http://www.addtoany.com/share_save"]
+##a[href^="http://www.digg.com/submit?"]
+##a[href^="http://www.facebook.com/dialog/feed?"]
+##a[href^="http://www.facebook.com/share.php"]
+##a[href^="http://www.facebook.com/sharer.php"]
+##a[href^="http://www.facebook.com/sharer/sharer.php"]
+##a[href^="http://www.instapaper.com/hello2?url="]
+##a[href^="http://www.linkedin.com/shareArticle?"]
+##a[href^="http://www.livejournal.com/update.bml?"]
+##a[href^="http://www.pinterest.com/pin/create/button/?"]
+##a[href^="http://www.pinterest.com/pin/find/?"]
+##a[href^="http://www.plurk.com/?qualifier=shares&"]
+##a[href^="http://www.reddit.com/submit"]
+##a[href^="http://www.sharethis.com/share/?publisher="]
+##a[href^="http://www.viadeo.com/shareit/"]
+##a[href^="https://facebook.com/dialog/share?"]
+##a[href^="https://facebook.com/share.php?u="]
+##a[href^="https://facebook.com/sharer.php?"]
+##a[href^="https://news.ycombinator.com/submitlink?"]
+##a[href^="https://open.sns.ymcart.com/mgr?"]
+##a[href^="https://partners.viadeo.com/share?"]
+##a[href^="https://pinterest.com/pin/create/"]
+##a[href^="https://plus.google.com/share?"]
+##a[href^="https://reddit.com/submit?"]
+##a[href^="https://share.flipboard.com/bookmarklet/popout?"]
+##a[href^="https://simpleshare.io/go?"]
+##a[href^="https://t.me/share/url?"]
+##a[href^="https://telegram.me/share/url?"]
+##a[href^="https://wa.me/?text="]
+##a[href^="https://www.buttons.social/share/#"]
+##a[href^="https://www.facebook.com/dialog/feed?"]
+##a[href^="https://www.facebook.com/dialog/send?"]
+##a[href^="https://www.facebook.com/dialog/share?"]
+##a[href^="https://www.facebook.com/share.php?"]
+##a[href^="https://www.facebook.com/sharer.php?"]
+##a[href^="https://www.facebook.com/sharer/sharer.php"]
+##a[href^="https://www.linkedin.com/cws/share?"]
+##a[href^="https://www.linkedin.com/shareArticle?"]
+##a[href^="https://www.linkedin.com/sharing/share-offsite/?"]
+##a[href^="https://www.pinterest.com/pin/create/bookmarklet/"]
+##a[href^="https://www.pinterest.com/pin/create/button/"]
+##a[href^="https://www.pinterest.com/pin/create/button?"]
+##a[href^="https://www.pinterest.com/pin/create/link/"]
+##a[href^="https://www.reddit.com/submit?"]
+##a[rel="share-on-facebook"]
+##a[rel="share-on-twitter"]
+##a[title="Condividi su Facebook"]
+##a[title="Condividi su Google+"]
+##a[title="Condividi su LinkedIn"]
+##a[title="Condividi su Pinterest"]
+##a[title="Condividi su Twitter"]
+##a[title="Condividi su whatsapp"]
+##a[title="Condividi"]
+##a[title="Follow on email"]
+##a[title="Follow on facebook"]
+##a[title="Follow on instagram"]
+##a[title="Follow on snapchat"]
+##a[title="Follow on twitter"]
+##a[title="Follow on youtube"]
+##a[title="Nous suivre sur Facebook"]
+##a[title="Nous suivre sur Twitter"]
+##a[title="Partilhar no Facebook"]
+##a[title="Partilhar no LinkedIn"]
+##a[title="Partilhar no Pinterest"]
+##a[title="Partilhar no Twitter"]
+##a[title="Seguici su Google+"]
+##a[title="Seguici su Twitter"]
+##a[title="Seguici su facebook"]
+##a[title="Suivez-nous sur Facebook"]
+##a[title="Suivez-nous sur Pinterest"]
+##a[title="Suivez-nous sur Twitter"]
+##amp-social-share
+##div[title="Partager sur Facebook"]
+##div[title="Partager sur Messenger"]
+##div[title="Partager sur Twitter"]
+##div[title="Partager sur WhatsApp"]
+##img[alt="Connect to us with facebook"]
+##img[alt="Connect to us with houzz"]
+##img[alt="Connect to us with twitter"]
+##img[alt="Connect with us on Facebook"]
+##img[alt="Connect with us on LinkedIn"]
+##img[alt="Connect with us on Twitter"]
+##share-action
+##span[title="Condividi"]
+##span[title="Share this article"]
+! traveltoblank.com
+###grow-me-root
+! malayalam.indiatoday.in,aajtak.in,bangla.aajtak.in
+##.rhs-fixwhtsapp
+! element specific
+##div.c-socialShare
+##div.sticky-shares
+! manworldmedia sites
+##.h-fixed-footer
+! intel.com (and regional sites)
+##.social.footer-links
+! Tag names
+##FB-LIKE-FLYOUT
+! Bug in uBo: https://github.com/gorhill/uBlock/issues/1885
+##div[class^="SocialIcons_"]
+##div[class^="style__social"]
+! Google share icon
+##KNO-SHARE-BUTTON
+! Amazon sites
+##.feature > #tell-a-friend
+!-------------------------Third-party blocking rules--------------------------!
+! *** easylist:fanboy-addon/fanboy_social_thirdparty.txt ***
+||addnow.com^$third-party
+||addthis.com^$third-party
+||addthiscdn.com^$domain=~addthis.com
+||addtoany.com^$third-party
+||assets.pinterest.com/js/pinit.js$third-party
+||assets.pinterest.com/pidget.html$third-party
+||b.hatena.ne.jp^$third-party
+||b.st-hatena.com/images/$image,third-party,domain=~b.hatena.ne.jp
+||b.st-hatena.com/js/$script,third-party,domain=~b.hatena.ne.jp
+||badge.facebook.com^$third-party
+||badges.instagram.com^$third-party
+||bloglovin.com/widget/$third-party
+||bshare.cn^$third-party
+||button-share.zalo.me^$third-party
+||button.like.co^$third-party
+||buttons.github.io/buttons.js$third-party
+||buttons.googlesyndication.com^$third-party
+||connect.ok.ru^$third-party
+||crowdynews.com^$third-party
+||dailymotion.com/badge/user/$third-party
+||digg.com^$script,subdocument,third-party
+||facebook.com/plugins/activity.php?$third-party
+||facebook.com/plugins/facepile.php?$third-party
+||facebook.com/plugins/fan.php?$third-party
+||facebook.com/plugins/follow.php$third-party
+||facebook.com/plugins/like.php?$third-party
+||facebook.com/plugins/like_box.php$third-party
+||facebook.com/plugins/likebox/$third-party
+||facebook.com/plugins/page.php?$third-party
+||facebook.com/plugins/recommendations.php?$third-party
+||facebook.com/plugins/send.php?$third-party
+||facebook.com/plugins/subscribe.php$third-party
+||facebook.com/widgets/activity.php?$third-party
+||facebook.com/widgets/fan.php?$third-party
+||facebook.com/widgets/like.php?$third-party
+||facebook.com/widgets/recommendations.php?$third-party
+||facebook.com^*/plugins/like.php?$third-party
+||facebook.com^*/plugins/page.php?$third-party
+||facebook.com^*/plugins/share_button.php?$third-party
+||fark.com^$script,third-party
+||feedly.com/img/follows/$third-party
+||figshare.com^$third-party
+||filamentapp-assets.s3.amazonaws.com^$third-party
+||filamentapp.s3.amazonaws.com^$third-party
+||fireworkapi.com^$third-party
+||fireworkapi1.com^$third-party
+||fireworktv.com^$third-party
+||flipboard.com/web/buttons/$third-party
+||followistic.com^$third-party
+||friends2follow.com^$subdocument,third-party
+||fwcdn2.com^$third-party
+||fwcdn3.com^$third-party
+||getbutton.io/widget-send-button/$third-party
+||getsocial.io/widget/$third-party
+||getsocial.io^*/gs_async.js$third-party
+||google.com/_/+1/$third-party
+||google.com^*/fastbutton?$third-party
+||gotchosen.com^$third-party
+||gplusapi.appspot.com^$third-party
+||graph.facebook.com/fql?q=SELECT$third-party
+||handll.com^$third-party
+||hatena.ne.jp/entry/button/$third-party
+||herokuapp.com/button.html?$third-party
+||hn-button.herokuapp.com^$third-party
+||iconosquare.com/widget.php$third-party
+||insidesoci.al^$third-party
+||jit.su/frame$third-party
+||jsoon.digitiminimi.com^$third-party
+||karmacracy.com/widget$third-party
+||lessbuttons.com^$third-party
+||likebtn.com^$third-party
+||line-apps.com^*/thirdparty/$third-party
+||line.me/js/line-button.js?$third-party
+||linkedin.com/countserv/$third-party
+||linkedin.com/img/$third-party
+||linkedin.com/uas/js/userspace?$third-party
+||linksalpha.com^$third-party
+||loveclaw.com^$third-party
+||markerly.com^$third-party
+||massrelevance.com^$third-party
+||meebo.com^$third-party
+||meerkatapp.co/btn/$third-party
+||messengerpeople.com^$third-party
+||milotree.com^$third-party
+||newsharecounts.com^$third-party
+||opensharecount.com^$third-party
+||patreon.com/becomePatronButton.bundle.js$third-party
+||pepper.com^$third-party
+||pinterest.com/images/$third-party
+||pinterest.com/js/pinit_main.js$third-party
+||pinterest.com/v1/urls/count.json$third-party
+||platform.foursquare.com^$third-party
+||platform.linkedin.com^$third-party
+||platform.twitter.com/anywhere.js$third-party
+||platform.twitter.com/embed/$~stylesheet,~subdocument,third-party
+||platform.twitter.com/js/button.$third-party
+||po.st/share/$script
+||po.st/static/$third-party
+||reactandshare.com^$third-party
+||reddit.com/api/info.json?$third-party
+||reddit.com/button.js?$third-party
+||reddit.com/static/$third-party
+||revinate.com^$third-party
+||scoop.it^$third-party
+||share.itraffic.su^$third-party
+||share.static.skyrock.net^$third-party
+||shareaholic.com^$third-party
+||sharedcount.com^$third-party
+||sharethis.com^$third-party
+||sharexy.com^$third-party
+||sharpay.io^$third-party
+||shpg.org^$third-party
+||simplesharebuttons.com^$third-party
+||softwebzone.com^$third-party
+||spotify.com/follow/$third-party
+||statigr.am^$third-party
+||storeya.com/externalscript/$third-party
+||trendemon.com^$third-party
+||twinesocial.com^$third-party
+||twitter.com/account/$third-party
+||twitter.com/i/jot
+||twitter.com/js/timeline.$script,third-party
+||usocial.pro^$third-party
+||vk.com/share.php?$third-party
+||vk.com/widget_community.php$third-party
+||vk.com/widget_community_messages.php?$third-party
+||vk.com/widget_like.php$third-party
+||vkontakte.ru/js/api/$third-party,domain=~arudex.com|~tapclap.com|~ugo.ru|~vk.com
+||vkontakte.ru/share.php?$third-party
+||vkontakte.ru/widget_community.php$third-party
+||vkontakte.ru/widget_like.php$third-party
+||w.uptolike.com^$third-party
+||weibo.com/staticjs/weiboshare.html$third-party
+||widget.weibo.com^$third-party
+||widget.whatshelp.io^$third-party
+||widgets.getpocket.com^$third-party
+||widgets.wp.com/likes/$third-party
+||wykop.pl/dataprovider/diggerwidget/$third-party
+||xing-share.com^$third-party
+||xing.com/img/buttons/$third-party
+||yandex.st/share/
+||youtube.com/subscribe_embed?$third-party
+||youtube.com/subscribe_widget$third-party
+||zextit.com/partners/$third-party
+!--------------------------Specific blocking filters--------------------------!
+! *** easylist:fanboy-addon/fanboy_social_specific_block.txt ***
+||ipaddress.com/shariff/
+||naturalnews.com/getviews2.
+||people.com.cn/img/2020fenxiang/
+!------------------------Specific element hiding rules------------------------!
+! *** easylist:fanboy-addon/fanboy_social_specific_hide.txt ***
+artistdirect.com###FollowBut
+iflscience.com###FollowOnGoogleNewsBtn
+c-sharpcorner.com###IconContainer
+catholicculture.org###SM_area
+url-encode-decode.com###ShareModal
+hakone-japan.com###SideSocial
+molecularrecipes.com###Social
+citizensforethics.org###a11y-dialog
+butterwithasideofbread.com###aboutsocial
+torrentsafe.com###addthisimage
+9to5google.com,9to5mac.com,dronedj.com,electrek.co###after_disclaimer_placement
+physics.aps.org###aps-share-widget
+houstonpublicmedia.org###article-share
+theepochtimes.com###article-share-it-now
+scoop.co.nz###article-tools
+dailymail.co.uk###articleIconLinksContainer
+fnlondon.com###article_tools
+bleedingcool.com###bc_sharing_is_caring
+mydorpie.com###blf
+onmsft.com###block-13
+slaynews.com###block-48
+crash.net###block-block-25
+enca.com###block-footersociallinks
+fstoppers.com###block-fs_helpers-fstop_socials
+mydorpie.com###bltw
+mydorpie.com###blwh
+nintendoworldreport.com###bonus
+cricketnetwork.co.uk,f1network.net,rugbynetwork.net,thefootballnetwork.net###bookmarks
+baystatebanner.com###bot-soc-icon-wrap
+antotunggal.com###box-message
+slickdeals.net###buyNowShareContainer
+skidrowreloaded.com###communication
+6sqft.com,activistpost.com,wakingtimes.com###conversions-box
+sputnikglobe.com###cta
+newframe.com###cta-follow
+investigativepost.org###custom_html-2
+freegameplanet.com###custom_html-3
+naijachoice.com.ng###custom_html-53
+ceoworld.biz###custom_html-7
+dailyherald.com###dhFollow
+slaynews.com###dpsp-floating-sidebar
+rakennusmaailma.fi###elevator
+radioguide.fm###email
+fark.com###facebook
+radioguide.fm###fb
+imgflip.com###findUs
+memuplay.com###fixed-share
+notquitenigella.com###floatingfacebook
+empoweringparents.com,tvmaze.com###follow
+phillyvoice.com###follow_social
+openspeedtest.com###footBox2
+atlasobscura.com###footer-social-list
+aimp.ru###footer_counter
+cybermap.kaspersky.com###footer_social_channels
+eporner.com###footsocbuttons
+bleedingcool.com###google_follow
+gamereactor.eu###grnation
+guardian.ng###guardian-follow-links
+newsgram.com###header-social-follow
+thetrekcollective.com###header2
+philosophynow.org###header_right_top_right
+qoshe.com###hit
+beautifuldecay.com,celebdirtylaundry.com###icons
+irishnews.com###irish-header-social-wrapper
+phys.org###js-soc-panel
+newser.com###lightbox
+thisisfutbol.com###mc_scoreboard
+digitaltrends.com###menu-2021-social
+lifezette.com,revolver.news###menu-social-buttons-header
+playforukraine.life,playforukraine.live###myModal
+timesnownews.com###native-share
+ohmyrockness.com###newsfeed
+dezeen.com###newsletter-form
+fia.com###page-pre-footer
+seohorsesense.com###panel-3
+mondediplo.com###partage
+loveandlemons.com###pinthispage
+blurtit.com###plusOnePage
+newindianexpress.com###print_article
+auburnpub.com,azdailysun.com,beatricedailysun.com,billingsgazette.com,bismarcktribune.com,chippewa.com,columbustelegram.com,cumberlink.com,dailyjournalonline.com,democratherald.com,elkodaily.com,fremonttribune.com,gazettetimes.com,globegazette.com,hanfordsentinel.com,helenair.com,herald-review.com,jg-tc.com,journalstar.com,journaltimes.com,lacrossetribune.com,lebanon-express.com,lompocrecord.com,magicvalley.com,missoulanews.com,missoulian.com,mtstandard.com,muscatinejournal.com,napavalleyregister.com,nwitimes.com,pantagraph.com,poststar.com,qconline.com,qctimes.com,rapidcityjournal.com,ravallirepublic.com,santamariatimes.com,siouxcityjournal.com,stltoday.com,tdn.com,thesouthern.com,thetandd.com,theworldlink.com,trib.com,tucson.com,wcfcourier.com,winonadailynews.com,wiscnews.com###reaction-wrap
+redice.tv###s2
+snowbrains.com###sb-footer-menu
+lelong.com.my###scan
+youtube.com###secondary-links
+rebelnews.com###secondary-nav-bar-social
+wikihow.com###sf
+colibriwp.com###sfsi-widget-2
+gomag.com###share-buttons
+bracketfights.com,ecuadoradio.ec,tiermaker.com###share-container
+biorxiv.org###shareit
+benq.com###shares
+perezhilton.com###side-follow
+12tomatoes.com###sidebar > h4
+sbs.com.au###sidebar-first
+engineeringnews.co.za,miningweekly.com,polity.org.za###sidebar_items_container
+upic.me###simplemodal-container
+upic.me###simplemodal-overlay
+prlog.org###smx
+prlog.org###smx2
+coingape.com###social-ad-new
+animenewsnetwork.com###social-bookmarks
+livenation.co.nz###social-component
+breitbart.com###social-follow-sidebar-widget
+pinetools.com###social-icons
+coindesk.com###social-icons-box
+seibertron.com###social-networking
+lethbridgenewsnow.com###social-share-icons
+1news.co.nz###socialListParent
+lasvegassun.com###socialSidebar
+theepochtimes.com###social_share_widget
+salon.com###social_total
+spiked-online.com###spikedShareBar
+thejournal.ie###sticky-share-button-redesign
+democracynow.org###story_social
+techdirt.com###subscribe
+osxdaily.com###subscribe_box
+amazon.co.uk,amazon.com###tafContainerDiv
+thepoke.co.uk###tag
+technology.org###technology-org-application
+rightwingwatch.org,thebeet.com###text-2
+rocketnews24.com,thebeet.com###text-3
+previously.tv,rocketnews24.com,themusicuniverse.com###text-9
+whatuni.com###tickerTape
+thenewstack.io###tns-footer-bar
+reuters.com###toolbar-item-parent-share-12
+designtaxi.com###top-buttons
+yardbarker.com###top-nav-soc
+baystatebanner.com###top-soc-icon-wrap
+hexus.net###topicons
+dansingerman.com,fark.com,radioguide.fm,rare.us,thetvaddict.com###twitter
+oneindia.com###youtube_promo
+petri.com##.-social
+10news.com##.ActionBar
+ktvq.com##.ActionBar-items
+newatlas.com##.ActionLink
+popsci.com##.Article-socialShare
+newscientist.com##.ArticleHeader__SocialWrapper
+wgbh.org##.ArticlePage-actions
+afar.com##.ArticlePage-actions-wrapper
+nationalgeographic.com##.Article__Header__Share
+nordvpn.com##.BlogPost__social-block
+cnbc.com##.CNBCFooter-share
+embed.listcorp.com##.CompanyPage2CompanyPageAbout__share
+nutraingredients-asia.com,nutraingredients-latam.com,nutraingredients-usa.com,nutraingredients.com##.Detail-share
+federalnewsnetwork.com##.Entry-infoSocial
+nutraingredients-asia.com,nutraingredients-latam.com,nutraingredients-usa.com,nutraingredients.com##.Follow
+coingape.com##.GoogleFollws
+gadgetsnow.com##.KkbaU
+thecity.nyc##.Navigation-items-social
+apnews.com##.Page-actions
+smarter.com##.PartialSocialLinks
+interestingengineering.com##.Product_googleNews__7OAsW
+whatcar.com##.ReviewSocialSection_reviewSocialSection__qzV0o
+simkl.com##.SimklTVFooterShare
+futurework.org.au##.SiteFooter_socials
+veteranstoday.news##.Social
+cbssports.com##.SocialIconsBar
+complex.com##.SocialLinks__SocialButtonsContainer-sc-vif6xs-0
+worldathletics.org##.SocialShare_root__3h83X
+coingape.com##.Socilsm
+toptal.com##._1oxEOBHC
+aliexpress.com##._2t2rD
+grammarly.com##._3fq8S-container
+timeout.com##._content_1maoz_5
+gadgets360.com##._nvshrw
+tableconvert.com##._share-wrapper
+timeout.com##._tagsAndSocials_14kkg_5
+datacenterdynamics.com##.a2a_default_style
+ocaholic.ch##.a2a_kit
+abc.go.com##.abc-facebook-like
+reserveamerica.com##.acm-article-share
+latimes.com,marriott.com,sandiegouniontribune.com##.action-bar
+forexlive.com##.action-icon-list__wrapper
+accessnow.org,marqueesportsnetwork.com##.addtoany_shortcode
+audiofilemagazine.com##.af-socialIcons
+mp1st.com##.aji-social-items-wrapper
+ttgmedia.com##.ao-sbcontent
+asiaone.com##.ao-share-buttons
+calcalistech.com##.art-action-wrp
+overdrive.in##.art-social-block
+khaleejtimes.com##.art-top-share-pan-nf
+moneycontrol.com##.arti_icn
+wxyz.com##.article-action
+theepochtimes.com##.article-below-widgets
+gfinityesports.com,stealthoptional.com##.article-float-buttons
+revizoronline.com##.article-footer
+financemagnates.com##.article-icons
+financemagnates.com##.article-icons-color
+techxplore.com##.article-interaction__social
+mymodernmet.com##.article-share-container
+wionews.com##.article-share-data
+freebeacon.com##.article-share-icons
+babylonbee.com,notthebee.com##.article-shareables
+forbes.com,phillyvoice.com##.article-sharing
+forexlive.com##.article-slot__socials
+newrepublic.com##.article-social
+heraldscotland.com##.article-sticky-social
+dailystar.com.lb,eurekalert.org##.article-tools
+businesstech.co.za##.article-top-bar-share
+nationalreview.com##.article-utility-nav
+techcrunch.com##.article__floating-wrap
+english.nv.ua##.article__footer__additional_share
+u.today##.article__gnews
+rt.com##.article__google-news
+armeniasputnik.am,spnfa.ir,sputnik-abkhazia.info,sputnik-georgia.com,sputnik-ossetia.com,sputnik.af,sputnik.az,sputnik.by,sputnik.kg,sputnik.kz,sputnik.tj,sputnikarabic.ae,sputnikglobe.com,sputniknews.africa,sputniknews.cn,sputniknews.com,sputniknews.com.tr,sputniknews.in,sputniknews.jp,sputniknews.lat,sputniknews.ru,sputniknews.uz,sputniknews.vn,sputniknewsbr.com.br,sputnikportal.rs##.article__news-services-subscribe
+wnep.com##.article__sharing
+greenbuildingadvisor.com##.article__social
+news18.com##.article_bnow
+salemnews.net##.article_details_icons
+news18.com##.article_follow_1
+goodnet.org##.article_like
+thespectator.com##.article_set_wrap
+news18.com##.article_socials
+telegraphindia.com##.astkysharebox
+dictionary.com##.atw-socials
+artnet.com##.author-links
+proprivacy.com##.author-social-icons
+adweek.com##.aw-social-share-container
+digitaltrends.com##.b-share
+protos.com##.b-sharers
+spokesman.com##.ba
+dutchnews.nl##.badge-social
+dezeen.com##.badges
+butwhytho.net##.bam-topbar-social
+dxomark.com##.banner
+beebom.com##.beebom-social-share
+firstpost.com##.bg-mail
+beincrypto.com##.bg-primary-blue
+libdems.org.uk##.bg-twitter
+military.com##.block--addtoanyadv
+niaid.nih.gov##.block--footer-media
+niaid.nih.gov##.block--page-head__row__share
+salisburyjournal.co.uk##.block-article-content__socialbar
+ttnews.com##.block-better-social-sharing-buttons
+tastesbetterfromscratch.com##.block-follow-me
+artforum.com##.blog-article__share-sticky
+onextrapixel.com##.blog-post-single-share
+butwhytho.net##.bm-social-sharing
+9to5linux.com##.bm-social-top
+breitbart.com##.bnn-social-share
+crn.com##.border-all-mid-gray-rounded
+cardiff.ac.uk##.box-services
+bangkokpost.com##.boxnav--social
+purewow.com##.btn--email
+insidethegames.biz##.btn-block.btn
+purewow.com##.btn-classic
+devdiscourse.com##.btn-connect
+newsroom.co.nz##.btn-email
+agrimag.co.za,automart.co.za##.btn-facebook
+androidpolice.com##.btn-flipboard
+equinix.com##.btn-group
+psu.edu##.btn-link
+androidpolice.com,cbr.com,collider.com,dualshockers.com,gamerant.com,howtogeek.com,makeuseof.com,movieweb.com,pocketnow.com,thegamer.com,thetravel.com,xda-developers.com##.btn-mail
+junkmail.co.za##.btn-sm
+thetyee.ca##.btn-social-icon
+newsroom.co.nz##.btn-tweet
+agrimag.co.za,androidpolice.com,automart.co.za,maketecheasier.com##.btn-twitter
+agrimag.co.za,androidpolice.com,automart.co.za##.btn-whatsapp
+unz.com##.button-holder
+healthline.com##.button-wrapper
+livescience.com##.buttons-social
+newshub.co.nz##.c-ArticleHeading-actions
+noovomoi.ca##.c-actionsTools
+nature.com##.c-article-extras-additional-links
+lawandcrime.com##.c-article-foot__site
+flava.co.nz,hauraki.co.nz,mixonline.co.nz,thehits.co.nz,zmonline.com##.c-connect
+thenextweb.com##.c-engage
+lawandcrime.com##.c-header-social-item
+businessplus.ie##.c-padding-xs.ct-div-block
+euroweeklynews.com,videocelts.com##.c-post__social
+kyivindependent.com##.c-share__wrapper
+theglobeandmail.com##.c-site-header__buttons
+vox.com##.c-social-buttons
+marketplace.org##.c-story-meta__share
+chasingcars.com.au##.c-strap--youtube
+nintendoworldreport.com##.c2share
+cafonline.com##.caf-c-followbar
+cafonline.com##.caf-o-footer__socials
+cryptotvplus.com##.call-now-button
+u.today##.card__subscribe
+androidpcreview.com##.cb__share-box
+cgdirector.com##.cgd-social-wrapper
+progressive.org##.chicklets
+thecinemaholic.com##.cinemaholic-share
+khmertimeskh.com##.cisc-box
+financialexpress.com##.click-event-telegrame
+businesstoday.in##.cmp_shr_btn
+edugeek.net##.cms_widget_content.widget_content > [align="center"]
+thenationalpulse.com##.code-block-3
+thenationalpulse.com##.code-block-8
+neatorama.com##.col-4
+sciencenorway.no##.color_mobile_bg-forskersonen-primary
+stuff.co.nz##.comment-and-share
+usatoday.com##.component--shareline
+goal.com##.component-share
+goal.com##.component-social-twitter
+inyminy.com##.confess
+allafrica.com,dailysignal.com##.connect
+earthsky.org##.connect-2
+utexas.edu##.connect-links
+financemagnates.com##.contact-widget__sticky
+dailymail.co.uk##.container-3zJLP
+christian.org.uk##.content__sharing
+homecookingadventure.com##.cookbook-instagram
+androidpolice.com,cbr.com,dualshockers.com,gamerant.com,makeuseof.com,movieweb.com,pocket-lint.com,pocketnow.com,thegamer.com,thetravel.com,xda-developers.com##.copy-link-button
+coub.com##.coub__sharing__dropdown
+coub.com##.coub__sharing__list
+bloomberg.com##.css--social-wrapper-outer
+dailywire.com##.css-a91oi6
+thedrive.com##.css-vr83lp
+columbian.com##.cta
+ithinkdiff.com##.custom-html-widget
+therighthairstyles.com##.custom-pinterest-wrap
+similarweb.com##.data-we-share
+cracked.com##.desktop-controls
+ubisoft.com##.desktop-only
+sbs.com.au##.dfIqLC
+strategic-culture.org##.dk-social__items
+dailymail.co.uk##.dms-puff
+thewalrus.ca##.dpsp-network-list-item
+dropbox.tech##.dr-article-content__social-links
+theverge.com##.duet--article--share-buttons
+echonewshub.com,jugomobile.com##.e-shared-sec
+shkspr.mobi##.edent-share
+argusdelassurance.com##.editoSocialBar
+topic.com##.elements-Tombstone-social
+fism.tv##.elfsight-widget-social-share-buttons
+topauto.co.za##.eltd-blog-single-share
+bdonline.co.uk,screendaily.com##.email
+spectator.co.uk##.entry-meta__item--social
+arabnews.com##.entry-views
+nrttv.com##.eshare
+relevantradio.com##.ess-buttons
+wersm.com##.essb_links
+thescoop.us##.essbasc-popup
+yardbarker.com##.expanded.button
+megashare.com##.fa-circle
+trueachievements.com##.fa-comments
+kslnewsradio.com,structurae.net##.fa-instagram
+trueachievements.com##.fa-reddit
+factinate.com##.fa-share-alt
+babylonbee.com##.fab
+techradar.com##.facebook-icon
+blogto.com##.facebook-round-control
+news.stv.tv##.facebook-share
+thefastmode.com##.facebook_plugin
+knowyourmeme.com##.fb-page-like-box
+bearingarms.com,hotair.com,redstate.com##.fb-social
+abajournal.com,buddytv.com,comingsoon.net,elektronista.dk,gospelway.com,gpforums.co.nz,masslive.com,mlive.com,modamee.com,searchengineland.com,shocktillyoudrop.com,topsecretwriters.com##.fb_iframe_widget
+foodbeast.com##.fdbst-share-button
+sacurrent.com##.fdn-icon-button-smaller
+phoenixnewtimes.com##.fdn-site-header-social-icons
+eadaily.com##.feed
+straitstimes.com##.field-name-telegram
+peepingmoon.com##.fixed-action-btn
+onegreenplanet.org##.fixed-ad
+indiatoday.in##.fixedshared
+techradar.com##.flipboard-icon
+thehackernews.com##.float-share
+billionaireimmo.com##.floating-buttons
+nypost.com##.floating-share
+nypost.com##.floating-share-wrap
+thehackernews.com##.follow-box
+businesstech.co.za,mybroadband.co.za##.follow-buttons
+ctrl.blog,ein-herz-fuer-kinder.de##.follow-container
+indiatvnews.com##.follow-google
+autocarindia.com##.follow-google-news-p
+grubstreet.com##.follow-list
+opendemocracy.net##.follow-od
+amoledo.com##.follow-please
+gptoday.net##.follow-section
+thetablet.co.uk##.follow-the-tablet
+alarabiya.net,ausgamers.com,cloudwards.net,notateslaapp.com,republicworld.com,timeslive.co.za,trueachievements.com##.follow-us
+financialexpress.com##.follow-us-on
+sciencenews.org##.follow-us__wrapper___1E0vf
+vt.edu##.follow-virginia-tech-icons
+news9live.com##.followBtn
+wikihow.com##.follow_sidebox
+trutravels.com##.follow_us_icons
+moviemistakes.com##.followbuttons
+zimbabwesituation.com##.followdesktop
+rbth.com##.follows-channel
+telegraphindia.com##.followusbox
+thejc.com##.foot__socials
+dot.la##.foot_bar
+dot.la##.foot_social
+leisurewheels.co.za##.footer-column-3
+lineageos.org,morbidology.com,topuniversities.com,westpac.com.au##.footer-icons
+chinafile.com##.footer-links
+repsol.com##.footer-media
+trustedreviews.com##.footer-menu--icons
+meteoblue.com##.footer-options
+f1i.com##.footer-right
+tampabay.com##.footer-segment-bottom__social-list
+myanimelist.net##.footer-social-media
+rightstufanime.com##.footer-social-nav
+averagelinuxuser.com##.footer-svg-icons
+goingawesomeplaces.com##.footer-widgets
+cfl.ca##.footer1
+loewe.tv##.footerIcons
+imagecollect.com##.footerLinks_03
+theanalyst.com##.footer__bottom--social-links
+scientificamerican.com##.footer__followus-text
+newrepublic.com##.footer__middleRow
+infoq.com##.footer__social-wrap
+indiatoday.in##.footer__socialshare
+madamasr.com##.footer_icons_container
+wafa.ps##.footermenu
+helpnetsecurity.com##.fp-hero-block
+moneycontrol.com##.fsoci
+digitalcontentnext.org##.ft-soc
+alaskahighwaynews.ca,bowenislandundercurrent.com,burnabynow.com,coastreporter.net,delta-optimist.com,moosejawtoday.com,newwestrecord.ca,nsnews.com,piquenewsmagazine.com,princegeorgecitizen.com,prpeak.com,richmond-news.com,theorca.ca,timescolonist.com,tricitynews.com,vancouverisawesome.com##.ft-social
+haymarketbooks.org##.ftr-follow
+kingmodapk.net##.ftr_social_box
+fxstreet.com##.fxs_bg_light_5_clr
+dailyzone.com##.g-b
+getty.edu##.g-footer__social
+ebaumsworld.com##.galleryImageShare
+gametyrant.com##.gametyrantSocial
+ghacks.net##.ghacks_share_widget
+avaaz.org##.global-footer-connect
+cars.com##.global-footer-social-buttons
+oneindia.com##.goog-one-news
+cnbctv18.com##.google-btn-div
+ringsidenews.com##.google-news
+crypto.news##.google-news-banner
+crypto.news##.google-news-button
+alarabiya.net##.google-news-callout
+sammobile.com##.google-news-cta
+9to5google.com,9to5mac.com,9to5toys.com,dronedj.com,electrek.co,searchengineland.com,spaceexplored.com##.google-news-link
+coinpedia.org##.google_news-space
+techadvisor.com##.google_news_button
+auto.hindustantimes.com##.googlenewfollowidget
+atlanticcouncil.org##.gta-hover-share-container
+jam-news.net##.has-medium-font-size.has-background
+hard-drive.net##.hd-discord
+floridasportsman.com##.head-social
+nova-magazine.net##.header-info-text
+malaymail.com##.header-social-menu
+news.cgtn.com,newsus.cgtn.com##.header-v3-follow-common
+pulse.com.gh,pulse.ng##.headerSocials
+tilifony.com##.header_google_button
+tilifony.com##.header_twitter_button
+touristspy.com##.heateor_sss_follow_icons_container
+total-croatia-news.com##.helix-social-share
+firstpost.com##.home
+manutd.com##.home-content-panel__details-social__main-holder
+apa.org##.horizontal-icon-bar
+dictionary.cambridge.org##.i-facebook
+dictionary.cambridge.org##.i-twitter
+classicalite.com##.ic_bt
+insideclimatenews.org##.icn-share-holder
+cookieandkate.com##.icon-font
+insta360.com##.icon-list
+manutd.com##.icon-share-card-lite
+photofunia.com##.icons
+financialexpress.com##.ie-google-news
+indianexpress.com##.ie-ie-share
+informationisbeautiful.net##.iib-share-buttons
+informationisbeautiful.net##.iib-viz-section--share
+designcurial.com##.image-tools
+olympics.com##.indexstyles__SocialMedia-sc-1np4juy-1
+theinertia.com##.inertia-social-ad
+inews.co.uk##.inews__footer__menus__icons
+inews.co.uk##.inews__post-share
+ebay.co.uk,ebay.com.au##.info > .share
+labiotech.eu##.inline-block.space-y-8
+themessenger.com##.inline-flex
+inquirer.com##.inq-share__option
+winnipegfreepress.com##.interactive
+iphoneincanada.ca##.item--share
+atlasobscura.com##.item-header-social-links
+islamweb.net##.iteminfo
+itweb.co.za##.itw-toolbox-item
+shine.cn##.jiathis_style_shine
+business2community.com##.join-tg
+buzzfeed.com##.js-inline-share-bar
+myanimelist.net##.js-sns-icon-container
+gagadget.com##.js-toplink-container
+itnwwe.com##.kadence-column_09a01f-df
+kdnuggets.com##.kd_bottom
+levernews.com##.kg-callout-card-blue
+4sysops.com##.kleo-quick-contact-wrapper
+echonewshub.com,jugomobile.com##.l-shared-sec
+kedglobal.com##.laFlow
+sendatext.co##.lb_overlay
+axios.com##.leading-0
+nms.si##.leftColumn-socialLinks
+mymodernmet.com##.lets-connect
+mymodernmet.com##.like-it-share-it
+labour.org.nz,nzfirst.org.nz##.like-page
+gptoday.net##.link-icon
+hsbc.com,peoplesweather.com,project-syndicate.org,screendaily.com##.linkedin
+owgr.com##.linkicon
+expertreviews.co.uk,wheelsage.org##.links
+cybernews.com##.links-bar
+exchange4media.com##.list-group
+exchangerates.org.uk##.list-inline
+listenmoneymatters.com##.lmm_external_footer
+analyticsinsight.net##.loftocean-social-share-icon
+consumerfinance.gov##.m-social-media
+odditycentral.com##.mashsb-container
+breakingnews.ie##.mb-1.pt-4
+inquisitr.com##.mb10
+morningstar.com##.mdc-social-share
+themedialine.org##.mdl-share-tool-vertical
+wellington.govt.nz##.media--mobile-hide
+amazon.jobs##.media-icons
+geotastic.net##.media-links-area
+inyminy.com##.menu-menu4_home-container
+business-standard.com##.meta-actions
+arabnews.com##.meta-area
+smashingmagazine.com##.meta-box--share
+washingtonian.com##.min-height-800
+thehackernews.com##.mobile-share
+topic.com##.modules-SocialWidget-socialWidget
+boxofficemojo.com##.mojo-fb-logo
+boxofficemojo.com##.mojo-tw-logo
+pbs.org##.more-from-pbs__social
+yardbarker.com##.msnfc
+theworld.org##.mui-style-dfyfg6-socialShareMenu
+movehub.com##.mvhub-social-button
+cryptotvplus.com##.mvp-alp-soc-wrap
+frostfairs.com##.mvp-story-share-wrap
+techweekmag.com##.mvp-top-soc-wrap
+zerolives.com##.naf-article-share
+zerolives.com##.naf-article-social-block
+adexchanger.com##.nav-sharebox
+denofgeek.com##.nav-social__items
+triblive.com##.navbar-right
+gomag.com##.navbar-social
+chess.com##.navigation-footer-platforms-component
+newsbusters.org##.nb-twitter-block
+ncaa.com##.ncaa-share-hanger
+nerdist.com##.nerdist-social-share
+taiwebs.com##.networking
+thepostmillennial.com##.networks
+screenshot-media.com##.new-home-banner
+aimp.ru##.news_story > div
+nfl.com##.nfl-c-article__share-bar
+news18.com##.nhsocial
+nist.gov##.nist-social__wrapper
+trendy.letudiant.fr##.nl-social
+quipmag.com##.nlg-social-icons
+nowness.com##.nn-join-us__col
+infobyip.com##.noprint
+nerdnomads.com,stationx.net##.ns-share-count
+crypto-news-flash.com##.nso_single_social
+foodnetwork.com##.o-SocialShare
+getty.edu##.o-hero__social
+marketplace.org##.o-social-share
+boldsky.com##.one-head-share1-links
+iranwire.com##.opinion-advertising
+dictionary.com##.otd-socials
+otakumode.com##.p-product-detail__social-buttons
+rogerebert.com##.page-content--byline-share--share
+odt.co.nz##.pane-odt-social-odt-social-rsb
+lifezette.com##.parler
+mondediplo.com##.partage
+news18.com##.pht-artcl-shr2
+hackread.com##.pk-share-buttons-wrap
+hackread.com##.pk-social-links-wrap
+streamingrant.com##.plugin-ss-sticky
+theroar.com.au##.pm-share-horizontal
+crikey.com.au##.pm-socials-block
+audacy.com##.podcast-lead__social
+thefinance.sg##.popup
+tsunagujapan.com##.post-article_sns
+theashleysrealityroundup.com##.post-links
+earthsky.org,gidhaur.com##.post-share
+aceshowbiz.com##.post-share-area
+rockstarintel.com##.post-share-float
+foodandwaterwatch.org,publicbooks.org##.post-social-share
+blockclubchicago.org##.post-social-sharing__list
+bnnbreaking.com##.post__share-block
+eurointegration.com.ua##.post__social
+cointelegraph.com##.post__socials-block
+captainaltcoin.com,celebritycruises.com##.post_share
+buzzfeed.com##.post_shareBottom__9whII
+pravda.com.ua##.post_social_item
+pravda.com.ua##.post_text > blockquote
+dailymail.co.uk##.prevNextWrapper-1Vg7e
+aliexpress.com##.product-fix-sns
+inspiredtaste.net##.profile-icons
+ubisoft.com##.promo--channels
+fancentro.com##.public-links
+cbn.com##.py-4.flex-wrap.flex
+honesttopaws.com##.qa-gallery-socials
+scribol.com##.qa-placement-share-bar
+teamcoco.com,tomshardware.com##.reddit
+onegreenplanet.org##.reveal-modal-bg
+businesstoday.in##.rhs-fixwhtsapp
+pulse.com.gh,pulse.ng##.ring-detail-social-share
+rebelnews.com##.rn_widgets
+dailycaller.com##.rounded-full
+publicbooks.org##.rss
+cryptodaily.co.uk##.s-video-h
+techgenyz.com##.s_so
+sabcsport.com##.sabc_footer_btm_social
+sabcsport.com##.sabc_social_box
+alaskahighwaynews.ca,bowenislandundercurrent.com,burnabynow.com,coastreporter.net,cochraneeagle.ca,delta-optimist.com,lakelandtoday.ca,moosejawtoday.com,mountainviewtoday.ca,newwestrecord.ca,nsnews.com,piquenewsmagazine.com,princegeorgecitizen.com,prpeak.com,richmond-news.com,rmoutlook.com,squamishchief.com,stalbertgazette.com,theorca.ca,timescolonist.com,tricitynews.com,vancouverisawesome.com,westernwheel.ca##.sc
+sasktoday.ca##.sc-expanded
+shopclues.com##.sc_socialconnection
+oracle.com##.scl-icons
+cars.com##.sds-social-share
+frieze.com,newsroom.unsw.edu.au##.service-links
+midasbuy.com##.set-bottom-footer
+mpost.io##.sfsi_centered_icon
+nationaldaycalendar.com##.sfsiplus_inerCnt
+bravotube.net##.sh
+skinnyms.com,texasmonthly.com##.share-article
+rpgfan.com##.share-bar
+buzzfeed.com##.share-bar_buzzfeed___uZ4R
+beincrypto.com##.share-block
+calcioefinanza.it,news-medical.net,scientificamerican.com##.share-box
+ibtimes.co.in##.share-btn-wrp
+tastecooking.com##.share-button
+apptrigger.com##.share-capture
+cryptopolitan.com##.share-col
+cheknews.ca,fandomwire.com,tvline.com##.share-container
+paloaltonetworks.com##.share-copy-mail
+news.cgtn.com,newsus.cgtn.com##.share-icon
+alwatanvoice.com,binnews.com,blog.phylum.io,gulf-times.com,iheart.com,jessekellyshow.com,news12.com,steveharveyfm.com##.share-icons
+agsiw.org##.share-icons__social-shares___2eB-m
+mymodernmet.com##.share-it-side
+thenationalpulse.com##.share-layout-stack
+nymag.com,thisismoney.co.uk##.share-link
+thenewstack.io##.share-media
+fintech.tv,war.ukraine.ua##.share-news
+ig.com.br,rebelnews.com##.share-page
+commondreams.org,spectrum.ieee.org##.share-panel
+aajtak.in,gnttv.com,indiatoday.in,indiatodayne.in##.share-social-icons
+alarabiya.net,timeextension.com##.share-this
+wrif.com##.share-wrap-icons
+apkpure.com##.shareBtn
+thespinoff.co.nz##.shareButton
+audi-sport.net##.shareButtons
+tech.hindustantimes.com##.shareLinks
+vimeo.com##.share_body
+goodmenproject.com##.share_count_holder
+nj.com##.sharebar-impact
+searchenginejournal.com##.sharebtn
+econotimes.com##.sharebutton
+jta.org##.sharedaddy
+muscleandfitness.com##.sharedaddy__wrapper
+mid-day.com##.sharelink_act
+cnn59.com##.sharepost
+cointelegraph.com##.shares-list__list
+citizensforethics.org##.shares-simple
+12tomatoes.com##.sharetocare-popup
+thekitchenmagpie.com##.sharing-cta
+al-watan.com,qatar-tribune.com##.sharingColumn
+theregister.com##.sharing_widget
+missouri.edu##.showme-footer__social
+michaelmedved.com##.side_col_follow_box
+dhakatribune.com##.single-artical-page-shear-section-shear-section
+japantimes.co.jp##.single-sns-area
+foodsforbetterhealth.com##.single-social-icon
+flyingmag.com##.single-social-share
+nme.com##.site-footer-social
+medcraveonline.com##.slide-on-scroll
+leagle.com##.sm-btns
+fhm.com.ph,hankooktire.com,joins.com,theinvestor.co.kr##.sns
+invenglobal.com##.sns-list
+darkreading.com##.sns-sharing
+buyee.jp##.sns_list
+bizarrepedia.com,porngals4.com##.soc
+moroccoworldnews.com##.socail-share1
+yourdailypornmovies.ws##.soci
+guides.gamepressure.com##.social-16-soc
+guides.gamepressure.com##.social-19-out-GP
+getpocket.com##.social-actions
+vaticannews.va##.social-btn
+businessinsider.in##.social-common-blck
+crosscut.com##.social-connect-links
+thejournal.ie##.social-container-redesign
+fujitsu.com##.social-content
+livecoinwatch.com##.social-feed-container
+gfinityesports.com,stealthoptional.com##.social-follow-unit
+readbetting.com,readcars.co,readceltic.com,readfashion.co,readfilm.co,readfood.co,readgaming.co,readmanutd.com,readmotorsport.com,readmusic.co,readshowbiz.co,readtv.co##.social-follows
+businessgreen.com,computing.co.uk,investmentweek.co.uk##.social-heading
+jns.org##.social-help
+siliconrepublic.com##.social-horizontal-container
+india.com,news18.com,wionews.com##.social-icon
+cntraveler.com##.social-icons--share
+iheart.com,jessekellyshow.com,steveharveyfm.com##.social-icons-button
+mid-day.com##.social-icons-inline
+tmz.com##.social-item
+videocardz.com##.social-item-mail
+videocardz.com##.social-item-media
+knewz.com##.social-items
+cinenews.be##.social-line
+businesspost.ie##.social-links-wrapper
+denofgeek.com##.social-links__anchor--sharing
+securityaffairs.com,trtworld.com,watchesbysjx.com##.social-media
+cyberdaily.au,gamingbolt.com##.social-media-container
+outlookindia.com,pgpf.org##.social-media-icons
+defenseone.com##.social-media-icons-container
+knowablemagazine.org,ucl.ac.uk##.social-media-links
+247sports.com##.social-media-list
+trumparea.com##.social-media-top
+mg.co.za##.social-meks
+insideclimatenews.org,joblo.com##.social-menu
+birdsandblooms.com,familyhandyman.com,rd.com,tasteofhome.com,thehealthy.com##.social-menu-desktop
+steveharveyfm.com##.social-network-icons
+businessinsider.in##.social-panel-rgt
+facethefactsusa.org##.social-profiles
+businesstech.co.za##.social-section
+coindesk.com,crn.com##.social-share
+iflscience.com##.social-share-elements
+nashvillescene.com,stltoday.com##.social-share-links
+thenationalnews.com##.social-share-rail__sticky
+rappler.com##.social-share__actions
+byjus.com,malaymail.com,maxabout.com,news24.com,politico.eu,thepostmillennial.com##.social-sharing
+officialcharts.com##.social-sharing-bar
+trip101.com##.social-sharing-sidebar
+mintpressnews.com,online-tech-tips.com##.social-signup
+mirror.co.uk##.social-sites
+nhm.org##.social-story-bottom
+lgbtqnation.com##.social-tile
+politico.com##.social-tools__list
+mmorpg.com##.social-web
+gnttv.com##.social-widget
+dailymail.co.uk##.socialContainer-1Yly1
+relationshiphero.com##.socialIcons
+macrumors.com##.socialMedia--3i9tSnAb
+tech.hindustantimes.com##.socialWidgets
+faithwire.com##.social__buttons
+moroccoworldnews.com##.social__media
+snopes.com##.social_comments_app_wrapper
+ringsidenews.com##.social_holder
+commondreams.org##.social_icon
+audi-sport.net,eurogamer.net,metacritic.com,trustedreviews.com,woodworkforinventor.com##.social_icons
+dnaindia.com##.social_icons_colored
+moneycontrol.com##.social_icons_wrapper
+ringsidenews.com##.social_label
+captainaltcoin.com##.social_link
+lithub.com##.social_links
+web3cafe.in##.social_media_link
+greenbot.com##.social_panel
+myfitnesspal.com##.social_profile
+abplive.com,gamesindustry.biz##.social_share
+outlookindia.com##.social_sharing_article
+foodsforbetterhealth.com##.social_top_bar
+businesstoday.in##.social_tracking
+today.rtl.lu##.socialbar
+bidorbuy.co.za##.socialnetwork
+tecmint.com##.socialprofiles
+blog.resy.com##.socials2
+ntvkenya.co.ke##.socials_bar
+traveltriangle.com##.socialshare_box
+citizen.digital##.socilamedia-share-btns
+mpost.io##.space-footer-top-soc
+bingehulu.com##.spc-social-follow
+total-croatia-news.com##.sppb-addon-social-media
+visionguinee.info##.spu-bg
+visionguinee.info##.spu-box
+masterduelmeta.com##.ssbc-button__link
+cryptonews.com##.ssk
+bbc.co.uk##.ssrcss-11faxz6-TagShareWrapper
+aceshowbiz.com##.stay-connected
+digit.in##.stay_connected
+msn.com##.stb-bsb
+sundayworld.co.za##.sticky-buttons
+nmpoliticalreport.com##.sticky-footer-holder
+metro.us##.sticky-media
+allafrica.com##.sticky-panel-container
+analyticsinsight.net##.sticky-share
+healthshots.com##.stickySocial
+amazonadviser.com,apptrigger.com,arrowheadaddict.com,bamsmackpow.com,fansided.com,gamesided.com,gojoebruin.com,hiddenremote.com,lastnighton.com,mlsmultiplex.com,netflixlife.com,playingfor90.com,stormininnorman.com,winteriscoming.net##.sticky_1ds30c3
+futurity.org##.sticy-share-block
+bqprime.com##.story-base-template-m__share-floating-expanded__1E6W0
+aetv.com,wccftech.com##.story-share
+wccftech.com##.story-share-bottom
+stuff.co.nz##.stuff-article-sharebar
+barrons.com##.style--save-and-share-container--KMiFF4od
+methodshop.com##.style-mai-share
+thecollegefix.com##.styled-social-box
+aeon.co##.styled__Container-sc-19sp5ho-0
+nationalheraldindia.com##.styles-m__sticky-social-share__fJQ4J
+patch.com##.styles_SocialShare__lQpUq
+firstpost.com##.subcrbe_btn
+todayonline.com##.subcription-two
+npr.org,symmetrymagazine.org,thefinance.sg,topbet.eu##.subscribe
+jasonwatmore.com##.subscribe-buttons
+newsandguts.com##.subscribeBar
+techweekmag.com##.supersharer
+locals.com##.support-now
+arigatojapan.co.jp##.swp-hover-pin-button
+elements.visualcapitalist.com,marktechpost.com##.swp_social_panel
+echonewshub.com,jugomobile.com##.t-shared-sec
+okgoals.com##.tabrow
+gamingbolt.com##.tag-social-media
+thediplomat.com##.td-follow
+jewishpress.com,techgenyz.com##.td-post-sharing
+opindia.com##.tdi_134
+carnewschina.com##.tds-button
+tecmint.com##.tecmint-float-social-wrapper
+asiaone.com##.telegram-share-wrapper
+insidebitcoins.com##.telegrame_cta_content
+decrypt.co##.text-neutral-700
+chinadaily.com.cn##.three-right
+stuff.co.nz##.tik4-sharing
+ncaa.com##.tile-follow
+30seconds.com##.tip-share
+techlila.com##.tl-social
+techlila.com##.tl-social-share
+methodshop.com##.tm-click-to-tweet
+xbiz.com##.tool-list
+risk.net,waterstechnology.com##.tools-container
+daily.jstor.org##.top-bar-right
+thehackernews.com##.top-follow
+bravewords.com##.top-nav
+destructoid.com##.top-sidebar-wrapper
+sahomeowner.co.za##.topbar-right
+thejewishstar.com##.toplinks
+rpgfan.com##.topper-social
+tomorrowland-movie.com##.topsection
+firstshowing.net##.topsoc
+fintech.tv##.ts-social-list-item
+advocate.com,slashdot.org##.tw
+independent.co.uk##.tw-link
+bearingarms.com,hotair.com,redstate.com##.tw-social
+apptrigger.com,motherjones.com##.tweet
+baesystems.com##.twitter-embed
+isglobal.org##.twitter-featured
+blogto.com##.twitter-round-control
+demilked.com##.twitter-share-button
+thefastmode.com##.twitter_plugin
+hp.com##.ul_media_links
+commerce.gov##.usa-footer__social-links
+aa.com.tr##.ustBar-sosyal
+gothamist.com##.v-share-tools
+trueachievements.com##.vc
+apa.org##.vertical-icon-bar
+motorsport.tv##.vjs-icons-bar
+dailymail.co.uk##.vjs-social-controls
+euractiv.com##.vsac-social-email
+euractiv.com##.vsac-social-reddit
+euractiv.com##.vsac-social-twitter
+amgreatness.com##.w-full.mb-10
+ctrl.blog##.webshare
+firstpost.com##.whats-app-desc
+getthetechnow.com##.whatsapp
+bingehq.com##.widget-social-b
+madinamerica.com##.widget_a2a_share_save_widget
+fandomwire.com##.widget_bimber_widget_facebook_page
+chipsandcheese.com##.widget_block
+atlantatribune.com##.widget_connect
+topauto.co.za##.widget_eltd_social_icon_widget
+vgleaks.com##.widget_et_social_followers
+mediapost.com##.widget_group
+mobilemarketingreads.com##.widget_media_image
+411mania.com##.widget_sm411_widget
+fandom.com##.wikia-bar-anon
+telesurenglish.net##.wpRedesFoot
+butterwithasideofbread.com##.wprm-call-to-action
+manhwatop.com##.wrap_social_account
+coinspeaker.com##.wrapp_aside-share
+spring.org.uk##.yasip.widget
+application-remuneratrice.com##.zd-social
+wdwmagic.com##.zocial
+retbit.com##.zox-post-soc-scroll-out
+retbit.com##.zox-post-soc-stat
+footwearnews.com,indiewire.com##[class^="_socialMedia_"]
+motortrend.com##[data-c="social-share"]
+sundayworld.com##[data-testid="article-share"]
+dw.com##[data-tracking-name="footer-section-social-media"]
+dw.com##[data-tracking-name^="sharing-icons-"]
+eteknix.com##[href="https://bit.ly/39WhWFF"]
+eteknix.com##[href="https://bit.ly/3pozgtL"]
+eteknix.com##[href="https://bit.ly/3qLFns9"]
+maps4heroes.com##[href="https://t.me/maps4heroes"]
+zycrypto.com##[href="https://zycryp.to/GoogleNews"]
+eteknix.com##[href^="http://bit.ly/"]
+webfail.com##[href^="http://twitter.com/intent/tweet"]
+goodyfeed.com##[href^="https://t.me/"]
+colourlovers.com##a.mr-10.left > [src]
+telekom.com##a[title="Share"]
+invezz.com##button[data-sharer]
+lonelyplanet.com##button[data-taggyid]
+fifa.com##div[class*="article-section_shareButton_"]
+theatlantic.com##div[class^="ArticleShare_"]
+cnbc.com##div[class^="SocialShare-"]
+wired.com##div[class^="StickyBoxWrapper"]
+bloomberg.com##div[class^="share-article-button_"]
+newsday.com##div[class^="share-tools"]
+editorji.com##div[class^="share-widget_"]
+today.com##div[class^="share_"]
+barandbench.com##div[class^="social-share-"]
+thisismoney.co.uk##div[class^="socialContainer-"]
+cpr.org,technologyreview.com##div[class^="socialList_"]
+reuters.com##div[class^="social__container_"]
+psyche.co##div[class^="styled__SocialLinks-"]
+semafor.com##div[class^="styles_shareWrapper_"]
+cheddar.com##div[class^="video__share_"]
+abc.net.au##div[data-component="ShareUtility"]
+artforum.com##div[data-component="social-media"]
+askmefast.com##div[style="clear:both;position:absolute;top:20px;left:0px"]
+fansshare.com##div[style="width:192px;height:90px;float:left;padding-left:6px;"]
+discord.me##li.menu-link.d-xl-inline-block
+skeptoid.com##td > .nomobile
+gmx.net##ui-social
+dailymail.co.uk,thisismoney.co.uk##ul[class^="linksHolder-"]
+!! .share-links
+ansa.it,cryptopotato.com,eff.org,ewn.co.za,hannity.com,jurist.org,lagaceta.com.ec,menselijklichaam.nl,mobilesyrup.com,mole24.it,sampdoria.it,upcomingvinyl.com,vivercomsaude.site##.share-links
+!! .share-buttons
+adressa.no,alwatanvoice.com,apk4free.org,auto-moto.com,bank.gov.ua,criminaljusticedegreehub.com,datingscammer.info,design-milk.com,diariolasamericas.com,diariouno.com.ar,exputer.com,ff-bz.com,gamosaurus.com,investigativepost.org,letrap.com.ar,mediaplaynews.com,metro.co.uk,nbcbayarea.com,nbcboston.com,nbcchicago.com,nbcconnecticut.com,nbcdfw.com,nbclosangeles.com,nbcmiami.com,nbcnewyork.com,nbcphiladelphia.com,nbcsandiego.com,nbcwashington.com,necn.com,olhardigital.com.br,psychologies.com,psychologytoday.com,robbreport.com,spy.com,telemundo20.com,telemundo31.com,telemundo33.com,telemundo40.com,telemundo47.com,telemundo48elpaso.com,telemundo49.com,telemundo51.com,telemundo52.com,telemundo62.com,telemundoareadelabahia.com,telemundoarizona.com,telemundochicago.com,telemundodallas.com,telemundodenver.com,telemundofresno.com,telemundohouston.com,telemundolasvegas.com,telemundonuevainglaterra.com,telemundonuevomexico.com,telemundopr.com,telemundosanantonio.com,telemundoutah.com,telemundowashingtondc.com,tenor.com,vlaamskijken.nl##.share-buttons
+!! .ActionBar
+aboutamazon.co.uk,aboutamazon.com,aboutamazon.de,aboutamazon.it,adn40.mx,chronicle.com,deseret.com,iowapublicradio.org,laist.com,nepm.org,suntimes.com,tvazteca.com,washingtonexaminer.com,wgbh.org##.ActionBar
+!! .social
+12tomatoes.com,20minutes.fr,20minutos.es,6abc.com,a2tv.com.tr,abc11.com,abc13.com,abc30.com,abc7.com,abc7chicago.com,abc7news.com,abc7ny.com,abola.pt,affaritaliani.it,africa1.com,agrositio.com.ar,aica.org,al-ain.com,al-akhbar.com,al-shabaka.org,al-sharq.com,alaqsavoice.ps,albaceteabierto.es,albawabhnews.com,algemeiner.com,alligator-sunglasses.com,allkpop.com,altoadige.it,amicidicasa.it,angeloparodi.it,angolotesti.it,apkmb.com,armageddonexpo.com,aruba.it,assopoker.com,atv.com.tr,atv.hu,auto.it,autofoco.pt,avira.com,avivaitalia.it,az.com.na,aztesti.it,badtaste.it,banca5.com,bancaprivataleasing.it,beatsbydre.com,bet.com,bioisotherm.it,bleacherreport.com,bnr.nl,bobvila.com,borsadelcredito.it,boursier.com,budapester.hu,businessinsider.com,businessinsider.de,businesslive.co.za,businesstoday.in,c-span.org,calcionapoli1926.it,carmagazine.co.uk,caustica.co,cdt.ch,centerblog.net,chimeraos.org,christiantoday.co.nz,christiantoday.com.au,cielotv.it,cipiacecucinare.it,cittaceleste.it,cityam.com,clarin.com,classicalite.com,classifieds.co.zw,clearancejobs.com,clm21.es,cmt.com,cmu.edu,cnnindonesia.com,collectorsweekly.com,comicbook.com,comicbookmovie.com,conjur.com.br,coopcasarsa.it,correiobraziliense.com.br,corriere.it,corrierecomunicazioni.it,courrierinternational.com,creditosportivo.it,dagospia.com,dailymaverick.co.za,dailysignal.com,damndelicious.net,dastelefonbuch.de,deabyday.tv,debate.com.mx,deepsilver.com,democracynow.org,dequo.it,derbyderbyderby.it,dererker.it,dhakacourier.com.bd,diariodelweb.it,diarioti.com,dispatchlive.co.za,doctissimo.fr,dpreview.com,dr.com.tr,dunsguide.co.il,ecranlarge.com,elconsolto.com,elmundofinanciero.com,elvenar.com,entywbas.com,epicgames.com,err.ee,estrelando.com.br,estrellatv.com,etcanada.com,eurogamer.it,euronics.it,europages.cn,europages.co.hu,europages.dk,europages.ee,europages.es,europages.eu,europages.fi,europages.fr,europages.gr,europages.hk,europages.it,europages.lt,europages.lv,europages.nl,europages.pl,europages.se,europages.si,europapress.es,europe1.fr,eurospin.it,extra.ec,fakartany.com,fantamagazine.com,fcinter1908.it,fiercewireless.com,filmitalia.org,finanzaonline.com,fivebooks.com,fm-world.it,fmglobal.com,forbes.ru,formulatv.com,forzaroma.info,foxcharleston.com,gamergen.com,gay.it,gazzetta.it,gazzettaregionale.it,gedidigital.it,gediwatch.it,gidhaur.com,giornaledibrescia.it,giornaletrentino.it,globalist.it,gmx.com,gmx.fr,goldenline.pl,golssip.it,grandhotel-et-des-palmes.com,greencarreports.com,grostracteurspassion.com,gse.it,guardian.ng,guildwars2.com,gulfstream.com,gunviolencearchive.org,haber7.com,hannibaltv.com.tn,hawaii.com,hdmotori.it,healthychild.org,hellas1903.it,hellogiggles.com,heraldlive.co.za,hispanidad.com,howtogeek.com,html.it,hub.jhu.edu,hvg.hu,ibtimes.co.in,idiva.com,ildolomiti.it,ilgiornale.it,iliketomakestuff.com,ilmilanista.it,ilpost.it,ilposticipo.it,ilsole24ore.com,ilsussidiario.net,imadrassa.com,impresspages.org,indiatvnews.com,indypendent.org,infomotori.com,informador.mx,infosat.de,infoworld.com,inmoto.it,insideedition.com,insider.com,interior-news.com,iol.pt,irannewsdaily.com,islamweb.net,isprime.com,istat.it,italiaoggi.it,itasportpress.it,ivid.it,jamescoyle.net,jeep.co.nz,jeu.video,journaldugeek.com,juvenews.eu,kabeleins.de,kataweb.it,klassikradio.de,knack.be,korben.info,lacivertdergi.com,ladepeche.fr,lapressa.it,laprovinciadivarese.it,lasicilia.it,latvija.lv,lavozdeltajo.com,leboncoin.fr,ledevoir.com,legacoop.coop,lemondeinformatique.fr,leseclaireuses.com,lethbridgeherald.com,liberoquotidiano.it,libertaddigital.com,libremercado.com,linkiesta.it,lorientlejour.com,luinonotizie.it,madanichannel.tv,mader.bz.it,madridiario.es,magnoliatv.it,marketingtribune.nl,marvel.com,masterinvestor.co.uk,mdspa.it,mediagol.it,medicinehatnews.com,mediocredito.it,medisite.fr,meetingrimini.org,metropol.hu,mikronis.hr,milanofinanza.it,misk.tn,mk.ru,mobileapk.info,mobilenews.jp,monacomatin.mc,mondaymag.com,mondoudinese.it,moneyversed.com,monovolume.cc,monthlyreview.org,moto.it,motonline.com.br,motorionline.com,moviechat.org,mtv.it,muckraker.com,mumbrella.com.au,myevreview.com,naturalborngamers.it,neowin.net,nintendolife.com,notiziecalciomercato.eu,nplusonemag.com,ntdtv.com,numericalcio.it,nzgeo.com,nzx.com,odia.ig.com.br,olivetti.com,omdb.org,omnialyrics.it,oo-software.com,opendns.com,opinione.it,ornews.it,ox.ac.uk,padovasport.tv,paginasamarillas.es,paginasiete.bo,pap.pl,pauta.cl,pentapostagma.gr,petitfute.com,petrolicious.com,peugeot.de,phanteks.com,phonearena.com,pianetamilan.it,pneusnews.it,pokernews.com,portaldotransito.com.br,professionearchitetto.it,proiezionidiborsa.it,prosieben.de,protonvpn.com,publico.es,publish0x.com,purexbox.com,pushsquare.com,qualcomm.com,qualenergia.it,quice.it,radbox.me,radio.cz,radiocitymilano.it,radionacional.com.ar,radioorient.com,ran.de,raya.ps,razon.com.mx,red-buzz.com,regione.piemonte.it,register724.com,renaultsport.com,republikein.com.na,responsibility.org,retailmenot.com,rickey.org,rmcsport.net,rollingstone.it,roncadin.it,ropeofsilicon.com,rossopomodoro.it,rottentomatoes.com,rtcc.org,rtlnieuws.nl,rts.rs,russia-insider.com,rustica.fr,samachar.com,sanook.com,sardiniapost.it,sat.tv,sat1.de,scalescale.com,schiit-europe.com,schuttevaer.nl,sciencenorway.no,scmp.com,scorpionbay.com,scottishconservatives.com,scottishlabour.org.uk,searchmarketingexpo.com,seattleweekly.com,sectionstudios.com,seen.de,sex.com,sfist.com,shacknews.com,shanghaiist.com,shefinds.com,singaporeair.com,sixx.de,skynews.com.au,slurpee.com.au,soccerway.com,sofarsogood.fr,softexia.com,solidfiles.com,sorgenia.it,sparknotes.com,spgpromos.com,spin.com,sport.es,sportnews.bz,sportsmole.co.uk,spratings.com,stackpath.com,stardock.com,sucuri.net,sudouest.fr,supermacs.ie,suzuki.it,swedroid.se,sygic.com,t3.com,tacticalshit.com,tari.it,techpowerup.com,telegiz.com,testimania.com,the-sun.com,the-voice-of-germany.de,thedissolve.com,thepeninsulaqatar.com,therese-moelk.at,theringreport.com,thescottishsun.co.uk,thesun.co.uk,thesun.ie,thomann.de,thomson,ti.com,tichyseinblick.de,tickld.com,timeslive.co.za,timesofisrael.com,tmonews.com,todomecanica.com,todomercadoweb.es,top.de,toronews.net,tourhebdo.com,trust.zone,tt.com,tuacasa.com.br,tubestart.com,tuttobolognaweb.it,tuttomercatoweb.com,tweakers.net,twr.org,typomaps.net,u.tv,ucl.ac.uk,uk-mkivs.net,ultimominuto.news,unica.it,unita.it,units.it,urbanomnibus.net,utorrent.com,veol.hu,vg247.com,vg247.it,victoriassecret.com,vijesti.me,violanews.com,viralnova.com,vitatrentina.it,viveregiovani.it,voetbal24.be,voetbalnieuws.be,vortice.it,voxafrica.com,vz.ru,wallpaper.com,wallstreetitalia.com,wantedonline.co.za,washwasha.org,wbez.org,wdet.org,we.com.na,webs.com,wegotthiscovered.com,willyweather.com,woot.com,workersliberty.org,yachtingjournal.com##.social
+!! #share
+bulawayo24.com,canavesenews.it,dbknews.com,designtaxi.com,foreca.fi,hqbabes.com,hqsluts.com,keepone.net,libsyn.com,memuplay.com,monstercockland.com,sohu.com,sputnik-abkhazia.ru,sputnik-georgia.ru,sputnik-ossetia.ru,sputniknewslv.com,themoviedb.org,voltairenet.org,xvideos-br.com,xxxymovies.com###share
+!! .share
+411mania.com,9gag.com,abril.com.br,actiefwonen.be,administradores.com.br,al-shabaka.org,al-sharq.com,alfredopedulla.com,algemeiner.com,alibaba.com,alu.jp,amica.it,ara.cat,areanapoli.it,aristeguinoticias.com,arizonasports.com,asia.nikkei.com,astanatimes.com,at5.nl,autodidacts.io,autoline-az.com,autoline-br.com,autoline-eu.fr,autoline-eu.it,autoline-eu.kz,autoline-eu.ru,autoline-eu.se,autoline-ge.com,autoline-nl.be,autoline-ru.ee,autoline-ru.lt,autoline-ru.lv,autoline-tm.com,autoline.be,autoline.bo,autoline.by,autoline.com.pl,autoline.com.py,autoline.com.ua,autoline.es,autoline.kg,autoline.lu,autoline.lv,autoline.md,autoline.me,autoline.nl,autoline.pe,autoline.pt,autoline.ro,autoline.tj,autoline.ua,autoline.uz,averagelinuxuser.com,basketinside.com,bianconeranews.it,bilibili.com,blogtivvu.com,brundisium.net,businessam.be,buzzmoica.fr,c-span.org,cardealermagazine.co.uk,carpicalcionews.it,cbc.ca,cctv.com,cdt.ch,ch-aviation.com,chicercacasa.it,cittaceleste.it,clarin.com,classicandsportscar.com,cna.com.tw,cnbcindonesia.com,cncnews.cn,cnnindonesia.com,cnnturk.com,columbian.com,commentwiki.fr,comune.torino.it,coopcasarsa.it,corsedimoto.com,cricket.com.au,crusoe.com.br,crypto.news,cryptopotato.com,dailycaller.com,dailymail.co.uk,dailytrust.com,dancestarparty.com,democracynow.org,devisesquare.com,dictionary.com,diningcity.be,diningcity.hu,diningcity.nl,downzen.com,dr.dk,ecoaustral.com,ecommercemag.fr,eleconomista.com.mx,elgrafico.com,elperiodico.cat,elperiodico.com,elquindiano.com,em.com.br,epochtimes.com.br,epochtimes.fr,epochtimes.nl,euobserver.com,exchangerates.org.uk,exclusivo.com.br,fairplanet.org,fantamagazine.com,fcinter1908.it,firenzeviola.it,flowingdata.com,food.com,foodnetwork.it,football365.com,forzaroma.info,fotomac.com.tr,franceinter.fr,francetvinfo.fr,frandroid.com,freespeech.org,funweek.it,gamespot.com,gamingonlinux.com,gazeta.pl,gazzamercato.it,gazzetta.it,geekwire.com,gettyimages.be,gettyimages.dk,gettyimages.es,gettyimages.fr,gettyimages.it,gettyimages.nl,gettyimages.pt,gettyimages.se,gids.tv,globo.com,golssip.it,good.is,gumtree.co.za,hispantv.com,huuto.net,hvg.hu,hyundai.co.nz,idcquan.com,ildolomiti.it,ilmilanista.it,ilsecoloxix.it,ilsussidiario.net,ilviaggiatorgoloso.it,insomnia.gr,intesasanpaolo.com,isaechia.it,itasportpress.it,jornada.com.mx,juvenews.eu,kingarthurbaking.com,kmfa.org,knjizara-dominovic.hr,ktar.com,lagranepoca.com,laleggepertutti.it,landrover.be,landrover.ch,landrover.com.br,landrover.com.cn,landrover.dk,landrover.es,landrover.fr,landrover.hu,landrover.it,landrover.lv,landrover.nl,landrover.pt,landrover.ru,landrover.se,landroverkz.com,lantidiplomatico.it,laprensagrafica.com,lastampa.it,lavozdegalicia.es,lifegate.it,lifezette.com,ltn.com.tw,maannews.net,madeinbz.info,mail.ru,mediacorp.sg,mediagol.it,megasesso.com,metropolitano.it,milesplit.com,miur.gov.it,mobilita.org,monacomatin.mc,mondoudinese.it,mynorthwest.com,nachrichten.it,napi.hu,neoplan.com,new.qq.com,newhua.com,news.unl.edu,newsmaxtv.com,newsmonkey.be,nicematin.com,nieuwsblad.be,nos.nl,ntn24.com,numericalcio.it,nuus.hu,oantagonista.com,obastidor.com.br,omglinux.com,otempo.com.br,padovasport.tv,paginegialle.it,panorama.it,passioneinter.com,perlaretorica.it,pianetagenoa1893.net,pianetamilan.it,planetrugby.com,planetware.com,portaldotransito.com.br,qz.com,r7.com,radiotirol.it,radiotoday.com.au,ravennanotizie.it,rbc.ua,recyclingproductnews.com,reductress.com,responsiblestatecraft.org,reteimprese.it,rftvoficial.com.br,ria.ru,romadailynews.it,rxresource.org,sanmarinortv.sm,sasomange.rs,sassuolocalcionews.it,scholarlykitchen.sspnet.org,segmentnext.com,slantmagazine.com,sleepfoundation.org,speakingtree.in,sportando.basketball,sportavellino.it,sputnikportal.rs,steampowered.com,suedtirol1.it,supereva.it,tag43.it,taiwanheute.tw,taiwantoday.tw,takvim.com.tr,tenniscircus.com,theringreport.com,thisiscolossal.com,tivusat.tv,toronews.net,toy-people.com,trend-online.com,tuttobolognaweb.it,u.today,uol.com.br,va.se,valeursactuelles.com,vastoweb.com,vavradyo.com.tr,vectorstock.com,violanews.com,viveusa.mx,vz.ru,webdunia.com,wikiway.com,xxxymovies.com,yougov.com##.share
+!! .share-button
+almanar.com.lb,bergamonews.it,fantasymagazine.it,tirto.id##.share-button
+!! .twitter
+agenziacasaclima.it,anandtech.com,bdonline.co.uk,buzzfil.com,cadenaazul.com,catapult.co,clubic.com,filmgo.org,gameranx.com,habrahabr.ru,howtogeek.com,iexprofs.nl,ifun.de,ilfoglio.it,iphone-ticker.de,lci.tf1.fr,lesoir.be,lounge.fm,ludokado.com,mf24.pl,miningjournal.net,nikkei-cnbc.co.jp,ondacero.es,peoplesweather.com,programme-tv.net,rfm.fr,richersounds.com,screendaily.com,shortlist.com,teleticino.ch,todomercadoweb.es,tripstodiscover.com,trt.net.tr,trueachievements.com,truesteamachievements.com,tuttomercatoweb.com,webnews.it,yoink.com##.twitter
+!! .socials
+addictivetips.com,ambito.com,anews.com.tr,animeworld.tv,az.nl,bazar.it,cracked.com,dacast.com,einbecker-morgenpost.de,ezalenyeg.hu,fastweb.it,hirtv.hu,instant-gaming.com,ipwatchdog.com,iranpress.com,kyivpost.com,laprovinciadicomo.it,mob.org,ouest-france.fr,radiolina.it,recyclingproductnews.com,rt.com,secoloditalia.it,thejc.com,videolina.it##.socials
+!! .social-icons
+abc13.com,akkogear.com.vn,changer4u.com,cuevanahd.net,davidwalsh.name,dcrainmaker.com,dreambigtravelfarblog.com,esquerdaonline.com.br,futurity.org,glas-javnosti.rs,ijr.com,justthenews.com,letras.mus.br,liliputing.com,nypost.com,observer.com,pelisplus2.ai,pink.rs,publicdomainreview.org,screenshot-media.com,superporn.com,thetoyinsider.com,thewindowsclub.com,trtafrika.com,trtarabi.com,trtbalkan.com,trtdeutsch.com,trtfrancais.com,trtrussian.com##.social-icons
+!! .article-share
+ansa.it,az.com.na,azernews.az,b92.net,gfinityesports.com,huffingtonpost.fr,iltalehti.fi,interfax.com.ua,iol.co.za,nekretnine.rs,neowin.net,news.artnet.com,prva.rs,skyticket.com,stealthoptional.com,thefederalist.com##.article-share
+!! .shares
+bulawayo24.com,foodbeast.com,forbes.ru,iol.pt,levantenews.it,tn.com.ar,twistedfood.co.uk##.shares
+!! .sharing
+amoledo.com,astrologyzone.com,bigleaguepolitics.com,goedgevoel.be,indiatoday.in,marketingweek.com,metacritic.com,numberempire.com,ornews.it,screenrant.com,spectator.com.au,thepointsguy.com##.sharing
+!! .social-bar
+bearingarms.com,heraldscotland.com,hotair.com,ilsettimanale.online,pjmedia.com,redstate.com,salisburyjournal.co.uk,thecollegefix.com,townhall.com##.social-bar
+!! .social-container
+dibujos.net,dispatchlive.co.za,heraldlive.co.za,motherjones.com,novabh.tv,onet.pl,online-convert.com,sowetanlive.co.za,timeslive.co.za##.social-container
+!! .social-network
+alahlionline.com,citroenselect.it,elkhabar.com,tilifony.com##.social-network
+!! .tools
+cp24.com,epochtimes.com.br,epochtimes.it,n-tv.de,progressive.org,toyokeizai.net##.tools
+!! #social
+atomic-robo.com,autobelle.it,canavesenews.it,chnetwork.org,classicreload.com,donnahay.com.au,foodfolksandfun.net,fotografidigitali.it,gamingonlinux.com,joburg.org.za,lavoro.gov.it,ledpros.ca,meteovista.be,meteovista.fr,meteovista.pl,navigaweb.net,nexto.pl,phoronix.com,rasom.it,sfr.fr,telesatellite.com,ucl.ac.uk,weeronline.nl,whtop.com,zookeys.pensoft.net###social
+!! .liCompartir
+ilmeteo.net,meteored.cl,meteored.com.ar,meteored.mx,tameteo.com,tempo.com,tempo.pt,tiempo.com##.liCompartir
+!! .social-buttons
+crimeonline.com,fivebooks.com,informer.com,open.online,opencritic.com,redvoicemedia.com,religionnews.com,tarreo.com,thecollegefix.com,upcomingvinyl.com##.social-buttons
+!! .uc-social-bar-wrapper
+n1info.ba,n1info.hr,n1info.rs,n1info.si,nova.rs##.uc-social-bar-wrapper
+!! .tw
+avtoradio.ru,franceantilles.fr,rtl.fr##.tw
+!! .fb
+advocate.com,avtoradio.ru,crocebianca.bz.it,eurocash.pl,franceantilles.fr,gamer.hu,leitgamhof.com,richersounds.com,rtl.fr##.fb
+!! .youtube
+agenziacasaclima.it,cadenaazul.com,klimahaus.it,mf24.pl,peoplesweather.com,rfm.fr##.youtube
+!! .post-actions
+lintellettualedissidente.it,rtsplaneta.rs##.post-actions
+!! .fa-twitter
+madeinbz.info,radiolodz.pl,trueachievements.com##.fa-twitter
+!! .fa-facebook
+anews.com.tr,madeinbz.info,radiolodz.pl##.fa-facebook
+!! .facebook
+agenziacasaclima.it,buzzfil.com,cadenaazul.com,catapult.co,clubic.com,dailymail.co.uk,europafm.com,futbol24.com,howtogeek.com,ilfoglio.it,iveybusinessreview.ca,klimahaus.it,ladepeche.fr,lci.tf1.fr,lesoir.be,loi1901.com,ludokado.com,mf24.pl,nyheteridag.se,ondacero.es,peoplesweather.com,picclick.fr,programme-tv.net,rfm.fr,screendaily.com,startromagna.it,suedtiroler-gaertner.it,teleticino.ch,todomercadoweb.es,tripstodiscover.com,trt.net.tr,tuttomercatoweb.com,yoink.com##.facebook
+!! .pinterest
+bicycling.com,delish.com,nymag.com,tripstodiscover.com,vulture.com##.pinterest
+!! .social-box
+boredpanda.com,criticalthreats.org,lasexta.com##.social-box
+!! .follow
+alarabiya.net,ansa.it,batman-news.com,bbcamerica.com,bit.pt,bitmag.com.br,catholic.org,cheapies.nz,flashbak.com,fox10phoenix.com,francetvinfo.fr,fromthegrapevine.com,fstoppers.com,geeksaresexy.net,grindtv.com,newindianexpress.com,nhl.com,phys.org,pulsenews.co.kr,shazam.com,silicon.co.uk,silicon.de,silicon.es,skatehut.co.uk,symmetrymagazine.org,techxplore.com,telanganatoday.com,tribuneindia.com,unz.com,vagabomb.com,verisigninc.com,wonderwall.com##.follow
+!! .instagram
+cadenaazul.com,ilfoglio.it,peoplesweather.com,rfm.fr,sassymamahk.com,zoom.earth##.instagram
+!! .Share
+7kanal.co.il,focusjunior.it,inn.co.il##.Share
+!! .social-links
+anothermag.com,armageddonexpo.com,averiecooks.com,bnn.de,bolina.it,cgchannel.com,classic105.com,diariolasamericas.com,ebu.io,fortune.com,fullfact.org,hannity.com,i24news.tv,insurancejournal.com,metro.us,mobilesyrup.com,nextplay.nl,oann.com,quantamagazine.org,realnewsmontana.com,rocketbeans.tv,screencrush.com,skinnyms.com,sowetanlive.co.za,stoneyroads.com,thedailystar.net,tuasaude.com,wantedonline.co.za,wijwedden.net##.social-links
+!! .social-link
+english.nv.ua,jenkemmag.com,largus.fr,masterduelmeta.com,merriam-webster.com##.social-link
+!! .google-news
+al-ain.com,al-sharq.com,cartacapital.com.br,cellulare-magazine.it,tv100.com##.google-news
+!! SocialShar
+usnews.com,zerohedge.com##div[class*="SocialShar"]
+!! .header-social
+atlatszo.hu,atvavrupa.tv,avn.com,bostonmagazine.com,cas.sk,cloth5.com,commentwiki.fr,dzfoot.com,epochtimes.it,hothardware.com,ikhwanonline.info,kiss100.co.ke,lci.fr,liganews.net,livingly.com,lonny.com,lovenature.com,malwaretips.com,mpasho.co.ke,niedziela.pl,olhardigital.com.br,radiojambo.co.ke,regione.abruzzo.it,sabah.com.tr,sneakernews.com,sourcefed.com,soutalomma.com,stylebistro.com,sudouest.fr,the-star.co.ke,thebulwark.com,transfermarkt.at,transfermarkt.ch,transfermarkt.co.uk,transfermarkt.com,transfermarkt.com.tr,transfermarkt.de,transfermarkt.es,transfermarkt.nl,transfermarkt.pl,transfermarkt.pt,vijesti.ba,wowhead.com,xn--tbnespaa-j3a.es,zimbio.com##.header-social
+! Specific elements because of generichide
+arstechnica.com###follow-us
+yandex.com###shareButton
+yandex.com###shareContent
+adblockplus.org###social-list
+gameloop.com##.Footer_follow__eMVb8
+gameloop.com##.Share_pc_share__RxDpq
+rawstory.com##.body-share-wrap
+kabeleins.de,prosieben.de,prosiebenmaxx.de,ran.de,sat1.de,sixx.de,suomi24.fi##.fb-page
+duckduckgo.com##.footer__social-icon
+hindustantimes.com##.new__socialIcons
+goldderby.com##.share-group
+rawstory.com##.share-panel
+tweaktown.com##.sharedesktop
+merriam-webster.com##.social-link
+duckduckgo.com##.social__icon
+duckduckgo.com##.social__link
+tomshardware.com##.socialite-widget-ul
+megaup.net##.socialsider
+jewishpress.com##.twitter-follow-button
+charlieintel.com,dexerto.com##.w-full.border-gray-900.p-5
+bbc.com##div[class*="TagShareWrapper"]
+! Include ubO specific
+
+
+! *** easylist:fanboy-addon/fanboy_social_specific_uBO.txt ***
+metro.co.uk###share-buttons-bottom
+metro.co.uk##.item-share-buttons
+metro.co.uk##.footer-follow
+metro.co.uk###share-buttons-top
+metro.co.uk##.share-buttons-floaty
+elearn.interviewgig.com##.post_share
+! ultraslan.com (social popup)
+ultraslan.com##.fancybox-overlay
+ultraslan.com##body,html:style(height: auto !important; overflow: auto !important)
+! https://github.com/easylist/easylist/pull/10413
+govtrack.us##.modal-backdrop
+govtrack.us##body:style(overflow: auto !important;)
+! gulte.com
+gulte.com###awt_popup_landing
+gulte.com##body:style(overflow: auto !important;)
+! finance.yahoo.com
+finance.yahoo.com##.YDC-Overlay
+finance.yahoo.com##html:style(overflow: auto !important; position: initial !important;)
+!------------------------Rules for international sites------------------------!
+! *** easylist:fanboy-addon/fanboy_social_international.txt ***
+!---------- Non-English Social Media Elements ----------
+delfi.ee##.article__info > .article-utility
+delfi.ee##.article__social
+akkogear.com.vn##.box_fixRight
+baoquocte.vn##.bqt-share-social
+360.cymru##.buttons
+gnttv.com##.social_tracking_home
+news.bg##.twitter-icon
+||probook.bg/like?$third-party
+!---------- German Site Specific Hiding Rules ----------
+pctipp.ch###buttons-social
+dls-logistics.de###footerlinks
+de.rt.com###google_news_banner
+soeren-hentzschel.at###services-sidebar-icons
+soeren-hentzschel.at###sharing
+rtde.tech##.ArticleView-googleNewsBanner
+rtde.tech##.ArticleView-rotatorBanners
+finanzfrage.net,gutefrage.net##.Bigfoot-socialLinks
+de.rt.com##.GoogleNewsBanner-link
+butenunbinnen.de##.article-addons
+wienerzeitung.at##.article-toolbar
+snanews.de##.article__google-news
+fnp.de,sport1.de##.bookmarks
+pipeline.de##.bookspalte
+adticket.de##.c-ticket-fan__social-icons
+soeren-hentzschel.at##.circle-icons
+deutsche-startups.de##.connectButtons
+hornoxe.com##.custom-html-widget
+express.de##.dm-articleUserActions
+evangelisch.de##.field-share
+s3nnet.de##.follow
+herz-fuer-tiere.de##.footer__sharing
+dz-privatbank.com##.footer__top
+trtdeutsch.com##.google-news-button-wrapper
+nn.de,nordbayern.de##.icon__social
+islamische-zeitung.de##.iz-socmed
+kicker.de##.kick__article__social
+nachrichten.at##.mainFooter__socialItem
+ndr.de##.meta
+laut.de##.module-share
+mtb-news.de##.mtbnews-sharing-buttons
+onvista.de##.ov-article__sharebar
+streamkiste.tv##.sb
+teltarif.de##.sbm
+orf.at##.share-dialog
+gameswelt.de##.share__bottom
+gameswelt.de##.share__top
+mindfactory.de##.sliderbar
+derfinanzinvestor.de,esg-aktien.de,inv3st.de,kapitalerhoehungen.de##.smIconsWrap
+formel1.de##.social-buttons_container
+deutsche-wirtschafts-nachrichten.de##.social-line
+golem.de##.social-tools
+suedtirolnews.it,thueringer-allgemeine.de##.socialbar
+snanews.de##.socialnetwork
+sportnews.bz##.socialshare
+geo.de##.soucials
+bafoeg-rechner.de,studis-online.de##.ston-shareicn
+presseportal.de##.story-sharing
+t3n.de##.tg-social-bottom
+kleinezeitung.at##.tik4-sharing
+ndr.de##.to_facebook
+watson.ch##.watson-sharebuttons
+redensarten-index.de##[href="https://www.pinterest.de/redensartenindex/"]
+handelsblatt.com##app-icon-link
+stol.it##div[class^="ModifyAndShareDetailArticle_"]
+||pipeline.de/socialmedia-icons/
+||seitzeichen.de^$third-party
+||social-bookmarking-tools.de^$third-party
+||werkenntwen.de/images/buttons/$third-party
+! Specific hiding filters necessary for sites allowlisted with $generichide filter option
+jetzt.de##.social-channels
+! Focus.de
+focus.de##.socFbLikeShare
+!---------- French Site Specific Hiding Rules ----------
+universfreebox.com###banniere-2951-particle
+universfreebox.com###banniere-6584-particle
+meteofrance.com###block-publicmenusocial
+sudhorizons.dz###jm_sl_navigation
+ouedkniss.com###partager
+comment-contacter.fr###sfsi_floater
+palais-de-la-voiture.com###socialmenu
+nl7za.com###tele
+lopinion.fr##.Page-actions
+radiofrance.fr##.ShareManager
+francebleu.fr##.ShareNetwork
+radiofrance.fr##.StationFooter-social
+auto-moto.com##.bloc-partage
+coreight.com##.bloc_reseau
+ledojomanga.com##.btns-partage
+gossip-room.fr##.bubblegum
+rfm.fr##.communities
+justgeek.fr##.cs-meta-shares
+sanarmed.com##.dQkCRJ
+lefigaro.fr##.fig-share-mobile-layer
+lefigaro.fr##.fig-sharebar
+homap.fr##.footer_col_social
+bfmtv.com##.footer_social_media
+francebleu.fr##.gfAGVu
+rtl.fr##.gg
+gamekult.com##.gk__footer__social-bar
+gamekult.com##.gk__share__label
+lci.tf1.fr,loi1901.com##.google
+foozine.com##.google-news-card
+homap.fr##.header_content_networks
+sadisflix.vip##.icon-bar
+allocine.fr##.icon-share
+hugolescargot.com##.jSharer
+rtl.fr##.ld
+clubic.com##.list-footer-rs
+terresinovia.fr##.lksociaux
+lesnumeriques.com##.ln__m-shr
+autoplus.fr##.nl-social
+europe1.fr##.partage
+moneyvox.fr##.reseau-soc-page
+terresinovia.fr##.reseaux-list
+pulsaroptics.fr##.reseaux_sociaux
+madagascar-tribune.com##.rezo_sociaux
+bledina.com##.rs-icon
+la-croix.com##.send-article-icon
+quebeccoupongratuit.com##.share-site
+homap.fr##.share_content_button
+rtl.fr##.shared-logo
+pix-geeks.com##.social_icons
+planetebd.com##.social_network
+20minutes.fr##.socialbar
+tv5monde.com##.tv5monde-footer-menu--social
+tomshardware.fr##.widget-toms-widget-google-news
+! ---------- French Site Specific Blocking Rules ----------
+||produits-asiatiques.com/annuaire/templates/coolor/images/facebook-faces.gif
+!---------- Arabic Site Specific Hiding Rules ----------
+pramgnet.com###Share
+algerie-radio.com###block-block-11
+tunisiatv.tn,watania1.tn###block-block-5
+elmogaz.com##.SocialNetworks
+mc-doualiya.com##.actions
+androydi.com##.author-tw
+raya.com##.before_footer
+skynewsarabia.com##.fb_messanger
+albayan.ae##.follow-google
+trtarabi.com##.google-news-button-wrapper
+alekhbariya.net##.icon-bar
+qatarradio.qa##.icon-social
+kharphonk.com##.pinit
+hannibaltv.com.tn##.rs_bas
+pramgnet.com##.sbnr
+maannews.net##.sc
+midad.com##.social-actions
+studyshoot.com##.social-flex
+alaqsavoice.ps##.social-style-2
+alalam.ir##.social_icon_head
+raya.com##.social_single_post
+raya.com##.social_single_post_bottom
+khutabaa.com##.sqr-social-icons
+!---------- Arabic Specific Media Elements ----------
+||almasryalyoum.com/scripts/sharing.js
+||stjegypt.com/uploads/stjnew.jpg
+!---------- Bosnian Specific Media Elements ----------
+nezavisne.com##.btn-primary
+radiosarajevo.ba##.flex.flex-row.lg\:flex-col
+radiosarajevo.ba##.flex.flex-row.tems-center.justify-center
+avaz.ba##.flex.flex-wrap.justify-end.space-x-\[1\.5rem\]
+klix.ba##.grid.grid-cols-4.gap-0.border.mx-auto.dark\:border-gray-600
+oslobodjenje.ba##.item__share-wrap
+!---------- Croatian Specific Media Elements ----------
+glasistre.hr##.btn-social
+hrt.hr##.h-screen
+slobodnadalmacija.hr##.item__share
+gloria.hr##.item__social-jl
+jutarnji.hr##.item_social_share
+hkm.hr##.single-page__social-share-container
+24sata.hr##.social_share
+!---------- Chinese Specific Media Elements ----------
+||share.baidu.com^
+!---------- Chinese Site Specific Hiding Rules ----------
+storm.mg###article_sns_inner
+ettoday.net###et_sticky_pc
+exmoo.com###fixed-facebook
+exmoo.com###fixed-wechat
+exmoo.com###footer-wechat-container
+lizhi.fm##.attentionUs
+ettoday.net##.et_social_2
+people.com.cn##.section-common-share-wrap
+mingpao.com##.ssm
+takungpao.com.hk##.tkp_con_share
+baidu.com##.w-share
+!---------- Danish Specific Social Media Elements ----------
+politikenhistorie.dk##.pagetools
+!---------- Dutch Site Specific Hiding Rules ----------
+looopings.nl###indexNavigatorbox
+looopings.nl###indexNavigatorboxf
+looopings.nl###indexNavigatorboxl
+yachtonline.nl###shareThisAd
+telegraaf.nl##.SocialButtons
+meemetoranje.nl##.btn-social
+israeltoday.nl##.entry-social
+smulderstextiel.nl##.favshare-holder
+100p.nl##.holder-social
+twentefans.nl##.js-share
+iexprofs.nl,participaties.nl##.linkbar
+nextplay.nl##.share_item
+bricovideo.ovh##.social-icon
+menselijklichaam.nl##.social-wrapper
+zeelandnet.nl##.zld-ftr__social
+gooieneemlander.nl,haarlemsdagblad.nl,leidschdagblad.nl,noordhollandsdagblad.nl##div[class*="sharesticky"]
+!---------- Finnish Specific Social Media Elements ----------
+rakentaja.fi###scrak_CONT_keski
+adressit.com###share_buttons_top_of_petition_menu
+kirjastot.fi###sharing
+mobiili.fi###text-15
+kuorsauskauppa.fi##.SocialMedia
+tivi.fi##.cArfwR.sc-1fbt3do-0
+mediuutiset.fi##.clLoPp.sc-7urq97-0
+mikrobitti.fi##.cyhxvA.sc-tq30ek-31
+seura.fi##.entry-socialmedia-title
+tekniikkatalous.fi##.fmUFKd.sc-zxh5v-0
+mobiili.fi##.mobsome_icons
+ampparit.com##.social-media-links > .sidebox-content
+ampparit.com##.social-media-links > h3[class="sidebox-header"]
+voice.fi##.social-navigation > .nav-item
+etusuora.com##.some > *
+ku.fi##.somejaot
+apotti.fi#?#.post-footer:-abp-has(> .share)
+demokraatti.fi##div[class^="Styles__InnerContainer-"] > .animated
+forssanlehti.fi#?#.herald-single-sticky:-abp-has(.herald-share)
+!---------- Greek Specific Social Media Elements ----------
+enternity.gr###enternity_social_dialog
+capital.gr##.controls
+tilestwra.com##.post-google-news-link
+!---------- Hebrew Site Specific Hiding Rules ----------
+themarker.com##.art__tools
+glz.co.il##.facebookSection
+!---------- Hungarian Specific Media Elements ----------
+nemzetisport.hu###didyou
+instyle.hu###stickInArticle
+nemzetisport.hu##.cikkbar
+life.hu,origo.hu,travelo.hu##.facebook-layer-box
+telex.hu##.fb-box
+tv2.hu##.fejlec_osztas
+metropol.hu##.header-right-socials
+atlatszo.hu##.instagram_feed
+femina.hu##.m-cf-fejlec_container_inda_additional
+index.hu,totalcar.hu,velvet.hu##.megoszt
+mediamarkt.hu##.ms-link-list
+magyarnemzet.hu,travelo.hu##.mw_social
+atlatszo.hu##.post_share
+magyarnemzet.hu##.share-button
+magyarnemzet.hu##.share-container
+atlatszo.hu##.social_networks
+infostart.hu##.topicons
+vg.hu##app-share-buttons
+!---------- Indian Specific Social Media Elements ----------
+dinamani.com,samakalikamalayalam.com###print_article
+epaperlokmat.in,gujaratsamacharepaper.com##.facebook-page
+lionexpress.in##.like-text
+bhaskarhindi.com##.news-info
+ibctamil.com##.news-shares
+amarujala.com##.rgt-links
+!---------- Indonesian Specific Social Media Elements ----------
+cnnindonesia.com##.sosmed
+!---------- Italian Site Specific Hiding Rules ----------
+dissapore.com###about-social
+salto.bz###block-block-11
+salto.bz###block-block-6
+leggo.it###box-social
+salute.gov.it###boxCondivisioneVoto
+comune.torino.it,dueruote.it###condividi
+ilmeteo.it###condividi_news
+bastabugie.it,tuttocampo.it###facebook
+stabiachannel.it###follow-us-on
+notebookitalia.it###gn_cta
+calcionapoli24.it###gnews_label
+altamuralife.it,andriaviva.it,bariviva.it,barlettaviva.it,bisceglieviva.it,bitontoviva.it,canosaviva.it,cerignolaviva.it,coratoviva.it,giovinazzoviva.it,gravinalife.it,margheritaviva.it,materalife.it,minervinoviva.it,modugnoviva.it,molfettaviva.it,ruvoviva.it,sanferdinandoviva.it,spinazzolaviva.it,terlizziviva.it,traniviva.it,trinitapoliviva.it###header-fanpage
+assopoker.com###more-less-btn
+dueruote.it###segui
+wikihow.it###sf
+sampdoria.it###site-menu-social-footer
+radiosubasio.it###social-container
+biografieonline.it###ss-floating-bar
+bastabugie.it###twitter
+bancadipiacenza.it###vimeo
+leganerd.com##.LNPocket
+focusjunior.it##.SATover
+ricetta.it##.alert
+federprivacy.org##.ampz_container
+giornali.it##.art-item-footer
+napolimagazine.com##.blocco_condividi_dettaglio
+gamershqitalia.it##.bottoniera-social
+ccsnews.it,clubalfa.it##.box-gnews
+giornaledibrescia.it,teletutto.it##.btn-toolbar
+money.it##.btnYou
+cirio.it##.cirioYou
+giocodigitale.game##.cloux-social-links
+lemillericette.it##.code-block-10
+toplegal.it##.cond
+lacronacadiravenna.it,livesicilia.it,portoravennanews.com##.condividi
+stabiachannel.it##.condividi-button
+valsusaoggi.it##.condividipagcatd
+valsusaoggi.it##.condividisottod
+unita.it##.condivisione
+optimagazine.com,optimaitalia.com,primapaginanews.it##.condivisioni
+altoadige.it,giornaletrentino.it##.default--toolbar
+altoadige.it,giornaletrentino.it##.default--toolbar-listitem[data-type="icon"]
+tv8.it##.discover
+donnamoderna.com##.dm20-footer-social-link
+donnamoderna.com##.dm20-lory-share-panel
+mediaset.it##.dsoc
+frasicelebri.it##.email
+quattroruote.it##.extra_info_social
+alfredopedulla.com##.fb-banner
+mezzicommerciali.it##.fb-menu
+theitaliantimes.it##.fco2b
+theitaliantimes.it##.finfo3
+virgilio.it##.foglia__social
+udinese.it##.foobar-social
+staseraincucina.it##.footer
+jeanlouisdavid.it##.footerIconsUl
+html.it##.footer__tools
+nazarenogabrielli.it##.footer_el
+3bmeteo.com##.form-success.text-center
+fanpage.it##.ft-icon
+ilmeteo.it##.giornale-contatti
+livesicilia.it,montecarlonews.it,perizona.it##.google_news
+giornalelavoce.it##.googlenewsd
+ilbianconero.com##.header-banner-menu
+fidelityhouse.eu##.header_facebook
+24plus.ilsole24ore.com##.icon-send
+m.calciomercato.com##.icon-share
+alfredopedulla.com##.ig-banner
+milanodabere.it##.info-links
+wallstreetitalia.com##.inner__more
+zona.eu##.insta-frame
+isaechia.it##.instagram-widget
+tv.quattroruote.it##.jw-video-details-share
+thevision.com##.like
+showprice.it##.link_invia_amico
+ilsole24ore.com##.list-inline--tools
+mrw.it##.lista-is
+centrometeoitaliano.it##.lista-social
+lapresse.it,lapresse.us##.lp-social-post
+internazionale.it##.magazine-article-share-tools
+ansa.it##.media-share
+urbantv.info##.meks_ess
+andreagaleazzi.com##.mercatino-toggle
+quotidianopiemontese.it##.mvp-post-soc-wrap
+ansa.it##.new-toolbar-menu
+unicoebello.it##.obfx-sharing
+optimagazine.com##.ocial
+optimagazine.com##.ocialWhite
+everyeye.it##.p-gnewsBanner
+everyeye.it##.p-telBut
+borse.it,finanzaonline.com##.partial-heading-social
+borse.it,finanzaonline.com##.partial-share
+montagna.tv##.post-footer-on-bottom
+dissipatio.it##.post-meta-actions
+lifegate.it##.post__trends
+orologipertutti.it##.post_share
+assopoker.com##.rating-count
+calciatoribrutti.com##.relative-social
+lescienze.it,unica.it##.seguici
+chiesi.com##.seguicisu
+orvieto24.it##.sfm-floating-menu
+superguidatv.it##.sgtv_divRowContent_messenger_subscribe
+giornaleradio.fm##.sh_fb
+giornaleradio.fm##.sh_li
+giornaleradio.fm##.sh_te
+giornaleradio.fm##.sh_tw
+giornaleradio.fm##.sh_wa
+rainews.it##.share-toggler
+atletica.tv##.share-tool
+ilmeteo.net##.shared
+cronacheancona.it##.sharing_icons_wrapper
+mediaset.it##.shr
+ilmeteo.net##.siguenos-reducido
+assopoker.com##.singlemeta
+finanzaonline.com,mediaset.it,teleborsa.it,tempostretto.it##.soc
+animeworld.tv##.social-aw
+andreagaleazzi.com##.social-bookmarks
+wallstreetitalia.com##.social-btn
+trend-online.com##.social-icon
+deejay.it##.social-launch
+ansa.it##.social-menu
+fiorentinanews.com,fiorentinauno.com,monza-news.it,pianetalecce.it,salernogranata.it##.social-sharers
+iphoneitalia.com##.social-sharing
+davinotti.com##.social__variant
+epochtimes.it##.social_media
+bolina.it##.social_network
+sportitalia.com##.social_table
+hcb.net##.socialmedia
+unionesarda.it##.socials-link
+bazar.it##.socials_det
+terranostranews.it##.spu-bg
+maremmanews.it##.ss-box
+agimeg.it##.td-post-sharing-bottom
+ostuninews.it##.td-social-sharing-button
+tuttomercatoweb.com##.telegram
+agensir.it##.temporary-skin-adv
+nurse24.it##.toolbar
+radioinblu.it##.top_nav_social
+maremmanews.it##.ts-social-list-item
+fastweb.it##.tutplus-socials
+sorrisi.com##.tvsc-footer-social
+sorrisi.com##.tvsc-social-share
+alfredopedulla.com##.tw-banner
+veritaeaffari.it##.vea_share
+virgilio.it##.vv-shr
+divisionecalcioa5.it##.widget-social-network
+thewom.it##.wo-opening-share-panel
+ilsole24ore.com##[data-type="fb"]
+ilsole24ore.com##[data-type="in"]
+ilsole24ore.com##[data-type="tw"]
+agendadigitale.eu,corrierecomunicazioni.it,economyup.it,insuranceup.it##a[href="#condivisioni"]
+ilgiorno.it,ilrestodelcarlino.it,iltelegrafolivorno.it,lanazione.it,quotidiano.net##div[class^="SocialShare_"]
+ilgiorno.it,ilrestodelcarlino.it,iltelegrafolivorno.it,lanazione.it,quotidiano.net##div[class^="WhatsApp_"]
+blogsicilia.it##div[style="margin-top: 15px;display: block;padding-left: 18px;font-size: 45px;position: relative;clear: both;"]
+||napolimagazine.com/web/img/iconefooter/
+||napolimagazine.com/web/img/iconetop/
+||nursetimes.org/wp-content/uploads/2016/01/telegram-banner.png
+!---------- Japanese Specific Media Elements ----------
+||imyfone.com/assets/js/media_share/
+||ministop.co.jp/site_common/js/sns_
+||plugins.mixi.jp/favorite.pl?$third-party
+!---------- Japanese Site Specific Hiding Rules ----------
+knivesout.jp###Jfacebook
+knivesout.jp###Jtwitter
+srad.jp###article-bottom
+ntv.co.jp###sns
+news.j-wave.co.jp###snsLink
+etour.co.jp###snsbtn
+biz-journal.jp###vertical_sns
+asahi.com##.SnsUtilityArea
+kakakumag.com##.article-sns-btm
+kakakumag.com##.article-sns-top
+oricon.co.jp##.block-sub-sns
+iphone-mania.jp##.button_ss
+tokyo-np.co.jp##.cmp-misc003
+diners.co.jp##.dc__footer_sns
+lab.re-katsu.jp##.g-sticky
+ismedia.jp##.header-fb
+ismedia.jp##.header-tw
+suumo.jp##.headlinks
+zaikei.co.jp##.ninja_onebutton
+nikkei-cnbc.co.jp##.officialAccount
+knivesout.jp##.sharetxt
+iphone-mania.jp##.single_s_bt
+bestcarweb.jp,biglobe.ne.jp,videor.co.jp##.sns
+oricon.co.jp,videor.co.jp##.sns-box
+ismedia.jp##.sns-fixed
+ismedia.jp##.sns-icons
+join.commufa.jp##.sns_icons
+iphone-mania.jp##.socal
+srad.jp##.synd
+!---------- Korean Site Specific Hiding Rules ----------
+koreatimes.com##.fab
+auction.co.kr##.sare-sns
+koreatimes.com##.twit
+!---------- Latvian Specific Social Media Elements ----------
+tvnet.lv###fancybox-overlay
+tvnet.lv###fancybox-wrap
+||draugiem.lv/business/ext/fans/$third-party
+||draugiem.lv/business/ext/follow/$third-party
+||draugiem.lv/lapas/widgets/$third-party
+||draugiem.lv/say/ext/like.php$third-party
+||draugiem.lv/say/ext/recommend.php$third-party
+||draugiem.lv^*/js/fans/$third-party
+||sekomums.lv^$third-party
+!---------- Montenegrin Site Specific Hiding Rules ----------
+!---------- Norwegian Site Specific Hiding Rules ----------
+bygg.no##.article-share-icons
+tu.no##.bg-twitter-default
+klartale.no##.fm-share-bar
+nrk.no##.nrkno-share
+altinget.no##.self-center
+!---------- Persian Site Specific Hiding Rules ----------
+!---------- Polish Site Specific Hiding Rules ----------
+lifetimetv.pl###block-lifetime-custom-social-puzzle
+pinka.pl###cboxOverlay
+pinka.pl###colorbox
+skomplikowane.pl###exitpopup-modal
+gadzetomania.pl###floatingbar
+biutiq.pl###header > .slidebox
+polskatimes.pl###narzedzia
+strefabiznesu.pl###toolbar
+motocombo.pl###widget_shop7
+radiolodz.pl##.fa-youtube
+redcarpettv.pl##.fc
+salon24.pl##.fsocBody
+kamazpolska.pl##.kac-sm-panel
+hoegert.com##.menu.nav
+tvpolsat.info##.news-social
+narew.info##.sbuttons
+virtualeye.pl##.ssmw-handler
+!---------- Portuguese Site Specific Hiding Rules ----------
+baixaki.com.br###bxkapp
+uai.com.br###communit-box
+reclameaqui.com.br###footer-social-links
+superesportes.com.br###google-news
+meutimao.com.br###redes_sociais
+superesportes.com.br###shareitens
+tatarada.com.br###single-compartilhe
+spinoff.com.br###sociaisnk
+bandnewsfm.com.br##.DivIconsTopo
+agazeta.com.br##.ag-mobile-social-widget
+sicnoticias.pt##.article-tools-container
+maquinadoesporte.com.br##.ast-footer-social-wrap
+maquinadoesporte.com.br##.ast-post-social-sharing
+jornaldocomercio.com##.barra-acoes-container
+yamaha-motor.com.br##.barra-midias
+vrum.com.br##.barradeacoes__acionarredessociais
+jornalrazao.com##.bn-block-brand
+otempo.com.br##.botao-google-news
+megacidade.com##.botoes-compartilhar
+nerdrecomenda.com.br##.box--share-single-page
+nerdrecomenda.com.br##.box-networks
+esportesdp.com.br##.btn-share
+buzzfeed.com.br##.buzzfeed-socials
+folha.uol.com.br##.c-follow-social-media
+b9.com.br##.c-social-midias
+atribuna.com.br##.compartilhamento
+globo.com##.compartilhar
+estrelando.com.br##.compartilhar-interna
+estrelando.com.br##.compartilhar-noticia
+estudokids.com.br##.compartilhe
+globo.com##.container-card-follow-me
+gazetaweb.com##.content-share
+meiahora.com.br##.content-shares
+superesportes.com.br##.docs
+poder360.com.br##.fixed-list
+oantagonista.com.br##.footer-content__social
+noticiasaominuto.com##.footer-info-social
+exame.com##.gGWTmb
+nerdrecomenda.com.br##.header-netwoorks
+r7.com##.header-social-network
+connectparts.com.br##.hover-compartilhar
+trabalhabrasil.com.br##.jobview__btn-sharedVacancy
+jota.info##.jota-actions
+jota.info##.jota-article__share
+uol.com.br##.jupiter-share
+exame.com##.kifGPa
+pinkluna.com.br##.lista-redes
+atarde.com.br,folhadelondrina.com.br##.mw-botaoGoogle
+noticiasaominuto.com##.news-social-bottom
+suno.com.br##.newsContent__article__meta__socials
+noataque.com.br##.noticia-share
+recordeuropa.com##.partilha
+mercadowebminas.com.br##.post-sharing-menu
+jornaldocomercio.com,tvcultura.com.br##.redes
+defatoonline.com.br##.row_gn
+oantagonista.com.br##.share-posts
+gkpb.com.br##.sigaInstagram
+netcine.to##.soci
+abola.pt##.social-btn
+esquerdaonline.com.br##.social-icons-colunist
+esquerdaonline.com.br##.social-icons-post
+redebrasilatual.com.br##.social-wrapper
+cnnbrasil.com.br##.social__footer
+meiobit.com##.socialfloating
+nsctotal.com.br##.sociallink
+jn.pt##.t-article-footer-bar-1
+dinheirovivo.pt,tsf.pt##.t-f-bar-apps
+terra.com.br##.t360-sharebar__wrapper
+tecmundo.com.br##.tec--didyouknow
+tecmundo.com.br##.tec--share__container
+cnnbrasil.com.br##.top__share
+nerdrecomenda.com.br##.widget_nr-socials-widget
+colunadofla.com##.xs_social_counter_widget
+metropoles.com##div[class^="HeaderSocialWrapper-"]
+nexojornal.com.br##div[class^="ShareButtons_"]
+||defatoonline.com.br/whatsapp.html
+||trrsf.com/transversais/trr_bar/$script
+!---------- Romanian Site Specific Hiding Rules ----------
+transtelex.ro##.fb-box
+newsweek.ro##.icons
+!---------- Ukrainian Site Specific Hiding Rules ----------
+avtosale.ua###backgroundPopup
+avtosale.ua###popup
+forklog.com.ua##.post_bottom_socials
+vesti.ua##.singleSocSeti
+donpatriot.news##.wrapper__search
+!---------- Russian Site Specific Hiding Rules ----------
+ntv.ru###bottomsoc
+dnr-online.ru###footsoc
+inforesist.org###push_notificationBlock
+rg.ru###rgb_vk
+rg.ru###rgb_yandex-zen_zen
+gidonline.in###soc
+sibnet.ru###telegram_push
+rosphoto.com###widget
+5-tv.ru##._links
+1prime.ru##.action-buttons
+ria.ru##.article__aggr
+realnienovosti.com##.awesome
+5-tv.ru##.blockOk
+gtrk.tv##.footer-social-wrap
+rosphoto.com##.ft-soc-block
+free-kassa.ru##.h-soc
+1prime.ru##.header__buttons
+interfax.ru##.header__soc
+avtoradio.ru##.in
+interfax.ru##.inIco
+tvrus.eu##.menu-icons
+kommersant.ru##.network
+avtoradio.ru##.ok
+kinoland.biz##.page__share
+forklog.com##.post_bottom_socials_buttons_wrapper
+rambler.ru##.share__list > *
+aif.ru##.sharing_item
+caravan.kz##.sm-list
+academic.ru##.smm
+latuaitalia.ru##.sn
+gtrk.tv##.soc-links-hor
+grozny.tv##.soc_list
+aif.ru##.soc_wid
+traveller-eu.ru##.socseti
+dni.ru##.sotial
+tvrus.eu##.telegram-banner
+rzn.info##.telegram_sub_href
+liga.net##.to-send-row
+avtoradio.ru##.vk
+avtoradio.ru##.yt
+exzerry.com##body > #links > div[align="center"]
+||dni.ru^*/sotial-
+||russia.tv/js/modules/social-subscriber.js
+||spynews.ro/templates/default/img/face.png
+||vestifinance.ru/js/share.js
+!---------- Serbian Site Specific Hiding Rules ----------
+sputnikportal.rs###cta
+glassrpske.com###d-block
+sputnikportal.rs##.article__messengers
+republika.rs##.custom-share
+rtv.rs##.newsTitleShare
+glas-javnosti.rs##.row.pt-4.pb-4
+happytv.rs##.share-action-posts
+alo.rs,blic.rs,republika.rs,tanjug.rs##.single-news-share
+novosti.rs##.social-sharing
+vreme.com##.vr-sharing
+!---------- Spanish Site Specific Hiding Rules ----------
+dontorrent.uno###DonTelegram
+cuencanews.es###buttons
+emol.com###cuDetalle_cuBarraSocial_redesSociales
+soychile.cl###facebook
+superluchas.com###gp-social-share
+mediterraneodigital.com###jj_sl_navigation
+notiactual.com###redes
+perfil.com###redesArticulo
+emol.com###redesSociales
+milenio.com###share-icons-container
+hispantv.com###sharings-footer
+3djuegos.com###siguenos
+valoraanalitik.com###social-bar-valora
+excelsior.com.mx###social-bottom-node
+excelsior.com.mx###social-top-node
+europapress.es###subnavegacionFixed
+horoscoponegro.com###text-23
+bluradio.com,caracoltv.com##.ArticlePage-google-news
+deportv.gov.ar##.BarraRedesNot
+revistacromos.com.co##.Button_google
+elespectador.com##.Button_googleAlert
+elespectador.com##.Button_whatsapp
+adn40.mx##.ListSiguenos-SocialStrip
+ccma.cat##.M-compartir
+elpais.com.uy##.Page-actions-wrapper
+ccma.cat##.R-rightShare
+notimex.gob.mx##.RedesFlotante
+revistacromos.com.co##.Social
+elpais.com.uy##.SocialLink
+revistacromos.com.co##.SocialMedia
+canalnet.tv##._main-footer-socials
+canalnet.tv##._main-header-socials__permalink
+la-razon.com##.action-buttons
+ara.cat##.ara-header-social
+elespanol.com##.article__footer-nav
+los40.com##.base_redes_sociales_fotogaleria
+de10.com.mx,elgrafico.mx##.botonGoogleNews
+ecuavisa.com##.boton_ws
+cooperativa.cl##.botones-redes-sociales
+bigbangnews.com##.box-followvertical
+diarimes.com##.box-social-com
+tonica.la##.boxinstagram
+ecuavisa.com##.btn-compartir
+noticiasrcn.com##.btn-google-news
+tribuna.com.mx##.btn-seguinos-gnews
+eltiempo.com##.btn_googlelink
+segre.com##.c-detail__share
+cadenaser.com##.c-sn
+clubdelsubscriptor.cat##.club-producte-social
+cadenaser.com,caracol.com.co,wradio.com.co##.cnt-interaccion
+elmundofinanciero.com##.comparte_noticia
+el9nou.cat,lanacion.com.ar,psicologia-online.com,qmusica.tv,revistafamilia.ec##.compartir
+abc.es##.compartir-mas
+americateve.com##.compartir-nota
+elmostrador.cl##.compartir-noticia
+eitb.eus##.compartir_sociales
+portafolio.co##.container__boton-whatsapp
+caustica.co,futbolred.com,portafolio.co##.container__btngoogle
+wapa.pe##.container_shared--internal
+elcolombiano.com##.contenedor-google-noticias
+apertura.com,cronista.com##.content-redes
+elperiodico.com##.countsocialhor
+infobae.com##.d23-button-share
+benditofutbol.com,ultimasnoticias.ec##.div-rating
+starmedia.com##.fbk
+iblogmovil.es##.fl-socials
+caustica.co##.floatin-button-container-social
+tonica.la##.followvertical__home
+semana.com##.footer-google-news
+a24.com,perfil.com##.footer-redes
+ara.cat##.footer-rrss
+rivanimation.com##.footer-social-wrapper
+portafolio.co##.footer__redes
+elmostrador.cl##.gnews-container
+ecuavisa.com##.google-news
+metroecuador.com.ec##.googlenews-btn
+diariodecuyo.com.ar##.group-redes
+ultimominuto.news##.header__follow
+cnnespanol.cnn.com##.headerradio__social
+abc.es##.herramientas
+economiahoy.mx##.ic-rs
+eluniversal.com.mx##.in-img
+movistar.es##.link-redes
+voydeviaje.com.ar##.list-icons
+telesurtv.net##.liveRedes
+canalnet.tv##.main-video-single__socials
+vidaextra.com##.masthead-nav-social
+genbeta.com,vidaextra.com##.menu-follow
+show.news,tonica.la##.mod--googlenews
+cadenaser.com##.modulo_compartir
+depor.com##.nav__story-social-network
+tonica.la##.newsvideo__share
+0221.com.ar##.notapage_sticky
+de10.com.mx##.pane-rate-widgetk
+vidaextra.com##.post-comments-shortcut
+beteve.cat##.post-share-sms
+biobiochile.cl##.post-social-container
+gamestorrents.fm##.principio_plugin
+crea-mexico.com,elobservador.com.uy,futbol.com.uy,futbolred.com,montevideo.com.uy,mvsnoticias.com,pantallazo.com.uy,telesurtv.net##.redes
+biobiochile.cl##.redes-container
+diariodecuyo.com.ar##.redes-left
+telesurtv.net##.redesHeader
+futbolred.com##.redes__articulo
+cadenaser.com,deia.eus,diaridegirona.cat,diariocordoba.com,diariodeibiza.es,diariodemallorca.es,elcorreogallego.es,eldia.es,elperiodicodearagon.com,elperiodicoextremadura.com,elperiodicomediterraneo.com,emporda.info,farodevigo.es,globovision.com,informacion.es,laopinioncoruna.es,laopiniondemalaga.es,laopiniondezamora.es,laprovincia.es,levante-emv.com,lne.es,mallorcazeitung.es,noticiasdealava.eus,noticiasdegipuzkoa.eus,noticiasdenavarra.com,regio7.cat,superdeporte.es##.rrss
+aurora-israel.co.il##.rrss-link
+elcomercio.pe##.s-buttons
+betano.com##.sb-footer__notes__socials
+elpais.com.uy##.section-rrss-wrapper
+cnnespanol.cnn.com##.section__social
+as.com##.sh-bar
+cnnespanol.cnn.com##.share-buttons-style-two
+eltiempo.com,expreso.ec,extra.ec##.share-options
+portafolio.co##.share-redes
+cnnespanol.cnn.com##.share__radios
+nupcias.mx##.share_alt
+vidasana.sv##.sharedButtons
+eltiempo.com##.sharrre
+expansion.com##.siguenos
+larazon.es##.site-footer__rrss
+ansalatina.com##.social-button
+ecuavisa.com##.social-menu
+revistalideres.ec##.social-nav
+gasteizhoy.com##.social-new
+perfil.com##.social-topsharing
+larazon.es##.social-wrapper
+de10.com.mx,elgrafico.mx##.socialMediaBottom-Section
+elobservador.com.uy##.sociales
+naciodigital.cat##.socialsharesnoticia
+senpaiediciones.com##.socialts
+servimedia.es##.srvm-nw__share-wrapper
+cadenaser.com##.ssnn
+cnnespanol.cnn.com##.storyfull__social
+portafolio.co##.texto_redes7
+canalnet.tv##.the-single-body__share
+ara.cat##.tool-set
+cope.es##.toolbar
+telexitos.com##.twitterModule
+starmedia.com##.twt
+eluniversal.com.mx##.uni_videoRedes
+europafm.com,ondacero.es##.vermas
+unanimodeportes.com##.widget_custom_html
+telesurtv.net##.wpRedesFoot
+businessinsider.es,hobbyconsolas.com##div[class^="share-bar_"]
+hobbyconsolas.com##div[class^="social-list_"]
+publicar.com##img[style="margin: 0px 10px; float: left; width: 26px;"]
+!---------- Swedish Site Specific Hiding Rules ----------
+sportbibeln.se##.wsfb-wrapper
+!---------- Turkish Specific Social Media Elements ----------
+cosmopolitanturkiye.com,harpersbazaar.com.tr,samdan.com.tr##.gl-btn
+cosmopolitanturkiye.com,harpersbazaar.com.tr,samdan.com.tr##.gl-likes
+diyanet.tv##.lobibox-notify-wrapper
+diyanet.tv##.navbar-sosyal
+ahaber.com.tr,aspor.com.tr##.pageTools
+medyaalemi.com.tr##.paylasWrap
+wmaraci.com##.sagaltpop
+bigpara.hurriyet.com.tr##.share-list
+bigpara.hurriyet.com.tr##.socialIcons
+trthaber.com##.son
+haberinadresi.com,minika.com.tr##.sosyal
+diyanet.tv##.sosyal-alt-ust
+!---------------------------------Allowlists----------------------------------!
+! *** easylist:fanboy-addon/fanboy_social_allowlist_general_hide.txt ***
+gifyagusi.pl#@##fan-exit
+gifyagusi.pl#@##fanback
+facebook.com#@##fb_header
+facebook.com#@##likebtn
+mmo13.ru#@##menu-share
+satkurier.pl#@##menu_social
+lastampa.it#@##shareBar
+facebook.com#@##share_feed
+smbc-comics.com#@##sharebar
+statoquotidiano.it#@##sidebar-social
+cnbc.com#@##social-buttons-transporter
+arstechnica.com#@##social-footer
+vitruvianthing.com#@##social2
+marktplaats.nl#@##socialButtons
+tweetgen.com#@##tweetContainer
+nicovideo.jp#@#.FollowButton
+feedly.com#@#.ShareBar
+doodle.com#@#.SocialMediaLinks
+free18.net#@#.addthis_default_style
+nrc.gov,schonmagazine.com#@#.addthis_toolbox
+heise.de#@#.article-footer__sharing
+heise.de#@#.article-sharing
+adme.media#@#.article-social
+niedziela.pl#@#.article-social-btn
+drive.ru#@#.article-social-container
+petsmart.com#@#.article-social-sharing
+wylecz.to#@#.article__social
+nbcnews.com#@#.article_share
+thetoc.gr#@#.authorSocial
+mos.ru#@#.b-social
+engage.it#@#.block-social
+azlyrics.com#@#.btn-share
+forum.figma.com#@#.category-share
+accounts.motorsport.com#@#.facebook-block
+flugzeugbilder.de#@#.fb-footer
+mixcloud.com#@#.follow-text
+douyutv.com,steampowered.com#@#.follow_btn
+rainn.org#@#.footer-social
+kioskpolis.pl#@#.footer__socials
+gab.com#@#.gab-bttn
+adme.media#@#.gallery-social
+imagenradio.com.mx#@#.header-shares
+xboxdynasty.de#@#.header-socials
+inosmi.ru#@#.header__social
+zont-online.ru#@#.header_social
+letsknowthings.com#@#.hide-social
+wpolityce.pl#@#.icon-facebook-official
+petsmart.com#@#.icon-facebook2
+hacpai.com#@#.icon-telegram
+yourstory.com#@#.icon-twitter-bird
+cc.cc#@#.icon-twitter-sign
+hacpai.com#@#.icon-wechat
+roblox.com#@#.inline-social
+dikidi.net#@#.item-shares
+tradingview.com#@#.js-follow-user
+faz.net#@#.js-sharebuttons
+deezer.com#@#.link-social
+interior.ru#@#.pinterest-wrapper
+needlenthread.com#@#.pinterest1
+marieclaire.ru#@#.pinterestShare
+facebook.com#@#.post-fb-like
+ain.ua,guildwars2.com#@#.post-social
+supercomfysleep.com#@#.q_social_icon_holder
+romaniatv.net,space.com#@#.search-social
+deezer.com#@#.share-action
+youtube.com#@#.share-bar
+advego.com,figshare.com#@#.share-block
+gala.fr#@#.share-bottom
+bitly.com#@#.share-btn
+ida2at.com#@#.share-holder
+app.degoo.com#@#.share-icon-container
+pornhub.com#@#.share-link-container
+baidu.com#@#.share-list
+deezer.com#@#.share-message
+dropbox.com,ge.tt#@#.share-page
+podbean.com#@#.share-podcast
+osf.io#@#.share-row
+inman.com,simpletax.ca#@#.share-section
+out.com,spectrum.ieee.org#@#.share-trigger
+taskernet.com#@#.shareGroup
+canva.com,facebook.com#@#.shareLink
+marianne.net#@#.share__item
+marianne.net#@#.share__link
+marianne.net,rambler.ru#@#.share__list
+joyreactor.cc#@#.share_buttons
+vecernji.hr#@#.share_wrap
+wired.it#@#.sharebox
+quizfreak.com#@#.sharebuttons
+vtvgujarati.com#@#.sharing-box
+marca.com#@#.sharing-tools
+youtube.com#@#.show-share
+novelpia.com#@#.sns-btns
+nvidia.pl#@#.social-newsletter
+tuba.pl#@#.social-popup
+kingjamesbibleonline.org#@#.social-sec
+nerdist.com#@#.social-share-box
+lupus.org#@#.social-share-wrapper
+medialeaks.ru#@#.social-widgets
+keepa.com#@#.socialButtons
+kuriertczewski.pl#@#.social_header
+ixbt.com#@#.social_links
+40ton.net#@#.td-post-sharing-top
+nothiefsallowed.com#@#.twitter-timeline
+petsmart.com#@#a[href^="https://www.facebook.com/sharer/sharer.php"]
+
+! *** easylist:fanboy-addon/fanboy_social_allowlist.txt ***
+@@/angular-facebook.js
+@@/wp-content/plugins/bwp-minify/min/?*,wp-content$script,stylesheet,~third-party
+@@/wp-content/plugins/share-this-image/*$~third-party
+@@/wp-content/plugins/socialauth-wp/*$~third-party
+@@/wp-content/plugins/wordpress-social-login/*$~third-party
+@@/wp-content/plugins/wp-minify/min/?*,wp-content$stylesheet
+@@/wp-content/plugins/wp-rocket/*$image,~third-party
+@@||3obieg.pl/wp-content/themes/sowe/css/content/$image
+@@||adguard.com/public/Adguard/Blog/Android/comparison/facebook_$image,domain=adguard.com
+@@||ahaan.co.uk^$~third-party,xmlhttprequest
+@@||app.conceptboard.com^*/SocialIcons.js$xmlhttprequest
+@@||app.veggly.net/plugins/cordova-plugin-x-socialsharing/$script,~third-party
+@@||arcgis.com/apps/Nearby/app/components/Share/$~third-party
+@@||arhn.eu/wp-content/themes/socialize/$~third-party
+@@||assets.msn.com/bundles/*/social-bar-$~third-party
+@@||authy.com/wp-content/themes/authy/assets/images/icons/
+@@||brave.com/wp-content/uploads/$image,~third-party
+@@||cdn.flowplayer.com^*/share.min.js
+@@||comelitgroup.com/wp-content/themes/comelitgroup/includes/js/instafeed.min.js$~third-party
+@@||comelitgroup.com/wp-content/themes/comelitgroup/includes/js/SocialShare.min.js$~third-party
+@@||commonsensemedia.org/ajax/review/$~third-party,xmlhttprequest
+@@||d27rt3a60hh1lx.cloudfront.net/models/$domain=muse.place
+@@||digitrend.it/wonder-marketing/assets/wordpress/js/videojs-share.min.js?$script,domain=vrsicilia.it
+@@||enumizmatyczny.pl/modules/hifacebookconnect/$image
+@@||facebook.com^*/plugins/page.php?$domain=cieplikpodrozuje.pl|makulscy.com
+@@||fc-zenit.ru/local/templates/new_html/css/nav-social-2/$~third-party
+@@||findicons.com/files/icons/$~third-party
+@@||gen.jut.su/jcdn/minify?charset=*/videojs-share.$script,stylesheet,domain=jut.su
+@@||iconfinder.com/data/icons/$~third-party
+@@||iconizer.net/files/*_social_$image
+@@||iconspedia.com/icon/$image,~third-party
+@@||inscience.news/svc/getscript.aspx$script,~third-party
+@@||instagram.com/p/$subdocument,third-party
+@@||jsdelivr.net/npm/sharer.js
+@@||kinogoo.cc/engine/classes/min/index.php$~third-party,xmlhttprequest
+@@||livesicilia.it/wp-content/plugins/digistream/digiplayer/js/videojs-share.min.js?$script,~third-party
+@@||login.kataweb.it^*/sprite-social.png
+@@||logo.wine/a/logo/$image,~third-party
+@@||meltyblood.typelumina.com/resources/img/common/$image,~third-party
+@@||moneyweb.co.za^*/social-shares.min.js?
+@@||nhk.or.jp/common/sns/nol_share.js$script,~third-party
+@@||nuxt.com/_nuxt/SocialLinks.$script,~third-party
+@@||parlament.mt/scripts/easy-social-share.js
+@@||player.fm^*/social-icons/$image
+@@||pngrepo.com/png/$image,~third-party
+@@||politumor.ru/engine/classes/min/index.php?f=*/share42.js$script,~third-party
+@@||radio24.ilsole24ore.com/plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js$script,~third-party
+@@||reactandshare.com/plugin/rns.js$domain=verkkouutiset.fi
+@@||s7.addthis.com^*/addthis_widget.js$domain=mediamatters.org|politico.com
+@@||softicons.com/download/$image
+@@||srf.ch/socialview-in/$~third-party
+@@||static.addtoany.com/menu/page.js$script,domain=suttonquebec.com
+@@||static.parastorage.com/services/editor-elements/dist/facebookshare.$script,third-party
+@@||supremacy1914.com/fileadmin/templates/$~third-party
+@@||svgrepo.com/show/$image,~third-party
+@@||tf1.fr/public/*-share-$script,~third-party
+@@||tgcom24.mediaset.it/assets/js/amd/socialcount.js
+@@||tgstat.ru/js/share2/share.js$script,~third-party
+@@||thecity.m24.ru/css/ya-share.css
+@@||thecompany.pl/graf/icons/youtube.png
+@@||toneden.io/production/javascripts/social.js$script,~third-party
+@@||tosdr.org/logo/$image
+@@||tweet.mapping.jp/data/czml/tweets.json$~third-party
+@@||vpobede.ru/assets/images/footer-social/$~third-party,xmlhttprequest
+@@||wettercomassets.com/wcomv5/images/footer/$domain=wetter.com
+@@||yap.ru/html/static/share/$image,~third-party
+@@||yaplakal.com/html/static/$image,~third-party
+@@||yastatic.net/share2/share.js$script
+! Generichide
+@@||archiveteam.org^$generichide
+@@||docs.qq.com^$generichide
+@@||flattr.com^$generichide
+@@||fontawesome.com^$generichide
+@@||github.com^$generichide
+@@||github.io^$generichide
+@@||ifttt.com^$generichide
+@@||namechk.com^$generichide
+@@||restream.io^$generichide
+@@||switching.software^$generichide
+@@||tldrify.com^$generichide
+@@||zeplin.io^$generichide
diff --git a/uAssets/thirdparties/easylist/easylist.txt b/uAssets/thirdparties/easylist/easylist.txt
new file mode 100644
index 0000000..d90bbb5
--- /dev/null
+++ b/uAssets/thirdparties/easylist/easylist.txt
@@ -0,0 +1,67509 @@
+[Adblock Plus 2.0]
+! Title: EasyList
+! Expires: 6 days (update frequency)
+! Last modified: %timestamp%
+! Diff-Path: %diffpath%#easylist
+! Diff-Expires: 317 minutes
+! *** easylist:template_header.txt ***
+!
+! Please report any unblocked adverts or problems
+! in the forums (https://forums.lanik.us/)
+! or via e-mail (easylist@protonmail.com).
+!
+! Homepage: https://easylist.to/
+! Licence: https://easylist.to/pages/licence.html
+! GitHub issues: https://github.com/easylist/easylist/issues
+! GitHub pull requests: https://github.com/easylist/easylist/pulls
+!
+!-----------------------General advert blocking filters-----------------------!
+! *** easylist:easylist/easylist_general_block.txt ***
+-ad-300x600-
+-ad-458x80.
+-ad-bottom-
+-ad-column-
+-ad-manager/$~stylesheet
+-ad-right.
+-ad-sidebar.
+-ad-unit.
+-ad-util.
+-ad.jpg.pagespeed.
+-ad.jpg?
+-adbanner.
+-ads-banner.
+-ads-bottom.
+-ads-manager/$domain=~wordpress.org
+-ads/assets/$domain=~web-ads.org
+-assets/ads.$~script
+-auto-ads-
+-banner-ad.
+-banner-ad_
+-banner-ads-$~script
+-contrib-ads.$~stylesheet
+-display-ads.
+-footerads.
+-gpt-ad-$~xmlhttprequest
+-housead-
+-page-ad.
+-page-peel/
+-PcmModule-Taboola-
+-peel-ads-
+-popexit.
+-popunder.
+-publicidad.
+-right-ad.
+-side-ad.
+-sidebar-ad.
+-sponsor-ad.
+-sticky-ad-
+-strip-ads-
+-takeover-ad-
+-top-ads.
+-web-advert-
+-Web-Advert.
+.adriver.$~object,domain=~adriver.co|~adriver.tech
+.adrotate.
+.ads-lazy.
+.ads-min.
+.ads.controller.
+.ads.css
+.ads.darla.
+.adsbox.$domain=~adsbox.in
+.adserver.
+.advert.$domain=~advert.ae|~advert.ge|~advert.io|~advert.ly|~advert.media|~advert.org.pl
+.ar/ads/
+.ashx?AdID=
+.aspx?adid=
+.az/adv/
+.br/ads/
+.bz/ads/
+.ca/ads/
+.cfm?ad=
+.cgi?ad=
+.ch/adv/
+.clkads.
+.club/js/popunder.js
+.cn/sc/*?n=$script,third-party
+.com/a?pagetype
+.com/ad/$~image,third-party,domain=~mediaplex.com|~warpwire.com|~wsj.com
+.com/ads?
+.com/adv/$domain=~adv.asahi.com|~advantabankcorp.com|~alltransistors.com|~archiproducts.com|~tritondigital.com
+.com/adz/
+.com/peeltr.js
+.com/sc/*?n=$script,third-party
+.com/ss/ad/
+.cz/adv/
+.cz/affil/
+.cz/bannery/
+.fuse-cloud.com/
+.html?clicktag=
+.info/tsv
+.jp/ads/$third-party,domain=~hs-exp.jp
+.lazyload-ad-
+.lazyload-ad.
+.lol/js/pub.min.js$third-party
+.lol/sw.js$third-party
+.mx/ads/
+.my/ads/
+.nativeads.
+.net/ad2/$~xmlhttprequest
+.net/ads?
+.ng/ads/
+.nu/ads/
+.org/ad/$domain=~ylilauta.org
+.org/ads/
+.org/pops.js
+.ph/ads/
+.php/ad/
+.php/ads/
+.php?ad=
+.php?adsid=
+.php?adv=
+.php?clicktag=
+.php?zone_id=
+.php?zoneid=
+.pk/ads/
+.popunder.js
+.pw/ads/
+.ru/ads/
+/?fp=*&poru=$subdocument
+/?view=ad
+/_adslot/*
+/_xa/ads?
+/_xa/ads_
+/a-ads.$third-party
+/a/?ad=
+/a/ads/*
+/a/display.php?$script
+/AA/theologicalpresentation.com/*
+/ab_fl.js$script
+/ablck/frolod.js
+/ad--unit.htm
+/ad-125.
+/ad-468-
+/ad-600-
+/ad-bottom.
+/ad-box-
+/ad-choices-
+/ad-choices.
+/ad-engine.js
+/ad-left.js
+/ad-scripts--
+/ad-scroll.js
+/ad-server.$~script
+/ad-sidebar-
+/ad-skin-
+/ad-third-party?
+/ad.cgi?
+/ad.css?
+/ad.html?
+/ad.min.
+/ad.skin.
+/ad/a.aspx?
+/ad/banner.
+/ad/banners/*
+/ad/common_
+/ad/dfp/*
+/ad/empty.
+/ad/err?
+/ad/getban?
+/ad/guest/*
+/ad/html/*
+/ad/image/*
+/ad/images/*$domain=~studiocalling.it
+/ad/img/*
+/ad/imp?
+/ad/leaderboard.
+/ad/player_
+/ad/popup.
+/ad/skin-
+/ad/skin_
+/ad/skyscraper.
+/ad/sponsors/*
+/ad/view/*
+/ad/zeus/*
+/ad300.
+/ad?count=
+/ad?pos_
+/ad?sponsor=
+/ad?type=
+/ad_300250.
+/ad_728.
+/ad_area.
+/ad_banner/*
+/ad_base.
+/ad_bottom.
+/ad_break?
+/ad_campaign?
+/ad_caption.
+/ad_choices.
+/ad_choices_
+/ad_code.
+/ad_common.
+/ad_display.
+/ad_engine?
+/ad_exo.
+/ad_feed.
+/ad_footer.
+/ad_function.
+/ad_ga_callback.
+/ad_generator?
+/ad_header.
+/ad_home.
+/ad_horisontal.
+/ad_horizontal.
+/ad_images/*
+/ad_img/*
+/ad_include.
+/ad_index_
+/ad_label_
+/ad_lazyload.
+/ad_left.
+/ad_left_
+/ad_manager/*
+/ad_overlay.
+/ad_peel/*$script
+/ad_popup_
+/ad_pos=
+/ad_position=
+/ad_provider.
+/ad_refresh.
+/ad_request.
+/ad_right.
+/ad_rotator/*
+/ad_server.
+/ad_side.
+/ad_skin_
+/ad_skyscraper.
+/ad_slideout.
+/ad_space.
+/ad_spot.
+/ad_square.
+/ad_sticky.
+/ad_top.
+/ad_util.
+/ad_vert.
+/ad_vertical.
+/ad_view_
+/ad_wide_
+/ad_wrapper.
+/adanalytics.
+/adaptvadplayer.
+/adasset/*$~script
+/adasync.
+/adbanner2.
+/adbanners/*
+/adbottom.
+/adbox.
+/adcall?
+/adcalloverride.
+/adcash.
+/adcgi?
+/adcheck.
+/adchoice.
+/adchoice_
+/adchoices_
+/adchoicesicon.
+/adchoiceslogo.
+/adcommon?
+/adconfig.
+/adconfigproxy.
+/adcount.$domain=~adcount.com|~adcount.fi
+/adcounter.
+/adcreative.$domain=~adcreative.es|~adcreative.nl|~hange.jp
+/addons/ads.
+/addons/ads/*
+/addyn/3.0/*
+/addyn|*;adtech;
+/addyn|*|adtech;
+/adengine.js
+/adfox/loader.js
+/adfshow?
+/adfurikun/*$~image
+/adfx.loader.bind.js
+/adhandler/*$~subdocument
+/adheader.
+/adhelper.js
+/adiframe|*|adtech;
+/adimage.
+/adimage/*
+/adimages.
+/adj.php?
+/adjs.php
+/adlayer.php
+/adlib.min.js
+/adlog.php
+/admanager.$~object,~xmlhttprequest,domain=~admanager.alzura.com|~admanager.google.com|~admanager.line.biz|~admanager.opera.com|~admanager.roku.com|~admanager.sevio.app
+/admanager/*$~object,domain=~admanager.line.biz|~blog.google|~konograma.com
+/admgr.
+/admitad.js
+/adModule.
+/ADNet/*
+/adnet2.
+/adnetmedia.$domain=~adnetmedia.ee|~adnetmedia.hu|~adnetmedia.lt|~adnetmedia.lv
+/adocean.
+/adometry?
+/adops.$domain=~adops.co.il|~adops.gr
+/ados.js
+/adotube_adapter.
+/adotubeplugin.
+/adoverlay.
+/adpartner.min.js
+/adplacement.
+/adplayer.$script,domain=~adplayer.media|~adplayer.pro
+/adplugin.
+/adpopup.
+/adproxy.
+/adright.$domain=~adright.com
+/adriver.$~script,domain=~adriver.co|~adriver.io|~adriver.tech
+/adriver_$~object
+/ads-250.
+/ads-300.
+/ads-admin.
+/ads-async.
+/ads-common.
+/ads-footer.
+/ads-front.min.js
+/ads-frontend.min.js
+/ads-holder.
+/ads-home.js
+/ads-loader.
+/ads-rectangle.
+/ads-right.
+/ads-templateslist.
+/ads-vast-vpaid.js
+/ads.bundle.js
+/ads.bundle.min.js
+/ads.cfm?
+/ads.jplayer.
+/ads.jsp
+/ads.pl?
+/ads/!rotator/*
+/ads/300.
+/ads/acctid=
+/ads/banner-
+/ads/banners/*
+/ads/bottom.
+/ads/bottom/*
+/ads/cbr.
+/ads/common/*
+/ads/delivery.
+/ads/display/*
+/ads/footer.
+/ads/ga-audiences?
+/ads/gam_prebid-
+/ads/header.
+/ads/image/*
+/ads/images/*
+/ads/img/*
+/ads/index-
+/ads/index.
+/ads/index/*
+/ads/index_
+/ads/js/*
+/ads/leaderboard-
+/ads/leaderboard.
+/ads/native.js
+/ads/outbrain?
+/ads/player-
+/ads/popout.
+/ads/popup.
+/ads/popup_
+/ads/preroll-
+/ads/preroll/*
+/ads/preroll_
+/ads/proxy-
+/ads/rectangle_
+/ads/revgen.
+/ads/serve?
+/ads/show.
+/ads/sidebar-
+/ads/skins/*
+/ads/slideup.
+/ads/spacer.
+/ads/sponsor
+/ads/square-
+/ads/square.
+/ads/taboola/*
+/ads/top-
+/ads/top.
+/ads/tracker/*
+/ads/tso
+/ads/v/*
+/ads/v2/*
+/ads/video/*
+/ads/view.php
+/ads/view/*
+/ads/widget.
+/ads/widget/*
+/ads/www/*
+/ads/xtcore.
+/ads/yahoo/*
+/ads1.
+/ads160.
+/ads160x600-
+/ads160x600.
+/ads2/*
+/ads3.
+/ads300.
+/ads4.$domain=~ads4.city
+/ads468.
+/ads468x60.
+/ads468x60_
+/ads728.
+/ads728x90.
+/ads728x90_
+/ads?apid
+/ads?callback
+/ads?client=
+/ads?id=
+/ads?object_
+/ads?param=
+/ads?zone=
+/ads?zone_id=
+/ads_160_
+/ads_300.
+/ads_300_
+/ads_728_
+/ads_and_amp/*
+/ads_assets/*
+/ads_banner_
+/ads_banners/*
+/ads_bg.
+/ads_bottom.
+/ads_bottom_
+/ads_controller.js
+/ads_dfp/*
+/ads_display.
+/ads_files/*
+/ads_footer.
+/ads_frame.
+/ads_iframe.
+/ads_image/*
+/ads_images/*
+/ads_loader.
+/ads_manager.
+/ads_sidebar.
+/adsadview.
+/AdsAjaxRefresh.
+/adsAPI.$domain=~snap.com|~snapchat.com
+/adsbanner-
+/adsbanner.
+/adsbanner/*
+/adsbb.
+/adsbox.$~script,domain=~adsbox.com.sg|~adsbox.in
+/adscontrol.
+/adscontroller.
+/adscroll.js
+/adsdelivery.
+/adsdelivery/*
+/adserv.
+/adserve/*
+/adserver-
+/adserver.$~xmlhttprequest,domain=~konograma.com
+/adserver1-
+/adserver1.
+/adserver2.
+/adserver2/*
+/adserver3.
+/adserver?
+/adserving.
+/adserv|*|adtech;
+/adsheader.
+/adsimage/*
+/adsimages/*
+/adsImg/*
+/adsinclude.
+/adsinteractive-
+/adskyright.
+/adskyscraper.
+/adslide.
+/adslider-
+/adslides.
+/AdsLoad.
+/adsmanager.nsf/*
+/adsmanager/*$domain=~github.com
+/adsManagerV2.
+/adsmm.dll/*
+/adspan.
+/adsplay.
+/AdsPlugin.
+/adsPlugin/*
+/adsponsor.
+/adspot.$domain=~adspot.lt
+/adspot/*
+/adspromo.
+/adsremote.
+/adsright.$domain=~adsright.pl
+/adsrotate.
+/adsrotator.
+/adsrv.
+/adsscript.
+/adsserv.
+/adsserver.
+/adsservice.
+/adstracking.
+/adstream.
+/adstream_
+/adswrapper.
+/adsystem/*
+/ads~adsize~
+/adtech;
+/adtext.
+/adTools.
+/adtrack.$domain=~adtrack.ca|~adtrack.yacast.fr
+/adunit/track-view
+/adunits.
+/adunits/bcid?
+/adUnitsBreakpoints.
+/adUnitsData.
+/adutil.
+/adutils.
+/adv-banner-
+/adv-mobile.
+/adv-scroll-sidebar.js
+/adv-scroll.
+/adv-socialbar-scroll.js
+/adv.css?
+/adv/adriver
+/adv/mjx.js
+/adv_2.
+/adv_468.
+/adv_468_
+/adv_ads_
+/adv_banner_
+/adv_box_
+/adv_out.js
+/adv_teasers.js
+/adv_vert.js
+/advanced-ads-$domain=~wordpress.org
+/advbanner/*$~image
+/advbanners/*$~image
+/advert.$~script,domain=~advert.ae|~advert.club|~advert.com.tr|~advert.ee|~advert.ge|~advert.io|~advert.media|~advert.org.pl|~motortrader.com.my
+/advert01.
+/advert2.
+/advert24.
+/advert3.
+/advert4.
+/advert5.
+/advert6.
+/advert8.
+/advert?
+/advertbanner.
+/advertising/banner_
+/advertising/banners/*
+/advertisingWebRenderer.min.js
+/advertisment-
+/advertisment/*$~image
+/advertisment_
+/adverts.$~script,domain=~0xacab.org|~adverts.ie|~adverts.org.ua|~github.com|~gitlab.com
+/adverts/*$~xmlhttprequest
+/adverts_
+/advrotator.js
+/advrotator_
+/advscript.js
+/advtBanner.
+/adwidget_
+/adwidgets/*
+/adx2.
+/adx_exo_
+/adz/js/*
+/adzones.js
+/aff-ads.
+/aff/ads_
+/aff/banners/*
+/aff/images/*
+/aff_ad?$script
+/aff_banner/*
+/aff_banners/*
+/affad?
+/affads/*
+/affbanner/*
+/affbanners/*
+/affiliate/ad/*
+/affiliate/ads/*
+/affiliate/banner/*
+/affiliate/banners/*
+/affiliateads/*
+/affiliates/banner
+/afr.php?
+/ajaxAd?
+/ajs.php?
+/ajs?zoneid=
+/ak-ads-ns.
+/amazon-ad-
+/amazon-associates-link-$~stylesheet
+/amp-ad-
+/amp-connatix-
+/amp4ads-host-v0.js
+/ane-popup-banner.js
+/ane-popup.js
+/ane-preroll/preroll.js
+/annonse.$domain=~annonse.nu
+/annonser.
+/api-ads.
+/api.ad.
+/api.ads.$domain=~ads.instacart.com|~www.ads.com
+/Api/Ad.
+/api/ads/*
+/api/ads?
+/api/v1/ad/*
+/apopwin.js
+/app/manga/themes/*/ads/pop.js
+/apu.php?
+/arcads.js
+/asset/ad/*
+/assets/ads/*$~image,domain=~outlook.live.com
+/asyncjs.php
+/asyncspc.php
+/auto.ad.
+/awaps-ad-sdk-$script
+/awe2.js
+/background_ad_
+/ban.php?
+/ban160.php
+/ban300.html
+/ban300.php
+/ban728.html
+/ban728.php
+/ban728x90.
+/banner-ad-
+/banner-ad.$~script
+/banner-ad/*
+/banner-ad_
+/banner-ads-
+/banner-ads/*
+/banner-adv-
+/banner-affiliate-
+/banner.asp?$third-party
+/banner.cgi?
+/banner.php
+/banner/ad/*
+/banner/ad_
+/banner/ads/*
+/banner/affiliate/*
+/banner/html/zone?zid=
+/banner/sponsor_
+/banner/sponsors.
+/banner_468.
+/banner_ad_
+/banner_ads/*
+/banner_ads_
+/bannerad.
+/bannerad/*
+/bannerad3.js
+/bannerads.
+/bannerads/*
+/banners.*/go/page/*
+/banners.*/piclist?
+/banners.cgi?
+/banners/468
+/banners/728
+/banners/ad/*
+/banners/ads-
+/banners/ads.
+/banners/adv/*
+/banners/adv_
+/banners/aff.
+/banners/affil/*
+/banners/affiliate/*
+/banners/affiliates/*
+/banners/ffadult/*
+/bannersAds_
+/bannerscript/*
+/bannerserve/*
+/bannerserver/*
+/bannerserver?
+/beacon/ad/*
+/beacon/ads/*
+/bg-advert-
+/blogad.
+/blogad_
+/bottom-ads.
+/bottom_ad.
+/bottom_ads.
+/bottomad.
+/bottomads.
+/box_ad_
+/brightcovead.
+/bsa-plugin-pro-
+/bsa-pro-
+/buysellads.
+/call/pubif/*
+/call/pubj/*
+/callAdserver?
+/cdn.ad.
+/cdn.ads.
+/cgi-bin/ad/*
+/cgi-bin/ads.
+/cgi-bin/ads/*
+/cgi-bin/ads_
+/click/zone?
+/click?adv=
+/clickads/*
+/clicksor.$domain=~clicksor.com
+/cms_ads.js
+/code/https-v2.js?uid=
+/code/native.js?h=$script
+/code/pops.js?h=$script
+/code/silent.js?h=$script
+/com/superherosnout/*
+/combo?darla/*
+/common-ads/*
+/common/ad.
+/common/ads?
+/common/ads_
+/common/adv_
+/common_ad.
+/commons/ad/*
+/concert_ads-
+/content-ads.js
+/content/ad/*
+/content/ads/*
+/content_ad.
+/contentAd.
+/contextad.
+/contextads.
+/core-ads.
+/corner-ad.
+/couponAd.
+/cpm_ad.
+/cpmbanner.
+/cpx-ad.
+/cpxads.
+/css/ads-
+/css/adsense.
+/css/adv.
+/cubead.
+/curveball/ads/*
+/custom_ads.js
+/customad.js
+/defaults_ads/*
+/deliverad/fc.js
+/delivery.ads.
+/delivery.php?zone=
+/delivery/ag.php
+/delivery/apu.php
+/delivery/avw.php
+/delivery/fc.php
+/delivery/lg.php
+/delivery/spc.php
+/delivery_ads/*
+/dfp.min.js$third-party
+/dfp/head/*
+/dfp_async.js
+/dfpNew.min.js
+/didna_config.js
+/direct.hd?n=
+/discourse-adplugin-
+/display-ad/*
+/display-ads-$domain=~google.co.uk|~google.com|~google.com.au
+/display-ads/*
+/displayad.$~script
+/displayad/*
+/displayad?
+/displayAdFrame.
+/displayads.
+/displayads/*
+/dmcads_$script
+/doubleclick.aspx
+/doubleclick.min
+/doublepimp2.js
+/download-ad.
+/drsup-admanager-ajax.js
+/dynamic-ads/*
+/dynamic/ads/*
+/dynamic_ads/*
+/DynamicAd/*
+/dynamicad?
+/dynamicAds.
+/easyazon-
+/ec5bcb7487ff.js
+/emailads/*
+/embed/ad/*
+/embed_ad.
+/ero-ads-
+/ero-ads_
+/ero-advertising.
+/ero.htm
+/eroadvertising.$domain=~eroadvertising.com
+/erobanner.
+/exitpop.
+/exitpopunder.
+/exitpopup.
+/exitsplash.
+/exoads/*
+/exobanner.
+/exoclick.$~script,domain=~exoclick.bamboohr.co.uk|~exoclick.kayako.com
+/exonb/backloaderforload.php
+/expads-blocked.js
+/export/ltv_popup.php
+/exports/tour/*$third-party
+/exports/tour_20/*
+/extban/*/creatives/*
+/external/ad.
+/external/ad/*
+/external/ads/*
+/external_ad?
+/external_ads.
+/externalad.
+/externalads/*
+/fc_ads.
+/fel456.js$script
+/files/ad/*
+/flashad.
+/flashad3.
+/flashads.$domain=~flashads.co.id
+/flashads/*
+/fleshlight.$domain=~fleshlight.com|~fleshlight.zendesk.com
+/fload.js
+/float-ads/*
+/float_ad.
+/floatad_
+/floatads.
+/floatadv.js
+/floater_ad.
+/floating-ad-
+/floatingad.
+/FloatingAd_
+/floatingads.
+/flyad.js
+/footer-ad-
+/footer-ad.$~script
+/footer_ad.
+/footer_ad_
+/footer_ads.
+/footer_ads_
+/footerad.
+/footerad?
+/footerads.
+/footerads/*
+/forum/ads/*
+/forum/ads_
+/forum_ad.
+/forums/ad/*
+/fro_lo.js
+/froloa.js
+/frontend/ads/*
+/frontend_loader.js
+/funcript*.php?pub=
+/gdpr-ad-script.
+/generate_ad.
+/generate_ads.
+/generateAds.
+/generateadtag.
+/get-ads-by-zones/*
+/get/?go=1&data=
+/get?go=1&data=
+/getad?
+/getads?
+/getAdsysCode?
+/GetAdvertisingLeft?
+/google-adsense.js
+/google-dfp-native.
+/google_adsense-
+/google_afs_widget/*
+/google_caf.js?
+/googleAdsManager.js
+/googleafc.js
+/googleafs.js
+/gpt.js$script,xmlhttprequest
+/gpt_ads-public.js
+/headerads1.php
+/homepage_ads/*$domain=~swedishbeauty.com
+/house-ad.js
+/house-ads/*$image
+/housead.$domain=~housead.ru
+/housead/*
+/housead_
+/houseads.
+/houseads/*
+/hoverad.js
+/hserver/*
+/ht.js?site_
+/html.ng/*
+/html/ad.
+/html/ad/*
+/html/ads/*
+/im-popup/*
+/im.cams.
+/ima/ads_
+/image/ad/*
+/image/ads/*
+/image/ads_
+/image/affiliate/*
+/image_ads/*
+/imageads/*
+/images-ad/*
+/images/ad2/*
+/images/ads-$domain=~ads.com
+/images/ads_
+/images/adv/*
+/images/adv_
+/images/adz/*
+/images2/Ads/*
+/imfloat.
+/img/ad/*
+/img/ads/*$domain=~save.ca
+/img/aff/*
+/img_ad/*
+/impop.
+/in/show/?mid=$third-party
+/include/ad/*
+/include/ad_
+/includes/ads/*
+/index-ad-
+/index-ad.
+/index_ad/*
+/index_ads.
+/infinity.js.aspx?
+/inhouse_ads/*
+/injectad.
+/inline_ad.
+/inline_ad_
+/inline_ads.
+/InlineAds.
+/inlineads/*
+/inner-ads-
+/inner-ads/*
+/innerads.
+/insertAd.
+/insertads.
+/internAds.
+/Javascripts/SBA-
+/jquery-ads.
+/jquery.ad.
+/jquery.adi.js
+/jquery.adx.js
+/jquery.dfp.js
+/jquery.openxtag.js
+/jquery.php/?uid=
+/js.ad/size=
+/js.ng/cat=
+/js.ng/channel_
+/js.ng/pagepos=
+/js/doubleclick/*
+/js/ppu.$script
+/js/prebid-video.
+/js3caf.js
+/js_exit_popup.
+/js_interstitial.
+/jsad.php
+/jsAds-$script
+/jshexo.hj?lb=
+/jspopunder.
+/keyade.js
+/keyword_ad.
+/layer-ad.
+/layer-ads.
+/layerad-
+/layerad.
+/layerads_
+/layout/ads/*
+/lazy-ads.
+/lazy-ads@
+/lazyad-
+/lazyad.
+/lazyload.ads?
+/leader_ad.
+/leaderad.
+/Leaderboard-Ads-
+/leaderboardad.
+/leaderboardads.
+/left-ads.
+/left_ad_
+/left_ads.
+/leftad.
+/leftad_
+/leftads.
+/legion-advertising-atlasastro/*
+/li.blogtrottr.com/imp?
+/lijit-ad-
+/lijitads.
+/linkad2.
+/linkads.
+/linkadv.
+/linkadv_
+/liveads.
+/livejasmin.$domain=~livejasmin.com
+/livejasmin2.
+/livejasmin_
+/livejasminpopupunder.
+/load_ad?
+/local-ad.
+/localads.$domain=~localads.cab
+/log_ad?
+/log_ad_
+/logo-ad.
+/logoads.
+/logoutad.
+/longad.
+/lserver/*
+/mads.php?
+/main/ad/*
+/main_ad/*
+/mainad.$domain=~mainad.ru
+/marfeel_sw.
+/maven/am.js
+/mbads?
+/mcad.php
+/media/ads/*
+/media_ads/*
+/mellowads.
+/meme_ad.
+/metaad.
+/mgid-ad-
+/mgid-header.
+/mgid.html
+/microad.$domain=~microad.co.id
+/middleads.
+/min/ads/*
+/mnpw3.js
+/mobile-ad.
+/mobile_ad.
+/mobile_ad/*
+/mobileads.
+/mobileads/*
+/mod_ad/*
+/mod_ijoomla_adagency_zone/*
+/mod_pagepeel_banner/*
+/module-ads-html-$script
+/module-ads/*
+/module/ads/*
+/modules/ad/*
+/modules/ad_
+/modules/ads/*
+/moneyball/ads/*
+/mpuad.
+/MPUAd/*
+/mydirtyhobby.$domain=~mydirtyhobby.com|~mydirtyhobby.de|~mydirtyhobby.to
+/mysimpleads/*
+/na.ads.
+/nad_exo.
+/native-ad-
+/native-ads-
+/native_ad/*
+/nativead.
+/nativead/*
+/nativeads.
+/nativeads/*
+/nativebanner/ane-native-banner.js
+/nb/frot_lod.
+/neverblock/*
+/newad.
+/newad?
+/newads.
+/newaff/float
+/nugg.min.js
+/Nuggad?
+/nwm-fcn.min.js
+/nwm-pw2.min.js
+/nxst-advertising/dist/htlbid-advertising.min.js
+/oas-config.
+/oas_ad.
+/oas_ad_
+/oas_ads.
+/oascentral.$~object
+/oascentral/*
+/oasconfig/*
+/oiopub-direct/*$~stylesheet
+/oncc-ad.
+/openads.
+/openads/*
+/overlay-ad.
+/overlay_ad_
+/overlayads.
+/owa.MessageAdList.
+/p2/ads/*
+/p2ads/*
+/p8network.js
+/p?zoneId=
+/page-ads-
+/page-ads.
+/page-links-to/dist/new-tab.js
+/page-peel
+/page/ad/*
+/pagead.
+/pagead/1p-user-list/*
+/pagead/ads?
+/pagead/conversion.js
+/pagead/conversion/*
+/pagead/gen_
+/pagead/html/*
+/pagead/lvz?
+/pagead/osd.
+/pageear.js
+/pageear/*
+/pagepeel.
+/pagepeel/*
+/pagepeelpro.js
+/parking_caf_
+/partner-ad-
+/Partner_Ad/*
+/partner_ads/*
+/partner_ads_
+/partnerad.
+/partnerads/*
+/partnerads_
+/partneradwidget.
+/partnerbanner.
+/partnerbanner/*
+/partners/ads/*
+/pcad.js?
+/peel.php?
+/peel_ads/*
+/peelad/*
+/peelads/*
+/peeltl.js
+/pfe/current/*
+/php/ad/*
+/phpads/*
+/phpads2/*
+/phpadsnew/*
+/phpbb_ads/*
+/pioneersuspectedjury.com/*
+/pix/ads/*
+/pixel/puclc?
+/pixel/pure
+/pixel/purs?
+/pixel/purst?
+/pixel/sbe?
+/placeholder-ad-
+/player/ad/*
+/player/ads/*
+/plg_adbutlerads/*
+/plugin/ad/*
+/plugins/ad-invalid-click-protector/*$script
+/plugins/adrotate-pro/*
+/plugins/adrotate/*
+/plugins/ads-
+/plugins/ads/*
+/plugins/adsanity-
+/plugins/advanced-ads/*$domain=~wordpress.org
+/plugins/ane-banners-entre-links/*
+/plugins/ane-preroll-
+/plugins/cactus-ads/*$script,stylesheet
+/plugins/cpx-advert/*$script
+/plugins/dx-ads/*$script
+/plugins/meks-easy-ads-widget/*
+/plugins/mts-wp-in-post-ads/*
+/plugins/page-cornr-
+/plugins/popunderpro/*
+/plugins/thirstyaffiliates/*
+/plugins/ultimate-popunder/*$~stylesheet
+/plugins/wp-advertising/*
+/plugins/wp-moreads/*$~stylesheet
+/plugins/wp125/*$~stylesheet
+/plugins/wp_actionpop/*
+/plugins_ads_
+/pm_ads/*
+/poll-ad-
+/pop-under.
+/pop_8_2.js
+/pop_ad.
+/pop_ads.
+/pop_under.
+/pop_under/*
+/popads/*
+/popads_
+/popu.js
+/popunder-
+/popunder/*
+/popunder1.
+/popunder1_
+/popunder2.
+/popunder4.
+/popunder5.
+/popunder7.
+/popunder?
+/popunder_
+/popunderjs/*
+/popunders/*
+/popundr.
+/popundr/*
+/popup-domination/*$~stylesheet
+/popup2.js
+/popup3.js
+/popup_ad.
+/popup_code.
+/popupad/*
+/popupads.
+/popupunder.
+/pounder-$~image
+/ppd_ads.
+/ppd_ads_
+/predictad.
+/prehead/ads_
+/premium_ad.
+/premiumads/*
+/prerollad.
+/prerollads.
+/prism_ad/*$script
+/processing/impressions.asp?
+/production/ad-
+/production/ads/*
+/promo/ad_
+/promo/ads/*
+/promo/affiframe.
+/PromosAds/*
+/promotools.
+/propellerad.
+/propellerads.$domain=~propellerads.com
+/proto2ad.
+/provider_ads/*
+/proxyadcall?
+/pub/ad/*
+/pub/ads/*
+/pubad.$domain=~pubad.gov.lk
+/pubads.
+/pubads_
+/public/ad/*
+/public/ads/*
+/public/ads_
+/publicidad.$~object,~stylesheet
+/publicidad/*
+/publicidad_$~stylesheet
+/publicidade.
+/publicidade/*
+/publicidades/*
+/puff_ad?
+/punder-rotate.
+/punder.php
+/pup-a9-header-bidder/*
+/purch-ad-
+/pushdownAd.
+/pustrck.js
+/radioAdEmbed.
+/radioAdEmbedGPT.
+/rail_ad_
+/railad.
+/rcom-ads-
+/rcom-ads.
+/rcom-video-ads.
+/rcsad_
+/rdm-ad-
+/RdmAdFeed.
+/rdrr/renderer.js
+/re-ads-
+/realmedia/ads/*
+/realmedia_mjx.
+/reclama/*
+/rect_ad.
+/rectangle_ad.
+/redirect/?spot_id=
+/redirect?tid=
+/redirect_awe.
+/refreshads-
+/reklam.$domain=~github.com|~reklam.com.tr
+/reklam/*$domain=~cloudflare.com|~github.com|~reklam.com.tr
+/reklama/*$domain=~github.com
+/reklama1.
+/reklama2.
+/reklama3.
+/reklama4.
+/reklama5.$domain=~reklama5.mk
+/reklame/*
+/related-ads.
+/relatedads.
+/remove-ads.
+/remove_ads.
+/ren.gif?
+/report_ad.
+/report_ad_
+/resources/ad.
+/resources/ads/*
+/resources/ads_
+/responsive-ads.
+/responsive/ad_
+/responsive_ads.
+/revcontent.
+/right-ad-
+/right_ad.
+/right_ad_
+/right_ads.
+/rightad.
+/rightad/*
+/rightads.$domain=~rightads.co.uk
+/rolloverads/*
+/rotatingad.
+/rotationad.
+/s.ashx?btag
+/sbar.json?key=
+/sc-tagmanager/*
+/script/java.php?$xmlhttprequest
+/script/nasu.js$third-party
+/script/nrsu.js$third-party
+/script/nwsu.js$third-party
+/script/oas/*
+/script/suurl4.php?$third-party
+/script/ut.js?cb=$third-party
+/script/wait.php?*=$xmlhttprequest
+/scripts/afc/*
+/scripts/chatur.js
+/sdk/push_web/?zid=
+/searchad.
+/secureads.
+/select_adv?
+/servead/request/*
+/serveads.php
+/service/ad/*
+/service/ads/*
+/service/adv/*
+/servlet/view/*
+/set_adcode?
+/show-ad.
+/show_ad.
+/show_ad?
+/show_ad_
+/show_ads_
+/showadvert.
+/showadvertising.
+/showban.asp?
+/showbanner.
+/side-ad-
+/side-ad.
+/side-ads-
+/side-ads/*
+/side_ads/*
+/sidead.
+/sidead1.
+/sidead2.
+/sidead3.
+/sideads.
+/sideads/*
+/sidebar-ad-
+/sidebar-ads/*
+/sidebar_ad.
+/sidebar_ads/*
+/sidebarad/*
+/SidebarAds.
+/site-advert.
+/site=*/size=*/viewid=
+/site=*/viewid=*/size=
+/site_ads/*
+/siteads.
+/siteads/*
+/siteadvert.
+/size=*/random=*/viewid=
+/skin-ad_
+/skin/ad/*
+/skin/adv/*
+/skin3/ads/*
+/skin_ad-
+/skinad.
+/skinads/*
+/skins/ads/*
+/skyadright.
+/skyscraper_ad_
+/skyscraperad.
+/slide_in_ads_
+/slideadverts/*
+/slideinad.
+/slideoutad.
+/slider-ad-
+/slider.ad.
+/slider_ad.
+/sliderAd/*
+/sliderad3.
+/SliderAd_
+/sliderAds.
+/slideshow/ads.
+/slidetopad.
+/small_ad.
+/small_ads/*
+/smallad-
+/smartad-
+/smartad.$domain=~smartad.ai
+/smartadserver/*$domain=~smartadserver.com|~smartadserver.de|~smartadserver.fr
+/smartlinks.epl?
+/soralink.js
+/soralink/*$~stylesheet
+/sp/delivery/*
+/space_ad.
+/spacedesc=
+/spc.php
+/spcjs.php
+/special_ad.
+/special_ads.
+/special_ads/*
+/specialads/*
+/specialctrl.js
+/spiderad/*
+/splash_ads_
+/sponlink.
+/sponslink_
+/sponsor-ad
+/sponsor-banner.
+/sponsor-box?
+/sponsor-links.
+/sponsor_ads.
+/sponsorad.
+/sponsorad2.
+/sponsoradds/*
+/sponsorads/*
+/sponsorbanners/*
+/sponsorbg/*
+/sponsored-links-
+/sponsored-links.
+/sponsored-links/*
+/sponsored-widget
+/sponsored_ad.
+/sponsored_ad/*
+/sponsored_ad_
+/sponsored_ads/*
+/sponsored_link.
+/sponsored_links_
+/sponsored_text.
+/sponsored_title.
+/sponsoredads/*
+/sponsoredlinks.
+/sponsoredlinks/*
+/sponsoredlinks?
+/sponsoredlisting.
+/sponsors-ads/*
+/sponsors/popunder.
+/sponsors_box.
+/spotx_adapter.
+/spotxchangeplugin.
+/spotxchangevpaid.
+/squaread.
+/squareads.
+/static-ad-
+/static.ad.
+/static/ad/*
+/static/ad_
+/static/js/4728ba74bc.js$~third-party
+/sticky-ad-
+/sticky-ads-
+/sticky_ad.
+/sticky_ads.
+/stickyad.
+/stickyads.
+/story_ad.
+/story_ads_
+/storyads.
+/style_ad.
+/subAd.
+/suv4.js
+/SWMAdPlayer.
+/sync2ad.
+/syndication/ad.
+/sys/ad/*
+/system/ad/*
+/taboola-footer.js
+/taboola-header.js
+/taboola_7.4.1.js
+/taboola_header.js
+/taboolaarticle.min.js
+/targetingAd.
+/targetpushad.
+/td-ads-
+/tds-ads-
+/technomedia.$domain=~technomedia.co
+/template/ad.
+/templates/ad.
+/templates/ad/*
+/templates/ads/*
+/theologicalpresentation.com/*
+/third-party/dfp/*
+/thirdparty/ad/*
+/tikilink?
+/tncms/ads/*
+/tnt.ads.
+/top-ad.
+/top-ads.
+/top_ad.
+/top_ads.
+/tremoradrenderer.
+/triadshow.
+/ttj?id=
+/utx?cb=$third-party
+/v1/ads/*
+/v2/a/push/js/*
+/v2/ads/*
+/v3/ads/*
+/v3/ads?
+/v5/ads/*
+/v7/ads/*
+/v9/adv/*
+/valnet-header-ads.
+/vast/?zid=
+/VASTAdPlugin.
+/vclkads.
+/vendor-ads-
+/vendors~ads.
+/vert_ad.
+/vghd.gif
+/vghd2.gif
+/video-ad-overlay.
+/video-ad.
+/video-ads-player.
+/video-js-ads.
+/video.ads.
+/video/ad/*
+/video/ads/*
+/video2adrenderer.
+/video_ad.
+/video_ad_
+/video_ads.
+/video_ads/*
+/video_slider3.js
+/videoad.$domain=~videoad.in
+/VideoAd/*
+/VideoAdContent?
+/videoadrenderer.
+/videoadroll.
+/videoads/*
+/videoadv-
+/videoadv.
+/videojs.ads-
+/videojs.sda.
+/view/ad/*
+/view/ads/*
+/view/banner/*
+/view_banner.
+/viewad.
+/viewad/*
+/viewad?
+/viewbannerad.
+/views-native-ads.
+/views/ads/*
+/virtuagirl/*
+/virtuagirl3.
+/virtuagirlhd.
+/virtual_girl_
+/virtualgirl/*
+/virtualgirlhd-
+/vnads/*
+/vpaidad3.
+/vpaidadrenderer.
+/vplayerad.
+/web-ad_
+/web/ads/*
+/web_ads/*
+/webads.
+/webads/*
+/webads_
+/webadserver.
+/webadvert.$domain=~webadvert.ru
+/webadvert3/*
+/webadverts/*
+/weborama.js
+/webparts/ads/*
+/welcome_ad.
+/welcomead.
+/widget-advert.
+/widget-advert?
+/widget/ads.
+/widget/ads/*
+/widgetad.
+/widgets/ads.
+/widgets/sponsored/*
+/wordpress-ads-plug-in/*
+/wp-ad.min.
+/wp-auto-affiliate-links/*
+/wp-bannerize-
+/wp-bannerize.
+/wp-bannerize/*
+/wp-banners/*$~image
+/wp-content/ads/*
+/wp-content/mbp-banner/*
+/wp-content/plugins/amazon-auto-links/*
+/wp-content/plugins/amazon-product-in-a-post-plugin/*
+/wp-content/plugins/automatic-social-locker/*
+/wp-content/plugins/banner-manager/*
+/wp-content/plugins/bhcb/lock.js
+/wp-content/plugins/bookingcom-banner-creator/*
+/wp-content/plugins/bookingcom-text2links/*
+/wp-content/plugins/fasterim-optin/*
+/wp-content/plugins/m-wp-popup/*$~stylesheet
+/wp-content/plugins/platinumpopup/*
+/wp-content/plugins/popad/*
+/wp-content/plugins/the-moneytizer/*
+/wp-content/plugins/useful-banner-manager/*
+/wp-content/plugins/wp-ad-guru/*
+/wp-content/plugins/wp-super-popup-pro/*
+/wp-content/plugins/wp-super-popup/*$~stylesheet
+/wp-content/uploads/useful_banner_manager_banners/*
+/wp-popup-scheduler/*
+/wp-srv/ad/*
+/wp_pro_ad_system/*
+/wpadgu-
+/wpbanners_show.php
+/wppas.
+/wppas/*
+/wppas_
+/wpx-bannerize_
+/wrapper/ads/*
+/www/ad/*
+/www/ad_
+/www/ads/*
+/www/deliver/*
+/www/deliverx/*
+/www/delivery/*
+/www/js/ad/*
+/wwwad.
+/wwwads.
+/xads.php
+/xadvertisement.
+/xclicks.
+/xpopunder.
+/xpopup.js
+/yhs/ads?
+/yume_ad_library_
+/zanox/banner/*
+/zcredirect?
+/zcvisitor/*
+/~cdn/ads/*
+://a.*/ad-provider.js$third-party
+://a.ads.
+://ad-api-
+://ad1.
+://adn.*/zone/$subdocument
+://ads.$~image,domain=~ads.8designers.com|~ads.ac.uk|~ads.adstream.com.ro|~ads.allegro.pl|~ads.am|~ads.amazon|~ads.apple.com|~ads.atmosphere.copernicus.eu|~ads.band|~ads.bestprints.biz|~ads.bikepump.com|~ads.brave.com|~ads.buscaempresas.co|~ads.cafebazaar.ir|~ads.colombiaonline.com|~ads.comeon.com|~ads.cvut.cz|~ads.doordash.com|~ads.dosocial.ge|~ads.dosocial.me|~ads.elevateplatform.co.uk|~ads.finance|~ads.google.com|~ads.gree.net|~ads.gurkerl.at|~ads.harvard.edu|~ads.instacart.com|~ads.jiosaavn.com|~ads.kaipoke.biz|~ads.kazakh-zerno.net|~ads.kifli.hu|~ads.knuspr.de|~ads.listonic.com|~ads.magalu.com|~ads.mba|~ads.mercadolivre.com.br|~ads.mgid.com|~ads.microsoft.com|~ads.midwayusa.com|~ads.mobilebet.com|~ads.msstate.edu|~ads.mst.dk|~ads.mt|~ads.nc|~ads.nipr.ac.jp|~ads.olx.pl|~ads.pinterest.com|~ads.quasaraffiliates.com|~ads.red|~ads.rohlik.cz|~ads.route.cc|~ads.safi-gmbh.ch|~ads.scotiabank.com|~ads.selfip.com|~ads.shopee.cn|~ads.shopee.co.th|~ads.shopee.com.br|~ads.shopee.com.mx|~ads.shopee.com.my|~ads.shopee.kr|~ads.shopee.ph|~ads.shopee.pl|~ads.shopee.sg|~ads.shopee.tw|~ads.shopee.vn|~ads.smartnews.com|~ads.snapchat.com|~ads.socialtheater.com|~ads.spotify.com|~ads.studyplus.co.jp|~ads.taboola.com|~ads.tiktok.com|~ads.twitter.com|~ads.typepad.jp|~ads.us.tiktok.com|~ads.viksaffiliates.com|~ads.vk.com|~ads.watson.ch|~badassembly.com|~caravansforsale.co.uk|~fusac.fr|~memo2.nl|~reempresa.org|~satmetrix.com|~seriouswheels.com
+://ads2.
+://adv.$domain=~adv.asahi.com|~adv.bet|~adv.blue|~adv.cincsys.com|~adv.cryptonetlabs.it|~adv.derfunke.at|~adv.design|~adv.digimatix.ru|~adv.ec|~adv.ee|~adv.gg|~adv.kompas.id|~adv.lack-girl.com|~adv.michaelgat.com|~adv.msk.ru|~adv.peronihorowicz.com.br|~adv.rest|~adv.ru|~adv.tools|~adv.trinet.ru|~adv.ua|~adv.vg|~adv.vn.ua|~adv.yomiuri.co.jp|~advancedradiology.com|~advids.co|~farapp.com|~pracuj.pl|~r7.com|~typeform.com|~welaika.com
+://affiliate.$third-party
+://affiliates.$third-party
+://affiliates2.$third-party
+://banner.$third-party
+://banners.$third-party
+://news-*/process.js?id=$third-party
+://news-*/v2-sw.js$third-party
+://promo.$~media,third-party,domain=~myshopify.com|~promo.com|~shopifycloud.com|~slidely.com
+://pt.*?psid=$third-party
+=half-page-ad&
+?ab=1&zoneid=
+?adspot_
+?adunitid=
+?advertiser_id=$domain=~ads.pinterest.com|~panel.rightflow.com
+?bannerid=
+?cs=*&abt=0&red=1&sm=$third-party
+?service=ad&
+?whichAd=freestar&
+?wppaszoneid=
+?wpstealthadsjs=
+?zoneid=*&ab=1$script
+_ad_250.
+_ad_300.
+_ad_728_
+_ad_background.
+_ad_banner.
+_ad_bottom.
+_ad_box.
+_ad_choices.
+_ad_footer.
+_ad_footer_
+_ad_head.
+_ad_header.
+_ad_image_
+_ad_layer_
+_ad_leaderboard.
+_ad_right.
+_ad_side.
+_ad_sidebar_
+_ad_skyscraper.
+_ad_wrapper.
+_adbanner_
+_adbanners.
+_adcall.
+_adchoice.
+_adchoices.
+_adhome.
+_adlabel_
+_adnetwork.
+_adpartner.
+_adplugin.
+_adright.
+_ads.cgi
+_ads.cms?
+_ads.php?
+_ads_reporting.
+_ads_updater-
+_adscommon.
+_adscript.
+_adserve.
+_adserver.
+_adskin.
+_adskin_
+_adtitle.
+_adv_open_x/
+_advertise-$domain=~linkedin.com
+_advertise.
+_advertisment.
+_adverts.js
+_affiliate_ad.
+_assets/ads/
+_asyncspc.
+_background_ad.
+_banner_ad.
+_banner_ad_
+_Banner_Ads_
+_bannerad.
+_BannerAd_
+_bannerads_
+_bottom_ads.
+_bottom_ads_
+_commonAD.
+_companionad.
+_content_ad.
+_custom_ad.
+_custom_ad_
+_externalad.
+_footer_ad_
+_google_ads.
+_gpt_ads.
+_header_ad.
+_header_ad_
+_headerad.
+_images/ad.
+_images/ad_
+_images/ads/
+_layerad.
+_left_ad.
+_panel_ads.
+_partner_ad.
+_popunder_
+_popupunder.
+_pushads.
+_rectangle_ads.
+_reklama_$domain=~youtube.com
+_reporting_ads.
+_rightad.
+_rightad_
+_sidead.
+_sidebar_ad.
+_sidebar_ad_
+_skinad.
+_small_ad.
+_square_ad.
+_sticky_ad.
+_StickyAd.
+_survey_ad_
+_text_ads.
+_textads.
+_top_ad.
+_top_ad_
+_vertical_ad.
+_web-advert.
+_widget_ad.
+||cacheserve.*/promodisplay/
+||cacheserve.*/promodisplay?
+||online.*/promoredirect?key=
+! https://github.com/easylist/easylist/issues/11123
+/ed/fol457.
+! ad-ace (to avoid bait)
+/plugins/ad-ace/assets/js/coupons.js
+/plugins/ad-ace/assets/js/slot-slideup.js
+/plugins/ad-ace/includes/shoppable-images/*
+! readcomiconline.li
+/Ads/bid300c.aspx
+/Ads/bid728.aspx
+! Amazon
+/e/cm?$subdocument
+/e/ir?$image,script
+/in/track?data=
+/senddata?site=banner
+/senddata?site=inpage
+! propu.sh variants
+/ntfc.php?
+/pfe/current/*$script,third-party
+! Clickadu servers
+.com/src/ppu/
+/aas/r45d/vki/*
+/bultykh/ipp24/7/*
+/ceef/gdt3g0/tbt/*
+/fyckld0t/ckp/fd3w4/*
+/i/npage/*$script,third-party
+/lv/esnk/*$script,third-party
+/pn07uscr/f/tr/zavbn/*
+/q/tdl/95/dnt/*
+/sc4fr/rwff/f9ef/*
+/script/awesome.js
+/ssp/req/*/?pb=
+/t/9/heis/svewg/*
+! streamhub.gg/qehyheswr3i8 / uploadhub.to/842q2djqdfub
+/tabu/display.js
+! ezoic
+/cmbdv2.js
+/greenoaks.gif?
+! (NSFW) watchmygf.me/smutr.com/fpo.xxx pre-rollad
+/contents/other/player/*
+! (NSFW) exoads on donstick.com sites
+/myvids/click/*$script,subdocument
+/myvids/mltbn/*$script,subdocument
+/myvids/mltbn2/*$script,subdocument
+/myvids/rek/*$script,subdocument
+! https://github.com/easylist/easylist/commit/6295313
+://rs-stripe.wsj.com/stripe/image?
+! Dodgy sites
+/?l=*&s=*&mprtr=$~third-party,xmlhttprequest
+/push-skin/skin.min.js
+/search/tsc.php?
+! https://github.com/easylist/easylist/issues/5054
+/full-page-script.js$script
+! bc.vc (https://github.com/NanoMeow/QuickReports/issues/198)
+/earn.php?z=$popup,subdocument
+! https://github.com/uBlockOrigin/uAssets/issues/2364
+/pop2.js
+! Ad-insertion script (see on: celebrityweightloss.com, myfirstclasslife.com, cultofmac.com)
+/beardeddragon/armadillo.js
+/beardeddragon/drake.js
+/beardeddragon/gilamonster.js
+/beardeddragon/tortoise.js
+/beardeddragon/turtle.js
+/detroitchicago/anaheim.js
+/detroitchicago/augusta.js
+/detroitchicago/boise.js
+/detroitchicago/denver.js
+/detroitchicago/gateway.js
+/detroitchicago/houston.js
+/detroitchicago/kenai.js
+/detroitchicago/memphis.js
+/detroitchicago/minneapolis.js
+/detroitchicago/portland.js
+/detroitchicago/raleigh.js
+/detroitchicago/reportads.js
+/detroitchicago/rochester.js
+/detroitchicago/sidebarwall.js
+/detroitchicago/springfield.js
+/detroitchicago/stickyfix.js
+/detroitchicago/tampa.js
+/detroitchicago/tulsa.js
+/detroitchicago/tuscon.js
+/detroitchicago/vista.js
+/detroitchicago/vpp.gif?
+/detroitchicago/wichita.js
+/edmonton.webp$script
+/ez_aba_load/*
+/ezcl.webp?
+/ezf-min.$script
+/ezo/*$script,~third-party,domain=~yandex.by|~yandex.com|~yandex.kz|~yandex.ru|~yandex.ua
+/ezoic/*$script,~third-party
+/jellyfish.webp$script
+/parsonsmaize/abilene.js
+/parsonsmaize/chanute.js
+/parsonsmaize/mulvane.js
+/parsonsmaize/olathe.js
+/tardisrocinante/austin.js
+/tardisrocinante/vitals.js
+! prebid scripts
+-prebid/
+.prebid-bundle.
+.prebid.$domain=~prebid.org
+/_js/prbd_6.19.0.js
+/ad/postbid_
+/adn-hb/*
+/ads/prebid_
+/AudienceNetworkPrebid.
+/ext/prebid
+/gpt_and_prebid/*
+/pbjsandwich-
+/pbjsandwich.
+/porpoiseant/*
+/prebid-js-
+/prebid-min-
+/prebid-pro.
+/prebid-sdk.
+/prebid-worker/*
+/prebid.$domain=~prebid.org
+/prebid/*$script
+/prebid1.
+/prebid2.
+/prebid3.
+/prebid35.
+/prebid4.
+/prebid5.
+/prebid6.
+/prebid7.
+/prebid8.
+/prebid?
+/prebid_$script,third-party
+/prebid_v4.
+/prebidAdcall.
+/prebidjs/*
+/prebidLibrary.
+/prebidlink/*
+/prodprebidheader-
+/pubfig.min.js
+/tagman/*$domain=~abelssoft.de
+_prebid.js
+_prebid8.
+! Invideo adverts
+/stn-player.
+/stn-player/*
+&sadbl=1&chu=
+?zoneid=*&ab=1
+! linkbucks.com script
+/webservices/jsparselinks.aspx?$script
+! adinsertion used on gizmodo.in lifehacker.co.in
+/datomata.widget.js
+! domain parking redirection
+/affiliate/referral.asp?site=*&aff_id=
+/bdv_rd2.dbm?enparms
+/jscheck.php?enc=$xmlhttprequest
+/match-*/mf_*/feed
+! White papers insert
+/sl/assetlisting/?
+! Peel script
+/jquery.peelback.
+! Anti-Adblock
+-adblocker-detection/
+-detect-adblock.
+/abtest_ab.js
+/ad-blocking-advisor/*
+/ad-blocking-alert/*
+/adb_detector.
+/adblock-alerter/*
+/adblock-blocker/*
+/adblock-detect.
+/adblock-detector.
+/adblock-message.
+/adblock-notify-by-bweb/*
+/adblock-relief/*
+/adblock.gif?
+/adblock_detect.
+/adblock_detector.
+/adblock_detector2.
+/adblock_logger.
+/adblockdetect.
+/adblockdetection.
+/adBlockDetector/*
+/adblocker-leader.
+/adBlockerTrack_
+/adblockkiller.
+/adbuddy.$domain=~adbuddy.be|~adbuddy.beeldstudio.be
+/ads-blocking-detector.
+/anti-adblock/*$~stylesheet
+/anti_ab.
+/antiblock_script/*
+/blockblock/blockblock.jquery.js
+/BlockerBanner/*$xmlhttprequest
+/Disable%2BAdblock.
+/disabled_adBlock.
+/ibd-block-adblocker/*
+/jgc-adblocker-
+/jgcabd-detect-
+/no-adblock/*
+/wp-content/plugins/anti-block/*
+/wp-content/plugins/anti_ad_blocker/*
+_atblockdetector/
+
+! *** easylist:easylist/easylist_general_block_dimensions.txt ***
+-120-600.
+-120_600_
+-120x600-
+-120x600.
+-120x600_
+-160-600.
+-160x600-
+-160x600.
+-160x600_
+-300-250.
+-300x250-$~xmlhttprequest
+-300x250_
+-300x600.
+-460x68.
+-468-100.
+-468-60-
+-468-60.
+-468-60_
+-468_60.
+-468x60-
+-468x60.
+-468x60/
+-468x60_
+-468x70.
+-468x80-$image
+-468x80.
+-468x80/
+-468x80_
+-468x90.
+-480x60-
+-480x60.
+-480x60/
+-480x60_
+-486x60.
+-500x100.
+-600x70.
+-600x90-
+-720x90-
+-720x90.
+-728-90-
+-728-90.
+-728.90.
+-728x90-
+-728x90.
+-728x90/
+-728x90_
+-729x91-
+-780x90-
+-980x60-
+-988x60.
+.120x600.
+.160x600.
+.160x600_
+.300x250.
+.300x250_
+.468x60-
+.468x60.
+.468x60/
+.468x60_
+.468x80-
+.468x80.
+.468x80/
+.468x80_
+.480x60-
+.480x60.
+.480x60/
+.480x60_
+.728x90-
+.728x90/
+.728x90_
+.900x100.
+/120-600-
+/120-600.
+/120_600.
+/120_600/*
+/120_600_
+/120x600-
+/120x600.
+/120x600/*
+/120x600_
+/125x600-
+/125x600_
+/130x600-
+/160-600-
+/160-600.
+/160_600.
+/160_600_
+/160x400-
+/160x400_
+/160x600-
+/160x600.
+/160x600/*
+/160x600_
+/190_900.
+/300-250-
+/300-250.
+/300-600_
+/300_250_
+/300x150_
+/300x250-
+/300x250.$image
+/300x250_
+/300x250b.
+/300x350.
+/300x600-
+/300x600_
+/300xx250.
+/320x250.
+/335x205_
+/336x280-
+/336x280.
+/336x280_
+/428x60.
+/460x60.
+/460x80_
+/468-20.
+/468-60-
+/468-60.
+/468-60_
+/468_60.
+/468_60_
+/468_80.
+/468_80/*
+/468x060.
+/468x060_
+/468x150-
+/468x280.
+/468x280_
+/468x60-
+/468x60.$~script
+/468x60/*
+/468x60_
+/468x70-
+/468x72.
+/468x72_
+/468x80-
+/468x80.
+/468x80_
+/470x030_
+/480x030.
+/480x030_
+/480x60-
+/480x60.
+/480x60/*
+/480x60_
+/480x70_
+/486x60_
+/496_98_
+/600-160-
+/600-60.
+/600-90.
+/600_120_
+/600_90_
+/600x75_
+/600x90.
+/60x468.
+/640x100/*
+/640x80-
+/660x120_
+/660x60.
+/700_100_
+/700_200.
+/700x100.
+/728-90-
+/728-90.
+/728-90/*
+/728-90_
+/728_200.
+/728_200_
+/728_90.
+/728_90/*
+/728_90_
+/728x90-
+/728x90.
+/728x90/*
+/728x90_
+/750-100.
+/750_150.
+/750x100.
+/760x120.
+/760x120_
+/760x90_
+/768x90-
+/768x90.
+/780x90.
+/800x160/*
+/800x90.
+/80x468_
+/960_60_
+/980x90.
+=300x250/
+=300x250_
+=336x280,
+=468x60/
+=468x60_
+=468x80_
+=728x90/
+_120_600.
+_120_600_
+_120x240.
+_120x240_
+_120x500.
+_120x600-
+_120x600.
+_120x600_
+_125x600_
+_128x600.
+_140x600.
+_140x600_
+_150x700_
+_160-600.
+_160_600.
+_160_600_
+_160x300.
+_160x300_
+_160x350.
+_160x400.
+_160x600-
+_160x600.
+_160x600/
+_160x600_
+_300-250-
+_300x250-
+_300x250.
+_300x250_
+_300x600.
+_300x600_
+_320x250_
+_323x120_
+_336x120.
+_350_100.
+_350_100_
+_350x100.
+_400-80.
+_400x60.
+_400x68.
+_420x80.
+_420x80_
+_438x50.
+_438x60.
+_438x60_
+_460_60.
+_460x60.
+_468-60.
+_468-60_
+_468_60-
+_468_60.
+_468_60_
+_468_80.
+_468_80_
+_468x060-
+_468x060.
+_468x060_
+_468x100.
+_468x100_
+_468x118.
+_468x120.
+_468x60-
+_468x60.
+_468x60/
+_468x60_
+_468x60b.
+_468x80-
+_468x80.
+_468x80/
+_468x80_
+_468x90.
+_468x90_
+_480_60.
+_480_80_
+_480x60-
+_480x60.
+_480x60/
+_480x60_
+_486x60.
+_486x60_
+_700_100_
+_700_150_
+_700_200_
+_720_90.
+_720x90.
+_720x90_
+_728-90.
+_728-90_
+_728_90.
+_728_90_
+_728x60.
+_728x90-
+_728x90.
+_728x90/
+_728x90_
+_750x100.
+_760x100.
+_768x90_
+_800x100.
+_800x80_
+
+! *** easylist:easylist/easylist_general_block_popup.txt ***
+&popunder=$popup
+&popundersPerIP=$popup
+&zoneid=*&ad_$popup
+&zoneid=*&direct=$popup
+.co/ads/$popup
+.com/ads?$popup
+.fuse-cloud.com/$popup
+.net/adx.php?$popup
+.prtrackings.com$popup
+/?placement=*&redirect$popup
+/?redirect&placement=$popup
+/?zoneid=*&timeout=$popup
+/_xa/ads?$popup
+/a/display.php?$popup
+/ad.php?tag=$popup
+/ad.php?zone$popup
+/ad/display.php$popup
+/ad/window.php?$popup
+/ad_pop.php?$popup
+/adclick.$popup
+/adClick/*$popup
+/adClick?$popup
+/AdHandler.aspx?$popup
+/adpreview?$popup
+/ads/click?$popup
+/adServe/*$popup
+/adserver.$popup
+/AdServer/*$popup,third-party
+/adstream_sx.ads/*$popup
+/adx.php?source=$popup
+/aff_ad?$popup
+/afu.php?$popup
+/click?adv=$popup
+/gtm.js?$popup
+/links/popad$popup
+/out?zoneId=$popup
+/pop-imp/*$popup
+/pop.go?ctrlid=$popup
+/popunder.$popup
+/popunder/in/click/*$popup
+/popunder_$popup
+/popupads.$popup
+/prod/go.html?$popup
+/prod/redirect.html?lu=$popup
+/redirect/?spot_id=$popup
+/redirect?tid=$popup
+/show?bver=$popup
+/smartpop/*$popup
+/tr?id=*&tk=$popup
+/zcredirect?$popup
+/zcvisitor/*$popup
+/zp-redirect?$popup
+://adn.*/zone/$popup
+://ads.$popup,domain=~smartnews.com
+://adv.$popup,domain=~adv.kompas.id|~adv.lack-girl.com
+! Commonly used popup scripts on movie/tv streaming sites
+|javascript:*setTimeout$popup
+|javascript:*window.location$popup
+! Used with many websites to generate multiple popups
+|data:text$popup,domain=~clker.com
+|dddata:text$popup
+!------------------------General element hiding rules-------------------------!
+! *** easylist:easylist/easylist_general_hide.txt ***
+###AC_ad
+###AD_160
+###AD_300
+###AD_468x60
+###AD_G
+###AD_L
+###AD_ROW
+###AD_Top
+###AD_text
+###ADbox
+###Ad-3-Slider
+###Ad-4-Slider
+###Ad-Container
+###Ad-Content
+###Ad-Top
+###AdBanner
+###AdBar
+###AdBigBox
+###AdBillboard
+###AdBlock
+###AdBottomLeader
+###AdBottomRight
+###AdBox2
+###AdColumn
+###AdContainerTop
+###AdContent
+###AdContent_0_0_pnlDiv
+###AdDisclaimer
+###AdHeader
+###AdLayer1
+###AdLayer2
+###AdMiddle
+###AdPanel
+###AdPopUp
+###AdRectangleBanner
+###AdSense1
+###AdSense2
+###AdSense3
+###AdSenseDiv
+###AdServer
+###AdServer_Banner_1
+###AdServer_Banner_2
+###AdServer_Banner_3
+###AdServer_Banner_4
+###AdServer_Banner_5
+###AdServer_Banner_6
+###AdServer_Banner_7
+###AdServer_Banner_8
+###AdServer_Banner_9
+###AdSkyscraper
+###AdSlot_megabanner
+###AdSpaceLeaderboard
+###AdTop
+###AdTopLeader
+###AdWidgetContainer
+###AdWrapperSuperCA
+###AdZone1
+###AdZone2
+###Ad_BelowContent
+###Ad_Block
+###Ad_TopLeaderboard
+###Adbanner
+###Adcode
+###Adlabel
+###AdsBannerTop
+###AdsBillboard
+###AdsBottomContainer
+###AdsContent
+###AdsDiv
+###AdsFrame
+###AdsPubperform
+###AdsRight
+###AdsSky
+###AdsTopContainer
+###AdsWrap
+###Ads_BA_BS
+###Ads_BA_BUT
+###Ads_BA_BUT2
+###Ads_BA_BUT_box
+###Ads_BA_CAD
+###Ads_BA_CAD2
+###Ads_BA_CAD2_Text
+###Ads_BA_FLB
+###Ads_BA_SKY
+###Ads_TFM_BS
+###Ads_google_bottom_wide
+###Adsense300x250
+###AdsenseBottom
+###AdsenseTop
+###Adsterra
+###Adv10
+###Adv11
+###Adv8
+###Adv9
+###AdvArea
+###AdvBody
+###AdvContainer
+###AdvFooter
+###AdvFrame1
+###AdvHead
+###AdvHeader
+###Adv_Footer
+###Advert1
+###AdvertMid1
+###AdvertMid2
+###AdvertPanel
+###AdvertText
+###AdvertiseFrame
+###Advertisement1
+###Advertisement2
+###AdvertisementDiv
+###AdvertisementLeaderboard
+###Advertisements
+###AdvertisingDiv_0
+###Advertorial
+###Advertorials
+###AnchorAd
+###ArticleContentAd
+###BB1-ad
+###Banner728x90
+###BannerAd
+###BannerAds
+###BannerAdvert
+###BannerAdvertisement
+###BigBoxAd
+###BigboxAdUnit
+###BodyAd
+###BodyTopAds
+###Body_Ad8_divAdd
+###BotAd
+###BottomAdContainer
+###BottomRightAdWrapper
+###ButtonAd
+###ContentAd
+###Content_CA_AD_0_BC
+###Content_CA_AD_1_BC
+###DFP_top_leaderboard
+###FooterAd
+###FooterAdBlock
+###FooterAdContainer
+###GoogleAd
+###GoogleAd1
+###GoogleAd2
+###GoogleAd3
+###GoogleAdRight
+###GoogleAdTop
+###GoogleAdsense
+###HP1-ad
+###HP2-ad
+###HeadAd
+###HeaderAD
+###HeaderAd
+###HeaderAdBlock
+###HeaderAdsBlock
+###HeroAd
+###HomeAd1
+###HouseAd
+###IB-ads
+###IC1-ad
+###IC2-ad
+###IC3-ad
+###IC4-ad
+###IFrameAd
+###IFrameAd1
+###IK-ad-area
+###IK-ad-block
+###IM_AD
+###LargeRectangleAd
+###LayoutBottomAdBox
+###LayoutHomeAdBoxBottom
+###LeaderboardAdvertising
+###LeftAd
+###LeftAd1
+###MPUAdSpace
+###MPUadvertising
+###MPUadvertisingDetail
+###MainAd
+###MainAd1
+###MainContent_ucTopRightAdvert
+###MediumRectangleAD
+###MidPageAds
+###MiddleRightRadvertisement
+###Mpu_Bottom
+###Mpu_Top
+###MyAdsId3
+###N-ad-article-rightRail-1
+###NR-Ads
+###NavAD
+###OAS2
+###OASMiddleAd
+###OASRightAd
+###PaneAdvertisingContainer
+###PromotionAdBox
+###PushDownAd
+###RadAdSkyscraper
+###RightAd
+###RightAdBlock
+###RightAdSpace
+###RightAdvertisement
+###SidebarAd
+###SidebarAdContainer
+###SitenavAdslot
+###SkyAd
+###SkyscraperAD
+###SponsoredAd
+###SponsoredAds
+###SponsoredLinks
+###SponsorsAds
+###StickyBannerAd
+###Top-Ad-Container
+###Top-ad
+###Top1AdWrapper
+###TopADs
+###TopAd
+###TopAd0
+###TopAdBox
+###TopAdContainer
+###TopAdDiv
+###TopAdPlacement
+###TopAdPos
+###TopAdTable
+###TopAdvert
+###TopBannerAd
+###TopRightRadvertisement
+###VPNAdvert
+###WelcomeAd
+###WidgetADVMIDDLE
+###aad-header-1
+###aad-header-2
+###aad-header-3
+###ab_adblock
+###above-comments-ad
+###above-fold-ad
+###above-footer-ads
+###above-the-fold-ad
+###aboveAd
+###aboveNodeAds
+###above_button_ad
+###aboveplayerad
+###abovepostads
+###acm-ad-tag-lawrence_dfp_mobile_arkadium
+###ad--article--home-mobile-paramount-wrapper
+###ad--article-bottom-wrapper
+###ad--article-top
+###ad--sidebar
+###ad-0
+###ad-1
+###ad-125x125
+###ad-160
+###ad-160x600
+###ad-2
+###ad-2-160x600
+###ad-250
+###ad-250x300
+###ad-3
+###ad-3-300x250
+###ad-300
+###ad-300-250
+###ad-300-additional
+###ad-300-detail
+###ad-300-sidebar
+###ad-300X250-2
+###ad-300a
+###ad-300b
+###ad-300x250
+###ad-300x250-0
+###ad-300x250-2
+###ad-300x250-b
+###ad-300x250-sidebar
+###ad-300x250-wrapper
+###ad-300x250_mid
+###ad-300x250_mobile
+###ad-300x250_top
+###ad-300x600_top
+###ad-4
+###ad-5
+###ad-6
+###ad-7
+###ad-728
+###ad-728-90
+###ad-728x90
+###ad-8
+###ad-9
+###ad-Content_1
+###ad-Content_2
+###ad-Rectangle_1
+###ad-Rectangle_2
+###ad-Superbanner
+###ad-a
+###ad-ads
+###ad-advertorial
+###ad-affiliate
+###ad-after
+###ad-anchor
+###ad-around-the-web
+###ad-article
+###ad-article-in
+###ad-aside-1
+###ad-background
+###ad-ban
+###ad-banner-1
+###ad-banner-atf
+###ad-banner-bottom
+###ad-banner-btf
+###ad-banner-desktop
+###ad-banner-image
+###ad-banner-placement
+###ad-banner-top
+###ad-banner-wrap
+###ad-banner_atf-label
+###ad-bar
+###ad-base
+###ad-bb-content
+###ad-below-content
+###ad-bg
+###ad-big
+###ad-bigbox
+###ad-bigsize
+###ad-billboard
+###ad-billboard-atf
+###ad-billboard-bottom
+###ad-billboard01
+###ad-blade
+###ad-block
+###ad-block-125
+###ad-block-2
+###ad-block-aa
+###ad-block-bottom
+###ad-block-container
+###ad-border
+###ad-bottom
+###ad-bottom-banner
+###ad-bottom-fixed
+###ad-bottom-right-container
+###ad-bottom-wrapper
+###ad-bottomright
+###ad-box
+###ad-box-1
+###ad-box-2
+###ad-box-bottom
+###ad-box-halfpage
+###ad-box-leaderboard
+###ad-box-left
+###ad-box-rectangle
+###ad-box-rectangle-2
+###ad-box-right
+###ad-box1
+###ad-box2
+###ad-boxes
+###ad-break
+###ad-bs
+###ad-btm
+###ad-buttons
+###ad-campaign
+###ad-carousel
+###ad-case
+###ad-center
+###ad-chips
+###ad-circfooter
+###ad-code
+###ad-col
+###ad-container-banner
+###ad-container-fullpage
+###ad-container-inner
+###ad-container-leaderboard
+###ad-container-mpu
+###ad-container-outer
+###ad-container-overlay
+###ad-container-top-placeholder
+###ad-container1
+###ad-contentad
+###ad-desktop-bottom
+###ad-desktop-takeover-home
+###ad-desktop-takeover-int
+###ad-desktop-top
+###ad-desktop-wrap
+###ad-discover
+###ad-display-ad
+###ad-display-ad-placeholder
+###ad-div-leaderboard
+###ad-drawer
+###ad-ear
+###ad-extra-flat
+###ad-featured-right
+###ad-fixed-bottom
+###ad-flex-top
+###ad-flyout
+###ad-footer-728x90
+###ad-framework-top
+###ad-front-btf
+###ad-front-footer
+###ad-full-width
+###ad-fullbanner-btf
+###ad-fullbanner-outer
+###ad-fullbanner2
+###ad-fullwidth
+###ad-googleAdSense
+###ad-gutter-left
+###ad-gutter-right
+###ad-halfpage
+###ad-halfpage1
+###ad-halfpage2
+###ad-head
+###ad-header-1
+###ad-header-2
+###ad-header-3
+###ad-header-left
+###ad-header-mad
+###ad-header-mobile
+###ad-header-right
+###ad-holder
+###ad-horizontal
+###ad-horizontal-header
+###ad-horizontal-top
+###ad-incontent
+###ad-index
+###ad-inline-block
+###ad-inside1
+###ad-inside2
+###ad-label2
+###ad-large-banner-top
+###ad-large-header
+###ad-lb-secondary
+###ad-lead
+###ad-leadboard1
+###ad-leadboard2
+###ad-leader
+###ad-leader-atf
+###ad-leader-container
+###ad-leader-wrapper
+###ad-leaderboard
+###ad-leaderboard-atf
+###ad-leaderboard-bottom
+###ad-leaderboard-container
+###ad-leaderboard-footer
+###ad-leaderboard-header
+###ad-leaderboard-spot
+###ad-leaderboard-top
+###ad-leaderboard970x90home
+###ad-leaderboard970x90int
+###ad-leaderboard_bottom
+###ad-leadertop
+###ad-lrec
+###ad-m-rec-content
+###ad-main
+###ad-main-bottom
+###ad-main-top
+###ad-makeup
+###ad-manager
+###ad-masthead
+###ad-medium
+###ad-medium-lower
+###ad-medium-rectangle
+###ad-medrec
+###ad-medrec-article-container
+###ad-medrec__first
+###ad-mid
+###ad-mid-rect
+###ad-middle
+###ad-midpage
+###ad-minibar
+###ad-module
+###ad-mpu
+###ad-mrec
+###ad-mrec2
+###ad-new
+###ad-north
+###ad-one
+###ad-other
+###ad-output
+###ad-overlay
+###ad-p3
+###ad-page-1
+###ad-pan3l
+###ad-panel
+###ad-pencil
+###ad-performance
+###ad-performanceFullbanner1
+###ad-performanceRectangle1
+###ad-placeholder
+###ad-placeholder-horizontal
+###ad-placeholder-vertical
+###ad-placement
+###ad-plate
+###ad-player
+###ad-popup
+###ad-popup-home
+###ad-popup-int
+###ad-post
+###ad-promo
+###ad-push
+###ad-pushdown
+###ad-r
+###ad-rec-atf
+###ad-rec-btf
+###ad-rec-btf-top
+###ad-rect
+###ad-rectangle
+###ad-rectangle1
+###ad-rectangle1-outer
+###ad-rectangle2
+###ad-rectangle3
+###ad-results
+###ad-right
+###ad-right-bar-tall
+###ad-right-container
+###ad-right-sidebar
+###ad-right-top
+###ad-right2
+###ad-right3
+###ad-rotator
+###ad-row
+###ad-section
+###ad-separator
+###ad-shop
+###ad-side
+###ad-side-text
+###ad-sidebar
+###ad-sidebar-btf
+###ad-sidebar-container
+###ad-sidebar-mad
+###ad-sidebar-mad-wrapper
+###ad-sidebar1
+###ad-sidebar2
+###ad-site-header
+###ad-skin
+###ad-skm-below-content
+###ad-sky
+###ad-skyscraper
+###ad-slideshow
+###ad-slideshow2
+###ad-slot
+###ad-slot-1
+###ad-slot-2
+###ad-slot-3
+###ad-slot-4
+###ad-slot-5
+###ad-slot-502
+###ad-slot-lb
+###ad-slot-right
+###ad-slot-top
+###ad-slot1
+###ad-slot2
+###ad-slot4
+###ad-slug-wrapper
+###ad-small-banner
+###ad-space
+###ad-space-1
+###ad-space-2
+###ad-space-big
+###ad-special
+###ad-splash
+###ad-sponsors
+###ad-spot
+###ad-spot-bottom
+###ad-spot-one
+###ad-squares
+###ad-standard
+###ad-standard-wrap
+###ad-startProMaps
+###ad-stickers
+###ad-sticky-footer-container
+###ad-story-right
+###ad-story-top
+###ad-stripe
+###ad-tab
+###ad-tape
+###ad-target
+###ad-target-Leaderbord
+###ad-teaser
+###ad-text
+###ad-three
+###ad-top
+###ad-top-250
+###ad-top-300x250
+###ad-top-728
+###ad-top-banner
+###ad-top-leaderboard
+###ad-top-left
+###ad-top-lock
+###ad-top-low
+###ad-top-right
+###ad-top-right-container
+###ad-top-text-low
+###ad-top-wrap
+###ad-top-wrapper
+###ad-tower
+###ad-two
+###ad-undefined
+###ad-unit-right-bottom-160-600
+###ad-unit-right-middle-300-250
+###ad-unit-top-banner
+###ad-vip-article
+###ad-west
+###ad-wide-leaderboard
+###ad-wrap
+###ad-wrap2
+###ad-wrapper
+###ad-wrapper-728x90
+###ad-wrapper-footer-1
+###ad-wrapper-main-1
+###ad-wrapper-sidebar-1
+###ad-wrapper-top-1
+###ad-wrapper1
+###ad1-placeholder
+###ad11
+###ad125B
+###ad125x125
+###ad160
+###ad160-2
+###ad160600
+###ad160a
+###ad160x600
+###ad2-home
+###ad2-label
+###ad250
+###ad2_footer
+###ad2_iframe
+###ad2_inline
+###ad300
+###ad300-250
+###ad300-title
+###ad300X250
+###ad300_250
+###ad300x250Module
+###ad31
+###ad32
+###ad336
+###ad336x280
+###ad468
+###ad468_hidden
+###ad468x60
+###ad468x60-story
+###ad468x60_top
+###ad480x60
+###ad6
+###ad600
+###ad600x90
+###ad650
+###ad728
+###ad72890
+###ad728Bottom
+###ad728Box
+###ad728Header
+###ad728Mid
+###ad728Top
+###ad728Wrapper
+###ad728X90
+###ad728foot
+###ad728h
+###ad728top
+###ad728x90
+###ad728x90_1
+###ad90
+###ad900
+###ad970
+###ad970x90_exp
+###adATF300x250
+###adATF728x90
+###adATFLeaderboard
+###adAside
+###adBTF300x250
+###adBadges
+###adBanner1
+###adBanner336x280
+###adBannerBottom
+###adBannerHeader
+###adBannerSpacer
+###adBannerTable
+###adBannerTop
+###adBar
+###adBelt
+###adBillboard
+###adBlock01
+###adBlockBanner
+###adBlockContainer
+###adBlockContent
+###adBlockOverlay
+###adBlocks
+###adBottom
+###adBox
+###adBrandDev
+###adBrandingStation
+###adBreak
+###adCarousel
+###adChannel
+###adChoiceFooter
+###adChoices
+###adChoicesIcon
+###adChoicesLogo
+###adCol
+###adColumn
+###adColumn3
+###adComponentWrapper
+###adContainer
+###adContainerMobile
+###adContainer_1
+###adContainer_2
+###adContainer_3
+###adContent
+###adContentHolder
+###adContext
+###adDiv
+###adDiv0
+###adDiv1
+###adDiv300
+###adDiv4
+###adDiv728
+###adDivContainer
+###adFiller
+###adFlashDiv
+###adFooter
+###adFot
+###adFrame
+###adGallery
+###adGoogleText
+###adHeader
+###adHeaderTop
+###adHeaderWrapper
+###adHeading
+###adHeightstory
+###adHolder
+###adHolder1
+###adHolder2
+###adHolder3
+###adHolder4
+###adHolder5
+###adHolder6
+###adHome
+###adHomeTop
+###adIframe
+###adInhouse
+###adIsland
+###adLB
+###adLabel
+###adLarge
+###adLayer
+###adLayerTop
+###adLayout
+###adLeader
+###adLeaderTop
+###adLeaderboard
+###adLeaderboard-middle
+###adLeft
+###adLink
+###adLink1
+###adLounge
+###adLrec
+###adMOBILETOP
+###adMPU
+###adMPUHolder
+###adMain
+###adMarketplace
+###adMed
+###adMedRect
+###adMediumRectangle
+###adMeld
+###adMessage
+###adMid2
+###adMpu
+###adMpuBottom
+###adOuter
+###adPartnerLinks
+###adPlaceHolder1
+###adPlaceHolder2
+###adPlacement_1
+###adPlacement_2
+###adPlacement_3
+###adPlacement_4
+###adPlacement_7
+###adPlacement_8
+###adPlacement_9
+###adPlacer
+###adPopover
+###adPopup
+###adPosition0
+###adPosition14
+###adPosition5
+###adPosition6
+###adPosition7
+###adPosition9
+###adPush
+###adPushdown1
+###adReady
+###adRight
+###adRight1
+###adRight2
+###adRight3
+###adRight4
+###adRight5
+###adScraper
+###adSection
+###adSenseBox
+###adSenseModule
+###adSenseWrapper
+###adSet
+###adSide
+###adSide1-container
+###adSideButton
+###adSidebar
+###adSite
+###adSkin
+###adSkinBackdrop
+###adSkinLeft
+###adSkinRight
+###adSky
+###adSkyPosition
+###adSkyscraper
+###adSlider
+###adSlot-dmpu
+###adSlot-dontMissLarge
+###adSlot-leader
+###adSlot-leaderBottom
+###adSlot1
+###adSlot2
+###adSlot3
+###adSlot4
+###adSlug
+###adSpace
+###adSpaceBottom
+###adSpaceHeight
+###adSpacer
+###adSpecial
+###adSqb
+###adSquare
+###adStrip
+###adSuperBannerContainer
+###adSuperbanner
+###adTag
+###adText
+###adTextLink
+###adTile
+###adTop
+###adTopContent
+###adTopLREC
+###adTopLarge
+###adTopModule
+###adTower
+###adUnderArticle
+###adUnit
+###adWideSkyscraper
+###adWrap
+###adWrapper
+###adWrapperSky
+###ad_1
+###ad_160
+###ad_160_600
+###ad_160_600_2
+###ad_160x160
+###ad_160x600
+###ad_2
+###ad_250
+###ad_250x250
+###ad_3
+###ad_300
+###ad_300_250
+###ad_300_250_1
+###ad_300x250
+###ad_336
+###ad_4
+###ad_468_60
+###ad_468x60
+###ad_5
+###ad_728
+###ad_728_90
+###ad_728x90
+###ad_8
+###ad_9
+###ad_B1
+###ad_Banner
+###ad_Bottom
+###ad_LargeRec01
+###ad_Middle
+###ad_Middle1
+###ad_Pushdown
+###ad_R1
+###ad_Right
+###ad_Top
+###ad_Wrap
+###ad__billboard
+###ad_ad
+###ad_adsense
+###ad_after_header_1
+###ad_anchor
+###ad_area
+###ad_article1_1
+###ad_article1_2
+###ad_article2_1
+###ad_article2_2
+###ad_article3_1
+###ad_article3_2
+###ad_banner
+###ad_banner_1
+###ad_banner_468x60
+###ad_banner_728x90
+###ad_banner_bot
+###ad_banner_top
+###ad_banners
+###ad_bar
+###ad_bar_rect
+###ad_before_header
+###ad_bg
+###ad_bg_image
+###ad_big
+###ad_bigbox
+###ad_bigbox_companion
+###ad_bigrectangle
+###ad_billboard
+###ad_block
+###ad_block_0
+###ad_block_1
+###ad_block_2
+###ad_block_mpu
+###ad_bnr_atf_01
+###ad_bnr_atf_02
+###ad_bnr_atf_03
+###ad_bnr_btf_07
+###ad_bnr_btf_08
+###ad_body
+###ad_bottom
+###ad_box
+###ad_box_top
+###ad_branding
+###ad_bsb
+###ad_bsb_cont
+###ad_btmslot
+###ad_button
+###ad_buttons
+###ad_cell
+###ad_center
+###ad_choices
+###ad_close
+###ad_closebtn
+###ad_comments
+###ad_cont
+###ad_cont_superbanner
+###ad_container
+###ad_container_0
+###ad_container_300x250
+###ad_container_side
+###ad_container_sidebar
+###ad_container_top
+###ad_content
+###ad_content_1
+###ad_content_2
+###ad_content_3
+###ad_content_fullsize
+###ad_content_primary
+###ad_content_right
+###ad_content_top
+###ad_content_wrap
+###ad_contentslot_1
+###ad_contentslot_2
+###ad_creative_2
+###ad_creative_3
+###ad_creative_5
+###ad_dfp_rec1
+###ad_display_300_250
+###ad_display_728_90
+###ad_div
+###ad_div_bottom
+###ad_div_top
+###ad_feedback
+###ad_foot
+###ad_footer
+###ad_footer1
+###ad_footerAd
+###ad_frame
+###ad_frame1
+###ad_from_bottom
+###ad_fullbanner
+###ad_gallery
+###ad_gallery_bot
+###ad_global_300x250
+###ad_global_above_footer
+###ad_global_header
+###ad_global_header1
+###ad_global_header2
+###ad_h3
+###ad_halfpage
+###ad_head
+###ad_header
+###ad_header_1
+###ad_header_container
+###ad_holder
+###ad_home
+###ad_home_middle
+###ad_horizontal
+###ad_houseslot_a
+###ad_houseslot_b
+###ad_hp
+###ad_img
+###ad_interthread
+###ad_island
+###ad_island2
+###ad_label
+###ad_large
+###ad_large_rectangular
+###ad_lateral
+###ad_layer
+###ad_ldb
+###ad_lead1
+###ad_leader
+###ad_leaderBoard
+###ad_leaderboard
+###ad_leaderboard_top
+###ad_left
+###ad_left_1
+###ad_left_2
+###ad_left_3
+###ad_left_skyscraper
+###ad_left_top
+###ad_leftslot
+###ad_link
+###ad_links
+###ad_links_footer
+###ad_lnk
+###ad_lrec
+###ad_lwr_square
+###ad_main
+###ad_main_leader
+###ad_main_top
+###ad_marginal
+###ad_marker
+###ad_mast
+###ad_med_rect
+###ad_medium
+###ad_medium_rectangle
+###ad_medium_rectangular
+###ad_mediumrectangle
+###ad_message
+###ad_middle
+###ad_middle_bottom
+###ad_midstrip
+###ad_mobile
+###ad_module
+###ad_mpu
+###ad_mpu2
+###ad_mpu300x250
+###ad_mrec
+###ad_mrec1
+###ad_mrec2
+###ad_mrec_intext
+###ad_mrec_intext2
+###ad_new
+###ad_news_article
+###ad_newsletter
+###ad_one
+###ad_overlay
+###ad_overlayer
+###ad_panel
+###ad_panorama_top
+###ad_pencil
+###ad_place
+###ad_placeholder
+###ad_play_300
+###ad_player
+###ad_plugs
+###ad_popup_background
+###ad_popup_wrapper
+###ad_post
+###ad_post_300
+###ad_poster
+###ad_primary
+###ad_primaryAd
+###ad_promoAd
+###ad_publicidad
+###ad_rail
+###ad_rec_01
+###ad_rect
+###ad_rect1
+###ad_rect2
+###ad_rect3
+###ad_rect_body
+###ad_rect_bottom
+###ad_rect_btf_01
+###ad_rect_btf_02
+###ad_rect_btf_03
+###ad_rect_btf_04
+###ad_rect_btf_05
+###ad_rectangle
+###ad_region1
+###ad_region2
+###ad_region3
+###ad_region5
+###ad_results
+###ad_right
+###ad_right_box
+###ad_right_top
+###ad_rightslot
+###ad_rotator-2
+###ad_rotator-3
+###ad_row
+###ad_row_home
+###ad_rr_1
+###ad_sec
+###ad_sec_div
+###ad_secondary
+###ad_sgd
+###ad_short
+###ad_sidebar
+###ad_sidebar1
+###ad_sidebar2
+###ad_sidebar3
+###ad_sidebar_1
+###ad_sidebar_left_container
+###ad_sidebar_news
+###ad_sidebar_top
+###ad_sidebody
+###ad_site_header
+###ad_sitebar
+###ad_skin
+###ad_slot
+###ad_slot_bottom
+###ad_slot_leaderboard
+###ad_small
+###ad_space_top
+###ad_sponsored
+###ad_spot_a
+###ad_spot_b
+###ad_spotlight
+###ad_square
+###ad_squares
+###ad_ss
+###ad_stck
+###ad_sticky_wrap
+###ad_strip
+###ad_superbanner
+###ad_table
+###ad_takeover
+###ad_tall
+###ad_tbl
+###ad_top
+###ad_topBanner
+###ad_topScroller
+###ad_top_728x90
+###ad_top_banner
+###ad_top_bar
+###ad_top_holder
+###ad_topbanner
+###ad_topmob
+###ad_topnav
+###ad_topslot
+###ad_two
+###ad_txt
+###ad_under_game
+###ad_unit
+###ad_unit1
+###ad_unit2
+###ad_vertical
+###ad_video_abovePlayer
+###ad_video_belowPlayer
+###ad_video_large
+###ad_video_root
+###ad_wallpaper
+###ad_wide
+###ad_wide_box
+###ad_wideboard
+###ad_widget
+###ad_widget_1
+###ad_window
+###ad_wp
+###ad_wp_base
+###ad_wrap
+###ad_wrapper
+###ad_wrapper1
+###ad_wrapper2
+###ad_xrail_top
+###ad_zone
+###adaptvcompanion
+###adb-top
+###adbForum
+###adb_bottom
+###adbackground
+###adbanner-container
+###adbanner1
+###adbannerbox
+###adbannerdiv
+###adbannerleft
+###adbannerright
+###adbannerwidget
+###adbar
+###adbig
+###adbineScroll
+###adblade
+###adblade_ad
+###adblkad
+###adblock-300x250
+###adblock-big
+###adblock-leaderboard
+###adblock-small
+###adblock1
+###adblock2
+###adblock4
+###adblockbottom
+###adbn
+###adbnr
+###adboard
+###adbody
+###adbottom
+###adbottomleft
+###adbottomright
+###adbox
+###adbox--hot_news_ad
+###adbox--page_bottom_ad
+###adbox--page_top_ad
+###adbox-inarticle
+###adbox-topbanner
+###adbox1
+###adbox2
+###adbox_content
+###adbox_right
+###adbutton
+###adbuttons
+###adcell
+###adcenter
+###adcenter2
+###adcenter4
+###adchoices-icon
+###adchoicesBtn
+###adclear
+###adclose
+###adcode
+###adcolContent
+###adcolumn
+###adcontainer
+###adcontainer1
+###adcontainer2
+###adcontainer3
+###adcontainer5
+###adcontainerRight
+###adcontainer_ad_content_top
+###adcontent
+###adcontent1
+###adcontent2
+###adcontextlinks
+###addbottomleft
+###addvert
+###adfactor-label
+###adfloat
+###adfooter
+###adfooter_728x90
+###adform_leaderboard
+###adform_leaderboard_cover
+###adframe:not(frameset)
+###adframetop
+###adfreeDeskSpace
+###adhalfpage
+###adhead
+###adheader
+###adhesion
+###adhesionAdSlot
+###adhesionUnit
+###adhide
+###adholder
+###adholderContainerHeader
+###adhome
+###adhomepage
+###adjacency
+###adlabel
+###adlabelFooter
+###adlabelfooter
+###adlabelheader
+###adlanding
+###adlayer
+###adlayerContainer
+###adlayerad
+###adleaderboard
+###adleaderboard_flex
+###adleft
+###adlinks
+###adlrec
+###adm-inline-article-ad-1
+###adm-inline-article-ad-2
+###admain
+###admaintop
+###admasthead
+###admid
+###admiddleCenter
+###admobilefoot
+###admobilefootinside
+###admobilemiddle
+###admobiletop
+###admobiletopinside
+###admod2
+###admpubottom
+###admpubottom2
+###admpufoot
+###admpumiddle
+###admpumiddle2
+###admputop
+###admputop2
+###admsg
+###adnet
+###adnorth
+###ados1
+###ados2
+###ados3
+###ados4
+###adplace
+###adplacement
+###adpos-top
+###adpos2
+###adposition
+###adposition1
+###adposition10
+###adposition1_container
+###adposition2
+###adposition3
+###adposition4
+###adpositionbottom
+###adpostloader
+###adpromo
+###adrect
+###adrig
+###adright
+###adright2
+###adrightbottom
+###adrightgame
+###adrightrail
+###adriver_middle
+###adriver_top
+###adrotator
+###adrow
+###adrow1
+###adrow3
+###ads-1
+###ads-125
+###ads-160x600
+###ads-200
+###ads-250
+###ads-300
+###ads-300-250
+###ads-336x280
+###ads-468
+###ads-5
+###ads-728x90
+###ads-728x90-I3
+###ads-728x90-I4
+###ads-area
+###ads-article-left
+###ads-banner
+###ads-banner-top
+###ads-bar
+###ads-before-content
+###ads-bg
+###ads-bg-mobile
+###ads-billboard
+###ads-block
+###ads-blog
+###ads-bot
+###ads-bottom
+###ads-by-google
+###ads-col
+###ads-container
+###ads-container-2
+###ads-container-anchor
+###ads-container-single
+###ads-container-top
+###ads-content
+###ads-content-double
+###ads-div2
+###ads-footer
+###ads-footer-inner
+###ads-footer-wrap
+###ads-google
+###ads-header
+###ads-header-728
+###ads-home-468
+###ads-horizontal
+###ads-inread
+###ads-inside-content
+###ads-leader
+###ads-leaderboard
+###ads-leaderboard1
+###ads-left
+###ads-left-top
+###ads-lrec
+###ads-main
+###ads-menu
+###ads-middle
+###ads-mpu
+###ads-outer
+###ads-pagetop
+###ads-panel
+###ads-pop
+###ads-position-header-desktop
+###ads-right
+###ads-right-bottom
+###ads-right-skyscraper
+###ads-right-top
+###ads-slot
+###ads-superBanner
+###ads-text
+###ads-top
+###ads-top-728
+###ads-top-wrap
+###ads-under-rotator
+###ads-vertical
+###ads-vertical-wrapper
+###ads-wrap
+###ads-wrapper
+###ads1
+###ads120
+###ads125
+###ads1_box
+###ads2
+###ads2_block
+###ads2_box
+###ads2_container
+###ads3
+###ads300
+###ads300-250
+###ads300x200
+###ads300x250
+###ads300x250_2
+###ads336x280
+###ads4
+###ads468x60
+###ads50
+###ads7
+###ads728
+###ads728bottom
+###ads728top
+###ads728x90
+###ads728x90_2
+###ads728x90top
+###adsBar
+###adsBottom
+###adsContainer
+###adsContent
+###adsDisplay
+###adsHeadLine
+###adsHeader
+###adsHeading
+###adsLREC
+###adsLeft
+###adsLinkFooter
+###adsMobileFixed
+###adsMpu
+###adsPanel
+###adsRight
+###adsRightDiv
+###adsSectionLeft
+###adsSectionRight
+###adsSquare
+###adsTG
+###adsTN
+###adsTop
+###adsTopLeft
+###adsTopMobileFixed
+###adsZone
+###adsZone1
+###adsZone2
+###ads_01
+###ads_0_container
+###ads_160
+###ads_3
+###ads_300
+###ads_300x250
+###ads_4
+###ads_728
+###ads_728x90
+###ads_728x90_top
+###ads_back
+###ads_banner
+###ads_banner1
+###ads_banner_header
+###ads_belownav
+###ads_big
+###ads_block
+###ads_body_1
+###ads_body_2
+###ads_body_3
+###ads_body_4
+###ads_body_5
+###ads_body_6
+###ads_bottom
+###ads_box
+###ads_box1
+###ads_box2
+###ads_box_bottom
+###ads_box_right
+###ads_box_top
+###ads_button
+###ads_campaign
+###ads_catDiv
+###ads_center
+###ads_center_banner
+###ads_central
+###ads_combo2
+###ads_container
+###ads_content
+###ads_desktop_r1
+###ads_desktop_r2
+###ads_expand
+###ads_footer
+###ads_fullsize
+###ads_h
+###ads_h1
+###ads_h2
+###ads_halfsize
+###ads_header
+###ads_horiz
+###ads_horizontal
+###ads_horz
+###ads_in_modal
+###ads_in_video
+###ads_inline_z
+###ads_inner
+###ads_insert_container
+###ads_layout_bottom
+###ads_lb
+###ads_lb_frame
+###ads_leaderbottom
+###ads_left
+###ads_left_top
+###ads_line
+###ads_medrect
+###ads_notice
+###ads_overlay
+###ads_page_top
+###ads_place
+###ads_placeholder
+###ads_player
+###ads_popup
+###ads_right
+###ads_right_sidebar
+###ads_right_top
+###ads_slide_div
+###ads_space
+###ads_space_header
+###ads_superbanner1
+###ads_superbanner2
+###ads_superior
+###ads_td
+###ads_text
+###ads_textlinks
+###ads_title
+###ads_top
+###ads_top2
+###ads_top_banner
+###ads_top_container
+###ads_top_content
+###ads_top_right
+###ads_top_sec
+###ads_topbanner
+###ads_tower1
+###ads_tower_top
+###ads_vert
+###ads_video
+###ads_wide
+###ads_wrapper
+###adsbot
+###adsbottom
+###adsbox
+###adsbox-left
+###adsbox-right
+###adscenter
+###adscolumn
+###adscontainer
+###adscontent
+###adsdiv
+###adsection
+###adsense-2
+###adsense-468x60
+###adsense-area
+###adsense-bottom
+###adsense-container-bottom
+###adsense-header
+###adsense-link
+###adsense-links
+###adsense-middle
+###adsense-post
+###adsense-right
+###adsense-sidebar
+###adsense-tag
+###adsense-text
+###adsense-top
+###adsense-wrap
+###adsense1
+###adsense2
+###adsense2pos
+###adsense468
+###adsense6
+###adsense728
+###adsenseArea
+###adsenseContainer
+###adsenseHeader
+###adsenseLeft
+###adsenseWrap
+###adsense_300x250
+###adsense_banner_top
+###adsense_block
+###adsense_bottom_ad
+###adsense_box
+###adsense_box2
+###adsense_center
+###adsense_image
+###adsense_inline
+###adsense_leaderboard
+###adsense_overlay
+###adsense_r_side_sticky_container
+###adsense_sidebar
+###adsense_top
+###adsenseheader
+###adsensehorizontal
+###adsensempu
+###adsenseskyscraper
+###adsensetext
+###adsensetop
+###adsensewide
+###adserv
+###adsframe_2
+###adsfundo
+###adside
+###adsimage
+###adsitem
+###adskeeper
+###adskinleft
+###adskinlink
+###adskinright
+###adskintop
+###adsky
+###adskyscraper
+###adskyscraper_flex
+###adsleft1
+###adslider
+###adslist
+###adslistbox
+###adslot-below-updated
+###adslot-download-abovefiles
+###adslot-half-page
+###adslot-homepage-middle
+###adslot-infobox
+###adslot-left-skyscraper
+###adslot-side-mrec
+###adslot-site-footer
+###adslot-site-header
+###adslot-sticky-headerbar
+###adslot-top-rectangle
+###adslot1
+###adslot2
+###adslot3
+###adslot300x250ATF
+###adslot300x250BTF
+###adslot4
+###adslot5
+###adslot6
+###adslot7
+###adslot_left
+###adslot_rect
+###adslot_top
+###adsmgid
+###adsmiddle
+###adsonar
+###adspace
+###adspace-1
+###adspace-2
+###adspace-300x250
+###adspace-728
+###adspace-728x90
+###adspace-bottom
+###adspace-leaderboard-top
+###adspace-one
+###adspace-top
+###adspace300x250
+###adspaceBox
+###adspaceRow
+###adspace_header
+###adspace_leaderboard
+###adspace_top
+###adspacer
+###adspan
+###adsplace1
+###adsplace2
+###adsplace4
+###adsplash
+###adspot
+###adspot-bottom
+###adspot-top
+###adspotlight1
+###adsquare
+###adsquare2
+###adsright
+###adsright_header
+###adss
+###adsside
+###adssidebar2
+###adssidebar3
+###adsspace
+###adstext2
+###adstop
+###adstory
+###adstrip
+###adtab
+###adtable_top
+###adtag_banner
+###adtagheader
+###adtagrightcol
+###adtags_left
+###adtaily
+###adtext
+###adtop
+###adtopHeader
+###adtop_dfp
+###adtopbanner
+###adtopbox
+###adtopcenter
+###adtophp
+###adtrafficright
+###adtxt
+###adunit
+###adunit-article-bottom
+###adunit_video
+###adunitl
+###adup-sidebar
+###adv-01
+###adv-300
+###adv-Bottom
+###adv-BoxP
+###adv-Middle
+###adv-Middle1
+###adv-Middle2
+###adv-Scrollable
+###adv-Top
+###adv-TopLeft
+###adv-banner
+###adv-banner-r
+###adv-box
+###adv-companion-iframe
+###adv-container
+###adv-gpt-box-container1
+###adv-gpt-masthead-skin-container1
+###adv-halfpage
+###adv-header
+###adv-leaderblock
+###adv-leaderboard
+###adv-left
+###adv-masthead
+###adv-middle
+###adv-middle1
+###adv-midroll
+###adv-native
+###adv-preroll
+###adv-right
+###adv-right1
+###adv-scrollable
+###adv-sticky-1
+###adv-sticky-2
+###adv-text
+###adv-title
+###adv-top
+###adv-top-skin
+###adv300x250
+###adv300x250container
+###adv468x90
+###adv728
+###adv728x90
+###adv768x90
+###advBoxBottom
+###advCarrousel
+###advHome
+###advHook-Middle1
+###advRectangle
+###advRectangle1
+###advSkin
+###advTop
+###advWrapper
+###adv_300
+###adv_728
+###adv_728x90
+###adv_BoxBottom
+###adv_Inread
+###adv_IntropageOvl
+###adv_LdbMastheadPush
+###adv_Reload
+###adv_Skin
+###adv_bootom
+###adv_border
+###adv_center
+###adv_config
+###adv_contents
+###adv_footer
+###adv_holder
+###adv_leaderboard
+###adv_mob
+###adv_mpu1
+###adv_mpu2
+###adv_network
+###adv_overlay
+###adv_overlay_content
+###adv_r
+###adv_right
+###adv_skin
+###adv_sky
+###adv_textlink
+###adv_top
+###adv_wallpaper
+###adv_wallpaper2
+###adver
+###adver-top
+###adverFrame
+###advert-1
+###advert-120
+###advert-2
+###advert-ahead
+###advert-article
+###advert-article-1
+###advert-article-2
+###advert-article-3
+###advert-banner
+###advert-banner-container
+###advert-banner-wrap
+###advert-banner2
+###advert-block
+###advert-boomer
+###advert-box
+###advert-column
+###advert-container-top
+###advert-display
+###advert-fireplace
+###advert-footer
+###advert-footer-hidden
+###advert-header
+###advert-island
+###advert-leaderboard
+###advert-left
+###advert-mpu
+###advert-posterad
+###advert-rectangle
+###advert-right
+###advert-sky
+###advert-skyscaper
+###advert-skyscraper
+###advert-slider-top
+###advert-stickysky
+###advert-text
+###advert-top
+###advert-top-banner
+###advert-wrapper
+###advert1
+###advert2
+###advert300x260
+###advert50
+###advertBanner
+###advertBox
+###advertBoxRight
+###advertBoxSquare
+###advertColumn
+###advertContainer
+###advertDB
+###advertMPUContainer
+###advertOverlay
+###advertRight
+###advertSection
+###advertTop
+###advertTopLarge
+###advertTopSmall
+###advertTower
+###advertWrapper
+###advert_1
+###advert_banner
+###advert_belowmenu
+###advert_box
+###advert_container
+###advert_container_300
+###advert_header
+###advert_leaderboard
+###advert_media
+###advert_mid
+###advert_mpu
+###advert_mpu_1
+###advert_mpu_2
+###advert_right1
+###advert_sky
+###advert_top
+###advertblock
+###advertborder
+###advertbox2
+###advertbox3
+###advertbox4
+###adverthome
+###adverti
+###adverticum_r_above
+###adverticum_r_above_container
+###adverticum_r_side_container
+###advertise
+###advertise-block
+###advertise-here
+###advertise-sidebar
+###advertise1
+###advertise2
+###advertiseBanner
+###advertiseLink
+###advertisePlacement
+###advertise_top
+###advertisediv
+###advertisement-300x250
+###advertisement-bottom
+###advertisement-content
+###advertisement-detail1
+###advertisement-detail2
+###advertisement-large
+###advertisement-placement
+###advertisement-text
+###advertisement1
+###advertisement2
+###advertisement3
+###advertisement728x90
+###advertisementArea
+###advertisementBox
+###advertisementHorizontal
+###advertisementRight
+###advertisementTop
+###advertisement_banner
+###advertisement_belowscreenshots
+###advertisement_block
+###advertisement_box
+###advertisement_container
+###advertisement_label
+###advertisement_notice
+###advertisement_title
+###advertisements_bottom
+###advertisements_sidebar
+###advertisements_top
+###advertisementsarticle
+###advertiser-container
+###advertiserLinks
+###advertisetop
+###advertising-160x600
+###advertising-300x250
+###advertising-728x90
+###advertising-banner
+###advertising-caption
+###advertising-container
+###advertising-right
+###advertising-skyscraper
+###advertising-top
+###advertisingHrefTop
+###advertisingLeftLeft
+###advertisingLink
+###advertisingRightColumn
+###advertisingRightRight
+###advertisingTop
+###advertisingTopWrapper
+###advertising_1
+###advertising_2
+###advertising_300
+###advertising_300_under
+###advertising_300x105
+###advertising_320
+###advertising_728
+###advertising_728_under
+###advertising__banner__content
+###advertising_anglerect
+###advertising_billboard
+###advertising_column
+###advertising_container
+###advertising_contentad
+###advertising_div
+###advertising_header
+###advertising_holder
+###advertising_leaderboard
+###advertising_top_container
+###advertising_wrapper
+###advertisment-horizontal
+###advertisment-text
+###advertisment1
+###advertisment_content
+###advertisment_panel
+###advertleft
+###advertorial
+###advertorial-box
+###advertorial-wrap
+###advertorial1
+###advertorial_links
+###adverts
+###adverts--footer
+###adverts-top-container
+###adverts-top-left
+###adverts-top-middle
+###adverts-top-right
+###adverts_base
+###adverts_post_content
+###adverts_right
+###advertscroll
+###advertsingle
+###advertspace
+###advertssection
+###adverttop
+###advframe
+###advr_mobile
+###advsingle
+###advt
+###advt_bottom
+###advtbar
+###advtcell
+###advtext
+###advtop
+###advtopright
+###adwallpaper
+###adwidget
+###adwidget-5
+###adwidget-6
+###adwidget1
+###adwidget2
+###adwin
+###adwin_rec
+###adwith
+###adwords-box
+###adwrapper
+###adxBigAd
+###adxBigAd2
+###adxLeaderboard
+###adxMiddle
+###adxMiddleRight
+###adxToolSponsor
+###adx_ad
+###adxtop2
+###adzbanner
+###adzone
+###adzone-middle1
+###adzone-middle2
+###adzone-right
+###adzone-top
+###adzone_content
+###adzone_wall
+###adzonebanner
+###adzoneheader
+###afc-container
+###affiliate_2
+###affiliate_ad
+###after-dfp-ad-mid1
+###after-dfp-ad-mid2
+###after-dfp-ad-mid3
+###after-dfp-ad-mid4
+###after-dfp-ad-top
+###after-header-ads
+###after-top-menu-ads
+###after_ad
+###after_bottom_ad
+###after_heading_ad
+###after_title_ad
+###amazon-ads
+###amazon_ad
+###anAdScGame300x250
+###analytics_ad
+###analytics_banner
+###anchor-ad
+###anchorAd
+###aniview-ads
+###aom-ad-right_side_1
+###aom-ad-right_side_2
+###aom-ad-top
+###apiBackgroundAd
+###article-ad
+###article-ad-container
+###article-ad-content
+###article-ads
+###article-advert
+###article-advert-dfp
+###article-aside-top-ad
+###article-billboard-ad-1
+###article-bottom-ad
+###article-box-ad
+###article-content-ad
+###article-footer-ad
+###article-footer-sponsors
+###article-island-ad
+###article-sidebar-ad
+###articleAd
+###articleAdReplacement
+###articleBoard-ad
+###articleBottom-ads
+###articleLeftAdColumn
+###articleSideAd
+###articleTop-ads
+###article_ad
+###article_ad_1
+###article_ad_3
+###article_ad_bottom
+###article_ad_container
+###article_ad_top
+###article_ad_w
+###article_adholder
+###article_ads
+###article_advert
+###article_banner_ad
+###article_body_ad1
+###article_box_ad
+###articlead1
+###articlead2
+###articlead300x250r
+###articleadblock
+###articlefootad
+###articletop_ad
+###aside-ad-container
+###asideAd
+###aside_ad
+###asideads
+###asinglead
+###ax-billboard
+###ax-billboard-bottom
+###ax-billboard-sub
+###ax-billboard-top
+###backad
+###background-ad-cover
+###background-adv
+###background_ad_left
+###background_ad_right
+###background_ads
+###backgroundadvert
+###banADbanner
+###banner-300x250
+###banner-468x60
+###banner-728
+###banner-728x90
+###banner-ad
+###banner-ad-container
+###banner-ad-large
+###banner-ads
+###banner-advert
+###banner-lg-ad
+###banner-native-ad
+###banner-skyscraper
+###banner300x250
+###banner468
+###banner468x60
+###banner728
+###banner728x90
+###bannerAd
+###bannerAdFrame
+###bannerAdTop
+###bannerAdWrap
+###bannerAdWrapper
+###bannerAds
+###bannerAdsense
+###bannerAdvert
+###bannerGoogle
+###banner_ad_bottom
+###banner_ad_footer
+###banner_ad_module
+###banner_ad_placeholder
+###banner_ad_top
+###banner_ads
+###banner_adsense
+###banner_adv
+###banner_advertisement
+###banner_adverts
+###banner_atf__container
+###banner_content_ad
+###banner_sedo
+###banner_slot
+###banner_spacer
+###banner_topad
+###banner_videoad
+###banner_wrapper_top
+###bannerad-bottom
+###bannerad-top
+###bannerad2
+###banneradrow
+###bannerads
+###banneradspace
+###banneradvert3
+###banneradvertise
+###bannerplayer-wrap
+###baseboard-ad
+###baseboard-ad-wrapper
+###bbContentAds
+###bb_ad_container
+###bb_top_ad
+###bbadwrap
+###before-footer-ad
+###below-listings-ad
+###below-menu-ad-header
+###below-post-ad
+###below-title-ad
+###belowAd
+###belowContactBoxAd
+###belowNodeAds
+###below_content_ad_container
+###belowad
+###belowheaderad
+###bg-custom-ad
+###bg-footer-ads
+###bg-footer-ads2
+###bg_banner_120x600
+###bg_banner_468x60
+###bg_banner_728x90
+###bg_googlebanner_160x600LH
+###bgad
+###big-box-ad
+###bigAd
+###bigAd1
+###bigAd2
+###bigAdDiv
+###bigBannerAd
+###bigBoxAd
+###bigBoxAdCont
+###big_ad
+###big_ad_label
+###big_ads
+###bigad
+###bigadbox
+###bigads
+###bigadspace
+###bigadspot
+###bigboard_ad
+###bigsidead
+###billboard-ad
+###billboard-atf
+###billboard_ad
+###bingadcontainer2
+###blkAds1
+###blkAds2
+###blkAds3
+###blkAds4
+###blkAds5
+###block-ad-articles
+###block-adsense-0
+###block-adsense-2
+###block-adsense-banner-article-bottom
+###block-adsense-banner-channel-bottom
+###block-advertisement
+###block-advertorial
+###block-articlebelowtextad
+###block-articlefrontpagead
+###block-articletopadvert
+###block-dfp-top
+###block-frontpageabovepartnersad
+###block-frontpagead
+###block-frontpagesideadvert1
+###block-google-ads
+###block-googleads3
+###block-googleads3-2
+###block-ltadvertising-ltadvertising
+###block-openads-0
+###block-openads-1
+###block-openads-13
+###block-openads-14
+###block-openads-2
+###block-openads-3
+###block-openads-4
+###block-openads-5
+###block-sponsors
+###blockAd
+###blockAds
+###block_ad
+###block_ad2
+###block_ad_container
+###block_advert
+###block_advert1
+###block_advert2
+###block_advertisement
+###blog-ad
+###blog-advert
+###blog-header-ad
+###blog_ad_area
+###blogad
+###blogad-wrapper
+###blogads
+###bm-HeaderAd
+###bn_ad
+###bnr-300x250
+###bnr-468x60
+###bnr-728x90
+###bnrAd
+###body-ads
+###bodyAd1
+###bodyAd2
+###bodyAd3
+###bodyAd4
+###body_728_ad
+###body_ad
+###body_centered_ad
+###bodymainAd
+###book-ad
+###bordeaux-preemptive-ad-0
+###bottom-ad
+###bottom-ad-1
+###bottom-ad-area
+###bottom-ad-banner
+###bottom-ad-container
+###bottom-ad-leaderboard
+###bottom-ad-slot
+###bottom-ad-tray
+###bottom-ad-wrapper
+###bottom-add
+###bottom-adhesion-container
+###bottom-ads
+###bottom-ads-bar
+###bottom-ads-container
+###bottom-adspot
+###bottom-advertising
+###bottom-boxad
+###bottom-not-ads
+###bottom-side-ad
+###bottom-sponsor-add
+###bottom-story-ad-0
+###bottomAd
+###bottomAd300
+###bottomAdBlcok
+###bottomAdContainer
+###bottomAdSection
+###bottomAdSense
+###bottomAdSenseDiv
+###bottomAdWrapper
+###bottomAds
+###bottomAdvBox
+###bottomBannerAd
+###bottomContentAd
+###bottomDDAd
+###bottomLeftAd
+###bottomMPU
+###bottomRightAd
+###bottom_ad
+###bottom_ad_728
+###bottom_ad_area
+###bottom_ad_box
+###bottom_ad_region
+###bottom_ad_unit
+###bottom_ad_wrapper
+###bottom_adbox
+###bottom_ads
+###bottom_adwrapper
+###bottom_banner_ad
+###bottom_fixed_ad_overlay
+###bottom_leader_ad
+###bottom_player_adv
+###bottom_sponsor_ads
+###bottom_sponsored_links
+###bottom_text_ad
+###bottomad
+###bottomad300
+###bottomad_table
+###bottomadbanner
+###bottomadbar
+###bottomadholder
+###bottomads
+###bottomadsdiv
+###bottomadsense
+###bottomadvert
+###bottomadwrapper
+###bottomcontentads
+###bottomleaderboardad
+###bottommpuAdvert
+###bottommpuSlot
+###bottomsponad
+###bottomsponsoredresults
+###box-ad
+###box-ad-section
+###box-ad-sidebar
+###box-content-ad
+###box1ad
+###box2ad
+###boxAD
+###boxAd
+###boxAd300
+###boxAdContainer
+###boxAdvert
+###boxLREC
+###box_ad
+###box_ad_container
+###box_ad_middle
+###box_ads
+###box_advertisement
+###box_advertising_info
+###box_advertisment
+###box_articlead
+###box_text_ads
+###boxad
+###boxads
+###bpAd
+###br-ad-header
+###branding_click
+###breadcrumb_ad
+###breakbarad
+###bsa_add_holder_g
+###bt-ad
+###bt-ad-header
+###btfAdNew
+###btm_ad
+###btm_ads
+###btmad
+###btnAdDP
+###btnAds
+###btnads
+###btopads
+###button-ads
+###button_ad_container
+###button_ads
+###buy-sell-ads
+###buySellAds
+###buysellads
+###captcha-adspace
+###carbon-ads-container-bg
+###carbonadcontainer
+###carbonads
+###carbonads-container
+###card-ads-top
+###category-ad
+###category-sponsor
+###cellAd
+###center-ad
+###center-ad-group
+###centerads
+###ch-ad-outer-right
+###ch-ads
+###channel_ad
+###channel_ads
+###circ_ad
+###circ_ad_holder
+###circad_wrapper
+###classifiedsads
+###clickforad
+###clientAds
+###close-footer-ad
+###closeAdsDiv
+###closeable-ad
+###cloudAdTag
+###cls_ad
+###cltAd
+###coAd
+###cokeAd
+###col-right-ad
+###colAd
+###colombiaAdBox
+###columnAd
+###commentAdWrapper
+###commentTopAd
+###comment_ad_zone
+###comments-ad-container
+###comments-ads
+###comments-standalone-mpu
+###compAdvertisement
+###companion-ad
+###companionAd
+###companionAdDiv
+###companion_Ad
+###companionad
+###connatix
+###connatix-moveable
+###connatix_placeholder_desktop
+###container-ad
+###container_ad
+###content-ad
+###content-ad-side
+###content-ads
+###content-adver
+###content-contentad
+###content-header-ad
+###content-left-ad
+###content-right-ad
+###contentAd
+###contentAdSense
+###contentAdTwo
+###contentAds
+###contentBoxad
+###content_Ad
+###content_ad
+###content_ad_1
+###content_ad_2
+###content_ad_block
+###content_ad_container
+###content_ad_placeholder
+###content_ads
+###content_ads_top
+###content_adv
+###content_bottom_ad
+###content_bottom_ads
+###content_mpu
+###contentad
+###contentad-adsense-homepage-1
+###contentad-commercial-1
+###contentad-content-box-1
+###contentad-footer-tfm-1
+###contentad-lower-medium-rectangle-1
+###contentad-story-middle-1
+###contentad-superbanner-1
+###contentad-top-adsense-1
+###contentad-topbanner-1
+###contentadcontainer
+###contentads
+###contextad
+###contextual-ads
+###contextual-ads-block
+###contextualad
+###cornerad
+###coverads
+###cpmstar_anchor_divad
+###criteoAd
+###crt-adblock-a
+###crt-adblock-b
+###ctl00_ContentPlaceHolder1_ucAdHomeRightFO_divAdvertisement
+###ctl00_ContentPlaceHolder1_ucAdHomeRight_divAdvertisement
+###ctl00_adCar
+###ctl00_adFooter
+###ctl00_leaderboardAdvertContainer
+###ctl00_skyscraperAdvertContainer
+###ctl00_topAd
+###ctl00_ucFooter_ucFooterBanner_divAdvertisement
+###ctr-ad
+###cubeAd
+###cube_ad
+###cube_ads
+###customAd
+###customAds
+###customad
+###darazAd
+###dashboardFeaturedEventAd
+###dashboardRectangleAd
+###daumAd
+###dcomHomeTop-728x90
+###ddAdZone2
+###desktop-ad-top
+###desktop-sidebar-ad
+###desktop_middle_ad_fixed
+###desktop_top_ad_fixed
+###dfp-ad-bottom-wrapper
+###dfp-ad-container
+###dfp-ad-floating
+###dfp-ad-leaderboard
+###dfp-ad-leaderboard-wrapper
+###dfp-ad-medium_rectangle
+###dfp-ad-mediumrect-wrapper
+###dfp-ad-mpu1
+###dfp-ad-mpu2
+###dfp-ad-right1
+###dfp-ad-right1-wrapper
+###dfp-ad-right2
+###dfp-ad-right2-wrapper
+###dfp-ad-right3
+###dfp-ad-right4-wrapper
+###dfp-ad-slot2
+###dfp-ad-slot3
+###dfp-ad-slot3-wrapper
+###dfp-ad-slot4-wrapper
+###dfp-ad-slot5
+###dfp-ad-slot5-wrapper
+###dfp-ad-slot6
+###dfp-ad-slot6-wrapper
+###dfp-ad-slot7
+###dfp-ad-slot7-wrapper
+###dfp-ad-top-wrapper
+###dfp-ap-2016-interstitial
+###dfp-article-mpu
+###dfp-article-related0-mpu
+###dfp-atf
+###dfp-atf-desktop
+###dfp-banner
+###dfp-banner-popup
+###dfp-billboard1
+###dfp-billboard2
+###dfp-btf
+###dfp-btf-desktop
+###dfp-footer-desktop
+###dfp-header
+###dfp-header-container
+###dfp-ia01
+###dfp-ia02
+###dfp-interstitial
+###dfp-leaderboard
+###dfp-leaderboard-desktop
+###dfp-masthead
+###dfp-middle
+###dfp-middle1
+###dfp-mtf
+###dfp-mtf-desktop
+###dfp-rectangle
+###dfp-rectangle1
+###dfp-ros-res-header_container
+###dfp-tlb
+###dfp-top-banner
+###dfp-wallpaper-wrapper
+###dfpAd
+###dfp_ad_mpu
+###dfp_ads_4
+###dfp_ads_5
+###dfp_bigbox_2
+###dfp_bigbox_recipe_top
+###dfp_container
+###dfp_leaderboard
+###dfpad-0
+###dfpslot_tow_2-0
+###dfpslot_tow_2-1
+###dfrads-widget-3
+###dfrads-widget-6
+###dfrads-widget-7
+###dianomiNewsBlock
+###dict-adv
+###direct-ad
+###disable-ads-container
+###display-ads
+###displayAd
+###displayAdSet
+###display_ad
+###displayad_carousel
+###displayad_rectangle
+###div-ad-1x1
+###div-ad-bottom
+###div-ad-flex
+###div-ad-inread
+###div-ad-leaderboard
+###div-ad-r
+###div-ad-r1
+###div-ad-top
+###div-ad-top_banner
+###div-adcenter1
+###div-adcenter2
+###div-advert
+###div-contentad_1
+###div-footer-ad
+###div-gpt-FloorAd
+###div-gpt-LDB1
+###div-gpt-MPU1
+###div-gpt-MPU2
+###div-gpt-MPU3
+###div-gpt-Skin
+###div-gpt-inline-main
+###div-gpt-mini-leaderboard1
+###div-gpt-mrec
+###div-insticator-ad-1
+###div-insticator-ad-2
+###div-insticator-ad-3
+###div-insticator-ad-4
+###div-insticator-ad-5
+###div-insticator-ad-6
+###div-insticator-ad-9
+###div-leader-ad
+###div-social-ads
+###divAd
+###divAdDetail
+###divAdHere
+###divAdHorizontal
+###divAdLeft
+###divAdMain
+###divAdRight
+###divAdSpecial
+###divAdWrapper
+###divAdd728x90
+###divAdd_Right
+###divAdd_Top
+###divAds
+###divAdsTop
+###divAdv300x250
+###divAdvertisement
+###divDoubleAd
+###divFoldersAd
+###divFooterAd
+###divFooterAds
+###divSponsoredLinks
+###divStoryBigAd1
+###divThreadAdBox
+###divTopAd
+###divTopAds
+###divWrapper_Ad
+###div_ad_TopRight
+###div_ad_float
+###div_ad_holder
+###div_ad_leaderboard
+###div_advt_right
+###div_belowAd
+###div_bottomad
+###div_bottomad_container
+###div_googlead
+###div_header_sponsors
+###div_the_mgid
+###div_video_ads
+###divadfloat
+###dnn_AdBannerPane
+###dnn_Advertisement
+###dnn_adSky
+###dnn_adTop
+###dnn_ad_banner
+###dnn_ad_island1
+###dnn_ad_skyscraper
+###dnn_sponsoredLinks
+###downloadAd
+###download_ad
+###download_ads
+###dragads
+###ds-mpu
+###dsStoryAd
+###dsk-banner-ad-a
+###dsk-banner-ad-b
+###dsk-banner-ad-c
+###dsk-banner-ad-d
+###dsk-box-ad-c
+###dsk-box-ad-d
+###dsk-box-ad-f
+###dsk-box-ad-g
+###dv-gpt-ad-bigbox-wrap
+###dvAd1Data
+###dvAd1main
+###dvAd5Data
+###dvAd5Main
+###dvAdHead
+###dvCenterAd
+###dvad2
+###dvad2main
+###dvad5
+###dvad6cntnr
+###dvad6main
+###dvadfirst
+###dvadfirstmain
+###dvadscnd
+###dvadsecondmain
+###dvsmladlft
+###dvsmladrgt
+###dynamicAdDiv
+###dynamicAdSlot1
+###dynamicAdWinDiv
+###elgoogybsda
+###em_ad_superbanner
+###embedAD
+###embedADS
+###event_ads
+###events-adv-side1
+###events-adv-side2
+###events-adv-side3
+###events-adv-side4
+###events-adv-side5
+###events-adv-side6
+###exoAd
+###externalAd
+###ezmobfooter
+###fd-ad-mr1
+###fd-ad-mr2
+###fd-ad-mr3
+###fd-ad-sb1
+###fd-ad-sb2
+###featureAd
+###featureAdSpace
+###featureAds
+###feature_ad
+###featuread
+###featured-ads
+###featuredAds
+###first-ads
+###first_ad
+###firstad
+###fixed-ad
+###fixedAd
+###fixedban
+###floatAd
+###floatads
+###floating-ad-wrapper
+###floating-ads
+###floating-advert
+###floatingAd
+###floatingAdContainer
+###floatingAds
+###floating_ad
+###floating_ad_container
+###floating_ads_bottom_textcss_container
+###floorAdWrapper
+###foot-ad-wrap
+###foot-ad2-wrap
+###footAd
+###footAdArea
+###footAds
+###footad
+###footer-ad
+###footer-ad-728
+###footer-ad-block
+###footer-ad-box
+###footer-ad-col
+###footer-ad-google
+###footer-ad-large
+###footer-ad-slot
+###footer-ad-unit
+###footer-ad-wrapper
+###footer-ads
+###footer-adspace
+###footer-adv
+###footer-advert
+###footer-advert-area
+###footer-advertisement
+###footer-adverts
+###footer-adwrapper
+###footer-affl
+###footer-banner-ad
+###footer-leaderboard-ad
+###footer-sponsored
+###footer-sponsors
+###footerAd
+###footerAdBottom
+###footerAdBox
+###footerAdDiv
+###footerAdWrap
+###footerAdd
+###footerAds
+###footerAdsPlacement
+###footerAdvert
+###footerAdvertisement
+###footerAdverts
+###footerGoogleAd
+###footer_AdArea
+###footer_ad
+###footer_ad_block
+###footer_ad_container
+###footer_ad_frame
+###footer_ad_holder
+###footer_ad_modules
+###footer_adcode
+###footer_add
+###footer_addvertise
+###footer_ads
+###footer_ads_holder
+###footer_adsense_ad
+###footer_adspace
+###footer_adv
+###footer_advertising
+###footer_leaderboard_ad
+###footer_text_ad
+###footerad
+###footerad728
+###footerads
+###footeradsbox
+###footeradvert
+###forum-top-ad-bar
+###frameAd
+###frameTextAd2
+###front-ad-cont
+###front-page-ad
+###front-page-advert
+###front-page-middle-advertisement
+###frontPageAd
+###front_adtop_content
+###front_advert
+###front_mpu
+###front_mpu_content
+###frontlowerad
+###ft-ad
+###ft-ads
+###ft_mpu
+###full_banner_ad
+###fusionad
+###fw-advertisement
+###fwAdBox
+###fwdevpDiv0
+###fwdevpDiv1
+###fwdevpDiv2
+###gAds
+###gStickyAd
+###g_ad
+###g_adsense
+###gad300x250
+###gad728x90
+###gads300x250
+###gadsOverlayUnit
+###gads_middle
+###gallery-ad
+###gallery-ad-container
+###gallery-advert
+###gallery-below-line-advert
+###gallery-sidebar-advert
+###gallery_ad
+###gallery_ads
+###gallery_header_ad
+###galleryad1
+###gam-ad-ban1
+###game-ad
+###gamead
+###gameads
+###gasense
+###geoAd
+###gg_ad
+###ggl-ad
+###glamads
+###global-banner-ad
+###globalLeftNavAd
+###globalTopNavAd
+###global_header_ad
+###global_header_ad_area
+###gm-ad-lrec
+###goad1
+###goads
+###gog_ad
+###gooadtop
+###google-ad
+###google-ads
+###google-ads-bottom
+###google-ads-bottom-container
+###google-ads-container
+###google-ads-detailsRight
+###google-ads-directoryViewRight
+###google-ads-header
+###google-adsense
+###google-adwords
+###google-afc
+###google-dfp-bottom
+###google-dfp-top
+###google-post-ad
+###google-post-adbottom
+###google-top-ads
+###googleAd
+###googleAdArea
+###googleAdBottom
+###googleAdBox
+###googleAdMid
+###googleAdTop
+###googleAdView
+###googleAds
+###googleAdsFrame
+###googleAdsense
+###googleAdsenseAdverts
+###googleAdwordsModule
+###googleAfcContainer
+###googleSearchAds
+###google_ad_1
+###google_ad_2
+###google_ad_3
+###google_ad_container
+###google_ad_inline
+###google_ad_slot
+###google_ads
+###google_ads_1
+###google_ads_box
+###google_ads_div_header1
+###google_ads_div_header2
+###google_ads_frame
+###google_ads_frame1_anchor
+###google_ads_frame2_anchor
+###google_ads_frame3_anchor
+###google_ads_frame4_anchor
+###google_ads_frame5_anchor
+###google_ads_frame6_anchor
+###google_ads_test
+###google_ads_wide
+###google_adsense
+###google_adsense_ad
+###google_textlinks
+###googlead
+###googlead-leaderboard
+###googlead-left
+###googlead-post-mpu
+###googlead-sidebar-middle
+###googlead-sidebar-top
+###googlead01
+###googlead2
+###googleadbig
+###googleadleft
+###googleads
+###googleads1
+###googleadsense
+###googleadsense300x250
+###googleadsrc
+###googleadstop
+###googlebanner
+###googlesponsor
+###googletextads
+###googtxtad
+###gpt-ad-1
+###gpt-ad-banner
+###gpt-ad-halfpage
+###gpt-ad-outofpage-wp
+###gpt-ad-rectangle1
+###gpt-ad-rectangle2
+###gpt-ad-side-bottom
+###gpt-ad-skyscraper
+###gpt-instory-ad
+###gpt-leaderboard-ad
+###gpt-mpu
+###gpt-sticky
+###grdAds
+###gridAdSidebar
+###grid_ad
+###gtm_dfp_leaderboard_top
+###h-ad
+###half-page-ad
+###halfPageAd
+###half_page_ad_300x600
+###halfpagead
+###hawkMagWidget
+###hd_ad
+###head-ad
+###head-ad-space
+###head-ad-timer
+###head-ads
+###head-advertisement
+###headAd
+###headAds
+###headAdv
+###head_ad
+###head_ads
+###head_advert
+###headad
+###headadvert
+###header-ad
+###header-ad-background
+###header-ad-block
+###header-ad-bottom
+###header-ad-container
+###header-ad-holder
+###header-ad-label
+###header-ad-left
+###header-ad-placeholder
+###header-ad-right
+###header-ad-slot
+###header-ad-wrap
+###header-ad-wrapper
+###header-ad2
+###header-ads
+###header-ads-container
+###header-ads-holder
+###header-ads-wrapper
+###header-adsense
+###header-adserve
+###header-adspace
+###header-adv
+###header-advert
+###header-advert-panel
+###header-advertisement
+###header-advertising
+###header-adverts
+###header-advrt
+###header-banner-728-90
+###header-banner-ad
+###header-banner-ad-wrapper
+###header-block-ads
+###header-box-ads
+###header-google
+###headerAd
+###headerAdBackground
+###headerAdButton
+###headerAdContainer
+###headerAdSpace
+###headerAdUnit
+###headerAdWrap
+###headerAds
+###headerAdsWrapper
+###headerAdv
+###headerAdvert
+###header_ad
+###header_ad_728
+###header_ad_728_90
+###header_ad_banner
+###header_ad_block
+###header_ad_container
+###header_ad_leaderboard
+###header_ad_units
+###header_ad_widget
+###header_ad_wrap
+###header_adbox
+###header_adcode
+###header_ads
+###header_ads2
+###header_adsense
+###header_adv
+###header_advert
+###header_advertisement
+###header_advertisement_top
+###header_advertising
+###header_adverts
+###header_bottom_ad
+###header_mainad
+###header_publicidad
+###header_right_ad
+###header_sponsors
+###header_top_ad
+###headerad
+###headerad_large
+###headeradbox
+###headeradcontainer
+###headerads
+###headeradsbox
+###headeradsense
+###headeradspace
+###headeradvertholder
+###headeradwrap
+###headergooglead
+###headersponsors
+###headingAd
+###headline-sponsor
+###headline_ad
+###hearst-autos-ad-wrapper
+###hf-top-ad
+###home-ad
+###home-ad-block
+###home-ad-slot
+###home-advert-module
+###home-advertise
+###home-banner-ad
+###home-left-ad
+###home-rectangle-ad
+###home-side-ad
+###home-top-ads
+###homeAd
+###homeAdLeft
+###homeAds
+###homeArticlesAd
+###homeMPU
+###homePageBotAd
+###homeSideAd
+###homeTopRightAd
+###home_ad
+###home_ad_b_1
+###home_ads_vert
+###home_advertising_block
+###home_bottom_ad
+###home_contentad
+###home_feature_ad
+###home_lower_center_right_ad
+###home_mpu
+###home_sidebar_ad
+###home_spensoredlinks
+###home_top_right_ad
+###homead
+###homegoogletextad
+###homeheaderad
+###homepage-ad
+###homepage-adbar
+###homepage-footer-ad
+###homepage-header-ad
+###homepage-right-rail-ad
+###homepage-sidebar-ad
+###homepage-sidebar-ads
+###homepage-sponsored
+###homepageAd
+###homepageAdsTop
+###homepageFooterAd
+###homepageGoogleAds
+###homepage_ad
+###homepage_ad_listing
+###homepage_rectangle_ad
+###homepage_right_ad
+###homepage_right_ad_container
+###homepage_top_ad
+###homepage_top_ads
+###homepagead_300x250
+###homepageadvert
+###hometopads
+###horAd
+###hor_ad
+###horadslot
+###horizad
+###horizads728
+###horizontal-ad
+###horizontal-adspace
+###horizontal-banner-ad
+###horizontalAd
+###horizontalAdvertisement
+###horizontal_ad
+###horizontal_ad2
+###horizontal_ad_top
+###horizontalad
+###horizontalads
+###hottopics-advert
+###hours_ad
+###houseAd
+###hovered_sponsored
+###hp-desk-after-header-ad
+###hp-header-ad
+###hp-right-ad
+###hp-store-ad
+###hpAdVideo
+###idDivAd
+###id_SearchAds
+###iframe-ad
+###iframeAd_2
+###iframe_ad_2
+###imPopup
+###im_popupDiv
+###ima_ads-2
+###ima_ads-3
+###ima_ads-4
+###imgad1
+###imu_ad_module
+###in-article-ad
+###in-article-mpu
+###in-content-ad
+###inArticleAdv
+###inarticlead
+###inc-ads-bigbox
+###incontent-ad-2
+###incontent-ad-3
+###incontentAd1
+###incontentAd2
+###incontentAd3
+###index-ad
+###index-bottom-advert
+###indexSquareAd
+###index_ad
+###indexad
+###indexad300x250l
+###indexsmallads
+###indiv_adsense
+###infoBottomAd
+###infoboxadwrapper
+###inhousead
+###initializeAd
+###inline-ad
+###inline-ad-label
+###inline-advert
+###inline-story-ad
+###inline-story-ad2
+###inlineAd
+###inlineAdCont
+###inlineAdtop
+###inlineAdvertisement
+###inlineBottomAd
+###inline_ad
+###inline_ad_section
+###inlinead
+###inlineads
+###inner-ad
+###inner-ad-container
+###inner-advert-row
+###inner-top-ads
+###innerad
+###innerpage-ad
+###inside-page-ad
+###insideCubeAd
+###instant_ad
+###insticator-container
+###instoryad
+###int-ad
+###int_ad
+###interads
+###intermediate-ad
+###internalAdvert
+###internalads
+###interstitial-shade
+###interstitialAd
+###interstitialAdContainer
+###interstitialAdUnit
+###interstitial_ad
+###interstitial_ad_container
+###interstitial_ads
+###intext_ad
+###introAds
+###intro_ad_1
+###invid_ad
+###ipadv
+###iq-AdSkin
+###iqadcontainer
+###iqadoverlay
+###iqadtile1
+###iqadtile11
+###iqadtile14
+###iqadtile15
+###iqadtile16
+###iqadtile2
+###iqadtile3
+###iqadtile4
+###iqadtile41
+###iqadtile6
+###iqadtile8
+###iqadtile9
+###iqadtile99
+###islandAd
+###islandAdPan
+###islandAdPane
+###islandAdPane2
+###island_ad_top
+###islandad
+###iv160ad
+###iv728ad
+###jobs-ad
+###js-ad-billboard
+###js-ad-leaderboard
+###js-image-ad-mpu
+###js-page-ad-top
+###js-wide-ad
+###js_commerceInsetModule
+###jsid-ad-container-post_above_comment
+###jsid-ad-container-post_below_comment
+###large-ads
+###large-bottom-leaderboard-ad
+###large-leaderboard-ad
+###large-middle-leaderboard-ad
+###large-rectange-ad
+###large-rectange-ad-2
+###large-screen-ads
+###large-skyscraper-ad
+###largeAd
+###largeAds
+###large_rec_ad1
+###largead
+###layer_ad
+###layer_ad_content
+###layerad
+###layeradsense
+###layout-header-ad-wrapper
+###layout_topad
+###lb-ad
+###lb-sponsor-left
+###lb-sponsor-right
+###lbAdBar
+###lbAdBarBtm
+###lblAds
+###lead-ads
+###lead_ad
+###leadad_1
+###leadad_2
+###leader-ad
+###leader-board-ad
+###leader-companion > a[href]
+###leaderAd
+###leaderAdContainer
+###leaderAdContainerOuter
+###leaderBoardAd
+###leader_ad
+###leader_board_ad
+###leaderad
+###leaderad_section
+###leaderadvert
+###leaderboard-ad
+###leaderboard-advert
+###leaderboard-advertisement
+###leaderboard-atf
+###leaderboard-bottom-ad
+###leaderboard.ad
+###leaderboardAd
+###leaderboardAdArea
+###leaderboardAdArea2
+###leaderboardAdSibling
+###leaderboardAdTop
+###leaderboardAds
+###leaderboardAdvert
+###leaderboard_728x90
+###leaderboard_Ad
+###leaderboard_ad
+###leaderboard_ad_gam
+###leaderboard_ad_main
+###leaderboard_ad_unit
+###leaderboard_ads
+###leaderboard_bottom_ad
+###leaderboard_top_ad
+###leaderboardad
+###leatherboardad
+###left-ad
+###left-ad-1
+###left-ad-2
+###left-ad-col
+###left-ad-iframe
+###left-ad-skin
+###left-bottom-ad
+###left-col-ads-1
+###left-content-ad
+###leftAD
+###leftAdAboveSideBar
+###leftAdCol
+###leftAdContainer
+###leftAdMessage
+###leftAdSpace
+###leftAd_fmt
+###leftAd_rdr
+###leftAds
+###leftAdsSmall
+###leftAdvert
+###leftBanner-ad
+###leftColumnAdContainer
+###leftGoogleAds
+###leftTopAdWrapper
+###left_ad
+###left_ads
+###left_adsense
+###left_adspace
+###left_adv
+###left_advertisement
+###left_bg_ad
+###left_block_ads
+###left_float_ad
+###left_global_adspace
+###left_side_ads
+###left_sidebar_ads
+###left_top_ad
+###leftad
+###leftadg
+###leftads
+###leftcolAd
+###leftcolumnad
+###leftforumad
+###leftrail_dynamic_ad_wrapper
+###lg-banner-ad
+###ligatus
+###ligatus_adv
+###ligatusdiv
+###lightboxAd
+###linkAdSingle
+###linkAds
+###link_ads
+###linkads
+###listadholder
+###liste_top_ads_wrapper
+###listing-ad
+###live-ad
+###localAds
+###localpp
+###locked-footer-ad-wrapper
+###logoAd
+###logoAd2
+###logo_ad
+###long-ad
+###long-ad-space
+###long-bottom-ad-wrapper
+###longAdSpace
+###longAdWrap
+###long_advert_header
+###long_advertisement
+###lower-ad-banner
+###lower-ads
+###lower-advertising
+###lower-home-ads
+###lowerAdvertisement
+###lowerAdvertisementImg
+###lower_ad
+###lower_content_ad_box
+###lowerads
+###lowerthirdad
+###lpAdPanel
+###lrec_ad
+###lrecad
+###m-banner-bannerAd
+###main-ad
+###main-advert
+###mainAd
+###mainAd1
+###mainAdUnit
+###mainAdvert
+###mainPageAds
+###mainPlaceHolder_coreContentPlaceHolder_rightColumnAdvert_divControl
+###main_AD
+###main_ad
+###main_ads
+###main_content_ad
+###main_rec_ad
+###main_top_ad
+###mainui-ads
+###mapAdsSwiper
+###mapAdvert
+###marcoad
+###marketingRotator
+###marketplaceAds
+###marquee-ad
+###marquee_ad
+###masSearchAd
+###mastAd
+###mastAdvert
+###mastad
+###masterad
+###mastercardAd
+###masthead_ad
+###masthead_ads_container
+###masthead_topad
+###med-rect-ad
+###med-rectangle-ad
+###medRecAd
+###medReqAd
+###media-ad
+###medium-ad
+###mediumAd1
+###mediumAdContainer
+###mediumAdvertisement
+###mediumRectangleAd
+###medrec_bottom_ad
+###medrec_middle_ad
+###medrec_top_ad
+###medrectad
+###medrectangle_banner
+###menuad
+###menubarad
+###mgid-container
+###mgid_iframe
+###mid-ad-slot-1
+###mid-ad-slot-3
+###mid-ad-slot-5
+###mid-ads
+###mid-table-ad
+###midAD
+###midRightAds
+###midRightTextAds
+###mid_ad
+###mid_ad_div
+###mid_ad_title
+###mid_left_ads
+###mid_mpu
+###mid_roll_ad_holder
+###midadspace
+###midadvert
+###midbarad
+###midbnrad
+###midcolumn_ad
+###middle-ad
+###middle-ad-destin
+###middleAd
+###middle_ad
+###middle_ads
+###middle_mpu
+###middlead
+###middleads
+###middleads2
+###midpost_ad
+###midrect_ad
+###midstrip_ad
+###mini-ad
+###mobile-adhesion
+###mobile-ads-ad
+###mobile-footer-ad-wrapper
+###mobileAdContainer
+###mobile_ad_main
+###mobile_ads_100_pc
+###mobile_ads_block
+###mod-tafad
+###mod_ad
+###mod_ad_top
+###modal-ad
+###module-ads-01
+###module-ads-02
+###module_ad
+###module_box_ad
+###module_sky_scraper
+###monsterAd
+###mpu-ad
+###mpu-advert
+###mpu-cont
+###mpu-content
+###mpu-sidebar
+###mpu1_parent
+###mpu2
+###mpu2_container
+###mpuAd
+###mpuAdvert
+###mpuAdvertDesk3
+###mpuContainer
+###mpuDiv
+###mpuInContent
+###mpuSecondary
+###mpuSlot
+###mpuWrapper
+###mpuWrapper600
+###mpuWrapperAd
+###mpuWrapperAd2
+###mpu_300x250
+###mpu_ad
+###mpu_ad2
+###mpu_adv
+###mpu_banner
+###mpu_bottom_sb_1_parent
+###mpu_box
+###mpu_container
+###mpu_div
+###mpu_holder
+###mpu_text_ad
+###mpu_top
+###mpuad
+###mpubox
+###mpuholder
+###mvp-foot-ad-wrap
+###mvp-post-bot-ad
+###my-ads
+###narrow-ad
+###narrow_ad_unit
+###native-ads-placeholder
+###native_ad2
+###native_ads
+###nav-ad-container
+###navAdBanner
+###nav_ad
+###nav_ad_728_mid
+###navads-container
+###navbar_ads
+###navigation-ad
+###navlinkad
+###newAd
+###ng-ad
+###ng-ad-lbl
+###ni-ad-row
+###nk_ad_top
+###northad
+###notify_ad
+###ntvads
+###omnibar_ad
+###online_ad
+###openx-text-ad
+###openx-widget
+###ovadsense
+###overlay-ad-bg
+###overlay_ad
+###overlayad
+###overlayadd
+###p-Ad
+###p-advert
+###p-googlead
+###p-googleadsense
+###p2HeaderAd
+###p2squaread
+###page-ad-top
+###page-advertising
+###page-header-ad
+###page-top-ad
+###pageAdDiv
+###pageAdds
+###pageAds
+###pageAdsDiv
+###pageAdvert
+###pageBannerAd
+###pageLeftAd
+###pageMiddleAdWrapper
+###pageRightAd
+###page__outside-advertsing
+###page_ad
+###page_ad_top
+###page_top_ad
+###pageads_top
+###pagebottomAd
+###pagination-advert
+###panel-ad
+###panelAd
+###panel_ad1
+###panoAdBlock
+###partner-ad
+###partnerAd
+###partnerMedRec
+###partner_ads
+###pause-ad
+###pause-ads
+###pauseAd
+###pc-div-gpt-ad_728-3
+###pencil-ad
+###pencil-ad-container
+###pencil-alt-banner-ad-wrapper
+###perm_ad
+###permads
+###persistentAd
+###personal-ads-sticky-wrapper
+###personalization_ads
+###pgAdWrapper
+###ph_ad
+###player-ads
+###player-advert
+###player-advertising
+###player-below-advert
+###player-midrollAd
+###playerAd
+###playerAdsRight
+###player_ad
+###player_ads
+###player_middle_ad
+###player_top_ad
+###playerad
+###playerads
+###pnAd2
+###pnlLhsNativeAd
+###pnlRhsNativeAd
+###pop_ad
+###popadwrap
+###popback-ad
+###popoverAd
+###popupAd
+###popupBottomAd
+###popup_ad_wrapper
+###popupadunit
+###post-ad
+###post-ads
+###post-bottom-ads
+###post-content-ad
+###post-main-banner-ad
+###post-page-ad
+###post-promo-ad
+###postAd
+###postNavigationAd
+###post_ad
+###post_addsense
+###post_adsense
+###post_adspace
+###post_advert
+###postads0
+###ppcAdverts
+###ppvideoadvertisement
+###pr_ad
+###pr_advertising
+###pre-adv
+###pre-footer-ad
+###pre-main-banner-ad
+###preAds_ad_mrec_intext
+###preAds_ad_mrec_intext2
+###preminumAD
+###premiumAdTop
+###premium_ad
+###premiumad
+###premiumads
+###prerollAd
+###preroll_ads
+###preroll_compainion_ad
+###primis-container
+###primis_player
+###print_ads
+###printads
+###privateads
+###productads
+###promo-ad
+###promoAds
+###promoFloatAd
+###promo_ads
+###ps-ad-iframe
+###ps-top-ads-sponsored
+###ps-vertical-ads
+###pub-right-bottom-ads
+###pub-right-top-ads
+###pub468x60
+###pub728x90
+###publicGoogleAd
+###publicidad
+###publicidadeLREC
+###pushAd
+###pushDownAd
+###pushdownAd
+###pushdownAdWrapper
+###pushdown_ad
+###pusher-ad
+###pvadscontainer
+###quads-ad1_widget
+###quads-ad2_widget
+###quads-admin-ads-js
+###quidgetad
+###quigo
+###quigo-ad
+###quigo_ad
+###quinAdLeaderboard
+###r89-desktop-top-ad
+###r_adver
+###radio-ad-container
+###rail-ad-wrap
+###rail-bottom-ad
+###railAd
+###rail_ad
+###rail_ad1
+###rail_ad2
+###rec_spot_ad_1
+###recommendAdBox
+###rect-ad
+###rectAd
+###rect_ad
+###rectad
+###rectangle-ad
+###rectangleAd
+###rectangleAdTeaser1
+###rectangle_ad
+###redirect-ad
+###redirect-ad-modal
+###reference-ad
+###region-node-advert
+###reklam_buton
+###reklam_center
+###reklama
+###reklama_big
+###reklama_left_body
+###reklama_left_up
+###reklama_right_up
+###related-ads
+###related-news-1-bottom-ad
+###related-news-1-top-ad
+###related_ad
+###related_ads
+###related_ads_box
+###removeAdsSidebar
+###removeadlink
+###responsive-ad
+###responsive-ad-sidebar-container
+###responsive_ad
+###responsivead
+###result-list-aside-topadsense
+###resultSponLinks
+###resultsAdsBottom
+###resultsAdsSB
+###resultsAdsTop
+###rh-ad
+###rh-ad-container
+###rh_tower_ad
+###rhc_ads
+###rhs_ads
+###rhs_adverts
+###rhsads
+###rhsadvert
+###richad
+###right-ad
+###right-ad-block
+###right-ad-col
+###right-ad-iframe
+###right-ad-skin
+###right-ad1
+###right-ads
+###right-ads-rail
+###right-advert
+###right-bar-ad
+###right-box-ad
+###right-content-ad
+###right-featured-ad
+###right-rail-ad-slot-content-top
+###right-widget-b-ads_widget-9
+###right-widget-c-ads_widget-7
+###right-widget-d-ads_widget-36
+###right-widget-top-ads_widget-23
+###right1-ad
+###right1ad
+###rightAD
+###rightAd
+###rightAd1
+###rightAdBar
+###rightAdBlock
+###rightAdColumn
+###rightAdContainer
+###rightAdHolder
+###rightAdUnit
+###rightAd_rdr
+###rightAds
+###rightAdsDiv
+###rightBlockAd
+###rightBottomAd
+###rightColAd
+###rightColumnAds
+###rightRailAds
+###rightSideAd
+###rightSideAdvert
+###right_Ads2
+###right_ad
+###right_ad_1
+###right_ad_2
+###right_ad_box
+###right_ad_container
+###right_ad_top
+###right_ad_wrapper
+###right_ads
+###right_ads_box
+###right_adsense
+###right_advert
+###right_advertisement
+###right_advertising
+###right_adverts
+###right_bg_ad
+###right_block_ads
+###right_bottom_ad
+###right_column_ad
+###right_column_ad_container
+###right_column_ads
+###right_column_adverts
+###right_player_ad
+###right_side_ad
+###right_sidebar_ads
+###right_top_ad
+###right_top_gad
+###rightad
+###rightad1
+###rightad2
+###rightadBorder
+###rightadBorder1
+###rightadBorder2
+###rightadContainer
+###rightadcell
+###rightadd300
+###rightadg
+###rightadhome
+###rightadpat
+###rightads
+###rightads300x250
+###rightadsarea
+###rightbar-ad
+###rightbar_ad
+###rightcol_sponsorad
+###rightgoogleads
+###rightrail-ad
+###rightside-ads
+###rightside_ad
+###rightsideadstop
+###rightskyad
+###rladvt
+###rm-adslot-bigsizebanner_1
+###rm-adslot-contentad_1
+###rotating_ad
+###rotatingads
+###row-ad
+###rowAdv
+###rtAdvertisement
+###rtMod_ad
+###scroll-ad
+###scroll_ad
+###scrollover-ad-wrap
+###search-ad
+###search-ads1
+###search-google-ads
+###search-sponsor
+###search-sponsored-links
+###searchAd
+###searchAds
+###search_ad
+###search_ads
+###second_ad_div
+###secondad
+###section-ad
+###section-ad-bottom
+###section_ad
+###section_advertisements
+###self-ad
+###sev1mposterad
+###show-ad
+###show-sticky-ad
+###showAd
+###show_ads
+###showads
+###showcaseAd
+###sic_superBannerAdTop
+###side-ad
+###side-ad-container
+###side-ads
+###side-ads-box
+###side-banner-ad
+###side-boxad
+###sideABlock
+###sideAD
+###sideAd
+###sideAd1
+###sideAd2
+###sideAd3
+###sideAd4
+###sideAdArea
+###sideAdLarge
+###sideAdSmall
+###sideAdSub
+###sideAds
+###sideBannerAd
+###sideBar-ads
+###sideBarAd
+###sideSponsors
+###side_ad
+###side_ad_module
+###side_ad_wrapper
+###side_adkit
+###side_ads
+###side_adverts
+###side_longads
+###side_sky_ad
+###side_skyscraper_ad
+###side_sponsors
+###sidead
+###sidead1
+###sideads
+###sideads_container
+###sideadscol
+###sideadvert
+###sideadzone
+###sidebar-ad
+###sidebar-ad-1
+###sidebar-ad-2
+###sidebar-ad-block
+###sidebar-ad-boxes
+###sidebar-ad-middle
+###sidebar-ad-wrap
+###sidebar-ad1
+###sidebar-ad2
+###sidebar-ad3
+###sidebar-ads
+###sidebar-ads-content
+###sidebar-ads-narrow
+###sidebar-ads-wide
+###sidebar-ads-wrapper
+###sidebar-adspace
+###sidebar-adv
+###sidebar-advertise-text
+###sidebar-advertisement
+###sidebar-left-ad
+###sidebar-main-ad
+###sidebar-sponsors
+###sidebar-top-ad
+###sidebar-top-ads
+###sidebar2-ads
+###sidebar2ads
+###sidebarAd
+###sidebarAd1
+###sidebarAd2
+###sidebarAdSense
+###sidebarAdSpace
+###sidebarAdUnitWidget
+###sidebarAds
+###sidebarAdvTop
+###sidebarAdvert
+###sidebarSponsors
+###sidebarTextAds
+###sidebarTowerAds
+###sidebar_ad
+###sidebar_ad_1
+###sidebar_ad_2
+###sidebar_ad_3
+###sidebar_ad_big
+###sidebar_ad_container
+###sidebar_ad_top
+###sidebar_ad_widget
+###sidebar_ad_wrapper
+###sidebar_adblock
+###sidebar_ads
+###sidebar_box_add
+###sidebar_topad
+###sidebarad
+###sidebarad0
+###sidebaradpane
+###sidebarads
+###sidebaradsense
+###sidebaradverts
+###sidebard-ads-wrapper
+###sidebargooglead
+###sidebargoogleads
+###sidebarrectad
+###sideline-ad
+###sidepad-ad
+###single-ad
+###single-ad-2
+###single-adblade
+###single-mpu
+###singleADS
+###singleADS3
+###singleAd
+###singleAdsContainer
+###single_ad_above_content
+###singlead
+###singleads
+###site-ad-container
+###site-ads
+###site-header__ads
+###site-leaderboard-ads
+###site-sponsor-ad
+###site-sponsors
+###siteAdHeader
+###site_bottom_ad_div
+###site_content_ad_div
+###site_top_ad
+###site_wrap_ad
+###sitead
+###skcolAdSky
+###skin-ad
+###skin-ad-left-rail-container
+###skin-ad-right-rail-container
+###skinTopAd
+###skin_adv
+###skinad-left
+###skinad-right
+###skinningads
+###sky-ad
+###sky-ads
+###sky-left
+###sky-right
+###skyAd
+###skyAdContainer
+###skyScraperAd
+###skyScrapperAd
+###skyWrapperAds
+###sky_ad
+###sky_advert
+###skyads
+###skyadwrap
+###skybox-ad
+###skyline_ad
+###skyscrapeAd
+###skyscraper-ad
+###skyscraperAd
+###skyscraperAdContainer
+###skyscraperAdWrap
+###skyscraperAds
+###skyscraperWrapperAd
+###skyscraper_ad
+###skyscraper_advert
+###skyscraperadblock
+###skyscrapper-ad
+###slideAd
+###slide_ad
+###slidead
+###slideboxad
+###slider-ad
+###sliderAdHolder
+###slider_ad
+###slideshowAd
+###slideshow_ad_300x250
+###sm-banner-ad
+###smallAd
+###small_ad
+###small_ads
+###smallad
+###smallads
+###smallerAd
+###some-ads
+###some-ads-holder
+###sp-adv-banner-top
+###sp-top-ad-wrapper
+###specialAd
+###special_ads
+###specialadfeatures
+###specials_ads
+###speed_ads
+###speeds_ads
+###sphereAd
+###sphereAd-wrap
+###splashy-ad-container-top
+###spnAds
+###spnslink
+###sponBox
+###sponLinkDiv_1
+###sponLinkDiv_2
+###spon_links
+###sponlink
+###sponlinks
+###sponsAds
+###sponsLinks
+###spons_links
+###sponseredlinks
+###sponsor-box-widget
+###sponsor-flyout
+###sponsor-flyout-wrap
+###sponsor-links
+###sponsor-partners
+###sponsor-sidebar-container
+###sponsorAd
+###sponsorAd1
+###sponsorAd2
+###sponsorAdDiv
+###sponsorBar
+###sponsorBorder
+###sponsorContainer0
+###sponsorFooter
+###sponsorLinkDiv
+###sponsorLinks
+###sponsorResults
+###sponsorSpot
+###sponsorTab
+###sponsorText
+###sponsorTextLink
+###sponsor_300x250
+###sponsor_ad
+###sponsor_ads
+###sponsor_bar
+###sponsor_bottom
+###sponsor_box
+###sponsor_deals
+###sponsor_div
+###sponsor_footer
+###sponsor_header
+###sponsor_link
+###sponsor_no
+###sponsor_posts
+###sponsor_right
+###sponsored-ads
+###sponsored-carousel-nucleus
+###sponsored-footer
+###sponsored-inline
+###sponsored-links
+###sponsored-links-alt
+###sponsored-links-container
+###sponsored-listings
+###sponsored-message
+###sponsored-products
+###sponsored-recommendations
+###sponsored-resources
+###sponsored-search
+###sponsored-text-links
+###sponsored-widget
+###sponsored1
+###sponsoredAd
+###sponsoredAdvertisement
+###sponsoredBottom
+###sponsoredBox1
+###sponsoredBox2
+###sponsoredFeaturedHoz
+###sponsoredHoz
+###sponsoredLinks
+###sponsoredLinksBox
+###sponsoredList
+###sponsoredResults
+###sponsoredResultsWide
+###sponsoredTop
+###sponsored_ads
+###sponsored_container
+###sponsored_content
+###sponsored_head
+###sponsored_label
+###sponsored_link_bottom
+###sponsored_links
+###sponsored_native_ad
+###sponsoredad
+###sponsoredads
+###sponsoredlinks
+###sponsorfeature
+###sponsorlink
+###sponsors-article
+###sponsors-block
+###sponsors-home
+###sponsorsBox
+###sponsorsContainer
+###sponsors_right_container
+###sponsors_top_container
+###sponsorsads1
+###sponsorsads2
+###sponsorship-area-wrapper
+###sponsorship-box
+###sporsored-results
+###spotlight-ads
+###spotlightAds
+###spotlight_ad
+###spotlightad
+###sprint_ad
+###sqAd
+###sq_ads
+###square-ad
+###square-ad-box
+###square-ad-space
+###square-ads
+###square-sponsors
+###squareAd
+###squareAdBottom
+###squareAdSpace
+###squareAdTop
+###squareAdWrap
+###squareAds
+###squareGoogleAd
+###square_ad
+###squaread
+###squareadevertise
+###squareadvert
+###squared_ad
+###ss-ad-overlay
+###ss-ads-container
+###staticad
+###stationad
+###sticky-ad
+###sticky-ad-bottom
+###sticky-ad-container
+###sticky-ad-header
+###sticky-add-side-block
+###sticky-ads
+###sticky-ads-top
+###sticky-custom-ads
+###sticky-footer-ad
+###sticky-footer-ads
+###sticky-left-ad
+###sticky-rail-ad
+###sticky-top-ad-spacer
+###sticky-top-ad-wrap
+###stickyAd
+###stickyAdBlock
+###stickyBottomAd
+###stickySidebarAd
+###stickySkyAd
+###sticky_sidebar_ads
+###stickyad
+###stickyads
+###stickyleftad
+###stickyrightad
+###stopAdv
+###stop_ad3
+###story-ad
+###story-bottom-ad
+###storyAd
+###story_ad
+###story_ads
+###storyad2
+###stripadv
+###subAdsFooter
+###subbgad
+###subheaderAd
+###takeover-ad
+###takeover_ad
+###takeoverad
+###td-ad-placeholder
+###tdAds
+###td_adunit1
+###td_adunit1_wrapper
+###td_adunit2
+###td_sponsorAd
+###team_ad
+###teaser3
+###template_affiliates
+###text-ad
+###text-ads
+###text-intext-ads
+###text-link-ads
+###text-linkAD
+###textAd
+###textAd1
+###textAds
+###textAdsTop
+###text_ad
+###text_ads
+###text_advert
+###textad
+###textad3
+###textlink-advertisement
+###textsponsor
+###tfm_admanagerTeaser
+###thistad
+###tile-ad
+###tileAds
+###tmInfiniteAd
+###toaster_ad
+###top-ad
+###top-ad-area
+###top-ad-banner
+###top-ad-container
+###top-ad-content
+###top-ad-desktop
+###top-ad-div
+###top-ad-google
+###top-ad-iframe
+###top-ad-rect
+###top-ad-slot
+###top-ad-slot-0
+###top-ad-slot-1
+###top-ad-unit
+###top-ad-wrapper
+###top-adblock
+###top-adds
+###top-ads
+###top-ads-1
+###top-ads-contain
+###top-ads-container
+###top-adspot
+###top-advert
+###top-advertisement
+###top-advertisements
+###top-advertising-content
+###top-banner-ad
+###top-banner-ad-browser
+###top-buy-sell-ads
+###top-dfp
+###top-head-ad
+###top-leaderboard-ad
+###top-left-ad
+###top-middle-add
+###top-not-ads
+###top-right-ad
+###top-right-ad-slot
+###top-skin-ad
+###top-skin-ad-bg
+###top-sponsor-ad
+###top-story-ad
+###top-story-ad-0
+###top300x250ad
+###top728ad
+###topAD
+###topAd
+###topAd728x90
+###topAdArea
+###topAdBanner
+###topAdBar
+###topAdBox
+###topAdContainer
+###topAdDiv
+###topAdDropdown
+###topAdHolder
+###topAdSenseDiv
+###topAdShow
+###topAdSpace
+###topAdSpace_div
+###topAdWrapper
+###topAdcontainer
+###topAds
+###topAds1
+###topAds2
+###topAdsContainer
+###topAdsDiv
+###topAdsG
+###topAdv
+###topAdvBox
+###topAdvert
+###topBanner-ad
+###topBannerAd
+###topBannerAdContainer
+###topBannerAdv
+###topImgAd
+###topLeaderboardAd
+###topMPU
+###topMpuContainer
+###topSponsorBanner
+###topSponsoredLinks
+###top_AD
+###top_ad
+###top_ad-360
+###top_ad_area
+###top_ad_banner
+###top_ad_block
+###top_ad_box
+###top_ad_container
+###top_ad_td
+###top_ad_unit
+###top_ad_wrapper
+###top_ad_zone
+###top_add
+###top_ads
+###top_ads_box
+###top_ads_container
+###top_ads_region
+###top_ads_wrap
+###top_adsense_cont
+###top_adspace
+###top_adv
+###top_advert
+###top_advert_box
+###top_advertise
+###top_advertising
+###top_banner_ads
+###top_container_ad
+###top_google_ads
+###top_mpu
+###top_mpu_ad
+###top_rectangle_ad
+###top_right_ad
+###top_row_ad
+###top_span_ad
+###top_sponsor_ads
+###top_sponsor_text
+###top_wide_ad
+###topad
+###topad-728x90
+###topad-block
+###topad-wrap
+###topad1
+###topad2
+###topad728
+###topad_holder
+###topad_left
+###topad_right
+###topad_table
+###topadbanner
+###topadbanner2
+###topadbar
+###topadblock
+###topadcell
+###topadcontainer
+###topaddwide
+###topadleft
+###topadone
+###topadplaceholder
+###topadright
+###topads-spacer
+###topads-wrapper
+###topadsblock
+###topadsdiv
+###topadsense
+###topadspace
+###topadvert
+###topadwrap
+###topadz
+###topadzone
+###topbanner_ad
+###topbanner_sponsor
+###topbannerad
+###topbanneradtitle
+###topbar-ad
+###topbarAd
+###topbarad
+###topbarads
+###topcustomad
+###topheader_ads
+###topleaderAd
+###topleaderboardad
+###topnavad
+###toppannonse
+###topright-ad
+###toprightAdvert
+###toprightad
+###toprow-ad
+###topsidebar-ad
+###topsponad
+###topsponsorads
+###topsponsored
+###toptextad
+###tor-footer-ad
+###tower1ad
+###towerAdContainer
+###towerad
+###tpl_advertising
+###transparentad
+###trc_google_ad
+###txtAdHeader
+###upper-ads
+###upperMpu
+###upperRightAds
+###upper_adbox
+###upper_advertising
+###upper_small_ad
+###upperad
+###vc-maincontainer-ad
+###vc-maincontainer-midad
+###velsof_wheel_container
+###vert-ads
+###vertAd2
+###vert_ad
+###vert_ad_placeholder
+###vertad1
+###vertical.ad
+###verticalAds
+###vertical_ad
+###vertical_ads
+###verticalads
+###video-ad
+###video-ad-companion-rectangle
+###video-adv
+###video-adv-wrapper
+###video-advert
+###video-embed-ads
+###video-in-player-ad
+###video-side-adv
+###video-sponsor-links
+###video-under-player-ad
+###videoAd
+###videoAdContainer
+###videoAdvert
+###videoCompanionAd
+###videoOverAd
+###videoOverAd300
+###videoPauseAd
+###video_adv
+###video_advert
+###video_advert_top
+###video_embed_ads
+###video_hor_bot_ads
+###video_overlay_ad
+###videoad
+###videoad-script-cnt
+###videoads
+###viewAd1
+###viewabilityAdContainer
+###visual-ad
+###vuukle-quiz-and-ad
+###vuukle_ads_square2
+###wTopAd
+###wallAd
+###wall_advert
+###wd-sponsored
+###weather-ad
+###weather_sponsor
+###weatherad
+###welcome_ad
+###wg_ads
+###wgtAd
+###whitepaper-ad
+###wide-ad
+###wideAdd
+###wide_ad_unit
+###wide_ad_unit2
+###wide_ad_unit3
+###wide_adv
+###wide_right_ad
+###widget-ads-3
+###widget-ads-4
+###widget-adv-12
+###widget-box-ad-1
+###widget-box-ad-2
+###widget_Adverts
+###widget_ad
+###widget_advertisement
+###widget_thrive_ad_default-2
+###widget_thrive_ad_default-4
+###widgetwidget_adserve
+###widgetwidget_adserve2
+###wl-pencil-ad
+###wow-ads
+###wp-insert-ad-widget-1
+###wp-topAds
+###wp_ad_marker
+###wp_adbn_root
+###wp_ads_gpt_widget-16
+###wp_ads_gpt_widget-17
+###wp_ads_gpt_widget-18
+###wp_ads_gpt_widget-19
+###wp_ads_gpt_widget-21
+###wp_ads_gpt_widget-4
+###wp_ads_gpt_widget-5
+###wpladbox1
+###wpladbox2
+###wrapAd
+###wrapAdRight
+###wrapCommentAd
+###wrapper-AD_G
+###wrapper-AD_L
+###wrapper-AD_L2
+###wrapper-AD_L3
+###wrapper-AD_PUSH
+###wrapper-AD_R
+###wrapper-ad
+###wrapper-ad970
+###wrapperAdsTopLeft
+###wrapperAdsTopRight
+###wrapperRightAds
+###wrapper_ad_Top
+###wrapper_sponsoredlinks
+###wrapper_topad
+###wtopad
+###yahoo-sponsors
+###yahooAdsBottom
+###yahooSponsored
+###yahoo_ads
+###yahoo_text_ad
+###yahooads
+###yandex_ad
+###yatadsky
+###yrail_ads
+###yreSponsoredLinks
+###ysm_ad_iframe
+###zMSplacement1
+###zMSplacement2
+###zMSplacement3
+###zMSplacement4
+###zMSplacement5
+###zMSplacement6
+###zdcFloatingBtn
+###zeus_top-banner
+###zone-adsense
+###zsAdvertisingBanner
+###zztextad
+##.-advertsSidebar
+##.AD-POST
+##.AD300
+##.AD300Block
+##.AD355125
+##.AD728
+##.ADBAR
+##.ADBnrArea
+##.ADBox
+##.ADFooter
+##.ADInfo
+##.ADLeader
+##.ADMiddle1
+##.ADPod
+##.ADServer
+##.ADStyle
+##.ADTextSingle
+##.ADTop
+##.ADV-Space
+##.ADVBig
+##.ADVFLEX_250
+##.ADVParallax
+##.ADV_Mobile
+##.AD_2
+##.AD_336_280
+##.AD_Leaderboard
+##.AD_area
+##.AD_textinfo
+##.AD_underpost
+##.ADbox
+##.ADmid
+##.ADouter_div
+##.ADwidget
+##.AL-ad-container
+##.ATF_wrapper
+##.Ad--970x90
+##.Ad--Align
+##.Ad--awareness-bp
+##.Ad--empty
+##.Ad--header
+##.Ad--loading
+##.Ad--presenter
+##.Ad--sidebar
+##.Ad-Advert_Container
+##.Ad-Container
+##.Ad-Header
+##.Ad-Inner
+##.Ad-adhesive
+##.Ad-hor-height
+##.Ad-label
+##.Ad-leaderboard
+##.Ad.Leaderboard
+##.Ad300
+##.Ad3Tile
+##.Ad728x90
+##.AdBar
+##.AdBody:not(body)
+##.AdBorder
+##.AdBottomPage
+##.AdBox
+##.AdBox160
+##.AdBox7
+##.AdBox728
+##.AdCenter
+##.AdCommercial
+##.AdCompactheader
+##.AdContainer
+##.AdContainer-Sidebar
+##.AdHeader
+##.AdHere
+##.AdHolder
+##.AdInline
+##.AdInsLink
+##.AdLeft1
+##.AdLeft2
+##.AdMedium
+##.AdMessage
+##.AdMod
+##.AdModule
+##.AdOneColumnContainer
+##.AdOuterMostContainer
+##.AdPanel
+##.AdPlaceHolder
+##.AdPlaceholder
+##.AdPlacementBannerSponsorship
+##.AdPlacementContainer
+##.AdPlacementMPU
+##.AdProduct
+##.AdRight1
+##.AdRight2
+##.AdSense
+##.AdSenseLeft
+##.AdSlot
+##.AdSpace
+##.AdSpeedWP
+##.AdTagModule
+##.AdTitle
+##.AdTop
+##.AdUnit
+##.AdUnit300
+##.AdUnit300x250
+##.AdUnitBox
+##.AdWidget_ImageWidget
+##.AdWrapper--sticky-block
+##.Ad_C
+##.Ad_D
+##.Ad_Label
+##.Ad_Right
+##.Ad_SmartBrokerBar
+##.Ad_container
+##.Adgrid_footboard
+##.Adgrid_right_rail
+##.Ads--center
+##.Ads-768x90
+##.Ads-background
+##.Ads-leaderboard
+##.Ads-slot
+##.Ads-sticky
+##.AdsBottom
+##.AdsBox
+##.AdsBoxBottom
+##.AdsBoxSection
+##.AdsBoxTop
+##.AdsInnov_responsive_ad
+##.AdsLayout__top-container
+##.AdsSections
+##.AdsSlot
+##.Ads_3
+##.Ads_4
+##.Ads__wrapper
+##.Ads_header
+##.Adsense
+##.AdsenseBox
+##.Adsinnov_flex_adcontainer
+##.Adsterra
+##.Adtext
+##.Adv468
+##.Advert-label
+##.Advert300x250
+##.AdvertContainer
+##.AdvertWrapper
+##.AdvertisementAfterHeader
+##.AdvertisementAfterPost
+##.AdvertisementAsidePost
+##.AdvertisementText
+##.AdvertisementTextTag
+##.AdvertisementTop
+##.Advertisment
+##.AdvertorialTeaser
+##.AdvtSample
+##.AdzerkBanner
+##.AffiliateAds
+##.AppFooter__BannerAd
+##.Arpian-ads
+##.Article-advert
+##.ArticleAd
+##.ArticleAdSide
+##.ArticleAdWrapper
+##.ArticleInlineAd
+##.ArticleInnerAD
+##.Article__Ad
+##.BOX_Ad
+##.BOX_LeadAd
+##.Banner300x250
+##.Banner468X60
+##.BigBoxAd
+##.BigBoxAdLabel
+##.Billboard-ad
+##.Billboard-ad-holder
+##.Billboard_2-ad-holder
+##.Billboard_3-ad-holder
+##.Billboard_4-ad-holder
+##.Billboard_5-ad-holder
+##.BlockAd
+##.BottomAd-container
+##.BottomAdContainer
+##.BottomAdsPartial
+##.BottomAffiliate
+##.BoxAd
+##.BoxAdWrap
+##.BoxRail-ad
+##.ButtonAd
+##.CommentAd
+##.ConnatixAd
+##.ContentAd
+##.ContentAds
+##.ContentBottomAd
+##.ContentTextAd
+##.ContentTopAd
+##.DFPad
+##.DartAdvert
+##.DisplayAd
+##.FirstAd
+##.FooterAd
+##.FooterAdContainer
+##.FooterAds
+##.Footer_1-ad-holder
+##.GRVAd
+##.GRVMpuWrapper
+##.Gallery-Content-BottomAd
+##.GeminiAdItem
+##.GeminiNativeAd
+##.GoogleAdInfo
+##.GoogleAdsBox
+##.GoogleAdsItem
+##.GoogleAdv
+##.GoogleDfpAd
+##.GoogleDfpAd-Content
+##.GoogleDfpAd-Float
+##.GoogleDfpAd-container
+##.GoogleDfpAd-wrap
+##.GoogleDfpAd-wrapper
+##.GoogleDfpAdModule
+##.GoogleDoubleClick-SponsorText
+##.GoogleSideAd
+##.GroupAdSense
+##.HeaderAd
+##.HeaderAds
+##.HeaderBannerAd
+##.HeadingAdSpace
+##.Hero-Ad
+##.HomeAds
+##.HomeListBlack__AdBlock
+##.InArticleAd
+##.IndexRightAd
+##.InsertedAd
+##.LastAd
+##.LayoutBottomAds
+##.LayoutHomeAds
+##.LayoutHomeAdsAd
+##.LayoutPromotionAdsNew
+##.LazyLoadAd
+##.LeaderAd
+##.LeaderAdvertisement
+##.LeaderBoardAd
+##.LearderAd_Border
+##.ListicleAdRow
+##.MPUHolder
+##.MPUad
+##.MapLayout_BottomAd
+##.MapLayout_BottomMobiAd
+##.MarketGid_container
+##.MbanAd
+##.MiddleAd
+##.MiddleAdContainer
+##.MiddleAdvert
+##.MiddleRightRadvertisement
+##.NA_ad
+##.NR-Ads
+##.NativeAdContainerRegion
+##.NavBarAd
+##.Normal-add
+##.OAS_wrap
+##.OcelotAdModule
+##.OcelotAdModule-ad
+##.PPD_ADS_JS
+##.Page-ad
+##.PageTopAd
+##.PcSideBarAd
+##.PencilAd
+##.PostAdvertisementBeforePost
+##.PostSidebarAd
+##.Post__ad
+##.PrimisResponsiveStyle
+##.PrintAd-Slider
+##.ProductAd
+##.PushdownAd
+##.RectangleAd
+##.Rectangle_1-ad-holder
+##.Rectangle_2-ad-holder
+##.Rectangle_3-ad-holder
+##.RelatedAds
+##.ResponsiveAd
+##.RightAd
+##.RightAd1
+##.RightAd2
+##.RightAdvertisement
+##.RightGoogleAd
+##.RightRailAd
+##.RightRailAds
+##.RightTowerAd
+##.STR_AdBlock
+##.SecondaryAd
+##.SecondaryAdLink
+##.Section-ad
+##.SectionSponsor
+##.SideAd
+##.SideAdCol
+##.SideAds
+##.SideWidget__ad
+##.Sidebar-ad
+##.Sidebar-ad--300x600
+##.SidebarAd
+##.SidebarAdvert
+##.SidebarRightAdvertisement
+##.SimpleAd
+##.SkyAdContainer
+##.SkyAdContent
+##.SkyScraperAd
+##.SovrnAd
+##.Sponsor-container
+##.SponsorHeader
+##.SponsorIsland
+##.SponsorLink
+##.SponsoredAdTitle
+##.SponsoredArticleAd
+##.SponsoredContent
+##.SponsoredContentWidget
+##.SponsoredLinks
+##.SponsoredLinksModule
+##.SponsoredLinksPadding
+##.SponsoredLinksPanel
+##.SponsoredResults
+##.Sponsored_link
+##.SponsorshipText
+##.SquareAd
+##.Squareadspot
+##.StandardAdLeft
+##.StandardAdRight
+##.Sticky-AdContainer
+##.StickyAdRail__Inner
+##.SummaryPage-HeaderAd
+##.TextAd
+##.TextAdds
+##.Textads
+##.ThreeAds
+##.TmnAdsense
+##.TopAd
+##.TopAdBox
+##.TopAdContainer
+##.TopAdL
+##.TopAdR
+##.TopAds
+##.TopAdsPartial
+##.TopBannerAd
+##.TopRightRadvertisement
+##.Top_Ad
+##.TrackedBannerPromo
+##.TrackedSidebarPromo
+##.TrafficAd
+##.U210-adv-column
+##.UnderAd
+##.VPCarbonAds
+##.VerticalAd
+##.Video-Ad
+##.VideoAd
+##.WPBannerizeWidget
+##.WP_Widget_Ad_manager
+##.Wdgt.widgetAds
+##.WideAdTile
+##.WideAdsLeft
+##.WidgetAdvertiser
+##.WidthAd
+##.WikiaTopAds
+##.XEad
+##._SummaryPageHeaderAdView
+##._SummaryPageSidebarStickyAdView
+##.__isboostOverContent
+##._ads
+##._ads-full
+##._ap_adrecover_ad
+##._ap_apex_ad
+##._articleAdvert
+##._bannerAds
+##._bottom_ad_wrapper
+##._ciw-betterAds
+##._fullsquaread
+##._has-ads
+##._popIn_recommend_article_ad
+##._popIn_recommend_article_ad_reserved
+##._table_ad_div_wide
+##.a-ad
+##.a-ad--aside
+##.a-ad--leaderboard
+##.a-ad--skyscraper
+##.a-ad--wide
+##.a-d-250
+##.a-d-container
+##.a-d-holder-container
+##.a-dserver
+##.a-dserver_text
+##.a-sponsor
+##.a160x600
+##.a300x250
+##.a468x60
+##.a728x90
+##.aadsection_b1
+##.aadsection_b2
+##.aarpe-ad-wrapper
+##.ab-ad_placement-article
+##.abBoxAd
+##.abMessage
+##.abPopup
+##.ablock300
+##.ablock468
+##.ablock728
+##.above-header-advert
+##.aboveCommentAds
+##.abovead
+##.ac-banner-ad
+##.ac_adbox
+##.acm-ad-container
+##.acm-ad-tag-unit
+##.acm_ad_zones
+##.ad--300
+##.ad--300x250
+##.ad--468
+##.ad--468-60
+##.ad--728x90
+##.ad--970-750-336-300
+##.ad--970-90
+##.ad--article
+##.ad--article-top
+##.ad--articlemodule
+##.ad--b
+##.ad--banner
+##.ad--banner2
+##.ad--banniere_basse
+##.ad--banniere_haute
+##.ad--billboard
+##.ad--bottom
+##.ad--bottom-label
+##.ad--bottommpu
+##.ad--boundries
+##.ad--button
+##.ad--c
+##.ad--center
+##.ad--centered
+##.ad--container
+##.ad--content
+##.ad--content-ad
+##.ad--dart
+##.ad--desktop
+##.ad--displayed
+##.ad--droite_basse
+##.ad--droite_haute
+##.ad--droite_middle
+##.ad--e
+##.ad--fallback
+##.ad--footer
+##.ad--fullsize
+##.ad--google
+##.ad--halfpage
+##.ad--header
+##.ad--homepage-top
+##.ad--in-article
+##.ad--in-content
+##.ad--inArticleBanner
+##.ad--inline
+##.ad--inner
+##.ad--large
+##.ad--leaderboard
+##.ad--loading
+##.ad--marker-inner
+##.ad--medium-rectangle
+##.ad--medium_rectangle
+##.ad--medium_rectangle_outstream
+##.ad--mediumrectangle
+##.ad--mid
+##.ad--mid-content
+##.ad--mobile
+##.ad--mpu
+##.ad--native
+##.ad--nativeFlex
+##.ad--no-bg
+##.ad--noscroll
+##.ad--object
+##.ad--outstream
+##.ad--overlayer
+##.ad--p1
+##.ad--p2
+##.ad--p3
+##.ad--p4
+##.ad--p6
+##.ad--p7
+##.ad--placeholder
+##.ad--pubperform
+##.ad--pushdown
+##.ad--rail
+##.ad--rectangle
+##.ad--rectangle1
+##.ad--rectangle2
+##.ad--right
+##.ad--rightRail
+##.ad--scroll
+##.ad--section
+##.ad--seeding
+##.ad--showmob
+##.ad--sidebar
+##.ad--sky
+##.ad--skyscraper
+##.ad--slider
+##.ad--slot
+##.ad--sponsor-content
+##.ad--square-rectangle
+##.ad--sticky
+##.ad--stripe
+##.ad--stroeer
+##.ad--stroer
+##.ad--subcontainer
+##.ad--tabletDesktop
+##.ad--top
+##.ad--top-desktop
+##.ad--top-leaderboard
+##.ad--top-slot
+##.ad--topmobile
+##.ad--topmobile2
+##.ad--topmobile3
+##.ad--wallpaper
+##.ad--widget
+##.ad--wrapper
+##.ad-1
+##.ad-1-drzac-links
+##.ad-1-sidebar-1
+##.ad-1-sidebar-2
+##.ad-10
+##.ad-101
+##.ad-11
+##.ad-12
+##.ad-120-60
+##.ad-120-600-inner
+##.ad-120-bottom
+##.ad-120-top
+##.ad-120x60
+##.ad-120x600
+##.ad-120x90
+##.ad-121
+##.ad-125
+##.ad-125x125
+##.ad-13
+##.ad-137
+##.ad-14
+##.ad-140x45-2
+##.ad-150
+##.ad-160
+##.ad-160-160
+##.ad-160-600
+##.ad-160-above
+##.ad-160x600
+##.ad-160x600-gallery
+##.ad-160x600-home
+##.ad-160x600-wrap
+##.ad-160x600x1
+##.ad-160x600x2
+##.ad-160x600x3
+##.ad-194
+##.ad-2
+##.ad-200
+##.ad-200-big
+##.ad-200-small
+##.ad-200x200
+##.ad-228x94
+##.ad-230x90
+##.ad-234
+##.ad-246x90
+##.ad-250
+##.ad-250x125
+##.ad-250x250
+##.ad-250x300
+##.ad-260x60
+##.ad-270x100
+##.ad-3
+##.ad-300
+##.ad-300-2
+##.ad-300-250-600
+##.ad-300-600
+##.ad-300-b
+##.ad-300-b-absolute
+##.ad-300-block
+##.ad-300-blog
+##.ad-300-dummy
+##.ad-300-flex
+##.ad-300-x-250
+##.ad-300X250
+##.ad-300X250-body
+##.ad-300x
+##.ad-300x100
+##.ad-300x200
+##.ad-300x250
+##.ad-300x250-first
+##.ad-300x250-home
+##.ad-300x250-right0
+##.ad-300x250-singlepost
+##.ad-300x250_600x250
+##.ad-300x600
+##.ad-300x70
+##.ad-300x75
+##.ad-319x128
+##.ad-336
+##.ad-336x280
+##.ad-336x280B
+##.ad-350
+##.ad-355x75
+##.ad-3x1
+##.ad-4
+##.ad-468
+##.ad-468-bottom
+##.ad-468-top
+##.ad-468x120
+##.ad-468x60
+##.ad-5
+##.ad-544x250
+##.ad-55
+##.ad-560
+##.ad-6
+##.ad-600
+##.ad-600-h
+##.ad-635x40
+##.ad-7
+##.ad-720-affiliate
+##.ad-728
+##.ad-728-90
+##.ad-728-banner
+##.ad-728-x-90
+##.ad-728x90
+##.ad-728x90-1
+##.ad-728x90-top
+##.ad-728x90-top0
+##.ad-728x90-wrapper
+##.ad-728x90_forum
+##.ad-768
+##.ad-8
+##.ad-88-60
+##.ad-88-text
+##.ad-88x31
+##.ad-9
+##.ad-90
+##.ad-90x600
+##.ad-970
+##.ad-970-250
+##.ad-970-90
+##.ad-970x250-container
+##.ad-970x250-home
+##.ad-980-1
+##.ad-Advert_Placeholder
+##.ad-CUSTOM
+##.ad-E
+##.ad-LREC
+##.ad-LREC2
+##.ad-Leaderboard
+##.ad-MPU
+##.ad-MediumRectangle
+##.ad-PENCIL
+##.ad-RR
+##.ad-S
+##.ad-Square
+##.ad-SuperBanner
+##.ad-TOPPER
+##.ad-W
+##.ad-a
+##.ad-ab
+##.ad-abc
+##.ad-above-header
+##.ad-accordion
+##.ad-active
+##.ad-adSense
+##.ad-adcode
+##.ad-adhesion
+##.ad-adlink-bottom
+##.ad-adlink-side
+##.ad-adsense
+##.ad-adsense-block-250
+##.ad-advertisement-horizontal
+##.ad-affiliate
+##.ad-after-content
+##.ad-after-header
+##.ad-align-none
+##.ad-aligncenter
+##.ad-alignment
+##.ad-alsorectangle
+##.ad-anchor
+##.ad-aps-wide
+##.ad-area
+##.ad-area--pd
+##.ad-area-small
+##.ad-article-breaker
+##.ad-article-inline
+##.ad-article-teaser
+##.ad-article-wrapper
+##.ad-aside-pc-billboard
+##.ad-atf
+##.ad-atf-top
+##.ad-background
+##.ad-background-center
+##.ad-background-container
+##.ad-ban
+##.ad-banner-2
+##.ad-banner-250x600
+##.ad-banner-300
+##.ad-banner-300x250
+##.ad-banner-5
+##.ad-banner-6
+##.ad-banner-728x90
+##.ad-banner-bottom-container
+##.ad-banner-box
+##.ad-banner-btf
+##.ad-banner-container
+##.ad-banner-content
+##.ad-banner-full-wrapper
+##.ad-banner-header
+##.ad-banner-image
+##.ad-banner-inlisting
+##.ad-banner-leaderboard
+##.ad-banner-placeholder
+##.ad-banner-single
+##.ad-banner-smaller
+##.ad-banner-static
+##.ad-banner-top
+##.ad-banner-top-wrapper
+##.ad-banner-wrapper
+##.ad-banners
+##.ad-bar
+##.ad-bar-header
+##.ad-bb
+##.ad-before-header
+##.ad-below
+##.ad-below-images
+##.ad-below-player
+##.ad-belowarticle
+##.ad-bg
+##.ad-big
+##.ad-big-box
+##.ad-bigbanner
+##.ad-bigbillboard
+##.ad-bigbox
+##.ad-bigbox-double-inread
+##.ad-bigbox-fixed
+##.ad-bigsize
+##.ad-billboard
+##.ad-bline
+##.ad-block
+##.ad-block--300
+##.ad-block--leader
+##.ad-block-300
+##.ad-block-banner-container
+##.ad-block-big
+##.ad-block-bottom
+##.ad-block-btf
+##.ad-block-container
+##.ad-block-header
+##.ad-block-holder
+##.ad-block-inside
+##.ad-block-mod
+##.ad-block-section
+##.ad-block-square
+##.ad-block-sticky-ad
+##.ad-block-wide
+##.ad-block-wk
+##.ad-block-wrapper
+##.ad-block-wrapper-dev
+##.ad-blogads
+##.ad-bnr
+##.ad-body
+##.ad-boombox
+##.ad-border
+##.ad-bordered
+##.ad-borderless
+##.ad-bot
+##.ad-bottom
+##.ad-bottom-container
+##.ad-bottom-right-container
+##.ad-bottom728x90
+##.ad-bottomLeft
+##.ad-bottomleader
+##.ad-bottomline
+##.ad-box
+##.ad-box-2
+##.ad-box-300x250
+##.ad-box-auto
+##.ad-box-caption
+##.ad-box-container
+##.ad-box-title
+##.ad-box-up
+##.ad-box-video
+##.ad-box-wrapper
+##.ad-box1
+##.ad-box2
+##.ad-box3
+##.ad-box_h
+##.ad-boxamp-wrapper
+##.ad-boxbottom
+##.ad-boxes
+##.ad-boxrr-wrapper
+##.ad-boxsticky
+##.ad-boxtop
+##.ad-brdr-btm
+##.ad-break
+##.ad-break-item
+##.ad-breaker
+##.ad-breakout
+##.ad-browse-rectangle
+##.ad-bt
+##.ad-btn
+##.ad-btn-heading
+##.ad-bug-300w
+##.ad-burnside
+##.ad-button
+##.ad-buttons
+##.ad-c-label
+##.ad-cad
+##.ad-calendar
+##.ad-call-300x250
+##.ad-callout
+##.ad-callout-wrapper
+##.ad-caption
+##.ad-card
+##.ad-card-container
+##.ad-carousel
+##.ad-cat
+##.ad-catfish
+##.ad-cell
+##.ad-cen
+##.ad-cen2
+##.ad-cen3
+##.ad-center
+##.ad-centered
+##.ad-centering
+##.ad-chartbeatwidget
+##.ad-choices
+##.ad-circ
+##.ad-click
+##.ad-close-button
+##.ad-cls
+##.ad-cls-fix
+##.ad-cnt
+##.ad-code
+##.ad-codes
+##.ad-col
+##.ad-col-02
+##.ad-colour
+##.ad-column
+##.ad-comment
+##.ad-companion
+##.ad-complete
+##.ad-component
+##.ad-component-fullbanner2
+##.ad-component-wrapper
+##.ad-contain
+##.ad-contain-300x250
+##.ad-contain-top
+##.ad-container--inline
+##.ad-container--leaderboard
+##.ad-container--masthead
+##.ad-container--mrec
+##.ad-container--stripe
+##.ad-container--top
+##.ad-container-160x600
+##.ad-container-300x250
+##.ad-container-728
+##.ad-container-728x90
+##.ad-container-adsense
+##.ad-container-banner-top
+##.ad-container-bot
+##.ad-container-bottom
+##.ad-container-box
+##.ad-container-embedded
+##.ad-container-header
+##.ad-container-inner
+##.ad-container-inthread
+##.ad-container-leaderboard
+##.ad-container-left
+##.ad-container-m
+##.ad-container-medium-rectangle
+##.ad-container-middle
+##.ad-container-multiple
+##.ad-container-pave
+##.ad-container-property
+##.ad-container-responsive
+##.ad-container-right
+##.ad-container-side
+##.ad-container-single
+##.ad-container-tool
+##.ad-container-top
+##.ad-container-topad
+##.ad-container-wrapper
+##.ad-container1
+##.ad-container3x
+##.ad-container__ad-slot
+##.ad-container__leaderboard
+##.ad-container__sticky-wrapper
+##.ad-container_row
+##.ad-content
+##.ad-content-area
+##.ad-content-rectangle
+##.ad-content-slot
+##.ad-content-wrapper
+##.ad-context
+##.ad-cover
+##.ad-critical
+##.ad-cta
+##.ad-ctn
+##.ad-current
+##.ad-curtain
+##.ad-custom-size
+##.ad-d
+##.ad-decoration
+##.ad-defer
+##.ad-description
+##.ad-desktop
+##.ad-desktop-in-content
+##.ad-desktop-legacy
+##.ad-desktop-native-1
+##.ad-desktop-native-2
+##.ad-desktop-only
+##.ad-desktop-right
+##.ad-detail
+##.ad-dfp-column
+##.ad-dfp-row
+##.ad-disclaimer
+##.ad-disclaimer-container
+##.ad-disclaimer-text
+##.ad-display
+##.ad-displayed
+##.ad-div-a0-wrapper
+##.ad-div-t0-wrapper
+##.ad-diver
+##.ad-divider
+##.ad-dog
+##.ad-dog__cnx-container
+##.ad-dog__ratio-16x9
+##.ad-dt
+##.ad-dx_wrp
+##.ad-e
+##.ad-element
+##.ad-enabled
+##.ad-endcap-wrapper
+##.ad-engage
+##.ad-entity-container
+##.ad-entry-wrapper
+##.ad-ex
+##.ad-exchange
+##.ad-expand
+##.ad-external
+##.ad-fadein
+##.ad-fadeup
+##.ad-feature-content
+##.ad-feature-sponsor
+##.ad-feature-text
+##.ad-featured-video-caption
+##.ad-feedback
+##.ad-fi
+##.ad-field
+##.ad-filler
+##.ad-filmstrip
+##.ad-first
+##.ad-fix
+##.ad-fixed
+##.ad-flag
+##.ad-flex
+##.ad-flex-center
+##.ad-float
+##.ad-floating
+##.ad-floor
+##.ad-footer
+##.ad-footer-empty
+##.ad-footer-leaderboard
+##.ad-format-300x250
+##.ad-format-300x600
+##.ad-forum
+##.ad-frame
+##.ad-frame-container
+##.ad-full
+##.ad-full-width
+##.ad-fullbanner
+##.ad-fullbanner-btf-container
+##.ad-fullbannernohieght
+##.ad-fullwidth
+##.ad-gap-sm
+##.ad-giga
+##.ad-google
+##.ad-google-contextual
+##.ad-gpt
+##.ad-gpt-breaker
+##.ad-gpt-container
+##.ad-gpt-main
+##.ad-gpt-vertical
+##.ad-graphic-large
+##.ad-gray
+##.ad-grey
+##.ad-grid
+##.ad-grid-125
+##.ad-grid-container
+##.ad-group
+##.ad-grp
+##.ad-h
+##.ad-h-250
+##.ad-h-60
+##.ad-halfpage
+##.ad-halfpage-placeholder
+##.ad-hdr
+##.ad-head
+##.ad-header
+##.ad-header-below
+##.ad-header-container
+##.ad-header-creative
+##.ad-header-inner-wrap
+##.ad-header-pencil
+##.ad-header-placeholder
+##.ad-header-sidebar
+##.ad-header-small-square
+##.ad-heading
+##.ad-headliner-container
+##.ad-heigh-mobile-250
+##.ad-height-250
+##.ad-height-280
+##.ad-height-600
+##.ad-here
+##.ad-hero
+##.ad-hfu
+##.ad-hide-mobile
+##.ad-hideable
+##.ad-hint
+##.ad-hldr-tmc
+##.ad-ho
+##.ad-hold
+##.ad-holder
+##.ad-holder-center
+##.ad-holder-mob-300
+##.ad-home-bottom
+##.ad-home-leaderboard-placeholder
+##.ad-home-right
+##.ad-homeleaderboard
+##.ad-homepage
+##.ad-homepage-1
+##.ad-homepage-2
+##.ad-homepage-one
+##.ad-hor
+##.ad-horizontal
+##.ad-horizontal-large
+##.ad-horizontal-top
+##.ad-horizontal-top-wrapper
+##.ad-house-btac
+##.ad-housepromo-d-wrapper
+##.ad-hoverable
+##.ad-hpto
+##.ad-href1
+##.ad-href2
+##.ad-iab-txt
+##.ad-icon
+##.ad-identifier
+##.ad-iframe
+##.ad-iframe-container
+##.ad-imagehold
+##.ad-in-300x250
+##.ad-in-artilce
+##.ad-in-content
+##.ad-in-content-300
+##.ad-in-post
+##.ad-in-read
+##.ad-in-results
+##.ad-incontent
+##.ad-incontent-wrap
+##.ad-index-main
+##.ad-indicator-horiz
+##.ad-info-wrap
+##.ad-inline
+##.ad-inline-article
+##.ad-inline-block
+##.ad-inner
+##.ad-inner-container
+##.ad-inner-container-background
+##.ad-innr
+##.ad-insert
+##.ad-inserter-widget
+##.ad-inside
+##.ad-integrated-display
+##.ad-internal
+##.ad-interruptor
+##.ad-interstitial
+##.ad-island
+##.ad-item
+##.ad-item-related
+##.ad-itself
+##.ad-label
+##.ad-lable
+##.ad-landscape
+##.ad-large-1
+##.ad-large-game
+##.ad-last
+##.ad-lat
+##.ad-lat2
+##.ad-layer
+##.ad-lazy
+##.ad-lb
+##.ad-ldrbrd
+##.ad-lead
+##.ad-lead-bottom
+##.ad-leader
+##.ad-leader-board
+##.ad-leader-bottom
+##.ad-leader-plus-top
+##.ad-leader-top
+##.ad-leader-wrap
+##.ad-leader-wrapper
+##.ad-leaderboard
+##.ad-leaderboard-base
+##.ad-leaderboard-companion
+##.ad-leaderboard-container
+##.ad-leaderboard-flex
+##.ad-leaderboard-footer
+##.ad-leaderboard-header
+##.ad-leaderboard-middle
+##.ad-leaderboard-placeholder
+##.ad-leaderboard-slot
+##.ad-leaderboard-splitter
+##.ad-leaderboard-top
+##.ad-leaderboard-wrapper
+##.ad-leaderbody
+##.ad-leaderheader
+##.ad-leadtop
+##.ad-left-1
+##.ad-left-top
+##.ad-leftrail
+##.ad-lib-div
+##.ad-line
+##.ad-link
+##.ad-link-block
+##.ad-link-label
+##.ad-link-left
+##.ad-link-right
+##.ad-links
+##.ad-links-text
+##.ad-list-desktop
+##.ad-list-item
+##.ad-loaded
+##.ad-loader
+##.ad-location
+##.ad-location-container
+##.ad-lock
+##.ad-lock-content
+##.ad-lowerboard
+##.ad-lrec
+##.ad-m-banner
+##.ad-m-mrec
+##.ad-m-rec
+##.ad-mad
+##.ad-main
+##.ad-manager-ad
+##.ad-manager-placeholder
+##.ad-manager-wrapper
+##.ad-margin
+##.ad-marketplace
+##.ad-marketswidget
+##.ad-marquee
+##.ad-masthead
+##.ad-masthead-1
+##.ad-masthead-left
+##.ad-mb
+##.ad-med
+##.ad-med-rec
+##.ad-med-rect
+##.ad-med-rect-tmp
+##.ad-medium
+##.ad-medium-container
+##.ad-medium-content
+##.ad-medium-rectangle
+##.ad-medium-rectangle-base
+##.ad-medium-two
+##.ad-medium-widget
+##.ad-medrect
+##.ad-megaboard
+##.ad-message
+##.ad-messaging
+##.ad-microsites
+##.ad-midleader
+##.ad-mobile
+##.ad-mobile--sticky
+##.ad-mobile-300x150
+##.ad-mobile-300x250
+##.ad-mobile-300x50
+##.ad-mobile-banner
+##.ad-mobile-dynamic
+##.ad-mobile-flex-inc
+##.ad-mobile-flex-pos2
+##.ad-mobile-incontent-ad-plus
+##.ad-mobile-mpu-plus-outstream-inc
+##.ad-mobile-nav-ad-plus
+##.ad-mod
+##.ad-mod-section
+##.ad-mod-section-728-90
+##.ad-module
+##.ad-mount
+##.ad-mpl
+##.ad-mpu
+##.ad-mpu-bottom
+##.ad-mpu-container
+##.ad-mpu-middle
+##.ad-mpu-middle2
+##.ad-mpu-placeholder
+##.ad-mpu-plus-top
+##.ad-mpu-top
+##.ad-mpu__aside
+##.ad-mpufixed
+##.ad-mr-article
+##.ad-mrec
+##.ad-mrect
+##.ad-msg
+##.ad-msn
+##.ad-native
+##.ad-native-top-sidebar
+##.ad-nav-ad
+##.ad-nav-ad-plus
+##.ad-new
+##.ad-new-box
+##.ad-no-css
+##.ad-no-mobile
+##.ad-no-notice
+##.ad-no-style
+##.ad-noBorderAndMargin
+##.ad-noline
+##.ad-note
+##.ad-notice
+##.ad-notice-small
+##.ad-observer
+##.ad-oms
+##.ad-on
+##.ad-on-top
+##.ad-one
+##.ad-other
+##.ad-outer
+##.ad-outlet
+##.ad-outline
+##.ad-output-middle
+##.ad-output-wrapper
+##.ad-outside
+##.ad-overlay
+##.ad-packs
+##.ad-padding
+##.ad-page-leader
+##.ad-page-medium
+##.ad-page-setting
+##.ad-pagehead
+##.ad-panel
+##.ad-panel-wrap
+##.ad-panel__container
+##.ad-panel__container--styled
+##.ad-panel__googlead
+##.ad-panorama
+##.ad-parallax
+##.ad-parent-class
+##.ad-pb
+##.ad-peg
+##.ad-pencil-margin
+##.ad-permalink
+##.ad-personalise
+##.ad-place
+##.ad-place-active
+##.ad-place-holder
+##.ad-placeholder
+##.ad-placeholder--mpu
+##.ad-placeholder-leaderboard
+##.ad-placeholder-wrapper
+##.ad-placeholder-wrapper-dynamic
+##.ad-placeholder__inner
+##.ad-placement-left
+##.ad-placement-right
+##.ad-placement_desktop-top-sticky
+##.ad-places
+##.ad-plea
+##.ad-poc
+##.ad-poc-admin
+##.ad-point
+##.ad-popup
+##.ad-popup-content
+##.ad-pos
+##.ad-pos-0
+##.ad-pos-1
+##.ad-pos-2
+##.ad-pos-3
+##.ad-pos-4
+##.ad-pos-5
+##.ad-pos-6
+##.ad-pos-7
+##.ad-pos-8
+##.ad-pos-middle
+##.ad-pos-top
+##.ad-position
+##.ad-position-1
+##.ad-position-2
+##.ad-poss
+##.ad-post
+##.ad-post-footer
+##.ad-post-top
+##.ad-postText
+##.ad-poster
+##.ad-posterad-inlisting
+##.ad-preloader-container
+##.ad-preparing
+##.ad-prevent-jump
+##.ad-primary
+##.ad-primary-desktop
+##.ad-primary-sidebar
+##.ad-priority
+##.ad-program-list
+##.ad-program-top
+##.ad-promo
+##.ad-pub
+##.ad-push
+##.ad-pushdown
+##.ad-r
+##.ad-rac-box
+##.ad-rail
+##.ad-rail-wrapper
+##.ad-ratio
+##.ad-rb-hover
+##.ad-reader-con-item
+##.ad-rect
+##.ad-rect-atf-01
+##.ad-rect-top-right
+##.ad-rectangle
+##.ad-rectangle-1
+##.ad-rectangle-banner
+##.ad-rectangle-container
+##.ad-rectangle-long
+##.ad-rectangle-long-sky
+##.ad-rectangle-text
+##.ad-rectangle-wide
+##.ad-rectangle-xs
+##.ad-rectangle2
+##.ad-rectanglemed
+##.ad-region
+##.ad-region-delay-load
+##.ad-region__top
+##.ad-related
+##.ad-relatedbottom
+##.ad-render-space
+##.ad-responsive
+##.ad-responsive-slot
+##.ad-responsive-wide
+##.ad-result
+##.ad-rev-content
+##.ad-rh
+##.ad-right
+##.ad-right-header
+##.ad-right1
+##.ad-right2
+##.ad-right3
+##.ad-risingstar-container
+##.ad-roadblock
+##.ad-root
+##.ad-rotation
+##.ad-rotator
+##.ad-row
+##.ad-row-box
+##.ad-row-horizontal
+##.ad-row-horizontal-top
+##.ad-row-viewport
+##.ad-s
+##.ad-s-rendered
+##.ad-sample
+##.ad-script-processed
+##.ad-scroll
+##.ad-scrollpane
+##.ad-search-grid
+##.ad-secondary-desktop
+##.ad-section
+##.ad-section-body
+##.ad-section-one
+##.ad-section-three
+##.ad-section__skyscraper
+##.ad-sense
+##.ad-sense-ad
+##.ad-sep
+##.ad-separator
+##.ad-shifted
+##.ad-show-label
+##.ad-showcase
+##.ad-side
+##.ad-side-one
+##.ad-side-top
+##.ad-side-wrapper
+##.ad-sidebar
+##.ad-sidebar-mrec
+##.ad-sidebar-skyscraper
+##.ad-siderail
+##.ad-signup
+##.ad-single-bottom
+##.ad-sitewide
+##.ad-size-300x600
+##.ad-size-landscape
+##.ad-size-leaderboard
+##.ad-size-medium-rectangle
+##.ad-size-medium-rectangle-flex
+##.ad-size-mpu
+##.ad-skeleton
+##.ad-skin-link
+##.ad-sky
+##.ad-sky-left
+##.ad-sky-right
+##.ad-sky-wrap
+##.ad-skyscr
+##.ad-skyscraper
+##.ad-skyscraper1
+##.ad-skyscraper2
+##.ad-skyscraper3
+##.ad-slider
+##.ad-slot
+##.ad-slot--container
+##.ad-slot--inline
+##.ad-slot--leaderboard--article--wrapper
+##.ad-slot--mostpop
+##.ad-slot--mpu-banner-ad
+##.ad-slot--rendered
+##.ad-slot--right
+##.ad-slot--top
+##.ad-slot--top-above-nav
+##.ad-slot--top-banner-ad
+##.ad-slot--wrapper
+##.ad-slot-1
+##.ad-slot-2
+##.ad-slot-234-60
+##.ad-slot-300-250
+##.ad-slot-728-90
+##.ad-slot-a
+##.ad-slot-article
+##.ad-slot-banner
+##.ad-slot-bigbox
+##.ad-slot-billboard
+##.ad-slot-box
+##.ad-slot-container
+##.ad-slot-container-1
+##.ad-slot-full-width
+##.ad-slot-header
+##.ad-slot-horizontal
+##.ad-slot-inview
+##.ad-slot-ph
+##.ad-slot-placeholder
+##.ad-slot-rail
+##.ad-slot-replies
+##.ad-slot-replies-header
+##.ad-slot-responsive
+##.ad-slot-sidebar
+##.ad-slot-sidebar-b
+##.ad-slot-tall
+##.ad-slot-top
+##.ad-slot-top-728
+##.ad-slot-widget
+##.ad-slot-wrapper
+##.ad-slotRg
+##.ad-slotRgc
+##.ad-slot__ad--top
+##.ad-slot__content
+##.ad-slot__label
+##.ad-slot__oas
+##.ad-slots-wrapper
+##.ad-slug
+##.ad-small
+##.ad-small-1
+##.ad-small-2
+##.ad-smallBP
+##.ad-source
+##.ad-sp
+##.ad-space
+##.ad-space-mpu-box
+##.ad-space-topbanner
+##.ad-spacing
+##.ad-span
+##.ad-speedbump
+##.ad-splash
+##.ad-sponsor
+##.ad-sponsor-large-container
+##.ad-sponsor-text
+##.ad-sponsored-feed-top
+##.ad-sponsored-links
+##.ad-sponsored-post
+##.ad-sponsors
+##.ad-spot
+##.ad-spotlight
+##.ad-spteaser
+##.ad-sq-super
+##.ad-square
+##.ad-square-placeholder
+##.ad-square2-container
+##.ad-square300
+##.ad-squares
+##.ad-stack
+##.ad-standard
+##.ad-statement
+##.ad-static
+##.ad-sticky
+##.ad-sticky-banner
+##.ad-sticky-bottom
+##.ad-sticky-container
+##.ad-sticky-slot
+##.ad-sticky-wrapper
+##.ad-stickyhero
+##.ad-stickyhero--standard
+##.ad-stickyhero-enable-mobile
+##.ad-story-inject
+##.ad-story-top
+##.ad-strategic
+##.ad-strip
+##.ad-style2
+##.ad-subnav-container
+##.ad-subtitle
+##.ad-summary
+##.ad-superbanner
+##.ad-superbanner-node
+##.ad-t
+##.ad-t-text
+##.ad-table
+##.ad-tabs
+##.ad-tag
+##.ad-tag-square
+##.ad-tag__inner
+##.ad-tag__wrapper
+##.ad-takeover
+##.ad-takeover-homepage
+##.ad-tall
+##.ad-tech-widget
+##.ad-temp
+##.ad-text
+##.ad-text-centered
+##.ad-text-label
+##.ad-text-link
+##.ad-text-links
+##.ad-textads
+##.ad-textlink
+##.ad-thanks
+##.ad-ticker
+##.ad-tile
+##.ad-title
+##.ad-tl1
+##.ad-top
+##.ad-top-300x250
+##.ad-top-728
+##.ad-top-728x90
+##.ad-top-banner
+##.ad-top-billboard
+##.ad-top-billboard-init
+##.ad-top-box-right
+##.ad-top-container
+##.ad-top-featured
+##.ad-top-in
+##.ad-top-lboard
+##.ad-top-left
+##.ad-top-mpu
+##.ad-top-padding
+##.ad-top-rectangle
+##.ad-top-right-container
+##.ad-top-side
+##.ad-top-slot
+##.ad-top-spacing
+##.ad-top-wrap-inner
+##.ad-top-wrapper
+##.ad-topbanner
+##.ad-topper
+##.ad-topright
+##.ad-topteaser
+##.ad-total
+##.ad-total1
+##.ad-tower
+##.ad-tower-container
+##.ad-towers
+##.ad-transition
+##.ad-trck
+##.ad-two
+##.ad-twos
+##.ad-txt
+##.ad-txt-red
+##.ad-type
+##.ad-type-branding
+##.ad-type-cube
+##.ad-type-flex-leaderboard
+##.ad-unit
+##.ad-unit--leaderboard
+##.ad-unit-2
+##.ad-unit-300
+##.ad-unit-300-wrapper
+##.ad-unit-container
+##.ad-unit-horisontal
+##.ad-unit-inline-center
+##.ad-unit-label
+##.ad-unit-mpu
+##.ad-unit-panel
+##.ad-unit-secondary
+##.ad-unit-sponsored-bar
+##.ad-unit-t
+##.ad-unit-text
+##.ad-unit-top
+##.ad-unit-wrapper
+##.ad-unit__inner
+##.ad-units-single-header-wrapper
+##.ad-update
+##.ad-us
+##.ad-v
+##.ad-vert
+##.ad-vertical
+##.ad-vertical-container
+##.ad-vertical-stack-ad
+##.ad-view-zone
+##.ad-w
+##.ad-w-300
+##.ad-w-468
+##.ad-w-728
+##.ad-w-970
+##.ad-w300
+##.ad-wallpaper-panorama-container
+##.ad-warning
+##.ad-warp
+##.ad-watermark
+##.ad-wgt
+##.ad-wide
+##.ad-wide-bottom
+##.ad-wide-wrap
+##.ad-widget
+##.ad-widget-area
+##.ad-widget-box
+##.ad-widget-list
+##.ad-widget-sizes
+##.ad-widget-wrapper
+##.ad-widgets
+##.ad-width-300
+##.ad-width-728
+##.ad-wireframe
+##.ad-wireframe-wrapper
+##.ad-with-background
+##.ad-with-header-wrapper
+##.ad-with-notice
+##.ad-wp
+##.ad-wp-720
+##.ad-wrap
+##.ad-wrap-leaderboard
+##.ad-wrap-transparent
+##.ad-wrap_wallpaper
+##.ad-wrapp
+##.ad-wrapper
+##.ad-wrapper--ad-unit-wrap
+##.ad-wrapper--articletop
+##.ad-wrapper--lg
+##.ad-wrapper--sidebar
+##.ad-wrapper-250
+##.ad-wrapper-bg
+##.ad-wrapper-left
+##.ad-wrapper-mobile-atf
+##.ad-wrapper-outer
+##.ad-wrapper-solid
+##.ad-wrapper-sticky
+##.ad-wrapper-top
+##.ad-wrapper-with-text
+##.ad-wrapper__ad-slug
+##.ad-xs-title
+##.ad-zone
+##.ad-zone-ajax
+##.ad-zone-container
+##.ad.addon
+##.ad.bottom_article_leaderboard
+##.ad.bottomrect
+##.ad.box
+##.ad.brandboard
+##.ad.card
+##.ad.center
+##.ad.contentboard
+##.ad.desktop-970x250
+##.ad.element
+##.ad.floater-link
+##.ad.gallery
+##.ad.halfpage
+##.ad.inner
+##.ad.item
+##.ad.leaderboard
+##.ad.maxiboard
+##.ad.maxisky
+##.ad.middlerect
+##.ad.module
+##.ad.monsterboard
+##.ad.netboard
+##.ad.post-area
+##.ad.promotion
+##.ad.rectangle
+##.ad.rectangle_2
+##.ad.rectangle_3
+##.ad.rectangle_home_1
+##.ad.section
+##.ad.sidebar-module
+##.ad.size-300x250
+##.ad.skybridgeleft
+##.ad.small-mpu
+##.ad.small-teaser
+##.ad.super
+##.ad.wideboard_tablet
+##.ad.widget
+##.ad02
+##.ad03
+##.ad04
+##.ad08sky
+##.ad1-float
+##.ad1-left
+##.ad1-right
+##.ad10
+##.ad100
+##.ad1000
+##.ad1001
+##.ad100x100
+##.ad120
+##.ad120_600
+##.ad120x120
+##.ad120x240GrayBorder
+##.ad120x60
+##.ad120x600
+##.ad125
+##.ad125x125
+##.ad125x125a
+##.ad125x125b
+##.ad140
+##.ad160
+##.ad160600
+##.ad160_blk
+##.ad160_l
+##.ad160_r
+##.ad160b
+##.ad160x160
+##.ad160x600
+##.ad160x600GrayBorder
+##.ad160x600_1
+##.ad160x600box
+##.ad170x30
+##.ad18
+##.ad180
+##.ad180x80
+##.ad185x100
+##.ad19
+##.ad1Image
+##.ad1_bottom
+##.ad1_latest
+##.ad1_top
+##.ad1b
+##.ad1left
+##.ad1x1
+##.ad2-float
+##.ad200
+##.ad200x60
+##.ad220x50
+##.ad230
+##.ad233x224
+##.ad234
+##.ad234x60
+##.ad236x62
+##.ad240
+##.ad250
+##.ad250wrap
+##.ad250x250
+##.ad250x300
+##.ad260
+##.ad260x60
+##.ad284x134
+##.ad290
+##.ad2content_box
+##.ad300
+##.ad300-hp-top
+##.ad3001
+##.ad300250
+##.ad300Block
+##.ad300Wrapper
+##.ad300X250
+##.ad300_2
+##.ad300_250
+##.ad300_bg
+##.ad300_ver2
+##.ad300b
+##.ad300banner
+##.ad300px
+##.ad300shows
+##.ad300top
+##.ad300w
+##.ad300x-placeholder
+##.ad300x100
+##.ad300x111
+##.ad300x120
+##.ad300x150
+##.ad300x250
+##.ad300x250-1
+##.ad300x250-2
+##.ad300x250-home
+##.ad300x250-hp-features
+##.ad300x250-inline
+##.ad300x250-stacked
+##.ad300x2501
+##.ad300x250GrayBorder
+##.ad300x250Module
+##.ad300x250Right
+##.ad300x250Top
+##.ad300x250_box
+##.ad300x250_container
+##.ad300x250a
+##.ad300x250b
+##.ad300x250box
+##.ad300x250box2
+##.ad300x250flex
+##.ad300x250s
+##.ad300x250x2
+##.ad300x40
+##.ad300x50-right
+##.ad300x600
+##.ad300x600cat
+##.ad300x600post
+##.ad300x77
+##.ad300x90
+##.ad310
+##.ad315
+##.ad320x250
+##.ad320x50
+##.ad336
+##.ad336_b
+##.ad336x250
+##.ad336x280
+##.ad336x362
+##.ad343x290
+##.ad350
+##.ad350r
+##.ad360
+##.ad366
+##.ad3rdParty
+##.ad400
+##.ad400right
+##.ad400x40
+##.ad450
+##.ad468
+##.ad468_60
+##.ad468box
+##.ad468innerboxadpic
+##.ad468x60
+##.ad468x60Wrap
+##.ad468x60_main
+##.ad470x60
+##.ad530
+##.ad540x90
+##.ad590
+##.ad590x90
+##.ad5_container
+##.ad600
+##.ad612x80
+##.ad620x70
+##.ad626X35
+##.ad640x480
+##.ad644
+##.ad650x140
+##.ad652
+##.ad70
+##.ad728
+##.ad72890
+##.ad728By90
+##.ad728_90
+##.ad728_blk
+##.ad728_cont
+##.ad728_wrap
+##.ad728b
+##.ad728cont
+##.ad728h
+##.ad728top
+##.ad728x90
+##.ad728x90-1
+##.ad728x90-2
+##.ad728x90box
+##.ad728x90btf
+##.ad970
+##.ad970_250
+##.adActive
+##.adAlert
+##.adArea
+##.adAreaLC
+##.adAreaNative
+##.adAreaTopTitle
+##.adArticleBanner
+##.adArticleBody
+##.adArticleSideTop300x250
+##.adBan
+##.adBanner300x250
+##.adBanner728x90
+##.adBillboard
+##.adBkgd
+##.adBlock
+##.adBlock728
+##.adBlockBottom
+##.adBlockSpacer
+##.adBlockSpot
+##.adBorder
+##.adBorders
+##.adBox
+##.adBox-small
+##.adBox1
+##.adBox2
+##.adBox5
+##.adBox6
+##.adBox728
+##.adBox728X90
+##.adBox728X90_header
+##.adBoxBody
+##.adBoxBorder
+##.adBoxContainer
+##.adBoxContent
+##.adBoxFooter
+##.adBoxHeader
+##.adBoxSidebar
+##.adBoxSingle
+##.adBoxTitle
+##.adBox_1
+##.adBox_3
+##.adBtm
+##.adCall
+##.adCaptionText
+##.adCell
+##.adCenter
+##.adCenterAd
+##.adCentertile
+##.adChoice
+##.adChoiceLogo
+##.adChoicesLogo
+##.adChrome
+##.adClose
+##.adCode
+##.adColumn
+##.adColumnLeft
+##.adColumnRight
+##.adComponent
+##.adCont
+##.adContTop
+##.adContainer1
+##.adContainerSide
+##.adContent
+##.adContentAd
+##.adContour
+##.adCopy
+##.adCreative
+##.adCreator
+##.adCube
+##.adDefRect
+##.adDetails_ad336
+##.adDiv
+##.adDrawer
+##.adDyn
+##.adElement
+##.adExpanded
+##.adFooterLinks
+##.adFrame
+##.adFrameCnt
+##.adFrameContainer
+##.adFrames
+##.adFuel-label
+##.adFull
+##.adFullbanner
+##.adGlobalHeader
+##.adGoogle
+##.adGroup
+##.adHalfPage
+##.adHead
+##.adHeader
+##.adHeaderAdbanner
+##.adHeaderText
+##.adHeaderblack
+##.adHeading
+##.adHeadline
+##.adHeadlineSummary
+##.adHed
+##.adHeight200
+##.adHeight270
+##.adHeight280
+##.adHeight313
+##.adHeight600
+##.adHolder
+##.adHolder2
+##.adHolderStory
+##.adHoldert
+##.adHome300x250
+##.adHomeSideTop300x250
+##.adHorisontal
+##.adHorisontalNoBorder
+##.adHorizontalTextAlt
+##.adHplaceholder
+##.adHz
+##.adIDiv
+##.adIframe
+##.adIframeCount
+##.adImg
+##.adImgIM
+##.adInArticle
+##.adInContent
+##.adInfo
+##.adInitRemove
+##.adInner
+##.adInnerLeftBottom
+##.adInsider
+##.adInteractive
+##.adIsland
+##.adItem
+##.adLabel
+##.adLabelLine
+##.adLabels
+##.adLargeRec
+##.adLargeRect
+##.adLat
+##.adLeader
+##.adLeaderBoard_container
+##.adLeaderForum
+##.adLeaderboard
+##.adLeaderboardAdContainer
+##.adLeft
+##.adLine
+##.adLink
+##.adLinkCnt
+##.adListB
+##.adLoader
+##.adLocal
+##.adLocation
+##.adMPU
+##.adMPUHome
+##.adMRECHolder
+##.adMarker
+##.adMarkerBlock
+##.adMastheadLeft
+##.adMastheadRight
+##.adMed
+##.adMedRectBox
+##.adMedRectBoxLeft
+##.adMediaMiddle
+##.adMediumRectangle
+##.adMessage
+##.adMiddle
+##.adMinHeight280
+##.adMinHeight313
+##.adMiniTower
+##.adMod
+##.adModule
+##.adModule--inner
+##.adModule--outer
+##.adModule-outer
+##.adModule300
+##.adModuleAd
+##.adMpu
+##.adMpuHolder
+##.adMrginBottom
+##.adNarrow
+##.adNoBorder
+##.adNoOutline
+##.adNone
+##.adNote
+##.adNotice
+##.adNotice90
+##.adNoticeOut
+##.adNotification
+##.adObj
+##.adOne
+##.adOuterContainer
+##.adOverlay
+##.adPanel
+##.adPanelContent
+##.adPanorama
+##.adPlaceholder
+##.adPlacement
+##.adPod
+##.adPosition
+##.adPremium
+##.adRecommend
+##.adRecommendRight
+##.adRect
+##.adRectangle
+##.adRectangle-pos-large
+##.adRectangle-pos-medium
+##.adRectangle-pos-small
+##.adRectangleBanner
+##.adRectangleUnit
+##.adRemove
+##.adRenderer
+##.adRendererInfinite
+##.adResponsive
+##.adResult
+##.adResults
+##.adRight
+##.adRightSide
+##.adRightSky
+##.adRoller
+##.adRotator
+##.adRow
+##.adRowTopWrapper
+##.adSKY
+##.adSection
+##.adSenceImagePush
+##.adSense
+##.adSense-header
+##.adSepDiv
+##.adServer
+##.adSeven
+##.adSide
+##.adSideBarMPU
+##.adSideBarMPUTop
+##.adSidebarButtons
+##.adSizer
+##.adSkin
+##.adSky
+##.adSkyscaper
+##.adSkyscraper
+##.adSlice
+##.adSlide
+##.adSlot
+##.adSlot-container
+##.adSlotAdition
+##.adSlotCnt
+##.adSlotContainer
+##.adSlotHeaderContainer
+##.adSlug
+##.adSpBelow
+##.adSpace
+##.adSpace300x250
+##.adSpace950x90
+##.adSpacer
+##.adSpec
+##.adSplash
+##.adSponsor
+##.adSponsorText
+##.adSponsorhipInfo
+##.adSpot
+##.adSpot-mrec
+##.adSpot-textBox
+##.adSpotBlock
+##.adSpotFullWidth
+##.adSpotIsland
+##.adSquare
+##.adStatementText
+##.adStyle
+##.adStyle1
+##.adSub
+##.adSubColPod
+##.adSummary
+##.adSuperboard
+##.adSupertower
+##.adTD
+##.adTXTnew
+##.adTab
+##.adTag
+##.adTag-top
+##.adTag-wrap
+##.adTagThree
+##.adTagTwo
+##.adText
+##.adTextDownload
+##.adTextPmpt
+##.adTextStreaming
+##.adTextWrap
+##.adTicker
+##.adTile
+##.adTileWrap
+##.adTiler
+##.adTip
+##.adTitle
+##.adTitleR
+##.adTop
+##.adTopBk
+##.adTopFloat
+##.adTopHome
+##.adTopLB
+##.adTopLeft
+##.adTopRight
+##.adTopWrapper
+##.adTopboxright
+##.adTwo
+##.adTxt
+##.adType2
+##.adUnderArticle
+##.adUnit
+##.adUnitHorz
+##.adUnitVert
+##.adVar
+##.adVertical
+##.adVideo
+##.adVideo2
+##.adVl
+##.adVplaceholder
+##.adWarning
+##.adWebBoard
+##.adWideSkyscraper
+##.adWideSkyscraperRight
+##.adWidget
+##.adWidgetBlock
+##.adWithTab
+##.adWizard-ad
+##.adWord
+##.adWords-bg
+##.adWrap
+##.adWrapLg
+##.adWrapper
+##.adWrapper1
+##.adZone
+##.adZoneRight
+##.ad_0
+##.ad_1
+##.ad_1000_125
+##.ad_120x60
+##.ad_120x600
+##.ad_120x90
+##.ad_125
+##.ad_130x90
+##.ad_150x150
+##.ad_160
+##.ad_160_600
+##.ad_160x600
+##.ad_16m7rle
+##.ad_180x150
+##.ad_188_inner
+##.ad_1day9
+##.ad_2
+##.ad_200
+##.ad_200x200
+##.ad_234x60
+##.ad_240
+##.ad_250
+##.ad_250250
+##.ad_250x200
+##.ad_250x250
+##.ad_250x250_w
+##.ad_290_290
+##.ad_3
+##.ad_300
+##.ad_300250
+##.ad_300Home
+##.ad_300Side
+##.ad_300_120
+##.ad_300_250
+##.ad_300_250_1
+##.ad_300_250_2
+##.ad_300_250_wrapper
+##.ad_300_600
+##.ad_300by250
+##.ad_300s
+##.ad_300x100
+##.ad_300x240
+##.ad_300x250
+##.ad_300x250_box_right
+##.ad_300x250_container
+##.ad_300x50
+##.ad_300x500
+##.ad_300x60
+##.ad_300x600
+##.ad_320x250_async
+##.ad_320x360
+##.ad_320x50
+##.ad_330x110
+##.ad_336
+##.ad_336_gr_white
+##.ad_336x280
+##.ad_336x90
+##.ad_338_282
+##.ad_350x100
+##.ad_350x250
+##.ad_4
+##.ad_400x200
+##.ad_468
+##.ad_468x60
+##.ad_4_row
+##.ad_5
+##.ad_600
+##.ad_630x130
+##.ad_640
+##.ad_640x480
+##.ad_640x90
+##.ad_680x15
+##.ad_728
+##.ad_72890
+##.ad_72890_box
+##.ad_728Home
+##.ad_728_90
+##.ad_728_90_1
+##.ad_728_90_top
+##.ad_728_90b
+##.ad_728_in
+##.ad_728_top
+##.ad_728_v2
+##.ad_728x90
+##.ad_728x90-1
+##.ad_728x90-2
+##.ad_728x90_container
+##.ad_728x90_top
+##.ad_728x90b
+##.ad_88x31
+##.ad_90
+##.ad_925x90
+##.ad_940_0
+##.ad_954-60
+##.ad_960
+##.ad_970_2
+##.ad_970x250
+##.ad_970x250_300x250
+##.ad_970x250_container
+##.ad_970x90_prog
+##.ad_Bumper
+##.ad_CustomAd
+##.ad_Flex
+##.ad_Flexi_LowerRight
+##.ad_Flexi_MiddleRight
+##.ad_Left
+##.ad_Right
+##.ad__300x250
+##.ad__300x600
+##.ad__970x250
+##.ad__align
+##.ad__centered
+##.ad__container
+##.ad__content
+##.ad__create
+##.ad__desk
+##.ad__full--width
+##.ad__gapfix
+##.ad__header
+##.ad__holder
+##.ad__image
+##.ad__in_article
+##.ad__inline
+##.ad__item
+##.ad__label
+##.ad__leaderboard
+##.ad__mobi
+##.ad__mobile-footer
+##.ad__mpu
+##.ad__placeholder
+##.ad__rectangle
+##.ad__section-border
+##.ad__sidebar
+##.ad__single_body_bottom
+##.ad__single_body_top
+##.ad__space
+##.ad__sticky
+##.ad__superbanner
+##.ad__template
+##.ad__window
+##.ad__wrapper
+##.ad__wrapper-element
+##.ad_adInfo
+##.ad_ad_160
+##.ad_ad_300
+##.ad_adblade
+##.ad_adc
+##.ad_adsense_spacer
+##.ad_adv
+##.ad_after_section
+##.ad_amazon
+##.ad_area
+##.ad_area_two
+##.ad_article_head
+##.ad_article_island_nopad
+##.ad_article_top_left
+##.ad_avu_300x250
+##.ad_back
+##.ad_background
+##.ad_background_1
+##.ad_background_true
+##.ad_bank_wrapper
+##.ad_banner
+##.ad_banner2
+##.ad_banner_2
+##.ad_banner_234
+##.ad_banner_250x250
+##.ad_banner_468
+##.ad_banner_728
+##.ad_banner_728x90_inner
+##.ad_banner_border
+##.ad_banner_div
+##.ad_bar
+##.ad_below_content
+##.ad_belowfirstpost_frame
+##.ad_bg
+##.ad_bgskin
+##.ad_big_banner
+##.ad_bigbox
+##.ad_billboard
+##.ad_blk
+##.ad_block
+##.ad_block_1
+##.ad_block_2
+##.ad_block_widget
+##.ad_body
+##.ad_border
+##.ad_botbanner
+##.ad_bottom
+##.ad_bottom_728
+##.ad_bottom_leaderboard
+##.ad_bottom_left
+##.ad_bottom_mpu
+##.ad_bottom_space
+##.ad_box
+##.ad_box1
+##.ad_box2
+##.ad_box_2
+##.ad_box_6
+##.ad_box_9
+##.ad_box_ad
+##.ad_box_div
+##.ad_box_header
+##.ad_box_spacer
+##.ad_box_top
+##.ad_break
+##.ad_break2_container
+##.ad_break_container
+##.ad_btf
+##.ad_btn
+##.ad_btn-white
+##.ad_btn1
+##.ad_btn2
+##.ad_by
+##.ad_callout
+##.ad_caption
+##.ad_center
+##.ad_center_bottom
+##.ad_centered
+##.ad_choice
+##.ad_choices
+##.ad_cl
+##.ad_claim
+##.ad_click
+##.ad_cls_fix
+##.ad_code
+##.ad_col
+##.ad_column
+##.ad_column_box
+##.ad_common
+##.ad_con
+##.ad_cont
+##.ad_cont_footer
+##.ad_contain
+##.ad_container
+##.ad_container__sidebar
+##.ad_container__top
+##.ad_container_body
+##.ad_container_bottom
+##.ad_content
+##.ad_content_below
+##.ad_content_bottom
+##.ad_content_img
+##.ad_content_wide
+##.ad_content_wrapper
+##.ad_contents
+##.ad_crown
+##.ad_custombanner
+##.ad_db
+##.ad_default
+##.ad_deferrable
+##.ad_description
+##.ad_descriptor
+##.ad_desk_w970_h250
+##.ad_desktop
+##.ad_disclaimer
+##.ad_div
+##.ad_div_banner
+##.ad_div_box
+##.ad_div_box2
+##.ad_element
+##.ad_embed
+##.ad_eniro
+##.ad_external
+##.ad_eyebrow
+##.ad_fadein
+##.ad_feature
+##.ad_filler
+##.ad_flash
+##.ad_float
+##.ad_floating_box
+##.ad_fluid
+##.ad_font
+##.ad_footer
+##.ad_footer_super_banner
+##.ad_frame
+##.ad_frame_around
+##.ad_fullwidth
+##.ad_gal
+##.ad_gam
+##.ad_global_header
+##.ad_google
+##.ad_google_shhide
+##.ad_gpt
+##.ad_grein_botn
+##.ad_grid
+##.ad_group
+##.ad_gutter_top
+##.ad_half_page
+##.ad_halfpage
+##.ad_hd
+##.ad_head
+##.ad_head_rectangle
+##.ad_head_wide
+##.ad_header
+##.ad_header_top
+##.ad_heading
+##.ad_headline
+##.ad_holder
+##.ad_horizontal
+##.ad_hover_href
+##.ad_iframe2
+##.ad_image
+##.ad_img
+##.ad_imgae_150
+##.ad_in_article
+##.ad_in_text
+##.ad_incontent
+##.ad_index02
+##.ad_indicator
+##.ad_inline
+##.ad_inline_wrapper
+##.ad_inner
+##.ad_inset
+##.ad_island
+##.ad_item
+##.ad_label
+##.ad_large
+##.ad_leader
+##.ad_leader_bottom
+##.ad_leader_plus_top
+##.ad_leaderboard
+##.ad_leaderboard_atf
+##.ad_leaderboard_master
+##.ad_leaderboard_top
+##.ad_leaderboard_wrap
+##.ad_left
+##.ad_left_cell
+##.ad_left_column
+##.ad_lft
+##.ad_line2
+##.ad_link
+##.ad_link1
+##.ad_link_468
+##.ad_link_area
+##.ad_link_label
+##.ad_link_label_vert
+##.ad_links
+##.ad_linkunit
+##.ad_lnks
+##.ad_loc
+##.ad_long
+##.ad_lrec
+##.ad_lrgsky
+##.ad_lt
+##.ad_main
+##.ad_maintopad
+##.ad_margin
+##.ad_marker
+##.ad_masthead
+##.ad_med
+##.ad_medium_rectangle
+##.ad_medrec
+##.ad_medrect
+##.ad_megabanner
+##.ad_message
+##.ad_microlen
+##.ad_mid_post_body
+##.ad_middle
+##.ad_middle_banner
+##.ad_mobile
+##.ad_mod
+##.ad_module
+##.ad_movFocus
+##.ad_mp
+##.ad_mpu
+##.ad_mpu_top
+##.ad_mr
+##.ad_mrec
+##.ad_native
+##.ad_native_xrail
+##.ad_news
+##.ad_news_text
+##.ad_no_border
+##.ad_note
+##.ad_notice
+##.ad_oms
+##.ad_on_article
+##.ad_one
+##.ad_one_one
+##.ad_one_third
+##.ad_outer
+##.ad_overlays
+##.ad_p360
+##.ad_pagebody
+##.ad_panel
+##.ad_paragraphs_desktop_container
+##.ad_partner
+##.ad_partners
+##.ad_pause
+##.ad_pic
+##.ad_place
+##.ad_placeholder
+##.ad_placeholder_d_b
+##.ad_placeholder_d_s
+##.ad_placeholder_d_sticky
+##.ad_placement
+##.ad_placement_300x250
+##.ad_placement_small
+##.ad_plus
+##.ad_position
+##.ad_post
+##.ad_primary
+##.ad_promo
+##.ad_promo1
+##.ad_promo_spacer
+##.ad_push
+##.ad_r
+##.ad_rakuten
+##.ad_rakuten_wrapper
+##.ad_rec
+##.ad_rect
+##.ad_rect_contr
+##.ad_rectangle
+##.ad_rectangle_300_250
+##.ad_rectangle_medium
+##.ad_rectangular
+##.ad_regular1
+##.ad_regular2
+##.ad_regular3
+##.ad_reminder
+##.ad_response
+##.ad_rhs
+##.ad_right
+##.ad_rightSky
+##.ad_right_300_250
+##.ad_right_cell
+##.ad_right_col
+##.ad_rightside
+##.ad_row
+##.ad_row_bottom_item
+##.ad_rtg300
+##.ad_scroll
+##.ad_secondary
+##.ad_section_300x250
+##.ad_section_728x90
+##.ad_segment
+##.ad_sense_01
+##.ad_sense_footer_container
+##.ad_share_box
+##.ad_shopingmall
+##.ad_shuffling_text
+##.ad_side
+##.ad_side_box
+##.ad_side_rectangle_banner
+##.ad_sidebar
+##.ad_sidebar_bigbox
+##.ad_sidebar_inner
+##.ad_sidebar_left
+##.ad_sidebar_right
+##.ad_size_160x600
+##.ad_skin
+##.ad_sky
+##.ad_sky2
+##.ad_sky2_2
+##.ad_skyscpr
+##.ad_skyscraper
+##.ad_skyscrapper
+##.ad_slider_out
+##.ad_slot
+##.ad_slot_inread
+##.ad_slot_right
+##.ad_slug
+##.ad_small
+##.ad_space
+##.ad_space_300_250
+##.ad_spacer
+##.ad_sponsor
+##.ad_sponsor_fp
+##.ad_sponsoredlinks
+##.ad_sponsoredsection
+##.ad_spot
+##.ad_spot_b
+##.ad_spot_c
+##.ad_spotlight
+##.ad_square
+##.ad_square_r
+##.ad_square_r_top
+##.ad_square_top
+##.ad_start
+##.ad_static
+##.ad_station
+##.ad_story_island
+##.ad_stream
+##.ad_stream_hd
+##.ad_sub
+##.ad_supersize
+##.ad_table
+##.ad_tag
+##.ad_tag_middle
+##.ad_text
+##.ad_text_link
+##.ad_text_links
+##.ad_text_vertical
+##.ad_text_w
+##.ad_textlink1
+##.ad_textlink_box
+##.ad_thumbnail_header
+##.ad_title
+##.ad_title_small
+##.ad_tlb
+##.ad_to_list
+##.ad_top
+##.ad_top1
+##.ad_top_1
+##.ad_top_2
+##.ad_top_3
+##.ad_top_banner
+##.ad_top_leaderboard
+##.ad_top_left
+##.ad_top_mpu
+##.ad_top_right
+##.ad_topic_content
+##.ad_topmain
+##.ad_topright
+##.ad_topshop
+##.ad_tower
+##.ad_trailer_header
+##.ad_trick_header
+##.ad_trick_left
+##.ad_ttl
+##.ad_two
+##.ad_two_third
+##.ad_txt2
+##.ad_type_1
+##.ad_type_adsense
+##.ad_type_dfp
+##.ad_under
+##.ad_under_royal_slider
+##.ad_unit
+##.ad_unit_300
+##.ad_unit_300_x_250
+##.ad_unit_600
+##.ad_unit_rail
+##.ad_unit_wrapper
+##.ad_unit_wrapper_main
+##.ad_url
+##.ad_v2
+##.ad_v3
+##.ad_vertisement
+##.ad_viewtop
+##.ad_w
+##.ad_w300h450
+##.ad_w300i
+##.ad_w_us_a300
+##.ad_warn
+##.ad_warning
+##.ad_watch_now
+##.ad_watermark
+##.ad_wid300
+##.ad_wide
+##.ad_wide_vertical
+##.ad_widget
+##.ad_widget_200_100
+##.ad_widget_200_200
+##.ad_widget_image
+##.ad_widget_title
+##.ad_word
+##.ad_wrap
+##.ad_wrapper
+##.ad_wrapper_300
+##.ad_wrapper_970x90
+##.ad_wrapper_box
+##.ad_wrapper_false
+##.ad_wrapper_fixed
+##.ad_wrapper_top
+##.ad_wrp
+##.ad_xrail
+##.ad_xrail_top
+##.ad_zone
+##.adace-adi-popup-wrapper
+##.adace-slideup-slot-wrap
+##.adace-slot
+##.adace-slot-wrapper
+##.adace-sponsors-box
+##.adace-vignette
+##.adadded
+##.adageunicorns
+##.adalert-overlayer
+##.adalert-toplayer
+##.adamazon
+##.adarea
+##.adarea-long
+##.adarticle
+##.adb-728x90
+##.adb-bottom-outer
+##.adbTrkWt
+##.adback
+##.adban
+##.adban-hold-narrow
+##.adband
+##.adbanner-300-250
+##.adbanner-bottom
+##.adbanner1
+##.adbanner2nd
+##.adbannerbox
+##.adbanneriframe
+##.adbannerright
+##.adbannertop
+##.adbase
+##.adbbox
+##.adbckgrnd
+##.adbelowfirstpost
+##.adbetween
+##.adbetweenarticles
+##.adbkgnd
+##.adblade
+##.adblade-container
+##.adbladeimg
+##.adblk
+##.adblock-240-400
+##.adblock-300-300
+##.adblock-600-120
+##.adblock-bottom
+##.adblock-header
+##.adblock-header1
+##.adblock-main
+##.adblock-popup
+##.adblock-top
+##.adblock-top-left
+##.adblock-wide
+##.adblock300
+##.adblock300250
+##.adblock300x250Spot1
+##.adblock728x90
+##.adblock__banner
+##.adblock_noborder
+##.adblock_primary
+##.adblockdiv
+##.adblocks-topright
+##.adboard
+##.adborder
+##.adborderbottom
+##.adbordertop
+##.adbot
+##.adbot_postbit
+##.adbot_showthread
+##.adbottom
+##.adbottomright
+##.adbox-300x250
+##.adbox-468x60
+##.adbox-border-desk
+##.adbox-box
+##.adbox-header
+##.adbox-outer
+##.adbox-rectangle
+##.adbox-sidebar
+##.adbox-slider
+##.adbox-style
+##.adbox-title
+##.adbox-topbanner
+##.adbox-wrapper
+##.adbox1
+##.adbox160
+##.adbox2
+##.adbox300
+##.adbox300x250
+##.adbox336
+##.adbox600
+##.adbox728
+##.adboxRightSide
+##.adboxTopBanner
+##.adboxVert
+##.adbox_300x600
+##.adbox_310x400
+##.adbox_366x280
+##.adbox_468X60
+##.adbox_border
+##.adbox_bottom
+##.adbox_br
+##.adbox_cont
+##.adbox_largerect
+##.adbox_left
+##.adbox_top
+##.adboxbg
+##.adboxbot
+##.adboxclass
+##.adboxcm
+##.adboxcontent
+##.adboxcontentsum
+##.adboxes
+##.adboxesrow
+##.adboxid
+##.adboxlarge
+##.adboxlong
+##.adboxo
+##.adboxtop
+##.adbreak
+##.adbrite2
+##.adbtn
+##.adbtns
+##.adbttm_right_300
+##.adbttm_right_label
+##.adbucks
+##.adbug
+##.adbutler-inline-ad
+##.adbutler-top-banner
+##.adbutler_top_banner
+##.adbutton
+##.adbutton-block
+##.adbuttons
+##.adcard
+##.adcasing
+##.adcenter
+##.adchange
+##.adchoices
+##.adchoices-link
+##.adclass
+##.adcode
+##.adcode-widget
+##.adcode2
+##.adcode300x250
+##.adcode728x90
+##.adcode_container
+##.adcodetextwrap300x250
+##.adcodetop
+##.adcol1
+##.adcol2
+##.adcolumn
+##.adcolumn_wrapper
+##.adcomment
+##.adcon
+##.adcont
+##.adcontainer-Leaderboard
+##.adcontainer-Rectangle
+##.adcontainer2
+##.adcontainer300x250l
+##.adcontainer300x250r
+##.adcontainer_footer
+##.adcopy
+##.add-position-right
+##.add-sidebar
+##.add300
+##.add300top
+##.add300x250
+##.addAdvertContainer
+##.add_topbanner
+##.addarea
+##.addarearight
+##.addbanner
+##.addboxRight
+##.addisclaimer
+##.addiv
+##.adds2
+##.adds300x250
+##.adds620x90
+##.addtitle
+##.addvert
+##.addwide
+##.adengageadzone
+##.adenquire
+##.adex-ad-text
+##.adfbox
+##.adfeedback
+##.adfeeds
+##.adfix
+##.adflag
+##.adflexi
+##.adfliction
+##.adfoot
+##.adfootbox
+##.adfooter
+##.adform__topbanner
+##.adfoxly-overlay
+##.adfoxly-place-delay
+##.adfoxly-wrapper
+##.adframe
+##.adframe2
+##.adframe_banner
+##.adframe_rectangle
+##.adfree
+##.adfront
+##.adfront-head
+##.adfrp
+##.adfull
+##.adgear
+##.adgmleaderboard
+##.adguru-content-html
+##.adguru-modal-popup
+##.adhalfhome
+##.adhalfpage
+##.adhalfpageright
+##.adhead
+##.adheader
+##.adheightpromo
+##.adheighttall
+##.adherebox
+##.adhesion-block
+##.adhesion-header
+##.adhesiveAdWrapper
+##.adhesiveWrapper
+##.adhesive_holder
+##.adhi
+##.adhide
+##.adhint
+##.adholder
+##.adholder-300
+##.adholder2
+##.adholderban
+##.adhoriz
+##.adiframe
+##.adindex
+##.adindicator
+##.adinfo
+##.adinjwidget
+##.adinner
+##.adinpost
+##.adinsert
+##.adinsert160
+##.adinside
+##.adintext
+##.adintro
+##.adisclaimer
+##.adisland
+##.adits
+##.adjlink
+##.adk-slot
+##.adkicker
+##.adkit
+##.adlabel-horz
+##.adlabel-vert
+##.adlabel1
+##.adlabel2
+##.adlabel3
+##.adlabelleft
+##.adlarge
+##.adlarger
+##.adlateral
+##.adlayer
+##.adleader
+##.adleft1
+##.adleftph
+##.adlgbox
+##.adline
+##.adlink
+##.adlinkdiv
+##.adlinks
+##.adlinks-class
+##.adlist
+##.adlist1
+##.adlist2
+##.adloaded
+##.adlsot
+##.admain
+##.adman
+##.admarker
+##.admaster
+##.admediumred
+##.admedrec
+##.admeldBoxAd
+##.admessage
+##.admiddle
+##.admiddlesidebar
+##.admngr
+##.admngrfr
+##.admngrft
+##.admods
+##.admodule
+##.admoduleB
+##.admpu
+##.admpu-small
+##.admputop
+##.admz
+##.adnSpot
+##.adname
+##.adnet_area
+##.adnotecenter
+##.adnotice
+##.adnotification
+##.adnz-ad-placeholder
+##.adocean
+##.adocean728x90
+##.adocean_desktop_section
+##.adops
+##.adpacks
+##.adpacks_content
+##.adpadding
+##.adpane
+##.adparent
+##.adpic
+##.adplace
+##.adplace_center
+##.adplaceholder
+##.adplaceholder-top
+##.adplacement
+##.adplate-background
+##.adpod
+##.adpopup
+##.adpos-300-mobile
+##.adpost
+##.adposter_pos
+##.adproxy
+##.adrec
+##.adrechts
+##.adrect
+##.adrectangle
+##.adrectwrapper
+##.adrevtising-buttom
+##.adright
+##.adright300
+##.adrightlg
+##.adrightsm
+##.adrighttop
+##.adriverBanner
+##.adroot
+##.adrotate-sponsor
+##.adrotate-widget
+##.adrotate_top_banner
+##.adrotate_widget
+##.adrotate_widgets
+##.adrotatediv
+##.adrow
+##.adrule
+##.ads--bottom-spacing
+##.ads--desktop
+##.ads--full
+##.ads--insertor-casper
+##.ads--no-preload
+##.ads--sidebar
+##.ads--single
+##.ads--square
+##.ads--super
+##.ads--top
+##.ads-1
+##.ads-120x600
+##.ads-125
+##.ads-160x600
+##.ads-160x600-outer
+##.ads-2
+##.ads-3
+##.ads-300
+##.ads-300-250
+##.ads-300-box
+##.ads-300x250
+##.ads-300x250-sidebar
+##.ads-300x300
+##.ads-300x600
+##.ads-300x600-wrapper
+##.ads-320-50
+##.ads-320x250
+##.ads-336x280
+##.ads-468
+##.ads-720x90
+##.ads-728
+##.ads-728-90
+##.ads-728by90
+##.ads-728x90
+##.ads-970-250-show
+##.ads-980x90
+##.ads-above-comments
+##.ads-ad
+##.ads-ads-top
+##.ads-advertorial
+##.ads-article-right
+##.ads-articlebottom
+##.ads-aside
+##.ads-banner
+##.ads-banner-bottom
+##.ads-banner-friends
+##.ads-banner-js
+##.ads-banner-middle
+##.ads-banner-spacing
+##.ads-banner-top
+##.ads-banner-top-right
+##.ads-base
+##.ads-beforecontent
+##.ads-below-content
+##.ads-below-home
+##.ads-below-view-content
+##.ads-between-comments
+##.ads-bg
+##.ads-bigbox
+##.ads-bilboards
+##.ads-bing-belly
+##.ads-bing-bottom
+##.ads-bing-top
+##.ads-block
+##.ads-block-bottom-wrap
+##.ads-block-link-text
+##.ads-block-panel-tipo-1
+##.ads-block-rightside
+##.ads-block-top
+##.ads-block-top-right
+##.ads-border
+##.ads-bottom
+##.ads-bottom-block
+##.ads-bottom-center
+##.ads-bottom-content
+##.ads-bottom-left
+##.ads-bottom-right
+##.ads-box
+##.ads-box-border
+##.ads-box-cont
+##.ads-bt
+##.ads-btm
+##.ads-by
+##.ads-by-google
+##.ads-callback
+##.ads-card
+##.ads-carousel
+##.ads-center
+##.ads-centered
+##.ads-cnt
+##.ads-code
+##.ads-col
+##.ads-col-1
+##.ads-col-2
+##.ads-cols
+##.ads-cont
+##.ads-container-250
+##.ads-container__inner
+##.ads-content
+##.ads-core-placer
+##.ads-custom
+##.ads-decorator
+##.ads-desktop
+##.ads-div
+##.ads-end-content
+##.ads-express
+##.ads-favicon
+##.ads-feed
+##.ads-fieldset
+##.ads-fif
+##.ads-flow
+##.ads-footer
+##.ads-fr
+##.ads-global-header
+##.ads-global-top
+##.ads-google
+##.ads-google-bottom
+##.ads-google-top
+##.ads-grp
+##.ads-half
+##.ads-header
+##.ads-header-desktop
+##.ads-header-left
+##.ads-header-right
+##.ads-here
+##.ads-hints
+##.ads-holder
+##.ads-home
+##.ads-homepage-2
+##.ads-horizontal
+##.ads-horizontal-banner
+##.ads-image
+##.ads-in-content
+##.ads-in-previews
+##.ads-inarticle
+##.ads-inline
+##.ads-inner
+##.ads-instance
+##.ads-interlinks
+##.ads-internal
+##.ads-item
+##.ads-label
+##.ads-label-inverse
+##.ads-large
+##.ads-leaderboard
+##.ads-leaderboard-border
+##.ads-leaderboard-panel
+##.ads-leaderbord
+##.ads-left
+##.ads-line
+##.ads-link
+##.ads-link1
+##.ads-link2
+##.ads-link3
+##.ads-link4
+##.ads-links-general
+##.ads-list
+##.ads-loaded
+##.ads-long
+##.ads-main
+##.ads-margin
+##.ads-margin-top-20
+##.ads-margin-top-bottom
+##.ads-marker
+##.ads-medium-rect
+##.ads-middle
+##.ads-middle-top
+##.ads-minheight
+##.ads-mini
+##.ads-mini-3rows
+##.ads-mobile
+##.ads-module
+##.ads-module-alignment
+##.ads-movie
+##.ads-mpu
+##.ads-narrow
+##.ads-native-wrapper
+##.ads-note
+##.ads-one
+##.ads-outer
+##.ads-panel
+##.ads-parent
+##.ads-placeholder
+##.ads-placeholder-inside
+##.ads-placeholder-wrapper
+##.ads-placment
+##.ads-post
+##.ads-post-closing
+##.ads-post-footer
+##.ads-post-full
+##.ads-posting
+##.ads-profile
+##.ads-rail
+##.ads-rect
+##.ads-rectangle
+##.ads-relatedbottom
+##.ads-rendering-fix
+##.ads-right
+##.ads-right-min
+##.ads-rotate
+##.ads-row
+##.ads-rpline-com
+##.ads-scroller-box
+##.ads-section
+##.ads-side
+##.ads-sidebar
+##.ads-sidebar-300-600
+##.ads-sidebar-boxad
+##.ads-sidebar-widget
+##.ads-sign
+##.ads-single
+##.ads-site
+##.ads-size-small
+##.ads-skin
+##.ads-skin-mobile
+##.ads-sky
+##.ads-skyscraper
+##.ads-skyscraper-container-left
+##.ads-skyscraper-container-right
+##.ads-skyscraper-left
+##.ads-skyscraper-right
+##.ads-slot-mb-container
+##.ads-small
+##.ads-small-horizontal
+##.ads-small-squares
+##.ads-smartphone
+##.ads-social-box
+##.ads-sponsored-title
+##.ads-sponsors
+##.ads-square
+##.ads-square-large
+##.ads-square-small
+##.ads-squares
+##.ads-ss
+##.ads-star
+##.ads-static-video-overlay
+##.ads-stick-footer
+##.ads-sticky
+##.ads-sticky-300-600
+##.ads-story
+##.ads-story-leaderboard-atf
+##.ads-stripe
+##.ads-styled
+##.ads-superbanner
+##.ads-system
+##.ads-text
+##.ads-title
+##.ads-tittle
+##.ads-to-hide
+##.ads-top
+##.ads-top-728
+##.ads-top-center
+##.ads-top-content
+##.ads-top-fixed
+##.ads-top-home
+##.ads-top-left
+##.ads-top-main
+##.ads-top-right
+##.ads-top-spacer
+##.ads-topbar
+##.ads-two
+##.ads-txt
+##.ads-ul
+##.ads-verticle
+##.ads-wall-container
+##.ads-wide
+##.ads-widget
+##.ads-widget-content
+##.ads-widget-content-wrap
+##.ads-widget-link
+##.ads-wrap
+##.ads-wrapper
+##.ads-wrapper-top
+##.ads-x1
+##.ads-zone
+##.ads.bottom
+##.ads.box
+##.ads.cell
+##.ads.cta
+##.ads.grid-layout
+##.ads.square
+##.ads.top
+##.ads.widget
+##.ads01
+##.ads1
+##.ads10
+##.ads11
+##.ads120
+##.ads120_600
+##.ads120_600-widget
+##.ads120_80
+##.ads120x
+##.ads123
+##.ads125
+##.ads125-widget
+##.ads160
+##.ads160-600
+##.ads2
+##.ads250
+##.ads250-250
+##.ads2Block
+##.ads3
+##.ads300
+##.ads300-200
+##.ads300-250
+##.ads300250
+##.ads300_250
+##.ads300_250-widget
+##.ads300_600-widget
+##.ads300box
+##.ads300n
+##.ads300nb
+##.ads300x
+##.ads300x100
+##.ads300x600
+##.ads315
+##.ads320x100
+##.ads336_280
+##.ads336x280
+##.ads4
+##.ads460
+##.ads460_home
+##.ads468
+##.ads468x60
+##.ads600
+##.ads720x90
+##.ads728
+##.ads728_90
+##.ads728b
+##.ads728x90
+##.ads728x90-1
+##.ads970
+##.adsAdvert
+##.adsArea
+##.adsBanner
+##.adsBannerLink
+##.adsBlock
+##.adsBlockContainerHorizontal
+##.adsBot
+##.adsBottom
+##.adsBoxTop
+##.adsCap
+##.adsCell
+##.adsColumn
+##.adsConfig
+##.adsCont
+##.adsDef
+##.adsDesktop
+##.adsDetailsPage
+##.adsDisclaimer
+##.adsDiv
+##.adsFirst
+##.adsFixed
+##.adsFull
+##.adsHeader
+##.adsHeading
+##.adsHeight300x250
+##.adsHeight720x90
+##.adsHome-full
+##.adsImages
+##.adsInner
+##.adsLabel
+##.adsLibrary
+##.adsLine
+##.adsList
+##.adsMPU
+##.adsMag
+##.adsMarker
+##.adsMiddle
+##.adsMvCarousel
+##.adsNetwork
+##.adsOuter
+##.adsOverPrimary
+##.adsPlaceHolder
+##.adsPostquare
+##.adsPushdown
+##.adsRectangleMedium
+##.adsRight
+##.adsRow
+##.adsSecond
+##.adsSectionRL
+##.adsSpacing
+##.adsSticky
+##.adsTag
+##.adsText
+##.adsTop
+##.adsTopBanner
+##.adsTopCont
+##.adsTower2
+##.adsTowerWrap
+##.adsTxt
+##.adsWidget
+##.adsWithUs
+##.adsWrap
+##.ads_160
+##.ads_180
+##.ads_2
+##.ads_3
+##.ads_300
+##.ads_300_250
+##.ads_300x250
+##.ads_300x600
+##.ads_4
+##.ads_468
+##.ads_468x60
+##.ads_720x90
+##.ads_728
+##.ads_728x90
+##.ads_Header
+##.ads__article__header
+##.ads__aside
+##.ads__claim-item
+##.ads__container
+##.ads__header
+##.ads__horizontal
+##.ads__hyperleaderboard--hyperleaderboard
+##.ads__inline
+##.ads__interstitial
+##.ads__link
+##.ads__listing
+##.ads__mid
+##.ads__middle
+##.ads__midpage-fullwidth
+##.ads__native
+##.ads__right-rail-ad
+##.ads__sidebar
+##.ads__top
+##.ads_ad_box
+##.ads_admeld
+##.ads_adsense1
+##.ads_after
+##.ads_after_more
+##.ads_amazon
+##.ads_amazon_outer
+##.ads_area
+##.ads_article
+##.ads_banner
+##.ads_bar
+##.ads_before
+##.ads_between_content
+##.ads_bg
+##.ads_big
+##.ads_big-half
+##.ads_bigrec
+##.ads_block
+##.ads_border
+##.ads_box
+##.ads_box_headline
+##.ads_box_type1
+##.ads_center
+##.ads_code
+##.ads_column
+##.ads_container
+##.ads_container_top
+##.ads_content
+##.ads_css
+##.ads_der
+##.ads_desktop_r1
+##.ads_desktop_r2
+##.ads_div
+##.ads_div1
+##.ads_foot
+##.ads_footer
+##.ads_footerad
+##.ads_full_1
+##.ads_google
+##.ads_h
+##.ads_h1
+##.ads_h2
+##.ads_header
+##.ads_header_bottom
+##.ads_holder
+##.ads_home
+##.ads_horizontal
+##.ads_in_list_autosize
+##.ads_infoBtns
+##.ads_inline_640
+##.ads_inside2
+##.ads_inview
+##.ads_item
+##.ads_label
+##.ads_large_ads
+##.ads_lb
+##.ads_leader
+##.ads_leaderboard
+##.ads_left
+##.ads_main
+##.ads_main_hp
+##.ads_media
+##.ads_medium
+##.ads_medium_rectangle
+##.ads_medrect
+##.ads_middle
+##.ads_middle-container
+##.ads_middle_container
+##.ads_mpu
+##.ads_outer
+##.ads_outline
+##.ads_place
+##.ads_place_160
+##.ads_place_top
+##.ads_placeholder
+##.ads_player
+##.ads_post
+##.ads_prtext
+##.ads_qc1
+##.ads_qc2
+##.ads_rectangle
+##.ads_remove
+##.ads_right
+##.ads_rightbar_top
+##.ads_side
+##.ads_sideba
+##.ads_sidebar
+##.ads_single_center
+##.ads_single_side
+##.ads_single_top
+##.ads_singlepost
+##.ads_slice
+##.ads_slot
+##.ads_small
+##.ads_small_rectangle
+##.ads_space_long
+##.ads_spacer
+##.ads_square
+##.ads_takeover
+##.ads_tb-c
+##.ads_text
+##.ads_ticker_main
+##.ads_tit
+##.ads_title
+##.ads_top
+##.ads_top_1
+##.ads_top_banner
+##.ads_top_both
+##.ads_top_middle
+##.ads_top_nav
+##.ads_topbanner
+##.ads_topleft
+##.ads_topright
+##.ads_tower
+##.ads_tr
+##.ads_under_data
+##.ads_unit
+##.ads_up
+##.ads_video
+##.ads_wide
+##.ads_widesky
+##.ads_widget
+##.ads_wrap
+##.ads_wrap-para
+##.ads_wrapper
+##.adsafp
+##.adsanity-alignnone
+##.adsanity-group
+##.adsanity-single
+##.adsarea
+##.adsartical
+##.adsbanner1
+##.adsbanner2
+##.adsbantop
+##.adsbar
+##.adsbg300
+##.adsbillboard
+##.adsblock
+##.adsblockvert
+##.adsbnr
+##.adsbody
+##.adsborder
+##.adsboth
+##.adsbottom
+##.adsbottombox
+##.adsbox--masthead
+##.adsbox-square
+##.adsbox970x90
+##.adsbox990x90
+##.adsboxBtn
+##.adsbox_300x250
+##.adsboxitem
+##.adsbx728x90
+##.adsbyadop
+##.adsbyexoclick
+##.adsbyexoclick-wrapper
+##.adsbygalaksion
+##.adsbygoogle-box
+##.adsbygoogle-noablate
+##.adsbygoogle-wrapper
+##.adsbygoogle2
+##.adsbypublift
+##.adsbypubmax
+##.adsbytrafficjunky
+##.adsbyvli
+##.adsbyxa
+##.adscaleTop
+##.adscenter
+##.adscentertext
+##.adsclick
+##.adscontainer
+##.adscontent250
+##.adscontentcenter
+##.adscontntad
+##.adscreen
+##.adsdelivery
+##.adsdesktop
+##.adsdiv
+##.adsection_a2
+##.adsection_c2
+##.adsection_c3
+##.adsenbox
+##.adsens
+##.adsense-250
+##.adsense-300-600
+##.adsense-336
+##.adsense-336-280
+##.adsense-468
+##.adsense-728-90
+##.adsense-ad-results
+##.adsense-ads
+##.adsense-afterpost
+##.adsense-area
+##.adsense-article
+##.adsense-block
+##.adsense-box
+##.adsense-center
+##.adsense-code
+##.adsense-container
+##.adsense-content
+##.adsense-div
+##.adsense-float
+##.adsense-googleAds
+##.adsense-header
+##.adsense-heading
+##.adsense-iframe-container
+##.adsense-inline
+##.adsense-left
+##.adsense-links
+##.adsense-loading
+##.adsense-module
+##.adsense-overlay
+##.adsense-post
+##.adsense-resposivo-meio
+##.adsense-right
+##.adsense-slot
+##.adsense-square
+##.adsense-sticky-slide
+##.adsense-title
+##.adsense-top
+##.adsense-unit
+##.adsense-widget
+##.adsense-wrapper
+##.adsense1
+##.adsense160x600
+##.adsense250
+##.adsense3
+##.adsense300
+##.adsense300x250
+##.adsense728
+##.adsense728x90
+##.adsenseAds
+##.adsenseBannerArea
+##.adsenseBlock
+##.adsenseContainer
+##.adsenseList
+##.adsenseRow
+##.adsenseSky
+##.adsenseWrapper
+##.adsense_200
+##.adsense_336_280
+##.adsense_728x90_container
+##.adsense_ad
+##.adsense_block
+##.adsense_bottom
+##.adsense_container
+##.adsense_content_300x250
+##.adsense_div_wrapper
+##.adsense_inner
+##.adsense_label
+##.adsense_leader
+##.adsense_media
+##.adsense_menu
+##.adsense_mpu
+##.adsense_rectangle
+##.adsense_results
+##.adsense_right
+##.adsense_sidebar
+##.adsense_sidebar_top
+##.adsense_single
+##.adsense_top
+##.adsense_top_ad
+##.adsense_unit
+##.adsense_wrapper
+##.adsensebig
+##.adsensefloat
+##.adsenseformat
+##.adsenseframe
+##.adsenseleaderboard
+##.adsensemobile
+##.adsenvelope
+##.adsep
+##.adserve_728
+##.adserverBox
+##.adserver_zone
+##.adserverad
+##.adserving
+##.adset
+##.adsfloat
+##.adsfloatpanel
+##.adsforums
+##.adsghori
+##.adsgrd
+##.adsgvert
+##.adsheight-250
+##.adshome
+##.adshowbig
+##.adshowcase
+##.adshp
+##.adside
+##.adside-box-index
+##.adside-box-single
+##.adside_box
+##.adsidebar
+##.adsidebox
+##.adsider
+##.adsincs2
+##.adsinfo
+##.adsingle
+##.adsingle-r
+##.adsingleph
+##.adsitem
+##.adsize728
+##.adsizer
+##.adsizewrapper
+##.adskeeperWrap
+##.adsky
+##.adsleaderboard
+##.adsleaderboardbox
+##.adsleff
+##.adsleft
+##.adsleftblock
+##.adslibraryArticle
+##.adslider
+##.adslink
+##.adslist
+##.adslisting
+##.adslisting2
+##.adslistingz
+##.adsload
+##.adsloading
+##.adslogan
+##.adslot
+##.adslot--leaderboard
+##.adslot-area
+##.adslot-banner
+##.adslot-billboard
+##.adslot-feature
+##.adslot-inline-wide
+##.adslot-mpu
+##.adslot-rectangle
+##.adslot-widget
+##.adslot970
+##.adslotMid
+##.adslot_1
+##.adslot_1m
+##.adslot_2
+##.adslot_2m
+##.adslot_3
+##.adslot_300
+##.adslot_3d
+##.adslot_3m
+##.adslot_4
+##.adslot_728
+##.adslot__ad-container
+##.adslot__ad-wrapper
+##.adslot_blurred
+##.adslot_bot_300x250
+##.adslot_collapse
+##.adslot_popup
+##.adslot_side1
+##.adslothead
+##.adslotleft
+##.adslotright
+##.adslotright_1
+##.adslotright_2
+##.adslug
+##.adslx-bottom2015
+##.adslx2015
+##.adsmaintop
+##.adsmall
+##.adsmaller
+##.adsmalltext
+##.adsmanag
+##.adsmbody
+##.adsmedrect
+##.adsmedrectright
+##.adsmessage
+##.adsmobile
+##.adsninja-ad-zone
+##.adsninja-ad-zone-container-with-set-height
+##.adsninja-rail-zone
+##.adsnippet_widget
+##.adsns
+##.adsntl
+##.adsonar-after
+##.adsonofftrigger
+##.adsoptimal-slot
+##.adsother
+##.adspace
+##.adspace-300x600
+##.adspace-336x280
+##.adspace-728x90
+##.adspace-MR
+##.adspace-lb
+##.adspace-leaderboard
+##.adspace-lr
+##.adspace-mpu
+##.adspace-mtb
+##.adspace-top
+##.adspace-widget
+##.adspace1
+##.adspace180
+##.adspace2
+##.adspace728x90
+##.adspace_2
+##.adspace_bottom
+##.adspace_buysell
+##.adspace_right
+##.adspace_rotate
+##.adspace_skyscraper
+##.adspace_top
+##.adspacer
+##.adspacer2
+##.adspan
+##.adspanel
+##.adspecial390
+##.adspeed
+##.adsplash-160x600
+##.adsplat
+##.adsponsor
+##.adspop
+##.adspost
+##.adspot
+##.adspot-desk
+##.adspot-title
+##.adspot1
+##.adspot200x90
+##.adspot468x60
+##.adspot728x90
+##.adspotGrey
+##.adspot_468x60
+##.adspot_728x90
+##.adsprefooter
+##.adspreview
+##.adsrecnode
+##.adsresponsive
+##.adsright
+##.adss
+##.adss-rel
+##.adssidebar2
+##.adsskyscraper
+##.adsslotcustom2
+##.adsslotcustom4
+##.adssmall
+##.adssquare
+##.adssquare2
+##.adsterra
+##.adstext
+##.adstextpad
+##.adstipt
+##.adstitle
+##.adstop
+##.adstory
+##.adstrip
+##.adstyle
+##.adsverting
+##.adsvideo
+##.adswallpapr
+##.adswidget
+##.adswiper
+##.adswitch
+##.adswordatas
+##.adsystem_ad
+##.adszone
+##.adt-300x250
+##.adt-300x600
+##.adt-728x90
+##.adtab
+##.adtable
+##.adtag
+##.adtc
+##.adtech
+##.adtech-ad-widget
+##.adtech-banner
+##.adtech-boxad
+##.adtech-copy
+##.adtech-video-2
+##.adtech-wrapper
+##.adtechMobile
+##.adtech_wrapper
+##.adtester-container
+##.adtext-bg
+##.adtext_gray
+##.adtext_horizontal
+##.adtext_onwhite
+##.adtext_vertical
+##.adtext_white
+##.adtextleft
+##.adtextright
+##.adthrive
+##.adthrive-ad
+##.adthrive-content
+##.adthrive-header
+##.adthrive-header-container
+##.adthrive-placeholder-content
+##.adthrive-placeholder-header
+##.adthrive-placeholder-static-sidebar
+##.adthrive-video-player
+##.adthrive_custom_ad
+##.adtile
+##.adtips
+##.adtips1
+##.adtitle
+##.adtoggle
+##.adtop
+##.adtop-border
+##.adtops
+##.adtower
+##.adtravel
+##.adttl
+##.adtxt
+##.adtxtlinks
+##.adult-adv
+##.adun
+##.adunit
+##.adunit-300-250
+##.adunit-active
+##.adunit-adbridg
+##.adunit-container
+##.adunit-container-bb
+##.adunit-container-incontent-280px
+##.adunit-container-incontent-400px
+##.adunit-container-sitebar-600px
+##.adunit-container_sitebar_1
+##.adunit-googleadmanager
+##.adunit-lazy
+##.adunit-middle
+##.adunit-parent
+##.adunit-purch
+##.adunit-search-midstream
+##.adunit-side
+##.adunit-skyscraper-1
+##.adunit-skyscraper-2
+##.adunit-title
+##.adunit-top
+##.adunit-wrap
+##.adunit-wrapper
+##.adunit125
+##.adunit160
+##.adunit300x250
+##.adunit468
+##.adunitContainer
+##.adunit_300x250
+##.adunit_728x90
+##.adunit_content
+##.adunit_footer
+##.adunit_leaderboard
+##.adunit_rectangle
+##.adv--h600
+##.adv--square
+##.adv-120x600
+##.adv-160
+##.adv-160x600
+##.adv-200-200
+##.adv-250-250
+##.adv-300
+##.adv-300-1
+##.adv-300-250
+##.adv-300-600
+##.adv-300x250
+##.adv-300x250-generic
+##.adv-336-280
+##.adv-4
+##.adv-468-60
+##.adv-468x60
+##.adv-700
+##.adv-728
+##.adv-728-90
+##.adv-970
+##.adv-970-250
+##.adv-970-250-2
+##.adv-980x60
+##.adv-ad
+##.adv-ads-selfstyle
+##.adv-aside
+##.adv-background
+##.adv-banner
+##.adv-bar
+##.adv-block
+##.adv-block-container
+##.adv-border
+##.adv-bottom
+##.adv-box
+##.adv-box-holder
+##.adv-box-wrapper
+##.adv-carousel
+##.adv-center
+##.adv-click
+##.adv-cont
+##.adv-cont1
+##.adv-container
+##.adv-conteiner
+##.adv-dvb
+##.adv-format-1
+##.adv-full-width
+##.adv-google
+##.adv-gpt-desktop-wrapper
+##.adv-gpt-wrapper-desktop
+##.adv-halfpage
+##.adv-header
+##.adv-holder
+##.adv-in-body
+##.adv-inset
+##.adv-intext
+##.adv-intext-label
+##.adv-key
+##.adv-label
+##.adv-leaderboard
+##.adv-leaderboard-banner
+##.adv-link--left
+##.adv-link--right
+##.adv-mobile-wrapper
+##.adv-mpu
+##.adv-mpu-shoulder
+##.adv-outer
+##.adv-p
+##.adv-phone
+##.adv-right
+##.adv-right-300
+##.adv-rotator
+##.adv-script-container
+##.adv-search-ad
+##.adv-sidebar
+##.adv-sidelabel
+##.adv-skin-spacer
+##.adv-slot-container
+##.adv-text
+##.adv-top
+##.adv-top-banner
+##.adv-top-container
+##.adv-top-page
+##.adv-top-skin
+##.adv-under-video
+##.adv-unit
+##.adv-videoad
+##.adv-x61
+##.adv1
+##.adv120
+##.adv200
+##.adv250
+##.adv300
+##.adv300-250
+##.adv300-250-2
+##.adv300-70
+##.adv300left
+##.adv300x100
+##.adv300x250
+##.adv300x60
+##.adv300x70
+##.adv336
+##.adv350
+##.adv460x60
+##.adv468
+##.adv468x90
+##.adv728
+##.adv728x90
+##.advBottom
+##.advBottomHome
+##.advBox
+##.advImagesbox
+##.advInt
+##.advLB_PageMiddle
+##.advLeaderboard
+##.advRightBig
+##.advSquare
+##.advText
+##.advTicker
+##.advTop
+##.advVideobox
+##.adv_1
+##.adv_120
+##.adv_120_600
+##.adv_120x240
+##.adv_120x600
+##.adv_160_600
+##.adv_160x600
+##.adv_2
+##.adv_250
+##.adv_250_250
+##.adv_300
+##.adv_300_300
+##.adv_300_top
+##.adv_300x250
+##.adv_336_280
+##.adv_468_60
+##.adv_600
+##.adv_630
+##.adv_728_90
+##.adv_728x90
+##.adv_90
+##.adv_PageTop
+##.adv__box
+##.adv__leaderboard
+##.adv__wrapper
+##.adv_aff
+##.adv_amazon_single
+##.adv_banner
+##.adv_banner_hor
+##.adv_bg
+##.adv_box
+##.adv_box_narrow
+##.adv_code
+##.adv_flash
+##.adv_hed
+##.adv_here
+##.adv_img
+##.adv_leaderboard
+##.adv_left
+##.adv_link
+##.adv_main_middle
+##.adv_main_middle_wrapper
+##.adv_main_right_down
+##.adv_main_right_down_wrapper
+##.adv_medium_rectangle
+##.adv_message
+##.adv_msg
+##.adv_panel
+##.adv_placeholder_300_250
+##.adv_placeholder_300_300
+##.adv_right
+##.adv_side1
+##.adv_side2
+##.adv_sidebar
+##.adv_title
+##.adv_top
+##.adv_txt
+##.adv_under_menu
+##.advads-background
+##.advads-close-button
+##.advads-parallax-container
+##.advads-sticky
+##.advads-target
+##.advads-widget
+##.advads_ad_widget-11
+##.advads_ad_widget-18
+##.advads_ad_widget-2
+##.advads_ad_widget-21
+##.advads_ad_widget-3
+##.advads_ad_widget-4
+##.advads_ad_widget-5
+##.advads_ad_widget-8
+##.advads_ad_widget-9
+##.advads_widget
+##.advance-ads
+##.advart
+##.advbig
+##.adver
+##.adver-block
+##.adver-header
+##.adver-left
+##.adver-text
+##.adver-wrapper--250
+##.adverTag
+##.adverTxt
+##.adver_bot
+##.adver_cont_below
+##.adver_home
+##.advert--background
+##.advert--banner-wrap
+##.advert--fallback
+##.advert--header
+##.advert--in-sidebar
+##.advert--inline
+##.advert--leaderboard
+##.advert--loading
+##.advert--outer
+##.advert--placeholder
+##.advert--right-rail
+##.advert--square
+##.advert--transition
+##.advert--vc
+##.advert--vc__wrapper
+##.advert-100
+##.advert-120x90
+##.advert-160x600
+##.advert-300
+##.advert-300-side
+##.advert-300x100-side
+##.advert-728
+##.advert-728-90
+##.advert-728x90
+##.advert-760
+##.advert-arch-top
+##.advert-article-bottom
+##.advert-autosize
+##.advert-background
+##.advert-banner
+##.advert-banner-container
+##.advert-banner-holder
+##.advert-bannerad
+##.advert-bar
+##.advert-bg-250
+##.advert-block
+##.advert-border
+##.advert-bot-box
+##.advert-bottom
+##.advert-box
+##.advert-bronze
+##.advert-bronze-btm
+##.advert-btm
+##.advert-card
+##.advert-center
+##.advert-center_468x60
+##.advert-col
+##.advert-col-center
+##.advert-competitions
+##.advert-container
+##.advert-content
+##.advert-content-item
+##.advert-detail
+##.advert-dfp
+##.advert-double-mpu
+##.advert-featured
+##.advert-footer
+##.advert-full-home-sec
+##.advert-full-raw
+##.advert-gold
+##.advert-group
+##.advert-head
+##.advert-header-728
+##.advert-horizontal
+##.advert-image
+##.advert-info
+##.advert-inner
+##.advert-label
+##.advert-leaderboard
+##.advert-leaderboard-top
+##.advert-leaderboard2
+##.advert-loader
+##.advert-mini
+##.advert-mpu
+##.advert-mrec
+##.advert-note
+##.advert-overlay
+##.advert-pane
+##.advert-panel
+##.advert-placeholder
+##.advert-placeholder-wrapper
+##.advert-preview-wrapper
+##.advert-right
+##.advert-row
+##.advert-section
+##.advert-sidebar
+##.advert-silver
+##.advert-sky
+##.advert-skyright
+##.advert-skyscraper
+##.advert-slider
+##.advert-spot-container
+##.advert-sticky-wrapper
+##.advert-stub
+##.advert-text
+##.advert-three
+##.advert-title
+##.advert-top
+##.advert-top-footer
+##.advert-txt
+##.advert-unit
+##.advert-wide
+##.advert-wingbanner-left
+##.advert-wingbanner-right
+##.advert-wrap
+##.advert-wrap1
+##.advert-wrap2
+##.advert-wrapper
+##.advert-wrapper-exco
+##.advert.box
+##.advert.desktop
+##.advert.mobile
+##.advert.mpu
+##.advert.skyscraper
+##.advert1
+##.advert120
+##.advert1Banner
+##.advert2
+##.advert300
+##.advert4
+##.advert5
+##.advert728_90
+##.advert728x90
+##.advert8
+##.advertBanner
+##.advertBar
+##.advertBlock
+##.advertBottom
+##.advertBox
+##.advertCaption
+##.advertColumn
+##.advertCont
+##.advertContainer
+##.advertDownload
+##.advertFullBanner
+##.advertHeader
+##.advertHeadline
+##.advertLink
+##.advertLink1
+##.advertMPU
+##.advertMiddle
+##.advertMpu
+##.advertRight
+##.advertSideBar
+##.advertSign
+##.advertSlider
+##.advertSlot
+##.advertSuperBanner
+##.advertText
+##.advertTitleSky
+##.advertWrapper
+##.advert_300x250
+##.advert_336
+##.advert_468x60
+##.advert__container
+##.advert__fullbanner
+##.advert__leaderboard
+##.advert__mpu
+##.advert__sidebar
+##.advert__tagline
+##.advert_area
+##.advert_banner
+##.advert_banners
+##.advert_block
+##.advert_box
+##.advert_caption
+##.advert_cont
+##.advert_container
+##.advert_div
+##.advert_foot
+##.advert_header
+##.advert_home_300
+##.advert_img
+##.advert_label
+##.advert_leaderboard
+##.advert_line
+##.advert_list
+##.advert_main
+##.advert_main_bottom
+##.advert_mpu
+##.advert_nav
+##.advert_note
+##.advert_pos
+##.advert_small
+##.advert_source
+##.advert_span
+##.advert_text
+##.advert_title
+##.advert_top
+##.advert_txt
+##.advert_wrapper
+##.advertbar
+##.advertbox
+##.adverteaser
+##.advertembed
+##.adverthome
+##.adverticum_container
+##.adverticum_content
+##.adverticum_gate_banner
+##.advertis
+##.advertis-left
+##.advertis-right
+##.advertise-1
+##.advertise-2
+##.advertise-band
+##.advertise-box
+##.advertise-here
+##.advertise-horz
+##.advertise-info
+##.advertise-leaderboard
+##.advertise-link
+##.advertise-list
+##.advertise-pic
+##.advertise-small
+##.advertise-square
+##.advertise-top
+##.advertise-vert
+##.advertiseBlack
+##.advertiseContainer
+##.advertiseHere
+##.advertiseText
+##.advertise_ads
+##.advertise_box
+##.advertise_brand
+##.advertise_carousel
+##.advertise_here
+##.advertise_link
+##.advertise_link_sidebar
+##.advertise_links
+##.advertise_sec
+##.advertise_text
+##.advertise_txt
+##.advertise_verRight
+##.advertisebtn
+##.advertisedBy
+##.advertisement-1
+##.advertisement-2
+##.advertisement-250
+##.advertisement-300
+##.advertisement-300x250
+##.advertisement-background
+##.advertisement-banner
+##.advertisement-block
+##.advertisement-bottom
+##.advertisement-box
+##.advertisement-card
+##.advertisement-cell
+##.advertisement-comment
+##.advertisement-container
+##.advertisement-content
+##.advertisement-copy
+##.advertisement-footer
+##.advertisement-google
+##.advertisement-header
+##.advertisement-holder
+##.advertisement-image
+##.advertisement-label
+##.advertisement-layout
+##.advertisement-leaderboard
+##.advertisement-leaderboard-lg
+##.advertisement-left
+##.advertisement-link
+##.advertisement-nav
+##.advertisement-new
+##.advertisement-other
+##.advertisement-placeholder
+##.advertisement-position1
+##.advertisement-right
+##.advertisement-showup-banner
+##.advertisement-sidebar
+##.advertisement-space
+##.advertisement-sponsor
+##.advertisement-tag
+##.advertisement-text
+##.advertisement-title
+##.advertisement-top
+##.advertisement-txt
+##.advertisement-wrapper
+##.advertisement.leaderboard
+##.advertisement.rectangle
+##.advertisement.under-article
+##.advertisement1
+##.advertisement300x250
+##.advertisement468
+##.advertisementBackground
+##.advertisementBanner
+##.advertisementBar
+##.advertisementBlock
+##.advertisementBox
+##.advertisementBoxBan
+##.advertisementContainer
+##.advertisementFull
+##.advertisementHeader
+##.advertisementImg
+##.advertisementLabel
+##.advertisementOutsider
+##.advertisementPanel
+##.advertisementRotate
+##.advertisementSection
+##.advertisementSmall
+##.advertisementText
+##.advertisementTop
+##.advertisement_160x600
+##.advertisement_300x250
+##.advertisement_728x90
+##.advertisement__728x90
+##.advertisement__full
+##.advertisement__header
+##.advertisement__label
+##.advertisement__leaderboard
+##.advertisement__line
+##.advertisement__title
+##.advertisement__wrapper
+##.advertisement_box
+##.advertisement_btm
+##.advertisement_caption
+##.advertisement_container
+##.advertisement_footer
+##.advertisement_g
+##.advertisement_header
+##.advertisement_horizontal
+##.advertisement_mobile
+##.advertisement_part
+##.advertisement_post
+##.advertisement_section_top
+##.advertisement_text
+##.advertisement_top
+##.advertisement_wrapper
+##.advertisements-link
+##.advertisements-right
+##.advertisements-sidebar
+##.advertisements_heading
+##.advertisementwrap
+##.advertiser
+##.advertiser-links
+##.advertising--desktop
+##.advertising--mobile
+##.advertising--row
+##.advertising--tablet
+##.advertising--top
+##.advertising-banner
+##.advertising-block
+##.advertising-container
+##.advertising-container-top
+##.advertising-content
+##.advertising-disclaimer
+##.advertising-fixed
+##.advertising-header
+##.advertising-iframe
+##.advertising-in-content
+##.advertising-inner
+##.advertising-leaderboard
+##.advertising-lrec
+##.advertising-mediumrectangle
+##.advertising-mention
+##.advertising-middle
+##.advertising-middle-i
+##.advertising-notice
+##.advertising-right
+##.advertising-right-d
+##.advertising-right-i
+##.advertising-section
+##.advertising-side
+##.advertising-side-hp
+##.advertising-srec
+##.advertising-top
+##.advertising-top-banner
+##.advertising-top-box
+##.advertising-top-category
+##.advertising-top-desktop
+##.advertising-vert
+##.advertising-wrapper
+##.advertising1
+##.advertising160
+##.advertising2
+##.advertising300_home
+##.advertising300x250
+##.advertising728
+##.advertising728_3
+##.advertisingBanner
+##.advertisingBlock
+##.advertisingLabel
+##.advertisingLegend
+##.advertisingLrec
+##.advertisingMob
+##.advertisingRight
+##.advertisingSlide
+##.advertisingTable
+##.advertisingTop
+##.advertising_300x250
+##.advertising_banner
+##.advertising_block
+##.advertising_bottom_box
+##.advertising_box_bg
+##.advertising_header_1
+##.advertising_hibu_lef
+##.advertising_hibu_mid
+##.advertising_hibu_rig
+##.advertising_horizontal_title
+##.advertising_images
+##.advertising_square
+##.advertising_top
+##.advertising_vertical_title
+##.advertising_widget
+##.advertising_wrapper
+##.advertisingarea
+##.advertisingarea-homepage
+##.advertisingimage
+##.advertisingimage-extended
+##.advertisingimageextended
+##.advertisment
+##.advertisment-banner
+##.advertisment-label
+##.advertisment-left-panal
+##.advertisment-module
+##.advertisment-rth
+##.advertisment-top
+##.advertismentBox
+##.advertismentContainer
+##.advertismentContent
+##.advertismentText
+##.advertisment_bar
+##.advertisment_caption
+##.advertisment_full
+##.advertisment_notice
+##.advertisment_two
+##.advertize
+##.advertize_here
+##.advertizing-banner
+##.advertlabel
+##.advertleft
+##.advertlink
+##.advertnotice
+##.advertop
+##.advertorial
+##.advertorial-2
+##.advertorial-block
+##.advertorial-image
+##.advertorial-promo-box
+##.advertorial-teaser
+##.advertorial-wrapper
+##.advertorial2
+##.advertorial_728x90
+##.advertorial_red
+##.advertorialitem
+##.advertorialtitle
+##.advertorialview
+##.advertorialwidget
+##.advertouter
+##.advertplay
+##.adverts
+##.adverts--banner
+##.adverts-125
+##.adverts-inline
+##.adverts2
+##.advertsLeaderboard
+##.adverts_RHS
+##.adverts_footer_advert
+##.adverts_footer_scrolling_advert
+##.adverts_header_advert
+##.adverts_side_advert
+##.advertspace
+##.adverttext
+##.adverttop
+##.advfrm
+##.advg468
+##.advhere
+##.adviewDFPBanner
+##.advimg160600
+##.advimg300250
+##.advn_zone
+##.advoice
+##.advr
+##.advr-wrapper
+##.advr_top
+##.advrectangle
+##.advrst
+##.advslideshow
+##.advspot
+##.advt
+##.advt-banner-3
+##.advt-block
+##.advt-box
+##.advt-right
+##.advt-sec
+##.advt-text
+##.advt300
+##.advt720
+##.advtBlock
+##.advtMsg
+##.advt_160x600
+##.advt_468by60px
+##.advt_indieclick
+##.advt_single
+##.advt_widget
+##.advtbox
+##.advtcell
+##.advtext
+##.advtimg
+##.advtitle
+##.advtop
+##.advtop-leaderbord
+##.advttopleft
+##.advv_box
+##.adwblue
+##.adwert
+##.adwhitespace
+##.adwide
+##.adwideskyright
+##.adwidget
+##.adwithspace
+##.adwobs
+##.adwolf-holder
+##.adword-box
+##.adword-structure
+##.adword-text
+##.adword-title
+##.adword1
+##.adwordListings
+##.adwords
+##.adwords-container
+##.adwordsHeader
+##.adwords_in_content
+##.adworks
+##.adwrap
+##.adwrap-mrec
+##.adwrap-widget
+##.adwrap_MPU
+##.adwrapper--desktop
+##.adwrapper-lrec
+##.adwrapper1
+##.adwrapper948
+##.adwrappercls
+##.adwrappercls1
+##.adx-300x250-container
+##.adx-300x600-container
+##.adx-ads
+##.adx-wrapper
+##.adx-wrapper-middle
+##.adx_center
+##.adxli
+##.adxs-vertisements
+##.adz-horiz
+##.adz-horiz-ext
+##.adz2
+##.adz728x90
+##.adzbanner
+##.adzone
+##.adzone-footer
+##.adzone-preview
+##.adzone-sidebar
+##.adzone_skyscraper
+##.af-block-ad-wrapper
+##.af-label-ads
+##.afc-box
+##.aff-big-unit
+##.aff-iframe
+##.afffix-custom-ad
+##.affiliate-ad
+##.affiliate-footer
+##.affiliate-link
+##.affiliate-mrec-iframe
+##.affiliate-sidebar
+##.affiliate-strip
+##.affiliate-unit__link
+##.affiliate-unit__wrapper
+##.affiliateAdvertText
+##.affiliate_ad
+##.affiliate_header_ads
+##.affiliates-sidebar
+##.affiliation728x90
+##.affinityAdHeader
+##.afns-ad-sponsor-logo
+##.afsAdvertising
+##.afsAdvertisingBottom
+##.aft-top-728x90
+##.aftContentAdLeft
+##.aftContentAdRight
+##.after-content-ad
+##.after-first-post-ad-1
+##.after-intro-ad
+##.after-post-ad
+##.after-post-ads
+##.after-story-ad-wrapper
+##.after_ad
+##.after_comments_ads
+##.after_content_banner_advert
+##.after_post_ad
+##.afterpostadbox
+##.afw_ad
+##.aggads-ad
+##.ahe-ad
+##.ahe-adsticky
+##.ai-top-ad-outer
+##.aisle-ad
+##.aisoad
+##.ajax_ad
+##.ajaxads
+##.ajdg_bnnrwidgets
+##.ajdg_grpwidgets
+##.align.Ad
+##.alignads
+##.alt_ad
+##.alt_ad_block
+##.altad
+##.alternatives_ad
+##.am-adContainer
+##.am-adslot
+##.am-bazaar-ad
+##.amAdvert
+##.am_ads
+##.amazon-auto-links
+##.amazon_ad
+##.amazonads
+##.amis-advert
+##.amp-unresolved
+##.ampFlyAdd
+##.ampforwp-sticky-custom-ad
+##.anchor-ad
+##.anchor-ad-wrapper
+##.anchorAd
+##.anchored-ad-widget
+##.annonstext
+##.another-ad
+##.anyad
+##.anzeige_banner
+##.aoa_overlay
+##.ap-ad-block
+##.apadam-ads
+##.ape-ads-container
+##.apexAd
+##.apiAdMarkerAbove
+##.apiAds
+##.apiButtonAd
+##.app-ad
+##.app-leaderboard-ad-container
+##.app_ad_unit
+##.app_advertising_skyscraper
+##.app_nexus_banners_common
+##.appnexus.ad
+##.ar-header-m-ad
+##.arc-ad-wrapper
+##.arcAdsBox
+##.arcAdsContainer
+##.arcad-block-container
+##.archive-ad
+##.archive-ads
+##.archive-radio-ad-container
+##.areaAd
+##.area_ad
+##.area_ad03
+##.area_ad07
+##.area_ad09
+##.area_ad2
+##.arena-ad-col
+##.art-text-ad
+##.artAd
+##.artAdInner
+##.art_ads
+##.artcl_ad_dsk
+##.article--ad
+##.article--content-ad
+##.article-ad
+##.article-ad-970x90
+##.article-ad-align-left
+##.article-ad-blk
+##.article-ad-bottom
+##.article-ad-box
+##.article-ad-cont
+##.article-ad-container
+##.article-ad-holder
+##.article-ad-horizontal
+##.article-ad-left
+##.article-ad-legend
+##.article-ad-main
+##.article-ad-placeholder
+##.article-ad-placement
+##.article-ad-primary
+##.article-ad-row
+##.article-ad-row-inner
+##.article-ad-section
+##.article-ads
+##.article-advert
+##.article-advert--text
+##.article-advert-container
+##.article-advert-dfp
+##.article-aside-ad
+##.article-aside-top-ad
+##.article-content-ad
+##.article-content-adwrap
+##.article-first-ad
+##.article-footer-ad
+##.article-footer-ad-container
+##.article-footer__ad
+##.article-footer__ads
+##.article-google-adsense
+##.article-header-ad
+##.article-header__railAd
+##.article-inline-ad
+##.article-list__list-item--ad
+##.article-mid-ad
+##.article-small-ads
+##.article-sponsor
+##.article-sponsorship-header
+##.article-top-ad
+##.articleADbox
+##.articleAd
+##.articleAd300x250
+##.articleAdHeader
+##.articleAdSlot2
+##.articleAdTop
+##.articleAdTopRight
+##.articleAds
+##.articleAdsL
+##.articleAdvert
+##.articleBottom-ads
+##.articleEmbeddedAdBox
+##.articleFooterAd
+##.articleHeadAdRow
+##.articleHeaderAd
+##.articleTop-ads
+##.articleTopAd
+##.article__ad-holder
+##.article__adblock
+##.article__adv
+##.article__header-ad-slot
+##.article__inset--margin-ad
+##.article__leaderboard-ad
+##.article_ad
+##.article_ad_1
+##.article_ad_2
+##.article_ad_container2
+##.article_ad_text
+##.article_ad_top
+##.article_adbox
+##.article_ads_banner
+##.article_body_ad1
+##.article_bottom-ads
+##.article_bottom_ad
+##.article_google-ad
+##.article_google_ads
+##.article_inline_ad
+##.article_inner_ad
+##.article_list_in_ad
+##.article_mpu
+##.article_mpu_box
+##.article_tower_ad
+##.articlead
+##.articleads
+##.articlebodyad
+##.articlepage_ads_1
+##.articlepage_ads_top
+##.articles-ad-block
+##.artist-ad-wrapper
+##.artnet-ads-ad
+##.artstyle__advertisement
+##.as-admedia
+##.aside-ad
+##.aside-ad-space
+##.aside-ad-wrapper
+##.aside-ads
+##.aside-ads-top
+##.aside-collection-ad-slot
+##.asideAd
+##.aside_ad
+##.aside_ad_large
+##.aside_banner_ads
+##.aside_google_ads
+##.assis-adlabel
+##.async-ad-container
+##.at-header-ad
+##.at-sidebar-ad
+##.atf-ad
+##.atfAds
+##.atf_adWrapper
+##.atf_placeholder
+##.atomsAdsCellModel
+##.attachment-advert_home
+##.attachment-dm-advert-bronze
+##.attachment-dm-advert-gold
+##.attachment-dm-advert-silver
+##.attachment-sidebar-ad
+##.attachment-squareAd
+##.avadvslot
+##.avap-ads-container
+##.avert--leaderboard
+##.avert--sidebar
+##.avert-text
+##.azk-adsense
+##.b-ad
+##.b-ad-main
+##.b-adhesion
+##.b-adv
+##.b-advert
+##.b-advertising__down-menu
+##.b-aside-ads
+##.b-header-ad
+##.b-right-rail--ads
+##.bAdvertisement
+##.b_adLastChild
+##.b_ads
+##.b_ads_cont
+##.b_ads_r
+##.b_ads_top
+##.b_adsen_wrapper
+##.back300ad
+##.background-ad
+##.background-ads
+##.background-adv
+##.backgroundAd
+##.bam-ad-slot
+##.bank-rate-ad
+##.banmanad
+##.banner--ad
+##.banner-125
+##.banner-300
+##.banner-300-100
+##.banner-300-250
+##.banner-300x250
+##.banner-300x600
+##.banner-320-100
+##.banner-468
+##.banner-468-60
+##.banner-468x60
+##.banner-728
+##.banner-728x90
+##.banner-ad
+##.banner-ad-b
+##.banner-ad-below
+##.banner-ad-block
+##.banner-ad-bottom-fixed
+##.banner-ad-container
+##.banner-ad-contianer
+##.banner-ad-footer
+##.banner-ad-image
+##.banner-ad-inner
+##.banner-ad-label
+##.banner-ad-large
+##.banner-ad-pos
+##.banner-ad-row
+##.banner-ad-skeleton-box
+##.banner-ad-space
+##.banner-ad-wrap
+##.banner-ad-wrapper
+##.banner-ad2
+##.banner-ads
+##.banner-ads-right
+##.banner-ads-sidebar
+##.banner-adsense
+##.banner-adv
+##.banner-advert
+##.banner-advert-wrapper
+##.banner-advertisement
+##.banner-advertising
+##.banner-adverts
+##.banner-buysellads
+##.banner-sponsorship
+##.banner-top-ads
+##.banner120x600
+##.banner160
+##.banner160x600
+##.banner200x200
+##.banner300
+##.banner300x250
+##.banner336
+##.banner336x280
+##.banner350
+##.banner468
+##.banner728
+##.banner728-ad
+##.banner728-container
+##.banner728x90
+##.bannerADS
+##.bannerADV
+##.bannerAd
+##.bannerAd-module
+##.bannerAd3
+##.bannerAdContainer
+##.bannerAdLeaderboard
+##.bannerAdRectangle
+##.bannerAdSearch
+##.bannerAdSidebar
+##.bannerAdTower
+##.bannerAdWrap
+##.bannerAds
+##.bannerAdvert
+##.bannerAside
+##.bannerGoogle
+##.bannerRightAd
+##.banner_160x600
+##.banner_240x400
+##.banner_250x250
+##.banner_300_250
+##.banner_300x250
+##.banner_300x600
+##.banner_468_60
+##.banner_468x60
+##.banner_728_90
+##.banner_728x90
+##.banner_ad-728x90
+##.banner_ad_300x250
+##.banner_ad_728x90
+##.banner_ad_container
+##.banner_ad_footer
+##.banner_ad_full
+##.banner_ad_leaderboard
+##.banner_ad_link
+##.banner_ad_wrapper
+##.banner_ads
+##.banner_ads1
+##.banner_ads_300x250
+##.banner_ads_home
+##.banner_ads_home_inner
+##.banner_reklam
+##.banner_reklam2
+##.banner_slot
+##.bannerad
+##.bannerad3
+##.banneradbottomholder
+##.banneradd
+##.bannerads
+##.banneradv
+##.bannerandads
+##.bannergoogle
+##.bannergroup-ads
+##.banneritem-ads
+##.banneritem_ad
+##.bannermpu
+##.banners-weekad
+##.banners_ad
+##.banners_ad_inside
+##.bannervcms
+##.bar_ad
+##.barkerAd
+##.barta-ad
+##.base-ad-mpu
+##.base-ad-slot
+##.base-ad-top
+##.base__header-ad
+##.base_ad
+##.baseboard-ad
+##.bb-ad
+##.bb-ad-mrec
+##.bb-adv-160x600
+##.bb-adv-300x250
+##.bb-article-sponsor
+##.bbccom-advert
+##.bbccom_advert
+##.bbsTopAd
+##.bc-ad__appnexus
+##.bcom_ad
+##.bd-header-ad
+##.before-header-ad
+##.before-injected-ad
+##.below-ad-border
+##.below-article-ad-sidebar
+##.below-nav-ad
+##.belowMastheadWrapper
+##.belowNavAds
+##.below_game_ad
+##.below_nav_ad_wrap
+##.below_player_ad
+##.belt-ad
+##.belt_ad
+##.best_project_ad
+##.bg-ad-gray
+##.bg-ads
+##.bg-ads-space
+##.bg-grey-ad
+##.bgAdBlue
+##.bg_ad
+##.bg_ads
+##.bgcolor_ad
+##.bgnavad
+##.bgr-ad-leaderboard
+##.bh-ads
+##.bh_ad_container
+##.bi-ads-300x250
+##.bi-ads-desktop
+##.bi-advertorial
+##.bidbarrel-ad
+##.big-ad
+##.big-ads
+##.big-advertisement
+##.big-box-ad
+##.big-right-ad
+##.bigAd
+##.bigAdContainer
+##.bigAds
+##.bigAdvBanner
+##.bigAdvMiddle
+##.bigAdvMiddlea
+##.bigBoxAdArea
+##.bigCubeAd
+##.big_ad
+##.big_ad2
+##.big_ads
+##.big_center_ad
+##.bigad
+##.bigad1
+##.bigad2
+##.bigadleft
+##.bigadright
+##.bigads
+##.bigadtxt1
+##.bigbox-ad
+##.bigbox.ad
+##.bigbox_ad
+##.bigboxad
+##.bigsponsor
+##.billboard-ad
+##.billboard-ad-one
+##.billboard-ad-slot-container
+##.billboard-ad-space
+##.billboard-ads
+##.billboard.ad
+##.billboard300x250
+##.billboardAd
+##.billboard__ad__full
+##.billboard__advert
+##.billboard_ad
+##.billboard_ad_desktop
+##.billboard_ad_wrap
+##.billboard_adwrap
+##.bin-ads
+##.bing-ads-wrapper
+##.bing-native-ad
+##.biz-ad
+##.biz-ads
+##.biz-list-ad
+##.bizDetailAds
+##.bl300_ad
+##.blk_advert
+##.block--ad
+##.block--ads
+##.block--advertising
+##.block--advertising-header
+##.block--dfp
+##.block--doubleclick
+##.block--simpleads
+##.block--vh-dfp
+##.block--vh-dfp-dfp-ad-r1
+##.block--vh-footer-ads
+##.block-ad
+##.block-ad-blocktop
+##.block-ad-entity
+##.block-ad-header
+##.block-ad-leaderboard
+##.block-ad-masthead
+##.block-ad-middle
+##.block-ad-mpu
+##.block-ad-wrapper
+##.block-ad300
+##.block-ad_tag
+##.block-admanager
+##.block-ads
+##.block-ads-bottom
+##.block-ads-home
+##.block-ads-system
+##.block-ads-top
+##.block-ads-yahoo
+##.block-ads1
+##.block-ads2
+##.block-ads3
+##.block-ads_top
+##.block-adsense
+##.block-adstop-otherpage-728x90
+##.block-adtech
+##.block-adv
+##.block-advert
+##.block-advertisement
+##.block-advertisement-banner-block
+##.block-advertising
+##.block-adzerk
+##.block-bg-advertisement
+##.block-boxes-ad
+##.block-cdw-google-ads
+##.block-dfp
+##.block-dfp-ad
+##.block-dfp-blocks
+##.block-doubleclick_ads
+##.block-fusion-ads
+##.block-google-admanager
+##.block-heremedia-ads
+##.block-inner-adds
+##.block-itg-ads
+##.block-ltadvertising
+##.block-maniad
+##.block-nyx-ads-ninja
+##.block-nyx-ads-ninja-ad-block
+##.block-openads
+##.block-openx
+##.block-pm_doubleclick
+##.block-pt-ads
+##.block-quartz-ads
+##.block-reklama
+##.block-simple-blockad-320-250-front-2
+##.block-simpleads
+##.block-skyscraper-ad
+##.block-sponsor
+##.block-sponsored-links
+##.block-the-dfp
+##.block-yt-ads
+##.blockAd
+##.blockAds
+##.blockAdvertise
+##.block__ads__ad
+##.block_ad
+##.block_ad1
+##.block_ad303x1000_left
+##.block_ad303x1000_right
+##.block_ad_middle
+##.block_ad_top
+##.block_ads
+##.block_adslot
+##.block_adv
+##.block_advert
+##.block_article_ad
+##.blockad
+##.blockads_big
+##.blockads_vg
+##.blocked-ads
+##.blog-ad
+##.blog-ad-image
+##.blog-ads
+##.blog-ads-container
+##.blog-ads-top
+##.blog-advertisement
+##.blog-view-ads
+##.blogAd
+##.blogAdvertisement
+##.blogArtAd
+##.blogBigAd
+##.blog_ad
+##.blogads
+##.blue-ad
+##.bmd_advert
+##.bn_ads
+##.bn_advert
+##.bn_textads
+##.bnr-adbutler
+##.bnr_ad
+##.board-layout-ad
+##.body-ad
+##.body-ads
+##.body-adzone
+##.body-top-ads
+##.bodyAd
+##.body_ad
+##.body_width_ad
+##.bodyads
+##.bodyads2
+##.bodybannerad
+##.bodyrectanglead
+##.bomAd
+##.bonnier-ad
+##.bonnier-ads-middle
+##.bookad
+##.bordered-ad
+##.bostad
+##.botAd
+##.botRectAd
+##.bot_ad
+##.bot_ads
+##.bottom-ad
+##.bottom-ad--bigbox
+##.bottom-ad-banner
+##.bottom-ad-box
+##.bottom-ad-container
+##.bottom-ad-desktop
+##.bottom-ad-fr
+##.bottom-ad-large
+##.bottom-ad-placeholder
+##.bottom-ad-tagline
+##.bottom-ad-wrapper
+##.bottom-ad-zone
+##.bottom-ad2
+##.bottom-ads
+##.bottom-ads-container
+##.bottom-ads-sticky
+##.bottom-ads-wrapper
+##.bottom-ads728
+##.bottom-adv
+##.bottom-adv-container
+##.bottom-adv1
+##.bottom-banner-ad
+##.bottom-fixed-ad
+##.bottom-left-ad
+##.bottom-main-adsense
+##.bottom-mobile-ad
+##.bottom-mpu-ad
+##.bottom-post-ad-space
+##.bottom-post-ads
+##.bottom-right-advert
+##.bottom-side-advertisement
+##.bottom-slider-ads
+##.bottom-sponsor-img-border
+##.bottom-sponsored-header
+##.bottom2-adv
+##.bottomAd
+##.bottomAdBlock
+##.bottomAdContainer
+##.bottomAds
+##.bottomAdsTitle
+##.bottomAdvTxt
+##.bottomAdvert
+##.bottomAdvertisement
+##.bottomAdvt
+##.bottomArticleAds
+##.bottomBannerAd
+##.bottomELAd
+##.bottomFriendsAds
+##.bottomReviewAd
+##.bottom_ad
+##.bottom_ad_block
+##.bottom_ad_placeholder
+##.bottom_ad_responsive
+##.bottom_adbreak
+##.bottom_ads
+##.bottom_ads_wrapper_inner
+##.bottom_adsense
+##.bottom_adspace
+##.bottom_advertise
+##.bottom_banner_ad
+##.bottom_banner_advert_text
+##.bottom_bar_ads
+##.bottom_left_advert
+##.bottom_right_ad
+##.bottom_rightad
+##.bottom_side_ad
+##.bottom_sponsor
+##.bottom_sticky_ad
+##.bottomad
+##.bottomad-bg
+##.bottomadarea
+##.bottomads
+##.bottomadtag
+##.bottomadtop
+##.bottomadvert
+##.bottomadwords
+##.bottombarad
+##.bottomgooglead
+##.bottomleader
+##.botton_advertisement
+##.box-ad
+##.box-ad-a
+##.box-ad-grey
+##.box-ad-middle
+##.box-ad-right-column
+##.box-ads
+##.box-ads-header-home
+##.box-ads-small
+##.box-adsense
+##.box-adsense-top
+##.box-advert
+##.box-advert-sponsored
+##.box-advertisement
+##.box-advertising
+##.box-advertising1
+##.box-adverts
+##.box-entry-ad
+##.box-entry-detail--ad
+##.box-fixed-ads
+##.box-footer-ad
+##.box-radvert
+##.box-recommend-ad
+##.boxAd
+##.boxAdContainer
+##.boxAdFields
+##.boxAdMrec
+##.boxAds
+##.boxAds2
+##.boxAdsInclude
+##.boxAdvertisement
+##.boxOuterAD
+##.boxSponsor
+##.box_ad
+##.box_ad_container
+##.box_ad_content
+##.box_ad_horizontal
+##.box_ad_spacer
+##.box_ad_wrap
+##.box_ads
+##.box_ads728x90_holder
+##.box_adv
+##.box_adv1
+##.box_adv2
+##.box_adv_728
+##.box_adv_new
+##.box_advert
+##.box_advertising
+##.box_content_ad
+##.box_content_ads
+##.box_layout_ad
+##.box_publicidad
+##.box_sidebar-ads
+##.box_textads
+##.box_title_ad
+##.boxad
+##.boxad1
+##.boxad120
+##.boxad2
+##.boxadcont
+##.boxads
+##.boxadv
+##.boxcontentad
+##.boxsponsor2
+##.boxyads
+##.bps-ad-wrapper
+##.bps-advertisement
+##.bps-search-chitika-ad
+##.bq_ad_320x250
+##.bq_adleaderboard
+##.bq_rightAd
+##.br-ad
+##.br-ad-text
+##.br-ad-wrapper
+##.br-banner-ad
+##.br-right-rail-ad
+##.branded-sponsored-result
+##.branding-ad-gallery
+##.branding-ad-wrapper
+##.breadads
+##.breadcumbad
+##.break-ads
+##.breaker-ad
+##.breakerAd
+##.breakingNewsModuleSponsor
+##.breakthrough-ad
+##.briefNewsAd
+##.brn-ads-box
+##.brn-ads-mobile-container
+##.brn-ads-sticky-wrapper
+##.broker-ad
+##.broker-ads
+##.broker-ads-center
+##.broker_box_ad
+##.browse-ad-container
+##.browse-banner_ad
+##.browse-by-make-ad
+##.browse-inline-ad
+##.browser_boot_ad
+##.browsi-ad
+##.bs-ad
+##.bsAdvert
+##.bsa-in-post-ad-125-125
+##.bsaProCarousel
+##.bsaProContainer
+##.bsaProContainerNew
+##.bsa_ads
+##.bsa_it_ad
+##.bt_ad
+##.btf-ad-medRect
+##.btfAds
+##.btm_ad
+##.btn-ad
+##.btn-newad
+##.btn_ad
+##.budget_ads_1
+##.budget_ads_2
+##.budget_ads_3
+##.budget_ads_bg
+##.bulk-img-ads
+##.bullet-sponsored-links
+##.bullet-sponsored-links-gray
+##.bump-ad
+##.bunyad-ad
+##.burstContentAdIndex
+##.businessads
+##.buttom_ad
+##.buttom_ad_size
+##.button-ad
+##.button-ads
+##.buttonAd
+##.buttonAdSpot
+##.buttonAds
+##.button_ad
+##.button_ads
+##.button_advert
+##.button_left_ad
+##.button_right_ad
+##.buttonad
+##.buttonad_v2
+##.buttonadbox
+##.buttonads
+##.buySellAdsContainer
+##.buysellAds
+##.buysellAdsSmall
+##.buzzAd
+##.buzz_ad_block
+##.buzz_ad_wrap
+##.bvi-ads
+##.bvp-ad
+##.bwm_widget_ad_callout
+##.bww-advertising-ad-container
+##.bx-ads
+##.bx-ads--banner
+##.bx_ad
+##.bx_ad_right
+##.bxad
+##.bz-ad
+##.bzads-ic-ad-300-250-600
+##.c-Ad
+##.c-Ad--ezoic
+##.c-Ad--inArticle
+##.c-Ad--rectangle
+##.c-Ad__label
+##.c-Adhesion
+##.c-ArticleAds
+##.c-ad
+##.c-ad--adStickyContainer
+##.c-ad--bigbox
+##.c-ad--header
+##.c-ad--mobile-bigbanner
+##.c-ad--mpu-in-article
+##.c-ad--rectangle
+##.c-ad--text-only
+##.c-ad--unlabeled
+##.c-ad-banner
+##.c-ad-flex
+##.c-ad-fluid
+##.c-ad-mpu-primary
+##.c-ad-mpu-secondary
+##.c-ad-placeholder
+##.c-ad-size2
+##.c-ad-size3
+##.c-adDisplay
+##.c-adDisplay_container
+##.c-adOmnibar
+##.c-adSense
+##.c-adSkyBox
+##.c-adbutler-ad
+##.c-adbutler-ad__wrapper
+##.c-adcontainer
+##.c-ads
+##.c-adunit
+##.c-adunit--billboard
+##.c-adunit--first
+##.c-adunit__container
+##.c-adv3__inner
+##.c-advert
+##.c-advert-app
+##.c-advert-superbanner
+##.c-advertisement
+##.c-advertisement--billboard
+##.c-advertisement--rectangle
+##.c-advertising
+##.c-advertising__banner-area
+##.c-advscrollingzone
+##.c-box--advert
+##.c-button--adchoices
+##.c-gallery-vertical__advert
+##.c-googleadslot
+##.c-gpt-ad
+##.c-header__advert-container
+##.c-inblog_ad
+##.c-main-header__ad
+##.c-news-feed-ads
+##.c-partner-articles
+##.c-posts__ad
+##.c-prebid
+##.c-res-ad
+##.c-sitenav-adslot
+##.c-sitenavPlaceholder__ad
+##.c_nt_ad
+##.cableads
+##.cactus-ads
+##.cactus-header-ads
+##.caja_ad
+##.california-ad
+##.california-sidebar-ad
+##.calloutAd
+##.carbon-ad
+##.carbon_ads
+##.carbonad
+##.carbonad-tag
+##.card--ad
+##.card--article-ad
+##.card-ad
+##.card-ads
+##.card-article-ads
+##.card-productads
+##.cardAd
+##.catalog_ads
+##.category-ad:not(html):not(body):not(.post)
+##.category-ads:not(html):not(body):not(.post)
+##.category-advertorial
+##.categoryMosaic-advertising
+##.categoryMosaic-advertisingText
+##.cazAd
+##.cb-ad-banner
+##.cb-ad-container
+##.cb-sidebar__sticky-ad
+##.cbd_ad_manager
+##.cbs-ad
+##.cc-advert
+##.center-ad
+##.center-ad-long
+##.center-tag-rightad
+##.centerAD
+##.centerAd
+##.centerAds
+##.center_ad
+##.center_add
+##.center_ads
+##.center_inline_ad
+##.centerad
+##.centerads
+##.centeradv
+##.centered-ad
+##.ch-ad-item
+##.channel--ad
+##.channel-ad
+##.channel-adv
+##.channel-icon--ad
+##.channel-icon__ad-buffer
+##.channel-sidebar-big-box-ad
+##.channelBoxAds
+##.channel_ad_2016
+##.chapter-bottom-ads
+##.chapter-top-ads
+##.chart_ads
+##.chartad
+##.chitika-ad
+##.ck_adv-box
+##.cl-ad-billboard
+##.clAdPlacementAnchorWrapper
+##.clever-core-ads
+##.clickforceads
+##.clickio-side-ad
+##.client-ad
+##.cls_placeholder_adimg
+##.clsy-c-advsection
+##.cms-ad
+##.cn-advertising
+##.cnbcHeaderAd
+##.cnc-ads
+##.cnx-player
+##.cnx-player-wrapper
+##.coinzilla-ad
+##.coinzilla-ad--mobile
+##.col-ad
+##.col-ad-hidden
+##.col-has-ad
+##.col-line-ad
+##.col2-ads
+##.colAd
+##.colBoxAdframe
+##.colBoxDisplayAd
+##.col_ad
+##.colads
+##.collapsed-ad
+##.colombiaAd
+##.column-ad
+##.columnAd
+##.columnAdvert
+##.columnBoxAd
+##.columnRightAdvert
+##.combinationAd
+##.comment-ad
+##.comment-ad-wrap
+##.comment-advertisement
+##.comment_ad
+##.comment_ad_box
+##.commercialAd
+##.companion-ad
+##.companion-ads
+##.companionAd
+##.companion_ad
+##.complex-ad
+##.component-ads-by-google
+##.component-ar-horizontal-bar-ad
+##.component-header-sticky-ad
+##.component-sponsored-links
+##.components-Ad-___Ad__ad
+##.con_ads
+##.connatix
+##.connatix-container
+##.connatix-hodler
+##.connatix-holder
+##.connatix-main-container
+##.connatix-wrapper
+##.connatix-wysiwyg-container
+##.consoleAd
+##.cont-ad
+##.contads_middle
+##.contained-ad-container
+##.contained-ad-shaft
+##.contained-ad-wrapper
+##.container--ad
+##.container--ads
+##.container--ads-leaderboard-atf
+##.container--advert
+##.container--bannerAd
+##.container-ad-600
+##.container-ad-left
+##.container-adds
+##.container-adrotate
+##.container-ads
+##.container-adwords
+##.container-banner-ads
+##.container-bottom-ad
+##.container-first-ads
+##.container-lower-ad
+##.container-rectangle-ad
+##.container-top-adv
+##.container-with-ad
+##.containerAdsense
+##.containerSqAd
+##.container__ad
+##.container__box--ads
+##.container_ad
+##.container_ad_v
+##.container_publicidad
+##.containerads
+##.contains-ad
+##.contains-advertisment
+##.content--right-ads
+##.content-ad
+##.content-ad-article
+##.content-ad-box
+##.content-ad-container
+##.content-ad-left
+##.content-ad-right
+##.content-ad-side
+##.content-ad-widget
+##.content-ad-wrapper
+##.content-ads
+##.content-ads-bottom
+##.content-advert
+##.content-advertisment
+##.content-bottom-ad
+##.content-bottom-mpu
+##.content-cliff__ad
+##.content-cliff__ad-container
+##.content-contentad
+##.content-footer-ad
+##.content-footer-ad-block
+##.content-header-ad
+##.content-item-ad-top
+##.content-kuss-ads
+##.content-leaderboard-ad
+##.content-leaderboard-ads
+##.content-page-ad_wrap
+##.content-result-ads
+##.content-top-ad-item
+##.content-top-mpu
+##.content-unit-ad
+##.content1-ad
+##.content2-ad
+##.contentAd
+##.contentAd--sb1
+##.contentAdBox
+##.contentAdContainer
+##.contentAdFoot
+##.contentAdIndex
+##.contentAds
+##.contentAdsCommon
+##.contentAdsWrapper
+##.contentAdvertisement
+##.contentTopAd
+##.contentTopAdSmall
+##.contentTopAds
+##.content__ad
+##.content__ad__content
+##.content_ad
+##.content_ad_728
+##.content_ad_head
+##.content_ad_side
+##.content_ads
+##.content_adsense
+##.content_adsq
+##.content_advert
+##.content_advertising
+##.content_advt
+##.content_bottom_adsense
+##.content_gpt_top_ads
+##.content_inner_ad
+##.content_left_advert
+##.contentad
+##.contentad-end
+##.contentad-home
+##.contentad-storyad-1
+##.contentad-superbanner-2
+##.contentad-top
+##.contentad2
+##.contentad300x250
+##.contentad_right_col
+##.contentadarticle
+##.contentadfloatl
+##.contentadleft
+##.contentads1
+##.contentads2
+##.contentbox_ad
+##.contentleftad
+##.contents-ads-bottom-left
+##.contest_ad
+##.context-ads
+##.contextualAds
+##.contextual_ad_unit
+##.coreAdsPlacer
+##.cornerad
+##.cpmstarHeadline
+##.cpmstarText
+##.crain-advertisement
+##.criteo-ad
+##.crm-adcontain
+##.crumb-ad
+##.cs-adv-wrapper
+##.cspAd
+##.css--ad
+##.ct-ads
+##.ct-advert
+##.ct-advertising-footer
+##.ct-bottom-ads
+##.ct_ad
+##.cta-ad
+##.cube-ad
+##.cubeAd
+##.cube_ad
+##.cube_ads
+##.custom-ad
+##.custom-ad-1
+##.custom-ad-area
+##.custom-ad-container
+##.custom-ad-one
+##.custom-ads
+##.custom-advert-banner
+##.custom-sticky-ad-container
+##.customAd
+##.custom_ad
+##.custom_ad_responsive
+##.custom_ads
+##.custom_ads_positions
+##.custom_banner_ad
+##.custom_footer_ad
+##.customadvert
+##.customized_ad_module
+##.cwAdvert
+##.cwv2Ads
+##.cxAdvertisement
+##.cyads650x100
+##.cz-sponsorposts
+##.d1-top-ad
+##.d3-c-adblock
+##.d3-o-adv-block
+##.da-custom-ad-box
+##.dac__banner__wrapper
+##.dac__mpu-card
+##.dac__stream-mpu-card
+##.daily-adlabel
+##.dart-ad
+##.dart-ad-content
+##.dart-ad-grid
+##.dart-ad-title
+##.dart-advertisement
+##.dart-leaderboard
+##.dart-leaderboard-top
+##.dart-medsquare
+##.dartAd300
+##.dartAd491
+##.dartAdImage
+##.dart_ad
+##.dart_tag
+##.dartad
+##.dartadbanner
+##.dartadvert
+##.dartiframe
+##.datafile-ad
+##.datasphere-ad-front
+##.dc-ad
+##.dc-banner
+##.dc-half-banner
+##.dc-widget-adv-125
+##.dcAdvertHeader
+##.dcm-advert
+##.dcmads
+##.dd-ad
+##.dd-ad-container
+##.dda-ad
+##.ddc-table-ad
+##.deckAd
+##.deckads
+##.default-teaser__adv
+##.demand-supply
+##.demo-advert
+##.desktop-ad
+##.desktop-ad-banner
+##.desktop-ad-inpage
+##.desktop-ad-slider
+##.desktop-ads
+##.desktop-adunit
+##.desktop-advert
+##.desktop-article-top-ad
+##.desktop-aside-ad-hide
+##.desktop-lazy-ads
+##.desktop-sidebar-ad-wrapper
+##.desktop-top-ad-wrapper
+##.desktop.ad
+##.desktopAd
+##.desktop_ad
+##.desktop_mpu
+##.desktop_only_ad
+##.desktopads
+##.detail-ad
+##.detail-ads
+##.detail__ad--small
+##.detail_ad
+##.detail_article_ad
+##.detail_top_advert
+##.details-advert
+##.dfm-featured-bottom-flex-container
+##.dfp-ad
+##.dfp-ad-bigbox2-wrap
+##.dfp-ad-container
+##.dfp-ad-container-box
+##.dfp-ad-container-wide
+##.dfp-ad-full
+##.dfp-ad-hideempty
+##.dfp-ad-lead2-wrap
+##.dfp-ad-lead3-wrap
+##.dfp-ad-midbreaker-wrap
+##.dfp-ad-midbreaker2-wrap
+##.dfp-ad-placeholder
+##.dfp-ad-rect
+##.dfp-ad-region-1
+##.dfp-ad-region-2
+##.dfp-ad-tags
+##.dfp-ad-top-wrapper
+##.dfp-ad-unit
+##.dfp-ad-widget
+##.dfp-ads-ad-article-middle
+##.dfp-ads-embedded
+##.dfp-adspot
+##.dfp-article-ad
+##.dfp-banner
+##.dfp-banner-slot
+##.dfp-billboard-wrapper
+##.dfp-block
+##.dfp-bottom
+##.dfp-button
+##.dfp-close-ad
+##.dfp-double-mpu
+##.dfp-dynamic-tag
+##.dfp-fixedbar
+##.dfp-here-bottom
+##.dfp-here-top
+##.dfp-interstitial
+##.dfp-leaderboard
+##.dfp-leaderboard-container
+##.dfp-mrec
+##.dfp-panel
+##.dfp-plugin-advert
+##.dfp-position
+##.dfp-slot
+##.dfp-slot-wallpaper
+##.dfp-space
+##.dfp-super-leaderboard
+##.dfp-tag-wrapper
+##.dfp-top
+##.dfp-top1
+##.dfp-top1-container
+##.dfp-top_leaderboard
+##.dfp-wrap
+##.dfp-wrapper
+##.dfpAd
+##.dfpAdUnitContainer
+##.dfpAds
+##.dfpAdspot
+##.dfpAdvert
+##.dfp_ATF_wrapper
+##.dfp_ad--outbrain
+##.dfp_ad_block
+##.dfp_ad_caption
+##.dfp_ad_content_bottom
+##.dfp_ad_content_top
+##.dfp_ad_footer
+##.dfp_ad_header
+##.dfp_ad_pos
+##.dfp_ad_unit
+##.dfp_ads_block
+##.dfp_frame
+##.dfp_slot
+##.dfp_strip
+##.dfp_top-ad
+##.dfp_txt
+##.dfp_unit
+##.dfp_unit--interscroller
+##.dfp_unit-ad_container
+##.dfpad
+##.dfrads
+##.dfx-ad
+##.dfx-adBlock1Wrapper
+##.dg-gpt-ad-container
+##.dianomi-ad
+##.dianomi-container
+##.dianomi-embed
+##.dianomiScriptContainer
+##.dianomi_context
+##.dikr-responsive-ads-slot
+##.discourse-adplugin
+##.discourse-google-dfp
+##.display-ad
+##.display-ad-block
+##.display-adhorizontal
+##.display-ads-block
+##.display-advertisement
+##.displayAd
+##.displayAdCode
+##.displayAdSlot
+##.displayAdUnit
+##.displayAds
+##.display_ad
+##.display_ads_right
+##.div-gpt-ad-adhesion-leaderboard-wrap
+##.div-insticator-ad
+##.divAd
+##.divAdright
+##.divAds
+##.divAdsBanner
+##.divAdsLeft
+##.divAdsRight
+##.divReklama
+##.divRepAd
+##.divSponsoredBox
+##.divSponsoredLinks
+##.divTopADBanner
+##.divTopADBannerWapper
+##.divTopArticleAd
+##.div_advertisement
+##.div_advertorial
+##.div_advstrip
+##.div_banner468
+##.divad1
+##.divad2
+##.divad3
+##.divads
+##.divider-ad
+##.divider-advert
+##.divider-full-width-ad
+##.divider_ad
+##.dlSponsoredLinks
+##.dm-adSlotBillboard
+##.dm-adSlotNative1
+##.dm-adSlotNative2
+##.dm-adSlotNative3
+##.dm-adSlotRectangle1
+##.dm-adSlotRectangle2
+##.dm-adSlotSkyscraper
+##.dm-adSlot__sticky
+##.dm_ad
+##.dm_ad-billboard
+##.dm_ad-container
+##.dm_ad-halfpage
+##.dm_ad-leaderboard
+##.dm_ad-link
+##.dm_ad-skyscraper
+##.dm_ad300x620
+##.dmpu-ad
+##.dn-ad-wide
+##.dotcom-ad
+##.double-ad
+##.double-ads
+##.double-click-ad
+##.double-mpu-unit
+##.double-square-ad
+##.doubleClickAd
+##.double_adsense
+##.doubleclickAds
+##.download-ad
+##.downloadAds
+##.download_ad
+##.drop-ad
+##.dropdownAds
+##.dsk-box-ad-d
+##.dsp-under-video-ad
+##.dsq_ad
+##.dt-ad-top-content
+##.dt-sponsor
+##.dtads-desktop
+##.dtads-slot
+##.dual-ads
+##.dualAds
+##.dva_ad
+##.dvad1
+##.dvad2
+##.dvad3
+##.dvad3mov
+##.dvad4
+##.dvad4cont
+##.dvad5
+##.dvad5cont
+##.dvadevent
+##.dvadvhw
+##.dvcvmidads
+##.dvcvrgtad
+##.dyn-sidebar-ad
+##.dynamic-ads
+##.dynamicAdvertContainer
+##.dynamicLeadAd
+##.dynamic_adslot
+##.dynamicad1
+##.dynamicad2
+##.e-ad
+##.e-advertise
+##.eaa-ad
+##.eads
+##.easy-ads
+##.easyAdsBox
+##.easyAdsSinglePosition
+##.ebayads
+##.ebm-ad-target__outer
+##.ecommerce-ad
+##.ecosia-ads
+##.eddy-adunit
+##.editor_ad
+##.eg-ad
+##.eg-custom-ad
+##.element--ad
+##.element-ad
+##.element-adplace
+##.element_contentad1
+##.element_contentad2
+##.element_contentad3
+##.element_contentad4
+##.element_contentad5
+##.elementor-widget-wp-widget-advads_ad_widget
+##.em-ad
+##.em-adv-container
+##.em_ad_300x250
+##.em_ads_box_dynamic_remove
+##.embAD
+##.embed-ad
+##.embedded-article-ad
+##.embeddedAd
+##.embeddedAds
+##.embedded_ad_wrapper
+##.emm-ad
+##.empire-unit-prefill-container
+##.empty-ad
+##.endAHolder
+##.endti-adlabel
+##.entry-ad
+##.entry-ads
+##.entry-bottom-ad
+##.entry-bottom-ads
+##.entry-top-ad
+##.entryAd
+##.entry_ad
+##.entryad
+##.esv-ads
+##.etn-ad-text
+##.eu-advertisment1
+##.evo-ads-widget
+##.evolve-ad
+##.ex_pu_iframe
+##.exo-ad-ins-container
+##.exo_wrapper
+##.external-ad
+##.external-add
+##.ezAdsWidget
+##.ezmob-footer
+##.ezmob-footer-desktop
+##.ezo_ad
+##.ezoic-ad
+##.ezoic-ad-adaptive
+##.ezoic-adpicker-ad
+##.ezoic-floating-bottom
+##.f-ad
+##.f-item-ad
+##.f-item-ad-inhouse
+##.fallbackMidArticleAd
+##.fbs-ad--ntv-home-wrapper
+##.fbs-ad--top-wrapper
+##.fbs-ad--topx-wrapper
+##.fc_clmb_ad
+##.fce_ads
+##.fd-ad
+##.featureAd
+##.feature_ad
+##.featured-ad
+##.featured-ads
+##.featured-sponsors
+##.featured-story-ad
+##.featuredAdBox
+##.featuredAds
+##.featuredBoxAD
+##.featured_ad
+##.featuredadvertising
+##.feed-ad
+##.fh_ad_microbuttons
+##.field-59-companion-ad
+##.fig-ad-content
+##.firefly-sidebar-ad
+##.first-article-ad-block
+##.first-banner-ad
+##.first-leaderbord-adv
+##.first-leaderbord-adv-mobile
+##.firstAd-container
+##.first_ad
+##.first_party_ad_wrapper
+##.first_post_ad
+##.firstad
+##.firstpost_advert
+##.firstpost_advert_container
+##.fix_ad
+##.fixadheight
+##.fixadheightbottom
+##.fixed-ad-aside
+##.fixed-ad-bottom
+##.fixed-ads
+##.fixed-bottom-ad
+##.fixed-sidebar-ad
+##.fixedAds
+##.fixedLeftAd
+##.fixedRightAd
+##.fixed_ad
+##.fixed_adslot
+##.fixed_advert_banner
+##.fjs-ad-hide-empty
+##.fla-ad
+##.flashAd
+##.flash_ad
+##.flash_advert
+##.flashad
+##.flashadd
+##.flex-ad
+##.flex-posts-ads
+##.flexAd
+##.flexAds
+##.flexContentAd
+##.flexad
+##.flexadvert
+##.flexiad
+##.flm-ad
+##.floatad
+##.floatads
+##.floated-ad
+##.floated_right_ad
+##.floating-ads
+##.floating-advert
+##.floatingAds
+##.fly-ad
+##.fm-badge-ad
+##.fnadvert
+##.fns_td_wrap
+##.fold-ads
+##.follower-ad-bottom
+##.following-ad
+##.following-ad-container
+##.foot-ad
+##.foot-ads
+##.foot-advertisement
+##.foot_adsense
+##.footad
+##.footer-300-ad
+##.footer-ad
+##.footer-ad-full-wrapper
+##.footer-ad-labeling
+##.footer-ad-row
+##.footer-ad-section
+##.footer-ad-squares
+##.footer-ad-unit
+##.footer-ad-wrap
+##.footer-adrow
+##.footer-ads
+##.footer-ads-slide
+##.footer-ads-wrapper
+##.footer-ads_unlocked
+##.footer-adsbar
+##.footer-adsense
+##.footer-advert
+##.footer-advert-large
+##.footer-advertisement
+##.footer-advertisements
+##.footer-advertising
+##.footer-advertising-area
+##.footer-banner-ad
+##.footer-banner-ads
+##.footer-floating-ad
+##.footer-im-ad
+##.footer-leaderboard-ad
+##.footer-post-ad-blk
+##.footer-prebid
+##.footer-text-ads
+##.footerAd
+##.footerAdModule
+##.footerAdUnit
+##.footerAdWrapper
+##.footerAds
+##.footerAdsWrap
+##.footerAdslot
+##.footerAdverts
+##.footerBottomAdSec
+##.footerFullAd
+##.footerGoogleAdMainWarp
+##.footerPageAds
+##.footerSponsorStrip
+##.footerTextAd
+##.footer__ads--content
+##.footer__advert
+##.footer_ad
+##.footer_ad336
+##.footer_ad_container
+##.footer_ads
+##.footer_adv
+##.footer_advertisement
+##.footer_banner_ad_container
+##.footer_block_ad
+##.footer_bottom_ad
+##.footer_bottomad
+##.footer_line_ad
+##.footer_text_ad
+##.footer_text_adblog
+##.footerad
+##.footeradspace
+##.footertextadbox
+##.forbes-ad-container
+##.forex_ad_links
+##.fortune-ad-unit
+##.forum-ad
+##.forum-ad-2
+##.forum-teaser-ad
+##.forum-topic--adsense
+##.forumAd
+##.forum_ad_beneath
+##.forum_top_ads
+##.four-ads
+##.four-six-eight-ad
+##.four_button_threeone_ad
+##.four_percent_ad
+##.fp-ad-nativendo-one-third
+##.fp-ad-rectangle
+##.fp-ad300
+##.fp-adinsert
+##.fp-ads
+##.fp-right-ad
+##.fp-right-ad-list
+##.fp-right-ad-zone
+##.fp_ad_text
+##.fp_adv-box
+##.fp_article-card--adv-injected
+##.fr_ad_loading
+##.frame_adv
+##.framead
+##.free-start-ads-block
+##.freedownload_ads
+##.freestar-ad-container
+##.freestar-ad-sidebar-container
+##.freestar-ad-wide-container
+##.freestar-incontent-ad
+##.frn_adbox
+##.frn_contAdHead
+##.frn_cont_adbox
+##.fromoursponsor
+##.front-ad
+##.front-video-ads
+##.front_ad
+##.frontads
+##.frontendAd
+##.frontone_ad
+##.frontpage-google-ad
+##.frontpage-right-ad
+##.frontpage-right-ad-hide
+##.frontpage__article--ad
+##.frontpage_ads
+##.fs-ad-block
+##.fsAdContainer
+##.fs_ad
+##.fs_ads
+##.fsrads
+##.ft-ad
+##.full-ad
+##.full-ad-wrapper
+##.full-ads
+##.full-adv
+##.full-bleed-ad
+##.full-bleed-ad-container
+##.full-page-ad
+##.full-top-ad-area
+##.full-width-ad
+##.full-width-ad-container
+##.full-width-ads
+##.fullAdBar
+##.fullBleedAd
+##.fullSizeAd
+##.fullWidthAd
+##.full_AD
+##.full_ad_box
+##.full_ad_row
+##.full_width_ad
+##.fulladblock
+##.fullbanner_ad
+##.fullbannerad
+##.fullpage-ad
+##.fullsize-ad-square
+##.fullwidth-advertisement
+##.fusion-ads
+##.fusion-advert
+##.future_inline_clone_target
+##.fuv_sidebar_ad_widget
+##.fwAdTags
+##.fw_ad
+##.g-ad
+##.g-ad-fix
+##.g-ad-leaderboard
+##.g-ad-slot
+##.g-ad-slot-toptop
+##.g-adblock3
+##.g-adver
+##.g-advertisement-block
+##.g1-ads
+##.g1-advertisement
+##.g2-adsense
+##.g3-adsense
+##.g3rtn-ad-site
+##.gAdFour
+##.gAdMTable
+##.gAdMainParent
+##.gAdMobileTable
+##.gAdOne
+##.gAdOneMobile
+##.gAdRows
+##.gAdSky
+##.gAdThreeDesktop
+##.gAdThreeMobile
+##.gAdTwo
+##.gAds
+##.gAds1
+##.gAdsBlock
+##.gAdsContainer
+##.gAdvertising
+##.g_ad
+##.g_ad336
+##.g_ads_200
+##.g_ads_728
+##.g_adv
+##.g_flbrd_ad
+##.g_ggl_ad
+##.g_lbrd_ad
+##.ga-ad-split
+##.ga-ads
+##.ga-textads-bottom
+##.ga-textads-top
+##.gaTeaserAds
+##.gaTeaserAdsBox
+##.gabfire_ad
+##.gabfire_simplead_widget
+##.gad-container
+##.gad-right1
+##.gad-right2
+##.gad300x600
+##.gad336x280
+##.gadContainer
+##.gad_container
+##.gads300x250
+##.gads_cb
+##.gads_container
+##.gadsense
+##.gadsense-ad
+##.gall_ad
+##.galleria-AdOverlay
+##.galleria-ad-2
+##.galleria-adsense
+##.gallery--wrapped-ad
+##.gallery-ad
+##.gallery-ad-container
+##.gallery-ad-counter
+##.gallery-ad-holder
+##.gallery-ad-lazyload-placeholder
+##.gallery-ad-overlay
+##.gallery-adslot-top
+##.gallery-injectedAd
+##.gallery-sidebar-ad
+##.gallery-slide-ad
+##.galleryAds
+##.galleryAdvertPanel
+##.galleryLeftAd
+##.galleryRightAd
+##.gallery_300x100_ad
+##.gallery__bottom-ad
+##.gallery_ad
+##.gallery_ad_wrapper
+##.gallery_ads_box
+##.galleryad
+##.galleryads
+##.gam-ad
+##.gam-ad-hz-bg
+##.gam_ad_slot
+##.game-ads
+##.game-category-ads
+##.gameAd
+##.gameBottomAd
+##.game_right_ad
+##.game_under_ad
+##.gamepage_boxad
+##.gamepageadBox
+##.gameplayads
+##.games-ad-wrapper
+##.games-ad300
+##.gb-ad-top
+##.gbl_adstruct
+##.gbl_advertisement
+##.gc-deck--is-ad
+##.gd_ad_label
+##.gdm-ad
+##.gels-inlinead
+##.gen_side_ad
+##.general-ad
+##.general-adv-container
+##.general_banner_ad
+##.generic-ad-module
+##.generic-ad-title
+##.genericAds
+##.generic_300x250_ad
+##.geoAd
+##.gfp-banner
+##.ggads
+##.ggadwrp
+##.gglAds
+##.ggl_ads_row
+##.ggl_txt_ads
+##.gglads300
+##.giant_pushbar_ads_l
+##.gl_ad
+##.glacier-ad
+##.glamsquaread
+##.glance_banner_ad
+##.global-adsense
+##.global-body-ad
+##.globalAd
+##.globalAdLargeRect
+##.globalAdLeaderBoard
+##.global_banner_ad
+##.gm-ad-lrec
+##.gmgAd
+##.gms-ad-centre
+##.gms-advert
+##.gn_ads
+##.gnm-ad-unit
+##.gnm-ad-unit-container
+##.gnm-ad-zones
+##.gnm-adhesion-ad
+##.gnm-banner-ad
+##.gnm-bg-ad
+##.go-ad
+##.go-ads-widget-ads-wrap
+##.goAdMan
+##.goAdverticum
+##.goads
+##.goafrica-ad
+##.goglad
+##.goog_ad
+##.googads
+##.google-2ad
+##.google-ad
+##.google-ad-160-600
+##.google-ad-468-60
+##.google-ad-728-90
+##.google-ad-afc-header
+##.google-ad-block
+##.google-ad-bottom-outer
+##.google-ad-center
+##.google-ad-center-below-posts
+##.google-ad-center-footer
+##.google-ad-container
+##.google-ad-content
+##.google-ad-fix
+##.google-ad-header2
+##.google-ad-iframe
+##.google-ad-image
+##.google-ad-manager
+##.google-ad-manager__slot
+##.google-ad-pad
+##.google-ad-placeholder
+##.google-ad-side_ad
+##.google-ad-sidebar
+##.google-ad-space
+##.google-ad-space-vertical
+##.google-ad-top-outer
+##.google-ad-widget
+##.google-ads
+##.google-ads-billboard
+##.google-ads-bottom
+##.google-ads-boxout
+##.google-ads-container
+##.google-ads-footer-01
+##.google-ads-footer-02
+##.google-ads-in_article
+##.google-ads-leaderboard
+##.google-ads-long
+##.google-ads-responsive
+##.google-ads-right
+##.google-ads-sidebar
+##.google-ads-slim
+##.google-ads-widget
+##.google-ads-wrapper
+##.google-ads2
+##.google-adsbygoogle
+##.google-adsense
+##.google-advert-sidebar
+##.google-afc-wrapper
+##.google-bottom-ads
+##.google-dfp-ad-caption
+##.google-dfp-ad-label
+##.google-dfp-ad-wrapper
+##.google-entrepreneurs-ad
+##.google-mid-ad
+##.google-right-ad
+##.google-right-sidebar-ad
+##.google-side-ad
+##.google-sponsored
+##.google-sponsored-ads
+##.google-sponsored-link
+##.google-sponsored-links
+##.google-text-ads
+##.google-user-ad
+##.google300x250
+##.google468
+##.google468_60
+##.google728x90
+##.googleAd
+##.googleAd-content
+##.googleAd-list
+##.googleAdBox
+##.googleAdContainer
+##.googleAdFoot
+##.googleAdSearch
+##.googleAdSense
+##.googleAdWrapper
+##.googleAdd
+##.googleAds
+##.googleAds336
+##.googleAds728
+##.googleAdsContainer
+##.googleAdsSquare
+##.googleAdsense
+##.googleAdsenseMiddle
+##.googleAdv
+##.googleBannerWrapper
+##.googleContentAds
+##.googleInsideAd
+##.googleLgRect
+##.googleSideAd
+##.googleSkyWrapper
+##.googleSubjectAd
+##.google_728x90
+##.google_ad
+##.google_ad3
+##.google_ad336
+##.google_ad_bg
+##.google_ad_btn
+##.google_ad_container
+##.google_ad_first
+##.google_ad_label
+##.google_ad_mrec
+##.google_ad_right
+##.google_ad_wide
+##.google_add
+##.google_add_container
+##.google_admanager
+##.google_ads
+##.google_ads_468x60
+##.google_ads_content
+##.google_ads_sidebar
+##.google_adsense
+##.google_adsense1
+##.google_adsense1_footer
+##.google_adsense_footer
+##.google_adsense_sidebar_left
+##.google_afc
+##.google_afc_ad
+##.google_top_adsense
+##.googlead
+##.googlead-sidebar
+##.googleadArea
+##.googlead_iframe
+##.googlead_outside
+##.googleadbottom
+##.googleadcontainer
+##.googleaddiv
+##.googleaddiv2
+##.googleadiframe
+##.googleads
+##.googleads-bottommiddle
+##.googleads-container
+##.googleads-height
+##.googleads-topmiddle
+##.googleads_300x250
+##.googleads_title
+##.googleadsense
+##.googleadsrectangle
+##.googleadv
+##.googleadvertisement
+##.googleadwrap
+##.googleafc
+##.googlebanwide
+##.googleimagead1
+##.googleimagead2
+##.googlepostads
+##.googley_ads
+##.gpAdBox
+##.gpAdFooter
+##.gpAds
+##.gpt-ad
+##.gpt-ad-container
+##.gpt-ad-sidebar-wrap
+##.gpt-ad-wrapper
+##.gpt-ads
+##.gpt-billboard
+##.gpt-breaker-container
+##.gpt-container
+##.gpt-leaderboard-banner
+##.gpt-mpu-banner
+##.gpt-sticky-sidebar
+##.gpt.top-slot
+##.gptSlot
+##.gptSlot-outerContainer
+##.gptSlot__sticky-footer
+##.gptslot
+##.gradientAd
+##.graphic_ad
+##.grev-ad
+##.grey-ad
+##.grey-ad-line
+##.grey-ad-notice
+##.greyAd
+##.greyad
+##.grid-ad
+##.grid-ad-col__big
+##.grid-advertisement
+##.grid-block-ad
+##.grid-item-ad
+##.gridAd
+##.gridAdRow
+##.gridSideAd
+##.grid_ad_container
+##.gridad
+##.gridlove-ad
+##.gridstream_ad
+##.groei-ad
+##.ground-ads-shared
+##.group-ad-leaderboard
+##.group-google-ads
+##.group-item-ad
+##.group_ad
+##.gsAd
+##.gtm-ad-slot
+##.guide__row--fixed-ad
+##.guj-ad--placeholder
+##.gujAd
+##.gutterads
+##.gw-ad
+##.h-adholder
+##.h-ads
+##.h-adver
+##.h-large-ad-box
+##.h-top-ad
+##.h11-ad-top
+##.h_Ads
+##.h_ad
+##.half-ad
+##.half-page-ad
+##.half-page-ad-1
+##.half-page-ad-2
+##.half-page-advert-outer-wrapper
+##.halfPageAd
+##.half_ad_box
+##.halfpage_ad
+##.halfpage_ad_1
+##.halfpage_ad_container
+##.happy-inline-ad
+##.has-ad
+##.has-adslot
+##.has-fixed-bottom-ad
+##.hasAD
+##.hasads
+##.hbPostAd
+##.hb__ad
+##.hbi-ad-advertiser
+##.hbox_top_sponsor
+##.hcf-ad
+##.hcf-ad-rectangle
+##.hcf-cms-ad
+##.hd-adv
+##.hdTopAdContainer
+##.hd_advert
+##.hd_below_player_ad
+##.hdr-ad
+##.hdr-ad-text
+##.hdr-ads
+##.hdrAd
+##.hdr_ad
+##.head-ad
+##.head-ads
+##.head-banner468
+##.head-top-ads
+##.headAd
+##.head_ad
+##.head_ad_wrapper
+##.head_ads
+##.head_ads_900
+##.head_adv
+##.head_advert
+##.headad
+##.headadcontainer
+##.header--ad-space
+##.header-ad
+##.header-ad-area
+##.header-ad-banner
+##.header-ad-box
+##.header-ad-container
+##.header-ad-desktop
+##.header-ad-frame
+##.header-ad-holder
+##.header-ad-new-wrap
+##.header-ad-region
+##.header-ad-row
+##.header-ad-space
+##.header-ad-top
+##.header-ad-widget
+##.header-ad-wrap
+##.header-ad-wrapper
+##.header-ad-zone
+##.header-adbanner
+##.header-adbox
+##.header-adcode
+##.header-adplace
+##.header-ads
+##.header-ads-area
+##.header-ads-container
+##.header-ads-holder
+##.header-ads-wrap
+##.header-ads-wrapper
+##.header-adsense
+##.header-adslot-container
+##.header-adspace
+##.header-adv
+##.header-advert
+##.header-advert-wrapper
+##.header-advertise
+##.header-advertisement
+##.header-advertising
+##.header-ama-ad
+##.header-and-footer--banner-ad
+##.header-article-ads
+##.header-banner-ad
+##.header-banner-ads
+##.header-banner-advertising
+##.header-bannerad
+##.header-bottom-adboard-area
+##.header-content-ad-container
+##.header-google-ads
+##.header-pencil-ad
+##.header-sponsor
+##.header-top-ad
+##.header-top_ads
+##.header728-ad
+##.headerAd
+##.headerAd1
+##.headerAdBanner
+##.headerAdCode
+##.headerAdContainer
+##.headerAdPosition
+##.headerAdSpacing
+##.headerAdWrapper
+##.headerAds
+##.headerAds250
+##.headerAdspace
+##.headerAdvert
+##.headerAdvertisement
+##.headerMain-ad
+##.headerTextAd
+##.headerTopAd
+##.headerTopAds
+##.header__ad
+##.header__ads
+##.header__ads-wrapper
+##.header__advertisement
+##.header__leaderboard-ad
+##.header_ad
+##.header_ad1
+##.header_ad_2
+##.header_ad_center
+##.header_ad_div
+##.header_ad_space
+##.header_ads
+##.header_ads-container
+##.header_ads_box
+##.header_adsense_banner
+##.header_adspace
+##.header_advert
+##.header_advertisement
+##.header_advertisement_text
+##.header_advertisment
+##.header_leaderboard_ad
+##.header_link_ad
+##.header_right_ad
+##.header_top_ad
+##.headerad
+##.headerad-720
+##.headerad-placeholder
+##.headeradarea
+##.headeradblock
+##.headeradhome
+##.headeradinfo
+##.headeradright
+##.headerads
+##.heading-ad-space
+##.headline-adblock
+##.headline-ads
+##.headline_advert
+##.heavy_ad
+##.hederAd
+##.height_250_ad
+##.height_90_ad
+##.herald-ad
+##.hero-ad
+##.hero-ad-slot
+##.hero-advert
+##.heroAd
+##.hf-top-ad
+##.hidden-ad
+##.hide-ad
+##.hideAdMessage
+##.hide_ad
+##.hide_internal_ad
+##.hidead
+##.highlight-news-ad
+##.highlights-ad
+##.highlightsAd
+##.hioxInternalAd
+##.hm-ad
+##.hm-sec-ads
+##.hm-vertical-ad
+##.hm_adlist
+##.hm_advertisment
+##.hmad
+##.hn-ads
+##.holder-ad
+##.holder-ads
+##.home-2020-ad-text
+##.home-2020-ad-wide
+##.home-ad
+##.home-ad--promo
+##.home-ad--top
+##.home-ad-bigbox
+##.home-ad-container
+##.home-ad-inline
+##.home-ad-links
+##.home-ad-region-1
+##.home-ad-section
+##.home-ad728
+##.home-ads
+##.home-ads-container
+##.home-ads-container1
+##.home-ads1
+##.home-adv-box
+##.home-advert
+##.home-area3-adv-text
+##.home-body-ads
+##.home-features-ad
+##.home-module--advertisement
+##.home-module_ad
+##.home-page-ad
+##.home-sidebar-ad
+##.home-sidebar-ad-300
+##.home-slider-ads
+##.home-sponsored-links
+##.home-sticky-ad
+##.home-top-ad
+##.homeAd
+##.homeAd1
+##.homeAd2
+##.homeAdBox
+##.homeAdBoxA
+##.homeAdSection
+##.homeAddTopText
+##.homeBoxMediumAd
+##.homeCentreAd
+##.homeMainAd
+##.homeMediumAdGroup
+##.homePageAdSquare
+##.homePageAds
+##.homeSubAd
+##.homeTextAds
+##.homeTopAdContainer
+##.home__ad
+##.home__ad-small
+##.home_ad
+##.home_ad720_inner
+##.home_ad_300x100
+##.home_ad_300x250
+##.home_ad_bottom
+##.home_ad_large
+##.home_ad_title
+##.home_adblock
+##.home_advert
+##.home_advertisement
+##.home_advertorial
+##.home_box_latest_ads
+##.home_mrec_ad
+##.home_offer_adv
+##.home_sidebar_ads
+##.home_strip_ad
+##.home_sway_adv
+##.home_top_ad_slider
+##.home_top_ad_slides
+##.home_top_right_ad
+##.home_top_right_ad_label
+##.homead
+##.homeadnews
+##.homeadwrapper
+##.homefront468Ad
+##.homepage--sponsor-content
+##.homepage-300-250-ad
+##.homepage-ad
+##.homepage-ad-block
+##.homepage-ad-block-padding
+##.homepage-ad-buzz-col
+##.homepage-ad-module
+##.homepage-advertisement
+##.homepage-banner-ad
+##.homepage-footer-ad
+##.homepage-footer-ads
+##.homepage-page__all-ad-container
+##.homepage-page__ff-ad-container
+##.homepage-page__tag-ad-container
+##.homepage-page__video-ad-container
+##.homepage-right-rail-ad
+##.homepage-square-ad
+##.homepage300ad
+##.homepageAd
+##.homepageFlexAdOuter
+##.homepageMPU
+##.homepage_ad_half
+##.homepage_ads
+##.homepage_ads_topspot
+##.homepage_block_ad
+##.homesmallad
+##.hor-ad
+##.hor_ad
+##.hori-play-page-adver
+##.horiAd
+##.horiz_adspace
+##.horizontal-ad
+##.horizontal-ad-container
+##.horizontal-ad-holder
+##.horizontal-ad-wrapper
+##.horizontal-ad2
+##.horizontal-ads
+##.horizontal-advert-container
+##.horizontal-advert-inner-wrapper
+##.horizontal-full-ad
+##.horizontal.ad
+##.horizontalAd
+##.horizontalAdText
+##.horizontalAdvert
+##.horizontal_Fullad
+##.horizontal_ad
+##.horizontal_adblock
+##.horizontal_ads
+##.horizontaltextadbox
+##.horizsponsoredlinks
+##.hortad
+##.hotad_bottom
+##.hotel-ad
+##.house-ad
+##.house-ad-small
+##.house-ad-unit
+##.house-ads
+##.houseAd
+##.houseAd1
+##.houseAdsStyle
+##.housead
+##.hover_ads
+##.hoverad
+##.hp-ad-container
+##.hp-ad-grp
+##.hp-adsection
+##.hp-col4-ads
+##.hp-sectionad
+##.hpRightAdvt
+##.hp_320-250-ad
+##.hp_ad_300
+##.hp_ad_box
+##.hp_ad_cont
+##.hp_ad_text
+##.hp_adv300x250
+##.hp_advP1
+##.hp_horizontal_ad
+##.hp_t_ad
+##.hp_textlink_ad
+##.hp_w_ad
+##.hr-ads
+##.hr_ad
+##.hss-ad
+##.htl-ad
+##.htl-ad-placeholder
+##.html-advertisement
+##.html5-ad-progress-list
+##.hw-ad--frTop
+##.hyad
+##.i-amphtml-element.live-updates.render-embed
+##.i-amphtml-unresolved
+##.iAdserver
+##.iab300x250
+##.iab728x90
+##.ib-adv
+##.ico-adv
+##.icon-advertise
+##.iconAdChoices
+##.icon_ad_choices
+##.iconads
+##.idgGoogleAdTag
+##.ie-adtext
+##.iframe-ad
+##.iframe-ads
+##.iframeAd
+##.iframeAds
+##.im_adv
+##.ima-ad-container
+##.image-advertisement
+##.image-viewer-ad
+##.image-viewer-mpu
+##.imageAd
+##.imageAds
+##.imagead
+##.imageads
+##.img-advert
+##.img_ad
+##.img_ads
+##.imgad
+##.imgur-ad
+##.imuBox
+##.in-ad
+##.in-article-ad
+##.in-article-ad-placeholder
+##.in-article-ad-wrapper
+##.in-article-adx
+##.in-article-mpu
+##.in-between-ad
+##.in-body-ad-row
+##.in-body-banner-ad
+##.in-content-ad
+##.in-content-ad--container
+##.in-content-ad-container
+##.in-content-ad-wrapper
+##.in-page-ad
+##.in-post-banner-ad
+##.in-slider-ad
+##.in-story-ads
+##.in-text-ad
+##.in-text__advertising
+##.inPageAd
+##.in_ad
+##.in_article_ad
+##.in_article_ad_wrapper
+##.in_content_ad_container
+##.in_content_advert
+##.inarticlead
+##.inc-ad
+##.incontent-ad1
+##.incontentAd
+##.incontent_ads
+##.index-adv
+##.index-content-ad-wrapper
+##.index-content-ad-wrapper-top
+##.index_728_ad
+##.index_ad
+##.index_ad_a2
+##.index_ad_a4
+##.index_ad_a5
+##.index_ad_a6
+##.index_ad_column2
+##.index_right_ad
+##.indexad
+##.infinity-ad
+##.info-ads
+##.ingridAd
+##.inhouseAdUnit
+##.inhousead
+##.injected-ad
+##.injectedAd
+##.inline-ad
+##.inline-ad-card
+##.inline-ad-container
+##.inline-ad-desktop
+##.inline-ad-placeholder
+##.inline-ad-text
+##.inline-ad-wrap
+##.inline-ad-wrapper
+##.inline-adblock
+##.inline-advert
+##.inline-banner-ad
+##.inline-display-ad
+##.inline-google-ad-slot
+##.inline-mpu
+##.inline-mpu-left
+##.inline-panorama-ad
+##.inline-story-add
+##.inlineAd
+##.inlineAdContainer
+##.inlineAdImage
+##.inlineAdInner
+##.inlineAdNotice
+##.inlineAdText
+##.inlineAdTour
+##.inlineAd_content
+##.inlineAdvert
+##.inlineAdvertisement
+##.inlinePageAds
+##.inlineSideAd
+##.inline_ad
+##.inline_ad_container
+##.inline_ad_title
+##.inline_ads
+##.inlinead
+##.inlinead-tagtop
+##.inlinead_lazyload
+##.inlineadsense
+##.inlineadtitle
+##.inlist-ad
+##.inlistAd
+##.inner-ad
+##.inner-ad-disclaimer
+##.inner-ad-section
+##.inner-adv
+##.inner-advert
+##.inner-post-ad
+##.innerAd300
+##.innerAdWrapper
+##.innerAds
+##.innerContentAd
+##.innerWidecontentAd
+##.inner_ad
+##.inner_ad_advertise
+##.inner_adv
+##.inner_big_ad
+##.innerad
+##.inpostad
+##.inr_top_ads
+##.ins_adwrap
+##.insert-post-ads
+##.insert_ad
+##.insert_ad_column
+##.insert_advertisement
+##.insertad
+##.inside-post-ad
+##.insideStoryAd
+##.inside_ad
+##.inside_ad_box
+##.insideads
+##.inslide-ad
+##.insticator-ads
+##.instoryAdBlock
+##.instoryAdNoBlock
+##.instream_ad
+##.insurance-ad
+##.intAdRow
+##.intad
+##.interAd
+##.internal-ad
+##.internalAd
+##.internal_ad
+##.interstitial-ad
+##.intext-ads
+##.intra-article-ad
+##.intro-ad
+##.ion-ad
+##.ione-widget-dart-ad
+##.ipc-advert
+##.ipc-advert-class
+##.ipsAd
+##.ipsAdvertisement
+##.iqadlinebottom
+##.iqadmarker
+##.iqadtile_wrapper
+##.is-ad
+##.is-carbon-ad
+##.is-desktop-ads
+##.is-mpu
+##.is-preload-ad
+##.is-script-ad
+##.is-sponsored
+##.is-sticky-ad
+##.isAd
+##.isAdPage
+##.isad_box
+##.ise-ad
+##.island-ad
+##.islandAd
+##.islandAdvert
+##.island_ad
+##.island_ad_right_top
+##.islandad
+##.isocket_ad_row
+##.item--ad
+##.item-ad
+##.item-ad-leaderboard
+##.item-advertising
+##.item-container-ad
+##.item-housead
+##.item-housead-last
+##.item-inline-ad
+##.itemAdvertise
+##.item_ads
+##.itinerary-index-advertising
+##.its_all_for_ads
+##.its_for_ads
+##.itsanad
+##.j-ad
+##.jLinkSponsored
+##.jannah_ad
+##.jg-ad-5
+##.jg-ad-970
+##.jl-ads-leaderboard
+##.jobbioapp
+##.jobs-ad-box
+##.jobs-ad-marker
+##.joead728
+##.jquery-adi
+##.jquery-script-ads
+##.js-ad
+##.js-ad-banner-container
+##.js-ad-buttons
+##.js-ad-container
+##.js-ad-dynamic
+##.js-ad-frame
+##.js-ad-home
+##.js-ad-hover
+##.js-ad-loader-bottom
+##.js-ad-slot
+##.js-ad-static
+##.js-ad-unit
+##.js-ad-unit-bottom
+##.js-ad-wrapper
+##.js-adExternalPage
+##.js-ad_iframe
+##.js-ad_iframe_wrap
+##.js-adfliction-iframe
+##.js-adfliction-standard
+##.js-ads
+##.js-ads-carousel
+##.js-ads-header-content
+##.js-adv-rotator-image
+##.js-advert
+##.js-advert--responsive
+##.js-advert--vc
+##.js-advert-container
+##.js-advert-upsell-popup
+##.js-advertising__placeholder1
+##.js-adzone
+##.js-anchor-ad
+##.js-article-advert-injected
+##.js-billboard-advert
+##.js-cardview_ad-320x180
+##.js-cardview_ad-320x50
+##.js-dfp-ad
+##.js-dfp-ad-bottom
+##.js-dfp-ad-top
+##.js-googleAdSuperHeader-wrapper
+##.js-gpt-ad
+##.js-gptAd
+##.js-header-ad
+##.js-header-ad-wrapper
+##.js-lazy-ad
+##.js-mapped-ad
+##.js-mpu
+##.js-native-ad
+##.js-no-sticky-ad
+##.js-overlay_ad
+##.js-product-ad-slider
+##.js-react-simple-ad
+##.js-results-ads
+##.js-right-ad-block
+##.js-sidebar-ads
+##.js-site-header-advert
+##.js-skyscraper-ad
+##.js-slide-right-ad
+##.js-slide-top-ad
+##.js-slim-nav-ad
+##.js-sticky-ad
+##.js-sticky-advert-details-mpu
+##.js-stream-ad
+##.js-stream-featured-ad
+##.js-toggle-ad
+##.js-underplayerAd
+##.jsAdSlot
+##.jsMPUSponsor
+##.jsOneAd
+##.js_ad-sticky-footer
+##.js_adContainer
+##.js_ad_wrapper
+##.js_contained-ad-container
+##.js_deferred-ad
+##.js_desktop-horizontal-ad
+##.js_midbanner_ad_slot
+##.js_movable_ad_slot
+##.js_preheader-ad-container
+##.js_slideshow-full-width-ad
+##.js_slideshow-sidebar-ad
+##.js_sticky-top-ad
+##.jsx-adcontainer
+##.juicyads_300x250
+##.jumboAd
+##.jw-ad
+##.jw-ad-block
+##.jw-ad-label
+##.jw-ad-media-container
+##.jw-ad-visible
+##.kakao_ad_area
+##.keen_ad
+##.klicked-ads
+##.kumpulads-post
+##.kumpulads-side
+##.l-ad
+##.l-ad-top
+##.l-ads
+##.l-adsense
+##.l-article__ad
+##.l-bottom-ads
+##.l-grid--ad-card
+##.l-header-advertising
+##.l-section--ad
+##.l1-ads-wrapper
+##.l_ad_sub
+##.label-ad
+##.label_advertising_text
+##.labelads
+##.labeled_ad
+##.landing-page-ads
+##.landingAdRail
+##.landing_adbanner
+##.large-ad-center
+##.large-advert
+##.large-btn-ad
+##.large-right-ad
+##.largeAd
+##.largeRectangleAd
+##.largeUnitAd
+##.large_ad
+##.large_add_container
+##.largesideadpane
+##.last-left-ad
+##.last-right-ad
+##.last-sidebar-ad
+##.lastAdHolder
+##.lastAdvertorial
+##.lastLiAdv
+##.lastRowAd
+##.lastads
+##.lastpost_advert
+##.lates-adlabel
+##.latest-ad
+##.latest-articles-ad
+##.latest-news__ad--desktop
+##.latestStoriesAd
+##.law_center_ad
+##.layer-ad-bottom
+##.layer-ad-top
+##.layer-xad
+##.layer_text_ad
+##.layeradinfo
+##.layout-ad
+##.layout__content-ad
+##.layout__top-ad
+##.layout_h-ad
+##.lazy-ad
+##.lazy-ad-unit
+##.lazy-adv
+##.lazyad
+##.lazyadsense
+##.lazyadslot
+##.lazyload-ad
+##.lazyload_ad
+##.lazyload_ad_article
+##.lb-ad
+##.lb-adhesion-unit
+##.lb-advert-container
+##.lb-item-ad
+##.lbc-ad
+##.lblAdvert
+##.ld-ad
+##.ld-ad-inner
+##.ldm_ad
+##.lead-ad
+##.lead-ads
+##.lead-advert
+##.leader-ad
+##.leader-ad-728
+##.leaderAd
+##.leaderAdTop
+##.leaderAdvert
+##.leaderBoardAdWrapper
+##.leaderBoardAdvert
+##.leader_ad
+##.leader_aol
+##.leaderad
+##.leaderboard-ad
+##.leaderboard-ad-belt
+##.leaderboard-ad-component
+##.leaderboard-ad-container
+##.leaderboard-ad-dummy
+##.leaderboard-ad-fixed
+##.leaderboard-ad-grid
+##.leaderboard-ad-main
+##.leaderboard-ad-module
+##.leaderboard-ad-pane
+##.leaderboard-ad-placeholder
+##.leaderboard-ad-section
+##.leaderboard-ad-unit
+##.leaderboard-ad-wrapper
+##.leaderboard-adblock
+##.leaderboard-ads
+##.leaderboard-ads-text
+##.leaderboard-advert
+##.leaderboard-advertisement
+##.leaderboard-main-ad
+##.leaderboard-top-ad
+##.leaderboard-top-ad-wrapper
+##.leaderboard.advert
+##.leaderboard1AdWrapper
+##.leaderboardAd
+##.leaderboardAdWrapper
+##.leaderboardFooter_ad
+##.leaderboardRectAdWrapper
+##.leaderboard_ad_container
+##.leaderboard_ad_unit
+##.leaderboard_ads
+##.leaderboard_adsense
+##.leaderboard_adv
+##.leaderboard_banner_ad
+##.leaderboardad
+##.leaderboardadmiddle
+##.leaderboardadtop
+##.leaderboardadwrap
+##.lee-track-ilad
+##.left-ad
+##.left-ads
+##.left-advert
+##.left-rail-ad
+##.left-sponser-ad
+##.leftAd
+##.leftAdColumn
+##.leftAdContainer
+##.leftAds
+##.leftAdsEnabled
+##.leftAdsFix
+##.leftAdvDiv
+##.leftAdvert
+##.leftCol_advert
+##.leftColumnAd
+##.leftPaneAd
+##.left_300_ad
+##.left_ad
+##.left_ad_160
+##.left_ad_areas
+##.left_ad_box
+##.left_ad_container
+##.left_add_block
+##.left_adlink
+##.left_ads
+##.left_adsense
+##.left_advertisement_block
+##.left_col_ad
+##.left_google_add
+##.left_sidebar_wide_ad
+##.leftad
+##.leftadd
+##.leftadtag
+##.leftbar_ad2
+##.leftbarads
+##.leftbottomads
+##.leftnavad
+##.leftrighttopad
+##.leftsidebar_ad
+##.lefttopad1
+##.legacy-ads
+##.lft_advt_container
+##.lg-ads-160x90
+##.lg-ads-311x500
+##.lg-ads-635x100
+##.lg-ads-skin-container
+##.lg-infeed-wrapper
+##.liberty-ad-renderer-iframe
+##.liboxads
+##.ligatus
+##.lightad
+##.lijit-ad
+##.linead
+##.linkAD
+##.linkAds
+##.link_ad
+##.link_adslider
+##.link_advertise
+##.linkads
+##.list-ad
+##.list-adbox
+##.list-ads
+##.list-feature-ad
+##.list-footer-ad
+##.listad
+##.listicle-instream-ad-holder
+##.listing-card-ad
+##.listing-item-ad
+##.listingAd
+##.listings_ad
+##.lite-page-ad
+##.literatumAd
+##.live-ad
+##.ljad
+##.ln-home-feed-ad
+##.ln-sidebar-ads
+##.lnad
+##.lng-ad
+##.loadadlater
+##.local-ads
+##.local-ads-out-container
+##.localad
+##.location-ad
+##.log_ads
+##.logged_out_ad
+##.logo-ad
+##.logoAds
+##.logo_AdChoices
+##.logoad
+##.logoutAd
+##.logoutAdContainer
+##.long-ads
+##.longAd
+##.longAdBox
+##.longAds
+##.long_ad
+##.longform-ad
+##.loop-ad
+##.lower-ad
+##.lower-ads
+##.lowerAd
+##.lowerAds
+##.lower_ad
+##.lqm-ads
+##.lqm_ad
+##.lr-ad
+##.lr-pack-ad
+##.lr_skyad
+##.lrec-container
+##.lst_ads
+##.luxeAd
+##.lv-Adunit
+##.lyrics-inner-ad-wrap
+##.m-ContentAd
+##.m-ad
+##.m-ad-brick
+##.m-ad-region
+##.m-ad-unit
+##.m-ad__wrapper
+##.m-advert
+##.m-advertisement
+##.m-advertisement--container
+##.m-balloon-header--ad
+##.m-block-ad
+##.m-content-advert
+##.m-content-advert-wrap
+##.m-dfp-ad-text
+##.m-header-ad
+##.m-in-content-ad
+##.m-in-content-ad-row
+##.m-jac-ad
+##.m-sponsored
+##.m1-header-ad
+##.m2n-ads-slot
+##.m_ad
+##.m_ad1
+##.m_ad300
+##.m_banner_ads
+##.macAd
+##.macad
+##.mad_adcontainer
+##.madison_ad
+##.magAd
+##.magad
+##.mailAdElem
+##.main-ad
+##.main-ad-728x90-container
+##.main-ad-bg
+##.main-ad-container
+##.main-ad-gallery
+##.main-add-sec
+##.main-ads
+##.main-ads-line-2
+##.main-advert
+##.main-advertising
+##.main-column-ad
+##.main-footer-ad
+##.main-header-ad
+##.main-header__ad-wrapper
+##.main-right-ads
+##.mainAd
+##.mainAdContainer
+##.mainAds
+##.mainEcoAd
+##.mainLeftAd
+##.mainLinkAd
+##.mainRightAd
+##.main__top-ad
+##.main_ad
+##.main_ad_bg
+##.main_ad_bg_div
+##.main_adbox
+##.main_ads
+##.main_adv
+##.main_advert_section
+##.main_intro_ad
+##.main_right_ad
+##.main_wrapper_upper_ad_area
+##.mainadWrapper
+##.makeFooterAdSticky
+##.mal-ad-unit
+##.mal-koukoku-unit
+##.mango_ads
+##.mantis-ad
+##.mantisadd
+##.manual-ad
+##.map-ad
+##.mapAdvertising
+##.map_google_ad
+##.map_media_banner_ad
+##.mapped-ad
+##.mar-block-ad
+##.margin-advertisement
+##.margin0-ads
+##.marginadsthin
+##.marginalContentAdvertAddition
+##.market-ad
+##.market-ad-small
+##.marketing-ad
+##.marketplace-ad
+##.marketplaceAd
+##.markplace-ads
+##.marquee-ad
+##.masonry-tile-ad
+##.masonry__ad
+##.master_post_advert
+##.masthead-ad
+##.masthead-ad-control
+##.masthead-ads
+##.mastheadAds
+##.masthead__ad
+##.masthead_ad_banner
+##.masthead_ads_new
+##.masthead_topad
+##.match-ad
+##.mb-advert
+##.mb-advert__incontent
+##.mb-advert__leaderboard--large
+##.mb-advert__mpu
+##.mb-advert__tweeny
+##.mb-block--advert-side
+##.mb-list-ad
+##.mc_floating_ad
+##.mc_text_ads_box
+##.md-advertisement
+##.mdl-ad
+##.medRect
+##.med_ad_box
+##.media--ad
+##.media-ad-rect
+##.media-advert
+##.media-network-ad
+##.media-viewer__ads-container
+##.mediaAd
+##.mediaAdContainer
+##.media_impact_ads_ad_superbanner
+##.medium-rectangle-ad
+##.medium-top-ad
+##.mediumRectAdWrapper
+##.mediumRectagleAd
+##.mediumRectangleAd
+##.mediumRectangleAdvert
+##.medium_ad
+##.mediumad
+##.medrec-ad
+##.medrect-ad
+##.medrect-ad2
+##.medrectAd
+##.medrect_ad
+##.mega-ad
+##.member-ads
+##.menu-ad
+##.menuAd
+##.menuAds-cage
+##.menuItemBannerAd
+##.menuad
+##.menueadimg
+##.messageBoardAd
+##.message_ads
+##.meta-ad
+##.meta_ad
+##.metabet-adtile
+##.metaboxType-sponsor
+##.mf-adsense-leaderboard
+##.mf-adsense-rightrail
+##.mg_box_ads
+##.mgid-wrapper
+##.mgid_3x2
+##.mh-advert
+##.micro_ad
+##.mid-ad-wrapper
+##.mid-ads
+##.mid-advert
+##.mid-article-banner-ad
+##.mid-page-2-advert
+##.mid-post-ad
+##.mid-section-ad
+##.midAd
+##.midAdv-cont
+##.midAdv-cont2
+##.midAdvert
+##.mid_4_ads
+##.mid_ad
+##.mid_article_ad_label
+##.mid_banner_ad
+##.mid_page_ad
+##.mid_page_ad_big
+##.mid_right_ads
+##.mid_right_inner_id_ad
+##.midad
+##.midarticlead
+##.middle-ad
+##.middle-ads
+##.middle-ads728
+##.middle-footer-ad
+##.middleAd
+##.middleAdLeft
+##.middleAdMid
+##.middleAdRight
+##.middleAdWrapper
+##.middleAds
+##.middleBannerAd
+##.middle_AD
+##.middle_ad
+##.middle_ad_responsive
+##.middle_ads
+##.middlead
+##.middleadouter
+##.midpost-ad
+##.min-height-ad
+##.min_navi_ad
+##.mini-ad
+##.mini-ads
+##.miniHeaderAd
+##.mini_ads
+##.mini_ads_bottom
+##.mini_ads_right
+##.miniad
+##.miniads
+##.misc-ad
+##.misc-ad-label
+##.miscAd
+##.mj-floating-ad-wrapper
+##.mk_ads
+##.mks_ads_widget
+##.ml-advert
+##.mlaAd
+##.mm-ad-sponsored
+##.mm-banner970-ad
+##.mmads
+##.mmc-ad
+##.mmc-ad-wrap-2
+##.mmcAd_Iframe
+##.mmy-ads
+##.mnopolarisAd
+##.mntl-gpt-adunit
+##.mo-advert
+##.mo_googlead
+##.moads-top-banner
+##.moads-widget
+##.mob-ad-break-text
+##.mob-adspace
+##.mob-hero-banner-ad-wrap
+##.mob_ads
+##.mobads
+##.mobile-ad
+##.mobile-ad-container
+##.mobile-ad-nav
+##.mobile-ad-negative-space
+##.mobile-ad-placeholder
+##.mobile-ad-slider
+##.mobile-ads
+##.mobile-fixed-ad
+##.mobile-footer__ad
+##.mobile-instream-ad-holder
+##.mobile-instream-ad-holder-single
+##.mobile-leaderboard-fader
+##.mobile-nav-ad-plus-banner
+##.mobile-related-ad
+##.mobileAd
+##.mobileAdPos2And3
+##.mobileAdWrap
+##.mobileAppAd
+##.mobile_ad_banner
+##.mobile_ad_container
+##.mobile_article_ad2
+##.mobile_featuredad
+##.mobile_featuredad_article
+##.mobile_index_ad
+##.mobile_leaderboard_ad
+##.mobile_vertisement
+##.mobileadbig
+##.mobileadunit
+##.mobilesideadverts
+##.mobileweb_top_ad_container
+##.mod-ad
+##.mod-ad-1
+##.mod-ad-2
+##.mod-ad-300x250
+##.mod-ad-600
+##.mod-ad-lrec
+##.mod-ad-n
+##.mod-ad-risingstar
+##.mod-adblock
+##.mod-adcpc
+##.mod-adopenx
+##.mod-ads
+##.mod-amazon-btn
+##.mod-big-banner-ad
+##.mod-google-ads
+##.mod-horizontal-ad
+##.mod-sponsored-links
+##.mod-trbad
+##.mod-tss-ads-wrapper
+##.mod-vertical-ad
+##.mod_ad
+##.mod_ad_container
+##.mod_ad_imu
+##.mod_ad_t25
+##.mod_ad_text
+##.mod_ad_top
+##.mod_admodule
+##.mod_ads
+##.mod_advert
+##.mod_index_ad
+##.mod_js_ad
+##.mod_openads
+##.mod_r_ad
+##.mod_r_ad1
+##.modal-ad
+##.module--ad
+##.module-ad
+##.module-ad-small
+##.module-ads
+##.module-advert
+##.module-advertisement
+##.module-box-ads
+##.module-image-ad
+##.module-rectangleads
+##.module-sponsored-ads
+##.module1colAds
+##.moduleAd
+##.moduleAdSpot
+##.moduleAdvert
+##.moduleAdvertContent
+##.moduleBannerAd
+##.module__ad-wide
+##.module_ad
+##.module_ad_disclaimer
+##.module_box_ad
+##.module_header_sponsored
+##.module_home_ads
+##.module_single_ads
+##.modulegad
+##.moduletable-adsponsor
+##.moduletable-advert
+##.moduletable-bannerAd6
+##.moduletable-centerad
+##.moduletable-googleads
+##.moduletable-rectangleads
+##.moduletable_ad-right
+##.moduletable_ad300x250
+##.moduletable_adtop
+##.moduletable_advertisement
+##.moduletable_top_ad
+##.moduletableadvert
+##.moduletableexclusive-ads
+##.moduletablesquaread
+##.moduletabletowerad
+##.mom-ad
+##.momizat-ads
+##.moneyball-ad
+##.monitor-g-ad-300
+##.monitor-g-ad-468
+##.monsterad
+##.moreAdBlock
+##.mos-ad
+##.mosaicAd
+##.motherboard-ad
+##.movable-ad
+##.movv-ad
+##.mp-ad
+##.mpsponsor
+##.mpu-ad
+##.mpu-ad-con
+##.mpu-ad-river
+##.mpu-ad-top
+##.mpu-advert
+##.mpu-c
+##.mpu-container-blank
+##.mpu-footer
+##.mpu-fp
+##.mpu-holder
+##.mpu-leaderboard
+##.mpu-left
+##.mpu-left-bk
+##.mpu-mediatv
+##.mpu-right
+##.mpu-title
+##.mpu-top-left
+##.mpu-top-left-banner
+##.mpu-top-right
+##.mpu-unit
+##.mpu-wrap
+##.mpu-wrapper
+##.mpu01
+##.mpu250
+##.mpu600
+##.mpuAd
+##.mpuAdArea
+##.mpuAdSlot
+##.mpuAdvert
+##.mpuArea
+##.mpuBlock
+##.mpuBox
+##.mpuContainer
+##.mpuTextAd
+##.mpu_Ad
+##.mpu_ad
+##.mpu_advert
+##.mpu_container
+##.mpu_gold
+##.mpu_holder
+##.mpu_placeholder
+##.mpu_platinum
+##.mpu_side
+##.mpu_text_ad
+##.mpu_wrapper
+##.mpuad
+##.mpuads
+##.mr1_adwrap
+##.mr2_adwrap
+##.mr3_adwrap
+##.mr4_adwrap
+##.mrec-ads
+##.mrec-banners
+##.mrec-scrollable-cont
+##.mrecAds
+##.mrec_advert
+##.mrf-adv
+##.mrf-adv__wrapper
+##.mrf-directad
+##.ms-ad-superbanner
+##.ms-ads-link
+##.ms-slide-ads
+##.ms_header_ad
+##.msat-adspace
+##.msg-ad
+##.msgad
+##.msw-js-advert
+##.mt-ad-container
+##.mt-t-ad
+##.mt_ad
+##.mt_ads
+##.mtop_adfit
+##.mu-ad-container
+##.multiad2
+##.multiadwrapper
+##.multiple-ads-container
+##.mvAd
+##.mvAdHdr
+##.mv_atf_ad_holder
+##.mvp-ad-label
+##.mvp-feat1-list-ad
+##.mvp-flex-ad
+##.mvp-post-ad-wrap
+##.mvp-widget-ad
+##.mvp-widget-feat2-side-ad
+##.mvp_ad_widget
+##.mvp_block_type_ad_module
+##.mw-ad
+##.my-ads
+##.myAds
+##.myAdsGroup
+##.myTestAd
+##.my__container__ad
+##.myadmid
+##.myinarticlead
+##.narrow_ad_unit
+##.narrow_ads
+##.national_ad
+##.nationalad
+##.native-ad
+##.native-ad-article
+##.native-ad-container
+##.native-ad-item
+##.native-ad-link
+##.native-ad-mode
+##.native-ad-placeholder
+##.native-ad-promoted-provider
+##.native-ad-slot
+##.native-ad__first
+##.native-adv
+##.native-advts
+##.native-leaderboard-ad
+##.native-sidebar-ad
+##.native.ad
+##.nativeAd
+##.nativeAd-sponsor-position
+##.nativeMessageAd
+##.native_ad
+##.native_ad_inline
+##.native_ad_wrap
+##.native_ads
+##.nativead
+##.nativeadasideplaceholder
+##.nativeads-unt
+##.nativiadsense
+##.nature-ad
+##.nav-ad
+##.nav-ad-gpt-container
+##.nav-ad-plus-leader
+##.nav-adWrapper
+##.navAdsBanner
+##.navBads
+##.nav__adbanner
+##.nav_ad
+##.nav_textads
+##.navadbox
+##.navbar-ad-container
+##.navbar-ad-section
+##.navbar-ads
+##.navbar-header-ad
+##.navcommercial
+##.navi_ad300
+##.naviad
+##.nbc_Adv
+##.nc-exp-ad
+##.nchadcont
+##.nda-ad
+##.ndmadkit
+##.nemo-ad
+##.neo-advert
+##.nested-ad
+##.netPost_ad1
+##.netPost_ad3
+##.netads
+##.netshelter-ad
+##.network-ad-two
+##.new-ad-box
+##.new-ads-scroller
+##.newHeaderAd
+##.newPageAd
+##.newPex_forumads
+##.newTopAdContainer
+##.new_ad1
+##.new_ad_left
+##.new_ad_normal
+##.new_ad_wrapper_all
+##.new_ads_unit
+##.newad
+##.newad1
+##.newadsky-wrapper
+##.news-ad
+##.news-ad-block-a
+##.news-ad-square-a
+##.news-ad-square-box
+##.news-ads-top
+##.news-advert__column
+##.news-advertisement
+##.news-home-block-ad
+##.news-item--ad
+##.news-place-ad-info
+##.news_ad_box
+##.news_article_ad_google
+##.news_footer_ad_container
+##.news_imgad
+##.news_vibrant_ads_banner
+##.newsad
+##.newsblock-ads
+##.newsfeed_adunit
+##.newsletter_ad
+##.newspack_global_ad
+##.nexusad
+##.nf-adbox
+##.nfy-ad
+##.nfy-ad-teaser
+##.nfy-ad-tile
+##.nfy-ad-wrapper
+##.nfy-cobo-ad
+##.nfy-col-ad
+##.ng-ad-banner
+##.ng-ad-insert
+##.ngart__ad-col
+##.ngart__side-ad
+##.ngs-adv-async
+##.nm-ad
+##.nmAd_BB-wr
+##.nmAd_FB
+##.nn_mobile_mpu_wrapper
+##.node-ad
+##.node-content-ad
+##.node_ad_wrapper
+##.nomobilead
+##.non-empty-ad
+##.normalAds
+##.normal_ads
+##.normalad
+##.northad
+##.noskim.ad
+##.not-an-ad-header
+##.note-advertisement
+##.np-ad
+##.np-ad-background
+##.np-ad-border
+##.np-ads-wrapper
+##.np-adv-container
+##.np-advert_apu
+##.np-advert_apu-double
+##.np-advert_info
+##.np-header-ad
+##.np-header-ads-area
+##.np-right-ad
+##.npAdGoogle
+##.npSponsorTextAd
+##.nrAds
+##.nsAdRow
+##.nts-ad
+##.ntv-ad
+##.ntv-rail-ad
+##.nu2ad
+##.nuffnangad
+##.nui-ad-layout
+##.nuk-ad-placeholder
+##.nv-ads-wrapper
+##.nw-ad
+##.nw-ad-468x60
+##.nw-ad-label
+##.nw-c-leaderboard-ad
+##.nw-top-ad
+##.nw_adv_square
+##.nx-billboard-ad
+##.nx-placeholder-ad
+##.nzs-ads
+##.o-ad
+##.o-ad-banner-top
+##.o-ad-container
+##.o-ads
+##.o-ads--center
+##.o-ads-content
+##.o-ads__outer
+##.o-advert
+##.o-listing__ad
+##.o-site-header__advert
+##.o-story-content__ad
+##.o-teaser--native-ad
+##.oad-ad
+##.oas-ad
+##.oas-bottom-ads
+##.oas-container
+##.oas-leaderboard-ads
+##.oasInAds
+##.oas_ad
+##.oas_add
+##.oas_advertisement
+##.oasad
+##.oasads
+##.ob_ads_header
+##.ob_container .item-container-obpd
+##.ob_dual_right > .ob_ads_header ~ .odb_div
+##.ob_nm_paid
+##.offads
+##.oi-add-block
+##.oi-header-ad
+##.oi_horz_ad_container
+##.oio-banner-zone
+##.oio-link-sidebar
+##.oio-openslots
+##.oio-zone-position
+##.oko-adhesion
+##.on-demand-ad
+##.on_player_ads
+##.oneColumnAd
+##.onet-ad
+##.onethirdadholder
+##.onf-ad
+##.online-ad
+##.opaAd
+##.opd_adsticky
+##.os-header-ad
+##.otd-ad-top
+##.outer-ad-container
+##.outer-ad-unit-wrapper
+##.outerAdWrapper
+##.outerAds
+##.outer_ad_container
+##.outside_ad
+##.outsider-ad
+##.ov-ad-slot
+##.overflow-ad
+##.overlay-ad
+##.overlay-ad-container
+##.overlay-ads
+##.overlay-box-ad
+##.overlay_ad
+##.ox-holder
+##.p-ad
+##.p-ad-block
+##.p-ad-dfp-banner
+##.p-ad-dfp-middle-rec
+##.p-ad-feature-pr
+##.p-ad-outbreak
+##.p-ad-rectangle
+##.p-ad-thumbnail-txt
+##.p-ads-billboard
+##.p-ads-rec
+##.p-post-ad
+##.p2_right_ad
+##.p75_sidebar_ads
+##.pAdsBlock2
+##.p_adv
+##.p_topad
+##.pa_ads_label
+##.package_adBox
+##.padAdvx
+##.padded-ad
+##.paddingBotAd
+##.pads2
+##.pads_bulk_widget
+##.padvertlabel
+##.page-ad
+##.page-ads
+##.page-advert
+##.page-advertisement
+##.page-bottom-fixed-ads
+##.page-box-ad
+##.page-break-ad
+##.page-content--ad-block
+##.page-content__advert
+##.page-footer-ad
+##.page-header-ad
+##.page-header_ad
+##.page-top-ads
+##.pageAd
+##.pageAdSkin
+##.pageAdSkinMobile
+##.pageAdSkinUrl
+##.pageAds
+##.pageFooterAd
+##.pageGoogleAd
+##.pageGoogleAds
+##.pageHeaderAd
+##.pageHeaderAds
+##.pageTopAd
+##.page__top-ad-wrapper
+##.page_ad
+##.pagead
+##.pageclwideadv
+##.pagefair-acceptable
+##.pagepusheradATF
+##.pages__ad
+##.pane-ad-pane
+##.pane-ads
+##.pane-sasia-ad
+##.pane-site-ads
+##.pane-sponsored-links
+##.pane_ad_wide
+##.panel-ad
+##.panel-ad-mr
+##.panel-adsense
+##.panel-advert
+##.panel-body-adsense
+##.panel.ad
+##.panel_ad
+##.paneladvert
+##.panoramic_ad_placeholder
+##.par-ad
+##.par-adv-slot
+##.parade-ad-container
+##.paragraphAdinsert
+##.parent-ad-desktop
+##.partial-ad
+##.partner-ad
+##.partner-ad-module-wrapper
+##.partner-ads-list
+##.partner-adsonar
+##.partnerAd
+##.partner_ads
+##.partnerad_container
+##.partnersTextLinks
+##.patronad
+##.pauseAdPlacement
+##.pb-ad
+##.pb-ad-curated
+##.pb-ads
+##.pb-f-ad-flex
+##.pb-f-ad-leaderboard
+##.pb-f-ads-ad
+##.pb-mod-ad-flex
+##.pb-slot-container
+##.pc-ad
+##.pcads_widget
+##.pd-ads-mpu
+##.pdpads_desktop
+##.penci-ad-box
+##.penci-ad-image
+##.penci-ad_box
+##.penci-adsense-below-slider
+##.penci-google-adsense
+##.penci-google-adsense-1
+##.penci-promo-link
+##.penci_list_bannner_widget
+##.pencil-ad
+##.pencil-ad-container
+##.pencil-ad-section
+##.pencil_ad
+##.perm_ad
+##.pf_content_ad
+##.pf_sky_ad
+##.pf_top_ad
+##.pfimgAds
+##.pg-ad-block
+##.pg-adnotice
+##.pg-adtarget
+##.pgevoke-fp-bodyad2
+##.pgevoke-story-rightrail-ad1
+##.pgevoke-story-topads
+##.pgevoke-topads
+##.ph-ad
+##.ph-ad-desktop
+##.ph-ad-mediumrectangle
+##.photo-ad
+##.photo-ad-pad
+##.photoAd
+##.photoad
+##.photobox-adbox
+##.phpads_container
+##.pics_detail_ad
+##.pics_footer_ad
+##.picto_ad
+##.picture_ad
+##.pin-ad
+##.pix_adzone
+##.pj-ad
+##.pkad
+##.placeholder-ad
+##.placeholder-dfp
+##.placeholderAd
+##.plain-ad
+##.plainAd
+##.player-ad
+##.player-ad-overlay
+##.player-ads
+##.player-ads2
+##.player-section__ad-b
+##.player-under-ad
+##.playerAd
+##.playerAdv
+##.player__inline-ad
+##.player_ad
+##.player_ad2
+##.player_ad_box
+##.player_hide_ad
+##.player_hover_ad
+##.player_ima-ad-container
+##.playerad
+##.playerdads
+##.plistaList > .itemLinkPET
+##.plistaList > .plista_widget_underArticle_item[data-type="pet"]
+##.plista_inimg_box
+##.plugin-ad
+##.plugin-ad-container
+##.pm-ad
+##.pm-ad-unit
+##.pm-ad-zone
+##.pm-ads-banner
+##.pm-banner-ad
+##.pmc-adm-boomerang-pub-div
+##.pmg-sponsoredlinks
+##.polar-ad
+##.polaris-ad--wrapper-desktop
+##.polarisMarketing
+##.polaris__ad
+##.polaris__teads
+##.position-ads
+##.post--native-ad
+##.post-ad
+##.post-ad-title
+##.post-ad-top
+##.post-ad-type
+##.post-ads
+##.post-ads-top
+##.post-adsense-bottom
+##.post-advert
+##.post-advert-row
+##.post-advertisement
+##.post-load-ad
+##.post-news-ad
+##.post-sidebar-ad
+##.post-sponsored
+##.postAd
+##.postWideAd
+##.post__ad
+##.post__article-top-ad-wrapper
+##.post_ad
+##.post_ads
+##.post_advert
+##.post_detail_right_advert
+##.post_sponsored
+##.postad
+##.postads
+##.postads3
+##.postbit-ad
+##.postend-advert
+##.poster_ad
+##.postfooterad
+##.posts-ad
+##.pp-ad-container
+##.pp_ad_code_adtxt
+##.ppb_ads
+##.ppr_priv_footer_banner_ad_billboard
+##.ppr_priv_header_banner_ad
+##.ppr_priv_horizon_ad
+##.pr_adslot_0
+##.pr_adslot_1
+##.prebid-wrapper
+##.preheader_advert
+##.premium-ad
+##.premium-ads
+##.premium-adv
+##.premium-mpu-container
+##.premiumad
+##.priad
+##.priad-1
+##.primary-ad
+##.primary-ad-widget
+##.primary-advertisment
+##.primis-video
+##.primis-wrapper
+##.print-ad-wrapper
+##.print-adslot
+##.printAds
+##.product-ad
+##.product-ads
+##.product-ads-carousel
+##.product-bar-ads
+##.product-inlist-ad
+##.profile-ad-container
+##.profile-ads-container
+##.profile__ad-wrapper
+##.profile_ad_bottom
+##.profile_ad_top
+##.programtic-ads
+##.promo-ad
+##.promo-mpu
+##.promoAd
+##.promoAds
+##.promoAdvertising
+##.promo_ad
+##.promo_ads
+##.promo_border
+##.promoad
+##.promoboxAd
+##.promoted_content_ad
+##.promotionAdContainer
+##.promotionTextAd
+##.proof_ad
+##.propel-ad
+##.proper-ad-insert
+##.proper-ad-unit
+##.ps-ad
+##.ps-ligatus_placeholder
+##.pt-ad--container
+##.pt-ad--scroll
+##.pt_ad03
+##.pt_col_ad02
+##.pub_ads
+##.publication-ad
+##.publication-instream-ad-container
+##.publicidad_horizontal
+##.publicidade
+##.publicidade-vertical-layout
+##.publisher_ad
+##.pubtech-adv-slot
+##.puff-ad
+##.puff-advertorials
+##.pull-ad
+##.pull_top_ad
+##.pullad
+##.pulsir-ad
+##.puppyAd
+##.purchad
+##.push--ad
+##.push-ad
+##.push-adv
+##.pushDownAd
+##.pushdown-ad
+##.pushdownAd
+##.pw-in-article-ad-container
+##.pw-in-article-relevant-container
+##.pz-ad-box
+##.quads-ad-label
+##.quads-bg-ad
+##.quads-location
+##.queue_ad
+##.queued-ad
+##.quickadsense
+##.quicklinks-ad
+##.quigo
+##.quigo-ad
+##.quigoads
+##.r-ad
+##.r-pause-ad-container
+##.r7ad
+##.r_ad
+##.r_ads
+##.rail-ad
+##.rail-ads-1
+##.rail-article-sponsored
+##.rail__ad
+##.rail_ad
+##.railad
+##.railadspace
+##.ray-floating-ads-container
+##.rc-sponsored
+##.rcom-freestar-ads-widget
+##.re-AdTop1Container
+##.ready-ad
+##.rec_ad
+##.recent-ad
+##.recentAds
+##.recent_ad_holder
+##.recipeFeatureAd
+##.recommend-ad-one
+##.recommend-ad-two
+##.rect-ad
+##.rect-ad-1
+##.rectAd300
+##.rect_ad
+##.rect_ad_module
+##.rect_advert
+##.rectad
+##.rectadv
+##.rectangle-ad
+##.rectangle-ad-container
+##.rectangle-ad-slot-container
+##.rectangle-ad-slot-wrapper
+##.rectangle-embed-ad
+##.rectangle-widget-td-ad
+##.rectangleAd
+##.rectangleAdContainer
+##.rectangle_ad
+##.rectanglead
+##.rectangleads
+##.red-adv
+##.redads_cont
+##.reedwan_adds300x250_widget
+##.referrerDetailAd
+##.refreshAds
+##.refreshInarticleAd
+##.refreshable_ad
+##.region-ad-bottom-leaderboard
+##.region-ad-pan
+##.region-ad-right
+##.region-ad-top
+##.region-ads
+##.region-ads-content-top
+##.region-banner-ad
+##.region-dfp-ad-footer
+##.region-dfp-ad-header
+##.region-footer-ad-full
+##.region-header-ad
+##.region-header-ads
+##.region-middle-ad
+##.region-top-ad
+##.region-top-ad-block
+##.region-widget-ad-top-0
+##.regular-ads
+##.regular-advert-outer-wrapper
+##.regular_728_ad
+##.regularad
+##.rekl-left
+##.rekl-right
+##.rekl-top
+##.rekl_left
+##.rekl_right
+##.rekl_top
+##.rekl_top_wrapper
+##.reklam
+##.reklam-block
+##.reklam-kare
+##.reklam-masthead
+##.reklam2
+##.reklam728
+##.reklama
+##.reklama-c
+##.reklama-vert
+##.reklama1
+##.reklame-right-col
+##.reklame-wrapper
+##.reklamka
+##.rel_ad_box
+##.related-ad
+##.related-ads
+##.related-guide-adsense
+##.relatedAds
+##.relatedContentAd
+##.related_ad
+##.related_post_google_ad
+##.relatesearchad
+##.remads
+##.remnant_ad
+##.remove-ads
+##.remove-ads-link
+##.removeAdsLink
+##.reportAdLink
+##.res_ad
+##.resads-adspot
+##.reserved_box_ads
+##.reserved_box_ads_2
+##.residentialads
+##.resourceImagetAd
+##.respAds
+##.responsive-ad
+##.responsive-ad-header-container
+##.responsive-ad-wrapper
+##.responsive-ads
+##.responsive-vertial-ad-wrapper
+##.responsiveAdHiding
+##.responsiveAdsense
+##.responsive_ad_top
+##.responsive_ads_120x600
+##.responsive_ads_468x60
+##.result-ad
+##.result-sponsored
+##.result-top-ad
+##.result-words-ad-new
+##.resultAd
+##.result__advertising
+##.result_ad
+##.resultad
+##.results-ads
+##.rev_square_side_door
+##.revcontent-main-ad
+##.revcontent-slot
+##.revcontent-wrap
+##.review-ad
+##.review_ad1
+##.reviews-display-ad
+##.revive-ad
+##.rg-ad
+##.rgt-ad
+##.rgt_ad
+##.rh-ad
+##.rhads
+##.rhc-ad-bottom
+##.rhs-ad
+##.rhs-ads-panel
+##.rhs-advert-container
+##.rhs-advert-link
+##.rhs-advert-title
+##.rhs-mrec-wrapper
+##.rhs_ad
+##.rhs_ad_title
+##.rhs_ads
+##.rhsad
+##.rhsadvert
+##.right-ad
+##.right-ad-1
+##.right-ad-2
+##.right-ad-3
+##.right-ad-300x250
+##.right-ad-4
+##.right-ad-5
+##.right-ad-block
+##.right-ad-container
+##.right-ad-holder
+##.right-ad-tagline
+##.right-ad-wrapper
+##.right-ad2
+##.right-ad350px250px
+##.right-ads
+##.right-ads2
+##.right-adsense
+##.right-adv
+##.right-advert
+##.right-advertisement
+##.right-col-ad
+##.right-column-ad
+##.right-column-ads
+##.right-navAdBox
+##.right-rail-ad
+##.right-rail-ad-banner
+##.right-rail-ad-container
+##.right-rail-box-ad-container
+##.right-rail__ad
+##.right-side-ad
+##.right-side-ads
+##.right-sidebar-ads-container
+##.right-sidebar-box-ad
+##.right-sidebar-box-ads
+##.right-sponser-ad
+##.right-top-ad
+##.right-video-dvertisement
+##.rightAD
+##.rightAd
+##.rightAd1
+##.rightAd2
+##.rightAdBlock
+##.rightAdBox
+##.rightAdColumn
+##.rightAdContainer
+##.rightAds
+##.rightAdsFix
+##.rightAdvert
+##.rightAdverts
+##.rightBoxAd
+##.rightBoxMidAds
+##.rightColAd
+##.rightColAdBox
+##.rightColumnAd
+##.rightColumnAdd
+##.rightColumnAdsTop
+##.rightColumnRectAd
+##.rightHeaderAd
+##.rightRailAd
+##.rightRailMiddleAd
+##.rightSecAds
+##.rightSideBarAd
+##.rightSideSponsor
+##.rightTopAdWrapper
+##.right_ad
+##.right_ad_1
+##.right_ad_2
+##.right_ad_box
+##.right_ad_box1
+##.right_ad_innercont
+##.right_ad_text
+##.right_ad_top
+##.right_ad_unit
+##.right_ad_wrap
+##.right_adlist
+##.right_ads
+##.right_ads_column
+##.right_adsense_box_2
+##.right_adskin
+##.right_adv
+##.right_advert
+##.right_advertise_cnt
+##.right_advertisement
+##.right_block_advert
+##.right_box_ad
+##.right_col_ad
+##.right_column_ads
+##.right_content_ad
+##.right_image_ad
+##.right_long_ad
+##.right_outside_ads
+##.right_side_ads
+##.right_side_box_ad
+##.right_sponsor_main
+##.rightad
+##.rightad250
+##.rightad300
+##.rightad600
+##.rightadHeightBottom
+##.rightad_1
+##.rightad_2
+##.rightadbig
+##.rightadblock
+##.rightadbox1
+##.rightadd
+##.rightads
+##.rightadunit
+##.rightadv
+##.rightbox_content_ads
+##.rightboxads
+##.rightcol-adbox
+##.rightcol-block-ads
+##.rightcol_boxad
+##.rightcol_div_openx2
+##.rightcolads
+##.rightcoladvert
+##.rightcoltowerad
+##.rightnav_adsense
+##.rightpanelad
+##.rightrail-ad-atf
+##.rightrail-ad-block
+##.rightrail-ad-placed
+##.rightrail-display-ad
+##.rightrail_ads
+##.rightsideAd
+##.righttop-advt
+##.ringtone-ad
+##.river-item-sponsored
+##.river-standard-ad-container
+##.riverAdLoaded
+##.riverAdsLoaded
+##.riverSponsor
+##.rj-ads-wrap-sq
+##.rj-ads-wrapper
+##.rm-adslot
+##.rngtAd
+##.roadblocker-ad-content-wrap
+##.rockmeltAdWrapper
+##.rolloverad
+##.roof-ad
+##.root-ad-anchor
+##.rot_ads
+##.rotatead-container
+##.rotating-ad
+##.rotating-ads
+##.rotatingAdvertisement
+##.rotatingBannerWidget
+##.rotatingadsection
+##.rotator_ad_overlay
+##.round_box_advert
+##.roundedCornersAd
+##.row--gh-ad
+##.row-ad
+##.row-ad-leaderboard
+##.rowAd
+##.rowAds
+##.row_header_ads
+##.rowad
+##.rowgoogleads
+##.rpd_ads
+##.rr-300x250-ad
+##.rr-300x600-ad
+##.rr-ad
+##.rr_ads
+##.rr_skyad
+##.rs-ad
+##.rs-advert
+##.rs-advert__container
+##.rs_ad_block
+##.rs_ad_top
+##.rside_adbox
+##.rt_ad
+##.rt_ad_call
+##.rtmad
+##.rw-advert
+##.rwSideAd
+##.rw_ad
+##.s-ad
+##.s-ads
+##.s-ads-metrics
+##.s-body-ad
+##.s-hidden-sponsored-item
+##.s_ads
+##.s_ads_label
+##.s_sponsored_ads
+##.sa-mainad
+##.sabavision-ads
+##.sad_posterad
+##.sadvert
+##.sagreklam
+##.sal-adv-gpt
+##.sam_ad
+##.sb-ad
+##.sb-ad-margin
+##.sb-ads
+##.sb-top-sec-ad
+##.sbAd
+##.sbAdUnitContainer
+##.sbTopadWrapper
+##.sb_ad
+##.sb_ad_holder
+##.sc-ad
+##.scad
+##.scanAd
+##.scb-ad
+##.scoopads
+##.script-ad
+##.scroll-ad-item-container
+##.scroll-ads
+##.scroll-track-ad
+##.scrolling-ads
+##.sda_adbox
+##.sdc-advert__top-1
+##.se-ligatus
+##.search-ad
+##.search-advertisement
+##.search-result-list-item--sidebar-ad
+##.search-result-list-item--topad
+##.search-result-sponsored
+##.search-results-ad
+##.search-results-banner-ad
+##.search-sponsor
+##.search-sponsored
+##.searchAd
+##.searchAdTop
+##.searchAds
+##.searchad
+##.searchads
+##.secondary-ad-widget
+##.secondary-advertisment
+##.secondaryAdModule
+##.secondary_ad
+##.section-ad
+##.section-ad-related
+##.section-ad-unit
+##.section-ad-wrapper
+##.section-ad2
+##.section-ads
+##.section-adtag
+##.section-adv
+##.section-advert-banner
+##.section-advertisement
+##.section-sponsor
+##.section_ad
+##.section_ad_left
+##.section_adarea
+##.section_ads
+##.selfServeAds
+##.sense-adhesion
+##.seoAdWrapper
+##.seoTopAds
+##.sepContentAd
+##.series-ad
+##.servedAdlabel
+##.serversidenativead
+##.serviceAd
+##.set_ad
+##.sexunder_ads
+##.sf-advert
+##.sf_ad_box
+##.sg-adblock
+##.sgAd
+##.sh-ad-box
+##.sh-ad-section
+##.sh-section-ad
+##.shadvertisment
+##.sheknows-infuse-ad
+##.shift-ad
+##.shortads
+##.shortadvertisement
+##.show-desk-ad
+##.show-sticky-ad
+##.showAd
+##.showAdContainer
+##.showads
+##.showcaseAd
+##.showcasead
+##.sics-component__sticky-ad-placeholder
+##.sidbaread
+##.side-ad
+##.side-ad-300
+##.side-ad-big
+##.side-ad-blocks
+##.side-ad-container
+##.side-ad-inner
+##.side-ad-top
+##.side-ads
+##.side-ads-block
+##.side-ads-container
+##.side-ads-wide
+##.side-ads300
+##.side-ads_sticky-group
+##.side-adv-block
+##.side-adv-text
+##.side-advert
+##.side-advertising
+##.side-adverts
+##.side-bar-ad
+##.side-panel_v-ad-container
+##.sideAd
+##.sideAdLeft
+##.sideAdTall
+##.sideAdWide
+##.sideAdv
+##.sideAdv-wrapper
+##.sideBarAd
+##.sideBarCubeAd
+##.sideBlockAd
+##.sideBoxAd
+##.sideBoxM1ad
+##.sideBoxMiddleAd
+##.side__ad
+##.side__ad-box
+##.side_ad
+##.side_ad2
+##.side_ad300
+##.side_ad_1
+##.side_ad_2
+##.side_ad_3
+##.side_ad_box_mid
+##.side_ad_box_top
+##.side_ad_top
+##.side_add_wrap
+##.side_ads
+##.side_adsense
+##.side_adv
+##.side_col_ad_wrap
+##.side_float_ad
+##.sidead
+##.sidead_150
+##.sidead_300
+##.sideadmid
+##.sideads
+##.sideads_l
+##.sideadsbox
+##.sideadtable
+##.sideadvert
+##.sideadverts
+##.sidebar--mps_ad
+##.sidebar-320__box_adv
+##.sidebar-350ad
+##.sidebar-ad
+##.sidebar-ad-300
+##.sidebar-ad-300x250-cont
+##.sidebar-ad-a
+##.sidebar-ad-area
+##.sidebar-ad-b
+##.sidebar-ad-box
+##.sidebar-ad-c
+##.sidebar-ad-component
+##.sidebar-ad-cont
+##.sidebar-ad-container
+##.sidebar-ad-div
+##.sidebar-ad-label
+##.sidebar-ad-rect
+##.sidebar-ad-slot
+##.sidebar-ad-wrapper
+##.sidebar-adbox
+##.sidebar-add-1
+##.sidebar-ads
+##.sidebar-ads-block
+##.sidebar-ads-no-padding
+##.sidebar-ads-wrap
+##.sidebar-adsdiv
+##.sidebar-adv-container
+##.sidebar-advert
+##.sidebar-advertisement
+##.sidebar-advertisment
+##.sidebar-adverts
+##.sidebar-adverts-header
+##.sidebar-atf-ad-wrapper
+##.sidebar-banner-ad
+##.sidebar-below-ad-unit
+##.sidebar-big-ad
+##.sidebar-big-box-ad
+##.sidebar-block-adsense
+##.sidebar-bottom-ad
+##.sidebar-box-ad
+##.sidebar-box-ads
+##.sidebar-col-ad-left
+##.sidebar-col-ad-right
+##.sidebar-content-ad
+##.sidebar-digiads
+##.sidebar-header-ads
+##.sidebar-paid-ad-label
+##.sidebar-product-ad
+##.sidebar-skyscraper-ad
+##.sidebar-sponsored
+##.sidebar-sponsors
+##.sidebar-square-ad
+##.sidebar-sticky--ad
+##.sidebar-text-ad
+##.sidebar-top-ad
+##.sidebar-tower-ad
+##.sidebar300adblock
+##.sidebarAD
+##.sidebarAd
+##.sidebarAdBlock
+##.sidebarAdLink
+##.sidebarAdNotice
+##.sidebarAdUnit
+##.sidebarAds300px
+##.sidebarAdvert
+##.sidebarCloseAd
+##.sidebarNewsletterAd
+##.sidebar__ad
+##.sidebar__block--ad
+##.sidebar__block-advertisement
+##.sidebar__item-spacer--advert-top
+##.sidebar__module--ad
+##.sidebar_ad
+##.sidebar_ad_300
+##.sidebar_ad_300_250
+##.sidebar_ad_container
+##.sidebar_ad_container_div
+##.sidebar_ad_holder
+##.sidebar_ad_leaderboard
+##.sidebar_ad_module
+##.sidebar_ads
+##.sidebar_ads_left
+##.sidebar_ads_right
+##.sidebar_ads_title
+##.sidebar_adsense
+##.sidebar_advert
+##.sidebar_advertising
+##.sidebar_box_ad
+##.sidebar_right_ad
+##.sidebar_skyscraper_ad
+##.sidebar_small_ad
+##.sidebar_sponsors
+##.sidebarad
+##.sidebarad160
+##.sidebarad_bottom
+##.sidebaradbox
+##.sidebaradcontent
+##.sidebarads
+##.sidebaradsense
+##.sidebarbox__advertising
+##.sidebarboxad
+##.sidebox-ad
+##.sidebox_ad
+##.sideright_ads
+##.sideskyad
+##.signad
+##.simple-ad-placeholder
+##.simple_ads_manager_widget
+##.simple_adsense_widget
+##.simplead-container
+##.simpleads-item
+##.single-ad
+##.single-ad-anchor
+##.single-ad-wrap
+##.single-ads
+##.single-ads-section
+##.single-article-ad
+##.single-bottom-ads
+##.single-component__ad
+##.single-google-ad
+##.single-mpu
+##.single-post-ad
+##.single-post-ads
+##.single-post-ads-750x90
+##.single-post-bottom-ads
+##.single-top-ad
+##.singleAd
+##.singleAdBox
+##.singleAdsContainer
+##.singlePostAd
+##.single_ad
+##.single_ad_300x250
+##.single_advert
+##.single_bottom_ad
+##.single_page_ads_header
+##.single_top_ad
+##.singlead
+##.singleads
+##.singleadstopcstm2
+##.singlepageleftad
+##.singlepostad
+##.singlepostadsense
+##.singpagead
+##.sister-ads
+##.site-ad-block
+##.site-ads
+##.site-bottom-ad-slot
+##.site-footer__ad-area
+##.site-head-ads
+##.site-header--sponsored
+##.site-header-ad
+##.site-header__ads
+##.site-top-ad
+##.siteWideAd
+##.site_ad
+##.site_ad--gray
+##.site_ad--label
+##.site_ads
+##.site_ads_home
+##.site_sponsers
+##.sitesponsor
+##.skinAd
+##.sky-ad
+##.sky-ad1
+##.skyAd
+##.skyAdd
+##.skyAdvert
+##.skyAdvert2
+##.sky_ad
+##.sky_ad_top
+##.sky_scraper_ad
+##.skyad
+##.skyjobsadtext
+##.skyscraper-ad
+##.skyscraper-ad-1
+##.skyscraper-ad-container
+##.skyscraper.ad
+##.skyscraperAd
+##.skyscraper_ad
+##.skyscrapper-ads-container
+##.sl-header-ad
+##.slate-ad
+##.slide-ad
+##.slideAd
+##.slide_ad
+##.slidead
+##.slider-ads
+##.slider-item-ad
+##.slider-right-advertisement-banner
+##.sliderad
+##.slideshow-ad
+##.slideshow-ad-container
+##.slideshow-ad-wrapper
+##.slideshow-ads
+##.slideshowAd
+##.slideshow_ad_300
+##.slideshow_ad_note
+##.slideshowadvert
+##.slot-box-marker-ad
+##.slot-customcontentad
+##.slot__ad
+##.sm-ad
+##.sm-admgnr-unit
+##.sm-ads
+##.sm-ads__billboard
+##.sm-advertisement
+##.sm-widget-ad-holder
+##.sm_ad
+##.small-ad
+##.small-ad-header
+##.small-ad-long
+##.small-ads
+##.smallAd
+##.smallAdContainer
+##.smallAds
+##.smallAdsContainer
+##.smallAdvertisments
+##.small_ad
+##.small_ad_bg
+##.small_ads
+##.smallad
+##.smalladblock
+##.smallads
+##.smalladscontainer
+##.smallsponsorad
+##.smart-ad
+##.smartAd
+##.smartad
+##.smn-new-gpt-ad
+##.snhb-ads
+##.snippet-ad
+##.snoadrotatewidgetwrap
+##.social-ad
+##.sovrn-connect-ad
+##.sp-ad
+##.sp-ad__leaderboard
+##.sp-adblock-2
+##.spLinks
+##.sp_ad
+##.spaceAdds
+##.spansored-item
+##.speakol-widget
+##.special_ad_section
+##.special_header_ad
+##.specials_ads
+##.spinAdvert
+##.spl-ads
+##.spl_ad
+##.spl_ad2
+##.splashy-ad-container
+##.spmads_medrec
+##.spnsr-wrapper
+##.spnsrCntnr
+##.spnsr_right
+##.spon-links
+##.spon_link
+##.sponadbox
+##.sponlinkbox
+##.spons-link
+##.spons-wrap
+##.sponsBox
+##.sponsLinks
+##.sponsWrap
+##.spons_link_header
+##.spons_links
+##.sponsbox
+##.sponser-link
+##.sponserIABAdBottom
+##.sponserLink
+##.sponsersads
+##.sponsertop
+##.sponsforums-middle
+##.sponslink
+##.sponsor-300
+##.sponsor-728
+##.sponsor-ad-1
+##.sponsor-ad-title
+##.sponsor-ad-wrapper
+##.sponsor-ads
+##.sponsor-area
+##.sponsor-area-top
+##.sponsor-bar-ea
+##.sponsor-block
+##.sponsor-bottom
+##.sponsor-box
+##.sponsor-btns
+##.sponsor-grid__sponsor
+##.sponsor-inner
+##.sponsor-left
+##.sponsor-link
+##.sponsor-links
+##.sponsor-popup
+##.sponsor-post
+##.sponsor-right
+##.sponsor-spot
+##.sponsor-text
+##.sponsor-text-container
+##.sponsor-wrap
+##.sponsorAd
+##.sponsorArea
+##.sponsorBlock
+##.sponsorBottom
+##.sponsorBox
+##.sponsorFooter
+##.sponsorFooter-container
+##.sponsorLabel
+##.sponsorLink
+##.sponsorLinks
+##.sponsorPanel
+##.sponsorPost
+##.sponsorPostWrap
+##.sponsorStrip
+##.sponsorText
+##.sponsorTitle
+##.sponsorTxt
+##.sponsor_ad
+##.sponsor_ad1
+##.sponsor_ad2
+##.sponsor_ad_area
+##.sponsor_ad_section
+##.sponsor_area
+##.sponsor_bar
+##.sponsor_block
+##.sponsor_columns
+##.sponsor_div
+##.sponsor_footer
+##.sponsor_image
+##.sponsor_label
+##.sponsor_line
+##.sponsor_links
+##.sponsor_logo
+##.sponsor_placement
+##.sponsor_popup
+##.sponsor_post
+##.sponsor_units
+##.sponsorad
+##.sponsoradlabel
+##.sponsorads
+##.sponsoradtitle
+##.sponsored-ad
+##.sponsored-ad-container
+##.sponsored-ad-label
+##.sponsored-ad-ob
+##.sponsored-add
+##.sponsored-ads
+##.sponsored-article
+##.sponsored-article-item
+##.sponsored-article-widget
+##.sponsored-b
+##.sponsored-block
+##.sponsored-browse-data-route
+##.sponsored-buttons
+##.sponsored-container
+##.sponsored-container-bottom
+##.sponsored-content
+##.sponsored-default
+##.sponsored-display-ad
+##.sponsored-editorial
+##.sponsored-features
+##.sponsored-header
+##.sponsored-headlines
+##.sponsored-headlines-wrap
+##.sponsored-headshop
+##.sponsored-inmail
+##.sponsored-inmail-legacy
+##.sponsored-link
+##.sponsored-links
+##.sponsored-links-alt-b
+##.sponsored-links-col
+##.sponsored-links-holder
+##.sponsored-links-red
+##.sponsored-links-right
+##.sponsored-links-tbl
+##.sponsored-media
+##.sponsored-post
+##.sponsored-post-container
+##.sponsored-post_ad
+##.sponsored-result
+##.sponsored-results
+##.sponsored-right
+##.sponsored-slot
+##.sponsored-tag
+##.sponsored-text
+##.sponsored-top
+##.sponsored-widget
+##.sponsoredAd
+##.sponsoredAdLine
+##.sponsoredAds
+##.sponsoredBanners
+##.sponsoredBar
+##.sponsoredBottom
+##.sponsoredBox
+##.sponsoredContent
+##.sponsoredEntry
+##.sponsoredFeature
+##.sponsoredInfo
+##.sponsoredInner
+##.sponsoredItem
+##.sponsoredLabel
+##.sponsoredLeft
+##.sponsoredLink
+##.sponsoredLinks
+##.sponsoredLinks2
+##.sponsoredLinksBox
+##.sponsoredLinksGadget
+##.sponsoredLinksHead
+##.sponsoredLinksHeader
+##.sponsoredListing
+##.sponsoredName
+##.sponsoredProduct
+##.sponsoredResults
+##.sponsoredSearch
+##.sponsoredShowcasePanel
+##.sponsoredSideInner
+##.sponsoredStats
+##.sponsoredTop
+##.sponsored_ad
+##.sponsored_ads
+##.sponsored_bar_text
+##.sponsored_box
+##.sponsored_box_search
+##.sponsored_by
+##.sponsored_content
+##.sponsored_glinks
+##.sponsored_link
+##.sponsored_links
+##.sponsored_links2
+##.sponsored_links_box
+##.sponsored_links_container
+##.sponsored_links_section
+##.sponsored_post
+##.sponsored_result
+##.sponsored_results
+##.sponsored_sidepanel
+##.sponsored_ss
+##.sponsored_text
+##.sponsored_title
+##.sponsored_well
+##.sponsoredby
+##.sponsoredibbox
+##.sponsoredlink
+##.sponsoredlinkHed
+##.sponsoredlinks
+##.sponsoredlinks-article
+##.sponsoredlinkscontainer
+##.sponsoredresults
+##.sponsoredtabl
+##.sponsorheader
+##.sponsoring_link
+##.sponsoringbanner
+##.sponsorlink
+##.sponsorlink2
+##.sponsormsg
+##.sponsors-advertisment
+##.sponsors-box
+##.sponsors-footer
+##.sponsors-module
+##.sponsors-widget
+##.sponsorsBanners
+##.sponsors_300x250
+##.sponsors__container
+##.sponsors__wide
+##.sponsors_box_container
+##.sponsors_fieldset
+##.sponsors_links
+##.sponsors_spacer
+##.sponsorsbanner
+##.sponsorsbig
+##.sponsorship-banner-bottom
+##.sponsorship-box
+##.sponsorship-chrome
+##.sponsorship-container
+##.sponsorship-leaderboard
+##.sponsorshipContainer
+##.sponsorship_ad
+##.sponsorshipbox
+##.sponsorwrapper
+##.sponstitle
+##.sponstop
+##.spot-ad
+##.spotlight-ad
+##.spotlight-ad-left
+##.spotlightAd
+##.spt-footer-ad
+##.sqAd2
+##.sq_ad
+##.sqrd-ad-manager
+##.square-ad
+##.square-ad--latest-video
+##.square-ad--neg-margin
+##.square-ad-1
+##.square-ad-container
+##.square-ad-pane
+##.square-ads
+##.square-advt
+##.square-adwrap
+##.square-sidebar-ad
+##.square-sponsorship
+##.squareAd
+##.squareAdWrap
+##.squareAdd
+##.squareAddtwo
+##.squareAds
+##.square_ad
+##.squaread
+##.squaread-container
+##.squareadMain
+##.squareads
+##.squared_ad
+##.squirrel_widget
+##.sr-adsense
+##.sr-advert
+##.sraAdvert
+##.srp-sidebar-ads
+##.ssp-advert
+##.standalonead
+##.standard-ad-container
+##.standard_ad_slot
+##.static-ad
+##.staticAd
+##.static_mpu_wrap
+##.staticad
+##.sterra-ad
+##.stick-ad-container
+##.stickad
+##.sticky-ad
+##.sticky-ad-bottom
+##.sticky-ad-container
+##.sticky-ad-footer
+##.sticky-ad-header
+##.sticky-ad-slot--homepage--wrapper
+##.sticky-ad-unit-default
+##.sticky-ad-wrapper
+##.sticky-ads
+##.sticky-ads-container
+##.sticky-ads-content
+##.sticky-adsense
+##.sticky-advert-widget
+##.sticky-bottom-ad
+##.sticky-footer-ad
+##.sticky-footer-ad-container
+##.sticky-navbar-ad-container
+##.sticky-rail-ad-container
+##.sticky-side-ad
+##.sticky-sidebar-ad
+##.sticky-top-ad-wrap
+##.stickyAd
+##.stickyAdWrapper
+##.stickyAdsGroup
+##.stickyContainerMpu
+##.stickyMultiAd-processed
+##.stickyRailAd
+##.sticky_ad_sidebar
+##.sticky_ad_wrapper
+##.sticky_ads
+##.stickyad
+##.stickyads
+##.stickyadv
+##.stky-ad-footer
+##.stm-ad-player
+##.stmAdHeightWidget
+##.stock_ad
+##.stocks-ad-tag
+##.store-ads
+##.story-ad
+##.story-ad-container
+##.story-ad-right
+##.story-header-ad
+##.story-inline-advert
+##.storyAd
+##.storyAdvert
+##.story__top__ad
+##.story_ad_div
+##.story_body_advert
+##.storyad
+##.storyad300
+##.storyadHolderAfterLoad
+##.stpro_ads
+##.str-top-ad
+##.strack_bnr
+##.strawberry-ads
+##.strawberry-ads__pretty-container
+##.stream-ad
+##.streamAd
+##.strip-ad
+##.stripad
+##.sub-ad
+##.subAdBannerArea
+##.subAdBannerHeader
+##.subNavAd
+##.subad
+##.subheader_adsense
+##.submenu_ad
+##.subnav-ad-layout
+##.subnav-ad-wrapper
+##.subscribeAd
+##.subscriber-ad
+##.subscribox-ad
+##.sudoku-ad
+##.sugarad
+##.suggAd
+##.super-ad
+##.super-section__ads-wrapper
+##.super-section__header-ad-slot-wrapper
+##.superbanner-adcontent
+##.support_ad
+##.suti-advertising-dfp-banner
+##.swiper_advs
+##.tabAd
+##.tabAds
+##.tab_ad
+##.tab_ad_area
+##.table-ad
+##.tableAd1
+##.tablet-ad
+##.tadm_ad_unit
+##.tag-hide_inline_content_ads
+##.takeover-ad
+##.tallAdvert
+##.tallad
+##.tbboxad
+##.tc-adbanner
+##.tc_ad
+##.tc_ad_unit
+##.tcf-ad
+##.td-a-ad
+##.td-a-rec-id-custom_ad_1
+##.td-a-rec-id-custom_ad_2
+##.td-a-rec-id-custom_ad_3
+##.td-a-rec-id-custom_ad_4
+##.td-a-rec-id-custom_ad_5
+##.td-ad
+##.td-ad-m
+##.td-ad-p
+##.td-ad-tp
+##.td-adspot-title
+##.td-sponsor-title
+##.tdAdHeader
+##.td_ad
+##.td_footer_ads
+##.td_left_widget_ad
+##.td_leftads
+##.td_reklama_bottom
+##.td_reklama_top
+##.td_spotlight_ads
+##.teaser--advertorial
+##.teaser-ad
+##.teaser-advertisement
+##.teaser-sponsor
+##.teaserAd
+##.teaserAdContainer
+##.teaserAdHeadline
+##.teaser_ad
+##.templates_ad_placement
+##.test-adsense
+##.testAd-holder
+##.text-ad-sitewide
+##.text-ad-top
+##.text-advertisement
+##.text-panel-ad
+##.text-sponsor
+##.textAd3
+##.textAdBlock
+##.textAdBox
+##.textAds
+##.textLinkAd
+##.textSponsor
+##.text_ad_title
+##.text_ad_website
+##.text_ads_2
+##.text_ads_wrapper
+##.text_adv
+##.textad
+##.textadContainer
+##.textadbox
+##.textadlink
+##.textadscontainer
+##.textadsds
+##.textadsfoot
+##.textadtext
+##.textlinkads
+##.th-ad
+##.thb_ad_before_header
+##.thb_ad_header
+##.theAdvert
+##.theads
+##.theleftad
+##.themonic-ad1
+##.themonic-ad2
+##.themonic-ad3
+##.third-party-ad
+##.thumb-ads
+##.thumb_ad
+##.thumbnailad
+##.thumbs-adv
+##.thumbs-adv-holder
+##.tile--ad
+##.tile-ad
+##.tile-ad-container
+##.tile-advert
+##.tileAdContainer
+##.tileAdWrap
+##.tileAds
+##.tile_AdBanner
+##.tile_ad
+##.tile_ad_container
+##.tips_advertisement
+##.title-ad
+##.tl-ad-container
+##.tmiads
+##.tmo-ad
+##.tmo-ad-ezoic
+##.tncls_ad
+##.tncls_ad_250
+##.tncls_ad_300
+##.tnt-ads
+##.tnt-ads-container
+##.tnt-dmp-reactive
+##.tnw-ad
+##.toaster-ad
+##.toolkit-ad-shell
+##.top-300-ad
+##.top-ad
+##.top-ad-728
+##.top-ad-970x90
+##.top-ad-anchor
+##.top-ad-area
+##.top-ad-banner-wrapper
+##.top-ad-bloc
+##.top-ad-block
+##.top-ad-center
+##.top-ad-container
+##.top-ad-content
+##.top-ad-deck
+##.top-ad-desktop
+##.top-ad-div
+##.top-ad-horizontal
+##.top-ad-inside
+##.top-ad-module
+##.top-ad-recirc
+##.top-ad-right
+##.top-ad-sidebar
+##.top-ad-slot
+##.top-ad-space
+##.top-ad-sticky
+##.top-ad-unit
+##.top-ad-wrap
+##.top-ad-wrapper
+##.top-ad-zone
+##.top-ad1
+##.top-ad__sticky-wrapper
+##.top-adbox
+##.top-ads
+##.top-ads-amp
+##.top-ads-block
+##.top-ads-bottom-bar
+##.top-ads-container
+##.top-ads-mobile
+##.top-ads-wrapper
+##.top-adsense
+##.top-adsense-banner
+##.top-adspace
+##.top-adv
+##.top-adv-container
+##.top-adverbox
+##.top-advert
+##.top-advertisement
+##.top-affiliate
+##.top-banner-468
+##.top-banner-ad
+##.top-banner-ad-container
+##.top-banner-ad-wrapper
+##.top-banner-add
+##.top-banner-ads
+##.top-banner-advert
+##.top-bar-ad-related
+##.top-box-right-ad
+##.top-content-adplace
+##.top-fixed-ad
+##.top-half-page-ad
+##.top-header-ad
+##.top-header-ad1
+##.top-horiz-ad
+##.top-horizontal-ad
+##.top-item-ad
+##.top-leaderboard-ad
+##.top-left-ad
+##.top-menu-ads
+##.top-post-ad
+##.top-post-ads
+##.top-right-ad
+##.top-side-advertisement
+##.top-sidebar-ad
+##.top-sidebar-adbox
+##.top-site-ad
+##.top-sponsored-header
+##.top-story-ad
+##.top-topics__ad
+##.top-wide-ad-container
+##.top.ad
+##.top250Ad
+##.top300ad
+##.topAD
+##.topAd
+##.topAd728x90
+##.topAdBanner
+##.topAdBar
+##.topAdBlock
+##.topAdCenter
+##.topAdContainer
+##.topAdIn
+##.topAdLeft
+##.topAdRight
+##.topAdSpacer
+##.topAdWrap
+##.topAdWrapper
+##.topAdd
+##.topAds
+##.topAdsWrappper
+##.topAdvBox
+##.topAdvert
+##.topAdvertisement
+##.topAdvertistemt
+##.topAdverts
+##.topAlertAds
+##.topArtAd
+##.topArticleAds
+##.topBannerAd
+##.topBarAd
+##.topBoxAdvertisement
+##.topGoogleAd
+##.topLeaderboardAd
+##.topRailAdSlot
+##.topRightAd
+##.top_Ad
+##.top__ad
+##.top_ad
+##.top_ad1
+##.top_ad_728
+##.top_ad_728_90
+##.top_ad_banner
+##.top_ad_big
+##.top_ad_disclaimer
+##.top_ad_div
+##.top_ad_holder
+##.top_ad_inner
+##.top_ad_label
+##.top_ad_list
+##.top_ad_long
+##.top_ad_post
+##.top_ad_responsive
+##.top_ad_seperate
+##.top_ad_short
+##.top_ad_wrap
+##.top_ad_wrapper
+##.top_adbox1
+##.top_adbox2
+##.top_adh
+##.top_ads
+##.top_ads_container
+##.top_adsense
+##.top_adspace
+##.top_adv
+##.top_adv_content
+##.top_advert
+##.top_advertisement
+##.top_advertising_lb
+##.top_advertizing_cnt
+##.top_bar_ad
+##.top_big_ads
+##.top_container_ad
+##.top_corner_ad
+##.top_head_ads
+##.top_header_ad
+##.top_header_ad_inner
+##.top_right_ad
+##.top_rightad
+##.top_side_adv
+##.top_sponsor
+##.topad-area
+##.topad-bar
+##.topad-bg
+##.topad1
+##.topad2
+##.topadbar
+##.topadblock
+##.topadbox
+##.topadcont
+##.topadrow
+##.topads
+##.topads-spacer
+##.topadsbx
+##.topadsection
+##.topadspace
+##.topadspot
+##.topadtara
+##.topadtxt
+##.topadtxt120
+##.topadtxt300
+##.topadtxt428
+##.topadtxt728
+##.topadvert
+##.topadvertisementsegment
+##.topbannerAd
+##.topbar-ad-parent
+##.topbar-ad-unit
+##.topboardads
+##.topcharts_ad_720
+##.topfootad
+##.topicDetailsAdRight
+##.topic_inad
+##.topnavSponsor
+##.topratedBoxAD
+##.topright_ad
+##.topside_ad
+##.topsidebarad
+##.toptenAdBoxA
+##.tourFeatureAd
+##.tout-ad
+##.tout-ad-embed
+##.tower-ad
+##.tower-ad-abs
+##.tower-ad-b
+##.tower-ad-wrapper
+##.tower-ads-container
+##.towerAd
+##.towerAdLeft
+##.towerAds
+##.tower_ad
+##.tower_ad_desktop
+##.tower_ad_disclaimer
+##.towerad
+##.tp-ad-label
+##.tp_ads
+##.tpd-banner-ad-container
+##.tpd-banner-desktop
+##.tpd-box-ad-d
+##.trc-content-sponsored
+##.trc-content-sponsoredUB
+##.trend-card-advert
+##.trend-card-advert__title
+##.tsm-ad
+##.tt_ads
+##.ttb_adv_bg
+##.tw-adv-gpt
+##.txt_adbyeclick
+##.txt_ads
+##.txtad_area
+##.txtadbox
+##.txtadvertise
+##.type-ad
+##.u-ads
+##.u-lazy-ad-wrapper
+##.udn-ads
+##.ue-c-ad
+##.ult_vp_videoPlayerAD
+##.under-header-ad
+##.under-player-ad
+##.under-player-ads
+##.under_ads
+##.underplayerAd
+##.underplayer__ad
+##.uniAdBox
+##.uniAds
+##.unionAd
+##.unit-ad
+##.unspoken-adplace
+##.upper-ad-box
+##.upper-ad-space
+##.upper_ad
+##.upx-ad-placeholder
+##.us_ad
+##.uvs-ad-full-width
+##.v-ad
+##.vadvert
+##.variable-ad
+##.variableHeightAd
+##.vce-ad-below-header
+##.vce-ad-container
+##.vce-header-ads
+##.vce_adsense_expand
+##.vce_adsense_widget
+##.vce_adsense_wrapper
+##.vdvwad
+##.vert-ad
+##.vert-ads
+##.vertad
+##.vertical-ad
+##.vertical-ads
+##.vertical-adsense
+##.vertical-trending-ads
+##.verticalAd
+##.verticalAdText
+##.vertical_ad
+##.vertical_ads
+##.verticalad
+##.vf-ad-comments
+##.vf-promo-gtag
+##.vi-sticky-ad
+##.video-ad
+##.video-ad-bottom
+##.video-ad-container
+##.video-ad-content
+##.video-ads
+##.video-ads-container
+##.video-ads-grid
+##.video-ads-wrapper
+##.video-adv
+##.video-advert
+##.video-archive-ad
+##.video-boxad
+##.video-page__adv
+##.video-right-ad
+##.video-right-ads
+##.video-side__adv_title
+##.videoAd-wrapper
+##.videoAd300
+##.videoBoxAd
+##.videoOverAd300
+##.videoOverAdSmall
+##.videoPauseAd
+##.videoSideAds
+##.video_ad
+##.video_ads
+##.videoad
+##.videoad-base
+##.videoad2
+##.videos-ad
+##.videos-ad-wrap
+##.view-Advertisment
+##.view-ad
+##.view-ads
+##.view-advertisement
+##.view-advertisements
+##.view-advertorials
+##.view-adverts
+##.view-article-inner-ads
+##.view-homepage-center-ads
+##.view-id-Advertisment
+##.view-id-ads
+##.view-id-advertisement
+##.view-image-ads
+##.view-site-ads
+##.view-video-advertisements
+##.view_ad
+##.view_rig_ad
+##.views-field-field-ad
+##.views-field-field-html-ad
+##.visibleAd
+##.vjs-ad-iframe
+##.vjs-ad-overlay
+##.vjs-ima3-ad-container
+##.vjs-marker-ad
+##.vjs-overlay.size-300x250
+##.vl-ad-item
+##.vl-advertisment
+##.vl-header-ads
+##.vlog-ad
+##.vm-ad-horizontal
+##.vmag_medium_ad
+##.vmp-ad
+##.vod_ad
+##.vodl-ad__bigsizebanner
+##.vpnad
+##.vs-advert-300x250
+##.vsw-ads
+##.vswAdContainer
+##.vt_h1_ad
+##.vuukle-ad-block
+##.vuukle-ads
+##.vw-header__ads
+##.w-ad-box
+##.w-content--ad
+##.wAdvert
+##.w_AdExternal
+##.w_ad
+##.wa_adsbottom
+##.waf-ad
+##.wahAd
+##.wahAdRight
+##.waldo-display-unit
+##.waldo-placeholder
+##.waldo-placeholder-bottom
+##.wall-ads-control
+##.wall-ads-left
+##.wall-ads-right
+##.wallAd
+##.wall_ad
+##.wall_ad_hd
+##.wallad
+##.wallpaper-ad-top
+##.wc-adblock-wrap
+##.wcAd
+##.wcfAdLocation
+##.wd-adunit
+##.wdca_ad_item
+##.wdca_custom_ad
+##.wdp_ad
+##.wdp_adDiv
+##.wdt_ads
+##.weather-ad-wrapper
+##.weather_ad
+##.weatherad
+##.web_ads
+##.webad-cnt
+##.webad_link
+##.webads336x280
+##.webadvert-container
+##.webpart-wrap-advert
+##.website-ad-space
+##.well-ad
+##.werbungAd
+##.wfb-ad
+##.wg-ad-square
+##.wgAd-loaded
+##.wh-advert
+##.wh_ad
+##.wh_ad_inner
+##.when-show-ads
+##.white-ad-block
+##.wide-ad
+##.wide-ad-container
+##.wide-ad-new-layout
+##.wide-ad-outer
+##.wide-ad2015
+##.wide-ads-container
+##.wide-advert
+##.wide-footer-ad
+##.wide-header-ad
+##.wide-skyscraper-ad
+##.wideAd
+##.wideAdTable
+##.widePageAd
+##.wide_ad
+##.wide_adBox_footer
+##.wide_ad_unit
+##.wide_ad_unit_top
+##.wide_ads
+##.wide_google_ads
+##.wide_grey_ad_box
+##.wide_sponsors
+##.widead
+##.wideadbox
+##.widget--ad
+##.widget--ajdg_bnnrwidgets
+##.widget--local-ads
+##.widget-300x250ad
+##.widget-ad
+##.widget-ad-codes
+##.widget-ad-image
+##.widget-ad-script
+##.widget-ad-sky
+##.widget-ad-zone
+##.widget-ad300x250
+##.widget-adcode
+##.widget-ads
+##.widget-adsense
+##.widget-adv
+##.widget-advads-ad-widget
+##.widget-advert-970
+##.widget-advertisement
+##.widget-dfp
+##.widget-entry-ads-160
+##.widget-group-Ads
+##.widget-highlight-ads
+##.widget-sponsor
+##.widget-text-ad
+##.widget.carbonads-widget
+##.widget1-ad
+##.widget10-ad
+##.widget4-ad
+##.widget6-ad
+##.widget7-ad
+##.widgetAD
+##.widgetContentIfrWrapperAd
+##.widgetSponsors
+##.widget_300x250_advertisement
+##.widget_abn_admanager_sidestealer
+##.widget_ad
+##.widget_ad-widget
+##.widget_ad125
+##.widget_ad300
+##.widget_ad_300
+##.widget_ad_boxes_widget
+##.widget_ad_layers_ad_widget
+##.widget_ad_rotator
+##.widget_ad_widget
+##.widget_adace_ads_widget
+##.widget_admanagerwidget
+##.widget_adrotate_widgets
+##.widget_ads
+##.widget_ads_entries
+##.widget_ads_widget
+##.widget_adsblock
+##.widget_adsensem
+##.widget_adsensewidget
+##.widget_adsingle
+##.widget_adswidget1-quick-adsense
+##.widget_adswidget2-quick-adsense
+##.widget_adswidget3-quick-adsense
+##.widget_adv_location
+##.widget_adv_text
+##.widget_advads_ad_widget
+##.widget_advert
+##.widget_advert_content
+##.widget_advert_widget
+##.widget_advertisement
+##.widget_advertisements
+##.widget_advertisment
+##.widget_advwidget
+##.widget_alaya_ad
+##.widget_arvins_ad_randomizer
+##.widget_awaken_pro_medium_rectangle_ad
+##.widget_better-ads
+##.widget_bk_ads
+##.widget_com_ad_widget
+##.widget_core_ads_desk
+##.widget_cpxadvert_widgets
+##.widget_customad_widget
+##.widget_customadvertising
+##.widget_dfp
+##.widget_dfp_lb-widget
+##.widget_doubleclick_widget
+##.widget_ep_rotating_ad_widget
+##.widget_epcl_ads_fluid
+##.widget_evolve_ad_gpt_widget
+##.widget_html_snippet_ad_widget
+##.widget_ima_ads
+##.widget_ione-dart-ad
+##.widget_ipm_sidebar_ad
+##.widget_island_ad
+##.widget_joblo_complex_ad
+##.widget_long_ads_widget
+##.widget_newspack-ads-widget
+##.widget_openxwpwidget
+##.widget_plugrush_widget
+##.widget_pmc-ads-widget
+##.widget_quads_ads_widget
+##.widget_rdc_ad_widget
+##.widget_sej_sidebar_ad
+##.widget_sidebar_adrotate_tedo_single_widget
+##.widget_sidebaradwidget
+##.widget_singlead
+##.widget_sponsored_content
+##.widget_supermag_ad
+##.widget_supernews_ad
+##.widget_text_adsense
+##.widget_themoneytizer_widget
+##.widget_thesun_dfp_ad_widget
+##.widget_tt_ads_widget
+##.widget_viral_advertisement
+##.widget_wp-bannerize-widget
+##.widget_wp_ads_gpt_widget
+##.widget_wp_insert_ad_widget
+##.widget_wpex_advertisement
+##.widget_wpstealthads_widget
+##.widgetads
+##.width-ad-slug
+##.wikia-ad
+##.wio-xbanner
+##.with-background-ads
+##.withBanners__ad
+##.wnad
+##.worldplus-ad
+##.wotd-widget__ad
+##.wp-ads-target
+##.wp-block-ad-slot
+##.wp-block-tpd-block-tpd-ads
+##.wp125ad
+##.wp125ad_2
+##.wp_bannerize
+##.wp_bannerize_banner_box
+##.wp_bannerize_container
+##.wpadvert
+##.wpd-advertisement
+##.wpex-ads-widget
+##.wppaszone
+##.wpvqgr-a-d-s
+##.wpx-bannerize
+##.wpx_bannerize
+##.wpx_bannerize_banner_box
+##.wrap-ad
+##.wrap-ads
+##.wrap_boxad
+##.wrapad
+##.wrapper-ad
+##.wrapper-header-ad-slot
+##.wrapper_ad
+##.wrapper_advertisement
+##.wrapperad
+##.ww_ads_banner_wrapper
+##.xeiro-ads
+##.xmlad
+##.xpot-horizontal
+##.y-ads
+##.y-ads-wide
+##.yaAds
+##.yad-sponsored
+##.yahooAd
+##.yahooAds
+##.yahooContentMatch
+##.yahoo_ad
+##.yahoo_ads
+##.yahooad
+##.yahooads
+##.yan-sponsored
+##.zeus-ad
+##.zeusAdWrapper
+##.zeusAd__container
+##.zmgad-full-width
+##.zmgad-right-rail
+##.zone-advertisement
+##.zoneAds
+##.zox-post-ad-wrap
+##.zox-post-bot-ad
+##.zox-widget-side-ad
+##.zox_ad_widget
+##.zox_adv_widget
+##AD-SLOT
+##AD-TRIPLE-BOX
+##DFP-AD
+##[class^="adDisplay-module"]
+##[class^="amp-ad-"]
+##[class^="div-gpt-ad"]
+##[data-ad-cls]
+##[data-ad-manager-id]
+##[data-ad-module]
+##[data-ad-name]
+##[data-ad-width]
+##[data-adblockkey]
+##[data-adbridg-ad-class]
+##[data-advadstrackid]
+##[data-css-class="dfp-inarticle"]
+##[data-d-ad-id]
+##[data-desktop-ad-id]
+##[data-dynamic-ads]
+##[data-ez-name]
+##[data-freestar-ad]
+##[data-id^="div-gpt-ad"]
+##[data-m-ad-id]
+##[data-mobile-ad-id]
+##[data-name="adaptiveConstructorAd"]
+##[data-rc-widget]
+##[data-revive-zoneid]
+##[data-role="tile-ads-module"]
+##[data-template-type="nativead"]
+##[data-testid="adBanner-wrapper"]
+##[data-testid="ad_testID"]
+##[data-type="ad-vertical"]
+##[data-wpas-zoneid]
+##[href="//sexcams.plus/"]
+##[href="https://jdrucker.com/gold"] > img
+##[href="https://masstortfinancing.com"] img
+##[href="https://ourgoldguy.com/contact/"] img
+##[href="https://www.masstortfinancing.com/"] > img
+##[href^="http://clicks.totemcash.com/"]
+##[href^="http://globsads.com/"]
+##[href^="http://go.cm-trk2.com/"]
+##[href^="http://homemoviestube.com/"]
+##[href^="http://join.michelle-austin.com/"]
+##[href^="http://join.rodneymoore.com/"]
+##[href^="http://join.shemale.xxx/"]
+##[href^="http://join.shemalepornstar.com/"]
+##[href^="http://join.shemalesfromhell.com/"]
+##[href^="http://join.trannies-fuck.com/"]
+##[href^="http://misslinkvocation.com/"]
+##[href^="http://mypillow.com/"] > img
+##[href^="http://residenceseeingstanding.com/"]
+##[href^="http://trafficare.net/"]
+##[href^="http://www.fleshlightgirls.com/"]
+##[href^="http://www.mypillow.com/"] > img
+##[href^="https://ad.admitad.com/"]
+##[href^="https://affect3dnetwork.com/track/"]
+##[href^="https://affiliate.fastcomet.com/"] > img
+##[href^="https://antiagingbed.com/discount/"] > img
+##[href^="https://awbbjmp.com/"]
+##[href^="https://charmingdatings.life/"]
+##[href^="https://cipledecline.buzz/"]
+##[href^="https://click2cvs.com/"]
+##[href^="https://cpa.10kfreesilver.com/"]
+##[href^="https://detachedbates.com/"]
+##[href^="https://engine.gettopple.com/"]
+##[href^="https://glersakr.com/"]
+##[href^="https://gmxvmvptfm.com/"]
+##[href^="https://go.4rabettraff.com/"]
+##[href^="https://go.affiliatexe.com/"]
+##[href^="https://go.astutelinks.com/"]
+##[href^="https://go.xlrdr.com"]
+##[href^="https://goldcometals.com/clk.trk"]
+##[href^="https://goldforyourfuture.com/clk.trk"] img
+##[href^="https://ilovemyfreedoms.com/landing-"]
+##[href^="https://istlnkcl.com/"]
+##[href^="https://join.girlsoutwest.com/"]
+##[href^="https://join.playboyplus.com/track/"]
+##[href^="https://join3.bannedsextapes.com"]
+##[href^="https://kingered-banctours.com/"]
+##[href^="https://mylead.global/stl/"] > img
+##[href^="https://mypatriotsupply.com/"] > img
+##[href^="https://mypillow.com/"] > img
+##[href^="https://mystore.com/"] > img
+##[href^="https://noqreport.com/"] > img
+##[href^="https://optimizedelite.com/"] > img
+##[href^="https://r.kraken.com/"]
+##[href^="https://rapidgator.net/article/premium/ref/"]
+##[href^="https://routewebtk.com/"]
+##[href^="https://safer-redirection.com"]
+##[href^="https://secure.bmtmicro.com/servlets/"]
+##[href^="https://shiftnetwork.infusionsoft.com/go/"] > img
+##[href^="https://shrugartisticelder.com"]
+##[href^="https://stvkr.com/"]
+##[href^="https://totlnkcl.com/"]
+##[href^="https://track.aftrk1.com/"]
+##[href^="https://track.fiverr.com/visit/"] > img
+##[href^="https://trackfin.asia/"]
+##[href^="https://traffserve.com/"]
+##[href^="https://turtlebids.irauctions.com/"] img
+##[href^="https://v.investologic.co.uk/"]
+##[href^="https://wct.link/"]
+##[href^="https://www.avantlink.com/click.php"] img
+##[href^="https://www.brighteonstore.com/products/"] img
+##[href^="https://www.cloudways.com/en/?id"]
+##[href^="https://www.herbanomic.com/"] > img
+##[href^="https://www.hostg.xyz/"] > img
+##[href^="https://www.mypatriotsupply.com/"] > img
+##[href^="https://www.mypillow.com/"] > img
+##[href^="https://www.reimageplus.com/"]
+##[href^="https://www.restoro.com/"]
+##[href^="https://www.targetingpartner.com/"]
+##[href^="https://zone.gotrackier.com/"]
+##[href^="https://zstacklife.com/"] img
+##[id^="ad-wrap-"]
+##[id^="ad_sky"]
+##[id^="ad_slider"]
+##[id^="div-gpt-ad"]
+##[id^="google_ads_iframe"]
+##[id^="section-ad-banner"]
+##[name^="google_ads_iframe"]
+##[onclick^="location.href='http://www.reimageplus.com"]
+##a-ad
+##a[href*=".engine.adglare.net/"]
+##a[href*=".foxqck.com/"]
+##a[href*=".g2afse.com/"]
+##a[href*="//jjgirls.com/sex/Chaturbate"]
+##a[href*="//lkstrck2.com/"]
+##a[href^="//a.bestcontentfare.top/"]
+##a[href^="//ardslediana.com/"]
+##a[href^="//go.eabids.com/"]
+##a[href^="//pubads.g.doubleclick.net/"]
+##a[href^="//s.st1net.com/splash.php"]
+##a[href^="//whulsaux.com/"]
+##a[href^="//zunsoach.com/"]
+##a[href^="http://ad.doubleclick.net/"]
+##a[href^="http://adultfriendfinder.com/go/"]
+##a[href^="http://adultgames.xxx/"]
+##a[href^="http://affiliate.glbtracker.com/"]
+##a[href^="http://affiliates.thrixxx.com/"]
+##a[href^="http://bc.vc/?r="]
+##a[href^="http://bodelen.com/"]
+##a[href^="http://bongacams.com/track?"]
+##a[href^="http://cam4com.go2cloud.org/aff_c?"]
+##a[href^="http://click.payserve.com/"]
+##a[href^="http://com-1.pro/"]
+##a[href^="http://d2.zedo.com/"]
+##a[href^="http://deskfrontfreely.com/"]
+##a[href^="http://dragnag.com/"]
+##a[href^="http://eighteenderived.com/"]
+##a[href^="http://go.xtbaffiliates.com/"]
+##a[href^="http://googleads.g.doubleclick.net/pcs/click"]
+##a[href^="http://guestblackmail.com/"]
+##a[href^="http://li.blogtrottr.com/click?"]
+##a[href^="http://m.hue2m.com/"]
+##a[href^="http://naggingirresponsible.com/"]
+##a[href^="http://partners.etoro.com/"]
+##a[href^="http://premonitioninventdisagree.com/"]
+##a[href^="http://revolvemockerycopper.com/"]
+##a[href^="http://static.fleshlight.com/images/banners/"]
+##a[href^="http://tc.tradetracker.net/"] > img
+##a[href^="http://tour.mrskin.com/"]
+##a[href^="http://traffic.tc-clicks.com/"]
+##a[href^="http://trk.globwo.online/"]
+##a[href^="http://wct.link/"]
+##a[href^="http://www.adultdvdempire.com/?partner_id="][href*="&utm_"]
+##a[href^="http://www.adultempire.com/unlimited/promo?"][href*="&partner_id="]
+##a[href^="http://www.friendlyduck.com/AF_"]
+##a[href^="http://www.gfrevenge.com/landing/"]
+##a[href^="http://www.h4trck.com/"]
+##a[href^="http://www.iyalc.com/"]
+##a[href^="http://www.mrskin.com/tour"]
+##a[href^="http://www.onclickmega.com/jump/next.php?"]
+##a[href^="http://www.onwebcam.com/random?t_link="]
+##a[href^="https://1betandgonow.com/"]
+##a[href^="https://STaRTgamINg.net/tienda/"]
+##a[href^="https://STaRtgAmInG.net/tienda/"]
+##a[href^="https://StarTGAminG.net/tienda/"]
+##a[href^="https://a-ads.com/"]
+##a[href^="https://a.adtng.com/"]
+##a[href^="https://a.bestcontentfood.top/"]
+##a[href^="https://a.bestcontentoperation.top/"]
+##a[href^="https://a.bestcontentweb.top/"]
+##a[href^="https://a.medfoodhome.com/"]
+##a[href^="https://a2.adform.net/"]
+##a[href^="https://ab.advertiserurl.com/aff/"]
+##a[href^="https://ad.doubleclick.net/"]
+##a[href^="https://ad.kubiccomps.icu/"]
+##a[href^="https://ad.zanox.com/ppc/"] > img
+##a[href^="https://adclick.g.doubleclick.net/"]
+##a[href^="https://adjoincomprise.com/"]
+##a[href^="https://adnetwrk.com/"]
+##a[href^="https://ads.ad4game.com/"]
+##a[href^="https://ads.betfair.com/redirect.aspx?"]
+##a[href^="https://ads.leovegas.com/redirect.aspx?"]
+##a[href^="https://ads.planetwin365affiliate.com/redirect.aspx?"]
+##a[href^="https://adserver.adreactor.com/"]
+##a[href^="https://adsrv4k.com/"]
+##a[href^="https://adultfriendfinder.com/go/"]
+##a[href^="https://affcpatrk.com/"]
+##a[href^="https://affpa.top/"]
+##a[href^="https://agacelebir.com/"]
+##a[href^="https://ak.hauchiwu.com/"]
+##a[href^="https://ak.psaltauw.net/"]
+##a[href^="https://albionsoftwares.com/"]
+##a[href^="https://ausoafab.net/"]
+##a[href^="https://aweptjmp.com/"]
+##a[href^="https://awptjmp.com/"]
+##a[href^="https://azpresearch.club/"]
+##a[href^="https://banners.livepartners.com/"]
+##a[href^="https://batheunits.com/"]
+##a[href^="https://bc.game/"]
+##a[href^="https://black77854.com/"]
+##a[href^="https://bluedelivery.pro/"]
+##a[href^="https://bngprm.com/"]
+##a[href^="https://bngpt.com/"]
+##a[href^="https://bodelen.com/"]
+##a[href^="https://bongacams10.com/track?"]
+##a[href^="https://bongacams2.com/track?"]
+##a[href^="https://brightadnetwork.com/"]
+##a[href^="https://bs.serving-sys.com"]
+##a[href^="https://buqkrzbrucz.com/"]
+##a[href^="https://cam4com.go2cloud.org/"]
+##a[href^="https://camfapr.com/landing/click/"]
+##a[href^="https://cams.imagetwist.com/in/?track="]
+##a[href^="https://chaturbate.com/in/?tour="]
+##a[href^="https://chaturbate.com/in/?track="]
+##a[href^="https://chaturbate.jjgirls.com/?track="]
+##a[href^="https://claring-loccelkin.com/"]
+##a[href^="https://click.candyoffers.com/"]
+##a[href^="https://click.dtiserv2.com/"]
+##a[href^="https://click.hoolig.app/"]
+##a[href^="https://click.linksynergy.com/fs-bin/"] > img
+##a[href^="https://clickadilla.com/"]
+##a[href^="https://clicks.pipaffiliates.com/"]
+##a[href^="https://clixtrac.com/"]
+##a[href^="https://clk.wrenchsound.store/"]
+##a[href^="https://consali.com/"]
+##a[href^="https://convertmb.com/"]
+##a[href^="https://cpmspace.com/"]
+##a[href^="https://ctosrd.com/"]
+##a[href^="https://datingoffers30.info/"]
+##a[href^="https://dl-protect.net/"]
+##a[href^="https://engine.blueistheneworanges.com/"]
+##a[href^="https://engine.phn.doublepimp.com/"]
+##a[href^="https://engine.trackingdesks.com/"]
+##a[href^="https://fc.lc/ref/"]
+##a[href^="https://femglobal.app/"]
+##a[href^="https://financeads.net/tc.php?"]
+##a[href^="https://fleshlight.sjv.io/"]
+##a[href^="https://flirtandsweets.life/"]
+##a[href^="https://fourwhenstatistics.com/"]
+##a[href^="https://frameworkdeserve.com/"]
+##a[href^="https://funkydaters.com/"]
+##a[href^="https://geniusdexchange.com/"]
+##a[href^="https://ggbetpromo.com/"]
+##a[href^="https://go.247traffic.com/"]
+##a[href^="https://go.admjmp.com/"]
+##a[href^="https://go.bbrdbr.com/"]
+##a[href^="https://go.cmtaffiliates.com/"]
+##a[href^="https://go.currency.com/"]
+##a[href^="https://go.dmzjmp.com"]
+##a[href^="https://go.etoro.com/"] > img
+##a[href^="https://go.gkrtmc.com/"]
+##a[href^="https://go.gldrdr.com/"]
+##a[href^="https://go.goaserv.com/"]
+##a[href^="https://go.goasrv.com/"]
+##a[href^="https://go.hpyjmp.com"]
+##a[href^="https://go.hpyrdr.com/"]
+##a[href^="https://go.julrdr.com/"]
+##a[href^="https://go.markets.com/visit/?bta="]
+##a[href^="https://go.skinstrip.net"][href*="?campaignId="]
+##a[href^="https://go.strpjmp.com/"]
+##a[href^="https://go.tmrjmp.com"]
+##a[href^="https://go.trackitalltheway.com/"]
+##a[href^="https://go.xlirdr.com"]
+##a[href^="https://go.xlivrdr.com"]
+##a[href^="https://go.xlviiirdr.com"]
+##a[href^="https://go.xlviirdr.com"]
+##a[href^="https://go.xlvirdr.com"]
+##a[href^="https://go.xtbaffiliates.com/"]
+##a[href^="https://go.xxxiijmp.com"]
+##a[href^="https://go.xxxijmp.com"]
+##a[href^="https://go.xxxjmp.com"]
+##a[href^="https://go.zybrdr.com"]
+##a[href^="https://googleads.g.doubleclick.net/pcs/click"]
+##a[href^="https://hot-growngames.life/"]
+##a[href^="https://hotplaystime.life/"]
+##a[href^="https://iactrivago.ampxdirect.com/"]
+##a[href^="https://incisivetrk.cvtr.io/click?"]
+##a[href^="https://intenseaffiliates.com/redirect/"]
+##a[href^="https://iqbroker.com/"][href*="?aff="]
+##a[href^="https://ismlks.com/"]
+##a[href^="https://italarizege.xyz/"]
+##a[href^="https://itubego.com/video-downloader/?affid="]
+##a[href^="https://jaxofuna.com/"]
+##a[href^="https://join.dreamsexworld.com/"]
+##a[href^="https://join.sexworld3d.com/track/"]
+##a[href^="https://join.virtuallust3d.com/"]
+##a[href^="https://join.virtualtaboo.com/track/"]
+##a[href^="https://juicyads.in/"]
+##a[href^="https://k2s.cc/pr/"]
+##a[href^="https://kiksajex.com/"]
+##a[href^="https://l.hyenadata.com/"]
+##a[href^="https://land.brazzersnetwork.com/landing/"]
+##a[href^="https://landing.brazzersnetwork.com/"]
+##a[href^="https://landing1.brazzersnetwork.com"]
+##a[href^="https://lead1.pl/"]
+##a[href^="https://leg.xyz/?track="]
+##a[href^="https://lijavaxa.com/"]
+##a[href^="https://lnkxt.bannerator.com/"]
+##a[href^="https://lobimax.com/"]
+##a[href^="https://loboclick.com"]
+##a[href^="https://losingoldfry.com/"]
+##a[href^="https://m.do.co/c/"] > img
+##a[href^="https://maymooth-stopic.com/"]
+##a[href^="https://mediaserver.entainpartners.com/renderBanner.do?"]
+##a[href^="https://mediaserver.gvcaffiliates.com/renderBanner.do?"]
+##a[href^="https://mercurybest.com/"]
+##a[href^="https://misspkl.com/"]
+##a[href^="https://mityneedn.com/"]
+##a[href^="https://mmwebhandler.aff-online.com/"]
+##a[href^="https://natour.naughtyamerica.com/track/"]
+##a[href^="https://ndt5.net/"]
+##a[href^="https://newbinotracs.com/"]
+##a[href^="https://oackoubs.com/"]
+##a[href^="https://ovb.im/"]
+##a[href^="https://pb-front.com/"]
+##a[href^="https://pb-imc.com/"]
+##a[href^="https://pb-track.com/"]
+##a[href^="https://porngames.adult/?SID="]
+##a[href^="https://porntubemate.com/"]
+##a[href^="https://prf.hn/click/"][href*="/adref:"] > img
+##a[href^="https://prf.hn/click/"][href*="/camref:"] > img
+##a[href^="https://prf.hn/click/"][href*="/creativeref:"] > img
+##a[href^="https://promo-bc.com/"]
+##a[href^="https://pubads.g.doubleclick.net/"]
+##a[href^="https://rdwmct.com/"]
+##a[href^="https://refpa.top/"]
+##a[href^="https://refpa4903566.top/"]
+##a[href^="https://refpazkjixes.top/"]
+##a[href^="https://reinstandpointdumbest.com/"]
+##a[href^="https://s.optzsrv.com/"]
+##a[href^="https://s.zlinkb.com/"]
+##a[href^="https://s.zlinkc.com/"]
+##a[href^="https://s.zlinkd.com/"]
+##a[href^="https://sTARtgamIng.net/tienda/"]
+##a[href^="https://sTaRTgamInG.net/tienda/"]
+##a[href^="https://sTaRtGAMing.net/tienda/"]
+##a[href^="https://sTartGAMiNG.net/tienda/"]
+##a[href^="https://sTartGAMinG.net/tienda/"]
+##a[href^="https://sTartgAminG.net/tienda/"]
+##a[href^="https://safesurfingtoday.com/"][href*="?skip="]
+##a[href^="https://serve.awmdelivery.com/"]
+##a[href^="https://slkmis.com/"]
+##a[href^="https://spo-play.live/"]
+##a[href^="https://spygasm.com/track?"]
+##a[href^="https://staRTgamIng.net/tienda/"]
+##a[href^="https://staRTgaming.net/tienda/"]
+##a[href^="https://startgAming.net/tienda/"]
+##a[href^="https://startgamIng.Net/tienda/"]
+##a[href^="https://static.fleshlight.com/images/banners/"]
+##a[href^="https://streamate.com/landing/click/"]
+##a[href^="https://syndication.dynsrvtbg.com/"]
+##a[href^="https://syndication.exoclick.com/"]
+##a[href^="https://syndication.optimizesrv.com/"]
+##a[href^="https://t.acam.link/"]
+##a[href^="https://t.adating.link/"]
+##a[href^="https://t.ajrkm1.com/"]
+##a[href^="https://t.ajump1.com/"]
+##a[href^="https://t.aslnk.link/"]
+##a[href^="https://t.grtyi.com/"]
+##a[href^="https://t.hrtye.com/"]
+##a[href^="https://taghaugh.com/"]
+##a[href^="https://tc.tradetracker.net/"] > img
+##a[href^="https://thaudray.com/"]
+##a[href^="https://thechleads.pro/"]
+##a[href^="https://thefacux.com/"]
+##a[href^="https://tm-offers.gamingadult.com/"]
+##a[href^="https://tour.mrskin.com/"]
+##a[href^="https://track.adform.net/"]
+##a[href^="https://track.afcpatrk.com/"]
+##a[href^="https://track.totalav.com/"]
+##a[href^="https://track.wg-aff.com"]
+##a[href^="https://tracker.loropartners.com/"]
+##a[href^="https://tracking.avapartner.com/"]
+##a[href^="https://traffdaq.com/"]
+##a[href^="https://trk.nfl-online-streams.club/"]
+##a[href^="https://trk.softonixs.xyz/"]
+##a[href^="https://trk.sportsflix4k.club/"]
+##a[href^="https://tsartech.g2afse.com/"]
+##a[href^="https://tweakostensibleinstaller.com/"]
+##a[href^="https://twinrdsrv.com/"]
+##a[href^="https://twinrdsyn.com/"]
+##a[href^="https://u.expresstech.io/"]
+##a[href^="https://visit-website.com/"]
+##a[href^="https://webroutetrk.com/"]
+##a[href^="https://wirewar.website/"]
+##a[href^="https://wittered-mainging.com/"]
+##a[href^="https://www.adskeeper.com"]
+##a[href^="https://www.adultempire.com/"][href*="?partner_id="]
+##a[href^="https://www.adxsrve.com/"]
+##a[href^="https://www.bang.com/?aff="]
+##a[href^="https://www.bet365.com/"][href*="affiliate="]
+##a[href^="https://www.brazzersnetwork.com/landing/"]
+##a[href^="https://www.dql2clk.com/"]
+##a[href^="https://www.endorico.com/Smartlink/"]
+##a[href^="https://www.financeads.net/tc.php?"]
+##a[href^="https://www.geekbuying.com/dynamic-ads/"]
+##a[href^="https://www.googleadservices.com/pagead/aclk?"]
+##a[href^="https://www.highcpmrevenuenetwork.com/"]
+##a[href^="https://www.highperformancecpmgate.com/"]
+##a[href^="https://www.infowarsstore.com/"] > img
+##a[href^="https://www.kingsoffetish.com/tour?partner_id="]
+##a[href^="https://www.liquidfire.mobi/"]
+##a[href^="https://www.mrskin.com/account/"]
+##a[href^="https://www.mrskin.com/tour"]
+##a[href^="https://www.mypornstarcams.com/landing/click/"]
+##a[href^="https://www.nudeidols.com/cams/"]
+##a[href^="https://www.nutaku.net/signup/landing/"]
+##a[href^="https://www.onlineusershielder.com/"]
+##a[href^="https://www.sheetmusicplus.com/"][href*="?aff_id="]
+##a[href^="https://www.sheetmusicplus.com/?aff_id="]
+##a[href^="https://www.sugarinstant.com/?partner_id="]
+##a[href^="https://www.zubivu.com/"]
+##a[href^="https://yogacomplyfuel.com/"]
+##a[href^="https://yourperfectdating.life/"]
+##a[style="width:100%;height:100%;z-index:10000000000000000;position:absolute;top:0;left:0;"]
+##ad-shield-ads
+##ad-slot
+##app-ad
+##app-advertisement
+##app-large-ad
+##ark-top-ad
+##article.ad
+##aside[id^="adrotate_widgets-"]
+##atf-ad-slot
+##bottomadblock
+##display-ads
+##div[aria-label="Ads"]
+##div[class^="Adstyled__AdWrapper-"]
+##div[class^="Display_displayAd"]
+##div[class^="kiwi-ad-wrapper"]
+##div[class^="native-ad-"]
+##div[data-ad-placeholder]
+##div[data-ad-targeting]
+##div[data-ad-wrapper]
+##div[data-adname]
+##div[data-adunit-path]
+##div[data-adunit]
+##div[data-adzone]
+##div[data-alias="300x250 Ad 1"]
+##div[data-alias="300x250 Ad 2"]
+##div[data-content="Advertisement"]
+##div[data-contentexchange-widget]
+##div[data-dfp-id]
+##div[data-google-query-id]
+##div[data-id-advertdfpconf]
+##div[data-insertion]
+##div[data-mini-ad-unit]
+##div[data-native-ad]
+##div[data-native_ad]
+##div[id^="_vdo_ads_player_ai_"]
+##div[id^="ad-div-"]
+##div[id^="ad-position-"]
+##div[id^="ad_position_"]
+##div[id^="adngin-"]
+##div[id^="adrotate_widgets-"]
+##div[id^="ads250_250-widget-"]
+##div[id^="ads300_100-widget-"]
+##div[id^="ads300_250-widget-"]
+##div[id^="adspot-"]
+##div[id^="advads_ad_"]
+##div[id^="crt-"][style]
+##div[id^="dfp-ad-"]
+##div[id^="div-ads-"]
+##div[id^="div-gpt-"]
+##div[id^="ezoic-pub-ad-"]
+##div[id^="google_dfp_"]
+##div[id^="gpt_ad_"]
+##div[id^="lazyad-"]
+##div[id^="optidigital-adslot"]
+##div[id^="pa_sticky_ad_box_middle_"]
+##div[id^="rc-widget-"]
+##div[id^="sticky_ad_"]
+##div[id^="vuukle-ad-"]
+##div[id^="yandex_ad"]
+##gpt-ad
+##guj-ad
+##hl-adsense
+##img[src^="https://images.purevpnaffiliates.com"]
+##ps-connatix-module
+##span[data-ez-ph-id]
+##span[id^="ezoic-pub-ad-placeholder-"]
+##topadblock
+##zeus-ad
+! actvid.com,f2movies.to,fmovies.ink,fmovies.ps,fmoviesto.cc,himovies.to,movies2watch.tv,moviesjoy.to,soap2day.rs
+###hgiks-middle
+###hgiks-top
+! flashscore.co.uk,soccer24.com,flashscore.it
+##.boxOverContent__banner
+! https://publicwww.com/websites/%22happy-under-player%22/
+##.happy-under-player
+! https://github.com/easylist/easylist/pull/16654
+##.mntl-leaderboard-header
+##.mntl-leaderboard-spacer
+! shopee.cl,shopee.cn,shopee.co.id,shopee.co.th.. https://github.com/easylist/easylist/pull/16659
+##.shopee-search-user-brief
+! Ads for parked domains https://github.com/easylist/easylist/commit/f96a71b82c
+##a[href*=".cfm?fp="][href*="&maxads="]
+! CitrusAd
+##.CitrusBannerWrapper--enollj
+##[class^="tile-picker__CitrusBannerContainer-sc-"]
+##citrus-ad-wrapper
+! realclear
+##.RC-AD
+##.RC-AD-BOX-BOTTOM
+##.RC-AD-BOX-MIDDLE
+##.RC-AD-BOX-TOP
+##.RC-AD-TOP-BANNER
+! Invideo advert: gizmodo.com,avclub.com,qz.com,lifehacker.com,theroot.com
+##.js_related-stories-inset
+! element specific
+##ins.adsbygoogle
+! (NSFW) club-rileyreid.com,clubmiamalkova.com,lanarhoades.mypornstarblogs.com
+###mgb-container > #mgb
+! https://github.com/easylist/easylist/pull/11962
+###kt_player > a[target="_blank"]
+! Slashdot "Deals" (covers web/ipfs/onion)
+###slashboxes > .deals-rail
+##.scroll-fixable.rail-right > .deals-rail
+! dailypost.co.uk/dailystar.co.uk https://github.com/easylist/easylist/issues/9657
+##.click-track.partner
+! https://github.com/easylist/easylist/issues/9308
+##[href^="https://freecourseweb.com/"] > .sitefriend
+! local12.com/bakersfieldnow.com/katv.com
+##.index-module_adBeforeContent__UYZT
+##.interstory_first_mobile
+##.interstory_second_mobile
+! Gannett https://github.com/easylist/easylist/issues/13015
+###gnt_atomsnc
+###gpt-dynamic_native_article_4
+###gpt-high_impact
+###gpt-poster
+##.gnt_flp
+##.gnt_rr_xpst
+##.gnt_rr_xst
+##.gnt_tb.gnt_tbb
+##.gnt_tbr.gnt_tb
+##.gnt_x
+##.gnt_x__lbl
+! (invideo advertising)
+###Player_Playoncontent
+###aniview--player
+###cmg-video-player-placeholder
+###jwplayer-container-div
+###jwplayer_contextual_player_div
+###mplayer-embed
+###primis-holder
+###primis_intext
+###vidazoo-player
+##.GRVPrimisVideo
+##.GRVVideo
+##.ac-lre-desktop
+##.ac-lre-player-ph
+##.ac-lre-wrapper
+##.ad-container--hot-video
+##.ae-player__itv
+##.aniview-inline-player
+##.aplvideo
+##.article-connatix-wrap
+##.article-detail-ad
+##.avp-p-wrapper
+##.card-captioned.crd > .crd--cnt > .s2nPlayer
+##.ck-anyclips
+##.ck-anyclips-article
+##.exco-container
+##.ez-sidebar-wall-ad
+##.ez-video-wrap
+##.inline-iframe.article--content-embed
+##.js-widget-distroscale
+##.js-widget-send-to-news
+##.jwPlayer--floatingContainer
+##.legion_primiswrapper
+##.mm-embed--sendtonews
+##.mm-widget--sendtonews
+##.oovvuu-embed-player
+##.pbs__player
+##.playwire-article-leaderboard-ad
+##.pmc-contextual-player
+##.pop-out-eplayer-container
+##.primis-ad
+##.primis-ad-wrap
+##.primis-custom
+##.primis-player
+##.primis-player__container
+##.primis-video-player
+##.primis_1
+##.s2nContainer
+##.send-to-news
+##.van_vid_carousel
+##.vid-present > .van_vid_carousel__padding
+##.video--container--aniview
+##.vidible-wrapper
+##.wps-player-wrap
+##[class^="s2nPlayer"]
+! Ad widgets
+##.BeOpWidget
+! VPN Affiliate Banners
+##a[href^="http://https://www.get-express-vpn.com/offer/"]
+##a[href^="https://affiliate.rusvpn.com/click.php?"]
+##a[href^="https://billing.purevpn.com/aff.php"] > img
+##a[href^="https://fastestvpn.com/lifetime-special-deal?a_aid="]
+##a[href^="https://get.surfshark.net/aff_c?"][href*="&aff_id="] > img
+##a[href^="https://go.nordvpn.net/aff"] > img
+##a[href^="https://torguard.net/aff.php"] > img
+##a[href^="https://track.ultravpn.com/"]
+##a[href^="https://www.get-express-vpn.com/offer/"]
+##a[href^="https://www.goldenfrog.com/vyprvpn?offer_id="][href*="&aff_id="]
+##a[href^="https://www.privateinternetaccess.com/"] > img
+##a[href^="https://www.purevpn.com/"][href*="&utm_source=aff-"]
+! areanews.com.au,armidaleexpress.com.au,avonadvocate.com.au,batemansbaypost.com.au
+##.grid > .container > #aside-promotion
+! revcontent
+##.default_rc_theme
+##.inf-onclickvideo-adbox
+##.inf-onclickvideo-container
+! internetradiouk.com / jamaicaradio.net / onlineradios.in etc
+##.add-box-side
+##.add-box-top
+! https://github.com/easylist/easylist/issues/3902
+##.partner-loading-shown.partner-label
+! brave browser overlay ad
+##.brave-overlay
+! Mgid
+##div[id*="MarketGid"]
+##div[id*="ScriptRoot"]
+! ezoic
+###ezmob_footer
+! Adreclaim
+##.impo-b-overlay
+##.impo-b-stitial
+##.rec-sponsored
+##.rec_article_footer
+##.rec_article_right
+##.rec_container__right
+##.rec_container_footer
+##.rec_container_right
+##.rec_title_footer
+##[onclick*="content.ad/"]
+! ampproject
+##.amp-ad
+##.amp-ad-container
+##.amp-ad__wrapper
+##.amp-ads
+##.amp-ads-container
+##.amp-adv-container
+##.amp-adv-wrapper
+##.amp-article-ad-element
+##.amp-flying-carpet-text-border
+##.amp-sticky-ad-custom
+##.amp-sticky-ads
+##.amp-unresolved
+##.amp_ad_1
+##.amp_ad_header
+##.amp_ad_wrapper
+##.ampad
+##.ct_ampad
+##.spotim-amp-list-ad
+##AMP-AD
+##amp-ad
+##amp-ad-custom
+##amp-connatix-player
+##amp-fx-flying-carpet
+! Genric mobile element
+###mobile-swipe-banner
+! Sinclair Broadcast Group (ktul.com/komonews.com/kfdm.com/wjla.com/etc.)
+###banner_pos1_ddb_0
+###banner_pos2_ddb_0
+###banner_pos3_ddb_0
+###banner_pos4_ddb_0
+###ddb_fluid_native_ddb_0
+###premium_ddb_0
+###rightrail_bottom_ddb_0
+###rightrail_pos1_ddb_0
+###rightrail_pos2_ddb_0
+###rightrail_pos3_ddb_0
+###rightrail_top_ddb_0
+###story_bottom_ddb_0
+###story_top_ddb_0
+##.index-module_adBeforeContent__AMXn
+##.index-module_rightrailBottom__IJEl
+##.index-module_rightrailTop__mag4
+##.premium_PremiumPlacement__2dEp0
+! In video div
+###ultimedia_wrapper
+! In advert promo
+##.brandpost_inarticle
+! Sedo
+##.container-content__container-relatedlinks
+! PubExchange
+###pubexchange_below_content
+##.pubexchange_module
+! Outbrain
+###adv_outbrain_SB_1_sidebar
+###ao-article-outbrain
+###ao-sidebar-outbrain
+###container-outbrain-sticky
+###js-outbrain-ads-module
+###js-outbrain-rightrail-ads-module
+###outbrain-wrapper
+###outbrainAdWrapper
+###outbrain_dual_ad_fs_0_dual
+###outbrain_vertical
+###sponsored-outbrain-1
+##.Cheat__outbrain
+##.OUTBRAIN[data-widget-id^="FMS_REELD_"]
+##.adv_outbrain
+##.ht_outbrain
+##.js-outbrain-container
+##.ob-ad-carousel-layout
+##.ob-hover
+##.ob-p.ob-dynamic-rec-container
+##.ob-strip-layout
+##.outBrainWrapper
+##.outbrain-ad-slot
+##.outbrain-ad-units
+##.outbrain-bg
+##.outbrain-widget
+##.outbrainAdHeight
+##.outbrain_ad_li
+##.outbrain_dual_ad_whats_class
+##.outbrain_ul_ad_top
+##.outbrainad
+##.promoted-outbrain
+##.responsive-ad-outbrain
+##.single__outbrain
+##a[data-obtrack^="http://paid.outbrain.com/network/redir?"]
+##a[data-oburl^="https://paid.outbrain.com/network/redir?"]
+##a[data-redirect^="https://paid.outbrain.com/network/redir?"]
+##a[data-url^="http://paid.outbrain.com/network/redir?"] + .author
+##a[data-widget-outbrain-redirect^="http://paid.outbrain.com/network/redir?"]
+##a[href^="https://paid.outbrain.com/network/redir?"]
+##a[onmousedown^="this.href='http://paid.outbrain.com/network/redir?"][target="_blank"]
+##a[onmousedown^="this.href='http://paid.outbrain.com/network/redir?"][target="_blank"] + .ob_source
+##a[onmousedown^="this.href='https://paid.outbrain.com/network/redir?"][target="_blank"]
+##a[onmousedown^="this.href='https://paid.outbrain.com/network/redir?"][target="_blank"] + .ob_source
+##a[target="_blank"][onmousedown="this.href^='http://paid.outbrain.com/network/redir?"]
+! Taboola
+###block-boxes-taboola
+###component-taboola-below-article-feed
+###component-taboola-below-article-feed-2
+###component-taboola-below-homepage-feed
+###fake_taboola_fallback
+###ra-taboola-bottom
+###taboola-ad
+###taboola-adverts
+###taboola-below
+###taboola-below-article-1
+###taboola-below-article-thumbnails
+###taboola-below-article-thumbnails-express
+###taboola-below-article-thumbnails-v2
+###taboola-below-forum-thumbnails
+###taboola-content
+###taboola-footer-ad
+###taboola-main-container
+###taboola-mid-article-thumbnails
+###taboola-mid-article-thumbnails-ii
+###taboola-mobile-article-thumbnails
+###taboola-placeholder
+###taboola-right-rail
+###taboola-right-rail-express
+###taboola-top-banner-abp
+###taboola_related
+###taboola_responsive_wrapper
+##.ab_taboola
+##.ad-container--taboola
+##.article-body__suppl_content--taboola-mid-article
+##.article-footer--taboola
+##.article-taboola
+##.box-taboola-content
+##.dart-ad-taboola
+##.for-taboola
+##.grid__module-sizer_name_taboola
+##.grv-taboola
+##.nw-taboola
+##.nya-slot[style]
+##.qa-placement-outbrain-under-post-cr
+##.tablet_ad_box
+##.tablet_ad_head
+##.taboola-above-article
+##.taboola-above-article-thumbnails
+##.taboola-ad
+##.taboola-block
+##.taboola-general
+##.taboola-in-plug-wrap
+##.taboola-inbetweener
+##.taboola-item
+##.taboola-left-rail-wrapper
+##.taboola-partnerlinks-ad
+##.taboola-placeholder
+##.taboola-placement
+##.taboola-single-asset-ads
+##.taboola-unit
+##.taboola-widget
+##.taboolaArticle
+##.taboolaHeight
+##.taboola__container
+##.taboola_advertising
+##.taboola_blk
+##.taboola_block1
+##.taboola_container
+##.taboola_lhs
+##.tbl-floating-unit
+##.tncls_taboola
+##.trb_taboola
+##.trc_excludable.syndicatedItem
+##.trc_rbox .syndicatedItem
+##.trc_rbox_border_elm .syndicatedItem
+##.trc_rbox_div .syndicatedItem
+##.trc_rbox_div .syndicatedItemUB
+##.trc_related_container div[data-item-syndicated="true"]
+##.van_taboola
+##.widget_taboola
+##amp-embed[type="taboola"]
+##div[id^="taboola-stream-"]
+! Zergnet
+###boxes-box-zergnet_module
+###right_rail-zergnet
+###zergnet
+###zergnet-wrapper
+##.ZERGNET
+##.adLocation-zerg
+##.component-zergnet
+##.content-zergnet
+##.js-footer-zerg
+##.module-zerg
+##.o-zergnet
+##.post-zergnet-wrap
+##.sidebar-zergnet
+##.td-zergnet
+##.widget-ami-zergnet
+##.widget_ok_zergnet_widget
+##.zerg-colm
+##.zerg-widget
+##.zerg-widgets
+##.zergmod
+##.zergnet
+##.zergnet-holder
+##.zergnet-row
+##.zergnet-unit
+##.zergnet-widget
+##.zergnet-widget-container
+##.zergnet-widget__header
+##.zergnet-widget__subtitle
+##.zergnetBLock
+##.zergnet__container
+##.zergnetpower
+##.zergpowered
+##display-ad-component
+##div[id^="zergnet-widget"]
+! Kayak
+##.CarResultsList > div > div.Dp1L[role=tab]
+##.ejnn-results-list-wrap > div > div > div > div > div.YTRJ[role="button"][tabindex="0"] > .yuAt-pres-rounded
+##.ev1_-results-list > div > div > div > div.G-5c[role="tab"][tabindex="0"] > .yuAt-pres-rounded
+##.ev1_-results-list > div > div > div > div[data-resultid$="-sponsored"]
+##.resultsList > div > div > div > div.G-5c[role="tab"][tabindex="0"] > .yuAt-pres-rounded
+##.resultsList > div > div > div > div[data-resultid$="-sponsored"]
+##.yPOz-adInner
+
+! *** easylist:easylist/easylist_allowlist_general_hide.txt ***
+dez.ro#@##ad-carousel
+so-net.ne.jp#@##ad-p3
+53.com#@##ad-rotator
+techymedies.com#@##ad-top
+afterdawn.com,download.fi,edukas.fi#@##ad-top-banner-placeholder
+ufoevidence.org#@##ad-wrapper
+sdf-event.sakura.ne.jp#@##ad_1
+sdf-event.sakura.ne.jp#@##ad_2
+sdf-event.sakura.ne.jp#@##ad_3
+sdf-event.sakura.ne.jp#@##ad_4
+streetinsider.com#@##ad_space
+adtunes.com#@##ad_thread_first_post_content
+linuxtracker.org#@##adbar
+pyfunceble.readthedocs.io#@##adblock
+lalovings.com#@##adcontainer
+about.com#@##adcontainer1
+guloggratis.dk#@##adcontent
+lifeinvader.com#@##ads-col
+ads.nipr.ac.jp#@##ads-header
+miuithemers.com#@##ads-left
+ads.nipr.ac.jp#@##ads-menu
+finvtech.com,herstage.com,scitechi.com,soulfitr.com,sportynew.com,travel13.com,usatravel.tips,watchinfilm.com#@##ads-wrapper
+mafagames.com#@##adsContainer
+video.tv-tokyo.co.jp#@##adspace
+globalsecurity.org#@##adtop
+ewybory.eu#@##adv-text
+basinnow.com,oxfordlearnersdictionaries.com#@##advertise
+justthenews.com#@##aniview--player
+fcbarcelona.dk#@##article_ad
+catb.org#@##banner-ad
+hifi-forsale.co.uk#@##centerads
+wsj.com#@##footer-ads
+deepgoretube.site#@##fwdevpDiv0
+developers.google.com#@##google-ads
+plaza.rakuten.co.jp#@##headerAd
+airplaydirect.com#@##header_ad
+tei-c.org#@##msad
+suntory.co.jp#@##page_ad
+box10.com#@##prerollAd
+spjai.com#@##related_ads
+eva.vn#@##right_ads
+39.benesse.ne.jp,techeyesonline.com#@##side-ad
+jansatta.com#@##taboola-below-article-1
+azclick.jp,tubefilter.com#@##topAd
+soundandvision.com,stereophile.com#@##topbannerad
+gamingcools.com#@#.Adsense
+m.motonet.fi#@#.ProductAd
+flightview.com#@#.ad-160-600
+job.inshokuten.com#@#.ad-area
+kincho.co.jp,niji-gazo.com#@#.ad-block
+ikkaku.net#@#.ad-bottom
+job.inshokuten.com,sexgr.net,webbtelescope.org#@#.ad-box
+dbook.docomo.ne.jp,dmagazine.docomo.ne.jp#@#.ad-button
+livedoorblogstyle.jp#@#.ad-center
+newegg.com#@#.ad-click
+backcar.fr,flat-ads.com,job.inshokuten.com#@#.ad-content
+dbook.docomo.ne.jp,dmagazine.docomo.ne.jp#@#.ad-cover
+xda-developers.com#@#.ad-current
+wallpapers.com#@#.ad-enabled
+nolotiro.org#@#.ad-hero
+wallpapers.com#@#.ad-holder
+transparencyreport.google.com#@#.ad-icon
+flat-ads.com,lastpass.com#@#.ad-img
+dbook.docomo.ne.jp,docomo.ne.jp#@#.ad-label
+guloggratis.dk#@#.ad-links
+so-net.ne.jp#@#.ad-notice
+so-net.ne.jp#@#.ad-outside
+nicoad.nicovideo.jp#@#.ad-point
+tapahtumat.iijokiseutu.fi,tapahtumat.kaleva.fi,tapahtumat.koillissanomat.fi,tapahtumat.lapinkansa.fi,tapahtumat.pyhajokiseutu.fi,tapahtumat.raahenseutu.fi,tapahtumat.rantalakeus.fi,tapahtumat.siikajokilaakso.fi#@#.ad-popup
+hulu.com#@#.ad-root
+wiki.fextralife.com#@#.ad-sidebar
+wegotads.co.za#@#.ad-source
+isewanferry.co.jp,jreu-h.jp,junkmail.co.za,nexco-hoken.co.jp,version2.dk#@#.ad-text
+job.inshokuten.com#@#.ad-title
+lifeinvader.com,marginalreport.net,spanishdict.com,studentski-servis.com#@#.ad-wrapper
+xda-developers.com#@#.ad-zone
+xda-developers.com#@#.ad-zone-container
+wordparts.ru#@#.ad336
+leffatykki.com#@#.ad728x90
+cw.com.tw#@#.adActive
+thoughtcatalog.com#@#.adChoicesLogo
+dailymail.co.uk,namesecure.com#@#.adHolder
+ikkaku.net#@#.adImg
+hdfcbank.com#@#.adLink
+seznam.cz#@#.adMiddle
+aggeliestanea.gr,infotel.ca#@#.adResult
+macys.com,news24.jp#@#.adText
+clien.net#@#.ad_banner
+sozai-good.com#@#.ad_block
+panarmenian.net#@#.ad_body
+joins.com,jtbc.co.kr#@#.ad_bottom
+ienohikari.net#@#.ad_btn
+m.nettiauto.com,m.nettikaravaani.com,m.nettikone.com,m.nettimoto.com,m.nettivaraosa.com,m.nettivene.com,nettimokki.com#@#.ad_caption
+classy-online.jp,thelocal.at,thelocal.ch,thelocal.de,thelocal.dk,thelocal.es,thelocal.fr,thelocal.it,thelocal.no,thelocal.se#@#.ad_container
+walkingclub.org.uk#@#.ad_div
+admanager.line.biz#@#.ad_frame
+modelhorseblab.com#@#.ad_global_header
+myhouseabroad.com,njuskalo.hr,starbuy.sk.data10.websupport.sk#@#.ad_item
+muzines.co.uk#@#.ad_main
+huffingtonpost.co.uk#@#.ad_spot
+kpanews.co.kr#@#.ad_top
+genshinimpactcalculator.com#@#.adban
+weatherwx.com#@#.adbutton
+boots.com#@#.adcard
+mediance.com#@#.adcenter
+insomnia.gr,kingsinteriors.co.uk#@#.adlink
+ascii.jp#@#.adrect
+tomwans.com#@#.adright
+epawaweather.com#@#.adrow
+gemini.yahoo.com#@#.ads
+in.fo#@#.ads-banner
+bdsmlr.com#@#.ads-container
+ads.nipr.ac.jp,burzahrane.hr#@#.ads-header
+heatware.com#@#.ads-image
+t3.com#@#.ads-inline
+miuithemers.com#@#.ads-left
+hatenacorp.jp,milf300.com#@#.ads-link
+forbes.com#@#.ads-loaded
+fireload.com#@#.ads-mobile
+juicesky.com#@#.ads-title
+pop-music.ir#@#.ads-top
+mastersclub.jp#@#.ads.widget
+getwallpapers.com,wallpaperaccess.com,wallpaperset.com#@#.ads1
+jw.org#@#.adsBlock
+cars.mitula.ae#@#.adsList
+trustnet.com#@#.ads_right
+search.conduit.com#@#.ads_wrapper
+alluc.org#@#.adsbottombox
+game.goo.ne.jp#@#.adsbygoogle-noablate
+copart.com#@#.adscontainer
+starbike.com#@#.adsense_wrapper
+live365.com#@#.adshome
+javbix.com#@#.adsleft
+xda-developers.com#@#.adsninja-ad-zone
+cutepdf-editor.com#@#.adtable
+gigazine.net#@#.adtag
+adamtheautomator.com,mediaite.com,packhacker.com#@#.adthrive
+mediaite.com,packhacker.com#@#.adthrive-content
+mediaite.com,packhacker.com#@#.adthrive-video-player
+kmsv.jp#@#.adtitle
+brandexperience-group.com#@#.adv-banner
+dobro.systems#@#.adv-box
+dobro.systems#@#.adv-list
+dobro.systems#@#.advBox
+bigcommerce.com#@#.advert-container
+labartt.com#@#.advert-detail
+jamesedition.com#@#.advert2
+rupors.com#@#.advertSlider
+browsershots.org#@#.advert_list
+zalora.co.id,zalora.co.th,zalora.com.hk,zalora.com.my,zalora.com.ph,zalora.com.tw,zalora.sg#@#.advertisement-block
+wired.com#@#.advertisement__leaderboard
+adquick.com,buyout.pro,news.com.au,zlinked.com#@#.advertiser
+anobii.com#@#.advertisment
+grist.org,ing.dk,version2.dk#@#.advertorial
+stjornartidindi.is#@#.adverttext
+staircase.pl#@#.adwords
+consumerist.com#@#.after-post-ad
+dailymail.co.uk,thisismoney.co.uk#@#.article-advert
+deluxemusic.tv#@#.article_ad
+adeam.com#@#.atf-wrapper
+justthenews.com#@#.avp-p-wrapper
+dr.dk#@#.banner-ad-container
+popporn.com,webphunu.net#@#.block-ad
+shop.asobistore.jp#@#.block-sponsor
+ixbtlabs.com#@#.bottom_ad_block
+wired.com#@#.box-radvert
+9l.pl#@#.boxAds
+canonsupports.com#@#.box_ads
+stuff.tv#@#.c-ad
+thedigestweb.com#@#.c-ad-banner
+deployhappiness.com,dmitrysotnikov.wordpress.com,faravirusi.com,freedom-shift.net,lovepanky.com,markekaizen.jp,netafull.net,photopoint.com.ua,posh-samples.com#@#.category-ad:not(html):not(body)
+business-hack.net,clip.m-boso.net,iine-tachikawa.net,meihong.work#@#.category-ads:not(html):not(body)
+accuweather.com#@#.cnx-player-wrapper
+studio55.fi#@#.column-ad
+huffpost.com#@#.connatix-wrapper
+fontspace.com,skyrimcommands.com#@#.container-ads
+verizonwireless.com#@#.contentAds
+disk.yandex.by,disk.yandex.com,disk.yandex.kz,disk.yandex.ru,disk.yandex.uz,freevoipdeal.com,voipstunt.com,yadi.sk#@#.content_ads
+adexchanger.com,gottabemobile.com,mrmoneymustache.com,thinkcomputers.org#@#.custom-ad
+out.com#@#.dfp-tag-wrapper
+roomclip.jp#@#.display-ad
+anime-japan.jp#@#.display_ad
+humix.com#@#.ez-video-wrap
+thestudentroom.co.uk#@#.fixed_ad
+songlyrics.com#@#.footer-ad
+guloggratis.dk#@#.gallery-ad
+davidsilverspares.co.uk#@#.greyAd
+forums.digitalspy.com,marketwatch.com#@#.has-ad
+si.com#@#.has-fixed-bottom-ad
+naver.com#@#.head_ad
+infosecurity-magazine.com#@#.header-ad-row
+mobiili.fi#@#.header_ad
+iedrc.org#@#.home-ad
+thelincolnite.co.uk#@#.inline-ad
+elektro.info.pl,mashingup.jp#@#.is-sponsored
+vukajlija.com#@#.large-advert
+realgfporn.com#@#.large-right-ad
+atea.com,ateadirect.com,knowyourmobile.com,nlk.org.np#@#.logo-ad
+doda.jp,tubefilter.com#@#.mainAd
+austurfrett.is,boards.4chan.org,boards.4channel.org#@#.middlead
+thespruce.com#@#.mntl-leaderboard-spacer
+sankei.com#@#.module_ad
+seura.fi,www.msn.com#@#.nativead
+dogva.com#@#.node-ad
+bloomberg.com#@#.page-ad
+rottentomatoes.com#@#.page_ad
+player.ex.co,theautopian.com#@#.pbs__player
+gumtree.com#@#.postad
+komplett.dk,komplett.no,komplett.se,komplettbedrift.no,komplettforetag.se,newegg.com#@#.product-ad
+newegg.com#@#.product-ads
+ebaumsworld.com#@#.promoAd
+galaopublicidade.com#@#.publicidade
+eneuro.org,jneurosci.org#@#.region-ad-top
+offmoto.com#@#.reklama
+msn.com#@#.serversidenativead
+audioholics.com,classy-online.jp#@#.side-ad
+ekitan.com,kissanadu.com#@#.sidebar-ad
+independent.com#@#.sidebar-ads
+cadlinecommunity.co.uk#@#.sidebar_advert
+24city.cn.ua#@#.single-ads
+hebdenbridge.co.uk#@#.smallads
+itempost.jp#@#.sp-ad
+geekwire.com#@#.sponsor_post
+toimitilat.kauppalehti.fi#@#.sponsored-article
+zdnet.com#@#.sponsoredItem
+kingsofchaos.com#@#.textad
+k24tv.co.ke#@#.top-ad
+cp24.com#@#.topAd
+outinthepaddock.com.au#@#.topads
+codedevstuff.blogspot.com,hassiweb-programming.blogspot.com#@#.vertical-ads
+ads.google.com#@#.video-ads
+javynow.com#@#.videos-ad
+sacbee.com#@#.wps-player-wrap
+gumtree.com.au#@#[data-ad-name]
+globsads.com#@#[href^="http://globsads.com/"]
+mypillow.com#@#[href^="http://mypillow.com/"] > img
+mypillow.com#@#[href^="http://www.mypillow.com/"] > img
+mypatriotsupply.com#@#[href^="https://mypatriotsupply.com/"] > img
+mypillow.com#@#[href^="https://mypillow.com/"] > img
+mystore.com#@#[href^="https://mystore.com/"] > img
+noqreport.com#@#[href^="https://noqreport.com/"] > img
+sinisterdesign.net#@#[href^="https://secure.bmtmicro.com/servlets/"]
+herbanomic.com#@#[href^="https://www.herbanomic.com/"] > img
+techradar.com#@#[href^="https://www.hostg.xyz/aff_c"]
+mypatriotsupply.com#@#[href^="https://www.mypatriotsupply.com/"] > img
+mypillow.com#@#[href^="https://www.mypillow.com/"] > img
+reimageplus.com#@#[href^="https://www.reimageplus.com/"]
+restoro.com#@#[href^="https://www.restoro.com/"]
+zstacklife.com#@#[href^="https://zstacklife.com/"] img
+amazon.com,cancam.jp,faceyourmanga.com,isc2.org,liverc.com,mit.edu,muscatdaily.com,olx.pl,saitama-np.co.jp,timesofoman.com,virginaustralia.com#@#[id^="div-gpt-ad"]
+ignboards.com#@#[id^="google_ads_iframe"]
+revimedia.com#@#a[href*=".revimedia.com/"]
+dr.dk,smartadserver.de#@#a[href*=".smartadserver.com"]
+slickdeals.net#@#a[href*="adzerk.net"]
+sweetdeals.com#@#a[href*="https://www.sweetdeals.com/"] img
+legacy.com#@#a[href^="http://pubads.g.doubleclick.net/"]
+canstar.com.au,mail.yahoo.com#@#a[href^="https://ad.doubleclick.net/"]
+badoinkvr.com#@#a[href^="https://badoinkvr.com/"]
+free-avx.jp#@#a[href^="https://click.dtiserv2.com/"]
+xbdeals.net#@#a[href^="https://click.linksynergy.com/"]
+naughtyamerica.com#@#a[href^="https://natour.naughtyamerica.com/track/"]
+bookworld.no#@#a[href^="https://ndt5.net/"]
+privateinternetaccess.com#@#a[href^="https://www.privateinternetaccess.com/"]
+marcpapeghin.com#@#a[href^="https://www.sheetmusicplus.com/"][href*="?aff_id="]
+politico.com#@#a[onmousedown^="this.href='https://paid.outbrain.com/network/redir?"][target="_blank"]
+heaven-burns-red.com#@#article.ad
+play.google.com#@#div[aria-label="Ads"]
+news.artnet.com,powernationtv.com,worldsurfleague.com#@#div[data-ad-targeting]
+cookinglight.com#@#div[data-native_ad]
+googleads.g.doubleclick.net#@#div[id^="ad_position_"]
+out.com#@#div[id^="dfp-ad-"]
+cancam.jp,saitama-np.co.jp#@#div[id^="div-gpt-"]
+xdpedia.com#@#div[id^="ezoic-pub-ad-"]
+forums.overclockers.ru#@#div[id^="yandex_ad"]
+!! ins.adsbygoogle
+advancedrenamer.com,androidrepublic.org,anonymousemail.me,apkmirror.com,cdromance.com,demos.krajee.com,epicbundle.com,game.goo.ne.jp,kadinlarkulubu.com,korail.pe.kr,nextbigtrade.com,phcorner.net,pixiz.com,spoilertv.com,teemo.gg,willyoupressthebutton.com#@#ins.adsbygoogle
+!! .adslot
+apkmirror.com,tuxpi.com#@#.adslot
+!! .adverts
+bavaria86.com,ransquawk.com,tf2r.com,trh.sk#@#.adverts
+! webike domains, fix broken page
+japan-webike.be,japan-webike.ca,japan-webike.ch,japan-webike.dk,japan-webike.ie,japan-webike.it,japan-webike.kr,japan-webike.nl,japan-webike.se,webike-china.cn,webike.ae,webike.co.at,webike.co.hu,webike.co.il,webike.co.uk,webike.com.ar,webike.com.bd,webike.com.gr,webike.com.kh,webike.com.mm,webike.com.ru,webike.com.tr,webike.com.ua,webike.cz,webike.de,webike.es,webike.fi,webike.fr,webike.hk,webike.id,webike.in,webike.la,webike.mt,webike.mx,webike.my,webike.net,webike.net.br,webike.net.pl,webike.ng,webike.no,webike.nz,webike.ph,webike.pk,webike.pt,webike.sg,webike.tw#@#.ad_box
+japan-webike.be,japan-webike.ca,japan-webike.ch,japan-webike.dk,japan-webike.ie,japan-webike.it,japan-webike.kr,japan-webike.nl,japan-webike.se,webike-china.cn,webike.ae,webike.co.at,webike.co.hu,webike.co.il,webike.co.uk,webike.com.ar,webike.com.bd,webike.com.gr,webike.com.kh,webike.com.mm,webike.com.ru,webike.com.tr,webike.com.ua,webike.cz,webike.de,webike.es,webike.fi,webike.fr,webike.hk,webike.id,webike.in,webike.la,webike.mt,webike.mx,webike.my,webike.net,webike.net.br,webike.net.pl,webike.ng,webike.no,webike.nz,webike.ph,webike.pk,webike.pt,webike.sg,webike.tw#@#.ad_title
+! Anti-Adblock
+spoilertv.com#@##adsensewide
+browsershots.org#@#.advert_area
+!---------------------------Third-party advertisers---------------------------!
+! *** easylist:easylist/easylist_adservers.txt ***
+||0008d6ba2e.com^
+||0024ad98dd.com^
+||004809f9da.com^
+||0083334e84.com^
+||00d3ed994e.com^
+||00d84987c0.com^
+||01220b75a7.com^
+||01c70a2a06.com^
+||01counter.com^
+||01d0c91c0d.com^
+||01jud3v55z.com^
+||0265331.com^
+||02953a52b0.com^
+||02a2749187.com^
+||02aa19117f396e9.com^
+||02ce917efd.com^
+||0398067ebe.com^
+||03bdb617ed.com^
+||03ed9035a0801f.com^
+||03eea1b6dd.com^
+||04-f-bmf.com^
+||041353e6dd.com^
+||04cb2afab7.com^
+||04cbf4193b.com^
+||059e71004b.com^
+||05e11c9f6f.com^
+||05w0bq3nbq9b.top^
+||063f828cf2.com^
+||0676el9lskux.top^
+||0692e14e66.com^
+||072c4580e8.com^
+||07ab456fe8.com^
+||07wr439dfait.top^
+||0819478661.com^
+||0843741785.com^
+||08666f3ca4.com^
+||086f39952a.com^
+||0898hhh.com^
+||08af0e4303.com^
+||08bb1fn3t4.com^
+||08uxmg2bz7hc.top^
+||0926a687679d337e9d.com^
+||09399d89cc.com^
+||095c32183c.com^
+||097be55da0.com^
+||09b074f4cf.com^
+||0a05d34d6f.com^
+||0a0d-d3l1vr.b-cdn.net^
+||0a81d7e23a.com^
+||0a8d87mlbcac.top^
+||0abdab4d27.com^
+||0ac56fb52b.com^
+||0aef09749a.com^
+||0af2a962b0102942d9a7df351b20be55.com^
+||0b19760679.com^
+||0b4cdd5af5.com^
+||0b73f85f92.com^
+||0b7741a902.com^
+||0c6dd161e9.com^
+||0cdn.xyz^
+||0cf.io^
+||0d356de9ef.com^
+||0d4936c8fd.com^
+||0d68d359dc.com^
+||0d6cirpa7nrd.top^
+||0e157d2cfa.com^
+||0e78376a1b.com^
+||0eijh8996i.com^
+||0emn.com^
+||0f461325bf56c3e1b9.com^
+||0fc32b5283.com^
+||0fc7ac6ea7.com^
+||0fd4e46de3.com^
+||0fmm.com^
+||0gw7e6s3wrao9y3q.pro^
+||0i0i0i0.com^
+||0pyn37dv3m.com^
+||0redirb.com^
+||0redird.com^
+||0sntp7dnrr.com^
+||0sywjs4r1x.com^
+||0udonfv52o9k.top^
+||0w1rqq69fi0e.com^
+||0x01n2ptpuz3.com^
+||101c4e5a51.com^
+||101m3.com^
+||103092804.com^
+||106c6423c3.com^
+||1090pjopm.de^
+||109c957fb6.com^
+||10b883b3d61d.com^
+||10cbc8a64e.com^
+||10desires.com^
+||10eafd09d6.com^
+||10nvejhblhha.com^
+||10q6e9ne5.de^
+||10sdkjbfksjdf10.monster^
+||10skhbdhjfsdf100.monster^
+||10sn95to9.de^
+||1111supjavcom.xyz^
+||111supjavcom.xyz^
+||113aa22d76.com^
+||116bea31bf.com^
+||11f1b925c4.com^
+||11g1ip22h.de^
+||11supjav.xyz^
+||12112336.pix-cdn.org^
+||1221e236c3f8703.com^
+||1223f33efe.com^
+||123-movies.bz^
+||1239feffd9.com^
+||123camquiz.com^
+||123feb4327.com^
+||123movies.to^
+||123w0w.com^
+||12573ddd51.com^
+||12d59da1e2.com^
+||12ezo5v60.com^
+||130gelh8q.de^
+||136dd8678f.com^
+||137kfj65k.de^
+||13p76nnir.de^
+||148dfe140d0f3d5e.com^
+||1493c7cc8b.com^
+||14a5cd0cd8.com^
+||14badb5195.com^
+||14cpoff22.de^
+||14f72e5e3d.com^
+||14fefmsjd.de^
+||14i8trbbx4.com^
+||15306ad0e1.com^
+||154886c13e.com^
+||15cacaospice63nhdk.com^
+||16-merchant-s.com^
+||16a754560b.com^
+||16iis7i2p.de^
+||17772175ab.com^
+||177c156af9.com^
+||17co2k5a.de^
+||17do048qm.de^
+||17f0ec344c.com^
+||18113407f3.com^
+||181m2fscr.de^
+||1847ff24f9.com^
+||184c4i95p.de^
+||18788fdb24.com^
+||18tlm4jee.de^
+||19273817.com^
+||194ac5b0e3.com^
+||194b7af8c3.com^
+||19515bia.de^
+||19528681.com^
+||19fc4acebd.com^
+||1a65658575.com^
+||1a714ee67c.com^
+||1a8f9rq9c.de^
+||1aa3097b7b.com^
+||1aqi93ml4.de^
+||1b14e0ee42d5e195c9aa1a2f5b42c710.com^
+||1b264a0ca0.com^
+||1b3tmfcbq.de^
+||1b73a49a1b.com^
+||1b9cvfi0nwxqelxu.pro^
+||1betandgonow.com^
+||1bm3n8sld.de^
+||1c09d36b99.com^
+||1c174d5fe7.com^
+||1c447fc5b7.com^
+||1ca47a451d.com^
+||1ca65f5f5b.com^
+||1ccbt.com^
+||1cctcm1gq.de^
+||1ckbfk08k.de^
+||1d27313995.com^
+||1d5d7fb584.com^
+||1dtdsln1j.de^
+||1empiredirect.com^
+||1ep2l1253.de^
+||1f1c1d50fe.com^
+||1f6f6bfb05.com^
+||1f7eece503.com^
+||1f87527dc9.com^
+||1f98dc1262.com^
+||1fd92n6t8.de^
+||1fluxx-strean.com^
+||1freestyl3domain.com^
+||1fwjpdwguvqs.com^
+||1g46ls536.de^
+||1gbjadpsq.de^
+||1hbxjdhfasd1.monster^
+||1hkmr7jb0.de^
+||1i8c0f11.de^
+||1igare0jn.de^
+||1itot7tm.de^
+||1j771bhgi.de^
+||1jsskipuf8sd.com^
+||1kanz.cn^
+||1knhg4mmq.de^
+||1lbk62l5c.de^
+||1lj11b2ii.de^
+||1m72cfole.de^
+||1mrmsp0ki.de^
+||1niao20230410.live^
+||1nimo.com^
+||1nqrqa.de^
+||1odi7j43c.de^
+||1p1eqpotato.com^
+||1p8ln1dtr.de^
+||1phads.com^
+||1pqfa71mc.de^
+||1push.io^
+||1r4g65b63.de^
+||1r8435gsqldr.com^
+||1redira.com^
+||1redirb.com^
+||1redirc.com^
+||1rx.io^
+||1rxntv.io^
+||1s1r7hr1k.de^
+||1sqfobn52.de^
+||1starwarstx1.com^
+||1talking.net^
+||1tds26q95.de^
+||1ts03.top^
+||1ts07.top^
+||1ts17.top^
+||1ts19.top^
+||1web.me^
+||1xlite-208883.top^
+||1xlite-503779.top^
+||1xlite-510677.top^
+||1xlite-522762.top^
+||1xroom.com^
+||200088d4e2.com^
+||2020mustang.com^
+||2022welcome.com^
+||2036369798.com^
+||2066401308.com^
+||206ads.com^
+||20dollars2surf.com^
+||20tracks.com^
+||2137dc12f9d8.com^
+||2158novffp.com^
+||2175cdb850.com^
+||218emo1t.de^
+||21hn4b64m.de^
+||21sexturycash.com^
+||22081b1c58.com^
+||22256da88b.com^
+||22b73ca99a.com^
+||22blqkmkg.de^
+||22ddebb169.com^
+||22gui20230801.live^
+||22lmsi1t5.de^
+||23182b9851.com^
+||231dasda3dsd.aniyae.com^
+||234f6ce965.com^
+||24-sportnews.com^
+||2408987111.com^
+||249c9885c1.com^
+||24affiliates.com^
+||24fea9d560.com^
+||24hoursuptodatecdn.net^
+||24newstech.com^
+||24s1b0et1.de^
+||24x7adservice.com^
+||250f0ma86.de^
+||254a.com^
+||259luxu.xyz^
+||25obpfr.de^
+||2639iqjkl.de^
+||26485.top^
+||2685da0b4d.com^
+||268stephe5en3king.com^
+||26q4nn691.de^
+||2777d013fc.com^
+||27a25cc598.com^
+||27igqr8b.de^
+||27vckaccbto7p761.pro^
+||284767c6f7.com^
+||2859933b6d.com^
+||28adea9220.com^
+||291hkcido.de^
+||2932cceca4.com^
+||295a9f642d.com^
+||29apfjmg2.de^
+||29d65cebb82ef9f.com^
+||2a2k3aom6.de^
+||2a4snhmtm.de^
+||2a710318ec.com^
+||2ade7d2008.com^
+||2aefgbf.de^
+||2aus34sie6po5m.com^
+||2b037d5d4d.com^
+||2b15b8e193.com^
+||2b26a9e96e.com^
+||2b28c0583e.com^
+||2b2b3adee6.com^
+||2baa52126b.com^
+||2be2a18b8c.com^
+||2bps53igop02.com^
+||2c2a1b058e.com^
+||2c3a97984f45.com^
+||2c4rrl8pe.de^
+||2c6bcbbb82ce911.com^
+||2cb2df849a.com^
+||2cjlj3c15.de^
+||2cnjuh34jb.com^
+||2cnjuh34jbhub.com^
+||2cnjuh34jbman.com^
+||2cnjuh34jbpoint.com^
+||2cnjuh34jbstar.com^
+||2d12b2f25b.com^
+||2d32e2d54e.com^
+||2d6g0ag5l.de^
+||2d77c9dd09.com^
+||2df0b2e308.com^
+||2e8dgn8n0e0l.com^
+||2eb3f134fb.com^
+||2f09c4f4cb.com^
+||2f1969b0e8.com^
+||2f488993d1.com^
+||2fb8or7ai.de^
+||2fd8c0e9fc.com^
+||2fgrrc9t0.de^
+||2fnptjci.de^
+||2g2kaa598.de^
+||2gg6ebbhh.de^
+||2go7v1nes8.com^
+||2h6skj2da.de^
+||2heaoc.com^
+||2hisnd.com^
+||2hpb1i5th.de^
+||2i30i8h6i.de^
+||2i87bpcbf.de^
+||2iiyrxk0.com^
+||2imon4qar.de^
+||2jmis11eq.de^
+||2jod3cl3j.de^
+||2kn40j226.de^
+||2llmonds4ehcr93nb.com^
+||2lqcd8s9.de^
+||2lwlh385os.com^
+||2m3gdt0gc.de^
+||2m55gqleg.de^
+||2mf9kkbhab31.com^
+||2mke5l187.de^
+||2mlh2fw7z62i.com^
+||2mo3neop.de^
+||2nn7r6bh1.de^
+||2om93s33n.de^
+||2p1kreiqg.de^
+||2pc6q54ga.de^
+||2ptxxjjzpy.com^
+||2qgsjjy90x.com^
+||2qj7mq3w4uxe.com^
+||2re6rpip2.de^
+||2rlgdkf7s.de^
+||2rmifan7n.de^
+||2smarttracker.com^
+||2spdo6g9h.de^
+||2tfg9bo2i.de^
+||2tlc698ma.de^
+||2track.info^
+||2trafficcmpny.com^
+||2ts55ek00.de^
+||3-mobiappu.com^
+||300daytravel.com^
+||3034f47ff3.com^
+||303ag0nc7.de^
+||303marketplace.com^
+||30929d3de9.com^
+||30b9e3a7d7e2b.com^
+||30d5shnjq.de^
+||30f5554dd4.com^
+||30hccor10.de^
+||30koqnlks.de^
+||30pk41r1i.de^
+||314d7d699d.com^
+||314gqd3es.de^
+||316feq0nc.de^
+||31bqljnla.de^
+||31cm5fq78.de^
+||31d6gphkr.de^
+||31f4ea3b17.com^
+||321naturelikefurfuroid.com^
+||3221dkf7m2.com^
+||329efb045e.com^
+||32c981a85a.com^
+||330e4e8090.com^
+||3338635.com^
+||341073be6e9db7d2.com^
+||341k4gu76ywe.top^
+||345f780221.com^
+||3467b7d02e.com^
+||34710af267.com^
+||3482f0c95a.com^
+||34e224a3bf.com^
+||34pavouhj7.com^
+||35722e75b1.com^
+||3574fd3373.com^
+||35volitantplimsoles5.com^
+||360popads.com^
+||360protected.com^
+||360yield-basic.com^
+||360yield.com^
+||366226193c.com^
+||367207f60c.com^
+||369c1a9a90.com^
+||369c83119d.com^
+||36b7ca5028.com^
+||37.44x.io^
+||37e5693aa7.com^
+||3819544f76.com^
+||3841f4b0c4.com^
+||38d9953876.com^
+||395b8c2123.com^
+||39f204776a.com^
+||39irqwnzlv.com^
+||3a17d27bf9.com^
+||3a29f8bf84.com^
+||3a98f4e936.com^
+||3b0df911a8.com^
+||3bcd202415.com^
+||3bfcfaa8c8.com^
+||3c22db1a50.com^
+||3c967f3fb4.com^
+||3c96ce165a.com^
+||3cb004e947.com^
+||3cbc749ccf.com^
+||3cbdc47b91.com^
+||3cf639cf20.com^
+||3ddf89472c.com^
+||3de3ac5082.com^
+||3dfcff2ec15099df0a24ad2cee74f21a.com^
+||3e090c38bd.com^
+||3e72982861.com^
+||3e950d4353.com^
+||3eb8f81779.com^
+||3ed2b6b7c4.com^
+||3edcc83467.com^
+||3fab5e7874.com^
+||3g25ko2.de^
+||3gbqdci2.de^
+||3i1cx7b9nupt.com^
+||3j8c56p9.de^
+||3lift.com^
+||3lr67y45.com^
+||3mhg.site^
+||3myad.com^
+||3qfe1gfa.de^
+||3r1kwxcd.top^
+||3redlightfix.com^
+||3sjhdbjfsdf3.monster^
+||3sk7d418al8u.com^
+||3wr110.net^
+||3xbrh4rxsvbl.top^
+||4-interads.com^
+||4030b44c32.com^
+||4073284684.com^
+||407433bfc441.com^
+||4087aa0dc1.com^
+||40ceexln7929.com^
+||40e82f6c27.com^
+||40f380afa3.com^
+||413dfe9f11.com^
+||4140690839.com^
+||41df76c67812005c.com^
+||41f6f373a2.com^
+||42a5d530ec972d8994.com^
+||42d61f012e27b36d53.com^
+||42e228ef6f.com^
+||42e44b2b6e.com^
+||43137c93a82b0e81da.com^
+||435a63dad5.com^
+||43bb528775.com^
+||43t53c9e.de^
+||441a8a5527.com^
+||44288fa514.com^
+||445c1f5df9.com^
+||445d1bd01a.com^
+||44a9217f10.com^
+||44afd3eae5.com^
+||44ffd27303.com^
+||452tapgn.de^
+||45a8826890.com^
+||46186911.vtt^
+||46243b6252.com^
+||463fca0d34.com^
+||466f89f4d1.com^
+||4690y10pvpq8.com^
+||46d84abb3a.com^
+||46d983eade.com^
+||47-ecommercet.com^
+||4721a999e5.com^
+||479457698a.com^
+||47aead8f05.com^
+||47daeb1eac.com^
+||47f9b1fbc5.com^
+||480a70b554.com^
+||48cf8d95a3.com^
+||48da4009ba.com^
+||4901967b4b.com^
+||493b98cce8bc1a2dd.com^
+||495affa75e.com^
+||49af7cee19.com^
+||49b6b77e56.com^
+||4a136c118e.com^
+||4a167ec12d.com^
+||4a623a5a49.com^
+||4b05b6a5e7.com^
+||4b215e3bcf.com^
+||4b41484f8e.com^
+||4b6994dfa47cee4.com^
+||4b7140e260.com^
+||4bb6jls06l.com^
+||4c329124bb.com^
+||4c935d6a244f.com^
+||4cd6c4dceb.com^
+||4d3278a1fa.com^
+||4d3dc84aec.com^
+||4dex.io^
+||4dfdf752cc.com^
+||4dsbanner.net^
+||4dtrk.com^
+||4e645c7cf2.com^
+||4ec2e6f324.com^
+||4ed196b502.com^
+||4ee03689e6.com^
+||4f2sm1y1ss.com^
+||4f369824ed.com^
+||4f4e1936f7.com^
+||4fef80eb73.com^
+||4hfchest5kdnfnut.com^
+||4i-app-mobile.com^
+||4kmovies.online^
+||4luckyf.com^
+||4p74i5b6.de^
+||4rabettraff.com^
+||4tnui5r06j62.com^
+||4wnet.com^
+||4wnetwork.com^
+||5-internads-7.com^
+||5-n-appmobile.com^
+||50382fd2f1.com^
+||506f94d3ef.com^
+||50745a9d63.com^
+||508ec56533e3937e.com^
+||50bcea469a.com^
+||51629c3667.com^
+||5176cedcbf.com^
+||521bec59f1.com^
+||5236b66b81.com^
+||52c9f48b14.com^
+||52ee3dc5fe.com^
+||530bc37e10.com^
+||532xcxypmpnp.com^
+||535a855e66.com^
+||539f346355.com^
+||53c2dtzsj7t1.top^
+||54ec30c53d.com^
+||54y3eh34y3wh34y3h.com^
+||550b3ikb9j.com^
+||550c970411.com^
+||55706cc809.com^
+||5608bd4f7e.com^
+||560fe03925.com^
+||561e861cb4.com^
+||562i7aqkxu.com^
+||5661361104.com^
+||5685dceb1b.com^
+||56bfc388bf12.com^
+||56efa4d7b7.com^
+||56rt2692.de^
+||5721b6baf3.com^
+||5726303d87522d05.com^
+||576de58030.com^
+||5778d0b296.com^
+||57d38e3023.com^
+||57debc89a6.com^
+||58802ce8d9.com^
+||58915e0a30.com^
+||589aa99d18.com^
+||58gs7b32jy.com^
+||590578zugbr8.com^
+||5913757eb5.com^
+||592749d456.com^
+||59a3e34c69.com^
+||59e5e13578.com^
+||59e6ea7248001c.com^
+||59eb44884d.com^
+||5a6c114183.com^
+||5advertise.com^
+||5afc8f3239.com^
+||5b541f17b1.com^
+||5btekl14.de^
+||5c01ad4cb7.com^
+||5c3a967126.com^
+||5c4a902f7e.com^
+||5c577fc74618431b.com^
+||5c58619ab5.com^
+||5c88c350e2.com^
+||5c8ac0803b.com^
+||5ca59a669a.com^
+||5caa478343.com^
+||5cf8606941.com^
+||5d2d04464c.com^
+||5d4170700c.com^
+||5d63ec2d2f.com^
+||5d69ce1b7a.com^
+||5d8dd0486a.com^
+||5da55619e0.com^
+||5dd044e588.com^
+||5dec6805a0.com^
+||5df20e46f3.com^
+||5eb6d14cbe.com^
+||5ee16260b9.com^
+||5f21e7ac93.com^
+||5f450dbe81.com^
+||5f6dmzflgqso.com^
+||5fet4fni.de^
+||5h3oyhv838.com^
+||5icim50.de^
+||5jdhbfjdfg4.monster^
+||5jhsbdjfsdf5.monster^
+||5mno3.com^
+||5nfc.net^
+||5nt1gx7o57.com^
+||5o0ob.top^
+||5o8aj5nt.de^
+||5odjin7ipi.com^
+||5ovrmmmoubi71efvatfd.com^
+||5pi13h3q.de^
+||5toft8or7on8tt.com^
+||5umpz4evlgkm.com^
+||5vbs96dea.com^
+||5vpbnbkiey24.com^
+||5wuefo9haif3.com^
+||5xd3jfwl9e8v.com^
+||6001628d3d.com^
+||600z.com^
+||6016799644.com^
+||6061de8597.com^
+||6068a17eed25.com^
+||606943792a.com^
+||61-nmobads.com^
+||6136100d2a.com^
+||61739011039d41a.com^
+||6179b859b8.com^
+||61b6eab774.com^
+||61ba68472f.com^
+||61c3007cf3.com^
+||6207684432.com^
+||62b70ac32d4614b.com^
+||62f9bb0bbc.com^
+||62h.site^
+||6347032d45.com^
+||63r2vxacp0pr.com^
+||63voy9ciyi14.com^
+||641198810fae7.com^
+||64134c91b6.com^
+||645f89f33c.com^
+||6472bb8689.com^
+||648c44a31f.com^
+||648d969d69.com^
+||6593167243.com^
+||65bfba9ad0.com^
+||65mjvw6i1z.com^
+||65vk1fba34.com^
+||660cba7db1.com^
+||669fb3128e4b4.com^
+||6775afc540.com^
+||68069795d1.com^
+||68109deb96.com^
+||6810f7dd2b.com^
+||684d203fe1.com^
+||6863fd0afc.com^
+||68728e8ec6.com^
+||688de7b3822de.com^
+||68amt53h.de^
+||68e569a3b8.com^
+||6916508c78.com^
+||69852b1734.com^
+||69c28fb7f4.com^
+||69i.club^
+||69oxt4q05.com^
+||69v.club^
+||6a21c55f67.com^
+||6a288eb054.com^
+||6ab77a3dad.com^
+||6af461b907c5b.com^
+||6bbd7f9440.com^
+||6bgaput9ullc.com^
+||6cadb63a7a.com^
+||6ce0a3adc4.com^
+||6d789c3692.com^
+||6db7837ac4.com^
+||6dd4a8313e.com^
+||6e3ee87ff2.com^
+||6ef2279e3d.com^
+||6f752f73ce.com^
+||6fxtpu64lxyt.com^
+||6glece4homah8dweracea.com^
+||6j296m8k.de^
+||6jhsbjdfsdf66.monster^
+||6kportot.com^
+||6l1twlw9fy.com^
+||6ped2nd3yp.com^
+||6qu5dcmyumtw.com^
+||6snjvxkawrtolv2x.pro^
+||6ujk8x9soxhm.com^
+||6v41p4bsq.com^
+||6zy9yqe1ew.com^
+||7-7-7-partner.com^
+||7-itrndsbrands.com^
+||702f5434c8.com^
+||714b1bd263.com^
+||71692fai4cc0.com^
+||71a30cae934e.com^
+||71d7511a4861068.com^
+||71dd1ff9fd.com^
+||71ec0646e6.com^
+||722cba612c.com^
+||7253d56acf.com^
+||72hdgb5o.de^
+||73-j-pinnable.com^
+||734b84bb92.com^
+||7452472e76.com^
+||749cad1027.com^
+||74c5a46eeb.com^
+||751685e7fa.com^
+||754480bd33.com^
+||7618590057.com^
+||7676f1cc6c.com^
+||76a7doiet256.com^
+||771703f2e9.com^
+||777seo.com^
+||778669.com^
+||77bd7b02a8.com^
+||7807091956.com^
+||78359c0779.com^
+||78387c2566.com^
+||788aefb4ed.com^
+||78a3dd3c86.com^
+||78bk5iji.de^
+||78e70720f2.com^
+||799f57f5cc.com^
+||79b1c4498b.com^
+||79c13962d1.com^
+||79c4215c89.com^
+||79dc3bce9d.com^
+||79k52baw2qa3.com^
+||79xmz3lmss.com^
+||7a04a2ab7d.com^
+||7a07c25a29.com^
+||7a75ebcbd7.com^
+||7a7f07591f.com^
+||7a994c3318.com^
+||7abf0af03c.com^
+||7anfpatlo8lwmb.com^
+||7b3937119b.com^
+||7b763dbdf3.com^
+||7bchhgh.de^
+||7c0616849b.com^
+||7c1ecc72c0.com^
+||7c33690bea.com^
+||7ca78m3csgbrid7ge.com^
+||7cc70.com^
+||7d3656bee3.com^
+||7da3a14504.com^
+||7db44be9a6.com^
+||7df1f04330.com^
+||7dshfewr-0ewfivjkys.xyz^
+||7e67f4ccad.com^
+||7e7574cea0.com^
+||7fc0966988.com^
+||7ff83b4a34.com^
+||7fkm2r4pzi.com^
+||7fva8algp45k.com^
+||7hor9gul4s.com^
+||7hu8e1u001.com^
+||7insight.com^
+||7jrahgc.de^
+||7lyonline.com^
+||7me0ssd6.de^
+||7mediaxx-ai.com^
+||7mmtv.top^
+||7nt9p4d4.de^
+||7oc5b1i3v4iu.top^
+||80055404.vtt^
+||800c7864eb.com^
+||806b781310.com^
+||8105bfd0ff.com^
+||81438456aa.com^
+||8170a1da9e.com^
+||81ac5b609b.com^
+||82308721ac.com^
+||823bc1a6cd3f1657.com^
+||82448dceaaa13034.com^
+||824fde6e63.com^
+||827fa7c868b4b.com^
+||82a89f6527.com^
+||82b5cc6199.com^
+||83032d92a4.com^
+||830ea3f4ac.com^
+||8353e36c2a.com^
+||83u7q.top^
+||843acfbeb0.com^
+||847h7f51.de^
+||8499583.com^
+||84aa71fc7c.com^
+||84c08fdae0.com^
+||84cd8c4d7e.com^
+||84de26794f.com^
+||8509717d76.com^
+||85b4ff59c0.com^
+||85c0a6a0ea.com^
+||864feb57ruary.com^
+||86521e18d4.com^
+||8659c84895.com^
+||867df8b139.com^
+||86aa86d2f4.com^
+||86cb1dcb13ba5a1a.com^
+||8739792a55.com^
+||874af125b4.com^
+||87556cfe8f.com^
+||87bcb027cf.com^
+||87c5ce40f8.com^
+||888promos.com^
+||889433.com^
+||88b96b9c4d.com^
+||88d7b6aa44fb8eb.com^
+||88eq7spm.de^
+||8964c6de00.com^
+||89968199c6.com^
+||899h3.top^
+||89dfa3575e.com^
+||8a00fb3fc1.com^
+||8abf43d6ad.com^
+||8b98b1a05a.com^
+||8bb92fbed8.com^
+||8c771f7ea1.com^
+||8d1dce99ab.com^
+||8d3e6ea132.com^
+||8d68be1445.com^
+||8de2448875.com^
+||8dfc9560e0.com^
+||8e41249557.com^
+||8e6d77310c.com^
+||8e9d62ac9b.com^
+||8ec9b7706a.com^
+||8f2587daa3.com^
+||8f28049c79.com^
+||8f72931b99.com^
+||8f74e1229c.com^
+||8fc511071c.com^
+||8gs4unh05aq6.com^
+||8j1f0af5.de^
+||8jay04c4q7te.com^
+||8kj1ldt1.de^
+||8n67t.com^
+||8po6fdwjsym3.com^
+||8s32e590un.com^
+||8sbdjfsdf88.monster^
+||8skjdnkfsdf88.monster^
+||8stream-ai.com^
+||8ue9q7i.com^
+||8wtkfxiss1o2.com^
+||9001476746.com^
+||90935ff0ea.com^
+||90f2a627a3.com^
+||91199a.xyz^
+||9159f9a13d.com^
+||91cd3khn.de^
+||92245a1d7e.com^
+||92f77b89a1b2df1b539ff2772282e19b.com^
+||92f83e092d.com^
+||935cfb1d3b.com^
+||93c398a59e.com^
+||93savmobile-m.com^
+||9403d738ec.com^
+||943d6e0643.com^
+||943e401be2.com^
+||94ded8b16e.com^
+||9522faf9d6.com^
+||95a056626e.com^
+||95f39c9d5f.com^
+||95p5qep4aq.com^
+||95ppq87g.de^
+||95urbehxy2dh.top^
+||964e7c340a.com^
+||96a0af5e81.com^
+||96a8b5ac22.com^
+||96bb66106f.com^
+||9738624519.com^
+||973e017e67.com^
+||97d73lsi.com^
+||97e4ef7bf5.com^
+||9857047066.com^
+||98a54df250.com^
+||9996777888.com^
+||9a0569b55e.com^
+||9a363a4900.com^
+||9a52364ae8.com^
+||9a5cb35bf2.com^
+||9a63a7ab4d.com^
+||9a7c81f58e.com^
+||9ac0da939a.com^
+||9ads.mobi^
+||9af022123c.com^
+||9akjsbjkdasd99.monster^
+||9analytics.live^
+||9ba159e355.com^
+||9bbd72928f.com^
+||9bc94f7305.com^
+||9c4fa152a6.com^
+||9ca976adbb.com^
+||9cbj41a5.de^
+||9cc200fd2f.com^
+||9cd76b4462bb.com^
+||9content.com^
+||9d36cf3402.com^
+||9d407e803d.com^
+||9dmnv9z0gtoh.com^
+||9e1852531b.com^
+||9eb0538646.com^
+||9eb10b7a3d04a.com^
+||9ee93ebe3a.com^
+||9f50508b3c.com^
+||9f62b6f6bf.com^
+||9f84a22351.com^
+||9fa16f5df4.com^
+||9gg23.com^
+||9japride.com^
+||9purdfe9xg.com^
+||9r7i9bo06157.top^
+||9rendezvous-l.com^
+||9s4l9nik.de^
+||9sjdnkfsdf99.monster^
+||9t5.me^
+||9tp9jd4p.de^
+||9tumza4dp4o9.com^
+||9v58v.com^
+||9xeqynu3gt7c.com^
+||9xob25oszs.com^
+||a-94interdads.com^
+||a-ads.com^
+||a-b-c-d.xyz^
+||a-mo.net^
+||a-waiting.com^
+||a06bbd98194c252.com^
+||a11k.com^
+||a14refresh.com^
+||a14tdsa.com^
+||a15c5009bcbe272.com^
+||a1c99093b6.com^
+||a1hosting.online^
+||a26662f21f.com^
+||a2914c746a.com^
+||a2d3d13c41.com^
+||a2nn5eri7ce.com^
+||a2tw6yoodsag.com^
+||a306b8f66f.com^
+||a3141de4a0.com^
+||a31711123d.com^
+||a317654204.com^
+||a356ff8a25.com^
+||a3595ccd38.com^
+||a39fa0bea6.com^
+||a3b8be1b5b.com^
+||a3ion.com^
+||a3yqjsrczwwp.com^
+||a41bd55af8.com^
+||a4334cc1ec.com^
+||a44c39fc52.com^
+||a4mt150303tl.com^
+||a533857c63.com^
+||a57e6264ed.com^
+||a5ca949458.com^
+||a5ff528ff9.com^
+||a5g.oves.biz^
+||a5game.win^
+||a5jogo.biz^
+||a5jogo.club^
+||a6436650df.com^
+||a64x.com^
+||a67z.com^
+||a69i.com^
+||a6c606db45.com^
+||a6dc99d1a8.com^
+||a7165aaaf6.com^
+||a718917a44.com^
+||a81ae971fb.com^
+||a8858f6631.com^
+||a899228ebf.com^
+||a8rm1m4msbbh.com^
+||a9e8387c9e.com^
+||aa53df329975c325.com^
+||aaa.vidox.net^
+||aaaaaco.com^
+||aaacompany.net^
+||aab-check.me^
+||aabbfwupxfbcrz.com^
+||aabproxydomaintests.top^
+||aabproxytests.top^
+||aabproxytestsdomain.top^
+||aabtestsproxydomain.top^
+||aac585e70c.com^
+||aaf26c0e6a.com^
+||aafdcq.com^
+||aagm.link^
+||aarfmftslfz.com^
+||aarghwoning.digital^
+||aarswtcnoz.com^
+||aaseovhxkkggtxj.com^
+||aaxads.com^
+||aayeuxotc.com^
+||ab08706bb4.com^
+||ab1n.net^
+||ab3yssin4i6an.com^
+||ab4tn.com^
+||ab86b.top^
+||ab913aa797e78b3.com^
+||ab93t2kc.de^
+||ab97114bda.com^
+||abacaxiraptors.com^
+||abamatoyer.com^
+||abandonrecommendationwars.com^
+||abange.com^
+||abanicmasons.uno^
+||abaphosis.guru^
+||abasgimental.com^
+||abashfireworks.com^
+||abashinstructor.com^
+||abasshowish.guru^
+||abateall.com^
+||abatorsgleir.com^
+||abattoirpleatsprinkle.com^
+||abayfliffus.com^
+||abazelfan.com^
+||abbagh.com^
+||abberantbeefy.com^
+||abberantdoggie.com^
+||abbeyintervalfetched.com^
+||abbeyoverdue.com^
+||abbgrysbok.store^
+||abbotpredicateemma.com^
+||abbreviatepoisonousmonument.com^
+||abbronzongor.com^
+||abbtrupp.com^
+||abburmyer.com^
+||abcconducted.com^
+||abciwvjp.com^
+||abclefabletor.com^
+||abcogzozbk.com^
+||abcporntube.com^
+||abdalitroilus.com^
+||abdely.com^
+||abdicatehorrified.com^
+||abdict.com^
+||abdlnk.com^
+||abdlnkjs.com^
+||abdomscrae.com^
+||abdsp.com^
+||abdurantom.com^
+||abedgobetweenbrittle.com^
+||abedwest.com^
+||abeenrwvyrew.top^
+||abevc.club^
+||abgeobalancer.com^
+||abgligarchan.com^
+||abh.jp^
+||abhorboring.com^
+||abhorcarious.com^
+||abidedfloria.website^
+||abidepeachy.com^
+||abiderestless.com^
+||abjectionblame.com^
+||abjectionomnipresent.com^
+||abjectionremarksdisarm.com^
+||abjurecurfs.website^
+||abkajbvozmbwa.top^
+||abkoxlikbzs.com^
+||abkynrclyom.com^
+||ablatesgascon.cam^
+||ableandworld.info^
+||abletoprese.org^
+||ablitleoor.com^
+||abluentshinny.com^
+||abluvdiscr.com^
+||ablybeastssarcastic.com^
+||abmunnaa.com^
+||abnegationbanquet.com^
+||abnegationsnuff.com^
+||abnetfriths.com^
+||abnormalwidth.com^
+||abnrkespuk.com^
+||aboaordhisis.xyz^
+||aboardhotdog.com^
+||aboarea.com^
+||abochro.com^
+||aboenab.com^
+||abohara.com^
+||abolaed.com^
+||abolid.com^
+||abolishmentengaged.com^
+||abolishmentglum.com^
+||abombu.com^
+||abomisi.com^
+||abonnementpermissiveenliven.com^
+||abopeol.com^
+||abordy.com^
+||aboriginalhubby.com^
+||abothe.com^
+||aboucaih.com^
+||aboung.com^
+||aboutpersonify.com^
+||aboveredirect.top^
+||abovethecityo.com^
+||abpicsrc.com^
+||abpjs23.com^
+||abqmfewisf.com^
+||abrasivematch.com^
+||abrhydona.com^
+||abridgeoverwhelmfireball.com^
+||abroniamarkup.com^
+||abruptcompliments.com^
+||abruptlyretortedbat.com^
+||abruptnesscarrier.com^
+||abruptradishnotwithstanding.com^
+||abruth.com^
+||abseelon.com^
+||absentlygratefulcamomile.com^
+||absentlymoreoverwell.com^
+||absentlyrindbulk.com^
+||absentsphonies.com^
+||abservinean.com^
+||abseydeveled.com^
+||absjcirtbhm.com^
+||abskursin.com^
+||absolute-honey.pro^
+||absolutechapelequation.com^
+||absolutelytowns.com^
+||absoluteroute.com^
+||absolutionexpert.com^
+||absolvecarriagenotify.com^
+||absolvehostkilled.com^
+||absolveparticlesanti.com^
+||absorbedscholarsvolatile.com^
+||absorbedswept.com^
+||absorbingconstitution.com^
+||absorbinginject.com^
+||absorptionpersonalforesee.com^
+||absors.com^
+||abstaininquisitive.com^
+||absump.com^
+||abtaurosa.club^
+||abtyroguean.com^
+||abtyroguer.com^
+||abuleiasafflow.com^
+||abundantservantexact.com^
+||abundantsurroundvacation.com^
+||abuqxvuy.com^
+||abusedbabysitters.com^
+||abusedthrown.com^
+||abusiveserving.com^
+||abwattfrutex.com^
+||abwhyag.com^
+||abyamaskor.com^
+||abyescaplock.guru^
+||acacdn.com^
+||acacdn.xyz^
+||academic-information.com^
+||academicvast.com^
+||academyblocked.com^
+||academyenrage.com^
+||acalraiz.xyz^
+||acaussee.net^
+||acbbpadizl.com^
+||accahurkaru.com^
+||accdhcxcbzck.com^
+||acce3bc0f4.com^
+||accedeethnic.com^
+||accedenonre.club^
+||accedenonre.xyz^
+||acceleratedrummer.com^
+||acceleratemouse.com^
+||acceleratenovice.com^
+||accentamong.com^
+||accentneglectporter.com^
+||acceptable-progress.pro^
+||acceptablearablezoological.com^
+||access-mc.com^
+||access.vidox.net^
+||accessdatatrack.com^
+||accesshomeinsurance.co^
+||accessiblescopevisitor.com^
+||accessorydistantdepths.com^
+||accidentalinfringementfat.com^
+||accidentallyrussian.com^
+||accids.com^
+||acclaimcraftsman.com^
+||accmgr.com^
+||accoladethoroughly.com^
+||accommodatingremindauntie.com^
+||accommodationcarpetavid.com^
+||accompanycollapse.com^
+||accompanyingjean.com^
+||accomplicepeach.com^
+||accomplishedacquaintedbungalow.com^
+||accomplishmentailmentinsane.com^
+||accomplishmentformation.com^
+||accomplishmentmentalresurrection.com^
+||accomplishmentstrandedcuddle.com^
+||accordancespotted.com^
+||accordaudienceeducational.com^
+||accountdolphinframe.com^
+||accountsdead.com^
+||accruefierceheartache.com^
+||accruerkopecks.com^
+||accumulateboring.com^
+||accusationcollegeload.com^
+||accustomedinaccessible.com^
+||accustomreview.com^
+||acdcdn.com^
+||acdcmarimo.com^
+||acdn01.vidox.net^
+||acediscover.com^
+||acedtousles.com^
+||acelacien.com^
+||acendantoftheq.xyz^
+||aceporntube.com^
+||acerbityjessamy.com^
+||acertb.com^
+||acfsxqoa.com^
+||acfyamxwluprpx.com^
+||achaipheegly.com^
+||achcdn.com^
+||achecaskmeditate.com^
+||acheercohen.store^
+||achelessintegralsigh.com^
+||acheworry.com^
+||achievablecpmrevenue.com^
+||achievebeneficial.com^
+||achievehardboiledheap.com^
+||achilles-par.com^
+||achmic.com^
+||achnic.com^
+||achuphaube.com^
+||achurt.com^
+||achyrepeatitchy.com^
+||acidpigs.com^
+||acinicmislaid.com^
+||acjkuejxcqfp.com^
+||ackcdn.net^
+||aclickads.com^
+||aclktrkr.com^
+||acloudvideos.com^
+||acmaknoxwo.com^
+||acme.vidox.net^
+||acocpcvm.com^
+||acofrnsr44es3954b.com^
+||acollo.info^
+||acoolreknit.com^
+||acostaom.com^
+||acquaintanceexemptspinach.com^
+||acquaintanceinsaneinaudible.com^
+||acquaintedexpectations.com^
+||acquaintedpostman.com^
+||acquirethem.com^
+||acrepantherrecite.com^
+||acrevenene.com^
+||acridtubsource.com^
+||acrossbrittle.com^
+||acrosscrash.com^
+||acrossgigantic.com^
+||acrossheadquartersanchovy.com^
+||acrote.com^
+||acrowl.com^
+||acscdn.com^
+||acsshufxnu.com^
+||acsxpbhbsuk.com^
+||actiflex.org^
+||actio.systems^
+||activatejargon.com^
+||activatestoolpoise.com^
+||activelysmileintimate.com^
+||activemetering.com^
+||activeoffbracelet.com^
+||activephilosophy.pro^
+||activepoststale.com^
+||activitytonic.com^
+||actpbfa.com^
+||actpx.com^
+||actressdoleful.com^
+||actrkn.com^
+||actuallyfrustration.com^
+||actuallyhierarchyjudgement.com^
+||actuallysheep.com^
+||actualprocedureswaver.com^
+||actualreflection.com^
+||actyle.com^
+||actyot.com^
+||acuityplatform.com^
+||aculturerpa.info^
+||acutepropose.com^
+||acvhfltsolocor.xyz^
+||acvnhayikyutjsn.xyz^
+||acvx.host^
+||ad-back.net^
+||ad-balancer.net^
+||ad-bay.com^
+||ad-cheers.com^
+||ad-clicks.com^
+||ad-delivery.net^
+||ad-flow.com^
+||ad-guardian.com^
+||ad-indicator.com^
+||ad-m.asia^
+||ad-mapps.com^
+||ad-maven.com^
+||ad-nex.com^
+||ad-recommend.com^
+||ad-score.com^
+||ad-server.co.za^
+||ad-serverparc.nl^
+||ad-srv.net^
+||ad-stir.com^
+||ad-vice.biz^
+||ad-vortex.com^
+||ad-wheel.com^
+||ad.gt^
+||ad.guru^
+||ad.linksynergy.com^
+||ad.mox.tv^
+||ad120m.com^
+||ad127m.com^
+||ad1data.com^
+||ad1de41c7f.com^
+||ad1rtb.com^
+||ad2up.com^
+||ad2upapp.com^
+||ad399fae94.com^
+||ad4.com.cn^
+||ad6011520d.com^
+||ad64463ef9.com^
+||ad999.biz^
+||adactioner.com^
+||adanad.name^
+||adaptationbodilypairs.com^
+||adaptcunning.com^
+||adaranth.com^
+||adaround.net^
+||adarutoad.com^
+||adb7rtb.com^
+||adbidgo.com^
+||adbison-redirect.com^
+||adbit.co^
+||adblock-guru.com^
+||adblock-one-protection.com^
+||adblock-pro-download.com^
+||adblock-pro.org^
+||adblock-zen-download.com^
+||adblock-zen.com^
+||adblockanalytics.com^
+||adblockers.b-cdn.net^
+||adblockervideo.com^
+||adbmi.com^
+||adbooth.com^
+||adbooth.net^
+||adbox.lv^
+||adbrite.com^
+||adbro.me^
+||adbrook.com^
+||adbuddiz.com^
+||adbuff.com^
+||adbuka.com.ng^
+||adbull.com^
+||adbureau.net^
+||adbutler-fermion.com^
+||adbutler.com^
+||adbuyer.com^
+||adcannyxml.com^
+||adcash.com^
+||adcastplus.net^
+||adcde.com^
+||adcdnx.com^
+||adcentrum.net^
+||adchap.com^
+||adchemical.com^
+||adcl1ckspr0f1t.com^
+||adclerks.com^
+||adclick.pk^
+||adclickmedia.com^
+||adclicks.io^
+||adcloud.net^
+||adcolo.com^
+||adconjure.com^
+||adcovery.com^
+||adcrax.com^
+||adcron.com^
+||addelive.com^
+||addin.icu^
+||addinginstancesroadmap.com^
+||addiply.com^
+||additionalcasualcabinet.com^
+||additionalmedia.com^
+||additionfeud.com^
+||additionindianscontentment.com^
+||additionsmiracle.com^
+||additionssurvivor.com^
+||additionsyndrome.com^
+||additiontreason.com^
+||addizhi.top^
+||addkt.com^
+||addlnk.com^
+||addoer.com^
+||addonsmash.com^
+||addotnet.com^
+||addresseeboldly.com^
+||addresseepaper.com^
+||addresseetransportationsyndrome.com^
+||addresshisselephant.com^
+||addresslegbreathless.com^
+||addresssupernaturalwitchcraft.com^
+||addroplet.com^
+||addthief.com^
+||adeditiontowri.org^
+||adeepado.xyz^
+||adenza.dev^
+||adeptfleamisjudge.com^
+||aderymuchadmir.com^
+||adevbom.com^
+||adevppl.com^
+||adex.media^
+||adexchangecloud.com^
+||adexchangedirect.com^
+||adexchangegate.com^
+||adexchangeguru.com^
+||adexchangemachine.com^
+||adexchangeprediction.com^
+||adexchangetracker.com^
+||adexcite.com^
+||adexmedias.com^
+||adexprt.com^
+||adexprts.com^
+||adf4fdd723.com^
+||adfahrapps.com^
+||adfeedstrk.com^
+||adfgetlink.net^
+||adfgfeojqx.com^
+||adfootprints.com^
+||adforcast.com^
+||adforgeinc.com^
+||adfpoint.com^
+||adframesrc.com^
+||adfrontiers.com^
+||adfunkyserver.com^
+||adfusion.com^
+||adg99.com^
+||adgardener.com^
+||adgebra.co.in^
+||adglare.net^
+||adglare.org^
+||adglaze.com^
+||adgoi.com^
+||adgorithms.com^
+||adgsdchh.xyz^
+||adhealers.com^
+||adherenceenmitycentury.com^
+||adhoc4.net^
+||adhub.digital^
+||adiingsinspiri.org^
+||adiquity.com^
+||adirtlseividwhik.xyz^
+||aditsafeweb.com^
+||adjectivedollaralmost.com^
+||adjoincomprise.com^
+||adjoincultivatedrussian.com^
+||adjournfaintlegalize.com^
+||adjs.media^
+||adjustbedevilsweep.com^
+||adjustcolonyfaintest.com^
+||adjusteddrug.com^
+||adjustedminglecamouflage.com^
+||adjustmentmonarch.com^
+||adjustmentstraightenstartle.com^
+||adjuve.info^
+||adjux.com^
+||adkaora.space^
+||adkernel.com^
+||adklimages.com^
+||adl-hunter.com^
+||adlane.info^
+||adligature.com^
+||adlogists.com^
+||adlserq.com^
+||adltserv.com^
+||admachina.com^
+||admanmedia.com^
+||admax.network^
+||adme-net.com^
+||admedia.network^
+||admeme.net^
+||admeridianads.com^
+||admez.com^
+||admicro.vn^
+||admidainsight.com^
+||admiredexcrete.com^
+||admiredinde.com^
+||admiringinsightstops.com^
+||admissiblecontradictthrone.com^
+||admission.net^
+||admissionreceipt.com^
+||admitad-connect.com^
+||admitad.com^
+||admith.com^
+||admitoutspokensupreme.com^
+||admittancehubbyfirm.com^
+||admittancetoy.com^
+||admixer.net^
+||admjmp.com^
+||admob.com^
+||admobe.com^
+||admothreewallent.com^
+||adnami2.io^
+||adnetworkme.com^
+||adnetworkperformance.com^
+||adnext.fr^
+||adngin.com^
+||adnico.jp^
+||adnigma.com^
+||adnimo.com^
+||adnotebook.com^
+||adnqdnxclmml.com^
+||adnxs-simple.com^
+||adnxs.com^
+||adnxs.net^
+||adnxs1.com^
+||adocean.pl^
+||adohana.com^
+||adojobless.com^
+||adolescentcounty.pro^
+||adolescentshirt.com^
+||adomic.com^
+||adonion.com^
+||adonweb.ru^
+||adoopaqueentering.com^
+||adop.co^
+||adop.pw^
+||adoperatorx.com^
+||adopexchange.com^
+||adoptdischarged.com^
+||adoptum.net^
+||adorableold.com^
+||adorablespace.pro^
+||adorerabid.com^
+||adorika.net^
+||adornenveloperecognize.com^
+||adornmadeup.com^
+||adotic.com^
+||adotmob.com^
+||adotone.com^
+||adotube.com^
+||adovr.com^
+||adpacks.com^
+||adpartner.pro^
+||adparty.click^
+||adpass.co.uk^
+||adpatrof.com^
+||adperium.com^
+||adpinion.com^
+||adpionier.de^
+||adplushub.com^
+||adplxmd.com^
+||adpmbglobal.com^
+||adpod.in^
+||adpointrtb.com^
+||adpone.com^
+||adprosrv.com^
+||adquery.io^
+||adquet.com^
+||adrcdn.com^
+||adreadytractions.com^
+||adrealclick.com^
+||adrecreate.com^
+||adrenalpop.com^
+||adrenovate.com^
+||adrent.net^
+||adrevenueclone.com^
+||adrevenuerescue.com^
+||adrglife.com^
+||adrgyouguide.com^
+||adright.co^
+||adro.pro^
+||adroitontoconstraint.com^
+||adrokt.com^
+||adrunnr.com^
+||ads-delivery.b-cdn.net^
+||ads-static.conde.digital^
+||ads-twitter.com^
+||ads.lemmatechnologies.com^
+||ads.rd.linksynergy.com^
+||ads1-adnow.com^
+||ads2-adnow.com^
+||ads2550.bid^
+||ads2ads.net^
+||ads3-adnow.com^
+||ads4g.pl^
+||ads4trk.com^
+||ads5-adnow.com^
+||adsafeprotected.com^
+||adsafety.net^
+||adsagony.com^
+||adsalo.com^
+||adsame.com^
+||adsandcomputer.com^
+||adsassure.com^
+||adsbar.online^
+||adsbeard.com^
+||adsblocker-ultra.com^
+||adsblockersentinel.info^
+||adsbtrk.com^
+||adscale.de^
+||adscampaign.net^
+||adschill.com^
+||adscienceltd.com^
+||adsco.re^
+||adscreendirect.com^
+||adscustsrv.com^
+||adsdk.com^
+||adsdot.ph^
+||adsemirate.com^
+||adsemo.com^
+||adsensecamp.com^
+||adsensecustomsearchads.com^
+||adser.io^
+||adserve.ph^
+||adserved.net^
+||adserverplus.com^
+||adserverpub.com^
+||adservicemedia.dk^
+||adservon.com^
+||adservr.de^
+||adservrs.com^
+||adsessionserv.com^
+||adsexo.com^
+||adsfac.eu^
+||adsfac.net^
+||adsfac.us^
+||adsfactor.net^
+||adsfan.net^
+||adsfcdn.com^
+||adsforcomputercity.com^
+||adsforindians.com^
+||adsfundi.com^
+||adsfuse.com^
+||adshack.com^
+||adshexa.com^
+||adshoper.com^
+||adshopping.com^
+||adshort.space^
+||adsignals.com^
+||adsilo.net^
+||adsilo.pro^
+||adsimilis.com^
+||adsinimages.com^
+||adsinstant.com^
+||adskape.ru^
+||adskeeper.co.uk^
+||adskeeper.com^
+||adskpak.com^
+||adslidango.com^
+||adslingers.com^
+||adsloom.com^
+||adslot.com^
+||adsluna.com^
+||adslvr.com^
+||adsmaestro.com^
+||adsmarket.com^
+||adsmiscellaneouswalked.com^
+||adsnative.com^
+||adsnetworkplus.com^
+||adsnetworkserver.com^
+||adsoftware.top^
+||adsomi.com^
+||adsonar.com^
+||adsoptimal.com^
+||adsovo.com^
+||adsp.com^
+||adspdbl.com^
+||adspeed.net^
+||adspirit.de^
+||adsplay.in^
+||adspop.me^
+||adspredictiv.com^
+||adspyglass.com^
+||adspynet.com^
+||adsrv.me^
+||adsrv.wtf^
+||adstarget.net^
+||adstargets.com^
+||adstico.io^
+||adstook.com^
+||adstracker.info^
+||adstreampro.com^
+||adstripe.net^
+||adsupply.com^
+||adsupplyssl.com^
+||adsurve.com^
+||adsvids.com^
+||adsvolum.com^
+||adsvolume.com^
+||adswam.com^
+||adswizz.com^
+||adsxyz.com^
+||adt328.com^
+||adt545.net^
+||adt567.net^
+||adt574.com^
+||adt598.com^
+||adtag.cc^
+||adtags.mobi^
+||adtaily.com^
+||adtaily.pl^
+||adtclickwhite.com^
+||adthereis.buzz^
+||adtival.com^
+||adtlgc.com^
+||adtlvnxmht.com^
+||adtng.com^
+||adtoadd.com^
+||adtoll.com^
+||adtoma.com^
+||adtomafusion.com^
+||adtonement.com^
+||adtoox.com^
+||adtorio.com^
+||adtotal.pl^
+||adtpix.com^
+||adtrace.online^
+||adtrace.org^
+||adtrgt.com^
+||adtrieval.com^
+||adtrk18.com^
+||adtrue.com^
+||adtrue.info^
+||adtrue24.com^
+||adtvedk.com^
+||adulatorycrappyghastly.com^
+||adulatorydigestionmanicure.com^
+||aduld.click^
+||adult-affiliate.link^
+||adultadvertising.net^
+||adultcamchatfree.com^
+||adultcamfree.com^
+||adultcamliveweb.com^
+||adulterygreetimpostor.com^
+||adultgameexchange.com^
+||adultiq.club^
+||adultlinkexchange.com^
+||adultmoviegroup.com^
+||adultoafiliados.com.br^
+||adultscrutchthey.com^
+||adultsense.net^
+||adultsense.org^
+||adultsjuniorfling.com^
+||adultterritory.net^
+||adupwewdsk.com^
+||adv9.net^
+||advancementaccrue.com^
+||advancenopregnancy.com^
+||advancinginfinitely.com^
+||advancingrecruitingamy.com^
+||advang.com^
+||advantageglobalmarketing.com^
+||advantagesclotblend.com^
+||advantageseliminatebystander.com^
+||advantageshallwayasks.com^
+||advantagespire.com^
+||advard.com^
+||adventory.com^
+||adventureprojectiononly.com^
+||adventurercraft.com^
+||adventureurgently.com^
+||adventurouscomprehendhold.com^
+||adventurouscondensedrebuff.com^
+||adverbrequire.com^
+||adverpub.com^
+||adversaldisplay.com^
+||adversalservers.com^
+||adverserve.net^
+||adversespurt.com^
+||adversesuffering.com^
+||advertbox.us^
+||adverti.io^
+||advertica-cdn.com^
+||advertica-cdn2.com^
+||advertica.ae^
+||advertica.com^
+||advertiserurl.com^
+||advertiseserve.com^
+||advertiseworld.com^
+||advertiseyourgame.com^
+||advertising-cdn.com^
+||advertisingiq.com^
+||advertisingvalue.info^
+||advertjunction.com^
+||advertlane.com^
+||advertlets.com^
+||advertmarketing.com^
+||advertmedias.com^
+||advertnetworks.com^
+||advertpay.net^
+||advfeeds.com^
+||advgalaxy.com^
+||advinci.co^
+||adviralmedia.com^
+||advise.co^
+||advisefirmly.com^
+||advisorded.com^
+||adviva.net^
+||advmaker.ru^
+||advmaker.su^
+||advmonie.com^
+||advotionhot.com^
+||advsmedia.net^
+||advtrkone.com^
+||advymjwwsuhs.com^
+||adwalte.info^
+||adway.org^
+||adwx6vcj.com^
+||adx1.com^
+||adxadserv.com^
+||adxbid.info^
+||adxchg.com^
+||adxfire.in^
+||adxion.com^
+||adxite.com^
+||adxnexus.com^
+||adxpansion.com^
+||adxpartner.com^
+||adxplay.com^
+||adxpower.com^
+||adxpremium.services^
+||adxprtz.com^
+||adxscope.com^
+||adxsrver.com^
+||adxxx.biz^
+||adzfun.me^
+||adzhub.com^
+||adziff.com^
+||adzincome.in^
+||adzintext.com^
+||adzmarket.net^
+||adzmedia.com^
+||adzmob.com^
+||adzoc.com^
+||adzonk.com^
+||adzouk1tag.com^
+||adzpier.com^
+||adzpower.com^
+||adzs.com^
+||ae064ae81c.com^
+||ae1a1e258b8b016.com^
+||aeb92e4b9d.com^
+||aebadu.com^
+||aebwmemfebks.xyz^
+||aec40f9e073ba6.com^
+||aeeg5idiuenbi7erger.com^
+||aefeeqdlnh.com^
+||aeffe3nhrua5hua.com^
+||aegiumks.com^
+||aejslgc.com^
+||aekhfdpxcw.com^
+||aembxbxmnuspyr.com^
+||aeneasclosure.website^
+||aerariacongoni.uno^
+||aerialmistaken.com^
+||aerjnuloxlth.com^
+||aerobiabassing.com^
+||aeroplaneversion.com^
+||aeroselabite.space^
+||aerotowoutrush.website^
+||aerotowrefit.com^
+||aesand.com^
+||aesary.com^
+||aesaul.com^
+||aevpinebvmdhih.com^
+||af91c27a8e.com^
+||afaiphee.xyz^
+||afcnuchxgo.com^
+||afcontent.net^
+||afcyhf.com^
+||afdads.com^
+||afdashrafi.com^
+||afdrivovoq.com^
+||afdumnnhg.com^
+||afearprevoid.com^
+||aff-online.com^
+||aff-track.net^
+||aff.biz^
+||aff1xstavka.com^
+||affableindigestionstruggling.com^
+||affairsmithbloke.com^
+||affall.com^
+||affasi.com^
+||affbot1.com^
+||affbot3.com^
+||affcpatrk.com^
+||affectincentiveyelp.com^
+||affectionatebid.pro^
+||affectionateinterferingbarrister.com^
+||affectionatelypart.com^
+||affectionateselfserviceclothe.com^
+||affectionsexterminate.com^
+||affelseaeinera.org^
+||affelseaeineral.xyz^
+||affichwhists.uno^
+||affili.st^
+||affiliate-robot.com^
+||affiliate-wg.com^
+||affiliateboutiquenetwork.com^
+||affiliatedrives.com^
+||affiliateer.com^
+||affiliatefuel.com^
+||affiliatefuture.com^
+||affiliategateways.co^
+||affiliatelounge.com^
+||affiliatemembership.com^
+||affiliatenetwork.co.za^
+||affiliates.systems^
+||affiliatesensor.com^
+||affiliatewindow.com^
+||affiliation-france.com^
+||affiliationworld.com^
+||affilijack.de^
+||affiliserve.com^
+||affinitad.com^
+||affinity.com^
+||affinitycycleablaze.com^
+||affiz.net^
+||afflat3a1.com^
+||afflat3d2.com^
+||afflictionpetulant.com^
+||affluencesoap.com^
+||affluentmirth.com^
+||affluentretinueelegance.com^
+||affluentscuffle.com^
+||affluentshinymulticultural.com^
+||affmoneyy.com^
+||affordspoonsgray.com^
+||affordstrawberryoverreact.com^
+||affordswear.com^
+||affpa.top^
+||affplanet.com^
+||affstrack.com^
+||affstreck.com^
+||afftrack.com^
+||afftrackr.com^
+||afftrk.online^
+||affusekantars.uno^
+||affyrolo.info^
+||afgham.com^
+||afgr1.com^
+||afgr10.com^
+||afgr11.com^
+||afgr2.com^
+||afgr3.com^
+||afgr4.com^
+||afgr5.com^
+||afgr6.com^
+||afgr7.com^
+||afgr8.com^
+||afgr9.com^
+||afgtrwd1.com^
+||afgwciwbjxcsfro.com^
+||afgwsgl.com^
+||afgzipohma.com^
+||afkwa.com^
+||afm01.com^
+||afodreet.net^
+||afootulnas.com^
+||afootwitword.com^
+||aforepayoffstutter.com^
+||afosseel.net^
+||afr4g5.de^
+||afrage.com^
+||afraid-standard.pro^
+||afraidsoil.pro^
+||afrant.com^
+||afre.guru^
+||afreetsat.com^
+||afrfmyzaka.com^
+||africaewgrhdtb.com^
+||africawin.com^
+||afriflatry.co^
+||afshanthough.pro^
+||afsharsyngamy.com^
+||afssdmin.com^
+||afswkdjdma.com^
+||afteed.com^
+||aftenn.com^
+||afterdownload.com^
+||afterdownloads.com^
+||afternoonshipment.com^
+||afterpastimebottled.com^
+||afterwardcounsel.com^
+||afterwardspenal.com^
+||afterwardstationquestions.com^
+||aftqhamina.com^
+||aftrangale.com^
+||aftrk1.com^
+||aftrk3.com^
+||afvwwjcplvq.com^
+||afwpc.com^
+||afywhecpi.com^
+||agabreloomr.com^
+||agacelebir.com^
+||agacqvofrszqy.com^
+||agadata.online^
+||agaenteitor.com^
+||agafurretor.com^
+||agagaure.com^
+||againboundless.com^
+||againirksomefutile.com^
+||againponderous.com^
+||againstpipepierre.com^
+||agajx.com^
+||agakoffingan.com^
+||agalarvitaran.com^
+||agalitecrashed.com^
+||agamagcargoan.com^
+||agamantykeon.com^
+||agamoidroughly.life^
+||agaomastaran.com^
+||agapaezeal.com^
+||agapdqgysuipwz.com^
+||agapi-fwz.com^
+||agatarainpro.com^
+||agauxietor.com^
+||agavanilliteom.com^
+||agazpeppily.live^
+||agbituvdiolfdyp.com^
+||agbxppmdgobbsd.xyz^
+||agcdn.com^
+||ageandinone.org^
+||ageandinone.xyz^
+||agency2.ru^
+||ageory.com^
+||ageteexomis.com^
+||agffrusilj.com^
+||agfsppekuik.com^
+||aggestose.com^
+||aggravatecapeamoral.com^
+||aggregatedcolonizebracket.com^
+||aggregateknowledge.com^
+||aggregationmulecontribution.com^
+||aggressivefrequentneckquirky.com^
+||aggrologis.top^
+||aghaneefigurae.com^
+||aghastmardy.website^
+||aghppuhixd.com^
+||agisdayra.com^
+||agitated-potential.pro^
+||agitationdispense.com^
+||agkjigcuh.com^
+||agle21xe2anfddirite.com^
+||agletmagilp.com^
+||aglocobanners.com^
+||agloogly.com^
+||agloowie.com^
+||agmtrk.com^
+||agngplsooascil.com^
+||agnizedmeddles.store^
+||agnoetecluster.uno^
+||agnrcrpwyyn.com^
+||agonelambes.website^
+||agonizing-price.pro^
+||agonybedroom.com^
+||agooxouy.net^
+||agoutafrecket.digital^
+||agqovdqajj.com^
+||agraglie.net^
+||agrarianbeepsensitivity.com^
+||agreeable-target.pro^
+||agreeableopinion.pro^
+||agreedrunawaysalty.com^
+||agreeingflippantointment.com^
+||agregadorcode.com^
+||agriculturalpraise.com^
+||agriculturaltacticautobiography.com^
+||agriculturealso.com^
+||agrilusingest.com^
+||agtsavates.top^
+||agujvjrpnins.com^
+||agukalty.net^
+||agurgeed.net^
+||agweaaf.net^
+||agweaaf.org^
+||agxifqyum.xyz^
+||ahabcaca.com^
+||ahabmcdsrwlau.com^
+||ahadsply.com^
+||ahagreatlypromised.com^
+||ahaheartburndo.com^
+||ahaurgoo.net^
+||ahbdsply.com^
+||ahcapzoqgyw.com^
+||ahcdsply.com^
+||ahdytiyc.xyz^
+||aheale.com^
+||ahean.com^
+||aheaptorsos.life^
+||aheave.com^
+||ahedrankslowl.com.ua^
+||ahedrankslowwe.xyz^
+||aheightbaaing.website^
+||ahjshyoqlo.com^
+||ahlefind.com^
+||ahoxirsy.com^
+||ahporntube.com^
+||ahqpqpdjpj.com^
+||ahreprh2kfk8rfjr09.com^
+||ahscdn.com^
+||ahstrelgnh.com^
+||ahtalcruzv.com^
+||ahuacasheely.top^
+||ahwbedsd.xyz^
+||aibsgc.com^
+||aibwjqpo.xyz^
+||aidata.io^
+||aidspectacle.com^
+||aigaithojo.com^
+||aightutaitlastwe.xyz^
+||aigligno.net^
+||aigneloa.com^
+||aihoasso.net^
+||aikat-vim.com^
+||aikboypeoriqk.com^
+||aikraboo.com^
+||aikraith.net^
+||aikravoapu.com^
+||ailpielei.com^
+||ailrouno.net^
+||ailsomse.net^
+||ailteesh.net^
+||ailtumty.net^
+||ailwayssteverin.com^
+||aimairou.net^
+||aimatch.com^
+||aimingaye.com^
+||aimlessstrewwhistling.com^
+||aimpocket.com^
+||aimpooft.com^
+||aimvaria.live^
+||aineghoo.xyz^
+||ainingukmo.xyz^
+||aino2.com^
+||ainuftou.net^
+||aipofeem.net^
+||aiqidwcfrm.com^
+||airairgu.com^
+||airartapt.site^
+||aircraftairliner.com^
+||airdoamoord.com^
+||airlessquotationtroubled.com^
+||airlinerappetizingcoast.com^
+||airlinerlibrariesfavour.com^
+||airoupha.xyz^
+||airpush.com^
+||airsaurd.com^
+||airsoang.net^
+||airthabolete.com^
+||airticmonsoa.com^
+||airydeservesannounce.com^
+||aisaipty.xyz^
+||aisrvyvstyq.xyz^
+||aistekso.net^
+||aistgsgxvsrywhf.com^
+||aistthatheha.xyz^
+||aitarsou.com^
+||aitsatho.com^
+||aivoonsa.xyz^
+||aixcdn.com^
+||aizglunbhfq.com^
+||aj1052.online^
+||aj1070.online^
+||aj1090.online^
+||aj1432.online^
+||aj1559.online^
+||aj1574.online^
+||aj1616.online^
+||aj1716.online^
+||aj1907.online^
+||aj1913.online^
+||aj1985.online^
+||aj2031.online^
+||aj2218.online^
+||aj2396.online^
+||aj2397.online^
+||aj2430.online^
+||aj2495.online^
+||aj2526.bid^
+||aj2532.bid^
+||aj2550.bid^
+||ajaltoly.com^
+||ajar-substance.com^
+||ajarodds.com^
+||ajdbwugpyjhrm.com^
+||ajestigie.com^
+||ajfnee.com^
+||ajillionmax.com^
+||ajiwqmnh.com^
+||ajjhtetv87.com^
+||ajjkmoyjlbjj.top^
+||ajkzd9h.com^
+||ajozrjh.com^
+||ajrkm1.com^
+||ajvjpupava.com^
+||ajvnragtua.com^
+||ajxx98.online^
+||ak-tracker.com^
+||akaiksots.com^
+||akazginhapping.com^
+||akchapxw.com^
+||akdbr.com^
+||akdcunfxex.com^
+||akeedser.com^
+||akefhxav.top^
+||akgltsptchpq.com^
+||akhyanaoverhot.com^
+||akikumu.com^
+||akilifox.com^
+||akinrevenueexcited.com^
+||aklorswikk.com^
+||akmxts.com^
+||aksleaj.com^
+||aktwusgwep.com^
+||akutapro.com^
+||akzfxmgcq.com^
+||alacrityimitation.com^
+||alamortairn.com^
+||alanibelen.com^
+||alanticgecking.uno^
+||alargeredrubygsw.com^
+||alargeredrubygsw.info^
+||alas4kanmfa6a4mubte.com^
+||alaskan4kleeskai.com^
+||alasvow.com^
+||alban-mro.com^
+||albaniablandly.space^
+||albeitinflame.com^
+||albercascorse.com^
+||albireo.xyz^
+||albraixentor.com^
+||albumsignaturerequested.com^
+||albynloxia.website^
+||alcatza.com^
+||alcesinassing.xyz^
+||alchemysocial.com^
+||alcoholsupervisiondisplace.com^
+||alcovesoftenedenthusiastic.com^
+||alcroconawa.com^
+||alcult.com^
+||aldosesmajeure.com^
+||aldragalgean.com^
+||alecanjan.com^
+||alecclause.com^
+||alecmeantimehe.com^
+||alefrfobkoxbgaf.com^
+||alegnoackerg.com^
+||aleilu.com^
+||alertlogsemployer.com^
+||alesneogaea.com^
+||alespeonor.com^
+||aletrenhegenmi.com^
+||alexasrandy.website^
+||alexatracker.com^
+||alexicallowed.digital^
+||alexisclou.top^
+||alezanlig.store^
+||alfasense.com^
+||alfatraffic.com^
+||alfkiel.com^
+||alfonsino.top^
+||alfpair.com^
+||alfredpoleshipwreck.com^
+||alfredvariablecavalry.com^
+||alfurtembe.com^
+||algalileac.com^
+||algjqsuzialktg.com^
+||algolduckan.com^
+||algothitaon.com^
+||algovid.com^
+||alhypnoom.com^
+||alia-iso.com^
+||aliadvert.ru^
+||aliasfoot.com^
+||aliastryalways.com^
+||alibisprocessessyntax.com^
+||alibistated.com^
+||alienateappetite.com^
+||alieneepunta.com^
+||aliensold.com^
+||aliensplitch.com^
+||alifafdlnjeruif.com^
+||alifbouche.digital^
+||alightbornbell.com^
+||alighttelescopecausing.com^
+||alignclamstram.com^
+||alignmentflattery.com^
+||alimonyarmisticesnap.com^
+||alimonysmuggle.com^
+||alininginfeft.uno^
+||alipromo.com^
+||alitems.co^
+||alitems.com^
+||alitems.site^
+||alivecheery.com^
+||alivedriftcommandment.com^
+||aliwjo.com^
+||alklinker.com^
+||alkoxylbutling.tech^
+||alkqryamjo.com^
+||alkylichauyne.digital^
+||all-ti-cod.com^
+||all2cnjuh34jb.com^
+||allabc.com^
+||allactualjournal.com^
+||allactualstories.com^
+||allaylabite.com^
+||allbzfnar.com^
+||allcommonblog.com^
+||allcommonstories.com^
+||allcoolnewz.com^
+||allcoolposts.com^
+||allegationhamperexit.com^
+||allegationsurgeryblotch.com^
+||allegeseclair.com^
+||allegianceenableselfish.com^
+||allelicrinde.life^
+||alleliteads.com^
+||allemodels.com^
+||allencup.live^
+||allenprepareattic.com^
+||alleviatediscoveryexpress.com^
+||alleviatepracticableaddicted.com^
+||allfb8dremsiw09oiabhboolsebt29jhe3setn.com^
+||allfreecounter.com^
+||allfreshposts.com^
+||allftbsb.com^
+||allhotfeed.com^
+||allhugeblog.com^
+||allhugefeed.com^
+||allhugenews.com^
+||allhugenewz.com^
+||allhypefeed.com^
+||allicinarenig.com^
+||allmt.com^
+||allobarpepped.uno^
+||allodiafeveret.life^
+||alloha.tv^
+||allotnegate.com^
+||allotupwardmalicious.com^
+||alloverwiththinl.com^
+||allow-to-continue.com^
+||allowancevindictive.com^
+||allowbecome.com^
+||allowecouldl.xyz^
+||allowflannelmob.com^
+||allowsman.uno^
+||allowsscaffold.com^
+||allowsuccess.org^
+||alloydigital.com^
+||alloyrounded.com^
+||allpipestay.live^
+||allpornovids.com^
+||allrightjerseydresser.com^
+||allskillon.com^
+||allstat-pp.ru^
+||alltopnewz.com^
+||alltopposts.com^
+||alludedapexdepression.com^
+||alludedaridboob.com^
+||allure-ng.net^
+||allureencourage.com^
+||allureoutlayterrific.com^
+||allusionfussintervention.com^
+||allwownewz.com^
+||allyenitwasbr.com^
+||allyes.com^
+||allyprimroseidol.com^
+||allypublicity.com^
+||allywasnothyc.info^
+||almapa2.com^
+||almareepom.com^
+||almasatten.com^
+||almightyexploitjumpy.com^
+||almightypush.com^
+||almostoar.com^
+||almostspend.com^
+||almsmanmalthe.com^
+||almstda.tv^
+||alnathhoggie.com^
+||alodiachowed.com^
+||alodialreciter.com^
+||aloensaidhe.com^
+||aloftrecedestatistics.com^
+||aloha-news.net^
+||alonehepatitisenough.com^
+||alonelybansela.digital^
+||alot4you.tech^
+||alota.xyz^
+||aloveste.site^
+||alovirs.com^
+||alowea.website^
+||alpacaempover.digital^
+||alpenchalet.space^
+||alpha-news.org^
+||alphabetlayout.com^
+||alphabird.com^
+||alphagodaddy.com^
+||alpheratzscheat.top^
+||alphonso.tv^
+||alpidoveon.com^
+||alpurs.com^
+||alraunarrode.com^
+||alreadyballetrenting.com^
+||alreau.com^
+||alrightastound.com^
+||alsatiapolynia.com^
+||alsfor.com^
+||alsindustrateb.info^
+||alsindustratebil.com^
+||alspearowa.com^
+||alsthonronghe.xyz^
+||alstrome9riya10.com^
+||altairaquilae.top^
+||altarhackees.digital^
+||alterassumeaggravate.com^
+||alterationappealprison.com^
+||alternads.info^
+||alternatepausemound.com^
+||alternativecpmgate.com^
+||alternativeprofitablegate.com^
+||altheasspit.store^
+||althov.com^
+||altitude-arena.com^
+||altogethertapestrydunk.com^
+||altowriestwispy.com^
+||altpubli.com^
+||altrk.net^
+||altronopubacc.com^
+||altynamoan.com^
+||aluationiamk.info^
+||alumnussmee.top^
+||alunitemoste.com^
+||alwayspainfully.com^
+||alwaysxup.com^
+||alwhichhereal.com^
+||alwhichhereallyw.com^
+||alwingulla.com^
+||alwubrhkxgqdiw.com^
+||alxbgo.com^
+||alxhiccwizce.com^
+||alxsite.com^
+||alysson.de^
+||am10.ru^
+||am11.ru^
+||am15.net^
+||amaasretrims.top^
+||amabarbery.website^
+||amads.fun^
+||amaferivvying.com^
+||amalakale.com^
+||amarceusan.com^
+||amassesvoteen.website^
+||amasssentimentaldamaging.com^
+||amassweightpun.com^
+||amateurcouplewebcam.com^
+||amattepush.com^
+||amaumomt.com^
+||amavirgin.pro^
+||amazementcoronation.com^
+||amazinelistrun.pro^
+||amazinelistrun.xyz^
+||amazinglyprogramswilfrid.com^
+||amazon-adsystem.com^
+||amazon-cornerstone.com^
+||ambaab.com^
+||ambeersporkies.com^
+||amberdub.com^
+||ambientborrowvulture.com^
+||ambientplatform.vn^
+||ambierechinid.com^
+||ambiliarcarwin.com^
+||ambitious-upstairs.pro^
+||amblerodd.com^
+||ambolicrighto.com^
+||ambra.com^
+||ambuizeler.com^
+||amdahlasinego.com^
+||amebanbiglot.uno^
+||ameedbezique.uno^
+||amelatrina.com^
+||amendablepartridge.com^
+||amendsgeneralize.com^
+||amenityleisurelydays.com^
+||amenityremorse.com^
+||ameofmuki.info^
+||amesacejagger.space^
+||amesgraduatel.xyz^
+||amexcadrillon.com^
+||amfennekinom.com^
+||amgardevoirtor.com^
+||amgdgt.com^
+||amgjldens.com^
+||amhippopotastor.com^
+||amhpbhyxfgvd.com^
+||amicithoron.com^
+||amiddespair.com^
+||amimialonging.com^
+||aminopay.net^
+||amira-efz.com^
+||amiraytiny.com^
+||amirteeg.com^
+||amjoltiktor.com^
+||amjtizfeqwz.com^
+||amkbpcc.com^
+||amlvbzvvnjejn.top^
+||ammankeyan.com^
+||ammannests.com^
+||ammits.com^
+||ammunitionconsiderinstitution.com^
+||amnew.net^
+||amnoctowlan.club^
+||amntx1.net^
+||amoddishor.com^
+||amofqosgs.com^
+||amonar.com^
+||amonor.com^
+||amontp.com^
+||amountdonutproxy.com^
+||amourmelilot.com^
+||amouroachoo.com^
+||amoyanjumpy.space^
+||amp.rd.linksynergy.com^
+||amp.services^
+||ampcr.io^
+||amplitudesheriff.com^
+||amplitudewassnap.com^
+||ampugi334f.com^
+||ampxchange.com^
+||amre.work^
+||amrtbbnr.com^
+||amshirethfne.xyz^
+||amshroomishan.com^
+||amtracking01.com^
+||amtropiusr.com^
+||amucksballone.com^
+||amuletasslike.guru^
+||amunfezanttor.com^
+||amused-ground.com^
+||amuseglide.com^
+||amusingsnow.pro^
+||amuyonpastour.top^
+||amvmzbmzaryya.top^
+||amwswkqh.com^
+||amyeubhbnugjum.xyz^
+||amygdalbrittle.com^
+||amylatesating.com^
+||amyrinunshoed.com^
+||amywhereby.com^
+||amzargfaht.com^
+||amzbtuolwp.com^
+||anacjpmrv.com^
+||anaguahoagies.com^
+||anahitagirted.uno^
+||analitits.com^
+||analogousemmafootprints.com^
+||analogousintentionallyleads.com^
+||analogousmindlesshonour.com^
+||analogydid.com^
+||analysecrappy.com^
+||analyticbz.com^
+||analytics-active.net^
+||anamaembush.com^
+||anamuel-careslie.com^
+||anansao2ay8yap09.com^
+||anapirate.com^
+||anapx.net^
+||anastasia-international.com^
+||anastasiasaffiliate.com^
+||anatomyabdicatenettle.com^
+||anaxialaphonia.com^
+||anceenablesas.info^
+||anchoicstage.com^
+||anchusauredo.com^
+||anciengoddize.com^
+||ancientsend.com^
+||ancznewozw.com^
+||anddecoyblizzard.com^
+||andhkruuiigxmkd.com^
+||andhthrewdo.com^
+||andhthrewdow.com^
+||andohs.net^
+||andoldifiscqak.xyz^
+||andomedia.com^
+||andomediagroup.com^
+||andriesshied.com^
+||android-cleaners.com^
+||andworldwi.co^
+||anedukerationpeci.info^
+||anenttatting.com^
+||anepxbrdiilgdhd.com^
+||anesfluters.website^
+||anetpkxx.com^
+||anewproprietorinvent.com^
+||angege.com^
+||angelesfoldingpatsy.com^
+||anglebailiff.com^
+||anglended.club^
+||anglesadjoiningbloodless.com^
+||anglezinccompassionate.com^
+||anglingdacker.com^
+||anglishreasts.site^
+||anguac.com^
+||anguished-child.pro^
+||anguishedjudgment.com^
+||anguishlonesome.com^
+||anguishworst.com^
+||angularconstitution.com^
+||anida.info^
+||anifefashionism.com^
+||anightsregalia.cam^
+||animated-button.pro^
+||animated-company.pro^
+||animateddiscredit.com^
+||animikii-ana.com^
+||animits.com^
+||animositybelovedresignation.com^
+||animosityknockedgorgeous.com^
+||animositysofa.com^
+||animusmisform.com^
+||aninter.net^
+||anjlkkyhpp.com^
+||ankdoier.com^
+||ankhspreses.space^
+||ankleproposedomicile.com^
+||anldnews.pro^
+||anlhcenruea.com^
+||anlytics.co^
+||anmdr.link^
+||anncmq.com^
+||anncquyaxns.com^
+||annesuspense.com^
+||anniversaryblaspheme.com^
+||anniversarythingy.com^
+||annotationdiverse.com^
+||annotationpushy.com^
+||announceproposition.com^
+||announcingfeast.com^
+||announcingusecourt.com^
+||annoynoveltyeel.com^
+||annuentleers.com^
+||annulichasm.digital^
+||anodicvarnish.com^
+||anomalousmelt.com^
+||anomalousporch.com^
+||anonymestupes.website^
+||anonymousads.com^
+||anonymouswrangle.com^
+||anopportunitytost.info^
+||anorrecenturybr.com^
+||another-surprise.pro^
+||anpptedtah.com^
+||anqnbzyjlknbm.top^
+||ansf.shop^
+||anssigia.xyz^
+||anstossassents.life^
+||answeredthechi.org^
+||answerroad.com^
+||answig.com^
+||antagonizelabourer.com^
+||antaioselides.life^
+||antalithate.website^
+||antananarbdivu.com^
+||antapexthecia.guru^
+||antarcticoffended.com^
+||antcxk.com^
+||antecedentexcited.com^
+||antecedentponderoverweight.com^
+||antelintere.xyz^
+||antennafutilecomplement.com^
+||antennarollcellar.com^
+||anteog.com^
+||anteroomcrap.com^
+||antetestingstooped.com^
+||anthe-vsf.com^
+||antheladixy.com^
+||anthembroadcastingbitty.com^
+||anthemspeg.space^
+||anthonypush.com^
+||antiadblock.info^
+||antiadblocksystems.com^
+||antiarachoo.live^
+||antibioticborough.com^
+||antibot.me^
+||anticipatedlying.com^
+||anticipatedthirteen.com^
+||anticipatehellteddy.com^
+||anticipationit.com^
+||anticipationunexpected.com^
+||antidotefoepersecution.com^
+||antidotesexualityorderly.com^
+||antidotesurvivorausterity.com^
+||antijamburet.com^
+||antiliajizzen.com^
+||antipathymenudeduce.com^
+||antiquariancapricorn.com^
+||antiquariangerm.com^
+||antiquitytissuepod.com^
+||antiredcessant.com^
+||antiredgarbel.website^
+||antirobotsystem.com^
+||antivirussprotection.com^
+||antlerpickedassumed.com^
+||antlerrecordingcat.com^
+||antlionwaldorf.com^
+||antonysurface.com^
+||antonywingraceless.com^
+||antpeelpiston.com^
+||antyoubeliket.info^
+||antyoubeliketheap.com^
+||anubinbrewed.tech^
+||anunderstrobed.com^
+||anvhgwjy.com^
+||anvilfaintmaiden.com^
+||anvkmi.com^
+||anwhic.com^
+||anxiouslyconsistencytearing.com^
+||anxiouslywonderexcitement.com^
+||anxioussituation.com^
+||anxkuzvfim.com^
+||anybodysentimentcircumvent.com^
+||anyeaodpwonaf.com^
+||anyexists.com^
+||anyhowunplat.uno^
+||anymad.com^
+||anymautey.xyz^
+||anymind360.com^
+||anymoresentencevirgin.com^
+||anyskjhi.com^
+||anywaybreeches.com^
+||aoalmfwinbsstec23.com^
+||aofppecbmordq.com^
+||aofzkovajqti.com^
+||aogkfujgtmfwp.xyz^
+||aoihaizo.xyz^
+||aojgggbwish.xyz^
+||aojqjblt.xyz^
+||aomgqlaty.top^
+||aonefntecsp.com^
+||aonforhaving.info^
+||aopdqdrkgqbtgci.com^
+||aoredi.com^
+||aosmicdossety.website^
+||aosmicvirago.com^
+||aowykupwwnqrg.xyz^
+||ap-srv.net^
+||ap3lorf0il.com^
+||apalbs.com^
+||apatheticdrawerscolourful.com^
+||apatheticformingalbeit.com^
+||apathiaherbist.com^
+||apavskmykcm.xyz^
+||apbieqqb.xyz^
+||apcpaxwfej.com^
+||apearkcan.club^
+||apeartalb.site^
+||apedrunkeninquire.com^
+||aperchwagered.com^
+||aperprovant.top^
+||aperseearanein.space^
+||aperushmo.cam^
+||apesdescriptionprojects.com^
+||apesdrooping.com^
+||apexwantstar.com^
+||apglinks.net^
+||aphagiafiking.com^
+||aphasicstoray.space^
+||aphemicstull.com^
+||aphidsclee.com^
+||apidata.info^
+||apiecelee.com^
+||apiemb.xyz^
+||apinagedottard.cfd^
+||aplainmpatoio.com^
+||apleasantsit.xyz^
+||aplentytwo.com^
+||apnpr.com^
+||apnttuttej.com^
+||apocarpdogdom.com^
+||apochaeunanime.com^
+||apologiesbackyardbayonet.com^
+||apologiesneedleworkrising.com^
+||apologizeclosest.com^
+||apologizingrigorousmorally.com^
+||aponiaonmarch.com^
+||aporasal.net^
+||app.tippp.io^
+||appads.com^
+||appalspowters.com^
+||apparentlyadverse.com^
+||apparentlyhandbook.com^
+||apparest.com^
+||appbetnewapp.top^
+||appcdn02.xyz^
+||appcdn03.xyz^
+||appcloudactive.com^
+||appcloudcore.com^
+||appcloudgroup.com^
+||appcloudmaster.com^
+||appcloudsystems.com^
+||appcloudvalue.com^
+||appdistracted.com^
+||appealinformationevent.com^
+||appearancecustomerobliterate.com^
+||appearancefingerprintabet.com^
+||appearedcrawledramp.com^
+||appeaseinsolenceberry.com^
+||appendad.com^
+||appendixballroom.com^
+||appendixwarmingauthors.com^
+||apphomeforbests.com^
+||applabzzeydoo.com^
+||applandforbuddies.top^
+||applandlight.com^
+||applandsforbests.com^
+||applaudmaturityasunder.com^
+||applausebind.com^
+||applausesuch.com^
+||apple.analnoe24.com^
+||applesometimes.com^
+||applianceplatforms.com^
+||applicantpoachmeat.com^
+||applicationsattaindevastated.com^
+||applicationscombine.com^
+||applicationsrapacity.com^
+||applifycontent.com^
+||applifysolutions.com^
+||appnow.sbs^
+||appoineditardwide.com^
+||appointedchildorchestra.com^
+||appointedman.com^
+||appollo-plus.com^
+||appraisalaffable.com^
+||apprefaculty.pro^
+||approachconducted.com^
+||approachproperachieve.com^
+||appropriateloathefewer.com^
+||appropriatepurse.com^
+||approximatelyseats.com^
+||apps1cdn.com^
+||appsprelandlab.com^
+||appsyoga.com^
+||apptechnewz.com^
+||apptjmp.com^
+||apptquitesouse.com^
+||appwebview.com^
+||appwoolfeatures.com^
+||appyrinceas.com^
+||appyrincelew.info^
+||appyrincene.com^
+||appzery.com^
+||appzeyland.com^
+||appzjax.com^
+||aprilineffective.com^
+||apritifunbid.com^
+||apromoweb.com^
+||apsidesslurry.space^
+||apsmediaagency.com^
+||apsoacou.xyz^
+||apsoopho.net^
+||apt-ice.pro^
+||aptdiary.com^
+||aptimorph.com^
+||aptitudeproprietor.com^
+||apus.tech^
+||apuwpigjno.com^
+||apvdr.com^
+||apxlv.com^
+||apyrenealiyos.digital^
+||apytbfdzy.com^
+||aq7ua5ma85rddeinve.com^
+||aqbusmueljfy.com^
+||aqcutwom.xyz^
+||aqdha.com^
+||aqkkoalfpz.com^
+||aqqlwcuqtskbz.com^
+||aquavitpathway.com^
+||aquentlytujim.com^
+||aquiliapistrix.guru^
+||aqwihyjpglzdr.com^
+||aqxhcplhbqc.com^
+||arabdevastatingpatty.com^
+||arablucidlygrease.com^
+||aracts.com^
+||aralomomolachan.com^
+||arangoyaffing.com^
+||arautsod.com^
+||arbersunroof.com^
+||arbitrarypoppyblackmail.com^
+||arboredcalfret.com^
+||arbourrenewal.com^
+||arbourtalessterile.com^
+||arbutintentie.com^
+||arbutterfreer.com^
+||arcadiavehemently.com^
+||arcfctypact.top^
+||archaicgrilledignorant.com^
+||archaicin.com^
+||archbishopsheettwitter.com^
+||archeswethers.live^
+||archgrotesqueiso.com^
+||archiecheekydecline.com^
+||archlycadetclutch.com^
+||archseebloated.com^
+||arcost54ujkaphylosuvaursi.com^
+||arcticwarningtraffic.com^
+||arcualstymie.com^
+||ardentlyexposureflushed.com^
+||ardslediana.com^
+||ardspalkiator.com^
+||ardunorwest.life^
+||areahar.com^
+||areairo.com^
+||areajou.com^
+||areantaid.site^
+||areasnap.com^
+||areelektrosstor.com^
+||arehen.com^
+||areiccastano.com^
+||arejoysew.com^
+||areliux.cc^
+||arenalitteraccommodation.com^
+||arethegrav.com.ua^
+||arethegravk.xyz^
+||arewzvqbevrzj.top^
+||argasidstrafed.com^
+||argeanwabi.com^
+||argentslv.digital^
+||arguebakery.com^
+||arguerepetition.com^
+||arguesdevex.cfd^
+||argumentsmaymadly.com^
+||argxdhrjhett.xyz^
+||arheth.com^
+||ariadnethreadmin.com^
+||arianatainos.com^
+||ariapawners.space^
+||aribut.com^
+||aricianvrocht.com^
+||aridplaincol.com^
+||arielpri2nce8ss09.com^
+||arikhwglvc.xyz^
+||ariotgribble.com^
+||aristianewr.club^
+||arithpouted.com^
+||arkalealb.site^
+||arkdcz.com^
+||arkfacialdaybreak.com^
+||arkinhechershedt.xyz^
+||arkosicginkgo.digital^
+||arlyreven.top^
+||armarilltor.com^
+||armashair.site^
+||armedgroin.com^
+||armedtidying.com^
+||armetsremoved.guru^
+||armiesinvolve.com^
+||arminius.io^
+||armisticeexpress.com^
+||armletglene.com^
+||armlockyakker.com^
+||armoryleaseholder.com^
+||armourhardilytraditionally.com^
+||armoursviolino.com^
+||armpeeoy.com^
+||army.delivery^
+||arnautjamdani.com^
+||arnchealpa.com^
+||arnimalconeer.com^
+||arnofourgu.com^
+||arockburrel.website^
+||arodul.com^
+||aroidsguide.com^
+||arointbarra.com^
+||aromabirch.com^
+||arossb.com^
+||arouac.com^
+||aroundpayslips.com^
+||arousedcricket.com^
+||arousedimitateplane.com^
+||arousestatic.com^
+||arouth.com^
+||aroyiise.xyz^
+||arqsafhutlam.com^
+||arquilavaan.com^
+||arqznlwzkkaev.top^
+||arqznlwzkkjla.top^
+||arragouts.com^
+||arrangementsinventorpublic.com^
+||arrayanthir.cfd^
+||arrearsexplicit.com^
+||arrenothanca.xyz^
+||arridedoregano.tech^
+||arriedand.xyz^
+||arrief.com^
+||arrism.com^
+||arrivaltroublesome.com^
+||arrivecounsel.com^
+||arrivedeuropean.com^
+||arrlnk.com^
+||arrnaught.com^
+||arrowdevastatingconstruction.com^
+||arrowrictus.com^
+||arrowtoldilim.xyz^
+||arsahahada.com^
+||arshadsafrash.com^
+||arshelmeton.com^
+||arsnivyr.com^
+||arsonexchangefly.com^
+||arswabluchan.com^
+||arterybasin.com^
+||artespipe.com^
+||artfulparrotnobody.com^
+||arthyadtrack.online^
+||arthyredir.com^
+||articlegarlandferment.com^
+||articlepawn.com^
+||artisticcount.pro^
+||artistperhapscomfort.com^
+||artlessdevote.com^
+||artonsbewasand.com^
+||artoukfarepu.org^
+||artpever.com^
+||artreconnect.com^
+||artsrookpassed.com^
+||artsybutchercluster.com^
+||aruyevdqsnd.xyz^
+||arvbjqavenjba.top^
+||arvigorothan.com^
+||arwartortleer.com^
+||arwfpvcpyjyoupb.xyz^
+||arwhismura.com^
+||aryabzerznlvn.top^
+||arzanphearse.com^
+||as5000.com^
+||asacdn.com^
+||asafesite.com^
+||asandcomemu.info^
+||ascaredresue.space^
+||asccdn.com^
+||asce.xyz^
+||ascensionmonksurround.com^
+||ascertainintend.com^
+||ascijingu.space^
+||ascillsilvia.com^
+||ascillwricht.com^
+||ascomamizzen.com^
+||ascraftan.com^
+||asdasdad.net^
+||asdf1.online^
+||asdf1.site^
+||asdpoi.com^
+||asdqslnqmwwkc.com^
+||asdtiotyuknsy.xyz^
+||asdxntvjpsyl.com^
+||asecarenterhosi.xyz^
+||asecv.xyz^
+||asecw.xyz^
+||aseegrib.com^
+||asemskull.com^
+||asev.xyz^
+||asewlfjqwlflkew.com^
+||asgardrecatch.com^
+||asgccummig.com^
+||asgclickkl.com^
+||asgclickpop.com^
+||asgclickpp.com^
+||asgildedall.info^
+||asgildedalloverw.com^
+||asgmtalconde.com^
+||asgorebysschan.com^
+||ashadofe.com^
+||ashamedbirchpoorly.com^
+||ashcdn.com^
+||ashhgo.com^
+||ashierbowler.com^
+||ashionism.com^
+||ashkeyoptical.guru^
+||ashlarinaugur.com^
+||ashoupsu.com^
+||ashturfchap.com^
+||ashyhamburgertwice.com^
+||asiangfsex.com^
+||asiapushstan17.click^
+||asidefeetsergeant.com^
+||asifgsyky.com^
+||asifiwoeryesterda.xyz^
+||askancefinfoot.website^
+||askcoefficient.com^
+||askdomainad.com^
+||askedappear.com^
+||askedopinionatedimmediately.com^
+||askewflatted.com^
+||askingconsideration.com^
+||asklinklanger.com^
+||asklots.com^
+||askprivate.com^
+||aslaironer.com^
+||aslaprason.com^
+||asleavannychan.com^
+||asleepplatforms.com^
+||aslnk.link^
+||aslonejulyha.info^
+||asmetotreatwab.com^
+||asmileesidesu.info^
+||asmodeusfields.com^
+||asnincadar.com^
+||asnoibator.com^
+||asnortsalol.website^
+||aso1.net^
+||asoawhum.com^
+||asopn.com^
+||asosettoourma.info^
+||asoulrox.com^
+||asoursuls.com^
+||asparmany.site^
+||aspartbib.site^
+||aspartbus.site^
+||aspectunderground.com^
+||asperencium.com^
+||aspignitean.com^
+||aspireetopee.com^
+||aspirerrehedge.life^
+||asqconn.com^
+||asquintarmenic.cfd^
+||asrelatercondi.org^
+||asrety.com^
+||asricewaterho.com^
+||asrntiljustetyerec.info^
+||asrowjkagg.com^
+||assagaiwooable.com^
+||assailusefullyenemies.com^
+||assaultmolecularjim.com^
+||assaysmohr.cfd^
+||assaystalonic.com^
+||assembledscout.com^
+||assembleservers.com^
+||assentproduct.com^
+||assertedclosureseaman.com^
+||assertednodding.com^
+||assertnourishingconnection.com^
+||assetize.com^
+||assetknowledgeregret.com^
+||assignmentcursor.com^
+||assistantasks.com^
+||assistantdroppedseries.com^
+||assistedadultrib.com^
+||assisteggs.com^
+||assisthollowted.com^
+||assistspell.com^
+||assithdisseat.com^
+||assobredrouked.com^
+||associationstoopedacid.com^
+||associationwish.com^
+||assoilrehboc.top^
+||assortmentcriminal.com^
+||assortplaintiffwailing.com^
+||assuageexcel.com^
+||assuagelasting.com^
+||assumptivetelevision.com^
+||assuranceapprobationblackbird.com^
+||assurancelocusmat.com^
+||assurednesssalesmanmaud.com^
+||assurehandicappedbonus.com^
+||assurehonesty.com^
+||assuremath.com^
+||ast2ya4ee8wtnax.com^
+||astaicheedie.com^
+||astandhei.com^
+||astarboka.com^
+||astato.online^
+||astauche.xyz^
+||astcarbinkom.com^
+||asteepgaits.space^
+||asterbiscusys.com^
+||astesnlyno.org^
+||astespurra.com^
+||asthepoityelth.com^
+||asthepoityelth.xyz^
+||astirvibist.com^
+||astivysauran.com^
+||astkyureman.com^
+||astnoivernan.com^
+||astoapsu.com^
+||astoecia.com^
+||astogepian.com^
+||astonishmentfuneral.com^
+||astop.xyz^
+||astouthy.net^
+||astra9dlya10.com^
+||astrandconifer.com^
+||astrokompas.com^
+||astronomycider.com^
+||astronomycrawlingcol.com^
+||astscolipedeor.com^
+||astspewpaor.com^
+||astumbreonon.com^
+||asuipiirq.com^
+||asukedrev.com^
+||asuwkfjwkb.xyz^
+||asverymuc.org^
+||asxjhqaey.com^
+||asybwqxru.xyz^
+||asyetaprovinc.org^
+||asyledieses.com^
+||asylumclogunaccustomed.com^
+||asyndiesserged.xyz^
+||atableofcup.com^
+||atadserver.com^
+||atala-apw.com^
+||atas.io^
+||atavusatumble.uno^
+||atcelebitor.com^
+||atchshipsmoter.com^
+||atchshipsmotor.com^
+||atcoordinate.com^
+||atdeerlinga.com^
+||atdmaincode.com^
+||atdmt.com^
+||atdrilburr.com^
+||atedlittleme.xyz^
+||atelegendinflected.com^
+||atelesmusters.website^
+||atemda.com^
+||atemoyaderider.com^
+||atentherel.org^
+||aterhouse.info^
+||aterhouseoyop.com^
+||aterhouseoyop.info^
+||atesbrotheres.com^
+||atevaccination.com^
+||atflojand.com^
+||atgallader.com^
+||atgenesecton.com^
+||atgthkqt.com^
+||athbzeobts.com^
+||atheismashamedcomfort.com^
+||atherthishinhe.com^
+||athitmontopon.com^
+||athletethrong.com^
+||atholicncesispe.info^
+||athvicatfx.com^
+||aticalfelixstownrus.info^
+||aticalmaster.org^
+||atinsolutions.com^
+||ationpecialukizeiaon.info^
+||atiretrously.com^
+||atjigglypuffor.com^
+||atmalinks.com^
+||atmandilo.com^
+||atmasroofy.com^
+||atmetagrossan.com^
+||atmewtwochan.com^
+||atmnjcinews.pro^
+||atmtaoda.com^
+||ato.mx^
+||atomex.net^
+||atomicarot.com^
+||atomieswidener.com^
+||atonato.de^
+||atonementimmersedlacerate.com^
+||atopyawned.uno^
+||atougnou.com^
+||atpanchama.com^
+||atpawniarda.com^
+||atraff.com^
+||atraichuor.com^
+||atriblethetch.com^
+||atripplotx.com^
+||atsabwhkox.com^
+||atservineor.com^
+||atshroomisha.com^
+||atsuhrvfppyk.com^
+||attacheastely.com^
+||attachedkneel.com^
+||attacketslovern.info^
+||attackscleopatracadence.com^
+||attaindisableneedlework.com^
+||attarbesets.com^
+||attemptdruggedcarve.com^
+||attempttipsrye.com^
+||attendanceceasless.com^
+||attendanceecstasyseem.com^
+||attendancemeaningleaped.com^
+||attendantsammunitiondeliquencydeliquency.com^
+||attendantsrescuediscrepancy.com^
+||attendingtarget.com^
+||attentioniau.com^
+||attentionkick.com^
+||attestconvict.com^
+||atthecliffsandup.info^
+||atthereandhth.com^
+||atthewon.buzz^
+||atthewonderfu.com^
+||atticereqd.com^
+||atticpalmfulgenerator.com^
+||atticshepherd.com^
+||attitudeflycinema.com^
+||attlesuling.com^
+||attractive-drawing.com^
+||attractivebuilt.com^
+||attractivehobby.com^
+||attractiveother.pro^
+||attractpicturespine.com^
+||attractscissor.com^
+||attrapincha.com^
+||attributedconcernedamendable.com^
+||attributedgavepacket.com^
+||attributedminded.com^
+||attributedrelease.com^
+||attunebarberreality.com^
+||atwola.com^
+||atwursdpal.com^
+||atzekromchan.com^
+||au2m8.com^
+||aubergeswots.com^
+||auboaksa.com^
+||auboalro.xyz^
+||aubsehog.net^
+||auburn9819.com^
+||auchoocm.com^
+||auchoons.net^
+||auckledfathere.xyz^
+||aucred.com^
+||audacitycompare.com^
+||audiblerelinquishnegation.com^
+||audiblysecretaryburied.com^
+||audiblytriggersreview.com^
+||audiencefuel.com^
+||audienceline.com^
+||audienceprofiler.com^
+||audienceravagephotocopy.com^
+||audionews.fm^
+||audiosech.xyz^
+||auditioneasterhelm.com^
+||auditioningantidoteconnections.com^
+||auditioningborder.com^
+||auditioningouncesufficiently.com^
+||auditioningraffle.com^
+||auditoriumclarifybladder.com^
+||auditude.com^
+||audmrk.com^
+||audraucmos.com^
+||audrault.xyz^
+||audrossoon.com^
+||aufeeque.com^
+||auforau.com^
+||aufr67i8sten.com^
+||augailou.com^
+||augigous.net^
+||augladraugne.com^
+||augnolru.com^
+||augrezoa.net^
+||augroash.com^
+||augu3yhd485st.com^
+||augurersoilure.space^
+||august15download.com^
+||auhbjjvbx.com^
+||auhjyihlbhvvkv.com^
+||aujooxoo.com^
+||aukalerim.com^
+||aukarosizox.com^
+||aukroaze.xyz^
+||aukseseemyr.info^
+||auksizox.com^
+||auksofthecompan.info^
+||aulingimpora.club^
+||auloucma.net^
+||aulrains.com^
+||aulricol.xyz^
+||aulsaftu.net^
+||aulteeby.net^
+||aultseemedto.xyz^
+||aumaupoy.net^
+||aumeryyaruran.live^
+||aumjwoylhhnmvv.com^
+||aumsarso.com^
+||aumseewu.xyz^
+||aumsookr.com^
+||auneghus.net^
+||aungoutsy.com^
+||aunsagoa.xyz^
+||auntlyseniors.top^
+||auojsgyulikspj.xyz^
+||aupsarda.com^
+||aupseelo.net^
+||aupteens.com^
+||auptefee.net^
+||aurdosti.com^
+||aursaign.net^
+||ausoafab.net^
+||ausomsup.net^
+||auspiceguile.com^
+||auspipe.com^
+||austaits.xyz^
+||austow.com^
+||autchoog.net^
+||auteboon.net^
+||authenticseasickexhausted.com^
+||authognu.com^
+||authordress.com^
+||authoritativeidiom.com^
+||authorsallegationdeadlock.com^
+||auto-im.com^
+||autographnutmegassail.com^
+||automatedtraffic.com^
+||automateyourlist.com^
+||automaticallyindecisionalarm.com^
+||autopsycarrel.com^
+||autopsyglossy.com^
+||autsaisu.xyz^
+||autumncamping.com^
+||auuegnvbhx.xyz^
+||auvenebu.xyz^
+||auxaqklyleaelhg.xyz^
+||auxml.com^
+||avads.co.uk^
+||avaghogn.net^
+||availableforester.com^
+||availablesyrup.com^
+||avalancheofnews.com^
+||avalanchers.com^
+||avariansambos.guru^
+||avatroom.com^
+||avazu.net^
+||avazutracking.net^
+||avdpmeated.uno^
+||avebedencathy.info^
+||avenaryconcent.com^
+||avengeburglar.com^
+||avenuewalkerchange.com^
+||average-champion.pro^
+||aversionworkingthankful.com^
+||avesofefinegold.com^
+||aveugleghettos.top^
+||avevofipnqobi.com^
+||avhtaapxml.com^
+||avhxnasqeo.com^
+||aviddoated.com^
+||avidheroismgelatine.com^
+||aviewrodlet.com^
+||avinekernish.digital^
+||avkyu1tesnwy.com^
+||avnmjtqu.com^
+||avoidanudaic.xyz^
+||avonsour.com^
+||avouse.com^
+||avowalssnivel.com^
+||avowappear.com^
+||avowsvarus.com^
+||avprotect.store^
+||avtklwruejfr.com^
+||avtvcuofgz.com^
+||avucugkccpavsxv.xyz^
+||avulsedcherty.com^
+||avupdrojsytrnej.xyz^
+||avuthoumse.com^
+||avwdyjwtnpc.com^
+||avwgzujkit.com^
+||avygpim.com^
+||awaitbackseatprod.com^
+||awaitdetestableitem.com^
+||awaitifregularly.com^
+||awaitingutilize.com^
+||awakeexterior.com^
+||awaltundo.com^
+||awarecatching.com^
+||awashemeers.com^
+||awasrqp.xyz^
+||away-stay.com^
+||awaydefinitecreature.com^
+||awayteemage.com^
+||awbbcre.com^
+||awbbjmp.com^
+||awbbsat.com^
+||awbhabaxgxwayts.com^
+||awcrpu.com^
+||awecr.com^
+||awecre.com^
+||awecrptjmp.com^
+||aweinkbum.com^
+||awembd.com^
+||awemdia.com^
+||awemwh.com^
+||awentw.com^
+||aweproto.com^
+||aweprotostatic.com^
+||aweprt.com^
+||awepsi.com^
+||awept.com^
+||awesome-blocker.com^
+||awesomenewspush.com^
+||awestatic.com^
+||awestc.com^
+||awestruckbranch.com^
+||awfullypersecution.com^
+||awfulresolvedraised.com^
+||awgfargnrw.xyz^
+||awhajdorzawd.com^
+||awhileirrelevant.com^
+||awistats.com^
+||awkljjaaweyzm.top^
+||awkwardpurfles.com^
+||awledconside.xyz^
+||awltovhc.com^
+||awmbed.com^
+||awmbriegurries.com^
+||awmdelivery.com^
+||awmocpqihh.com^
+||awmplus.com^
+||awmserve.com^
+||awnexus.com^
+||awokeconscious.com^
+||awoudsoo.xyz^
+||awpcrpu.com^
+||awprt.com^
+||awptjmp.com^
+||awqwuiwmse.com^
+||aws-itcloud.net^
+||awsnjsduyhgpk.com^
+||awstaticdn.net^
+||awsurveys.com^
+||awswayful.space^
+||awtpguxqtf.com^
+||awtqbjylk.com^
+||awugxvrmsdalpx.com^
+||awutohkhu.com^
+||awvqfalackho.com^
+||awytythbxujkz.com^
+||awzvpbg.com^
+||axalgyof.xyz^
+||axchggobulz.com^
+||axeldivision.com^
+||axelsermit.com^
+||axesequelplant.com^
+||axfdwhsi.com^
+||axhpkbvibdn.com^
+||axill.com^
+||axillovely.com^
+||axingectal.com^
+||axiomszanjona.com^
+||axjfjdm.com^
+||axkwmsivme.com^
+||axpjzhbh.com^
+||axrfetwwx.xyz^
+||axungeguying.com^
+||axungetosher.top^
+||axwnmenruo.com^
+||axwortbunko.com^
+||axzxkeawbo.com^
+||ay.delivery^
+||ay5u9w4jjc.com^
+||ayads.co^
+||ayaghlq.com^
+||ayanpleasea.com.ua^
+||ayanpleasek.xyz^
+||ayboll.com^
+||aybvfvlyrtbskvy.com^
+||aydsvrikr.com^
+||ayelpacle.com^
+||ayorks.com^
+||aypahalndxrxon.com^
+||ayprokwbpc.com^
+||ayrovalcontain.com^
+||ayrtpmwuymzbbq.com^
+||ayudvbjbvdojt.com^
+||ayvcjvdfk.xyz^
+||ayvfzwttm.com^
+||aywikhsw.xyz^
+||ayxfqtxrgoc.com^
+||ayxuadkeh.com^
+||azads.com^
+||azaipsee.com^
+||azbaclxror.com^
+||azelaiclawyer.com^
+||azeriondigital.com^
+||azgdgypodyulx.com^
+||azj57rjy.com^
+||azjmp.com^
+||azkcqs.com^
+||azmjosvecyye.com^
+||azmsmufimw.com^
+||aznapoz.info^
+||azoaltou.com^
+||azoogleads.com^
+||azorbe.com^
+||azpresearch.club^
+||azraelzvro.com^
+||azskk.com^
+||aztecash.com^
+||azulcw7.com^
+||azwkjjkmbqavv.top^
+||azxdkucizr.com^
+||azxhlzxmrqc.com^
+||azyyyeyeqeaav.top^
+||b-5-shield.com^
+||b-m.xyz^
+||b014381c95cb.com^
+||b02byun5xc3s.com^
+||b06fcca6fd.com^
+||b094e3477d.com^
+||b0a0bb3621.com^
+||b0aed10e06.com^
+||b0c9248dab.com^
+||b0d2583d75.com^
+||b0fea47e81.com^
+||b0oie4xjeb4ite.com^
+||b1002203ac.com^
+||b1298d230d.com^
+||b12f4c5551.com^
+||b13481647cf775c5.com^
+||b16a07996c.com^
+||b18a21ab3c9cb53.com^
+||b1bf05979e.com^
+||b225.org^
+||b2261a9931.com^
+||b25c1fa74d.com^
+||b2be2dbdc8.com^
+||b2d43e2764.com^
+||b2o6b39taril.com^
+||b30674b49e.com^
+||b30da4e330.com^
+||b325a35aa1.com^
+||b36a26f3ab.com^
+||b397db8f50.com^
+||b3kyo0de1fr0.com^
+||b3ra6hmstrioek54er.com^
+||b3stcond1tions.com^
+||b3z29k1uxb.com^
+||b42rracj.com^
+||b44794baad.com^
+||b4dda3f4a1.com^
+||b509ab5b0d.com^
+||b50faca981.com^
+||b57eb5adb4.com^
+||b58ncoa1c07f.com^
+||b5903af9fd.com^
+||b5942f941d.com^
+||b5c28f9b84.com^
+||b5e75c56.com^
+||b6143975c9.com^
+||b65415fde6.com^
+||b6750bc2a1.com^
+||b6880ffb9a.com^
+||b70f0a4569.com^
+||b719c1d1e8.com^
+||b73uszzq3g9h.com^
+||b76e86c54d.com^
+||b7d735280b.com^
+||b7om8bdayac6at.com^
+||b81oidrmy82w.com^
+||b852e3606e.com^
+||b88af87899.com^
+||b89d654db3.com^
+||b8pfulzbyj7h.com^
+||b97482f4b9.com^
+||b9b4465592.com^
+||b9f4882bac.com^
+||ba01520b8b.com^
+||ba0182aa75.com^
+||ba488608ee.com^
+||ba83df6e74.com^
+||baannre.com^
+||baaomenaltho.com^
+||bab706e31e.com^
+||babbnrs.com^
+||babbyfriar.space^
+||babinjectbother.com^
+||babssata.com^
+||babun.club^
+||babyboomboomads.com^
+||babyish-tea.com^
+||babyishmate.pro^
+||babynaz.xyz^
+||babyniceshark.com^
+||babysittingbeerthrobbing.com^
+||bac23cfb5b.com^
+||baccarat112.com^
+||baccatepsychon.com^
+||bacishushaby.com^
+||backetkidlike.com^
+||backfireaccording.com^
+||backla2z8han09.com^
+||backmerriment.com^
+||backpub.mom^
+||backseatabundantpickpocket.com^
+||backseatrunners.com^
+||backstagedeputy.com^
+||backupcelebritygrave.com^
+||backwardkneesencroach.com^
+||backwget99.com^
+||backyardwarlock.com^
+||baconaces.pro^
+||baconytapemen.com^
+||bacoonandeggs.xyz^
+||bacquetsituate.uno^
+||badanaproof.com^
+||badanaproof98.com^
+||badanaproof998.com^
+||badexplainimmigrant.com^
+||badgegirdle.com^
+||badgerchance.com^
+||badgreenssucceed.com^
+||badjocks.com^
+||badlymaggot.com^
+||badsabs.com^
+||badsans.com^
+||badsbads.com^
+||badsecs.com^
+||badsims.com^
+||badskates.com^
+||badskies.com^
+||badslopes.com^
+||badspads.com^
+||badtopwitch.work^
+||badubaho.com^
+||badujaub.xyz^
+||badword.xyz^
+||baect.com^
+||baelungilt.guru^
+||baepjnwgwh.xyz^
+||baetrf.com^
+||bageelru.xyz^
+||bagelinterest.com^
+||bagfulcoughwallow.com^
+||baggageconservationcaught.com^
+||baggalaresaid.com^
+||baggy-fail.pro^
+||baglikeurging.com^
+||bagnuterosive.com^
+||baguioattalea.com^
+||bagwynbilgier.com^
+||bagwyncam.top^
+||bahmemohod.com^
+||bahswl.com^
+||bahutuophian.com^
+||baijav.com^
+||baikogru.net^
+||bailedgatheringmirth.com^
+||bailedperiodic.com^
+||baileyflossallpurpose.com^
+||bailifftoddle.com^
+||bailoaso.xyz^
+||bailonushe.com^
+||bainederrain.xyz^
+||bainushe.com^
+||baiphote.xyz^
+||baiseesh.net^
+||baisoabe.com^
+||baithoph.net^
+||baitikoam.com^
+||baitwizardrhythm.com^
+||baiweluy.com^
+||baiwhuga.net^
+||baizesrefined.com^
+||bajalato.info^
+||bajracashboy.com^
+||bakatvackzat.com^
+||bakerbrandy.com^
+||bakeronerousfollowing.com^
+||bakongojotted.com^
+||baksunjwoa.com^
+||bakteso.ru^
+||bakubabasilic.space^
+||bakubasugis.guru^
+||balancedweakness.com^
+||balcekonspn.com^
+||balconhoist.com^
+||balconyparded.com^
+||balconypeer.com^
+||baldwhizhens.com^
+||baledenseabbreviation.com^
+||baleiambwee.com^
+||baletingo.com^
+||balkscaked.com^
+||ballastaccommodaterapt.com^
+||ballateprebind.digital^
+||balldevelopedhangnail.com^
+||ballinghelonin.com^
+||ballnotre.space^
+||ballotsevicts.space^
+||ballroomexhibitionmid.com^
+||baloneyunraked.com^
+||balspaulite.com^
+||baltchd.net^
+||balvalur.com^
+||bam-bam-slam.com^
+||bamahseines.com^
+||bambao.lol^
+||bambarmedia.com^
+||banagonatural.tech^
+||banbuyserve.com^
+||banclip.com^
+||bandageretaliateemail.com^
+||bande2az.com^
+||bandelcot.com^
+||bandoraclink.com^
+||bandsaislevow.com^
+||bandsperlibellous.com^
+||banerator.net^
+||banesvexful.website^
+||bangedavenge.com^
+||bangingmeltcigarette.com^
+||bangingpunk.com^
+||bangrighteous.com^
+||bangtopads.com^
+||bangtyranclank.com^
+||bangute.xyz^
+||banhq.com^
+||banicywan.com^
+||banistersconvictedrender.com^
+||banisterspast.com^
+||baniyasquibs.space^
+||bankerconcludeshare.com^
+||bankingconcede.com^
+||bankmenorates.website^
+||bankneyminist.xyz^
+||banneradsday.com^
+||banquetsemina.com^
+||banquetunarmedgrater.com^
+||banselachoirs.life^
+||bantercubicle.com^
+||bantergleameddecline.com^
+||banterswalloon.com^
+||banteryquartin.com^
+||baptismmattressstoppage.com^
+||baptrqyesunv.xyz^
+||barbabridgeoverprotective.com^
+||barbariannumerous.com^
+||barbedabout.com^
+||barbeduseless.com^
+||barbelskerugma.com^
+||barberaalecize.website^
+||barbitakhirka.uno^
+||barbmerchant.com^
+||bardatm.ru^
+||bareelaborate.com^
+||barefootedleisurelypizza.com^
+||barefootedpyjamasdetection.com^
+||barelybimetal.com^
+||barelydresstraitor.com^
+||barelytwinkledelegate.com^
+||baresi.xyz^
+||barfsmiaowpit.com^
+||bargedoctarch.com^
+||barkaryglaiket.uno^
+||barlessclueing.life^
+||barlo.xyz^
+||barnabaslinger.com^
+||barnaclecocoonjest.com^
+||barnassumedaddict.com^
+||barnmonths.com^
+||barotodazes.com^
+||barracksconcernedseaman.com^
+||barrelhonestlypublicity.com^
+||barren-date.pro^
+||barrenmixture.pro^
+||barrerasaggon.life^
+||barriercereals.com^
+||barringjello.com^
+||barscreative1.com^
+||barteebs.xyz^
+||bartonpriority.com^
+||basaarf.com^
+||baseballrabble.com^
+||basedcloudata.com^
+||baseduser.com^
+||basenjisilyl.com^
+||baseporno.com^
+||basepush.com^
+||basheighthnumerous.com^
+||bashfuladvancedeliberately.com^
+||bashnourish.com^
+||basicpossibility.com^
+||basicwhenpear.com^
+||basilarendowed.website^
+||basisscarcelynaughty.com^
+||basketballshameless.com^
+||basquedplotx.store^
+||bassdyemanipulate.com^
+||bassengravefascinated.com^
+||bassistscrap.com^
+||bassoonavatara.com^
+||bastardminims.com^
+||baste-znl.com^
+||bastesgaltrap.com^
+||bastingestival.com^
+||baszlo.com^
+||batakfry.com^
+||batangam.digital^
+||batataslavify.guru^
+||batcherg.com^
+||batcrack.icu^
+||batebalmy.com^
+||batedisqualify.com^
+||bathbrrvwr.com^
+||batheattendancewreck.com^
+||bathepoliteness.com^
+||batheunits.com^
+||bathtubpitcher.com^
+||batioc.com^
+||battelscannach.com^
+||battepush.com^
+||batterdisagreement.com^
+||batteusp2hilenor.com^
+||battiesnarras.com^
+||batwaxwok.site^
+||baubogla.com^
+||bauchleredries.com^
+||baunaurou.com^
+||bauptost.net^
+||baustraightu.com^
+||bauvaikul.com^
+||bauweethie.com^
+||bavxuhaxtqi.com^
+||bawdylytta.com^
+||bawlerhanoi.website^
+||baxotjdtesah.com^
+||bayirksrap.com^
+||baylnk.com^
+||baysexthy.com^
+||baywednesday.com^
+||baywoodkbps.space^
+||bazaki.xyz^
+||bazamodov.ru^
+||bazao.xyz^
+||bb1ba63212.com^
+||bb6dcc7e45.com^
+||bbangads.b-cdn.net^
+||bbannjdax.com^
+||bbcrgate.com^
+||bbd834il.de^
+||bbdobm.com^
+||bbes.xyz^
+||bbgickdocf.xyz^
+||bbgtranst.com^
+||bbmlhsehxwi.com^
+||bbmrraevneawv.top^
+||bbmrraevnevnk.top^
+||bbqckhmgboal.xyz^
+||bbrdbr.com^
+||bbvbyzzyrebek.top^
+||bbwzzwremrvkl.top^
+||bbyavrykjopnnx.xyz^
+||bbyjgkkdihiyxy.com^
+||bc16fd1a7f.com^
+||bc5c04eefb.com^
+||bcae944449.com^
+||bccda4ab57.com^
+||bcczmm.com^
+||bcd7ad4271.com^
+||bcd8072b72.com^
+||bcea24c9be.com^
+||bceptemujahb.com^
+||bcfaonqj.com^
+||bcffkvpjqferl.com^
+||bchkhtyns.com^
+||bclikeqt.com^
+||bcloudhost.com^
+||bcprm.com^
+||bctagb56.xyz^
+||bcuiaw.com^
+||bddc935c97.com^
+||bdettywfxbcb.xyz^
+||bdfagcumunjzx.com^
+||bdfe35942f.com^
+||bdmbazqsboxooh.com^
+||bdpxghphiwykioy.com^
+||bdqjqfqyw.xyz^
+||bdudekfluh.com^
+||bdyumwlf.com^
+||be47f5d7a4.com^
+||be59d81163.com^
+||be5fb85a02.com^
+||bea4f47fc3.com^
+||beadderivativemermaid.com^
+||beakerweedjazz.com^
+||beakobjectcaliber.com^
+||beambroth.com^
+||beamedshipwreck.com^
+||beammanmoile.space^
+||bearableher.com^
+||bearagriculture.com^
+||bearingpreoccupationadmonish.com^
+||bearpawclouty.com^
+||beassilentasaf.xyz^
+||beastintruder.com^
+||beastsclassbiscuit.com^
+||beastsmalefic.uno^
+||beatifulapplabland.com^
+||beatifulllhistory.com^
+||beautifulasaweath.info^
+||beaverculbert.uno^
+||beavertron.com^
+||beavervehicle.com^
+||beaxewr.com^
+||beaziotclb.com^
+||beblass.com^
+||bebloommulvel.com^
+||bebpnmskw.com^
+||bebreloomr.com^
+||becamesensational.com^
+||becaul.com^
+||beccc1d245.com^
+||becces.com^
+||bechatotan.com^
+||beckerbauds.com^
+||becketcoffee.com^
+||beckoverreactcasual.com^
+||beclippeeweep.com^
+||becomeapartner.io^
+||becomesnerveshobble.com^
+||becorsolaom.com^
+||becramblunger.com^
+||becramcreeky.com^
+||becrustleom.com^
+||bectalonic.com^
+||becuboneor.com^
+||becutblipped.uno^
+||bedaslonej.com^
+||bedaslonejul.cc^
+||bedbaatvdc.com^
+||beddingcadetexploded.com^
+||bedeaflakism.com^
+||bedevilglare.com^
+||bedmantaximan.com^
+||bedodrioer.com^
+||bedodrioon.com^
+||bedrapiona.com^
+||bedrugsisle.com^
+||bedsideseller.com^
+||bedspictures.com^
+||beefeggspin.com^
+||beefyespeciallydrunken.com^
+||beegotou.net^
+||beehivefestivesolve.com^
+||beehomemade.com^
+||beemauhu.xyz^
+||beenoper.com^
+||beeporntube.com^
+||beeragegeet.life^
+||beerhaphazard.com^
+||beesforestallsuffer.com^
+||beeshanoozuk.com^
+||beetcrenula.com^
+||beetlestrooped.life^
+||beetrootopposeddwelling.com^
+||beevakum.net^
+||beevalt.com^
+||beevephe.xyz^
+||beewakiy.com^
+||bef62233f1.com^
+||befirstcdn.com^
+||beforehandeccentricinhospitable.com^
+||befretscathood.com^
+||befriendgenialviscount.com^
+||befrx.com^
+||begantotireo.xyz^
+||begaudycacatua.com^
+||beggarlyfilmingabreast.com^
+||beggingoppida.space^
+||beginnerhooligansnob.com^
+||begripecheatee.guru^
+||beguat.com^
+||begunwomanwhiskey.com^
+||behalfplead.com^
+||beharmalted.info^
+||beheadmuffleddetached.com^
+||behick.com^
+||behink.com^
+||beholdascared.com^
+||beholdsalmonsituated.com^
+||behootpokeys.com^
+||behoppipan.com^
+||behowlcapa.com^
+||beigecombinedsniffing.com^
+||beinri.com^
+||beiven.pw^
+||bejesustrolly.guru^
+||bejolteonor.com^
+||beklefkiom.com^
+||beklinkor.com^
+||beknittykhana.life^
+||belamicash.com^
+||belavoplay.com^
+||belaya2shu1ba1.com^
+||belfarewesbe.info^
+||belgir.com^
+||belgrekblackad.com^
+||belgud.com^
+||belia-glp.com^
+||belickitungchan.com^
+||beliet.com^
+||believemefly.com^
+||believeradar.com^
+||believersheet.com^
+||belikeelean.life^
+||belittlepads.com^
+||bellamyawardinfallible.com^
+||bellmandrawbar.com^
+||belombrea.com^
+||belongadrenaline.com^
+||belongedshark.com^
+||beloved-ideal.pro^
+||belovedfrolic.com^
+||beloveupcreep.com^
+||beltudri.com^
+||beludicolor.com^
+||belwrite.com^
+||belyyeusy.com^
+||bemachopor.com^
+||bemascloche.life^
+||bembexpps.life^
+||bemobpath.com^
+||bemobtrcks.com^
+||bemobtrk.com^
+||bemocksmunched.com^
+||bemsongy.com^
+||bemusic.xyz^
+||benastyunkiss.digital^
+||benced.com^
+||benchsuited.com^
+||bendingrevivestriped.com^
+||beneathallowing.com^
+||beneathgirlproceed.com^
+||benedictionpolitician.com^
+||benelph.de^
+||benengagewriggle.com^
+||benevolencepair.com^
+||benevolentdifferentlymeadow.com^
+||benevolentrome.com^
+||bengaldefer.com^
+||bengekoo.com^
+||benidorinor.com^
+||bennelput.com^
+||bennetevidentlylog.com^
+||benonblkd.xyz^
+||benoopto.com^
+||benshdarat.website^
+||bensokive.com^
+||bentabuse.com^
+||benthicteasle.tech^
+||bentliarpomposity.com^
+||bentonuncage.com^
+||benumbagcy.com^
+||benumelan.com^
+||benureko.xyz^
+||benzolescabrin.com^
+||benzolsflask.website^
+||beonixom.com^
+||bepapersurmise.space^
+||beparaspr.com^
+||bepilelaities.com^
+||bepqevudfoha.com^
+||bepunbabite.uno^
+||bepunenchant.store^
+||beqawu.xyz^
+||ber2g8e3keley.com^
+||berendphloeum.com^
+||berenicepunch.com^
+||bergsmouflon.com^
+||berinsestoray.com^
+||berkshiretoday.xyz^
+||berlindespraque.life^
+||berlinsnevoid.com^
+||berlipurplin.com^
+||bermudaamowt.com^
+||berriesresound.com^
+||berryhillfarmgwent.com^
+||berses.com^
+||berthformttet.com.ua^
+||berthsorry.com^
+||bertrammontleymontleyexists.com^
+||berush.com^
+||beseechaircraftorange.com^
+||beserte.pro^
+||besguses.pro^
+||beshellspitous.com^
+||besidesaffluentcurrently.com^
+||besighcaman.com^
+||besinpbx.com^
+||beskittyan.com^
+||besmeargleor.com^
+||besortkotower.website^
+||besquibpurred.com^
+||best-offer-for-you.com^
+||best-prize.life^
+||best-protection4.me^
+||best-seat.pro^
+||best-vpn-app.com^
+||best-vpn.click^
+||bestabprivily.com^
+||bestadbid.com^
+||bestadload.com^
+||bestadmax.com^
+||bestadultaction.com^
+||bestapplandever.com^
+||bestaryua.com^
+||bestaybuzzed.website^
+||bestclicktitle.com^
+||bestcond1tions.com^
+||bestcontentaccess.top^
+||bestcontentfacility.top^
+||bestcontentfee.top^
+||bestcontentfund.top^
+||bestcontenthost.com^
+||bestcontentjob.top^
+||bestcontentoperation.top^
+||bestcontentplan.top^
+||bestcontentprogram.top^
+||bestcontentproject.top^
+||bestcontentprovider.top^
+||bestcontentservice.top^
+||bestcontenttrade.top^
+||bestcontentuse.top^
+||bestcontentweb.top^
+||bestconvertor.club^
+||bestcpmnetwork.com^
+||bestdisplaycontent.com^
+||bestdisplayformats.com^
+||besteasyclick.com^
+||bestexp1.com^
+||bestladymeet.life^
+||bestloans.tips^
+||bestmmogame.com^
+||bestofmoneysurvey.top^
+||bestoretuba.guru^
+||bestrevenuenetwork.com^
+||bestsafefast.com^
+||besttracksolution.com^
+||bestvenadvertising.com^
+||bestwinterclck.name^
+||bestxxxaction.com^
+||besty-deals.com^
+||bestzba.com^
+||betads.xyz^
+||betahit.click^
+||betalonflamechan.com^
+||betellavouch.space^
+||betemolgar.com^
+||beterrakionan.com^
+||betgorebysson.club^
+||bethelskneeler.website^
+||bethinkparah.com^
+||betimbur.com^
+||betjoltiktor.com^
+||betklefkior.com^
+||betmasquerainchan.com^
+||betnidorinoan.net^
+||betnoctowlor.com^
+||betonpolite.com^
+||betotodilea.com^
+||betotodileon.com^
+||betrayedrecorderresidence.com^
+||betriolua.com^
+||betshucklean.com^
+||bett2you.com^
+||bett2you.net^
+||bett2you.org^
+||better-might.pro^
+||betteradsystem.com^
+||bettercontentservice.top^
+||betterdomino.com^
+||bettersnitch.com^
+||bettin2you.com^
+||bettingfingerprintgrade.com^
+||bettingpartners.com^
+||beturtwiga.com^
+||betxerneastor.club^
+||betzapdoson.com^
+||beunblkd.xyz^
+||beverleyprowlpreparing.com^
+||bevuelabium.guru^
+||bewailblockade.com^
+||bewailindigestionunhappy.com^
+||bewallreflair.com^
+||bewarecontroversy.com^
+||bewareisopointless.com^
+||bewathis.com^
+||bewdnkh.com^
+||bewitchadmiringconstraint.com^
+||bewsejqcbm.com^
+||bexxhlatjhmyei.xyz^
+||beyanmaan.com^
+||beyedortostr.info^
+||beylicbesmile.com^
+||bezettescanner.com^
+||bezoardawdles.digital^
+||bezoarschrysid.com^
+||bezuka.xyz^
+||bf-ad.net^
+||bf358948d7.com^
+||bf600e1d51.com^
+||bf9c674cc0.com^
+||bfast.com^
+||bfbkqmoxrh.com^
+||bfda839646.com^
+||bfovysc.com^
+||bfqwfpjdgc.com^
+||bfts.xyz^
+||bfxytxdpnk.com^
+||bg4nxu2u5t.com^
+||bgcold.com^
+||bgcoll.com^
+||bgevhldiekl.xyz^
+||bgjsjep.com^
+||bgkrbh.com^
+||bgrgkbnqdsvxc.com^
+||bgxerhrcqkdpjib.xyz^
+||bgyeouoavr.xyz^
+||bgyutxdcetx.com^
+||bh3.net^
+||bhalukecky.com^
+||bharalhallahs.com^
+||bharsilked.com^
+||bhcont.com^
+||bhcostefja.com^
+||bhcumsc.com^
+||bhlph.com^
+||bhnhejwj.com^
+||bhnjwmega.com^
+||bhqfnuq.com^
+||bhtcjurm.com^
+||bhvpdupimb.xyz^
+||bhyysbpapbx.com^
+||bialithicket.com^
+||biancasunlit.com^
+||bibberbummler.com^
+||biblesausage.com^
+||bibtu.com^
+||bicyclelistpermanentlyenslave.com^
+||bicyclelistworst.com^
+||bid-engine.com^
+||bid.glass^
+||bidadx.com^
+||bidbadlyarsonist.com^
+||bidbrain.app^
+||bidclickmedia.com^
+||bidder.dev^
+||bidderads.com^
+||bidfhimuqwij.com^
+||bidhead.net^
+||bidiboffin.top^
+||bidiology.com^
+||bidsangelim.space^
+||bidsxchange.com^
+||bidtheatre.com^
+||bidvance.com^
+||bidverdrd.com^
+||bieliddittied.com^
+||biemedia.com^
+||biennenordic.space^
+||biffinberendo.com^
+||biforinslogs.life^
+||biftoast.com^
+||bigappboi.com^
+||bigbasketshop.com^
+||bigbolz.com^
+||bigbootymania.com^
+||bigbricks.org^
+||bigbusinesstoday.xyz^
+||bigchoicegroup.com^
+||bigeagle.biz^
+||bigelowcleaning.com^
+||biggainsurvey.top^
+||biggerluck.com^
+||biggersplinterrattle.com^
+||biggestfisherman.com^
+||biggestgainsurvey.top^
+||biggingshampoo.com^
+||bigheartedresentfulailment.com^
+||bigneptunesept.com^
+||bigrourg.net^
+||bigvids.online^
+||bigvids.space^
+||bihake.com^
+||bihunekus.com^
+||bijitsoa.com^
+||bijouremudas.space^
+||bijwehk.com^
+||bijxpjgtdrgk.com^
+||bike-adsbidding.org^
+||bikehowfaded.com^
+||bikeno.xyz^
+||bikesformallycopper.com^
+||bikesmachineryi.com^
+||bikewaft.com^
+||bikrurda.net^
+||bilgebotchy.com^
+||bilgerak.com^
+||bilicaxers.com^
+||bilingualfestive.com^
+||bilkedsquit.com^
+||bilkerlouisa.com^
+||bilkersdtente.uno^
+||billersdunamis.com^
+||billionpops.com^
+||billionstarads.com^
+||billservingineffective.com^
+||billypub.com^
+||bilsyndication.com^
+||bimlocal.com^
+||bin-layer.ru^
+||bin-tds.site^
+||bincatracs.com^
+||bindingguessingconfessed.com^
+||bineukdwithmef.info^
+||bingoocy.com^
+||binhwheyey.uno^
+||binmenkollast.com^
+||binomnet.com^
+||binomnet3.com^
+||binomtrcks.site^
+||binorf.com^
+||binoticprotea.com^
+||bioces.com^
+||biologicaldeniedexpressing.com^
+||biologydemandedpond.com^
+||biopicfumer.space^
+||biosda.com^
+||biphic.com^
+||bipidoan.com^
+||biplihopsdim.com^
+||biptolyla.com^
+||birchdynamicunicorn.com^
+||bird-getabid.net^
+||birdeyedigenea.com^
+||birdnavy.com^
+||biroads.com^
+||birqmiowxfh.com^
+||birter.com^
+||birthdayforester.com^
+||birthdiscipline.com^
+||birthsenseal.uno^
+||birtuwhaim.com^
+||birung.club^
+||biscow.com^
+||biserka.xyz^
+||bisetsoliped.com^
+||bisleyserrano.com^
+||bisnagaunction.top^
+||bissonbunging.com^
+||bissonprevoid.website^
+||bistigaleod.life^
+||bit-ad.com^
+||bitbeat7.com^
+||bitcoin-news.vip^
+||biteburied.com^
+||biteneverthelessnan.com^
+||biticesar.com^
+||bitterlyimprovegreat.com^
+||bitterportablerespectively.com^
+||bittygravely.com.com^
+||bittygravely.com^
+||bitumenscoff.website^
+||biturl.co^
+||bitx.tv^
+||biubxxaxucyou.com^
+||biz-newsfeed1.com^
+||bizarrewhereupon.com^
+||bizographics.com^
+||bizonads-ssp.com^
+||bizrotator.com^
+||bj1110.online^
+||bjakku.com^
+||bjbjrlnakwvz.top^
+||bjiehnopho.com^
+||bjjnovsnejwm.com^
+||bjjwvkbyfh.com^
+||bjornecoydog.com^
+||bjqug.xyz^
+||bjwqqohwtgbbs.com^
+||bjxiangcao.com^
+||bkbrmmlyyvekz.top^
+||bkbrmmlyyvlyk.top^
+||bkembwdgujzp.com^
+||bkepmwuqui.com^
+||bkjhqkohal.com^
+||bkkejrveemlbk.top^
+||bkkejrveemmbr.top^
+||bkkejrveemmzv.top^
+||bkrzykymkvea.top^
+||bkujacocdop.com^
+||bkxwqhwcwnr.xyz^
+||bkyqhavuracs.com^
+||bl0uxepb4o.com^
+||bl230126pb.com^
+||blabtextmessagephotocopy.com^
+||blackcurrantfootballsimilarly.com^
+||blackenatom.com^
+||blackentrue.com^
+||blacklinetosplit.com^
+||blacklinknow.com^
+||blacklinknowss.co^
+||blackmailingpanic.com^
+||blackname.biz^
+||blacknesskangaroo.com^
+||blacknesskeepplan.com^
+||blacurlik.com^
+||bladeforbes.com^
+||bladesteenycheerfully.com^
+||bladswetis.com^
+||blaghfpd.com^
+||blakelousepreoccupation.com^
+||blamads.com^
+||blamedbuckie.fun^
+||blamersservian.digital^
+||blancheavily.uno^
+||bland-husband.com^
+||blanddish.pro^
+||blaneo.com^
+||blastadoptedlink.com^
+||blastcahs.com^
+||blastedlurched.com^
+||blastsbigener.com^
+||blastsufficientlyexposed.com^
+||blatwalm.com^
+||blaze-media.com^
+||blazeobservancebough.com^
+||blbazybajjevv.top^
+||blbazybajvzvw.top^
+||bldvxzxdpsrjla.com^
+||bleaksheinz.com^
+||bleandworld.xyz^
+||bleandworldw.org^
+||bleatflirtengland.com^
+||bleedingofficecontagion.com^
+||blehcourt.com^
+||blemishwillingpunishment.com^
+||blendedbird.com^
+||bleokerrie.com^
+||blessingsome.com^
+||bletheequus.com^
+||blfoddifghcmeyc.com^
+||blg-1216lb.com^
+||blicatedlitytl.info^
+||blidbqd.com^
+||blindlydutra.com^
+||blindlyidle.com^
+||blindlytinsel.com^
+||blinkjork.com^
+||blinkpainmanly.com^
+||blinktowel.com^
+||blismedia.com^
+||blisscleopatra.com^
+||blissfulblackout.com^
+||blissfulclick.pro^
+||blissfuldes.com^
+||blissfulonline.com^
+||blisterpompey.com^
+||blistersuperstition.com^
+||blitzespanamas.store^
+||blizzardcinnamonappointed.com^
+||blkwrjerbklya.top^
+||blnojxqob.top^
+||bloatrome.com^
+||blobjournalistunwind.com^
+||bloblohub.com^
+||blockaddictioninterfere.com^
+||blockadsnot.com^
+||blockchain-ads.com^
+||blockchaintop.nl^
+||blockedadulatoryhotel.com^
+||blockingdarlingshrivel.com^
+||blockinggleamingmadeup.com^
+||blockscoolest.com^
+||blocksly.org^
+||blogger2020.com^
+||bloggerex.com^
+||blogherads.com^
+||blondhoverhesitation.com^
+||blondtheirs.com^
+||bloodyfrighten.com^
+||blooks.info^
+||bloomsgoas.com^
+||blotscelt.uno^
+||blowflysempre.uno^
+||blowlanternradical.com^
+||blu5fdclr.com^
+||blubberobsessionsound.com^
+||blubberspoiled.com^
+||blubbertables.com^
+||bludwan.com^
+||blueadvertise.com^
+||bluedawning.com^
+||bluejayfacette.com^
+||bluelinknow.com^
+||blueomatic.com^
+||blueparrot.media^
+||blueswordksh.com^
+||blueyloulu.com^
+||bluffsouttore.com^
+||blunksdaler.uno^
+||blurbigdoable.com^
+||blurlorum.uno^
+||blurmesses.com^
+||blushbuiltonboard.com^
+||blushmossy.com^
+||blzjhbvams.com^
+||blzjjrwbwvjav.top^
+||bmbmwiadmvx.com^
+||bmbvrjylevrba.top^
+||bmcdn1.com^
+||bmcdn2.com^
+||bmcdn3.com^
+||bmcdn4.com^
+||bmcdn5.com^
+||bmcdn6.com^
+||bmgipyr.com^
+||bmhenchlyica.xyz^
+||bmjlzyjwwmbyr.top^
+||bmjlzyjwwmwaw.top^
+||bmkz57b79pxk.com^
+||bmlcuby.com^
+||bmmauazi.com^
+||bmpgkspo.xyz^
+||bmptbyb.com^
+||bmqtvmdg.xyz^
+||bmvjxiiijtebtu.com^
+||bmycupptafr.com^
+||bmzmeugzar.com^
+||bmzqyzmvvvkqa.top^
+||bn5x.net^
+||bnagilu.com^
+||bncloudfl.com^
+||bnczrbrhiacp.com^
+||bnfoeabisp.com^
+||bngdin.com^
+||bngdyn.com^
+||bngmadjd.de^
+||bngprl.com^
+||bngprm.com^
+||bngpst.com^
+||bngpt.com^
+||bngtrak.com^
+||bngwlt.com^
+||bnhtml.com^
+||bnivcpronr.com^
+||bnmjjwinf292.com^
+||bnmkl.com^
+||bnohewjt.com^
+||bnpdehtxdeamt.xyz^
+||bnpmtoazgw.com^
+||bnr.sys.lv^
+||bnrdom.com^
+||bnrs.it^
+||bnrsis.com^
+||bnrslks.com^
+||bnserving.com^
+||bnster.com^
+||bnxydwdgr.com^
+||bo2ffe45ss4gie.com^
+||boagloozee.com^
+||boahoupi.com^
+||boajagoar.com^
+||boakauso.com^
+||boannre.com^
+||boannred.com^
+||boaphaps.net^
+||boaphoot.com^
+||boarby.com^
+||boardingproximity.com^
+||boardlanguishguarded.com^
+||boaroowhon.com^
+||boarshrubforemost.com^
+||boastego.xyz^
+||boastemployer.com^
+||boaswooned.com^
+||boatheeh.com^
+||boatoamo.com^
+||boatobservefreshman.com^
+||boayipids.com^
+||bobabillydirect.org^
+||bobboro.com^
+||bocageicepick.com^
+||bocoyoutage.com^
+||bodaichi.xyz^
+||bodaile.com^
+||bodelen.com^
+||bodilymust.com^
+||bodilywondering.com^
+||bodisc.com^
+||bodsoakr.xyz^
+||bodyguardencouraged.com^
+||boenedb.com^
+||boeneds.com^
+||boeojpmxvwbgn.com^
+||boffinsoft.com^
+||boffoadsfeeds.com^
+||boffosgemeled.digital^
+||boftogro.net^
+||boggyamrit.com^
+||bognunub.com^
+||bogrodius.com^
+||boguetrust.com^
+||boharaf.com^
+||boheir.com^
+||bohowhepsked.com^
+||boilerefforlessefforlessregistered.com^
+||boilingloathe.com^
+||boilingtruce.com^
+||boilslashtasted.com^
+||boinkcash.com^
+||boistyaya.com^
+||bokeden.com^
+||bokomarratel.com^
+||boldboycott.com^
+||boldinsect.pro^
+||bolivarmaltol.website^
+||bolofoak.net^
+||boloingopulent.guru^
+||boloptrex.com^
+||bolrookr.com^
+||bolsek.ru^
+||bolssc.com^
+||bolstersecours.digital^
+||bolteffecteddanger.com^
+||boltepse.com^
+||bolz.lol^
+||bomboms.lol^
+||bomboms.xyz^
+||bonad.io^
+||bonafides.club^
+||bonallyzoea.com^
+||bondagecoexist.com^
+||bondageeduc.com^
+||bondagetrack.com^
+||bondfondif.com^
+||bondprodtrue.com^
+||boneporridge.com^
+||bonertraffic.info^
+||bonertraffic.mobi^
+||bonertraffic12.pro^
+||bonertraffic13.info^
+||bonertraffic13.mobi^
+||bonertraffic14.info^
+||bonertraffic14.pro^
+||bonesinoffensivebook.com^
+||bonfiresaltymilk.com^
+||bongacams7.com^
+||bongaucm.xyz^
+||bongauns.xyz^
+||bonicus.com^
+||bonnetiere-infrangible-burthening.xyz^
+||bonnettaking.com^
+||bonnnesfoxily.com^
+||bonomans.com^
+||bonus-app.net^
+||bonusaward.life^
+||bonuscontract.com^
+||bonusmaniac.com^
+||bonusshatter.com^
+||bonyspecialist.pro^
+||bonzai.ad^
+||bonzesantra.life^
+||boodaisi.xyz^
+||boogopee.com^
+||bookadil.com^
+||bookbannershop.com^
+||bookcrazystadium.com^
+||bookerstudent.com^
+||bookeryboutre.com^
+||bookletalternative.com^
+||bookletcanvass.com^
+||bookletcarline.top^
+||bookljlihooli.com^
+||bookmakers.click^
+||bookmanzyzzyva.com^
+||bookmenmetope.life^
+||bookmsg.com^
+||booknower.com^
+||bookodus.xyz^
+||bookpostponemoreover.com^
+||bookshelfcomplaint.com^
+||bookstaircasenaval.com^
+||bookstoreunfortunate.com^
+||boom-boom-vroom.com^
+||boomads.com^
+||boomouso.xyz^
+||boomwalkertraveller.com^
+||boongsmokeho.com^
+||booptuwa.net^
+||boosetrocha.com^
+||booshoune.com^
+||booshout.com^
+||boost-next.co.jp^
+||boostcdn.net^
+||boostclic.com^
+||boostcpm.su^
+||booster-vax.com^
+||booster.monster^
+||boostknifehumidity.com^
+||boostog.net^
+||boothsuropygi.space^
+||bootstrap-framework.org^
+||bootstrap-js.com^
+||bootstraplugin.com^
+||bootypleatpublisher.com^
+||boozifyprays.space^
+||bop-bop-bam.com^
+||bopexacta.com^
+||bopvetgel.com^
+||borary.com^
+||bordelhaylage.cfd^
+||bordsnewsjule.com^
+||boredinitial.com^
+||boredombizarrerepent.com^
+||borghgeog.com^
+||borgoonu.net^
+||borhaj.com^
+||borhod.com^
+||boridescyamid.com^
+||boringassistantincite.com^
+||boriod.com^
+||boriskink.com^
+||bornrefreshmentheater.com^
+||borofez.com^
+||boroniasunback.com^
+||bororango.com^
+||borotango.com^
+||boroup.com^
+||borrowdefeat.com^
+||borrowmarmotforester.com^
+||borumis.com^
+||borzjournal.ru^
+||boshaulr.net^
+||bosodeterna.com^
+||bossageagree.com^
+||bosseslaps.website^
+||bossyinternal.pro^
+||bostonwall.com^
+||bostopago.com^
+||bot-checker.com^
+||bothele.com^
+||bothererune.com^
+||botherherself.website^
+||botherlightensideway.com^
+||botongfuff.uno^
+||bottelowse.guru^
+||bottledinfectionearthquake.com^
+||bottlerobust.com^
+||bottleschance.com^
+||boudja.com^
+||boudutoo.net^
+||boulterdolours.com^
+||bounceads.net^
+||bouncebidder.com^
+||bouncingbalconysuperior.com^
+||bouncingtiger.online^
+||boundsinflectioncustom.com^
+||bouptosaive.com^
+||bouqaiewfksqz.com^
+||bourbonlunches.com^
+||boustahe.com^
+||bousyshock.com^
+||bouwehee.xyz^
+||bovategunrack.cfd^
+||bovemtou.xyz^
+||bowed-common.pro^
+||bowedcounty.com^
+||boweddemand.com^
+||bowells.com^
+||bowerspollees.com^
+||bowerywill.com^
+||boweve.com^
+||bowldescended.com^
+||bowlersoceloid.com^
+||bowlsolicitor.com^
+||bowmoolog.com^
+||bowtellwhincow.cfd^
+||boxhaulchrist.guru^
+||boxlikepavers.com^
+||boxlivegarden.com^
+||boxofficehelping.com^
+||boxofficeliterally.com^
+||boxofwhisper.com^
+||boxrest.website^
+||boxtreeteat.com^
+||boyalebut.site^
+||boyishabow.com^
+||boyishdefend.com^
+||boyishdetrimental.com^
+||boyishstatisticsdear.com^
+||boyughaye.com^
+||boywhowascr.info^
+||bp9l1pi60.pro^
+||bpgeylke.xyz^
+||bpiomsgxkfphrg.com^
+||bponxqlit.com^
+||bpplkotkpduwob.com^
+||bptracking.com^
+||bptssoahsfoz.com^
+||bpwwsusgb.com^
+||bqadfytoqbyhdxs.xyz^
+||bqklioghtnqs.com^
+||bqkwfioyd.xyz^
+||bqxhgnf.com^
+||bqypgubvupcg.com^
+||br3azil334nutsz.com^
+||brabywig.live^
+||braceletdistraughtpoll.com^
+||bracerocclude.life^
+||bracketcalculator.com^
+||bracketknolls.uno^
+||bracketterminusalias.com^
+||bradleyscannertortoise.com^
+||bradleysolarconstant.com^
+||braggingbegefficiency.com^
+||braggingreorganizeunderworld.com^
+||bragpsychicsophomore.com^
+||braiderichu.guru^
+||braidformulathick.com^
+||braidprosecution.com^
+||brainient.com^
+||brainlyads.com^
+||braintb.com^
+||brairdcaratch.digital^
+||brakiefissive.com^
+||brancheschestnutsour.com^
+||branchesdollar.com^
+||branchr.com^
+||brand-display.com^
+||brand.net^
+||brandads.net^
+||brandaffinity.net^
+||brandclik.com^
+||branddnewcode1.me^
+||brandlabs.ai^
+||brandnewapp.pro^
+||brandreachsys.com^
+||branlesero.com^
+||brassstacker.com^
+||brasthingut.com^
+||brattyogor.com^
+||bravelyplainsprowl.com^
+||braveryinherited.com^
+||braveteam.info^
+||bravetense.com^
+||bravotrk.com^
+||brazenwholly.com^
+||brbupali.com^
+||brdhbgcp.com^
+||breadpro.com^
+||breakablepermit.com^
+||breakdownreprintsentimental.com^
+||breakfastinvitingdetergent.com^
+||breakfastsinew.com^
+||breakingarable.com^
+||breakingbailpronounce.com^
+||breakingfeedz.com^
+||breakingreproachsuspicions.com^
+||breakthroughfuzzy.com^
+||breastfeedingdelightedtease.com^
+||breatheeternity.com^
+||brechtembrowd.com^
+||bred4tula.com^
+||bredajangle.guru^
+||bredradiatorairtight.com^
+||breechesbottomelf.com^
+||breederparadisetoxic.com^
+||breedingperforming.com^
+||breedingunspeakableplaice.com^
+||breedtagask.com^
+||brewailmentsubstance.com^
+||brewedprovost.digital^
+||brewingjoie.com^
+||brewseryngo.com^
+||breynvqbjrww.top^
+||briareddollier.com^
+||briarsbarrer.guru^
+||bribrieslabon.com^
+||bricksconsentedhanky.com^
+||bricksolidly.com^
+||bricts.com^
+||bridespiraya.com^
+||bridgetrack.com^
+||brief-tank.pro^
+||briefcasebuoyduster.com^
+||briefengineer.pro^
+||brieflizard.com^
+||brighteroption.com^
+||brighthunter.best^
+||brightonclick.com^
+||brightshare.com^
+||brikinhpaxk.com^
+||brilliant-raise.pro^
+||brimmallow.com^
+||bringsconserve.com^
+||briningkhalat.life^
+||brinishancress.website^
+||brinkprovenanceamenity.com^
+||brioletredeyes.com^
+||briskedmiskept.com^
+||brissapogaic.uno^
+||bristlejaunty.com^
+||britanyculvert.website^
+||brithungown.com^
+||briticatederfd.site^
+||britishdividechess.com^
+||britishensureplease.com^
+||britishinquisitive.com^
+||britonseyer.com^
+||britonswime.website^
+||brittleraising.com^
+||bro.kim^
+||bro1.biz^
+||bro4.biz^
+||broadsheetcounterfeitappeared.com^
+||broadsimp.site^
+||broadsview.site^
+||brocardcored.com^
+||broced.co^
+||brocode1s.com^
+||brocode2s.com^
+||brocode3s.com^
+||brocode4s.com^
+||brodmn.com^
+||brodownload1s.site^
+||brodownloads.site^
+||brogetcode1s.com^
+||brogetcode2s.com^
+||brogetcode4s.cc^
+||broidensordini.com^
+||brokeloy.com^
+||brokerbabe.com^
+||brokerspock.com^
+||brominewf.guru^
+||bromisescapose.com^
+||bromoilnapalms.com^
+||bromusic.site^
+||broochambitioncopies.com^
+||brookbrutallovers.com^
+||brooknaturalists.com^
+||broomemulation.com^
+||bropu2.com^
+||broredir1s.site^
+||broubt.com^
+||broughtalienshear.com^
+||broughtenragesince.com^
+||broweb.site^
+||brown-gas.com^
+||brownerchunam.com^
+||broworker4s.com^
+||broworker6s.com^
+||broworker7.com^
+||broworkers5s.com^
+||browse-boost.com^
+||browserdownloadz.com^
+||browserinwrap.life^
+||browserr.top^
+||browsers.support^
+||browsiprod.com^
+||browsobsolete.com^
+||brqhyzk.com^
+||brtenusjkmgyb.com^
+||brtsumthree.com^
+||brtv.xyz^
+||bruark.com^
+||brucelead.com^
+||bruceleadx.com^
+||bruceleadx1.com^
+||bruceleadx2.com^
+||bruciainbowed.com^
+||bruisedpaperworkmetre.com^
+||bruitedhurrahs.com^
+||brumarmsful.com^
+||brumbiedecagon.com^
+||brummymacduff.com^
+||brunchcreatesenses.com^
+||brupu.com^
+||brutalconfer.com^
+||bruteknack.com^
+||brvkzwjrjzzav.top^
+||brwaraykbrkrv.top^
+||brwaraykbrlrl.top^
+||brygella.com^
+||brynh-gru.com^
+||bryond.com^
+||bryovo.com^
+||bs50tds.com^
+||bsfofnphcuj.com^
+||bsgbd77l.de^
+||bsgeneral.com^
+||bshifsasgnpgqf.com^
+||bshrdr.com^
+||bsjusnip.com^
+||bsolaoecm.xyz^
+||bswsapnwdx.com^
+||bsyftapbp.com^
+||bsyhicvmrg.com^
+||btagmedia.com^
+||btaoc.xyz^
+||btcadtop.com^
+||btcnews.one^
+||btdirectnav.com^
+||btdnav.com^
+||btilxdpcco.com^
+||btjpdvqocspo.com^
+||btnativedirect.com^
+||btodsjr.com^
+||btonzfjleinuax.com^
+||btpnative.com^
+||btpnav.com^
+||btpremnav.com^
+||btprmnav.com^
+||bttrack.com^
+||btvhdscr.com^
+||btwasinlovewit.xyz^
+||btwwiwmhfhh.com^
+||btxdbuaxn.com^
+||btxxxnav.com^
+||bu3le2lp4t45e6i.com^
+||bubbly-condition.pro^
+||bubonicgraters.space^
+||buccingiddap.digital^
+||buchumilit.website^
+||buckeyekantars.com^
+||buckonealodies.com^
+||bucojjqcica.com^
+||budapebluest.com^
+||buddedpetrie.space^
+||buddhamoduli.com^
+||buddhicantilog.guru^
+||buddlekroner.com^
+||budroups.xyz^
+||budsminepatent.com^
+||budvawshes.ru^
+||buench.com^
+||buency.com^
+||buezsud.com^
+||buffaloexemptdropped.com^
+||buffersling.com^
+||bufpieyk.com^
+||buggerygruffed.com^
+||bugits.com^
+||bugleczmoidgxo.com^
+||bugs2022.com^
+||bugstractorbring.com^
+||buhatfjrk9dje10eme.com^
+||buhlvain.com^
+||buikolered.com^
+||buildeddevoir.com^
+||buildfunctionrainy.com^
+||buildnaq91.site^
+||buildsmodeling.com^
+||builthousefor.com^
+||bukash2jf8jfpw09.com^
+||bulbbounds.com^
+||bulbofficial.com^
+||bulcqmteuc.com^
+||bulgae.com^
+||bulgecsi.com^
+||bulky-battle.com^
+||bulkyfriend.com^
+||bull00shit.com^
+||bull3t.co^
+||bullads.net^
+||bulletads.org^
+||bulletprofitads.com^
+||bulletprofitpop.com^
+||bulletproxy.ch^
+||bulletrepeatedly.com^
+||bullionyield.com^
+||bullnunname.com^
+||bulochka.xyz^
+||bulrev.com^
+||bulserv.com^
+||bultaika.net^
+||bultenanogra.cfd^
+||bulyiel.com^
+||bumblecash.com^
+||bummerybutene.life^
+||bummingasses.com^
+||bummockrewarm.com^
+||bumpyfruitless.com^
+||bumpyremittancecarnivorous.com^
+||bunbeautifullycleverness.com^
+||bunchedvisards.life^
+||buncoswosh.com^
+||bundleddayal.com^
+||bungalowdispleasedwheeled.com^
+||bungalowlame.com^
+||bungalowsimply.com^
+||bungarovet.com^
+||bunnimide.com^
+||bunnymediaserver.com^
+||bunth.net^
+||buoyant-force.pro^
+||buoyant-quote.pro^
+||buoyantmanufacturer.pro^
+||buoydeparturediscontent.com^
+||bupatp.com^
+||bupbrosrn.com^
+||buphoolo.net^
+||buqajvxicma.com^
+||buqbxdqurj.xyz^
+||buqkrzbrucz.com^
+||buranablated.digital^
+||burbtoao.com^
+||burdensome-gene.pro^
+||burdyoni.com^
+||bureauxcope.casa^
+||burgea.com^
+||burgerjolly.com^
+||burgomeg.com^
+||burialdiffer.com^
+||burialgerminatebizarre.com^
+||burporess.pro^
+||burringspor.com^
+||bursarelives.uno^
+||burstconsumer.com^
+||burstcravecraving.com^
+||burstingdipper.com^
+||bursulasnags.com^
+||burtonsugar.com^
+||burydibase.com^
+||busbymelpell.com^
+||buscarlsatchel.website^
+||bushesawaitfeminine.com^
+||bushicitrals.com^
+||businessenviron.com^
+||businessessities.com^
+||businesslinenow.com^
+||businessmensynonymmidwife.com^
+||busions.com^
+||buskerreshoes.website^
+||busksspiled.cfd^
+||bustlemiszone.com^
+||bustling-substance.pro^
+||busychopdenounce.com^
+||busyexit.com^
+||busytunnel.com^
+||butalksuw9dj10.com^
+||butanesscag.com^
+||butanoldatives.com^
+||butashasp.site^
+||butflatter.com^
+||butlak.com^
+||butlerdelegate.com^
+||butrathakinrol.com^
+||butsenox.net^
+||butterflyitem.com^
+||butterflypronounceditch.com^
+||butterflyunkindpractitioner.com^
+||buttersource.com^
+||buyadvupfor24.com^
+||buyblotch.com^
+||buyeasy.by^
+||buylnk.com^
+||buymaxfield.com^
+||buyseoblog.com^
+||buytieposer.com^
+||buzzardcraizey.com^
+||buzzdancing.com^
+||buzzvids-direct.com^
+||bvcsfcx.com^
+||bvmcdn.com^
+||bvmcdn.net^
+||bvnlrqvinhsje.com^
+||bvoqzs.com^
+||bvtfutroyr.com^
+||bvudraqxpl.com^
+||bvyblnenz.com^
+||bwbmyzvjnqlna.top^
+||bwbmyzvjnqlwv.top^
+||bwmvzwkbqlmrz.top^
+||bwnmwhblsf.com^
+||bwvqjqmlkezkl.top^
+||bwzlmmqwrrarv.top^
+||bwzlmmqwrrnea.top^
+||bxacmsvmxb.com^
+||bxqeagaef.xyz^
+||bxscdyybtuxbfda.xyz^
+||bxvirhgaq.com^
+||bxwmfozavo.com^
+||byaiufr.com^
+||byambipoman.com^
+||byaronan.com^
+||bybastiodoner.com^
+||bybmfntv.xyz^
+||byccvtl.com^
+||bycelebian.com^
+||bycustomla.xyz^
+||bydcczwmxyd.com^
+||bydurantr.com^
+||byeej.com^
+||byfoongusor.com^
+||bygliscortor.com^
+||byildmkzjyjx.com^
+||byluvdiscor.com^
+||bymnyzbkylaaw.top^
+||bymnyzbkylvja.top^
+||bymnyzbkylvkv.top^
+||bymyth.com^
+||bypasseaseboot.com^
+||bypassprofessordemonstrate.com^
+||byrledmtscmd.com^
+||bysqbtyuugub.com^
+||bytejtxbulpncg.com^
+||bytesabbreviation.com^
+||bytesdictatescoop.com^
+||bytesreunitedcedar.com^
+||byteyieldcreated.com^
+||bytogeticr.com^
+||byvngx98ssphwzkrrtsjhnbyz5zss81dxygxvlqd05.com^
+||byvpezdzmpureo.com^
+||bywntfg.com^
+||byxcbixzvjclxz.com^
+||byyanmaor.com^
+||byzkrjamkqbal.top^
+||byzkrjamkqyjr.top^
+||byzkrjamkqykw.top^
+||bzamusfalofn.com^
+||bzsiyxkvehty.com^
+||bzuyxqrmndod.com^
+||bzxcygmykxymcj.com^
+||bzzmlqkljkrw.top^
+||bzzmlqkljyer.top^
+||c-4fambt.com^
+||c01d3ac9cb.com^
+||c0594.com^
+||c0c.xyz^
+||c0e8977ddc.com^
+||c0me-get-s0me.net^
+||c10ed2b8b417880.com^
+||c17b4e420d.com^
+||c1sf9.top^
+||c212a79d53.com^
+||c2370c7aa8.com^
+||c24c966867.com^
+||c39ed4de0b.com^
+||c3ecfc3556.com^
+||c3t-system-err.club^
+||c43a3cd8f99413891.com^
+||c44wergiu87heghoconutdx.com^
+||c473f6ab10.com^
+||c50021876c67fd14.com^
+||c514137cef.com^
+||c5b39ff13b3259df.com^
+||c67524ad03.com^
+||c67adca.com^
+||c69d50bdaf.com^
+||c71f427117.com^
+||c71genemobile.com^
+||c7d263f5d8.com^
+||c7ee346412.com^
+||c83cf15c4f.com^
+||c86e7c49a2.com^
+||c8d2c12c98.com^
+||c8f9398ccd.com^
+||c9072c600c.com^
+||c991aea613.com^
+||c9e9c1507e.com^
+||c9emgwai66zi.com^
+||c9l.xyz^
+||c9xv.xyz^
+||ca169a128b.com^
+||ca1dbc5563.com^
+||ca3362de0f.com^
+||ca3m6ari9rllo.com^
+||ca4psell23a4bur.com^
+||ca548318cc.com^
+||ca72472d7aee.com^
+||cabbagesemestergeoffrey.com^
+||cabbingpolynya.cam^
+||cabdacollied.com^
+||cabhwq.com^
+||cabindanancy.com^
+||cabinedfey.com^
+||cabinedslyish.com^
+||cabioredtop.com^
+||cabnnr.com^
+||caboclonymphly.com^
+||cabotsmuskit.com^
+||cachegorilla.com^
+||cackssandhog.com^
+||cadbitff.com^
+||cadencesubject.com^
+||cadetrigourlegitimate.com^
+||cadfixbig.site^
+||cadlsyndicate.com^
+||cadrctlnk.com^
+||cadsans.com^
+||cadsecs.com^
+||cadsimz.com^
+||cadskiz.com^
+||caeli-rns.com^
+||caesardamaging.com^
+||caesaw.com^
+||caffleklismos.website^
+||cagerssoohong.com^
+||cagesscan.com^
+||caglaikr.net^
+||cagolgzazof.com^
+||cagothie.net^
+||cahvpbsikxvvm.xyz^
+||caicuptu.xyz^
+||caigluph.xyz^
+||caigobou.com^
+||caimoasy.net^
+||cainauhi.xyz^
+||cainismlungee.uno^
+||cairalei.com^
+||caiteesh.net^
+||cajdldhaci.com^
+||cajesa.uno^
+||cajggfj.com^
+||cajipdiqqjijeh.xyz^
+||cajunecch.guru^
+||cakeprofessionally.com^
+||caketteemblem.uno^
+||cakiglun.xyz^
+||cakycalais.com^
+||calamityfortuneaudio.com^
+||calcpol.com^
+||calexits.uno^
+||calibrelugger.com^
+||caliphmalign.website^
+||callalelel.info^
+||callansrookish.life^
+||callerdumka.com^
+||callmeocaptain.xyz^
+||callmeooumou.com^
+||callousoverload.com^
+||callprintingdetailed.com^
+||callyourinformer.com^
+||calmlyilldollars.com^
+||calmsbocking.com^
+||calomelsiti.com^
+||calpacenemas.life^
+||caltertangintin.com^
+||calumnylightlyspider.com^
+||calvali.com^
+||camads.net^
+||camberchimp.com^
+||cambiaupblaze.uno^
+||cameesse.net^
+||camewiththe.com.ua^
+||camewiththe.xyz^
+||camiocw.com^
+||cammpaign.com^
+||camouque.net^
+||campingknown.com^
+||campjupiterjul.com^
+||camplacecash.com^
+||camprime.com^
+||camptrck.com^
+||camschat.net^
+||camshq.info^
+||camsitecash.com^
+||camsmotes.com^
+||camstime.life^
+||camusepipers.space^
+||camzap.com^
+||can-get-some.in^
+||can-get-some.net^
+||canangafierier.uno^
+||canastagruff.com^
+||candiruarf.com^
+||candypeaches.com^
+||candyprotected.com^
+||candyschoolmasterbullying.com^
+||canelastram.com^
+||cangatu.xyz^
+||canhamrolltop.uno^
+||cannelcaimito.com^
+||cannulamass.guru^
+||canoevaguely.com^
+||canonch.pro^
+||canramble.com^
+||cansdecyne.com^
+||canstrm.com^
+||cantdogblued.uno^
+||canthaltietick.space^
+||cantilyza.website^
+||canvassblanketjar.com^
+||canzonicassons.com^
+||canzoscomply.com^
+||canzosswager.com^
+||caoqebfaqnswc.com^
+||cap-cap-pop.com^
+||capableimpregnablehazy.com^
+||capaciousdrewreligion.com^
+||capaciouslistless.com^
+||capeantiquariandecision.com^
+||caperedlevi.com^
+||caphaiks.com^
+||capitalistlukewarmdot.com^
+||capletstyldia.com^
+||capndr.com^
+||cappaghdiamat.com^
+||cappens-dreperor.com^
+||cappleacouchy.com^
+||capraundine.live^
+||capricedes.com^
+||capricetheme.com^
+||capricewailinguniversity.com^
+||capricornplay.com^
+||caprissandhi.website^
+||caprizecaprizeretrievaltattoo.com^
+||captainad.com^
+||captaintassie.com^
+||captchafine.live^
+||captchaforcaptcha.top^
+||captivatecustomergentlemen.com^
+||captivateholscrook.com^
+||captivatepestilentstormy.com^
+||captiveimpossibleimport.com^
+||captureleaderdigestion.com^
+||car-bidpush.net^
+||caraganaarborescenspendula.com^
+||carajareplier.guru^
+||caraneoutraze.uno^
+||carbonads.com^
+||carcakeapagoge.com^
+||carcelsreside.com^
+||carcflma.de^
+||cardiwersg.com^
+||cardloomed.com^
+||careersadorable.com^
+||careewituhi.info^
+||careful-oven.pro^
+||careless-category.pro^
+||carenterhosi.xyz^
+||caressleazy.com^
+||caresspincers.com^
+||careuropecreatures.com^
+||carfulsranquel.com^
+||carganoetian.com^
+||cargotropical.com^
+||caringdeath.pro^
+||carlingquerent.com^
+||carlotcoopee.website^
+||carmeleanurous.com^
+||caroakitab.com^
+||carpenterexplorerdemolition.com^
+||carpi3fnusbetgu5lus.com^
+||carredwithblao.xyz^
+||carrellsubdit.com^
+||carrydollarcrashed.com^
+||carryhummight.com^
+||carryingfarmerlumber.com^
+||carrysincubi.com^
+||cartedneogene.com^
+||cartining-specute.com^
+||cartoonpeecommissioner.com^
+||cartrigechances.com^
+||caruagedlr.com^
+||carvallo.info^
+||carverfowlsmourning.com^
+||carverstingy.com^
+||carvyre.com^
+||casalemedia.com^
+||casaqueapogamy.com^
+||cascadewatchful.com^
+||casernbeings.com^
+||cash-ads.com^
+||cash-duck.com^
+||cash-program.com^
+||cash4members.com^
+||cashewsforlife208.com^
+||cashieratrocity.com^
+||cashlayer.com^
+||cashmylinks.com^
+||cashooscrunode.com^
+||cashoossikara.uno^
+||cashtrafic.com^
+||cashtrafic.info^
+||casinal.com^
+||casinohacksforyou.com^
+||casize.com^
+||casksteam.com^
+||caspion.com^
+||cassetteflask.com^
+||cassettelancefriday.com^
+||cassiansirex.space^
+||cassiusazide.com^
+||cassonjacamar.digital^
+||castcloudywhereby.com^
+||casterpretic.com^
+||castpallium.com^
+||casualhappily.com^
+||casualproof.com^
+||casumoaffiliates.com^
+||catalogueinfectionbarbarian.com^
+||cataloguerepetition.com^
+||cataractdisinteresteddressing.com^
+||cataractencroach.com^
+||cataractoutputprogramming.com^
+||cataractweedcove.com^
+||catastropheillusive.com^
+||catbeardx.com^
+||catchprayers.com^
+||catcxao.com^
+||catgride.com^
+||cathedralforgiveness.com^
+||catiligh.ru^
+||cationinin.com^
+||cationinina.one^
+||catmustyhypothesis.com^
+||catscanty.com^
+||catskinhounded.uno^
+||catspawquitu.website^
+||cattailaix.com^
+||cattledisplace.com^
+||catukhyistk.org^
+||catwenbat.com^
+||catwrite.com^
+||caubouru.xyz^
+||cauchoforegut.space^
+||caulibotas.com^
+||caulifloweraircraft.com^
+||cauliflowerpointlessebb.com^
+||caunaurou.com^
+||caunuscoagel.com^
+||causcs.com^
+||causeyoubusywithlife.com^
+||causingguard.com^
+||caussr.com^
+||cauthaushoas.com^
+||cautiotumfie.com^
+||cautiousroof.pro^
+||cauyuksehink.info^
+||cavalryconvincing.com^
+||cavalryoppression.com^
+||cavebummer.com^
+||cavecredentialdeer.com^
+||caveestate.com^
+||cavernousshift.pro^
+||cavilerestops.com^
+||cawbarthe.com^
+||cawlavzzap.com^
+||cawnielammy.com^
+||caxist.com^
+||caymanboreism.com^
+||cayoscerotin.guru^
+||cayucaoidwlfe.com^
+||cazibiukiyoe.com^
+||cb675f778b.com^
+||cba-fed-igh.com^
+||cbdedibles.site^
+||cbijwves.com^
+||cbilrirtqyawue.com^
+||cbltndzavx.com^
+||cbpslot.com^
+||cbrfnitjixegplp.xyz^
+||cbtmyonynqhrcdp.xyz^
+||cbyiqsfp.com^
+||cc-dt.com^
+||cc5dce551d.com^
+||cc72fceb4f.com^
+||cc954a8da8.com^
+||cca63f7d30.com^
+||ccaahdancza.com^
+||ccdneniusruhebl.com^
+||ccgkudwutf.com^
+||ccgzcavzbmztk.com^
+||cchdbond.com^
+||ccieoqej.xyz^
+||ccjzuavqrh.com^
+||ccmdcinut.com^
+||ccmiocw.com^
+||ccn08sth.de^
+||ccoybmnjw.com^
+||ccpckbb.com^
+||ccprrjr.com^
+||cczqyvuy812jdy.com^
+||cd1ca3a884.com^
+||cd490573c64f3f.com^
+||cd4d8554b1.com^
+||cd828.com^
+||cdceed.de^
+||cddtsecure.com^
+||cdeaffjujxchf.com^
+||cdn-adtrue.com^
+||cdn-server.cc^
+||cdn-server.top^
+||cdn.house^
+||cdn.optmn.cloud^
+||cdn.sdtraff.com^
+||cdn1.pro^
+||cdn12359286.ahacdn.me^
+||cdn28786515.ahacdn.me^
+||cdn2cdn.me^
+||cdn2reference.com^
+||cdn3.hentaihaven.fun^
+||cdn3reference.com^
+||cdn44221613.ahacdn.me^
+||cdn4ads.com^
+||cdn4image.com^
+||cdn5.cartoonporn.to^
+||cdn7.network^
+||cdn7.rocks^
+||cdnads.com^
+||cdnapi.net^
+||cdnativ.com^
+||cdnativepush.com^
+||cdnaz.win^
+||cdnbit.com^
+||cdncontentstorage.com^
+||cdnfimgs.com^
+||cdnfreemalva.com^
+||cdngain.com^
+||cdngcloud.com^
+||cdnkimg.com^
+||cdnondemand.org^
+||cdnpc.net^
+||cdnpsh.com^
+||cdnquality.com^
+||cdnrl.com^
+||cdnspace.io^
+||cdnspark.world^
+||cdnstatic01.xyz^
+||cdnstatic02.xyz^
+||cdntechone.com^
+||cdntestlp.info^
+||cdntrf.com^
+||cdnvideo3.com^
+||cdnware.com^
+||cdnware.io^
+||cdosagebreakfast.com^
+||cdpommmy.com^
+||cdrvrs.com^
+||cdsbnrs.com^
+||cdtbox.rocks^
+||cduamwclb.com^
+||cduygiph.com^
+||cdwbjlmpyqtv.com^
+||cdwehdnnprdntse.com^
+||cdwmpt.com^
+||cdwmtt.com^
+||ce2c208e9f.com^
+||ceamtaaprhha.xyz^
+||ceasechampagneparade.com^
+||ceawoment.info^
+||ceawvx.com^
+||cebygijy.pro^
+||ceceqckh.com^
+||cecilsdolia.com^
+||cecjjkiutbvu.com^
+||ced843cd18.com^
+||cedcb87e77.com^
+||ceekougy.net^
+||ceeleeca.com^
+||ceemoptu.xyz^
+||ceeqgwt.com^
+||cegadazwdsp.com^
+||cegrithy.net^
+||cehuiy.com^
+||ceilingbruiseslegend.com^
+||ceillons.site^
+||cekladod.com^
+||celaenomash.com^
+||celeb-ads.com^
+||celebratethreaten.com^
+||celebritybulk.com^
+||celebsreflect.com^
+||celeftrmfyq.xyz^
+||celeph.com^
+||celept.com^
+||celeritascdn.com^
+||celeryisolatedproject.com^
+||cellaraudacityslack.com^
+||cellarlocus.com^
+||cellarpassion.com^
+||cellistbeats.com^
+||cellojapanelmo.info^
+||cellsmonitor.com^
+||celotexchalaze.website^
+||cematuran.com^
+||cementadodunk.com^
+||cenaclesuccoth.com^
+||cenceevent.club^
+||cendantofth.org^
+||ceneicons.com^
+||ceneverdreams.com^
+||ceneverdreams.org^
+||cennter.com^
+||cenous.com^
+||censelysoviell.xyz^
+||censorcolonizegreatness.com^
+||centalkochab.com^
+||centasfavela.store^
+||centerattractivehimself.com^
+||centeredfailinghotline.com^
+||centerresourceseducational.com^
+||centralheat.net^
+||centralnervous.net^
+||centredrag.com^
+||centrexmeteor.com^
+||centureunornly.com^
+||centwrite.com^
+||cephalanthuseoccidu4entalis.com^
+||cephasrewed.com^
+||ceprovidingsesse.com^
+||cer43asett2iu5m.com^
+||cerceipremon.com^
+||cerillosuncup.guru^
+||cerjmlcauynwxe.com^
+||cermetsdibbles.uno^
+||cermetszanonia.com^
+||cerningronco.com^
+||certainalmostcontent.com^
+||certainlydisparagewholesome.com^
+||certificaterainbow.com^
+||certified-apps.com^
+||cesebsir.xyz^
+||cesfttajihif.top^
+||cesiumsemboite.com^
+||cessationrepulsivehumid.com^
+||cestibegster.com^
+||ceteembathe.com^
+||cetoniafulwa.website^
+||cevocoxuhu.com^
+||cewrndlpqzacv.com^
+||cexucetum.com^
+||cf2020176f.com^
+||cf97134c89.com^
+||cfasync.tk^
+||cfccc324b8.com^
+||cfcd10eebb.com^
+||cfcloudcdn.com^
+||cfehkwjupbrh.com^
+||cfgr1.com^
+||cfgr5.com^
+||cfivfadtlr.com^
+||cfrkiqyrtai.xyz^
+||cfrsoft.com^
+||cfts1tifqr.com^
+||cfubdjsolbs.com^
+||cgbaybqywso.com^
+||cgbmjsasm.xyz^
+||cgeckmydirect.biz^
+||cgupialoensa.com^
+||cgyqybeqthaeb.com^
+||chachophigy.pro^
+||chachors.net^
+||chadseer.xyz^
+||chaeffulace.com^
+||chaerel.com^
+||chafesnitchenglish.com^
+||chaftedmahsur.store^
+||chagaquean.uno^
+||chaghets.net^
+||chainads.io^
+||chainbelt.top^
+||chaindedicated.com^
+||chainerunca.com^
+||chainsap.net^
+||chaintopdom.nl^
+||chainwalladsery.com^
+||chainwalladsy.com^
+||chaiphuy.com^
+||chaiptut.xyz^
+||chairgaubsy.com^
+||chairmansmile.com^
+||chairwaydenew.site^
+||chaisewharry.top^
+||chaistos.net^
+||chajagibbous.com^
+||chalaips.com^
+||challasowns.com^
+||challengecircuit.com^
+||chamarwhisted.digital^
+||chambersthanweed.com^
+||chameleostudios.com^
+||chamib.com^
+||chamiteame.com^
+||chammaupases.life^
+||champaup.com^
+||champedhyps.com^
+||chancellorharrowbelieving.com^
+||chancellorstocky.com^
+||chandoowitumki.guru^
+||changarreviver.com^
+||changerwauking.com^
+||changesshortly.com^
+||channelvids.online^
+||channelvids.space^
+||chantmaftir.uno^
+||chapelalanine.com^
+||chapelcertain.com^
+||chargeheadlight.com^
+||chargenews.com^
+||chargeplatform.com^
+||chargesimmoderatehopefully.com^
+||chargestimetablechuckled.com^
+||charicymill.com^
+||charitablemilletplumber.com^
+||charitydestinyscornful.com^
+||charkasturnoff.com^
+||charmingblur.com^
+||charmingresumed.com^
+||charrewuzzer.com^
+||charsubsistfilth.com^
+||charterporous.com^
+||chartersettlingtense.com^
+||charterunwelcomealibi.com^
+||chasmsnaa.com^
+||chassescoothay.com^
+||chastehandkerchiefclassified.com^
+||chatheez.net^
+||chats2023.online^
+||chauckoo.xyz^
+||chaudrep.net^
+||chaugroo.net^
+||chauinubbins.com^
+||chaukrgukepers.xyz^
+||chauksoa.net^
+||chaulsan.com^
+||chaumsee.net^
+||chaursug.xyz^
+||chaussew.net^
+||chautcho.com^
+||chauwout.xyz^
+||cheap-result.pro^
+||cheap-trip.pro^
+||cheapcoveringpearl.com^
+||cheapenleaving.com^
+||cheaplycreateproprietor.com^
+||cheatingabate.com^
+||cheatingagricultural.com^
+||cheatingstiffen.com^
+||cheatoppressive.com^
+||chebecsunsack.com^
+||checaigu.net^
+||chechawia.com^
+||check-now.online^
+||check-out-this.site^
+||checkcdn.net^
+||checkcriey.website^
+||checkfilter.biz^
+||checkm8.com^
+||checkoutfree.com^
+||checkup02.biz^
+||checkupforecast.com^
+||checkyofeed.com^
+||cheddaramusias.life^
+||cheecmou.com^
+||cheekobsu.com^
+||cheelroo.net^
+||cheeltee.net^
+||cheemtoo.com^
+||cheepurs.xyz^
+||cheeradvise.com^
+||cheerful-resolution.com^
+||cheerful-thanks.pro^
+||cheerfullybakery.com^
+||cheerfullycling.com^
+||cheerlessfunnelconcealed.com^
+||cheeroredraw.com^
+||cheerseeftapps.com^
+||cheerysequelhoax.com^
+||cheesydebatablepantomime.com^
+||cheetieaha.com^
+||cheewhoa.net^
+||chefishoani.com^
+||cheksoam.com^
+||chelpe.com^
+||chemicsemsen.guru^
+||chemistryscramble.com^
+||chemitug.net^
+||chengaib.net^
+||chengoassa.com^
+||cheno3yp5odt7iume.com^
+||cheorg.com^
+||chepsoan.xyz^
+||chertefarcist.com^
+||chestishugli.com^
+||chetchen.net^
+||chethgentman.live^
+||chevetoelike.com^
+||chevisefancy.com^
+||chewersobolary.com^
+||chewremittanceprovidence.com^
+||chewsrompedhemp.com^
+||chezoams.com^
+||chfpgcbe.com^
+||chhfcpgj.com^
+||chiasephim.xyz^
+||chibchasuffete.com^
+||chicanowaffing.digital^
+||chichosebook.com^
+||chicks4date.com^
+||chicssnowman.com^
+||chieldsaine.com^
+||chijauqybb.xyz^
+||childperfunctoryhunk.com^
+||childrenplacidityconclusion.com^
+||childrenweavestun.com^
+||chileslatrede.com^
+||chiliadv.com^
+||chilionturcism.website^
+||chimamanndgaocozmi.com^
+||chimbsbuckle.com^
+||chimlaresider.com^
+||chimneylurdane.com^
+||china-netwave.com^
+||chineegibbet.com^
+||chinemcg.website^
+||chinkerdough.com^
+||chinoismoras.com^
+||chinsedsauna.live^
+||chioneflake.com^
+||chipeets.com^
+||chipleader.com^
+||chipmanksmochus.com^
+||chiptionics.co^
+||chirkacylal.com^
+||chiroouterly.com^
+||chirppronounceaccompany.com^
+||chissaibsgirls.com^
+||chitbillety.website^
+||chitika.net^
+||chl7rysobc3ol6xla.com^
+||chlibopi.xyz^
+||chlift.com^
+||chlign.com^
+||chlodd.com^
+||chmnscaurie.space^
+||chmsiecles.space^
+||cho7932105co3l2ate3covere53d.com^
+||choachim.com^
+||choacmax.xyz^
+||choagrie.com^
+||choahees.net^
+||choawour.xyz^
+||chocohjuanfhdhf.com^
+||chocolatebushbunny.com^
+||choconart.com^
+||choicedorm.top^
+||choiceencounterjackson.com^
+||chokedsmelt.com^
+||chokedstarring.com^
+||chokeweaknessheat.com^
+||chokupsupto.com^
+||cholatetapalos.com^
+||choobinoobi.com^
+||choogeet.net^
+||choomsiesurvey.top^
+||choongou.com^
+||choongou.xyz^
+||chooxail.com^
+||chooxaur.com^
+||choppedfraternityresume.com^
+||chopperarena.com^
+||choptacache.com^
+||chordoay.xyz^
+||choreakrelos.com^
+||choreasoutpour.com^
+||choregygables.life^
+||choreinevitable.com^
+||chortletarging.uno^
+||chosensoccerwriter.com^
+||choto.xyz^
+||chouftak.net^
+||chougail.net^
+||chounsee.xyz^
+||choupaig.xyz^
+||choupsee.com^
+||chozeers.xyz^
+||chpjnxbxvzmqpx.com^
+||chpok.pw^
+||chrantary-vocking.com^
+||chriahotcake.com^
+||chrif8kdstie.com^
+||chrigh.com^
+||chrisrespectivelynostrils.com^
+||christingera.site^
+||chrochr.com^
+||chroenl.com^
+||chrolae.com^
+||chrolal.com^
+||chronicads.com^
+||chrothe.com^
+||chrysostrck.com^
+||chsfdfkwsrjwe.xyz^
+||chshcms.net^
+||chsrkred.com^
+||chtntr.com^
+||chubbymess.pro^
+||chugaiwe.net^
+||chugsorlando.com^
+||chuhramumper.com^
+||chulhawakened.com^
+||chullohagrode.com^
+||chultoux.com^
+||chunkstoreycurled.com^
+||chunkysorance.space^
+||churchalexis.com^
+||churchclassified.com^
+||churchyardalludeaccumulate.com^
+||churci.com^
+||churnedflames.top^
+||churop.com^
+||chustozu.com^
+||chutneemunite.com^
+||chuxuwem.com^
+||chuxuwem.tv^
+||chvusgejxi.com^
+||chwmndsqtcfxx.xyz^
+||chyjobopse.pro^
+||chyxyrothi.com^
+||chzei.com^
+||ciajnlhte.xyz^
+||ciazdymfepv.com^
+||cicelysewans.com^
+||cideparenhem.com^
+||ciedpso.com^
+||cierzoskismat.com^
+||cifawsoqvawj.com^
+||cifflattie.com^
+||cifqfyafsolzb.com^
+||ciksolre.net^
+||cima-club.club^
+||cimm.top^
+||cimoghuk.net^
+||cinemahelicopterwall.com^
+||cineolesloth.com^
+||cipangobesots.com^
+||cipdn.com^
+||cipledecline.buzz^
+||cirazi.com^
+||circlegrandsonnod.com^
+||circuitedmund.com^
+||circuitingratitude.com^
+||circumstantialeltondirtiness.com^
+||circumstantialplatoon.com^
+||cirmudcap.com^
+||cirsoiddanize.com^
+||ciscoesfirring.guru^
+||cisheeng.com^
+||cisiwa.site^
+||ciststoquets.space^
+||citatumpity.com^
+||citemesabourer.xyz^
+||citersbugre.digital^
+||citizenshadowrequires.com^
+||cittem.com^
+||cityadspix.com^
+||citycoordinatesnorted.com^
+||citydsp.com^
+||citysite.net^
+||civadsoo.net^
+||civileunresty.com^
+||civilizationmoodincorporate.com^
+||civilizationperspirationhoroscope.com^
+||civilizationrequestsshops.com^
+||civilizationthose.com^
+||civith.com^
+||civvymutedly.com^
+||ciwhacheho.pro^
+||cixaxuyu.xyz^
+||cizare.xyz^
+||cjewz.com^
+||cjf25jklrwqt.com^
+||cjlph.com^
+||cjqncwfxrfrwbdd.com^
+||cjt3w2kxrv.com^
+||cjvdfw.com^
+||cjxomyilmv.com^
+||cjyopjydlwkyu.com^
+||ckfkigayvdb.com^
+||ckgsrzu.com^
+||ckofrnk.com^
+||ckrf1.com^
+||ckspodaotjotkn.com^
+||ckuwrlxngdrfk.com^
+||ckvfghrbdfjsoet.com^
+||ckwvebqkbl.xyz^
+||ckyjapugk.com^
+||cl0udh0st1ng.com^
+||clackderiver.com^
+||cladp.com^
+||cladsneezesugar.com^
+||cladupius.com^
+||claggeduniter.com^
+||claimcutejustly.com^
+||claimedinvestcharitable.com^
+||clairedikio.club^
+||clairiose.pro^
+||clamourcerillo.digital^
+||clanklastingfur.com^
+||clapperfone.uno^
+||claquefumeuse.com^
+||clariniwoald.com^
+||clarityactressmourning.com^
+||clarityimpliedintestine.com^
+||clarityray.com^
+||clashencouragingwooden.com^
+||claspedammu.com^
+||claspedtwelve.com^
+||claspluke.com^
+||claspthee.com^
+||classesfolksprofession.com^
+||classicbf.com^
+||classicseight.com^
+||clasticjosephs.com^
+||clasticrudista.com^
+||clastslynches.website^
+||clatchsenega.com^
+||claubercupels.com^
+||clausedung.com^
+||clauseemploy.com^
+||clausumbaret.uno^
+||clausumskelper.com^
+||clavialgannets.top^
+||clavismosey.guru^
+||claxoncapivi.com^
+||clayierglaiks.com^
+||clbaf.com^
+||clbjmp.com^
+||clcassd.com^
+||clcknads.pro^
+||clcknipop.com^
+||clckpbnce.com^
+||clckysudks.com^
+||cldlr.com^
+||cldlyuc.com^
+||clean-browsing.com^
+||clean.gg^
+||cleanbrowser.network^
+||cleanerultra.club^
+||cleaneryelded.site^
+||cleanflawlessredir.com^
+||cleanmediaads.com^
+||cleantrafficrotate.com^
+||clear-request.com^
+||clearac.com^
+||clearadnetwork.com^
+||clearancejoinjavelin.com^
+||clearancetastybroadsheet.com^
+||clearonclick.com^
+||cleavepreoccupation.com^
+||cleaversince.com^
+||cleddeexcl.com^
+||clefsgast.top^
+||clefskenelm.com^
+||cleftinform.com^
+||clemencyexceptionpolar.com^
+||clementmeddling.com^
+||clementsing.com^
+||cleopatratasty.com^
+||clergymanwonderful.com^
+||clerrrep.com^
+||clerumwipeout.guru^
+||clever-redirect.com^
+||cleverjump.org^
+||clevernesswood.com^
+||clevernt.com^
+||cleverwebserver.com^
+||clevv.com^
+||clfxjrlui.com^
+||clfxts.com^
+||clicadu.com^
+||clichedreinter.digital^
+||click-cdn.com^
+||click.scour.com^
+||click4free.info^
+||clickadin.com^
+||clickagy.com^
+||clickalinks.xyz^
+||clickallow.net^
+||clickaslu.com^
+||clickbigo.com^
+||clickbooth.com^
+||clickboothlnk.com^
+||clickcash.com^
+||clickcdn.co^
+||clickco.net^
+||clickexperts.net^
+||clickgate.biz^
+||clickgate08.biz^
+||clickintext.com^
+||clickiocdn.com^
+||clickkingdom.net^
+||clickmagick.com^
+||clickmi.net^
+||clickmobad.net^
+||clicknano.com^
+||clicknerd.com^
+||clickopop1000.com^
+||clickosmedia.com^
+||clickoutnetwork.care^
+||clickpapa.com^
+||clickperks.info^
+||clickprotects.com^
+||clickpupbit.com^
+||clickreverendsickness.com^
+||clicks4tc.com^
+||clicksgear.com^
+||clicksmint.site^
+||clicksondelivery.com^
+||clicksor.net^
+||clicksvenue.com^
+||clickterra.net^
+||clickthruhost.com^
+||clickthruserver.com^
+||clicktraceclick.com^
+||clicktracklink.com^
+||clicktrixredirects.com^
+||clicktroute.com^
+||clicktrpro.com^
+||clickupto.com^
+||clickurlik.com^
+||clickwedkeys.com^
+||clickwhitecode.com^
+||clickwinks.com^
+||clickxchange.com^
+||clictrck.com^
+||clikxoiqvdlec.xyz^
+||climatestandpoint.com^
+||climbskoso.com^
+||climesmazdoor.com^
+||clinchpresent.com^
+||clinerybelfast.info^
+||clinkeasiestopponent.com^
+||clipperroutesevere.com^
+||clipsepterin.guru^
+||cliquesteria.net^
+||clixsense.com^
+||clixwells.com^
+||clkbnoqb.com^
+||clkepd.com^
+||clkindsstt.com^
+||clknrtrg.pro^
+||clkofafcbk.com^
+||clkrev.com^
+||clksite.com^
+||clmbtech.com^
+||clmcom.com^
+||clnk.me^
+||clodsplit.com^
+||clodyields.com^
+||clogstrollcastle.com^
+||cloisonprecool.uno^
+||cloisteroutdooragitate.com^
+||clokemidriff.com^
+||cloneabaff.com^
+||clongerip.com^
+||clonkfanion.com^
+||clopembira.website^
+||clorec.net^
+||clorec2.net^
+||closed-consequence.com^
+||closedpersonify.com^
+||closvisarga.com^
+||clotezar.com^
+||clothcogitate.com^
+||clothesexhausted.com^
+||clothesgrimily.com^
+||clothingsphere.com^
+||clottedpowerlessmade.com^
+||clotthirstyshare.com^
+||cloud-repository.com^
+||cloudcnfare.com^
+||cloudconvenient.com^
+||clouddecrease.com^
+||cloudembed.net^
+||cloudflare.solutions^
+||cloudfrale.com^
+||cloudiiv.com^
+||cloudimagesa.com^
+||cloudimagesb.com^
+||cloudioo.net^
+||cloudlessjimarmpit.com^
+||cloudlessverticallyrender.com^
+||cloudlogobox.com^
+||cloudpsh.top^
+||cloudtrack-camp.com^
+||cloudtraff.com^
+||cloudvideosa.com^
+||cloudypotsincluded.com^
+||clownunknownaffect.com^
+||clrstm.com^
+||clubpenguinclub.com^
+||cludderrattons.com^
+||cluethydash.com^
+||cluewauling.life^
+||clumperrucksey.life^
+||clumsyflint.com^
+||cluodlfare.com^
+||clurvypxvji.com^
+||clutchlilts.com^
+||cluttercallousstopped.com^
+||cluttered-emphasis.pro^
+||cluttered-win.pro^
+||clvacjv.com^
+||clvceacvvwgk.xyz^
+||clxlxmbtysabn.com^
+||clydetugger.com^
+||cm-trk3.com^
+||cm-trk5.com^
+||cmadserver.de^
+||cmasisrjbgfv.xyz^
+||cmbestsrv.com^
+||cmclean.club^
+||cmdgbuddies.guru^
+||cmfads.com^
+||cmhokiknvamu.xyz^
+||cmlwaup.com^
+||cmnepalslma.com^
+||cmpgns.net^
+||cmptatbpxo.xyz^
+||cmptxkorcvssw.com^
+||cmqjims.com^
+||cmrdr.com^
+||cms100.xyz^
+||cmsxodnj.xyz^
+||cmtrkg.com^
+||cn-rtb.com^
+||cn846.com^
+||cndeccsqtmjyh.com^
+||cnfccdxhggrz.com^
+||cngcpy.com^
+||cnifypm.com^
+||cnnected.org^
+||cnofijeash.xyz^
+||cnpkqvtiwcfjsot.xyz^
+||cnredg.xyz^
+||cnt.my^
+||cntrafficpro.com^
+||cntrktaieagnam.com^
+||cnvuspci.com^
+||co5n3nerm6arapo7ny.com^
+||coacil.com^
+||coakstooled.website^
+||coalitechloro.com^
+||coaphauk.net^
+||coaptjounces.guru^
+||coarooro.net^
+||coastlineahead.com^
+||coastlinebravediffers.com^
+||coatsanguine.com^
+||coatsnacrine.com^
+||coawheer.net^
+||coaxcomet.com^
+||coaxeswir.com^
+||coaxwrote.com^
+||cobalten.com^
+||cobnutsaverter.life^
+||cobwebhauntedallot.com^
+||cobweblockerdiana.com^
+||cobworksurview.com^
+||cocaocravat.digital^
+||cocath.com^
+||coccalunhele.space^
+||coccinstuart.com^
+||cocklacock.com^
+||cocleatalions.com^
+||cocoaadornment.com^
+||cocoachviver.com^
+||coconutsoftenedput.com^
+||coconutsumptuousreseptivereseptive.com^
+||cocoonelectronicsconfined.com^
+||cocoontonight.com^
+||cocosyeta.com^
+||codaminuncinct.com^
+||codedexchange.com^
+||codefund.app^
+||codefund.io^
+||codeinagugal.com^
+||codeinssomdel.uno^
+||codemylife.info^
+||codeonclick.com^
+||coderformylife.info^
+||codesbro.com^
+||codezap.com^
+||codsooms.net^
+||coedmediagroup.com^
+||coefficientpayslipssuicide.com^
+||coehornliebig.com^
+||coelinepinal.website^
+||coendouspare.com^
+||coercerwhuther.com^
+||coeton.website^
+||coevalscabbagy.com^
+||coffeeliketime.com^
+||coffeemildness.com^
+||coffindress.com^
+||cofounderspecials.com^
+||cogentpatientmama.com^
+||cogenttriprepel.com^
+||coggingilya.com^
+||cogitatenun.com^
+||cogitateseparated.com^
+||cogleapad.com^
+||cogmuymatmehjr.com^
+||cognateparsley.com^
+||cognateprogrammeteenage.com^
+||cognitionmesmerize.com^
+||cohabitrecipetransmitted.com^
+||cohade.uno^
+||coherebehalf.com^
+||coherenceinvest.com^
+||coherentinflationescort.com^
+||coherepeasant.com^
+||cohertfause.uno^
+||coholy.com^
+||coignsunrent.com^
+||coilincomplete.com^
+||coinad.media^
+||coinadster.com^
+||coinbaze.lol^
+||coinblocktyrusmiram.com^
+||coinio.cc^
+||coinverti.com^
+||coixclamps.com^
+||colanbalkily.com^
+||colanx.com^
+||colarak.com^
+||cold-cold-freezing.com^
+||cold-priest.com^
+||coldflownews.com^
+||coldhardcash.com^
+||coldnesfspubli.com^
+||coldvain.com^
+||coleurpeng.com^
+||coliassfeurytheme.com^
+||colintoxicate.com^
+||colinuncaps.com^
+||coliticmiff.guru^
+||collapsecheering.com^
+||collapsecuddle.com^
+||collarchefrage.com^
+||collecl.cc^
+||collection-day.com^
+||collectionspriestcardiac.com^
+||collectloopblown.com^
+||collectorcommander.com^
+||collectorearnammonia.com^
+||collectrum.com^
+||collegerayas.com^
+||colliersads.com^
+||collisionasheseliminate.com^
+||collowhypoxis.com^
+||colognenobilityfrost.com^
+||cologu.com^
+||colombomyeloid.live^
+||colomboyees.com^
+||colonialismpeachy.com^
+||colonistnobilityheroic.com^
+||coloniststarter.com^
+||colorinmeasure.com^
+||colorschemeas.com^
+||colossal-bear.pro^
+||colourinitiative.com^
+||coloursstandard.com^
+||colovepuquina.guru^
+||coltagainst.pro^
+||colum-rvb.com^
+||columnistcandour.com^
+||columnsremembrancesoap.com^
+||colved.com^
+||com-wkejf32ljd23409system.net^
+||comalonger.com^
+||combatdenotecasserole.com^
+||combia-tellector.com^
+||combinationpalmwhiskers.com^
+||combinedexterior.com^
+||combineencouragingutmost.com^
+||combitly.com^
+||combotag.com^
+||comdrbonum.website^
+||come-get-s0me.com^
+||come-get-s0me.net^
+||comeadvertisewithus.com^
+||comelybeefyage.com^
+||comementran.info^
+||comenicurled.space^
+||comermormal.com^
+||comezz.xyz^
+||comfortable-preparation.pro^
+||comfortclick.co.uk^
+||comfortlessspotsbury.com^
+||comfreeads.com^
+||comicplanet.net^
+||comicsdashboardcombustible.com^
+||comihon.com^
+||comilar-efferiff.icu^
+||comitalmows.com^
+||commandmentcolinclub.com^
+||commandsorganizationvariations.com^
+||commentaryinduce.com^
+||commercial-i30.com^
+||commercialvalue.org^
+||commiseratefacilenotably.com^
+||commission-junction.com^
+||commissionkings.ag^
+||commissionlounge.com^
+||commitmentmeet.com^
+||committeereconcilelibrarian.com^
+||commonvivacious.com^
+||communicatequietboost.com^
+||compactblackmailmossy.com^
+||compactyunker.com^
+||comparativevegetables.com^
+||comparedsilas.com^
+||compareproprietary.com^
+||comparisonpredatororigin.com^
+||compassionatearea.pro^
+||compassionorb.com^
+||compasspenitenthollow.com^
+||compatibilityproduces.com^
+||compatiblepullcork.com^
+||compelgraduation.com^
+||compellingperch.com^
+||compensationpropulsion.com^
+||compensationstout.com^
+||competentminorvex.com^
+||competitivepopcheerleader.com^
+||compiledonatevanity.com^
+||compileformality.com^
+||complainfriendshipperry.com^
+||complainmissing.com^
+||complainstarlingsale.com^
+||complaintsoperatorbrewing.com^
+||complementceased.com^
+||complementimpassable.com^
+||completelystair.com^
+||completelywrath.com^
+||complex-relationship.com^
+||complexioncreditsergeant.com^
+||complicatedincite.com^
+||complicatedsuit.pro^
+||complicationsupervise.com^
+||complimentarycalibertwo.com^
+||comporthunder.uno^
+||compositeoverdo.com^
+||comprehendbighearted.com^
+||comprehendpaying.com^
+||comprehensiveunconsciousblast.com^
+||compresshumpenvious.com^
+||compriseparameters.com^
+||compromiseadaptedspecialty.com^
+||compromiseprepenseprepenseassumed.com^
+||compulsionspotsbeacon.com^
+||comradeglorious.com^
+||comunicazio.com^
+||comurbate.com^
+||comymandars.info^
+||conative.network^
+||concealbeakerdough.com^
+||concealmentbrainpower.com^
+||conceitedarmpit.com^
+||conceitedblessblockade.com^
+||conceitslidpredicate.com^
+||conceivedunpredictable.com^
+||conceiveequippedhumidity.com^
+||concentleconse.site^
+||concentratebeauabsolute.com^
+||concentrateclaims.com^
+||concentrationmajesticshoot.com^
+||concentrationminefield.com^
+||conceptualizefact.com^
+||concernederase.com^
+||concernedwhichever.com^
+||concerntypisthumility.com^
+||concord.systems^
+||concoursegrope.com^
+||concoursestrickenpuppy.com^
+||concreteprotectedwiggle.com^
+||concurrencepride.com^
+||concussionpollutioncrummy.com^
+||condensedmassagefoul.com^
+||condles-temark.com^
+||condoleextensive.com^
+||condolencespicturesquetracks.com^
+||condolencessumcomics.com^
+||condoleparticipationfable.com^
+||conductiveruthless.com^
+||conductmassage.com^
+||conductoraspirinmetropolitan.com^
+||conduit-banners.com^
+||conduit-services.com^
+||conetizable.com^
+||confdatabase.com^
+||conferencesimply.com^
+||confessedensure.com^
+||confessundercover.com^
+||confidentexplanationillegal.com^
+||confideshrinebuff.com^
+||confidethirstyfrightful.com^
+||configurationluxuriantinclination.com^
+||confinedexception.com^
+||confinehindrancethree.com^
+||confirmationefficiency.com^
+||confirmationevidence.com^
+||confirmationyoungsterpaw.com^
+||confirmexplore.com^
+||confiscateappellationreason.com^
+||confiskbriggs.top^
+||confrontationdrunk.com^
+||confrontationlift.com^
+||confrontbitterly.com^
+||confused-camera.com^
+||confused-classic.pro^
+||confvtt.com^
+||congestionbeautycrystal.com^
+||congestit.com^
+||congostudia.com^
+||congressaffrayghosts.com^
+||congressbench.com^
+||coningweedery.store^
+||conjectureprecedingslippers.com^
+||conjeetinemen.life^
+||conjeller-chikemon.com^
+||connectad.io^
+||connectignite.com^
+||connectingdoll.com^
+||connectingresort.com^
+||connexplace.com^
+||connextra.com^
+||conorentail.com^
+||conoret.com^
+||conquercaniceberg.com^
+||conquereddestination.com^
+||conquestafloat.com^
+||conquestdrawers.com^
+||consciousslice.com^
+||consensusarticles.com^
+||consequentlydistraughtpasta.com^
+||conservationdisposable.com^
+||conservationlumber.com^
+||considerate-brief.pro^
+||consideratepronouncedcar.com^
+||considerationsheltercreed.com^
+||consistinedibleconnections.com^
+||consmo.net^
+||consoupow.com^
+||constablecuisinehamster.com^
+||constellationdelightfulfull.com^
+||consternationbale.com^
+||consternationmysticalstuff.com^
+||constintptr.com^
+||constituentonset.com^
+||constitutekidnapping.com^
+||constructdrankconcentration.com^
+||constructionjeffben.com^
+||constructionrejection.com^
+||constructivesmoking.com^
+||constructpoll.com^
+||construment.com^
+||consukultinge.info^
+||consukultingeca.com^
+||consultantpatientslaughter.com^
+||consultingballetshortest.com^
+||contadd.com^
+||contagiongrievedoasis.com^
+||contagiousaugust.com^
+||containinglayrefund.com^
+||containsmedievalcorrectly.com^
+||containswasoccupation.com^
+||contalyze.com^
+||contehos.com^
+||contemplatepuddingbrain.com^
+||contemplatereunitededgy.com^
+||content-ad.net^
+||content-rec.com^
+||contentabc.com^
+||contentango.com^
+||contentango.online^
+||contentcave.co.kr^
+||contentclick.co.uk^
+||contentdigital.info^
+||contentedtoothacheturk.com^
+||contentjs.com^
+||contentmentcareless.com^
+||contentmentchef.com^
+||contentmentweek.com^
+||contentr.net^
+||contentshamper.com^
+||contextweb.com^
+||contfor.fun^
+||contih.com^
+||continentalaileendepict.com^
+||continuedhostilityequipped.com^
+||continuousformula.com^
+||continuousowenspaniard.com^
+||contradictionclinch.com^
+||contraeery.space^
+||contributesieveusers.com^
+||contributorshaveangry.com^
+||contried.com^
+||contrivancefrontage.com^
+||contrivedsaladhandicapped.com^
+||controlfleys.store^
+||controversialarableprovide.com^
+||controversialseen.com^
+||controversydeliveredpoetry.com^
+||conumal.com^
+||convalescemeltallpurpose.com^
+||convdlink.com^
+||convenientcertificate.com^
+||conventforgotten.com^
+||conventionalrestaurant.com^
+||convers.link^
+||convertmb.com^
+||conveysvelure.life^
+||convincedtrick.com^
+||convrse.media^
+||convsweeps.com^
+||conyak.com^
+||coochhastier.top^
+||cooeyeddarbs.com^
+||coofumberty.digital^
+||coogoocy.com^
+||coojaiku.com^
+||cookeryeighth.com^
+||cookieless-data.com^
+||cookinghither.com^
+||cool.sunporno.com^
+||coolappland.com^
+||coolappland1.com^
+||coolappland3.com^
+||coolappland4.com^
+||coolehim.xyz^
+||coolinghistory.com^
+||coolingstiffenlegend.com^
+||cooljony.com^
+||coollyadmissibleclack.com^
+||coolpornvids.com^
+||coolserving.com^
+||coolstreamsearch.com^
+||coonandeg.xyz^
+||coonceder.space^
+||coonilyciwies.guru^
+||cooperativechuckledhunter.com^
+||cooperativepassenger.com^
+||coostujina.com^
+||cootersorry.com^
+||cootlogix.com^
+||coovouch.com^
+||copacet.com^
+||copcaneersand.xyz^
+||copesfirmans.com^
+||cophoe.com^
+||copict.com^
+||copiedglittering.com^
+||copperseafoodearphones.com^
+||copterezba.com^
+||copusorpinc.guru^
+||copyrightaccesscontrols.com^
+||coquitahaiduk.com^
+||cor8ni3shwerex.com^
+||coralsurveyed.com^
+||corbycostive.website^
+||corderclotho.com^
+||cordinghology.info^
+||cordydikes.guru^
+||coreevolutionadulatory.com^
+||coreignpetered.store^
+||coreportions.com^
+||corepsh.top^
+||coresepyllia.com^
+||corialthanes.life^
+||corkiteihp.website^
+||corkremembranceastray.com^
+||corneey.com^
+||corneredcommunicationcancel.com^
+||cornerscheckbookprivilege.com^
+||cornuspurfled.com^
+||coronafly.ru^
+||coronationinjurynoncommittal.com^
+||coronetkittles.com^
+||corporategarnish.com^
+||corporatethankfulfinding.com^
+||corpulentoverdoselucius.com^
+||corpulentrubber.com^
+||correctcitolas.com^
+||correctionsnailnestle.com^
+||corruptclients.com^
+||corruptheedless.com^
+||corruptmatter.com^
+||corsakpeize.com^
+||corvetwoorari.com^
+||corvinapaella.life^
+||corymbszinzar.com^
+||cosenflame.com^
+||cosmeticsgenerosity.com^
+||cosmicpartially.com^
+||cosmismnatchez.com^
+||cosseterrits.com^
+||costaquire.com^
+||costatevamped.com^
+||costhandbookfolder.com^
+||costsimperialapparent.com^
+||costumebodiesfires.com^
+||cotalles.com^
+||cotchaug.com^
+||coticoffee.com^
+||cotingavintry.website^
+||coubte.com^
+||coudswamper.com^
+||couhiboa.com^
+||couldburgeon.com^
+||couldobliterate.com^
+||coumasha.xyz^
+||councedvdvg.club^
+||counciladvertising.net^
+||councilheader.com^
+||counda.com^
+||coundt.com^
+||counsellingrouge.com^
+||counsellorunderwaterstriped.com^
+||countertrck.com^
+||countessbridge.com^
+||countlesstrustworthylamb.com^
+||countriesnews.com^
+||countryinflammable.com^
+||countrynot.com^
+||countshryw.xyz^
+||countypuddleillusion.com^
+||coupbezzant.com^
+||couphait.net^
+||coupleairplane.com^
+||couplestupidity.com^
+||coupocee.xyz^
+||coupsonu.net^
+||couptoug.net^
+||courageimportancedirections.com^
+||couriree.xyz^
+||courospederogis.com^
+||coursebrushedassume.com^
+||courselfnorter.xyz^
+||coursyorpins.space^
+||courteous-development.com^
+||courthousedefective.com^
+||courtroomboyfriend.com^
+||courtsbeltmen.com^
+||cousingypsy.com^
+||cousinscostsalready.com^
+||coutherunlawed.website^
+||couthieisobath.com^
+||coutilresgat.com^
+||couwainu.xyz^
+||couwhivu.com^
+||coveredbetting.com^
+||covisithebraic.com^
+||covivado.club^
+||cowagesabaca.life^
+||cowbanequoit.space^
+||cowbumply.com^
+||cowmankai.com^
+||cowmanvampyre.uno^
+||coxaesmooth.digital^
+||coxiesthubble.com^
+||coxosots.xyz^
+||coxziptwo.com^
+||coyotesgangan.com^
+||coysotown.com^
+||coyward.com^
+||cpa-optimizer.online^
+||cpa3iqcp.de^
+||cpabeyond.com^
+||cpaclicks.com^
+||cpaconvtrk.net^
+||cpalabtracking.com^
+||cpaoffers.network^
+||cpaokhfmaccu.com^
+||cpaspeed.online^
+||cpaway.com^
+||cpays.com^
+||cpcmart.com^
+||cpcstdploqqh.com^
+||cpddwyuyd.com^
+||cpfwffke.com^
+||cpl1.ru^
+||cplayer.pw^
+||cpm-ad.com^
+||cpm.biz^
+||cpm10.com^
+||cpm20.com^
+||cpmadvisors.com^
+||cpmclktrk.online^
+||cpmgatenetwork.com^
+||cpmmedia.net^
+||cpmnetworkcontent.com^
+||cpmprofitablecontent.com^
+||cpmprofitablenetwork.com^
+||cpmrevenuenetwork.com^
+||cpmrocket.com^
+||cpmspace.com^
+||cpmtree.com^
+||cpng.lol^
+||cpsult.com^
+||cptroux.com^
+||cpuim.com^
+||cpvads.com^
+||cpvadvertise.com^
+||cpvlabtrk.online^
+||cpx24.com^
+||cpxadroit.com^
+||cpxdeliv.com^
+||cpxinteractive.com^
+||cqdaznl.com^
+||cqddhfjl.com^
+||cqfqrvghjgu.com^
+||cqlsewa.com^
+||cqlupb.com^
+||cqmmacgxqhmk.com^
+||cqngirxstgeeg.com^
+||cqnmtmqxecqvyl.com^
+||cqrvwq.com^
+||cqwajn.com^
+||cqxtivmquu.com^
+||cr-brands.net^
+||cr08.biz^
+||crabdefend.com^
+||cracktraumatic.com^
+||craftsmancaptivity.com^
+||craftsmanvolleyballhist.com^
+||cragconcluded.com^
+||craharice.com^
+||crajeon.com^
+||crakbanner.com^
+||crampformationparticularly.com^
+||cranebecomingwindfall.com^
+||craneykori.uno^
+||cranialjehu.com^
+||crankerunborn.com^
+||crankyderangeabound.com^
+||crantscopart.com^
+||crashexecute.com^
+||cratchcfi.com^
+||crawledlikely.com^
+||crayfishremindembroider.com^
+||crayfishshepherd.com^
+||crazyhell.com^
+||crazylead.com^
+||crbbgate.com^
+||crcgrilses.com^
+||crdefault.link^
+||crdefault1.com^
+||crdkibrwkiua.com^
+||creamssicsite.com^
+||creaperu.com^
+||create2fear.com^
+||createsgummous.com^
+||creative-bars1.com^
+||creative-serving.com^
+||creative-thought.pro^
+||creativecdn.com^
+||creativedisplayformat.com^
+||creativeformatsnetwork.com^
+||creativesumo.com^
+||creativetourlips.com^
+||crectipumlu.com^
+||credentialsdispatchsuperstitious.com^
+||credibilitystakehemisphere.com^
+||credibilityyowl.com^
+||creditbitesize.com^
+||creditorapido.xyz^
+||credulityicicle.com^
+||creedaileenboiler.com^
+||creeguilds.com^
+||creekrecollectkey.com^
+||creepercard.com^
+||creeperfutileforgot.com^
+||creepingbrings.com^
+||creeppant.com^
+||creepyassist.pro^
+||creepybuzzing.com^
+||crematedarkerdwight.com^
+||crengate.com^
+||crentexgate.com^
+||crepgate.com^
+||creptdeservedprofanity.com^
+||cresfpho2ntesepapillo3.com^
+||cresivetanach.com^
+||cressbeclose.com^
+||crestfallenwall.com^
+||cresylhatband.com^
+||cretgate.com^
+||creticoutdid.com^
+||crevicedepressingpumpkin.com^
+||cribwarilyintentional.com^
+||cricksnatchez.com^
+||criesnonstopbake.com^
+||criesresentstrangely.com^
+||crific.com^
+||crimeaboist.com^
+||crimeansnakily.com^
+||criminalmention.pro^
+||criminalweightforetaste.com^
+||crimpedmelanic.com^
+||crimsondozeprofessional.com^
+||crisdomson.com^
+||crisistuesdayartillery.com^
+||cristianonaldo.com^
+||cristifibster.life^
+||critariatele.pro^
+||criticaltriggerweather.com^
+||criticismheartbroken.com^
+||criticpraiser.com^
+||crittercorupay.com^
+||crjdgldmb.com^
+||crjpgate.com^
+||crjpingate.com^
+||crm4d.com^
+||crmentjg.com^
+||crnhbkd.com^
+||croakconfirmedget.com^
+||crocopop.com^
+||crojikenatic.tech^
+||crooth.com^
+||croplake.com^
+||crossroaddividerecorded.com^
+||crossroadoutlaw.com^
+||crossroadparalysisnutshell.com^
+||crottlerennin.com^
+||croupyjacu.life^
+||crowbarorchat.uno^
+||crowdgravity.com^
+||crownswoden.space^
+||crozzleaclydes.space^
+||crpcruynxxc.com^
+||crptentry.com^
+||crptgate.com^
+||crrepo.com^
+||crsspxl.com^
+||crtracklink.com^
+||crucianbasyl.com^
+||crudelouisa.com^
+||cruel-national.pro^
+||crueltyrefundye.com^
+||cruetychumpy.com^
+||cruisetitleclosed.com^
+||crumbledatabasesmeasure.com^
+||crumblerefunddiana.com^
+||crumbrationally.com^
+||crumbtypewriterhome.com^
+||crumbumgristly.space^
+||crummygoddess.com^
+||crumplylenient.com^
+||crunchybears.com^
+||crunodedysuric.digital^
+||crushedignoring.com^
+||crushingconflict.pro^
+||crushlaunces.digital^
+||crusilyparonym.com^
+||cruthdivisi.life^
+||crxnegluvjquvlp.xyz^
+||cryartarm.online^
+||cryingforanythi.com^
+||cryjun.com^
+||cryonickru.com^
+||cryorganichash.com^
+||cryptraffic.de^
+||cschyogh.com^
+||cshbyjjgdtc.com^
+||csiasvapqrccq.com^
+||csjuq.com^
+||csoxbkscuflef.com^
+||csqgebok.com^
+||csrmohcym.com^
+||csrrxwd.com^
+||csscloudstorage.com^
+||csvejabtxsccr.xyz^
+||ctasnet.com^
+||ctationsele.info^
+||ctcgrpmxywckfhw.xyz^
+||ctefeminin.com^
+||ctengine.io^
+||cteripre.com^
+||cthisismoych.com^
+||cthkgodgy.com^
+||ctiarbwaxam.com^
+||cticalwhichhere.info^
+||ctiotjobkfu.com^
+||ctm-media.com^
+||ctmdtrvikipjfv.xyz^
+||ctnsnet.com^
+||ctoosqtuxgaq.com^
+||ctoziphius.com^
+||ctqwlbxq.com^
+||ctrlaltdel99.com^
+||ctsau.xyz^
+||ctsccrxfaqiq.xyz^
+||ctsdwm.com^
+||ctsjackupspete.com^
+||ctthatmyeduca.net^
+||ctubhxbaew.com^
+||ctwlucwq.com^
+||cubbingrebbes.com^
+||cubeslichees.com^
+||cubgeographygloomily.com^
+||cubtimohawk.life^
+||cuchpfvsk.xyz^
+||cuckoiz.lol^
+||cuckooretire.com^
+||cuculf.name^
+||cucuyoalkoxy.com^
+||cuddleangkhak.com^
+||cuddlethehyena.com^
+||cudforhim.com^
+||cudgeletc.com^
+||cudwortflurr.uno^
+||cudwortparve.top^
+||cueistratting.com^
+||cuesingle.com^
+||cuevastrck.com^
+||cueyetwee.site^
+||cugeeksy.net^
+||cuisineenvoyadvertise.com^
+||cuisineomnipresentinfinite.com^
+||cuissenbisque.com^
+||cukonwoo.com^
+||culass.com^
+||cullayscrocks.com^
+||cullemple-motline.com^
+||culmjysalt.com^
+||culsaids.xyz^
+||cultergoy.com^
+||cultismcanty.space^
+||culturalcollectvending.com^
+||cumbersomeastonishedsolemn.com^
+||cumbersomebonus.com^
+||cumbersomesteedominous.com^
+||cumult.com^
+||cunasdonat.com^
+||cunazarp.website^
+||cunoff.com^
+||cunyiesus.com^
+||cupidonmedia.com^
+||cupidrecession.com^
+||cupindisputable.com^
+||cuplikenominee.com^
+||cupmidnithe.com^
+||cupoabie.net^
+||cuqvlpxjj.xyz^
+||curbimpress.com^
+||curchannerre.uno^
+||curids.com^
+||curiesremove.com^
+||curinetuxedos.com^
+||curlsomewherespider.com^
+||curlybottom.com^
+||curlyhomes.com^
+||curnberthed.com^
+||currantsummary.com^
+||currencyoffuture.com^
+||curriculture.com^
+||curryoxygencheaper.com^
+||cursegro.com^
+||curseintegralproduced.com^
+||cursordownstairs.com^
+||cursormedicabnormal.com^
+||cursorsympathyprime.com^
+||curtisbarways.com^
+||curude.com^
+||curvierannexa.com^
+||curvyalpaca.cc^
+||curyalanyl.guru^
+||cuseccharm.com^
+||cusecwhitten.com^
+||cushawsdizens.com^
+||cusilbwq.xyz
+||cuspingbuckoes.cfd^
+||custardswink.com^
+||custodybout.com^
+||custodycraveretard.com^
+||customads.co^
+||customapi.top^
+||cuterbond.com^
+||cuterintegrationcrock.com^
+||cutescale.online^
+||cutlersbahaism.com^
+||cutoch.com^
+||cuttingdemeanoursuperintend.com^
+||cuttingstrikingtells.com^
+||cuttledpph.life^
+||cuyynol.com^
+||cvastico.com^
+||cvkvtsjjrs.xyz^
+||cvqgnkeqme.com^
+||cvrkjnaoazazh.com^
+||cvtfyyflrrkjsam.xyz^
+||cvuduufdewm.com^
+||cvuvoljuqlkeuc.com^
+||cvyimypsjxca.com^
+||cwipbkyqhloajc.com^
+||cwknqqsjgboycim.xyz^
+||cwkuki.com^
+||cwlvmsvmqqgzb.com^
+||cwqljsecvr.com^
+||cwrlnhyfheafllk.xyz^
+||cwuaxtqahvk.com^
+||cwvfikunas.com^
+||cwwvbqwexbitnb.xyz^
+||cxafxdkmusqxsa.xyz^
+||cxfrmhsj.com^
+||cxhqpbwmyfskzt.com^
+||cxiebfdqydf.com^
+||cxkhadk.com^
+||cxmnsbrbdmxoyd.com^
+||cxnadcribh.com^
+||cxovwczosr.com^
+||cxtkpfbvu.com^
+||cxwqeehw.com^
+||cyan92010.com^
+||cybersugardrew.com^
+||cybertronads.com^
+||cycledaction.com^
+||cyclismpeddled.cam^
+||cyclistforgotten.com^
+||cydippeespy.com^
+||cyesesprerich.com^
+||cygnus.com^
+||cyih0e43aty7.com^
+||cyijr.com^
+||cylbyzants.com^
+||cylindermonastery.com^
+||cylindrical-pollution.pro^
+||cylsszrrfbkgjf.com^
+||cymqhqxuchas.com^
+||cyneburg-yam.com^
+||cynicalspireheroism.com^
+||cyprecaccia.guru^
+||cypressreel.com^
+||cyprie.com^
+||cyrigh.com^
+||cyrxvpnu.com^
+||cystisolor.com^
+||cysumhqvrjvrs.xyz^
+||cythat.com^
+||cytlbwfhbopqati.xyz^
+||cytock.com^
+||cyyhkeknmbe.com^
+||czarhonoraryrunning.com^
+||czboox.xyz^
+||czechose.com^
+||czedgingtenges.com^
+||czfpgkujv.com^
+||czfyaemtweo.com^
+||czglcxlh.com^
+||czh5aa.xyz^
+||czvdyzt.com^
+||czyoxhxufpm.com^
+||d-agency.net^
+||d05571f85f.com^
+||d0870e04a5.com^
+||d0efb7d9aeb478d.com^
+||d0main.ru^
+||d126kahie2ogx0.cloudfront.net^
+||d13babd868.com^
+||d1bcb5ca9f.com^
+||d24ak3f2b.top^
+||d25ee3531d.com^
+||d28dc30335.com^
+||d29gqcij.com^
+||d2af63b326.com^
+||d2d7bba154.com^
+||d2ship.com^
+||d37aacdbcc.com^
+||d3befd5a11.com^
+||d3c.site^
+||d3d98dc11c.com^
+||d3da127b69.com^
+||d3s40ry602uhj1.cloudfront.net^
+||d4b138a7aa.com^
+||d4d48974197052ea.com^
+||d5390684c4.com^
+||d592971f36.com^
+||d59936b940.com^
+||d5ca2318a1.com^
+||d65a1fbe58.com^
+||d6a206cf07.com^
+||d6f8c08166.com^
+||d6jfiirio372.com^
+||d71022cc68.com^
+||d71e6dd31a026d45.com^
+||d72gb9oukw3j.com^
+||d75c13e04d.com^
+||d7c01d241b.com^
+||d7c6491da0.com^
+||d7e13aeb98.com^
+||d869381a42af33b.com^
+||d871f74395.com^
+||d8b805b9a9.com^
+||d90be87e47.com^
+||d95d5c2239.com^
+||d9kvn70l4ogn.com^
+||da-ads.com^
+||da1a0e7bb3.com^
+||daailynews.com^
+||dabbyfather.com^
+||dabletoverdid.space^
+||daccroi.com^
+||dacmaiss.com^
+||dacnmevunbtu.com^
+||dadhuhram.com^
+||dadosgratis.club^
+||dadsats.com^
+||dadsimz.com^
+||dadslimz.com^
+||dadsoks.com^
+||dadspms.com^
+||dadspmz.com^
+||dadzidmisbmja.com^
+||daedaelousscri.com^
+||daejyre.com^
+||daemonshymens.com^
+||daero.pw^
+||daethana.pw^
+||daf58a0948.com^
+||daffaite.com^
+||daggapartley.life^
+||daggerwantedliterally.com^
+||daiboit.com^
+||daichoho.com^
+||daikeethoo.com^
+||daikersscrim.website^
+||daikonmomist.com^
+||daikorm.com^
+||dailyc24.com^
+||dailychronicles2.xyz^
+||dailyenoplan.website^
+||dailyvids.space^
+||daimioswhimper.com^
+||daineely.net^
+||daipsaut.com^
+||dairebougee.com^
+||dairouzy.net^
+||daishouk.net^
+||daistii.com^
+||daitoase.com^
+||daiwheew.com^
+||daizoode.com^
+||dajiurlgcfvgpt.com^
+||dakjddjerdrct.online^
+||dalecta.com^
+||dalethsfanout.com^
+||daliapama.com^
+||dallavel.com^
+||daluxmurwthhk.com^
+||dalyai.com^
+||dalyio.com^
+||dalymix.com^
+||dalysb.com^
+||dalysh.com^
+||dalysv.com^
+||damaged-fix.pro^
+||damaged-shop.pro^
+||dameadept.com^
+||damedamehoy.xyz^
+||damianafulani.com^
+||dammartaha.guru^
+||damozelmikvahs.com^
+||dampwarabi.com^
+||dana123.com^
+||danaineuveas.com^
+||danakilaskarel.com^
+||dancaa.com^
+||dancesmissort.com^
+||dandilysterna.com^
+||dandyblondewinding.com^
+||dandylowestpalsy.com^
+||danesuffocate.com^
+||dangerfiddlesticks.com^
+||dangerinsignificantinvent.com^
+||dangerousfight.com^
+||dangerouslyblemishsweater.com^
+||dangerouslyeragruff.com^
+||dangerouslygluttony.com^
+||dangerswitty.com^
+||danitemalus.life^
+||dankestass.com^
+||dansanttina.com^
+||dantbritingd.club^
+||danzhallfes.com^
+||danzigtitoism.guru^
+||daphnews.com^
+||dappaa.site^
+||dappab.site^
+||dappac.site^
+||dapper.net^
+||dapperaside.pro^
+||daptem.com^
+||daredcoil.com^
+||darersan.co^
+||darghinruskin.com^
+||daringcooper.com^
+||dariolunus.com^
+||darkandlight.ru^
+||darkdepthdriller.top^
+||darkercoincidentsword.com^
+||darkerillegimateillegimateshade.com^
+||darkestfertil.com^
+||darkledopining.uno^
+||darknesschamberslobster.com^
+||darlingfrightenunit.com^
+||dartg665moetyor.com^
+||dartonim.com^
+||darvorn.com^
+||darzeegobble.com^
+||dasensiblem.org^
+||dasesiumworkhovdimi.info^
+||dasfelynsaterr.win^
+||dashbida.com^
+||dashgreen.online^
+||dashingdaredmeeting.com^
+||dasperdolus.com^
+||data-data-vac.com^
+||data-jsext.com^
+||data-px.services^
+||datacryhurt.live^
+||datajsext.com^
+||datakitschelm.com^
+||datatechone.com^
+||datatechonert.com^
+||date2day.pro^
+||date4sex.pro^
+||dateddeed.com^
+||datemeup.top^
+||dateszone.net^
+||datetrackservice.com^
+||datherap.xyz^
+||dating-banners.com^
+||dating-roo3.site^
+||dating2cloud.org^
+||dating2you.net^
+||dating2you.org^
+||dating4you.org^
+||datingcentral.top^
+||datingkoen.site^
+||datingpush.space^
+||datingsphere.top^
+||datingstyle.top^
+||datingtoday.top^
+||datingtopgirls.com^
+||datingvr.ru^
+||datlelrzvge.com^
+||dattoswitches.com^
+||daubierbatties.uno^
+||daubingweekday.com^
+||daughterbump.com^
+||daughterinlawrib.com^
+||daughtersanything.com^
+||daughterstinyprevailed.com^
+||daugloon.net^
+||daukshewing.com^
+||daunnotes.com^
+||dauntgolfconfiscate.com^
+||dauntlessamusingcomrade.com^
+||dauntslip.com^
+||dautegoa.xyz^
+||davaifoa.com^
+||davjdaauvlp.com^
+||daweneath.com^
+||dawirax.com^
+||dawmal.com^
+||dawplm.com^
+||dawtsboosted.com^
+||dawutobliged.com^
+||daxwfrbocaaau.com^
+||daygrumpyexchange.com^
+||daysstone.com^
+||dayznews.biz^
+||daz3rw5a5k4h.com^
+||dazhantai.com^
+||db20da1532.com^
+||db5f3a82ab.com^
+||db72c26349.com^
+||dbbsrv.com^
+||dbclix.com^
+||dberthformttete.com^
+||dbf36eaddd.com^
+||dbgsfyxtfyh.xyz^
+||dbizrrslifc.com^
+||dbooksbysecon.com^
+||dbqlghadltookjo.xyz^
+||dbrheqlhk.xyz^
+||dbvault.net^
+||dc29186682.com^
+||dc3b671cce.com^
+||dc564d181f.com^
+||dc8a004603.com^
+||dcdxpdxbp.com^
+||dcebmbsnmcs.com^
+||dcekppuv.xyz^
+||dcentatorsstrial.com^
+||dcf438349c.com^
+||dcfnihzg81pa.com^
+||dchoseitfromt.com.ua^
+||dclakbrifusivy.com^
+||dclfuniv.com^
+||dcovesaysh.xyz^
+||dcsv33.com^
+||dcuonsugikrma.com^
+||dd9l0474.de^
+||ddaqwhdlhor.com^
+||ddcjwmcijw.com^
+||ddddynf.com^
+||dddomainccc.com^
+||ddedfearingl.com^
+||ddhjxakewpp.com^
+||ddjagedfbifdfejagaca.world^
+||ddow.xyz^
+||ddqfgamwnhp.com^
+||ddrsemxv.com^
+||ddxfhpuhfroier.com^
+||ddyjbbqe.com^
+||de-ner-mi-nis4.info^
+||deadly-variety.pro^
+||deadlyheart.pro^
+||deadlyrelationship.com^
+||deadlysafe.pro^
+||deadrafflewildest.com^
+||dealbuzznews.com^
+||dealcurrent.com^
+||dealingprivacybrakes.com^
+||dealsfor.life^
+||dealtbroodconstitutional.com^
+||deanvividsquall.com^
+||dearestimmortality.com^
+||dearfiring.com^
+||dearlyseedsad.com^
+||dearlystoop.com^
+||deatchshipsmotor.com^
+||deathssm.com^
+||deavynuotbrohw.xyz^
+||debartoloqbacademy.com^
+||debatableslippers.com^
+||debateconsentvisitation.com^
+||debatminkish.uno^
+||debauchavailable.com^
+||debeigecraver.live^
+||debism.com^
+||debitslopenoncommittal.com^
+||deboisedivel.com^
+||debonairseashore.com^
+||debsis.com^
+||debtminusmaternal.com^
+||debtsbosom.com^
+||debtslooselavatory.com^
+||decademical.com^
+||decatorfending.uno^
+||deceittoured.com^
+||deceivedbulbawelessaweless.com^
+||deceivedmisunderstand.com^
+||decencyjessiebloom.com^
+||decencysoothe.com^
+||decenthat.com^
+||deceptionhastyejection.com^
+||decibaraglare.com^
+||decide.dev^
+||decidedlylipstick.com^
+||decisionmark.com^
+||decisionnews.com^
+||decisivebottledhappen.com^
+||deckdistant.com^
+||deckedsi.com^
+||deckeeps.xyz^
+||deckmanbrid.com^
+||decknetwork.net^
+||declarationfascinatedrace.com^
+||declarcercket.org^
+||declaredjuvenile.com^
+||declaredpolitics.com^
+||declarefollowersuspected.com^
+||declinebladdersbed.com^
+||declinedmaniacminister.com^
+||declinedmildlyreckon.com^
+||declinelotterymitten.com^
+||declinetongarage.com^
+||declinewretchretain.com^
+||declk.com^
+||decoctionembedded.com^
+||decodesnaevoid.life^
+||decomposedismantle.com^
+||decorationguinea.com^
+||decorationhailstone.com^
+||decorationproducer.com^
+||decordingaudied.site^
+||decordingholo.org^
+||decpo.xyz^
+||decreasetome.com^
+||decreertenet.website^
+||decurvepon.com^
+||deddsunland.com^
+||dedfearingles.info^
+||dedicatedmedia.com^
+||dedicatenecessarilydowry.com^
+||deductionadjacentwatchful.com^
+||deductionkeepingbabysitter.com^
+||deebcards-themier.com^
+||deecqem892bg5er.com^
+||deedeedwinos.com^
+||deedtampertease.com^
+||deefauph.com^
+||deeginews.com^
+||deehalig.net^
+||deemcompatibility.com^
+||deemfriday.com^
+||deemievache.com^
+||deemwidowdiscourage.com^
+||deepboxervivacious.com^
+||deepdelver.top^
+||deeperhundredpassion.com^
+||deepermagnes.com^
+||deephicy.net^
+||deepmetrix.com^
+||deepnewsjuly.com^
+||deethout.net^
+||deewansturacin.com^
+||defeas.com^
+||defeatpercharges.com^
+||defeature.xyz^
+||defeatureother.xyz^
+||defectpayslips.com^
+||defenceblake.com^
+||defencelessrancorous.com^
+||defenseneckpresent.com^
+||defensiveevidence.pro^
+||defiancebelow.com^
+||defiantsniffbitterly.com^
+||deficiencyluckrapt.com^
+||deficitsilverdisability.com^
+||defilt.com^
+||definedbootnervous.com^
+||definedchampion.com^
+||definedlaunching.com^
+||definitial.com^
+||defiye.xyz^
+||deformconversionorthodox.com^
+||defpush.com^
+||defrostjudica.com^
+||defutohy.pro^
+||defybrick.com^
+||defyraspypuke.com^
+||degenerateabackjaguar.com^
+||degeronium.com^
+||deggerfletton.com^
+||deghooda.net^
+||degmfmog.xyz^
+||degrew.com^
+||degutu.xyz^
+||dehornstrigged.live^
+||dejame.xyz^
+||dekkcewpqrep.com^
+||deksoolr.net^
+||del-del-ete.com^
+||delayeddisembroildisembroil.com^
+||delbertgobans.com^
+||delegatediscussion.com^
+||delendatole.live^
+||deletedjohnny.com^
+||deleterasks.digital^
+||delightedintention.com^
+||delightfulold.com^
+||delightfulsensitive.pro^
+||delightspiritedtroop.com^
+||deligrassdull.com^
+||deline-sunction.com^
+||deliquencydeliquencygangenemies.com^
+||deliriousglowing.com^
+||deliriumabatecarefully.com^
+||delivery.momentummedia.com.au^
+||delivery45.com^
+||delivery47.com^
+||delivery49.com^
+||delivery51.com^
+||deliverydom.com^
+||deliverymod.com^
+||deliverymodo.com^
+||deliverytrafficnews.com^
+||deliverytraffico.com^
+||deliverytraffnews.com^
+||delmarviato.com^
+||delnapb.com^
+||delohm.com^
+||delookiinasfier.cc^
+||deloplen.com^
+||deloton.com^
+||deltoidviragin.com^
+||deltraff.com^
+||delubramoneron.tech^
+||deludemesh.com^
+||deludereflexunderwater.com^
+||delulu.uno^
+||delusionfirmly.com^
+||delutza.com^
+||deluxeconge.digital^
+||demand.supply^$script
+||demandedhalfmoon.com^
+||demeanourgrade.com^
+||demeepsi.xyz^
+||dementeddug.com^
+||dementedstalesimultaneous.com^
+||demersefiques.com^
+||demersekeld.com^
+||demned.com^
+||democracyendlesslyzoo.com^
+||democracyherebyinapptitudeinapptitude.com^
+||democracysuperintend.com^
+||democrattransportationirrational.com^
+||demolishskyscrapersharp.com^
+||demonryinlaced.com^
+||demonstrationbeth.com^
+||demoteexplanation.com^
+||demountglinted.life^
+||demureanklesecond.com^
+||demurerbewary.live^
+||denansgdfier.info^
+||denansgdfierc.com^
+||denarocepa.com^
+||denbeigemark.com^
+||denbsd.com^
+||dencejvlq.com^
+||dendranthe4edm7um.com^
+||dendrito.name^
+||deneorphan.com^
+||denetsuk.com^
+||dengelmeg.com^
+||denizealgific.com^
+||denoughtanot.info^
+||denounceburialbrow.com^
+||densityprideincentive.com^
+||densouls.com^
+||dental-drawer.pro^
+||dentalhomework.pro^
+||dentalillegally.com^
+||dentcontrader.com^
+||dentfonttechnology.com^
+||dentwithought.com^
+||denycrayon.com^
+||deostr.com^
+||deotarevalue.com^
+||deparn.com^
+||departgross.com^
+||departurealtar.com^
+||departureconspicuous.com^
+||dependablestaredpollution.com^
+||dephasevittate.com^
+||depictimproperdenunciation.com^
+||depids.com^
+||depigs.com^
+||depirsmandk5.com^
+||depleteappetizinguniverse.com^
+||deployads.com^
+||deploymentblessedheir.com^
+||depositgreetingscommotion.com^
+||depositnostrilverge.com^
+||depressionfemaledane.com^
+||depriveretirement.com^
+||depsougnefta.com^
+||deptem.com^
+||deptigud.xyz^
+||depucelgalera.com^
+||depurestole.guru^
+||deqkmzurltovbk.com^
+||deraterbelamy.com^
+||dercoenqfbrpv.com^
+||derelictfascinatinginmate.com^
+||dereunsin.uno^
+||derevya2sh8ka09.com^
+||deridebleatacheless.com^
+||derowalius.com^
+||derrybonedry.com^
+||dersoova.net^
+||desabrator.com^
+||desalthuns.com^
+||descargarpartidosnba.com^
+||descentsafestvanity.com^
+||descrepush.com^
+||described.work^
+||descriptionheels.com^
+||descriptionhoney.com^
+||descz.ovh^
+||desekansr.com^
+||desen4.info^
+||deserted-employment.pro^
+||deserterstrugglingdistil.com^
+||desertsquiverinspiration.com^
+||desertsutilizetopless.com^
+||deservedbreast.com^
+||deservesjoke.com^
+||deservessafety.com^
+||desgolurkom.com^
+||desigactinific.org^
+||designatejay.com^
+||desiremolecule.com^
+||deskdecision.com^
+||deskfrontfreely.com^
+||desktopnotificationshub.com^
+||desorbtarrify.com^
+||desperationembassy.com^
+||despicablereporthusband.com^
+||despik.com^
+||despitethriftmartial.com^
+||desponddietist.com^
+||despotfifteen.com^
+||dessly.ru^
+||destinationoralairliner.com^
+||destinedsponsornominate.com^
+||destroyedspear.com^
+||desugeng.xyz^
+||detachedbates.com^
+||detachedknot.com^
+||detachmentoccasionedarena.com^
+||detailedgovernment.com^
+||detailyesgrip.com^
+||detainstockingskaleidoscope.com^
+||detaph.com^
+||detars.com^
+||detecteddesigningspirited.com^
+||detectedpectoral.com^
+||detectiveestrange.com^
+||detectmus.com^
+||detectscoset.com^
+||detectvid.com^
+||detectys.digital^
+||detergentkindlyrandom.com^
+||deterioratebinheadphone.com^
+||deterioratesadly.com^
+||deterioratesyrupevents.com^
+||deterrentpainscodliver.com^
+||detinetcallant.com^
+||detour.click^
+||detrimentaljigsaw.com^
+||deturbcordies.com^
+||devastateddisarraybackpack.com^
+||deveincyanids.com^
+||developedse.info^
+||developerfriendsdisappoint.com^
+||developmentgoat.com^
+||developmentnewestrising.com^
+||devilspanmute.com^
+||devilwholehorse.com^
+||devofei.xyz^
+||devolutiondiffident.com^
+||devolutionrove.com^
+||devotedfootprintsinterstate.com^
+||devoterornis.com^
+||devotesquinua.com^
+||devoutdoubtfulsample.com^
+||devoutprinter.com^
+||dewcommode.space^
+||dewierhagger.com^
+||dewiestsards.com^
+||dewincubiatoll.com^
+||dewlessjacobin.com^
+||dexchangeinc.com^
+||deximedia.com^
+||dexplatform.com^
+||dexpredict.com^
+||deyubo.uno^
+||df253f3b96.com^
+||dfciiiafweiag.com^
+||dfearinglestp.info^
+||dfearinglestpeople.com^
+||dfgbalon.com^
+||dfhajyevxmposa.xyz^
+||dfnetwork.link^
+||dfpstitialtag.com^
+||dftckxqklqe.xyz^
+||dfyouolsdq.com^
+||dgafgadsgkjg.top^
+||dgemanowhot.com.ua^
+||dgemanowhowe.xyz^
+||dggwqknub.com^
+||dgkajwnbrazepe.com^
+||dgmaustralia.com^
+||dgo43.xyz^
+||dgpcdn.org^
+||dgtklmbypacjq.com^
+||dguhjlbefeuf.com^
+||dh956.com^
+||dharmaashman.com^
+||dhhuakggx.xyz^
+||dhkrftpc.xyz^
+||dhlyikbubkibk.com^
+||dhowsptelea.com^
+||dhthrewdownth.xyz^
+||dhuimjkivb.com^
+||dhundora.com^
+||dhyallache.space^
+||dhyanaquintes.digital^
+||di7stero.com^
+||diaepoxy.guru^
+||diagramcetyl.digital^
+||dialling-abutory.com^
+||dialoguemarvellouswound.com^
+||dialogueshipwreck.com^
+||diametercurl.com^
+||diamondmodapk.com^
+||diamondtraff.com^
+||dianomioffers.co.uk^
+||diantcummiere.com^
+||diaperrealter.com^
+||diapirsblanker.com^
+||diated.com^
+||dibsemey.com^
+||dicheeph.com^
+||dichoabs.net^
+||dicinging.co.in^
+||dicknearbyaircraft.com^
+||diclotrans.com^
+||dicouksa.com^
+||dicreativeideas.org^
+||dictatepantry.com^
+||dictaterepublicbog.com^
+||dictationtense.com^
+||dictatormiserablealec.com^
+||dictionarycoefficientapparently.com^
+||dictiontajik.com^
+||dictumstortil.com^
+||dictysoph.website^
+||dicyiish.com^
+||didiessyrt.com^
+||didinejaspoid.com^
+||didmakingby.xyz^
+||didthere.com^
+||diedpractitionerplug.com^
+||diedstubbornforge.com^
+||dieged.com^
+||diench.com^
+||dietarydecreewilful.com^
+||dietaryexpanded.com^
+||dietarygroomchar.com^
+||dietslawine.com^
+||diettttoglf.com^
+||dieved.com^
+||differencedisinheritpass.com^
+||differenchi.pro^
+||differentevidence.com^
+||differfundamental.com^
+||difficultydilapidationsodium.com^
+||difficultyefforlessefforlessthump.com^
+||difficultyhobblefrown.com^
+||difice-milton.com^
+||difiel.com^
+||difies.com^
+||digadser.com^
+||digestionheartlesslid.com^
+||digital2cloud.com^
+||digitaldsp.com^
+||digitalmediapp.com^
+||dignifiedclipbum.com^
+||dignityhourmulticultural.com^
+||diguver.com^
+||digyniahuffle.com^
+||diidgtmupyls.com^
+||diiodidasmear.com^
+||dijapu.xyz^
+||dikkoplida.cam^
+||diktatsdeprint.space^
+||diktatslopseed.com^
+||dilacteorma.info^
+||dilatesdubbers.com^
+||diligentrefrigerator.pro^
+||dilip-xko.com^
+||dilliskunhome.com^
+||dillsloppy.com^
+||dilruwha.net^
+||diluterwearers.com^
+||dilutionavailstoker.com^
+||dimcarnie.com^
+||dimedoncywydd.com^
+||dimessing-parker.com^
+||dimfarlow.com^
+||dimild.com^
+||diminutioneconomy.com^
+||dimlmhowvkrag.xyz^
+||dimlyconfidential.com^
+||dimlyelusive.com^
+||dimnatriazin.com^
+||dimpawlam.com^
+||dimpleclassconquer.com^
+||dimplemain.com^
+||dimpuxoh.net^
+||dimreproofjumped.com^
+||dimseeje.com^
+||dinahmerfolk.life^
+||dindlebrooder.digital^
+||dinerpropagandatoothbrush.com^
+||dingswonden.info^
+||diningjumbofocused.com^
+||diningprefixmyself.com^
+||diningroombutt.com^
+||diningsovereign.com^
+||dinnercreekawkward.com^
+||dinomicrummies.com^
+||dionympoalike.website^
+||diorismmotes.website^
+||diplic.com^
+||diploisaloofly.com^
+||diplomasewerivory.com^
+||dippingearlier.com^
+||dipseymontia.com^
+||dipseypurism.com^
+||diptaich.com^
+||diptersowar.website^
+||diqnioryshzpge.com^
+||dirdumsthetch.com^
+||direbitterly.com^
+||direct-specific.com^
+||directaclick.com^
+||directcpmfwr.com^
+||directcpmrev.com^
+||directdexchange.com^
+||directflowlink.com^
+||directleads.com^
+||directnavbt.com^
+||directnessrecycling.com^
+||directoryexertion.com^
+||directorym.com^
+||directpaper.name^
+||directrankcl.com^
+||directrev.com^
+||directshopping.pro^
+||directtaafwr.com^
+||directtrack.com^
+||directtrck.com^
+||directuklyecon.pics^
+||direplaywrightphysical.com^
+||dirgywhacks.com^
+||dirhamsleered.com^
+||dirhin.com^
+||dirtinessboiled.com^
+||dirtrecurrentinapptitudeinapptitude.com^
+||dirtyasmr.com^
+||dirtysuspension.com^
+||disaaf.com^
+||disableadblock.com^
+||disabledincomprehensiblecitizens.com^
+||disabledsurpassrecollection.com^
+||disabr.com^
+||disadvantagenaturalistrole.com^
+||disagiountack.uno^
+||disagreeableallen.com^
+||disagreeadjourn.com^
+||disagreeopinionemphasize.com^
+||disappearanceinspiredscan.com^
+||disappearancetickfilth.com^
+||disappearfatigueroyal.com^
+||disappearingassurance.com^
+||disappearterriblewalked.com^
+||disappenedy.xyz^
+||disappointedquickershack.com^
+||disappointingbeef.com^
+||disappointingcharter.com^
+||disappointingupdatependulum.com^
+||disarmbookkeeper.com^
+||disastrous-change.pro^
+||disastrous-seat.pro^
+||disaul.com^
+||disavowhers.com^
+||disbarpensy.com^
+||disbeliefplaysgiddiness.com^
+||dischargeinsularbroadly.com^
+||discloseprogramwednesday.com^
+||discomforttruant.com^
+||disconnectedponder.com^
+||discontentedliar.com^
+||discostcarafon.website^
+||discounts4shops.com^
+||discountwound.com^
+||discourteousbeaming.com^
+||discoverapp.xyz^
+||discoverethelwaiter.com^
+||discreditgutter.com^
+||discrepancyabsolution.com^
+||discriminationprovide.com^
+||discussedfacultative.com^
+||discussmercurydifferently.com^
+||disdainkindle.com^
+||disean.com^
+||disembarkadmonishment.com^
+||disembarkappendix.com^
+||disembroildisembroilassuredwitchcraft.com^
+||disfigured-state.pro^
+||disfiguredrough.pro^
+||disfigurestokerlikelihood.com^
+||disgraceannihilate.com^
+||disgracefulaffluenceunethical.com^
+||disgracefulforeword.com^
+||disguised-dad.com^
+||disgustinghindsight.com^
+||disgustingscuffleaching.com^
+||disheartensunstroketeen.com^
+||dishesha.net^
+||dishfulbantus.uno^
+||dishwaterfloodinginvisible.com^
+||disillusioninventorsoften.com^
+||disillusionromeearlobe.com^
+||disingenuousdismissed.com^
+||disingenuousfortunately.com^
+||disingenuoussuccessfulformal.com^
+||disinheritcondescending.com^
+||dislovebroody.com^
+||disloyalmeddling.com^
+||dismalthroat.pro^
+||dismantlepenantiterrorist.com^
+||dismissabuse.com^
+||dismountpoint.com^
+||dismountroute.com^
+||dismountthreateningoutline.com^
+||disovrfc.xyz^
+||disparagethence.com^
+||disparityconquer.com^
+||disparitydegenerateconstrict.com^
+||dispatchfeed.com^
+||dispbaktun.com^
+||dispelhighest.com^
+||disperserepeatedly.com^
+||dispersereversewanderer.com^
+||displacecanes.com^
+||displaycontentnetwork.com^
+||displaycontentprofit.com^
+||displayedfoot.com^
+||displayfly.com^
+||displayformatcontent.com^
+||displayformatrevenue.com^
+||displayinterads.com^
+||displaynetworkcontent.com^
+||displaynetworkprofit.com^
+||displayvertising.com^
+||displeaseddietstair.com^
+||displeasurepigeons.com^
+||disploot.com^
+||dispop.com^
+||disposalangrily.com^
+||disposalsirbloodless.com^
+||dispositiondata.com^
+||disputetrot.com^
+||disregardbuymigrant.com^
+||disreputablegenuinelyhonorary.com^
+||disrootaffa.com^
+||dissatisfactiondoze.com^
+||disshipbikinis.com^
+||dissimilarskinner.com^
+||dissipatebackyarduncle.com^
+||dissipatecombinedcolon.com^
+||dissipatedifficulty.com^
+||dissipateetiquetteheavenly.com^
+||dissolveretinue.com^
+||distancemedicalchristian.com^
+||distant-session.pro^
+||distantsoil.com^
+||distilinborn.com^
+||distilled.ie^
+||distinct-bicycle.com^
+||distinctlynobleprosecute.com^
+||distorted-basket.pro^
+||distorteddead.pro^
+||distortunfitunacceptable.com^
+||distractedavail.com^
+||distractiontradingamass.com^
+||distressamusement.com^
+||distributionrealmoth.com^
+||districtacrid.com^
+||districtbaloneywhiskers.com^
+||districtm.ca^
+||districtm.io^
+||districtprovocativeforceful.com^
+||districtshortmetal.com^
+||disturbancecoldlilac.com^
+||disturbcesti.digital^
+||disturbedaccruesurfaces.com^
+||disturbedincidentallysleazy.com^
+||disturbingacceptabledisorganized.com^
+||disturboverwhelmdome.com^
+||dit-dit-dot.com^
+||ditasmaced.com^
+||ditchesteenish.com^
+||ditdotsol.com^
+||dithomsi.xyz^
+||ditwrite.com^
+||divaduolite.com^
+||divedfaraway.com^
+||divedresign.com^
+||diversecrashconcern.com^
+||diversityspaceship.com^
+||divertbywordinjustice.com^
+||dividedbecameinquisitive.com^
+||dividedching.com^
+||dividedscientific.com^
+||divideoutdoors.com^
+||divorceseed.com^
+||diyusa.xyz^
+||dizipal223.com^
+||dizzy-illegal.pro^
+||dizzyincome.pro^
+||dizzyporno.com^
+||dizzyrebozo.website^
+||dizzyshe.pro^
+||dj-updates.com^
+||djadoc.com^
+||djefosbx.com^
+||djfiln.com^
+||djfuieotdlo.com^
+||djfwtdwiybiq.com^
+||djldrhxb.com^
+||djmaza.in^
+||djphnuhkbjf.com^
+||djqacscl.com^
+||djsdmdbwlpbab.com^
+||djssdvbo.com^
+||djxfar6.com^
+||dk4ywix.com^
+||dkbgcxltwljdua.com^
+||dkrbus.com^
+||dkrely.com^
+||dkrqyly.com^
+||dkrxtdnlg.com^
+||dkswptmwowowp.xyz^
+||dl-rms.com^
+||dle-news.xyz^
+||dledthebarrowb.com^
+||dledthebarrowb.xyz^
+||dlfvgndsdfsn.com^
+||dlgoliqqxpegmyw.xyz^
+||dlhqffirehv.com^
+||dlkdfuun.com^
+||dlmewheniyv.xyz^
+||dlqfkzykxqicn.com^
+||dlqxdonofwsfes.xyz^
+||dlski.space^
+||dlxohfxenojlpb.com^
+||dmakingbyth.com^
+||dmayindallmypi.com^
+||dmemndrjim.com^
+||dmeukeuktyoue.info^
+||dmiredindeed.com^
+||dmlkzmg.com^
+||dmm-video.online^
+||dmnprx.com^
+||dmopqjaswvmvopm.com^
+||dmowvblljmkqx.com^
+||dmrdnujvzo.com^
+||dmrtx.com^
+||dmsrlnssynhqhl.com^
+||dmvbdfblevxvx.com^
+||dmvporebntt.com^
+||dmwiguazwm.com^
+||dmzjmp.com^
+||dn9.biz^
+||dnavexch.com^
+||dnavtbt.com^
+||dnemkhkbsdbl.com^
+||dnfs24.com^
+||dnhyakcwoedah.com^
+||dnjsiye.com^
+||dnnwebuxps.com^
+||dnoicciekfm.xyz^
+||dnrcwqbakix.com^
+||dnswinq.com^
+||dntaiiifdbwno.com^
+||doaboowa.com^
+||doaipomer.com^
+||doaltariaer.com^
+||doaphaha.net^
+||doappcloud.com^
+||dobnor.com^
+||dochouts.net^
+||docityhoatzin.com^
+||dockaround.com^
+||doctorenticeflashlights.com^
+||doctorhousing.com^
+||doctorpost.net^
+||documentationskillgrasshopper.com^
+||dodayobeitand.xyz^
+||doddassagai.com^
+||doddiesteaey.guru^
+||doddygoofed.com^
+||doddymetaled.space^
+||dodgefondness.com^
+||dodgilyscutula.com^
+||dodgyvertical.com^
+||dodouhoa.com^
+||doerscharre.com^
+||doesbitesizeadvantages.com^
+||doespinolin.cfd^
+||doflygonan.com^
+||dog-realtimebid.org^
+||dogcollarfavourbluff.com^
+||dogconcurrencesauce.com^
+||dogdomsflensed.com^
+||doggerycantlet.website^
+||doggessmumped.com^
+||doggyunderline.com^
+||dogiedimepupae.com^
+||dogolurkr.com^
+||dogshipuniate.live^
+||dogt.xyz^
+||dogwrite.com^
+||doigtepyramid.com^
+||doingporteddispose.com^
+||dokaboka.com^
+||dokauzob.top^
+||dokhmacoining.com^
+||dokondigit.quest^
+||dolatiaschan.com^
+||dolefulasachasing.com^
+||dolefulwelcoming.com^
+||doleplasticimpending.com^
+||dolesminced.com^
+||doleyorpinc.website^
+||dollarade.com^
+||dollardelta.com^
+||dollargrimlytommy.com^
+||dollsaltituderefrigerate.com^
+||dollsdeclare.com^
+||dolohen.com^
+||dolomitethistle.store^
+||doloroj.com^
+||dolphinabberantleaflet.com^
+||dolphincdn.xyz^
+||domainanalyticsapi.com^
+||domainbuyingservices.com^
+||domaincaptured.com^
+||domaincntrol.com^
+||domakuhitaor.com^
+||domankeyan.com^
+||dombnrs.com^
+||dombocostomy.website^
+||domccktop.com^
+||domdex.com^
+||domeclosureassert.com^
+||domicileperil.com^
+||dominantcodes.com^
+||dominantroute.com^
+||dominatebacon.com^
+||dominatedisintegratemarinade.com^
+||domineeyoks.com^
+||dominikpers.ru^
+||dominoeds.com^
+||domith.com^
+||domnlk.com^
+||dompeterapp.com^
+||domslc.com^
+||domyroundel.guru^
+||donecooler.com^
+||donecperficiam.net^
+||donemagbuy.live^
+||doneoftheow.com^
+||donescaffold.com^
+||doninjaskr.com^
+||donnotbipeds.com^
+||donorenvy.com^
+||donthedoorwi.com^
+||donttbeevils.de^
+||donutfulfilherd.com^
+||donyandmark.xyz^
+||doobaupu.xyz^
+||doochoor.xyz^
+||doodoaru.net^
+||doogroum.xyz^
+||dooloust.net^
+||doomail.org^
+||doomna.com^
+||doopimim.net^
+||doorbrazil.com^
+||doormanbafflemetal.com^
+||doormantdoormantunfaithful.com^
+||doorstepexcepting.com^
+||dopansearor.com^
+||dope.autos^
+||dopfumeuse.top^
+||dopiesttrotter.com^
+||dopmmzn.com^
+||dopor.info^
+||doprinplupr.com^
+||doptik.ru^
+||dorbanise.pw^
+||dordaumt.com^
+||dorimnews.com^
+||dorkingvoust.com^
+||dormitoryreverend.com^
+||dorothydrawing.com^
+||dortmark.net^
+||dortoursever.digital^
+||doruffleton.com^
+||doruffletr.com^
+||dosagebreakfast.com^
+||dosamurottom.com^
+||doseadraa.com^
+||dosiswether.com^
+||dosliggooor.com^
+||dosnodfebruary.com^
+||dossouwe.net^
+||dostophog.com^
+||dotandads.com^
+||dotappendixrooms.com^
+||dotariefroggy.guru^
+||dotchaudou.com^
+||dotcom10.info^
+||dothaish.net^
+||dotmatrixops.com^
+||dotobjection.com^
+||dotsenhanced.com^
+||dotsrv.com^
+||dottierspeeds.website^
+||double-check.com^
+||double.net^
+||doubleadserve.com^
+||doubledeepclick.com^
+||doublemax.net^
+||doubleonclick.com^
+||doublepimp.com^
+||doublepimpssl.com^
+||doublerecall.com^
+||doubleview.online^
+||doubtcigardug.com^
+||doubtfulrainstorm.com^
+||doubtlesshealthydocument.com^
+||doucheraisiny.com^
+||doufoacu.net^
+||dougale.com^
+||douglaug.net^
+||douhooke.net^
+||douoblelimpup.com^
+||doupsout.xyz^
+||douthosh.net^
+||dovemajorem.com^
+||dovenedouthorn.com^
+||dovictinian.com^
+||doweralrostra.com^
+||doweryacreak.website^
+||down1oads.com^
+||downladingsite.com^
+||download-adblock-zen.com^
+||download-ready.net^
+||download-readynow.com^
+||downloadboutique.com^
+||downloadmobile.pro^
+||downloadwiselyfaintest.com^
+||downloadxfasterx1.com^
+||downloadyt.com^
+||downlon.com^
+||downtowndisapproval.com^
+||dowtyler.com^
+||doydplivplr.com^
+||doyleysstagese.com^
+||dozard.com^
+||dozenactually.com^
+||dozubatan.com^
+||dpbxtrqyljhse.xyz^
+||dpdnav.com^
+||dpfchqsiksjuyjc.xyz^
+||dphpycbr.com^
+||dpipel.com^
+||dpmsrv.com^
+||dprograp.online^
+||dprtb.com^
+||dpstack.com^
+||dqbukuvuy.com^
+||dqfhudpnwdk.com^
+||dqhezw.com^
+||dqhoikghxts.com^
+||dqjkzrx.com^
+||dqlgpnljfgmlqs.xyz^
+||dqnvcjcyx.com^
+||dqvnpbs.com^
+||dqywkdxtcy.xyz^
+||dr0.biz^
+||dr22.biz^
+||dr6.biz^
+||dr7.biz^
+||drabimprovement.com^
+||draconiancurve.com^
+||draftyreview.pro^
+||draggedeffectuallyhelicopter.com^
+||draggedgram.com^
+||draggedindicationconsiderable.com^
+||draggetawayinvalid.com^
+||dragnag.com^
+||draile.com^
+||drainlot.com^
+||drako2sha8de09.com^
+||dramasoloist.com^
+||dramaticagreementsalt.com^
+||dramaticdirection.com^
+||drankpool.com^
+||drapefabric.com^
+||drasticdrama.com^
+||dratingmaject.com^
+||drauda.com^
+||drawbacksubdue.com^
+||draweesjabbers.com^
+||drawerfontactual.com^
+||drawingsingmexican.com^
+||drawingsugarnegative.com^
+||drawingwaved.com^
+||drawingwheels.com^
+||drawlycusec.com^
+||drawnperink.com^
+||drawx.xyz^
+||draydaisbitch.com^
+||draymanbaroni.uno^
+||draystownet.com^
+||drctcldfbfwr.com^
+||drctcldfe.com^
+||drctcldfefwr.com^
+||drctcldff.com^
+||drctcldfffwr.com^
+||dreadbreakupsomeone.com^
+||dreadfullyclarifynails.com^
+||dreadshavingmammal.com^
+||dreambooknews.com^
+||dreamintim.net^
+||dreampics.pro^
+||dreamsaukn.org^
+||dreamsofcryingf.com^
+||dreamsoppressive.com^
+||dreamvids.pro^
+||drearlyknifes.com^
+||dreary-east.pro^
+||dreesfootler.uno^
+||drepanevealy.uno^
+||dressedfund.com^
+||dresserderange.com^
+||dressingdedicatedmeeting.com^
+||dressmakerdisturb.com^
+||dresul.com^
+||drewfoolery.com^
+||dreyeli.info^
+||dribbleads.com^
+||dribletbogled.com^
+||drided.com^
+||drific.com^
+||drifor.com^
+||driftfranchise.com^
+||driftstupidityopponent.com^
+||drillcompensate.com^
+||drinkscormac.website^
+||drinksinvoluntary.com^
+||dripappliance.com^
+||dripgleamborrowing.com^
+||driskfleeted.com^
+||driveestablishmentarmed.com^
+||drivenicysecretive.com^
+||drivewayilluminatedconstitute.com^
+||drivewayperrydrought.com^
+||drizzleexperimentdysentery.com^
+||drizzlerules.com^
+||drjgjngf.com^
+||drjkwbfqcvr.com^
+||drkness.net^
+||droahgsdb.com^
+||dronedgentile.com^
+||dronelskipper.com^
+||droopingrage.com^
+||droppalpateraft.com^
+||droppedbanking.com^
+||drovernomine.com^
+||drownedhurling.com^
+||drsmediaexchange.com^
+||drubbersestia.com^
+||drubgyrinid.com^
+||druggedsilurid.com^
+||drugue.com^
+||druguniverseinfected.com^
+||drulwrbsmd.com^
+||drummerconvention.com^
+||drummercorruptprime.com^
+||drumusherhat.com^
+||drunkardashamethicket.com^
+||drunkarddecentmeals.com^
+||drust-gnf.com^
+||druttlelimbec.digital^
+||drwornspinster.com^
+||dryerpreliminarymainly.com^
+||dryerslegatos.com^
+||dryinfestinsight.com^
+||drylotsimbil.website^
+||drystervernile.life^
+||ds3.biz^
+||ds7hds92.de^
+||dsandmaroons.com^
+||dsethimdownthmo.com^
+||dsfjhfhyry2hh8jo09.com^
+||dsgvlrcjcmfrr.xyz^
+||dsixipuj.com^
+||dsnextgen.com^
+||dsnr-affiliates.com^
+||dsoodbye.xyz^
+||dsp.wtf^
+||dspmega.com^
+||dspmulti.com^
+||dspultra.com^
+||dssdv.com^
+||dsstrk.com^
+||dsultra.com^
+||dswqtkpk.com^
+||dt4ever.com^
+||dt51.net^
+||dtadnetwork.com^
+||dtbfpygjdxuxfbs.xyz^
+||dtcpdvnojquf.com^
+||dtedpypskgbdap.com^
+||dthechildren.org^
+||dtkhbsictxpu.com^
+||dtmpub.com^
+||dtmvpkn.com^
+||dtnacqswcieufy.com^
+||dtobyiiuktxvp.com^
+||dtoottuleringv.com.ua^
+||dtoottuleringwe.xyz^
+||dtprofit.com^
+||dtqbqmzzbeck.com^
+||dtscdn.com^
+||dtscout.com^
+||dtsedge.com^
+||dtssrv.com^
+||dtsuqeneaipu.com^
+||dtwobrightsap.info^
+||dtx.click^
+||dualityflaming.space^
+||dualmarket.info^
+||duamilsyr.com^
+||dubggge.com^
+||dubinexperienced.com^
+||dubiopintles.com^
+||dubnoughtheadquarter.com^
+||dubshub.com^
+||dubunwiseobjections.com^
+||dubvacasept.com^
+||dubzenom.com^
+||duckiecaesura.com^
+||duckletnervous.uno^
+||ducksintroduce.com^
+||duckswillsmoochyou.com^
+||ducmiptu.net^
+||ductclickjl.com^
+||ductquest.com^
+||ducubchooa.com^
+||dudair.com^
+||dudaixou.com^
+||dudialgator.com^
+||dudleyjoyful.com^
+||dudslubesviol.com^
+||duefulnuntius.com^
+||dueisqteiwn.com^
+||duellosheliced.com^
+||duesdoand.com^
+||duetads.com^
+||duf1ql28oaxcm3x6baf7wxvo6n29hrozqxbd13emc3na96i64j.xyz^
+||dufrom.com^
+||duftoagn.com^
+||dugentocentury.com^
+||duginamis.com^
+||dugothitachan.com^
+||duili-mtp.com^
+||duimspruer.life^
+||dukicationan.org^
+||dukingdraon.com^
+||dukirliaon.com^
+||dukkxpf.com^
+||dulativergs.com^
+||dulcormutated.com^
+||dulillipupan.com^
+||dullstory.pro^
+||dulogav.com^
+||dulojet.com^
+||dulsesglueing.com^
+||dulwajdpoqcu.com^
+||dumbacademyradiation.com^
+||dumbpop.com^
+||dummiedkhodja.com^
+||dummieseardrum.com^
+||dumplingclubhousecompliments.com^
+||dumplingdirewomen.com^
+||dunceryquant.com^
+||duncip.com^
+||dunct.com^
+||dunderaffiliates.com^
+||dunefu.uno^
+||dunemanslaughter.com^
+||dungmamma.com^
+||dunlopfermi.com^
+||dunnedemicant.com^
+||dunowmymmexmd.com^
+||duosdecene.uno^
+||dupelipperan.com^
+||duplefirer.uno^
+||duplicatebecame.com^
+||duponytator.com^
+||durableordinarilyadministrator.com^
+||durationzodiacdetermined.com^
+||duried.com^
+||durief.com^
+||duriff.com^
+||durike.com^
+||duriot.com^
+||durisk.com^
+||durith.com^
+||duroomtoa.com^
+||dursocoa.com^
+||duscleouphes.com^
+||dusiospires.com^
+||dustedmullion.com^
+||dusterrubberfarmer.com^
+||dustymural.com^
+||dustytownsplatitude.com^
+||dustywrenchdesigned.com^
+||dutorterraom.com^
+||dutyabilityneed.com^
+||duwabchhdgkqc.com^
+||duwtkigcyxh.com^
+||duxqonqkcaum.com^
+||duzmevl.com^
+||dvaminusodin.net^
+||dvcgzygp.com^
+||dvfkpfgqyauuux.com^
+||dvigukindal.com^
+||dvjkmskks.xyz^
+||dvklfkssxirup.xyz^
+||dvypar.com^
+||dwaterverya.xyz^
+||dwddvpmiqis.xyz^
+||dweatherbe.org^
+||dweatherbe.xyz^
+||dwelc.com^
+||dwellingmerrimentrecorder.com^
+||dwellingsensationalthere.com^
+||dwetwdstom1020.com^
+||dwiden.com^
+||dwightadjoining.com^
+||dwightbridesmaid.com^
+||dwithmefeyauknal.info^
+||dwlgvbapt.com^
+||dwlmjxf.com^
+||dwomtkmr.com^
+||dwrdjfdxtoel.com^
+||dwwboxlnrlek.xyz^
+||dwwjlvpja.com^
+||dwwpofwebdwm.com^
+||dxajhcdz.com^
+||dxmjyxksvc.com^
+||dxmnqojbhimay.com^
+||dyburu.com^
+||dyckwtcmyb.xyz^
+||dyeingjaun.com^
+||dyetqkaxmlnqlqe.xyz^
+||dyfbwfycvhl.com^
+||dyingconjunction.com^
+||dylbqnfhikdd.com^
+||dymfodqwwtrw.xyz^
+||dynamicadx.com^
+||dynamicapl.com^
+||dynamicdn.com^
+||dynamicjsconfig.com^
+||dynamitedata.com^
+||dynpaa.com^
+||dynspt.com^
+||dynsrvbaa.com^
+||dynsrvdea.com^
+||dynsrvtbg.com^
+||dynsrvtyu.com^
+||dynssp.com^
+||dyptanaza.com^
+||dysful.com^
+||dz4ad.com^
+||dzeoiizhixuyvg.com^
+||dzhjmp.com^
+||dzienkudrow.com^
+||dzjnejsffqqih.com^
+||dzjv9gbu8a.com^
+||dzkpopetrf.com^
+||dzliege.com^
+||dzprcdskxn.com^
+||dzubavstal.com^
+||dzuowpapvcu.com^
+||e-cougar.fr^
+||e007499ca9.com^
+||e0a79821ec.com^
+||e1cd662960.com^
+||e1eacb6f88.com^
+||e2078be122.com^
+||e21b1642db801b2a.com^
+||e255347009.com^
+||e27fe9334e.com^
+||e2e113a506.com^
+||e2e76d25ce.com^
+||e2ertt.com^
+||e2fc6f14d8.com^
+||e335udnv6drg78b7.com^
+||e36e2058e8.com^
+||e46271be93.com^
+||e499799158.com^
+||e4f820396d.com^
+||e4nglis56hcoo5nhou6nd.com^
+||e51710f24a.com^
+||e55629740f.com^
+||e55b290040.com^
+||e59f087ae4.com^
+||e5asyhilodice.com^
+||e5bb7a50f5.com^
+||e6400a77fa.com^
+||e67df3f29d.com^
+||e67repidwnfu7gcha.com^
+||e6a12d08d2.com^
+||e6eae88795.com^
+||e702fa7de9d35c37.com^
+||e732bfae2a.com^
+||e739c4d82b.com^
+||e78426c787.com^
+||e89dafb480.com^
+||e8f6c9133b.com^
+||e91c222079.com^
+||e954669112.com^
+||e98c4a21c0.com^
+||e9c1khhwn4uf.com^
+||ea6353e47e0ab3f78.com^
+||eabids.com^
+||eabithecon.xyz^
+||eabrgisajgzahx.com^
+||eac0823ca94e3c07.com^
+||eacdn.com^
+||eacfiii.com^
+||eachiv.com^
+||eachuit.uno^
+||eadirtlseivid.xyz^
+||eads.to^
+||eafb9d5abc.com^
+||eagazi.com^
+||eagleapi.io^
+||eaglestats.com^
+||eagletskoku.com^
+||eaglic.com^
+||eaglid.com^
+||eaglingauslaut.com^
+||eajpryc.com^
+||eajqezprowiuy.com^
+||eakelandorders.org^
+||ealeo.com^
+||eallywasnothy.com^
+||eallywasnothyca.info^
+||eanddescri.com^
+||eanddrsgankru.com.ua^
+||eanlingtumfie.com^
+||eanrzzvvmjkl.top^
+||earact.com^
+||eardepth-prisists.com^
+||earfulsstubby.store^
+||eargentssep.one^
+||eariod.com^
+||earlapspur.com^
+||earlapssmalm.com^
+||earlinessone.xyz^
+||earlishcoevals.com^
+||earnallgainsurvey.top^
+||earnbigo.com^
+||earnestadornment.com^
+||earnestnessmodifiedsealed.com^
+||earnify.com^
+||earnobnoxious.com^
+||earplugmolka.com^
+||earsanagep.com^
+||earthenicings.com^
+||earthlyyowe.com^
+||earthshaper.top^
+||earuplulfy.xyz^
+||easazi.com^
+||easeavailandpro.info^
+||easegoes.com^
+||easelgivedolly.com^
+||easilysafety.com^
+||easkedasensibl.com^
+||easterstrengthenbranches.com^
+||eastfeukufu.info^
+||eastfeukufunde.com^
+||eastrk-lg.com^
+||easurf.com^
+||easurg.com^
+||easy-dating.org^
+||easy2cnjuh34jb.com^
+||easyaccess.mobi^
+||easyad.com^
+||easyads28.info^
+||easyads28.mobi^
+||easyads28.pro^
+||easyads29.mobi^
+||easyads29.pro^
+||easyfag.com^
+||easyflirt-partners.biz^
+||easygoingamaze.com^
+||easygoingasperitydisconnect.com^
+||easygoinglengthen.com^
+||easygoingparticular.pro^
+||easygoingtouchybribe.com^
+||easymrkt.com^
+||easypics.info^
+||easypics.space^
+||easysemblyjusti.info^
+||easyvids.info^
+||easyvids.online^
+||easyvids.space^
+||eatasesetitoefanyo.info^
+||eatencurvature.com^
+||eatengossipyautomobile.com^
+||eatinerhitles.xyz^
+||eationslieem.xyz^
+||eatlengthanid.xyz^
+||eatsidebicep.com^
+||eautifulasawea.com^
+||eavailandproc.info^
+||eavesdroppingsickleemotionally.com^
+||eavesofefinegoldf.info^
+||eavfrhpnqbpkdqb.com^
+||eawp2ra7.top^
+||eazyleads.com^
+||eb1a6329bb.com^
+||eb5232b35d.com^
+||ebannertraffic.com^
+||ebbetsgourded.com^
+||ebcfjgnjw.com^
+||ebd.cda-hd.co^
+||ebe29efc2c.com^
+||ebetoni.com^
+||ebkthjkvp.com^
+||eblastengine.com^
+||ebnarnf.com^
+||ebonyrecognize.com^
+||ebsbqexdgb.xyz^
+||ebutiseemedlikeal.xyz^
+||ebuzzing.com^
+||ebwvjkvd.com^
+||ebz.io^
+||ec1e2c92b3.com^
+||ec2867edc4.com^
+||ec5e727d37.com^
+||eca578b203.com^
+||ecae03ea3d.com^
+||ecchhelios.top^
+||echehalids.guru^
+||echiovlhu.com^
+||echnic.com^
+||echoachy.xyz^
+||echoeshamauls.com^
+||echoizepheeal.uno^
+||echskbpghlc.com^
+||eciivxqtur.com^
+||ecipientconcertain.info^
+||eclatedpewy.com^
+||eclatssaic.guru^
+||eclebgjz.com^
+||eclkmpbn.com^
+||eclkmpsa.com^
+||eclogicmeows.com^
+||ecodemitter.website^
+||econenectedith.info^
+||economicalgobetween.com^
+||econth.com^
+||econtinuedidg.com^
+||ecortb.com^
+||ecoulsou.xyz^
+||ecound.com^
+||ecpms.net^
+||ecrwqu.com^
+||ecsxtrhfgvs.com^
+||ecthymaalgodon.com^
+||ectuallyenitwas.info^
+||ecuebovjrnn.com^
+||ecusemis.com^
+||ecyxbhvnntj.com^
+||eczemagrison.uno^
+||ed028aa9c4.com^
+||ed11f01827.com^
+||ed82f015f8.com^
+||edaciousedaciousindexesbrief.com^
+||edalloverwiththinl.info^
+||edassiumw.xyz^
+||edbritingsynt.info^
+||edcritessuspi.com^
+||eddffea7e1.com^
+||edeybivah.com^
+||edgar2al2larngpoer.com^
+||edgbas.com^
+||edgeads.org^
+||edgevertise.com^
+||edgychancymisuse.com^
+||edgyconnaterag.com^
+||edhimasifiwoery.xyz^
+||edinburghcawaura.com^
+||edindeedeisas.com^
+||edingrigoguter.com^
+||edioca.com^
+||edirectuklyeco.info^
+||edition25.com^
+||editionlingerexpanded.com^
+||editorpilotlimbs.com^
+||edjadcscca.com^
+||edjnkones.com^
+||edkgdruoreys.com^
+||edlilu.com^
+||edncewvfadqrkr.com^
+||ednewsbd.com^
+||edodtfnyfpf.com^
+||edomz.net^
+||edoumeph.com^
+||edqbparlheuj.com^
+||edrevenuedur.xyz^
+||edrubyglo.buzz^
+||edtheparllase.com^
+||edu-lib.com^
+||edua29146y.com^
+||educatedcoercive.com^
+||educatedeggnog.com^
+||educationalapricot.com^
+||educationalrelentlesshermichermic.com^
+||educedsteeped.com^
+||edutechlearners.com^
+||edvcqnp.cn^
+||edverys.buzz^
+||edvforeveretest.com^
+||edvfwlacluo.com^
+||edvrfjrrxk.com^
+||edvxygh.com^
+||edwate.com^
+||edwfdhkgnx.com^
+||ee43ed4973.com^
+||ee625e4b1d.com^
+||ee6a35c1eeee.com^
+||eea605742d.com^
+||eeab79bf10.com^
+||eeafcgmpk.com^
+||eeb54c6bc8.com^
+||eebouroo.net^
+||eecd.xyz^
+||eecd179r3b.com^
+||eeceme.com^
+||eecewaim.xyz^
+||eecf8c2edf.com^
+||eechicha.com^
+||eeco.xyz^
+||eedsaung.net^
+||eeftooms.net^
+||eegamaub.net^
+||eegeeglou.com^
+||eeghadse.com^
+||eegnacou.com^
+||eegookiz.com^
+||eehimeer.xyz^
+||eehuzaih.com^
+||eeinhyfb.com^
+||eekmbamyvkenb.top^
+||eekreeng.com^
+||eeksidro.com^
+||eelempee.xyz^
+||eelipaus.net^
+||eelxljos.com^
+||eemedlikeama.xyz^
+||eemreyrwkqwnv.top^
+||eemsoods.com^
+||eenbies.com^
+||eengange.com^
+||eengilee.xyz^
+||eensoans.com^
+||eephaunou.com^
+||eephaush.com^
+||eephilru.com^
+||eepoawhe.xyz^
+||eepsukso.com^
+||eeptushe.xyz^
+||eeqzrllnzkbkb.top^
+||eergaroa.com^
+||eergithi.com^
+||eeroawug.com^
+||eersutoo.net^
+||eeshemto.com^
+||eesihighlyrec.xyz^
+||eessoost.net^
+||eetchaid.net^
+||eethilsi.com^
+||eetsegeb.net^
+||eetsooso.net^
+||eetyed.com^
+||eevaitou.xyz^
+||eewhaukr.xyz^
+||eewheeds.com^
+||eewhocmi.com^
+||eexaitie.net^
+||eeywmvwebqqrj.top^
+||eezavops.net^
+||eezegrip.net^
+||ef2aecba6f.com^
+||ef9i0f3oev47.com^
+||efanyorgagetni.info^
+||effacedefend.com^
+||effaceecho.com^
+||effacerevealing.com^
+||effateuncrisp.com^
+||effectivecpmcontent.com^
+||effectivecpmgate.com^
+||effectivecreativeformat.com^
+||effectivecreativeformats.com^
+||effectivedisplaycontent.com^
+||effectivedisplayformat.com^
+||effectivedisplayformats.com^
+||effectivefinnish.com^
+||effectivegatetocontent.com^
+||effectivemeasure.net^
+||effectiveperformanceformat.com^
+||effectiveperformancenetwork.com^
+||effectsglancefirmly.com^
+||effectslacybulb.com^
+||effectuallyaudition.com^
+||effectuallydeliriumparalysis.com^
+||effectuallyimitation.com^
+||effectuallyrefrigerator.com^
+||effeshumoury.xyz^
+||effide.com^
+||effixtile-inceive.com^
+||effumeaccupy.website^
+||effusedprankle.com^
+||efinauknceiwou.info^
+||efptjivneg.com^
+||eftsaudian.website^
+||efumesok.xyz^
+||efvheaepmbgicx.xyz^
+||efvpufdjd.com^
+||egallsylvate.com^
+||egcqohrksmlmu.xyz^
+||egerssarcel.com^
+||eggcupsfriends.com^
+||eggerscorr.com^
+||egglessunfrees.uno^
+||eggsiswensa.com^
+||eggsreunitedpainful.com^
+||eggytiptops.com^
+||eghnybyvn.com^
+||egknjiycidfj.com^
+||egldvmz.com^
+||egloochy.com^
+||egmfjmhffbarsxd.xyz^
+||egoaxdyp.com^
+||egoismdondine.com^
+||egoisminfinite.com^
+||egoismundonefifth.com^
+||egotizeoxgall.com^
+||egouages.site^
+||egowyefort.live^
+||egpdbp6e.de^
+||egpovsl.com^
+||egreephu.com^
+||egretswamper.com^
+||egrogree.xyz^
+||egrvkoqigygqk.com^
+||egxxlvyguirt.com^
+||egyifdjrbrwyj.com^
+||egynvnnlhywq.com^
+||egyptchwas.com^
+||egyptianintegration.com^
+||ehadmethe.xyz^
+||ehadtwobright.com^
+||ehakpsvdt.com^
+||ehcstrp.com^
+||ehoqtjfazgxzee.com^
+||ehpvvxyp.com^
+||ehpxmsqghx.xyz^
+||ehqdzqi.com^
+||eicbgbnbvjf.com^
+||eidosrebegin.com^
+||eiewwepb.com^
+||eighly.com^
+||eighteenderived.com^
+||eighthwaspish.com^
+||eightuntrue.com^
+||eightvodrumble.com^
+||eignan.com^
+||eigned.com^
+||eiistillstayh.com^
+||eijumomf.com^
+||eikegolehem.com^
+||eincre.com^
+||eingajoytow.org^
+||eintheworldwh.com^
+||eiorwithitofsti.com.ua^
+||eiorwithitofstwe.xyz^
+||eiteribesshaints.com^
+||eitfromthe.com^
+||eitful.com^
+||eitgun.com^
+||eitics.com^
+||eitish.com^
+||eitka.com^
+||eitney.com^
+||eiykwdhmnybu.com^
+||eiyoatxbrbyu.com^
+||ejcet5y9ag.com^
+||ejdkqclkzq.com^
+||ejectionthoughtful.com^
+||ejeemino.net^
+||ejipaifaurga.com^
+||ejotdqfjazg.com^
+||ejpzqnqwcszfsz.com^
+||ejrigxesvg.com^
+||ejsfnpjxc.com^
+||ejuiashsateampl.info^
+||ekareqif.xyz^
+||ekb-tv.ru^
+||ekgloczbsblg.com^
+||ekkpaxli.xyz^
+||eklfuctjbwddgn.com^
+||ekmas.com^
+||ekovfgtgcjqg.com^
+||ekrnhbmrbbvwdro.com^
+||ektobedirectuklyec.info^
+||elajowser.com^
+||elasticad.net^
+||elasticdestruct.com^
+||elaterconditin.info^
+||elbowfixes.com^
+||elbowrevolutionary.com^
+||elbowsmouldoral.com^
+||eldestcasualelements.com^
+||eldestcontribution.com^
+||eldestequivalentdrain.com^
+||elearl.com^
+||eleavers.com^
+||electnext.com^
+||electosake.com^
+||electranowel.com^
+||electric-contest.pro^
+||electricalbicyclelistnonfiction.com^
+||electrodirect.click^
+||electronicconsensus.com^
+||elecur.com^
+||eleeghod.xyz^
+||elegant-feedback.com^
+||elegantkhamsin.life^
+||elegiachalo.website^
+||elementalantecedent.com^
+||elementarydrypoverty.com^
+||elemincaiman.website^
+||elepaioboylas.digital^
+||elepocial.pro^
+||elevateamongstelitist.com^
+||elevatedidentify.com^
+||elfcoexistbird.com^
+||elfinsande.website^
+||elgdkzio.com^
+||elgust.com^
+||elianicben.com^
+||eliaoutbawl.com^
+||elicaowl.com^
+||elicoaga.xyz^
+||eligiblebraceelitist.com^
+||eligiblecompetitive.com^
+||eliminatedordered.com^
+||elinvarpayola.com^
+||eliondolularhene.info^
+||eliss-vas.com^
+||elitedatingexperience.top^
+||elitistcompensationstretched.com^
+||elitistrawirresistible.com^
+||elizabethobjectedgarlic.com^
+||elizaguarapo.com^
+||elizapanelairplane.com^
+||elizathings.com^
+||elkbahtax.com^
+||elkejneqbkrrl.top^
+||elkhornreddens.com^
+||ellaysad.live^
+||ellcurvth.com^
+||ellicecaesura.com^
+||elltheprecise.org^
+||elmiestkanuri.top^
+||elmkrljayamrb.top^
+||elmonopolicycr.info^
+||elogiumtagmeme.com^
+||elonreptiloid.com^
+||eloquencer.com^
+||eloquentformallyrelapse.com^
+||elrfqgvvljkvxg.com^
+||elrkovhhyfkor.com^
+||elsatthereandh.cc^
+||elsekeyseat.com^
+||elsewherebuckle.com^
+||eltxarqgwngybfi.com^
+||elusiveanxiouslyruns.com^
+||elwmvjuit.xyz^
+||elyvbqkmlqkqw.top^
+||emailon.top^
+||embaleobelia.life^
+||embalmswrights.com^
+||embargesnibble.website^
+||embarkdisrupt.com^
+||embarrassed-slice.pro^
+||embarrassmentcupcake.com^
+||embeddednonsilence.com^
+||embezzlementteddy.com^
+||embodimentpronounrunway.com^
+||embogsoarers.com^
+||embtrk.com^
+||embulkglommed.com^
+||emediate.dk^
+||ememoricane.info^
+||emeralddead.com^
+||emeraldhecticteapot.com^
+||emergencymarquis.com^
+||emerickveilers.space^
+||emgthropositeas.info^
+||emicalcove.xyz^
+||emigrantblunder.com^
+||emigrantfirearmcaliber.com^
+||emitinspect.com^
+||emitlabelreproduction.com^
+||emkarto.fun^
+||emkyrzrjnjrmw.top^
+||emlifok.info^
+||emmermyotic.com^
+||emodinlighten.com^
+||emolapnay.com^
+||emoticappfriends.com^
+||emotionalfriendship.com^
+||emotionaljudgment.pro^
+||emotionallycosmeticshardly.com^
+||emotionallyhemisphere.com^
+||empafnyfiexpectt.info^
+||empdat.com^
+||emperm.com^
+||empiot.com^
+||empirecdn.io^
+||empireexhibited.com^
+||empirelayer.club^
+||empiremoney.com^
+||employeelorddifferently.com^
+||employerpartingbikini.com^
+||employmentsuppressedbeautiful.com^
+||empond.com^
+||empowertranslatingalloy.com^
+||emptem.com^
+||emptivetss.space^
+||emptorrevalue.digital^
+||emptyescort.com^
+||emqomxdwrhol.com^
+||emqrjjveqnjab.top^
+||emqrjjveqnnav.top^
+||emqrjjveqnnjw.top^
+||emqvwujfjknkbg.com^
+||emraudpeptone.com^
+||emsservice.de^
+||emukentsiwo.org^
+||emumuendaku.info^
+||emwkzebpuo.com^
+||emwqvlymjydv.com^
+||emxdgt.com^
+||emyfueuktureukwor.info^
+||enablerubbingjab.com^
+||enaceanspection.com^
+||enactedshimmy.website^
+||enacttournamentcute.com^
+||enaenasiftage.com^
+||enarmriv.com^
+||enarmuokzo.com^
+||enastamo.info^
+||enbclpbyi.com^
+||enbjrjyjrbynexl.xyz^
+||encampmentgeologydetective.com^
+||enchainwalker.com^
+||enchanted-stretch.pro^
+||enchroe.com^
+||encirclesheriffemit.com^
+||enclearmooch.com^
+||enclforlane.com^
+||enclosedsponge.com^
+||encloseprecious.com^
+||encodeinflected.com^
+||encounterboastful.com^
+||encounterfidelityarable.com^
+||encouragedrealityirresponsible.com^
+||encouragingpistolassemble.com^
+||encouragingwilderness.com^
+||encroachfragile.com^
+||encroachsnortvarnish.com^
+||encumberglowingcamera.com^
+||encyclopediaaimless.com^
+||encyclopediaresemblancerecant.com^
+||endangersquarereducing.com^
+||endeavourcounter.com^
+||endingdespond.uno^
+||endjcplnsweyjye.xyz^
+||endjigsur.com^
+||endlessvow.com^
+||endowverb.com^
+||endream.buzz^
+||endurecorpulent.com^
+||enduresopens.com^
+||enebyq.com^
+||eneffe.com^
+||enenles.com^
+||enenlyb.com^
+||enerab.com^
+||enerativearea.org^
+||energeticexample.com^
+||eneverals.biz^
+||enfarcearriero.uno^
+||enftvgnkylijcp.xyz^
+||enfuck.com^
+||engagefurnishedfasten.com^
+||engagementdepressingseem.com^
+||engagementpolicelick.com^
+||engineseeker.com^
+||engingsecondu.com^
+||englandhogmane.com^
+||enguis.com^
+||enhalosecurer.digital^
+||enhancenephew.com^
+||enharaa.com^
+||enharau.com^
+||enherappedo.cc^
+||enherthertindown.xyz^
+||enhwy.com^
+||enjoyedestrangeapplication.com^
+||enjoyedtool.com^
+||enjrzhkf.com^
+||enlales.com^
+||enlargementillegal.com^
+||enlightencentury.com^
+||enlivengeometry.com^
+||enlnks.com^
+||enmassstraits.com^
+||enmekedwahin.com^
+||enmiser.com^
+||enmitystudent.com^
+||enniced.com^
+||enochiccroatan.guru^
+||enodiarahnthedon.com^
+||enolizekibsey.uno^
+||enoneahbut.org^
+||enormous-society.pro^
+||enormous-use.pro^
+||enormouslysubsequentlypolitics.com^
+||enormouswar.pro^
+||enoskees.space^
+||enoughglide.com^
+||enoughts.info^
+||enoughturtlecontrol.com^
+||enqkeynmmnbzb.top^
+||enquiryinsight.com^
+||enquirysavagely.com^
+||enragesundular.guru^
+||enrichdressedprecursor.com^
+||enrichstudentroast.com^
+||enrichyummy.com^
+||enrilov.info^
+||enrobeddhuti.space^
+||enrobeskaithy.top^
+||enroes.com^
+||enrolloriner.uno^
+||ensban.com^
+||ensetepoggies.com^
+||ensignconfinedspurt.com^
+||ensignpancreasrun.com^
+||ensinthetertaning.com^
+||ensosignal.com^
+||ensueswill.com^
+||entaildollar.com^
+||enteredcocktruthful.com^
+||enterpriseinclinedvandalism.com^
+||entertainedshook.com^
+||enthronesacrifice.com^
+||enthusiasticring.com^
+||enticeobjecteddo.com^
+||entirelyapplicationseeing.com^
+||entirelysacrament.com^
+||entitledbalcony.com^
+||entjgcr.com^
+||entreatyfungusgaily.com^
+||entrecard.s3.amazonaws.com^
+||entreeselegist.com^
+||entrepreneurrestorationthereby.com^
+||entrerscab.com^
+||entterto.com^
+||enueduringhere.info^
+||enuewasadirectres.info^
+||enuresdairi.com^
+||enviabledilate.com^
+||enviablesavouropinion.com^
+||enviouscredentialdependant.com^
+||enviousforegroundboldly.com^
+||enviouspipe.com^
+||enviousroom.pro^
+||enviousshape.com^
+||environmentalanalogous.com^
+||environmentalchangingnative.com^
+||environmentaltallrender.com^
+||envylavish.com^
+||enwerzaqqbbnb.top^
+||enwerzaqqbqnj.top^
+||enwombjounced.space^
+||enyjonakhjo.com^
+||enyunle.com^
+||enyunme.com^
+||enzajjbrrbbvw.top^
+||enzav.xyz^
+||enzymsucuuba.com^
+||eo62cocntx.com^
+||eoafgbgyebbcy.com^
+||eoaktaposh.com^
+||eobvppi.com^
+||eofripvanwin.org^
+||eofst.com^
+||eogaeapolaric.com^
+||eondunpea.com^
+||eonsmedia.com^
+||eonwayaha.com^
+||eooperseducat.xyz^
+||eooslfyhziubo.com^
+||eopleshouldt.info^
+||eoqctcsvskqlz.com^
+||eoredi.com^
+||eorganizatio.com^
+||eosads.com^
+||eoseurlingeringonl.xyz^
+||eoseurlingeringont.com.ua^
+||eoveukrnme.info^
+||eoweridus.com^
+||eownouncillors.info^
+||eoxaxdglxecvguh.xyz^
+||epacash.com^
+||epagogerepines.com^
+||epailseptox.com^
+||eparil.com^
+||eperuaangels.com^
+||ephebedori.life^
+||ephedrasebait.digital^
+||ephpqyjqyj.com^
+||epicgameads.com^
+||epigaeatoasty.com^
+||epigeicnarthex.com^
+||epigyneleonora.digital^
+||epiloiawhilter.com^
+||epimacevseirm.com^
+||epimerbeep.top^
+||epists.com^
+||epithetduler.com^
+||epjwugocpvan.xyz^
+||epmfjjabhfwgkun.com^
+||epnjoyriuyxg.xyz^
+||epnredirect.ru^
+||epochexr.website^
+||epochlookout.com^
+||epotaidhdbg.com^
+||epresententifi.com^
+||eprjyvjhmtpbo.xyz^
+||epsuphoa.xyz^
+||eptougry.net^
+||epu.sh^
+||epushclick.com^
+||eputysolomon.com^
+||eqacypykxa.com^
+||eqads.com^
+||eqkjmvkkmvvkj.top^
+||eqktmnuojibw.com^
+||eqmyjnyjzqzkl.top^
+||equabilityassortshrubs.com^
+||equatorabash.com^
+||equesk.com^
+||equilibriumindifferentsoak.com^
+||equiptbrotula.com^
+||equirekeither.xyz^
+||equitydefault.com^
+||eqvudqracrhalsg.com^
+||era67hfo92w.com^
+||eraltradiansid.com^
+||eraseficins.website^
+||erbiscusys.info^
+||ercockremarkedo.info^
+||ercoeteasacom.com^
+||erconditingde.info^
+||erdeallyighab.com^
+||erdecisesgeorg.info^
+||erders.com^
+||ereallywasnoth.com^
+||erehzj.xyz^
+||eremuribleak.com^
+||erenchinterried.pro^
+||erereauksofthe.info^
+||eresultedinncre.info^
+||ergadx.com^
+||erhousouokopeu.com^
+||erhtaruxxxfg.com^
+||eriawea.com^
+||eringosdye.com^
+||erinoccluse.website^
+||erizoricher.life^
+||erkeincepts.website^
+||erlvjjyk.com^
+||erm5aranwt7hucs.com^
+||ernesseitenean.com^
+||erniphiq.com^
+||ernshawing.com^
+||ernstdirecly.guru^
+||ero-advertising.com^
+||erofherlittleboy.com^
+||erosionexception.com^
+||erosyndc.com^
+||erovation.com^
+||errely.com^
+||erringstartdelinquent.com^
+||errorpalpatesake.com^
+||errorparasol.com^
+||errors.house^
+||errorssmoked.com^
+||errresound.com^
+||erseducationinin.info^
+||ersfohiplaceof.xyz^
+||ershniff.com^
+||ersislaqands.com^
+||erssqstdjnn.com^
+||erstonordersityex.info^
+||ertainoutweileds.info^
+||ertewqas.net^
+||ertewqas.org^
+||erthmefeyauk.xyz^
+||eru5tdmbuwxm.com^
+||erumen.com^
+||eruthoxup.com^
+||ervqqtdjdxvgh.com^
+||eryarriedstr.info^
+||erysilenitmanb.com^
+||erytheadestrer.digital^
+||esaidees.com^
+||esandalargere.com^
+||esathyasesume.info^
+||escaatwite.com^
+||escalatenetwork.com^
+||escers.com^
+||escharatheins.com^
+||eschelbolts.com^
+||escthermae.com^
+||escy55gxubl6.com^
+||esdcubited.uno^
+||eseecmoa.com^
+||eseemyresumef.xyz^
+||esescvyjtqoda.xyz^
+||eshaurie.xyz^
+||eshedofiga.tech^
+||eshkol.io^
+||eshouloo.net^
+||esignificanvi.info^
+||esmyinteuk.info^
+||esmystem.com^
+||esnlynotquiteso.com^
+||esodnbhzdpl.com^
+||esopertyva.shop^
+||esorandhewa.com^
+||esosfultrbriolena.info^
+||especiallyblareparasol.com^
+||espierbatz.digital^
+||espionagegardenerthicket.com^
+||esrpkd.com^
+||essaycosigninvite.com^
+||essaypresidential.com^
+||essential-trash.com^
+||essentialpiece.pro^
+||essentialsicklyinane.com^
+||esseza.com^
+||estafair.com^
+||estaterenderwalking.com^
+||estatestitch.com^
+||estatueofthea.info^
+||esteemtalented.com^
+||estkewasa.com^
+||estoopsi.com^
+||estrinuprise.guru^
+||estuousopalish.guru^
+||esumeformo.info^
+||eswaldderinao.xyz^
+||etapescaisse.com^
+||etbelpoyes.xyz^
+||etccdvfodthhc.com^
+||etcodes.com^
+||etereyouma.info^
+||etheappyrince.com^
+||etheappyrincea.info^
+||etheappyrincerta.info^
+||ethecityonata.com^
+||ethecountryw.org^
+||ethicel.com^
+||ethikuma.link^
+||ethnicacknowledgedbeneficial.com^
+||ethnicmovescrupulous.com^
+||ethnicscrozers.com^
+||ethoamee.xyz^
+||ethoxyblindly.com^
+||ethresholdouc.xyz^
+||etiamangola.com^
+||etingplansfo.buzz^
+||etjxkvdorypmppp.com^
+||etnacsqssv.com^
+||etobepartoukfare.info^
+||etougais.net^
+||etphoneme.com^
+||etretantothis.com^
+||ettilt.com^
+||ettjvrjujt.xyz^
+||etxahpe.com^
+||etyequiremu.org^
+||euahvyde.xyz^
+||eucing.com^
+||eucleu.com^
+||eucli-czt.com^
+||eudoxia-myr.com^
+||eudstudio.com^
+||eugenearsonmeanwhile.com^
+||eugonichyke.uno^
+||euizhltcd6ih.com^
+||eukova.com^
+||eulal-cnr.com^
+||eulogiafilial.com^
+||eunzkvf.com^
+||euonymcalvous.com^
+||euosicjxjv.com^
+||euouaeslurped.com^
+||eupathyroching.store^
+||eurckherngh.com^
+||euro-referer.click^
+||europacash.com^
+||europe-discounts.com^
+||europeanurinebanana.com^
+||europertsticke.site^
+||euros4click.de^
+||eurse.com^
+||euugbutvb.com^
+||euz.net^
+||ev-dating.com^
+||evaluationacutegrandpa.com^
+||evandr.online^
+||evangelrhyton.digital^
+||evanpcf.uno^
+||evaporateahead.com^
+||evaporatehorizontally.com^
+||evasiondemandedlearning.com^
+||evasionseptemberbee.com^
+||evcwihysdnptpjm.xyz^
+||evdebdvwnzlyyz.com^
+||eveald.com^
+||evemasoil.com^
+||evencontinuallyclaim.com^
+||evenghiougher.com^
+||eveningproclamationarched.com^
+||eveningsfleawhatsoever.com^
+||eventbr.xyz^
+||eventhenherthis.info^
+||eventhenherthisi.com^
+||eventrhina.com^
+||eventsbands.com^
+||eventucker.com^
+||evenuewasadi.xyz^
+||ever8trk.com^
+||everalmefarketing.info^
+||everausterity.com^
+||everdreamsofc.info^
+||evergreentroutpitiful.com^
+||everlastinghighlight.com^
+||everprobation.com^
+||everymark.xyz^
+||everypilaus.com^
+||everythingtoknows.com^
+||everywheresavourblouse.com^
+||eveteaemo.com^
+||evgywgur.com^
+||eviclick.pro^
+||evidentlysoup.com^
+||evifokcrmhdmai.com^
+||evilshortcut.com^
+||evitinghabnab.guru^
+||evlutvsyfegi.com^
+||evoign.com^
+||evokeowedangers.com^
+||evours.com^
+||evouxoup.com^
+||evqpawhucyrdhu.com^
+||evushuco.com^
+||evwmwnd.com^
+||evzhzppj5kel.com^
+||evzonesglowfly.cfd^
+||evzxlgstwcai.com^
+||ewaglongoo.com^
+||ewaighee.xyz^
+||ewallowi.buzz^
+||ewasverymuchad.info^
+||ewayanplease.xyz^
+||ewbmrwzmbkzv.top^
+||ewbmrwzmbvzb.top^
+||eweiwykaruwvbi.com^
+||ewerhodub.com^
+||ewesmedia.com^
+||ewikajs.com^
+||ewjakayndd.com^
+||ewoodandwaveo.com^
+||ewooe6df.com^
+||ewoutosh.com^
+||ewoverth.buzz^
+||ewqkrfjkqz.com^
+||ewrerew29w09.com^
+||ewruuqe5p8ca.com^
+||ewtgmfajrdhsyn.xyz^
+||exacdn.com^
+||exactconfigurationhasten.com^
+||exaggeratekindnessvocal.com^
+||exaggeratestamppost.com^
+||exaltationinsufficientintentional.com^
+||examinationevolutionmingle.com^
+||examineroverprotectiveproof.com^
+||examinerplodbuild.com^
+||examplesusagefeedback.com^
+||exampulsate.com^
+||exasperationplotincarnate.com^
+||exbuggishbe.info^
+||exceedinglydiscovered.com^
+||excelelernody.info^
+||excellenceads.com^
+||excellent-closet.pro^
+||excellent-vids.online^
+||excellentafternoon.com^
+||excellentinvolved.com^
+||excellentpics.space^
+||excellentsponsor.com^
+||excellentvids.online^
+||excellentvids.space^
+||exceph.com^
+||exceptinggapslightest.com^
+||exceptionweakerboring.com^
+||exceptscasease.website^
+||excessivesinner.com^
+||excessivetighten.com^
+||exchange-traffic.com^
+||exchangedbeadannually.com^
+||exchangediscreditmast.com^
+||excitableclub.pro^
+||excitablefew.pro^
+||excitead.com^
+||excitementoppressive.com^
+||excitingattritionmineral.com^
+||excitingwill.pro^
+||excitonharpers.space^
+||exclaimwhirlpoolcredential.com^
+||exclamationresound.com^
+||exclusivebrass.com^
+||excretekings.com^
+||excuseparen.com^
+||excusepuncture.com^
+||excuum.com^
+||exdimkvfbku.com^
+||exdynsrv.com^
+||exebid.ru^
+||executecomicswhale.com^
+||executiontoothache.com^
+||exemplarif.com^
+||exemplary-range.pro^
+||exemplarychemistry.com^
+||exemptrequest.com^
+||exercisefeeling.com^
+||exertheadlight.com^
+||exhalejuxtapose.com^
+||exhausted-use.pro^
+||exhaustedaccess.pro^
+||exhauststreak.com^
+||exhibitedderivedremarkable.com^
+||exhibitionunattractive.com^
+||exhno.com^
+||exi8ef83z9.com^
+||exinepenname.top^
+||existencethrough.com^
+||existingcraziness.com^
+||exists-mazard.icu^
+||existsdesist.com^
+||existsvolatile.com^
+||exitenmitynotwithstanding.com^
+||exlusepolly.com^
+||exmrwwt.com^
+||exnesstrack.com^
+||exoads.click^
+||exobafrgdf.com^
+||exoclick.com^
+||exoclsodaqs.com^
+||exodsp.com^
+||exofrwe.com^
+||exomonyf.com^
+||exoprsdds.com^
+||exorateairing.guru^
+||exosiignvye.xyz^
+||exosrv.com^
+||exotismuntrill.com^
+||expandremittance.com^
+||expdirclk.com^
+||expectedballpaul.com^
+||expectthatmyeduc.info^
+||expedientabnormaldeceased.com^
+||expelsleeken.website^
+||expendhattwo.com^
+||expensedebeak.com^
+||expensewardrobecivil.com^
+||experimentalconcerningsuck.com^
+||experimentmelting.com^
+||expertisefall.com^
+||expertnifg.com^
+||explainpompeywistful.com^
+||explodemedicine.com^
+||exploitdevoid.com^
+||exploitingenious.com^
+||exploreannihilationquicker.com^
+||explorecomparison.com^
+||explorefast-1.com^
+||explorefast-2.com^
+||explosionsubdueguidance.com^
+||explosivegleameddesigner.com^
+||expmediadirect.com^
+||expocrack.com^
+||exponeestated.com^
+||exporder-patuility.com^
+||exportleggy.com^
+||exportspring.com^
+||exposestomnoup.space^
+||exposuremixed.com^
+||expressalike.com^
+||expressproducer.com^
+||expuge.com^
+||expugi.com^
+||expwyredocks.com^
+||exquisitefundlocations.com^
+||exrtbsrv.com^
+||extend.tv^
+||extenderlypoit.xyz^
+||extensions-media.com^
+||extensivenegotiation.com^
+||extentaccreditedinsensitive.com^
+||extentresentment.com^
+||exterminateantique.com^
+||exterminatearch.com^
+||exterminatestreet.com^
+||externalwidelycompany.com^
+||extra33.com^
+||extraconventional.com^
+||extractdissolve.com^
+||extractforgiveness.com^
+||extractsupperpigs.com^
+||extralarge-proposal.pro^
+||extraneedlesshoneycomb.com^
+||extremegoggle.com^
+||extremereach.io^
+||extremeshredcharm.com^
+||extremitybagpipechallenge.com^
+||extremiu.top^
+||extrer.com^
+||exwotics6heomrthaoi4r.com^
+||eyauknalyticafra.info^
+||eychroi.com^
+||eyeballceorl.guru^
+||eyeballcorruption.com^
+||eyeballdisk.com^
+||eyebrowfaciliate.com^
+||eyebrowsasperitygarret.com^
+||eyebrowscrambledlater.com^
+||eyebrowsneardual.com^
+||eyebrowsprocurator.com^
+||eyefuneve.com^
+||eyenider.com^
+||eyeota.net^
+||eyere.com^
+||eyereturn.com^
+||eyeshadowclayindulgence.com^
+||eyeviewads.com^
+||eyewitnessstreak.com^
+||eyharae.com^
+||eyjouer.com^
+||eymaume.com^
+||eymised.com^
+||eynicit.com^
+||eyomusbsxrib.com^
+||eypeole.com^
+||eyquvllh.com^
+||eyrarbuggers.com^
+||eyrasmamluks.space^
+||eytheed.com^
+||ezaicmee.xyz^
+||ezcgojaamg.com^
+||ezeraf.com^
+||ezexfzek.com^
+||ezhefg9gbhgh10.com^
+||ezijyfiq.xyz^
+||ezjhhapcoe.com^
+||ezmob.com^
+||eznoz.xyz^
+||ezoufdpeyqaain.com^
+||ezqbbqybwjbvm.top^
+||ezrvmxshalr.com^
+||ezsbhlpchu.com^
+||ezulqzssxnu.com^
+||ezwnjnnkjaamw.top^
+||ezyebrbaymnb.top^
+||ezyenrwcmo.com^
+||ezzmmvzleawab.top^
+||ezzmmvzleawjq.top^
+||ezzmmvzleayjm.top^
+||f0657e4fd5.com^
+||f07neg4p.de^
+||f19013235f.com^
+||f28bb1a86f.com^
+||f28fda58c5.com^
+||f2bdeb5c8c.com^
+||f2fc0fce65.com^
+||f2svgmvts.com^
+||f3234a2c9a.com^
+||f3551539d6565853.com^
+||f3663618ff.com^
+||f37d6b16c3.com^
+||f397fd95eb.com^
+||f3a173b897.com^
+||f3abc0d1b3.com^
+||f3udfa7nfguhni.com^
+||f4235693e4.com^
+||f48d1c06e4.com^
+||f4961f1b2e.com^
+||f5080f5cee5a00.com^
+||f52a1ac6d9.com^
+||f55f5b7e4b.com^
+||f57fbf2b51.com^
+||f5e52a0d14.com^
+||f5v1x3kgv5.com^
+||f63f3176ad.com^
+||f688add167.com^
+||f709c496d6.com^
+||f773a03dcb.com^
+||f78f9d3fc2.com^
+||f7e5bf5ed8.com^
+||f7e8aa0821.com^
+||f8260adbf8558d6.com^
+||f83d8a9867.com^
+||f853150605ccb.com^
+||f8e36bb73c.com^
+||f95nkry2nf8o.com^
+||f9cedc4e17.com^
+||f9d38526cd.com^
+||f9pennsy3glvkm6ania.com^
+||fa3f0c1e3f.com^
+||fa9b667e4e.com^
+||fabrkrup.com^
+||facaltow.net^
+||facebarclarty.com^
+||facersmangles.com^
+||facesnotebook.com^
+||facetclimax.com^
+||facilitatevoluntarily.com^
+||facilitycompetition.com^
+||facilitypestilent.com^
+||facinggleg.life^
+||fackeyess.com^
+||faclientirethe.xyz^
+||facsimrunt.space^
+||factquicker.com^
+||facyptythu.com^
+||fadbell.com^
+||fadegranted.com^
+||fademployedtransactions.com^
+||fadewaves.com^
+||fadf617f13.com^
+||fadsims.com^
+||fadsimz.com^
+||fadsipz.com^
+||fadskis.com^
+||fadskiz.com^
+||fadslimz.com^
+||fadssystems.com^
+||fadszone.com^
+||fae46gussylvatica.com^
+||faerieattorns.com^
+||faestara.com^
+||faffylunk.space^
+||faggotsnulled.com^
+||faggrim.com^
+||fagovwnavab.com^
+||fagywalu.pro^
+||faidoud.com^
+||faifojee.xyz^
+||faigna.com^
+||faigroas.net^
+||faihiwhe.com^
+||failingrainful.website^
+||failuremaistry.com^
+||faintbedub.life^
+||faintdefrost.com^
+||faintstates.com^
+||faintsuperintend.com^
+||fainziphius.guru^
+||fairadsnetwork.com^
+||fairfaxdepresseddisguise.com^
+||fairfaxgeorgianayourself.com^
+||fairfaxhousemaid.com^
+||fairieflame.com^
+||fairnesschangingenamel.com^
+||fairnessels.com^
+||fairoaja.net^
+||fairytaleundergoneopenly.com^
+||faised.com^
+||faisopty.xyz^
+||faithaiy.com^
+||faithfulfacultativeladder.com^
+||faithfullyprotectionundo.com^
+||faithiqs.com^
+||faitis.com^
+||faiverty-station.com^
+||fajukc.com^
+||fakeerupriser.com^
+||fakesorange.com^
+||falcatayamalka.com^
+||falkag.net^
+||falkwo.com^
+||fallingseveral.com^
+||fallinsolence.com^
+||falloutbraidengaged.com^
+||falloutmariasauce.com^
+||falsarywaybung.com^
+||falsenalice.com^
+||falsewrist.com^
+||falsifybrightly.com^
+||falsifylilac.com^
+||fameailmentcircumstantial.com^
+||familyborn.com^
+||famobmf.com^
+||famoot.com^
+||famous-line.pro^
+||famousremainedshaft.com^
+||fampfage.com^
+||famulustaille.space^
+||fanagentmu.pics^
+||fanbyepee.com^
+||fanciedproduced.com^
+||fancifylucific.guru^
+||fancilybates.uno^
+||fancycrab.net^
+||fancywhim.com^
+||fandelcot.com^
+||fandmo.com^
+||fanklelaiser.com^
+||fannyindex.com^
+||fansang.xyz^
+||fantasticaubergine.com^
+||fantasticdiet.pro^
+||fantasticgap.pro^
+||fantodsshrug.com^
+||fanydourer.com^
+||fanza.cc^
+||faotfobjefeaef.com^
+||fapmeth.com^
+||faptdsway.ru^
+||faquirrelot.com^
+||faracoon.com^
+||farasiverived.org^
+||farawayreel.com^
+||farcedboccis.com^
+||fardasub.xyz^
+||fardelbungo.com^
+||fardingsoiling.com^
+||fargoodgarotes.digital^
+||farinassurbase.uno^
+||farmagegaudful.com^
+||farmhumor.host^
+||farmmandatehaggard.com^
+||faroff-age.pro^
+||faroff-painting.pro^
+||farrierbalmy.com^
+||farteniuson.com^
+||fartherpensionerassure.com^
+||farthersuspicious.com^
+||fartmoda.com^
+||fartris.pw^
+||fasciaekatcina.com^
+||fashionablegangsterexplosion.com^
+||fashionacreak.life^
+||fastapi.net^
+||fastcdn.info^
+||fastclick.net^
+||fastdld.com^
+||fastdlr.com^
+||fastdmr.com^
+||fastdxr.com^
+||fastennonsenseworm.com^
+||fastenpaganhelm.com^
+||faster-trk.com^
+||fasthypenews.com^
+||fastincognitomode.com^
+||fastlnd.com^
+||fastmtn.com^
+||fastnativead.com^
+||fastpopunder.com^
+||fastpsh.top^
+||fatalboy.pro^
+||fatalityadministrator.com^
+||fatalitycharitablemoment.com^
+||fatalityplatinumthing.com^
+||fatalloved.com^
+||fatchilli.media^
+||fatebbc.pro^
+||fathmurcurable.com^
+||fathuntsgall.com^
+||fatimacapos.com^
+||fatlossremedies.com^
+||fatotdaqsb.com^
+||fatsosjogs.com^
+||fatstepn.click^
+||fatuoidmunify.com^
+||fatwalkinger.club^
+||fatzuclmihih.com^
+||faudouglaitu.com^
+||faulterdeplume.com^
+||faultlessmilleranthill.com^
+||faultspiano.com^
+||faunaldipsas.digital^
+||faustbootery.com^
+||fauvesez.net^
+||favaqo.xyz^
+||favorable-lady.pro^
+||favorable-sample.com^
+||favorite-option.pro^
+||favorite-tonight.pro^
+||favoritenought.com^
+||favoritetonic.com^
+||favourcountingmixture.com^
+||favzzmeziy.com^
+||fawningforegut.life^
+||faxqaaawyb.com^
+||fayijxrs.com^
+||fazanppq.com^
+||fb-plus.com^
+||fb28078ad6.com^
+||fb332fdc0d.com^
+||fb960dbd5f.com^
+||fb99ef9239.com^
+||fbcdn2.com^
+||fbebmgbiou.com^
+||fbffdfproxwqi.com^
+||fbgdc.com^
+||fbgwruetfgbhp.com^
+||fbmedia-bls.com^
+||fbmedia-ckl.com^
+||fbmedia-dhs.com^
+||fbpgdlprsiz.com^
+||fbrheofkccovs.xyz^
+||fbxyuleyktun.com^
+||fc0a58af2e.com^
+||fc9115d2c7.com^
+||fcaijpwzvj.com^
+||fccinteractive.com^
+||fciyckhlpdxou.xyz^
+||fckmedate.com^
+||fcompsepd.com^
+||fcpfth.xyz^
+||fcprst.xyz^
+||fcqbjjcvohqo.com^
+||fcqqbrfucuf.com^
+||fcudlfqupglxynu.xyz^
+||fcxcubtkahif.xyz^
+||fcxsodjsrqp.xyz^
+||fczaifik.com^
+||fd2a9dd918.com^
+||fd5orie8e.com^
+||fd7qz88ckd.com^
+||fddfqxxxqbuhss.xyz^
+||fde1403147.com^
+||fdelphaswcealifornica.com^
+||fdiirjong.com^
+||fdjigxyxstiu.xyz^
+||fdorxsat.com^
+||fdpfkdnpvpmb.com^
+||fdtikenfxgkie.com^
+||fdubbogbean.guru^
+||fe7qygqi2p2h.com^
+||fe95a992e6afb.com^
+||feadrope.net^
+||feasis.com^
+||feastoffortuna.com^
+||featbankrupthide.com^
+||featbooksterile.com^
+||feathersaloof.com^
+||featue.com^
+||featurelink.com^
+||featureslounge.com^
+||featuresscanner.com^
+||feazingtrans.com^
+||feb6262526.com^
+||febadu.com^
+||febatigr.com^
+||febrah.com^
+||febran.com^
+||febraverooper.xyz^
+||februarynip.com^
+||februaryreductionapplet.com^
+||fecerismasker.com^
+||federalcertainty.com^
+||fedlee.com^
+||fedrocou.net^
+||fedsit.com^
+||fedykr.com^
+||feed-ads.com^
+||feed-xml.com^
+||feedbackslingnonpareil.com^
+||feedfinder23.info^
+||feedgist.com^
+||feedinburgmands.site^
+||feedlottumasha.guru^
+||feedyourheadmag.com^
+||feefouga.com^
+||feegoust.xyz^
+||feegozoa.com^
+||feegreep.xyz^
+||feelfereetoc.top^
+||feelingstoriesplumb.com^
+||feeloshu.com^
+||feelresolve.com^
+||feelseveryone.com^
+||feelsjet.com^
+||feeohmchi.com^
+||feeseeho.com^
+||feeshoul.xyz^
+||feevabeglee.com^
+||feewoajy.net^
+||feewuvoo.net^
+||fefoasoa.xyz^
+||fegsbatak.uno^
+||fehaishu.com^
+||feignoccasionedmound.com^
+||feignthat.com^
+||feiriegershon.com^
+||feistyhelicopter.com^
+||feistyswim.com^
+||fejla.com^
+||fejwcnbsu.com^
+||felidaeyojuane.com^
+||felied.com^
+||feliev.com^
+||felipby.live^
+||fellap.com^
+||fellowsargean.com^
+||fellowshippink.com^
+||felonlosel.com^
+||feltermopish.com^
+||feltmanarietid.com^
+||feluccahoit.com^
+||femald.com^
+||female-yard.pro^
+||femalehasslegloss.com^
+||femefaih.com^
+||femin.online^
+||femoafoo.com^
+||femsoahe.com^
+||fenacheaverage.com^
+||fencerecollect.com^
+||fencerscoelho.com^
+||fenchylsoonish.com^
+||fenddiscourse.com^
+||fenixm.com^
+||fensnippled.digital^
+||fensough.xyz^
+||fepgdpebyr.com^
+||fepseqdkfyfjc.com^
+||feqvfgfqe.com^
+||fer2oxheou4nd.com^
+||feredletrighro.com^
+||feredletrighro.info^
+||ferelatedmothes.com^
+||ferict.com^
+||feript.com^
+||ferisonledger.com^
+||ferlingbelayed.com^
+||fermacyupplow.com^
+||fermolo.info^
+||fernsnerves.uno^
+||feroaptu.xyz^
+||feroffer.com^
+||feroxnestor.space^
+||fertilecalfawelessaweless.com^
+||fertilisedignoringdeceive.com^
+||fertilisedlinealdeceived.com^
+||ferukentaspect.info^
+||ferventhoaxresearch.com^
+||ferventvague.com^
+||fessoovy.com^
+||festinsages.website^
+||festivalexcitinghypocrisy.com^
+||festivalflabbergasteddeliquencydeliquency.com^
+||festivityratfun.com^
+||festtube.com^
+||festusthedrag.com^
+||fethungi.com^
+||fetinhapinhedt.com^
+||feuageepitoke.com^
+||feudistchub.uno^
+||feuingcrche.com^
+||fewcupboard.com^
+||fewergkit.com^
+||fewplan.pro^
+||fewrfie.com^
+||fexyop.com^
+||fezacoox.net^
+||fezzanminyans.com^
+||ff00c90f6a.com^
+||ff42fd5ec6.com^
+||ff4eaea9ba.com^
+||ff9ffc838f.com^
+||ffcclqkmmlmecf.xyz^
+||ffffff0000ff.com^
+||ffffffdcdcdc.name^
+||ffortyimagist.com^
+||ffqtjwwhupcg.com^
+||ffrywcxaewmpp.com^
+||ffsewzk.com^
+||fftagtden.com^
+||ffuzila.com^
+||ffwbzklcszdk.com^
+||fgddrrr.com^
+||fgdxwpht.com^
+||fgfgnbmeieorr910.com^
+||fghnergyflex.xyz^
+||fgijincfktbguv.xyz^
+||fgislklsqqytr.com^
+||fgjasshw.com^
+||fgkoxeqjpal.com^
+||fgrvbkquwurttn.com^
+||fgxfnkiojgs.com^
+||fgzkuuvuligrj.com^
+||fh259by01r25.com^
+||fhdwtku.com^
+||fhepiqajsdap.com^
+||fhgh9sd.com^
+||fhisladyloveh.xyz^
+||fhjvhupv.com^
+||fhsmtrnsfnt.com^
+||fhsvyfoadsbo.com^
+||fiatgrabbed.com^
+||fibfgfptaeci.com^
+||fibmaths.com^
+||fibrehighness.com^
+||ficinhubcap.com^
+||fickle-brush.com^
+||fictiongroin.com^
+||fictionmineralladder.com^
+||ficusoid.xyz^
+||fidelity-media.com^
+||fidelitybask.com^
+||fidelitybearer.com^
+||fieldofbachus.com^
+||fiendrhythm.com^
+||fienttestor.guru^
+||fiercefacetwidely.com^
+||fiercequips.com^
+||fierysolemncow.com^
+||fieslobwg.com^
+||fifteenthhardboiledbanker.com^
+||fifthjournalisminadequate.com^
+||fighes.com^
+||fighla.com^
+||fightingleatherconspicuous.com^
+||figuan.com^
+||figuredreconsiderinvest.com^
+||fiinann.com^
+||fiinnancesur.com^
+||fijekone.com^
+||fijetuxa.com^
+||fikedaquabib.com^
+||filasseseeder.com^
+||filchmadeirahotel.com^
+||filesdots.com^
+||filese.me^
+||filetarget.com^
+||filetarget.net^
+||filetstaipo.com^
+||filiatefinbone.uno^
+||filippiwilled.uno^
+||filletdose.com^
+||filletnails.com^
+||fillingimpregnable.com^
+||fillsitsy.cam^
+||filmesonlinegratis.com^
+||filmreorganizeford.com^
+||filterexchangecage.com^
+||filthybudget.com^
+||fimserve.com^
+||fin.ovh^
+||finalice.net^
+||finallysuburblaunching.com^
+||finance-hot-news.com^
+||finance2you.org^
+||finbiznews.com^
+||fincbiqavgoe.com^
+||finchesvaster.website^
+||findalwaglike.com^
+||findanonymous.com^
+||findbetterresults.com^
+||findicaterperty.site^
+||findingattending.com^
+||findingexchange.com^
+||findlnk.com^
+||findnewline.com^
+||findromanticdates.com^
+||findswiftresults.com^
+||fineporno.com^
+||finesseboisterous.com^
+||fingahvf.top^
+||fingerprintoysters.com^
+||fingertipsquintinclusion.com^
+||finishcomplicate.com^
+||finishdancingwildest.com^
+||finisheddaysflamboyant.com^
+||finishedvistaquickly.com^
+||finishingracial.com^
+||finishingtwentiesimmoderate.com^
+||finized.co^
+||finkelbursula.space^
+||finkyepbows.com^
+||finnackavys.cfd^
+||finnan2you.com^
+||finnan2you.net^
+||finnan2you.org^
+||finnanregauge.com^
+||finnnann.com^
+||finreporter.net^
+||finsoafo.xyz^
+||finsoogn.xyz^
+||finxxak.com^
+||fiorenetwork.com^
+||fippledolcino.digital^
+||fiprst.xyz^
+||firearmtire.com^
+||firefeeder.com^
+||firelnk.com^
+||firescorrelationprodigy.com^
+||fireventcooperate.com^
+||firewoodgaietyshipment.com^
+||firewoodpeerlessuphill.com^
+||fireworksane.com^
+||fireworksattendingsordid.com^
+||firexclamation.com^
+||firine.com^
+||firkedpace.life^
+||firmlychurchyard.com^
+||firmlylowest.com^
+||firmsossa.guru^
+||firnebmike.live^
+||firon.xyz^
+||first-pollution.pro^
+||first-rate.com^
+||firsthandtie.com^
+||firstlightera.com^
+||firstlyliquidstereotype.com^
+||firtaips.com^
+||firtorent-yult-i-274.site^
+||firumuti.xyz^
+||fishedtopple.com^
+||fishermanslush.com^
+||fishkekcamp.com^
+||fishybackgroundmarried.com^
+||fishyoverallsupplement.com^
+||fishyscalpelweight.com^
+||fisikcbsosqet.com^
+||fissay.com^
+||fistdoggie.com^
+||fistevasionjoint.com^
+||fistofzeus.com^
+||fistsurprising.com^
+||fitcenterz.com^
+||fitchedjimmy.guru^
+||fitsazx.xyz^
+||fitssheashasvs.info^
+||fitthings.info^
+||fitting-population.com^
+||fittingcentermonday.com^
+||fittitfucose.com^
+||fivelegant.com^
+||fivetrafficroads.com^
+||fivulsou.xyz^
+||fivulu.uno^
+||fiwhibse.com^
+||fixbreakthrough.com^
+||fixchidie.com^
+||fixedencampment.com^
+||fixedgodmother.com^
+||fixedlowraid.com^
+||fixedlygrown.com^
+||fixespreoccupation.com^
+||fixpass.net^
+||fixsirrod.site^
+||fjdpdcdndc.com^
+||fjhfruuhmgnrt.com^
+||fjjctsabpdjhge.com^
+||fjoyewwxrowqy.com^
+||fjttbkoxer.xyz^
+||fkbkun.com^
+||fkbwtoopwg.com^
+||fkcubmmpn.xyz^
+||fkcvtiqbbgedb.com^
+||fkecheotlf.com^
+||fkexeijtqstuh.xyz^
+||fkovjfx.com^
+||fksnk.com^
+||fkugzbngtla.com^
+||fkyhqtfiopfit.com^
+||fla4n6ne7r8ydcohcojnnor.com^
+||flabbyyolkinfection.com^
+||flagads.net^
+||flagmantensity.com^
+||flagresponsive.com^
+||flagros2sii8fdbrh09.com^
+||flagunforgivablewaver.com^
+||flairadscpc.com^
+||flakecontainsgrill.com^
+||flakesaridphysical.com^
+||flakesrental.com^
+||flakesyet.com^
+||flamboyant-great.pro^
+||flamboyantlionessliability.com^
+||flamebeard.top^
+||flameorganizer.com^
+||flannelbeforehand.com^
+||flapgroundless.com^
+||flapicyconquered.com^
+||flarebania.com^
+||flarytapuyan.com^
+||flashclicks.com^
+||flashesmouches.store^
+||flashnetic.com^
+||flashycontagiouspulverize.com^
+||flashymass.com^
+||flasklimbearlier.com^
+||flaskstationsubsequent.com^
+||flatbarberarrangements.com^
+||flatbedcouthy.space^
+||flatepicbats.com^
+||flatgatherresource.com^
+||flatlyforensics.com^
+||flatteringbabble.com^
+||flatterscandal.com^
+||flattoppugmill.uno^
+||flauchtponzite.com^
+||flavorylenvoi.com^
+||flavourdinerinadmissible.com^
+||flavourforgave.com^
+||flavoursomewherefertilised.com^
+||flavouscris.com^
+||flawenormouslyattractive.com^
+||flawinterestinggranite.com^
+||flaxdoorbell.com^
+||flaxierfilmset.com^
+||flaxlistedleague.com^
+||flaxseedssoenrh4372ojd.com^
+||flbpplqrvzopon.com^
+||flbvmgxpgnblod.com^
+||flcrcyj.com^
+||fldes6fq.de^
+||fldkakjccxhgw.com^
+||flecur.com^
+||fleddatabaseclothing.com^
+||fleddaughter.com^
+||fleeoutspoken.com^
+||fleeredkeg.com^
+||fleeunleashangel.com^
+||flelgwe.site^
+||fleraprt.com^
+||fleshlyzombis.com^
+||flewke.com^
+||flexlinks.com^
+||flhdqtto.com^
+||flickerbridge.com^
+||flickeringintention.pro^
+||fliddercharm.space^
+||fliedridgin.com^
+||fligha.com^
+||flimsymarch.pro^
+||flintedkickers.com^
+||flinthastened.com^
+||flipendangered.com^
+||flipool.com^
+||flixcontentshop.com^
+||flixdot.com^
+||flixtrial.com^
+||flmfcox.com^
+||flneurtoyed.tech^
+||flnxcveswar.com^
+||floatingbile.com^
+||floatingfolly.com^
+||floccischlump.com^
+||flockgallies.com^
+||flocooncuprum.top^
+||flogmacaroni.com^
+||flogunethicalexceedingly.com^
+||flomigo.com^
+||floodeighty.com^
+||floodingdaredsanctuary.com^
+||floodingonion.com^
+||floodtender.com^
+||floppytopo.com^
+||flossyarrayal.life^
+||flouralmighty.com^
+||flowerasunder.com^
+||flowln.com^
+||flowsearch.info^
+||flowwiththetide.xyz^
+||floyme.com^
+||flpfsqgjsarghs.com^
+||flrdra.com^
+||fluemantappall.guru^
+||fluencythingy.com^
+||fluese.com^
+||fluffredelay.com^
+||fluffychair.pro^
+||fluffycodepotc.com^
+||fluffynickname.com^
+||fluffynyasquirell.com^
+||fluid-pie.pro^
+||fluidallobar.com^
+||fluiddejected.com^
+||fluiddisaster.pro^
+||fluidicmarrams.com^
+||fluingdulotic.com^
+||flumesrookie.com^
+||flunkeycaptor.guru^
+||flurrylimmu.com^
+||flushafterwardinteger.com^
+||flushgenuinelydominion.com^
+||fluttermotorway.com^
+||fluvioalkyl.uno^
+||fluxads.com^
+||fluxtowed.com^
+||fluxy.xyz^
+||flyerseminarmaintenance.com^
+||flyingadvert.com^
+||flyingsexul.space^
+||flyingsquirellsmooch.com^
+||flylikeaguy.com^
+||flymob.com^
+||flytechb.com^
+||fmbsknwpvxlhqim.com^
+||fmgcdgnousrww.com^
+||fmheoodt.com^
+||fmkoyjqnxdj.com^
+||fmkqhwrfvs.com^
+||fmorugnmnihrcv.com^
+||fmpub.net^
+||fmsads.com^
+||fmsde0dv2j54.com^
+||fmstigat.online^
+||fmwzfwzxztu.com^
+||fmxfboibrmbf.xyz^
+||fmzjinez.com^
+||fnbauniukvi.com^
+||fnqcbxqvodj.com^
+||fnrbulqws.com^
+||fnrrm2fn1njl1.com^
+||fntphihy.com^
+||fnxkntusnd.com^
+||foadeeph.xyz^
+||foagreen.xyz^
+||foakiwhazoja.com^
+||foalyraisins.com^
+||foamidsputt.com^
+||foamlifeboatriddance.com^
+||foamsomethingrobots.com^
+||foapsovi.net^
+||fobeetch.net^
+||focalex.com^
+||focath.com^
+||focoidsatt.uno^
+||focumu.com^
+||focusedunethicalerring.com^
+||fodderripeskyscraper.com^
+||fodifhvg.com^
+||fodsoack.com^
+||foetusconductfold.com^
+||foflib.org^
+||fogayeown.com^
+||foggytube.com^
+||fogpurply.website^
+||fogramokayed.com^
+||fogtweybq.com^
+||foguroli.pro^
+||fogvnoq.com^
+||foheltou.com^
+||foigtiqvikc.xyz^
+||fokvgxuomu.com^
+||foldedabstinenceconsole.com^
+||foldercamouflage.com^
+||foldertopichoot.com^
+||foldhesitation.com^
+||foldhewiser.com^
+||foldingclassified.com^
+||foldingsuppressedhastily.com^
+||folgam.com^
+||foliosedunlin.guru^
+||foliumumu.com^
+||folkscombine.com^
+||folksordinarilyindoors.com^
+||followedsurvey.com^
+||followeraggregationtraumatize.com^
+||followingexhaustedmicrowave.com^
+||followingtrusted.com^
+||followmalnutritionjeanne.com^
+||followtrusted.com^
+||fomentirrite.top^
+||fometh.com^
+||fomfwrpfklckhr.com^
+||fompouta.xyz^
+||fondautographexecution.com^
+||fondledrunken.com^
+||fondnessbrokestreet.com^
+||fontainsuny.club^
+||fontdeterminer.com^
+||fontenlargemonopoly.com^
+||fontsocketsleepover.com^
+||foodieblogroll.com^
+||foodme.info^
+||foodowingweapon.com^
+||foojimie.net^
+||foolerybonded.com^
+||foolish-devil.pro^
+||foolishcheek.pro^
+||foomaque.net^
+||fooptoat.com^
+||footageaccomplishment.com^
+||footagegift.com^
+||footar.com^
+||footnote.com^
+||footwearrehearsehouse.com^
+||foozledslimsy.guru^
+||fopsoado.com^
+||for-j.com^
+||for-joiyvid.site^
+||for-joiyvids.site^
+||for-joiyvidspics.online^
+||for-joiyvidspics.site^
+||forads.pro^
+||foramendowve.com^
+||foramoongussor.com^
+||forarchenchan.com^
+||foraxewan.com^
+||forbidcrenels.com^
+||forbiddenuneasy.com^
+||forbitnebris.uno^
+||forbledpukras.top^
+||forcealetell.com^
+||forceddenial.com^
+||forcelessgooseberry.com^
+||forcelessgreetingbust.com^
+||forcetwice.com^
+||forearmsunny.com^
+||forearmthrobjanuary.com^
+||forebypageant.com^
+||foregogabbro.life^
+||foregroundmisguideddejection.com^
+||foresawmartins.com^
+||forestcremate.com^
+||forestsbotherdoubted.com^
+||forestsshampoograduate.com^
+||forewordmoneychange.com^
+||forexclub.ru^
+||foreyeshehadtw.com^
+||forfeitsubscribe.com^
+||forflygonom.com^
+||forfrogadiertor.com^
+||forgabrimous.website^
+||forgekeeper.top^
+||forgerylimit.com^
+||forgeryweave.com^
+||forgetinnumerablelag.com^
+||forgiemaulvi.com^
+||forgivenesscourtesy.com^
+||forgivenessimpact.com^
+||forgivenesspeltanalyse.com^
+||forgivenesssweptsupervision.com^
+||forgivepuzzled.com^
+||forgoesthalli.uno^
+||forgoodplay.com^
+||forgotingolstono.com^
+||forjoiyvid.online^
+||forjoiyvid.site^
+||forjoiyvid.space^
+||forjoiyvids.online^
+||forjoiyvids.pics^
+||forjoiyvids.site^
+||forjoiyvids.space^
+||forjoiyvidspics.online^
+||forjoiyvidspics.site^
+||forjoiyvidspics.space^
+||forjoyvidspics.online^
+||forkedearth.pro^
+||forklacy.com^
+||forlumineoner.com^
+||forlumineontor.com^
+||formalitydetached.com^
+||formallythrill.com^
+||formatebackus.website^
+||formatinfo.top^
+||formationwallet.com^
+||formerdrearybiopsy.com^
+||formerlyerotic.com^
+||formerlyparsleysuccess.com^
+||formerlyrelationshipserver.com^
+||formingantecedent.com^
+||formsassistanceclassy.com^
+||formulacountess.com^
+||fornvjvi.com^
+||forooqso.tv^
+||foroorso.com^
+||forprimeapeon.com^
+||forseekvalouwe.com^
+||forseisemelo.top^
+||forsookjaeger.com^
+||forsphealan.com^
+||forsungprosode.com^
+||forsungstoolie.com^
+||fortaillowon.com^
+||fortaiwy.xyz^
+||fortatoneterrow.com^
+||fortdaukthw.hair^
+||forthdigestive.com^
+||forthemoonh.com^
+||fortlachanhecksof.com^
+||fortorterrar.com^
+||fortpavilioncamomile.com^
+||fortpush.com^
+||fortunegossipyattentive.com^
+||fortunescrollstrap.com^
+||fortyflattenrosebud.com^
+||fortyphlosiona.com^
+||forumsotiatry.com^
+||forunfezanttor.com^
+||forworksyconus.com^
+||forwrdnow.com^
+||forzubatr.com^
+||fosiecajeta.com^
+||fositeth.com^
+||fossensy.net^
+||fossilascension.com^
+||fossilreservoirincorrect.com^
+||fostereminent.com^
+||fotoompi.com^
+||fotsaulr.net^
+||foudocho.com^
+||foughtboothunrest.com^
+||foughtcirculation.com^
+||fouharoa.com^
+||foulageyamshik.life^
+||fouleewu.net^
+||foullypellate.space^
+||foundedoaksouthern.com^
+||foundfroshelves.com^
+||fountaingreat.com^
+||fouptebu.net^
+||fourteenthcongratulate.com^
+||fourwhenstatistics.com^
+||foutoanaugab.com^
+||foutyoxyaena.website^
+||foviyii.com^
+||foxpush.io^
+||foxqck.com^
+||foxypp.com^
+||fpbvfwjwrayphgs.com^
+||fpdbccngiujp.com^
+||fpgedsewst.com^
+||fphbwyonnk.com^
+||fpiljsxrchc.com^
+||fpnpmcdn.net^
+||fpukxcinlf.com^
+||fpybtxqfywreqhb.xyz^
+||fqanulluixeis.com^
+||fqdwrgbbkmlbh.com^
+||fqeqbpacetlols.com^
+||fqfjmojnjslr.com^
+||fqkwn.com^
+||fqnyvwyplel.com^
+||fqpxjydyj.com^
+||fqskuzqwpgu.com^
+||fqtfwulmcdw.com^
+||fqybolmt.com^
+||fqygyfvmz.com^
+||fragmenteasygoingmass.com^
+||fragmentexpertisegoods.com^
+||fragrancepneumoniatinker.com^
+||frail-lock.pro^
+||frailcockroachconfiguration.com^
+||frailshootingexamination.com^
+||framentyder.pro^
+||frameworkdeserve.com^
+||francetobaccotrading.com^
+||franciatirribi.com^
+||francisunbeget.com^
+||francoistsjacqu.info^
+||franecki.net^
+||franeski.net^
+||frangh.com^
+||franklyatmosphericanniversary.com^
+||frap.site^
+||frapsguardo.com^
+||frarybjrbnlfd.com^
+||frarychazan.com^
+||frauck.com^
+||fraudholdingpeas.com^
+||frayvehemently.com^
+||frbyvuxzvmqpb.com^
+||frcpth.xyz^
+||frdjs-2.co^
+||freakisharithmetic.com^
+||freakishmartyr.com^
+||freakspybad.com^
+||fredblclronvyt.com^
+||fredmoresco.com^
+||free-datings.com^
+||free-domain.net^
+||freebiesurveys.com^
+||freeconverter.io^
+||freecounter.ovh^
+||freecounterstat.ovh^
+||freedatinghookup.com^
+||freeevpn.info^
+||freeiphone.info^
+||freeskreen.com^
+||freesoftwarelive.com^
+||freestar.io^
+||freetrckr.com^
+||freewayadventureexactly.com^
+||freezeanything.com^
+||freezerlarking.top^
+||freezerpiledoperational.com^
+||freezescrackly.com^
+||freezeskaikara.com^
+||freezinghogreproach.com^
+||fregtrsatnt.com^
+||freing.com^
+||freiodablazer.com^
+||frenchequal.pro^
+||frencheruptionshelter.com^
+||frenchhypotheticallysubquery.com^
+||frenth.com^
+||frequentanalyst.com^
+||frequentstocking.com^
+||fresh8.co^
+||freshannouncement.com^
+||freshendueshealth.com^
+||freshenrubpan.com^
+||freshleads.pro^
+||freshpops.net^
+||fresnobench.com^
+||fretsawlekanai.com^
+||freutz.com^
+||freychang.fun^
+||freyrclogs.com^
+||frfetchme.com^
+||frfhhcxeqkubk.xyz^
+||frhbrkjgerikm2f8mjek09.com^
+||fri4esianewheywr90itrage.com^
+||fricacedisgulf.uno^
+||frictionliteral.com^
+||frictiontypicalsecure.com^
+||fridayarched.com^
+||fridaylazy.com^
+||fridaypatnod.com^
+||fridgejakepreposition.com^
+||fridgestretched.com^
+||friendlyincompetencepicked.com^
+||friendshipmale.com^
+||frightening-crack.pro^
+||frightening-lesson.pro^
+||frighteningship.com^
+||frightysever.org^
+||frilly-number.pro^
+||fringesdurocs.com^
+||fripth.xyz^
+||friskbiscuit.com^
+||fristminyas.com^
+||fritdugs.com^
+||frittercommittee.com^
+||fritue.com^
+||frivolous-copy.pro^
+||frizingbarnful.com^
+||frizzerfoehns.digital^
+||frkyeaoowaurvqt.com^
+||frockritequell.com^
+||frockswatpelt.com^
+||frocogue.store^
+||frogmenislets.uno^
+||frogrugby.com^
+||frolicaugmentcreeper.com^
+||frolicbrook.com^
+||frolnk.com^
+||fromjoytohappiness.com^
+||fromoffspringcaliber.com^
+||frondewame.com^
+||fronthlpr.com^
+||fronthlpric.com^
+||frookshop-winsive.com^
+||frosty-cigarette.com^
+||frosty-criticism.pro^
+||frothadditions.com^
+||frothsubmarine.com^
+||frownfirsthand.com^
+||frrdlass.com^
+||frstlead.com^
+||frtya.com^
+||frtyd.com^
+||frugalitymassiveoldest.com^
+||frugalitypresume.com^
+||frugalpurpose.pro^
+||frugalrushcap.com^
+||fruins.com^
+||fruitfulgreenhousefacility.com^
+||fruitfulpot.com^
+||frustrationfungus.com^
+||frwslristg.com^
+||fryawlauk.com^
+||fsalfrwdr.com^
+||fscfbfrof.com^
+||fsfwetubfgd.com^
+||fsobjvtkew.com^
+||fsotrmshy.com^
+||fsrtqexvtshh.com^
+||fstsrv1.com^
+||fstsrv2.com^
+||fstsrv3.com^
+||fstsrv4.com^
+||fstsrv5.com^
+||fswvlswhgvjh.xyz^
+||fsxemowhrx.com^
+||ftblltrck.com^
+||ftd.agency^
+||ftdvpextzx.com^
+||ftfssuhryrcmip.com^
+||ftheownounci.com^
+||fthkmwrkqg.com^
+||ftigholm.site^
+||ftjcfx.com^
+||ftklr.com^
+||ftltbijc.com^
+||ftmhsrrk.com^
+||ftte.fun^
+||ftte.xyz^
+||fttjyji.com^
+||ftuaxqokbxow.com^
+||ftv-publicite.fr^
+||ftvszarpfvecjf.com^
+||ftwpcn.com^
+||fuchsinthough.website^
+||fuck.hentaitimes.com^
+||fuckmehd.pro^
+||fuckthat.xyz^
+||fucoustittup.uno^
+||fudeidsoanadthe.info^
+||fudsrakh.com^
+||fuelcompatibleblaspheme.com^
+||fuffscreigh.website^
+||fugcgfilma.com^
+||fugleparges.top^
+||fugles.net^
+||fuidsbzqlhud.com^
+||fukpgbwf.com^
+||fulabachu.com^
+||fulbe-whs.com^
+||fulfilleddetrimentpot.com^
+||fulgidbirls.life^
+||fulhamscaboose.website^
+||fulheaddedfea.com^
+||fullagearnut.com^
+||fullseleatic.top^
+||fulltraffic.net^
+||fullvids.online^
+||fullvids.space^
+||fullwhile.pro^
+||fullycoordinatecarbonate.com^
+||fullypoignantcave.com^
+||fulmenbosser.com^
+||fulvenebocca.com^
+||fumarinpest.com^
+||fumersoctoon.com^
+||fummkxa.com^
+||funcats.info^
+||funconsistency.com^
+||functionfreaklacerate.com^
+||functionsprecision.com^
+||fundsbe.com^
+||fungianjaggier.digital^
+||fungus.online^
+||funkiaswheep.website^
+||funklicks.com^
+||funkydeplane.com^
+||funlife.info^
+||funnwphcfijvmd.xyz^
+||funnysack.com^
+||funnyvacant.com^
+||funoriblithe.space^
+||funsoups.com^
+||funtoday.info^
+||furded.com^
+||furiosocomique.com^
+||furivaedangler.digital^
+||furlsstealbilk.com^
+||furnacemanagerstates.com^
+||furnishedleggysoak.com^
+||furnishedsalonherring.com^
+||furorshahdon.com^
+||furrowparabledisplay.com^
+||furryjoseph.com^
+||fursfeeblegloria.com^
+||furstraitsbrowse.com^
+||furtherestimatebereave.com^
+||furtivelybleedlyrics.com^
+||fuse-cloud.com^
+||fuseamazementavow.com^
+||fuseplatform.net^
+||fusilpiglike.com^
+||fusionads.net^
+||fusionwishful.com^
+||fusoidactuate.com^
+||fussy-highway.pro^
+||fussytarbet.space^
+||futileharrystephen.com^
+||futilereposerefreshments.com^
+||futill.com^
+||future-hawk-content.co.uk^
+||futureads.io^
+||futuredistracting.com^
+||futureresiduals.com^
+||futureus.com^
+||fuvmtqiwhaffnc.com^
+||fuwkpghpln.com^
+||fuyytjuopkikl.com^
+||fuzakumpaks.com^
+||fuzeelamby.com^
+||fuzinghummaul.com^
+||fuzzywardshoplifting.com^
+||fvcdduqg.com^
+||fvcwqkkqmuv.com^
+||fvgxfupisy.com^
+||fvzhenljkw.com^
+||fwbntw.com^
+||fwmrm.net^
+||fwnowvgk.com^
+||fwrnmmvxsfcrcqk.com^
+||fwsoviw.com^
+||fwukoulnhdlukik.info^
+||fwwxanjyjlu.xyz^
+||fxdepo.com^
+||fxgoaeplst.com^
+||fxiuuaa.com^
+||fxrbsadtui.com^
+||fybkhsfntvuyat.com^
+||fydczmk.com^
+||fyglovilo.pro^
+||fyhgvfmryxprn.xyz^
+||fykdxpdnhy.com^
+||fyvdxqufaxkli.com^
+||fzbjzlwcnd.com^
+||fzfcrqlwph.com^
+||fztmn.top^
+||g-statistic.com^
+||g0gr67p.de^
+||g0wow.net^
+||g2440001011.com^
+||g2546417787.com^
+||g2921554487.com^
+||g2afse.com^
+||g33ktr4ck.com^
+||g5fzq2l.com^
+||g5rillh2awn8.com^
+||g91games.com^
+||ga-ads.com^
+||gacoufti.com^
+||gadbytyhmybnir.com^
+||gadgetnews.one^
+||gadsabs.com^
+||gadsatz.com^
+||gadsims.com^
+||gadskis.com^
+||gadskiz.com^
+||gadslife.com^
+||gadslimz.com^
+||gadspms.com^
+||gadspmz.com^
+||gadssystems.com^
+||gadzwhglnxhbjs.com^
+||gaegwdkirfcgp.com^
+||gaelsdaniele.website^
+||gaesataigal.uno^
+||gafmajosxog.com^
+||gaghygienetheir.com^
+||gagpetwet.com^
+||gahonnlsh.com^
+||gaibjhicxrkng.xyz^
+||gaigroak.com^
+||gaijiglo.net^
+||gaimofup.com^
+||gaimoupy.net^
+||gaiphaud.xyz^
+||gaisteem.net^
+||gaitheed.com^
+||gaitoath.com^
+||galaare.com^
+||galachr.com^
+||galacticmenueasier.com^
+||galairo.com^
+||galajou.com^
+||galaks.io^
+||galamis.com^
+||galanasorra.com^
+||galaxypush.com^
+||galaxyvandas.website^
+||galeaeevovae.com^
+||galibicalvous.guru^
+||galjwnhotubfg.com^
+||galliestorpify.com^
+||gallonranchwhining.com^
+||galopelikeantelope.com^
+||galoreshoodlum.com^
+||galotop1.com^
+||galsajoo.xyz^
+||galumbor.com^
+||gam3ah.com^
+||gamadspro.com^
+||gambar123.com^
+||gamblingliquidate.com^
+||gambolspumicer.com^
+||gameads.io^
+||gameengagedthen.com^
+||gamersad.com^
+||gamescarousel.com^
+||gamescdnfor.com^
+||gamesims.ru^
+||gamesrevenu24.com^
+||gamesrevenue.com^
+||gamestar.lol^
+||gamesyour.com^
+||gamez4tops.com^
+||gamgladthereis.com^
+||gamglossae.com^
+||gaminesmuletta.com^
+||gaming-adult.com^
+||gamingadlt.com^
+||gamingonline.top^
+||gammabendlet.website^
+||gammae.com^
+||gammamkt.com^
+||gamondcaingin.guru^
+||gandmotivatin.info^
+||gandrad.org^
+||gangedapneal.digital^
+||gangsterflyerillegimateillegimate.com^
+||gangstervideoethnic.com^
+||gangueswipes.top^
+||ganismpro.com^
+||ganizationsuc.info^
+||gannett.gcion.com^
+||gapcask.com^
+||gapscult.com^
+||gaqscipubhi.com^
+||gaquxe8.site^
+||garagesewe.com^
+||garbslens.com^
+||gardeningraritysometime.com^
+||gardeningreact.com^
+||gardoult.com^
+||gardourd.com^
+||gargantuan-menu.pro^
+||garglecommunicate.com^
+||garglingcorny.com^
+||gargocmy.com^
+||gargoowi.com^
+||garibamarmose.com^
+||garior.com^
+||garlandcheese.com^
+||garlandshark.com^
+||garmentsdraught.com^
+||garnetsnails.com^
+||garosesia.com^
+||garotas.info^
+||garouspostern.com^
+||garretcanvasseruption.com^
+||garretram.com^
+||garricketiam.website^
+||gaseous-power.com^
+||gaseousarmy.pro^
+||gasolinerent.com^
+||gaspbandy.com^
+||gassingunspicy.guru^
+||gastersliddry.com^
+||gastingitea.com^
+||gasylicyg1e8n6po.com^
+||gatecitizenswindy.com^
+||gatetocontent.com^
+||gatetodisplaycontent.com^
+||gatetotrustednetwork.com^
+||gatewaydissolvedexemplify.com^
+||gatewayimpossibilitypursue.com^
+||gatols.com^
+||gatrmbvfm.com^
+||gaucysalamo.life^
+||gaudetehoazin.com^
+||gaudfulthrum.website^
+||gaufaine.com^
+||gaufferlarry.com^
+||gaugeadroitself.com^
+||gaujephi.xyz^
+||gaukluthern.website^
+||gaulshiite.life^
+||gaumishhipshot.com^
+||gaumoata.com^
+||gaupingjaguar.com^
+||gaupsaur.xyz^
+||gausic.com^
+||gautaree.com^
+||gauthawhum.com^
+||gauvaiho.net^
+||gauzedisparage.com^
+||gauzon.com^
+||gavnogeeygaika.com^
+||gayadpros.com^
+||gayalgenipa.digital^
+||gayuxhswva.com^
+||gazati.com^
+||gazeesaucier.com^
+||gazeesoter.com^
+||gbbgaiuqq.com^
+||gbfgvzfcjfs.com^
+||gbfwqsakvaysygn.xyz^
+||gblcdn.com^
+||gbpkmltxpcsj.xyz
+||gcfynlyvab.com^
+||gckkxvpbhhlx.com^
+||gcomfbzrsa.com^
+||gcotipdaxatp.com^
+||gcqaxqowifrf.com^
+||gcruperparverew.xyz^
+||gcukphxabcifwlo.com^
+||gcuylkyvi.com^
+||gcyzgld.com^
+||gdasaasnt.com^
+||gdecordingholo.info^
+||gdjejefdqthxmy.xyz^
+||gdmconvtrck.com^
+||gdmdigital.com^
+||gdmgsecure.com^
+||gdwfhelbww.com^
+||gearedftnerr.com^
+||geasefloria.com^
+||geazjxqwbr.com^
+||gebadu.com^
+||gecl.xyz^
+||gecpbt.com^
+||geddshippy.com^
+||gedspecificano.com^
+||geechaid.xyz^
+||geedoovu.net^
+||geeksundigne.com^
+||geerairu.net^
+||geetaury.net^
+||geethoap.com^
+||geijnyklkdy.xyz^
+||geiouifksh.xyz^
+||geiozdtpssgt.com^
+||geiybze.com^
+||gejeegho.net^
+||gekroome.com^
+||gelhp.com^
+||gelidoctans.digital^
+||gemlocomotivemid.com^
+||gemorul.com^
+||gempeety.com^
+||gempoussee.com^
+||gen-ref.com^
+||genaumsa.net^
+||genbalar.com^
+||generalebad.xyz^
+||generalizebusinessman.com^
+||generalizeruffleembroidery.com^
+||generallyrefinelollipop.com^
+||generateplunderstrew.com^
+||generatorgenuinelyupcoming.com^
+||genericlink.com^
+||genesismedia.com^
+||geneticocuby.com^
+||genetorhebe.website^
+||genfpm.com^
+||gength.com^
+||geniad.net^
+||genialsleptworldwide.com^
+||genieedmp.com^
+||genieessp.com^
+||genishury.pro^
+||geniusbanners.com^
+||geniusdexchange.com^
+||geniusonclick.com^
+||geniusunkirk.space^
+||genomicincises.digital^
+||genreobrien.digital^
+||gentlecountries.com^
+||gentlementoplessrest.com^
+||gentlynudegranny.com^
+||genued.com^
+||genuinechancellor.com^
+||genuinelybruises.com^
+||genuinesuperman.com^
+||genystopiary.com^
+||geoaddicted.net^
+||geodaljoyless.com^
+||geodesyhoptree.com^
+||geoffreyquitimpression.com^
+||geoidsskift.guru^
+||geoinventory.com^
+||geolsoul.life^
+||geometryworstaugust.com^
+||georgianabamboorehearse.com^
+||geotrkclknow.com^
+||geraflows.com^
+||geratedbawled.com^
+||gereacumina.com^
+||gerefadelves.com^
+||germanplumpcries.com^
+||germanyretorteddonate.com^
+||germinatecascade.com^
+||germinateensue.com^
+||geruksom.net^
+||gervasdonatee.guru^
+||gessoesbeavers.uno^
+||get-browseprotection.com^
+||get-here-click.xyz^
+||get-me-wow.
+||get-my-prize-n1w.live^
+||get-partner.life^
+||get-statics.live^
+||get-things-done.net^
+||get2m5sgstohne.com^
+||getadx.com^
+||getallt1.com^
+||getalltraffic.com^
+||getapo.com^
+||getarrectlive.com^
+||getbestpolojpob.org^
+||getbiggainsurvey.top^
+||getbrowbeatgroup.com^
+||getcdnpix.name^
+||getconatyclub.com^
+||getels.com^
+||getgx.net^
+||getinstant.website^
+||getjad.io^
+||getmygateway.com^
+||getnee.com^
+||getnewsfirst.com^
+||getoptad360.com^
+||getoverenergy.com^
+||getp.xyz^
+||getpdaiddaily.com^
+||getpopunder.com^
+||getrunbestlovemy.info^
+||getscriptjs.com^
+||getsharedstore.com^
+||getshowads.com^
+||getsmartyapp.com^
+||getsomespecials.com^
+||getstart3d12.monster^
+||getsthis.com^
+||getsurv2you.net^
+||getsurv2you.org^
+||getsurv4you.org^
+||getter.cfd^
+||gettine.com^
+||gettingcleaveassure.com^
+||gettingcoolprizes.info^
+||gettingtoe.com^
+||gettjohytn.com^
+||gettraffnews.com^
+||getupwoleai.com^
+||getxml.org^
+||getyourbitco.in^
+||getyoursoft.ru^
+||getyousoft.ru^
+||geviet.com^
+||gevmrjok.com^
+||gfdrkskillso.xyz^
+||gfhkcfdqaongo.com^
+||gfkhapiuxjkspbq.xyz^
+||gfnfzleduflvkt.com^
+||gforanythingam.com^
+||gfprtdrgcyuxc.com^
+||gfsdloocn.com^
+||gfstrck.com^
+||gftkofhnz.com^
+||gfxkxbai.com^
+||ggedandoscarr.xyz^
+||ggetsurv4youu.com^
+||gggetsurveey.com^
+||ggjcswb4rln4.com^
+||ggkk.xyz^
+||gglx.me^
+||ggrawwbi.xyz^
+||ggsbjzyo.com^
+||ggsfq.com^
+||ggxcoez.com^
+||ggxyyalrj.com^
+||ggzkgfe.com^
+||ghastlyoffer.com^
+||ghastlyrejectionrest.com^
+||ghattiwongsky.com^
+||ghatwalplunker.live^
+||ghentmidweek.com^
+||gheraosonger.com^
+||ghethe.com^
+||ghetic.com^
+||ghettoschanse.com^
+||ghisiva.top^
+||ghjhucekiywqrk.com^
+||ghostedridotto.com^
+||ghostnewz.com^
+||ghrain.com^
+||ghsheukwasana.info^
+||ghtry.amateurswild.com^
+||ghttohimhedra.cc^
+||ghyhwiscizax.com^
+||giantaffiliates.com^
+||gianwho.com^
+||gibaivoa.com^
+||gibeleftyeuro.com^
+||giblithakur.website^
+||giboxdwwevu.com^
+||gibsonorly.life^
+||gicoxxmeostnxw.xyz^
+||gidakcalgbc.com^
+||giddinessrefusal.com^
+||giddysystemrefers.com^
+||gidoulie.com^
+||giftedbrevityinjured.com^
+||giftedhazelsecond.com^
+||gifthandymanshortage.com^
+||gifttopsurvey.top^
+||gigaads.xyz^
+||gigabitadex.com^
+||gigabitlionism.com^
+||gigacpmserv.com^
+||giggedguddle.com^
+||giggledgingle.com^
+||gigmantomjohn.guru^
+||gihehazfdm.com^
+||gikefa.uno^
+||gilarditus.com^
+||gilcxqgcbebbo.xyz^
+||gilinstruggle.org^
+||gilledwebeye.life^
+||gillstaught.com^
+||gillynn.com^
+||gilrauci.net^
+||gimme-promo.com^
+||gimohhfzvmpdt.com^
+||gimpingurubu.life^
+||gimwcpketr.com^
+||gindeoedbadas.com^
+||ginfohpg.com^
+||gingercompute.com^
+||ginningsteri.com^
+||ginnyclairvoyantapp.com^
+||ginnycleanedfeud.com^
+||ginnymulberryincompetent.com^
+||ginnyweakeland.info^
+||ginsicih.xyz^
+||gipeucn.icu^
+||gipostart-1.co^
+||gippingrefont.com^
+||gipsiesthyrsi.com^
+||giqaanwmqwowemt.com^
+||giraffedestitutegigantic.com^
+||girdedmays.life^
+||girdleunfamiliartraffic.com^
+||girl-51-w.com^
+||girl7y.com^
+||girlbuffalo.com^
+||girliewinding.com^
+||girlsglowdate.life^
+||gishejuy.com^
+||gistblemishparking.com^
+||gitajwl.com^
+||gitoku.com^
+||giufjcfjdv.com^
+||givaphofklu.com^
+||giveesqtnq.com^
+||givemysoft.ru^
+||givenconserve.com^
+||givesboranes.com^
+||givide.com^
+||givill.com^
+||giving-weird.pro^
+||givingboyfriend.pro^
+||givingsol.com^
+||gixiluros.com^
+||gixpoosh.com^
+||gjfeblixctsojx.xyz^
+||gjigle.com^
+||gjjvjbe.com^
+||gjkame6.com^
+||gjknyqmvrluao.com^
+||gjonfartyb.com^
+||gjpcwjzzc.com^
+||gjrhqyc.com^
+||gjwos.org^
+||gkencyarcoc.com^
+||gkmohklyjyh.com^
+||gkoutpips.com^
+||gkpblxyup.xyz^
+||gkpvuyrgbbzu.com^
+||gkrtmc.com^
+||gl-cash.com^
+||gla63a4l.de^
+||glacierglorifybeetroot.com^
+||glaciergrimly.com^
+||gladiol9us10.com^
+||gladlycreator.com^
+||gladthereis.org^
+||glaidsurteeg.com^
+||glaimtug.com^
+||glaingoo.xyz^
+||glainsee.com^
+||glaivoun.net^
+||glaiweer.xyz^
+||glaiwhee.net^
+||glaixich.net^
+||glaksads.net^
+||glalsoow.com^
+||glamorousdescend.com^
+||glamorousmixture.com^
+||glamtina.com^
+||glancingambulance.com^
+||glareart.com^
+||glargoun.uk^
+||glaringregister.com^
+||glassesoftruth.com^
+||glassmilheart.com^
+||glaubuph.com^
+||glaughoa.xyz^
+||glaultoa.com^
+||glaunsil.xyz^
+||glaunsun.net^
+||glaurtas.com^
+||glauvoob.com^
+||glauxoaw.xyz^
+||glaxaukr.net^
+||glazegha.com^
+||glazilyvenues.com^
+||glbtrk.com^
+||gleagainedam.info^
+||gleamcalumnygeneralize.com^
+||gleamcoupgently.com^
+||gleaminsist.com^
+||glecmaim.net^
+||gledycedule.life^
+||gleebsoa.xyz^
+||gleefulwaflib.com^
+||gleegloo.net^
+||gleejoad.net^
+||gleemsomto.com^
+||gleeneep.com^
+||gleetchisurvey.top^
+||gleetedbunged.uno^
+||glefeesh.net^
+||glegreel.xyz^
+||glekrush.com^
+||glelroum.com^
+||gleneditor.com^
+||glenprejudice.com^
+||glenseized.com^
+||glepteel.xyz^
+||glersakr.com^
+||glersooy.net^
+||glerteeb.com^
+||glestoab.com^
+||glevoloo.com^
+||gleydegulled.com^
+||glibsols.net^
+||gliceebe.xyz^
+||gliderpured.com^
+||gliffyfreaked.com^
+||gliksekr.net^
+||glimpsemankind.com^
+||glimtaul.xyz^
+||glimtors.net^
+||glirsoss.com^
+||glishais.net^
+||glisteningproject.pro^
+||glitteringbrush.pro^
+||glitteringinextricabledemise.com^
+||glitteringobsessionchanges.com^
+||glivupegn.com^
+||glixaing.com^
+||glizauvo.net^
+||glleadflxvn.com^
+||glo-glo-oom.com^
+||gloacmie.com^
+||gloacmug.net^
+||gloaftil.com^
+||gloagaus.xyz^
+||gloalrie.com^
+||gloamucm.xyz^
+||gloansad.com^
+||gloaphoo.net^
+||gloavets.xyz^
+||globaladblocker.com^
+||globaladmedia.com^
+||globaladmedia.net^
+||globaladsales.com^
+||globaladv.net^
+||globalinteractive.com^
+||globaloffers.link^
+||globalsuccessclub.com^
+||globaltakeoff.net^
+||globaltraffico.com^
+||globeofnews.com^
+||globeshyso.com^
+||globulespooner.space^
+||globwo.online^
+||glochatuji.com^
+||glocmauy.xyz^
+||glogoowo.net^
+||glokta.info^
+||glomocon.xyz^
+||gloodain.net^
+||gloodsie.com^
+||gloogeed.xyz^
+||gloogruk.com^
+||gloolrey.com^
+||gloomfabricgravy.com^
+||gloomseb.net^
+||gloonseetaih.com^
+||gloophoa.net^
+||gloorsie.com^
+||glootang.net^
+||gloovids.com^
+||gloriahell.com^
+||glorialoft.com^
+||gloriarefreshsuspected.com^
+||gloriespiuri.com^
+||glorifyfactor.com^
+||glorifyraytreasurer.com^
+||gloriousexternal.com^
+||glostsbluntie.digital^
+||gloudsel.net^
+||gloufteglouw.com^
+||gloumsee.net^
+||gloumsie.net^
+||glouseer.net^
+||gloushekra.com^
+||gloustoa.net^
+||glouxaih.net^
+||gloveroadmap.com^
+||glovesusage.com^
+||glowdittay.uno^
+||glowdot.com^
+||glowingnews.com^
+||glowingramblelobes.com^
+||gloxeept.com^
+||gloytrkb.com^
+||gloywin04.com^
+||glpctwalwq.com^
+||glpeaoauwevlns.com^
+||glquynodiflhw.com^
+||glssp.net^
+||gltjtkqoxhbgvlx.com^
+||glueluthern.digital^
+||gluenasal.com^
+||glufoksy.com^
+||glugherg.net^
+||glugreez.com^
+||glukropi.com^
+||glum-bake.pro^
+||glumdrawer.com^
+||glumtitu.net^
+||gluondockize.digital^
+||glurdoat.com^
+||glursihi.net^
+||gluteinavarch.com^
+||gluttonybrand.com^
+||gluwhoas.com^
+||glvhvesvnp.com^
+||glxrubskce.com^
+||glxtest.site^
+||glycylsrapped.com^
+||glyphsmahajan.com^
+||glyphwursts.digital^
+||gmads.net^
+||gmcoanceqoymws.com^
+||gme-trking.com^
+||gmihupgkozf.com^
+||gml-grp.com^
+||gmlebdifvxzzl.com^
+||gmogccmnp.com^
+||gmpfruktfatpi.com^
+||gmxvmvptfm.com^
+||gmyze.com^
+||gmzdaily.com^
+||gnashedmaypops.digital^
+||gnathicrugal.top^
+||gnditiklas.com^
+||gngsrgaza.com^
+||gngtvwjo.com^
+||gnjxesyfensbh.com^
+||gnkgvjxunmwc.com^
+||gnkljnfbd.com^
+||gnksplbu.com^
+||gnojicfj.com^
+||gnosticwinks.com^
+||gnqtageoyy.com^
+||gnvpmftcgp.com^
+||go-rillatrack.com^
+||go-srv.com^
+||go2.global^
+||go2affise.com^
+||go2app.org^
+||go2jump.org^
+||go2media.org^
+||go2offer-1.com^
+||go2oh.net^
+||go2rph.com^
+||go2speed.org^
+||go6shde9nj2itle.com^
+||goaciptu.net^
+||goads.pro^
+||goadserver.com^
+||goadx.com^
+||goaffmy.com^
+||goagloow.xyz^
+||goahouma.xyz^
+||goajuzey.com^
+||goalebim.com^
+||goaleedeary.com^
+||goaloozy.xyz^
+||goalperusevicinity.com^
+||goaodaj.com^
+||goaserv.com^
+||goashais.com^
+||goasrv.com^
+||goatpoxbutters.top^
+||goavoafu.com^
+||gobacktothefuture.biz^
+||gobanspagodas.com^
+||gobbinsantos.store^
+||gobetweengroan.com^
+||gobetweensmartlyattic.com^
+||gobiaesker.uno^
+||gobicyice.com^
+||gobitta.info^
+||goblocker.xyz^
+||gobmodfoe.com^
+||gocolow.com^
+||gocomparisongarrison.com^
+||godating.pw^
+||goddamnhowks.tech^
+||goddesslevityark.com^
+||godlessabberant.com^
+||godpvqnszo.com^
+||godspeaks.net^
+||godwitescrol.com^
+||goelbotony.com^
+||goelismidryl.com^
+||goesdeedinsensitive.com^
+||goethejauks.com^
+||goeticviola.com^
+||goevyqdlo.xyz^
+||gofecuhxltcqj.xyz^
+||gofenews.com^
+||gogglemessenger.com^
+||gogglerespite.com^
+||goghen.com^
+||gogord.com^
+||gohere.pl^
+||gohillgo.com^
+||gohznbe.com^
+||goinformer.com^
+||goingbicyclepolitically.com^
+||goingprayer.com^
+||goingtoothachemagician.com^
+||gokedoas.xyz^
+||golbxjhofipyv.com^
+||gold2762.com^
+||goldalternateattributed.com^
+||golden-gateway.com^
+||goldensmith.top^
+||goldfishsewbruise.com^
+||goldforeyesh.org^
+||goldm9.com^
+||goldnostree.live^
+||goldtroopsdetached.com^
+||golfchapah.space^
+||golochmenacer.com^
+||goloshyacal.space^
+||gomain.pro^
+||gomain2.pro^
+||gomastabrat.com^
+||gombointill.com^
+||gomnlt.com^
+||gomusic.info^
+||gondwrists.life^
+||gonebyalongt.com^
+||gonews2.com^
+||gooblesdd.com^
+||good4younow.club^
+||goodadvert.ru^
+||goodbusinesspark.com^
+||goodgamesmanship.com^
+||goodnesslocusemphasize.com^
+||goodnightrunaway.com^
+||goods2you.net^
+||goodsscoop.com^
+||goodweet.xyz^
+||goodyflicks.digital^
+||goodyhitherto.com^
+||googleapi.club^
+||googleseo.life^
+||googletagservices.com^
+||goohimom.net^
+||goomaphy.com^
+||gooods4you.com^
+||goosebomb.com^
+||goosetension.com^
+||goostist.com^
+||goourl.me^
+||goozabooz.com^
+||gophykopta.com^
+||goplayhere.com^
+||gopusher1.com^
+||gopushka1.com^
+||gopushmajor1.com^
+||goralogplumach.com^
+||goralogsizers.store^
+||goraps.com^
+||gordiustouse.website^
+||goredi.com^
+||gorgecollisioncovering.com^
+||gorgeousremoveplead.com^
+||gorgetmobiles.com^
+||gorillaalbify.com^
+||gorillasneer.com^
+||gorillatraffic.xyz^
+||gorillatrk.com^
+||gorillatrking.com^
+||gorkt.com^
+||gororn.com^
+||gorskprof2it8og09.com^
+||goshbiopsy.com^
+||gositego.live^
+||gosoftwarenow.com^
+||gossipcase.com^
+||gossipfinestanalogy.com^
+||gossipprotectioncredentials.com^
+||gossipsize.com^
+||got-to-be.com^
+||gotchaih.com^
+||goteat.xyz^
+||gotherresethat.com^
+||gotibetho.pro^
+||gotinbode.com^
+||gotinbode.xyz^
+||gotjobbs.com^
+||gotohouse1.club^
+||gotrackier.com^
+||gotwakinrollet.xyz^
+||goucejugra.com^
+||goufldsbktds.com^
+||goundouskirty.com^
+||goupeecy.com^
+||gouramibizones.com^
+||gourdeunquote.website^
+||gourgoldpieceso.com^
+||gouryvouster.com^
+||gousauhu.xyz^
+||gousouse.com^
+||goutee.top^
+||gouzaich.com^
+||govbusi.info^
+||governessmagnituderecoil.com^
+||governorpicklestraight.com^
+||governorretired.com^
+||gowgycwrfbukst.com^
+||gownletinfamy.com^
+||gowpengagster.com^
+||gowspow.com^
+||gpcrn.com^
+||gpiyzwt.com^
+||gpnjknuqas.xyz^
+||gporkecpyttu.com^
+||gpozmocm.com^
+||gppsusbb.com^
+||gpsecureads.com^
+||gpwpaqnxpwhqufz.sbs^
+||gpylmwtjiy.com^
+||gqaecrxbj.com^
+||gqcmqihonrx.com^
+||gqilaywrqy.com^
+||gqtnjdflx.com^
+||gqubkbuinx.com^
+||gr8y7z1xaq30.com^
+||grabhastened.com^
+||graboverhead.com^
+||gracedschelly.com^
+||gracefulbayonetlukewarm.com^
+||gracelessaffected.com^
+||gracelesssolicitor.com^
+||graceofnoon.com^
+||gracesmallerland.com^
+||grachompoa.com^
+||grackoceesto.com^
+||gradecastlecanadian.com^
+||graduallyassist.com^
+||graduatedgroan.com^
+||graduatewonderentreaty.com^
+||grafzen.com^
+||grahamsbandbox.com^
+||graibsah.xyz^
+||grailtie.xyz^
+||grainlyricalamend.com^
+||grainsprogenymonarchy.com^
+||grainsslaughter.com^
+||grairgos.net^
+||grairsoa.com^
+||grairtoorgey.com^
+||graivaik.com^
+||graizoah.com^
+||graizout.net^
+||grajag.com^
+||grajoazy.com^
+||grakroup.com^
+||graksaid.net^
+||gralliczenana.top^
+||grammarselfish.com^
+||granct.com^
+||grandclemencydirt.com^
+||granddadfindsponderous.com^
+||granddaughterrepresentationintroduce.com^
+||grandeursway.com^
+||grandfathercancelling.com^
+||grandlay.pro^
+||grandmotherfoetussadly.com^
+||grandnerve.pro^
+||grandocasino.com^
+||grandsupple.com^
+||grangilo.net^
+||grannyaudiblypriceless.com^
+||grannyblowdos.com^
+||grannysteer.com^
+||grannytelevision.com^
+||grantedpigsunborn.com^
+||granular-picture.pro^
+||grapefruitprecipitationfolded.com^
+||graphicskiddingdesire.com^
+||graphnitriot.com^
+||grapiercaproyl.com^
+||grappamacram.com^
+||grasshopperprudencecondiment.com^
+||grasutie.net^
+||grataeraghu.digital^
+||gratertiedbubble.com^
+||gratificationdesperate.com^
+||gratifiedmatrix.com^
+||gratunsung.life^
+||graucoay.net^
+||grauglak.com^
+||grauhoat.xyz^
+||graungie.net^
+||graungig.xyz^
+||grauroocm.com^
+||grauwaiw.com^
+||gravatkitysol.com^
+||graveuniversalapologies.com^
+||gravicmessiah.space^
+||gravidtrekker.com^
+||gravityharryexperienced.com^
+||grawhoonrdr.com^
+||grayishkabard.uno^
+||great-spring.pro^
+||greatappland.com^
+||greataseset.org^
+||greatbonushere.life^
+||greatbonushere.top^
+||greatcpm.com^
+||greatdexchange.com^
+||greatlifebargains2024.com
+||greatlove.pro^
+||greatvpnoffers.com^
+||grecheer.com^
+||grecmaru.com^
+||gredraus.net^
+||greedevolution.com^
+||greedrum.net^
+||greekbelievablesplit.com^
+||greekomythpo.com^
+||greekroo.xyz^
+||greemeek.net^
+||green-red.com^
+||green-resultsbid.com^
+||green-search-engine.com^
+||green4762.com^
+||greenabysselaborate.com^
+||greenads.org^
+||greenlinknow.com^
+||greenlydonmeh.live^
+||greenpaperlist.com^
+||greenplasticdua.com^
+||greeter.me^
+||greetpanda.org^
+||greewaih.xyz^
+||greewepi.net^
+||greezoob.net^
+||grefutiwhe.com^
+||gregariousflower.pro^
+||gregauunaided.com^
+||grehtrsan.com^
+||greisize.com^
+||greithlinener.space^
+||grementessenti.com^
+||gremsaup.net^
+||grepeiros.com^
+||grerdoop.net^
+||greroaso.com^
+||grersomp.xyz^
+||gretaith.com^
+||grewquartersupporting.com^
+||greyersuppl.guru^
+||greystripe.com^
+||grfvngaqbcsw.com^
+||gridriwe.xyz^
+||grievedclaimed.com^
+||griffintardant.guru^
+||grifictuberal.site^
+||grignoaw.com^
+||grigrees.xyz^
+||griksoud.net^
+||grillcheekunfinished.com^
+||grimacecalumny.com^
+||grinchsycoses.tech^
+||grinnymohels.com^
+||griotsspeos.com^
+||gripehealth.com^
+||grippertureen.space^
+||gripqueer.com^
+||grirault.net^
+||grirtouy.com^
+||gristleupanaya.com^
+||gritaware.com^
+||grivupie.net^
+||grizzled-cover.com^
+||grmtas.com^
+||groacoaz.com^
+||groameeb.com^
+||groansnoosed.space^
+||grobido.info^
+||grocmaish.com^
+||groglezapto.pro^
+||groguzoo.net^
+||groininsightclaimed.com^
+||groinmonsieur.com^
+||gronsoad.com^
+||grooksom.com^
+||groomoub.com^
+||groomtoo.com^
+||groorsoa.net^
+||grooseem.net^
+||groosoum.xyz^
+||grootcho.com^
+||grooveoperate.com^
+||grooverend.com^
+||grooveworship.space^
+||gropefore.com^
+||grortalt.xyz^
+||gross-success.com^
+||grossedoicks.com^
+||groudrup.xyz^
+||grouisamrehr.com^
+||groumaux.net^
+||groumtie.com^
+||groumtou.net^
+||groundtheco.xyz^
+||groupian.io^
+||groupsrider.com^
+||grourded.net^
+||groutf.com^
+||growebads.com^
+||growingfailure.pro^
+||growledavenuejill.com^
+||growlingopportunity.com^
+||grown-inpp-code.com^
+||grown-t-code.com^
+||grownbake.pro^
+||growngame.life^
+||growthbuddy.app^
+||grozeesh.com^
+||grqjpukbyvypq.xyz^
+||grrngjxqno.com^
+||grsm.io^
+||grt02.com^
+||grtaanmdu.com^
+||grtexch.com^
+||grtyj.com^
+||grubhenriettaannihilation.com^
+||grubpremonitionultimately.com^
+||grubrebukevenus.com^
+||grubsnuchale.com^
+||grudgewallet.com^
+||grudjfaasncjvfm.com^
+||grudreeb.com^
+||gruesome-comfortable.pro^
+||gruffermail.com^
+||grumblecrytopless.com^
+||grumbletonight.com^
+||grumpy-fear.pro^
+||grumpybreakingsalad.com^
+||grumrionzgu.com^
+||grunoaph.net^
+||gruponn.com^
+||grussreenter.com^
+||gruvirxita.com^
+||gruwalom.xyz^
+||grygrothapi.pro^
+||gsclvurjec.xyz^
+||gscontxt.net^
+||gsiswensaido.xyz^
+||gsjln04hd.com^
+||gssicidctdklvs.com^
+||gsurihy.com^
+||gtbdhr.com^
+||gtgkbkbwpqyhvq.com^
+||gthfwcjhbxbq.xyz^
+||gtitcah.com^
+||gtoonfd.com^
+||gtsads.com^
+||gtudkfe.com^
+||gtxlouky.xyz^
+||guabapeewee.com^
+||guadam.com^
+||guanaoutfawn.life^
+||guanscleeks.com^
+||guanylcaused.website^
+||guardeddummysoothing.com^
+||guardiandigitalcomparison.co.uk^
+||guardianinvadecrept.com^
+||guasarestant.com^
+||gubopedruph.com^
+||guchihyfa.pro^
+||guddledarride.com^
+||gudouzov.com^
+||guemalgist.com^
+||guerrilla-links.com^
+||guessstartlethrive.com^
+||guesswhatnews.com^
+||guestblackmail.com^
+||guesteaten.com^
+||guestssum.com^
+||guffawdecipher.com^
+||guidonsfeeing.com^
+||guigebichir.website^
+||guiletoad.com^
+||guiltjadechances.com^
+||guilty-bear.com^
+||guitarfelicityraw.com^
+||gujakqludcuk.com^
+||gukodxxhkc.xyz^
+||gullible-hope.com^
+||gullible-lawyer.pro^
+||gullibleanimated.com^
+||gulperstaunted.website^
+||gulsachpyrexia.uno^
+||gulsyangtao.guru^
+||gumbolersgthb.com^
+||gumlahdeprint.com^
+||gummierhedera.life^
+||gungpurre.com^
+||gunksjalapic.com^
+||gunnersriser.guru^
+||gunreset.com^
+||gunsaidi.xyz^
+||gunzblazingpromo.com^
+||gurabinhetot.com^
+||gurgledgymnure.space^
+||gurimix.com^
+||gurjaraganger.com^
+||guro2.com^
+||gurshesenglute.website^
+||gurumoppet.digital^
+||gurynyce.com^
+||gushswarthy.com^
+||gussame.com^
+||gussbkpr.website^
+||gustilyoblate.uno^
+||gutjfeskwfk.xyz^
+||gutobtdagruw.com^
+||gutsnights.com^
+||gutterscaldlandslide.com^
+||gutteryrhachi.com^
+||guttiequashey.digital^
+||guuatqlmusy.xyz^
+||guuewhkwtrvab.com^
+||guwait.com^
+||guxsxexlkdk.xyz^
+||guyabe.xyz^
+||gvhmoascwa.xyz^
+||gvkmifcvr.com^
+||gvkqpogjqvni.com^
+||gvmojhugkiud.com^
+||gvt2.com^
+||gwallet.com^
+||gwbgqrxlelrjsi.com^
+||gwcpdvojom.com^
+||gweducelne.com^
+||gwfcpecnwwtgn.xyz^
+||gwjdaazribz.com^
+||gwurinylw.com^
+||gwvjcrtucd.com^
+||gx101.com^
+||gxcvxdeda.com^
+||gxdrytainoxadwy.xyz^
+||gxgu9gktreso.com^
+||gxikmksjuz.com^
+||gxmlkgraj.com^
+||gxordgtvjr.com^
+||gxvaunase.com^
+||gxymlqcnu.com^
+||gyenhpl.com^
+||gyfumobo.com^
+||gymdeserves.com^
+||gymsgranth.com^
+||gynicsperdy.top^
+||gypsiedjilt.com^
+||gypufahuyhov.xyz^
+||gyratesequal.website^
+||gyzlozas.com^
+||gzakxmzydpkwr.com^
+||gzcxtuxgqjrhz.com^
+||gzifhovadhf.com^
+||gzpphnbvqj.com^
+||h0w-t0-watch.net^
+||h12-media.com^
+||h15maincat.com^
+||h2aek6rv0ard.com^
+||h45oldforgames.com^
+||h52ek3i.de^
+||h5r2dzdwqk.com^
+||h74v6kerf.com^
+||h8brccv4zf5h.com^
+||h98s.com^
+||habaerashiksas.com^
+||habbubrauraci.live^
+||habeglee.net^
+||habithate.com^
+||habitofstic.xyz^
+||habitofsticklik.com^
+||habitualivoryashes.com^
+||habitueflasque.com^
+||habovethecityon.info^
+||habrasysteleii.xyz^
+||habusima.uno^
+||hadabqhbewcrt.com^
+||hadesleta.com^
+||hadeti.xyz^
+||hadmvmqe.com^
+||hadsans.com^
+||hadsanz.com^
+||hadsecz.com^
+||hadsimz.com^
+||hadskiz.com^
+||hadsokz.com^
+||haemorrhagedigest.com^
+||haffnetworkmm.com^
+||hafisfunnier.guru^
+||haflinforms.top^
+||hagboatdismast.com^
+||haggeisgael.com^
+||haghalra.com^
+||haglance.com^
+||hagridestupose.space^
+||hagweedtoytown.com^
+||hahscalusar.guru^
+||haihaime.net^
+||haikcarlage.com^
+||hailstonenerve.com^
+||hainoruz.com^
+||hairoak.com^
+||hairpintacticalartsy.com^
+||hairy-level.pro^
+||haithoaz.net^
+||haitingshospi.info^
+||hajoopteg.com^
+||halachadivvers.com^
+||halerugeogeny.com^
+||halfhaled.com^
+||halflyfiscal.com^
+||halfpriceozarks.com^
+||halfwayoverreact.com^
+||halfwayscratchcoupon.com^
+||halibiuslicing.com^
+||halidspilau.guru^
+||halileo.com^
+||hallalifondish.space^
+||halleyperson.pro^
+||hallothoulap.top^
+||hallucinatebotany.com^
+||hallucinatecompute.com^
+||hallucinatediploma.com^
+||hallucinatepromise.com^
+||hallwayscarf.com^
+||halogennetwork.com^
+||halteddropped.com^
+||haltough.net^
+||halveimpendinggig.com^
+||hambul.com^
+||hamestoyman.website^
+||hamfatbuxeous.guru^
+||haminu.space^
+||hamletuponcontribute.com^
+||hammaidentomb.guru^
+||hammaidreswill.com^
+||hammalorphans.com^
+||hammerhewer.top^
+||hammockpublisherillumination.com^
+||hamoumpa.xyz^
+||hampersolarwings.com^
+||hamsterginger.com^
+||hamsterglobins.com^
+||handbagadequate.com^
+||handbagcordial.com^
+||handbaggather.com^
+||handfuljoggingpatent.com^
+||handkerchiefpeeks.com^
+||handkerchiefpersonnel.com^
+||handkerchiefstapleconsole.com^
+||handlegoatsperiod.com^
+||handlingattic.com^
+||handlingblare.com^
+||handsenvious.com^
+||handsomepinchingconsultation.com^
+||handspiketha.xyz^
+||handtub.com^
+||handwritingdoorbellglum.com^
+||handwritingnomad.com^
+||handy-tab.com^
+||handymanprivately.com^
+||handymansurrender.com^
+||hangdogferfel.com^
+||hangfly.net^
+||hangtagcomonte.com^
+||hansetwangy.com^
+||hantlesberith.com^
+||hapbtualkfi.com^
+||haphazardbleeding.com^
+||haplic.com^
+||happeningdeliverancenorth.com^
+||happeningurinepomposity.com^
+||happilydestructive.com^
+||happy-davinci-53144f.netlify.com^
+||happymuttere.org^
+||happypasteheat.com^
+||haprjb.com^
+||haptenspopean.com^
+||hapticswasher.com^
+||harassinganticipation.com^
+||harassinglateral.com^
+||harayun.com^
+||hardaque.xyz^
+||hardboileddearlyaccomplish.com^
+||hardboiledraspexisting.com^
+||harderdaubpetty.com^
+||hardilyshook.com^
+||hardwaretakeoutintimidate.com^
+||hardynarrow.com^
+||harelipwelshes.digital^
+||haresmodus.com^
+||harhtwb.com^
+||haribdathesea.com^
+||harkingskulp.digital^
+||harlequinsleepyfrog.xyz^
+||harmalpilotry.com^
+||harmfulresolution.com^
+||harmlessepic.com^
+||harmlesstacticalhonorable.com^
+||harmoniousfamiliar.pro^
+||harmonypix.com^
+||harn8.info^
+||haronfitanheck.com^
+||harrenmedianetwork.com^
+||harretrips.digital^
+||harsh-hello.pro^
+||harshlygiraffediscover.com^
+||harshplant.com^
+||hartalltunker.com^
+||hartattenuate.com^
+||hartbasketenviable.com^
+||hartlyengland.com^
+||harvardunions.com^
+||harvesttheory.com^
+||harzpzbsr.com^
+||hasdrs.com^
+||hash-hash-tag.com^
+||hashbitewarfare.com^
+||hasricewaterh.info^
+||hassarexurbs.com^
+||hasslepasta.com^
+||hasslesneatly.com^
+||hasteshearses.com^
+||hastifuhllo.top^
+||hastyarmistice.com^
+||hatagashira.com^
+||hatbenchmajestic.com^
+||hatchasked.com^
+||hatchetrenaissance.com^
+||hatchetsiegecleverness.com^
+||hatchetsummit.com^
+||hatchord.com^
+||hatedgeographical.com^
+||hathehadin.com^
+||hatredsmell.uno^
+||hats-47b.com^
+||hatsamevill.org^
+||hatwasallo.com^
+||hatwasallokmv.info^
+||hauboisphenols.com^
+||hauchiwu.com^
+||hauganes.net^
+||haukrgukep.org^
+||haulairtime.com^
+||haulmserinys.com^
+||haulstugging.com^
+||haunchbelongings.com^
+||haunigre.net^
+||haunowho.net^
+||hauphuchaum.com^
+||haupsoag.xyz^
+||hausic.com^
+||haustoam.com^
+||hauthoun.xyz^
+||hauufhgezl.com^
+||havagedhyana.com^
+||havamedia.net^
+||havan3eab9row2n.com^
+||havanese.top^
+||havegrosho.com^
+||havenadverb.com^
+||havenwrite.com^
+||haveproceeding.com^
+||haveralupbeat.website^
+||haveredsiren.space^
+||havils.com^
+||havingsreward.com^
+||haviorshydnoid.com^
+||haviouseulom.club^
+||havoccasualtypersistent.com^
+||havocsbilaan.com^
+||hawkyeye5ssnd.com^
+||hawsquallgenerate.com^
+||hawsuffer.com^
+||haxbyq.com^
+||hayfatduh.com^
+||haymishlytta.com^
+||haymowsbecker.life^
+||haywarn.com^
+||hayyad.com^
+||hazairgo.net^
+||hazansent.com^
+||hazelbeseech.com^
+||hazelhannahfruit.com^
+||hazelhideous.com^
+||hazelmutenessorchard.com^
+||hazelnutshighs.com^
+||hazicu.hothomefuck.com^
+||hazoopso.net^
+||hazydespise.com^
+||hazymarvellous.com^
+||hb-247.com^
+||hb94dnbe.de^
+||hbeipcdntijpb.com^
+||hbfqcy.com^
+||hbfulzie.life^
+||hbloveinfo.com^
+||hbmode.com^
+||hboffshadh.com^
+||hbowywpeqhfpwru.com^
+||hbozuumx.com^
+||hbpcjmegtll.com^
+||hcckkyoo.com^
+||hcdmhyq.com^
+||hcritiesec.xyz^
+||hcrwvno.com^
+||hcuukwgpjiykapf.xyz^
+||hcwmnryoyf.com^
+||hcxbokndbhw.com^
+||hd100546c.com^
+||hdacode.com^
+||hdat.xyz^
+||hdatssfpxrwbxs.com^
+||hdbcdn.com^
+||hdbcode.com^
+||hdbcome.com^
+||hdbkell.com^
+||hdbkome.com^
+||hdbtop.com^
+||hdfoweey.com^
+||hditers.com^
+||hdjfeed.top^
+||hdphumepmtikhbg.xyz^
+||hdpreview.com^
+||hdsqvypdt.com^
+||hdvcode.com^
+||hdwibtrw.com^
+||hdwvhgnisi.com^
+||he3mero6calli4s.com^
+||he7ll.com^
+||headlightgranulatedflee.com^
+||headquartersexually.com^
+||headsroutestocking.com^
+||headstonerinse.com^
+||headup.com^
+||headusuallyopener.com^
+||healthsmd.com^
+||heappyrinceas.info^
+||heardsoppy.com^
+||hearingdoughnut.com^
+||hearingyukkel.store^
+||heartacheeasellikeness.com^
+||heartbrokenbarrellive.com^
+||hearthinfuriate.com^
+||heartilyscales.com^
+||heartlessrigid.com^
+||heartsawpeat.com^
+||heaterrobotscompute.com^
+||heatertried.com^
+||heathertravelledpast.com^
+||heatpracticallyease.com^
+||heavenexceed.com^
+||heavenfull.com^
+||heavengenerate.com^
+||heavenly-landscape.com^
+||heavenly-test.pro^
+||heavinessnudgemystical.com^
+||heavycomposedkerb.com^
+||heavyconsciousnesspanties.com^
+||heavyrnews.name^
+||heavyuniversecandy.com^
+||hebenefitssheasht.info^
+||hebiichigo.com^
+||hebraicwain.website^
+||hebrum.com^
+||hecherthepa.xyz^
+||hecherthepar.com^
+||hecticprofitable.com^
+||hedgebedengue.website^
+||hedgehoghugsyou.com^
+||hedgehogpoachsay.com^
+||hedmisreputys.info^
+||heebauch.com^
+||heedsbedeaf.guru^
+||heelseparateddistinguished.com^
+||heerosha.com^
+||heeteefu.com^
+||heezylaura.com^
+||heftedbeatify.cfd^
+||heftymynah.com^
+||hegazedatthewo.com^
+||hegumensemite.com^
+||hehadinqu.info^
+||hehighursoo.com^
+||heinndoorhises.info^
+||heiressplane.com^
+||heirforslow.com^
+||heirloomreasoning.com^
+||hekowutus.com^
+||helaid.com^
+||heleric.com^
+||helesandoral.com^
+||helic3oniusrcharithonia.com^
+||heligh.com^
+||helign.com^
+||hellmade.top^
+||hellnebsh.live^
+||helltraffic.com^
+||helmethopeinscription.com^
+||helpedhandwritingintestine.com^
+||helperinadmissible.com^
+||helphauntboxer.com^
+||helplessdanpavilion.com^
+||helverglitch.website^
+||hemaglnkrvdcgxe.com^
+||hembrandsteppe.com^
+||hemineedunks.com^
+||hemingway-dries-i-207.site^
+||hemisphereilliterate.com^
+||hemtatch.net^
+||hemworm.com^
+||hencoopfiestas.life^
+||hengared.com^
+||hengared.xyz^
+||hengepessary.com^
+||heniypgtlw.com^
+||henoticpipi.com^
+||henriettaproducesdecide.com^
+||henrithisheprat.com^
+||hentaibiz.com^
+||hentaigold.net^
+||hentaionline.net^
+||henwilethysen.com^
+||heodeidsoanadthe.info^
+||hepani.com^
+||hepare.com^
+||heparllasysy.xyz^
+||hepsaign.com^
+||heptix.net^
+||heraldet.com^
+||heratheacle.com^
+||herbiernohow.top^
+||herbwheelsobscure.com^
+||herdintwillelitt.com^
+||herdruler.com^
+||hereabithec.com.ua^
+||hereaftercostphilip.com^
+||hereditaryplead.com^
+||herefoortowa.cc^
+||hereincigarettesdean.com^
+||heremployeesihi.info^
+||heresanothernicemess.com^
+||heresjokey.com^
+||herew-lmq.com^
+||herhomeou.xyz^
+||heritorclysmic.com^
+||hermichermicbroadcastinglifting.com^
+||hermichermicfurnished.com^
+||hernialbriefer.com^
+||heroadmissionfinalize.com^
+||herodiessujed.org^
+||herofherlittleboyw.info^
+||heroiddepress.com^
+||heroinslagunes.com^
+||herolaumbrous.website^
+||heronspire.com^
+||herynore.com^
+||hesatinaco.com^
+||hesatinacorne.org^
+||hesoorda.com^
+||hespe-bmq.com^
+||hestatueoftheap.com^
+||hesterinoc.info^
+||hesthergeyan.com^
+||hetadinh.com^
+||hetaer.xyz^
+||hetahien.com^
+||hetaint.com^
+||hetapugs.com^
+||hetapus.com^
+||hetartwg.com^
+||hetaruvg.com^
+||hetaruwg.com^
+||hethis.com^
+||hethisisath.xyz^
+||heucoucjrwno.com^
+||heukwasanasosett.info^
+||heusysianedu.com^
+||hevc.site^
+||hewalleges.guru^
+||hewawkward.com^
+||hewdisobedienceliveliness.com^
+||hewmjifrn4gway.com^
+||hexovythi.pro^
+||hf5rbejvpwds.com^
+||hfc195b.com^
+||hfeoveukrn.info^
+||hffdjxnyxckf.xyz^
+||hffxc.com^
+||hfggttxptxwdmb.com^
+||hfib5s-sdds-248d.xyz^
+||hfk128dfs-dsfbheuoys.xyz^
+||hfnzhczqgdp.com^
+||hforuvqrgyvbspi.xyz^
+||hfufkifmeni.com^
+||hg-bn.com^
+||hgbasics.com^
+||hgbn.rocks^
+||hgcmnews.pro^
+||hgearlpfbm.top^
+||hghit.com^
+||hghm4u7b61.com^
+||hgpmbfkxmrw.xyz^
+||hgub2polye.com^
+||hgubxzfpolbf.com^
+||hgx1.online^
+||hgx1.site^
+||hgx1.space^
+||hhbypdoecp.com^
+||hhcktiucw.xyz^
+||hhit.xyz^
+||hhjow.com^
+||hhklc.com^
+||hhkld.com^
+||hhrsecure.com^
+||hhtxjoa.com^
+||hiadone.com^
+||hialstrfkctx.com^
+||hiasor.com^
+||hiatecudgel.website^
+||hibezu.xyz^
+||hibids10.com^
+||hibitomonach.com^
+||hiblcom.com^
+||hiccupcotman.com^
+||hickclamour.com^
+||hickunwilling.com^
+||hicovjpufo.com^
+||hicpm10.com^
+||hidatsabedim.space^
+||hiddam.com^
+||hiddenbucks.com^
+||hiddenseet.com^
+||hideousactivelyparked.com^
+||hidist.com^
+||hiedflashed.com^
+||hiemalsalpids.com^
+||hiemsunsweat.com^
+||hieramuriel.com^
+||hierarchymicrophonerandom.com^
+||hierarchytotal.com^
+||hievel.com^
+||higgiens23c5l8asfrk.com^
+||highconvertingformats.com^
+||highcpmcreativeformat.com^
+||highcpmrevenuegate.com^
+||highcpmrevenuenetwork.com^
+||highdirtysubsided.com^
+||highercldfrev.com^
+||highercldfrevb.com^
+||higherlargerdate.com^
+||highestfollowing.com^
+||highestgaugers.com^
+||higheurest.com^
+||highjournalistbargain.com^
+||highmaidfhr.com^
+||highnets.com^
+||highperformancecpm.com^
+||highperformancecpmgate.com^
+||highperformancecpmnetwork.com^
+||highperformancedformats.com^
+||highperformancedisplaycontent.com^
+||highperformancedisplayformat.com^
+||highperformancegate.com^
+||highprofitnetwork.com^
+||highrevenuecpm.com^
+||highrevenuecpmnetrok.com^
+||highrevenuecpmnetwork.com^
+||highrevenuegate.com^
+||hightech24h.com^
+||hightopnews.com^
+||hightopnewstoday.com^
+||highwaycpmrevenue.com^
+||highwaydizzy.com^
+||hikvar.ru^
+||hilariouscongestionpackage.com^
+||hilarioussewingartsy.com^
+||hilaroryssus.guru^
+||hilded.com^
+||hildly.com^
+||hilerant.site^
+||hillbackserve.com^
+||hillhousehomes.co^
+||hillsidejustificationstitch.com^
+||hilltopads.com^
+||hilltopads.net^
+||hilltopgo.com^
+||hillyhaeres.website^
+||hiloss.com^
+||hilove.life^
+||himediads.com^
+||himediadx.com^
+||himekingrow.com^
+||himhedrankslo.xyz^
+||himpumbilic.cfd^
+||himrebelliontemperature.com^
+||himselfthoughtless.com^
+||himselves.com^
+||himselvesobr.club^
+||hinaprecent.info^
+||hingamgladt.org^
+||hingamgladther.com^
+||hingfruitiesma.info^
+||hinkhimunpra.info^
+||hinkhimunpractical.com^
+||hinoglauk.com^
+||hinoidczarist.com^
+||hinowlfuhrz.com^
+||hioff1.info^
+||hionedaugsbu.info^
+||hip-97166b.com^
+||hipals.com^
+||hipersushiads.com^
+||hiphoapt.xyz^
+||hippostravois.store^
+||hippusanglist.com^
+||hiprofitnetworks.com^
+||hipstertinta.space^
+||hipunaux.com^
+||hircinnative.guru^
+||hirted.com^
+||hiseewhatmyou.xyz^
+||hisismoyche.com^
+||hissedassessmentmistake.com^
+||hissoverout.com^
+||hissshortsadvisedly.com^
+||historicalcarawayammonia.com^
+||historicalcargo.com^
+||historicalcompetentconquered.com^
+||historicalsenseasterisk.com^
+||historicgraduallyrow.com^
+||histormedengi.xyz^
+||hisurnhuh.com^
+||hitbip.com^
+||hitchbuildingeccentric.com^
+||hitchrational.com^
+||hitcpm.com^
+||hitlnk.com^
+||hiug862dj0.com^
+||hizanpwhexw.com^
+||hizlireklam.com^
+||hjalma.com^
+||hjfonyiuo.com^
+||hjiwoazeigefn.com^
+||hjkkindwould.xyz^
+||hjklq.com^
+||hjmjmywncskyt.com^
+||hjprhubzqgw.com^
+||hjqdwmekhur.com^
+||hjrwwwlqcovom.com^
+||hjxajf.com^
+||hkeibmpspxn.com^
+||hkfgsxpnaga.xyz^
+||hkifcxblsu.com^
+||hkilops.com^
+||hkiztcykfb.com^
+||hkjjfpkghxec.xyz^
+||hkoxlirf.com^
+||hksmstpzsnlj.com^
+||hkuypnhpafbuyy.com^
+||hlbelbblmc.com^
+||hlcvjaqjckgrwb.com^
+||hldxvloxsxqqg.com^
+||hlerseomcb.com^
+||hleuindnjcixxep.com^
+||hlftbsgj.com^
+||hligh.com^
+||hljmdaz.com^
+||hlmiq.com^
+||hlserve.com^
+||hlunlean.com^
+||hlyrecomemum.info^
+||hmafhczsos.com^
+||hmgooviqnin.xyz^
+||hmrxsxvl.com^
+||hmsykhbqvesopt.xyz^
+||hmutggsidcnhj.com^
+||hmyuokltxplqwfa.com^
+||hn1l.online^
+||hn1l.site^
+||hnkyxyknp.com^
+||hnrgmc.com^
+||hntkeiupbnoaeha.xyz^
+||hnxhksg.com^
+||ho47no3iry.de^
+||hoa44trk.com^
+||hoabinoo.net^
+||hoacauch.net^
+||hoagiesmowed.com^
+||hoakz.xyz^
+||hoanaijo.com^
+||hoanoola.net^
+||hoardglitterjeanne.com^
+||hoareddepulse.com^
+||hoaredsavates.com^
+||hoarseairy.com^
+||hoaxcookingdemocratic.com^
+||hobfadbig.com^
+||hoboka.com^
+||hockeyhavoc.com^
+||hocoas.com^
+||hoctor-pharity.xyz^
+||hoddinsmused.uno^
+||hoelikeotc.top^
+||hoemasfat.site^
+||hoggeepilies.digital^
+||hoggersundue.com^
+||hoggetforfend.com^
+||hoglinsu.com^
+||hognaivee.com^
+||hogqmd.com^
+||hogtiesnosh.guru^
+||hohese.com^
+||hoickpinyons.com^
+||hoiiodacdsmro.com^
+||hoisquit.buzz^
+||hokierloopy.digital^
+||holdsbracketsherry.com^
+||holdsoutset.com^
+||holduporatory.com^
+||holebnnjuom.xyz^
+||holemanwasco.com^
+||holenhw.com^
+||holict.com^
+||hollekeamboina.com^
+||hollowcharacter.com^
+||hollowgleamed.com^
+||holmiumundried.com^
+||holond.com^
+||holptimawa.com^
+||homecomingrespectedpastime.com^
+||homergeoidal.tech^
+||homesickheron.com^
+||homespotaudience.com^
+||homeycommemorate.com^
+||homierceston.top^
+||hommmaq.com^
+||homncjrgbref.com^
+||hompouka.com^
+||honershexosan.com^
+||honestlyapparentlycoil.com^
+||honestlydeploy.com^
+||honestlyfosterchild.com^
+||honestlygipsy.com^
+||honestlyvicinityscene.com^
+||honestpeaceable.com^
+||honeycombastrayabound.com^
+||honeycombprefecture.com^
+||honeycshfferufrew.com^
+||honeymoonregular.com^
+||honorablehalt.com^
+||honorarybreakclank.com^
+||honourcunninglowest.com^
+||honoursdashed.com^
+||hoo1luha.com^
+||hoodcapunbane.digital^
+||hoofexcessively.com^
+||hoogajee.net^
+||hooglidi.net^
+||hoojique.xyz^
+||hookawep.net^
+||hookersecus.com^
+||hooliganmedia.com^
+||hoonaptecun.com^
+||hoood.info^
+||hoopbeingsmigraine.com^
+||hoopeeps.xyz^
+||hoopersnonpoet.com^
+||hoophaub.com^
+||hooplejubus.uno^
+||hooptaik.net^
+||hoosgowhandbow.com^
+||hoowooze.net^
+||hopbeduhzbm.com^
+||hopedwishfulpercent.com^
+||hopefullyactively.com^
+||hopefullyapricot.com^
+||hopghpfa.com^
+||hophcomeysw.com^
+||hopilos.com^
+||hopliteracy.com^
+||hopperbanespirits.com^
+||hopperimprobableclotted.com^
+||hoppershortercultivate.com^
+||hopsackmoth.com^
+||hoptopboy.com^
+||hopuchcompa.com^
+||horaebanca.life^
+||hordesproport.digital^
+||hordeumtooken.com^
+||horedi.com^
+||horizontallyclenchretro.com^
+||hormosdebris.com^
+||horriblecatching.com^
+||horriblygeneratortwinkle.com^
+||horriblysparkling.com^
+||horrifieddespair.com^
+||horrifyclausum.com^
+||horse-bidforreal.org^
+||horsebackcastle.com^
+||horsemanterminateplatform.com^
+||horseuptown.com^
+||horsilyoxydase.com^
+||hortestoz.com^
+||hortitedigress.com^
+||hosaur.com^
+||hosehonoured.com^
+||hoselviolal.uno^
+||hosenewspapersdepths.com^
+||hosentombe.top^
+||hoseve.com^
+||hosieryplum.com^
+||hosierypressed.com^
+||hosieryweapons.com^
+||hosity.com^
+||hospitabletradition.pro^
+||hospitalitydisorder.com^
+||hospitalityjunctioninset.com^
+||hostave.net^
+||hostave4.net^
+||hostingcloud.racing^
+||hostlyacus.digital^
+||hosupshunk.com^
+||hot-clips.space^
+||hot4k.org^
+||hotclips.mom^
+||hotclips.online^
+||hotclips.space^
+||hotelbowfeast.com^
+||hotelintimacybananas.com^
+||hotfootpriers.com^
+||hotgvibe.com^
+||hothta.com^
+||hotkabachok.com^
+||hotlinemultiply.com^
+||hotnews1.me^
+||hotpics.mom^
+||hotstretchdove.com^
+||hottercensorbeaker.com^
+||hotterenvisage.com^
+||hotvids.online^
+||hotvids.space^
+||hotwildadult.com^
+||hotwords.com^
+||hotzoneunspeed.com^
+||houdodoo.net^
+||houjachy.com^
+||houlb.com^
+||houndcost.com^
+||hounddramatic.com^
+||houndtriumphalsorry.com^
+||houpeera.net^
+||householdsinnersyringe.com^
+||housejomadkc.com^
+||housekeepergamesmeeting.com^
+||housemaiddevolution.com^
+||housewifecheeky.com^
+||housewifehaunted.com^
+||hoverr.co^
+||hoverr.media^
+||hovide.com^
+||how-t0-wtch.com^
+||howberthchirp.com^
+||howboxmab.site^
+||howdoyou.org^
+||howeasteeler.website^
+||howfingbrakes.com^
+||howledmintier.com^
+||howlexhaust.com^
+||howningretoneand.com^
+||howoverlapsuspicious.com^
+||howploymope.com^
+||howtubray.com^
+||hoydenlooms.website^
+||hozoaxan.com^
+||hpaakmsumarzy.com^
+||hpbmyojwqpewaw.com^
+||hpcfdhvwjwlt.com^
+||hpk42r7a.de^
+||hpmarzhnny.com^
+||hpmlrpbrwezloi.com^
+||hppvkbfcuq.com^
+||hpsvgbrlqa.com^
+||hptcwtmzuj.com^
+||hpwqsjpkbiixue.com^
+||hpychofen.com^
+||hpyjmp.com^
+||hpyrdr.com^
+||hq3x.com^
+||hqawqssuvqyl.xyz^
+||hqduejsycx.com^
+||hqhwiwcahavywie.com^
+||hqmwuvdf.xyz^
+||hqpass.com^
+||hqpgfxt.com^
+||hqqqqwcdxvjbd.com^
+||hqscene.com^
+||hqsrvwfk.xyz^
+||hqwa.xyz^
+||hrahdmon.com^
+||hreerfdfgourg.com.ua^
+||hrhufhhay.com^
+||hriahotcake.com^
+||hrnhmral.com^
+||hrogrpee.de^
+||hrrlyfdnxlzxe.com^
+||hrscompetepickles.com^
+||hrscouchoutbreak.com^
+||hrtennaarn.com^
+||hrtyc.com^
+||hrtye.com^
+||hrxjqyxvdqidpv.com^
+||hskywgpickh.com^
+||hsrvv.com^
+||hsrvz.com^
+||hstpnetwork.com^
+||htalizer.com^
+||htcozxlhkg.com^
+||htdvt.com^
+||htevoo.xyz^
+||hthinleavesofefi.info^
+||htihvgpmna.xyz^
+||htintpa.tech^
+||htjuxdkjppm.com^
+||htkcm.com^
+||htl.bid^
+||htlbid.com^
+||htmass.com^
+||htmonster.com^
+||htoptracker11072023.com^
+||htsysxlupdqe.com^
+||httpsecurity.org^
+||htufhvsglyoy.com^
+||htwrildnk.xyz^
+||htyrmacanbty.com^
+||huanez.xyz^
+||hubbabu2bb8anys09.com^
+||hubbubtheol.com^
+||hubbysyndoc.com^
+||hubhubhub.name^
+||hublosk.com^
+||hubristambacs.com^
+||hubturn.info^
+||hubzozo.com^
+||huckauhy.com^
+||huddha.com^
+||huddhi.com^
+||hudrftcspuf.com^
+||hue2a.com^
+||hueadsxml.com^
+||hugelyantony.com^
+||hugelyimmovable.com^
+||hugfromoctopus.com^
+||huggerrailly.top^
+||hughester.com^
+||hughjonah.com^
+||hugoinexperiencedsat.com^
+||hugregregy.pro^
+||hugsgnome.com^
+||huhowmvewocv.xyz^
+||hulabipptemux.com^
+||huloxakuxukwduo.xyz^
+||hulsairtid.com^
+||humaffableconsulate.com^
+||humanjeep.com^
+||humble-green.pro^
+||humblecooperate.com^
+||humbledleelang.com^
+||humicprao.space^
+||humidpeace.com^
+||humifyporteno.digital^
+||humiliatedvolumepore.com^
+||humiliatemoot.com^
+||humiliating-risk.pro^
+||humiliating-tradition.pro^
+||humilityanytime.com^
+||hummertulwar.guru^
+||hummingexam.com^
+||humoralpurline.com^
+||humordecomposebreathtaking.com^
+||humpdecompose.com^
+||humpdubious.com^
+||humsoolt.net^
+||humusesphren.com^
+||hunbtupbbanyg.com^
+||hunchmotherhooddefine.com^
+||hundredpercentmargin.com^
+||hundredproductaffections.com^
+||hundredscultureenjoyed.com^
+||hundredshands.com^
+||hundredthmeal.com^
+||hundredthtvthorny.com^
+||hungersavingwiring.com^
+||hungoversleepconcourse.com^
+||hungrylongingtile.com^
+||hungryproductionsmalnutrition.com^
+||hungryrise.com^
+||hunjoinz.pics^
+||hunkbother.com^
+||hunter-hub.com^
+||hunterlead.com^
+||huntingtroll.com^
+||hupiru.uno^
+||huppahshoras.com^
+||huradisbud.com^
+||hurced.com^
+||hurdlesmuchel.com^
+||hurdleyreer.info^
+||hurlmedia.design^
+||huronews.com^
+||hurricaneabjection.com^
+||hurricaneadvantagecomplication.com^
+||hurricaneforciblesorrow.com^
+||hurstplants.com^
+||hurtfulden.com^
+||husbandnights.com^
+||huselomboy.website^
+||husezo.uno^
+||husfly.com^
+||hushpub.com^
+||hushta.com^
+||husky-chain.pro^
+||huskydesigner.pro^
+||huskypartydance.com^
+||huskytrustworthy.com^
+||hussartootle.website^
+||husuko.xyz^
+||huszawnuqad.com^
+||hutanz.xyz^
+||hutremindbond.com^
+||huwuftie.com^
+||huylki.com^
+||hvd1t.com^
+||hvdmwhnawvhbejv.com^
+||hvikgqco.com^
+||hvkwmvpxvjo.xyz
+||hvmsmoiejaqb.com^
+||hvooyieoei.com^
+||hvvafunojvdlv.xyz^
+||hwchvgpc.xyz^
+||hwicliktt.com^
+||hwmlmcbwpbkwas.com^
+||hwpnocpctu.com^
+||hwpyfcxahv.com^
+||hwrcxpfzmfxg.com^
+||hwyjfhdjgoorb.com^
+||hxcdyx.com^
+||hxficbb.com^
+||hxfjbdgjscufctm.xyz^
+||hxgqqxopf.com^
+||hxlkytqpinnqeo.com^
+||hxlvqndylyoi.xyz^
+||hxoewq.com^
+||hxwjmeveeb.com^
+||hybridgermandespicable.com^
+||hycantyoubelik.com^
+||hydnoraraasch.tech^
+||hydragrouge.com^
+||hydraulzonure.com^
+||hygieneretorted.com^
+||hykerewasn.xyz^
+||hykrrersrl.com^
+||hylicfrothi.uno^
+||hyloistmithan.com^
+||hylomysslipper.digital^
+||hynteroforion.com^
+||hyofteraq.com^
+||hype-ads.com^
+||hypeads.org^
+||hypemakers.net^
+||hyperbanner.net^
+||hyperlinksecure.com^
+||hyperoi.com^
+||hyperpromote.com^
+||hypertrackeraff.com^
+||hypervre.com^
+||hyphenatedion.com^
+||hyphenion.com^
+||hypnotizedespiterelinquish.com^
+||hypnotizetransfervideotape.com^
+||hypocrisypreliminary.com^
+||hypocrisysmallestbelieving.com^
+||hypogeeinial.com^
+||hypogynbalker.com^
+||hypothesisoarsoutskirts.com^
+||hypots.com^
+||hypozoabytes.life^
+||hyrcanquittor.com^
+||hyrewusha.pro^
+||hystericalpotprecede.com^
+||hystrixcreped.com^
+||hywcvctplkoy.com^
+||hyyaofjnidwiyg.com^
+||hz9x6ka2t5gka7wa6c0wp0shmkaw7xj5x8vaydg0aqp6gjat5x.com^
+||hzkachqd.com^
+||hznkoual.com^
+||hzogncbobfb.com^
+||hzoywchsp.com^
+||i-afk.com^
+||i010b048d3e4a1e4b70aba72b169e70c90971f9.xyz^
+||i0xz2.top^
+||i4rsrcj6.top^
+||i7ece0xrg4nx.com^
+||i99i.org^
+||iadoremakingpics.com^
+||iaihdexme.com^
+||iajmewpagfvhg.com^
+||iakjiamqg.com^
+||iam9p3eri3as5lc6hllege.com^
+||iamadssystems.com^
+||ianjgmpat.com^
+||ianjumb.com^
+||iasbetaffiliates.com^
+||iasrv.com^
+||iaswrwqfy.com^
+||iaxwnffhikiac.com^
+||ibatom.com^
+||ibdjdtmkq.xyz^
+||ibeelten.net^
+||ibexesblithen.com^
+||ibidemkorari.com^
+||ibikini.cyou^
+||ibjdmthqkz.com^
+||ibrapush.com^
+||ibryte.com^
+||ibugreeza.com^
+||ibutheptesitrew.com^
+||icalnormaticalacyc.info^
+||icdirect.com^
+||icdns.net^
+||icebergreptilefury.com^
+||iceboxlitre.com^
+||icedewear.site^
+||icelessbogles.com^
+||ichauphy.com^
+||ichimaip.net^
+||icicleapplicationinvestigator.com^
+||icicleriskfence.com^
+||icilyassertiveindoors.com^
+||icilytired.com^
+||iciynrkldrhmk.com^
+||ickyrustle.com^
+||iclickcdn.com^
+||icllmnimmmvrc.com^
+||icmlfqdb.com^
+||icnwkduxnwl.com^
+||icoawhou.com^
+||iconcardinal.com^
+||iconcnd.net^
+||icpadv.com^
+||icrxbetigcdjz.com^
+||icsamghkxdv.com^
+||icvehoixyqudejo.xyz^
+||icxcrnciutiltaf.com^
+||icycreatmentr.info^
+||idahoanpavies.com^
+||iddeyrdpgq.com^
+||iddjpop.com^
+||iddpop.com^
+||ideahealkeeper.com^
+||idealmedia.io^
+||ideliv.net^
+||idelpiyuagjxtk.xyz^
+||idelv.net^
+||idencesruptine.xyz^
+||identifiernancy.com^
+||identifierslionessproof.com^
+||identitymansfield.com^
+||idesce.com^
+||idiafix.com^
+||idiothungryensue.com^
+||idioticdeprint.com^
+||idiotproprietary.com^
+||idiotyet.com^
+||iditolshewn.com^
+||idkmgzkdhanmz.com^
+||idledifficulty.pro^
+||idnbckbknxurmf.xyz^
+||idohethisisathllea.com^
+||idolizeduse.pro^
+||idownloadgalore.com^
+||idswinpole.casa^
+||idvdtxixmmaiyv.xyz^
+||idwithblaockbrok.xyz^
+||idydlesswale.info^
+||ie3wisa4.com^
+||ie8eamus.com^
+||iebsmqevw.com^
+||iecjqkiawvifx.com^
+||iedtalruy.com^
+||ieememberhima.xyz^
+||ieicbkjmmqkcmgq.com^
+||ieiukkwfqhwuvwy.com^
+||iendoo.com^
+||ietyofedinj89yewtburgh.com^
+||iewhonhdvryu.com^
+||iezptsoc.com^
+||iezxmddndn.com^
+||ifdilptsw.com^
+||ifdividemeasuring.com^
+||ifdmuggdky.com^
+||ifdnzact.com^
+||ifdyifowri.com^
+||ifefashionismscold.com^
+||ifgrbq.com^
+||ifigent.com^
+||ifknittedhurtful.com^
+||ifllwfs.com^
+||ifmjzbdyk.com^
+||ifpartyingpile.com^
+||ifplumhggkz.com^
+||ifrjnpv.com^
+||ifsmatbeg.site^
+||ifsnickshriek.click^
+||ifsnickshriek.com^
+||ifvxoluyhof.com^
+||ifzpvnrjp.com^
+||ig0nr8hhhb.com^
+||igameunion.com^
+||igaming-warp-service.io^
+||igbiraintsv.com^
+||ightdecipientconc.info^
+||igjptqlywyvfveq.com^
+||iglephoo.xyz^
+||igloohq.com^
+||igmcsvrgxpebh.xyz^
+||ignitesvaurien.com^
+||ignitioninstaller.com^
+||ignorant-union.pro^
+||ignorantmethod.pro^
+||ignorantrigidpreferred.com^
+||ignoresphlorol.com^
+||ignoringinconvenience.com^
+||ignoringpromisingonce.com^
+||igoognou.xyz^
+||iguran.com^
+||igxmoaulj.com^
+||igylwxvxgsuvcs.xyz^
+||igyrmknlpr.xyz^
+||ihauvogh.com^
+||ihehgqawkybbqi.com^
+||ihhqwaurke.com^
+||ihjtrncfoha.com^
+||ihoabsop.xyz^
+||ihoolrun.net^
+||ihopuchcomp.xyz^
+||ihsarnaut.store^
+||ihtckcitkr.com^
+||ihwwssyperloof.com^
+||ihzuephjxb.com^
+||iicheewi.com^
+||iicsxxkdcy.com^
+||iifvcfwiqi.com^
+||iigmlx.com^
+||iihcjcil.com^
+||iinzwyd.com^
+||iistillstayherea.com^
+||iivzdmqgyyiw.com^
+||iiwm70qvjmee.com^
+||iiydmrr.com^
+||ijatsapphiresanda.com^
+||ijbgqlf.com^
+||ijebtcgu.com^
+||ijeetsie.com^
+||ijhpdtiij.com^
+||ijmrburud.com^
+||ijorecepous.com^
+||ijspro-code.com^
+||ijtomh.com^
+||ijwfyirxx.xyz^
+||ijyoguyv.com^
+||ikahnruntx.com^
+||ikaiznmpapdlv.com^
+||ikbwkovwbwkpit.com^
+||ikcaru.com^
+||ikcieontapp.com^
+||ikengoti.com^
+||ikevinwfc.com^
+||ikeymutilla.space^
+||ikholm.com^
+||ikjzwgcg.com^
+||iklghjooyj.com^
+||ikoptaud.com^
+||ikrail.com^
+||ikrauteri.life^
+||ikunselt.com^
+||ikwiwnnofgpzq.com^
+||ikwzrix.com^
+||ikxxgkpymja.com^
+||ilaterdeallyi.info^
+||ilaterdeallyig.info^
+||ilawitrototlet.com^
+||ileacfaretta.digital^
+||ilealscathes.com^
+||ileeckut.com^
+||ileesidesu.hair^
+||iletterismyper.info^
+||ilgwuqgvdzl.com^
+||iliifmido.xyz^
+||iliketomakingpics.com^
+||ilinouck.net^
+||ilkmawgod.site^
+||illallwoe.com^
+||illegaleaglewhistling.com^
+||illegallyshoulder.com^
+||illegalprotected.com^
+||illegibledismiss.com^
+||illfriendship.com^
+||illicitdandily.cam^
+||illips.com^
+||illishrastus.com^
+||illiterate-estate.pro^
+||illiticguiding.com^
+||illogicalcreaturebiological.com^
+||illuminatedharrowpartnership.com^
+||illuminatedusing.com^
+||illuminateinconveniencenutrient.com^
+||illuminateslydeliberate.com^
+||illuminationdangeroushero.com^
+||illusiveremarkstreat.com^
+||illustcutesy.com^
+||illustrateartery.com^
+||illustrationapplausespotlight.com^
+||illustriousmind.pro^
+||illustriousoatmeal.com^
+||ilmtudcgmqxa.com^
+||ilo134ulih.com^
+||iloacmoam.com^
+||ilokhkvijq.com^
+||iloptrex.com^
+||ilovemakingpics.com^
+||iludmt.com^
+||ilusors.com^
+||ilxhsgd.com^
+||ilyf4amifh.com^
+||imageadvantage.net^
+||imagiflex.com^
+||imaginativebite.com^
+||imaginestandingharvest.com^
+||imalug.com^
+||imasdk.googleapis.com^
+||imathematica.org^
+||imatrk.net^
+||imatue.com^
+||imbalmenvy.website^
+||imbalmscashews.com^
+||imblic.com^
+||imbolexabc.top^
+||imemediatesuper.info^
+||imgfeedget.com^
+||imghst-de.com^
+||imgint1.com^
+||imglnkd.com^
+||imglnke.com^
+||imgot.info^
+||imgsniper.com^
+||imgspics.com^
+||imgwebfeed.com^
+||imiclk.com^
+||imiddleagedspacious.com^
+||iminsoux.com^
+||imith.com^
+||imitrck.net^
+||imitrk.com^
+||imkjultwip.xyz^
+||immaculategirdlewade.com^
+||immaculaterepair.pro^
+||immaculatewars.com^
+||immediatebedroom.pro^
+||immediateknowledge.com^
+||immediatesignal.pro^
+||immedlinkum.info^
+||immenseatrociousrested.com^
+||immenselyloot.com^
+||immenselytoken.com^
+||immenseprivilegelibel.com^
+||immersepingcompromise.com^
+||immigrantpavement.com^
+||immigrateskating.com^
+||immigrationspiralprosecution.com^
+||imminentadulthoodpresumptuous.com^
+||immortalhostess.com^
+||immortalityfaintedobjections.com^
+||immortalityinformedmay.com^
+||immortalityrewardintersection.com^
+||immoxdzdke.com^
+||immuneincompetentcontemporary.com^
+||imnpkbxrf.xyz^
+||imobljkhqw.com^
+||imoniummusicry.com^
+||imoughtcallmeoc.com^
+||imp2aff.com^
+||impact-betegy.com^
+||impactcutleryrecollect.com^
+||impactradius-go.com^
+||impactradius.com^
+||impactserving.com^
+||impactslam.com^
+||impartial-steal.pro^
+||impartialnettle.com^
+||impassabletitanicjunction.com^
+||impatientbowpersecution.com^
+||impatientlyastonishing.com^
+||impatienttidy.com^
+||impavidcircean.com^
+||impavidmarsian.com^
+||impeccablewriter.com^
+||impededhaeing.com^
+||impendingaggregated.com^
+||impendscouxio.com^
+||impenetrableauthorslimbs.com^
+||imperativecapitaltraitor.com^
+||impertinentwishing.com^
+||imperturbableawesome.com^
+||imperturbableclothes.com^
+||imperturbableresponsive.com^
+||imperturbablesum.com^
+||impishelizabethjumper.com^
+||implementedinstalled.com^
+||implementtransmitted.com^
+||impliedbusinessmencompletion.com^
+||implix.com^
+||impolitefreakish.com^
+||imponedbilsh.top^
+||impore.com^
+||importanceexhibitedamiable.com^
+||imposi.com^
+||impossibilityfighter.com^
+||impossibilityutilities.com^
+||impossiblemountain.pro^
+||impostorconfused.com^
+||impostorhazy.com^
+||impregnablehunt.com^
+||impresseastsolo.com^
+||impressivecontinuous.com^
+||impressiveporchcooler.com^
+||imprintmake.com^
+||improvebeams.com^
+||improvebin.com^
+||improvementscakepunctual.com^
+||improvementscaptivatevenus.com^
+||improvesufficientlyfurther.com^
+||improviseprofane.com^
+||improviserelenthousing.com^
+||impulsefelicity.com^
+||impulsiveenabled.com^
+||impunekotoite.com^
+||imputesmere.top^
+||imstks.com^
+||imudukely.store^
+||in-appadvertising.com^
+||in-page-push.com^
+||in-page-push.net^
+||inabilityovaloccasional.com^
+||inabilitytraditional.com^
+||inabsolor.com^
+||inaccuratetreasure.com^
+||inadequateinadmissibleoblige.com^
+||inadmissibleinsensitive.com^
+||inaickoo.com^
+||inaltariaon.com^
+||inancukan.xyz^
+||inaneconstellationindistinct.com^
+||inanepercyfinancially.com^
+||inanityacromia.life^
+||inanitystorken.com^
+||inappropriateoutdoorsconfiguration.com^
+||inareputaonforha.com^
+||inaudiblesattruthfully.com^
+||inauguratehiddennegligence.com^
+||inauknceiwouldlikuk.info^
+||inbbredraxing.com^
+||inbdmaza.com^
+||inbdorenda.com^
+||inboldoreer.com^
+||inbornsodcharms.com^
+||incarnatepicturesque.com^
+||inchesfacing.com^
+||inchestverts.guru^
+||inchexplicitwindfall.com^
+||inchrepay.com^
+||incidentenglandtattoo.com^
+||incidentmerriment.com^
+||inclineexchange.com^
+||inclineflaming.com^
+||inclk.com^
+||incloak.com^
+||includemodal.com^
+||includeoutgoingangry.com^
+||inclusacharmed.com^
+||inclusadeicer.com^
+||incompatible-singer.pro^
+||incompleteshock.pro^
+||incompletethong.com^
+||incomprehensibleacrid.com^
+||incomptstress.uno^
+||inconceivableascertained.com^
+||inconsequential-skin.pro^
+||inconveniencepretendboost.com^
+||incorphishor.com^
+||increasingdeceased.com^
+||increasinglycockroachpolicy.com^
+||incurvedisagio.com^
+||indebtedatrocious.com^
+||indefinitelytonsil.com^
+||indefinitelyworkplacesimple.com^
+||indelicatepokedoes.com^
+||indelphoxom.com^
+||indexww.com^
+||indicatemellowlotion.com^
+||indicatordevotedriver.com^
+||indicesvestigetruck.com^
+||indictoutgain.com^
+||indigenousvarious.com^
+||indigenouswhoinformed.com^
+||indigestioninadmissible.com^
+||indigestionpious.com^
+||indignationmapprohibited.com^
+||indiiarsines.space^
+||indirectbronzecompany.com^
+||indirectlatitudewomb.com^
+||indirectlinkoxbow.com^
+||indiscreetless.com^
+||indispensablerespectable.com^
+||individualdavid.com^
+||indney.com^
+||indolentleader.com^
+||indooritalian.com^
+||indoorsbeliefgrew.com^
+||indraftcoft.digital^
+||induceresistbrotherinlaw.com^
+||induedabusive.casa^
+||indulgeperformance.com^
+||industrialforemanmovements.com^
+||industriouswounded.com^
+||inedibleproductiveunbelievable.com^
+||inediblewiderchuckled.com^
+||ineffectivepest.com^
+||ineriweism.top^
+||inertimpuredeadlock.com^
+||ineuntkilnman.digital^
+||inevitablestanddisplayed.com^
+||inexorablehopper.com^
+||inexpedienttributereschedule.com^
+||inexperiencedmingle.com^
+||inextricableaugmentcompelling.com^
+||infamouslimit.pro^
+||infantrycutting.com^
+||infantrywarden.com^
+||infaustsecond.com^
+||infectedably.com^
+||infectedrepentearl.com^
+||infeofhobbit.com^
+||inferiorface.com^
+||inferiorfreedom.com^
+||inferiorkate.com^
+||inferrig.com^
+||infesthazardous.com^
+||infestpaddle.com^
+||infindiasernment.com^
+||infinitelyrainmultiple.com^
+||infirmaryboss.com^
+||inflameemanent.cam^
+||inflationabstinence.com^
+||inflationbreedinghoax.com^
+||inflationmileage.com^
+||inflectedminimalbits.com^
+||inflectionquake.com^
+||infles.com^
+||inflictmistycarlos.com^
+||inflictrind.com^
+||influencedfable.com^
+||influencer2020.com^
+||influenzahabit.com^
+||infodonorbranch.com^
+||infopagleey.com^
+||infopicked.com^
+||informalequipment.pro^
+||informantbartonharass.com^
+||informcheck.net^
+||informcheck.uno^
+||informereng.com^
+||informeresapp.com^
+||infra.systems^
+||infractructurebiopsycircumstances.com^
+||infrashift.com^
+||infringementpeanut.com^
+||infringementseason.com^
+||infusesrhyptic.com^
+||ingasideline.com^
+||ingeneumps.com^
+||ingeniousestateinvolving.com^
+||ingforanythinga.com^
+||ingforthemoonheap.com^
+||inglunewly.com^
+||ingramony.com^
+||ingratitudemisty.com^
+||ingraveminever.com^
+||ingredientwritten.com^
+||ingseriegentsf.info^
+||inhabitantquestions.com^
+||inhabitkosha.com^
+||inhabitsurpassvia.com^
+||inhabityoungenter.com^
+||inhalebrinkrush.com^
+||inhaletroubledgentle.com^
+||inheresunlying.guru^
+||inheretherme.com^
+||inheritancepillar.com^
+||inheritedgeneralrailroad.com^
+||inherlearibine.digital^
+||inhonedgean.com^
+||initialbanisters.com^
+||initiallycoffee.com^
+||initiallycompetitionunderwear.com^
+||initiallydoze.com^
+||initiateadvancedhighlyinfo-program.info^
+||initiatebuffetstump.com^
+||initiateheavilycurrentinfo-product.info^
+||initue.com^
+||inized.com^
+||injectentreat.com^
+||injectlocum.com^
+||injectreunionshorter.com^
+||injuredripplegentleman.com^
+||injurg.com^
+||injurytomatoesputrefy.com^
+||injusticeamend.com^
+||inkestyle.net^
+||inkfeedmausoleum.com^
+||inkingleran.com^
+||inklestutted.com^
+||inklinkor.com^
+||inkornesto.com^
+||inkstorylikeness.com^
+||inktad.com^
+||inlandpiereel.com^
+||inmdcwkx.com^
+||inmespritr.com^
+||inminuner.com^
+||inncreasukedrev.info^
+||innessabigeat.space^
+||innity.net^
+||innocenceexpeditionsensation.com^
+||innocencescarcelymoreover.com^
+||innovationlizard.com^
+||innovationthinkingslick.com^
+||innyweakela.co^
+||inoculatebroadlyduke.com^
+||inoculateconsessionconsessioneuropean.com^
+||inoculateexplosionpostman.com^
+||inoffensivefitnessrancid.com^
+||inoradde.com^
+||inosinetimpana.com^
+||inourdreamsa.org^
+||inpage-push.com^
+||inpage-push.net^
+||inpagepush.com^
+||inpoursmorinda.website^
+||inputbarbing.life^
+||inputsrameous.life^
+||inputunstable.com^
+||inquietchronos.website^
+||inquiredcriticalprosecution.com^
+||inquiriesdishonest.com^
+||inquiryclank.com^
+||inrhyhorntor.com^
+||insamemograbi.space^
+||insanitynapoleon.com^
+||inscriptionafford.com^
+||inscriptionharm.com^
+||insectclothe.com^
+||insectsaw.com^
+||insectsmanners.com^
+||insecurepaint.pro^
+||insensitiveintegertransactions.com^
+||insertfend.com^
+||inservinea.com^
+||inshelmetan.com^
+||insidehoarse.com^
+||insideofnews.com^
+||insidious-glove.pro^
+||insightexpress.com^
+||insightexpressai.com^
+||insignificantretained.com^
+||insistent-worker.com^
+||insistinestimable.com^
+||insitepromotion.com^
+||insnative.com^
+||insolencemanipulative.com^
+||insolentviolation.com^
+||insomniacultural.com^
+||insomniadetrimentalneutral.com^
+||inspectorstrongerpill.com^
+||inspikon.com^
+||inspirationstarednope.com^
+||inspirecarriermagnetic.com^
+||inspxtrc.com^
+||insta-cash.net^
+||instaflrt.com^
+||install-check.com^
+||installlnow.com^
+||installscrayfishpenal.com^
+||instalmentshowernovice.com^
+||instancesflushedslander.com^
+||instancetonsil.com^
+||instantdollarz.com^
+||instantlyshrillblink.com^
+||instantlyurged.com^
+||instantnewzz.com^
+||instantrefused.com^
+||instantresp.com^
+||instantshingle.com^
+||instaruptilt.com^
+||insteadprincipleshearted.com^
+||instinctcringe.com^
+||instinctiveads.com^
+||instinctivecooler.com^
+||instinctivetheeexemplify.com^
+||institutehopelessbeck.com^
+||institutepigeonsfinger.com^
+||instituteplump.com^
+||institutionenrapturebags.com^
+||instraffic.com^
+||instructionluxuriant.com^
+||instructionwantsflew.com^
+||instructoralphabetoverreact.com^
+||instructorloneliness.com^
+||instructorstudied.com^
+||instrumenttactics.com^
+||insumber.com^
+||insurancehealth.info^
+||insurewaltz.com^
+||inswebt.com^
+||intcircue.digital^
+||intechads.com^
+||integralfashionable.com^
+||integralpickleatrocious.com^
+||integrityprinciplesthorough.com^
+||intellectualintellect.com^
+||intellibanners.com^
+||intelligenceadx.com^
+||intelligenceretarget.com^
+||intellipopup.com^
+||intellitxt.com^
+||intelstqkt.com^
+||intendedeasiestlost.com^
+||intendedoutput.com^
+||intentanalysis.com^
+||intentionallyathwart.com^
+||intentionsarson.com^
+||intentionsplacingextraordinary.com^
+||inter1ads.com^
+||interads1.com^
+||interbasevideopregnant.com^
+||interbuzznews.com^
+||interclics.com^
+||interd1.com^
+||interdfp.com^
+||interestededit.com^
+||interesting-vids.space^
+||interestingpics.space^
+||interestingvids.online^
+||interestingvids.space^
+||interestmoments.com^
+||interestsubsidereason.com^
+||interfereparagraphinterrogate.com^
+||interferepenetrate.com^
+||intergient.com^
+||intermediarymarkswe.com^
+||internal-heart.pro^
+||internalemotionincomprehensible.com^
+||internalpound.com^
+||internewsweb.com^
+||internslunk.com^
+||interpersonalskillse.info^
+||interposedflickhip.com^
+||interpretprogrammesmap.com^
+||inters1img.com^
+||intersads.com^
+||intersd2k.com^
+||intersectiondejectedfaraway.com^
+||intersectionweigh.com^
+||interst12.com^
+||interstitial-07.com^
+||interstitial-08.com^
+||interviewdegenerateperspective.com^
+||intimacyextinct.com^
+||intimateexhibitedcontempt.com^
+||intimatestraightharrow.com^
+||intimidatekerneljames.com^
+||intimidatingsinewhamper.com^
+||intlsquoosh.com^
+||intnative.com^
+||intnotif.club^
+||intorterraon.com^
+||intrafic22.com^
+||intriguingdate.net^
+||intrinechymous.com^
+||intro4ads.com^
+||introfykeeler.tech^
+||intrudesome.com^
+||intrusgride.com^
+||intuitionguffaw.com^
+||intuitiontrenchproduces.com^
+||intuitspisan.com^
+||inuapixndextq.xyz^
+||inuedidgmapla.com^
+||inurneddoggish.com^
+||invadedwormmillionaire.com^
+||invaderimmenseimplication.com^
+||invaluable-approach.com^
+||invass.com^
+||invast.site^
+||investmentstar.org^
+||investorequalityfrog.com^
+||investortirelimetree.com^
+||invibravaa.com^
+||invisiblepine.com^
+||invitearrange.com^
+||invitewingorphan.com^
+||involuntarypity.com^
+||involuntarysteadyartsy.com^
+||involveddone.com^
+||involvewalkingthick.com^
+||involvingsorrowful.com^
+||invordones.com^
+||invraisemblable.com^
+||inwraptsekane.com^
+||ioach.com^
+||ioadserve.com^
+||iociley.com^
+||iodewijker.xyz^
+||iodideeyebath.cam^
+||iodineshine.com^
+||ioffers.icu^
+||iogjhbnoypg.com^
+||ioiefyw.com^
+||ioiubby73b1n.com^
+||iokenattharmiinl.xyz^
+||ionakasulba.info^
+||ionakasulba.xyz^
+||ioniamcurr.info^
+||ionicsshelyak.com^
+||ionigravida.com^
+||ioniserpinones.com^
+||ionistkhaya.website^
+||ioniumentomic.com^
+||iononetravoy.com^
+||ionscormationwind.info^
+||ionwindonpetropic.info^
+||iopiopiop.net^
+||iopiopiop.org^
+||ioredi.com^
+||iornsfyhueev.com^
+||iorwe-qmf.com^
+||iovxhfavijyu.com^
+||ioward.com^
+||ioxffew.com^
+||ipales.com^
+||ipecacdecime.uno^
+||ipecacsafely.uno^
+||ipedeisasbeautif.com^
+||iphisslurbow.com^
+||iphonehub.info^
+||iphumiki.com^
+||ipjjtqfxxobprj.com^
+||ipkqfkzsmme.com^
+||ipmathematical.org^
+||ipodreevess.com^
+||ipredictive.com^
+||iprom.net^
+||ipromcloud.com^
+||ipsowrite.com^
+||iptautup.com^
+||iqcjuetaudtj.com^
+||iqfmvj.com^
+||iqimwsctvgbvqx.xyz^
+||iqkjrwf.com^
+||iqlpkca.com^
+||iqnevmje.com^
+||iqpkee.com^
+||iqtest365.online^
+||irbout.com^
+||ireced.com^
+||iredirect.net^
+||ireideauxdwh.com^
+||ireraisin.com^
+||irgvfdwicqerqfy.com^
+||irisaffectioneducate.com^
+||irishorridamount.com^
+||irizin.com^
+||irkantyip.com^
+||irkilgw.com^
+||irmmamksywbwt.com^
+||ironboe.com^
+||ironcladmemory.pro^
+||ironcladtrouble.com^
+||irondai.com^
+||ironena.com^
+||ironerswhse.digital^
+||ironforgemaster.top^
+||ironicfolks.com^
+||ironicnickraspberry.com^
+||ironjou.com^
+||ironmis.com^
+||ironthro5man.com^
+||ironymisterdisk.com^
+||iroufteg.net^
+||irousbisayan.com^
+||irradiateher.com^
+||irradiatestartle.com^
+||irrain.com^
+||irrationaldistress.com^
+||irregogham.com^
+||irrelevantassassinclaim.com^
+||irreparablewretchsurrogate.com^
+||irresistiblecommotion.com^
+||irresolutesewkin.com^
+||irries.com^
+||irrisoranemone.com^
+||irritateinformantmeddle.com^
+||irritating-standard.pro^
+||irritationcrayonchord.com^
+||irtya.com^
+||irtyf.com^
+||irvato.com^
+||isaicham.com^
+||isaishad.com^
+||isanikcieontak.xyz^
+||isanikcieontap.com.ua^
+||isawthenews.com^
+||isbnrs.com^
+||isbnyzpunkx.com^
+||isboost.co.jp^
+||iseatheadline.com^
+||isegeowrvnxorj.com^
+||iseoiknnqckto.xyz^
+||isgost.com^
+||ishedtotigai.info^
+||ishoawew.net^
+||isjratdcaanm.com^
+||islerobserpent.com^
+||isletachoisya.cam^
+||ismlks.com^
+||ismscoldnesfspl.info^
+||isnconcfiplu.xyz^
+||isoamidlaicism.com^
+||isobaresoffit.com^
+||isogenylingel.guru^
+||isohits.com^
+||isopodalionne.com^
+||isopticluckier.com^
+||isortflorent.com^
+||isparkmedia.com^
+||isqogumsuadas.com^
+||issomeoneinth.info^
+||istlnkbn.com^
+||istsldaheh.com^
+||isvnwxpoqgsgyy.com^
+||iswhatappyouneed.net^
+||iswhelectual.cc^
+||isymybwvzl.com^
+||isywjrtn.com^
+||itaisabirs.com^
+||italianforesee.com^
+||italyfeedingclimax.com^
+||itblisseyer.com^
+||itcameruptr.com^
+||itchinglikely.com^
+||itchy-storm.pro^
+||itchydesignate.com^
+||itchytidying.com^
+||itcleffaom.com^
+||itczebimbos.com^
+||itdise.info^
+||itecoust.com^
+||itemdangerously.com^
+||itemolgaer.com^
+||itemperrycreek.com^
+||iteneanrhina.com^
+||itenvalve.uno^
+||itespurrom.com^
+||itgiblean.com^
+||itheatmora.com^
+||itheatmoran.com^
+||ithergrouter.website^
+||itineraryborn.com^
+||itinerarymonarchy.com^
+||itineraryupper.com^
+||itjhnclotfwnem.com^
+||itnuzleafan.com^
+||itpatratr.com^
+||itphanpytor.club^
+||itponytaa.com^
+||itroggenrolaa.com^
+||itrustzone.site^
+||itseedotor.com^
+||itselfheater.com^
+||itskiddien.club^
+||itskiddoan.club^
+||itsvfputpvsqnb.com^
+||ittorchicer.com^
+||ittoxicroakon.club^
+||itupjhlxjyxacl.com^
+||itwasbrghttohi.com.ua^
+||itweedler.com^
+||itweepinbelltor.com^
+||itwkuouldhuke.info^
+||ityonatallco.info^
+||itzekromom.com^
+||iuc1.online^
+||iuc1.space^
+||iuclpbgxyfddk.xyz^
+||iudgoufuvzjf.com^
+||iuhmydixxk.xyz^
+||iunnrqcmup.com^
+||iupot.com^
+||iusxjykqehwdx.com^
+||iutur-ixp.com^
+||iuudbgnvgyswen.com^
+||iuvbjnzy.com^
+||iuwzdf.com^
+||ivanvillager.com^
+||ivedmanyyea.org^
+||ivhbtikwpr.com^
+||iviugcxgemuk.com^
+||ivjkdyrjjgxhch.com^
+||ivorcs.com^
+||ivoriedkolis.digital^
+||ivoryochroid.com^
+||ivstracker.net^
+||ivudsuco.net^
+||ivungurdoweg.com^
+||ivurtdymntb.com^
+||ivvedcoh.com^
+||ivvxmmhra.xyz^
+||ivxxitxcqc.xyz^
+||iwantuonly.com^
+||iwantusingle.com^
+||iwearthbharal.com^
+||iwfxgkixsoma.com^
+||iwhlzcevugtqy.com^
+||iwhngteekjixo.com^
+||iwhoosty.com^
+||iwistracks.com^
+||iwpswvi.com^
+||iwqensejhdzfq.com^
+||iwrkhphl.xyz^
+||iwrvrbklotfp.xyz^
+||iwuh.org^
+||iwwdcglj.com^
+||ixbwwwv.com^
+||ixhbroslylgz.com^
+||ixinst.com^
+||ixjrwczv.com^
+||ixkhaxpubqf.com^
+||ixkofjcwzlz.com^
+||ixnow.xyz^
+||ixnp.com^
+||ixqthii.com^
+||ixtlesamorist.guru^
+||ixtqrdiwd.com^
+||ixxljgh.com^
+||iy8yhpmgrcpwkcvh.pro^
+||iydppgpcz.com^
+||iyfbodn.com^
+||iyfnz.com^
+||iyfnzgb.com^
+||iyqaosd.com^
+||iywttijabeyb.com^
+||izapteensuls.com^
+||izavugne.com^
+||izitrckr.com^
+||izjzkye.com^
+||izlunwgx.com^
+||izrnvo.com^
+||izrvuofcrrhsm.com^
+||izzzlfrzmwtter.com^
+||j1t05wk6.cfd^
+||j45.webringporn.com^
+||j4a73n7v5k.com^
+||j6mn99mr0m2n.com^
+||j6rudlybdy.com^
+||ja2n2u30a6rgyd.com^
+||jaahrktlbd.com^
+||jaaqbbqbst.com^
+||jaavnacsdw.com^
+||jabfpjkzdxn.com^
+||jackalvindictive.com^
+||jackao.net^
+||jacketexpedient.com^
+||jacketzerobelieved.com^
+||jackpotbeautifulsulky.com^
+||jackpotpresents.com^
+||jacksonduct.com^
+||jaclottens.live^
+||jacmolta.com^
+||jacnrobv.com^
+||jacobsyrma.live^
+||jacqsojijukj.xyz^
+||jacsmuvkymw.com^
+||jactantsplodgy.com^
+||jadcenter.com^
+||jadedhide.pro^
+||jadqoc.xyz^
+||jads.co^
+||jaelejgwiu.xyz^
+||jaftouja.net^
+||jagged-yellow.pro^
+||jaggedthronelaxative.com^
+||jaggedunaccustomeddime.com^
+||jaggedunique.pro^
+||jaggiertridii.com^
+||jagice.uno^
+||jagqrhvcvoqjw.com^
+||jaigaivi.xyz^
+||jailabridge.com^
+||jainapse.com^
+||jainbagong.com^
+||jaireehu.net^
+||jakescribble.com^
+||jakeycorkage.digital^
+||jaletemetia.com^
+||jalewaads.com^
+||jaloppystudy.life^
+||jalouseshawano.com^
+||jalwhftxnl.com^
+||jambelegate.casa^
+||jambiyaputtied.digital^
+||jamchew.com^
+||jamdomn.pro^
+||jame3s67jo9yc4e.com^
+||jamminds.com^
+||jamokeuntress.com^
+||jamsoulsfriday.com^
+||jamstech.store^
+||jandaqwe.com^
+||janendark.life^
+||jangonetwork.com^
+||janitoraccrue.com^
+||januahotdogs.com^
+||januarydeliverywarfare.com^
+||januarysundayurgently.com^
+||janute.com^
+||janzmuarcst.com^
+||japact.com^
+||japanbros.com^
+||japanesereaphot.com^
+||japyxboii.space^
+||jaqwtyajwp.com^
+||jarguvie.xyz^
+||jarquizslash.com^
+||jarsools.xyz^
+||jarvispopsu.com^
+||jaseysbionomy.com^
+||jashautchord.com^
+||jasheest.xyz^
+||jaspercrozes.com^
+||jassidpanne.com^
+||jatomayfair.life^
+||jatosfluted.com^
+||jatostepa.com^
+||jatsekse.net^
+||jattepush.com^
+||jaubaibil.com^
+||jaubeebe.net^
+||jauchuwa.net^
+||jaumevie.com^
+||jaunty-cancel.pro^
+||java8.xyz^
+||javacript.tk^
+||javascriptcdnlive.com^
+||javgg.eu^
+||javmilk.org^
+||jawlookingchapter.com^
+||jawsspecific.com^
+||jaxnykbpev.com^
+||jaxxenpro.com^
+||jazzlowness.com^
+||jazzmoist.com^
+||jazzspeechlessarena.com^
+||jb7hvckszone.com^
+||jbalrqvennvka.top^
+||jbalrqvennvrl.top^
+||jbkelaamjanar.top^
+||jbkelaamjawnv.top^
+||jbkmskjeaevkne.xyz^
+||jbkwrkmdug.com^
+||jbm6c54upkui.com^
+||jbnznvnylnkyr.top^
+||jbnznvnylnqqy.top^
+||jbnznvnylnyjl.top^
+||jbrlsr.com^
+||jbrnmlmvnazey.top^
+||jbtul.com^
+||jbwiujl.com^
+||jc32arlvqpv8.com^
+||jcbyeqvstf.xyz^
+||jcdhgpqglpjwh.xyz^
+||jcedzifarqa.com^
+||jchklt.com^
+||jcigoiimudrzow.com^
+||jcovfmnlolsdsaa.com^
+||jcqueawk.xyz^
+||jcyunk2.com^
+||jczhjpollvc.com^
+||jd3j7g5z1fqs.com^
+||jdjxjelhrxy.com^
+||jdlmjessy.com^
+||jdmodr.com^
+||jdoeknc.com^
+||jdoqocy.com^
+||jdt8.net^
+||jdwhlqb.com^
+||jdxisgqcg.com^
+||jdxpaoojg.com^
+||jdyxpbaskvkyh.xyz^
+||jdzqdcpkbh.com^
+||jealouschallenge.pro^
+||jealousyimpostersophia.com^
+||jeannesurvival.com^
+||jeannezenith.com^
+||jeannvalmvvvr.top^
+||jeannvalmvvzv.top^
+||jeannvalmvwza.top^
+||jeansalterne.top^
+||jeanspurrcleopatra.com^
+||jeckear.com^
+||jeckoort.com^
+||jecoglegru.com^
+||jecorinsetover.guru^
+||jecromaha.info^
+||jedotsad.xyz^
+||jedrixurykpjl.com^
+||jeehaish.com^
+||jeehathu.com^
+||jeejujou.net^
+||jeekomih.com^
+||jeerinfluencemedical.com^
+||jeerouse.xyz^
+||jeersmummed.live^
+||jeersoddisprove.com^
+||jeeryounger.com^
+||jeeryzest.com^
+||jeeteo.com^
+||jeetyetmedia.com^
+||jeffstrategic.com^
+||jehobsee.com^
+||jeivreeultvgt.com^
+||jekmmlwnyzyjr.top^
+||jellifytayer.com^
+||jelllearnedhungry.com^
+||jellyhelpless.com^
+||jellyhopeless.com^
+||jellyprehistoricpersevere.com^
+||jelqr4dqeep7.com^
+||jeltoocm.xyz^
+||jelvsdxsdnqze.com^
+||jemonews.com^
+||jennyblockademark.com^
+||jennyunfit.com^
+||jennyvisits.com^
+||jenonaw.com^
+||jeopardizeflirting.com^
+||jeperdee.net^
+||jeqjawqoeraab.top^
+||jeribpupiled.com^
+||jerjrqqzmzkzy.top^
+||jerkarmlesspuppy.com^
+||jerkytaste.com^
+||jerridlarded.com^
+||jersit.com^
+||jerusalemcurve.com^
+||jerust.com^
+||jervinglycyls.com^
+||jesaifie.com^
+||jescyeet.xyz^
+||jessieemys.com^
+||jestbiases.com^
+||jestinvaderspeedometer.com^
+||jestthankfulcaption.com^
+||jesulf.com^
+||jesupe.com^
+||jetordinarilysouvenirs.com^
+||jetsowilk.com^
+||jettrujole.com^
+||jetx.info^
+||jewelbeeperinflection.com^
+||jewelstastesrecovery.com^
+||jewelyavoir.com^
+||jewgn8une.com^
+||jewhouca.net^
+||jewisk.com^
+||jewith.com^
+||jewlhtrutgomh.com^
+||jewscane.digital^
+||jewspa.com^
+||jezailmasking.com^
+||jeziaodqmy.com^
+||jf71qh5v14.com^
+||jfbrkbgvxwib.com^
+||jfedgbskofck.com^
+||jfjlfah.com^
+||jfmpafthtwuo.com^
+||jfoaxwbatlic.com^
+||jfthhbvpryrvbs.com^
+||jgdipcsviur.com^
+||jgdtnxkapkso.com^
+||jgfcgqivdpd.com^
+||jggvkisg.com^
+||jgqflgggex.com^
+||jgszymcphwcege.com^
+||jgydqhp.com^
+||jhdiujyjihnw.com^
+||jhfhdkhkh.site^
+||jhiekkjeyyfbj.com^
+||jhkfd.com^
+||jhoncj.com^
+||jhrfemourkojc.com^
+||jhtycugdphhhwh.com^
+||jhulubwidas.com^
+||jhxqfgbj.com^
+||jhzotqafwgb.com^
+||jibaeolia.com^
+||jibbarewarms.com^
+||jiffehxjwvpoefo.xyz^
+||jigdigtry.com^
+||jigglypedicab.com^
+||jighucme.com^
+||jignairy.com^
+||jigsawthirsty.com^
+||jiiglogwdkcqwou.xyz^
+||jijhkclur.com^
+||jikicotho.pro^
+||jikvcrikdvng.com^
+||jikzudkkispi.com^
+||jillbuildertuck.com^
+||jincanfohn.website^
+||jingenfirm.com^
+||jinjaoathful.uno^
+||jinterests-1.com^
+||jinxrussian.com^
+||jiokhvnqchnt.com^
+||jiordgxkpglzm.com^
+||jipo.io^
+||jirtesee.net^
+||jissingirgoa.com^
+||jistaumt.com^
+||jitanvlw.com^
+||jitigkvqf.com^
+||jittery-period.pro^
+||jitteryhire.pro^
+||jiuswcpdwgpwetf.com^
+||jiwire.com^
+||jizzarchives.com^
+||jizzensirrah.com^
+||jjaaybqjbnlaw.top^
+||jjaaybqjbnzny.top^
+||jjansomvfv.com^
+||jjcwq.site^
+||jjkwrqjklaaqa.top^
+||jjmbmkklzwvbv.top^
+||jjmxksqyfagljmg.com^
+||jjoewnxeqt.com^
+||jjqsdll.com^
+||jjqyqakarveb.com^
+||jjrvlrslb.com^
+||jjvlawfxpegqtny.com^
+||jjwmlaynwwbll.top^
+||jjwmlaynwwjlw.top^
+||jjygptw.com^
+||jk4lmrf2.de^
+||jkajyrkbvzmez.top^
+||jkbewmezjawqj.top^
+||jkdzimao.com^
+||jkha742.xyz^
+||jkkhzoiymjc.com^
+||jklbilitukyd.xyz^
+||jklpy.com^
+||jkls.life^
+||jkthlsrdhni.com^
+||jkttvpoxmk.com^
+||jkwxaryiaoof.com^
+||jkyybewqmnll.top^
+||jkzakzjwyolbl.top^
+||jkzlillsss.com^
+||jldbnjghezv.com^
+||jlkhaohgew.xyz^
+||jlmokzndbiafs.com^
+||jlmprtgl.com^
+||jltdgjqgtbfyg.com^
+||jltjgujdnyp.com^
+||jlufbcef.com^
+||jmaomkosxfi.com^
+||jmeeersdkmoir.xyz^
+||jmiqbfhoar.com^
+||jmpmedia.club^
+||jmpqkikcv.com^
+||jmrnews.pro^
+||jmrnpzbpqla.com^
+||jmvscgd.com^
+||jnbasajikmd.xyz^
+||jnhdmksj.top^
+||jnnbzmyqaekzj.top^
+||jnrtavp2x66u.com^
+||jnsgdaqsiqcumg.xyz^
+||jnxm2.com^
+||jnyyryjarlyyl.top^
+||joachoag.xyz^
+||joaglouwulin.com^
+||joastous.com^
+||joathaji.xyz^
+||joathath.com^
+||joathihandsr.xyz^
+||jobfilletfortitude.com^
+||joblouder.com^
+||jobmkewrymmvb.top^
+||jobsngeilvxm.com^
+||jobsyndicate.com^
+||jocauzee.net^
+||jocelynrace.com^
+||jodhpurrarish.digital^
+||jodroacm.com^
+||joereisp.xyz^
+||jogdied.com^
+||johamp.com^
+||johannesburg.top^
+||join-admaven.com^
+||joinelegancetitanic.com^
+||joiningcriminal.com^
+||joinpropeller.com^
+||joinsportsnow.com^
+||joint-bad.com^
+||jointmixture.pro^
+||jokebided.space^
+||jokrauda.com^
+||jolecyclist.com^
+||jollyembodyclassified.com^
+||jollyfloat.com^
+||jollyickysolely.com^
+||jollykeg.com^
+||jollyslendersquare.com^
+||joloanosinless.com^
+||joltidiotichighest.com^
+||joltouch.net^
+||joltperforming.com^
+||jomtingi.net^
+||jomvyhmfxqnvox.xyz^
+||jonaur.com^
+||joodoush.com^
+||joogivestou.com^
+||jookaureate.com^
+||jookouky.net^
+||joomgartiumnyih.com^
+||joomxer.fun^
+||joopaish.com^
+||jooptibi.net^
+||joorekbelyvjw.top^
+||joowkijejv.com^
+||jorbfstarn.com^
+||joredi.com^
+||jorttiuyng.com^
+||josephineravine.com^
+||josiebreathing.com^
+||josulu.xyz^
+||jotqmmf.com^
+||jotskuffieh.website^
+||jouaboe.com^
+||joukidles.life^
+||joupteni.xyz^
+||journeyembankmentsubjects.com^
+||jourohun.xyz^
+||jouteetu.net^
+||jouthee.com^
+||jouzoapi.com^
+||jovqyyqvvmjjj.top^
+||jowarblushed.space^
+||jowliercollude.com^
+||jowlishdiviner.com^
+||joxaviri.com^
+||joycreatorheader.com^
+||joyfulfearsome.com^
+||joygaskin.com^
+||joylessstarted.com^
+||joyorators.website^
+||joyous-concentrate.pro^
+||joyous-north.pro^
+||joyous-storage.pro^
+||joyouscreedweasel.com^
+||joyrodethyme.digital^
+||joyvowdig.com^
+||jozvmvxi.com^
+||jpdqpxoenctqbl.com^
+||jpesfzcjob.com^
+||jpgtrk.com^
+||jpivxtsxpkn.com^
+||jpmdwnhazw.com^
+||jpmldwvjqd.xyz^
+||jpovulldaghw.com^
+||jpzvrsuwdavpjw.com^
+||jqcyacoxrvada.com^
+||jqlqmeveax.com^
+||jqlumzbdtet.com^
+||jqmebwvmbzrz.top^
+||jqtree.com^
+||jquerycdn.host^
+||jqueryoi.com^
+||jqueryserve.org^
+||jqueryserver.com^
+||jrfkurohvql.xyz^
+||jrfwfwk.com^
+||jrilbcd.com^
+||jrkbnvkrvamky.top^
+||jrkkmpeqtlsawgf.com^
+||jrklavzamkby.top^
+||jrlxrrwgcszo.com^
+||jrnkmlrajnbnj.top^
+||jrpkizae.com^
+||jrrryblqkaejw.top^
+||jrrryblqkarqv.top^
+||jrrryblqkavqa.top^
+||jrtqaliyucgpaes.com^
+||js.j8jp.com^
+||js.manga1000.top^
+||js2json.com^
+||js7k.com^
+||jsadapi.com^
+||jscdn.online^
+||jscloud.org^
+||jscount.com^
+||jsdelvr.com^
+||jsfeedadsget.com^
+||jsfrfeuubna.com^
+||jsftfmegwcyhsed.com^
+||jsfuz.com^
+||jsmentry.com^
+||jsmjmp.com^
+||jsmpsi.com^
+||jsnncgz.com^
+||jsoctn9.com^
+||jsontdsexit.com^
+||jsontdsexit2.com^
+||jsretra.com^
+||jssearch.net^
+||jssiiamvbuqqkb.com^
+||jstatic.org^
+||jstclphsy.com^
+||jsukefgwjvbsue.com^
+||jswww.net^
+||jsyfqeynrvg.com^
+||jsyrynq.com^
+||jtdqxsfzi.com^
+||jtjtqar.com^
+||jtpgjihhix.com^
+||ju427bv7an9n.com^
+||juaqmic.com^
+||jubileeirresponsibilityforfeit.com^
+||jubnaadserve.com^
+||jubsaugn.com^
+||jubsouth.com^
+||juchartintime.space^
+||judale.com^
+||judasesmangler.com^
+||juddhi.com^
+||judgementcleftlocksmith.com^
+||judicated.com^
+||judicialfizzysoftball.com^
+||judicialleadingquiz.com^
+||judicialleasthandful.com^
+||judicious-feed.pro^
+||judicious-lay.pro^
+||judied.com^
+||judium.com^
+||judjetheminos.com^
+||judruwough.com^
+||jufjpwpmcc.com^
+||jugcontainer.com^
+||jugerfowells.com^
+||juggleeducationfirearm.com^
+||jugixgjqx.xyz^
+||jugnepha.xyz^
+||jugsmithecology.com^
+||juhece.uno^
+||juiceadv.com^
+||juiceadv.net^
+||juicyads.com^
+||juicyads.me^
+||juicycash.net^
+||jujaufur.net^
+||jujwhjmtidgp.com^
+||jukseeng.net^
+||julbhzbwhcivj.com^
+||julia-liz.com^
+||julidanroebuck.com^
+||jullyambery.net^
+||julolecalve.website^
+||julrdr.com^
+||julyhadchose.com^
+||julymedian2022news.com^
+||julynut.com^
+||jumbalslunched.com^
+||jumbitr.com^
+||jumbln.com^
+||jumboaffiliates.com^
+||jummashpt.com^
+||jumotic.com^
+||jump-path1.com^
+||jumperlaughter.com^
+||jumptap.com^
+||jumsowhi.xyz^
+||jungianoxamide.space^
+||juniorsalloquy.guru^
+||junipe3rus4virginiana.com^
+||junkeach.com^
+||junkieenthusiasm.com^
+||junkieswudge.com^
+||junmediadirect.com^
+||junmediadirect1.com^
+||junotherome.com^
+||juntfemoral.com^
+||juntre.com^
+||jupabwmocgqxeo.com^
+||juratoroutsees.uno^
+||jurced.com^
+||juricts.xyz^
+||jurisdictionasundercurls.com^
+||jurorstalar.uno^
+||jursp.com^
+||juryinvolving.com^
+||jusbertimla4ke2.com^
+||jussiwhauds.com^
+||just-news.pro^
+||justgetitfaster.com^
+||justificationevidentpensive.com^
+||justifiedatrociousretinue.com^
+||justifiedcharmsmoustache.com^
+||justinstubborn.com^
+||justonemorenews.com^
+||justpremium.com^
+||justrelevant.com^
+||justservingfiles.net^
+||jutegloa.net^
+||jutishskerry.uno^
+||jutprolificlax.com^
+||jutreconsiderhot.com^
+||jutyledu.pro^
+||juvenilearmature.com^
+||juyafctq.xyz^
+||jvaemllmeezyw.top^
+||jvbzzmnjezeba.top^
+||jvbzzmnjeznrw.top^
+||jvnvrqzvyvbmv.top^
+||jvnvrqzvyvbww.top^
+||jvnvrqzvyveqj.top^
+||jvnydntynmru.com^
+||jvrawodh.com^
+||jvsffrjutsax.com^
+||jvydtutqrmdx.com^
+||jvylyreyazmea.top^
+||jvzoupeh.com^
+||jwalf.com^
+||jweqtiikcx.com^
+||jwjxjuvrnkv.com^
+||jwnmnnnzrebqa.top^
+||jwnmnnnzreeyw.top^
+||jwrrwzrrwqmj.top^
+||jwrrwzrrwqwr.top^
+||jwt8e5vzc1.com^
+||jxhgcitcqmvv.com^
+||jxlpafdxbnhak.com^
+||jxpqjztcprvvb.com^
+||jxvilsjyrh.com^
+||jxybgyu.com^
+||jyarkinhechershedt.xyz^
+||jybaekajjmroq.top^
+||jydydmctzxcea.com^
+||jyfirjqojg.xyz^
+||jygotubvpyguak.com^
+||jyjhjopmq.com^
+||jyjmpatmgk.com^
+||jylemdzkh.com^
+||jynp9m209p.com^
+||jypugepha.pro^
+||jyrcqzjjachlk.com^
+||jyrypezzzd.com^
+||jyuirxswk.com^
+||jzbvpyvhus.com^
+||jzbvwqezlwyaz.top^
+||jzeapwlruols.com^
+||jzleekzkrwjll.top^
+||jzokkejmqrbyj.top^
+||jzqbyykbrrzvq.top^
+||jzqgyccwefd.com^
+||jzsqwkjvnz.com^
+||jztchllgpcrwu.com^
+||k-09mobiles.com^
+||k28maingeneral.com^
+||k4umr0wuc.com^
+||k55p9ka2.de^
+||k5zoom.com^
+||k68tkg.com^
+||kaascypher.com^
+||kaayqbkwnbqja.top^
+||kabarnaira.com^
+||kablic.com^
+||kabscarbide.com^
+||kabuut.com^
+||kadggriffshoyv.com^
+||kadwnhhistoli.xyz^
+||kafugo.xyz^
+||kagiti.club^
+||kagrooxa.net^
+||kahgifdsuiap.com^
+||kaicaica.com^
+||kaifiluk.com^
+||kaigaidoujin.com^
+||kailsfrot.com^
+||kaisaimy.net^
+||kaishepe.xyz^
+||kaiu-marketing.com^
+||kaiviwoo.com^
+||kaiwaipo.net^
+||kaizzz.xyz^
+||kakdgmn.com^
+||kalauxet.com^
+||kalganautographeater.com^
+||kalganpuppycensor.com^
+||kamachilinins.com^
+||kamalafooner.space^
+||kamamwvzmmzmy.top^
+||kamassirangers.tech^
+||kamnebo.info^
+||kamost.com^
+||kanatventose.com^
+||kangaroocame.com^
+||kangaroohiccups.com^
+||kanoodle.com^
+||kansanscichar.com^
+||kantarmedia.com^
+||kantiwl.com^
+||kappalinks.com^
+||kaqhfijxlkbfa.xyz^
+||kaqpnobbjzdwi.com^
+||karafutem.com^
+||karandacotised.com^
+||karayarillock.cam^
+||kareaumatzot.com^
+||karlhalved.com^
+||karoon.xyz^
+||karoup.com^
+||karpasbeamer.com^
+||karshagirdled.com^
+||karstsburnut.com^
+||kartingsoja.com^
+||karvarcloit.com^
+||kashacodeina.com^
+||kaslcuin.com^
+||kastafor.com^
+||katchouh.com^
+||katecontraction.com^
+||katecrochetvanity.com^
+||katerigordas.pro^
+||kathesygri.com^
+||katodaf.com^
+||katoptristhemirr.com^
+||katukaunamiss.com^
+||kaubapsy.com^
+||kauleeci.com^
+||kaurouby.net^
+||kaushoag.net^
+||kauvoaph.xyz^
+||kauzishy.com^
+||kavanga.ru^
+||kawescgm.com^
+||kaxnoyxs.com^
+||kayspeewees.com^
+||kazanbossterrifying.com^
+||kbao7755.de^
+||kbkewkjlqjqzr.top^
+||kbmaxbfpbfw.com^
+||kbmcpatd.com^
+||kbqebfcubeiaa.com^
+||kbqtuwoxgvth.xyz^
+||kbugxeslbjc8.com^
+||kbyjxhnweoi.com^
+||kbywyjnqrjaaa.top^
+||kcdn.xyz^
+||kdfjabv.com^
+||kdokgcf.com^
+||kdosimp.com^
+||kdpnmlygyagyx.com^
+||kdwuiulga.com^
+||kdxhsaaealyadm.com^
+||keajs.com^
+||keamateorski.xyz^
+||keapeiros.xyz^
+||kebyartopsman.website^
+||kecmuhot.net^
+||kedasensiblem.info^
+||kedasensiblemot.com^
+||kedasensiblemot.info^
+||keechavy.com^
+||keefeezo.net^
+||keegesta.com^
+||keegleedaphi.com^
+||keekeeps.com^
+||keelagemantels.com^
+||keen-slip.com^
+||keenyear.pro^
+||keepinfit.net^
+||keepingconcerned.com^
+||keepsosto.com^
+||keepsouh.com^
+||keeptaza.com^
+||keewoach.net^
+||keezoupe.net^
+||kegsandremembrance.com^
+||kehalim.com^
+||keidvetanda.com^
+||keidweneth.com^
+||keihel.com^
+||keikh.com^
+||kejiksay.net^
+||kekrouwi.xyz^
+||kektds.com^
+||kekw.website^
+||kelephoodmen.com^
+||kelopronto.com^
+||kelpmetorealiu.xyz^
+||kelreesh.xyz^
+||keltomental.cfd^
+||kempitepterin.com^
+||kendosliny.com^
+||kenduktur.com^
+||kennethemergedishearten.com^
+||kenningnatus.digital^
+||kenomal.com^
+||kenoscoulee.com^
+||kenskitscurt.com^
+||kentonproxied.com^
+||kentorjose.com^
+||kepersaonwho.org^
+||keraclya.com^
+||kerattogeist.com^
+||kerbayarugate.com^
+||kergaukr.com^
+||kernelindiscreet.com^
+||keroajum.xyz^
+||kerrystriola.com^
+||kertzmann.com^
+||kerumal.com^
+||kesevitamus.com^
+||kesmatic.com^
+||kesseolluck.com^
+||ketaquoted.com^
+||keteninfulae.com^
+||keterrehepren.xyz^
+||ketgetoexukpr.info^
+||ketheappyrin.com^
+||ketiverdisof.com^
+||ketlpsmt.com^
+||ketogenopsins.uno^
+||ketoo.com^
+||kettakihome.com^
+||kettleheedless.com^
+||kettlewharves.com^
+||keuktyouexpe.info^
+||kevelandean.com^
+||kewhulawi.com^
+||kewnemhpbmzkm.com^
+||kexojito.com^
+||keydawnawe.com^
+||keyimaginarycomprise.com^
+||keypush.net^
+||keyrolan.com^
+||keyrunmodel.com^
+||keywordblocks.com^
+||keywordsconnect.com^
+||kfareputfeab.org^
+||kffawlmqdahowhr.com^
+||kfjhd.com^
+||kfxkxyb.com^
+||kfxoqdivddwh.com^
+||kgdvs9ov3l2aasw4nuts.com^
+||kgfjrb711.com^
+||kglqjacmqmns.com^
+||kgnohpvawhef.com^
+||kgqipyttin.com^
+||kgroundandinte.net^
+||kgsehayyvhk.com^
+||kgua0o66bcw8.com^
+||khandragthresh.com^
+||khanjeeyapness.website^
+||khatexcepeded.info^
+||khayatarai.com^
+||khekwufgwbl.com^
+||khfpcxqwrauj.com^
+||khgacoucr.com^
+||khment.com^
+||khoslo.com^
+||khvphqpsl.com^
+||kiblahsbuenas.com^
+||kicationandas.info^
+||kickchecking.com^
+||kickoutpawky.com^
+||kidhumiliateessay.com^
+||kidnapbushesfuse.com^
+||kidsboilingbeech.com^
+||kidslinecover.com^
+||kifaunsu.com^
+||kifdngi.com^
+||kihudevo.pro^
+||kihwmtvzvi.com^
+||kikibobo.top^
+||kikoosso.net^
+||kikoucuy.net^
+||kiksajex.com^
+||kileysgreeney.com^
+||killernineteenthjoyous.com^
+||kilobelion.com^
+||kilometrealcoholhello.com^
+||kiltyyoginis.com^
+||kimbcxs.com^
+||kimberlite.io^
+||kimsacka.net^
+||kinasechebog.tech^
+||kindhearted-winter.pro^
+||kindjalquale.uno^
+||kindjalvitalic.com^
+||kindleantiquarian.com^
+||kindledownstairsskeleton.com^
+||kindledrummerhitch.com^
+||kindleinstance.com^
+||kindlelegalizebreaking.com^
+||kindleloving.com^
+||kindly-face.pro^
+||king3rsc7ol9e3ge.com^
+||kingads.mobi^
+||kingads.space^
+||kingrecommendation.com^
+||kingtrck1.com^
+||kingucoelect.website^
+||kingyonlendir.link^
+||kinkledunendly.com^
+||kinley.com^
+||kinoneeloign.com^
+||kinozo.xyz^
+||kinripen.com^
+||kioeasodamid.com^
+||kipapjhs.com^
+||kipeir.com^
+||kirkifyapache.website^
+||kirkmanhirple.com^
+||kirstyslape.uno^
+||kirteexe.net^
+||kirteexe.tv^
+||kirujh.com^
+||kistfulmafiosi.space^
+||kistfulmapach.life^
+||kistutch.net^
+||kistversets.com^
+||kitantiterhalac.xyz^
+||kitchencafeso.com^
+||kithudru.xyz^
+||kitnmedia.com^
+||kitrigthy.com^
+||kittlesoceania.com^
+||kitwkuouldhukel.xyz^
+||kityamurlika.com^
+||kiutletilapia.com^
+||kiweftours.com^
+||kiynew.com^
+||kizklqqj.com^
+||kizxixktimur.com^
+||kjanynlnwqqqy.top^
+||kjfhenoqfyfljo.com^
+||kjgzctn.com^
+||kjheamwouk.xyz^
+||kjisypvbsanmlem.xyz^
+||kjjbgclciiay.xyz^
+||kjklisbcab.com^
+||kjotkqyzxe.com^
+||kjqlmeaykennr.top^
+||kjsvvnzcto.com^
+||kjuftmdofmsrhq.com^
+||kjvaqbyebqkzy.top^
+||kkghcdvxdfvsq.com^
+||kkjrwxs.com^
+||kkjuu.xyz^
+||kkmacsqsbf.info^
+||kktxgytr.com^
+||kkuabdkharhi.com^
+||kkualfvtaot.com^
+||kkwfvwpyswjmvi.com^
+||kkyqrxqd.com^
+||klausmoplah.com^
+||klcpcsdoaelyjeh.com^
+||klcuxykjrfto.xyz^
+||klehewasades.org^
+||klenhosnc.com^
+||klikadvertising.com^
+||kliksaya.com^
+||klipmart.com^
+||kliqz.com^
+||klisejrwgir.com^
+||klixfeed.com^
+||klkus.xyz^
+||klmrgtvjeiea.com^
+||klonedaset.org^
+||kloperd.com^
+||kloshgriffe.com^
+||kloynfsag.com^
+||klrnhhzh.com^
+||klsdee.com^
+||kluauvass.com^
+||kmeqdnmgdkpn.com^
+||kmgzyug.com^
+||kmhfsrwqdu.com^
+||kmkixuha.com^
+||kmkthnyd.com^
+||kmlvdhequlpli.com^
+||kmmsfoqbhc.xyz^
+||kmmtxfwntcnyd.com^
+||kmodukuleqasfo.info^
+||kmokknjzsknr.com^
+||kmyunderthf.info^
+||knackseafood.com^
+||knaveavo.guru^
+||knawelgrx.com^
+||kncecafvdeu.info^
+||kncrnjspoxd.com^
+||kndaspiratioty.org^
+||kneeansweras.com^
+||kneescountdownenforcement.com^
+||kneesettingflashing.com^
+||knewwholesomecharming.com^
+||kneylhewould.xyz^
+||knightcharleyloudly.com^
+||knigm.com^
+||knigna.com^
+||knittedcourthouse.com^
+||knittingupidiotic.com^
+||knivesprincessbitterness.com^
+||knlrfijhvch.com^
+||knobpredestinecontradiction.com^
+||knobsomebodycheery.com^
+||knocia.com^
+||knockedstub.com^
+||knockerpokeys.space^
+||knockknockads.com^
+||knockoutantipathy.com^
+||knocksdriddle.website^
+||knockupchiniks.com^
+||knotprovided.com^
+||knottishhuntilc.com^
+||knottyactive.pro^
+||know-whos-spying.com^
+||know-whos-watch.com^
+||knowd.com^
+||knowfloor.com^
+||knowhowhuddler.tech^
+||knowledgepretend.com^
+||knownconsider.com^
+||knownwarn.com^
+||knowsdcollet.com^
+||knsnyfpnbyakn.xyz^
+||kntswafuos.com^
+||knubbyripens.uno^
+||knurryaikuchi.guru^
+||knutenegros.pro^
+||knvjwrwvaqvll.top^
+||knziesxepvaina.com^
+||koabouch.net^
+||koabukedosi.com^
+||koacojus.net^
+||koalababy.net^
+||koalaups.com^
+||koapsuha.net^
+||kobeden.com^
+||kocairdo.net^
+||kocaisin.xyz^
+||kochov.com^
+||kodagupinkoes.com^
+||kofirusy.pro^
+||kogutcho.net^
+||koindut.com^
+||kokanmokum.tech^
+||kokotrokot.com^
+||kolanx.com^
+||kolhozyhallo.com^
+||kolkwi4tzicraamabilis.com^
+||kollnkjxtg.xyz^
+||kolobusbeseam.space^
+||kolved.com^
+||komarchlupoid.com^
+||komoth.com^
+||konasaphie.com^
+||kongabsa.xyz^
+||kongry.com^
+||konradsheriff.com^
+||kontextua.com^
+||koocash.com^
+||koochooy.net^
+||koocoofy.com^
+||koogreep.com^
+||koojaiba.net^
+||koojaith.xyz^
+||kookarek.com^
+||koolawet.net^
+||koopheen.com^
+||koora2live.com^
+||koovapou.xyz^
+||koovaubi.xyz^
+||koowhoos.com^
+||kopehngtragen.com^
+||kopeukasrsiha.com^
+||koppiesgriever.com^
+||kopsooli.com^
+||koraboe.com^
+||koradu.com^
+||koranicseimas.com^
+||korarea.com^
+||korenle.com^
+||korexo.com^
+||korgala.com^
+||korgiejoinyou.com^
+||kormisl.com^
+||kornbulk1.com^
+||koronacineole.life^
+||korpeoe.com^
+||korporatefinau.org^
+||korrelate.net^
+||korunabevy.com^
+||kostprice.com^
+||kotikinar2ko8tiki09.com^
+||kotnvzp.com^
+||kotokoaedeagi.com^
+||kotucuzu.xyz^
+||koublxdh.com^
+||koucerie.com^
+||kougloar.com^
+||koujaups.xyz^
+||kouptufezi.com^
+||koureptu.xyz^
+||koustouk.net^
+||koutobey.net^
+||koxcsmmcealss.com^
+||kpdqdbyi.com^
+||kpkgkkbs.xyz^
+||kqhi97lf.de^
+||kqjpipl.com^
+||kqpdnmkkvuu.com^
+||kqqzyjmwqweze.top^
+||kqrcijq.com^
+||kqvrmebkljleb.top^
+||kqzyfj.com^
+||krankenwagenmotor.com^
+||krazil.com^
+||krcykddubkrsjm.xyz^
+||kremarkedone.com^
+||kreud.com^
+||krful.com^
+||krgukepers.org^
+||krilor.com^
+||krisydark.com^
+||krjxhvyyzp.com^
+||krkursist.com^
+||krnmayzjvzqve.top^
+||kronosspell.com^
+||krqjfirm.com^
+||krrtxbfbeey.top^
+||krubisstratic.com^
+||ksandtheirclean.org^
+||ksehinkitw.hair^
+||kshzlyvbaaa.com^
+||kssvsjfhxpzwfd.com^
+||kstvhknmhfppbf.com^
+||ksurpiwdayc.com^
+||ksykbucea.com^
+||kt5850pjz0.com^
+||ktfodkqypn.xyz^
+||ktkjmp.com^
+||ktlrhudvlsu.com^
+||ktmayxvea.com^
+||ktnukmtsbfko.com^
+||ktobedirectu.xyz^
+||ktrfzka.com^
+||ku2d3a7pa8mdi.com^
+||ku42hjr2e.com^
+||kubiadserv.icu^
+||kubicadza.xyz^
+||kubicserves.icu^
+||kuboohee.xyz^
+||kubrea.com^
+||kueezrtb.com^
+||kuezfqvztt.com^
+||kughouft.net^
+||kuglouhaize.com^
+||kugoucko.com^
+||kujugu.xyz^
+||kukrosti.com^
+||kukury2hf8nd09.com^
+||kultingecauyuksehi.info^
+||kultingecauyuksehinkitw.info^
+||kumpulblogger.com^
+||kumteerg.com^
+||kunidaotno.xyz^
+||kunvertads.com^
+||kupharlutetia.com^
+||kuqdtug.com^
+||kuqfudazkn.com^
+||kuqgrelpiamw.com^
+||kuqqwpxwaji.com^
+||kurlipush.com^
+||kursatarak.com^
+||kusciwaqfkaw.com^
+||kusidcfbb.com^
+||kussoscliffy.com^
+||kustaucu.com^
+||kutdbbfy.xyz^
+||kutjilsi.com^
+||kuttarmufti.com^
+||kuwhetsa.net^
+||kuwooque.com^
+||kuyncvkntfke.com^
+||kvaaa.com^
+||kvecc.com^
+||kveii.com^
+||kvemm.com^
+||kveww.com^
+||kvexx.com^
+||kvezz.com^
+||kvfdpbad.com^
+||kvjjhwkqhehkv.com^
+||kvkfxrrdjgq.xyz^
+||kvxxkbmby.com^
+||kw3y5otoeuniv7e9rsi.com^
+||kwaznkureluct.digital^
+||kwbmkwej.com^
+||kwhenspokento.info^
+||kwkkxztnjbr.com^
+||kwncbljexuc.com^
+||kwnmhplnqnfxh.xyz^
+||kwqelx.com^
+||kwqgprdmmwxyhb.com^
+||kwtnhdrmbx.com^
+||kwyuivlaychxe.com^
+||kxemrjbvsrd.com^
+||kxfwgqkuojcq.com^
+||kxhmyeedwkbgrh.xyz^
+||kxnaaxml.com^
+||kxnggkh2nj.com^
+||kxshyo.com^
+||kxwhiogrswx.com^
+||kybelefwrkmtt.xyz^
+||kychajuza.com^
+||kygftx.xyz^
+||kykenies.com^
+||kylecsw.uno^
+||kymagachu.pro^
+||kymirasite.pro^
+||kymnelboloman.com^
+||kyriod.com^
+||kyteblowzed.com^
+||kytesconge.com^
+||kytoonburlies.website^
+||kyufqusjrt.com^
+||kz2oq0xm6ie7gn5dkswlpv6mfgci8yoe3xlqp12gjotp5fdjxs5ckztb8rzn.codes^
+||kzcdgja.com^
+||kzkmmbrrzn.com^
+||kzknjdlalls.com^
+||kzsfip3v.cfd^
+||l-iw.de^
+||l1native.com^
+||l1vec4ms.com^
+||l3g3media.com^
+||l44mobileinter.com^
+||l45fciti2kxi.com^
+||l5games2fan.com^
+||la-la-moon.com^
+||la-la-sf.com^
+||la3c05lr3o.com^
+||labadena.com^
+||labeldollars.com^
+||laborrend.com^
+||labortiontrifee.com^
+||labourerindicator.com^
+||labourermarmotgodmother.com^
+||labourmuttering.com^
+||labporno.com^
+||labsappland.com^
+||labsoacu.com^
+||lacertfeedlot.com^
+||lackeysstouty.com^
+||lackgoodwillmagnet.com^
+||lacquerpreponderantconsist.com^
+||lacquerreddeform.com^
+||ladbrokesaffiliates.com.au^
+||ladiathdefinishe.com^
+||ladnet.co^
+||ladnova.info^
+||ladsabs.com^
+||ladsans.com^
+||ladsanz.com^
+||ladsats.com^
+||ladsatz.com^
+||ladsblue.com^
+||ladsdown.com^
+||ladsecs.com^
+||ladsecz.com^
+||ladsims.com^
+||ladsips.com^
+||ladsipz.com^
+||ladskis.com^
+||ladskiz.com^
+||ladsp.com^
+||ladthereisysom.com^
+||laeiwbkt.com^
+||laf1ma3eban85ana.com^
+||lafastnews.com^
+||laggerozonid.website^
+||laharal.com^
+||lahemal.com^
+||laichook.net^
+||laidapproximatelylacerate.com^
+||laimroll.ru^
+||lainaumi.com^
+||lairdsnorthen.store^
+||laivue.com^
+||laiwhost.net^
+||lajjuqamcwax.com^
+||lajouly.com^
+||lakequincy.com^
+||lakfbvoskxlc.com^
+||lakvandula.com^
+||lalaping.com^
+||lalapush.com^
+||lalerent.site^
+||lamberslucina.website^
+||lambersoultre.website^
+||lambingsyddir.com^
+||lambu.info^
+||lamburnsay.live^
+||lamdanorelin.life^
+||lamdensnip.com^
+||lame7bsqu8barters.com^
+||lamellaweevily.com^
+||lamesinging.com^
+||lameterthenhep.com^
+||laminarrailage.com^
+||lammasbananas.com^
+||lampschintzy.com^
+||lanaisgoll.com^
+||lanatesourock.uno^
+||landelcut.com^
+||landforgreatapp.com^
+||landitmounttheworld.com^
+||landmarkfootnotary.com^
+||landnewseasy.com^
+||landscapeuproar.com^
+||landslidechoreloft.com^
+||landupoatour.com.ua^
+||landupoatouwe.xyz^
+||landwaycru.com^
+||lanentablelanentablefantasy.com^
+||languewauchts.com^
+||languishnervousroe.com^
+||lanistaads.com^
+||lanksnail.com^
+||lankychaosrun.com^
+||lanopoon.net^
+||lanqbzawvmwe.top^
+||lanqbzawvymy.top^
+||lansukse.xyz^
+||lanternpossibly.com^
+||lantodomirus.com^
+||laoosmesis.com^
+||lapblra5do4j7rfit7e.com^
+||lapbscpgazh.com^
+||lapowed.com^
+||lapre28rmcat2.com^
+||lapsebreak.com^
+||laptweakbriefly.com^
+||lapypushistyye.com^
+||laquearhokan.com^
+||laqwnrazvywaz.top^
+||larasub.conxxx.pro^
+||larchesleatman.guru^
+||larchesrotates.com^
+||lardspropugn.com^
+||lardyirreproachabledeserve.com^
+||larentisol.com^
+||largedoubly.com^
+||largepeering.com^
+||larkyabandum.com^
+||larontale.com^
+||larrenpicture.pro^
+||larsepso.xyz^
+||larundadozily.com^
+||larvpydqmwvt.com^
+||las4srv.com^
+||laserdrivepreview.com^
+||lasosignament.com^
+||lassampy.com^
+||lassistslegisten.com^
+||last-actor.pro^
+||lasticalsdeb.xyz^
+||lasubqueries.com^
+||latelypillar.com^
+||lateralexamination.com^
+||lateralphonesecurity.xyz^
+||laterincessant.com^
+||latest-news.pro^
+||latestgrace.com^
+||latestsocial.com^
+||latheendsmoo.com^
+||lathilusted.top^
+||latinchiniks.digital^
+||latinnathathem.com^
+||latkelotong.top^
+||latonaheyday.space^
+||latrinehelves.com^
+||latternarcoticbullet.com^
+||laudianauchlet.com^
+||laudulut.com^
+||laughbuckle.com^
+||laughedaffront.com^
+||laughteroccasionallywarp.com^
+||lauglaph.net^
+||laugoust.com^
+||laugue.com^
+||laugus.com^
+||lauhefoo.com^
+||lauhoosh.net^
+||laukaivi.net^
+||launchbit.com^
+||laundawaits.com^
+||launderzeroed.tech^
+||laundrydesert.com^
+||laurieinevitablyhistorian.com^
+||lauriestatuestroll.com^
+||lauroneuplit.life^
+||laushoar.xyz^
+||lausoudu.net^
+||lauthana.net^
+||lavando2scas1hh1.com^
+||lavatorybrandnew.com^
+||lavatorydownybasket.com^
+||lavatoryhitschoolmaster.com^
+||laversleopold.guru^
+||lavish-brilliant.pro^
+||lavishnessoverboard.com^
+||lavishvanish.com^
+||lawbooktumbaki.uno^
+||lawcmabfoqal.com^
+||lawishkukri.com^
+||lawsaddthoroughfare.com^
+||lawunfriendlyknives.com^
+||lawyerceasing.com^
+||laxallenopposed.com^
+||laxativepermissiblesensation.com^
+||laydcilck.com^
+||layer-ad.org^
+||layerloop.com^
+||layerpearls.com^
+||layzvgxgodnv.com^
+||lazmblmywqjyb.top^
+||lazypeacefullyutterly.com^
+||lbbxuenncq.com^
+||lbwjqrtxeeriap.com^
+||lbxcnbrczmmp.com^
+||lby2kd27c.com^
+||lcdtilth.uno^
+||lcentntel.com^
+||lcfooiqhro.com^
+||lcjiusbyqfpdo.com^
+||lcloperoxeo.xyz^
+||lcmbppikwtxujc.xyz^
+||lcswbwinvhzm.com^
+||lcvdvyqpewwhllt.com^
+||lcwoewvvmhj.com^
+||ld.myrciawaapa.com^
+||ldehffofpeqr.com^
+||ldforeyesheha.info^
+||ldimnveryldgittl.com.ua^
+||ldimnveryldgitwe.xyz^
+||ldisgmftfxanwb.com^
+||ldlikukemyfueuk.info^
+||ldpiecesonth.xyz^
+||ldrenandthe.org^
+||ldrsvmkajnzx.com^
+||ldthinkhimun.com^
+||ldtscklwyxc.com^
+||lduhtrp.net^
+||lead1.pl^
+||leadadvert.info^
+||leadbolt.net^
+||leadcola.com^
+||leadenabsolution.com^
+||leadensought.com^
+||leading-fishing.pro^
+||leadingindication.pro^
+||leadingservicesintimate.com^
+||leadmediapartners.com^
+||leadsecnow.com^
+||leadsleap.net^
+||leadzu.com^
+||leadzupc.com^
+||leadzutw.com^
+||leafminefield.com^
+||leafpear.com^
+||leagent.info^
+||leakcocoonfooting.com^
+||leakfestive.com^
+||leakypatgoo.com^
+||leansometime.com^
+||leanunderstatement.com^
+||leanwhitepinafo.org^
+||leapretrieval.com^
+||learningproportion.com^
+||learntinga.com^
+||leaseholderbarbcompact.com^
+||leashmotto.com^
+||leathtexactlyci.com^
+||leatmansures.com^
+||leavebumpwrinkle.com^
+||leavelicencetoenail.com^
+||leavenstogated.cfd^
+||leaveoverwork.com^
+||leaveundo.com^
+||leavil.com^
+||leavilysover.site^
+||leavingboth.com^
+||lebinaphy.com^
+||lecythleche.website^
+||ledaoutrush.com^
+||ledgesprimely.com^
+||ledhatbet.com^
+||ledslevier.com^
+||leeante.com^
+||leebisuk.xyz^
+||leechdesperatelymidterm.com^
+||leechiza.net^
+||leegaroo.xyz^
+||leesecobourg.com^
+||leetaipt.net^
+||leethalo.net^
+||leetmedia.com^
+||leewayjazzist.com^
+||leewayrambong.com^
+||leezeemu.com^
+||leezoama.net^
+||leffeshumoury.xyz^
+||leforgotteddisg.info^
+||leftempower.com^
+||leftiesseem.com^
+||legalavouch.com^
+||legcatastrophetransmitted.com^
+||legely.com^
+||legendadmiration.com^
+||legendbrowsprelude.com^
+||legendeducationalprojects.com^
+||legerikath.com^
+||leggraduate.com^
+||leggygagbighearted.com^
+||leghis.com^
+||leginsi2leopard1oviy1hf.com^
+||legitimatemess.pro^
+||legmcwfok.com^
+||legpullbetorn.com^
+||legrah.com^
+||legrea.com^
+||legreeft.xyz^
+||legxrhrrb.xyz^
+||lehebraverooper.xyz^
+||lehechapunevent.com^
+||lehephubu.com^
+||lehtymns.com^
+||lehvxwciysoac.com^
+||leiasedofold.xyz^
+||leisengr.com^
+||leisurebrain.com^
+||leisureinhibitdepartment.com^
+||leisurelyeaglepestilent.com^
+||leisurelyparoleexcitedly.com^
+||leisurelypizzascarlet.com^
+||lemelstrikes.cfd^
+||lementwrencespri.info^
+||lemetri.info^
+||lemitsuz.net^
+||lemmaheralds.com^
+||lemmataoutsoar.com^
+||lemondependedadminister.com^
+||lemonicecold.org^
+||lemotherofhe.com^
+||lemouwee.com^
+||lempeehu.xyz^
+||lengtikto.xyz^
+||lenkmio.com^
+||lenmit.com^
+||lenopoteretol.com^
+||lenscupcakeproperty.com^
+||lentculturalstudied.com^
+||lenthyblent.com^
+||leonbetvouum.com^
+||leonidwolvers.com^
+||leonodikeu9sj10.com^
+||leoyard.com^
+||lepetitdiary.com^
+||lephaush.net^
+||lepiotaspectry.com^
+||leptaasellus.digital^
+||leqjnmmyqtb.com^
+||lerrdoriak.com^
+||lesionspalla.com^
+||leskdywzbfk.com^
+||lesoocma.net^
+||lessite.pro^
+||lessonhumoral.uno^
+||letchymendole.website^
+||leteer.com^
+||letitnews.com^
+||letitredir.com^
+||letopreseynatc.org^
+||letqejcjo.xyz^
+||letsbegin.online^
+||letstry69.xyz^
+||letterslamp.online^
+||letterwolves.com^
+||leucan3thegm6um.com^
+||leukemianarrow.com^
+||levajarool.com^
+||levelbraid.com^
+||levellinkedgrant.com^
+||levemyiasis.tech^
+||leveragebestow.com^
+||leveragetypicalreflections.com^
+||levityprogramming.com^
+||levmtppgzoq.com^
+||levulicbenday.digital^
+||levulicdiamins.com^
+||levulinmoble.space^
+||levyteenagercrushing.com^
+||lewdlygrips.top^
+||lexemeowhere.digital^
+||lexicoggeegaw.website^
+||lfeaqcozlbki.com^
+||lfewvebxzt.com^
+||lffsnhwhxnqn.com^
+||lfnwqrghxqrqb.com^
+||lfstmedia.com^
+||lfsuigdrtsszog.com^
+||lfufujhxmy.com^
+||lfwujowkcf.com^
+||lgbxelnukhsil.xyz^
+||lgdmconwvygoo.com^
+||lgfiufyaycsh.com^
+||lghqdjhilj.com^
+||lgkglbzyb.com^
+||lgqqhbnvfywo.com^
+||lgse.com^
+||lgtdkpfnor.com^
+||lgviqkrimvmy.xyz^
+||lgwddyouxxwd.com^
+||lgyxxxlcsgwgfg.xyz^
+||lhbhibkuchmnxw.com^
+||lhecbmq.com^
+||lheoutn.com^
+||lhioqxkralmy.com^
+||lhiswrkt.com^
+||lhmos.com^
+||li.blogtrottr.com^
+||li2meh6eni3tis.com^
+||liadinfqfjmc.xyz^
+||liadm.com^
+||liaisondegreedaughters.com^
+||liambafaying.com^
+||liambahaloed.com^
+||liaoptse.net^
+||libbetpalooka.life^
+||libcdn.xyz^
+||libedgolart.com^
+||libedt.com^
+||libelloushopedlearned.com^
+||libelpreferred.com^
+||libelreader.com^
+||libeph.com^
+||liberaumil.com^
+||libertycdn.com^
+||libertystmedia.com^
+||libihimu.com^
+||librariandemocrattoss.com^
+||librariessunflower.com^
+||libsloppier.guru^
+||libyansdulled.com^
+||licantrum.com^
+||licenceattribute.com^
+||licenseelegance.com^
+||licereason.space^
+||lichtpass.com^
+||lickinggetting.com^
+||lickingimprovementpropulsion.com^
+||licmiwot.com^
+||licted.com^
+||liddenlywilli.org^
+||liddingremorse.digital^
+||lidjetsyak.com^
+||lidlesscowedly.com^
+||lidsaich.net^
+||lie2anyone.com^
+||liedebris.com^
+||lieforepawsado.com^
+||liegelygosport.com^
+||lieutenantfurther.com^
+||lievel.com^
+||lifeabsolution.com^
+||lifeimpressions.net^
+||lifemoodmichelle.com^
+||lifeporn.net^
+||lifesoonersoar.org^
+||lifestyleheartrobust.com^
+||lifetds.com^
+||lifetimeroyaltybestial.com^
+||liffic.com^
+||lifiads.com^
+||lifict.com^
+||lifoll.com^
+||liftdna.com^
+||liftedd.net^
+||liftmenpartes.com^
+||ligatessuspend.top^
+||ligatus.com^
+||lighes.com^
+||lightfoot.top^
+||lightlybreathlesspronunciation.com^
+||lightningbarrelwretch.com^
+||lightningcast.net^
+||lightningly.co^
+||lightssyrupdecree.com^
+||ligninenchant.com^
+||ligninsorra.website^
+||ligulaeideated.guru^
+||likeads.com^
+||likecontrol.com^
+||likedpatpresent.com^
+||likedstring.com^
+||likenesscollecting.com^
+||likenewvids.mom^
+||likenewvids.online^
+||likidn.com^
+||liktufmruav.com^
+||lilacbalak.top^
+||lilacdefencelessroyal.com^
+||lilacsloppy.com^
+||liliy9aydje10.com^
+||lilureem.com^
+||lilysummoned.com^
+||limbcoastlineimpetuous.com^
+||limberkilnman.cam^
+||limeclassycaption.com^
+||liminechests.com^
+||limitagesdidjet.site^
+||limitationvolleyballdejected.com^
+||limitbrillianceads.com^
+||limitesrifer.com^
+||limitlessexterminator.com^
+||limitsillusive.com^
+||limoners.com^
+||limorev.com^
+||limosiwooable.com^
+||limpattemptnoose.com^
+||limpedanychia.com^
+||limpingpick.com^
+||limpishdroning.com^
+||limpomut.com^
+||limurol.com^
+||lin01.bid^
+||lindasmensagens.online^
+||linearmummy.com^
+||linearsubdued.com^
+||linedprocurator.com^
+||linedpuzzle.com^
+||linendoubtful.com^
+||linendrink.com^
+||linensephraim.com^
+||linerslutrine.guru^
+||lingamretene.com^
+||lingerincle.com^
+||lingoumboylike.website^
+||lingrethertantin.com^
+||lingyknubby.com^
+||linicom.co.uk^
+||liningreduction.com^
+||linkbuddies.com^
+||linkchangesnow.com^
+||linkedassassin.com^
+||linkedprepenseprepense.com^
+||linkeinvitable.site^
+||linkelevator.com^
+||linkev.com^
+||linkexchange.com^
+||linkmanglazers.com^
+||linkmepu.com^
+||linkoffers.net^
+||linkonclick.com^
+||linkredirect.biz^
+||linkreferral.com^
+||linksecurecd.com^
+||lintensciurid.top^
+||lintfeintshindig.com^
+||lionelimburse.com^
+||lionesssupercatering.com^
+||lionporcelain.com^
+||lipidicchaoush.com^
+||lippedabyssal.com^
+||lipsate.com^
+||liqenoftcgfqw.com^
+||liquidapprovaltar.com^
+||liquidatelusciousharriet.com^
+||liquidfire.mobi^
+||liquorsref.com^
+||lirateblister.com^
+||lirdooch.xyz^
+||lispingwraths.space^
+||list-ads.com^
+||listeraislatory.site^
+||listfulhymnals.website^
+||listguineaelementary.com^
+||listlessoftenkernel.com^
+||liteappmagazin.com^
+||literacyneedle.com^
+||literacysufficientlymicroscope.com^
+||literalbackseatabroad.com^
+||literalcorpulent.com^
+||literallisten.com^
+||literalseedsamnesty.com^
+||literaryfledlitter.com^
+||literatureheartburnwilling.com^
+||literaturehogwhack.com^
+||literatureunderstatement.com^
+||literpeore.com^
+||lithelytwick.com^
+||littlecdn.com^
+||littlecutecats.com^
+||littlecutedogs.com^
+||littlecutelions.com^
+||littleneptunenews.com^
+||littlmarsnews22.com^
+||litudy.com^
+||lituusmaunge.website^
+||litvp.com^
+||liupoaa.com^
+||live-a-live.com^
+||liveleadtracking.com^
+||livelihoodpracticaloperating.com^
+||livelycontributorvariations.com^
+||livelyfemales.com^
+||liverbarrelrustle.com^
+||livestockfeaturenecessary.com^
+||livestormy.com^
+||livezombymil.com^
+||livid-inspector.com^
+||lividn.com^
+||lividtrash.pro^
+||livrfufzios.com^
+||livyersremoval.com^
+||liwnffsxdhn.com^
+||lixnirokjqp.com^
+||lixsbdifa.com^
+||lizapaisan.com^
+||lizebruisiaculi.info^
+||lizziefullrounded.com^
+||ljlbzdqznogl.com^
+||ljlmzblvzerj.top^
+||ljokijpwtkwib.com^
+||ljyajgjvuv.com^
+||ljykyxgp.com^
+||lkbnneknzkjw.top^
+||lkbnneknzrne.top^
+||lkcoffe.com^
+||lkdazrtkame.com^
+||lkdvvxvtsq6o.com^
+||lkhmkmhlqst.xyz^
+||lkjgdyhtdrnau.com^
+||lkjkbjnalnqnb.top^
+||lkjoncgixi.com^
+||lkkmnudvvx.com^
+||lkkrmarvynlqz.top^
+||lkkrmarvynlyn.top^
+||lklofubgk.com^
+||lkpmprksau.com^
+||lkqd.net^
+||lkqpxhw.com^
+||lksbnrs.com^
+||lkzlambkzljee.top^
+||lkzlambkzllaz.top^
+||llagomxvwlejo.com^
+||llantynethebrav.xyz^
+||lleadupthere.xyz^
+||llevenmanis.xyz^
+||llmeocaptainh.com^
+||llpnrfplbkoalts.com^
+||llq9q2lacr.com^
+||llqqhwfjtdtvnt.com^
+||llthwkoqlxwajb.com^
+||lltyfiqsdgsvnr.xyz^
+||lludd-ize.com^
+||lluwrenwsfh.xyz^
+||llvlzvrwkoaqm.top^
+||llwcfovpl.com^
+||llyighaboveth.com^
+||llykjmzqkzkbr.top^
+||lmalyjywqlwvk.top^
+||lmaynnkjbbjbb.top^
+||lmaynnkjbbqrz.top^
+||lmekamrykbbjn.top^
+||lmekamrykbbky.top^
+||lmjwqbjmkrzyw.top^
+||lmmpjhvli.com^
+||lmn-pou-win.com^
+||lmnrorgeummvsqe.com^
+||lmp3.org^
+||lmqowtvu.com^
+||lmvrjajerrbwv.top^
+||lnabew.com^
+||lnbswijsipf.com^
+||lncfuqbgpnmxm.xyz^
+||lnhdlukiketg.info^
+||lnjdmsbyytwl.com^
+||lnjmaymlmnkyn.top^
+||lnk8j7.com^
+||lnkrdr.com^
+||lnkvv.com^
+||lnkyqvkyznkvz.top^
+||lntriguingdate.net^
+||lntrigulngdates.com^
+||lnvabjwmrlmzb.top^
+||lnzqmaqzjlnnw.top^
+||lo8ve6ygour3pea4cee.com^
+||loachesmanjeri.space^
+||loadercdn.com^
+||loading-resource.com^
+||loadingscripts.com^
+||loadingwait.com^
+||loadlatestoverlyinfo-program.info^
+||loafplaceunchanged.com^
+||loaglait.com^
+||loaire.com^
+||loajawun.com^
+||loanonionbidding.com^
+||loastees.net^
+||loathederava.uno^
+||loathepimpery.com^
+||loatheskeletonethic.com^
+||loathynay.com^
+||loazezoo.net^
+||lobby-x.eu^
+||lobipedholw.space^
+||loboclick.com^
+||lobosahispa.digital^
+||lobsterbusily.com^
+||lobsterpopcorn.com^
+||lobsterredress.com^
+||local-hot-dates.com^
+||localadbuy.com^
+||localedgemedia.com^
+||locallyhastefowl.com^
+||localsnaughty.com^
+||locandalorries.com^
+||locatioiranic.digital^
+||lockdowncautionmentally.com^
+||lockerdomecdn.com^
+||lockersatelic.cam^
+||lockerstagger.com^
+||locketarloup.com^
+||locketthose.com^
+||lockingadmitted.com^
+||lockingvesselbaseless.com^
+||lockperseverancebertram.com^
+||lockramnombles.life^
+||locksstruck.com^
+||locomotiveconvenientriddle.com^
+||loculusgerara.digital^
+||locusflourishgarlic.com^
+||locustmartperiodic.com^
+||locusupsetting.com^
+||lodder6.biz^
+||lodgedynamitebook.com^
+||lodroe.com^
+||lofkxokqkf.com^
+||loftsbaacad.com^
+||loftychord.com^
+||lofvkxaqsw.com^
+||loganfeels.com^
+||logicdate.com^
+||logicorganized.com^
+||logilyavie.digital^
+||loglabitrufly.top^
+||loglaupt.com^
+||lognegee.com^
+||logystowtencon.info^
+||loinpriestinfected.com^
+||loketsaucy.com^
+||lokinatoer5.com^
+||loktrk.com^
+||lolco.net^
+||lologhfd.com^
+||lolsefti.com^
+||lonelinessapp.com^
+||lonfilliongin.com^
+||longeargloving.com^
+||longerbuttonamendment.com^
+||longestwaileddeadlock.com^
+||longingarsonistexemplify.com^
+||longlakeweb.com^
+||loniil.com^
+||lonits.com^
+||lonreddone.com^
+||lontegismftvnf.com^
+||looceemu.net^
+||loodoost.net^
+||loogreem.xyz^
+||loohiwez.net^
+||lookandfind.me^
+||lookedpieter.uno^
+||lookinews.com^
+||lookoutboccies.com^
+||lookruler.com^
+||looksblazeconfidentiality.com^
+||looksthrilled.com^
+||lookujie.net^
+||lookypeacing.uno^
+||loolowhy.com^
+||looluchu.com^
+||loomlarynx.com^
+||loomspreadingnamely.com^
+||loonquan.com^
+||loopanews.com^
+||loopingperoral.com^
+||loopme.me^
+||loopoohy.com^
+||loopr.co^
+||loorydewdrop.com^
+||looscreech.com^
+||loosehandcuff.com^
+||loosenoutfit.com^
+||lootexhausted.com^
+||lootexport.com^
+||loothoko.net^
+||lootynews.com^
+||lopqrx.xyz^
+||lopsidedmine.pro^
+||lopzitpup.com^
+||lorageiros.com^
+||loralana.com^
+||lorcgnziipstq.com^
+||lordhelpuswithssl.com^
+||lorgnonanvils.top^
+||lormeryacarari.website^
+||lorrylips.com^
+||lorsreatas.guru^
+||lorybnfh.com^
+||losercurt.com^
+||loshrhaphae.com^
+||losingninth.com^
+||losingoldfry.com^
+||losingsplowter.com^
+||lositz.com^
+||lostdormitory.com^
+||lostinfuture.com^
+||lotclergyman.com^
+||lotionfortunate.com^
+||lotosmarkkaa.com^
+||lotreal.com^
+||lotteryaffiliates.com^
+||lotteryhibernateauthorized.com^
+||loucegle.net^
+||louchaug.com^
+||louchees.net^
+||loudmemory.pro^
+||louisaprocedureegoism.com^
+||loukoost.net^
+||loulauzo.com^
+||louloapi.com^
+||loulouly.net^
+||loungeagain.com^
+||loungebearing.com^
+||loungetackle.com^
+||lounooch.net^
+||lourdoueisienne.website^
+||lousedsomal.com^
+||louses.net^
+||lousyfastened.com^
+||loutedpewing.com^
+||loutishsilents.com^
+||louxoxo.com^
+||love-world.me^
+||lovedcorrectionsuffix.com^
+||lovelybingo.com^
+||lovemateforyou.com^
+||loverevenue.com^
+||loverfellow.com^
+||loversarrivaladventurer.com^
+||lovesgoner.com^
+||lovesparkle.space^
+||lovewellat.guru^
+||low-sad.com^
+||lowdodrioon.com^
+||lowereasygoing.com^
+||loweredexaggeratemeasures.com^
+||loweredinflammable.com^
+||lowgraveleron.com^
+||lowhardboiledadjoin.com^
+||lowlatiasan.com^
+||lowleafeontor.com^
+||lowpedalhumidity.com^
+||lowrance.top^
+||lowremoraidon.com^
+||lowrihouston.pro^
+||lowseelan.com^
+||lowsteelixor.com^
+||lowtyroguer.com^
+||lowtyruntor.com^
+||loxalrauch.com^
+||loxbeelid.com^
+||loxitdat.com^
+||loxtk.com^
+||loyeesihighlyreco.info^
+||lozengevandalismexaminer.com^
+||lp-preview.net^
+||lp247p.com^
+||lpaqjnfmxftqfx.com^
+||lpausaiverbene.com^
+||lpawakkabpho.com^
+||lpeqztx.com^
+||lpetooopz.com^
+||lpfmeavbcqbmy.com^
+||lpfulinotaherere.info^
+||lpfztnyr.com^
+||lplimjxiyx.com^
+||lpmetorealiuk.info^
+||lpnjcnigcfuk.com^
+||lpravybegqv.com^
+||lptiljy.com^
+||lptrak.com^
+||lpzhlqrrcvpnzj.com^
+||lqammdjflcecau.com^
+||lqcdn.com^
+||lqdfscnbki.com^
+||lqertautw.com^
+||lqmvvsgusod.com^
+||lqpmulou.com^
+||lqriubyebqo.top^
+||lr-in.com^
+||lraonxdikxi.com^
+||lrcdjqw.com^
+||lreqmoonpjka.com^
+||lrkenrerjkbly.top^
+||lrkenrerjkljb.top^
+||lrqknpk.com^
+||lrqvmaverkabb.top^
+||lrqvmaverkjzw.top^
+||lrugxmpxyfb.com^
+||lrvrayrnqjzjw.top^
+||lrvrayrnqjzkz.top^
+||lrwksobdw.com^
+||lrzzqvzjejjmz.top^
+||lrzzqvzjejqwn.top^
+||lsckongo.website^
+||lsjne.com^
+||lsjvqovgx.com^
+||lsnghcma.com^
+||lsqggflcsm.com^
+||lsqzxexvphk.com^
+||lsrztlmbhgzctp.com^
+||lsvblpynuezkbf.com^
+||ltaqqgvitq.com^
+||ltassrv.com.s3.amazonaws.com^
+||ltassrv.com^
+||ltckrqiy.com^
+||ltengronsa.com^
+||lteyrcwpoh.xyz^
+||ltiagmkphobd.com^
+||ltingcoempa.info^
+||ltnyzlrqggx.com^
+||ltyabkihjsecl.xyz^
+||ltyscmtia.xyz^
+||ltzsjgnb.com^
+||ltzuqmgfdbciv.com^
+||lubbardstrouds.com^
+||lubbreton.com^
+||lubowitz.biz^
+||lubrazati.com^
+||lucentfreer.com^
+||lucentposition.com^
+||luciditycuddle.com^
+||luciditymadeupfarfetched.com^
+||lucidlydiscretion.com^
+||lucidmedia.com^
+||lucificassents.com^
+||luckilyewe.com^
+||luckterrifying.com^
+||luckyads.pro^
+||luckyforbet.com^
+||luckypapa.xyz^
+||luckypushh.com^
+||lucrativeemotionallypromised.com^
+||lucrumvirga.life^
+||lucvhrdlywvnwh.com^
+||ludabmanros.com^
+||luddismwebworn.life^
+||ludicroussignify.com^
+||ludied.com^
+||ludwigreseise.tech^
+||ludxivsakalg.com^
+||lufbogazixz.com^
+||luffic.com^
+||lugajxy.com^
+||luggageflinchdew.com^
+||lugjdylyqc.xyz^
+||lujkkxgrbs.com^
+||lukdliketobepa.info^
+||lukpush.com^
+||lulavsepoxy.guru^
+||lulgpmdmbtedzl.com^
+||lullxkwwu.com^
+||lumaktoys.com^
+||luminosoocchio.com^
+||lumnstoodthe.info^
+||lumpmancommos.guru^
+||lumptaxmen.com^
+||lumpy-skirt.pro^
+||lumpyactive.com^
+||lumupu.xyz^
+||lumxts.com^
+||lunchpaybackdarcy.com^
+||lunchtimehermione.com^
+||lunio.net^
+||lunyfallace.com^
+||lunylarynx.uno^
+||lupininulster.com^
+||lupvaqvfeka.com^
+||lupyjpkuykoc.com^
+||luracancamus.com^
+||luracanestrus.com^
+||lurchesheroine.life^
+||lurdoocu.com^
+||lureillegimateillegimate.com^
+||lurgaimt.net^
+||lurgaush.net^
+||luronews.com^
+||lusaisso.com^
+||lushcrush.com^
+||lusinlepading.com^
+||lustickmiasmic.com^
+||lustrous-cheek.com^
+||lutachechu.pro^
+||luuming.com^
+||luvaihoo.com^
+||luwherupt.com^
+||luwiansurmit.space^
+||luwsebstwpc.com^
+||luxadv.com^
+||luxbetaffiliates.com.au^
+||luxins.net^
+||luxlnk.com^
+||luxope.com^
+||luxup.ru^
+||luxup2.ru^
+||luxupadva.com^
+||luxupcdna.com^
+||luxupcdnb.com^
+||luxupcdnc.com^
+||luxuriouscomplicatedsink.com^
+||luxuryexercisemiddleaged.com^
+||luxuryfluencylength.com^
+||luxusbowboy.com^
+||luymtmiku.com^
+||luyten-98c.com^
+||luzulabeguile.com^
+||lvaazvwmmvwev.top^
+||lvbngvy.com^
+||lvecygampj.com^
+||lvjptld.com^
+||lvlmhyjzdan.com^
+||lvnmzhhod.com^
+||lvnnqdgxdlhj.com^
+||lvntekpejrmtb.com^
+||lvodomo.info^
+||lvojjayaaovry.top^
+||lvomenbxbyl.com^
+||lvpcxqcoohcviks.com^
+||lvskhjsloiqviv.xyz^
+||lvwdrsrerso.com^
+||lvwuuehkvitwn.com^
+||lwckcytdbsg.com^
+||lwgadm.com^
+||lwghtbqqmbxiet.com^
+||lwjvyd.com^
+||lwlagvxxyyuha.xyz^
+||lwmheajc.com^
+||lwonclbench.com^
+||lwwdvshhbj.com^
+||lx2rv.com^
+||lxfsimoastsiite.xyz^
+||lxheot.com^
+||lxmwfqqvyvmsxlw.com^
+||lxpcyvnejhrp.com^
+||lxstat.com^
+||lxudfzptpnim.com^
+||lxudshpck.com^
+||lybgzqbuopv.com^
+||lybunbacwf.com^
+||lycheenews.com^
+||lychinset.space^
+||lycopinrekey.com^
+||lycopuscris.com^
+||lycoty.com^
+||lyemiatteffulrf.xyz^
+||lyemmayrabawe.top^
+||lyemmayrabzew.top^
+||lyfhkyneq.com^
+||lygbbkgykzcr.com^
+||lygvtmeaekuv.com^
+||lyingdownt.xyz^
+||lyingshayride.com^
+||lyjegushe.pro^
+||lyjznnanareay.top^
+||lyjznnanarmen.top^
+||lyjznnanaryaj.top^
+||lylufhuxqwi.com^
+||lympin.com^
+||lynormationpas.com^
+||lynotquitesou.info^
+||lyoak.com^
+||lyricalbarb.com^
+||lyricsgrand.com^
+||lyricslocusvaried.com^
+||lyricsneighbour.com^
+||lyricspartnerindecent.com^
+||lyrtyvqnbkknt.xyz^
+||lysim-lre.com^
+||lyssapebble.com^
+||lythonefa.com^
+||lythrumnoetics.website^
+||lyvbqbvwlbery.top^
+||lyvbqbvwllblj.top^
+||lyvbqbvwllvnb.top^
+||lywasnothycant.info^
+||lywasnothycanty.info^
+||lyzenoti.pro^
+||lyzvbjmeybyqj.top^
+||lzeld.com^
+||lzjl.com^
+||lzqjqvjkqkkkj.top^
+||lzqkofsfbympt.com^
+||lzvkmwyavjeeb.top^
+||lzxdx24yib.com^
+||lzylbjlqeknwe.top^
+||m-rtb.com^
+||m-shes.ru^
+||m.xrum.info^
+||m0hcppadsnq8.com^
+||m0rsq075u.com^
+||m2.ai^
+||m2pub.com^
+||m2track.co^
+||m30w.net^
+||m32.media^
+||m3cads.com^
+||m45assachucsh9w7etts.com^
+||m4clicks.com^
+||m73lae5cpmgrv38.com^
+||m8ppac2on0xy.com^
+||ma2gs3wne3gfej70osium.com^
+||ma3ion.com^
+||ma3ryh8l6v.de^
+||maaphdiwuoetl.com^
+||mabelasateens.com^
+||maboazolsamp.com^
+||mabolmvcuo.com^
+||mabtcaraqdho.com^
+||macan-native.com^
+||macaronibackachebeautify.com^
+||macaroniwalletmeddling.com^
+||macedonjesse.life^
+||macemaninbond.com^
+||machineryincuroutput.com^
+||machineryvegetable.com^
+||machogodynamis.com^
+||machosupupoid.space^
+||macouwou.com^
+||macro.adnami.io^
+||macroschauth.com^
+||mactraklutzes.com^
+||madadsmedia.com^
+||madampassenger.com^
+||madchemical.pro^
+||madcpms.com^
+||maddenbusy.com^
+||maddenparrots.com^
+||maddenword.com^
+||madebabysittingimperturbable.com^
+||mademadelavish.com^
+||madeupadoption.com^
+||madlegendlawsuit.com^
+||madmoney.eu^
+||madnessindians.com^
+||madratesforall.com^
+||madriyelowd.com^
+||madrogueindulge.com^
+||madsabs.com^
+||madsans.com^
+||madsecs.com^
+||madsecz.com^
+||madserving.com^
+||madsims.com^
+||madsips.com^
+||madskis.com^
+||madslimz.com^
+||madsokz.com^
+||madsone.com^
+||madspmz.com^
+||madurird.com^
+||maebtjn.com^
+||mafrarc3e9h.com^
+||mafroad.com^
+||maftirtagetol.website^
+||mafyak.com^
+||magapab.com^
+||magazinesfluentlymercury.com^
+||magclotty.top^
+||mage98rquewz.com^
+||magetrigla.com^
+||maggotpolity.com^
+||maghoutwell.com^
+||magicalbending.com^
+||magicallyitalian.com^
+||magicianboundary.com^
+||magiciancleopatramagnetic.com^
+||magicianguideours.com^
+||magicianoptimisticbeard.com^
+||magicignoresoil.com^
+||magistratehumorousjeep.com^
+||magmasudaller.com^
+||magmbb.com^
+||magnificent-listen.com^
+||magnificentflametemperature.com^
+||magnificentmanlyyeast.com^
+||magnificohec.xyz^
+||magnounousa.com^
+||magotschnell.uno^
+||magsrv.com^
+||mahaidroagra.com^
+||mahaplinths.com^
+||maharbandi.tech^
+||mahdicrofter.com^
+||mahonetranvia.com^
+||mahourup.xyz^
+||mahsirlaurite.guru^
+||mahuangperosis.cfd^
+||maibaume.com^
+||maidendeprivation.com^
+||maidsiowan.com^
+||maiglair.net^
+||maihikuh.com^
+||maijauta.xyz^
+||maikashu.net^
+||mailboxdoablebasically.com^
+||mailboxleadsphone.com^
+||mailerrobands.website^
+||mailfdf.com^
+||mailieungka.com^
+||mailmanuptown.com^
+||mailwithcash.com^
+||maimeehu.com^
+||main-ti-cod.com^
+||mainad-codpp.com^
+||mainadv.com^
+||mainapiary.com^
+||mainnewsfuse.com^
+||mainroll.com^
+||maintopmakes.website^
+||maioux.xyz^
+||maipofok.net^
+||maiptica.com^
+||mairbeets.com^
+||mairedined.space^
+||mairunoa.xyz^
+||maisoope.xyz^
+||maisvznypp.com^
+||maithooh.net^
+||maiuschaco.com^
+||majasgaol.com^
+||majesticinsensitive.com^
+||majesticrepresentative.pro^
+||majomalonic.com^
+||major-t-code.com^
+||major-video.click^
+||major.dvanadva.ru^
+||majordistinguishedguide.com^
+||majoriklink.com^
+||majoritycrackairport.com^
+||majorityevaluatewiped.com^
+||majorlinker.biz^
+||majorpusher1.com^
+||majorpushme1.com^
+||majorpushme3.com^
+||majorsmi.com^
+||majortoplink.com^
+||majorworkertop.com^
+||makemehappy.mom^
+||makemehappy.pro^
+||makemehappy.space^
+||makemyvids.com^
+||makesboundlessvirtue.com^
+||makesembezzlementconsume.com^
+||makethebusiness.com^
+||makingbookworm.com^
+||makingdevil.com^
+||makingnude.com^
+||makotruong.live^
+||makucoca.com^
+||malastasho.pro^
+||maldini.xyz^
+||maleliteral.com^
+||malief.com^
+||malinesmanses.com^
+||malletaskewbrittle.com^
+||mallettraumatize.com^
+||malthashematid.com^
+||maltunfaithfulpredominant.com^
+||mamaapparent.com^
+||mamblubamblua.com^
+||mameyesmulemen.digital^
+||mamluksburion.com^
+||mammalbuy.com^
+||mammeysterrae.com^
+||mammocksambos.com^
+||mammoseoxanic.com^
+||mammothdumbest.com^
+||mamotyauxesis.space^
+||mamrynpfx.com^
+||mamydirect.com^
+||man2ch5836dester.com^
+||manageoriginalmostinfo-product.info^
+||manboo.xyz^
+||manbycus.com^
+||manceretoldxa.com.ua^
+||manceretoldxk.xyz^
+||manconohoch.guru^
+||manconsider.com^
+||mandatorycaptaincountless.com^
+||mandatscrate.com^
+||manduzo.xyz^
+||manesscrass.com^
+||manetgauzily.life^
+||manewadninth.com^
+||manfjgo2jgb8mg09.com^
+||mangoalmahs.com^
+||maniconclavis.com^
+||manicurereprimand.com^
+||manifefashiona.info^
+||manjakquizzy.com^
+||mankindcopiesrichest.com^
+||manlytribute.com^
+||mannwn.com^
+||manoirshrine.com^
+||manpowersets.com^
+||mansernema.com^
+||mansfieldeffects.com^
+||manslaughterhallucinateenjoyment.com^
+||mantapareseat.com^
+||mantedtonisms.com^
+||manualbleedingand.com^
+||manualcasketlousy.com^
+||manualdin.com^
+||manufacturerexpandedagrarian.com^
+||manufacturerscenery.com^
+||manurepungentfew.com^
+||manuretravelingaroma.com^
+||manysoftlink.ru^
+||manzosui.xyz^
+||maonderndbeco.com.ua^
+||mapakrogngi.com^
+||mapbovdpdy.com^
+||maquiags.com^
+||maraewid.com^
+||marantaarmures.guru^
+||marapcana.online^
+||maraudscowboy.space^
+||marazma.com^
+||marbct.xyz^
+||marbil24.co.za^
+||marbleapplicationsblushing.com^
+||marblecaution.com^
+||marblemerises.guru^
+||marchedrevolution.com^
+||marchgrinwimp.com^
+||marchingsmug.com^
+||marcoscrupulousmarks.com^
+||marecreateddew.com^
+||marenfu11.cn^
+||marepuffy.com^
+||mareswimming.com^
+||marial.pro^
+||marianneflog.com^
+||marimedia.com^
+||marinalculter.com^
+||marinegruffexpecting.com^
+||marineingredientinevitably.com^
+||maritaltrousersidle.com^
+||marketcreatedwry.com^
+||marketgid.com^
+||marketingabsentremembered.com^
+||marketingenhanced.com^
+||marketinghinder.com^
+||marketland.me^
+||markkasgrosses.com^
+||markofathenaluk.com^
+||markreptiloid.com^
+||markshospitalitymoist.com^
+||marktworks.com^
+||markxa.xyz^
+||marlpitbucku.com^
+||marormesole.com^
+||marphezis.com^
+||marquegoosey.space^
+||marreerouens.com^
+||marriageappetiteillegimateillegimate.com^
+||marriervertep.digital^
+||marrowopener.com^
+||marryclamour.com^
+||marryrapidlypursuing.com^
+||marshagalea.com^
+||marshwhisper.com^
+||marspearelct.com^
+||martafatass.pro^
+||martcubic.com^
+||marti-cqh.com^
+||martuconfuse.com^
+||martyrcontrol.com^
+||marvedesderef.info^
+||marvelhuntcountry.com^
+||marvellouspeaches.com^
+||marvellousperforming.com^
+||marvelrespectableinset.com^
+||marvelselectedheron.com^
+||marwariformer.com^
+||masakeku.com^
+||masaxe.xyz^
+||masbpi.com^
+||mashmantalpa.digital^
+||mashsuicidal.com^
+||masjidspondful.com^
+||masklink.org^
+||masontotally.com^
+||masqueradeflashy.com^
+||massacreintentionalmemorize.com^
+||massariuscdn.com^
+||massecephid.uno^
+||massive-dark.pro^
+||masstech.info^
+||mastercodepink.com^
+||masterfrowne.org^
+||mastermilligram.com^
+||masterpieceplainlythird.com^
+||masterthoroughfarepiercing.com^
+||mastexpelledsink.com^
+||mastfiguredrussell.com^
+||masticsvorlage.website^
+||masturbaseinvegas.com^
+||matchaix.net^
+||matchingstubborn.com^
+||matchjunkie.com^
+||matchuph.com^
+||matecatenae.com^
+||materialfirearm.com^
+||materialisticconstitution.com^
+||materialisticinformal.com^
+||maternaltypicalattendance.com^
+||mathads.com^
+||mathafuda.pro^
+||mathcountryside.com^
+||mathfir.com^
+||mathneedle.com^
+||mathscrayonreference.com^
+||matildawu.online^
+||matiro.com^
+||matmechanic.com^
+||matokeassyria.com^
+||matreedknifes.com^
+||matrimonyfiles.com^
+||matrix-news.org^
+||matswhyask.cam^
+||matterlanguidmidnight.com^
+||mattressstumpcomplement.com^
+||matzohshoey.com^
+||mauchopt.net^
+||maudau.com^
+||maugoops.xyz^
+||mauhara.com^
+||maulupoa.com^
+||maumetsvowers.com^
+||mauptaub.com^
+||maurejee.com^
+||mauricesignors.website^
+||mavenlohi.com^
+||mavq.net^
+||maw5r7y9s9helley.com^
+||mawlaybob.com^
+||mawmishtrior.com^
+||mawsewtow.com^
+||mawstroca.top^
+||maxbounty.com^
+||maxhold.xyz^
+||maxigamma.com^
+||maxim.pub^
+||maximherein.com^
+||maximtoaster.com^
+||maximumductpictorial.com^
+||maximumimmortality.com^
+||maximus-time.net^
+||maxonclick.com^
+||maxprofitcontrol.com^
+||maxserving.com^
+||maybejanuarycosmetics.com^
+||mayberesemble.com^
+||mayhemabjure.com^
+||mayhemreconcileneutral.com^
+||mayhemsixtydeserves.com^
+||maylnk.com^
+||maymooth-stopic.com^
+||mayonnaiseplumbingpinprick.com^
+||mayorfound.com^
+||mayorleap.com^
+||maypreposition.com^
+||maysunown.live^
+||mayule.xyz^
+||mazamadryest.com^
+||mazdeansteres.digital^
+||mb-npltfpro.com^
+||mb01.com^
+||mb102.com^
+||mb103.com^
+||mb104.com^
+||mb38.com^
+||mb57.com^
+||mbdfidszzlo.com^
+||mbdippex.com^
+||mbgufryceqkoap.com^
+||mbidadm.com^
+||mbidinp.com^
+||mbidpsh.com^
+||mbindu.com^
+||mbledeparatea.com^
+||mblhzlqkhukry.com^
+||mblink.in^
+||mbnot.com^
+||mbstrk.com^
+||mbtennu.com^
+||mbubaniblike.digital^
+||mbuncha.com^
+||mbzgogo.xyz^
+||mc7clurd09pla4nrtat7ion.com^
+||mcdote.com^
+||mcizas.com^
+||mckensecuryr.info^
+||mclude.com^
+||mcppsh.com^
+||mcpuwpsh.com^
+||mcpuwpush.com^
+||mcqgfoc.com^
+||mctailqwjke.com^
+||mcurrentlyse.shop^
+||mcurrentlysea.info^
+||mcvwjzj.com^
+||mcxmke.com^
+||mcycity.com^
+||mczbf.com^
+||mdadx.com^
+||mdcytqwnbr.com^
+||mdfbrsfkufamsr.com^
+||mdghnrtegwuqar.com^
+||mdkkbrbhlji.com^
+||meadowdocumentcaprizecaprize.com^
+||meagerdrawing.pro^
+||meagplin.com^
+||meakam.com^
+||mealierbani.digital^
+||mealplanningideas.com^
+||meandiminutionhit.com^
+||meanspowersmotives.com^
+||meantscarlet.com^
+||meases.com^
+||measts.com^
+||measurementaz.com^
+||measurementpond.com^
+||measuringrules.com^
+||meatinerhitles.xyz^
+||meatytell.pro^
+||mebeptxj.com^
+||mechaelpaceway.com^
+||mechanicsforgave.com^
+||meconicoutfish.com^
+||mecurs.com^
+||meddleachievehat.com^
+||meddlekilled.com^
+||medfoodsafety.com^
+||medfoodspace.com^
+||medfoodtech.com^
+||medgoodfood.com^
+||media-412.com^
+||media-general.com^
+||media-sapiens.com^
+||media-servers.net^
+||media6degrees.com^
+||media970.com^
+||mediaappletree.com^
+||mediaclick.com^
+||mediacpm.com^
+||mediaf.media^
+||mediaforge.com^
+||mediagridwork.com^
+||mediakeywords.com^
+||medianmuftis.com^
+||mediaoaktree.com^
+||mediaonenetwork.net^
+||mediapalmtree.com^
+||mediapeartree.com^
+||mediapush1.com^
+||mediasama.com^
+||mediaserf.net^
+||mediasprucetree.com^
+||mediatebrazenmanufacturer.com^
+||mediategenericburden.com^
+||mediative.ca^
+||mediative.com^
+||mediatraks.com^
+||mediaver.com^
+||mediaxchange.co^
+||medical-aid.net^
+||medicalcandid.com^
+||medicationlearneddensity.com^
+||medicationneglectedshared.com^
+||medicflippers.com^
+||medicineflogaccumulate.com^
+||mediuln.com^
+||medleyads.com^
+||medoofty.com^
+||medusasglance.com^
+||medyanetads.com^
+||meebofoo.com^
+||meekcomplaint.pro^
+||meekerhyaenid.com^
+||meenetiy.com^
+||meepsaph.xyz^
+||meepwrite.com^
+||meerihoh.net^
+||meestuch.com^
+||meet4you.net^
+||meet4youu.com^
+||meet4youu.net^
+||meetic-partners.com^
+||meetingcupule.com^
+||meetwebclub.com^
+||meewireg.com^
+||meezauch.net^
+||megaad.nz^
+||megabookline.com^
+||megadeliveryn.com^
+||megae-aqn.com^
+||megapodacutest.digital^
+||megdexchange.com^
+||meghis.com^
+||megmobpoi.club^
+||megnotch.xyz^
+||megrezvans.guru^
+||meharisgrabs.com^
+||mehebborc.com^
+||meinlist.com^
+||mekati.xyz^
+||mekiroki.com^
+||mekiroki.org^
+||meksicie.net^
+||mekstolande.com^
+||melancholygreedyhonour.com^
+||melche.com^
+||melderspyurias.website^
+||meleguetre.com^
+||meleranhe.com^
+||meleranhe.xyz^
+||melhvsfwueuvx.com^
+||meligh.com^
+||melit-zoy.com^
+||mellodur.net^
+||mellonidolon.com^
+||mellow-game.pro^
+||mellsrecta.com^
+||melodramaticlaughingbrandy.com^
+||melodyplans.com^
+||melongetplume.com^
+||meltaigh.net^
+||meltedacrid.com^
+||meltembrace.com^
+||meltyoungmarijuana.com^
+||membai.com^
+||membershipimmunitysport.com^
+||memney.com^
+||memopilot.com^
+||memorableeditor.com^
+||memorandumdismissquietly.com^
+||memoriagamine.com^
+||memorizeaestheticspiders.com^
+||memorizematch.com^
+||memunjcvfv.xyz^
+||mendationforca.info^
+||mendedrefuel.com^
+||mendress.icu^
+||mendslaughter.com^
+||menlithium.com^
+||mensingpumice.space^
+||mentalincomprehensiblealien.com^
+||mentallyissue.com^
+||mentionedrubbing.com^
+||mentiopportal.org^
+||mentorconform.com^
+||mentrandi.com^
+||mentswithde.com^
+||mentxviewsinte.info^
+||menui.xyz^
+||menuoverridemotherhood.com^
+||meo257na3rch.com^
+||meoem.lol^
+||meofmukindwoul.info^
+||meoneinthew.com^
+||meowpushnot.com^
+||merchenta.com^
+||mercialtaver.club^
+||merciselyancies.site^
+||mercuras.com^
+||mercuryprettyapplication.com^
+||mercurysugarconsulting.com^
+||mercurywindscreencane.com^
+||merelysqueak.com^
+||mergaksi.net^
+||mergedlava.com^
+||mergessidi.com^
+||meritedgasser.com^
+||merligopotlid.com^
+||mermenmanzil.life^
+||mermiscoapted.com^
+||merryindecisionremained.com^
+||merterpazar.com^
+||merzostueru2hu8jr09.com^
+||mesallyrewoke.com^
+||mesalplayboy.com^
+||meshpetrols.com^
+||mesilswwroiu.com^
+||meslameighty.com^
+||mesqwrte.net^
+||messagereceiver.com^
+||messenger-notify.digital^
+||messenger-notify.xyz^
+||messengerinternfair.com^
+||messiahspoot.com^
+||messic.lol^
+||messymeter.com^
+||mestoaxo.net^
+||mestreqa.com^
+||metahv.xyz^
+||metalbow.com^
+||metasterisk.com^
+||metatestruck.com^
+||metavertising.com^
+||metavertizer.com^
+||meteorclashbailey.com^
+||metfoetushandicraft.com^
+||methodrumour.com^
+||methoxyunpaled.com^
+||methree-salien.icu^
+||metingsaeta.com^
+||metinkuba.com^
+||metonicthought.com^
+||metorealiukz.org^
+||metosk.com^
+||metotreatwithdify.info^
+||metrebeggary.digital^
+||metredesculic.com^
+||metrica-yandex.com^
+||metricfast.com^
+||metrics.io^
+||metricswpsh.com^
+||metsaubs.net^
+||metumpscageful.com^
+||mevarabon.com^
+||mewgzllnsp.com^
+||mexicanatoning.live^
+||mexitlipiffles.com^
+||meyximegrgypnv.com^
+||mezzosgrigri.com^
+||mfabxfb.com^
+||mfadsrvr.com^
+||mfbjifwyieopx.com^
+||mfcewkrob.com^
+||mfhlsdd.com^
+||mfjpwroy.com^
+||mfk-cpm.com^
+||mflztgubvfo.com^
+||mfthkdj.com^
+||mftracking.com^
+||mfypxtfqngxw.com^
+||mgalreveal.guru^
+||mgbid.net^
+||mgcash.com^
+||mgcashgate.com^
+||mgcicjfqyfik.com^
+||mgdbtjwc.com^
+||mgdjmp.com^
+||mgdtnwnjwewlph.com^
+||mghkpg.com^
+||mgjgqztw.com^
+||mgrattedropenrigh.xyz^
+||mgtxdntxkx.com^
+||mgyccfrshz.com^
+||mh9dskj8jg.com^
+||mhadsd.com^
+||mhgshawy.guru^
+||mhqjiaxpenfw.com^
+||mhrpusbstm.com^
+||mhvllvgrefplg.com^
+||mi82ltk3veb7.com^
+||miaeglaring.uno^
+||miamiahokums.com^
+||miamribud.com^
+||miaouedcrevass.com^
+||miayarus.com^
+||miboundwhiffet.com^
+||micastskangli.com^
+||micechillyorchard.com^
+||micghiga2n7ahjnnsar0fbor.com^
+||michealmoyite.com^
+||micmacsortes.com^
+||microad.net^
+||microadinc.com^
+||micronsecho.com^
+||microscopeattorney.com^
+||microwavemay.com^
+||midastouchrt.com^
+||middayexcessive.com^
+||middaypredicamentnephew.com^
+||middestkarsha.com^
+||middleagedlogineveryone.com^
+||midgetdeliveringsmartly.com^
+||midgetincidentally.com^
+||midistortrix.com^
+||midlandfeisty.com^
+||midmaintee.com^
+||midmornsarinda.website^
+||midnightconsessionconsession.com^
+||midootib.net^
+||midouwhi.com^
+||midpopedge.com^
+||midstconductcanned.com^
+||midstdropped.com^
+||midstpoor.com^
+||midsummerinoculate.com^
+||midtermconcordalight.com^
+||midwifelangurs.com^
+||midwiferider.com^
+||miggslxuqlowz.com^
+||mighes.com^
+||mighly.com^
+||mightyhulsjdk.com^
+||mightylottrembling.com^
+||migimsas.net^
+||mignished-sility.com^
+||migopwrajhca.com^
+||migrantspiteconnecting.com^
+||migrationscale.com^
+||migrationscarletquick.com^
+||migric.com^
+||mikhainpretts.xyz^
+||milasktic.com^
+||mildarmorynodding.com^
+||mildexperimentsfeatures.com^
+||mildlyrambleadroit.com^
+||mildredsnareinsolent.com^
+||mileesidesu.org^
+||milesdrone.com^
+||milestoneinvitedflutter.com^
+||milfunsource.com^
+||milfur.com^
+||milkejusd.website^
+||milkygoodness.xyz^
+||milkywaynewspaper.com^
+||millennialmedia.com^
+||millierinlaces.com^
+||millionsskinny.com^
+||millsurfaces.com^
+||millustry.top^
+||miltlametta.com^
+||miluwo.com^
+||mimicbeeralb.com^
+||mimicdisperse.com^
+||mimilcnf.pro^
+||mimxdsqiativb.com^
+||mincesecondaryinset.com^
+||mincethingsmarch.com^
+||mindamender.com^
+||mindedcarious.com^
+||minderalasselfemployed.com^
+||mindless-fruit.pro^
+||mindless-series.pro^
+||mindlessindignantlimbs.com^
+||mindlessnight.com^
+||mindlessslogan.com^
+||mindtonwore.live^
+||minehighs.com^
+||minently.com^
+||mineralscreamrobes.com^
+||mineraltip.com^
+||minglebookwormdecency.com^
+||mingledunorder.com^
+||mingysticker.guru^
+||miniaturechain.pro^
+||miniatureoffer.pro^
+||miniglobalcitizens.com^
+||minimumacquitteam.com^
+||minimumpay.info^
+||ministryensuetribute.com^
+||minotaur107.com^
+||minsistereron.xyz^
+||mintclick.xyz^
+||mintmanunmanly.com^
+||mintybug.com^
+||minyascannat.com^
+||miracslubs.com^
+||miraculousregimentabbreviate.com^
+||miredindeedeisas.info^
+||miresrefile.website^
+||mirfakpersei.top^
+||mirtacku.xyz^
+||mirthbail.com^
+||mirthnonpar.com^
+||misaboi.com^
+||misacttaruma.com^
+||misaglam.com^
+||misarea.com^
+||misbornsubitem.space^
+||miscalculatesuccessiverelish.com^
+||miscellaneousdietary.com^
+||mischiefwishes.com^
+||misctool.xyz^
+||miscur.com^
+||misdeemnormal.uno^
+||misear.com^
+||misenab.com^
+||miserable-discount.com^
+||miseryclevernessusage.com^
+||misfields.com^
+||misfortunedelirium.com^
+||misfortunemerrimentmouth.com^
+||misgala.com^
+||mishapideal.com^
+||miskoru.com^
+||mislaer.com^
+||mismaum.com^
+||misnes.com^
+||misosaloud.com^
+||missgrand.beauty^
+||missilesurvive.com^
+||missingweighnapkin.com^
+||missioncontinuallywarp.com^
+||missiondues.com^
+||missitzantiot.com^
+||misslinkvocation.com^
+||misslk.com^
+||misspkl.com^
+||misstaycedule.com^
+||mistakeidentical.com^
+||mistakenunderstandresponse.com^
+||mistletoebookwormgigantic.com^
+||mistletoeethicleak.com^
+||mistletoeforensics.com^
+||misunderstandrough.com^
+||misusefreeze.com^
+||misuseoyster.com^
+||miswirewittall.uno^
+||misyuni.com^
+||miszonepionic.space^
+||miteredgasbags.com^
+||mittenheatdied.com^
+||mittylargen.com^
+||miveci.uno^
+||miwhethi.xyz^
+||miwllmo.com^
+||mixandfun.com^
+||mixclckchat.net^
+||mixeavocat.com^
+||mixedknitting.com^
+||mixedpianist.com^
+||mixerssouagga.com^
+||mixescineols.uno^
+||mixhillvedism.com^
+||mixnewsbest.com^
+||mixpo.com^
+||mixykails.com^
+||mizensdisney.com^
+||mjehvuwgy.com^
+||mjeltachv.com^
+||mjgvrxbu.com^
+||mjjjhfgqqpt.com^
+||mjnomtahm.com^
+||mjtwoqupix.com^
+||mjxvufetukfrav.com^
+||mjzrebrjty.com^
+||mkcurches.com^
+||mkgiiijigxwwn.com^
+||mkhoj.com^
+||mkihakfuzv.com^
+||mkjsqrpmxqdf.com^
+||mkkvprwskq.com^
+||mkopli-1.live^
+||mkxfbiwcet.com^
+||mkxucousrbaayfi.com^
+||ml0z14azlflr.com^
+||ml314.com^
+||mladvertistsldah.com.ua^
+||mldxqrntd.xyz^
+||mlkpbktmqrsry.com^
+||mllatydz.com^
+||mlmyobhn.com^
+||mlnadvertising.com^
+||mlnybwnbwzhiy.com^
+||mlpeqwkruffs.com^
+||mlrrvusoiebaox.com^
+||mlsys.xyz^
+||mluptwapaj.com^
+||mlvgxzenoiz.com^
+||mlvlesvw.com^
+||mlwstbdnwdfyng.com^
+||mlzxfwvonky.com^
+||mm-cgnews.com^
+||mm-syringe.com^
+||mmadsgadget.com^
+||mmctsvc.com^
+||mmdyvkndcsiw.com^
+||mmgads.com^
+||mmismm.com^
+||mmjfnxx.com^
+||mmjjnufyaadr.com^
+||mmmdn.net^
+||mmmutajbpalv.com^
+||mmoddkdn.com^
+||mmondi.com^
+||mmotraffic.com^
+||mmphijndajxiui.com^
+||mmtnat.com^
+||mmvideocdn.com^
+||mn1nm.com^
+||mn230126pb.com^
+||mnaspm.com^
+||mnaujmo.com^
+||mnbvjhg.com^
+||mndsrv.com^
+||mnekumtrssln.com^
+||mneljcvkiwe.xyz^
+||mnetads.com^
+||mng-ads.com^
+||mnhjk.com^
+||mnhjkl.com^
+||mniumlapsers.com^
+||mnnuhtvnubdg.xyz^
+||mnodtbmmomqo.com^
+||mnoglcfv.com^
+||mnpvdtywjtupl.com^
+||mntzr11.net^
+||mntzrlt.net^
+||mnwjxqwt.xyz^
+||mnzznvpktnqtmm.com^
+||mo3i5n46.de^
+||mo9jr8ie6sier3an.com^
+||moaglail.xyz^
+||moaihkbrogywwiw.xyz^
+||moakaumo.com^
+||moaningtread.com^
+||moanomoa.xyz^
+||moapevuwtv.com^
+||moapuwhe.com^
+||moartraffic.com^
+||moastizi.xyz^
+||moatads.com^
+||moatshoal.digital^
+||mob1ledev1ces.com^
+||mobalert.net^
+||mobbahjug.com^
+||mobcrummymow.com^
+||mobdel2.com^
+||mobgold.com^
+||mobibiobi.com^
+||mobicont.com^
+||mobicow.com^
+||mobidevdom.com^
+||mobiflyc.com^
+||mobiflyd.com^
+||mobiflys.com^
+||mobifobi.com^
+||mobifoth.com^
+||mobile5shop.com^
+||mobiledevel.com^
+||mobiletracking.ru^
+||mobipromote.com^
+||mobiright.com^
+||mobisla.com^
+||mobitracker.info^
+||mobiyield.com^
+||mobizme.net^
+||mobmsgs.com^
+||mobnotices.com^
+||mobpartner.mobi^
+||mobpushup.com^
+||mobreach.com^
+||mobshark.net^
+||mobstitial.com^
+||mobstrks.com^
+||mobtrendinsanity.com^
+||mobtrks.com^
+||mobtyb.com^
+||mobytrks.com^
+||mocean.mobi^
+||mockingcard.com^
+||mockingcolloquial.com^
+||mocmubse.net^
+||moddersithen.com^
+||modeidsoanadthenb.xyz^
+||modents-diance.com^
+||modepatheticms.com^
+||moderategermmaria.com^
+||modern-passenger.pro^
+||modescrips.info^
+||modestsoftware.pro^
+||modificationdispatch.com^
+||modifymaintenance.com^
+||modoro360.com^
+||modtrnxsmf.com^
+||modularmental.com^
+||moduledescendantlos.com^
+||modulepush.com^
+||moduletgispin.com^
+||modulohanafi.com^
+||modulusoctodon.uno^
+||moedgapers.com^
+||moggedexterne.com^
+||mogointeractive.com^
+||mohaqu.xyz^
+||mohyafckgatre.com^
+||moilizoi.com^
+||moistblank.com^
+||mojoaffiliates.com^
+||mojogike.net^
+||mokibill.com^
+||moksoxos.com^
+||moldingruching.com^
+||moleconcern.com^
+||molemarshy.com^
+||moligh.com^
+||molrizub.com^
+||molseelr.xyz^
+||moltenforger.top^
+||moltingcasher.tech^
+||molttenglobins.casa^
+||molypsigry.pro^
+||momentoinsuree.com^
+||momentpalpate.store^
+||momentumgreenhouseexpert.com^
+||momhomicidalspa.com^
+||momijoy.ru^
+||mommaseclat.com^
+||mommygravelyslime.com^
+||monacharabbler.website^
+||monadplug.com^
+||monadvs.com^
+||monamudden.digital^
+||monarchracistsparkle.com^
+||monasterymedication.com^
+||moncoerbb.com^
+||mondaydeliciousrevulsion.com^
+||mondayscan.com^
+||mondialwering.com^
+||monetag.com^
+||monetizer101.com^
+||moneycosmos.com^
+||moneymak3rstrack.com^
+||moneymakercdn.com^
+||moneytatorone.com^
+||mongbo.com^
+||moniliabarkeep.digital^
+||monismartlink.com^
+||monitorinflictmotivation.com^
+||monitormilletstray.com^
+||monitorpeachy.com^
+||monkeybroker.net^
+||monkeysloveyou.com^
+||monkeyunseen.com^
+||monkquestion.com^
+||monksmilestonewill.com^
+||monksplatane.com^
+||monkyank.com^
+||monnionyusdrum.com^
+||monotonoustuneunderestimate.com^
+||monsterofnews.com^
+||monstrous-boyfriend.pro^
+||monstrousrowandays.com^
+||montafp.top^
+||montangop.top^
+||montebassy.com^
+||monthlyindirectelsewhere.com^
+||montkpl.top^
+||montkyodo.top^
+||montlusa.top^
+||montnotimex.top^
+||montpdp.top^
+||montwam.top^
+||monumentsmaterialeasel.com^
+||monxserver.com^
+||mooantink.com^
+||moocauby.com^
+||moochbeacher.com^
+||moochescramper.com^
+||moodokay.com^
+||moodtypewriterjug.com^
+||moodunitsmusic.com^
+||mookie1.com^
+||moolasghazism.guru^
+||moonads.net^
+||mooncklick.com^
+||moonheappyr.com^
+||moonicorn.network^
+||moonjahaphodal.com^
+||moonovernegril.com^
+||moonprocessed.com^
+||moonrocketaffiliates.com^
+||moontuftboy.com^
+||moonveto.com^
+||moonvids.online^
+||moonvids.space^
+||moorscliv.life^
+||mootermedia.com^
+||moothbagel.com^
+||mootingunwist.com^
+||mootingureic.com^
+||moovaush.com^
+||mooxar.com^
+||mopedisods.com^
+||mopefrequent.com^
+||mopeia.xyz^
+||mopemodelingfrown.com^
+||mopnixhem.com^
+||moracy.com^
+||moradu.com^
+||moraec.xyz^
+||moral-enthusiasm.pro^
+||moratlefty.com^
+||morbidlocally.com^
+||morbidproblem.com^
+||morbitempus.com^
+||morclicks.com^
+||mordoops.com^
+||moregamers.com^
+||morgdm.ru^
+||morgendervish.cfd^
+||morguebattle.com^
+||morgueflabbergasted.com^
+||morict.com^
+||morionsluigini.digital^
+||morningglory101.io^
+||moronesphotos.com^
+||mororvaginas.com^
+||morps.xyz^
+||morrowfreezer.com^
+||morselbeetroothoneymoon.com^
+||morsinsaner.uno^
+||mortgagelunchtimedistrustuldistrustul.com^
+||mortifiedkind.pro^
+||mortifyfelony.com^
+||mortypush.com^
+||mosquesituated.com^
+||mosqueworking.com^
+||mosrtaek.net^
+||mosswhinepanther.com^
+||mostauthor.com^
+||mostdeport.com^
+||mostlytreasure.com^
+||mothdiscussioncrest.com^
+||motherehoom.pro^
+||motherhoodlimiteddetest.com^
+||mothifta.xyz^
+||mothwetcheater.com^
+||motille.com^
+||motionsaucermentioned.com^
+||motionspots.com^
+||motiveblizzardstiffen.com^
+||motivedtheatre.cfd^
+||motivessuggest.com^
+||motleyanybody.com^
+||motorwardso.com.ua^
+||motosal.net^
+||motsardi.net^
+||mottlespouffed.live^
+||moultedpiroot.space^
+||mounct.com^
+||mountainbender.xyz^
+||mountaincaller.top^
+||mountainous-substance.com^
+||mountedgrasshomesick.com^
+||mountlanentablelanentable.com^
+||mouraipoucuk.com^
+||mourningmillsignificant.com^
+||mourningonionthing.com^
+||moustite.com^
+||mouthinvincibleexpecting.com^
+||movad.de^
+||movad.net^
+||movcpm.com^
+||movemeforward.co^
+||movementdespise.com^
+||movementgang.com^
+||movementpoison.com^
+||movementxvi.info^
+||movemybackup.co^
+||moverenvironmentalludicrous.com^
+||moverl.com^
+||movesickly.com^
+||moveyouforward.co^
+||moveyourdesk.co^
+||movfull.com^
+||movie-pass.club^
+||movie-pass.live^
+||moviead55.ru^
+||moviemediahub.com^
+||moviesflix4k.info^
+||moviesflix4k.xyz^
+||moviesprofit.com^
+||moviesring.com^
+||mowdzgbusbqug.com^
+||mowhamsterradiator.com^
+||moxuthoo.net^
+||moycheiistill.com^
+||moynba.com^
+||mozamy.com^
+||mozgvya.com^
+||mozoo.com^
+||mp-pop.barryto.one^
+||mp3bars.com^
+||mp3dance.today^
+||mp3pro.xyz^
+||mp3vizor.com^
+||mpafnyfiexpe.net^
+||mpanythathav.info^
+||mpay69.com^
+||mpk01.com^
+||mplayeranyd.info^
+||mpmant.com^
+||mpmqqbinaakpsqu.xyz^
+||mpnrs.com^
+||mppmnetwork.com^
+||mpression.net^
+||mprhrvnxppdxci.com^
+||mpsqvsylctp.com^
+||mpsuadv.ru^
+||mptentry.com^
+||mptgate.com^
+||mpzwsvueph.com^
+||mqabjtgli.xyz^
+||mqaqtwkbwcqty.xyz^
+||mqarrenothanca.xyz^
+||mqcjqjhy.com^
+||mqkuzy.com^
+||mqnrrawj.com^
+||mqpazioiyt.com^
+||mr2cnjuh34jb.com^
+||mraozo.xyz^
+||mrareljqr.com^
+||mraza2dosa.com^
+||mrcoviu.pics^
+||mrdzuibek.com^
+||mrfantastic.gotdns.ch^
+||mrflvyizjrkytj.com^
+||mrgrekeroad.com^
+||mrjb7hvcks.com^
+||mrlscr.com^
+||mrmlxqck.com^
+||mrtbbnr.com^
+||mrtbbnrdip.com^
+||mrtnsvr.com^
+||mrvio.com^
+||mryinerg.com^
+||mrzikj.com^
+||ms3t.club^
+||msads.net^
+||msdiouc.com^
+||msensuedcounteract.com^
+||msgose.com^
+||mshago.com^
+||msnvqfjg.com^
+||msrehcmpeme.com^
+||msrejection.com^
+||msrvt.net^
+||mstlewdhec.com^
+||msypr.com^
+||mt34iofvjay.com^
+||mtburn.com^
+||mtdkhfguafqijx.com^
+||mthvjim.com^
+||mtjrhfww.com^
+||mtjwxcdjierrmw.com^
+||mtwdmk9ic.com^
+||mtypitea.net^
+||mtzenhigqg.com^
+||muchorindownlo.xyz^
+||muchotrust.com^
+||mucinyak.com^
+||muddiedbubales.com^
+||muddychronicstuffed.com^
+||muddytransplantinsert.com^
+||mudwortlithog.website^
+||mufcrkk.com^
+||mufflealiases.com^
+||muffled-apartment.com^
+||mufflercypress.com^
+||mufflerlamia.com^
+||mufflerlightsgroups.com^
+||mufucfdmrrf.com^
+||mugabedsock.website^
+||mugantlerfloral.com^
+||mugleafly.com^
+||mugpothop.com^
+||mugweedafloat.guru^
+||mugwumprelume.top^
+||muirpekvl.com^
+||mujilora.com^
+||mukhtarproving.com^
+||mulberryay.com^
+||mulesto.com^
+||muletatyphic.com^
+||mulserebush.digital^
+||multicoloredsteak.pro^
+||multimater.com^
+||multipletrustedpc.com^
+||multiplydiscourage.com^
+||multiplyinvisible.com^
+||multiwall-ads.shop^
+||multstorage.com^
+||mumblesmisrun.space^
+||mumcreator.com^
+||mumgenericcourt.com^
+||mumiti.xyz^
+||mummedgyrose.com^
+||mummybeautydebauch.com^
+||munchenviableski.com^
+||mungfali.com^
+||munilf.com^
+||munshiwauks.space^
+||munsterduke.com^
+||muntiglesia.com^
+||mupyfpimgnvqdgy.com^
+||muragetunnel.com^
+||muralattentive.com^
+||muralshelvesdeposition.com^
+||muraubse.com^
+||murderassuredness.com^
+||muricidmartins.com^
+||muriheem.net^
+||murkilyergots.com^
+||murkymouse.online^
+||murzimarab.tech^
+||muscledarcysilly.com^
+||muscleomnipresent.com^
+||muscleserrandrotund.com^
+||museumimpenetrablerepose.com^
+||mushesarrear.com^
+||music-home.info^
+||musicalbilateral.com^
+||musicalglutton.com^
+||musicnote.info^
+||muskatarsenal.com^
+||musmentportal.com^
+||musselchangeableskier.com^
+||musselregimentcharles.com^
+||mustardeveningobvious.com^
+||mustbehand.com^
+||mutaseharpers.casa^
+||mutcheng.net^
+||mutecrane.com^
+||mutenessdollyheadlong.com^
+||mutinousconductdisk.com^
+||mutomb.com^
+||mutteredadis.org^
+||mutteredadisa.com^
+||muttergrew.com^
+||muttersedatetransmitted.com^
+||muttonperiltower.com^
+||mutury.com^
+||mutux.cfd^
+||muyoozrkkyr.com^
+||muzarabeponym.website^
+||muzoohat.net^
+||muzzlematrix.com^
+||mvcwfqntrnatng.com^
+||mvdwjofacq.com^
+||mveigehekwhq.com^
+||mvevuokyzah.com^
+||mvgzwamfvkw.com^
+||mvhiyha.com^
+||mvlvxzhxjci.com^
+||mvqlsrakwp.com^
+||mvqycoenp.com^
+||mvubzqaowhhgii.com^
+||mvujvxc.com^
+||mwazhey.com^
+||mwbxpccx.com^
+||mwcxljdywq.com^
+||mwemsias.com^
+||mwifcugxihhpwm.com^
+||mwjkteucypb.com^
+||mworkhovdimin.info^
+||mworkhovdiminat.info^
+||mwprotected.com^
+||mwquick.com^
+||mwrgi.com^
+||mxatooknlavb.com^
+||mxipwcyo.xyz^
+||mxiumroqnv.xyz^
+||mxmkhyrmup.com^
+||mxptint.net^
+||mxsuikhqaggf.com^
+||mxtads.com^
+||mxtqenvjpwj.com^
+||mxuiso.com^
+||mxzluxet.com^
+||my-hanson.com^
+||my.shymilftube.com^
+||my1elitclub.com^
+||myabsconds.com^
+||myactualblog.com^
+||myadcash.com^
+||myadsserver.com^
+||mybestdc.com^
+||mybestnewz.com^
+||mybetterck.com^
+||mybetterdl.com^
+||mybettermb.com^
+||mybmrtrg.com^
+||mycamlover.com^
+||mycasinoaccounts.com^
+||mycdn.co^
+||mycdn2.co^
+||mycelesterno.com^
+||myckdom.com^
+||myclickpush.com^
+||mycoolfeed.com^
+||mydailynewz.com^
+||myeasetrack.com^
+||myeasyvpn.com^
+||myfastcdn.com^
+||myfreshposts.com^
+||myfreshspot.com^
+||mygoodlives.com^
+||mygsyv.com^
+||mygtmn.com^
+||myhappy-news.com^
+||myhypestories.com^
+||myhzndxsndppx.com^
+||myimagetracking.com^
+||myjdhmoiiwgise.com^
+||myjevkjiumtbrq.com^
+||mykiger.com^
+||mylinkbox.com^
+||myliveforyoudreder.com^
+||mylives.xyz^
+||mylmifwsi.com^
+||mynativeads.com^
+||mynewdatings.life^
+||myniceposts.com^
+||mynunu.net^
+||myolnyr5bsk18.com^
+||myomasocager.com^
+||myopybaldwin.com^
+||myopyrum.digital^
+||myperfect2give.com^
+||mypopads.com^
+||myqmjhkgxpkmh.com^
+||myraqcajwkeyqd.com^
+||myselfkneelsmoulder.com^
+||mysleepds.com^
+||mysticaldespiseelongated.com^
+||mysweetteam.com^
+||myteamdev.com^
+||mythings.com^
+||myudkrefaiygs.com^
+||myunderthfe.info^
+||mywondertrip.com^
+||myxlyajuhsjiwsp.com^
+||myxozilla.icu^
+||myyhvsekloyvul.com^
+||mziso.xyz^
+||mznbrazfty.com^
+||mzol7lbm.com^
+||mzpbvvxv.com^
+||mzuspejtuodc.com^
+||mzxfrok.com^
+||mzzxfib.com^
+||n0299.com^
+||n0355.com^
+||n0400.com^
+||n0433.com^
+||n0v1cdn.com^
+||n19.biz^
+||n1pusher.com^
+||n2major.com^
+||n33d0nem0re.com^
+||n49seircas7r.com^
+||n4pusher.com^
+||n7e4t5trg0u3yegn8szj9c8xjz5wf8szcj2a5h9dzxjs50salczs8azls0zm.com^
+||n9s74npl.de^
+||naambonder.com^
+||naampone.com^
+||naatookyois.com^
+||naawurkshdhs.com^
+||naazrghwxj.com^
+||nabalpal.com^
+||nabauxou.net^
+||nabbr.com^
+||nabicbh.com^
+||nableemblems.com^
+||nableriptide.com^
+||nablesasmetotrea.info^
+||nacfuns.com^
+||nachogunj.cam^
+||nacontent.pro^
+||nacuum.com^
+||nadjustifygas.com^
+||nads.io^
+||naewynn.com^
+||nafaec.com^
+||naffor.com^
+||naforeshow.org^
+||naganoadigei.com^
+||nagarh.com^
+||naggingirresponsible.com^
+||naggingrugcolossal.com^
+||nagrande.com^
+||nagues.com^
+||nagwrotedetain.com^
+||naicoapt.com^
+||naifason.xyz^
+||naigristoa.com^
+||naipsouz.net^
+||nairapp.com^
+||naisoops.net^
+||naive-skin.pro^
+||naivegirlie.com^
+||naivescorries.com^
+||naiyoz.lol^
+||nakamasweb.com^
+||nakedfulfilhairy.com^
+||nakirfettle.com^
+||nalhedgelnhamf.info^
+||nameads.com^
+||namel.net^
+||namelessably.com^
+||namelymagnanimitycube.com^
+||namelymutiny.com^
+||namesakedisappointmentpulverize.com^
+||namesakeoscilloscopemarquis.com^
+||namesexual.com^
+||namibyyy.com^
+||namol.xyz^
+||nan46ysangt28eec.com^
+||nancontrast.com^
+||nandasmile.org^
+||nandinzouaves.uno^
+||nandweandthe.org^
+||naneducate.com^
+||nanesbewail.com^
+||nangkasec.com^
+||nanhermione.com^
+||nannot.com^
+||nanouwho.com^
+||nanrumandbac.com^
+||naolemkkg.com^
+||naoprj.com^
+||napainsi.net^
+||napererelysian.com^
+||napesropes.com^
+||napkinlucent.com^
+||naplesspeisage.com^
+||napony.com^
+||napoof.com^
+||nappespatois.com^
+||nappybedcandid.com^
+||naprecental.com^
+||napsut.com^
+||narenrosrow.com^
+||narepuewrwq.info^
+||narkalignevil.com^
+||narkwhelmed.digital^
+||narrateharmala.com^
+||nasalburglarthomas.com^
+||nasaldares.com^
+||nastycomfort.pro^
+||nastymankinddefective.com^
+||nastymetus.com^
+||natantkidders.tech^
+||natapea.com^
+||natare.xyz^
+||natcreativeide.info^
+||nathanaeldan.pro^
+||nationalityblizzard.com^
+||nationhandbook.com^
+||nationssalvation.com^
+||nativclick.com^
+||native-adserver.com^
+||nativeadmatch.com^
+||nativeadsfeed.com^
+||nativepu.sh^
+||nativewpsh.com^
+||nativewpshep.com^
+||natorm.com^
+||natregs.com^
+||natsdk.com^
+||nattepush.com^
+||nattierariosi.space^
+||naturalhealthsource.club^
+||naturalistsbumpmystic.com^
+||naturallyedaciousedacious.com^
+||naucaips.com^
+||naucaish.net^
+||naughtynotice.pro^
+||naumkamebian.com^
+||nauseacomplimentary.com^
+||nauseousonto.com^
+||naustoch.net^
+||navalreasonablynearby.com^
+||navaltophes.com^
+||navelfletch.com^
+||naveljutmistress.com^
+||navigablepiercing.com^
+||navigationconcept.com^
+||navywilyoccur.com^
+||nawcgetfwpbff.com^
+||nawpush.com^
+||naxadrug.com^
+||naysaywinless.guru^
+||naywordumiaks.website^
+||nazyepfnko.com^
+||nbasicalbuffere.com^
+||nbidqsoy.xyz^
+||nbmramf.de^
+||nbmuesyi.com^
+||nboclympics.com^
+||nbottkauyy.com^
+||nbr9.xyz^
+||nbstatic.com^
+||nbucvfymvkyv.com^
+||nbuztmmcv.com^
+||nbycustomlad.com^
+||nceaskedasensi.com^
+||ncefoundanges.com^
+||ncejhltxobrl.com^
+||nceqpmxyhqo.com^
+||nceteventuryrem.com^
+||ncevipdjsuoln.com^
+||ncpxhrurirscgsd.com^
+||ncraxcvibg.com^
+||ncukgqjfaxjv.com^
+||ncuwtufam.com^
+||ncvvfhex.com^
+||ncxejhlardcbm.com^
+||nczxuga.com^
+||ndandinter.hair^
+||ndblowthroug.info^
+||ndccouuyotn.com^
+||ndcomemuni.com^
+||ndds0001.com^
+||ndds0002.com^
+||ndedaphon.com^
+||ndegj3peoh.com^
+||ndejhe73jslaw093.com^
+||ndentofinau.info^
+||nderthfeo.info^
+||ndha4sding6gf.com^
+||nditingdecord.org^
+||ndjelsefd.com^
+||ndroip.com^
+||ndthensome.com^
+||ndweandthe.xyz^
+||ndweandthep.xyz^
+||ndwouldmeu.info^
+||neads.delivery^
+||neadwnhhis.xyz^
+||nearestaxe.com^
+||nearestmicrowavespends.com^
+||nearestsweaty.com^
+||neat-excuse.pro^
+||neatenmikra.life^
+||neathygienesmash.com^
+||neatsafety.com^
+||nebsefte.net^
+||nebulouslostpremium.com^
+||neburn.com^
+||neceme.com^
+||necessaryclassroom.pro^
+||necessaryescort.com^
+||necessaryinborn.com^
+||necessaryratio.pro^
+||necessarysticks.com^
+||nechupsu.com^
+||neckloveham.live^
+||necmah.com^
+||nectardoodled.com^
+||nedandlooked.org^
+||nedaughablelead.info^
+||nedouseso.com^
+||neechube.net^
+||neechuce.net^
+||needeevo.xyz^
+||needierstraits.website^
+||needleworkemmaapostrophe.com^
+||neednguarded.space^
+||needyscarcasserole.com^
+||neegreez.com^
+||neehoose.com^
+||neejisee.xyz^
+||neeladou.net^
+||neetoutoo.com^
+||neewhoum.net^
+||neexzbibw.com^
+||neezausu.net^
+||nefdcnmvbt.com^
+||negatesupervisor.com^
+||negationsome.com^
+||negbxdfn.xyz^
+||neglectdrivingalertness.com^
+||negligentresponded.com^
+||negligible-pension.pro^
+||negolist.com^
+||negotiationmajestic.com^
+||negrineoakwood.com^
+||negure.com^
+||negyuk.com^
+||nehodyshy.pro^
+||nehree.com^
+||neigna.com^
+||neilbl.com^
+||neintheworld.org^
+||neitherpennylack.com^
+||neitherpossessedset.com^
+||nekaujoa.net^
+||nektonsrutate.com^
+||nelhon.com^
+||nellads.com^
+||nellmeeten.com^
+||nemewagro.com^
+||nenectedithcon.info^
+||neoftheownouncillo.info^
+||neopowerlab.com^
+||neralcapicha.website^
+||nereserv.com^
+||nerfctv.com^
+||nergyflexibilit.pics^
+||nervous-touch.pro^
+||nervousclangprobable.com^
+||nesefurthere.info^
+||nesfspublicate.info^
+||nesiotcusses.space^
+||neslaveswedge.guru^
+||nesokiahld.com^
+||nessainy.net^
+||nessendencec.com^
+||nestedcoppras.com^
+||nestledmph.com^
+||nestledoubtlog.com^
+||nestleexperiment.com^
+||nestormandadv.xyz^
+||netcatx.com^
+||netflopin.com^
+||netherinertia.life^
+||nethosta.com^
+||netjtgcbe.xyz^
+||netload2.com^
+||netpatas.com^
+||netstam.com^
+||nettlyphosis.com^
+||nettube.top^
+||netund.com^
+||neumasham.space^
+||neurinacyesis.com^
+||neutralsaxophoneaspect.com^
+||neutraltoxicpreposition.com^
+||neuwiti.com^
+||nevail.com^
+||nevbbl.com^
+||never2never.com^
+||neverforgettab.com^
+||neverheartache.com^
+||neverthelessdamagingmakes.com^
+||neverthelessdepression.com^
+||nevhfrxaadmv.xyz^
+||new-incoming.email^
+||new-new-years.com^
+||new-programmatic.com^
+||new17write.com^
+||newadflow.com^
+||newadflown.com^
+||newadflows.com^
+||newadsfit.com^
+||newaprads.com^
+||newbiquge.org^
+||newbluetrue.xyz^
+||newbornleasetypes.com^
+||newcomerbenchlilac.com^
+||newdisplayformats.com^
+||newdomain.center^
+||newhigee.net^
+||newir3ltyug79aiman.com^
+||newjulads.com^
+||newlifezen.com^
+||newmayads.com^
+||newoctads.com^
+||newprofitcontrol.com^
+||newrtbbid.com^
+||news-back.org^
+||news-balica.com^
+||news-bigefu.com^
+||news-bizowa.com^
+||news-bobeho.com^
+||news-butoto.com^
+||news-buzz.cc^
+||news-capufu.com^
+||news-central.org^
+||news-fadubi.com^
+||news-getogo.com^
+||news-headlines.co^
+||news-host.net^
+||news-losaji.com^
+||news-mefuba.cc^
+||news-muheji.com^
+||news-nerahu.cc^
+||news-paxacu.com^
+||news-place1.xyz^
+||news-portals1.xyz^
+||news-rarore.cc^
+||news-rojaxa.com^
+||news-site1.xyz^
+||news-tamumu.cc^
+||news-universe1.xyz^
+||news-weekend1.xyz^
+||news-xehola.com^
+||newsaboutsugar.com^
+||newsadst.com^
+||newsatads.com^
+||newsbeunity.com^
+||newscadence.com^
+||newsfeedscroller.com^
+||newsfeedzscrollz.com^
+||newsformuse.com^
+||newsfortoday2.xyz^
+||newsforyourmood.com^
+||newsfrompluto.com^
+||newsignites.com^
+||newsinform.net^
+||newslikemeds.com^
+||newsmaxfeednetwork.com^
+||newsnourish.com^
+||newssale.info^
+||newstarads.com^
+||newstemptation.com^
+||newsunads.com^
+||newswhose.com^
+||newsyour.net^
+||newthuads.com^
+||newtits.name^
+||newvideoapp.pro^
+||newzilla.name^
+||nexdunaw.xyz^
+||next-pops.top^
+||nextdark.pro^
+||nextgencounter.com^
+||nextpsh.top^
+||neylwuhxhaek.com^
+||nezuel.com^
+||nezygmobha.com^
+||nfctoroxi.xyz^
+||nfeblwlatpnbjs.com^
+||nfjpykkvvqet.com^
+||nfkq8jy5db0b.com^
+||nftjmbhwxgo.com^
+||nfuwpyx.com^
+||nfwivxk.com^
+||nfxlrsxwvofi.com^
+||ngcies.com^
+||ngegas.files.im^
+||ngeoziadiyc4hi2e.com^
+||ngforanoppor.info^
+||ngfruitiesmatc.info^
+||ngleaccinemad.xyz^
+||nglestpeoplesho.com^
+||nglmedia.com^
+||ngnhdkjnspb.com^
+||ngokohorsing.top^
+||ngolstonora.xyz^
+||ngplansforourco.info^
+||ngqstfvwfzv.com^
+||ngsinspiringtga.info^
+||nguad.com^
+||ngujaqm.com^
+||ngukmodukule.info^
+||ngvoicethaults.com^
+||ngxpprnv.com^
+||nhamformane.com^
+||nheappyrincen.info^
+||nheappyrincenev.info^
+||nhfalufsl.com^
+||nhjnkis.com^
+||nhjsuchlliioi.com^
+||nhopaepzrh.com^
+||nhotninca.xyz^
+||nhpfvdlbjg.com^
+||nhqxzqvkj.com^
+||nhuzqnpnbjm.com^
+||niaisimpreg.website^
+||niaisrbound.digital^
+||nianstarvards.info^
+||niauuslsoxwte.com^
+||nibvtxyofd.com^
+||nibzitgas.com^
+||nicatethebene.info^
+||nicboab.com^
+||nice-mw.com^
+||nicebigheartedgargle.com^
+||niceelitdating.top^
+||nicelocaldates.com^
+||nicelyporeengine.com^
+||nicesthoarfrostsooner.com^
+||nicestsame.com^
+||nicheads.com^
+||nichedlinks.com^
+||nicheevaderesidential.com^
+||nichegreatunemployment.com^
+||nicholassemicircledomesticated.com^
+||nichools.com^
+||nickeeha.net^
+||nickeyssizzle.guru^
+||nicknameuntie.com^
+||nicksstevmark.com^
+||nicmaui.com^
+||nicmisa.com^
+||nicthei.com^
+||nidredra.net^
+||nidudihideout.com^
+||niececordthrone.com^
+||nielledhaling.digital^
+||nieveni.com^
+||nifiel.com^
+||niftiesrotonde.com^
+||nifty-drive.pro^
+||nifty-transportation.com^
+||nigerm.com^
+||niggedpacaya.com^
+||nighter.club^
+||nightfallforestallbookkeeper.com^
+||nightfallroad.com^
+||nightingaletasting.com^
+||nightsboostam.com^
+||nigion.com^
+||nigmen.com^
+||nigooshe.net^
+||nigure.com^
+||nihiy.com^
+||nikkiexxxads.com^
+||nilreels.com^
+||niltibse.net^
+||nimhuemark.com^
+||nimrute.com^
+||ninanceenab.com^
+||ninancukanking.info^
+||nineanguish.com^
+||nineteenthdipper.com^
+||ninetyninesec.com^
+||ninetypastime.com^
+||ninetyreguli.com^
+||ninkorant.online^
+||ninnycoastal.com^
+||ninoglostoay.com^
+||ninsu-tmc.com^
+||nipmucktwicer.com^
+||nipoughtnt.guru^
+||nipperathymy.life^
+||nippona7n2theum.com^
+||nippytelephone.pro^
+||nirisrutin.store^
+||nitheemp.net^
+||nitqbanrbcv.xyz^
+||nitridsplurel.com^
+||nitriotgillian.digital^
+||nitrogenblissful.com^
+||nitrogendetestable.com^
+||nitrogeneligible.com^
+||nittaleucoma.guru^
+||niwooghu.com^
+||niyamabusiest.casa^
+||nization.com^
+||njfxmqvonppwq.com^
+||njjebgkvrniwmr.com^
+||njlcmkzfex.com^
+||njlzougyfjo.com^
+||njplpnoxgnbpid.com^
+||njufnhkmqpk.xyz^
+||njvacw.xyz^
+||nkbobsj.com^
+||nkfinsdg.com^
+||nkhjioewwc.xyz^
+||nkindthatmade.xyz^
+||nkljaxdeoygatfw.xyz^
+||nkmsite.com^
+||nkredir.com^
+||nlargeconsu.info^
+||nld0jsg9s9p8.com^
+||nlkli.com^
+||nlmthxjgjhg.com^
+||nlntrk.com^
+||nlop.xyz^
+||nlqqrsgr.com^
+||nlzxclfg.com^
+||nmanateex.top^
+||nmcdn.us^
+||nmcpmjreuswnzs.com^
+||nmcsqihltjdnheq.com^
+||nmkli.com^
+||nmqwdmtwjleb.com^
+||nmrjnqiwocfyi.com^
+||nmthpcanvokjbkh.xyz^
+||nmxqtuyyojgm.com^
+||nmybyxnjscf.com^
+||nnetvsvxrxhkai.com^
+||nnitejdvebpqa.com^
+||nnkqkvqk.com^
+||nnncrox.com^
+||nnnfqegwes.xyz^
+||nnthewdnez.com^
+||nnxijkdigwywla.com^
+||no2veeamggaseber.com^
+||noafoaji.xyz^
+||noahilum.net^
+||noaiaft.com^
+||noamiscience.pro^
+||noanawie.com^
+||noanrzfdt.com^
+||noapai.name^
+||noaptauw.com^
+||nobbutaaru.com^
+||nobilitybefore.com^
+||noblefun.net^
+||noblymarlier.com^
+||nobost.com^
+||nobrrjpxbpmus.com^
+||noclef.com^
+||nocuousbestir.com^
+||nodcaterercrochet.com^
+||nodderbeezers.com^
+||noddinglavish.com^
+||noddlegoop.com^
+||nodouslover.com^
+||nodulhrwxdptbc.com^
+||noearon.click^
+||noelsdoc.cam^
+||noerwe5gianfor19e4st.com^
+||nofashot.com^
+||nofidroa.xyz^
+||nogqyqhpoybm.xyz^
+||nohezu.xyz^
+||noiseslaveoutfit.com^
+||noisesuperserver.com^
+||noisyassistance.pro^
+||noisybeforemorton.com^
+||noisytariff.com^
+||nojhhsg.com^
+||noksauxi.com^
+||nolrougn.com^
+||nomadsbrand.com^
+||nomadsdata.com^
+||nomadsfit.com^
+||nomadtricesurfing.com^
+||nomathoo.net^
+||nomeuspagrus.com^
+||nominalreverend.com^
+||nominateallegation.com^
+||nominatecambridgetwins.com^
+||nomnemtalions.com^
+||nomorepecans.com^
+||nonbasekick.com^
+||nondescriptlet.com^
+||nondescriptmaterial.com^
+||nondescripttuxedo.com^
+||nonecoffeehousesuspicious.com^
+||nonerr.com^
+||nonesgue.space^
+||nonestolesantes.com^
+||nonewnews.name^
+||nonfattoplike.com^
+||nonfatwhorage.life^
+||nonfictionrobustchastise.com^
+||nonfictiontickle.com^
+||nongamemealman.guru^
+||nonimoomi.com^
+||nonotro.name^
+||nonsensethingresult.com^
+||nonspewpa.com^
+||nonstoppartner.de^
+||nontaxmeteors.com^
+||noobilubi.com^
+||noodokod.xyz^
+||noofigat.net^
+||noojoomo.com^
+||nooncommentary.com^
+||noonfrequentpea.com^
+||noonsderider.com^
+||noonuproarincompetence.com^
+||noopaipo.com^
+||nooroapo.com^
+||noosersturtles.com^
+||noosingimmask.com^
+||nopalryyipped.com^
+||nope.xn--mgbkt9eckr.net^
+||nope.xn--ngbcrg3b.com^
+||nope.xn--ygba1c.wtf^
+||nopolicycrea.info^
+||nopoloferewer.com^
+||noproblfr.com^
+||noptog.com^
+||noqukjy.com^
+||norakseemlyntr.com^
+||nordeela.com^
+||norentisol.com^
+||noretia.com^
+||noritesazotes.com^
+||normalfurthermoreairliner.com^
+||normallydirtenterprising.com^
+||normalrepublicemulate.com^
+||normkela.com^
+||normugtog.com^
+||northleaderpayback.com^
+||northmay.com^
+||northwestdiddived.com^
+||norymo.com^
+||nosebleedlonerdays.com^
+||nosedetriment.com^
+||nossairt.net^
+||nosselaune.space^
+||nostocsfermery.life^
+||nostormidentification.com^
+||nostrilquarryprecursor.com^
+||nostromedia.com^
+||notadsworld.com^
+||notaloneathome.com^
+||notchcollectormuffin.com^
+||notcotal.com^
+||notdyedfinance.com^
+||notebookbesiege.com^
+||notebookmedicine.com^
+||notesbook.in^
+||nothiermonicg.com^
+||nothingnightingalejuly.com^
+||nothingpetwring.com^
+||nothycantyo.com^
+||noticebroughtcloud.com^
+||notifcationpushnow.com^
+||notification-list.com^
+||notificationallow.com^
+||notifications.website^
+||notiflist.com^
+||notifpushnext.net^
+||notifpushnow.com^
+||notifsendback.com^
+||notify-master.net^
+||notify-monad.com^
+||notify-service.com^
+||notify.rocks^
+||notify6.com^
+||notifyerr.com^
+||notifyoutspoken.com^
+||notifypicture.info^
+||notifysrv.com^
+||notionsshrivelcustomer.com^
+||notitiarondino.live^
+||notonthebedsheets.com^
+||notorietycheerypositively.com^
+||notorietynoblemanproposition.com^
+||notoriousentice.com^
+||notos-yty.com^
+||notwithstandingjuicystories.com^
+||notwithstandingpeel.com^
+||noucoush.net^
+||nougacoush.com^
+||noughtefface.com^
+||noughttrustthreshold.com^
+||noumekiz.net^
+||nounct.com^
+||nounooch.com^
+||nounrespectively.com^
+||noureewo.com^
+||nourishinghorny.com^
+||nouveaulain.com^
+||novadune.com^
+||novelty.media^
+||noveltyensue.com^
+||novemberadventures.com^
+||novemberadventures.name^
+||novemberseatsuccession.com^
+||novembersightsoverhear.com^
+||novicetattooshotgun.com^
+||novidash.com^
+||novitrk1.com^
+||novitrk4.com^
+||novitrk7.com^
+||novitrk8.com^
+||novostisporta.info^
+||nowadaysgrin.com^
+||nowaynoconvs.net^
+||nowhereunbox.com^
+||nowlooking.net^
+||nowrs.xyz^
+||nowspots.com^
+||nowsubmission.com^
+||nowtrk.com^
+||noxiousrecklesssuspected.com^
+||nozzorli.com^
+||npcad.com^
+||npcta.xyz^
+||npdocxjt.com^
+||npdyxhvefuqkj.xyz^
+||npjhdunxxfhwgtv.com^
+||npkzqlhtecxx.com^
+||npracticalwhic.buzz^
+||npracticalwhich.com^
+||npugpilraku.com^
+||npvesnqurlscye.xyz^
+||npvos.com^
+||npyqwxlztwlea.com^
+||npytbfqwamyxkdp.xyz^
+||nqgdljechyyska.com^
+||nqhataamn.xyz^
+||nqmanxtemqvlne.com^
+||nqmfmnmqysei.com^
+||nqn7la7.de^
+||nqrkzcd7ixwr.com^
+||nqsbadijd.com^
+||nqslmtuswqdz.com^
+||nqtufgmgmjnwlj.com^
+||nqvlkmmti.com^
+||nrcqqpjx.xyz^
+||nreg.world^
+||nrmlewvayj.com^
+||nrnma.com^
+||nroqwfqwcdtb.xyz^
+||nrqppdgnhaagjq.com^
+||nrvbadypy.com^
+||nryanocytqc.com^
+||nryceuula.com^
+||nrztjbpish.com^
+||ns003.com^
+||nsaimplemuke.info^
+||nsdsvc.com^
+||nsfdsa.xyz^
+||nsfwadds.com^
+||nshio.com^
+||nsjczjnrravfcj.com^
+||nsjyfpo.com^
+||nslokxweviwqbg.com^
+||nsmartad.com^
+||nsomedidm.xyz^
+||nspmotion.com^
+||nspot.co^
+||nsshed.com^
+||nstoodthestatu.com^
+||nsuchasricew.com^
+||nsultingcoe.net^
+||nsyywkq.com^
+||ntanaerc.cyou^
+||ntcqmdif.com^
+||ntdvjlvau.com^
+||ntedbycathyhou.info^
+||ntgetjpqk.com^
+||ntiaxofk.xyz^
+||ntjmnyzwkpb.com^
+||ntmatchwithy.info^
+||ntmemns.com^
+||ntoftheusysia.info^
+||ntoftheusysianedt.info^
+||ntoftheusysih.info^
+||ntrfr.leovegas.com^
+||ntsiwoulukdli.org^
+||ntsujfrvvabs.com^
+||ntswithde.autos^
+||ntuplay.xyz^
+||nturnwpqyqup.com^
+||nturyremovem.com^
+||ntv.io^
+||ntvk1.ru^
+||ntvpevents.com^
+||ntvpever.com^
+||ntvpforever.com^
+||ntvpinp.com^
+||ntvpwpush.com^
+||ntvsw.com^
+||ntxviewsinterfu.info^
+||nubseech.com^
+||nuclav.com^
+||nucleo.online^
+||nuculetirl.com^
+||nudczusipbu.com^
+||nudebenzoyl.digital^
+||nudgedfardel.com^
+||nudgercoptine.life^
+||nudgeworry.com^
+||nudistuncurst.com^
+||nuevonoelmid.com^
+||nuggetschou.com^
+||nuglegdkyjlaye.com^
+||nugrudsu.xyz^
+||nui.media^
+||nukeluck.net^
+||nukxwyyhuinwf.com^
+||nuleedsa.net^
+||nulez.xyz^
+||null-point.com^
+||nullboatloo.com^
+||nullsglitter.com^
+||nullsrefilliron.com^
+||nulpailou.com^
+||nultoaly.net^
+||nulwhbbyfdxy.com^
+||numberium.com^
+||numbertrck.com^
+||numeralembody.com^
+||numeralstoast.com^
+||numsodsi.com^
+||nunailsum.com^
+||nunciosmegasse.website^
+||nunhoefey.com^
+||nuniceberg.com^
+||nupdhyzetb.com^
+||nupharbakongo.com^
+||nuphizarrafw.com^
+||nuqwe.com^
+||nuraghireels.com^
+||nurewsawaninc.info^
+||nurno.com^
+||nurobi.info^
+||nursecompellingsmother.com^
+||nurserysurvivortogether.com^
+||nuseek.com^
+||nutattorneyjack.com^
+||nutgxfwechkcuf.com^
+||nutletcorvees.com^
+||nutrientassumptionclaims.com^
+||nutrientexceptingreplica.com^
+||nutrientmole.com^
+||nutritionshooterinstructor.com^
+||nutritious-hang.pro^
+||nutshellcellularfibber.com^
+||nutsmargaret.com^
+||nuttyanger.pro^
+||nuvedu.xyz^
+||nuzuki.com^
+||nvaepsns.com^
+||nvane.com^
+||nvchhzg.com^
+||nveryldgittle.cc^
+||nvgelwnecuw.com^
+||nvlalpfft.com^
+||nvougpk.com^
+||nvqjpzxufp.com^
+||nvrblk.xyz^
+||nvudvvaecq.com^
+||nvxcvyfedg.com^
+||nvyrgsqdqh.com^
+||nvzcoggh.com^
+||nwejuljibczi.com^
+||nwhocamewi.xyz^
+||nwhuomqmuym.com^
+||nwwais.com^
+||nxdcyhmwxlqc.com^
+||nxiqvhhm.com^
+||nxlreuwdto.com^
+||nxt-psh.com^
+||nxtck.com^
+||nxthost-1.info^
+||nxthost-2.info^
+||nxtpsh.com^
+||nxtpsh.top^
+||nxutavor.com^
+||nyadmcncserve-05y06a.com^
+||nyadra.com^
+||nybblesbarotse.com^
+||nydbehindforh.xyz^
+||nyetm2mkch.com^
+||nyfoknamlrqxc.com^
+||nygwcwsvnu.com^
+||nyhrgss.com^
+||nylonnickel.com^
+||nymauteyfa.info^
+||nynjiahyewoji.com^
+||nythemorewasth.xyz^
+||nytrng.com^
+||nyutkikha.info^
+||nzhfk.com^
+||nzme-ads.co.nz^
+||nzrzgorm.com^
+||nzuebfy.com^
+||o-oo.ooo^
+||o18.click^
+||o18.link^
+||o2c7dks4.de^
+||o313o.com^
+||o333o.com^
+||o4nofsh6.de^
+||o4uxrk33.com^
+||o626b32etkg6.com^
+||o911o.com^
+||oacaighy.com^
+||oacfxrqghamyaq.com^
+||oackoubs.com^
+||oadaheba.net^
+||oadrojoa.net^
+||oadsaurs.net^
+||oadsouzi.net^
+||oafschamois.live^
+||oafsevasive.com^
+||oaftaijo.net^
+||oagnatch.com^
+||oagoalee.xyz^
+||oahaurti.com^
+||oahosaisaign.com^
+||oainternetservices.com^
+||oaiweznjo.com^
+||oajagroax.com^
+||oakaumou.xyz^
+||oakbustrp.com^
+||oakchokerfumes.com^
+||oakenboubous.com^
+||oaklesy.com^
+||oakletquerela.website^
+||oaksafta.com^
+||oalitoug.com^
+||oalsauwy.net^
+||oalselry.com^
+||oalsoagn.com^
+||oamoatch.com^
+||oamtorsa.net^
+||oanimsen.net^
+||oansaifo.net^
+||oaphoace.net^
+||oaphooftaus.com^
+||oarcompartmentexaggerate.com^
+||oardilin.com^
+||oaredtroth.com^
+||oargaung.com^
+||oarsmenmytilid.uno^
+||oarsmorsel.com^
+||oarsouss.net^
+||oasazedy.com^
+||oasqrthubiub.com^
+||oataltaul.com^
+||oatbcxnhacfjnc.com^
+||oatchelt.com^
+||oatmealaspectpulp.com^
+||oatmeallump.com^
+||oatsouje.net^
+||oaujswgofu.com^
+||oaxoulro.com^
+||oaxpcohp.com^
+||oazartie.com^
+||oazoorse.com^
+||obadluhjxnsnfv.com^
+||obanmafn.com^
+||obbkucbipw.com^
+||obdoboli.xyz^
+||obdtawpwyr.com^
+||obduratecommence.com^
+||obduratedroppingmagnitude.com^
+||obduratewiggle.com^
+||obediencepulse.com^
+||obedientrock.com^
+||obedirectukly.info^
+||obeus.com^
+||obeyedortostr.cc^
+||obeysatman.com^
+||obituaryfuneral.com^
+||objectbrilliance.com^
+||objectdressed.com^
+||objectedinward.com^
+||objectionsdomesticatednagging.com^
+||objective-wright-961fed.netlify.com^
+||objectlesscowerfuzzy.com^
+||objectsentrust.com^
+||objectstutted.store^
+||objureexamen.life^
+||obkgavorztij.com^
+||obligemadeuprough.com^
+||oblivionthreatjeopardy.com^
+||oblivionwatcherrebellious.com^
+||oblong-pool.pro^
+||oblongcondition.com^
+||oblongravenousgosh.com^
+||obnarium.com^
+||obnoxiouspatrolassault.com^
+||obnoxiousstackderide.com^
+||oboistbasify.com^
+||obolaryramees.space^
+||oboletcart.com^
+||oboletcystin.website^
+||obolic.com^
+||obolxietnquosyr.com^
+||obouckie.com^
+||obovoidfidgets.com^
+||obputpnbtdoy.com^
+||obrans.com^
+||obrightsapphir.com^
+||obscenityaccordinglyrest.com^
+||obscenityimplacable.com^
+||obscenitymama.com^
+||obscus.com^
+||observanceafterthrew.com^
+||observativus.com^
+||observedbrainpowerweb.com^
+||observedlily.com^
+||obsessiondiscourteous.com^
+||obsessionseparation.com^
+||obsessivepetsbean.com^
+||obsessivepossibilityminimize.com^
+||obsidiancutter.top^
+||obsignphippe.com^
+||obsors.com^
+||obspkoirhnvq.xyz^
+||obstaclebornevastly.com^
+||obstanceder.pro^
+||obstre.com^
+||obstructcrucialcommander.com^
+||obstructdogcollarblockade.com^
+||obstructionsaint.com^
+||obstry.com^
+||obtainadopteddeliberately.com^
+||obtainedoraltreat.com^
+||obtrol.com^
+||obtrusiveflatlymoth.com^
+||obtrusiveperhaps.com^
+||obtundmassier.com^
+||obviatemuscoid.guru^
+||obvious-lesson.pro^
+||obviousraiment.com^
+||oc2tdxocb3ae0r.com^
+||ocalqoiw.com^
+||ocasosfjpbf.com^
+||occame.com^
+||occarv.com^
+||occasionallyregionsadverb.com^
+||occasionalstatusbella.com^
+||occdmioqlo.com^
+||occept.com^
+||occludebetray.uno^
+||occultshout.com^
+||occums.com^
+||occupationcomplimentsenjoyment.com^
+||occurclaimed.com^
+||occurt.com^
+||occust.com^
+||occxfzqyhhq.com^
+||occxhidubbh.com^
+||ocddolmggjc.com^
+||ocdouoqjvmn.com^
+||ocean-trk.com^
+||oceanfilmingexperience.com^
+||oceanvids.space^
+||ocexprhrknxrhe.com^
+||ocfhdcmwekmjf.com^
+||ocflkcgwjem.com^
+||ochaugly.net^
+||ocheebou.xyz^
+||ochredhistory.com^
+||ochringtensor.com^
+||oclaserver.com^
+||oclasrv.com^
+||ocmhood.com^
+||ocmtag.com^
+||oconner.link^
+||octanmystes.com^
+||octaviancontrast.com^
+||octavianflingpod.com^
+||octavianimmaculate.com^
+||octkuhwuvxarsk.xyz^
+||octoatesamhain.com^
+||octobermindless.com^
+||octopod.cc^
+||octopusiron.com^
+||octopuspop.com^
+||octrib.com^
+||octrol.com^
+||ocularribozo.com^
+||ocumes.com^
+||ocuuqdqupbpvp.com^
+||ocuwyfarlvbq.com^
+||ocygacror.com^
+||odbxgdxgvo.com^
+||oddauthorscreative.com^
+||oddlyogeed.com^
+||oddsfana.space^
+||oddsserve.com^
+||odeerofhisk.xyz^
+||odipjwipwwyus.xyz^
+||odkfzmwfkjgzag.com^
+||odlyccugg.com^
+||odnaknopka.ru^
+||odnaturedfe.org^
+||odoursguard.website^
+||odpfujlimjuk.com^
+||odylespiacle.com^
+||oeaubbhajhkaav.xyz^
+||oeavjktqqpkntgq.com^
+||oeckey.com^
+||oedroughl.xyz^
+||oehfvrpeleg.com^
+||oemifaobrxe.com^
+||oeokfmroaiuwo.xyz^
+||oestpq.com^
+||oeuvresvexable.com^
+||oevkkqrar.com^
+||of-bo.com^
+||ofcamerupta.com^
+||ofchildr.buzz^
+||ofclaydolr.com^
+||ofcvrpxsx.com^
+||ofdittor.com^
+||ofdxfsho.com^
+||ofedupub.com^
+||offalakazaman.com^
+||offarmiesupward.com^
+||offchatotor.com^
+||offendedcontributorfour.com^
+||offendedtwine.com^
+||offendselfportrait.com^
+||offensivepitcherultimately.com^
+||offercookerychildhood.com^
+||offerentsentedo.com^
+||offergate-apps-pubrel.com^
+||offerimage.com^
+||offerlink.co^
+||offersapp.in^
+||offersbid.com^
+||offersbid.net^
+||offershub.net^
+||offerstrackingnow.com^
+||offfurreton.com^
+||offhdgatyooum.com^
+||officerolivehaughty.com^
+||officetablntry.org^
+||officialbanisters.com^
+||officialstovethemselves.com^
+||offloadingsite.com^
+||offmachopor.com^
+||offmantiner.com^
+||offoonguser.com^
+||offpathgenuinely.com^
+||offpichuan.com^
+||offshoredependant.com^
+||offshorenonfictionbriefing.com^
+||offshuppetchan.com^
+||offsigilyphor.com^
+||ofgogoatan.com^
+||ofhappinyer.com^
+||ofhypnoer.com^
+||ofleafeona.com^
+||ofoockoo.com^
+||ofphanpytor.com^
+||ofpiplupon.com^
+||ofqopmnpia.com^
+||ofregahen.com^
+||ofregahen.xyz^
+||ofrumhiswhelectua.info^
+||ofseedotom.com^
+||ofslakotha.com^
+||oftenparttimebeen.com^
+||oftheappyri.org^
+||oftheseveryh.org^
+||oftheseveryh.xyz^
+||ogaewcqgj.com^
+||ogblanchi.com^
+||ogdbqljceatnjal.com^
+||ogduabkzinl.com^
+||ogeesuropod.digital^
+||ogercron.com^
+||ogetherefwukoul.info^
+||ogghpaoxwv.com^
+||oggifinogi.com^
+||oghqvffmnt.com^
+||ogicatius.com^
+||ogle-0740lb.com^
+||ogleskys.live^
+||oglooque.com^
+||ogniicbnb.ru^
+||ognimyjm.com^
+||ograuwih.com^
+||ogrrmasukq.com^
+||ogskle.com^
+||ogtgurmzeoj.com^
+||ogwmubfnjbzyo.com^
+||ogwqkgtboxol.com^
+||ohaijoub.com^
+||ohdrgrpfyvughty.xyz^
+||ohelgbbileii.xyz^
+||ohfowsawvgig.com^
+||ohibal.com^
+||ohkahfwumd.com^
+||ohkdsplu.com^
+||ohkvifgino.com^
+||ohkyxnjj.com^
+||ohlattice.com^
+||ohldsplu.com^
+||ohmcasting.com^
+||ohmwrite.com^
+||ohmwweulu.com^
+||ohndsplu.com^
+||ohnwmjnsvijdrgx.xyz^
+||ohoycaline.com^
+||ohpgamsojj.com^
+||ohrdsplu.com^
+||ohsatum.info^
+||ohsdarg.com^
+||ohsruxbixgzu.com^
+||ohtctjiuow.com^
+||ohwhdspj.com^
+||oiarske.com^
+||oigduusrva.com^
+||oillesssris.guru^
+||oilskinvulvar.digital^
+||oilwellcuprene.com^
+||oinkedbowls.com^
+||ointmentaloofpincers.com^
+||ointmentapathetic.com^
+||ointmentfloatingsaucepan.com^
+||ointmenthind.com^
+||oionsglearned.com^
+||oixohmve.com^
+||oiycak.com^
+||oj.4wank.com^
+||ojapanelm.xyz^
+||ojbrtkrvew.com^
+||ojfxjdiusut.com^
+||ojomrgmhbbpkpz.com^
+||ojpem.com^
+||ojqbnqdwycws.com^
+||ojtarsdukk.com^
+||ojuhfoa.com^
+||ojwapnolwa.com^
+||ojzghaawlf.com^
+||okaks.com^
+||okapisail.com^
+||okayarab.com^
+||okayfreemanknot.com^
+||okdigital.me^
+||okehsominous.com^
+||okfgsbtmcnh.com^
+||okienamare.com^
+||okitwpyslqm.com^
+||oklahi.com^
+||oklzdmdhqgxsu.com^
+||oknmalpxnjhe.xyz^
+||oko.net^
+||oksooem.com^
+||okt5mpi4u570pygje5v9zy.com^
+||oktachimble.com^
+||oktpage.com^
+||okueroskynt.com^
+||okupsudd.work^
+||okvovqrfuc.com^
+||olakoudos.xyz^
+||olamicmails.com^
+||olatumal.com^
+||olayomad.com^
+||old-go.pro^
+||oldassist.pro^
+||olderdeserved.com^
+||oldership.com^
+||oldeststrickenambulance.com^
+||oldgyhogola.com^
+||oldied.com^
+||oldmilram.com^
+||oldpiecesontheth.com^
+||oldrdiedebog.xyz^
+||oleariaalgenib.com^
+||olefinefraist.com^
+||olep.xyz^
+||olgknseruf.com^
+||olibes.com^
+||olineman.pro^
+||olivedinflats.space^
+||olivednitrils.com^
+||olivefail.com^
+||olivefamine.com^
+||ollsukztoo.com^
+||olmsoneenh.info^
+||olnjitvizo.com
+||olnoklmuxo.com^
+||olomonautcatho.info^
+||olongercrak.xyz^
+||olongercrav.com.ua^
+||olpfeere.com^
+||olpxupvisl.com^
+||olrbbwxkm.top^
+||olularhenewrev.info^
+||olxcvfwfej.com^
+||olxtqlyefo.xyz^
+||olympicsappointment.com^
+||olzatpafwo.com^
+||omanala.com^
+||omandersingly.com^
+||omareeper.com^
+||omasatra.com^
+||omatri.info^
+||omazeiros.com^
+||ombtkqikm.com^
+||omchanseyr.com^
+||omchimcharchan.com^
+||omciecoa37tw4.com^
+||omclacrv.com^
+||omclyzyapf.com^
+||omcrobata.com^
+||omding.com^
+||omdittoa.com^
+||omegatrak.com^
+||omelettecrippledemployee.com^
+||omenrandomoverlive.com^
+||omenreprimanddesigner.com^
+||omfiydlbmy.com^
+||omg2.com^
+||omgpm.com^
+||omgrdrodobidu.com^
+||omgt4.com^
+||omgt5.com^
+||omikhainpretts.xyz^
+||ominateamt.com^
+||omitbailey.com^
+||omitpollenending.com^
+||omjigrivrccwcn.xyz^
+||omjitjlhx.com^
+||omkitww.com^
+||omkxadadsh.com^
+||ommatearittock.digital^
+||omnatuor.com^
+||omni-ads.com^
+||omnidokingon.com^
+||omnipresentstream.com^
+||omniscrienttow.com^
+||omnitagjs.com^
+||omoahope.net^
+||omoonsih.net^
+||omopeemt.net^
+||omphantumpom.com^
+||omruihaeaf.com^
+||omshedinjaor.com^
+||omvcilk.com^
+||omzylhvhwp.com^
+||onad.eu^
+||onads.com^
+||onaged.com^
+||onagriflocoon.com^
+||onakasulback.autos^
+||onameketathar.com^
+||onandeggsis.com^
+||onandeggsiswe.com.ua^
+||onandeggsiswel.xyz^
+||onanistbrawns.store^
+||onatallcolumn.com^
+||onatsoas.net^
+||onaugan.com^
+||onautcatholi.xyz^
+||onboardhairy.com^
+||oncdiranwrus.com^
+||onclarck.com^
+||onclasrv.com^
+||onclickads.net^
+||onclickalgo.com^
+||onclickclear.com^
+||onclickgenius.com^
+||onclickmax.com^
+||onclickmega.com^
+||onclickperformance.com^
+||onclickprediction.com^
+||onclickpredictiv.com^
+||onclickpulse.com^
+||onclickrev.com^
+||onclickserver.com^
+||onclicksuper.com^
+||onclkds.com^
+||onclklnd.com^
+||oncomeannuals.com^
+||ondbarrowat.xyz^
+||ondeerlingan.com^
+||ondybazars.guru^
+||oneadvupfordesign.com^
+||oneclck.net^
+||oneclickpic.net^
+||onedmp.com^
+||onedragon.win^
+||oneegrou.net^
+||onefoldonefoldpitched.com^
+||onegalact.com^
+||onegamespicshere.com^
+||onegoropsintold.com^
+||onelivetra.com^
+||onemacusa.net^
+||onemboaran.com^
+||onemileliond.info^
+||onenag.com^
+||onenectedithconsu.info^
+||onenetworkdirect.com^
+||onenetworkdirect.net^
+||onenomadtstore.com^
+||oneotheacon.cc^
+||onepstr.com^
+||oneqanatclub.com^
+||onerror.cf^
+||onerror.gq^
+||onesocailse.com^
+||onespot.com^
+||onestoreblog.com^
+||onesuns.com^
+||onetouch12.com^
+||onetouch17.info^
+||onetouch18.info^
+||onetouch19.com^
+||onetouch20.com^
+||onetouch22.com^
+||onetouch4.com^
+||onetouch6.com^
+||onetouch8.info^
+||onetrackesolution.com^
+||onevenadvnow.com^
+||onfcwaif.xyz^
+||ongastlya.com^
+||ongoingstool.com^
+||ongoingverdictparalyzed.com^
+||ongteqheroad.com^
+||onhadintrepha.info^
+||onhadintrephad.com^
+||onindexicowillio.com^
+||onjxuqwinn.com^
+||onkavst.com^
+||online-adnetwork.com^
+||online-protection-now.com^
+||onlinedeltazone.online^
+||onlinepromousa.com^
+||onlineuserprotector.com^
+||onlombreor.com^
+||onlyfansrips.com^
+||onlylookupsud.info^
+||onlyry.net^
+||onlyyourbiglove.com^
+||onmarshtompor.com^
+||onnkloshwrh.xyz^
+||onnrulogguyvy.com^
+||onogxwatipyevf.com^
+||onpluslean.com^
+||onpsrrejx.com^
+||onseleauks.org^
+||onservantas.org^
+||onsetknives.com^
+||onsetours.com^
+||onshowit.com^
+||onsolrockon.com^
+||onstunkyr.com^
+||ontariobeak.guru^
+||ontinuedidgm.com^
+||ontj.com^
+||ontodirection.com^
+||ontosocietyweary.com^
+||onugostlyhe.info^
+||onverforrinho.com^
+||onvictinitor.com^
+||onwardrespirationcommandment.com^
+||onwasrv.com^
+||onwekdebd.xyz^
+||oo00.biz^
+||oobuwjnlljbah.com^
+||oocxefrgn.com^
+||oodnaturedf.xyz^
+||oodrampi.com^
+||oodsauns.net^
+||oodsoobe.com^
+||oodsotso.com^
+||ooeciumpokable.com^
+||ooftauph.com^
+||ooftounu.com^
+||oofycyur.com^
+||oofyjigsaw.com^
+||oogleaamentum.com^
+||ooglootch.com^
+||ooglouth.xyz^
+||oogneenu.net^
+||ookresit.net^
+||ookroulsaurd.com^
+||ookroush.com^
+||oolassouwa.com^
+||ooloptou.net^
+||ooltutoo.net^
+||oomgnwdmzwnxn.com^
+||oomsijahail.com^
+||oomsoapt.net^
+||oomtexoa.com^
+||oongouha.xyz^
+||oonsaigu.xyz^
+||oopatet.com^
+||oopoawee.xyz^
+||oopodmomenta.website^
+||oopsauwa.xyz^
+||oopukrecku.com^
+||oorbfdycj.com^
+||ooredi.com^
+||oortelre.net^
+||oorwithabitofst.info^
+||ooswxraxqm.com^
+||ootchaig.xyz^
+||ootchoft.com^
+||ootibsay.xyz^
+||ootsoobs.net^
+||oourmarketingefifor.info^
+||oovaufty.com^
+||ooxookrekaun.com^
+||oozewhup.xyz^
+||oozoaseric.guru^
+||op00.biz^
+||op01.biz^
+||op02.biz^
+||opaleyeacarol.com^
+||opcharizardon.com^
+||opchikoritar.com^
+||opclauncheran.com^
+||opdowvamjv.com^
+||opealleven.com^
+||opeanresultanc.com^
+||opefaq.com^
+||opelop.com^
+||opencan.net^
+||openerkey.com^
+||openingdreamsspinster.com^
+||openingmetabound.com^
+||openlyprematurerates.com^
+||openlysideline.com^
+||openmindter.com^
+||opensdeiseal.com^
+||opentecs.com^
+||openx.net^
+||openxadexchange.com^
+||openxenterprise.com^
+||openxmarket.asia^
+||operaserver.com^
+||operaszeks.com^
+||operateheavilyswiftinfo-file.info^
+||operatepreciseheavilyinfo-product.info^
+||operativeperemptory.com^
+||operch.com^
+||operms.com^
+||opertyvaluationiam.xyz^
+||opgolan.com^
+||ophiticprevail.life^
+||ophoacit.com^
+||ophoadee.xyz^
+||ophophil.net^
+||ophophiz.xyz^
+||ophqmhser.com^
+||opificelitoral.com^
+||opinionatedprovide.com^
+||opjfqakvi.xyz^
+||opkfijuifbuyynyny.com^
+||oplo.org^
+||oplpectation.xyz^
+||opmuudn.com^
+||oponixa.com^
+||opootsoa.net^
+||oposfcjfav.com^
+||opoxv.com^
+||oppersianor.com^
+||opportunitybrokenprint.com^
+||opportunitysearch.net^
+||oppositehometowndrunken.com^
+||oppositevarietiesdepict.com^
+||oppressionhopefully.com^
+||oprill.com^
+||opsaupsa.com^
+||opshuckleor.com^
+||opsivesh.net^
+||opsoomet.net^
+||optad360.io^
+||optaivuy.net^
+||optaroag.com^
+||opteama.com^
+||opter.co^
+||opthushbeginning.com^
+||opticlygremio.com^
+||optidownloader.com^
+||optimagrasp.guru^
+||optimatic.com^
+||optimisticminiaturizationdowry.com^
+||optimizesocial.com^
+||optimizesrv.com^
+||optnx.com^
+||optouhou.xyz^
+||optraising.com^
+||optvx.com^
+||optyruntchan.com^
+||optzsrv.com^
+||opulent-reply.pro^
+||opvanillishan.com^
+||opxogkbiqkti.com^
+||oqcrqirncna.xyz^
+||oqeazohx.com^
+||oqelpqoyyz.com^
+||oqnabsatfn.com^
+||oralistnations.com^
+||orallantyneth.com^
+||oralmaliciousmonday.com^
+||oranegfodnd.com^
+||orangeads.fr^
+||orangeconsoleclairvoyant.com^
+||oraporn.com^
+||orariaivylike.space^
+||oratefinauknceiwo.com^
+||orbednubby.com^
+||orbengine.com^
+||orbitcarrot.com^
+||orblikevigonia.com^
+||orbsclawand.com^
+||orbsrv.com^
+||orbthindicab.cc^
+||orchardmaltregiment.com^
+||orchestraanticipation.com^
+||orchidreducedbleak.com^
+||orcinsjewish.com^
+||orcjagpox.com^
+||ordealsreannoy.top^
+||orderfritter.com^
+||orderlymall.pro^
+||orderlyregister.pro^
+||orderz.lol^
+||ordinardeuton.com^
+||ordinarilyinstead.com^
+||ordinaryleaving.com^
+||ordinaryspyimpassable.com^
+||ordisposableado.com^
+||ordounireme.website^
+||ordzimwtaa.com^
+||oreakingoutin.info^
+||orecticconchae.com^
+||oremuspolynoe.digital^
+||oreoverseer.top^
+||orest-vlv.com^
+||oretracker.top^
+||orfa1st5.de^
+||orgagetnization.org^
+||organexpectationsmaintain.com^
+||organizecoldness.com^
+||organsshinegarlic.com^
+||organsthud.com^
+||orgassme.com^
+||orgerm.com^
+||orgned.com^
+||orgxts.com^
+||orhisseache.com.ua^
+||orhisseachek.xyz^
+||oriberphomes.com^
+||orientaljoyful.com^
+||originaldivide.pro^
+||originatelamenttedious.com^
+||originatepromotebetrayal.com^
+||origincrayonremained.com^
+||originedreting.site^
+||originjargon.com^
+||origintube.com^
+||origunix.com^
+||orisow.com^
+||orjfun.com^
+||orkoedthroug.xyz^
+||orldwhoisquite.com^
+||orldwhoisquite.org^
+||orldwhoisquiteh.info^
+||orlowedonhisdhilt.info^
+||ormolustuke.top^
+||ornery-animal.pro^
+||oroodsee.xyz^
+||orpheushooven.com^
+||orpoobj.com^
+||orqaxjj.com^
+||orqrdm.com^
+||orquideassp.com^
+||orricesoxhlet.com^
+||orrisesdepute.com^
+||orthitepetrous.com^
+||orthronsmatter.com^
+||ortontotlejohn.com^
+||osarmapa.net^
+||osaud.com^
+||osaunsot.net^
+||oscarredwith.xyz^
+||osciet.com^
+||osdoshcwyaev.xyz^
+||oseculretabout.com^
+||osgqretnpoqsubt.com^
+||oshaista.xyz^
+||oshdarvitop.com^
+||oshunooy.xyz^
+||oskiwood.com^
+||oskxpvmnalfb.com^
+||osmanlikaraite.com^
+||osmatecosh.com^
+||osmosewatch.top^
+||osmost.com^
+||osmoticchalah.com^
+||osmousavosets.com^
+||osoirux.com^
+||osptjkslmy.com^
+||osqbfakufafv.com^
+||osrhdsoeqhos.com^
+||ossgogoaton.com^
+||osshydreigonan.com^
+||osskanger.com^
+||osskugvirs.com^
+||ossmightyenar.net^
+||ossnidorinoom.com^
+||osspalkiaom.com^
+||osspwamuhn.com^
+||ossrhydonr.com^
+||ossshucklean.com^
+||ossyfirecpo.com^
+||ostazvtx.com^
+||ostensibledressmaker.com^
+||ostentatiousmystery.com^
+||osteriawoold.space^
+||ostilllookinga.cc^
+||ostlon.com^
+||ostrichrockychaos.com^
+||oswegomiting.com^
+||oszzxhqhfh.com^
+||otabciukwurojh.xyz^
+||otarbadvnmrap.com^
+||otbuzvqq8fm5.com^
+||otelloexactor.com^
+||othbhe2.com^
+||othbor.com^
+||othdgemanow.com^
+||othdgemanow.xyz^
+||othecknotinda.com^
+||otherofherlittl.com^
+||otherofherlittle.info^
+||othersfohi.com^
+||otherwiseassurednessloaf.com^
+||otherwiseparticipate.com^
+||othonnabusaos.com^
+||otiatryenfeoff.live^
+||otiatrygetable.uno^
+||otigainareput.info^
+||otisephie.com^
+||otjawzdugg.com^
+||otjccfldytgkkox.xyz^
+||otlopudpvfq.com^
+||otnolabttmup.com^
+||otnolatrnup.com^
+||otomacotelugu.com^
+||otorwardsoffhdgat.com^
+||otqxvqzdgl.com^
+||otrundledtheb.com^
+||otrwaram.com^
+||ottack.com^
+||ottdhysral.com^
+||otterwoodlandobedient.com^
+||otvlehf.com^
+||otween.com^
+||ouaker.com^
+||oucaibie.net^
+||ouchojig.xyz^
+||ouchruse.com^
+||oudistit.com^
+||oudseroa.com^
+||oufauthy.net^
+||oufteens.com^
+||ouftukoo.net^
+||oughtbuilding.com^
+||ougnagirock.com^
+||ougnauls.com^
+||ougnugno.com^
+||ougrauty.com^
+||ougribot.net^
+||ouhastay.net^
+||ouhnvkjhpajeob.com^
+||oujouniw.com^
+||oukiacryst.com^
+||oukoushu.xyz^
+||ouldhukelpm.org^
+||oulrarta.net^
+||oulrukry.xyz^
+||oulsools.com^
+||oulukdliketo.shop^
+||ouncillorswhow.info^
+||oungimuk.net^
+||oungoowe.xyz^
+||ounojushyxb.xyz^
+||ounsamie.xyz^
+||ounsoopt.xyz^
+||oupastah.com^
+||oupaumul.net^
+||oupe71eiun.com^
+||ouphoarg.com^
+||ouphouch.com^
+||oupushee.com^
+||ouranosmoyener.com^
+||ourcommonnews.com^
+||ourcommonstories.com^
+||ourcoolposts.com^
+||ourcoolstories.com^
+||ourdadaikri.com^
+||ourdailystories.com^
+||ourdesperate.com^
+||ourebifie.com^
+||ourgoldpiece.xyz^
+||ourgoldpiecwe.xyz^
+||ourgumpu.xyz^
+||ourhotfeed.com^
+||ourhypewords.com^
+||ourietwyers.uno^
+||ourl.link^
+||ourmumble.com^
+||ourscience.info^
+||oursexasperationwatchful.com^
+||oursiignaboaor.cc^
+||oursiignaboaord.xyz^
+||ourtecads.com^
+||ourteeko.com^
+||ourtetotum.com^
+||ouryretyequire.info^
+||ouryretyequirem.info^
+||ouseoyopersed.info^
+||ouseswhichtot.org^
+||ousinouk.xyz^
+||ousouzay.net^
+||oussaute.net^
+||ousseghu.net^
+||oustoope.com^
+||outabsola.com^
+||outaipoma.com^
+||outblewmorga.com^
+||outburststudying.com^
+||outcheeh.com^
+||outdilateinterrupt.com^
+||outdoeslegacy.uno^
+||outelectrodean.com^
+||outensootier.guru^
+||outflednailbin.com^
+||outfortbogwort.guru^
+||outfoxnapalms.com^
+||outgateniceish.com^
+||outgivefaculae.store^
+||outglowkeysets.guru^
+||outgrinuntold.com^
+||outherunrid.digital^
+||outhulem.net^
+||outlawchillpropose.com^
+||outlieazafran.com^
+||outlineappearbar.com^
+||outlinesweatraces.com^
+||outloginequity.com^
+||outlookabsorb.com^
+||outlyingcarpet.pro^
+||outnumberminded.com^
+||outoctillerytor.com^
+||outofthecath.org^
+||outpartaims.com^
+||outplodbunty.com^
+||outpun.com^
+||outrageous-mine.pro^
+||outrotomr.com^
+||outrushmusjid.website^
+||outseeltor.com^
+||outseenconfirm.com^
+||outsetnormalwaited.com^
+||outseylor.com^
+||outshowfrat.uno^
+||outsimfat.site^
+||outsimiseara.com^
+||outsliggooa.com^
+||outsmoke-niyaxabura.com^
+||outsrtfz.com^
+||outstanding-tie.pro^
+||outstandingspread.com^
+||outsudoo.net^
+||outtaskhautein.guru^
+||outtimburrtor.com^
+||outtunova.com^
+||outwhirlipedeer.com^
+||outwoodeuropa.com^
+||outyanmegaom.com^
+||ouveelsa.xyz^
+||ouyoqudevfal.com^
+||ouzavamt.com^
+||ouzeelre.net^
+||ouzekomtok.com^
+||ouzosbuddh.com^
+||ovariesutopia.com^
+||ovdimin.buzz^
+||ovembe.com^
+||ovembi.com^
+||ovementerter.xyz^
+||ovemes.com^
+||ovenbifaces.cam^
+||ovenge.com^
+||overallalreadyregistry.com^
+||overallfetchheight.com^
+||overboardbilingual.com^
+||overcomecheck.com^
+||overcooked-addition.pro^
+||overcrummythrift.com^
+||overdates.com^
+||overdonealthough.com^
+||overdonereciprocalimpure.com^
+||overduerebukeloyal.com^
+||overestimateyearly.com^
+||overfatberiber.digital^
+||overgalladean.com^
+||overheatusa.com^
+||overjoyedwithinthin.com^
+||overkirliaan.com^
+||overlapflintsidenote.com^
+||overlettolt.com^
+||overlook.fun^
+||overlooked-cup.pro^
+||overlooked-scratch.pro^
+||overlookrapt.com^
+||overmewer.com^
+||overnumeler.com^
+||overonixa.com^
+||overpetleersia.com^
+||overprotectiveskilled.com^
+||overratedlively.com^
+||overratedtransmissiontwenty.com^
+||overreactsewershaped.com^
+||overseasjune.com^
+||oversightbullet.com^
+||overswaloton.com^
+||overthetopexad.com^
+||overtimeequation.com^
+||overture.com^
+||overturnotherall.com^
+||overwhelmcontractorlibraries.com^
+||overwhelmfarrier.com^
+||overwhelmingdarncalumny.com^
+||overwiththinlea.info^
+||overzoruaon.com^
+||overzubatan.com^
+||ovfratlkxerv.xyz^
+||ovibospeseta.com^
+||ovoordie.xyz^
+||ovplnxsq.com^
+||ovqds.com^
+||ovsliqrcwqsqfxf.xyz^
+||ovsrhikuma.com^
+||ovvmrrufvhclxf.com^
+||ovyondkggnqhmt.xyz^
+||ow5a.net^
+||owascryingforthem.info^
+||owbroinothiermol.xyz^
+||owbroinothiermon.com.ua^
+||oweltysegnos.website^
+||owenexposure.com^
+||oweoumoughtcal.com^
+||owevel.com^
+||oweven.com^
+||owewary.com^
+||owhoogryinfo.com^
+||owingsorthealthy.com^
+||owingsucceeding.com^
+||owithlerendu.com^
+||owktyvky.com^
+||owkuwquf.com^
+||owlcongratulate.com^
+||owlerydominos.cam^
+||owletbox.com^
+||owlinggnomist.com^
+||owlunimmvn.com^
+||owncutone.com^
+||owndata.network^
+||owoxauky.com^
+||owrkwilxbw.com^
+||owrtwsrp.com^
+||owtvhrydewc.com^
+||owvghihicw.com^
+||owwczycust.com^
+||owwogmlidz.com^
+||owxanjxlxtfbjw.com^
+||oxado.com^
+||oxbowfog.com^
+||oxenturftrot.com^
+||oxfoadv.store^
+||oxghhbxz.com^
+||oxhdtgmlryv.com^
+||oxkgcefteo.com^
+||oxkpbuv.com^
+||oxlandvoicing.digital^
+||oxlfhifzfynll.com^
+||oxmqzeszyo.com^
+||oxthrilled.com^
+||oxtracking.com^
+||oxtsale1.com^
+||oxxvikappo.com^
+||oxybe.com^
+||oxydaserucked.com^
+||oxydend2r5umarb8oreum.com^
+||oxygenblobsglass.com^
+||oxynticarkab.com^
+||oyi9f1kbaj.com^
+||oyihoxw.com^
+||oyopersed.info^
+||oyoperseduca.com^
+||oysterexhalereview.com^
+||oyxctgotabvk.com^
+||oyyihttyklfwcgy.xyz^
+||ozationsuchasric.org^
+||ozectynptd.com^
+||ozhhujt.com^
+||ozihechzlcsgs.com^
+||oznhkuilvrsdf.com^
+||ozobsaib.com^
+||ozonemedia.com^
+||ozongees.com^
+||ozooltik.com^
+||ozsoekwgy.com^
+||ozsturgeonafford.com^
+||p-analytics.life^
+||p123p.com^
+||p2e9r4n9.stackpathcdn.com^
+||p59othersq.com^
+||p64gk2yhba0p.com^
+||pa5ka.com^
+||pacekami.com^
+||pacifoos.net^
+||pacijwarnfrtq.com^
+||pacoaniy.net^
+||paddleniecehandicraft.com^
+||paddlesoothesoloist.com^
+||padfungusunless.com^
+||padma-fed.com^
+||padp5arja8dgsd9cha.com^
+||padpitnon.site^
+||padsabs.com^
+||padsans.com^
+||padsanz.com^
+||padsats.com^
+||padsatz.com^
+||padsbrown.com^
+||padsdel.com^
+||padsdel2.com^
+||padsdelivery.com^
+||padsecs.com^
+||padsimz.com^
+||padskis.com^
+||padslims.com^
+||padspms.com^
+||padsreds.com^
+||padstm.com^
+||padujeph.xyz^
+||paeastei.net^
+||paekicz.com^
+||paeonicgrunter.com^
+||pageantbagauspice.com^
+||pageantcause.com^
+||pageantcountrysideostentatious.com^
+||pagefedonly.live^
+||pagejunky.com^
+||pageswork.guru^
+||paghai.com^
+||paginw.com^
+||pagnehmfxah.xyz^
+||pagodascaly.uno^
+||pagtvmcbfjafj.com^
+||pagusafb.com^
+||pahbasqibpih.com^
+||paht.tech^
+||pahtef.tech^
+||pahtfi.tech^
+||pahtgq.tech^
+||pahthf.tech^
+||pahtky.tech^
+||pahtwt.tech^
+||pahtzh.tech^
+||paibopse.com^
+||paicepte.xyz^
+||paid.outbrain.com^
+||paigna.com^
+||paikaufy.com^
+||paikoasa.tv^
+||paikoaza.net^
+||paikshueless.com^
+||painfulpropaganda.com^
+||painfultransport.com^
+||painharmlesscommence.com^
+||painlessassumedbeing.com^
+||painsdire.com^
+||paintifiercute.club^
+||paipsuto.com^
+||pairaffirmative.com^
+||pairplayed.com^
+||pairschorus.com^
+||paisledongolia.xyz^
+||paiwaupseto.com^
+||paiwhisep.com^
+||paiwhoki.com^
+||pajons.live^
+||pakenta.xyz^
+||pakrouci.net^
+||palakahone.com^
+||palama2.co^
+||palama2.com^
+||palasidesdoor.com^
+||palatesovarium.digital^
+||palaverpageboy.com^
+||paletotpankin.website^
+||paletteoverjoyed.com^
+||palibs.tech^
+||paliglaiks.life^
+||pallaliven.com^
+||palmmalice.com^
+||palpablefungussome.com^
+||palroudi.xyz^
+||paltryheadline.com^
+||palvanquish.com^
+||palycaid.life^
+||palzscurou.com^
+||pampela.lol^
+||pamperencourage.com^
+||pampimty.com^
+||pamtuea.xyz^
+||pamury.xyz^
+||panagiapivots.com^
+||panaservers.com^
+||panattain.com^
+||panchaxcorylet.com^
+||panchaxumbilic.com^
+||pandalboranes.tech^
+||pandanaequian.life^
+||pandasloveforlife.com^
+||panduraoestrum.com^
+||panelmono.com^
+||pangintrigueliquidate.com^
+||pangoha.xyz^
+||pangtues.xyz^
+||pangwealjama.com^
+||panicmiserableeligible.com^
+||panjabicocklet.website^
+||pannamdashee.com^
+||pannumregnal.com^
+||panoz.xyz^
+||panpant.xyz^
+||pansymerbaby.com^
+||pantafives.com^
+||pantdentaldonate.com^
+||pantsurplus.com^
+||panuelobriard.com^
+||panyarspan.com^
+||paoukgnssmkeys.com^
+||papaneecorche.com^
+||papawrefits.com^
+||papilio3glauecus.com^
+||papmeatidigbo.com^
+||pappeajalapa.digital^
+||pappibottoms.website^
+||papposeclingy.com^
+||paqcpeotbx.com^
+||parableconverted.com^
+||parachuteeffectedotter.com^
+||parachutegustheory.com^
+||paradiseannouncingnow.com^
+||parallelgds.store^
+||paralyzedepisodetiny.com^
+||paranoiaidiompatron.com^
+||parasitegoddess.com^
+||paraterinchest.site^
+||parcbegulf.com^
+||pardonsentencegeneral.com^
+||pardonsuccessionassassin.com^
+||parecyrclame.com^
+||parentlargevia.com^
+||parentpensionvolunteer.com^
+||parifytraily.com^
+||paripartners.ru^
+||paris-lno.com^
+||parishintoxicate.com^
+||parishleft.com^
+||parisjeroleinpg.com^
+||parkautomaticallyinfallible.com^
+||parkcircularpearl.com^
+||parkdues.com^
+||parkdumbest.com^
+||parkedcountdownallows.com^
+||parkingridiculous.com^
+||parkurl.com^
+||parlehies.com^
+||parlinggodded.com^
+||parlorbagseconomy.com^
+||parlorsuperhero.com^
+||parlourinvulnerablerighteous.com^
+||paroasse.xyz^
+||parolropmo.com^
+||parolropmo.xyz^
+||parrecleftne.com^
+||parrecleftne.xyz^
+||parrotspineparticipate.com^
+||parrotstrim.com^
+||parrotwrapped.com^
+||parsecrosed.com^
+||parsedgirnie.com^
+||parsimoniousinvincible.net^
+||parsleyagencyoutnumber.com^
+||parsleybunwalnut.com^
+||parsonhimaircraft.com^
+||parsonyquicken.com^
+||partagedefichiers.com^
+||partedexpensive.com^
+||partef.com^
+||parth2enerocis9tsust2ricus7pidata.com^
+||parthanonstatue.com^
+||partial-bitter.com^
+||partial-pair.pro^
+||partiallyrunnerproductive.com^
+||partialpreachground.com^
+||particinepartm.com^
+||participateoppositedifferent.com^
+||participationimpediment.com^
+||partieseclipse.com^
+||partiesinches.com^
+||partion-ricism.xyz^
+||partlytrouble.com^
+||partnerentry.com^
+||partnerlinks.io^
+||partpedestal.com^
+||partsbury.com^
+||partsfroveil.com^
+||partsnoises.com^
+||partyingdisastrouskitty.com^
+||partypartners.com^
+||parumal.com^
+||pas-rahav.com^
+||pasaltair.com^
+||pasbaqxxact.com^
+||pasbstbovc.com^
+||pascaf.com^
+||paservices.tech^
+||pasisasmack.com^
+||paslsa.com^
+||pasoleex.com^
+||pasoshardy.com^
+||passablecoalitionvarious.com^
+||passablejeepparliament.com^
+||passannouncing.com^
+||passeura.com^
+||passfixx.com^
+||passingcelebrate.com^
+||passionacidderisive.com^
+||passionatephilosophical.com^
+||passionfruitads.com^
+||passtechusa.com^
+||passwayquintin.space^
+||passwordsjawsticking.com^
+||passwordslayoutvest.com^
+||passwordssaturatepebble.com^
+||pastaesthetictracks.com^
+||pastfrolicpackage.com^
+||pastimeroseola.com^
+||pastoupt.com^
+||pasxfixs.com^
+||patalogs.com^
+||patapatdidymis.space^
+||patariatoolman.com^
+||patarinmangers.top^
+||patchedcyamoid.com^
+||patencydaimiel.com^
+||patenssabzi.com^
+||patgsrv.com^
+||pathloaded.com^
+||pathosacetals.com^
+||pathswreaths.guru^
+||patibe.com^
+||patienceboostboss.com^
+||patientlyperkgarment.com^
+||patinesgaulin.com^
+||patioeasternopera.com^
+||patoionanrumand.com^
+||patrickcodens.life^
+||patriotapelles.com^
+||patronageausterity.com^
+||patronageunlock.com^
+||patrondescendantprecursor.com^
+||patronimproveyourselves.com^
+||patroposalun.pro^
+||patsyendless.com^
+||pattedothake.com^
+||pattyheadlong.com^
+||paubaulo.com^
+||paucityirido.space^
+||pauewr4cw2xs5q.com^
+||pauhoano.com^
+||paujudih.xyz^
+||paulinruntime.digital^
+||paulty.com^
+||paulusacor.uno^
+||paurozel.net^
+||pausairiatas.guru^
+||pausaiverbene.com^
+||paushaisie.com^
+||paushoow.net^
+||pausingeoedb.com.ua^
+||pausingeoedwe.xyz^
+||paussidsipage.com^
+||pauwhajo.xyz^
+||pauzajoo.net^
+||pauzooty.xyz^
+||pavfazbwiap.com^
+||paviourwese.com^
+||pavymoieter.com^
+||pawderstream.com^
+||pawheatyous.com^
+||pawkychantey.com^
+||pawmhkhbp.com^
+||pawnoutletprimary.com^
+||pawschancesponsor.com^
+||paxafai1.com^
+||paxmedia.net^
+||paxsfiss.com^
+||paxxfiss.com^
+||pay-click.ru^
+||payae8moon9.com^
+||paybackmodified.com^
+||paybackvocal.com^
+||payfertilisedtint.com^
+||payments4u.org^
+||paymentsweb.org^
+||paymistrustflake.com^
+||payslipsscowl.com^
+||paysqueak.com^
+||pazashevy.com^
+||pazzfun.com^
+||pbamjgga.com^
+||pbcde.com^
+||pbcohtm.com^
+||pbdjtlghawpiuoq.com^
+||pbdo.net^
+||pbfnyvl.com^
+||pbhjohrx.xyz^
+||pbhrwhehnyibit.com^
+||pblcpush.com^
+||pblinq.com^
+||pbniuvctybu.com^
+||pbnjzwjsy.com^
+||pboddnqjobuf.com^
+||pbqqzibusu.com^
+||pbterra.com^
+||pbxai.com^
+||pbxopblttvorhd.com^
+||pbyvehcz.com^
+||pc-ads.com^
+||pc180101.com^
+||pc1ads.com^
+||pc20160301.com^
+||pc2ads.com^
+||pc2ads.ru^
+||pc5ads.com^
+||pcbuqpdytqanufu.xyz^
+||pccasia.xyz^
+||pcdgninekvch.com^
+||pchcwqsfaqpw.com^
+||pcheahrdnfktvhs.xyz^
+||pcirurrkeazm.com^
+||pclk.name^
+||pcmaddwoxex.com^
+||pcmclks.com^
+||pcruwbk.com^
+||pctlwm.com^
+||pctsrv.com^
+||pcvlpotybnd.com^
+||pd-news.com^
+||pdbqyzi.com^
+||pdcnxobcv.com^
+||pdfsearchhq.com^
+||pdfurqok.com^
+||pdiyluhfttb.xyz^
+||pdjmarxsne.com^
+||pdn-1.com^
+||pdn-2.com^
+||pdn-3.com^
+||pdn-5.com^
+||pdqkkzouflx.com^
+||pdridjiviq.com^
+||pdsyibwlxd.xyz^
+||pdvacde.com^
+||pdygfdtghcyh.com^
+||peacebanana.com^
+||peacefulactivity.com^
+||peacefullyundergroundsubsided.com^
+||peachessummoned.com^
+||peachrecess.com^
+||peachsquat.com^
+||peachybeautifulplenitude.com^
+||peachywaspish.com^
+||peacinggreyed.com^
+||peacockcorridor.com^
+||peacockshudder.com^
+||peacocktypewriter.com^
+||peacto.com^
+||peakchewing.com^
+||peakclick.com^
+||peakluckily.com^
+||peakpushedancestor.com^
+||pealia.com^
+||pealmeditate.com^
+||peanutsfuscin.com^
+||peanutsurrogatesurrogate.com^
+||pearedcall.xyz^
+||pearledbolo.life^
+||pearlhereby.com^
+||pearlrip.com^
+||pearlsdevotionnative.com^
+||pearsissuedboob.com^
+||peateryfewnes.com^
+||peaterylebes.guru^
+||pebadu.com^
+||pebansokes.uno^
+||pecdfzy.com^
+||pecialukizeias.info^
+||pecism.com^
+||peckbattledrop.com^
+||pectasefrisker.com^
+||pectsofcukorporatef.info^
+||peculiaritiesdiarrhoeareproduce.com^
+||peculiaritiesimaginationembankment.com^
+||peculiaritiessevermaestro.com^
+||peculiarityrevengeinternet.com^
+||peculiarpug.com^
+||pedestalturner.com^
+||pedestrianneighbourly.com^
+||pedlujvcfd.com^
+||peecht.com^
+||peecoubo.net^
+||peefeehu.com^
+||peekaure.xyz^
+||peekipaiw.com^
+||peeksdragoncontinually.com^
+||peekslap.com^
+||peelaipu.xyz^
+||peelismsenoras.com^
+||peemee.com^
+||peepacquisitionavalanche.com^
+||peepholelandreed.com^
+||peer39.net^
+||peeredfoggy.com^
+||peeredgerman.com^
+||peeredwalkingcloud.com^
+||peeringgrandflashing.com^
+||peethach.com^
+||peethobo.com^
+||peevaips.xyz^
+||peeverspontil.store^
+||peevishchasingstir.com^
+||peevishchosen.com^
+||peevishforceless.com^
+||peevishrace.com^
+||pegablackjal.com^
+||pegasuson.com^
+||pegirs.com^
+||pegloang.com^
+||peirs5tbakchios.com^
+||pejzeexukxo.com^
+||pelagictanjib.com^
+||pelamydlours.com^
+||pelfsgarote.com^
+||peliomaafb.com^
+||pelisrev.live^
+||pelliancalmato.com^
+||pelurepumple.space^
+||pemainedperio.com^
+||pemsrv.com^
+||penaltyoutmatch.com^
+||penapne.xyz^
+||pengobyzant.com^
+||penheiressfundamental.com^
+||penholderlossfrontage.com^
+||penitentiaryoverdosetumble.com^
+||penitentpeepinsulation.com^
+||penjazzvice.com^
+||penmaneffluve.com^
+||penniedtache.com^
+||pennilesscomingall.com^
+||pennilesstestangrily.com^
+||pennillratti.com^
+||pennyotcstock.com^
+||penromanceadmittance.com^
+||pensionerbrightencountess.com^
+||pensiveblindlytwin.com^
+||pentalime.com^
+||penuchefirms.com^
+||peohara.com^
+||peopleshouldthin.com^
+||peoric.com^
+||pep929.mom^
+||pepepush.net^
+||peppaping.xyz^
+||peppereggsfriends.com^
+||pepperthusadventure.com^
+||pepperyforeign.com^
+||pepperysergeantrisky.com^
+||peppinaegina.com^
+||peppy2lon1g1stalk.com^
+||pepserump.life^
+||peracy.com^
+||perceivedagrarian.com^
+||perceivedundesirable.com^
+||percidaffects.com^
+||percussiverefrigeratorunderstandable.com^
+||percynaturalist.com^
+||perechsupors.com^
+||perehodny.ru^
+||pereliaastroid.com^
+||perfb.com^
+||perfdrive.com^
+||perfectlywent.com^
+||perfectmarket.com^
+||perfectmovie.pro^
+||perfectplanned.com^
+||performance-based.com^
+||performanceadexchange.com^
+||performanceonclick.com^
+||performancetrustednetwork.com^
+||performanteads.com^
+||performedlifestyleburial.com^
+||performedsalts.com^
+||performinggushorseman.com^
+||performingwhosegride.com^
+||performit.club^
+||perfunctoryfrugal.com^
+||perhangeflets.site^
+||perhiptid.com^
+||perhui.com^
+||perics.com^
+||perift.com^
+||perigshfnon.com^
+||periodicmassageate.com^
+||periodpennavigation.com^
+||perishcraft.com^
+||perjurycelsiussenses.com^
+||perksthawers.com^
+||permanentadvertisebytes.com^
+||permanentlyvulture.com^
+||permanentswitch.com^
+||permissdevours.space^
+||permissioncornshrine.com^
+||permitwarmer.com^
+||peropusparmese.com^
+||perperarenail.com^
+||perpetrateabsolute.com^
+||perpetratoralienglory.com^
+||perpetratoronpour.com^
+||perpetualprovoke.com^
+||perplexkutch.guru^
+||perryvolleyball.com^
+||persecutionmachinery.com^
+||perseducatiuca.com^
+||perseverancekaleidoscopefinance.com^
+||perseverancewash.com^
+||perseverevoice.com^
+||persistentadequate.com^
+||personalityleftoverwhiskers.com^
+||personalityvillainlots.com^
+||personifyallege.com^
+||personthirtycoldness.com^
+||perspectiveunderstandingslammed.com^
+||perspectivevaluation.com^
+||perspirationauntpickup.com^
+||perspirationfraction.com^
+||persuasivepenitentiary.com^
+||pertawee.net^
+||pertersacstyli.com^
+||pertov.com^
+||perttogahoot.com^
+||pertyvaluationia.monster^
+||peruseinvitation.com^
+||perversecozy.com^
+||pervertmine.com^
+||pervialinagile.com^
+||perviv.com^
+||peskyclarifysuitcases.com^
+||peskylock.com^
+||pestequitch.com^
+||pesterdisarm.com^
+||pestilenttidefilth.org^
+||petardmimsey.space^
+||petasmaupbore.website^
+||petasusawber.com^
+||petchesa.net^
+||petchoub.com^
+||petemenleban.uno^
+||petendereruk.com^
+||petfoppew.com^
+||petideadeference.com^
+||petiteshantles.com^
+||petkinsartiste.space^
+||petrelbeheira.website^
+||petrifacius.com^
+||petristoker.website^
+||petrolbuck.com^
+||petsavoury.com^
+||pettedcres.com^
+||pettishhansom.digital^
+||pettledsupper.space^
+||petwoodfustet.com^
+||petyntrx.com^
+||peuhlcamaile.space^
+||pexoenne.site^
+||pexuvais.net^
+||pezuhdhzrmb.com^
+||pf34zdjoeycr.com^
+||pfactgmb.xyz^
+||pfddniedc.com^
+||pfeite.com^
+||pfewuzbtkr.com^
+||pfiuyt.com^
+||pftamvhajdqhps.xyz^
+||pfulhwxjeoi.com^
+||pgbmjuhwiej.xyz^
+||pgdmon.com^
+||pgerrismp.com^
+||pgitpwovdh.xyz^
+||pgjlctmswgnwf.com^
+||pgmcdn.com^
+||pgmediaserve.com^
+||pgmfuffwfl.com^
+||pgmpsqoq.xyz^
+||pgonews.pro^
+||pgpartner.com^
+||pgssl.com^
+||pgtabxxmb.com^
+||pgwcrtobrdjx.com^
+||pgwlzodsll.com^
+||phaarnsvqzlr.com^
+||phabycebe.com^
+||phaglalt.com^
+||phague.com^
+||phaignux.xyz^
+||phaikroo.net^
+||phaiksul.net^
+||phaipaun.net^
+||phaisoaz.com^
+||phaithoo.xyz^
+||phaivais.net^
+||phalingy.net^
+||phamsacm.net^
+||phantomattestationzillion.com^
+||phantomtheft.com^
+||phardain.xyz^
+||pharmcash.com^
+||phartemt.xyz^
+||phasecrance.com^
+||phastoag.com^
+||phatchoa.net^
+||phaucmoa.net^
+||phaudree.com^
+||phauftee.xyz^
+||phauraur.com^
+||phaurtuh.net^
+||phause.com^
+||phdwxsui.xyz^
+||pheasantdestinydisrespect.com^
+||pheasantgobetweenyearbook.com^
+||phee1oci.com^
+||pheeghie.net^
+||pheegoab.click^
+||pheepudo.net^
+||pheerdoudeem.com^
+||pheersie.com^
+||pheftoud.com^
+||pheghoug.net^
+||phehldaxzk.com^
+||phempoabsoun.com^
+||phenenetokamak.com^
+||phenomenonwhilstsleek.com^
+||phenotypebest.com^
+||pheselta.net^
+||phesheet.net^
+||phftcml.com^
+||phglobk.com^
+||phhovaafvjhdku.com^
+||phhxlhdjw.xyz^
+||phialedamende.com^
+||phicmune.net^
+||phidianbesmut.com^
+||phiduvuka.pro^
+||phiefs.com^
+||philadelphiadip.com^
+||phimcsgxumdlf.com^
+||phimtofu.xyz^
+||phiresandalarg.info^
+||phirgese.com^
+||phirozeon.com^
+||phlbbtcyj.com^
+||phlomisthuluth.digital^
+||phloxsub73ulata.com^
+||phmqqbm.com^
+||phoaglee.com^
+||phoalard.net^
+||phoampun.net^
+||phoamsoa.xyz^
+||phoapsoo.com^
+||phoaptee.net^
+||phoaraut.com^
+||phoawhap.net^
+||phocidabioses.store^
+||phoebb.com^
+||phohagyli.com^
+||phokruhefeki.com^
+||phokukse.com^
+||pholrock.net^
+||phomoach.net^
+||phoneraisedconstituent.com^
+||phonestar.info^
+||phoobsoo.net^
+||phooghoo.com^
+||phoojeex.xyz^
+||phooreew.net^
+||phoossax.net^
+||phoosuss.net^
+||phoridsanely.space^
+||phortaub.com^
+||phosphateawaittease.com^
+||phosphatepossible.com^
+||photofuturecrappy.com^
+||photographediblefiend.com^
+||photographingmake.com^
+||photographingreliant.com^
+||photographingstirinput.com^
+||phoulade.xyz^
+||phourdee.com^
+||phouvemp.net^
+||phouwims.net^
+||phpkxtwuibv.com^
+||phraa-lby.com^
+||phrasespokesmansurmise.com^
+||phrensaltier.com^
+||phsism.com^
+||phts.io^
+||phubsorg.xyz^
+||phudreez.com^
+||phukienthoitranggiare.com^
+||phulaque.com^
+||phulrauftoa.com^
+||phultems.net^
+||phultids.com^
+||phumpauk.com^
+||phupours.com^
+||phuteheglu.com^
+||physical-flow-i-255.site^
+||physicalaverage.com^
+||physicalblueberry.com^
+||physicaldetermine.com^
+||physicalnecessitymonth.com^
+||physicianurge.com^
+||physiqueusualconsulting.com^
+||phytasedemerge.digital^
+||phyteusreest.live^
+||phywifupta.com^
+||pianistcampingroom.com^
+||pianoalter.xyz^
+||pianoassort.com^
+||piarecdn.com^
+||piaroankenyte.store^
+||pibgornspooks.top^
+||picadmedia.com^
+||picalchymic.uno^
+||picath.com^
+||picbucks.com^
+||piccid.com^
+||piccoloerucin.com^
+||picethoa.com^
+||pickaflick.co^
+||pickedlawhandshake.com^
+||picketsubmission.com^
+||pickinnimiety.com^
+||picklespealwanderer.com^
+||pickupnationalityinexhaustible.com^
+||pickupracist.com^
+||picnicnorthernincompetent.com^
+||picolinfloe.com^
+||pics-city.space^
+||pics-services.online^
+||picscaps.info^
+||picscity.info^
+||picscity.space^
+||picsfun.info^
+||picsfun.online^
+||picsfun.space^
+||picshouse.online^
+||picsofdream.com^
+||picsofdream.info^
+||picsofdream.net^
+||picsofdream.space^
+||picsofdream.today^
+||picsservices.info^
+||picsservices.online^
+||picsservices.space^
+||picsti.com^
+||pictela.net^
+||picturecorrespond.com^
+||piecreatefragment.com^
+||pieproficientcurve.com^
+||piercedlugs.com^
+||pierchestnut.com^
+||piercing-employment.pro^
+||pierisrapgae.com^
+||pierlinks.com^
+||pietondoozy.uno^
+||piezokited.digital^
+||pifudfxoopd.com^
+||pigistles.com^
+||piglikecold.uno^
+||pigmydocent.com^
+||pignuwoa.com^
+||pigroldgdednc.com^
+||pigsflintconfidentiality.com^
+||pigstrustmarijuana.com^
+||pigtre.com^
+||pihu.xxxpornhd.pro^
+||pikecentreconfederate.com^
+||pikedhelloed.com^
+||pikepreviousi.com^
+||pilaffskoniga.com^
+||pilaryhurrah.com^
+||pilgrimarduouscorruption.com^
+||pilgrimgrass.com^
+||pillerycetin.website^
+||pilliondridder.life^
+||pillowcomedyvarieties.com^
+||pillsofecho.com^
+||pilltransgress.com^
+||piloteegazy.com^
+||piloteraser.com^
+||pilpulbagmen.com^
+||pilsarde.net^
+||pilularatavist.com^
+||piluleruggy.com^
+||pimlicoouranos.space^
+||pimpleinterference.com^
+||pimplesuomi.com^
+||pimpoopo.com^
+||pinballpublishernetwork.com^
+||pinchbarren.com^
+||pinchingoverridemargin.com^
+||pinefluencydiffuse.com^
+||pinetq.com^
+||ping-traffic.info^
+||pinguinmomma.com^
+||pinionscdf.com^
+||pinitolshouldn.com^
+||pinkleo.pro^
+||pinkpig2le8tt09.com^
+||pinkssmytrie.com^
+||pinocularoud.xyz^
+||pinoffence.com^
+||pinprickmerry.com^
+||pinprickplums.com^
+||pinremembrance.com^
+||pinrxvbznkvh.com^
+||pinttalewag.com^
+||pinwalerompers.com^
+||pioneercomparatively.com^
+||pioneerhardshipfarewell.com^
+||pioneersuspectedjury.com^
+||pionwaney.com^
+||piouscheers.com^
+||pip-pip-pop.com^
+||pipaffiliates.com^
+||pipeaota.com^
+||pipeofferear.com^
+||pipeoverwhelm.com^
+||pipeschannels.com^
+||pipetsungross.com^
+||piplavwci.com^
+||pipprfvhpykpvk.com^
+||pipsol.net^
+||piqueendogen.com^
+||piquperkin.com^
+||piratedivide.com^
+||pirist.com^
+||pirniemagi.com^
+||piroghiusent.com^
+||pirogidecnet.com^
+||pirouque.com^
+||pirtecho.net^
+||pisism.com^
+||pistolterrificsuspend.com^
+||pistraving.co^
+||pitadt.com^
+||pitchedfurs.com^
+||pitchedgenuinevillain.com^
+||pitcherprobable.com^
+||pithgregor.com^
+||pitiersamara.com^
+||pitomievectors.com^
+||pitonlocmna.com^
+||pitors.com^
+||pitpastraja.com^
+||pittinekunai.com^
+||piturisieged.com^
+||pityneedsdads.com^
+||pitypericu.com^
+||pitysuffix.com^
+||piupiucreed.life^
+||piuyt.com^
+||pivotrunner.com^
+||piwixesu.pro^
+||pixazza.com^
+||pixelhere.com^
+||pixelplay.pro^
+||pixfuture.net^
+||pixinform.com^
+||pixiv.org^
+||pixxur.com^
+||piybineqejjswp.com^
+||piz7ohhujogi.com^
+||pizasoji.com^
+||pizzazz.lol^
+||pjblqxvmcjyiel.com^
+||pjhbyaaadlw.com^
+||pjivapiumeb.com^
+||pjjpp.com^
+||pjlufuwtxv.com^
+||pjnwmbz.com^
+||pjoibbc.com^
+||pjoqkmks.com^
+||pjqchcfwtw.com^
+||pjsefaqzyjv.com^
+||pjwshrlhyjyhqu.xyz^
+||pjyvgdpvjp.com^
+||pk910324e.com^
+||pkhhyool.com^
+||pkjekjmzfiuvi.com^
+||pkklkcdn.com^
+||pkmxofozs.com^
+||pkthyp.uno^
+||pkudawbkcl.com^
+||placeofres.com^
+||placingcompany.com^
+||placingtraditionalhobble.com^
+||placodegnawers.guru^
+||placoidtobyman.com^
+||plaguealacritytwitter.com^
+||plaguemanipulatedrag.com^
+||plaicecaught.com^
+||plain-deep.pro^
+||plainphilosophy.pro^
+||plainscashmereperceive.com^
+||plaintiveaccount.pro^
+||plainwrk.name^
+||plaitseeds.com^
+||plaittest.com^
+||plandappsb.com^
+||planesforce.website^
+||planesknob.com^
+||planet-vids.online^
+||planet7links.com^
+||planetarium-planet.com^
+||planetconstituent.com^
+||planetvids.online^
+||planetvids.space^
+||plankbritish.com^
+||planktab.com^
+||planmybackup.co^
+||plannedcappuccino.com^
+||plannerladyreality.com^
+||planningunavoidablenull.com^
+||plannto.com^
+||planscul.com^
+||planstiledetector.com^
+||plantapizzazz.com^
+||plantationthrillednoncommittal.com^
+||plantsrancorous.com^
+||plantswindscreen.com^
+||planyourbackup.co^
+||plaqt.com^
+||plarlyinthes.xyz^
+||plasmidsnark.website^
+||plastercreatedexpansion.com^
+||plastertakeglands.com^
+||plastleislike.com^
+||platesworked.com^
+||platform-hetcash.com^
+||platformsrespected.com^
+||platinumbother.com^
+||platitudecontinental.com^
+||platitudefivesnack.com^
+||platitudewildest.com^
+||platitudezeal.com^
+||plauna.com^
+||play5play1.com^
+||playairplanerighty.com^
+||playbook88a2.com^
+||playboyconformhusband.com^
+||playeranyd.org^
+||playerseo.club^
+||playerstrivefascinated.com^
+||playertraffic.com^
+||playingcremate.com^
+||playinglanding.com^
+||playingoutfitprofile.com^
+||playoverlyspeedyinfo-product.info^
+||playrdkf.com^
+||playsdonkey.com^
+||playstream.media^
+||playukinternet.com^
+||playvideoclub.com^
+||playvideodirect.com^
+||playwrightgrant.com^
+||pleasantlyrevenge.com^
+||pleasenudgemillions.com^
+||pleasetrack.com^
+||pleastevallege.xyz^
+||pledgezoology.com^
+||plenitudeagency.com^
+||plenitudedevoidlag.com^
+||plenomedia.com^
+||plentifulexposed.com^
+||plentifulwilling.com^
+||plex4rtb.com^
+||plexop.net^
+||plexureturp.com^
+||plfncoqj.top^
+||plianteditdisembark.com^
+||plinksplanet.com^
+||plirkep.com^
+||plkatdmeje.com^
+||plkoxaypcmzkus.com^
+||pllah.com^
+||plmhezvbcjcywo.com^
+||plmwsl.com^
+||plntxgh.com^
+||plocap.com^
+||plodpicture.com^
+||plodrat.com^
+||plosaztduojwbe.com^
+||plottercatnap.digital^
+||ployeesihighlyr.xyz^
+||ploygunline.com^
+||plpuybpodusgb.xyz^
+||plqbxvnjxq92.com^
+||plrjs.org^
+||plrst.com^
+||plsrcmp.com^
+||pltamaxr.com^
+||pluckfigburst.com^
+||pluckysups.com^
+||plufdsa.com^
+||plufdsb.com^
+||pluffdoodah.com^
+||plugerr.com^
+||plugs.co^
+||plumpdianafraud.com^
+||plumposterity.com^
+||plunderhoaxed.digital^
+||plundertentative.com^
+||plunderthetics.digital^
+||plungeideals.life^
+||plungepilmy.com^
+||pluralpeachy.com^
+||pluralsoc.uno^
+||plusclick.biz^
+||plusungratefulinstruction.com^
+||plutothejewel.com^
+||plvfzatxvpfki.com^
+||plxserve.com^
+||plyfoni.ru^
+||plyinghygrin.com^
+||plym.xyz^
+||plywoodenchant.com^
+||plywoodfact.com^
+||pmaosrgeieft.com^
+||pmc1201.com^
+||pmdnditvte.com^
+||pmetorealiukze.xyz^
+||pmieprlpq.com^
+||pmimdcjx.com^
+||pmlw0efk4x.com^
+||pmpubs.com^
+||pmsrvr.com^
+||pmtkhcr.com^
+||pmzbrfpijoa.com^
+||pmzer.com^
+||pncloudfl.com^
+||pnd.gs^
+||pndbseeqrbrfdss.xyz^
+||pneral.com^
+||pnpmreuwqv.xyz^
+||pnrblholty.com^
+||pnsqsv.com^
+||pnufzbzzomt.com^
+||pnuhondppw.com^
+||pnvbfxwbeg.com^
+||pnxtsauba.com^
+||pnyjzdtirvufft.com^
+||poacawhe.net^
+||poachfirewoodboast.com^
+||poanouwy.net^
+||poaptoug.net^
+||poapustu.net^
+||poaships.com^
+||poasotha.com^
+||poastoaz.com^
+||poatoursiign.xyz^
+||poavoabe.net^
+||pobliba.info^
+||pocli.click^
+||poclorcobxo.com^
+||pocrd.cc^
+||pocrowpush.com^
+||pocuswagner.com^
+||podalichoorays.life^
+||podefr.net^
+||podosupsurge.com^
+||podsolnu9hi10.com^
+||podtiachining.space^
+||podtiaumteen.space^
+||podunksewless.com^
+||poemherbal.com^
+||poemswrestlingstrategy.com^
+||poetryintendedverdict.com^
+||poflix.com^
+||poghaurs.com^
+||pognamta.net^
+||pogothere.xyz^
+||pohlbe.com^
+||poi3d.space^
+||poinct.com^
+||poined.com^
+||poinsk.com^
+||pointed-deal.pro^
+||pointeddifference.com^
+||pointlesseventuallydesignate.com^
+||pointlimitedzen.online^
+||pointroll.com^
+||pointyenrapturetheological.com^
+||poiseacacialaw.com^
+||poisebullan.com^
+||poiseplato.com^
+||poisism.com^
+||poisonencouragement.com^
+||pokaroad.net^
+||pokerflickerfed.com^
+||pokerobjet.com^
+||poketraff.com^
+||pokeythorpe.life^
+||pokiespedule.guru^
+||pokingtrainswriter.com^
+||pokreess.com^
+||polanders.com^
+||polarbearyulia.com^
+||polarcdn-terrax.com^
+||polardemeanour.com^
+||polaritypresentimentasterisk.com^
+||polarlootstairwell.com^
+||polarmobile.com^
+||poleaxefoamers.com^
+||poleonaryprac.com^
+||policeair.com^
+||policityseriod.info^
+||policyinmateblare.com^
+||poligh.com^
+||polishsimilarlybutcher.com^
+||politenesscalmantiquarian.com^
+||politicallyautograph.com^
+||politicallypotentgentle.com^
+||politicalname.com^
+||politicianbusplate.com^
+||pollingpephonourable.com^
+||pollingsagacioustopple.com^
+||pollpublicly.com^
+||pollstover.guru^
+||pollutefurryapproximate.com^
+||polluxnetwork.com^
+||poloptrex.com^
+||poloud.com^
+||polredsy.com^
+||polrimsi.xyz^
+||poltarimus.com^
+||polyad.net^
+||polydarth.com^
+||polygraphpretenceraw.com^
+||polyh-nce.com^
+||polypivulgars.com^
+||polyserbdom.com^
+||pomegranateheroin.com^
+||pomeroyhagdown.com^
+||pompadawe.com^
+||pompeydesigning.com^
+||pompomsshock.com^
+||pompousdescended.com^
+||pompoussqueal.com^
+||pomptame.com^
+||pon-prairie.com^
+||ponchowafesargb.com^
+||ponderousmuffled.com^
+||ponderriding.com^
+||pondinternet.com^
+||pondov.cfd^
+||poneycurnies.com^
+||pongidsrunback.com^
+||ponierpeewees.digital^
+||ponk.pro^
+||pontistcaseum.com^
+||ponyresentment.com^
+||ponysuggested.com^
+||pooboqxoh.xyz^
+||poodledopas.cam^
+||poogriry.click^
+||pookapsa.net^
+||pookawnratbite.com^
+||poolgmsd.com^
+||pooloccurrence.com^
+||poopsmussy.space^
+||pooptoom.net^
+||poorlyorchidrepute.com^
+||poorlystepmotherresolute.com^
+||poorlytanrubbing.com^
+||poosoahe.com^
+||poosugap.com^
+||pop.dojo.cc^
+||pop5sjhspear.com^
+||popadon.com^
+||popads.media^
+||popads.net^
+||popadscdn.net^
+||popbounty.com^
+||popbutler.com^
+||popcash.net^
+||popclck.net^
+||popcpm.com^
+||popeni.live^
+||poperm.com^
+||pophahwot.com^
+||pophandler.net^
+||popland.info^
+||poplarcolonistgreatest.com^
+||popmansion.com^
+||popmarker.com^
+||popmonetizer.com^
+||popmonetizer.net^
+||popmyads.com^
+||popnc.com^
+||popnet.xyz^
+||poppysol.com^
+||popruexo.com^
+||popsads.com^
+||popsads.net^
+||popsoffer.com^
+||poptm.com^
+||poptoll.com^
+||popularcldfa.co^
+||popularitydecoctioncalled.com^
+||popularlucrous.com^
+||popularmedia.net^
+||populationgrapes.com^
+||populationrind.com^
+||populis.com^
+||populisengage.com^
+||popult.com^
+||popunder.bid^
+||popunder.ru^
+||popunderstar.com^
+||popunderz.com^
+||popupchat-live.com^
+||popupgoldblocker.net^
+||popuptraffic.com^
+||popuzothe.com^
+||popwin.net^
+||popxperts.com^
+||popxyz.com^
+||porcatenonform.com^
+||porcelainfurtherties.com^
+||porcelainprivatelybrush.com^
+||poredii.com^
+||porepoise.com^
+||porkinconceivable.com^
+||pornhyip.com^
+||pornoegg.com^
+||pornoheat.com^
+||pornoio.com^
+||pornomixfree.com^
+||pornvideos.casa^
+||porojo.net^
+||portalisimmo.com^
+||portalregionstip.com^
+||portatoleprid.uno^
+||portcigarettesstudent.com^
+||portkingric.net^
+||portoteamo.com^
+||portoutsid.xyz^
+||portsspat.com^
+||posaul.com^
+||posawaj.com^
+||poseconsumeelliot.com^
+||poseurtwicet.digital^
+||posf.xyz^
+||poshhateful.com^
+||poshsenseless.com^
+||poshsplitdr.com^
+||positiveaveinsist.com^
+||positivedistantstale.com^
+||positivelyoverall.com^
+||posjnewbgjg.com^
+||pososrhwu2jf8jf09.com^
+||possessdisconnectfetch.com^
+||possessdolejest.com^
+||possessedbrute.com^
+||possessionaddictedflight.com^
+||possessionregimentunborn.com^
+||possibilityplumbing.com^
+||possiblebasket.pro^
+||possiblepencil.com^
+||post-redirecting.com^
+||postalfranticallyfriendship.com^
+||postalusersneatly.com^
+||postback.info^
+||postbacks.net^
+||postlnk.com^
+||postrelease.com^
+||postureunlikeagile.com^
+||potailservoed.com^
+||potawe.com^
+||potchampalea.website^
+||potclumsy.com^
+||potentingaknt.club^
+||potheenoillet.com^
+||pothutepu.com^
+||potionnowhere.com^
+||potionutilize.com^
+||potlegcodeins.com^
+||potnormal.com^
+||potomactatted.life^
+||potoospincher.com^
+||potsaglu.net^
+||potshumiliationremnant.com^
+||potskolu.net^
+||potslascivious.com^
+||potterystabilityassassination.com^
+||potwm.com^
+||pouchclockwise.com^
+||poufaini.com^
+||poultryrubbles.com^
+||poumouja.xyz^
+||poundabbreviation.com^
+||pounti.com^
+||pourdear.com^
+||pouredbatting.website^
+||pouredshortseconomic.com^
+||pourersdammer.guru^
+||poushoza.net^
+||poutauge.net^
+||poutdecimal.com^
+||povlnlq.com^
+||povoarge.com^
+||powchro.com^
+||powdermealfilth.com^
+||powenin.com^
+||powerad.ai^
+||poweradblocker.com^
+||powerain.biz^
+||powerpsychopathcounsel.com^
+||powerswinkshoplifting.com^
+||poweyus.com^
+||powferads.com^
+||powjoui.com^
+||powrpvuruejv.com^
+||poxa.xyz^
+||poxaharap.com^
+||poxcgxylozny.com^
+||poxykhakis.com^
+||poyusww.com^
+||pp2ppsch1hount1hf.com^
+||pp98trk.com^
+||ppaiyfox.xyz^
+||ppbihtwyapucgkg.xyz^
+||ppbircmylnnm.xyz^
+||ppcashpop.com^
+||ppcgqjehtuik.xyz^
+||ppclinking.com^
+||ppcnt.pro^
+||ppdiatk.com^
+||ppgjebhcyu.com^
+||pphauantic.com^
+||ppixufsalgm.com^
+||ppjqgbz.com^
+||pplferio.com^
+||pplgwic.com^
+||ppoommhizazn.com^
+||ppovysmcycmwvv.com^
+||pppbr.com^
+||pprq7.com^
+||ppvmhhpxuomjwo.xyz^
+||pqaz.xyz^
+||pqnnjjpzarpb.com^
+||pqsymknliiwzlr.com^
+||pqulqqpmx.com^
+||pqxbcydpv.xyz^
+||practicalframingfiddle.com^
+||practicallyfire.com^
+||practicallysacrificestock.com^
+||practicalwhich.info^
+||practiceddrummerballast.com^
+||practicedeaf.com^
+||practicedearest.com^
+||practicepeter.com^
+||practthreat.club^
+||praght.tech^
+||prahfoleruna.com^
+||prakritinfixed.com^
+||prankdishevelledhurdle.com^
+||prascfaf.com^
+||praterswhally.com^
+||prawnsimply.com^
+||prawntimetableinflux.com^
+||praycompanion.com^
+||prayersnationsunglasses.com^
+||prayersobsoletededuce.com^
+||prayfortnight.com^
+||prdmjzogryvhhz.com^
+||prdredir.com^
+||pre4sentre8dhf.com^
+||preacherscarecautiously.com^
+||preachribbonsummoned.com^
+||preampribbony.com^
+||prearmscachet.uno^
+||precedechampion.com^
+||precedenowadaysbarbecue.com^
+||precedentadministrator.com^
+||precedentbasepicky.com^
+||precedingdippingtune.com^
+||precequiv.com^
+||preciousawareness.pro^
+||preciousbearer.com^
+||preciousdoctor.pro^
+||preciousentangledjustified.com^
+||precipitationsloganhazard.com^
+||precipitationsquall.com^
+||preciselysolitaryallegation.com^
+||precisionclick.com^
+||precoilrowlock.digital^
+||predestineprohibitionmassive.com^
+||predicamentdisconnect.com^
+||predicamentprestige.com^
+||predictablelipswailed.com^
+||predictad.com^
+||predictiondexchange.com^
+||predictiondisplay.com^
+||predictionds.com^
+||predictivadnetwork.com^
+||predictivadvertising.com^
+||predictivdisplay.com^
+||preensosiery.com^
+||prefaceanything.com^
+||preferenceforfeit.com^
+||preferredsaltshift.com^
+||preferunhair.com^
+||prefleks.com^
+||pregamepluteal.com^
+||pregnancyreproducepalace.com^
+||prehealpaster.guru^
+||prehem.com^
+||prehistoriceast.com^
+||preideanested.com^
+||prejudiceinsure.com^
+||prelandcleanerlp.com^
+||prelandtest01.com^
+||prelandtest02.com^
+||preloanflubs.com^
+||preludefgn.website^
+||prematuregrumpyunhappy.com^
+||prematuresam.com^
+||premiereblinkconfessed.com^
+||premium-members.com^
+||premium4kflix.club^
+||premium4kflix.top^
+||premium4kflix.website^
+||premiumads.net^
+||premiummangle.com^
+||premiumredir.ru^
+||premiumvertising.com^
+||premonitioneuropeanstems.com^
+||premonitioninventdisagree.com^
+||premovenonda.com^
+||preoccupationjames.com^
+||preoccupycommittee.com^
+||preoccupycorrecttalented.com^
+||preonesetro.com^
+||preparationcampaignfoul.com^
+||preparationstube.com^
+||preparationtrialholding.com^
+||preparemethod.com^
+||preparingbodiesfamiliar.com^
+||preponderanttemple.com^
+||prepositioncontributorwring.com^
+||preposterousstation.com^
+||prerogativedifference.com^
+||prerogativeslob.com^
+||presentationathletefoundation.com^
+||presentationbishop.com^
+||presentimentcongruousactively.com^
+||presentlymumblespin.com^
+||presentlypacifyforests.com^
+||preservationpalsy.com^
+||preserveadapt.com^
+||presidentialcheaper.com^
+||presidentialprism.com^
+||presidentialtumble.com^
+||presidentscaredlow.com^
+||presideproreassure.com^
+||prespurmaness.com^
+||pressingequation.com^
+||pressize.com^
+||pressyour.com^
+||prestadsng.com^
+||prestigefunction.com^
+||prestlyamylan.com^
+||prestoris.com^
+||prestsusie.com^
+||presumeauthorizationcamping.com^
+||presumeinstalmentbust.com^
+||presumptuousfunnelinsight.com^
+||presumptuouslavish.com^
+||pretencepeppermint.com^
+||pretendresentfulamid.com^
+||pretendturk.com^
+||pretentiouspastelaccuser.com^
+||pretextunfinished.com^
+||pretty-size.pro^
+||prettypasttime.com^
+||prettypermission.pro^
+||prettytypicalimpatience.com^
+||prevailinsolence.com^
+||prevalentprincess.com^
+||preventedcaptivate.com^
+||previousscambuild.com^
+||prevostslakier.top^
+||prevuesthurl.com^
+||prfctmney.com^
+||prftonnes.com^
+||prhzxq.com^
+||priceyaspect.pro^
+||prickjuvenileturnstile.com^
+||priestboundsay.com^
+||priestsuede.com^
+||primalredfish.com^
+||primaryads.com^
+||primarystoppedballot.com^
+||prime-vpnet.com^
+||primerclicks.com^
+||primevalstork.com^
+||primevalsymphonymuttering.com^
+||primitiveposterappeal.com^
+||primroselegitimate.com^
+||princefruitlessfencing.com^
+||princesinistervirus.com^
+||princessallotgather.com^
+||princessmodern.com^
+||principlede.info^
+||principledecliner.info^
+||principlessilas.com^
+||pringed.space^
+||prinkedgigtree.tech^
+||printaugment.com^
+||printergarretskirt.com^
+||printerswear.com^
+||printsmull.com^
+||priselapse.com^
+||prisoninvolvingremaining.com^
+||prisonretiringcommemorate.com^
+||pritchgobble.life^
+||pritesol.com^
+||privacycounter.com^
+||privacysearching.com^
+||privacywithholdrepose.com^
+||privatediamond.pro^
+||privatedqualizebrui.info^
+||privateleaflet.com^
+||privatelookhack.com^
+||privatrac.com^
+||privilegest.com^
+||prizeimpertinentforbidden.com^
+||prizel.com^
+||prizerspirned.com^
+||prizes-topwin.life^
+||prjhvswdjoly.xyz^
+||prksism.com^
+||prm-native.com^
+||prmtracking3.com^
+||prmtracks.com^
+||pro-advert.de^
+||pro-market.net^
+||pro-pro-go.com^
+||pro-suprport-act.com^
+||pro-web.net^
+||pro119marketing.com^
+||proadscdn.com^
+||probablebeeper.com^
+||probableliving.com^
+||probablpatas.com^
+||probablyimmatureresentment.com^
+||probablyrespectivelyadhere.com^
+||probationpresented.com^
+||probationtoll.com^
+||probitystuck.com^
+||probtn.com^
+||procedurepurposeassurance.com^
+||proceduresjeer.com^
+||procesosfultry.info^
+||processaryen.xyz^
+||proclamationgumadvocate.com^
+||proclean.club^
+||procristhimber.cfd^
+||prod.untd.com^
+||prodaddkarl.com^
+||prodigalpromotion.com^
+||prodigiousarticulateruffian.com^
+||prodmp.ru^
+||prodresell.com^
+||producebreed.com^
+||producerplot.com^
+||producesdiminishhardworking.com^
+||producingdisciplecampus.com^
+||producthub.info^
+||proeroclips.pro^
+||proetusbramble.com^
+||profanewoes.uno^
+||profbigo.com^
+||professionalbusinesstoday.xyz^
+||professionallyjazzotter.com^
+||professionallytear.com^
+||professionallywealthy.com^
+||professionalsly.com^
+||professionalswebcheck.com^
+||professmeeting.com^
+||professtrespass.com^
+||proffering.xyz^
+||profi-para.com^
+||proficientfly.com^
+||profilebecomingtrain.com^
+||profilecrave.com^
+||profileimpunity.com^
+||profileoffencewithdraw.com^
+||profitable-sleep.pro^
+||profitablecpmgate.com^
+||profitablecpmnetwork.com^
+||profitablecreativeformat.com^
+||profitabledisplaycontent.com^
+||profitabledisplayformat.com^
+||profitabledisplaynetwork.com^
+||profitablegate.com^
+||profitablegatetocontent.com^
+||profitabletrustednetwork.com^
+||profitpeelers.com^
+||profitredirect.com^
+||profitstefukhatex.info^
+||profoundtwist.com^
+||profrebecca.com^
+||profsitu.com^
+||proftrafficcounter.com^
+||profuse-it.pro^
+||prognebottier.com^
+||programinsightplastic.com^
+||programmeframeworkpractically.com^
+||programwrest.com^
+||progressproceeding.com^
+||prohibitedhalfway.com^
+||projectagora.net^
+||projectagora.tech^
+||projectagoralibs.com^
+||projectagoraservices.com^
+||projectagoratech.com^
+||projectwonderful.com^
+||projetmildful.com^
+||prolatecyclus.com^
+||prolificdoerconcur.com^
+||prolongdoadaptation.com^
+||promiseyuri.com^
+||promisingcigar.com^
+||promisingjournalist.com^
+||promo-bc.com^
+||promobenef.com^
+||promotionnecessity.com^
+||promptsgod.com^
+||promsaviour.com^
+||pronedynastyimpertinence.com^
+||pronounconsternationspotlight.com^
+||pronunciationawarenessunemployment.com^
+||pronunciationlegacy.com^
+||pronunciationspecimens.com^
+||proofreclass.com^
+||propbigo.com^
+||propelactivity.com^
+||propeller-tracking.com^
+||propellerads.com^
+||propellerads.tech^
+||propellerclick.com^
+||propellerpops.com^
+||propeltuition.com^
+||properlyleash.com^
+||propersuitcase.com^
+||propertyofnews.com^
+||propertyprintervice.com^
+||properyielder.com^
+||propgoservice.com^
+||proponylisten.com^
+||proposalpearlpleasantly.com^
+||proposeado.com^
+||proposedfelonoxide.com^
+||proposedpartly.com^
+||propositiondisinterested.com^
+||propu.sh^
+||propulsionreproduceresult.com^
+||propvideo.net^
+||prorentisol.com^
+||prosboshas.com^
+||prosecutionsocktrap.com^
+||prosecutorcassettedying.com^
+||prosecutorcessationdial.com^
+||prosecutorcommaeligible.com^
+||prosecutorkettle.com^
+||proseoverlook.com^
+||prositzapas.com^
+||prosocrawn.com^
+||prospectconductorcheerfully.com^
+||prospercognomenoptional.com^
+||prosperent.com^
+||prosthong.com^
+||prosumsit.com^
+||protagcdn.com^
+||protally.net^
+||protawe.com^
+||proteavoices.com^
+||protectedfolkssomebody.com^
+||protectedpeat.com^
+||protectheader.com^
+||protectorincorporatehush.com^
+||protectorparsleybrisk.com^
+||protectorworstquake.com^
+||protectspokesmancalendar.com^
+||protectyourdevices.com^
+||proteographiummarcellus.com^
+||protoawe.com^
+||protocolburlap.com^
+||protocolgroupgroups.com^
+||prototypehungryinsist.com^
+||prototypewailrubber.com^
+||protrckit.com^
+||protypesestets.cfd^
+||prouoxsacqi.com^
+||proveattractionplays.com^
+||provenancedelegatecipher.com^
+||provenshoutmidst.com^
+||proverbcarpersuasive.com^
+||proverbnoncommittalvault.com^
+||proverbrecent.com^
+||provider-direct.com^
+||providingcrechepartnership.com^
+||providingforbidassure.com^
+||provincebarely.com^
+||provisionpointingpincers.com^
+||provlimbus.com^
+||provocativeprivate.com^
+||prowertarre.uno^
+||prowesshearing.com^
+||prowlenthusiasticcongest.com^
+||prowlfertilisedkeeping.com^
+||prowsunawned.space^
+||proximepectin.com^
+||proximic.com^
+||prplad.com^
+||prplads.com^
+||prpops.com^
+||prpopss.com^
+||prre.ru^
+||prtord.com^
+||prtrackings.com^
+||pruare.com^
+||prudah.com^
+||pruderyrotche.com^
+||prulruyaoq.com^
+||prunesderelicttug.com^
+||prunestownpostman.com^
+||prunesupgraderadiator.com^
+||prunuspelmet.website^
+||prutosom.com^
+||prxeceafdxdlc.xyz^
+||prxy.online^
+||prydrains.top^
+||pryersdarat.digital^
+||pryrhoohs.site^
+||prytheeaxonia.com^
+||prytrainer.com^
+||psaighid.com^
+||psaiglursurvey.space^
+||psaiksou.xyz^
+||psaiptoh.net^
+||psairees.net^
+||psairtoo.com^
+||psaisegn.net^
+||psaithou.com^
+||psaizeemit.com^
+||psaksegh.xyz^
+||psalmichogcote.guru^
+||psalrausoa.com^
+||psaltard.net^
+||psaltauw.net^
+||psapsiph.net^
+||psardaub.net^
+||psarecommendas.com^
+||psatorsi.com^
+||psaudous.com^
+||psaugourtauy.com^
+||psaukaux.net^
+||psausuck.net^
+||psautiultvvsqxj.xyz^
+||psauwush.net^
+||psclicks.com^
+||psdn.xyz^
+||psedregn.net^
+||pseeghud.com^
+||pseekree.com^
+||pseekseecm.com^
+||pseemsee.com^
+||pseepsie.com^
+||pseepsoo.com^
+||pseghauw.com^
+||psegreew.net^
+||pseidpmubwu.com^
+||psensuds.net^
+||psfgobbet.com^
+||pshb.me^
+||pshmetrk.com^
+||pshtrk.com^
+||pshtrkg.com^
+||psikoofack.com^
+||psirdain.com^
+||psirsoor.com^
+||psirsugn.net^
+||psithich.com^
+||psixoahi.xyz^
+||psma02.com^
+||psoaftob.xyz^
+||psoageeb.com^
+||psoageph.com^
+||psoalreh.com^
+||psoanufi.com^
+||psognaih.xyz^
+||psojeeng.com^
+||psoogaix.net^
+||psoolikoagy.com^
+||psoompou.xyz^
+||psoonuxo.net^
+||psoorgou.com^
+||psoorsen.com^
+||psootchu.net^
+||psoothie.xyz^
+||psothoms.com^
+||psougoar.com^
+||psougrie.com^
+||psoukesh.com^
+||psounsoo.xyz^
+||psouphoz.com^
+||psouzoub.com^
+||psozoult.net^
+||pssy.xyz^
+||pstreetma.com^
+||psubooth.com^
+||psucmulr.net^
+||psuftoum.com^
+||psugkfqmys.com^
+||psumainy.xyz^
+||psuphuns.net^
+||psurdoak.com^
+||psurigrabi.com^
+||psvgnczo.com^
+||psychicbowel.com^
+||psycholjicaque.com^
+||psychologyairport.com^
+||psychologycircumvent.com^
+||psychologydistinguishnest.com^
+||psychologywoman.com^
+||psydyrony.com^
+||psyqwlqrff.xyz^
+||pt-xb.xyz^
+||ptadrony.xyz^
+||ptaickug.com^
+||ptaicoamt.com^
+||ptaiksah.com^
+||ptaimpeerte.com^
+||ptaissud.com^
+||ptalribs.xyz^
+||ptapjmp.com^
+||ptarepjx.com^
+||ptaughar.com^
+||ptaujoot.net^
+||ptaulratch.com^
+||ptaungoo.xyz^
+||ptaupsom.com^
+||ptauxofi.net^
+||ptawe.com^
+||ptawehex.net^
+||ptawhood.net^
+||ptcdwm.com^
+||ptdinxchgxu.com^
+||ptechait.com^
+||ptecmooz.net^
+||ptecmuny.com^
+||ptedreer.com^
+||ptedroab.xyz^
+||pteeksou.xyz^
+||pteevaih.xyz^
+||pteftagu.com^
+||pterealcorylus.website^
+||ptersudisurvey.top^
+||pterylaroak.com^
+||ptetchie.net^
+||ptewarin.net^
+||ptewauta.net^
+||ptffvpjhhb.com^
+||ptidfrvqxpucy.com^
+||ptidsezi.com^
+||ptiftols.net^
+||ptinouth.com^
+||ptipsixo.com^
+||ptipsout.net^
+||ptirgaux.com^
+||ptistyvymi.com^
+||ptlwm.com^
+||ptlwmstc.com^
+||ptmzr.com^
+||ptoafauz.net^
+||ptoahaistais.com^
+||ptoajait.net^
+||ptoangir.com^
+||ptoapouk.com^
+||ptobsagn.com^
+||ptochair.xyz^
+||ptoftheca.xyz^
+||ptompeer.net^
+||ptonauls.net^
+||ptongouh.net^
+||ptookaih.net^
+||ptooshos.net^
+||ptotchie.xyz^
+||ptoubeeh.net^
+||ptoujaix.xyz^
+||ptoumsid.net^
+||ptoushoa.com^
+||ptousteg.net^
+||ptoutsexe.com^
+||ptowouse.xyz^
+||ptp22.com^
+||ptp24.com^
+||ptpfict.space^
+||ptpoeyc.com^
+||pttsite.com^
+||ptufihie.net^
+||ptuglupyli.com^
+||ptugneez.net^
+||ptugnins.net^
+||ptugnoaw.net^
+||ptulepti.net^
+||ptupoobs.com^
+||pturedmyattentio.xyz^
+||ptutchiz.com^
+||ptwmemd.com^
+||ptwmjmp.com^
+||ptyomtzjpdlcf.com^
+||pu1.biz^
+||pu3.biz^
+||pu5hk1n2020.com^
+||pub.network^
+||pubacca5mc.com^
+||pubaka5.com^
+||pubceremony.com^
+||pubertysung.digital^
+||pubeshogback.uno^
+||pubfruitlesswording.com^
+||pubfuture-ad.com^
+||pubfutureads.com^
+||pubguru.net^
+||pubhotmax.com^
+||pubianmending.space^
+||pubimageboard.com^
+||publicityparrots.com^
+||publiclyemployeronerous.com^
+||publicsparedpen.com^
+||publicunloadbags.com^
+||publisherads.click^
+||publishercounting.com^
+||publisherride.com^
+||publited.com^
+||publpush.com^
+||publzuza.live^
+||pubmaner5.com^
+||pubmatic.com^
+||pubmine.com^
+||pubnation.com^
+||pubovore.com^
+||pubpowerplatform.io^
+||pubrain.com^
+||pubtm.com^
+||pubtrky.com^
+||puczuxqijadg.com^
+||puddingamass.com^
+||puddingdefeated.com^
+||puddleincidentally.com^
+||pudencygletty.com^
+||pudrardu.net^
+||pueber.com^
+||pueral.com^
+||puerq.com^
+||puerty.com^
+||pugdisguise.com^
+||pugehjjxdr.xyz^
+||pughoomo.xyz^
+||pugmilldurgan.com^
+||pugmillmuspike.life^
+||pugsgivehugs.com^
+||puhtml.com^
+||puitaexb.com^
+||pujuco.uno^
+||pulayanyet.com^
+||puldhukelpmet.com^
+||pulfrnaewqrkuqg.com^
+||pullcattishwidth.com^
+||pulpix.com^
+||pulpssmuggle.uno^
+||pulpyads.com^
+||pulpybizarre.com^
+||pulsatemonos.digital^
+||pulseadnetwork.com^
+||pulsemgr.com^
+||pulseonclick.com^
+||pulsercrypto.com^
+||pulserviral.com^
+||pulsesmaraged.com^
+||pumdfferpkin5hs454r43eeds.com^
+||pumpaiss.net^
+||pumpbead.com^
+||pumpkinneighbourpoet.com^
+||pumpmulticultural.com^
+||pumpoofi.net^
+||puncol.com^
+||punctuationceiling.com^
+||punishrwy.space^
+||punkahskayles.com^
+||punkfigured.com^
+||punkiecrudded.digital^
+||punoocke.com^
+||punosy.best^
+||punosy.com^
+||punyvamos.com^
+||puoxpytcblqrti.xyz^
+||pupilexpressionscent.com^
+||pupilmudwort.com^
+||pupilorgansmad.com^
+||puppyderisiverear.com^
+||puppytestament.com^
+||pupspu.com^
+||pupur.net^
+||pupur.pro^
+||puqobfkghmyb.com^
+||purchaserteddy.com^
+||purchasertormentscoundrel.com^
+||purgoaho.xyz^
+||purlieudinette.uno^
+||purlingmoonmen.tech^
+||purpleads.io^
+||purplecode.pro^
+||purpleflag.net^
+||purplepatch.online^
+||purplewinds.xyz^
+||purposelyharp.com^
+||purposelynextbinary.com^
+||purposeolivebathtub.com^
+||purposeparking.com^
+||purrbackground.com^
+||pursedistraught.com^
+||pursuedfourteenth.com^
+||pursuesananite.com^
+||pursuingconjunction.com^
+||pursuitcharlesbaker.com^
+||pursuitgrasp.com^
+||pursuitnauseousinvalid.com^
+||pursuitperceptionforest.com^
+||pusbgeqltg.xyz^
+||puserving.com^
+||pusfcjwfdon.com^
+||push-news.org^
+||push-notifications.top^
+||push-sdk.com^
+||push-sdk.net^
+||push-subservice.com^
+||push.house^
+||push2check.com^
+||pushads.biz^
+||pushagim.com^
+||pushalk.com^
+||pushame.com^
+||pushamir.com^
+||pushance.com^
+||pushanert.com^
+||pusharest.com^
+||pushazam.com^
+||pushbaddy.com^
+||pushbasic.com^
+||pushbizapi.com^
+||pushcampaign.club^
+||pushcentric.com^
+||pushclk.com^
+||pushdelone.com^
+||pushdom.co^
+||pushdrop.club^
+||pushdusk.com^
+||pushebrod.com^
+||pushedgraceful.com^
+||pushego.com^
+||pusheify.com^
+||pushell.info^
+||pushelp.pro^
+||pusherism.com^
+||pusheshourly.com^
+||pushgaga.com^
+||pushimer.com^
+||pushimg.com^
+||pushinpage.com^
+||pushkav.com^
+||pushking.net^
+||pushlapush.com^
+||pushlaram.com^
+||pushlarr.com^
+||pushlat.com^
+||pushlemm.com^
+||pushlinck.com^
+||pushlnk.com^
+||pushlommy.com^
+||pushlum.com^
+||pushmajor1.com^
+||pushmaster-in.xyz^
+||pushmejs.com^
+||pushmenews.com^
+||pushmobilenews.com^
+||pushmono.com^
+||pushnami.com^
+||pushnative.com^
+||pushnest.com^
+||pushnevis.com^
+||pushnews.org^
+||pushnice.com^
+||pushno.com^
+||pushnotice.xyz^
+||pushochenk.com^
+||pushokey.com^
+||pushorg.com^
+||pushosub.com^
+||pushosubk.com^
+||pushpong.net^
+||pushprofit.net^
+||pushpush.net^
+||pushqwer.com^
+||pushrase.com^
+||pushsansoa.com^
+||pushsar.com^
+||pushserve.xyz^
+||pushsight.com^
+||pushssp.top^
+||pushtorm.net^
+||pushub.net^
+||pushup.wtf^
+||pushwelcome.com^
+||pushworldtool.com^
+||pushynations.com^
+||pushzolo.com^
+||pusishegre.com^
+||pussl3.com^
+||pussl48.com^
+||pusvfedhsxwj.com^
+||pusztacods.tech^
+||putainalen.com^
+||putate.com^
+||putbid.net^
+||putfeablean.org^
+||putfeableand.info^
+||putfeepea.site^
+||putrefyvarioushumorous.com^
+||putrescentheadstoneyoungest.com^
+||putrr16.com^
+||putrr18.com^
+||putrr7.com^
+||puwpush.com^
+||puxonsir.net^
+||puyjjq.com^
+||puysis.com^
+||puzzio.xyz^
+||puzzlementangrily.com^
+||puzzlepursued.com^
+||puzzoa.xyz^
+||pvawydmmj.com^
+||pvbgzjwyncthhl.com^
+||pvclouds.com^
+||pvdrtiy.com^
+||pvjiqmryv.com^
+||pvlcbsynxsabti.com^
+||pvqzggfkuxum.com^
+||pvsxzlb.com^
+||pvtypsgueyqey.com^
+||pvxvazbehd.com^
+||pvykihatcb.com^
+||pwbmdalngizhz.com^
+||pweabzcatoh.com^
+||pwigekcyr.com^
+||pwmctl.com^
+||pwrgrowthapi.com^
+||pwxtock.com^
+||pwxueuocf.com^
+||px3792.com^
+||pxdghffadlhpbw.com^
+||pxfindone.com^
+||pxl2015x1.com^
+||pxltrck.com^
+||pxmqdhcvpcsra.xyz^
+||pxnmkmqxmqe.com^
+||pxsscerwyeiucg.com^
+||pxtrkr.com^
+||pxx23jkd.com^
+||pxyrmsodhctqifm.com^
+||pycvlnu.com^
+||pyfqqcekcgd.xyz^
+||pyhdvvimr.com^
+||pykgnuujfuq.com^
+||pyoungstersofto.xyz^
+||pyract.com^
+||pyrexikon.com^
+||pyrict.com^
+||pyrily.com^
+||pyrincelewasg.com^
+||pyrincelewasgild.info^
+||pyritescressy.com^
+||pyrroylceriums.com^
+||pythoncareens.tech^
+||pyvqoaoeeen.com^
+||pyxdajs.com^
+||pyxidiaimmerit.com^
+||pyxiscablese.com^
+||pyxzealot.com^
+||pyzwxkb.com^
+||pzawclkyxuno.com^
+||pzeazgmwem.com^
+||pzgbqbk.com^
+||pzoynkxexnx.com^
+||pzqfmhy.com^
+||pzwdtz.com^
+||q1-tdsge.com^
+||q15homgeneral.com^
+||q1mediahydraplatform.com^
+||q2i8kd5n.de^
+||q6idnawboy7g.com^
+||q8ntfhfngm.com^
+||q99i1qi6.de^
+||qa24ljic4i.com^
+||qads.io^
+||qadserve.com^
+||qadservice.com^
+||qagkyeqxv.xyz^
+||qajgarohwobh.com^
+||qajwizsifaj.com^
+||qakmlfdseuzfkz.com^
+||qalscihrolwu.com^
+||qambywkmlvyj.top^
+||qamwjzgwtvpm.com^
+||qamwm5o8dlgijte.com^
+||qaqqihlho.com^
+||qarewien.com^
+||qasrae.com^
+||qatsbesagne.com^
+||qatttuluhog.com^
+||qaydqvuzmu.com^
+||qaylocbaxunnav.com^
+||qbkvksakslhgek.com^
+||qbkzvophvva.com^
+||qblcyqgn.com^
+||qbnyeqylvynzy.top^
+||qbpchpcuglu.com^
+||qbqzbzbzzzjjb.top^
+||qbrrrlawwrvbv.top^
+||qcffrrsyaxcccx.xyz^
+||qchfbnjagbdst.com^
+||qcigbljyenh.com^
+||qclgcdtv.com^
+||qcmjdptyikwf.xyz^
+||qcotzalsettiv.com^
+||qcsjmidihe.com^
+||qctzwkrczwjw.com^
+||qdagihwi.xyz^
+||qdlbdpsctalt.com^
+||qdlesuneeqoglp.com^
+||qdmil.com^
+||qdotzfy.com^
+||qdprapwflpvxpyl.com^
+||qdxzpcytii.com^
+||qe0ckm024b.com^
+||qebuvi.xyz^
+||qedeczzdt.com^
+||qel-qel-fie.com^
+||qelqlunebz.com^
+||qemyetwxfcwhtyy.com^
+||qeqaqnvwmbkyj.top^
+||qfdn3gyfbs.com^
+||qfisatztut.com^
+||qfjherc.com^
+||qfnkzytwzfftnw.com^
+||qfnvqalpgiriub.com^
+||qfoodskfubk.com^
+||qfqdcyzai.com^
+||qfzsghhvu.com^
+||qgerr.com^
+||qgevavwyafjf.com^
+||qgisjfmwhhsmfe.com^
+||qgnlbjkxrzb.com^
+||qgoqkcpw.xyz^
+||qgsgnqhqgjw.com^
+||qgsjtgvjz.com^
+||qgtastuxjdrrmc.com^
+||qgxbluhsgad.com^
+||qhdwjjhvgqa.com^
+||qhiqlwcwguv.com^
+||qhnwj.com^
+||qhskskb.com^
+||qhttxwlecujjfc.com^
+||qhuguzodbd.com^
+||qibkkioqqw.com^
+||qickazzmoaxv.com^
+||qifxwiruhrr.com^
+||qimwsxukxwnhba.xyz^
+||qinvaris.com^
+||qiqdpeovkobj.com^
+||qiqgvcrnhwc.com^
+||qituduwios.com^
+||qiuobuixthzcc.com^
+||qivaiw.com^
+||qiviutsdextran.com^
+||qivolcgcemi.com^
+||qizjkwx9klim.com^
+||qjdlivr.com^
+||qjpotvwljgw.xyz^
+||qjsknpxwlesvou.com^
+||qjukphe.com^
+||qjvtofw.com^
+||qjwglnuwqvr.com^
+||qjyoanpkf.com^
+||qkalpmwsvfwqqy.com^
+||qkdhstfyx.com^
+||qkepevhlton.xyz^
+||qkhvongctffugm.com^
+||qkjjuhs.com^
+||qkouawnjejedvno.xyz^
+||qksrv.biz^
+||qksrv.cc^
+||qksrv.net^
+||qksrv1.com^
+||qksz.net^
+||qkyliljavzci.com^
+||qlfqkjluvz.com^
+||qlmwgibhbhar.com^
+||qlnccjattetsoq.com^
+||qlspx.com^
+||qlvlaqcd.com^
+||qlyunjqcyvx.xyz^
+||qmaacxajsovk.com^
+||qmqjvreqwywbk.top^
+||qmqjvreqwywla.top^
+||qmrwbzwalrmry.top^
+||qmvnrvjeyyzna.top^
+||qmxgkgykaex.com^
+||qmykwjryyrrjj.top^
+||qmzakpdewlelv.com^
+||qn-5.com^
+||qnafjpneek.com^
+||qnjyeyc.com^
+||qnlranvabaqk.top^
+||qnlranvabrnq.top^
+||qnsr.com^
+||qoaaa.com^
+||qobarmbghaiv.xyz^
+||qodyldusxloinpn.com^
+||qofowyki.xyz^
+||qogilljcxwvrhj.com^
+||qokesjxpbds.com^
+||qokira.uno^
+||qomate.xyz^
+||qomtolfpbno.com^
+||qomuchorindownlo.xyz^
+||qooanabj.com^
+||qootvuedh.com^
+||qopzmao.com^
+||qoqv.com^
+||qoqxnuxneo.xyz^
+||qoredi.com^
+||qorlxle.com^
+||qouiuircb.com^
+||qovwrntfxpilyt.com^
+||qoytmrsfvu.com^
+||qozveo.com^
+||qpcoeyfwqdltkk.com^
+||qpixxezhwwoc.com^
+||qppq166n.de^
+||qprthjab.com^
+||qpvbsekwtwsoe.com^
+||qqfelxqmhoc.com^
+||qqgfubewassi.com^
+||qqkcmafkxossru.com^
+||qqkzjpupluv.com^
+||qqlnvwjtjhve.com^
+||qqmhh.com^
+||qqmvwjvrlyery.top^
+||qqmvwjvrlyyrq.top^
+||qqqqbdma.com^
+||qqqwes.com^
+||qquubyoknj.com^
+||qqvlbzlbqenbk.top^
+||qqvthrkrseoog.com^
+||qqvvkebebnbb.top^
+||qqvvkebebnlq.top^
+||qqyqeqqmqrybb.top^
+||qr-captcha.com^
+||qrawitobfm.com^
+||qrclevrfjw.com^
+||qrdnpjxic.com^
+||qreakingoutinteah.xyz^
+||qrlsx.com^
+||qroagwadndwy.com^
+||qrprobopassor.com^
+||qrwkkcyih.xyz^
+||qrzlaatf.xyz^
+||qsbeclwuayvaekd.com^
+||qsdsejarkznkqa.com^
+||qservz.com^
+||qsghdoiywu.com^
+||qsiuiwnh.com^
+||qsmsmahlrhop.com^
+||qsorirgzqw.com^
+||qsoxiekkfjl.com^
+||qtbb6.com^
+||qtimowbaqnd.xyz^
+||qtspkqzn.com^
+||qtuopsqmunzo.com^
+||qtuxulczymu.com^
+||quackexclusfdfjd.com^
+||quadhu.com^
+||quadrupleclick.com^
+||quaewit.com^
+||quagfa.com^
+||quailnude.com^
+||quaint-escape.pro^
+||quakesalamat.com^
+||qualificationsomehow.com^
+||qualifiedhead.pro^
+||qualifycleaveinduced.com^
+||qualitiesyoung.com^
+||qualitydestructionhouse.com^
+||qualitysquashwin.com^
+||quallyrimers.com^
+||quanta-wave.com^
+||quantoz.xyz^
+||quarrelconfidentmane.com^
+||quarrelrelative.com^
+||quasiblamelesshazy.com^
+||quaternnerka.com^
+||quatersgnast.com^
+||quatrefeuillepolonaise.xyz^
+||quatxio.xyz^
+||quavercivil.com^
+||quaverlonersloppy.com^
+||qucireideaux.com.ua^
+||qudklsxu.com^
+||queasyclasts.life^
+||quebecanaemia.tech^
+||queersodadults.com^
+||queiajowan.com^
+||quenchskirmishcohere.com^
+||quensillo.com^
+||querulous-type.com^
+||queryhookczar.com^
+||querylead.com^
+||quesid.com^
+||questionable-dead.com^
+||questioningsanctifypuberty.com^
+||questionsconnected.com^
+||quiaresp.com^
+||quiazo.xyz^
+||quickads.net^
+||quickcontrolpc.com^
+||quickieboilingplayground.com^
+||quickielatepolitician.com^
+||quicklisti.com^
+||quickorange.com^
+||quickwittedskirt.com^
+||quietannouncementdove.com^
+||quietlybananasmarvel.com^
+||quietsewing.com^
+||quikgzfisiodk.com^
+||quilescornual.uno^
+||quillyatik.digital^
+||quiltscaudata.com^
+||quinatedating.top^
+||quinizechoel.com^
+||quitelyhabitat.com^
+||quitesousefu.com^
+||quiveringgland.com^
+||quiveringriddance.com^
+||quizmastersnappy.com^
+||quizsupportedchapel.com^
+||quizzicalgrand.pro^
+||qumagee.com^
+||qummafsivff.com^
+||quodartily.com^
+||quoisy.com^
+||quokkacheeks.com^
+||quoo.eu^
+||quotecosmopolitandetached.com^
+||quoteprocesses.com^
+||quotes.com^
+||quqcasuxuytehkw.com^
+||qusfmaxgfa.xyz^
+||quxsiraqxla.com^
+||qvikar.com^
+||qvjpjsglmvhcbv.xyz^
+||qvlczhitbsqpl.com^
+||qvol.tv^
+||qvorcqfon.com^
+||qwa3ldhn9u0t.com^
+||qwaapgxfahce.com^
+||qwbaiftlbfbnt.com^
+||qwerfdx.com^
+||qwertytracks.com^
+||qwmaeqrneewny.top^
+||qwmdnlzitsys.com^
+||qwqeifbsbxqozy.com^
+||qwtag.com^
+||qxdownload.com^
+||qxeemdpaerfjer.xyz^
+||qxgbgixnzcoen.com^
+||qxhspimg.com^
+||qxiabfmmtjhyv.com^
+||qxjohabnsheyt.com^
+||qxrbu.com^
+||qxuelcdfvgecwpb.com^
+||qxyam.com^
+||qxycdoexyj.com^
+||qyajwjyjnavzq.top^
+||qydrwhhk.xyz^
+||qyenlspei.com^
+||qykxyax.com^
+||qylgfuikc.com^
+||qymdcuco.com^
+||qynpfyvxkyv.com^
+||qynqvkkmbzvkk.top^
+||qyqkemrarznvv.top^
+||qyxwfe.com^
+||qz496amxfh87mst.com^
+||qzdmvwewzxzzze.com^
+||qzkjkiexmsyv.com^
+||qzqmrlqnnzwab.top^
+||qzyllgqficyd.com^
+||qzynbzjrkarma.top^
+||r-tb.com^
+||r023m83skv5v.com^
+||r3oodleaw5au4ssir.com^
+||r5apiliopolyxenes.com^
+||r66net.com^
+||r66net.net^
+||r932o.com^
+||raadth.com^
+||rabblefang.com^
+||rabblelobbyfry.com^
+||rabblespidersrenaissance.com^
+||rabbre.com^
+||rabfakfolksey.digital^
+||rabidamoral.com^
+||rabidjim.com^
+||rablic.com^
+||raccourir.xyz^
+||racesundermine.com^
+||racewhisperingsnow.com^
+||racktidyingunderground.com^
+||racterdeet.com^
+||racticalwhich.com^
+||radarconsultation.com^
+||radargoats.com^
+||radarwitch.com^
+||radeant.com^
+||radiancethedevice.com^
+||radiantskilled.com^
+||radicalovertime.com^
+||radicalverdictreview.com^
+||radied.com^
+||radiusfellowship.com^
+||radiusmarketing.com^
+||radshedmisrepu.info^
+||raeoaxqxhvtxe.xyz^
+||raeturghttcou.com^
+||raffleinsanity.com^
+||rag3ca7t5amubr8eedffin.com^
+||ragapa.com^
+||ragazzepotshot.com^
+||ragbagsporcine.com^
+||rageagainstthesoap.com^
+||ragerystenchy.com^
+||ragged-weakness.pro^
+||raggledordures.com^
+||ragita.uno^
+||raglassofrum.cc^
+||raiglihi.net^
+||raijoolu.xyz^
+||railingconveniencesabattoir.com^
+||railinghighbachelor.com^
+||raillimp.com^
+||railroadfatherenlargement.com^
+||rainerspooked.live^
+||rainierem.com^
+||rainwealth.com^
+||rainyautumnnews.com^
+||rainyfreshen.com^
+||raiphoos.com^
+||raisentotic.uno^
+||raiserefreshmentgoods.com^
+||raisingsupportive.com^
+||raisinmanagelivestock.com^
+||raivoufe.xyz^
+||rajabets.xyz^
+||rakamu.com^
+||rakhen.com^
+||rakiblinger.com^
+||rakkuntwex.com^
+||rallantynethebra.com^
+||rallydisprove.com^
+||rallyexpirehide.com^
+||rameejour.com^
+||rammagepatagia.com^
+||rammersdarvon.com^
+||rammishruinous.com^
+||ramosz.lol^
+||rampirepubis.uno^
+||rampmention.com^
+||ramtakeout.com^
+||ramusiauk.digital^
+||ramusiproxied.com^
+||ranchsatin.com^
+||rancidstrait.com^
+||rancorousnoncommittalsomewhat.com^
+||randallbesin.com^
+||randiul.com^
+||randomadsrv.com^
+||randomamongst.com^
+||randomassertiveacacia.com^
+||randomignitiondentist.com^
+||rangercessation.com^
+||ranhealthy.com^
+||ranism.com^
+||rankestmowers.com^
+||rankinegaumish.com^
+||rankpeers.com^
+||ranksubquery.com^
+||ranmistaken.com^
+||ranopportunit.info^
+||ranythingamgladt.com^
+||raogjkrgjtrml.xyz^
+||raosmeac.net^
+||rapaneaphoma.com^
+||rapanearozzer.cfd^
+||rapemineral.com^
+||rapesensual.com^
+||rapgasyogin.com^
+||raphanysteers.com^
+||raphidewakener.com^
+||rapidhits.net^
+||rapidlybeaver.com^
+||rapidshookdecide.com^
+||rapolok.com^
+||raptapee.com^
+||raptingy.net^
+||raptorssplurge.com^
+||rapttransaction.com^
+||rapturemeddle.com^
+||rareghoa.net^
+||rarseene.com^
+||rasahick.space^
+||rashtiprimomo.com^
+||raspedexsculp.com^
+||raspiernauseas.com^
+||ratebilaterdea.com^
+||ratesatrociousplans.com^
+||rathelycornett.com^
+||ratingberglet.com^
+||rationalan.pro^
+||rationalizedalton.com^
+||ratitaebajau.com^
+||ratize.com^
+||rattedropenrigh.xyz^
+||ratury.com^
+||rauceesh.com^
+||raufoomoochi.com^
+||raujurum.net^
+||raukaury.com^
+||raunowhy.xyz^
+||raupothrepe.com^
+||raupsica.net^
+||raupsoap.com^
+||rausfml.com^
+||rausougo.net^
+||rauvoaty.net^
+||rauwoukauku.com^
+||ravalads.com^
+||ravalamin.com^
+||ravaquinal.com^
+||ravaynore.com^
+||ravenchewrainbow.com^
+||ravenousdrawers.com^
+||ravenpearls.com^
+||raw-co.com^
+||raw-move.pro^
+||rawasy.com^
+||rawconstitutionnan.com^
+||rawjeansadvertising.com^
+||rawoarsy.com^
+||raxfracid.com^
+||raylnk.com^
+||rayshopsshabby.com^
+||razdvabm.com^
+||razeupmount.digital^
+||razingvexable.store^
+||razzedlabras.com^
+||razzlebuyer.com^
+||rbcxttd.com^
+||rbgrckaysvrp.com^
+||rbljoyvsvtj.xyz^
+||rblrekay.com^
+||rbnt.org^
+||rbthre.work^
+||rbtwo.bid^
+||rbxycnnesqsjc.com^
+||rcblkkhfvrxyn.com^
+||rcerrohatfad.com^
+||rcf3occ8.de^
+||rcpadatlgn.com^
+||rcpttankert.com^
+||rcuacroossonek.xyz^
+||rcurn.com^
+||rcvlink.com^
+||rcvlinks.com^
+||rcvsmbawwqodqt.com^
+||rcwuzudjcsjmr.com^
+||rddywd.com^
+||rderstartirrelea.info^
+||rdghnhu.com^
+||rdjbhghljkrca.com^
+||rdrceting.com^
+||rdrctgoweb.com^
+||rdreamsofcryin.info^
+||rdrhmxyitc.com^
+||rdrm1.click^
+||rdroot.com^
+||rdrsec.com^
+||rdrtrk.com^
+||rdsb2.club^
+||rdsncyndhj.com^
+||rdtk.io^
+||rdtrck2.com^
+||rdwmct.com^
+||rdximaudovydtk.com^
+||rdxmjgp.com^
+||re-captha-version-3-29.top^
+||re-captha-version-3-33.top^
+||reabitheconti.com^
+||reachesowing.live^
+||reachmode.com^
+||readinghailstone.com^
+||readiong.net^
+||readly-renterval.icu^
+||readserv.com^
+||readserver.net^
+||readyblossomsuccesses.com^
+||reaffixteaey.com^
+||reagend.com^
+||reager30.com^
+||reaginsroset.com^
+||reajyu.net^
+||real-consequence.pro^
+||real-difficulty.pro^
+||realescowbell.com^
+||realevalbs.com^
+||realityamorphous.com^
+||realizesensitivenessflashlight.com^
+||reallifeforyouandme.com^
+||reallyindependencehated.com^
+||reallyworkplacesnitch.com^
+||realmatch.com^
+||realmsham.com^
+||realnewslongdays.pro^
+||realpopbid.com^
+||realsh.xyz^
+||realsrv.com^
+||realsrvcdn.com^
+||realtime-bid.com^
+||realvids.online^
+||realvids.space^
+||realvu.net^
+||reamsanswere.org^
+||reaoryhuluios.com^
+||reapinject.com^
+||rearedexpensive.com^
+||reariikosin.com^
+||rearmhoulet.uno^
+||reaseinprofitstefu.info^
+||reasonablelandmark.com^
+||reasonableoakdejection.com^
+||reasoningarcherassuage.com^
+||reasus.com^
+||reatasfibro.uno^
+||reate.info^
+||reautecryable.life^
+||rebakeassets.com^
+||rebakedenosist.com^
+||rebaterremass.com^
+||rebelfarewe.org^
+||rebelliousdesertaffront.com^
+||rebillsegomism.com^
+||rebindskayoes.com^
+||rebrea.com^
+||rebrew-foofteen.com^
+||rebrickstowp.com^
+||rebursteaseful.com^
+||rebuxoos.xyz^
+||recableuprear.com^
+||recalledcosmeticostentatious.com^
+||recalledriddle.com^
+||recanesjurel.com^
+||recastdeclare.com^
+||recastnavy.com^
+||recedewell.com^
+||recentalsindu.com^
+||recentlymourning.com^
+||recentrecentboomsettlement.com^
+||recentrecentturf.com^
+||receptionnausea.com^
+||recessgrimp.space^
+||recessioncomply.com^
+||recessionhumiliate.com^
+||recesslikeness.com^
+||recesssignary.com^
+||rechannelapi.com^
+||rechanque.com^
+||recholta.net^
+||recipeominouscrest.com^
+||recipesunny.com^
+||recipientmuseumdismissed.com^
+||reciprocaldowntownabout.com^
+||reciteassemble.com^
+||reciteimplacablepotato.com^
+||recklessaffluent.com^
+||recklessliver.com^
+||recklessmarine.com^
+||reckonpretax.com^
+||reclaairyygz.com^
+||reclaimhorridaltitude.com^
+||reclineburp.com^
+||reclod.com^
+||recloseclouty.com^
+||recoiltravellingbreach.com^
+||recollectionchicken.com^
+||recomendedsite.com^
+||recommendationfurnace.com^
+||recommendedforyou.xyz^
+||recommendedlab.com^
+||recommendedseizedbewildered.com^
+||recommendessencerole.com^
+||recompensechevyconnoisseur.com^
+||recompensecombinedlooks.com^
+||reconciliationmallwed.com^
+||reconnectjealousyunited.com^
+||reconsiderallowinggunfire.com^
+||record.guts.com^
+||record.rizk.com^
+||recordeditionneedful.com^
+||recorderbenefactortriggers.com^
+||recordervesttasting.com^
+||recordingfilessuperintend.com^
+||recordingperky.com^
+||recordingshipping.com^
+||recordstunradioactive.com^
+||recoupsamakebe.com^
+||recoverystrait.com^
+||recrihertrettons.com^
+||recruitburp.com^
+||recruitresidebitterness.com^
+||rectangular-hook.pro^
+||rectanthenwirit.com^
+||rectificationnervous.com^
+||rectresultofthepla.info^
+||recurseagin.com^
+||recyclinganewupdated.com^
+||recyclingbees.com^
+||red-track.xyz^
+||redads.biz^
+||redbillecphory.com^
+||redcoatiztle.com^
+||reddenjerusalem.com^
+||redderspsiloi.guru^
+||reddsdainful.com^
+||redealstonage.com^
+||redecayspoach.life^
+||redeemlesson.com^
+||redetaailsh.info^
+||redewdit.pro^
+||redi.teengirl-pics.com^
+||redic.net^
+||redic2.net^
+||redic3.com^
+||redic4.com^
+||redic5.xyz^
+||redic6.site^
+||redij.online^
+||redir4.net^
+||redir9.net^
+||redirect-path1.com^
+||redirecting7.eu^
+||redirection.one^
+||redirectlinker.com^
+||redirectsstm.click^
+||redistedi.com^
+||redlele.com^
+||rednewly.com^
+||redonetype.com^
+||redoutcomecomfort.com^
+||redri.net^
+||redriesoxyaena.com^
+||redrootprotyle.uno^
+||redrotou.net^
+||redtopcliquy.com^
+||reducebakers.com^
+||reducinglousynauseous.com^
+||redwingmagazine.com^
+||reedbritingsynt.info^
+||reedpraised.com^
+||reedsbullyingpastel.com^
+||reedschandler.com^
+||reedsinterfering.com^
+||reedsonceoxbow.com^
+||reedthatm.biz^
+||reefingcolures.com^
+||reelnk.com^
+||reenakun.com^
+||reencoccous.store^
+||reenginee.club^
+||reerfdfgourgo.xyz^
+||reerfdfgourgoldpie.com^
+||reesterzeniths.guru^
+||reevoopt.com^
+||refban.com^
+||refbanners.com^
+||refbanners.website^
+||refdomain3.xyz^
+||refdzhz.com^
+||referencepronounce.com^
+||referredholesmankind.com^
+||refershaunting.com^
+||refilednisi.com^
+||reflectingscoopcourse.com^
+||reflectionsidewalk.com^
+||reflushneuma.com^
+||refnippod.com^
+||refoortowatch.com^
+||refpa.top^
+||refpabuyoj.top^
+||refpaikgai.top^
+||refpaiozdg.top^
+||refpaiwqkk.top^
+||refpamjeql.top^
+||refpanglbvyd.top^
+||refpasrasw.world^
+||refraintupaiid.com^
+||refreshinghike.com^
+||refreshingtold.com^
+||refreshmentdistrustinstalled.com^
+||refreshmentprivilegedaspen.com^
+||refreshmentsdefect.com^
+||refreshmentswilfulswollen.com^
+||refreshmentwaltzimmoderate.com^
+||refrigeratemaimbrunette.com^
+||refrigeratespinsterreins.com^
+||refugedcuber.com^
+||refulgecomsat.com^
+||refundsreisner.life^
+||refusedfellow.com^
+||refuserates.com^
+||refutationtiptoe.com^
+||regadsacademy.com^
+||regadspro.com^
+||regadsworld.com^
+||regainthong.com^
+||regardianpleast.site^
+||regardingpectoralcollapse.com^
+||regardlydiaoddly.com^
+||regath.com^
+||regaveskeo.com^
+||reggierander.com^
+||regimehabitwarfare.com^
+||regionads.ru^
+||regionaladversarylight.com^
+||regionalaplentysome.com^
+||regionalsurveying.com^
+||regionalyesterdayreign.com^
+||regioncolonel.com^
+||regioninaudibleafforded.com^
+||registercanoeinvaded.com^
+||registercherryheadquarter.com^
+||regizm.com^
+||reglazetentie.com^
+||reglowsupbar.com^
+||regmacimbia.com^
+||regnumyelp.digital^
+||regott.com^
+||regretfactor.com^
+||regretfulfaultsabound.com^
+||regrettablemorallycommitment.com^
+||regrettabletoken.com^
+||regrowsmudless.com^
+||regrupontihe.com^
+||reguid.com^
+||regularinstructgorilla.com^
+||regulationexpenditure.com^
+||regulationprivilegescan.top^
+||regulationstudents.com^
+||regulushamal.top^
+||regume.com^
+||rehanggepoun.space^
+||rehealfilao.com^
+||rehearsepouredhysteria.com^
+||rehonorflyoff.com^
+||rehvbghwe.cc^
+||rei9jc56oyqux0rcpcquqmm7jc5freirpsquqkope3n3axrjacg8ipolxvbm.codes^
+||reichelcormier.bid^
+||reignprofessionally.com^
+||reindaks.com^
+||reinstandpointdumbest.com^
+||reitbokgona.com^
+||reivereme.com^
+||rejco2.store^
+||rejco3.site^
+||rejoineddivertoverwork.com^
+||rejslaq.com^
+||rekfubzli.com^
+||rekipion.com^
+||reklamko.pro^
+||reklamz.com^
+||reknowfirbolg.com^
+||relappro.com^
+||relateimpulse.com^
+||relatelocateapology.com^
+||relatf.com^
+||relationsquiver.com^
+||relativefraudulentprop.com^
+||relativelyweptcurls.com^
+||relativewheneverhoe.com^
+||relatumrorid.com^
+||relaxespawner.space^
+||relaxkubera.tech^
+||relaxtime24.biz^
+||relaycommodity.com^
+||releasedgrievedeye.com^
+||releasedrespiration.com^
+||releasedverge.com^
+||releivovires.com^
+||releph.com^
+||relept.com^
+||relestar.com^
+||relevanti.com^
+||reliable-watch.pro^
+||reliableceaseswat.com^
+||reliablemiraculouscaleb.com^
+||reliablemore.com^
+||reliableorientdelirium.com^
+||reliantstacklaugh.com^
+||reliefindividual.com^
+||relievedgeoff.com^
+||relishcoincidencehandbag.com^
+||relivesternar.com^
+||relkconka.com^
+||reloadsusa.com^
+||relostmorions.uno^
+||reluctancefleck.com^
+||reluctanceleatheroptional.com^
+||reluctantconfuse.com^
+||reluctantyankpairs.com^
+||relumedbiaxial.com^
+||reluraun.com^
+||remaincall.com^
+||remainingshook.com^
+||remainttalenty.site^
+||remarkable-assistant.pro^
+||remarkablehorizontallywaiter.com^
+||remarkinspector.com^
+||remaysky.com^
+||remedyabruptness.com^
+||remembercompetitioninexplicable.com^
+||rememberdeterminedmerger.com^
+||remennoam.top^
+||remexpeeks.com^
+||remfcekactfad.com^
+||remher.com^
+||reminderdate.com^
+||reminews.com^
+||remintrex.com^
+||remipedembosk.com^
+||remnas.com^
+||remorsefulindependence.com^
+||remotelyoccasionallyfacing.com^
+||remotequeen.pro^
+||removedispel.com^
+||renaissancewednesday.com^
+||renamedineffective.com^
+||rencontreadultere.club^
+||rencontresparis2015.com^
+||rendfy.com^
+||rendimportinaugurate.com^
+||renewalsuspiciousrattle.com^
+||rennscanmag.com^
+||renomeeguze.com^
+||renormaliseras.xyz^
+||renownsimultaneouslyunresolved.com^
+||rentalrebuild.com^
+||rentherifiskin.com^
+||rentingimmoderatereflecting.com^
+||reople.co.kr^
+||reoreexpresi.com^
+||reoreexpresi.xyz^
+||reotiedygrf.xyz^
+||repairedentrailstangle.com^
+||repaul.com^
+||repayrotten.com^
+||repealamintor.com^
+||repeatresolve.com^
+||repellentcenturiespersevere.com^
+||repellentremainingsly.com^
+||repentancematernity.com^
+||repentant-plant.pro^
+||repentantsympathy.com^
+||repentbits.com^
+||repercussionspoonsbuiltin.com^
+||repetitioustaint.com^
+||rephaseeg.com^
+||replacebarhandkerchief.com^
+||replacementreluctance.com^
+||replacestuntissue.com^
+||replase.cf^
+||replicafixedly.com^
+||replif.com^
+||replynasal.com^
+||repointdunlap.website^
+||reporo.net^
+||report1.biz^
+||reporthenveri.com^
+||reposegranulatedcontinually.com^
+||reposemarshknot.com^
+||reposesyaffil.live^
+||reprak.com^
+||reprea.com^
+||reprenebritical.org^
+||representrollerpurposely.com^
+||reprintforensicjesus.com^
+||reprintvariousecho.com^
+||reproductiontape.com^
+||reproofdiningiris.com^
+||reprovems.com^
+||repruggob.com^
+||repsrowedpay.com^
+||reptfe.com^
+||reptileineffectivebackup.com^
+||reptileseller.com^
+||republichuntprimary.com^
+||republicunableappellation.com^
+||republicusefulclothe.com^
+||repulsehandbagperspective.com^
+||reputationsheriffkenneth.com^
+||reqdfit.com^
+||reqdleucine.com^
+||requac.com^
+||requentlyfths.club^
+||requestvillagedeplorable.com^
+||requinabby.guru^
+||requizmispled.com^
+||requotehocker.com^
+||rerackbirma.com^
+||rereddit.com^
+||rergeema.com^
+||reroplittrewheck.pro^
+||rerpartmentm.info^
+||reryn2ce.com^
+||resailsgyse.com^
+||resalag.com^
+||resalesruths.tech^
+||resaveyobbo.com^
+||rescuephrase.com^
+||researchers.pw^
+||researchingcompromiseuncertain.com^
+||resemblanceilluminatedcigarettes.com^
+||resentfulelsewherethoroughfare.com^
+||reservedwantrealistic.com^
+||reservehearingmissing.com^
+||reservesagacious.com^
+||resesmyinteukr.info^
+||resetamobil.com^
+||resetenhancementsillegal.com^
+||resetoccultkeeper.com^
+||resetselected.com^
+||resharekobolds.top^
+||reshuntyanan.com^
+||residelikingminister.com^
+||residenceseeingstanding.com^
+||residentshove.com^
+||resigndictationhorns.com^
+||resignedsauna.com^
+||resilesfuriant.guru^
+||resinherjecling.com^
+||resinyanthdia.com^
+||resistcorrectly.com^
+||resistsarcasm.com^
+||resistshy.com^
+||resizerlooch.com^
+||resnaulum.com^
+||resniks.pro^
+||resnikscdn.pro^
+||resnubdreich.com^
+||resoilaldea.digital^
+||resolutionmilestone.com^
+||resolvedalarmmelodramatic.com^
+||reson8.com^
+||resonance.pk^
+||resourcechasing.com^
+||resourceisabellareligious.com^
+||resourcescleopatra.com^
+||respectablecharacteristicrider.com^
+||respectableinjurefortunate.com^
+||respectivewalrus.com^
+||respectlodgingfoil.com^
+||respectseizure.com^
+||respireyowl.digital^
+||respondenemy.com^
+||responservbzh.icu^
+||responserver.com^
+||responsible-proposal.pro^
+||responsidejo.xyz^
+||responsiveproportion.com^
+||responsiverender.com^
+||restartburgerremembrance.com^
+||restauranthedwig.com^
+||resteepmucedin.digital^
+||restights.pro^
+||restlessconsequence.com^
+||restlessfreelance.com^
+||restlesssunshine.com^
+||restorationpencil.com^
+||restorehealingflee.com^
+||restrictioncheekgarlic.com^
+||restrictionsempty.com^
+||restroomcalf.com^
+||resulf.com^
+||resultlinks.com^
+||resultsz.com^
+||resumeconcurrence.com^
+||resuncouncil.com^
+||reswimmouldy.uno^
+||retagro.com^
+||retardpreparationsalways.com^
+||retardstocks.com^
+||retarearabica.life^
+||retarget2core.com^
+||retargetcore.com^
+||retargeter.com^
+||retentrhason.com^
+||reth45dq.de^
+||rethinkwrinkle.com^
+||rethowilmari.com^
+||reticencecarefully.com^
+||retinaebiaxal.guru^
+||retinaspealer.com^
+||retinuedisposablerecuperate.com^
+||retinuegigoh.com^
+||retionattings.xyz^
+||retipwrested.com^
+||retireblotch.com^
+||retiredfermentgenuine.com^
+||retiremely.com^
+||retiringmartialaunt.com^
+||retiringspamformed.com^
+||retoldcocama.com^
+||retono42.us^
+||retoxo.com^
+||retreatregular.com^
+||retrievalterminalcourse.com^
+||retrievalvariedbudge.com^
+||retrievebuoyancy.com^
+||retrosshowily.com^
+||retryngs.com^
+||retuckisobars.com^
+||returnautomaticallyrock.com^
+||returt.com^
+||retvjdkolpdals.com^
+||reuded.com^
+||reudoh.com^
+||reunitedtune.com^
+||rev-stripe.com^
+||rev2pub.com^
+||rev4rtb.com^
+||revampcdn.com^
+||revcontent.com^
+||revdepo.com^
+||revelationneighbourly.com^
+||revenue.com^
+||revenuebosom.com^
+||revenueclamp.com^
+||revenuecpmnetwork.com^
+||revenuehits.com^
+||revenuemantra.com^
+||revenuenetwork.com^
+||revenuenetworkcpm.com^
+||revenuestripe.com^
+||revenuevids.com^
+||reverbstuffing.com^
+||reversehunchet.com^
+||reversionhubbypole.com^
+||revertterm.com^
+||reverysteno.com^
+||revetothummin.website^
+||revfusion.net^
+||reviewunjust.com^
+||revigorspiered.com^
+||revimedia.com^
+||revincenizam.com^
+||revisionplatoonhusband.com^
+||revivestar.com^
+||revlt.be^
+||revmob.com^
+||revoirdyingly.digital^
+||revokepolygraph.com^
+||revoketypes.com^
+||revoltelfwife.life^
+||revolutionbeseech.com^
+||revolutionpersuasive.com^
+||revolvemockerycopper.com^
+||revolveoppress.com^
+||revopush.com^
+||revresponse.com^
+||revrtb.com^
+||revrtb.net^
+||revsci.net^
+||revsolder.com^
+||revstripe.com^
+||revulsiondeportvague.com^
+||revulsionwash.com^
+||revupads.com^
+||rewarding-design.pro^
+||rewardingindependentvisit.shop^
+||rewardrush.life^
+||rewardsaffiliates.com^
+||rewashwudu.com^
+||rewordsbrogh.life^
+||rewriteshamerefuge.com^
+||rewwlzjmj.com^
+||rexadvert.xyz^
+||rexbucks.com^
+||rexsrv.com^
+||reykijnoac.com^
+||reynoldcotutor.com^
+||reypelis.tv^
+||reyswrloef.xyz^
+||rfdfgourgoldpiec.info^
+||rfhddwa.com^
+||rfihub.com^
+||rfihub.net^
+||rfimzurarqk.com^
+||rfity.com^
+||rfixitrwa.com^
+||rfmjcnramsw.com^
+||rftslb.com^
+||rgbvncnqzlvwr.com^
+||rgcxmzrmcvbxem.com^
+||rgentssep.xyz^
+||rgjlpgkzagf.com^
+||rglxzqlqcp.com^
+||rglymepfbvdeb.xyz^
+||rgrd.xyz^
+||rgtcqif.com^
+||rgtqgsgwkopgnf.com^
+||rguxbwbj.xyz^
+||rgvqcsxqge.com^
+||rhemistdimyary.tech^
+||rhendam.com^
+||rhesusvitrite.com^
+||rhjcnfypo.com^
+||rhkaljxsxlxn.xyz^
+||rhkyufodw8ochdr3ogsite.com^
+||rhldcmsheqhci.com^
+||rhoecusteased.life^
+||rhombicsomeday.com^
+||rhubarbraise.com^
+||rhudsplm.com^
+||rhufmdelxa.com^
+||rhungs.com^
+||rhvdsplm.com^
+||rhxdsplm.com^
+||rhymerhaysel.guru^
+||rhythmmassacre.com^
+||rhythmxchange.com^
+||rhytic.com^
+||ribbondoorbell.com^
+||ribqpiocnzc.com^
+||ribsaiji.com^
+||ribumpin.com^
+||ribunews.com^
+||ribworkstylus.com^
+||ric-ric-rum.com^
+||ricead.com^
+||ricerets.top^
+||ricettadellanonna.com^
+||ricewaterhou.xyz^
+||richcatis.com^
+||richensapient.top^
+||richersitfast.life^
+||richinfo.co^
+||richtwist.com^
+||richwebmedia.com^
+||rickerrotal.com^
+||ricted.com^
+||rictritor.com^
+||riddenyapocks.com^
+||ridfunnyassuredness.com^
+||ridgephysique.com^
+||ridgescrapstadium.com^
+||ridiculousatta.xyz^
+||ridseechiph.com^
+||ridsilry.net^
+||riffsablaze.uno^
+||rifice.com^
+||riftindexesyourself.com^
+||rigelbetelgeuse.top^
+||rigfoxcup.site^
+||rightenedetu.site^
+||rightfuldisintegrate.com^
+||rightfulheadstone.com^
+||rightfullyrosyvalve.com^
+||rightlydunggive.com^
+||rightlytendertrack.com^
+||rightsapphiresand.info^
+||rightypulverizetea.com^
+||rigiddepth.com^
+||rigidpenholderintelligence.com^
+||rigies.com^
+||rigill.com^
+||rigorousoxidenovelty.com^
+||rigryvusfyu.xyz^
+||rijmfqzckx.com^
+||rikehemanwho.com^
+||rileclothingtweak.com^
+||rilelogicbuy.com^
+||riletechnicality.com^
+||riluaneth.com^
+||rimediapush.com^
+||rimefatling.com^
+||rimersarcler.life^
+||rimeseized.com^
+||rimfranklyscaffold.com^
+||riminghoggoofy.com^
+||rimwigckagz.com^
+||rinceaskedase.com^
+||rindingreb.ru^
+||ringairs.xyz^
+||ringedtusher.com^
+||ringexpressbeach.com^
+||ringsempty.com^
+||ringtonepartner.com^
+||rinserbefore.com^
+||rinsermouton.space^
+||rinsouxy.com^
+||rioqjqqqbahrs.com^
+||riotousgrit.com^
+||riotousunspeakablestreet.com^
+||riowrite.com^
+||ripeharassingof.com^
+||ripelyhanif.top^
+||riperfienwa.com^
+||ripevibratevilla.com^
+||riponztulc.com^
+||ripplead.com^
+||rippleretardfellowship.com^
+||ripsawssalud.life^
+||ripvariation.com^
+||risausso.com^
+||riscati.com^
+||risebeigehelium.com^
+||risentimaddress.com^
+||riskelaborate.com^
+||risode.com^
+||ritechimerasanctify.com^
+||riteseated.com^
+||rivatedqualizebruisi.info^
+||riverhit.com^
+||riverhita.com^
+||riverpush.com^
+||rivetrearrange.com^
+||rivne.space^
+||rixaka.com^
+||rjhiomohthqr.com^
+||rjw4obbw.com^
+||rjwhuxgjjm.com^
+||rkajleihgyidsu.com^
+||rkalbwupipuow.xyz^
+||rkfodhkxmf.com^
+||rkgwzfwjgk.com^
+||rkjnazpgfihz.com^
+||rkomf.com^
+||rkwithcatuk.org^
+||rlaa.xyz^
+||rlcdn.com^
+||rldfgcehgh.com^
+||rldwideorganizat.org^
+||rlfqwlstxhq.xyz^
+||rlittleboywhowas.com^
+||rlivhtenqapsew.com^
+||rliwkyil.com^
+||rljybcormiv.com^
+||rlomivunesqal.com^
+||rlrekuaonqt.com^
+||rlsspiuyx.com^
+||rlvvakyuipqbl.com^
+||rlwiupbqn.com^
+||rmanentsyshru.com^
+||rmaticalacycurated.info^
+||rmbmsqtryo.com^
+||rmbn.net^
+||rmgfulosqmlcly.com^
+||rmgserving.com^
+||rmhfrtnd.com^
+||rmhptjwikttv.com^
+||rmixfgusqoc.com^
+||rmmyqc.com^
+||rmndme.com^
+||rmrtgsheui.com^
+||rmxads.com^
+||rnanlxfa.com^
+||rnatic.com^
+||rnbers.com^
+||rndchandelureon.com^
+||rndhaunteran.com^
+||rndmusharnar.com^
+||rndskittytor.com^
+||rneroftheparlor.com^
+||rnfwyvgoxu.com^
+||rnldustal.com^
+||rnmd.net^
+||rnmentsecon.xyz^
+||rnoddenkn.asia^
+||rnotraff.com^
+||rnqjfeuwrvd.com^
+||rnv.life^
+||rnvlkhahv.com^
+||roabmyrevngqqk.com^
+||roachoavi.com^
+||roadmappenal.com^
+||roadoati.xyz^
+||roakicat.net^
+||roambedroom.com^
+||roastoup.com^
+||roataisa.net^
+||robberyinscription.com^
+||robberysordid.com^
+||robbindoer.digital^
+||robescampus.com^
+||robflea.com^
+||robindefensivedancing.com^
+||robotadserver.com^
+||robsardri.com^
+||robsbogsrouse.com^
+||robsedgeone.com^
+||robsedgeone.xyz^
+||robspabah.com^
+||robunderstanding.com^
+||rocco-fvo.com^
+||rocept.com^
+||rochesterbranchessniffing.com^
+||rockabykeened.top^
+||rockdriller.top^
+||rocketdashedjoining.com^
+||rocketme.top^
+||rocketplaintiff.com^
+||rocketyield.com^
+||rockfellertest.com^
+||rockmostbet.com^
+||rockyou.net^
+||rocobo.uno^
+||rocoloagrotis.fun^
+||rodaimlessale.com^
+||rodderacetose.store^
+||roddinmucial.xyz^
+||rodejessie.com^
+||rodentscommise.life^
+||rodirgix.com^
+||rodisons.site^
+||rodrergi.com^
+||rodroord.net^
+||roduster.com^
+||roebuckwagged.com^
+||roelikewimpler.com^
+||roemoss.com^
+||rof77skt5zo0.com^
+||rofant.com^
+||rog4.com^
+||roiapp.net^
+||roikingdom.com^
+||roilsnadirink.com^
+||roinduk.com^
+||roiughttohimhe.xyz^
+||rokreeza.com^
+||rollbackhear.com^
+||rollbaralit.com^
+||rollerdisrespect.com^
+||rollerstrayprawn.com^
+||rollmeout.xyz^
+||rollobscurewoke.com^
+||rollserver.xyz^
+||rolltrafficroll.com^
+||romance-net.com^
+||romancemind.com^
+||romaninformcompensate.com^
+||romanlicdate.com^
+||romansatma.com^
+||romanticmanufacture.com^
+||romanticwait.com^
+||romashk9arfk10.com^
+||romauntmirker.com^
+||romeekra.xyz^
+||romepoptahul.com^
+||romivapsi.com^
+||rompercava.com^
+||rompishvariola.com^
+||rompuwit.net^
+||ronatorda.com^
+||ronionbiretta.space^
+||ronrecheclo.com^
+||ronrecheclo.xyz^
+||roofprison.com^
+||rookiewhiskey.com^
+||rookinews.com^
+||rookmemorizevoluntary.com^
+||rookretired.com^
+||rooksreused.website^
+||roolgage.com^
+||roommateskinner.com^
+||roomrentpast.com^
+||roonanon.space^
+||rooofkhtgiaog.com^
+||rooptuph.xyz^
+||roosteem.net^
+||rootzaffiliates.com^
+||ropeanresu.com^
+||ropedsawwort.com^
+||ropemoon.com^
+||ropesunfamiliar.com^
+||roqiwno.com^
+||rordukinarilyhuke.info^
+||roredi.com^
+||roriba.uno^
+||roripagrolier.com^
+||rorserdy.com^
+||rosafun.com^
+||roscoehanafi.com^
+||rosebrandy.com^
+||rosebudemphasizelesson.com^
+||rosebudspeaks.com^
+||rosebudspurarmies.com^
+||rosellarecover.website^
+||rosemessengeryuri.com^
+||rosolicdalapon.com^
+||rosteldicycle.cam^
+||rosterphyllin.guru^
+||rosyruffian.com^
+||rotabol.com^
+||rotapsey.net^
+||rotarb.bid^
+||rotate1t.com^
+||rotate4all.com^
+||rotateme.ru^
+||rotatemysoft.ru^
+||rotateportion.com^
+||rotdie.com^
+||rotdubboy.com^
+||rothermophony.com^
+||rotondahogs.com^
+||rotumal.com^
+||rotundfetch.com^
+||roucoutaivers.com^
+||roudoduor.com^
+||rough-requirement.pro^
+||roughseaside.com^
+||rouinfernapean.com^
+||roujonoa.net^
+||roulediana.com^
+||roumakie.com^
+||rounca.com^
+||rouncepreyful.com^
+||round-highlight.pro^
+||roundflow.net^
+||roundlytrabal.cfd^
+||roundspaniardindefinitely.com^
+||rouonixon.com^
+||roupedaldea.com^
+||roupsoglil.com^
+||rouseindecentworth.com^
+||roushath.xyz^
+||route66.quest^
+||routeit.one^
+||routeme.one^
+||routemob.com^
+||routemomentarilydiscovering.com^
+||routerhydrula.com^
+||routes.name^
+||routeserve.info^
+||routierbefit.space^
+||routingnaias.com^
+||rouvoute.net^
+||rouwhapt.com^
+||rovion.com^
+||rovno.xyz^
+||rowansportstriped.com^
+||rowdiersnary.uno^
+||rowdyrope.pro^
+||rowfeedire.casa^
+||rowingzipper.com^
+||rowlnk.com^
+||rowoardog.com^
+||rowplates.com^
+||rowthsti.com^
+||roxby.org^
+||roxot-panel.com^
+||roxyaffiliates.com^
+||royalcactus.com^
+||royallycuprene.com^
+||rozamimo9za10.com^
+||rpawarcnm.com^
+||rpmsophiashoe.com^
+||rpmwhoop.com^
+||rprinc6etodn9kunjiv.com^
+||rpsoybm.com^
+||rpts.org^
+||rpzbfftekjdz.com^
+||rqakljxbs.com^
+||rqctubqtcbgeug.com^
+||rqdcusltmryapg.com^
+||rqfedjzveel.com^
+||rqgjvcea.com^
+||rqhere.com^
+||rqnomljdot.xyz^
+||rqnvci.com^
+||rqpcgvey.com^
+||rqtrk.eu^
+||rqvahauofbdg.com^
+||rqwel.com^
+||rreauksofthecom.xyz^
+||rrentlysearchi.info^
+||rrfolvppqeg.com^
+||rriedstronugos.xyz^
+||rrisysixhdihen.com^
+||rrjnjnioxfbqaj.com^
+||rrolqae.com^
+||rronsep.com^
+||rrqpajlyvtpqst.com^
+||rrtwda9.com^
+||rrvwvcgnsu.xyz^
+||rrwmyijgm.com^
+||rs-stripe.com^
+||rsalcau.com^
+||rsalcch.com^
+||rsaltsjt.com^
+||rsnjmocfenkewq.com^
+||rsntcgoowyxsu.com^
+||rsodmwkxkioj.xyz^
+||rssrqecohagbk.xyz^
+||rsthwwqhxef.xyz^
+||rsxocgqnu.com^
+||rszimg.com^
+||rszqtry.cn^
+||rtb-media.me^
+||rtb.com.ru^
+||rtb1bid.com^
+||rtbbnr.com^
+||rtbbnrdip.com^
+||rtbdnav.com^
+||rtbfit.com^
+||rtbget.com^
+||rtbidder.net^
+||rtbix.com^
+||rtbldisubeignb.com^
+||rtblmh.com^
+||rtbnowads.com^
+||rtbpop.com^
+||rtbpopd.com^
+||rtbrenab.com^
+||rtbrennab.com^
+||rtbstream.com^
+||rtbsuperhub.com^
+||rtbsystem.com^
+||rtbsystem.org^
+||rtbterra.com^
+||rtbtracking.com^
+||rtbtraffic.com^
+||rtbtrail.com^
+||rtbxnmhub.com^
+||rtbxnmlive.com^
+||rtclx.com^
+||rtfmakw.com^
+||rtistictastes.info^
+||rtk.io^
+||rtmark.net^
+||rtmladnew.com^
+||rtncskottpfwb.com^
+||rtnews.pro^
+||rtorvhhdru.xyz^
+||rtoukfareputfe.info^
+||rtpdn11.com^
+||rtpdn12.com^
+||rtphit.com^
+||rtpnt.xyz^
+||rtqkaxnpnfqwim.com^
+||rtrgt.com^
+||rtrgt2.com^
+||rtrhit.com^
+||rtty.in^
+||rtwdzxstpanmn.com^
+||rtxbdugpeumpmye.xyz^
+||rtxrtb.com^
+||rtyufo.com^
+||rtyznd.com^
+||rtzblzfgzqw.com^
+||ru6sapasgs8tror.com^
+||ruamupr.com^
+||rubatowooer.digital^
+||rubfastened.com^
+||rubiconproject.com^
+||rubstove.com^
+||rubyblu.com^
+||rubyforcedprovidence.com^
+||rubymillsnpro.com^
+||ruckletawpy.com^
+||rudderaxis.com^
+||ruddledcrucian.uno^
+||ruddy-option.pro^
+||ruddyred.pro^
+||rudemembership.pro^
+||rudemend.com^
+||rudimentarydelay.com^
+||rudimentarynuisancesynchronize.com^
+||rudzz.com^
+||rufadses.net^
+||rufflycouncil.com^
+||ruftodru.net^
+||rugaetieback.com^
+||rugiomyh2vmr.com^
+||rugnullsspecimens.com^
+||ruineddefectivecurb.com^
+||ruinedpenal.com^
+||rukoval.com^
+||rulingcaviarreliance.com^
+||rulovar.com^
+||rulroagh.xyz^
+||rumandwaterv.info^
+||rumblyjouking.store^
+||rumimorigu.com^
+||rumlesswithing.com^
+||rummagemason.com^
+||rummilycavils.com^
+||rummovehell.live^
+||rummyaffiliates.com^
+||run-syndicate.com^
+||runadtag.com^
+||runative-syndicate.com^
+||runative.com^
+||runawayaccomplishment.com^
+||runawaycrayfishcosmetics.com^
+||runazmakqja.com^
+||runbornto.com^
+||rundownhang.pro^
+||runecrispin.com^
+||runesmith.top^
+||runetki.co^
+||runicmaster.top^
+||runmixed.com^
+||runningangular.com^
+||runningdestructioncleanliness.com^
+||runnyestablishment.pro^
+||runnypage.pro^
+||runsclothingpig.com^
+||runtedforcut.com^
+||runtnc.net^
+||runwaff.com^
+||ruozukk.xyz^
+||ruperparverew.xyz^
+||ruptionverst.space^
+||rural-patience.com^
+||rural-report.pro^
+||rurate.com^
+||rurber.com^
+||rurbie.com^
+||rurdauth.net^
+||ruruluteoma.space^
+||rusenov.com^
+||rusheemeso.digital^
+||rushendroopt.uno^
+||rushpushy.com^
+||russellseemslept.com^
+||russianballoons.com^
+||russiaroman.com^
+||russif.com^
+||rustgenerations.com^
+||rusticaula.com^
+||rusticsnoop.com^
+||rusticswollenbelonged.com^
+||rustydeceasedwe.com^
+||rustyretails.com^
+||rustytableclearance.com^
+||ruthlessegyptbehalf.com^
+||ruthproudlyquest.com^
+||ruthrequire.com^
+||rutpunishsnitch.com^
+||ruutjhlmv.com^
+||ruuwkftrtegqj.com^
+||ruwertur.com^
+||ruwookri.xyz^
+||ruykjvdtutselj.com^
+||rvddfchkj.xyz^
+||rvioyjme.com^
+||rvltckxibcmlt.com^
+||rvmessages.top^
+||rvrpushserv.com^
+||rvrpushsrv.com^
+||rvxqnjsczubld.com^
+||rwated.com^
+||rwfnpayyn.xyz^
+||rwhgpxvoqfvv.com^
+||rwjqdbimphvg.com^
+||rwkdqtenbr.com^
+||rwtujypxp.xyz^
+||rwuannaxztux.com^
+||rwwoqcjefc.com^
+||rwzexfzoyqf.com^
+||rwzzeivpakyxql.com^
+||rxatodtvt.com^
+||rxcjedhdf.com^
+||rxeosevsso.com^
+||rxglvcowb.com^
+||rxgvwht.com^
+||rxodrcqa.com^
+||rxtazhr.com^
+||rxtgbihqbs99.com^
+||rxthdr.com^
+||ryanfrqxjl.com^
+||rydpsqdsaja.com^
+||rydresa.info^
+||ryepublisher.com^
+||rykwyoaeaamhykw.com^
+||ryminos.com^
+||rympsxilkdqywd.com^
+||ryntmyhahy.com^
+||rypqxxsx.com^
+||ryremovement.com^
+||ryretyequiremuke.info^
+||rysheatlengthani.com.ua^
+||rysheatlengthanl.xyz^
+||ryyyyjfrawo.com^
+||rzaxroziwozq.com^
+||rzkphskfifmo.com^
+||rzneekilff.com^
+||rzwhlgvzny.com^
+||rzyosrlajku.com^
+||rzzqhhoim.com^
+||s-adzone.com^
+||s0cool.net^
+||s19mediabq.com^
+||s1cta.com^
+||s1m4nohq.de^
+||s1t2uuenhsfs.com^
+||s20dh7e9dh.com^
+||s24hc8xzag.com^
+||s2blosh.com^
+||s2d6.com^
+||s2sterra.com^
+||s3cp.xyz^
+||s3pe5ye7ri8a.com^
+||s4cp.xyz^
+||s4elk8ir1exrkc.com^
+||s5ikadi.fun^
+||s83ovp6qyhco.com^
+||s99i.org^
+||sa.entireweb.com^
+||sa2m4buc5us.com^
+||saatwitted.com^
+||sabaothamsonia.com^
+||sabbedgurly.com^
+||sabergood.com^
+||sabianic.com^
+||sabotageharass.com^
+||sabredwillble.com^
+||sabrinacaulked.com^
+||sacquebenzine.com^
+||sacralcabaa.com^
+||sacrawasat.store^
+||sacredperpetratorbasketball.com^
+||sacrificeaffliction.com^
+||sacrip.com^
+||sadbasindinner.com^
+||sadflannel.com^
+||sadjklq.com^
+||sadjune.com^
+||sadorsagreeng.com^
+||sadrettinnow.com^
+||sadsecs.com^
+||sadsoulo.net^
+||sadtriggerssupporter.com^
+||saemmvhnn.xyz^
+||safarlysins.com^
+||safe-connection21.com^
+||safeart.pro^
+||safeattributeexcept.com^
+||safebrowsdv.com^
+||safeclatter.com^
+||safeconspiracy.com^
+||safeguardconform.com^
+||safeguardoperating.com^
+||safelinkconverter.com^
+||safelistextreme.com^
+||safelyaffirminexperienced.com^
+||safelyawake.com^
+||safeporno.com^
+||safereboundmiracle.com^
+||safestcontentgate.com^
+||safestfinestdisgusting.com^
+||safestgatetocontent.com^
+||safestsniffingconfessed.com^
+||safesync.com^
+||safetypcchain.com^
+||safetytds.com^
+||safewarns.com^
+||saffianxenian.com^
+||sagbutsbhotia.com^
+||sagedeportflorist.com^
+||saggarmammon.com^
+||saggrowledetc.com^
+||sagonoll.com^
+||sagrew.com^
+||sagroagh.com^
+||sahandkeightg.xyz^
+||saheckas.xyz^
+||saiceezu.xyz^
+||saidflightmusician.com^
+||saikeela.net^
+||sailcovertend.com^
+||sailif.com^
+||sailingmineral.com^
+||sailorandmoist.com^
+||sailundu.xyz^
+||saimifoa.net^
+||saininglcm.live^
+||sainingnuggar.guru^
+||saishait.net^
+||saiwecee.com^
+||saiwhoal.xyz^
+||saiwhute.com^
+||sakeoxidelunch.com^
+||saktismberakes.space^
+||sakulyavoluspa.tech^
+||sakura-traffic.com^
+||salablyjagless.uno^
+||salamus1.lol^
+||salaxe.com^
+||salepsthiever.digital^
+||sales1sales.com^
+||salestingoner.org^
+||salivanmobster.com^
+||salletspluvian.com^
+||sallyfundamental.com^
+||sallyoxenstops.com^
+||salsadistune.digital^
+||salshissed.com^
+||saltantpipped.live^
+||saltateblit.com^
+||saltpairwoo.live^
+||salutationcheerlessdemote.com^
+||salutationdove.com^
+||salvingrolls.com^
+||salwaysesureto.info^
+||samage-bility.icu^
+||samaniclucked.com^
+||samealliedgunfire.com^
+||samelagura.uno^
+||sameplace.lol^
+||samghasps.com^
+||samhitareviser.com^
+||samogonmarvy.com^
+||samplerenamed.com^
+||samplerpouch.com^
+||sampoang.xyz^
+||samsienshrivel.com^
+||samsungads.com^
+||samtugli.net^
+||samvaulter.com^
+||samvinva.info^
+||sancontr.com^
+||sandcomemunicat.info^
+||sandelf.com^
+||sandflyligules.com^
+||sandhiswiggish.top^
+||sandyconference.com^
+||sanfordcessor.space^
+||sangeiunzen.com^
+||sanggilregard.com^
+||sangogne.com^
+||sanhitaamerce.uno^
+||sanjibbraggy.uno^
+||sankaudacityrefine.com^
+||sankjerusalemflabbergasted.com^
+||sannupsendysis.uno^
+||sansuni.xyz^
+||santonpardal.com^
+||santosfeltmanager.com^
+||santosmiddle.com^
+||sapdealtsalary.com^
+||sapduwmm.com^
+||sapfollower.com^
+||sapiaostremma.com^
+||sapsixysho.pro^
+||saptiledispatch.com^
+||saptorge.com^
+||sarcasmidentifiers.com^
+||sarcasticdismalconstrue.com^
+||sarcineamender.store^
+||sarcinedewlike.com^
+||sarcodrix.com^
+||sarcoma.space^
+||sardaursaz.com^
+||sardineforgiven.com^
+||sargosvalgus.com^
+||sarinfalun.com^
+||sarinjowel.com^
+||sarsaretint.com^
+||sartolutus.com^
+||sasinsetuid.com^
+||sassilybombous.casa^
+||sasujooceerg.com^
+||saszar.com^
+||satelliteexaminer.com^
+||satientclypeus.com^
+||satinelicheny.com^
+||satirevegetableshaw.com^
+||satisfactionpredictmusic.com^
+||satisfactorilybewitchgreatness.com^
+||satoripedary.com^
+||saturatecats.com^
+||saturdaymarryspill.com^
+||saub27i3os.com^
+||sauceheirloom.com^
+||saucepanassociationscale.com^
+||saucepancharms.com^
+||saugeeth.net^
+||saulaupe.net^
+||saulttrailwaysi.info^
+||saumeechoa.com^
+||saumonpipidae.com^
+||saunafortyeasy.com^
+||saunamilitarymental.com^
+||saunasisley.life^
+||saunasupposedly.com^
+||saunutha.xyz^
+||saupouni.xyz^
+||sauptoacoa.com^
+||saurug.com^
+||savagelydestroyed.com^
+||savagelylizard.com^
+||savaurdy.net^
+||savefromad.net^
+||savingdownrightmitten.com^
+||savingshyleg.com^
+||saviourketonic.com^
+||savourethicalmercury.com^
+||savouryadolescent.com^
+||savoyedpollet.life^
+||savtvkdny.xyz^
+||sawalinitwits.com^
+||sawanincreasein.info^
+||saweatherco.com^
+||sawfishdiapsid.com^
+||sawmontlookups.com^
+||sawmonwhomble.com^
+||saworbpox.com^
+||sawpokw.com^
+||sawsdaggly.com^
+||saxophonecharley.com^
+||saxophonefrontier.com^
+||saycaptain.com^
+||saycasksabnegation.com^
+||sayelo.xyz^
+||saylnk.com^
+||sazute.uno^
+||sb-stat1.com^
+||sb4you1.com^
+||sb89347.com^
+||sbecashqjk.com^
+||sbfsdvc.com^
+||sbonjqsxicqfo.xyz^
+||sbrakepads.com^
+||sbroiughttohi.xyz^
+||sbscrma.com^
+||sbxitxnmfxzyf.com^
+||sbxsdvwfabvx.com^
+||sbyqtugtfe.com^
+||scabtauter.uno^
+||scadsstar.com^
+||scadstech.com^
+||scaffoldoppresshaphazard.com^
+||scaffoldsense.com^
+||scalesfilamentmow.com^
+||scaleshustleprice.com^
+||scalesmothforget.com^
+||scalfebecky.digital^
+||scalledzamia.com^
+||scallionfib.com^
+||scallionterrace.com^
+||scalliontrend.com^
+||scalpmarmotproclaim.com^
+||scamblefeedman.com^
+||scammereating.com^
+||scammersupreme.com^
+||scancemontes.com^
+||scantlyvedette.com^
+||scantyjanitor.com^
+||scantyuncertainwilfrid.com^
+||scanunderstiff.com^
+||scapfloored.space^
+||scarabresearch.com^
+||scarcelyfebruarydice.com^
+||scarecrowenhancements.com^
+||scared-respond.pro^
+||scaredcollector.com^
+||scaredimmediatelyrave.com^
+||scarfcreed.com^
+||scarflaremorally.com^
+||scarletcashwi5.com^
+||scarnvesuvin.com^
+||scarofnght.com^
+||scarwan.com^
+||scashwl.com^
+||scatterdisagreeabledealer.com^
+||scavelbuntine.life^
+||scbvydod.xyz^
+||sccpnd.xyz^
+||scenbe.com^
+||scenerynatives.com^
+||scenespathreconciliation.com^
+||scenistgracy.life^
+||scentedindication.com^
+||scepticalchurch.com^
+||scfsdvc.com^
+||schavsorpines.guru^
+||schemeabsolutejanuary.com^
+||schgobesjqiwh.xyz^
+||schizypdq.com^
+||schjmp.com^
+||scholarkeyboarddoom.com^
+||scholarsquadronanoitmentanoitment.com^
+||scholiadutied.com^
+||schoolboyblinkclove.com^
+||schoolboyfingernail.com^
+||schoolboyslogan.com^
+||schoonnonform.com^
+||schqydstxtsi.com^
+||schullemony.com^
+||sciadopi5tysverticil1lata.com^
+||sciencepoints.com^
+||scientificsinner.com^
+||scientistgrowl.com^
+||sciets.com^
+||scillathemons.com^
+||sciniphruffin.com^
+||scipnd.xyz^
+||scisselfungus.com^
+||scissorsaccordancedreamt.com^
+||scissorwailed.com^
+||scjhnjvlyd.com^
+||scl6gc5l.site^
+||scnd-tr.com^
+||scoggerashrams.com^
+||sconceszeugite.com^
+||sconvtrk.com^
+||scootermonkmortify.com^
+||score-feed.com^
+||scoredconnect.com^
+||scoreheadingbabysitting.com^
+||scorklegucki.com^
+||scornfulabsorbploy.com^
+||scotcheliza.com^
+||scoureroutcry.cam^
+||scousepneuma.com^
+||scoutdealingdrift.com^
+||scowmantubba.cfd^
+||scowpoppanasals.com^
+||scptp1.com^
+||scptpx.com^
+||scpxth.xyz^
+||scrankysickish.life^
+||scrapebust.com^
+||scratchy-deep.pro^
+||scratchy-kind.pro^
+||scrawny-pipe.com^
+||scrawnyarticle.pro^
+||scrazeunwaged.com^
+||screechadulthood.com^
+||screechdonationshowed.com^
+||screenov.site^
+||scribblemidday.com^
+||scriptcdn.net^
+||scriptsfirework.com^
+||scriptvealpatronage.com^
+||scrivermoulded.life^
+||scrogrearm.com^
+||scrollisolation.com^
+||scrollye.com^
+||scrubheiress.com^
+||scruis.com^
+||scubaenterdane.com^
+||scuddedsisals.com^
+||scullerropeman.digital^
+||sculpedmanky.uno^
+||sculpturelooking.com^
+||scutesneatest.com^
+||scythealready.com^
+||scythesandwiches.com^
+||sda.seesaa.jp^
+||sda.seksohub.com^
+||sdasasyydd.com^
+||sdbvveonb1.com^
+||sddan.com^
+||sdeiqmltglx.com^
+||sdg.desihamster.pro^
+||sdg.fwtrck.com^
+||sdhfbvd.com^
+||sdhltncfqbu.com^
+||sdkfjxjertertry.com^
+||sdkl.info^
+||sdmfyqkghzedvx.com^
+||sdnygannce.com^
+||sdprsvbnj.xyz^
+||sdsttt.com^
+||se42ade5e3son7ing.com^
+||seaboblit.com^
+||seafoodclickwaited.com^
+||seafoodoutpipe.digital^
+||seafoodrunnersablative.com^
+||sealedsimplicitynoun.com^
+||sealeryshilpit.com^
+||sealerysuppler.com^
+||sealinstalment.com^
+||sealthatleak.com^
+||seamankidding.com^
+||seamloring.life^
+||seamsuddenbanish.com^
+||seaofads.com^
+||seapolo.com^
+||search-converter.com^
+||search4sports.com^
+||searchdatestoday.com^
+||searchenhancements.com^
+||searchmulty.com^
+||searchsecurer.com^
+||seasslinger.guru^
+||seatedparanoiaenslave.com^
+||seatsrehearseinitial.com^
+||seaweedswanboats.com^
+||seayipsex.com^
+||sebeewho.xyz^
+||secclhkiuj.com^
+||secezo.uno^
+||secludealcoholoverwhelm.com^
+||secondaryabjure.com^
+||secondboy.pro^
+||secondcommander.com^
+||secondlytorch.com^
+||secondquaver.com^
+||secondtrick.com^
+||secondunderminecalm.com^
+||secprf.com^
+||secrecysatisfy.com^
+||secrefurther.com^
+||secretionforbearace.com^
+||secruz.com^
+||secthatlead.com^
+||sectordisturb.com^
+||sectsenior.com^
+||secure.securitetotale.fr^
+||secureaddisplay.com^
+||secureclickers.com^
+||securecloud-dt.com^
+||securecloud-smart.com^
+||secureclouddt-cd.com^
+||secureconv-dl.com^
+||securedcdn.com^
+||securedvisit.com^
+||securegate.xyz^
+||securegate9.com^
+||securegfm.com^
+||secureleadsforever.com^
+||secureleadsrn.com^
+||securely-send.com^
+||securemoney.ru^
+||securescoundrel.com^
+||securesmrt-dt.com^
+||securesurf.biz^
+||sedatecompulsiveout.com^
+||sedatenerves.com^
+||sedatingnews.com^
+||sednerenforbo.com^
+||sedodna.com^
+||seduceobscure.com^
+||seeablywitness.com^
+||seebait.com^
+||seebecknighed.guru^
+||seedlingneurotic.com^
+||seedoupo.com^
+||seegraufah.com^
+||seehaucu.net^
+||seekoflol.com^
+||seemedgrucche.com^
+||seemoraldisobey.com^
+||seemreflexdisable.com^
+||seemyresume.org^
+||seeptoag.net^
+||seethafo.xyz^
+||seewhatmyou.com^
+||sefsdvc.com^
+||sefulheadde.info^
+||segmentcoax.com^
+||segrbdscumdk.com^
+||segrea.com^
+||segreencolumn.com^
+||seibertspart.com^
+||seismalquinela.life^
+||seisorspinkies.space^
+||seitypascola.com^
+||seizecrashsophia.com^
+||seizedlusciousextended.com^
+||seizedorientationenrich.com^
+||seizedpenholdercranny.com^
+||sekindo.com^
+||sekmxqojxcjrgjc.xyz^
+||seksoars.xyz^
+||sel-sel-fie.com^
+||selectdissert.guru^
+||selectioncarnivalrig.com^
+||selectr.net^
+||selectthrow.com^
+||selecttopoff.com^
+||selfasheode.work^
+||selfassuredcriticism.pro^
+||selfcontrolenquirytyran.com^
+||selfemployedbalconycane.com^
+||selfevidentvaccine.com^
+||selfpua.com^
+||selfpuc.com^
+||selfreliantboot.pro^
+||selfswayjay.com^
+||sellbleatregistry.com^
+||sellingtandays.com^
+||sellisteatin.com^
+||selornews.com^
+||selsattherean.xyz^
+||selunemtr.online^
+||selungdunker.website^
+||selwrite.com^
+||semblanceafford.com^
+||semicircleanalyzerequire.com^
+||semicolondeterminationfaded.com^
+||semicoloninadequacypleasantly.com^
+||semicolonrichsieve.com^
+||semifiboolongs.com^
+||semigh.com^
+||semirawbatter.com^
+||semqraso.net^
+||semsicou.net^
+||semupgrjbnlhi.com^
+||semwtaanx.xyz^
+||sendmepush.com^
+||senecaanoles.com^
+||sength.com^
+||senonsiatinus.com^
+||sensefifth.com^
+||sensematernityexcitement.com^
+||senseresound.com^
+||sensifyfugged.com^
+||sensorpluck.com^
+||sensualsheilas.com^
+||sensualsmiles.com^
+||sensualtestresume.com^
+||sentbarn.com^
+||sentdysfunctional.com^
+||sentencefigurederide.com^
+||sentenceinformedveil.com^
+||sentientfog.com^
+||sentimentalclient.pro^
+||sentimenthypocrisy.com^
+||sentimentsvarious.com^
+||senufocaviar.com^
+||seo-overview.com^
+||separashparyro.info^
+||separate-sing.pro^
+||separate-tie.pro^
+||separatecolonist.com^
+||separatelyweeping.com^
+||separatepattern.pro^
+||separationreverttap.com^
+||sephur.com^
+||sepstough.com^
+||septfd2em64eber.com^
+||sepubl.com^
+||sequelswosbird.com^
+||seqyirmgh.xyz^
+||serch26.biz^
+||serconmp.com^
+||serdaive.com^
+||sereanstanza.com^
+||serfdivia.com^
+||sergeantunhealthy.com^
+||serialwarning.com^
+||seriouslygesture.com^
+||seriy2sviter11o9.com^
+||sermondirt.com^
+||serpenspilgrim.com^
+||serpentineillegal.pro^
+||serumalkillow.com^
+||serumlisp.com^
+||serv-selectmedia.com^
+||serv01001.xyz^
+||serv1for.pro^
+||servantheadingferal.com^
+||servanttowns.com^
+||servboost.tech^
+||serve-bidder.com^
+||serve-rtb.com^
+||serve-servee.com^
+||serve-serving.com^
+||servedbyadbutler.com^
+||servedbysmart.com^
+||servehub.info^
+||servenobid.com^
+||serverbid.com^
+||serverdownload.space^
+||servereplacementcycle.com^
+||serverfritterdisability.com^
+||serversmatrixaggregation.com^
+||serverssignshigher.com^
+||servetraff.com^
+||servg1.net^
+||servicegetbook.net^
+||servicesrc.org^
+||servicetechtracker.com^
+||serving-passthrough.com^
+||serving-sys.com^
+||servingcdn.net^
+||servinghandy.com^
+||servingserved.com^
+||servtraff97.com^
+||servw.bid^
+||sesabercuacroo.xyz^
+||sesameebookspeedy.com^
+||sesamefiddlesticks.com^
+||sesoionsglear.xyz^
+||sessionamateur.com^
+||sethiteblindly.guru^
+||setitoefanyor.org^
+||setopsdata.com^
+||setsdowntown.com^
+||setsspreadenable.com^
+||settlenice.com^
+||settlepineapple.com^
+||settrogens.com^
+||setupali.shop^
+||setupdeliveredteapot.com^
+||setupslum.com^
+||setupstronghighlyinfo-file.info^
+||sev4ifmxa.com^
+||seveelumus.com^
+||sevendaystart.com^
+||sevenedgesteve.com^
+||sevenerraticpulse.com^
+||sevenpronounced.com^
+||seventhalbines.space^
+||seventybrush.com^
+||severaladjustlattice.com^
+||severalbagel.com^
+||severaljack.com^
+||severalmefa.org^
+||severegaze.com^
+||sevierxx.com^
+||sevokop.com^
+||sewbineukdwi.xyz^
+||sewersneaky.com^
+||sewmcqkulwxmrx.com^
+||sewmerecontaining.com^
+||sex-and-flirt.com^
+||sex-finder.net^
+||sexbuggishbecome.info^
+||sexclic.com^
+||sexdatingsite.pro^
+||sexeecmo.xyz^
+||sexmoney.com^
+||sexpieasure.com^
+||sextubeweb.com^
+||sexuallyminus.com^
+||sexualpitfall.com^
+||sexy-sluts.org^
+||sexyadsrun.com^
+||sexyepc.com^
+||seynatcreative.com^
+||sfafabztidi.com^
+||sfcfssgbrhnsb.com^
+||sffsdvc.com^
+||sfinwoyxjx.xyz^
+||sfixretarum.com^
+||sfkmekofps.com^
+||sforourcompa.org^
+||sfqubxdutrvpjl.xyz^
+||sfrujefjswrn.xyz^
+||sftapi.com^
+||sfultraight.xyz^
+||sfuoasztfxr.com^
+||sgeujrpxuqyzqd.com^
+||sgfdfikdguqdkv.com^
+||sgftrrs.com^
+||sgnetwork.co^
+||sgnvuowhv.com^
+||sgrupontihecliff.xyz^
+||sgunqfpjtxfndtt.com^
+||sgvdqykfjuk.com^
+||sgwsqcyhxkb.com^
+||sgzhg.pornlovo.co^
+||sh0w-me-h0w.net^
+||sh0w-me-how.com^
+||shabaiks.com^
+||shabsaco.net^
+||shackapple.com^
+||shackdialectsense.com^
+||shadesentimentssquint.com^
+||shadesincreasingcontents.com^
+||shady-addition.com^
+||shadybenefitpassed.com^
+||shadyobscene.com^
+||shaftheadstonetopmost.com^
+||shaggyaleswede.com^
+||shahebso.com^
+||shaickox.com^
+||shaidolt.com^
+||shailreeb.com^
+||shaimsaijels.com^
+||shaimsoo.net^
+||shaingempee.com^
+||shaishet.xyz^
+||shaisole.com^
+||shakamech.com^
+||shakesanitaryaffairs.com^
+||shakre.com^
+||shakydeploylofty.com^
+||shakywinningcarnival.com^
+||shaledpaidle.com^
+||shallotuncord.com^
+||shalomitll.top^
+||shalse.com^
+||shamelesscry.pro^
+||shamelessgoodwill.com^
+||shamelessmessengerdescription.com^
+||shamelessnullneutrality.com^
+||shamelesspersonality.pro^
+||shamelessspank.com^
+||shamosmatic.com^
+||shanaurg.net^
+||shanorin.com^
+||shapelcounset.xyz^
+||shapeonefoldonefoldmagistrate.com^
+||share-server.com^
+||sharecash.org^
+||sharedfragileproduced.com^
+||sharegods.com^
+||shareitpp.com^
+||shareresults.com^
+||sharesceral.uno^
+||shareweeknews.com^
+||sharieta.com^
+||sharkbiz.lol^
+||sharkflowing.com^
+||sharpofferlinks.com^
+||sharpphysicallyupcoming.com^
+||sharpsharkteeth.com^
+||sharragsferics.store^
+||shartems.com^
+||shatoawussoo.com^
+||shatterconceal.com^
+||shattermessseedling.com^
+||shaufoal.com^
+||shauhacm.net^
+||shauhaik.xyz^
+||shauksug.com^
+||shaumpem.com^
+||shaumtol.com^
+||shauptab.net^
+||shaursar.net^
+||shauwoos.com^
+||shauxeel.com^
+||shavopsi.xyz^
+||shawashygy.com^
+||shawuh2a8nyam09.com^
+||shaxegni.com^
+||shazauds.net^
+||she-want-fuck.com^
+||shealapish.com^
+||shearobserve.com^
+||sheduparton.website^
+||sheecmee.xyz^
+||sheedsoh.com^
+||sheegiwo.com^
+||sheemaus.net^
+||sheenaup.net^
+||sheengoa.com^
+||sheeptie.xyz^
+||sheerlyballute.website^
+||sheeroop.com^
+||sheertep.net^
+||sheethoneymoon.com^
+||sheetvibe.com^
+||sheglach.net^
+||shehikj.com^
+||shelfoka.com^
+||shellypartile.com^
+||shemalesofhentai.com^
+||shenouth.com^
+||shenzo.xyz^
+||shepeekr.net^
+||shereeflivish.com^
+||sheschemetraitor.com^
+||shexawhy.net^
+||shfewojrmxpy.xyz^
+||shfsdvc.com^
+||shhbrjs.com^
+||shhchack.digital^
+||shiaflsteaw.com^
+||shidn.com^
+||shieldof5adam.com^
+||shiftclang.com^
+||shifthare.com^
+||shihewoo.com^
+||shijoorg.xyz^
+||shikmousy.com^
+||shikroux.net^
+||shimmedlocated.com^
+||shimmering-novel.pro^
+||shimmeringconcert.com^
+||shinasi.info^
+||shindyprayhrs.com^
+||shinebliss.com^
+||shineinternalindolent.com^
+||shinenike.digital^
+||shinglelatitude.com^
+||shinyspiesyou.com^
+||shippingswimsuitflog.com^
+||shipsmotorw.xyz^
+||shirrschalla.top^
+||shisnwatcher.digital^
+||shitcustody.com^
+||shitucka.net^
+||shivateicher.com^
+||shlyapajhd2kle8pnc09.com^
+||shoabsie.xyz^
+||shoageep.com^
+||shoagooy.net^
+||shoaltor.com^
+||shoawhom.com^
+||shockadviceinsult.com^
+||shockeddump.pro^
+||shocking-design.pro^
+||shockingstrategynovelty.com^
+||shodcryoft.com^
+||shodeenvier.life^
+||shoeingneurone.com^
+||shoemakerlosecommission.com^
+||shoepacpretone.website^
+||shoesammonia.com^
+||shokala.com^
+||sholke.com^
+||shomsouw.xyz^
+||shonalanital.com^
+||shoneeha.com^
+||shonetimegenetic.com^
+||shonooch.xyz^
+||shooinghelibus.com^
+||shookahi.xyz^
+||shookssuluan.com^
+||shoop4.com^
+||shoopusahealth.com^
+||shootbayonet.com^
+||shooterconsultationcart.com^
+||shootoax.com^
+||shootplanesgos.com^
+||shootsax.xyz^
+||shopboxshopping.com^
+||shopfulaments.com^
+||shopmonthtravel.com^
+||shopshoist.com^
+||shopuniteclosing.com^
+||shorantonto.com^
+||shoresmmrnews.com^
+||shoril.com^
+||shortcuteffort.com^
+||shortdementedfruitful.com^
+||shorteh.com^
+||shortfailshared.com^
+||shortlyrecyclerelinquish.com^
+||shortsgeom.com^
+||shortssibilantcrept.com^
+||shostobs.net^
+||shotdynastyimpetuous.com^
+||shotstopers.com^
+||shouback.com^
+||shoubsee.net^
+||shoupsoa.net^
+||shourtoa.com^
+||shoutgeological.com^
+||shouthisoult.com^
+||shoututtersir.com^
+||shouvods.net^
+||shovedrailwaynurse.com^
+||show-me-how.net^
+||show-review.com^
+||showcasethat.com^
+||showerymartial.com^
+||showingdoppia.guru^
+||showkhussak.com^
+||showmebars.com^
+||showndistort.com^
+||shprkdnogwqx.com^
+||shredassortmentmood.com^
+||shredhundredth.com^
+||shredparsleydefend.com^
+||shredvealdone.com^
+||shrewrotl.com^
+||shriekdestitute.com^
+||shrillbighearted.com^
+||shrillinstance.pro^
+||shrimpexclusive.com^
+||shrinebroom.com^
+||shrinesawning.guru^
+||shrinkstorey.com^
+||shriteringle.digital^
+||shriverrevery.com^
+||shrojxouelny.xyz^
+||shroudsacidite.com^
+||shrovyrebuke.com^
+||shrubsbelieve.com^
+||shrugartisticelder.com^
+||shruggedhighwaydetached.com^
+||shrupsthan.life^
+||shrust.com^
+||shubad2u8ba09.com^
+||shubadubadlskjfkf.com^
+||shubasairy.life^
+||shuglaursech.com^
+||shugnais.net^
+||shugraithou.com^
+||shukriya90.com^
+||shulugoo.net^
+||shumsooz.net^
+||shusacem.net^
+||shuswapwitness.store^
+||shutdownpious.com^
+||shutesaroph.com^
+||shuttleprivileged.com^
+||shuvramutules.com^
+||shweflix.com^
+||shwomettleye.com^
+||shydastidu.com^
+||shyhuetub.site^
+||si1ef.com^
+||siberiabecrush.com^
+||sibgycqzgj.com^
+||sibylsported.com^
+||sicknessfestivity.com^
+||sicknessinscribeelevator.com^
+||sickoaji.com^
+||sicleclarets.com^
+||sidanarchy.com^
+||sidanarchy.net^
+||sidebyx.com^
+||sidebyz.com^
+||sidelinebodypun.com^
+||sidesukbeing.org^
+||sidewalkcrazinesscleaning.com^
+||sidewaysuccession.com^
+||sieembarge.com^
+||sielsmaats.com^
+||sieveallegeministry.com^
+||sievynaw.space^
+||sifenews.com^
+||sifuglie.com^
+||sighcrowdivorce.com^
+||sigherdoless.com^
+||sighstab.com^
+||sighsuspectshaped.com^
+||sightercanidae.com^
+||sighttermportent.com^
+||sigilsspeiss.com^
+||signalsparfum.uno^
+||signalspotsharshly.com^
+||significantoperativeclearance.com^
+||signoraargent.life^
+||sihokpfbv.com^
+||sikaza.com^
+||sikelypleaste.site^
+||silagecircaea.com^
+||silasagreement.com^
+||silebu.xyz^
+||silenitmanby.info^
+||silentinevitable.com^
+||silklanguish.com^
+||silkyslyness.life^
+||silkytitle.com^
+||sillagoalgae.website^
+||sillinessinterfere.com^
+||sillinessmarshal.com^
+||sillinessowner.com^
+||sillinesssomemended.com^
+||sillyflowermachine.com^
+||sillywinner.pro^
+||silsautsacmo.com^
+||silver-pen.pro^
+||simblumauberge.digital^
+||simeonolympia.com^
+||similarfrustration.com^
+||similarlyrelicrecovery.com^
+||similarmarriage.com^
+||simiousfinfish.uno^
+||simkindisyoke.space^
+||simpan.online^
+||simperingenu.digital^
+||simple-isl.com^
+||simplebrutedigestive.com^
+||simpledkrivu.com^
+||simplemidday.com^
+||simplewebanalysis.com^
+||simplicitystoppercolonel.com^
+||simpliftsbefore.xyz^
+||simplistic-potato.pro^
+||simplisticwhole.pro^
+||simplymiraculousurn.com^
+||simpunok.com^
+||simrubwan.com^
+||simsoque.net^
+||simuld.com^
+||simultaneouslyagreeingcontradiction.com^
+||sinatraworthy.uno^
+||sincalled.com^
+||sinceclairvoyant.com^
+||sincenturypro.org^
+||sinceresubstance.com^
+||sincernething.xyz^
+||sindatontherrom.com^
+||sineweddefeise.com^
+||sinewsicklywatery.com^
+||sing-tracker.com^
+||singelstodate.com^
+||singerrespectfuljerk.com^
+||singershortestmodule.com^
+||singledsnugged.space^
+||singlesgetmatched.com^
+||singlesternlyshabby.com^
+||siniantrill.com^
+||sinisterbatchoddly.com^
+||sinisterdrops.com^
+||sinistergreensdroop.com^
+||sinkagepandit.com^
+||sinkboxphantic.com^
+||sinkdescriptivepops.com^
+||sinkingspicydemure.com^
+||sinmgaepu3or9a61w.com^
+||sinmufar.com^
+||sinproductors.org^
+||sinwebads.com^
+||sipibowartern.com^
+||sippansy.com^
+||sipperamomum.guru^
+||siredgynics.com^
+||siredonlacs.com^
+||sirepisode.com^
+||siresouthernpastime.com^
+||siressdrawly.com^
+||sireundermineoperative.com^
+||sirianlucet.digital^
+||siriusprocyon.top^
+||sirloinspicous.com^
+||sirmianow.top^
+||sirossvanish.uno^
+||sirpmqmrrett.xyz^
+||sirsilly.com^
+||sisewepod.com^
+||sismoycheii.cc^
+||sissum.com^
+||sistercashmerebless.com^
+||sistercomb.com^
+||siswensaidoh.xyz^
+||siszzonelzzcy.com^
+||sitaopewter.com^
+||siteforyou1d.com^
+||sitegoto.com^
+||sitemnk.com^
+||siteoid.com^
+||sitepork.com^
+||siterdm.com^
+||sitewithg.com^
+||sitreleastme.info^
+||situatebullied.com^
+||situationfondlehindsight.com^
+||situationhostilitymemorable.com^
+||situbathool.com^
+||siumssoftish.com^
+||siversbesomer.space^
+||sixassertive.com^
+||sixcombatberries.com^
+||sixft-apart.com^
+||sixmosorts.uno^
+||sizeilksohs.com^
+||siziermamas.com^
+||sizzlerisoflor.com^
+||sjevdjqhdmlelo.com^
+||sjhfnmfki.com^
+||sjjaewodpexdcyf.com^
+||sjkekxjkca.com^
+||sjkzeivw.com^
+||sjomilbedwarf.digital^
+||sjtactic.com^
+||sjtbhdeakgsgr.com^
+||sjteyeztnf.com^
+||skatestooped.com^
+||skatingbelonged.com^
+||skatingperformanceproblems.com^
+||skcapepyshdr.xyz^
+||skeeingfondu.life^
+||skeetads.com^
+||skeezovkjgexs.com^
+||skeletal-if.pro^
+||skeletallake.com^
+||skeletonemail.com^
+||skelpedwiney.website^
+||skenedomains.digital^
+||sketbhang.guru^
+||sketchdroughtregional.com^
+||sketchflutter.com^
+||sketchinferiorunits.com^
+||sketchyrecycleimpose.com^
+||sketchystairwell.com^
+||skfudf763-dsfew95-90fjksj.xyz^
+||skiableethyls.com^
+||skiddyteapots.com^
+||skidgleambrand.com^
+||skierastonishedforensics.com^
+||skierscarletconsensus.com^
+||skierseatmileage.com^
+||skiguggn.com^
+||skiingclefts.life^
+||skiingsettling.com^
+||skilfuljealousygeoffrey.com^
+||skilleadservices.com^
+||skilledfixedoffers.com^
+||skilletperonei.com^
+||skillpropulsion.com^
+||skilyake.net^
+||skimgrieved.uno^
+||skinkerjeez.com^
+||skinnedunsame.com^
+||skinneroverturn.com^
+||skinnynovembertackle.com^
+||skinsdefinitely.com^
+||skiofficerdemote.com^
+||skipdearbeautify.com^
+||skipperx.net^
+||skirretporail.digital^
+||skivesdaggles.com^
+||skjrfysmve.com^
+||skjwebmr.com^
+||sklentspelves.digital^
+||sknkwpvrkz.com^
+||skuligpzifan.com^
+||skullhalfway.com^
+||skwfupp.com^
+||skylookneeded.guru^
+||skymobi.agency^
+||skynightmidm.com^
+||skyscraperreport.com^
+||skywaverocs.space^
+||slabshookwasted.com^
+||slahpxqb6wto.com^
+||slakiervolost.com^
+||slamscreechmilestone.com^
+||slanderconstantlyhew.com^
+||slanderpe.com^
+||slaneo.com^
+||slangback.com^
+||slangborrowedsquash.com^
+||slangscornful.com^
+||slantdecline.com^
+||slantedsecno.com^
+||slapclergymoth.com^
+||slapexcitedly.com^
+||slaqandsan.xyz^
+||slaresolidi.com^
+||slartsighter.com^
+||slartwomans.com^
+||slashcynical.com^
+||slashstar.net^
+||slatnea.com^
+||slaughtergarageparttime.com^
+||slaverylavatoryecho.com^
+||slavesenviablegrammar.com^
+||slavil.com^
+||slavizesoften.com^
+||slayeyeshadow.com^
+||slcsfrji.xyz^
+||slearl.com^
+||sledimitationsegment.com^
+||sledsplenism.com^
+||sleekemblemenclose.com^
+||sleekextremeadmiring.com^
+||sleepywin.com^
+||sleevemisuseadvice.com^
+||slendercosts.com^
+||slenderglowingcontrary.com^
+||sleptornament.com^
+||slibb.xyz^
+||slickerunderdo.com^
+||slickgrapes.com^
+||slidbecauseemerald.com^
+||sliddeceived.com^
+||slidecaffeinecrown.com^
+||slideff.com^
+||slidehistoricchaos.com^
+||slietap.com^
+||slightcareconditions.com^
+||slightlyinfalliblestring.com^
+||slimelump.com^
+||slimentrepreneur.com^
+||slimfiftywoo.com^
+||slimlyeneas.com^
+||slimreply.pro^
+||slimy-sport.pro^
+||slinkyfoliot.com^
+||slipperspinchingsyntax.com^
+||slipperswallpaper.com^
+||slippery-bed.pro^
+||slipperydeliverance.com^
+||slipperyel.com^
+||slipperyheight.pro^
+||slipperyinside.pro^
+||slobcarpstun.com^
+||sloeri.com^
+||sloppyegotistical.com^
+||sloto.live^
+||slourenrib.top^
+||slowdn.net^
+||slowinghardboiled.com^
+||slowingvile.com^
+||slowundergroundattentive.com^
+||slowww.xyz^
+||sloydpev.com^
+||slpmcfdljsntwp.com^
+||slqyrvijxviet.com^
+||sltracl.com^
+||sltvhyjthx.com^
+||slubbermunch.com^
+||slugskashrut.com^
+||sluicehamate.com^
+||slumid.com^
+||slumpyclueing.com^
+||slumsynchs.tech^
+||sluxaaiabw.com^
+||slvjxgchocnyt.com^
+||slvlrcalpodewn.com^
+||slwkrruv.com^
+||slychicks.com^
+||smaato.net^
+||smachnakittchen.com^
+||smadex.com^
+||smalh.com^
+||smallanybody.pro^
+||smallelboswore.xyz^
+||smallerconceivesixty.com^
+||smallerfords.com^
+||smallestunrealilliterate.com^
+||smallfunnybears.com^
+||smallstrengthen.com^
+||smalltiberbridge.com^
+||smart-name.pro^
+||smart-wp.com^
+||smart2cnjuh34jb.com^
+||smartadserver.com^
+||smartapplifly.com^
+||smartappsfly.com^
+||smartdating.top^
+||smartlnk.com^
+||smartpicrotation.com^
+||smarttds.org^
+||smarttopchain.nl^
+||smartytech.io^
+||smashnewtab.com^
+||smathe.com^
+||smearedbin.com^
+||smearincur.com^
+||smeartoassessment.com^
+||smellytorment.com^
+||smenqskfmpfxnb.bid^
+||smentbrads.info^
+||smervyfenks.com^
+||smfsojvsaxbgf.com^
+||smg8oo4njst45oene.com^
+||smigdxy.com^
+||smigro.info^
+||smileoffennec.com^
+||smiletkandol.com^
+||smilewanted.com^
+||smisit.com^
+||smisto.com^
+||smists.com^
+||smithamenamel.com^
+||smithumbewreck.com^
+||smitry.com^
+||smjulynews.com^
+||smjxarmaflpmxj.com^
+||smlhvupprda.com^
+||smoggydisplay.pro^
+||smoggylong.pro^
+||smokebookcase.com^
+||smokedhewvalid.com^
+||smokeryempall.top^
+||smokerythrow.com^
+||smokilycasette.store^
+||smokingspecialize.com^
+||smoothlytalking.com^
+||smotherpaperwork.com^
+||smoulderhangnail.com^
+||smrt-content.com^
+||smrtgs.com^
+||smrtlnk.net^
+||smrtlnk18tds.com^
+||smsapiens.com^
+||smugbeautiful.pro^
+||smuggather.pro^
+||smuggledistance.com^
+||smuggleturnstile.com^
+||smugismanaxon.com^
+||smugmuseumframe.com^
+||smugturner.com^
+||smuxmalamw.com^
+||smyfbkk.com^
+||smzcjoatnnhuhn.com^
+||snagbaudhulas.com^
+||snaglighter.com^
+||snailteasesimulator.com^
+||snakestanothia.xyz^
+||snakro.com^
+||snammar-jumntal.com^
+||snapfooted.com^
+||snapmoonlightfrog.com^
+||snappedanticipation.com^
+||snappedelusive.com^
+||snappedtesting.com^
+||snaprosery.com^
+||snarewholly.com^
+||snebbubbled.com^
+||sneezeinterview.com^
+||snhtvtp.com^
+||snicherchitra.space^
+||snidethereto.com^
+||snipersex.com^
+||snippystowstool.com^
+||snippyteevee.com^
+||snippyyuncan.uno^
+||snitchgutsdainty.com^
+||snjlhmb.com^
+||snnysied.xyz^
+||snobdilemma.com^
+||snobdomobeyeo.com^
+||snoddetrude.uno^
+||snodlycaccias.com^
+||snoopundesirable.com^
+||snoreempire.com^
+||snorefamiliarsiege.com^
+||snorkremiss.com^
+||snortedbingo.com^
+||snortedgradually.com^
+||snortsfunge.space^
+||snoutcaffeinecrowded.com^
+||snowdayonline.xyz^
+||snowiersociete.uno^
+||snowmiracles.com^
+||snrcmgqe.com^
+||snsv.ru^
+||sntjim.com^
+||snugglethesheep.com^
+||snurpsermon.space^
+||snwpqybkb.com^
+||snwqvjgrjjl.com^
+||so1cool.com^
+||so333o.com^
+||soaheeme.net^
+||soakappequipment.com^
+||soakrumouropposition.com^
+||soalonie.com^
+||soap-wash.com^
+||soaperdeils.com^
+||soarersovoli.uno^
+||soavesermon.com^
+||soavouca.com^
+||soawhoaw.com^
+||soawousa.xyz^
+||sobakapi2sa8la09.com^
+||sobakenchmaphk.com^
+||sobbingservingcolony.com^
+||sobesed.com^
+||socalledattestation.com^
+||socalledscanty.com^
+||soccercadencefridge.com^
+||soccerjoyousfine.com^
+||soccertakeover.com^
+||soccup.com^
+||socdm.com^
+||social-discovery.io^
+||social1listnews.com^
+||socialbars-web1.com^
+||sociallytight.com^
+||socialschanche.com^
+||socialvone.com^
+||socids.com^
+||societybedevildecay.com^
+||societypromisedanyhow.com^
+||sociocast.com^
+||sociomantic.com^
+||socketbuild.com^
+||sockzoomtoothbrush.com^
+||sodainquired.com^
+||sodallay.com^
+||sodamash.com^
+||sodamidhankie.com^
+||sodaprostitutetar.com^
+||sodiumcupboard.com^
+||sodiumrampcubic.com^
+||sofcryingfo.xyz^
+||sofcryingforanyt.com^
+||sofcukorporat.info^
+||soffitsfermal.guru^
+||sofinpushpile.com^
+||soft-com.biz^
+||softboxik1.ru^
+||softclicks.ru^
+||softenedimmortalityprocedure.com^
+||softonicads.com^
+||softpopads.com^
+||softspace.mobi^
+||softsystem.pro^
+||softwarepastel.com^
+||softwares2015.com^
+||sogadetin.com^
+||sogetcoupes.com^
+||soholfit.com^
+||soiasjgtd.top^
+||soilenthusiasmshindig.com^
+||soilgnaw.com^
+||soilysnog.uno^
+||sojourncreed.life^
+||sokitosa.com^
+||soksicme.com^
+||solacerebonist.uno^
+||solapoka.com^
+||solaranalytics.org^
+||solarmosa.com^
+||solatesozzle.life^
+||soldergeological.com^
+||soldierreproduceadmiration.com^
+||soleasdaimio.website^
+||solemik.com^
+||solemncringle.com^
+||solemnlypink.com^
+||solemnvine.com^
+||solestudious.com^
+||soliads.net^
+||solicitorlaptopfooting.com^
+||solicitorviewer.com^
+||solidindexes.com^
+||solidlyrotches.guru^
+||solispartner.com^
+||solitudearbitrary.com^
+||solitudeelection.com^
+||solitudepeeves.com^
+||solocpm.com^
+||solodar.ru^
+||soloisthaulchoir.com^
+||sololockscoin.com^
+||soltaixa.com^
+||soltitate.site^
+||solublearcher.com^
+||solveround.com^
+||solvingcue.com^
+||solvusserosal.com^
+||somberalcyon.com^
+||sombes.com^
+||sombrdybhwa.com^
+||somecdn.bid^
+||somehowluxuriousreader.com^
+||someonein.org^
+||somethingalbumexasperation.com^
+||somethingprecursorfairfax.com^
+||somevermedea.com^
+||somewhatwideslimy.com^
+||somvprqshxr.com^
+||son-in-lawmorbid.com^
+||sonalrecomefuk.info^
+||songtopbrand.com^
+||soninlawalmighty.com^
+||soninlawcontinuallyplatoon.com^
+||soninlawfaceconfide.com^
+||sonlgagba.com^
+||sonnerie.net^
+||sonnetkeltics.com^
+||sonnyadvertise.com^
+||sonsbrunette.com^
+||sonumal.com^
+||soocaips.com^
+||soodihee.net^
+||soogandrooped.cam^
+||soonbigo.com^
+||soopsulo.xyz^
+||soopukib.net^
+||sooreejy.xyz^
+||soosooka.com^
+||sootconform.com^
+||sootproclaim.com^
+||soowugoo.xyz^
+||sopalk.com^
+||sophiaredyed.com^
+||sophisticated-rain.pro^
+||sophisticatedemergencydryer.com^
+||sophomoreadmissible.com^
+||sophomoreclassicoriginally.com^
+||sophomoremollymatching.com^
+||sophomoreprimarilyprey.com^
+||sophomorewilliam.com^
+||sopiteddoggle.live^
+||soqotr.com^
+||sorbentfalsum.com^
+||sordeexa.net^
+||sordorcourtin.com^
+||sorelyafric.com^
+||sorroaconcupy.com^
+||sorrowfulchemical.com^
+||sorrowfulclinging.com^
+||sorrowfulmaybe.pro^
+||sorrowfulsuggestion.pro^
+||sorrowgeneric.com^
+||sorrycarboncolorful.com^
+||sorryfearknockout.com^
+||sorryparlor.com^
+||sortyellowapples.com^
+||sosettoourmarke.info^
+||soshednibbing.com^
+||soshoord.com^
+||soshvenal.top^
+||sosigninggrudge.com^
+||sotchoum.com^
+||sotetahe.pro^
+||sottagejalur.uno^
+||souglaur.xyz^
+||soulsglovesacid.com^
+||soumehoo.net^
+||sounct.com^
+||soundelktemper.com^
+||soupevents.com^
+||soupteep.xyz^
+||souptrip.com^
+||souraivo.xyz^
+||sourcebloodless.com^
+||sourishpuler.com^
+||sourne.com^
+||sourtophulsean.space^
+||sousefulhead.com^
+||souvamoo.net^
+||souvenirsconsist.com^
+||souvenirsdisgust.com^
+||souvenirsflex.com^
+||souvoana.xyz^
+||sovereignidentificationconfirmed.com^
+||sovism.com^
+||soysapslad.com^
+||sozzlypeavies.com^
+||spacelala.com^
+||spaceshipads.com^
+||spacetraff.com^
+||spacetraveldin.com^
+||spaciouslanentablelanentablepigs.com^
+||spaciousnavigablehenceforward.com^
+||spaderonium.com^
+||spaghettiraisinalter.com^
+||spancelwielded.com^
+||spankdrearystroll.com^
+||spannercopyright.com^
+||spanuletubings.com^
+||spanworker.com^
+||spaped.com^
+||spapresentation.com^
+||spargedunhot.website^
+||spargegytling.com^
+||sparidssimps.life^
+||sparkle-industries-i-205.site^
+||sparklesnoop.com^
+||sparklespaghetti.com^
+||sparkling-decision.pro^
+||sparkrainstorm.host^
+||sparksne.com^
+||sparkstudios.com^
+||sparusbewrap.space^
+||spated.com^
+||spathefesting.com^
+||spathesalloxan.com^
+||spatikona.com^
+||spatterjointposition.com^
+||spattermerge.com^
+||spbxgjcupg.com^
+||spdate.com^
+||speakinghostile.com^
+||speakspurink.com^
+||speani.com^
+||speato.com^
+||special-offers.online^
+||special-promotions.online^
+||specialcraftbox.com^
+||specialisthuge.com^
+||specialistinsensitive.com^
+||specialistrocky.com^
+||specialityharmoniousgypsy.com^
+||speciallysang.com^
+||specialtaskevents.com^
+||speciesbricksjubilee.com^
+||specific-safe.pro^
+||specificallythesisballot.com^
+||specificationtoasterconsultant.com^
+||specificclick.net^
+||specificmedia.com^
+||specificunfortunatelyultimately.com^
+||specifiedbloballowance.com^
+||specifiedinspector.com^
+||specimenparents.com^
+||specimenspeekzone.com^
+||spectablyheat.org^
+||spectacular-leadership.pro^
+||spectato.com^
+||specut.com^
+||spediumege.com^
+||speeb.com^
+||speechfountaindigestion.com^
+||speechlessexpandinglaser.com^
+||speechlessreservedthrust.com^
+||speedilyabsolvefraudulent.com^
+||speedilycartrigeglove.com^
+||speedingbroadcastingportent.com^
+||speedsupermarketdonut.com^
+||speedybethurgently.com^
+||speedysection.pro^
+||speermoving.com^
+||spellingboothcourthouse.com^
+||spellingorganicbile.com^
+||spellingunacceptable.com^
+||speltzpataca.guru^
+||spened.com^
+||spentbennet.com^
+||spentindicate.com^
+||sperans-beactor.com^
+||spewsserved.website^
+||sphegidsephen.com^
+||spheralfreres.com^
+||spheredkapas.com^
+||spicaladapto.info^
+||spicedisobey.com^
+||spicy-effect.com^
+||spicybustard.com^
+||spicygirlshere.life^
+||spideramebian.com^
+||spiderspresident.com^
+||spidersprimary.com^
+||spigotkafka.life^
+||spikethat.xyz^
+||spikscabrin.com^
+||spillbough.com^
+||spinalmultiple.com^
+||spinbiased.com^
+||spinbox.net^
+||spinbox1.com^
+||spinderirpe.com^
+||spinna.online^
+||spinna.shop^
+||spinna.site^
+||spinna.store^
+||spinna.xyz^
+||spinraised.com^
+||spinsterremnantstooped.com^
+||spiralewiverns.website^
+||spiralstab.com^
+||spiredilution.com^
+||spireprideleaf.com^
+||spiritsflaker.com^
+||spiritualinstalled.com^
+||spirtlekurt.digital^
+||spitefulif.pro^
+||spittenant.com^
+||spitzeslamprey.uno^
+||spklmis.com^
+||splashfloating.com^
+||splashforgodm.com^
+||splashsjewels.com^
+||spleniacusec.com^
+||spleniafallows.com^
+||splentstoatoa.com^
+||splief.com^
+||splittingpick.com^
+||splodgydossing.com^
+||spo-play.live^
+||spondeetougher.guru^
+||spongecell.com^
+||spongemilitarydesigner.com^
+||spongewoodenheroism.com^
+||sponsorlustrestories.com^
+||sponsormob.com^
+||sponsorpay.com^
+||spontaneousguarded.com^
+||spooksschedar.com^
+||spookybirch.com^
+||spoonslaxoil.com^
+||spoonsleopard.com^
+||spoonsubqueries.com^
+||sporedfryhum.com^
+||sport205.club^
+||sportevents.news^
+||sportivki2v1cvetocher1fh.com^
+||sportradarserving.com^
+||sports-live-streams.club^
+||sports-streams-online.best^
+||sports-streams-online.com^
+||sportsmanmeaning.com^
+||sportstreams.xyz^
+||sportsyndicator.com^
+||spotdimesulky.com^
+||spotofspawn.com^
+||spotrails.com^
+||spotscenered.info^
+||spotssurprise.com^
+||spotted-estate.pro^
+||spottt.com^
+||spotunworthycoercive.com^
+||spotxcdn.com^
+||spotxchange.com^
+||spoutable.com^
+||spouttheory.com^
+||spratstatters.com^
+||spreebogbean.com^
+||sprengaivr.digital^
+||sprettyruckus.com^
+||spriedfines.com^
+||sprigsrecon.com^
+||springjaywolf.org^
+||springraptureimprove.com^
+||sprintainokeg.xyz^
+||spritfrees.com^
+||spritzawapuhi.guru^
+||sprkl.io^
+||sproose.com^
+||sproutrhubarbencouraged.com^
+||spruecutworm.com^
+||sprungencase.com^
+||sprunghardness.com^
+||sptrkr.com^
+||spuezain.com^
+||spuggysorbol.website^
+||spumousredefy.digital^
+||spunkyuntiled.com^
+||spuokstucdk.com^
+||spurproteinopaque.com^
+||spurtconfigurationfungus.com^
+||spurttucky.website^
+||sputil.com^
+||spyaiwvhfqmcy.xyz^
+||spybuildsoccasional.com^
+||spylees.com^
+||spymislead.com^
+||sqctkocts.com^
+||sqgofqnyamo.com^
+||sqhyjfbckqrxd.xyz^
+||sqkrnqdb.com^
+||sqlekbxp.xyz^
+||sqlick.com^
+||sqmzanszcahcmi.com^
+||sqqqytzxjywx.com^
+||squarepicket.com^
+||squatdisloyal.com^
+||squeakyheart.pro^
+||squealaviationrepeatedly.com^
+||squeamarundo.com^
+||squeezemicrowave.com^
+||squeezesharedman.com^
+||squhtdqggvpx.xyz^
+||squinbested.com^
+||squintopposed.com^
+||squirrelformatapologise.com^
+||squirrelhissedintake.com^
+||squirtburpimplore.com^
+||sqydhgubsy.com^
+||sr7pv7n5x.com^
+||srabwfqwjoc.com^
+||srasylzu.com^
+||srcsmrtgs.com^
+||sreamyourvids.online^
+||sreamyourvids.space^
+||srefrukaxxa.com^
+||srgev.com^
+||srigbxxv.com^
+||srkhbdjgxyys.xyz^
+||srnpochi.com^
+||srodicham.com^
+||srqfutavhy.com^
+||srshqnrmqs.com^
+||srsihavelearn.xyz^
+||srtlyye.com^
+||srtrak.com^
+||srumifuroqkuoi.com^
+||sruzefwboxu.com^
+||srv224.com^
+||srvpcn.com^
+||srvtrck.com^
+||srwfwllymprt.com^
+||srxy.xyz^
+||ss0uu1lpirig.com^
+||ssdipdkjqblgog.com^
+||ssery.com^
+||ssiapawz.com^
+||ssindserving.com^
+||ssl-services.com^
+||ssl2anyone5.com^
+||ssllink.net^
+||sslph.com^
+||ssmprmp.com^
+||ssqyuvavse.com^
+||ssuijiuyv.com^
+||ssurvey2you.com^
+||st-rdirect.com^
+||st1net.com^
+||stabam.com^
+||stabilecordy.com^
+||stabilityincarnateillegally.com^
+||stabilityvatinventory.com^
+||stablefulfil.com^
+||stacckain.com^
+||stackadapt.com^
+||stackattacka.com^
+||stadiumembezzlementoil.com^
+||staffsumptuouscovetous.com^
+||stagepopkek.com^
+||stageseshoals.com^
+||staggeredravehospitality.com^
+||stagingjobshq.com^
+||stagroam.net^
+||staifong.net^
+||stainblocking.com^
+||stainclout.com^
+||stainvinegar.com^
+||stairsel.net^
+||stairtuy.com^
+||staitchu.com^
+||staiwiru.xyz^
+||staixemo.com^
+||staixooh.com^
+||stalerestaurant.com^
+||stallamenchisel.com^
+||staminaneshly.com^
+||stammerail.com^
+||stampburpcolored.com^
+||stampsmindlessscrap.com^
+||standardscaldexcessive.com^
+||standpointunfriendly.com^
+||stankyrich.com^
+||stannyltatusia.com^
+||stansoam.com^
+||staplecups.com^
+||star-advertising.com^
+||star-clicks.com^
+||starchportraypub.com^
+||stardatis.com^
+||starefolks.com^
+||starewhupsu.pro^
+||stargamesaffiliate.com^
+||starkhousing.com^
+||starmobmedia.com^
+||starry-galaxy.com^
+||starrybitter.pro^
+||starsaug.com^
+||starssp.top^
+||starswalker.site^
+||starszoom.re^
+||start-xyz.com^
+||startappexchange.com^
+||startd0wnload22x.com^
+||startlemanipulativedamaging.com^
+||startpagea.com^
+||starvardsee.xyz^
+||starvationdefence.com^
+||starvegingerwaist.com^
+||starverwear.com^
+||starvybryan.com^
+||stascdnuuar.com^
+||stat-rock.com^
+||statalvortex.com^
+||statcamp.net^
+||statefertilitycount.com^
+||stateinformatics.com^
+||statementsheep.com^
+||statementsphilosophy.com^
+||statesmanimpetuousforemost.com^
+||statesmanridiculousplatitude.com^
+||statesmansubstance.com^
+||statestockingsconfession.com^
+||static-srv.com^
+||statistic-data.com^
+||statisticresearch.com^
+||statisticseither.com^
+||stats-best.site^
+||statsforads.com^
+||statsmobi.com^
+||statueofthe.info^
+||staturecolonialismtransition.com^
+||staturereactioncollect.com^
+||staubsefoo.com^
+||staubsuthil.com^
+||staukponier.com^
+||staumobu.com^
+||staunchfastened.com^
+||staunchgenetwitch.com^
+||staung.com^
+||staureez.net^
+||staurtur.net^
+||staustee.net^
+||stawhoph.com^
+||stayfaxachievement.com^
+||staygg.com^
+||stayhereabit.com^
+||stayjigsawobserved.com^
+||stbshzm.com^
+||stbvip.net^
+||stdirection.com^
+||ste23allas5ri6va.com^
+||steadilyparental.com^
+||steadydonut.com^
+||steadyscubaparachute.com^
+||steakdeteriorate.com^
+||steakeffort.com^
+||stealcalmgenus.com^
+||stealcurtainsdeeprooted.com^
+||stealingattentions.com^
+||stealingprovisions.com^
+||stealthlockers.com^
+||steamdespicable.com^
+||steamlargelyjustified.com^
+||steamsorrowabbey.com^
+||stedsous.xyz^
+||steel-bedroom.pro^
+||steeltour.pro^
+||steep-secretary.pro^
+||steepto.com^
+||steeringsunshine.com^
+||steessay.com^
+||steghaiwhy.com^
+||stegpigbwyda.com^
+||steinfqwe6782beck.com^
+||stekraucmauk.com^
+||steltilr.xyz^
+||stemboastfulrattle.com^
+||stemsshutdown.com^
+||stenadewy.pro^
+||stenchdaltonrunaway.com^
+||stengskelped.com^
+||stentorsaumont.com^
+||step-step-go.com^
+||stepchateautolerance.com^
+||stepkeydo.com^
+||stepmotherincomingpluck.com^
+||stereosuspension.com^
+||sterileaccentbite.com^
+||sterilecute.com^
+||sterncock.com^
+||sternedcharas.cfd^
+||sternlythese.com^
+||steropestreaks.com^
+||sterouhavene.org^
+||steshacm.xyz^
+||stethaug.xyz^
+||stethydelicat.com^
+||steveoriginate.com^
+||stewsmall.com^
+||stgcdn.com^
+||stgowan.com^
+||sthenicrefunds.com^
+||sthgqhb.com^
+||sthoutte.com^
+||stialt.com^
+||sticalsdebaticalfe.info^
+||stichosxylenol.guru^
+||stickboiled.com^
+||stickerchapelsailing.com^
+||stickertable.com^
+||stickervillain.com^
+||sticklikeahand.xyz^
+||stickyadstv.com^
+||stickygrandeur.com^
+||stickyhustle.com^
+||sticmilt.xyz^
+||stiffenshave.com^
+||stifleadventureempire.com^
+||stiflerivers.com^
+||stiftood.xyz^
+||stigala.com^
+||stigat.com^
+||stigmuuua.xyz^
+||stiksaud.com^
+||stilaed.com^
+||stilaikr.com^
+||stilbmolted.com^
+||stillchemistcivilian.com^
+||stimaariraco.info^
+||stimtavy.net^
+||stimulatemosque.com^
+||stingeantonia.com^
+||stinglackingrent.com^
+||stingystoopedsuccession.com^
+||stinicf.com^
+||stinicl.com^
+||stinkcomedian.com^
+||stinkyloadeddoctor.com^
+||stinkyrepetition.com^
+||stipelyaya.live^
+||stiposclimath.com^
+||stippennothing.guru^
+||stipulenibber.com^
+||stirringdecoctiononly.com^
+||stismiqlqj.com^
+||stited.com^
+||stitly.com^
+||stitor.com^
+||stiwhugn.net^
+||stixeepou.com^
+||stized.com^
+||stizoolr.com^
+||stjizydpukd.com^
+||stkgbjliym.com^
+||stlpyypg.com^
+||stluserehtem.com^
+||stoaltaw.net^
+||stoaphalti.com^
+||stoapoothu.com^
+||stoashou.net^
+||stoaxugi.com^
+||stockingsbeanspowerless.com^
+||stockingsight.com^
+||stogerde.com^
+||stolefocusconstituent.com^
+||stolenforensicssausage.com^
+||stoltoog.net^
+||stonkphymata.com^
+||stoobsut.com^
+||stoolree.com^
+||stoomoogn.com^
+||stoopedcompatibility.com^
+||stoopjam.com^
+||stoopsellers.com^
+||stoopsystemsshoot.com^
+||stoorsoy.com^
+||stootsee.xyz^
+||stootsou.net^
+||stopscondole.com^
+||stopsrepetitious.com^
+||storage-ad.com^
+||storagelassitudeblend.com^
+||stormydrawer.com^
+||stormyproposal.pro^
+||storners.com^
+||storyblizzard.com^
+||storycipher.com^
+||stossfussily.com^
+||stotchou.com^
+||stotinggunne.uno^
+||stotoowu.net^
+||stougnee.com^
+||stouksom.xyz^
+||stoushgowds.com^
+||stovearmpitagreeable.com^
+||stovecharacterize.com^
+||stovoori.net^
+||stowjupnkwlic.com^
+||stpd.cloud^
+||stpeopleshouldthi.com^
+||stpmgo.com^
+||stpmneaywgib.com^
+||straight-equipment.com^
+||straight-shift.pro^
+||strainemergency.com^
+||straitsdeprive.com^
+||straji.com^
+||stramseri.com^
+||strandedpeel.com^
+||strandedprobable.com^
+||strangelyfaintestgreenhouse.com^
+||strangerprovocation.com^
+||strangersrecantcoral.com^
+||strapnetdisk.com^
+||stratebilater.com^
+||strategicattacksstudied.com^
+||strawguineaequanimity.com^
+||straymaternitycommence.com^
+||streakattempt.com^
+||stream-all.com^
+||streaming-illimite5.com^
+||streaming-illimite6.com^
+||streampsh.top^
+||streamsearchclub.com^
+||streamtoclick.com^
+||streamvideobox.com^
+||streamyourvid.com^
+||streenoutrove.life^
+||streetcoddiffident.com^
+||streetmilligram.com^
+||streetuptowind.com^
+||streetupwind.com^
+||streitmackled.com^
+||stremanp.com^
+||strengk.xyz^
+||strenuoustarget.com^
+||stressfulproperlyrestrain.com^
+||stressfulsplash.com^
+||stressfulsurroundingcomeback.com^
+||stretchedbarbarian.com^
+||stretchedcreepy.com^
+||stretchingwicked.com^
+||strettechoco.com^
+||strewjaunty.com^
+||streynerecoded.guru^
+||strickenenergetic.com^
+||strictgrittwine.com^
+||strident-writing.com^
+||stridentbedroom.pro^
+||stringssymptomfishing.com^
+||stringthumbprowl.com^
+||striperaised.com^
+||striperewind.com^
+||strivefoetus.com^
+||strjuylfrjyk.site^
+||strobesfalsity.digital^
+||strodeewesmug.com^
+||strodemorallyhump.com^
+||strodesoot.com^
+||strollspread.com^
+||strongestboxerscrupulous.com^
+||strongestconvenient.com^
+||strongesthaste.com^
+||strownstramp.cam^
+||stroyerunfiery.uno^
+||strtgic.com^
+||strubmola.guru^
+||structurecolossal.com^
+||strugglecookingtechnically.com^
+||strumascarman.life^
+||strungcourthouse.com^
+||strungglancedrunning.com^
+||strwaoz.xyz^
+||stthykerewasn.com^
+||stubborndreadcounterfeit.com^
+||stuchoug.com^
+||stuckencouragedscalpel.com^
+||stucktimeoutvexed.com^
+||studads.com^
+||studentcrevice.com^
+||studentstunnel.com^
+||studiorejoinedtrinity.com^
+||studiouspedal.com^
+||studkakan.com^
+||studsurs.net^
+||studzip.com^
+||stuffedodiousmargin.com^
+||stuffedprofessional.com^
+||stuffedstudy.com^
+||stuffserve.com^
+||stugsoda.com^
+||stulleratteal.top^
+||stullsstud.com^
+||stulsh.com^
+||stumbledmetropolitanpad.com^
+||stumbleirritable.com^
+||stumercackles.com^
+||stunninglover.com^
+||stunningruin.com^
+||stunsbarbola.website^
+||stunthedge.com^
+||stupendousconcept.pro^
+||stupidityficklecapability.com^
+||stuted.com^
+||stvkr.com^
+||stvsmdhfplfrcy.xyz^
+||stydrumgmaringpo.info^
+||styingjareed.guru^
+||stylewhiskerscreepy.com^
+||stylliyote.com^
+||styrianauf.com^
+||sualgvoi.com^
+||sub.empressleak.biz^
+||sub.xxx-porn-tube.com^
+||sub2.avgle.com^
+||subdatejutties.com^
+||subdo.torrentlocura.com^
+||subdued-illegal.pro^
+||subgitrelais.com^
+||subheroalgores.com^
+||subjectscooter.com^
+||subjectsextended.com^
+||subjectslisted.com^
+||submissionbrackettreacherous.com^
+||submissionspurtgleamed.com^
+||submissivejuice.com^
+||subner.com^
+||suborecho.com^
+||subpenaveinery.com^
+||subqueryrewinddiscontented.com^
+||subsaltracon.top^
+||subscribestormyapprobation.com^
+||subsectivexe.xyz^
+||subserecajones.com^
+||subsidehurtful.com^
+||subsistgrew.com^
+||subsor.com^
+||substantialequilibrium.com^
+||subtle-selection.pro^
+||subtractrefused.com^
+||suburbincriminatesubdue.com^
+||subwaygirlieweasel.com^
+||succeedappointedsteve.com^
+||succeedingpeacefully.com^
+||succeedscene.com^
+||success-news.net^
+||successfulpatience.com^
+||successionflimsy.com^
+||successorpredicate.com^
+||successorwindscreeninstruct.com^
+||suchasricew.info^
+||suchbasementdarn.com^
+||suchcesusar.org^
+||sucocesisfulylyde.info^
+||sucter.com^
+||suctionautomobile.com^
+||suctionspelts.com^
+||sudden-great.pro^
+||sudorwauve.com^
+||sudsguidon.com^
+||suescollum.com^
+||sufeismmitered.digital^
+||suffertreasureapproval.com^
+||sufficedetentionhols.com^
+||sufficientknight.com^
+||sufficientmisplacecongestion.com^
+||sufficientridiculevenison.com^
+||suffixconceivevegetarian.com^
+||suffixreleasedvenison.com^
+||sufips.com^
+||sugary-ratio.pro^
+||sugarynotice.pro^
+||suggest-recipes.com^
+||suggestedhappyspun.com^
+||suggestiongettingmaggot.com^
+||sugpgeaunpet.com^
+||suicidechapterspartnership.com^
+||suitbelongingoccasion.com^
+||suitcasessheriffpilgrim.com^
+||suitesdyed.space^
+||suiteshowedlottery.com^
+||suitetattoo.com^
+||sukcheatppwa.com^
+||sukultingecauy.info^
+||sulelysr.com^
+||sulkvulnerableexpecting.com^
+||sullageprofre.com^
+||sullencarverdoes.com^
+||sulrejclbehh.com^
+||sulseerg.com^
+||sultodre.net^
+||sultrymercury.com^
+||sumbreta.com^
+||sumids.com^
+||summaryvalued.com^
+||summercovert.com^
+||summingricracs.uno^
+||summitchafeperilous.com^
+||summitdangle.com^
+||summitmanner.com^
+||summonedessencetrap.com^
+||sumperhelder.com^
+||sunbowskraal.com^
+||sundaeekphore.life^
+||sundayceremonytitanic.com^
+||sundayscrewinsulting.com^
+||sundersetrgh.site^
+||sunflowerbright106.io^
+||sunflowergermcaptivate.com^
+||sunflowerinformed.com^
+||sungarnonsane.com^
+||sunglassesmentallyproficient.com^
+||sunkencurledexpanded.com^
+||sunlightirrationalhearty.com^
+||sunnycategoryopening.com^
+||sunnyseries.com^
+||sunnysubject.com^
+||sunrisesharply.com^
+||sunsekrious.com^
+||sunsetbassan.uno^
+||sunsetcigarettejubilee.com^
+||sunspotpitchy.website^
+||sunstrokeload.com^
+||sunwardamoraic.com^
+||suozmtcc.com^
+||supapush.net^
+||superadbid.com^
+||superbcallempty.com^
+||superbisle.com^
+||superfastcdn.com^
+||superfasti.co^
+||superficialropes.com^
+||superficialstage.pro^
+||superfolder.net^
+||superherosnout.com^
+||superiorickyfreshen.com^
+||superioritydiningroom.com^
+||superiorsufferorb.com^
+||superjuryger.xyz^
+||supermarketrestaurant.com^
+||supersedeforbes.com^
+||superssp.top^
+||superstitiousamber.com^
+||superstriker.net^
+||supertrackingz.com^
+||supervisorabyss.com^
+||superxxxfree.com^
+||suphelper.com^
+||supied.com^
+||suppermalignant.com^
+||supperopeningturnstile.com^
+||supplejog.com^
+||suppliedhopelesspredestination.com^
+||supportedbushesimpenetrable.com^
+||supportiveworking.pro^
+||supposereduction.com^
+||supposerevenue.com^
+||suppressparticular.com^
+||supranarchy.com^
+||supremewatcheslogical.com^
+||supremoadblocko.com^
+||suptraf.com^
+||suptrkdisplay.com^
+||suptur.online^
+||surahsbimas.com^
+||surclebodily.uno^
+||surcloyspecify.com^
+||surecheapermoisture.com^
+||surechieflyrepulse.com^
+||surewashedalphabet.com^
+||surfacesaroselozenge.com^
+||surfacesmulti.com^
+||surfcuegirlfriend.com^
+||surfedlattins.com^
+||surfierunreel.com^
+||surfmdia.com^
+||surge.systems^
+||surgermystem.xyz^
+||surgicalhanging.com^
+||suricatchino.space^
+||surlierrevary.space^
+||surmal.com^
+||surmountpeel.com^
+||surnamesubqueryaloft.com^
+||surnapereborn.com^
+||surpassconstraintsrenewal.com^
+||surprisingarsonistcooperate.com^
+||surprisingcordialtrust.com^
+||surprisinglycouncil.com^
+||surrogatelithe.com^
+||surroundingsbeggaralibi.com^
+||surroundingsliftingstubborn.com^
+||surv2you.com^
+||surv2you.net^
+||surv2you.org^
+||survey-daily-prizes.com^
+||survey2you.co^
+||survey2you.com^
+||survey2you.net^
+||survey2you.org^
+||survey4you.co^
+||surveyonline.top^
+||surviseacmic.com^
+||survrhostngs.xyz^
+||susceptiblefantasyjunction.com^
+||suspectedadvisor.com^
+||suspendedflesh.com^
+||suspensionreconnectpig.com^
+||sustainstores.website^
+||sutiletoroid.com^
+||sutlfhpeznd.com^
+||sutraf.com^
+||suwotsoukry.com^
+||suwytid.com^
+||suyextfn.com^
+||suzanne.pro^
+||svarajwens.com^
+||svbzpenplok.com^
+||sviakavgwjg.xyz^
+||sviter2s1olenyami1.com^
+||svkmxwssih.com^
+||svntrk.com^
+||svrilvrrvwyh.xyz^
+||svtlgjmqyzmwz.com^
+||svvrkmqyvb.xyz^
+||svyksa.info^
+||sw2block.com^
+||swabscorves.digital^
+||swagtraffcom.com^
+||swailsbondman.com^
+||swallowaccidentdrip.com^
+||swallowpunctual.com^
+||swamissou.com^
+||swan-swan-goose.com^
+||swanbxca.com^
+||swansinksnow.com^
+||swarfsfitters.com^
+||swarmpush.com^
+||swarthymacula.com^
+||swatad.com^
+||swaycomplymishandle.com^
+||swayersnoance.com^
+||swaypedigreeresolve.com^
+||sweake.com^
+||swearanalogous.com^
+||sweaterwarmly.com^
+||sweatyailpassion.com^
+||sweatybar.pro^
+||sweatyequityhelicopter.com^
+||sweatytraining.pro^
+||swebatcnoircv.xyz^
+||sweepadstoday.click^
+||sweepawejasper.com^
+||sweepfrequencydissolved.com^
+||sweepia.com^
+||sweet-marriage.pro^
+||sweetmoonmonth.com^
+||sweetromance.life^
+||swelllagoon.com^
+||swelltomatoesguess.com^
+||swensaidohet.com^
+||swepfa.com^
+||sweptaboutlard.com^
+||sweptgrimace.com^
+||sweptpeculiar.com^
+||swesomepop.com^
+||swiftlylatterdilate.com^
+||swiftlystudsteed.com^
+||swiftpedigreebike.com^
+||swigdomable.com^
+||swiggrazer.life^
+||swimsunleisure.com^
+||swimtwittercloakroom.com^
+||swindlehumorfossil.com^
+||swinesuburbanclue.com^
+||swingebudded.com^
+||swingelinseys.com^
+||swingtoeswinds.com^
+||swishedbigha.digital^
+||swisherplacard.space^
+||swisstoothpastelipstick.com^
+||swivinglydite.com^
+||swlkdqlcx.com^
+||swmg.top^
+||swoezdra.com^
+||swollencompletely.com^
+||swoodlander.site^
+||swoopreprehensiblehandled.com^
+||swordcirculation.com^
+||sworddubiousagitated.com^
+||swordeast.com^
+||swordrelievedictum.com^
+||swordshiret.net^
+||swtchrules.click^
+||swunge.com^
+||swungencetacea.website^
+||swwpush.com^
+||sxbbqlnulcmyhr.com^
+||sxcbnqubygqekx.com^
+||sxhivhz.com^
+||sxipth.xyz^
+||sxirpkuxm.com^
+||sxlflt.com^
+||sxlvklm.com^
+||sxtpkrrvdvm.com^
+||sxujfrzjmnb.com^
+||sxwflxsontjwdb.com^
+||sya9yncn3q.com^
+||sybostuff.com^
+||sydneygfpink.com^
+||syenitetatler.tech^
+||syinga.com^
+||sykfmgu.com^
+||sykojkqjygahl.com^
+||syllableliking.com^
+||sylvatealonely.com^
+||sylxisys.com^
+||symbolscathy.digital^
+||symbolstudents.com^
+||symbolultrasound.com^
+||symmorybewept.com^
+||symoqecnefjj.com^
+||sympatheticclue.com^
+||sympatheticfling.com^
+||sympathizededicated.com^
+||symphoneupcom.site^
+||symphonyobservation.com^
+||synchronizedoll.com^
+||synchronizerobot.com^
+||syncwowsails.com^
+||syndicpop.com^
+||syndiesserged.xyz^
+||syndopop.com^
+||syndromeentered.com^
+||synonymfeminine.com^
+||synonymshutdownmoney.com^
+||synsads.com^
+||syntaxaboriginalsaxophone.com^
+||syntaxtruckspoons.com^
+||synthesissocietysplitting.com^
+||synthesisvariables.com^
+||syofklngqqlw.com^
+||syphilohmmaging.site^
+||syrianburlier.top^
+||syringaburan.digital^
+||syringeitch.com^
+||syrsple2se8nyu09.com^
+||syruphamster.com^
+||sysdmt.com^
+||syseinpoundaym.info^
+||sysoutvariola.com^
+||system-notify.app^
+||systeme-business.online^
+||systemengagedwisely.com^
+||systemhostess.com^
+||systemleadb.com^
+||systemsivory.com^
+||syxcwxur.com^
+||syyycc.com^
+||syyzbelmw.com^
+||syzijqaufe.com^
+||syzwiooheckxb.com^
+||szbnnqyqn.com^
+||szhcyxtszb.com^
+||szqxvo.com^
+||t.uc.cn^
+||t0gju20fq34i.com^
+||t0gkj99krb24.com^
+||t2lgo.com^
+||t58genestuff.com^
+||t5lxz7dtq4iz.com^
+||ta3nfsordd.com^
+||ta5ast2ffeyvhjitde.com^
+||taaqhr6axacd2um.com^
+||tabaxirwelly.com^
+||tabbingtremors.life^
+||tabfloor.com^
+||tabici.com^
+||tablasmaximed.website^
+||tableautroller.top^
+||tabledownstairsprovocative.com^
+||tablepeppery.com^
+||tablesgrace.com^
+||tableshooliganbait.com^
+||tabletbragcreak.com^
+||tabloidbadger.com^
+||tabloidsuggest.com^
+||taboringrigri.com^
+||tabulaeokas.com^
+||tabutelei.guru^
+||tacananbouffon.com^
+||tacklerloin.com^
+||tackleyoung.com^
+||tacticmuseumbed.com^
+||tacticpoignantsteeple.com^
+||tacticschangebabysitting.com^
+||tadadamads.com^
+||tadamads.com^
+||tadsbelver.com^
+||taembed.com^
+||taetsiatomia.com^
+||taexnaexgg.com^
+||taffiasspavies.tech^
+||tagalodrome.com^
+||taggerumbre.uno^
+||taghaugh.com^
+||tagoutlookignoring.com^
+||tagun.xyz^
+||tahinapasses.com^
+||tahltanboutell.com^
+||tahoshehu.com^
+||tahqcecads.com^
+||taicheetee.com^
+||taicoobu.com^
+||taidainy.net^
+||taigasdoeskin.guru^
+||taigathi.xyz^
+||taigrooh.net^
+||tailorfunctionknuckle.com^
+||tailpgjpearanc.com^
+||tainosapiece.com^
+||taintvistacredulous.com^
+||taipsuwa.com^
+||taisaiwe.xyz^
+||taiuxljddwh.com^
+||taiwhups.net^
+||taizaque.net^
+||taizigly.net^
+||take-grandincome.life^
+||takeallsoft.ru^
+||takecareproduct.com^
+||takelnk.com^
+||takemydesk.co^
+||takemyorder.co^
+||takeoffcamus.live^
+||takeoverpushy.com^
+||takeoverrings.com^
+||takepalpablenuisance.com^
+||takestruggle.com^
+||takeyouforward.co^
+||takiparkrb.site^
+||takychasing.com^
+||talabondreary.top^
+||talamk3.beauty^
+||talcoidsakis.com^
+||talentinfatuatedrebuild.com^
+||talerselrage.com^
+||talesapricot.com^
+||talipeshorst.com^
+||talitolstared.website^
+||talkingwinquarry.com^
+||talkmego.com^
+||tallfriend.pro^
+||talliedhorrors.digital^
+||tallwhilstinventory.com^
+||tallysaturatesnare.com^
+||talrahot.net^
+||talsauve.com^
+||tamaraoolympic.life^
+||taminystopgap.com^
+||tamperstationerycultivate.com^
+||tampinbecker.com^
+||tanandatable.com^
+||tanceteventu.com^
+||tancommunicated.com^
+||tangpuax.xyz^
+||tankastapia.com^
+||tankiuz.xyz^
+||tanksfright.com^
+||tanquamporotic.tech^
+||tantialcottish.xyz^
+||tantiterhalac.xyz^
+||tantohoggism.com^
+||taonforhavinga.info^
+||taotobuzz.xyz^
+||taoyinbiacid.com^
+||tapallpurposepantomime.com^
+||tapdb.net^
+||tapheetsat.com^
+||tapingauthenticemulation.com^
+||tapingdynasty.com^
+||tapingfoulgos.com^
+||tapinghouseworkusual.com^
+||tapiocaindowed.space^
+||tapioni.com^
+||tapixesa.pro^
+||tapjoyads.com^
+||taprtopcldfa.co^
+||taprtopcldfard.co^
+||taprtopcldfb.co^
+||taraponrigodon.guru^
+||taroads.com^
+||taroccomediant.com^
+||tarokbien.com^
+||tarriesthetine.digital^
+||tarrilyathenee.com^
+||tartanaanvils.com^
+||tartarsharped.com^
+||tartator.com^
+||tartingfirming.space^
+||taryardtugged.com^
+||taryarguestio.com^
+||taskariose.com^
+||taskproceduresseverely.com^
+||tasmok.com^
+||tastednavigation.com^
+||tasterscaltha.com^
+||tastierxyphoid.com^
+||tasty-election.com^
+||tasvagaggox.com^
+||tat3ayogh6.com^
+||tatdrdpuyi.com^
+||tatdunsit.com^
+||tatersbilobed.com^
+||tatleadlam.live^
+||tattepush.com^
+||tattoocommit.com^
+||taughtwandamazingly.com^
+||taulajobarbe.com^
+||taurinkimonos.uno^
+||taurse.com^
+||tautcare.pro^
+||tautenstapetta.com^
+||tauvoojo.net^
+||tauwoumo.net^
+||tawniessmoot.com^
+||taxedborley.com^
+||taxiconsiderable.com^
+||taxissunroom.com^
+||taxiwayunmoral.com^
+||taxmenredug.top^
+||taxodiu2m2dis7tichum.com^
+||taxpillsqueal.com^
+||taxwaxhurlock.store^
+||tayloryourbestlife.com^
+||tazagdv.com^
+||tazzasembays.digital^
+||tberjonk.com^
+||tbgmckdemnv.com^
+||tbhenherthertindn.xyz^
+||tbiwkjomju.com^
+||tbm09.com^
+||tbppfktchj.com^
+||tbtqjbgrelc.xyz^
+||tbudz.co.in^
+||tcaochocskid.com^
+||tcaukthwaalsoex.info^
+||tcdyjyrj.com^
+||tcgehkuyoblgg.xyz^
+||tchinaprecenta.info^
+||tcjyhblfmcl.xyz^
+||tcpcharms.com^
+||tcppu.com^
+||tcprd.xyz^
+||tcwcs.com^
+||tczzzlwpss.com^
+||td553.com^
+||td563.com^
+||td583.com^
+||td5xffxsx4.com^
+||tddemchenko.info^
+||tdditqosnpeo.com^
+||tdeogusnou.xyz^
+||tdkkjueowqb.com^
+||tdnkiuusxidllh.com^
+||tdohrpnwzs.com^
+||tdqhlowkhxeohe.com^
+||tdspa.top^
+||teachievedim.xyz^
+||teachmewind.com^
+||teads.tv^
+||teaismonless.com^
+||tealsgenevan.com^
+||teamantacket.com^
+||teambetaffiliates.com^
+||teamsmarched.com^
+||teamsperilous.com^
+||teaqrznepjv.com^
+||tearingdubnought.com^
+||tearingflickermeaning.com^
+||tearingreasoningempower.com^
+||tearnumeral.com^
+||tearpilotzoo.com^
+||tearsincompetentuntidy.com^
+||teasacomsys.xyz^
+||teasimilarman.com^
+||teatycacicus.com^
+||teazledbyes.com^
+||tebadu.com^
+||tecaavdsy.com^
+||techahv.com^
+||techclicks.net^
+||techiteration.com^
+||techniciancocoon.com^
+||technicianforestallproper.com^
+||technologycontemplate.com^
+||technoratimedia.com^
+||technoshadows.com^
+||techreviewtech.com^
+||tecominchisel.com^
+||tecuil.com^
+||teddynineteenthpreoccupation.com^
+||tedious-weight.pro
+||tediousdetective.com^
+||tediouswavingwhiskey.com^
+||tedxffemqblmk.xyz^
+||teedoping.com^
+||teefuthe.com^
+||teeglimu.com^
+||teelconch.com^
+||teemcapablespinal.com^
+||teemooge.net^
+||teenagerapostrophe.com^
+||teensexgfs.com^
+||teentitsass.com^
+||teenybarnacle.com^
+||teenymuteprospect.com^
+||teepoomo.xyz^
+||teethaur.com^
+||teethbatchevy.com^
+||teeveetakahe.space^
+||tefaighecmoa.com^
+||teflonterreen.com^
+||tefuse.com^
+||tegronews.com^
+||tegrooxo.xyz^
+||tehave.com^
+||tehous.com^
+||tehras.com^
+||teicdn.com^
+||tejwsqrso.xyz^
+||teknologia.co^
+||tel-tel-fie.com^
+||telechargementdirect.net^
+||telegramsit.com^
+||telegramspun.com^
+||teleostrodmen.com^
+||telephoneinclination.com^
+||telescopepigs.com^
+||telescopespinal.com^
+||televeniesuc.pro^
+||telingabureaus.top^
+||telinteredlmewhl.xyz^
+||telllwrite.com^
+||tellmadeirafireplace.com^
+||tellsringeye.com^
+||tellyowingrichest.com^
+||telwrite.com^
+||tembetachasmic.guru^
+||tembetanymil.com^
+||temksrtd.net^
+||tempbugs.com^
+||tempeorek.org^
+||temperacaimans.com^
+||temperaturecoalitionbook.com^
+||tempergleefulvariability.com^
+||temperrunnersdale.com^
+||templa.xyz^
+||temporalirrelevant.com^
+||temporarilybrancheshideous.com^
+||temporarilylavenderenforce.com^
+||temporarilylocate.com^
+||temporarilyruinconsistent.com^
+||temporarilysearchingcomputer.com^
+||temporarilyunemployed.com^
+||temprepenalty.guru^
+||tempro.lol^
+||tempyodatos.com^
+||temvbbhgmcghgbc.xyz^
+||tenantbaffle.life^
+||tend-new.com^
+||tendencysanction.com^
+||tenderlywomblink.com^
+||tendernessbranch.com^
+||tendernessknockout.com^
+||tendingstonier.com^
+||tendongolach.uno^
+||tendycdn.online^
+||tenhousewife.com^
+||tennubifaces.com^
+||tensagesic.com^
+||tense-print.pro^
+||tensorsbancos.com^
+||tentativeroofearlap.com^
+||tenthgiven.com^
+||tenthsfrumpy.com^
+||tentionirreg.com^
+||tentletunkept.uno^
+||tentmess.com^
+||tentorycomales.space^
+||teracent.net^
+||teracreative.com^
+||teraiwaxing.uno^
+||terbaru.cyou^
+||terbit2.com^
+||terciogouge.com^
+||terelinkman.info^
+||terialnevitiesini.com^
+||termadodad.com^
+||terminargal.com^
+||termslimemonks.com^
+||ternarymugging.top^
+||ternenilgais.com^
+||ternme.com^
+||terperbelomo.com^
+||terra8nb.com^
+||terraceevident.com^
+||terracehypnotize.com^
+||terraclicks.com^
+||terrainslive.com^
+||terralink.xyz^
+||terrapsps.com^
+||terrapush.com^
+||terrasdsdstd.com^
+||terrible-angle.pro^
+||terribledeliberate.com^
+||terrificlukewarm.com^
+||terrifyingdeveloperreschedule.com^
+||tessratans.com^
+||tesswithoughcle.com^
+||testamenttakeoutkill.com^
+||testifyconvent.com^
+||testifydiscrepancy.com^
+||testisurbian.top^
+||testsite34.com^
+||tetractsycon.uno^
+||tetryllinkage.com^
+||tetrylscullion.com^
+||tettrro.info^
+||tevdrduqq.com^
+||tevermotoriesmyst.info^
+||tewingrodents.uno^
+||texacosimkin.com^
+||texamp.com^
+||textbookmudbutterfly.com^
+||textspannerreptile.com^
+||texturedetrimentit.com^
+||tfaln.com^
+||tfbulkidn.com^
+||tffkroute.com^
+||tfiph.com^
+||tfla.xyz^
+||tfmgqdj.com^
+||tfmkdrcjpcdf.xyz^
+||tfosrv.com^
+||tgandmotivat.com^
+||tgboghbslgrkg.com^
+||tgfqtwlwts.com^
+||tgpsew.com^
+||tgsscmaxfi.com^
+||tguungdbocevnh.xyz^
+||tgvlrlof.com^
+||thaged.com^
+||thagrals.net^
+||thaickoo.net^
+||thaidrix.xyz^
+||thaidsir.xyz^
+||thaifteg.com^
+||thaighee.xyz^
+||thaignax.net^
+||thairoob.com^
+||thaistiboa.com^
+||thaitchy.net^
+||thaitingsho.info^
+||thaiwhou.com^
+||thakscholae.com^
+||thale-ete.com^
+||thalseer.xyz^
+||thalto.com^
+||thaninncoos.com^
+||thankful-conference.pro^
+||thanksgivingbilliardslight.com^
+||thanksgivingdelights.com^
+||thanksgivingdelights.name^
+||thanosofcos5.com^
+||thanot.com^
+||thanstruggling.com^
+||tharbadir.com^
+||tharenpeonize.space^
+||thathatrowthen.info^
+||thathatrowthena.com^
+||thathechoxe.com^
+||thatincidentwad.com^
+||thatshab.website^
+||thaudray.com^
+||thauftoa.net^
+||thaujauk.net^
+||thaust.com^
+||thautept.xyz^
+||thautsie.net^
+||thauzauw.xyz^
+||thaveksi.net^
+||thawbootsamplitude.com^
+||thawheek.com^
+||thayed.com^
+||thaz.xyz^
+||thbum.xyz^
+||theactualnewz.com^
+||theactualstories.com^
+||theadgateway.com^
+||theapple.site^
+||thearoids.com^
+||theatresintotales.com^
+||thebaicidylls.com^
+||thebestgame2020.com^
+||thecarconnections.com^
+||thechargenews.com^
+||thechleads.pro^
+||thechronicles2.xyz^
+||thecliffsandupo.com^
+||thecoolposts.com^
+||thecred.info^
+||thecurtainied.xyz^
+||thedentadsi24.com^
+||theedrem.xyz^
+||theekedgleamed.com^
+||theelolcuffle.top^
+||theelrou.net^
+||theenfu.com^
+||theensos.xyz^
+||theepsie.com^
+||theextensionexpert.com^
+||thefacux.com^
+||thefastpush.com^
+||thefenceanddeckguys.com^
+||thefreshposts.com^
+||theftreplica.com^
+||thegntabooed.com^
+||thegoodcaster.com^
+||thehotposts.com^
+||thehypenewz.com^
+||theirpervasivegrid.com^
+||theistregrow.tech^
+||thekromp.com^
+||theloungenet.com^
+||themeillogical.com^
+||themereplacebiopsy.com^
+||themselphenyls.com^
+||themselvesafloatmirth.com^
+||themselvesbike.com^
+||thenceafeard.com^
+||thenceextremeeyewitness.com^
+||thencemutinyhamburger.com^
+||thenewstreams.com^
+||thenicenewz.com^
+||theod-omq.com^
+||theodyscreams.store^
+||theologicallimbs.com^
+||theologicalpresentation.com^
+||theologizerg.xyz^
+||theoltoozle.com^
+||theonecdn.com^
+||theonlins.com^
+||theoryexempt.com^
+||thepeom.com^
+||theplayadvisor.com^
+||thepopads.com^
+||theprizesenses.life^
+||therapistpopulationcommentary.com^
+||therapistpresumegooseberry.com^
+||thercockremar.com^
+||therebelfasters.com^
+||therebycapablerising.com^
+||theredictatortreble.com^
+||therefinaldecided.com^
+||therefoortowa.com^
+||thereforeprecipitation.com^
+||thereforetreadvoluntarily.com^
+||therelimitless.com^
+||thereshotowner.com^
+||thereuponscare.com^
+||thertoldimnver.xyz^
+||therubiqube.com^
+||thesauruspainfully.com^
+||thescads.com^
+||theshafou.com^
+||thesisadornpathetic.com^
+||thestatueoftheap.info^
+||thetarhaw.com^
+||thetaweblink.com^
+||thetchaixoo.com^
+||thethateronjus.com^
+||thethesmah.xyz^
+||thethesmahat.com^
+||thetoptrust.com^
+||thetrendytales.com^
+||thetreuntalle.com^
+||theusualsuspects.biz^
+||theusualsuspectz.biz^
+||theweblocker.net^
+||thewhizmarketing.com^
+||thewiercopse.website^
+||thewowfeed.com^
+||thewscozier.uno^
+||theyenglory.guru^
+||theythourbonusgain.life^
+||theyunm.com^
+||thgebtibfyry.com^
+||thick-ruin.pro^
+||thickbabysittinghandled.com^
+||thickcharityinextricable.com^
+||thicketindisputableimpeccable.com^
+||thickshortwage.com^
+||thidroam.com^
+||thiefbeseech.com^
+||thierryshears.live^
+||thievesanction.com^
+||thighargu.com^
+||thighpoker.com^
+||thikraik.net^
+||thillylivre.com^
+||thilsaig.xyz^
+||thinadmitted.com^
+||thingrealtape.com^
+||thingsdetermine.com^
+||thinkingpresentimenteducational.com^
+||thinkingwindfallhandkerchief.com^
+||thinksuggest.org^
+||thinneddarns.digital^
+||thirab.com^
+||thiraq.com^
+||third-tracking.com^
+||thirdreasoncomplex.com^
+||thirteenthadjectivecleaning.com^
+||thirtyeducate.com^
+||thirtyfellowpresumptuous.com^
+||thiscdn.com^
+||thiscombinationdecorated.com^
+||thisiswaldo.com^
+||thisisyourprize.site^
+||thislaboratory.com^
+||thitsiryke.live^
+||thivelunliken.com^
+||thkxtvklfdeget.com^
+||thnqemehtyfe.com^
+||thoaltie.net^
+||thoamike.xyz^
+||thoartuw.com^
+||thodon.com^
+||thofandew.com^
+||thofteert.com^
+||thoges.com^
+||tholor.com^
+||thomasbarlowpro.com^
+||thompaur.com^
+||thompoot.com^
+||thongaspredo.com^
+||thonggrassdependant.com^
+||thongivi.net^
+||thongrooklikelihood.com^
+||thongsalhagi.com^
+||thongwarily.com^
+||thoobsix.xyz^
+||thoogleeds.com^
+||thoorest.com^
+||thooruwee.com^
+||thootsuh.xyz^
+||thorgeergiwi.com^
+||thornyinitial.pro^
+||thoroughfarefeudalfaster.com^
+||thoroughlyshave.com^
+||thorpeseriouslybabysitting.com^
+||thorsado.net^
+||thoseads.com^
+||thosecandy.com^
+||thosemethod.pro^
+||thoudroa.net^
+||thouedslipped.life^
+||thoughtfulcontroversy.com^
+||thoughtfullyaskedscallop.com^
+||thoughtleadr.com^
+||thouhoom.xyz^
+||thoupsuk.net^
+||thousandfalteralbeit.com^
+||thousandfixedlyyawn.com^
+||thoved.com^
+||threatdetect.org^
+||threatenedorientalavailable.com^
+||threateningeleven.com^
+||threatotherwise.com^
+||threeinters.com^
+||threerfdfgourgold.com^
+||threwdownth.xyz^
+||thrillingblindly.com^
+||thrillingpairsreside.com^
+||thrivebuisson.top^
+||thrivenrewired.life^
+||thriveradioactivecheers.com^
+||throatpoll.com^
+||throbscalpelaffirm.com^
+||throgetfd.com^
+||throngsarseno.com^
+||throughdazzlesponge.com^
+||throughdfp.com^
+||thrtle.com^
+||thruss.com^
+||thrustlumpypulse.com^
+||thterras.com^
+||ththinleavesofe.com^
+||thtpxwnqfx.com^
+||thuac.com^
+||thuah.com^
+||thuanmimamsa.com^
+||thuant.com^
+||thubanoa.com^
+||thuliagum.com^
+||thulrlidos.com^
+||thumeezy.xyz^
+||thump-night-stand.com^
+||thumpdrownthreat.com^
+||thumpssleys.com^
+||thunderhead.com^
+||thunderous-request.pro^
+||thurnflfant.com^
+||thursailso.com^
+||thusdrink.com^
+||thusenteringhypocrisy.com^
+||thussr.com^
+||thutes.com^
+||thutsish.xyz^
+||thycantyoubelike.com^
+||thygrepuwo.pro^
+||thymeneoctic.digital^
+||thymomamunify.top^
+||thyouglasuntilj.info^
+||thyroidaketon.com^
+||ti583.com^
+||tianmel.xyz^
+||tiaraedmessing.uno^
+||tiarasorthose.website^
+||tibacta.com^
+||tibcpowpiaqv.com^
+||tibertannoy.com^
+||tic-tic-bam.com^
+||tic-tic-toc.com^
+||ticaadjuk.xyz^
+||ticaframeofm.xyz^
+||ticalfelixstownru.info^
+||ticalwhichhereal.info^
+||tick-tock.net^
+||tickconventionaldegradation.com^
+||ticketswinning.com^
+||tickleinclosetried.com^
+||tickmatureparties.com^
+||ticrite.com^
+||tictacfrison.com^
+||tictastesnlynot.com^
+||tictocswended.com^
+||tidaltv.com^
+||tidalwavetrx.com^
+||tideairtight.com^
+||tidigrated.space^
+||tidint.pro^
+||tidual.com^
+||tidy-mark.com^
+||tidyclient.pro^
+||tidyinglionesscoffee.com^
+||tidyingpreludeatonement.com^
+||tidyinteraction.pro^
+||tiemerry.com^
+||tierbignews.com^
+||tiffanypinworm.tech^
+||tiffingsubband.com^
+||tifkxxoqpuuvd.xyz^
+||tifstudiousyo.info^
+||tifybecausingp.com^
+||tigely.com^
+||tigerpush.net^
+||tightendescendantcuddle.com^
+||tighterstarringsinking.com^
+||tightervarying.com^
+||tightsaturdayi.com^
+||tignuget.net^
+||tigraiosar.space^
+||tigrisbewray.life^
+||tihursoa.net^
+||tiijdxto.com^
+||tiledissipatelocum.com^
+||tilesmuzarab.com^
+||tilltucked.com^
+||tilpahaidance.space^
+||tiltgardenheadlight.com^
+||tilttrk.com^
+||tiltwin.com^
+||tilyerholeman.com^
+||time4news.net^
+||timecrom.com^
+||timedvichy.com^
+||timeforagreement.com^
+||timelymongol.com^
+||timeone.pro^
+||timesresidential.com^
+||timesroadmapwed.com^
+||timetablewearmatrix.com^
+||timetoagree.com^
+||timingbitternessgreasy.com^
+||timoggownduj.com^
+||timot-cvk.info^
+||timpanosheng.com^
+||timsef.com^
+||timtamti.net^
+||tinacorners.xyz^
+||tinbuadserv.com^
+||tingedpapyrin.guru^
+||tingeedy.xyz^
+||tingexceleler.com^
+||tingledpredy.com^
+||tinkermockingmonitor.com^
+||tinkerwidth.com^
+||tinkhvy.uno^
+||tinkletemporalbuy.com^
+||tinmanernst.com^
+||tinsupposedlycinnamon.com^
+||tinsus.com^
+||tintedparticular.com^
+||tintersloggish.com^
+||tionakasulbac.net^
+||tionininanceena.info^
+||tipcartoleron.com^
+||tipcatscarola.com^
+||tipcupids.com^
+||tiprd.xyz^
+||tipsembankment.com^
+||tipslyrev.com^
+||tiptoesstbd.com^
+||tiptoptube.com^
+||tipupgradejack.com^
+||tiqavcjxjn.com^
+||tiredbishop.com^
+||tiredomlovered.com^
+||tiresomemuggyeagerly.com^
+||tiringinadmissiblehighlight.com^
+||tirosagalite.com^
+||tisate.com^
+||tissuecameallowing.com^
+||tissuespectrumadulthood.com^
+||tisszhb.cn^
+||titanads1.com^
+||titanads2.com^
+||titanads3.com^
+||titanads4.com^
+||titanads5.com^
+||titanicmaximumlaboratory.com^
+||titanictooler.top^
+||titary.com^
+||titheddenials.com^
+||tithewtog.com^
+||titlerwilhelm.com^
+||titlin.com^
+||titoaktop.com^
+||titsandtits.com^
+||tittyptinoid.com^
+||titvrbob.xyz^
+||tivatingotherem.info^
+||tivvsaunec.com^
+||tiwhaiph.net^
+||tiwouboa.com^
+||tixir.xyz^
+||tizadumbed.com^
+||tjavravj.com^
+||tjgpeswdkrym.com^
+||tjhpsylyxdfov.xyz^
+||tjnvqptv.com^
+||tjuhdrm.com^
+||tjxfkmlhubh.com^
+||tkaqlvqjnn.com^
+||tkbo.com^
+||tkcareqvptjwhie.xyz^
+||tkickhhylnvm.com^
+||tkidcigitrte.com^
+||tkieqbqxgxrvhqe.xyz^
+||tkkbcwrmwfyymfo.xyz^
+||tkqjiukbtjboub.com^
+||tkyzzjfpiqj.com^
+||tl2go.com^
+||tleboywhowa.com^
+||tlivgsvwkaysva.xyz^
+||tllfouwvkqza.com^
+||tlolaxalxdk.com^
+||tlootas.org^
+||tlrkcj17.de^
+||tluicnvqxbjdt.com^
+||tlvkywwnuvgtq.com^
+||tlwixvejx.xyz^
+||tlxkomrhkl.com^
+||tlybabet.com^
+||tlysearchingforanopt.info^
+||tlznblypsyyr.com^
+||tm5kpprikka.com^
+||tmb5trk.com^
+||tmematapyramid.space^
+||tmfkuesmlpto.com^
+||tmftsdjyahbhi.com^
+||tmh4pshu0f3n.com^
+||tmjhdyghjm.com^
+||tmjididaqbom.com^
+||tmnbocewmddu.com^
+||tmnsstf.com^
+||tmrjaghtledm.com^
+||tmrjmp.com^
+||tmyzer.com^
+||tncomg.com^
+||tncred.com^
+||tneca.com^
+||tnhaebl.com^
+||tniupjzpmb.com^
+||tnjsbbt.com^
+||tnmmfgilvrjivxk.xyz^
+||tnpads.xyz^
+||tntgfyivhgz.com^
+||tnudztz.com^
+||toabaise.net^
+||toabuck.xyz^
+||toaduroo.xyz^
+||toaglaun.xyz^
+||toaglegi.com^
+||toaioi.lol^
+||toaioi.xyz^
+||toajephu.com^
+||toapodazoay.com^
+||toasterbutler.com^
+||toastspinner.com^
+||toateeli.net^
+||tobaitsie.com^
+||tobaltoyon.com^
+||toboads.com^
+||tobwcdovmfthb.xyz^
+||toccatamotific.com^
+||todaysbestsellers.com^
+||toddernovas.digital^
+||toddlecausebeeper.com^
+||toddydelayer.com^
+||todhamilton.pro^
+||toeapesob.com^
+||toeholdbarrack.life^
+||toenaildemand.com^
+||toenailmutenessalbert.com^
+||toenailplaywright.com^
+||toenailtrishaw.com^
+||toeornbcfj.com^
+||toftakie.com^
+||toftheca.buzz^
+||toftsrollers.digital^
+||togasunwiser.com^
+||togenron.com^
+||togetherinvitation.com^
+||toglooman.com^
+||togranbulla.com^
+||togtholism.com^
+||toherburked.com^
+||tohimselfash.xyz^
+||toiletallowingrepair.com^
+||toiletapparel.com^
+||toiletunlikely.com^
+||tokenads.com^
+||tokenvolatilebreaker.com^
+||tokofyttes.com^
+||tokyoredcirce.com^
+||tolacdn.online^
+||toldclassifiedhardware.com^
+||tolecingula.com^
+||tolerableinflectionkazan.com^
+||tollcondolences.com^
+||tollyeric.com^
+||tolrock.com^
+||toluatebrazee.com^
+||toluenehoedown.com^
+||toluenemoody.guru^
+||tolyafbnjt9dedjj10.com^
+||tomatohackblobs.com^
+||tomawilea.com^
+||tombclients.com^
+||tomekas.com^
+||tomeleafs.com^
+||tomepermissible.com^
+||tominwigan.top^
+||tomladvert.com^
+||tommiesuntewed.com^
+||tomornpinjane.com^
+||tomsjousts.life^
+||tonapplaudfreak.com^
+||toncooperateapologise.com^
+||toneernestport.com^
+||tonemedia.com^
+||tonesprotectioncard.com^
+||tonganserried.life^
+||tongsgodforsaken.com^
+||tonicdivedfounded.com^
+||tonicelement.digital^
+||tonicneighbouring.com^
+||toninjaska.com^
+||tonqvqwtvksh.com^
+||tonsilyearling.com^
+||tontent.powzers.lol^
+||tontrinevengre.com^
+||toogeepaun.com^
+||toolsthwartgrim.com^
+||toolsyjejune.com^
+||toolsyjejunen.com^
+||toolughitilagu.com^
+||toomeepi.xyz^
+||toonoost.net^
+||toorebutheh.xyz^
+||toorphanage.com^
+||tooshecu.com^
+||toothacheformer.com^
+||toothbrushconceitedsemi.com^
+||toothbrushlimbperformance.com^
+||toothpasteginnysorrow.com^
+||toothtranquilizerdeliverance.com^
+||toottuleringv.info^
+||toovoala.net^
+||top-clips.space^
+||top-offers1.com^
+||top-performance.best^
+||top-performance.club^
+||top-performance.top^
+||top-performance.work^
+||topadbid.com^
+||topadsservices.com^
+||topadvdomdesign.com^
+||topatincompany.com^
+||topazfaugh.com^
+||topbestscoreapp.com^
+||topbetfast.com^
+||topblockchainsolutions.nl^
+||topcastshoran.space^
+||topclips.today^
+||topcreativeformat.com^
+||topdailynewz.com^
+||topdisplaycontent.com^
+||topdisplayformat.com^
+||topdisplaynetwork.com^
+||topeditsolutions.com^
+||topflownews.com^
+||topfreenewsfeeds.com^
+||topiccorruption.com^
+||toplinkz.ru^
+||topmoststramp.com^
+||topmusicalcomedy.com^
+||topnews-24.com^
+||topnewsfeeds.net^
+||topperformance.xyz^
+||toppics.info^
+||toppingfascili.tech^
+||toppornvids.com^
+||topprofitablecpm.com^
+||topprofitablegate.com^
+||toprevenuecpmnetwork.com^
+||toprevenuegate.com^
+||toprevenuenetwork.com^
+||topsummerapps.net^
+||topswp.com^
+||topvids.email^
+||topvids.info^
+||topvids.online^
+||topvids.org^
+||topvids.space^
+||toquetbircher.com^
+||torioluor.com^
+||toromclick.com^
+||torooptudaiz.com^
+||tororango.com^
+||torpsol.com^
+||torrango.com^
+||torrent-protection.com^
+||torrentprotection.com^
+||torrentsafeguard.com^
+||torselinly.com^
+||toselfless.com^
+||tosfeed.com^
+||toshlygappier.guru^
+||toskmisway.com^
+||tosolroa.xyz^
+||tosspowers.com^
+||tosssix.com^
+||tossspecifytill.com^
+||tosuicunea.com^
+||totadblock.com^
+||totalab.online^
+||totalactualnewz.com^
+||totaladblock.com^
+||totalcoolblog.com^
+||totalfreshwords.com^
+||totallifeguru.com^
+||totalnicefeed.com^
+||totalnicestories.com^
+||totalsatisfactorily.com^
+||totalwowblog.com^
+||totalwowfeed.com^
+||totalwownews.com^
+||totemcash.com^
+||totentacruelor.com^
+||totientyakshi.website^
+||totlnkbn.com^
+||totlnkcl.com^
+||totogetica.com^
+||totoro2011.xyz^
+||totoromeeds.life^
+||touchtamilic.com^
+||tougherrancor.website^
+||toughtoxacid.com^
+||toumnahrafale.com^
+||toupsonie.com^
+||touptaiw.xyz^
+||touracopilaf.com^
+||touracostephe.com^
+||tourismpatron.com^
+||tournamentdouble.com^
+||tournamentfosterchild.com^
+||tournamentfraydirection.com^
+||tournamentsevenhung.com^
+||touroumu.com^
+||toutedwaeness.guru^
+||toutheesosu.com^
+||toutingmatelow.com^
+||touzia.xyz^
+||tovanillitechan.com^
+||tovespiquener.com^
+||towardsmainlandpermissible.com^
+||towardsturtle.com^
+||towdpdn.store^
+||towerdesire.com^
+||towersalighthybrids.com^
+||townrusisedprivat.info^
+||towtinsel.com^
+||toxaminbowtell.com^
+||toxemiaslier.com^
+||toxicfluency.com^
+||toxicrookie.com^
+||toyjofkkcdyr.com^
+||toykifojsyufdba.xyz^
+||toykiykmjbr.xyz^
+||toymenbenes.uno^
+||toyosbullpen.com^
+||toysrestrictcue.com^
+||tozoruaon.com^
+||tozuoi.xyz^
+||tp1jcgl644jk.com^
+||tpbsxcsa.com^
+||tpcserve.com^
+||tpdads.com^
+||tpeoplesho.info^
+||tpjageoaehyir.com^
+||tplpages.com^
+||tpmedia-reactads.com^
+||tpmr.com^
+||tpn134.com^
+||tpopularcldfa.co^
+||tpopularcldfb.co^
+||tposkglvqookv.xyz^
+||tpydhykibbz.com^
+||tpyxplkcap.top^
+||tpzzdrxnp.com^
+||tqgrrfssodfo.com^
+||tqkfrdcwht.xyz^
+||tqlkg.com^
+||tqmibkqlwqdysi.com^
+||tqrjlqt.com^
+||tqwxtglpr.com^
+||tqxwilx.com^
+||tr-boost.com^
+||tr-monday.xyz^
+||tr-rollers.xyz^
+||tr-usual.xyz^
+||tr563.com^
+||trabinarnizies.com^
+||tracedexplore.com^
+||tracepath.cc^
+||track-victoriadates.com^
+||track.totalav.com^
+||track4ref.com^
+||trackad.cz^
+||trackad2.com^
+||trackapi.net^
+||tracker-2.com^
+||tracker-tds.info^
+||tracker-tds.site^
+||tracker-tds2.site^
+||tracker19875.space^
+||tracker2.space^
+||trackeverything.co^
+||trackingmembers.com^
+||trackingrouter.com^
+||trackingshub.com^
+||trackingtraffo.com^
+||trackmundo.com^
+||trackpshgoto.win^
+||trackpush.com^
+||tracks20.com^
+||tracksfaster.com^
+||trackspeeder.com^
+||trackstracker.com^
+||tracksystem.online^
+||tracktds.com^
+||tracktilldeath.club^
+||tracktraf.com^
+||trackvbmobs.click^
+||trackvol.com^
+||trackvoluum.com^
+||trackwilltrk.com^
+||trackytrack02.com^
+||tracot.com^
+||tractorfoolproofstandard.com^
+||tractusoutsum.com^
+||tradbypass.com^
+||trade46-q.com^
+||tradeadexchange.com^
+||trading21s.com^
+||tradingken.com^
+||tradingpancreasdevice.com^
+||traditionallymeasuringwire.com^
+||traditionallyobjectlessblinked.com^
+||traff01traff02.site^
+||traff0221.com^
+||traffdaq.com^
+||traffic.adexprtz.com^
+||traffic.club^
+||traffic.name^
+||trafficad-biz.com^
+||trafficbass.com^
+||trafficborder.com^
+||trafficbottomgrains.com^
+||trafficdok.com^
+||trafficfactory.biz^
+||traffichunt.com^
+||trafficircles.com^
+||trafficjunky.net^
+||trafficlide.com^
+||trafficmediaareus.com^
+||trafficmoon.com^
+||trafficmoose.com^
+||trafficportsrv.com^
+||trafficshop.com^
+||traffictraders.com^
+||trafogon.com^
+||trafyield.com^
+||tragency-clesburg.icu^
+||tragicbeyond.com^
+||tragicleftago.com^
+||traglencium.com^
+||traiah.com^
+||trailssuecism.com^
+||trainedhomecoming.com^
+||trainedpiano.com^
+||trainsrolldrunken.com^
+||traiss.com^
+||traitorpenthouse.com^
+||trakaff.net^
+||traktrafficflow.com^
+||tramcontact.com^
+||tramplayeranyd.info^
+||trampplantacre.com^
+||tramshirethf.xyz^
+||trandlife.info^
+||tranquilizerproposedattribute.com^
+||transactionlumber.com^
+||transactionsparasite.com^
+||transcriptobligegenerations.com^
+||transferloitering.com^
+||transformationwrecking.com^
+||transformignorant.com^
+||transitionfrenchdowny.com^
+||translationbuddy.com^
+||transmitterincarnatebastard.com^
+||transmittermerchant.com^
+||transportationgelatinecontingent.com^
+||traord.com^
+||trapdoorstepsex.com^
+||trapexpansionmoss.com^
+||trarie.com^
+||trashdisguisedextension.com^
+||tratbc.com^
+||traumatizedenied.com^
+||traung.com^
+||traveladvertising.com^
+||travelingbeggarlyregions.com^
+||travelingfreshman.com^
+||travelledelkremittance.com^
+||travelledpropagandaconveniences.com^
+||travellerkalgan.com^
+||travelscream.com^
+||traveltop.org^
+||traversefloral.com^
+||travescorylus.com^
+||travidia.com^
+||trawahdh2hd8nbvy09.com^
+||trawibosxlc.com^
+||trblocked.com^
+||trc85.com^
+||trccmpnlnk.com^
+||trck.wargaming.net^
+||trckswrm.com^
+||trdnewsnow.net^
+||treasonemphasis.com^
+||treasured-dad.pro^
+||treasureravenvulgar.com^
+||treatrechurn.uno^
+||treatyaccuserevil.com^
+||trebghoru.com^
+||trecurlik.com^
+||trecut.com^
+||treehundredarmament.com^
+||treenghsas.com^
+||treepullmerriment.com^
+||trehtnoas.com^
+||treitrehagdin.top^
+||treitrejewfish.com^
+||treklizard.com^
+||trekstereo.com^
+||trellian.com^
+||tremblingpitcher.com^
+||tremendous-tour.pro^
+||tremendouspresentation.pro^
+||tremorhub.com^
+||trendbuffseparation.com^
+||trendmouthsable.com^
+||trenhsmp.com^
+||trenpyle.com^
+||trespasspiteous.com^
+||tretisretired.com^
+||tretmumbel.com^
+||trewnhiok.com^
+||treyyejhcwyhn.com^
+||trftopp.biz^
+||tri.media^
+||triadmedianetwork.com^
+||trialsreticence.com^
+||tribalfusion.com^
+||tribalstrived.com^
+||tributesexually.com^
+||trickerseasan.top^
+||tricklesmartdiscourage.com^
+||trickyneotits.com^
+||trienestooth.com^
+||trifaosmous.com^
+||triflecardslouse.com^
+||trifletonightanguish.com^
+||triflingzenithenergetic.com^
+||trigami.com^
+||triggerfrontagefaultless.com^
+||triggersathlete.com^
+||triggersinclude.com^
+||triglyheiled.website^
+||trigscocos.com^
+||trikerboughs.com^
+||trim-goal.com^
+||trimpur.com^
+||trinitydiverge.com^
+||trinitywishful.com^
+||triodiaimprasa.live^
+||tripledeliveryinstance.com^
+||tripotbespit.digital^
+||tripphloems.com^
+||tripsstyle.com^
+||tripsthorpelemonade.com^
+||tristeacream.uno^
+||tritat3.info^
+||tritishnowy.live^
+||triumphantplace.com^
+||trizonemellite.com^
+||trjxehoxjcbxvuc.xyz^
+||trk-aspernatur.com^
+||trk-consulatu.com^
+||trk-epicurei.com^
+||trk-imps.com^
+||trk-vod.com^
+||trk.nfl-online-streams.live^
+||trk023.com^
+||trk3000.com^
+||trk4.com^
+||trkad.network^
+||trkerupper.com^
+||trkinator.com^
+||trkings.com^
+||trkk4.com^
+||trklnks.com^
+||trklvs.com^
+||trkn1.com^
+||trknk.com^
+||trkrdel.com^
+||trkrspace.com^
+||trks.us^
+||trktcmdqko.com^
+||trkunited.com^
+||trlxcf05.com^
+||trmit.com^
+||trmnsite.com^
+||trmobc.com^
+||trodpigbays.com^
+||troduc.com^
+||trokemar.com^
+||trolleydemocratic.com^
+||trolleydryerfunds.com^
+||trollsvide.com^
+||trollwarningpaws.com^
+||tromairiememasdaq.com^
+||trombocrack.com^
+||tronads.io^
+||troncomelets.com^
+||tronmachi.com^
+||troolyhonks.com^
+||troopslinecut.website^
+||troozescript.store^
+||tropbikewall.art^
+||tropinpodgily.life^
+||tropylskins.com^
+||trotconceivedtheological.com^
+||trothko.com^
+||trotolhonor.com^
+||troublebarbara.com^
+||troubled-stress.com^
+||troutrequires.com^
+||trowingpaba.website^
+||trpohkfedwway.xyz^
+||trpop.xyz^
+||trribbup.xyz^
+||trrmmxjst.com^
+||trsbmiw.com^
+||trskwvl.com^
+||trtjigpsscmv9epe10.com^
+||trtxdtigvap.com^
+||truanet.com^
+||truantslaughterbrew.com^
+||truantsnarestrand.com^
+||trubudoll.uno^
+||truceforensicswaterfall.com^
+||trucemallow.website^
+||true2file.com^
+||trulyunderestimatediscard.com^
+||truoqtqjyxes.com^
+||trushittria.com^
+||trust.zone^
+||trustaffs.com^
+||trustbummler.com^
+||trustedcpmrevenue.com^
+||trustedgatetocontent.com^
+||trustedpeach.com^
+||trustedstream.life^
+||trustedzone.info^
+||trusterejecta.com^
+||trustlearningclearly.com^
+||trustmaxonline.com^
+||trustworthyturnstileboyfriend.com^
+||trustyable.com^
+||trustyfine.com^
+||truthful-quote.pro^
+||truthfulstem.com^
+||truthordarenewsmagazine.com^
+||truthwassadl.org^
+||truthwassadl.xyz^
+||tryingacquaintance.com^
+||trymynewspirit.com^
+||trymysadoroh.site^
+||trynhassd.com^
+||trythe-letsketos.com^
+||trytipemo.com^
+||tsandycateup.com^
+||tsapphires.buzz^
+||tsardagger.com^
+||tsarkinds.com^
+||tsatwushcyiihh.com^
+||tseywo.com^
+||tsfpvcpdpofbc.com^
+||tsiwoulukdli.xyz^
+||tsiwqtng8huauw30n.com^
+||tslomhfys.com^
+||tsml.fun^
+||tspops.com^
+||tsrrbok.com^
+||tssandycateup.com^
+||tstats-13fkh44r.com^
+||tswmel.com^
+||tswtwufqx.com^
+||tsyfnhd.com^
+||tsyndicate.com^
+||tszuhznuteoxkx.com^
+||ttbm.com^
+||ttfpoyrbalyfigs.xyz^
+||ttgmjfgldgv9ed10.com^
+||tthefireanddrs.work^
+||ttidstfuqhj.xyz^
+||ttney.com^
+||ttnrd.com^
+||ttoc8ok.com^
+||ttsycqxjvgrya.xyz^
+||ttzmedia.com^
+||tuateramiking.com^
+||tubbeckfresher.life^
+||tubberlo.com^
+||tubby-delivery.pro^
+||tubecoast.com^
+||tubecorp.com^
+||tubecup.net^
+||tubeelite.com^
+||tubeformula.com^
+||tubehole.com^
+||tubemov.com^
+||tubencyclopaediaswine.com^
+||tubenest.com^
+||tubepure.com^
+||tuberay.com^
+||tuberise.com^
+||tubeskagos.life^
+||tubestrap.com^
+||tubeultra.com^
+||tuboaxen.com^
+||tubroaffs.org^
+||tubsougn.com^
+||tubury.com^
+||tucess.com^
+||tuckerheiau.com^
+||tucktunnelsnowman.com^
+||tuddicijloxb.com^
+||tuench.com^
+||tuesdayfetidlit.com^
+||tuffetenolize.com^
+||tuffoonincaged.com^
+||tufteraureous.digital^
+||tugarmyindistinct.com^
+||tuglikevertigo.com^
+||tugust.com^
+||tuhwjkesxo.com^
+||tuitionpancake.com^
+||tujofclqgazqa.com^
+||tujourda.net^
+||tukeelsy.com^
+||tukulordimera.com^
+||tulasitoughie.com^
+||tuleceti.com^
+||tulipsameedge.com^
+||tumblebit.com^
+||tumblebit.org^
+||tumbleobjectswedding.com^
+||tumbleroutlook.com^
+||tumfiegoblins.life^
+||tummeddomicil.space^
+||tummingfass.com^
+||tumri.net^
+||tumultmarten.com^
+||tumultuserscheek.com^
+||tundrapinjane.com^
+||tunedecided.com^
+||tunerschold.com^
+||tuneshave.com^
+||tunf12.info^
+||tuningsdammed.com^
+||tunitytostara.info^
+||tunnelbuilder.top^
+||tunnelstitchfinal.com^
+||tupwiwm.com^
+||tuquesrefuser.website^
+||tur-tur-key.com^
+||turbanconstituent.com^
+||turbanmadman.com^
+||turbansembiid.space^
+||turbansour.com^
+||turboadv.com^
+||turbocap.net^
+||turbotaedile.com^
+||turbotrck.art^
+||turbulent-bedroom.pro^
+||turdauch.xyz^
+||turdsarnatta.com^
+||tureukworektob.info^
+||turfedtaboret.com^
+||turfinggneiss.com^
+||turkeybegan.com^
+||turktransparent.com^
+||turmitweir.com^
+||turmoilragcrutch.com^
+||turncdn.com^
+||turnhub.net^
+||turnminimizeinterference.com^
+||turnreview.com^
+||turnstilespacious.com^
+||turnwaystevan.website^
+||turpentineseminarconfer.com^
+||tuscanyaskant.com^
+||tuskercampe.life^
+||tusno.com^
+||tutphiarcox.com^
+||tutsterblanche.com^
+||tutvp.com^
+||tuudrwnbglqqvm.com^
+||tuwaqtjcood.com^
+||tuxbpnne.com^
+||tuxedochard.com^
+||tuxycml.com^
+||tuxzlhrwejszu.com^
+||tv1s4d6klh4n.com^
+||tvbsfmswrjap.com^
+||tvdbspojay.com^
+||tvprocessing.com^
+||tvqqrycnutpp.com^
+||tvvon.coreforger.top^
+||tvxetxjvobm.com^
+||tvxrpdfgitlbsb.xyz^
+||twaonhcjwoaouj.com^
+||twazzyoidwlfe.com^
+||tweeseconable.website^
+||twelfthdistasteful.com^
+||twelvethighpostal.com^
+||twentiethparticipation.com^
+||twentycustomimprovement.com^
+||twentyexaggerate.com^
+||twentyqueen.com^
+||twerwew.org^
+||twigdose.com^
+||twiggycosmoid.com^
+||twigstandardexcursion.com^
+||twilightsentiments.com^
+||twinadsrv.com^
+||twinedabider.guru^
+||twinfill.com^
+||twinkle-fun.net^
+||twinklecourseinvade.com^
+||twinnercarrat.digital^
+||twinpinenetwork.com^
+||twinrdack.com^
+||twinrdsrv.com^
+||twinrdsyn.com^
+||twinrdsyte.com^
+||twinrtb.com^
+||twinsoflave.com^
+||twinsrv.com^
+||twinstanglebroken.com^
+||twirlsengaud.life^
+||twistads.com^
+||twistconcept.com^
+||twistcrevice.com^
+||twisteryirr.com^
+||twisthello.com^
+||twithdifyferukentas.info^
+||twittad.com^
+||twkcbfwam.com^
+||twlmzwaec.com^
+||twohrxbrns.com^
+||twokidjay.com^
+||twovqti.com^
+||twpasol.com^
+||twrencesprin.info^
+||twtad.com^
+||twvybupqup.xyz^
+||twwp3.top^
+||txcmjo.com^
+||txhrnluuyt.com^
+||txouliypi.com^
+||txrhpjddhbal.com^
+||txtcompert.com^
+||txwhfmxlmu.com^
+||txzaazmdhtw.com^
+||tyatedgrogs.xyz^
+||tychismfeasts.com^
+||tychon.bid^
+||tydevelelastic.com^
+||tydouke.com^
+||tygotwakinrollet.xyz^
+||tyhlwigp.com^
+||tyhpksuvshiiwo.xyz^
+||tyifdiff.xyz^
+||tyingentered.com^
+||tylfgkf.com^
+||tylocintriones.com^
+||tylosischewer.com^
+||tynt.com^
+||typablecyclide.com^
+||typerealisepredict.com^
+||typescoordinate.com^
+||typiccor.com^
+||typiconrices.com^
+||typierknyaz.website^
+||tyqptghilt.com^
+||tyract.com^
+||tyranbrashore.com^
+||tyrds.com^
+||tyresleep.com^
+||tyromasghosted.com^
+||tyrotation.com^
+||tyserving.com^
+||tystnnnrluv.com^
+||tytlementwre.info^
+||tytothwarts.com^
+||tytyeastfeukufun.info^
+||tywdchppfgds.xyz^
+||tzaho.com^
+||tzaristdiploma.com^
+||tzegilo.com^
+||tzgygfy.com^
+||tzrlfzwyicvj.com^
+||tzugumojfm.com^
+||tzuhumrwypw.com^
+||tzvojcc.com^
+||tzvroyuhmkvlsa.com^
+||tzyjotwoocku.com^
+||u0054.com^
+||u0064.com^
+||u1trkqf.com^
+||u21drwj6mp.com^
+||u29qnuav3i6p.com^
+||u595sebqih.com^
+||u9axpzf50.com^
+||uaaftpsy.com^
+||uads.cc^
+||uads.info^
+||uads.pw^
+||uads.store^
+||uahpycewbx.com^
+||uanbpywrumpuj.com^
+||uaputgtwlhkmtr.com^
+||ubadzufyfjcd.com^
+||ubbfpm.com^
+||uberouspolitei.com^
+||ubiirddtnmja.com^
+||ubilinkbin.com^
+||ubish.com^
+||uboungera.com^
+||ubthyoitrr.com^
+||ubuwwswnceqmjtg.xyz^
+||ubygsworlow.com^
+||ucationinin.info^
+||ucationininancee.info
+||ucconn.live^
+||ucdn.website^
+||ucgnawffqess.xyz^
+||ucgxnstr.com^
+||ucheephu.com^
+||uchkzmzehr.com^
+||uchxtxel.com^
+||uckbcroqkb.com^
+||uckbrokennailsa.xyz^
+||ucocesisfulyly.info^
+||ucqbhkrzsqpqmg.com^
+||ucteqibnblrjhpb.com^
+||ucvscfrtrnbr.xyz^
+||udarem.com^
+||udbaa.com^
+||udderexplosion.com^
+||udegepq.com^
+||udetqwj.com^
+||udfwwbkxremv.xyz^
+||udinugoo.com^
+||udlqdkqdfymq.com^
+||udmserve.net^
+||udookrou.com^
+||udpauawx.xyz^
+||udraokrou.com^
+||uduhytyllobm.com^
+||udwgzninhil.com^
+||ueaynogiwgqr.com^
+||uedvxswwfub.com^
+||uejntsxdffp.com^
+||uekish.com^
+||uel-uel-fie.com^
+||uelllwrite.com^
+||uersfa.com^
+||ueuodgnrhb.com^
+||ufaexpert.com^
+||ufeevhhnjilfeo.com^
+||ufgkypfhervr.com^
+||ufinkln.com^
+||ufnetttvsnv.com^
+||ufnsyfry.com^
+||ufoomals.net^
+||ufpcdn.com^
+||ufptkylyfa.com^
+||ufsbauge.com^
+||ufzqrmflbnlze.com^
+||ugahutoa.com^
+||ugalia.com^
+||ugawnotrjj.xyz^
+||ugdffrszmrapj.com^
+||ugeewhee.xyz^
+||ugekq.icu^
+||ughhimtoy.com^
+||ughtcallmeocapl.xyz^
+||ugkmjojhgtqcohf.com^
+||uglieraccoll.com^
+||uglimontana.digital^
+||ugly-charity.pro^
+||ugly-dance.pro^
+||uglylearnt.com^
+||uglypath.pro^
+||ugopkl.com^
+||ugostlyhewo.xyz^
+||ugricmoist.com^
+||ugripaid.com^
+||ugroocuw.net^
+||ugyeon.com^
+||ugyplysh.com^
+||uhdokoq5ocmk.com^
+||uhedsplo.com^
+||uhegarberetrof.com^
+||uheprwhlrvuqlog.com^
+||uhfdsplo.com^
+||uhjrjhgthc.com^
+||uhllogeum.digital^
+||uhodsplo.com^
+||uhpdsplo.com^
+||uhsmmaq4l2n5.com^
+||uhsvkgwess.com^
+||uhxmyqyevkcvit.com^
+||ui02.com^
+||uidhealth.com^
+||uidhome.com^
+||uidsync.net^
+||uimserv.net^
+||uingroundhe.com^
+||uioubveq.com^
+||uittupxr.com^
+||ujasrnguqkdla.xyz^
+||ujautifuleed.xyz^
+||ujeejoan.net^
+||ujevaice.com^
+||ujhhfgbbhs.com^
+||ujidhusjvmbfv.com^
+||ujjxwbfgpfymc.xyz^
+||ujlrvzfws.com^
+||ujooshog.com^
+||ujscdn.com^
+||ujtketerrehepren.xyz^
+||ujurupa.com^
+||ujznabh.com^
+||ukaugesh.com^
+||ukayhvbyrk.com^
+||ukcomparends.pro^
+||ukdliketobepa.monster^
+||ukekchti.com^
+||ukennailsandoth.xyz^
+||ukentaspe.xyz^
+||ukenthascaptureu.info^
+||ukentsiwoulukdlik.info^
+||ukfareputfea.xyz^
+||ukidiayddbshfl.com^
+||ukiyoyechromy.com^
+||ukizeiasninan.info^
+||uklgakwqy.com^
+||ukmlastityty.info^
+||ukndaspiratioty.info^
+||uknsyenergyfle.info^
+||ukouckik.com^
+||ukqgrxlxvockj.xyz^
+||ukrait.com^
+||ukrkskillsombine.info^
+||uktureukworekt.info^
+||ul8seok7w5al.com^
+||ulalrars.net^
+||ulathana.com^
+||ulbackgroundandiy.info^
+||ulched.com^
+||uldthinkhimu.info^
+||uldthinkhimunpr.info^
+||uleptupt.xyz^
+||uleringvoice.xyz^
+||ulesxbo.com^
+||uleubyvjcttuqf.xyz^
+||ulexiteoutspit.com^
+||ulmmmvjfbbmk.com^
+||ulmoyc.com^
+||ulmpyqgfqkffe.com^
+||ulmujev.com^
+||ulnhlnsw.com^
+||ulnidkdlaxclpo.com^
+||uloadeeksurvey.space^
+||uloaludu.xyz^
+||ulourgaz.net^
+||ulried.com^
+||ulrzovfukgkljw.com^
+||ulseugnrmnrww.com^
+||ultimatumloftyharvest.com^
+||ultimumflyers.uno^
+||ultrabetas.com^
+||ultracdn.top^
+||ultraclassmate.com^
+||ultralove.net^
+||ultrasoundrottenreluctant.com^
+||ultrlove.com^
+||ulukaris.com^
+||ululateguereza.life^
+||ululubugles.website^
+||ulyhadchos.com^
+||umbretalen.com^
+||umcsghecmszp.com^
+||umebella.com^
+||umedadelempanyi.info^
+||umekana.ru^
+||umentrandings.xyz^
+||umexalim.com^
+||umfsyvnufa.com^
+||umiackscursors.com^
+||ummerciseha.com^
+||ummihaqhu.xyz^
+||umnstoodthe.com^
+||umoughtcallm.com^
+||umplohzn.com^
+||umpteenimpave.guru^
+||umqiapzsc.com^
+||umqpchxoq.xyz^
+||umqqfyqkjlxrh.xyz^
+||umuotov.com^
+||umwmwxpivtwkyo.xyz^
+||unacceptableclevercapable.com^
+||unacceptableironicaldrone.com^
+||unaccustomedchessoldest.com^
+||unaces.com^
+||unafeed.com^
+||unairedcushite.com^
+||unanac.com^
+||unanimouslyrejectproperly.com^
+||unaptsullens.com^
+||unarbokor.com^
+||unaswpzo.com^
+||unauthorizedblur.com^
+||unawakegaleus.com^
+||unawar.com^
+||unawarelinkedlaid.com^
+||unazumarillan.com^
+||unbalterce.com^
+||unbarbpoured.com^
+||unbearzonites.com^
+||unbeedrillom.com^
+||unblentnitric.com^
+||unblock2303.xyz^
+||unblock2304.xyz^
+||unboltsseugh.guru^
+||unbraidbrot.uno^
+||unbriefnothous.com^
+||unbroidsubtend.com^
+||unbuiltteuchit.com^
+||unbungrappee.com^
+||unburstballist.com^
+||uncannyuneaths.com^
+||uncertainimprovementsspelling.com^
+||uncheckluggies.com^
+||unciat.com^
+||uncide.com^
+||unciet.com^
+||uncipi.com^
+||unclehem.com^
+||unclesnewspaper.com^
+||uncomfortable-card.com^
+||uncommonmaintainhurt.com^
+||uncovereasel.com^
+||uncoverherbal.com^
+||uncree.com^
+||uncrobator.com^
+||uncrownarmenic.com^
+||uncslucanid.space^
+||unctic.com^
+||uncuredbotts.guru^
+||undams.com^
+||undeenardoo.com^
+||under2given.com^
+||underclick.ru^
+||undercoverdwell.com^
+||underdog.media^
+||undergosermon.com^
+||underminesprout.com^
+||understandableglassfinalize.com^
+||understandablejoggleawakened.com^
+||understandablerequirechoke.com^
+||understandextremityshipping.com^
+||understandingspacecraftbachelor.com^
+||understandintimidate.com^
+||understatedworking.com^
+||understoodadjoiningarab.com^
+||understoodreceivermisunderstand.com^
+||undertakingaisle.com^
+||undertakinghomeyegg.com^
+||underwards.site^
+||underwearglossary.com^
+||underwearsourorb.com^
+||undesirableslim.com^
+||undiesthumb.com^
+||undooptimisticsuction.com^
+||undressirreg.guru^
+||undrininvereb.info^
+||uneatenhopbush.com^
+||unegalalbian.uno^
+||uneign.com^
+||unelekidan.com^
+||unemploymentmaddenmiddleaged.com^
+||unemploymentnumeric.com^
+||unentsimmends.xyz^
+||unequaltravelresearch.com^
+||unevenobjective.com^
+||unevenregime.com^
+||unfainfraseirs.org^
+||unfairpromritual.com^
+||unfaithfulgoddess.com^
+||unfaithfulmakeryearly.com^
+||unfeeddizoic.com^
+||unfieryneutral.com^
+||unfina.com^
+||unfinisheddolphin.com^
+||unfolded-economics.com^
+||unforgivablegrowl.com^
+||ungillhenbane.com^
+||unglazeclassic.com^
+||ungloomnisnas.com^
+||ungoutylensmen.website^
+||ungracebaited.com^
+||ungroudonchan.com^
+||ungrownrommack.com^
+||unhabi.com^
+||unhaftcharing.com^
+||unhatedprotei.com^
+||unhau.com^
+||unhaveabobra.com^
+||unhealthyproduct.pro^
+||unhorseaa.com^
+||unhrjzn.com^
+||unicast.com^
+||unicorndirtiness.com^
+||unicornpride123.com^
+||unifini.de^
+||uniformutilitiesexpressing.com^
+||uniformyeah.com^
+||uninkedsamucu.guru^
+||uninvitedcurly.com^
+||uninvitednobody.com^
+||unioladeseret.com^
+||unionscircumstances.com^
+||unionssoothe.com^
+||unitethecows.com^
+||unitionistana.com^
+||universalflaskshrimp.com^
+||universityeminenceloosen.com^
+||universityofinternetscience.com^
+||unjoincaper.com^
+||unjointbobbed.com^
+||unkemptsodio.digital^
+||unkeptspahees.com^
+||unkinpigsty.com^
+||unkistwilily.digital^
+||unlawful-clock.pro^
+||unlawful-inspector.com^
+||unleftbawly.uno^
+||unlika.com^
+||unlinedcap.pro^
+||unluckydead.pro^
+||unluxioer.com^
+||unmanedstele.com^
+||unmarcharthra.com^
+||unmasksxyloma.uno^
+||unmergeullaged.com^
+||unmetswipy.com^
+||unmightboxen.com^
+||unnatural-situation.pro^
+||unnish.com^
+||unoblotto.net^
+||unofficialwanderingreplica.com^
+||unoldcrucify.com^
+||unpackgreaterbulk.com^
+||unpacktexture.com^
+||unpanchamon.com^
+||unpany.com^
+||unpaundlagot.com^
+||unphionetor.com^
+||unpinsfucoids.com^
+||unpleasantconcrete.com^
+||unpleasantlaugh.pro^
+||unpluguraemic.com^
+||unpred.com^
+||unpredictablehateagent.com^
+||unrade.com^
+||unregisteredgrasppistol.com^
+||unreshiramor.com^
+||unresolveddrama.com^
+||unripe-hello.pro^
+||unriq.com^
+||unrotomon.com^
+||unruly-addition.pro^
+||unrulymedia.com^
+||unrulymorning.pro^
+||unrulyvoice.com^
+||unsackhohokam.com^
+||unsaltyalemmal.com^
+||unsbnvwjn.xyz^
+||unseenrazorcaptain.com^
+||unseenreport.com^
+||unselfishgain.com^
+||unsettledfencing.com^
+||unshinykerite.com^
+||unsigilyphor.com^
+||unskilfulknowingservers.com^
+||unskilfulwalkerpolitician.com^
+||unsnakybrulot.com^
+||unsoggynek.life^
+||unspeakablepurebeings.com^
+||unspinaraka.com^
+||unstantleran.com^
+||unsteadybreakfast.pro^
+||unsternrelease.com^
+||unsurlysiouan.com^
+||untackreviler.com^
+||untastymondos.digital^
+||untiat.com^
+||untidy-struggle.pro^
+||untidybrink.com^
+||untidyquestion.com^
+||untiedecide.com^
+||untifa.com^
+||untimburra.com^
+||untrendenam.com^
+||untrk.xyz^
+||untrol.com^
+||untropiuson.com^
+||untroy.com^
+||untruesubsidedclasped.com^
+||unturfamini.store^
+||untusthemailha.com.ua^
+||untusthemailhwe.xyz^
+||unumbonum.com^
+||unurbancompony.com^
+||unusual-major.pro^
+||unusualbrainlessshotgun.com^
+||unusuallynonfictionconsumption.com^
+||unvenomtoxoids.com^
+||unvextcentavo.com^
+||unwartortlean.com^
+||unwice.com^
+||unwillingsnick.com^
+||unwindflophousework.com^
+||unwisecommence.com^
+||unwitting-phrase.pro^
+||unwoobater.com^
+||unworthydeserts.com^
+||unylgxxmrsbb.com^
+||unzipauscult.com^
+||uod2quk646.com^
+||uohxijnkd.com^
+||uoktyggqexq.com^
+||uorhlwm.com^
+||uotksykpmkcd.com^
+||uowjsjkanqmw.com^
+||up4u.me^
+||uparceuson.com^
+||uparisemaskoi.com^
+||upbrininghandy.com^
+||upbuoyearfuls.com^
+||upcurlsreid.website^
+||upcurltengu.com^
+||update48451.xyz^
+||updateadvancedgreatlytheproduct.vip^
+||updatecompletelyfreetheproduct.vip^
+||updateenow.com^
+||updateguck.com^
+||updaterecomended.pro^
+||updiveufos.com^
+||uperizeunoiled.com^
+||upflamebendell.uno^
+||upgalethalers.guru^
+||upglideantijam.com^
+||upgliscorom.com^
+||upgrownloathly.space^
+||upgulpinon.com^
+||uphastod.xyz^
+||uphewoab.net^
+||uphillgrandmaanger.com^
+||uphilo.com^
+||uphovelodha.com^
+||upinu.xyz^
+||upkoffingr.com^
+||uplandstoat.digital^
+||upleaptnavally.com^
+||upliftsearch.com^
+||uplinecliency.com^
+||uplucarioon.com^
+||upmoveatoms.com^
+||uponelectabuzzor.club^
+||uponge.com^
+||uponhariyamar.com^
+||uponsurskita.com^
+||upoveqbkia.xyz^
+||uppardjets.com^
+||upperched.com^
+||uppereugene.com^
+||uppilequavers.website^
+||uppitypartie.website^
+||uppons.com^
+||uppsyduckan.com^
+||upregisteelon.com^
+||upridables.website^
+||uprightmidsummer.com^
+||uprimp.com^
+||uprivaladserver.net^
+||upsaibou.net^
+||upsajeve.com^
+||upsamurottr.com^
+||upseelee.xyz^
+||upseepsi.xyz^
+||upshroomishtor.com^
+||upsidecopiedcraft.com^
+||upsidesheminee.com^
+||upskittyan.com^
+||upspinarakor.com^
+||upstagecarvers.cfd^
+||upstandhurls.website^
+||upsweephalms.com^
+||upswingmethyl.com^
+||uptastou.net^
+||uptimecdn.com^
+||uptodateexpansionenvisage.com^
+||uptodatefinishconferenceroom.com^
+||uptownrecycle.com^
+||uptuwhum.net^
+||upuflvbrotb.com^
+||upupoidoutjazz.website^
+||upush.co^
+||upwaftssoland.digital^
+||upwardsdecreasecommitment.com^
+||upwardunderground.com^
+||upwate.com^
+||upwelf.com^
+||uqdoeag.com^
+||uqotbpmidyewkmb.com^
+||uqpvrqplyqm.com^
+||uqtwjvbc.com^
+||urambled.com^
+||uranianredrove.com^
+||uranismunshore.com^
+||urbard.com^
+||urboja.com^
+||urbund.com^
+||urdant.com^
+||urechar.com^
+||urediumshirker.website^
+||urgedsuitcase.com^
+||urgefranchise.com^
+||urgingcolleen.uno^
+||urgoldpie.club^
+||urimnugocfr.com^
+||urimtats.com^
+||urinehere.com^
+||uringherenurew.info^
+||urldelivery.com^
+||urlgone.com^
+||urlhausa.com^
+||urmavite.com^
+||urmilan.info^
+||uroceletassard.digital^
+||urocyonirchin.guru^
+||urogramredfins.com^
+||urotoxykerch.com^
+||urpctsrjilp.com^
+||urqxesau.com^
+||urryjgwqjo.com^
+||ursonewry.com^
+||urthdtcg.com^
+||urtirepor.com^
+||uruswan.com^
+||urutricae.com^
+||us4post.com^
+||usailtuwhe.com^
+||usbanners.com^
+||usearch.site^
+||used-particular.com^
+||usedaifi.xyz^
+||usedunderstood.com^
+||usefulcontentsites.com^
+||usefulcourage.com^
+||usefulcreatebid.com^
+||usefulhall.pro^
+||usefulhead.com^
+||usefulpush.com^
+||usegzydswt.com^
+||usehol.com^
+||uselnk.com^
+||usemegasales.shop^
+||usenet.world^
+||usenetpassport.com^
+||usertag.online^
+||usetalentedpunk.com^
+||ushistoari.com^
+||ushoofop.com^
+||ushzfap.com^
+||usinesmycete.xyz^
+||usingswhoring.com^
+||usisedprivatedqu.com^
+||usjbwvtqwv.com^
+||uslycoloursewo.com^
+||usnese.com^
+||usnindioxime.website^
+||usounoul.com^
+||ussckwroweoyv.com^
+||ussive.com^
+||ussord.com^
+||ust-ad.com^
+||ustetyerecentlyh.info^
+||ustithoo.net^
+||ustive.com^
+||ustomoun.xyz^
+||usuade.com^
+||usuads.com^
+||usuage.com^
+||usuallyaltered.com^
+||usuallyblack.com^
+||usualt.com^
+||usucaptlardoon.life^
+||usudgbdbqmj.com^
+||usurerspoind.life^
+||usurertramped.guru^
+||usurv.com^
+||uswardwot.com^
+||usylkoifiwa.com^
+||uszaodwya.com^
+||ut13r.online^
+||ut13r.site^
+||utaitlastwebe.com^
+||utantialcottish.xyz^
+||utarget.co.uk^
+||utarget.pro^
+||utarget.ru^
+||uthecrimorew.com^
+||uthecrimorew.info^
+||uthegrathapron.com^
+||uthorner.info^
+||utific.com^
+||utilitypresent.com^
+||utilized-memory.pro^
+||utilizedshoe.com^
+||utillib.xyz^
+||utjzyutegq.com^
+||utl-1.com^
+||utlhaoyc.xyz^
+||utlicyweaabdbj.xyz^
+||utm-campaign.com^
+||utmany.com^
+||utmostsecond.com^
+||utndln.com^
+||utokapa.com^
+||utoumine.net^
+||utrinterrommo.com^
+||utript.com^
+||utrius.com^
+||utstancecaricit.com^
+||uttack.com^
+||utterlyfunding.com^
+||utubepwhml.com^
+||utzwgittihhvn.com^
+||uuboos.com^
+||uucfeebvz.com^
+||uudzfbzthj.com^
+||uueuxygn.com^
+||uuhptejwmvn.com^
+||uuidksinc.net^
+||uuuwhrxqnf.com^
+||uvbyty.com^
+||uvgwtrkuhgwo.xyz^
+||uviticketway.com^
+||uvoovoachee.com^
+||uvrdhasvzal.com^
+||uvsvlisbartwq.com^
+||uvtuiks.com^
+||uvwelvnydoy.com^
+||uvwtmppnbqgzha.com^
+||uvxclrl.com^
+||uvzomxvbpbgo.com^
+||uwayemfogibbgh.xyz^
+||uwfcqtdb.xyz^
+||uwgmguwpzkeudh.com^
+||uwmlmhcjmjvuqy.xyz^
+||uwoaptee.com^
+||uwrzjgtnur.com^
+||uxdfxyepfow.xyz^
+||uxdwhatijun.xyz^
+||uxicgxqq.com^
+||uxpascal.com^
+||uxwnqppdma.com^
+||uxxsiyokw.com^
+||uyfpmhmqh.xyz^
+||uyjmbaiogdtkgwt.com^
+||uyojnhqeipyb.xyz^
+||uypsmaxzejvpqx.com^
+||uzbxnfwcvhwnz.com^
+||uzelruth.com^
+||uzoamtee.xyz^
+||uzouptel.xyz^
+||uzoutche.xyz^
+||uzqtbthkrqq.com^
+||uzzidxlvnq.com^
+||v.adserve.tv^
+||v00ske77693f.com^
+||v100homemade.com^
+||v124mers.com^
+||v28games2fan.com^
+||v2cigs.com^
+||v4yleins27hv.com^
+||v6rxv5coo5.com^
+||v96-surf.com^
+||vabsirte.xyz^
+||vabybjbhgqfcld.com^
+||vacaneedasap.com^
+||vacant-writer.com^
+||vacationambulancekin.com^
+||vacationinvolve.com^
+||vacationsoot.com^
+||vaccinationinvalidphosphate.com^
+||vaccinationwear.com^
+||vaccinegrownparliamentary.com^
+||vacuomedogeys.com^
+||vacuomehautain.tech^
+||vacwrite.com^
+||vadokfkulzr.com^
+||vaebard.com^
+||vaehxkhbhguaq.xyz^
+||vaemfecqllefj.xyz^
+||vagromdecane.website^
+||vagueleader.pro^
+||vaguelybarelyrecycle.com^
+||vaideezi.com^
+||vaifauzu.net^
+||vaifopooface.com^
+||vaigowoa.com^
+||vaikdxjegts.com^
+||vaikijie.net^
+||vaikrywlbmca.com^
+||vailedapetaly.com^
+||vainfulkmole.com^
+||vaipsona.com^
+||vaipsouw.com^
+||vaisheph.xyz^
+||vaithodo.com^
+||vaitotoo.net^
+||vajofu.uno^
+||vajoru.xyz^
+||vak345.com^
+||vaknveb.com^
+||valack.com^
+||valemedia.net^
+||valencevinyls.life^
+||valerainingexplain.com^
+||valetedmasaris.website^
+||valeuceplangka.com^
+||valgoidaguglia.guru^
+||valiantsubquery.com^
+||valid-dad.com^
+||valiumbessel.com^
+||vallarymedlars.com^
+||valleymuchunnecessary.com^
+||valleyneatens.com^
+||valonghost.xyz^
+||valornutricional.cc^
+||valpeiros.com^
+||valsesoffhand.website^
+||valshara.com^
+||valuablecompositemagnanimity.com^
+||valuad.cloud^
+||valuationbothertoo.com^
+||valuebreeches.com^
+||valueclick.cc^
+||valueclick.com^
+||valueclick.net^
+||valueclickmedia.com^
+||valuedmiming.life^
+||valuedpulverizelegitimate.com^
+||valuerlaserlax.com^
+||valuermainly.com^
+||valuesgloryprovocation.com^
+||valuethemarkets.info^
+||valvalnumbest.com^
+||valvedreknow.top^
+||valvyre.com^
+||vamjfssdvjit.com^
+||vampedcortine.com^
+||vampersmutuary.com^
+||vampersogmic.com^
+||vampersyacal.com^
+||vamsoupowoa.com^
+||vancip.com^
+||vandalismblackboard.com^
+||vanderebony.pro^
+||vanderlisten.pro^
+||vanenow.com^
+||vanhonker.com^
+||vaniacozzolino.com^
+||vanirplex.com^
+||vanirstub.com^
+||vanishedunreal.com^
+||vanityassassinationsobbing.com^
+||vanmanbarble.uno^
+||vapedia.com^
+||vapourfertile.com^
+||vapoursumptuousgutter.com^
+||varabs.com^
+||varasbrijkt.com^
+||vardasvideo.com^
+||vardesvideo.com^
+||vardosvideo.com^
+||varechphugoid.com^
+||variableexternal.com^
+||variationaspenjaunty.com^
+||variationsreviewmocking.com^
+||variedpretenceclasped.com^
+||variedslimecloset.com^
+||varietiesassuage.com^
+||varietiesplea.com^
+||varietyofdisplayformats.com^
+||variff.com^
+||varijn.com^
+||variouscreativeformats.com^
+||variousformatscontent.com^
+||varnishmixed.com^
+||varshacundy.com^
+||vartoken.com^
+||varycares.com^
+||vasgenerete.com^
+||vasgenerete.site^
+||vashebiwa.pro^
+||vasicxcq.com^
+||vasits.com^
+||vassspot.com^
+||vasstycom.com^
+||vasteeds.net^
+||vastroll.ru^
+||vastserved.com^
+||vastsneezevirtually.com^
+||vatanclick.ir^
+||vatcalf.com^
+||vatcertaininject.com^
+||vatname.info^
+||vatois.com^
+||vattingbalak.com^
+||vaugaiva.net^
+||vaugroar.com^
+||vaultwrite.com^
+||vauthaud.net^
+||vavcashpop.com^
+||vavilisys.com^
+||vawsmoocah.com^
+||vax-boost.com^
+||vax-now.com^
+||vazypteke.pro^
+||vbijjrg.com^
+||vbmfeuvrtnxafy.com^
+||vbqbtfkon.com^
+||vbtrax.com^
+||vbvpkdwucilopuw.xyz^
+||vbzsjkrnsqewy.com^
+||vcbydvfouqqyls.com^
+||vcdc.com^
+||vcdpuyl.com^
+||vcmedia.com^
+||vcommission.com^
+||vcsesvwajeup.com^
+||vcvacpaenqepvm.com^
+||vcxzp.com^
+||vdbaa.com^
+||vddf0.club^
+||vdlvry.com^
+||vdmiruryll.xyz^
+||vdopia.com^
+||vdoubt.com^
+||vebadu.com^
+||vectisamerica.com^
+||vectorsfangs.com^
+||vedxxjumf.xyz^
+||veecheew.xyz^
+||veemaish.xyz^
+||veemauhe.xyz^
+||veepeestickney.guru^
+||veepteero.com^
+||veewhaiw.com^
+||vefxjjkrhf.com^
+||veganswingbow.com^
+||vegashizoku.digital^
+||vegetationbuoyspeciality.com^
+||vegetationplywoodfiction.com^
+||vegyttokhldqd.com^
+||vehiclehenriettaassociation.com^
+||vehine.com^
+||vehmickharaj.website^
+||veildiscotacky.com^
+||veilsuccessfully.com^
+||veinletunapart.com^
+||veinnotionmariner.com^
+||velocecdn.com^
+||velocitycdn.com^
+||velocitypaperwork.com^
+||velopedsever.com^
+||velopedseveralmef.info^
+||velvetneutralunnatural.com^
+||vemflutuartambem.com^
+||vempozah.net^
+||vemtecko.net^
+||vemtourt.com^
+||vendgrusian.com^
+||vendigamus.com^
+||vendimob.pl^
+||vendnibtemp.com^
+||vendorsfacture.com^
+||veneeringextremely.com^
+||venetrigni.com^
+||venfioletadas.com^
+||vengeful-egg.com^
+||vengermeed.space^
+||veninslata.com^
+||venisonabreastdamn.com^
+||venisonreservationbarefooted.com^
+||venkrana.com^
+||venmanisatio.work^
+||venomousclassesjolt.com^
+||venomoussolidhow.com^
+||venomousteenage.com^
+||ventilatorcorrupt.com^
+||ventrequmus.com^
+||venturead.com^
+||venturyremove.info^
+||veobeitkalson.info^
+||verageousarra.xyz^
+||veralmefarketi.info^
+||verandahcrease.com^
+||verbcardinal.com^
+||verblife-5.co^
+||verdictdisingenuousfruitless.com^
+||verdreamsofcryin.com^
+||vereyhinders.com^
+||vergi-gwc.com^
+||verifychocolate.com^
+||veritaswhang.com^
+||veritiesgarlejobade.com^
+||verneukorgia.com^
+||verninchange.com^
+||vernondesigninghelmet.com^
+||veronalhaf.com^
+||verooperofthewo.com^
+||versaqueasy.uno^
+||versatileadvancement.com^
+||verse-content.com^
+||versedeceitlocation.com^
+||versionlatticecheek.com^
+||versionsfordisplay.com^
+||versionslent.com^
+||versusconsole.com^
+||verticallydeserve.com^
+||verwh.com^
+||veryn1ce.com^
+||verysilenit.com^
+||vesofefinego.info^
+||vespymedia.com^
+||vessoupy.com^
+||vesterlaibach.uno^
+||vestigeboxesreed.com^
+||vestparticle.com^
+||vetcheslegumen.com^
+||vetdeberg.com^
+||vethojoa.net^
+||vetuststeek.com^
+||vevatom.com^
+||vexacion.com^
+||vexationworship.com^
+||vexevutus.com^
+||vextjoexig.com^
+||veyjdaswregbj.com^
+||vfghc.com^
+||vfghd.com^
+||vfgtg.com^
+||vfhkljw5f6ss.com^
+||vfjydbpywqwe.xyz^
+||vfl81ea28aztw7y3.pro^
+||vflouksffoxmlnk.xyz^
+||vftqmnqopdf.xyz^
+||vfvdsati.com^
+||vfvvhywsdons.com^
+||vfyxjsclor.com^
+||vg4u8rvq65t6.com^
+||vgfeuwrewzzmc.com^
+||vgmnpjnrpj.com^
+||vgsjapnjykapgq.com^
+||vgw35hwr4w6x.com^
+||vgwtjbeqfpesefn.xyz^
+||vheoggjiqaz.com^
+||vhihvqsuarpp.com^
+||vhkbvpbuhwon.com^
+||vhmjevcgc.xyz^
+||vhneajupavrb.com^
+||vi-serve.com^
+||viabagona.com^
+||viableconferfitting.com^
+||viaeatsdhpt.com^
+||viaexploudtor.com^
+||viahollow.com^
+||viamariller.com^
+||vianadserver.com^
+||vianoivernom.com^
+||viapawniarda.com^
+||viaphioner.com^
+||viapizza.online^
+||viatepigan.com^
+||viaticaledged.com^
+||vibmhetkcedookx.com^
+||vibrateapologiesshout.com^
+||vic-m.co^
+||vicious-instruction.pro^
+||viciousdepartment.com^
+||viciousdiplomaroller.com^
+||victorious-shock.pro^
+||victoriousagency.pro^
+||victory-vids.online^
+||victoryslam.com^
+||victoryvids.space^
+||vid-caps.online^
+||vid-clips.space^
+||vid-for-clips.space^
+||vid.me^
+||vidalak.com^
+||vidcaps.email^
+||vidcaps.info^
+||vidcaps.online^
+||vidcaps.org^
+||vidcaps.space^
+||vidclips.online^
+||vidcpm.com^
+||video-adblocker.com^
+||video-serve.com^
+||videoaccess.xyz^
+||videobaba.xyz^
+||videocampaign.co^
+||videomart.org^
+||videoplaza.tv^
+||videosprofitnetwork.com^
+||videosworks.com^
+||videovard.sx^
+||videovideee771.com^
+||videovideee881.com^
+||videovideee991.com^
+||vidforclips.info^
+||vidforclips.mom^
+||vidforclips.net^
+||vidforclips.space^
+||vidghjlgkuyfk.site^
+||vids-branch.online^
+||vids-fun.online^
+||vidsbig.online^
+||vidsbig.space^
+||vidsbranch.online^
+||vidsbranch.space^
+||vidschannel.online^
+||vidschannel.space^
+||vidsforyou.mom^
+||vidsforyou.online^
+||vidsfull.online^
+||vidsfull.space^
+||vidsfun.info^
+||vidsfun.online^
+||vidsfun.space^
+||vidshouse.online^
+||vidshouse.space^
+||vidsmoon.online^
+||vidsmoon.space^
+||vidsocean.online^
+||vidsocean.space^
+||vidsofdream.space^
+||vidsplanet.online^
+||vidsplanet.space^
+||vidsreal.online^
+||vidsreal.space^
+||vidsservices.info^
+||vidsservices.space^
+||viecfncwtkgiew.xyz^
+||view-flix.com^
+||viewablemedia.net^
+||viewclc.com^
+||viewedmockingcarsick.com^
+||viewlnk.com^
+||viewpointscissorsfolks.com^
+||viewscout.com^
+||viewyentreat.guru^
+||vignerez.net^
+||vigorouslyflamboyant.com^
+||vigorouslyrutmonsieur.com^
+||vigraghe.net^
+||vihub.ru^
+||viiapps.com^
+||viibest.com^
+||viibill.com^
+||viicasu.com^
+||viicqujz.com^
+||viidan.com^
+||viidirectory.com^
+||viienetik.com^
+||viifogyp.com^
+||viihot.com^
+||viiigle.com^
+||viiithia.com^
+||viiithie.com^
+||viiithin.com^
+||viiithinks.com^
+||viiithio.com^
+||viijah.com^
+||viijan.com^
+||viikttcq.com^
+||viimaster.com^
+||viimobile.com^
+||viimsa.com^
+||viimsical.com^
+||viimurakhi.com^
+||viinsdap.com^
+||viinset.com^
+||viioxx.com^
+||viipour.com^
+||viipurakan.com^
+||viipurakit.com^
+||viipuram.com^
+||viipurambe.com^
+||viipurant.com^
+||viipurin.com^
+||viipuris.com^
+||viipurises.com^
+||viipurit.com^
+||viiqovig.com^
+||viiqqou.com^
+||viireviews.com^
+||viirift.com^
+||viirsons.com^
+||viiruc.com^
+||viisemblin.com^
+||viispan.com^
+||viitgb.com^
+||viitsical.com^
+||viiturn.com^
+||viivedun.com^
+||viixie.com^
+||viixikup.com^
+||viiyblva.com^
+||viiymfvi.com^
+||viizuusa.com^
+||vijcwykceav.com^
+||vijeli.uno^
+||vikrak.com^
+||vilelaaccable.com^
+||vilercarpetfolk.com^
+||vilereasoning.com^
+||vilerebuffcontact.com^
+||viliaff.com^
+||vilinswell.com^
+||villaedeinos.com^
+||villageeatable.com^
+||villasquinttolerance.com^
+||vilpujzmyhu.com^
+||vimfulmortis.com^
+||vimpatace.digital^
+||vinculastags.store^
+||vindicosuite.com^
+||vinegardaring.com^
+||vingartistictaste.com^
+||vintageperk.com^
+||violationphysics.click^
+||violationphysics.com^
+||violencegloss.com^
+||violencemathstowards.com^
+||violentanimal.pro^
+||violentlyradiussuffix.com^
+||violetlovelines.com^
+||violindealtcynical.com^
+||violondeaf.guru^
+||vionito.com^
+||viowrel.com^
+||vioytuituunmsr.com^
+||vip-datings.life^
+||vip-vip-vup.com^
+||vipads.live^
+||vipcaptcha.live^
+||vipcpms.com^
+||vipicmou.net^
+||viqyrcsnuaqxvyg.com^
+||viral481.com^
+||viral782.com^
+||viralcpm.com^
+||viralmediatech.com^
+||viralnewsobserver.com^
+||viralnewssystems.com^
+||virginityneutralsouls.com^
+||virginyoungestrust.com^
+||virgma.com^
+||virtuallythanksgivinganchovy.com^
+||virtuous-father.pro^
+||visaexasperation.com^
+||visariomedia.com^
+||visaspecialtyfluid.com^
+||viscosestroma.com^
+||vishalboo.guru^
+||visiads.com^
+||visibilitymondaydisappeared.com^
+||visiblegains.com^
+||visiblejoseph.com^
+||visiblemeasures.com^
+||visitationdependwrath.com^
+||visitingdeandwell.com^
+||visitingpurrplight.com^
+||visitmightyethnic.com^
+||visitorcardinal.com^
+||visitormarcoliver.com^
+||visitplaywrightlyrical.com^
+||visitsfunk.com^
+||visitstats.com^
+||visitstrack.com^
+||visitsviolatedifficult.com^
+||visitweb.com^
+||visivegaucie.com^
+||vissregion.com^
+||vistashomonid.com^
+||vistoolr.net^
+||vitaminalcove.com^
+||vitiumcranker.com^
+||vitrealmandola.com^
+||vivaciousbudget.pro^
+||viviendoefelizz.online^
+||vivuple.xyz^
+||viwvamotrnu.com^
+||vixoafte.xyz^
+||vizacasa.xyz^
+||vizofnwufqme.com^
+||vjdciu.com^
+||vjgqzvmgd.com^
+||vjsohgd.com^
+||vjtskjg.com^
+||vjzlgtnaov.com^
+||vkarrc.com^
+||vkezpstgtjxym.com^
+||vkgtrack.com^
+||vknrfwwxhxaxupqp.pro^
+||vknvimxmvsndhx.com^
+||vksegjhestouij.com^
+||vksphze.com^
+||vkusbtnxubme.com^
+||vlbbyi.com^
+||vlbyzgj.com^
+||vlitag.com^
+||vlkkwxncamnq.com^
+||vlnk.me^
+||vlry5l4j5gbn.com^
+||vltwoizzckpp.com^
+||vlvbyqgjqj.com^
+||vmmcdn.com^
+||vmraahnmspzy.com^
+||vmuid.com^
+||vmwxsiaco.xyz^
+||vmxqgmefynoep.xyz^
+||vnbgcquiihu.xyz^
+||vndcrknbh.xyz^
+||vneffwecka.com^
+||vnfunsvrtm.com^
+||vnrherdsxr.com^
+||vntsm.com^
+||vntsm.io^
+||voacheph.xyz^
+||voadeezu.net^
+||voaglazy.com^
+||voapozol.com^
+||voastauz.net^
+||vocaivie.xyz^
+||vocalconferencesinister.com^
+||vocalickopjes.com^
+||vocalreverencepester.com^
+||vocath.com^
+||vodjnqarncm.com^
+||vodobyve.pro^
+||vogmlpzlnrj.com^
+||vogo-vogo.ru^
+||voicearrogancesideway.com^
+||voicebeddingtaint.com^
+||voicedstart.com^
+||voicegiddiness.com^
+||voices-kerence.com^
+||voipnewswire.net^
+||voirst.com^
+||vokjslngw.xyz^
+||volatintptr.com^
+||volcanoimplement.com^
+||voldarinis.com^
+||volna2babla1dh1.com^
+||volumedpageboy.com^
+||voluntarilystink.com^
+||volunteerboutique.com^
+||volunteerbrash.com^
+||voluth.com^
+||voluumtracker.com^
+||voluumtrk.com^
+||voluumtrk3.com^
+||volyze.com^
+||vomitelse.com^
+||vomitlifeboatparliamentary.com^
+||vonkol.com^
+||vooculok.com^
+||vookamoo.com^
+||vooodkabelochkaa.com^
+||voopsoog.xyz^
+||vooruvou.com^
+||voosegou.xyz^
+||vooshagy.net^
+||vooshozo.com^
+||voowiche.com^
+||voqqdmezdbbr.com^
+||voredi.com^
+||vossulekuk.com^
+||vouchanalysistonight.com^
+||vougreph.net^
+||voujaizy.xyz^
+||vounaipu.net^
+||vowcertainly.com^
+||vowdistractingbuoyancy.com^
+||voweve.com^
+||voxar.xyz^
+||voxfind.com^
+||voxjvytmisj.com^
+||voxmrcdgzuwb.com^
+||voyageconcise.com^
+||voyageschoolanymore.com^
+||voynto.com^
+||vpbceulnfbx.com^
+||vpfudjdi.com^
+||vpico.com^
+||vpipi.com^
+||vpixrlkggv.com^
+||vpn-defend.com^
+||vpn-offers.com^
+||vpn-offers.info^
+||vpn1.cfd^
+||vpnlist.to^
+||vpnrequired.com^
+||vpop2.com^
+||vpotyflfox.com^
+||vpqpbgvgly.com^
+||vprtrfc.com^
+||vprwamqmdd.xyz^
+||vptadv.com^
+||vptbn.com^
+||vptzqnjwguap.com^
+||vpumfeghiall.com^
+||vpwhhtpwhmd.com^
+||vqcjmtorgexlxpg.xyz^
+||vqflyvrshgjvqr.com^
+||vqglaz.com^
+||vqjfiuwbqpvwrn.xyz^
+||vqjvnjxbgnz.com^
+||vqtyargb.com^
+||vqzbzuhhxhcf.com^
+||vrbmhngqjh.com^
+||vrcjleonnurifjy.xyz^
+||vrfupfyu.com^
+||vrhgfvztgmcl.com^
+||vrhorus.com^
+||vriddhiabrege.live^
+||vroaafoi.com^
+||vrplynsfcr.xyz^
+||vrquqhnikhcnixn.com^
+||vrsyd.uno^
+||vrtzads.com^
+||vs3.com^
+||vsdxwtvsxp.com^
+||vsgfjfsmcewnuhx.com^
+||vskfeduxg.xyz^
+||vskngnldyl.xyz^
+||vsnpfmoxb.xyz^
+||vstserv.com^
+||vstvstsa.com^
+||vstvstsaq.com^
+||vstvstssa.com^
+||vsznywexf.com^
+||vt894axs16.com^
+||vtaos.lol^
+||vtaos.xyz^
+||vtaov.lol^
+||vtaov.xyz^
+||vtbrcixnca.com^
+||vtetishcijmi.com^
+||vtftijvus.xyz^
+||vtiipxfdtnkaau.com^
+||vtjfplukwxolkgw.xyz^
+||vtrnpueqtqke.xyz^
+||vtrodqjicfys.com^
+||vtsyqikqnrfmaye.com^
+||vttyjakvvdce.com^
+||vtveyowwjvz.com^
+||vtvkkbasfm.com^
+||vtzkyckmdcecs.com^
+||vubihowhe.com^
+||vudoutch.com^
+||vuehhkm9.cfd^
+||vuftouks.com^
+||vugnubier.com^
+||vujriahqyleveh.com^
+||vukpwyvge.com^
+||vulgarmilletappear.com^
+||vulguspyemic.com^
+||vulnerableordered.com^
+||vungqwclop.xyz^
+||vuphoubs.com^
+||vuruzy.xyz^
+||vuuwd.com^
+||vuvacu.xyz^
+||vuvcroguwtuk.com^
+||vuvochgw.xyz^
+||vuvoti.uno^
+||vuvoti.xyz^
+||vuwmxjusucnh.com^
+||vuyngptxhjtmdn.com^
+||vv8h9vyjgnst.com^
+||vvehvch.com^
+||vvfrdcuxrergrjy.com^
+||vvgpkowlun.com^
+||vvickycira.com^
+||vvobtrjtinsd.com^
+||vvrbjtjxmlgcd.xyz^
+||vvsesfeunlu.com^
+||vvtadblk.online^
+||vvvljeqasz.com^
+||vvwbjuaerbgmrjm.com^
+||vvyfeixscj.com^
+||vvyqxxgxlnptc.com^
+||vvzzphefzcdfr.com^
+||vwedfijcm.xyz^
+||vwegihahkos.com^
+||vwgtbnamrvg.com^
+||vwhnfwdbf.com^
+||vwinagptucpa.com^
+||vwl7kia4fzz6.com^
+||vwlknjjt.com^
+||vwqohlgfneusxy.com^
+||vwswilfrveqzw.com^
+||vwuyuahqf.com^
+||vxeynuboasnc.com^
+||vxlpuja.com^
+||vxnbklwrctqbn.xyz^
+||vxoncbelghuic.com^
+||vxsscpctuiq.com^
+||vxvjgsgqyee.com^
+||vxxizaan.com^
+||vyazd.com^
+||vyazmi.com^
+||vycyqxnbrwz.com^
+||vydfijoiw.com^
+||vydwjwbul.xyz^
+||vyebzzbovvzvl.top^
+||vyfrxuytzn.com^
+||vyinglyfomites.com^
+||vyiosamgdc.xyz^
+||vylfjneyvmq.xyz^
+||vypywufmbsp.com^
+||vyqpumohlvdsd.xyz^
+||vytans.com^
+||vywoxptqyqgex.com^
+||vyxoeu.xyz^
+||vz.7vid.net^
+||vzhzlraxtwgyn.com^
+||vzigttqgqx.com^
+||vzoarcomvorz.com^
+||vztlivv.com^
+||vzufzah.com^
+||w00f.net^
+||w3exit.com^
+||w3needman3w.com^
+||w3plywbd72pf.com^
+||w4.com^
+||w55c.net^
+||w65mymobile.com^
+||w76mddb.com^
+||w99megeneral.com^
+||waapadaggled.com^
+||wabejoyrode.life^
+||wachipho.net^
+||wackeerd.com^
+||wackotracko.com^
+||wadauthy.net^
+||wadoucho.xyz^
+||waeiftfylzo.com^
+||waeshana.com^
+||wafflesgenuine.com^
+||wafflesquaking.com^
+||wafmedia6.com^
+||waframedia5.com^
+||wagecolorful.com^
+||wagepulsate.com^
+||wagerjoint.com^
+||wagerprocuratorantiterrorist.com^
+||wagershare.com^
+||wagersinging.com^
+||waggonerchildrensurly.com^
+||waggonerfoulpillow.com^
+||wagnal.com^
+||wahahespecked.guru^
+||wahile.com^
+||wahoha.com^
+||waigriwa.xyz^
+||waihoz.xyz^
+||wailedfrosty.com^
+||waioowcadhw.xyz^
+||waisheph.com^
+||waistcoataskeddone.com^
+||waistcoatswimsuitham.com^
+||waistdeafgeorgiana.com^
+||waisttrustworthy.com^
+||wait4hour.info^
+||waitdeathinquiries.com^
+||waiterregistrydelusional.com^
+||waitheja.net^
+||waiting.biz^
+||waitingpresen.com^
+||waiwodemanila.com^
+||wakelardassistance.com^
+||wakenssponged.com^
+||walaheewakwafi.com^
+||walkamorous.com^
+||walkedcreak.com^
+||walkernewspapers.com^
+||walkingtutor.com^
+||walknotice.com^
+||wallpapersfacts.com^
+||wallstrads.com^
+||wallybuffed.uno^
+||walrea.com^
+||walrusintroducing.com^
+||waltergasp.com^
+||wamarapayor.com^
+||wamnetwork.com^
+||wanesorates.digital^
+||wangfenxi.com^
+||wanlyavower.com^
+||wanmolamchoor.store^
+||wannessdebus.com^
+||wannestfooled.com^
+||wanodtbfif.com^
+||wansultoud.com^
+||want-s0me-push.net^
+||want-some-push.net^
+||wantedjeff.com^
+||wantingernestbreakfast.com^
+||wantopticalfreelance.com^
+||wantsindulgencehum.com^
+||wapbaze.com^
+||wapdollar.in^
+||wappingcalques.com^
+||wapsisod.net^
+||waptrick.com^
+||waqool.com^
+||wardrobecontingent.com^
+||wardrobemeddleorganism.com^
+||warehousecanneddental.com^
+||warfarerewrite.com^
+||warhin.com^
+||wariestbudgers.com^
+||warilyaggregation.com^
+||warilycommercialconstitutional.com^
+||warilydigestionauction.com^
+||warilytumblercheckbook.com^
+||wariod.com^
+||warlike-purpose.pro^
+||warliketruck.com^
+||warlockstallioniso.com^
+||warm-course.pro^
+||warmanmamelon.com^
+||warmheartedtackle.pro^
+||warmsanabia.guru^
+||warmthsmasseur.com^
+||warnmessage.com^
+||warpassistrefrain.com^
+||warswhitawe.com^
+||wartletkenn.com^
+||warumbistdusoarm.space^
+||wary-pressure.pro^
+||wasdczhepg.com^
+||wasgildedall.com^
+||washabeach.com^
+||washdaycalmly.com^
+||washergnome.com^
+||washincozing.space^
+||washinexhaustible.com^
+||washingbustlewhack.com^
+||washpottelly.website^
+||wasp-182b.com^
+||waspfestivalchampionship.com^
+||waspilysagene.com^
+||waspishamendbulb.com^
+||waspishoverhear.com^
+||wasqimet.net^
+||wastablrupture.com^
+||wastedclassmatemay.com^
+||wastedinvaluable.com^
+||wastefulenthusiasm.pro^
+||wastefulpack.pro^
+||wastesshimssat.world^
+||wasverymuc.com^
+||watch-now.club^
+||watchahv.com^
+||watchcpm.com^
+||watchercupboard.com^
+||watchespounceinvolving.com^
+||watchesthereupon.com^
+||watchestwenties.com^
+||watchexcellent.pics^
+||watchexcellentpics.online^
+||watchexcellentvids.online^
+||watchgelads.com^
+||watchingssu.com^
+||watchingthat.com^
+||watchingthat.net^
+||watchlivesports4k.club^
+||watchmanyachtmatch.com^
+||watchmytopapp.top^
+||watchnewpics.info^
+||watchnewpics.space^
+||watchnewvids.online^
+||watchnewvids.space^
+||watchnewvids.today^
+||watchtaro.com^
+||watchthistop.net^
+||watchyourvids.online^
+||watchyourvids.space^
+||watekade.xyz^
+||waterlinesheet.org^
+||waterypower.pro^
+||wateryzapsandwich.com^
+||watsaira.net^
+||watwait.com^
+||waudeesestew.com^
+||waufooke.com^
+||waughtsquint.com^
+||waugique.net^
+||waunsgraphs.website^
+||wauroufu.net^
+||waushaup.com^
+||waushool.com^
+||waust.at^
+||wauthaik.net^
+||wauwitew.net^
+||wavablehood.com^
+||waveclks.com^
+||waveelectbarn.com^
+||wavermerchandiseweird.com^
+||waveysfumbled.com^
+||waviatacloche.com^
+||wavingteenagecandle.com^
+||wavysnarlfollow.com^
+||wawadoga.com^
+||wawhairt.net^
+||waxaimg.info^
+||waxapushlite.com^
+||waxapushlite.info^
+||waxingcesti.com^
+||waxingequant.space^
+||waxpigbaa.com^
+||waxtamnit.com^
+||waybillbulged.com^
+||wayfarerspoutpraise.com^
+||waygatecrowbar.com^
+||waymarkgentiin.com^
+||waymentriddel.com^
+||waynagmay.com^
+||wazaki.xyz^
+||wazctigribhy.com^
+||wazensee.net^
+||wbdds.com^
+||wbekwxsup.com^
+||wbfhivtydh.com^
+||wbidder.online^
+||wbidder2.com^
+||wbidder3.com^
+||wbidder311072023.com^
+||wbidr.com^
+||wbilvnmool.com^
+||wbjjkdofo.xyz^
+||wboptim.online^
+||wboux.com^
+||wbsads.com^
+||wbtsaeadmo.com^
+||wbubnjqyrmv.com^
+||wbuurzutrhmlsz.com^
+||wbvjhlaljp.com^
+||wbzfybvl.com^
+||wcadlvruvrq.xyz^
+||wcbxugtfk.com^
+||wccprfxgbes.com^
+||wcdxpxugsrk.xyz^
+||wchctzzkzkhx.com^
+||wci0jf62.cfd^
+||wcjiaclw.com^
+||wcmcs.net^
+||wcnndaazbwmane.com^
+||wct.link^
+||wcuolmojkzir.com^
+||wcvyyacmnoamt.com^
+||wcxegvp.com^
+||wcycotzoxhvapo.com^
+||wd282endfws.de^
+||wdavrzv.com^
+||wdevxtmasfdswx.com^
+||wdownthreerfdfg.com^
+||wdpqgagmulazv.com^
+||wdpylyw.com^
+||wdt9iaspfv3o.com^
+||wdtuxxjy.xyz^
+||wdvlqbo.com^
+||wea5lkaf63loos8a.com^
+||weabalance.top^
+||weakcompromise.com^
+||wealop.com^
+||wealthextend.com^
+||weanersporta.com^
+||weaped.com^
+||weaponsnondescriptperceive.com^
+||weaponvelocitypredator.com^
+||weaptqsmbshwd.xyz^
+||wearinggenear.com^
+||wearisomeexertiontales.com^
+||wearisomeraynope.com^
+||wearydisturbing.com^
+||wearygrocery.pro^
+||wearyregister.com^
+||weaselbubblehue.com^
+||weatheralcovehunk.com^
+||weathercockr.com^
+||weatherpeanutnegligence.com^
+||weatherplllatform.com^
+||weatherpopularitypassage.com^
+||weavelurkwiden.com^
+||weaveradrenaline.com^
+||weaverdispensepause.com^
+||web-affiliation.com^
+||web-guardian.xyz^
+||web-security.cloud^
+||web0.eu^
+||webads.co.nz^
+||webads.media^
+||webair.com^
+||webassembly.stream^
+||webatam.com^
+||webcampromo.com^
+||webcampromotions.com^
+||webclickengine.com^
+||webclickmanager.com^
+||webcontentassessor.com^
+||webdatatrace.com^
+||webestablishedsunflower.com^
+||webfeetdaidled.com^
+||webmedrtb.com^
+||webpinp.com^
+||webpushcloud.info^
+||webquizspot.com^
+||webregadvertising.com^
+||webseeds.com^
+||websitepromoserver.com^
+||webteaser.ru^
+||webteensyusa.com^
+||webtradehub.com^
+||weceofcfmxtd.xyz^
+||wechoong.com^
+||wecjdqpinrpaugf.com^
+||wecouldle.com^
+||wedflossbecause.com^
+||wednesdaygranddadlecture.com^
+||wednesdaynaked.com^
+||wedonhisdhilte.com^
+||wee-intention.com^
+||weechouh.com^
+||weedazou.net^
+||weedfowlsgram.com^
+||weednewspro.com^
+||weehauptoupt.com^
+||week1time.com^
+||weeklideals.com^
+||weeklyimplement.pro^
+||weeksth.com^
+||weepingpretext.com^
+||weestuch.com^
+||weethery.com^
+||weftsgeogeny.com^
+||wegastroky.com^
+||wegetpaid.net^
+||wegotmedia.com^
+||wehaveinourd.org^
+||wehras.com^
+||wehrma.com^
+||weighertutania.com^
+||weighinened.com^
+||wel-wel-fie.com^
+||welchdecrier.com^
+||welcomeargument.com^
+||welcomememory.pro^
+||welcometerrific.com^
+||welcomingcasklive.com^
+||welcomingvigour.com^
+||welfarefit.com^
+||wellhello.com^
+||wellinformed-song.com^
+||welllwrite.com^
+||wellmadeabroad.pro^
+||wellmendorrs.uno^
+||wellmov.com^
+||wellnesszap.com^
+||wellworn-term.pro^
+||weltercampe.com^
+||welved.com^
+||wemfpbtd.xyz^
+||wempooboa.com^
+||wendelstein-1b.com^
+||wenhat.com^
+||wenher.com^
+||wennishbubbles.com^
+||wensaidoheth.xyz^
+||weoesgvow.xyz^
+||weoigpwcg.com^
+||weownthetraffic.com^
+||wereriskbarnacle.com^
+||wererxrzmp.com^
+||werped.com^
+||wesdol.com^
+||weshsofoij.xyz^
+||wesicuros.com^
+||westerdayeol.site^
+||westreflection.com^
+||westslendersolitary.com^
+||westspulse.com^
+||wet-maybe.pro^
+||wet-slice.com^
+||wetbackbabai.com^
+||wetoocku.com^
+||wetpeachcash.com^
+||wetryprogress.com^
+||wetzal.com^
+||wevrwqjlylmaj.top^
+||wexfhjpmvhnakq.com^
+||wezmklgd.com^
+||wezvveogk.com^
+||wf66l5ylwq.com^
+||wfcs.lol^
+||wfdlrirntafl.com^
+||wfnetwork.com^
+||wfnpay.com^
+||wfthumty.pm^
+||wfuwlkgm.com^
+||wg-aff.com^
+||wgbwlgzthobp.com^
+||wgchrrammzv.com^
+||wgkggub.com^
+||wgplayer.com^
+||wgpsjcpdulptl.com^
+||whagrogiva.com^
+||whagrolt.com^
+||whaidree.com^
+||whairted.xyz^
+||whairtoa.com^
+||whaishub.net^
+||whaiweel.com^
+||whaleads.com^
+||whalepp.com^
+||whamiwiwu.pro^
+||whampamp.com^
+||whamplempangwe.top^
+||whamukoji.pro^
+||whamuthygle.com^
+||wharployn.com^
+||whartaug.net^
+||whartfidalgo.life^
+||whatijunnstherew.com^
+||whatisnewappforyou.top^
+||whatisuptodaynow.com^
+||whatsoeverlittle.com^
+||whaudsur.net^
+||whauglorga.com^
+||whaugluw.com^
+||whaulaul.net^
+||whaulids.com^
+||whaxanso.net^
+||whazugho.com^
+||whdupigghrm.xyz^
+||whechypheshu.com^
+||whedupache.pro^
+||wheedran.com^
+||wheeksir.net^
+||wheel-of-fortune-prod.com^
+||wheelbarrowbenignity.com^
+||wheeldenunciation.com^
+||wheeledabbotafterward.com^
+||wheeledajar.com^
+||wheeledmoundangrily.com^
+||wheelstweakautopsy.com^
+||wheensairga.com^
+||wheeptit.net^
+||wheers.com^
+||wheeshoo.net^
+||wheestop.xyz^
+||wheetlemetreza.com^
+||wheftouw.xyz^
+||whelia.com^
+||whelsumt.com^
+||whencewaxworks.com^
+||whenevererupt.com^
+||whengebsoth.com^
+||whenmyfe.xyz^
+||wheral.com^
+||where.com^
+||whereaboutsconclusive.com^
+||whereaboutsgolancould.com^
+||wherebyinstantly.com^
+||whereres.com^
+||whereuponcomicsraft.com^
+||wherevertogo.com^
+||wheroi.com^
+||whertinu.com^
+||whestendurous.top^
+||whethermondos.digital^
+||whethobs.xyz^
+||whetin.com^
+||whiceega.com^
+||whicus.com^
+||whifflehumeral.guru^
+||whihauve.net^
+||whileinferioryourself.com^
+||whiletilth.com^
+||whillfortis.life^
+||whimpercategory.com^
+||whinecapicha.space^
+||whineshellcat.space^
+||whiningbewildered.com^
+||whiningconfessed.com^
+||whipgos.com^
+||whippedfreezerbegun.com^
+||whippedpuces.tech^
+||whiprayoutkill.com^
+||whirkenhevi.digital^
+||whirlclick.com^
+||whirltoes.com^
+||whirlwindconsistencyinoffensive.com^
+||whirlwindofnews.com^
+||whiskersbiographypropulsion.com^
+||whiskerssituationdisturb.com^
+||whisperofisaak.com^
+||whisperpostage.com^
+||whisteeb.xyz^
+||whistlingbeau.com^
+||whitenoisenews.com^
+||whitgodship.com^
+||whittenchorded.com^
+||whizduly.com^
+||whjepqhsxed.xyz^
+||whkyiuufzjt.com^
+||whnoxcmxgbqrq.xyz^
+||whoachoh.com^
+||whoajeex.xyz^
+||whoaksoo.com^
+||whoalsos.com^
+||whoapsoo.com^
+||whoavais.com^
+||whoavaud.net^
+||whobabsaim.com^
+||whodouth.net^
+||whoevercloakroom.com^
+||whofiguredso.org^
+||whoftits.xyz^
+||wholaums.xyz^
+||whole-win.pro^
+||wholeactualjournal.com^
+||wholeactualnewz.com^
+||wholebestjournal.com^
+||wholecommonposts.com^
+||wholecoolposts.com^
+||wholecoolstories.com^
+||wholedailyfeed.com^
+||wholefreshposts.com^
+||wholehotjournal.com^
+||wholehugestories.com^
+||wholehugewords.com^
+||wholenicenews.com^
+||wholesomelethal.com^
+||wholesomemillennium.com^
+||wholewowblog.com^
+||whollychapters.com^
+||whompedcuorin.com^
+||whomspreadbeep.com^
+||whoodseb.com^
+||whoognoz.com^
+||whookroo.com^
+||whoopersavour.com^
+||whoostoo.net^
+||whoostoo.xyz^
+||whootapt.com^
+||whootascots.com^
+||whootkhankah.com^
+||whoppercreaky.com^
+||whosailedbe.xyz^
+||whotchie.net^
+||whotrundledthe.com^
+||whoumtip.xyz^
+||whoungoz.net^
+||whounoag.xyz^
+||whourgie.com^
+||whoursie.com^
+||whoururt.xyz^
+||whouseem.com^
+||whoustoa.net^
+||whoutchi.net^
+||whoutsog.net^
+||whouvike.com^
+||whouzelt.xyz^
+||whowascryingforthe.com^
+||whowhipi.net^
+||whpqvmaxr.xyz^
+||whreqyvajeer.com^
+||whsledorking.com^
+||whuckaip.xyz^
+||whudursus.com^
+||whugesto.net^
+||whuhough.xyz^
+||whujoagh.net^
+||whukroal.net^
+||whulsaux.com^
+||whulterprotein.com^
+||whupsoza.xyz^
+||whuptaiz.net^
+||whuweehy.xyz^
+||whychymithy.com^
+||whyl-laz-i-264.site^
+||whyocafenet.space^
+||wibtntmvox.com^
+||wichauru.xyz^
+||wichtstoppit.space^
+||wickedhumankindbarrel.com^
+||wickedoutrage.com^
+||wicketfumage.com^
+||wickiupcopalms.com^
+||widaimty.com^
+||wideeyed-painting.com^
+||wideeyedlady.pro^
+||wideeyedsink.com^
+||widelt.com^
+||widelyuddercancelling.com^
+||widern.com^
+||widespreadgabblewear.com^
+||widezealconstant.com^
+||widgetbucks.com^
+||widgetly.com^
+||widore.com^
+||widow5blackfr.com^
+||widowyreins.com^
+||widton.com^
+||widual.com^
+||wiediceberg.uno^
+||wiela-kig.com^
+||wifescamara.click^
+||wifeskneels.com^
+||wigcpgdlqbqof.com^
+||wigetmedia.com^
+||wigfulchiack.com^
+||wigglestoriesapt.com^
+||wigglewurm.com^
+||wiglessernes.com^
+||wiglessoctaves.com^
+||wiglurto.xyz^
+||wigrirtu.com^
+||wikeqa.uno^
+||wilcooxcheek.com^
+||wild-plant.pro^
+||wildernessproven.com^
+||wildestelf.com^
+||wildhookups.com^
+||wildlifeeventlean.com^
+||wildmatch.com^
+||wildxxxparties.com^
+||wilfridamendment.com^
+||wilfulkilometre.com^
+||wilfulknives.com^
+||wilfulpessimistic.com^
+||willetslibbet.digital^
+||williamelemental.com^
+||williamporterlilac.com^
+||willinglypromoteceremony.com^
+||willingnessaggravationfits.com^
+||willingnesslookheap.com^
+||willoweiffel.com^
+||willtissuetank.com^
+||wilningplunder.com^
+||wilslide.com^
+||wilsomearghan.com^
+||wiltedfuture.pro^
+||wimatnngqaeqgwj.com^
+||wimmon.com^
+||wimpeelt.com^
+||wimplesbooklet.com^
+||win-bidding.com^
+||winbestprizess.info^
+||winbuyer.com^
+||windindelicateexclusive.com^
+||windingnegotiation.com^
+||windingravesupper.com^
+||windofaeolus.com^
+||windowdemiselowlife.com^
+||windowmentaria.com^
+||windowsaura.com^
+||windowsdaggerminiaturization.com^
+||windowsgushfurnished.com^
+||windsplay.com^
+||windy-bench.pro^
+||windymissphantom.com^
+||winearth.life^
+||winewiden.com^
+||winfreeprize.online^
+||wingads.com^
+||wingerssetiger.com^
+||wingingtuzzle.space^
+||wingleeer.space^
+||winiermarrier.com^
+||winneradsmedia.com^
+||winnersolutions.net^
+||winningdotaltar.com^
+||winnockhagship.guru^
+||winpbn.com^
+||winr.online^
+||winslinks.com^
+||winternewsnow.name^
+||winterolivia.com^
+||wintjaywolf.org^
+||wipedhypocrite.com^
+||wipeilluminationlocomotive.com^
+||wipeunauthorized.com^
+||wiphpiqsuheta.com^
+||wipowaxe.com^
+||wirelessannexwren.com^
+||wirelessdeficiencyenemies.com^
+||wirelessinvariable.com^
+||wirenth.com^
+||wiringcollectorguffaw.com^
+||wiringsensitivecontents.com^
+||wirratailage.com^
+||wirrttnlmumsak.xyz^
+||wirwastine.digital^
+||wisehowronspar.com^
+||wishesantennarightfully.com^
+||wishesobtrusivefastest.com^
+||wishfulauthorities.com^
+||wishfulthingtreble.com^
+||wishjolty.com^
+||wishjus.com^
+||wishmayvaganti.website^
+||wisingpianeta.uno^
+||wister.biz^
+||wistfulassign.com^
+||wistfulcomet.com^
+||witalfieldt.com^
+||witchcraftbarterexploded.com^
+||withcarsickhatred.com^
+||withcrepteast.com^
+||withdedukication.com^
+||withdrawcosmicabundant.com^
+||withdrewparliamentwatery.com^
+||withdromnit.pro^
+||withearamajo.info^
+||withenvisagehurt.com^
+||withersserdabs.guru^
+||withesajowan.com^
+||withholdrise.com^
+||withholdstandstill.com^
+||withholdsubsequently.com^
+||withinresentful.com^
+||withoutcontrol.com^
+||witlayvet.com^
+||witnessremovalsoccer.com^
+||witnesssimilarindoors.com^
+||wittilyfrogleg.com^
+||wivesstandpoint.com^
+||wivoqi.uno^
+||wivtuhoftat.com^
+||wizardmarndl.com^
+||wizardunstablecommissioner.com^
+||wizkrdxivl.com^
+||wizliebeg.com^
+||wizwarsum.site^
+||wjgcygwgrvooio.com^
+||wjikxopltjp.xyz^
+||wjudihl.com^
+||wka4jursurf6.com^
+||wkewgywth.xyz^
+||wkjoehzlkl.com^
+||wkmorvzqjmwav.top^
+||wknaczrxjrj.com^
+||wkoeoaavammkr.top^
+||wkpfgjbmd.com^
+||wkqcnkstso.com^
+||wl-cornholio.com^
+||wlafx4trk.com^
+||wlawpzx.com^
+||wldepmzuwqvmyq.com^
+||wledconsi.xyz^
+||wlen1bty92.pro^
+||wlfcwkijsknted.xyz^
+||wlhzbbvtofot.com^
+||wlimrvsnusyawk.com^
+||wliuahugpgo.com^
+||wlmitgzbht.com^
+||wltsgqnblq.com^
+||wlyxhdffvgz.com^
+||wma.io^
+||wmbbsat.com^
+||wmgtr.com^
+||wmkyrbx.com^
+||wmlfyerssqlipx.com^
+||wmober.com^
+||wmolgnjo.xyz^
+||wmpset.com^
+||wmptcd.com^
+||wmptctl.com^
+||wmpted.com^
+||wmpuem.com^
+||wmtaeem.com^
+||wmtmhbuiumwl.com^
+||wmudsraxwj.xyz^
+||wmwwmbjkmalz.top^
+||wmxthwflju.xyz^
+||wndvcmyrqwnbdy.xyz^
+||wnedandlooked.info^
+||wnjjhksaue.com^
+||wnjtssmha.com^
+||wnp.com^
+||wnrrhcyok.xyz^
+||wnrusisedprivatedq.info^
+||wnt-some-psh.net^
+||wnt-some-push.com^
+||wnulffwyetlek.com^
+||wnvdgegsjoqoe.xyz^
+||wnwkzzzheca.com^
+||wnyuehqewfisvby.com^
+||woaembayed.uno^
+||woafoame.net^
+||woaneeti.com^
+||woaneezy.com^
+||woathail.net^
+||woathaiz.net^
+||wobblyiroha.com^
+||wobsneesty.space^
+||wodycaha.com^
+||woeefpxz.com^
+||woeentre.guru^
+||woejh.com^
+||wofqzuwtkxw.com^
+||wofulsensism.com^
+||wogglehydrae.com^
+||wokaptoa.com^
+||wokenoptionalcohabit.com^
+||wokfirsax.com^
+||wolaufie.com^
+||wolfedcedule.com^
+||wolffiareecho.com^
+||wolqundera.com^
+||wolsretet.net^
+||wolve.pro^
+||womanedlithite.guru^
+||wombalayah.com^
+||wombsaimscary.com^
+||womenvocationanxious.com^
+||womerasecocide.com^
+||womsauph.com^
+||woncherish.com^
+||wondefulapplend.com^
+||wonderhsjnsd.com^
+||wonderingmassage.com^
+||wonderlandads.com^
+||wonfigfig.com^
+||wongahmalta.com^
+||wongaunitage.uno^
+||wonsegax.net^
+||woodbeesdainty.com^
+||wooden-comfort.com^
+||woodlandsveteran.com^
+||woodtipvpnrh.com^
+||woodymotherhood.com^
+||woofoafi.xyz^
+||woogoust.com^
+||woolasib.net^
+||wooledswards.com^
+||woolenabled.com^
+||woolsawaq.com^
+||woopteem.net^
+||wootmedia.net^
+||woovoree.net^
+||wopsedoaltuwipp.com^
+||wopsedoaltuwn.com^
+||wopsedoaltuwo.com^
+||wopsedoaltuwp.com^
+||wordbodily.com^
+||wordierkonak.com^
+||wordingget.com^
+||wordlockdown.com^
+||wordpersonify.com^
+||wordspeachescolored.com^
+||woredi.com^
+||woreinformed.com^
+||worersie.com^
+||worimu.uno^
+||worimu.xyz^
+||workback.net^
+||workeddecay.com^
+||workerdisadvantageunrest.com^
+||workervanewalk.com^
+||workhovdi.com^
+||workhovdiminatedi.info^
+||workingflense.website^
+||workmanceremony.com^
+||worldactualstories.com^
+||worldbestposts.com^
+||worldbusiness.life^
+||worldcommonwords.com^
+||worldcoolfeed.com^
+||worldfreshblog.com^
+||worldglobalssp.xyz^
+||worldofviralnews.com^
+||worldsbestoffer.xyz^
+||worldsportlife.com^
+||worldtimes2.xyz^
+||worldtraffic.trade^
+||worldviralnewz.com^
+||worldwhoisq.org^
+||worldwidemailer.com^
+||worldwideor.info^
+||worldwideorganiza.xyz^
+||worlowedonh.com^
+||wormdehydratedaeroplane.com^
+||wormishammites.com^
+||worn-brown.pro^
+||wornie.com^
+||worred.com^
+||worriesteapotairborne.com^
+||worseobscureplastic.com^
+||worsesziara.com^
+||worshipstubborn.com^
+||worstideatum.com^
+||worstnumidae.com^
+||worthconesquadron.com^
+||worthless-living.pro^
+||worthless-theme.pro^
+||worthlessanxiety.pro^
+||worthspontaneous.com^
+||worthwhile-chance.com^
+||worthwhileawe.com^
+||worthycondimentburied.com^
+||worthylighteravert.com^
+||wortlejambul.com^
+||wossaung.net^
+||woudaufe.net^
+||woujoami.com^
+||woukrkskillsom.info^
+||wouldmakefea.org^
+||wouldmakefeag.info^
+||wouldnotspea.info^
+||wouled.com^
+||woulin.com^
+||woulst.com^
+||wounderfullife.xyz^
+||wountr.com^
+||wouthula.xyz^
+||wouvista.com^
+||wovazaix.com^
+||wovensur.com^
+||wowcalmnessdumb.com^
+||wowebahugoo.com^
+||wowhaujy.com^
+||wowjogsot.com^
+||wowkydktwnyfuo.com^
+||wowlnk.com^
+||wowreality.info^
+||wowshortvideos.com^
+||woxfiybiepgltf.com^
+||woymebsi.com^
+||wp3advesting.com^
+||wpadmngr.com^
+||wpcgyoyq.com^
+||wphmavwgay.xyz^
+||wpihekqpm.xyz^
+||wpkdqrzzcodvjc.com^
+||wplmbsrzobj.com^
+||wpncdn.com^
+||wpnetwork.eu^
+||wpnjs.com^
+||wpnokuxfmu.xyz^
+||wpnrtnmrewunrtok.xyz^
+||wpnsrv.com^
+||wpooxqs.com^
+||wpowiqkgykf.com^
+||wpshsdk.com^
+||wpsmcns.com^
+||wpu.sh^
+||wpunativesh.com^
+||wpush.org^
+||wpushorg.com^
+||wqjbldnnceroue.com^
+||wqzjfsmudvpct.com^
+||wqzqoobqpubx.com^
+||wqzyxxrrep.com^
+||wrangleprickly.com^
+||wrappeddimensionimpression.com^
+||wrathful-alternative.com^
+||wrathfultower.pro^
+||wrdnaunq.com^
+||wreaksyolkier.com^
+||wreathabble.com^
+||wreckergaboon.com^
+||wreckgroupads.com^
+||wreckingplain.com^
+||wrenchfavourablespear.com^
+||wrenchsound.store^
+||wrenko.com^
+||wrensacrificepossibly.com^
+||wrestlingembroider.com^
+||wretched-confusion.com^
+||wretcheddrunkard.com^
+||wretchmilitantasia.com^
+||wrevenuewasadi.info^
+||wrfkjw.com^
+||wrgjbsjxb.xyz^
+||wriedwite.uno^
+||wrient.com^
+||wriestnese.website^
+||writeestatal.space^
+||writerredolasy.club^
+||writhehawm.com^
+||writhing-library.pro^
+||writingwhine.com^
+||writshackman.com^
+||writtenanonymousgum.com^
+||wrjcedwpsybttkh.com^
+||wrkl.xyz^
+||wronal.com^
+||wronol.com^
+||wronti.com^
+||wrontonshatbona.com^
+||wrotad.com^
+||wrotop.com^
+||wrotov.com^
+||wrotus.com^
+||wrrzje.com^
+||wruaqpkuwa.com^
+||wrufer.com^
+||wrycomparednutshell.com^
+||wryfruw.com^
+||wrylength.pro^
+||wrypassenger.com^
+||wsafeguardpush.com^
+||wsejsoqdmdzcvr.com^
+||wseojloda.com^
+||wsgmcgtbvky.com^
+||wsinterfumes.info^
+||wsjlbbqemr23.com^
+||wsjpcev.com^
+||wslqgslkuv.com^
+||wsmobltyhs.com^
+||wspsbhvnjk.com^
+||wsvibiysludyfwp.xyz^
+||wt20trk.com^
+||wt2noay3fgjn.com^
+||wtfgep.xyz^
+||wtg-ads.com^
+||wtkfxoqolprv.com^
+||wtmhwnv.com^
+||wtpizrezmr.com^
+||wtpsicowsqb.xyz^
+||wtrep.xyz^
+||wubsauth.net^
+||wuckaity.com^
+||wudr.net^
+||wuftoars.net^
+||wuidtethhkcko.com^
+||wujyeflb.com^
+||wukbgater.buzz^
+||wukoopicee.com^
+||wukoulnhdlu.info^
+||wuksaiho.net^
+||wuksosta.com^
+||wuluju.uno^
+||wumpakuw.net^
+||wumpeeps.net^
+||wumteecoodsu.com^
+||wumufama.com^
+||wunteetoco.com^
+||wuombkpa.com^
+||wupoughu.com^
+||wuqconn.com^
+||wurqaz.com^
+||wurstsmikael.life^
+||wussucko.com^
+||wutseelo.xyz^
+||wuwutnnyedlhvr.com^
+||wuzbhjpvsf.com^
+||wvhba6470p.com^
+||wvjzbijwbsegqq.com^
+||wvnuubmothth.com^
+||wvpfumotgpsfy.com^
+||wvsrebdogmq.com^
+||wvvkxni.com^
+||wvwxjfjjytaf.com^
+||wvxcdtuhcagistb.xyz^
+||ww2.imgadult.com^
+||ww2.imgtaxi.com^
+||ww2.imgwallet.com^
+||wwfx.xyz^
+||wwija.com^
+||wwkedpbh4lwdmq16okwhiteiim9nwpds2.com^
+||wwow.xyz^
+||wwoww.xyz^
+||wwowww.xyz^
+||wwpon365.ru^
+||wwpush22.com^
+||wwrpfevyca.com^
+||wwunnmshmv.xyz^
+||www6.hentai-zone.com^
+||www8.upload-pics.com^
+||wwwadcntr.com^
+||wwwowww.xyz^
+||wwwpromoter.com^
+||wwwwndings.click^
+||wwxnbsvwultw.com^
+||wxaqazawxhjiz.com^
+||wxcqdnf.com^
+||wxejroeeteesr.com^
+||wxhiojortldjyegtkx.bid^
+||wxltarsyoffmm.com^
+||wxmicgwfzqekj.com^
+||wxseedslpi.com^
+||wxvfhgdeis.com^
+||wydtxpctgipa.xyz^
+||wyeszcj.com^
+||wyglyvaso.com^
+||wyhifdpatl.com^
+||wyjaxvuejinse.com^
+||wyjkqvtgwmjqb.xyz^
+||wylmzwkywjrzr.top^
+||wynather.com^
+||wynnsbrot.com^
+||wynocbraul.com^
+||wynvalur.com^
+||wyoxmklaa.xyz^
+||wyrtqdvhuiyhml.com^
+||wysasys.com^
+||wyscmkd.com^
+||wysyshypti.pro^
+||wytxjmow.com^
+||wzcznlufq.com^
+||wzdzht7am5.com^
+||wzk5ndpc3x05.com^
+||wzlbhfldl.com^
+||wzmidfgwyxfrd.com^
+||wzncuhcpbijx.com^
+||wzojibovpm.com^
+||wzrqeos.com^
+||wzxty168.com^
+||x011bt.com^
+||x2tsa.com^
+||x4pollyxxpush.com^
+||x7r3mk6ldr.com^
+||x95general.com^
+||x9socptyr.com^
+||xaajawwskkcnfuc.com^
+||xad.com^
+||xadcentral.com^
+||xads.one^
+||xadsmart.com^
+||xageyai.com^
+||xaguturkuufyq.com^
+||xahhhptqa.top^
+||xajqhrrrnxmy.com^
+||xakfdicg.com^
+||xalienstreamx.com^
+||xameleonads.com^
+||xanawet.com^
+||xannevugjv.com^
+||xapads.com^
+||xaqavvmtkcgtg.xyz^
+||xarbenul.com^
+||xargijqtgysdvgj.com^
+||xatesfrgkifde.com^
+||xawlop.com^
+||xaxoro.com^
+||xaxrtiahkft.com^
+||xazwlyh.com^
+||xbc8fsvo5w75wwx8.pro^
+||xbcnvj2mdk1dn1.com^
+||xbetobprp.com^
+||xbxyhged.xyz^
+||xcec.ru^
+||xcejarignt.com^
+||xcelltech.com^
+||xcelsiusadserver.com^
+||xcgbpsyob.com^
+||xclicks.net^
+||xcowuheclvwryh.com^
+||xcqyvahohs.com^
+||xcsjbge.com^
+||xctignum.uno^
+||xcvhhgdbyqk.xyz^
+||xcvsdrqagn.com^
+||xcwxfcav.com^
+||xdcngimejo.com^
+||xder1.fun^
+||xder1.online^
+||xdezxlbnpo.com^
+||xdhqtgpkywjl.com^
+||xdirectx.com^
+||xdiwbc.com^
+||xdkvvtucvbqhv.xyz^
+||xdmanage.com^
+||xdmicjkveqlgllp.com^
+||xdserv.com^
+||xduvqslud.com^
+||xdvsijtlhr.com^
+||xdycqcoefditwj.com^
+||xebadu.com^
+||xegluwate.com^
+||xegmsox.com^
+||xel-xel-fie.com^
+||xelllwrite.com^
+||xenar.xyz^
+||xenosmussal.com^
+||xenylclio.com^
+||xetlugupyug.com^
+||xeuswz.com^
+||xfahjal.com^
+||xfbeobsutqtndp.com^
+||xfcpdigfsx.xyz^
+||xfguylptuqw.com^
+||xfhgstxcytiu.com^
+||xfiebjkmpp.com^
+||xfileload.com^
+||xfimwjibh.top^
+||xfvvygrv.com^
+||xfwblpomxc.com^
+||xfxssqakis.com^
+||xfyqlex.com^
+||xgeuzcfrkeb.com^
+||xghxpvl.com^
+||xgmtlmrweyasy.com^
+||xgraph.net^
+||xgstemmj.com^
+||xgwhrvnxvhqgi.com^
+||xgwkcpybi.com^
+||xhaeuubhi.xyz^
+||xhlzokzxoxykxf.com^
+||xhmnbvn.com^
+||xhpzrfj.com^
+||xhr0.xyz^
+||xhwdvwqrfvwnl.com^
+||xhwwcif.com^
+||xhxondbtvhboa.com^
+||xhzz3moj1dsd.com^
+||xiaomengxiong.com^
+||xibilitukydteam.info^
+||xidx.org^
+||xigrtoai.com^
+||xijgedjgg5f55.com^
+||xilbalar.com^
+||xiloncopmat.com^
+||xineday.com^
+||xipaaqgnrehpdns.com^
+||xipteq.com^
+||xiryrnrz.com^
+||xissidearm.com^
+||xivmviuynlt.com^
+||xjakcitm.com^
+||xjfbhxp.com^
+||xjktawqrcaw.com^
+||xjqpxitqkaeodwi.xyz^
+||xjrwxfdphc.com^
+||xjsx.lol^
+||xkbgqducppuan.xyz^
+||xkbydybnle.com^
+||xkcgjkwjbmki.xyz^
+||xkdijkdiefu.com^
+||xkdxygywfm.com^
+||xkfogxtamlnn.com^
+||xkjnvehk.com^
+||xkpbcd.com^
+||xksdqikwbwat.com^
+||xksqb.com^
+||xkyphardw.com^
+||xlcceiswfsntpp.xyz^
+||xlfrhhp.com^
+||xliirdr.com^
+||xlirdr.com^
+||xlivesex.com^
+||xlivrdr.com^
+||xlmygeuxtv.com^
+||xlrdr.com^
+||xlrm-tech.com^
+||xludnfyrcmgbe.com^
+||xlviiirdr.com^
+||xlviirdr.com^
+||xlvirdr.com^
+||xlvlnpkeqz.com^
+||xlwaluyw.com^
+||xlwnzkyj.com^
+||xlyhpurmfnlall.com^
+||xmas-xmas-wow.com^
+||xmaswrite.com^
+||xmediaserve.com^
+||xmegaxvideox.com^
+||xmktites.com^
+||xml-api.online^
+||xmladserver.com^
+||xmlapiclickredirect.com^
+||xmlapiclickredirect10102022.com^
+||xmlgrab.com^
+||xmlheartbiddotnet.monster^
+||xmllover.com^
+||xmlppcbuzz.com^
+||xmlrtb.com^
+||xmlterra.com^
+||xmlwiz.com^
+||xmlwizard.com^
+||xms.lol^
+||xmsflzmygw.com^
+||xmvftaoz.com^
+||xnkjlnyefuohbgn.xyz^
+||xnszbmnxuzfvr.com^
+||xntrmky.com^
+||xnumzelehhhnnc.com^
+||xnvdigrbb.com^
+||xo28pclotovi.com^
+||xoalt.com^
+||xobr219pa.com^
+||xoemvfgjhpwea.com^
+||xohnodzbfjjqje.com^
+||xoimmmhfha.com^
+||xojepxhvvan.com^
+||xoktditxsmr.xyz^
+||xonyxdpnelhzi.com^
+||xotgpql.com^
+||xowvmktath.com^
+||xoyuxostayam.com^
+||xpjjlgzqs.com^
+||xpkftctvei.com^
+||xpollo.com^
+||xporn.in^
+||xprivate.cc^
+||xpsavuyxtfnqphw.com^
+||xqdfnqfgixjwpdb.xyz^
+||xqfwhxbfxhpjko.com^
+||xqgwymog.xyz^
+||xqhifbjhixb.com^
+||xqmyebdrunebsh.xyz^
+||xqzwtvjkjj.com^
+||xrlkvghzi.com^
+||xruolsogwsi.com^
+||xsjc4smhbyjf.com^
+||xskctff.com^
+||xsrs.com^
+||xstreamsoftwar3x.com^
+||xsvcouvr.xyz^
+||xszcdn.com^
+||xtdioaawlam.com^
+||xtlvjnyd.com^
+||xtneqpole.xyz^
+||xtrackme.com^
+||xtraserp.com^
+||xtremeserve.xyz^
+||xttaff.com^
+||xtvhkbqmhqu.xyz^
+||xtvrgxbiteit.xyz^
+||xtxlijkjtlln.xyz^
+||xtygfksar.xyz^
+||xtyzlkphfzjir.com^
+||xu5ctufltn.com^
+||xuakak.com^
+||xubrainge.live^
+||xucashntaghy.com^
+||xueserverhost.com^
+||xuffojr.com^
+||xuircnbbidmu.com^
+||xukpresesmr.info^
+||xuninrfwruoyqb.xyz^
+||xuosvih.com^
+||xuqarnasvru.com^
+||xuudtwhlkrbah.com^
+||xuzeez.com^
+||xvaeqgtbnunpkff.com^
+||xvbtdwdelhhxe.com^
+||xvderylqps.xyz^
+||xvdifvuro.com^
+||xvideos00.sbs^
+||xvika.com^
+||xviperonec.com^
+||xvjrveks.com^
+||xvolakoahxafi.com^
+||xvpqmcgf.com^
+||xvuslink.com^
+||xvvclhrrpgiln.com^
+||xvvsnnciengskyx.xyz^
+||xvwebllndr.com^
+||xwagtyhujov.com^
+||xwcfvvnegv.com^
+||xwlidjauhdxzx.com^
+||xwlketvkzf.com^
+||xwqea.com^
+||xwqvytuiko.com^
+||xwxqdfmlsgir.com^
+||xxaparfuel.xyz^
+||xxccdshj.com^
+||xxcpsqquegwmi.com^
+||xxdjxbvafjlw.com^
+||xxe2.com^
+||xxgqsbfwbmtqa.com^
+||xxifineer.com^
+||xxlargepop.com^
+||xxltr.com^
+||xxmaqoupnd.com^
+||xxodleylnfhyi.com^
+||xxofygygumf.com^
+||xxpghuf.com^
+||xxxbannerswap.com^
+||xxxex.com^
+||xxxiijmp.com^
+||xxxijmp.com^
+||xxxivjmp.com^
+||xxxjmp.com^
+||xxxmyself.com^
+||xxxnewvideos.com^
+||xxxoh.com^
+||xxxrevpushclcdu.com^
+||xxxviijmp.com^
+||xxxvipporno.com^
+||xxxvjmp.com^
+||xxxwebtraffic.com^
+||xyardnle.com^
+||xyaueuufd.com^
+||xydbpbnmo.com^
+||xyhuoi.com^
+||xyjaewocysv.com^
+||xylaoppress.com^
+||xylenylyetapa.uno^
+||xymhdmqrjxwl.com^
+||xynkxvrvusoh.com^
+||xyrkotsqhaf.com^
+||xyvjkdec.com^
+||xyz0k4gfs.xyz^
+||xyztracking.net^
+||xzewvqi.com^
+||xzezapozghp.com^
+||xznqolfzwdwini.com^
+||xzouahcxo.com^
+||xzvfyowf.com^
+||xzxomkrfn.com^
+||xzzpagn.com^
+||y3d3apip.buzz^
+||y41my.com^
+||y8z5nv0slz06vj2k5vh6akv7dj2c8aj62zhj2v7zj8vp0zq7fj2gf4mv6zsb.me^
+||yackedslaveys.com^
+||yacurlik.com^
+||yadtanc.xyz^
+||yaefddu.com^
+||yafabu.uno^
+||yahuu.org^
+||yaiehgpawwu.com^
+||yaiser.com^
+||yakcphctjbzwnv.com^
+||yakmakutopia.com^
+||yallarec.com^
+||yamanaisleepry.com^
+||yangtaotaming.com^
+||yankbecoming.com^
+||yankpainkiller.com^
+||yantrasvamosed.life^
+||yaowsivumw.com^
+||yapockspayess.com^
+||yaprin.com^
+||yarbthermos.com^
+||yardr.net^
+||yarlnk.com^
+||yarndispost.com^
+||yashi.com^
+||yatab.net^
+||yauryqvecn.com^
+||yavli.com^
+||yawcoynag.com^
+||yawledabobra.com^
+||yawpingdepaint.com^
+||yaysalvor.com^
+||yazftdbwgmwj.com^
+||ybaazpg.com^
+||ybcqozfk.com^
+||ybmebpsmpwueo.com^
+||ybmnptiuj.xyz^
+||ybs2ffs7v.com^
+||ybuduzpe.com^
+||ybujfcuqya.com^
+||ybwcvhcnulrgbvy.com^
+||ybyrudhdnrxcbe.com^
+||ycctxwachqke.com^
+||yceml.net^
+||yclost.com^
+||ycywhmyiixjafa.com^
+||yczrgigyspm.com^
+||ydbbbegf.xyz^
+||ydbmeagwyakdfl.com^
+||ydenknowled.com^
+||ydevelelasticals.info^
+||ydfavbj.com^
+||ydonkuan.com^
+||ydqkorympskhbc.com^
+||ydqmuofeandhh.com^
+||ydrovr.com^
+||ydsousagxm.com^
+||ydtqlmsvocjp.com^
+||ydwrkwwqytj.xyz^
+||ydygdsnss.com^
+||ydyuagpbdcavvxy.com^
+||ydyympasqrx.com^
+||ye185hcamw.com^
+||yeabble.com^
+||yealnk.com^
+||yearbookhobblespinal.com^
+||yearca.com^
+||yearlingpreferablyperiods.com^
+||yearnwillowconsumption.com^
+||yefzjingxudwib.com^
+||yeioreo.net^
+||yelledvotable.com^
+||yellow-resultsbidder.com^
+||yellow-resultsbidder.org^
+||yellowacorn.net^
+||yellowblue.io^
+||yellpeculiarities.com^
+||yenderagria.life^
+||yepsawomen.com^
+||yepsobtax.com^
+||yepteaswont.com^
+||yerto.info^
+||yes-messenger.com^
+||yesmessenger.com^
+||yespetor.com^
+||yestilokano.top^
+||yeteso.uno^
+||yeticbtgfpbgpfd.xyz^
+||yetterslave.com^
+||yevgimnam.com^
+||yevudi.uno^
+||yfbduqlo.xyz^
+||yfbnlrprmjj.com^
+||yfddaetiu.xyz^
+||yfedatherappeal.xyz^
+||yfedatherappear.com.ua^
+||yforaglasys.xyz^
+||yftpnol.com^
+||yfznypugeuunng.com^
+||ygfytomneijjj.com^
+||ygzkedoxwhqlzp.com^
+||yhbcii.com^
+||yhgameofmu.xyz^
+||yhhrtgltcfta.com^
+||yhhthemostb.xyz^
+||yhkeqboz.com^
+||yhlvgpqsr.com^
+||yhomrdh.com^
+||yhvejawarouohb.xyz^
+||yhwwinrhjwrxpm.com^
+||yhwysogyho.com^
+||yibivacaji.com^
+||yidbyhersle.xyz^
+||yiddiquitejuk.com^
+||yiejvik.com^
+||yieldads.com^
+||yieldadvert.com^
+||yieldbuild.com^
+||yieldlab.net^
+||yieldlove-ad-serving.net^
+||yieldmanager.net^
+||yieldoptimizer.com^
+||yieldpartners.com^
+||yieldrealistic.com^
+||yieldscale.com^
+||yieldselect.com^
+||yieldtraffic.com^
+||yieldx.com^
+||yifearmcsnsxrs.com^
+||yifmgpzeih.com^
+||yifsntub.xyz^
+||yijaovuvbndx.xyz^
+||yike20230306.live^
+||yim3eyv5.top^
+||yinadeditiontowriti.info^
+||yingforthemoo.info^
+||yinhana.com^
+||yinstbugged.com^
+||yinteukrestina.xyz^
+||yinthesprin.xyz^
+||yiqetu.uno^
+||yirtaycyytr.xyz^
+||yistkechauk.org^
+||yiteattends.tech^
+||yixios.com^
+||yizawe.xyz^
+||yjgkcbvmnqnicep.xyz^
+||yjnqeeocqrs.com^
+||yjrchhgs.com^
+||yjrlciff.com^
+||yjuxkncvy.com^
+||yjvuthpuwrdmdt.xyz^
+||ykdwyf.com^
+||ykmvnhue.com^
+||ykqalsm.com^
+||ykrwopdxkw.com^
+||ylasthepoityelthenl.xyz^
+||ylasthepoityelthens.com.ua^
+||ylavjbljpt.com^
+||ylbxaesyjj.com^
+||yldbt.com^
+||yldmgrimg.net^
+||ylgewqoohskzmx.com^
+||ylhhrjy.com^
+||ylih6ftygq7.com^
+||yljyjadlx.com^
+||yllanorin.com^
+||yllaris.com^
+||ylrtrhuxzjjc.com^
+||ylsaisfpkw.xyz^
+||ylx-1.com^
+||ylx-2.com^
+||ylx-3.com^
+||ylx-4.com^
+||ylzkfpzqffqon.com^
+||ym-a.cc^
+||ym8p.net^
+||ymchcohvncak.xyz^
+||ymuitydkdoy.com^
+||ymwehrducswbeu.com^
+||ynaapihbulbky.com^
+||yndmorvwdfuk.com^
+||yneaimn.com^
+||yneationsliee.xyz^
+||ynisramnmcm.com^
+||ynkjwogined.com^
+||ynklendr.online^
+||ynqagvbvptbh.xyz^
+||ynrije.com^
+||ynuvqtlcmao.com^
+||ynuyvhkxpqqnr.com^
+||yoads.net^
+||yoc-adserver.com^
+||yockpratty.com^
+||yogacomplyfuel.com^
+||yogadignified.com^
+||yogar2ti8nf09.com^
+||yoginisairbus.com^
+||yoginsnorland.com^
+||yojanaarabic.life^
+||yokeeroud.com^
+||yolkhandledwheels.com^
+||yomeno.xyz^
+||yonabrar.com^
+||yonhelioliskor.com^
+||yoniskurt.digital^
+||yonkerhallier.com^
+||yonniefacture.com^
+||yonsandileer.com^
+||yoomanies.com^
+||yooncsdaxrxosu.com^
+||yooumoughtc.xyz^
+||yopard.com^
+||yophaeadizesave.com^
+||yoplnog.com^
+||yoptaejrj2kkf8nj09.com^
+||yoqklgtgpdyqh.com^
+||yoredi.com^
+||yoshatia.com^
+||yosiboosi.com^
+||yosity.com^
+||yottacash.com^
+||youdguide.com^
+||youearrid.com^
+||yougotacheck.com^
+||youlamedia.com^
+||youlouk.com^
+||youngestdisturbance.com^
+||youngesthumorshaving.com^
+||youngstersaucertuition.com^
+||younighly.com^
+||your-great-chance.com^
+||your-instant-chance.com^
+||your-local-dream.com^
+||your-notice.com^
+||youractualblog.com^
+||youractualwords.com^
+||youradexchange.com^
+||yourbestappever.top^
+||yourbestlandever.com^
+||yourbestperfectdates.life^
+||yourcommonfeed.com^
+||yourcoolfeed.com^
+||yourfreshposts.com^
+||yourhotfeed.com^
+||yourjsdelivery.com^
+||yourkadspunew.com^
+||yourlegacy.club^
+||yourniceposts.com^
+||yourprivacy.icu^
+||yourquickads.com^
+||yourtopnews.com^
+||yourtubetvs.site^
+||yourviralnewz.com^
+||yourwebbars.com^
+||yourwownewz.com^
+||youthfulcontest.pro^
+||youthycouthe.uno^
+||youtube.local^
+||youtubecenter.net^
+||yowlvernon.com^
+||yoxepo.uno^
+||yoyadsdom.com^
+||ypdfpvwxwxkkga.com^
+||ypgpjvfv.xyz^
+||yphdrphx.xyz^
+||ypmadserver.com^
+||ypvrnyovntabcfp.xyz^
+||yqblutkjhx.com^
+||yqeuu.com^
+||yqgmvxufpkr.com^
+||yqiavtoy.com^
+||yqiyazkddb.com^
+||yqmxfz.com^
+||yqragd.com^
+||yqszaqtw.com^
+||yqxhslsqaqkbd.com^
+||yr9n47004g.com^
+||yrcpsfqoyi.com^
+||yrfowbaldjrxr.xyz^
+||yrhdmalrfr.com^
+||yrinpvfw.com^
+||yrkycfjq.com^
+||yrtfyeohmjdw.com^
+||yrufmaimbhxxe.com^
+||yrvzqabfxe.com^
+||yscfsmxrtcifye.com^
+||yscntxil.com^
+||ysemblyjusting.info^
+||ysesials.net^
+||ysmbttmncrajnk.com^
+||ysnakestanothia.xyz^
+||ysuchtjhwasp.info^
+||ytbzqtrog.com^
+||ytfezzava.com^
+||ytfotjfrttgyal.com^
+||ytgzz.com^
+||ythjhk.com^
+||ytihp.com^
+||ytimewornan.org^
+||ytimm.com^
+||ytndjaefvan.xyz^
+||ytoworkwi.org^
+||ytqnzvqfsr.com^
+||ytsa.net^
+||yttompthree.com^
+||ytvigqwx.com^
+||ytzihf.com^
+||yu0123456.com^
+||yuduoljvxsilvq.com^
+||yufbewrjjguc.com^
+||yuhliqltbtv.com^
+||yuhqeim.com^
+||yuhuads.com^
+||yukonearshot.com^
+||yulanoltunna.store^
+||yulunanews.name^
+||yumenetworks.com^
+||yumkelis.com^
+||yummiesfootle.space^
+||yummy-gap.pro^
+||yumomis.com^
+||yunded.com^
+||yunenly.com^
+||yunmaue.com^
+||yunshipei.com^
+||yupfiles.net^
+||yuppads.com^
+||yuppyads.com^
+||yuprggtdvdalo.com^
+||yuqyihkyk.com^
+||yuriembark.com^
+||yurokrelax.com^
+||yvmads.com^
+||yvoria.com^
+||yvzgazds6d.com^
+||ywhowascryin.com^
+||ywronwasthetron.com^
+||ywrvpmapjcg.xyz^
+||ywsxqrcfrtsnfa.com^
+||ywudaepnaudn.com^
+||ywvhxymyk.com^
+||ywyeetvrjx.xyz^
+||yx-ads6.com^
+||yxajqsrsij.com^
+||yxeqahmgyxqdid.com^
+||yxgacdl.com^
+||yxguqmcemyjiwb.com^
+||yxkhpk.com^
+||yxpoprve.com^
+||yy9s51b2u05z.com^
+||yycdihdvx.xyz^
+||yydtbpms8tf4.com^
+||yydwkkxhjb.com^
+||yygszlgor.com^
+||yyiodwdjfw.com^
+||yyjngvuaqrdgghs.com^
+||yyjvimo.com^
+||yykkhmcfvpk.com^
+||yynwgrdr.com^
+||yyptyrrjba.xyz^
+||yyselrqpyu.com^
+||z5x.net^
+||z6naousb.com^
+||z7yru.com^
+||zabanit.xyz^
+||zacleporis.com^
+||zadauque.net^
+||zaffarnimbed.com^
+||zagtertda.com^
+||zagvee.com^
+||zaheki.uno^
+||zaicasoawoul.com^
+||zaistaug.net^
+||zakaheggment.com^
+||zakbyajklqare.top^
+||zakbyajklqzyz.top^
+||zaltaumi.net^
+||zamansolpuga.com^
+||zambianmarlena.com^
+||zamiasbrouze.com^
+||zamioculcas2.org^
+||zangocash.com^
+||zanoogha.com^
+||zaparena.com^
+||zaphakesleigh.com^
+||zapprecisionadmire.com^
+||zapunited.com^
+||zarame.uno^
+||zaremamynah.com^
+||zaribastunty.com^
+||zarjzwlamwvjy.top^
+||zarjzwlamwzvj.top^
+||zarkjmnmvbkj.top^
+||zarkjmnmvblz.top^
+||zarkjmnmvllw.top^
+||zarpop.com^
+||zationservantas.info^
+||zationsuchasr.com^
+||zatloudredr.com^
+||zatnoh.com^
+||zaubanel.com^
+||zaucharo.xyz^
+||zaudouwa.xyz^
+||zauglomo.net^
+||zauglust.net^
+||zaumaico.com^
+||zaurakfaulted.com^
+||zauthuvy.com^
+||zayac2volk11.com^
+||zazaruniri.com^
+||zazerygu.pro^
+||zbnfhsk.com^
+||zbvhwaakws.com^
+||zcaadfl.com^
+||zcekqwlqktzrfq.com^
+||zcetwfqyzadizp.com^
+||zchdbiper.com^
+||zcode12.me^
+||zcode7.me^
+||zcoptry.com^
+||zcsbgzasy.com^
+||zcsnjbjlwn.com^
+||zdajdudqfq.com^
+||zdhq.xyz^
+||zdjljvsi.com^
+||zdljbrwosbymft.com^
+||zdxblxwjoees.com^
+||zeads.com^
+||zealeddrizzly.com^
+||zealfulhaired.life^
+||zealousstraitcommit.com^
+||zealpickup.com^
+||zealsalts.com^
+||zealso.com^
+||zebeaa.click^
+||zebraicrudista.com^
+||zedoaryrejects.com^
+||zedsapp.com^
+||zedxknzlwyofh.com^
+||zeebaith.xyz^
+||zeebestmarketing.com^
+||zeeca4u.com^
+||zeechumy.com^
+||zeegreen.net^
+||zeekaihu.net^
+||zeepartners.com^
+||zeeshech.net^
+||zeeshith.net^
+||zefusgk.com^
+||zegrumse.net^
+||zekedisco.com^
+||zekeeksaita.com^
+||zekkdxt.com^
+||zel-zel-fie.com^
+||zelatorpukka.com^
+||zelllwrite.com^
+||zelqytckpgzwag.com^
+||zelrasty.net^
+||zelrulte.com^
+||zemewitted.com^
+||zemteksu.xyz^
+||zemydreamsa.info^
+||zemywwm.com^
+||zendplace.pro^
+||zenkreka.com^
+||zenoviaexchange.com^
+||zenoviagroup.com^
+||zenujoub.com^
+||zeofnuvzsh.com^
+||zepazupi.com^
+||zephyronearc.com^
+||zer1ads.com^
+||zerads.com^
+||zerbei.com^
+||zercenius.com^
+||zerg.pro^
+||zerles.com^
+||zerodecisive.com^
+||zeroidtech.com^
+||zesty-lady.pro^
+||zetadeo.com^
+||zetamm.com^
+||zetchopa.xyz^
+||zeusadx.com^
+||zewkj.com^
+||zeyappland.com^
+||zeydoo.com^
+||zeydsapps.com^
+||zeypreland.com^
+||zferral.com^
+||zfgyvoarqreba.com^
+||zfhuzyw.com^
+||zfmxscs.com^
+||zfwlnfalxxmwzb.com^
+||zfwnbsdawitk.com^
+||zfxtodsxtmw.com^
+||zgazgluy.com^
+||zgcnxihiklai.com^
+||zgslicbleg.com^
+||zhaner.xyz^
+||zhedvge.com^
+||zheevmmvlwg.com^
+||zhej78i1an8w6ceu.com^
+||zhfvwkkftg.com^
+||zhhxxnfuxn.com^
+||zhmpqpqna.com^
+||zhmzsjvkii.com^
+||zhould.com^
+||zhqmctfwip.com^
+||zhyivocrjeplby.com^
+||zhzclbysg.com^
+||zi8ivy4b0c7l.com^
+||ziaratjs.tech^
+||zibaweva.com^
+||zidgrrfgb.com^
+||zidoudsa.net^
+||zighoacm.com^
+||zigighol.xyz^
+||zigreroa.net^
+||zigzag-ruin.pro^
+||zigzaggodmotheragain.com^
+||zigzagrowy.com^
+||zihditozlogf.com^
+||zihogchfaan.com^
+||zijaipse.com^
+||zikpwr.com^
+||zikraist.net^
+||zikroarg.com^
+||zilchesmoated.com^
+||zillahhayers.com^
+||zillaleegte.com^
+||zim-zim-zam.com^
+||zimg.jp^
+||zimill.com^
+||zimpolo.com^
+||zincdatawipe.com^
+||zinipx.xyz^
+||zinrora.pw^
+||zipakrar.com^
+||zipheeda.xyz^
+||ziphoumt.net^
+||zircongalanas.com^
+||zirdough.net^
+||zirdrax.com^
+||zirgogoo.xyz^
+||zisboombah.net^
+||zitaptugo.com^
+||zivtux.com^
+||ziwane.uno^
+||zixuyi.xyz^
+||ziziatramel.uno^
+||zizoxozoox.com^
+||zjbzzmnnkbjzy.top^
+||zjmmkjayjjazy.top^
+||zjo0tjqpm1.com^
+||zjpwrpo.com^
+||zjrnyrranjjay.top^
+||zjupukgjuez.com^
+||zjybqqaleeva.top^
+||zjybqqalenve.top^
+||zjyeblzkajwba.top^
+||zjyeblzkajwjz.top^
+||zkawzmlvqjejy.top^
+||zkcvb.com^
+||zkczzltlhp6y.com^
+||zkxggrwzswhpgn.com^
+||zlacraft.com^
+||zlbvewof.com^
+||zlink2.com^
+||zlink6.com^
+||zlinkc.com^
+||zlinkd.com^
+||zlinkm.com^
+||zljwhbuagdvl.com^
+||zlx.com.br^
+||zm232.com^
+||zmdesf.cn^
+||zmjagawa.com^
+||znaptag.com^
+||znnhmzumod.com^
+||znqip.net^
+||zoachoar.net^
+||zoachops.com^
+||zoadoash.net^
+||zoagremo.net^
+||zoaheeth.com^
+||zoawufoy.net^
+||zobsaims.com^
+||zodiacranbehalf.com^
+||zoeaegyral.com^
+||zog.link^
+||zogoluggers.com^
+||zogrepsili.com^
+||zoiqrudc.com^
+||zokbywpncgqrq.com^
+||zombiharshen.top^
+||zonealta.com^
+||zonupiza.com^
+||zonureflakier.uno^
+||zoocheeh.net^
+||zoopaweb.com^
+||zoopsame.com^
+||zooshawo.com^
+||zoozistu.net^
+||zorango.com^
+||zortaudi.xyz^
+||zosteraclumsy.website^
+||zouard.com^
+||zouemtjzuae.com^
+||zoukooso.com^
+||zouloafi.net^
+||zoutubephaid.com^
+||zozolilla.com^
+||zpcfnzjq.com^
+||zpgetworker11.com^
+||zpmkwufagp.com^
+||zpreland.com^
+||zprelandappslab.com^
+||zprelanding.com^
+||zprelandings.com^
+||zpvsuniqkhj.com^
+||zqfcndk.com^
+||zqksqsjupnb.com^
+||zqmmtbwqymhrru.com^
+||zquent.com^
+||zqwe.ru^
+||zrav2wkbrs.com^
+||zrijfnmfiiaik.com^
+||zrlnkvvqmqlvj.top^
+||zrszxrummjaci.com^
+||zrvnhlwypqpwjw.com^
+||zrwpporp.com^
+||zsbwoqpcxj.com^
+||zscwdu.com^
+||zsfjpbnxyyx.com^
+||zsgpdafjd.com^
+||zskuvehuihkusp.com^
+||zsxrhkrfwwv.com^
+||zt-0304.cc^
+||zteollhhyaqez.com^
+||ztfzizpkjrmhbc.com^
+||ztnibpbkl.com^
+||ztrack.online^
+||ztumuvofzbfe.com^
+||ztyqrwinqpvque.com^
+||zubivu.com^
+||zubojcnubadk.com^
+||zucks.net^
+||zudaichy.com^
+||zufoloodylize.com^
+||zufqmmwavdec.com^
+||zugeme.uno^
+||zughoocm.com^
+||zugnogne.com^
+||zugo.com^
+||zujoupso.net^
+||zukary.com^
+||zukore.com^
+||zukuta.com^
+||zukxd6fkxqn.com^
+||zumfzaamdxaw.com^
+||zumolery.xyz^
+||zumrieth.com^
+||zunnynd.com^
+||zunsavurdo.com^
+||zunsoach.com^
+||zuoltlhh.com^
+||zupee.cim^
+||zuphaims.com^
+||zuqito.uno^
+||zutcqppwm.com^
+||zuzodoad.com^
+||zvbkyrbwrlqll.top^
+||zvetokr2hr8pcng09.com^
+||zvhednrza.com^
+||zvjkhrdp.com^
+||zvkytbjimbhk.com^
+||zvrvwpcqweiwhm.com^
+||zvwhrc.com^
+||zwaar.net^
+||zwbbkjvzqbyba.top^
+||zwbbkjvzqembe.top^
+||zwjezmzbyerkj.top^
+||zwmvyzyrlvava.top^
+||zwnoeqzsuz.com^
+||zwqzxh.com^
+||zwtssi.com^
+||zwuqvpi.com^
+||zwwlaasbezg.com^
+||zxcdn.com^
+||zxdcxwpxheu.com^
+||zxr9gpxf7j.com^
+||zxwhkosabux.com^
+||zxwmmswtnoh.com^
+||zxxgoikbqyiu.com^
+||zy16eoat1w.com^
+||zybrdr.com^
+||zybsky.com^
+||zycaphede.com^
+||zyf03k.xyz^
+||zygenidempaper.digital^
+||zygomasbeaches.guru^
+||zyiis.net^
+||zyijzosrnzfru.com^
+||zylytavo.com^
+||zypenetwork.com^
+||zypy2h6rgfux.com^
+||zyuzdmxel.com^
+||zzbmanavblkaw.top^
+||zzhyebbt.com^
+||zzjwblqbwlrnj.top^
+||zzkwsosixkdu.com^
+||zzuzishy.com^
+! $document blocks
+||adservice.google.$document
+||bet365.com/*?affiliate=$document
+||dianomi.com^$document
+||maquiags.com^$document
+||paid.outbrain.com^$document
+||popcash.net^$document
+||popmyads.com^$document
+||vpn-offers.org^$document
+! Third-party
+||123date.me^$third-party
+||152media.com^$third-party
+||2beon.co.kr^$third-party
+||2htg.com^$third-party
+||2leep.com^$third-party
+||2mdn.net^$~media,third-party
+||33across.com^$third-party
+||360ads.com^$third-party
+||360installer.com^$third-party
+||365sbaffiliates.com^$third-party
+||4affiliate.net^$third-party
+||4cinsights.com^$third-party
+||4dsply.com^$third-party
+||7search.com^$third-party
+||888media.net^$third-party
+||9desires.xyz^$third-party
+||a-static.com^$third-party
+||a.raasnet.com^$third-party
+||a2dfp.net^$third-party
+||a2pub.com^$third-party
+||a2zapk.com^$script,subdocument,third-party,xmlhttprequest
+||a433.com^$third-party
+||a4g.com^$third-party
+||aa.voice2page.com^$third-party
+||aaddcount.com^$third-party
+||aamapi.com^$third-party
+||aanetwork.vn^$third-party
+||ablenctionalle.info^$third-party
+||abnad.net^$third-party
+||aboutads.quantcast.com^$third-party
+||accio.ai^$third-party
+||acloudimages.com^$third-party
+||acootaul.net^$third-party
+||acronym.com^$third-party
+||actiondesk.com^$third-party
+||activedancer.com^$third-party
+||ad-adapex.io^$third-party
+||ad.plus^$third-party
+||ad.style^$third-party
+||ad20.net^$third-party
+||ad2adnetwork.biz^$third-party
+||ad2bitcoin.com^$third-party
+||ad2links.com^$third-party
+||ad4989.co.kr^$third-party
+||ad4game.com^$third-party
+||ad6media.fr^$third-party
+||adacado.com^$third-party
+||adaction.se^$third-party
+||adacts.com^$third-party
+||adadvisor.net^$third-party
+||adagora.com^$third-party
+||adalliance.io^$third-party
+||adalso.com^$third-party
+||adamatic.co^$third-party
+||adaos-ads.net^$third-party
+||adap.tv^$~object,third-party
+||adapd.com^$third-party
+||adapex.io^$third-party
+||adatrix.com^$third-party
+||adbard.net^$third-party
+||adbasket.net^$third-party
+||adbetclickin.pink^$third-party
+||adbetnet.com^$third-party
+||adbit.biz^$third-party
+||adcalm.com^$third-party
+||adcell.com^$third-party
+||adclickafrica.com^$third-party
+||adcolony.com^$third-party
+||adconity.com^$third-party
+||adconscious.com^$third-party
+||addoor.net^$third-party
+||addroid.com^$third-party
+||addvantagetechnology.com^$third-party
+||addynamix.com^$third-party
+||addynamo.net^$third-party
+||adecn.com^$third-party
+||adedy.com^$third-party
+||adelement.com^$third-party
+||ademails.com^$third-party
+||adenc.co.kr^$third-party
+||adengage.com^$third-party
+||adentifi.com^$third-party
+||adespresso.com^$third-party
+||adexc.net^$third-party
+||adf01.net^$third-party
+||adfinity.pro^$third-party
+||adfinix.com^$third-party
+||adforgames.com^$third-party
+||adfrika.com^$third-party
+||adgage.es^$third-party
+||adgatemedia.com^$third-party
+||adgear.com^$third-party
+||adgebra.in^$third-party
+||adgitize.com^$third-party
+||adgrid.io^$third-party
+||adgroups.com^$third-party
+||adgrx.com^$third-party
+||adhash.com^$third-party
+||adhaven.com^$third-party
+||adhese.be^$third-party
+||adhese.com^$third-party
+||adhese.net^$third-party
+||adhigh.net^$third-party
+||adhitzads.com^$third-party
+||adhostingsolutions.com^$third-party
+||adhunt.net^$third-party
+||adicate.com^$third-party
+||adikteev.com^$third-party
+||adimise.com^$third-party
+||adimpact.com^$third-party
+||adinc.co.kr^$third-party
+||adinc.kr^$third-party
+||adinch.com^$third-party
+||adincon.com^$third-party
+||adindigo.com^$third-party
+||adingo.jp^$third-party
+||adinplay.com^$third-party
+||adinplay.workers.dev^$third-party
+||adintend.com^$third-party
+||adinterax.com^$third-party
+||adinvigorate.com^$third-party
+||adip.ly^$third-party
+||adipolo.com^$third-party
+||adipolosolutions.com^$third-party
+||adiqglobal.com^$third-party
+||adireland.com^$third-party
+||adireto.com^$third-party
+||adisfy.com^$third-party
+||adisn.com^$third-party
+||adit-media.com^$third-party
+||adition.com^$third-party
+||aditize.com^$third-party
+||adjal.com^$third-party
+||adjector.com^$third-party
+||adjesty.com^$third-party
+||adjug.com^$third-party
+||adjuggler.com^$third-party
+||adjuggler.net^$third-party
+||adjungle.com^$third-party
+||adjust.com^$script,third-party
+||adk2.co^$third-party
+||adk2.com^$third-party
+||adk2x.com^$third-party
+||adkengage.com^$third-party
+||adklip.com^$third-party
+||adknock.com^$third-party
+||adknowledge.com^$third-party
+||adkonekt.com^$third-party
+||adkova.com^$third-party
+||adlatch.com^$third-party
+||adlayer.net^$third-party
+||adlegend.com^$third-party
+||adlightning.com^$third-party
+||adline.com^$third-party
+||adlink.net^$third-party
+||adlive.io^$third-party
+||adloaded.com^$third-party
+||adlook.me^$third-party
+||adloop.co^$third-party
+||adlooxtracking.com^$third-party
+||adlpartner.com^$third-party
+||adlux.com^$third-party
+||adm-vids.info^$third-party
+||adm.shinobi.jp^$third-party
+||adman.gr^$third-party
+||admaru.com^$third-party
+||admatic.com.tr^$third-party
+||admax.space^$third-party
+||admaxim.com^$third-party
+||admedia.com^$third-party
+||admediatex.net^$third-party
+||admedit.net^$third-party
+||admedo.com^$third-party
+||admetricspro.com^$third-party
+||admost.com^$third-party
+||admulti.com^$third-party
+||adnami.io^$third-party
+||adnet.biz^$third-party
+||adnet.com^$third-party
+||adnet.de^$third-party
+||adnet.lt^$third-party
+||adnet.ru^$third-party
+||adnimation.com^$third-party
+||adnitro.pro^$third-party
+||adnium.com^$third-party
+||adnmore.co.kr^$third-party
+||adnow.com^$third-party
+||adnuntius.com^$third-party
+||adomik.com^$third-party
+||adonnews.com^$third-party
+||adoperator.com^$third-party
+||adoptim.com^$third-party
+||adorika.com^$third-party
+||adorion.net^$third-party
+||adosia.com^$third-party
+||adoto.net^$third-party
+||adparlor.com^$third-party
+||adpay.com^$third-party
+||adpays.net^$third-party
+||adpeepshosted.com^$third-party
+||adperfect.com^$third-party
+||adplugg.com^$third-party
+||adpnut.com^$third-party
+||adport.io^$third-party
+||adpredictive.com^$third-party
+||adpushup.com^$third-party
+||adquire.com^$third-party
+||adqva.com^$third-party
+||adreactor.com^$third-party
+||adrecord.com^$third-party
+||adrecover.com^$third-party
+||adrelayer.com^$third-party
+||adresellers.com^$third-party
+||adrevolver.com^$third-party
+||adrise.de^$third-party
+||adro.co^$third-party
+||adrocket.com^$third-party
+||adroll.com^$third-party
+||adrsp.net^$third-party
+||ads-pixiv.net^$third-party
+||ads.cc^$third-party
+||ads01.com^$third-party
+||adsbookie.com^$third-party
+||adscendmedia.com^$third-party
+||adscout.io^$third-party
+||adscpm.net^$third-party
+||adserve.com^$third-party
+||adservingfactory.com^$third-party
+||adservme.com^$third-party
+||adsexse.com^$third-party
+||adsfast.com^$third-party
+||adsforallmedia.com^$third-party
+||adshot.de^$third-party
+||adshuffle.com^$third-party
+||adsiduous.com^$third-party
+||adsight.nl^$third-party
+||adslivecorp.com^$third-party
+||adsmart.hk^$third-party
+||adsninja.ca^$third-party
+||adsniper.ru^$third-party
+||adsolutely.com^$third-party
+||adsparc.net^$third-party
+||adspeed.com^$third-party
+||adspruce.com^$third-party
+||adsquirrel.ai^$third-party
+||adsring.com^$third-party
+||adsrv4k.com^$third-party
+||adsrvmedia.com^$third-party
+||adsrvmedia.net^$third-party
+||adstargeting.com^$third-party
+||adstatic.com^$third-party
+||adstean.com^$third-party
+||adsterra.com^$third-party
+||adstock.pro^$third-party
+||adstoo.com^$third-party
+||adstudio.cloud^$third-party
+||adstuna.com^$third-party
+||adsummos.net^$third-party
+||adsupermarket.com^$third-party
+||adsvert.com^$third-party
+||adsync.tech^$third-party
+||adtarget.com.tr^$third-party
+||adtdp.com^$third-party
+||adtear.com^$third-party
+||adtech.de^$third-party
+||adtechium.com^$third-party
+||adtechjp.com^$third-party
+||adtechus.com^$third-party
+||adtegrity.net^$third-party
+||adtelligent.com^$third-party
+||adteractive.com^$third-party
+||adthrive.com^$third-party
+||adthurst.com^$third-party
+||adtival.network^$third-party
+||adtraction.com^$third-party
+||adtrix.com^$third-party
+||adultadworld.com^$third-party
+||adultimate.net^$third-party
+||adup-tech.com^$third-party
+||adurr.com^$third-party
+||adv-adserver.com^$third-party
+||advanseads.com^$third-party
+||advarkads.com^$third-party
+||advcash.com^$third-party
+||adventori.com^$third-party
+||adventurefeeds.com^$third-party
+||adversal.com^$third-party
+||advertarium.com.ua^$third-party
+||adverticum.net^$third-party
+||advertise.com^$third-party
+||advertisespace.com^$third-party
+||advertising365.com^$third-party
+||advertnative.com^$third-party
+||advertone.ru^$third-party
+||advertserve.com^$third-party
+||advertstream.com^$third-party
+||advertur.ru^$third-party
+||advg.jp^$third-party
+||adviad.com^$third-party
+||advideum.com^$third-party
+||advinci.net^$third-party
+||advmd.com^$third-party
+||advmedia.io^$third-party
+||advmedialtd.com^$third-party
+||advnetwork.net^$third-party
+||advombat.ru^$third-party
+||advon.net^$third-party
+||advpoints.com^$third-party
+||advsnx.net^$third-party
+||adwebone.com^$third-party
+||adwebster.com^$third-party
+||adworkmedia.com^$third-party
+||adworkmedia.net^$third-party
+||adworldmedia.com^$third-party
+||adworldmedia.net^$third-party
+||adx.io^$third-party
+||adxoo.com^$third-party
+||adxpose.com^$third-party
+||adxpremium.com^$third-party
+||adxpub.com^$third-party
+||adyoulike.com^$third-party
+||adysis.com^$third-party
+||adzbazar.com^$third-party
+||adzerk.net^$third-party
+||adzouk.com^$third-party
+||adzs.nl^$third-party
+||adzyou.com^$third-party
+||affbuzzads.com^$third-party
+||affec.tv^$third-party
+||affifix.com^$third-party
+||affili.st^$third-party
+||affiliate-b.com^$third-party
+||affiliateedge.com^$third-party
+||affiliategroove.com^$third-party
+||affilist.com^$third-party
+||afishamedia.net^$third-party
+||afp.ai^$third-party
+||afrikad.com^$third-party
+||afront.io^$third-party
+||afy11.net^$third-party
+||afyads.com^$third-party
+||ahvclick.com^$third-party
+||aim4media.com^$third-party
+||akavita.com^$third-party
+||aklamator.com^$third-party
+||alienhub.xyz^$third-party
+||alimama.com^$third-party
+||allmediadesk.com^$third-party
+||alpha-affiliates.com^$third-party
+||alright.network^$third-party
+||amateur.cash^$third-party
+||amobee.com^$third-party
+||andbeyond.media^$third-party
+||anicli.click^$third-party
+||aniview.com^$third-party
+||anrdoezrs.net/image-
+||anrdoezrs.net/placeholder-
+||anyclip-media.com^$third-party
+||anymedia.lv^$third-party
+||anyxp.com^$third-party
+||aorms.com^$third-party
+||aorpum.com^$third-party
+||apex-ad.com^$third-party
+||apexcdn.com^$third-party
+||aphookkensidah.pro^$third-party
+||apmebf.com^$third-party
+||app.ebyn.ai^$third-party
+||appnext.com^$third-party
+||apprupt.com^$third-party
+||apptap.com^$third-party
+||apxtarget.com^$third-party
+||apycomm.com^$third-party
+||apyoth.com^$third-party
+||aqua-adserver.com^$third-party
+||ar1nvz5.com^$third-party
+||aralego.com^$third-party
+||arcadebannerexchange.org^$third-party
+||arcadechain.com^$third-party
+||armanet.co^$third-party
+||artsai.com^$third-party
+||assemblyexchange.com^$third-party
+||assoc-amazon.ca^$third-party
+||assoc-amazon.co.uk^$third-party
+||assoc-amazon.com^$third-party
+||assoc-amazon.de^$third-party
+||assoc-amazon.es^$third-party
+||assoc-amazon.fr^$third-party
+||assoc-amazon.it^$third-party
+||asterpix.com^$third-party
+||auctionnudge.com^$third-party
+||audience2media.com^$third-party
+||audiencerun.com^$third-party
+||autoads.asia^$third-party
+||automatad.com^$third-party
+||awsmer.com^$third-party
+||axiaffiliates.com^$third-party
+||azadify.com^$third-party
+||backbeatmedia.com^$third-party
+||backlinks.com^$third-party
+||ban-host.ru^$third-party
+||bannerbank.ru^$third-party
+||bannerbit.com^$third-party
+||bannerboo.com^$third-party
+||bannerbridge.net^$third-party
+||bannerconnect.com^$third-party
+||bannerconnect.net^$third-party
+||bannerdealer.com^$third-party
+||bannerflow.com^$third-party
+||bannerflux.com^$third-party
+||bannerignition.co.za^$third-party
+||bannerlot.com^$third-party
+||bannerrage.com^$third-party
+||bannersmall.com^$third-party
+||bannersmania.com^$third-party
+||bannersnack.com^$third-party,domain=~bannersnack.dev
+||bannersnack.net^$third-party,domain=~bannersnack.dev
+||bannertrack.net^$~script,third-party
+||bannerweb.com^$third-party
+||bannieres-a-gogo.com^$third-party
+||baronsoffers.com^$third-party
+||bbelements.com^$third-party
+||bbuni.com^$third-party
+||beabsolom.com^$third-party
+||beaconads.com^$third-party
+||beaverads.com^$third-party
+||bebi.com^$third-party
+||beead.co.uk^$third-party
+||beead.net^$third-party
+||begun.ru^$third-party
+||behave.com^$third-party
+||belointeractive.com^$third-party
+||benfly.net^$third-party
+||beringmedia.com^$third-party
+||bestcasinopartner.com^$third-party
+||bestcontentcompany.top^$third-party
+||bestcontentfood.top^$third-party
+||bestcontentsoftware.top^$third-party
+||bestdeals.ws^$third-party
+||bestforexpartners.com^$third-party
+||besthitsnow.com^$third-party
+||bestofferdirect.com^$third-party
+||bestonlinecoupons.com^$third-party
+||bet3000partners.com^$third-party
+||bet365affiliates.com^$third-party
+||betoga.com^$third-party
+||betpartners.it^$third-party
+||betrad.com^$third-party
+||bettercollective.rocks^$third-party
+||bidfilter.com^$third-party
+||bidgear.com^$third-party
+||bidscape.it^$third-party
+||bidvertiser.com^$third-party
+||bidvol.com^$third-party
+||biggboss16.de^$third-party
+||bigpipes.co^$third-party
+||bigpulpit.com^$third-party
+||bigspyglass.com^$third-party
+||bildirim.eu^$third-party
+||bimbim.com^$third-party
+||bin-layer.de^$third-party
+||binlayer.com^$third-party
+||binlayer.de^$third-party
+||biskerando.com^$third-party
+||bitadv.co^$third-party
+||bitcoadz.io^$third-party
+||bitcoinadvertisers.com^$third-party
+||bitcoset.com^$third-party
+||bitonclick.com^$third-party
+||bitraffic.com^$third-party
+||bitspush.io^$third-party
+||bittads.com^$third-party
+||bizx.info^$third-party
+||bizzclick.com^$third-party
+||bliink.io^$third-party
+||blogads.com^$third-party
+||blogclans.com^$third-party
+||bluetoad.com^$third-party
+||blzz.xyz^$third-party
+||bmfads.com^$third-party
+||bodis.com^$third-party
+||bogads.com^$third-party
+||boo-box.com^$third-party
+||bookbudd.com^$third-party
+||boostable.com^$third-party
+||boostads.net^$third-party
+||braun634.com^$third-party
+||brealtime.com^$third-party
+||bricks-co.com^$third-party
+||broadstreetads.com^$third-party
+||browsekeeper.com^$third-party
+||btrll.com^$third-party
+||btserve.com^$third-party
+||bucketsofbanners.com^$third-party
+||budurl.com^$third-party
+||buildtrafficx.com^$third-party
+||buleor.com^$third-party
+||bumq.com^$third-party
+||bunny-net.com^$third-party
+||burjam.com^$third-party
+||burstnet.com^$third-party
+||businesscare.com^$third-party
+||businessclick.com^$third-party
+||buxept.com^$third-party
+||buxflow.com^$third-party
+||buxp.org^$third-party
+||buycheaphost.net^$third-party
+||buyflood.com^$third-party
+||buyorselltnhomes.com^$third-party
+||buysellads.com^$third-party
+||buysellads.net^$third-party
+||buyt.in^$third-party
+||buzzadexchange.com^$third-party
+||buzzadnetwork.com^$third-party
+||buzzcity.net^$third-party
+||buzzonclick.com^$third-party
+||buzzoola.com^$third-party
+||buzzparadise.com^$third-party
+||bwinpartypartners.com^$third-party
+||byspot.com^$third-party
+||c-on-text.com^$third-party
+||camghosts.com^$third-party
+||camonster.com^$third-party
+||campaignlook.com^$third-party
+||capacitygrid.com^$third-party
+||caroda.io^$third-party
+||casino-zilla.com^$third-party
+||cb-content.com^$third-party
+||cdnreference.com^$third-party
+||charltonmedia.com^$third-party
+||chitika.com^$third-party
+||chpadblock.com^$~image
+||cibleclick.com^$third-party
+||cinarra.com^$third-party
+||citrusad.com^$third-party
+||city-ads.de^$third-party
+||ck-cdn.com^$third-party
+||clash-media.com^$third-party
+||cleafs.com^$third-party
+||clean-1-clean.club^$third-party
+||cleverads.vn^$third-party
+||clickable.com^$third-party
+||clickad.pl^$third-party
+||clickadilla.com^$third-party
+||clickadu.com^$third-party
+||clickbet88.com^$third-party
+||clickcertain.com^$third-party
+||clickdaly.com^$third-party
+||clickfuse.com^$third-party
+||clickinc.com^$third-party
+||clickintext.net^$third-party
+||clickmon.co.kr^$third-party
+||clickoutcare.io^$third-party
+||clickpoint.com^$third-party
+||clicksor.com^$third-party
+||clicktripz.com^$third-party
+||clixco.in^$third-party
+||clixtrac.com^$third-party
+||clkmg.com^$third-party
+||cluep.com^$third-party
+||codegown.care^$third-party
+||cogocast.net^$third-party
+||coguan.com^$third-party
+||coinads.io^$third-party
+||coinmedia.co^$third-party
+||cointraffic.io^$third-party
+||coinzilla.io^$third-party
+||commissionfactory.com.au^$third-party
+||commissionmonster.com^$third-party
+||comscore.com^$third-party
+||connexity.net^$third-party
+||consumable.com^$third-party
+||contaxe.com^$third-party
+||content-cooperation.com^$third-party
+||contentiq.com^$third-party
+||contenture.com^$third-party
+||contextads.live^$third-party
+||contextuads.com^$third-party
+||cookpad-ads.com^$third-party
+||coolerads.com^$third-party
+||coull.com^$third-party
+||cpaclickz.com^$third-party
+||cpagrip.com^$third-party
+||cpalead.com^$third-party
+||cpalock.com^$third-party
+||cpfclassifieds.com^$third-party
+||cpm.media^$third-party
+||cpmleader.com^$third-party
+||crakmedia.com^$third-party
+||crazyrocket.io^$third-party
+||crispads.com^$third-party
+||croea.com^$third-party
+||cryptoad.space^$third-party
+||cryptoads.space^$third-party
+||cryptocoinsad.com^$third-party
+||cryptoecom.care^$third-party
+||cryptotrials.care^$third-party
+||ctrhub.com^$third-party
+||ctrip.com^$third-party
+||ctrmanager.com^$third-party
+||ctxtfl.com^$third-party
+||cuelinks.com^$third-party
+||currentlyobsessed.me^$third-party
+||cybmas.com^$third-party
+||czilladx.com^$third-party
+||dable.io^$third-party
+||dailystuffall.com^$third-party
+||datawrkz.com^$third-party
+||dating-service.net^$third-party
+||datinggold.com^$third-party
+||dblks.net^$third-party
+||dedicatednetworks.com^$third-party
+||deepintent.com^$third-party
+||deplayer.net^$third-party
+||desipearl.com^$third-party
+||dev2pub.com^$third-party
+||developermedia.com^$third-party
+||dgmaxinteractive.com^$third-party
+||dianomi.com^$third-party
+||digiadzone.com^$third-party
+||digipathmedia.com^$third-party
+||digitaladvertisingalliance.org^$third-party
+||digitalaudience.io^$third-party
+||digitalkites.com^$third-party
+||digitalpush.org^$third-party
+||digitalthrottle.com^$third-party
+||disqusads.com^$third-party
+||dl-protect.net^$third-party
+||dochase.com^$third-party
+||dollarsponsor.com^$third-party
+||domainadvertising.com^$third-party
+||domainsponsor.com^$third-party
+||dotomi.com^$third-party
+||doubleclick.com^
+||doubleclick.net^
+||doubleverify.com^$third-party
+||dpbolvw.net/image-
+||dpbolvw.net/placeholder-
+||dreamaquarium.com^$third-party
+||dropkickmedia.com^$third-party
+||dstillery.com^$third-party
+||dt00.net^$third-party
+||dt07.net^$third-party
+||dualeotruyen.net^$third-party
+||dumedia.ru^$third-party
+||dynad.net^$third-party
+||dynamicoxygen.com^$third-party
+||e-generator.com^$third-party
+||e-planning.net^$third-party
+||e-viral.com^$third-party
+||eadsrv.com^$third-party
+||easy-ads.com^$third-party
+||easyhits4u.com^$third-party
+||easyinline.com^$third-party
+||ebayclassifiedsgroup.com^$third-party
+||ebayobjects.com.au^$third-party
+||eboundservices.com^$third-party
+||eclick.vn^$third-party
+||ednplus.com^$third-party
+||egadvertising.com^$third-party
+||egamingonline.com^$third-party
+||egamiplatform.tv^$third-party
+||eksiup.com^$third-party
+||ematicsolutions.com^$third-party
+||emediate.se^$third-party
+||erling.online^$third-party
+||eroterest.net^$third-party
+||eskimi.com^$third-party
+||essayads.com^$third-party
+||essaycoupons.com^$third-party
+||et-code.ru^$third-party
+||etargetnet.com^$third-party
+||ethereumads.com^$third-party
+||ethicalads.io^$third-party
+||etology.com^$third-party
+||evolvemediallc.com^$third-party
+||evolvenation.com^$third-party
+||exactdrive.com^$third-party
+||exchange4media.com^$third-party
+||exitbee.com^$third-party
+||exitexplosion.com^$third-party
+||exmarketplace.com^$third-party
+||exponential.com^$third-party
+||eyewonder.com^$third-party
+||fapcat.com^$third-party
+||faspox.com^$third-party
+||fast-redirecting.com^$third-party
+||fast2earn.com^$third-party
+||feature.fm^$third-party
+||fireflyengagement.com^$third-party
+||fireworkadservices.com^$third-party
+||fireworkadservices1.com^$third-party
+||firstimpression.io^$third-party
+||fisari.com^$third-party
+||fixionmedia.com^$third-party
+||flashtalking.com^$third-party
+||flower-ads.com^$third-party
+||flyersquare.com^$third-party
+||flymyads.com^$third-party
+||focusde.info^$third-party
+||foremedia.net^$third-party
+||forex-affiliate.com^$third-party
+||forexprostools.com^$third-party
+||free3dgame.xyz^$third-party
+||freedomadnetwork.com^$third-party
+||freerotator.com^$third-party
+||friendlyduck.com^$third-party
+||fruitkings.com^$third-party
+||gainmoneyfast.com^$third-party
+||gambling-affiliation.com^$third-party
+||game-clicks.com^$third-party
+||gayadnetwork.com^$third-party
+||geozo.com^$third-party
+||germaniavid.com^$third-party
+||girls.xyz^$third-party
+||gourmetads.com^$third-party
+||gplinks.in^$third-party
+||grabo.bg^$third-party
+||graciamediaweb.com^$third-party
+||grafpedia.com^$third-party
+||grapeshot.co.uk^$third-party
+||greedseed.world^$third-party
+||gripdownload.co^$third-party
+||groovinads.com^$third-party
+||growadvertising.com^$third-party
+||grvmedia.com^$third-party
+||guitaralliance.com^$third-party
+||gumgum.com^$third-party
+||gururevenue.com^$third-party
+||havetohave.com^$third-party
+||headbidder.net^$third-party
+||headerbidding.ai^$third-party
+||headerlift.com^$third-party
+||healthtrader.com^$third-party
+||horse-racing-affiliate-program.co.uk^$third-party
+||hot-mob.com^$third-party
+||hotelscombined.com.au^$third-party
+||hprofits.com^$third-party
+||httpool.com^$third-party
+||hyros.com^$third-party
+||ibannerexchange.com^$third-party
+||ibillboard.com^$third-party
+||icorp.ro^$third-party
+||idreammedia.com^$third-party
+||imediaaudiences.com^$third-party
+||imho.ru^$third-party
+||imonomy.com^$third-party
+||impact-ad.jp^$third-party
+||impactify.io^$third-party
+||impresionesweb.com^$third-party
+||improvedigital.com^$third-party
+||increaserev.com^$third-party
+||indianbannerexchange.com^$third-party
+||indianlinkexchange.com^$third-party
+||indieclick.com^$third-party
+||indofad.com^$third-party
+||indoleads.com^$third-party
+||industrybrains.com^$third-party
+||inetinteractive.com^$third-party
+||infectiousmedia.com^$third-party
+||infinite-ads.com^$third-party
+||infinityads.com^$third-party
+||influads.com^$third-party
+||infolinks.com^$third-party
+||innity.com^$third-party
+||innovid.com^$third-party
+||insideall.com^$third-party
+||inskinad.com^$third-party
+||inskinmedia.com^$~stylesheet,third-party
+||instantbannercreator.com^$third-party
+||insticator.com^$third-party
+||instreamvideo.ru^$third-party
+||insurads.com^$third-party
+||integr8.digital^$third-party
+||intenthq.com^$third-party
+||intentiq.com^$third-party
+||intentmedia.net^$third-party
+||interactiveads.ai^$third-party
+||interadv.net^$third-party
+||interclick.com^$third-party
+||interesting.cc^$third-party
+||intergi.com^$third-party
+||interpolls.com^$third-party
+||interworksmedia.co.kr^$third-party
+||intextad.net^$third-party
+||intextdirect.com^$third-party
+||intextual.net^$third-party
+||intgr.net^$third-party
+||intimlife.net^$third-party
+||intopicmedia.com^$third-party
+||intravert.co^$third-party
+||inuvo.com^$third-party
+||inuxu.co.in^$third-party
+||investnewsbrazil.com^$third-party
+||inviziads.com^$third-party
+||involve.asia^$third-party
+||ip-adress.com^$third-party
+||ipromote.com^$third-party
+||jango.com^$third-party
+||javbuzz.com^$third-party
+||jewishcontentnetwork.com^$third-party
+||jivox.com^$third-party
+||jobbio.com^$third-party
+||jubna.com^$third-party
+||kaprila.com^$third-party
+||kargo.com^$third-party
+||kiosked.com^$third-party
+||klakus.com^$third-party
+||komoona.com^$third-party
+||kovla.com^$third-party
+||kurzycz.care^$third-party
+||laim.tv^$third-party
+||lanistaconcepts.com^$third-party
+||lcwfab1.com^$third-party
+||lcwfab2.com^$third-party
+||lcwfab3.com^$third-party
+||lcwfabt1.com^$third-party
+||lcwfabt2.com^$third-party
+||lcwfabt3.com^$third-party
+||lijit.com^$third-party
+||linkexchangers.net^$third-party
+||linkgrand.com^$third-party
+||links2revenue.com^$third-party
+||linkslot.ru^$third-party
+||linksmart.com^$third-party
+||linkstorm.net^$third-party
+||linkwash.de^$third-party
+||linkworth.com^$third-party
+||linkybank.com^$third-party
+||liqwid.net^$third-party
+||listingcafe.com^$third-party
+||liveadexchanger.com^$third-party
+||liveadoptimizer.com^$third-party
+||liveburst.com^$third-party
+||liverail.com^$~object,third-party
+||livesmarter.com^$third-party
+||liveuniversenetwork.com^$third-party
+||localsearch24.co.uk^$third-party
+||lockerdome.com^$third-party
+||logo-net.co.uk^$third-party
+||looksmart.com^$third-party
+||loopaautomate.com^$third-party
+||love-banner.com^$third-party
+||lustre.ai^$script,third-party
+||magetic.com^$third-party
+||magnetisemedia.com^$third-party
+||mahimeta.com^$third-party
+||mangoads.net^$third-party
+||mantisadnetwork.com^$third-party
+||marfeel.com^$third-party
+||markethealth.com^$third-party
+||marketleverage.com^$third-party
+||marsads.com^$third-party
+||mcontigo.com^$third-party
+||media.net^$third-party
+||mediaad.org^$third-party
+||mediacpm.pl^$third-party
+||mediaffiliation.com^$third-party
+||mediaforce.com^$third-party
+||mediafuse.com^$third-party
+||mediatarget.com^$third-party
+||mediavine.com^$third-party
+||meendocash.com^$third-party
+||meloads.com^$third-party
+||membrana.media^$third-party
+||metaffiliation.com^$third-party,domain=~netaffiliation.com
+||mgid.com%$third-party
+||mgid.com^$third-party
+||microad.jp^$third-party
+||midas-network.com^$third-party
+||millionsview.com^$third-party
+||mindlytix.com^$third-party
+||mixadvert.com^$third-party
+||mixi.media^$third-party
+||mobday.com^$third-party
+||mobile-10.com^$third-party
+||multiview.com^$third-party
+||myaffiliates.com^$third-party
+||n2s.co.kr^$third-party
+||nanigans.com^$third-party
+||nativeads.com^$third-party
+||nativemedia.rs^$third-party
+||nativeroll.tv^$third-party
+||nativery.com^$third-party
+||nativespot.com^$third-party
+||neobux.com^$third-party
+||neodatagroup.com^$third-party
+||neoebiz.co.kr^$third-party
+||neoffic.com^$third-party
+||neon.today^$third-party
+||netaffiliation.com^$~script,third-party
+||netavenir.com^$third-party
+||netinsight.co.kr^$third-party
+||netizen.co^$third-party
+||netliker.com^$third-party
+||netloader.cc^$third-party
+||netpub.media^$third-party
+||netseer.com^$third-party
+||netshelter.net^$third-party
+||netsolads.com^$third-party
+||networkad.net^$third-party
+||networkmanag.com^$third-party
+||networkplay.in^$third-party
+||networkxi.com^$third-party
+||networld.hk^$third-party
+||networldmedia.net^$third-party
+||neudesicmediagroup.com^$third-party
+||newdosug.eu^$third-party
+||newsadsppush.com^$third-party
+||newsarmor.com^$third-party
+||newsnet.in.ua^$third-party
+||newstogram.com^$third-party
+||newtention.net^$third-party
+||newtueads.com^$third-party
+||newwedads.com^$third-party
+||nexac.com^$third-party
+||nexage.com^$third-party
+||nexeps.com^$third-party
+||nextclick.pl^$third-party
+||nextmillennium.io^$third-party
+||nextoptim.com^$third-party
+||nitmus.com^$third-party
+||nitropay.com^$third-party
+||njih.net^$third-party
+||notsy.io^$third-party
+||nsstatic.com^$third-party
+||nsstatic.net^$third-party
+||nster.net^$third-party
+||ntent.com^$third-party
+||numbers.md^$third-party
+||oasis-haven.net^$third-party
+||objects.tremormedia.com^$~object,third-party
+||oboxads.com^$third-party
+||oceanwebcraft.com^$third-party
+||ocelot.studio^$third-party
+||oclus.com^$third-party
+||odysseus-nua.com^$third-party
+||ofeetles.pro^$third-party
+||offerforge.com^$third-party
+||offerforge.net^$third-party
+||offerserve.com^$third-party
+||offersquared.com^$third-party
+||og-affiliate.com^$third-party
+||okanjo.com^$third-party
+||onetag-sys.com^$third-party
+||onlyalad.net^$third-party
+||onsafelink.com^$script,third-party
+||onscroll.com^$third-party
+||onvertise.com^$third-party
+||oogala.com^$third-party
+||oopt.fr^$third-party
+||oos4l.com^$third-party
+||openbook.net^$third-party
+||opt-intelligence.com^$third-party
+||optiads.org^$third-party
+||optinmonster.com^$third-party
+||oriel.io^$third-party
+||osiaffiliate.com^$third-party
+||ospreymedialp.com^$third-party
+||othersonline.com^$third-party
+||otm-r.com^$third-party
+||ownlocal.com^$third-party
+||p-advg.com^$third-party
+||p-digital-server.com^$third-party
+||padsblue.com^$third-party
+||pagefair.net^$third-party
+||pagesinxt.com^$third-party
+||paidonresults.net^$third-party
+||paidsearchexperts.com^$third-party
+||pakbanners.com^$third-party
+||pantherads.com^$third-party
+||papayads.net^$third-party
+||paperclipservice.com^$third-party
+||paperg.com^$third-party
+||paradocs.ru^$third-party
+||pariatonet.com^$third-party
+||parkingcrew.net^$third-party
+||parsec.media^$third-party
+||partner-ads.com^$third-party
+||partner.googleadservices.com^$third-party
+||partner.video.syndication.msn.com^$~object,third-party
+||partnerearning.com^$third-party
+||partnermax.de^$third-party
+||partnerstack.com^$third-party
+||partycasino.com^$third-party
+||partypoker.com^$third-party
+||passendo.com^$third-party
+||passive-earner.com^$third-party
+||paydemic.com^$third-party
+||paydotcom.com^$third-party
+||payperpost.com^$third-party
+||pebblemedia.be^$third-party
+||peer39.com^$third-party
+||pelisnetwork.com^$third-party
+||penuma.com^$third-party
+||pepperjamnetwork.com^$third-party
+||perkcanada.com^$third-party
+||persevered.com^$third-party
+||pgammedia.com^$third-party
+||pixeltrack66.com^$third-party
+||placeiq.com^$third-party
+||playamopartners.com^$third-party
+||playmatic.video^$third-party
+||playtem.com^$third-party
+||pointclicktrack.com^$third-party
+||points2shop.com^$third-party
+||polyvalent.co.in^$third-party
+||popmajor.com^$third-party
+||poponclick.com^$third-party
+||popundertotal.com^$third-party
+||popunderzone.com^$third-party
+||popupdomination.com^$third-party
+||postaffiliatepro.com^$third-party
+||powerlinks.com^$third-party
+||powerteam-competitions.com^$third-party
+||ppcwebspy.com^$third-party
+||prebid.org^$third-party
+||prebidwrapper.com^$third-party
+||prf.hn^$third-party
+||primis-amp.tech^$third-party
+||profitsfly.com^$third-party
+||promo-reklama.ru^$third-party
+||proper.io^$third-party
+||pubdirecte.com^$third-party
+||pubfuture.com^$third-party
+||pubgears.com^$third-party
+||pubgenius.io^$third-party
+||pubguru.com^$third-party
+||publicidad.net^$third-party
+||publicityclerks.com^$third-party
+||publift.com^$third-party
+||publir.com^$third-party
+||pubwise.io^$third-party
+||puffnetwork.com^$third-party
+||putlockertv.com^$third-party
+||q1media.com^$third-party
+||qashbits.com^$third-party
+||quanta.la^$third-party
+||quantumads.com^$third-party
+||quantumdex.io^$third-party
+||questus.com^$third-party
+||qwertize.com^$third-party
+||r2b2.io^$third-party
+||rapt.com^$third-party
+||reachjunction.com^$third-party
+||reactx.com^$third-party
+||readpeak.com^$third-party
+||realbig.media^$third-party
+||realclick.co.kr^$third-party
+||realhumandeals.com^$third-party
+||realssp.co.kr^$third-party
+||rediads.com^$third-party
+||redintelligence.net^$third-party
+||redventures.io^$script,third-party,xmlhttprequest
+||republer.com^$third-party
+||revenueflex.com^$third-party
+||revive-adserver.net^$third-party
+||reyden-x.com^$third-party
+||rhombusads.com^$third-party
+||richads.com^$third-party
+||richaudience.com^$third-party
+||roirocket.com^$third-party
+||rollercoin.com^$third-party
+||rotaban.ru^$third-party
+||rtbhouse.com^$third-party
+||salvador24.com^$third-party
+||sap-traffic.com^$third-party
+||sape.ru^$third-party
+||sba.about.co.kr^$third-party
+||sbaffiliates.com^$third-party
+||sbcpower.com^$third-party
+||sbscribeme.com^$third-party
+||scanscout.com^$third-party
+||scarlet-clicks.info^$third-party
+||sceno.ru^$third-party
+||scootloor.com^$third-party
+||scrap.me^$third-party
+||sedoparking.com^$third-party
+||seedtag.com^$third-party
+||selectad.com^$third-party
+||sellhealth.com^$third-party
+||selsin.net^$third-party
+||sendwebpush.com^$third-party
+||sensible-ads.com^$third-party
+||servecontent.net^$third-party
+||servedby-buysellads.com^$third-party,domain=~buysellads.com
+||servemeads.com^$third-party
+||sgbm.info^$third-party
+||sharemedia.rs^$third-party
+||sharethrough.com^$third-party
+||shoofle.tv^$third-party
+||shoogloonetwork.com^$third-party
+||shopalyst.com^$third-party
+||showcasead.com^$third-party
+||showyoursite.com^$third-party
+||shrinkearn.com^$third-party
+||shrtfly.com^$third-party
+||simpio.com^$third-party
+||simpletraffic.co^$third-party
+||simplyhired.com^$third-party
+||sinogamepeck.com^$third-party
+||sitemaji.com^$third-party
+||sitesense-oo.com^$third-party
+||sitethree.com^$third-party
+||skinected.com^$third-party
+||skoovyads.com^$third-party
+||skyactivate.com^$third-party
+||skymedia.co.uk^$third-party
+||skyscrpr.com^$third-party
+||slfpu.com^$third-party
+||slfsmf.com^$third-party
+||slikslik.com^$third-party
+||slimspots.com^$third-party
+||slimtrade.com^$third-party
+||slopeaota.com^$third-party
+||smac-ad.com^$third-party
+||smac-ssp.com^$third-party
+||smaclick.com^$third-party
+||smartad.ee^$third-party
+||smartadtags.com^$third-party
+||smartadv.ru^$third-party
+||smartasset.com^$third-party
+||smartclip.net^$third-party
+||smartredirect.de^$third-party
+||smarttargetting.co.uk^$third-party
+||smarttargetting.com^$third-party
+||smarttargetting.net^$third-party
+||smartyads.com^$third-party
+||smashpops.com^$third-party
+||smilered.com^$third-party
+||smileycentral.com^$third-party
+||smljmp.com^$third-party
+||smowtion.com^$third-party
+||smpgfx.com^$third-party
+||snack-media.com^$third-party
+||snap.com^$third-party
+||sndkorea.co.kr^$third-party
+||sni.ps^$third-party
+||snigelweb.com^$third-party
+||snowads.net^$third-party
+||so-excited.com^$third-party
+||soagitet.net^$third-party
+||soalouve.com^$third-party
+||soazooge.com^$third-party
+||sochr.com^$third-party
+||socialbirth.com^$third-party
+||socialelective.com^$third-party
+||sociallypublish.com^$third-party
+||socialmedia.com^$third-party
+||socialreach.com^$third-party
+||socialspark.com^$third-party
+||societingna.info^$third-party
+||soicos.com^$third-party
+||sonobi.com^$third-party
+||sotuktraffic.com^$third-party
+||sovrn.com^$third-party
+||sparteo.com^$third-party
+||speakol.com^$third-party
+||splinky.com^$third-party
+||splut.com^$third-party
+||spolecznosci.net^$third-party
+||sponsoredtweets.com^$third-party
+||spotx.tv^$third-party
+||springify.io^$third-party
+||springserve.com^$~media,third-party
+||sprintrade.com^$third-party
+||sprout-ad.com^$third-party
+||spyoff.com^$third-party
+||starlayer.com^$third-party
+||starti.pl^$third-party
+||statsperformdev.com^$third-party
+||stocker.bonnint.net^$third-party
+||stratos.blue^$third-party
+||streamate.com^$third-party
+||streamdefence.com^$third-party
+||strikead.com^$third-party
+||strossle.com^$third-party
+||struq.com^$third-party
+||styleui.ru^$third-party
+||subendorse.com^$third-party
+||sublimemedia.net^$third-party
+||submitexpress.co.uk^$third-party
+||suite6ixty6ix.com^$third-party
+||suitesmart.com^$third-party
+||sulvo.co^$third-party
+||sumarketing.co.uk^$third-party
+||sunmedia.net^$third-party
+||super-links.net^$third-party
+||superadexchange.com^$third-party
+||superonclick.com^$third-party
+||supersonicads.com^$third-party
+||supletcedintand.pro^$third-party
+||supplyframe.com^$third-party
+||supuv2.com^$third-party
+||surf-bar-traffic.com^$third-party
+||surfe.pro^$third-party
+||surgeprice.com^$third-party
+||svlu.net^$third-party
+||swbdds.com^$third-party
+||sweeterge.info^$third-party
+||swelen.com^$third-party
+||switchadhub.com^$third-party
+||swoop.com^$third-party
+||swpsvc.com^$third-party
+||synkd.life^$third-party
+||tacoda.net^$third-party
+||tacrater.com^$third-party
+||tacticalrepublic.com^$third-party
+||tafmaster.com^$third-party
+||tagbucket.cc^$third-party
+||tagdeliver.com^$third-party
+||tagdelivery.com^$third-party
+||taggify.net^$third-party
+||tagjunction.com^$third-party
+||tailsweep.com^$third-party
+||takeads.com^$third-party
+||talaropa.com^$third-party
+||tangozebra.com^$third-party
+||tankeuro.com^$third-party
+||tapinfluence.com^$third-party
+||tapnative.com^$third-party
+||tardangro.com^$third-party
+||targetnet.com^$third-party
+||targetpoint.com^$third-party
+||targetspot.com^$third-party
+||tbaffiliate.com^$third-party
+||tdmd.us^$third-party
+||teasernet.com^$third-party
+||terratraf.com^$third-party
+||testfilter.com^$third-party
+||testnet.nl^$third-party
+||text-link-ads.com^$third-party
+||tgtmedia.com^$third-party
+||themoneytizer.com^$third-party
+||tinyads.io^$third-party
+||tkqlhce.com/image-
+||tkqlhce.com/placeholder-
+||tlvmedia.com^$third-party
+||tmtrck.com^$third-party
+||tollfreeforwarding.com^$third-party
+||tonefuse.com^$third-party
+||topadvert.ru^$third-party
+||toroadvertising.com^$third-party
+||trackuity.com^$third-party
+||tradedoubler.com^$third-party
+||tradeexpert.net^$third-party
+||tradplusad.com^$third-party
+||traffboost.net^$third-party
+||traffer.net^$third-party
+||traffic-media.co.uk^$third-party
+||traffic-supremacy.com^$third-party
+||traffic2bitcoin.com^$third-party
+||trafficadbar.com^$third-party
+||trafficforce.com^$third-party
+||traffichaus.com^$third-party
+||trafficjunky.com^$third-party
+||trafficsan.com^$third-party
+||trafficswarm.com^$third-party
+||trafficwave.net^$third-party
+||trafficzap.com^$third-party
+||trafmag.com^$third-party
+||trigr.co^$third-party
+||triplelift.com^$third-party
+||trker.com^$third-party
+||trustx.org^$third-party
+||trytada.com^$third-party
+||tubeadvertising.eu^$third-party
+||twads.gg^$third-party
+||tyroo.com^$third-party
+||ubercpm.com^$third-party
+||ultrapartners.com^$third-party
+||unblockia.com^$third-party
+||undertone.com^$third-party
+||unibots.in^$third-party
+||unibotscdn.com^$third-party
+||urlcash.net^$third-party
+||usemax.de^$third-party
+||usenetjunction.com^$third-party
+||usepanda.com^$third-party
+||utherverse.com^$third-party
+||validclick.com^$third-party
+||valuead.com^$third-party
+||valuecommerce.com^$third-party
+||velti.com^$third-party
+||vendexo.com^$third-party
+||veoxa.com^$third-party
+||verified-extensions.com^$third-party
+||vertismedia.co.uk^$third-party
+||vibrantmedia.com^$third-party
+||videoo.tv^$third-party
+||videoroll.net^$third-party
+||vidverto.io^$third-party
+||viewtraff.com^$third-party
+||vlyby.com^$third-party
+||vmonetize.com^$third-party
+||vupulse.com^$third-party
+||w00tmedia.net^$third-party
+||web3ads.net^$third-party
+||webads.nl^$third-party
+||webgains.com^$third-party
+||weborama.fr^$third-party
+||webshark.pl^$third-party
+||webtrafic.ru^$third-party
+||webwap.org^$third-party
+||whatstheword.co^$third-party
+||whizzco.com^$third-party
+||wlmarketing.com^$third-party
+||wmmediacorp.com^$third-party
+||wordego.com^$third-party
+||worthathousandwords.com^$third-party
+||wwads.cn^$third-party
+||xmlmonetize.com^$third-party
+||xmtrading.com^$third-party
+||xtendmedia.com^$third-party
+||yieldkit.com^$third-party
+||yieldlove.com^$third-party
+||yieldmo.com^$third-party
+||yllix.com^$third-party
+||yourfirstfunnelchallenge.com^$third-party
+||zanox-affiliate.de/ppv/$third-party
+||zanox.com/ppv/$third-party
+||zap.buzz^$third-party
+||zedo.com^$third-party
+||zemanta.com^$third-party
+||zeropark.com^$third-party
+||ziffdavis.com^$third-party
+||zwaar.org^$third-party
+! Chinese google (https://github.com/easylist/easylist/issues/15643)
+||2mdn-cn.net^
+||admob-cn.com^
+||doubleclick-cn.net^
+||googleads-cn.com^
+||googleadservices-cn.com^
+||googleadsserving.cn^
+||googlevads-cn.com^
+! Samsung/LG/Philips smart-TV ad domains
+||ad.lgappstv.com^
+||ad.nettvservices.com^
+||ads.samsung.com^
+||lgad.cjpowercast.com.edgesuite.net^
+||lgsmartad.com^
+||samsungacr.com^
+! anime47.com / nettruyen.com
+/(https?:\/\/)\w{30,}\.me\/\w{30,}\./$script,third-party
+! IP addresses
+/(https?:\/\/)104\.154\..{100,}/
+/(https?:\/\/)104\.197\..{100,}/
+/(https?:\/\/)104\.198\..{100,}/
+/(https?:\/\/)130\.211\..{100,}/
+/(https?:\/\/)142\.91\.159\..{100,}/
+/(https?:\/\/)213\.32\.115\..{100,}/
+/(https?:\/\/)216\.21\..{100,}/
+/(https?:\/\/)217\.182\.11\..{100,}/
+/(https?:\/\/)51\.195\.31\..{100,}/
+||142.91.159.
+||142.91.159.127^
+||142.91.159.136^
+||142.91.159.139^
+||142.91.159.146^
+||142.91.159.147^
+||142.91.159.150^
+||142.91.159.164^
+||142.91.159.169^
+||142.91.159.179^
+||142.91.159.201^
+||142.91.159.220^
+||142.91.159.223^
+||142.91.159.244^
+||158.247.208.
+||158.247.208.115^
+||162.252.214.4^
+||167.99.31.227^
+||172.255.6.135^
+||172.255.6.137^
+||172.255.6.139^
+||172.255.6.140^
+||172.255.6.150^
+||172.255.6.152^
+||172.255.6.199^
+||172.255.6.228^
+||172.255.6.248^
+||172.255.6.252^
+||172.255.6.254^
+||172.255.6.2^
+||172.255.6.59^
+||188.42.84.110^
+||188.42.84.137^
+||188.42.84.159^
+||188.42.84.160^
+||188.42.84.162^
+||188.42.84.21^
+||188.42.84.23^
+||203.195.121.0^
+||203.195.121.103^
+||203.195.121.119^
+||203.195.121.11^
+||203.195.121.134^
+||203.195.121.184^
+||203.195.121.195^
+||203.195.121.1^
+||203.195.121.209^
+||203.195.121.217^
+||203.195.121.219^
+||203.195.121.224^
+||203.195.121.229^
+||203.195.121.24^
+||203.195.121.28^
+||203.195.121.29^
+||203.195.121.34^
+||203.195.121.36^
+||203.195.121.40^
+||203.195.121.46^
+||203.195.121.70^
+||203.195.121.72^
+||203.195.121.73^
+||203.195.121.74^
+||23.109.150.208^
+||23.109.150.253^
+||23.109.248.125^
+||23.109.248.129^
+||23.109.248.130^
+||23.109.248.135^
+||23.109.248.139^
+||23.109.248.149^
+||23.109.248.14^
+||23.109.248.174^
+||23.109.248.183^
+||23.109.248.20^
+||23.109.248.229^
+||23.109.248.247^
+||23.109.248.29^
+||23.109.82.
+||23.109.82.119^
+||23.109.82.173^
+||23.109.82.202^
+||23.109.82.44^
+||23.109.87.
+||23.109.87.101^
+||23.109.87.118^
+||23.109.87.123^
+||23.109.87.127^
+||23.109.87.139^
+||23.109.87.14^
+||23.109.87.182^
+||23.109.87.192^
+||23.109.87.213^
+||23.109.87.217^
+||23.109.87.42^
+||23.109.87.45^
+||23.109.87.47^
+||23.109.87.55^
+||23.109.87.71^
+||23.109.87.74^
+||23.195.91.195^
+||34.102.137.201^
+||35.227.234.222^
+||35.232.188.118^
+||37.1.209.213^
+||51.77.227.100^
+||51.77.227.101^
+||51.77.227.102^
+||51.77.227.103^
+||51.77.227.96^
+||51.77.227.97^
+||51.77.227.98^
+||51.77.227.99^
+||51.89.187.136^
+||51.89.187.137^
+||51.89.187.138^
+||51.89.187.139^
+||51.89.187.140^
+||51.89.187.141^
+||51.89.187.142^
+||51.89.187.143^
+||88.42.84.136^
+! Altice / Optimum / CableVision injects ads
+! https://github.com/ryanbr/fanboy-adblock/issues/816
+||167.206.10.148^
+
+! *** easylist:easylist/easylist_adservers_popup.txt ***
+||0265331.com^$popup
+||07c225f3.online^$popup
+||0a8d87mlbcac.top^$popup
+||0byv9mgbn0.com^$popup
+||0redirb.com^$popup
+||0rv1wtduj.com^$popup
+||11x11.com^$popup
+||123-movies.bz^$popup
+||123vidz.com^$popup
+||172.255.103.171^$popup
+||19turanosephantasia.com^$popup
+||1betandgonow.com^$popup
+||1firstofall1.com^$popup
+||1o1camshow.com^$popup
+||1phads.com^$popup
+||1redirb.com^$popup
+||1redirc.com^$popup
+||1ts17.top^$popup
+||1ueikseq1.com^$popup
+||1x001.com^$popup
+||1xlite-208883.top^$popup
+||1xlite-503779.top^$popup
+||1xlite-510677.top^$popup
+||1xlite-522762.top^$popup
+||21find.com^$popup
+||22bettracking.online^$popup
+||23.109.82.222^$popup
+||24-sportnews.com^$popup
+||24affiliates.com^$popup
+||24click.top^$popup
+||24x7report.com^$popup
+||26485.top^$popup
+||2annalea.com^$popup
+||2aus34sie6po5m.com^$popup
+||2qj7mq3w4uxe.com^$popup
+||2smarttracker.com^$popup
+||2track.info^$popup
+||2vid.top^$popup
+||331hwh.com^$popup
+||360adshost.net^$popup
+||3r1kwxcd.top^$popup
+||3wr110.xyz^$popup
+||3xbrh4rxsvbl.top^$popup
+||4b6994dfa47cee4.com^$popup
+||4dcdc.com^$popup
+||4dsply.com^$popup
+||567bets10.com^$popup
+||5dimes.com^$popup
+||5mno3.com^$popup
+||5vbs96dea.com^$popup
+||6198399e4910e66-ovc.com^$popup
+||62h.site^$popup
+||7anfpatlo8lwmb.com^$popup
+||7ca78m3csgbrid7ge.com^$popup
+||7oc5b1i3v4iu.top^$popup
+||888media.net^$popup
+||888promos.com^$popup
+||8stream-ai.com^$popup
+||8wtkfxiss1o2.com^$popup
+||900bets10.com^$popup
+||95urbehxy2dh.top^$popup
+||9gg23.com^$popup
+||9l3s3fnhl.com^$popup
+||9streamex.com^$popup
+||9t5.me^$popup
+||a-ads.com^$popup
+||a-waiting.com^$popup
+||a23-trk.xyz^$popup
+||a64x.com^$popup
+||aagm.link^$popup
+||abateall.com^$popup
+||abiderestless.com^$popup
+||ablogica.com^$popup
+||aboveredirect.top^$popup
+||absoluteroute.com^$popup
+||absump.com^$popup
+||abundantsurroundvacation.com^$popup
+||acacdn.com^$popup
+||accesshomeinsurance.co^$popup
+||accompanycollapse.com^$popup
+||acdcdn.com^$popup
+||achcdn.com^$popup
+||achievebeneficial.com^$popup
+||aclktrkr.com^$popup
+||acrossheadquartersanchovy.com^$popup
+||actio.systems^$popup
+||actiondesk.com^$popup,third-party
+||activate-game.com^$popup
+||aculturerpa.info^$popup
+||ad-free.info^$popup
+||ad-guardian.com^$popup
+||ad-maven.com^$popup
+||ad.soicos.com^$popup
+||ad4game.com^$popup
+||ad6media.fr^$popup,third-party
+||adbetclickin.pink^$popup
+||adbison-redirect.com^$popup
+||adblock-guru.com^$popup
+||adblock-one-protection.com^$popup
+||adblock-pro-download.com^$popup
+||adblock-zen-download.com^$popup
+||adblock-zen.com^$popup
+||adblocker-app.com^$popup
+||adblocker-sentinel.net^$popup
+||adblockerapp.com^$popup
+||adblockerapp.net^$popup
+||adblockerenterpriseedition.pro^$popup
+||adblockersentinel.com^$popup
+||adblockstream.com^$popup
+||adblockstrtape.link^$popup
+||adblockstrtech.link^$popup
+||adboost.it^$popup
+||adbooth.com^$popup
+||adca.st^$popup
+||adcash.com^$popup
+||adcdnx.com^$popup
+||adcell.com^$popup
+||addotnet.com^$popup
+||adexc.net^$popup,third-party
+||adexchangecloud.com^$popup
+||adexchangegate.com^$popup
+||adexchangeguru.com^$popup
+||adexchangemachine.com^$popup
+||adexchangeprediction.com^$popup
+||adexchangetracker.com^$popup
+||adexmedias.com^$popup
+||adexprtz.com^$popup
+||adfclick1.com^$popup
+||adfgetlink.net^$popup
+||adfpoint.com^$popup
+||adfreewatch.info^$popup
+||adglare.net^$popup
+||adhealers.com^$popup
+||adhoc2.net^$popup
+||adimmix.com^$popup
+||aditsafeweb.com^$popup
+||adjoincomprise.com^$popup
+||adjuggler.net^$popup
+||adk2.co^$popup
+||adk2.com^$popup
+||adk2x.com^$popup
+||adlogists.com^$popup
+||adlserq.com^$popup
+||adltserv.com^$popup
+||adlure.net^$popup
+||admachina.com^$popup
+||admedit.net^$popup
+||admeerkat.com^$popup
+||admeridianads.com^$popup
+||admitad.com^$popup
+||admjmp.com^$popup
+||admobe.com^$popup
+||admothreewallent.com$popup
+||adnanny.com^$popup,third-party
+||adnetworkperformance.com^$popup
+||adnium.com^$popup,third-party
+||adnotebook.com^$popup
+||adnxs-simple.com^$popup
+||adonweb.ru^$popup
+||adop.co^$popup
+||adplxmd.com^$popup
+||adpointrtb.com^$popup
+||adpool.bet^$popup
+||adport.io^$popup
+||adreactor.com^$popup
+||adrealclick.com^$popup
+||adrglife.com^$popup
+||adrgyouguide.com^$popup
+||adright.co^$popup
+||adro.pro^$popup
+||adrunnr.com^$popup
+||ads.sexier.com^$popup
+||ads4trk.com^$popup
+||adsandcomputer.com^$popup
+||adsblocker-ultra.com^$popup
+||adsblockersentinel.info^$popup
+||adsbreak.com^$popup
+||adsbtrk.com^$popup
+||adsco.re^$popup
+||adserverplus.com^$popup
+||adserving.unibet.com^$popup
+||adsforcomputercity.com^$popup
+||adsfree-watch.net^$popup
+||adshell.net^$popup
+||adshostnet.com^$popup
+||adskeeper.co.uk^$popup
+||adskeeper.com^$popup
+||adskpak.com^$popup
+||adsmarket.com^$popup
+||adsplex.com^$popup
+||adspredictiv.com^$popup
+||adspyglass.com^$popup
+||adsrv4k.com^$popup
+||adstracker.info^$popup
+||adsupply.com^$popup
+||adsupplyads.com^$popup
+||adsupplyads.net^$popup
+||adsurve.com^$popup
+||adsvlad.info^$popup
+||adtng.com^$popup
+||adtrace.org^$popup
+||adtrackingflow.pro^$popup
+||aduld.click^$popup
+||adult-affiliate.link^$popup
+||adult.xyz^$popup
+||adverdirect.com^$popup
+||advertiserurl.com^$popup
+||advertizmenttoyou.com^$popup
+||advertserve.com^$popup
+||advmedialtd.com^$popup
+||advmonie.com^$popup
+||advnet.xyz^$popup
+||advotionhot.com^$popup
+||advsmedia.net^$popup
+||adx-t.com^$popup
+||adx.io^$popup,third-party
+||adxite.com^$popup
+||adxpansion.com^$popup
+||adxpartner.com^$popup
+||adxprtz.com^$popup
+||adzblockersentinel.net^$popup
+||adzerk.net^$popup
+||adzshield.info^$popup
+||aeeg5idiuenbi7erger.com^$popup
+||afcpatrk.com^$popup
+||aff-handler.com^$popup
+||aff-track.net^$popup
+||affbuzzads.com^$popup
+||affcpatrk.com^$popup
+||affectionatelypart.com^$popup
+||affelseaeinera.org^$popup
+||affili.st^$popup
+||affiliate-wg.com^$popup
+||affiliateboutiquenetwork.com^$popup
+||affiliatedrives.com^$popup
+||affilirise.com^$popup
+||affinity.net^$popup
+||afflat3d2.com^$popup
+||afflat3e1.com^$popup
+||affluentshinymulticultural.com^$popup
+||affmoneyy.com^$popup
+||affstreck.com^$popup
+||afre.guru^$popup
+||afriflatry.co^$popup
+||afront.io^$popup
+||aftrk1.com^$popup
+||aftrk3.com^$popup
+||agabreloomr.com^$popup
+||agacelebir.com^$popup
+||agalarvitaran.com^$popup
+||agapi-fwz.com^$popup
+||aggrologis.top^$popup
+||aglaulou.com^$popup
+||agweaaf.net.^$popup
+||agweaaf.net^$popup
+||agweaaf.org.^$popup
+||agweaaf.org^$popup
+||ahadsply.com^$popup
+||ahbdsply.com^$popup
+||ahscdn.com^$popup
+||aigaithojo.com^$popup
+||aigeno.com^$popup
+||ailrouno.net^$popup
+||aino2.com^$popup
+||aitsatho.com^$popup
+||aj1574.online^$popup
+||ajkrls.com^$popup
+||ajkzd9h.com^$popup
+||ajump2.com^$popup
+||akmxts.com^$popup
+||akumeha.onelink.me^$popup
+||akutapro.com^$popup
+||alargeredrubygsw.info^$popup
+||albumsignaturerequested.com^$popup
+||alcovesoftenedenthusiastic.com^$popup
+||algardevehme.com^$popup
+||algocashmaster.com^$popup
+||alightbornbell.com^$popup
+||alitems.co^$popup
+||alitems.site^$popup
+||alklinker.com^$popup
+||alleviatepracticableaddicted.com^$popup
+||allhypefeed.com^$popup
+||allow-to-continue.com^$popup
+||allreqdusa.com^$popup
+||allsportsflix.best^$popup
+||allsportsflix.top^$popup
+||allsporttv.com^$popup
+||almapa2.com^$popup
+||almightyexploitjumpy.com^$popup
+||aloha-news.net^$popup
+||alpha-news.org^$popup
+||alpheratzscheat.top^$popup
+||alpinedrct.com^$popup
+||alreadyballetrenting.com^$popup
+||alsindustrateb.info^$popup
+||altairaquilae.top^$popup
+||alternads.info^$popup
+||alternativecpmgate.com^$popup
+||alxbgo.com^$popup
+||alxsite.com^$popup
+||am10.ru^$popup
+||amatrck.com^$popup
+||ambiliarcarwin.com^$popup
+||ambuizeler.com^$popup
+||amelatrina.com^$popup
+||amenityremorse.com^$popup
+||amesgraduatel.xyz^$popup
+||amira-efz.com^$popup
+||ammankeyan.com^$popup
+||ammannests.com^$popup
+||ammunitionconsiderinstitution.com^$popup
+||amprestrys.co.in^$popup
+||amwoukrkskillso.com^$popup
+||analyticbz.com^$popup
+||anamuel-careslie.com^$popup
+||ancientsend.com^$popup
+||andbegant.one^$popup
+||andcomemunicateth.info^$popup
+||anedukerationpeci.info^$popup
+||angege.com^$popup
+||animemeat.com^$popup
+||ankdoier.com^$popup
+||anmdr.link^$popup
+||annual-gamers-choice.com^$popup
+||anopportunitytost.info^$popup
+||ansf.shop^$popup
+||answered-questions.com^$popup
+||anteog.com^$popup
+||anticipationunexpected.com^$popup
+||antivirusgaming.com^$popup
+||antivirussprotection.com^$popup
+||anymoresentencevirgin.com^$popup
+||apiecelee.com^$popup
+||aplainmpatoio.com^$popup
+||apologizingrigorousmorally.com^$popup
+||aporasal.net^$popup
+||appcloudcore.com^$popup
+||appcloudgroup.com^$popup
+||appcloudmaster.com^$popup
+||appcloudsystems.com^$popup
+||appcloudvalue.com^$popup
+||applifycontent.com^$popup
+||applifysolutions.com^$popup
+||appoineditardwide.com^$popup
+||apprefaculty.pro^$popup
+||apptjmp.com^$popup
+||appzery.com^$popup
+||aquete.com^$popup
+||arcost54ujkaphylosuvaursi.com^$popup
+||ardoqxdinqucirei.info^$popup
+||ardslediana.com^$popup
+||ariapawners.space^$popup
+||arielpri2nce8ss09.com^$popup
+||aristotle-lib.com^$popup
+||arkdcz.com^$popup
+||armedtidying.com^$popup
+||arminius.io^$popup
+||armourhardilytraditionally.com^$popup
+||aroidsguide.com^$popup
+||arriedand.xyz^$popup
+||arrlnk.com^$popup
+||arroyosandinos.com^$popup
+||artfulmilesfake.com^$popup
+||articlepawn.com^$popup
+||artpever.com^$popup
+||asarma.xyz^$popup
+||asce.xyz^$popup
+||asdasdad.net^$popup
+||asgclickpp.com^$popup
+||asgorebysschan.com^$popup
+||ashoupsu.com^$popup
+||asidefeetsergeant.com^$popup
+||aslaironer.com^$popup
+||aslaprason.com^$popup
+||aslnk.link^$popup
+||aso1.net^$popup
+||asqconn.com^$popup
+||assetknowledgeregret.com^$popup
+||astarboka.com^$popup
+||astesnlyno.org^$popup
+||astonishing-go.com^$popup
+||astrokompas.com^$popup
+||atala-apw.com^$popup
+||atas.io^$popup
+||atcelebitor.com^$popup
+||atinsolutions.com^$popup
+||atiretrously.com^$popup
+||atmtaoda.com^$popup
+||atomicarot.com^$popup
+||attachedkneel.com^$popup
+||attractbestbonuses.life^$popup
+||atzekromchan.com^$popup
+||audienceravagephotocopy.com^$popup
+||auforau.com^$popup
+||augailou.com^$popup
+||augu3yhd485st.com^$popup
+||augurersoilure.space^$popup
+||august15download.com^$popup
+||ausoafab.net^$popup
+||authognu.com^$popup
+||authorsallegationdeadlock.com^$popup
+||av-page.icu^$popup
+||avenuewalkerchange.com^$popup
+||avocams.com^$popup
+||avprotect.store^$popup
+||awasrqp.xyz^$popup
+||awecrptjmp.com^$popup
+||awejmp.com^$popup
+||awempire.com^$popup
+||awesome-blocker.com^$popup
+||awesomenewspush.com^$popup
+||awptjmp.com^$popup
+||awsclic.com^$popup
+||azqq.online^$popup
+||b0oie4xjeb4ite.com^$popup
+||b225.org^$popup
+||b3z29k1uxb.com^$popup
+||b7om8bdayac6at.com^$popup
+||backseatrunners.com^$popup
+||backwget99.com^$popup
+||baect.com^$popup
+||baiweluy.com^$popup
+||bakjaqa.net.^$popup
+||bakjaqa.net^$popup
+||bakjaqa.org.^$popup
+||bakjaqa.org^$popup
+||balldollars.com^$popup
+||banquetunarmedgrater.com^$popup
+||barefootedpyjamasdetection.com^$popup
+||batheunits.com^$popup
+||baypops.com^$popup
+||bbccn.org^$popup
+||bbcrgate.com^$popup
+||bbuni.com^$popup
+||becomeapartner.io^$popup
+||becoquin.com^$popup
+||becorsolaom.com^$popup
+||befirstcdn.com^$popup
+||beforeignunlig.com^$popup
+||befrx.com^$popup
+||beholdascared.com^$popup
+||beklefkiom.com^$popup
+||belavoplay.com^$popup
+||believemefly.com^$popup
+||belwrite.com^$popup
+||bemachopor.com^$popup
+||bemobpath.com^$popup
+||bemobtrcks.com^$popup
+||bemobtrk.com^$popup
+||bend-me-over.com^$popup
+||benoopto.com^$popup
+||benumelan.com^$popup
+||beonixom.com^$popup
+||beparaspr.com^$popup
+||berkshiretoday.xyz^$popup
+||berlindespraque.life^$popup
+||best-offer-for-you.com^$popup
+||best-vpn-app.com^$popup
+||best-vpn.click^$popup
+||best2017games.com^$popup
+||best2019-games-web1.com^$popup
+||best4fuck.com^$popup
+||bestbonusprize.life^$popup
+||bestclevercaptcha.top^$popup
+||bestclicktitle.com^$popup
+||bestcontentaccess.top^$popup
+||bestconvertor.club^$popup
+||bestgames-2022.com^$popup
+||bestgirls4fuck.com^$popup
+||bestmoviesflix.xyz^$popup
+||bestplaceforall.com^$popup
+||bestproducttesters.com^$popup
+||bestrevenuenetwork.com^$popup
+||bestvenadvertising.com^$popup
+||betfairpk.com^$popup
+||betoga.com^$popup
+||betotodilea.com^$popup
+||betshucklean.com^$popup
+||betteradsystem.com^$popup
+||betterdomino.com^$popup
+||bettraff.com^$popup
+||betusk.com^$popup
+||bewailblockade.com^$popup
+||bewathis.com^$popup
+||beyourxfriend.com^$popup
+||bid-engine.com^$popup
+||bidverdrd.com^$popup
+||bidverdrs.com^$popup
+||bidvertiser.com^$popup
+||bigbasketshop.com^$popup
+||bigeagle.biz^$popup
+||bigelowcleaning.com^$popup
+||bigscaner-help.shop^$popup
+||bike-adsbidding.org^$popup
+||bilqi-omv.com^$popup
+||bimbim.com^$popup
+||binaryoptionsgame.com^$popup
+||bingohall.ag^$popup
+||binomnet.com^$popup
+||binomnet3.com^$popup
+||binomtrcks.site^$popup
+||biphic.com^$popup
+||biserka.xyz^$popup
+||bit-system.org^$popup
+||bitadexchange.com^$popup
+||bitterstrawberry.com^$popup
+||biturl.co^$popup
+||bitzv.com^$popup
+||blabblablabla.com^$popup
+||blacklinknow.com^$popup
+||blacklinknowss.co^$popup
+||blacknesskeepplan.com^$popup
+||blancoshrimp.com^$popup
+||bleandworldw.org^$popup
+||blehcourt.com^$popup
+||block-ad-easy.net^$popup
+||block-ads-now.com^$popup
+||blockchaintop.nl^$popup
+||blocked1.xyz^$popup
+||blockinga.com^$popup
+||blogoman-24.com^$popup
+||blondsdixie.com^$popup
+||blubberspoiled.com^$popup
+||blueistheneworanges.com^$popup
+||bluelinknow.com^$popup
+||blueparrot.media^$popup
+||blushmossy.com^$popup
+||blzz.xyz^$popup
+||bmtmicro.com^$popup
+||bngpt.com^$popup
+||bngtrak.com^$popup
+||bobabillydirect.org^$popup
+||bobeshehi.com^$popup
+||bodelen.com^$popup
+||bodrumshuttle.net^$popup
+||bombfor.com^$popup
+||bonafides.club^$popup
+||bongacams.com^$popup,third-party
+||bongacams10.com^$popup
+||bonus-app.net^$popup
+||bonusaward.life^$popup
+||bonzuna.com^$popup
+||bookmakers.click^$popup
+||booster-vax.com^$popup
+||bot-checker.com^$popup
+||bounceads.net^$popup
+||bouncingtiger.online^$popup
+||boustahe.com^$popup
+||boxlivegarden.com^$popup
+||boyishdefend.com^$popup
+||brabywig.live^$popup
+||brackcava.website^$popup
+||bracketterminusalias.com^$popup
+||branchesdollar.com^$popup
+||brandreachsys.com^$popup
+||bravo-dog.com^$popup
+||breechesbottomelf.com^$popup
+||brieflizard.com^$popup
+||brightadnetwork.com^$popup
+||bringmesports.com^$popup
+||briningkhalat.life^$popup
+||britishinquisitive.com^$popup
+||bro4.biz^$popup
+||broforyou.me^$popup
+||broochambitioncopies.com^$popup
+||browse-boost.com^$popup
+||browsekeeper.com^$popup
+||brucelead.com^$popup
+||brutalconfer.com^$popup
+||btpnav.com^$popup
+||buikolered.com^$popup
+||bullads.net^$popup
+||bulochka.xyz^$popup
+||bumpyremittancecarnivorous.com^$popup
+||buncoswosh.com^$popup
+||bungalowsimply.com^$popup
+||bunth.net^$popup
+||buqkrzbrucz.com^$popup
+||buranablated.digital^$popup
+||bursa33.xyz^$popup
+||bursultry-exprights.com^$popup
+||busterry.com^$popup
+||butterfly-bidbid.net^$popup
+||buy404s.com^$popup
+||buyadvupfor24.com^$popup
+||buyeasy.by^$popup
+||buzzadnetwork.com^$popup
+||buzzonclick.com^$popup
+||bvmbnr.xyz^$popup
+||bwredir.com^$popup
+||byvngx98ssphwzkrrtsjhnbyz5zss81dxygxvlqd05.com^$popup
+||byvue.com^$popup
+||byzkrjamkqbal.top^$popup
+||c0me-get-s0me.net^$popup
+||c0nect.com^$popup
+||c43a3cd8f99413891.com^$popup
+||c9xv.xyz^$popup
+||cadlsyndicate.com^$popup
+||cadsans.com^$popup
+||caeli-rns.com^$popup
+||caffeinecontainerakin.com^$popup
+||cagothie.net^$popup
+||calcch.com^$popup
+||calltome.net^$popup
+||callyourinformer.com^$popup
+||calvali.com^$popup
+||camptrck.com^$popup
+||cams.com/go/$popup
+||camscaps.net^$popup
+||candyprotected.com^$popup
+||capableimpregnablehazy.com^$popup
+||captivatepestilentstormy.com^$popup
+||careerjournalonline.com^$popup
+||caresspincers.com^$popup
+||casino.betsson.com^$popup
+||casiyouaffiliates.com^$popup
+||casumoaffiliates.com^$popup
+||catchtheclick.com^$popup
+||catsnbootsncats2020.com^$popup
+||cauthaushoas.com^$popup
+||cavecoat.top^$popup
+||cbdedibles.site^$popup
+||cbdzone.online^$popup
+||cddtsecure.com^$popup
+||cdn4ads.com^$popup
+||cdnativepush.com^$popup
+||cdnondemand.org^$popup
+||cdnquality.com^$popup
+||cdntechone.com^$popup
+||cdrvrs.com^$popup
+||cekladod.com^$popup
+||celeb-trends-gossip.com^$popup
+||celeritascdn.com^$popup
+||censelysoviell.xyz^$popup
+||certainlydisparagewholesome.com^$popup
+||cgeckmydirect.biz^$popup
+||chaeffulace.com^$popup
+||chainbelt.top^$popup
+||chaintopdom.nl^$popup
+||charmingblur.com^$popup
+||chauksoa.net^$popup
+||cheap-jewelry-online.com^$popup
+||cheaplycreateproprietor.com^$popup
+||cheatingabate.com^$popup
+||check-out-this.site^$popup
+||check-this-match.com^$popup
+||checkcdn.net^$popup
+||cheerfullybakery.com^$popup
+||chicks4date.com^$popup
+||chiltemeles.life^$popup
+||chirtooxsurvey.top^$popup
+||chl7rysobc3ol6xla.com^$popup
+||choiceencounterjackson.com^$popup
+||chooxaur.com^$popup
+||choto.xyz^$popup
+||chpadblock.com^$popup
+||chrantary-vocking.com^$popup
+||chrisrespectivelynostrils.com^$popup
+||chrysostrck.com^$popup
+||chultoux.com^$popup
+||cipledecline.buzz^$popup
+||circumstantialeltondirtiness.com^$popup
+||civadsoo.net^$popup
+||civilizationthose.com^$popup
+||ciwhacheho.pro^$popup
+||cjewz.com^$popup
+||ckre.net^$popup
+||clbanners16.com^$popup
+||clbjmp.com^$popup
+||clckpbnce.com^$popup
+||cld5r.com^$popup
+||clean-1-clean.club^$popup
+||clean-blocker.com^$popup
+||clean-browsing.com^$popup
+||cleantrafficrotate.com^$popup
+||cleavepreoccupation.com^$popup
+||clentrk.com^$popup
+||clichedreinter.digital^$popup
+||click-cdn.com^$popup
+||clickalinks.xyz^$popup
+||clickbank.net/*offer_id=$popup
+||clickdaly.com^$popup
+||clickfuse.com^$popup
+||clickmetertracking.com^$popup
+||clickmobad.net^$popup
+||clickosmedia.com^$popup
+||clickppcbuzz.com^$popup
+||clickprotects.com^$popup
+||clickpupbit.com^$popup
+||clickredirection.com^$popup
+||clicks4tc.com^$popup
+||clicksgear.com^$popup
+||clicksondelivery.com^$popup
+||clicksor.com^$popup
+||clicksor.net^$popup
+||clicksvenue.com^$popup
+||clicktripz.com^$popup
+||clicktrixredirects.com^$popup
+||clicktroute.com^$popup
+||clictrck.com^$popup
+||clkads.com^$popup
+||clkcln.com^$popup
+||clkfeed.com^$popup
+||clkmon.com^$popup
+||clkpback3.com^$popup
+||clkrev.com^$popup
+||clodsplit.com^$popup
+||cloisonprecool.uno^$popup
+||clorec2.net^$popup
+||cloudlessjimarmpit.com^$popup
+||cloudpsh.top^$popup
+||cloudsrvtrk.com^$popup
+||cloudtrack-camp.com^$popup
+||cloudtraff.com^$popup
+||cloudvideosa.com^$popup
+||cm-trk2.com^$popup
+||cmllk2.info^$popup
+||cmpgns.net^$popup
+||cms100.xyz^$popup
+||cmtrkg.com^$popup
+||cn-rtb.com^$popup
+||cn846.com^$popup
+||cngcpy.com^$popup
+||coalbagbices.website^$popup
+||codedexchange.com^$popup
+||codeonclick.com^$popup
+||coffee2play.com^$popup
+||cogentpatientmama.com^$popup
+||cogenttriprepel.com^$popup
+||cognitionmesmerize.com^$popup
+||coldflownews.com^$popup
+||colmcweb.com^$popup
+||colonistnobilityheroic.com^$popup
+||com-wkejf32ljd23409system.net^$popup
+||combineencouragingutmost.com^$popup
+||come-get-s0me.com^$popup
+||come-get-s0me.net^$popup
+||comparisonpredatororigin.com^$popup
+||complementimpassable.com^$popup
+||conatysystems.com^$popup
+||conceitslidpredicate.com^$popup
+||concentrationmajesticshoot.com^$popup
+||concord.systems^$popup
+||condles-temark.com^$popup
+||condolencessumcomics.com^$popup
+||conetizable.com^$popup
+||connexity.net^$popup
+||consmo.net^$popup
+||constellationdelightfulfull.com^$popup
+||content-loader.com^$popup
+||contentabc.com^$popup,third-party
+||contradictionclinch.com^$popup
+||convenientcertificate.com^$popup
+||convertmb.com^$popup
+||coochhastier.top^$popup
+||cooljony.com^$popup
+||coonilyciwies.guru^$popup
+||cooperativechuckledhunter.com^$popup
+||cophypserous.com^$popup
+||cor8ni3shwerex.com^$popup
+||cordinghology.info^$popup
+||correry.com^$popup
+||coticoffee.com^$popup
+||countertrck.com^$popup
+||countessbridge.com^$popup
+||countvouchers.com^$popup
+||countypuddleillusion.com^$popup
+||cpalabtracking.com^$popup
+||cpaoffers.network^$popup
+||cpayard.com^$popup
+||cpm20.com^$popup
+||cpmclktrk.online^$popup
+||cpmterra.com^$popup
+||cpvadvertise.com^$popup
+||cpvlabtrk.online^$popup
+||cpxdeliv.com^$popup
+||cr-brands.net^$popup
+||craftsmanvolleyballhist.com^$popup
+||crazyad.net^$popup
+||crbbgate.com^$popup
+||crbck.link^$popup
+||crdefault.link^$popup
+||crdefault1.com^$popup
+||cretgate.com^$popup
+||crevicedepressingpumpkin.com^$popup
+||crisp-freedom.com^$popup
+||crjpgate.com^$popup
+||crjpingate.com^$popup
+||crjugate.com^$popup
+||crt.livejasmin.com^$popup
+||cryorganichash.com^$popup
+||crystal-blocker.com^$popup
+||css-load.com^$popup
+||cuddlethehyena.com^$popup
+||cuevastrck.com^$popup
+||cullemple-motline.com^$popup
+||curbimpress.com^$popup
+||curbneighbourbeefy.com^$popup
+||curvyalpaca.cc^$popup
+||cvastico.com^$popup
+||cwn0drtrk.com^$popup
+||cyan92010.com^$popup
+||cyber-guard.me^$popup
+||cyberlink.pro^$popup
+||cypressreel.com^$popup
+||czh5aa.xyz^$popup
+||d0p21g2fep.com^$popup
+||dadsats.com^$popup
+||dagnar.com^$popup
+||dailyc24.com^$popup
+||dailychronicles2.xyz^$popup
+||daizoode.com^$popup
+||dakjddjerdrct.online^$popup
+||dalyio.com^$popup
+||dalymix.com^$popup
+||dalysb.com^$popup
+||dalysh.com^$popup
+||dalysv.com^$popup
+||daredcoil.com^$popup
+||dark-reader.com^$popup
+||darksincenightclub.com^$popup
+||darsell.life^$popup
+||dartg665moetyor.com^$popup
+||dasfelynsaterr.win^$popup
+||data-px.services^$popup
+||datatechone.com^$popup
+||date-4-fuck.com^$popup
+||datedate.today^$popup
+||dateguys.online^$popup
+||datelinkage.top^$popup
+||datherap.xyz^$popup
+||datinggoodtaste.life^$popup
+||datingkoen.site^$popup
+||datingstyle.top^$popup
+||datingtoday.top^$popup
+||datingtorrid.top^$popup
+||daughterinlawrib.com^$popup
+||dawirax.com^$popup
+||dawnjacktip.live^$popup
+||dberthformtte.xyz^$popup
+||dddomainccc.com^$popup
+||decencyjessiebloom.com^$popup
+||deckedsi.com^$popup
+||declaredpolitics.com^$popup
+||decorationproducer.com^$popup
+||dedating.online^$popup
+||dedispot.com^$popup
+||deebcards-themier.com^$popup
+||deeperhundredpassion.com^$popup
+||deephicy.net^$popup
+||defas.site^$popup
+||defeatureother.xyz^$popup
+||defectpayslips.com^$popup
+||defenseneckpresent.com^$popup
+||defre.net^$popup
+||deghooda.net^$popup
+||deleterasks.digital^$popup
+||deline-sunction.com^$popup
+||deliverydom.com^$popup
+||deloplen.com^$popup
+||deloton.com^$popup
+||dendrito.name^$popup
+||denza.pro^$popup
+||depirsmandk5.com^$popup
+||derevya2sh8ka09.com^$popup
+||desertsutilizetopless.com^$popup
+||deskfrontfreely.com^$popup
+||desktopnotificationshub.com^$popup
+||desperationembassy.com^$popup
+||dexpredict.com^$popup
+||deyubo.uno^$popup
+||dfewasflyin.xyz^$popup
+||di7stero.com^$popup
+||dicinging.co.in^$popup
+||dictatepantry.com^$popup
+||dietaryexpanded.com^$popup
+||difice-milton.com^$popup
+||digitaldsp.com^$popup
+||dilruwha.net^$popup
+||directcpmfwr.com^$popup
+||directcpmrev.com^$popup
+||directdexchange.com^$popup
+||directrev.com^$popup
+||directtrck.com^$popup
+||directuklyecon.pics^$popup
+||dirtysuspension.com^$popup
+||disappearingassurance.com^$popup
+||discountbasistinge.com^$popup
+||dishphysics.com^$popup
+||disillusionromeearlobe.com^$popup
+||disingenuousfortunately.com^$popup
+||dispatchfeed.com^$popup
+||displayvertising.com^$popup
+||disregardbuymigrant.com^$popup
+||disreputablegenuinelyhonorary.com^$popup
+||dissipatebackyarduncle.com^$popup
+||distantnews.com^$popup
+||divertbywordinjustice.com^$popup
+||divorceseed.com^$popup
+||djfiln.com^$popup
+||dl-protect.net^$popup
+||dlmate15.online^$popup
+||dlstngulshedates.net^$popup
+||dmeukeuktyoue.info^$popup
+||dmiredindeed.com^$popup
+||dmzjmp.com^$popup
+||dnckawxatc.com^$popup
+||doaipomer.com^$popup
+||doct-umb.org^$popup
+||doctorpost.net^$popup
+||doddymetaled.space^$popup
+||dog-realtimebid.org^$popup
+||dolatiaschan.com^$popup
+||dolohen.com^$popup
+||dompeterapp.com^$popup
+||donecperficiam.net^$popup
+||donemagbuy.live^$popup
+||donthedoorwi.com^$popup
+||donutfulfilherd.com^$popup
+||dooloust.net^$popup
+||doormanbafflemetal.com^$popup
+||dopaclickz.com^$popup
+||dopaleads.com^$popup
+||dopansearor.com^$popup
+||dope.autos^$popup
+||dormitoryreverend.com^$popup
+||doruffleton.com^$popup
+||doruffletr.com^$popup
+||dosliggooor.com^$popup
+||dotchaudou.com^$popup
+||doubleadserve.com^$popup
+||doubleclick.net^$popup
+||doublepimp.com^$popup
+||douglasjamestraining.com^$popup
+||down-paradise.com^$popup
+||down1oads.com^$popup
+||download-adblock-zen.com^$popup
+||download-file.org^$popup
+||download-performance.com^$popup
+||download-ready.net^$popup
+||downloadboutique.com^$popup
+||downloadoffice2010.org^$popup
+||downloadthesefile.com^$popup
+||downlon.com^$popup
+||dowtyler.com^$popup
+||dradvice.in^$popup
+||dragnag.com^$popup
+||drawingsingmexican.com^$popup
+||drctcldfe.com^$popup
+||drctcldfefwr.com^$popup
+||drctcldff.com^$popup
+||drctcldfffwr.com^$popup
+||dressblockedfund.com^$popup
+||dressingdedicatedmeeting.com^$popup
+||dribbleads.com^$popup
+||drinkscormac.website^$popup
+||drinksinvoluntary.com^$popup
+||droppalpateraft.com^$popup
+||drsmediaexchange.com^$popup
+||drtuproft.com^$popup
+||dsp.wtf^$popup
+||dspultra.com^$popup
+||dsstrk.com^$popup
+||dtssrv.com^$popup
+||dtx.click^$popup
+||dualdirectnessrobber.com^$popup
+||ducubchooa.com^$popup
+||dugothitachan.com^$popup
+||dukirliaon.com^$popup
+||dulativergs.com^$popup
+||dwightadjoining.com^$popup
+||dynsrvdea.com^$popup
+||dynsrvtbg.com^$popup
+||dynsrvwer.com^$popup
+||dyptanaza.com^$popup
+||dzhjmp.com^$popup
+||dzienkudrow.com^$popup
+||e335udnv6drg78b7.com^$popup
+||e702fa7de9d35c37.com^$popup
+||eabids.com^$popup
+||eacdn.com^$popup
+||ealeo.com^$popup
+||eanddescri.com^$popup
+||eaoueopa.com^$popup
+||earandmarketing.com^$popup
+||earlinessone.xyz^$popup
+||easelgivedolly.com^$popup
+||eastfeukufu.info^$popup
+||eastfeukufunde.com^$popup
+||easy-ad-blocker.net^$popup
+||easyads28.mobi^$popup
+||easyfrag.org^$popup
+||easykits.org^$popup
+||easymrkt.com^$popup
+||eavesofefinegoldf.info^$popup
+||ecrwqu.com^$popup
+||ecusemis.com^$popup
+||edalloverwiththinl.info^$popup
+||edchargina.pro^$popup
+||eedsaung.net^$popup
+||eegeeglou.com^$popup
+||eehuzaih.com^$popup
+||effaceecho.com^$popup
+||effectdrape.com^$popup
+||effectivecpmcontent.com^$popup
+||effectiveperformancenetwork.com^$popup
+||egmyz.com^$popup
+||egretswamper.com^$popup
+||eighteenderived.com^$popup
+||eighthwaspish.com^$popup
+||eiteribesshaints.com^$popup
+||eitfromthe.com^$popup
+||ejuiashsateampl.info^$popup
+||electrodirect.click^$popup
+||electronicconsensus.com^$popup
+||elephant-ads.com^$popup
+||elizathings.com^$popup
+||elltheprecise.org^$popup
+||eloquentformallyrelapse.com^$popup
+||elsewherebuckle.com^$popup
+||elvermowed.uno^$popup
+||embodimentpronounrunway.com^$popup
+||emeraldhecticteapot.com^$popup
+||emonito.xyz^$popup
+||emotionallyhemisphere.com^$popup
+||employmentsuppressedbeautiful.com^$popup
+||emptivetss.space^$popup
+||emumuendaku.info^$popup
+||encroachsnortvarnish.com^$popup
+||enemieshemisphere.com^$popup
+||eneverals.biz^$popup
+||engagementdepressingseem.com^$popup
+||enlightencentury.com^$popup
+||enloweb.com^$popup
+||enoneahbut.org^$popup
+||entainpartners.com^$popup,third-party
+||entjgcr.com^$popup
+||entlyhaveb.autos^$popup
+||entry-system.xyz^$popup
+||entterto.com^$popup
+||eofst.com^$popup
+||eonsmedia.com^$popup
+||eoveukrnme.info^$popup
+||epicgameads.com^$popup
+||eptougry.net^$popup
+||equilibriumindifferentsoak.com^$popup
+||era67hfo92w.com^$popup
+||erakzeo.cfd^$popup
+||erconditingde.info^$popup
+||erdecisesgeorg.info^$popup
+||ereallywasnoth.com^$popup
+||errumoso.xyz^$popup
+||ertewqas.net.^$popup
+||ertewqas.net^$popup
+||ertewqas.org.^$popup
+||ertewqas.org^$popup
+||eshkol.io^$popup
+||eshkol.one^$popup
+||estivaltodayz.com^$popup
+||ethnicacknowledgedbeneficial.com^$popup
+||ettilt.com^$popup
+||eucli-czt.com^$popup
+||eudstudio.com^$popup
+||eulal-cnr.com^$popup
+||euprotection.click^$popup
+||europe-daily.org^$popup
+||evaporateahead.com^$popup
+||evasionseptemberbee.com^$popup
+||eventsbands.com^$popup
+||eventucker.com^$popup
+||ever8trk.com^$popup
+||ewesmedia.com^$popup
+||ewoodandwaveo.com^$popup
+||exaltationinsufficientintentional.com^$popup
+||exbuggishbe.info^$popup
+||excretekings.com^$popup
+||exdynsrv.com^$popup
+||exemptrequest.com^$popup
+||exerciseundergone.com^$popup
+||exhauststreak.com^$popup
+||exnesstrack.com^$popup
+||exoads.click^$popup
+||exoclick.com^$popup
+||exosrv.com^$popup
+||expdirclk.com^$popup
+||experimentalconcerningsuck.com^$popup
+||explorads.com^$popup,third-party
+||explorefast-1.com^$popup
+||explorefast-2.com^$popup
+||expmediadirect.com^$popup
+||exporder-patuility.com^$popup
+||exrtbsrv.com^$popup
+||extensions-media.com^$popup
+||extentaccreditedinsensitive.com^$popup
+||extractdissolve.com^$popup
+||extremiu.top^$popup
+||eyauknalyticafra.info^$popup
+||ezadblocker.com^$popup
+||ezcgojaamg.com^$popup
+||ezdownloadpro.info^$popup
+||ezhefg9gbhgh10.com^$popup
+||ezmob.com^$popup
+||ezyenrwcmo.com^$popup
+||f5v1x3kgv5.com^$popup
+||facilitatevoluntarily.com^$popup
+||fackeyess.com^$popup
+||fadssystems.com^$popup
+||fadszone.com^$popup
+||fairieflame.com^$popup
+||faiverty-station.com^$popup
+||falsewrist.com^$popup
+||familyborn.com^$popup
+||fancycrab.net^$popup
+||fapmeth.com^$popup
+||fapping.club^$popup
+||farawayreel.com^$popup
+||fardasub.xyz^$popup
+||farmhumor.host^$popup
+||fast-redirecting.com^$popup
+||fastdlr.com^$popup
+||fastdxr.com^$popup
+||fastincognitomode.com^$popup
+||fastlnd.com^$popup
+||fastmtn.com^$popup
+||fastpsh.top^$popup
+||fatstepn.click^$popup
+||fbmedia-bls.com^$popup
+||fbmedia-ckl.com^$popup
+||fdelphaswcealifornica.com^$popup
+||feastoffortuna.com^$popup
+||februaryreductionapplet.com^$popup
+||feed-xml.com^$popup
+||feedfinder23.info^$popup
+||feedyourheadmag.com
+||feelingstoriesplumb.com^$popup
+||feignthat.com^$popup
+||felipby.live^$popup
+||fellowsargean.com^$popup
+||femvxitrquzretxzdq.info^$popup
+||fenacheaverage.com^$popup
+||fer2oxheou4nd.com^$popup
+||ferelatedmothes.com^$popup
+||fewrfie.com^$popup
+||fhserve.com^$popup
+||fifteenthhardboiledbanker.com^$popup
+||fiinnancesur.com^$popup
+||filestube.com^$popup,third-party
+||fillingimpregnable.com^$popup
+||finalice.net^$popup
+||finance-hot-news.com^$popup
+||findanonymous.com^$popup
+||findbetterresults.com^$popup
+||findlnk.com^$popup
+||findpartner.life^$popup
+||finreporter.net^$popup
+||firescorrelationprodigy.com^$popup
+||firnebmike.live^$popup
+||firstclass-download.com^$popup
+||fitcenterz.com^$popup
+||fitsazx.xyz^$popup
+||fittingcentermonday.com^$popup
+||fittingcentermondaysunday.com^$popup
+||fivb-downloads.org^$popup
+||fivetrafficroads.com^$popup
+||fixespreoccupation.com^$popup
+||fla4n6ne7r8ydcohcojnnor.com^$popup
+||flairadscpc.com^$popup
+||flamebeard.top^$popup
+||flashymass.com^$popup
+||flelgwe.site^$popup
+||flingforyou.com^$popup
+||flixcontentshop.com^$popup
+||floatingbile.com^$popup
+||floweryduck.cc^$popup
+||flowln.com^$popup
+||flrdra.com^$popup
+||fluffynickname.com^$popup
+||flyingadvert.com^$popup
+||foamlifeboatriddance.com^$popup
+||focuusing.com^$popup
+||foldingclassified.com^$popup
+||followedsurvey.com^$popup
+||followtrusted.com^$popup
+||fontdeterminer.com^$popup
+||foodme.info^$popup
+||for-j.com^$popup
+||forarchenchan.com^$popup
+||forcealetell.com^$popup
+||forflygonom.com^$popup
+||forgotingolstono.com^$popup
+||formulacountess.com^$popup
+||forooqso.tv^$popup
+||forthdigestive.com^$popup
+||fortyphlosiona.com^$popup
+||forzubatr.com^$popup
+||fostereminent.com^$popup
+||fourwhenstatistics.com^$popup
+||foxqck.com^$popup
+||fpctraffic3.com^$popup
+||fpgedsewst.com^$popup
+||fpukxcinlf.com^$popup
+||fralstamp-genglyric.icu^$popup
+||fraudholdingpeas.com^$popup
+||free3dgame.xyz^$popup
+||freeevpn.info^$popup
+||freehookupaffair.com^$popup
+||freeprize.org^$popup
+||freetrckr.com^$popup
+||freshleads.pro^$popup
+||freshpops.net^$popup
+||frestlinker.com^$popup
+||frictiontypicalsecure.com^$popup
+||friendlyduck.com^$popup
+||fronthlpr.com^$popup
+||fronthlpric.com^$popup
+||frrdlass.com^$popup
+||frtya.com^$popup
+||frtyb.com^$popup
+||frtye.com^$popup
+||fstsrv.com^$popup
+||fstsrv2.com^$popup
+||fstsrv5.com^$popup
+||fstsrv6.com^$popup
+||ftte.xyz^$popup
+||fugcgfilma.com^$popup
+||functionsprecision.com^$popup
+||fundsbe.com^$popup
+||funmatrix.net^$popup
+||furnacemanagerstates.com^$popup
+||furrowparabledisplay.com^$popup
+||furstraitsbrowse.com^$popup
+||fuse-cloud.com^$popup
+||fusttds.xyz^$popup
+||fuzzywardshoplifting.com^$popup
+||fwbntw.com^$popup
+||fyglovilo.pro^$popup
+||fymlwv.com^$popup
+||g0wow.net^$popup
+||g2afse.com^$popup
+||g33ktr4ck.com^$popup
+||gadslife.com^$popup
+||gadssystems.com^$popup
+||galaxypush.com^$popup
+||gallonranchwhining.com^$popup
+||galotop1.com^$popup
+||gameengagedthen.com^$popup
+||gaming-adult.com^$popup
+||gaming-box.com^$popup
+||gamingonline.top^$popup
+||gammamkt.com^$popup
+||gandmotivatin.info^$popup
+||ganja.com^$popup,third-party
+||garmentsdraught.com^$popup
+||gasylicyg1e8n6po.com^$popup
+||gdecordingholo.info^$popup
+||gdmconvtrck.com^$popup
+||generalebad.xyz^$popup
+||genialsleptworldwide.com^$popup
+||geniusdexchange.com^$popup
+||genuinelybruises.com^$popup
+||geotrkclknow.com^$popup
+||germinateensue.com^$popup
+||get-browseprotection.com^$popup
+||get-me-wow.in^$popup
+||get2m5sgstohne.com^$popup
+||getalinkandshare.com^$popup
+||getalltraffic.com^$popup
+||getarrectlive.com^$popup
+||getgx.net^$popup
+||getinstallmentloanbtc.org^$popup
+||getmyads.com^$popup
+||getonlineuserprotection.com^$popup
+||getoverenergy.com^$popup
+||getrunbestlovemy.info^$popup
+||getshowads.com^$popup
+||getsmartyapp.com^$popup
+||getsomespecials.com^$popup
+||getsthis.com^$popup
+||getsurferprotector.com^$popup
+||getthisappnow.com^$popup
+||gettingtoe.com^$popup
+||gettopple.com^$popup
+||gfdfhdh5t5453.com^$popup
+||gfstrck.com^$popup
+||gggtrenks.com^$popup
+||ghostnewz.com^$popup
+||giftedbrevityinjured.com^$popup
+||gillstaught.com^$popup
+||ginpithed.live^$popup
+||girlstaste.life^$popup
+||gitechiphy.pro^$popup
+||gkrtmc.com^$popup
+||glareart.com^$popup
+||glassmilheart.com^$popup
+||glauvoob.com^$popup
+||gleagainedam.info^$popup
+||gleeneep.com^$popup
+||glegatemi.pro^$popup
+||glersakr.com^$popup
+||glersooy.net^$popup
+||glimpsemankind.com^$popup
+||glixaing.com^$popup
+||glizauvo.net^$popup
+||globaladblocker.com^$popup
+||globaladblocker.net^$popup
+||globeofnews.com^$popup
+||globwo.online^$popup
+||glorifyfactor.com^$popup
+||glovesusage.com^$popup
+||glowingnews.com^$popup
+||gloytrkb.com^$popup
+||glugherg.net^$popup
+||gml-grp.com^$popup
+||gmxvmvptfm.com^$popup
+||go-to-website.com^$popup
+||go2affise.com^$popup
+||go2linkfast.com^$popup
+||go2oh.net^$popup
+||go2rph.com^$popup
+||goads.pro^$popup
+||goaffmy.com^$popup
+||goaserv.com^$popup
+||goblocker.xyz^$popup
+||godpvqnszo.com^$popup
+||gogglerespite.com^$popup
+||gold2762.com^$popup
+||golochmenacer.com^$popup
+||gomo.cc^$popup
+||goodvpnoffers.com^$popup
+||goosebomb.com^$popup
+||gophykopta.com^$popup
+||gorillatrk.com^$popup
+||gositego.live^$popup
+||gosoftwarenow.com^$popup
+||got-to-be.com^$popup
+||gotibetho.pro^$popup
+||gotjobbs.com^$popup
+||goto1x.me^$popup
+||gotohouse1.club^$popup
+||gotoplaymillion.com^$popup
+||gotrackier.com^$popup
+||governessmagnituderecoil.com^$popup
+||grabclix.com^$popup
+||graduatewonderentreaty.com^$popup
+||granddaughterrepresentationintroduce.com^$popup
+||grandmotherfoetussadly.com^$popup
+||grandsonreverendlawn.com^$popup
+||grapseex.com^$popup
+||gratifiedmatrix.com^$popup
+||gratinaesc.cfd^$popup
+||grauglak.com^$popup
+||greatbonushere.top^$popup
+||greatdexchange.com^$popup
+||greatlifebargains2024.com^$popup
+||greatvpnoffers.com^$popup
+||grecmaru.com^$popup
+||green-resultsbid.com^$popup
+||green-search-engine.com^$popup
+||greenlinknow.com^$popup
+||greenplasticdua.com^$popup
+||greewepi.net^$popup
+||grefutiwhe.com^$popup
+||gregariousflower.pro^$popup
+||grewquartersupporting.com^$popup
+||greygrid.net^$popup
+||groininsightclaimed.com^$popup
+||gronsoad.com^$popup
+||grown-zero-breeze-belong.xyz^$popup
+||grtya.com^$popup
+||grtyj.com^$popup
+||gruffermail.com^$popup
+||grumblecrytopless.com^$popup
+||grumpy-fear.pro^$popup
+||grunoaph.net^$popup
+||grupif.com^$popup
+||grygrothapi.pro^$popup
+||gsecurecontent.com^$popup
+||gsniper2.com^$popup
+||gtbdhr.com^$popup
+||guerrilla-links.com^$popup
+||guesswhatnews.com^$popup
+||guestblackmail.com^$popup
+||guldenstypps.top^$popup
+||gunreset.com^$popup
+||gurabinhetot.com^$popup
+||guro2.com^$popup
+||gussiemarkup.life^$popup
+||gvcaffiliates.com^$popup
+||h0w-t0-watch.net^$popup
+||h74v6kerf.com^$popup
+||h8vzwpv.com^$popup
+||habovethecityon.info^$popup
+||hadesleta.com^$popup
+||haemorrhagedigest.com^$popup
+||hairidsign.live^$popup
+||hallucinatebotany.com^$popup
+||hallucinatediploma.com^$popup
+||hallucinatepromise.com^$popup
+||hamestoyman.website^$popup
+||hammerhewer.top^$popup
+||handbaggather.com^$popup
+||handwritingnomad.com^$popup
+||happypasteheat.com^$popup
+||harlequinsleepyfrog.xyz^$popup
+||harmonypix.com^$popup
+||harsh-definition.pro^$popup
+||harshlygiraffediscover.com^$popup
+||hatsamevill.org^$popup
+||hatwasallokmv.info^$popup
+||hauchiwu.com^$popup
+||havegrosho.com^$popup
+||hazoopso.net^$popup
+||hcritiesec.xyz^$popup
+||hdcommunity.online^$popup
+||headlightgranulatedflee.com^$popup
+||heappyrinceas.info^$popup
+||heavenfull.com^$popup
+||heavenly-landscape.com^$popup
+||heedenglish.com^$popup
+||hegazedatthewo.com^$popup
+||heglosuty.com^$popup
+||hehighursoo.com^$popup
+||helphauntboxer.com^$popup
+||hentaifap.land^$popup
+||heptix.net^$popup
+||heratheacle.com^$popup
+||hereditaryplead.com^$popup
+||heremployeesihi.info^$popup
+||heresanothernicemess.com^$popup
+||herew-lmq.com^$popup
+||hermichermicfurnished.com^$popup
+||hermitmeaninglessconsequences.com^$popup
+||hesoorda.com^$popup
+||hespe-bmq.com^$popup
+||hetadinh.com^$popup
+||hetaint.com^$popup
+||hetapus.com^$popup
+||hetartwg.com^$popup
+||hetarust.com^$popup
+||hetaruvg.com^$popup
+||hetaruwg.com^$popup
+||hewmjifrn4gway.com^$popup
+||hexovythi.pro^$popup
+||hh-btr.com^$popup
+||hhbypdoecp.com^$popup
+||hhourtrk2.com^$popup
+||hibids10.com^$popup
+||hicpm10.com^$popup
+||hicpm5.com^$popup
+||hiend.xyz^$popup
+||higgiens23c5l8asfrk.com^$popup
+||highcpmrevenuenetwork.com^$popup
+||highercldfrev.com^$popup
+||higheurest.com^$popup
+||highmaidfhr.com^$popup
+||highperformancecpm.com^$popup
+||highperformancecpmgate.com^$popup
+||highperformancecpmnetwork.com^$popup
+||highperformancedformats.com^$popup
+||highperformancegate.com^$popup
+||highrevenuecpmnetwork.com^$popup
+||highrevenuegate.com^$popup
+||highwaycpmrevenue.com^$popup
+||hillhousehomes.co^$popup
+||hilltopads.com^$popup
+||hilltopads.net^$popup
+||hilove.life^$popup
+||hiltonbett.com^$popup
+||himhedrankslo.xyz^$popup
+||himunpractical.com^$popup
+||hinaprecent.info^$popup
+||hinkhimunpractical.com^$popup
+||hintonjour.com^$popup
+||hipersushiads.com^$popup
+||hissoverout.com^$popup
+||hisurnhuh.com^$popup
+||hitcpm.com^$popup
+||hitopadxdz.xyz^$popup
+||hlpnowp-c.com^$popup
+||hnrgmc.com^$popup
+||hoa44trk.com^$popup
+||hoaxbasesalad.com^$popup
+||hoctor-pharity.xyz^$popup
+||hoglinsu.com^$popup
+||hognaivee.com^$popup
+||hogqmd.com^$popup
+||holdsoutset.com^$popup
+||honestlyvicinityscene.com^$popup
+||hoofexcessively.com^$popup
+||hooliganapps.com^$popup
+||hooligapps.com^$popup
+||hoopbeingsmigraine.com^$popup
+||hopefullyactively.com^$popup
+||hopghpfa.com^$popup
+||horizontallysprungboldly.com^$popup
+||horriblysparkling.com^$popup
+||horrifieddespair.com^$popup
+||hot-growngames.life^$popup
+||hotchatdate.com^$popup
+||hotchatdirect.com^$popup
+||hotplaystime.life^$popup
+||hottest-girls-online.com^$popup
+||hotwildadult.com^$popup
+||householdsinnersyringe.com^$popup
+||howboxmaa.site^$popup
+||howboxmab.site^$popup
+||howsliferightnow.com^$popup
+||howtolosebellyfat.shop^$popup
+||hpyjmp.com^$popup
+||hqhjjha.net.$popup
+||hqhjjha.net^$popup
+||hqhjjha.org.^$popup
+||hqhjjha.org^$popup
+||hqtrk.com^$popup
+||hrahdmon.com^$popup
+||hrtye.com^$popup
+||hrtyh.com^$popup
+||hsrvv.com^$popup
+||hsrvz.com^$popup
+||hss2y.com^$popup
+||hst2x.com^$popup
+||hst2y.com^$popup
+||hstpnetwork.com^$popup
+||html-load.com^$popup
+||htmonster.com^$popup
+||htoptracker11072023.com^$popup
+||hubturn.info^$popup
+||hue2a.com^$popup
+||hue3a.com^$popup
+||hueads.com^$popup
+||hugregregy.pro^$popup
+||huluads.info^$popup
+||humiliatedvolumepore.com^$popup
+||hundredpercentmargin.com^$popup
+||hundredscultureenjoyed.com^$popup
+||hundredthtvthorny.com^$popup
+||hungryrise.com^$popup
+||hurlmedia.design^$popup
+||husezo.uno^$popup
+||huskydesigner.pro^$popup
+||hxcdyx.com^$popup
+||hxmanga.com^$popup
+||hybridgermandespicable.com^$popup
+||hyenadata.com^$popup
+||i62e2b4mfy.com^$popup
+||iageandinone.com^$popup
+||iam9p3eri3as5lc6hllege.com^$popup
+||iamadssystems.com^$popup
+||icedewear.site^$popup
+||ichimaip.net^$popup
+||icilytired.com^$popup
+||idohethisisathllea.com^$popup
+||ifdividemeasuring.com^$popup
+||ifdnzact.com^$popup
+||ifigent.com^$popup
+||ifilez.org^$popup
+||ifsnickshriek.com^$popup
+||igubet.link^$popup
+||ikengoti.com^$popup
+||ilaterdeallyi.info^$popup
+||ilaterdeallyig.info^$popup
+||illegaleaglewhistling.com^$popup
+||illuminateinconveniencenutrient.com^$popup
+||illusiveremarkstreat.com^$popup
+||imaxcash.com^$popup
+||imghst-de.com^$popup
+||imitrk13.com^$popup
+||immigrateskating.com^$popup
+||immigrationspiralprosecution.com^$popup
+||immoraldriddle.com^$popup
+||impactserving.com^$popup
+||impliedbusinessmencompletion.com^$popup
+||imponedbilsh.top^$popup
+||impresseastsolo.com^$popup
+||impressiveporchcooler.com^$popup
+||inabsolor.com^$popup
+||inaltariaon.com^$popup
+||inanityacromia.life^$popup
+||inclk.com^$popup
+||incomprehensibleacrid.com^$popup
+||inconveniencepretendboost.com^$popup
+||inediblepollingbuzz.com^$popup
+||inexperiencedmingle.com^$popup
+||inferiorface.com^$popup
+||infirmaryboss.com^$popup
+||inflectionquake.com^$popup
+||infodonorbranch.com^$popup
+||infopicked.com^$popup
+||informcheck.uno^$popup
+||infra.systems^$popup
+||infuseawee.guru^$popup
+||inhabityoungenter.com^$popup
+||initialbanisters.com^$popup
+||initiateheavilycurrentinfo-product.info^$popup
+||injusticeamend.com^$popup
+||inlacom.com^$popup
+||inncreasukedrev.info^$popup
+||innocenceexpeditionsensation.com^$popup
+||innovid.com^$popup,third-party
+||inoradde.com^$popup
+||inpagepush.com^$popup
+||inshelmetan.com^$popup
+||insidehoarse.com^$popup
+||insideofnews.com^$popup
+||insigit.com^$popup
+||insta-cash.net^$popup
+||install-check.com^$popup
+||instancesflushedslander.com^$popup
+||instantlyshrillblink.com^$popup
+||instantpaydaynetwork.com^$popup
+||insteadprincipleshearted.com^$popup
+||instructoralphabetoverreact.com^$popup
+||intab.fun^$popup
+||integrityprinciplesthorough.com^$popup
+||intentionallyathwart.com^$popup
+||interclics.com^$popup
+||interesteddeterminedeurope.com^$popup
+||internewsweb.com^$popup
+||interpersonalskillse.info^$popup
+||intimidatekerneljames.com^$popup
+||intorterraon.com^$popup
+||intriguingdate.net^$popup
+||inuedidgmapla.com^$popup
+||invaderannihilationperky.com^$popup
+||invaluable-approach.com^$popup
+||investing-globe.com^$popup
+||investortirelimetree.com^$popup
+||iociley.com^$popup
+||ioffers.icu^$popup
+||iogjhbnoypg.com^$popup
+||iopiopiop.net.^$popup
+||iopiopiop.net^$popup
+||iopiopiop.org.^$popup
+||iopiopiop.org^$popup
+||irkantyip.com^$popup
+||ironicnickraspberry.com^$popup
+||ironweaver.top^$popup
+||irrelevantassassinclaim.com^$popup
+||irtya.com^$popup
+||isawthenews.com^$popup
+||iseatheadline.com^$popup
+||ismlks.com^$popup
+||isohuntx.com/vpn/$popup
+||issomeoneinth.info^$popup
+||istlnkcl.com^$popup
+||itespurrom.com^$popup
+||itgiblean.com^$popup
+||itnuzleafan.com^$popup
+||itponytaa.com^$popup
+||itrght.com^$popup
+||itrustzone.site^$popup
+||itskiddien.club^$popup
+||ittorchicer.com^$popup
+||iutur-ixp.com^$popup
+||ivpnoffers.com^$popup
+||iwanttodeliver.com^$popup
+||iwantusingle.com^$popup
+||iyfnz.com^$popup
+||iyfnzgb.com^$popup
+||izviral.com^$popup
+||ja2n2u30a6rgyd.com^$popup
+||jaavnacsdw.com^$popup
+||jacksonduct.com^$popup
+||jaclottens.live^$popup
+||jads.co^$popup
+||jailabridge.com^$popup
+||jamchew.com^$popup
+||jamminds.com^$popup
+||jamstech.store^$popup
+||jaqtwibmeni.com^$popup
+||jashautchord.com^$popup
+||java8.xyz^$popup
+||jawlookingchapter.com^$popup
+||jawsspecific.com^$popup
+||jaxxenpro.com^$popup
+||jeekomih.com^$popup
+||jehealis.com^$popup
+||jennyunfit.com^$popup
+||jennyvisits.com^$popup
+||jerboasjourney.com^$popup
+||jerkarmlesspuppy.com^$popup
+||jetordinarilysouvenirs.com^$popup
+||jewelbeeperinflection.com^$popup
+||jillbuildertuck.com^$popup
+||jjcwq.site^$popup
+||jocauzee.net^$popup
+||join-admaven.com^$popup
+||joinpropeller.com^$popup
+||joltidiotichighest.com^$popup
+||jomtingi.net^$popup
+||journeyembankmentsubjects.com^$popup
+||jpgtrk.com^$popup
+||jqtree.com^$popup
+||jrpkizae.com^$popup
+||jsmentry.com^$popup
+||jsmptjmp.com^$popup
+||jubhahsfurzier.digital^$popup
+||jubsaugn.com^$popup
+||juiceadv.com^$popup
+||juicyads.com^$popup
+||jujaufur.net^$popup
+||jukseeng.net^$popup
+||julia-liz.com^$popup
+||julionframe.com^$popup
+||jumbitr.com^$popup
+||jump-path1.com^$popup
+||jump2.top^$popup
+||junbi-tracker.com^$popup
+||jurisdictionasundercurls.com^$popup
+||jusbertimla4ke2.com^$popup
+||justdating.online^$popup
+||justonemorenews.com^$popup
+||jutprolificlax.com^$popup
+||jutyledu.pro^$popup
+||jwalf.com^$popup
+||jybaekajjmroq.top^$popup
+||k4umr0wuc.com^$popup
+||kaigaidoujin.com^$popup
+||kakbik.info^$popup
+||kamalafooner.space^$popup
+||kanoodle.com^$popup
+||kappalinks.com^$popup
+||karafutem.com^$popup
+||karoon.xyz^$popup
+||katebugs.com^$popup
+||katecrochetvanity.com^$popup
+||kaya303.lol^$popup
+||kaya303.site^$popup
+||keefeezo.net^$popup
+||keewoach.net^$popup
+||kektds.com^$popup
+||kenomal.com^$popup
+||kerumal.com^$popup
+||kesimon.com^$popup
+||kesmatic.com^$popup
+||ketheappyrin.com^$popup
+||ketingefifortcaukt.info^$popup
+||kettakihome.com^$popup
+||kgfjrb711.com^$popup
+||kgroundandinte.net^$popup
+||kidhumiliateessay.com^$popup
+||kiksajex.com^$popup
+||kindleloving.com^$popup
+||kindredplc.com^$popup
+||king3rsc7ol9e3ge.com^$popup
+||kingtrck1.com^$popup
+||kinripen.com^$popup
+||kirteexe.tv^$popup
+||kirujh.com^$popup
+||kitchiepreppie.com^$popup
+||kityamurlika.com^$popup
+||kiwi-offers.com^$popup
+||kkjuu.xyz^$popup
+||kmisln.com^$popup
+||kmyunderthf.info^$popup
+||knockknockads.com^$popup
+||knockoutantipathy.com^$popup
+||knotlaghell.com^$popup
+||kocairdo.net^$popup
+||kogutcho.net^$popup
+||kolkwi4tzicraamabilis.com^$popup
+||koogreep.com^$popup
+||kopoqu.xyz^$popup
+||korexo.com^$popup
+||kornbulk1.com^$popup
+||koronacineole.life^$popup
+||kotikinar2ko8tiki09.com^$popup
+||krjxhvyyzp.com^$popup
+||krnmayzjvzqve.top^$popup
+||ku2d3a7pa8mdi.com^$popup
+||kultingecauyuksehinkitw.info^$popup
+||kuno-gae.com^$popup
+||kunvertads.com^$popup
+||kuzyvyni.pro^$popup
+||kxnggkh2nj.com^$popup
+||kz796.com^$popup
+||l4meet.com^$popup
+||lacquerreddeform.com^$popup
+||ladiesforyou.net^$popup
+||ladyphapty.com^$popup
+||lalofilters.website^$popup
+||lameterthenhep.com^$popup
+||lanesusanne.com^$popup
+||lanksnail.com^$popup
+||lanky-examination.pro^$popup
+||lassampy.com^$popup
+||last0nef1le.com^$popup
+||lasubqueries.com^$popup
+||latheendsmoo.com^$popup
+||lavatorydownybasket.com^$popup
+||lavender64369.com^$popup
+||lawful-screw.com^$popup
+||laxthatpie.live^$popup
+||layerpearls.com^$popup
+||lby2kd27c.com^$popup
+||lcentntel.com^$popup
+||leadensought.com^$popup
+||leadingservicesintimate.com^$popup
+||leadsecnow.com^$popup
+||leapretrieval.com^$popup
+||leaseholderbarbcompact.com^$popup
+||leforgotteddisg.info^$popup
+||legendadmiration.com^$popup
+||leiasedofold.xyz^$popup
+||lementwrencespri.info^$popup
+||lenkmio.com^$popup
+||leonbetvouum.com^$popup
+||lepetitdiary.com^$popup
+||lephaush.net^$popup
+||lesoocma.net^$popup
+||letitnews.com^$popup
+||letitredir.com^$popup
+||letsbegin.online^$popup
+||letshareus.com^$popup
+||letzonke.com^$popup
+||leveragetypicalreflections.com^$popup
+||liaoptse.net^$popup
+||libertystmedia.com^$popup
+||lickinggetting.com^$popup
+||lickingimprovementpropulsion.com^$popup
+||lie2anyone.com^$popup
+||liedebris.com^$popup
+||lifeabsolution.com^$popup
+||lifeporn.net^$popup
+||lifetimeroyaltybestial.com^$popup
+||liffswithabr.com^$popup
+||ligatus.com^$popup
+||lighthousemissingdisavow.com^$popup
+||lightssyrupdecree.com^$popup
+||likedatings.life^$popup
+||lilinstall11x.com^$popup
+||liliy9aydje10.com^$popup
+||limitationvolleyballdejected.com^$popup
+||limoners.com^$popup
+||linkchangesnow.com^$popup
+||linkmepu.com^$popup
+||linknotification.com^$popup
+||linkonclick.com^$popup
+||linkredirect.biz^$popup
+||linkwarkop4d.com^$popup
+||lipsate.com^$popup
+||liquidapprovaltar.com^$popup
+||liquidfire.mobi^$popup
+||liteappmagazin.com^$popup
+||literallisten.com^$popup
+||liveadexchanger.com^$popup
+||livechatflirt.com^$popup
+||liveleadtracking.com^$popup
+||livepromotools.com^$popup
+||liversely.net^$popup
+||livestormy.com^$popup
+||livezombymil.com^$popup
+||lizebruisiaculi.info^$popup
+||lkcoffe.com^$popup
+||lkstrck2.com^$popup
+||llpgpro.com^$popup
+||llvlzvrwkoaqm.top^$popup
+||lmn-pou-win.com^$popup
+||lmp3.org^$popup
+||lnk8j7.com^$popup
+||lnkgt.com^$popup
+||lnkvv.com^$popup
+||lntrigulngdates.com^$popup
+||lobimax.com^$popup
+||localelover.com^$popup
+||lockramnombles.life^$popup
+||locomotiveconvenientriddle.com^$popup
+||locooler-ageneral.com^$popup
+||lody24.com^$popup
+||logicdate.com^$popup
+||lokvel.ru^$popup
+||looew.club^$popup
+||lookandfind.me^$popup
+||looksmart.com^$popup
+||lootynews.com^$popup
+||losingoldfry.com^$popup
+||lottoleads.com^$popup
+||loverevenue.com^$popup
+||lovesparkle.space^$popup
+||lowrihouston.pro^$popup
+||lowseedotr.com^$popup
+||lowseelan.com^$popup
+||lowtyroguer.com^$popup
+||lowtyruntor.com^$popup
+||loyeesihighlyreco.info^$popup
+||lp247p.com^$popup
+||lplimjxiyx.com^$popup
+||lptrak.com^$popup
+||ltingecauyuksehi.com^$popup
+||luckyads.pro^$popup
+||luckyforbet.com^$popup
+||lurdoocu.com^$popup
+||lurgaimt.net^$popup
+||lusinlepading.com^$popup
+||lustrous-cheek.com^$popup
+||luvaihoo.com^$popup
+||luxetalks.com^$popup
+||lvaazvwmmvwev.top^$popup
+||lvztx.com^$popup
+||lwonclbench.com^$popup
+||lycheenews.com^$popup
+||lyconery-readset.com^$popup
+||lywasnothycanty.info^$popup
+||m73lae5cpmgrv38.com^$popup
+||ma3ion.com^$popup
+||macan-native.com^$popup
+||maddenbusy.com^$popup
+||mafroad.com^$popup
+||magicads.nl^$popup
+||magmafurnace.top^$popup
+||mailerrobands.website^$popup
+||majorityevaluatewiped.com^$popup
+||makingdevil.com^$popup
+||mallettraumatize.com^$popup
+||mallur.net^$popup
+||maltunfaithfulpredominant.com^$popup
+||mamaapparent.com^$popup
+||mambkooocango.com^$popup
+||manageoriginalmostinfo-product.info^$popup
+||manbycus.com^$popup
+||manconsider.com^$popup
+||manga18sx.com^$popup
+||manicurereprimand.com^$popup
+||mankindcopiesrichest.com^$popup
+||mannehill.com^$popup
+||maomaotang.com^$popup
+||maonderndbeco.com.ua^$popup
+||maquiags.com^$popup
+||marchingsmug.com^$popup
+||marenfu11.cn^$popup
+||marepuffy.com^$popup
+||marlierfritt.com^$popup
+||marti-cqh.com^$popup
+||marvelhuntcountry.com^$popup
+||masklink.org^$popup
+||massacreintentionalmemorize.com^$popup
+||matchjunkie.com^$popup
+||materialisticinformal.com^$popup
+||mathafuda.pro^$popup
+||matildawu.online^$popup
+||mauptaub.com^$popup
+||maw5r7y9s9helley.com^$popup
+||maxigamma.com^$popup
+||maybejanuarycosmetics.com^$popup
+||maymooth-stopic.com^$popup
+||maysunown.live^$popup
+||mb-npltfpro.com^$popup
+||mb01.com^$popup
+||mb102.com^$popup
+||mb103.com^$popup
+||mb104.com^$popup
+||mb223.com^$popup
+||mb38.com^$popup
+||mb57.com^$popup
+||mbstrk.com^$popup
+||mcpuwpush.com^$popup
+||mcurrentlysea.info^$popup
+||meadowaerial.com^$popup
+||media-412.com^$popup
+||media-servers.net^$popup
+||media-serving.com^$popup
+||mediamansix.com^$popup
+||mediasama.com^$popup
+||mediaserf.net^$popup
+||mediategenericburden.com^$popup
+||mediaxchange.co^$popup
+||medicationneglectedshared.com^$popup
+||medusaecaptan.com^$popup
+||meenetiy.com^$popup
+||meetradar.com^$popup
+||meetsexygirls.org^$popup
+||meetwebclub.com^$popup
+||megaffiliates.com^$popup
+||megdexchange.com^$popup
+||memecoins.club^$popup
+||mendress.icu^$popup
+||menepe.com^$popup
+||meofmukindwoul.info^$popup
+||merterpazar.com^$popup
+||mesqwrte.net.^$popup
+||mesqwrte.net^$popup
+||messagereceiver.com^$popup
+||messenger-notify.digital^$popup
+||messenger-notify.xyz^
+||messenger-notify.xyz^$popup
+||meteorclashbailey.com^$popup
+||methodrumour.com^$popup
+||metrica-yandex.com^$popup
+||metricfast.com^$popup
+||mevarabon.com^$popup
+||mghkpg.com^$popup
+||mgid.com^$popup
+||midgetincidentally.com^$popup
+||midtermconcordalight.com^$popup
+||migimsas.net^$popup
+||migrantspiteconnecting.com^$popup
+||milffinder.live^$popup
+||millustry.top^$popup
+||mindedcarious.com^$popup
+||miniglobalcitizens.com^$popup
+||minsistereron.xyz^$popup
+||mirfakpersei.top^$popup
+||misarea.com^$popup
+||mishapideal.com^$popup
+||misspkl.com^$popup
+||mistakeidentical.com^$popup
+||mityneedn.com^$popup
+||mk-ads.com^$popup
+||mkaff.com^$popup
+||mkjsqrpmxqdf.com^$popup
+||mktmobi.com^$popup
+||mmpcqstnkcelx.com^$popup
+||mndsrv.com^$popup
+||moartraffic.com^$popup
+||mob1ledev1ces.com^$popup
+||mobileraffles.com^$popup
+||mobiletracking.ru^$popup
+||mobipromote.com^$popup
+||mobmsgs.com^$popup
+||mobreach.com^$popup
+||mobsuitem.com^$popup
+||modescrips.info^$popup
+||modificationdispatch.com^$popup
+||moilizoi.com^$popup
+||moksoxos.com^$popup
+||moleconcern.com^$popup
+||molypsigry.pro^$popup
+||monadvs.com^$popup
+||moncoerbb.com^$popup
+||monetag.com^$popup
+||moneysavinglifehacks.pro^$popup
+||monkyank.com^$popup
+||monsterofnews.com
+||monsterofnews.com^$popup
+||moodokay.com^$popup
+||moonrocketaffiliates.com^$popup
+||morclicks.com^$popup
+||mordoops.com^$popup
+||more1.biz^$popup
+||mosrtaek.net.^$popup
+||mosrtaek.net^$popup
+||motherhoodlimiteddetest.com^$popup
+||motivessuggest.com^$popup
+||mountaincaller.top^$popup
+||mourny-clostheme.com^$popup
+||movemeforward.co^$popup
+||movfull.com^$popup
+||moviemediahub.com^$popup
+||moviesflix4k.club^$popup
+||moviesflix4k.xyz^$popup
+||movingfwd.co^$popup
+||mplayeranyd.info^$popup
+||mrdzuibek.com^$popup
+||mscoldness.com^$popup
+||mtwdmk9ic.com^$popup
+||mtypitea.net^$popup
+||muddychronicstuffed.com^$popup
+||mudfishatabals.com^$popup
+||mudflised.com^$popup
+||mufflealiases.com^$popup
+||mufflerlightsgroups.com^$popup
+||mugrikees.com^$popup
+||muheodeidsoan.info^$popup
+||muletatyphic.com^$popup
+||multipletrustedpc.com^$popup
+||mungfali.com^$popup
+||muralshelvesdeposition.com^$popup
+||murkilyergots.com^$popup
+||musk-give.com^$popup
+||mutinousconductdisk.com^$popup
+||mutux.cfd^$popup
+||muvflix.com^$popup
+||mvmbs.com^$popup
+||mwoukrkskills.xyz^$popup
+||my-promo7.com^$popup
+||myadcash.com^$popup
+||myadsserver.com^$popup
+||myaffpartners.com^$popup
+||mybestdc.com^$popup
+||mybestmv.com^$popup
+||mybetterck.com^$popup
+||mybetterdl.com^$popup
+||mybettermb.com^$popup
+||mychecklist4u.com^$popup
+||myckdom.com^$popup
+||mydailynewz.com^$popup
+||myeasetrack.com^$popup
+||myflirtclub.life^$popup
+||myhugewords.com^$popup
+||myhypestories.com^$popup
+||myjollyrudder.com^$popup
+||mynetworkprotector.com^$popup
+||myperfect2give.com^$popup
+||myrdrcts.com^$popup
+||myreqdcompany.com^$popup
+||mysagagame.com^$popup
+||mywebsavior.com^$popup
+||mywondertrip.com^$popup
+||n19.biz^$popup
+||n5rthy.com^$popup
+||naganoadigei.com^$popup
+||naggingirresponsible.com^$popup
+||naleapprength.xyz^$popup
+||nameluxuries.com^$popup
+||namesakeoscilloscopemarquis.com^$popup
+||nancontrast.com^$popup
+||nannyamplify.com^$popup
+||nanoadexchange.com^$popup
+||nanouwho.com^$popup
+||nanrumandbac.com^$popup
+||naoprj.com^$popup
+||napkinlucent.com^$popup
+||nasssmedia.com^$popup
+||nathanaeldan.pro^$popup
+||native-track.com^$popup
+||natregs.com^$popup
+||nauseouschangeable.com^$popup
+||naveljutmistress.com^$popup
+||naxadrug.com^$popup
+||nczjy.com^$popup
+||ndweandthep.xyz^$popup
+||nebulouslostpremium.com^$popup
+||nehodyshy.pro^$popup
+||neitherpossessedset.com^$popup
+||neptuntrack.com^$popup
+||nessainy.net^$popup
+||nestleareae.tech^$popup
+||nestormandadv.xyz^$popup
+||netcpms.com^$popup
+||netpatas.com^$popup
+||netund.com^$popup
+||network.nutaku.net^$popup
+||neutraltoxicpreposition.com^$popup
+||never2never.com^$popup
+||neverheartache.com^$popup
+||newbluetrue.xyz^$popup
+||newbornleasetypes.com^$popup
+||newdmn.icu^$popup
+||newjulads.com^$popup
+||newrtbbid.com^$popup
+||news-host.net^$popup
+||news-place1.xyz^$popup
+||news-portals1.xyz^$popup
+||news-site1.xyz^$popup
+||news-universe1.xyz^$popup
+||news-weekend1.xyz^$popup
+||newscadence.com^$popup
+||newsfortoday2.xyz^$popup
+||newsforyourmood.com^$popup
+||newsfrompluto.com^$popup
+||newsignites.com^$popup
+||newslikemeds.com^$popup
+||newspopperio.com^$popup
+||newssale.info^$popup
+||newstarads.com^$popup
+||newstemptation.com^$popup
+||newsyour.net^$popup
+||newtab-media.com^$popup
+||nextoptim.com^$popup
+||nextyourcontent.com^$popup
+||nezuel.com^$popup
+||ngeoziadiyc4hi2e.com^$popup
+||ngfruitiesmatc.info^$popup
+||ngsinspiringtga.info^$popup
+||nicatethebene.info^$popup
+||nicesthoarfrostsooner.com^$popup
+||nicsorts-accarade.com^$popup
+||niftiesrotonde.com^$popup
+||nimrute.com^$popup
+||ninancukankin.info^$popup
+||ninetyninesec.com^$popup
+||niyamabusiest.casa^$popup
+||noblefun.net^$popup
+||noerwe5gianfor19e4st.com^$popup
+||noiseslaveoutfit.com^$popup
+||nomadsbrand.com^$popup
+||nomadsdata.com^$popup
+||nomadsfit.com^$popup
+||nominalreverend.com^$popup
+||nominatecambridgetwins.com^$popup
+||nonecoffeehousesuspicious.com^$popup
+||nongloths.com^$popup
+||nonotro.name^$popup
+||nonspewpa.com^$popup
+||nopolicycrea.info^$popup
+||nossairt.net^$popup
+||nothingnightingalejuly.com^$popup
+||notifications-update.com^$popup
+||notifpushnext.net^$popup
+||notifpushnow.com^$popup
+||notifsendback.com^$popup
+||notiftravel.com^$popup
+||nougacoush.com^$popup
+||noughttrustthreshold.com^$popup
+||novechufa.xyz^$popup
+||november-lax.com^$popup
+||november-sin.com^$popup
+||novitrk7.com^$popup
+||novitrk8.com^$popup
+||nowaynoconvs.net^$popup
+||npcad.com^$popup
+||nreg.world^$popup
+||ns003.com^$popup
+||nsultingcoe.net^$popup
+||nsw2u.com^$popup
+||ntedmanahegaz.com^$popup
+||ntoftheusysia.info^$popup
+||ntoftheusysianedt.info^
+||ntsiwoulukdli.org^$popup
+||ntvpforever.com^$popup
+||nudgercoptine.life^$popup
+||nudgeworry.com^$popup
+||nuggetscrore.life^$popup
+||numbertrck.com^$popup
+||nurewsawaninc.info^$popup
+||nutaku.net/signup/$popup
+||nxthost-1.info^$popup
+||nxthost-2.info^$popup
+||nxtpsh.com^$popup
+||nyadra.com^$popup
+||nymphdate.com^$popup
+||o18.click^$popup
+||o333o.com^$popup
+||oackoubs.com^$popup
+||oalsauwy.net^$popup
+||oaphoace.net^$popup
+||oarsmenmytilid.uno^$popup
+||oataltaul.com^$popup
+||obduratecommence.com^$popup
+||obituaryfuneral.com^$popup
+||objectionsdomesticatednagging.com^$popup
+||oblongravenousgosh.com^$popup
+||oblongseller.com^$popup
+||obnarium.com^$popup
+||oboletcystin.website^$popup
+||obsessiondiscourteous.com^$popup
+||obsidiancutter.top^$popup
+||obtainadopteddeliberately.com^$popup
+||obtrusiveperhaps.com^$popup
+||occasionalstatusbella.com^$popup
+||oclaserver.com^$popup
+||ocmhood.com^$popup
+||octavianflingpod.com^$popup
+||oedroughl.xyz^$popup
+||oefanyorgagetn.info^$popup
+||ofeetles.pro^$popup
+||offaces-butional.com^$popup
+||offendwitnessedirresponsible.com^$popup
+||offergate-apps-pubrel.com^$popup
+||offernzshop.online^$popup
+||offershub.net^$popup
+||offerstrack.net^$popup
+||offersuperhub.com^$popup
+||officetablntry.org^$popup
+||officialbanisters.com^$popup
+||offshuppetchan.com^$popup
+||ofphanpytor.com^$popup
+||ofseedotom.com^$popup
+||oftenparttimebeen.com^$popup
+||oftheseveryh.org^$popup
+||oghqvffmnt.com^$popup
+||ogniicbnb.ru^$popup
+||ogtrk.net^$popup
+||ohrdsplu.com^$popup
+||ointmentfloatingsaucepan.com^$popup
+||okayfreemanknot.com^$popup
+||okksucr.com^$popup
+||okueroskynt.com^$popup
+||oldcwiamf.com^$popup
+||ologeysurincon.com^$popup
+||omciecoa37tw4.com^$popup
+||omgpm.com^$popup
+||omgt4.com^$popup
+||omgt5.com^$popup
+||omklefkior.com^$popup
+||omoahope.net^$popup
+||onad.eu^$popup
+||onatallcolumn.com^$popup
+||onclickads.net^$popup
+||onclickalgo.com^$popup
+||onclickclear.com^$popup
+||onclickgenius.com^$popup
+||onclickmax.com^$popup
+||onclickmega.com^$popup
+||onclickperformance.com^$popup
+||onclickprediction.com^$popup
+||onclicksuper.com^$popup
+||onclicktop.com^$popup
+||ondbarrowat.xyz^$popup
+||one-name-studio.com^$popup
+||oneadvupfordesign.com^$popup
+||oneclickpic.net^$popup
+||oneegrou.net^$popup
+||onenomadtstore.com^$popup
+||oneqanatclub.com^$popup
+||onesuns.com^$popup
+||onetouch12.com^$popup
+||onetouch19.com^$popup
+||onetouch20.com^$popup
+||onetouch22.com^$popup
+||onevenadvllc.com^$popup
+||onevenadvnow.com^$popup
+||ongoingverdictparalyzed.com^$popup
+||onhadintrepha.info^$popup
+||onhadintrephad.com^$popup
+||onhitads.net^$popup
+||online-deal.click^$popup
+||online-protection-now.com^$popup
+||online-user-protector.com^$popup
+||onlinecashmethod.com^$popup
+||onlinedeltazone.online^$popup
+||onlinefinanceworld.com^$popup
+||onlinepuonline.com^$popup
+||onlineshopping.website^$popup
+||onlineuserprotector.com^$popup
+||onmarshtompor.com^$popup
+||onstunkyr.com^$popup
+||onsukultingecauy.com^$popup
+||oodrampi.com^$popup
+||oodsotso.com^$popup
+||oopatet.com^$popup
+||openadserving.com^$popup
+||openerkey.com^$popup
+||openmindter.com^$popup
+||operarymishear.store^$popup
+||ophoacit.com^$popup
+||opoxv.com^$popup
+||opparasecton.com^$popup
+||opportunitysearch.net^$popup
+||opptmzpops.com^$popup
+||opskln.com^$popup
+||optimizesrv.com^$popup
+||optnx.com^$popup
+||optyruntchan.com^$popup
+||optzsrv.com^$popup
+||opus-whisky.com^$popup
+||oranegfodnd.com^$popup
+||orchestraanticipation.com^$popup
+||organsshinegarlic.com^$popup
+||orgassme.com^$popup
+||orhisseache.com.ua^$popup
+||orlowedonhisdhilt.info^$popup
+||ormolustuke.top^$popup
+||orthitepetrous.com^$popup
+||ortontotlejohn.com^$popup
+||osarmapa.net.^$popup
+||osarmapa.net^$popup
+||osiextantly.com^$popup
+||osmosewatch.top^$popup
+||ossmightyenar.net^$popup
+||ostlon.com^$popup
+||otherofherlittle.info^$popup
+||otisephie.com^$popup
+||otnolabttmup.com^$popup
+||otnolatrnup.com^$popup
+||ouldlikukemyfu.com^$popup
+||oungimuk.net^$popup
+||ourcommonnews.com^$popup
+||ourcommonstories.com^$popup
+||ourcoolposts.com^$popup
+||ourdailystories.com^$popup
+||ourhotfeed.com^$popup
+||ouryretyequirem.info^$popup
+||outaipoma.com^$popup
+||outdoeslegacy.uno^$popup
+||outgoingfan.pro^$popup
+||outhulem.net^$popup
+||outlineappearbar.com^$popup
+||outlookabsorb.com^$popup
+||outoctillerytor.com^$popup
+||outofthecath.org^$popup
+||ovdimin.buzz^$popup
+||overallfetchheight.com^$popup
+||ovogofteonafterw.info^$popup
+||ow5a.net^$popup
+||owingsorthealthy.com^$popup
+||owrkwilxbw.com^$popup
+||oxbbzxqfnv.com^$popup
+||oxfoadv.store^$popup
+||oxtsale1.com^$popup
+||oxydend2r5umarb8oreum.com^$popup
+||oyi9f1kbaj.com^$popup
+||ozongees.com^$popup
+||pa5ka.com^$popup
+||padp5arja8dgsd9cha.com^$popup
+||padsdel.com^$popup
+||paeastei.net^$popup
+||paikoasa.tv^$popup
+||palam2.com^$popup
+||palama2.co^$popup
+||palmmalice.com^$popup
+||palpablefungussome.com^$popup
+||palundrus.com^$popup
+||panicmiserableeligible.com^$popup
+||parachuteeffectedotter.com^$popup
+||paradiseannouncingnow.com^$popup
+||parallelgds.store^$popup
+||parchedscrew.pro^$popup
+||pardonsuccessionassassin.com^$popup
+||parentlargevia.com^$popup
+||paripartners.ru^$popup
+||parisjeroleinpg.com^$popup
+||parkcircularpearl.com^$popup
+||parkingridiculous.com^$popup
+||parrotwrapped.com^$popup
+||partsbury.com^$popup
+||partybikesharmless.com^$popup
+||passeura.com^$popup
+||passfixx.com^$popup
+||pasxfixs.com^$popup
+||patoionanrumand.com^$popup
+||patrondescendantprecursor.com^$popup
+||patronimproveyourselves.com^$popup
+||paxsfiss.com^$popup
+||paxxfiss.com^$popup
+||paymentsweb.org^$popup
+||payvclick.com^$popup
+||pclk.name^$popup
+||pctsrv.com^$popup
+||peachybeautifulplenitude.com^$popup
+||peacockshudder.com^$popup
+||pearledbolo.life^$popup
+||pearsissuedboob.com^$popup
+||pecialukizeias.info^$popup
+||peepacquisitionavalanche.com^$popup
+||peepholelandreed.com^$popup
+||peeredgerman.com^$popup
+||peethach.com^$popup
+||peezette-intial.com^$popup
+||pegirs.com^$popup
+||pegloang.com^$popup
+||pejzeexukxo.com^$popup
+||pemsrv.com^$popup
+||penholderlossfrontage.com^$popup
+||peopleloves.me^$popup
+||pepperyforeign.com^$popup
+||perceivedundesirable.com^$popup
+||pereliaastroid.com^$popup
+||perfecttoolmedia.com^$popup
+||performancetrustednetwork.com^$popup
+||periodpennavigation.com^$popup
+||perispro.com^$popup
+||perryvolleyball.com^$popup
+||pertersacstyli.com^$popup
+||pesime.xyz^$popup
+||peskyclarifysuitcases.com^$popup
+||petendereruk.com^$popup
+||pexu.com^$popup
+||pgmediaserve.com^$popup
+||phaurtuh.net^$popup
+||phenotypebest.com^$popup
+||phoognol.com^$popup
+||phosphatepossible.com^$popup
+||phu1aefue.com^$popup
+||phumpauk.com^$popup
+||pickaflick.co^$popup
+||pierisrapgae.com^$popup
+||pikepreviousi.com^$popup
+||pimlicoouranos.space^$popup
+||pinkyads.quest^$popup
+||pinremembrance.com^$popup
+||pipaffiliates.com^$popup
+||pipsol.net^$popup
+||pisism.com^$popup
+||pistolsizehoe.com^$popup
+||pitcatet.live^$popup
+||pitchedfurs.com^$popup
+||pitysuffix.com^$popup
+||piwhecyfo.pro^$popup
+||pixellitomedia.com^$popup
+||plainmarshyaltered.com^$popup
+||plaittest.com^$popup
+||planetarium-planet.com^$popup
+||planmybackup.co^$popup
+||planningunavoidablenull.com^$popup
+||planyourbackup.co^$popup
+||platitudezeal.com^$popup
+||playamopartners.com^$popup
+||playbook88a2.com^$popup
+||playeranyd.org^$popup
+||playerstrivefascinated.com^$popup
+||playerswhisper.com^$popup
+||playsdonkey.com^$popup
+||playstretch.host^$popup
+||playvideoclub.com^$popup
+||pleasetrack.com^$popup
+||plexop.net^$popup
+||plirkep.com^$popup
+||plsrcmp.com^$popup
+||pluckfigburst.com^$popup
+||pocofh.com^$popup
+||podefr.net^$popup
+||pointclicktrack.com^$popup
+||pointlimitedzen.online^$popup
+||pointroll.com^$popup
+||poisism.com^$popup
+||politicianbusplate.com^$popup
+||pollingsagacioustopple.com^$popup
+||pollstover.guru^$popup
+||pollutefurryapproximate.com^$popup
+||polyh-nce.com^$popup
+||pon-prairie.com^$popup
+||ponchowafesargb.com^$popup
+||ponk.pro^$popup
+||popads.net^$popup
+||popblockergold.info^$popup
+||popcash.net^$popup
+||popcornvod.com^$popup
+||popmyads.com^$popup
+||poponclick.com^$popup
+||popped.biz^$popup
+||populationrind.com^$popup
+||popunder.bid^$popup
+||popunderjs.com^$popup
+||popupblockergold.com^$popup
+||popwin.net^$popup
+||porlandzor.com^$popup
+||pornhb.me^$popup
+||poshsplitdr.com^$popup
+||positivelyoverall.com^$popup
+||possessionaddictedflight.com^$popup
+||post-redirecting.com^$popup
+||postaffiliatepro.com^$popup,third-party
+||postlnk.com^$popup
+||potawe.com^$popup
+||potpourrichordataoscilloscope.com^$popup
+||potsaglu.net^$popup
+||potskolu.net^$popup
+||pp98trk.com^$popup
+||practicallyfire.com^$popup
+||practicepeter.com^$popup
+||prawnsimply.com^$popup
+||prdredir.com^$popup
+||precedechampion.com^$popup
+||precedentadministrator.com^$popup
+||precedentbasepicky.com^$popup
+||preciousbearer.com^$popup
+||predicamentdisconnect.com^$popup
+||predictiondexchange.com^$popup
+||predictiondisplay.com^$popup
+||predictionds.com^$popup
+||predictivadnetwork.com^$popup
+||predictivadvertising.com^$popup
+||predictivdisplay.com^$popup
+||predirect.net^$popup
+||premium-members.com^$popup
+||premium4kflix.top^$popup
+||premium4kflix.website^$popup
+||premiumaffi.com^$popup
+||premonitioninventdisagree.com^$popup
+||preoccupycommittee.com^$popup
+||presidentscaredlow.com^$popup
+||press-here-to-continue.com^$popup
+||pressingequation.com^$popup
+||pressyour.com^$popup
+||prevailinsolence.com^$popup
+||prevalentprincess.com^$popup
+||preventionconsciousflea.com^$popup
+||prime-vpnet.com^$popup
+||primerclicks.com^$popup
+||princesinistervirus.com^$popup
+||privatedqualizebrui.info^$popup
+||privilegest.com^$popup
+||privilegesurround.com^$popup
+||prizes-topwin.life^$popup
+||prizetopsurvey.top^$popup
+||prjcq.com^$popup
+||prmtracking.com^$popup
+||probationtoll.com^$popup
+||proceduresjeer.com^$popup
+||professionalswebcheck.com^$popup
+||professionalworthy.com^$popup
+||proffering.xyz^$popup
+||profi-para.com^$popup
+||profitablecpmgate.com^$popup
+||profitablegate.com^$popup
+||profitablegatetocontent.com^$popup
+||profitabletrustednetwork.com^$popup
+||promisingcigar.com^$popup
+||promo-bc.com^$popup
+||pronovosty.org^$popup
+||pronunciationspecimens.com^$popup
+||propadsviews.com^$popup
+||propbn.com^$popup
+||propellerads.com^$popup
+||propellerclick.com^$popup
+||propellerpops.com^$popup
+||propertyofnews.com^$popup
+||propertyprintervice.com^$popup
+||prosecutionsocktrap.com^$popup
+||proseoverlook.com^$popup
+||protect-your-privacy.net^$popup
+||prototypewailrubber.com^$popup
+||protrckit.com^$popup
+||provenshoutmidst.com^$popup
+||provocativeprivate.com^$popup
+||prpops.com^$popup
+||prtord.com^$popup
+||prtrackings.com^$popup
+||psaiceex.net^$popup
+||psaltauw.net^$popup
+||psaugourtauy.com^$popup
+||psma02.com^$popup
+||pssy.xyz^$popup
+||psychicbowel.com^$popup
+||psychologycircumvent.com^$popup
+||psychologydistinguishnest.com^$popup
+||ptistyvymi.com^$popup
+||ptongouh.net^$popup
+||ptwmjmp.com^$popup
+||pubdirecte.com^$popup
+||publisherads.click^$popup
+||publited.com^$popup
+||puddingamass.com^$popup
+||puffieralveloz.guru^$popup
+||puldhukelpmet.com^$popup
+||pulinkme.com^$popup
+||pulseonclick.com^$popup
+||punkfigured.com^$popup
+||punsong.com^$popup
+||pupilorgansmad.com^$popup
+||puppytestament.com^$popup
+||pupspu.com^$popup
+||pupur.net^$popup
+||pupur.pro^$popup
+||pureadexchange.com^$popup
+||purebrowseraddonedge.com^$popup
+||purpleads.io^$popup
+||purplewinds.xyz^$popup
+||pursuitnauseousinvalid.com^$popup
+||pushclk.com^$popup
+||pushking.net^$popup
+||pushmobilenews.com^$popup
+||pushub.net^$popup
+||pushwelcome.com^$popup
+||pussl3.com^$popup
+||pussl48.com^$popup
+||putfeablean.org^$popup
+||puwpush.com^$popup
+||pvclouds.com^$popup
+||pxx23jkd.com^$popup
+||pyq6n.com^$popup
+||q8ntfhfngm.com^$popup
+||qads.io^$popup
+||qamwm5o8dlgijte.com^$popup
+||qbnyeqylvynzy.top^$popup
+||qelllwrite.com^$popup
+||qertewrt.com^$popup
+||qksrv.cc^$popup
+||qksrv1.com^$popup
+||qr-captcha.com^$popup
+||qrlsx.com^$popup
+||qrprobopassor.com^$popup
+||qualitydating.top^$popup
+||quarrelaimless.com^$popup
+||quizsupportedchapel.com^$popup
+||quoo.eu^$popup
+||qxdownload.com^$popup
+||qz496amxfh87mst.com^$popup
+||r-tb.com^$popup
+||r3adyt0download.com^$popup
+||r3f.technology^$popup
+||racterdeet.com^$popup
+||radicalovertime.com^$popup
+||rafkxx.com^$popup
+||raijoolu.xyz^$popup
+||railroadfatherenlargement.com^$popup
+||rallantynethebra.com^$popup
+||rankpeers.com^$popup
+||raosmeac.net.^$popup
+||raosmeac.net^$popup
+||rapidhits.net^$popup
+||rapidhooray.com^$popup
+||razdvabm.com^$popup
+||rbxtrk.com^$popup
+||rdrm1.click^$popup
+||rdrsec.com^$popup
+||rdsrv.com^$popup
+||rdtk.io^$popup
+||readserv.com^$popup
+||readyblossomsuccesses.com^$popup
+||realfinanceblogcenter.com^$popup
+||realmsham.com^$popup
+||realsh.xyz^$popup
+||realsrv.com^$popup
+||realtime-bid.com^$popup
+||reaseinprofitstefu.info^$popup
+||rebrew-foofteen.com^$popup
+||recalledcosmeticostentatious.com^$popup
+||recedewell.com^$popup
+||recentrecentturf.com^$popup
+||recessioncomply.com^$popup
+||rechanque.com^$popup
+||reciteimplacablepotato.com^$popup
+||reclod.com^$popup
+||recodetime.com^$popup
+||recommendedseizedbewildered.com^$popup
+||recompensecombinedlooks.com^$popup
+||record.commissionkings.ag^$popup
+||record.rizk.com^$popup
+||recyclinganewupdated.com^$popup
+||recyclingbees.com^$popup
+||red-direct-n.com^$popup
+||redeemcodes.me^$popup
+||redic.net^$popup
+||redic2.net^$popup
+||redic4.com^$popup
+||redic5.xyz^$popup
+||redic6.site^$popup
+||redij.online^$popup
+||redir4.net^$popup
+||redir9.net^$popup
+||redirect-ads.com^$popup
+||redirect-path1.com^$popup
+||redirecting7.eu^$popup
+||redirectlinker.com^$popup
+||redirectvoluum.com^$popup
+||rednewly.com^$popup
+||redrotou.net^$popup
+||redwingmagazine.com^$popup
+||refdomain.info^$popup
+||referredscarletinward.com^$popup
+||refoundvips.com^$popup
+||refpa.top^$popup
+||refpa1364493.top^$popup
+||refpabuyoj.top^$popup
+||refpaikgai.top^$popup
+||refpasrasw.world^$popup
+||refpazcx.xyz^$popup
+||refundsreisner.life^$popup
+||refutationtiptoe.com^$popup
+||regardedsaid.com^$popup
+||regulushamal.top^$popup
+||rehvbghwe.cc^$popup
+||rejco3.site^$popup
+||rekipion.com^$popup
+||relateimpulse.com^$popup
+||reliablemore.com^$popup
+||relievedgeoff.com^$popup
+||reloadsusa.com^$popup
+||remarkablehorizontallywaiter.com^$popup
+||remaysky.com^$popup
+||remembergirl.com^$popup
+||reminews.com^$popup
+||renownsimultaneouslyunresolved.com^$popup
+||rentalrebuild.com^$popup
+||rentingimmoderatereflecting.com^$popup
+||repayrotten.com^$popup
+||repellentcenturiespersevere.com^$popup
+||repentbits.com^$popup
+||replacestuntissue.com^$popup
+||reprintvariousecho.com^$popup
+||reproductiontape.com^$popup
+||reqdfit.com^$popup
+||reroplittrewheck.pro^$popup
+||resetenhancementsillegal.com^$popup
+||residelikingminister.com^$popup
+||residenceseeingstanding.com^$popup
+||resistshy.com^$popup
+||responsiverender.com^$popup
+||resterent.com^$popup
+||restorationbowelsunflower.com^$popup
+||restorationpencil.com^$popup
+||resuelveacc.es^$popup
+||retortedstray.com^$popup
+||revenuenetwork.com^$popup
+||reviewedreads.com^$popup
+||revimedia.com^$popup
+||revoketypes.com^$popup
+||revolvemockerycopper.com^$popup
+||revulsionwash.com^$popup
+||rewardrush.life^$popup
+||rewardtk.com^$popup
+||rewqpqa.link.^$popup
+||rewqpqa.link^$popup
+||rewqpqa.net.^$popup
+||rewqpqa.net^$popup
+||rewqpqa.org.^$popup
+||rewqpqa.org^$popup
+||rexsrv.com^$popup
+||rhudsplm.com^$popup
+||rhvdsplm.com^$popup
+||rhxdsplm.com^$popup
+||ridgephysique.com^$popup
+||rigelbetelgeuse.t^$popup
+||rigelbetelgeuse.top^$popup
+||rightypulverizetea.com^$popup
+||rigiddepth.com^$popup
+||ringexpressbeach.com^$popup
+||ringsempty.com^$popup
+||rinsermouton.space^$popup
+||riotousunspeakablestreet.com^$popup
+||riowrite.com^$popup
+||ripevibratevilla.com^$popup
+||riscati.com^$popup
+||risentimaddress.com^$popup
+||riverhit.com^$popup
+||rmaticalacm.info^$popup
+||rndhaunteran.com^$popup
+||rndmusharnar.com^$popup
+||rndskittytor.com^$popup
+||rnmentoftheusys.info^$popup
+||roaddataay.live^$popup
+||roadmappenal.com^$popup
+||robflea.com^$popup
+||rocketmedia24.com^$popup,third-party
+||rockstorageplace.com^$popup
+||rog4.com^$popup
+||rollmeout.xyz^$popup
+||romanlicdate.com^$popup
+||romivapsi.com^$popup
+||rootzaffiliates.com^$popup
+||rosafun.com^$popup
+||rosymap.pro^$popup
+||rosyruffian.com^$popup
+||rotumal.com^$popup
+||roudoduor.com^$popup
+||roulettebotplus.com^$popup
+||roundflow.net^$popup
+||routes.name^$popup
+||routgveriprt.com^$popup
+||roverinvolv.bid^$popup
+||rovno.xyz^$popup
+||royalcactus.com^$popup
+||rozamimo9za10.com^$popup
+||rsaltsjt.com^$popup
+||rsppartners.com^$popup
+||rtbsuperhub.com^$popup
+||rtbxnmhub.com^$popup
+||rtclx.com^$popup
+||rtmark.net^$popup
+||rtmladnew.com^$popup
+||rtpdn12.com^$popup
+||rtyznd.com^$popup
+||rubylife.go2cloud.org^$popup
+||rudderwebmy.com^$popup
+||rufflycouncil.com^$popup
+||rulefloor.com^$popup
+||rummagemason.com^$popup
+||runecrispin.com^$popup
+||runesmith.top^$popup
+||runicmaster.top^$popup
+||runslin.com^$popup
+||runtnc.net^$popup
+||russellseemslept.com^$popup
+||rusticsnoop.com^$popup
+||ruthproudlyquestion.top^$popup
+||rvrpushserv.com^$popup
+||s0cool.net^$popup
+||s20dh7e9dh.com^$popup
+||sabotageharass.com^$popup
+||safe-connection21.com^$popup
+||safestgatetocontent.com^$popup
+||sagedeportflorist.com^$popup
+||sakeoxidelunch.com^$popup
+||saktismberakes.space^$popup
+||saltpairwoo.live^$popup
+||samage-bility.icu^$popup
+||sarafpdu.com^$popup
+||sarcodrix.com^$popup
+||sardineforgiven.com^$popup
+||sasontnwc.net^$popup
+||saucepancharms.com^$popup
+||saulttrailwaysi.info^$popup
+||savouryadolescent.com^$popup
+||saycasksabnegation.com^$popup
+||scadstech.com^$popup
+||scalfebecky.digital^$popup
+||scenbe.com^$popup
+||schemeabsolutejanuary.com^$popup
+||score-feed.com^$popup
+||scoredconnect.com^$popup
+||screenov.site^$popup
+||sealthatleak.com^$popup
+||search4y.com^$popup
+||searchenhancements.com^$popup
+||searchmulty.com^$popup
+||searchsecurer.com^$popup
+||seatsrehearseinitial.com^$popup
+||secthatlead.com^$popup
+||secureclickers.com^$popup
+||securecloud-smart.com^$popup
+||securecloud-sml.com^$popup
+||secureclouddt-cd.com^$popup
+||securedcdn.com^$popup
+||securedsmcd.com^$popup
+||securegate9.com^$popup
+||securegfm.com^$popup
+||secureintl.com^$popup
+||secureleadsrn.com^$popup
+||securesmrt-dt.com^$popup
+||sedatecompulsiveout.com^$popup
+||sedatenerves.com^$popup
+||sednerenforbo.com^$popup
+||sedodna.com^$popup
+||seethisinaction.com^$popup
+||selfemployedbalconycane.com^$popup
+||sellingtandays.com^$popup
+||semilikeman.com^$popup
+||semqraso.net.^$popup
+||semqraso.net^$popup
+||senonsiatinus.com^$popup
+||senzapudore.it^$popup,third-party
+||seo-overview.com^$popup
+||separatecolonist.com^$popup
+||sereanstanza.com^$popup
+||serialwarning.com^$popup
+||sertfouder.com^$popup
+||serumlisp.com^$popup
+||serve-rtb.com^$popup
+||serve-servee.com^$popup
+||serve-serving.com^$popup
+||servehub.info^$popup
+||serverfritterdisability.com^$popup
+||serversmatrixaggregation.com^$popup
+||servicetechtracker.com^$popup
+||serving-passthrough.com^$popup
+||serving-sys.com^$popup
+||setupstronghighlyinfo-file.info^$popup
+||sex-and-flirt.com^$popup
+||sex-finder.net^$popup
+||sexfamilysim.net^$popup
+||sexpieasure.com^$popup
+||sexyepc.com^$popup
+||shadesentimentssquint.com^$popup
+||shadyobscene.com^$popup
+||shaggyaleswede.com^$popup
+||shaggyselectmast.com^$popup
+||shaisole.com^$popup
+||shamelessmessengerdescription.com^$popup
+||shamelessspank.com^$popup
+||shamtick.com^$popup
+||shapelcounset.xyz^$popup
+||sharpofferlinks.com^$popup
+||shbzek.com^$popup
+||she-want-fuck.com^$popup
+||sheepforgivedismount.com^$popup
+||sherouscolvered.com^$popup
+||sheschemetraitor.com^$popup
+||shestugele.pro^$popup
+||shinebliss.com^$popup
+||shoesonsale.online^$popup
+||shoopusahealth.com^$popup
+||shopeasy.by^$popup
+||shortfailshared.com^$popup
+||shortpixel.ai^$popup
+||shortssibilantcrept.com^$popup
+||shoubsee.net^$popup
+||show-me-how.net^$popup
+||showcasead.com^$popup
+||showcasethat.com^$popup
+||shrillwife.pro^$popup
+||sicknessfestivity.com^$popup
+||sidanarchy.com^$popup
+||sidebyx.com^$popup
+||sidebyz.com^$popup
+||sifuglie.com^$popup
+||significantoperativeclearance.com^$popup
+||sillinessinterfere.com^$popup
+||similarwebline.com^$popup
+||similedy.xyz^$popup
+||simple-isl.com^$popup
+||sindatontherrom.com^$popup
+||singelstodate.com^$popup
+||singlesexdates.com^$popup
+||singlewomenmeet.com^$popup
+||siriusprocyon.top^$popup
+||sissonetanquam.website^$popup
+||siteforyou1d.com^$popup
+||sitpactrip.live^$popup
+||sixft-apart.com^$popup
+||skiptheadz.net^$popup
+||skipthemadz.info^$popup
+||skouns.club^$popup
+||skymobi.agency^$popup
+||slashstar.net^$popup
+||sledimitationsegment.com^$popup
+||sleevemisuseadvice.com^$popup
+||slidbecauseemerald.com^$popup
+||slidecaffeinecrown.com^$popup
+||slideff.com^$popup
+||slikslik.com^$popup
+||slimfiftywoo.com^$popup
+||slimspots.com^$popup
+||slipdashedundermine.com^$popup
+||slipperydeliverance.com^$popup
+||sloto.live^$popup
+||slowww.xyz^$popup
+||sltracl.com^$popup
+||smallfunnybears.com^$popup
+||smart-url.net^$popup
+||smart-wp.com^$popup
+||smartadtags.com^$popup
+||smartapplifly.com^$popup
+||smartappsfly.com^$popup
+||smartcj.com^$popup
+||smartmnews.pro^$popup
+||smarttds.org^$popup
+||smarttopchain.nl^$popup
+||smentbrads.info^$popup
+||smg8oo4njst45oene.com^$popup
+||smoulderhangnail.com^$popup
+||smrt-content.com^$popup
+||smrtgs.com^$popup
+||smrtsecure-eml.com^$popup
+||smugglesideways.com^$popup
+||snammar-jumntal.com^$popup
+||snapcheat16s.com^$popup
+||snappedimpressive.com^$popup
+||snoreempire.com^$popup
+||snoresslighty.uno^$popup
+||snowads.net^$popup,third-party
+||snowdayonline.xyz^$popup
+||snugglethesheep.com^$popup
+||snugslackmakeup.com^$popup
+||sobakenchmaphk.com^$popup
+||soccertakeover.com^$popup
+||sofinpushpile.com^$popup
+||softballcreeperamuse.com^$popup
+||softonixs.xyz^$popup
+||soilgnaw.com^$popup
+||soksicme.com^$popup
+||solaranalytics.org^$popup
+||soldierreproduceadmiration.com^$popup
+||solemik.com^$popup
+||solemnvine.com^$popup
+||soliads.net^$popup
+||solispartner.com^$popup
+||solvingcue.com^$popup
+||someonein.org^$popup
+||soninlawfaceconfide.com^$popup
+||sonioubemeal.com^$popup
+||soocaips.com^$popup
+||sorrowfulclinging.com^$popup
+||sorrycarboncolorful.com^$popup
+||sorryparlor.com^$popup
+||sortyellowapples.com^$popup
+||sotchoum.com^$popup
+||soulsglovesacid.com^$popup
+||soundelktemper.com^$popup
+||sousefulhead.com^$popup
+||souvenirsflex.com^$popup
+||spacetraff.com^$popup
+||spankdrearystroll.com^$popup
+||sparkstudios.com^$popup
+||sparta-tracking.xyz^$popup
+||spatterjointposition.com^$popup
+||spdate.com^$popup
+||speakspurink.com^$popup
+||special-offers.online^$popup
+||special-promotions.online^$popup
+||special-trending-news.com^$popup
+||specialisthuge.com^$popup
+||specialityharmoniousgypsy.com^$popup
+||speednetwork14.com^$popup
+||speedsupermarketdonut.com^$popup
+||spellingunacceptable.com^$popup
+||spendcrazy.net^$popup
+||sperans-beactor.com^$popup
+||spicygirlshere.life^$popup
+||spinalmultiple.com^$popup
+||spinsterremnantstooped.com^$popup
+||spirtlekurt.digital^$popup
+||spklmis.com^$popup
+||spo-play.live^$popup
+||spongemilitarydesigner.com^$popup
+||sport-play.live^$popup
+||sportfocal.com^$popup
+||sports-streams-online.best^$popup
+||sports-tab.com^$popup
+||spotofspawn.com^$popup
+||spotscenered.info^$popup
+||sptrkr.com^$popup
+||squarepicket.com^$popup
+||sr7pv7n5x.com^$popup
+||srtrak.com^$popup
+||srv2trking.com^$popup
+||srvpcn.com^$popup
+||srvpub.com^$popup
+||ssdwellsgrpo.info^$popup
+||ssllink.net^$popup
+||st-rdirect.com^$popup
+||st1net.com^$popup
+||staaqwe.com^$popup
+||stacckain.com^$popup
+||stammerail.com^$popup
+||starewhupsu.pro^$popup
+||starhourfit.live^$popup
+||starmobmedia.com^$popup
+||starry-galaxy.com^$popup
+||start-xyz.com^$popup
+||startd0wnload22x.com^$popup
+||stateinformatics.com^$popup
+||statestockingsconfession.com^$popup
+||statistic-data.com^$popup
+||statsmobi.com^$popup
+||statueofthe.info^$popup
+||stawhoph.com^$popup
+||steamlargelyjustified.com^$popup
+||stenadewy.pro^$popup
+||sthoutte.com^$popup
+||stickervillain.com^$popup
+||stigmuuua.xyz^$popup
+||stimaariraco.info^$popup
+||stinglackingrent.com^$popup
+||stoagergu.com^$popup
+||stoaltoa.top^$popup
+||stoorgel.com^$popup
+||stop-adblocker.info^$popup
+||stopadblocker.com^$popup
+||stopadzblock.net^$popup
+||stopblockads.com^$popup
+||storader.com^$popup
+||stovecharacterize.com^$popup
+||strainemergency.com^$popup
+||stream-all.com^$popup
+||streamsearchclub.com^$popup
+||streamyourvid.com^$popup
+||strenuoustarget.com^$popup
+||strettechoco.com^$popup
+||strictgrittwine.com^$popup
+||strtgic.com^$popup
+||strungcourthouse.com^$popup
+||studiocustomers.com^$popup
+||stuffedodiousmargin.com^$popup
+||stumbleirritable.com^$popup
+||stvkr.com^$popup
+||subscriptioneccentric.com^$popup
+||subsidehurtful.com^$popup
+||suggest-recipes.com^$popup
+||sulkvulnerableexpecting.com^$popup
+||sulseerg.com^$popup
+||sumbreta.com^$popup
+||summaryvalued.com^$popup
+||summercovert.com^$popup
+||summitmanner.com^$popup
+||sunflowerbright106.io^$popup
+||sunglassesmentallyproficient.com^$popup
+||sunnyseries.com^$popup
+||superadexchange.com^$popup
+||superfastcdn.com^$popup
+||superfasti.co^$popup
+||supermanpunchchanges.com^$popup
+||supersedeforbes.com^$popup
+||superssp.top^$popup
+||suppliedhopelesspredestination.com^$popup
+||supremeadblocker.com^$popup
+||supremoadblocko.com^$popup
+||suptraf.com^$popup
+||suptrkdisplay.com^$popup
+||surelyconvinced.com^$popup
+||surfacesaroselozenge.com^$popup
+||surge.systems^$popup
+||surrogatelithe.com^$popup
+||surroundingsliftingstubborn.com^$popup
+||surveyonline.top^$popup
+||surveyspaid.com^$popup
+||suspendedflesh.com^$popup
+||sutaiocuppas.com^$popup
+||swagtraffcom.com^$popup
+||swaycomplymishandle.com^$popup
+||sweaty-garage.pro^$popup
+||sweepfrequencydissolved.com^$popup
+||sxlflt.com^$popup
+||sympatheticfling.com^$popup
+||syncedvision.com^$popup
+||syringeitch.com^$popup
+||syrsple2se8nyu09.com^$popup
+||systeme-business.online^$popup
+||systemleadb.com^$popup
+||szqxvo.com^$popup
+||t2lgo.com^$popup
+||ta5ast2ffeyvhjitde.com^$popup
+||tabfloor.com^$popup
+||tabledownstairsprovocative.com^$popup
+||tadsbelver.com^$popup
+||taembed.com^$popup
+||taghaugh.com^$popup
+||tagsd.com^$popup
+||takecareproduct.com^$popup
+||takelnk.com^$popup
+||takemyorder.co^$popup
+||takeyouforward.co^$popup
+||takeyourpresent.life^$popup
+||tallysaturatesnare.com^$popup
+||tapdb.net^$popup
+||tapingdynasty.com^$popup
+||tapinvited.com^$popup
+||taprtopcldfa.co^$popup
+||taprtopcldfard.co^$popup
+||taprtopcldfb.co^$popup
+||taroads.com^$popup
+||tausoota.xyz^
+||tchinaprecenta.info^$popup
+||tczzzlwpss.com^$popup
+||td563.com^$popup
+||tdspa.top^$popup
+||tearingdubnought.com^$popup
+||tearingreasoningempower.com^$popup
+||tearsincompetentuntidy.com^$popup
+||techiteration.com^$popup
+||techreviewtech.com^$popup
+||teddynineteenthpreoccupation.com^$popup
+||teenyreligious.com^$popup
+||telegramsit.com^$popup
+||telyn610zoanthropy.com^$popup
+||temksrtd.net.^$popup
+||temksrtd.net^$popup
+||temperrunnersdale.com^$popup
+||tencableplug.com^$popup
+||tendencysanction.com^$popup
+||tenthgiven.com^$popup
+||terbit2.com^$popup
+||terraclicks.com^$popup
+||terralink.xyz^$popup
+||tfaln.com^$popup
+||tffkroute.com^$popup
+||tfiph.com^$popup
+||tgars.com^$popup
+||thanosofcos5.com^$popup
+||thaoheakolons.info^$popup
+||thatincidentwad.com^$popup
+||thaudray.com^$popup
+||the-binary-trader.biz^$popup
+||thearoids.com^$popup
+||thebestgame2020.com^$popup
+||thebigadsstore.com^$popup
+||thecarconnections.com^$popup
+||thechleads.pro^$popup
+||thechronicles2.xyz^$popup
+||thecloudvantnow.com^$popup
+||theepsie.com^$popup
+||theerrortool.com^$popup
+||theextensionexpert.com^$popup
+||thefacux.com^$popup
+||thencemutinyhamburger.com^$popup
+||therapypicnic.com^$popup
+||therelimitless.com^$popup
+||thereuponscare.com^$popup
+||thesafersearch.com^$popup
+||thetaweblink.com^$popup
+||thethesmah.xyz^$popup
+||thetoptrust.com^$popup
+||theusualsuspects.biz^$popup
+||theythourbonusgain.life^$popup
+||thinadmitted.com^$popup
+||thinkaction.com^$popup
+||thirawogla.com^$popup
+||thirdreasoncomplex.com^$popup
+||thirteenthadjectivecleaning.com^$popup
+||thirtyeducate.com^$popup
+||thisisyourprize.site^$popup
+||thofteert.com^$popup
+||threatotherwise.com^$popup
+||thunderous-request.pro^$popup
+||thygrepuwo.pro^$popup
+||ticalfelixstownru.info^$popup
+||tidalwavetrx.com^$popup
+||tidigrated.space^$popup
+||tidyingpreludeatonement.com^$popup
+||tignuget.net^$popup
+||tigrisbewray.life^$popup
+||tilttrk.com^$popup
+||tiltwin.com^$popup
+||timeoutwinning.com^$popup
+||timetablewearmatrix.com^$popup
+||timot-cvk.info^$popup
+||tingledpredy.com^$popup
+||tinsus.com^$popup
+||tintedparticular.com^$popup
+||tipcatscarola.com^$popup
+||tiprd.xyz^$popup
+||titanicmaximumlaboratory.com^$popup
+||titlerwilhelm.com^$popup
+||tjoomo.com^$popup
+||tl2go.com^$popup
+||tmb5trk.com^$popup
+||tmtrck.com^$popup
+||tmxhub.com^$popup
+||tncred.com^$popup
+||tnctrx.com^$popup
+||tnkexchange.com^$popup
+||todhamilton.pro^$popup
+||toiletapparel.com^$popup
+||tolrock.com^$popup
+||tombmeaning.com^$popup
+||tomladvert.com^$popup
+||tonefuse.com^$popup
+||tonicorchestra.com^$popup
+||tooaastandhei.info^$popup
+||top-offers1.com^$popup
+||top-performance.best^$popup
+||top-performance.club^$popup
+||top-performance.top^$popup
+||topadvdomdesign.com^$popup
+||topatincompany.com^$popup
+||topblockchainsolutions.nl^$popup
+||topclickguru.com^$popup
+||topdealad.com^$popup
+||topfdeals.com^$popup
+||topflownews.com^$popup
+||toprevenuegate.com^$popup
+||topscan-mca.click^$popup
+||toroadvertisingmedia.com^$popup
+||torpsol.com^$popup
+||torrent-protection.com^$popup
+||torrentsafeguard.com^$popup
+||tosssix.com^$popup
+||totadblock.com^$popup
+||totalab.online^$popup
+||totalactualnewz.com^$popup
+||totaladblock.com^$popup
+||totaladperformance.com^$popup
+||totalnicefeed.com^$popup
+||totalwownews.com^$popup
+||totlnkcl.com^$popup
+||tougherrancor.website^$popup
+||touroumu.com^$popup
+||towardsturtle.com^$popup
+||tozoruaon.com^$popup
+||tpmr.com^$popup
+||tpopularcldfa.co^$popup
+||tpopularcldfb.co^$popup
+||tr-boost.com^$popup
+||tr-monday.xyz^$popup
+||tr-rollers.xyz^$popup
+||tr-usual.com^$popup
+||trabinarnizies.com^$popup
+||track-campaing.club^$popup
+||track-safe.com^$popup
+||track-victoriadates.com^$popup
+||track.totalav.com^$popup
+||track.wargaming-aff.com^$popup
+||track4ref.com^$popup
+||tracker-2.com^$popup
+||tracker-tds.info^$popup
+||tracker19875.space^$popup
+||tracker2.space^$popup
+||trackerx.ru^$popup
+||trackeverything.co^$popup
+||trackingrouter.com^$popup
+||trackingshub.com^$popup
+||trackingtraffo.com^$popup
+||trackmundo.com^$popup
+||trackpshgoto.win^$popup
+||tracks20.com^$popup
+||tracksfaster.com^$popup
+||trackstracker.com^$popup
+||tracksystem.online^$popup
+||tracktds.com^$popup
+||tracktilldeath.club^$popup
+||tracktraf.com^$popup
+||trackwilltrk.com^$popup
+||trackytrack02.com^$popup
+||tracot.com^$popup
+||traff0221.com^$popup
+||traff0521.com^$popup
+||traffic-c.com^$popup
+||traffic.name^$popup
+||trafficbass.com^$popup
+||trafficborder.com^$popup
+||trafficdok.com^$popup
+||trafficforce.com^$popup
+||traffichaus.com^$popup
+||traffichunt.com^$popup
+||trafficinvest.com^$popup
+||trafficlide.com^$popup
+||trafficmediaareus.com^$popup
+||trafficmoon.com^$popup
+||trafficmoose.com^$popup
+||trafforsrv.com^$popup
+||traffrout.com^$popup
+||trafyield.com^$popup
+||tragicbeyond.com^$popup
+||trakaff.net^$popup
+||traktrafficflow.com^$popup
+||trandlife.info^$popup
+||transformationwrecking.com^$popup
+||transmitterincarnatebastard.com^$popup
+||trapexpansionmoss.com^$popup
+||trck.wargaming.net^$popup
+||trcklks.com^$popup
+||trcyrn.com^$popup
+||treasureravenvulgar.com^$popup
+||trellian.com^$popup
+||tremendous-tour.pro^$popup
+||trftopp.biz^$popup
+||tributesexually.com^$popup
+||trifletonightanguish.com^$popup
+||triggerfrontagefaultless.com^$popup
+||triggersinclude.com^$popup
+||trilema.com^$popup
+||triumphantfreelance.com^$popup
+||triumphantplace.com^$popup
+||trk-access.com^$popup
+||trk-vod.com^$popup
+||trk3000.com^$popup
+||trk301.com^$popup
+||trkbng.com^$popup
+||trkings.com^$popup
+||trklnks.com^$popup
+||trknk.com^$popup
+||trlxcf05.com^$popup
+||trmobc.com^$popup
+||tropbikewall.art^$popup
+||trotletekphore.com^$popup
+||trpop.xyz^$popup
+||trust.zone^$popup
+||trustedcpmrevenue.com^$popup
+||trustedgatetocontent.com^$popup
+||trustedpeach.com^$popup
+||trustedstream.life^$popup
+||trustedzone.info^$popup
+||trustyable.com^$popup
+||truthtraff.com^$popup
+||truthwassadl.org^$popup
+||trw12.com^$popup
+||trythe-letsketos.com^$popup
+||tseywo.com^$popup
+||tship1623.com^$popup
+||tsml.fun^$popup
+||tsyndicate.com^$popup
+||ttoc8ok.com^$popup
+||tubeadvertising.eu^$popup
+||tubecup.net^$popup
+||tubroaffs.org^$popup
+||tuffoonincaged.com^$popup
+||tuitionpancake.com^$popup
+||tundrafolder.com^$popup
+||tuneshave.com^$popup
+||turbotrck.art^$popup
+||turnhub.net^$popup
+||turnnagin.live^$popup
+||tutvp.com^$popup
+||tvas-b.pw^$popup
+||tweakostensibleinstaller.com^$popup
+||twentiethparticipation.com^$popup
+||twerwew.org.^$popup
+||twerwew.org^$popup
+||twigstandardexcursion.com^$popup
+||twinfill.com^$popup
+||twinkle-fun.net^$popup
+||twinklecourseinvade.com^$popup
+||twinrdsrv.com^$popup
+||twinrdsyn.com^$popup
+||twinstanglebroken.com^$popup
+||txzaazmdhtw.com^$popup
+||tychon.bid^$popup
+||typerealisepredict.com^$popup
+||tyranbrashore.com^$popup
+||tyrotation.com^$popup
+||tyserving.com^$popup
+||u1pmt.com^$popup
+||ubilinkbin.com^$popup
+||ucconn.live^$popup
+||ucheephu.com^$popup
+||udncoeln.com^$popup
+||uel-uel-fie.com^$popup
+||ufinkln.com^$popup
+||ufpcdn.com^$popup
+||ugekq.icu^$popup
+||ugroocuw.net^$popup
+||uhpdsplo.com^$popup
+||uidhealth.com^$popup
+||uidhome.com^$popup
+||uitopadxdy.com^$popup
+||ukeesait.top^$popup
+||ukoffzeh.com^$popup
+||uktureukworekto.com^$popup
+||ultimate-captcha.com^$popup
+||ultracdn.top^$popup
+||ultralove.net^$popup
+||ultrapartners.com^$popup
+||ultravpnoffers.com^$popup
+||ultrlove.com^$popup
+||unairazoads.com^$popup
+||unawar.com^$popup
+||unbalterce.com^$popup
+||unbeedrillom.com^$popup
+||unblockedapi.com^$popup
+||unclesnewspaper.com^$popup
+||undergosermon.com^$popup
+||understoodreceivermisunderstand.com^$popup
+||undertakingaisle.com^$popup
+||underwearsourorb.com^$popup
+||unfaithfulmakeryearly.com^$popup
+||unforgivablegrowl.com^$popup
+||unhappyporkform.com^$popup
+||unicornpride123.com^$popup
+||unmistdistune.guru^$popup
+||unreshiramor.com^$popup
+||unseenrazorcaptain.com^$popup
+||unskilfulwalkerpolitician.com^$popup
+||unspeakablepurebeings.com^$popup
+||untimburra.com^$popup
+||unusualbrainlessshotgun.com^$popup
+||unwoobater.com^$popup
+||upcurlsreid.website^$popup
+||updatecompletelyfreetheproduct.vip^$popup
+||updateenow.com^$popup
+||updatephone.club^$popup
+||upgliscorom.com^$popup
+||uphewoab.net^$popup
+||uphillgrandmaanger.com^$popup
+||uponelectabuzzor.club^$popup
+||uptimecdn.com^$popup
+||uptopopunder.com^$popup
+||urtyert.com^$popup
+||usefulcreatebid.com^$popup
+||uselnk.com^$popup
+||usenetnl.download^$popup
+||utarget.ru^$popup
+||uthorner.info^$popup
+||utilitypresent.com^$popup
+||utlservice.com^$popup
+||utm-campaign.com^$popup
+||utndln.com^$popup
+||utopicmobile.com^$popup
+||utrinterrommo.com^$popup
+||uuhvungdag.com^$popup
+||uuksehinkitwkuo.com^$popup
+||v6rxv5coo5.com^$popup
+||vaithodo.com^$popup
+||vaitotoo.net^$popup
+||valeuceplangka.com^$popup
+||valuationbothertoo.com^$popup
+||vanenow.com^$popup
+||variationaspenjaunty.com^$popup
+||vasstycom.com^$popup
+||vasteeds.net^$popup
+||vavilisys.com^$popup
+||vax-now.com^$popup
+||vcdc.com^$popup
+||vcommission.com^$popup
+||veepteero.com^$popup
+||veilsuccessfully.com^$popup
+||veinnotionmariner.com^$popup
+||velocitycdn.com^$popup
+||vengeful-egg.com^$popup
+||venturead.com^$popup
+||verandahcrease.com^$popup
+||verblife-2.co^$popup
+||verblife-5.co^$popup
+||vergi-gwc.com^$popup
+||verooperofthewo.com^$popup
+||versionlatticecheek.com^$popup
+||vertoz.com^$popup
+||vespymedia.com^$popup
+||vfghc.com^$popup
+||vfgtb.com^$popup
+||vfgte.com^$popup
+||vfgtg.com^$popup
+||viapawniarda.com^$popup
+||viatepigan.com^$popup
+||victoryslam.com^$popup
+||video-adblocker.pro^$popup
+||videoadblocker.pro^$popup
+||videoadblockerpro.com^$popup
+||videocampaign.co^$popup
+||viewlnk.com^$popup
+||viiapps.com^$popup
+||viibill.com^$popup
+||viicasu.com^$popup
+||viidan.com^$popup
+||viidirectory.com^$popup
+||viienetik.com^$popup
+||viiithia.com^$popup
+||viiithie.com^$popup
+||viiithinks.com^$popup
+||viikttcq.com^$popup
+||viimobile.com^$popup
+||viimsa.com^$popup
+||viinsdap.com^$popup
+||viinset.com^$popup
+||viipurakit.com^$popup
+||viipurambe.com^$popup
+||viipurin.com^$popup
+||viipuris.com^$popup
+||viiqqou.com^$popup
+||viirsons.com^$popup
+||viisemblin.com^$popup
+||viispan.com^$popup
+||viiturn.com^$popup
+||viiucwwa.com^$popup
+||viizuusa.com^$popup
+||violationphysics.click^$popup
+||vionito.com^$popup
+||vipcpms.com^$popup
+||viralcpm.com^$popup
+||virginyoungestrust.com^$popup
+||virtuous-father.pro^$popup
+||visaspecialtyfluid.com^$popup
+||visibilitymondaydisappeared.com^$popup
+||visit-website.com^$popup
+||visitplaywrightlyrical.com^$popup
+||visitstats.com^$popup
+||visors-airminal.com^$popup
+||vkcdnservice.com^$popup
+||vkgtrack.com^$popup
+||vodobyve.pro^$popup
+||vogulprecast.com^$popup
+||voices-kerence.com^$popup
+||vokut.com^$popup
+||volcanoimplement.com^$popup
+||voluumtrk.com^$popup
+||voluumtrk3.com^$popup
+||vooshagy.net^$popup
+||voxfind.com^$popup
+||vpn-offers.org^$popup
+||vpnfortorrents.biz^$popup
+||vpnfortorrents.cc^$popup
+||vpnlist.to^$popup
+||vpnoffers.cc^$popup
+||vpnoffers.net^$popup
+||vprtrfc.com^$popup
+||vq40567.com^$popup
+||vs3.com^$popup
+||vupowe.xyz^$popup
+||vxzcvks.net.^$popup
+||vxzcvks.net^$popup
+||vxzcvks.org.^$popup
+||vxzcvks.org^$popup
+||vyebzzbovvzvl.top^$popup
+||wackeerd.com^$popup
+||wadmargincling.com^$popup
+||waframedia5.com^$popup
+||wahoha.com^$popup
+||waisheph.com^$popup
+||wakifyeld.uno^$popup
+||walkinggrandparents.com^$popup
+||walknotice.com^$popup
+||walter-larence.com^$popup
+||warehousecanneddental.com^$popup
+||wargaming-aff.com^$popup
+||warilyaggregation.com^$popup
+||warilycommercialconstitutional.com^$popup
+||warkop4dx.com^$popup
+||warten-sie-mal.xyz^$popup
+||washinexhaustible.com^$popup
+||waspishamendbulb.com^$popup
+||wasqimet.net.^$popup
+||wasqimet.net^$popup
+||wastedinvaluable.com^$popup
+||wasverymuch.info^$popup
+||watch-now.club^$popup
+||watchadfree.info^$popup
+||watchadsfree.com^$popup
+||watchadzfree.com^$popup
+||watchcpm.com^$popup
+||watchesthereupon.com^$popup
+||watchfreeofads.com^$popup
+||watchlivesports4k.club^$popup
+||watchtaro.com^$popup
+||watchvideoplayer.com^$popup
+||waufooke.com^$popup
+||wbidder2.com^$popup
+||wbidder3.com^$popup
+||wbilvnmool.com^$popup
+||wboux.com^$popup
+||wbsadsdel.com^$popup
+||wbsadsdel2.com^$popup
+||wcitianka.com^$popup
+||wct.link^$popup
+||wdt9iaspfv3o.com^$popup
+||we-are-anon.com^$popup
+||wea5lkaf63loos8a.com^$popup
+||weaveradrenaline.com^$popup
+||weaverdispensepause.com^$popup
+||web-adblocker.com^$popup
+||web-guardian.xyz^$popup
+||webatam.com^$popup
+||webgains.com^$popup
+||webmedrtb.com^$popup
+||webpuppweb.com^$popup
+||websearchers.net^$popup
+||webteensyusa.com^$popup
+||webtrackerplus.com^$popup
+||wecouldle.com^$popup
+||wegoodsttr.com^$popup
+||welcomeneat.pro^$popup
+||welfarefit.com^$popup
+||weliketofuckstrangers.com^$popup
+||wellhello.com^$popup
+||wellnesszap.com^$popup
+||wendelstein-1b.com^$popup
+||weplayingttr.com^$popup
+||wg-aff.com^$popup
+||wgpartner.com^$popup
+||whairtoa.com^$popup
+||whampamp.com^$popup
+||whatisuptodaynow.com^$popup
+||whauchel.net^$popup
+||wheeshoo.net^$popup
+||wherevertogo.com^$popup
+||whipgos.com^$popup
+||whirlwindofnews.com^$popup
+||whiskerssituationdisturb.com^$popup
+||whistlingbeau.com^$popup
+||whitenoisenews.com^$popup
+||whodouth.net^$popup
+||wholedailyjournal.com^$popup
+||wholefreshposts.com^$popup
+||wholewowblog.com^$popup
+||whookroo.com^$popup
+||whoursie.com^$popup
+||whowhipi.net^$popup
+||whugesto.net^$popup
+||whulsaux.com^$popup
+||whyocafenet.space^$popup
+||wichtstoppit.space^$popup
+||widelygeneralizereptile.com^$popup
+||widow5blackfr.com^$popup
+||wifescamara.click^$popup
+||wigetmedia.com^$popup
+||wigglewurm.com^$popup
+||wildestelf.com^$popup
+||wilfridamendment.com^$popup
+||winbigdrip.life^$popup
+||windychinese.com^$popup
+||winfreeprize.online^$popup
+||winnersofvouchers.com^$popup
+||winningdotaltar.com^$popup
+||wiringcollectorguffaw.com^$popup
+||wiringsensitivecontents.com^$popup
+||wisehowronspar.com^$popup
+||wiseskullclever.store^$popup
+||wistfulassign.com^$popup
+||witalfieldt.com^$popup
+||withdrawcosmicabundant.com^$popup
+||withholdstandstill.com^$popup
+||withmefeyauknaly.com^$popup
+||wlafx4trk.com^$popup
+||woafoame.net^$popup
+||woffxxx.com^$popup
+||wokewhoki.pro^$popup
+||wolsretet.net.^$popup
+||wolsretet.net^$popup
+||wonder.xhamster.com^
+||wonderlandads.com^$popup
+||woodbeesdainty.com^$popup
+||woovoree.net^$popup
+||wordlockdown.com^$popup
+||workback.net^$popup
+||workervanewalk.com^$popup
+||worldfreshblog.com^$popup
+||worldtimes2.xyz^$popup
+||worriesteapotairborne.com^$popup
+||worthyrid.com^$popup
+||woukrkskillsom.info^$popup
+||wovensur.com^$popup
+||wowshortvideos.com^$popup
+||writeestatal.space^$popup
+||wrypassenger.com^$popup
+||wuqconn.com^$popup
+||wwija.com^$popup
+||wwow.xyz^$popup
+||wwowww.xyz^$popup
+||wwwpromoter.com^$popup
+||wwydakja.net.^$popup
+||wwydakja.net^$popup
+||wwydakja.org.^$popup
+||wwydakja.org^$popup
+||wxhiojortldjyegtkx.bid^$popup
+||wysyshypti.pro^$popup
+||x2tsa.com^$popup
+||xadsmart.com^$popup
+||xaxoro.com^$popup
+||xbidflare.com^$popup
+||xclicks.net^$popup
+||xeuswz.com^$popup
+||xijgedjgg5f55.com^$popup
+||xkarma.net^$popup
+||xliirdr.com^$popup
+||xlirdr.com^$popup
+||xlivrdr.com^$popup
+||xlviiirdr.com^$popup
+||xlviirdr.com^$popup
+||xml-api.online^$popup
+||xmlapiclickredirect.com^$popup
+||xmlrtb.com^$popup
+||xobr219pa.com^$popup
+||xstownrusisedp.info^$popup
+||xtendmedia.com^$popup
+||xxxnewvideos.com^$popup
+||xxxvjmp.com^$popup
+||xyztracking.net^$popup
+||y1jxiqds7v.com^$popup
+||yahuu.org^$popup
+||yavli.com^$popup
+||ybb-network.com^$popup
+||ybbserver.com^$popup
+||yearbookhobblespinal.com^$popup
+||yearlingpreferablyperiods.com^$popup
+||yeesshh.com^$popup
+||yeioreo.net.^$popup
+||yeioreo.net^$popup
+||yellow-resultsbidder.com^$popup
+||yellow-resultsbidder.org^$popup
+||yellowbahama.com^$popup
+||yestilokano.top^$popup
+||ygamey.com^$popup
+||yhbcii.com^$popup
+||yieldmanager.com^$popup
+||yieldtraffic.com^$popup
+||ylih6ftygq7.com^$popup
+||ym-a.cc^$popup
+||yodbox.com^$popup
+||yogacomplyfuel.com^$popup
+||yogadignified.com^$popup
+||yok.la^$popup,third-party
+||yolkhandledwheels.com^$popup
+||yonmasqueraina.com^$popup
+||yonsandileer.com^$popup
+||yophaeadizesave.com^$popup
+||your-sugar-girls.com^$popup
+||youradexchange.com^$popup
+||yourcommonfeed.com^$popup
+||yourcoolfeed.com^$popup
+||yourfreshposts.com^$popup
+||yourperfectdating.life^$popup
+||yourprivacy.icu^$popup
+||yourtopwords.com^$popup
+||ysesials.net^$popup
+||ytgzz.com^$popup
+||yukclick.me^$popup
+||yy8fgl2bdv.com^$popup
+||z5x.net^$popup
+||z7yru.com^$popup
+||zaglushkaaa.com^$popup
+||zapdescendant.com^$popup
+||zcode12.me^$popup
+||zebeaa.click^$popup
+||zedo.com^$popup
+||zeechumy.com^$popup
+||zeepartners.com^$popup
+||zenaps.com^$popup
+||zendplace.pro^$popup
+||zeroredirect1.com^$popup
+||zetaframes.com^$popup
+||zidapi.xyz^$popup
+||zikroarg.com^$popup
+||zirdough.net^$popup
+||ziziatramel.uno^$popup
+||zlink1.com^$popup
+||zlink2.com^$popup
+||zlink6.com^$popup
+||zlink8.com^$popup
+||zlink9.com^$popup
+||zlinkb.com^$popup
+||zlinkm.com^$popup
+||zlinkv.com^$popup
+||znqip.net^$popup
+||znqip.org^$popup
+||zog.link^$popup
+||zonupiza.com^$popup
+||zryydi.com^$popup
+||zscwdu.com^$popup
+||zugnogne.com^$popup
+||zunsoach.com^$popup
+||zuphaims.com^$popup
+||zwqzxh.com^$popup
+||zwtssi.com^$popup
+||zybrdr.com^$popup
+! url.rw popups
+||url.rw/*&a=$popup
+||url.rw/*&mid=$popup
+! IP addresses
+||130.211.$popup,third-party,domain=~in-addr.arpa
+||142.91.$popup,third-party,domain=~in-addr.arpa
+||142.91.159.$popup
+||142.91.159.107^$popup
+||142.91.159.127^$popup
+||142.91.159.136^$popup
+||142.91.159.139^$popup
+||142.91.159.146^$popup
+||142.91.159.147^$popup
+||142.91.159.164^$popup
+||142.91.159.169^$popup
+||142.91.159.179^$popup
+||142.91.159.220^$popup
+||142.91.159.223^$popup
+||142.91.159.244^$popup
+||143.244.184.39^$popup
+||146.59.223.83^$popup
+||158.247.208.$popup
+||158.247.208.115^$popup
+||172.255.6.$popup,third-party,domain=~in-addr.arpa
+||172.255.6.135^$popup
+||172.255.6.137^$popup
+||172.255.6.139^$popup
+||172.255.6.150^$popup
+||172.255.6.152^$popup
+||172.255.6.199^$popup
+||172.255.6.228^$popup
+||172.255.6.248^$popup
+||172.255.6.254^$popup
+||172.255.6.2^$popup
+||172.255.6.59^$popup
+||176.31.68.242^$popup
+||185.147.34.126^$popup
+||188.42.84.110^$popup
+||188.42.84.159^$popup
+||188.42.84.160^$popup
+||188.42.84.162^$popup
+||188.42.84.199^$popup
+||188.42.84.21^$popup
+||188.42.84.23^$popup
+||203.195.121.$popup
+||203.195.121.0^$popup
+||203.195.121.103^$popup
+||203.195.121.119^$popup
+||203.195.121.134^$popup
+||203.195.121.184^$popup
+||203.195.121.195^$popup
+||203.195.121.209^$popup
+||203.195.121.217^$popup
+||203.195.121.219^$popup
+||203.195.121.224^$popup
+||203.195.121.229^$popup
+||203.195.121.24^$popup
+||203.195.121.28^$popup
+||203.195.121.29^$popup
+||203.195.121.34^$popup
+||203.195.121.36^$popup
+||203.195.121.40^$popup
+||203.195.121.70^$popup
+||203.195.121.72^$popup
+||203.195.121.73^$popup
+||203.195.121.74^$popup
+||216.21.13.$popup,domain=~in-addr.arpa
+||23.109.150.101^$popup
+||23.109.150.208^$popup
+||23.109.248.$popup
+||23.109.248.129^$popup
+||23.109.248.130^$popup
+||23.109.248.135^$popup
+||23.109.248.139^$popup
+||23.109.248.149^$popup
+||23.109.248.14^$popup
+||23.109.248.174^$popup
+||23.109.248.183^$popup
+||23.109.248.247^$popup
+||23.109.248.29^$popup
+||23.109.82.$popup
+||23.109.82.104^$popup
+||23.109.82.119^$popup
+||23.109.82.173^$popup
+||23.109.82.44^$popup
+||23.109.82.74^$popup
+||23.109.87.$popup
+||23.109.87.101^$popup
+||23.109.87.118^$popup
+||23.109.87.123^$popup
+||23.109.87.127^$popup
+||23.109.87.139^$popup
+||23.109.87.14^$popup
+||23.109.87.15^$popup
+||23.109.87.182^$popup
+||23.109.87.192^$popup
+||23.109.87.213^$popup
+||23.109.87.217^$popup
+||23.109.87.42^$popup
+||23.109.87.47^$popup
+||23.109.87.71^$popup
+||23.109.87.74^$popup
+||34.102.137.201^$popup
+||35.227.234.222^$popup
+||35.232.188.118^$popup
+||5.45.79.15^$popup
+||51.178.195.171^$popup
+||51.195.115.102^$popup
+||51.89.115.13^$popup
+||88.42.84.136^$popup
+! IP Regex (commonly used, hax'd IP addresses)
+/^https?:\/\/(35|104)\.(\d){1,3}\.(\d){1,3}\.(\d){1,3}\//$popup,third-party
+! http://146.59.211.227/tsc/Zx0bagrCjuxP
+/^https?:\/\/146\.59\.211\.(\d){1,3}.*/$popup,third-party
+
+! *** easylist:easylist_adult/adult_adservers.txt ***
+||18naked.com^$third-party
+||4link.it^$third-party
+||777-partner.com^$third-party
+||777-partner.net^$third-party
+||777-partners.com^$third-party
+||777-partners.net^$third-party
+||777partner.com^$script,third-party
+||777partner.net^$third-party
+||777partners.com^$third-party
+||acmexxx.com^$third-party
+||adcell.de^$third-party
+||adextrem.com^$third-party
+||ads-adv.top^$third-party
+||adsession.com^$third-party
+||adsgangsta.com^$third-party
+||adshnk.com^$third-party
+||adsturn.com^$third-party
+||adult3dcomics.com^$third-party
+||adultforce.com^$third-party
+||adultsense.com^$third-party
+||aemediatraffic.com^$third-party
+||affiliaxe.com^$third-party
+||affiligay.net^$third-party
+||aipmedia.com^$third-party
+||all-about-tech.com^$third-party
+||allosponsor.com^$third-party
+||amateurhub.cam^$third-party
+||asiafriendfinder.com^$third-party
+||avfay.com^$third-party
+||awempire.com^$third-party
+||bcash4you.com^$third-party
+||beachlinkz.com^$third-party
+||betweendigital.com^$third-party
+||black6adv.com^$third-party
+||blackpics.net^$third-party
+||blossoms.com^$third-party
+||bookofsex.com^$third-party
+||brothersincash.com^$third-party
+||bumskontakte.ch^$third-party
+||caltat.com^$third-party
+||cam-lolita.net^$third-party
+||cam4flat.com^$third-party
+||camcrush.com^$third-party
+||camdough.com^$third-party
+||camduty.com^$third-party
+||cameraprive.com^$third-party
+||campartner.com^$third-party
+||camsense.com^$third-party
+||camsoda1.com^$third-party
+||cashthat.com^$third-party
+||cbmiocw.com^$third-party
+||chatinator.com^$third-party
+||citysex.com^$third-party
+||clickaine.com^$third-party
+||clipxn.com^$third-party
+||cross-system.com^$script,third-party
+||cwchmb.com^
+||cybernetentertainment.com^$third-party
+||daiporno.com^$third-party
+||datefunclub.com^$third-party
+||datetraders.com^$third-party
+||datexchanges.net^$third-party
+||datingadnetwork.com^$third-party
+||datingamateurs.com^$third-party
+||datingcensored.com^$third-party
+||datingidol.com^$third-party
+||debitcrebit669.com^$third-party
+||deecash.com^$third-party
+||demanier.com^$third-party
+||dematom.com^$third-party
+||digiad.co^$third-party
+||digitaldesire.com^$third-party
+||digreality.com^$third-party
+||directadvert.ru^$third-party
+||directchat.tv^$third-party
+||direction-x.com^$third-party
+||donstick.com^$third-party
+||dphunters.com^$third-party
+||drtladv.cc^
+||dtiserv2.com^$third-party
+||easyflirt.com^$third-party
+||eroadvertising.com^$third-party
+||erosadv.com^$third-party
+||erotikdating.com^$third-party
+||erotizer.info^$third-party
+||escortso.com^$third-party
+||euro4ads.de^$third-party
+||exchangecash.de^$third-party
+||exclusivepussy.com^$third-party
+||exoticads.com^$third-party
+||faceporn.com^$third-party
+||facetz.net^$third-party
+||fapality.com^$third-party
+||farrivederev.pro^$third-party
+||felixflow.com^$third-party
+||festaporno.com^$third-party
+||filexan.com^$third-party
+||findandtry.com^$third-party
+||flashadtools.com^$third-party
+||fleshcash.com^$third-party
+||fleshlightgirls.com^$third-party
+||flirt4e.com^$third-party
+||flirt4free.com^$third-party
+||flirtingsms.com^$third-party
+||fncash.com^$third-party
+||fncnet1.com^$third-party
+||freakads.com^$third-party
+||freeadultcomix.com^$third-party
+||freevideos24h.com^$third-party
+||freewebfonts.org^$third-party
+||frestacero.com^$third-party
+||frestime.com^$third-party
+||frivol-ads.com^$third-party
+||frtyh.com^$third-party
+||frutrun.com^$third-party
+||fuckbook.cm^$third-party
+||fuckbookdating.com^$third-party
+||fuckedbyme.com^$third-party
+||fuckermedia.com^$third-party
+||fuckyoucash.com^$third-party
+||fuelbuck.com^$third-party
+||g--o.info^$third-party
+||ganardineroreal.com^$third-party
+||gayxperience.com^$third-party
+||geofamily.ru^$third-party
+||getiton.com^$third-party
+||ggwcash.com^$third-party
+||golderotica.com^$third-party
+||hentai369.com^$third-party
+||hookupbucks.com^$third-party
+||hornymatches.com^$third-party
+||hornyspots.com^$third-party
+||hostave2.net^$third-party
+||hotsocials.com^$third-party
+||hubtraffic.com^$third-party
+||icebns.com^$third-party
+||icetraffic.com^$third-party
+||idolbucks.com^$third-party
+||ifrwam.com^$third-party
+||iheartbucks.com^$third-party
+||ilovecheating.com^$third-party
+||imediacrew.club^$third-party
+||imglnka.com^$third-party
+||imglnkb.com^$third-party
+||imglnkc.com^$third-party
+||imlive.com^$script,third-party,domain=~imnude.com
+||impressionmonster.com^$third-party
+||in3x.net^$third-party
+||inheart.ru^$third-party
+||intelensafrete.stream^$third-party
+||internebula.net^$third-party
+||intrapromotion.com^$third-party
+||iridiumsergeiprogenitor.info^$third-party
+||itmcash.com^$third-party
+||itrxx.com^$third-party
+||itslive.com^$third-party
+||itspsmup.com^$third-party
+||itsup.com^$third-party
+||itw.me^$third-party
+||iwanttodeliver.com^$third-party
+||ixspublic.com^$third-party
+||jav-7mmtv.top^
+||javbucks.com^$third-party
+||joyourself.com^$third-party
+||kadam.ru^$third-party
+||kaplay.com^$third-party
+||kcolbda.com^$third-party
+||kinkadservercdn.com^
+||kugo.cc^$third-party
+||leche69.com^$third-party
+||lickbylick.com^$third-party
+||lifepromo.biz^$third-party
+||links-and-traffic.com^$third-party
+||livecam.com^$third-party
+||livejasmin.tv^$third-party
+||liveprivates.com^$third-party
+||livepromotools.com^$third-party
+||livestatisc.com^$third-party
+||livexxx.me^$third-party
+||loading-delivery1.com^$third-party
+||lostun.com^$third-party
+||lovecam.com.br^$third-party
+||lovercash.com^$third-party
+||lsawards.com^$third-party
+||lucidcommerce.com^$third-party
+||luvcash.com^$third-party
+||lwxjg.com^$third-party
+||madbanner.com^$third-party
+||mallcom.com^$third-party
+||marisappear.pro^$third-party
+||markswebcams.com^$third-party
+||masterbate.pro^$third-party
+||masterwanker.com^$third-party
+||matrimoniale3x.ro^$third-party
+||matrix-cash.com^$third-party
+||maxcash.com^$third-party
+||maxiadv.com^$third-party
+||mc-nudes.com^$third-party
+||mcprofits.com^$third-party
+||meccahoo.com^$third-party
+||media-click.ru^$third-party
+||mediad2.jp^$third-party
+||mediumpimpin.com^$third-party
+||meineserver.com^$third-party
+||meta4-group.com^$third-party
+||methodcash.com^$third-party
+||meubonus.com^$third-party
+||mileporn.com^$third-party
+||mmaaxx.com^$third-party
+||mmoframes.com^$third-party
+||mncvjhg.com^$third-party
+||mobalives.com^$third-party
+||mobilerevenu.com^$third-party
+||mobtop.ru^$third-party
+||modelsgonebad.com^$third-party
+||morehitserver.com^$third-party
+||mp-https.info^$third-party
+||mpmcash.com^$third-party
+||mrporngeek.com^$third-party
+||mrskincash.com^$third-party
+||mtoor.com^$third-party
+||mtree.com^$third-party
+||mxpopad.com^$third-party
+||myadultimpressions.com^$third-party
+||myprecisionads.com^$third-party
+||mywebclick.net^$third-party
+||naiadexports.com^$third-party
+||nastydollars.com^$third-party
+||nativexxx.com^$third-party
+||newads.bangbros.com^$third-party
+||newagerevenue.com^$third-party
+||newnudecash.com^$third-party
+||nexxxt.biz^$third-party
+||ngbn.net^$third-party
+||ningme.ru^$third-party
+||njmaq.com^$third-party
+||nonkads.com^$third-party
+||notify.support^$third-party
+||nscash.com^$third-party
+||nudedworld.com^$third-party
+||nummobile.com^$third-party
+||oconner.biz^$third-party
+||offaces-butional.com^$third-party
+||ohmygosh.info^
+||omynews.net^$third-party
+||onedmp.com.^$third-party
+||onhercam.com^$third-party
+||onlineporno.fun^$third-party
+||ordermc.com^$third-party
+||otaserve.net^$third-party
+||otherprofit.com^$third-party
+||ouslayer.co^$third-party
+||outster.com^$third-party
+||oxcluster.com^$third-party
+||ozelmedikal.com^$third-party
+||paid-to-promote.net^$third-party
+||parkingpremium.com^$third-party
+||partnercash.com^$third-party
+||partnercash.de^$third-party
+||pc20160522.com^$third-party
+||pecash.com^$third-party
+||pennynetwork.com^$third-party
+||pepipo.com^$third-party
+||philstraffic.com^$third-party
+||pictureturn.com^$third-party
+||pkeeper3.ru^$third-party
+||plantaosexy.com^$third-party
+||plugrush.com^$third-party
+||pnads.com^$third-party
+||pnperf.com^$third-party
+||poonproscash.com^$third-party
+||popander.com^$third-party
+||popupclick.ru^$third-party
+||porkolt.com^$third-party
+||porn300.com^$third-party
+||porn369.net^$third-party
+||porn88.net^$third-party
+||porn99.net^$third-party
+||pornattitude.com^$third-party
+||pornconversions.com^$third-party
+||porndroids.com^$third-party
+||pornearn.com^$third-party
+||pornglee.com^$third-party
+||porngray.com^$third-party
+||pornkings.com^$third-party
+||pornleep.com^$third-party
+||pornnperfect.com^$third-party
+||porntrack.com^$third-party
+||porntry.com^$third-party
+||pourmajeurs.com^$third-party
+||ppc-direct.com^$third-party
+||premiumhdv.com^$third-party
+||presatisfy.com^$third-party
+||privacyprotector.com^$third-party
+||private4.com^$third-party
+||privateseiten.net^$third-party
+||privatewebseiten.com^$third-party
+||prmobiles.com^$third-party
+||profistats.net^$third-party
+||program3.com^$third-party
+||promo4partners.com^$third-party
+||promocionesweb.com^$third-party
+||promokrot.com^$third-party
+||promotools.biz^$third-party
+||promowebstar.com^$third-party
+||propbn.com^$third-party
+||protect-x.com^$third-party
+||protizer.ru^$third-party
+||prscripts.com^$third-party
+||prtawe.com^$third-party
+||psma01.com^$third-party
+||psma03.com^$third-party
+||ptclassic.com^$third-party
+||ptrfc.com^$third-party
+||ptwebcams.com^$third-party
+||pussy-pics.net^$third-party
+||pussyeatingclub.com^$third-party
+||putanapartners.com^$third-party
+||quantumws.net^$third-party
+||qwerty24.net^$third-party
+||rack-media.com^$third-party
+||ragazzeinvendita.com^$third-party
+||rareru.ru^$third-party
+||rdiul.com^$third-party
+||realitycash.com^$third-party
+||realitytraffic.com^$third-party
+||recreativ.ru^$third-party
+||red-bees.com^$third-party
+||redlightcenter.com^$third-party
+||redpineapplemedia.com^$third-party
+||reliablebanners.com^$third-party
+||rivcash.com^$third-party
+||royal-cash.com^$third-party
+||rubanners.com^$third-party
+||rukplaza.com^$third-party
+||runetki.com^$third-party
+||russianlovematch.com^$third-party
+||safelinktracker.com^$third-party
+||sancdn.net^$third-party
+||sascentral.com^$third-party
+||sbs-ad.com^$third-party
+||searchpeack.com^$third-party
+||secretbehindporn.com^$third-party
+||seeawhale.com^$third-party
+||seekbang.com^$third-party
+||sehiba.com^$third-party
+||seitentipp.com^$third-party
+||sexad.net^$third-party
+||sexdatecash.com^$third-party
+||sexengine.sx^$third-party
+||sexiba.com^$third-party
+||sexlist.com^$third-party
+||sexopages.com^$third-party
+||sexplaycam.com^$third-party
+||sexsearch.com^$third-party
+||sextadate.net^$third-party
+||sextracker.com^$third-party
+||sexufly.com^$third-party
+||sexuhot.com^$third-party
+||sexvertise.com^$third-party
+||sexy-ch.com^$third-party
+||sghehllds.com^$third-party
+||shemale.house^$third-party
+||showmeyouradsnow.com^$third-party
+||siccash.com^$third-party
+||sixsigmatraffic.com^$third-party
+||skeettools.com^$third-party
+||smartbn.ru^$third-party
+||smartclick.net^$third-party
+||smopy.com^$third-party
+||sms-xxx.com^$third-party
+||snapcheat.app^$third-party
+||socialsexnetwork.net^$third-party
+||solutionsadultes.com^$third-party
+||souvlatraffic.com^$third-party
+||spacash.com^$third-party
+||spankmasters.com^$third-party
+||spunkycash.com^$third-party
+||startede.com^$third-party
+||startwebpromo.com^$third-party
+||staticxz.com^$third-party
+||statserv.net^$third-party
+||steamtraffic.com^$third-party
+||streamateaccess.com^$third-party
+||stripsaver.com^$third-party
+||sunnysmedia.com^$third-party
+||supuv3.com^$third-party
+||sv2.biz^$third-party
+||sweetmedia.org^$third-party
+||sweetstudents.com^$third-party
+||tantoporno.com^$third-party
+||targetingnow.com^$third-party
+||teasernet.ru^$third-party
+||teaservizio.com^$third-party
+||test1productions.com^$third-party
+||the-adult-company.com^$third-party
+||thepayporn.com^$third-party
+||thesocialsexnetwork.com^$third-party
+||thumbnail-galleries.net^$third-party
+||timteen.com^$third-party
+||tingrinter.com^$third-party
+||tinyweene.com^$third-party
+||tizernet.com^$third-party
+||tm-core.net^$third-party
+||tmserver-1.com^$third-party
+||tmserver-2.net^$third-party
+||topbucks.com^$third-party
+||tophosting101.com^$third-party
+||topsexcams.club^$third-party
+||tossoffads.com^$third-party
+||traffbiz.ru^$third-party
+||traffic-gate.com^$third-party
+||traffic.ru^$third-party
+||trafficholder.com^$third-party
+||trafficlearn.com^$third-party
+||trafficmagnates.com^$third-party
+||trafficman.io^$third-party
+||trafficpimps.com^$third-party
+||trafficstars.com^$third-party
+||traffictraffickers.com^$third-party
+||trafficundercontrol.com^$third-party
+||traficmax.fr^$third-party
+||trfpump.com^$third-party
+||trickyseduction.com^$third-party
+||trunblock.com^$third-party
+||trw12.com^$third-party
+||try9.com^$third-party
+||ttlmodels.com^$third-party
+||tube.ac^$third-party
+||tubeadnetwork.com^$third-party
+||tubeadv.com^$third-party
+||tubecorporate.com^$third-party
+||tubepush.eu^$third-party
+||tubesweet.com^$third-party
+||twistyscash.com^$third-party
+||unaspajas.com^$third-party
+||uxernab.com^$third-party
+||valuepornmedia.com^$third-party
+||ver-pelis.net^$third-party
+||verticalaffiliation.com^$third-party
+||vfgta.com^$third-party
+||vghd.com^$third-party
+||vid123.net^$third-party
+||video-people.com^$third-party
+||vidsrev.com^$third-party
+||viensvoircesite.com^$third-party
+||virtuagirlhd.com^$third-party
+||vivaclix.com^$third-party
+||vividcash.com^$third-party
+||vlexokrako.com^$third-party
+||vlogexpert.com^$third-party
+||vod-cash.com^$third-party
+||vogotita.com^$third-party
+||vogozae.ru^$third-party
+||voyeurhit.com^$third-party
+||vrstage.com^$third-party
+||vsexshop.ru^$third-party
+||w4vecl1cks.com^$third-party
+||wamcash.com^$third-party
+||wantatop.com^$third-party
+||watchmygf.to^$third-party
+||wct.click^$third-party
+||wifelovers.com^$third-party
+||worldsbestcams.com^$third-party
+||xgogi.com^$third-party
+||xhamstercams.com^$third-party
+||xlovecam.com^$third-party
+||xogogowebcams.com^$third-party
+||xtrafficads.com^$third-party
+||xxxblackbook.com^$third-party
+||xxxmatch.com^$third-party
+||yourdatelink.com^$third-party
+||yurivideo.com^$third-party
+
+! *** easylist:easylist_adult/adult_adservers_popup.txt ***
+||1lzz.com^$popup
+||1ts11.top^$popup
+||3questionsgetthegirl.com^$popup
+||9content.com^$popup
+||adextrem.com^$popup
+||adultadworld.com^$popup
+||banners.cams.com^$popup
+||bestdatinghere.life^$popup
+||c4tracking01.com^$popup
+||cam4tracking.com^$popup
+||checkmy.cam^$popup
+||chokertraffic.com^$popup
+||ckrf1.com^$popup
+||connexionsafe.com^$popup
+||cooch.tv^$popup,third-party
+||cpng.lol.^$popup
+||cpng.lol^$popup
+||crdefault2.com^$popup
+||crentexgate.com^$popup
+||crlcw.link^$popup
+||crptentry.com^$popup
+||crptgate.com^$popup
+||date-for-more.com^$popup
+||datingshall.life^$popup
+||datoporn.com^$popup
+||desklks.com^$popup
+||dirty-messenger.com^$popup
+||dirty-tinder.com^$popup
+||dumbpop.com^$popup
+||ekod.info^$popup
+||ero-advertising.com^$popup
+||eroge.com^$popup
+||ertya.com^$popup
+||ezofferz.com^$popup
+||flagads.net^$popup
+||flndmyiove.net^$popup
+||fpctraffic2.com^$popup
+||freecamsexposed.com^$popup
+||freewebcams.com^$popup,third-party
+||friendfinder.com^$popup
+||frtyi.com^$popup
+||funkydaters.com^$popup
+||gambol.link^$popup
+||gayfinder.life^$popup
+||get-partner.life^$popup
+||gettraff.com^$popup
+||girls.xyz^$popup
+||global-trk.com^$popup
+||go-route.com^$popup
+||goaffmy.com^$popup
+||grtyv.com^$popup
+||hizlireklam.com^$popup
+||hkl4h1trk.com^$popup
+||hornymatches.com^$popup,third-party
+||hotplay-games.life^$popup
+||hottesvideosapps.com^$popup
+||hpyrdr.com^$popup
+||hrtya.com^$popup
+||indianfriendfinder.com^$popup
+||irtye.com^$popup
+||isanalyze.com^$popup
+||jav-7mmtv.top^$popup
+||jizzy.org^$popup
+||jsmjmp.com^$popup
+||juicyads.com^$popup
+||kaizentraffic.com^$popup
+||libedgolart.com^$popup
+||lncredlbiedate.com^$popup
+||misspkl.com^$popup
+||moradu.com^$popup
+||mptentry.com^$popup
+||needlive.com^$popup
+||njmaq.com^$popup
+||notimoti.com^$popup
+||nyetm2mkch.com^$popup
+||ophistler.pro^$popup
+||passtechusa.com^$popup
+||pd-news.com^$popup
+||pinkberrytube.com^$popup
+||playgirl.com^$popup
+||plinx.net^$popup,third-party
+||poweredbyliquidfire.mobi^$popup
+||prodtraff.com^$popup
+||prpopss.com^$popup
+||quadrinhoseroticos.net^$popup
+||quadrupleclick.com^$popup
+||rdvinfidele.club^$popup
+||reporo.net^$popup
+||restions-planted.com^$popup
+||reviewdollars.com^$popup
+||sascentral.com^$popup
+||setravieso.com^$popup
+||sexad.net^$popup
+||sexemulator.com^$popup
+||sexflirtbook.com^$popup
+||sexintheuk.com^$popup
+||sexmotors.com^$popup,third-party
+||sexpennyauctions.com^$popup
+||slut2fuck.net^$popup
+||snapcheat.app^$popup
+||socialsex.biz^$popup
+||socialsex.com^$popup
+||targetingnow.com^$popup
+||trackvoluum.com^$popup
+||traffic.club^$popup
+||trafficbroker.com^$popup
+||trafficstars.com^$popup
+||traffictraffickers.com^$popup
+||trkbc.com^$popup
+||trkinator.com^$popup
+||viensvoircesite.com^$popup
+||vlexokrako.com^$popup
+||watchmygf.com^$popup
+||xdtraffic.com^$popup
+||xmatch.com^$popup
+||xpeeps.com^$popup,third-party
+||xvika.com^$popup
+||xxlargepop.com^$popup
+||xxxjmp.com^$popup
+||xxxmatch.com^$popup
+||xxxrevpushclcdu.com^$popup
+||zononi.com^$popup
+!-----------------------------Third-party adverts-----------------------------!
+! *** easylist:easylist/easylist_thirdparty.txt ***
+||000webhost.com/images/banners/
+||1002867133.rsc.cdn77.org^
+||1035218900.rsc.cdn77.org^
+||1044195567.rsc.cdn77.org^
+||1052982219.rsc.cdn77.org^
+||1070165434.rsc.cdn77.org^
+||1080872514.rsc.cdn77.org^
+||1082580998.rsc.cdn77.org^
+||10945-2.s.cdn15.com^
+||10945-5.s.cdn15.com^
+||1117977646.rsc.cdn77.org^
+||1143895874.rsc.cdn77.org^
+||1144017219.rsc.cdn77.org^
+||1145191861.rsc.cdn77.org^
+||1187531871.rsc.cdn77.org^
+||1193176784.rsc.cdn77.org^
+||1203782659.rsc.cdn77.org^
+||1244458189.rsc.cdn77.org^
+||1437953666.rsc.cdn77.org^
+||1460689281.rsc.cdn77.org^
+||1603463731.rsc.cdn77.org^
+||1665637157.rsc.cdn77.org^
+||1675450967.rsc.cdn77.org^
+||1692923857.rsc.cdn77.org^
+||1736253261.rsc.cdn77.org^
+||1805629149.rsc.cdn77.org^
+||1885212191.rsc.cdn77.org^
+||360playvid.com^$third-party
+||360playvid.info^$third-party
+||a-delivery.rmbl.ws^
+||a.ucoz.net^
+||ad-serve.b-cdn.net^
+||ad.22betpartners.com^
+||ad.about.co.kr^
+||ad.bitmedia.io^
+||ad.edugram.com^
+||ad.kubiccomps.icu^
+||ad.mail.ru/static/admanhtml/
+||ad.mail.ru^$~image,domain=~mail.ru|~sportmail.ru
+||ad.moe.video^
+||ad.netmedia.hu^
+||ad.reklamport.com^
+||ad.tpmn.co.kr^
+||ad.video-mech.ru^
+||ad.wsod.com^
+||adaptv.advertising.com^
+||adfoc.us^$script,third-party
+||adform.net/banners/$third-party
+||adform.net/serving/$third-party
+||adinplay-venatus.workers.dev^
+||adncdnend.azureedge.net^
+||adrackpush.azurewebsites.net^
+||ads-api.production.nebula-drupal.stuff.co.nz^
+||ads-yallo-production.imgix.net^
+||ads.betfair.com^
+||ads.linkedin.com^$third-party
+||ads.saymedia.com^
+||ads.servebom.com^
+||ads.sportradar.com^
+||ads.travelaudience.com^
+||ads.yahoo.com^$~image
+||ads2.hsoub.com^
+||adsales.snidigital.com^
+||adserving.unibet.com^
+||adtechvideo.s3.amazonaws.com^
+||advast.sibnet.ru^
+||adx-exchange.toast.com^
+||aff.bstatic.com^
+||affiliate.heureka.cz^
+||affiliate.juno.co.uk^
+||affiliate.mediatemple.net^
+||affiliatepluginintegration.cj.com^
+||ah.pricegrabber.com^
+||akamaized.net/mr/popunder.js
+||alarmsportsnetwork.com^$third-party
+||allprivatekeys.com/static/banners/$third-party
+||allsportsflix.
+||amazonaws.com/campaigns-ad/
+||amazonaws.com/mailcache.appinthestore.com/
+||an.yandex.ru^$domain=~e.mail.ru
+||answers.sg/embed/
+||any.gs/visitScript/
+||api-player.globalsun.io/api/publishers/player/content?category_id=*&adserver_id=$xmlhttprequest
+||api.140proof.com^
+||api.bitp.it^
+||app.clickfunnels.com^$~stylesheet
+||apps.media-lab.ai^
+||aspencore.com/syndication/v3/partnered-content/
+||assets.sheetmusicplus.com^$third-party
+||autodealer.co.za/inc/widget/
+||autotrader.ca/result/AutosAvailableListings.aspx?
+||autotrader.co.za/partners/
+||award.sitekeuring.net^
+||awin1.com/cawshow.php$third-party
+||awin1.com/cshow.php$third-party
+||azureedge.net/adtags/
+||b.marfeelcache.com/statics/marfeel/gardac-sync.js
+||bankrate.com/jsfeeds/
+||banners.livepartners.com^
+||bc.coupons.com^
+||bc.vc/js/link-converter.js
+||beauties-of-ukraine.com/export.js
+||bescore.com/libs/e.js
+||besthopt.com/images/banners/$third-party
+||bet365.com/favicon.ico$third-party
+||betclever.com/wp-admin/admin-ajax.php?action=coupons_widget_iframe&id=$third-party
+||bgtw.chimeratool.com^
+||bharatmatrimony.com/matrimoney/matrimoneybanners/
+||bidder.criteo.com^
+||bidder.newspassid.com^
+||bidorbuy.co.za/jsp/tradesearch/TradeFeedPreview.jsp?
+||bids.concert.io^
+||bigrock.in/affiliate/
+||bit.ly^$image,domain=tooxclusive.com
+||bitbond.com/affiliate-program/
+||bl.wavecdn.de^
+||blacklistednews.com/contentrotator/
+||blogatus.com/images/banner/$third-party
+||bluehost-cdn.com/media/partner/images/
+||bluehost.com/track/
+||bluehost.com/web-hosting/domaincheckapi/?affiliate=
+||bluepromocode.com/images/widgets/
+||bookingdragon.com^$subdocument,third-party
+||br.coe777.com^
+||bs-adserver.b-cdn.net^
+||btguard.com/images/
+||btr.domywife.com^
+||c.bannerflow.net^
+||c2shb.pubgw.yahoo.com^
+||caffeine.tv/embed/
+||campaigns.williamhill.com^
+||capital.com/widgets/$third-party
+||careerwebsite.com/distrib_pages/jobs.cfm?
+||carfax.com/img_myap/
+||cas.*.criteo.com^
+||cdn.neighbourly.co.nz/widget/$subdocument
+||cdn.vaughnsoft.net/abvs/
+||cdn22904910.ahacdn.me^
+||cdn4.life/media/
+||cdnpub.info^$subdocument,third-party,domain=~iqbroker.co|~iqbroker.com|~iqoption.co.th|~iqoption.com|~tr-iqoption.com
+||cdnservices.net/megatag.js
+||cex.io/img/b/
+||cex.io/informer/
+||chandrabinduad.com^$third-party
+||chicoryapp.com^$third-party
+||clarity.abacast.com^
+||click.alibaba.com^$subdocument,third-party
+||click.aliexpress.com^$subdocument,third-party
+||clickfunnels.com/assets/cfpop.js
+||clicknplay.to/api/spots/
+||cloud.setupad.com^
+||cloudbet.com/ad/
+||cloudfront.net/*.min.css$script,third-party
+||cloudfront.net/css/*.min.js$script,third-party
+||cloudfront.net/images/*-min.js$script,third-party
+||cloudfront.net/js/script_tag/new/sca_affiliate_
+||coinmama.com/assets/img/banners/
+||commercial.daznservices.com^
+||contentexchange.me/widget/$third-party
+||couponcp-a.akamaihd.net^
+||cpkshop.com/campaign/$third-party
+||cpm.amateurcommunity.de^
+||cpmstar.com/cached/
+||cpmstar.com/view.aspx
+||creatives.inmotionhosting.com^
+||crunchyroll.com/awidget/
+||cse.google.com/cse_v2/ads$subdocument
+||cts.tradepub.com^
+||customer.heartinternet.co.uk^$third-party
+||cuteonly.com/banners.php
+||cxad.cxense.com^
+||d3mmnnn9s2dcmq.cloudfront.net/shim/embed.js
+||datafeedfile.com/widget/readywidget/
+||dawanda.com/widget/
+||ddownload.com/images/promo/$third-party
+||dealextreme.com/affiliate_upload/
+||desperateseller.co.uk/affiliates/
+||digitaloceanspaces.com/woohoo/
+||disqus.com/ads-iframe/
+||disqus.com/listPromoted?
+||dtrk.slimcdn.com^
+||dunhilltraveldeals.com^$third-party
+||dx.com/affiliate/
+||e-tailwebstores.com/accounts/default1/banners/
+||earn-bitcoins.net/banner_
+||elliottwave.com/fw/regular_leaderboard.js
+||engine.eroge.com^
+||entainpartners.com/renderbanner.do?
+||epnt.ebay.com^
+||escape.insites.eu^
+||espncdn.shop/nwm-dbh.min3.js
+||etrader.kalahari.com^
+||etrader.kalahari.net^
+||extensoft.com/artisteer/banners/
+||facebook.com/audiencenetwork/$third-party
+||familytreedna.com/img/affiliates/
+||fancybar.net/ac/fancybar.js?zoneid
+||fapturbo.com/testoid/
+||fc.lc/CustomTheme/img/ref$third-party
+||feedads.feedblitz.com^
+||fembedta.com/pub?
+||fileboom.me/images/i/$third-party
+||filterforge.com/images/banners/
+||financeads.net/tb.php$third-party
+||flowplayer.com/releases/ads/
+||free-btc.org/banner/$third-party
+||freshbooks.com/images/banners/
+||futuresite.register.com/us?
+||g.ezoic.net/ezosuigenerisc.js
+||gadgets360.com/pricee/assets/affiliate/
+||gamblingwages.com/images/
+||gamer-network.net/plugins/dfp/
+||gamesports.net/monkey_
+||gamingjobsonline.com/images/banner/
+||geobanner.friendfinder.com^$third-party
+||get.cryptobrowser.site^
+||get.davincisgold.com^
+||get.paradise8.com^
+||get.thisisvegas.com^
+||gfxa.sheetmusicplus.com^
+||gg.caixin.com^
+||glam.com/app/
+||glam.com/gad/
+||go.bloxplay.com^
+||go.ezodn.com^
+||go.onelink.me^$image,script
+||goldmoney.com/~/media/Images/Banners/
+||google.com/adsense/ad
+||google.com/adsense/domains
+||google.com/adsense/search/$third-party
+||google.com/afs/ads?
+||google.com/dp/ads
+||google.com/pagead/
+||googleadapis.l.google.com^$third-party
+||googlesyndication.com/pagead/
+||googlesyndication.com/safeframe/
+||gopjn.com/b/
+||gopjn.com/i/
+||graph.org/file/$third-party
+||groupon.com/javascripts/common/affiliate_widget/
+||grscty.com/images/banner/
+||gsniper.com/images/
+||hb.yahoo.net^
+||hbid.ams3.cdn.digitaloceanspaces.com^
+||hide-my-ip.com/promo/
+||highepcoffer.com/images/banners/
+||hitleap.com/assets/banner
+||hostmonster.com/src/js/$third-party
+||hotlink.cc/promo/
+||hotwire-widget.dailywire.com^$third-party
+||httpslink.com/EdgeOfTheFire
+||htvapps.com/ad_fallback/
+||ibvpn.com/img/banners/
+||ifoneunlock.com/*_banner_
+||imsynthesis.pro/banners/$third-party
+||in.com/common/script_catch.js
+||incrementxplay.com/api/adserver/
+||indeed.fr/ads/
+||infibeam.com/affiliate/
+||inrdeals.com^$third-party
+||instant-gaming.com/affgames/
+||jam.hearstapps.com/js/renderer.js
+||jinx.com/content/banner/
+||jobs.sciencecareers.org^$subdocument,third-party
+||jobtarget.com/distrib_pages/
+||join.megaphonetv.com^$third-party
+||js.mangakl.su^
+||js.mangalove.top^
+||js.phoenixmanga.com^
+||jsdelivr.net/gh/InteractiveAdvertisingBureau/
+||jsdelivr.net/npm/prebid-
+||jvzoo.com/assets/widget/
+||jwpcdn.com/player/*/googima.js
+||jwpcdn.com/player/plugins/bidding/
+||jwpcdn.com/player/plugins/googima/
+||k8s-adserver-adserver-4b35ec6a1d-815734624.us-east-1.elb.amazonaws.com^
+||karma.mdpcdn.com^
+||keep2share.cc/images/i/$third-party
+||kontera.com/javascript/lib/KonaLibInline.js
+||lawdepot.com/affiliate/$third-party
+||leadfamly.com/campaign/sdk/popup.min.js
+||legitonlinejobs.com/images/$third-party
+||lesmeilleurs-jeux.net/images/ban/
+||lessemf.com/images/banner-
+||libcdnjs.com/js/script.js
+||libs.outbrain.com/video/$third-party
+||link.link.ru^
+||linkconnector.com/tr.php
+||linkconnector.com/traffic_record.php
+||linkshrink.net^$script,third-party
+||linkspy.cc/js/fullPageScript.min.js
+||linkx.ix.tc^
+||lottoelite.com/banners/
+||ltkcdn.net/ltkrev.js
+||magictag.digislots.in^
+||marketing.888.com^
+||marketools.plus500.com/feeds/
+||marketools.plus500.com/Widgets/
+||mbid.marfeelrev.com^
+||mcc.godaddy.com/park/
+||media.netrefer.com^
+||mediaplex.com/ad/
+||memesng.com/ads
+||mmin.io/embed/
+||mmosale.com/baner_images/
+||mmwebhandler.888.com^
+||mydirtyhobby.com^$third-party,domain=~my-dirty-hobby.com|~mydirtyhobby.de
+||myfinance.com^$subdocument,third-party
+||namecheap.com/graphics/linkus/
+||nativly.com/tds/widget?
+||netnaija.com/s/$script
+||news.smi2.ru^$third-party
+||newsiqra.com^$subdocument,third-party
+||nitroflare.com/img/banners/
+||noagentfees.com^$subdocument,domain=independent.com.mt
+||oilofasia.com/images/banners/
+||onnetwork.tv/widget/
+||ooproxy.azurewebsites.net^$xmlhttprequest,domain=imasdk.googleapis.com
+||orangebuddies.nl/image/banners/
+||outbrainimg.com/transform/$media,third-party
+||p.jwpcdn.com/player/plugins/vast/
+||p.smartertravel.com^
+||pacontainer.s3.amazonaws.com^
+||pagead2.googlesyndication.com^
+||pages.etoro.com/widgets/$third-party
+||parking.godaddy.com^$third-party
+||partner.e-conomic.com^
+||partner.vecteezy.com^
+||partners.autotrader.co.uk^
+||partners.betus.com^
+||partners.dogtime.com^
+||partners.etoro.com^$third-party
+||partners.hostgator.com^
+||partners.rochen.com^
+||payza.com/images/banners/
+||pb.s3wfg.com^
+||perfectmoney.com/img/banners/
+||phonephotographytricks.com/images/banners/
+||pics.firstload.de^
+||pjatr.com^$image,script
+||pjtra.com^$image,script
+||play-asia.com^$image,subdocument,third-party
+||player.globalsun.io/player/videojs-contrib-ads$script,third-party
+||plchldr.co^$third-party
+||plista.com/async_lib.js?
+||plista.com/tiny/$third-party
+||plus.net/images/referrals/
+||pngmart.com/files/10/Download-Now-Button-PNG-Free-Download.png
+||pntra.com^$image,script
+||pntrac.com^$image,script
+||pntrs.com^$image,script
+||popmog.com^
+||press-start.com/affgames/
+||privateinternetaccess.com^$script,third-party,xmlhttprequest
+||privatejetfinder.com/skins/partners/$third-party
+||promos.fling.com^
+||promote.pair.com/88x31.pl
+||proxysolutions.net/affiliates/
+||pubfeed.linkby.com^
+||public.porn.fr^$third-party
+||publish0x.com^$image,script,third-party
+||purevpn.com/affiliates/
+||qsearch-a.akamaihd.net^
+||racebets.com/media.php?
+||random-affiliate.atimaze.com^
+||rapidgator.net/images/pics/510_468%D1%8560_1.gif
+||readme.ru/informer/
+||recipefy.net/rssfeed.php
+||redirect-ads.com^$~subdocument,third-party
+||redtram.com^$script,third-party
+||refinery89.com/performance/
+||reiclub.com/templates/interviews/exit_popup/
+||remax-malta.com/widget_new/$third-party
+||rentalcars.com/partners/
+||resellerratings.com/popup/include/popup.js
+||rotabanner.kulichki.net^
+||rotator.tradetracker.net^
+||rubylife.go2cloud.org^
+||s1.wp.com^$subdocument,third-party
+||saambaa.com^$third-party
+||safarinow.com/affiliate-zone/
+||safelinku.com/js/web-script.js
+||sailthru.com^*/horizon.js
+||sascdn.com/config.js
+||sascdn.com/diff/$image,script
+||sascdn.com/tag/
+||saveit.us/img/$third-party
+||sbhc.portalhc.com^
+||sbitany.com^*/affiliate/$third-party
+||screen13.com/publishers/
+||scriptadmin.com/scripts/popunder.js
+||sdk.apester.com/*.adsbygoogle.min.js
+||sdk.apester.com/*.Monetization.min.js
+||search-carousel-widget.snc-prod.aws.cinch.co.uk^
+||secure.money.com^$third-party
+||service.smscoin.com/js/sendpic.js
+||services.zam.com^
+||shareasale.com/image/$third-party
+||shink.in/js/script.js
+||shopmyshelf.us^$third-party
+||shorte.st/link-converter.min.js
+||signup.asurion.com^$subdocument
+||siteground.com/img/affiliate/
+||siteground.com/img/banners/
+||skimresources.com^$script,subdocument,third-party
+||slysoft.com/img/banner/
+||smartdestinations.com/ai/
+||snacklink.co/js/web-script.js
+||snacktools.net/bannersnack/$domain=~bannersnack.dev
+||socialmonkee.com/images/
+||sorcerers.net/includes/butler/
+||squirrels.getsquirrel.co^
+||srv.dynamicyield.com^
+||srv.tunefindforfans.com^
+||srx.com.sg/srx/media/
+||ssl-images-amazon.com/images/*/DAsf-
+||ssl-images-amazon.com/images/*/MAsf-
+||static.ifruplink.net/static_src/mc-banner/
+||static.prd.datawars.io/static/promo/
+||static.sunmedia.tv/integrations/
+||static.tradetracker.net^$third-party
+||storage.googleapis.com/adtags/
+||storage.googleapis.com/ba_utils/stab.js
+||stunserver.net/frun.js
+||sunflowerbright104.io/sdk.js
+||supply.upjers.com^
+||surdotly.com/js/Surly.min.js
+||surveymonkey.com/jspop.aspx?
+||sweeva.com/images/banner250.gif
+||syndicate.payloadz.com^
+||t.co^$subdocument,domain=kshow123.tv
+||taboola.com/vpaid/
+||tag.regieci.com^
+||takefile.link/promo/$third-party
+||targeting.vdo.ai^
+||tcadserver.rain-digital.ca^
+||tech426.com/pub/
+||textlinks.com/images/banners/
+||thefreesite.com/nov99bannov.gif
+||themespixel.net/banners/
+||thscore.fun/mn/
+||ti.tradetracker.net^
+||tillertag-a.akamaihd.net^
+||toplist.raidrush.ws^$third-party
+||torrindex.net/images/epv/
+||torrindex.net/static/tinysort.min.js
+||totalmedia2.ynet.co.il/new_gpt/
+||track.10bet.com^
+||track.effiliation.com^$image,script
+||traffer.biz/img/banners/
+||travel.mediaalpha.com/js/serve.js
+||trendads.reactivebetting.com^
+||truex.com/js/client.js
+||trvl-px.com/trvl-px/
+||turb.cc/fd1/img/promo/
+||typicalstudent.org^$third-party
+||ummn.nu^$subdocument
+||uploaded.net/img/public/$third-party
+||utility.rogersmedia.com/wrapper.js
+||vhanime.com/js/bnanime.js
+||vice-publishers-cdn.vice.com^
+||vidcrunch.com/integrations/$script,third-party
+||video-ads.a2z.com^
+||videosvc.ezoic.com^
+||vidoomy.com/api/adserver/
+||viralize.tv/t-bid-opportunity/
+||virool.com/widgets/
+||vpnrice.com/a/p.js
+||vrixon.com/adsdk/
+||vultr.com/media/banner
+||vuukle.com/ads/
+||vv.7vid.net^
+||web.adblade.com^
+||webapps.leasing.com^
+||webseed.com/WP/
+||weby.aaas.org^
+||whatismyipaddress.cyou/assets/images/ip-banner.png
+||wheelify.cartzy.com^
+||widget.engageya.com/engageya_loader.js
+||widget.golfscape.com^
+||widget.searchschoolsnetwork.com^
+||widget.sellwild.com^
+||widget.shopstyle.com^
+||widgets.business.com^
+||widgets.lendingtree.com^
+||widgets.oddschecker.com^
+||widgets.outbrain.com^*/widget.js
+||widgets.progrids.com^
+||widgets.tree.com^
+||wistia.com/assets/external/googleAds.js
+||wowtcgloot.com/share/?d=$third-party
+||wp.com/assets.sheetmusicplus.com/banner/
+||wp.com/assets.sheetmusicplus.com/smp/
+||wp.com/bugsfighter.com/wp-content/uploads/2016/07/adguard-banner.png
+||wpengine.com/wp-json/api/advanced_placement/api-in-article-ad/
+||wpzoom.com/images/aff/
+||ws.amazon.*/widgets/$third-party
+||yahoo.com/bidRequest
+||yastatic.net/pcode/adfox/header-bidding.js
+||yield-op-idsync.live.streamtheworld.com^
+||yieldmanager.edgesuite.net^
+||yimg.com/dy/ads/native.js
+||yimg.com/dy/ads/readmo.js
+||z3x-team.com/wp-content/*-banner-
+||zergnet.com/zerg.js
+||ziffstatic.com/pg/
+||ziffstatic.com/zmg/pogoadk.js
+||zv.7vid.net^
+! CNAME
+! https://d3ward.github.io/toolz/src/adblock.html
+||ad.intl.xiaomi.com^
+||ad.samsungadhub.com^
+||ad.xiaomi.com^
+||samsungadhub.com^$third-party
+! amazonaws (ad-fix)
+/^https?:\/\/s3\.*.*\.amazonaws\.com\/[a-f0-9]{45,}\/[a-f,0-9]{8,10}$/$script,third-party,xmlhttprequest,domain=~amazon.com
+||s3.amazonaws.com^*/f10ac63cd7
+||s3.amazonaws.com^*/secure.js
+! charlotteobserver.com (audio advert)
+||tsbluebox.com^$third-party
+! cloudfront hosted
+||d10ce3z4vbhcdd.cloudfront.net^
+||d10lumateci472.cloudfront.net^
+||d10lv7w3g0jvk9.cloudfront.net^
+||d10nkw6w2k1o10.cloudfront.net^
+||d10wfab8zt419p.cloudfront.net^
+||d10zmv6hrj5cx1.cloudfront.net^
+||d114isgihvajcp.cloudfront.net^
+||d1180od816jent.cloudfront.net^
+||d11enq2rymy0yl.cloudfront.net^
+||d11hjbdxxtogg5.cloudfront.net^
+||d11p7gi4d9x2s0.cloudfront.net^
+||d11tybz5ul8vel.cloudfront.net^
+||d11zevc9a5598r.cloudfront.net^
+||d12czbu0tltgqq.cloudfront.net^
+||d12dky1jzngacn.cloudfront.net^
+||d12t7h1bsbq1cs.cloudfront.net^
+||d12tu1kocp8e8u.cloudfront.net^
+||d12ylqdkzgcup5.cloudfront.net^
+||d13gni3sfor862.cloudfront.net^
+||d13j11nqjt0s84.cloudfront.net^
+||d13k7prax1yi04.cloudfront.net^
+||d13pxqgp3ixdbh.cloudfront.net^
+||d13vul5n9pqibl.cloudfront.net^
+||d140sbu1b1m3h0.cloudfront.net^
+||d141wsrw9m4as6.cloudfront.net^
+||d142i1hxvwe38g.cloudfront.net^
+||d145ghnzqbsasr.cloudfront.net^
+||d14821r0t3377v.cloudfront.net^
+||d14zhsq5aop7ap.cloudfront.net^
+||d154nw1c88j0q6.cloudfront.net^
+||d15bcy38hlba76.cloudfront.net^
+||d15gt9gwxw5wu0.cloudfront.net^
+||d15jg7068qz6nm.cloudfront.net^
+||d15kdpgjg3unno.cloudfront.net^
+||d15kuuu3jqrln7.cloudfront.net^
+||d15mt77nzagpnx.cloudfront.net^
+||d162nnmwf9bggr.cloudfront.net^
+||d16saj1xvba76n.cloudfront.net^
+||d175dtblugd1dn.cloudfront.net^
+||d17757b88bjr2y.cloudfront.net^
+||d17c5vf4t6okfg.cloudfront.net^
+||d183xvcith22ty.cloudfront.net^
+||d1856n6bep9gel.cloudfront.net^
+||d188elxamt3utn.cloudfront.net^
+||d188m5xxcpvuue.cloudfront.net^
+||d18b5y9gp0lr93.cloudfront.net^
+||d18e74vjvmvza1.cloudfront.net^
+||d18g6t7whf8ejf.cloudfront.net^
+||d18hqfm1ev805k.cloudfront.net^
+||d18kg2zy9x3t96.cloudfront.net^
+||d18mealirgdbbz.cloudfront.net^
+||d18myvrsrzjrd7.cloudfront.net^
+||d18ql5xgy7gz3p.cloudfront.net^
+||d18t35yyry2k49.cloudfront.net^
+||d192g7g8iuw79c.cloudfront.net^
+||d192r5l88wrng7.cloudfront.net^
+||d199kwgcer5a6q.cloudfront.net^
+||d19bpqj0yivlb3.cloudfront.net^
+||d19gkl2iaav80x.cloudfront.net^
+||d19y03yc9s7c1c.cloudfront.net^
+||d1a3jb5hjny5s4.cloudfront.net^
+||d1aa9f6zukqylf.cloudfront.net^
+||d1ac2du043ydir.cloudfront.net^
+||d1aezk8tun0dhm.cloudfront.net^
+||d1aiciyg0qwvvr.cloudfront.net^
+||d1ap9gbbf77h85.cloudfront.net^
+||d1appgm50chwbg.cloudfront.net^
+||d1aqvw7cn4ydzo.cloudfront.net^
+||d1aukpqf83rqhe.cloudfront.net^
+||d1ayv3a7nyno3a.cloudfront.net^
+||d1az618or4kzj8.cloudfront.net^
+||d1aznprfp4xena.cloudfront.net^
+||d1azpphj80lavy.cloudfront.net^
+||d1b240xv9h0q8y.cloudfront.net^
+||d1b499kr4qnas6.cloudfront.net^
+||d1b9b1cxai2c03.cloudfront.net^
+||d1bad9ankyq5eg.cloudfront.net^
+||d1bci271z7i5pg.cloudfront.net^
+||d1betjlqogdr97.cloudfront.net^
+||d1bf1sb7ks8ojo.cloudfront.net^
+||d1bi6hxlc51jjw.cloudfront.net^
+||d1bioqbsunwnrb.cloudfront.net^
+||d1bkis4ydqgspg.cloudfront.net^
+||d1bxkgbbc428vi.cloudfront.net^
+||d1clmik8la8v65.cloudfront.net^
+||d1crt12zco2cvf.cloudfront.net^
+||d1d7hwtv2l91pm.cloudfront.net^
+||d1dh1gvx7p0imm.cloudfront.net^
+||d1diqetif5itzx.cloudfront.net^
+||d1e28xq8vu3baf.cloudfront.net^
+||d1e3vw6pz2ty1m.cloudfront.net^
+||d1e9rtdi67kart.cloudfront.net^
+||d1ebha2k07asm5.cloudfront.net^
+||d1eknpz7w55flg.cloudfront.net^
+||d1err2upj040z.cloudfront.net^
+||d1esebcdm6wx7j.cloudfront.net^
+||d1ev4o49j4zqc3.cloudfront.net^
+||d1ev866ubw90c6.cloudfront.net^
+||d1ezlc9vy4yc7g.cloudfront.net^
+||d1f05vr3sjsuy7.cloudfront.net^
+||d1f52ha44xvggk.cloudfront.net^
+||d1f7vr2umogk27.cloudfront.net^
+||d1f9tkqiyb5a97.cloudfront.net^
+||d1fs2ef81chg3.cloudfront.net^
+||d1g2nud28z4vph.cloudfront.net^
+||d1g4493j0tcwvt.cloudfront.net^
+||d1g4xgvlcsj49g.cloudfront.net^
+||d1g8forfjnu2jh.cloudfront.net^
+||d1ha41wacubcnb.cloudfront.net^
+||d1hgdmbgioknig.cloudfront.net^
+||d1hnmxbg6rp2o6.cloudfront.net^
+||d1hogxc58mhzo9.cloudfront.net^
+||d1i11ea1m0er9t.cloudfront.net^
+||d1i3h541wbnrfi.cloudfront.net^
+||d1igvjcl1gjs62.cloudfront.net^
+||d1ilwohzbe4ao6.cloudfront.net^
+||d1izuvv2qy7hel.cloudfront.net^
+||d1j1m9awq6n3x3.cloudfront.net^
+||d1j2jv7bvcsxqg.cloudfront.net^
+||d1j47wsepxe9u2.cloudfront.net^
+||d1j6limf657foe.cloudfront.net^
+||d1j818d3wapogd.cloudfront.net^
+||d1j9qsxe04m2ki.cloudfront.net^
+||d1jcj9gy98l90g.cloudfront.net^
+||d1jnvfp2m6fzvq.cloudfront.net^
+||d1juimniehopp3.cloudfront.net^
+||d1jwpd11ofhd5g.cloudfront.net^
+||d1ks8roequxbwa.cloudfront.net^
+||d1ktmtailsv07c.cloudfront.net^
+||d1kttpj1t6674w.cloudfront.net^
+||d1kwkwcfmhtljq.cloudfront.net^
+||d1kzm6rtbvkdln.cloudfront.net^
+||d1l906mtvq85kd.cloudfront.net^
+||d1lihuem8ojqxz.cloudfront.net^
+||d1lky2ntb9ztpd.cloudfront.net^
+||d1lnjzqqshwcwg.cloudfront.net^
+||d1lo4oi08ke2ex.cloudfront.net^
+||d1lxhc4jvstzrp.cloudfront.net^
+||d1mar6i7bkj1lr.cloudfront.net^
+||d1mbgf0ge24riu.cloudfront.net^
+||d1mbihpm2gncx7.cloudfront.net^
+||d1mcwmzol446xa.cloudfront.net^
+||d1my7gmbyaxdyn.cloudfront.net^
+||d1n1ppeppre6d4.cloudfront.net^
+||d1n3aexzs37q4s.cloudfront.net^
+||d1n3tk65esqc4k.cloudfront.net^
+||d1n5jb3yqcxwp.cloudfront.net^
+||d1n6jx7iu0qib6.cloudfront.net^
+||d1ndpste0fy3id.cloudfront.net^
+||d1nkvehlw5hmj4.cloudfront.net^
+||d1nmxiiewlx627.cloudfront.net^
+||d1nnhbi4g0kj5.cloudfront.net^
+||d1now6cui1se29.cloudfront.net^
+||d1nssfq3xl2t6b.cloudfront.net^
+||d1nubxdgom3wqt.cloudfront.net^
+||d1nv2vx70p2ijo.cloudfront.net^
+||d1nx2jii03b4ju.cloudfront.net^
+||d1o1guzowlqlts.cloudfront.net^
+||d1of5w8unlzqtg.cloudfront.net^
+||d1okyw2ay5msiy.cloudfront.net^
+||d1ol7fsyj96wwo.cloudfront.net^
+||d1or04kku1mxl9.cloudfront.net^
+||d1oykxszdrgjgl.cloudfront.net^
+||d1p0vowokmovqz.cloudfront.net^
+||d1p3zboe6tz3yy.cloudfront.net^
+||d1p7gp5w97u7t7.cloudfront.net^
+||d1pdf4c3hchi80.cloudfront.net^
+||d1pn3cn3ri604k.cloudfront.net^
+||d1pvpz0cs1cjk8.cloudfront.net^
+||d1q4x2p7t0gq14.cloudfront.net^
+||d1qc76gneygidm.cloudfront.net^
+||d1qggq1at2gusn.cloudfront.net^
+||d1qk9ujrmkucbl.cloudfront.net^
+||d1qow5kxfhwlu8.cloudfront.net^
+||d1r3ddyrqrmcjv.cloudfront.net^
+||d1r90st78epsag.cloudfront.net^
+||d1rguclfwp7nc8.cloudfront.net^
+||d1rkd1d0jv6skn.cloudfront.net^
+||d1rkf0bq85yx06.cloudfront.net^
+||d1rp4yowwe587e.cloudfront.net^
+||d1rsh847opos9y.cloudfront.net^
+||d1s4mby8domwt9.cloudfront.net^
+||d1sboz88tkttfp.cloudfront.net^
+||d1sfclevshpbro.cloudfront.net^
+||d1sjz3r2x2vk2u.cloudfront.net^
+||d1sowp9ayjro6j.cloudfront.net^
+||d1spc7iz1ls2b1.cloudfront.net^
+||d1sqvt36mg3t1b.cloudfront.net^
+||d1sytkg9v37f5q.cloudfront.net^
+||d1t38ngzzazukx.cloudfront.net^
+||d1t671k72j9pxc.cloudfront.net^
+||d1t8it0ywk3xu.cloudfront.net^
+||d1tizxwina1bjc.cloudfront.net^
+||d1tt3ye7u0e0ql.cloudfront.net^
+||d1tttug1538qv1.cloudfront.net^
+||d1twn22x8kvw17.cloudfront.net^
+||d1u1byonn4po0b.cloudfront.net^
+||d1uae3ok0byyqw.cloudfront.net^
+||d1ue5xz1lnqk0d.cloudfront.net^
+||d1ugiptma3cglb.cloudfront.net^
+||d1ukp4rdr0i4nl.cloudfront.net^
+||d1upt0rqzff34l.cloudfront.net^
+||d1ux93ber9vlwt.cloudfront.net^
+||d1uzjiv6zzdlbc.cloudfront.net^
+||d1voskqidohxxs.cloudfront.net^
+||d1vqm5k0hezeau.cloudfront.net^
+||d1w24oanovvxvg.cloudfront.net^
+||d1w5452x8p71hs.cloudfront.net^
+||d1wbjksx0xxdn3.cloudfront.net^
+||d1wc0ojltqk24g.cloudfront.net^
+||d1wd81rzdci3ru.cloudfront.net^
+||d1wi563t0137vz.cloudfront.net^
+||d1wjz6mrey9f5v.cloudfront.net^
+||d1wv5x2u0qrvjw.cloudfront.net^
+||d1xdxiqs8w12la.cloudfront.net^
+||d1xivydscggob7.cloudfront.net^
+||d1xkyo9j4r7vnn.cloudfront.net^
+||d1xo0f2fdn5no0.cloudfront.net^
+||d1xw8yqtkk9ae5.cloudfront.net^
+||d1y3xnqdd6pdbo.cloudfront.net^
+||d1yaf4htak1xfg.cloudfront.net^
+||d1ybdlg8aoufn.cloudfront.net^
+||d1yeqwgi8897el.cloudfront.net^
+||d1ytalcrl612d7.cloudfront.net^
+||d1yyhdmsmo3k5p.cloudfront.net^
+||d1z1vj4sd251u9.cloudfront.net^
+||d1z2jf7jlzjs58.cloudfront.net^
+||d1z58p17sqvg6o.cloudfront.net^
+||d1zjpzpoh45wtm.cloudfront.net^
+||d1zjr9cc2zx7cg.cloudfront.net^
+||d1zrs4deyai5xm.cloudfront.net^
+||d1zw85ny9dtn37.cloudfront.net^
+||d1zw8evbrw553l.cloudfront.net^
+||d1zy4z3rd7svgh.cloudfront.net^
+||d1zzcae3f37dfx.cloudfront.net^
+||d200108c6x0w2v.cloudfront.net^
+||d204slsrhoah2f.cloudfront.net^
+||d205jrj5h1616x.cloudfront.net^
+||d20903hof2l33q.cloudfront.net^
+||d20kfqepj430zj.cloudfront.net^
+||d20nuqz94uw3np.cloudfront.net^
+||d20tam5f2v19bf.cloudfront.net^
+||d213cc9tw38vai.cloudfront.net^
+||d219kvfj8xp5vh.cloudfront.net^
+||d21f25e9uvddd7.cloudfront.net^
+||d21m5j4ptsok5u.cloudfront.net^
+||d21rudljp9n1rr.cloudfront.net^
+||d223xrf0cqrzzz.cloudfront.net^
+||d227cncaprzd7y.cloudfront.net^
+||d227n6rw2vv5cw.cloudfront.net^
+||d22ffr6srkd9zx.cloudfront.net^
+||d22lbkjf2jpzr9.cloudfront.net^
+||d22lo5bcpq2fif.cloudfront.net^
+||d22rmxeq48r37j.cloudfront.net^
+||d22sfab2t5o9bq.cloudfront.net^
+||d22xmn10vbouk4.cloudfront.net^
+||d22z575k8abudv.cloudfront.net^
+||d23a1izvegnhq4.cloudfront.net^
+||d23d7sc86jmil5.cloudfront.net^
+||d23guct4biwna6.cloudfront.net^
+||d23spca806c5fu.cloudfront.net^
+||d23xhr62nxa8qo.cloudfront.net^
+||d24502rd02eo9t.cloudfront.net^
+||d2483bverkkvsp.cloudfront.net^
+||d24g87zbxr4yiz.cloudfront.net^
+||d24iusj27nm1rd.cloudfront.net^
+||d24yj1kykxwq2x.cloudfront.net^
+||d25dfknw9ghxs6.cloudfront.net^
+||d25xkbr68qqtcn.cloudfront.net^
+||d261u4g5nqprix.cloudfront.net^
+||d264dxqvolp03e.cloudfront.net^
+||d26adrx9c3n0mq.cloudfront.net^
+||d26e5rmb2qzuo3.cloudfront.net^
+||d26p9ecwyy9zqv.cloudfront.net^
+||d26yfyk0ym2k1u.cloudfront.net^
+||d276dyxkw9wo01.cloudfront.net^
+||d27genukseznht.cloudfront.net^
+||d27gtglsu4f4y2.cloudfront.net^
+||d27pxpvfn42pgj.cloudfront.net^
+||d27qffx6rqb3qm.cloudfront.net^
+||d27tzcmp091qxd.cloudfront.net^
+||d27x9po2cfinm5.cloudfront.net^
+||d28exbmwuav7xa.cloudfront.net^
+||d28quk6sxoh2w5.cloudfront.net^
+||d28s7kbgrs6h2f.cloudfront.net^
+||d28u86vqawvw52.cloudfront.net^
+||d28uhswspmvrhb.cloudfront.net^
+||d28xpw6kh69p7p.cloudfront.net^
+||d2906506rwyvg2.cloudfront.net^
+||d29bsjuqfmjd63.cloudfront.net^
+||d29dbajta0the9.cloudfront.net^
+||d29dzo8owxlzou.cloudfront.net^
+||d29i6o40xcgdai.cloudfront.net^
+||d29mxewlidfjg1.cloudfront.net^
+||d2a80scaiwzqau.cloudfront.net^
+||d2bbq3twedfo2f.cloudfront.net^
+||d2bkkt3kqfmyo0.cloudfront.net^
+||d2bvfdz3bljcfk.cloudfront.net^
+||d2bxxk33t58v29.cloudfront.net^
+||d2byenqwec055q.cloudfront.net^
+||d2c4ylitp1qu24.cloudfront.net^
+||d2c8v52ll5s99u.cloudfront.net^
+||d2camyomzxmxme.cloudfront.net^
+||d2cgumzzqhgmdu.cloudfront.net^
+||d2cmh8xu3ncrj2.cloudfront.net^
+||d2d8qsxiai9qwj.cloudfront.net^
+||d2db10c4rkv9vb.cloudfront.net^
+||d2dkurdav21mkk.cloudfront.net^
+||d2dyjetg3tc2wn.cloudfront.net^
+||d2e30rravz97d4.cloudfront.net^
+||d2e7rsjh22yn3g.cloudfront.net^
+||d2edfzx4ay42og.cloudfront.net^
+||d2ei3pn5qbemvt.cloudfront.net^
+||d2ele6m9umnaue.cloudfront.net^
+||d2elslrg1qbcem.cloudfront.net^
+||d2enprlhqqv4jf.cloudfront.net^
+||d2er1uyk6qcknh.cloudfront.net^
+||d2ers4gi7coxau.cloudfront.net^
+||d2eyuq8th0eqll.cloudfront.net^
+||d2fbkzyicji7c4.cloudfront.net^
+||d2fbvay81k4ji3.cloudfront.net^
+||d2fhrdu08h12cc.cloudfront.net^
+||d2fmtc7u4dp7b2.cloudfront.net^
+||d2focgxak1cn74.cloudfront.net^
+||d2foi16y3n0s3e.cloudfront.net^
+||d2fsfacjuqds81.cloudfront.net^
+||d2g8ksx1za632p.cloudfront.net^
+||d2g9nmtuil60cb.cloudfront.net^
+||d2ga0x5nt7ml6e.cloudfront.net^
+||d2gc6r1h15ux9j.cloudfront.net^
+||d2ghscazvn398x.cloudfront.net^
+||d2glav2919q4cw.cloudfront.net^
+||d2h2t5pll64zl8.cloudfront.net^
+||d2h7xgu48ne6by.cloudfront.net^
+||d2h85i07ehs6ej.cloudfront.net^
+||d2ho1n52p59mwv.cloudfront.net^
+||d2hvwfg7vv4mhf.cloudfront.net^
+||d2i4wzwe8j1np9.cloudfront.net^
+||d2i55s0cnk529c.cloudfront.net^
+||d2it3a9l98tmsr.cloudfront.net^
+||d2izcn32j62dtp.cloudfront.net^
+||d2j042cj1421wi.cloudfront.net^
+||d2j71mqxljhlck.cloudfront.net^
+||d2jgbcah46jjed.cloudfront.net^
+||d2jgp81mjwggyr.cloudfront.net^
+||d2jp0uspx797vc.cloudfront.net^
+||d2jp87c2eoduan.cloudfront.net^
+||d2jtzjb71xckmj.cloudfront.net^
+||d2juccxzu13rax.cloudfront.net^
+||d2jw88zdm5mi8i.cloudfront.net^
+||d2k487jakgs1mb.cloudfront.net^
+||d2k7b1tjy36ro0.cloudfront.net^
+||d2k7gvkt8o1fo8.cloudfront.net^
+||d2kadvyeq051an.cloudfront.net^
+||d2kd9y1bp4zc6.cloudfront.net^
+||d2khpmub947xov.cloudfront.net^
+||d2kk0o3fr7ed01.cloudfront.net^
+||d2klx87bgzngce.cloudfront.net^
+||d2kpucccxrl97x.cloudfront.net^
+||d2ksh1ccat0a7e.cloudfront.net^
+||d2l3f1n039mza.cloudfront.net^
+||d2lahoz916es9g.cloudfront.net^
+||d2lmzq02n8ij7j.cloudfront.net^
+||d2lp70uu6oz7vk.cloudfront.net^
+||d2ltukojvgbso5.cloudfront.net^
+||d2lxammzjarx1n.cloudfront.net^
+||d2mic0r0bo3i6z.cloudfront.net^
+||d2mqdhonc9glku.cloudfront.net^
+||d2muzdhs7lpmo0.cloudfront.net^
+||d2mw3lu2jj5laf.cloudfront.net^
+||d2n2qdkjbbe2l7.cloudfront.net^
+||d2n726m6x5iwwx.cloudfront.net^
+||d2na2p72vtqyok.cloudfront.net^
+||d2nlytvx51ywh9.cloudfront.net^
+||d2nz8k4xyoudsx.cloudfront.net^
+||d2o03z2xnyxlz5.cloudfront.net^
+||d2o51l6pktevii.cloudfront.net^
+||d2ob4whwpjvvpa.cloudfront.net^
+||d2ohmkyg5w2c18.cloudfront.net^
+||d2ojfulajn60p5.cloudfront.net^
+||d2ov8ip31qpxly.cloudfront.net^
+||d2ovgc4ipdt6us.cloudfront.net^
+||d2oxs0429n9gfd.cloudfront.net^
+||d2oy22m6xey08r.cloudfront.net^
+||d2p3vqj5z5rdwv.cloudfront.net^
+||d2pdbggfzjbhzh.cloudfront.net^
+||d2pnacriyf41qm.cloudfront.net^
+||d2pspvbdjxwkpo.cloudfront.net^
+||d2pxbld8wrqyrk.cloudfront.net^
+||d2q52i8yx3j68p.cloudfront.net^
+||d2q7jbv4xtaizs.cloudfront.net^
+||d2q9y3krdwohfj.cloudfront.net^
+||d2qhg50jab93jy.cloudfront.net^
+||d2qn0djb6oujlt.cloudfront.net^
+||d2qnx6y010m4rt.cloudfront.net^
+||d2qz7ofajpstv5.cloudfront.net^
+||d2r2yqcp8sshc6.cloudfront.net^
+||d2r3rw91i5z1w9.cloudfront.net^
+||d2rsvcm1r8uvmf.cloudfront.net^
+||d2rx475ezvxy0h.cloudfront.net^
+||d2s31asn9gp5vl.cloudfront.net^
+||d2s9nyc35a225l.cloudfront.net^
+||d2sbzwmcg5amr3.cloudfront.net^
+||d2sffavqvyl9dp.cloudfront.net^
+||d2sn24mi2gn24v.cloudfront.net^
+||d2sp5g360gsxjh.cloudfront.net^
+||d2sucq8qh4zqzj.cloudfront.net^
+||d2t72ftdissnrr.cloudfront.net^
+||d2t7a3zbo166a9.cloudfront.net^
+||d2taktuuo4oqx.cloudfront.net^
+||d2tkdzior84vck.cloudfront.net^
+||d2tvgfsghnrkwb.cloudfront.net^
+||d2u2lv2h6u18yc.cloudfront.net^
+||d2u4fn5ca4m3v6.cloudfront.net^
+||d2u6dc21frjf6h.cloudfront.net^
+||d2uap9jskdzp2.cloudfront.net^
+||d2udkjdo48yngu.cloudfront.net^
+||d2uepos3ef6db0.cloudfront.net^
+||d2uhnetoehh304.cloudfront.net^
+||d2uy8iq3fi50kh.cloudfront.net^
+||d2uyi99y1mkn17.cloudfront.net^
+||d2v02itv0y9u9t.cloudfront.net^
+||d2va1d0hpla18n.cloudfront.net^
+||d2vmavw0uawm2t.cloudfront.net^
+||d2vorijeeka2cf.cloudfront.net^
+||d2vvyk8pqw001z.cloudfront.net^
+||d2vwl2vhlatm2f.cloudfront.net^
+||d2vwsmst56j4zq.cloudfront.net^
+||d2w92zbcg4cwxr.cloudfront.net^
+||d2werg7o2mztut.cloudfront.net^
+||d2wexw25ezayh1.cloudfront.net^
+||d2wpx0eqgykz4q.cloudfront.net^
+||d2x0u7rtw4p89p.cloudfront.net^
+||d2x19ia47o8gwm.cloudfront.net^
+||d2xng9e6gymuzr.cloudfront.net^
+||d2y8ttytgze7qt.cloudfront.net^
+||d2yeczd6cyyd0z.cloudfront.net^
+||d2ykons4g8jre6.cloudfront.net^
+||d2ywv53s25fi6c.cloudfront.net^
+||d2z51a9spn09cw.cloudfront.net^
+||d2zbpgxs57sg1k.cloudfront.net^
+||d2zcblk8m9mzq5.cloudfront.net^
+||d2zh7okxrw0ix.cloudfront.net^
+||d2zi8ra5rb7m89.cloudfront.net^
+||d2zv5rkii46miq.cloudfront.net^
+||d2zzazjvlpgmgi.cloudfront.net^
+||d301cxwfymy227.cloudfront.net^
+||d30sxnvlkawtwa.cloudfront.net^
+||d30tme16wdjle5.cloudfront.net^
+||d30ts2zph80iw7.cloudfront.net^
+||d30yd3ryh0wmud.cloudfront.net^
+||d313lzv9559yp9.cloudfront.net^
+||d31m6w8i2nx65e.cloudfront.net^
+||d31mxuhvwrofft.cloudfront.net^
+||d31o2k8hutiibd.cloudfront.net^
+||d31ph8fftb4r3x.cloudfront.net^
+||d31rse9wo0bxcx.cloudfront.net^
+||d31s5xi4eq6l6p.cloudfront.net^
+||d31vxm9ubutrmw.cloudfront.net^
+||d31y1abh02y2oj.cloudfront.net^
+||d325d2mtoblkfq.cloudfront.net^
+||d32bug9eb0g0bh.cloudfront.net^
+||d32d89surjhks4.cloudfront.net^
+||d32h65j3m1jqfb.cloudfront.net^
+||d32hwlnfiv2gyn.cloudfront.net^
+||d32t6p7tldxil2.cloudfront.net^
+||d333p98mzatwjz.cloudfront.net^
+||d33fc9uy0cnxl9.cloudfront.net^
+||d33nui33dvl0el.cloudfront.net^
+||d33otidwg56k90.cloudfront.net^
+||d347nuc6bd1dvs.cloudfront.net^
+||d34cixo0lr52lw.cloudfront.net^
+||d34gjfm75zhp78.cloudfront.net^
+||d34opff713c3gh.cloudfront.net^
+||d34qb8suadcc4g.cloudfront.net^
+||d34rdvn2ky3gnm.cloudfront.net^
+||d34zwq0l4x27a6.cloudfront.net^
+||d3584kspbipfh3.cloudfront.net/cm/
+||d359wjs9dpy12d.cloudfront.net^
+||d35fnytsc51gnr.cloudfront.net^
+||d35kbxc0t24sp8.cloudfront.net^
+||d35ve945gykp9v.cloudfront.net^
+||d362plazjjo29c.cloudfront.net^
+||d36gnquzy6rtyp.cloudfront.net^
+||d36hsrzhv8pket.cloudfront.net^
+||d36s9tmu0jh8rd.cloudfront.net^
+||d36un5ytqxjgkq.cloudfront.net^
+||d36zfztxfflmqo.cloudfront.net^
+||d370hf5nfmhbjy.cloudfront.net^
+||d379fkejtn2clk.cloudfront.net^
+||d37abonb6ucrhx.cloudfront.net^
+||d37ax1qs52h69r.cloudfront.net^
+||d37byya7cvg7qr.cloudfront.net^
+||d37pempw0ijqri.cloudfront.net^
+||d37sevptuztre3.cloudfront.net^
+||d37tb4r0t9g99j.cloudfront.net^
+||d38190um0l9h9v.cloudfront.net^
+||d38b9p5p6tfonb.cloudfront.net^
+||d38goz54x5g9rw.cloudfront.net^
+||d38itq6vdv6gr9.cloudfront.net^
+||d38psrni17bvxu.cloudfront.net^
+||d38rrxgee6j9l3.cloudfront.net^
+||d396osuty6rfec.cloudfront.net^
+||d399jvos5it4fl.cloudfront.net^
+||d39hdzmeufnl50.cloudfront.net^
+||d39xxywi4dmut5.cloudfront.net^
+||d3a49eam5ump99.cloudfront.net^
+||d3a781y1fb2dm6.cloudfront.net^
+||d3aajkp07o1e4y.cloudfront.net^
+||d3ahinqqx1dy5v.cloudfront.net^
+||d3aiy6aqoa3ykz.cloudfront.net^
+||d3akmxskpi6zai.cloudfront.net^
+||d3asksgk2foh5m.cloudfront.net^
+||d3b2hhehkqd158.cloudfront.net^
+||d3b4u8mwtkp9dd.cloudfront.net^
+||d3bbyfw7v2aifi.cloudfront.net^
+||d3beefy8kd1pr7.cloudfront.net^
+||d3bfricg2zhkdf.cloudfront.net^
+||d3c3uihon9kmp.cloudfront.net^
+||d3c8j8snkzfr1n.cloudfront.net^
+||d3cesrg5igdcgt.cloudfront.net^
+||d3cl0ipbob7kki.cloudfront.net^
+||d3cod80thn7qnd.cloudfront.net^
+||d3cpib6kv2rja7.cloudfront.net^
+||d3cynajatn2qbc.cloudfront.net^
+||d3d0wndor0l4xe.cloudfront.net^
+||d3d54j7si4woql.cloudfront.net^
+||d3d9gb3ic8fsgg.cloudfront.net^
+||d3d9pt4go32tk8.cloudfront.net^
+||d3dq1nh1l1pzqy.cloudfront.net^
+||d3ec0pbimicc4r.cloudfront.net^
+||d3efeah7vk80fy.cloudfront.net^
+||d3ej838ds58re9.cloudfront.net^
+||d3ejxyz09ctey7.cloudfront.net^
+||d3ep3jwb1mgn3k.cloudfront.net^
+||d3eub2e21dc6h0.cloudfront.net^
+||d3evio1yid77jr.cloudfront.net^
+||d3f1m03rbb66gy.cloudfront.net^
+||d3f1wcxz2rdrik.cloudfront.net^
+||d3f4nuq5dskrej.cloudfront.net^
+||d3ff60r8himt67.cloudfront.net^
+||d3fkv551xkjrmm.cloudfront.net^
+||d3flai6f7brtcx.cloudfront.net^
+||d3frqqoat98cng.cloudfront.net^
+||d3g4s1p0bmuj5f.cloudfront.net^
+||d3g5ovfngjw9bw.cloudfront.net^
+||d3hfiiy55cbi5t.cloudfront.net^
+||d3hib26r77jdus.cloudfront.net^
+||d3hitamb7drqut.cloudfront.net^
+||d3hj4iyx6t1waz.cloudfront.net^
+||d3hs51abvkuanv.cloudfront.net^
+||d3hv9xfqzxy46o.cloudfront.net^
+||d3hyjqptbt9dpx.cloudfront.net^
+||d3hyoy1d16gfg0.cloudfront.net^
+||d3i28n8laz9lyd.cloudfront.net^
+||d3ikgzh4osba2b.cloudfront.net^
+||d3imksvhtbujlm.cloudfront.net^
+||d3ithbwcmjcxl7.cloudfront.net^
+||d3j3yrurxcqogk.cloudfront.net^
+||d3j7esvm4tntxq.cloudfront.net^
+||d3j9574la231rm.cloudfront.net^
+||d3jdulus8lb392.cloudfront.net^
+||d3jdzopz39efs7.cloudfront.net^
+||d3jzhqnvnvdy34.cloudfront.net^
+||d3kblkhdtjv0tf.cloudfront.net^
+||d3kd7yqlh5wy6d.cloudfront.net^
+||d3klfyy4pvmpzb.cloudfront.net^
+||d3kpkrgd3aj4o7.cloudfront.net^
+||d3l320urli0p1u.cloudfront.net^
+||d3lcz8vpax4lo2.cloudfront.net^
+||d3lk5upv0ixky2.cloudfront.net^
+||d3lliyjbt3afgo.cloudfront.net^
+||d3ln1qrnwms3rd.cloudfront.net^
+||d3lvr7yuk4uaui.cloudfront.net^
+||d3lw2k94jnkvbs.cloudfront.net^
+||d3m4hp4bp4w996.cloudfront.net^
+||d3m8nzcefuqu7h.cloudfront.net^
+||d3m9ng807i447x.cloudfront.net^
+||d3mr7y154d2qg5.cloudfront.net^
+||d3mshiiq22wqhz.cloudfront.net^
+||d3mzokty951c5w.cloudfront.net^
+||d3n3a4vl82t80h.cloudfront.net^
+||d3n9c6iuvomkjk.cloudfront.net^
+||d3nel6rcmq5lzw.cloudfront.net^
+||d3numuoibysgi8.cloudfront.net^
+||d3nvrqlo8rj1kw.cloudfront.net^
+||d3ohee25hhsn8j.cloudfront.net^
+||d3op2vgjk53ps1.cloudfront.net^
+||d3ou4areduq72f.cloudfront.net^
+||d3oy68whu51rnt.cloudfront.net^
+||d3p8w7to4066sy.cloudfront.net^
+||d3pe8wzpurrzss.cloudfront.net^
+||d3phzb7fk3uhin.cloudfront.net^
+||d3plnp2f9sfye5.cloudfront.net^
+||d3pvcolmug0tz6.cloudfront.net^
+||d3q33rbmdkxzj.cloudfront.net^
+||d3qeaw5w9eu3lm.cloudfront.net^
+||d3qgd3yzs41yp.cloudfront.net^
+||d3qilfrpqzfrg4.cloudfront.net^
+||d3qinhqny4thfo.cloudfront.net^
+||d3qttli028txpv.cloudfront.net^
+||d3qu0b872n4q3x.cloudfront.net^
+||d3qygewatvuv28.cloudfront.net^
+||d3rb9wasp2y8gw.cloudfront.net^
+||d3rjndf2qggsna.cloudfront.net^
+||d3rkkddryl936d.cloudfront.net^
+||d3rlh0lneatqqc.cloudfront.net^
+||d3rr3d0n31t48m.cloudfront.net^
+||d3rxqouo2bn71j.cloudfront.net^
+||d3s40ry602uhj1.cloudfront.net^
+||d3sdg6egu48sqx.cloudfront.net^
+||d3skqyr7uryv9z.cloudfront.net^
+||d3sof4x9nlmbgy.cloudfront.net^
+||d3t16rotvvsanj.cloudfront.net^
+||d3t3bxixsojwre.cloudfront.net^
+||d3t3lxfqz2g5hs.cloudfront.net^
+||d3t3z4teexdk2r.cloudfront.net^
+||d3t5ngjixpjdho.cloudfront.net^
+||d3t87ooo0697p8.cloudfront.net^
+||d3tfeohk35h2ye.cloudfront.net^
+||d3tfz9q9zlwk84.cloudfront.net^
+||d3tjml0i5ek35w.cloudfront.net^
+||d3tnmn8yxiwfkj.cloudfront.net^
+||d3tozt7si7bmf7.cloudfront.net^
+||d3tu4h3aa52h5s.cloudfront.net^
+||d3u43fn5cywbyv.cloudfront.net^
+||d3u598arehftfk.cloudfront.net^
+||d3ubdcv1nz4dub.cloudfront.net^
+||d3ud741uvs727m.cloudfront.net^
+||d3ugwbjwrb0qbd.cloudfront.net^
+||d3uqm14ppr8tkw.cloudfront.net^
+||d3uvwdhukmp6v9.cloudfront.net^
+||d3v3bqdndm4erx.cloudfront.net^
+||d3vnm1492fpnm2.cloudfront.net^
+||d3vp85u5z4wlqf.cloudfront.net^
+||d3vpf6i51y286p.cloudfront.net^
+||d3vsc1wu2k3z85.cloudfront.net^
+||d3vw4uehoh23hx.cloudfront.net^
+||d3x0jb14w6nqz.cloudfront.net^
+||d3zd5ejbi4l9w.cloudfront.net^
+||d415l8qlhk6u6.cloudfront.net^
+||d4bt5tknhzghh.cloudfront.net^
+||d4eqyxjqusvjj.cloudfront.net^
+||d4ngwggzm3w7j.cloudfront.net^
+||d5d3sg85gu7o6.cloudfront.net^
+||d5onopbfw009h.cloudfront.net^
+||d5wxfe8ietrpg.cloudfront.net^
+||d63a3au5lqmtu.cloudfront.net^
+||d6cto2pyf2ks.cloudfront.net^
+||d6deij4k3ikap.cloudfront.net^
+||d6l5p6w9iib9r.cloudfront.net^
+||d6sav80kktzcx.cloudfront.net^
+||d6wzv57amlrv3.cloudfront.net^
+||d7016uqa4s0lw.cloudfront.net^
+||d7dza8s7j2am6.cloudfront.net^
+||d7gse3go4026a.cloudfront.net^
+||d7jpk19dne0nn.cloudfront.net^
+||d7po8h5dek3wm.cloudfront.net^
+||d7tst6bnt99p2.cloudfront.net^
+||d8a69dni6x2i5.cloudfront.net^
+||d8cxnvx3e75nn.cloudfront.net^
+||d8dcj5iif1uz.cloudfront.net^
+||d8xy39jrbjbcq.cloudfront.net^
+||d91i6bsb0ef59.cloudfront.net^
+||d9b5gfwt6p05u.cloudfront.net^
+||d9c5dterekrjd.cloudfront.net^
+||d9qjkk0othy76.cloudfront.net^
+||d9yk47of1efyy.cloudfront.net^
+||da26k71rxh0kb.cloudfront.net^
+||da3uf5ucdz00u.cloudfront.net^
+||da5h676k6d22w.cloudfront.net^
+||dagd0kz7sipfl.cloudfront.net^
+||dal9hkyfi0m0n.cloudfront.net^
+||day13vh1xl0gh.cloudfront.net^
+||db033pq6bj64g.cloudfront.net^
+||db4zl9wffwnmb.cloudfront.net^
+||dba9ytko5p72r.cloudfront.net^
+||dbcdqp72lzmvj.cloudfront.net^
+||dbfv8ylr8ykfg.cloudfront.net^
+||dbujksp6lhljo.cloudfront.net^
+||dby7kx9z9yzse.cloudfront.net^
+||dc08i221b0n8a.cloudfront.net^
+||dc5k8fg5ioc8s.cloudfront.net^
+||dcai7bdiz5toz.cloudfront.net^
+||dcbbwymp1bhlf.cloudfront.net^
+||dczhbhtz52fpi.cloudfront.net^
+||ddlh1467paih3.cloudfront.net^
+||ddmuiijrdvv0s.cloudfront.net^
+||ddrvjrfwnij7n.cloudfront.net^
+||ddvbjehruuj5y.cloudfront.net^
+||ddvfoj5yrl2oi.cloudfront.net^
+||de2nsnw1i3egd.cloudfront.net^
+||desgao1zt7irn.cloudfront.net^
+||dew9ckzjyt2gn.cloudfront.net^
+||df80k0z3fi8zg.cloudfront.net^
+||dfiqvf0syzl54.cloudfront.net^
+||dfqcp2awt0947.cloudfront.net^
+||dfwbfr2blhmr5.cloudfront.net^
+||dg0hrtzcus4q4.cloudfront.net^
+||dg6gu9iqplusg.cloudfront.net^
+||dgw7ae5vrovs7.cloudfront.net^
+||dgyrizngtcfck.cloudfront.net^
+||dh6dm31izb875.cloudfront.net^
+||dhcmni6m2kkyw.cloudfront.net^
+||dhrhzii89gpwo.cloudfront.net^
+||di028lywwye7s.cloudfront.net^
+||dihutyaiafuhr.cloudfront.net^
+||dilvyi2h98h1q.cloudfront.net^
+||dita6jhhqwoiz.cloudfront.net^
+||divekcl7q9fxi.cloudfront.net^
+||diz4z73aymwyp.cloudfront.net^
+||djm080u34wfc5.cloudfront.net^
+||djnaivalj34ub.cloudfront.net^
+||djr4k68f8n55o.cloudfront.net^
+||djv99sxoqpv11.cloudfront.net^
+||djvby0s5wa7p7.cloudfront.net^
+||djz9es32qen64.cloudfront.net^
+||dk4w74mt6naf3.cloudfront.net^
+||dk57sacpbi4by.cloudfront.net^
+||dkgp834o9n8xl.cloudfront.net^
+||dkm6b5q0h53z4.cloudfront.net^
+||dkre4lyk6a9bt.cloudfront.net^
+||dktr03lf4tq7h.cloudfront.net^
+||dkus30wj6f84p.cloudfront.net^
+||dkvtbjavjme96.cloudfront.net^
+||dkyp75kj7ldlr.cloudfront.net^
+||dl37p9e5e1vn0.cloudfront.net^
+||dl5ft52dtazxd.cloudfront.net^
+||dlem1deojpcg7.cloudfront.net^
+||dlh8c15zw7vfn.cloudfront.net^
+||dlmr7hpb2buud.cloudfront.net^
+||dlne6myudrxi1.cloudfront.net^
+||dlooqrhebkjoh.cloudfront.net^
+||dlrioxg1637dk.cloudfront.net^
+||dltqxz76sim1s.cloudfront.net^
+||dltvkwr7nbdlj.cloudfront.net^
+||dlvds9i67c60j.cloudfront.net^
+||dlxk2dj1h3e83.cloudfront.net^
+||dm0acvguygm9h.cloudfront.net^
+||dm0ly9ibqkdxn.cloudfront.net^
+||dm0t14ck8pg86.cloudfront.net^
+||dm62uysn32ppt.cloudfront.net^
+||dm7gsepi27zsx.cloudfront.net^
+||dm7ii62qkhy9z.cloudfront.net^
+||dmeq7blex6x1u.cloudfront.net^
+||dmg0877nfcvqj.cloudfront.net^
+||dmkdtkad2jyb9.cloudfront.net^
+||dmmzkfd82wayn.cloudfront.net^
+||dmz3nd5oywtsw.cloudfront.net^
+||dn0qt3r0xannq.cloudfront.net^
+||dn3uy6cx65ujf.cloudfront.net^
+||dn6rwwtxa647p.cloudfront.net^
+||dn9uzzhcwc0ya.cloudfront.net^
+||dne6rbzy5csnc.cloudfront.net^
+||dnf06i4y06g13.cloudfront.net^
+||dnhfi5nn2dt67.cloudfront.net^
+||dnks065sb0ww6.cloudfront.net^
+||dnre5xkn2r25r.cloudfront.net^
+||do6256x8ae75.cloudfront.net^
+||do69ll745l27z.cloudfront.net^
+||dodk8rb03jif9.cloudfront.net^
+||dojx47ab4dyxi.cloudfront.net^
+||doo9gpa5xdov2.cloudfront.net^
+||dp45nhyltt487.cloudfront.net^
+||dpd9yiocsyy6p.cloudfront.net^
+||dpirwgljl6cjp.cloudfront.net^
+||dpjlvaveq1byu.cloudfront.net^
+||dpsq2uzakdgqz.cloudfront.net^
+||dq3yxnlzwhcys.cloudfront.net^
+||dqhi3ea93ztgv.cloudfront.net^
+||dqv45r33u0ltv.cloudfront.net^
+||dr3k6qonw2kee.cloudfront.net^
+||dr6su5ow3i7eo.cloudfront.net^
+||dr8pk6ovub897.cloudfront.net^
+||drbccw04ifva6.cloudfront.net^
+||drda5yf9kgz5p.cloudfront.net^
+||drf8e429z5jzt.cloudfront.net^
+||drulilqe8wg66.cloudfront.net^
+||ds02gfqy6io6i.cloudfront.net^
+||ds88pc0kw6cvc.cloudfront.net^
+||dsb6jelx4yhln.cloudfront.net^
+||dscex7u1h4a9a.cloudfront.net^
+||dsghhbqey6ytg.cloudfront.net^
+||dsh7ky7308k4b.cloudfront.net^
+||dsnymrk0k4p3v.cloudfront.net^
+||dsuyzexj3sqn9.cloudfront.net^
+||dtakdb1z5gq7e.cloudfront.net^
+||dtmm9h2satghl.cloudfront.net^
+||dtq9oy2ckjhxu.cloudfront.net^
+||dtu2kitmpserg.cloudfront.net^
+||dtv5loup63fac.cloudfront.net^
+||dtv5ske218f44.cloudfront.net^
+||dtyry4ejybx0.cloudfront.net^
+||du01z5hhojprz.cloudfront.net^
+||du0pud0sdlmzf.cloudfront.net^
+||du2uh7rq0r0d3.cloudfront.net^
+||due5a6x777z0x.cloudfront.net^
+||dufai4b1ap33z.cloudfront.net^
+||dupcczkfziyd3.cloudfront.net^
+||duqamtr9ifv5t.cloudfront.net^
+||duz64ud8y8urc.cloudfront.net^
+||duzt6rhr7wo8p.cloudfront.net^
+||dv663fc06d35i.cloudfront.net^
+||dv7t7qyvgyrt5.cloudfront.net^
+||dvc8653ec6uyk.cloudfront.net^
+||dvl8xapgpqgc1.cloudfront.net^
+||dvmdwmnyj3u4h.cloudfront.net^
+||dw55pg05c2rl5.cloudfront.net^
+||dw7vmlojkx16k.cloudfront.net^
+||dw9uc6c6b8nwx.cloudfront.net^
+||dwd11wtouhmea.cloudfront.net^
+||dwebwj8qthne8.cloudfront.net^
+||dwene4pgj0r33.cloudfront.net^
+||dwnm2295blvjq.cloudfront.net^
+||dwr3zytn850g.cloudfront.net^
+||dxgo95ahe73e8.cloudfront.net^
+||dxh2ivs16758.cloudfront.net^
+||dxj6cq8hj162l.cloudfront.net^
+||dxk5g04fo96r4.cloudfront.net^
+||dxkkb5tytkivf.cloudfront.net^
+||dxprljqoay4rt.cloudfront.net^
+||dxz454z33ibrc.cloudfront.net^
+||dy5t1b0a29j1v.cloudfront.net^
+||dybxezbel1g44.cloudfront.net^
+||dyh1wzegu1j6z.cloudfront.net^
+||dyj8pbcnat4xv.cloudfront.net^
+||dykwdhfiuha6l.cloudfront.net^
+||dyodrs1kxvg6o.cloudfront.net^
+||dyrfxuvraq0fk.cloudfront.net^
+||dyv1bugovvq1g.cloudfront.net^
+||dz6uw9vrm7nx6.cloudfront.net^
+||dzbkl37t8az8q.cloudfront.net^
+||dzdgfp673c1p0.cloudfront.net^
+||dzr4v2ld8fze2.cloudfront.net^
+||dzu5p9pd5q24b.cloudfront.net^
+||dzupi9b81okew.cloudfront.net^
+||dzv1ekshu2vbs.cloudfront.net^
+||dzxr711a4yw31.cloudfront.net^
+! Google Hosted scripts
+||googleapis.com/qmftp/$script
+! Anti-Adblock
+||anti-adblock.herokuapp.com^
+
+! *** easylist:easylist/easylist_thirdparty_popup.txt ***
+||6angebot.ch^$popup,third-party
+||ad.22betpartners.com^$popup
+||adblockerapp.info^$popup
+||adblockultra.com^$popup
+||adcleanerpage.com^$popup
+||adfreevision.com^$popup
+||adobe.com/td_redirect.html$popup
+||adrotator.se^$popup
+||ads.planetwin365affiliate.com^$popup,third-party
+||adserving.unibet.com^$popup
+||affiliates.fantasticbet.com^$popup
+||amazing-dating.com^$popup
+||americascardroom.eu/ads/$popup,third-party
+||anymoviesearch.com^$popup
+||avatrade.io/ads/$popup
+||avengeradblocker.com^$popup
+||awin1.com/cread.php?s=$popup
+||babesroulette.com^$popup
+||banners.livepartners.com^$popup
+||best-global-apps.com^$popup
+||bestanimegame.com^$popup
+||bet365.com^*affiliate=$popup
+||bets.to^$popup
+||bettingpremier.com/direct/$popup
+||betzone2000.com^$popup
+||brazzers.com/click/$popup
+||browsekeeper.com^$popup
+||canyoublockit.com^$popup,third-party
+||cdn.optmd.com^$popup
+||chaturbate.com/affiliates/$popup
+||cityscapestab.com^$popup
+||consali.com^$popup
+||cute-cursor.com^$popup
+||cyberprivacy.pro^$popup
+||dafabet.odds.am^$popup
+||dianomi.com^$popup
+||downloadoperagx.com/ef/$popup
+||eatcells.com/land/$popup
+||error-alerts.com^$popup
+||evanetwork.com^$popup
+||fast-vpn.me^$popup
+||fastclick.net^$popup
+||fewrandomfacts.com^$popup
+||firstload.com^$popup
+||firstload.de^$popup
+||fleshlight.com/?link=$popup
+||fwmrm.net^$popup
+||get-express-vpn.online^$popup
+||get-express-vpns.com^$popup
+||getflowads.net^$popup
+||ggbet-online.net^$popup
+||ggbetapk.com^$popup,third-party
+||ggbetery.net^$popup
+||ggbetpromo.com^$popup
+||global-adblocker.com^$popup
+||go.aff.estrelabetpartners.com^$popup
+||go.camterest.com^$popup
+||google.com/favicon.ico$popup
+||greenadblocker.com^$popup
+||insideoftech.com^$popup,third-party
+||iqbroker.com/land/$popup
+||iqbroker.com/lp/*?aff=$popup
+||iqoption.com/land/$popup
+||iyfsearch.com^$popup
+||laborates.com^$popup
+||lbank.com/partner_seo/$popup
+||loadx.me^$popup
+||lpquizzhubon.com^$popup
+||luckyforbet.com^$popup
+||mackeeperaffiliates.com^$popup
+||mymusichistory4u.com^$popup
+||ntrfr.leovegas.com^$popup
+||ourcoolstories.com^$popup
+||paid.outbrain.com^$popup
+||partners.livesportnet.com^$popup
+||premium-news-for.me^$popup
+||profitsurvey365.live^$popup
+||promo.20bet.partners^$popup
+||promo.pixelsee.app^$popup
+||quantumadblocker.com^$popup
+||record.affiliatelounge.com^$popup
+||redir.tradedoubler.com/projectr/$popup
+||serve.prestigecasino.com^$popup
+||serve.williamhillcasino.com^$popup
+||skiptheadz.com^$popup
+||skiptheadz.info^$popup
+||skipvideoads.com^$popup
+||smartblocker.org^$popup
+||somebestgamesus.com^$popup
+||streamblocked.com^$popup
+||teenfinder.com/landing/$popup,third-party
+||theonlineuserprotection.com/download-guard/$popup
+||theonlineuserprotector.com/download-guard/$popup
+||track.afrsportsbetting.com^$popup
+||track.kinetiksoft.com^$popup
+||track.livesportnet.com^$popup
+||tracker.loropartners.com^$popup
+||ublockpop.com^$popup
+||ultimate-ad-eraser.com^$popup
+||unibet.co.uk/*affiliate$popup
+||verdecasino-offers.com^$popup
+||vid-adblocker.com^$popup
+||vulkan-bt.com^$popup
+||whataboutnews.com^$popup
+||windadblocker.com^$popup
+||xn--2zyr5r.biz^$popup
+||xxxhd.cc/ads/$popup
+||yield.app^*utm_source=$popup
+
+! *** easylist:easylist_adult/adult_thirdparty.txt ***
+||18onlygirls.tv/wp-content/banners/
+||4fcams.com/in/?track=$subdocument,third-party
+||4tube.com/iframe/$third-party
+||69games.xxx/ajax/skr?
+||a.xvidxxx.com^
+||a1tb.com/300x250$subdocument
+||adsnot.1javguru.xyz^
+||adsnot.1supjav.xyz^
+||adult.xyz^$script,third-party
+||adultfriendfinder.com/go/$third-party
+||adultfriendfinder.com/piclist?
+||aff-jp.dxlive.com^
+||affiliate.dtiserv.com^
+||affiliates.cupidplc.com^
+||affiliates.thrixxx.com^
+||allanalpass.com/visitScript/
+||amarotic.com/Banner/$third-party
+||amateur.tv/cacheableAjax/$subdocument
+||amateur.tv/freecam/$third-party
+||amateurporn.net^$third-party
+||asg.aphex.me^
+||asg.bhabhiporn.pro^
+||asg.irontube.net^
+||asg.prettytube.net^
+||asianbutterflies.com/potd/
+||asktiava.com/promotion/
+||assinclusive.com/cyonix.html
+||assinclusive.com/linkstxt2.html
+||atlasfiles.com^*/sp3_ep.js$third-party
+||avatraffic.com/b/
+||awempt.com/embed/
+||awestat.com^*/banner/
+||babes-mansion.s3.amazonaws.com^
+||bangdom.com^$third-party
+||banner.themediaplanets.com^
+||banners.adultfriendfinder.com^
+||banners.alt.com^
+||banners.amigos.com^
+||banners.fastcupid.com^
+||banners.fuckbookhookups.com^
+||banners.nostringsattached.com^
+||banners.outpersonals.com^
+||banners.passion.com^
+||banners.payserve.com^
+||banners.videosecrets.com^
+||bannershotlink.perfectgonzo.com^
+||bans.bride.ru^
+||bit.ly^$domain=boyfriendtv.com
+||blacksonblondes.com/banners/
+||bnr.playmagazines.com^
+||bongacams.com/promo.php
+||bongacash.com/tools/promo.php
+||br.fling.com^
+||br.realitykings.com^
+||brazzers.com/ads/
+||bullz-eye.com/blog_ads/
+||bullz-eye.com/images/ads/
+||bursa.conxxx.pro^
+||byxxxporn.com/300x250.html
+||c3s.bionestraff.pro^
+||cam-content.com/banner/$third-party
+||cams.com/go/$third-party
+||cams.enjoy.be^
+||camsaim.com/in/
+||camsoda.com/promos/
+||cash.femjoy.com^
+||cdn3.hentaihand.com^
+||cdn5.hentaihaven.fun^
+||chaturbate.com/affiliates/
+||chaturbate.com/creative/
+||chaturbate.com/in/
+||cldup.com^$domain=androidadult.com
+||cmix.org/teasers/
+||creamgoodies.com/potd/
+||creative.141live.com^
+||creative.favy.cam^
+||creative.imagetwistcams.com^$subdocument
+||creative.kbnmnl.com^
+||creative.myasian.live/widgets/
+||creative.myavlive.com^
+||creative.ohmycams.com^
+||creative.strip.chat^
+||creative.stripchat.com^
+||creative.stripchat.global^
+||creative.strpjmp.com^
+||creative.usasexcams.com^
+||crumpet.xxxpornhd.pro^
+||ddfcash.com^$third-party
+||deliver.ptgncdn.com^
+||dnk2wr2ch6zxa.cloudfront.net^
+||dontblock.jaaavjavs1.buzz^
+||dontblock.jav1jav2.buzz^
+||dq06u9lt5akr2.cloudfront.net^
+||elitepaysites.com/ae-banners/
+||endorico.com/js/pu_zononi.js
+||endorico.com/Smartlink/
+||ero-labs.com/adIframe/
+||eroan.xyz/wp-comment/?form=$subdocument
+||erokuni.xyz/wp-comment/?form=$subdocument
+||f5w.prettytube.net^
+||fansign.streamray.com^
+||faphouse.com/widget/
+||faphouse.com^$subdocument,third-party
+||faptrex.com/fire/popup.js
+||faxifa.xyz^
+||fbooksluts.com^$third-party
+||feeds.videosz.com^
+||fleshlight.com/images/banners/
+||fpcplugs.com/do.cgi?widget=
+||free.srcdn.xyz^
+||freesexcam365.com/in/
+||games-direct.skynetworkcdn.com^$subdocument,third-party
+||gateway-banner.eravage.com^
+||geobanner.adultfriendfinder.com^
+||geobanner.alt.com^
+||geobanner.blacksexmatch.com^$third-party
+||geobanner.fuckbookhookups.com^$third-party
+||geobanner.hornywife.com^
+||geobanner.sexfinder.com^$third-party
+||gettubetv.com^$third-party
+||gfrevenge.com/vbanners/
+||girlsfuck-tube.com/js/aobj.js
+||go.clicknplay.to^
+||go.telorku.xyz/hls/iklan.js
+||go2cdn.org/brand/$third-party
+||hardbritlads.com/banner/
+||hardcoreluv.com/hmt.gif
+||hcjs.nv7s.com/dewijzyo/
+||hdpornphotos.com/images/728x180_
+||hdpornphotos.com/images/banner_
+||hentaiboner.com/wp-content/uploads/2022/07/hentai-boner-gif.gif
+||hentaikey.com/images/banners/
+||hime-books.xyz/wp-comment/?form=$subdocument
+||hodun.ru/files/promo/
+||homoactive.tv/banner/
+||hostave3.net/hvw/banners/
+||hosted.x-art.com/potd$third-party
+||hostedmovieupdates.aebn.net^$domain=datingpornstar.com
+||hosting24.com/images/banners/$third-party
+||hotcaracum.com/banner/
+||hotkinkyjo.xxx/resseler/banners/
+||hotmovies.com/custom_videos.php?
+||iframe.adultfriendfinder.com^$third-party
+||ifriends.net^$subdocument,third-party
+||ihookup.com/configcreatives/
+||images.elenasmodels.com/Upload/$third-party
+||imctransfer.com^*/promo/
+||istripper.com^$third-party,domain=~istripper.eu
+||javguru.gggsss.site^
+||jo.hqbang.com^
+||kau.li/yad.js
+||kenny-glenn.net^*/longbanner_$third-party
+||lacyx.com/images/banners/
+||ladyboygoo.com/lbg/banners/
+||lb-69.com/pics/
+||lifeselector.com/iframetool/$third-party
+||livejasmin.com^$third-party,domain=~awempire.com
+||livesexasian.com^$subdocument,third-party
+||loveme.com^$third-party
+||lovense.com/UploadFiles/Temp/$third-party
+||makumva.all-usanomination.com^
+||media.eurolive.com^$third-party
+||media.mykodial.com^$third-party
+||metartmoney.com^$third-party
+||mrskin.com/affiliateframe/
+||mrvids.com/network/
+||mtoon.com/banner/
+||my-dirty-hobby.com/?sub=$third-party
+||mycams.com/freechat.php?
+||mykocam.com/js/feeds.js
+||mysexjourney.com/revenue/
+||naked.com/promos/
+||nakedswordcashcontent.com/videobanners/
+||naughtycdn.com/public/iframes/
+||netlify.app/tags/ninja_$subdocument
+||nnteens.com/ad$subdocument
+||notads.1gi3rir.xyz^
+||nubiles.net/webmasters/promo/
+||nude.hu/html/$third-party
+||openadultdirectory.com/banner-
+||otcash.com/images/
+||partner.loveplanet.ru^
+||parts.akibablog.net^$subdocument
+||partwithner.com/partners/
+||pcash.imlive.com^
+||pimpandhost.com/site/trending-banners
+||pinklabel.com/live-banners?
+||pinkvisualgames.com/?revid=
+||pirogad.tophosting101.com^
+||placeholder.com/300x250?
+||placeholder.com/728x90?
+||placeholder.com/900x250?
+||pod.xpress.com^
+||pokazuwka.com/popu/
+||popteen.pro/300x250.php
+||porndeals.com^$subdocument,third-party
+||porngamespass.com/iframes/
+||prettyincash.com/premade/
+||privatamateure.com/promotion/
+||private.com/banner/
+||promo.blackdatehookup.com^
+||promo.cams.com^
+||promos.camsoda.com^
+||promos.gpniches.com^
+||promos.meetlocals.com^
+||ptcdn.mbicash.nl^
+||pub.nakedreel.com^
+||pussycash.com/content/banners/
+||pussysaga.com/gb/
+||r18.com/track/
+||rabbitporno.com/friends/
+||rabbitporno.com/iframes/
+||realitykings.com/vbanners/
+||rhinoslist.com/sideb/get_laid-300.gif
+||rss.dtiserv.com^
+||ruscams.com/promo/
+||s3t3d2y8.afcdn.net^
+||saboom.com.pccdn.com^*/banner/
+||sakuralive.com/dynamicbanner/
+||scoreland.com/banner/
+||sexei.net^$subdocument,xmlhttprequest
+||sexgangsters.com/sg-banners/
+||sexhay69.top/ads/
+||sexmature.fun/myvids/
+||sextubepromo.com/ubr/
+||sexy.fling.com^$third-party
+||sexycams.com/exports/$third-party
+||share-image.com/borky/
+||shemalenova.com/smn/banners/
+||simonscans.com/banner/
+||skeeping.com/live/$subdocument,third-party
+||skyprivate.com^*/external/$third-party
+||sleepgalleries.com/recips/$third-party
+||smartmovies.net/promo_$third-party
+||smpop.icfcdn.com^$third-party
+||smyw.org/smyw_anima_1.gif
+||snrcash.com/profilerotator/$third-party
+||st.ipornia.com^$third-party
+||static.twincdn.com/special/license.packed
+||static.twincdn.com/special/script.packed
+||streamen.com/exports/$third-party
+||stripchat.com/api/external/
+||stripchat.com^*/widget/$third-party
+||swurve.com/affiliates/
+||t.c-c.one/b/
+||t.c-c.one/z/
+||target.vivid.com^$third-party
+||tbib.org/gaming/
+||teenspirithentai.com^$third-party
+||theporndude.com/graphics/tpd-$third-party
+||thescript.javfinder.xyz^
+||tlavideo.com/affiliates/$third-party
+||tm-banners.gamingadult.com^
+||tm-offers.gamingadult.com^
+||tongabonga.com/nudegirls
+||tool.acces-vod.com^
+||tools.bongacams.com^$third-party
+||track.xtrasize.nl^$third-party
+||turbolovervidz.com/fling/
+||upsellit.com/custom/$third-party
+||uselessjunk.com^$domain=yoloselfie.com
+||vfreecams.com^$third-party
+||vid.prettytube.net^
+||vidz.com/promo_banner/$third-party
+||vigrax.pl/banner/
+||virtualhottie2.com/cash/tools/banners/
+||visit-x.net/promo/$third-party
+||vodconcepts.com^*/banners/
+||vs4.com/req.php?z=
+||vtbe.to/vtu_$script
+||vy1.click/wp-comment/?form=$subdocument
+||webcams.com/js/im_popup.php?
+||webcams.com/misc/iframes_new/
+||widget.faphouse.com^$third-party
+||widgets.comcontent.net^
+||widgets.guppy.live^$third-party
+||wp-script.com/img/banners/
+||wtfdontblock.theporndudes.xyz^
+||xcabin.net/b/$third-party
+||xlgirls.com/banner/$third-party
+||xtrasize.pl/banner/
+||you75.youpornsexvideos.com^
+
+! *** easylist:easylist_adult/adult_thirdparty_popup.txt ***
+||ad.pornimg.xyz^$popup
+||adultfriendfinder.com/banners/$popup,third-party
+||adultfriendfinder.com/go/$popup,third-party
+||bongacams8.com/track?$popup
+||brazzerssurvey.com^$popup
+||cam4.com/?$popup
+||cam4.com^*&utm_source=$popup
+||camonster.com/landing/$popup,third-party
+||clicks.istripper.com/ref.php?$popup,third-party
+||crmt.livejasmin.com^$popup
+||crpop.livejasmin.com^$popup
+||crprt.livejasmin.com^$popup
+||fantasti.cc/ajax/gw.php?$popup
+||fapcandy.com^$popup,third-party
+||flirthits.com/landing/$popup
+||go.xhamsterlive.com^$popup
+||hdporn.to^$popup,third-party
+||hentaiheroes.com/landing/$popup,third-party
+||icgirls.com^$popup
+||imlive.com/wmaster.ashx?$popup,third-party
+||info-milfme.com/landing/$popup
+||ipornia.com/scj/cgi/out.php?scheme_id=$popup,third-party
+||jasmin.com^$popup,third-party
+||join.whitegfs.com^$popup
+||landing1.brazzersnetwork.com^$popup
+||letstryanal.com/track/$popup,third-party
+||livecams.com^$popup
+||livehotty.com/landing/$popup,third-party
+||livejasmin.com^$popup,third-party
+||mrskin.com/?_$popup
+||offersuperhub.com/landing/$popup,third-party
+||porngames.adult^*=$popup,third-party
+||pornoh.info^$popup
+||prelanding3.cuntempire.com/?utm_$popup
+||tgp1.brazzersnetwork.com^$popup
+||tm-offers.gamingadult.com^$popup
+||tour.mrskin.com^$popup,third-party
+||zillastream.com/api/$popup
+!----------------------Specific advert blocking filters-----------------------!
+! *** easylist:easylist/easylist_specific_block.txt ***
+/asgg.php$domain=ghostbin.me|paste.fo
+/assets/bn/movie.jpg$image,domain=vidstream.pro
+||0xtracker.com/assets/advertising/
+||123.manga1001.top^
+||123animehub.cc/final
+||1337x.*/images/x28.jpg
+||1337x.*/images/x2x8.jpg
+||2merkato.com/images/banners/
+||2oceansvibe.com/?custom=takeover
+||4f.to/spns/
+||aboutmyarea.co.uk/images/imgstore/
+||ad.animehub.ac^
+||ad.doubleclick.net/ddm/clk/$domain=ad.doubleclick.net
+||ad.imp.joins.com^
+||ad.itweb.co.za^
+||ad.khan.co.kr^
+||ad.kimcartoon.si^
+||ad.kissanime.co^
+||ad.kissanime.com.ru^
+||ad.kissanime.org.ru^
+||ad.kissanime.sx^
+||ad.kissasian.com.ru^
+||ad.kissasian.es^
+||ad.kisscartoon.nz^
+||ad.kisscartoon.sh^
+||ad.kisstvshow.ru^
+||ad.norfolkbroads.com^
+||adblock-tester.com/banners/
+||adrama.to/bbb.php
+||ads-api.stuff.co.nz^
+||ads.audio.thisisdax.com^
+||adsbb.depositfiles.com^
+||adultswim.com/ad/
+||afloat.ie/images/banners/
+||afr.com/assets/europa.
+||aiimgvlog.fun/ad$subdocument
+||allkeyshop.com/blog/wp-content/uploads/allkeyshop_background_
+||allmonitors24.com/ads-
+||amazon.com/aan/$subdocument
+||amazonaws.com/cdn.mobverify.com
+||amazonaws.com/jsstore/$domain=babylonbee.com
+||amazonaws.com^$domain=downloadpirate.com|hexupload.net|krunkercentral.com|uploadhaven.com
+||amcdn.co.za/scripts/javascript/dfp.js
+||americanlookout.com////
+||americanlookout.com/29-wE/
+||androidauth.wpengine.com/wp-json/api/advanced_placement/api-$domain=androidauthority.com
+||animeheaven.ru/api/pop
+||animeland.tv/salapi2/
+||animesuge.to/E/aircraftmighty.com/
+||anisearch.com/amazon
+||aontent.powzers.lol^
+||apkmody.io/ads
+||armyrecognition.com/images/stories/customer/
+||artdaily.cc/banners/
+||asgg.ghostbin.me^
+||assets.presearch.com/backgrounds/
+||atoplay.com/js/rtads.js
+||atptour.com^*/sponsors/
+||audiotag.info/images/banner_
+||aurn.com/wp-content/banners/
+||aveherald.com/images/banners/
+||b.cdnst.net/javascript/amazon.js$script,domain=speedtest.net
+||b.w3techs.com^
+||backgrounds.wetransfer.net$image
+||backgrounds.wetransfer.net/*.mp4$media
+||bahamaslocal.com/img/banners/
+||bbci.co.uk/plugins/dfpAdsHTML/
+||beap.gemini.yahoo.com^
+||beforeitsnews.com/img/banner_
+||benjamingroff.com/uploads/images/ads/
+||bernama.com/storage/banner/
+||bestblackhatforum.com/images/my_compas/
+||bestlittlesites.com/plugins/advertising/getad/
+||bioinformatics.org/images/ack_banners/
+||bit.com.au/scripts/js_$script
+||bitcotasks.com/je.php
+||bitcotasks.com/yo.php
+||bizjournals.com/static/dist/js/gpt.min.js
+||blbclassic.org/assets/images/*banners/
+||blsnet.com/plugins/advertising/getad/
+||blue.ktla.com^
+||bontent.powzers.lol^
+||bordeaux.futurecdn.net^
+||borneobulletin.com.bn/wp-content/banners/
+||boxing-social.com^*/takeover/
+||brighteon.tv/Assets/ARF/
+||brudirect.com/images/banners/
+||bugsfighter.com/wp-content/uploads/2020/07/malwarebytes-banner.jpg
+||bullchat.com/sponsor/
+||bunnycdn.ru/assets/_bnx/$domain=fmovies.to
+||c21media.net/wp-content/plugins/sam-images/
+||cafonline.com/image/upload/*/sponsors/
+||calguns.net/images/ad
+||calmclinic.com/srv/
+||cdn.http.anno.channel4.com/m/1/$media,domain=uktvplay.co.uk
+||cdn.manga9.co^
+||cdn.shopify.com^*/assets/spreadrwidget.js$domain=jolinne.com
+||cdn77.org^$domain=pricebefore.com
+||cdnads.geeksforgeeks.org^
+||cdnpure.com/static/js/ads-
+||celebjihad.com/celeb-jihad/pu_
+||celebstoner.com/assets/components/bdlistings/uploads/
+||celebstoner.com/assets/images/img/sidebar/$image
+||centent.stemplay.cc^
+||chasingcars.com.au/ads/
+||clarksvilleonline.com/cols/
+||cloudfront.net/ads/$domain=wdwmagic.com
+||cloudfront.net/j/wsj-prod.js$domain=wsj.com
+||cloudfront.net/transcode/storyTeller/$media,domain=amazon.ae|amazon.ca|amazon.cn|amazon.co.jp|amazon.co.uk|amazon.com|amazon.com.au|amazon.com.br|amazon.com.mx|amazon.com.tr|amazon.de|amazon.eg|amazon.es|amazon.fr|amazon.in|amazon.it|amazon.nl|amazon.pl|amazon.sa|amazon.se|amazon.sg
+||cloudfront.net^$domain=titantv.com
+||cloudfront.net^*/sponsors/$domain=pbs.org
+||coincheck.com/images/affiliates/
+||coingolive.com/assets/img/partners/
+||coins4days.com/*_ext_iframe/
+||content.powzerz.lol^
+||coolcast2.com/z-
+||coolors.co/ajax/get-ads
+||corvetteblogger.com/images/banners/
+||covertarget.com^*_*.php
+||creatives.livejasmin.com^
+||cricbuzz.com/api/adverts/
+||cricketireland.ie//images/sponsors/
+||cript.to/dlm.png
+||cript.to/z-
+||crn.com.au/scripts/js_$script
+||crunchy-tango.dotabuff.com^
+||cyberscoop.com/advertising/
+||d1lxz4vuik53pc.cloudfront.net^$domain=amazon.ae|amazon.ca|amazon.cn|amazon.co.jp|amazon.co.uk|amazon.com|amazon.com.au|amazon.com.br|amazon.com.mx|amazon.com.tr|amazon.de|amazon.eg|amazon.es|amazon.fr|amazon.in|amazon.it|amazon.nl|amazon.pl|amazon.sa|amazon.se|amazon.sg
+||daily-sun.com/assets/images/banner/
+||dailymail.co.uk^*/linkListItem-$domain=thisismoney.co.uk
+||dailymirror.lk/youmaylike
+||dailynews.lk/sites/default/files/pictures/BO-Banner-NEW.gif
+||data.angel.digital/images/b/$image
+||deltabravo.net/admax/
+||designtaxi.com/js/dt-seo.js
+||designtaxi.com/small-dt.php$subdocument
+||detectiveconanworld.com/images/support-us-brave.png
+||developer.mozilla.org/pong/
+||devopscon.io/session-qualification/$subdocument
+||dianomi.com/brochures.epl?
+||dianomi.com/click.epl
+||dictionary.com/adscripts/
+||digitalmediaworld.tv/images/banners/
+||diglloyd.com/js2/pub-wide2-ck.js
+||dirproxy.com/helper-js
+||dj1symwmxvldi.cloudfront.net/r/$image,domain=coderwall.com
+||dmtgvn.com/wrapper/js/manager.js$domain=rt.com
+||dmxleo.dailymotion.com^
+||dnslytics.com/images/ads/
+||domaintyper.com/Images/dotsitehead.png
+||dominicantoday.com/wp-content/themes/dominicantoday/banners/
+||dontent.powzers.lol^
+||draftkings.bbgi.com^$subdocument
+||drive.com.au/ads/
+||duplichecker.com/csds/
+||dyncdn.me/static/20/js/expla
+||e.cdngeek.com^
+||easymp3mix.com/js/re-ads-zone.js
+||ebay.com/scl/js/ScandalLoader.js
+||ebayrtm.com/rtm?RtmCmd*&enc=
+||ebayrtm.com/rtm?RtmIt
+||ebaystatic.com^*/ScandalJS-
+||ed2k.2x4u.de/mfc/
+||edge.ads.twitch.tv^
+||eentent.streampiay.me^
+||eevblog.com/images/comm/$image
+||elil.cc/pdev/
+||elil.cc/reqe.js
+||emoneyspace.com/b.php
+||engagesrvr.filefactory.com^
+||engine.fxempire.com^
+||engine.laweekly.com^
+||eteknix.com/wp-content/uploads/*skin
+||etxt.biz/data/rotations/
+||etxt.biz/images/b/
+||eurochannel.com/images/banners/
+||everythingrf.com/wallpaper_live/
+||exchangerates.org.uk/images/200x200_currency.gif
+||excnn.com/templates/anime/sexybookmark/js/popup.js
+||expatexchange.com/banner/
+||expats.cz/images/amedia/
+||facebook.com/network_ads_common
+||familylawweek.co.uk/bin_1/
+||fauceit.com/Roulette-(728x90).jpg
+||fentent.streampiay.fun^
+||fentent.streampiay.me^
+||file-upload.site/page.js
+||filehippo.com/best-recommended-apps^
+||filehippo.com/revamp.js
+||filemoon.*/js/baf.js
+||filemoon.*/js/dola.js
+||filemoon.*/js/skrrt.js
+||filerio.in/banners/
+||files.im/images/bbnr/
+||filmibeat.com/images/betindia.jpg
+||finviz.com/gfx/banner_
+||fishki.net/code?
+||fontent.powzers.lol^
+||footballtradedirectory.com/images/pictures/banner/
+||forabodiesonly.com/mopar/sidebarbanners/
+||fordforums.com.au/logos/
+||forum.miata.net/sp/
+||free-webhosts.com/images/a/
+||freebookspot.club/vernambanner.gif
+||freedownloadmanager.org/js/achecker.js
+||freeworldgroup.com/banner
+||funnyjunk.com/site/js/extra/pre
+||futbollatam.com/ads.js
+||fwcdn3.com^$domain=eonline.com
+||fwpub1.com^$domain=ndtv.com|ndtv.in
+||gamblingnewsmagazine.com/wp-content/uploads/*/ocg-ad-
+||gamecopyworld.com/*.php?
+||gamecopyworld.com/ddd/
+||gamecopyworld.com/js/pp.js
+||gamecopyworld.eu/ddd/
+||gamecopyworld.eu/js/pp.js
+||gamer.mmohuts.com^
+||ganjing.world/v1/cdkapi/
+||ganjingworld.com/pbjsDisplay.js
+||ganjingworld.com/v1s/adsserver/
+||generalblue.com/js/pages/shared/lazyads.min.js
+||gentent.streampiay.fun^
+||getconnected.southwestwifi.com/ads_video.xml
+||gocdkeys.com/images/background
+||gogoanime.me/zenny/
+||gontent.powzers.lol^
+||googlesyndication.com^$domain=blogto.com|youtube.com
+||govevents.com/display-file/
+||gpt.mail.yahoo.net/sandbox$subdocument,domain=mail.yahoo.com
+||graphicdesignforums.co.uk/banners/
+||greatandhra.com/images/landing/
+||grow.gab.com/galahad/
+||hamodia.co.uk/images/worldfirst-currencyconversion.jpg
+||hearstapps.com/moapt/moapt-hdm.latest.js
+||hentent.streampiay.fun^
+||hltv.org/partnerimage/$image
+||hltv.org/staticimg/*?ixlib=
+||holyfamilyradio.org/banners/
+||homeschoolmath.net/a/
+||horizonsunlimited.com/alogos/
+||hortidaily.com/b/
+||hostsearch.com/creative/
+||hotstar.com^*/midroll?
+||hotstar.com^*/preroll?
+||howtogeek.com/emv2/
+||howtogermany.com/images/bnr-
+||i-tech.com.au/media/wysiwyg/banner/
+||iamcdn.net/players/custom-banner.js
+||iamcdn.net/players/playhydraxs.min.js$domain=player-cdn.com
+||ianimes.cc/z-
+||ibb.co^$domain=ghostbin.me
+||ice.hockey/images/sponsoren/
+||iceinspace.com.au/iisads/
+||iconfinder.com/static/js/istock.js
+||idlebrain.com/images4/footer-
+||idlebrain.com/images5/main-
+||idlebrain.com/images5/sky-
+||idrive.com/include/images/idrive-120240.png
+||ientent.streampiay.fun^
+||ih1.fileforums.com^
+||ii.apl305.me/js/pop.js
+||illicium.web.money^$subdocument
+||illicium.wmtransfer.com^$subdocument
+||imagetwist.com/b9ng.js
+||imdb.com/_json/getads/
+||imgadult.com/ea2/
+||imgdrive.net/a78bc9401d16.js
+||imgdrive.net/anex/
+||imgdrive.net/ea/
+||imgtaxi.com/ea/
+||imgtaxi.com/ttb02673583fb.js
+||imgur.com^$domain=ghostbin.me|up-load.io
+||imgwallet.com/ea/
+||imp.accesstra.de^
+||indiadesire.com/bbd/
+||indiansinkuwait.com/Campaign/
+||infobetting.com/bookmaker/
+||inmanga.com/ads/
+||instagram.com/api/v1/injected_story_units/
+||intersc.igaming-service.io^$domain=hltv.org
+||investing.com/jp.php
+||ip-secrets.com/img/nv
+||islandecho.co.uk/wp-content/uploads/*Island-$image
+||isohunt.app/a/b.js
+||italiangenealogy.com/images/banners/
+||itweb.co.za/static/misc/toolbox/
+||itweb.co.za^*/sponsors
+||jamanetwork.com/AMA/AdTag
+||japfg-trending-content.uc.r.appspot.com^
+||jentent.streampiay.fun^
+||jobsora.com/img/banner/
+||jordantimes.com/accu/
+||jpg.church/quicknoisilyheadbites.js
+||js.mangajp.top^
+||js.syosetu.top^
+||jsdelivr.net/gh/$domain=chrome-stats.com|edge-stats.com|firefox-stats.com
+||kaas.am/hhapia/
+||kendrickcoleman.com/images/banners/
+||kentent.streampiay.fun^
+||kissanime.com.ru/api/pop*.php
+||kissanimes.net/30$subdocument
+||kissasians.org/banners/
+||kisscartoon.sh/api/pop.php
+||kissmanga.org/rmad.php
+||kitco.com/jscripts/popunders/
+||kitsune-rush.overbuff.com^
+||kitz.co.uk/files/jump2/
+||koreatimes.co.kr/ad/
+||kta.etherscan.com^
+||lagacetanewspaper.com/wp-content/uploads/banners/
+||lasentinel.net/static/img/promos/
+||lespagesjaunesafrique.com/bandeaux/
+||lifehack.org/Tm73FWA1STxF.js
+||linkedin.com/tscp-serving/
+||linkhub.icu/vendors/h.js
+||linkshare.pro/img/btc.gif
+||linuxtracker.org/images/dw.png
+||livescore.az/images/banners
+||lordchannel.com/adcash/
+||ltn.hitomi.la/zncVMEzbV/
+||lw.musictarget.com^
+||lycos.com/catman/
+||machineseeker.com/data/ofni/
+||mafvertizing.crazygames.com^
+||mail-ads.google.com^
+||mail.aol.com/d/gemini_api/?adCount=
+||manga1000.top/hjshds.js
+||manga1001.top/gdh/dd.js
+||manga18fx.com/js/main-v001.js
+||mangahub.io/iframe/
+||manhwascan.net/my2023/my2023
+||manytoon.com/script/$script
+||marineterms.com/images/banners/
+||marketscreener.com/content_openx.php
+||mas.martech.yahoo.com^$domain=mail.yahoo.com
+||masternodes.online/baseimages/
+||maxgames.com/img/sponsor_
+||mbauniverse.com/sites/default/files/shree.png
+||mediatrias.com/assets/js/vypopme.js
+||mediaupdate.co.za/banner/
+||megashare.website/js/safe.ob.min.js
+||mictests.com/myshowroom/view.php$subdocument
+||mobilesyrup.com/RgPSN0siEWzj.js
+||monkeygamesworld.com/images/banners/
+||montent.powzers.lol^
+||mp3fiber.com/*ml.jpg
+||mpgh.net/idsx2/
+||mrskin.com^$script,third-party,domain=~mrskincdn.com
+||musicatorrents.com^*/license.
+||musicatorrents.com^*/script.
+||musicstreetjournal.com/banner/
+||myabandonware.com/media/img/gog/
+||myanimelist.net/c/i/images/event/
+||mybrowseraddon.com/ads/core.js
+||myflixer.is/ajax/banner^
+||myflixer.is/ajax/banners^
+||myunique.info/wp-includes/js/pop.js
+||myvidster.com/js/myv_ad_camp2.php
+||n.gemini.yahoo.com^
+||nameproscdn.com/images/backers/
+||nativetimes.com/images/banners/
+||naturalnews.com/wp-content/themes/naturalnews-child/$script
+||navyrecognition.com/images/stories/customer/
+||nemosa.co.za/images/mad_ad.png
+||newkerala.com/banners/amazon
+||newsnow.co.uk/pharos.js
+||nontent.powzers.lol^
+||norwaypost.no/images/banners/
+||nrl.com/siteassets/sponsorship/
+||nrl.com^*/sponsors/
+||nu2.nu/gfx/sponsor/
+||nyaa.land/static/p2.jpg
+||nzherald.co.nz/pf/resources/dist/scripts/global-ad-script.js
+||observerbd.com/ad/
+||odrama.net/images/clicktoplay.jpg
+||ohmygore.com/ef_pub
+||onlineshopping.co.za/expop/
+||oontent.powzers.lol^
+||openstack.org/api/public/v1/sponsored-projects?
+||optics.org/banners/
+||outbrain.com^$domain=bgr.com|buzzfeed.com|dto.to|investing.com|mamasuncut.com|mangatoto.com|tvline.com
+||outlookads.live.com^
+||outputter.io/uploads/$subdocument
+||ownedcore.com/forums/ocpbanners/
+||pafvertizing.crazygames.com^
+||pahaplayers.click/ch/adcashdirect.php
+||pasteheaven.com/assets/images/banners/
+||pastemagazine.com/common/js/ads-
+||pastemytxt.com/download_ad.jpg
+||petrolplaza.net/AdServer/
+||phonearena.com/js/ops/taina.js
+||phuketwan.com/img/b/
+||picrew.me/vol/ads/
+||pimpandhost.com/mikakoki/
+||plagiarismdetector.net/img-pop/
+||plainenglish.io/assets/sponsors/
+||planetlotus.org/images/partners/
+||player.twitch.tv^$domain=go.theconomy.me
+||plutonium.cointelegraph.com^
+||poedb.tw/image/torchlight/
+||pons.com/assets/javascripts/modules-min/ad-utilities_
+||pons.com/assets/javascripts/modules-min/idm-ads_
+||pontent.powzers.lol^
+||ports.co.za/banners/
+||positivehealth.com/img/original/BannerAvatar/
+||positivehealth.com/img/original/TopicbannerAvatar/
+||povvldeo.lol/js/fpu3/
+||prebid-server.newsbreak.com^
+||presearch.com/affiliates|$xmlhttprequest
+||presearch.com/coupons|$xmlhttprequest
+||pressablecdn.com/wp-content/uploads/Site-Skin_update.gif$domain=bikebiz.com
+||prewarcar.com/*-banners/
+||prod-sponsoredads.mkt.zappos.com^
+||products.gobankingrates.com^
+||publicdomaintorrents.info/grabs/hdsale.png
+||publicdomaintorrents.info/rentme.gif
+||publicdomaintorrents.info/srsbanner.gif
+||pubsrv.devhints.io^
+||pururin.to/assets/js/pop.js
+||pwinsider.com/advertisement/
+||qontent.powzers.lol^
+||qrz.com/ads/
+||quora.com/ads/
+||radioreference.com/i/p4/tp/smPortalBanner.gif
+||rafvertizing.crazygames.com^
+||realitytvworld.com/includes/loadsticky.html
+||realpython.net/tag.js
+||receive-sms-online.info/img/banner_
+||red-shell.speedrun.com^
+||republicmonitor.com/images/lundy-placeholder.jpeg
+||rswebsols.com/wp-content/uploads/rsws-banners/
+||s.radioreference.com/sm/$image
+||s.yimg.com/zh/mrr/$image,domain=mail.yahoo.com
+||saabsunited.com/wp-content/uploads/*banner
+||sat-universe.com/wos2.png
+||sat-universe.com/wos3.gif
+||save-editor.com/b/in/ad/
+||sawfirstdelivery.com/master/delivery.js
+||sbfull.com/assets/jquery/jquery-3.2.min.js?
+||sbfull.com/js/mainpc.js
+||sciencefocus.com/pricecomparison/$subdocument
+||scoot.co.uk/delivery.php
+||scrolller.com/scrolller/affiliates/
+||search.brave.com/serp/v1/static/serp-js/paid/
+||search.brave.com/serp/v1/static/serp-js/shopping/
+||sedo.cachefly.net^$domain=~sedoparking.com
+||segmentnext.com/LhfdY3JSwVQ8.js
+||sermonaudio.com/images/sponsors/
+||sgtreport.com/wp-content/uploads/*Banner
+||sharecast.ws/cum.js
+||sharecast.ws/fufu.js
+||short-wave.info/html/adsense-
+||siberiantimes.com/upload/banners/
+||sicilianelmondo.com/banner/
+||slickdeals.net/ad-stats/
+||smallseotools.com/webimages/*.gif
+||smn-news.com/images/banners/
+||socket.streamable.com^
+||softcab.com/google.php?
+||solusi.cyou/assets/inject.js
+||sonichits.com/tf.php
+||sontent.powzers.lol^
+||sorcerers.net/images/aff/
+||soundcloud.com/audio-ads?
+||southfloridagaynews.com/images/banners/
+||spike-plant.valorbuff.com^
+||sportlemon24.com/img/301.jpg
+||sportshub.to/player-source/images/banners/
+||spox.com/daznpic/
+||srilankamirror.com/images/banners/
+||srware.net/iron/assets/img/av/
+||startpage.com/sp/adsense/
+||startpage.com/sp/cdn/*/TotalAdBlockAdultWidget.js
+||static.fastpic.org^$subdocument
+||staticflickr.com/ap/build/javascripts/prbd-$script,domain=flickr.com
+||steamanalyst.com/steeem/delivery/
+||storage.googleapis.com/cdn.newsfirst.lk/advertisements/$domain=newsfirst.lk
+||strcloud.club/mainstream
+||streamoupload.*/api/spots/$script
+||streams.tv/js/slidingbanner.js
+||streamsport.pro/hd/popup.php
+||strtpe.link/ppmain.js
+||stuff.co.nz/static/adnostic/
+||stuff.co.nz/static/stuff-adfliction/
+||sundayobserver.lk/sites/default/files/pictures/COVID19-Flash-1_0.gif
+||surfmusic.de/anz
+||survivalblog.com/marketplace/
+||survivalservers.com^$subdocument,domain=adfoc.us
+||szm.com/reklama
+||taadd.com/files/js/site_skin.js
+||taboola.com^$domain=independent.co.uk|outlook.live.com|technobuffalo.com
+||tampermonkey.net/s.js
+||techgeek365.com/advertisements/
+||techonthenet.com/javascript/pb.js
+||techporn.ph/wp-content/uploads/Ad-
+||techsparx.com/imgz/udemy/
+||thanks.viewfr.com/webroot/ads/adsterra/
+||thedailysheeple.com/images/banners/
+||thefinancialexpress.com.bd/images/rocket-250-250.png
+||theindependentbd.com/assets/images/banner/
+||thephuketnews.com/photo/banner/
+||theseoultimes.com/ST/banner/
+||thisgengaming.com/Scripts/widget2.aspx
+||timesnownews.com/dfpamzn.js
+||tontent.powzers.lol^
+||torrent911.ws/z-
+||torrenteditor.com/img/graphical-network-monitor.gif
+||torrentfreak.com/wp-content/banners/
+||totalcsgo.com/site-takeover/$image
+||tpc.googlesyndication.com^
+||traditionalmusic.co.uk/images/banners/
+||triangletribune.com/cache/sql/fba/
+||truck1.eu/_BANNERS_/
+||trucknetuk.com/phpBB2old/sponsors/
+||trumparea.com/_adz/
+||tubeoffline.com/itbimg/
+||tubeoffline.com/js/hot.min.js
+||tubeoffline.com/vpn.php
+||tubeoffline.com/vpn2.php
+||tubeoffline.com/vpnimg/
+||turbobit.net/pus/
+||twt-assets.washtimes.com^$script,domain=washingtontimes.com
+||ubuntugeek.com/images/ubuntu1.png
+||ukcampsite.co.uk/banners/
+||unmoor.com/config.json
+||userscript.zone/s.js
+||util-*.simply-hentai.com^
+||utilitydive.com/static/js/prestitial.js
+||uxmatters.com/images/sponsors/
+||v3cars.com/load-ads.php
+||vastz.b-cdn.net/hsr/HSR*.mp4
+||videogameschronicle.com/ads/
+||vidstream.pro/AB/pioneersuspectedjury.com/
+||vidzstore.com/popembed.php
+||vobium.com/images/banners/
+||voodc.com/avurcfan.js
+||vtube.to/api/spots/
+||wafvertizing.crazygames.com^
+||wall.vgr.com^
+||web-oao.ssp.yahoo.com/admax/
+||webcamtests.com/MyShowroom/view.php?
+||webstick.blog/images/images-ads/
+||welovemanga.one/uploads/bannerv.gif
+||widenetworks.net^$domain=flysat.com
+||wikihow.com/x/zscsucgm?
+||windows.net/banners/$domain=hortidaily.com
+||winxclub.com^*/dfp.js?
+||wonkychickens.org/data/statics/s2g/$domain=torrentgalaxy.to
+||worldofmods.com/wompush-init.js
+||wqah.com/images/banners/
+||wsj.com/asset/ace/ace.min.js
+||www.google.*/adsense/search/ads.js
+||x.castanet.net^
+||xboxone-hq.com/images/banners/
+||xda-developers.com/app/plugins/xda-kco-affiliate/
+||xinhuanet.com/s?
+||y3o.tv/nevarro/video-ads/$domain=yallo.tv
+||yahoo.com/m/gemini_api/
+||yahoo.com/pdarla/
+||yahoo.com/sdarla/
+||yellowpages.com.lb/uploaded/banners/
+||yimg.com/rq/darla/$domain=yahoo.com
+||ynet.co.il/gpt/
+||youtube.com/pagead/
+||ytconvert.me/pop.js
+||ytmp3.cc/js/inner.js
+||ytmp3.plus/ba
+||zillastream.com/api/spots/
+||zmescience.com/1u8t4y8jk6rm.js
+||zmovies.cc/bc1ea2a4e4.php
+/^https?:\/\/.*\.(club|bid|biz|xyz|site|pro|info|online|icu|monster|buzz|website|biz|re|casa|top|one|space|network|live|systems|ml|world|life|co)\/.*/$~image,~media,~subdocument,third-party,domain=123movies.net|1cloudfile.com|adblockstreamtape.art|adblockstreamtape.site|baomay01.com|bowfile.com|clipconverter.cc|cricplay2.xyz|desiupload.co|dood.la|dood.pm|dood.so|dood.to|dood.watch|dood.ws|dopebox.to|downloadpirate.com|drivebuzz.icu|embedstream.me|eplayvid.net|fmovies.ps|fmovies.to|gdriveplayer.us|gospeljingle.com|hexupload.net|hurawatch.at|kiss-anime.org|krunkercentral.com|movies2watch.tv|myflixer.it|myflixer.pw|myflixer.to|myflixer.today|myflixertv.to|powvideo.net|proxyer.org|scloud.online|sflix.to|skidrowcodex.net|streamtape.com|theproxy.ws|uptobhai.ink|vidbam.org|vidembed.cc|vidembed.io|videobin.co|vidlii.com|vidoo.org|vipbox.lc
+/^https?:\/\/[0-9a-z]{5,}\.com\/.*/$script,third-party,xmlhttprequest,domain=123movies.tw|19turanosephantasia.com|1cloudfile.com|20demidistance9elongations.com|745mingiestblissfully.com|9xupload.asia|adblockeronstape.me|adblockeronstreamtape.me|adblockeronstrtape.xyz|adblockplustape.xyz|adblockstreamtape.art|adblockstreamtape.fr|adblockstreamtape.site|adblocktape.online|adblocktape.store|adblocktape.wiki|allsport.icu|allsports.icu|animepl.xyz|antiadtape.com|aotonline.co|asianstream.pro|audaciousdefaulthouse.com|bowfile.com|clicknupload.to|cloudvideo.tv|coloredmanga.com|cr7sports.us|cut-y.net|daddylivehd.sx|dailyuploads.net|databasegdriveplayer.xyz|deltabit.co|dood.la|dood.pm|dood.re|dood.sh|dood.so|dood.to|dood.watch|dood.wf|dood.ws|dood.yt|doods.pro|dooood.com|dramacool.sr|drivebuzz.icu|ds2play.com|dslayeronline.com|dum.to|embedplayer.site|embedsb.com|embedsito.com|embedstream.me|engvideo.net|enjoy4k.xyz|eplayvid.net|evoload.io|f123movies.com|fembed-hd.com|fileclub.cyou|filemoon.sx|files.im|filmy4wap.ink|flexy.stream|fmovies.ps|footyhunter3.xyz|gameshdlive.xyz|gamovideo.com|gaybeeg.info|gdriveplayer.pro|givemenbastreams.com|gogoanimes.org|gogohd.net|goload.io|gomo.to|goodstream.org|greaseball6eventual20.com|hdtoday.ru|hexupload.net|housecardsummerbutton.com|hurawatch.at|ive.zone|kesini.in|kickassanime.ro|kickasstorrents.to|letsupload.io|linkhub.icu|linksafe.cc|livetvon.click|lookmyimg.com|luxubu.review|mangageko.com|mangareader.cc|mangareader.to|mangovideo.pw|maxsport.one|membed.net|meomeo.pw|mirrorace.org|mixdroop.bz|mixdroop.co|mixdrop.bz|mixdrop.ch|mixdrop.click|mixdrop.club|mixdrop.sx|mixdrop.to|mixdrops.xyz|mixdrp.co|movies2watch.tv|mp4upload.com|myflixer.to|nelion.me|noblocktape.com|nsw2u.org|onlinevideoconverter.com|ovagames.com|owodeuwu.xyz|pahaplayers.click|papahd.club|pcgamestorrents.com|pouvideo.cc|proxyer.org|putlocker-website.com|reputationsheriffkennethsand.com|rintor.space|rojadirecta.direct|scloud.online|send.cm|sflix.to|shavetape.cash|skidrowcodex.net|smallencode.me|soccerstreamslive.co|sportshighlights.club|stapadblockuser.art|stapadblockuser.click|stapadblockuser.info|stapadblockuser.xyz|stape.fun|stapewithadblock.beauty|stapewithadblock.monster|stapewithadblock.xyz|stayonline.pro|strcloud.in|streamadblocker.com|streamadblocker.store|streamadblocker.xyz|streamingsite.net|streamlare.com|streamnoads.com|streamta.pe|streamta.site|streamtape.com|streamtape.to|streamtape.xyz|streamtapeadblock.art|streamtapeadblockuser.art|streamtapeadblockuser.homes|streamtapeadblockuser.monster|streamtapeadblockuser.xyz|strikeout.ws|strtape.cloud|strtape.tech|strtapeadblock.club|strtapeadblocker.xyz|strtapewithadblock.art|strtapewithadblock.xyz|supervideo.tv|tapeantiads.com|tapeblocker.com|tapenoads.com|tapewithadblock.com|tapewithadblock.org|telyn610zoanthropy.com|thepiratebay0.org|theproxy.ws|thevideome.com|toxitabellaeatrebates306.com|un-block-voe.net|upbam.org|upload-4ever.com|upload.do|uproxy.to|upstream.to|uptobhai.ink|uqload.co|uqload.io|userscloud.com|v-o-e-unblock.com|vidbam.org|vido.lol|vidshar.org|vidsrc.me|vidsrc.stream|vipleague.im|vipleague.st|voe-unblock.net|voe.bar|voe.sx|voeun-block.net|voeunbl0ck.com|voeunblck.com|voeunblk.com|voeunblock.com|vostfree.online|vudeo.io|vudeo.net|vumoo.to|watch-free.tv|watchkobe.info|watchserieshd.live|x2download.com|yesmovies.mn|youtube4kdownloader.com
+/^https?:\/\/[0-9a-z]{8,}\.xyz\/.*/$third-party,xmlhttprequest,domain=1link.club|2embed.to|apiyoutube.cc|bestmp3converter.com|clicknupload.red|clicknupload.to|daddyhd.com|dood.wf|gameshdlive.xyz|hitstreams.live|mp4upload.com|poscitech.click|poscitech.com|sportcast.life|sportskart.click|streamhub.to|streamvid.net|tvshows88.live|uploadbank.com|uqload.io|wecast.to|worldstreams.click
+/\/[0-9a-f]{32}\/invoke\.js/$script,third-party
+/^https?:\/\/www\..*.com\/[a-z]{1,}\.js$/$script,third-party,domain=deltabit.co|nzbstars.com|papahd.club|vostfree.online
+! url.rw popups
+||url.rw/*&a=
+||url.rw/*&mid=
+! Fixes
+@@||cdn.plyvdo.live/scripts/$script
+@@||freeplayervideo.com^$subdocument
+@@||gogoplay5.com^$subdocument
+@@||gomoplayer.com^$subdocument
+@@||lshstream.xyz/hls/$xmlhttprequest
+@@||msubload.com/sub/$xmlhttprequest
+/^https?:\/\/.*(com|net|top|xyz)\/(bundle|warning|style|bootstrap|brand|reset|jquery-ui|styles|error|logo|index|favicon|star|header)\.(png|css)\?[A-Za-z0-9]{30,}.*/$third-party
+/^https?:\/\/[0-9a-z]{5,}\.(digital|website|life|guru|space|uno|cfd)\/[a-z0-9]{6,}\//$script,third-party,xmlhttprequest,domain=~127.0.0.1|~bitrix24.life|~ccc.ac|~jacksonchen666.com|~lemmy.world|~localhost|~mempool.space|~scribble.ninja|~scribble.website|~spacepub.space|~traineast.co.uk
+/^https?:\/\/cdn\.[0-9a-z]{3,6}\.xyz\/[a-z0-9]{8,}\.js$/$script,third-party
+! Buff sites
+||frameperfect.speedrun.com^
+||junkrat-tire.overbuff.com^
+! prebid specific
+||breitbart.com/t/assets/js/prebid
+||bustle.com^*/prebid-
+||jwplatform.com/libraries/tdeymorh.js
+||purexbox.com/javascript/gn/prebid-
+||wsj.net/pb/pb.js
+! firework
+||fireworkapi1.com^$domain=boldsky.com
+! In-page video advertising.
+||anyclip.com^$third-party,domain=~dictionary.com|~heute.at|~video.timeout.com
+||api.dailymotion.com^$domain=philstarlife.com
+||api.fw.tv^
+||avantisvideo.com^$third-party
+||blockchain.info/explorer-gateway/advertisements
+||brid.tv^$script,domain=67hailhail.com|deepdaledigest.com|forevergeek.com|geordiebootboys.com|hammers.news|hitc.com|molineux.news|nottinghamforest.news|rangersnews.uk|realitytitbit.com|spin.com|tbrfootball.com|thechelseachronicle.com|thefocus.news|thepinknews.com|washingtonexaminer.com
+||caffeine.tv/embed.js
+||cdn.ex.co^$third-party
+||cdn.thejournal.ie/media/hpto/$image
+||channelexco.com/player/$third-party
+||connatix.com^$third-party,domain=~accuweather.com|~elnuevoherald.com|~huffpost.com|~loot.tv|~miamiherald.com|~sacbee.com
+||delivery.vidible.tv/jsonp/
+||dywolfer.de^
+||elements.video^$third-party
+||embed.comicbook.com^$subdocument
+||embed.ex.co^$third-party
+||embed.sendtonews.com^$third-party
+||fqtag.com^$third-party
+||fwcdn1.com/js/fwn.js
+||fwcdn1.com/js/storyblock.js
+||g.ibtimes.sg/sys/js/minified-video.js
+||geo.dailymotion.com/libs/player/$script,domain=mb.com.ph|philstarlife.com
+||go.trvdp.com^
+||gpv.ex.co^$third-party
+||jwpcdn.com^$script,domain=bgr.com|decider.com|dexerto.com|zimbio.com
+||jwplayer.com^$domain=americansongwriter.com|dexerto.com|gamesradar.com|ginx.tv|infoworld.com|kiplinger.com|soulbounce.com|spokesman-recorder.com|tennis.com|thestreet.com|tomshardware.com|variety.com|whathifi.com
+||live.primis.tech^$third-party
+||minute.ly^$third-party
+||minutemedia-prebid.com^$third-party
+||minutemediaservices.com^$third-party
+||play.springboardplatform.com^
+||playbuzz.com/embed/$script,third-party
+||playbuzz.com/player/$script,third-party
+||player.avplayer.com^$third-party
+||player.ex.co^$third-party
+||player.sendtonews.com^$third-party
+||players.brightcove.net^$script,domain=businessinsider.com.au|gizmodo.com.au|kotaku.com.au|lifehacker.com.au|pedestrian.tv
+||playoncenter.com^$third-party
+||playwire.com/bolt/js/$script,third-party
+||rumble.com^$domain=tiphero.com
+||sonar.viously.com^$domain=~aufeminin.com|~melty.fr
+||sportrecs.com/redirect/embed/
+||tldw.me^$third-party
+||ultimedia.com/js/common/smart.js$script,third-party
+||vidazoo.com/basev/$script,third-party
+||video-streaming.ezoic.com^
+||vidora.com^$third-party
+||viewdeos.com^$script,third-party
+||voqally.com/hub/app/
+||vplayer.newseveryday.com^
+||www-idm.com/wp-content/uploads/2022/02/bitcoin.png
+||zype.com^$third-party,domain=bossip.com|hiphopwired.com|madamenoire.com
+! streamplay
+||centent.streamp1ay.
+||cintent.streanplay.
+! Test (Webkit Mobile/Desktop for Youtube)
+@@||youtube.com/get_video_info?$xmlhttprequest,domain=music.youtube.com|tv.youtube.com
+||m.youtube.com/get_midroll_$domain=youtube.com
+! temp disabled, affecting some extensions/browsers
+||www.youtube.com/get_midroll_$domain=youtube.com
+||youtube.com/get_video_info?*adunit$~third-party
+! bit.ly
+/^https?:\/\/.*bit(ly)?\.(com|ly)\//$domain=1337x.to|cryptobriefing.com|eztv.io|eztv.tf|eztv.yt|fmovies.taxi|fmovies.world|limetorrents.info|megaup.net|mrunlock.kim|newser.com|sendit.cloud|torlock.com|uiz.io|userscloud.com|vev.red|vidbull.tv|vidop.icu|vidup.io|yourbittorrent2.com
+! Torrent/Pirate sites /sw.js
+/^https?:\/\/.*\/.*(sw[0-9a-z._-]{1,6}|\.notify\.).*/$script,domain=1337x.to|cashurl.in|clicknupload.click|cloudvideo.tv|downloadpirate.com|fmovies.taxi|fmovies.world|hurawatch.at|igg-games.com|indishare.org|linksly.co|megaup.net|mixdrop.ag|mixdrop.ch|mp3-convert.org|nutritioninsight.com|ouo.press|pcgamestorrents.com|pcgamestorrents.org|powvideo.net|powvldeo.cc|primewire.sc|proxyer.org|sendit.cloud|sendspace.com|shrinke.me|shrinkhere.xyz|solarmovie.to|theproxy.ws|uiz.io|up-load.io|upload.ac|uploadever.com|uploadproper.net|uploadrar.com|uploadrive.com|uplovd.com|upstream.to|userscloud.com|vidbull.tv|vidoza.co|vidoza.net|vidup.io|vumoo.life|xtits.com|yourbittorrent2.com|ziperto.com
+/^https?:\/\/.*\/sw\.js\?[a-zA-Z0-9%]{50,}/$script,~third-party
+! sw.js
+/sw.js$script,domain=filechan.org|hotfile.io|lolabits.se|megaupload.nz|openload.cc|rapidshare.nu|share-online.is
+! https://ww1.123watchmovies.co/episode/euphoria-season-2-episode-6/
+! vidoza.net
+$image,script,subdocument,third-party,xmlhttprequest,domain=vidoza.co|vidoza.net
+@@$generichide,domain=vidoza.co|vidoza.net
+@@||ajax.googleapis.com/ajax/libs/$script,domain=vidoza.co|vidoza.net
+@@||cdn.vidoza.co/js/$script,domain=vidoza.co|vidoza.net
+@@||cdnjs.cloudflare.com/ajax/libs/$script,domain=vidoza.co|vidoza.net
+! govid.co
+$script,third-party,xmlhttprequest,domain=govid.co
+@@||ajax.googleapis.com/ajax/libs/$script,domain=govid.co
+! canyoublockit.com
+@@||akamaiedge.net^$domain=canyoublockit.com
+@@||cloudflare.com^$script,stylesheet,domain=canyoublockit.com
+@@||fluidplayer.com^$script,stylesheet,domain=canyoublockit.com
+@@||googleapis.com^$script,stylesheet,domain=canyoublockit.com
+@@||hwcdn.net^$domain=canyoublockit.com
+|http://$image,script,stylesheet,subdocument,third-party,xmlhttprequest,domain=canyoublockit.com
+|https://$image,script,stylesheet,subdocument,third-party,xmlhttprequest,domain=canyoublockit.com
+! shink
+@@||ajax.googleapis.com/ajax/libs/$script,domain=shink.me|shon.xyz
+@@||cloudflare.com/ajax/$stylesheet,domain=shink.me|shon.xyz
+@@||maxcdn.bootstrapcdn.com^$stylesheet,domain=shink.me|shon.xyz
+|http://$image,script,stylesheet,subdocument,third-party,xmlhttprequest,domain=shink.me|shon.xyz
+|https://$image,script,stylesheet,subdocument,third-party,xmlhttprequest,domain=shink.me|shon.xyz
+! up-4ever.com
+$script,stylesheet,third-party,xmlhttprequest,domain=up-4ever.net
+@@||ajax.googleapis.com^$script,domain=up-4ever.net
+@@||connect.facebook.net^$script,domain=up-4ever.net
+@@||fonts.googleapis.com^$stylesheet,domain=up-4ever.net
+@@||maxcdn.bootstrapcdn.com^$stylesheet,domain=up-4ever.net
+@@||up4ever.download^$domain=up-4ever.net
+! hitomi.la
+$script,third-party,domain=hitomi.la
+! urlcash.net
+|http://$script,xmlhttprequest,domain=urlcash.net
+|https://$script,xmlhttprequest,domain=urlcash.net
+! gelbooru.com
+@@||gelbooru.com^$generichide
+||gelbooru.com*/license.$script
+||gelbooru.com*/tryt.$script
+||gelbooru.com/halloween/
+! bc.vc
+|http://$script,third-party,xmlhttprequest,domain=bc.vc
+|https://$script,third-party,xmlhttprequest,domain=bc.vc
+! damimage.com, imagedecode.com, imageteam.org
+$media,domain=damimage.com|imagedecode.com|imageteam.org
+|http://$image,script,third-party,xmlhttprequest,domain=damimage.com|imagedecode.com|imageteam.org
+|https://$image,script,third-party,xmlhttprequest,domain=damimage.com|imagedecode.com|imageteam.org
+! abcvideo.cc
+$script,third-party,xmlhttprequest,domain=abcvideo.cc
+! ouo
+$script,third-party,xmlhttprequest,domain=ouo.io|ouo.press
+||ouo.io/js/*.js?
+||ouo.io/js/pop.
+||ouo.press/js/pop.
+! Imgbox
+$script,third-party,domain=imgbox.com
+@@||ajax.googleapis.com^$script,domain=imgbox.com
+! TPB
+$image,script,stylesheet,subdocument,third-party,xmlhttprequest,domain=pirateproxy.live|thehiddenbay.com|thepiratebay.org|thepiratebay10.org
+$webrtc,websocket,xmlhttprequest,domain=pirateproxy.live|thehiddenbay.com|thepiratebay.org|thepiratebay10.org
+@@||apibay.org^$script,xmlhttprequest,domain=thepiratebay.org
+@@||jsdelivr.net^$script,domain=thepiratebay.org
+@@||thepiratebay.*/static/js/details.js$domain=pirateproxy.live|thehiddenbay.com|thepiratebay.org
+@@||thepiratebay.*/static/js/prototype.js$domain=pirateproxy.live|thehiddenbay.com|thepiratebay.org
+@@||thepiratebay.*/static/js/scriptaculous.js$domain=thepiratebay.org
+@@||thepiratebay.org/*.php$csp,~third-party
+@@||thepiratebay.org/static/main.js$script,~third-party
+@@||torrindex.net^$image,script,stylesheet,domain=thepiratebay.org
+||thepirate-bay3.org/banner_
+||thepiratebay.$script,domain=pirateproxy.live|thehiddenbay.com|thepiratebay.org
+||thepiratebay.*/static/$subdocument
+||thepiratebay10.org/static/js/UYaf3EPOVwZS3PP.js
+! Yavli.com
+||aupetitparieur.com//
+||beforeitsnews.com//
+||bigleaguepolitics.com//
+||canadafreepress.com///
+||concomber.com//
+||conservativefiringline.com//
+||mamieastuce.com//
+||meilleurpronostic.fr//
+||patriotnationpress.com//
+||populistpress.com//
+||reviveusa.com//
+||thegatewaypundit.com//
+||thelibertydaily.com//
+||toptenz.net//
+||westword.com//
+! Yavli.com (regex)
+/^https?:\/\/(.+?\.)?ipatriot\.com[\/]{1,}.*[a-zA-Z0-9]{9,}\/[a-zA-Z0-9]{6,}\/.*/$image,domain=ipatriot.com
+/^https?:\/\/(.+?\.)?letocard\.fr[\/]{1,}.*[a-zA-Z0-9]{3,7}\/[a-zA-Z0-9]{6,}\/.*/$image,domain=letocard.fr
+/^https?:\/\/(.+?\.)?letocard\.fr\/[a-zA-Z0-9]{3,7}\/[a-zA-Z0-9]{6,}\/.*/$image,domain=letocard.fr
+/^https?:\/\/(.+?\.)?lovezin\.fr[\/]{1,}.*[a-zA-Z0-9]{7,9}\/[a-zA-Z0-9]{10,}\/.*/$image,domain=lovezin.fr
+/^https?:\/\/(.+?\.)?naturalblaze\.com\/wp-content\/uploads\/.*[a-zA-Z0-9]{14,}\.*/$image,domain=naturalblaze.com
+/^https?:\/\/(.+?\.)?newser\.com[\/]{1,}.*[a-zA-Z0-9]{3,7}\/[a-zA-Z0-9]{6,}\/.*/$image,domain=newser.com
+/^https?:\/\/(.+?\.)?rightwingnews\.com[\/]{1,9}.*[a-zA-Z0-9]{8,}\/[a-zA-Z0-9]{6,}\/.*/$image,domain=rightwingnews.com
+/^https?:\/\/(.+?\.)?topminceur\.fr\/[a-zA-Z0-9]{6,}\/[a-zA-Z0-9]{3,}\/.*/$image,domain=topminceur.fr
+/^https?:\/\/(.+?\.)?vitamiiin\.com\/[\/][\/a-zA-Z0-9]{3,}\/[a-zA-Z0-9]{6,}\/.*/$image,domain=vitamiiin.com
+/^https?:\/\/(.+?\.)?writerscafe\.org[\/]{1,}.*[a-zA-Z0-9]{3,7}\/[a-zA-Z0-9]{6,}\/.*/$image,domain=writerscafe.org
+/^https?:\/\/.*\.(com|net|org|fr)\/[A-Za-z0-9]{1,}\/[A-Za-z0-9]{1,}\/[A-Za-z0-9]{2,}\/.*/$image,domain=allthingsvegas.com|aupetitparieur.com|beforeitsnews.com|bigleaguepolitics.com|canadafreepress.com|concomber.com|conservativefiringline.com|dailylol.com|ipatriot.com|mamieastuce.com|meilleurpronostic.fr|miaminewtimes.com|naturalblaze.com|patriotnationpress.com|populistpress.com|thegatewaypundit.com|thelibertydaily.com|toptenz.net|vitamiiin.com|westword.com|wltreport.com|writerscafe.org
+! webrtc-ads
+$webrtc,domain=ack.net|allthetests.com|azvideo.net|champion.gg|clicknupload.link|colourlovers.com|csgolounge.com|dispatch.com|fastplay.to|go4up.com|janjua.pw|janjua.tv|jpost.com|megaup.net|netdna-storage.com|ouo.io|ouo.press|rlslog.net|sourceforge.net|spanishdict.com|telegram.com|torlock.icu|torlock2.com|uptobox.com|uptobox.eu|uptobox.fr|uptobox.link|vidtodo.com|yts.gs|yts.mx
+! websocket-ads
+$websocket,domain=4archive.org|allthetests.com|boards2go.com|colourlovers.com|fastpic.ru|fileone.tv|filmlinks4u.is|imagefap.com|keepvid.com|megaup.net|olympicstreams.me|pocketnow.com|pornhub.com|pornhubthbh7ap3u.onion|powvideo.net|roadracerunner.com|shorte.st|tribune.com.pk|tune.pk|vcpost.com|vidmax.com|vidoza.net|vidtodo.com
+! IP address
+! CSP filters
+$csp=script-src 'self' '*' 'unsafe-inline',domain=pirateproxy.live|thehiddenbay.com|downloadpirate.com|thepiratebay10.org|ukpass.co|linksmore.site
+$csp=worker-src 'none',domain=torlock.com|alltube.pl|alltube.tv|centrum-dramy.pl|coinfaucet.eu|crictime.com|crictime.is|doodcdn.com|estream.to|gomo.to|hdvid.fun|hdvid.tv|hitomi.la|kinox.to|lewd.ninja|assia1.tv|nflbite.com|pirateproxy.live|plytv.me|potomy.ru|powvideo.cc|powvideo.net|putlocker.to|reactor.cc|rojadirecta.direct|sickrage.ca|streamtape.com|thehiddenbay.com|thepiratebay.org|thepiratebay10.org|tpb.party|uptomega.me|ustream.to|vidoza.co|vidoza.net|wallpoper.com|wearesaudis.net|yazilir.com
+||1337x.to^$csp=script-src 'self' 'unsafe-inline' 'unsafe-eval' data: challenges.cloudflare.com
+||bodysize.org^$csp=child-src *
+||convertfiles.com^$csp=script-src 'self' '*' 'unsafe-inline'
+||gelbooru.com^$csp=script-src 'self' '*' 'unsafe-inline' *.gstatic.com *.google.com *.googleapis.com *.bootstrapcdn.com
+||moviewatcher.is^$csp=script-src 'self' '*' 'unsafe-inline'
+||pirateiro.com^$csp=script-src 'self' 'unsafe-inline' https://hcaptcha.com *.hcaptcha.com
+! CSP Yavli
+||activistpost.com^$csp=script-src *.leadpages.net *.gstatic.com *.google.com *.googleapis.com *.playwire.com *.facebook.com *.bootstrapcdn.com
+! kinox
+$csp=script-src 'self' 'unsafe-inline' 'unsafe-eval' data: *.cloudflare.com *.google.com *.addthis.com *.addthisedge.com *.facebook.net *.twitter.com *.jquery.com,domain=kinox.lat|kinos.to|kinox.am|kinox.bz|kinox.click|kinox.cloud|kinox.club|kinox.digital|kinox.direct|kinox.express|kinox.fun|kinox.fyi|kinox.gratis|kinox.io|kinox.lol|kinox.me|kinox.mobi|kinox.pub|kinox.sh|kinox.sx|kinox.to|kinox.tube|kinox.tv|kinox.wtf|kinoz.to,~third-party
+! Specific filters necessary for sites allowlisted with $genericblock filter option
+! Spiegel.de
+@@||doubleclick.net/gampad/*adPositionName%3Dsuperbanner_$xmlhttprequest,domain=spiegel.de
+@@||doubleclick.net/getconfig$xmlhttprequest,domain=spiegel.de
+@@||g.doubleclick.net/gampad/ads?*superbanner_3$xmlhttprequest,domain=spiegel.de
+@@||g.doubleclick.net/gampad/ads?*wallpaper_1$xmlhttprequest,domain=spiegel.de
+@@||g.doubleclick.net/gpt/pubads_impl_$script,domain=spiegel.de
+@@||g.doubleclick.net/tag/js/gpt.js$domain=spiegel.de
+@@||pagead2.googlesyndication.com/getconfig/sodar?$xmlhttprequest,domain=spiegel.de
+@@||spiegel.de^$genericblock,generichide
+spiegel.de###vi-stories-main-container
+spiegel.de##.emsAnzeige
+spiegel.de##.vi-stories-top-div
+spiegel.de##a[data-nvp*="'trafficUrl':'https://paid.outbrain.com/network/redir?"]
+spiegel.de##a[href^="http://paid.outbrain.com/network/redir?"]
+spiegel.de##a[href^="https://paid.outbrain.com/network/redir?"]
+spiegel.de##a[onmousedown^="this.href='http://paid.outbrain.com/network/redir?"]
+spiegel.de##a[onmousedown^="this.href='https://paid.outbrain.com/network/redir?"]
+spiegel.de##div[id*="/spon_dt/"]:not(#google_ads_iframe_\/6032\/spon_dt\/homepage_5__container__)
+||2mdn.net^$domain=spiegel.de
+||360yield.com^$domain=spiegel.de
+||adalliance.io^$domain=spiegel.de
+||adform.net^$domain=spiegel.de
+||adition.com^$domain=spiegel.de
+||admob.com^$domain=spiegel.de
+||adnxs.com^$domain=spiegel.de
+||ads.viralize.tv^$domain=spiegel.de
+||adsafeprotected.com^$domain=spiegel.de
+||amazon-adsystem.com^$domain=spiegel.de
+||cas.*.criteo.com^$domain=spiegel.de
+||ced.sascdn.com^$domain=spiegel.de
+||conative.de^$domain=spiegel.de
+||emsservice.de^$domain=spiegel.de
+||finative.cloud^$domain=spiegel.de
+||g.doubleclick.net^$domain=spiegel.de
+||googlesyndication.com/pagead/$domain=spiegel.de
+||googlesyndication.com/safeframe/$domain=spiegel.de
+||googlesyndication.com/simgad/$domain=spiegel.de
+||googlesyndication.com/sodar/$domain=spiegel.de
+||images.*.criteo.net^$domain=spiegel.de
+||imasdk.googleapis.com^$domain=spiegel.de
+||inforsea.com^$domain=spiegel.de
+||mookie1.com^$domain=spiegel.de
+||netpoint-media.de^$domain=spiegel.de
+||omnitagjs.com^$domain=spiegel.de
+||pagead2.googlesyndication.com^$domain=spiegel.de
+||partner.googleadservices.com^$domain=spiegel.de
+||pubmatic.com^$domain=spiegel.de
+||rubiconproject.com^$domain=spiegel.de
+||serving-sys.com^$domain=spiegel.de
+||smartadserver.com^$domain=spiegel.de
+||smartstream.tv^$domain=spiegel.de
+||spotxchange.com^$domain=spiegel.de
+||stickyadstv.com^$domain=spiegel.de
+||teads.tv^$domain=spiegel.de
+||twiago.com^$domain=spiegel.de
+||vi-serve.com^$domain=spiegel.de
+||vix.*.criteo.net^$domain=spiegel.de
+||yieldlab.net^$domain=spiegel.de
+! jetzt.de
+@@||jetzt.de^$generichide
+! dood.pm
+/^https?:\/\/www\.[0-9a-z]{8,}\.com\/[0-9a-z]{1,4}\.js$/$script,third-party,domain=dood.la|dood.pm|dood.sh|dood.so|dood.to|dood.watch|dood.ws
+
+! *** easylist:easylist/easylist_specific_block_popup.txt ***
+$popup,third-party,domain=123animes.mobi|1337x.buzz|720pstream.tv|adblockeronstape.me|adblockeronstreamtape.me|adblockeronstrtape.xyz|adblockplustape.com|adblockplustape.xyz|adblockstreamtape.art|adblockstreamtape.fr|adblockstreamtape.site|adblocktape.online|adblocktape.store|adblocktape.wiki|animepl.xyz|animeworld.biz|aniwave.to|antiadtape.com|apl100.me|apl96.me|assia4.com|atrocidades18.net|bflix.ru|cloudemb.com|cloudvideo.tv|databasegdriveplayer.xyz|dembed1.com|diampokusy.com|dir-proxy.net|dirproxy.info|dood.la|dood.pm|dood.re|dood.sh|dood.so|dood.to|dood.watch|dood.wf|dood.ws|dood.yt|doods.pro|dooood.com|ds2play.com|embedsito.com|fembed-hd.com|file-upload.com|filemoon.sx|freeplayervideo.com|geoip.redirect-ads.com|gogoanime.lol|gogoanime.nl|haes.tech|highstream.tv|hubfiles.ws|hydrax.xyz|katfile.com|kissanime.lol|kokostream.net|livetv498.me|loader.to|luluvdo.com|luxubu.review|mangovideo.pw|mixdroop.bz|mixdroop.co|mixdrop.bz|mixdrop.ch|mixdrop.click|mixdrop.club|mixdrop.sx|mixdrop.to|mixdrops.xyz|mixdrp.co|mixdrp.to|monstream.org|noblocktape.com|okru.link|oneproxy.org|owodeuwu.xyz|piracyproxy.biz|piraproxy.info|pixroute.com|playtube.ws|pomvideo.cc|pouvideo.cc|projectfreetv2.com|proxyer.org|raes.tech|sbfast.com|sbplay2.com|sbplay2.xyz|sbthe.com|scloud.online|shavetape.cash|slmaxed.com|ssbstream.net|stapadblockuser.info|stapadblockuser.xyz|stape.fun|stape.me|stapewithadblock.beauty|stapewithadblock.monster|stapewithadblock.xyz|strcloud.in|streamadblocker.com|streamadblocker.store|streamadblocker.xyz|streamas.cloud|streambee.to|streamhide.to|streamingcommunity.life|streamlare.com|streamnoads.com|streamta.pe|streamtape.com|streamtape.to|streamtape.xyz|streamtapeadblock.art|streamtapeadblockuser.art|streamtapeadblockuser.homes|streamtapeadblockuser.monster|streamtapeadblockuser.xyz|streamtapse.com|streamz.ws|strtape.cloud|strtapeadblocker.xyz|strtapewithadblock.art|strtapewithadblock.xyz|strtpe.link|supervideo.tv|suzihaza.com|tapeantiads.com|tapeblocker.com|tapenoads.com|tapewithadblock.com|tapewithadblock.org|telyn610zoanthropy.com|theproxy.ws|trafficdepot.xyz|tubeload.co|un-block-voe.net|uploadfiles.pw|uproxy.co|upstream.to|upvid.biz|uqload.com|userload.co|uwatchfree.fo|vanfem.com|vembed.org|vgfplay.com|vidcloud9.com|videovard.to|vidlox.me|viewsb.com|vivo.sx|voe-unblock.com|voe-unblock.net|voe.sx|voeunblock1.com|voeunblock2.com|voiranime.com|watchsb.com|welovemanga.one|wiztube.xyz|wootly.ch|y2mate.is|youtubedownloader.sh|ytmp3.cc|ytmp3.sh
+/&*^$popup,domain=piracyproxy.app|piraproxy.info|unblocked.club|unblockedstreaming.net
+/?ref=$popup,domain=hltv.org
+/hkz*^$popup,domain=piracyproxy.app|piraproxy.info|unblocked.club|unblockedstreaming.net
+/loadme/com/lazymolecule^$popup,script,domain=flixtor.video
+||123moviesfree.world/hd-episode/$popup
+||amazon-adsystem.com^$popup,domain=twitch.tv
+||animesuge.to/?$popup
+||aontent.powzers.lol^$popup
+||b.link^$popup,domain=hltv.org
+||binance.com^$popup,domain=live7v.com|usagoals.sx
+||bit.ly^$popup,domain=dexerto.com|eteknix.com|gdriveplayer.us|kitguru.com|ouo.io|ouo.press|sh.st
+||bitcoins-update.blogspot.com^$popup,domain=lineageos18.com
+||bitskins.com^$popup,domain=hltv.org
+||cdnqq.net/out.php$popup
+||centent.stemplay.cc^$popup
+||csgfst.com^$popup,domain=hltv.org
+||csgofast.cash^$popup,domain=hltv.org
+||csgofastx.com/?clickid=$popup,domain=hltv.org
+||eentent.streampiay.me^$popup
+||facebook.com/ads/ig_redirect/$popup,domain=instagram.com
+||fentent.streampiay.fun^$popup
+||fentent.streampiay.me^$popup
+||flashtalking.com^$popup,domain=twitch.tv
+||flaticon.com/edge/banner/$popup
+||flixhq.ru/?$popup
+||gentent.streampiay.fun^$popup
+||gg.bet^$popup,domain=cq-esports.com
+||hentent.streampiay.fun^$popup
+||hltv.org^*=|$popup,domain=hltv.org
+||hqq.tv/out.php?$popup
+||hurawatch.ru/?$popup
+||ientent.streampiay.fun^$popup
+||jentent.streampiay.fun^$popup
+||jpg.church/*.php?cat$popup
+||kentent.streampiay.fun^$popup
+||kissanimeonline.com/driectlink$popup
+||link.advancedsystemrepairpro.com^$popup
+||listentoyt.com/button/$popup
+||listentoyt.com/vidbutton/$popup
+||mercurybest.com^$popup,domain=hltv.org
+||montent.powzers.lol^$popup
+||mp3-convert.org/p$popup
+||nontent.powzers.lol^$popup
+||notube.cc/p/$popup
+||notube.fi/p/$popup
+||notube.im/p/$popup
+||notube.io/p/$popup
+||notube.net/p/$popup
+||oontent.powzers.lol^$popup
+||pinoymovies.es/links/$popup
+||player.tabooporns.com^$popup
+||pontent.powzers.lol^$popup
+||qontent.pouvideo.cc^$popup
+||rentalcars.com/?affiliateCode=$popup,domain=seatguru.com
+||rontent.powzers.lol^$popup
+||routeumber.com^$popup,domain=hltv.org
+||rx.link^$popup,domain=uploadgig.com
+||sendspace.com/defaults/sendspace-pop.html$popup
+||skycheats.com^$popup,domain=elitepvpers.com
+||t.co^$popup,domain=hltv.org
+||tontent.powzers.lol^$popup
+||topeuropix.site/svop4/$popup
+||vpnfortorrents.*?$popup
+||vtube.to/api/click/$popup
+||waaw.to/out.php$popup
+||yout.pw/button/$popup
+||yout.pw/vidbutton/$popup
+||ytmp4converter.com/wp-content/uploads$popup
+||ytsyifys.com/go.$popup
+! about:blank popups
+|about:blank#$popup,domain=22pixx.xyz|adblockstrtape.link|animepahe.com|aniwave.to|bitporno.com|cdnqq.net|clipconverter.cc|dailyuploads.net|dood.la|dood.so|dood.to|dood.video|dood.watch|dood.ws|doodcdn.com|flashx.net|fmovies.to|gospeljingle.com|hqq.tv|imagetwist.com|kissanime-ru.ws|mixdrop.bz|mixdrop.ch|mixdrop.sx|mp4upload.com|mstream.xyz|onlystream.tv|playtube.ws|popads.net|powvideo.net|powvldeo.cc|putlocker.style|run-syndicate.com|sdmoviespoint.online|spcdn.cc|strcloud.link|streamani.net|streamsb.net|streamtape.cc|streamtape.com|streamtape.site|strtape.cloud|strtape.tech|strtapeadblock.club|strtapeadblock.me|strtpe.link|tapecontent.net|turboimagehost.com|upstream.to|uptostream.com|uptostream.eu|uptostream.fr|uptostream.link|userload.co|vev.red|vevo.io|vidcloud.co|videobin.co|videowood.tv|vidoza.net|voe.sx|vortez.net|vshare.eu|vumoo.to|waaw.to|watchserieshd.tv
+! Domain popups
+/^https?:\/\/.*\.(club|xyz|top|casa)\//$popup,domain=123movies2022.org|123moviesme.online|aniwave.to|databasegdriveplayer.co|dood.la|dood.so|dood.to|dood.video|dood.watch|dood.ws|doodcdn.com|fmovies.to|fmovies.world|fplayer.info|gogoanimes.to|gogoplay1.com|masahub.net|redirect-ads.com|strtpe.link|voe-unblock.com|wawacity.work
+! html/image popups
+/^https?:\/\/.*\.(jpg|jpeg|gif|png|svg|ico|js|txt|css|srt|vtt|webp)/$popup,domain=0123movie.ru|123-movies.ninja|123movies-official.site|123movies.net|123movies.tc|123movies2022.org|123moviesfree4u.com|123movieshub.tc|123moviesme.online|123series.ru|19turanosephantasia.com|1movieshd.com|20demidistance9elongations.com|2umovies.pro|4anime.gg|4hdmovie.com|4stream.gg|5movies.fm|720pstream.tv|745mingiestblissfully.com|9xmovies.homes|adblockstrtape.link|animefreak.vip|animekisa.cc|animepahe.com|animesonline.cz|animesultra.com|aniwave.to|asianembed.io|audaciousdefaulthouse.com|bato.to|batotoo.com|batotwo.com|bflix.ru|bflix.to|bigclatterhomesguideservice.com|bormanga.online|buffstreams.tv|bunnycdn.ru|clicknupload.to|clipconverter.cc|cloudvideo.tv|cmovies.online|cmovies.vc|dailyuploads.net|databasegdriveplayer.co|divicast.com|dood.la|dood.pm|dood.sh|dood.so|dood.to|dood.video|dood.watch|dood.ws|dood.yt|doodcdn.com|dopebox.to|dramacool.pk|eplayvid.com|eplayvid.net|eplsite.uk|europixhd.net|exey.io|extreme-down.plus|files.im|filmestorrents.net|filmyzilla.beauty|filmyzilla.directory|filmyzilla.makeup|flashx.net|flixhq.ru|flixtor.video|fmovies.app|fmovies.ps|fmovies.pub|fmovies.to|fmovies.world|fplayer.info|fraudclatterflyingcar.com|gayforfans.com|gdtot.nl|go-stream.site|gogoanime.run|gogoanimes.to|gomovies.pics|gospeljingle.com|greaseball6eventual20.com|hds-streaming-hd.com|hexupload.net|hindilinks4u.cam|hindilinks4u.nl|housecardsummerbutton.com|hulkstreams.com|hurawatch.at|hurawatch.it|jackstream.net|jackstreams.com|jujutsukaisen-manga.online|jujutsukaisenonline.net|kaiju-no8.com|kaisen-jujutsu.com|kimetsuscans.online|kimoitv.com|kiss-anime.org|kissanime-ru.ws|kissanime2.org|kissasians.org|leveling-solo.org|lookmoviess.com|magusbridemanga.com|manhuascan.com|manhuascan.me|mcubd.host|meomeo.pw|mixdrop.sx|mkvcage.site|mkvhub.tech|mlbstream.me|mlsbd.shop|mlwbd.host|movierulz.cam|movies2watch.ru|movies2watch.tv|movies7.to|moviesrulz.net|moviestars.to|moviesverse.mobi|mp4upload.com|myflixer.it|myflixer.pw|myflixer.ru|myflixer.site|myflixer.today|myflixer.ws|myflixertv.to|nbastream.nu|nflstream.io|ngomik.net|nhlstream.nu|nkiri.com|nswgame.com|olympicstreams.me|paidnaija.com|playemulator.online|primewire.today|prmovies.bz|prmovies.org|projectfreetv.one|putlocker-website.com|putlocker.digital|putlocker.vc|putlocker68.com|putlockers.fm|racaty.io|racaty.net|realfinanceblogcenter.com|record-ragnarok.com|redirect-ads.com|reputationsheriffkennethsand.com|sdmoviespoint.online|series9.la|sflix.to|shadowrangers.live|skidrow-games.com|skidrowcodex.net|soap2day.md|soap2day.video|soap2dayto.org|sockshare.ac|sockshare1.com|solarmovies.movie|speedvideo.net|sportsbay.watch|ssoap2day.to|steampiay.cc|stemplay.cc|streamani.net|streamsb.net|streamsport.icu|streamta.pe|streamtape.cc|streamtape.com|streamtape.net|streamz.ws|strikeout.cc|strikeout.nu|strtape.cloud|strtape.site|strtape.tech|strtapeadblock.me|strtpe.link|tapecontent.net|telerium.net|tinycat-voe-fashion.com|toxitabellaeatrebates306.com|turkish123.com|un-block-voe.net|upbam.org|uploadmaza.com|upornia.com|uprot.net|upstream.to|uptodatefinishconferenceroom.com|upvid.co|v-o-e-unblock.com|vidbam.org|vidembed.cc|vidnext.net|vido.fun|vidsrc.me|vipbox.lc|vipleague.im|vipleague.st|vipleague.tv|viprow.me|viprow.nu|vipstand.se|voe-un-block.com|voe-unblock.com|voe.bar|voe.sx|voeun-block.net|voeunbl0ck.com|voeunblck.com|voeunblk.com|voeunblock3.com|vumoo.to|vumoo.vip|watchseries.ninja|watchseries.pub|watchserieshd.bz|watchserieshd.tv|watchserieshd.watch|watchseriess.net|watchseriesstream.com|wawacity.work|xmovies8.fun|xn--tream2watch-i9d.com|yesmovies.id|yesmovies.mn|ymovies.to|yomovies.cam|yomovies.nl|yomovies.pl|yomovies.pm|youflix.site|youtube4kdownloader.com|yseries.tv|ytanime.tv|yts-subs.com|yts.movie
+
+! *** easylist:easylist_adult/adult_specific_block.txt ***
+://*.justthegays.com/$script,~third-party
+||037jav.com/wp-content/uploads/2021/04/*.gif
+||18porn.sex/ptr18.js
+||18teensex.tv/player/html.php$subdocument
+||3movs.com/2ff/
+||3movs.xxx/2ff/
+||3naked.com/nb/
+||3prn.com/even/ok.js
+||429men.com/zdoink/
+||4tube.com/assets/abpe-
+||4tube.com/assets/adf-
+||4tube.com/assets/adn-
+||4tube.com/assets/padb-
+||4tube.com/nyordo.js
+||4wank.com/bump/
+||4wank.net/bump/
+||8boobs.com/flr.js
+||8muses.com/banner/
+||absoluporn.com/code/script/
+||ad.pornutopia.org^
+||ad69.com/analytics/
+||adf.uhn.cx^
+||adrotic.girlonthenet.com^
+||adult-sex-games.com/images/adult-games/
+||adultasianporn.com/puty3s/
+||adultfilmdatabase.com/graphics/porndude.png
+||affiliates.goodvibes.com^
+||akiba-online.com/data/siropu/
+||alrincon.com/nbk/
+||amateur.tv/misc/mYcLBNp7fx.js
+||analdin.xxx/player/html.php?aid=
+||analsexstars.com/og/
+||anybunny.tv/js/main.ex.js
+||anyporn.com/aa/
+||anysex.com/*oio/|$script
+||anysex.com/2-2-temparoryo/
+||asg.faperoni.com^
+||atube.xxx/static/js/abb.js
+||aucdn.net^$media,domain=clgt.one
+||avn.com/server/
+||b1.tubexo.tv^$subdocument
+||b8ms7gkwq7g.crocotube.com^
+||babepedia.com/iStripper/
+||babesandstars.com/img/banners/
+||babeshows.co.uk^*banner
+||babesinporn.com^*/istripper/
+||babesmachine.com/images/babesmachine.com/friendimages/
+||badjojo.com/d5
+||banners.cams.com^
+||between-legs.com/banners2/
+||between-legs.com^*/banners/
+||bigcock.one/worker.js
+||bigdick.tube/tpnxa/
+||bigtitsgallery.net/qbztdpxulhkoicd.php
+||bigtitslust.com/lap70/
+||bionestraff.pro/300x250.php
+||bodsforthemods.com/srennab/
+||bootyheroes.com//static/assets/img/banners/
+||boysfood.com/d5.html
+||bravoteens.com/ta/
+||bravotube.net/cc/
+||bravotube.net/js/clickback.js
+||brick.xhamster.com^
+||brick.xhamster.desi^
+||brick.xhamster2.com^
+||brick.xhamster3.com^
+||bunnylust.com/sponsors/
+||buondua.com/templatesygfo76jp36enw15_/
+||cam-video.xxx/js/popup.min.js
+||camcaps.ac/33a9020b46.php
+||camclips.cc/api/$image,script
+||camclips.cc/ymGsBPvLBH
+||cams.imagetwist.com/in/?track=$subdocument
+||cams.imgtaxi.com^
+||camvideos.tv/tpd.png
+||camvideos.tv^$subdocument
+||cdn3x.com/xxxdan/js/xxxdan.vast.
+||celeb.gate.cc/assets/bilder/bann
+||cfgr3.com/videos/*.mp4$rewrite=abp-resource:blank-mp4,domain=hitbdsm.com
+||cherrynudes.com/t33638ba5008.js
+||chikiporn.com/sqkqzwrecy/
+||clicknplay.to/q3gSxw5.js
+||cloud.hentai-moon.com/contents/hdd337st/$media
+||cover.ydgal.com/axfile/
+||creative.live.bestjavporn.com^
+||creative.live.javhdporn.net^
+||creative.live.javmix.tv^
+||creative.live.missav.com^
+||creative.live.tktube.com^
+||creative.live7mm.tv^
+||creative.thefaplive.com^
+||creatives.cliphunter.com^
+||creatives.pichunter.com^
+||cumlouder.com/nnubb.js
+||cuntlick.net/banner/
+||cutegurlz.com/promos-royal-slider/aff/
+||dads-banging-teens.com/polished-
+||daftporn.com/nb_
+||dailyporn.club/at/code.php
+||dailyporn.club/nba/
+||darknessporn.com/prrls/
+||dcraddock.uk/frame/
+||dcraddock.uk/images/b/
+||deepxtube.com/zips/
+||definebabe.com/sponsor_
+||delivery.porn.com^
+||depvailon.com/sponsored.html
+||dirtyvideo.fun/js/script_
+||dixyporn.com/include/
+||dpfantasy.org/k2s.gif
+||dporn.com/edraovnjqohv/
+||dporn.com/tpnxa/
+||dragonthumbs.com/adcode.js
+||drivevideo.xyz/advert/
+||drtuber.com/footer_
+||dyn.empflix.com^
+||dyn.tnaflix.com^
+||ea-tube.com/i2/
+||easypic.com/js/easypicads.js
+||easyporn.xxx/tmp/
+||empflix.com/mew.php
+||enporn.org/system/theme/AnyPorn/js/popcode.min.js
+||entensity.net/crap/
+||enter.javhd.com/track/
+||eporner.com/dot/
+||eporner.com/event.php
+||eporner.com^$subdocument,~third-party
+||erowall.com/126.js
+||erowall.com/tf558550ef6e.js
+||escortdirectory.com//images/
+||exoav.com/nb/
+||extremescatporn.com/static/images/banners/
+||fakings.com/tools/get_banner.php
+||familyporner.com/prerolls/
+||fapclub.sex/js/hr.js
+||fapnado.com/api/
+||fapnado.com/bump
+||fappenist.com/fojytyzzkm.php
+||faptor.com/api/
+||faptor.com/bump/
+||fapxl.com/view/spot/
+||fastfuckgames.com/aff.htm
+||fetishshrine.com/js/customscript.js
+||files.wordpress.com^$domain=hentaigasm.com
+||flw.camcaps.ac^
+||fmgroupdist.com/mafanikio/$image,domain=bdsmtest.org
+||footztube.com/b_
+||footztube.com/f_
+||freelivesex.tv/imgs/ad/
+||freeones.com/build/freeones/adWidget.$script
+||freeones.com/static-assets/istripper/
+||freepornxxx.mobi/popcode.min.js
+||freepublicporn.com/prerolls/
+||freeteen.sex/ab/
+||freeuseporn.com/tceb29242cf7.js
+||frprn.com/even/ok.js
+||ftopx.com/345.php
+||ftopx.com/isttf558550ef6e.js
+||ftopx.com/tf558550ef6e.js
+||galleries-pornstar.com/thumb_top/
+||gamcore.com/ajax/abc?
+||gay4porn.com/ai/
+||gaygo.tv/gtv/frms/
+||gaystream.pw/juicy.js
+||gaystream.pw/pemsrv.js
+||gaystream.pw/pushtop.js
+||gelbooru.com/extras/
+||girlsofdesire.org/blr3.php
+||girlsofdesire.org/flr2.js
+||go.celebjihad.live^
+||go.pornav.net^
+||go.stripchat.beeg.com^
+||go.strpjmp.com^
+||haes.tech/js/script_
+||hanime.xxx/wp-content/cache/wpfc-minified/fggil735/fa9yi.js
+||hd21.*/templates/base_master/js/jquery.shows2.min.js
+||hdporn24.org/vcrtlrvw/
+||hdpornfree.xxx/rek/
+||hdpornmax.com/tmp/
+||hdtube.porn/rods/
+||hellporno.com/_a_xb/
+||hellporno.com^$subdocument,~third-party
+||hentai2w.com/ark2023/
+||hentaibooty.com/uploads/banners/
+||hentaicdn.com/cdn/v2.assets/js/exc
+||hentaidude.xxx/wp-content/plugins/script-manager/
+||hentaifox.com/js/ajs.js
+||hentaifox.com/js/slider.js
+||hentaihere.com/arkNVB/
+||hentairules.net/gal/new-gallery-dump-small.gif
+||hentaiworld.tv/banners-script.js
+||herexxxtube.com/tmp/
+||hitomi.la/ebJqXsy/
+||hitprn.com/c_
+||hitslut.b-cdn.net/*.gif
+||hoes.tube/ai/
+||home-xxx-videos.com/snowy-
+||homemade.xxx/player/html.php?aid=
+||homeprivatevids.com/js/580eka426.js
+||hornygamer.com/includes/gamefile/sw3d_hornygamer.gif
+||hornygamer.com/play_horny_games/
+||hornyjourney.com/fr.js
+||hot-sex-tube.com/sp.js
+||hot-teen-chicks.site/img/banner.jpg
+||hotgirlclub.com/assets/vendors/
+||hotgirlsdream.com/tf40bbdd1767.js
+||hotmovs.com/fzzgbzhfm/
+||hotmovs.com/suhum/
+||hottystop.com/f9de7147b187.js
+||hottystop.com/t33638ba5008.js
+||hqbang.com/api/
+||hqporn.su/myvids/
+||hqpornstream.com/pub/
+||hypnohub.net/assets/hub.js
+||iceporn.com/player_right_ntv_
+||idealnudes.com/tf40bbdd1767.js
+||imagepost.com/stuff/
+||imagetwist.com/img/1001505_banner.png
+||imageweb.ws/whaledate.gif
+||imageweb.ws^$domain=tongabonga.com
+||imgbox.com/images/tpd.png
+||imgderviches.work/exclusive/bayou_
+||imgdrive.net/xb02673583fb.js
+||imgtaxi.com/frame.php
+||imhentai.xxx/js/slider.js
+||internationalsexguide.nl/forum/clientscript/PopUnderISG.js
+||interracial-girls.com/chaturbate/
+||interracial-girls.com/i/$image
+||intporn.com/js/siropu/
+||intporn.com/lj.js
+||inxxx.com/api/get-spot/
+||ipornxxx.net/banners/
+||jav-bukkake.net/images/download-bukkake.jpg
+||javenglish.net/tcads.js
+||javfor.tv/av/js/aapp.js
+||javguru.top/126_126.js
+||javhub.net/av/js/cpp.js
+||javideo.net/js/popup
+||javlibrary.com/js/bnr_
+||javpornclub.com/images/banners/takefile72890.gif
+||javslon.com/clacunder.js
+||javxnxx.pro/pscript.js
+||jennylist.xyz/t63fd79f7055.js
+||jizzberry.com/654eb40079439pop/
+||jo.4wank.com^
+||joysporn.sex/js/kj.js
+||justthegays.com/agent.php
+||justthegays.com/api/spots/
+||justthegays.com/api/users/
+||k2s.tv/cu.js
+||kbjfree.com/assets/scripts/popad.js
+||kindgirls.com/banners2/
+||kompoz2.com/js/take.max.js
+||koushoku.org/proxy?
+||kurakura21.space/js/baf.js
+||lesbianstate.com/ai/
+||lolhentai.net/tceb29242cf7.js
+||lustypuppy.com/includes/popunder.js
+||madmen2.alastonsuomi.com^
+||manga18fx.com/tkmo2023/
+||manhwa18.cc/main2023/
+||mansurfer.com/flash_promo/
+||marawaresearch.com/js/wosevu.js
+||mature-chicks.com/floral-truth-c224/
+||matureworld.ws/images/banners/
+||megatube.xxx/atrm/
+||milffox.com/ai/
+||milfnut.net/assets/jquery/$script
+||milfz.club/qpvtishridusvt.php
+||milkmanbook.com/dat/promo/
+||momvids.com/player/html.php?aid=
+||mopoga.com/img/aff_
+||mylistcrawler.com/wp-content/plugins/elfsight-popup-cc/
+||mylust.com/342-0r0erwd4qjw
+||mysexgames.com/pix/best-sex-games/
+||mysexgames.com/plop.js
+||myvideos.club/api/
+||n.hnntube.com^
+||naughtyblog.org/wp-content/images/k2s/
+||nigged.com/tools/get_banner.php
+||nsfwalbum.com/efds435m432.js
+||nudepatch.net/dynbak.min.js
+||nudepatch.net/edaea0fd3b2c.j
+||oldies.name/oldn/
+||orgyxxxhub.com/js/965eka57.js
+||orgyxxxhub.com/js/arjlk.js
+||otomi-games.com/wp-content/uploads/*-Ad-728-
+||pantyhosepornstars.com/foon/pryf003.js
+||phonerotica.com/resources/img/banners/
+||picshick.com/b9ng.js
+||pimpandhost.com^$subdocument
+||pisshamster.com/prerolls/
+||pleasuregirl.net/bload
+||plibcdn.com/templates/base_master/js/jquery.shows2.min.js
+||plx.porndig.com^
+||porn-star.com/buttons/
+||porndoe.com/banner/
+||porndoe.com/wp-contents/channel?
+||pornerbros.com/lolaso/
+||pornforrelax.com/kiadtgyzi/
+||porngals4.com/img/b/
+||porngo.tube/tdkfiololwb/
+||pornhat.com/banner/
+||pornicom.com/jsb/
+||pornid.xxx/azone/
+||pornid.xxx/pid/
+||pornj.com/wimtvggp/
+||pornjam.com/assets/js/renderer.
+||pornktube.tv/js/kt.js
+||pornmastery.com/*/img/banners/
+||pornmix.org/cs/
+||porno666.com/code/script/
+||pornorips.com/4e6d8469754a.js
+||pornorips.com/9fe1a47dbd42.js
+||pornpapa.com/extension/
+||pornpics.com/api/banner/
+||pornpics.de/api/banner/
+||pornpoppy.com/jss/external_pop.js
+||pornrabbit.com^$subdocument
+||pornsex.rocks/league.aspx
+||pornstargold.com/9f3e5bbb8645.js
+||pornstargold.com/af8b32fc37c0.js
+||pornstargold.com/e7e5ed47e8b4.js
+||pornv.xxx/static/js/abb.js
+||pornve.com/img/300x250g.gif
+||pornve.sexyadsrun.com^
+||pornxp.com/2.js
+||pornxp.com/sp/
+||pornxp.net/spnbf.js
+||pornyhd.com/hillpop.php
+||port7.xhamster.com^
+||port7.xhamster.desi^
+||port7.xhamster2.com^
+||port7.xhamster3.com^
+||potionnowhere.com^$popup
+||pregchan.com/.static/pages/dlsite.html
+||projectjav.com/scripts/projectjav_newpu.js
+||ps0z.com/300x250b
+||punishworld.com/prerolls/
+||puporn.com/xahnqhalt/
+||pussycatxx.com/tab49fb22988.js
+||pussyspace.com/fub
+||rat.xxx/sofa/
+||rat.xxx/wwp2/
+||realgfporn.com/js/bbbasdffdddf.php
+||redgifs.com/assets/js/goCtrl.js
+||redtube.com^$subdocument,~third-party
+||redtube.fm/advertisment.htm
+||redtube.fm/lcgldrbboxj.php
+||rintor.space/t2632cd43215.js
+||rst.pornyhd.com^
+||rtb-1.jizzberry.com^
+||rtb-1.mylust.com^
+||rtb-3.xgroovy.com^
+||rubystream.xyz/z-$script
+||ruedux.com/code/script/
+||rule34.xxx/images/r34_doll.png
+||rule34hentai.net^$subdocument,~third-party
+||rusdosug.com/Fotos/Banners/
+||scatxxxporn.com/static/images/banners/
+||see.xxx/pccznwlnrs/
+||sex-techniques-and-positions.com/banners
+||sex3.com/ee/s/s/im.php
+||sex3.com/ee/s/s/js/ssu
+||sex3.com/ee/s/s/su
+||sexcelebrity.net/contents/restfiles/player/
+||sextubebox.com/js/239eka836.js
+||sextubebox.com/js/580eka426.js
+||sextvx.com/*/ads/web/
+||sexvid.xxx/ghjk/
+||simply-hentai.com/prod/
+||sleazyneasy.com/contents/images-banners/
+||sleazyneasy.com/jsb/
+||slutdump.com/flat-butterfly-c5e3/
+||slview.psne.jp^
+||smutgamer.com/ta2b8ed9c305.js
+||smutty.com/n.js
+||sonorousporn.com/nb/
+||starwank.com/api/
+||stream-69.com/code/script/
+||striptube.net/images/
+||striptube.net/te9e85dc6853.js
+||sunporno.com/api/spots/
+||sunporno.com/blb.php
+||sunporno.com/sunstatic/frms/
+||support.streamjav.top^
+||taxidrivermovie.com^$~third-party,xmlhttprequest
+||tbib.org/tbib.
+||teenporno.xxx/ab/
+||teens-fucking-matures.com/shrill-
+||thegay.porn/gdtatrco/
+||thehun.net/banners/
+||thenipslip.com/b6c0cc29df5a.js
+||thisvid.com/enblk/
+||tits-guru.com/js/istripper4.js
+||titsbox.com/nb/
+||tnaflix.com/azUhsbtsuzm?
+||tnaflix.com/js/mew.js?
+||tranny.one/bdb.php
+||trannygem.com/ai
+||tryboobs.com/bfr/
+||tsunup.com/js/ads.js
+||tube.hentaistream.com/wp-includes/js/pop4.js
+||tubeon.*/templates/base_master/js/jquery.shows2.min.js
+||tuberel.com/looppy/
+||tubev.sex/td24f164e52654fc593c6952240be1dc210935fe/
+||tubxporn.xxx/js/xp.js
+||txxx.com/api/input.php?
+||upcdn.site/huoUTQ9.js
+||upornia.com/yxpffpuqtjc/
+||urgayporn.com/bn/
+||uviu.com/_xd/
+||valuedpulverizelegitimate.com^$popup
+||videosection.com/adv-agent.php
+||vietpub.com/banner/
+||vikiporn.com/js/customscript.js
+||vipergirls.to/clientscript/popcode_
+||vipergirls.to/clientscript/poptrigger_
+||viptube.com/player_right_ntv_
+||vivatube.*/templates/base_master/js/jquery.shows2.min.js
+||vndevtop.com/lvcsm/abck-banners/
+||voyeurhit.com/ffpqvfaczp/
+||vuwjv7sjvg7.zedporn.com^
+||warashi-asian-pornstars.fr/wapdb-img/ep/
+||watch-my-gf.com/list/
+||watchmygf.mobi/best.js
+||watchmygf.tv/js/v.js
+||wcareviews.com/bh/
+||wcareviews.com/bv/
+||wetpussygames.com/t78d42b806a3.js
+||winporn.*/templates/base_master/js/jquery.shows2.min.js
+||wwwxxx.uno/pop-code.js
+||wwwxxx.uno/taco-code.js
+||x0r.urlgalleries.net^
+||x1hub.com/alexia_anders_jm.gif
+||xanimu.com/prerolls/
+||xbooru.com/script/application.js
+||xcity.org/tc2ca02c24c5.js
+||xgirls.agency/pg/c/
+||xgroovy.com/6595d2ae9bda9oio/
+||xgroovy.com/static/js/script.js
+||xhamster.com*/vast?
+||xhamster.desi*/vast?
+||xhamster2.com*/vast?
+||xhamster3.com*/vast?
+||xhand.com/player/html.php?aid=
+||xhcdn.com/site/*/ntvb.gif
+||xis.vipergirls.to^
+||xmilf.com/0eckuwtxfr/
+||xnxxporn.video/nb39.12/
+||xozilla.com/player/html.php$subdocument
+||xpics.me/everyone.
+||xvideos.com/zoneload/
+||xvideos.es/zoneload/
+||xvideos.name/pop.js
+||xxxdessert.com/34l329_fe.js
+||xxxfetish24.com/helper/tos.js
+||xxxgirlspics.com/load.js
+||xxxshake.com/assets/f_load.js
+||xxxshake.com/static/js/script.js
+||xxxvogue.net/_ad
+||xxxxsx.com/sw.js
+||yeptube.*/templates/base_master/js/jquery.shows2.min.js
+||yespornpleasexxx.com/wp-content/litespeed/js/
+||yotta.scrolller.com^
+||youjizz.com/KWIKY*.mp4$rewrite=abp-resource:blank-mp4,domain=youjizz.com
+||youporn.com^$script,subdocument,domain=youporn.com|youporngay.com
+||yourlust.com*/serve
+||yourlust.com/assets/script.js
+||yourlust.com/js/scripts.js
+||youtubelike.com/ftt2/
+||yporn.tv/grqoqoswxd.php
+||zazzybabes.com/istr/t2eff4d92a2d.js
+||zzup.com/ad.php
+! Exoclick scripts
+/^https?:\/\/.*\/[a-z]{4,}\/[a-z]{4,}\.js/$script,~third-party,domain=bdsmx.tube|bigdick.tube|desiporn.tube|hclips.com|hdzog.com|hdzog.tube|hotmovs.com|inporn.com|porn555.com|pornzog.com|shemalez.com|tubepornclassic.com|txxx.com|upornia.com|vjav.com|vxxx.com|youteenporn.net
+! third-party servers
+/^https?:\/\/.*\.(club|news|live|online|store|tech|guru|cloud|bid|xyz|site|pro|info|online|icu|monster|buzz|fun|website|photos|re|casa|top|today|space|network|live|work|systems|ml|world|life)\/.*/$domain=1vag.com|4tube.com|asianpornmovies.com|getsex.xxx|glam0ur.com|hclips.com|hdzog.com|homemadevids.org|hotmovs.com|milfzr.com|porn555.com|pornforrelax.com|pornj.com|pornl.com|puporn.com|see.xxx|shemalez.com|sss.xxx|streanplay.cc|thegay.com|thegay.porn|tits-guru.com|tubepornclassic.com|tuberel.com|txxx.com|txxx.tube|upornia.com|vjav.com|voyeurhit.com|xozilla.com
+! (/sw.js)
+/^https?:\/\/.*\/.*sw[0-9._].*/$script,xmlhttprequest,domain=1vag.com|4tube.com|adult-channels.com|analdin.com|biguz.net|bogrodius.com|chikiporn.com|fantasti.cc|fuqer.com|fux.com|hclips.com|heavy-r.com|hog.tv|megapornx.com|milfzr.com|mypornhere.com|porn555.com|pornchimp.com|pornerbros.com|pornj.com|pornl.com|pornototale.com|porntube.com|sexu.com|sss.xxx|thisav.com|titkino.net|tubepornclassic.com|tuberel.com|tubev.sex|txxx.com|vidmo.org|vpornvideos.com|xozilla.com|youporn.lc|youpornhub.it|yourdailypornstars.com
+/^https?:\/\/.*\/[a-z0-9A-Z_]{2,15}\.(php|jx|jsx|1ph|jsf|jz|jsm|j$)/$script,subdocument,domain=3movs.com|4kporn.xxx|4tube.com|alotporn.com|alphaporno.com|alrincon.com|amateur8.com|anyporn.com|badjojo.com|bdsmstreak.com|bestfreetube.xxx|bigtitslust.com|bravotube.net|cockmeter.com|crazyporn.xxx|daftporn.com|ebony8.com|erome.com|exoav.com|fantasti.cc|fapality.com|fapnado.com|fetishshrine.com|freeporn8.com|gfsvideos.com|gotporn.com|hdporn24.org|hdpornmax.com|hdtube.porn|hellporno.com|hentai2w.com|hottorrent.org|hqsextube.xxx|hqtube.xxx|iceporn.com|imgderviches.work|imx.to|its.porn|katestube.com|lesbian8.com|love4porn.com|lustypuppy.com|manga18fx.com|manhwa18.cc|maturetubehere.com|megatube.xxx|milffox.com|momxxxfun.com|openloadporn.co|orsm.net|pervclips.com|porn-plus.com|porndr.com|pornicom.com|pornid.xxx|pornotrack.net|pornrabbit.com|pornwatchers.com|pornwhite.com|pussy.org|redhdtube.xxx|rule34.art|rule34pornvids.com|runporn.com|sexvid.porn|sexvid.pro|sexvid.xxx|sexytorrents.info|shameless.com|sleazyneasy.com|sortporn.com|stepmom.one|stileproject.com|str8ongay.com|tnaflix.com|urgayporn.com|vikiporn.com|wankoz.com|xbabe.com|xcafe.com|xhqxmovies.com|xxx-torrent.net|xxxdessert.com|xxxextreme.org|xxxonxxx.com|yourlust.com|youx.xxx|zbporn.com|zbporn.tv
+! eporner
+/^https?:\/\/.*\.eporner\.com\/[0-9a-f]{10,}\/$/$script,domain=eporner.com
+! thegay.com
+@@||thegay.com/assets//jwplayer-*/jwplayer.core.controls.html5.js|$domain=thegay.com
+@@||thegay.com/assets//jwplayer-*/jwplayer.core.controls.js|$domain=thegay.com
+@@||thegay.com/assets//jwplayer-*/jwplayer.js|$domain=thegay.com
+@@||thegay.com/assets//jwplayer-*/provider.hlsjs.js|$domain=thegay.com
+@@||thegay.com/assets/jwplayer-*/jwplayer.core.controls.html5.js|$domain=thegay.com
+@@||thegay.com/assets/jwplayer-*/jwplayer.core.controls.js|$domain=thegay.com
+@@||thegay.com/assets/jwplayer-*/jwplayer.js|$domain=thegay.com
+@@||thegay.com/assets/jwplayer-*/provider.hlsjs.js|$domain=thegay.com
+@@||thegay.com/upd/*/assets/preview*.js|$domain=thegay.com
+@@||thegay.com/upd/*/static/js/*.js|$domain=thegay.com
+||thegay.com^$script,domain=thegay.com
+! websocket ads
+$websocket,domain=pornhub.com|redtube.com|redtube.com.br|tube8.com|tube8.es|tube8.fr|xtube.com|youporn.com|youporngay.com
+! csp
+||thegay.com^$csp=default-src 'self' *.ahcdn.com fonts.gstatic.com fonts.googleapis.com https://thegay.com https://tn.thegay.com 'unsafe-inline' 'unsafe-eval' data: blob:
+
+! *** easylist:easylist_adult/adult_specific_block_popup.txt ***
+.com./$popup,domain=pornhub.com
+|http*://*?$popup,third-party,domain=forums.socialmediagirls.com|pornhub.com|redtube.com|tube8.com|youporn.com|youporngay.com
+||clicknplay.to/api/$popup
+||icepbns.com^$popup,domain=iceporn.com
+||livejasmin.com/pu/$popup
+||missav.com/pop?$popup
+||nhentai.net/api/_/popunder?$popup
+||porndude.link/porndudepass$popup,domain=theporndude.com
+||videowood.tv/pop?$popup
+||xtapes.to/out.php$popup
+||xteen.name/xtn/$popup
+! about:blank popups
+/about:blank.*/$popup,domain=bitporno.com|iceporn.com|katestube.com|videowood.tv|xtapes.to
+$popup,third-party,domain=hentai2read.com|porn-tube-club.com
+!------------------------Specific element hiding rules------------------------!
+! *** easylist:easylist/easylist_specific_hide.txt ***
+magnet.so###AD
+advfn.com###APS_300_X_600
+advfn.com###APS_BILLBOARD
+boredbro.com###AdBox728
+webcarstory.com###Ads
+search.avast.com###AsbAdContainer
+ranker.com###BLOG_AD_SLOT_1
+weegy.com###BannerDiv
+citynews.ca###Bigbox_300x250
+calculatorsoup.com###Bottom
+coincheckup.com,coincodex.com###CCx5StickyBottom
+coincodex.com###CCx6StickyBottom
+chicagoprowrestling.com###Chicagoprowrestling_com_Top
+gayemagazine.com###Containera2sdv > div > div > div[id^="comp-"]
+webmd.com###ContentPane40
+new-kissanime.me###CvBNILUxis
+dailydot.com###DD_Desktop_HP_Content1
+dailydot.com###DD_Desktop_HP_Content2
+dailydot.com###DD_Desktop_HP_Content3
+healthline.com###DMR1__slot
+tweaktown.com###DesktopTop
+doubtnut.com###Desktop_VideoPage_Side_Banner_1-container
+newser.com###DivStoryAdContainer
+stripes.com###FeatureAd
+howlongagogo.com,neatorama.com###FreeStarVideoAdContainer
+titantv.com###GridPlayer
+appatic.com,gamescensor.com###HTML2
+fanlesstech.com###HTML2 > .widget-content
+messitv.net###HTML23
+fanlesstech.com###HTML3
+fanlesstech.com###HTML4 > .widget-content
+fanlesstech.com###HTML5 > .widget-content
+gamescensor.com###HTML6
+fanlesstech.com###HTML6 > .widget-content
+breitbart.com###HavDW
+sitelike.org###HeaderAdsenseCLSFix
+messitv.net###Image5
+newstarget.com###Index06 > .Widget
+newstarget.com###Index07 > .Widget
+fortune.com###Leaderboard0
+naturalnews.com###MastheadRowB
+medicalnewstoday.com###MyFiAd
+medicalnewstoday.com###MyFiAd0
+neatorama.com###Neatorama_300x250_300x600_160x600_ATF
+neatorama.com###Neatorama_300x250_300x600_160x600_BTF
+neatorama.com###Neatorama_300x250_336x280_320x50_Incontent_1
+mainichi.jp###PC-english-rec1
+kohls.com###PDP_monetization_HL
+physicsandmathstutor.com###PMT_PDF_Top
+physicsandmathstutor.com###PMT_Top
+snwa.com###PolicyNotice
+audioz.download###PromoHead
+newstarget.com###PromoTopFeatured
+sciencealert.com###Purch_D_R_0_1
+edn.com###SideBarWrap
+soapcalc.net###SidebarLeft
+daringfireball.net###SidebarMartini
+soapcalc.net###SidebarRight
+imcdb.org###SiteLifeSupport
+puzzle-aquarium.com,puzzle-minesweeper.com,puzzle-nonograms.com,puzzle-skyscrapers.com###Skyscraper
+roblox.com###Skyscraper-Abp-Left
+roblox.com###Skyscraper-Abp-Right
+thecourier.com###TCFO_Middle2_300x250
+thecourier.com###TCFO_Middle_300x250
+today.az###TODAY_Slot_Top_1000x120
+today.az###TODAY_Slot_Vertical_01_240x400
+gearspace.com###Takeover
+road.cc###Top-Billboard
+the-scientist.com###Torpedo
+utne.com###URTK_Bottom_728x90
+utne.com###URTK_Middle_300x250
+utne.com###URTK_Right_300x600
+scrabble-solver.com###Upper
+doubtnut.com###Web_HomePage_Banner_Resposive_1-container
+doubtnut.com###Web_VideoPage_Banner_Resposive_1-container
+turbobit.net###__bgd_link
+news-daily.com,outlookindia.com,stripes.com###_snup-rtdx-ldgr1
+ytmp3.cc###a-320-50
+egotastic.com###a46c6331
+egotasticsports.com###a83042c4
+krunker.io###aHolder
+tokder.org###aaaa
+imagebam.com###aad-header-1
+imagebam.com###aad-header-2
+imagebam.com###aad-header-3
+kshow123.tv###ab-sider-bar
+travelpulse.com###ab_container
+uinterview.com###above-content
+pastemagazine.com###above_logo
+peacemakeronline.com###above_top_banner
+ftw.usatoday.com,mmajunkie.usatoday.com###acm-ad-tag-lawrence_dfp_desktop_arkadium
+ftw.usatoday.com,mmajunkie.usatoday.com###acm-ad-tag-lawrence_dfp_desktop_arkadium_after_share
+sptfy.be###ad
+lasvegassun.com###ad-colB-1
+retrostic.com,sickchirpse.com,thetimes.co.uk###ad-header
+livescore.com###ad-holder-gad-news-article-item
+healthbenefitstimes.com###ad-image-below
+thetimes.co.uk###ad-intravelarticle-inline
+dvdsreleasedates.com###ad-movie
+dappradar.com###ad-nft-top
+thedailymash.co.uk,thepoke.co.uk,thetab.com###ad-sidebar-1
+thedailymash.co.uk,thepoke.co.uk,thetab.com###ad-sidebar-2
+thedailymash.co.uk,thepoke.co.uk,thetab.com###ad-sidebar-3
+thedailymash.co.uk,thepoke.co.uk,thetab.com###ad-sidebar-4
+agegeek.com,boards.net,investing.com,mtaeta.info,notbanksyforum.com,pimpandhost.com,realgearonline.com,repairalmostanything.com,timeanddate.com,wordhippo.com,wordreference.com###ad1
+agegeek.com,investing.com,pimpandhost.com###ad2
+exchangerates.org.uk,investing.com###ad3
+comicbookmovie.com###adATFLeaderboard
+chortle.co.uk,coloring.ws,dltk-holidays.com,dltk-kids.com,kidzone.ws,pcsteps.com,primeraescuela.com###adBanner
+mdpi.com###adBannerContent
+moomoo.io###adCard
+globimmo.net###adConH
+sainsburysmagazine.co.uk###adSlot-featuredInBlue
+sherdog.com###adViAi
+myevreview.com###ad_aside_1
+cheatcodes.com###ad_atf_970
+musescore.com###ad_cs_12219747_300_250
+musescore.com###ad_cs_12219747_728_90
+all-nettools.com,britsabroad.com,filesharingtalk.com,kiwibiker.co.nz,printroot.com###ad_global_below_navbar
+myevreview.com###ad_main_bottom
+myevreview.com###ad_main_middle
+coinarbitragebot.com###adathm
+offidocs.com###adbottomoffidocs
+4qrcode.com###addContainer
+odditycentral.com###add_160x600
+lifenews.com###adds
+englishclub.com###adhed
+freepik.com###adobe-pagination-mkt-copy
+onworks.net###adonworksbot
+globimmo.net###adplus-anchor
+192-168-1-1-ip.co,receivesms.co###adresp
+audioreview.com,carlow-nationalist.ie,cellmapper.net,craigclassifiedads.com,dekhobd.com,duckduckgo.com,duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion,emb.apl305.me,g.doubleclick.net,ip-address.org,irannewsdaily.com,kildare-nationalist.ie,laois-nationalist.ie,lorempixel.com,photographyreview.com,quiz4fun.com,roscommonherald.ie,waterford-news.ie###ads
+birdsandblooms.com,familyhandyman.com,rd.com,tasteofhome.com,thehealthy.com###ads-container-single
+funkypotato.com###ads_header_games
+funkypotato.com###ads_header_home_970px
+lingojam.com###adsense-area-label
+ip-address.org###adsleft
+momjunction.com###adsolut
+byjus.com###adtech-related-links-container
+byjus.com###adtech-top-banner-container
+dict.leo.org###adv-drectangle1
+leo.org###adv-wbanner
+ventoy.net###adv_titles
+ventoy.net###adv_titles_foot
+radioonline.fm###advertise_center
+steamcardexchange.net,unshorten.it###advertisement
+lifenews.com###advertisement-top
+allthetests.com,bom.gov.au,cadenaazul.com,lapoderosa.com###advertising
+apkonline.net,offidocs.com###adxx
+thebugle.co.za###adz
+apkonline.net###adzz
+purplepainforums.com,snow-forecast.com###affiliates
+exportfromnigeria.info###affs
+osdn.net###after-download-ad
+prepostseo.com###after_button_ad_desktop
+agar.io###agar-io_300x250
+1000logos.net###ai_widget-4
+alchetron.com###alchetronFreeStarVideoAdContainer
+djchuang.com###amazon3
+wtechnews.com###aniBox
+mybanktracker.com###article-content > .lazyloaded
+timesofmalta.com###article-sponsored
+brisbanetimes.com.au,smh.com.au,theage.com.au,watoday.com.au###articlePartnerStories
+thehindu.com###articledivrec
+fool.com###articles-incontent2
+fool.com###articles-top
+findmysoft.com###as_336
+flyordie.com###asf
+stakingrewards.com###asset-calculator-banner
+domaintoipconverter.com###associates-1
+tvtropes.org###asteri-sidebar
+downforeveryoneorjustme.com###asurion
+assamtribune.com###async_body_tags
+addictivetips.com###at_popup_modal
+timesnownews.com###atf103388570
+cityandstateny.com###atlas-module
+dlraw.co,dlraw.to,manga-zip.info###avfap
+teamfortress.tv###aw
+gulte.com###awt_landing
+gayvegas.com###background
+presearch.com###background-cover
+soccerbase.com###ball_splash_holder
+gamepressure.com###baner-outer
+allmyfaves.com,allthetests.com,dailynews.lk,dealsonwheels.co.nz,dosgamesarchive.com,eth-converter.com,farmtrader.co.nz,freealts.pw,goosegame.io,greatbritishchefs.com,moviesfoundonline.com,pajiba.com,sundayobserver.lk,techconnect.com,vstreamhub.com###banner
+euroweeklynews.com###banner-970
+interest.co.nz###banner-ad-wrapper
+bbcamerica.com,ifc.com,sundancetv.com,wetv.com###banner-bottom
+op.gg,thecarconnection.com###banner-container
+battlefordsnow.com,cfjctoday.com,everythinggp.com,huskiefan.ca,larongenow.com,meadowlakenow.com,nanaimonewsnow.com,northeastnow.com,panow.com,rdnewsnow.com,sasknow.com,vernonmatters.ca###banner-header
+sourceforge.net###banner-sterling
+israelnationalnews.com###banner-sticky
+bbcamerica.com,ifc.com,onlinesearches.com,sundancetv.com,wetv.com###banner-top
+4teachers.org###banner-wrapper
+gamesfree.com###banner300
+edn.com,planetanalog.com###bannerWrap
+webtoolhub.com###banner_719_105
+today.az###banner_750x90
+asmag.com###banner_C
+asmag.com###banner_C2
+nitrome.com###banner_ad
+nitrome.com###banner_box
+nitrome.com###banner_description
+freshnewgames.com###banner_header
+baltic-course.com###banner_master_top
+autoplius.lt###banner_right
+nitrome.com###banner_shadow
+cdn.ampproject.org,linguee.com,thesuburban.com###banner_top
+workawesome.com###banner_wrap
+belgie.fm,danmark.fm,deutschland.fm,espana.fm,italia.fm,nederland.fm###bannerbg
+baltic-course.com###bannerbottom
+komikcast.site###bannerhomefooter
+baltic-course.com###bannerleft
+phuketwan.com###bannersTop
+baltic-course.com,webfail.com###bannertop
+h-online.com###bannerzone
+uinterview.com###below-content
+al.com,cleveland.com,gulflive.com,lehighvalleylive.com,masslive.com,mlive.com,newyorkupstate.com,nj.com,oregonlive.com,pennlive.com,silive.com,syracuse.com###below-toprail
+post-gazette.com###benn-poll-iframe-container
+safetydetectives.com###best_deals_widget
+dcnewsnow.com,ktla.com###bestreviews-widget
+usnews.com###bfad-slot
+gameophobias.com,hindimearticles.net,solution-hub.com###bfix2
+shellshock.io###big-house-ad
+bentoneveningnews.com,dailyregister.com,dailyrepublicannews.com###billBoardATF
+versus.com###bill_bottom
+cricketnetwork.co.uk,f1network.net,howtogermany.com,rugbynetwork.net,thefootballnetwork.net###billboard
+canberratimes.com.au,examiner.com.au,theland.com.au,whoscored.com###billboard-container
+thegazette.com###billboard-wrap
+inquirer.net###billboard_article
+gumtree.com###bing-text-ad-1
+gumtree.com###bing-text-ad-2
+gumtree.com###bing-text-ad-3
+plagiarismdetector.net###bio_ep
+plagiarismdetector.net###bio_ep_bg
+chilltracking.com###blink
+hawaiisbesttravel.com###block-103
+raspberrytips.com###block-11
+theneworleanstribune.com###block-15
+appleworld.today###block-26
+raspians.com###block-29
+raspians.com###block-31
+game-news24.com###block-50
+ericpetersautos.com###block-6
+systutorials.com###block-7
+leopathu.com###block-accuwebhostingcontenttop
+leopathu.com###block-accuwebhostingsidebartop
+slideme.org###block-block-31
+ancient-origins.net###block-block-49
+infoplease.com###block-ipabovethefold
+infoplease.com###block-ipbtfad
+infoplease.com###block-ipleaderboardad
+infoplease.com###block-ipmiddlewaread
+leopathu.com###block-listscleaningbanner
+romania-insider.com###block-nodepagebelowfromourpartners
+romania-insider.com###block-nodepagebelowlatespress
+romania-insider.com###block-nodepagebelowtrendingcontent
+encyclopedia.com###block-trustme-rightcolumntopad
+enca.com###block-views-block-sponsored-block-1
+mbauniverse.com###block-views-home-page-banner-block
+smbc-comics.com###boardleader
+forum.wordreference.com###botSupp
+coinarbitragebot.com###botfix
+cheese.com,investorplace.com###bottom-banner
+000webhost.com###bottom-banner-with-counter-holder-desktop
+eweek.com###bottom-footer-fixed-slot
+audioreview.com###bottom-leaderboard
+reverso.net###bottom-mega-rca-box
+crn.com###bottom-ribbon
+nytimes.com,nytimesn7cgmftshazwhfgzm37qxb44r64ytbb2dj3x62d2lljsciiyd.onion###bottom-wrapper
+streetinsider.com###bottom_ad_fixed
+funkypotato.com###bottom_banner_wrapper
+bleedingcool.com,heatmap.news,jamaicaobserver.com###bottom_leaderboard
+bleedingcool.com###bottom_medium_rectangle
+numista.com###bottom_pub_container
+atomic-robo.com###bottomspace
+flashscore.com,livescore.in###box-over-content-a
+planetminecraft.com###box_300btf
+planetminecraft.com###box_pmc_300btf
+comicbookrealm.com###brad
+bicycleretailer.com###brain-leader-slot
+brobible.com###bro-leaderboard
+dailydot.com###browsi-topunit
+techpp.com###brxe-ninhwq
+techpp.com###brxe-wtwlmm
+icon-icons.com###bsa-placeholder-search
+puzzle-aquarium.com,puzzle-minesweeper.com,puzzle-nonograms.com,puzzle-skyscrapers.com###btIn
+w3newspapers.com###btmadd
+battlefordsnow.com,cfjctoday.com,everythinggp.com,huskiefan.ca,larongenow.com,meadowlakenow.com,nanaimonewsnow.com,northeastnow.com,panow.com,rdnewsnow.com,sasknow.com,vernonmatters.ca###bumper-cars
+northcountrypublicradio.org###business
+music-news.com###buy-tickets
+channel4.com###c4ad-Top
+comicsands.com###c7da91bc-8e44-492f-b7fd-c382c0e55bda
+timesofindia.indiatimes.com###c_wdt_sports_rhs_atf_ad_1
+allrecipes.com###cal-app
+bitdegree.org###campaign-modal
+chordify.net###campaign_banner
+coinlisting.info###carousel-example-generic
+csdb.dk###casdivhor
+csdb.dk###casdivver
+cbn.com###cbn_leaderboard_atf
+cloudwards.net,guitaradvise.com###cbox
+linuxinsider.com###cboxOverlay
+curseforge.com###cdm-zone-03
+godbolt.org###ces
+romsmania.games###click-widget-banner
+xcalibrscans.com###close-teaser
+oneindia.com###closePopupDiv
+whocallsme.com###cnt_1
+whocallsme.com###cnt_2
+whocallsme.com###cnt_btm
+linuxinsider.com###colorbox
+smbc-comics.com###comicright > div[style]
+mirror.co.uk,themirror.com###comments-standalone-mpu
+kotaku.com,qz.com###commerce-inset-wrapper
+seatguru.com###comparePrices
+cpuid.com###console_log
+miniwebtool.com###contain300-1
+miniwebtool.com###contain300-2
+gearspace.com###container__DesktopFDAdBanner
+gearspace.com###container__DesktopForumdisplayHalfway
+coinhub.wiki###container_coinhub_sidead
+scanboat.com###content > .margin-tb-25
+allnewspipeline.com###content > [href]
+outputter.io###content > section.html
+fextralife.com###content-add-a
+blastingnews.com###content-banner-dx1-p1
+classicreload.com###content-top
+kbb.com###contentFor_kbbAdsSimplifiedNativeAd
+lineageos18.com###contentLocker
+indy100.com###content_1
+indy100.com###content_2
+indy100.com###content_3
+indy100.com###content_4
+indy100.com###content_5
+indy100.com###content_6
+indy100.com###content_7
+notebookcheck.net###contenta
+alt-codes.net###copyModal .modal-body
+wsj.com###coupon-links
+lordz.io###crossPromotion
+croxyproxy.rocks###croxyExtraZapper
+asmag.com###ctl00_en_footer1_bannerPopUP1_panel_claudebro
+digit.in###cubewrapid
+motortrend.com###curatedNativoAd
+wolfstream.tv###customAnnouncement
+miloserdov.org,playstore.pw,reneweconomy.com.au,wpneon.com###custom_html-10
+miloserdov.org,playstore.pw###custom_html-11
+theregister.co.nz###custom_html-13
+cdromance.com,colombiareports.com,miloserdov.org,mostlyblogging.com###custom_html-14
+mostlyblogging.com,sonyalpharumors.com###custom_html-15
+eetimes.eu,miloserdov.org###custom_html-16
+budgetbytes.com,ets2.lt,miloserdov.org###custom_html-2
+blissfuldomestication.com###custom_html-22
+sonyalpharumors.com###custom_html-25
+mostlyblogging.com,sarkarideals.com,tvarticles.me###custom_html-3
+comicsheatingup.net###custom_html-5
+colombiareports.com,filmschoolrejects.com,hongkongfp.com,phoneia.com,sarkarideals.com,weatherboy.com###custom_html-6
+medievalists.net###custom_html-7
+noqreport.com###custom_html-7 > .custom-html-widget
+theteche.com###custom_html-8
+laineygossip.com###date-banner
+helpwithwindows.com###desc
+fastfoodnutrition.org###desk_leader_ad
+deccanherald.com###desktop-ad
+republicworld.com###desktop-livetv-728-90
+infotel.ca###desktopBannerBottom
+infotel.ca###desktopBannerFooter
+infotel.ca###desktopBannerTop
+eldersweather.com.au###desktop_new_forecast_top_wxh
+pikalytics.com###dex-list-0
+flyordie.com###dgad
+realclearpolitics.com###distro_right_rail
+tribunnews.com###div-Inside-MediumRectangle
+designtaxi.com###div-center-wrapper
+allafrica.com###div-clickio-ad-superleaderboard-a
+herfamily.ie,sportsjoe.ie###div-gpt-top_page
+abovethelaw.com###div-id-for-middle-300x250
+abovethelaw.com###div-id-for-top-300x250
+newser.com###divImageAd
+newser.com###divMobileHeaderAd
+abbotsfordgasprices.com,albertagasprices.com,barriegasprices.com,bcgasprices.com,calgarygasprices.com,edmontongasprices.com,gasbuddy.com,halifaxgasprices.com,hamiltongasprices.com,kwgasprices.com,londongasprices.com,manitobagasprices.com,montrealgasprices.com,newbrunswickgasprices.com,newfoundlandgasprices.com,novascotiagasprices.com,nwtgasprices.com,ontariogasprices.com,ottawagasprices.com,peigasprices.com,quebeccitygasprices.com,quebecgasprices.com,reginagasprices.com,saskatoongasprices.com,saskgasprices.com,torontogasprices.com,vancouvergasprices.com,victoriagasprices.com,winnipeggasprices.com###divSky
+newser.com###divStoryBigAd1
+newser.com###divWhizzcoRightRail
+hometheaterreview.com###div_block-382-13
+hindustantimes.com###divshopnowRight
+rednationonline.ca###dnn_BannerPane
+permanentstyle.com###dttop
+jigzone.com###dz
+sashares.co.za###elementor-popup-modal-89385
+asmag.com###en_footer1_bannerPopUP1_panel_claudebro
+energyforecastonline.co.za###endorsers
+geekwire.com###engineering-centers-sidebar
+wral.com###exco
+designtaxi.com###exid
+jigzone.com###fH
+openloading.com###fakeplayer
+asianjournal.com###fancybox-overlay
+asianjournal.com###fancybox-wrap
+thedrinknation.com###fcBanner
+247checkers.com###feature-ad-holder
+perezhilton.com###feature-spot
+fandom.com###featured-video__player-container
+getyarn.io###filtered-bottom
+investing.com###findABroker
+healthshots.com###fitnessTools
+healthshots.com###fitnessToolsAdBot
+thisismoney.co.uk###fiveDealsWidget
+mediafire.ec,point2homes.com,propertyshark.com###fixedban
+cnx-software.com###fixeddbar
+topsporter.net###fl-ai-widget-placement
+vscode.one###flamelab-convo-widget
+nanoreview.net###float-sb-right
+clintonherald.com,ottumwacourier.com,thetimestribune.com###floorboard_block
+streams.tv###flowerInGarden
+12tomatoes.com###footboard
+mybib.com###footer > div
+fanlesstech.com###footer-1
+metasrc.com###footer-content
+bundesliga.com###footer-partnerlogo
+warcraftpets.com###footer-top
+ksstradio.com###footer-widgets
+fixya.com###footerBanner
+techrounder.com###footerFixBanner
+atptour.com###footerPartners
+phpbb.com###footer_banner_leaderboard
+forums.anandtech.com,forums.pcgamer.com,forums.tomsguide.com,forums.tomshardware.com###footer_leaderboard
+feedicons.com###footerboard
+wanderlustcrew.com###fpub-popup
+blenderartists.org,stonetoss.com###friends
+peacemakeronline.com###front_mid_right > center
+mangaku.vip###ftads
+imgbox.com###full-page-redirect
+datareportal.com###fuse-sticky
+scienceabc.com###fusenative
+clocktab.com###fv_left-side
+chromecastappstips.com###fwdevpDiv0
+fxstreet.com###fxs-sposorBroker-topBanner
+colourlovers.com###ga-above-footer
+colourlovers.com###ga-below-header
+9bis.net###gad
+cheatcodes.com###game_details_ad
+geekwire.com###geekwork
+engadget.com###gemini-right-rail-thumbnails
+investing.com###generalOverlay
+getvideobot.com###getvideobot_com_300x250_responsive
+getvideobot.com###getvideobot_com_980x250_billboard_responsive
+thingstodovalencia.com###getyourguide-widget
+dotesports.com,progameguides.com###gg-masthead
+glowstery.com###ghostery-highlights
+freegames.org###gla
+wordcounter.net###glya
+gearlive.com,mediamass.net###google
+propertyshark.com###google-ads-directoryViewRight
+healthbenefitstimes.com###google-adv-top
+photojpl.com###google01
+mediamass.net###google3
+windows2universe.org###google_mockup
+desmoinesregister.com###gpt-dynamic_native_article_4
+desmoinesregister.com###gpt-high_impact
+malaysiakini.com###gpt-layout-top-container
+desmoinesregister.com###gpt-poster
+spellcheck.net###grmrl_one
+nintendoworldreport.com###hAd
+streamingrant.com###hb-strip
+cadenaazul.com,lapoderosa.com###hcAdd
+castanet.net###hdad
+inventorspot.com,mothering.com,wordfind.com###header
+khelnow.com###header-adwords-section
+aeroexpo.online,agriexpo.online,directindustry.com,fonearena.com,frontlinesoffreedom.com,stakingrewards.com,winemag.com###header-banner
+dominicantoday.com###header-banners
+bestvpnserver.com,techitout.co.za###header-content
+govevents.com###header-display
+vanguardngr.com###header-sidebar
+looperman.com###header-top
+nisnews.nl###header-wrap
+newser.com###headerAdSection
+realestate.com.au###headerLeaderBoardSlot
+forums.anandtech.com,forums.androidcentral.com,forums.pcgamer.com,forums.space.com,forums.tomsguide.com,forums.tomshardware.com,forums.whathifi.com,redflagdeals.com###header_leaderboard
+digitalpoint.com###header_middle
+coolors.co###header_nav + a
+writerscafe.org###header_pay
+deckstats.net###header_right_big
+metasrc.com###header_wrapper
+hwhills.com,nikktech.com,revizoronline.com,smallscreenscoop.com###headerbanner
+sat24.com###headercontent-onder
+hometheaterreview.com###headerhorizontalad
+nnn.ng###hfgad1
+nnn.ng###hfgad2
+stackoverflow.com###hireme
+techmeme.com###hiring
+thecountersignal.com###home-ad-1
+gunbroker.com###home-ad-a-wrapper
+transfermarkt.com###home-rectangle-spotlight
+shobiddak.com###homeShobiddakAds
+sslshopper.com###home_quick_search_buttons > div
+downloadsafer.com###homebannerbottom
+hometheaterreview.com###homepagehorizontalad
+semiconductor-today.com###homeright
+nutritioninsight.com,packaginginsights.com###horizontalblk
+skylinewebcams.com###hostedby
+check-host.net###hostings
+whatismyip.com###hp-ad-banner-top
+webmd.com###hp-ad-container
+blog.hubspot.com###hs_cos_wrapper_blog_post_sticky_cta
+nettiauto.com,nettikaravaani.com,nettikone.com,nettimarkkina.com,nettimokki.com,nettimoto.com,nettivene.com,nettivuokraus.com###huge_banner
+ytmp3.nu###i
+robbreport.com###icon-sprite
+maxsports.site,newsturbovid.com###id-custom_banner
+rakuten.com###id_parent_rrPlacementTop
+fc-lc.xyz,tophostingapp.com###iframe_id
+unitconversion.org###ileft
+4f.to,furbooru.org###imagespns
+searchenginereports.net###imagess1
+searchenginereports.net###imagess2
+searchenginereports.net###imagess3
+linksly.co###imgAddDirectLink
+mydorpie.com###imgbcont
+crn.com###imu1forarticles
+scoop.co.nz###in-cont
+thefastmode.com###inarticlemodule
+droidinformer.org###inf_bnr_1
+droidinformer.org###inf_bnr_2
+droidinformer.org###inf_bnr_3
+planetradio.co.uk###inline-01
+planetradio.co.uk###inline-02
+planetradio.co.uk###inline-03
+datamation.com,esecurityplanet.com,eweek.com,serverwatch.com,webopedia.com###inline-top
+howstuffworks.com###inline-video-wrap
+krnb.com###inner-footer
+workhouses.org.uk###inner-top-ad
+timesofmalta.com###inscroll-banner
+imagebam.com###inter > [src]
+booklife.com,yabeat.org###interstitial
+cnsnews.com,newsbusters.org###intranet_long
+newsbusters.org###intranet_mid
+lcpdfr.com###ipsLayout_mainArea > .uBlockBrokeOurSiteIpsAreaBackground
+osbot.org###ipsLayout_mainArea > div > div
+uk420.com###ipsLayout_sidebar > div[align="center"]
+osbot.org###ips_footer > div > div
+unitconversion.org###iright
+allnewspipeline.com###isg_add
+newshub.co.nz###island-unit-2
+icon-icons.com###istockphoto-placeholder
+fakeupdate.net###itemz
+offidocs.com###ja-container-prev
+apkonline.net###ja-container-prev-0
+apkonline.net,offidocs.com###ja-container-prev-b
+offidocs.com###ja-container-prev-c
+9gag.com###jsid-ad-container-page_adhesion
+dhakatribune.com###jw-popup
+food52.com###jw_iframe
+variety.com###jwplayer_xH3PjHXT_plsZnDJi_div
+jigzone.com###jz
+ceoexpress.com###kalamazooDiv
+msguides.com###kknbnpcv
+kvraudio.com###kvr300600
+freeads.co.uk###l_sk1
+peacemakeronline.com###latest_news > center
+elfaro.net###layout-ad-header
+screengeek.net###layoutContainer
+247wallst.com###lb-fill
+friv.com###lba
+friv.com###lbaTop
+irishnews.com###lbtop
+piraproxy.info,unblockedstreaming.net###lbxUR99472
+123unblock.bar###lbxVPN666
+1337x.to###ldn7de0e493c51600d52011ec86418a260314c1d4a1
+dailydooh.com###leaddiv
+kontraband.com,motherproof.com,sansabanews.com###leader
+techrepublic.com###leader-bottom
+techrepublic.com###leader-plus-top
+ugstandard.com###leader-wrap
+techgeek365.com###leader-wrapper
+12tomatoes.com,allwomenstalk.com,datpiff.com,logotv.com,newcartestdrive.com,news.sky.com,news.tvguide.co.uk,onthesnow.ca,onthesnow.co.nz,onthesnow.co.uk,onthesnow.com,onthesnow.com.au,penny-arcade.com,publishersweekly.com,skysports.com,stuff.tv,thedrinknation.com,theserverside.com###leaderboard
+open.spotify.com###leaderboard-ad-element
+vocm.com###leaderboard-area
+bbc.com###leaderboard-aside-content
+orilliamatters.com,sootoday.com,time.com,timescolonist.com,vancouverisawesome.com###leaderboard-container
+variety.com###leaderboard-no-padding
+alternet.org###leaderboard-placeholder
+foodnetwork.com###leaderboard-wrap
+drdobbs.com###leaderboard1
+babycenter.com,fixya.com###leaderboardContainer
+macrotrends.net###leaderboardTag
+games2jolly.com###leaderboard_area
+games2jolly.com###leaderboard_area_home
+planetminecraft.com###leaderboard_atf
+canadianbusiness.com,macleans.ca,vidio.com,yardbarker.com###leaderboard_container
+spoonuniversity.com###leaderboard_fixed
+belgie.fm,danmark.fm,deutschland.fm,espana.fm,italia.fm,nederland.fm###leaderboardbg
+eel.surf7.net.my###left
+news9live.com###left_before_story
+assamtribune.com###left_level_before_tags
+nitrome.com###left_skyscraper_container
+nitrome.com###left_skyscraper_shadow
+kitco.com###left_square
+liverpoolfc.com###lfc_ads_article_pos_one
+liverpoolfc.com###lfc_ads_home_pos_one
+closerweekly.com,intouchweekly.com,lifeandstylemag.com###listProductWidgetData
+wormate.io###loa831pibur0w4gv
+nhl.com###loading-container
+lordz.io###lordz-io_300x250
+lordz.io###lordz-io_300x250_2
+lordz.io###lordz-io_728x90
+rxresource.org###lowerdrugsAd
+lowes.com###lws_hp_recommendations_belowimage_1
+hackerbot.net###madiv
+hackerbot.net###madiv2
+hackerbot.net###madiv3
+animehub.ac###main-content > center
+proprivacy.com###main-popup
+w3big.com,w3schools.com###mainLeaderboard
+planefinder.net###map-ad-container
+themeforest.net###market-banner
+defenseworld.net###mb-bar
+koreaherald.com###mbpAd022303
+active.com###med_rec_bottom
+active.com###med_rec_top
+wakingtimes.com###media_image-2
+airfactsjournal.com,apkmb.com,wbap.com###media_image-3
+palestinechronicle.com###media_image-4
+mostlyblogging.com###media_image-5
+chess.com###medium-rectangle-atf-ad
+moomoo.io###menuContainer > .menuCard
+voiranime.com###mg_vd
+forward.com###middle-of-page
+peacemakeronline.com###middle_banner_section
+bleedingcool.com###middle_medium_rectangle
+pastemagazine.com###middle_rectangle
+cyberdaily.au###mm-azk560023-zone
+dbltap.com###mm-player-placeholder-large-screen
+mmorpg.com###mmorpg_desktop_list_1
+pocketgamer.com###mobile-background
+tvtropes.org###mobile_1
+tvtropes.org###mobile_2
+express.co.uk###mobile_floating_test
+permanentstyle.com###mobtop
+coinarbitragebot.com###modal1
+cellmapper.net###modal_av_details
+mytuner-radio.com###move-ad
+moviemistakes.com###moviemistakes_300x600_300x250_160x600_sidebar_2
+consobaby.co.uk,gumtree.com,pcgamingwiki.com,thefootballnetwork.net###mpu
+skysports.com###mpu-1
+bbc.com###mpu-side-aside-content
+standard.co.uk###mpu2_parent
+standard.co.uk###mpu_bottom_sb_2_parent
+spin.ph###mrec3
+whatshappening.com.ph###mrecCarousel
+nitrome.com###mu_2_container
+nitrome.com###mu_3_container
+wrestlingnews.co###mvp-head-top
+atlantatribune.com,barrettsportsmedia.com,footballleagueworld.co.uk,ioncinema.com,marijuanamoment.net,ripplecoinnews.com,tribune.net.ph###mvp-leader-wrap
+twinfinite.net###mvp-main-content-wrap
+hotklix.com###mvp-main-nav-top > .mvp-main-box
+dailyboulder.com###mvp-post-bot-ad
+barrettsportsmedia.com###mvp-wallpaper
+manganatos.com,mangareader.cc###myModal
+fileproinfo.com###myNav
+mediaupdate.co.za###mycarousel
+coveteur.com###native_1
+coveteur.com###native_2
+thejournal.ie###nativeads-sponsorbar-touch-redesign
+gearspace.com###navbar_notice_730
+needpix.com###needpix_com_top_banner
+my.juno.com###newsCarousel
+livelaw.in###news_on_exit
+farminguk.com###newsadvert
+canberratimes.com.au,theland.com.au###newswell-leaderboard-container
+nextshark.com###nextshark_com_leaderboard_top
+searchfiles.de###nextuse
+nanoreview.net###nfloat-sb-right
+seroundtable.com###ninja_box
+pcgamebenchmark.com,pcgamesn.com,pockettactics.com,thedigitalfix.com,wargamer.com###nn_astro_wrapper
+steamidfinder.com,trueachievements.com,truesteamachievements.com,truetrophies.com###nn_bfa_wrapper
+techraptor.net,unite-db.com###nn_lb1
+techraptor.net,unite-db.com###nn_lb2
+techraptor.net###nn_lb3
+techraptor.net###nn_lb4
+techraptor.net,tftactics.gg###nn_player
+steamidfinder.com###nn_player_wrapper
+asura.gg,nacm.xyz###noktaplayercontainer
+boxingstreams.cc,crackstreams.gg,cricketstreams.cc,footybite.cc,formula1stream.cc,mlbshow.com,nbabite.com###nordd
+forums.somethingawful.com###notregistered
+ekathimerini.com###nx-stick-help
+allaboutcookies.org###offer-review-widget-container
+freeaddresscheck.com,freecallerlookup.com,freecarrierlookup.com,freeemailvalidator.com,freegenderlookup.com,freeiplookup.com,freephonevalidator.com###offers
+streetdirectory.com###offers_splash_screen
+gizbot.com###oi-custom-camp
+comicbook.com###omni-skybox-plus-top
+kohls.com###open-drawer
+livestreamfails.com###oranum_livefeed_container_0
+ckk.ai###orquidea-slideup
+electronicproducts.com,powvideo.net,streamplay.to,uxstyle.com###overlay
+dokicloud.one,fmoviefree.net,myflixer.is###overlay-center
+mzzcloud.life,rabbitstream.net###overlay-container
+mp4upload.com###overlayads
+drivevideo.xyz###overlays
+animexin.vip###overplay
+aninews.in,devdiscourse.com,footballorgin.com,gadgets360.com,hardwaretimes.com,justthenews.com,ndtv.com,oneindia.com,wionews.com,zeebiz.com###parentDiv0
+mg.co.za###partner-content
+hwbot.org###partner-tiles
+cnn.com###partner-zone
+limesurvey.org###partnerbanner
+fastseduction.com,independent.co.uk###partners
+arrivealive.co.za###partners_container
+binaries4all.com###payserver
+demap.info###pcad
+shine.cn###pdfModal
+petco.com###pencil-banner
+investopedia.com###performance-marketing_1-0
+premierguitar.com###pg_leaderboard
+radiocaroline.co.uk###photographsforeverDiv
+giantfreakinrobot.com###playwire-homepage-takeover-leaderboard
+issuu.com###playwire-video
+files.im###plyrrr
+pikalytics.com###pokedex-top-ad
+politico.com###pol-01-wrap
+standard.co.uk###polar-sidebar-sponsored
+standard.co.uk###polarArticleWrapper
+pons.com###pons-ad-footer
+pons.com###pons-ad-leaderboard__container
+epicload.com###popconlkr
+safetydetectives.com###popup
+bankinfosecurity.com###popup-interstitial-full-page
+chaseyoursport.com###popup1
+quickmeme.com###post[style="display: block;min-height: 290px; padding:0px;"]
+ultrabookreview.com###postadsside
+ultrabookreview.com###postzzif
+the-scientist.com###preHeader
+playok.com###pread
+adlice.com###preview-div
+talkbass.com###primary-products
+slashfilm.com###primis-container
+sslshopper.com###promo-outer
+thestreamable.com###promo-signup-bottom-sheet
+dailymail.co.uk###promo-unit
+bnnbloomberg.ca###promotions
+proxyium.com###proxyscrape_ad
+frequence-radio.com###pub_listing_top
+elevationmap.net###publift_home_billboard
+fxsforexsrbijaforum.com###pun-announcement
+onmsft.com###pwDeskSkyBtf1
+d4builds.gg###pwParentContainer
+sporcle.com###quiz-right-rail-unit-2
+techmeme.com###qwdbfwh
+comicbookrealm.com###rad
+rawstory.com###rawstory_front_2_container
+reverso.net###rca
+businessgreen.com###rdm-below-header
+slideserve.com###readl
+scoop.co.nz###rect
+dict.cc###recthome
+dict.cc###recthomebot
+tapatalk.com###relatedblogbar
+10minutemail.net,eel.surf7.net.my,javatpoint.com###right
+msguides.com###right-bottom-camp
+comicbookrealm.com###right-rail > .module
+purewow.com###right-rail-ad
+gogetaroomie.com###right-space
+online-translator.com###rightAdvBlock
+openspeedtest.com###rightArea
+medicaldialogues.in###right_level_8
+numista.com###right_pub
+yardbarker.com###right_top_sticky
+forums.space.com,forums.tomshardware.com###rightcol_bottom
+forums.anandtech.com,forums.androidcentral.com,forums.pcgamer.com,forums.space.com,forums.tomsguide.com,forums.tomshardware.com,forums.whathifi.com###rightcol_top
+road.cc###roadcc_Footer-Billboard
+box-core.net,mma-core.com###rrec
+anisearch.com###rrightX
+noqreport.com###rumble_vj59vh
+protocol.com###sHome_0_0_3_0_0_5_1_0_2
+glennbeck.com###sPost_0_0_5_0_0_9_0_1_2_0
+advocate.com###sPost_Layout_Default_0_0_18_0_0_2_2
+out.com###sPost_Layout_Default_0_0_20_0_0_2_2
+digminecraft.com###sabl
+flatpanelshd.com###sb-site > .hidden-xs.container
+centurylink.net,wowway.net###sc_home_header_banner
+wowway.net###sc_home_news_banner
+wowway.net###sc_home_recommended_banner
+wowway.net###sc_read_header_banner
+my.juno.com###scienceTile
+coinarbitragebot.com###screener
+pao.gr###section--sponsors
+racingamerica.com###section-15922
+hometheaterreview.com###section-20297-191992
+hometheaterreview.com###section-246-102074
+neoseeker.com###section-pagetop
+searchenginejournal.com###sej-pop-wrapper_v2
+analyticsinsight.net###sgpb-popup-dialog-main-div-wrapper
+v3rmillion.net###sharingPlace
+search.brave.com###shopping
+filedropper.com,lifenews.com###sidebar
+whatsondisneyplus.com###sidebar > .widget_text.amy-widget
+tellymix.co.uk###sidebar > div[style]
+globalwaterintel.com###sidebar-banner
+spiceworks.com###sidebar-bottom-ad
+ftvlive.com###sidebar-one-wrapper
+carmag.co.za###sidebar-primary
+saharareporters.com###sidebar-top
+interest.co.nz,metasrc.com###sidebar-wrapper
+scotsman.com###sidebarMPU1
+scotsman.com###sidebarMPU2
+ubergizmo.com###sidebar_card_spon
+trucknetuk.com###sidebarright
+disqus.com###siderail-sticky-ads-module
+4runnerforum.com,acuraforums.com,blazerforum.com,buickforum.com,cadillacforum.com,camaroforums.com,cbrforum.com,chryslerforum.com,civicforums.com,corvetteforums.com,fordforum.com,germanautoforums.com,hondaaccordforum.com,hondacivicforum.com,hondaforum.com,hummerforums.com,isuzuforums.com,kawasakiforums.com,landroverforums.com,lexusforum.com,mazdaforum.com,mercuryforum.com,minicooperforums.com,mitsubishiforum.com,montecarloforum.com,mustangboards.com,nissanforum.com,oldsmobileforum.com,pontiactalk.com,saabforums.com,saturnforum.com,truckforums.com,volkswagenforum.com,volvoforums.com###sidetilewidth
+gephardtdaily.com###simple-sticky-footer-container
+995thewolf.com,newcountry963.com###simpleimage-3
+hot933hits.com###simpleimage-5
+inoreader.com###sinner_container
+pocketgamer.com###site-background
+webkinznewz.ganzworld.com###site-description
+dead-frog.com###site_top
+2oceansvibe.com###skin
+namemc.com###skin_wrapper
+dafont.com###sky
+dailymail.co.uk,thisismoney.co.uk###sky-left-container
+dailymail.co.uk###sky-right
+dailymail.co.uk,thisismoney.co.uk###sky-right-container
+skylinewebcams.com###skylinewebcams-ads2
+dailydooh.com###skysbar
+holiday-weather.com,omniglot.com,w3schools.com,zerochan.net###skyscraper
+nitrome.com###skyscraper_box
+nitrome.com###skyscraper_shadow
+scrabble-solver.com###skywideupper
+gunsamerica.com###slidebox
+compleatgolfer.com,sacricketmag.com###slidein
+whatshappening.com.ph###sliderCarousel
+accuradio.com###slot2Wrapper
+orteil.dashnet.org###smallSupport
+cryptonewsz.com###smart-ad
+point2homes.com###smartAsset
+247wallst.com###smartasset
+givemesport.com###sn_gg_ad_wrapper
+gpfans.com###snack_ldb
+ghacks.net###snhb-snhb_ghacks_bottom-0
+who-called.co.uk###snigel_ads-mobile
+thedriven.io###solarchoice_banner_1
+wcny.org###soliloquy-12716
+toumpano.net###sp-feature
+hilltimes.com###sp-mini-box
+toumpano.net###sp-right
+coingape.com###spinbtn
+fastseduction.com###splash
+streetdirectory.com###splash_screen_overlay
+downloads.codefi.re###spo
+downloads.codefi.re###spo2
+firmwarefile.com###spon
+progressillinois.com,slitaz.org###sponsor
+meteocentrale.ch###sponsor-info
+newsfirst.lk###sponsored-content-1
+hiphopkit.com###sponsored-sidebar
+techmeme.com###sponsorposts
+fastseduction.com,geekwire.com,landreport.com,whenitdrops.com###sponsors
+colourlovers.com###sponsors-links
+ourworldofenergy.com###sponsors_container
+rent.ie###sresult_banner
+tokder.org###ssss
+bizarrepedia.com###stack > .ln-thr
+geekwire.com###startup-resources-sidebar
+newcartestdrive.com###static-asset-placeholder-2
+newcartestdrive.com###static-asset-placeholder-3
+tvtropes.org###stick-cont
+dvdsreleasedates.com###sticky
+guelphmercury.com###sticky-ad-1
+thestar.com###sticky-ad-2
+rudrascans.com###sticky-ad-head
+datamation.com,esecurityplanet.com,eweek.com,serverwatch.com,webopedia.com###sticky-bottom
+ccm.net###sticky1
+independent.co.uk,standard.co.uk###stickyFooterRoot
+afr.com###stickyLeaderboard
+bostonglobe.com###sticky_container.width_full
+eurogamer.net,rockpapershotgun.com,vg247.com###sticky_leaderboard
+lethbridgeherald.com###stickybox
+medicinehatnews.com###stickyleaderboard
+sun-sentinel.com###stnWrapperDiv
+westernjournal.com###stnvideo
+rawstory.com###story-top-ad
+healthshots.com###storyBlockOne
+semiconductor-today.com###storyHorAdd
+web-capture.net###stw_ad
+arenaev.com,gsmarena.com###subHeader
+macrotrends.net###subLeaderboardTag
+ebaumsworld.com###subheader_atf_wrapper
+streams.tv###sunGarden
+eenewseurope.com###superBanner
+dashnet.org###support
+vk.com,vk.ru###system_msg
+gumtree.com###tBanner
+nme.com###taboola-below-article
+oneindia.com###taboola-mid-article-thumbnails
+the-independent.com###taboola-mid-article-thumbnails-ii
+the-independent.com###taboola-mid-article-thumbnails-iii
+drivespark.com,goodreturns.in###taboola-mid-category-thumbnails
+lifeandstylemag.com###taboola-right-rail-thumbnails
+comicbookrealm.com###tad
+cyclingtips.com###takeover
+romsgames.net###td-top-leaderboard
+based-politics.com###tdi_107
+linuxtoday.com###tdi_46
+cornish-times.co.uk###teads
+asurascans.com,ozulscansen.com,realmscans.com,void-scans.com,yugenmangas.net###teaser3
+the-star.co.ke###teasers
+eetimes.com###techpaperSliderContainer
+tecmint.com###tecmint_incontent
+tecmint.com###tecmint_leaderboard_article_top
+worldtribune.com###text-101
+geeky-gadgets.com###text-105335641
+thisiscolossal.com,vgleaks.com###text-11
+hpcwire.com###text-115
+cathnews.co.nz,cryptoreporter.info,net-load.com,vgleaks.com,wakingtimes.com###text-12
+radiosurvivor.com,thewashingtonstandard.com,vgleaks.com###text-13
+ericpetersautos.com###text-133
+vgleaks.com###text-14
+geeksforgeeks.org,vgleaks.com###text-15
+geeksforgeeks.org,thesurvivalistblog.net,vgleaks.com###text-16
+cleantechnica.com###text-165
+weekender.com.sg###text-17
+populist.press###text-2
+freecourseweb.com###text-20
+net-load.com###text-25
+2smsupernetwork.com,cryptoreporter.info,net-load.com###text-26
+cryptoreporter.info###text-27
+2smsupernetwork.com###text-28
+2smsupernetwork.com###text-3
+needsomefun.net###text-36
+wrestlingnews.co###text-38
+conversanttraveller.com###text-39
+postnewsgroup.com,thewashingtonstandard.com,tvarticles.me###text-4
+conversanttraveller.com###text-40
+conversanttraveller.com,needsomefun.net###text-41
+bigblueball.com###text-416290631
+needsomefun.net###text-42
+premiumtimesng.com###text-429
+kollelbudget.com###text-43
+premiumtimesng.com###text-440
+foodsforbetterhealth.com###text-46
+eevblog.com###text-49
+computips.org,techlife.com,technipages.com###text-5
+2smsupernetwork.com###text-50
+2smsupernetwork.com,snowbrains.com,times.co.zm,treesofblue.com###text-6
+yugatech.com###text-69
+treesofblue.com###text-7
+kollelbudget.com###text-70
+kollelbudget.com###text-78
+playco-opgame.com,sadeempc.com,thewashingtonstandard.com###text-8
+kollelbudget.com###text-82
+kollelbudget.com###text-83
+bestvpnserver.com,thewashingtonstandard.com###text-9
+nanoreview.net###the-app > .mb
+bestfriendsclub.ca###theme-bottom-section > .section-content
+bestfriendsclub.ca###theme-top-section > .section-content
+indy100.com###thirdparty01
+standard.co.uk###thirdparty_03_parent
+hardwaretimes.com###tie-block_1077
+hardwaretimes.com###tie-block_1239
+hardwaretimes.com###tie-block_2144
+hardwaretimes.com###tie-block_3197
+siasat.com###tie-block_3274
+box-core.net,mma-core.com###tlbrd
+technewsworld.com###tnavad
+bramptonguardian.com###tncms-region-global-container-bottom
+accuweather.com,phonescoop.com###top
+crn.com###top-ad-fragment-container
+zap-map.com###top-advert-content
+bookriot.com###top-alt-content
+coingecko.com###top-announcement-header
+cheese.com,fantasypros.com,foodlovers.co.nz,foodnetwork.ca,investorplace.com,kurocore.com,skift.com,thedailywtf.com,theportugalnews.com###top-banner
+globalwaterintel.com###top-banner-image
+independent.co.uk,the-independent.com###top-banner-wrapper
+missingremote.com###top-bar
+returnyoutubedislike.com###top-donors
+openspeedtest.com###top-lb
+capetownmagazine.com###top-leader-wrapper
+austinchronicle.com,carmag.co.za,thegazette.com###top-leaderboard
+gogetaroomie.com###top-space
+progameguides.com###top-sticky-sidebar-container
+gamepur.com###top-sticky-sidebar-wrapper
+sporcle.com###top-unit
+nytimes.com,nytimesn7cgmftshazwhfgzm37qxb44r64ytbb2dj3x62d2lljsciiyd.onion###top-wrapper
+investing.com###topBroker
+digitalartsonline.co.uk###topLeaderContainer
+mautofied.com###topLeaderboard
+forum.wordreference.com###topSupp
+walterfootball.com###top_S
+utne.com###top_advertisement
+chicagotribune.com###top_article_fluid_wrapper
+indy100.com,sportsclimax.com###top_banner
+caribpress.com###top_banner_container
+cfoc.org###top_custom_banner
+chicagotribune.com###top_fluid_wrapper
+bleedingcool.com,jamaicaobserver.com,pastemagazine.com###top_leaderboard
+bleedingcool.com###top_medium_rectangle
+pastemagazine.com###top_rectangle
+imdb.com###top_rhs
+bleedingcool.com###top_spacer
+bookriot.com###top_takeover
+w3newspapers.com###topads
+tf2-servers.com###topadspot
+absolutelyrics.com,cdrlabs.com,exiledonline.com,findtheword.info,realitywanted.com,revizoronline.com,snapfiles.com###topbanner
+armenpress.am###topbnnr
+coinlean.com###topcontainer
+semiconductor-today.com###topheaderimage
+worldtimebuddy.com###toprek
+macmillandictionary.com,macmillanthesaurus.com,oxfordlearnersdictionaries.com###topslot_container
+atomic-robo.com###topspace
+charlieintel.com###topunit
+techspot.com###tsadvideo
+pcworld.com,techhive.com###tso
+trumparea.com###udmvid
+planetminecraft.com###ultra_wide
+thequint.com###unitDivWrapper-0
+upworthy.com###upworthyFreeStarVideoAdContainer
+my.juno.com###usWorldTile
+forum.mobilism.org###v-mobilism-org-0
+nutritioninsight.com###verticlblks
+filmibeat.com,goodreturns.in,mykhel.com,oneindia.com###verticleLinks
+ghgossip.com###vi-sticky-ad
+investing.com###video
+sportskeeda.com###video-player-container--
+forums.tomsguide.com###video_ad
+gumtree.com.au###view-item-page__leaderboard-wrapper
+playstationtrophies.org,xboxachievements.com###vnt-lb-a
+counselheal.com,mobilenapps.com###vplayer_large
+browserleaks.com###vpn_text
+ettvcentral.com###vpnvpn
+censor.net###w1001
+censor.net###w1031
+w2g.tv###w2g-square-ad
+igberetvnews.com,mediaweek.com.au,nextnewssource.com###wallpaper
+everythingrf.com###wallpaper_1980168
+eeweb.com###wallpaper_image
+everythingrf.com###walltrack
+realclearhistory.com###warning_empty_div
+opensubtitles.org###watch_online
+xxxporn.tube###watch_sidevide
+xxxporn.tube###watch_undervideo
+worldcrunch.com###wc_leaderboard
+topfiveforex.com###wcfloatDiv
+coingax.com###wcfloatDiv4
+geotastic.net###wetter-de-banner
+webfail.com###wf-d-300x250-sb1
+walterfootball.com###wf_brow_box
+sportscardforum.com###wgo_affiliates
+itnews.com.au###whitepapers-container
+tribunnews.com###wideskyscraper
+conversanttraveller.com###widget_sp_image-28
+conversanttraveller.com###widget_sp_image-4
+ultrabookreview.com###widgetad2-top
+etherealgames.com###widgets-wrap-after-content
+etherealgames.com###widgets-wrap-before-content
+gaynewzealand.com###wn-insurance-quote-editor
+rediff.com###world_right1
+rediff.com###world_top
+worldrecipes.eu###worldrecipeseu_970x90_desktop_sticky_no_closeplaceholder
+forward.com###wp_piano_top_wrapper
+todayheadline.co###wpgtr_stickyads_textcss_container
+eteknix.com###wrapper > header
+cranestodaymagazine.com,hoistmagazine.com,ttjonline.com,tunnelsonline.info###wrapper_banners
+xda-developers.com###xda_alert_bar
+blasternation.com###xobda
+yardbarker.com###yb_recirc
+transfermarkt.com###zLHXgnIj
+croxyproxy.rocks###zapperSquare
+beyondgames.biz,ecoustics.com###zox-lead-bot
+cleantechnica.com###zox-top-head-wrap
+marketscreener.com###zppFooter
+marketscreener.com###zppMiddle2
+marketscreener.com###zppRight2
+ultrabookreview.com###zzifhome
+ultrabookreview.com###zzifhome2
+arydigital.tv###zzright
+androidauthority.com##.---___0f
+androidauthority.com##.---___Mb
+androidauthority.com##.---___mh
+androidauthority.com##.---___nb
+talkingpointsmemo.com##.--span\:12.AdSlot
+bigissue.com##.-ad
+gamejolt.com##.-ad-widget
+porndoe.com##.-h-banner-svg-desktop
+nhl.com##.-leaderboard
+nhl.com##.-mrec
+hellomagazine.com##.-variation-megabanner
+yelp.com##.ABP
+gamesadshopper.com##.AD
+advfn.com##.APS_TOP_BANNER_468_X_60_container
+buzzfeed.com,imgur.io,sevendaysvt.com,tasty.co,tucsonweekly.com##.Ad
+deseret.com##.Ad-space
+thingiverse.com##.AdBanner__adBanner--GpB5d
+topgear.com##.AdContainer-sc-cy9ye3-4
+racingamerica.com##.AdPlacement
+petfinder.com##.AdUnitParagraph-module--adunitContainer--2b7a6
+therealdeal.com##.AdUnit_adUnitCenter__FKOWE
+complex.com##.AdWrapper__AdPlaceholderContainer-sc-15idjh1-0
+earth.com##.AdZone_adZone__2w4TC
+thescore.com##.Ad__container--2fhQb
+interestingengineering.com##.Ad_adContainer__ZlEzV
+charlieintel.com,dexerto.com##.Ad_ad__SqDQA
+therealdeal.com##.Ad_rootHomepage__mSzqh
+greatandhra.com##.AdinHedare
+coingape.com##.AdsMid
+nhl.com##.AdsViewController
+iogames.onl##.Adv
+airportinfo.live,audiokarma.org,audizine.com##.AdvallyTag
+tennesseestar.com,themichiganstar.com,theminnesotasun.com,theohiostar.com##.AdvancedText
+iogames.onl##.Advc
+tvnz.co.nz##.Advert
+suffolknews.co.uk##.Advertisement
+zerohedge.com##.AdvertisingSlot_placement__b8TLC
+dallasobserver.com##.AirBillboardInlineContentresponsive
+browardpalmbeach.com,dallasobserver.com,miaminewtimes.com,phoenixnewtimes.com,westword.com##.AirLeaderboardMediumRectanglesComboInlineContent
+browardpalmbeach.com,dallasobserver.com,miaminewtimes.com,phoenixnewtimes.com,westword.com##.AirMediumRectangleComboInlineContent
+interestingengineering.com##.Anyclip_conBody__jtq8a
+technicalarp.com##.Arpian-ads
+rankedboost.com##.Article-A-Align
+cruisecritic.com,cruisecritic.com.au##.ArticleItem_scrollTextContainer__GrBC_
+whatcar.com##.ArticleTemplate_masthead__oY950
+naturalnews.com##.BNVSYDQLCTIG
+photonics.com##.BOX_CarouselAd
+freebitz.xyz##.BannerContainer
+freebitz.xyz##.BannerContainerScrapper
+freebitz.xyz##.BannerMain
+coffeeordie.com##.BannerPromo-desktop
+bloomberg.com##.BaseAd_baseAd-dXBqvbLRJy0-
+cnbc.com##.BoxRail-styles-makeit-ad--lyuQB
+latestdeals.co.uk##.BrD5q
+petfinder.com##.CardGrid-module--breakOut--a18cf
+thedailybeast.com##.CheatSheetList__placeholder
+thedailybeast.com##.Cheat__top-ad
+tutiempo.net##.ContBannerTop
+dappradar.com##.Container--bottomBanners
+songmeanings.com##.Container_ATFR_300
+songmeanings.com##.Container_ATF_970
+swarajyamag.com##.CrIrA
+ulta.com##.CriteoProductRail
+calcalistech.com##.Ctech_general_banner
+lithub.com##.Custom_Ads
+inverness-courier.co.uk,johnogroat-journal.co.uk##.DMPU
+naturalnews.com##.DVFNRYKUTQEP
+nationalworld.com##.Dailymotion__Inner-sc-gmjr3r-1
+realityblurb.com##.Desktop-Sticky
+tweaktown.com##.DesktopRightBA
+thekitchn.com##.DesktopStickyFooter
+additivemanufacturing.media,compositesworld.com,ptonline.com##.DisplayBar
+charismanews.com##.FpFeaturedBoxWrap
+slideshare.net##.FreestarAdContainer_container__Ze7OY
+askapache.com##.GAD
+modrinth.com##.GBBNWLJVGRHFLYVGSZKSSKNTHFYXHMBD
+google.co.uk##.GBTLFYRDM0
+google.com##.GC3LC41DERB + div[style="position: relative; height: 170px;"]
+google.com##.GGQPGYLCD5
+google.com##.GGQPGYLCMCB
+google.com##.GISRH3UDHB
+goodmenproject.com##.GMP_728_top
+motortrend.com##.GR_6-
+imgur.com##.Gallery-Content-AdSense
+cargurus.com##.Gi1Z6i
+coin360.com##.GuYYbg
+naturalnews.com##.HALFBYEISCRJ
+metservice.com##.Header
+planningportal.co.uk##.HeaderAdArea__HeaderAdContainer-sc-1lqw6d0-0
+mope.io##.Home__home-ad-wrapper
+artsy.net##.IITnS
+sporcle.com##.IMGgi
+streamingsites.com##.IPdetectCard
+inverness-courier.co.uk##.LLKGTX
+nyctourism.com##.Layout_mobileStickyAdContainer__fCbCq
+kentonline.co.uk##.LeaderBack
+fivebooks.com##.Leaderboard-container
+nationalgeographic.com##.LinkedImage
+inverness-courier.co.uk,johnogroat-journal.co.uk,stamfordmercury.co.uk##.MPU
+wayfair.com##.MediaNativePlacement-wrapper-link
+engadget.com##.Mih\(90px\)
+medievalists.net##.Mnet_TopLeft_970x250
+metservice.com##.Mrec-min-height
+tvtv.us##.MuiPaper-root.jss12
+ahaan.co.uk##.MuiSnackbar-anchorOriginBottomCenter
+news18.com##.NAT_add
+mangasect.com,manhuaplus.com##.OUTBRAIN
+chronicle.com##.OneColumnContainer
+newscientist.com##.Outbrain
+kentonline.co.uk##.PSDRGC
+govtech.com##.Page-billboard
+afar.com##.Page-header-hat
+apnews.com##.Page-header-leaderboardAd
+quora.com##.PageContentsLayout___StyledBox-d2uxks-0 > .q-box > .q-sticky > .qu-pb--medium
+ask.com##.PartialKelkooResults
+hulu.com##.PauseAdCreative-wrap
+thekitchn.com##.Post__inPostVideoAdDesktop
+imgur.com##.PrimisPlayerContainer
+stocktwits.com##.Primis_container__KwtjV
+tech.hindustantimes.com##.ProductAffilateWrapper
+plainenglish.io##.PromoContainer_container__sZ3ls
+citybeat.com,clevescene.com,cltampa.com##.PromoTopBar
+sciencealert.com##.Purch_Y_C_0_1-container
+tumblr.com##.Qrht9
+tvzoneuk.com##.R38Z80
+barrons.com##.RenderBlock__AdWrapper-sc-1vrmc5r-0
+whatcar.com##.ReviewHero_mastheadStyle__Bv8X0
+geometrydash.io##.RowAdv
+gq.com##.SavingsUnitedCouponsWrapper-humLIe
+lbcgroup.tv##.ScriptDiv
+coingape.com##.Sidemads
+simkl.com##.SimklTVDetailEpisodeLinksItemHref
+thedailybeast.com##.Sizer
+coingape.com##.SponserdBtn
+goodreads.com##.SponsoredProductAdContainer
+streetsblog.org##.Sponsorship_articleBannerWrapper__wV_1S
+apartmenttherapy.com,cubbyathome.com,thekitchn.com##.StickyFooter
+coin360.com##.Sticky_Promo
+slant.co##.SummaryPage-LustreEmbed
+dictionary.com##.TeixwVbjB8cchva8bDlg
+imgur.com##.Top300x600
+cnbc.com##.TopBanner-container
+topgear.com##.TopContainer-sc-cy9ye3-1
+poebuilds.net##.W_tBwY
+britannicaenglish.com##.WordFromSponsor_content_enToar
+this.org##.Wrap-leaderboard
+tumblr.com##.XJ7bf
+tumblr.com##.Yc2Sp
+desmoinesregister.com##.ZJBvMP__ZJBvMP
+getpocket.com##.\'syndication-ad\'
+olympics.com##.\-partners
+coincodex.com##.\32 023_06_15_bcgame
+deviantart.com##._15LLi
+motortrend.com##._1Ib8n
+swarajyamag.com##._1eNH8
+gadgetsnow.com##._1edxh
+gadgetsnow.com##._1pjMr
+afkgaming.com##._2-COY
+motortrend.com##._2I-e5
+motortrend.com##._2IzhW
+motortrend.com##._2UIiN
+brisbanetimes.com.au,smh.com.au,watoday.com.au##._2gSkZ
+jeffdornik.com##._2kEVY
+gadgetsnow.com##._2slKI
+motortrend.com##._2xd_t
+coderwall.com##._300x250
+timesofindia.indiatimes.com##._3JJMX
+deviantart.com##._3jfHP
+timesnownews.com##._3n1p
+thequint.com##._4xQrn
+outlook.live.com##._BAY1XlyQSIe6kyKPlYP
+gadgets360.com##.__wdgt_rhs_kpc
+gadgets360.com##._ad
+timeout.com##._ad_1elek_1
+vscode.one##._flamelab-ad
+cryptfaucet.com##._hide
+tampafp.com##._ning_outer
+coingraph.us,cryptfaucet.com##.a
+startpage.com##.a-bg
+rumble.com##.a-break
+abcya.com##.a-leader
+chimpreports.com,collive.com,defence-industry.eu,islandecho.co.uk,locklab.com,mallorcasunshineradio.com,runwaygirlnetwork.com,spaceref.com,talkradioeurope.com,theshoesnobblog.com##.a-single
+abcya.com##.a-skyscraper
+krebsonsecurity.com##.a-statement
+tellymix.co.uk##.a-text
+androidtrends.com,backthetruckup.com,bingehulu.com,streamsgeek.com,techcentral.co.za,trendstorys.com##.a-wrap
+breitbart.com##.a-wrapper
+cryptfaucet.com##.a1
+getpocket.com##.a1cawpek
+chordify.net##.a1p2y5ib
+cryptfaucet.com,informer.com##.a2
+cryptfaucet.com##.a3
+wmtips.com##.a3f17
+getpocket.com##.a47c4wn
+digminecraft.com##.a47d50c4
+crypto.news##.a49292cf69626
+thechinaproject.com##.a4d
+cryptfaucet.com##.a6
+westword.com##.a65vezphb1
+localtiger.com##.a9gy_lt
+scoredle.com##.aHeader
+fastweb.com##.a_cls_s
+fastfoodnutrition.org##.a_leader
+premierguitar.com##.a_promo
+fastfoodnutrition.org##.a_rect
+informer.com##.aa-728
+informer.com##.aa0
+romsmania.games##.aawp
+ncomputers.org,servertest.online##.ab
+freedownloadmanager.org##.ab1
+freedownloadmanager.org##.ab320
+convertingcolors.com,slickdeals.net,whitecoatinvestor.com##.abc
+merriam-webster.com##.abl
+imgbb.com##.abnr
+rankedboost.com##.above-article-section
+creativeuncut.com##.abox-s_i
+creativeuncut.com##.abox-s_i2
+roblox.com##.abp
+manualslib.com##.abp_adv_s-title
+pocketgamer.com##.abs
+albertsons.com##.abs-carousel-proxy > [aria-label="Promo or Ad Banner"]
+tfn.scot##.absolute-leaderboard
+gamesystemrequirements.com##.act_eng
+11alive.com,12news.com,12newsnow.com,13newsnow.com,13wmaz.com,5newsonline.com,9news.com,abc10.com,abovethelaw.com,adelaidenow.com.au,adtmag.com,aero-news.net,airportia.com,americanprofile.com,appleinsider.com,arstechnica.com,as.com,asianwiki.com,associationsnow.com,autoevolution.com,autoguide.com,automation.com,autotrader.com.au,bab.la,barchart.com,bdnews24.com,beinsports.com,bgr.in,biometricupdate.com,bloomberg.com,boats.com,bobvila.com,booksourcemagazine.com,bostonglobe.com,bradleybraves.com,breitbart.com,businessdailyafrica.com,businessinsider.com,businesstech.co.za,c21media.net,cbc.ca,cbs19.tv,celebdigs.com,celebified.com,ch-aviation.com,chargedevs.com,chemistryworld.com,cnn.com,cnnphilippines.com,colourlovers.com,comicbookmovie.com,computerworld.com,couriermail.com.au,cracked.com,createtv.com,crn.com,crossmap.com,crosswalk.com,csoonline.com,cyberscoop.com,dailycaller.com,dailylobo.com,dailyparent.com,dailytarheel.com,dcist.com,dealnews.com,defenseone.com,defensescoop.com,discordbotlist.com,downdetector.co.nz,downdetector.co.uk,downdetector.co.za,downdetector.com,downdetector.in,downdetector.sg,dpreview.com,earlygame.com,edmontonjournal.com,elpais.com,emoji.gg,eurosport.com,excellence-mag.com,familydoctor.org,fanpop.com,femalefirst.co.uk,filehippo.com,firstcoastnews.com,fox6now.com,foxbusiness.com,foxnews.com,fxnowcanada.ca,gamesadshopper.com,gayvegas.com,geelongadvertiser.com.au,go.com,golfweather.com,gtplanet.net,heraldsun.com.au,hodinkee.com,inc-aus.com,indiatvnews.com,infoworld.com,inhabitat.com,insider.com,interfax.com.ua,jscompress.com,kagstv.com,kare11.com,kcentv.com,kens5.com,kgw.com,khou.com,kiiitv.com,king5.com,koreabang.com,kpopstarz.com,krem.com,ksdk.com,ktvb.com,kvue.com,lagom.nl,leaderpost.com,lifezette.com,looktothestars.org,mangarockteam.com,marketwatch.com,maxpreps.com,mcpmag.com,minecraftmods.com,modernretail.co,monkeytype.com,motherjones.com,mprnews.org,mybroadband.co.za,myfox8.com,myfoxzone.com,mygaming.co.za,myrecipes.com,namibtimes.net,nejm.org,neowin.net,networkworld.com,newbeauty.com,news.com.au,news.sky.com,newscentermaine.com,newsday.com,nymag.com,nytimes.com,nytimesn7cgmftshazwhfgzm37qxb44r64ytbb2dj3x62d2lljsciiyd.onion,nzherald.co.nz,patch.com,patheos.com,pcgamesn.com,petfinder.com,picmix.com,planelogger.com,playsnake.org,playtictactoe.org,pokertube.com,politico.com,politico.eu,powernationtv.com,proremodeler.com,quackit.com,ranker.com,ratemds.com,ratemyprofessors.com,redmondmag.com,refinery29.com,revolver.news,roadsideamerica.com,salisburypost.com,scholarlykitchen.sspnet.org,seattletimes.com,segmentnext.com,simpledesktops.com,slickdeals.net,slippedisc.com,smartcompany.com.au,smsfi.com,softpedia.com,soranews24.com,spot.im,spryliving.com,statenews.com,statscrop.com,straight.com,streetinsider.com,stv.tv,sundayworld.com,thecut.com,thedigitalfix.com,thedp.com,theeastafrican.co.ke,thefader.com,thefirearmblog.com,thegrocer.co.uk,themercury.com.au,thenation.com,theringreport.com,thestarphoenix.com,thv11.com,time.com,tntsports.co.uk,today.com,toonado.com,townhall.com,tracker.gg,tribalfootball.com,triblive.com,tripadvisor.ca,tripadvisor.co.uk,tripadvisor.co.za,tripadvisor.com,tripadvisor.ie,tripadvisor.in,tweaktown.com,ultimatespecs.com,uptodown.com,usmagazine.com,usnews.com,vancouversun.com,vogue.in,vulture.com,wamu.org,washingtontimes.com,watzatsong.com,wbir.com,wcnc.com,weatheronline.co.uk,webestools.com,webmd.com,weeklytimesnow.com.au,wfaa.com,wfmynews2.com,wgnt.com,wgntv.com,wgrz.com,whas11.com,windsorstar.com,winnipegfreepress.com,wkyc.com,wltx.com,wnep.com,worthplaying.com,wqad.com,wral.com,wrif.com,wtsp.com,wusa9.com,wwltv.com,wzzm13.com,x17online.com,yorkpress.co.uk##.ad
+independent.ie##.ad--articlerectangle
+hifi-classic.net##.ad--google_adsense > .ad--google_adsense
+hifi-classic.net##.ad--google_adsense_bottom
+allbusiness.com##.ad--tag
+ip-address.org##.ad-1-728
+ip-address.org##.ad-2-336
+ip-address.org##.ad-3-728
+archdaily.com##.ad-300-250
+ip-address.org##.ad-5-300
+birdwatchingdaily.com##.ad-advertisement-vertical
+buzzfeed.com##.ad-awareness
+britannica.com,courthousenews.com,diabetesjournals.org,imgmak.com,infobel.com,linkedin.com,pilot007.org,radiotimes.com,soundguys.com##.ad-banner
+home-designing.com,inc.com,trustpilot.com##.ad-block
+fangoria.com##.ad-block--300x250
+sciencenews.org##.ad-block-leaderboard__freestar___Ologr
+fangoria.com##.ad-block__container
+cryptodaily.co.uk##.ad-bottom-spacing
+save.ca##.ad-box
+mv-voice.com##.ad-break
+npr.org##.ad-config
+12news.com,9news.com,9to5google.com,9to5mac.com,aad.org,advfn.com,all3dp.com,allaboutcookies.org,allnovel.net,athleticbusiness.com,audiokarma.org,beeradvocate.com,beliefnet.com,bizjournals.com,biznews.com,bolavip.com,businessinsider.com,cbs8.com,cc.com,ccjdigital.com,computerworld.com,delish.com,driven.co.nz,ecr.co.za,electrek.co,engineeringnews.co.za,equipmentworld.com,etcanada.com,footyheadlines.com,fox10phoenix.com,fox13news.com,fox26houston.com,fox29.com,fox2detroit.com,fox32chicago.com,fox35orlando.com,fox4news.com,fox5atlanta.com,fox5dc.com,fox5ny.com,fox7austin.com,fox9.com,foxbusiness.com,foxla.com,foxnews.com,funkidslive.com,gfinityesports.com,globalspec.com,gmanetwork.com,grammarbook.com,hbr.org,howstuffworks.com,huffpost.com,insidehook.com,insider.com,intouchweekly.com,khou.com,koat.com,ktvu.com,lifeandstylemag.com,macstories.net,mail.com,mangakakalot.app,memuplay.com,metro.us,metrophiladelphia.com,miningweekly.com,mixed-news.com,mobilesyrup.com,modernhealthcare.com,msnbc.com,my9nj.com,nbcnews.com,newrepublic.com,nzherald.co.nz,oneesports.gg,opb.org,papermag.com,physiology.org,pixiv.net,punchng.com,realsport101.com,reason.com,refinery29.com,roadandtrack.com,scroll.in,seattletimes.com,slideshare.net,songkick.com,sportskeeda.com,thelocal.at,thelocal.ch,thelocal.de,thelocal.dk,thelocal.es,thelocal.fr,thelocal.it,thelocal.no,thelocal.se,themarketherald.ca,tmz.com,toofab.com,uploadvr.com,usmagazine.com,vanguardngr.com,wogx.com,wral.com##.ad-container
+wheelofnames.com##.ad-declaration
+sciencealert.com##.ad-desktop\:block
+cnn.com##.ad-feedback__modal
+simracingsetup.com##.ad-fixed-bottom
+mobilesyrup.com##.ad-goes-here
+pinkvilla.com##.ad-heder-320-50
+andscape.com##.ad-incontent-wrapper
+dailyuptea.com##.ad-info
+mariopartylegacy.com##.ad-long
+pedestrian.tv##.ad-no-mobile
+constructionenquirer.com##.ad-page-takeover
+mirror.co.uk,themirror.com##.ad-placeholder
+computerworld.com,infoworld.com,networkworld.com,probuildstats.com##.ad-placement
+radiotimes.com##.ad-placement-inline--2
+comedy.com##.ad-placement-wrapper
+beincrypto.com##.ad-post-right-sidebar-1
+beincrypto.com##.ad-post-right-sidebar-2
+atlasobscura.com##.ad-site-top-full-width
+nationalreview.com##.ad-skeleton
+accesswdun.com##.ad-slider-block
+cnn.com##.ad-slot-header__wrapper
+cointelegraph.com##.ad-slot_NjPAE
+oann.com##.ad-slot__ad-label
+freepressjournal.in##.ad-slots
+techinformed.com##.ad-text-styles
+bqprime.com##.ad-with-placeholder-m__place-holder-wrapper__1_rkH
+trueachievements.com##.ad-wrap
+crn.com,smithsonianmag.com,tasty.co##.ad-wrapper
+gamingdeputy.com##.ad-wrapper-parent-video
+allscrabblewords.com,famously-dead.com,famouslyarrested.com,famouslyscandalous.com,gamesadshopper.com,iamgujarat.com,lolcounter.com,mpog100.com,samayam.com,timesofindia.com,vijaykarnataka.com##.ad1
+allscrabblewords.com,famously-dead.com,famouslyarrested.com,famouslyscandalous.com,mpog100.com##.ad2
+allscrabblewords.com,mpog100.com##.ad3
+india.com##.ad5
+cricketcountry.com##.ad90mob300
+chron.com,crypto-news-flash.com,greenwichtime.com,houstonchronicle.com,mysanantonio.com,seattlepi.com,sfchronicle.com,sfgate.com,thetelegraph.com,timesunion.com##.adBanner
+medibang.com##.adBlock__pc
+emojiphrasebook.com##.adBottom
+bigislandnow.com##.adBreak
+m.economictimes.com,someecards.com,trailspace.com##.adContainer
+etymonline.com##.adContainer--6CVz1
+hellomagazine.com##.adContainerClass_acvudum
+techspot.com##.adContainerSide2
+anews.com.tr##.adControl
+carsdirect.com##.adFooterWrapper
+bramptonguardian.com,guelphmercury.com,insideottawavalley.com,niagarathisweek.com,thespec.com,thestar.com##.adLabelWrapper
+insideottawavalley.com,thestar.com##.adLabelWrapperManual
+bramptonguardian.com##.adSlot___3IQ8M
+drive.com.au##.adSpacing_drive-ad-spacing__g09um
+thestockmarketwatch.com##.adSpotPad
+healthnfitness.net##.adTrack
+sofascore.com##.adUnitBox
+dailyo.in##.adWrapp
+food.com##.ad__ad
+disqus.com##.ad__adh-wrapper
+nationalpost.com,vancouversun.com##.ad__inner
+politico.eu##.ad__mobile
+dailykos.com##.ad__placeholder
+asianjournal.com##.ad_before_title
+cheatcodes.com##.ad_btf_728
+ntvkenya.co.ke##.ad_flex
+auto-data.net##.ad_incar
+advocate.com##.ad_leaderboard_wrap
+bigislandnow.com##.ad_mobileleaderboard
+housing.com##.ad_pushup_paragraph
+housing.com##.ad_pushup_subtitle
+upi.com##.ad_slot_inread
+kitco.com##.ad_space_730
+advocate.com##.ad_tag
+outlookindia.com##.ad_unit_728x90
+watchmovierulz.to##.ad_watch_now
+queerty.com##.adb-box-large
+queerty.com##.adb-top-lb
+tellymix.co.uk##.adb_top
+wordfind.com##.adbl
+dataversity.net,sakshi.com,songlyrics.com,yallamotor.com##.adblock
+bookriot.com##.adblock-content
+entrepreneur.com,interglot.com,pricespy.co.nz,sourcedigit.com,telegraphindia.com##.adbox
+moviechat.org##.adc
+boards.4channel.org##.adc-resp
+boards.4channel.org##.adc-resp-bg
+ar15.com##.adcol
+ancient.eu,fanatix.com,gamertweak.com,gematsu.com,videogamemods.com,worldhistory.org##.adcontainer
+sumanasa.com##.adcontent
+thegatewaypundit.com##.adcovery
+thegatewaypundit.com##.adcovery-home-01
+thegatewaypundit.com##.adcovery-postbelow-01
+online-image-editor.com,thehindu.com##.add
+mid-day.com##.add-300x250
+mid-day.com##.add-970x250
+buzz.ie,irishpost.com,theweekendsun.co.nz##.add-block
+cricketcountry.com##.add-box
+morningstar.in##.add-container
+indianexpress.com##.add-first
+ians.in##.add-inner
+businessesview.com.au,holidayview.com.au,realestateview.com.au,ruralview.com.au##.add-item
+zeenews.india.com##.add-placeholder
+ndtv.com##.add-section
+moneycontrol.com##.add-spot
+media4growth.com##.add-text
+brandingmag.com##.add-wrap
+ndtv.com##.add-wrp
+muslimobserver.com##.add2
+projectorcentral.com##.addDiv2
+projectorcentral.com##.addDiv3
+ndtv.com##.add__txt
+ndtv.com##.add__wrp
+ndtv.com##.add_dxt-non
+longevity.technology,news18.com##.add_section
+timesofindia.indiatimes.com##.addblock
+longevity.technology##.addvertisment
+aish.com##.adholder-sidebar
+auto-data.net##.adin
+watchcartoononline.bz##.adkiss
+boards.4channel.org##.adl
+animalfactguide.com,msn.com,portlandmonthlymag.com,romsgames.net,sportsmediawatch.com##.adlabel
+prokerala.com##.adm-unit
+goldderby.com##.adma
+brickset.com##.admin.buy
+web-dev-qa-db-fra.com##.adn-ar
+freepik.com##.adobe-coupon-container
+freepik.com##.adobe-detail
+freepik.com##.adobe-grid-design
+flightglobal.com,thriftyfun.com##.adp
+vice.com##.adph
+1sale.com,1v1.lol,7billionworld.com,9jaflaver.com,achieveronline.co.za,canstar.com.au,canstarblue.co.nz,cheapies.nz,climatechangenews.com,coingax.com,cryptonomist.ch,currencyrate.today,economictimes.com,energyforecastonline.co.za,esports.com,eventcinemas.co.nz,filmapik21.tv,flashx.tv,gamesadshopper.com,geo.tv,govtrack.us,gramfeed.com,hentaikun.com,hockeyfeed.com,i24news.tv,idiva.com,indiatimes.com,inspirock.com,investing.com,m.economictimes.com,mangasect.com,marinetraffic.com,mb.com.ph,mega4upload.com,mehrnews.com,meta-calculator.com,mini-ielts.com,miningprospectus.co.za,motogp.com,mugshots.com,nbc.na,news.nom.co,nsfwyoutube.com,onlinerekenmachine.com,ozbargain.com.au,piliapp.com,readcomicsonline.ru,russia-insider.com,russian-faith.com,savevideo.me,sgcarmart.com,sherdog.com,stars-portraits.com,straitstimes.com,teamblind.com,tehrantimes.com,tellerreport.com,thenews.com.pk,thestar.com.my,viamichelin.com,viamichelin.ie,vijesti.me,y8.com,yummy.ph##.ads
+moneycontrol.com##.ads-320-50
+dallasinnovates.com##.ads-article-body
+dnaindia.com,wionews.com##.ads-box-300x250
+wionews.com##.ads-box-300x300
+dnaindia.com,wionews.com##.ads-box-970x90
+dnaindia.com,wionews.com##.ads-box-d90-m300
+gosunoob.com,indianexpress.com,matrixcalc.org,roblox.com,spotify.com,wccftech.com##.ads-container
+fintech.tv##.ads-img
+readcomicsonline.ru##.ads-large
+kiz10.com##.ads-medium
+theasianparent.com##.ads-open-placeholder
+bangkokpost.com##.ads-related
+gameshub.com##.ads-slot
+lowfuelmotorsport.com##.ads-stats
+wallpapers.com##.ads-unit-fts
+ndtv.com##.ads-wrp
+auto.hindustantimes.com##.adsHeight300x600
+tech.hindustantimes.com##.adsHeight720x90
+auto.hindustantimes.com##.adsHeight970x250
+dailyo.in##.adsWrp
+radaris.com##.ads_160_600
+games2jolly.com##.ads_310_610_sidebar_new
+metro.co.uk##.ads__index__adWrapper--cz7QL
+glanceoflife.com##.ads_margin
+lightnovelpub.com##.adsbox
+adlice.com,informer.com,waqi.info##.adsbygoogle
+aitextpromptgenerator.com##.adsbyus_wrapper
+gayvegas.com,looktothestars.org,nintandbox.net,plurk.com,rockpasta.com,thebarentsobserver.com,tolonews.com,webtor.io##.adsense
+radaris.com##.adsense-responsive-bottom
+temporary-phone-number.com##.adsense-top-728
+101soundboards.com##.adsense_matched_content
+bolnews.com##.adsheading
+nepallivetoday.com##.adsimage
+search.b1.org##.adslabel
+ev-database.org##.adslot_detail1
+ev-database.org##.adslot_detail2
+cdrab.com,cryptfaucet.com,offerinfo.net##.adslr
+bolnews.com##.adspadding
+downzen.com##.adt
+makemytrip.com##.adtech-desktop
+miamitodaynews.com##.adtext
+mp1st.com##.adthrive
+wdwmagic.com##.adthrive-homepage-header
+wdwmagic.com##.adthrive-homepage-in_content_1
+quadraphonicquad.com##.adthrive-placeholder-header
+quadraphonicquad.com##.adthrive-placeholder-static-sidebar
+pinchofyum.com##.adthrive_header_ad
+wdwmagic.com##.adunit-header
+ip-address.org##.aduns
+ip-address.org##.aduns2
+ansamed.info,baltic-course.com,futbol24.com,gatewaynews.co.za,gsmarena.com,jetphotos.com,karger.com,mangaku.vip,maritimejobs.com,newagebd.net,prohaircut.com,railcolornews.com,titter.com,zbani.com##.adv
+blastingnews.com##.adv-box-content
+healthleadersmedia.com##.adv-con
+junauza.com##.adv-hd
+48hills.org,audiobacon.net,bhamnow.com,coinedition.com,coinquora.com,creativecow.net,elements.visualcapitalist.com,iconeye.com,kdnuggets.com,londonnewsonline.co.uk,manageditmag.co.uk,mondoweiss.net,ottverse.com,overclock3d.net,smallarmsreview.com,sportsspectrum.com,sundayworld.co.za,tampabayparenting.com,theaudiophileman.com##.adv-link
+sneakernews.com##.adv-parent
+chaseyoursport.com##.adv-slot
+greencarreports.com,motorauthority.com##.adv-spacer
+worldarchitecture.org##.adv1WA1440
+futbol24.com##.adv2
+worldarchitecture.org##.adv2WA1440
+yesasia.com##.advHr
+hurriyetdailynews.com##.advMasthead
+imagetotext.info##.adv_text
+barkinganddagenhampost.co.uk,becclesandbungayjournal.co.uk,blogto.com,burymercury.co.uk,cambstimes.co.uk,cardealermagazine.co.uk,crimemagazine.com,dailyedge.ie,derehamtimes.co.uk,dermnetnz.org,dissmercury.co.uk,dunmowbroadcast.co.uk,eadt.co.uk,eastlondonadvertiser.co.uk,edp24.co.uk,elystandard.co.uk,etf.com,eveningnews24.co.uk,exmouthjournal.co.uk,fakenhamtimes.co.uk,football.co.uk,gearspace.com,gematsu.com,greatyarmouthmercury.co.uk,hackneygazette.co.uk,hamhigh.co.uk,hertsad.co.uk,huntspost.co.uk,icaew.com,ilfordrecorder.co.uk,iol.co.za,ipswichstar.co.uk,islingtongazette.co.uk,lgr.co.uk,lowestoftjournal.co.uk,maltapark.com,midweekherald.co.uk,momjunction.com,morningstar.co.uk,newhamrecorder.co.uk,newstalkzb.co.nz,northnorfolknews.co.uk,northsomersettimes.co.uk,pinkun.com,proxcskiing.com,romfordrecorder.co.uk,royston-crow.co.uk,saffronwaldenreporter.co.uk,sidmouthherald.co.uk,stowmarketmercury.co.uk,stylecraze.com,sudburymercury.co.uk,tbivision.com,the42.ie,thecomet.net,thedrum.com,thejournal.ie,tineye.com,trucksplanet.com,wattonandswaffhamtimes.co.uk,whtimes.co.uk,wisbechstandard.co.uk,wymondhamandattleboroughmercury.co.uk##.advert
+gozofinder.com##.advert-iframe
+farminguk.com##.advert-word
+who-called.co.uk##.advertLeftBig
+empireonline.com##.advertWrapper_billboard__npTvz
+momjunction.com,stylecraze.com##.advertinside
+freeaddresscheck.com,freecallerlookup.com,freecarrierlookup.com,freeemailvalidator.com,freegenderlookup.com,freeiplookup.com,freephonevalidator.com,kpopping.com,zimbabwesituation.com##.advertise
+gpfans.com##.advertise-panel
+cointelegraph.com##.advertise-with-us-link_O9rIX
+salon.com##.advertise_text
+aan.com,aarp.org,additudemag.com,animax-asia.com,apkforpc.com,audioxpress.com,axn-asia.com,bravotv.com,citiblog.co.uk,cnbctv18.com,cnn59.com,controleng.com,downzen.com,dw.com,dwturkce.com,escapeatx.com,foodsforbetterhealth.com,gemtvasia.com,hcn.org,huffingtonpost.co.uk,inqld.com.au,inspiredminds.de,investmentnews.com,jewishworldreview.com,legion.org,lifezette.com,livestly.com,magtheweekly.com,moneyland.ch,offshore-energy.biz,onetvasia.com,oxygen.com,pch.com,prospectmagazine.co.uk,readamericanfootball.com,readarsenal.com,readastonvilla.com,readbasketball.com,readbetting.com,readbournemouth.com,readboxing.com,readbrighton.com,readbundesliga.com,readburnley.com,readcars.co,readceltic.com,readchampionship.com,readchelsea.com,readcricket.com,readcrystalpalace.com,readeverton.com,readeverything.co,readfashion.co,readfilm.co,readfood.co,readfootball.co,readgaming.co,readgolf.com,readhorseracing.com,readhuddersfield.com,readhull.com,readinternationalfootball.com,readlaliga.com,readleicester.com,readliverpoolfc.com,readmancity.com,readmanutd.com,readmiddlesbrough.com,readmma.com,readmotorsport.com,readmusic.co,readnewcastle.com,readnorwich.com,readnottinghamforest.com,readolympics.com,readpl.com,readrangers.com,readrugbyunion.com,readseriea.com,readshowbiz.co,readsouthampton.com,readsport.co,readstoke.com,readsunderland.com,readswansea.com,readtech.co,readtennis.co,readtottenham.com,readtv.co,readussoccer.com,readwatford.com,readwestbrom.com,readwestham.com,readwsl.com,reason.com,redvoicemedia.com,revolver.news,rogerebert.com,smithsonianmag.com,streamingmedia.com,the-scientist.com,thecatholicthing.org,therighthairstyles.com,weatherwatch.co.nz,wheels.ca,whichcar.com.au,woot.com,worldofbitco.in##.advertisement
+devdiscourse.com##.advertisement-area
+business-standard.com##.advertisement-bg
+atlasobscura.com##.advertisement-disclaimer
+radiocity.in##.advertisement-horizontal-small
+trumparea.com##.advertisement-list
+atlasobscura.com##.advertisement-shadow
+mid-day.com,radiocity.in##.advertisement-text
+comedy.com##.advertisement-video-slot
+structurae.net##.advertisements
+scmp.com##.advertisers
+afrsmartinvestor.com.au,afternoondc.in,allmovie.com,allmusic.com,bolnews.com,brw.com.au,gq.co.za,imageupscaler.com,mja.com.au,ocregister.com,online-convert.com,orangecounty.com,petrolplaza.com,pornicom.com,premier.org.uk,premierchristianity.com,premierchristianradio.com,premiergospel.org.uk,radio.com,sidereel.com,yourdictionary.com##.advertising
+theloadout.com##.advertising_slot_video_player
+gadgets360.com##.advertisment
+satdl.com##.advertizement
+hurriyetdailynews.com##.advertorial-square-type-1
+148apps.com##.advnote
+swisscows.com##.advrts--text
+townhall.com##.advs
+groovyhistory.com,lifebuzz.com,toocool2betrue.com,videogameschronicle.com##.adwrapper
+animesuge.to,aniwave.to,gogoanime.gs##.adx
+mail.google.com##.aeF > .nH > .nH[role="main"] > .aKB
+revolver.news##.af-slim-promo
+real-fix.com##.afc_popup
+fandom.com##.aff-unit__wrapper
+f1i.com##.affiche
+hindustantimes.com##.affilaite-widget
+linuxize.com##.affiliate
+romsgames.net##.affiliate-container
+thebeet.com##.affiliate-disclaimer
+express.co.uk##.affiliate-widget
+usatoday.com##.affiliate-widget-wrapper
+domainnamewire.com##.after-header
+insidemydream.com##.afxshop
+venea.net##.ag_banner
+venea.net##.ag_line
+nexusmods.com##.agroup
+picnob.com##.ah-box
+pixwox.com##.ah-box-i-w
+pixwox.com##.ah-box-n-w
+stripes.com##.ahm-rotd
+techpp.com##.ai-attributes
+radiomixer.net##.ai-placement
+uploadvr.com##.ai-sticky-widget
+androidpolice.com,constructionreviewonline.com,cryptobriefing.com,dereeze.com,tyretradenews.co.uk##.ai-track
+getdroidtips.com,journeybytes.com,thebeaverton.com,thisisanfield.com,unfinishedman.com,windowsreport.com##.ai-viewport-1
+theepochtimes.com##.ai_recommendation
+9to5linux.com,anoopcnair.com,apkmirror.com,askpython.com,beckernews.com,bizpacreview.com,boxingnews24.com,browserhow.com,constructionreviewonline.com,crankers.com,hard-drive.net,journeybytes.com,maxblizz.com,net-load.com,planetanalog.com,roadaheadonline.co.za,theamericantribune.com,windowslatest.com,yugatech.com##.ai_widget
+petitchef.com,station-drivers.com,tennistemple.com##.akcelo-wrapper
+allkpop.com##.akp2_wrap
+yts.mx##.aksdj483csd
+lyricsmode.com##.al-c-banner
+wikihow.com##.al_method
+altfi.com##.alert
+accessnow.org##.alert-banner
+rapidsave.com##.alert.col-md-offset-2
+peoplematters.in##.alertBar
+majorgeeks.com##.alford > tbody > tr
+shortlist.com##.align-xl-content-between
+livejournal.com##.allbanners
+silverprice.org##.alt-content
+antimusic.com##.am-center
+music-news.com,thebeet.com##.amazon
+orschlurch.net##.amazon-wrapper
+indiatimes.com##.amazonProductSidebar
+americafirstreport.com##.ameri-before-content
+closerweekly.com,intouchweekly.com,lifeandstylemag.com,usmagazine.com##.ami-video-placeholder
+faroutmagazine.co.uk##.amp-next-page-separator
+cyberciti.biz##.amp-wp-4ed0dd1
+thepostemail.com##.amp-wp-b194b9a
+letras.com##.an-pub
+streetdirectory.com##.anchor_bottom
+rok.guide##.ancr-sticky
+rok.guide##.ancr-top-spacer
+eprinkside.com##.annons
+yts.mx##.aoiwjs
+motor1.com##.ap
+chargedretail.co.uk,foodstuffsa.co.za,thinkcomputers.org##.apPluginContainer
+insideevs.com,motor1.com##.apb
+thetoyinsider.com##.apb-adblock
+eurogamer.net##.apester_block
+pd3.gg##.app-ad-placeholder
+d4builds.gg##.app__ad__leaderboard
+classicfm.com##.apple_music
+icon-icons.com##.apu
+icon-icons.com##.apu-mixed-packs
+chron.com,mysanantonio.com,seattlepi.com,sfgate.com##.ar16-9
+adn.com,businessoffashion.com,irishtimes.com##.arcad-feature
+1news.co.nz,actionnewsjax.com,boston25news.com,easy93.com,fox23.com,kiro7.com,wftv.com,whio.com,wpxi.com,wsbradio.com,wsbtv.com,wsoctv.com##.arcad_feature
+necn.com##.archive-ad__full-width
+check-host.net##.ard_z
+whatculture.com##.area-x__large
+arstechnica.com##.ars-component-buy-box
+thehindu.com##.artShrEnd
+ggrecon.com##.artSideBgBox
+ggrecon.com##.artSideBgBoxBig
+ggrecon.com##.artSideWrapBoxSticky
+scmp.com##.article--sponsor
+thelocal.at,thelocal.ch,thelocal.de,thelocal.es,thelocal.fr,thelocal.it,thelocal.no##.article--sponsored
+thehindu.com##.article-ad
+crn.com##.article-cards-ad
+coindesk.com##.article-com-wrapper
+lrt.lt##.article-content__inline-block
+firstforwomen.com##.article-content__sponsored_tout_ad___1iSJm
+eonline.com##.article-detail__right-rail--topad
+eonline.com##.article-detail__segment-ad
+christianpost.com##.article-divider
+purewow.com##.article-in-content-ad
+scoop.co.nz##.article-left-box
+slashdot.org##.article-nel-12935
+spectator.com.au##.article-promo
+iai.tv##.article-sidebar-adimage
+phillyvoice.com##.article-sponsor-sticky
+thelocal.com,thelocal.dk,thelocal.se##.article-sponsored
+people.com##.articleContainer__rail
+audizine.com##.articleIMG
+financemagnates.com##.article__mpu-banner
+empireonline.com##.article_adContainer--filled__vtAYe
+empireonline.com##.article_billboard__X_edx
+ubergizmo.com##.article_card_promoted
+wikiwand.com##.article_footerStickyAd__wvdui
+news18.com##.article_mad
+wikiwand.com##.article_sectionAd__rMyBc
+lasvegassun.com##.articletoolset
+news.artnet.com##.artnet-ads-ad
+arcadespot.com##.as-incontent
+arcadespot.com##.as-label
+arcadespot.com##.as-unit
+theinertia.com##.asc-ad
+asianjournal.com##.asian-widget
+pickmypostcode.com##.aside-right.aside
+goal.com##.aside_ad-rail__cawG6
+decrypt.co##.aspect-video
+theadvocate.com##.asset-breakout-ads
+releasestv.com##.ast-above-header-wrap
+animalcrossingworld.com##.at-sidebar-1
+guidingtech.com##.at1
+guidingtech.com##.at2
+fedex.com##.atTile1
+timesnownews.com##.atfAdContainer
+audiobacon.net##.audio-widget.et_pb_widget
+darko.audio##.audio_widget
+mbl.is##.augl
+imasdk.googleapis.com##.autoalign.nonLinearContainer
+iai.tv##.auw--container
+theblueoceansgroup.com##.av-label
+hostingreviews24.com##.av_pop_modals_1
+tutsplus.com##.avert
+airfactsjournal.com##.avia_image
+kisscenter.net,kissorg.net##.avm
+whatsondisneyplus.com##.awac-wrapper
+siasat.com##.awt_ad_code
+gulte.com##.awt_side_sticky
+express.co.uk##.ayl-native
+auctionzip.com##.az-header-ads-container
+conservativefiringline.com##.az6l2zz4
+coin360.com##.azJOX6
+coingraph.us,smallseotools.com##.b
+dailyvoice.com##.b-banner
+informer.com##.b-content-btm > table[style="margin-left: -5px"]
+hypestat.com##.b-error
+houstonchronicle.com,mysanantonio.com,seattlepi.com,sfchronicle.com,sfgate.com##.b-gray300.bt
+chron.com,mysanantonio.com,sfgate.com##.b-gray300.bt.bb
+mysanantonio.com,seattlepi.com,sfgate.com##.b-gray300.md\:bt
+chron.com,mysanantonio.com,sfgate.com##.b-gray300.md\:bt.md\:bb
+china.ahk.de##.b-header__banner
+dnserrorassist.att.net,searchguide.level3.com##.b-links
+kyivpost.com##.b-title
+cyberdaily.au,investordaily.com.au##.b-topLeaderboard
+bizcommunity.com##.b-topbanner
+ssyoutube.com##.b-widget-left
+maritimeprofessional.com##.b300x250
+coin360.com##.b5BiRm
+crypto.news,nft.news##.b6470de94dc
+iol.co.za##.bDEZXQ
+clutchpoints.com##.bGrMKt
+thehackernews.com##.babsi
+vidcloud9.me##.backdrop
+namepros.com##.backer
+kitguru.net,mcvuk.com,technologyx.com,thessdreview.com##.background-cover
+allkeyshop.com,cdkeyit.it,cdkeynl.nl,cdkeypt.pt,clavecd.es,goclecd.fr,keyforsteam.de##.background-link-left
+allkeyshop.com,cdkeyit.it,cdkeynl.nl,cdkeypt.pt,clavecd.es,goclecd.fr,keyforsteam.de##.background-link-right
+gayexpress.co.nz##.backstretch
+izismile.com##.ban_top
+saabplanet.com##.baner
+rhumbarlv.com##.banlink
+1001games.com,alistapart.com,arcadebomb.com,armageddonexpo.com,bikechatforums.com,birminghamworld.uk,bristolworld.com,bsc.news,btcmanager.com,ca-flyers.com,caixinglobal.com,caribvision.tv,cmo.com.au,coryarcangel.com,derbyshiretimes.co.uk,dominicantoday.com,doncasterfreepress.co.uk,elyricsworld.com,euobserver.com,eurochannel.com,exalink.fun,fifetoday.co.uk,filmmakermagazine.com,flvtomp3.cc,footballtradedirectory.com,forexpeacearmy.com,funpic.hu,gartic.io,garticphone.com,glasgowworld.com,gr8.cc,gsprating.com,hartlepoolmail.co.uk,hortidaily.com,hyipexplorer.com,ibtimes.co.in,ibtimes.co.uk,imedicalapps.com,insidefutbol.com,ipwatchdog.com,irishpost.com,israelnationalnews.com,japantimes.co.jp,jpost.com,kissasians.org,laserpointerforums.com,lincolnshireworld.com,liverpoolworld.uk,livescore.in,londonworld.com,manchesterworld.uk,marinelink.com,mercopress.com,miltonkeynes.co.uk,mmorpg.com,mob.org,nationalworld.com,newcastleworld.com,news.am,news.net,northamptonchron.co.uk,northantstelegraph.co.uk,northumberlandgazette.co.uk,oncyprus.com,onlineconvertfree.com,pharmatimes.com,portsmouth.co.uk,powerboat.world,pulsesports.co.ke,pulsesports.ng,pulsesports.ug,reversephonesearch.com.au,roblox.com,scientificamerican.com,scotsman.com,smartcarfinder.com,speedcafe.com,sputniknews.com,starradionortheast.co.uk,subscene.com,sumodb.com,sussexexpress.co.uk,sweeting.org,swzz.xyz,tass.com,thefanhub.com,thefringepodcast.com,thehun.com,thestar.co.uk,timeslive.co.za,timesofisrael.com,tmi.me,townhall.com,toyworldmag.co.uk,unblockstreaming.com,vibilagare.se,vloot.io,warwickshireworld.com,weatheronline.co.uk,weekly-ads.us,worldtimeserver.com,xbiz.com,ynetnews.com,yorkshirepost.co.uk##.banner
+papermag.com##.banner--ad__placeholder
+dayspedia.com##.banner--aside
+onlineradiobox.com##.banner--header
+oilprice.com##.banner--inPage
+puzzlegarage.com##.banner--inside
+dayspedia.com##.banner--main
+onlineradiobox.com##.banner--vertical
+freepik.com##.banner-adobe
+schoolguide.co.za##.banner-bar
+schoolguide.co.za##.banner-bar-bot
+pretoria.co.za##.banner-bg
+dailycoffeenews.com##.banner-box
+theshovel.com.au##.banner-col
+countdown.co.nz,jns.org,nscreenmedia.com,whoscored.com##.banner-container
+soccerway.com##.banner-content
+insidebitcoins.com##.banner-cta-wrapper
+news12.com##.banner-homePageSidebar-area
+411mania.com##.banner-homebottom-all
+security.org##.banner-img-container
+wireshark.org##.banner-img-downloads
+balkangreenenergynews.com##.banner-l
+amoledo.com##.banner-link
+news12.com##.banner-middleboard-area
+bsc.news,web3wire.news##.banner-one
+timesofisrael.com##.banner-placeholder
+tweakreviews.com##.banner-placement__article
+balkangreenenergynews.com##.banner-premium
+bikepacking.com##.banner-sidebar
+livescores.biz##.banner-slot-filled
+vedantu.com##.banner-text
+historydaily.org,israelnationalnews.com,news12.com,pwinsider.com,spaceref.com,usahealthcareguide.com##.banner-top
+wpneon.com##.banner-week
+news.net##.banner-wr
+admonsters.com##.banner-wrap
+primewire.link##.banner-wrapper
+depositfiles.com,dfiles.eu##.banner1
+gsprating.com##.banner2
+britsabroad.com##.bannerBox
+arras.io##.bannerHolder
+securenetsystems.net##.bannerPrerollArea
+mumbrella.com.au##.bannerSide
+thejc.com##.banner__
+thejc.com##.banner__article
+financemagnates.com##.banner__outer-wrapper
+forexlive.com,tass.com##.banner__wrapper
+asmag.com##.banner_ab
+hannity.com,inspiredot.net##.banner_ad
+snopes.com##.banner_ad_between_sections
+asmag.com##.banner_box
+news.am##.banner_click
+barnstormers.com##.banner_holder
+camfuze.com##.banner_inner
+livecharts.co.uk##.banner_long
+barnstormers.com##.banner_mid
+weatheronline.co.uk##.banner_oben
+barnstormers.com##.banner_rh
+nationaljeweler.com##.banner_wrapper
+wdwmagic.com##.bannerad_300px
+mamul.am##.bannerb
+gamertweak.com##.bannerdiv
+flatpanelshd.com##.bannerdiv_twopage
+arcadebomb.com##.bannerext
+2merkato.com,2mfm.org,aps.dz,armyrecognition.com,cbn.co.za,dailynews.co.tz,digitalmediaworld.tv,eprop.co.za,finchannel.com,i-programmer.info,killerdirectory.com,limesurvey.org,pamplinmedia.com,radiolumiere.org,rapidtvnews.com,southfloridagaynews.com,thepatriot.co.bw,usedcarnews.com##.bannergroup
+saigoneer.com##.bannergroup-main
+asianmirror.lk,catholicregister.org,crown.co.za,marengo-uniontimes.com,nikktech.com##.banneritem
+domainnamewire.com,ghostbin.me,i24news.tv,marinetechnologynews.com,maritimepropulsion.com,mumbrella.com.au,paste.fo,pasteheaven.com,petapixel.com,rapidtvnews.com,telesurtv.net,travelpulse.com##.banners
+theportugalnews.com##.banners-250
+rt.com##.banners__border
+unixmen.com##.banners_home
+m.economictimes.com##.bannerwrapper
+marketscreener.com##.bas
+euronews.com##.base-leaderboard
+teamfortress.tv##.bau
+propublica.org##.bb-ad
+doge-faucet.com##.bbb
+britannica.com##.bc-article-inline-dialogue
+dissentmagazine.org##.bc_random_banner
+h-online.com##.bcadv
+fakenamegenerator.com##.bcsw
+userbenchmark.com##.be-lb-page-top-banner
+censor.net##.beGrKXqw1r8uLq2pL
+theepochtimes.com##.bee-popup-container
+chowhound.com,glam.com,moneydigest.com,outdoorguide.com,svg.com##.before-ad
+renonr.com##.below-header-widgets
+theinertia.com##.below-post-ad
+gobankingrates.com##.bestbanks-slidein
+aiscore.com##.bet365
+nationalworld.com##.bfQGof
+mindbodygreen.com##.bftiFX
+hotnewhiphop.com##.bg-ad-bg-color
+bgr.com##.bg-black
+whatismyisp.com##.bg-blue-50
+republicworld.com##.bg-f0f0f0
+theepochtimes.com##.bg-gray-200
+amgreatness.com##.bg-gray-200.mx-auto
+chron.com,greenwichtime.com,houstonchronicle.com,mysanantonio.com,seattlepi.com,sfchronicle.com,sfgate.com,thetelegraph.com,timesunion.com##.bg-gray100.mb32
+wccftech.com##.bg-horizontal
+wccftech.com##.bg-horizontal-2
+imagetotext.info##.bg-light.mt-2.text-center
+charlieintel.com,dexerto.com##.bg-neutral-grey-4.items-center
+charlieintel.com,dexerto.com##.bg-neutral-grey.justify-center
+businessinsider.in##.bg-slate-100
+wccftech.com##.bg-square
+wccftech.com##.bg-square-mobile
+wccftech.com##.bg-vertical
+copyprogramming.com##.bg-yellow-400
+overclock3d.net##.bglink
+bhamnow.com##.bhamn-adlabel
+bhamnow.com##.bhamn-story
+investmentweek.co.uk##.bhide-768
+blackhatworld.com##.bhw-advertise-link
+blackhatworld.com##.bhw-banners
+viva.co.nz##.big-banner
+cbc.ca##.bigBoxContainer
+newzit.com##.big_WcxYT
+gamemodding.com##.big_banner
+hellenicshippingnews.com##.bigbanner
+scienceabc.com##.bigincontentad
+snokido.com##.bigsquare
+9gag.com,bundesliga.com,hotstar.com,scotsman.com,talksport.com,the-sun.com,thescottishsun.co.uk,thesun.co.uk,thesun.ie##.billboard
+nypost.com,pagesix.com##.billboard-overlay
+electronicproducts.com##.billboard-wrap
+weatherpro.com##.billboard-wrapper
+motorcycle.com,thetruthaboutcars.com,upgradedhome.com##.billboardSize
+techspot.com##.billboard_placeholder_min
+netweather.tv##.billheight
+bundesliga.com##.bl-broadcaster
+softonic.com##.black-friday-ads
+ehftv.com##.blackPlayer
+nowsci.com##.black_overlay
+tvmaze.com##.blad
+fastpic.ru##.bleft
+kottke.org##.bling-title
+wearedore.com##.bloc-pub
+rpgsite.net##.block
+soundonsound.com##.block---managed
+analyticsinsight.net##.block-10
+megagames.com##.block-4
+autocar.co.uk##.block-autocar-ads-lazyloaded-mpu2
+autocar.co.uk##.block-autocar-ads-mpu-flexible1
+autocar.co.uk##.block-autocar-ads-mpu-flexible2
+autocar.co.uk##.block-autocar-ads-mpu1
+thescore1260.com##.block-content > a[href*="sweetdealscumulus.com"]
+indysmix.com,wzpl.com##.block-content > a[href^="https://sweetjack.com/local"]
+webbikeworld.com##.block-da
+stuff.tv##.block-hcm-external-blocks
+mondoweiss.net##.block-head-c
+newsweek.com##.block-ibtmedia-dfp
+endocrineweb.com,practicalpainmanagement.com##.block-oas
+kaotic.com##.block-toplist
+worldtimebuddy.com##.block2
+macmusic.org##.block440Adv
+betaseries.com##.blockPartner
+soccerway.com##.block_ad
+informer.com##.block_ad1
+myrealgames.com##.block_adv_mix_top2
+gametracker.com##.blocknewnopad
+simkl.com##.blockplacecente
+wowhead.com##.blocks
+mail.com##.blocks-3
+wowway.net##.blocks_container-size_containerSize
+plainenglish.io##.blog-banner-container
+failory.com##.blog-column-ad
+oxygen.com,syfy.com##.blog-post-section__zergnet
+blogto.com##.blogto-sticky-banner
+manhwaindo.id##.blox
+techspot.com##.blu
+bescore.com##.bn
+nilechronicles.com##.bn-lg-sidebar
+snow-forecast.com,weather-forecast.com##.bn-placeholder
+roll20.net##.bna
+gearspace.com##.bnb--inline
+gearspace.com##.bnb-container
+bnonews.com##.bnone-widget
+evertiq.com,mediamanager.co.za##.bnr
+thecompleteuniversityguide.co.uk##.bnr_out
+armenpress.am##.bnrcontainer
+apkmody.io##.body-fixed-footer
+saharareporters.com##.body-inject
+boingboing.net##.boing-amp-triple13-amp-1
+boingboing.net##.boing-homepage-after-first-article-in-list
+boingboing.net##.boing-leaderboard-below-menu
+boingboing.net##.boing-primis-video-in-article-content
+btcmanager.com##.boo_3oo_6oo
+cmo.com.au##.boombox
+tomsguide.com##.bordeaux-slot
+everydayrussianlanguage.com##.border
+washingtonpost.com##.border-box.dn-hp-sm-to-mx
+washingtonpost.com##.border-box.dn-hp-xs
+thedailymash.co.uk##.border-brand
+standardmedia.co.ke##.border-thick-branding
+appleinsider.com##.bottom
+blockchair.com##.bottom--buttons-container
+reverso.net##.bottom-horizontal
+photographyreview.com##.bottom-leaderboard
+dappradar.com##.bottom-networks
+codeproject.com##.bottom-promo
+huffpost.com##.bottom-right-sticky-container
+crn.com##.bottom-section
+cnbctv18.com##.bottom-sticky
+gamingdeputy.com##.bottom-sticky-offset
+coincodex.com##.bottom3
+auto.hindustantimes.com##.bottomSticky
+softicons.com##.bottom_125_block
+softicons.com##.bottom_600_250_block
+imgtaxi.com##.bottom_abs
+collive.com##.bottom_leaderboard
+allmonitors24.com,streamable.com##.bottombanner
+arcadebomb.com##.bottombox
+timesofindia.com##.bottomnative
+canonsupports.com##.box
+filmbooster.com,ghacks.net##.box-banner
+mybroadband.co.za##.box-sponsored
+kiz10.com##.box-topads-x2
+fctables.com##.box-width > .hidden-xs
+wahm.com##.box2
+flashscore.co.za##.boxOverContent--a
+tribunnews.com##.box__reserved
+functions-online.com##.box_wide
+kiz10.com##.boxadsmedium
+retailgazette.co.uk##.boxzilla-overlay
+retailgazette.co.uk##.boxzilla-popup-advert
+wbur.org##.bp--native
+wbur.org##.bp--responsive
+businessplus.ie##.bp_billboard_single
+petkeen.com##.br-10
+bing.com##.br-poleoffcarousel
+infoworld.com##.brVideoContainer
+kisscartoon.city##.brand_resp
+eightieskids.com,inherentlyfunny.com##.break
+broadsheet.com.au##.breakout-section-inverse
+brobible.com##.bro_caffeine_wrap
+brobible.com##.bro_vidazoo_wrap
+vaughn.live##.browsePageAbvs300x600
+techpp.com##.brxe-shortcode
+sslshopper.com##.bsaStickyLeaderboard
+arydigital.tv,barakbulletin.com##.bsac
+doge-faucet.com##.bspot
+cricwaves.com##.btm728
+snaptik.app##.btn-download-hd[data-ad="true"]
+files.im##.btn-success
+sbenny.com##.btnDownload5
+pollunit.com##.btn[href$="?feature=ads"]
+youloveit.com##.btop
+businessmirror.com.ph##.busin-after-content
+businessmirror.com.ph##.busin-before-content
+business2community.com##.busin-coinzilla-after-content
+business2community.com##.busin-news-placement-2nd-paragraph
+switchboard.com##.business_premium_results
+imac-torrents.com##.button
+thisismoney.co.uk##.button-style > [href]
+abbaspc.net##.buttonPress-116
+overclock.net##.buy-now
+bobvila.com##.bv-unit-wrapper
+scalemates.com##.bwx.hrspb
+radiotoday.co.uk##.byglhsmf
+insurancejournal.com##.bzn
+coingraph.us##.c
+insidebitcoins.com##.c-FloatingPrompt
+globalnews.ca##.c-ad
+stuff.tv##.c-ad--mpu-bottom
+stuff.tv##.c-ad--mpu-top
+globalnews.ca##.c-adChoices
+zdnet.com##.c-adDisplay_container_incontent-all-top
+tuko.co.ke##.c-adv
+legit.ng##.c-adv--video-placeholder
+cnet.com##.c-asurionBottomBanner
+cnet.com##.c-asurionInteractiveBanner
+cnet.com##.c-asurionInteractiveBanner_wrapper
+newstalkzb.co.nz##.c-background
+elnacional.cat##.c-banner
+truck1.eu##.c-banners
+euronews.com##.c-card-sponsor
+thehustle.co##.c-layout--trends
+download.cnet.com##.c-pageFrontDoor_adWrapper
+download.cnet.com##.c-pageProductDetail-sidebarAd
+download.cnet.com##.c-pageProductDetail_productAlternativeAd
+cnet.com##.c-pageReviewContent_ad
+smashingmagazine.com##.c-promo-box
+smashingmagazine.com##.c-promotion-box
+webtoon.xyz##.c-sidebar
+umassathletics.com##.c-sticky-leaderboard
+globalnews.ca##.c-stickyRail
+backpacker.com,betamtb.com,betternutrition.com,cleaneatingmag.com,climbing.com,gymclimber.com,outsideonline.com,oxygenmag.com,pelotonmagazine.com,rockandice.com,skimag.com,trailrunnermag.com,triathlete.com,vegetariantimes.com,velonews.com,womensrunning.com,yogajournal.com##.c-thinbanner
+mangarockteam.com,nitroscans.com##.c-top-second-sidebar
+freecomiconline.me,lordmanga.com,mangahentai.me,manytoon.com,readfreecomics.com##.c-top-sidebar
+softarchive.is##.c-un-link
+canada411.ca##.c411TopBanner
+sussexexpress.co.uk##.cIffkq
+filepuma.com##.cRight_footer
+fmforums.com##.cWidgetContainer
+money.com##.ca-widget-inline
+thecable.ng##.cableads_mid
+cafonline.com##.caf-o-sponsors-nav
+clutchpoints.com##.cafemedia-clutchpoints-header
+challonge.com##.cake-unit
+skylinewebcams.com##.cam-vert
+thedalesreport.com##.cap-container
+dllme.com##.captchabox > div
+coolors.co##.carbon-cad
+speakerdeck.com##.carbon-container
+buzzfeed.com##.card--article-ad
+wbur.org##.card--flex-uw
+u.today##.card--something-md
+nrl.com##.card-content__sponsor
+devdiscourse.com##.carousel
+faroutmagazine.co.uk,hitc.com##.carpet-border
+chemistwarehouse.com.au##.category-product-mrec
+ghacks.net##.category-sponsored
+renonr.com##.category-sponsored-content
+notebooks.com##.cb-block
+thegoodchoice.ca,wandering-bird.com##.cb-box
+guru99.com##.cb-box__wrapper-center_modal
+carbuzz.com##.cb-video-ad-block
+supercheats.com##.cboth_sm
+cricbuzz.com##.cbz-leaderboard-banner
+ccm.net##.ccm_pugoo__sponso
+waptrick.one##.cent_list
+digit.in##.center-add
+seeklogo.com##.centerAdsWp
+siberiantimes.com##.centerBannerRight
+giveawayoftheday.com##.center_ab
+whattomine.com##.centered-image-short
+spiceworks.com##.centerthe1
+thefastmode.com##.channel_long
+coincodex.com##.chart-pos.mobile-b
+sevenforums.com,tenforums.com##.chill
+hannaford.com##.citrus_ad_banner
+businessinsider.in##.clmb_eoa
+kissanime.com.ru##.close_ad_button
+news18.com##.closestickybtn
+cdromance.com##.cls
+computerweekly.com,techtarget.com,theserverside.com##.cls-hlb-wrapper-desktop
+lcpdfr.com##.clsReductionBlockHeight
+lcpdfr.com##.clsReductionLeaderboardHeight
+mayoclinic.org##.cmp-advertisement__wrapper
+boldsky.com,drivespark.com,filmibeat.com,gizbot.com,goodreturns.in,nativeplanet.com##.cmscontent-article1
+boldsky.com,drivespark.com,filmibeat.com,gizbot.com,goodreturns.in,nativeplanet.com##.cmscontent-article2
+boldsky.com,drivespark.com,filmibeat.com,gizbot.com,goodreturns.in,nativeplanet.com,oneindia.com##.cmscontent-left-article
+boldsky.com,drivespark.com,filmibeat.com,gizbot.com,goodreturns.in,nativeplanet.com,oneindia.com##.cmscontent-right1
+careerindia.com##.cmscontent-top
+thisismoney.co.uk##.cnr5
+letras.com##.cnt-space-top
+groceries.asda.com##.co-product-dynamic
+180gadgets.com,247media.com.ng,academicful.com,alltechnerd.com,americansongwriter.com,androidsage.com,animatedtimes.com,anoopcnair.com,askpython.com,asurascans.com,australiangeographic.com.au,autodaily.com.au,bigleaguepolitics.com,borncity.com,boxingnews24.com,browserhow.com,charlieintel.com,chillinghistory.com,chromeunboxed.com,conservativebrief.com,cookingwithdog.com,corrosionhour.com,crimereads.com,cryptobriefing.com,cryptopotato.com,cryptoreporter.info,cryptoslate.com,dailynewshungary.com,dcenquirer.com,dexdotexe.com,eurweb.com,exeo.app,fandomwire.com,firstsportz.com,flickeringmyth.com,flyingmag.com,freemagazines.top,gameinfinitus.com,gatewaynews.co.za,geekdashboard.com,getdroidtips.com,goodyfeed.com,greekreporter.com,hard-drive.net,hollywoodinsider.com,hollywoodunlocked.com,indianhealthyrecipes.com,inspiredtaste.net,iotwreport.com,journeybytes.com,journeyjunket.com,libertyunlocked.com,linuxfordevices.com,lithub.com,medicotopics.com,medievalists.net,mpost.io,nationalfile.com,nintendoeverything.com,notalwaysright.com,organicfacts.net,patriotfetch.com,protrumpnews.com,pureinfotech.com,quickanswer.blog,redrightvideos.com,reneweconomy.com.au,reptilesmagazine.com,rezence.com,roadaheadonline.co.za,rok.guide,sciencenotes.org,sdnews.com,simscommunity.info,small-screen.co.uk,storypick.com,streamingbetter.com,superwatchman.com,talkers.com,tech-latest.com,techpp.com,techrounder.com,techviral.net,thecinemaholic.com,thecricketlounge.com,thedriven.io,thegamehaus.com,thegatewaypundit.com,thegeekpage.com,thenipslip.com,thewincentral.com,trendingpolitics.com,trendingpoliticsnews.com,twistedvoxel.com,videogamer.com,walletinvestor.com,waves4you.com,wbiw.com,welovetrump.com,wepc.com,win.gg,wisden.com,zerohanger.com##.code-block
+storytohear.com,thefamilybreeze.com,thetravelbreeze.com,theworldreads.com,womensmethod.com##.code-block > center p
+streamtelly.com##.code-block-1
+patriotnewsfeed.com##.code-block-4
+scienceabc.com##.code-block-5
+coinpaprika.com##.coinzilla-ad--desktop
+mydramalist.com##.col-lg-4 > .clear
+upi.com##.col-md-12 > table
+roseindia.net##.col-md-4
+disqus.com##.col-promoted
+lapa.ninja##.col-sm-1
+gadgetsnow.com,iamgujarat.com,indiatimes.com,samayam.com,vijaykarnataka.com##.colombia
+businessinsider.in##.colombia-rhs-wdgt
+i24news.tv##.column-ads
+atalayar.com##.column-content > .megabanner
+rateyourmusic.com##.column_filler
+2pass.co.uk##.column_right
+arcadebomb.com##.colunit1
+bollywoodlife.com##.combinedslots
+googlesightseeing.com##.comm-square
+businessinsider.com,insider.com##.commerce-coupons-module
+goal.com,thisislondon.co.uk##.commercial
+telegraph.co.uk##.commercial-unit
+bitdegree.org##.comparison-suggestion
+linguisticsociety.org##.component-3
+goal.com##.component-ad
+hunker.com,livestrong.com##.component-article-section-jwplayer-wrapper
+binnews.com,iheart.com,jessekellyshow.com,steveharveyfm.com##.component-pushdown
+binnews.com,iheart.com,jessekellyshow.com,steveharveyfm.com##.component-recommendation
+cointelegraph.com##.componentAdbutler_uF1zH
+dailymail.co.uk,thisismoney.co.uk##.connatix-wrapper
+realsport101.com##.connatixPS
+dpreview.com##.connatixWrapper
+washingtontimes.com##.connatixcontainer
+beincrypto.com##.cont-wrapper
+whatismyip.net##.container > .panel[id]
+redditsave.com##.container > center
+flaticon.com##.container > section[data-term].soul-a.soul-p-nsba
+marketwatch.com##.container--sponsored
+mangakakalot.com##.container-chapter-reader > div
+snazzymaps.com##.container-gas
+font-generator.com##.container-home-int > .text-center
+thejournal-news.net##.container.lightblue
+coinhub.wiki##.container_coinhub_footerad
+coinhub.wiki##.container_coinhub_topwidgetad
+jokersupdates.com##.container_contentrightspan
+rawstory.com##.container_proper-ad-unit
+worldscreen.com##.contains-sticky-video
+pastebin.com##.content > [style^="padding-bottom:"]
+floridasportsman.com##.content-banner-section
+crmbuyer.com,ectnews.com,technewsworld.com##.content-block-slinks
+journeyjunket.com##.content-container-after-post
+computerweekly.com##.content-continues
+gostream.site##.content-kuss
+cookist.com##.content-leaderboard
+pwinsider.com##.content-left
+pwinsider.com##.content-right
+flv2mp3.by##.content-right-bar
+businessinsider.com.au##.content-section-banner
+crmbuyer.com,ectnews.com,macnewsworld.com,technewsworld.com##.content-tab-slinks
+discord.me,searchenginejournal.com##.content-unit
+ancient-origins.net##.content_add_block
+wikiwand.com##.content_headerAd__USjzd
+nationalmemo.com##.content_nm_placeholder
+insta-stories-viewer.com##.context
+usedcarnews.com##.continut
+metar-taf.com##.controls-right
+live-tennis.eu##.copyright
+imdb.com##.cornerstone_slot
+physicsworld.com##.corporate-partners
+kiss-anime.asia,kissanime.mobi##.countdown.btn
+pcworld.com##.coupons
+coursedrive.org##.cours-adsense-in-feed
+ivytech.bncollege.com##.course-finder-google-ads-body-top-content-slot
+wolfstream.tv##.cover2
+creativecow.net##.cowtracks-interstitial
+creativecow.net##.cowtracks-sidebar-rotating-ad
+creativecow.net##.cowtracks-sidebar-with-cache-busting
+creativecow.net##.cowtracks-target
+coinpaprika.com##.cp-table__row--ad-row
+realsport101.com##.cpaAd
+cpomagazine.com##.cpoma-adlabel
+cpomagazine.com##.cpoma-main-header
+cpomagazine.com##.cpoma-target
+chronline.com##.cq-creative
+theweather.net##.creatividad
+mma-core.com##.crec
+currys.co.uk##.cretio-sponsored-product
+meijer.com##.criteo-banner
+currys.co.uk##.criteoproducts-section
+cryptopolitan.com##.crp_ads
+cryptopolitan.com##.crp_inarticle_ads_container
+cryptopolitan.com##.crp_sidebar_ads_container
+thesimsresource.com##.crtv-top-wrapper
+irishtimes.com##.cs-teaser
+staradvertiser.com##.csMon
+c-span.org##.cspan-ad-still-prebid-wrapper
+c-span.org##.cspan-ad-still-wrapper
+greatist.com,healthline.com,medicalnewstoday.com,psychcentral.com##.css-11k39sg
+healthline.com##.css-12efcmn
+nytimes.com,nytimesn7cgmftshazwhfgzm37qxb44r64ytbb2dj3x62d2lljsciiyd.onion##.css-142l3g4
+pgatour.com##.css-18v0in8
+medicalnewstoday.com,psychcentral.com##.css-1cg0byz
+healthline.com##.css-1d8h8gm
+ladbible.com##.css-1dgm0zi-Advert
+crazygames.com##.css-1h6nq0a
+startpage.com##.css-1h9yhzw.top-attribution
+gamingbible.co.uk##.css-1i2p7ui
+bmj.com##.css-1jjs1rx
+cruisecritic.co.uk,cruisecritic.com,cruisecritic.com.au##.css-1kyizeh
+infowars.com##.css-1nbwp0k
+bet.com##.css-1ofg0gs-Box-Container-StyledVideoPromoContainer
+pgatour.com##.css-1p0f086
+infowars.com##.css-1upmbem
+ladbible.com##.css-1v521fz
+infowars.com##.css-1vj1npn
+healthline.com,medicalnewstoday.com##.css-1wm8u43
+gamingbible.com##.css-1z9hhh
+delish.com##.css-3oqygl
+nytimes.com,nytimesn7cgmftshazwhfgzm37qxb44r64ytbb2dj3x62d2lljsciiyd.onion##.css-bs95eu
+pgatour.com##.css-cl2hq
+nytimes.com,nytimesn7cgmftshazwhfgzm37qxb44r64ytbb2dj3x62d2lljsciiyd.onion##.css-oeful5
+sbs.com.au##.css-p21i0d
+healthline.com##.css-umsscj
+unilad.com##.css-zmf6il
+comparitech.com##.ct089
+unmineablesbest.com##.ct_ipd728x90
+comparitech.com##.ct_popup_modal
+techspot.com##.cta
+dailydot.com##.cta-article-wrapper
+w3docs.com##.cta-bookduck
+simracingsetup.com##.cta-box
+thelines.com##.cta-content
+finbold.com##.cta-etoro
+thelines.com##.cta-row
+filerio.in##.ctl25
+seattlepi.com##.ctpl-fullbanner
+genius.com##.cujBpY
+pcgamesn.com##.curated-spotlight
+speedrun.com##.curse
+pokebattler.com##.curse-ad
+dexscreener.com##.custom-1klpohg
+slidehunter.com##.custom-ad-text
+fastestvpns.com##.custom-banner
+dexscreener.com##.custom-d7ztiy
+addictivetips.com,coinweek.com,news365.co.za,simscommunity.info##.custom-html-widget
+noqreport.com,patriotnewsfeed.com##.custom-html-widget [href] > [src]
+breakingnews.ie##.custom-mpu-container
+ehitavada.com##.custom-popup
+fandomwire.com##.customad
+total-croatia-news.com##.custombanner
+the-sun.com,thescottishsun.co.uk,thesun.co.uk,thesun.ie##.customiser-v2-layout-1-billboard
+the-sun.com,thescottishsun.co.uk,thesun.co.uk,thesun.ie##.customiser-v2-layout-three-native-ad-container
+f150lightningforum.com##.customizedBox
+coincarp.com##.customspon
+citywire.com##.cw-top-advert
+futurecurrencyforecast.com##.cwc-tor-widget
+usmagazine.com##.cy-storyblock
+bleepingcomputer.com##.cz-toa-wrapp
+coingraph.us##.d
+blockchair.com##.d-block
+mangamiso.net##.d-flex-row
+fastpic.ru,freesteam.io##.d-lg-block
+calendar-canada.ca,osgamers.com##.d-md-block
+thestreamable.com##.d-md-flex
+publish0x.com##.d-md-none.text-center
+cutyt.com,onlineocr.net,publish0x.com##.d-xl-block
+artsy.net##.dDusYa
+yourstory.com##.dJEWSq
+fxempire.com##.dKBfBG
+cryptorank.io##.dPbBGP
+standard.co.uk##.dXaqls
+counter.dev,lindaikejisblog.com##.da
+engadget.com##.da-container
+smartprix.com##.dadow-box
+lifewire.com##.daily-deal
+4chan.org,boards.4channel.org##.danbo-slot
+cnbctv18.com##.davos-top-ad
+sportshub.stream##.db783ekndd812sdz-ads
+foobar2000.org##.db_link
+wuxiaworld.site##.dcads
+driverscloud.com##.dcpub
+theguardian.com##.dcr-1aq0rzi
+fxempire.com##.ddAwpw
+datedatego.com##.ddg
+datedatego.com##.ddg0
+sgcarmart##.dealer_banner
+slashdot.org##.deals-wrapper
+defiantamerica.com##.defia-widget
+nettv4u.com##.desk_only
+cardealermagazine.co.uk##.desktop
+rok.guide##.desktop-promo-banner
+tiermaker.com##.desktop-sticky
+buzzfeed.com,buzzfeednews.com##.desktop-sticky-ad_desktopStickyAdWrapper__a_tyF
+hanime.tv##.desktop.htvad
+randomarchive.com##.desktop[style="text-align:center"]
+australiangolfdigest.com.au##.desktop_header
+coingape.com##.desktopds
+flashscore.co.za,flashscore.com,livescore.in,soccer24.com##.detailLeaderboard
+floridapolitics.com##.dfad
+coingape.com##.dfd
+gadgetsnow.com,nationaljeweler.com,pastemagazine.com,theonion.com##.dfp
+gazette.com,thehindu.com##.dfp-ad
+investing.com##.dfp-native
+investing.com##.dfpVideo
+yts.mx##.dfskieurjkc23a
+dailyfx.com##.dfx-article__sidebar
+kiplinger.com##.dianomi_gallery_wrapper
+kmplayer.com##.dim-layer
+coingape.com##.diplay-m-ad
+temporary-phone-number.com##.direct-chat-messages > div[style="margin:15px 0;"]
+disk.yandex.com,disk.yandex.ru##.direct-public__sticky-box
+notes.io##.directMessageBanner
+premiumtimesng.com##.directcampaign
+oneindia.com##.discounts-head
+audiokarma.org##.discussionListItem > center
+apkcombo.com##.diseanmevrtt
+airmail.news,govevents.com,protipster.com##.display
+flightconnections.com##.display-box
+flightconnections.com##.display-box-2
+legacy.com##.displayOverlay1
+designtaxi.com##.displayboard
+theodysseyonline.com##.distroscale_p2
+theodysseyonline.com##.distroscale_side
+nottinghampost.com##.div-gpt-ad-vip-slot-wrapper
+readcomiconline.li##.divCloseBut
+jpost.com##.divConnatix
+tigerdroppings.com##.divHLeaderFull
+newser.com##.divNColAdRepeating
+animefire.net##.divSection3
+ebaumsworld.com,greedyfinance.com##.divider
+thelist.com##.divider-heading-container
+karachicorner.com##.divimg
+fruitnet.com##.dk-ad-250
+meteologix.com##.dkpw
+meteologix.com,weather.us##.dkpw-billboard-margin
+dongknows.com##.dkt-amz-deals
+dongknows.com##.dkt-banner-ads
+mazterize.com##.dl-g
+crash.net##.dmpu
+crash.net##.dmpu-container
+nationalworld.com,scotsman.com##.dmpu-item
+vice.com##.docked-slot-renderer
+quora.com##.dom_annotate_ad_image_ad
+quora.com##.dom_annotate_ad_promoted_answer
+quora.com##.dom_annotate_ad_text_ad
+domaingang.com##.domai-target
+thenationonlineng.net##.dorvekp-post-bottom
+gearlive.com##.double
+capitalfm.com,radiox.co.uk,smoothradio.com##.download
+thepiratebay3.to##.download_buutoon
+drivespark.com##.dp-add-block
+thesun.co.uk##.dpa-slot
+distractify.com,inquisitr.com,okmagazine.com,radaronline.com##.dpbdIG
+dola.com##.ds-brand
+dola.com##.ds-display-ad
+cryptonews.com##.dslot
+kickasstorrents.to##.dssdffds
+digitaltrends.com,themanual.com##.dt-primis
+digitaltrends.com##.dtads-location
+everythingrf.com##.dummydiv
+yts.mx##.durs-bordered
+bloomberg.com##.dvz-v0-ad
+daniweb.com##.dw-inject-bsa
+ubereats.com##.dw.ec
+etherscan.io##.dxddkdcp7wz
+dailydot.com##.dynamic-block
+nomadlist.com##.dynamic-fill
+coingraph.us##.e
+dailyvoice.com##.e-freestar-video-container
+dailyvoice.com##.e-nativo-container
+op.gg##.e17e77tq6
+op.gg##.e17e77tq8
+thesaurus.com##.e1wyd5nb0
+nytimes.com,nytimesn7cgmftshazwhfgzm37qxb44r64ytbb2dj3x62d2lljsciiyd.onion##.e1xxpj0j1.css-4vtjtj
+arabtimesonline.com,independent.co.ug,nigerianobservernews.com,songslover.vip,udaipurkiran.com##.e3lan
+presskitaquat.com##.e3lan-top
+tiresandparts.net##.e3lanat-layout-rotator
+fxempire.com##.eLQRRm
+artsy.net##.ePrLqP
+euractiv.com##.ea-gat-slot-wrapper
+coin360.com##.earnMenuButton-link
+expats.cz##.eas
+itwire.com,nativenewsonline.net##.eb-init
+ablogtowatch.com##.ebay-placement
+gfinityesports.com##.ecommerceUnit
+newagebd.net##.editorialMid
+editpad.org##.edsec
+theepochtimes.com##.eet-ad
+sashares.co.za##.elementor-48612
+bikeradar.com##.elementor-element-3f6e8dd
+hilltimes.com##.elementor-element-5818a09
+thecountersignal.com##.elementor-element-8d2cc6c
+granitegrok.com##.elementor-image > [data-wpel-link="external"]
+optimyz.com,ringsidenews.com##.elementor-shortcode
+canyoublockit.com##.elementor-widget-container > center > p
+radiotimes.com##.elementor-widget-wp-widget-section_full_width_advert
+worldscreen.com##.embdad
+autostraddle.com##.end-of-article-ads
+endtimeheadlines.org##.endti-widget
+floridianpress.com##.enhanced-text-widget
+kupondo.com##.entry-content > .row
+whatsmyreferer.com##.entry-content > ul
+huffingtonpost.co.uk,huffpost.com##.entry__right-rail-width-placeholder
+euronews.com##.enw-MPU
+essentiallysports.com##.es-ad-space-container
+marcadores247.com##.es_top_banner
+alevelgeography.com,shtfplan.com,yournews.com##.et_pb_code_inner
+appleinsider.com##.exclusive-wrap
+mashable.com##.exco
+nypost.com##.exco-video__container
+metric-conversions.org##.exists
+proprivacy.com##.exit-popup.modal-background
+streamingmedia.com##.expand
+appuals.com##.expu-protipeop
+appuals.com##.expu-protipmiddle_2
+thepostemail.com##.external
+pixabay.com##.external-media
+yourbittorrent.com##.extneed
+mangamiso.net##.extraHeight
+textcompare.org##.ez-sidebar-wall
+futuregaming.io##.ez-video-wrap
+cgpress.org##.ezlazyloaded.header-wrapper
+chorus.fm##.f-soc
+formula1.com##.f1-dfp-banner-wrapper
+audiophilereview.com##.f7e65-midcontent
+audiophilereview.com##.f7e65-sidebar-ad-widget
+globimmo.net##.fAdW
+datenna.com##.fPHZZA
+btcmanager.com##.f_man_728
+freeads.co.uk##.fa_box_m
+tvtropes.org##.fad
+thepointsguy.com##.favorite-cards
+futbin.com##.fb-ad-placement
+triangletribune.com##.fba_links
+forbes.com##.fbs-ad--ntv-deskchannel-wrapper
+forbes.com##.fbs-ad--ntv-home-wrapper
+whatismyipaddress.com##.fbx-player-wrapper
+digminecraft.com##.fc2e5688
+businessinsider.in##.fc_clmb_ad_mrec
+filmdaily.co##.fd-article-sidebar-ad
+filmdaily.co##.fd-article-top-banner
+filmdaily.co##.fd-home-sidebar-inline-rect
+foodbeast.com##.fdbst-ad-placement
+browardpalmbeach.com,dallasobserver.com,miaminewtimes.com,phoenixnewtimes.com,westword.com##.fdn-site-header-ad-block
+w3techs.com##.feat
+convertcase.net##.feature
+softarchive.is##.feature-usnt
+mumbrella.com.au##.featureBanner
+eagle1065.com##.featureRotator
+news24.com##.featured-category
+hltv.org##.featured-matches-top-matches-container
+ar12gaming.com##.featured-sponsor
+eetimes.com##.featured-techpaper-box
+motor1.com##.featured__apb
+newser.com##.fiavur2
+filecrypt.cc,filecrypt.co##.filItheadbIockqueue3
+filmibeat.com##.filmibeat-top-ad
+telugupeople.com##.fineprint
+proprofs.com##.firstadd
+thestranger.com##.fish-butter
+khaleejtimes.com##.fix-billboard-nf
+khaleejtimes.com##.fix-mpu-nf
+vice.com##.fixed-slot
+dorset.live,liverpoolecho.co.uk##.fixed-slots
+theblock.co##.fixedUnit
+cgdirector.com##.fixed_ad_container_420
+2conv.com##.fixed_banner
+fixya.com##.fixya_primis_container
+whatismyipaddress.com##.fl-module-wipa-concerns
+whatismyipaddress.com##.fl-photo
+omniglot.com##.flex-container
+libhunt.com##.flex.mt-5.boxed
+ice.hockey##.flex_container_werbung
+klmanga.net,shareae.com##.float-ck
+comedy.com##.floater-prebid
+chaseyoursport.com##.floating-adv
+click2houston.com,clickondetroit.com,clickorlando.com,ksat.com,local10.com,news4jax.com##.floatingWrapper
+thehindu.com##.flooting-ad
+golinuxcloud.com##.flying-carpet
+momjunction.com,stylecraze.com##.flying-carpet-wrapper
+advocate.com,emergencyemail.org,out.com##.footer
+allthatsinteresting.com,scientificamerican.com##.footer-banner
+wst.tv##.footer-logos
+supercars.com##.footer-promo
+filma24.ch##.footer-reklama
+skidrowcodexreloaded.com##.footer-sticky
+searchcommander.com##.footer-widget
+gelbooru.com##.footerAd2
+businessnow.mt,igamingcapital.mt,maltaceos.mt,whoswho.mt##.footer__second
+pbs.org##.footer__sub
+satbeams.com##.footer_banner
+techopedia.com##.footer_inner_ads
+realmadrid.com##.footer_rm_sponsors_container
+tiresandparts.net##.footer_top_banner
+ocado.com##.fops-item--advert
+morrisons.com##.fops-item--featured
+nintendolife.com,purexbox.com,pushsquare.com##.for-desktop
+purexbox.com,pushsquare.com##.for-mobile.below-article
+flatpanelshd.com##.forsideboks2
+permies.com##.forum-top-banner
+newsroom.co.nz##.foundingpartners
+freepresskashmir.news##.fpkdonate
+theiphoneappreview.com##.frame
+freedomfirstnetwork.com##.freed-1
+upworthy.com##.freestar-in-content
+moviemistakes.com##.freestarad
+sciencenews.org##.from-nature-index__wrapper___2E2Z9
+cryptocompare.com##.front-page-info-wrapper
+slickdeals.net##.frontpageGrid__bannerAd
+fxempire.com##.frzZuq
+tripstodiscover.com##.fs-dynamic
+tripstodiscover.com##.fs-dynamic__label
+alphr.com##.fs-pushdown-sticky
+newser.com##.fs-sticky-footer
+bossip.com##.fsb-desktop
+bossip.com##.fsb-toggle
+ghacks.net##.ftd-item
+newser.com##.fu4elsh1yd
+livability.com##.full-width-off-white
+theblock.co##.fullWidthDisplay
+greatandhra.com##.full_width_home.border-topbottom
+whatismybrowser.com##.fun-info-footer
+whatismybrowser.com##.fun-inner
+artscanvas.org##.funders
+ferrarichat.com##.funzone
+savemyexams.co.uk##.fuse-desktop-h-250
+savemyexams.co.uk##.fuse-h-90
+foxsports.com##.fwAdContainer
+stylecraze.com##.fx-flying-carpet
+fxstreet.com##.fxs_leaderboard
+aframnews.com,afro.com,aurn.com,aviacionline.com,borneobulletin.com.bn,businessday.ng,businessofapps.com,chicagodefender.com,chimpreports.com,coinweek.com,collive.com,coralspringstalk.com,dailynews.co.zw,dailysport.co.uk,dallasvoice.com,defence-industry.eu,draxe.com,gatewaynews.co.za,gayexpress.co.nz,gematsu.com,islandecho.co.uk,jacksonvillefreepress.com,mediaplaynews.com,moviemaker.com,newpittsburghcourier.com,nondoc.com,richmondshiretoday.co.uk,sammobile.com,savannahtribune.com,spaceref.com,talkers.com,talkradioeurope.com,thegolfnewsnet.com,waamradio.com,womensagenda.com.au##.g
+coinweek.com##.g-389
+dailyjournalonline.com##.g-dyn
+nytimes.com,nytimesn7cgmftshazwhfgzm37qxb44r64ytbb2dj3x62d2lljsciiyd.onion##.g-paid
+domainnamewire.com,goodthingsguy.com##.g-single
+yellowise.com##.g-widget-block
+titantv.com##.gAd
+theweathernetwork.com##.gGthWi
+getgreenshot.org##.ga-ldrbrd
+getgreenshot.org##.ga-skscrpr
+animedao.to,elevenforum.com,html-code-generator.com##.gads
+eonline.com##.gallery-rail-sticky-container
+cdromance.com##.game-container[style="grid-column: span 2;"]
+geoguessr.com##.game-layout__in-game-ad
+chess.com##.game-over-ad-component
+amoyshare.com##.game-poster
+pokernews.com##.gameCards
+monstertruckgames.org##.gamecatbox
+home-assistant-guide.com##.gb-container-429fcb03
+home-assistant-guide.com##.gb-container-5698cb9d
+home-assistant-guide.com##.gb-container-bbc771af
+quadraphonicquad.com##.gb-sponsored-wrapper
+1001games.com##.gc-halfpage
+1001games.com##.gc-leaderboard
+1001games.com##.gc-medium-rectangle
+letsdopuzzles.com##.gda-home-box
+kansascity.com,rotowire.com##.gdcg-oplist
+geekflare.com##.geekflare-core-resources
+autoblog.com##.gemini-native
+thefederalist.com##.general-callout
+investing.com##.generalOverlay
+perfectdailygrind.com##.gengpdg
+perfectdailygrind.com##.gengpdg-col
+perfectdailygrind.com##.gengpdg-single
+geotastic.net##.geotastic-net_970x250-container
+thingstodovalencia.com##.get-your-guide
+flickr.com##.getty-search-view
+flickr.com##.getty-widget-view
+thehackernews.com##.gg-2
+hltv.org##.gg-firstcol-box
+ganjingworld.com##.ggAdZone_gg-banner-ad_zone__wK3kF
+cometbird.com##.gg_250x250
+cornish-times.co.uk,farnhamherald.com,iomtoday.co.im##.ggzoWi
+ghacks.net##.ghacks-ad
+ghacks.net##.ghacks_ad_code
+cnx-software.com##.ghelpme
+goodmenproject.com##.gmp-instream-wrap
+givemesport.com##.gms-ad
+givemesport.com##.gms-billboard-container
+givemesport.com##.gms-sidebar-ad
+usatoday.com##.gnt_tb
+usatoday.com##.gnt_tbr
+usatoday.com##.gnt_x__lbl
+guides.gamepressure.com##.go20-pl-guide-right-baner-fix
+coinmarketcap.com##.goXFFk
+dallasinnovates.com,thecoastnews.com,watchesbysjx.com##.gofollow
+golf.com##.golf-ad
+golinuxcloud.com##.golin-content
+golinuxcloud.com##.golin-video-content
+africanadvice.com,pspad.com,sudantribune.com##.google
+techspot.com##.google-ad
+apkmirror.com##.google-ad-leaderboard
+secretchicago.com##.google-ad-manager-ads-header
+okbaza.net##.google3
+smsfi.com##.google_ad_home_page_100percent
+topservers.com##.google_slot
+mediamass.net##.googleresponsive
+css3generator.com##.gotta-pay-the-bills
+spiceworks.com##.gp-standard-header
+perfectdailygrind.com##.gpdgeng
+di.fm##.gpt-slot
+kijiji.ca##.gqNGFh
+beforeitsnews.com##.gquuuu5a
+goodreturns.in##.gr-db-ad-content
+balls.ie##.gray-ad-title
+greatandhra.com##.great_andhra_logo_panel > div.center-align
+greatandhra.com##.great_andhra_logo_panel_top_box
+greatandhra.com##.great_andhra_main_041022_
+greatandhra.com##.great_andhra_main_add_rotator_new2
+greatandhra.com##.great_andhra_main_local_rotator1
+mma-core.com##.grec
+greekcitytimes.com##.greek-adlabel
+greekcitytimes.com##.greek-after-content
+curioustic.com##.grey
+rabble.ca##.grey-cta-block
+topminecraftservers.org##.grey-section
+teleboy.ch##.grid-col-content-leaderboard
+newsnow.co.uk##.grid-column__container
+groovypost.com##.groov-adlabel
+saultonline.com##.gsmfab
+gulftoday.ae##.gt-ad-center
+gulf-times.com##.gt-horizontal-ad
+gulf-times.com##.gt-square-desktop-ad
+gulf-times.com##.gt-vertical-ad
+animenewsnetwork.com##.gutter
+distractify.com,inquisitr.com,okmagazine.com,radaronline.com##.gwofgg
+thetimes.co.uk##.gyLkkj
+worldpopulationreview.com##.h-64
+tvcancelrenew.com##.h-72
+emojipedia.org##.h-\[112px\]
+posemaniacs.com##.h-\[250px\]
+emojipedia.org##.h-\[282px\]
+businessinsider.in##.h-\[300px\]
+buzzly.art##.h-min.overflow-hidden
+target.com##.h-position-fixed-bottom
+copyprogramming.com##.h-screen
+lyricsmode.com##.h113
+opoyi.com##.hLYYlN
+marketscreener.com##.hPubRight2
+gifcompressor.com,heic2jpg.com,imagecompressor.com,jpg2png.com,mylocation.org,png2jpg.com,webptojpeg.com,wordtojpeg.com##.ha
+anime-planet.com##.halo
+whistleout.com.au##.has-hover
+defence-industry.eu##.has-small-font-size.has-text-align-center
+tomsguide.com##.hawk-main-editorialised
+techradar.com##.hawk-main-editorialized
+techradar.com##.hawk-merchant-link-widget-container
+girlswithmuscle.com##.hb-static-banner-div
+screenbinge.com##.hb-strip
+girlswithmuscle.com##.hb-video-ad
+cryptodaily.co.uk##.hbs-ad
+trendhunter.com##.hcamp
+webtoolhub.com##.hdShade > div
+biztechmagazine.com##.hdr-btm
+analyticsinsight.net##.head-banner
+plos.org##.head-top
+hindustantimes.com##.headBanner
+realmadrid.com##.head_sponsors
+additudemag.com,organicfacts.net##.header-ad
+boldsky.com##.header-ad-block
+olympics.com,scmp.com##.header-ad-slot
+stuff.co.nz,thepost.co.nz,thepress.co.nz,waikatotimes.co.nz##.header-ads-block
+worldpress.org##.header-b
+adswikia.com,freemalaysiatoday.com,landandfarm.com,pointblanknews.com,radiotoday.com.au,runt-of-the-web.com,rxresource.org,techworldgeek.com,warisboring.com##.header-banner
+gamingdeputy.com##.header-banner-desktop
+mercurynews.com,nssmag.com##.header-banners
+amazonadviser.com,apptrigger.com,fansided.com,hiddenremote.com,lastnighton.com,lawlessrepublic.com,mlsmultiplex.com,netflixlife.com,playingfor90.com,stormininnorman.com,winteriscoming.net##.header-billboard
+lyricsmode.com##.header-block
+worldpress.org##.header-bnr
+kveller.com##.header-bottom
+counterpunch.org##.header-center
+thetoyinsider.com##.header-drop-zone
+autental.com##.header-grid-items
+allmovie.com,realestate.com.au,theoldie.co.uk##.header-leaderboard
+realestate.com.au##.header-leaderboard-portal
+sdxcentral.com##.header-lemur
+nationalheraldindia.com##.header-m__ad-top__36Hpg
+thenewspaper.gr##.header-promo
+times.co.zm##.header-pub
+newtimes.co.rw##.header-top
+kollywoodtoday.net##.header-top-right
+knowyourmeme.com##.header-unit-wrapper
+maketecheasier.com##.header-widget
+hd-trailers.net##.header-win
+gelbooru.com##.headerAd
+gautengnewspaper.co.za##.header__banner
+thehits.co.nz##.header__main
+gifcompressor.com,heic2jpg.com,jpg2png.com,png2jpg.com,webptojpeg.com,wordtojpeg.com##.header__right
+manofmany.com##.header_banner_wrap
+koreaherald.com##.header_bnn
+techopedia.com##.header_inner_ads
+steroid.com##.header_right
+everythingrf.com##.headerblock
+phonearena.com##.heading-deal
+autoplius.lt##.headtop
+nationalworld.com##.helper__AdContainer-sc-12ggaoi-0
+igorslab.de##.herald-sidebar
+provideocoalition.com##.hero-promotions
+newsnow.co.uk##.hero-wrapper
+azuremagazine.com##.hero__metadata-left-rail
+freeads.co.uk##.hero_banner1
+filecrypt.cc,filecrypt.co##.hghspd
+filecrypt.cc,filecrypt.co##.hghspd + *
+daijiworld.com##.hidden-xs > [href]
+miragenews.com##.hide-in-mob
+moneycontrol.com,windowsreport.com##.hide-mobile
+business-standard.com,johncodeos.com##.hide-on-mobile
+simpasian.net##.hideme
+coindesk.com##.high-impact-ad
+majorgeeks.com##.highlight.content > center > font
+duckduckgo.com,duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion##.highlight_sponsored
+westword.com##.hil28zhf1wyd
+48hills.org##.hills-adlabel
+highwayradio.com##.hiway-widget
+ndtv.com##.hmpage_rhs
+seattlepi.com##.hnpad-Flex1
+seattlepi.com##.hnpad-Inline
+cryptorank.io##.hofjwZ
+bizarrepedia.com##.holder
+radiocaroline.co.uk##.home-banner
+manutd.com##.home-content-panel__sponsor
+pcgamingwiki.com##.home-gamesplanet-promo
+merriam-webster.com##.home-redesign-ad
+israelnationalnews.com##.home-subsections-banner
+freepressjournal.in##.homeMobileMiddleAdContainer
+newagebd.net##.homeSlideRightSecTwo
+pbs.org##.home__logo-pond
+pinkvilla.com##.homemobiletopad
+bonginoreport.com##.homepage-ad-2
+smallbusiness.co.uk##.homepage-banner-container
+invezz.com##.homepage-beneath-hero
+interest.co.nz##.homepage-billboard
+gumtree.com.au##.homepage-gallery__mrec-placeholder
+designspiration.com##.homepageBanner
+artandeducation.net##.homepage__banner
+swimswam.com##.homepage_block_ads
+radiocity.in##.horiozontal-add
+flv2mp3.by,flvto.biz,flvto.com.mx##.horizontal-area
+getmyuni.com##.horizontalRectangle
+nofilmschool.com##.horizontal_ad
+aarp.org##.hot-deals
+makemytrip.com##.hotDeals
+dailyrecord.co.uk##.hotjobs
+comparitech.com##.how_test
+cryptorank.io##.hspOLW
+hindustantimes.com##.ht_taboola
+adweek.com##.htl-ad-wrapper
+barstoolsports.com##.htl-ad__container
+nameberry.com##.htlad-InContent_Flex
+nameberry.com##.htlad-Leaderboard_Flex
+themessenger.com##.htlad-leaderboard_top
+wtop.com##.hubb-at-rad-header
+huddle.today##.huddle-big-box-placement
+techspree.net##.hustle-popup
+myabandonware.com##.i528
+animenewsnetwork.com##.iab
+atptour.com##.iab-wrapper
+iai.tv##.iai-article--footer-image
+infobetting.com##.ibBanner
+ice.hockey##.ice_ner
+ice.hockey##.ice_werbung
+indianexpress.com##.ie-banner-wrapper
+indianexpress.com##.ie-int-campign-ad
+financialexpress.com##.ie-network-taboola
+fifetoday.co.uk##.iehxDO
+guides.gamepressure.com##.if-no-baner
+techmeme.com##.ifsp
+flicksmore.com##.image_auto
+marketwatch.com##.imonaid_context
+exchangerates.org.uk##.imt4
+carscoops.com##.in-asd-content
+thecanary.co##.in-content-ad
+businessinsider.com,insider.com##.in-post-sticky
+faithpot.com##.inarticle-ad
+crash.net##.inarticle-wrapper
+knowyourmeme.com##.incontent-leaderboard-unit-wrapper
+motherjones.com##.incontent-promo
+truckinginfo.com##.incontent02Ad
+scienceabc.com##.incontentad
+brudirect.com##.index-banner
+katv.com##.index-module_adAfterContent__1cww
+theinertia.com##.inertia-ad-300x250
+theinertia.com##.inertia-ad-300x270
+theinertia.com##.inertia-ad-300x600
+theinertia.com##.inertia-ad-label
+theinertia.com##.inertia-ad-top
+inews.co.uk##.inews__advert
+inews.co.uk##.inews__mpu
+motorcycle.com##.infeed-ads
+heatmap.news##.infinite-container
+filmibeat.com##.infinite-scroll-add
+stocksnap.io##.info-col
+bab.la##.info-panel
+gameworldobserver.com##.information-block
+gameworldobserver.com##.information-blocks
+careerindia.com,oneindia.com##.inhouse-content
+asheville.com##.injected-ads
+bestlifeonline.com,eatthis.com##.inline
+manitobacooperator.ca##.inline--2
+forbes.com##.inline-article-ed-placeholder
+kijiji.ca##.inline-banner
+swiftcurrentonline.com##.inline-billboard
+freebeacon.com##.inline-campaign-wrapper
+stocksnap.io##.inline-carbon
+parkers.co.uk##.inline-leaderboard-ad-wrapper
+pcgamesn.com,pockettactics.com##.inlinerail
+nzbindex.com##.inner
+technologynetworks.com##.inner_content_olp_on_site_landing_page
+inquirer.com##.inno-ad
+inquirer.com##.inno-ad__ad
+donegaldaily.com##.inpage_banner
+nintendolife.com,purexbox.com,pushsquare.com,timeextension.com##.insert
+nintendolife.com,purexbox.com,pushsquare.com,timeextension.com##.insert-label
+canarymedia.com##.inset-x-0
+tvarticles.me##.inside
+serverhunter.com##.instant-visit
+allmusic.com##.insticator_ct
+flixboss.com##.instream-dynamic
+arstechnica.com##.instream-wrap
+coincarp.com##.interact-mobileBox
+monochrome-watches.com##.interscroll
+allnurses.com##.ipsAreaBackground
+1tamilmv.click##.ipsCarousel
+uk420.com##.ipsLayout_container > div[align="center"]
+allnurses.com##.ipsSpacer_both
+1tamilblasters.com##.ipsWidget_inner.ipsPad.ipsType_richText > p > a
+alibaba.com##.is-creative
+mydramalist.com##.is-desktop
+athlonsports.com,meidastouch.com,si.com,thestreet.com##.is-exco-player
+thestreet.com##.is-video-footer-enabled
+estnn.com##.isDesktop
+speedcheck.org##.isg-container
+icon-icons.com##.istock-container
+iconfinder.com##.istockphoto-placeholder
+albertsonsmarket.com,marketstreetunited.com,unitedsupermarkets.com##.item-citrus
+nintendolife.com,purexbox.com,pushsquare.com##.item-insert
+explorecams.com##.item-row
+cryptocompare.com##.item-special
+alaskahighwaynews.ca,bowenislandundercurrent.com,burnabynow.com,coastreporter.net,delta-optimist.com,moosejawtoday.com,newwestrecord.ca,nsnews.com,piquenewsmagazine.com,princegeorgecitizen.com,prpeak.com,richmond-news.com,squamishchief.com,tricitynews.com##.item-sponsored
+newegg.com##.item-sponsored-box
+pocketgamer.com##.item-unit
+presearch.com##.items-center.bg-transparent
+slidehunter.com##.itm-ads
+itweb.co.za##.itw-content-zone
+ownedcore.com##.iv-note
+india.com##.iwplhdbanner-wrap
+kijiji.ca##.jOwRwk
+ticketmaster.com##.jTNWic
+ticketmaster.com##.jUIMbR
+avclub.com,deadspin.com,gizmodo.com,jalopnik.com,kotaku.com,theonion.com,theroot.com,thetakeout.com##.japmJB
+psypost.org##.jeg_midbar
+sabcnews.com##.jeg_topbar
+romania-insider.com##.job-item
+dot.la##.job-wrapper
+cityam.com,techspot.com##.jobbioapp
+marketingweek.com##.jobs-lists
+johncodeos.com##.johnc-widget
+marinelink.com,maritimejobs.com,maritimepropulsion.com,yachtingjournal.com##.jq-banner
+demonslayermanga.com,readjujutsukaisen.com,readneverland.com##.js-a-container
+ultimate-guitar.com##.js-ab-regular
+buzzfeed.com##.js-bfa-impression
+live94today.com##.js-demo-avd
+musescore.com##.js-musescore-hb-728--wrapper
+beermoneyforum.com##.js-notices
+formula1.com##.js-promo-item
+investing.com##.js-promotional
+theguardian.com##.js-top-banner
+chewy.com##.js-tracked-ad-product
+iobroker.net##.jss125
+paycalculator.com.au##.jss336
+calorieking.com##.jss356
+iobroker.net,iobroker.pro##.jss43
+paycalculator.com.au##.jss546
+garticphone.com##.jsx-2397783008
+autolist.com##.jsx-2866408628
+garticphone.com##.jsx-3256658636
+essentiallysports.com##.jsx-4249843366
+conservativefiringline.com##.jtpp53
+theartnewspaper.com##.justify-center.flex.w-full
+aiscore.com##.justify-center.w100
+anandtech.com##.jw-reset
+issuu.com##.jzWDOE
+mamieastuce.com##.k39oyi
+qz.com##.k3mqd
+hltv.org##.kN5UQvcU
+ticketmaster##.kOwduY
+easypet.com##.kadence-conversion-inner
+hellogiggles.com##.karma_unit
+koreaboo.com##.kba-container
+standard.co.uk##.kcdphh
+tekno.kompas.com##.kcm
+kdnuggets.com##.kdnug-med-rectangle-ros
+goldprice.org##.kenbi
+trustedreviews.com##.keystone-deal
+trustedreviews.com##.keystone-single-widget
+gamertweak.com##.kfzyntmcd-caption
+linuxhandbook.com##.kg-bookmark-card
+thelibertydaily.com,toptenz.net,vitamiiin.com##.kgbwvoqfwag
+koreaherald.com##.khadv1
+khmertimeskh.com##.khmer-content_28
+kiryuu.id##.kln
+wantedinafrica.com##.kn-widget-banner
+kvraudio.com##.kvrblockdynamic
+radiotoday.co.uk##.kyeln
+tuko.co.ke##.l-adv-branding__top
+iphonelife.com##.l-header
+wwe.com##.l-hybrid-col-frame_rail-wrap
+si.com##.l-inline.m-detail--feature-container
+vox.com##.l-leaderboard-slot
+letssingit.com##.lai_all_special
+letssingit.com##.lai_desktop_header
+letssingit.com##.lai_desktop_inline
+purewow.com##.lander-interstital-ad
+wzstats.gg##.landscape-ad-container
+3dprint.com##.lap-block-items
+ptonline.com##.large-horizontal-banner
+weatherpro.com##.large-leaderboard
+dispatchtribunal.com,thelincolnianonline.com##.large-show
+democraticunderground.com##.largeleaderboard-container
+fantasygames.nascar.com##.larger-banner-wrapper
+golfworkoutprogram.com##.lasso-container
+flava.co.nz,hauraki.co.nz,mixonline.co.nz,thehits.co.nz,zmonline.com##.layout__background
+racingtv.com##.layout__promotion
+mytempsms.com##.layui-col-md12
+flotrack.org##.lazy-leaderboard-container
+iol.co.za##.lbMtEm
+trueachievements.com,truesteamachievements.com,truetrophies.com##.lb_holder
+coincodex.com##.ldb-top
+soaphub.com##.ldm_ad
+lethbridgenewsnow.com##.lead-in
+versus.com##.lead_top
+sgcarmart.com##.leadbadv
+thepcguild.com##.leader
+autoplius.lt##.leader-board-wrapper
+mediaweek.com.au##.leader-wrap-out
+blaauwberg.net##.leaderBoardContainer
+techadvisor.com##.leaderBoardHolder
+coin360.com##.leader_wrapper
+coveteur.com##.leaderboar_promo
+agcanada.com,allmusic.com,allthatsinteresting.com,autoaction.com.au,autos.ca,ballstatedaily.com,bdonline.co.uk,boardgamegeek.com,bravewords.com,broadcastnow.co.uk,cantbeunseen.com,cattime.com,chairmanlol.com,chemistryworld.com,citynews.ca,comingsoon.net,crn.com.au,diyfail.com,dogtime.com,drugtargetreview.com,edmunds.com,europeanpharmaceuticalreview.com,explainthisimage.com,foodandwine.com,foodista.com,freshbusinessthinking.com,funnyexam.com,funnytipjars.com,gamesindustry.biz,iamdisappoint.com,imedicalapps.com,itnews.com.au,japanisweird.com,jta.org,legion.org,lifezette.com,liveoutdoors.com,milesplit.com,monocle.com,morefailat11.com,moviemistakes.com,nbl.com.au,nfcw.com,objectiface.com,passedoutphotos.com,playstationlifestyle.net,precisionvaccinations.com,rollcall.com,roulettereactions.com,searchenginesuggestions.com,shinyshiny.tv,shitbrix.com,sparesomelol.com,spoiledphotos.com,spokesman.com,sportsnet.ca,sportsvite.com,stopdroplol.com,straitstimes.com,suffolknews.co.uk,supersport.com,tattoofailure.com,thedriven.io,thefashionspot.com,thestar.com.my,titantv.com,tutorialrepublic.com,where.ca,yoimaletyoufinish.com##.leaderboard
+edarabia.com##.leaderboard-728
+abcnews.go.com,edarabia.com##.leaderboard-970
+roblox.com##.leaderboard-abp
+gothamist.com##.leaderboard-ad-backdrop
+chess.com##.leaderboard-atf-ad-wrapper
+howstuffworks.com##.leaderboard-banner
+poe.ninja##.leaderboard-bottom
+chess.com##.leaderboard-btf-ad-wrapper
+mxdwn.com##.leaderboard-bucket
+arabiaweather.com,atlasobscura.com,bloomberg.com,forum.audiogon.com,gamesindustry.biz,news957.com##.leaderboard-container
+huffingtonpost.co.uk,huffpost.com##.leaderboard-flex-placeholder
+huffingtonpost.co.uk,huffpost.com##.leaderboard-flex-placeholder-desktop
+bluesnews.com##.leaderboard-gutter
+manitobacooperator.ca##.leaderboard-height
+medpagetoday.com##.leaderboard-region
+businessinsider.in##.leaderboard-scrollable-btf-cont
+businessinsider.in##.leaderboard-scrollable-cont
+consequence.net##.leaderboard-sticky
+poe.ninja##.leaderboard-top
+cbssports.com,nowthisnews.com,popsugar.com,scout.com,seeker.com,thedodo.com,thrillist.com##.leaderboard-wrap
+bloomberg.com,weatherpro.com##.leaderboard-wrapper
+6abc.com,abc11.com,abc13.com,abc30.com,abc7.com,abc7chicago.com,abc7news.com,abc7ny.com##.leaderboard2
+save.ca##.leaderboardMainWrapper
+cargurus.co.uk##.leaderboardWrapper
+t3.com##.leaderboard__container
+dosgamesarchive.com##.leaderboard_big_banner
+lookbook.nu##.leaderboard_container
+rottentomatoes.com##.leaderboard_wrapper
+gpfans.com##.leaderboardbg
+ubergizmo.com##.leaderboardcontainer
+dailyegyptian.com,northernstar.info,theorion.com,theprospectordaily.com##.leaderboardwrap
+dnsleak.com##.leak__submit
+homehound.com.au##.left-banner
+republicbroadcasting.org##.left-sidebar-padder > #text-8
+gogetaroomie.com##.left-space
+10minutemail.net##.leftXL
+mumsnet.com##.lg\:w-billboard
+dailyo.in##.lhsAdvertisement300
+latestly.com##.lhs_adv_970x90_div
+gadgets360.com##.lhs_top_banner
+iheartradio.ca##.lightbox-wrapper
+rebelnews.com##.lighter-gray-bg
+getbukkit.org##.limit
+linuxize.com##.linaff
+jpost.com##.line-left-side-before-and-after-container
+jpost.com##.line-one-row-before-and-after-container
+architecturesideas.com##.linkpub_right_img
+babynamegenie.com,forless.com,worldtimeserver.com##.links
+weatherpro.com##.list-city-ad
+nationalmemo.com##.listicle--ad-tag
+spiceworks.com##.listing-ads
+gosearchresults.com##.listing-right
+privateproperty.co.za##.listingResultPremiumCampaign
+researchgate.net##.lite-page__above
+reviewparking.com##.litespeed-loaded
+ottverse.com##.livevideostack-ad
+lightnovelpub.com##.lnadcontainer
+dayspring.com##.loading-mask
+reverso.net##.locd-rca
+gunsamerica.com##.logclick
+1071thepeak.com##.logo-scroll
+siberiantimes.com##.logoBanner
+rpgsite.net##.long-block-footer
+topservers.com##.long_wrap
+netwerk24.com##.love2meet
+tigerdroppings.com##.lowLead
+bikeroar.com##.lower-panel
+greatbritishlife.co.uk##.lp_track_vertical2
+lowes.com##.lws_pdp_recommendations_sponsored
+thestreet.com##.m-balloon-header
+si.com##.m-balloon-header--spacer
+politifact.com##.m-billboard
+aol.com##.m-gam__container
+aol.com##.m-healthgrades
+thestreet.com##.m-in-content-ad-row
+techraptor.net##.m-lg-70
+euronews.com##.m-object--is-branded
+euronews.com##.m-object--is-partner-content
+tech.hindustantimes.com##.m-to-add
+thestreet.com##.m-video-unit
+thegatewaypundit.com##.m0z4dhxja2
+motor1.com##.m1_largeMPU
+poebuilds.net##.m6lHKI
+bigleaguepolitics.com##.m77g3atigrcd
+net-load.com##.m7s-81.m7s
+hindustantimes.com##.m_headBanner
+morningagclips.com##.mac-ad-group
+macdailynews.com##.macdailynews-after-article-ad-holder
+antimusic.com##.mad
+methodshop.com##.mai-aec
+wccftech.com##.main-background-wrap
+sporcle.com##.main-content-unit-wrapper
+numuki.com##.main-header-responsive-wrapper
+ggrecon.com##.mainVenatusBannerContainer
+nordot.app##.main__ad
+livescores.biz##.make-a-bet_wrap
+get.pixelexperience.org##.mantine-arewlw
+whatsgabycooking.com##.manual-adthrive-sidebar
+linkvertise.com##.margin-bottom-class-20
+color-hex.com##.margin10
+fandom.com##.marketplace
+imgur.com,pushsquare.com,songlyrics.com##.masthead
+eetimes.eu,korinthostv.gr,powerelectronicsnews.com##.masthead-banner
+augustman.com##.masthead-container
+cloudwards.net##.max-medium
+mayoclinic.org##.mayoad
+racgp.org.au##.mb-1.small
+wccftech.com##.mb-11
+coinlean.com##.mb-3
+gamedev.net##.mb-3.align-items-center.justify-content-start
+urbandictionary.com##.mb-4.justify-center
+themoscowtimes.com##.mb-4.py-3
+techbone.net##.mb-5.bg-light
+yardbarker.com##.mb_promo_responsive_right
+mastercomfig.com##.md-typeset[style^="background:"]
+medibang.com##.mdbnAdBlock
+online-translator.com##.mddlAdvBlock
+thestar.com.my##.med-rec
+gamezone.com##.med-rect-ph
+ghanaweb.com##.med_rec_lg_min
+ipwatchdog.com##.meda--sidebar-ad
+picuki.me##.media-wrap-h12
+webmd.com##.medianet-ctr
+gfinityesports.com##.mediavine_sidebar-atf_wrapper
+allmusic.com##.medium-rectangle
+chess.com##.medium-rectangle-ad-slot
+chess.com##.medium-rectangle-btf-ad-wrapper
+weatherpro.com##.medium-rectangle-wrapper-2
+ebaumsworld.com##.mediumRect
+ubergizmo.com##.mediumbox_container
+democraticunderground.com##.mediumrectangle-op-blank
+democraticunderground.com##.mediumrectangle-placeholder
+allnurses.com##.medrec
+techrepublic.com##.medusa-list
+compoundsemiconductor.net##.mega-bar
+theweather.com,theweather.net,yourweather.co.uk##.megabanner
+mentalmars.com##.menta-target
+2ip.me##.menu_banner
+gadgetsnow.com##.mercwapper
+audiokarma.org##.message > center b
+eawaz.com##.metaslider
+theweather.com,theweather.net,yourweather.co.uk##.meteored-ads
+metro.co.uk##.metro-discounts
+metro.co.uk##.metro-ow-modules
+moviefone.com##.mf-incontent
+desmoinesregister.com##.mfFsRn__mfFsRn
+moneycontrol.com##.mf_radarad
+analyticsinsight.net##.mfp-bg
+wethegeek.com##.mfp-content
+analyticsinsight.net##.mfp-ready
+cryptoreporter.info,palestinechronicle.com##.mh-header-widget-2
+citizen.digital##.mid-article-ad
+investing.com##.midHeader
+newsday.com##.midPg
+battlefordsnow.com,cfjctoday.com,everythinggp.com,huskiefan.ca,larongenow.com,meadowlakenow.com,nanaimonewsnow.com,northeastnow.com,panow.com,rdnewsnow.com,sasknow.com,vernonmatters.ca##.midcontent
+manofmany.com,scanwith.com##.middle-banner
+tradetrucks.com.au##.middle-banner-list
+hltv.org##.middle-container
+ibtimes.co.uk##.middle-leaderboard
+spectator.com.au##.middle-promo
+coincodex.com##.middle3
+heatmap.news##.middle_leaderboard
+thefastmode.com##.middlebanner
+fruitnet.com##.midpageAdvert
+extremetech.com##.min-h-24
+copyprogramming.com##.min-h-250
+uwufufu.com##.min-h-\[253px\]
+uwufufu.com##.min-h-\[300px\]
+instavideosave.net##.min-h-\[350px\]
+insiderintelligence.com##.min-h-top-banner
+stripes.com##.min-h90
+mumsnet.com##.min-w-\[300px\]
+moviemeter.com##.minheight250
+kitco.com##.mining-banner-container
+ar15.com##.minis
+247sports.com##.minutely-wrapper
+revolutionsoccer.net##.mls-o-adv-container
+thinkcivics.com##.mmt-primary
+inhabitat.com##.mn-wrapper
+houstonchronicle.com,mysanantonio.com,sfgate.com##.mnh90px
+allrecipes.com##.mntl-jwplayer-broad
+comicbook.com##.mobile
+putlockers.do##.mobile-btn
+birdwatchingdaily.com##.mobile-incontent-ad-label
+businessplus.ie##.mobile-mpu-widget
+forbes.com##.mobile-sticky-ed-placeholder
+pcmacstore.com##.mobileHide
+serverstoplist.com##.mobile_ad
+pinkvilla.com##.mobileads
+thedailybeast.com##.mobiledoc-sizer
+criminaljusticedegreehub.com##.mobius-container
+etxt.biz##.mod-cabinet__sidebar-adv
+etxt.biz##.mod-cabinet__sidebar-info
+notateslaapp.com##.mod-sponsors
+lakeconews.com##.mod_ijoomlazone
+breakingenergy.com,epicload.com,shine.cn##.modal-backdrop
+livelaw.in##.modal_wrapper_frame
+autoevolution.com##.modeladmid
+duckduckgo.com##.module--carousel-products
+duckduckgo.com##.module--carousel-toursactivities
+finextra.com##.module--sponsor
+webmd.com##.module-f-hs
+webmd.com##.module-top-picks
+fxsforexsrbijaforum.com##.module_ahlaejaba
+dfir.training##.moduleid-307
+dfir.training##.moduleid-347
+dfir.training##.moduleid-358
+beckershospitalreview.com##.moduletable > .becker_doubleclick
+dailymail.co.uk##.mol-fe-vouchercodes-redesign
+tiresandparts.net##.mom-e3lan
+monsoonjournal.com##.mom-e3lanat-wrap
+mondoweiss.net##.mondo-ads-widget
+joindota.com##.monkey-container
+flickr.com##.moola-search-div.main
+hindustantimes.com##.moreFrom
+apptrigger.com,fansided.com,lastnighton.com,mlsmultiplex.com,netflixlife.com,playingfor90.com,winteriscoming.net##.mosaic-banner
+98fm.com,airqualitynews.com,audioreview.com,barrheadnews.com,bobfm.co.uk,bordertelegraph.com,cultofandroid.com,dcsuk.info,directory.im,directory247.co.uk,dplay.com,dumbartonreporter.co.uk,dunfermlinepress.com,durhamtimes.co.uk,eastlothiancourier.com,econsultancy.com,entertainmentdaily.co.uk,eurogamer.net,findanyfilm.com,forzaitalianfootball.com,gamesindustry.biz,her.ie,herfamily.ie,joe.co.uk,joe.ie,kentonline.co.uk,metoffice.gov.uk,musicradio.com,newburyandthatchamchronicle.co.uk,newscientist.com,readamericanfootball.com,readarsenal.com,readastonvilla.com,readbasketball.com,readbetting.com,readbournemouth.com,readboxing.com,readbrighton.com,readbundesliga.com,readburnley.com,readcars.co,readceltic.com,readchampionship.com,readchelsea.com,readcricket.com,readcrystalpalace.com,readeverton.com,readeverything.co,readfashion.co,readfilm.co,readfood.co,readfootball.co,readgaming.co,readgolf.com,readhorseracing.com,readhuddersfield.com,readhull.com,readingchronicle.co.uk,readinternationalfootball.com,readlaliga.com,readleicester.com,readliverpoolfc.com,readmancity.com,readmanutd.com,readmiddlesbrough.com,readmma.com,readmotorsport.com,readmusic.co,readnewcastle.com,readnorwich.com,readnottinghamforest.com,readolympics.com,readpl.com,readrangers.com,readrugbyunion.com,readseriea.com,readshowbiz.co,readsouthampton.com,readsport.co,readstoke.com,readsunderland.com,readswansea.com,readtech.co,readtennis.co,readtottenham.com,readtv.co,readussoccer.com,readwatford.com,readwestbrom.com,readwestham.com,readwsl.com,realradioxs.co.uk,redhillandreigatelife.co.uk,rochdaleonline.co.uk,rte.ie,sloughobserver.co.uk,smartertravel.com,southwestfarmer.co.uk,spin1038.com,spinsouthwest.com,sportsjoe.ie,sportsmole.co.uk,strathallantimes.co.uk,sundaypost.com,tcmuk.tv,thevillager.co.uk,thisisfutbol.com,toffeeweb.com,uktv.co.uk,videocelts.com,warringtonguardian.co.uk,wiltshirebusinessonline.co.uk,windsorobserver.co.uk##.mpu
+news.sky.com##.mpu-1
+edarabia.com##.mpu-300
+arabiaweather.com##.mpu-card
+dailymail.co.uk##.mpu_puff_wrapper
+mapquest.com##.mq-bizLocs-container
+mapquest.co.uk,mapquest.com##.mqBizLocsContainer
+10play.com.au,geo.tv,jozifm.co.za,nwherald.com,runt-of-the-web.com,thewest.com.au,topgear.com.ph##.mrec
+auto.economictimes.indiatimes.com##.mrec-ads-slot
+dkoding.in##.mrf-adv__wrapper
+motorsport.com##.ms-ap
+autosport.com##.ms-apb
+motorsport.com##.ms-apb-dmpu
+autosport.com,motorsport.com##.ms-hapb
+autosport.com##.ms-side-items--with-banner
+codeproject.com##.msg-300x250
+cryptoticker.io##.mso-cls-wrapper
+marinetraffic.com##.mt-desktop-mode
+thedrive.com##.mtc-header__desktop__article-prefill-container
+thedrive.com##.mtc-prefill-container-injected
+fieldandstream.com,popsci.com##.mtc-unit-prefill-container
+myinstants.com##.multiaspect-banner-ad
+spy.com##.multiple-products
+zerolives.com##.munder-fn5udnsn
+cannabishealthnews.co.uk##.mvp-side-widget img
+marijuanamoment.net##.mvp-widget-ad
+malwaretips.com##.mwt_ads
+invezz.com,reviewparking.com##.mx-auto
+theawesomer.com##.mxyptext
+standardmedia.co.ke##.my-2
+cnet.com,healthline.com##.myFinance-ad-unit
+greatist.com,psychcentral.com##.myFinance-widget
+tastesbetterfromscratch.com##.mysticky-welcomebar-fixed
+troypoint.com##.mysticky-welcomebar-fixed-wrap
+koreaherald.com##.mythiell-mid-container
+exportfromnigeria.info##.mytopads
+hoteldesigns.net##.n2-ss-slider
+naturalblaze.com##.n553lfzn75
+mail.google.com##.nH.PS
+cryptobriefing.com##.na-item.item
+nanoreview.net##.nad_only_desktop
+nascar.com##.nascar-ad-container
+old.reddit.com##.native-ad-container
+allthatsinteresting.com##.native-box
+blockchair.com##.native-sentence
+phillyvoice.com##.native-sponsor
+tekno.kompas.com##.native-wrap
+seura.fi##.nativead:not(.list)
+vice.com##.nav-bar__article-spacer
+majorgeeks.com##.navigation-light
+vocm.com##.nccBigBox
+aceshowbiz.com,cmr24.net##.ne-banner-layout1
+meilleurpronostic.fr##.ne4u07a96r5c3
+danpatrick.com##.needsclick
+newegg.com##.negspa-brands
+nevadamagazine.com##.nevad-article-tall
+chaseyoursport.com##.new-adv
+play.typeracer.com##.newNorthWidget
+pcgamesn.com##.new_affiliate_embed
+farminguk.com##.news-advert-button-click
+myflixer.to##.news-iframe
+moddb.com##.nextmediaboxtop
+democraticunderground.com##.nhome-mediumrectangle-container
+hulkshare.com##.nhsBotBan
+afterdawn.com##.ni_box
+bizasialive.com##.nipl-sticky-footer-banner
+bizasialive.com##.nipl-top-sony-banr
+bizasialive.com##.nipl_add_banners_inner
+tumblr.com##.njwip
+quipmag.com##.nlg-sidebar-inner > .widget_text
+newsmax.com##.nmsponsorlink
+newsmax.com##.nmsponsorlink + [class]
+pcgamesn.com##.nn_mobile_mpu2_wrapper
+pcgamesn.com##.nn_mobile_mpu_wrapper
+trueachievements.com,truesteamachievements.com,truetrophies.com##.nn_player_w
+publishedreporter.com##.no-bg-box-model
+ferrarichat.com##.node_sponsor
+greyhound-data.com##.non-sticky-publift
+startpage.com##.nord-vpn-promo
+unogs.com##.nordvpnAd
+miniwebtool.com##.normalvideo
+chipchick.com##.noskim.ntv-moap
+4dayweek.io##.notadvert-tile-wrapper
+thisiscolossal.com##.notblocked
+cookingforengineers.com##.nothing
+moodiedavittreport.com##.notice
+mlsbd.shop##.notice-board
+cityam.com##.notice-header
+businessgreen.com,computing.co.uk##.notice-slot-full-below-header
+forum.xda-developers.com##.notices--thnoticesplus_topbar
+all3dp.com##.notification
+mondoweiss.net##.notrack
+bleepingcomputer.com##.noty_bar
+pcgamebenchmark.com##.nova_wrapper
+panda-novel.com,pandasnovel.com##.novel-ins2
+namepros.com##.np--shadow
+namepros.com##.np-iu34fdg
+nextpit.com##.np-top-deals
+zimbio.com##.npd-video-break
+crypto-news-flash.com##.nso_ad_under_article
+designtaxi.com##.nt
+designtaxi.com##.nt-displayboard
+newtimes.co.rw##.nt-horizontal-ad
+newtimes.co.rw##.nt-vertical-ad
+english.nv.ua##.nts-video-wrapper
+marineelectronics.com,marinetechnologynews.com##.nwm-banner
+kueez.com,trendexposed.com,wackojacko.com##.nya-slot
+nypost.com##.nyp-s2n-wrapper
+decider.com##.nyp-video-player
+golfdigest.com##.o-ArticleRecirc
+drivencarguide.co.nz##.o-adunit
+lawandcrime.com,mediaite.com##.o-promo-unit
+afkgaming.com##.o-yqC
+comicbook.com##.oas
+sentres.com##.oax_ad_leaderboard
+comiko.net##.ob-widget-items-container
+officedepot.com##.od-search-piq-banner-ads__lower-leaderboard
+flashscore.co.za##.oddsPlacement
+kijiji.ca##.ofGHb
+guelphmercury.com##.offcanvas-inner > .tncms-region
+softexia.com##.offer
+oneindia.com##.oi-add-block
+oneindia.com##.oi-recom-art-wrap
+oneindia.com##.oi-spons-ad
+oneindia.com##.oiad
+boldsky.com,drivespark.com,filmibeat.com,gizbot.com,goodreturns.in,oneindia.com##.oiad-txt
+hamodia.com##.oiomainlisting
+forums.somethingawful.com##.oma_pal
+oneindia.com##.one-ad
+techspot.com##.oneText
+gameworldobserver.com##.only_link_area
+decrypt.co##.opacity-75
+lowtoxlife.com##.openpay-footer
+politicalsignal.com##.os9x6hrd9qngz
+indianexpress.com##.osv-ad-class
+thedigitalfix.com##.ot-widget-banner
+otakuusamagazine.com##.otaku_big_ad
+dictionary.com,thesaurus.com##.otd-item__bottom
+mma-core.com##.outVidAd
+egmnow.com##.outbrain-wrapper
+businesstoday.in##.outer-add-section
+techadvisor.com##.outer-wrapper
+salon.com##.outer_ad_container
+aminoapps.com##.overflow-scroll-sidebar > div
+shtfplan.com##.overlay-container
+golfweather.com##.ox300x250
+afkgaming.com##.ozw5N
+breakingnews.ie##.p-2.bg-gray-100
+beermoneyforum.com##.p-body-sidebar
+startpage.com##.pa-bg
+startpage.com##.pa-bg-carousel
+phonearena.com##.pa-sticky-container
+getpocket.com##.paarv6m
+islamicfinder.org##.pad-xs.box.columns.large-12
+republicworld.com##.pad3010.txtcenter
+republicworld.com##.padtop10.padright10.padleft10.minheight90
+republicworld.com##.padtop20.txtcenter.minheight90
+realtytoday.com##.page-bottom
+scmp.com##.page-container__left-native-ad-container
+bitdegree.org##.page-coupon-landing
+iheartradio.ca##.page-footer
+carsales.com.au,technobuffalo.com##.page-header
+realtytoday.com##.page-middle
+boxing-social.com##.page-takeover
+seeklogo.com##.pageAdsWp
+krcrtv.com,ktxs.com,wcti12.com,wcyb.com##.pageHeaderRow1
+military.com##.page__top
+rateyourmusic.com##.page_creative_frame
+trustedreviews.com##.page_header_container
+nzcity.co.nz##.page_skyscraper
+mynorthwest.com##.pagebreak
+calculatorsoup.com##.pages
+topic.com##.pages-Article-adContainer
+livejournal.com##.pagewide-wrapper
+departures.com##.paid-banner
+timesofindia.indiatimes.com##.paisa-wrapper
+axn-asia.com,onetvasia.com##.pane-dart-dart-tag-300x250-rectangle
+insidehighered.com##.pane-dfp
+thebarentsobserver.com##.pane-title
+comedycentral.com.au##.pane-vimn-coda-gpt-panes
+wunderground.com##.pane-wu-fullscreenweather-ad-box-atf
+khmertimeskh.com##.panel-grid-cell
+tutorialspoint.com##.panel-htop.layout-panel-east
+panarmenian.net##.panner_2
+battlefordsnow.com,cfjctoday.com,everythinggp.com,huskiefan.ca,larongenow.com,meadowlakenow.com,nanaimonewsnow.com,northeastnow.com,panow.com,rdnewsnow.com,sasknow.com,vernonmatters.ca##.parallax-breakout
+pons.com##.parallax-container
+motortrend.com##.parent-video-player-cls
+hltv.org##.parimatch-firstcol-box
+myfigurecollection.net,prolificnotion.co.uk##.partner
+hbr.org##.partner-center
+mail.com##.partner-container
+globalwaterintel.com,mavin.io##.partner-content
+globalwaterintel.com##.partner-content-carousel
+nrl.com##.partner-groups
+courier-journal.com,courierpress.com,detroitnews.com,freep.com,greenbaypressgazette.com,jsonline.com,lohud.com,northjersey.com,sheboyganpress.com,tallahassee.com,theadvertiser.com##.partner-placement
+dzone.com##.partner-resources-block
+nationtalk.ca##.partner-slides
+artasiapacific.com##.partner_container
+motachashma.com,ordertracker.com##.partnerbanner
+bundesliga.com##.partnerbar
+freshnewgames.com##.partnercontent_box
+investopedia.com##.partnerlinks
+2oceansvibe.com,speedcafe.com,travelweekly.com##.partners
+letsgodigital.org,letsgomobile.org##.partners-bar
+cbn.com##.partners-block
+practicalecommerce.com##.partners-sidebar
+advocate.com##.partners__container
+arrivealive.co.za##.partnersheading
+liveuamap.com##.passby
+writerscafe.org##.pay
+nhentai.com##.pb-0.w-100[style]
+newkerala.com##.pb-2 .text-mute
+wweek.com##.pb-f-phanzu-phanzu-ad-code
+cattime.com,dogtime.com,liveoutdoors.com,playstationlifestyle.net,thefashionspot.com##.pb-in-article-content
+playbuzz.com##.pb-site-player
+washingtonpost.com##.pb-sm.pt-sm.b
+publicbooks.org##.pb_ads_widget
+recipesandcooker.com##.pbl
+caixinglobal.com##.pc-ad-left01
+serverstoplist.com##.pcOnly
+thefintechtimes.com##.penci-widget-sidebar
+bestbuy.ca##.pencilAd_EE9DV
+thegatewaypundit.com,westernjournal.com,wnd.com##.persistent-footer
+apkmb.com##.personalizadas
+post-gazette.com##.pg-mobile-adhesionbanner
+post-gazette.com##.pgevoke-flexbanner-innerwrapper
+post-gazette.com##.pgevoke-superpromo-innerwrapper
+online.pubhtml5.com##.ph5---banner---container
+timesofindia.com##.phShimmer
+drivespark.com,filmibeat.com,gizbot.com##.photos-add
+drivespark.com,filmibeat.com##.photos-left-ad
+washingtontimes.com##.piano-in-article-reco
+washingtontimes.com##.piano-right-rail-reco
+reelviews.net##.picHolder
+locklab.com##.picwrap
+yopmail.com,yopmail.fr,yopmail.net##.pindexhautctn
+carsized.com##.pl_header_ad
+redgifs.com##.placard-wrapper
+gismeteo.com,meteofor.com,nofilmschool.com##.placeholder
+bucksco.today##.placeholder-block
+theoldie.co.uk##.placeholder-wrapper
+sundayworld.co.za##.placeholderPlug
+pcgamebenchmark.com,streetcheck.co.uk##.placement
+diglloyd.com,windinmyface.com##.placementInline
+diglloyd.com,windinmyface.com##.placementTL
+diglloyd.com,windinmyface.com##.placementTR
+hagerty.com##.placements
+plagiarismtoday.com##.plagi-widget
+trakt.tv##.playwire
+advfn.com##.plus500
+thepinknews.com##.pn-ad-container
+thepinknews.com##.pn-remove-ads-container
+freewebarcade.com##.pnum
+thespec.com##.polarAds
+bramptonguardian.com,guelphmercury.com,insideottawavalley.com,thestar.com##.polarBlock
+autoexpress.co.uk##.polaris__below-header-ad-wrapper
+autoexpress.co.uk##.polaris__partnership-block
+bigissue.com##.polaris__simple-grid--full
+compoundsemiconductor.net##.popular__section-newsx
+wethegeek.com##.popup-dialog
+welovemanga.one##.popup-wrap
+battlefordsnow.com,cfjctoday.com,everythinggp.com,huskiefan.ca,larongenow.com,lethbridgenewsnow.com,meadowlakenow.com,nanaimonewsnow.com,northeastnow.com,panow.com,rdnewsnow.com,sasknow.com,vernonmatters.ca##.pos-top
+buffstreams.sx##.position-absolute
+charlieintel.com##.position-sticky
+wtop.com##.post--sponsored
+engadget.com##.post-article-ad
+kiplinger.com##.post-gallery-item-ad
+hackread.com##.post-review-li
+hellocare.com.au##.post-wrapper__portrait-ads
+newagebd.net##.postPageRightInTop
+newagebd.net##.postPageRightInTopIn
+thetrek.co##.post__in-content-ad
+fastcompany.com##.post__promotion
+bleedingcool.com##.post_content_spacer
+ultrabookreview.com##.postzzif3
+redketchup.io##.potato_sticky
+redketchup.io##.potato_viewer
+apartmenttherapy.com,cubbyathome.com,thekitchn.com##.pov_recirc__ad
+power987.co.za##.power-leader-board-center
+thetowner.com##.powered
+thecoinrise.com##.pp_ad_block
+theportugalnews.com##.ppp-banner
+theportugalnews.com##.ppp-inner-banner
+oneesports.gg##.pr-sm-4
+birdsandblooms.com,familyhandyman.com,rd.com,tasteofhome.com,thehealthy.com##.pre-article-ad
+foxbusiness.com##.pre-content
+sassymamahk.com##.pre_header_widget
+vivo.sx##.preload
+anfieldwatch.co.uk##.prem-gifts
+premiumtimesng.com##.premi-texem-campaign
+sulekha.com##.premium-banner-advertisement
+pixabay.com##.present-g-item
+flobzoo.com##.preview2bannerspot
+manutd.com##.primary-header-sponsors
+tech.hindustantimes.com##.primeDay
+advfn.com##.primis-container
+sportskeeda.com##.primis-player-container
+astrology.com##.primis-video-module-horoscope
+rockpapershotgun.com##.primis_wrapper
+setlist.fm##.prmtnTop
+computerweekly.com##.pro-downloads-home
+pbs.org##.production-and-funding
+nymag.com##.products-package
+nymag.com##.products-package_single
+filehippo.com##.program-actions-header__promo
+filehippo.com##.program-description__slot
+as.com,gokunming.com##.prom
+delicious.com.au,taste.com.au##.prom-header
+babynamegenie.com,comparitech.com,ecaytrade.com,nbcbayarea.com,nwherald.com,overclock3d.net,planetsourcecode.com,sciagaj.org,themuslimvibe.com,totalxbox.com,varsity.com,w3techs.com,wgxa.tv##.promo
+setapp.com,thesaturdaypaper.com.au##.promo-banner
+winscp.net##.promo-block
+forums.minecraftforge.net,nextdoor.com,uploadvr.com##.promo-container
+texasmonthly.com##.promo-in-body
+texasmonthly.com##.promo-inline
+coveteur.com##.promo-placeholder
+ecaytrade.com##.promo-processed
+texasmonthly.com##.promo-topper
+lawandcrime.com,themarysue.com##.promo-unit
+texasmonthly.com##.promo__vertical
+uxmatters.com##.promo_block
+reviversoft.com##.promo_dr
+macworld.com##.promo_wrap
+core77.com##.promo_zone
+fool.com##.promobox-container
+thedailydigest.com##.promocion_celda
+canstar.com.au,designspiration.com,investors.com,search.installmac.com##.promoted
+twitter.com##.promoted-account
+andoveradvertiser.co.uk,asianimage.co.uk,autoexchange.co.uk,banburycake.co.uk,barryanddistrictnews.co.uk,basildonstandard.co.uk,basingstokegazette.co.uk,bicesteradvertiser.net,borehamwoodtimes.co.uk,bournemouthecho.co.uk,braintreeandwithamtimes.co.uk,brentwoodlive.co.uk,bridgwatermercury.co.uk,bridportnews.co.uk,bromsgroveadvertiser.co.uk,bucksfreepress.co.uk,burnhamandhighbridgeweeklynews.co.uk,burytimes.co.uk,campaignseries.co.uk,chardandilminsternews.co.uk,chelmsfordweeklynews.co.uk,chesterlestreetadvertiser.co.uk,chorleycitizen.co.uk,clactonandfrintongazette.co.uk,cotswoldjournal.co.uk,cravenherald.co.uk,creweguardian.co.uk,dailyecho.co.uk,darlingtonandstocktontimes.co.uk,dorsetecho.co.uk,droitwichadvertiser.co.uk,dudleynews.co.uk,ealingtimes.co.uk,echo-news.co.uk,enfieldindependent.co.uk,eppingforestguardian.co.uk,eveshamjournal.co.uk,falmouthpacket.co.uk,freepressseries.co.uk,gazette-news.co.uk,gazetteherald.co.uk,gazetteseries.co.uk,guardian-series.co.uk,halesowennews.co.uk,halsteadgazette.co.uk,hampshirechronicle.co.uk,harrowtimes.co.uk,harwichandmanningtreestandard.co.uk,heraldseries.co.uk,herefordtimes.com,hillingdontimes.co.uk,ilkleygazette.co.uk,keighleynews.co.uk,kidderminstershuttle.co.uk,knutsfordguardian.co.uk,lancashiretelegraph.co.uk,ledburyreporter.co.uk,leighjournal.co.uk,ludlowadvertiser.co.uk,maldonandburnhamstandard.co.uk,malverngazette.co.uk,messengernewspapers.co.uk,milfordmercury.co.uk,newsshopper.co.uk,northwichguardian.co.uk,oxfordmail.co.uk,penarthtimes.co.uk,prestwichandwhitefieldguide.co.uk,redditchadvertiser.co.uk,redhillandreigatelife.co.uk,richmondandtwickenhamtimes.co.uk,romseyadvertiser.co.uk,runcornandwidnesworld.co.uk,salisburyjournal.co.uk,somersetcountygazette.co.uk,southendstandard.co.uk,southwalesargus.co.uk,southwalesguardian.co.uk,southwestfarmer.co.uk,stalbansreview.co.uk,sthelensstar.co.uk,stourbridgenews.co.uk,surreycomet.co.uk,suttonguardian.co.uk,swindonadvertiser.co.uk,tewkesburyadmag.co.uk,theargus.co.uk,theboltonnews.co.uk,thenational.scot,thenorthernecho.co.uk,thescottishfarmer.co.uk,thetelegraphandargus.co.uk,thetottenhamindependent.co.uk,thewestmorlandgazette.co.uk,thisisthewestcountry.co.uk,thurrockgazette.co.uk,times-series.co.uk,wandsworthguardian.co.uk,warringtonguardian.co.uk,watfordobserver.co.uk,westerntelegraph.co.uk,wharfedaleobserver.co.uk,wiltsglosstandard.co.uk,wiltshiretimes.co.uk,wimbledonguardian.co.uk,wirralglobe.co.uk,witneygazette.co.uk,worcesternews.co.uk,yeovilexpress.co.uk,yorkpress.co.uk,yourlocalguardian.co.uk##.promoted-block
+imdb.com##.promoted-provider
+reddit.com,reddittorjg6rue252oqsxryoxengawnmo46qy4kyii5wtqnwfj4ooad.onion##.promotedlink:not([style^="height: 1px;"])
+racingtv.com,twitter.com,wral.com##.promotion
+eetimes.eu##.promotion-block-wrapper
+actionnetwork.com##.promotion-table
+throwawaymail.com##.promotion_row
+bostonreview.net##.promotop
+insauga.com##.proper-content-dynamic
+football365.com,planetf1.com,planetrugby.com##.ps-block-a
+kathmandupost.com##.pt-0
+gsmarena.com##.pt-10
+gonintendo.com##.pt-5
+getyarn.io##.pt3p > div
+seattlepi.com##.pt40
+1980-games.com,coleka.com,flash-mp3-player.net,gameslol.net,theportugalnews.com,tolonews.com##.pub
+starsinsider.com##.pub-container
+yabiladi.com##.pub2
+gameslol.net##.pubGside
+gameslol.net,yabiladi.com##.pub_header
+devhints.io##.pubbox
+as.com,desdelinux.net,tutiempo.net,ubunlog.com##.publi
+surinenglish.com##.publiTop
+catholic.net##.publicidad
+eitb.eus##.publicidad_cabecera
+eitb.eus##.publicidad_robapaginas
+dailymail.co.uk##.puff_pastel
+speedtest.net##.pure-u-custom-ad-rectangle
+speedtest.net##.pure-u-custom-ad-skyscraper
+appleinsider.com##.push
+2conv.com##.push-offer
+happymod.com##.pvpbar_ad
+onmsft.com##.pw-gtr-box
+bleedingcool.com##.pw-in-article
+pricecharting.com##.pw-leaderboard
+giantfreakinrobot.com##.pw-leaderboard-atf-container
+giantfreakinrobot.com##.pw-leaderboard-btf-container
+giantfreakinrobot.com##.pw-med-rect-atf-container
+giantfreakinrobot.com##.pw-med-rect-btf-container
+news18.com##.pwa_add
+smallseotools.com##.px304
+breakingnews.ie,canberratimes.com.au,theland.com.au##.py-2.bg-gray-100
+euronews.com##.qa-dfpLeaderBoard
+thegatewaypundit.com##.qh1aqgd
+revolution935.com##.qt-sponsor
+coingape.com,dailyboulder.com,townflex.com##.quads-location
+surfline.com##.quiver-google-dfp
+allthatsinteresting.com##.r-11rk87y
+tgstat.com##.r1-aors
+calendar-canada.ca,osgamers.com##.r89-outstream-video
+tripadvisor.com##.rSJod
+joins.com,kmplayer.com##.r_banner
+linuxtopia.org##.raCloseButton
+time.is##.rad
+wahm.com##.rad-links
+w3newspapers.com##.rads
+theparisreview.org##.rail-ad
+bookriot.com##.random-content-pro-wrapper
+dappradar.com##.rankings-ad-row
+rappler.com##.rappler-ad-container
+wdwmagic.com##.raptive-custom-sidebar1
+gobankingrates.com##.rate-table-header
+mydorpie.com##.rbancont
+forebet.com##.rbannerDiv
+reverso.net##.rcacontent
+bookriot.com##.rcp-wrapper
+just-dice.com##.realcontent
+shareus.io##.recent-purchased
+bettycrocker.com##.recipeAd
+nypost.com,pagesix.com##.recirc
+goodmorningamerica.com##.recirculation-module
+videocelebs.net##.recl
+nzherald.co.nz##.recommended-articles > .recommended-articles__heading
+streamtvinsider.com##.recommended-content
+slashgear.com##.recommended-heading
+forestriverforums.com##.recommended-stories
+last.fm##.recs-feed-item--ad
+anisearch.com##.rect_sidebar
+dosgamesarchive.com##.rectangle
+knowyourmeme.com##.rectangle-unit-wrapper
+redferret.net##.redfads
+arras.io##.referral
+al-monitor.com##.region--after-content
+middleeasteye.net##.region-before-navigation
+steveharveyfm.com##.region-recommendation-right
+mrctv.org##.region-sidebar
+futbol24.com##.rek
+wcostream.com##.reklam_pve
+cyclingnews.com##.related-articles-wrap
+engadget.com##.related-content-lazyload
+idropnews.com##.related-posts
+ranker.com##.relatedInline_container__Ux4lS
+timesofindia.indiatimes.com##.relatedVideoWrapper
+miragenews.com##.rem-i-s
+4shared.com##.remove-rekl
+runningmagazine.ca##.repeater-bottom-leaderboard
+bbjtoday.com##.replacement
+holiday-weather.com##.resp-leaderboard
+box-core.net,mma-core.com##.resp_ban
+arras.io##.respawn-banner
+guru99.com##.responsive-guru99-mobile1
+duckduckgo.com,duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion##.result--ad > .result__body
+jetphotos.com##.result--adv
+myminifactory.com##.result-adv
+classifiedads.com##.resultmarg
+inchcalculator.com##.results-ad-container-outer
+infobel.com##.results-bottom-banner-container
+infobel.com##.results-middle-banner-container
+infobel.com##.results-top-banner-container
+curseforge.com##.rev-container
+realmscans.to##.rev-src
+utahgunexchange.com##.rev_slider_wrapper
+latimes.com,sandiegouniontribune.com##.revcontent
+al.com,cleveland.com,lehighvalleylive.com,masslive.com,mlive.com,newyorkupstate.com,oregonlive.com,pennlive.com,silive.com,syracuse.com##.revenue-display
+grammar.yourdictionary.com##.revenue-placeholder
+hindustantimes.com##.rgtAdSection
+indianexpress.com##.rhs-banner-carousel
+cnbctv18.com##.rhs-home-second-ad
+dailyo.in##.rhsAdvertisement300
+livemint.com##.rhsWidgetNotAdFree
+moneycontrol.com##.rhs_banner_300x34_widget
+siteslike.com##.rif
+terminal.hackernoon.com##.right
+cnbctv18.com##.right-ad-amp
+news.net##.right-banner-wr > .right
+africanews.com##.right-legend
+essentialenglish.review##.right-panel
+jta.org##.right-rail-container
+businessinsider.com##.right-rail-min-height-250
+medpagetoday.com##.right-rail-panel
+jpost.com##.right-side-banner
+businesstoday.in##.right-side-tabola
+slickdeals.net##.rightRailBannerSection
+babycenter.com##.rightRailSegment
+boomlive.in##.right_ad_4
+gamemodding.com##.right_banner
+softicons.com##.right_ga
+smartasset.com##.riklam-container
+ip.sb##.rivencloud_ads
+rocket-league.com##.rlg-footer-ads-container
+rocket-league.com##.rlg-trading-ad
+rocket-league.com##.rlg-trading-spacer
+costco.com##.rm-grid-product
+indiatimes.com##.rmfp
+rebelnews.com##.rn-article-ad
+rebelnews.com##.rn-sidebar-ad
+realitytea.com##.roadblock
+surinenglish.com##.roba
+cults3d.com##.robots-nocontent
+boxrox.com##.rolling-mrt
+beforeitsnews.com##.rotating_text_link
+superhumanradio.net##.rotating_zone
+atalayar.com##.rotulo-publi
+flightconnections.com##.route-display-box
+nme.com##.row-mobile-billboard
+healthnfitness.net##.row-section-game-widget
+elnacional.cat##.row-top-banner
+steamanalyst.com##.row.tpbcontainer
+bikechatforums.com##.row2[style="padding: 5px;"]
+onlineocr.net##.row[style*="text-align:right"]
+jdpower.com##.rrail__ad-wrap
+wikihow.com##.rrdoublewrap
+kickassanime.am##.rs
+freewebarcade.com##.rsads
+gamertweak.com##.rsgvqezdh-container
+box-core.net,mma-core.com##.rsky
+rswebsols.com##.rsws_banner_sidebar
+nextofwindows.com##.rtsidebar-cm
+freewebarcade.com##.rxads
+freewebarcade.com##.rxse
+itweb.co.za##.s-logos
+bleepingcomputer.com##.s-ou-wrap
+hope1032.com.au##.s-supported-by
+japantoday.com##.s10r
+aniwatcher.com##.sa
+nodejs.libhunt.com##.saashub-ad
+steamladder.com##.salad
+salife.com.au##.salife-slot
+9gag.com##.salt-section
+9gag.com##.salt-wrapper
+softonic.com##.sam-slot
+audi-sport.net,beermoneyforum.com,forums.sailinganarchy.com,geekdoing.com,sportfishingbc.com,studentdoctor.net##.samBannerUnit
+racedepartment.com,resetera.com,satelliteguys.us##.samCodeUnit
+beermoneyforum.com##.samTextUnit
+netweather.tv##.samsad-Leaderboard2
+teamfortress.tv##.sau
+point2homes.com##.saved-search-banner-list
+thebudgetsavvybride.com##.savvy-target
+pcgamesn.com##.saw-wrap
+tvtropes.org##.sb-fad-unit
+animehub.ac##.sb-subs
+sabcsport.com##.sbac_header_top_ad
+mindbodygreen.com##.sc-10p0iao-0
+kotaku.com##.sc-6zn1bq-0
+distractify.com,inquisitr.com,radaronline.com##.sc-fTZrbU
+scotsman.com##.sc-igwadP
+sankakucomplex.com##.scad
+soyacincau.com##.scadslot-widget
+bangordailynews.com##.scaip
+newindianexpress.com##.scc
+radiotimes.com##.schedule__row-list-item-advert
+fantasyalarm.com##.scoreboard
+hentaihaven.icu,hentaihaven.xxx,hentaistream.tv,nhentai.io##.script_manager_video_master
+eatsmarter.com##.scroll-creatives
+readmng.com##.scroll_target_top
+lethbridgenewsnow.com##.scroller
+cyclinguptodate.com,tennisuptodate.com##.sda
+userscript.zone##.searcad
+dryicons.com##.search-related__sponsored
+semiconductor-today.com##.searchmidbox
+minecraftservers.org##.second-banner
+businesstoday.in##.secondAdPosition
+finextra.com##.section--minitextad
+finextra.com##.section--mpu
+wbur.org##.section--uw
+sowetanlive.co.za##.section-article-sponsored
+nzherald.co.nz##.section-iframe
+tvarticles.me##.section-post-about
+pipeflare.io##.section-promo-banner
+seattlepride.org##.section_sponsorship
+brandsoftheworld.com##.seedling
+hypestat.com##.sem_banner
+shareus.io##.seperator-tag
+searchencrypt.com##.serp__top-ads
+save-editor.com##.set_wrapper
+shortorial.com##.sgpb-popup-dialog-main-div-wrapper
+analyticsinsight.net,shortorial.com##.sgpb-popup-overlay
+stockhouse.com##.sh-ad
+soaphub.com##.sh-sh_belowpost
+soaphub.com##.sh-sh_inpost_1
+soaphub.com##.sh-sh_inpost_3
+soaphub.com##.sh-sh_inpost_text_1
+themeforest.net##.shared-global_footer-cross_sell_component__root
+romzie.com##.shcntr
+bestbuy.com##.shop-dedicated-sponsored-carousel
+stokesentinel.co.uk##.shop-window[data-impr-tracking="true"]
+hypebeast.com##.shopping-break-container
+indiatoday.in##.shopping__widget
+citychicdecor.com##.shopthepost-widget
+mirror.co.uk##.shopwindow-adslot
+mirror.co.uk##.shopwindow-advertorial
+chess.com##.short-sidebar-ad-component
+axios.com##.shortFormNativeAd
+fool.com##.show-ad-label
+siliconrepublic.com##.show-for-medium-up
+thepointsguy.com##.showBb
+winx-club-hentai.com##.shr34
+mbauniverse.com##.shriresume-logo
+seeklogo.com##.shutterBannerWp
+tineye.com##.shutterstock-similar-images
+scriptinghelpers.org##.shvertise-skyscraper
+cartoq.com##.side-a
+chaseyoursport.com##.side-adv-block-blog-open
+news.am,nexter.org,viva.co.nz##.side-banner
+setapp.com##.side-scrolling__banner
+idropnews.com##.side-title-wrap
+vpnmentor.com##.side-top-vendors-wrap
+pr0gramm.com##.side-wide-skyscraper
+seeklogo.com##.sideAdsWp
+israelnationalnews.com##.sideInf
+freeseotoolbox.net##.sideXd
+uquiz.com##.side_bar
+panarmenian.net##.side_panner
+tutorialrepublic.com##.sidebar
+dkoding.in##.sidebar .widget_custom_html
+oann.com##.sidebar-ad-slot__ad-label
+jayisgames.com##.sidebar-ad-top
+motorcycle.com##.sidebar-ad-unit
+computing.co.uk##.sidebar-block
+dailycoffeenews.com##.sidebar-box
+radiotoday.co.uk##.sidebar-column-secondary > .sidebar
+nfcw.com##.sidebar-display
+thehustle.co##.sidebar-feed-trends
+lawandcrime.com,mediaite.com##.sidebar-hook
+freshbusinessthinking.com##.sidebar-mpu
+spearswms.com##.sidebar-mpu-1
+middleeasteye.net##.sidebar-photo-extend
+comedy.com##.sidebar-prebid
+domainnamewire.com,repeatreplay.com##.sidebar-primary
+libhunt.com##.sidebar-promo-boxed
+davidwalsh.name##.sidebar-sda-large
+coincodex.com##.sidebar-skyscraper
+ldjam.com##.sidebar-sponsor
+abovethelaw.com##.sidebar-sponsored
+proprivacy.com##.sidebar-top-vpn
+indianapublicmedia.org##.sidebar-upper-underwritings
+bigleaguepolitics.com##.sidebar-widget
+zap-map.com##.sidebar__advert
+pbs.org##.sidebar__logo-pond
+hepper.com##.sidebar__placement
+snopes.com##.sidebar_ad
+pcgamesn.com##.sidebar_affiliate_disclaimer
+bxr.com##.sidebar_promo
+bleedingcool.com##.sidebar_spacer
+alternet.org##.sidebar_sticky_container
+macrumors.com##.sidebarblock
+macrumors.com##.sidebarblock2
+linuxize.com##.sideblock
+dbknews.com##.sidekick-wrap
+kit.co##.sidekit-banner
+linuxtopia.org##.sidelinks > .sidelinks
+atlasobscura.com##.siderail-bottom-affix-placeholder
+rockradio.com##.sidewall-ad-component
+sifted.eu##.sifted_advert_block
+wncv.com##.simple-image
+nanoreview.net##.sinad_only_desktop
+nanoreview.net##.sinad_only_mobile
+metalsucks.net##.single-300-insert
+9to5mac.com##.single-custom-post-ad
+kolompc.com##.single-post-content > center
+abovethelaw.com##.single-post__sponsored-post--desktop
+policyoptions.irpp.org##.single__ad
+deshdoaba.com##.site-branding
+emulatorgames.net##.site-label
+sassyhongkong.com##.site-leaderboard
+jdpower.com##.site-top-ad
+dailycoffeenews.com##.site-top-ad-desktop
+emulatorgames.net##.site-unit-lg
+macys.com##.siteMonetization
+warcraftpets.com##.sitelogo > div
+garagejournal.com##.size-full.attachment-full
+newsnext.live##.size-large
+garagejournal.com##.size-medium
+canadianbusiness.com##.sjm-dfp-wrapper
+indiancountrytoday.com##.skgeoeho
+charismanews.com##.skinTrackClicks
+hltv.org##.skinport
+entrepreneur.com##.sky
+edarabia.com##.sky-600
+planetf1.com##.skybetbar
+cbssports.com##.skybox-top-wrapper
+mymovies.net##.skyright
+traditionalmusic.co.uk##.skys-right
+cheese.com,datpiff.com,gtainside.com##.skyscraper
+democraticunderground.com,plos.org##.skyscraper-container
+newsnow.co.uk##.skyscraper-left
+democraticunderground.com##.skyscraper-placeholder
+dosgamesarchive.com##.skyscraper_big
+singaporeexpats.com##.skyscrapers
+everythingrf.com,futbol24.com##.skyscrapper
+thebestcakerecipes.com##.slick-film-strip
+zimbio.com##.slide-break
+as.com##.slider-producto
+inbox.com##.slinks
+airdriecityview.com,alaskahighwaynews.ca,albertaprimetimes.com,bowenislandundercurrent.com,burnabynow.com,coastreporter.net,cochraneeagle.ca,delta-optimist.com,moosejawtoday.com,mountainviewtoday.ca,newwestrecord.ca,nsnews.com,piquenewsmagazine.com,princegeorgecitizen.com,prpeak.com,richmond-news.com,rmoutlook.com,sasktoday.ca,squamishchief.com,stalbertgazette.com,theorca.ca,townandcountrytoday.com,tricitynews.com,vancouverisawesome.com,westerninvestor.com,westernwheel.ca##.slot
+iheartradio.ca##.slot-topNavigation
+independent.ie##.slot1
+independent.ie##.slot4
+boxofficemojo.com,imdb.com##.slot_wrapper
+drivereasy.com##.sls_pop
+skinnyms.com##.sm-above-header
+bikeexif.com##.small
+dutchnews.nl##.small-add-block
+numuki.com##.small-banner-responsive-wrapper
+startup.ch##.smallbanner
+food.com##.smart-aside-inner
+food.com##.smart-rail-inner
+secretchicago.com##.smn-new-gpt-ad
+rugby365.com##.snack-container
+small-screen.co.uk##.snackStickyParent
+dailyevergreen.com##.sno-hac-desktop-1
+khmertimeskh.com##.so-widget-sow-image
+u.today##.something
+u.today##.something--fixed
+u.today##.something--wide
+songfacts.com##.songfacts-song-inline-ads
+greatandhra.com##.sortable-item_top_add123
+khmertimeskh.com##.sow-slider-image
+freeonlineapps.net##.sp
+quora.com##.spacing_log_question_page_ad
+theloadout.com##.sparta-ad-injector-potential-slot
+infoq.com##.spns
+informer.com##.spnsd
+sundayworld.co.za##.spnsorhome
+mydramalist.com##.spnsr
+worldtimezone.com##.spon-menu
+xda-developers.com##.spon_banner
+andrewlock.net,centos.org,domainincite.com,europages.co.uk,gamingcloud.com,ijr.com,kpbs.org,manutd.com,phillyvoice.com,phish.report,speedcafe.com,thefederalistpapers.org,thegatewaypundit.com,ufile.io,westernjournal.com,wnd.com##.sponsor
+cssbattle.dev,vuejs.org##.sponsor-container
+dallasinnovates.com##.sponsor-footer
+jquery.com##.sponsor-line
+newsroom.co.nz##.sponsor-logos2
+compellingtruth.org##.sponsor-sidebar
+cricketireland.ie##.sponsor-strip
+arizonasports.com,ktar.com##.sponsorBy
+blbclassic.org##.sponsorZone
+2b2t.online,caixinglobal.com,chicagobusiness.com,chronicle.co.zw,dailymaverick.co.za,dailytarheel.com,duckduckgo.com,duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion,dunyanews.tv,fifplay.com,freebmd.org.uk,hbr.org,herald.co.zw,lawandcrime.com,libhunt.com,motherjones.com,naval-technology.com,reviewjournal.com,saashub.com,samedicalspecialists.co.za,sportsbusinessjournal.com,statnews.com,stocksnap.io,timeslive.co.za##.sponsored
+newegg.com##.sponsored-brands
+cheknews.ca##.sponsored-by
+washingtontimes.com##.sponsored-heading
+breakingdefense.com##.sponsored-inline
+walgreens.com##.sponsored-padding
+crn.com##.sponsored-resources
+search.brave.com##.sponsored-unit_wrapper
+coingecko.com##.sponsored-v2
+investing.com##.sponsoredArticle
+tech.hindustantimes.com##.sponsoredBox
+coinmarketcap.com##.sponsoredMark
+circleid.com##.sponsoredTopicCard
+hannaford.com##.sponsored_product
+meijer.com##.sponsoredproducts
+ar15.com,armageddonexpo.com,audiforums.com,f1gamesetup.com,ferrarichat.com,hotrodhotline.com,jaguarforums.com,pypi.org,smashingmagazine.com,thebugle.co.za,waamradio.com,wbal.com,webtorrent.io##.sponsors
+vuejs.org##.sponsors-aside-text
+salixos.org##.sponsors-container
+libhunt.com##.sponsors-list-content
+petri.com##.sponsorsInline
+hacksplaining.com##.sponsorship-message
+newswiretoday.com,przoom.com##.sponsortd
+timesofindia.indiatimes.com##.sports_ad_wrapper
+alexandriagazette.com,arlingtonconnection.com,burkeconnection.com,centre-view.com,coincost.net,connection-sports.com,fairfaxconnection.com,fairfaxstationconnection.com,forum.xda-developers.com,greatfallsconnection.com,herndonconnection.com,mcleanconnection.com,mountvernongazette.com,phonearena.com,potomacalmanac.com,reston-connection.com,springfieldconnection.com,viennaconnection.com##.spot
+phonearena.com##.spot-sticky-container
+freepik.com##.spr-plc
+bizarrepedia.com##.spsnrd
+collive.com##.spu-bg
+collive.com##.spu-box
+motorauthority.com##.sq-block
+reneweconomy.com.au##.sq_get_quotes
+ftvlive.com##.sqs-block-image-link
+nutritioninsight.com,packaginginsights.com##.squarblk
+autoaction.com.au,snokido.com##.square
+flvto.biz,flvto.com.mx##.square-area
+getmyuni.com##.squareDiv
+ebay.co.uk,ebay.com,ebay.com.au##.srp-1p__link
+mlsbd.shop##.srzads
+searchenginejournal.com##.sss2_sllo_o2
+aupetitparieur.com##.st85ip42z1v3x
+cnn.com##.stack__ads
+barrons.com##.standard__AdWrapper-sc-14sjre0-6
+geoguessr.com##.start__display-ad
+coingape.com##.stcikyright
+bostonglobe.com##.stick_1200--tablet
+ar15.com##.stickers
+kathmandupost.com##.sticky--bottom
+religionnews.com##.sticky-ad-white-space
+rugbyonslaught.com##.sticky-add
+gr8.cc,psycatgames.com##.sticky-banner
+note.nkmk.me##.sticky-block
+golfmagic.com,kbb.com,thisismoney.co.uk##.sticky-container
+goterriers.com##.sticky-footer
+walletinvestor.com##.sticky-footer-content
+babylonbee.com##.sticky-footer-image
+business2community.com##.sticky-header
+sciencing.com,sportsnet.ca##.sticky-leaderboard-container
+fastcompany.com##.sticky-outer-wrapper
+niagarathisweek.com##.sticky-parent
+foxnews.com##.sticky-pre-header
+foxnews.com##.sticky-pre-header-inner
+theportugalnews.com##.sticky-pub
+almanac.com##.sticky-right-sidebar
+thechinaproject.com##.sticky-spacer
+oilcity.news##.sticky-sponsors-large
+jpost.com##.sticky-top-banner
+litecoin-faucet.com##.sticky-top1
+theblock.co,thekitchn.com##.stickyFooter
+cnet.com##.stickySkyboxSpacing
+fastfoodnutrition.org##.sticky_footer
+pcgamesn.com##.sticky_rail600
+minecraftlist.org##.stickywrapper
+romzie.com##.stksht
+dailyherald.com##.stnContainer
+stationx.net##.stnx-cta-embed
+groceries.asda.com##.sto_format
+dailycoffeenews.com##.story-ad-horizontal
+dailykos.com##.story-banner-ad-placeholder
+bqprime.com##.story-base-template-m__vuukle-ad__g1YBt
+nzherald.co.nz##.story-card--sponsored--headline
+nzherald.co.nz##.story-card--sponsored-text-below
+interest.co.nz##.story-tag-wrapper
+healthshots.com##.storyBlockOne
+24fm.ps,datingscammer.info,kayifamily.net,news365.co.za##.stream-item
+siasat.com##.stream-item-below-post-content
+twitter.com##.stream-item-group-start[label="promoted"]
+coinpedia.org,siasat.com##.stream-item-inline-post
+conservativebrief.com##.stream-item-mag
+how2electronics.com##.stream-item-top
+todayuknews.com##.stream-item-top-wrapper
+hardwaretimes.com,siasat.com##.stream-item-widget
+news365.co.za##.stream-item-widget-content
+coinpedia.org##.stream-title
+stellar.ie##.stuck
+news.stv.tv##.stv-article-gam-slot
+dbltap.com##.style_7z5va1-o_O-style_48hmcm-o_O-style_1ts1q2h
+inyourarea.co.uk##.style_advertisementMark_1Jki4
+inyourarea.co.uk##.style_cardWrapper_ycKf8
+amazonadviser.com,apptrigger.com,arrowheadaddict.com,bamsmackpow.com,fansided.com,gamesided.com,gojoebruin.com,hiddenremote.com,lastnighton.com,mlsmultiplex.com,netflixlife.com,playingfor90.com,stormininnorman.com,winteriscoming.net##.style_k8mr7b-o_O-style_1ts1q2h
+nationalheraldindia.com##.styles-m__dfp__3T0-C
+streamingsites.com##.styles_adverticementBlock__FINvH
+streamingsites.com##.styles_backdrop__8uFQ4
+troypoint.com##.su-box
+cfoc.org##.su-button-style-glass
+buzzfeed.com##.subbuzz-bfp--connatix_video
+proprivacy.com##.summary-footer-cta
+monocle.com##.super-leaderboard
+atalayar.com,express.co.uk,the-express.com##.superbanner
+f1gamesetup.com##.supp-footer-banner
+f1gamesetup.com##.supp-header-banner
+f1gamesetup.com##.supp-sense-desk-large
+f1gamesetup.com##.supp-sense-sidebar-box-large
+f1gamesetup.com##.supp-sidebar-box
+japantimes.co.jp##.supplements-binder
+ocado.com##.supplierBanner
+cdromance.com##.support-us
+radiotoday.co.uk##.supportHideBack
+fstoppers.com##.supportImg
+indiedb.com,moddb.com##.supporter
+hyiptop.net##.supporthome
+techreen.com##.svc_next_content
+timesofmalta.com##.sw-Top
+saltwire.com##.sw-banner
+swimswam.com##.swimswam-acf
+khmertimeskh.com##.swiper-container-horizontal
+khmertimeskh.com##.swiper-wrapper
+presearch.com##.sx-top-bar-products
+patriotnationpress.com##.t2ampmgy
+sbenny.com##.t3-masthead
+emoneyspace.com##.t_a_c
+theanalyst.com##.ta-ad
+ucompares.com##.tablepress-id-46
+posemaniacs.com##.tabletL\:w-\[728px\]
+6abc.com,abcnews.go.com##.taboola
+gizmodo.com,kotaku.com,theonion.com,theroot.com##.taboola-container
+protocol.com##.tag-sponsored
+spectrum.ieee.org##.tag-type-whitepaper
+ghanaweb.com,thefastmode.com##.takeover
+shacknews.com##.takeover-skin
+talkandroid.com##.talka-adlabel
+igg-games.com##.taxonomy-description
+zenger.news##.tb_e2rr695
+bookriot.com##.tbr-promo
+tennis.com##.tc-video-player-iframe
+ghpage.com##.td-a-ad
+antiguanewsroom.com,aptoslife.com,aviacionline.com,bohemian.com,carnewschina.com,constructionreviewonline.com,corvetteblogger.com,cyberparse.co.uk,darkhorizons.com,eastbayexpress.com,eindhovennews.com,ericpetersautos.com,fenuxe.com,gameplayinside.com,gamezone.com,ghpage.com,gilroydispatch.com,gizmochina.com,goodtimes.sc,goonhammer.com,greekreporter.com,greenfieldnews.com,healdsburgtribune.com,indianapolisrecorder.com,industryhit.com,jewishpress.com,kenyan-post.com,kingcityrustler.com,lankanewsweb.net,maltabusinessweekly.com,metrosiliconvalley.com,morganhilltimes.com,musictech.net,nasilemaktech.com,newsnext.live,newstalkflorida.com,nme.com,pacificsun.com,pajaronian.com,pakobserver.net,pipanews.com,pressbanner.com,radioink.com,runnerstribe.com,salinasvalleytribune.com,sanbenito.com,scrolla.africa,sonorannews.com,telugubullet.com,theindependent.co.zw,unlockboot.com,wrestling-online.com,zycrypto.com##.td-a-rec
+zycrypto.com##.td-a-rec-id-content_bottom
+zycrypto.com##.td-a-rec-id-custom_ad_2
+unlockboot.com##.td-ads-home
+techgenyz.com##.td-adspot-title
+bizasialive.com##.td-all-devices
+americanindependent.com##.td-banner-bg
+brila.net,cgmagonline.com,cycling.today,gayexpress.co.nz,theyeshivaworld.com##.td-banner-wrap-full
+boxthislap.org,ticgn.com,wtf1.co.uk##.td-footer-wrapper
+techyv.com##.td-header-header
+healthyceleb.com##.td-header-header-full
+androidcommunity.com##.td-header-rec-wrap
+5pillarsuk.com,babeltechreviews.com,sonorannews.com,techviral.net,thestonedsociety.com,weekendspecial.co.za##.td-header-sp-recs
+runnerstribe.com##.td-post-content a[href^="https://tarkine.com/"]
+antiguanewsroom.com,gadgetstouse.com##.td-ss-main-sidebar
+techgenyz.com##.td_block_single_image
+capsulenz.com,dexdotexe.com,ssbcrack.com,thecoinrise.com##.td_spot_img_all
+arynews.tv##.tdi_103
+techgenyz.com##.tdi_114
+pakobserver.net##.tdi_121
+pakobserver.net##.tdi_124
+carnewschina.com##.tdi_162
+greekreporter.com##.tdi_18
+techgenyz.com##.tdi_185
+based-politics.com##.tdi_30
+teslaoracle.com##.tdi_48
+coinedition.com##.tdi_59
+ghpage.com##.tdi_63
+finalweapon.net##.tdi_87
+coinedition.com##.tdi_95
+coinedition.com##.tdm-inline-image-wrap
+lankanewsweb.net##.tdm_block_inline_image
+hltv.org##.team-player-profile-below-trophies-placement
+who.is##.teaser-bar
+liverpoolecho.co.uk,manchestereveningnews.co.uk##.teaser[data-tmdatatrack-source="SHOP_WINDOW"]
+techopedia.com##.techo-adlabel
+technology.org##.techorg-banner
+sporcle.com##.temp-unit
+macrumors.com##.tertiary
+ericpetersautos.com##.text-109
+hackread.com##.text-61
+vuejs.org##.text-ad
+how2shout.com##.text-ads
+y2down.cc##.text-center > a[href="https://loader.to/loader.apk"]
+skylinewebcams.com##.text-center.cam-light
+charlieintel.com,dexerto.com##.text-center.italic
+royalroad.com##.text-center.light
+ascii-code.com##.text-center.mb-3
+upi.com##.text-center.mt-5
+thegradcafe.com##.text-center.py-3
+whatismyisp.com##.text-gray-100
+businessonhome.com##.text-info
+mastercomfig.com##.text-start[style^="background:"]
+geeksforgeeks.org##.textBasedMannualAds_2
+paste.fo##.texta
+putlockers.do##.textb
+sciencedaily.com##.textrule
+evilbeetgossip.com,kyis.com,thesportsanimal.com,wild1049hd.com,wky930am.com##.textwidget
+tftcentral.co.uk##.tftce-adlabel
+thejakartapost.com##.the-brief
+vaughn.live##.theMvnAbvsLowerThird
+steelersdepot.com##.theiaStickySidebar
+gearspace.com##.thread__sidebar-ad-container
+aardvark.co.nz##.tinyprint
+blendernation.com##.title
+cryptocompare.com##.title-hero
+kastown.com##.tkyrwhgued
+onlinecourse24.com##.tl-topromote
+themighty.com##.tm-ads
+trademe.co.nz##.tm-display-ad__wrapper
+nybooks.com##.toast-cta
+spy.com##.todays-top-deals-widget
+last.fm##.tonefuze
+euobserver.com,medicinehatnews.com##.top
+charlieintel.com,dexerto.com##.top-0.justify-center
+mashable.com##.top-0.sticky > div
+charlieintel.com,dexerto.com##.top-10
+cartoq.com##.top-a
+freedomleaf.com##.top-ab
+cartoq.com##.top-ad-blank-div
+forbes.com##.top-ad-container
+artistdirect.com##.top-add
+n4g.com,techspy.com##.top-ads-container-outer
+jamieoliver.com##.top-avocado
+advfn.com##.top-ban-wrapper
+automotive-fleet.com,businessfleet.com,cfl.ca,fleetfinancials.com,forbesindia.com,government-fleet.com,howsecureismypassword.net,ncaa.com,rigzone.com,schoolbusfleet.com,wltreport.com##.top-banner
+smartasset.com##.top-banner-ctr
+gptoday.net##.top-banner-leaderboard
+numuki.com##.top-banner-responsive-wrapper
+gamewatcher.com##.top-banners-wrapper
+papermag.com##.top-billboard__below-title-ad
+livescores.biz##.top-bk
+blockchair.com##.top-buttons-wrap
+procyclingstats.com##.top-cont
+foodrenegade.com##.top-cta
+forbes.com##.top-ed-placeholder
+forexlive.com##.top-forex-brokers__wrapper
+theguardian.com##.top-fronts-banner-ad-container
+debka.com##.top-full-width-sidebar
+reverso.net##.top-horizontal
+india.com##.top-horizontal-banner
+spectrum.ieee.org##.top-leader-container
+1071thepeak.com,gpfans.com,thedailystar.net##.top-leaderboard
+sportingnews.com##.top-mpu-container
+webmd.com##.top-picks
+speedtest.net##.top-placeholder
+financemagnates.com,forexlive.com##.top-side-unit
+cryptoslate.com##.top-sticky
+playbuzz.com##.top-stickyplayer-container
+news18.com##.topAdd
+ganjingworld.com##.topAdsSection_wrapper__cgH4h
+ada.org,globes.co.il,techcentral.ie,texteditor.co,versus.com##.topBanner
+pcworld.com##.topDeals
+tech.hindustantimes.com##.topGadgetsAppend
+tutorviacomputer.com##.topMargin15
+click2houston.com,clickondetroit.com,clickorlando.com,ksat.com,local10.com,news4jax.com##.topWrapper
+giveawayoftheday.com,informer.com##.top_ab
+theepochtimes.com##.top_ad
+asmag.com,tiresandparts.net##.top_banner
+joebucsfan.com##.top_banner_cont
+archaeology.org##.top_black
+justjared.com,justjaredjr.com##.top_rail_shell
+allnigerianrecipes.com,antimusic.com,roadtests.com##.topad
+eurointegration.com.ua##.topban_r
+axisbank.com##.topbandBg_New
+algemeiner.com,allmonitors24.com,streamable.com##.topbanner
+drugs.com##.topbanner-wrap
+videogamemods.com##.topbanners
+papermag.com##.topbarplaceholder
+belfastlive.co.uk,birminghammail.co.uk,bristolpost.co.uk,cambridge-news.co.uk,cheshire-live.co.uk,chroniclelive.co.uk,cornwalllive.com,coventrytelegraph.net,dailypost.co.uk,derbytelegraph.co.uk,devonlive.com,dublinlive.ie,edinburghlive.co.uk,examinerlive.co.uk,getsurrey.co.uk,glasgowlive.co.uk,gloucestershirelive.co.uk,hertfordshiremercury.co.uk,kentlive.news,leeds-live.co.uk,leicestermercury.co.uk,lincolnshirelive.co.uk,manchestereveningnews.co.uk,mylondon.news,nottinghampost.com,somersetlive.co.uk,stokesentinel.co.uk,walesonline.co.uk##.topbox-cls-placeholder
+blabber.buzz##.topfeed
+drivespark.com##.topsection div[style^="float"]
+cambridge.org,ldoceonline.com##.topslot-container
+collinsdictionary.com##.topslot_container
+startpage.com##.total-adblock-desktop
+moviemistakes.com##.tower
+towleroad.com##.towletarget
+utahgunexchange.com##.tp-revslider-mainul
+steamanalyst.com##.tpbcontainerr
+techreen.com##.tr-block-header-ad
+techreen.com##.tr-block-label
+torbay.gov.uk##.track
+futurism.com##.tracking-wider
+futurism.com##.tracking-widest
+bincodes.com##.transferwise
+sun-sentinel.com##.trb_sf_hl
+coinmarketcap.com##.trending-sponsored
+livemint.com##.trendingSimilarHeight
+naturalblaze.com##.trfkye8nxr
+thumbsnap.com##.ts-blurb-wrap
+yidio.com##.tt
+telegraphindia.com##.ttdadbox310
+venturebeat.com##.tude-cw-wrap
+tutorialink.com##.tutorialink-ad1
+tutorialink.com##.tutorialink-ad2
+tutorialink.com##.tutorialink-ad3
+tutorialink.com##.tutorialink-ad4
+roseindia.net##.tutorialsstaticdata
+tvtropes.org##.tvtropes-ad-unit
+drivencarguide.co.nz##.tw-bg-gray-200
+todayonline.com##.tw-flex-shrink-2
+drivencarguide.co.nz##.tw-min-h-\[18\.75rem\]
+karnalguide.com##.two_third > .push20
+theroar.com.au##.u-d-block
+patriotnationpress.com##.u8s470ovl
+tumblr.com##.uOyjG
+ubergizmo.com##.ubergizmo-dfp-ad
+unlockboot.com##.ubhome-banner
+darko.audio##.ubm_widget
+unlockboot.com##.ubtopheadads
+momjunction.com##.ubvideoad
+barrons.com,wsj.com##.uds-ad-container
+grammar.yourdictionary.com##.ui-advertisement
+m.rugbynetwork.net##.ui-footer-fixed
+businessday.ng##.uiazojl
+nullpress.net##.uinyk-link
+zpaste.net##.uk-animation-shake
+telegraphindia.com##.uk-background-muted
+doodrive.com##.uk-margin > [href] > img
+igg-games.com##.uk-panel.widget-text
+softarchive.is##.un-link
+pixhost.to##.under-image
+hidefninja.com##.underads
+inquinte.ca##.unit-block
+bobvila.com##.unit-header-container
+sciencedaily.com##.unit1
+sciencedaily.com##.unit2
+gpucheck.com##.unitBox
+thegradcafe.com##.upcoming-events
+pcgamingwiki.com##.upcoming-releases.home-card:first-child
+filepuma.com##.update_software
+letterboxd.com##.upgrade-kicker
+upworthy.com##.upworthy_infinite_scroll_ad
+upworthy.com##.upworthy_infinte_scroll_outer_wrap
+wbur.org##.uw--rec
+wbur.org##.uw--rectangle
+wbur.org##.uw-label--bottom
+vervetimes.com##.uyj-before-header
+militarywatchmagazine.com##.v-card--link
+yesflicks.com##.v-detail-xps
+militarywatchmagazine.com##.v-size--x-small.theme--light
+zillow.com##.vPTHT
+osuskins.net##.vad-container
+lasvegassun.com##.varWrapper
+businessday.ng##.vc_custom_1627979893469
+progamerage.com##.vc_separator
+battlefordsnow.com,cfjctoday.com,everythinggp.com,filmdaily.co,huskiefan.ca,larongenow.com,meadowlakenow.com,nanaimonewsnow.com,northeastnow.com,panow.com,rdnewsnow.com,sasknow.com,vernonmatters.ca##.vc_single_image-wrapper
+itmunch.com##.vc_slide
+ktm2day.com##.vc_wp_text
+ggrecon.com##.venatus-block
+mobafire.com##.venatus-responsive-ad
+theloadout.com##.venatus_ad
+fox10phoenix.com,fox13news.com,fox26houston.com,fox29.com,fox2detroit.com,fox32chicago.com,fox35orlando.com,fox4news.com,fox5atlanta.com,fox5dc.com,fox5ny.com,fox6now.com,fox7austin.com,fox9.com,foxbusiness.com,foxla.com,foxnews.com,ktvu.com,q13fox.com,wogx.com##.vendor-unit
+cryptonews.net##.vert-public
+radiocity.in##.vertical-big-add
+radiocity.in##.vertical-small-add
+tetris.com##.verticalAx
+packaginginsights.com##.verticlblk
+thenewdaily.com.au##.vf-promo
+videogameschronicle.com##.vgc-productsblock
+bestlifeonline.com,eatthis.com,hellogiggles.com##.vi-video-wrapper
+express.co.uk##.viafoura-standalone-mpu
+vice.com##.vice-ad__container
+justthenews.com##.video--container
+songkick.com##.video-ad-wrapper
+forexlive.com##.video-banner__wrapper
+cyclinguptodate.com##.video-container
+gbnews.com##.video-inbody
+emptycharacter.com##.video-js
+forbes.com,nasdaq.com##.video-placeholder
+motortrend.com##.video-player-cls
+thepinknews.com##.video-player__container
+flicksmore.com##.video_banner
+guru99.com##.videocontentmobile
+teachit.co.uk##.view-advertising-display
+koreabiomed.com##.view-aside
+vigilantcitizen.com##.vigil-leaderboard-article
+vigilantcitizen.com##.vigil-leaderboard-home
+variety.com##.vip-banner
+pokernews.com##.virgutis
+coincheckup.com##.visible-xs > .ng-isolate-scope
+visualcapitalist.com##.visua-target
+roosterteeth.com##.vjs-marker
+ginx.tv,op.gg,theloadout.com##.vm-placement
+c19-worldnews.com##.vmagazine-medium-rectangle-ad
+gosunoob.com##.vntsvideocontainer
+valueresearchonline.com##.vr-adv-container
+trueachievements.com##.vr-auction
+hentaihaven.xxx##.vrav_a_pc
+fastpic.ru##.vright
+vaughn.live##.vs_v9_LTabvsLowerThirdWrapper
+vaughn.live##.vs_v9_LTabvsLower_beta
+vsbattles.com##.vsb_ad
+vsbattles.com##.vsb_sticky
+notateslaapp.com##.vtwjhpktrbfmw
+wral.com##.vw3Klj
+androidpolice.com##.w-pencil-banner
+wsj.com##.w27771
+userscript.zone##.w300
+swimcompetitive.com##.waldo-display-unit
+wetransfer.com##.wallpaper
+goodfon.com##.wallpapers__banner240
+dailymail.co.uk,thisismoney.co.uk##.watermark
+watson.ch##.watson-ad
+wbal.com##.wbal-banner
+technclub.com##.wbyqkx-container
+wccftech.com##.wccf_video_tag
+glamourvanity.com##.wdt_gads
+searchencrypt.com##.web-result.unloaded.sr
+probuilds.net##.welcome-bnr
+taskcoach.org##.well
+gearlive.com##.wellvert
+cpu-monkey.com,cpu-panda.com,gpu-monkey.com##.werb
+best-faucets.com,transfermarkt.co.uk,transfermarkt.com##.werbung
+transfermarkt.co.uk##.werbung-skyscraper
+transfermarkt.co.uk,transfermarkt.com##.werbung-skyscraper-container
+tametimes.co.za##.white-background
+gadgethacks.com,reality.news,wonderhowto.com##.whtaph
+pch.com##.wide_banner
+japantoday.com##.widget--animated
+headforpoints.com##.widget--aside.widget
+japantoday.com##.widget--jobs
+fijisun.com.fj##.widget-1
+fijisun.com.fj##.widget-3
+kyivpost.com##.widget-300-250
+wikikeep.com##.widget-area
+superdeluxeedition.com##.widget-bg-image__deal-alert
+cinemaexpress.com##.widget-container-133
+thebeet.com##.widget-promotion
+screencrush.com##.widget-widget_third_party_content
+adexchanger.com##.widget_ai_ad_widget
+gsmserver.com##.widget_banner-container_three-horizontal
+discussingfilm.net,goonhammer.com,joemygod.com,shtfplan.com,thestrongtraveller.com,usmagazine.com##.widget_block
+wplift.com##.widget_bsa
+techweekmag.com##.widget_codewidget
+4sysops.com,9to5linux.com,backthetruckup.com,catcountry941.com,cnx-software.com,corvetteblogger.com,dailyveracity.com,fastestvpns.com,gamingonphone.com,gizmochina.com,guides.wp-bullet.com,hardwaretimes.com,macsources.com,metalsucks.net,mmoculture.com,nasaspaceflight.com,openloading.com,prepperwebsite.com,quickanswer.blog,sashares.co.za,scienceabc.com,techdows.com,techjuice.pk,thecinemaholic.com,thinkcivics.com,tooxclusive.com,torrentfreak.com,trackalerts.com,trendingpoliticsnews.com##.widget_custom_html
+winaero.com##.widget_custom_html.textwidget.widget
+domaingang.com##.widget_execphp
+bestlifeonline.com,hellogiggles.com##.widget_gm_karmaadunit_widget
+faroutmagazine.co.uk##.widget_grv_mpu_widget
+theiphoneappreview.com##.widget_links
+247media.com.ng,appleworld.today,athleticsillustrated.com,captainaltcoin.com,closerweekly.com,cozyberries.com,dbknews.com,deshdoaba.com,foreverconscious.com,glitched.online,granitegrok.com,intouchweekly.com,kashmirreader.com,kkfm.com,lifeandstylemag.com,londonnewsonline.co.uk,marqueesportsnetwork.com,mensjournal.com,nikonrumors.com,patriotfetch.com,pctechmag.com,prajwaldesai.com,raspians.com,robinhoodnews.com,rok.guide,rsbnetwork.com,showbiz411.com,sportsspectrum.com,stacyknows.com,theoverclocker.com,ubuntu101.co.za,wakingtimes.com,washingtonmonthly.com,webscrypto.com,wgow.com,wgowam.com,wlevradio.com##.widget_media_image
+cracked-games.org##.widget_metaslider_widget
+nypost.com##.widget_nypost_dfp_ad_widget
+nypost.com##.widget_nypost_vivid_concerts_widget
+twistedsifter.com##.widget_sifter_ad_bigbox_widget
+985kissfm.net,bxr.com,catcountry951.com,nashfm1065.com,power923.com,wncv.com,wskz.com##.widget_simpleimage
+optimyz.com##.widget_smartslider3
+permanentstyle.com##.widget_sow-advertisements
+acprimetime.com,androidpctv.com,brigantinenow.com,downbeachbuzz.com##.widget_sp_image
+screenbinge.com,streamingrant.com##.widget_sp_image-image-link
+gamertweak.com##.widget_srlzycxh
+captainaltcoin.com,dailyboulder.com,lostintechnology.com,ripplecoinnews.com,utahgunexchange.com,webkinznewz.ganzworld.com##.widget_text
+nypost.com##.widget_text.no-mobile.box
+tutorialink.com##.widget_ti_add_widget
+carpeludum.com##.widget_widget_catchevolution_adwidget
+techpout.com##.widget_xyz_insert_php_widget
+ign.com##.wiki-bobble
+wethegeek.com##.win
+dailywire.com##.wisepops-block-image
+gg.deals##.with-banner
+windowsloop.com##.wl-prakatana
+cryptopolitan.com##.wordp-leaderboard
+cryptopolitan.com##.wordp-siderbar-new-theme
+warontherocks.com##.wotr_top_lbjspot
+guitaradvise.com##.wp-block-affiliate-plugin-lasso
+gamepur.com##.wp-block-dotesports-affiliate-button
+dotesports.com##.wp-block-gamurs-ad
+gamingskool.com##.wp-block-group-is-layout-constrained
+cryptofeeds.news,defence-industry.eu,gamenguides.com,houstonherald.com,millennial-grind.com,teslaoracle.com##.wp-block-image
+lowcarbtips.org##.wp-block-image.size-full
+livability.com##.wp-block-jci-ad-area-two
+bangordailynews.com,michigandaily.com##.wp-block-newspack-blocks-wp-block-newspack-ads-blocks-ad-unit
+pedestrian.tv##.wp-block-ped-theme-blocks-pedestrian-recent-jobs
+hyperallergic.com,repeatreplay.com,steamdeckhq.com##.wp-block-spacer
+thewrap.com##.wp-block-the-wrap-ad
+c19-worldnews.com##.wp-caption
+strangesounds.org##.wp-image-281312
+hack-sat.com##.wp-image-31131
+rvguide.com##.wp-image-3611
+kiryuu.id##.wp-image-465340
+thecricketlounge.com##.wp-image-88221
+appuals.com##.wp-timed-p-content
+bevmalta.org,chromoscience.com,conandaily.com,hawaiireporter.com,michaelsavage.com##.wpa
+techyv.com##.wpb_raw_code
+premiumtimesng.com##.wpb_raw_code > .wpb_wrapper
+nationalfile.com##.wpb_wrapper > p
+coralspringstalk.com##.wpbdp-listings-widget-list
+sashares.co.za##.wppopups-whole
+theregister.com##.wptl
+memeburn.com,ventureburn.com##.wrapper--grey
+hotnewhiphop.com##.wrapper-Desktop_Header
+paultan.org##.wrapper-footer
+tftactics.gg##.wrapper-lb1
+webtoolhub.com##.wth_zad_text
+forums.ventoy.net##.wwads-cn
+waterfordwhispersnews.com##.wwn-ad-unit
+geekflare.com##.x-article-818cc9d4
+mysanantonio.com,sfgate.com##.x100.bg-gray100
+beforeitsnews.com##.x1x2prx2lbnm
+aupetitparieur.com##.x7zry3pb
+mcpmag.com##.xContent
+drivehub.in,indidrive.in,metamoviez.xyz##.xc449bad4854773ff
+theseotools.net##.xd_top_box
+livejournal.com##.xhtml_banner
+dallasnews.com##.xl_right-rail
+naturalblaze.com##.xtfaoba0u1
+seattlepi.com##.y100.package
+mamieastuce.com##.y288crhb
+coin360.com##.y49o7q
+titantv.com##.yRDh6z2_d0DkfsT3
+247mirror.com,365economist.com,bridewired.com,dailybee.com,drgraduate.com,historictalk.com,mvpmode.com,parentmood.com,theecofeed.com,thefunpost.com,visualchase.com,wackojaco.com##.ya-slot
+pravda.ru##.yaRtbBlock
+yardbarker.com##.yb-card-ad
+yardbarker.com##.yb-card-out
+gamereactor.asia,gamereactor.cn,gamereactor.cz,gamereactor.de,gamereactor.dk,gamereactor.es,gamereactor.eu,gamereactor.fi,gamereactor.fr,gamereactor.it,gamereactor.jp,gamereactor.kr,gamereactor.nl,gamereactor.no,gamereactor.pl,gamereactor.pt,gamereactor.se##.yks300
+desmoinesregister.com##.ymHyVK__ymHyVK
+shockwave.com##.ympb_target_banner
+saltwire.com##.youtube_article_ad
+yellowpages.co.za##.yp-object-ad-modal
+buzzly.art##.z-10.w-max
+howstuffworks.com##.z-999
+tekdeeps.com##.zAzfDBzdxq3
+ign.com,mashable.com,pcmag.com##.zad
+windows101tricks.com##.zanui-container
+antimusic.com##.zerg
+bellinghamherald.com,bnd.com,bradenton.com,centredaily.com,charlotteobserver.com,elnuevoherald.com,fresnobee.com,heraldonline.com,heraldsun.com,idahostatesman.com,islandpacket.com,kansas.com,kansascity.com,kentucky.com,ledger-enquirer.com,macon.com,mcclatchydc.com,mercedsunstar.com,miamiherald.com,modbee.com,myrtlebeachonline.com,newsobserver.com,sacbee.com,sanluisobispo.com,star-telegram.com,sunherald.com,thenewstribune.com,theolympian.com,thestate.com,tri-cityherald.com##.zone
+bellinghamherald.com##.zone-el
+cnn.com##.zone__ads
+hancinema.net##[alt="Advertisement"]
+exchangerates.org.uk##[alt="banner"]
+urbandictionary.com##[aria-label*="Advertise"]
+gab.com##[aria-label*="Sponsored:"]
+thepointsguy.com##[aria-label="Advertisement"]
+wsj.com##[aria-label="Sponsored Offers"]
+nbcsports.com##[bsp-reverse-scroll-ad]
+everydaykoala.com,playjunkie.com##[class*="__adspot-title-container"]
+everydaykoala.com,playjunkie.com##[class*="__adv-block"]
+barandbench.com##[class*="ad-slot"]
+usnews.com##[class*="ad-spacer"]
+beincrypto.com,bitcoinist.com,captainaltcoin.com,coincodex.com,coinpaprika.com,coinspeaker.com,crypto-news-flash.com,cryptonews.com,cryptonewsz.com,cryptopolitan.com,insidebitcoins.com,philnews.ph,techreport.com##[class*="clickout-"]
+smallseotools.com##[class*="gram"]
+levels.fyi##[class*="submissions-table-promo_promoContainer"]
+dictionary.com##[class^="AdHorizontal"]
+alternativeto.net##[class^="AdsenseAd"]
+thesouthafrican.com##[class^="Advertisement_"]
+games.washingtonpost.com##[class^="DisplayAd_"]
+bloomberg.com##[class^="FullWidthAd_"]
+thesouthafrican.com##[class^="SiteHeader__AdvertisementWrapper-"]
+petco.com##[class^="StaticBannerAd"]
+economist.com##[class^="adComponent"]
+uploader.link##[class^="ads"]
+champion.gg##[class^="aside-content-column"]
+flipline.com##[class^="box_grey"]
+dallasnews.com##[class^="dmnc_features-ads-"]
+romhustler.org##[class^="leaderboard_ad"]
+noqreport.com##[class^="noqre-"]
+reuters.com##[class^="primary-video__container_"]
+nofilmschool.com##[class^="rblad-nfs_content"]
+thetimes.co.uk##[class^="responsive__InlineAdWrapper-"]
+cmswire.com##[class^="styles_ad-block"]
+cmswire.com##[class^="styles_article__text-ad"]
+cmswire.com##[class^="styles_article__top-ad-wrapper"]
+hancinema.net##[class^="wmls_"]
+torlock.com##[class^="wrn"]
+mydramalist.com##[class^="zrsx_"]
+flatpanelshd.com##[data-aa-adunit]
+dribbble.com##[data-ad-data*="ad_link"]
+greatist.com,healthline.com,medicalnewstoday.com,psychcentral.com##[data-ad]
+gamelevate.com##[data-adpath]
+builtbybit.com##[data-advertisement-id]
+czechtheworld.com##[data-affiliate]
+walmart.ca##[data-automation="flipkartDisplayAds"]
+jobstreet.com.sg##[data-automation="homepage-banner-ads"]
+jobstreet.com.sg##[data-automation="homepage-marketing-banner-ads"]
+newshub.co.nz##[data-belt-widget]
+costco.ca##[data-bi-placement="Criteo_Product_Display_Page_Espot"]
+chron.com,seattlepi.com,sfchronicle.com,timesunion.com##[data-block-type="ad"]
+theblaze.com##[data-category="SPONSORED"]
+gab.com##[data-comment="gab-ad-comment"]
+curbed.com##[data-concert="prelude"]
+axios.com##[data-cy="injected-promo"]
+greatist.com,healthline.com,medicalnewstoday.com,psychcentral.com##[data-empty]
+ginx.tv##[data-ez-ph-id]
+news.sky.com##[data-format="leaderboard"]
+tvzoneuk.com##[data-hook="HtmlComponent"]
+jeffdornik.com##[data-image-info]
+phoneia.com##[data-index]
+duckduckgo.com,duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion##[data-layout="ad"]
+independent.co.uk##[data-mpu1]
+goal.com##[data-name="ad-leaderboard"]
+polygon.com##[data-native-ad-id^="container"]
+namepros.com##[data-np-ga-event="ad"]
+greenbaycrimereports.com##[data-original-width="820"]
+jeffdornik.com##[data-pin-url]
+extremetech.com##[data-pogo="sidebar"]
+washingtonpost.com##[data-qa="article-body-ad"]
+washingtonpost.com##[data-qa="right-rail-ad"]
+ginx.tv##[data-ref]
+euroweeklynews.com##[data-revive-zoneid]
+disqus.com##[data-role="ad-content"]
+washingtonpost.com##[data-sc-c="adslot"]
+trakt.tv##[data-snigel-id]
+amp.theguardian.com##[data-sort-time="1"]
+vrbo.com##[data-stid="meso-ad"]
+cheaptickets.com,ebookers.com,expedia.com,hotels.com,orbitz.com,travelocity.com,wotif.com##[data-stid="meso-similar-properties-carousel"]
+coingecko.com##[data-target="ads.banner"]
+mail.yahoo.com##[data-test-id="gam-iframe"]
+woot.com##[data-test-ui^="advertisementLeaderboard"]
+target.com##[data-test="featuredProducts"]
+zillow.com##[data-test="search-list-first-ad"]
+target.com##[data-test="sponsored-text"]
+reuters.com##[data-testid="ResponsiveAdSlot"]
+nytimes.com,nytimesn7cgmftshazwhfgzm37qxb44r64ytbb2dj3x62d2lljsciiyd.onion##[data-testid="StandardAd"]
+coles.com.au##[data-testid="ad"]
+gozofinder.com##[data-testid="advert"]
+coles.com.au##[data-testid="banner-container-desktop"]
+sbs.com.au##[data-testid="hbs-widget-skeleton"]
+forbes.com##[data-testid="locked-top-ad-container"]
+imdb.com##[data-testid="media-sheet__attr-banner"]
+you.com##[data-testid="microsoft-ads"]
+washingtonpost.com##[data-testid="placeholder-box"]
+abcnews.go.com##[data-testid="prism-static-embed"]
+abcnews.go.com##[data-testid="prism-sticky-ad"]
+money.com##[data-trk-company="rocket-mortgage-review"]
+goal.com##[data-type="AdComponent"]
+search.brave.com##[data-type="ad"]
+gadgetsnow.com##[data-type="mtf"]
+axios.com##[data-vars-category="sidebar_promo"]
+forum.ragezone.com##[data-widget-key="widget_partners"]
+petco.com##[data-widget-type="citrus-ad"]
+petco.com##[data-widget-type="citrus-banner"]
+theautopian.com##[data-widget_type="html.default"]
+cnn.com##[data-zone-label="Paid Partner Content"]
+faroutmagazine.co.uk,hitc.com##[dock="#primis-dock-slot"]
+dailynews.lk,german-way.com,issuu.com,londonnewsonline.co.uk,power987.co.za,qsaltlake.com,tfetimes.com##[height="250"]
+ciiradio.com,hapskorea.com,issuu.com,thetruthwins.com##[height="300"]
+cryptofeeds.news,issuu.com,newswireni.com,power987.co.za##[height="600"]
+bankbazaar.com##[height="80"]
+airplaydirect.com,bankbazaar.com,cultofcalcio.com,dailynews.lk,economicconfidential.com,issuu.com,newzimbabwe.com,opednews.com,roadtester.com.au,runechat.com,tfetimes.com,therainbowtimesmass.com##[height="90"]
+photopea.com##[href*=".ivank.net"]
+complaintsingapore.com##[href*="/adv.php"]
+utahgunexchange.com##[href*="/click.track"]
+libtorrent.org,mailgen.biz,speedcheck.org,torrentfreak.com,tubeoffline.com##[href*="://go.nordvpn.net/"]
+gamecopyworld.com,gamecopyworld.eu##[href*="@"]
+steroid.com##[href*="anabolics.com"]
+1337x.to,9jaflaver.com,alaskapublic.org,allkeyshop.com,analyticsinsight.net,ancient-origins.net,animeidhentai.com,arabtimesonline.com,asura.gg,biblestudytools.com,bitcoinworld.co.in,cnx-software.com,coingolive.com,cryptoslate.com,csstats.gg,digitallydownloaded.net,domaingang.com,downturk.net,fresherslive.com,gizmochina.com,glitched.online,glodls.to,guidedhacking.com,hackernoon.com,hlstester.com,indishare.org,kaas.am,katfile.com,khmertimeskh.com,linkhub.icu,litecoin-faucet.com,mbauniverse.com,mediaite.com,mgnetu.com,myreadingmanga.info,newsfirst.lk,nexter.org,owaahh.com,parkablogs.com,pastemytxt.com,premiumtimesng.com,railcolornews.com,resultuniraj.co.in,retail.org.nz,ripplesnigeria.com,rtvonline.com,ryuugames.com,sofascore.com,thinknews.com.ng,timesuganda.com,totemtattoo.com,trancentral.tv,vumafm.co.za,yugatech.com,zmescience.com##[href*="bit.ly/"]
+beforeitsnews.com,in5d.com,mytruthnews.com,thetruedefender.com##[href*="hop.clickbank.net"]
+pastpapers.co##[href*="https://amzn.to/"]
+eevblog.com##[href*="https://jlcpcb.com/"]
+eevblog.com##[href*="https://saving.em.keysight.com/"]
+audiobookbay.is##[href="/ddldatr"]
+yesflicks.com##[href="/location/amazon"]
+1337x.to##[href="/netflixPromo728.php"]
+2pass.co.uk##[href="bicycle-insurance.htm"]
+toumpano.net##[href="http://roz-tilefona.xbomb.net/"]
+warfarehistorynetwork.com##[href="http://www.bktravel.com/"]
+daijiworld.com##[href="http://www.expertclasses.org/"]
+gametracker.com##[href="http://www.gameservers.com"]
+allnewspipeline.com##[href="http://www.sqmetals.com/"]
+dafontfree.io##[href="https://1.envato.market/c/"]
+bitcoiner.tv##[href="https://bitcoiner.tv/buy-btc.php"]
+spys.one##[href="https://buy.fineproxy.org/"]
+sqlfiddle.com##[href="https://entityframework-extensions.net/"]
+whatsmyreferer.com##[href="https://fakethereferer.com"]
+freedomfirstnetwork.com##[href="https://freedomfirstcoffee.com"]
+summit.news##[href="https://infowarsstore.com/"]
+hightimes.com##[href="https://leafwell.com"]
+anitube.biz##[href="https://otpokemon.com/animes/"]
+conservativeplaybook.com##[href="https://ourgoldguy.com/contact/"]
+davidwalsh.name##[href="https://requestmetrics.com/"]
+pastpapers.co##[href="https://ringdad.com"]
+unknowncheats.me##[href="https://securecheats.com/"]
+slaynews.com##[href="https://slaynews.com/ads/"]
+complaintsingapore.com##[href="https://thechillipadi.com/"]
+walletinvestor.com##[href="https://walletinvestor.com/u/gnrATE"]
+semiconductor-today.com##[href="https://www.appliedenergysystems.com/stakes/"]
+nettv4u.com##[href="https://www.badshahcric.net/"]
+mhktricks.org##[href="https://www.deepbrid.com/"]
+barrettsportsmedia.com##[href="https://www.jimcutler.com"]
+10minutemail.com##[href="https://www.remove-metadata.com"]
+jagoroniya.com##[href="https://www.virtuanic.com/"]
+cryptfaucet.com##[href="javascript:hidepromolll();"]
+cq-esports.com##[href][target*="blank"]
+kemono.su##[href^="//a.adtng.com/get/"]
+shroomery.org##[href^="//www.shroomery.org/ads/"]
+unogs.com##[href^="/ad/"]
+royalroad.com##[href^="/advertising/redirect"]
+torrentgalaxy.to##[href^="/bub.php"]
+discord.me##[href^="/cr/"]
+everest.picturedent.org##[href^="/dent.php"]
+ar15.com##[href^="/forums/transfer.html"]
+modrinth.com##[href^="http://bisecthosting.com/"]
+radiotoday.co.uk##[href^="http://go.radiotoday.co.uk/"]
+pooletown.co.uk,tossinggames.com,urbanartassociation.com##[href^="http://redirect.viglink.com"]
+eevblog.com##[href^="http://s.click.aliexpress.com/"]
+uselessdaily.com##[href^="http://www.ezoic.com/"]
+ttgmedia.com##[href^="http://www.ttgmedia.com/CreativeAgent.cfm"]
+open.spotify.com##[href^="https://adclick.g.doubleclick.net/"]
+topfiveforex.com##[href^="https://affiliate.iqoption.com/"]
+orschlurch.net,tetris.com##[href^="https://amzn.to/"]
+lingojam.com##[href^="https://animefilter.com"]
+aitextpromptgenerator.com##[href^="https://app.getsitepop.com/"]
+wiki.gg##[href^="https://app.wiki.gg/showcase/"]
+topfiveforex.com##[href^="https://betfury.io/"]
+seganerds.com##[href^="https://betway.com/"]
+greatandhra.com,kitploit.com##[href^="https://bit.ly/"] img
+coingolive.com##[href^="https://bitpreco.com/"]
+wplocker.com##[href^="https://bluehost.sjv.io/"]
+dappradar.com##[href^="https://bogged.finance/"]
+analyticsindiamag.com##[href^="https://business.louisville.edu/"]
+gelbooru.com##[href^="https://buymyshit.moneygrubbingwhore.com/"]
+mrchecker.net##[href^="https://cardingmentor.org"]
+50gameslike.com,highdemandskills.com,yumyumnews.com##[href^="https://click.linksynergy.com/"]
+wccftech.com##[href^="https://cutt.ly/"]
+ahaan.co.uk,emailnator.com,myip.is,scrolller.com##[href^="https://go.nordvpn.net/"]
+imagetwist.com##[href^="https://imagetwist.com/pxt/"]
+topfiveforex.com##[href^="https://iqoption.com/"]
+theburningplatform.com##[href^="https://libertasbella.com/collections/"]
+topfiveforex.com##[href^="https://luckyfish.io/"]
+abovetopsecret.com,thelibertydaily.com##[href^="https://mypatriotsupply.com/"]
+topfiveforex.com##[href^="https://olymptrade.com/"]
+topfiveforex.com##[href^="https://omibet.io/"]
+nyaa.land##[href^="https://privateiptvaccess.com/"]
+unknowncheats.me##[href^="https://proxy-seller.com/"]
+cryptonews.com##[href^="https://rapi.cryptonews.com/"]
+tcbscans.com##[href^="https://readcbr.com/"]
+rebelnews.com##[href^="https://rebelne.ws/"]
+crypto-news-flash.com##[href^="https://refpa9063395.top/"]
+everybithelps.io##[href^="https://shop.ledger.com/"]
+all-free-download.com##[href^="https://shutterstock.7eer.net/c/"] img
+yts.mx##[href^="https://stARtgAMinG.net/"]
+terraria.wiki.gg##[href^="https://store.steampowered.com/app/"]
+brighteon.com##[href^="https://support.brighteon.com/"]
+thehackernews.com##[href^="https://thn.news/"]
+beforeitsnews.com,highshortinterest.com##[href^="https://tinyurl.com/"]
+tripsonabbeyroad.com##[href^="https://tp.media/"]
+minidl.org##[href^="https://uploadgig.com/premium/index/"]
+mailshub.in##[href^="https://www.amazon.in/"]
+workhouses.org.uk##[href^="https://www.awin1.com"]
+businessonhome.com##[href^="https://www.binance.com/en/register?ref="]
+bleepingcomputer.com##[href^="https://www.bleepingcomputer.com/go/"]
+health.news,naturalnews.com,newstarget.com##[href^="https://www.brighteon.tv"]
+work.ink##[href^="https://www.buff.game/buff-download/"]
+seganerds.com##[href^="https://www.canadacasino.ca/"]
+seganerds.com##[href^="https://www.casinonic.com/"]
+onecompiler.com##[href^="https://www.datawars.io"]
+ratemycourses.io##[href^="https://www.essaypal.ai"]
+rebelnews.com##[href^="https://www.eventbrite.com/"]
+seganerds.com##[href^="https://www.ewinracing.com/"]
+gamecopyworld.com,gamecopyworld.eu##[href^="https://www.kinguin.net/"]
+defenseworld.net##[href^="https://www.marketbeat.com/scripts/redirect.aspx"]
+perezhilton.com##[href^="https://www.mytrue10.com/"]
+weberblog.net##[href^="https://www.neox-networks.com/"]
+newstarget.com##[href^="https://www.newstarget.com/ARF/"]
+how2electronics.com##[href^="https://www.nextpcb.com/"]
+ownedcore.com##[href^="https://www.ownedcore.com/forums/cb.php"]
+how2electronics.com##[href^="https://www.pcbway.com/"]
+kreationnext.com##[href^="https://www.resiproxy.net"]
+bikeroar.com##[href^="https://www.roaradventures.com/"]
+searchcommander.com##[href^="https://www.searchcommander.com/rec/"]
+censored.news,newstarget.com##[href^="https://www.survivalnutrition.com"]
+swimcompetitive.com##[href^="https://www.swimoutlet.com/"]
+protrumpnews.com##[href^="https://www.twc.health/"]
+ultimate-guitar.com##[href^="https://www.ultimate-guitar.com/send?ug_from=redirect"]
+upload.ee##[href^="https://www.upload.ee/click.php"]
+gametracker.com##[href^="https://www.vultr.com/"]
+wakingtimes.com##[href^="https://www.wendymyersdetox.com/"]
+englishclub.com##[href^="https://www.wordupapp.co/"]
+gelbooru.com##[href^='https://realbooru.com/']
+cars.com##[id$="-sponsored"]
+smallseotools.com##[id*="gram"]
+producebluebook.com##[id^="BBS"]
+ldoceonline.com##[id^="ad_contentslot"]
+bestbuy.ca,bestbuy.com##[id^="atwb-ninja-carousel"]
+beforeitsnews.com##[id^="banners_"]
+filext.com##[id^="billboard_"]
+pluggedingolf.com##[id^="black-studio-tinymce-"]
+scmp.com##[id^="div-ad-"]
+designtaxi.com##[id^="dt-small-"]
+eatthis.com##[id^="gm_karmaadunit_widget"]
+theloadout.com##[id^="hydra_widget"]
+designtaxi.com##[id^="in-news-link-"]
+comicbook.com,popculture.com##[id^="native-plus-"]
+noqreport.com##[id^="oqre-"]
+dailydooh.com##[id^="rectdiv"]
+daily-choices.com##[id^="sticky_"]
+wuxiaworld.site##[id^="wuxia-"]
+grabcad.com##[ng-if="model.asense"]
+apkcombo.com##[onclick*="_blank"]
+filecrypt.cc,filecrypt.co##[onclick^="var lj"]
+techadvisor.com##[referrerpolicy="unsafe-url"]
+transfermarkt.co.uk##[referrerpolicy]
+appleinsider.com,dappradar.com,euroweeklynews.com,sitepoint.com,thefinancialbrand.com##[rel*="sponsored"]
+myanimelist.net##[src*="/c/img/images/event/"]
+audioz.download##[src*="/promo/"]
+transfermarkt.com##[src*="https://www.transfermarkt.com/image/"]
+wallpaperaccess.com##[src="/continue.png"]
+brmangas.com##[src="https://manjiroinflu.com/streams.php"]
+webcamtests.com##[src^="/MyShowroom/view.php?medium="]
+manganelo.com##[src^="/ads/"]
+ice.hockey##[src^="/images/banners/"]
+linuxtopia.org##[src^="/includes/index.php/?img="]
+academictorrents.com##[src^="/pic/sponsors/"]
+tampermonkey.net##[src^="data:image"]
+exportfromnigeria.info##[src^="http://storage2.proboards.com/"]
+medicalnewstoday.com##[src^="https://healthline-activation-prod.healthline.com/driver-images/"]
+pastemytxt.com##[src^="https://iili.io/"]
+infotel.ca##[src^="https://infotel.ca/absolutebm/"]
+noqreport.com##[src^="https://media.mercola.com/assets/html/"]
+exportfromnigeria.info##[src^="https://storage2.proboards.com/"]
+buzzly.art##[src^="https://submissions.buzzly.art/CANDY/"]
+mql5.com##[src^="https://www.mql5.com/fz/"]
+mql5.com##[src^="https://www.mql5.com/tz/"]
+circleid.com##[style*="300px;"]
+circleid.com##[style*="995px;"]
+raspberryexpert.com##[style*="border-bottom: none;"]
+greatist.com,healthline.com,medicalnewstoday.com,psychcentral.com##[style*="line-height: 0;"]
+coolors.co##[style*="position:absolute;top:20px;"]
+greyhound-data.com##[style*="width: 245px;"]
+shotcut.org##[style="background-color: #fff; padding: 6px; text-align: center"]
+realitytvworld.com##[style="background-color: white; background: white"]
+cbn.com##[style="display:block !important; min-height:90px;"]
+fandomwire.com##[style="height: 120px; width: 100%; margin: 5px auto; display: block; clear: both; text-align: center;"]
+guides.wp-bullet.com##[style="height: 288px;"]
+tenforums.com##[style="height:280px;"]
+kingmodapk.net##[style="height:300px"]
+geekzone.co.nz##[style="height:90px"]
+realitytvworld.com##[style="margin: 5px 0px 5px; display: inline-block; text-align: center; height: 250;"]
+timesnownews.com##[style="min-height: 181px;"]
+namemc.com##[style="min-height: 238px"]
+calendar-uk.co.uk,theartnewspaper.com,wahm.com##[style="min-height:250px;"]
+edgegamers.com##[style="padding-bottom:10px;height:90px;"]
+dvdsreleasedates.com##[style="padding:15px 0 15px 0;width:728px;height:90px;text-align:center;"]
+analyticsinsight.net##[style="text-align: center;"]
+windows-noob.com##[style="text-align:center; margin: 20px;"]
+vizzy.io##[style="width: 100%; font-family: Roboto; font-weight: 500; margin-bottom: 30px;"]
+newagebd.net##[style^="float:left; width:320px;"]
+forum.lowyat.net##[style^="height:100px;padding:5px"]
+fandomwire.com##[style^="min-height: 320px"]
+decrypt.co##[style^="min-width: 728px;"]
+perchance.org,ttgmedia.com##[style^="position: fixed;"]
+meaww.com##[style^="text-align: center;"]
+zenger.news##[style^="text-align:center;min-height:"]
+filmdaily.co,gelbooru.com,integral-calculator.com,live365.com,passiveaggressivenotes.com,twcenter.net##[style^="width: 728px;"]
+myfitnesspal.com##[title*="Ad"]
+check-host.net##[title="DDOS-Guard"]
+modrinth.com##[type="banner"]
+balls.ie##[type="doubleclick"]
+kiryuu.id##[width="1280"]
+fansshare.com##[width="300"]
+drwealth.com##[width="640"]
+americaoutloud.com,analyticsindiamag.com,autoaction.com.au,cryptoreporter.info,dafont.com,forexmt4indicators.com,gamblingnewsmagazine.com,irishcatholic.com,tntribune.com,tryorthokeys.com##[width="728"]
+elitepvpers.com##[width="729"]
+elitepvpers.com##[width="966"]
+presearch.com##[x-data*="kwrdAdFirst"]
+mobiforge.com##a > img[alt="Ad"]
+eztv.tf,eztv.yt##a > img[alt="Anonymous Download"]
+cript.to##a.btn[target="_blank"][href^="https://cript.to/"]
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##a[ajaxify*="&eid="] + a[href^="https://l.facebook.com/l.php?u="]
+newstalkflorida.com##a[alt="Ad"]
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##a[aria-label="Advertiser link"]
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##a[aria-label="Advertiser"]
+alibaba.com##a[campaignid][target="_blank"]
+bernama.com##a[class^="banner_photo_"]
+probuilds.net##a[class^="dl-blitz-"]
+trakt.tv##a[class^="hu-ck-s-t-er-"][target="_blank"]
+namepros.com##a[data-tag="backer"]
+sashares.co.za##a[data-wpel-link="external"]
+pinterest.at,pinterest.ca,pinterest.ch,pinterest.co.uk,pinterest.com,pinterest.com.au,pinterest.com.mx,pinterest.de,pinterest.es,pinterest.fr,pinterest.it,pinterest.pt##a[href*="&epik="]
+imgpile.com,linuxjournal.com,threatpost.com##a[href*="&utm_campaign="]
+walmart.ca##a[href*=".criteo.com/"]
+ghostbin.me##a[href*=".short.gy/"]
+chicagoprowrestling.com##a[href*="//thecmf.com/"] > img
+chicagoprowrestling.com##a[href*="//www.aliciashouse.org/"] > img
+itweb.co.za##a[href*="/adclick.php?"]
+breakingbelizenews.com,cardealermagazine.co.uk,headfonics.com,igorslab.de,landline.media,mikesmoneytalks.ca,sundayworld.co.za,theroanokestar.com,visualcapitalist.com##a[href*="/linkout/"]
+1337x.to,unblockit.boo##a[href*="/netflix"]
+movie-censorship.com##a[href*="/out.php?"]
+imagetwist.com##a[href*="/par/"]
+civilserviceindia.com##a[href*="/red.php?bu="]
+amsterdamnews.com,sundayworld.co.za,universityaffairs.ca##a[href*="/sponsored-content/"]
+biznews.com,burnabynow.com,businessdailyafrica.com,coastreporter.net,financialexpress.com,irishtimes.com,komonews.com,newwestrecord.ca,nsnews.com,prpeak.com,richmond-news.com,seattletimes.com,spokesman.com##a[href*="/sponsored/"]
+isaidubb.net,orutamil.com##a[href*="/ucdownloader.php?"]
+isaidubb.net,orutamil.com##a[href*="/ucmini.php?"]
+distrowatch.com##a[href*="3cx.com"]
+97rock.com,wedg.com##a[href*="716jobfair.com"]
+cript.to##a[href*="8stream-ai.com"]
+uploadrar.com##a[href*="?"][target="_blank"]
+filefleck.com,sadeempc.com,upload4earn.org,usersdrive.com##a[href*="javascript:"]
+twitter.com##a[href*="src=promoted_trend_click"]
+twitter.com##a[href*="src=promoted_trend_click"] + div
+coolors.co##a[href*="srv.Buysellads.com"]
+unitconversion.org##a[href="../noads.html"]
+osradar.com##a[href="http://insiderapps.com/"]
+kickasstorrents.to##a[href="http://kickass-vpn.com"]
+linkz.fun##a[href="https://cozmo.fun/"]
+vofomovies.info##a[href="https://futaonfemale.com"]
+ghostbin.me##a[href="https://paste.fo/adspot"]
+nzbstars.com##a[href="usenetbucket.php"]
+paste.fo##a[href][class] img
+techporn.ph##a[href][target*="blank"]
+rarbg.to,rarbgaccess.org,rarbgmirror.com,rarbgmirror.org,rarbgproxy.com,rarbgproxy.org,rarbgunblock.com,rarbgunblocked.org##a[href][target="_blank"] > button
+tractorbynet.com##a[href][target="_blank"] > img[class^="attachment-large"]
+mtaeta.info##a[href][target="_blank"] > img[src^="http://storage2.proboards.com/"]
+codapedia.com##a[href^="/ad-click.cfm"]
+graphic.com.gh##a[href^="/adverts/"]
+audiobookbay.is##a[href^="/dl-14-days-trial"]
+kickasstorrents.to##a[href^="/download/"]
+linkhub.icu##a[href^="/downloadnow.php?"]
+kinox.lat##a[href^="/engine/player.php"]
+limetorrents.pro##a[href^="/leet/?"] > img[src^="/static/images/download"]
+lightreading.com##a[href^="/lg_redirect.asp?piddl_lgid_docid="]
+linkhub.icu##a[href^="/linknow.php?"]
+tehrantimes.com##a[href^="/redirect/ads/"]
+xbox-hq.com##a[href^="banners.php?"]
+ghostbin.me##a[href^="http://bit.ly/"]
+iamdisappoint.com,shitbrix.com,tattoofailure.com##a[href^="http://goo.gl/"]
+notbanksyforum.com##a[href^="http://l-13.org/"]
+inquirer.net##a[href^="http://ruby.inquirer.net/"]
+wjbc.com##a[href^="http://sweetdeals.com/bloomington/deals"]
+notbanksyforum.com##a[href^="http://www.ebay.co.uk/usr/heartresearchuk_shop/"]
+997wpro.com,lite105.com##a[href^="http://www.enjoyri.com/"]
+speedsolving.com##a[href^="http://www.kewbz.co.uk"] > img
+thesearchenginelist.com##a[href^="http://www.kqzyfj.com/"]
+1280wnam.com##a[href^="http://www.milwaukeezoo.org/visit/animals/"]
+2x4u.de##a[href^="http://www.myfreecams.com/?baf="]
+rpg.net##a[href^="http://www.rpg.net/ads/"]
+warm98.com##a[href^="http://www.salvationarmycincinnati.org"]
+tundraheadquarters.com##a[href^="http://www.tkqlhce.com/"]
+shareae.com##a[href^="https://aejuice.com/"]
+lilymanga.com##a[href^="https://amzn.to/"]
+downloadhub.ltd##a[href^="https://bestbuyrdp.com/"]
+detectiveconanworld.com##a[href^="https://brave.com/"]
+cript.to##a[href^="https://cript.to/goto/"]
+cript.to##a[href^="https://cript.to/link/"][href*="?token="]
+sythe.org##a[href^="https://discord.gg/dmwatch"]
+moddroid.co##a[href^="https://doodoo.love/"]
+pluggedingolf.com##a[href^="https://edisonwedges.com/"]
+files.im##a[href^="https://galaxyroms.net/?scr="]
+odin-valhallarising.com,tarislandglobal.com##a[href^="https://get.surfshark.net/"]
+warm98.com##a[href^="https://giving.cincinnatichildrens.org/donate"]
+disasterscans.com##a[href^="https://go.onelink.me/"]
+etherscan.io##a[href^="https://goto.etherscan.com/"] > img
+forkast.news##a[href^="https://h5.whalefin.com/landing2/"]
+douploads.net##a[href^="https://href.li/?"]
+embed.listcorp.com##a[href^="https://j.moomoo.com/"]
+disasterscans.com##a[href^="https://martialscanssoulland.onelink.me/"]
+metager.org##a[href^="https://metager.org"][href*="/partner/r?"]
+dailyuploads.net##a[href^="https://ninjapcsoft.com/"]
+emalm.com##a[href^="https://offer.alibaba.com/"]
+101thefox.net,957thevibe.com##a[href^="https://parisicoffee.com/"]
+blix.gg##a[href^="https://partnerbcgame.com/"]
+metager.org##a[href^="https://r.search.yahoo.com/"]
+nosubjectlosangeles.com,richardvigilantebooks.com##a[href^="https://rebrand.ly/"]
+disasterscans.com##a[href^="https://recall-email.onelink.me/"]
+narkive.com##a[href^="https://rfnm.io/?"]
+emalm.com,linkdecode.com##a[href^="https://s.click.aliexpress.com/"]
+997wpro.com##a[href^="https://seascapeinc.com/"]
+listland.com##a[href^="https://shareasale.com/r.cfm?"]
+everybithelps.co.uk##a[href^="https://shop.trezor.io/"]
+wbnq.com,wbwn.com,wjbc.com##a[href^="https://stjude.org/radio/"]
+glory985.com##a[href^="https://sweetbidsflo.irauctions.com/listing/0"]
+accesswdun.com##a[href^="https://tinyurl.com"] > img
+mastercomfig.com##a[href^="https://tradeit.gg/"]
+scrolller.com##a[href^="https://trk.scrolller.com/"]
+primewire.link##a[href^="https://url.rw/"]
+vnkb.com##a[href^="https://vnkb.com/e/"]
+1280wnam.com##a[href^="https://wistatefair.com/fair/tickets/"]
+tristateswolf.com##a[href^="https://www.alleganycofair.org/"]
+scaredstiffreviews.com##a[href^="https://www.amazon."][href*="ref="]
+ancient-origins.net,anisearch.com,catholicculture.org,deadspin.com,electrek.co,jalopnik.com,jezebel.com,kotaku.com,lewrockwell.com,lifehacker.com,ssbcrack.com,thetakeout.com##a[href^="https://www.amazon."][href*="tag="]
+mrchecker.net##a[href^="https://www.cardingmentor.org"]
+indusladies.com##a[href^="https://www.codewizardshq.com/?utm_"]
+unblockit.boo##a[href^="https://www.cricketbook.com/"]
+duplichecker.com##a[href^="https://www.duplichecker.com/"][target*="blank"][rel*="nofollow"] > img
+pooletown.co.uk##a[href^="https://www.easyfundraising.org.uk"]
+futbin.com##a[href^="https://www.eneba.com/"][href*="?af_id="]
+wjbc.com##a[href^="https://www.farmweeknow.com/rfd_radio/"]
+magic1069.com##a[href^="https://www.fetchahouse.com/"]
+plagiarismdetector.net##a[href^="https://www.grammarly.com/"]
+coachhuey.com##a[href^="https://www.hudl.com"]
+domaintyper.com##a[href^="https://www.kqzyfj.com/"]
+wgrr.com##a[href^="https://www.mccabelumber.com/"]
+wbnq.com,wbwn.com,wjbc.com##a[href^="https://www.menards.com/main/home.html"]
+jox2fm.com,joxfm.com##a[href^="https://www.milb.com/"]
+thelibertydaily.com##a[href^="https://www.mypillow.com"]
+who.is##a[href^="https://www.name.com/redirect/"]
+kollelbudget.com##a[href^="https://www.oorahauction.org/"][target="_blank"] > img
+lite105.com##a[href^="https://www.pellabranch.com/"]
+minecraft-schematics.com##a[href^="https://www.pingperfect.com/aff.php?"]
+provideocoalition.com##a[href^="https://www.provideocoalition.com/ghost/"]
+sythe.org##a[href^="https://www.runestake.com/r/"]
+foxcincinnati.com##a[href^="https://www.safeauto.com"]
+sportscardforum.com##a[href^="https://www.sportscardforum.com/rbs_banner.php?"]
+adfoc.us##a[href^="https://www.survivalservers.com/"]
+foxcincinnati.com,warm98.com##a[href^="https://www.waltzbusiness.com/"]
+ynetnews.com##a[href^="https://www.xplorer.co.il/"]
+yugatech.com##a[href^="https://yugatech.ph/"]
+kitguru.net##a[id^="href-ad-"]
+tetris.com##a[onclick*="open"]
+himovies.to,home-barista.com,rarpc.co,warecracks.com,washingtontimes.com##a[onclick]
+onetransistor.eu##a[onclick][target="_blank"]
+1001tracklists.com##a[onclick^="lTrInt"]
+earlygame.com,i711.com##a[rel*="sponsored"]
+amishamerica.com,flixtor.video##a[rel="nofollow"] > img
+gab.com##a[rel="noopener"][target="_blank"][href^="https://grow.gab.com/go/"]
+amandawalkins.com##a[rel="noreferrer noopener nofollow sponsored"]
+unsplash.com##a[rel^="sponsored"][target="_blank"]
+tpb.party##a[style][href="https://surferprotector.com/"]
+opensubtitles.org##a[target="_blank"][href^="https://www.amazon.com/gp/search"]
+abysscdn.com,hqq.ac,hqq.to,hqq.tv,linris.xyz,megaplay.cc,meucdn.vip,netuplayer.top,ntvid.online,oceanplay.xyz,playertoast.uno,plushd.bio,waaw.to,watchonlinehd123.sbs,wiztube.xyz##a[title="Free money easy"]
+kroger.com##a[title^="Advertisement:"]
+unmatched.gg##app-advertising
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##article[data-ft*="\"ei\":\""]
+linkedin.com##article[data-is-sponsored]
+xing.com##article[data-qa="disco-updates-video-ad"]
+xing.com##article[data-qa="disco-updates-website-ad"]
+greatist.com##aside
+4runnerforum.com,acuraforums.com,blazerforum.com,buickforum.com,cadillacforum.com,camaroforums.com,cbrforum.com,chryslerforum.com,civicforums.com,corvetteforums.com,fordforum.com,germanautoforums.com,hondaaccordforum.com,hondacivicforum.com,hondaforum.com,hummerforums.com,isuzuforums.com,kawasakiforums.com,landroverforums.com,lexusforum.com,mazdaforum.com,mercuryforum.com,minicooperforums.com,mitsubishiforum.com,montecarloforum.com,mustangboards.com,nissanforum.com,oldsmobileforum.com,pontiactalk.com,saabforums.com,saturnforum.com,truckforums.com,volkswagenforum.com,volvoforums.com##aside > center
+everydayrussianlanguage.com##aside img[src^="/wp-content/themes/edr/img/"]
+thefinancialbrand.com##aside[class][style*="cursor:"]
+geoguessr.com##aside[class^="ad_"]
+buffstreams.sx##button[data-openuri*=".allsportsflix."]
+filecrypt.cc,filecrypt.co##button[onclick*="://bullads.net/"]
+psycom.net##center > .vh-quiz-qborder
+turbobits.cc,turbobits.net##center > a > img
+mangas-raw.com##center > div[style]
+greekreporter.com##center > p > [href]
+pricehistoryapp.com##center[class^="min-h-"]
+builtbybit.com##center[style="margin-top: 20px"]
+weatherbug.com##display-ad-widget
+readonepiece.com##div > b
+coffeeordie.com##div.HtmlModule > [href]
+web.telegram.org##div.bubbles > div.scrollable > div.bubbles-inner > div.is-sponsored
+sbs.com.au##div.css-1wbfa8
+steamgifts.com##div.dont_block_me
+easypet.com##div.kt-inside-inner-col > div.wp-block-kadence-rowlayout
+baking-forums.com,windows10forums.com##div.message--post.message
+tld-list.com##div.row > .text-center > .ib
+forward.com##div.sticky-container:first-child
+newegg.com##div.swiper-slide[data-sponsored-catalyst]
+inverse.com##div.zz
+boxing-social.com##div[ad-slot]
+liverpoolway.co.uk##div[align="center"] > a[href]
+informer.com##div[align="center"][style="margin:10px"]
+nexusradio.com##div[align=center]
+azuremagazine.com##div[class$="azoa"]
+independent.co.uk##div[class*="Ad__Wrapper-"]
+sportbible.com##div[class*="Advert"]
+theatlantic.com##div[class*="Leaderboard_placeholder_"]
+independent.co.uk##div[class*="TopBanner_"]
+wsj.com##div[class*="WSJTheme--adWrapper"]
+coincodex.com##div[class*="_sticky-header"]
+pcgamer.com,techcrunch.com,tomsguide.com,tomshardware.com##div[class*="ad-unit"]
+issuu.com##div[class*="adPlacement"]
+issuu.com##div[class*="adSkyscraper"]
+aajtakcampus.in##div[class*="ads_ads_container__"]
+justthenews.com##div[class*="block-simple-blockad-"]
+dallasnews.com##div[class*="features-ads"]
+gamingbible.com,ladbible.com,unilad.co.uk,unilad.com##div[class*="margin-Advert"]
+apkcombo.com##div[class*="revamp-ads"]
+cryptoslate.com,newsbtc.com##div[class*="sticky-header"]
+politico.com##div[class*="styles_supercube_"]
+serverhunter.com##div[class*="why"]
+walmart.com##div[class="mv3 ml3 mv4-xl mh0-xl"][data-testid="sp-item"]
+tripadvisor.com##div[class="ui_container dSjaD _S"]
+timesofindia.com##div[class^="ATF_container_"]
+arkadium.com##div[class^="Ad-adContainer"]
+dailymotion.com##div[class^="AdBanner"]
+thingiverse.com##div[class^="AdCard__card"]
+breastcancer.org,emojipedia.org##div[class^="AdContainer"]
+reuters.com##div[class^="AdSlot__container"]
+tunefind.com##div[class^="AdSlot_inner_"]
+usnews.com##div[class^="Ad__Container-"]
+poki.com##div[class^="Advertisement_"]
+zerohedge.com##div[class^="AdvertisingSlot_"]
+cruisecritic.co.uk,cruisecritic.com##div[class^="ArticleItem_ad"]
+sportinglife.com##div[class^="Article__FlashTalkingWrapper-"]
+barrons.com##div[class^="BarronsTheme--adWrapper"]
+someecards.com##div[class^="BaseAdSlot_adContainer_"]
+theglobeandmail.com##div[class^="BaseAd_"]
+cnbc.com##div[class^="BoxRail-Styles-"]
+yallo.tv##div[class^="BrandingBackgroundstyled__Wrapper-"]
+donedeal.ie##div[class^="DFP__StyledAdSlot-"]
+genius.com##div[class^="DfpAd__Container-"]
+dailymotion.com##div[class^="DisplayAd"]
+games.dailymail.co.uk,nba.com##div[class^="DisplayAd_"]
+alternativeto.net##div[class^="GamAds_"]
+games.dailymail.co.uk##div[class^="GameTemplate__displayAdTop_"]
+benzinga.com##div[class^="GoogleAdBlock_"]
+allradio.net##div[class^="GoogleAdsenseContainer_"]
+livescore.com##div[class^="HeaderAdsHolder_"]
+games.dailymail.co.uk##div[class^="HomeCategory__adWrapper_"]
+games.dailymail.co.uk##div[class^="HomeTemplate__afterCategoryAd_"]
+tunefind.com##div[class^="ImageListAdSlot_"]
+sportinglife.com##div[class^="Layout__TopAdvertWrapper-"]
+genius.com##div[class^="LeaderboardOrMarquee__"]
+appsample.com##div[class^="MapLayout_Bottom"]
+dailymotion.com##div[class^="NewWatchingDiscovery__adSection"]
+dsearch.com##div[class^="PreAd_"]
+reuters.com##div[class^="RightRail-sticky-container"]
+games.dailymail.co.uk##div[class^="RightRail__displayAdRight_"]
+genius.com##div[class^="SidebarAd_"]
+chloeting.com##div[class^="StickyFooterAds__Wrapper"]
+newyorker.com##div[class^="StickyHeroAdWrapper-"]
+scotsman.com##div[class^="TopBanner"]
+cnbc.com##div[class^="TopBanner-"]
+dailymotion.com##div[class^="VideoInfo__videoInfoAdContainer"]
+timeout.com##div[class^="_inlineAdWrapper_"]
+timeout.com##div[class^="_sponsoredContainer_"]
+crictracker.com##div[class^="ad-block-"]
+sfchronicle.com##div[class^="ad-module-"]
+fodors.com##div[class^="ad-placeholder"]
+cointelegraph.com##div[class^="ad-slot_"]
+reuters.com##div[class^="ad-slot__"]
+gamingdeputy.com##div[class^="ad-wrapper-"]
+kijiji.ca##div[class^="adChoices-"]
+goodrx.com##div[class^="adContainer"]
+statsroyale.com##div[class^="adUnit_"]
+goodrx.com##div[class^="adWrapper-"]
+90min.com,investing.com,newsday.com##div[class^="ad_"]
+constative.com##div[class^="ad_placeholder_"]
+ehitavada.com##div[class^="ad_space_"]
+greatandhra.com##div[class^="add"]
+ndtv.com##div[class^="add_"]
+india.com,ntdeals.net,psdeals.net,xbdeals.net##div[class^="ads-"]
+dnaindia.com##div[class^="ads-box"]
+stakingrewards.com##div[class^="assetFilters_desktop-banner_"]
+releasestv.com##div[class^="astra-advanced-hook-"]
+onlineradiobox.com##div[class^="banner-"]
+technical.city##div[class^="banner_"]
+historycollection.com##div[class^="cis_add_block"]
+astro.com##div[class^="goad"]
+groovypost.com##div[class^="groov-adsense-"]
+imagetopdf.com,pdfkit.com,pdftoimage.com,topdf.com,webpconverter.com##div[class^="ha"]
+technologyreview.com##div[class^="headerTemplate__leaderboardRow-"]
+localjewishnews.com##div[class^="local-feed-banner-ads"]
+nationalmemo.com,spectrum.ieee.org,theodysseyonline.com##div[class^="rblad-"]
+windowsreport.com##div[class^="refmedprd"]
+windowsreport.com##div[class^="refmedprod"]
+staples.com##div[class^="sku-configurator__banner"]
+mydramalist.com##div[class^="spnsr"]
+kijiji.ca##div[class^="sponsored-"]
+target.com##div[class^="styles__PubAd"]
+semafor.com##div[class^="styles_ad"]
+unmineablesbest.com##div[class^="uk-visible@"]
+gamingdeputy.com##div[class^="vb-"]
+whatsondisneyplus.com##div[class^="whats-"]
+unsplash.com##div[data-ad="true"]
+999thehawk.com##div[data-alias="Sweetjack"]
+walmart.ca##div[data-automation^="HookLogicCarousel"]
+reddit.com##div[data-before-content="advertisement"]
+artforum.com##div[data-component="ad-unit-gallery"]
+theverge.com##div[data-concert]
+bedbathandbeyond.com##div[data-cta="plpSponsoredProductClick"]
+gamingbible.com,unilad.com##div[data-cypress^="sticky-header"]
+analyticsindiamag.com##div[data-elementor-type="header"] > section.elementor-section-boxed
+wayfair.com##div[data-enzyme-id="WssBannerContainer"]
+opentable.ae,opentable.ca,opentable.co.th,opentable.co.uk,opentable.com,opentable.com.au,opentable.com.mx,opentable.de,opentable.es,opentable.hk,opentable.ie,opentable.it,opentable.jp,opentable.nl,opentable.sg##div[data-promoted="true"]
+scmp.com##div[data-qa="AdSlot-Container"]
+scmp.com##div[data-qa="AppBar-AdSlotContainer"]
+scmp.com##div[data-qa="ArticleHeaderAdSlot-Placeholder"]
+scmp.com##div[data-qa="AuthorPage-HeaderAdSlotContainer"]
+scmp.com##div[data-qa="GenericArticle-MobileContentHeaderAdSlot"]
+scmp.com##div[data-qa="GenericArticle-TopPicksAdSlot"]
+scmp.com##div[data-qa="InlineAdSlot-Container"]
+basschat.co.uk,momondo.at,momondo.be,momondo.ca,momondo.ch,momondo.cl,momondo.co.nz,momondo.co.uk,momondo.co.za,momondo.com,momondo.com.ar,momondo.com.au,momondo.com.br,momondo.com.co,momondo.com.pe,momondo.com.tr,momondo.cz,momondo.de,momondo.dk,momondo.ee,momondo.es,momondo.fi,momondo.fr,momondo.hk,momondo.ie,momondo.in,momondo.it,momondo.mx,momondo.nl,momondo.no,momondo.pl,momondo.pt,momondo.ro,momondo.se,momondo.tw,momondo.ua##div[data-resultid$="-sponsored"]
+linustechtips.com##div[data-role="sidebarAd"]
+aliexpress.com,aliexpress.us##div[data-spm="seoads"]
+ecosia.org##div[data-test-id="mainline-result-ad"]
+debenhams.com##div[data-test-id^="sponsored-product-card"]
+investing.com##div[data-test="ad-slot-visible"]
+alternativeto.net##div[data-testid="adsense-wrapper"]
+twitter.com##div[data-testid="cellInnerDiv"] > div > div[class] > div[class][data-testid="placementTracking"]
+qwant.com##div[data-testid="heroTiles"]
+qwant.com##div[data-testid="homeTrendsContainer"] a[href^="https://api.qwant.com/v3/r/?u="]
+qwant.com##div[data-testid="pam.container"]
+qwant.com##div[data-testid="productAdsMicrosoft.container"]
+manomano.co.uk,manomano.de,manomano.es,manomano.fr,manomano.it##div[data-testid^="sponsored-product"]
+chrome-stats.com##div[id*="billboard_responsive"]
+thenewspaper.gr##div[id*="thene-"]
+diskingdom.com##div[id="diski-"]
+geeksforgeeks.org##div[id^="GFG_AD_"]
+weather.com##div[id^="Taboola-main-"]
+apkonline.net,kisshentai.net,onworks.net##div[id^="ad"]
+songlyrics.com##div[id^="ad-absolute-160"]
+nationalrail.co.uk##div[id^="ad-advert-"]
+timeout.com##div[id^="ad-promo-"]
+timeout.com##div[id^="ad-side-"]
+nowgoal8.com##div[id^="ad_"]
+javacodegeeks.com##div[id^="adngin-"]
+agoda.com##div[id^="ads-"]
+pixiv.net##div[id^="adsdk-"]
+antiguanewsroom.com##div[id^="antig-"]
+slidesgo.com##div[id^="article_ads"]
+business-standard.com##div[id^="between_article_content_"]
+digg.com,iplogger.org,wallhere.com,wikitechy.com##div[id^="bsa-zone_"]
+business2community.com##div[id^="busin-"]
+competenetwork.com##div[id^="compe-"]
+elfaro.net##div[id^="content-ad-body"]
+titantv.com##div[id^="ctl00_TTLB"]
+timesofindia.com##div[id^="custom_ad_"]
+cyprus-mail.com##div[id^="cypru-"]
+football-tribe.com##div[id^="da-article-"]
+memedroid.com##div[id^="freestar-ad-"]
+cinesprint.com##div[id^="googleads_"]
+maltadaily.mt##div[id^="malta-"]
+mediabiasfactcheck.com##div[id^="media-"]
+gamebyte.com,irishnews.com##div[id^="mpu"]
+pretoriafm.co.za##div[id^="preto-"]
+progamerage.com##div[id^="proga-"]
+howtogeek.com##div[id^="purch_"]
+realtalk933.com##div[id^="realt-"]
+sbstatesman.com##div[id^="sbsta-"]
+smallnetbuilder.com##div[id^="snb-"]
+express.co.uk##div[id^="taboola-"]
+filehorse.com##div[id^="td-"]
+birrapedia.com##div[id^="textoDivPublicidad_"]
+theroanoketribune.org##div[id^="thero-"]
+yovizag.com##div[id^="v-yovizag-"]
+weraveyou.com##div[id^="werav-"]
+mommypoppins.com##div[id^="wrapper-div-gpt-ad-"]
+wallpaperflare.com##div[itemtype$="WPAdBlock"]
+nashfm100.com##div[onclick*="https://deucepub.com/"]
+forums.pcsx2.net##div[onclick^="MyAdvertisements."]
+ezgif.com##div[style$="min-height:90px;display:block"]
+news18.com##div[style*="min-height: 250px"]
+footballtransfers.com##div[style*="min-height: 250px;"]
+news18.com##div[style*="min-height: 527px"]
+news18.com##div[style*="min-height:250px"]
+news18.com##div[style*="min-height:527px"]
+gsmarena.com##div[style*="padding-bottom: 24px;"]
+news18.com,readcomiconline.li##div[style*="width: 300px"]
+datacenterdynamics.com,fansshare.com,hairboutique.com,iconarchive.com,imagetwist.com,klz9.com,memecenter.com,neoseeker.com,news18.com,paultan.org,thejournal-news.net,unexplained-mysteries.com,windsorite.ca,xtra.com.my##div[style*="width:300px"]
+clover.fm##div[style*="width:975px; height:90px;"]
+filesharingtalk.com##div[style="background-color: white; border-width: 2px; border-style: dashed; border-color: white;"]
+askdifference.com##div[style="color: #aaa"]
+metabattle.com##div[style="display: flex; justify-content: center; align-items: center; margin-top: 60px; min-height: 250px;"]
+mangabtt.com##div[style="display: flex; justify-content: space-around; flex-flow: wrap; height: 270px;"]
+aceshowbiz.com##div[style="display:inline-block;min-height:300px"]
+kimcartoon.li##div[style="font-size: 0; position: relative; text-align: center; margin: 10px auto; width: 300px; height: 250px; overflow: hidden;"]
+paraphraser.io##div[style="height:128px;overflow: hidden !important;"]
+wikibrief.org##div[style="height:302px;width:auto;text-align:center;"]
+comics.org##div[style="height:90px"]
+streamingsites.com##div[style="margin-bottom: 10px; display: flex;"]
+upjoke.com##div[style="margin-bottom:0.5rem; min-height:250px;"]
+gsmarena.com##div[style="margin-left: -10px; margin-top: 30px; height: 145px;"]
+gamereactor.asia,gamereactor.cn,gamereactor.cz,gamereactor.de,gamereactor.dk,gamereactor.es,gamereactor.eu,gamereactor.fi,gamereactor.fr,gamereactor.it,gamereactor.jp,gamereactor.kr,gamereactor.nl,gamereactor.no,gamereactor.pl,gamereactor.pt,gamereactor.se##div[style="min-height: 600px; margin-bottom: 20px;"]
+disneydining.com##div[style="min-height:125px;"]
+askdifference.com##div[style="min-height:280px;"]
+newser.com##div[style="min-height:398px;"]
+flotrack.org##div[style="min-width: 300px; min-height: 250px;"]
+technical.city##div[style="padding-bottom: 20px"] > div[style="min-height: 250px"]
+bitcoin-otc.com##div[style="padding-left: 10px; padding-bottom: 10px; text-align: center; font-family: Helvetica;"]
+shaaditimes.com##div[style="padding: 5 0 0 0px; height: 138px; text-align:center; width:780px; background: url('/imgs/top-ad-bg.gif') repeat-x left bottom; background-color:#FFF9D0;"]
+9gag.com##div[style="position: relative; z-index: 3; width: 640px; min-height: 202px; margin: 0px auto;"]
+vymaps.com##div[style="text-align: center; height: 260px;"]
+navajotimes.com##div[style="text-align: center; margin-top: -35px;"]
+readmanganato.com##div[style="text-align: center; max-width: 620px; max-height: 270px; margin: 10px auto; overflow: hidden; display: block;"]
+wikibrief.org##div[style="text-align:center;height:302px;width:auto;"]
+readmanganato.com##div[style="width: 100%;overflow: hidden;text-align: center;"]
+m.koreatimes.co.kr##div[style="width: 300px; height:250px; overflow: hidden; margin: 0 auto;"]
+reactiongifs.com##div[style="width:499px; background:#ffffff; margin:00px 0px 35px 180px; padding:20px 0px 20px 20px; "]
+constative.com##div[style]:not([class])
+whatmobile.com.pk##div[style^="background-color:#EBEBEB;"]
+fctables.com##div[style^="background:#e3e3e3;position:fixed"]
+footybite.cc##div[style^="border: 2px solid "]
+pastebin.com##div[style^="color: #999; font-size: 12px; text-align: center;"]
+realpython.com##div[style^="display:block;position:relative;"]
+elitepvpers.com##div[style^="font-size:11px;"]
+manga-raw.club##div[style^="height: 250px;"]
+manga-raw.club##div[style^="height: 300px;"]
+add0n.com,crazygames.com##div[style^="height: 90px;"]
+apkdone.com,crazygames.com,english-hindi.net,livesoccertv.com,malaysiakini.com,sporticos.com##div[style^="height:250px"]
+titantv.com##div[style^="height:265px;"]
+altchar.com##div[style^="height:280px;"]
+malaysiakini.com##div[style^="height:600px"]
+whatmobile.com.pk##div[style^="height:610px"]
+point2homes.com,propertyshark.com##div[style^="margin-bottom: 10px;"]
+unionpedia.org##div[style^="margin-top: 15px; min-width: 300px"]
+bleachernation.com##div[style^="margin: 25px 0px 35px 0px;"]
+thetealmango.com##div[style^="margin: 8px auto; text-align:"]
+vallejosun.com##div[style^="max-width:1200px;min-height:300px;"]
+gizbot.com,goodreturns.in,inc.com##div[style^="min-height: 250px"]
+lasentinel.net##div[style^="min-height: 250px; width: 300px;"]
+point2homes.com,propertyshark.com##div[style^="min-height: 360px;"]
+abcnews.go.com##div[style^="min-height: 90px"]
+gamerdvr.com##div[style^="min-height:"]
+news18.com##div[style^="min-height:1170px"]
+nohat.cc##div[style^="min-height:250px"]
+add0n.com##div[style^="min-height:90px"]
+decrypt.co,metabattle.com##div[style^="min-width: 300px;"]
+9gag.com##div[style^="position: relative; z-index: 10;"]
+keybr.com##div[style^="position:relative;min-width:"]
+gtaforums.com##div[style^="text-align: center; margin: 0px 0px 10px;"]
+live365.com##div[style^="width: 300px;"]
+klz9.com,mn4u.net,napuzba.com##div[style^="width:336px"]
+jwire.com.au##div[style^="width:468px;"]
+imgbabes.com##div[style^="width:604px;"]
+interglot.com,sodapdf.com,stopmalvertising.com##div[style^="width:728px;"]
+tvtv.us##div[style^="z-index: 1100; position: fixed;"]
+ebay.com##div[title="ADVERTISEMENT"]
+adblock-tester.com##embed[width="240"]
+teslaoracle.com##figure.aligncenter
+groupon.com##figure[data-clickurl^="https://api.groupon.com/sponsored/"]
+imgburn.com##font[face="Arial"][size="1"]
+realitytvworld.com##font[size="1"][color="gray"]
+dailydot.com,grammar-monster.com##footer
+law.com,topcultured.com##h3
+greatist.com##hl-adsense
+drive.com.au##hr
+carls-sims-4-guide.com##hr.post_separator + .windowbg
+avanigo.com##iframe.lazyloaded
+coincodex.com,yourbittorrent.com##iframe[src]
+realgearonline.com##iframe[src^="http://www.adpeepshosted.com/"]
+beyondtheflag.com,buffalowdown.com##iframe[src^="https://tallysight.com/widget/offers/"]
+theflixertv.to##iframe[style*="width: 100%"]
+bollyflix.loan,downloadlagu321.site,dramacool.sr,uwatchfre.cam##iframe[style*="z-index: 2147483646"]
+123movies.net,4anime.gg,actvid.com,apkmody.io,batotoo.com,beetoon.net,bollyflix.loan,bravoporn.com,cineb.net,coloredmanga.com,downloadlagu321.site,dragontranslation.com,dramacool.sr,gogoanime.co.in,gogoanime.run,harimanga.com,hds-streaming-hd.com,himovies.to,hurawatch.cc,iflixmovies.lol,instamod.co,jujutsukaisenonline.net,leercapitulo.com,linksly.co,mangadna.com,mangageko.com,mangahere.today,manganatos.com,mangatigre.net,manhuafast.com,manhwadesu.ink,manhwalist.xyz,membed.net,messitv.net,miraculous.to,movies-watch.com.pk,moviesmod.pro,nkiri.com,prmovies.beauty,putlocker.vc,putlockers.fm,putlockers.li,sflix.se,sockshare.ac,ssoap2day.to,sukidesuost.info,tamilyogi.bike,uwatchfre.cam,waploaded.com,watchomovies.net,y-2mate.com,yomovies.team,ytmp3.cc,yts-subs.com##iframe[style*="z-index: 2147483647"]
+dexdotexe.com##iframe[title="Top Games"]
+pixiv.net##iframe[width="300"][height="250"]
+premiumtimesng.com##img[alt$=" Ad"]
+bailagentnetwork.com##img[alt*="Affiliate_BailAgentNetwork"]
+windycitymediagroup.com,windycitytimes.com##img[alt*="Sponsor"]
+hiphopkit.com##img[alt="Zappy"]
+therainbowtimesmass.com##img[alt="banner ad"]
+pasty.info##img[aria-label="Aliexpress partner network affiliate Link"]
+pasty.info##img[aria-label="Ebay partner network affiliate Link"]
+inkbotdesign.com##img[decoding="async"]
+nepallivetoday.com,wjr.com##img[height="100"]
+prawfsblawg.blogs.com,thomhartmann.com##img[height="200"]
+newyorkyimby.com,tipsquoteswishes.com##img[height="280"]
+pointblanknews.com,sharktankblog.com##img[height="60"]
+windycitymediagroup.com,windycitytimes.com##img[name="Sponsor"]
+callofwar.com,supremacy1914.com##img[referrerpolicy]
+nsfwyoutube.com##img[src*="data"]
+1337x.to,duplichecker.com##img[src*="data:image"]
+bollyflix.asia##img[src^="https://www-opensocial.googleusercontent.com/gadgets/proxy?"]
+eevblog.com##img[src^="https://www.eevblog.com/images/comm/eevblog_banner_"]
+check-host.net##img[style="width: 700px"]
+bcmagazine.net##img[style^="width:300px;"]
+abpclub.co.uk##img[width="118"]
+howtogermany.com##img[width="120"]
+lyngsat-logo.com,lyngsat-maps.com,lyngsat-stream.com,lyngsat.com,newswireni.com,webhostingtalk.com##img[width="160"]
+fashionpulis.com##img[width="250"]
+airplaydirect.com,americaoutloud.com,bigeye.ug,completesports.com,cryptomining-blog.com,cryptoreporter.info,dotsauce.com,espnrichmond.com,flsentinel.com,forexmt4indicators.com,freedomhacker.net,gamblingnewsmagazine.com,gameplayinside.com,goodcarbadcar.net,kenyabuzz.com,kiwiblog.co.nz,mauitime.com,mkvcage.com,movin100.com,mycolumbuspower.com,naijaloaded.com.ng,newzimbabwe.com,onislandtimes.com,ouo.press,portlandphoenix.me,punchng.com,reviewparking.com,robhasawebsite.com,sacobserver.com,seguintoday.com,themediaonline.co.za,theolivepress.es,therep.co.za,thewillnigeria.com,tntribune.com,waamradio.com,wantedinafrica.com,wantedinrome.com,wschronicle.com##img[width="300"]
+everybithelps.co.uk##img[width="300"][height="300"]
+boxthislap.org##img[width="300px"]
+independent.co.ug##img[width="320"]
+londonnewsonline.co.uk##img[width="360"]
+gamblingnewsmagazine.com##img[width="365"][height="500"]
+flashx.cc,flashx.co,flashx.pw,forum.gsmhosting.com,themediaonline.co.za,topprepperwebsites.com##img[width="468"]
+americanfreepress.net,analyticsindiamag.com,readneverland.com##img[width="600"]
+runnerstribe.com##img[width="728"]
+boxthislap.org##img[width="728px"][height="90px"]
+dailyuploads.net##input[value^="Download From Server"]
+earnhub.net##ins[style^="display:inline-block"]
+bitzite.com,unmineablesbest.com##ins[style^="display:inline-block;width:300px;height:250px;"]
+natureworldnews.com##label
+tellows-au.com,tellows-tr.com,tellows.at,tellows.be,tellows.co,tellows.co.nz,tellows.co.uk,tellows.co.za,tellows.com,tellows.com.br,tellows.cz,tellows.de,tellows.es,tellows.fr,tellows.hu,tellows.in,tellows.it,tellows.jp,tellows.mx,tellows.net,tellows.nl,tellows.org,tellows.pl,tellows.pt,tellows.ru,tellows.se,tellows.tw##li > .comment-body[style*="min-height: 250px;"]
+cgpress.org##li > div[id^="cgpre-"]
+bestbuy.com##li.embedded-sponsored-listing
+linkedin.com##li[data-is-sponsored="true"]
+duckduckgo.com,duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion##li[data-layout="products"]
+duckduckgo.com##li[data-layout="products_middle"]
+flaticon.com##li[id^="bn-icon-list"]
+linkvertise.com##lv-redirect-static-ad
+linkvertise.com##lv-taboola-ctr-ad-dummy
+aniwatcher.com##main > [href] > [src]
+hentai-foundry.com##main > p
+cointelegraph.com##mm-collectors
+escorenews.com##noindex
+adblock-tester.com##object[width="240"]
+mrchecker.net##p > [href^="https://www.mrchecker.net/"]
+paste.fo##p[class][style="font-size:16px"]
+bitref.com##picture > img[src]
+courier-journal.com,courierpress.com,detroitnews.com,freep.com,greenbaypressgazette.com,jsonline.com,lohud.com,northjersey.com,sheboyganpress.com,tallahassee.com,theadvertiser.com##promo-story-bucket-short[style="min-height: 335px;"]
+healthgrades.com##ps-action-intercept
+mashable.com##section.mt-4 > div
+bbc.com##section[data-e2e="advertisement"]
+thesaurus.com##section[data-type="ad-horizontal-module"]
+reddit.com,reddittorjg6rue252oqsxryoxengawnmo46qy4kyii5wtqnwfj4ooad.onion##shreddit-comments-page-ad
+tempostorm.com##side-banners
+smartprix.com##sm-dap
+nativeplanet.com##span[class^="oiad-txt"]
+torlock.com##table.hidden-xs
+realitytvworld.com##table[border="0"][align="left"]
+roadtester.com.au##table[cellpadding="9"][border="0"]
+wifinetnews.com##table[height="260"]
+softpanorama.org##table[height="620"]
+afrol.com##table[height="70"]
+automobile-catalog.com,car.com,silentera.com##table[height="90"]
+automobile-catalog.com,itnewsonline.com##table[width="300"]
+learninginfo.org##table[width="346"]
+jeepforum.com##table[width="468"]
+worldtimezone.com##table[width="472"]
+pcstats.com##table[width="866"]
+idea4cash.com##td
+schlockmercenary.com##td[colspan="3"]
+geekzone.co.nz##td[colspan="3"].forumRow[style="border-right:solid 1px #fff;"]
+eve-search.com##td[height="90"]
+titantv.com##td[id^="menutablelogocell"]
+itnewsonline.com##td[width="120"]
+greyhound-data.com##td[width="160"]
+eurometeo.com##td[width="738"]
+radiosurvivor.com##text-18
+trademe.co.nz##tm-display-ad
+rarbg.to,rarbgaccess.org,rarbgmirror.com,rarbgmirror.org,rarbgproxy.com,rarbgproxy.org,rarbgunblock.com,rarbgunblocked.org##tr > td + td[style*="height:"]
+titantv.com##tr.gridRow > td > [id] > div:first-child
+morningagclips.com##ul.logo-nav
+greyhound-data.com##ul.ppts
+greatandhra.com##ul.sortable-list > div
+backgrounds.wetransfer.net##we-wallpaper
+! :has()
+radio.at,radio.de,radio.dk,radio.es,radio.fr,radio.it,radio.net,radio.pl,radio.pt,radio.se###headerTopBar ~ div > div:has(div#RAD_D_station_top)
+gtaforums.com###ipsLayout_mainArea div:has(> #pwDeskLbAtf)
+klmanga.io###movie-last-movie > li:has(> center > ins[data-width="300"])
+aleteia.org###root > div[class]:has(> .adslot)
+bbc.com###sticky-mpu:has(.dotcom-ad-inner)
+kroger.com##.AutoGrid-cell:has(.ProductCard-tags > div > span[data-qa="featured-product-tag"])
+nationalgeographic.com##.FrameBackgroundFull--grey:has(.ad-wrapper)
+imgur.com##.Grid-column > div[style^="height:"]:has(.AdHomeContainer)
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##._6y8t:has(a[href="/ads/about/?entry_product=ad_preferences"])
+haveibeenpwned.com##.actionsBar:has(.why1Password)
+forexlive.com##.article-slot__wrapper:has(.article-header__sponsored)
+time.com##.article-small-sidebar > .sticky-container:has(div[id^="ad-"])
+blitz.gg##.aside-content-column:has(.display-ad)
+haveibeenpwned.com##.bodyGradient > :has(.why1Password)
+radioreference.com##.box.gradient:has(a[href*="&Click="])
+asda.com##.co-item:has(.co-item__sponsored-label)
+theautopian.com##.code-block:has(.htlad-InContent)
+templateshub.net##.col-lg-4.col-md-6:has(> div.singel-course)
+limetorrents.lol##.downloadareabig:has([title^="An‌on‌ymous Download"])
+tripsonabbeyroad.com##.e-con-inner:has(tp-cascoon)
+protrumpnews.com##.enhanced-text-widget:has(span.pre-announcement)
+pigglywigglystores.com##.fp-item:has(.fp-tag-ad)
+tumblr.com##.ge_yK:has(.hM19_)
+fortune.com##.homepage:has(> div[id^="InStream"])
+qwant.com##.is-sidebar:has(a[data-testid="advertiserAdsLink"])
+yovizag.com##.jeg_column:has(> .jeg_wrapper > .jeg_ad)
+chewy.com##.kib-carousel-item:has(.kib-product-sponsor)
+content.dictionary.com##.lp-code:has(> [class$="Ad"])
+acmemarkets.com,albertsons.com,andronicos.com,carrsqc.com,haggen.com,jewelosco.com,kingsfoodmarkets.com,pavilions.com,randalls.com,safeway.com,shaws.com,starmarket.com,tomthumb.com,vons.com##.master-product-carousel:has([data-carousel-driven="sponsored-products"])
+officedepot.com##.od-col:has(.od-product-card-region-colors-sponsored)
+pollunit.com##.owl-carousel:has(.carousel-ad)
+hannaford.com##.plp_thumb_wrap:has([data-citrusadimpressionid])
+niagarathisweek.com##.polarBlock:has(.polarAds)
+woolworths.com.au##.product-grid-v2--tile:has(.sponsored-text)
+meijer.com##.product-grid__product:has(.product-tile__sponsored)
+sainsburys.co.uk##.pt-grid-item:has([data-test-id="citrus-label"])
+ksl.com##.queue:has(.sponsored)
+olx.com.pk##.react-swipeable-view-container:has([href*="http://onelink.to"])
+metager.org##.result:has(a[href^="https://metager.org"][href*="/partner/r?"])
+metager.org##.result:has(a[href^="https://r.search.yahoo.com/"])
+qwant.com##.result__ext:has([data-testid="adResult"])
+playpilot.com##.search-preview .side:has(> .provider)
+troyhunt.com##.sidebar-featured:has(a[href^="https://pluralsight.pxf.io/"])
+bing.com##.slide:has(.rtb_ad_caritem_mvtr)
+rustlabs.com##.sub-info-block:has(#banner)
+nex-software.com##.toolinfo:has(a[href$="/reimage"])
+twitter.com##.tweet:has(.promo)
+wowcher.co.uk##.two-by-two-deal:has(a[href*="src=sponsored_search_"])
+cheaptickets.com,ebookers.com,expedia.com,hotels.com,orbitz.com,travelocity.com,wotif.com##.uitk-card:has(.uitk-badge-sponsored)
+duckduckgo.com##.vertical-section-divider:has(span.badge--ad-wrap)
+neonheightsservers.com##.well:has(ins.adsbygoogle)
+9to5linux.com##.widget:has([href$=".php"])
+svgrepo.com##[class^="style_native"]:has([href*="buysellads.com"])
+cargurus.com##[data-cg-ft="car-blade-link"]:has([data-cg-ft="srp-listing-blade-sponsored"])
+kayak.com##[role="button"]:has([class*="ad-marking"])
+kayak.com##[role="tab"]:has([class*="sponsored"])
+aliexpress.com,aliexpress.us##a[class^="manhattan--container--"][class*="main--card--"]:has(span[style="background-color:rgba(0,0,0,0.20);position:absolute;top:8px;color:#fff;padding:2px 5px;background:rgba(0,0,0,0.20);border-radius:4px;right:8px"])
+aliexpress.com,aliexpress.us##a[class^="manhattan--container--"][class*="main--card--"]:has(span[style="background: rgba(0, 0, 0, 0.2); position: absolute; top: 8px; color: rgb(255, 255, 255); padding: 2px 5px; border-radius: 4px; right: 8px;"])
+manomano.co.uk,manomano.de,manomano.es,manomano.fr,manomano.it##a[href^="/"][href*="?product_id="]:has(span[data-testid="product-card-sp-label"])
+independent.co.uk,standard.co.uk##article > div[class^="sc-"]:has(> div[class^="sc-"] > div[data-ad-unit-path])
+digg.com##article.fp-vertical-story:has(a[href="/channel/digg-pick"])
+digg.com##article.fp-vertical-story:has(a[href="/channel/promotion"])
+9gag.com##article:has(.promoted)
+mg.co.za##article:has(.sponsored-single)
+tympanus.net##article:has(header:has(.ct-sponsored))
+foxnews.com##article[class|="article story"]:has(.sponsored-by)
+twitter.com##article[data-testid="tweet"]:has(path[d$="10H8.996V8h7v7z"])
+psychcentral.com##aside:has([data-empty])
+vidplay.lol##body > div > div[class][style]:has(> div > div > a[target="_blank"])
+countdown.co.nz##cdx-card:has(product-badge-list)
+skyscanner.com,skyscanner.net##div > a:has(div[class^="DefaultBanner_sponsorshipRow"])
+inverse.com##div > p + div:has(amp-ad)
+bailagentnetwork.com##div.box-bottom:has(a[rel="noopener nofollow"])
+outlook.live.com##div.customScrollBar > div > div[id][class]:has(img[src$="/images/ads-olk-icon.png"])
+thebay.com##div.product:has(div.citrus-sponsored)
+healthyrex.com##div.textwidget:has(a[rel="nofollow sponsored"])
+bestbuy.ca##div.x-productListItem:has([class^="sponsoredProduct"])
+timesnownews.com##div:has(> .bggrayAd)
+skyscanner.com,skyscanner.net##div:has(> a[data-testid="inline-brand-banner"])
+outlook.live.com##div:has(> div > div.fbAdLink)
+tripadvisor.com##div:has(> div[class="ui_columns is-multiline "])
+heb.com##div:has(> div[id^="hrm-banner-shotgun"])
+webtools.fineaty.com##div[class*=" hidden-"]:has(.adsbygoogle)
+aliexpress.com,aliexpress.us##div[class*="search-item-card-wrapper-"]:has(span[class^="multi--ad-"])
+qwant.com##div[class="_2NDle"]:has(div[data-testid="advertiserAdsDisplayUrl"])
+walmart.com##div[class="mb1 ph1 pa0-xl bb b--near-white w-25"]:has(div[data-ad-component-type="wpa-tile"])
+radio.at,radio.de,radio.dk,radio.es,radio.fr,radio.it,radio.net,radio.pl,radio.pt,radio.se##div[class] > div[class]:has(> div[class] > div[id^="RAD_D_"])
+dearbornmarket.com,fairwaymarket.com,gourmetgarage.com,priceritemarketplace.com,shoprite.com,thefreshgrocer.com##div[class^="ColListing"]:has(div[data-testid^="Sponsored"])
+wish.com##div[class^="ProductGrid__FeedTileWidthWrapper-"]:has(div[class^="DesignSpec__TextSpecWrapper-"] + div[class^="DesignSpec__TextSpecWrapper-"])
+wish.com##div[class^="ProductGrid__FeedTileWidthWrapper-"]:has(div[class^="FeedTile__ProductBoostLabelWrapper-"])
+wish.com##div[class^="WishExpressProductsRow__FeedTileColumnWrapper-"]:has(div[class^="FeedTile__ProductBoostLabelWrapper-"])
+flickr.com##div[class^="main view"]:has(a[href$="&ref=sponsored"])
+goal.com##div[class^="open-web-ad_"]
+walmart.ca##div[data-automation="product"]:has(div[data-automation="sponsored-indicator-wrapper"])
+cargurus.com##div[data-cg-ft="car-blade"]:has(div[data-cg-ft="sponsored-listing-badge"])
+rakuten.com##div[data-productid]:has(div.productList_sponsoredAds_RUS)
+pinterest.at,pinterest.ca,pinterest.ch,pinterest.co.uk,pinterest.com,pinterest.com.au,pinterest.com.mx,pinterest.de,pinterest.es,pinterest.fr,pinterest.it,pinterest.pt##div[data-test-id="pin"]:has(div[title^="Promoted"])
+twitter.com##div[data-testid="UserCell"]:has(path[d$="10H8.996V8h7v7z"])
+twitter.com##div[data-testid="eventHero"]:has(path[d$="10H8.996V8h7v7z"])
+twitter.com##div[data-testid="placementTracking"]:has(div[data-testid$="-impression-pixel"])
+booking.com##div[data-testid="property-card"]:has(div[data-testid="new-ad-design-badge"])
+twitter.com##div[data-testid="trend"]:has(path[d$="10H8.996V8h7v7z"])
+truthsocial.com##div[item="[object Object]"]:has(path[d="M17 7l-10 10"])
+truthsocial.com##div[item="[object Object]"]:has(path[d="M9.83333 1.83398H16.5M16.5 1.83398V8.50065M16.5 1.83398L9.83333 8.50065L6.5 5.16732L1.5 10.1673"])
+facebook.com,facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion##div[style="max-width: 390px; min-width: 190px;"]:has(a[href^="/ads/"])
+wikiwand.com##div[style="min-height: 325px; max-width: 600px;"]
+nex-software.com##h4:has(a[href$="/reimage"])
+thebay.com##li.ais-Hits-item:has(div.piq-sponsored)
+boots.com##li.estore_product_container:has(.sponsored)
+walmart.com##li.items-center:has(div[data-ad-component-type="wpa-tile"])
+macys.com##li.productThumbnailItem:has(.sponsored-items-label)
+autotrader.co.uk##li:has(section[data-testid="trader-seller-listing"] > span[data-testid="FEATURED_LISTING"])
+autotrader.co.uk##li:has(section[data-testid="trader-seller-listing"] > span[data-testid="PROMOTED_LISTING"])
+bbc.com##li[class*="-ListItem"]:has(div.dotcom-ad)
+dictionary.com,thesaurus.com##main div[class]:has(> [data-type="ad-vertical"])
+windowsreport.com##section.hide-mbl:has(a[href^="https://out.reflectormedia.com/"])
+deadspin.com##section:has(a[href^="https://theinventory.com"])
+homedepot.com##section[id^="browse-search-pods-"] > div.browse-search__pod:has(div.product-sponsored)
+titantv.com##tr:has(> td[align="center"][valign="middle"][colspan="2"][class="gC"])
+opensubtitles.org##tr[style]:has([src*="php"])
+oneindia.com##ul > li:has(> div[class^="adg_"])
+filmibeat.com,gizbot.com,goodreturns.in,oneindia.com##ul > li:has(> div[id^="taboola-mid-home-stream"])
+! firework
+ndtv.com,ndtv.in##[class^="firework"]
+ndtv.com,ndtv.in##[id^="firework"]
+! Abusive Adcompanies
+a-ads.com,ad-maven.com,adcash.com,admitad.com,adskeeper.co.uk,adskeeper.com,adspyglass.com,adstracker.info,adsupply.com,adsupplyads.com,adsupplyads.net,chpadblock.com,exoclick.com,hilltopads.com,join-admaven.com,joinpropeller.com,juicyads.com,luckyads.pro,monetag.com,musk-give.com,myadcash.com,popads.net,propellerads.com,purpleads.io,trafficshop.com,yavli.com##HTML
+! Amazon
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg###nav-swmslot
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg###sc-rec-bottom
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg###sc-rec-right
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg###similarities_feature_div:has(span.sponsored_label_tap_space)
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg###sponsoredProducts2_feature_div
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg###sponsoredProducts_feature_div
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg###typ-recommendations-stripe-1
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg###typ-recommendations-stripe-2
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##.amzn-safe-frame-container
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##.dp-widget-card-deck:has([data-ad-placement-metadata])
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##.s-result-item:has(div.puis-sponsored-label-text)
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##.s-result-list > .a-section:has(.sbv-ad-content-container)
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##.sbv-video-single-product
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##[cel_widget_id*="-creative-desktop_loom-desktop-"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div.s-inner-result-item > div.sg-col-inner:has(a.puis-sponsored-label-text)
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[cel_widget_id*="Deals3Ads"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[cel_widget_id*="_ad-placements-"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[cel_widget_id*="desktop-dp-"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[cel_widget_id="sp-orderdetails-desktop-carousel_desktop-yo-orderdetails_0"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[cel_widget_id="sp-orderdetails-mobile-list_mobile-yo-orderdetails_0"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[cel_widget_id="sp-pop-mobile-carousel_mobile-yo-postdelivery_0"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[cel_widget_id="sp-rhf-desktop-carousel_desktop-rhf_0"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[cel_widget_id="sp-shiptrack-desktop-carousel_desktop-yo-shiptrack_0"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[cel_widget_id="sp-shiptrack-mobile-list_mobile-yo-shiptrack_0"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[cel_widget_id="sp-typ-mobile-carousel_mobile-typ-carousels_2"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[cel_widget_id="sp_phone_detail_thematic"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[cel_widget_id="typ-ads"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[cel_widget_id^="LEFT-SAFE_FRAME-"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[cel_widget_id^="MAIN-FEATURED_ASINS_LIST-"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[cel_widget_id^="adplacements:"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[cel_widget_id^="multi-brand-"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[cel_widget_id^="sp-desktop-carousel_handsfree-browse"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[class*="SponsoredProducts"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[class*="_dpNoOverflow_"][data-idt]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[data-a-carousel-options*="\\\"isSponsoredProduct\\\":\\\"true\\\""]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[data-ad-id]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[data-cel-widget="sp-rhf-desktop-carousel_desktop-rhf_1"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[data-cel-widget="sp-shiptrack-desktop-carousel_desktop-yo-shiptrack_0"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[data-cel-widget^="multi-brand-video-mobile_DPSims_"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[data-cel-widget^="multi-card-creative-desktop_loom-desktop-top-slot_"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[data-csa-c-painter="sp-cart-mobile-carousel-cards"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[data-csa-c-slot-id^="loom-mobile-brand-footer-slot_hsa-id-"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[data-csa-c-slot-id^="loom-mobile-top-slot_hsa-id-"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##div[id^="sp_detail"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##span[cel_widget_id^="MAIN-FEATURED_ASINS_LIST-"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##span[cel_widget_id^="MAIN-loom-desktop-brand-footer-slot_hsa-id-CARDS-"]
+amazon.ae,amazon.ca,amazon.cn,amazon.co.jp,amazon.co.uk,amazon.com,amazon.com.au,amazon.com.be,amazon.com.br,amazon.com.mx,amazon.com.tr,amazon.de,amazon.eg,amazon.es,amazon.fr,amazon.in,amazon.it,amazon.nl,amazon.pl,amazon.sa,amazon.se,amazon.sg##span[cel_widget_id^="MAIN-loom-desktop-top-slot_hsa-id-CARDS-"]
+! ad insertition https://chromewebstore.google.com/detail/idgpnmonknjnojddfkpgkljpfnnfcklj
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws###google-s-ad
+! invideo advertising
+usnews.com###ac-lre-player-ph
+ginx.tv###ginx-floatingvod-containerspacer
+pubs.rsc.org###journal-info > .text--centered
+forums.whathifi.com###jwplayer-container-div
+mentalfloss.com###mm-player-placeholder-large-screen
+bossip.com,hiphopwired.com,madamenoire.com###player-wrapper
+realclearpolitics.com###realclear_jwplayer_container
+uproxx.com###upx-mm-player-wrap
+newseveryday.com###vplayer_large
+telegraph.co.uk##.article-betting-unit-container
+sciencetimes.com##.article-videoplayer
+people.com##.article__broad-video
+zdnet.com##.c-avStickyVideo
+mb.com.ph##.code-block
+techwalla.com##.component-article-section-jwplayer-wrapper
+comicbook.com##.embedVideoContainer
+taskandpurpose.com##.empire-unit-prefill-container
+europeanpharmaceuticalreview.com##.europ-fixed-footer
+ibtimes.sg##.featured_video
+redboing.com##.fw-ad
+thestar.co.uk##.gOoqzH
+electricianforum.co.uk##.gb-sponsored
+givemesport.com##.gms-videos-container
+videogames.si.com##.is-exco-player
+anandtech.com##.jwplayer
+gamesradar.com,tomshardware.com,whathifi.com##.jwplayer__widthsetter
+space.com##.jwplayer__wrapper
+southernliving.com##.karma-sticky-rail
+gearjunkie.com##.ldm_ad
+bestrecipes.com.au,delicious.com.au,taste.com.au##.news-video
+picrew.me##.play-Imagemaker_Footer
+sciencetimes.com##.player
+bossip.com##.player-wrapper-inner
+swimswam.com##.polls-461
+kidspot.com.au##.secondary-video
+playbuzz.com##.stickyplayer-container
+mentalfloss.com##.style_k8mr7b-o_O-style_1ts1q2h
+gamesradar.com,tomsguide.com,tomshardware.com,whathifi.com##.vid-present
+petapixel.com##.video-aspect-wrapper
+gearjunkie.com##.video-jwplayer
+consequence.net##.video_container
+hollywoodreporter.com##[id^="jwplayer"]
+wlevradio.com##a[href^="https://omny.fm/shows/just-start-the-conversation"]
+firstforwomen.com##div[class^="article-content__www_ex_co_video_player_"]
+! dark pattern adverts
+burnerapp.com##.exit__overlay
+booking.com##.js_sr_persuation_msg
+booking.com##.sr-motivate-messages
+! Google https://forums.lanik.us/viewtopic.php?f=62&t=45153
+##.section-subheader > .section-hotel-prices-header
+! yahoo
+yahoo.com###Horizon-ad
+yahoo.com###Lead-0-Ad-Proxy
+yahoo.com###adsStream
+yahoo.com###defaultLREC
+finance.yahoo.com###mrt-node-Lead-0-Ad
+sports.yahoo.com###mrt-node-Lead-1-Ad
+sports.yahoo.com###mrt-node-Primary-0-Ad
+sports.yahoo.com###mrt-node-Secondary-0-Ad
+yahoo.com###sda-Horizon
+yahoo.com###sda-Horizon-viewer
+yahoo.com###sda-LDRB
+yahoo.com###sda-LDRB-iframe
+yahoo.com###sda-LDRB2
+yahoo.com###sda-LREC
+yahoo.com###sda-LREC-iframe
+yahoo.com###sda-LREC2
+yahoo.com###sda-LREC2-iframe
+yahoo.com###sda-LREC3
+yahoo.com###sda-LREC3-iframe
+yahoo.com###sda-LREC4
+yahoo.com###sda-MAST
+yahoo.com###sda-MON
+yahoo.com###sda-WFPAD
+yahoo.com###sda-WFPAD-1
+yahoo.com###sda-WFPAD-iframe
+yahoo.com###sda-wrapper-COMMENTSLDRB
+mail.yahoo.com###slot_LREC
+yahoo.com###viewer-LDRB
+yahoo.com###viewer-LREC2
+yahoo.com###viewer-LREC2-iframe
+yahoo.com##.Feedback
+finance.yahoo.com##.ad-lrec3
+yahoo.com##.ads
+yahoo.com##.caas-da
+yahoo.com##.darla
+yahoo.com##.darla-container
+yahoo.com##.darla-lrec-ad
+yahoo.com##.darla_ad
+yahoo.com##.ds_promo_ymobile
+yahoo.com##.gemini-ad
+yahoo.com##.gemini-ad-feedback
+yahoo.com##.item-beacon
+yahoo.com##.ntk-ad-item
+sports.yahoo.com##.post-article-ad
+yahoo.com##.searchCenterBottomAds
+yahoo.com##.searchCenterTopAds
+search.yahoo.com##.searchRightBottomAds
+search.yahoo.com##.searchRightTopAds
+yahoo.com##.sys_shopleguide
+yahoo.com##.viewer-sda-container
+groupon.com##[data-bhc$="sponsored_carousel"]
+yahoo.com##[data-content="Advertisement"]
+mail.yahoo.com##[data-test-id^="pencil-ad"]
+yahoo.com##[data-wf-beacons]
+finance.yahoo.com##[id^="defaultLREC"]
+mail.yahoo.com##[rel="noreferrer"][data-test-id][href^="https://beap.gemini.yahoo.com/mbclk?"]
+yahoo.com##a[data-test-id="large-image-ad"]
+mail.yahoo.com##article[aria-labelledby*="-pencil-ad-"]
+yahoo.com##div[class*="ads-"]
+yahoo.com##div[class*="gemini-ad"]
+yahoo.com##div[data-beacon] > div[class*="streamBoxShadow"]
+yahoo.com##div[id*="ComboAd"]
+yahoo.com##div[id^="COMMENTSLDRB"]
+yahoo.com##div[id^="LeadAd-"]
+yahoo.com##div[id^="darla-ad"]
+yahoo.com##div[id^="gemini-item-"]
+yahoo.com##div[style*="/ads/"]
+yahoo.com##li[data-test-locator="stream-related-ad-item"]
+! youtube
+youtube.com##body > ytd-app > #content.ytd-app.style-scope > tp-yt-app-drawer#guide.ytd-app.style-scope[align="start"][role="navigation"][style^="transition-duration:"][position] + ytd-mini-guide-renderer.ytd-app.style-scope + ytd-page-manager#page-manager.ytd-app.style-scope > ytd-browse.ytd-page-manager.style-scope[page-subtype="home"][role="main"] > ytd-settings-sidebar-renderer.ytd-browse.style-scope + dom-if.ytd-browse.style-scope + ytd-two-column-browse-results-renderer.grid-disabled.grid.ytd-browse.style-scope[page-subtype="home"][style] > #primary.ytd-two-column-browse-results-renderer.style-scope > ytd-rich-grid-renderer.ytd-two-column-browse-results-renderer.style-scope[style^="--ytd-rich-grid-item-max-width:"] > #header.ytd-rich-grid-renderer.style-scope ~ #masthead-ad.ytd-rich-grid-renderer.style-scope > ytd-ad-slot-renderer.ytd-rich-grid-renderer.style-scope:not(:empty)
+youtube.com##body > ytd-app > #content.ytd-app.style-scope > tp-yt-app-drawer#guide.ytd-app.style-scope[align="start"][role="navigation"][style^="transition-duration:"][position] + ytd-mini-guide-renderer.ytd-app.style-scope + ytd-page-manager#page-manager.ytd-app.style-scope > ytd-browse.ytd-page-manager.style-scope[page-subtype="home"][role="main"] > ytd-settings-sidebar-renderer.ytd-browse.style-scope + dom-if.ytd-browse.style-scope + ytd-two-column-browse-results-renderer.grid-disabled.grid.ytd-browse.style-scope[page-subtype="home"][style] > #primary.ytd-two-column-browse-results-renderer.style-scope > ytd-rich-grid-renderer.ytd-two-column-browse-results-renderer.style-scope[style^="--ytd-rich-grid-item-max-width:"] > #header.ytd-rich-grid-renderer.style-scope ~ #masthead-ad.ytd-rich-grid-renderer.style-scope > ytd-banner-promo-renderer.ytd-rich-grid-renderer.style-scope[style]:not(:empty)
+youtube.com##body > ytd-app > #content.ytd-app.style-scope > tp-yt-app-drawer#guide.ytd-app.style-scope[align="start"][role="navigation"][style^="transition-duration:"][position] + ytd-mini-guide-renderer.ytd-app.style-scope + ytd-page-manager#page-manager.ytd-app.style-scope > ytd-browse.ytd-page-manager.style-scope[page-subtype="home"][role="main"] > ytd-settings-sidebar-renderer.ytd-browse.style-scope + dom-if.ytd-browse.style-scope + ytd-two-column-browse-results-renderer.grid-disabled.grid.ytd-browse.style-scope[page-subtype="home"][style] > #primary.ytd-two-column-browse-results-renderer.style-scope > ytd-rich-grid-renderer.ytd-two-column-browse-results-renderer.style-scope[style^="--ytd-rich-grid-item-max-width:"] > #spinner-container.ytd-rich-grid-renderer.style-scope + #contents.ytd-rich-grid-renderer.style-scope > ytd-rich-grid-row.ytd-rich-grid-renderer.style-scope > #contents.ytd-rich-grid-row.style-scope > ytd-rich-item-renderer.ytd-rich-grid-row.style-scope[items-per-row] > #content.ytd-rich-item-renderer.style-scope > ytd-ad-slot-renderer.ytd-rich-item-renderer.style-scope:not(:empty)
+youtube.com##body > ytd-app > #content.ytd-app.style-scope > tp-yt-app-drawer#guide.ytd-app.style-scope[align="start"][role="navigation"][style^="transition-duration:"][position] + ytd-mini-guide-renderer.ytd-app.style-scope + ytd-page-manager#page-manager.ytd-app.style-scope > ytd-browse.ytd-page-manager.style-scope[page-subtype="home"][role="main"] > ytd-settings-sidebar-renderer.ytd-browse.style-scope + dom-if.ytd-browse.style-scope + ytd-two-column-browse-results-renderer.grid-disabled.grid.ytd-browse.style-scope[page-subtype="home"][style] > #primary.ytd-two-column-browse-results-renderer.style-scope > ytd-rich-grid-renderer.ytd-two-column-browse-results-renderer.style-scope[style^="--ytd-rich-grid-item-max-width:"] > #spinner-container.ytd-rich-grid-renderer.style-scope + #contents.ytd-rich-grid-renderer.style-scope > ytd-rich-grid-row.ytd-rich-grid-renderer.style-scope > #contents.ytd-rich-grid-row.style-scope > ytd-rich-item-renderer.ytd-rich-grid-row.style-scope[items-per-row]:has(> #content.ytd-rich-item-renderer.style-scope > ytd-ad-slot-renderer.ytd-rich-item-renderer.style-scope:not(:empty))
+youtube.com##body > ytd-app > #content.ytd-app.style-scope > tp-yt-app-drawer#guide.ytd-app.style-scope[align="start"][role="navigation"][style^="transition-duration:"][position] + ytd-mini-guide-renderer.ytd-app.style-scope + ytd-page-manager#page-manager.ytd-app.style-scope > ytd-search.ytd-page-manager.style-scope[role="main"] > #container.ytd-search.style-scope > ytd-two-column-search-results-renderer.ytd-search.style-scope[is-search="true"] > #primary.ytd-two-column-search-results-renderer.style-scope > ytd-section-list-renderer.ytd-two-column-search-results-renderer.style-scope > #contents.ytd-section-list-renderer.style-scope > ytd-item-section-renderer.ytd-section-list-renderer.style-scope > #spinner-container.ytd-item-section-renderer.style-scope + #contents.ytd-item-section-renderer.style-scope > ytd-ad-slot-renderer.ytd-item-section-renderer.style-scope:not(:empty)
+youtube.com##body > ytd-app > #content.ytd-app.style-scope > tp-yt-app-drawer#guide.ytd-app.style-scope[align="start"][role="navigation"][style^="transition-duration:"][position] + ytd-mini-guide-renderer.ytd-app.style-scope + ytd-page-manager#page-manager.ytd-app.style-scope > ytd-search.ytd-page-manager.style-scope[role="main"] > #container.ytd-search.style-scope > ytd-two-column-search-results-renderer.ytd-search.style-scope[is-search="true"] > #primary.ytd-two-column-search-results-renderer.style-scope > ytd-section-list-renderer.ytd-two-column-search-results-renderer.style-scope > #contents.ytd-section-list-renderer.style-scope > ytd-item-section-renderer.ytd-section-list-renderer.style-scope > #spinner-container.ytd-item-section-renderer.style-scope + #contents.ytd-item-section-renderer.style-scope > ytd-search-pyv-renderer.ytd-item-section-renderer.style-scope:not(:empty)
+youtube.com##body > ytd-app > #content.ytd-app.style-scope > tp-yt-app-drawer#guide.ytd-app.style-scope[align="start"][role="navigation"][style^="transition-duration:"][position] + ytd-mini-guide-renderer.ytd-app.style-scope + ytd-page-manager#page-manager.ytd-app.style-scope > ytd-watch-flexy.ytd-page-manager.style-scope[video-id][js-panel-height_][flexy][rounded-info-panel][role="main"][style^="--ytd-watch-flexy-"] > #single-column-container.ytd-watch-flexy.style-scope + #columns.ytd-watch-flexy.style-scope > #primary.ytd-watch-flexy.style-scope + #secondary.ytd-watch-flexy.style-scope > #secondary-inner.ytd-watch-flexy.style-scope > #related.ytd-watch-flexy.style-scope > ytd-watch-next-secondary-results-renderer.ytd-watch-flexy.style-scope > #items.ytd-watch-next-secondary-results-renderer.style-scope > ytd-ad-slot-renderer.ytd-watch-next-secondary-results-renderer.style-scope:not(:empty)
+youtube.com##body > ytd-app > #content.ytd-app.style-scope > tp-yt-app-drawer#guide.ytd-app.style-scope[align="start"][role="navigation"][style^="transition-duration:"][position] + ytd-mini-guide-renderer.ytd-app.style-scope + ytd-page-manager#page-manager.ytd-app.style-scope > ytd-watch-flexy.ytd-page-manager.style-scope[video-id][js-panel-height_][flexy][rounded-info-panel][role="main"][style^="--ytd-watch-flexy-"] > #single-column-container.ytd-watch-flexy.style-scope + #columns.ytd-watch-flexy.style-scope > #primary.ytd-watch-flexy.style-scope + #secondary.ytd-watch-flexy.style-scope > #secondary-inner.ytd-watch-flexy.style-scope > #related.ytd-watch-flexy.style-scope > ytd-watch-next-secondary-results-renderer.ytd-watch-flexy.style-scope > #items.ytd-watch-next-secondary-results-renderer.style-scope > ytd-item-section-renderer > #contents > ytd-ad-slot-renderer:not(:empty)
+youtube.com##body > ytd-app > #content.ytd-app.style-scope > tp-yt-app-drawer#guide.ytd-app.style-scope[align="start"][role="navigation"][style^="transition-duration:"][position] + ytd-mini-guide-renderer.ytd-app.style-scope + ytd-page-manager#page-manager.ytd-app.style-scope > ytd-watch-flexy.ytd-page-manager.style-scope[video-id][js-panel-height_][flexy][rounded-info-panel][role="main"][style^="--ytd-watch-flexy-"] > #single-column-container.ytd-watch-flexy.style-scope + #columns.ytd-watch-flexy.style-scope > #primary.ytd-watch-flexy.style-scope > #primary-inner.ytd-watch-flexy.style-scope > #below.ytd-watch-flexy.style-scope > #related.ytd-watch-flexy.style-scope > #player-ads.ytd-watch-flexy.style-scope
+youtube.com##body > ytd-app > #content.ytd-app.style-scope > tp-yt-app-drawer#guide.ytd-app.style-scope[align="start"][role="navigation"][style^="transition-duration:"][position] + ytd-mini-guide-renderer.ytd-app.style-scope + ytd-page-manager#page-manager.ytd-app.style-scope > ytd-watch-flexy.ytd-page-manager.style-scope[video-id][js-panel-height_][flexy][rounded-info-panel][role="main"][style^="--ytd-watch-flexy-"] > #single-column-container.ytd-watch-flexy.style-scope + #columns.ytd-watch-flexy.style-scope > #primary.ytd-watch-flexy.style-scope > #primary-inner.ytd-watch-flexy.style-scope > #below.ytd-watch-flexy.style-scope > #related.ytd-watch-flexy.style-scope > ytd-watch-next-secondary-results-renderer.ytd-watch-flexy.style-scope > #items.ytd-watch-next-secondary-results-renderer.style-scope > ytd-ad-slot-renderer.ytd-watch-next-secondary-results-renderer.style-scope:not(:empty)
+youtube.com##body > ytd-app > #content.ytd-app.style-scope > tp-yt-app-drawer#guide.ytd-app.style-scope[align="start"][role="navigation"][style^="transition-duration:"][position] + ytd-mini-guide-renderer.ytd-app.style-scope + ytd-page-manager#page-manager.ytd-app.style-scope > ytd-watch-flexy.ytd-page-manager.style-scope[video-id][js-panel-height_][flexy][rounded-info-panel][role="main"][style^="--ytd-watch-flexy-"] > #single-column-container.ytd-watch-flexy.style-scope + #columns.ytd-watch-flexy.style-scope > #primary.ytd-watch-flexy.style-scope > #primary-inner.ytd-watch-flexy.style-scope > #below.ytd-watch-flexy.style-scope > #related.ytd-watch-flexy.style-scope > ytd-watch-next-secondary-results-renderer.ytd-watch-flexy.style-scope > #items.ytd-watch-next-secondary-results-renderer.style-scope > ytd-item-section-renderer.ytd-watch-next-secondary-results-renderer.style-scope > #contents.ytd-item-section-renderer.style-scope > ytd-ad-slot-renderer.ytd-item-section-renderer.style-scope:not(:empty)
+youtube.com##body > ytd-app > #content.ytd-app.style-scope > tp-yt-app-drawer#guide.ytd-app.style-scope[align="start"][role="navigation"][style^="transition-duration:"][position] + ytd-mini-guide-renderer.ytd-app.style-scope + ytd-page-manager#page-manager.ytd-app.style-scope > ytd-watch-flexy.ytd-page-manager.style-scope[video-id][js-panel-height_][flexy][rounded-info-panel][role="main"][style^="--ytd-watch-flexy-"] > #single-column-container.ytd-watch-flexy.style-scope + #columns.ytd-watch-flexy.style-scope > #primary.ytd-watch-flexy.style-scope > #primary-inner.ytd-watch-flexy.style-scope > #below.ytd-watch-flexy.style-scope > #ticket-shelf.ytd-watch-flexy.style-scope + ytd-merch-shelf-renderer.ytd-watch-flexy.style-scope[at-start][item-style] > #main.style-scope.ytd-merch-shelf-renderer > #banner.style-scope.ytd-merch-shelf-renderer:not(:empty)
+youtube.com##body > ytd-app > #content.ytd-app.style-scope > tp-yt-app-drawer#guide.ytd-app.style-scope[align="start"][role="navigation"][style^="transition-duration:"][position] + ytd-mini-guide-renderer.ytd-app.style-scope + ytd-page-manager#page-manager.ytd-app.style-scope > ytd-watch-flexy.ytd-page-manager.style-scope[video-id][js-panel-height_][flexy][rounded-info-panel][role="main"][style^="--ytd-watch-flexy-"] > #single-column-container.ytd-watch-flexy.style-scope + #columns.ytd-watch-flexy.style-scope > #primary.ytd-watch-flexy.style-scope > #primary-inner.ytd-watch-flexy.style-scope > #below.ytd-watch-flexy.style-scope > #ticket-shelf.ytd-watch-flexy.style-scope + ytd-merch-shelf-renderer.ytd-watch-flexy.style-scope[at-start][item-style] > #main.style-scope.ytd-merch-shelf-renderer > #item-list.style-scope.ytd-merch-shelf-renderer:not(:empty)
+youtube.com##body > ytd-app > #content.ytd-app.style-scope > tp-yt-app-drawer#guide.ytd-app.style-scope[align="start"][role="navigation"][style^="transition-duration:"][position] + ytd-mini-guide-renderer.ytd-app.style-scope + ytd-page-manager#page-manager.ytd-app.style-scope > ytd-watch-flexy.ytd-page-manager.style-scope[video-id][js-panel-height_][flexy][rounded-info-panel][role="main"][style^="--ytd-watch-flexy-"] > #single-column-container.ytd-watch-flexy.style-scope + #columns.ytd-watch-flexy.style-scope > #primary.ytd-watch-flexy.style-scope > #primary-inner.ytd-watch-flexy.style-scope > #player.ytd-watch-flexy.style-scope > #player-container-outer.ytd-watch-flexy.style-scope > #player-container-inner.ytd-watch-flexy.style-scope > #player-container.ytd-watch-flexy.style-scope[role="complementary"][style] > ytd-player#ytd-player.ytd-watch-flexy.style-scope[style] > #container.ytd-player.style-scope > #movie_player.playing-mode.html5-video-player[data-version^="/s/player/"][aria-label] > .ytp-suggested-action[data-layer] > button.ytp-suggested-action-badge-with-controls.ytp-suggested-action-badge.ytp-button:not(:empty)
+youtube.com##body > ytd-app > #content.ytd-app.style-scope > tp-yt-app-drawer#guide.ytd-app.style-scope[align="start"][role="navigation"][style^="transition-duration:"][position] + ytd-mini-guide-renderer.ytd-app.style-scope + ytd-page-manager#page-manager.ytd-app.style-scope > ytd-watch-flexy.ytd-page-manager.style-scope[video-id][js-panel-height_][flexy][rounded-info-panel][role="main"][style^="--ytd-watch-flexy-"] > #single-column-container.ytd-watch-flexy.style-scope + #columns.ytd-watch-flexy.style-scope > #secondary.ytd-watch-flexy.style-scope > #secondary-inner.ytd-watch-flexy.style-scope > #related.ytd-watch-flexy.style-scope > #player-ads.ytd-watch-flexy.style-scope:not(:empty)
+m.youtube.com##lazy-list > ad-slot-renderer
+! Site Specific filters (used with $generichide)
+thefreedictionary.com###Content_CA_AD_0_BC
+thefreedictionary.com###Content_CA_AD_1_BC
+instapundit.com###adspace_top > .widget-ad__content
+sonichits.com###bottom_ad
+sonichits.com###divStickyRight
+spanishdict.com###removeAdsSidebar
+sonichits.com###right-ad
+ldoceonline.com###rightslot2-container
+sonichits.com###top-ad-outer
+sonichits.com###top-top-ad
+spanishdict.com##.ad--1zZdAdPU
+tweaktown.com##.adcon
+geekzone.co.nz##.adsbygoogle
+apkmirror.com##.ains-apkm_outbrain_ad
+tweaktown.com##.center-tag-rightad
+rawstory.com##.connatix-hodler
+apkmirror.com##.ezo_ad
+duckduckgo.com,duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion##.js-results-ads
+duckduckgo.com,duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion##.js-sidebar-ads > .nrn-react-div
+boatsonline.com.au,yachthub.com##.js-sticky
+history.com##.m-balloon-header--ad
+history.com##.m-in-content-ad
+history.com##.m-in-content-ad-row
+impartialreporter.com,polygon.com##.ob-smartfeed-wrapper
+duckduckgo.com,duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion##.results--ads
+mail.google.com##a[href^="http://li.blogtrottr.com/click?"]
+geekzone.co.nz##div.cornered.box > center
+apkmirror.com##div[id^="adtester-container-"]
+yandex.com##div[id^="yandex_ad"]
+! Google
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws###tads[aria-label]
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws###tadsb[aria-label]
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##.OcdnDb
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##.commercial-unit-desktop-rhs:not(.mnr-c)
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##.commercial-unit-mobile-top > div[data-pla="1"]
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##.cu-container
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##.ltJjte
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##.uEierd
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##a[href^="/aclk?sa="][href*="&adurl=&placesheetAdFix=1"]
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##a[href^="/aclk?sa="][href*="&adurl=&placesheetAdFix=1"] + button
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##a[href^="https://www.googleadservices.com/pagead/aclk?"]
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##body#yDmH0d [data-is-promoted="true"]
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##div.sh-sr__shop-result-group[data-hveid]:has(g-scrolling-carousel)
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##div[data-attrid="kc:/local:promotions"]
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##div[data-crl="true"][data-id^="CarouselPLA-"]
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##div[data-is-ad="1"]
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##div[jsaction^="mouseover:pane."]:has(span.jHLihd)
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##div[jsdata*="CarouselPLA-"][data-id^="CarouselPLA-"]
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##div[jsdata*="SinglePLA-"][data-id^="SinglePLA-"]
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##html[itemtype="http://schema.org/SearchResultsPage"] #cnt div[class$="sh-sr__bau"]
+google.ac,google.ad,google.ae,google.al,google.am,google.as,google.at,google.az,google.ba,google.be,google.bf,google.bg,google.bi,google.bj,google.bs,google.bt,google.by,google.ca,google.cat,google.cd,google.cf,google.cg,google.ch,google.ci,google.cl,google.cm,google.co.ao,google.co.bw,google.co.ck,google.co.cr,google.co.id,google.co.il,google.co.in,google.co.jp,google.co.ke,google.co.kr,google.co.ls,google.co.ma,google.co.mz,google.co.nz,google.co.th,google.co.tz,google.co.ug,google.co.uk,google.co.uz,google.co.ve,google.co.vi,google.co.za,google.co.zm,google.co.zw,google.com,google.com.af,google.com.ag,google.com.ai,google.com.ar,google.com.au,google.com.bd,google.com.bh,google.com.bn,google.com.bo,google.com.br,google.com.by,google.com.bz,google.com.cn,google.com.co,google.com.cu,google.com.cy,google.com.do,google.com.ec,google.com.eg,google.com.et,google.com.fj,google.com.gh,google.com.gi,google.com.gt,google.com.hk,google.com.jm,google.com.jo,google.com.kh,google.com.kw,google.com.lb,google.com.ly,google.com.mm,google.com.mt,google.com.mx,google.com.my,google.com.na,google.com.ng,google.com.ni,google.com.np,google.com.om,google.com.pa,google.com.pe,google.com.pg,google.com.ph,google.com.pk,google.com.pr,google.com.py,google.com.qa,google.com.ru,google.com.sa,google.com.sb,google.com.sg,google.com.sl,google.com.sv,google.com.tj,google.com.tn,google.com.tr,google.com.tw,google.com.ua,google.com.uy,google.com.vc,google.com.ve,google.com.vn,google.cv,google.cz,google.de,google.dj,google.dk,google.dm,google.dz,google.ee,google.es,google.fi,google.fm,google.fr,google.ga,google.ge,google.gg,google.gl,google.gm,google.gp,google.gr,google.gy,google.hk,google.hn,google.hr,google.ht,google.hu,google.ie,google.im,google.iq,google.is,google.it,google.it.ao,google.je,google.jo,google.jp,google.kg,google.ki,google.kz,google.la,google.li,google.lk,google.lt,google.lu,google.lv,google.md,google.me,google.mg,google.mk,google.ml,google.mn,google.ms,google.mu,google.mv,google.mw,google.ne,google.ne.jp,google.ng,google.nl,google.no,google.nr,google.nu,google.pl,google.pn,google.ps,google.pt,google.ro,google.rs,google.ru,google.rw,google.sc,google.se,google.sh,google.si,google.sk,google.sm,google.sn,google.so,google.sr,google.st,google.td,google.tg,google.tl,google.tm,google.tn,google.to,google.tt,google.us,google.vg,google.vu,google.ws##html[itemtype="http://schema.org/SearchResultsPage"] #cnt div[class$="sh-sr__tau"][style]
+! Filter for testpages.adblockplus.org
+testpages.adblockplus.org###abptest
+! MSN
+msn.com###displayAdCard
+msn.com###div[id^="mrr-topad-"]
+msn.com###partners
+msn.com###promotions
+msn.com##.articlePage_bannerAd_wrapper-DS-EntryPoint1-1
+msn.com##.articlePage_eoabNativeAd_new-DS-EntryPoint1-1
+msn.com##.bannerAdContainer-DS-EntryPoint1-1
+msn.com##.drrTopAdWrapper
+msn.com##.galleryPage_eoabContent_new-DS-EntryPoint1-1
+msn.com##.galleryPage_eoabNativeAd_new-DS-EntryPoint1-1
+msn.com##.intra-article-ad-full
+msn.com##.intra-article-ad-half
+msn.com##.modernRightRail_stickyTopBannerAd-DS-EntryPoint1-1
+msn.com##.modernRightRail_topAd_container_2col_newRR-DS-EntryPoint1-1
+msn.com##.outeradcontainer
+msn.com##.qohvco-DS-EntryPoint1-1
+msn.com##.river-background
+msn.com##.views-right-rail-top-display
+msn.com##.views-right-rail-top-display-ad
+msn.com##.windowsBannerAdContainer-DS-EntryPoint1-1
+msn.com##[class^="articlePage_eoabContent"]
+msn.com##[data-m*="Infopane_CMSBasicCardstore_article"]
+msn.com##a[aria-label="AliExpress"]
+msn.com##a[aria-label="Amazon Assistant"]
+msn.com##a[aria-label="Amazon"]
+msn.com##a[aria-label="Bol.com"]
+msn.com##a[aria-label="Booking.com"]
+msn.com##a[aria-label="Ricardo"]
+msn.com##a[aria-label="Today's Deals"]
+msn.com##a[aria-label="eBay"]
+msn.com##a[href*=".booking.com/"]
+msn.com##a[href*="/aff_m?offer_id="]
+msn.com##a[href*="?sub_aff_id="]
+msn.com##a[href="https://aka.ms/QVC"]
+msn.com##a[href^="https://amzn.to/"]
+msn.com##a[href^="https://clk.tradedoubler.com/click?"]
+msn.com##a[href^="https://clkde.tradedoubler.com/click?"]
+msn.com##a[href^="https://disneyplus.bn5x.net/"]
+msn.com##a[href^="https://prf.hn/click/camref:"]
+msn.com##a[href^="https://ww55.affinity.net/"]
+msn.com##a[href^="https://www.awin1.com/cread.php"]
+msn.com##above-river-block
+msn.com##cs-native-ad-card
+msn.com##cs-native-ad-card-no-hover
+msn.com##div[class^="articlePage_topBannerAdContainer_"]
+msn.com##div[class^="galleryPage_bannerAd"]
+msn.com##div[id^="nativeAd"]
+msn.com##li[data-m*="NativeAdItem"] > a > *
+msn.com##li[data-provider="gemini"]
+msn.com##li[data-provider="outbrain"]
+msn.com##msft-article-card[class=""]
+msn.com##msft-content-card[data-t*="NativeAd"]
+msn.com##msft-content-card[href^="https://api.taboola.com/"]
+msn.com##msft-content-card[id^="contentcard_nativead-"]
+msn.com##msn-info-pane-panel[id^="tab_panel_nativead-"]
+msn.com##partner-upsell-card
+! Bing
+bing.com###bepfo.popup[style^="visibility: visible"]
+bing.com##.ad_sc
+bing.com##.b_ad
+bing.com##.b_adBottom
+bing.com##.b_adLastChild
+bing.com##.b_adPATitleBlock
+bing.com##.b_spa_adblock
+bing.com##.mapsTextAds
+bing.com##.mma_il
+bing.com##.pa_sb
+bing.com##.productAd
+bing.com##.text-ads-container
+bing.com##[id$="adsMvCarousel"]
+bing.com##a[href*="/aclick?ld="]
+bing.com##div[aria-label$="ProductAds"]
+bing.com##div[class="ins_exp tds"]
+bing.com##div[class="ins_exp vsp"]
+
+! *** easylist:easylist/easylist_specific_hide_abp.txt ***
+acmemarkets.com,albertsons.com,andronicos.com,carrsqc.com,haggen.com,jewelosco.com,kingsfoodmarkets.com,pavilions.com,randalls.com,safeway.com,shaws.com,starmarket.com,tomthumb.com,vons.com#?#.product-card-col:-abp-contains(Sponsored)
+agoda.com#?#.PropertyCardItem:-abp-has(div:-abp-contains(Promoted))
+alibaba.com#?#.J-offer-wrapper:-abp-contains(Top sponsor listing)
+app.daily.dev#?#article:-abp-contains(Promoted)
+atlanticsuperstore.ca,fortinos.ca,loblaws.ca,maxi.ca,newfoundlandgrocerystores.ca,nofrills.ca,provigo.ca,realcanadiansuperstore.ca,valumart.ca,yourindependentgrocer.ca,zehrs.ca#?#.product-tile-group__list__item:-abp-contains(Sponsored)
+backpack.tf,backpacktf.com#?#.panel:-abp-contains(createAd)
+infographicjournal.com#?#.et_pb_widget:-abp-contains(Partners)
+infographicjournal.com#?#.et_pb_module:-abp-contains(Partners)
+infographicjournal.com#?#.et_pb_module:-abp-contains(Partners) + .et_pb_module
+telugupeople.com#?#table:-abp-has(>tbody >tr>td>a:-abp-contains(Advertisements))
+yelp.at,yelp.be,yelp.ca,yelp.ch,yelp.cl,yelp.co.jp,yelp.co.nz,yelp.co.uk,yelp.com,yelp.com.ar,yelp.com.au,yelp.com.br,yelp.com.hk,yelp.com.mx,yelp.com.ph,yelp.com.sg,yelp.com.tr,yelp.cz,yelp.de,yelp.dk,yelp.es,yelp.fi,yelp.fr,yelp.ie,yelp.it,yelp.my,yelp.nl,yelp.no,yelp.pl,yelp.pt,yelp.se#?#main[class^="searchResultsContainer"] li h2:-abp-contains(Sponsored)
+bleepingcomputer.com#?#.post_wrap:-abp-contains(AdBot)
+bolnews.com#?#[style*="center"]:-abp-contains(Ad)
+booking.com#?#div[data-testid="property-card"]:-abp-has(span:-abp-contains(Promoted))
+china.ahk.de#?#.b-main__section:-abp-has(h2.homepage-headline:-abp-contains(Advertisement))
+cleantechnica.com#?#.zox-side-widget:-abp-contains(/^Advertis/)
+mapchart.net#?#.row:-abp-contains(Advertisement)
+coinlisting.info#?#.panel:-abp-has(h3:-abp-contains(Sponsored Ad))
+coolors.co#?#a:-abp-has(div:last-child:-abp-contains(Hide))
+corvetteblogger.com#?#aside.td_block_template_1.widget.widget_text:-abp-has(>h4.block-title>span:-abp-contains(Visit Our Sponsors))
+cruisecritic.co.uk,cruisecritic.com#?#div[role="group"]:-abp-contains(Sponsored)
+deccanherald.com#?#div#container-text:-abp-contains(ADVERTISEMENT)
+deccanherald.com#?#span.container-text:-abp-contains(ADVERTISEMENT)
+decrypt.co#?#span:-abp-contains(AD)
+digg.com#?#article.relative:-abp-has(div:-abp-contains(SPONSORED))
+digg.com#?#article.relative:-abp-has(div:-abp-contains(SPONSORED))
+eztv.tf,eztv.yt,123unblock.bar#?#tbody:-abp-contains(WARNING! Use a)
+filehippo.com#?#article.card-article:-abp-has(span.card-article__author:-abp-contains(Sponsored Content))
+freshdirect.com#?#.swiper-slide:-abp-contains(Sponsored)
+gamersnexus.net#?#.moduleContent:-abp-contains(Advertisement)
+hannaford.com#?#.header-2:-abp-contains(Sponsored Suggestions)
+heb.com#?#div[class^="sc-"]:-abp-has(>div[data-qe-id="productCard"]:-abp-contains(Promoted))
+instagram.com#?#div[style="max-height: inherit; max-width: inherit; display: none !important;"]:-abp-has(span:-abp-contains(Paid partnership with ))
+instagram.com#?#div[style="max-height: inherit; max-width: inherit; display: none !important;"]:-abp-has(span:-abp-contains(Paid partnership))
+instagram.com#?#div[style="max-height: inherit; max-width: inherit;"]:-abp-has(span:-abp-contains(Paid partnership with ))
+linkedin.com#?#div.feed-shared-update-v2:-abp-has(span.update-components-actor__description:-abp-contains(/Anzeige|Sponsored|Promoted|Dipromosikan|Propagováno|Promoveret|Gesponsert|Promocionado|促銷內容|Post sponsorisé|프로모션|Post sponsorizzato|广告|プロモーション|Treść promowana|Patrocinado|Promovat|Продвигается|Marknadsfört|Nai-promote|ได้รับการโปรโมท|Öne çıkarılan içerik|Gepromoot|الترويج/))
+linkedin.com#?#div.feed-shared-update-v2:-abp-has(span.update-components-actor__sub-description:-abp-contains(/Anzeige|Sponsored|Promoted|Dipromosikan|Propagováno|Promoveret|Gesponsert|Promocionado|促銷內容|Post sponsorisé|프로모션|Post sponsorizzato|广告|プロモーション|Treść promowana|Patrocinado|Promovat|Продвигается|Marknadsfört|Nai-promote|ได้รับการโปรโมท|Öne çıkarılan içerik|Gepromoot|الترويج/))
+loblaws.ca,provigo.ca,valumart.ca,yourindependentgrocer.ca,zehrs.ca#?#.chakra-container:-abp-contains(Featured Items)
+lovenovels.net#?#center:-abp-contains(Advertisement)
+noelleeming.co.nz#?#div.product-tile:-abp-has(span:-abp-contains(Sponsored))
+noon.com#?#span[class*="productContaine"]:-abp-has(div:-abp-contains(Sponsored))
+nordstrom.com#?#.ivm_G:-abp-contains(Sponsored)
+petco.com#?#[class^="CitrusCatapult-styled__LeftContent"]:-abp-has(div:-abp-contains(Sponsored))
+petco.com#?#[class^="HorizontalWidget"]:-abp-has(div:-abp-contains(Sponsored))
+petco.com#?#li:-abp-contains(Sponsored)
+priceline.com#?#div[data-testid^="HTL_NEW_LISTING_CARD_"]:-abp-has(div:-abp-contains(Promoted))
+rawstory.com#?#.body-description > div:-abp-contains(ADVERTISEMENT)
+regex101.com#?#div > header + div > div + div:-abp-contains(Sponsors)
+search.yahoo.com#?#div.mb-28:-abp-has(span:-abp-contains(Ads))
+seattleweekly.com#?#.marketplace-row:-abp-contains(Sponsored)
+sephora.com#?#div[class^="css-"]:-abp-has(>a:-abp-has(span:-abp-contains(Sponsored)))
+shipt.com#?#li[class$="eBAnBw"]:-abp-contains(Sponsored)
+shipt.com#?#div.swiper-slide:-abp-contains(Sponsored)
+sprouts.com#?#li.product-wrapper:-abp-has(span:-abp-contains(Sponsored))
+target.com#?#.ProductRecsLink-sc-4mw94v-0:-abp-has(p:-abp-contains(sponsored))
+target.com#?#div[data-test="@web/ProductCard/ProductCardVariantAisle"]:-abp-contains(Sponsored)
+target.com#?#div[data-test="@web/site-top-of-funnel/ProductCardWrapper"]:-abp-contains(sponsored)
+tossinggames.com#?#tbody:-abp-contains(Please visit our below advertisers)
+trends.gab.com#?#li.list-group-item:-abp-contains(Sponsored content)
+tripadvisor.com#?#.cAWGu:-abp-has(a:-abp-contains(Similar Sponsored Properties))
+twitter.com#?#h2[role="heading"]:-abp-contains(/Promoted|Gesponsert|Promocionado|Sponsorisé|Sponsorizzato|Promowane|Promovido|Реклама|Uitgelicht|Sponsorlu|Promotert|Promoveret|Sponsrad|Mainostettu|Sponzorováno|Promovat|Ajánlott|Προωθημένο|Dipromosikan|Được quảng bá|推廣|推广|推薦|推荐|プロモーション|프로모션|ประชาสมพนธ|परचरत|বজঞপত|تشہیر شدہ|مروج|تبلیغی|מקודם/)
+vofomovies.info#?#a13:-abp-contains( Ad)
+wayfair.com#?#div[data-hb-id="Grid.Item"]:-abp-has(div.FeaturedProductFlag:-abp-contains(Sponsored))
+winaero.com#?#p:-abp-contains(Advertisement)
+
+! *** easylist:easylist_adult/adult_specific_hide.txt ***
+virtuagirlgirls.com###DynamicBackgroundWrapper
+porndr.com###PD-Under-player
+deviants.com###_iframe_content
+swfchan.com###aaaa
+javgg.net###adlink
+h-flash.com###ads_2
+badassbitch.pics###adv
+flyingjizz.com###adv_inplayer
+milffox.com###advertising
+instantfap.com###af
+pervclips.com###after-adv
+str8ongay.com###alfa_promo_parent
+sunporno.com###atop
+literotica.com###b-top
+massfans.cc,massrips.cc###banner
+pornchimp.com###banner-container
+massfans.cc,massrips.cc###banner2
+massfans.cc,massrips.cc###banner4
+filtercams.com###bannerFC
+cuntest.net###banners
+fakings.com,nigged.com###banners_footer
+lewdspot.com,mopoga.com###belowGameAdContainerPause
+cockdude.com###beside-video-ver2
+sexyandfunny.com###best-friends
+pussyspace.com###bhcr
+euroxxx.net###block-15
+hentaiprn.com###block-27
+jav-jp.com###block-29
+toppixxx.com###bottom
+xxxdan.com,xxxdan3.com###bottom-line
+cockdude.com###box-txtovka-con
+eporner.com###btasd
+sexu.site###closeplay
+anysex.com###content > .main > .content_right
+imagebam.com###cs-link
+hentaiprn.com###custom_html-19
+celebritymovieblog.com,interracial-girls.com###custom_html-2
+watchjavonline.com###custom_html-3
+zhentube.com###custom_html-38
+dpfantasy.org,hotcelebshome.com###custom_html-4
+hentai7.top###custom_html-6
+eporner.com###deskadmiddle
+hentai-cosplays.com,hentai-img.com###display_image_detail > span
+javguard.xyz###dl > a[target="_blank"][id]
+thehun.net###dyk_right
+youjizz.com###englishPr
+porntrex.com###exclusive-link
+namethatporn.com###fab_blacko
+dailyporn.club###fixedban
+212.32.226.234###floatcenter
+anysex.com###fluid_theatre > .center
+pussy.org###footZones
+youjizz.com###footer
+69gfs.com###footer .thumbs
+sunporno.com###footer_a
+mopoga.com###fpGMcontainer
+girlsofdesire.org###gal_669
+perfectgirls.net###hat_message
+yourlust.com###headC
+nangaspace.com###header
+aan.xxx###header-banner
+youtubelike.com###header-top
+manga-miz.vy1.click###header_banner
+pornpics.network###hidden
+javhd.today###ics
+porngameshub.com###im-container
+guyswithiphones.com###imglist > .noshadow
+maturesladies.com###inVideoInner
+hotmovs.com###in_va
+youngamateursporn.com###inplayer_block
+freebunker.com,imgcarry.com,pornbus.org###introOverlayBg
+hentaiprn.com###l_340
+postyourpuss.com###leaderboard
+xfantasy.su###listing-ba
+redtube.com###live_models_row_wrap
+bootyoftheday.co###lj
+maturetubehere.com###lotal
+4tube.com###main-jessy-grid
+anysex.com,jizzberry.com###main_video_fluid_html_on_pause
+peekvids.com###mediaPlayerBanner
+pornvalleymedia.net###media_image-81
+pornvalleymedia.net###media_image-82
+pornvalleymedia.net###media_image-83
+pornvalleymedia.net###media_image-84
+pornvalleymedia.net###media_image-86
+pornvalleymedia.net###media_image-87
+pornvalleymedia.net###media_image-88
+pornvalleymedia.net###media_image-90
+vpornvideos.com###mn-container
+gifsfor.com###mob_banner
+whentai.com###modalegames
+eporner.com###movieplayer-box-adv
+7mmtv.tv###mvspan_2_s_k_i_p
+cockdude.com###native-boxes-2-ver2
+amateur8.com,maturetubehere.com###nopp
+flashx.tv,xrares.com###nuevoa
+scrolller.com###object_container
+youjizz.com###onPausePrOverlay
+hentaimama.io,underhentai.net,watchhentai.net###overlay
+porn300.com,porndroids.com###overlay-video
+22pixx.xyz,imagevenue.com###overlayBg
+hentaiff.com###overplay
+video.laxd.com###owDmcIsUc
+nudevista.at,nudevista.com###paysite
+redtube.com,redtube.com.br,redtube.net,youporngay.com###pb_block
+pornhub-com.appspot.com,pornhub.com,pornhub.net,youporn.com###pb_template
+youporngay.com###pbs_block
+ggjav.com,ggjav.tv###pc_instant
+imagearn.com###picBanner
+7mmtv.tv###player-container
+hentai2w.com,iporntoo.com,xhentai.tv###playerOverlay
+ebony8.com,lesbian8.com,maturetubehere.com###player_add
+redtube.com###popsByTrafficJunky
+javtrailers.com###popunderLinkkkk
+jav321.com###popup-container
+sextvx.com###porntube_hor_bottom_ads
+thejavmost.com###poster
+katestube.com###pre-block
+fetishshrine.com###pre-spots
+fapxl.com,javtitan.com,thejavmost.com,tojav.net###preroll
+alotav.com,javbraze.com,javdoe.fun,javdoe.sh,javhat.tv,javhd.today,javseen.tv,javtape.site###previewBox
+youporngay.com###producer
+celebjihad.com###pud
+bootyoftheday.co###random-div-wrapper
+cockdude.com###related-boxes-footer-ver2
+freebdsmxxx.org###right
+lewdspot.com###rightSidebarAdContainerPause
+youjizz.com###rightVideoPrs
+sexuhot.com###right_div_1
+sexuhot.com###right_div_2
+badjojo.com###rightcol
+onlyporn.tube,porntop.com###s-suggesters
+homemade.xxx###scrollhere
+sexyandfunny.com###sexy-links
+javtiful.com###showerm
+3movs.com###side_col_video_view
+fc2covid.com###sidebar > .widget_block
+vndevtop.com###sidebar_right
+pornhub.com###singleFeedSection > .emptyBlockSpace
+adult-sex-games.com,postyourpuss.com###skyscraper
+hentaifox.com###slider
+javfor.tv###smac12403o0
+xbooru.com,xxxymovies.com###smb
+instawank.com###snackbar
+hd-easyporn.com###special_column
+megatube.xxx###sponsor-widget
+flingtube.com###sponsoredBy
+w3avenue.com###sponsorsbox
+pornfap.tv###spot-player
+hd21.com,winporn.com###spot_video_livecams
+hd21.com,winporn.com###spot_video_underplayer_livecams
+maxjizztube.com,yteenporn.com###spotxt
+gotgayporn.com###ss_bar
+oldies.name###stop_ad2
+pascol.sbs###teaser3
+trannyvideosxxx.com###text-2
+hentaimama.io###text-3
+hentaimama.io,leaktape.com###text-5
+theboobsblog.com###text-74
+hentai-sharing.net###text-9
+theboobsblog.com###text-94
+69gfs.com,allureamateurs.net,mataporno.com,sexmummy.com,teenwantme.com,worldgatas.com,xpg.com.br###topbar
+ohentai.org###topdetailad
+motherless.com###topsites
+pussycatxx.com,zhentube.com###tracking-url
+creampietubeporn.com,fullxxxtube.com,xxxxsextube.com###ubr
+hd-easyporn.com###udwysI3c7p
+usasexguide.nl###uiISGAdFooter
+pervclips.com###under-video
+wetpussygames.com###under728
+fakings.com###undervideo
+kisscos.net###v-overlay
+homemoviestube.com###v_right
+xvideos.com###video-sponsor-links
+drtuber.com###video_list_banner
+hentaiplay.net###video_overlays
+redtube.com###video_right_col > .clearfix
+thisav.com###vjs-banner-container
+mrstiff.com###xdv-preroll
+gosexpod.com###xtw
+porndroids.com##.CDjtesb7pU__video-units
+bellesa.co##.Display__RatioOuter-hkc90m-0
+beeg.com##.GreyFox
+redgifs.com##.LaPF7yJs
+topinsearch.com##.TelkiTeasersBlock
+hentaivideo.tube##.UVPAnnotationJavascriptNormal
+xtube.com##.ZBTBTTr93ez9.ktZk9knDKFfB
+porndoe.com##.\-f-banners
+xhamster.com##._029ef-containerBottomSpot
+xhamster.com##._80e65-containerBottomSpot
+xhamster.com##._80e65-containerPauseSpot
+tubepornclassic.com##.___it0h1l3u2se2lo
+pichunter.com##.__autofooterwidth
+sunporno.com##.a-block
+pornsos.com##.a-box
+7mm001.com,7mmtv.sx##.a-d-block
+porngem.com,uiporn.com##.a-d-v
+bravoteens.com##.a352
+china-tubex.site,de-sexy-tube.ru##.aBlock
+namethatporn.com##.a_br_b
+upornia.com##.aa_label
+namethatporn.com##.aaaabr
+pimpandhost.com##.aaablock_yes
+pimpandhost.com##.ablock_yes
+cambb.xxx,chaturbate.com,dlgal.com,playboy.com,rampant.tv,sex.com,signbucks.com,tallermaintenancar.com,tehvids.com,thehentaiworld.com,thehun.net,tiktits.com,uflash.tv,xcafe.com##.ad
+x13x.space##.ad-banner
+coomer.party,coomer.su,kemono.party,kemono.su,pinflix.com,urlgalleries.net##.ad-container
+xnxx.com##.ad-footer
+xtube.com##.adContainer
+iporntoo.com##.adbox-inner
+ftopx.com##.add-block
+sex3.com##.add-box
+playvids.com##.add_href_jsclick
+babesandstars.com,cam-video.xxx,crazyporn.xxx,cumlouder.com,gosexy.mobi,hoes.tube,hog.tv,javseen.tv,love4porn.com,marawaresearch.com,mobilepornmovies.com,mypornstarbook.net,pichunter.com,thisav.com##.ads
+pornx.to##.ads-above-single-player
+video.laxd.com##.ads-container
+cumlouder.com##.ads__block
+porn87.com##.ads_desktop
+tube8.com,tube8.es,tube8.fr##.adsbytrafficjunky
+pornpics.com,pornpics.de##.adss-rel
+androidadult.com##.adswait
+hipsternudes.com##.adultfriendfinder-block
+anyporn.com,cartoon-sex.tv,oncam.me,pervertslut.com,theyarehuge.com,tiktits.com,webanddesigners.com##.adv
+uiporn.com##.adv-in-video
+sex3.com##.adv-leftside
+roleplayers.co##.adv-wrap
+freebdsmxxx.org##.adv315
+perfectgirls.net##.adv_block
+alohatube.com,reddflix.com##.advbox
+alohatube.com##.advboxemb
+ftopx.com,gayboystube.com,hungangels.com##.advert
+cumlouder.com,flyingjizz.com,gotporn.com,japan-whores.com,porntube.com##.advertisement
+katestube.com,sleazyneasy.com,vikiporn.com,wankoz.com##.advertising
+porngals4.com##.afb0
+porngals4.com##.afb1
+porngals4.com##.afb2
+hentai2w.com##.aff-col
+hentai2w.com##.aff-content-col
+porngals4.com##.affl
+cockdude.com##.after-boxes-ver2
+hentaidude.xxx##.ai_widget
+hentai2read.com##.alert-danger
+dvdgayonline.com##.aligncenter
+punishworld.com##.alrt-ver2
+freeadultcomix.com##.anuncios
+hotmovs.com##.app-banners
+hotmovs.tube##.app-banners__wrapper
+fuqer.com##.area
+sextb.net##.asg-overlay
+hobby.porn##.asg-vast-overlay
+porndictator.com,submityourflicks.com##.aside > div
+str8ongay.com##.aside-itempage-col
+ad69.com##.aside-section
+hd21.com##.aside_video
+avn.com##.avn-article-tower
+mrskin.com##.az
+fapeza.com##.azz_div
+gayporno.fm##.b-content__aside-head
+onlydudes.tv##.b-footer-place
+onlydudes.tv##.b-side-col
+japan-whores.com##.b-sidebar
+rat.xxx##.b-spot
+me-gay.com##.b-uvb-spot
+buondua.com##.b1a05af5ade94f4004a7f9ca27d9eeffb
+buondua.com##.b2b4677020d78f744449757a8d9e94f28
+pornburst.xxx##.b44nn3rss
+buondua.com##.b489c672a2974fbd73005051bdd17551f
+dofap.com##.b_videobot
+justpicsplease.com,xfantasy.su##.ba
+dominationworld.com,femdomzzz.com##.ban-tezf
+pornburst.xxx##.bann3rss
+18teensex.tv,3movs.xxx,adultwebmarket.com,amamilf.com,amateurelders.com,analpornpix.com,babesmachine.com,beachpornpics.com,bikinipornpics.com,bizzarepornpics.com,bukkakepornpics.com,castingpornpics.com,cfnmpornpics.com,chaturbate.com,classicpornpics.com,creampiepornpics.com,cuckoldpornpics.com,cumshotpornpics.com,eldersfaces.com,facialpornpics.com,faperson.com,fboomporn.com,freepornpicss.com,gramateurs.com,grannarium.com,handjobpornpics.com,happysex.ch,hiddenhomemade.com,imagezog.com,its.porn,jackoffson.com,jerkoffer.com,kawaiihentai.com,legalporn4k.com,lyama.net,maturator.com,maturenudism.com,milffox.com,nonameporn.com,oldgf.com,oldies.name,oldnudism.com,paradisehill.cc,picschan.com,picsleaks.com,player3x.xyz,playporngames.com,playsexgames.xxx,playvids.com,porngames.com,private.com,publicpornpics.com,realelders.com,submittedgf.com,swingerspornpics.com,threesomepornpics.com,uniformpornpics.com,upskirtpornpics.com,video.laxd.com,vidxnet.com,vikiporn.com,vjav.com,voyeurpornpics.com,wankerson.com,watchhentaivideo.com,waybig.com,xanalsex.com,xbabe.com,xcum.com,xfreepornpic.com,xfreesexpic.com,xfreexxx.com,xgrannypics.com,xhomemadeporn.com,xmaturewoman.com,xmaturewomen.com,xnudepics.com,xpiglet.com,xpornophoto.com,xpornophotos.com,xpornopics.com,xpornpicture.com,xpornpix.com,xpussypics.com,xwifepics.com,xworldsex.com,xxxpicsxxx.com,xxxpornpix.com,youcanfaptothis.com,yourdailygirls.com,youx.xxx##.banner
+javfor.tv##.banner-c
+cumlouder.com##.banner-frame
+grannymommy.com##.banner-on-player
+freeones.com##.banner-placeholder
+babesandstars.com##.banner-right
+javfor.tv##.banner-top-b
+ok.xxx,pornhat.com##.banner-wrap-desk
+perfectgirls.net##.banner-wrapper
+tnaflix.com##.bannerBlock
+watchhentaivideo.com##.bannerBottom
+pornshare.biz##.banner_1
+pornshare.biz##.banner_2
+pornshare.biz##.banner_3
+yourlust.com##.banner_right_bottoms
+camporn.to,camseek.tv,camstreams.tv,sexu.com##.banners
+xxxvogue.net##.banners-container
+bubbaporn.com,kalporn.com,koloporno.com,pornodingue.com,pornodoido.com,pornozot.com,serviporno.com,voglioporno.com##.banners-footer
+paradisehill.cc##.banners3
+paradisehill.cc##.banners4
+ratemymelons.com##.bannus
+yourdarkdesires.com##.battery
+fap18.net,fuck55.net,tube.ac,tube.bz##.bb_desktop
+mofosex.net##.bb_show_5
+hotcelebshome.com##.bcpsttl_name_listing
+ok.xxx,pornhat.com##.before-player
+porndoe.com##.below-video
+cockdude.com##.beside-video-ver2
+wapbold.com,wapbold.net##.bhor-box
+hqporner.com##.black_friday
+babestare.com##.block
+alphaporno.com,tubewolf.com##.block-banner
+urgayporn.com##.block-banvert
+xxbrits.com##.block-offer
+3prn.com##.block-video-aside
+blogvporn.com##.blue-btns
+xtube.com##.bm6LRcdKEZAE
+smutty.com##.bms_slider_div
+ok.porn,pornhat.com##.bn
+ok.xxx##.bn-title
+xbabe.com##.bnnrs-aside
+alphaporno.com,crocotube.com,hellporno.com,tubewolf.com,xbabe.com,xcum.com##.bnnrs-player
+pornogratisdiario.com,xcafe.com##.bnr
+porngames.games##.bnr-side
+ok.porn,ok.xxx,oldmaturemilf.com,pornhat.com,pornyoungtube.tv##.bns-bl
+sexsbarrel.com,zingyporntube.com##.bns-place-ob
+xnxxvideoporn.com##.bot_bns
+jagaporn.com##.botad
+pornoreino.com##.bottom-bang
+hentaigamer.org##.bottom-banner-home
+alphaporno.com,katestube.com,sleazyneasy.com,vikiporn.com##.bottom-banners
+elephanttube.world##.bottom-block
+dailyporn.club,risextube.com##.bottom-blocks
+fetishshrine.com##.bottom-content
+katestube.com##.bottom-items
+pornwhite.com,teenpornvideo.xxx##.bottom-spots
+youtubelike.com##.bottom-thumbs
+youtubelike.com##.bottom-top
+xhamster.com##.bottom-widget-section
+rexxx.com##.bottom_banners
+porn-plus.com##.bottom_player_a
+dixyporn.com##.bottom_spot
+sexvid.xxx##.bottom_spots
+javlibrary.com##.bottombanner2
+hd-easyporn.com##.box
+zbporn.com##.box-f
+bravotube.net##.box-left
+sexvid.xxx##.box_site
+barscaffolding.co.uk,capitalregionusa.xyz,dcraddock.uk,eegirls.com,javbebe.com,javxxoo.com,pornofilmes.com,pornstory.net,sexclips.pro,vietfuck.com,xxx-picture.com##.boxzilla-container
+barscaffolding.co.uk,capitalregionusa.xyz,dcraddock.uk,eegirls.com,javbebe.com,javxxoo.com,pornofilmes.com,pornstory.net,sexclips.pro,vietfuck.com,xxx-picture.com##.boxzilla-overlay
+hentaianimedownloads.com##.bp_detail
+bravotube.net,spanishporn.com.es##.brazzers
+xozilla.com##.brazzers-link
+kompoz2.com,pornvideos4k.com##.brs-block
+teensforfree.net##.bst1
+realgfporn.com##.btn-info
+xcum.com##.btn-ponsor
+cinemapee.com##.button
+video.laxd.com##.c-ad-103
+redporn.porn##.c-random
+tiktits.com##.callback-bt
+pornpics.vip,xxxporn.pics##.cam
+xnxxvideos.rest##.camitems
+winporn.com##.cams
+theyarehuge.com##.cams-button
+tnapics.com##.cams_small
+peekvids.com##.card-deck-promotion
+sxyprn.com##.cbd
+stepmom.one##.cblidovr
+stepmom.one##.cblrghts
+porntry.com##.center-spot
+fakings.com##.centrado
+thefappeningblog.com##.cl-exl
+bigtitsgallery.net##.classifiedAd
+teenanal.co##.clickable-overlay
+xhamster.com##.clipstore-bottom
+sunporno.com##.close-invid
+fap-nation.com,fyptt.to,gamegill.com,japaneseasmr.com##.code-block
+tube8.com,tube8.es,tube8.fr##.col-3-lg.col-4-md.col-4
+playvids.com##.col-lg-6.col-xl-4
+whoreshub.com##.col-second
+totsantcugat.info##.col-sm-6 > [href="http://totsantcugat.info/wp-content/video.php"]
+hentaiworld.tv##.comments-banners
+perfectgirls.net##.container + div + .additional-block-bg
+pornwhite.com##.container-aside
+fetishshrine.com##.container-side
+pornfap.tv##.conteiner_info
+senzuri.tube##.content > div > .hv-block-transparent
+sleazyneasy.com,wankoz.com##.content-aside
+watchmygf.me##.content-footer
+xxxdessert.com##.content-gallery_banner
+sexyandfunny.com##.content-source
+iwara.tv##.contentBlock__content
+youporngay.com##.contentPartner
+sexu.site##.content__top
+xcafe.com##.content_source
+gottanut.com##.coverUpVid-Dskt
+forced-tube.net,hqasianporn.org##.coverup
+shemale777.com##.covid19
+4tube.com##.cpp
+bootyheroes.com##.cross-promo-bnr
+3movs.com,fapality.com##.cs
+mylust.com##.cs-bnr
+rat.xxx,zbporn.tv##.cs-holder
+zbporn.com##.cs-link-holder
+hdtube.porn,pornid.xxx,rat.xxx##.cs-under-player
+watchmygf.mobi##.cs_info
+watchmygf.me##.cs_text_link
+crocotube.com##.ct-video-ntvs
+h2porn.com##.cube-thumbs-holder
+worldsex.com##.currently-blokje-block-inner
+alloldpics.com,sexygirlspics.com##.custom-spot
+worldsex.com##.dazone
+faptor.com##.dblock
+anysex.com##.desc.type2
+rule34.xxx##.desktop
+theyarehuge.com##.desktop-spot
+inxxx.com,theyarehuge.com##.desktopspot
+cartoonpornvideos.com##.detail-side-banner
+hentaicity.com##.detail-side-bnr
+spankbang.mov##.div_pop
+xxxporn.pics##.download
+sexvid.porn,sexvid.pro,sexvid.xxx##.download_link
+drtuber.com##.drt-sponsor-block
+drtuber.com,iceporn.com,nuvid.com,proporn.com,viptube.com,winporn.com##.drt-spot-box
+pornsex.rocks##.dump
+januflix.expert##.e3lan
+youporngay.com##.e8-column
+pornx.to##.elementor-element-e8dcf4f
+porngifs2u.com##.elementor-widget-posts + .elementor-widget-heading
+rare-videos.net##.embed-container
+vxxx.com##.emrihiilcrehehmmll
+tsumino.com##.erogames_container
+upornia.com,upornia.tube##.eveeecsvsecwvscceee
+eromanga-show.com,hentai-one.com,hentaipaw.com##.external
+lewdzone.com##.f8rpo
+porngem.com##.featured-b
+sss.xxx##.fel-item
+tuberel.com##.fel-list
+javfor.tv##.fel-playclose
+hotmovs.com,thegay.com##.fiioed
+sexyandfunny.com##.firstblock
+ah-me.com,gaygo.tv##.flirt-block
+asiangaysex.net,gaysex.tv##.float-ck
+risextube.com##.floating
+hentaiworld.tv##.floating-banner
+xgroovy.com##.fluid-b
+yourlust.com##.fluid_html_on_pause
+xgroovy.com##.fluid_next_video_left
+xgroovy.com##.fluid_next_video_right
+stileproject.com##.fluid_nonLinear_bottom
+cbhours.com##.foo2er-section
+porn.com##.foot-zn
+pornburst.xxx##.foot33r-iframe
+hclips.com,thegay.com,tporn.xxx,tubepornclassic.com##.footer-banners
+hentaiworld.tv##.footer-banners-iframe
+xcafe.com##.footer-block
+pornfaia.com##.footer-bnrz
+youporn.com,youporngay.com##.footer-element-container
+pornburst.xxx##.footer-iframe
+4tube.com##.footer-la-jesi
+4kporn.xxx,alotporn.com,amateurporn.co,camstreams.tv,danude.com,fpo.xxx,hoes.tube,scatxxxporn.com,xasiat.com##.footer-margin
+cliniqueregain.com##.footer-promo
+cbhours.com##.footer-section
+pornhd.com##.footer-zone
+homo.xxx##.footer.spot
+badjojo.com##.footera
+mansurfer.com##.footerbanner
+videocelebs.net##.fp-brand
+xpics.me##.frequently
+onlyporn.tube##.ft
+jizzbunker.com,jizzbunker2.com##.ftrzx1
+teenpornvideo.fun##.full-ave
+kompoz2.com,pornvideos4k.com,roleplayers.co##.full-bns-block
+iceporn.com##.furtherance
+xpics.me##.future
+hdtube.porn##.g-col-banners
+youx.xxx##.gallery-link
+xxxonxxx.com,youtubelike.com##.gallery-thumbs
+porngamesverse.com##.game-aaa
+cliniqueregain.com,tallermaintenancar.com##.girl
+sexybabegirls.com##.girlsgirls
+bravoteens.com,bravotube.net##.good_list_wrap
+kbjfree.com##.h-\[250px\]
+amateur-vids.eu,leaktape.com,mature.community,mature.mom,mature.sexy,milf.community,milf.mom,milf.plus,milf.sexy##.happy-footer
+indianpornvideos2.com##.happy-footer-mobile
+hdporn92.com,koreanstreamer.xyz,leaktape.com##.happy-header
+indianpornvideos2.com##.happy-header-mobile
+cheemsporn.com,nudeof.com,sexseeimage.com,yporn.tv##.happy-inside-player
+sexseeimage.com##.happy-player-beside
+sexseeimage.com##.happy-player-under
+sexseeimage.com##.happy-section
+deepfake-porn.com,x-picture.com##.happy-sidebar
+amateur-vids.eu,camgirl-video.com,mature.community,mature.mom,mature.sexy,milf.community,milf.mom,milf.plus,milf.sexy##.happy-under-player
+redtube.com##.hd
+zbporn.com##.head-spot
+anysex.com##.headA
+xgroovy.com##.headP
+myhentaigallery.com##.header-image
+megatube.xxx##.header-panel-1
+cutegurlz.com##.header-widget
+videosection.com##.header__nav-item--adv-link
+mansurfer.com##.headerbanner
+txxx.com##.herrmhlmolu
+txxx.com##.hgggchjcxja
+porn300.com,porndroids.com##.hidden-under-920
+worldsex.com##.hide-on-mobile
+hentairules.net##.hide_on_mobile
+javgg.net##.home_iframead > a[target="_blank"] > img
+mumbaiporn.com##.hor-spots-bl
+orgasm.com##.horizontal-banner-module
+underhentai.net##.hp-float-skb
+eporner.com##.hptab
+pantiespics.net##.hth
+videosection.com##.iframe-adv
+recordbate.com##.image-box
+gotporn.com##.image-group-vertical
+top16.net##.img_wrap
+trannygem.com##.in_player_video
+vivud.com##.in_stream_banner
+sexu.site##.info
+cocoimage.com##.inner_right
+javhhh.com##.inplayer
+vivud.com##.inplayer_banners
+anyporn.com,bravoporn.com,bravoteens.com,bravotube.net##.inplb
+anyporn.com,bravotube.net##.inplb3x2
+cockdude.com##.inside-list-boxes-ver2
+playvids.com,pornflip.com##.invideoBlock
+amateur8.com##.is-av
+internationalsexguide.nl,usasexguide.nl##.isg_background_border_banner
+internationalsexguide.nl,usasexguide.nl##.isg_banner
+e-hentai.org##.itd[colspan="4"]
+amateurporn.me,eachporn.com##.item[style]
+drtuber.com##.item_spots
+pornwhite.com,sleazyneasy.com##.items-holder
+vxxx.com##.itrrciecmeh
+escortdirectory.com##.ixs-govazd-item
+alastonsuomi.com##.jb
+babesandstars.com,pornhubpremium.com##.join
+javvr.net##.jplayerbutton
+japan-whores.com##.js-advConsole
+sexlikereal.com##.js-m-goto
+pornpapa.com##.js-mob-popup
+eurogirlsescort.com##.js-stt-click > picture
+freeones.com##.js-track-event
+ts-tube.net##.js-uvb-spot
+porndig.com##.js_footer_partner_container_wrapper
+hnntube.com##.jumbotron
+xxxymovies.com##.kt_imgrc
+4tube.com##.la-jessy-frame
+hqpornstream.com##.lds-hourglass
+thehun.net##.leaderboard
+xxxpicss.com,xxxpicz.com##.left-banners
+xxxporntalk.com##.leftsidenav
+xxxvogue.net##.link-adv
+totsantcugat.info##.live > a[href="http://totsantcugat.info/wp-content/video.php"]
+spankbang.com##.live-rotate
+alloldpics.com,sexygirlspics.com##.live-spot
+spankbang.com##.livecam-rotate
+proporn.com,vivatube.com##.livecams
+loverslab.com##.ll_adblock
+vxxx.com##.lmetceehehmmll
+javhd.run##.loading-ad
+peekvids.com##.mediaPlayerSponsored
+efukt.com##.media_below_container
+lesbianbliss.com,mywebcamsluts.com,transhero.com##.media_spot
+camcam.cc##.menu-item-5880
+empflix.com,tnaflix.com##.mewBlock
+sopornmovies.com##.mexu-bns-bl
+avn.com##.mfc
+online-xxxmovies.com##.middle-spots
+lic.me##.miniplayer
+tryindianporn.com##.mle
+hentaicore.org##.mob-lock
+rat.xxx##.mob-nat-spot
+gaymovievids.com,verygayboys.com##.mobile-random
+tube-bunny.com##.mobile-vision
+yourdarkdesires.com##.moment
+txxx.com##.mpululuoopp
+xnxxvideos.rest##.mult
+javfor.tv##.my-2.container
+jagaporn.com##.nativad
+yourlust.com##.native-aside
+pornhd.com##.native-banner-wrapper
+cockdude.com##.native-boxes-2-ver2
+cockdude.com##.native-boxes-ver2
+fetishshrine.com,pornwhite.com,sleazyneasy.com##.native-holder
+ggjav.com##.native_ads
+anysex.com##.native_middle
+fapality.com##.nativeaside
+fapeza.com##.navbar-item-sky
+miohentai.com##.new-ntv
+xmissy.nl##.noclick-small-bnr
+pornhd.com##.ntv-code-container
+fapality.com##.ntw-a
+rule34.xxx##.nutaku-mobile
+boundhub.com##.o3pt
+bdsmx.tube##.oImef0
+lustgalore.com##.opac_bg
+pornchimp.com,teenmastube.com,watchmygf.mobi##.opt
+bbporntube.pro##.opve-bns-bl
+bbporntube.pro##.opve-right-player-col
+hentaistream.com##.othercontent
+beemtube.com##.overspot
+javtiful.com##.p-0[style="margin-top: 0.45rem !important"]
+zbporn.com##.p-ig
+empflix.com##.pInterstitialx
+hobby.porn##.pad
+xxxdan3.com##.partner-site
+hclips.com,hotmovs.tube##.partners-wrap
+xfantazy.com##.partwidg1
+fapnado.xxx##.pause-ad-pullup
+empflix.com##.pause-overlay
+porn87.com##.pc_instant
+ebony8.com,maturetubehere.com##.pignr
+bigtitslust.com,sortporn.com##.pignr.item
+boundhub.com##.pla4ce
+camvideos.tv,exoav.com,jizzoncam.com,rare-videos.net##.place
+3movs.com##.player + .aside
+alotporn.com##.player + center
+xhamster.com##.player-add-overlay
+katestube.com##.player-aside
+vivud.com,zmovs.com##.player-aside-banners
+sexu.site##.player-block__line
+ok.xxx,pornhat.com,xxxonxxx.com##.player-bn
+sexvid.xxx##.player-cs
+videosection.com##.player-detail__banners
+7mmtv.sx##.player-overlay
+cliniqueregain.com##.player-promo
+sexu.site##.player-related
+blogbugs.org,tallermaintenancar.com,zuzandra.com##.player-right
+3movs.com##.player-side
+sexvid.porn,sexvid.pro,sexvid.xxx##.player-sponsor
+xvideos.com,xvideos.es##.player-video.xv-cams-block
+porn18videos.com##.playerRight
+sexu.com##.player__side
+pervclips.com##.player_adv
+xnxxvideoporn.com##.player_bn
+txxx.com##.polumlluluoopp
+porntrex.com##.pop-fade
+fapnado.com,young-sexy.com##.popup
+pornicom.com##.pre-ad
+porntube.com##.pre-footer
+sleazyneasy.com##.pre-spots
+xnxxvideos.rest##.prefixat-player-promo-col
+recordbate.com##.preload
+japan-whores.com##.premium-thumb
+cam4.com##.presentation
+pornjam.com##.productora
+perfectgirls.net,xnostars.com##.promo
+nablog.org##.promo-archive-all
+xhamster.com##.promo-message
+nablog.org##.promo-single-3-2sidebars
+perfectgirls.net##.promo__item
+viptube.com##.promotion
+3dtube.xxx,milf.dk,nakedtube.com,pornmaki.com##.promotionbox
+tnaflix.com##.pspBanner
+spankbang.com##.ptgncdn_holder
+pornjam.com##.publ11s-b0ttom
+watchmygf.me##.publicity
+freemovies.tv##.publis-bottom
+pornjam.com##.r11ght-pl4yer-169
+pornjam.com##.r1ght-pl4yer-43
+gaymovievids.com,me-gay.com,ts-tube.net,verygayboys.com##.random-td
+tnaflix.com##.rbsd
+vxxx.com##.recltiecrrllt
+xnxxvideos.rest##.refr
+svscomics.com##.regi
+nuvid.com##.rel_right
+cockdude.com##.related-boxes-footer-ver2
+bestjavporn.com##.related-native-banner
+cumlouder.com##.related-sites
+sexhd.pics##.relativebottom
+pervclips.com,vikiporn.com##.remove-spots
+cam4.com##.removeAds
+cyberleaks.to##.responsive_banner
+cumlouder.com##.resumecard
+porndroids.com,pornjam.com##.resumecard__banner
+bdsmx.tube,hotmovs.com,javdoe.fun,javdoe.sh,javtape.site,onlyporn.tube,porntop.com##.right
+infospiral.com##.right-content
+pornoreino.com##.right-side
+definebabe.com##.right-sidebar
+empflix.com##.rightBarBannersx
+gottanut.com##.rightContent-videoPage
+analsexstars.com,porn.com,pussy.org##.rmedia
+jav321.com##.row > .col-md-12 > h2
+jav321.com##.row > .col-md-12 > ul
+erofus.com##.row-content > .col-lg-2[style^="height"]
+elephanttube.world,pornid.xxx##.rsidebar-spots-holder
+jizzbunker.com,jizzbunker2.com,xxxdan.com,xxxdan3.com##.rzx1
+forum.lewdweb.net,forums.socialmediagirls.com##.samCodeUnit
+porngals4.com##.sb250
+7mm001.com,7mmtv.sx##.set_height_250
+sextb.net##.sextb_300
+gay-streaming.com,gayvideo.me##.sgpb-popup-dialog-main-div-wrapper
+gay-streaming.com,gayvideo.me##.sgpb-popup-overlay
+paradisehill.cc##.shapka
+h2porn.com##.side-spot
+sankakucomplex.com##.side300xmlc
+video.laxd.com##.side_banner
+familyporn.tv,mywebcamsluts.com,transhero.com##.side_spot
+queermenow.net##.sidebar > #text-2
+flyingjizz.com##.sidebar-banner
+pornid.name##.sidebar-holder
+vidxnet.com##.sidebar_banner
+waybig.com##.sidebar_zing
+xxxporntalk.com##.sidenav
+myslavegirl.org##.signature
+gayck.com##.simple-adv-spot
+supjav.com##.simpleToast
+hersexdebut.com##.single-bnr
+porngfy.com##.single-sponsored
+babestare.com##.single-zone
+sexvid.xxx##.site_holder
+porn-monkey.com##.size-300x250
+simply-hentai.com##.skyscraper
+porngames.tv##.skyscraper_inner
+pornhub.com##.sniperModeEngaged
+thelittleslush.com##.snppopup
+boycall.com##.source_info
+amateurfapper.com,iceporn.tv,pornmonde.com##.sources
+hd-easyporn.com##.spc_height_80
+gotporn.com##.spnsrd
+hotgirlclub.com##.spnsrd-block-aside-250
+18porn.sex,amateur8.com,anyporn.com,area51.porn,bigtitslust.com,eachporn.com,fapster.xxx,fpo.xxx,freeporn8.com,hentai-moon.com,its.porn,izlesimdiporno.com,pervertslut.com,porngem.com,porntop.com,sexpornimages.com,sexvid.xxx,sortporn.com,uiporn.com,xhamster.com##.sponsor
+teenpornvideo.fun##.sponsor-link-desk
+teenpornvideo.fun##.sponsor-link-mob
+pornpics.com,pornpics.de##.sponsor-type-4
+nakedpornpics.com##.sponsor-wrapper
+hoes.tube,love4porn.com##.sponsorbig
+fux.com,pornerbros.com,porntube.com,tubedupe.com##.sponsored
+hoes.tube##.sponsorsmall
+3movs.com,3movs.xxx,bravotube.net,camvideos.tv,cluset.com,deviants.com,dixyporn.com,hello.porn,katestube.com,pornicom.com,sleazyneasy.com,videocelebs.net,vikiporn.com,vjav.com##.spot
+pornicom.com##.spot-after
+faptube.xyz,hqpornstream.com,magicaltube.com##.spot-block
+3movs.com##.spot-header
+katestube.com##.spot-holder
+fuqer.com##.spot-thumbs > .right
+homo.xxx##.spot.column
+drtuber.com##.spot_button_m
+3movs.com##.spot_large
+drtuber.com,thisvid.com,vivatube.com,xxbrits.com##.spots
+elephanttube.world##.spots-bottom
+rat.xxx##.spots-title
+sexvid.xxx##.spots_field
+sexvid.xxx##.spots_thumbs
+analsexstars.com##.sppc
+teenasspussy.com##.sqs
+pornstarchive.com##.squarebanner
+pornpics.com,pornpics.de##.stamp-bn-1
+lewdninja.com##.stargate
+cumlouder.com##.sticky-banner
+xxx18.uno##.sticky-elem
+xxxbule.com##.style75
+teenmushi.org##.su-box
+definebabe.com##.subheader
+pornsex.rocks##.subsequent
+tporn.xxx##.sug-bnrs
+hclips.com##.suggestions
+pornmd.com##.suggestions-box
+simply-hentai.com##.superbanner
+holymanga.net##.svl_ads_right
+tnapics.com##.sy_top_wide
+exhibporno.com##.syn
+boundhub.com##.t2op
+boundhub.com##.tab7le
+18porn.sex,18teensex.tv,429men.com,4kporn.xxx,4wank.com,alotporn.com,amateurporn.co,amateurporn.me,bigtitslust.com,camwhores.tv,danude.com,daporn.com,fapnow.xxx,fpo.xxx,freeporn8.com,fuqer.com,gayck.com,hentai-moon.com,heroero.com,hoes.tube,intporn.com,japaneseporn.xxx,jav.gl,javwind.com,jizzberry.com,mrdeepfakes.com,multi.xxx,onlyhentaistuff.com,pornchimp.com,porndr.com,pornmix.org,rare-videos.net,sortporn.com,tabootube.xxx,watchmygf.xxx,xcavy.com,xgroovy.com,xxxshake.com##.table
+sxyprn.com##.tbd
+amateurvoyeurforum.com##.tborder[width="99%"][cellpadding="6"]
+fap-nation.org##.td-a-rec
+camwhores.tv##.tdn
+pronpic.org##.teaser
+onlytik.com##.temporary-real-extra-block
+avn.com##.text-center.mb-10
+javfor.tv##.text-md-center
+cockdude.com##.textovka
+wichspornos.com##.tf-sp
+porn87.com##.three_ads
+chikiporn.com,pornq.com##.thumb--adv
+xnxx.com,xvideos.com##.thumb-ad
+pornpictureshq.com##.thumb__iframe
+toppixxx.com##.thumbad
+cliniqueregain.com,tallermaintenancar.com##.thumbs
+smutty.com##.tig_following_tags2
+drtuber.com##.title-sponsored
+4wank.com,daporn.com,fpo.xxx,hentai-moon.com,pornmix.org,scatxxxporn.com##.top
+pornfaia.com##.top-banner-single
+sexvid.xxx##.top-cube
+vikiporn.com##.top-list > .content-aside
+japan-whores.com##.top-r-all
+motherless.com##.top-referers
+porngem.com,uiporn.com##.top-sponsor
+rat.xxx,zbporn.tv##.top-spot
+10movs.com##.top_banner
+ok.xxx,perfectgirls.xxx##.top_spot
+camwhores.tv##.topad
+m.mylust.com##.topb-100
+m.mylust.com##.topb-250
+itsatechworld.com##.topd
+babesmachine.com##.topline
+babesmachine.com##.tradepic
+babesandstars.com##.traders
+gayporno.fm##.traffic
+proporn.com##.trailerspots
+sexjav.tv##.twocolumns > aside
+pornguide.info##.twp-adv-header
+sexhd.pics##.tx
+boysfood.com##.txt-a-onpage
+pornid.xxx##.under-player-holder
+hdtube.porn##.under-player-link
+sexvid.xxx##.under_player_link
+thegay.com##.underplayer__info > div:not([class])
+videojav.com##.underplayer_banner
+tryindianporn.com##.uvk
+hentaiprn.com##.v-overlay
+javtiful.com##.v3sb-box
+see.xxx,tuberel.com##.vda-item
+indianpornvideos.com##.vdo-unit
+xnxxporn.video##.vertbars
+milfporn8.com,ymlporn7.net##.vid-ave-pl
+ymlporn7.net##.vid-ave-th
+pornone.com##.video-add
+ad69.com,risextube.com##.video-aside
+watchmygf.tv##.video-aside-spot
+sexseeimage.com##.video-block-happy
+pornfaia.com##.video-bnrz
+comicsxxxgratis.com,video.javdock.com##.video-container
+boyfriendtv.com##.video-extra-wrapper
+megatube.xxx##.video-filter-1
+theyarehuge.com##.video-holder > .box
+bdsmx.tube##.video-info > section
+videosection.com##.video-item--a
+videosection.com##.video-item--adv
+ok.xxx,pornhat.com##.video-link
+pornzog.com##.video-ntv
+pornhdtube.tv,recordbate.com##.video-overlay
+hotmovs.tube##.video-page > .block_label > div
+thegay.com##.video-page__content > .right
+xhtab2.com##.video-page__layout-ad
+senzuri.tube##.video-page__watchfull-special
+pornhd.com##.video-player-overlay
+palimas.org##.video-promo
+peachurbate.com##.video-right-banner
+hotmovs.tube##.video-right-top
+porntry.com,videojav.com##.video-side__spots
+pornez.net##.video-sidebar
+thegay.com##.video-slider-container
+kisscos.net##.video-sponsor
+senzuri.tube##.video-tube-friends
+xhamster.com##.video-view-ads
+china-tubex.site##.videoAd
+javynow.com##.videos-ad__ad
+porndoe.com##.videos-tsq
+zbporn.tv##.view-aside
+zbporn.com,zbporn.tv##.view-aside-block
+tube-bunny.com##.visions
+yourlust.com##.visit_cs
+eporner.com##.vjs-inplayer-container
+upornia.tube##.voiscscttnn
+japan-whores.com##.vp-info
+porndoe.com##.vpb-holder
+porndoe.com##.vpr-section
+kbjfree.com##.w-\[728px\]
+reddxxx.com##.w-screen.backdrop-blur-md
+3prn.com##.w-spots
+pornone.com##.warp
+upornia.com,upornia.tube##.wcccswvsyvk
+trannygem.com##.we_are_sorry
+porntube.com##.webcam-shelve
+spankingtube.com##.well3
+imagearn.com##.wide_banner
+bustyporn.com##.widget-friends
+rpclip.com##.widget-item-wrap
+interviews.adultdvdtalk.com##.widget_adt_performer_buy_links_widget
+hentaiprn.com,whipp3d.com##.widget_block
+arcjav.com,hotcelebshome.com,jav.guru,javcrave.com,pussycatxx.com##.widget_custom_html
+gifsauce.com##.widget_live
+totsantcugat.info##.widget_meta.widget.col-sm-3
+hentaiblue.com##.widget_text
+xhamster.com##.wio-p
+xhamster.com##.wio-pcam-thumb
+xhamster.com##.wio-psp-b
+xhamster.com,xhamster2.com##.wio-xbanner
+xhamster2.com##.wio-xspa
+xhamster.com##.wixx-ebanner
+xhamster.com##.wixx-ecam-thumb
+xhamster.com##.wixx-ecams-widget
+teenager365.com##.wps-player__happy-inside-btn-close
+pornrabbit.com##.wrap-spots
+bdsmx.tube##.wrapper > section
+porn300.com##.wrapper__related-sites
+upornia.com,upornia.tube##.wssvkvkyyee
+xhamster.com##.xplayer-b
+xhamster18.desi##.xplayer-banner
+megaxh.com##.xplayer-banner-bottom
+xhamster.com##.xplayer-hover-menu
+redgifs.com##.ySY4Rc9M
+theyarehuge.com##.yellow
+xhamster.com##.yfd-fdcam-thumb
+xhamster.com##.yfd-fdcams-widget
+xhamster.com##.yfd-fdclipstore-bottom
+xhamster.com##.yfd-fdsp-b
+xhamster.com##.yld-mdcam-thumb
+xhamster.com##.yld-mdsp-b
+xhamster.com##.ytd-jcam-thumb
+xhamster.com##.ytd-jcams-widget
+xhamster.com##.ytd-jsp-a
+xhamster.com##.yxd-jcam-thumb
+xhamster.com##.yxd-jcams-widget
+xhamster.com##.yxd-jdbanner
+xhamster.com##.yxd-jdcam-thumb
+xhamster.com##.yxd-jdcams-widget
+xhamster.com##.yxd-jdplayer
+xhamster.com##.yxd-jdsp-b
+xhamster.com##.yxd-jdsp-l-tab
+xhamster.com##.yxd-jsp-a
+faponic.com##.zkido_div
+pussy.org##.zone
+momxxxfun.com##.zone-2
+pinflix.com,pornhd.com##.zone-area
+hentai2read.com##.zonePlaceholder
+fapnado.xxx##.zpot-horizontal
+faptor.com##.zpot-horizontal-img
+fapnado.xxx##.zpot-vertical
+jizzbunker2.com,xxxdan.com,xxxdan3.com##.zx1p
+tnaflix.com##.zzMeBploz
+porn300.com,pornodiamant.xxx##[class^="abcnn_"]
+beeg.porn##[class^="bb_show_"]
+setdartwatches.com##[class^="boxzilla-"]
+hotleaks.tv,javrank.com##[class^="koukoku"]
+whoreshub.com##[class^="pop-"]
+cumlouder.com##[class^="sm"]
+xhamster.com,xhamster.one,xhamster2.com##[class^="xplayer-banner"]
+fapnado.com##[class^="xpot"]
+porn.com##[data-adch]
+tube8.com##[data-spot-id]
+tube8.com##[data-spot]
+sxyprn.com##[href*="/re/"]
+pornhub.com,redtube.com,tube8.com,tube8.es,tube8.fr,xvideos.com,youjizz.com,youporn.com,youporngay.com##[href*="base64"]
+pornhub.com,redtube.com,tube8.com,tube8.es,tube8.fr,xvideos.com,youjizz.com,youporn.com,youporngay.com##[href*="data:"]
+doseofporn.com,jennylist.xyz##[href="/goto/desire"]
+hardcoreluv.com,imageweb.ws,pezporn.com,wildpictures.net##[href="https://nudegirlsoncam.com/"]
+perverttube.com##[href="https://usasexcams.com/"]
+brazz-girls.com##[href^="/Site/Brazzers/"]
+footztube.com##[href^="/tp/out"]
+boobieblog.com##[href^="http://join.playboyplus.com/track/"]
+thotstars.com##[href^="http://thotmeet.site/"]
+androidadult.com,homemoviestube.com##[href^="https://aoflix.com/Home"]
+hentai2read.com##[href^="https://camonster.com"]
+akiba-online.com##[href^="https://filejoker.net/invite"]
+sweethentai.com##[href^="https://gadlt.nl/"]
+usasexguide.nl##[href^="https://instable-easher.com/"]
+adultcomixxx.com##[href^="https://join.hentaisex3d.com/"]
+missav.com##[href^="https://l.hyenadata.com/"]
+clubsarajay.com##[href^="https://landing.milfed.com/"]
+javgg.net##[href^="https://onlyfans.com/action/trial/"]
+sankakucomplex.com##[href^="https://s.zlink3.com/d.php"]
+freebdsmxxx.org##[href^="https://t.me/joinchat/"]
+totsantcugat.info##[href^="https://totsantcugat.info/wp-content/"]
+sexhimmel.com##[href^="https://www.amarotic.com/"]
+porngames.club##[href^="https://www.familyporngames.games/"]
+porngames.club##[href^="https://www.porngames.club/friends/out.php"]
+koreanstreamer.xyz##[href^="https://www.saltycams.com"]
+alotporn.com,amateurporn.me##[id^="list_videos_"] > [class="item"]
+youjizz.com,youporngay.com##[img][src*="blob:"]
+tophentai.biz##[src*="hentaileads/"]
+hentaigasm.com##[src^="https://add2home.files.wordpress.com/"]
+analpornpix.com##[src^="https://analpornpix.com/t/153"]
+tubedupe.com##[src^="https://tubedupe.com/player/html.php?aid="]
+hentai-gamer.com##[src^="https://www.hentai-gamer.com/pics/"]
+pornhub.com##[srcset*="bloB:"]
+pornhub.com,redtube.com,tube8.com,tube8.es,tube8.fr,youjizz.com,youporn.com,youporngay.com##[style*="base64"]
+pornhub.com,redtube.com,tube8.com,tube8.es,tube8.fr,youjizz.com,youporn.com,youporngay.com##[style*="blob:"]:not(video)
+xozilla.com##[style="height: 220px !important; overflow: hidden;"]
+pornone.com##a[class^="listing"]
+porn.com##a[href*="&ref="]
+asspoint.com,babepedia.com,babesandstars.com,blackhaloadultreviews.com,dbnaked.com,freeones.com,gfycatporn.com,javfor.me,mansurfer.com,newpornstarblogs.com,ok.porn,porn-star.com,porn.com,porndoe.com,pornhubpremium.com,pornstarchive.com,rogreviews.com,sexyandfunny.com,shemaletubevideos.com,spankbang.com,str8upgayporn.com,the-new-lagoon.com,tube8.com,wcareviews.com,xxxonxxx.com,youporn.com##a[href*=".com/track/"]
+badjojo.com,boysfood.com,definebabe.com,efukt.com,fantasti.cc,girlsofdesire.org,imagepix.org,javfor.me,pornxs.com,shemaletubevideos.com,therealpornwikileaks.com##a[href*=".php"]
+blackhaloadultreviews.com,hentaigasm.com,javjunkies.com,masahub.net,missav.com,phun.org,porn-w.org##a[href*="//bit.ly/"]
+celeb.gate.cc##a[href*="//goo.gl/"]
+taxidrivermovie.com##a[href*="/category/"]
+nude.hu##a[href*="/click/"]
+hdzog.com,xcafe.com##a[href*="/cs/"]
+agedbeauty.net,data18.com,imgdrive.net,pornpics.com,pornpics.de,vipergirls.to##a[href*="/go/"]
+pornlib.com##a[href*="/linkout/"]
+mansurfer.com##a[href*="/out/"]
+avgle.com##a[href*="/redirect"]
+4tube.com,fux.com,pornerbros.com,porntube.com##a[href*="/redirect-channel/"]
+youpornzz.com##a[href*="/videoads.php?"]
+pornhub.com,pornhubpremium.com,pstargif.com,spankbang.com,sxyprn.com,tube8.com,tube8vip.com,xozilla.com,xxxymovies.com##a[href*="?ats="]
+adultdvdempire.com##a[href*="?partner_id="][href*="&utm_"]
+taxidrivermovie.com##a[href*="mrskin.com/"]
+adultfilmdatabase.com,animeidhentai.com,babeforums.org,bos.so,camvideos.tv,camwhores.tv,cutscenes.net,devporn.net,f95zone.to,fritchy.com,gifsauce.com,hentai2read.com,hotpornfile.org,hpjav.com,imagebam.com,imgbox.com,imgtaxi.com,motherless.com,myporn.club,oncam.me,pandamovies.pw,planetsuzy.org,pussyspace.com,redgifs.com,sendvid.com,sexgalaxy.net,sextvx.com,sexuria.com,thefappeningblog.com,vintage-erotica-forum.com,vipergirls.to,waxtube.com,xfantazy.com,yeapornpls.com##a[href*="theporndude.com"]
+bravotube.net##a[href^="/cs/"]
+sexhd.pics##a[href^="/direct/"]
+analpornpix.com##a[href^="/go/"]
+drtuber.com##a[href^="/partner/"]
+pornhub.com,spankbang.com##a[href^="http://ads.trafficjunky.net/"]
+teenmushi.org##a[href^="http://keep2share.cc/code/"]
+babesandstars.com##a[href^="http://rabbits.webcam/"]
+adultgifworld.com,babeshows.co.uk,boobieblog.com,fapnado.com,iseekgirls.com,the-new-lagoon.com##a[href^="http://refer.ccbill.com/cgi-bin/clicks.cgi?"]
+hentai-imperia.org##a[href^="http://www.adult-empire.com/rs.php?"]
+xcritic.com##a[href^="http://www.adultdvdempire.com/"][href*="?partner_id="]
+hentairules.net##a[href^="http://www.gallery-dump.com"]
+f95zone.to,pornhub.com,pornhubpremium.com,redtube.com##a[href^="https://ads.trafficjunky.net/"]
+imgsen.com##a[href^="https://besthotgayporn.com/"]
+imx.to##a[href^="https://camonster.com/"]
+redgifs.com##a[href^="https://camsfinders.com/"]
+hog.tv##a[href^="https://clickaine.com"]
+spankbang.com##a[href^="https://deliver.ptgncdn.com/"]
+hitbdsm.com##a[href^="https://go.rabbitsreviews.com/"]
+instantfap.com##a[href^="https://go.redgifcams.com/"]
+sexhd.pics##a[href^="https://go.stripchat.com/"]
+imgsen.com##a[href^="https://hardcoreincest.net/"]
+trannygem.com##a[href^="https://landing.transangelsnetwork.com/"]
+datingpornstar.com##a[href^="https://mylinks.fan/"]
+oncam.me##a[href^="https://pornwhitelist.com/"]
+oncam.me##a[href^="https://publishers.clickadilla.com/signup"]
+fans-here.com##a[href^="https://satoshidisk.com/"]
+forums.socialmediagirls.com##a[href^="https://secure.chewynet.com/"]
+smutr.com##a[href^="https://smutr.com/?action=trace"]
+pornlizer.com##a[href^="https://tezfiles.com/store/"]
+allaboutcd.com##a[href^="https://thebreastformstore.com/"]
+thotimg.xyz##a[href^="https://thotsimp.com/"]
+oncam.me##a[href^="https://torguard.net/aff.php"]
+forums.socialmediagirls.com##a[href^="https://viralporn.com/"][href*="?utm_"]
+oncam.me##a[href^="https://www.clickadu.com/?rfd="]
+myreadingmanga.info##a[href^="https://www.dlsite.com/"]
+namethatpornad.com##a[href^="https://www.g2fame.com/"]
+myreadingmanga.info##a[href^="https://www.gaming-adult.com/"]
+gotporn.com##a[href^="https://www.gotporn.com/click.php?id="]
+spankbang.com##a[href^="https://www.iyalc.com/"]
+imagebam.com,vipergirls.to##a[href^="https://www.mrporngeek.com/"]
+pimpandhost.com##a[href^="https://www.myfreecams.com/"][href*="&track="]
+barelist.com,spankingtube.com##a[onclick]
+h-flash.com##a[style^="width: 320px; height: 250px"]
+bdsmx.tube##article > section
+girlonthenet.com##aside[data-adrotic]
+xpassd.co##aside[id^="tn_ads_widget-"]
+mysexgames.com##body > div[style*="z-index:"]
+xxbrits.com##button[class^="click-fun"]
+boobieblog.com,imgadult.com,lolhentai.net,picdollar.com,porngames.com,thenipslip.com,wetpussygames.com,xvideos.name##canvas
+redtube.com##div > iframe
+motherless.com##div > table[style][border]
+publicflashing.me##div.hentry
+xxxdl.net##div.in_thumb.thumb
+underhentai.net##div[class*="afi-"]
+redtube.com##div[class*="display: block; height:"]
+redgifs.com##div[class^="AdTabs_"]
+redgifs.com##div[class^="AdUnit_"]
+camsoda.com##div[class^="AdsRight-"]
+xporno.tv##div[class^="block_ads_"]
+hpjav.top##div[class^="happy-"]
+hentaimama.io##div[class^="in-between-ad"]
+theyarehuge.com##div[data-nosnippet]
+hentai2read.com##div[data-type="leaderboard-top"]
+hentaistream.com##div[id^="adx_ad-"]
+darknessporn.com,familyporner.com,freepublicporn.com,pisshamster.com,punishworld.com,xanimu.com##div[id^="after-boxes"]
+darknessporn.com,familyporner.com,freepublicporn.com,pisshamster.com,punishworld.com,xanimu.com##div[id^="beside-video"]
+pornez.net##div[id^="cb0"]
+pornsitetest.com##div[id^="eroti-"]
+darknessporn.com,familyporner.com,freepublicporn.com,pisshamster.com,punishworld.com,xanimu.com##div[id^="native-boxes"]
+darknessporn.com,familyporner.com,freepublicporn.com,pisshamster.com,punishworld.com,xanimu.com##div[id^="related-boxes-footer"]
+pornstarbyface.com##div[id^="sponcored-content-"]
+lewdgamer.com##div[id^="spot-"]
+hentaiff.com##div[id^="teaser"]
+eromanga-show.com,hentai-one.com,hentaipaw.com##div[id^="ts_ad_"]
+pornhub.com,youporngay.com##div[onclick*="bp1.com"]
+hentaistream.com##div[style$="width:100%;height:768px;overflow:hidden;visibility:hidden;"]
+hentai.com##div[style="cursor: pointer;"]
+simpcity.su##div[style="text-align:center;margin-bottom:20px;"]
+abxxx.com,aniporn.com,missav.com,missav123.com,missav789.com,redgifs.com##div[style="width: 300px; height: 250px;"]
+sexbot.com##div[style="width:300px;height:20px;text-align:center;padding-top:30px;"]
+pornpics.network##div[style^="height: 250px;"]
+gay0day.com##div[style^="height:250px;"]
+thehentai.net##div[style^="width:300px; height:250px;"]
+javtorrent.me##div[style^="width:728px; height: 90px;"]
+rateherpussy.com##font[size="1"][face="Verdana"]
+smutty.com##iframe[scrolling="no"]
+xcafe.com##iframe[src]
+watchteencam.com##iframe[src^="http://watchteencam.com/images/"]
+komikindo.info,manga18fx.com,manhwa18.cc,motherless.com##iframe[style]
+3movs.com,ggjav.com,tnaflix.com##iframe[width="300"]
+avgle.com##img[src*=".php"]
+pornhub.com,tube8.com,tube8.es,tube8.fr,xvideos.com,youjizz.com,youporngay.com##img[src*="blob:" i]:not(video)
+4tube.com##img[src][style][width]
+pornhub.com##img[srcset]
+mature.community,mature.mom,milf.community,milf.mom,milf.plus,milf.sexy,pornhub.com,sports.sexy##img[width="300"]
+sexmummy.com##img[width="468"]
+mrjav.net##li[id^="video-interlacing"]
+boundhub.com##noindex
+pornhd.com##phd-floating-ad
+koreanstreamer.xyz##section.korea-widget
+porngifs2u.com##section[class*="elementor-hidden-"]
+redtube.com##svg
+mysexgames.com##table[height="630"]
+mysexgames.com##table[height="640"]
+motherless.com##table[style*="max-width:"]
+exoav.com##td > a[href]
+xxxcomics.org##video
+porndoe.com,tube8.es,tube8.fr,youporngay.com##video[autoplay]
+porndoe.com,redtube.com##video[autoplay][src*="blob:" i]
+porndoe.com,redtube.com##video[autoplay][src*="data:" i]
+! :has()
+porn-w.org##.align-items-center.list-row:has(.col:empty)
+picsporn.net##.box:has(> .dip-exms)
+porngames.com##.contentbox:has(a[href="javascript:void(0);"])
+porngames.com##.contentbox:has(iframe[src^="//"])
+kimochi.info##.gridlove-posts > .layout-simple:has(.gridlove-archive-ad)
+javgg.net##.home_iframead:has(> iframe)
+tokyomotion.com##.is-gapless > .has-text-centered:has(> div > .adv)
+darknessporn.com,familyporner.com,freepublicporn.com,pisshamster.com,punishworld.com,xanimu.com##.no-gutters > .col-6:has(> #special-block)
+kbjfree.com##.relative.w-full:has(> .video-card[target="_blank"])
+pornhub.com##.sectionWrapper:has(> #bottomVideos > .wrapVideoBlock)
+hentaicomics.pro##.single-portfolio:has(.xxx-banner)
+scrolller.com##.vertical-view__column > .vertical-view__item:has(> div[style$="overflow: hidden;"])
+porndoe.com##.video-item:has(a.video-item-link[ng-native-click])
+jav4tv.com##aside:has(.ads_300_250)
+youporn.com##aside:has(a.ad-remove)
+!! Advanced element hiding rules
+4wank.com#?#.video-holder > center > :-abp-contains(/^Advertisement$/)
+crocotube.com#?#.ct-related-videos-title:-abp-contains(Advertisement)
+crocotube.com#?#.ct-related-videos-title:-abp-contains(You may also like)
+hdpornpics.net#?#.money:-abp-has(.century:-abp-contains(ADS))
+hotmovs.com#?#.block_label--last:-abp-contains(Advertisement)
+porn-w.org#?#.row:-abp-contains(Promotion Bot)
+pornhub.com#?#:-abp-properties(height: 300px; width: 315px;)
+pornhub.com,youporn.com#?#:-abp-properties(float: right; margin-top: 30px; width: 50%;)
+reddxxx.com#?#.items-center:-abp-contains(/^ad$/)
+reddxxx.com#?#[role="gridcell"]:-abp-contains(/^AD$/)
+redtube.com,tube8.com,tube8.es,tube8.fr,xvideos.com,youjizz.com,youporn.com,youporngay.com#?#:-abp-properties(*data:image*)
+redtube.com,tube8.com,tube8.es,tube8.fr,xvideos.com,youjizz.com,youporn.com,youporngay.com#?#:-abp-properties(base64)
+redtube.com,tube8.com,tube8.es,tube8.fr,xvideos.com,youjizz.com,youporn.com,youporngay.com#?#:-abp-properties(data:)
+redtube.com,tube8.com,tube8.es,tube8.fr,xvideos.com,youjizz.com,youporn.com,youporngay.com#?#:-abp-properties(image/)
+!-----------------------Allowlists to fix broken sites------------------------!
+! *** easylist:easylist/easylist_allowlist.txt ***
+@@||2mdn.net/instream/html5/ima3.js$script,domain=earthtv.com|techrepublic.com|zdnet.com
+@@||4cdn.org/adv/$image,xmlhttprequest,domain=4channel.org
+@@||4channel.org/adv/$image,xmlhttprequest,domain=4channel.org
+@@||abcnews.com/assets/js/prebid.min.js$~third-party
+@@||abcnews.com/assets/player/$script,~third-party
+@@||accuweather.com/bundles/prebid.$script
+@@||ad.linksynergy.com^$image,domain=extrarebates.com
+@@||adap.tv/redir/javascript/vpaid.js
+@@||addicted.es^*/ad728-$image,~third-party
+@@||adjust.com/adjust-latest.min.js$domain=anchor.fm
+@@||adm.fwmrm.net^*/TremorAdRenderer.$object,domain=go.com
+@@||adm.fwmrm.net^*/videoadrenderer.$object,domain=cnbc.com|go.com|nbc.com|nbcnews.com
+@@||adnxs.com/ast/ast.js$domain=zone.msn.com
+@@||ads.adthrive.com/api/$domain=adamtheautomator.com|mediaite.com|packhacker.com
+@@||ads.adthrive.com/builds/core/*/js/adthrive.min.js$domain=adamtheautomator.com|mediaite.com|packhacker.com
+@@||ads.adthrive.com/sites/$script,domain=adamtheautomator.com|mediaite.com|packhacker.com
+@@||ads.freewheel.tv/|$media,domain=cnbc.com|fxnetworks.com|my.xfinity.com|nbc.com|nbcsports.com
+@@||ads.kbmax.com^$domain=adspipe.com
+@@||ads.pubmatic.com/adserver/js/$script,domain=zeebiz.com
+@@||ads.pubmatic.com/AdServer/js/pwtSync/$subdocument,domain=independent.co.uk
+@@||ads.roblox.com/v1/sponsored-pages$xmlhttprequest,domain=roblox.com
+@@||ads.rogersmedia.com^$subdocument,domain=cbc.ca
+@@||ads.rubiconproject.com/prebid/$script,domain=drudgereport.com|everydayhealth.com
+@@||ads3.xumo.com^$domain=2vnews.com|redbox.com
+@@||adsafeprotected.com/iasPET.$script,domain=independent.co.uk|reuters.com
+@@||adsafeprotected.com/vans-adapter-google-ima.js$script,domain=gamingbible.co.uk|ladbible.com|reuters.com
+@@||adsales.snidigital.com/*/ads-config.min.js$script
+@@||adserver.skiresort-service.com/www/delivery/spcjs.php?$script,domain=skiresort.de|skiresort.fr|skiresort.info|skiresort.it|skiresort.nl
+@@||adswizz.com/adswizz/js/SynchroClient*.js$script,third-party,domain=jjazz.net
+@@||adswizz.com/sca_newenco/$xmlhttprequest,domain=triplem.com.au
+@@||airplaydirect.com/openx/www/images/$image
+@@||akamaized.net^*.stream/$domain=naver.com
+@@||akamaized.net^*/playlist.m3u8?$domain=naver.com
+@@||almayadeen.net/Content/VideoJS/js/videoPlayer/VideoAds.js$script,~third-party
+@@||amazon-adsystem.com/aax2/apstag.js$domain=accuweather.com|barstoolsports.com|blastingnews.com|cnn.com|exomashomepage.com|familyhandyman.com|foxbusiness.com|gamingbible.co.uk|history.com|independent.co.uk|inquirer.com|keloland.com|radio.com|rd.com|si.com|sportbible.com|tasteofhome.com|thehealthy.com|time.com|wboy.com|wellgames.com|wkrn.com|wlns.com|wvnstv.com
+@@||amazon-adsystem.com/widgets/q?$image,third-party
+@@||aniview.com/api/$script,domain=gamingbible.co.uk|ladbible.com
+@@||aone-soft.com/style/images/ad2.jpg
+@@||api.adinplay.com/libs/aiptag/$script
+@@||api.adnetmedia.lt/api/$~third-party
+@@||api.paymentwall.com^$domain=adguard.com
+@@||apis.kostprice.com/fapi/$script,domain=gadgets.ndtv.com
+@@||apmebf.com/ad/$domain=betfair.com
+@@||app.hubspot.com/api/ads/$~third-party
+@@||app.veggly.net/plugins/cordova-plugin-admobpro/www/AdMob.js$script,~third-party
+@@||apv-launcher.minute.ly/api/$script
+@@||archive.org/BookReader/$image,~third-party,xmlhttprequest
+@@||archive.org/services/$image,~third-party,xmlhttprequest
+@@||assets.ctfassets.net^$media,domain=ads.spotify.com
+@@||assets.strossle.com^*/strossle-widget-sdk.js$script,domain=kaaoszine.fi
+@@||at.adtech.redventures.io/lib/api/$xmlhttprequest,domain=gamespot.com|giantbomb.com|metacritic.com
+@@||at.adtech.redventures.io/lib/dist/$script,domain=gamespot.com|giantbomb.com|metacritic.com
+@@||atlas.playpilot.com/api/v1/ads/browse/$xmlhttprequest,domain=playpilot.com
+@@||autotrader.co.uk^*/advert$~third-party
+@@||avclub.com^*/adManager.$script,~third-party
+@@||bankofamerica.com^*?adx=$~third-party,xmlhttprequest
+@@||banmancounselling.com/wp-content/themes/banman/
+@@||banner.yt^$image,domain=socialblade.com
+@@||bannersnack.com/banners/$document,subdocument,domain=adventcards.co.uk|charitychristmascards.org|christmascardpacks.co.uk|kingsmead.com|kingsmeadcards.co.uk|nativitycards.co.uk|printedchristmascards.co.uk
+@@||basinnow.com/admin/upload/settings/advertise-img.jpg
+@@||basinnow.com/upload/settings/advertise-img.jpg
+@@||bauersecure.com/dist/js/prebid/$domain=carmagazine.co.uk
+@@||bbc.co.uk^*/adverts.js
+@@||bbc.gscontxt.net^$script,domain=bbc.com
+@@||betterads.org/hubfs/$image,~third-party
+@@||bigfishaudio.com/banners/$image,~third-party
+@@||bitcoinbazis.hu/advertise-with-us/$~third-party
+@@||blueconic.net/capitolbroadcasting.js$script,domain=wral.com
+@@||boatwizard.com/ads_prebid.min.js$script,domain=boats.com
+@@||bordeaux.futurecdn.net/bordeaux.js$script,domain=tomsguide.com
+@@||borneobulletin.com.bn/wp-content/banners/bblogo.jpg$~third-party
+@@||brave.com/static-assets/$image,~third-party
+@@||britannica.com/mendel-resources/3-52/js/libs/prebid4.$script,~third-party
+@@||capitolbroadcasting.blueconic.net^$image,script,xmlhttprequest,domain=wral.com
+@@||carandclassic.co.uk/images/free_advert/$image,~third-party
+@@||cbsi.com/dist/optanon.js$script,domain=cbsnews.com|zdnet.com
+@@||cc.zorores.com/ad/*.vtt$domain=rapid-cloud.co
+@@||cdn.adsninja.ca^$domain=xda-developers.com
+@@||cdn.advertserve.com^$domain=hutchgo.com|hutchgo.com.cn|hutchgo.com.hk|hutchgo.com.sg|hutchgo.com.tw
+@@||cdn.bidder.dev/clients/$script,domain=forces.net
+@@||cdn.ex.co^$domain=theautopian.com
+@@||cdn.wgchrrammzv.com/prod/ajc/loader.min.js$domain=journal-news.com
+@@||chycor.co.uk/cms/advert_search_thumb.php$image,domain=chycor.co.uk
+@@||clients.plex.tv/api/v2/ads/$~third-party
+@@||cloudfront.net/js/common/invoke.js
+@@||commons.wikimedia.org/w/api.php?$~third-party,xmlhttprequest
+@@||connatix.com*/connatix.player.$script,domain=ebaumsworld.com|funker530.com|washingtonexaminer.com
+@@||content.pouet.net/avatars/adx.gif$image,~third-party
+@@||crackle.com/vendor/AdManager.js$script,~third-party
+@@||cvs.com/webcontent/images/weeklyad/adcontent/$~third-party
+@@||dcdirtylaundry.com/cdn-cgi/challenge-platform/$~third-party
+@@||delivery-cdn-cf.adswizz.com/adswizz/js/SynchroClient*.js$script,domain=tunein.com
+@@||discretemath.org/ads/
+@@||discretemath.org^$image,stylesheet
+@@||disqus.com/embed/comments/$subdocument
+@@||docs.woopt.com/wgact/$image,~third-party,xmlhttprequest
+@@||dodo.ac/np/images/$image,domain=nookipedia.com
+@@||doodcdn.co^$domain=dood.la|dood.pm|dood.to|dood.ws
+@@||doubleclick.net/ddm/$image,domain=aetv.com|fyi.tv|history.com|mylifetime.com
+@@||edmodo.com/ads$~third-party,xmlhttprequest
+@@||einthusan.tv/prebid.js$script,~third-party
+@@||embed.ex.co^$xmlhttprequest,domain=espncricinfo.com
+@@||entitlements.jwplayer.com^$xmlhttprequest,domain=iheart.com
+@@||experienceleague.adobe.com^$~third-party
+@@||explainxkcd.com/wiki/images/$image,~third-party
+@@||ezoic.net/detroitchicago/cmb.js$script,domain=gerweck.net
+@@||f-droid.org/assets/Ads_$~third-party
+@@||facebook.com/ads/profile/$~third-party,xmlhttprequest
+@@||faculty.uml.edu/klevasseur/ads/
+@@||faculty.uml.edu^$image,stylesheet
+@@||fdyn.pubwise.io^$script,domain=urbanglasgow.co.uk
+@@||files.slack.com^$image,~third-party
+@@||flying-lines.com/banners/$image,~third-party
+@@||forum.miuiturkiye.net/konu/reklam.$~third-party,xmlhttprequest
+@@||forums.opera.com/api/topic/$~third-party,xmlhttprequest
+@@||franklymedia.com/*/300x150_WBNQ_TEXT.png$image,domain=wbnq.com
+@@||fuseplatform.net^*/fuse.js$script,domain=broadsheet.com.au|friendcafe.jp
+@@||fwmrm.net^*/AdManager.js$script
+@@||g.doubleclick.net/gampad/ads$xmlhttprequest,domain=bloomberg.com|chromatographyonline.com|formularywatch.com|journaldequebec.com|managedhealthcareexecutive.com|medicaleconomics.com|physicianspractice.com
+@@||g.doubleclick.net/gampad/ads*%20Web%20Player$domain=imasdk.googleapis.com
+@@||g.doubleclick.net/gampad/ads?*.crunchyroll.com$xmlhttprequest,domain=imasdk.googleapis.com
+@@||g.doubleclick.net/gampad/ads?*RakutenShowtime$xmlhttprequest,domain=imasdk.googleapis.com
+@@||g.doubleclick.net/pagead/ads?*&description_url=https%3A%2F%2Fgames.wkb.jp$xmlhttprequest,domain=imasdk.googleapis.com
+@@||g2crowd.com/uploads/product/image/$image,domain=g2.com
+@@||gbf.wiki/images/$image,~third-party
+@@||givingassistant.org/Advertisers/$~third-party
+@@||global-uploads.webflow.com/*_dimensions-$image,domain=dimensions.com
+@@||gn-web-assets.api.bbc.com/bbcdotcom/assets/$script,domain=bbc.co.uk
+@@||go.ezodn.com/tardisrocinante/lazy_load.js?$script,domain=raiderramble.com
+@@||go.xlirdr.com/api/models/vast$xmlhttprequest
+@@||gocomics.com/assets/ad-dependencies-$script,~third-party
+@@||google.com/images/integrations/$image,~third-party
+@@||googleadservices.com/pagead/conversion_async.js$script,domain=zubizu.com
+@@||googleoptimize.com/optimize.js$script,domain=wallapop.com
+@@||gpt-worldwide.com/js/gpt.js$~third-party
+@@||grapeshot.co.uk/main/channels.cgi$script,domain=telegraph.co.uk
+@@||gstatic.com/ads/external/images/$image,domain=support.google.com
+@@||gumtree.co.za/my/ads.html$~third-party
+@@||hotstar.com/vs/getad.php$domain=hotstar.com
+@@||hp.com/in/*/ads/$script,stylesheet,~third-party
+@@||htlbid.com^*/htlbid.js$domain=hodinkee.com
+@@||hutchgo.advertserve.com^$domain=hutchgo.com|hutchgo.com.cn|hutchgo.com.hk|hutchgo.com.sg|hutchgo.com.tw
+@@||hw-ads.datpiff.com/news/$image,domain=datpiff.com
+@@||image.shutterstock.com^$image,domain=icons8.com
+@@||imasdk.googleapis.com/js/core/bridge*.html$subdocument,domain=~spotify.com
+@@||improvedigital.com/pbw/headerlift.min.js$domain=games.co.uk|kizi.com|zigiz.com
+@@||infotel.ca/images/ads/$image,~third-party
+@@||infoworld.com/www/js/ads/gpt_includes.js$~third-party
+@@||instagram.com/api/v1/ads/$~third-party,xmlhttprequest
+@@||ipinfo.io/static/images/use-cases/adtech.jpg$image,~third-party
+@@||island.lk/userfiles/image/danweem/island.gif
+@@||itv.com/itv/hserver/*/site=itv/$xmlhttprequest
+@@||itv.com/itv/tserver/$~third-party
+@@||jokerly.com/Okidak/adSelectorDirect.htm?id=$document,subdocument
+@@||jokerly.com/Okidak/vastChecker.htm$document,subdocument
+@@||jsdelivr.net^*/videojs.ads.css$domain=irctc.co.in
+@@||jwpcdn.com/player/plugins/googima/$script,domain=iheart.com|video.vice.com
+@@||kotaku.com/x-kinja-static/assets/new-client/adManager.$~third-party
+@@||lastpass.com/ads.php$subdocument,domain=chrome-extension-scheme
+@@||lastpass.com/images/ads/$image,~third-party
+@@||letocard.fr/wp-content/uploads/$image,~third-party
+@@||linkbucks.com/tmpl/$image,stylesheet
+@@||live.primis.tech^$script,domain=eurogamer.net|klaq.com|loudwire.com|vg247.com|xxlmag.com
+@@||live.streamtheworld.com/partnerIds$domain=iheart.com|player.amperwave.net
+@@||lokopromo.com^*/adsimages/$~third-party
+@@||looker.com/api/internal/$~third-party
+@@||luminalearning.com/affiliate-content/$image,~third-party
+@@||makeuseof.com/public/build/images/bg-advert-with-us.$~third-party
+@@||manageengine.com/images/logo/$image,~third-party
+@@||manageengine.com/products/ad-manager/$~third-party
+@@||martinfowler.com/articles/asyncJS.css$stylesheet,~third-party
+@@||media.kijiji.ca/api/$image,~third-party
+@@||mediaalpha.com/js/serve.js$domain=goseek.com
+@@||micro.rubiconproject.com/prebid/dynamic/$script,xmlhttprequest,domain=gamingbible.co.uk|ladbible.com|sportbible.com
+@@||motortrader.com.my/advert/$image,~third-party
+@@||mtouch.facebook.com/ads/api/preview/$domain=business.facebook.com
+@@||newscgp.com/prod/prebid/nyp/pb.js$domain=nypost.com
+@@||nextcloud.com/remote.php/$~third-party,xmlhttprequest
+@@||nflcdn.com/static/site/$script,domain=nfl.com
+@@||npr.org/sponsorship/targeting/$~third-party,xmlhttprequest
+@@||ntv.io/serve/load.js$domain=mcclatchydc.com
+@@||optimatic.com/iframe.html$subdocument,domain=pch.com
+@@||optimatic.com/redux/optiplayer-$domain=pch.com
+@@||optimatic.com/shell.js$domain=pch.com
+@@||optout.networkadvertising.org^$document
+@@||p.d.1emn.com^$script,domain=hotair.com
+@@||pandora.com/images/public/devicead/$image
+@@||patreonusercontent.com/*.gif?token-$image,domain=patreon.com
+@@||payload.cargocollective.com^$image,~third-party
+@@||pbs.twimg.com/ad_img/$image,xmlhttprequest
+@@||pepperjamnetwork.com/banners/$image,domain=extrarebates.com
+@@||photofunia.com/effects/$image,~third-party
+@@||pjtra.com/b/$image,domain=extrarebates.com
+@@||player.aniview.com/script/$script,domain=odysee.com|pogo.com
+@@||player.avplayer.com^$script,domain=explosm.net|gamingbible.co.uk|justthenews.com|ladbible.com
+@@||player.ex.co/player/$script,domain=theautopian.com
+@@||player.odycdn.com/api/$xmlhttprequest,domain=odysee.com
+@@||playwire.com/bolt/js/zeus/embed.js$script,third-party
+@@||pngimg.com/distr/$image,~third-party
+@@||pntrac.com/b/$image,domain=extrarebates.com
+@@||pntrs.com/b/$image,domain=extrarebates.com
+@@||portal.autotrader.co.uk/advert/$~third-party
+@@||prebid.adnxs.com^$xmlhttprequest,domain=go.cnn.com
+@@||preromanbritain.com/maxymiser/$~third-party
+@@||promo.com/embed/$subdocument,third-party
+@@||promo.zendesk.com^$xmlhttprequest,domain=promo.com
+@@||pub.doubleverify.com/dvtag/$script,domain=time.com
+@@||pub.pixels.ai/wrap-independent-no-prebid-lib.js$script,domain=independent.co.uk
+@@||radiotimes.com/static/advertising/$script,~third-party
+@@||redventures.io/lib/dist/prod/bidbarrel-$script,domain=cnet.com|techrepublic.com|zdnet.com
+@@||renewcanceltv.com/porpoiseant/banger.js$script,~third-party
+@@||rubiconproject.com/prebid/dynamic/$script,domain=ask.com|journaldequebec.com
+@@||runescape.wiki^$image,~third-party
+@@||s.ntv.io/serve/load.js$domain=titantv.com
+@@||salfordonline.com/wp-content/plugins/wp_pro_ad_system/$script
+@@||schwab.com/scripts/appdynamic/adrum-ext.$script,~third-party
+@@||scrippsdigital.com/cms/videojs/$stylesheet,domain=scrippsdigital.com
+@@||sdltutorials.com/Data/Ads/AppStateBanner.jpg$~third-party
+@@||securenetsystems.net/v5/scripts/
+@@||serviceads.co.uk/api/ad/$~third-party,xmlhttprequest
+@@||shaka-player-demo.appspot.com/lib/ads/ad_manager.js$script,~third-party
+@@||shopping.naver.net/ad/$image,script,stylesheet,domain=naver.com
+@@||showcase.codethislab.com/banners/$image,~third-party
+@@||shreemaruticourier.com/banners/$~third-party
+@@||signin.verizon.com^*/affiliate/$subdocument,xmlhttprequest
+@@||somewheresouth.net/banner/banner.php$image
+@@||sportsnet.ca/wp-content/plugins/bwp-minify/$domain=sportsnet.ca
+@@||startrek.website/pictrs/image/$xmlhttprequest
+@@||stat-rock.com/player/$domain=4shared.com|adplayer.pro
+@@||static.doubleclick.net/instream/ad_status.js$script,domain=ignboards.com
+@@||static.vrv.co^$media,domain=crunchyroll.com
+@@||summitracing.com/global/images/bannerads/
+@@||sundaysportclassifieds.com/ads/$image,~third-party
+@@||survey.g.doubleclick.net^$script,domain=sporcle.com
+@@||synchrobox.adswizz.com/register2.php$script,domain=tunein.com
+@@||tcbk.com/application/files/4316/7521/1922/Q1-23-CD-Promo-Banner-Ad.png^$~third-party
+@@||thdstatic.com/experiences/local-ad/$domain=homedepot.com
+@@||thepiratebay.org/cdn-cgi/challenge-platform/$~third-party
+@@||thetvdb.com/banners/$image,domain=tvtime.com
+@@||thisiswaldo.com/static/js/$script,domain=bestiefy.com
+@@||townhall.com/resources/dist/js/prebid-pjmedia.js$script,domain=pjmedia.com
+@@||tractorshed.com/photoads/upload/$~third-party
+@@||tradingview.com/adx/$subdocument,domain=adx.ae
+@@||trustprofile.com/banners/$image
+@@||ukbride.co.uk/css/*/adverts.css
+@@||unpkg.com^$script,domain=vidsrc.stream
+@@||upload.wikimedia.org/wikipedia/$image,media
+@@||v.fwmrm.net/ad/g/1$domain=uktv.co.uk|vevo.com
+@@||v.fwmrm.net/ad/g/1?csid=vcbs_cbsnews_desktop_$xmlhttprequest
+@@||v.fwmrm.net/ad/p/1?$domain=cc.com|channel5.com|cmt.com|eonline.com|foodnetwork.com|nbcnews.com|ncaa.com|player.theplatform.com|simpsonsworld.com|today.com
+@@||v.fwmrm.net/crossdomain.xml$xmlhttprequest
+@@||warpwire.com/AD/
+@@||warpwire.net/AD/
+@@||web-ads.pulse.weatherbug.net/api/ads/targeting/$domain=weatherbug.com
+@@||webbtelescope.org/files/live/sites/webb/$image,~third-party
+@@||widgets.jobbio.com^*/display.min.js$domain=interestingengineering.com
+@@||worldgravity.com^$script,domain=hotstar.com
+@@||wrestlinginc.com/wp-content/themes/unified/js/prebid.js$~third-party
+@@||www.google.*/search?$domain=google.ae|google.at|google.be|google.bg|google.by|google.ca|google.ch|google.cl|google.co.id|google.co.il|google.co.in|google.co.jp|google.co.ke|google.co.kr|google.co.nz|google.co.th|google.co.uk|google.co.ve|google.co.za|google.com|google.com.ar|google.com.au|google.com.br|google.com.co|google.com.ec|google.com.eg|google.com.hk|google.com.mx|google.com.my|google.com.pe|google.com.ph|google.com.pk|google.com.py|google.com.sa|google.com.sg|google.com.tr|google.com.tw|google.com.ua|google.com.uy|google.com.vn|google.cz|google.de|google.dk|google.dz|google.ee|google.es|google.fi|google.fr|google.gr|google.hr|google.hu|google.ie|google.it|google.lt|google.lv|google.nl|google.no|google.pl|google.pt|google.ro|google.rs|google.ru|google.se|google.sk
+@@||www.google.com/ads/preferences/$image,script,subdocument
+@@||yadayadayada.nl/banner/banner.php$image,domain=murf.nl|workhardclimbharder.nl
+@@||yaytrade.com^*/chunks/pages/advert/$~third-party
+@@||yimg.com/rq/darla/*/g-r-min.js$domain=yahoo.com
+@@||z.moatads.com^$script,domain=standard.co.uk
+@@||zeebiz.com/ads/$image,~third-party
+@@||zohopublic.com^*/ADManager_$subdocument,xmlhttprequest,domain=manageengine.com|zohopublic.com
+! Webcompat fixes (Avoid any potential filters being applied to non-ad domains)
+@@||challenges.cloudflare.com/turnstile/$script
+@@||gmail.com^$generichide
+@@||google.com/recaptcha/$csp,subdocument
+@@||google.com/recaptcha/api.js
+@@||google.com/recaptcha/enterprise.js
+@@||google.com/recaptcha/enterprise/
+@@||gstatic.com/recaptcha/
+@@||hcaptcha.com/captcha/$script,subdocument
+@@||hcaptcha.com^*/api.js
+@@||recaptcha.net/recaptcha/$script
+@@||search.brave.com/search$xmlhttprequest
+@@||ui.ads.microsoft.com^$~third-party
+! Webcompat Generichide fixes (Avoid any potential filters being applied to non-ad domains)
+@@://127.0.0.1$generichide
+@@://192.168.0.1$generichide
+@@://192.168.1.1$generichide
+@@://localhost:$generichide
+@@||ads.microsoft.com^$generichide
+@@||apple.com^$generichide
+@@||bitbucket.org^$generichide
+@@||builder.io^$generichide
+@@||calendar.google.com^$generichide
+@@||cbs.com^$generichide
+@@||cloud.google.com^$generichide
+@@||codepen.io^$generichide
+@@||codesandbox.io^$generichide
+@@||contacts.google.com^$generichide
+@@||curiositystream.com^$generichide
+@@||discord.com^$generichide
+@@||disneyplus.com^$generichide
+@@||docs.google.com^$generichide
+@@||drive.google.com^$generichide
+@@||dropbox.com^$generichide
+@@||fastmail.com^$generichide
+@@||figma.com^$generichide
+@@||github.com^$generichide
+@@||gitlab.com^$generichide
+@@||hbomax.com^$generichide
+@@||icloud.com^$generichide
+@@||instapundit.com^$generichide
+@@||jsfiddle.net^$generichide
+@@||mail.google.com^$generichide
+@@||mail.proton.me^$generichide
+@@||material.angular.io^$generichide
+@@||material.io^$generichide
+@@||mui.com^$generichide
+@@||myaccount.google.com^$generichide
+@@||netflix.com^$generichide
+@@||notion.so^$generichide
+@@||oisd.nl^$generichide
+@@||onedrive.live.com^$generichide
+@@||open.spotify.com^$generichide
+@@||pandora.com^$generichide
+@@||paramountplus.com^$generichide
+@@||peacocktv.com^$generichide
+@@||photos.google.com^$generichide
+@@||play.max.com^$generichide
+@@||publicwww.com^$generichide
+@@||reddit.com^$generichide
+@@||slack.com^$generichide
+@@||sourcegraph.com^$generichide
+@@||stackblitz.com^$generichide
+@@||teams.microsoft.com^$generichide
+@@||tidal.com^$generichide
+@@||tv.youtube.com^$generichide
+@@||twitter.com^$generichide
+@@||web.archive.org^$generichide
+@@||www.youtube.com^$generichide
+! @@||web.basemark.com^$generichide
+@@||web.telegram.org^$generichide
+@@||whatsapp.com^$generichide
+@@||wikibooks.org^$generichide
+@@||wikidata.org^$generichide
+@@||wikinews.org^$generichide
+@@||wikipedia.org^$generichide
+@@||wikiquote.org^$generichide
+@@||wikiversity.org^$generichide
+@@||wiktionary.org^$generichide
+! wordpress.org https://wordpress.org/plugins/woocommerce-google-adwords-conversion-tracking-tag/
+@@||ps.w.org^$image,domain=wordpress.org
+@@||s.w.org/wp-content/$stylesheet,domain=wordpress.org
+@@||wordpress.org/plugins/$domain=wordpress.org
+@@||wordpress.org/stats/plugin/$domain=wordpress.org
+! Fingerprint checks
+@@||fingerprintjs.com^$generichide
+@@||schemeflood.com^$generichide
+! uBO-CNAME (Specific allowlists)
+@@||akinator.mobi.cdn.ezoic.net^$domain=akinator.mobi
+@@||banner.customer.kyruus.com^$domain=doctors.bannerhealth.com
+@@||hwcdn.net^$script,domain=mp4upload.com
+! ezfunnels.com (https://forums.lanik.us/viewtopic.php?f=64&t=44355)
+@@||ezsoftwarestorage.com^$image,media,domain=ezfunnels.com
+! Memo2
+@@||ads.memo2.nl/banners/$subdocument
+! allow vk.com to confirm age.
+! https://forums.lanik.us/viewtopic.php?p=131491#p131491
+@@||oauth.vk.com/authorize?
+! Downdetector Consent
+@@||googletagservices.com/tag/js/gpt.js$domain=allestoringen.be|allestoringen.nl|downdetector.ae|downdetector.ca|downdetector.cl|downdetector.co.nz|downdetector.co.uk|downdetector.co.za|downdetector.com|downdetector.com.ar|downdetector.com.au|downdetector.com.br|downdetector.com.co|downdetector.cz|downdetector.dk|downdetector.ec|downdetector.es|downdetector.fi|downdetector.fr|downdetector.gr|downdetector.hk|downdetector.hr|downdetector.hu|downdetector.id|downdetector.ie|downdetector.in|downdetector.it|downdetector.jp|downdetector.mx|downdetector.my|downdetector.no|downdetector.pe|downdetector.ph|downdetector.pk|downdetector.pl|downdetector.pt|downdetector.ro|downdetector.ru|downdetector.se|downdetector.sg|downdetector.sk|downdetector.tw|downdetector.web.tr|xn--allestrungen-9ib.at|xn--allestrungen-9ib.ch|xn--allestrungen-9ib.de
+! Generichide
+@@||adblockplus.org^$generichide
+@@||aetv.com^$generichide
+@@||apkmirror.com^$generichide
+@@||brighteon.com^$generichide
+@@||cwtv.com^$generichide
+@@||destinationamerica.com^$generichide
+@@||geekzone.co.nz^$generichide
+@@||history.com^$generichide
+@@||megaup.net^$generichide
+@@||sciencechannel.com^$generichide
+@@||smallseotools.com^$generichide
+@@||sonichits.com^$generichide
+@@||soranews24.com^$generichide
+@@||thefreedictionary.com^$generichide
+@@||tlc.com^$generichide
+@@||yibada.com^$generichide
+! Search engine generichide (allowing searching of ad items)
+@@||bing.com/search?$generichide
+@@||duckduckgo.com/?q=$generichide
+@@||www.google.*/search?$generichide
+@@||yandex.com/search/?$generichide
+! Anti-Adblock (Applicable to Adult, file hosting, streaming/torrent sites)
+@@/wp-content/plugins/blockalyzer-adblock-counter/*$image,script,~third-party,domain=~gaytube.com|~pornhub.com|~pornhubthbh7ap3u.onion|~redtube.com|~redtube.com.br|~tube8.com|~tube8.es|~tube8.fr|~xtube.com|~youjizz.com|~youporn.com|~youporngay.com
+@@||adtng.com/get/$subdocument,domain=hanime.tv
+@@||artnet.com^$generichide
+@@||az.hp.transer.com/content/dam/isetan_mitsukoshi/advertise/$~third-party
+@@||az.hpcn.transer-cn.com/content/dam/isetan_mitsukoshi/advertise/$~third-party
+@@||cdnqq.net/ad/api/popunder.js$script
+@@||centro.co.il^$generichide
+@@||coinmarketcap.com/static/addetect/$script,~third-party
+@@||dlh.net^$script,subdocument,domain=dlh.net
+@@||exponential.com^*/tags.js$domain=yellowbridge.com
+@@||games.pch.com^$generichide
+@@||maxstream.video^$generichide
+@@||receiveasms.com^$generichide
+@@||sc2casts.com^$generichide
+@@||spanishdict.com^$generichide
+@@||stream4free.live^$generichide
+@@||up-load.io^$generichide
+@@||userload.co/adpopup.js$script
+@@||waaw.to/adv/ads/popunder.js$script
+@@||yandexcdn.com/ad/api/popunder.js$script
+@@||yellowbridge.com^$generichide
+@@||yimg.com/dy/ads/native.js$script,domain=animedao.to
+! Gladly.io New Tab extension (https://tab.gladly.io/)
+! Don't install Gladly extension if you don't like ads.
+@@||tab.gladly.io/newtab/|$document,subdocument
+!! imasdk.googleapis.com/js/sdkloader/ima3.js
+@@||imasdk.googleapis.com/js/sdkloader/ima3.js$domain=247sports.com|api.screen9.com|autokult.pl|bbc.com|blastingnews.com|bloomberg.co.jp|bloomberg.com|bsfuji.tv|cbc.ca|cbsnews.com|cbssports.com|chicagotribune.com|clickorlando.com|cnet.com|crunchyroll.com|delish.com|distro.tv|doubtnut.com|einthusan.tv|embed.comicbook.com|etonline.com|farfeshplus.com|filmweb.pl|game.goo.ne.jp|game.pointmall.rakuten.net|gamebox.gesoten.com|gamepix.com|games.usatoday.com|gbnews.com|geo.dailymotion.com|givemesport.com|goodmorningamerica.com|goodstream.uno|gospodari.com|howstuffworks.com|humix.com|ignboards.com|iheart.com|insideedition.com|irctc.co.in|klix.ba|lemino.docomo.ne.jp|locipo.jp|maharashtratimes.com|metacritic.com|minigame.aeriagames.jp|missoulian.com|myspace.com|nettavisen.no|newsweek.com|paralympic.org|paramountplus.com|player.abacast.net|player.earthtv.com|player.performgroup.com|plex.tv|pointmall.rakuten.co.jp|popculture.com|realmadrid.com|rte.ie|rumble.com|s.yimg.jp|scrippsdigital.com|sonyliv.com|southpark.lat|southparkstudios.com|sportsbull.jp|sportsport.ba|success-games.net|synk-casualgames.com|tbs.co.jp|tdn.com|truvid.com|tubitv.com|tv-asahi.co.jp|tv.rakuten.co.jp|tver.jp|tvp.pl|univtec.com|video.tv-tokyo.co.jp|vlive.tv|watch.nba.com|weather.com|webdunia.com|wellgames.com|worldsurfleague.com|wowbiz.ro|wsj.com|wtk.pl|xda-developers.com|zdnet.com|zeebiz.com
+!! imasdk.googleapis.com/js/sdkloader/ima3_dai.js
+@@||imasdk.googleapis.com/js/sdkloader/ima3_dai.js$domain=247sports.com|bloomberg.co.jp|bloomberg.com|cbc.ca|cbssports.com|embed.comicbook.com|gbnews.com|history.com|paramountplus.com|s.yimg.jp|sbs.com.au|southpark.cc.com|tv.rakuten.co.jp|vk.sportsbull.jp|worldsurfleague.com
+!! pubads.g.doubleclick.net/ondemand/hls/
+@@||pubads.g.doubleclick.net/ondemand/hls/$domain=history.com
+!! ||imasdk.googleapis.com/pal/sdkloader/pal.js
+@@||imasdk.googleapis.com/pal/sdkloader/pal.js$domain=cadenaser.com
+!! imasdk.googleapis.com/js/sdkloader/ima3_debug.js
+@@||imasdk.googleapis.com/js/sdkloader/ima3_debug.js$domain=abcnews.go.com|brightcove.net|cbsnews.com|insideedition.com|pch.com
+!! https://github.com/uBlockOrigin/uAssets/issues/18541
+!! cbssports.com|newson.us|worldsurfleague.com
+@@||pubads.g.doubleclick.net/ssai/
+!! g.doubleclick.net/tag/js/gpt.js
+@@||g.doubleclick.net/tag/js/gpt.js$script,xmlhttprequest,domain=accuweather.com|adamtheautomator.com|bestiefy.com|blastingnews.com|bloomberg.com|chromatographyonline.com|devclass.com|digitaltrends.com|edy.rakuten.co.jp|epaper.timesgroup.com|filmweb.pl|formularywatch.com|games.coolgames.com|indy100.com|journaldequebec.com|managedhealthcareexecutive.com|mediaite.com|medicaleconomics.com|nycgo.com|olx.pl|physicianspractice.com|repretel.com|standard.co.uk|telsu.fi|theta.tv|weather.com
+!! googletagservices.com/tag/js/gpt.js
+@@||googletagservices.com/tag/js/gpt.js$domain=chegg.com|chelseafc.com|epaper.timesgroup.com|farfeshplus.com|k2radio.com|koel.com|kowb1290.com|nationalreview.com|nationalworld.com|nbcsports.com|scotsman.com|tv-asahi.co.jp|uefa.com|vimeo.com|vlive.tv|voici.fr|windalert.com
+!! g.doubleclick.net/gpt/pubads_impl_
+@@||g.doubleclick.net/gpt/pubads_impl_$domain=accuweather.com|blastingnews.com|bloomberg.com|chelseafc.com|chromatographyonline.com|digitaltrends.com|downdetector.com|edy.rakuten.co.jp|epaper.timesgroup.com|formularywatch.com|game.anymanager.io|games.coolgames.com|managedhealthcareexecutive.com|mediaite.com|medicaleconomics.com|nationalreview.com|nationalworld.com|nbcsports.com|nycgo.com|physicianspractice.com|scotsman.com|telsu.fi|voici.fr|weather.com|xda-developers.com
+!! g.doubleclick.net/pagead/managed/js/gpt/
+@@||g.doubleclick.net/pagead/managed/js/gpt/$script,domain=adamtheautomator.com|allestoringen.be|allestoringen.nl|aussieoutages.com|canadianoutages.com|downdetector.ae|downdetector.ca|downdetector.co.nz|downdetector.co.uk|downdetector.co.za|downdetector.com|downdetector.com.ar|downdetector.com.br|downdetector.dk|downdetector.es|downdetector.fi|downdetector.fr|downdetector.hk|downdetector.ie|downdetector.in|downdetector.it|downdetector.jp|downdetector.mx|downdetector.no|downdetector.pl|downdetector.pt|downdetector.ru|downdetector.se|downdetector.sg|downdetector.tw|downdetector.web.tr|filmweb.pl|journaldequebec.com|mediaite.com|xn--allestrungen-9ib.at|xn--allestrungen-9ib.ch|xn--allestrungen-9ib.de
+!! pagead2.googlesyndication.com/pagead/js/adsbygoogle.js
+@@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$domain=battlecats-db.com|cpu-world.com|game.anymanager.io|games.wkb.jp|html5.gamedistribution.com|knowfacts.info|lacoste.com|megagames.com|megaleech.us|newson.us|real-sports.jp|slideplayer.com|tampermonkey.net|teemo.gg|thefreedictionary.com
+!! pagead2.googlesyndication.com/pagead/managed/js/*/show_ads_impl_
+@@||pagead2.googlesyndication.com/pagead/managed/js/*/show_ads_impl_$script,domain=battlecats-db.com|games.wkb.jp
+!! pagead2.googlesyndication.com/pagead/managed/js/adsense/
+@@||pagead2.googlesyndication.com/pagead/managed/js/adsense/$script,domain=game.goo.ne.jp
+!! g.doubleclick.net/pagead/ads
+@@||g.doubleclick.net/pagead/ads$subdocument,domain=game.anymanager.io|game.goo.ne.jp
+!! g.doubleclick.net/pagead/ppub_config
+@@||g.doubleclick.net/pagead/ppub_config$domain=bloomberg.com|independent.co.uk|repretel.com|telsu.fi|weather.com
+! Non-English
+@@/banner/ad/*$image,domain=achaloto.com
+@@||about.smartnews.com/ja/wp-content/assets/img/advertisers/ad_$~third-party
+@@||ad-api-v01.uliza.jp^$script,xmlhttprequest,domain=golfnetwork.co.jp|tv-asahi.co.jp
+@@||ad-img.gmarket.com/ads/$image,domain=gmarket.co.kr
+@@||ad.atown.jp/adserver/$domain=ad.atown.jp
+@@||ad.smartmediarep.com/NetInsight/video/smr$domain=programs.sbs.co.kr
+@@||adfurikun.jp/adfurikun/images/$~third-party
+@@||admanager.clubzebra.se^$image,domain=ripshusvagnar.se
+@@||ads-i.org/images/ads3.jpg$~third-party
+@@||ads-twitter.com/oct.js$domain=ncsoft.jp
+@@||ads-twitter.com/uwt.js$domain=factory.pixiv.net
+@@||aiasahi.jp/ads/$image,domain=japan.techrepublic.com|japan.zdnet.com
+@@||amebame.com/pub/ads/$image,domain=abema.tv|ameba.jp|ameblo.jp
+@@||api.friends.ponta.jp/api/$~third-party
+@@||arukikata.com/images_ad/$image,~third-party
+@@||asahi.com/ads/$image,~third-party
+@@||ascii.jp/img/ad/$image,~third-party
+@@||assoc-amazon.com/widgets/cm?$subdocument,domain=atcoder.jp
+@@||astatic.ccmbg.com^*/prebid$script,domain=linternaute.com
+@@||banki.ru/bitrix/*/advertising.block/$stylesheet
+@@||bloominc.jp/adtool/$~third-party
+@@||book.com.tw/image/getImage?$domain=books.com.tw
+@@||c.ad6media.fr/l.js$domain=scan-manga.com
+@@||candidate.hr-manager.net/Advertisement/PreviewAdvertisement.aspx$subdocument,~third-party
+@@||catchapp.net/ad/img/$~third-party
+@@||cdn.jsdelivr.net/npm/*/videojs-contrib-ads.min.js$domain=24ur.com
+@@||cinema.pia.co.jp/img/ad/$image,~third-party
+@@||clj.valuecommerce.com/*/vcushion.min.js
+@@||cloudflare.com^*/videojs-contrib-ads.js$domain=wtk.pl
+@@||copilog2.jp/*/webroot/ad_img/$domain=ikkaku.net
+@@||core.windows.net^*/annonser/$image,domain=kmauto.no
+@@||daumcdn.net/adfit/static/ad-native.min.js$domain=daum.net
+@@||daumcdn.net/adfit/static/ad.min.js$script,domain=daum.net
+@@||discordapp.com/banners/$image
+@@||displayad.naver.com^$~third-party
+@@||doda.jp/brand/ad/img/icon_play.png
+@@||doda.jp/cmn_web/img/brand/ad/ad_text_
+@@||doda.jp/cmn_web/img/brand/ad/ad_top_3.mp4
+@@||ebaykorea.com/ADS/$image,domain=gmarket.co.kr
+@@||forexprostools.com^$subdocument,domain=fx-rashinban.com
+@@||freeride.se/img/admarket/$~third-party
+@@||friends.ponta.jp/app/assets/images/$~third-party
+@@||g.doubleclick.net/gampad/ads?$domain=edy.rakuten.co.jp|tv-tokyo.co.jp|voici.fr
+@@||gakushuin.ac.jp/ad/common/$~third-party
+@@||ganma.jp/view/magazine/viewer/pages/advertisement/googleAdSense.html|$~third-party,xmlhttprequest
+@@||getjad.io/library/$script,domain=allocine.fr
+@@||go.ezodn.com/beardeddragon/basilisk.js$domain=humix.com
+@@||google.com/adsense/search/ads.js$domain=news.biglobe.ne.jp
+@@||googleadservices.com/pagead/conversion.js$domain=ncsoft.jp
+@@||gunosy.co.jp/img/ad/$image,~third-party
+@@||h1g.jp/img/ad/ad_heigu.html$~third-party
+@@||hinagiku-u.ed.jp/wp54/wp-content/themes/hinagiku/images/$image,~third-party
+@@||ias.global.rakuten.com/adv/$script,domain=rakuten.co.jp
+@@||iejima.org/ad-banner/$image,~third-party
+@@||ienohikari.net/ad/common/$~third-party
+@@||ienohikari.net/ad/img/$~third-party
+@@||img.rakudaclub.com/adv/$~third-party
+@@||jmedj.co.jp/files/$image,~third-party
+@@||jobs.bg/front_job_search.php$~third-party
+@@||kanalfrederikshavn.dk^*/jquery.openx.js?
+@@||kincho.co.jp/cm/img/bnr_ad_$image,~third-party
+@@||live.lequipe.fr/thirdparty/prebid.js$~third-party
+@@||mail.bg/mail/index/getads/$xmlhttprequest
+@@||microapp.bytedance.com/docs/page-data/$~third-party
+@@||minigame.aeriagames.jp/*/ae-tpgs-$~third-party
+@@||minigame.aeriagames.jp/css/videoad.css
+@@||mistore.jp/content/dam/isetan_mitsukoshi/advertise/$~third-party
+@@||mjhobbymassan.se/r/annonser/$image,~third-party
+@@||musictrack.jp/a/ad/banner_member.jpg
+@@||mysmth.net/nForum/*/ADAgent_$~third-party
+@@||netmile.co.jp/ad/images/$image
+@@||nintendo.co.jp/ring/*/adv$~third-party
+@@||nizista.com/api/v1/adbanner$~third-party
+@@||oishi-kenko.com/kenko/assets/v2/ads/$~third-party
+@@||point.rakuten.co.jp/img/crossuse/top_ad/$~third-party
+@@||politiken.dk/static/$script
+@@||popin.cc/popin_discovery/recommend?$~third-party
+@@||pro-foto.jp/ads/img/$~third-party
+@@||przegladpiaseczynski.pl/wp-content/plugins/wppas/$~third-party
+@@||r10s.jp/share/themes/ds/js/show_ads_randomly.js$domain=travel.rakuten.co.jp
+@@||rakuten-bank.co.jp/rb/ams/img/ad/$~third-party
+@@||s.yimg.jp/images/listing/tool/yads/yads-timeline-ex.js$domain=yahoo.co.jp
+@@||s0.2mdn.net/ads/studio/Enabler.js$domain=yuukinohana.co.jp
+@@||samplefan.com/img/ad/$image
+@@||scan-manga.eu/*pageID=$~third-party
+@@||search.spotxchange.com/vmap/*&content_page_url=www.bsfuji.tv$xmlhttprequest,domain=imasdk.googleapis.com
+@@||searchad.naver.com^$~third-party
+@@||site-banner.hange.jp/adshow?$domain=animallabo.hange.jp
+@@||smartadserver.com/genericpost$domain=filmweb.pl
+@@||so-net.ne.jp/access/hikari/minico/ad/images/$~third-party
+@@||stats.g.doubleclick.net/dc.js$script,domain=chintaistyle.jp|gyutoro.com
+@@||suntory.co.jp/beer/kinmugi/css2020/ad.css?
+@@||suntory.co.jp/beer/kinmugi/img/ad/$image,~third-party
+@@||tenki.jp/storage/static-images/top-ad/
+@@||tpc.googlesyndication.com/pagead/js/$domain=googleads.g.doubleclick.net
+@@||tra.scds.pmdstatic.net/advertising-core/$domain=voici.fr
+@@||trj.valuecommerce.com/vcushion.js
+@@||uze-ads.com/ads/$~third-party
+@@||valuecommerce.com^$image,domain=pointtown.com
+@@||videosvc.ezoic.com/play?videoID=$domain=humix.com
+@@||yads.c.yimg.jp/js/yads-async.js$domain=kobe-np.co.jp|yahoo.co.jp
+@@||youchien.net/ad/*/ad/img/$~third-party
+@@||youchien.net/css/ad_side.css$~third-party
+@@||yuru-mbti.com/static/css/adsense.css$~third-party
+! Allowlists to fix broken pages of advertisers
+! Google
+@@||ads.google.com^$domain=ads.google.com|analytics.google.com
+@@||cloud.google.com^$~third-party
+@@||developers.google.com^$domain=developers.google.com
+@@||support.google.com^$domain=support.google.com
+! https://github.com/easylist/easylist/issues/12681
+@@||v.fwmrm.net/ad/g/1?*_html5_live$domain=~gulli.fr|~msn.com
+! Healthy Advertising (Spanish)
+@@||healthyadvertising.es^$~third-party
+! Yahoo
+@@||gemini.yahoo.com/advertiser/$domain=gemini.yahoo.com
+@@||yimg.com/av/gemini-ui/*/advertiser/$domain=gemini.yahoo.com
+! Twitter
+@@||ads-api.twitter.com^$domain=ads.twitter.com|analytics.twitter.com
+@@||ads.twitter.com^$domain=ads.twitter.com|analytics.twitter.com
+
+! *** easylist:easylist/easylist_allowlist_dimensions.txt ***
+@@||anitasrecipes.com/Content/Images/Recipes/$image,~third-party
+@@||arnhemland-safaris.com/images/made/$image,~third-party
+@@||cloud.mail.ru^$image,~third-party
+@@||crystalmark.info/wp-content/uploads/*-300x250.$image,~third-party
+@@||crystalmark.info/wp-content/uploads/sites/$image,~third-party
+@@||government-and-constitution.org/images/presidential-seal-300-250.gif$image,~third-party
+@@||hiveworkscomics.com/frontboxes/300x250_$image,~third-party
+@@||leffatykki.com/media/banners/tykkibanneri-728x90.png$image,~third-party
+@@||nc-myus.com/images/pub/www/uploads/merchant-logos/$image,~third-party
+@@||nihasi.ru/upload/resize_cache/*/300_250_$image,~third-party
+@@||przegladpiaseczynski.pl/wp-content/uploads/*-300x250-$image,~third-party
+@@||radiosun.fi/wp-content/uploads/*300x250$image,~third-party
+@@||redditinc.com/assets/images/site/*_300x250.$image,~third-party
+@@||taipit-mebel.ru/upload/resize_cache/$image,~third-party
+@@||wavepc.pl/wp-content/*-500x100.png$image,~third-party
+@@||yimg.jp/images/news-web/all/images/jsonld_image_300x250.png$domain=news.yahoo.co.jp
+
+! *** easylist:easylist/easylist_allowlist_popup.txt ***
+@@^utm_source=aff^$popup,domain=gamble.co.uk|gokkeninonlinecasino.nl|top5casinosites.co.uk
+@@|data:text^$popup,domain=box.com|clker.com|labcorp.com
+@@||accounts.google.com^$popup
+@@||ad.doubleclick.net/clk*&destinationURL=$popup
+@@||ad.doubleclick.net/ddm/$popup,domain=billiger.de|creditcard.com.au|finder.com|finder.com.au|guide-epargne.be|legacy.com|mail.yahoo.com|nytimes.com|spaargids.be
+@@||ad.doubleclick.net/ddm/clk/*http$popup
+@@||ad.doubleclick.net/ddm/trackclk/*http$popup
+@@||ads.doordash.com^$popup
+@@||ads.elevateplatform.co.uk^$popup
+@@||ads.emarketer.com/redirect.spark?$popup,domain=emarketer.com
+@@||ads.finance^$popup
+@@||ads.google.com^$popup
+@@||ads.kazakh-zerno.net^$popup
+@@||ads.listonic.com^$popup
+@@||ads.microsoft.com^$popup
+@@||ads.midwayusa.com^$popup
+@@||ads.pinterest.com^$popup
+@@||ads.shopee.*/$popup
+@@||ads.snapchat.com^$popup
+@@||ads.spotify.com^$popup
+@@||ads.taboola.com^$popup
+@@||ads.twitter.com^$popup
+@@||ads.vk.com^$popup
+@@||adv.asahi.com^$popup
+@@||adv.gg^$popup
+@@||adv.welaika.com^$popup
+@@||dashboard.mgid.com^$popup
+@@||doubleclick.net/clk;$popup,domain=3g.co.uk|4g.co.uk|hotukdeals.com|jobamatic.com|play.google.com|santander.co.uk|techrepublic.com
+@@||g.doubleclick.net/aclk?$popup,domain=bodas.com.mx|bodas.net|casamentos.com.br|casamentos.pt|casamiento.com.uy|casamientos.com.ar|mariages.net|matrimonio.com|matrimonio.com.co|matrimonio.com.pe|matrimonios.cl|pianobuyer.com|weddingspot.co.uk|zillow.com
+@@||hutchgo.advertserve.com^$popup,domain=hutchgo.com|hutchgo.com.cn|hutchgo.com.hk|hutchgo.com.sg|hutchgo.com.tw
+@@||serving-sys.com/Serving/adServer.bs?$popup,domain=spaargids.be
+@@||vk.com/ads?$popup,domain=vk.com
+@@||www.google.*/search?q=*&oq=*&aqs=chrome.*&sourceid=chrome&$popup,third-party
+@@||www.ticketmaster.$popup,domain=adclick.g.doubleclick.net
+
+! *** easylist:easylist_adult/adult_allowlist.txt ***
+@@/api/models?$domain=tik.porn
+@@/api/v2/models-online?$domain=tik.porn
+@@||exosrv.com/video-slider.js$domain=xfreehd.com
+@@||gaynetwork.co.uk/Images/ads/bg/$image,~third-party
+@@||spankbang.com^*/prebid-ads.js$domain=spankbang.com
+! Anti-Adblock
+@@||gaybeeg.info^$generichide
+@@||milfzr.com^$generichide
+@@||pornbraze.com^$generichide
+@@||rule34hentai.net^$generichide
+@@||urlgalleries.net^$generichide
+@@||xfreehd.com^$generichide
+
+! *** easylist:easylist_adult/adult_allowlist_popup.txt ***
diff --git a/uAssets/thirdparties/easylist/easyprivacy.txt b/uAssets/thirdparties/easylist/easyprivacy.txt
new file mode 100644
index 0000000..6aeae38
--- /dev/null
+++ b/uAssets/thirdparties/easylist/easyprivacy.txt
@@ -0,0 +1,43790 @@
+[Adblock Plus 1.1]
+! Title: EasyPrivacy
+! Expires: 6 days (update frequency)
+! Last modified: %timestamp%
+! Diff-Path: %diffpath%#easyprivacy
+! Diff-Expires: 317 minutes
+! *** easylist:template_header.txt ***
+!
+! Please report any unblocked adverts or problems
+! in the forums (https://forums.lanik.us/)
+! or via e-mail (easylist@protonmail.com).
+!
+! Homepage: https://easylist.to/
+! Licence: https://easylist.to/pages/licence.html
+! GitHub issues: https://github.com/easylist/easylist/issues
+! GitHub pull requests: https://github.com/easylist/easylist/pulls
+!
+!-----------------General tracking systems-----------------!
+! *** easylist:easyprivacy/easyprivacy_general.txt ***
+&action=js_stats&
+&ev=PageView&
+&event=view&
+&EventType=DataDealImpression&
+&EventType=Impression&
+&hitType=pageview&
+&http_referer=$script,xmlhttprequest,domain=~biletomat.pl|~facebook.com|~jobscore.com
+&refer=http$script
+&t=pageview&
+-adobe-analytics.
+-adobe-analytics/
+-adobeDatalayer_bridge.js
+-click-tracker.
+-didomi.js
+-geoIP.js
+-inview-tracker.
+-scroll-tracker.js
+-track-inview.
+-tracking-pixel.
+-universal-analytics/
+.beacon.min.js
+.com/_.gif?
+.com/clk?
+.com/count?
+.com/counter?
+.com/dc.gif?
+.com/g.gif?
+.com/log/?
+.com/stats.aspx?
+.com/track?$~object
+.content_tracking.js
+.de/h.gif?
+.de/l.gif?
+.eloqua.js
+.EventTracking.
+.gatracking.js
+.gif?Log=
+.jp/pv?
+.jp/static/js/track.js
+.lms-analytics/
+.net/l.gif?
+.no/app/aas/a
+.php?action=browse&
+.php?action_name=
+.php?logRefer=
+.php?logType=
+.php?notrack=
+.php?p=stats&
+.php?ping=
+.php?stats=
+.php?tracking=
+.sharecounter.$third-party
+.skimlinks.js
+.stats?action=
+.svc/?tracking_id=
+.v4.analytics.
+/.webscale/rum?
+/.well-known/shopify/monorail
+/0.gif?
+/0c.gif?
+/0pixel.php?
+/1.gif?
+/1pixel.php
+/1px.gif?
+/1px.php?
+/1x1.gif?
+/1x1.png?
+/2.gif?
+/24h-analytics.
+/2x2.gif?$image
+/3.gif?
+/500b-bench.jpg?
+/?dm=*&blogid=$script
+/?essb_counter_
+/?livehit=
+/?log=experiment&
+/?log=performance-
+/?record&key=
+/?sentry_key=
+/?sentry_version=
+/?swift-performance-tracking
+/_/api/v2/analytics/?
+/_/lite/performance/*
+/__imp_apg__/*
+/__rmn.gif?
+/__ssobj/core.js
+/__ssobj/rum?
+/__ssobj/sync?$image
+/__sttm.gif?
+/__ub.gif?
+/__utm.gif
+/__utm.js
+/__wsm.gif
+/_blazor/*$ping
+/_ga?send&
+/_ga?sponsor_pixel=
+/_gz/counter.php?
+/_hcms/perf
+/_lib/ga.js
+/_owa.gif?
+/_sess/script.js
+/_stat/log/*
+/_stat/log_
+/_tracking/*
+/_vercel/insights/script.js
+/_visitcount?
+/a.gif?
+/a/performance_timing/*
+/a8c-analytics.js
+/aap/stats
+/abc.gif?
+/acc/acctag.js
+/access.php?referrer=
+/accessanalyzer/tracker?
+/AccessCounter/index.cgi?
+/accesstracking/*
+/acclog.cgi?
+/acecounter/*
+/acecounter_
+/acounter.php?
+/action/analytics
+/activity.gif?
+/AD/PageHits.
+/adb1.gif?
+/add_page_view?
+/addEvent?action=
+/addLinker.js
+/addLinkerEvents-ga.js
+/addLinkerEvents-std.js
+/addLinkerEvents.js
+/addlog/?
+/addpageview/*
+/adds/counter.js
+/adf-tm-base-min.js
+/adlogger.php
+/adlogger_tracker.php
+/adm_tracking.js
+/adobe-analytics-$domain=~business.adobe.com
+/adobe-analytics.js
+/adobe-analytics2.js
+/adobe-prd/*
+/adobe.visitor-
+/adobe/app-measurement.
+/adobe/AppMeasurement-
+/adobe/logging/*
+/adobe/target/*
+/adobe/VideoHeartbeat.
+/adobe/visitor-
+/adobe/VisitorAPI-
+/adobeanalytics.js
+/adobeAnalytics/*
+/adobeanalyticsandtargetoverwrites.min.
+/adsct?
+/adstat.js
+/adstats.php
+/adstrack.js
+/adtracking.asmx
+/adtrk/tr.gif
+/advstats.js
+/aff_i?offer_id=
+/aff_land?referrer
+/affiliate-tracker.js
+/affiliatetracking.js
+/aftrack.asp
+/aggbug.aspx?
+/ahoy/events
+/ahoy/visits
+/AIT_Analytics.js
+/ajax-hits-counter/increment-hits/index.php
+/ajax-link-tracker.js
+/ajax-track-page-view/*
+/ajax/analytics/*
+/ajax/log?
+/ajax/stat/*
+/ajax_video_counter.php?
+/ajaxlog?
+/akam/*/pixel_
+/akam/10/*
+/akam/11/*
+/akam/13/*
+/alog.min.js
+/amazon_linker.min.js
+/amp-access/cta/*
+/amp-access/cta?
+/amp-access/ping?
+/amp-access/set/*
+/amp-access/set?
+/amp-analytics-
+/amp-analytics/*
+/amp-call-tracking-
+/amp-skimlinks-
+/amp-story-auto-analytics-
+/amp-tealium?
+/amp.gif?
+/amp/?rid=
+/amp/analytics
+/amp/log.json
+/amp/pingback?
+/amp_pingback/*
+/analyse.js
+/analysis-logger/*
+/analysisTag.js
+/analytic/pageview
+/analytics-amplitude-
+/analytics-async-loader.js
+/analytics-client-identification/*
+/analytics-collector
+/analytics-data-collector.js
+/analytics-data-collector.min.js
+/analytics-dotcom/*
+/analytics-efukt.
+/analytics-event-adapter.bundle.min.js
+/analytics-event-adapter.js
+/analytics-event.js
+/analytics-events-
+/analytics-facade.
+/analytics-gjc-min.js
+/analytics-helper.js
+/analytics-hit?
+/analytics-ingestion/*
+/analytics-ingress-
+/analytics-js/*
+/analytics-library.js
+/analytics-minimal-v4.js
+/analytics-minimal.js
+/analytics-ping.js
+/analytics-prod.js
+/analytics-reporter/*
+/analytics-sdk.
+/analytics-secure.js
+/analytics-tracker/*
+/analytics-tracking.js
+/analytics.*/event?
+/analytics.*/ping/?
+/analytics.*/track
+/analytics.analytics/analytics.min.js
+/analytics.bundled.js
+/analytics.config.js
+/analytics.do
+/analytics.gif?
+/analytics.html?
+/analytics.js/v1/*
+/analytics.prod.$domain=~fifteen.eu
+/analytics.sitecatalyst.js
+/analytics.v1.js
+/analytics/?event=
+/analytics/abtest/*
+/analytics/adtags?
+/analytics/amp/*
+/analytics/analytics.js
+/analytics/analytics.min.js
+/analytics/beacons/*
+/analytics/call-tracking.js
+/analytics/capture/*
+/analytics/click?
+/analytics/collect?
+/analytics/comscore.js
+/analytics/dist/analytics.min.js
+/analytics/embed/*
+/analytics/event
+/analytics/ga.js
+/analytics/google.js
+/analytics/layer
+/analytics/metric/*
+/analytics/pagestats
+/analytics/pageview
+/analytics/searches?
+/analytics/track_event/*
+/analytics/tracker.js
+/analytics/trackers?
+/analytics/visit.jsp
+/analytics/visit.php
+/analytics/visit?
+/analytics?http_referer
+/analytics?token=
+/analytics_events.js
+/analytics_js/client.js
+/analytics_prod.js
+/analytics_tag.js
+/analytics_tracker.js
+/analytics_v2.js
+/analytics_wbc.min.js
+/analytics_www.js
+/AnalyticsDataLayer.min.
+/AnalyticsEvent.js
+/analyticsFooter.js
+/analyticsjs.js
+/analyticsscript.ashx
+/analyticstrack.js
+/analyticstracking.js
+/anametrix/cas.js
+/anclytic-ajax.html
+/angular-tag.js
+/anonymous_user_guid.gif?
+/api-analytics.
+/api-insights/log?
+/api/0/stats
+/api/adplogger/*
+/api/async.php?t=user&m=pagehits&
+/api/cmp_tracker|
+/api/drpStats
+/api/event-rfkj/*
+/api/ipv4check?
+/api/log-visit
+/api/log?
+/api/metrics/collect
+/api/pageactivity
+/api/pageview?
+/api/pagevisits
+/api/ping?$~xmlhttprequest
+/api/pixel?
+/api/stat?
+/api/track?guid
+/api/trk?
+/api/v1/firehose?_
+/api/v1/metrics
+/api/v1/stat?
+/api/v1/streamtelemetry
+/api/v2/collector
+/api/v2/jsonlogger
+/api/v3/getPageVisits
+/api/v3/trackSegmentEvent
+/api/video/stats/*$xmlhttprequest
+/api_ip_info.php
+/apilog?
+/apmrum.min.js
+/app-measurement?
+/appdynamics/adrum-
+/appGoogleTagManager-
+/appinsightor.min.js
+/AppMeasurement.js
+/AppMeasurement.min.js
+/AppMeasurement2.js
+/AppMeasurement_Module_ActivityMap.min.js
+/AppMeasurementCustom.min.js
+/aptrk.js
+/ard.png?
+/aria-web-telemetry-
+/art/stats/*
+/article/count?
+/Article/ViewCount/*
+/article_counter.php?
+/article_hit.php?
+/articleOmnitureTracking.js
+/ASPixel.js
+/assets-cdonAnalytics.js
+/assets/beacons.js
+/assets/performance_timing-
+/assets/smarttag-$script
+/astrack.js
+/astracker.js
+/astracker/ast.php
+/at-composer.js
+/at.gif?
+/atapixel.js
+/atatus.js
+/atrk.gif?
+/atrk.js
+/audience-extraction.js
+/audience.gif?
+/audience.min.js
+/audienceScience.js
+/autotrack.carbon.js
+/autotrack.custom.js
+/autotrack.custom.min.js
+/autotrack.js
+/autotrack.min.js
+/AutoTracker.js
+/awin?awc=$image
+/awp.log
+/awpys.log
+/awstats.js
+/awstats_misc_tracker
+/azion-pulse.js
+/aztracker.js
+/b.banners.impress.
+/b.gif?
+/b/s/beacon
+/b/ss/*&aqe=
+/b/ss/*&events=
+/b/ss/*&ndh=
+/b/ss/*/JS-
+/b/ss?AQB=
+/b/stats?
+/ba_tracking.js
+/baiduStatistics.js
+/banalytics.js
+/base/es5/bundle.js
+/base/es6/bundle.js
+/batch.gif?
+/batch/action/_:
+/baynote.js
+/bb-analytics-inline.min.js
+/bc/clk?
+/bcn.gif?
+/bcsensor.js
+/bdg.gif?
+/beacon.cgi?
+/beacon.gif?
+/beacon.js
+/beacon.min.js
+/beacon/affiliates
+/beacon/collector/*
+/beacon/error?
+/beacon/event/*
+/beacon/event?
+/beacon/init?
+/beacon/media?
+/beacon/metrics
+/beacon/page?
+/beacon/perf
+/beacon/receive
+/beacon/stats
+/beacon/timing?
+/beacon/track/*
+/beacon/user-data
+/beacon/v1/batch?
+/beacon?cust=
+/beacons?data=
+/behavior/web/pv?
+/benchmarketingsmarttag/get?
+/better-analytics/js/loader.php
+/bf.gif?ac=
+/bineos.min.js
+/bing-bat.js
+/bingimpression?
+/bitrix/spread.php?
+/bizo.js
+/bk-coretag.js
+/BKVTrack.js
+/blaize/datalayer
+/blank.gif?*%
+/blank.gif?*&
+/blogcounter.js
+/bloomreach.js
+/bluekai.js
+/bluekai.min.js
+/bom/analytics/*
+/boomerang-latest.js
+/boomerang-latest.min.js
+/boomerang.js
+/boomerang/beacon
+/boomr.js
+/boost-sd-analytic.js
+/boost_stats.php
+/bootstrap/metrics.js
+/botd.gif?
+/bower_components/fp/fp.js
+/bpsma.js
+/branchMetrics.js
+/brandAnalytics.js
+/brightedge.js
+/brightspot/analytics/*
+/brightTag-min.js
+/browserinfo?f.sid=
+/bsp-analytics.min.
+/bstat.js
+/btrack.php?
+/bugcounter.php?
+/bundle-analytics.js
+/bundle.tracking.js
+/bundle/analytics.
+/bunsen/events/*
+/busting/facebook-tracking/*
+/busting/google-tracking/*
+/bv-analytics.js
+/byside_webcare.js
+/c.gif?
+/c.wrating.com/*
+/c2_count.js
+/c?siteID=$image,script
+/c_track.php?
+/cache/analytics.js
+/cache_warmer/track/*
+/cached-scripts/analytics.js
+/caixinlog.js
+/call-tracking.js
+/call.tracker.js
+/callbacks/stats?
+/capture_client.js
+/CaptureStat.asmx
+/cdn-cgi/beacon/*
+/cdn-cgi/ping?$image
+/cdn-cgi/rum?
+/cdn-cgi/zaraz/*
+/cdn_cookie_service.html
+/cedexis.js
+/cedexis.radar.js
+/census/RecordHit
+/certifica-js14.js
+/certifica.js
+/cfformprotect/js/cffp.js
+/cgi-bin/cnt/*
+/cgi-bin/count.cgi?
+/cgi-bin/count.pl?
+/cgi-bin/count/*
+/cgi-bin/count1.cgi?
+/cgi-bin/CP/*
+/cgi-bin/ctasp-server.cgi?
+/cgi-bin/ctn?
+/cgi-bin/hits/*
+/cgi-bin/ivw-ssl/*
+/cgi-bin/ivw/*
+/cgi-bin/lcpnp/*
+/cgi-bin/online/uos.cgi?
+/cgi-bin/refsd?
+/cgi-bin/te/in.cgi?
+/cgi-bin/user_online/uos.cgi?
+/cgi-bin/useronline/*
+/cgi-sys/count.cgi?df=
+/cgi/bin/trk.js
+/cgi/count?
+/cgi/stats.pl?
+/cgi/trk.js
+/chartbeat.js
+/chartbeat.min.js
+/chcounter/counter.php
+/check.php?referrer=
+/chicken.gif?*=
+/cklink.gif?
+/cklog.js
+/clear.gif?
+/click/impression?
+/click?track=
+/click_metrics-jquery.js
+/click_stats.js
+/click_track.js
+/click_tracking.js
+/clickcount.asp
+/clickcount.js
+/clickcount.php
+/clickctrl.js
+/clickdimensions-2.js
+/clickheat.js
+/clicklog.js
+/clicklog4pc.js
+/clickm.js
+/clickmap.js
+/clickpathmedia.js
+/clickscript.js
+/clickstats.php
+/clickstream.aspx?
+/clickstream.js
+/clickstream/visit?
+/clicktag.js
+/ClickTail.js
+/clicktale.js
+/ClickTrack.js
+/clicktrack.min.js
+/clicktrack?
+/clicktracker.js
+/clicktracker.php
+/clicktracking.js
+/clicky.js
+/client-metrics/?target
+/client_pathlog.asp?
+/clientele/reports/*
+/clientlib-analytics-core.
+/clientstat?
+/cls/check.php?$image
+/cls_report?
+/cmanalytics.min.js
+/cms.gif?
+/cms/stats/*
+/cmslog.dll?
+/cn-track?
+/cnstats.js
+/cnstats/cntg.php
+/cnt-combined.php?
+/cnt.aspx?
+/cnt.cgi?
+/cnt.js
+/cnt/cnt.php?
+/cnt/start.php?
+/cnt_js.php?
+/cnvtr.js
+/cocoon-master/lib/analytics/access.
+/codesters-analytics.
+/CofinaHits.js
+/cohesion-latest.min.js
+/coinhive.min.js
+/coinimp-cache/*
+/collect.gif?
+/collect.php?tid=
+/collect/?dp=
+/collect/kasupport
+/collect/kf?
+/collect/pageview?
+/collect/pv?
+/collect/sdk?$domain=~iugu.com
+/collect/stats?
+/collect/view?
+/collect/view_count?
+/collect?appName
+/collect?callback=
+/collect?d=
+/collect?data=
+/collect?eid=
+/collect?event=
+/collect?iid=
+/collect?k=
+/collect?r=
+/collect?tid=
+/collect?type=
+/collect?v=
+/collect_data.php?
+/collect_stat.js
+/collector/hit?
+/collector/pageview
+/collector/v1/event
+/collector?report=
+/collectsysteminfo?
+/com.snowplowanalytics.snowplow/*
+/com_joomlawatch/img.php
+/common/analytics.js
+/common/ga.js
+/common/tracker.js
+/comscore-min.js
+/comscore?
+/comscore_beacon/*
+/comscore_pageview
+/confiant.js
+/configuration-stat.js
+/contentiq.js
+/conversion_async.js
+/convertro.js
+/cookie.gif?
+/cookie_ga.js
+/cookieAnalytics.js
+/cookieId.htm
+/cookies/render?
+/coopcommerce-pixel.js
+/coradiant.js
+/core-tracking.js
+/coretracking.php?
+/count.cfm?
+/count.do?
+/count.exe?
+/count.fcg?
+/count.fcgi?
+/count.fgi?
+/count.gif?
+/count.php?
+/count.png?
+/count/count.cgi?
+/count?pid=
+/count_js.php
+/counter-js.php
+/Counter.ashx?
+/counter.asp?
+/counter.aspx?
+/counter.cgi?
+/counter.js.php
+/counter.php?width=
+/counter.pl?
+/counter/acnt.php?
+/counter/collect?
+/counter/stat.php
+/counter/views/*
+/counter1.gif?
+/counter2.gif?
+/counter5.min.js
+/counter?action=
+/counter?id=
+/counter_1.php
+/counter_2.php?
+/counter_3.php
+/counter_access.php
+/countertab.js
+/countinj.cgi?
+/countly.js
+/countly.min.js
+/countpixel.asp
+/countstat.php?
+/countus.php
+/create-lead.js
+/CreateAnalytics.js
+/CreateCookieSSO_
+/criteo.$domain=~criteo.blotout.io|~criteo.github.io|~criteo.investorroom.com
+/criteoRTA.js
+/crypta.js
+/csi?v=*&action=
+/csi?v=2&s=
+/csi?v=3&s=
+/csp_204?
+/csp_log?
+/cta-loaded.js
+/ctr_tracking.php?
+/custom-analytics.js
+/CustomTrackingScript.js
+/cv/conversion.js
+/cv_pixel.js
+/cwTRACK.js
+/cx-tracking.js
+/cx_tracking.js
+/cxense-candy.js
+/cxense-entitlement.js
+/cxense/cx.js
+/cxf-tracking@
+/d.gif?
+/data_collect.js
+/datacollectionapi-client/index.js
+/dataunlocker-prod.js
+/dataunlocker.js
+/datawrapper.gif?
+/dcjs/prod/*
+/dcs.gif?
+/dcs_tag.js
+/default/pAnalytics
+/detm-container-ftr.js
+/detm-container-hdr.js
+/DG/DEFAULT/rest/*
+/dg_measurement_protocol.js
+/dh-analytics-prod/*
+/diffuser.js
+/digital-data-enrichment.min.js
+/discourse-fingerprint_
+/disp_cnt.php
+/dispatch.fcgi?
+/divolte.js
+/dl-web-pixel.js
+/dla_tracker.js
+/dlpageping?
+/dm.gif?
+/dmp/pixel.js
+/dmu2panalytics/ajax_call.php?
+/doctracking.js
+/dolWebAnalytics.js
+/dom-event-tracker.min.js
+/domcount.nsf/WebCounter?
+/dot.asp?
+/dot.gif?
+/dow_analytics.js
+/dpistat/updater.php
+/drwebstat.js
+/dspixel.js
+/dtm_cm.js
+/dtrack.js
+/duel-analytics.js
+/dwanalytics-
+/dwanalytics.js
+/dynamic.ziftsolutions.com/*
+/DynamicAnalytics.js
+/dynamicyield/*
+/dynaTraceMonitor?
+/e.gif?
+/e_stat?g_id=
+/eatms.js
+/ebonetag.js
+/ecanalytics.js
+/ecap.min.js
+/ecblank.gif?
+/ecg-js-ga-tracking/index.
+/ecom/status.jsp?
+/edAnalyticsWrapper.js
+/edata.js
+/edmonds.js
+/efxanalytics.js
+/egcs/v2/collect
+/elastic-apm-rum.umd.min.js
+/eloqua.js
+/elqcfg.js
+/elqcfg.min.js
+/elqfcs.js
+/elqidg.js
+/elqimg.js
+/elqscr.js
+/elt.gif?
+/eluminate?
+/email/track/*$image
+/email/tracking?
+/email_opened_tracking_pixel?
+/EmailOpenTrackLog.aspx?$image
+/EmbedAsyncLogger.js
+/emos2.js
+/emstrack.js
+/emtj_tracker.js
+/emtj_tracker.min.js
+/endpoint/stats.php?
+/EndpointTracker/allendpoints?
+/Engagement/TrackEventAsync
+/ent_counter?
+/entry_stats?
+/err/js/?url=
+/error/js/log?
+/estat.js
+/estatistica.js
+/eta/events?
+/eumcollector/beacons/*
+/eva-analytics.min.js
+/event-log?
+/event-tracking.js
+/event-tracking/*
+/event.cgi?
+/event.gif?
+/event.php?campaign=
+/event/pageview?
+/event/track?
+/event/tracking
+/event/trigger?
+/event/visit?
+/event?event_id=
+/event?eventType=
+/event?s=$ping
+/event_log/*
+/event_logger
+/event_logging/*
+/eventLog.ajax
+/eventlog.js
+/eventLogServlet?
+/eventproxy/track
+/events-collector.
+/events-tracker/*
+/events.gif?
+/events/analytics/*
+/events/capture?
+/events/counter?
+/Events/Impression?
+/events/page-viewed
+/events/pixelEvent
+/events/track/*
+/events/tracking
+/events/view-form-open
+/events/view?
+/events?data=
+/events?rpId=
+/eventsBeacon?
+/eventtracker.js
+/eventtracking-
+/eventtracking.
+/eventtracking/*
+/evercookie.js
+/evercookie/swfobject-2.2.min.js
+/evergage.js
+/evergage.min.js
+/evt.gif?
+/exactag.js
+/exittracker.js
+/expcount/additional.php
+/extendedanalytics.js
+/external-tracking.min.js
+/ezytrack.js
+/f.gif?
+/facebook/pixel.js
+/facebook_fbevents.js
+/facebook_pixel_3_1_2.js
+/facebookpixel.js
+/facebookproductad/views/js/pixel.
+/faciliti-tag.min.js
+/fairfax_tracking.js
+/fb-pixel-dsgvo/*
+/fb-pixel-tracking.js
+/fb-tracking.js
+/fb_pixel_page_view
+/fbanalytics.js
+/fbcounter/counter.cgi
+/fbevents.js
+/fbevents.min.js
+/fbpix-events-
+/fbpixel.js
+/fe_logger?
+/figanalytics-short-ttl.js
+/fingerprint.js
+/fingerprint.min.js
+/fingerprint2.js
+/fingerprint2.min.js
+/fingerprint3.js
+/fingerprint3.min.js
+/firebase-performance-compat.js
+/firebase-performance-standalone.js
+/firestats/js/fs.js.php
+/firm_tracking.js
+/fkounter/counter.js
+/fkounter5/counter.js
+/flowplayer.drive-analytics.min.js
+/flushimpressions?
+/flv_tracking.
+/flying-analytics/*
+/footer-tracking.js
+/footerpixel.gif?
+/foresee-trigger.js
+/fp-3.3.6.min.js
+/fp/check.js
+/fp/clear.png
+/fp/clear1.png
+/fp/clear2.png
+/fp/clear3.png
+/fp/es.js
+/fp/HP?session_id
+/fp/ls_fp.
+/fp/tags.js
+/fp/top_fp.
+/fp2.compressed.js
+/fp2.min.js$domain=~spweb.auction.co.kr|~spweb.gmarket.co.kr
+/fp3.min.js
+/fp_204?
+/fpc/cookie_js.php
+/fpcookie?
+/fpcount.exe
+/fprnt.min.js
+/fps/check.php
+/fptrk.min.js
+/fpv2.js
+/freecgi/count.cgi?
+/friendbuy.min.js
+/frontend-gtag.js
+/frontend-gtag.min.js
+/frontend-metrics/*
+/frontend-sentry-
+/fsrscripts/triggerParams.js
+/fusion/lucid/data/*
+/g_track.php?
+/ga-events.js
+/ga-links.js
+/ga-lite.js
+/ga-lite.min.js
+/ga-local.js
+/ga-multidomain.js
+/ga-script.js
+/ga-scroll-events.js
+/ga-se-async.js
+/ga-targets.js
+/ga-track-code.js
+/ga-track-external.js
+/ga-track.js
+/ga-track.min.js
+/ga-tracker.js
+/ga-tracking-
+/ga-tracking.js
+/ga-tracking.min.js
+/ga.gif?
+/ga.js?grid
+/ga.jsp?$image
+/ga.php?$image
+/ga/yap.js
+/ga1.js
+/ga2.js
+/ga_anonym.js
+/ga_cookie_track
+/ga_event_tracking.js
+/ga_events.js
+/ga_footer.js
+/ga_header.js
+/ga_helper.js
+/ga_keyword2.js
+/ga_loader.js
+/ga_local.js
+/ga_no_cookie.php
+/ga_setup.js
+/ga_social.js
+/ga_tracker.js
+/ga_tracking.js
+/ga_tracklinks.js
+/gaaddons-
+/gaaddons.js
+/gaaddons_univ.js
+/gaAnalytics.js
+/gaclicktracking-universal.js
+/gaclicktracking.js
+/gaCustom.js
+/gaEvents.js
+/gaEventTracking.js
+/gaFunction?
+/gainit.js
+/gajs/analytics.js
+/ganalytics.js
+/gapro.js
+/gascript.js
+/gasocialtracking.js
+/gaStatistics.js
+/gatag.js
+/gatag_v2.js
+/gaTags.js
+/gatc.js
+/gatrack.js
+/gatrack.min.js
+/gaTracker.js
+/gatracking.js
+/gb-tracker-client-3.min.js
+/gc?refurl=
+/gcount.pl?
+/gd_tracker_events.js
+/gemius.3.15.js
+/gemius.js
+/gen204/*
+/gen204?
+/geo.php?
+/geoAnalysis.js
+/geocc.js
+/geocompteur.php
+/geoip/detect?
+/geoip?
+/geoip_cc
+/geoLocationData/v1/*
+/geov2.js
+/get_geoip?
+/get_site_data?requestUUID=
+/getbglog.js
+/getclicky.js
+/getintent.js
+/getlog.gif
+/getstats.js.php
+/gigyaGAIntegration.js
+/gingeranalytics.min.js
+/GlanceCobrowseLoader_
+/GlancePresenceVisitor_
+/global-analytics.js
+/global/analytics/*
+/global/ga.js
+/global/tracker.js
+/global_analytics.js
+/global_analytics/s_code.js
+/global_tracking.js
+/goAnalytics.js
+/google-analyticator/external-tracking.min.js
+/google-nielsen-analytics.js
+/google/analytics.js
+/google/autotrack.custom.js
+/google/autotrack.js
+/google_analitycs.js
+/google_analytics3_v2.js
+/google_analytics4.js
+/google_tag.data_layer.js
+/google_tag.script.js
+/google_tag/*
+/google_tracker.js
+/googleana.js
+/googleAnal.js
+/GoogleAnalystics.js
+/GoogleAnalyticActionLib.js
+/googleAnalytics1.js
+/googleAnalytics4.js
+/GoogleAnalytics?utmac=
+/googleAnalyticsDataLayer.v1.0.min.js
+/GoogleAnalyticsEvents.js
+/GoogleAnalyticsModule.min.js
+/GoogleAnalyticsPlus/distilled.FirstTouch.js
+/googleAnalyticsTracking.js
+/googleEventTracking.js
+/googletag.js
+/googletagmanageranalytics.js
+/googletrack.js
+/googleTracker.js
+/googleTracking.js
+/grumi-ip.js
+/gs-analytics-init.js
+/gs-analytics.js
+/gs.gif?
+/gtag.js
+/gtag.min.js
+/GTag/general_tracker.js
+/gtag/js?
+/gtm-listeners.js
+/gtm-suite.js
+/gtm.js
+/gtm.min.js
+/gtm/gtm-
+/gtmTracking.js
+/gv-analytics/riveted.js
+/gweb/analytics/autotrack.js
+/h.gif?
+/hc/activity
+/header-pixels.min.js
+/HeatmapSessionRecording/configs.php
+/HeatmapSessionRecording/tracker.min.js
+/hg?hc=&hb=*&vjs=
+/hgct?hc=&hb=*&vjs=
+/hints.netflame.cc/*
+/histats.js
+/hit-counter.
+/Hit.ashx?
+/hit.asp?
+/Hit.aspx?
+/hit.c?
+/hit.php?
+/hit.t?
+/hit.xiti?
+/hit/?r=
+/hit/tracker
+/hit2.php
+/hit?aff_id=$xmlhttprequest
+/hit?time=
+/hit_count?
+/hit_counter
+/hit_img.cfm?
+/hitbox.js
+/hitCount.js
+/hitCount.php
+/hitcount/*
+/hitcount?
+/HitCounter.
+/HitCounter/*
+/hitlog.php?
+/Hits/collect/*
+/hits/logger?
+/hitslink.js
+/hittrack.cgi?
+/HitTracker/*
+/HitTracking.
+/hitv4.php
+/hlog.asp
+/hmapxy.js
+/hnpprivacy-min.js
+/hockeystack.min.js
+/homeCounter.php
+/honeybadger.js
+/honeybadger.min.js
+/host-analyticsjs-local/cache/local-ga.js
+/hs_track.js
+/hsc/trk/*
+/hubspot-ga-tracking.js
+/i.gif?
+/i.php?i=
+/i.png?id=
+/i2a.js
+/i2yesCounter.js
+/i?e=pv&url=
+/i?siteid=
+/i?stm=
+/ib_pvcounter.php
+/ibeat.min.js
+/icf-analytics.js
+/id?d_visid_
+/IIQUniversalID.min.js
+/image.ng/*
+/iMAWebCookie.js
+/img?eid=
+/imgcount.cgi?
+/imgcount.php?
+/imgevent?
+/imp.gif?
+/imp.php?
+/imp2.js?
+/imp_check.php
+/imp_cnt.gif?
+/imp_img.php?
+/impr.gif?
+/impresion/zona/*
+/impress.php?
+/impression.ashx
+/impression.gif?
+/impression.js?
+/impression.php?
+/impression.pl?
+/impression.track?
+/impression/inline?
+/impression/track?
+/impressions?
+/ImpressionsEvent.js
+/in.getclicky.com/*
+/in.gif?url=
+/in.php?referer=
+/inboundAnalytics.min.js
+/include/js/ga-set.js
+/increment_page_counter.jsp
+/index.track?
+/indextools.js
+/inline-pixel.js
+/inpl.measure.jssc
+/insales_counter.js?
+/InsightTrk/guuidSkeleton.do?
+/InsightTrk/tracker.do?
+/insitemetrics/uRMJ/ujutilv2sll.js
+/instantpage.js
+/instart.js
+/intake/v2/rum.js
+/interaction/beacon
+/intercept/intercept.js
+/IOL.Analytics.Tracking.min.js
+/IPbeacon.min.js
+/ipdvdc.min.js
+/ips-invite.iperceptions.com/*
+/iterable/track/views/*
+/itgdtracksdk.js
+/itmdp_code.js
+/ivw/SP/*$image,script
+/j.gif?
+/jgs_portal_log_bildschirm.php?
+/joomla-visites.php
+/jquery-gatracker.js
+/jquery.analytics.js
+/jquery.audiencetarget.js
+/jquery.browser-fingerprint-
+/jquery.gatracker.js
+/jquery.google-analytics.js
+/jquery.iframetracker-
+/jquery.trackstar.js
+/js-sdk-event.min.js
+/js/_analytics.js
+/js/analitics.js
+/js/count.js.
+/js/counter.js?
+/js/dart.js
+/js/hbx.js
+/js/logger?
+/js/quantcast-
+/js_ibeat_ext.cms
+/js_log_error.js
+/js_logger.php
+/js_tracker.js
+/js_tracker.min.js
+/js_tracking?
+/jscounter.js
+/jscounter.php
+/jscripts/analytics.js
+/jserrLog?
+/jslogger.php?ref=
+/json/stats?
+/json/tracking/*
+/json?mbox=
+/json?referer=
+/jsonp_geoip?
+/jsstat.cgi?
+/jstats.php
+/jump/?jl=
+/jump/clk1.php
+/kaiseki/script.php
+/kaiseki/track.php?
+/kaizentrack/resources/scripts/script.js
+/kameleoon-iframe.html
+/kameleoon.js
+/kameleoon.min.js
+/kameleoon/script.js
+/keen-tracker.min.js
+/keen-tracking-
+/keen-tracking.js
+/keen-tracking.min.js
+/keen.min.js
+/KenticoActivityLogger/Logger.js
+/keypress.js$script
+/keywee.js
+/kissmetrics.js
+/klaviyo_analytics.js
+/koko-analytics-collect.php
+/koko-analytics-pro/assets/dist/js/script.js
+/koko-analytics/assets/dist/js/*script.js
+/kontera.js
+/krux-sass-helper.js
+/krux.js
+/LandingPageHitLog.aspx?
+/lasso-ga.js
+/lead-tracking.min.js
+/leadgen/ga.js
+/leadtag.js
+/leage.google.tracker.js
+/lhnhelpouttab-current.min.js
+/lib/analytics.js
+/library/svy/broker.js
+/libs/tracker.js
+/liferay-analytics-api.js
+/liferay-analytics-processor.js
+/lightspeed_tracker.js
+/link_track.js
+/linkinformer.js
+/linkpulse.js
+/linktrack.js
+/linktracker.js
+/linktracking.js
+/livecounter.php?wid=
+/livestats.js
+/livezilla/server.php?request=track&
+/ljcounter/?d=
+/load_analytics.php
+/loader/counter.js
+/localga.js
+/locotrack.js
+/log-nt/*
+/log-reporter.js
+/log-view.js
+/log.aspx?
+/log.cfm?
+/log.gif?
+/log.jsp?
+/log.php?*http
+/log.php?id
+/log.php?referrer=
+/log/?pixel=
+/log/analytics
+/log/browser/event
+/log/collect/*
+/log/counter?
+/log/debug?
+/log/error?
+/log/event?
+/log/exposed?
+/log/impression/*
+/log/init?
+/log/jserr.php
+/log/log-event-
+/log/log.php?
+/log/logs?
+/log/page-view
+/log/pageview
+/log/report/*
+/log/sentry/*
+/log/server?
+/log/track/*
+/log/views/*
+/log/web?
+/log2.php?
+/log204?
+/Log?act=$image
+/log?action=
+/log?count=
+/log?data=
+/log?documentUrl=
+/Log?entry=
+/log?event=
+/log?format=
+/log?id=
+/log?kc=
+/log?method=
+/log?ref=
+/log?sLog=
+/log?tag=
+/log?track_
+/log?uuid=
+/log_agent.php
+/log_amp_item_set?
+/log_beacon.js
+/log_e.php?id=
+/log_h.jsp
+/log_stats.php?
+/log_view.php
+/LogAction?
+/logactions.gif?
+/logaholictracker.php
+/logAjaxErr_h.jsp
+/LogAmpHit?
+/loganalyticsevent?
+/logclick.js
+/logcollect.js
+/logcount.php?
+/logcounter.
+/logdata/et/ua
+/logEvent?
+/logExecutionStats?
+/logger.ashx?
+/logger.dll/*
+/logger/?referer=
+/logging-code.
+/logging/ClientEvent
+/logging/log.do
+/logging/logjs
+/logging/pageView
+/logging/pixel?
+/logging/React-UHP?
+/logging/v1/log|
+/LoggingAgent?
+/loggingService.js
+/loggly.tracker-
+/loggly.tracker.
+/LogImpression?
+/logImpressions?
+/logjs.php
+/LogPage.aspx?
+/LogPageRequest?
+/logPerf?
+/logpv.aspx?
+/LogRecorder.php
+/logreferrer.php?
+/logs/report_js_error
+/logstat.js
+/logstats.php
+/logview.js
+/logview?referrer=
+/logview_new.js
+/logviewedpage?
+/ls.gif?
+/lunametrics-
+/m.gif?
+/madAnalytics.js
+/magento-storefront-event-collector@
+/magento/page-visit?
+/magento2.js
+/magpie.js
+/marfeelanalytics.js
+/marketing-analytics.js
+/martypixel?
+/matomo-tracking.js
+/matomo.js$domain=~github.com
+/matomo.php
+/matomo/*$domain=~github.com|~hub.docker.com|~matomo.org|~wordpress.org
+/mcookie.aspx
+/mcount.cgi?
+/measure/pixel/*
+/measure/visit/*
+/medialaanUniversalTracker.js
+/mediametrie.js
+/mediateGA.js
+/megacounter.php
+/mendelstats.js
+/metatraffic/track.asp?
+/metric/?mid=
+/metric/?wid=
+/metrica/sp.js
+/metricool.js
+/metrics-backend/*
+/metrics/bambuser.min.js
+/metrics/event?
+/metrics/ga.js
+/metrics/init?
+/metrics/metrics$domain=~docs.datadoghq.com|~spatineo.com
+/metrics/onload
+/metrics/ping?
+/metrics/rum
+/metrics/statsd/*
+/metrics/survey/*
+/metrics/track/*
+/metrics/v1/frontend/*
+/metrics/vanity/?
+/metrika/tag.js
+/mi/insite/*
+/microsoft.cognitiveservices.speech.sdk.bundle.js
+/min/gtm/*
+/minescripts.js
+/mint/?js
+/mint/?record
+/mintstats/?js
+/mistat-data/onetrack/onetrack.js
+/mixpanel-init.js
+/mixpanel.$domain=~mixpanel.com
+/mlb-ml-analytics.min.js
+/mlopen_track.html
+/mmclient.js
+/mmcore.js
+/mms.*/pv?
+/mms/get_loaders?
+/mn-collector.php
+/mnppixellibrary.min.js
+/mnt/imp?
+/moat/yield.js
+/moksa.js
+/monetate.js
+/mongoose.fp.js
+/monitor/v1/log
+/monitor?rtype=
+/monitor_analytic.js
+/monitus.js
+/monsido.js
+/mormont.js
+/mpel/mpel.js
+/mpixel.js
+/mpulse.js
+/mpulse.min.js
+/ms-widgets/tracking-cookies/*
+/ms.analytics-web-3.min.js
+/mtc.js
+/mtiFontTrackingCode.js
+/mtracking.gif?
+/mtvi_reporting.js
+/mwTag.js
+/mystats2.px?
+/myTracking.js
+/naLogImpressions?
+/natero_analytics.min.js
+/nativendo.js
+/navbar-analytics.js
+/naytev.min.js
+/ncj-pixel.js
+/neilson.js
+/neoworx_tracker.php
+/netmining.js
+/netresults.js
+/neustar.beacon.js
+/new-client/trackers.
+/new-relic.js
+/new-relic.min.js
+/newlog.php?
+/newrelic-browser.js
+/newrelic-browser.min.js
+/newrelic.js
+/newrelic.min.js
+/nielsen.htm
+/nielsen.js
+/NitroCookies.js
+/njs.gif?
+/nlogger.js
+/nLoggerJB_
+/nlRUM.js
+/nm/itracking?
+/NNAnalyticsWPSites.js
+/no-impression.gif?
+/np?log=
+/npm/perfops-rom
+/nr-spa-1216.min.js
+/ntpagetag.gif
+/ntpagetag.js
+/ntrack.asp?
+/null.gif?
+/o.gif?
+/o_code.js
+/o_tealium.js
+/oa-tracking?
+/oas_analytics.js
+/obPixelFrame/*
+/observations/capture?
+/ocount.php
+/ocounter.php
+/odoscope.js
+/om.gif?
+/omni-tracking.min.js
+/omniture/uuid.js
+/omniture/visitorapi.js
+/omniture?
+/omniture_tracking.js
+/omniunih.js
+/one-plugin-analytics-comscore/*
+/onedot.php?
+/onestat.js
+/onetag/*
+/onl/track.php?
+/onlinecount.php
+/oo/*/l.js
+/oo/*/lsync.js
+/oo/cl*.js?rd=
+/opdc.js
+/open/log/*
+/openpixel.gif?
+/openpixel.js
+/opentag-
+/opentag/*
+/opinionlab.js
+/optiextension.dll?$script
+/optimizelyjs/*
+/ossleads_analytics.js
+/ot_e404.gif?
+/OtAutoBlock.js
+/ouibounce.min.js
+/outLoging.js
+/outLoging2.js
+/owa.Analytics.m.js
+/owa.tracker-combined-min.js
+/oxAnalytics.js
+/p.gif?
+/page-addviews?
+/page-analytics.js
+/page-events/trackclick/*
+/page-view.gif?
+/page/load?
+/page/page_view
+/page/unload?
+/page_analytics.js
+/page_counter.js
+/page_perf_log?
+/pagead/conversion_async.js
+/PageCount.php?
+/pageCounter.adp?
+/pagedot.gif?
+/PageHit.ashx
+/pagelogger/connector.php?
+/pagestat?
+/PageStats.asp
+/PageStats.js
+/pagestats/*
+/pagetag.gif?
+/pageTag?
+/PageTrack.js
+/pagetrack.php?
+/PageTracker.js
+/PageTracker?
+/pageTracking.js
+/pageview.ashx
+/pageview.js
+/pageview;
+/pageview?client=
+/pageview?key=
+/pageview?pageId=
+/pageview?pageviewId
+/pageview?t=
+/pageview?user_guid=
+/pageviews.gif?
+/pageviews?token=
+/parsely.js
+/particles/analytics.js
+/partner-analytics/*
+/partner/transparent_pixel-$image
+/partnermetrics.js
+/pbasitetracker.min.js
+/pcount.asp
+/pdp.gif?
+/peach-collector.min.js
+/pepperjam.js
+/perf-beacon-
+/perf-vitals.
+/perf-vitals_
+/perfmatters/js/analytics.js
+/perfmetrics.js
+/performance-metrics.js
+/performance.fcgi?
+/performance/metrics
+/performanceMetrics?
+/perimeterx/px.
+/permutiveIdGenerator.js
+/ph-tracking-1.2.js
+/phenomtrack.min.js
+/PhoenixGoogleAnalytics.min.js
+/php-stats.js
+/php-stats.php?
+/php-stats.phpjs.php?
+/php-stats.recjs.php?
+/phpmyvisites.js
+/piano-analytics.js
+/piNctTracking.js
+/ping.gif?
+/ping/?url=
+/ping/pageload?
+/ping/show?
+/ping?h=
+/ping?referrer=
+/ping?rid=
+/ping?spacedesc
+/ping?utm_
+/ping_g.jsp?
+/ping_hotclick.js
+/pingAudience?
+/pingd?
+/pinger.cgi?
+/pingServerAction?
+/pinterest-pixels.js
+/piwik-$domain=~github.com|~matomo.org|~piwik.org|~piwik.pro|~piwikpro.de
+/piwik.$image,script,domain=~matomo.org|~piwik.org|~piwik.pro|~piwikpro.de
+/piwik/*$domain=~github.com|~matomo.org|~piwik.org|~piwik.pro
+/piwik1.
+/piwik2.
+/piwikapi.js
+/piwikTracker.js
+/pix-ddc-fp.min.js
+/pix.fcg?
+/pix.gif?
+/pixall.min.js
+/pixel-caffeine/build/frontend.js
+/pixel-manager.js?
+/pixel-tracker.js
+/pixel-tracking.
+/pixel.*/track/*
+/pixel.cgi?
+/pixel.fingerprint.
+/pixel.gif?
+/pixel.track
+/pixel/email/*$image
+/pixel/nvrwe?
+/pixel/sbs?
+/pixel/view?
+/pixel/visit?
+/pixel2.gif?
+/pixel?tag=
+/pixel_identifier.js
+/pixel_iframe.php
+/pixel_tracker_cpm_
+/pixel_tracking.js
+/pixel_tracking?
+/pixel_V2.js
+/pixelcounter.$domain=~pixelcounter.co.uk|~pixelcounter.com|~pixelcounter.dev|~pixelcounter.org|~pixelcounters.co.uk|~pixelcounters.uk
+/pixeljs/*
+/pixelNew.js
+/pixelpropagate.js
+/pixels.jsp?
+/pixels/track?
+/pixeltag.js
+/pixeltrack.
+/pixeltracker.bundle.js
+/pixeltracker.js
+/PixelTracking.js
+/pixeltracking/sdk-worker.js
+/pixelyoursite/dist/scripts/public.js
+/pixy.gif?
+/planetstat.php
+/plausible.js$domain=~plausible.io
+/plausible.outbound-links.js$domain=~plausible.io
+/player-test-impression?
+/player/stats.php?
+/plog?id
+/plow.lite.js
+/plugins/catman/*
+/plugins/duracelltomi-google-tag-manager/*
+/plugins/exactmetrics-
+/plugins/nimiq/*$script
+/plugins/nsmg-tracking/*
+/plugins/pageviews-counter/*
+/plugins/stat-dfp/*
+/plugins/status.gif?
+/plugins/userinfo.gif?
+/plugins/vdz-google-analytics/*
+/plugins/visitors-traffic-
+/plugins/wordfence/visitor.php?
+/pmc-cxense.js
+/pointeur.gif?
+/pomegranate.js
+/postcounter.php?
+/postlog?
+/postview.gif?
+/pp/micro.tag.min.js
+/pphlogger.js
+/pphlogger.php
+/ppms.js
+/pr.php?
+/prebid.pro.js
+/preparecookies?callback=$domain=~mirapodo.de|~mytoys.de|~yomonda.de
+/prepixel?
+/presslabs.js$script,~third-party
+/prime-email-metrics/*$image
+/printpixel.js
+/printtracker.js
+/prnx_track.js
+/probance_tracker-min.js
+/probance_tracker.js
+/prod/ncg/*
+/prod/ping?
+/production/analytics.min.js
+/promo/impression?
+/propagate_cookie.php
+/pt.gif?
+/pt?type=pv&
+/ptrack.js
+/pub/as?_ri_=$image
+/pub/imp?
+/public/analytics.js
+/public/statsd
+/public/visit/record
+/public/visitor.json?
+/public/visitor/create?
+/publisher:getClientId?key=
+/publishertag.js
+/pubstats.$domain=~pubstats.dev
+/pubtag.js?
+/pulsario.js
+/pup-comscore/*
+/push-analytics.js
+/push/page-view/*
+/pusher/info?
+/pushlog.min.js
+/pushlog.php
+/pv.gif?
+/pv/?aid=
+/pv2.gif?
+/pv?place=
+/pv?token=
+/pv_count.php
+/pv_web.gif
+/pvcount.js
+/pvcount.php
+/pvcounter.cgi
+/pvcounter.js
+/PvCountUp.action
+/pvevents.gif?
+/pvlog.js
+/pvmax.js
+/pvnoju.js
+/px.gif?
+/px.js?ch=$script
+/px/*/blank.gif?
+/px/client/main.min.js
+/px?t=
+/px_trans.gif
+/pxf.gif?
+/pxl.cgi?
+/pxl.gif?
+/pxl.png?
+/pxlctl.gif
+/pxrc.php
+/pxre.php
+/pxtrack.js
+/qlitics.js
+/qtracker-v3-min.js
+/quant.js
+/quantcast.js
+/Quantcast/cmp_v2.js
+/quantserve.com/*
+/QuotaService.RecordEvent?
+/r.gif?
+/r.rnc?
+/r/collect?
+/radar/trace?
+/RadioAnalytics.js
+/rainbow/master-js
+/RcAnalyticsEvents.js
+/rcAnalyticsLib.js
+/readReceipt/notify/?img=$image
+/readthedocs-analytics.js
+/realtimeapi/impression?
+/realytics-1.2.min.js
+/realytics.js
+/recommendtrack?
+/record-impressions?
+/record-stats?
+/record.do?
+/RecordAnalytic?
+/RecordClick.js
+/RecordHit?
+/referadd?
+/referer/visitor/*
+/referral-tracking.js
+/referral-tracking.min.js
+/referral_tracking.js
+/referrer.js
+/referrer.php?*http
+/referrer_invisible.js
+/referrer_tracking.js
+/reftracker.js
+/renderTimingPixel.
+/report_visit.php
+/reporting/metrics
+/ResonateAnalytics.min.js
+/resource?zones=
+/rest/analytics/*
+/resxclsa.js
+/resxclsx.js
+/retarget_pixel.php
+/retargeting-pixels.php
+/revinit.js
+/revtracking/revinit.js
+/rgea.min.js
+/risk_fp_log?
+/riveted.js
+/riveted.min.js
+/rivraddon.js
+/rkrt_tracker-viajs.php
+/rm-gtm-google-analytics-for-wordpress/js/gtm-player.js
+/rm.gif?
+/rmntracking.js
+/rntracking.js
+/roi_tracker.js
+/roi_tracker.min.js
+/roiengine.js
+/roitrack.cgi
+/roitrack.js
+/roitrack.php
+/roitracker2.js
+/rollbar.js
+/rollbar.min.js
+/rook.tracking.min.js
+/rot_in.php
+/roverclk/*
+/roverimp/*
+/roversync/?
+/rpc.gif?ac=
+/rpc/log/*
+/rpc/log?
+/rpc/preccount?
+/rpFingerprint?
+/rr/t?step=
+/rrweb-record-pack.js
+/rrweb-record.min.js
+/rt_tag.js
+/rt_tag.ofs.js
+/rt_track.js
+/rt_track_event.js
+/rtac/gif?
+/rtd.js
+/rtkbeacon.gif?
+/rtoaster.js
+/rtracker.min.js
+/rtracker/ofs.rtt.js
+/rudder-analytics.js
+/rudder-analytics.min.js
+/rum-collector/*
+/rum-telemetry/*
+/rum-track?
+/rum.gif?
+/rum.min.js
+/rum/events
+/run/perf
+/ruxitagentjs_
+/rwtag.gif?
+/rwtag.js
+/s-pcjs.php
+/s.gif?
+/s_code_global_context.js
+/s_trans.gif?
+/sa.gif?
+/safelinkconverter.js
+/salog.js
+/SAPOWebAnalytics/*
+/satismeter.js
+/scmetrics.*/b/ss/*
+/screencount?vcid=
+/scribd_events?
+/script/pixel.js
+/scriptAnalytics.js
+/scripts.kissmetrics.com/*
+/scripts/clickjs.php
+/scripts/hbx.js
+/scripts/statistics/*
+/scripts/xiti/*
+/scroll-analytics-
+/scroll-track.js
+/scroll-tracker.
+/SdaAnalytics.js
+/sdc.js
+/sdc1.js
+/sdc2.js
+/sdctag1.js
+/sdctag2.js
+/sdcTrackingCode.js
+/sdk/impressions
+/search-cookie.aspx?$image
+/securetracker.js
+/seed.gif?
+/segment/api/*
+/segment/js/*
+/segmentify.js
+/segmentio.js
+/sendLogs?cid
+/sensor.modern.ncl.min.js
+/sensor/statistic?
+/sensorsdata-
+/sensorsdata.$domain=~sensorsdata.cn
+/sentry-browser.
+/sentry-logger.js
+/sentry/bundle.min.js
+/seo.taCo.min.js
+/seo/pageStat/*
+/seostats.php
+/seotracking-v3.js
+/server.php?request=track&output=
+/server/detect.php?
+/service/track?
+/services/pixel.html?
+/servlet/Cookie?
+/session-tracker/tracking-
+/session/preparecookies?$domain=~mirapodo.de|~mytoys.de|~yomonda.de
+/session/referer
+/session/update-beacon
+/sessioncam.js
+/sessioncam.min.$script
+/sessioncam.recorder.js
+/SessionHit.aspx?
+/set-cookie.gif?
+/set_cookie.php?
+/set_optimizely_cookie.js
+/set_tracking.js
+/sfCounter/*
+/sgtracker.js
+/shared/sentry/*
+/sherlock.gif?
+/shinystat.cgi
+/shopify-boomerang-
+/shopify-event.gif?
+/shopify/track.js
+/shopify_stats.js
+/showcounter.js
+/showcounter.php
+/showhits.php?
+/shreddit/perfMetrics
+/silveregg/js/cookie_lib.js
+/simple_reach.js
+/simtracker.min.js
+/site_statistics.js
+/site_stats.js
+/site_stats/*
+/site_tracking.js
+/sitecatalist.js
+/sitecatalyst.js
+/sitecatalyst/tracking.
+/sitecrm.js
+/sitecrm2.js
+/SiteSearchAnalytics.js
+/sitestat.
+/sitestats.gif?
+/sitetrek.js
+/skype-analytics.js
+/sluurpy_track.js
+/smart-pixel.min.js
+/smartpixel-1.js
+/smartpixel.$domain=~smartpixel.com|~smartpixel.tv
+/smartserve-
+/smarttag-prod.
+/smartTag.bundle.js
+/smarttag/smarttag-
+/smetrics.*/b/ss/*
+/smetrics.*/id?
+/smg_tracking/*
+/smmch-mine.js
+/smmch-own.js
+/snowman.gif?p=
+/snowplow.js
+/snowplow/*$script
+/snowplow_$script
+/social_tracking.js
+/socialTracking.js
+/socialtracking.min.js
+/softclick.js
+/solarcode.js
+/somni.js
+/somtag/loader/*
+/somtag/logs/*
+/sophus.js
+/sophus3/logging.js
+/sophus3_logging.js
+/sp-2.0.0.min.js
+/sp_analytics.js
+/sp_tracker.js
+/spacer.gif?
+/splunk-logging-v2.js
+/spresso.sdk.tracking.web.js
+/spymonitor.js
+/sr.gif?
+/sranalytics.js
+/srp.gif?
+/ssl-intgr-net/*
+/SSOCore/update?
+/sst8.js
+/sstat_plugin.js
+/sta.wawacity.
+/standalone-analytics-
+/stat-adobe-analytics.js
+/stat-analytics/*
+/stat-dfp.js
+/stat.gif?
+/stat.htm?$domain=~192.168.0.1|~192.168.1.1
+/stat.js?
+/stat/count
+/stat/event/*
+/stat/event?
+/stat/fe?
+/stat/rt/js?
+/stat2.aspx?
+/stat2.js
+/stat?event=
+/stat?sid=
+/stat?SiteID=
+/stat?track=
+/stat_callback.
+/stat_click.
+/stat_js.asp?
+/stat_page.php
+/stat_vue.php?
+/stataffs/track.php?
+/statblog/pws.php?
+/StatCms/ViewCount?
+/statcollector.
+/statcollector/*
+/statcount.
+/statcounter-$~image
+/statcounter.asp
+/statcounter.js
+/statcountex/count.asp?
+/statistic/pixel?
+/statistics.js?$third-party
+/statistics/pixel/*
+/statlogger.
+/StatRecorder.asp?
+/stats-amp.
+/stats-collect
+/stats-js.cgi?
+/stats-listener.js
+/stats-tracking.js
+/stats.*/event
+/stats.*/hits/*
+/stats.*/tracker.
+/stats.asp?id
+/stats.cgi$image
+/stats.gif?
+/stats.hitbox.com/*
+/stats.php?*http
+/stats.wp.com/*
+/stats/?ref=
+/stats/?rt=
+/stats/add/*
+/stats/adonis_
+/stats/api/collect
+/stats/article?
+/stats/bezoek_count.php
+/stats/collect/*
+/stats/collect?
+/stats/collector.js
+/stats/CounterPage.
+/stats/dlcount_
+/stats/et_track.asp?
+/stats/etag.
+/stats/event.js?
+/stats/events
+/stats/footer.
+/stats/ga.
+/stats/ida_
+/stats/impression
+/stats/imr.
+/stats/init.
+/stats/log.
+/stats/Logger?
+/stats/lookup?
+/stats/lp.min.
+/stats/mark?
+/stats/metrica.
+/stats/mixpanel-
+/stats/page-view
+/stats/page_view_
+/stats/pageview
+/stats/pgview.
+/stats/ping?
+/stats/pv.
+/stats/record.php?
+/stats/record/*
+/stats/search-log
+/stats/survey.
+/stats/transp.bmp
+/stats/v2/visit?
+/stats/visitors
+/stats/welcome.php?
+/stats/xtcore.
+/stats?aid=
+/stats?blog_
+/stats?callback=
+/stats?ev=
+/stats?event=
+/stats?object
+/stats?referer=
+/stats?style$~xmlhttprequest
+/stats_img.png?
+/stats_js.asp
+/stats_tracker.
+/stats_video_
+/statsadvance.js
+/statscollector.
+/StatsCollector/*
+/statscounter/*
+/statscript.js
+/statsd_proxy
+/StatSNA.js
+/StatsPage.
+/StatsPixel?
+/StatsService.RecordStats?
+/statstracker.
+/statstracker/*
+/statstracker?
+/statsupdater.
+/statsVisitesAnnonces?
+/stattag.js
+/stattracker-
+/status-beacon/*
+/status/impression?
+/StatV1?
+/stdlog?
+/storeAdvImpression.jsp
+/stp.gif?
+/stracking.js
+/sTrackStats.js
+/strak.php?t=
+/stream/log.html?
+/streamsense.min.js
+/strpixel.png?
+/stt/track.js
+/stwc-counter/code.js
+/stwc/code.js
+/submission/pageview
+/supercookie.asp
+/supercookie.js
+/sw/analytics.js
+/swa_t.gif?
+/swatag.js
+/swell-ct-ad-data
+/swell-ct-pv^
+/swlapi/stats|
+/sync.gif?partner_
+/sync?visitor_id=
+/synd.aspx
+/szm_mclient.js
+/t.gif?
+/t/event.js?
+/t/event?
+/t?referer=
+/t?tcid=
+/taevents-c.js
+/tag/tag.jsp?
+/tag?tags=
+/taganalyticscnil.js
+/tagAnalyticscnil.php
+/tagCNIL.js
+/tagcommander/prd/*
+/tagmanager/event?
+/tagmanager/pptm.js
+/tags.js?org_id=
+/tailtarget.js
+/talpa-analytics-pro/*
+/tatari-shopify/tracker-snippet-latest.min.js
+/tc_analytics.js
+/tc_analytics.min.js
+/tc_imp.gif?
+/tccl.min.js
+/tck/gif/*
+/teal-comscore-
+/teal-gcianalytics-
+/TeaLeaf.js
+/tealeaf.min.js
+/TeaLeafCfg.js
+/TealeafSDK.js
+/TealeafSDKConfig.js
+/tealeaftarget?
+/tealium-external/utag.js
+/tealium-utag-set.js
+/tealiumAnalytics.js
+/tealiumTagsData.js
+/tenant.min.js
+/thermostat.js
+/thixel.js
+/tiara/tracker/*
+/ticimax/analytics.js
+/tide_stat.js
+/tilda-stat-1.0.min.js
+/timingcg.min.js
+/tjp_beacon.js
+/tjx-tracking-data.js
+/tking/ajax_track_stats?
+/tncms/tracking.js
+/token?referer=
+/tongji.js
+/toplytics.js
+/TouchClarity.js
+/touchclarity/logging.js
+/tr.gif?
+/tr/pageview/*
+/trace-Update.php?
+/trace/link/*$image
+/trace/mail/*$image
+/trace/record?
+/trace?sessionid=
+/traces.php?
+/track-event.
+/track-focus.min.js
+/track-imp?
+/track-internal-links.js
+/track-opening/*
+/track-pixel.
+/track-the-click-public.js
+/track-visit?
+/track.ads/*
+/track.ashx?*=http
+/Track.aspx/*
+/track.png?
+/track.srv.
+/track.v2.js
+/track/?*&event=
+/track/?data=
+/track/aggregate?
+/track/batch?
+/Track/Capture.aspx?
+/track/client-event/*
+/track/client-events
+/track/cm?
+/track/component/*
+/track/event/*
+/track/hit.gif
+/track/identity?
+/track/imp?
+/track/impression/*
+/track/impression?
+/track/pageview?
+/track/pageviews/*
+/track/pixel.php
+/track/pixel/*
+/track/site/*
+/track/statistic/*
+/track/visitors/?
+/track/visits/?
+/track?*&event=
+/track?_event=
+/track?cb=
+/track?data=
+/track?event=
+/track?event_id=
+/track?eventKey=
+/track?events=
+/track?name=
+/track?page_view
+/track?pid=
+/track?referer=
+/track?referrer=
+/track_click?
+/track_event.
+/track_framework_metrics?
+/track_general_stat.php
+/track_js/?
+/track_page_view?
+/track_pageview?
+/track_pixel?
+/track_proxy?
+/track_stat?
+/track_video.php?id=
+/track_visit.js
+/track_visit?
+/track_visitor?
+/trackBatchEvents?
+/TrackClick.
+/trackClickEvent.js
+/trackconversion?
+/tracker.do?
+/tracker.ga.
+/tracker.gif?
+/tracker/?key=
+/tracker/event?
+/tracker/imp?
+/tracker_async.js
+/trackerPageAnalytics.js
+/trackEvent.js
+/trackga.js
+/trackga.min.js
+/tracking-analytics-events.js
+/tracking-cookie.js
+/tracking-events.js
+/tracking-links.js
+/tracking.asmx/AddTrack?
+/tracking.jsp?sid=
+/tracking/airdog
+/tracking/common.html
+/tracking/cookies?
+/tracking/digitaldata.js
+/tracking/events/*
+/tracking/events?
+/tracking/freewheel/*
+/tracking/impression
+/tracking/ipify
+/tracking/jitney/*
+/tracking/log.php?
+/tracking/log?
+/tracking/networktrackingservlet
+/tracking/open?
+/tracking/referrer?
+/tracking/thirdpartytag.js
+/tracking/trackpageview
+/tracking/user_sync_widget?
+/tracking/views/*
+/tracking/xtcore.js
+/tracking202/static/landing.php
+/Tracking?id=
+/tracking?referrer
+/Tracking?t=
+/tracking?vs=
+/tracking_id_
+/tracking_pixel
+/tracking_unitary/*
+/trackingCode-
+/trackingCode.js
+/trackingcookies.
+/trackingDTM.js
+/trackingEventsBlocks/*
+/trackingFooter.js
+/trackingGA.js
+/TrackingHandler.js
+/trackingheader.js
+/trackingImpression/*
+/trackingp.gif
+/trackingPixel.
+/trackingpixel.php
+/TrackingPixel/*
+/trackingTools.
+/trackingVtm.js
+/trackIt.js
+/trackit.php?
+/trackit.pl?
+/trackjs.$domain=~trackjs.com
+/tracklib.min.js
+/trackmerchant.js
+/trackmvisit?
+/trackopen.cgi?
+/trackPage.js?
+/trackpagecover?
+/trackpageview.js
+/trackpageview.php
+/trackPageView/*
+/TrackPageview?
+/trackpixel?
+/trackpush.min.js
+/trackpxl?
+/TrackShopAnalytics.aspx?
+/trackstats?
+/trackTimings.gif?
+/trackui.min.js
+/TrackView/*$xmlhttprequest
+/TrackViews/*
+/trackVisit/*
+/trackvisit?
+/TrackVisitors/*
+/TrackWebPage?
+/traffic-source-cookie.min.js
+/traffic/status.gif?
+/traffic_record.php?
+/TrafficCookie.js
+/traffictrade/*
+/trafic.js
+/trans_pixel.asp
+/transparent1x1.gif
+/transparent1x1.png
+/transparent_pixel.gif
+/transparent_pixel.png
+/transpix.gif
+/travel-pixel-js/*
+/trbo.js
+/trck/eclick/*
+/trck/etms/*
+/trckUtil.min.js
+/trendmd.min.js
+/trigger-visit-event
+/triggertag.js
+/trk.*/impression/*
+/trk.*/open?$image
+/trk.gif?
+/trk.php?
+/trk/api/*
+/trk2.*/open?$image
+/trk?t=$image
+/trkga.js
+/trovit-analytics.js
+/truehits.php?
+/tw-track.js
+/twiga.js
+/tynt.js
+/u.gif?
+/ucount.php?
+/uds/stats?
+/uecomscore_cmp_event_mundo.js
+/uem-ep.js
+/uisprime/track
+/umami.js
+/umg-analytics.min.js
+/umg-analytics/umgaal.min.js
+/umt.gif?
+/unbxdAnalytics.js
+/UniqueUserVisit?
+/updatestats.js
+/urchin.gif?
+/urchin.html?
+/urchin.js
+/user-context?referrer=
+/userdata_n?
+/userfingerprinttoken/*$xmlhttprequest
+/userfly.js
+/users/track?
+/UserTraceCookie?
+/usertrack.aspx?
+/usertracking.js
+/utag.loader.js
+/utag.sync.js
+/utag_data.js
+/utm-tracking.js
+/utm.gif?
+/utm_cookie.js
+/utm_cookie.min.js
+/utrack.js?
+/utrack?
+/utracker.js
+/uutils.fcg?
+/v.gif?
+/v1/adn/visit|
+/v1/pixel.js
+/v1/pixel?
+/v1/stats/track
+/v1/tracker.js
+/v4/analytics/*$~xmlhttprequest
+/v4/metrics
+/v60.js
+/valnet-header.
+/valnetinccom-adapter.js
+/vanillaanalytics/js/vendors/js.cookie.js
+/vastlog.txt?
+/vecapture.js
+/vendor/analytics.js
+/vendor/analytics/*
+/vendor/cedexis/*
+/vendor/xtcore.js
+/vestigo/v1/measure
+/vglnk.js
+/vgwort/*
+/video-ga.js
+/video.counters.
+/video/tracking.js
+/video_count.php?
+/videoanalytic/*
+/videojs-analytics.js
+/videojs.ga.js
+/videojs.ga.min.js
+/videojs.ga.videocloud.js
+/videotracking.js
+/vidtrack.js
+/view-tracking/*$image
+/view.gif?
+/view_stats.js.php
+/ViewCounter/*
+/viewerimpressions?
+/views_tracking/*
+/viewtracking.aspx?
+/viewTracking.min.js
+/visistat.js
+/visit-tag?
+/visit-tracker.js
+/visit.gif?
+/visit/log.js?
+/visit/record.gif?
+/visit/record?
+/visit?id=
+/visit_log.js
+/visitcounter.do
+/visitcounter.js
+/visitinfo.js
+/VisitLog.asmx
+/visitor-params.js
+/Visitor.aspx?
+/visitor.gif?ts=
+/visitor.js?key=
+/visitor.min.js
+/visitor_id.jsp
+/visitor_info.js
+/visitor_info?
+/VisitorAPI.js
+/visitorCookie.js
+/visitorcountry.svc/*
+/VisitorIdentification.js
+/visitors/screencount?
+/visitortrack?
+/visitortracker.pl?
+/visits/pixel?
+/visits?aff_
+/VisitSite.js
+/VisitTracking?
+/visscore.tag.min.js
+/vissense.js
+/visualrevenue.js
+/vjslog?
+/vli-platform/adb-analytics@
+/vs-track.js
+/vs.gif?
+/vsl/imp?
+/vstat.php
+/vtrack.aspx
+/vtrack.php?
+/vtrack?vid=
+/vwFiles/analytics/*
+/w.gif?
+/wa.gif?
+/wa_tracker.js
+/wcount.php?
+/web-analytics.js
+/web-api/log/*
+/web-data-ingress?
+/web-pixel-shopify-app-pixel@
+/web-pixel-shopify-custom-pixel@
+/web-vitals.
+/web-vitals/*
+/web/push?
+/web_analytics/*
+/web_answertip.js
+/Web_JS_Stats.js
+/web_traffic_capture.js
+/WebAnalytics.$domain=~webanalytics.italia.it
+/webAnalytics/*
+/webcounter/*
+/webdig.js
+/webdig_test.js
+/weblog.js?
+/weblog.php?
+/webmnr.min.js
+/webmonitor/collect/badjs.json
+/webmr.js
+/webstat.js
+/WebStat2.asmx
+/webstatistics.php?
+/webstats.js
+/webstats.php
+/webstats/track.php?
+/webstats_counter/*
+/webtag.js
+/webtrack.js
+/webtracker.dll
+/webtracking/*$~subdocument,domain=~wwwapps.ups.com
+/webtraffic.js
+/webtraxs.js
+/webtrekk_mediaTracking.min.js
+/webtrends.js
+/webtrends.min.js
+/webxmr.js
+/wf-beacon-
+/whisper?event=
+/white_pixel.gif?
+/wildfire/i/CIMP.gif?
+/wix-engage-visitors-
+/wlexpert_tracker.js
+/wmxtracker.js
+/woocommerce-google-adwords-conversion-tracking-tag/*
+/woopra.js
+/wp-coin-hive-util.js
+/wp-coin-hive.js
+/wp-content/plugins/confection/bridge.php
+/wp-content/plugins/pageviews/pageviews.min.js
+/wp-content/plugins/wp-click-track/js/ajax.js
+/wp-content/plugins/wp-clickmap/clickmap.js
+/wp-content/tracker.js
+/wp-js/analytics.js
+/wp-monero-miner-class.js
+/wp-monero-miner-util.min.js
+/wp-monero-miner.js
+/wp-monero-miner.min.js
+/wp-sentry-browser.min.js
+/wp-slimstat.js
+/wp-slimstat.min.js
+/wp-statistics-tracker.min.js
+/wp-statistics/assets/js/tracker.js
+/wp-statistics/v2/hit?
+/wp-stats-manager/js/wsm_new.js
+/wp-useronline/useronline.js
+/wp_stat.php?
+/wpengine-analytics/js/main.js
+/wps-visitor-counter/styles/js/custom.js
+/wpstatistics/v1/hit?
+/WRb.js
+/wreport.js
+/writelog.js
+/wstat.pl
+/wstats.php?
+/wt_capi.js
+/wtbase.js
+/wtd.gif?
+/wtid.js
+/wtinit.js
+/wtrack?event=
+/wwwcount.cgi?
+/wxhawkeye.js
+/wysistat.js
+/x.gif?
+/x_track.php?
+/xgemius.js
+/xiti.js
+/xml/pv.xml?
+/xn_track.min.js
+/xstat.aspx?
+/xtclick.js
+/xtclicks.js
+/xtcore.js
+/xtroi.js
+/yad_sortab_cetlog.js
+/yandex-metrica-watch/*
+/yandex-metrika.js
+/yastat.js
+/ye-gatracker.js
+/yell-analytics-app.js
+/yell-analytics-min.js
+/yell-analytics.js
+/yna_stat.js
+/youtubeVideoAnalytic.js
+/ystat.js
+/yt-track-streamer
+/z.gif?
+/zaius-min.js
+/zaius.js
+/zanox.js
+/zaraz/s.js
+/zdcc.min.js
+/zhugeio.js
+/ztracker.js
+://a869.
+://analytics-cdn.
+://analytics.*/collect
+://analytics.*/event
+://analytics.*/hits/
+://analytics.*/impression
+://analytics.*/page_entry
+://analytics.*/pageview/
+://beacon.*/track
+://blue.*/script.js
+://client.rum.
+://cmpworker.
+://collect.*/pageview
+://collector.*/event
+://elqtrk.
+://fathom.$domain=~fathom.fm|~fathom.info|~fathom.io|~fathom.video|~fathom.world|~fathomdelivers.com|~fathomseo.com|~usesfathom.com
+://gtrack.*/dye
+://insights-collector.
+://internal-matomo.
+://lightning.*/launch/
+://matomo.$domain=~matomo.org
+://mint.*/?js
+://piwik.$domain=~matomo.org|~piwik.pro
+://segment-api.
+://segment-cdn.
+://track.*/collect
+://track.*/dye
+://track.*/visitor/
+://tracker.*/pageview
+://tracking.*/beacon/
+://tracking.*/event
+?[AQB]&ndh=1&t=
+?act=counter&
+?action=event&
+?action=impression&
+?action=log_promo_impression
+?action=saveViewStat&
+?action=statsjs&
+?action=track_visitor&
+?action=tracking_script
+?event=impressions&
+?event=log&
+?event=pageview&
+?event=performance&
+?event=performancelogger:
+?local_ga_js=
+?log=stats-
+?log_performance_metrics
+?logType=impression&
+?logType=trackEvent&
+?pageviews=$third-party
+?statify_referrer=
+?type=page&event=
+?type=pageview&
+_beacon?
+_c.gif?c=
+_chartbeat.js
+_event_tracking?
+_imp?Log=
+_logHuman=
+_nedstat.js
+_rpc/log?
+_social_tracking.js
+_stat.php?referer=
+_stat_counter.php?
+_trackWebtrekkEvents.
+_view_pixel&$image
+_webanalytics.
+_WebVitalsReporter_
+! Facebook pixels
+! /ajax/bnzai?_
+/ajax/bz?_
+! https://imgsen.com/mdaywmhb6u6d/photo-1551582045-6ec9c11d8697.jpg.html
+.com/vtrack
+! parked domains
+/ls.php?t=
+/track.php?domain=
+! pinterest.*
+/ContextLogResource/*
+/statslogresource/*
+! Amazon
+/ajax/counter?ctr=
+/batch/1/OE/*
+/insights/reportEvent/*
+/loi/imp?
+/remote-weblab-triggers/*
+/uedata?
+/unagi.amazon.
+/usage/Clickstream?
+/usage/ReportEvent?
+! hellofresh / greenchef / everyplate
+/otlp/traces
+! Pinterest
+/_/trace/trace/*
+! real time web analytics
+/rrweb-script.
+/rrweb.js
+/rrweb.min.js
+! DNS checks
+/DNSCheck.js
+/DNSChecker.js
+! hawkeye
+/hawk.js
+/hawkeye.js
+/hawklinks.js
+! cloudflare tracking
+/cdn-cgi/apps/body/*$script,~third-party
+/cdn-cgi/apps/head/*$script,~third-party
+! Notifcation scripts
+/blink-sw.js
+/epsilon.v2.
+/PushexSDK.
+/pushly-sdk.
+/pushly-sw.
+! propertyguru fingerprinting
+/pg*.js?PID=$xmlhttprequest
+! Akamai fingerprinting
+! https://publicwww.com/websites/%22_cf.push%22/
+! /^https?:\/\/.*\/(public|resources|static|assets)\/([a-f0-9]){28,30}$/$script,~third-party,xmlhttprequest,domain=~cand.li
+! Admiral
+/admiral.js
+/js/admiral-
+! eventbrite tracking
+/search/log_requests/*
+! Consent/GDPR tracking
+/cmp-hello.
+/cmp/messaging.js
+/cmp3.js
+/slot_cmp.js
+/sourcepoint.js
+/SourcePoint_JS_Files/*
+! Eulerian
+&pagegroup=*&url=$script
+/ajax/eulerian/*
+/eulerian.js
+! clicktripz
+/r/ucb.js$script,~third-party
+! google tracking
+/client_204?$image,other,ping,script
+/csi_204?$image,other,ping,script
+/gen_204?$image,other,ping,script
+/generate_204?$image
+||adservice.google.
+||google.*/url?$ping
+||google.com/gen_204?
+||googleapis.com^*/gen_204?
+||gstatic.com/gen_204?
+! Adblock tracking
+/ab_track.js
+/adb.policy.js
+/adblockLogger/*
+/sk-logabpstatus.php
+/wp-admin/admin-ajax.php?action=adblockvisitor$~third-party
+/ws_client?zone=gen$websocket
+/wutime-adblocktracker/*
+
+! *** easylist:easyprivacy/easyprivacy_general_emailtrackers.txt ***
+&mi_ecmp=
+-track-email-open?
+.acemlna.com/Prod/link-tracker?$image
+.acemlnb.com/Prod/link-tracker?$image
+.alcmpn.com/
+.app.returnpath.net/
+.aveda.com/t/$image
+.awstrack.me/$image
+.backblaze.com/e2t/$image
+.backcountry.com/o/$image
+.bahn.de/op/$image
+.bhphotovideo.com/mo/
+.birdsend.net/o/$image
+.bluekai.com/*?e_id_
+.bmetrack.com/c/$image
+.cmail19.com/t/$image
+.cmail19.com/ti/$image
+.cmail20.com/t/$image
+.ct.sendgrid.net/$image
+.delivery-status.com/open?
+.demdex.net/event?
+.doctolib.de/tr/op/$image
+.doubleclick.net/$image
+.duolingo.com/open/
+.efeedbacktrk.com/$third-party
+.email.*/tr/op/$image
+.emltrk.com/
+.epicgames.com/O/
+.eventim.de/op/$image
+.everestengagement.com/$image
+.eviq.org.au/CMSModules/$image
+.facebook.com/tr/$image
+.facebook.com/tr?$image
+.flipboard.com/usage?
+.getblueshift.com/q/
+.getsendmail.com/p/$image
+.gif?stat=open
+.goodwell18.com/track/
+.google-analytics.com/
+.hootsuite.com/trk?
+.informz.net/z/$image
+.innologica.com/t/
+.intercom-mail.com/q/
+.intercom-mail.com/via/$image
+.inxmail-commerce.com/tracking/$image
+.inxserver.com/transparent.gif
+.keap-link003.com/$image
+.keap-link004.com/$image
+.keap-link005.com/$image
+.keap-link006.com/$image
+.keap-link007.com/$image
+.keap-link008.com/$image
+.keap-link009.com/$image
+.keap-link010.com/$image
+.keap-link011.com/$image
+.keap-link012.com/$image
+.keap-link013.com/$image
+.keap-link014.com/$image
+.keap-link015.com/$image
+.keap-link016.com/$image
+.kijiji.ca/r/
+.klclick.com/$image
+.list-manage.com/track/
+.mail.odysee.com/o/$image
+.mailbutler.io/tracking/
+.mailgun.patreon.com/o/$image
+.mailing.*/oo/$image
+.maillist-manage.com/click/$image
+.maillist-manage.com/clicks/$image
+.members.babbel.com/mo/
+.mgmailer.binance.com/o/$image
+.mightyape.co.nz/mo?
+.mjt.lu/oo/$image
+.mkt2684.com/eos/
+.mozilla.org/eos/$image
+.ne16.com/do/
+.netcologne.de/-open2/$image
+.oculus.com/collect/
+.online.costco.com/t?$image
+.pstmrk.it/open^
+.publish0x.com/t/
+.secureserver.net/bbimage.aspx?
+.sendcloud.net/track/
+.sendemail.gate.io/o/$image
+.sendibm1.com/*.gif?
+.sendibm1.com/mk/
+.sendibt2.com/tr/op/$image
+.simplicitycrm.com/rd/
+.smartrmail.co/o/$image
+.smtp.net/o/$image
+.southwest.com/r/$image
+.sparkpostmail.com/q/$image
+.sparkpostmail2.com/q/$image
+.spmailtechnol.com/q/$image
+.spmailtechnolo.com/q/$image
+.spreadshirt.net/mo/$image
+.starbucks.com/a/
+.substack.com/o/$image
+.substackcdn.com/open?$image
+.theatlantic.com/email.gif?
+.titus.de/oo/$image
+.travis-ci.com/r/$image
+.tripadvisor.com/MptUrl?$image
+.tripadvisor.com/q/$image
+.umusic-online.com^*/o.gif
+.useinsider.com/pixel?$image
+.warehousefashion.com/warehouse/e/$image
+.webex.com/q/
+.wix.com/_api/ping/
+.zalando.com/images/probe.png
+.zippingcare.com/beacon/$image
+/1x1_usermatch.gif?
+/ap.lijit.com/*
+/beacon.krxd.net/*
+/beaconimages.netflix.net/*$image
+/click.*/q/*$image
+/click.em.nike.com/*$image
+/click.email.$image
+/click.php?c=
+/clicks.*/q/*$image
+/clicks.email.$image
+/cmail2.com/t/*
+/coherentpath.link/o/*$image
+/condor.slgnt.eu/optiext/optiextension.dll?$image
+/cp.gap.com/o/*$image
+/e.customeriomail.com/e/o/*$image
+/email-pixel?
+/email.t.*/o/*$image
+/email/open?
+/email_open_log_
+/emimp/*$image
+/engage.indeed.com/*$image
+/eo?_t=$image
+/etrack01.com/*$image
+/eventing.coursera.org/img/*
+/exmo.email/open.html
+/gate.amnesty-international.*/open.php?
+/gp/r.html?$image
+/gridinbound.blob.core.
+/impression?mkevt=
+/inbox.*/imp?$image
+/is-tracking-pixel-
+/klicks.nebenan.de/q/*$image
+/link-tracker?*&l=open&
+/link.coindesk.com/img/*
+/link.divenewsletter.com/img/*$image
+/link.e-mail.*/mo/*$image
+/link.email.usmagazine.com/img/*$image
+/link.morningbrew.com/img/*.gif
+/link.news.*/mo/*$image
+/link.oneplus.com/mo$image
+/link.pbtech.co.nz/mo/*$image
+/link.theatlantic.com/img/*
+/link.thrillist.com/img/*$image
+/links1.strava.com/*$image
+/lzdmailer.letter.open?
+/m-email/t.png?
+/mail-stat.airdroid.com/*$image
+/mail-tracking/*$image
+/mail.sparksport.co.nz/forms/read/*
+/mail.sparksport.co.nz/mail/read/*
+/MailIsRead?$image
+/maillist.*/t/*$image
+/media.sailthru.com/5ik/1k4/9/*.gif
+/newsletter/log/*$image
+/newsletter/read?s=$image
+/newslink.reuters.com/img/*$image
+/newtrackingscript.
+/notifications.google.com/g/img/*$image
+/notifications.googleapis.com/email/t/*
+/notifications/beacon/*
+/open.aspx?
+/open.html?$image
+/open/?ot=$image
+/opens.jscrambler.com/*$image
+/p/rp/*?mi_u=*=&sap_id=$image
+/p1x1.gif
+/page.bsigroup.com/*
+/pixel-prod.
+/pixel.mathtag.com/*
+/pixel?cid=
+/post.pinterest.com/q/*$image
+/pqt.email/o/*$image
+/prod-puc-all/*/open^$image
+/px/track?
+/redir.inxmail-commerce.com/r/*$image
+/rover.ebay.com/roveropen/*
+/sendmail.backerupdate.com/t/*
+/shoutout.wix.com/*$image
+/sli.*/imp?$image
+/sptracking.
+/ss/o/*.gif
+/t.ifly.southwest.com/*$image
+/t.paypal.com/*$image
+/t.yesware.com/t/*$image
+/T/OFC4/*$image
+/track/open.php?
+/track/open?
+/tracking.fanbridge.com/*
+/tracking.srv2.de/op/*$image
+/tracking/email.php
+/trcksp.
+/wf/open?upn=$image
+/wizrocketmail.net/r?$image
+/znsrc.com/c/*$image
+://2ip.*/member_photo/$third-party
+://email.*/e/o/
+://email.*/o/$image
+://parcel-api.delivery-status.*/open/$image
+://t.order.*/r/?id=$image
+_ad_impression.
+_adobe_analytics.js
+_track_pixel.gif?
+img.promio-connect.com$image
+omni.soundestlink.com$image
+!-----------------Third-party tracking domains-----------------!
+! *** easylist:easyprivacy/easyprivacy_trackingservers_general.txt ***
+||00px.net^
+||1cros.net^
+||2cnt.net^
+||2l6ddsmnm.de^
+||2smt6mfgo.de^
+||31daa5lnq.de^
+||34.215.155.61^
+||3gl.net^
+||4251.tech^
+||44.228.85.26^
+||520886.xyz^
+||a1webstrategy.com^
+||a8723.com^
+||aaxwall.com^
+||acsbapp.com^
+||act-server-prod.7swnm9dm8q.eu-west-1.elasticbeanstalk.com^
+||adcontroll.com^
+||admaxium.com^
+||adnext.co^
+||adrtx.net^
+||adscore.com^
+||adspsp.com^
+||adstk.io^
+||adultium.com^
+||agkn.com^
+||agma-analytics.de^
+||allvideometrika.com^
+||alpha1trk.com^
+||altopd.com^
+||analys.live^
+||analysis.fi^
+||anonstat.pw^
+||apeagle.io^
+||apenterprise.io^
+||apxl.io^
+||as3.io^
+||awmonitor.com^
+||ayc0zsm69431gfebd.info^
+||bfmio.com^
+||bidgx.com^
+||bidswitch.net^
+||bkrtx.com^
+||bluekai.com^
+||blueoyster.click^
+||bonne-terre-data-layer.com^
+||boomtrain.com^
+||bounceexchange.com^
+||bqstreamer.com^
+||bringmethehats.com^
+||briskeagle.io^
+||briskpelican.io^
+||brontops.com^
+||brsrvr.com^
+||btloader.com^
+||bx-cloud.com^
+||bydst.com^
+||cadsuta.net^
+||captcha-display.com^
+||catsunrunjam.com^
+||cbdatatracker.com^
+||cdnhst.xyz^
+||ciqtracking.com^
+||cityrobotflower.com^
+||ck123.io^
+||ckies.net^
+||clarity.ms^
+||clearbitscripts.com^
+||click360.io^
+||cliquelead.com^
+||cloudwp.io^
+||clrt.ai^
+||cntxtfl.com^
+||confiant-integrations.net^
+||convead.io^
+||convertlink.com^
+||cpx.to^
+||crwdcntrl.net^
+||cvlb.dev^
+||cxense.com^
+||cxt.ms^
+||cybba.solutions^
+||czx5eyk0exbhwp43ya.biz^
+||da29e6b8-f018-490f-b25f-39a887fc95e7.xyz^
+||dataofpages.com^
+||demdex.net^
+||digi-ping.com^
+||directavenue.tech^
+||dispatchunique.com^
+||dispatchvegasplus.com^
+||dkotrack.com^
+||dlxpix.net^
+||dm-event.net^
+||dmpxs.com^
+||doublestat.info^
+||dspx.tv^
+||dttrk.com^
+||dwin1.com^
+||dwin2.com^
+||e1e.io^
+||eagle-insight.com^
+||easycompute.systems^
+||ecn-ldr.de^
+||ed-sys.net^
+||efreecode.com^
+||egoi.site^
+||emailsnow.info^
+||emycewiw.xyz^
+||enthusiastgaming.net^
+||envato.market^
+||epsilondelta.co^
+||eqy.link^
+||etop.ro^
+||everesttech.net^
+||experianmatch.info^
+||ezodn.com^
+||ezstat.ru^
+||f27tltnd.de^
+||fairdatacenter.de^
+||fastemu.co^
+||fastfinch.co^
+||fastgull.io^
+||fasttiger.io^
+||ffbbbdc6d3c353211fe2ba39c9f744cd.com^
+||ffe390afd658c19dcbf707e0597b846d.de^
+||firstblackphase.com^
+||fn-pz.com^
+||fourtimessmelly.com^
+||fpapi.io^
+||fpcdn.io^
+||fptls.com^
+||fptls2.com^
+||fptls3.com^
+||funnelserv.systems^
+||fzlnk.com^
+||g10300385420.co^
+||g11686975765.co^
+||g1188506010.co^
+||g11885060100.co^
+||g12083144435.co^
+||g12281228770.co^
+||g1584674682.co^
+||g1782759015.co^
+||g1782759016.co^
+||g1980843350.co^
+||g2575096355.co^
+||g792337340.co^
+||g792337342.co^
+||g792337343.co^
+||g8715710740.co^
+||g8913795075.co^
+||g9111879410.co^
+||g9508048080.co^
+||g9706132415.co^
+||g990421675.co^
+||g990421676.co^
+||gbqofs.com^
+||geoedge.be^
+||geotargetly-api-*.com^
+||glamipixel.com^
+||glimr.io^
+||glookup.info^
+||go-mpulse.net^
+||googleoptimize.com^
+||googletagmanager.com^
+||gw-dv.vip^
+||hbiq.net^
+||hdmtools.com^
+||herbgreencolumn.com^
+||hs-analytics.net^
+||hsadspixel.net^
+||hsleadflows.net^
+||hubty.network^
+||i218435.net^
+||ia-dmp.com^
+||iconmediapixel.com^
+||iconnode.com^
+||id-ward.com^
+||id5-sync.com^
+||idx.lat^
+||ilius.net^
+||impactcdn.com^
+||impactradius-event.com^
+||imrworldwide.com^
+||imzahrwl.xyz^
+||ineed2s.ro^
+||innerskinresearch.com^
+||insigit.com^
+||instantfox.co^
+||intellimizeio.com^
+||irs01.com^
+||jams.wiki^
+||jcpclick.com^
+||jubbie.de^
+||k5a.io^
+||krxd.net^
+||kspotson.de^
+||ldnlyap.com^
+||leadhit.io^
+||lite-cdn.com^
+||liveyield.com^
+||lltrck.com^
+||lmepbq.com^
+||log.dance^
+||logicanalytics.io^
+||logtail.com^
+||loopcybersec.com^
+||lsdm.co^
+||maggieeatstheangel.com^
+||matheranalytics.com^
+||maxepv.com^
+||maxtrafixx.tech^
+||mb-tracking.com^
+||mcangelus.com^
+||mdhv.io^
+||mediamathrdrt.com^
+||mirabelanalytics.com^
+||mitour.de^
+||mitself.net^
+||ml-sys.xyz^
+||mm-api.agency^
+||mobildev.in^
+||monicaatron.com^
+||monu.delivery^
+||mors22.com^
+||mrpdata.net^
+||mt48.net^
+||mxpnl.com^
+||mysingleromance.com^
+||n0909.com^
+||native-track.com^
+||niblewren.co^
+||nigelmidnightrappers.com^
+||nimblebird.co^
+||nimbleswan.io^
+||nmgassets.com^
+||nmgplatform.com^
+||noeyeon.click^
+||noeyeon.com^
+||notifpush.com^
+||ns1p.net^
+||nxakpj4ac8gkd53.info^
+||omappapi.com^
+||omtrdc.net^
+||openfpcdn.io^
+||oppuz.com^
+||opti-digital.com^
+||optistats.ovh^
+||ostrichesica.com^
+||p2r14.com^
+||p7cloud.net^
+||pageid.info^
+||peiq.services^
+||permutive.app^
+||pippio.com^
+||pix.pub^
+||pixel-tracker.com^
+||pixmg.com^
+||pixrealm.com^
+||pjstat.com^
+||plausiblecdn.co^
+||procroanalytics.com^
+||progmxs.com^
+||pushvisit.xyz^
+||pzapi-ij.com^
+||pzapi-kg.com^
+||pzimff.com^
+||quantserve.com^
+||quickkoala.io^
+||r42tag.com^
+||raac33.net^
+||rapidpanda.io^
+||rapidzebra.io^
+||realtimely.io^
+||rezync.com^
+||rfpx1.com^
+||rkdms.com^
+||robotflowermobile.com^
+||rtactivate.com^
+||rumt-sg.com^
+||s-onetag.com^
+||sbgsodufuosmmvsdf.info^
+||sc-static.net^
+||screen13.com^$image
+||script.ac^
+||seadform.net^
+||selphiu.com^
+||seoab.io^
+||sgstats.com^
+||site24x7rum.eu^
+||sitecounter.site^
+||sitedataprocessing.com^
+||sjpf.io^
+||snptrk.com^
+||soapfighters.com^
+||solutionshindsight.net^
+||speedyfox.io^
+||speedyrhino.co^
+||spinnaker-js.com^
+||stack-sonar.com^
+||stat.ovh^
+||statisticplatform.com^
+||statisticsplatform.com^
+||statsbox.info^
+||summerhamster.com^
+||superpointlesshamsters.com^
+||t13.io^
+||takingbackjuly.com^
+||targetemsecure.blob.core.windows.net^
+||tatpek.com^
+||techpump.com^
+||test.vast^
+||testingmetriksbre.ru^
+||thatmonkeybites3.com^
+||the-ozone-project.com^
+||thefontzone.com^
+||tkrconnector.com^
+||tncid.app^
+||track-selectmedia.com^
+||trackclicks.info^
+||tracking24.net^
+||transmapp.com^
+||triplestat.online^
+||trk-maiorum.com^
+||trkbc.com^
+||trkn.us^
+||tru.am^
+||truffle.bid^
+||trx-hub.com^
+||try-snowplow.com^
+||tryzens-analytics.com^
+||turboeagle.co^
+||turbolion.io^
+||tvpixel.com^
+||tw.cx^
+||ugdturner.com^
+||uidapi.com^
+||uqd.io^
+||ustat.info^
+||venture-365-inspired.com^
+||venusrevival.com^
+||vfghe.com^
+||vfgte.com^
+||videoplayerhub.com^
+||vkanalytics.net^
+||vpdcp.com^
+||vstats.me^
+||walkerllaw.org^
+||wct-2.com^
+||whale3.io^
+||widgetbe.com^
+||wknd.ai^
+||wlct-one.de^
+||wlct-two.de^
+||wlt-alice.de^
+||wlt-jupiter.de^
+||wmgroup.us^
+||woodpeckerlog.com^
+||yardianalytics.com^
+||yndhi.com^
+||yottlyscript.com^
+||youborafds01.com^
+||youboranqs01.com^
+||youboranqs02.com^
+||z0uolej1qnxzub1.info^
+||zdbb.net^
+||zenaps.com^
+||zfctrack.net^
+||zhctrack.net^
+||zippyfrog.co^
+||zononi.com^
+||zqtk.net^
+
+! *** easylist:easyprivacy/easyprivacy_trackingservers_thirdparty.txt ***
+||0emm.com^$third-party
+||103bees.com^$third-party
+||105app.com^$third-party
+||11nux.com^$third-party
+||123count.com^$third-party
+||123stat.com^$third-party
+||15gifts.com^$third-party
+||1freecounter.com^$third-party
+||1pel.com^$third-party
+||200summit.com^$third-party
+||204st.us^$third-party
+||206solutions.com^$third-party
+||247-inc.com^$third-party
+||247-inc.net^$third-party
+||247ilabs.com^$third-party
+||24businessnews.com^$third-party
+||24counter.com^$third-party
+||24log.com^$third-party
+||2o7.net^$third-party
+||360i.com^$third-party
+||360tag.com^$third-party
+||360tag.net^$third-party
+||3dlivestats.com^$third-party
+||3dstats.com^$third-party
+||3enm.com^$third-party
+||40nuggets.com^$third-party
+||4oney.com^$third-party
+||55labs.com^$third-party
+||6sc.co^$third-party
+||720-trail.co.uk^$third-party
+||77tracking.com^$third-party
+||7bpeople.com^$third-party
+||7eer.net^$third-party
+||8020solutions.net^$third-party
+||99counters.com^$third-party
+||99stats.com^$third-party
+||9nl.eu^$third-party
+||a-cast.jp^$third-party
+||a-counters.com^$third-party
+||a-pagerank.net^$third-party
+||a013.com^$third-party
+||a4b-tracking.com^$third-party
+||a8.net^$third-party
+||a8ww.net^$third-party
+||aaddzz.com^$third-party
+||aamsitecertifier.com^$third-party
+||aapsis.com^$third-party
+||aaxdetect.com^$third-party
+||abcstats.com^$third-party
+||ablsrv.com^$third-party
+||ablyft.com^$third-party
+||abmr.net^$third-party
+||absolstats.co.za^$third-party
+||abtrcking.com^$third-party
+||abtshield.com^$third-party
+||acc-hd.de^$third-party
+||accdab.net^$third-party
+||access-analyze.org^$third-party
+||accessintel.com^$third-party
+||acecounter.com^$third-party
+||acetrk.com^$third-party
+||acexedge.com^$third-party
+||acint.net^$third-party
+||acq.io^$third-party
+||acsbap.com^$third-party
+||acstat.com^$third-party
+||active-trk7.com^$third-party
+||activeconversion.com^$third-party
+||activemeter.com^$third-party
+||activeprospects.com^$third-party
+||actnx.com^$third-party
+||acxiom-online.com^$third-party
+||acxiomapac.com^$third-party
+||ad-srv-track.com^$third-party
+||ad1x.com^$third-party
+||adabra.com^$third-party
+||adalyser.com^$third-party
+||adara.com^$third-party
+||adblade.com^$third-party
+||adblockrelief.com^$third-party
+||addfreestats.com^$third-party
+||addwish.com^$third-party
+||adelixir.com^$third-party
+||adform.net^$third-party
+||adfox.ru^$third-party
+||adgreed.com^$third-party
+||adheart.de^$third-party
+||adhslx.com^$third-party
+||adinsight.co.kr^$third-party
+||adinsight.com^$third-party
+||adinte.jp^$third-party
+||adku.co^$third-party
+||adku.com^$third-party
+||admantx.com^$third-party
+||admaster.com.cn^$third-party
+||admetric.io^$third-party
+||adobedtm.com^$third-party,domain=~adobe.com|~costco.com
+||adoberesources.net^$third-party,domain=~adobe.com
+||adobetag.com^$third-party
+||adobetarget.com^$third-party
+||adoftheyear.com^$third-party
+||adoric-om.com^$third-party
+||adpaths.com^$third-party
+||adpies.com^$third-party
+||adregain.com^$third-party
+||adregain.ru^$third-party
+||adrizer.com^$third-party
+||adrta.com^$third-party
+||adsensedetective.com^$third-party
+||adsmatcher.com^$third-party
+||adsrvr.org^$third-party
+||adsymptotic.com^$third-party
+||adtarget.me^$third-party
+||adtector.com^$third-party
+||adtelligence.de^$third-party
+||adtrackers.net^$~script,third-party
+||adultblogtoplist.com^$third-party
+||adunity.com^$third-party
+||advalo.com^$third-party
+||advanced-web-analytics.com^$third-party
+||advangelists.com^$third-party
+||advconversion.com^$third-party
+||advertising.com^$third-party
+||advoncommerce.com^$third-party
+||adways.com^$third-party
+||adwerx.com^$third-party
+||adwstats.com^$third-party
+||adxadtracker.com^$third-party
+||adxcel-ec2.com^$third-party
+||adyapper.com^$third-party
+||aff-handler.com^$third-party
+||affex.org^$third-party
+||affilae.com^$third-party
+||affiliateedge.eu^$third-party
+||affiliatly.com^$third-party
+||affilimate.com^$third-party
+||affilimate.io^$third-party
+||affilired.com^$third-party
+||affinesystems.com^$third-party
+||affinitymatrix.com^$third-party
+||affistats.com^$third-party
+||afftrack.pro^$third-party
+||afsanalytics.com^$third-party
+||afterclick.co^$third-party
+||agentanalytics.com^$third-party
+||agentinteractive.com^$third-party
+||agilecrm.com^$third-party
+||agilesrv.com^$third-party
+||agilone.com^$third-party
+||agrvt.com^$third-party
+||aimediagroup.com^$third-party
+||air2s.com^$third-party
+||airbrake.io^$third-party
+||airpr.com^$third-party
+||airserve.net^$third-party
+||aivalabs.com^$third-party
+||akanoo.com^$third-party
+||akstat.com^$third-party
+||akstat.io^$third-party
+||albacross.com^$third-party
+||alcmpn.com^$third-party
+||alenty.com^$third-party
+||alexametrics.com^$third-party
+||alltracked.com^$third-party
+||alocdn.com^$third-party
+||alpixtrack.com^$third-party
+||altabold1.com^$third-party
+||altastat.com^$third-party
+||alvenda.com^$third-party
+||alzexa.com^$third-party
+||amadesa.com^$third-party
+||amavalet.com^$third-party
+||amazingcounters.com^$third-party
+||ambercrow.com^$third-party
+||amikay.com^$third-party
+||amnet.tw^$third-party
+||amp.vg^$third-party
+||amplitude.com^$third-party
+||ampush.io^$third-party
+||amung.us^$third-party
+||analitycs.net^$third-party
+||analoganalytics.com^$third-party
+||analytically.net^$third-party
+||analytics-debugger.com^$third-party
+||analytics-helper.com^$third-party
+||analyticschecker.com^$third-party
+||analyticson.com^$third-party
+||analyticswizard.com^$third-party
+||analyzee.io^$third-party
+||analyzz.com^$third-party
+||anametrix.com^$third-party
+||anametrix.net^$third-party
+||angelfishstats.com^$third-party
+||angorch-cdr7.com^$third-party
+||anonymised.io^$third-party
+||anrdoezrs.net^$third-party
+||answerbook.com^$third-party
+||answerscloud.com^$third-party
+||anti-cheat.info^$third-party
+||antiblock.info^$third-party
+||anura.io^$third-party
+||anytrack.io^$third-party
+||apexstats.com^$third-party
+||apextag.com^$third-party
+||apextwo.com^$third-party
+||api64.com^$third-party
+||apicit.net^$third-party
+||apollofind.com^$third-party
+||apolloprogram.io^$third-party
+||appboycdn.com^$third-party
+||appcast.io^$third-party
+||appdynamics.com^$third-party
+||appn.center^$third-party
+||aprtn.com^$third-party
+||aprtx.com^$third-party
+||apsis1.com^$third-party
+||apsislead.com^$third-party
+||aptrinsic.com^$third-party
+||aqtracker.com^$third-party
+||aralego.net^$third-party
+||arc.io^$third-party
+||arcadeweb.com^$third-party
+||ardalio.com^$third-party
+||arena-quantum.co.uk^$third-party
+||arkayne.com^$third-party
+||arlime.com^$third-party
+||arpxs.com^$third-party
+||arrivalist.com^$third-party
+||arrowpushengine.com^$third-party
+||arsdev.net^$third-party
+||artefact.is^$third-party
+||artfut.com^$third-party
+||ascend.ai^$third-party
+||assoctrac.com^$third-party
+||asteriresearch.com^$third-party
+||astro-way.com^$third-party
+||at-o.net^$third-party
+||atatus.com^$third-party
+||athenainstitute.biz^$third-party
+||atp.io^$third-party
+||atsptp.com^$third-party
+||attracta.com^$third-party
+||attributionapp.com^$third-party
+||audience.systems^$third-party
+||audienceiq.com^$third-party
+||audiencepixel.com^$third-party
+||audienceplay.com^$third-party
+||audiencerate.com^$third-party
+||audiens.com^$third-party
+||audio.sex^$third-party
+||audrte.com^$third-party
+||aufp.io^$third-party
+||authorinsights.com^$third-party
+||auto-ping.com^$third-party
+||autoaffiliatenetwork.com^$third-party
+||autoaudience.com^$third-party
+||autoid.com^$third-party
+||autoline-top.com^$third-party
+||automizely-analytics.com^$third-party
+||avantlink.com^$third-party
+||avapartner.com^$third-party
+||avazudsp.net^$third-party
+||avenseo.com^$third-party
+||avmws.com^$third-party
+||awasete.com^$third-party
+||awesomelytics.com^$third-party
+||awfonts.com^$script,third-party
+||awin1.com^$third-party
+||awstats.cloud^$third-party
+||awstrack.me^$third-party
+||axf8.net^$third-party
+||azalead.com^$third-party
+||azera-s014.com^$third-party
+||azointel.com^$third-party
+||b0e8.com^$third-party
+||b1img.com^$third-party
+||b1js.com^$third-party
+||b2c.com^$third-party
+||babator.com^$third-party
+||baikalize.com^$third-party
+||bam-x.com^$third-party
+||baptisttop1000.com^$third-party
+||baremetrics.com^$third-party
+||barilliance.net^$third-party
+||basicstat.com^$third-party
+||basilic.io^$third-party
+||baynote.net^$third-party
+||baztrack.com^$third-party
+||bbthat.com^$script,third-party
+||bdash-cloud.com^$third-party
+||beacon.kmi-us.com^$third-party
+||beaconstreetservices.com^$third-party
+||beampulse.com^$third-party
+||beanstalkdata.com^$third-party
+||beanstock.com^$third-party
+||beemray.com^$third-party
+||beemrdwn.com^$third-party
+||beencounter.com^$third-party
+||behavioralengine.com^$third-party
+||belstat.be^$third-party
+||belstat.com^$third-party
+||belstat.de^$third-party
+||belstat.fr^$third-party
+||belstat.nl^$third-party
+||benchtag2.co^$third-party
+||bentonow.com^$third-party
+||berg-6-82.com^$third-party
+||best-top.de^$third-party
+||bestcontactform.com^$~image,third-party
+||betarget.com^$third-party
+||bettermeter.com^$third-party
+||bettermetrics.co^$third-party
+||beusable.net^$third-party
+||bfoleyinteractive.com^$third-party
+||bgpng.me^$third-party
+||bidphysics.com^$third-party
+||bidr.io^$third-party
+||bidsimulator.com^$third-party
+||bigbrain.me^$third-party
+||bigcattracks.com^$third-party
+||bigmir.net^$third-party
+||bignutty.xyz^$third-party
+||bigreal.org^$third-party
+||bigtracker.com^$third-party
+||bionicclick.com^$third-party
+||bizible.com^$third-party
+||bizo.com^$third-party
+||bizspring.net^$third-party
+||bjcathay.com^$third-party
+||bkvtrack.com^$third-party
+||blaick.com^$third-party
+||blisspointmedia.com^$third-party
+||blockdetector.org^$third-party
+||blockmetrics.com^$third-party
+||blog-stat.com^$third-party
+||blogmeetsbrand.com^$third-party
+||blogpatrol.com^$third-party
+||blogrankers.com^$third-party
+||blogreaderproject.com^$third-party
+||blogsontop.com^$third-party
+||bluecava.com^$third-party
+||blueconic.net^$third-party
+||bluecore.com^$third-party
+||blueknow.com^$third-party
+||blvdstatus.com^$third-party
+||bm23.com^$third-party
+||bm324.com^$third-party
+||bmlmedia.com^$third-party
+||bmmetrix.com^$third-party
+||bnqt.com^$third-party
+||bntech.io^$third-party
+||boomerang.com.au^$third-party
+||botman.ninja^$third-party
+||botsvisit.com^$third-party
+||bouncepilot.com^$third-party
+||bouncex.com^$third-party
+||bp01.net^$third-party
+||bpmonline.com^$third-party
+||brandlock.io^$third-party
+||brat-online.ro^$third-party
+||brcdn.com^$third-party
+||bridgevine.com^$third-party
+||brightfunnel.com^$third-party
+||brilig.com^$third-party
+||brilliantcollector.com^$third-party
+||britepool.com^$third-party
+||bronto.com^$third-party
+||browser-intake-datadoghq.eu^$third-party
+||browser-statistik.de^$third-party
+||browser-update.org^$third-party
+||bstn-14-ma.com^$third-party
+||btbuckets.com^$third-party
+||btncdn.com^$third-party
+||btstatic.com^$third-party
+||btttag.com^$third-party
+||bubblestat.com^$third-party
+||bugherd.com^$third-party
+||bugsnag.com^$third-party
+||buildkiteanalytics.com^$third-party
+||bunchbox.co^$third-party
+||burpee.xyz^$third-party
+||burstbeacon.com^$third-party
+||burt.io^$third-party
+||buzzdeck.com^$third-party
+||bytemgdd.com^$third-party
+||c-o-u-n-t.com^$third-party
+||c.hit.ua^$third-party
+||c1exchange.com^$third-party
+||c212.net^$third-party
+||c3metrics.com^$third-party
+||c3tag.com^$third-party
+||c4tracking01.com^$third-party
+||cache.am^$third-party
+||cactusglobal.io^$third-party
+||cactusmedia.com^$third-party
+||cadreon.com^$third-party
+||call-tracking.co.uk^$third-party
+||callisto.fm^$third-party
+||callmeasurement.com^$third-party
+||callrail.com^$third-party
+||callreports.com^$third-party
+||calltouch.ru^$third-party
+||calltrackingmetrics.com^$third-party
+||calltracks.com^$third-party
+||campaigncog.com^$third-party
+||campaignmonitor.com^$third-party
+||canddi.com^$third-party
+||canlytics.com^$third-party
+||canopylabs.com^$third-party
+||captify.co.uk^$third-party
+||captivate.ai^$third-party
+||capturehighered.net^$third-party
+||capturemedia.network^$third-party
+||capturly.com^$third-party
+||carambo.la^$third-party
+||caramel.press^$third-party
+||cartstack.com^$third-party
+||cashburners.com^$third-party
+||cashcount.com^$third-party
+||cbtrk.net^$third-party
+||cccpmo.com^$third-party
+||ccgateway.net^$third-party
+||ccscserver.com^$third-party
+||cdn-net.com^$third-party
+||cdnmaster.com^$third-party
+||cdnopw.com^$third-party
+||cedexis.com^$third-party
+||celebros-analytics.com^$third-party
+||celebrus.com^$third-party
+||center.io^$third-party
+||centraltag.com^$third-party
+||cetrk.com^$third-party
+||cftrack.com^$third-party
+||chartaca.com^$third-party
+||chartbeat.com^$third-party
+||chartbeat.net^$third-party
+||checkstat.nl^$third-party
+||christiantop1000.com^$third-party
+||christmalicious.com^$third-party
+||chtbl.com^$script,third-party,xmlhttprequest
+||cintnetworks.com^$third-party
+||cityadstrack.com^$third-party
+||claritytag.com^$third-party
+||clarium.io^$third-party
+||clarivoy.com^$third-party
+||clearbit.com^$third-party
+||clearbitjs.com^$third-party
+||clevi.com^$third-party
+||click-url.com^$third-party
+||click4assistance.co.uk^$third-party
+||clickable.net^$third-party
+||clickaider.com^$third-party
+||clickalyzer.com^$third-party
+||clickbrainiacs.com^$third-party
+||clickcease.com^$third-party
+||clickclick.net^$third-party
+||clickdensity.com^$third-party
+||clickening.com^$third-party
+||clickferret.com^$third-party
+||clickguard.com^$third-party
+||clickguardian.co.uk^$third-party
+||clickmanage.com^$third-party
+||clickmeter.com^$third-party
+||clickonometrics.pl^$third-party
+||clickpathmedia.com^$third-party
+||clickprotector.com^$third-party
+||clickreport.com^$third-party
+||clicksagent.com^$third-party
+||clicksen.se^$third-party
+||clicksgate.com^$third-party
+||clickshift.com^$third-party
+||clicktale.net^$third-party
+||clicktracks.com^$third-party
+||clickx.io^$third-party
+||clickzs.com^$third-party
+||clickzzs.nl^$third-party
+||clientgear.com^$third-party
+||clipcentric.com^$third-party
+||clixcount.com^$third-party
+||clixgalore.com^$third-party
+||clixpy.com^$third-party
+||cloud-exploration.com^$third-party
+||cloud-iq.com.au^$third-party
+||cloud-iq.com^$third-party
+||cloudiq.com^$third-party
+||cloudtracer101.com^$third-party
+||cmcore.com^$third-party
+||cmmeglobal.com^$third-party
+||cmptch.com^$third-party
+||cnt1.net^$third-party
+||cnwebperformance.biz^$third-party
+||cnxweb.com^$third-party
+||cnzz.com^$third-party
+||cobaltgroup.com^$third-party
+||codata.ru^$third-party
+||cogmatch.net^$third-party
+||cognativex.com^$third-party
+||cognitivematch.com^$third-party
+||cognitivlabs.com^$third-party
+||cohesionapps.com^$third-party
+||coll2onf.com^$third-party
+||collarity.com^$third-party
+||collecting.click^$third-party
+||collserve.com^$third-party
+||colossusssp.com^$third-party
+||commander1.com^$third-party
+||company-target.com^$third-party
+||compteur.cc^$third-party
+||compteur.fr^$third-party
+||conductrics.com^$third-party
+||conductrics.net^$third-party
+||conduze.com^$third-party
+||config.parsely.com^$third-party
+||confirmational.com^$third-party
+||connectif.cloud^$third-party
+||contactmonkey.com^$third-party
+||content-square.net^$third-party
+||contentinsights.com^$third-party
+||contentspread.net^$third-party
+||contentsquare.net^$third-party
+||continue.com^$third-party
+||convergetrack.com^$third-party
+||conversionfly.com^$third-party
+||conversionlogic.net^$third-party
+||conversionly.com^$third-party
+||conversionruler.com^$third-party
+||convertcart.com^$third-party
+||convertexperiments.com^$third-party
+||convertglobal.com^$third-party
+||convertro.com^$third-party
+||cooladata.com^$third-party
+||copperegg.com^$third-party
+||coralogix.com^$third-party
+||core-cen-54.com^$third-party
+||coremetrics.com^$third-party
+||coremotives.com^$third-party
+||cost1action.com^$third-party
+||count.ly^$third-party
+||countby.com^$third-party
+||counter.dev^$third-party
+||counter.gd^$third-party
+||counter.top.kg^$third-party
+||counterbot.com^$third-party
+||countercentral.com^$third-party
+||countergeo.com^$third-party
+||counterland.com^$third-party
+||counters4u.com^$third-party
+||countersforlife.com^$third-party
+||countertracker.com^$third-party
+||counterviews.net^$third-party
+||counting4free.com^$third-party
+||countomat.com^$third-party
+||countz.com^$third-party
+||cpcmanager.com^$third-party
+||cpmstar.com^$third-party
+||cqcounter.com^$third-party
+||cquotient.com^$third-party
+||craftkeys.com^$third-party
+||craktraffic.com^$third-party
+||crashlytics.com^$third-party
+||crazyclickstats.com^$third-party
+||crazyegg.com^$third-party
+||criteo.com^$third-party
+||criteo.net^$third-party
+||crmmetrix.fr^$third-party
+||crmmetrixwris.com^$third-party
+||crosspixel.net^$third-party
+||crosswalkmail.com^$third-party
+||crowdscience.com^$third-party
+||crtx.info^$third-party
+||csdata1.com^$third-party
+||cuberoot.co^$third-party
+||curalate.com^$third-party
+||customer.io^$third-party
+||customerconversio.com^$third-party
+||customerlabs.co^$third-party
+||cux.io^$third-party
+||cvtr.io^$third-party
+||cya2.net^$third-party
+||cyberanalytics.nl^$third-party
+||d-1.co^$third-party
+||d41.co^$third-party
+||dacounter.com^$third-party
+||dapxl.com^$third-party
+||dashboard.io^$third-party
+||data-dynamic.net^$third-party
+||databrain.com^$third-party
+||databreakers.com^$third-party
+||datacaciques.com^$third-party
+||datacoral.com^$third-party
+||datacoral.io^$third-party
+||datacygnal.io^$third-party
+||datadoghq-browser-agent.com^$third-party
+||datadoghq.eu^$third-party
+||datadsk.com^$third-party
+||datafeedfile.com^$third-party
+||datafront.co^$third-party
+||datam.com^$third-party
+||datamilk.app^$third-party
+||datamind.ru^$third-party
+||dataperforma.com^$third-party
+||dataroid.com^$third-party
+||datasteam.io^$third-party
+||dataunlocker.com^$third-party
+||dataxpand.com^$third-party
+||datazoom.io^$third-party
+||datvantage.com^$third-party
+||db-ip.com^$third-party
+||dc-storm.com^$third-party
+||dcmn.com^$third-party
+||ddm.io^$third-party
+||deadlinefunnel.com^$third-party
+||debugbear.com^$third-party
+||decdna.net^$third-party
+||decibelinsight.net^$third-party
+||decideinteractive.com^$third-party
+||deep-content.io^$third-party
+||deep.bi^$third-party
+||deepattention.com^$third-party
+||deepchannel.com^$third-party
+||defacto-analytics.net^$third-party
+||dejavu.mlapps.com^$third-party
+||demandbase.com^$third-party
+||departapp.com^$third-party
+||deqwas.net^$third-party
+||devatics.com^$third-party
+||devatics.io^$third-party
+||device9.com^$third-party
+||di-capt.com^$third-party
+||dialogtech.com^$third-party
+||did-it.com^$third-party
+||didit.com^$third-party
+||didna.io^$third-party
+||diffusion-tracker.com^$third-party
+||digianalytics.fr^$third-party
+||digitaloptout.com^$third-party
+||digitaltarget.ru^$third-party
+||digitru.st^$third-party
+||dignow.org^$third-party
+||dimestore.com^$third-party
+||dimml.io^$third-party
+||discover-path.com^$third-party
+||discovertrail.net^$third-party
+||display.studio^$third-party
+||displaymarketplace.com^$third-party
+||distiltag.com^$third-party
+||distralytics.com^$third-party
+||dmanalytics1.com^$third-party
+||dmclick.cn^$third-party
+||dmpcounter.com^$third-party
+||dmpprof.com^$third-party
+||dmtracker.com^$third-party
+||dmxleo.com^$third-party
+||dnsdelegation.io^$third-party
+||doceree.com^$third-party
+||doclix.com^$third-party
+||dojomojo.com^$third-party
+||dojomojo.ninja^$third-party
+||domdog.io^$third-party
+||dominocounter.net^$third-party
+||domodomain.com^$third-party
+||donreach.com^$third-party
+||dotaki.com^$third-party
+||dotjs.com^$third-party
+||dpbolvw.net^$third-party
+||dps-reach.com^$third-party
+||driv-analytics.com^$third-party
+||dropboxfingerprintjs.com^$third-party
+||dsail-tech.com^$third-party
+||dsmmadvantage.com^$third-party
+||dsmstats.com^$third-party
+||dsparking.com^$third-party
+||dsply.com^$third-party
+||dtc-v6t.com^$third-party
+||dti-ranker.com^$third-party
+||dtxngr.com^$third-party
+||durationmedia.net^$third-party
+||dvnfo.com^$third-party
+||dynatrace-managed.com^$third-party
+||dynatrace.com^$third-party,domain=~dynatracelabs.com
+||dyntrk.com^$third-party
+||e-contenta.com^$third-party
+||e-goi.com^$third-party,domain=~e-goi.com.br|~e-goi.pt
+||e-pagerank.net^$third-party
+||e-referrer.com^$third-party
+||e-webtrack.net^$third-party
+||eacla.com^$third-party
+||easy-hit-counter.com^$third-party
+||easy-hit-counters.com^$third-party
+||easycounter.com^$third-party
+||easyhitcounters.com^$third-party
+||easyresearch.se^$third-party
+||ebtrk1.com^$third-party
+||ec-track.com^$third-party
+||ecommstats.com^$third-party
+||ecustomeropinions.com^$third-party
+||edgeadx.net^$third-party
+||edigitalsurvey.com^$third-party
+||eggplant.cloud^$third-party
+||ekmpinpoint.co.uk^$third-party
+||ekmpinpoint.com^$third-party
+||ela-3-tnk.com^$third-party
+||elastx.net^$third-party
+||elitics.com^$third-party
+||eloqua.com^$~stylesheet,third-party
+||eluxer.net^$third-party
+||email-match.com^$third-party
+||embeddedanalytics.com^$third-party
+||emediatrack.com^$third-party
+||emjcd.com^$third-party
+||emltrk.com^$third-party
+||enecto.com^$third-party
+||engageclick.com^$third-party
+||engagemaster.com^$third-party
+||engagetosell.com^$third-party
+||engagio.com^$third-party
+||engine212.com^$third-party
+||engine64.com^$third-party
+||enhance.com^$third-party
+||enhencer.com^$third-party
+||enquisite.com^$third-party
+||ensighten.com^$third-party
+||enticelabs.com^$third-party
+||entravision.com^$third-party
+||eolcdn.com^$third-party
+||ep4p.com^$third-party
+||eperfectdata.com^$third-party
+||epilot.com^$third-party
+||epitrack.com^$third-party
+||eproof.com^$third-party
+||eps-analyzer.de^$third-party
+||ereportz.com^$third-party
+||escalated.io^$third-party
+||esearchvision.com^$third-party
+||esm1.net^$third-party
+||esomniture.com^$third-party
+||esputnik.com^$third-party
+||estara.com^$third-party
+||estat.com^$third-party
+||estrack.net^$third-party
+||etahub.com^$third-party
+||ethn.io^$third-party
+||ethnio.com^$third-party
+||ethyca.com^$third-party
+||etp-prod.com^$third-party
+||etracker.com^$third-party
+||etrigue.com^$third-party
+||etyper.com^$third-party
+||eu-survey.com^$third-party
+||eulerian.net^$third-party
+||euleriancdn.net^$third-party
+||eum-appdynamics.com^$third-party
+||europagerank.com^$third-party
+||europuls.eu^$third-party
+||europuls.net^$third-party
+||everestjs.net^$third-party
+||evergage.com^$third-party
+||evisitanalyst.com^$third-party
+||evorra.net^$third-party
+||evyy.net^$third-party
+||ewebanalytics.com^$third-party
+||exactag.com^$third-party
+||excited.me^$third-party
+||exclusiveclicks.com^$third-party
+||exelator.com^$third-party
+||exitmonitor.com^$third-party
+||exorigos.com^$third-party
+||experianmarketingservices.digital^$third-party
+||explore-123.com^$third-party
+||exponea.com^$third-party
+||exposebox.com^$third-party
+||extole.com^$third-party
+||extrawatch.com^$third-party
+||extreme-dm.com^$third-party
+||extreme-ip-lookup.com^$third-party
+||eyein.com^$third-party
+||ezec.co.uk^$third-party
+||ezytrack.com^$third-party
+||f92j5.com^$third-party
+||fabricww.com^$third-party
+||faktor.io^$third-party
+||fandommetrics.com^$third-party
+||fanplayr.com^$third-party
+||fast-thinking.co.uk^$third-party
+||fastanalytic.com^$third-party
+||fastly-analytics.com^$third-party
+||fastly-insights.com^$third-party
+||fathomseo.com^$third-party
+||fcs.ovh^$third-party
+||fdxstats.xyz^$third-party
+||feathr.co^$third-party
+||feedcat.net^$third-party
+||feedjit.com^$third-party
+||feedperfect.com^$third-party
+||figpii.com^$third-party
+||fiksu.com^$third-party
+||filitrac.com^$third-party
+||finalid.com^$third-party
+||finalyticsdata.com^$third-party
+||find-ip-address.org^$third-party
+||fireworkanalytics.com^$third-party
+||firstpromoter.com^$third-party
+||fitanalytics.com^$third-party
+||flagcounter.com^$third-party
+||flaghit.com^$third-party
+||flash-counter.com^$third-party
+||flashb.id^$third-party
+||flcounter.com^$third-party
+||flexlinkspro.com^$third-party
+||flixfacts.co.uk^$third-party
+||flixsyndication.net^$third-party
+||flockrocket.io^$third-party
+||flocktory.com^$third-party
+||fluencymedia.com^$third-party
+||fluidsurveys.com^$third-party
+||flurry.com^$third-party
+||flx1.com^$third-party
+||flxpxl.com^$third-party
+||flyingpt.com^$third-party
+||flyspy.co^$third-party
+||fmhy.net^$third-party
+||fndrsp.net^$third-party
+||followercounter.com^$third-party
+||footprintdns.com^$third-party
+||footprintlive.com^$third-party
+||force24.co.uk^$third-party
+||forensics1000.com^$third-party
+||foreseeresults.com^$third-party
+||forkcdn.com^$third-party
+||formalyzer.com^$third-party
+||formisimo.com^$third-party
+||forter.com^$third-party
+||fouanalytics.com^$third-party
+||foundry42.com^$third-party
+||fout.jp^$third-party
+||fpctraffic2.com^$third-party
+||fpjs.io^$third-party
+||fprnt.com^$third-party
+||fqsecure.com^$third-party
+||fraud0.com^$third-party
+||fraudjs.io^$third-party
+||free-counter.co.uk^$third-party
+||free-counter.com^$third-party
+||free-counters.co.uk^$third-party
+||free-hit-counters.net^$third-party
+||free-website-statistics.com^$third-party
+||freebloghitcounter.com^$third-party
+||freecountercode.com^$third-party
+||freecounterstat.com^$third-party
+||freegeoip.app^$third-party
+||freegeoip.net^$third-party
+||freehitscounter.org^$third-party
+||freelogs.com^$third-party
+||freesitemapgenerator.com^$third-party
+||freestats.com^$third-party
+||freetrafficsystem.com^$third-party
+||freeusersonline.com^$third-party
+||freevisitorcounters.com^$third-party
+||freeweblogger.com^$third-party
+||freshcounter.com^$third-party
+||freshmarketer.com^$third-party
+||freshplum.com^$third-party
+||freshrelevance.com^$third-party
+||friendbuy.com^$third-party
+||frodx.com^$third-party
+||froomle.com^$third-party
+||fruitflan.com^$third-party
+||fsd2.digital^$third-party
+||fstats.xyz^$third-party
+||fstrk.net^$third-party
+||ftbpro.com^$third-party
+||ftz.io^$third-party
+||fueldeck.com^$third-party
+||fuelx.com^$third-party
+||fugetech.com^$third-party
+||fullcircleinsights.com^$third-party
+||fullstory.com^$third-party
+||funneld.com^$third-party
+||funnelytics.io^$third-party
+||funstage.com^$third-party
+||fusestats.com^$third-party
+||fuziontech.net^$third-party
+||fwpixel.com^$third-party
+||fyreball.com^$third-party
+||ga-analytics.com^$third-party
+||gaconnector.com^$third-party
+||gameanalytics.com^$third-party
+||gammachug.com^$third-party
+||gatorleads.co.uk^$third-party
+||gaug.es^$third-party
+||gbotvisit.com^$third-party
+||gc.zgo.at^$third-party
+||geistm.com^$third-party
+||gemius.pl^$third-party
+||genieesspv.jp^$third-party
+||geniuslinkcdn.com^$third-party
+||geo-targetly.com^$third-party
+||geobytes.com^$third-party
+||geoip-db.com^$third-party
+||geoiplookup.io^$third-party
+||geojs.io^$third-party
+||geolid.com^$third-party
+||geolocation-db.com^$third-party
+||geoplugin.net^$third-party
+||georiot.com^$third-party
+||geotargetly-1a441.appspot.com^$third-party
+||geotargetly.co^$third-party
+||getaawp.com^$third-party
+||getambassador.com^$third-party
+||getbackstory.com^$third-party
+||getblueshift.com^$third-party
+||getclicky.com^$third-party
+||getconversion.net^$third-party
+||getdrip.com^$third-party
+||getfreebl.com^$third-party
+||getlasso.co^$third-party
+||getpublica.com^$third-party
+||getrockerbox.com^$third-party
+||getsentry.com^$third-party,domain=~sentry.dev|~sentry.io
+||getsmartcontent.com^$third-party
+||getsmartlook.com^$third-party
+||getstat.net^$third-party
+||getstatistics.se^$third-party
+||getstats.org^$third-party
+||getviously.com^$third-party
+||gez.io^$third-party
+||giddyuptrk.com^$third-party
+||gigcount.com^$third-party
+||gim.co.il^$third-party
+||glancecdn.net^$third-party,domain=~glance.net
+||glassboxcdn.com^$third-party
+||glassboxdigital.io^$third-party
+||glbtracker.com^$third-party
+||globalsiteanalytics.com^$third-party
+||globalwebindex.net^$third-party
+||globase.com^$third-party
+||globel.co.uk^$third-party
+||globetrackr.com^$third-party
+||gnpge.com^$third-party
+||goadservices.com^$third-party
+||goatcounter.com^$third-party
+||godhat.com^$third-party
+||goingup.com^$third-party
+||goldstats.com^$third-party
+||goneviral.com^$third-party
+||goodcounter.org^$third-party
+||goodmeasure.io^$third-party
+||google-analytics.com^$third-party
+||googleadservices.com^$third-party
+||googlerank.info^$third-party
+||gooo.al^$third-party
+||gopjn.com^$third-party
+||gostats.com^$third-party
+||gostats.org^$third-party
+||gostats.ro^$third-party
+||gotrk.net^$third-party
+||govmetric.com^$third-party
+||granify.com^$third-party
+||grapheffect.com^$third-party
+||gravity4.com^$third-party
+||grepdata.com^$third-party
+||grmtech.net^$third-party
+||group-ib.ru^$third-party
+||growthrx.in^$third-party
+||grumrt.com^$third-party
+||gsecondscreen.com^$third-party
+||gsght.com^$third-party
+||gsimedia.net^$third-party
+||gsspat.jp^$third-party
+||gssprt.jp^$third-party
+||gtcslt-di2.com^$third-party
+||gtopstats.com^$third-party
+||guanoo.net^$third-party
+||gvisit.com^$third-party
+||gweini.com^$third-party
+||gwmtracking.com^$third-party
+||hadronid.net^$third-party
+||halldata.com^$third-party
+||haloscan.com^$third-party
+||havasedge.com^$third-party
+||haveamint.com^$third-party
+||hbwrapper.com^$third-party
+||heapanalytics.com^$third-party
+||heatmap.com^$third-party
+||heatmap.it^$third-party
+||heatmap.services^$third-party
+||hellosherpa.com^$third-party
+||hentaicounter.com^$third-party
+||hexagon-analytics.com^$third-party
+||heylink.com^$third-party
+||heystaks.com^$third-party
+||hiconversion.com^$third-party
+||hif.to^$third-party
+||higherengine.com^$third-party
+||highlight.run^$third-party
+||highmetrics.com^$third-party
+||hira-meki.jp^$third-party
+||histats.com^$third-party
+||hit-360.com^$third-party
+||hit-counter.info^$third-party
+||hit-counters.net^$third-party
+||hit-parade.com^$third-party
+||hit2map.com^$third-party
+||hitbox.com^$third-party
+||hitcounterstats.com^$third-party
+||hitmatic.com^$third-party
+||hits.io^$third-party
+||hits2u.com^$third-party
+||hitslink.com^$third-party
+||hitslog.com^$third-party
+||hitsniffer.com^$third-party
+||hitsprocessor.com^$third-party
+||hitstatus.com^$third-party
+||hitsteps.com^$third-party
+||hittail.com^$third-party
+||hittracker.com^$third-party
+||hitwake.com^$third-party
+||hitwebcounter.com^$third-party
+||hmstats.com^$third-party
+||hockeystack.com^$third-party
+||holdonstranger.com^$third-party
+||horzrb.com^$third-party
+||hospitality-optimizer.com^$third-party
+||host-tracker.com^$third-party
+||hostip.info^$third-party
+||hotjar.com^$third-party
+||hotjar.io^$third-party
+||hotlog.ru^$third-party
+||hscta.net^$third-party
+||hubvisor.io^$third-party
+||humanclick.com^$third-party
+||humanpresence.app^$third-party
+||hunt-leads.com^$third-party
+||hurra.com^$third-party
+||hwpub.com^$third-party
+||hxtrack.com^$third-party
+||hybrid.ai^$third-party
+||hyfntrak.com^$third-party
+||hyperactivate.com^$third-party
+||hypercounter.com^$third-party
+||hyperdx.io^$third-party
+||hypestat.com^$third-party
+||iaudienc.com^$third-party
+||ib-ibi.com^$third-party
+||ibeat-analytics.com^$third-party
+||ibpxl.com^$third-party
+||ibpxl.net^$third-party
+||ic-live.com^$third-party
+||icanhazip.com^$third-party
+||iclive.com^$third-party
+||ics0.com^$third-party
+||icstats.nl^$third-party
+||id-visitors.com^$third-party
+||ideoclick.com^$third-party
+||idio.co^$third-party
+||idtargeting.com^$third-party
+||iesnare.com^$third-party
+||ifactz.com^$third-party
+||ifvox.com^$third-party
+||igaming.biz^$third-party
+||iljmp.com^$third-party
+||illumenix.com^$third-party
+||ilogbox.com^$third-party
+||imhd.io^$third-party
+||immanalytics.com^$third-party
+||impression.link^$third-party
+||imrtrack.com^$third-party
+||imtwjwoasak.com^$third-party
+||inboxtag.com^$third-party
+||incentivesnetwork.net^$third-party
+||index.ru^$third-party
+||indexstats.com^$third-party
+||indextools.com^$third-party
+||indicative.com^$third-party
+||indicia.com^$third-party
+||individuad.net^$third-party
+||ineedhits.com^$third-party
+||inferclick.com^$third-party
+||infinigraph.com^$third-party
+||infinity-tracking.com^$third-party
+||infinity-tracking.net^$third-party
+||inflectionpointmedia.com^$third-party
+||influid.co^$third-party
+||infopro-insight.com^$third-party
+||infoprodata.com^$third-party
+||informz.net^$third-party
+||ingage.tech^$third-party
+||ingest-lr.com^$third-party
+||inimbus.com.au^$third-party
+||innertrends.com^$third-party
+||innovateads.com^$third-party
+||inphonic.com^$third-party
+||inpwrd.com^$third-party
+||inside-graph.com^$third-party
+||insightera.com^$third-party
+||insightgrit.com^$third-party
+||insitemetrics.com^$third-party
+||inspectlet.com^$third-party
+||instadia.net^$third-party
+||instana.io^$third-party
+||instant.page^$third-party
+||instapage.com^$third-party,domain=~pagedemo.co
+||instapagemetrics.com^$third-party
+||instore.biz^$third-party
+||intake-lr.com^$third-party
+||intelli-direct.com^$third-party
+||intelligencefocus.com^$third-party
+||intellimize.co^$third-party
+||interact-analytics.com^$third-party
+||interceptum.com^$third-party
+||intermundomedia.com^$third-party
+||interstateanalytics.com^$third-party
+||intervigil.com^$third-party
+||investingchannel.com^$third-party
+||invisioncloudstats.com^$third-party
+||invitemedia.com^$third-party
+||invoc.us^$third-party
+||invoca.net^$third-party
+||invoca.solutions^$third-party
+||io1g.net^$third-party
+||iocnt.net^$third-party
+||iotechnologies.com^$third-party
+||iovation.com^$third-party
+||ip-label.net^$third-party
+||ip-tracker.org^$third-party
+||ip2c.org^$third-party
+||ip2location.com^$third-party
+||ip2map.com^$third-party
+||ip2phrase.com^$third-party
+||ipaddresslabs.com^$third-party
+||ipapi.co^$third-party
+||ipcatch.com^$third-party
+||iper2.com^$third-party
+||iperceptions.com^$third-party
+||ipfind.com^$third-party
+||ipfingerprint.com^$third-party
+||ipgeolocation.io^$third-party
+||ipgp.net^$third-party
+||ipinfo.info^$third-party
+||ipinfodb.com^$third-party
+||ipinyou.com.cn^$third-party
+||iplist.cc^$third-party
+||iplocationtools.com^$third-party
+||iplogger.org^$third-party,domain=~iplogger.com
+||ipmeta.io^$third-party
+||ipnoid.com^$third-party
+||ipro.com^$third-party
+||iproanalytics.com^$third-party
+||iprotrk.com^$third-party
+||iptrack.io^$third-party
+||ipv6monitoring.eu^$third-party
+||iqdata.ai^$third-party
+||iqfp1.com^$third-party
+||iqm.com^$third-party
+||ironbeast.io^$third-party
+||ist-track.com^$third-party
+||istrack.com^$third-party
+||ithinkthereforeiam.net^$third-party
+||itrac.it^$third-party
+||itracker360.com^$third-party
+||itrackerpro.com^$third-party
+||itracmediav4.com^$third-party
+||ivcbrasil.org.br^$third-party
+||ivwbox.de^$third-party
+||iwebtrack.com^$third-party
+||ixiaa.com^$third-party
+||izatcloud.net^$third-party
+||izea.com^$third-party
+||izearanks.com^$third-party
+||izooto.com^$third-party
+||janrain.xyz^$third-party
+||jirafe.com^$third-party
+||jixie.io^$third-party
+||journera.com^$third-party
+||journity.com^$third-party
+||js-delivr.com^$third-party
+||jstracker.com^$third-party
+||jumplead.com^$third-party
+||jumplead.io^$third-party
+||junta.net^$third-party
+||justuno.com^$third-party
+||jwmstats.com^$third-party
+||k-analytix.com^$third-party
+||k3node.com^$third-party
+||kameleoon.com^$third-party
+||kameleoon.eu^$third-party
+||kaminari.click^$third-party
+||kampyle.com^$third-party
+||kantartns.lt^$third-party
+||kaxsdc.com^$third-party
+||keen.io^$third-party,domain=~keen.github.io|~keen.io
+||keyade.com^$third-party
+||keymetric.net^$third-party
+||keytiles.com^$third-party
+||keywee.co^$third-party
+||keywordmax.com^$third-party
+||keywordstrategy.org^$third-party
+||kickfire.com^$third-party
+||kieden.com^$third-party
+||killerwebstats.com^$third-party
+||kilometrix.de^$third-party
+||kissmetrics.com^$third-party
+||kissmetrics.io^$third-party
+||kitbit.net^$third-party
+||kitcode.net^$third-party
+||kiwihk.net^$third-party
+||klert.com^$third-party
+||klldabck.com^$third-party
+||km-sea.net^$third-party
+||kmtx.io^$third-party
+||knorex.com^$third-party
+||knotch-cdn.com^$third-party
+||knowledgevine.net^$third-party
+||koddi.com^$third-party
+||koji-analytics.com^$third-party
+||kokos.click^$third-party
+||komtrack.com^$third-party
+||konduit.me^$third-party
+||kopsil.com^$third-party
+||ksyrium0014.com^$third-party
+||l2.io^$third-party
+||landingpg.com^$third-party
+||lasagneandands.com^$third-party
+||lead-123.com^$third-party
+||leadberry.com^$third-party
+||leadbi.com^$third-party
+||leadboxer.com^$third-party
+||leadchampion.com^$third-party
+||leaddyno.com^$third-party
+||leadelephant.com^$third-party
+||leadfeeder.com^$third-party
+||leadforce1.com^$third-party
+||leadforensics.com^$third-party
+||leadformix.com^$third-party
+||leadid.com^$third-party
+||leadin.com^$third-party
+||leadinfo.net^$third-party
+||leadintel.io^$third-party
+||leadintelligence.co.uk^$third-party
+||leadlab.click^$third-party
+||leadlife.com^$third-party
+||leadmanagerfx.com^$third-party
+||leadsius.com^$third-party
+||leadsleap.com^$third-party
+||leadsmonitor.io^$third-party
+||leadspace.com^$third-party
+||leadsrx.com^$third-party
+||leafmedia.io^$third-party
+||leanplum.com^$third-party
+||legolas-media.com^$third-party
+||lemnisk.co^$third-party
+||leokross.com^$third-party
+||letterboxtrail.com^$third-party
+||levexis.com^$third-party
+||lexity.com^$third-party
+||lfeeder.com^$third-party
+||lfov.net^$third-party
+||linezing.com^$third-party
+||linkconnector.com^$third-party
+||linkifier.com^$third-party
+||linkpulse.com^$third-party
+||linksnappy.com^$third-party
+||linksynergy.com^$third-party
+||linkxchanger.com^$third-party
+||listenlayer.com^$third-party
+||litix.io^$third-party
+||livecount.fr^$third-party
+||livesegmentservice.com^$third-party
+||livesession.io^$third-party
+||livestat.com^$third-party
+||livetrafficfeed.com^$third-party
+||llanalytics.com^$third-party
+||lloogg.com^$third-party
+||lngtd.com^$third-party
+||localytics.com^$third-party
+||lockview.cn^$third-party
+||locotrack.net^$third-party
+||logaholic.com^$third-party
+||logbor.com^$third-party
+||logcounter.com^$third-party
+||logdy.com^$third-party
+||logentries.com^$third-party
+||loggly.com^$third-party
+||logicsfort.com^$third-party
+||loginfra.com^$third-party
+||loginhood.io^$third-party
+||logmatic.io^$third-party
+||lognormal.net^$third-party
+||logrocket.com^$third-party
+||logrocket.io^$third-party
+||logz.io^$third-party
+||lookery.com^$third-party
+||loomi-prod.xyz^$third-party
+||loopa.net.au^$third-party
+||loopfuse.net^$third-party
+||lopley.com^$third-party
+||losstrack.com^$third-party
+||lp4.io^$third-party
+||lporirxe.com^$third-party
+||lr-in-prod.com^$third-party
+||lr-in.com^$third-party
+||lr-ingest.com^$third-party
+||lr-ingest.io^$third-party
+||lr-intake.com^$third-party
+||lsfinteractive.com^$third-party
+||lucidel.com^$third-party
+||luckyorange.com^$third-party
+||luckyorange.net^$third-party
+||lumatag.co.uk^$third-party
+||luminate.com^$third-party
+||lxtrack.com^$third-party
+||lyngro.com^$third-party
+||lypn.com^$third-party
+||lypn.net^$third-party
+||lytics.io^$third-party
+||lytiks.com^$third-party
+||m-pathy.com^$third-party
+||m-t.io^$third-party
+||m0mentum.net^$third-party
+||m365log.com^$third-party
+||m6r.eu^$third-party
+||mabipa.com^$third-party
+||madkudu.com^$third-party
+||magicpixel.io^$third-party
+||magiq.com^$third-party
+||magnetmail1.net^$third-party
+||magnify360.com^$third-party
+||magnuum.com^$third-party
+||mailstat.us^$third-party
+||maploco.com^$third-party
+||mapmyuser.com^$third-party
+||marinsm.com^$third-party
+||marketingcloudfx.com^$third-party
+||marketizator.com^$third-party
+||marketperf.com^$third-party
+||marketshot.com^$third-party
+||marketshot.fr^$third-party
+||maropost.com^$third-party
+||masterstats.com^$third-party
+||masterworks.digital^$third-party
+||mathtag.com^$third-party
+||matomo.cloud^$third-party
+||matterlytics.com^$third-party
+||maxtracker.net^$third-party
+||maxymiser.com^$third-party
+||maxymiser.net^$third-party
+||mb4a.com^$third-party
+||mbotvisit.com^$third-party
+||mbsy.co^$third-party
+||mbww.com^$third-party
+||mdxapi.io^$third-party
+||measure.ly^$third-party
+||measured.com^$third-party
+||measuremap.com^$third-party
+||measurementapi.com^$third-party
+||media01.eu^$third-party
+||mediaarmor.com^$third-party
+||mediaforgews.com^$third-party
+||mediagauge.com^$third-party
+||mediaglacier.com^$third-party
+||mediago.io^$third-party
+||mediametrics.ru^$third-party
+||mediaplex.com^$third-party
+||mediarithmics.com^$third-party
+||mediaweaver.jp^$third-party
+||mediego.com^$third-party
+||mega-stats.com^$third-party
+||memecounter.com^$third-party
+||memo.co^$third-party
+||mercadoclics.com^$third-party
+||mercent.com^$third-party
+||metarouter.io^$third-party
+||meteorsolutions.com^$third-party
+||metricode.com^$third-party
+||metricool.com^$third-party
+||metrics0.com^$third-party
+||metricsdirect.com^$third-party
+||metricswave.com^$third-party
+||mezzobit.com^$third-party
+||miadates.com^$third-party
+||mialbj6.com^$third-party
+||micpn.com^$script,third-party
+||microanalytics.io^$third-party
+||midas-i.com^$third-party
+||mieru-ca.com^$third-party
+||minewhat.com^$third-party
+||minkatu.com^$third-party
+||mirabelsmarketingmanager.com^$third-party
+||mixi.mn^$third-party
+||mixpanel.com^$third-party
+||mkt3261.com^$third-party
+||mkt51.net^$third-party
+||mkt6333.com^$third-party
+||mkt941.com^$third-party
+||mktoresp.com^$third-party
+||ml-attr.com^$third-party
+||mlclick.com^$third-party
+||mlno6.com^$third-party
+||mm7.net^$third-party
+||mmccint.com^$third-party
+||mno.link^$third-party
+||mobalyzer.net^$third-party
+||mobee.xyz^$third-party
+||mochibot.com^$third-party
+||mockingfish.com^$third-party
+||momently.com^$third-party
+||mon-pagerank.com^$third-party
+||monetate.net^$third-party
+||mongoosemetrics.com^$third-party
+||monitis.com^$third-party
+||monitus.net^$third-party
+||monsido.com^$third-party
+||monstat.com^$third-party
+||mooseway.com^$third-party
+||mopinion.com^$third-party
+||motrixi.com^$third-party
+||mouse3k.com^$third-party
+||mouseflow.com^$third-party
+||mousestats.com^$third-party
+||mousetrace.com^$third-party
+||movable-ink-397.com^$third-party
+||movable-ink-6710.com^$third-party
+||mparticle.com^$third-party
+||mpianalytics.com^$third-party
+||mpio.io^$third-party
+||mplxtms.com^$third-party
+||mppapi.io^$third-party
+||mpstat.us^$third-party
+||msecure108.com^$third-party
+||msgapp.com^$third-party
+||msgfocus.com^$third-party
+||msgtag.com^$third-party
+||mstrlytcs.com^$third-party
+||mtracking.com^$third-party
+||murdoog.com^$third-party
+||musthird.com^$third-party
+||mutinycdn.com^$third-party
+||mutinyhq.io^$third-party
+||mvilivestats.com^$third-party
+||mvtracker.com^$third-party
+||mxcdn.net^$third-party
+||myaffiliateprogram.com^$third-party
+||mybloglog.com^$third-party
+||myfastcounter.com^$third-party
+||myfidevs.io^$third-party
+||mynewcounter.com^$third-party
+||mynsystems.com^$third-party
+||myntelligence.com^$third-party
+||myomnistar.com^$third-party
+||mypagerank.net^$third-party
+||myroitracking.com^$third-party
+||myseostats.com^$third-party
+||mysitetraffic.net^$third-party
+||mysocialpixel.com^$third-party
+||mytictac.com^$third-party
+||mytrack.pro^$third-party
+||myusersonline.com^$third-party
+||myvisitorcounter.com^$third-party
+||mywebstats.com.au^$third-party
+||mywebstats.org^$third-party
+||n-analytics.io^$third-party
+||n74s9.com^$third-party
+||naayna.com^$third-party
+||naj.sk^$third-party
+||nalook.com^$third-party
+||nanovisor.io^$third-party
+||natero.com^$third-party
+||native.ai^$third-party
+||natpal.com^$third-party
+||naturaltracking.com^$third-party
+||navdmp.com^$third-party
+||navigator.io^$third-party
+||navilytics.com^$third-party
+||naytev.com^$third-party
+||ncaudienceexchange.com^$third-party
+||ndf81.com^$third-party
+||ndg.io^$third-party
+||neatstats.com^$third-party
+||nedstat.net^$third-party
+||nedstatbasic.net^$third-party
+||nedstatpro.net^$third-party
+||nejmqianyan.cn^$third-party
+||neki.org^$third-party
+||nelioabtesting.com^$third-party
+||nero.live^$third-party
+||net-filter.com^$third-party
+||netaffiliation.com^$script,third-party
+||netapplications.com^$third-party
+||netbiscuits.net^$third-party
+||netclickstats.com^$third-party
+||netcore.co.in^$third-party
+||netcoresmartech.com^$third-party
+||netflame.cc^$third-party
+||netgraviton.net^$third-party
+||netmining.com^$third-party
+||netmng.com^$third-party
+||netratings.com^$third-party
+||netrefer.com^$third-party
+||newrelic.com^$third-party
+||newrrb.bid^$third-party
+||nextstat.com^$third-party
+||nexx360.io^$third-party
+||ngmco.net^$third-party
+||nicequest.com^$third-party
+||niftymaps.com^$third-party
+||nik.io^$third-party
+||ninjacat.io^$third-party
+||nmrodam.com^$third-party
+||noibu.com^$third-party
+||noowho.com^$third-party
+||nordicresearch.com^$third-party
+||northstartravelmedia.com^$third-party
+||notifyvisitors.com^$third-party
+||nowinteract.com^$third-party
+||npario-inc.net^$third-party
+||nprove.com^$third-party
+||nr-data.net^$third-party
+||nr7.us^$third-party
+||nrich.ai^$third-party
+||nstracking.com^$third-party
+||nuconomy.com^$third-party
+||nuggad.net^$third-party
+||nullitics.com^$third-party
+||nuloox.com^$third-party
+||numerino.cz^$third-party
+||nyltx.com^$third-party
+||nytlog.com^$third-party
+||o-s.io^$third-party
+||observerapp.com^$third-party
+||octavius.rocks^$third-party
+||octomarket.com^$third-party
+||odoscope.com^$third-party
+||offermatica.com^$third-party
+||offerpoint.net^$third-party
+||offerstrategy.com^$third-party
+||ogt.jp^$third-party
+||ohayoo.io^$third-party
+||ohmystats.com^$third-party
+||ojrq.net^$third-party
+||okt.to^$third-party
+||oktopost.com^$third-party
+||ometria.com^$third-party
+||omguk.com^$third-party
+||omkt.co^$third-party
+||omniconvert.com^$third-party
+||onaudience.com^$third-party
+||ondu.ru^$third-party
+||onefeed.co.uk^$third-party
+||onelink.me^$image,script,third-party
+||onestat.com^$third-party
+||oniad.com^$third-party
+||online-metrix.net^$third-party
+||onlinepbx.ru^$third-party
+||onthe.io^$third-party
+||opbandit.com^$third-party
+||openclick.com^$third-party
+||openhit.com^$third-party
+||openlog.in^$third-party
+||openstat.net^$third-party
+||opentracker.net^$third-party
+||openvenue.com^$third-party
+||oproi.com^$third-party
+||opstag.com^$third-party
+||optify.net^$third-party
+||optimix.asia^$third-party
+||optimost.com^$third-party
+||optimove.net^$third-party
+||optorb.com^$third-party
+||optoutadvertising.com^$third-party
+||oracleinfinity.io^$third-party
+||oranges88.com^$third-party
+||orcapia.com^$third-party
+||oribi.io^$third-party
+||os-data.com^$third-party
+||osdata.solutions^$third-party
+||ositracker.com^$third-party
+||otoshiana.com^$third-party
+||ournet-analytics.com^$third-party
+||outbid.io^$third-party
+||outboundlink.me^$third-party
+||overstat.com^$third-party
+||owltrack.com^$third-party
+||ownpage.fr^$third-party
+||ox-bio.com^$third-party
+||oxidy.com^$third-party
+||p-td.com^$third-party
+||p.raasnet.com^$third-party
+||p0.raasnet.com^$third-party
+||pa-oa.com^$third-party
+||pabidding.io^$third-party
+||pagefair.com^$third-party
+||pages05.net^$third-party
+||pagesense.io^$third-party
+||parametre.online^$third-party
+||parklogic.com^$third-party
+||parrable.com^$third-party
+||particularaudience.com^$third-party
+||pass-1234.com^$third-party
+||pbbl.co^$third-party
+||pbgrd.com^$third-party
+||pbstck.com^$third-party
+||pclicks.com^$third-party
+||pcspeedup.com^$third-party
+||pdbu.net^$third-party
+||pdmntn.com^$third-party
+||pdst.fm^$script,third-party
+||peerius.com^$third-party
+||pendo.io^$third-party
+||percentmobile.com^$third-party
+||perf-serving.com^$third-party
+||perfalytics.com^$third-party
+||perfectaudience.com^$third-party
+||perfiliate.com^$third-party
+||perfops.io^$third-party
+||performanceanalyser.net^$third-party
+||performancerevenues.com^$third-party
+||performtracking.com^$third-party
+||perimeterx.net^$third-party
+||perion.com^$third-party
+||perljs.com^$third-party
+||permutive.com^$third-party
+||personyze.com^$third-party
+||peruse.ai^$third-party
+||petametrics.com^$image,third-party
+||pghub.io^$third-party
+||pgs.io^$third-party,domain=~publicgood.com
+||phonalytics.com^$third-party
+||phone-analytics.com^$third-party
+||photorank.me^$third-party
+||pi-stats.com^$third-party
+||ping-fast.com^$third-party
+||pingagenow.com^$third-party
+||pingdom.net^$third-party
+||pingil.com^$third-party
+||pingmeter.com^$third-party
+||pingomatic.com^$third-party
+||pingometer.com^$third-party
+||pinpoll.com^$third-party
+||pipfire.com^$third-party
+||piratepx.com^$third-party
+||pirsch.io^$third-party
+||piwik.pro^$third-party,domain=~clearcode.cc|~clearcode.pl|~piwikpro.de
+||pixel.ad^$third-party
+||pixel.watch^$third-party
+||pixeleze.com^$third-party
+||pixelinteractivemedia.com^$third-party
+||pixelpop.co^$third-party
+||pixelrevenue.com^$third-party
+||pixeltracker.co^$third-party
+||pixeltracker.im^$third-party
+||pixfuture.com^$third-party
+||pjatr.com^$third-party
+||pjtra.com^$third-party
+||placemypixel.com^$third-party
+||platformpanda.com^$third-party
+||plausible.io^$third-party
+||plavxml.com^$third-party
+||plecki.com^$third-party
+||pleisty.com^$third-party
+||plerdy.com^$third-party
+||plexop.com^$third-party
+||plugin.ws^$third-party
+||pm0.net^$third-party
+||pm14.com^$third-party
+||pnstat.com^$third-party
+||pntra.com^$third-party
+||pntrac.com^$third-party
+||pntrs.com^$third-party
+||podcorn.com^$third-party
+||poeticmetric.com^$third-party
+||pointillist.com^$third-party
+||pointmediatracker.com^$third-party
+||pointomatic.com^$third-party
+||polarbyte.com^$third-party
+||polarcdn-pentos.com^$third-party
+||pop6serve.com^$third-party
+||popsample.com^$third-party
+||popt.in^$third-party,domain=~poptin.com
+||populr.me^$third-party
+||popupmaker.com^$third-party
+||porngraph.com^$third-party
+||portfold.com^$third-party
+||posst.co^$third-party
+||prchecker.info^$third-party
+||prebidmanager.com^$third-party
+||precisioncounter.com^$third-party
+||predicta.net^$third-party
+||predictiveresponse.net^$third-party
+||premiumimpression.com^$third-party
+||presage.io^$third-party
+||prfct.co^$third-party
+||privymktg.com^$third-party
+||prnx.net^$third-party
+||pro6e.com^$third-party
+||proclivitysystems.com^$third-party
+||profilesnitch.com^$third-party
+||profitmetrics.io^$third-party
+||programmatictrader.com^$third-party
+||projectsunblock.com^$third-party
+||promotionengine.com^$third-party
+||proofpoint.com^$third-party
+||proofpositivemedia.com^$third-party
+||propermessage.io^$third-party
+||provenpixel.com^$third-party
+||provify.io^$third-party
+||prprocess.com^$third-party
+||prtracker.com^$third-party
+||pstats.com^$third-party
+||pt-trx.com^$third-party
+||ptengine.cn^$third-party
+||ptengine.com^$third-party
+||ptengine.jp^$third-party
+||ptmind.com^$third-party
+||pto-slb-09.com^$third-party
+||ptrk-wn.com^$third-party
+||ptztvpremium.com^$third-party
+||pubdream.com^$third-party
+||pubexchange.com^$third-party
+||publicgood.com^$third-party
+||publicidees.com^$third-party
+||publishflow.com^$third-party
+||publytics.net^$third-party
+||pubperf.com^$third-party
+||pubplus.com^$third-party
+||pubstack.io^$third-party
+||pulleymarketing.com^$third-party
+||pulseinsights.com^$third-party
+||pulselog.com^$third-party
+||pulsemaps.com^$third-party
+||purevideo.com^$third-party
+||pushauction.com^$third-party
+||pushspring.com^$third-party
+||pvd.to^$third-party
+||pxaction.com^$third-party
+||pxf.io^$image,script,third-party
+||pxi.pub^$third-party
+||pymx5.com^$third-party
+||pzz.events^$third-party
+||q-counter.com^$third-party
+||q-stats.nl^$third-party
+||qbaka.net^$third-party
+||qbop.com^$third-party
+||qflm.net^$third-party
+||qlitics.com^$third-party
+||qoijertneio.com^$third-party
+||qortex.ai^$third-party
+||qsstats.com^$third-party
+||quadran.eu^$third-party
+||qualaroo.com^$third-party
+||quantcount.com^$third-party
+||quantummetric.com^$third-party
+||quartic.pl^$third-party
+||qubitproducts.com^$third-party
+||questionpro.com^$third-party,domain=~questionpro.com.au|~questionpro.eu
+||questradeaffiliates.com^$third-party
+||quillion.com^$third-party
+||quintelligence.com^$third-party
+||quintesse.io^$third-party
+||quitsnap-blue.com^$third-party
+||qzlog.com^$third-party
+||r7ls.net^$third-party
+||radarstats.com^$third-party
+||radiateb2b.com^$third-party
+||rampanel.com^$third-party
+||rampmetrics.com^$third-party
+||rank-hits.com^$third-party
+||rankingpartner.com^$third-party
+||rankinteractive.com^$third-party
+||rapidcounter.com^$third-party
+||rapidstats.net^$third-party
+||rapidtrk.net^$third-party
+||rating.in^$third-party
+||ravelin.click^$third-party
+||rdcdn.com^$third-party
+||reachforce.com^$third-party
+||reachlocalservices.com^$third-party
+||reachsocket.com^$third-party
+||reactful.com^$third-party
+||readertracking.com^$third-party
+||readnotify.com^$third-party
+||realcounter.eu^$third-party
+||realcounters.com^$third-party
+||reallyfreegeoip.org^$third-party
+||realtimewebstats.com^$third-party
+||realtimewebstats.net^$third-party
+||realtracker.com^$third-party
+||realytics.io^$third-party
+||realzeit.io^$third-party
+||recapture.io^$third-party
+||recognified.net^$third-party
+||recosenselabs.com^$third-party
+||recoset.com^$third-party
+||recruitics.com^$third-party
+||redcounter.net^$third-party
+||redfastlabs.com^$third-party
+||redistats.com^$third-party
+||redstatcounter.com^$third-party
+||reedbusiness.net^$third-party
+||referer.org^$third-party
+||referforex.com^$third-party
+||referralrock.com^$third-party
+||refersion.com^$third-party
+||reinvigorate.net^$third-party
+||relead.com^$third-party
+||relevant-digital.com^$third-party
+||reliablecounter.com^$third-party
+||relmaxtop.com^$third-party
+||remailtarget.com^$third-party
+||remarketstats.com^$third-party
+||remind.me^$third-party
+||repixel.co^$third-party
+||report-uri.com^$third-party
+||report-uri.io^$third-party
+||requestmetrics.com^$third-party
+||res-x.com^$third-party
+||research-tool.com^$third-party
+||researchintel.com^$third-party
+||researchnow.co.uk^$third-party,domain=~dynata.com
+||researchnow.com^$third-party
+||resetdigital.co^$third-party
+||responsetap.com^$third-party
+||resulticks.com^$third-party
+||retargetapp.com^$third-party
+||retargetly.com^$third-party
+||retargettracker.com^$third-party
+||retentionscience.com^$third-party
+||rettica.com^$third-party
+||returnpath.net^$third-party
+||reussissonsensemble.fr^$third-party
+||revenuepilot.com^$third-party
+||revenuescience.com^$third-party
+||revenuewire.net^$third-party
+||revhunter.tech^$third-party
+||revlifter.io^$third-party
+||revoffers.com^$third-party
+||revolvermaps.com^$third-party
+||rewardtv.com^$third-party
+||reztrack.com^$third-party
+||rfr-69.com^$third-party
+||rhinoseo.com^$third-party
+||riastats.com^$third-party
+||richard-group.com^$third-party
+||richmetrics.com^$third-party
+||rightmoveanalytics.co.uk^$third-party
+||riskid.security^$third-party
+||rivrai.com^$third-party
+||rktch.com^$third-party
+||rktu.com^$third-party
+||rlets.com^$third-party
+||rmtag.com^$third-party
+||rnengage.com^$third-party
+||rng-snp-003.com^$third-party
+||rnlabs.com^$third-party
+||rockincontent.net^$third-party
+||roeye.com^$third-party
+||roeyecdn.com^$third-party
+||roi-pro.com^$third-party
+||roi-rocket.net^$third-party
+||roia.biz^$third-party
+||roirevolution.com^$third-party
+||roiservice.com^$third-party
+||roispy.com^$third-party
+||roitesting.com^$third-party
+||rollbar.com^$third-party
+||roosterfirework.com^$third-party
+||rp-rep.net^$third-party
+||rrimpl.com^$third-party
+||rs0.co.uk^$third-party
+||rs6.net^$image,script,third-party
+||rstg.io^$third-party
+||rsvpgenius.com^$third-party
+||rtb123.com^$third-party
+||rtbiq.com^$third-party
+||rtox.net^$third-party
+||rtrk.co.nz^$third-party
+||rtrk.com^$third-party
+||ru4.com^$third-party
+||rudderlabs.com^$third-party
+||rumanalytics.com^$third-party
+||rumble.com^$ping,third-party
+||rumpelstiltskinhead.com^$third-party
+||rztrkr.com^$third-party
+||s3s-main.net^$third-party
+||s7target.ru^$third-party
+||safe-click.net^$third-party
+||safeanalytics.net^$third-party
+||safevisit.online^$third-party
+||sageanalyst.net^$third-party
+||sailthru.com^$third-party
+||salecycle.com^$third-party
+||salesgenius.com^$third-party
+||salesviewer.com^$third-party
+||salesviewer.org^$third-party
+||saletrack.co.uk^$third-party
+||san-spr-01.net^$third-party
+||sapha.com^$third-party
+||sas15k01.com^$third-party
+||say.ac^$third-party
+||sayutracking.co.uk^$third-party
+||sbbanalytics.com^$third-party
+||scaledb.com^$third-party
+||schoolyeargo.com^$third-party
+||sciencerevenue.com^$third-party
+||scorecardresearch.com^$third-party
+||scoutanalytics.net^$third-party
+||scrippscontroller.com^$third-party
+||script.ag^$third-party
+||scripts21.com^$third-party
+||scriptshead.com^$third-party
+||sea-nov-1.com^$third-party
+||sealmetrics.com^$third-party
+||searchenginegenie.com^$third-party
+||searchfeed.com^$third-party
+||searchignite.com^$third-party
+||searchplow.com^$third-party
+||secureanalytic.com^$third-party
+||securepaths.com^$third-party
+||securitytrfx.com^$third-party
+||sedotracker.com^$third-party
+||seehits.com^$third-party
+||seeip.org^$third-party
+||seevolution.com^$third-party
+||segment.com^$third-party
+||segment.io^$third-party
+||segmenthub.com^$third-party
+||segmentify.com^$third-party
+||segmetrics.io^$third-party
+||selaris.com^$third-party
+||selectmedia.asia^$third-party
+||sellebrity.com^$third-party
+||sellpoint.net^$third-party
+||sellpoints.com^$third-party
+||sellsy.com^$third-party,domain=~sellsy.fr
+||semantic-finder.com^$third-party
+||semanticverses.com^$third-party
+||semasio.net^$third-party
+||sematext.com^$third-party
+||sendtraffic.com^$third-party
+||sensorsdata.cn^$third-party
+||sentry-cdn.com^$third-party,domain=~sentry.dev|~sentry.io
+||sentry-cdn.top^$third-party
+||sentry.io^$third-party
+||seomonitor.ro^$third-party
+||seomoz.org^$third-party
+||seon.io^$third-party
+||seondnsresolve.com^$third-party
+||seoparts.net^$third-party
+||serious-partners.com^$third-party
+||serv-ac.com^$third-party
+||servebom.com^$third-party
+||serveipqs.com^$third-party
+||servestats.com^$third-party
+||servustats.com^$third-party
+||sessioncam.com^$third-party
+||sessionstack.com^$third-party
+||sexcounter.com^$third-party
+||sexystat.com^$third-party
+||sf14g.com^$third-party
+||shareasale.com^$third-party
+||sharedid.org^$third-party
+||sharpspring.com^$third-party
+||shinystat.com^$third-party
+||shippinginsights.com^$third-party
+||shoelace.com^$third-party
+||shoplytics.com^$third-party
+||shoptimally.com^$third-party
+||showheroes.com^$third-party
+||showroomlogic.com^$third-party
+||sift.com^$third-party
+||siftscience.com^$third-party
+||signalfx.com^$third-party
+||signifyd.com^$third-party
+||signup-way.com^$third-party
+||silverpop.com^$third-party
+||silverpush.co^$third-party
+||simonsignal.com^$third-party
+||simpleanalytics.com^$third-party,domain=~simpleanalyticscdn.com
+||simpleanalytics.io^$third-party
+||simpleanalyticsbadge.com^$third-party
+||simpleanalyticscdn.com^$third-party
+||simpleanalyticsexternal.com^$third-party
+||simplehitcounter.com^$third-party
+||simplereach.com^$third-party
+||simpli.fi^$third-party
+||simplycast.us^$third-party
+||simplymeasured.com^$third-party
+||singlefeed.com^$third-party
+||sirdata.eu^$third-party
+||sirdata.io^$third-party
+||site24x7rum.com^$third-party
+||siteapps.com^$third-party
+||sitebro.com^$third-party
+||sitebro.net^$third-party
+||sitecompass.com^$third-party
+||siteimprove.com^$third-party
+||siteimproveanalytics.com^$third-party
+||siteimproveanalytics.io^$third-party
+||sitelabweb.com^$third-party
+||sitemeter.com^$third-party
+||siteplug.com^$third-party
+||sitereport.org^$third-party
+||sitescout.com^$third-party
+||siteswithcontent.com^$third-party
+||sitetag.us^$third-party
+||sitetagger.co.uk^$third-party
+||sitetracker.com^$third-party
+||skyglue.com^$third-party
+||sl-ct5.com^$third-party
+||slingpic.com^$third-party
+||smallseotools.com^$third-party
+||smart-digital-solutions.com^$third-party
+||smart-dmp.com^$third-party
+||smart-ip.net^$third-party
+||smart-pixl.com^$third-party
+||smartclip-services.com^$third-party
+||smartctr.com^$third-party
+||smarterhq.io^$third-party
+||smarterremarketer.net^$third-party
+||smartlook.com^$third-party
+||smartocto.com^$third-party
+||smartology.co^$third-party
+||smartracker.net^$third-party
+||smartzonessva.com^$third-party
+||smct.co^$third-party
+||smileyhost.net^$third-party
+||smrk.io^$third-party
+||smtrk.net^$third-party
+||snapdeal.biz^$third-party
+||sni-dat.com^$third-party
+||sniperlog.ru^$third-party
+||sniphub.com^$third-party
+||snitcher.com^$third-party
+||snoobi.com^$third-party
+||snowsignal.com^$third-party
+||social-sb.com^$third-party
+||socialprofitmachine.com^$third-party
+||socialtrack.co^$third-party
+||socialtrack.net^$third-party
+||sociaplus.com^$third-party
+||socketviking.net^$third-party
+||socsi.in^$third-party
+||sodoit.com^$third-party
+||soflopxl.com^$third-party
+||softonic-analytics.net^$third-party
+||sojern.com^$third-party
+||soko.ai^$third-party
+||sokrati.com^$third-party
+||sol-data.com^$third-party
+||solosegment.com^$third-party
+||sometrics.com^$third-party
+||sooqr.com^$third-party
+||sophi.io^$third-party
+||sophus3.com^$third-party
+||soska.us^$third-party
+||spamanalyst.com^$third-party
+||spectate.com^$third-party
+||speed-trap.com^$third-party
+||speedcurve.com^$third-party
+||speedhq.net^$third-party
+||splitbee.io^$third-party
+||splittag.com^$third-party
+||splyt.com^$third-party
+||sponsored.com^$third-party
+||spring.de^$third-party
+||springmetrics.com^$third-party
+||sptag.com^$third-party
+||sptag1.com^$third-party
+||spycounter.net^$third-party
+||spylog.com^$third-party
+||spylog.ru^$third-party
+||spywords.com^$third-party
+||sqate.io^$third-party
+||squeezely.tech^$third-party
+||squidanalytics.com^$third-party
+||srmdata-us.com^$third-party
+||srmdata.com^$third-party
+||srpx.net^$third-party
+||ssm.codes^$third-party
+||star-cntr-5.com^$third-party
+||stat-track.com^$third-party
+||stat.social^$third-party
+||stat.ustore.bz^$third-party
+||stat24.com^$third-party
+||statcounter.com^$third-party
+||statcounterfree.com^$third-party
+||stated.io^$third-party
+||stathat.com^$third-party
+||stathound.com^$third-party
+||staticiv.com^$third-party
+||statisfy.net^$third-party
+||statistiche-web.com^$third-party
+||statowl.com^$third-party
+||statpipe.ru^$third-party
+||stats2.com^$third-party
+||stats21.com^$third-party
+||stats4all.com^$third-party
+||stats4u.net^$third-party
+||stats4you.com^$third-party
+||statsbox.nl^$third-party
+||statsig.com^$third-party
+||statsigapi.net^$third-party
+||statsinsight.com^$third-party
+||statsit.com^$third-party
+||statsmachine.com^$third-party
+||statsrely.com^$third-party
+||statssheet.com^$third-party
+||statswebtown.com^$third-party
+||statsy.net^$third-party
+||stattooz.com^$third-party
+||stattrax.com^$third-party
+||statun.com^$third-party
+||statuncore.com^$third-party
+||steelhousemedia.com^$third-party
+||stellaservice.com^$third-party
+||sterlingwoods.com^$third-party
+||stippleit.com^$third-party
+||stormcontainertag.com^$third-party
+||stormiq.com^$third-party
+||storygize.net^$third-party
+||streamsend.com^$third-party
+||streem.com.au^$third-party
+||streetmetrics.io^$third-party
+||stripedcollar.net^$third-party
+||stroeerdigitalmedia.de^$third-party
+||strossle.it^$third-party
+||strs.jp^$third-party
+||studiostack.com^$third-party
+||sub2tech.com^$third-party
+||submitnet.net^$third-party
+||successfultogether.co.uk^$third-party
+||sugodeku.com^$third-party
+||sumo.com^$third-party
+||sumologic.com^$third-party,domain=~sumologic.net
+||sumome.com^$third-party
+||sundaysky.com^$third-party
+||supercounters.com^$third-party
+||superspeedapp.com^$third-party
+||superstats.com^$third-party
+||surefire.link^$third-party
+||surfcounters.com^$third-party
+||surveyscout.com^$third-party
+||surveywriter.com^$third-party
+||survicate.com^$third-party
+||swetrix.org^$third-party
+||swiss-counter.com^$third-party
+||synergy-e.com^$third-party
+||synerise.com^$third-party
+||synthasite.net^$third-party
+||sysomos.com^$third-party
+||t-analytics.com^$third-party
+||tag4arm.com^$third-party
+||tagcommander.com^$third-party
+||tagdatax.com^$third-party
+||tagmngrs.com^$third-party
+||tagsrvcs.com^$third-party
+||tagstaticx.com^$third-party
+||tagtray.com/api^$third-party
+||tamgrt.com^$third-party
+||tapad.app^$third-party
+||tapad.com^$third-party
+||tapfiliate.com^$third-party
+||taplytics.com^$third-party
+||taps.io^$third-party
+||tapstream.com^$third-party
+||targetfuel.com^$third-party
+||taskanalytics.com^$third-party
+||tcactivity.net^$third-party
+||tcimg.com^$third-party
+||tctm.co^$third-party
+||td573.com^$third-party
+||tdstats.com^$third-party
+||tealiumiq.com^$third-party
+||techlab-cdn.com^$third-party
+||telize.com^$third-party
+||teljari.is^$third-party
+||tellapart.com^$third-party
+||tend.io^$third-party
+||tentaculos.net^$third-party
+||terabytemedia.com^$third-party
+||tercept.com^$third-party
+||testin.cn^$third-party
+||tetoolbox.com^$third-party
+||tgdaudience.com^$third-party
+||tglyr.co^$third-party
+||tgtag.io^$third-party
+||thank-you.io^$third-party
+||theadex.com^$third-party
+||theagency.com^$third-party
+||theardent.group^$third-party
+||thebestlinks.com^$third-party
+||thebrighttag.com^$third-party
+||thecounter.com^$third-party
+||thermstats.com^$third-party
+||thesearchagency.net^$third-party
+||thinktot.com^$third-party
+||thoughtmetric.io^$third-party
+||threat-analytics.com^$third-party
+||tinb.net^$third-party
+||tinycounter.com^$third-party
+||tiser.com.au^$third-party
+||tkqlhce.com^$third-party
+||tl813.com^$third-party
+||tmvtp.com^$third-party
+||tnctrx.com^$third-party
+||tns-counter.ru^$third-party
+||tns-cs.net^$third-party
+||top100bloggers.com^$third-party
+||top100webshops.com^$third-party
+||top10sportsites.com^$third-party
+||topblogarea.com^$third-party
+||topblogging.com^$third-party
+||topdepo.com^$third-party
+||toplist.cz^$third-party
+||toplist.eu^$third-party
+||topmalaysia.com^$third-party
+||topofblogs.com^$third-party
+||topstat.cn^$third-party
+||torbit.com^$third-party
+||touchclarity.com^$third-party
+||tp88trk.com^$third-party
+||tracc.it^$third-party
+||trace-2000.com^$third-party
+||trace.events^$third-party
+||tracead.com^$third-party
+||traceless.me^$third-party
+||tracelytics.com^$third-party
+||tracemyip.org^$third-party
+||traceworks.com^$third-party
+||track-re01.com^$third-party
+||track-server-100.com^$third-party
+||track-web.net^$third-party
+||trackadm.com^$third-party
+||trackalyzer.com^$third-party
+||trackcb.com^$third-party
+||trackcmp.net^$third-party
+||trackconsole.com^$third-party
+||trackeame.com^$third-party
+||trackedlink.net^$third-party
+||trackedweb.net^$third-party
+||trackertest.org^$third-party
+||tracking202.com^$third-party
+||trackingca.com^$third-party
+||trackinglabs.com^$third-party
+||trackingpro.pro^$third-party
+||trackkas.com^$third-party
+||trackmethod.com^$third-party
+||trackmytarget.com^$third-party
+||trackmyusers.com^$third-party
+||trackmyweb.net^$third-party
+||trackonomics.net^$third-party
+||trackset.com^$third-party
+||trackword.biz^$third-party
+||trackyourstats.com^$third-party
+||tradelab.fr^$third-party
+||tradescape.biz^$third-party
+||trafex.net^$third-party
+||trafficby.net^$third-party
+||trafficengine.net^$third-party
+||trafficfacts.com^$third-party
+||trafficfuel.com^$third-party
+||trafficguard.ai^$third-party
+||trafficjoint.com^$third-party
+||trafficregenerator.com^$third-party
+||trafficroots.com^$third-party
+||trafic.ro^$third-party
+||trail-web.com^$third-party
+||trailheadapp.com^$third-party
+||trakken.de^$third-party
+||trakzor.com^$third-party
+||transactionale.com^$third-party
+||traq.li^$third-party
+||travelrobotflower.com^$third-party
+||traversedlp.com^$third-party
+||trbas.com^$third-party
+||treasuredata.com^$third-party
+||trekmedia.net^$third-party
+||trendcounter.com^$third-party
+||trendemon.com^$third-party
+||trialfire.com^$third-party
+||tribl.io^$third-party
+||triggeredmessaging.com^$third-party
+||triggertag.gorillanation.com^$third-party
+||triggit.com^$third-party
+||trilogyed.com^$third-party
+||triptease.io^$third-party
+||triptease.net^$third-party
+||trkjmp.com^$third-party
+||trmads.eu^$third-party
+||trovus.co.uk^$third-party
+||trstplse.com^$third-party
+||trtl.ws^$third-party
+||truconversion.com^$third-party
+||truehits.in.th^$third-party
+||truehits1.gits.net.th^$third-party
+||truffle.one^$third-party
+||truoptik.com^$third-party
+||trysera.com^$third-party
+||tscounter.com^$third-party
+||tsk4.com^$third-party
+||tsk5.com^$third-party
+||tubemogul.com^$third-party
+||tuinfra.com^$third-party
+||tunnl.com^$third-party
+||turn.com^$third-party
+||tvsquared.com^$third-party
+||twcount.com^$third-party
+||tyxo.com^$third-party
+||u-on.eu^$third-party
+||u5e.com^$third-party
+||uadx.com^$third-party
+||ub-analytics.com^$third-party
+||ubertags.com^$third-party
+||ubertracking.info^$third-party
+||uciservice.com^$third-party
+||udkcrj.com^$third-party
+||umami.is^$third-party
+||umbel.com^$third-party
+||unicaondemand.com^$third-party
+||uniqodo.com^$third-party
+||united-infos.net^$third-party
+||upapi.net^$third-party
+||uplift-platform.com^$third-party
+||upscore.com^$third-party
+||upsellit.com^$third-party
+||upstats.ru^$third-party
+||uptain.de^$third-party
+||uptracs.com^$third-party
+||uptrendsdata.com^$third-party
+||uralweb.ru^$third-party
+||urlbrief.com^$third-party
+||urlself.com^$third-party
+||usabilitytools.com^$third-party
+||usabilla.com^$third-party
+||useinsider.com^$third-party
+||useitbetter.com^$third-party
+||useproof.com^$third-party
+||user-api.com^$third-party
+||user-clicks.com^$third-party
+||user-red.com^$third-party
+||usercycle.com^$third-party
+||userlook.com^$third-party
+||usermaven.com^$third-party
+||userneeds.dk^$third-party
+||userreplay.net^$third-party
+||userreport.com^$third-party
+||users-api.com^$third-party
+||userzoom.com^$third-party
+||usesfathom.com^$third-party
+||usuarios-online.com^$third-party
+||v12group.com^$third-party
+||v3cdn.net^$third-party
+||va-endpoint.com^$third-party
+||valuedopinions.co.uk^$third-party
+||vbanalytics.com^$third-party
+||vbt.io^$third-party
+||vdna-assets.com^$third-party
+||veduy.com^$third-party
+||veille-referencement.com^$third-party
+||veinteractive.com^$third-party
+||velaro.com^$third-party
+||vendri.io^$third-party
+||ventivmedia.com^$third-party
+||vepxl1.net^$third-party
+||verbolia.com^$third-party
+||vercel-analytics.com^$third-party
+||vercel-insights.com^$third-party
+||vertical-leap.co.uk^$third-party
+||vertical-leap.net^$third-party
+||verticalscope.com^$third-party
+||verticalsearchworks.com^$third-party
+||vertster.com^$third-party
+||video.oms.eu^$third-party
+||videoamp.com^$third-party
+||videos.oms.eu^$third-party
+||videostat.com^$third-party
+||vilynx.com^$third-party
+||vinlens.com^$third-party
+||vinub.com^$third-party
+||viralninjas.com^$third-party
+||virgul.com^$third-party
+||virool.com^$third-party
+||virtualnet.co.uk^$third-party
+||visibility-stats.com^$third-party
+||visibli.com^$third-party
+||visionarycompany52.com^$third-party
+||visioncriticalpanels.com^$third-party
+||visionsage.com^$third-party
+||visistat.com^$third-party
+||visitor-analytics.io^$third-party
+||visitor-analytics.net^$third-party
+||visitor-track.com^$third-party
+||visitorglobe.com^$third-party
+||visitorjs.com^$third-party
+||visitorpath.com^$third-party
+||visitorprofiler.com^$third-party
+||visitorqueue.com^$third-party
+||visitortracklog.com^$third-party
+||visitorville.com^$third-party
+||visitstreamer.com^$third-party
+||visto1.net^$third-party
+||visualdna.com^$third-party
+||visualrevenue.com^$third-party
+||visx.net^$third-party
+||vivocha.com^$third-party
+||vizisense.net^$third-party
+||vizury.com^$third-party
+||vmm-satellite1.com^$third-party
+||vmmpxl.com^$third-party
+||voicefive.com^$third-party
+||volantix.com^$third-party
+||volument.com^$third-party
+||votistics.com^$third-party
+||vprza.com^$third-party
+||vtracker.net^$third-party
+||w3counter.com^$third-party
+||walmeric.com^$third-party
+||waplog.net^$third-party
+||waudit.cz^$third-party
+||wbdx.fr^$third-party
+||wbtrk.net^$third-party
+||wc4.net^$image,third-party
+||wdfl.co^$third-party
+||wdsvc.net^$third-party
+||we-stats.com^$third-party
+||web-boosting.net^$third-party
+||web-counter.net^$third-party
+||web-stat.com^$third-party
+||web-stat.fr^$third-party
+||web-stat.net^$third-party
+||webanalysis.dev^$third-party
+||webanalytic.info^$third-party
+||webclicktracker.com^$third-party
+||webcounter.co.za^$third-party
+||webcounter.ws^$third-party
+||webengage.co^$third-party
+||webengage.com^$third-party
+||webeyez.com^$third-party
+||webflowmetrics.com^$third-party
+||webforensics.co.uk^$third-party
+||webglstats.com^$third-party
+||webiqonline.com^$third-party
+||webleads-tracker.com^$third-party
+||webmasterplan.com^$third-party
+||weborama.com^$third-party
+||weborama.design^$third-party
+||website-hit-counters.com^$third-party
+||websiteceo.com^$third-party
+||websiteperform.com^$third-party
+||websitewelcome.com^$third-party
+||webspectator.com^$third-party
+||webstat.com^$third-party
+||webstat.fr^$third-party
+||webstat.net^$third-party
+||webstat.se^$third-party
+||webstats.com^$third-party
+||webstats4u.com^$third-party
+||webtrackingservices.com^$third-party
+||webtraffic.se^$third-party
+||webtrafficagents.com^$third-party
+||webtrafficsource.com^$third-party
+||webtraffiq.com^$third-party
+||webtraxs.com^$third-party
+||webtrekk-asia.net^$third-party
+||webtrends-optimize.com^$third-party
+||webtrends.com^$third-party
+||webtrendslive.com^$third-party
+||webtuna.com^$third-party
+||wecantrack.com^$third-party
+||wgsas.com^$third-party
+||wheredoyoucomefrom.ovh^$third-party
+||whitepixel.com^$third-party
+||whoaremyfriends.com^$third-party
+||whoaremyfriends.net^$third-party
+||whoisonline.net^$third-party
+||whoisvisiting.com^$third-party
+||whosclickingwho.com^$third-party
+||wickedreports.com^$third-party
+||wideangle.co^$third-party
+||widerplanet.com^$third-party
+||wikia-beacon.com^$third-party
+||wiredminds.de^$third-party
+||wirewuss.com^$third-party
+||wisetrack.net^$third-party
+||withcabin.com^$third-party
+||withcubed.com^$third-party
+||wizaly.com^$third-party
+||wmcdp.io^$third-party
+||womtp.com^$third-party
+||woopra-ns.com^$third-party
+||woopra.com^$third-party
+||wootric.com^$third-party
+||worldflagcounter.com^$third-party
+||worldlogger.com^$third-party
+||wowanalytics.co.uk^$third-party
+||wpdstat.com^$third-party
+||wpfc.ml^$third-party
+||wrating.com^$third-party
+||wt-eu02.net^$third-party
+||wt-safetag.com^$third-party
+||wts.one^$third-party
+||wts2.one^$third-party
+||wtstats.com^$third-party
+||wundercounter.com^$third-party
+||wunderloop.net^$third-party
+||www-google-analytics.l.google.com^$third-party
+||www-path.com^$third-party
+||wywy.com^$third-party
+||wzrk.co^$third-party
+||wzrkt.com^$third-party
+||x-stat.de^$third-party
+||xapkgame.com^$third-party
+||xdisctracking.pw^$third-party
+||xg4ken.com^$third-party
+||xiti.com^$third-party
+||xlisting.jp^$third-party
+||xstats.net^$third-party
+||xtraffstat.com^$third-party
+||xtremline.com^$third-party
+||xxxcounter.com^$third-party
+||xyztraffic.com^$third-party
+||y-track.com^$third-party
+||ya-counter.ru^$third-party
+||yamanoha.com^$third-party
+||yaudience.com^$third-party
+||ybotvisit.com^$third-party
+||yellowbrix.com^$third-party
+||yext-pixel.com^$third-party
+||yextevents.com^$third-party
+||ygsm.com^$third-party
+||yieldbot.com^$third-party
+||yieldify.com^$third-party
+||yieldlift.com^$third-party
+||yieldsoftware.com^$third-party
+||yjtag.jp^$third-party
+||yldr.io^$third-party
+||ymetrica1.com^$third-party
+||your-analytics.org^$third-party
+||youramigo.com^$third-party
+||youvisit.com^$third-party
+||yu987.com^$third-party
+||ywxi.net^$third-party,domain=~trustedsite.com
+||z444o.com^$third-party
+||zanox-affiliate.de^$third-party
+||zanox.com^$third-party
+||zarget.com^$third-party
+||zdtag.com^$third-party
+||zedwhyex.com^$third-party
+||zeerat.com^$third-party
+||zeotap.com^$third-party
+||zesep.com^$third-party
+||zeustechnology.com^$third-party
+||zoomanalytics.co^$third-party
+||zoomino.com^$third-party
+||zoosnet.net^$third-party
+||zoossoft.net^$third-party
+||zprk.io^$third-party
+||ztsrv.com^$third-party
+||zuyapixel.com^$third-party
+||zuzab.com^$third-party
+||zx-adnet.com^$third-party
+
+! *** easylist:easyprivacy/easyprivacy_trackingservers_mining.txt ***
+.1.1.1.l80.js^$third-party
+.n.2.1.js^$third-party
+.n.2.1.l50.js^$third-party
+.n.2.1.l60.js^$third-party
+/cdn-cgi/pe/bag2?r[]=*eth-pocket.de
+||185.193.38.148^
+||35.194.26.233^
+||35.239.57.233^
+||45.32.105.134^
+||77.162.125.199^
+||a-calc.com^$third-party
+||a-calc.de^$third-party
+||abc.pema.cl^
+||acbp0020171456.page.tl^
+||adless.io^
+||adminer.com^
+||altpool.pro^$third-party
+||analytics.blue^
+||andlache.com^
+||authedwebmine.cz^$third-party,domain=~webmine.cz
+||averoconnector.com^$third-party
+||axoncoho.tk^$third-party
+||bablace.com^
+||baiduccdn1.com^
+||becanium.com^
+||besstahete.info^$third-party
+||bewaslac.com^
+||biberukalap.com^
+||bitclub.network^
+||bitclubnetwork.com^
+||bitcoin-cashcard.com^
+||bitcoin-cashcard.de^
+||bitcoin-cashcard.eu^
+||bitcoin-pay.eu^
+||bitcoin-pocket.de^
+||bitcoin-pocket.eu^
+||bmcm.pw^
+||bmnr.pw^
+||bmst.pw^
+||bmwebm.org^
+||brominer.com^$third-party
+||browsermine.com^$third-party
+||candid.zone^
+||cashbeet.com^
+||chmproxy.bid^
+||clgserv.pro^
+||cloud-miner.de^
+||cloud-miner.eu^
+||cloudflareinsights.com^$third-party
+||cnhv.co^$third-party
+||coin-have.com^$third-party
+||coinerra.com^$third-party
+||coinhiveproxy.com^$third-party
+||coinimp.com$third-party
+||coinimp.net$third-party
+||coinminerz.com^$third-party
+||coinminingonline.com^$third-party
+||coinnebula.com^$third-party
+||coinpot.co^$third-party
+||coinwebmining.com^$third-party
+||coinzillatag.com^$third-party
+||cookiescript.info^$third-party
+||crypto-coins.com^$third-party
+||crypto-coins.info^$third-party
+||crypto-loot.com^$third-party
+||crypto-pool.fr^$third-party
+||crypto-webminer.com^$third-party
+||cryptobara.com^$third-party
+||cryptonoter.com^$third-party
+||de-mi-nis-ner.info^
+||de-nis-ner-mi-5.info^
+||deepc.cc^$third-party
+||devphp.org.ua^$third-party
+||directprimal.com^$third-party
+||dontbeevils.de^$third-party
+||duckdns.org^$third-party,websocket
+||easyhash.de^$third-party
+||easyhash.io^$third-party
+||eth-pocket.com^$third-party
+||eth-pocket.de^$third-party
+||eth-pocket.eu^$third-party
+||ethereum-cashcard.com^$third-party
+||ethereum-cashcard.de^$third-party
+||ethereum-cashcard.eu^$third-party
+||ethereum-pocket.com^$third-party
+||ethereum-pocket.de^$third-party
+||ethereum-pocket.eu^$third-party
+||ethtrader.de^$third-party
+||eucsoft.com^$third-party
+||f1tbit.com^
+||filmoljupci.com^
+||flare-analytics.com^$third-party
+||formulawire.com^$third-party
+||freecontent.date
+||freecontent.stream
+||g1thub.com^
+||gay-hotvideo.net^
+||goldoffer.online^$third-party
+||gramombird.com^
+||gus.host^$third-party
+||hashcoin.co^$third-party
+||hashing.win^$third-party
+||hashnest.com^$third-party
+||hashvault.pro^$third-party
+||hashzone.io^$third-party
+||hemnes.win^$third-party
+||hostcontent.live^$third-party
+||hostingcloud.party
+||igg.biz^$third-party
+||igrid.org^
+||investhash.com^$third-party
+||ipinfo.io^$third-party
+||istlandoll.com^$third-party
+||jscdndel.com^$third-party
+||jscoinminer.com^
+||jsecoin.com^$third-party
+||kinoprofi.org^$third-party
+||laferia.cr^$third-party
+||laserveradedomaina.com^$third-party
+||lightminer.co^$third-party
+||lmiutil.com^$third-party
+||machieved.com^$third-party
+||mepirtedic.com^$third-party
+||mi-de-ner-nis3.info^
+||mine.nahnoji.cz^
+||mine.torrent.pw^$third-party
+||minerad.com^
+||mineralt.io^$third-party
+||minero-proxy-*.sh^$third-party
+||minero.cc^$third-party
+||minescripts.info^$third-party
+||minexmr.com^$third-party
+||mininghub.club^$third-party
+||mmpool.org^$third-party
+||mollnia.com^$third-party
+||monerise.com^$third-party
+||monerominer.rocks^$third-party
+||moneroocean.stream^$third-party
+||mutinyhq.com^$third-party
+||nabaza.com^$third-party
+||nametraff.com^$third-party
+||nathetsof.com^$third-party
+||nerohut.com^$third-party
+||nfwebminer.com^$third-party
+||nimiq.com^$third-party
+||nimiqpool.com^$third-party
+||nimiqtest.net^$third-party
+||nimpool.io^$third-party
+||notmining.org^$third-party
+||omine.org^$third-party
+||openguid.org^$third-party
+||p2poolmining.com^$third-party
+||pampopholf.com^
+||papoto.com^$third-party
+||party-vqgdyvoycc.now.sh^$third-party
+||pertholin.com^$third-party
+||pool.nimiq.watch^$third-party
+||pr0gram.org^$third-party
+||rand.com.ru^
+||reauthenticator.com^
+||rocks.io^$third-party
+||rtb-seller.com^$third-party
+||s7ven.com^$third-party
+||serie-vostfr.com^$third-party
+||serv1swork.com^
+||silimbompom.com^$third-party
+||smartoffer.site^$third-party
+||sourcecode.pro^$third-party
+||spacepools.org^$third-party
+||srcip.com^$third-party
+||statdynamic.com^
+||static-sb.com^$third-party
+||stonecalcom.com^$third-party
+||str1kee.com^
+||streambeam.io^$third-party
+||sumokoin.com^$third-party
+||supportxmr.com^$third-party
+||sushipool.com^$third-party
+||swiftmining.win^$third-party
+||tercabilis.info^
+||thewhizproducts.com^$third-party
+||thewise.com^$third-party
+||tmmp.io^$third-party
+||traffic.tc-clicks.com^$third-party
+||trustiseverything.de^$third-party
+||trustisimportant.fun^
+||tulip18.com^$third-party
+||turnsocial.com^$third-party
+||usa.cc^$third-party
+||verifypow.com^$third-party
+||vkcdnservice.com^$third-party
+||wasm.stream
+||webmine.cz^$third-party
+||webmine.pro^$third-party
+||webminepool.com^$third-party
+||webminerpool.com^$third-party
+||webmining.co^$third-party
+||webxmr.com^$third-party
+||wtm.monitoringservice.co^$third-party
+||wtmtrack.com^$third-party
+||xmrpool.net^$third-party
+||zlx.com.br^$third-party
+
+! *** easylist:easyprivacy/easyprivacy_trackingservers_admiral.txt ***
+||2znp09oa.com^
+||4jnzhl0d0.com^
+||5mcwl.pw^
+||6ldu6qa.com^
+||82o9v830.com^
+||abackafterthought.com^
+||abackchain.com^
+||abackframe.com^
+||abacksoda.com^
+||abandonedaction.com^
+||aboardamusement.com^
+||aboardfork.com^
+||aboardkettle.com^
+||aboardlevel.com^
+||aboriginalboats.com^
+||abruptroad.com^
+||absentairport.com^
+||absentstream.com^
+||absorbingband.com^
+||absorbingcorn.com^
+||absorbingprison.com^
+||abstractedamount.com^
+||abstractedauthority.com^
+||absurdapple.com^
+||absurdwater.com^
+||acceptableauthority.com^
+||accurateanimal.com^
+||achieverknee.com^
+||acidicgrip.com^
+||acidicstraw.com^
+||acidpigs.com^
+||acousticsapparel.com^
+||acquireattention.com^
+||acridangle.com^
+||acridtwist.com^
+||actoramusement.com^
+||actuallysnake.com^
+||actuallything.com^
+||adamantsnail.com^
+||addictedattention.com^
+||additionant.com^
+||admiral.pub^
+||adorableanger.com^
+||adorableattention.com^
+||adventurousamount.com^
+||advertisementafterthought.com^
+||afraidlanguage.com^
+||aftermathbrother.com^
+||agreeablearch.com^
+||agreeablestew.com^
+||agreeabletouch.com^
+||aheadday.com^
+||aheadmachine.com^
+||ajaralarm.com^
+||ak0gsh40.com^
+||alertafterthought.com^
+||alertfaucet.com^
+||aliasanvil.com^
+||alikeaddition.com^
+||alikearm.com^
+||aliveachiever.com^
+||aliveappliance.com^
+||alleyskin.com^
+||allowmailbox.com^
+||alluringbucket.com^
+||aloofmetal.com^
+||aloofvest.com^
+||alpineactor.com^
+||amazingairplane.com^
+||ambiguousafternoon.com^
+||ambiguousalarm.com^
+||ambiguousanger.com^
+||ambiguousdinosaurs.com^
+||ambiguousincome.com^
+||ambiguousquilt.com^
+||ambitiousagreement.com^
+||ambitiousanimal.com^
+||amethystzenith.com^
+||amuckafternoon.com^
+||amusedbucket.com^
+||amusementmorning.com^
+||amusinggirls.com^
+||ancientact.com^
+||annoyedairport.com^
+||annoyedfifth.com^
+||annoyingacoustics.com^
+||annoyingclover.com^
+||anxiousapples.com^
+||apparatuslip.com^
+||aquaticalarm.com^
+||aquaticanswer.com^
+||aquaticowl.com^
+||ar1nvz5.com^
+||archswimming.com^
+||arcticamber.com^
+||argyresthia.com^
+||ariseboundary.com^
+||arithmeticadjustment.com^
+||arizonapuzzle.com^
+||aromamirror.com^
+||arrivegrowth.com^
+||aspiringapples.com^
+||aspiringattempt.com^
+||astonishingair.com^
+||astonishingfood.com^
+||attractionbanana.com^
+||attractiveafternoon.com^
+||attractivecap.com^
+||audioarctic.com^
+||auntants.com^
+||auspiciousyard.com^
+||automaticflock.com^
+||automaticside.com^
+||automaticturkey.com^
+||availablerest.com^
+||avalonalbum.com^
+||averageactivity.com^
+||averageamusement.com^
+||awakebird.com^
+||awarealley.com^
+||awesomeagreement.com^
+||awzbijw.com^
+||axiomaticalley.com^
+||axiomaticanger.com^
+||azuremystique.com^
+||badgeboat.com^
+||badgevolcano.com^
+||bagbeam.com^
+||baitbaseball.com^
+||balancemailbox.com^
+||balloonbelieve.com^
+||balloonbit.com^
+||balloontexture.com^
+||ballsbanana.com^
+||bandborder.com^
+||barbarousbase.com^
+||barbarousnerve.com^
+||baseballbone.com^
+||basketballbelieve.com^
+||baskettexture.com^
+||batbuilding.com^
+||battlebalance.com^
+||battlehope.com^
+||bawdybalance.com^
+||bawdybeast.com^
+||bawdypets.com^
+||beadbears.com^
+||beamincrease.com^
+||beamvolcano.com^
+||beancontrol.com^
+||beastbeef.com^
+||beautifulhobbies.com^
+||bedsberry.com^
+||beetleend.com^
+||beginnerpancake.com^
+||begintrain.com^
+||beneficialbeef.com^
+||benthose.com^
+||bestboundary.com^
+||bewilderedbattle.com^
+||bewilderedblade.com^
+||bikesboard.com^
+||billowybead.com^
+||billowybelief.com^
+||birthdaybelief.com^
+||bitterbear.com^
+||blackbrake.com^
+||bleachbubble.com^
+||bleachscarecrow.com^
+||bleedlight.com^
+||blesspizzas.com^
+||blotburn.com^
+||blueeyedblow.com^
+||blushingbeast.com^
+||blushingboundary.com^
+||blushingbread.com^
+||blushingwar.com^
+||boilingbeetle.com^
+||boilingcredit.com^
+||boilingumbrella.com^
+||boneregret.com^
+||boredborder.com^
+||boredcrown.com^
+||boringberry.com^
+||boringcoat.com^
+||bouncyfront.com^
+||bouncyproperty.com^
+||boundarybusiness.com^
+||boundlessargument.com^
+||boundlessbrake.com^
+||boundlessveil.com^
+||brainybasin.com^
+||brainynut.com^
+||brandybison.com^
+||brashbead.com^
+||bravebone.com^
+||breadbalance.com^
+||breakableinsurance.com^
+||breakerror.com^
+||breakfastboat.com^
+||briefbears.com^
+||briefstem.com^
+||broadborder.com^
+||broadboundary.com^
+||broadcastbed.com^
+||broaddoor.com^
+||brothersbucket.com^
+||brotherslocket.com^
+||bruisebaseball.com^
+||bubblebedroom.com^
+||bucketbean.com^
+||buildingknife.com^
+||bulbbait.com^
+||bumpydevelopment.com^
+||bunchance.com^
+||burgerbrush.com^
+||burlywhistle.com^
+||burnbubble.com^
+||burntwist.com^
+||burstblade.com^
+||bushesbag.com^
+||businessbells.com^
+||bustlinganimal.com^
+||bustlingbath.com^
+||bustlingbook.com^
+||butterbulb.com^
+||butterburst.com^
+||buttonladybug.com^
+||cabledemand.com^
+||cakesdrum.com^
+||calculatingchannel.com^
+||calculatingcircle.com^
+||calculatingtoothbrush.com^
+||calculatorcamera.com^
+||calculatorstatement.com^
+||calendarrate.com^
+||callousbrake.com^
+||calmcactus.com^
+||calmcough.com^
+||calypsocapsule.com^
+||cannonjudo.com^
+||cannontwin.com^
+||capablecows.com^
+||capablecup.com^
+||capriciouscorn.com^
+||capsquirrel.com^
+||carefuldolls.com^
+||carelesshat.com^
+||caringcast.com^
+||caringzinc.com^
+||carloforward.com^
+||carpentercolor.com^
+||carpentercomparison.com^
+||carriagecan.com^
+||carscannon.com^
+||cartkitten.com^
+||carvecakes.com^
+||castcream.com^
+||catalogdiscovery.com^
+||catschickens.com^
+||cattlecommittee.com^
+||causecherry.com^
+||cautiouscamera.com^
+||cautiouscherries.com^
+||cautiouscrate.com^
+||cautiouscredit.com^
+||cavecurtain.com^
+||cdnral.com^
+||ceciliavenus.com^
+||celestialspectra.com^
+||chaireggnog.com^
+||chairscrack.com^
+||chairsdonkey.com^
+||chalkoil.com^
+||changeablecats.com^
+||channelcamp.com^
+||chargecracker.com^
+||charmingcough.com^
+||charmingplate.com^
+||cheerfulrange.com^
+||chemicalcoach.com^
+||chemicalsnake.com^
+||cherriescare.com^
+||cherriescloud.com^
+||chesscherry.com^
+||chesscolor.com^
+||chewcoat.com^
+||chickensstation.com^
+||childlikecook.com^
+||childlikecrowd.com^
+||childlikeexample.com^
+||childlikeform.com^
+||chingovernment.com^
+||chinsnakes.com^
+||chivalrouscord.com^
+||chubbycreature.com^
+||chunkycactus.com^
+||cinemabonus.com^
+||circlelevel.com^
+||clamcelery.com^
+||clammychicken.com^
+||clammytree.com^
+||clarifyverse.com^
+||cleanhaircut.com^
+||clearcabbage.com^
+||cloisteredcord.com^
+||cloisteredcurve.com^
+||cloisteredhydrant.com^
+||closedcows.com^
+||closefriction.com^
+||cloudsdestruction.com^
+||clovercabbage.com^
+||clumsycar.com^
+||clumsyrock.com^
+||coachquartz.com^
+||coatfood.com^
+||coldbalance.com^
+||colorfulafterthought.com^
+||colossalchance.com^
+||colossalclouds.com^
+||colossalcoat.com^
+||colossalcry.com^
+||combativecar.com^
+||combativedetail.com^
+||combbit.com^
+||combcattle.com^
+||combclover.com^
+||combcompetition.com^
+||comfortablecheese.com^
+||commonalmanac.com^
+||commonswing.com^
+||companyparcel.com^
+||comparereaction.com^
+||competitionbeetle.com^
+||compiledoctor.com^
+||completecabbage.com^
+||complextoad.com^
+||conceptualizereading.com^
+||concernedchange.com^
+||concernedchickens.com^
+||concernedcondition.com^
+||condemnedcomb.com^
+||conditionchange.com^
+||conditioncrush.com^
+||confesschairs.com^
+||confusedcart.com^
+||consciouschairs.com^
+||consciouscheese.com^
+||consciousdirt.com^
+||considermice.com^
+||consistpotato.com^
+||controlcola.com^
+||controlswim.com^
+||coordinatedbedroom.com^
+||coordinatedcoat.com^
+||coordinatedcub.com^
+||copperchickens.com^
+||copycarpenter.com^
+||copyrightaccesscontrols.com^
+||copytitle.com^
+||coralreverie.com^
+||cordcopper.com^
+||correctchaos.com^
+||cosmosjackson.com^
+||courageousbaby.com^
+||coverapparatus.com^
+||cowscrayon.com^
+||cozyhillside.com^
+||crabbychin.com^
+||crafthenry.com^
+||crashchance.com^
+||cratecamera.com^
+||crawlclocks.com^
+||crayoncompetition.com^
+||creatorcherry.com^
+||creditcreature.com^
+||crimsonmeadow.com^
+||critictruck.com^
+||crookedcreature.com^
+||crowdedmass.com^
+||crystalboulevard.com^
+||cubchannel.com^
+||cuddlycake.com^
+||culturedcamera.com^
+||culturedcrayon.com^
+||culturedfeather.com^
+||cumbersomecake.com^
+||cumbersomecar.com^
+||cumbersomecarpenter.com^
+||cumbersomecloud.com^
+||curiouschalk.com^
+||curlycannon.com^
+||currentcollar.com^
+||curtaincows.com^
+||curvedhoney.com^
+||curvedsquirrel.com^
+||curvycord.com^
+||curvycry.com^
+||cushiondrum.com^
+||cushionpig.com^
+||cutcurrent.com^
+||cutecalculator.com^
+||cutechin.com^
+||cutecushion.com^
+||cutepopcorn.com^
+||cuteturkey.com^
+||dailydivision.com^
+||damagedadvice.com^
+||damageddistance.com^
+||damagedroll.com^
+||damdoor.com^
+||dampdock.com^
+||dancemistake.com^
+||dangerouswinter.com^
+||dapperdiscussion.com^
+||dapperfloor.com^
+||dashingdirt.com^
+||dashingdrop.com^
+||dashingsweater.com^
+||daughterstone.com^
+||dazzlingbook.com^
+||deadpangate.com^
+||deadpanmarble.com^
+||deafeningdock.com^
+||deafeningdowntown.com^
+||debonairdust.com^
+||debonairtree.com^
+||debonairway.com^
+||decidedrum.com^
+||decisivebase.com^
+||decisivedrawer.com^
+||decisiveducks.com^
+||decoroustitle.com^
+||decoycreation.com^
+||deerbeginner.com^
+||defeatedbadge.com^
+||defectivedress.com^
+||defiantrice.com^
+||delegatediscussion.com^
+||delicatecascade.com^
+||delicateducks.com^
+||deliciousducks.com^
+||delightfulhour.com^
+||dependenttrip.com^
+||desertedbreath.com^
+||desertedrat.com^
+||desirebucket.com^
+||desiredirt.com^
+||deskdecision.com^
+||detailedglue.com^
+||detailedgovernment.com^
+||detailedkitten.com^
+||detectdinner.com^
+||detectdiscovery.com^
+||devilishdinner.com^
+||dewdroplagoon.com^
+||differentcoat.com^
+||difficultfog.com^
+||digestiondrawer.com^
+||dinnerquartz.com^
+||diplomahawaii.com^
+||direfuldesk.com^
+||disagreeabledrop.com^
+||discreetfield.com^
+||discreetquarter.com^
+||dispensablestranger.com^
+||distancefinger.com^
+||distributionneck.com^
+||distributionpocket.com^
+||distributiontomatoes.com^
+||disturbedquiet.com^
+||divehope.com^
+||divergentoffer.com^
+||dk4ywix.com^
+||dockdigestion.com^
+||docksalmon.com^
+||dogsshoes.com^
+||dollardelta.com^
+||dolldetail.com^
+||donkeyleaf.com^
+||doorbrazil.com^
+||doubtdrawer.com^
+||doubtfulrainstorm.com^
+||downtowndirection.com^
+||dq95d35.com^
+||drabsize.com^
+||dragzebra.com^
+||drainpaste.com^
+||dramaticcondition.com^
+||dramaticdirection.com^
+||drawermice.com^
+||drawservant.com^
+||dreamycanyon.com^
+||dressexpansion.com^
+||dripappliance.com^
+||driverequest.com^
+||drivingdirt.com^
+||drydrum.com^
+||dustydime.com^
+||dustyhammer.com^
+||dustyrabbits.com^
+||dustywave.com^
+||dysfunctionalcellar.com^
+||earthquakeend.com^
+||earthquakescarf.com^
+||earthycopy.com^
+||eatablesquare.com^
+||echoinghaven.com^
+||economicpizzas.com^
+||efficaciouscactus.com^
+||ejyymghi.com^
+||elasticchange.com^
+||elasticducks.com^
+||elderlybean.com^
+||elderlyinsect.com^
+||elderlyscissors.com^
+||elderlytown.com^
+||elegantboulevard.com^
+||elephantqueue.com^
+||embellishedmeadow.com^
+||embermosaic.com^
+||eminentbubble.com^
+||eminentend.com^
+||enchantedjudge.com^
+||enchantedskyline.com^
+||enchantedtop.com^
+||enchantingbear.com^
+||enchantingvalley.com^
+||encourageidea.com^
+||encourageshock.com^
+||encouragingleaf.com^
+||encouragingthread.com^
+||encouragingvase.com^
+||encouragingwilderness.com^
+||endurablebulb.com^
+||endurablecrayon.com^
+||endurableshop.com^
+||energeticexample.com^
+||energeticladybug.com^
+||engineergrape.com^
+||engineertrick.com^
+||enormousearth.com^
+||enormousfoot.com^
+||entertainingeyes.com^
+||entertainskin.com^
+||enthusiasticdad.com^
+||enthusiasticring.com^
+||enthusiastictemper.com^
+||enviousthread.com^
+||equablekettle.com^
+||erraticreaction.com^
+||etherealripple.com^
+||evaluateend.com^
+||evanescentedge.com^
+||eventexistence.com^
+||exampleshake.com^
+||exchangedetail.com^
+||excitingtub.com^
+||exclusivebrass.com^
+||exhibitsneeze.com^
+||expansioneggnog.com^
+||experienceeggs.com^
+||extractobservation.com^
+||exuberantedge.com^
+||exuberanteyes.com^
+||exuberantsoda.com^
+||exultantdrop.com^
+||fabulousterritory.com^
+||facilitategrandfather.com^
+||fadechildren.com^
+||fadedprofit.com^
+||fadedsnow.com^
+||fadewaves.com^
+||faintflag.com^
+||fairfeeling.com^
+||fairiesbranch.com^
+||fallaciousfifth.com^
+||falsefeet.com^
+||falseframe.com^
+||familiarrod.com^
+||famousquarter.com^
+||fancyactivity.com^
+||fangfeeling.com^
+||fantasticsmash.com^
+||farethief.com^
+||farmergoldfish.com^
+||farshake.com^
+||farsnails.com^
+||fascinatedfeather.com^
+||fastenfather.com^
+||fatcoil.com^
+||faucetfoot.com^
+||faultycanvas.com^
+||faultyfowl.com^
+||fearfowl.com^
+||fearfulfear.com^
+||fearfulfish.com^
+||fearfulmint.com^
+||fearlessfaucet.com^
+||featherstage.com^
+||feebleshock.com^
+||fewjuice.com^
+||fewkittens.com^
+||fifthborder.com^
+||finalizeforce.com^
+||financefear.com^
+||firstfrogs.com^
+||firsttexture.com^
+||fixedfold.com^
+||flakyfeast.com^
+||flameuncle.com^
+||flimsycircle.com^
+||flimsythought.com^
+||floodprincipal.com^
+||flowersornament.com^
+||flowerstreatment.com^
+||flowerycreature.com^
+||floweryfact.com^
+||floweryflavor.com^
+||floweryoperation.com^
+||flutteringfireman.com^
+||foamyfood.com^
+||foamypain.com^
+||followborder.com^
+||forecasttiger.com^
+||foregoingfowl.com^
+||foretellfifth.com^
+||forgetfulflowers.com^
+||forgetfulsnail.com^
+||fortunatemark.com^
+||fourarithmetic.com^
+||fourfork.com^
+||frailflock.com^
+||frailfruit.com^
+||frailoffer.com^
+||framebanana.com^
+||franticcarpenter.com^
+||franticroof.com^
+||frantictrail.com^
+||freezingbuilding.com^
+||frequentflesh.com^
+||fretfulfurniture.com^
+||friendlycrayon.com^
+||friendlyfold.com^
+||friendwool.com^
+||frightenedpotato.com^
+||frogtray.com^
+||fronttoad.com^
+||fujiladder.com^
+||fumblingform.com^
+||fumblingselection.com^
+||functionalcrown.com^
+||functionalfeather.com^
+||funnyairplane.com^
+||furryfork.com^
+||furryhorses.com^
+||futuristicapparatus.com^
+||futuristicfairies.com^
+||futuristicfifth.com^
+||futuristicfold.com^
+||futuristicframe.com^
+||fuzzybasketball.com^
+||fuzzyerror.com^
+||fuzzyflavor.com^
+||fuzzyweather.com^
+||fvl1f.pw^
+||gammamaximum.com^
+||gaudybeginner.com^
+||generalprose.com^
+||generateoffice.com^
+||gentlemoonlight.com^
+||giantsvessel.com^
+||giddycoat.com^
+||giftedglue.com^
+||giftedthumb.com^
+||giraffepiano.com^
+||givevacation.com^
+||gleamingcow.com^
+||gleamingtrade.com^
+||glisteningguide.com^
+||glisteningsign.com^
+||glitteringbrook.com^
+||gloriousbeef.com^
+||glossysense.com^
+||godlygeese.com^
+||goldfishgrowth.com^
+||gondolagnome.com^
+||gorgeousedge.com^
+||gorgeousground.com^
+||gracefulsock.com^
+||grainmass.com^
+||grandfatherguitar.com^
+||grandiosefire.com^
+||grandioseguide.com^
+||grandmotherunit.com^
+||grapeopinion.com^
+||grayoranges.com^
+||grayreceipt.com^
+||greasegarden.com^
+||greasemotion.com^
+||greasysquare.com^
+||greetzebra.com^
+||greyinstrument.com^
+||gripcorn.com^
+||groovyornament.com^
+||grouchypush.com^
+||grumpydime.com^
+||grumpydrawer.com^
+||guaranteelamp.com^
+||guardeddirection.com^
+||guardedschool.com^
+||guessdetail.com^
+||guidecent.com^
+||guiltlessbasketball.com^
+||guitargrandmother.com^
+||gulliblecamp.com^
+||gulliblegrip.com^
+||gullibleguitar.com^
+||gustygrandmother.com^
+||h78xb.pw^
+||habitualhumor.com^
+||halcyoncanyon.com^
+||hallowedinvention.com^
+||haltingbadge.com^
+||haltingdivision.com^
+||haltinggold.com^
+||hammerhearing.com^
+||handleteeth.com^
+||handnorth.com^
+||handsomehose.com^
+||handsomeindustry.com^
+||handsomelyhealth.com^
+||handsomeyam.com^
+||handyfield.com^
+||handyfireman.com^
+||handyincrease.com^
+||haplesshydrant.com^
+||haplessland.com^
+||happenhistory.com^
+||harborcaption.com^
+||harborcub.com^
+||hardtofindmilk.com^
+||harmonywing.com^
+||hatefulrequest.com^
+||hauntlist.com^
+||headydegree.com^
+||headyhook.com^
+||healflowers.com^
+||hearinglizards.com^
+||heartbreakingmind.com^
+||hearthorn.com^
+||heavyplayground.com^
+||helpcollar.com^
+||helpflame.com^
+||hesitanttoothpaste.com^
+||hfc195b.com^
+||highfalutinbox.com^
+||highfalutinhoney.com^
+||highfalutinroom.com^
+||hilariouszinc.com^
+||historicalbeam.com^
+||historicalrequest.com^
+||hocgeese.com^
+||hollowafterthought.com^
+||homelycrown.com^
+||honeybulb.com^
+||honeygoldfish.com^
+||honorablehall.com^
+||honorablehydrant.com^
+||honorableland.com^
+||hoplaugh.com^
+||hosenews.com^
+||hospitablehall.com^
+||hospitablehat.com^
+||hothydrant.com^
+||humdrumhat.com^
+||humdrumhobbies.com^
+||hurtgrape.com^
+||hurtteeth.com^
+||hypnoticwound.com^
+||hystericalcloth.com^
+||hystericalfinger.com^
+||hystericalhelp.com^
+||i9w8p.pw^
+||icebergindigo.com^
+||illfatedsnail.com^
+||illinvention.com^
+||illustriousoatmeal.com^
+||immensehoney.com^
+||imminentshake.com^
+||imperfectinstrument.com^
+||importedincrease.com^
+||importedinsect.com^
+||importedplay.com^
+||importedpolice.com^
+||importlocate.com^
+||impossibleexpansion.com^
+||impossibleglue.com^
+||impossiblemove.com^
+||impulsehands.com^
+||impulsejewel.com^
+||incompetentjoke.com^
+||inconclusiveaction.com^
+||infamousstream.com^
+||informengine.com^
+||innatecomb.com^
+||innocentinvention.com^
+||innocentwax.com^
+||inputicicle.com^
+||inquisitiveice.com^
+||inquisitiveinvention.com^
+||instrumentinsect.com^
+||instrumentsponge.com^
+||intelligentscissors.com^
+||interestingpot.com^
+||interestsmoke.com^
+||internalcondition.com^
+||internalsink.com^
+||inventionpassenger.com^
+||investigatepin.com^
+||invitesugar.com^
+||ivykiosk.com^
+||j93557g.com^
+||jadedjoke.com^
+||jadeitite.com^
+||jailbulb.com^
+||jamexistence.com^
+||jimny.pro^
+||joblessdrum.com^
+||joyoussurprise.com^
+||jubilantcanyon.com^
+||justicejudo.com^
+||k54nw.pw^
+||kaputquill.com^
+||kitesquirrel.com^
+||kittyaction.com^
+||knitstamp.com^
+||knotkettle.com^
+||knottysticks.com^
+||knottyswing.com^
+||laboredlocket.com^
+||lackadaisicalkite.com^
+||lagoonolivia.com^
+||lameletters.com^
+||lamplow.com^
+||languagelake.com^
+||largebrass.com^
+||laughablecopper.com^
+||laughablelizards.com^
+||laughcloth.com^
+||laughdrum.com^
+||leapfaucet.com^
+||leaplunchroom.com^
+||learnedmarket.com^
+||leftliquid.com^
+||legalleg.com^
+||lettucecopper.com^
+||lettucelimit.com^
+||levelbehavior.com^
+||liftedknowledge.com^
+||lightcushion.com^
+||lightenafterthought.com^
+||literatelight.com^
+||livelumber.com^
+||livelylaugh.com^
+||livelyreward.com^
+||livingsleet.com^
+||lizardslaugh.com^
+||loadsurprise.com^
+||lonelyflavor.com^
+||longinglettuce.com^
+||longingtrees.com^
+||looseloaf.com^
+||lopsidedleather.com^
+||lorenzourban.com^
+||losslace.com^
+||loudlunch.com^
+||lovelydrum.com^
+||loveseashore.com^
+||lowlocket.com^
+||lp3tdqle.com^
+||ludicrousarch.com^
+||lumberamount.com^
+||lumberrule.com^
+||lumpylumber.com^
+||lunchroomlock.com^
+||maddeningpowder.com^
+||magicaljoin.com^
+||magnetairport.com^
+||magnificentmeasure.com^
+||magnificentmist.com^
+||mailboxmeeting.com^
+||makeshiftmine.com^
+||maliciousmusic.com^
+||maniacalappliance.com^
+||marblediscussion.com^
+||markedcrayon.com^
+||markedmeasure.com^
+||markedpail.com^
+||marketspiders.com^
+||marriedbelief.com^
+||marriedmailbox.com^
+||massivebasket.com^
+||massivemark.com^
+||matchjoke.com^
+||materialexample.com^
+||materialisticfan.com^
+||materialisticmark.com^
+||materialisticmoon.com^
+||materialmilk.com^
+||materialmoon.com^
+||materialparcel.com^
+||materialplayground.com^
+||meadowlullaby.com^
+||measlymiddle.com^
+||measurecaption.com^
+||measurefoot.com^
+||meatydime.com^
+||meddleplant.com^
+||mediatescarf.com^
+||mellowbike.com^
+||mellowmailbox.com^
+||melodicminute.com^
+||meltmilk.com^
+||memopilot.com^
+||memorizeline.com^
+||memorizematch.com^
+||memorizeneck.com^
+||memorycobweb.com^
+||mentorsticks.com^
+||meremark.com^
+||merequartz.com^
+||messagenovice.com^
+||messyoranges.com^
+||metroaverage.com^
+||mightyspiders.com^
+||militaryverse.com^
+||mimosamajor.com^
+||mindlessmark.com^
+||minormeeting.com^
+||minusmental.com^
+||minuteburst.com^
+||minuterhythm.com^
+||miscreantmine.com^
+||miscreantmoon.com^
+||mistyhorizon.com^
+||mittencattle.com^
+||mixedreading.com^
+||modifyeyes.com^
+||modularmental.com^
+||moldyicicle.com^
+||moorshoes.com^
+||motionflowers.com^
+||motionlessbag.com^
+||motionlessbelief.com^
+||motionlessmeeting.com^
+||mountainouspear.com^
+||movemeal.com^
+||mowfruit.com^
+||muddledaftermath.com^
+||muddledmemory.com^
+||mundanenail.com^
+||mundanepollution.com^
+||murkymeeting.com^
+||muteknife.com^
+||mutemailbox.com^
+||muterange.com^
+||mysteriousmonth.com^
+||naivestatement.com^
+||nappyattack.com^
+||nappyneck.com^
+||neatshade.com^
+||nebulousripple.com^
+||necessarywax.com^
+||needlessnorth.com^
+||needyneedle.com^
+||negotiatetime.com^
+||neighborlywatch.com^
+||nervoussummer.com^
+||niftyhospital.com^
+||niftyjelly.com^
+||nightwound.com^
+||noiselessplough.com^
+||nonchalantnerve.com^
+||nondescriptcrowd.com^
+||nondescriptnote.com^
+||nondescriptsmile.com^
+||nondescriptstocking.com^
+||nostalgicknot.com^
+||nostalgicneed.com^
+||nothingmethod.com^
+||nothingunit.com^
+||nulldiscussion.com^
+||nullnorth.com^
+||numberlessring.com^
+||numerousnest.com^
+||nutritiousbean.com^
+||nuttyorganization.com^
+||oafishobservation.com^
+||obscenesidewalk.com^
+||observantice.com^
+||oldfashionedoffer.com^
+||omniscientfeeling.com^
+||omniscientspark.com^
+||operationchicken.com^
+||operationnail.com^
+||opinionsurprise.com^
+||oppositeoperation.com^
+||optimallimit.com^
+||orangeoperation.com^
+||organizationdogs.com^
+||orientedargument.com^
+||orionember.com^
+||outstandingsnails.com^
+||ovalweek.com^
+||overconfidentfood.com^
+||overratedchalk.com^
+||owlsr.us^
+||paddleangle.com^
+||pailcrime.com^
+||pailpatch.com^
+||painstakingpickle.com^
+||paintpear.com^
+||paintplantation.com^
+||paleleaf.com^
+||pamelarandom.com^
+||panickycurtain.com^
+||panickypancake.com^
+||panoramicbutter.com^
+||panoramicplane.com^
+||paradoxfactor.com^
+||parallelbulb.com^
+||parcelcreature.com^
+||parchedangle.com^
+||parchedsofa.com^
+||pardonpopular.com^
+||parentpicture.com^
+||parsimoniouspolice.com^
+||partplanes.com^
+||passengerpage.com^
+||passivepolo.com^
+||pastcabbage.com^
+||pastepot.com^
+||pastoralcorn.com^
+||pastoralroad.com^
+||peacefullimit.com^
+||pedromister.com^
+||pedropanther.com^
+||pegasusplate.com^
+||penspade.com^
+||perceivequarter.com^
+||periodicpocket.com^
+||perpetualpail.com^
+||persuadesock.com^
+||persuadesupport.com^
+||petiteumbrella.com^
+||photographpan.com^
+||physicalbikes.com^
+||piespower.com^
+||pietexture.com^
+||pigspie.com^
+||pinpointpotato.com^
+||piquantpigs.com^
+||piquantprice.com^
+||piquantstove.com^
+||pizzasnut.com^
+||placeframe.com^
+||placidactivity.com^
+||placidperson.com^
+||plainplayground.com^
+||plainrequest.com^
+||planebasin.com^
+||planesorder.com^
+||plantdigestion.com^
+||plantpotato.com^
+||plantrelation.com^
+||platescarecrow.com^
+||plausiblecable.com^
+||pleasantpump.com^
+||plotparent.com^
+||plotrabbit.com^
+||pluckypocket.com^
+||pocketfaucet.com^
+||podiumpresto.com^
+||poeticpackage.com^
+||pointdigestion.com^
+||pointlesshour.com^
+||pointlesspocket.com^
+||pointlessprofit.com^
+||pointlessrifle.com^
+||poisedpig.com^
+||polarismagnet.com^
+||politegoldfish.com^
+||politeplanes.com^
+||politicalporter.com^
+||popcornfood.com^
+||popplantation.com^
+||possessivebucket.com^
+||possibleboats.com^
+||possiblepencil.com^
+||potatoinvention.com^
+||powderjourney.com^
+||powderprofit.com^
+||powerfulcopper.com^
+||preciouseffect.com^
+||preciousyoke.com^
+||predictplate.com^
+||prefixpatriot.com^
+||prepareplanes.com^
+||presetrabbits.com^
+||presssensor.com^
+||previousplayground.com^
+||previouspotato.com^
+||priceypies.com^
+||pricklydebt.com^
+||pricklyjourney.com^
+||pricklypies.com^
+||pricklyplastic.com^
+||pricklypollution.com^
+||printerplasma.com^
+||probablepartner.com^
+||processplantation.com^
+||producecopy.com^
+||producepickle.com^
+||productivepear.com^
+||profitrumour.com^
+||profusesupport.com^
+||promopassage.com^
+||propertypotato.com^
+||protestcopy.com^
+||proudprose.com^
+||psychedelicarithmetic.com^
+||psychedelicchess.com^
+||pubimgs.com^
+||publicsofa.com^
+||puffyloss.com^
+||puffypaste.com^
+||puffypull.com^
+||puffypurpose.com^
+||pumpedpancake.com^
+||pumpedpurpose.com^
+||punyplant.com^
+||purchasesuggestion.com^
+||purposepipe.com^
+||pushypipe.com^
+||puzzlingproperty.com^
+||q20jqurls0y7gk8.info^
+||quacksquirrel.com^
+||quaintborder.com^
+||quaintcan.com^
+||quantumlagoon.com^
+||quarterbean.com^
+||questionableobservation.com^
+||quicksandear.com^
+||quietknowledge.com^
+||quillkick.com^
+||quirkysugar.com^
+||quixoticnebula.com^
+||quizzicalpartner.com^
+||quizzicalzephyr.com^
+||rabbitbreath.com^
+||rabbitrifle.com^
+||radiantcanopy.com^
+||radiateprose.com^
+||railwayrainstorm.com^
+||railwayreason.com^
+||raintwig.com^
+||rainydirt.com^
+||rainyhand.com^
+||rainyrule.com^
+||rainystretch.com^
+||rainyzinc.com^
+||rambunctiousflock.com^
+||rambunctiousvoyage.com^
+||rampantwork.com^
+||rangecake.com^
+||rangeplayground.com^
+||rapidkittens.com^
+||raresummer.com^
+||raspyteam.com^
+||readgoldfish.com^
+||readingguilt.com^
+||readymoon.com^
+||readysnails.com^
+||realizedoor.com^
+||realizerecess.com^
+||realizevacation.com^
+||rebelhen.com^
+||rebelsubway.com^
+||rebelswing.com^
+||receiptcent.com^
+||receptivebranch.com^
+||receptiveink.com^
+||receptivereaction.com^
+||recessrain.com^
+||recommenddoor.com^
+||reconditeprison.com^
+||reconditerake.com^
+||reconditerespect.com^
+||recordbutter.com^
+||referdriving.com^
+||reflectivereward.com^
+||regularplants.com^
+||regulatesleet.com^
+||rehabilitatereason.com^
+||rejectfairies.com^
+||relationrest.com^
+||rememberdiscussion.com^
+||repeatsweater.com^
+||replaceroute.com^
+||representativebat.com^
+||representativeray.com^
+||resolutekey.com^
+||resonantbrush.com^
+||resonantrock.com^
+||respectrain.com^
+||restrainstorm.com^
+||restructureinvention.com^
+||retrievemint.com^
+||rhetoricalactivity.com^
+||rhetoricalloss.com^
+||rhetoricaltoes.com^
+||rhetoricalveil.com^
+||rhymezebra.com^
+||rhythmmoney.com^
+||rhythmrule.com^
+||richreceipt.com^
+||richstring.com^
+||righteouscrayon.com^
+||rightfulfall.com^
+||rigidrobin.com^
+||ringplant.com^
+||ringplayground.com^
+||ringsrecord.com^
+||ritzykey.com^
+||ritzyrepresentative.com^
+||ritzyveil.com^
+||robustbelieve.com^
+||rodeopolice.com^
+||rollconnection.com^
+||roofrelation.com^
+||roomyreading.com^
+||roseincome.com^
+||rottenray.com^
+||roughroll.com^
+||ruddycast.com^
+||ruddywash.com^
+||ruralrobin.com^
+||rusticprice.com^
+||ruthlessdegree.com^
+||ruthlessmilk.com^
+||ruthlessrobin.com^
+||sableloss.com^
+||sablesmile.com^
+||sablesong.com^
+||sadloaf.com^
+||saffronrefuge.com^
+||sailsuit.com^
+||samesticks.com^
+||samestretch.com^
+||samplesamba.com^
+||satisfycork.com^
+||satisfyingshirt.com^
+||satisfyingshow.com^
+||satisfyingspark.com^
+||savoryorange.com^
+||savorystructure.com^
+||saysidewalk.com^
+||scarcecard.com^
+||scarcesign.com^
+||scarcesurprise.com^
+||scarecrowslip.com^
+||scarecrowslope.com^
+||scaredcomfort.com^
+||scaredsidewalk.com^
+||scaredsnake.com^
+||scaredsnakes.com^
+||scaredsong.com^
+||scaredstomach.com^
+||scaredstory.com^
+||scaredswing.com^
+||scarefowl.com^
+||scarfsmash.com^
+||scarfthought.com^
+||scatteredheat.com^
+||scatteredquiver.com^
+||scatteredstream.com^
+||scientificshirt.com^
+||scientificsneeze.com^
+||scintillatingscissors.com^
+||scintillatingsilver.com^
+||scintillatingspace.com^
+||scissorsstatement.com^
+||scrapesleep.com^
+||scratchsofa.com^
+||screechingfurniture.com^
+||screechingslip.com^
+||screechingstocking.com^
+||screechingstove.com^
+||scribbleson.com^
+||scribblestring.com^
+||scrollservice.com^
+||scrubswim.com^
+||seashoresociety.com^
+||seashoreturn.com^
+||seatsmoke.com^
+||secondhandfall.com^
+||secretivecub.com^
+||secretivesheep.com^
+||secretivestick.com^
+||secretspiders.com^
+||secretturtle.com^
+||sedatebun.com^
+||seedscissors.com^
+||selectionship.com^
+||selectivesummer.com^
+||selfishsea.com^
+||selfishsnake.com^
+||sensorsmile.com^
+||separateshow.com^
+||separatesilver.com^
+||separatesort.com^
+||seraphichorizon.com^
+||serendipityecho.com^
+||serenecascade.com^
+||serioussuit.com^
+||serpentshampoo.com^
+||settleshoes.com^
+||shadeship.com^
+||shaggytank.com^
+||shakegoldfish.com^
+||shakesuggestion.com^
+||shakyseat.com^
+||shakysurprise.com^
+||shakytaste.com^
+||shallowblade.com^
+||shallowsmile.com^
+||shamerain.com^
+||shapecomb.com^
+||sharppatch.com^
+||sheltercellar.com^
+||shesubscriptions.com^
+||shinesavage.com^
+||shinestuart.com^
+||shirtsidewalk.com^
+||shiveringspot.com^
+||shiverscissors.com^
+||shockinggrass.com^
+||shockingship.com^
+||shopbreakfast.com^
+||showsteel.com^
+||showstranger.com^
+||shrillspoon.com^
+||shutseashore.com^
+||shyseed.com^
+||sickflock.com^
+||sicksmash.com^
+||silentcredit.com^
+||silentwrench.com^
+||siliconslow.com^
+||silkysoda.com^
+||silkysquirrel.com^
+||sillyscrew.com^
+||simplesidewalk.com^
+||simplisticstem.com^
+||simulateswing.com^
+||sincerebuffalo.com^
+||sinceresubstance.com^
+||singroot.com^
+||sinkbooks.com^
+||sixauthority.com^
+||sixscissors.com^
+||sizesidewalk.com^
+||skillfuldrop.com^
+||skillfulsock.com^
+||skisofa.com^
+||slaysweater.com^
+||sleepcartoon.com^
+||slimopinion.com^
+||slimyscarf.com^
+||slimyseashore.com^
+||slinksuggestion.com^
+||slipperysack.com^
+||slopesoap.com^
+||sloppycalculator.com^
+||sloppyearthquake.com^
+||smallbeginner.com^
+||smashquartz.com^
+||smashshoe.com^
+||smashsurprise.com^
+||smilewound.com^
+||smilingcattle.com^
+||smilingshake.com^
+||smilingswim.com^
+||smilingwaves.com^
+||smoggysnakes.com^
+||smoggysongs.com^
+||smoggystation.com^
+||snailsengine.com^
+||snakemineral.com^
+||snakeslang.com^
+||snakesshop.com^
+||snakesstone.com^
+||sneakwind.com^
+||sneakystew.com^
+||snoresmile.com^
+||soaprange.com^
+||soapsmoke.com^
+||soggysponge.com^
+||soggyzoo.com^
+||solarislabyrinth.com^
+||somberattack.com^
+||somberscarecrow.com^
+||sombersea.com^
+||sombersquirrel.com^
+||sombersticks.com^
+||somberstructure.com^
+||sombersurprise.com^
+||songssmoke.com^
+||songsterritory.com^
+||sootheside.com^
+||soothingglade.com^
+||sophisticatedstory.com^
+||sophisticatedstove.com^
+||sordidsmile.com^
+||sordidstation.com^
+||soresidewalk.com^
+||soresneeze.com^
+||sorethunder.com^
+||soretrain.com^
+||sortsail.com^
+||sortstructure.com^
+||sortsummer.com^
+||soundstocking.com^
+||sowlettuce.com^
+||spadelocket.com^
+||sparklesleet.com^
+||sparklingnumber.com^
+||sparklingshelf.com^
+||speakgrandfather.com^
+||specialscissors.com^
+||specialsnake.com^
+||specialstatement.com^
+||spectacularstamp.com^
+||spellmist.com^
+||spellsalsa.com^
+||spendpest.com^
+||spidersboats.com^
+||spiffymachine.com^
+||spirebaboon.com^
+||spongesalt.com^
+||spookyexchange.com^
+||spookyskate.com^
+||spookysleet.com^
+||spookyslope.com^
+||spoonsilk.com^
+||spotlessstamp.com^
+||spotstring.com^
+||spottednoise.com^
+||spottedsmile.com^
+||spottedsnow.com^
+||springaftermath.com^
+||springsister.com^
+||springsnails.com^
+||spuriousair.com^
+||spuriousbase.com^
+||spurioussquirrel.com^
+||spurioussteam.com^
+||spuriousstranger.com^
+||spysubstance.com^
+||squalidscrew.com^
+||squashfriction.com^
+||squeakzinc.com^
+||squealingturn.com^
+||squeamishspot.com^
+||squirrelhands.com^
+||stakingbasket.com^
+||stakingscrew.com^
+||stakingshock.com^
+||stakingslope.com^
+||stakingsmile.com^
+||staleseat.com^
+||staleshow.com^
+||stalesummer.com^
+||stampknot.com^
+||standingnest.com^
+||standingsack.com^
+||standtrouble.com^
+||stat.pet^
+||statementsweater.com^
+||statuesquebrush.com^
+||stayaction.com^
+||steadfastseat.com^
+||steadfastsound.com^
+||steadfastsystem.com^
+||steadycopper.com^
+||stealsteel.com^
+||steepscale.com^
+||steepsister.com^
+||steepsquirrel.com^
+||stepcattle.com^
+||stepplane.com^
+||stereoproxy.com^
+||stereotypedclub.com^
+||stereotypedsugar.com^
+||stewedge.com^
+||stewspiders.com^
+||stickssheep.com^
+||stickysheet.com^
+||stiffgame.com^
+||stiffstem.com^
+||stimulatingsneeze.com^
+||stingsquirrel.com^
+||stingycrush.com^
+||stingyshoe.com^
+||stingyspoon.com^
+||stockingsleet.com^
+||stockingsneeze.com^
+||stomachscience.com^
+||stopstomach.com^
+||storescissors.com^
+||storeslope.com^
+||storesurprise.com^
+||stormyachiever.com^
+||stormyfold.com^
+||stoveseashore.com^
+||straightnest.com^
+||strangeclocks.com^
+||strangersponge.com^
+||strangesink.com^
+||streetsort.com^
+||stretchsister.com^
+||stretchsneeze.com^
+||stretchsquirrel.com^
+||stringsmile.com^
+||stripedbat.com^
+||stripedburst.com^
+||strivesidewalk.com^
+||strivesquirrel.com^
+||strokesystem.com^
+||structurerod.com^
+||stupendousselection.com^
+||stupendoussleet.com^
+||stupendoussnow.com^
+||stupidscene.com^
+||stupidsnake.com^
+||sturdysnail.com^
+||subletyoke.com^
+||subsequentsand.com^
+||subsequentstew.com^
+||subsequentswim.com^
+||substantialcarpenter.com^
+||substantialgrade.com^
+||substantialstraw.com^
+||successfulscent.com^
+||suddensidewalk.com^
+||suddensnake.com^
+||suddensoda.com^
+||suddenstructure.com^
+||sugarcurtain.com^
+||sugarfriction.com^
+||suggestionbridge.com^
+||sulkybutter.com^
+||sulkycook.com^
+||summerobject.com^
+||superficialeyes.com^
+||superficialspring.com^
+||superficialsquare.com^
+||supervisegoldfish.com^
+||supportwaves.com^
+||suspectmark.com^
+||suspendseed.com^
+||swankysquare.com^
+||sweepsheep.com^
+||sweetslope.com^
+||swellstocking.com^
+||swelteringsleep.com^
+||swelteringsmile.com^
+||swimslope.com^
+||swingslip.com^
+||swordgoose.com^
+||symbolizebeast.com^
+||synonymousrule.com^
+||synonymoussticks.com^
+||synthesizespoon.com^
+||systemizecoat.com^
+||talentedsteel.com^
+||talltouch.com^
+||tangibleteam.com^
+||tangyamount.com^
+||tangycover.com^
+||tarttendency.com^
+||tastefulsongs.com^
+||tastelesstoes.com^
+||tastelesstrees.com^
+||tastelesstrucks.com^
+||tastesnake.com^
+||tawdryson.com^
+||tdzvm.pw^
+||tearfulglass.com^
+||tediousbear.com^
+||tediousticket.com^
+||tedioustooth.com^
+||teenytinycellar.com^
+||teenytinyshirt.com^
+||teenytinytongue.com^
+||teenyvolcano.com^
+||teethfan.com^
+||telephoneapparatus.com^
+||tempertrick.com^
+||tempttalk.com^
+||temptteam.com^
+||tendersugar.com^
+||tendertest.com^
+||terriblethumb.com^
+||terrificgoose.com^
+||terrifictooth.com^
+||testadmiral.com^
+||testedtouch.com^
+||texturetrick.com^
+||therapeuticcars.com^
+||thickticket.com^
+||thicktrucks.com^
+||thingsafterthought.com^
+||thingstaste.com^
+||thinkablefloor.com^
+||thinkablerice.com^
+||thinkabletrick.com^
+||thinkitten.com^
+||thirdrespect.com^
+||thirstylettuce.com^
+||thirstyswing.com^
+||thirstytwig.com^
+||thomastorch.com^
+||thoughtlessknot.com^
+||threechurch.com^
+||threetruck.com^
+||thrivecover.com^
+||throattrees.com^
+||thunderingrose.com^
+||thunderingtendency.com^
+||ticketaunt.com^
+||ticklesign.com^
+||tidymitten.com^
+||tightpowder.com^
+||timeterritory.com^
+||timetwig.com^
+||tinytendency.com^
+||tiredthroat.com^
+||tiresomethunder.com^
+||toecircle.com^
+||toedrawer.com^
+||toothbrushnote.com^
+||toothpasterabbits.com^
+||topichawaii.com^
+||torpidtongue.com^
+||torpidtoothpaste.com^
+||toweringrun.com^
+||tradetooth.com^
+||tranquilamulet.com^
+||tranquilcanyon.com^
+||tranquilside.com^
+||translateoatmeal.com^
+||trappush.com^
+||trapteaching.com^
+||traytouch.com^
+||treadbun.com^
+||tremendousearthquake.com^
+||tremendousplastic.com^
+||tremendoustime.com^
+||tremendoustreatment.com^
+||trickycelery.com^
+||tritebadge.com^
+||tritethunder.com^
+||troubledtail.com^
+||troubleshade.com^
+||truckstomatoes.com^
+||truculentrate.com^
+||tumblebirds.com^
+||tumbleicicle.com^
+||tutorthing.com^
+||twistloss.com^
+||twistsweater.com^
+||typicalairplane.com^
+||typicalteeth.com^
+||tzwaw.pw^
+||ubiquitousyard.com^
+||ultraoranges.com^
+||unablehope.com^
+||unaccountablecreator.com^
+||unaccountablepie.com^
+||unadvisedengine.com^
+||unarmedindustry.com^
+||unbecominghall.com^
+||unbecominglamp.com^
+||uncoveredcircle.com^
+||uncoveredexpert.com^
+||understoodocean.com^
+||unequalbrake.com^
+||unequaltrail.com^
+||unevenstring.com^
+||unifyaddition.com^
+||uninterestedquarter.com^
+||unknowncrate.com^
+||unknowntray.com^
+||unnaturalcaption.com^
+||untidyquestion.com^
+||untidyrice.com^
+||unusedquestion.com^
+||unusedstone.com^
+||unusualtitle.com^
+||unwieldyhealth.com^
+||unwieldyimpulse.com^
+||unwieldyplastic.com^
+||unwrittenspot.com^
+||uppitytime.com^
+||usedexample.com^
+||uselesslumber.com^
+||uttermosthobbies.com^
+||vanfireworks.com^
+||vanishmemory.com^
+||velvetnova.com^
+||vengefulgrass.com^
+||venomousvessel.com^
+||venusgloria.com^
+||verdantanswer.com^
+||verifyvegetable.com^
+||verseballs.com^
+||vibranthaven.com^
+||vibrantsundown.com^
+||victoriousrequest.com^
+||violetreading.com^
+||virgoplato.com^
+||virtualvincent.com^
+||vivaciousveil.com^
+||voicelessvein.com^
+||voicevegetable.com^
+||volatileprofit.com^
+||volatilerainstorm.com^
+||volatilevessel.com^
+||voraciousgrip.com^
+||voyagepotato.com^
+||vq1qi.pw^
+||waggishpig.com^
+||wakefulcook.com^
+||wantingwindow.com^
+||warmafterthought.com^
+||warmquiver.com^
+||warnwing.com^
+||waryfog.com^
+||washbanana.com^
+||wateryvan.com^
+||waterywave.com^
+||wearbasin.com^
+||wearywater.com^
+||wellgroomedapparel.com^
+||wellgroomedbat.com^
+||wellgroomedhydrant.com^
+||wellmadefrog.com^
+||whimsicalgrove.com^
+||whineattempt.com^
+||whirlwealth.com^
+||whiskyqueue.com^
+||whisperingbadge.com^
+||whisperingcascade.com^
+||whisperingcrib.com^
+||whisperingsummit.com^
+||whispermeeting.com^
+||wigglygeese.com^
+||wigglyindustry.com^
+||wildcommittee.com^
+||wildernesscamera.com^
+||wirecomic.com^
+||wirypaste.com^
+||wistfulflight.com^
+||wittypopcorn.com^
+||womanear.com^
+||workableachiever.com^
+||workoperation.com^
+||worriednumber.com^
+||wrapstretch.com^
+||wreckvolcano.com^
+||writewealth.com^
+||wrongpotato.com^
+||wryfinger.com^
+||wtaccesscontrol.com^
+||xovq5nemr.com^
+||yamstamp.com^
+||yieldingwoman.com^
+||youngmarble.com^
+||youthfulnoise.com^
+||zbwp6ghm.com^
+||zealousfield.com^
+||zephyrlabyrinth.com^
+||zestycrime.com^
+||zestywire.com^
+||zipperxray.com^
+||zippywind.com^
+||zlp6s.pw^
+
+! *** easylist:easyprivacy/easyprivacy_trackingservers_notifications.txt ***
+||accengage.net^$third-party
+||actirinius.com^$third-party
+||aimtell.com^$third-party
+||alertme.news^$third-party
+||amazonaws.com/cdn.aimtell.com/
+||aswpsdkeu.com^$third-party
+||aswpsdkus.com^
+||bildirt.com^$third-party
+||bosspush.com^$third-party
+||browserpusher.com^$third-party
+||cdn-sitegainer.com^$third-party
+||cleverpush.com^$third-party
+||copush.com^$third-party
+||cracataum.com^$third-party
+||danorenius.com^$third-party
+||dengage.com^$third-party
+||edrone.me^$third-party
+||feedify.net^$third-party
+||feraciumus.com^$third-party
+||fernomius.com^$third-party
+||fkondate.com^$third-party
+||foxpush.com^$third-party
+||foxpush.net^$third-party
+||getback.ch^$third-party
+||getnotix.co^$third-party
+||getpush.net^$third-party
+||getpushmonkey.com^$third-party
+||gravitec.net^$third-party
+||heroesdom.com^$third-party
+||hrbpark.bid^$third-party
+||jeeng.com^$third-party
+||kattepush.com^$third-party
+||letreach.com^$third-party
+||lifterpopup.com^$third-party
+||master-push.com^$third-party
+||master-push.net^$third-party
+||misrepush.com^$third-party
+||moengage.com^$third-party
+||mypush.online^$third-party
+||najva.com^$third-party
+||nativesubscribe.pro^$third-party
+||netmera-web.com^$third-party
+||notifadz.com^$third-party
+||notify.solutions^$third-party
+||notiks.io^$third-party
+||notiksio.com^$third-party
+||notix.io^$third-party
+||olgtex.com^$third-party
+||on-push.com^$third-party
+||onepush.app^$third-party
+||outfunnel.com^$third-party
+||pn.vg^$third-party
+||provesrc.com^$third-party
+||psh.one^$third-party
+||push-ad.com^$third-party
+||push-free.com^$third-party
+||push-house.net^$third-party
+||push.delivery^$third-party
+||push7.jp^$third-party
+||pushalert.co^$third-party
+||pushbird.com^$third-party
+||pushbullet.com^$third-party
+||pushengage.com^$third-party
+||pushible.com^$third-party
+||pushify.com^$third-party
+||pushmaster-cdn.xyz^
+||pushowl.com^$third-party
+||pushprofit.ru^$third-party
+||pushpushgo.com^$third-party
+||pushwize.com^$third-party
+||pushwoosh.com^$third-party
+||reprocautious.com^$third-party
+||sbi-push.com^$third-party
+||sendpulse.com^$third-party
+||shroughtened.com^$third-party
+||sm-epsilon.com^$third-party
+||snd.tc^$third-party
+||subscribers.com^$third-party
+||truenat.bid^$third-party
+||truepush.com^$third-party
+||unative.com^$third-party
+||urbanairship.com^
+||viapush.com^$third-party
+||webpu.sh^$third-party
+||webpushr.com^$third-party
+||webpushs.com^$third-party
+||whiteclick.biz^$third-party
+||wonderpush.com^$third-party
+||wwclickserv.club^$third-party
+||wwopenclick.space^
+||xtremepush.com^$third-party
+
+! *** easylist:easyprivacy/easyprivacy_trackingservers.txt ***
+||google-analytics-cn.com^
+||googleoptimize-cn.com^
+||googletagmanager-cn.com^
+! IP tracking
+||0.0.0.1^
+! Bright Data https://github.com/AdguardTeam/AdGuardSDNSFilter/issues/1580
+||brdtest.com^
+||brdtnet.com^
+||brightdata.com^$third-party
+||brightdata.de^$third-party
+||luminati.io^
+||perr.l-agent.me^
+||perr.l-err.biz^
+! Block ping
+$ping,third-party
+! https://www.opensubtitles.org/
+$third-party,xmlhttprequest,domain=opensubtitles.org
+! Oracle
+||addthis.com^$third-party
+||addthiscdn.com^$domain=~addthis.com
+||addthisedge.com^$third-party
+! revprotect
+||pphwrevr.com^$third-party
+||protectcrev.com^$third-party
+||protectsubrev.com^$third-party
+||revcatch.com^$third-party
+||revprotect.com^$third-party
+! Marketo email tracking domains https://github.com/easylist/easylist/issues/6475
+||mkto-*.com^$third-party
+! Fingerprinting
+||breaktime.com.tw^$third-party
+||brightedge.com^$third-party
+||citrusad.net^$third-party
+||clickguardian.app^$third-party
+||clickyab.com^$third-party
+||fpjscdn.net^
+||guoshipartners.com^$third-party
+||hostpush.info^$third-party
+||ismatlab.com^$third-party
+||klangoo.com^$third-party
+||p30rank.ir^$third-party
+||ppcprotect.com^$third-party
+||push4site.com^$third-party
+||ravelin.net^$third-party
+||sabavision.com^$third-party
+||simility.com^$third-party
+||spideraf.com^$third-party
+!-----------------International third-party tracking domains-----------------!
+! *** easylist:easyprivacy/easyprivacy_trackingservers_international.txt ***
+||123-counter.de^$third-party
+||193.197.158.209^$third-party,domain=~statistik.lubw.baden-wuerttemberg.de.ip
+||212.95.32.75^$third-party,domain=~ipcounter.de.ip
+||24log.de^$third-party
+||3ng6p6m0.de^$third-party
+||4stats.de^$third-party
+||active-tracking.de^$third-party
+||adc-serv.net^$third-party
+||adclear.net^$third-party
+||adcrowd.com^$third-party
+||admeira.ch^$third-party
+||adnz.co^$third-party
+||adquality.ch^$third-party
+||adtraxx.de^$third-party
+||adtriba.com^$third-party
+||amunx.de^$third-party
+||analytics.rechtslupe.org^
+||andyhoppe.com^$third-party
+||anormal-tracker.de^$third-party
+||area51.to^$third-party
+||asadcdn.com^$third-party
+||atsfi.de^$third-party
+||audiencemanager.de^$third-party
+||audienzz.ch^$third-party
+||avencio.de^$third-party
+||backlink-test.de^$third-party
+||backlinkdino.de^$third-party
+||bekannt-im-web.de^$third-party
+||belboon.de^$third-party
+||beliebtestewebseite.de^$third-party
+||besucherstats.de^$third-party
+||besucherzaehler-counter.de^$third-party
+||besucherzaehler-homepage.de^$third-party
+||besucherzaehler-zugriffszaehler.de^$third-party
+||besucherzaehler.org^$third-party
+||besucherzahlen.com^$third-party
+||betarget.de^$third-party
+||bf-tools.net^$third-party
+||blacktri.com^$third-party
+||blog-o-rama.de^$third-party
+||blog-webkatalog.de^$third-party
+||blogcounter.com^$third-party
+||blogcounter.de^$third-party
+||bloggeramt.de^$third-party
+||bloggerei.de^$third-party
+||blogtraffic.de^$third-party
+||bluecounter.de^$third-party
+||bonitrust.de^$third-party
+||bonuscounter.de^$third-party
+||businessclick.ch^$third-party
+||checkeffect.at^$third-party
+||clickmap.ch^$third-party
+||content-garden.com^$third-party
+||contiamo.com^$third-party
+||count24.de^$third-party
+||countar.de^$third-party
+||counter-go.de^$third-party
+||counter-gratis.com^$third-party
+||counter-kostenlos.info^$third-party
+||counter-kostenlos.net^$third-party
+||counter-treff.de^$third-party
+||counter.de^$third-party
+||counter27.ch^$third-party
+||countercity.net^$third-party
+||counterlevel.de^$third-party
+||counteronline.de^$third-party
+||counterseite.de^$third-party
+||counterserver.de^$third-party
+||counterstation.de^$third-party
+||counterstatistik.de^$third-party
+||counthis.com^$third-party
+||counti.de^$third-party
+||countino.de^$third-party
+||countit.ch^$third-party
+||countnow.de^$third-party
+||counto.de^$third-party
+||countok.de^$third-party
+||countyou.de^$third-party
+||cptrack.de^$third-party
+||cya1t.net^$third-party
+||dcmn.io^$third-party
+||df-srv.de^$third-party
+||die-rankliste.com^$third-party
+||digidip.net^$third-party
+||directcounter.de^$third-party
+||divolution.com^$third-party
+||dl8.me^$third-party
+||dreamcounter.de^$third-party
+||eanalyzer.de^$third-party
+||easytracking.de^$third-party
+||econda-monitor.de^$third-party
+||edococounter.de^$third-party
+||edtp.de^$third-party
+||emetriq.de^$third-party
+||etracker.de^$third-party
+||etrust.eu^$third-party
+||euro-pr.eu^$third-party
+||eurocounter.com^$third-party
+||exapxl.de^$third-party
+||faibl.org^$third-party
+||fastcounter.de^$third-party
+||fixcounter.com^$third-party
+||free-counters.net^$third-party
+||freihit.de^$third-party
+||fremaks.net^$third-party
+||fun-hits.com^$third-party
+||gacela.eu^$third-party
+||generaltracking.de^$third-party
+||gezaehlt.de^$third-party
+||gft2.de^$third-party
+||giga-abs.de^$third-party
+||gostats.de^$third-party
+||gratis-besucherzaehler.de^$third-party
+||gratis-counter-gratis.de^$third-party
+||greatviews.de^$third-party
+||grfz.de^$third-party
+||haymarketstat.de^$third-party
+||healte.de^$third-party
+||hiddencounter.de^$third-party
+||hitmaster.de^$third-party
+||hot-count.com^$third-party
+||hotcounter.de^$third-party
+||hstrck.com^$third-party
+||htm1.ch^$third-party
+||hung.ch^$third-party
+||iivt.com^$third-party
+||imcht.net^$third-party
+||ingenioustech.biz^$third-party
+||intelliad.de^$third-party
+||interaktiv-net.de^$third-party
+||interhits.de^$third-party
+||ioam.de^$third-party
+||ipcount.net^$third-party
+||iyi.net^$third-party
+||kctag.net^$third-party
+||keytrack.de^$third-party
+||kostenlose-counter.com^$third-party
+||kupona.de^$third-party
+||lddt.de^$third-party
+||leserservice-tracking.de^$third-party
+||link-empfehlen24.de^$third-party
+||listrakbi.com^$third-party
+||lokalleads-cci.com^$third-party
+||losecounter.de^$third-party
+||lumitos.com^$third-party
+||mairdumont.com^$third-party
+||marketing-page.de^$third-party
+||matelso.de^$third-party
+||mateti.net^$third-party
+||md-nx.com^$third-party
+||meetrics.net^$third-party
+||mengis-linden.org^$third-party
+||metalyzer.com^$third-party
+||metrigo.com^$third-party,domain=~metrigo.de
+||microcounter.de^$third-party
+||mindtake.com^$third-party
+||motorpresse-statistik.de^$third-party
+||mps-gba.de^$third-party
+||mpwe.net^$third-party
+||mr-rank.de^$third-party
+||multicounter.de^$third-party
+||my-ranking.de^$third-party
+||my-stats.info^$third-party
+||netcounter.de^$third-party
+||netdebit-counter.de^$third-party
+||netupdater.info^$third-party
+||netzaehler.de^$third-party
+||netzstat.ch^$third-party
+||observare.de^$third-party
+||odoscope.cloud^$third-party
+||oewabox.at^$third-party
+||offer-go.com^$third-party
+||oghub.io^$third-party
+||optimierung-der-website.de^$third-party
+||ourstats.de^$third-party
+||page-hit.de^$third-party
+||pagerank-linkverzeichnis.de^$third-party
+||pagerank-online.eu^$third-party
+||pagerank-suchmaschine.de^$third-party
+||pc-agency24.de^$third-party
+||pimpmypr.de^$third-party
+||plexworks.de^$third-party
+||powercount.com^$third-party
+||ppro.de^$third-party
+||pr-chart.com^$third-party
+||pr-linktausch.de^$third-party
+||pr-sunshine.de^$third-party
+||prnetwork.de^$third-party
+||productsup.com^$third-party
+||prudsys-rde.de^$third-party
+||ptadsrv.de^$third-party
+||rank4all.eu^$third-party
+||rankchamp.de^$third-party
+||ranking-charts.de^$third-party
+||ranking-counter.de^$third-party
+||ranking-hits.de^$third-party
+||ranking-links.de^$third-party
+||redretarget.com^$third-party
+||refinedads.com^$third-party
+||research.de.com^$third-party
+||reshin.de^$third-party
+||retailads.net^$third-party
+||rightstats.com^$third-party
+||royalcount.de^$third-party
+||scriptil.com^$third-party
+||scw.systems^$third-party
+||sedotracker.de^$third-party
+||seitwert.de^$third-party
+||selfcampaign.com^$third-party
+||semtracker.de^$third-party
+||sensic.net^$third-party
+||sitealyse.de^$third-party
+||sitebro.de^$third-party
+||slogantrend.de^$third-party
+||smarketer.de^$third-party
+||space-link.de^$third-party
+||spacehits.net^$third-party
+||speedcount.de^$third-party
+||speedcounter.net^$third-party
+||speedtracker.de^$third-party
+||spelar.org^$third-party
+||spider-mich.com^$third-party
+||sponsorcounter.de^$third-party
+||spring-tns.net^$third-party
+||static-fra.de^*/targeting.js
+||static-fra.de^*/tracking.js
+||statistik-gallup.net^$third-party
+||stats.de^$third-party
+||stats4free.de^$third-party
+||stetic.com^$third-party
+||sunios.de^$third-party
+||t4ft.de^$third-party
+||tda.io^$third-party
+||technical-service.net^$third-party
+||tedo-stats.de^$third-party
+||tisoomi-services.com^$third-party
+||toplist100.org^$third-party
+||topstat.com^$third-party
+||tracdelight.com^$third-party
+||tracdelight.io^$third-party
+||trackboxx.info^$third-party
+||trafficmaxx.de^$third-party
+||trbo.com^$third-party
+||trendcounter.de^$third-party
+||trkme.net^$third-party
+||txt.eu^$third-party
+||undom.net^$third-party
+||uniconsent.com^$third-party
+||up-rank.com^$third-party
+||urstats.de^$third-party
+||usage.seibert-media.io^$third-party
+||usemaxserver.de^$third-party
+||viewar.org^$third-party
+||vinsight.de^$third-party
+||visitor-stats.de^$third-party
+||vtracy.de^$third-party
+||wcfbc.net^$third-party
+||webhits.de^$third-party
+||weblist.de^$third-party
+||webprospector.de^$third-party
+||websitesampling.com^$third-party
+||webtrekk-us.net^$third-party
+||webtrekk.de^$third-party
+||webtrekk.net^$third-party
+||webttracking.de^$third-party
+||wecount4u.com^$third-party
+||welt-der-links.de^$third-party
+||wipe.de^$~script,third-party
+||xcounter.ch^$third-party
+||xhit.com^$third-party
+||xplosion.de^$third-party
+||yoochoose.net^$third-party
+! French
+||123compteur.com^$third-party
+||24log.fr^$third-party
+||7x4.fr^$third-party
+||7x5.fr^$third-party
+||abcompteur.com^$third-party
+||admo.tv^$third-party
+||adsixmedia.fr^$third-party
+||adthletic.com^$third-party
+||affilizr.com^$third-party
+||air360tracker.net^$third-party
+||alkemics.com^$third-party
+||allo-media.net^$third-party
+||analytics-cdiscount.com^$third-party
+||antvoice.com^$third-party
+||atraxio.com^$third-party
+||audiencesquare.com^$third-party
+||carts.guru^$third-party
+||casualstat.com^$third-party
+||coll1onf.com^$third-party
+||compteur-fr.com^$third-party
+||compteur-gratuit.org^$third-party
+||compteur-visite.com^$third-party
+||compteur.com^$third-party
+||compteur.org^$third-party
+||count.fr^$third-party
+||countus.fr^$third-party
+||cshield.io^$third-party
+||d-bi.fr^$third-party
+||datado.me^$third-party
+||datadome.co^$third-party
+||do09.net^$third-party
+||early-birds.io^$third-party
+||edt02.net^$third-party
+||emailretargeting.com^$third-party
+||et-gv.fr^$third-party
+||ew3.io^$third-party
+||ezakus.net^$third-party
+||facil-iti.com^$third-party
+||ferank.fr^$third-party
+||first-id.fr^$third-party
+||fogl1onf.com^$third-party
+||galaxiemedia.fr^$third-party
+||geocompteur.com^$third-party
+||geovisite.ovh^$third-party
+||hunkal.com^$third-party
+||ivitrack.com^$third-party
+||kdata.fr^$third-party
+||lead-analytics.biz^$third-party
+||leadium.com^$third-party
+||libstat.com^$third-party
+||livestats.fr^$third-party
+||mastertag.effiliation.com^$third-party
+||mb-srv.com^$third-party
+||megavisites.com^$third-party
+||mgtmod01.com^$third-party
+||mmtro.com^$third-party
+||netquattro.com/stats/
+||netvigie.com^$third-party
+||non.li^$third-party
+||phywi.org^$third-party
+||pingclock.net^$third-party
+||reseau-pub.com^$third-party
+||rossel.tech^$third-party
+||semiocast.com^$third-party
+||shopimind.com^$third-party
+||sk1n.fr^$third-party
+||sk8t.fr^$third-party
+||stats.fr^$third-party
+||sync.tv^$third-party
+||tget.me^$third-party
+||tinyclues.com^$third-party
+||titag.com^$third-party
+||toc.io^$third-party
+||tracking.wlscripts.net^
+||uzerly.net^$third-party
+||vpn-access.site^$third-party
+||webcompteur.com^$third-party
+||winitout.com^$third-party
+||wysistat.com^$third-party
+||x-traceur.com^$third-party
+! Armenian
+||circle.am^$third-party
+! Azerbaijani
+||mobtop.az^$third-party
+! Belarusian
+||call-tracking.by^$third-party
+! Bulgarian
+||trafit.com^$third-party
+||tyxo.bg^$third-party
+! Chinese
+||180.76.2.18^$third-party,domain=~baidu.ip
+||365dmp.com^$third-party
+||50bang.org^$third-party
+||acs86.com^$third-party
+||ad7.com^$third-party
+||adop.cc^$third-party
+||adskom.com^$third-party
+||adxvip.com^$third-party
+||affclkr.com^$third-party
+||appier.net^$third-party
+||baifendian.com^$third-party
+||blog104.com^$third-party
+||blogtw.net^$third-party
+||cctvgb.com.cn^$third-party
+||cdnmaster.cn^$third-party
+||clicki.cn^$third-party
+||cnzz.net^$third-party
+||cr-nielsen.com^$third-party
+||ctags.cn^$third-party
+||datayi.cn^$third-party
+||emarbox.com^$third-party
+||fraudmetrix.cn^$third-party
+||ggxt.net^$third-party
+||giocdn.com^$third-party
+||gm99.com^$third-party
+||gostats.cn^$third-party
+||gridsum.com^$third-party
+||gridsumdissector.com^$third-party
+||growingio.com^$third-party
+||gtags.net^$third-party
+||he2d.com^$third-party
+||hnrmvq.com^$third-party
+||hotrank.com.tw^$third-party
+||hubpd.com^$third-party
+||ipinyou.com^$third-party
+||jiankongbao.com^$third-party
+||jpush.cn^$third-party
+||lndata.com^$third-party
+||mediav.com^$third-party
+||miaozhen.com^$third-party
+||mmstat.com^$third-party
+||oadz.com^$third-party
+||p0y.cn^$third-party
+||phpstat.com^$third-party
+||pixanalytics.com^$third-party
+||pp8.com^$third-party
+||prjslxhtx003.top^$third-party
+||pvmax.net^$third-party
+||qchannel03.cn^$third-party
+||qhupdate.com^$third-party
+||reachmax.cn^$third-party
+||sagetrc.com^$third-party
+||scupio.com^$third-party
+||sdqoi2d.com^$third-party
+||sjv.io^$third-party
+||ta.sbird.xyz^$third-party
+||tagmanager.cn^$third-party
+||tanx.com^$third-party
+||tenmax.io^$third-party
+||threatbook.cn^$third-party
+||tomonline-inc.com^$third-party
+||top-bloggers.com^$third-party
+||topsem.com^$third-party
+||tovery.net^$third-party
+||turtlemobile.com.tw^$third-party
+||twcouponcenter.com^$third-party
+||vamaker.com^$third-party
+||vdoing.com^$third-party
+||vm5apis.com^$third-party
+||webdissector.com^$third-party
+||xtgreat.com^$third-party
+||yigao.com^$third-party
+||youle55.com^$third-party
+||zampda.net^$third-party
+||ztcadx.com^$third-party
+! Croatian
+||dotmetrics.net^$third-party
+||xclaimwords.net^$third-party
+! Czech
+||affilbox.cz^$third-party
+||analights.com^$third-party
+||itop.cz^$third-party
+||lookit.cz^$third-party
+||monkeytracker.cz^$third-party
+||navrcholu.cz^$third-party
+||netagent.cz^$third-party
+||performax.cz^$third-party
+||pocitadlo.cz^$third-party
+||programmatic.cz^$third-party
+||semnicneposilejte.cz^$third-party
+||smartselling.cz^$third-party
+! Danish
+||agillic.eu^$third-party
+||andersenit.dk^$third-party
+||chart.dk^$third-party
+||digitaladvisor.dk^$third-party
+||euroads.dk^$third-party
+||gixmo.dk^$third-party
+||hitcount.dk^$third-party
+||infocollect.dk^$third-party
+||jubiitag.dk^$third-party
+||livecounter.dk^$third-party
+||livewebstats.dk^$third-party
+||ncom.dk^$third-party
+||netminers.dk^$third-party
+||netstats.dk^$third-party
+||parameter.dk^$third-party
+||peakcounter.dk^$third-party
+||telemetric.dk^$third-party
+||tns-gallup.dk^$third-party
+||zipstat.dk^$third-party
+! Dutch
+||active24stats.nl^$third-party
+||istats.nl^$third-party
+||metriweb.be^$third-party
+||mtrack.nl^$third-party
+||mystats.nl^$third-party
+||onlinesucces.nl^$third-party
+||stealth.nl^$third-party
+||svtrd.com^$third-party
+||synovite-scripts.com^$third-party
+||traffic4u.nl^$third-party
+! Estonian
+||counter.ok.ee^$third-party
+! Finnish
+||kavijaseuranta.fi^$third-party
+||leiki.com^$third-party
+||m-brain.fi^$third-party
+||netmonitor.fi^$third-party
+||stat.www.fi^$third-party
+||tracking*.euroads.fi^$third-party
+||vihtori-analytics.fi^$third-party
+! Georgian
+||tbcconnect.ge^$third-party
+! Greek
+||linkwi.se^$third-party
+! Hebrew
+||analyti.io^$third-party
+||enter-system.com^$third-party
+||erate.co.il^$third-party
+||fortvision.com^$third-party
+||lead.im^$third-party
+||mimgoal.com^$third-party
+! Hungarian
+||gpr.hu^$third-party
+||hirmatrix.hu^$third-party
+||mystat.hu^$third-party
+||p24.hu^$third-party
+! Icelandic
+||modernus.is^$third-party
+! Indonesian
+||analytic.rocks^$third-party
+||props.id^$third-party
+! Italian
+||0stats.com^$third-party
+||24log.it^$third-party
+||accessi.it^$third-party
+||buzzoole.com^$third-party
+||contatoreaccessi.com^$third-party
+||cpmktg.com^$third-party
+||ctusolution.com^$third-party
+||cuntador.com^$third-party
+||digital-metric.com^$third-party
+||distribeo.com^$third-party
+||freecounter.it^$third-party
+||freestat.ws^$third-party
+||freestats.biz^$third-party
+||freestats.net^$third-party
+||freestats.org^$third-party
+||freestats.tv^$third-party
+||freestats.ws^$third-party
+||geocontatore.com^$third-party
+||gm-it.consulting^$third-party
+||hiperstat.com^$third-party
+||hitcountersonline.com^$third-party
+||imetrix.it^$third-party
+||ipfrom.com^$third-party
+||italianadirectory.com^$third-party
+||keyxel.com^$third-party
+||laserstat.com^$third-party
+||mwstats.net^$third-party
+||mystat.it^$third-party
+||ninestats.com^$third-party
+||ntlab.org^$third-party
+||pagerankfree.com^$third-party
+||shinystat.it^$third-party
+||sibautomation.com^$third-party
+||spearad.video^$third-party
+||specialstat.com^$third-party
+||sphostserver.com^$third-party
+||statistiche-free.com^$third-party
+||statistiche.it^$third-party
+||statistiche.ws^$third-party
+||statistichegratis.net^$third-party
+||statsforever.com^$third-party
+||superstat.info^$third-party
+||tetigi.com^$third-party
+||thestat.net^$third-party
+||trackset.it^$third-party
+||trick17.it^$third-party
+||vivistats.com^$third-party
+||webads.eu^$third-party
+||webmeter.ws^$third-party
+||webmobile.ws^$third-party
+||websanalytic.com^$third-party
+||whoseesyou.com^$third-party
+||wstatslive.com^$third-party
+! Japanese
+||accaii.com^$third-party
+||accesstrade.net^$third-party
+||ad-fam.com^$third-party
+||ad-track.jp^$third-party
+||ad2iction.com^$third-party
+||adapf.com^$third-party
+||adgainersolutions.com^$third-party
+||adgocoo.com^$third-party
+||admatrix.jp^$third-party
+||adpon.jp^$third-party
+||adrange.net^$third-party
+||af-z.jp^$third-party
+||afi-b.com^$third-party
+||aid-ad.jp^$third-party
+||amoad.com^$third-party
+||analyticsip.net^$third-party
+||ar-x.site^$third-party
+||aspservice.jp^$third-party
+||bigmining.com^$third-party
+||blogranking.net^$third-party
+||canem-auris.com^$third-party
+||caprofitx.com^$third-party
+||catsys.jp^$third-party
+||cetlog.jp^$third-party
+||cheqzone.com^$third-party
+||cosmi.io^$third-party
+||d-markets.net^$third-party
+||d2-apps.net^$third-party
+||d2c.ne.jp^$third-party
+||dbfocus.jp^$third-party
+||deteql.net^$third-party
+||dmtag.jp^$third-party
+||docodoco.jp^$third-party
+||docomo-analytics.com^$third-party
+||e-click.jp^$third-party
+||e-kaiseki.com^$third-party
+||ebis.ne.jp^$third-party
+||ec-concier.com^$third-party
+||ec-optimizer.com^$third-party
+||eco-tag.jp^$third-party
+||eltex.co.jp^$third-party
+||enhance.co.jp^$third-party
+||f-counter.jp^$third-party
+||f-counter.net^$third-party
+||fspark-ap.com^$third-party
+||fw-ad.jp^$third-party
+||gacraft.jp^$third-party
+||geniee.jp^$third-party
+||genieessp.jp^$third-party
+||gmodmp.jp^$third-party
+||gmossp-sp.jp^$third-party
+||gsspcln.jp^$third-party
+||gyro-n.com^$third-party
+||h-cast.jp^$third-party
+||hitgraph.jp^$third-party
+||i-mobile.co.jp^$third-party
+||i2ad.jp^$third-party
+||i2i.jp^$third-party
+||iid-network.jp^$third-party
+||im-apps.net^$third-party
+||interactive-circle.jp^$third-party
+||iogous.com^$third-party
+||kaizenplatform.net^$third-party
+||letro.jp^$third-party
+||logly.co.jp^$third-party
+||macromill.com^$third-party
+||medipartner.jp^$third-party
+||mobadme.jp^$third-party
+||mobylog.jp^$third-party
+||moshimo.com^$third-party
+||msgs.jp^$third-party
+||omiki.com^$third-party
+||owldata.com^$third-party
+||pagoda56.com^$third-party
+||pdmp.jp^$third-party
+||performancefirst.jp^$third-party
+||polymorphicads.jp^$third-party
+||quant.jp^$third-party
+||r-ad.ne.jp^$script,third-party
+||rays-counter.com^$third-party
+||rentracks.jp^$third-party
+||research-artisan.com^$third-party
+||rtoaster.jp^$third-party
+||segs.jp^$third-party
+||sibulla.com^$third-party
+||smart-counter.net^$third-party
+||smartnews-ads.com^$third-party
+||speee-ad.jp^$third-party
+||talpa-analytics.com^$third-party
+||taxel.jp^$third-party
+||team-rec.jp^$third-party
+||tgknt.com^$third-party
+||thench.net^$third-party
+||thesmilingpencils.com^$third-party
+||trackfeed.com^$third-party
+||ukw.jp^$third-party
+||uncn.jp^$third-party
+||wonder-ma.com^$third-party
+||zerostats.com^$third-party
+||ziyu.net^$third-party
+! Korean
+||acrosspf.com^$third-party
+||adpick.co.kr^$third-party
+||adtive.com^$third-party
+||aicontents.net^$third-party
+||contentsfeed.com^$third-party
+||dawin.tv^$third-party
+||logger.co.kr^$third-party
+||oevery.com^$third-party
+||rainbownine.net^$third-party
+||smlog.co.kr^$third-party
+||tenping.kr^$third-party
+! Latvian
+||cms.lv^$third-party
+||mcloudglobal.com^$third-party
+||on-line.lv^$third-party
+||ppdb.pl^$third-party
+||puls.lv^$third-party
+||reitingi.lv^$third-party
+||statistika.lv^$third-party
+||top.lv^$third-party
+||topsite.lv^$third-party
+||webstatistika.lv^$third-party
+||wos.lv^$third-party
+! Lithuanian
+||dcdn.lt/g.js
+||easy.lv^$third-party
+||maxtraffic.com^$third-party
+||mxapis.com^$third-party
+||reitingas.lt^$third-party
+||stats.lt^$third-party
+||visits.lt^$third-party
+||www.hey.lt^$third-party
+! Norwegian
+||de17a.com^$third-party
+||trafikkfondet.no^$third-party
+||webstat.no^$third-party
+||xtractor.no^$third-party
+! Persian
+||amarfa.ir^$third-party
+||persianstat.com^$third-party
+||persianstat.ir^$third-party
+||tinystat.ir^$third-party
+||yektanet.com^$third-party
+! Polish
+||adschoom.com^$third-party
+||adstat.4u.pl^$third-party
+||caanalytics.com^$third-party
+||clickmatic.pl^$third-party
+||conversion.pl^$third-party
+||conversionlabs.net.pl^$third-party
+||dmdi.pl^$third-party
+||goprediction.com^$third-party
+||gostats.pl^$third-party
+||hub.com.pl^$third-party
+||i22lo.com^$third-party
+||inaudium.com^$third-party
+||inistrack.net^$third-party
+||legenhit.com^$third-party
+||naanalle.pl^
+||ngacm.com^$third-party
+||ngastatic.com^$third-party
+||nokaut.link^$third-party
+||nsaudience.pl^$third-party
+||refericon.pl^$third-party
+||rejestr.org^$third-party
+||sare25.com^$third-party
+||stat.4u.pl^$third-party
+||stat.pl^$third-party
+||tagcdn.com^$third-party
+||trafficscanner.pl^$third-party
+||volvelle.tech^$third-party
+||way2traffic.com^$third-party
+! Portuguese
+||ad5track.com^$third-party
+||bob-recs.com^$third-party
+||btg360.com.br^$third-party
+||clearsale.com.br^$third-party
+||dataunion.com.br^$third-party
+||denakop.com^$third-party
+||engageya.com^$third-party
+||enviou.com.br^$third-party
+||hariken.co^$third-party
+||lomadee.com^$third-party
+||marktest.pt^$third-party
+||percycle.com^$third-party
+||pmweb.com.br^$third-party
+||premiumads.com.br^$third-party
+||premiumprogrammatic.com.br^$third-party
+||retargeter.com.br^$third-party
+||sambaads.com^$third-party
+||shoptarget.com.br^$third-party
+||solucx.com.br^$third-party
+||tailtarget.com^$third-party
+||trugaze.io^$third-party
+||voxus.com.br^$third-party
+||widgets.solutions^$third-party
+! Romanian
+||2222.ro^$third-party
+||2parale.ro^$third-party
+||2performant.com^$third-party
+||aghtag.tech^$third-party
+||agorahtag.tech^$third-party
+||attr-2p.com^$third-party
+||best-top.ro^$third-party
+||gtop.ro^$third-party
+||hit100.ro^$third-party
+||pahtag.tech^$third-party
+||profitshare.ro^$third-party
+||retargeting.biz^$third-party
+||statistics.ro^$third-party
+||top-ro.ro^$third-party
+||wtstats.ro^$third-party
+||zontera.com^$third-party
+! Russian
+||109.169.66.161^$third-party,domain=~adult-site.ip
+||1dmp.io^$third-party
+||24log.ru^$third-party
+||24smi.info^$third-party
+||24smi.net^$third-party
+||a-counter.com.ua^$third-party
+||a-counter.kiev.ua^$third-party
+||adblockmetrics.ru^$third-party
+||admile.ru^$third-party
+||adsmediator.com^$third-party
+||adx.com.ru^$third-party
+||airlogs.ru^$third-party
+||announcement.ru^$third-party
+||apkonline.ru^$third-party
+||audsp.com^$third-party
+||avsplow.com^$third-party
+||bid.run^$third-party
+||bidderrtb.com^$third-party
+||botdetector.ru^$third-party
+||botscanner.com^$third-party
+||bumlam.com^$third-party
+||checkru.net^$third-party
+||cityua.net^$third-party
+||clubcollector.com^$third-party
+||cnstats.ru^$third-party
+||cpaevent.ru^$third-party
+||cszz.ru^$third-party
+||culturaltracking.ru^$third-party
+||dircont3.com^$third-party
+||directcrm.ru^$third-party
+||e-kuzbass.ru^$third-party
+||efatik.me^$third-party
+||exe.bid^$third-party
+||faststart.ru^$third-party
+||ftrack.ru^$third-party
+||gdeslon.ru^$third-party
+||get4click.ru^$third-party
+||giraff.io^$third-party
+||gnezdo.ru^$third-party
+||gostats.ru^$third-party
+||hitmir.ru^$third-party
+||hsdn.org^$third-party
+||idntfy.ru^$third-party
+||imrk.net^$third-party
+||infostroy.nnov.ru^$third-party
+||infox.sg^$third-party
+||inrd.ru^$third-party
+||instreamatic.com^$third-party
+||interakt.ru^$third-party
+||intergid.ru^$third-party
+||iryazan.ru^$third-party
+||kmindex.ru^$third-party
+||leadhit.ru^$third-party
+||leadslabpixels.net^$third-party
+||lentainform.com^$third-party
+||logua.com^$third-party
+||logxp.ru^$third-party
+||logz.ru^$third-party
+||lookmy.info^$third-party
+||lugansk-info.ru^$third-party
+||madnet.ru^$third-party
+||mediaplan.ru^$third-party
+||mediatoday.ru^$third-party
+||metrika-informer.com^$third-party
+||mobtop.com^$third-party
+||mokuz.ru^$third-party
+||more-data.ru^$third-party
+||musiccounter.ru^$third-party
+||mystat-in.net^$third-party
+||mytopf.com^$third-party
+||netlog.ru^$third-party
+||opentracking.ru^$third-party
+||otclick-adv.ru^$third-party
+||pladform.ru^$third-party
+||pmbox.biz^$third-party
+||proext.com^$third-party
+||quick-counter.net^$third-party
+||relap.io^$third-party
+||retag.xyz^$third-party
+||rnet.plus^$third-party
+||roistat.com^$third-party
+||ru.net^$third-party
+||rutarget.ru^$third-party
+||sarov.ws^$third-party
+||sas.com^$third-party
+||sblftg.com^$third-party
+||semantiqo.com^$third-party
+||sensor.org.ua^$third-party
+||seo-master.net^$third-party
+||site-submit.com.ua^$third-party
+||stat.media^$third-party
+||stat24.ru^$third-party
+||targetix.net^$third-party
+||tbex.ru^$third-party
+||tds.io^$third-party
+||teletarget.ru^$third-party
+||theactivetag.com^$third-party
+||tnative.ru^$third-party
+||tophitbit.com^$third-party
+||toptracker.ru^$third-party
+||ttrace.ru^$third-party
+||uarating.com^$third-party
+||ulclick.ru^$third-party
+||upravel.com^$third-party
+||uptolike.com^$third-party,domain=~uptolike.ru
+||utraff.com^$third-party
+||uzrating.com^$third-party
+||variti.net^$third-party
+||vidigital.ru^$third-party
+||vira.ru^$third-party
+||volgograd-info.ru^$third-party
+||vologda-info.ru^$third-party
+||warlog.ru^$third-party
+||web-visor.com^$third-party
+||webest.info^$third-party
+||webtalking.ru^$third-party
+||webturn.ru^$third-party
+||webvisor.com^$third-party
+||webvisor.ru^$third-party
+||wwgate.ru^$third-party
+||zero.kz^$third-party
+! Serbian
+! Slovak
+||algopine.com^$third-party
+||idot.cz^$third-party
+||pocitadlo.sk^$third-party
+||toplist.sk^$third-party
+! Spanish
+||24log.es^$third-party
+||agency360.io^$third-party
+||botize.com^$third-party
+||ccrtvi.com^$third-party
+||certifica.com^$third-party
+||contadordevisitas.es^$third-party
+||contadorgratis.com^$third-party
+||contadorgratis.es^$third-party
+||contadorvisitasgratis.com^$third-party
+||contadorweb.com^$third-party
+||delidatax.net^$third-party
+||easysol.net^$third-party
+||eresmas.net^$third-party
+||estadisticasgratis.com^$third-party
+||flags.es^$third-party
+||indigitall.com^$third-party
+||intrastats.com^$third-party
+||mabaya.com^$third-party
+||micodigo.com^$third-party
+||protecmedia.com^$third-party
+||socy.es^$third-party
+! Swedish
+||adsettings.com^$third-party
+||adten.eu^$third-party
+||adtr.io^$third-party
+||bonnieradnetwork.se^$third-party
+||brandmetrics.com^$third-party
+||citypaketet.se^$third-party
+||cssrvsync.com^$third-party
+||dep-x.com^$third-party
+||lwadm.com^$third-party
+||myvisitors.se^$third-party
+||prospecteye.com^$third-party
+||publish-int.se^$third-party
+||research-int.se^$third-party
+||sifomedia.se^$third-party
+||suntcontent.se^$third-party
+||tidningsnatet.se^$third-party
+||tns-sifo.se^$third-party
+||webserviceaward.com^$third-party
+||yieldbird.com^$third-party
+! Thai
+||d-stats.com^$third-party
+||tracker.stats.in.th^$third-party
+||truehits.net^$third-party
+||truehits3.gits.net.th^$third-party
+! Turkish
+||brainsland.com^$third-party
+||onlinewebstat.com^$third-party
+||realist.gen.tr^$third-party
+||sayyac.com^$third-party
+||sayyac.net^$third-party
+||sitetistik.com^$third-party
+||sortext.com^$third-party
+||tagon.co^$third-party
+||visilabs.net^$third-party
+||webservis.gen.tr^$third-party
+||webtemsilcisi.com^$third-party
+||zirve100.com^$third-party
+! Ukranian
+||getaim.info^$third-party
+||holder.com.ua^$third-party
+||mediatraffic.com.ua^$third-party
+||mycounter.com.ua^$third-party
+||mycounter.ua^$third-party
+||uapoisk.net^$third-party
+||weblog.com.ua^$third-party
+||zmctrack.net^$third-party
+||znctrack.net^$third-party
+! Vietnamese
+||adtimaserver.vn^$third-party
+||amcdn.vn^$third-party
+||ants.vn^$third-party
+||contineljs.com^$third-party
+||gostats.vn^$third-party
+!-----------------Third-party tracking services-----------------!
+! *** easylist:easyprivacy/easyprivacy_thirdparty.txt ***
+-client-tracking.goodgamestudios.com/
+||100widgets.com^$third-party
+||105app.com/report/?
+||1558334541.rsc.cdn77.org^
+||1worldsync.com/log?
+||216.18.176.4/logger/
+||360buyimg.com/jdf/1.0.0/unit/log/
+||3j0pw4ed7uac-a.akamaihd.net^
+||3p-geo.yahoo.com^
+||3p-udc.yahoo.com^
+||4e4356b68404a5138d2d-33393516977f9ca8dc54af2141da2a28.ssl.cf1.rackcdn.com/sa7d76sa/
+||4taps.me/analytics/
+||51network.com^$third-party
+||99widgets.com/counters/
+||9w2zed1szg.execute-api.us-east-1.amazonaws.com^
+||a.getflowbox.com^
+||a.hcaptcha.com^
+||a.mobify.com^
+||a.opumo.net^
+||a2z.com/sping?
+||aan.amazon.com^$third-party
+||accesswire.com/img.ashx
+||activengage.com/overwatch/
+||activity-flow.vtex.com^
+||activity.wisepops.com^
+||ad-shield.io^$third-party
+||ad.aloodo.com^
+||ad.mail.ru/*.gif?rnd=$third-party
+||adbr.io/log?
+||addtoany.com/menu/transparent.gif
+||ade.googlesyndication.com^
+||adfox.yandex.ru^
+||adimo.co/api/tracking/
+||adlog.com.com^
+||adobedc.net/collector/
+||ads-trk.vidible.tv^
+||adsolutions.com^$third-party
+||adyen.com/checkoutshopper/images/analytics.png?
+||adyen.com/checkoutshopper/v2/analytics/log?
+||affiliates.minglematch.com^
+||affirm.com/api/v2/cookie_sent
+||affirm.com/api/v2/session/touch_track
+||afterpay.com^*/v1/event
+||akamaihd.net/p1lakjen.gif
+||akamaized.net/cookie_check/
+||akatracking.esearchvision.com^
+||aktion.esprit-club.com^$image
+||alex.leonard.ie/misc-images/transparent.png
+||alexa.com/minisiteinfo/$third-party
+||alexa.com/traffic/
+||alexandria.marfeelcdn.com^
+||algolia.io/1/events?
+||algolia.io/1/isalive
+||alibaba.com/ts?
+||alipay.com/service/clear.png?
+||aliyun.com/actionlog/
+||allanalpass.com/track/
+||alooma.com/track/
+||alooma.io/track/?
+||alpharank.io/api/pixel/
+||amatomu.com/link/log/
+||amatomu.com/log.php?
+||amazonaws.com/analytics.
+||amazonaws.com/appmonitors/
+||amazonaws.com/avsmetrics/
+||amazonaws.com/beacon^
+||amazonaws.com/cdn.barilliance.com/
+||amazonaws.com/iglu.acme.com.dev.clixtream/tracker.js
+||amazonaws.com/j.kissinsights.com/
+||amazonaws.com/js/reach.js
+||amazonaws.com/ki.js/
+||amazonaws.com/lp/js/tag.js?
+||amazonaws.com/new.cetrk.com/
+||amazonaws.com/prod/entities
+||amazonaws.com/prod/main?ref=$image,third-party
+||amazonaws.com/prod/nobot
+||amazonaws.com/prod/report-only
+||amazonaws.com/production_beacon
+||amazonaws.com/searchdiscovery-satellite-production/
+||amazonaws.com/storejs/a/JKRHRQG/ge.js
+||amazonaws.com/v1/apps/*/events
+||amazonaws.com/webengage-files/
+||amazonaws.com^*/prod_analytics
+||amazonpay.com/customerInsight?
+||amp-error-reporting.appspot.com^
+||amplify.outbrain.com^$third-party
+||amplifypixel.outbrain.com^
+||ampproject.org/preconnect.gif
+||ams-pageview-public.s3.amazonaws.com^
+||analyse.bcovery.com^
+||analytic.rollout.io^
+||analytic.xingcloud.com^$third-party
+||analyticcdn.globalmailer.com^
+||analytics-1.cavai.com^
+||analytics-api.klickly.com^
+||analytics-cms.whitebeard.me^
+||analytics-consent-manager-v2-prod.azureedge.net^
+||analytics-production.hapyak.com^
+||analytics-scripts.cablelabs.com^
+||analytics-sg.tiktok.com^
+||analytics-static.ugc.bazaarvoice.com^
+||analytics.30m.com^
+||analytics.agoda.com^
+||analytics.aimtell.com^
+||analytics.algolia.com^
+||analytics.amakings.com^
+||analytics.apnewsregistry.com^
+||analytics.audioeye.com^
+||analytics.avanser.com.au^
+||analytics.aweber.com^
+||analytics.bestreviews.com^
+||analytics.bitrix.info^
+||analytics.carambo.la^
+||analytics.carbaselive.com^
+||analytics.cdn112.com^
+||analytics.chegg.com^
+||analytics.cincopa.com^
+||analytics.clic2buy.com^
+||analytics.cloud.coveo.com^
+||analytics.cmn.com^
+||analytics.codigo.se^
+||analytics.contentexchange.me^
+||analytics.convertlanguage.com^
+||analytics.data.visenze.com^
+||analytics.dev.htmedia.in^
+||analytics.dev.springboardvideo.com^
+||analytics.developer.riotgames.com^
+||analytics.digitalpfizer.com^
+||analytics.disney.go.com^
+||analytics.disneyinternational.com^
+||analytics.dvidshub.net^
+||analytics.edgekey.net^
+||analytics.eggoffer.com^
+||analytics.erepublic.com^
+||analytics.fabricators.ltd^$third-party
+||analytics.facebook.com^$third-party
+||analytics.favcy.com^
+||analytics.firespring.com^
+||analytics.foresee.com^
+||analytics.formstack.com^
+||analytics.google.com^$third-party
+||analytics.gooogol.com^
+||analytics.groupe-seb.com^
+||analytics.growthphysics.com^
+||analytics.gvim.mobi^
+||analytics.humanautomation.ai^
+||analytics.iraiser.eu^
+||analytics.jazel.net^
+||analytics.jst.ai^
+||analytics.kaltura.com^
+||analytics.kapost.com^
+||analytics.klickly.com^
+||analytics.kongregate.io^
+||analytics.lemoolah.com^
+||analytics.live.com^
+||analytics.livestream.com^
+||analytics.logsss.com^
+||analytics.m7g.twitch.tv^
+||analytics.maikel.pro^
+||analytics.mailmunch.co^
+||analytics.matchbin.com^
+||analytics.midwesternmac.com^
+||analytics.mlstatic.com^
+||analytics.myfidevs.io^
+||analytics.myfinance.com^
+||analytics.newscred.com^
+||analytics.onlyonlinemarketing.com^
+||analytics.ooyala.com^
+||analytics.optilead.co.uk^
+||analytics.orenshmu.com^
+||analytics.ostr.io^
+||analytics.paddle.com^
+||analytics.pagefly.io^
+||analytics.piksel.com^
+||analytics.pinterest.com^$third-party
+||analytics.pixels.ai^
+||analytics.pointdrive.linkedin.com^
+||analytics.pop2watch.com^
+||analytics.prezly.com^
+||analytics.qualityunit.com^
+||analytics.radiatemedia.com^
+||analytics.recruitics.com^
+||analytics.reyrey.net^
+||analytics.rogersmedia.com^
+||analytics.salesanalytics.io^
+||analytics.shareaholic.com^
+||analytics.shorte.st^
+||analytics.shorthand.com^
+||analytics.sitewit.com^
+||analytics.sleeknote.com^
+||analytics.snidigital.com^
+||analytics.springboardvideo.com^
+||analytics.stg.springboardvideo.com^
+||analytics.strangeloopnetworks.com^
+||analytics.superstructure.ai^
+||analytics.supplyframe.com^
+||analytics.test.cheggnet.com^
+||analytics.themarketiq.com^
+||analytics.threedeepmarketing.com^
+||analytics.tiktok.com^
+||analytics.tout.com^
+||analytics.tribeca.vidavee.com^
+||analytics.unibuddy.co^
+||analytics.unilogcorp.com^
+||analytics.urx.io^
+||analytics.vanillaforums.com^
+||analytics.vdo.ai^
+||analytics.vendemore.com^
+||analytics.vixcloud.co^
+||analytics.webgains.io^
+||analytics.webpushr.com^
+||analytics.websolute.it^
+||analytics.wildtangent.com^
+||analytics.witglobal.net^
+||analytics.worldtable.co^
+||analytics.yahoo.com^
+||analytics.yext-static.com^
+||analytics.ynap.biz^
+||analytics.yola.net^
+||analytics.yolacdn.net^
+||analytics.ziftsolutions.com^
+||analytics1.vdo.ai^
+||analyticsehnwe.servicebus.windows.net^
+||analyticssec.overwolf.com^
+||analyze.full-marke.com^
+||ancestrycdn.com/tao/at/
+||anyclip.com/getuids?
+||ao-freegeoip.herokuapp.com^
+||aol.com/ping?
+||aolanswers.com/wtrack/
+||aolcdn.com/js/mg2.js
+||aolcdn.com/omniunih_int.js
+||ape-tagit.timeinc.net^
+||apester.com/event^
+||api-analytics-prd.pelcro.com^
+||api-iam.intercom.io/messenger/web/metrics
+||api-location-prd.pelcro.com^$domain=newsweek.com
+||api-v3.findify.io/v3/feedback
+||api.autopilothq.com^
+||api.bit.ly/*/clicks?$third-party
+||api.blink.net/a/
+||api.collarity.com/cws/*http
+||api.iris.tv/update
+||api.wipmania.com^
+||apibaza.com/pixel/
+||apm-engine.meteor.com^$third-party,xmlhttprequest
+||app.adjust.com^$third-party
+||app.carnow.com/dealers/track_visitor
+||app.link/_r?$script,third-party
+||app.opmnstr.com/v2/geolocate/
+||app.posthog.com/e/?compression=
+||app.posthog.com/e/?ip=
+||app.posthog.com/static/array.js
+||app.posthog.com/static/recorder-v2.js
+||app.yesware.com/t/$third-party
+||appinthestore.com/click/
+||apple.com/hvr/mw/v1/spile
+||apple.com/mw/v1/reportAnalytics
+||apple.www.letv.com^
+||applets.ebxcdn.com^
+||applicationinsights.azure.com^$third-party,domain=~azure.net
+||appliedsemantics.com/images/x.gif
+||appmifile.com/webfile/globalweb/stat/
+||appsolutions.com/hitme?$third-party
+||appspot.com/analytics/
+||appspot.com/api/track/
+||appspot.com/display?
+||appspot.com/event?
+||appspot.com/events.js
+||appspot.com/stats?
+||appspot.com/take?
+||appspot.com/track-analytics-event
+||arc.pub/clavis/training/events
+||arclk.net/trax?
+||arcpublishing.com/beacon
+||argos.citruserve.com^
+||ariane.abtasty.com^
+||arkoselabs.com/metrics/
+||asayer.io/tracker.js
+||assets.moneymade.io/js/fp.min.js
+||assets.yumpu.com/release/*/tracking.js
+||asterpix.com/tagcloudview/
+||at.cbsi.com^*/event?
+||atcdn.co.uk/frostbite/
+||atgsvcs.com/js/atgsvcs.js
+||ati-host.net/event?
+||atlassian.net/rest/collectors/$third-party
+||atom-data.io/session/latest/track.html?$third-party
+||attn.tv/tag/
+||attn.tv^*/dtag.js
+||attributiontrackingga.googlecode.com^
+||auctiva.com/Default.aspx?query
+||audience.newscgp.com^
+||audienceinsights.net^$third-party
+||audioeye.com/ae.js
+||audioeye.com/frame/cookieStorage.html
+||audit.303br.net^
+||audit.median.hu^
+||auriro.net/views.cfm?
+||aurora-d3.herokuapp.com^
+||auryc.com/v1/event
+||autoline-top.com/counter.php?
+||automate-prod.s3.amazonaws.com^$~script
+||avo.app^*/track
+||awaps.yandex.net^
+||awe.sm/conversions/
+||aweber.com/form/displays.htm?$image
+||awesome.section.io^
+||awswaf.com^*/report
+||ax.babe.today^
+||axislogger.appspot.com^
+||az693360.vo.msecnd.net^
+||azureedge.net/javascripts/Tracking.
+||azureedge.net/track
+||azureedge.net^*/fnix.js
+||azurewaf.microsoft.com/event?
+||azurewebsites.net/api/views?
+||azurewebsites.net/TrackView/
+||azurewebsites.net^*/telemetry.js
+||b.bedop.com^
+||b5media.com/bbpixel.php
+||b7tp47v2nb3x-a.akamaihd.net^
+||b8cdn.com/assets/v1/analytics-
+||bacon.getcarro.com^
+||bacon.section.io^
+||baidu.com/pixel?
+||baidu.com/push.js
+||bamgrid.com/dust$domain=~disneyplus.com
+||bamgrid.com/telemetry
+||baqend.com/v1/rum/
+||barium.cheezdev.com^
+||basis.net/assets/up.js
+||bat.bing.com^
+||bazaarvoice.com/sid.gif
+||bb.itwc.ca/js/cube.js
+||bc.geocities.
+||bc.marfeelcache.com^
+||bc0a.com/api/
+||bc0a.com/autopilot/
+||bc0a.com/be_ixf_js_sdk.js
+||bc0a.com/marvel.js
+||bdg.com/event?
+||beacon.adelphic.com^
+||beacon.affil.walmart.com^
+||beacon.aimtell.com^
+||beacon.cdnma.com^
+||beacon.errorception.com^
+||beacon.flow.io^
+||beacon.klm.com^
+||beacon.riskified.com^
+||beacon.s.llnwi.net^
+||beacon.searchspring.io^
+||beacon.securestudies.com^
+||beacon.sftoaa.com^
+||beacon.sojern.com^
+||beacon.statful.com^
+||beacon.tingyun.com^
+||beacon.vertebrae-axis.com^
+||beacon.viewlift.com^
+||beacon2.indieclick.com^
+||beacons.mediamelon.com^
+||beam.mjhlifesciences.com^
+||beamanalytics.b-cdn.net^
+||bee.tc.easebar.com^
+||behavior.tongdun.net^
+||bento.agoda.com^
+||bet365.de/Members/*&affiliate=$subdocument,third-party
+||betano.de^*?btag=$subdocument,third-party
+||bhphotovideo.com/imp/
+||bi.medscape.com^
+||birdsend.co/assets/static/js/pixel/
+||birdsend.email/pixel
+||birdsend.net/pixel
+||bit.ly/stats?
+||bitrix.info/ba.js
+||bizseasky.com/dc/
+||bizseasky.com/mon
+||bizseasky.com/tracker/
+||blend.com/event/
+||blink.net/e/
+||blip.bizrate.com^$script
+||blogblog.com/tracker/
+||bmrg.reflected.net^
+||bobparsons.com/image.aspx?
+||bolt.com/v1/log?
+||bonfire.spklw.com^
+||booking.com/pxpixel.html
+||botdetection.hbrsd.com^
+||bpath.com/count.dll?
+||branch.io^$third-party
+||brandcdn.com/pixel/
+||bravenet.com/counter/
+||braze.eu/api/v3/data/
+||browser-intake-datadoghq.com^
+||browser.events.data.microsoft.com^$ping
+||browser.pipe.aria.microsoft.com^
+||bs.yandex.ru^
+||bucklemail.com/a/$image
+||burstcloud.co/jwe?
+||bytedance.com/pixel/
+||byteoversea.com/captcha/report
+||byteoversea.com/monitor_browser/
+||bzpics.com/jslib/st.js?
+||c-date.com/pixel/
+||c.amazinglybrilliant.com.au^
+||c.bazo.io^
+||c.imedia.cz^
+||c.live.com^
+||c.mgid.com^
+||c.wen.ru^
+||c.ypcdn.com^*&ptid
+||c.ypcdn.com^*?ptid
+||c3metrics.medifast1.com^
+||cache2.delvenetworks.com^
+||cahf4eed.mooo.com^
+||californiatimes.com/privacy/$image
+||calltrack.co^
+||calltrk.com/companies/
+||camel.headfarming.com^
+||canada.com/js/analytics/
+||canecto.info/analytics.js
+||capture-api.ap3prod.com^
+||capture.condenastdigital.com^
+||capture.trackjs.com^$third-party
+||carambo.la/analytics/
+||carambo.la/logging/
+||cardinalcommerce.com/prod/log
+||caspionlog.appspot.com^
+||cbsaavideo.com/measurements/
+||cbsivideo.com/measurements/
+||cc.swiftype.com^
+||ccexperimentsstatic.oracleoutsourcing.com^
+||cdn-channels-pixel.ex.co^
+||cdn-ds.com/analytics/
+||cdn.sourcesync.io/open-pixel/source-pixel.js
+||cdn.usefathom.com^
+||cdnjs.work/metrics.js
+||cdnma.com/apps/capture.js
+||cdnplanet.com/static/rum/rum.js
+||ceros.com/a?data
+||cf.overblog.com^
+||cfmediaview.com/API/MV_Visit.ashx
+||cgicounter.oneandone.co.uk^
+||cgicounter.puretec.de^
+||chanalytics.merchantadvantage.com^
+||channelexco.com/events
+||chargebee.com/api/internal/track_info_error
+||check.ddos-guard.net^$third-party
+||checkout.com/logger/
+||checkout.com/logging
+||cimage.adobe.com^
+||circonus.com/hit?
+||citygridmedia.com/tracker/
+||citysearch.com/tracker/
+||cityzen.io/Pixel/
+||civicscience.com/jot?
+||ck.connatix.com^
+||cleantalk.org/pixel/
+||clearspring.com/at/
+||clearspring.com/t/
+||clerk.io/static/clerk.js
+||clevertap-prod.com^$third-party
+||click.appinthestore.com^
+||click360v2-ingest.azurewebsites.net^
+||clickchatsold.com/d0/
+||clickdimensions.com/ts.js
+||clicks.dealer.com^
+||clicks.tyuwq.com^
+||clicktalecdn.sslcs.cdngc.net^
+||clickthru.lefbc.com^$third-party
+||clicktime.symantec.com^$script,third-party
+||clicktracker.iscan.nl^
+||client-analytics.braintreegateway.com^
+||client-logger.beta.salemove.com^
+||client-logger.salemove.com^
+||client.tahono.com^$third-party
+||clinch.co/a_js/client_pixels/
+||clipsyndicate.com/cs_api/cliplog?
+||clixtell.com/track.js
+||cloudapp.net/l/
+||clouderrorreporting.googleapis.com^
+||cloudflare-quic.com/cdn-cgi/trace
+||cloudflare.com/cdn-cgi/trace$third-party,domain=~isbgpsafeyet.com|~wyndhamdestinations.com
+||cloudfront-labs.amazonaws.com^
+||cloudfront.net*/keywee.min.js
+||cloudfront.net*/sp.js|
+||cloudfront.net*/tracker.js
+||cloudfront.net*/trk.js
+||cloudfront.net/?a=
+||cloudfront.net/abw.js
+||cloudfront.net/analytics.js
+||cloudfront.net/analytics_$script
+||cloudfront.net/analyticsengine/
+||cloudfront.net/autotracker
+||cloudfront.net/beaver.js
+||cloudfront.net/bti/
+||cloudfront.net/clipkit_assets/beacon-
+||cloudfront.net/code/keen-2.1.0-min.js
+||cloudfront.net/dough/*/recipe.js
+||cloudfront.net/esf.js
+||cloudfront.net/i?v=
+||cloudfront.net/js/ca.js
+||cloudfront.net/js/reach.js
+||cloudfront.net/khp.js
+||cloudfront.net/log.js?
+||cloudfront.net/lp.js
+||cloudfront.net/performable/
+||cloudfront.net/powr.js
+||cloudfront.net/pt1x1.gif
+||cloudfront.net/rc.js?
+||cloudfront.net/rum/bacon.min.js
+||cloudfront.net/scripts/cookies.js
+||cloudfront.net/sentinel.js
+||cloudfront.net/sitegainer_
+||cloudfront.net/sso.js
+||cloudfront.net/t.gif
+||cloudfront.net/track.html
+||cloudfront.net/track?
+||cloudfront.net/trackb.html
+||cloudfront.net/uba.js
+||cloudfront.net/websites/sb.js
+||cloudfront.net/zephyr.js
+||cloudfront.net^*.bmp?
+||cloudfunctions.net/commonBonnierDataLayer
+||cloudfunctions.net/export-customizer-data-metrics
+||cloudfunctions.net/function-record-stream-metric?
+||cloudfunctions.net/ingest?
+||cloudfunctions.net/vanalytics
+||cltgtstor001.blob.core.windows.net^
+||clustrmaps.com/counter/$third-party
+||cmail19.com/t/$image,third-party
+||cmmeglobal.com/evt?
+||cmmeglobal.com^*/page-view?
+||cmp.datasign.co^
+||cnetcontent.com/log?
+||cnevids.com/metrics/
+||cnnx.io^*/tracker.js
+||cnnx.io^*/tracking.js
+||cnnx.link/roi/
+||cnpapers.com/scripts/library/
+||cnstrc.com/behavior?
+||cnt.3dmy.net^
+||cnt.mastorage.net^
+||cnt.trvdp.com^
+||cnzz.com/stat.
+||cod.bitrec.com^
+||coefficy.com/ip/
+||coherentpath.com/tracker/
+||collect-ap2.attraqt.io^
+||collect-eu.attraqt.io^
+||collect.alphastream.io^
+||collect.bannercrowd.net^
+||collect.cloudsponge.com^
+||collect.igodigital.com^
+||collect.iteam-dress.com^
+||collect.rebelmouse.io^
+||collect.rewardstyle.com^
+||collect.usefathom.com^
+||collector-*.px-client.net^
+||collector-api.99designs.com^
+||collector-api.frspecifics.com^
+||collector-soompi.viki.io^
+||collector.api.video^
+||collector.appconsent.io^
+||collector.automote.co.nz^
+||collector.clareity.net^
+||collector.contentexchange.me^$third-party
+||collector.dmp.cnna.io^
+||collector.getyourguide.com^
+||collector.mazeberry.com^
+||collector.sspinc.io^
+||collector5.zipy.ai^
+||collectorsvc.apac.vesta.io^
+||comeon.com/tracking.php
+||comic-rocket.com/metrics.js
+||commerce.adobe.io/recs/
+||commerce.bing.com^
+||comms.thewhiskyexchange.com^$image
+||communicatorcorp.com^*/conversiontracking.js
+||compendiumblog.com/sp.js
+||competitoor.com/analytics/
+||concert.io/lookup/
+||conde.io/beacon
+||condenastdigital.com/content?$third-party
+||confiant-integrations.global.ssl.fastly.net^
+||config-security.com/event
+||confirmit.com/wix/inline.aspx?
+||connatix.com/rtb/
+||connatix.com/tr/
+||connect.bolt.com/v1/log
+||connect.facebook.net/signals/$third-party
+||connect.facebook.net^*/fbds.js$third-party
+||connect.idocdn.com^
+||connext-cdn.azureedge.net^
+||consensu.org/?log=
+||consensu.org/geoip
+||consentmanager.net/delivery/info/$third-party
+||console.uxlens.com^
+||constellation.networknmedia.com/cdn-cgi/trace
+||contactatonce.com/GetAgentStatusImage.aspx?
+||contactatonce.com/VisitorContext.aspx?
+||container.pepperjam.com^$third-party
+||content.cpcache.com^*/js/ga.js
+||contentdriver.com/api/impression
+||contently.com/xdomain/
+||contentpass.net/stats?$third-party
+||contents-tracking.beop.io^
+||control.cityofcairns.com^$third-party
+||conversions.genieventures.co.uk^
+||convertflow.co^*/visitors/
+||convertkit.com^*/visit
+||cookie-guard-erdee.ey.r.appspot.com^
+||cookies.livepartners.com^
+||cookiex.ngd.yahoo.com^
+||copyrightcontent.org/e/
+||count-server.sharethis.com^
+||count.asnetworks.de^
+||count.carrierzone.com^
+||count.me.uk^
+||count.paycounter.com^
+||count.xxxssk.com^
+||counter.bloke.com^
+||counter.cam-content.com^
+||counter.hyipexplorer.com^
+||counter.jdi5.com^
+||counter.live4members.com^
+||counter.maases.com^
+||counter.packa2.cz^
+||counter.powr.io^
+||counter.powweb.com^
+||counter.rambler.ru^
+||counter.scribblelive.com^
+||counter.snackly.co^
+||counter.tldw.me^
+||counter.top.ge^
+||counter.yadro.ru^
+||counters.freewebs.com^
+||coveo.com/coveo.analytics.js/
+||covery.ai/fp/$third-party
+||covet.pics/beacons
+||cp.official-coupons.com^
+||cp.official-deals.co.uk^
+||cqloud.com/measurements/
+||crall.io/beacon/
+||creator.zmags.com^
+||credible.com/api/logs-fe
+||crm-vwg.com/tracker/
+||crowdfactory.com/tracker/
+||crowdskout.com/analytics.js
+||crowdskout.com/skout.js
+||crowdskout.com^*/page-view
+||crowdtwist.com/trck/$script
+||crta.and.co.uk^
+||crta.dailymail.co.uk^
+||csi.gstatic.com^
+||csp-collector.appspot.com^
+||csp-reporting.cloudflare.com^
+||csr.onet.pl^
+||ct.capterra.com^
+||ct.corpusapp.com^
+||ct.eid.co.nz^$third-party
+||ct.itbusinessedge.com^$third-party
+||ct.needlive.com^
+||ct.pinterest.com^
+||ct.thegear-box.com^$third-party
+||cts.businesswire.com^$third-party
+||cts.vresp.com^$third-party
+||cube.tv/live/statistics/
+||cumulus-cloud.com/trackers/
+||curated.fieldtest.cc^
+||custom.search.yahoo.co.jp/images/window/*.gif
+||customerlobby.com/ctrack-
+||customfingerprints.bablosoft.com^
+||cws.conviva.com^
+||d.rcmd.jp^$image
+||d.shareaholic.com^
+||d1snv67wdds0p2.cloudfront.net/tracker/
+||d1tbj6eaenapdy.cloudfront.net^
+||d2fuc4clr7gvcn.cloudfront.net/track.js
+||d2r1yp2w7bby2u.cloudfront.net/js/clevertap.min.js
+||d2wa5sea6guof0.cloudfront.net^
+||d3vebqdofhigrn.cloudfront.net^
+||dadi.technology^$third-party
+||dash.getsitecontrol.com^
+||dashboard.nowdialogue.com/api/events/
+||data.circulate.com^
+||data.digitalks.az^
+||data.eetech.com^
+||data.gosquared.com^
+||data.imakenews.com^$third-party
+||data.minute.ly^
+||data.nexxt.com^
+||data.queryly.com^
+||data.tm-awx.com/smile-web-v2/
+||data.tm-awx.com/smile-web.min.js
+||data.woosmap.com^
+||data2.gosquared.com^
+||datadog-service.mvfglobal.com^
+||datasign.co/js/opn.js
+||daxab.com/logger/
+||dcinfos-cache.abtasty.com^
+||dditscdn.com/*fingerprints
+||dditscdn.com/?a=
+||dditscdn.com/log/
+||dealer.com^*/tracker/
+||dealer.com^*/tracking/
+||dealerfire.com/analytics/
+||delivra.com/tracking/$third-party
+||dell.com/TAG/tag.aspx?$third-party
+||delvenetworks.com/player/plugins/analytics/
+||demandmedia.com/wm.js
+||demandmedia.s3.amazonaws.com^$third-party
+||dep.hmgroup.com^
+||deprecated-custom-domains.b-cdn.net^$third-party
+||desipearl.com/tracker/
+||detect.ergebnis-dienst.de^
+||dfanalytics.dealerfire.com^
+||dgcollector.evidon.com^
+||diagnose.igstatic.com^
+||dig.ultimedia.com^
+||digimedia.com/pageviews.php?
+||digitalgov.gov/Universal-Federated-Analytics-Min.js
+||digitaloceanspaces.com/pixel/
+||direct-collect.dy-api.com^
+||direct-collect.dy-api.eu^
+||direct-events-collector.spot.im^
+||directnews.co.uk/feedtrack/
+||discovery.com^*/events
+||disqus.com/api/ping
+||disqus.com/event.js?$script
+||disqus.com/stats.html
+||disquscdn.com/next/embed/alfalfalfa.
+||distillery.wistia.com^
+||dl.episerver.net^
+||dmcdn.net/behavior/
+||dmdentertainment.com^*/video_debug.gif?
+||dmdt.io/collect
+||dnnapi.com/analytics/
+||domodomain.com^*/ddsense.aspx?
+||doppiocdn.com/healthcheck
+||doppiocdn.org/healthcheck
+||doppler-beacon.cbsivideo.com^
+||doppler-beacons.cbsivideo.com^
+||doppler-client-events.cbsivideo.com^
+||doppler-reporting.cbsivideo.com^
+||dotaudiences.com^$third-party
+||doug1izaerwt3.cloudfront.net^
+||dreamhost.com/*.cgi?$image,third-party
+||drift.com/impressions/
+||drift.com/targeting/
+||drift.com/track
+||dugout.co/das2.js
+||dw.com.com^$script
+||dx.mountain.com^
+||dynamic.ziftsolutions.com^
+||dynamicyield.com/batch?
+||dynamicyield.com/clog
+||dynamicyield.com/dpx?
+||dynamicyield.com/imp?
+||dynamicyield.com/uia?
+||dynamicyield.com/var?
+||e-activist.com^*/broadcast.record.message.open.do?
+||e-merchant.com/^*/edr.js$third-party
+||e.channelexco.com^
+||e.ebidtech.com/cv/
+||e.htplayground.com^
+||e.metarouter.io^
+||ea.youmaker.com^
+||early-birds.fr/tracker/
+||ebayadservices.com/marketingtracking/
+||ebayrtm.com/rtm?RtmCmd&a=img&$image
+||ebaystatic.com^*/pulsar.js
+||ebaystatic.com^*/rover_$script
+||ebaystatic.com^*/tracking_RaptorheaderJS.js
+||ec.walkme.com^
+||ecomm.events^
+||ecommstats.s3.amazonaws.com^
+||ecustomeropinions.com/survey/nojs.php?
+||ecustomeropinions.com^*/i.php?
+||edge-hls.doppiocdn.com/ping
+||edge-hls.doppiocdn.org/ping
+||edge.adobedc.net^
+||edge.bredg.com^$third-party
+||edgesuite.net^*/googleanalyt
+||edkt.io^*/edgekit.min.js
+||edrone.me/trace?
+||edw.edmunds.com/edw/edw1x1.gif
+||eel.transistor.fm^
+||egmontpublishing.dk/tracking/
+||ele26126.jscrambler.com^
+||elpais.com/t.gif
+||els-cdn.com^*/analytics.js
+||emarketeer.com/tracker/
+||embedly.com/widgets/xcomm.html$third-party
+||emihosting.com^*/tracking/
+||endorsal.io/check/
+||ensighten.com/error/e.php?
+||epimg.net/js/gdt/
+||epl.paypal-communication.com^$script
+||epromote.co.za/track/
+||eq.userneeds.com^
+||equalweb.com/statistics.taf
+||era.easyvoyage.com^
+||errors.snackly.co^
+||et.educationdynamics.com^
+||etahub.com^*/track?site_id
+||etl.springbot.com^
+||etoro.com/tradesmonitor/
+||eu-mobile.events.data.microsoft.com^
+||ev.moneymade.io^
+||ev.stellarlabs.ai^
+||event-api.contactatonce.com^
+||event-api.rdstation.com.br^
+||event-listener.air.tv^
+||event-logger.tagboard.com^
+||event-service.letslinc.com^
+||event-stream.spot.im^
+||event.api.drift.com^
+||event.getblue.io^
+||event.instiengage.com^
+||event.syndigo.cloud^
+||event.webcollage.net^
+||eventapi.libring.com^
+||eventful.com/apps/generic/$image,third-party
+||eventgateway.soundcloud.com^
+||eventlog.chatlead.com^
+||eventlog.inspsearchapi.com^
+||events.air.tv^
+||events.apester.com^
+||events.attentivemobile.com^
+||events.audiate.me^
+||events.brightline.tv^
+||events.btw.so^
+||events.demoup.com^
+||events.devcycle.com^
+||events.elev.io^
+||events.flagship.io^
+||events.jokerly.com^
+||events.jotform.com^
+||events.launchdarkly.com^$third-party
+||events.matterport.com^
+||events.medio.com^
+||events.missena.io^
+||events.ocdn.eu^
+||events.paramount.tech^
+||events.realgravity.com^
+||events.release.narrativ.com^$subdocument,xmlhttprequest
+||events.shareably.net^
+||events.splash-screen.net^
+||events.split.io^
+||events.storifyme.com^
+||events.tubecup.org^
+||events.ubembed.com^
+||events.whisk.com^
+||events.yourcx.io^
+||eventsproxy.gargantuan.futureplc.com^
+||eveonline.com/redir.asp$third-party
+||evergage.com/beacon/
+||everyaction.com/v1/Track/
+||evidon.com/pub/
+||eviesays.com/js/analytics/
+||evri.com/analytics/
+||evt.collarity.com^$image
+||evt.houzz.com^
+||ex.co/content/monetization/legacy-pixels/
+||exacttarget.com^$~subdocument,third-party
+||excite.ie/?click_in=
+||exitgames.com/photon/m/?ping
+||exitintel.com/log/$third-party
+||expedia.com/static/default/default/scripts/siteAnalytics.js
+||expedia.com/vaclog/
+||experience.contextly.com^
+||extole.io/core.js
+||extole.io^*/core.js
+||ezoic.net/ezqlog?
+||f-log-at.grammarly.io^
+||f-log-test.grammarly.io^
+||f.email.bjs.com^*/1x2.gif
+||facebook.com*/impression.php
+||facebook.com/adnw_request?
+||facebook.com/ai.php?
+||facebook.com/brandlift.php
+||facebook.com/common/cavalry_endpoint.php?
+||facebook.com/method/links.getstats?
+||facebook.com/platform/cavalry_endpoint.php?
+||facebook.com/platform/scribe_endpoint.php/
+||facebook.com/tr/
+||facebook.com/tr?
+||facebook.com/w/$third-party
+||facebook.com/xti.php?
+||factors.ai/sdk/event/
+||fairfax.com.au/js/track/
+||faphouse.com/api/collector/
+||fast.fonts.net/jsapi/core/mt.js
+||fast.wistia.net/assets/external/googleAds.js
+||fastcdn.co/js/sptw.
+||fbot.me/error
+||fbot.me/events/
+||fcadigitaldealer.com/pixel.js
+||fcmatch.google.com^
+||fcmatch.youtube.com^
+||feed.informer.com/fdstats
+||feedblitz.com/imp?$third-party
+||feedblitz.com^*.gif?$third-party
+||feedify.net/thirdparty/json/track/
+||felix.data.tm-awx.com/batch
+||felix.data.tm-awx.com/pageConfig
+||filament-stats.herokuapp.com^
+||files.envoke.com^*_nvk_tracking.js
+||filesonic.com/referral/$third-party
+||fingerprinter-production.herokuapp.com^
+||firebaselogging-pa.googleapis.com^
+||firecrux.com/track/$xmlhttprequest
+||fitanalytics.com/metrics/
+||fkrkkmxsqeb5bj9r.s3.amazonaws.com^
+||flashstats.libsyn.com^
+||flex.msn.com/mstag/
+||flipp.com/beacons
+||flippback.com/m/config
+||flix360.com/beat?
+||flixcar.com/*/tracking/
+||flixcar.com/gvid
+||flixcdn.com^*/track.js
+||flixgvid.flix360.io^
+||flixster.com^*/analytics.
+||flocktory.com^*/tracks/
+||flux-cdn.com/plugin/common/analytics/
+||flux.com/geo.html?
+||fmnetwork.nl/tracking/
+||fog.pixual.co^
+||followistic.com/widget/stat/
+||footballmedia.com/tracking/
+||forethought.ai/workflow/tracking-event
+||forms.aweber.com^*/displays.htm?id=
+||formstack.com/forms/analytics.php
+||formstack.com/forms/js/*/analytics_
+||fotomoto.com/analytics/
+||foureyes.io/fe-init.js
+||fourmtagservices.appspot.com^
+||foxcontent.com/tracking/
+||fp-cdn.azureedge.net^
+||freecurrencyrates.com/statgif.
+||freedom.com^*/analytic/
+||freedom.com^*/analytics/
+||freehostedscripts.net^*.php?site=*&s=*&h=$third-party
+||fresh.inlinkz.com^$third-party
+||frog.editorx.com^
+||fs-client-logger.herokuapp.com^
+||ftimg.net/js/log.js?
+||ftm.fluencyinc.co^
+||fudge.ai/metrics?
+||future-fie-assets.co.uk^
+||future-price.co.uk^
+||futurecdn.net/bordeaux.js$xmlhttprequest
+||futurecdn.net^*/abp.js
+||futurehybrid.tech^$third-party
+||futureplc.com/push_metrics/
+||fw.tv/embed/impressions
+||fwix.com/ref.js
+||fwix.com^*/trackclicks_
+||g.delivery.net^$third-party
+||g.msn.com^
+||g2insights-cdn.azureedge.net^
+||ga-beacon.appspot.com^
+||ga.webdigi.co.uk^
+||gaijin.net/tag?
+||gamedock.io/gamemonkey-web-tracker/
+||gamegecko.com/gametrack?
+||gannettdigital.com/capture_logger/
+||ganon.yahoo.com^
+||gatehousemedia.com/wickedlocal/ip.js
+||gateway.foresee.com^
+||gcion.com/gcion.ashx?
+||gecko.space/count.js
+||geckofoot.com/gfcounterimg.aspx?
+||geckofoot.com/gfvisitormap.aspx?
+||gem.com/api/o/$image,third-party
+||gemius.mgr.consensu.org^
+||genesis.malwarebytes.com^
+||geni.us/snippet.js
+||geni.us/snippet.min.js
+||geo.ertya.com^
+||geo.gexo.com/geo.js$third-party
+||geo.gorillanation.com^
+||geo.mezr.com^
+||geo.ngtv.io^
+||geo.q5media.net^
+||geo.query.yahoo.com^$~xmlhttprequest,domain=~mail.yahoo.com
+||geo.thehindu.com^
+||geobar.ziffdavisinternational.com^
+||geoip.apps.avada.io^
+||geoip.instiengage.com^
+||geoip.nekudo.com^
+||geolocation.outreach.com^
+||geoservice.curse.com^
+||getelevar.com/shops/*/events.js
+||getglue.com^*/count?
+||getkudos.me/a?$image
+||getmetrical.com/storagesync
+||getpos.de/ext/
+||getrockerbox.com/pixel?
+||gi-client-tracking.goodgamestudios.com^
+||gigya.com^*/cimp.gif?
+||giosg.com^*/public/trace/
+||glam.com/cece/agof/
+||glam.com/ctagsimgcmd.act?
+||glam.com/jsadimp.gif?
+||glam.com^*/log.act?
+||gleam.io/seen?
+||gleam.io^$script,third-party
+||global.ssl.fastly.net/native/
+||gml-grp.com^*&affid=$subdocument,third-party
+||go.activengage.com^
+||go.com/capmon/GetDE/?
+||go.techtarget.com^$image,xmlhttprequest
+||go.toutapp.com^$third-party
+||goadv.com^*/track.js
+||goaffpro.com/track
+||goaww.com/stats.php
+||godaddy.com/js/gdwebbeacon.js
+||gomoxie.solutions^*/events
+||google.com/analytics/$third-party
+||google.com/gsi/log?
+||googleapis.com/aam.js
+||googleapis.com/gadasource/gada.js
+||googleapis.com/ivc.js
+||googlecode.com^*/tracker.js
+||googleusercontent.com/tracker/
+||gotdns.com/track/blank.aspx?
+||gotmojo.com/track/
+||gowatchit.com/analytics.js
+||gowatchit.com^*/tracking/
+||grabnetworks.com/beacons/
+||grabnetworks.com/ping?
+||grafana.net/collect/
+||graphcomment.com/api/thread/*/stats
+||green-griffin-860.appspot.com^
+||gsp1.baidu.com^
+||gstatic.com/gadf/ga_dyn.js
+||gstatic.com/wcm/impl-
+||gstatic.com/wcm/loader.js
+||gtrk.s3.amazonaws.com^
+||gu-pix.appspot.com^$third-party
+||gubagoo.com/modules/tracking/
+||gubagoo.io/c/$image
+||h2porn.com/new-hit/?
+||hadrianpaywall.com/views
+||happen.spkt.io^
+||happymod.io/event/
+||hasbro.com/includes/js/metrics/
+||haymarket.com/injector/deliver/
+||hb.vhsrv.com^
+||hcmanager.swifteq.com/hc_events/
+||hearstmags.com^*/hdm-lib_hearstuser_proxy.html$third-party
+||hearstnp.com/log?
+||heg-cp.com/upm/$third-party
+||hello.myfonts.net/count/
+||hello.staticstuff.net^
+||hellobar.com/ping?
+||helloextend.com/tracking
+||helloretail.com/serve/collect/
+||heraldandtimeslabs.com/sugar.js
+||heroku.com/?callback=getip$third-party
+||heyflow.co/pixel/
+||hgcdn.net/?$third-party
+||hi.hellobar.com^
+||hicloud.com/download/web/dtm.js
+||highway.cablecar.sph.com.sg^
+||highwebmedia.com/CACHE/js/output.92c98302d256.js
+||hit.mybestpro.com^
+||hits.dealer.com^
+||hits.getelevar.com^
+||hits.informer.com^
+||hktracker.hankookilbo.com^
+||hm.baidu.com^$third-party
+||hocalwire.com/tracking-
+||homedepot-static.com/data-collection/
+||homestore.com/srv/
+||hop.clickbank.net^$script
+||hornymatches.com^*/visit.php?
+||hpr.outbrain.com^
+||hqq.tv/js/counters.js
+||hrzn-nxt.com/pxl?
+||hsforms.com/embed/v3/counters.gif
+||hspbotdetection.azurewebsites.net^
+||hub.reacti.co/index.js
+||hubspot.com/analytics/
+||hubspot.com/cs/loader-v2.js
+||hubspot.com/tracking/
+||hubspot.com/usage-logging/
+||hushforms.com/visitorid?
+||hydro-ma-proxy.akamaized.net^
+||hypercomments.com/widget/*/analytics.html
+||i.compendium.com^
+||i.s-microsoft.com/wedcs/ms.js
+||i.viafoura.co^
+||iabusprivacy.pmc.com^
+||iadvize.com/collector/
+||ibmcloud.com/collector/
+||icbdr.com/images/pixel.gif
+||icu.getstorybox.com^
+||id.google.*/verify/
+||id.verticalhealth.net/script.js?partnerid=
+||iddu1vvb7sk8-a.akamaihd.net^
+||identification.hotmart.com^
+||iheart.com/events
+||imageshack.us^*/thpix.gif
+||imgfarm.com/images/nocache/tr/*.gif?$image
+||imgfarm.com/images/trk/myexcitetr.gif?
+||imgfarm.com^*/mw.gif?$third-party
+||imp.constantcontact.com^$third-party
+||imp.pvnsolutions.com^
+||impdesk.com/smartpix/
+||impel.io/releases/analytics/
+||impress.vcita.com^
+||impression.clickinc.com^
+||impressionmedia.cz/statistics/
+||inbound-analytics.pixlee.co^
+||incapdns.net/monitor.js
+||incomaker.com//tracking/
+||ind.sh/view.php?$third-party
+||indoleads.com/api/pixel-content/
+||infinityid.condenastdigital.com^
+||infogr.am/logger.php?
+||informer.yandex.ru^
+||infosniper.net/locate-ip-on-map.php
+||infusionsoft.com^*/getTrackingCode?
+||ingest.make.rvapps.io^
+||inmobi.com/?log
+||inmoment.com.au/intercept/$third-party
+||inmoment.com/intercept/$third-party
+||inmoment.com/websurvey/$third-party
+||innogamescdn.com/media/js/metrics-
+||inphonic.com/tracking/
+||inq.com^*/onEvent?_
+||ins.connatix.com^
+||insiderdata360online.com/service/platform.js
+||insight.mintel.com^$third-party
+||insight.rapid7.com^$third-party
+||insights.algolia.io^
+||insights.sitesearch360.com^
+||insitez.blob.core.windows.net^
+||insnw.net/assets/dsc/dsc.fingerprint-
+||instagram.com/logging/
+||instagram.com/logging_client_events
+||installiq.com/Pixels/
+||intake-analytics.wikimedia.org^
+||intelligems.io/track
+||intelligencefocus.com^*/sensor.js
+||intelligencefocus.com^*/websensor.aspx?
+||intensedebate.com/remotevisit.php?
+||intensedebate.com/widgets/blogstats/
+||intercomcdn.com/intercom*.js$domain=unblocked.la
+||internetfuel.com/tracking/
+||intuitwebsites.com/tracking/
+||invite.leanlab.co^
+||invitejs.trustpilot.com^
+||io.narrative.io/?$third-party
+||ip.lovely-app.com^
+||ippen.space/idat
+||ipstatp.com/growth/fe_sdk/reportsdk/$third-party
+||ipstatp.com/static_magic/pgc/tech/collect/$third-party
+||iq.sixaxisllc.com^
+||iqzone.com^$third-party
+||iraiser.eu/analytics.js
+||isacglobal.com/sa.js
+||isitelab.io/ite_sitecomV1ANA.min.js
+||iterable.com/analytics.js
+||iubenda.com/write?
+||iyisayfa.net/inc.php?
+||jailbaitchan.com/tp/
+||jangomail.com^*?UID$third-party
+||jas.indeednps.com^
+||javascriptcounter.appspot.com^
+||jennifersoft.com^$third-party
+||jill.fc.yahoo.com^
+||jly24aw29n5m-a.akamaihd.net^
+||jobvite.com/analytics.js
+||jotform.io/getReferrer/$third-party
+||jscache.com/static/page_moniker/
+||jsdelivr.net/gh/sensitiveio/sbtracker@master/
+||jsdelivr.net/npm/navigator.sendbeacon
+||jsdelivr.net^*/fp.min.js
+||jsrdn.com/s/1.js
+||jtracking-gate.lulusoft.com^
+||k.keyade.com^
+||k.p-n.io/event-stream
+||k.streamrail.com^
+||k8s-tracking-tracking-6c17add7fc-253503024.eu-central-1.elb.amazonaws.com^
+||kalstats.kaltura.com^
+||kbb.com/partner/$third-party
+||kelkoogroup.net/st?
+||key4web.com^*/set_cookie_by_referer/
+||kinesis.eu-west-1.amazonaws.com^$third-party,domain=~amazon.com
+||kiwari.com^*/impressions.asp?
+||kiwi.mdldb.net^
+||kiwisizing.com/api/log
+||kk-resources.com/ks.js
+||klarnaservices.com/v1/osm-client-script/
+||klarnaservices.com^$image,third-party
+||klaviyo.com/onsite/js/sentry.
+||klaviyo.com/onsite/track-analytics?
+||klickly.com/track
+||kmib.co.kr/ref/
+||kochava.com/track/$third-party
+||kununu.com^*/tracking/
+||kxcdn.com/actor/$third-party
+||kxcdn.com/assets/js/script.js
+||kxcdn.com/prj/
+||kxcdn.com/track.js
+||l-host.net/etn/omnilog?
+||l.fairblocker.com^$third-party
+||l.ooyala.com^
+||l.player.ooyala.com^
+||l.sharethis.com^
+||l.typesquare.com^
+||laurel.macrovision.com^
+||laurel.rovicorp.com^
+||lciapi.ninthdecimal.com^
+||lcs.naver.com^
+||leadliaison.com/tracking_engine/
+||leadpages.net/leadboxes/current/embed.js
+||leadpages.net^*/tracking.js
+||leadtracking.plumvoice.com^
+||leadvision.dotmailer.co.uk^$third-party
+||lederer.nl/incl/stats.js.php?
+||legacy.com/globalscripts/tracking/
+||legacy.com^*/unicaclicktracking.js?
+||letv.com/cloud_pl/
+||letv.com/env/
+||levelaccess.net/analytics/
+||lhinsights.com/collect?
+||libcdnjs.com/api/event
+||libs.platform.californiatimes.com/meteringjs/
+||licdn.com/*.gif?rnd=
+||licensing.bitmovin.com/impression
+||lift.acquia.com^
+||lightboxcdn.com/static/identity.html
+||limbik.com/static/tracking-script.js
+||lingows.appspot.com/page_data/?
+||link.cosmopolitan.com^$image
+||link.indiegogo.com/img/
+||link.informer.com^
+||link.messaging.usnews.com^$image
+||link.myjewishpage.com^$image
+||link.realself.com^$image
+||linkbucks.com/visitScript/
+||linkdeli.com/widget.js
+||linkedin.com/countserv/count/$third-party
+||links.voyeurweb.com^
+||linkwithin.com/pixel.png
+||list-manage.com/track/
+||list.fightforthefuture.org/mpss/o/*/o.gif
+||listen.audiohook.com/*/pixel.png
+||listrak.com/api/Activity/impression
+||listrakbi.com/activity/
+||listrakbi.com/api/ActivityEvents/
+||lit.connatix.com^
+||literally-analytics.appspot.com^
+||live-partner.com/tags?
+||live.mrf.io/statics/marfeel/gardac-sync.js
+||live2support.com^*/js_lstrk.
+||livechatinc.com^*/control.cgi?
+||livecounter.theyosh.nl^
+||livefyre.com/libs/tracker/
+||livefyre.com/tracking/
+||livefyre.com^*/tracker.js
+||livefyre.com^*/tracking/
+||livehelpnow.net/lhn/handler/$image
+||livelyvideo.tv/lb/logger
+||liverail.com/?metric=
+||liverail.com/track/?
+||livestats.kaltura.com^
+||livestory.io/*/collect
+||llama.fi/script.js
+||loader-cdn.azureedge.net^
+||loader.zeroform.com^
+||location3.com/analytics/
+||log-*.previewnetworks.com^
+||log.aimtell.com^
+||log.cookieyes.com^
+||log.dpa.com^
+||log.go.com^
+||log.invodo.com^
+||log.mediacategory.com^
+||log.nordot.jp^
+||log.olark.com^
+||log.outbrain.com^
+||log.outbrainimg.com^
+||log.pinterest.com^
+||log.reformal.ru^
+||log.seekda.com^
+||logger.snackly.co^
+||logging.carambo.la^
+||logging.je-apps.com^
+||logging.pw.adn.cloud^
+||loggingapi.spingo.com^
+||loglady.skypicker.com^
+||logs-api.shoprunner.com^
+||logs.animaapp.com^
+||logs.datadoghq.com^$third-party
+||logs.mezmo.com^
+||logs.spilgames.com^
+||logs.thebloggernetwork.com^
+||logs.viadata.store^
+||longtailvideo.com^*/yourlytics-
+||loomia.com^*/setcookie.html
+||lps.qantas.com^
+||lsimg.net^*/vs.js
+||ltwebstatic.com/she_dist/libs/devices/fpv2.
+||ltwebstatic.com^*/libs/sensors/
+||lucid.mjhassoc.com^
+||luminate.com/track/
+||lycos.com/hb.js
+||m.stripe.com^$third-party,domain=~stripe.network
+||ma.logsss.com^
+||magento-recs-sdk.adobe.net^
+||magnify.net/decor/track/
+||mail-app.com/pvtracker/
+||mail.ru/dstat?
+||mail.ru/grstat?
+||mail.ru/k?
+||mandrillapp.com/track/
+||maptrackpro.com/track/
+||marketcat.co/pixel/
+||marketingautomation.services/client/ss.js
+||marketingautomation.services/koi
+||marketo.com/gw1/
+||marketo.com/rtp-api/
+||marsflag.com/mf2file/site/ext/tr.js
+||martech.condenastdigital.com^
+||mas.nth.ch^
+||mashery.com/analytics/
+||materiel.net/r/$image
+||maven.io/api/userEvent/
+||mavencoalition.io/collect
+||maxmind.com/app/$third-party
+||maxmind.com/geoip/$third-party
+||maxmind.com/js/country.js
+||maxmind.com/js/device.js$third-party
+||maxmind.com^*/geoip.js
+||maxmind.com^*/geoip2.js
+||mbsvr.net/js/tracker/
+||mc.webvisor.com^
+||mc.webvisor.org^
+||mc.yandex.com^
+||mc.yandex.ru^
+||mcdp-*.outbrain.com^
+||mcssl.com^*/track.ashx?
+||mdctrail.com/b.ashx$third-party
+||mdxprod.io/analytics.js
+||measure.refinery89.com^
+||media-imdb.com/twilight/?
+||media-lab.ai/ana-sentry.js
+||media-platform.com/common/js/lib/cxense/
+||mediabong.com/t/
+||mediabong.net/t/
+||mediadelivery.net/.metrics/
+||mediadelivery.net/rum.js
+||mediaite.com^*/track/
+||mediametrics.mpsa.com^
+||mediaplex.com^*?mpt=
+||meebo.com/cim/sandbox.php?
+||merklesearch.com/merkle_track.js
+||metabroadcast.com^*/log?
+||metaffiliation.com^*^mclic=
+||metering.pagesuite.com^$third-party
+||metrics-api.librato.com^
+||metrics-logger.spot.im^
+||metrics.api.drift.com^
+||metrics.beyondwords.io^
+||metrics.brightcove.com^
+||metrics.ctvdigital.net^
+||metrics.doppiocdn.com^
+||metrics.doppiocdn.org^
+||metrics.doppiostreams.com^
+||metrics.futureplc.engineering^
+||metrics.gs-chat.com^
+||metrics.kmsmep.com^
+||metrics.mdstrm.com^
+||metrics.onshape.com^
+||metrics.pico.tools^
+||metrics.scribblelive.com^
+||metrics.userguiding.com^
+||metrika.cdn112.com^
+||metrix.emagister.com^
+||mgmlcdn.com/stats/
+||mikeneko.apollo.moe/js/script.js
+||minutemediacdn.com/campaign-manager-client/
+||mircheigeshoa.com/prod/smi/fp.min.js
+||mixpanel.com/track?
+||mj-snowplow-static-js.s3.amazonaws.com^
+||mkcms.com/stats.js
+||ml.com/enterprisetagging/
+||mlweb.dmlab.hu^
+||mmi.bemobile.ua^
+||mochiads.com/clk/
+||moco.yukata.dev/get/$image,third-party
+||modules.ooyala.com^*/analytics-
+||mon.domdog.io^
+||monitor-api.blackcrow.ai^
+||monitor-frontend-collector.a.bybit-aws.com^
+||monitor.azure.com^
+||monitoring.iraiser.eu^
+||monorail-edge.shopifysvc.com^
+||mormont.gamer-network.net^
+||movementventures.com/_uid.gif
+||mowplayer.com/media/statistics/
+||mozilla.org/page/*/open.gif$third-party
+||mql5.com/st?
+||mql5.com/tr?
+||mrf.io/statics/marfeel-sdk.js
+||mrf.io/statics/marfeel/chunks/metrics-
+||ms-trackingapi.phenompeople.com^
+||msadsscale.azureedge.net^
+||msecnd.net/jscripts/HA-$script
+||msecnd.net/next/$script
+||msecnd.net/script/raptor-
+||msecnd.net/scripts/a/ai.
+||msecnd.net/scripts/b/ai.
+||msecnd.net/scripts/jsll-
+||mshcdn.com/assets/metrics-
+||mssdk.tiktokw.us/web/report?
+||mts.mansion.com^$third-party
+||mtvnservices.com/aria/projectX/
+||mtvnservices.com/aria/uuid.html
+||mtvnservices.com/measurements/
+||mtvnservices.com/metrics/
+||munchkin.marketo.net^
+||murdoog.com^*/Pixel/$image
+||museter.com/track.php?
+||musvc2.net/e/c?
+||mv.treehousei.com^
+||mxmfb.com/rsps/img/
+||myblueday.com^*/count.asp?
+||myfinance.com/widget/
+||myfreecams.com/mfc2/lib/o-mfccore.js
+||mymarketing.co.il/Include/tracker.js
+||myprivacy.dpgmedia.net/audits
+||myscoop-tracking.googlecode.com^$third-party
+||mysdcc.sdccd.edu^*/.log/
+||mysociety.org/track/
+||mzbcdn.net/mngr/mtm.js
+||nastydollars.com/trk/
+||nativly.com^*/track?
+||naver.net/wcslog.js
+||navlink.com/__utmala.js
+||nbcudigitaladops.com/hosted/housepix.gif
+||nbcudigitaladops.com/hosted/util/geo_data.js
+||ncdn22.xyz/cdn-cgi/trace
+||needle.com/pageload?
+||needle.com/pageupdate?
+||neocounter.neoworx-blog-tools.net^
+||neon-lab.com/neonbctracker.js
+||net-tracker.notolytix.com^$third-party
+||netbiscuits.net^*/analytics/
+||netdna-ssl.com/tracker/
+||netlify-rum.netlify.app^
+||netne.net/stats/
+||netscape.com/c.cgi?
+||neulion.vo.llnwd.net^*/track.js
+||news.banggood.com/mo/$image,third-party
+||newsanalytics.com.au^$third-party
+||newsletters.nationalgeographic.com^$image,third-party
+||newton.pm/events/track_bulk
+||nexstardigital.net/segment.js
+||nfcube.com/assets/img/pixel.gif
+||ngpvan.com/v1/Track/
+||nice264.com/data?$third-party
+||nile.works/api/save-perf?
+||nile.works/TargetingWebAPP/
+||ninja.onap.io^
+||nitrous-analytics.s3.amazonaws.com^
+||noflake-aggregator-http.narvar.com^
+||nojscontainer.pepperjam.com^$third-party
+||nol.yahoo.com^
+||nova.dice.net^
+||nr.static.mmcdn.com^
+||ns-cdn.com^*/ns_vmtag.js
+||ns.rvmkitt.com^
+||nude.hu/html/track.js
+||nvidia.partners/telemetry/
+||o.aolcdn.com/js/mg1.js
+||observer.ip-label.net^
+||ocmail1.in/rtw/$image
+||octaneai.com^*/utrk
+||octopart-analytics.com^$third-party
+||oda.markitondemand.com^
+||odysee.com/api/v1/metric/
+||odysee.com/log/
+||ohnorobot.com/verify.pl?
+||olytics.omeda.com^
+||ondigitalocean.app/insight-analytics.js
+||one.store/v1/analytics/
+||onecount.net/onecount/oc_track/
+||onescreen.net/os/static/pixels/
+||onesignal.com/api/v*/apps/
+||onesignal.com/api/v1/sync/
+||onesignal.com/sdks/OneSignalSDKStyles
+||onesignal.com/sdks/OneSignalSDKWorker
+||onesignal.com/webPushAnalytics
+||onespot-tracking.herokuapp.com^
+||onet.pl/eclk/
+||onet.pl^*/tags?
+||onetrust.com^$ping
+||onsugar.com/static/ck.php?
+||ontraport.com/track.php
+||ontraport.com/tracking.js
+||oo-syringe.com/prod/moat.js
+||ooyala.com/3rdparty/comscore_
+||ooyala.com/authorized?analytics
+||ooyala.com/sas/analytics?
+||ooyala.com/verify?
+||ooyala.com^*/report?log
+||open.delivery.net^
+||openxcdn.net^$third-party
+||opinary.com/v1/events
+||optimeeze.appspot.com^
+||optmn.cloud/hb/
+||ora.tv/j/ora_evttracking.js
+||orb.ee/collect
+||ordergroove.com/log/offer?
+||organiccdn.io/assets/sdk/monitor.unit-sdk.js
+||organicfruitapps.com/analytics/
+||orts.wixawin.com^$third-party
+||osano.com/js/?action_name=
+||outbrain.com/nanoWidget/externals/cookie/
+||outbrain.com/widgetOBUserSync/
+||outbrain.com^*/widgetStatistics.js
+||p.delivery.net^$third-party
+||p.metrilo.com^
+||p.placed.com^
+||p.skimresources.com^
+||p.typekit.net^
+||p.yotpo.com^
+||p0.com/1x1
+||paddle.com^*/analytics.js
+||page-events-ustats.udemy.com^
+||pagecloud.com/event
+||pagefly.io/pagefly/core/analytics.js
+||pages-stats.rbl.ms^
+||pagesense-collect.zoho.com^
+||pagesocket.glam.com^
+||pageturnpro.com/tracker.aspx?
+||pair.com/itero/tracker_ftc/
+||pap.qualityunit.com^$third-party
+||parkwhiz.com/events/
+||parsely.com/keys/$script,third-party
+||partners.etoro.com^$script
+||patreon.com/api/tracking
+||payments-amazon.com^*/analytics.js
+||payments.amazon.com/cs/uedata
+||paypal.com/ptrk/
+||paypal.com/webapps/mch/cmd/?
+||paypal.com/xoplatform/logger/api/logger
+||paypal.com^*/pixel.gif$third-party
+||paypalobjects.com^*/pixel.gif
+||pcrl.co/js/jstracker.min.js
+||pega.com/logserver
+||pegasus.unifygroup.com^
+||penton.com/analytics/
+||perf-events.cloud.unity3d.com^
+||perf.hsforms.com^
+||perfops.net/rom3/
+||performgroup.com/metrics/
+||perr.h-cdn.com^
+||perso.aws.arc.pub^
+||pets.channeladvisor.com^
+||photobox.com/event
+||photobox.com/logs
+||phrasetech.com/api/collect
+||pi.ispot.tv^
+||piano.io/tracker/
+||pico.tools/metrics/
+||ping-admin.ru^$third-party
+||ping.dozuki.com^
+||ping.fastsimon.com^
+||ping.instantsearchplus.com^
+||pings.conviva.com^
+||pings.vidpulse.com^
+||pipe-collect.ebu.io^
+||pipedream.wistia.com^
+||pix.hyj.mobi^
+||pix.revjet.com^
+||pix.speedbit.com^$third-party
+||pix.spot.im^
+||pixel-a.basis.net^
+||pixel.ampry.com^
+||pixel.anyclip.com^
+||pixel.archipro.co.nz^
+||pixel.blivenyc.com^
+||pixel.byspotify.com^
+||pixel.condenastdigital.com^
+||pixel.inforsea.com^
+||pixel.lilystyle.ai^
+||pixel.locker2.com^
+||pixel.mintigo.com^
+||pixel.mtrcs.samba.tv^
+||pixel.newscred.com^
+||pixel.redgifs.com^
+||pixel.roymorgan.com^
+||pixel.s3xified.com^
+||pixel.safe-installation.com^
+||pixel.solvemedia.com^
+||pixel.sprinklr.com^
+||pixel.videohub.tv^
+||pixel.wp.com^
+||pixel.yabidos.com^
+||pixel.yola.com^
+||pixel2.realclever.com^
+||pixels.afcdn.com^
+||pixlee.com/assets/fp.js
+||pixlee.com/assets/keen-
+||pixlee.com/assets/pixlee_events.js
+||pl.connatix.com^
+||platform.iteratehq.com^
+||platform.twitter.com/impressions.js
+||plausible.io/js/p.js
+||plausible.io/js/plausible.
+||plausibleio.workers.dev^$third-party
+||play.adtonos.com^
+||play.ht/views/
+||player.ooyala.com/errors/report?
+||playtomic.com/Tracker/
+||plista.com/activity
+||pm.boostintegrated.com^
+||poool.fr/api/v3/access/event
+||popup-static.unisender.com^
+||porpoise.azettl.net^
+||postageapp.com/receipt/$third-party
+||poweredbyeden.com/widget/tracker/
+||ppx.com/tracking/
+||pr.blogflux.com^
+||prd-collector-anon.ex.co^
+||prd-collector-platform.ex.co^
+||presspage.com/statistics/
+||prf.vagnt.com^
+||pricespider.com/impression/
+||primedia.co.za/analytics/
+||primer.typekit.net^$xmlhttprequest
+||prism.app-us1.com^$script,third-party
+||prismaconnect.fr/prd/ping
+||privacy-center.org^*/events
+||privacy.outdoorsg.com^
+||processor.asccommunications.com^
+||prod.benchmarkemail.com/tracker.bundle.js
+||prod.ew.srp.navigacloud.com^
+||prod.fennec.atp.fox^
+||propps.com/v1/referrer/
+||providesupport.com/cmd/$image
+||proxy.dzeio.com^
+||proxycheck.io/v2/
+||pswec.com/px/$third-party
+||pt.crossmediaservices.com^
+||pt.ispot.tv^
+||ptracker.nurturehq.com^
+||ptsc.shoplocal.com^
+||pub.sheknows.com^
+||public.cobrowse.oraclecloud.com/rely/storage/
+||publicbroadcasting.net/analytics/
+||purevideo.com^*/pvshim.gif?
+||pushly.com/pushly-event-tracker
+||pushpro.io/api/logging/
+||pussy.org^*.cgi?pid=
+||pussy.org^*/track.php
+||px-cdn.net/b/
+||px-cdn.net^*/collector
+||px-cloud.net/b/s
+||px.marchex.io^
+||px.mountain.com^
+||px.owneriq.net^
+||px.spiceworks.com^
+||pxchk.net/b/s
+||pylon.micstatic.com^
+||qcloud.com/report.go?
+||qq.com/collect?
+||qq.com/dataimport/
+||qq.com/heatmap/
+||qq.com/ping.js?
+||qq.com/stats?
+||quadpay.com/analytics/
+||qualifioapp.com/egw/events
+||qualtrics.com/jfe/$script,third-party
+||qualtrics.com/sie/$script,third-party
+||qualtrics.com/WRSiteInterceptEngine/?Q_Impress=$third-party
+||qualtrics.com^*/metrics
+||quantcast.com/?log
+||quantcast.mgr.consensu.org/?log
+||qubitanalytics.appspot.com^
+||query.petametrics.com^
+||quisma.com/tracking/
+||quora.com/_/ad/
+||quora.com/qevents.js
+||qzzr.com/_uid.gif
+||r.mail.ru^$script
+||r.skimresources.com^
+||r.stripe.com^$script
+||rackcdn.com/gate.js
+||rackcdn.com/stf.js
+||radiotime.com/Report.ashx?
+||radiotime.com/reports/
+||rakanto.com/cx_collector/
+||ramp.purch.com^
+||raygun.io/events?
+||rbl.ms/res/users/tracking/
+||reach-id.orbit.tm-awx.com^
+||readcube.com/assets/track_
+||realm.hearst3pcc.com^
+||rebelmouse.com/pharos/
+||recart.com/tracking/
+||recipefy.net/analytics.js
+||recs.richrelevance.com/rrserver/api/engage/trackExperienceEvent?
+||recs.shareaholic.com^
+||recurly.com/js/v1/events
+||redditsave.com/api/event
+||redditstatic.com/ads/pixel.js
+||redfast.com/ping/
+||reelevant.dev/tracker
+||reevoo.com/track_url/
+||refer.ccbill.com^
+||refer.wordpress.com^
+||referrer.disqus.com^
+||reflow.tv/pixels/
+||rejoiner.com/tracker/
+||relaymedia.com/ping?$third-party
+||removeads.workers.dev^
+||replyat.com/gadgetpagecounter.asp?
+||reporting-api.gannettinnovation.com^
+||reporting.cdndex.io^
+||reporting.singlefeed.com^
+||reports-api.sqreen.io^
+||reports.hibu.com^
+||reports.pagesuite-professional.co.uk^
+||reports.sdiapi.com^
+||res.rbl.ms^
+||rest.wildstar-online.com^
+||retargeting.newsmanapp.com^
+||reverbnation.com/widgets/trk/
+||rfksrv.com/rfk/$third-party
+||rfksrv.com/rfkj/$image
+||richrelevance.com/rrserver/tracking?
+||rltd.io/tags/
+||roadster.com/roadster_dealer_analytics
+||rodale.com/ga/
+||route.com/collect
+||routeapp.io/route-analytics/
+||rs.sinajs.cn^
+||rt.flix360.com^
+||rtc.hibuwebsites.com/feature/metrics
+||rtc.multiscreensite.com^
+||rtxpx-a.akamaihd.net^
+||rum.azion.com^
+||rum.azioncdn.net^
+||rum.ingress.layer0.co^
+||rum.layer0.co^
+||rum.perfops.net^
+||rum.uptime.com^
+||rumstat.cdnvideo.ru^
+||run.app/data.log
+||run.app/metrics/
+||rw.marchex.io^
+||s-microsoft.com/mscc/$~stylesheet
+||s.autopilotapp.com^
+||s.beop.io^
+||s.logsss.com^
+||s.pinimg.com/ct/core.js
+||s.srvsynd.com^
+||sa.scorpion.co^
+||saasexch.com/bapi/fe/usd/report/
+||safe-iplay.com/logger
+||sail-horizon.com/horizon/$third-party
+||sailthru.com/Sailthru_spacer_1x1.gif
+||sajari.com/js/sj.js$third-party
+||salescs.com/liveagent/scripts/track.js
+||salesforce.com/sfga.js
+||salesloft.com/sl.js
+||salsify-ecdn.com/sdk/
+||sascdn.com/mh_audience/
+||sawpf.com/1.0.js$third-party
+||saymedia.com/latest/tetrapak.js
+||scatec.io/collect
+||schemaapp.com/pagecount
+||schibsted.com/autoTracker
+||sciencex.com/api/location/
+||scoopy.cdn112.com^
+||scout.salesloft.com/r?tid=
+||scout.us2.salesloft.com^$image
+||scribd.com/api/v1/events
+||scribol.com/traffix/widget_tracker/
+||script-api.kinja.com/script?
+||scripts.psyma.com^
+||sd-tagging.azurefd.net^
+||sdiapi.com/reporter/
+||sdrive.skoda-auto.com^
+||sdtagging.azureedge.net^
+||searchcompletion.com/BannerHandler.ashx
+||secure-stats.pingdom.com^
+||secure.ed4.net/GSI/$third-party
+||secure.ifbyphone.com^$third-party
+||secure.merchantadvantage.com^
+||secureprovide1.com/*=tracking$image
+||secureserver.net/t/
+||seg.sharethis.com^
+||segments.adap.tv^$third-party
+||sendtonews.com/stn_trk.gif?
+||sentry.arc.io^
+||sermoncloud.com/logger/
+||service.trustpid.com^
+||session.timecommerce.net^
+||sexhd.pics/x/x.js
+||sezzle.com/v1/event/log
+||sfstatic.net/build/js/basicMetricsTracking.
+||sftrack.searchforce.net^
+||sgali-mcs.byteoversea.com^
+||share-online.biz/affiliate/$third-party
+||shareaholic.com/analytics_
+||shareaholic.com/partners.js
+||shared.65twenty.com^
+||shareholder.com/track/
+||shareit.com/affiliate.html$third-party
+||sharethis.com/increment_clicks?
+||sharethis.com/pageviews?
+||shopify.com/shopifycloud/consent-tracking-api/
+||shopify.com/shopifycloud/web-pixels-manager/
+||shoplocal.com/it.ashx?
+||shopnetic.com^$third-party
+||shorthand.com/analytics/
+||showstopped.com/owa/log.php
+||showstopped.com/owa/modules/base/dist/owa.tracker.js
+||shrtfly.vip/js/tag.js
+||sinajs.cn/open/analytics/
+||sitebooster.com/sb/wix/p?$third-party
+||sitefinity.com/collect/
+||sitescdn.net/ytag/ytag.min.js
+||skeepers.io/data/collect
+||skypack.dev/@amplitude/
+||skysa.com/tracker/
+||slackb.com^
+||slgnt.us/track
+||sli-spark.com/b.png$third-party
+||slidedeck.com^$image,third-party
+||smart-data-systems.com^
+||smartertravel.com/ext/pixel/
+||smarthint.co/track/
+||smrt.as^
+||snapkit.com/v1/sdk/metrics/
+||snaps.vidiemi.com^$third-party
+||snowplow.swm.digital^
+||snowplowjs.darwin.cx^
+||soccer.ru/counter/
+||socialannex.com/c-sale-track/$script
+||solutions.invocacdn.com^
+||soundestlink.com/REST/forms/v2/track/view?
+||sourceforge.net/tracker/$~xmlhttprequest
+||southafricahome.com/statsmodulev2/
+||sp-wukong-tracker.b-cdn.net^
+||sp.tinymce.com^
+||spa-tracker.spapi.io^
+||spaceprogram.com/webstats/
+||sparklit.com/counter/
+||speedtest.dailymotion.com/latencies.js
+||speedtrap.shopdirect.com^
+||spindl.link/events
+||spiral.world/events/
+||splunkcloud.com/services/collector/
+||spotpass.com/api/log
+||spread.ly^*/statistics.php
+||spresso.com/pim/public/events
+||squarecdn.com/square-marketplace-js/chunk-analytics-vendors.js
+||squarecdn.com/square-marketplace-js/chunk-analytics.js
+||squarespace.com/universal/scripts-compressed/performance-$script,third-party
+||srvmath.com^*/analytics.js
+||ssa.stepstone.com^
+||ssl-images-amazon.com/images/I/31YXrY93hfL.js$domain=imdb.com
+||ssr.streamrail.net^
+||st.cdnco.us^
+||st.linkfire.com^
+||stacksocialcontent.com/event/
+||staging-pt.ispot.tv^
+||starman.fathomdns.com^
+||stas.outbrain.com^
+||stat.absolutist.com^
+||stat.boredomtherapy.com^
+||stat.glaze.ai^
+||stat.mixi.media^
+||stat.moevideo.net^
+||stat.mydaddy.cc^
+||stat.segitek.hu^
+||stat.u.sb^
+||stat.web-regie.com^
+||statdb.pressflex.com^
+||static-tracking.klaviyo.com^
+||static.fengkongcloud.com^
+||static.parsely.com^$third-party
+||staticmoly.me/metric.php
+||statistics.tattermedia.com^
+||statistics.wibiya.com^
+||statm.the-adult-company.com^
+||stats-bq.stylight.net^
+||stats-dev.brid.tv^
+||stats-messages.gifs.com^
+||stats-newyork1.bloxcms.com^
+||stats.big-boards.com^
+||stats.bitgravity.com^
+||stats.bluebillywig.com^
+||stats.bradmax.com^
+||stats.callnowbutton.com^
+||stats.cmcigroup.com^
+||stats.curds.io^
+||stats.datahjaelp.net^
+||stats.edicy.com^
+||stats.esecured.net^
+||stats.externulls.com^$domain=beeg.com
+||stats.fomo.com^
+||stats.gifs.com^
+||stats.heyoya.com^
+||stats.inergizedigitalmedia.com^
+||stats.itweb.co.za^
+||stats.kaltura.com^
+||stats.ksearchnet.com^
+||stats.live-video.net^$domain=kick.com
+||stats.lotlinx.com^
+||stats.mituyu.com^
+||stats.mpthemes.net^
+||stats.nebula.fi^
+||stats.netbopdev.co.uk^
+||stats.netdriven.com^
+||stats.olark.com^
+||stats.ozwebsites.biz^
+||stats.phoenix-widget.com^
+||stats.polldaddy.com^
+||stats.prebytes.com^
+||stats.pusher.com^
+||stats.sa-as.com^
+||stats.sawlive.tv^
+||stats.screenresolution.org^
+||stats.shopify.com^
+||stats.smartclip.net^
+||stats.topofblogs.com^
+||stats.twistage.com^
+||stats.uscreen.io^
+||stats.varrando.com^
+||stats.viddler.com^
+||stats.webs.com^
+||stats.webstarts.com^$third-party
+||stats.wp.com^
+||stats.wpmucdn.com^
+||stats.zotabox.com^
+||statsadv.dadapro.com^$third-party
+||statsapi.screen9.com^
+||statscollector-1.agora.io^
+||statscollector.sd-rtn.com^
+||statt-collect.herokuapp.com^
+||stg-data-collector.playbuzz.com^
+||stileproject.com/vhtk/
+||storage.googleapis.com/afs-prod/tags
+||storage.googleapis.com/nchq-dj-nid/prod/sp_v1.js
+||storage.googleapis.com/snowplow-cto-office-tracker-bucket/
+||storage.googleapis.com/tm-frend-graffiti/
+||storage.syncmedia.io/libs/sm_capture_
+||streamads.com/view?
+||streamoptim.com/log.js
+||streamoptim.com/log/report?
+||streams.cablecar.sph.com.sg^
+||streamtheworld.com/imp?
+||stripe.com/?event=
+||sts.eccmp.com^
+||stylitics.com/api/engagements
+||su.pr/hosted_js$third-party
+||sugarops.com/w?action=impression$third-party
+||sulia.com/papi/sulia_partner.js/$third-party
+||sundaysky.com/sst.gif?
+||sundaysky.com/vop/$third-party
+||sunlightmetrics.b-cdn.net^
+||sunset.com/tia/
+||survey.interquest.com^
+||survey.io/log?
+||surveymonkey.com/resp/api/metrics
+||surveywall-api.survata.com^$third-party
+||svc.dynamics.com/f/m/$third-party
+||svc.dynamics.com/t/w$third-party
+||svibeacon.onezapp.com^
+||svnlnk.com/aff/trk.html
+||swarm.video/track/
+||swiftypecdn.com/cc.js$third-party
+||swiftypecdn.com/te.js$third-party
+||sync.adap.tv^
+||sync.outbrain.com^$third-party
+||synergizeonline.net/trackpoint/
+||syteapi.com/et?
+||t.360playvid.info^
+||t.91syun.com^
+||t.a3cloud.net^
+||t.adx.opera.com^
+||t.arcade.show^
+||t.auditedmedia.org.au^
+||t.beop.io^
+||t.bimvid.com^
+||t.brand-server.com^
+||t.buyist.app^
+||t.c4tw.net^
+||t.castle.io^
+||t.cfjump.com^
+||t.channeladvisor.com^
+||t.clic2buy.com^
+||t.dgm-au.com^$third-party
+||t.enuygun.com^
+||t.ghostboard.io^
+||t.id.net/log
+||t.irtyc.com^
+||t.jobsyn.org^
+||t.mail.sony-europe.com/r/?
+||t.menepe.com^
+||t.metrilo.com^
+||t.playwayfinder.com^
+||t.pointandplace.com^
+||t.powerreviews.com^$third-party
+||t.pswec.com^
+||t.raptorsmartadvisor.com^
+||t.rentcafe.com^
+||t.screeb.app^
+||t.sharethis.com^
+||t.signalayer.com^
+||t.skimresources.com^
+||t.smile.eu^
+||t.splicky.com^
+||t.spot.im^
+||t2.t2b.click^
+||tag-manager.playbuzz.com^
+||tag.aticdn.net^
+||tag.atom.gamedistribution.com^
+||tag.aumago.com^
+||tag.brandcdn.com^
+||tag.digops.sincro.io^
+||tag.elevaate.io^
+||tag.flagship.io^
+||tag.imagino.com^
+||tag.lexer.io^
+||tag.mtrcs.samba.tv^
+||tag.myplay.com^
+||tag.rightmessage.com^
+||tag.rmp.rakuten.com^
+||tag.statshop.fr^
+||tagcdn.com/pix/?
+||tagger.opecloud.com^
+||taggstar.com^*/taggstar.min.js
+||tags.catapultx.com^
+||tags.cdn.circlesix.co^
+||tags.dxmdp.com^
+||tags.fullcontact.com^
+||tags.master-perf-tools.com^
+||tags.newscgp.com^
+||tags.refinery89.com^
+||tagtracking.vibescm.com^
+||target.mixi.media^
+||tarteaucitron.io/log/
+||tatadigital.com/analytics-engine/
+||te.supportfreecontent.com^
+||technolutions.net/ping?
+||technorati.com/technoratimedia-pixel.js
+||techtarget.com^*/GetCookiesWithCallback?
+||techweb.com/beacon/
+||telemetrics.klaviyo.com^
+||telemetry.goodlifefitness.com^
+||telemetry.phenixrts.com^
+||telemetry.reembed.com^
+||telemetry.soundcloud.com^
+||telemetry.tableausoftware.com^
+||telemetry.vtex.com^
+||terabox.com/api/analytics?
+||terabox.fun/api/analytics
+||terabox.fun/api/getsyscfg?*web_share_ads_adsterra_config
+||test.takedwn.ws^
+||th.bing.com/th/*&riu=$image,third-party
+||the-group.net/aether/
+||themesltd.com/online-users-counter/$third-party
+||theoplayer.com/t?
+||threadloom.com/ga/
+||threedy.ai/api/event/
+||thron.com/shared/plugins/tracking/
+||tiktokv.com/web/report?
+||tildacdn.com/pixel.png
+||timber.sendtonews.com^
+||timejs.game.163.com^
+||tinypass.com/checkout/offer/trackShow
+||tinypass.com^*/track?
+||tinyurl.com/pixel.gif/
+||tk.storetail.io^
+||tkx.mp.lura.live/rest/v2/server_time
+||tl.tradetracker.net^
+||tm-awx.com/pageview
+||tm.tradetracker.net^
+||tm.vendemore.com^
+||tms.fmm.io^
+||tmtarget.com/tracking/
+||to.getnitropack.com^
+||toast.com/log
+||toast.com/sendid?
+||top-fwz1.mail.ru^
+||topix.net/t6track/
+||totallylayouts.com/tumblr/visitor-counter/counter.js
+||touchcommerce.com/tagserver/logging/
+||tourradar.com/def/partner?$third-party
+||tout.com/tracker.js
+||tpx.tesseradigital.com^
+||tr-op.datatrics.com^
+||tr.cloud-media.fr^
+||tr.datatrics.com^
+||tr.marsflag.com^
+||tr.outbrain.com^
+||tr.snapchat.com^
+||tr.vitals.co^
+||tr.webantenna.info^
+||tra.scds.pmdstatic.net/sourcepoint/
+||traccoon.intellectsoft.net^
+||trace.swaven.com^
+||track-dark-bz.b-cdn.net^
+||track.360playvid.info^
+||track.91app.io^
+||track.99acres.com^
+||track.atgstores.com^$third-party
+||track.bannedcelebs.com^
+||track.btdmp.com^
+||track.coherentpath.com^
+||track.contently.com^
+||track.cordial.io^
+||track.dark.bz^
+||track.digitalriver.com^
+||track.emerse.com^
+||track.hubspot.com^
+||track.juno.com^
+||track.kinetiksoft.com^
+||track.mailerlite.com^
+||track.mituo.cn^
+||track.mp4.center^
+||track.mycliplister.com^
+||track.nopaperforms.com^
+||track.pnicnik.live^
+||track.pricespider.com^
+||track.qoof.com^
+||track.realtimeboard.com^
+||track.searchignite.com^
+||track.searchiq.co^
+||track.shop2market.com^
+||track.sitetag.us^
+||track.social.com^
+||track.strife.com^
+||track.td3x.com^
+||track.uc.cn^
+||track.untd.com^
+||track.uppromote.com^
+||track.venatusmedia.com^
+||track.vscash.com^
+||track.yfret.com^
+||track.yieldsoftware.com^
+||tracker-dot-optimeeze.appspot.com^
+||tracker.affirm.com^
+||tracker.arc.io^
+||tracker.beezup.com^
+||tracker.cdnbye.com^
+||tracker.downdetector.com^
+||tracker.financialcontent.com^
+||tracker.gamedock.io^
+||tracker.gamemonkey.org^
+||tracker.gleanview.com^
+||tracker.hdtvcloud.com^
+||tracker.icerocket.com^
+||tracker.idocdn.com^
+||tracker.jkstremum.xyz^
+||tracker.keywordintent.com^
+||tracker.marinsoftware.com^
+||tracker.mrpfd.com^
+||tracker.myyschool.xyz^
+||tracker.netklix.com^$script
+||tracker.nitropay.com^
+||tracker.novage.com.ua^
+||tracker.openwebtorrent.com^
+||tracker.roitesting.com^
+||tracker.services.vaix.ai^
+||tracker.softcube.com^
+||tracker.ssl0d.com^
+||tracker.timesgroup.com^
+||tracker.tubecj.com^
+||tracker.twenga.
+||tracker.unbxdapi.com^
+||tracker.wigzopush.com^
+||tracker.wpserveur.net^
+||tracker.xgen.dev^
+||trackerapi.truste.com^
+||trackicollect.ibase.fr^$third-party
+||tracking-api-4lasu2nlcq-ew.a.run.app^
+||tracking-api.hotmart.com^
+||tracking-api.mangopulse.net^
+||tracking-na.hawksearch.com^
+||tracking.adalyser.com^
+||tracking.ads.global-fashion-group.com^
+||tracking.aegpresents.com^
+||tracking.americaneagle.com^
+||tracking.audio.thisisdax.com^
+||tracking.bababam.com^
+||tracking.brandmentions.com^
+||tracking.buygoods.com^
+||tracking.cerdmann.com^
+||tracking.chilipiper.com^
+||tracking.dealeranalytics.com^
+||tracking.diginetica.net^
+||tracking.drsfostersmith.com^$third-party
+||tracking.drum.io^
+||tracking.dsmmadvantage.com^
+||tracking.edvisors.com^$third-party
+||tracking.fanbridge.com^
+||tracking.feedperfect.com^
+||tracking.g2crowd.com^
+||tracking.godatafeed.com^
+||tracking.graphly.io^
+||tracking.hivecloud.net^
+||tracking.hyros.com^
+||tracking.intentsify.io^
+||tracking.interweave.com^$third-party
+||tracking.jotform.com^
+||tracking.keywee.co^
+||tracking.leadlander.com^
+||tracking.lengow.com^
+||tracking.listhub.net^
+||tracking.livingsocial.com^
+||tracking.magnetmail.net^
+||tracking.markethero.io^
+||tracking.musixmatch.com^
+||tracking.olx-st.com^
+||tracking.pacharge.com^
+||tracking.plattformad.com^$third-party
+||tracking.plinga.de^
+||tracking.practicefusion.com^$third-party
+||tracking.quisma.com^
+||tracking.rapidape.com^
+||tracking.scenepass.com^
+||tracking.searchmarketing.com^
+||tracking.sembox.it^$third-party
+||tracking.server.bytecon.com^
+||tracking.sexcash.com^
+||tracking.sezzle.com^
+||tracking.sharplink.us^
+||tracking.skyword.com^$third-party
+||tracking.sokrati.com^
+||tracking.synthasite.net^
+||tracking.target2sell.com^
+||tracking.thehut.net^
+||tracking.waterfrontmedia.com^
+||tracking.wisepops.com^
+||tracking1.brandmentions.com^
+||tracking2.channeladvisor.com^
+||trackjs.com/agent/$script,third-party
+||trackjs.com/releases/current/tracker.js
+||trackjs.com/usage.gif?
+||trackla.stackla.com^
+||tracksmart.se^$third-party
+||tradablebits.com/pixels/
+||trading24.io/erwrtyo8blqeyz4$xmlhttprequest,domain=op.gg
+||traffic.acwebconnecting.com^
+||traffic.prod.cobaltgroup.com^
+||traffic.shareaholic.com^
+||trafficfuelpixel.s3-us-west-2.amazonaws.com^
+||trafficmanager.net/uet/tracking_script?
+||trakksocial.googlecode.com^$third-party
+||trap.skype.com^
+||traq.li/tracker/
+||travix.com/log
+||traxex.gannettdigital.com^
+||tree-nation.com/js/track.js
+||trends.newsmaxwidget.com^
+||trib.al^$image,third-party
+||trickyrock.com/redirect.aspx?pid=*&bid=$subdocument,third-party
+||triggers.wfxtriggers.com^
+||trinitymedia.ai/api/collect?
+||triplewhale-pixel.web.app^
+||tritondigital.com/ondemand/impression?
+||trk.clinch.co^
+||trk.storyly.io^
+||trk.techtarget.com^
+||trk2-wtb.swaven.com^
+||trustarc.com/cap?
+||trustarc.com/log?
+||trustcommander.net/iab-tcfapi/
+||trustedform.com/trustedform.js?provide_referrer
+||trustpilot.com/stats/
+||trx-cdn.zip.co^
+||trx.zip.co^
+||try.abtasty.com^
+||ts.tradetracker.net^
+||turnto.com/event
+||tvpage.com/tvpa.min.js
+||tvpage.com^*/__tvpa.gif?
+||twitter.com/jot.html
+||twitter.com/oct.js
+||twitter.com/scribe/
+||typeform.com/*/insights/events^
+||uadblocker.com/pixel1.php?$third-party
+||uc.cn/collect?
+||ucounter.ucoz.net^
+||ucoz.net/stat/
+||uhit.eu/id/$third-party
+||uid.mediacorp.sg^
+||uim.tifbs.net^
+||unibet.de/stan/campaign.do?*&affiliateId=$subdocument,third-party
+||units.knotch.it^
+||unpkg.com/web-vitals?
+||uptime.com/static/rum/$third-party
+||uriports.com/reports/$third-party
+||urldefense.com^$image,third-party
+||us-central1-markuphero.cloudfunctions.net^
+||usaoptimizedby.increasingly.co^
+||user.userguiding.com^
+||usercentrics.eu/session/$image
+||userexperience.thehut.net^
+||usersegment.wpdigital.net^
+||usersonline.org/ping.php?
+||userway.org/api/seo-widget/
+||userway.org/api/v1/stats
+||usizy.com/external/pageview
+||utils.global-e.com/set?
+||utt.pm/utm/
+||v-h.tv/pixel/
+||v.shopify.com^
+||va.tawk.to/log
+||validate.onecount.net^$image
+||vanilladev.com/analytics.
+||vast.com/vimpressions.js$third-party
+||vcita.com/tr_
+||vdo.ai/core/logger.php?
+||vdo.ai/core/scantrad-net/
+||vdrn.redplum.com^
+||vee24.com/c/PageBehaviour?
+||veeseo.com/tracking/
+||ventunotech.com/beacon/
+||venturify.at/pixel/
+||vercel-vitals.axiom.co^
+||vidazoo.com/aggregate?
+||vidazoo.com/event/
+||video-ad-stats.googlesyndication.com^
+||video-cdn.net/event?
+||video.google.com/api/stats/
+||videoevents.outbrain.com^
+||videoly.co^*/event/
+||videopress.com/plugins/stats/
+||vidible.tv/trk/
+||vidstream.pro/log/
+||vidstream.pro/ping/
+||viglink.com/api/ping$third-party
+||vimeocdn.com/add/player-stats?
+||vimeocdn.com/ga/
+||viralize.tv/track/
+||virgingames.com/tracker/
+||virginmedia.com^*/analytics/
+||virtueworldwide.com/ga-test/
+||virtuoussoftware.com/tracker/
+||visa.com/logging/logEvent$third-party
+||visual.ly/track.php?
+||visualstudio.com/_da.gif?
+||visualwebsiteoptimizer.com/dyn
+||visualwebsiteoptimizer.com/gv.gif?
+||visualwebsiteoptimizer.com/j.php
+||visualwebsiteoptimizer.com/server-side/track-user?
+||vivociti.com/images/$third-party
+||vizury.com/analyze/
+||vk.com/rtrg?
+||vk.com/videostats.php
+||vmixcore.com/vmixcore/playlog?
+||vmweb.net/identity.min.js
+||vo.msecnd.net/api/beYableJSv2.js
+||vooxe.com/analytics.js
+||vortex.data.microsoft.com^
+||voxmedia.com/beacon-min.js
+||vs4.com/impr.php?
+||vst.sibnet.ru^
+||vstat.borderlessbd.com^
+||vuukle.com/bq-publish?
+||vuukle.com/getGeo
+||vvhp.net/read/view.gif
+||vwdealerdigital.com/cdn/sd.js
+||w3track.com/newtrk/$third-party
+||w4o7aea80ss3-a.akamaihd.net^
+||wallkit.net^*/user/event
+||wantlive.com/pixel/
+||warnermedia.com/api/v1/events?
+||wco.crownpeak.com^
+||weather.ca/counter.gif?
+||web-tracker.smsbump.com^
+||web1.51.la^
+||webcare.byside.com^
+||webedia.fr/js/gs.js
+||webeyo.com/ipinfo
+||webgames.io/imp/
+||websdk.appsflyer.com^
+||webservices.websitepros.com^
+||webstats.thaindian.com^
+||websuccess-data.com/tracker.js
+||webtrack.chd01.com^
+||webtrack.savoysystems.co.uk^$third-party
+||webtracker.apicasystem.com^
+||webvoo.com/wt/Track.aspx
+||webvoo.com^*/logtodb.
+||webworx24.co.uk/123trace.php
+||webzel.com/counter/
+||weglot.com/pageviews?
+||wetpaint.com^*/track?
+||whooshkaa.com/identify
+||whooshkaa.com/listen/track
+||whoson.com/poll.gif
+||whoson.com/w.js
+||whosread.com/counter/
+||widgeo.net/compteur.php?
+||widgeo.net/geocompteur/
+||widgeo.net/hitparade.php
+||widgeo.net/tracking.php?
+||widget-pixels.outbrain.com^
+||widget.educationdynamics.com^
+||widgetbox.com/syndication/track/
+||widgethost.com/pax/counter.js?
+||widgets.sprinklecontent.com/v2/sprinkle.js
+||widgetserver.com/metrics/
+||widgetserver.com/t/
+||widgetserver.com^*/image.gif?
+||win.staticstuff.net^
+||witbee.com^*/collect
+||wl-pixel.index.digital^
+||wn.com/count.js
+||wogaa.sg/scripts/wogaa.js
+||wondershare.es/jslibs/track.js
+||wordmonetize.com^$third-party
+||wordpress.com/geo/
+||workers.dev/api/event
+||workers.dev/js/script.js
+||worldssl.net/reporting.js
+||worldztool.com^*/dotraceuser.php
+||wp.com/i/mu.gif$image
+||wp.com/wp-content/js/bilmur.min.js
+||wren.condenastdigital.com^
+||ws.audioeye.com^
+||ws.sharethis.com^$script
+||wsmcdn.audioeye.com^
+||wspisp.net/logger.php
+||wt.viagogo.net^
+||wtbevents.pricespider.com^
+||wtr-digital-analytics.ew.r.appspot.com^
+||x.babe.today^
+||x.disq.us^
+||x.weather.com^
+||xp2023-pix.s3.amazonaws.com^
+||yahoo.co.jp/js/s_retargeting.js
+||yahoo.com/sync/casale/
+||yandex.*/data?referrer=
+||yandex.ru/click/
+||yandex.ru/cycounter?
+||yarpp.org/pixels/
+||yext.com/plpixel?
+||yimg.com/aaq/vzm/$script,domain=news.yahoo.com
+||yimg.com/cx/vzm/cs.js
+||yimg.com/ss/vops.js
+||yimg.com/wi/ytc.js
+||yottaa.com/rapid.min.js
+||youborafds01.com/data?
+||zapcdn.space/zapret.js
+||zendesk.com/frontendevents/pv?
+||zengenti.com/tags/
+||ziffdavisb2b.com^*/tracker.js
+||zineone.com^*/event
+||zip.co/analytics
+||zoominfo.com/pixel/
+||zooplus.io/static/js/tracking-min.js
+||zope.net/resources/global/ghs_wa.js
+||zynga.com/track/
+! https://d3ward.github.io/toolz/adblock.html
+||adsdk.yandex.ru^
+||analytics-api.samsunghealthcn.com^
+||analytics.mobile.yandex.net^
+||analytics.samsungknox.com^
+||app.chat.xiaomi.net^$third-party
+||appmetrica.yandex.com^$third-party
+||click.oneplus.cn^
+||cloudfront.net/test.png
+||data.hicloud.com^$third-party
+||extmaps-api.yandex.net^
+||logbak.hicloud.com^
+||logservice.hicloud.com^
+||logservice1.hicloud.com^
+||metrics-dra.dt.hicloud.com^
+||metrics.icloud.com^
+||metrics.mzstatic.com^
+||open.oneplus.net^$third-party
+||supportmetrics.apple.com^
+||tracking.miui.com^
+||trk.pinterest.com^$third-party
+||yandexadexchange.net^
+! cloudfront
+||d10lpsik1i8c69.cloudfront.net^
+||d11bdev7tcn7wh.cloudfront.net^
+||d15kdaxu5c0hfw.cloudfront.net^
+||d169bbxks24g2u.cloudfront.net^
+||d16fk4ms6rqz1v.cloudfront.net^
+||d1733r3id7jrw5.cloudfront.net^
+||d18p8z0ptb8qab.cloudfront.net^
+||d191y0yd6d0jy4.cloudfront.net^
+||d196fri2z18sm.cloudfront.net^
+||d1af033869koo7.cloudfront.net^
+||d1cdnlzf6usiff.cloudfront.net^
+||d1clfvuu2240eh.cloudfront.net^
+||d1cr9zxt7u0sgu.cloudfront.net^
+||d1f0tbk1v3e25u.cloudfront.net^
+||d1f1eryiqyjs0r.cloudfront.net^*/track.
+||d1gp8joe0evc8s.cloudfront.net^
+||d1k8sb4xbepqao.cloudfront.net^
+||d1m6l9dfulcyw7.cloudfront.net^
+||d1n00d49gkbray.cloudfront.net^
+||d1qbbgtcslwdbx.cloudfront.net^
+||d1qnmu4nrib73p.cloudfront.net^
+||d1qpxk1wfeh8v1.cloudfront.net^
+||d1r27qvpjiaqj3.cloudfront.net^
+||d1r2sy6oc0ariq.cloudfront.net^
+||d1r55yzuc1b1bw.cloudfront.net^
+||d1rgnfh960lz2b.cloudfront.net^
+||d1ros97qkrwjf5.cloudfront.net^
+||d1t9uctetvi0tu.cloudfront.net^
+||d1vg5xiq7qffdj.cloudfront.net^
+||d1wix2gc2cgqis.cloudfront.net^
+||d1xfq2052q7thw.cloudfront.net^
+||d1yu67rmchodpo.cloudfront.net^
+||d1z9vm58yath60.cloudfront.net^
+||d20kffh39acpue.cloudfront.net^
+||d21o24qxwf7uku.cloudfront.net^
+||d21y75miwcfqoq.cloudfront.net^
+||d22v2nmahyeg2a.cloudfront.net^
+||d23p9gffjvre9v.cloudfront.net^
+||d241ujsiy3yht0.cloudfront.net
+||d24cze5sab2jwg.cloudfront.net^
+||d24rtvkqjwgutp.cloudfront.net^
+||d28g9g3vb08y70.cloudfront.net^
+||d2cpw6kwpff7n5.cloudfront.net^
+||d2ef20sk9hi1u3.cloudfront.net^
+||d2ezz24t9nm0vu.cloudfront.net^
+||d2fj3s7h83rb61.cloudfront.net
+||d2gbtcuv3w9qyv.cloudfront.net^
+||d2ibu2ug0mt5qp.cloudfront.net^
+||d2j1fszo1axgmp.cloudfront.net^
+||d2j74sjmqqyf26.cloudfront.net^
+||d2kdl5wcwrtj90.cloudfront.net^
+||d2nq0f8d9ofdwv.cloudfront.net/track.js
+||d2nxi61n77zqpl.cloudfront.net^
+||d2o67tzzxkqap2.cloudfront.net^
+||d2oh4tlt9mrke9.cloudfront.net^
+||d2r1yp2w7bby2u.cloudfront.net^
+||d2rnkf2kqy5m6h.cloudfront.net^
+||d2t77mnxyo7adj.cloudfront.net^
+||d2tgfbvjf3q6hn.cloudfront.net^
+||d2wu036mkcz52n.cloudfront.net^
+||d2wy8f7a9ursnm.cloudfront.net^
+||d2zue0pgsssbc6.cloudfront.net^
+||d31bfnnwekbny6.cloudfront.net/customers/
+||d31y97ze264gaa.cloudfront.net^
+||d34ko97cxuv4p7.cloudfront.net^
+||d34r8q7sht0t9k.cloudfront.net^
+||d35u1vg1q28b3w.cloudfront.net^
+||d36u3psykfwy91.cloudfront.net^
+||d39yds8oe4n4jq.cloudfront.net^
+||d3bj8nkfly20uo.cloudfront.net^
+||d3bo67muzbfgtl.cloudfront.net^
+||d3cgm8py10hi0z.cloudfront.net^
+||d3cxv97fi8q177.cloudfront.net^
+||d3gi6isrskhoq.cloudfront.net^
+||d3hb14vkzrxvla.cloudfront.net/health-check
+||d3iouejux1os58.cloudfront.net^
+||d3j1weegxvu8ns.cloudfront.net^
+||d3kyk5bao1crtw.cloudfront.net^
+||d3l3lkinz3f56t.cloudfront.net^
+||d3lqotgbn3npr.cloudfront.net^
+||d3m6sept6cnil5.cloudfront.net^
+||d3mapax0c3izpi.cloudfront.net/lib/ajax/events.js
+||d3mskfhorhi2fb.cloudfront.net^
+||d3n6i6eorggdxk.cloudfront.net^
+||d3oodlxb1rw3kg.cloudfront.net^
+||d3pi0tys5sdysl.cloudfront.net^
+||d3plfjw9uod7ab.cloudfront.net^
+||d3qxef4rp70elm.cloudfront.net/m.js
+||d3qztsm17pgxue.cloudfront.net^
+||d3r7h55ola878c.cloudfront.net^
+||d3s7ggfq1s6jlj.cloudfront.net^
+||d3sbxpiag177w8.cloudfront.net^
+||d3tglifpd8whs6.cloudfront.net^
+||d3uvwl4wtkgzo1.cloudfront.net^
+||d4ax0r5detcsu.cloudfront.net^
+||d761erxl2qywg.cloudfront.net^
+||d81mfvml8p5ml.cloudfront.net^
+||danv01ao0kdr2.cloudfront.net^
+||daq0d0aotgq0f.cloudfront.net^
+||dc8na2hxrj29i.cloudfront.net^
+||dc8xl0ndzn2cb.cloudfront.net^
+||dd6zx4ibq538k.cloudfront.net^
+||dggaenaawxe8z.cloudfront.net^
+||di2xwvxz1jrvu.cloudfront.net^
+||dkupaw9ae63a8.cloudfront.net^
+||dl1d2m8ri9v3j.cloudfront.net^
+||dljnjom9md7c.cloudfront.net/02/zara.js
+||dn34cbtcv9mef.cloudfront.net^
+||dnn506yrbagrg.cloudfront.net^
+||dnxlgencstz4.cloudfront.net^
+||dr3fr5q4g2ul9.cloudfront.net^
+||drlimmode9ddd.cloudfront.net^
+||dsbahmgppc0j4.cloudfront.net^
+||dtxtngytz5im1.cloudfront.net^
+||dtym7iokkjlif.cloudfront.net/dough/
+||du4rq1xqh3i1k.cloudfront.net^
+||du8783wkf05yr.cloudfront.net^
+||duu8lzqdm8tsz.cloudfront.net^
+||dy2xcjk8s1dbz.cloudfront.net^
+||dzgwautxzdtn9.cloudfront.net^
+! optimizely.com
+||optimizely.com/client_storage/
+||optimizely.com/js/geo
+||optimizely.com/log
+||optimizely.com/public/
+! firebase
+||firebase.googleapis.com^$domain=terabox.fun
+||firebaseinstallations.googleapis.com^$domain=terabox.fun
+! https://gist.github.com/tinogomes/c425aa2a56d289f16a1f4fcb8a65ea65
+! Domains linking to 127.0.0.1
+!||cefgo.com^
+!||domaincontrol.com^
+!||fbi.com^
+!||lacolhost.com^
+!||lndo.site^$third-party
+!||local.computer^
+!||local.qinlili.bid^
+!||local.sisteminha.com^
+!||localho.st^
+!!||localhost.direct^
+!||localtest.me^
+!||lvh.me^
+!||netfinity.hostedrmm.com^
+!||nip.io^$third-party
+!||ssh.town^
+!||supercalifragilisticexpialidocious.co.uk^
+!||xip.io^
+!||yoogle.com^
+! taboola
+||am-vid-events.taboola.com^
+||convsgmp.taboola.com^
+||la-sync.taboola.com^
+||nr-events.taboola.com^
+||opps.taboola.com^
+||sync.taboola.com^
+||taboola.com/?uid=
+||taboola.com/libtrc/
+||taboola.com/tb?
+||taboola.com^*/json?tim=
+||taboola.com^*/log/
+||taboola.com^*/notify-impression?$third-party
+||taboolasyndication.com/log/
+||taboolasyndication.com^*/log/
+||urc.taboolasyndication.com^
+||vidstat.taboola.com^
+||wf.taboola.com^
+! wix
+||frog.wix.com/da-client?
+||frog.wix.com/fed?
+||frog.wix.com/hls2?
+||frog.wix.com/p?
+||frog.wix.com/pre?
+||frog.wix.com^$image,ping,xmlhttprequest
+! Fingerprinting
+||ascpqnj-oam.global.ssl.fastly.net^
+||cloudfront.net/js/grin-sdk.js
+||dingxiang-inc.com/ctu-group/constid-js/index.js
+||fyrsbckgi-c.global.ssl.fastly.net^
+||ipqualityscore.com/api/$third-party
+||mhxk.com^*/main/entry.common.$script
+||mjca-yijws.global.ssl.fastly.net^
+||nofraud.com/js/device.js
+||nofraud.com^*/customer_code.js
+||poll-maker.com^*/scpolls.js
+||promo.ge/res/delivery/delivery.js
+||rc.vtex.com.br^
+||realperson.de/system/third-party/rpfp/rpfp.min.js
+||ref.dealerinspire.com^
+||resu.io/scripts/resclient.min.js
+||socital.com^*/socital.js
+||talkingdata.com^*/sdk_release.js
+||targeting.voxus.tv^
+||trwl1.com/ascripts/gcrt.js
+||vtex.com.br/rc/rc.js
+! akamai
+||akamai.com/crs/lgsitewise.js
+||akamai.net/*.babylon.com/trans_box/
+||akamai.net/chartbeat.
+||akamai.net^*/a.visualrevenue.com/
+||akamai.net^*/sitetracking/
+||akamaihd.net/*.gif?e=
+||akamaihd.net/bping.php?
+||akamaihd.net/javascripts/browserfp.
+||akamaihd.net/log?
+||akamaihd.net/push.gif?
+||akamaihd.net^*.gif?d=
+||akamaized.net/?u=
+||akamaized.net/js3/tracker.js
+||aksb-a.akamaihd.net^
+||ds-aksb-a.akamaihd.net^
+||e77lmzbqou0n-a.akamaihd.net^
+||ninja.akamaized.net^
+||pnekru6pxrum-a.akamaihd.net^
+||pxlgnpgecom-a.akamaihd.net^
+! fastly
+||7q1z79gxsi.global.ssl.fastly.net^
+||clarium.global.ssl.fastly.net^
+||dfapvmql-q.global.ssl.fastly.net^
+||fastly.net/i?
+||fastly.net/sp.js
+||vwonwkaqvq-a.global.ssl.fastly.net^
+! CPU abuse
+! https://publicwww.com/websites/%22cloudfront.net%2Fscript.js%22/
+||cloudfront.net./script.js
+||cloudfront.net/script.js
+! Seals, Websecurity, Protection etc. Unnecessary third-party scripts
+||antillephone.com^$third-party
+||beyondsecurity.com^$third-party
+||geotrust.com^$third-party
+||guarantee-cdn.com^$third-party
+||howsmyssl.com^$third-party
+||js.trendmd.com^$script,subdocument,third-party
+||legitscript.com/seals/
+||medals.bizrate.com^$third-party
+||nsg.symantec.com^$third-party
+||popup.laybuy.com^$subdocument,third-party
+||privacy-policy.truste.com^$third-party
+||scanalert.com/meter/
+||scanverify.com^$third-party
+||seal.digicert.com^$third-party
+||seal.globalsign.com^$third-party
+||seal.godaddy.com^$third-party
+||seal.networksolutions.com^$third-party
+||seal.qualys.com^$third-party
+||sealserver.trustwave.com^$third-party
+||secure.trust-guard.com^$third-party
+||securitymetrics.com^$third-party
+||shield.sitelock.com^$third-party
+||shopperapproved.com^$third-party
+||siteintercept.allegiancetech.com^
+||smart-widget-assets.ekomiapps.de^$third-party
+||trust-provider.com^*/trustlogo.js$third-party
+||trusted-web-seal.cybertrust.ne.jp^
+||trustev.com/trustev.min.js$third-party
+||verify.authorize.net^$third-party
+||verify.safesigned.com^$third-party
+||websecurity.norton.com^$third-party
+||webutation.net/js/load_badge.js
+||widgets.trustedshops.com^$third-party
+! Suspect trackers (from privacy badger)
+||jsrdn.com/s/cs.js
+! Rewrite to internal resources filters for Adblock Plus
+||d1z2jf7jlzjs58.cloudfront.net^$rewrite=abp-resource:blank-js,domain=voici.fr
+!-----------------International third-party tracking services-----------------!
+! *** easylist:easyprivacy/easyprivacy_thirdparty_international.txt ***
+/rdir.baur.de/g.html?uid=$image
+||78.46.19.203^$third-party,domain=~sprueche-zitate.net.ip
+||ablida.net^$third-party
+||adc-srv.net/retargeting.php
+||adm24.de/hp_counter/$third-party
+||advantage.digitalsunray.com^
+||aftonbladet.se/trafikfonden/
+||agitos.de/content/track?
+||analytics.audionow.de^
+||analytics.cnd-motionmedia.de^$third-party
+||analytics.gameforge.de^
+||analytics.idfnet.net^
+||analytics.loop-cloud.de^$third-party
+||analytics.media-proweb.de^
+||analytics.praetor.im^$third-party
+||andyhoppe.com/count/
+||api.fanmatics.com/event
+||api.nexx.cloud/*/session/
+||api.tv.de/*/tracking/
+||artemis-cdn.ocdn.eu^
+||audimark.de/tracking/
+||ba-content.de/cds/log/
+||bcs-computersysteme.com/cgi-local/hiddencounter/
+||beagle.prod.tda.link^
+||blacktri-a.akamaihd.net^
+||cdn.c-i.as^$script,third-party
+||cgicounter.onlinehome.de^
+||clipkit.de/metrics?
+||cloudfront.net/customers/24868.min.js
+||collector.ozeex.com^
+||collector.rn.de^
+||com.econa.com^
+||counter.1i.kz^
+||counter.blogoscoop.net^
+||counter.webmart.de^
+||ctr-iwb.nmg.de^
+||ctr-opc.nmg.de^
+||ctr.nmg.de^$third-party
+||d.adlpo.com^
+||d.nativendo.de^
+||d.omsnative.de^
+||data.econa.com^
+||data.kameleoon.io^
+||datacomm.ch^*/count.cgi?
+||djuf7jb483wz1.cloudfront.net/p/l.jpg
+||et.twyn.com^
+||events.onet.pl^
+||export.newscube.de^$~subdocument
+||fc.webmasterpro.de^$third-party
+||fd.bawag.at^
+||filmaster.tv^*/flm.tracker.min.js
+||freshclip.tv/tracking/
+||frontlineshop.com/ev/co/frontline?*&uid=
+||gameforge.de/init.gif?
+||geo.mtvnn.com^
+||geo.xcel.io^
+||giga.de/vw/$image,third-party
+||global-media.de^*/track/ai.img
+||goldsilbershop.de/go.cgi?
+||hbx.df-srv.de^
+||hittracker.org/count.php
+||hittracker.org/counter.php
+||house27.ch/counter/
+||hyteck.de/count.js
+||hyvyd.com/count$image,domain=mobile.de
+||info.elba.at^$third-party
+||insene.de/tag/$third-party
+||iqcontentplatform.de/tracking/
+||koe-vip.com/statistik/
+||live.cxo.name^
+||liveviewer.ez.no^
+||log.worldsoft-cms.info^
+||lr-port.de/tracker/
+||mapandroute.de/log.xhr?
+||marktjagd.de/proxy/trackings/
+||mastertag.kpcustomer.de^
+||mastertag.q-sis.de^
+||mehrwertdienstekompetenz.de/cp/$third-party
+||met.vgwort.de^
+||mindwerk.net/zaehlpixel.php?
+||mlm.de/counter/
+||mlm.de/pagerank-ranking/
+||myv-img.de/m2/e?
+||newelements.de/tracker/
+||nexx.cloud/play/beacon.
+||nexxtv-events.servicebus.windows.net^
+||ntmb.de/count.html?
+||oe-static.de^*/wws.js
+||omniture.eaeurope.eu^
+||omsnative.de/tracking/
+||onlex.de/_counter.php
+||onlinepresse.info/counter.php?
+||onlyfree.de^*/counterservice/
+||orbidder.otto.de^
+||ottogroup.media/ogm.nitro.
+||pixel.poptok.com^
+||plausible.ams.to^
+||plista.com/getuid?
+||plista.com/iframeShowItem.php
+||prod-mhaa.mhtr.be/public/tr/tracker.min.js
+||px.staticfiles.at^
+||pyroactive.de/counter/
+||quiz.stroeermediabrands.de/pub/$image
+||retrack.q-divisioncdn.de^
+||retresco.de^*/stats/$third-party
+||script.idgentertainment.de/gt.js
+||serverkompetenz.net/cpx.php?
+||sheego.de/ar/$third-party
+||sim-technik.de/dvs.gif?
+||sim-technik.de^*&uniqueTrackId=
+||skoom.de/gratis-counter/
+||somquery.sqrt-5041.de/tv/tracking-event
+||sp.data.funkedigital.de^
+||spark.cloud.funkedigital.de/agnes.js
+||spox.com/pub/js/track.js
+||ss4w.de/counter.php?
+||stat.clichehosting.de^
+||statistics.klicktel.de^
+||statistik.motorpresse.de^$third-party
+||statistik.simaja.de^
+||stats.blogoscoop.net^
+||stats.clickforknowledge.com^
+||stats.digital-natives.de^
+||stats.frankfurterneuepresse.de^
+||stats.united-domains.de^
+||stats.urban-media.com^
+||stats2.algo.at^$third-party
+||stilanzeigen.net/track/
+||stroeerdp.de^*_gtm.js
+||strongvpn.com/aff/
+||suedtirol.live/slc.js
+||t.etraveli.com^
+||t.nativendo.de^
+||t.quisma.com^
+||tagm.tchibo.de^
+||top50-solar.de/solarcount/
+||track2.cliplister.com^
+||track2.dulingo.com^
+||track2.mycliplister.com^
+||tracker.euroweb.net^
+||tracker.winload.de^
+||tracking-live.kr3m.com^
+||tracking.base.de^
+||tracking.emsmobile.de^
+||tracking.gameforge.de^
+||tracking.hannoversche.de^
+||tracking.mindshare.de^
+||tracking.rtl.de^
+||tracking.s24.com^
+||tracking.srv2.de^
+||tracking.webtradecenter.com^
+||trck.bdi-services.de^
+||trck.spoteffects.net^
+||trecker.aklamio.com^
+||uni-duesseldorf.de/cgi-bin/nph-count?
+||uni-leipzig.de^*/stats/
+||united-infos.net/event?
+||veeseo.com^*/url.gif?
+||veeseo.com^*/view/$image
+||vertical-n.de/scripts/*/immer_oben.js
+||verticalnetwork.de/scripts/*/immer_oben.js
+||vtrtl.de^
+||webcounter.goweb.de^
+||webstatistik.odav.de^$third-party
+||wieistmeineip.de/ip-address/$third-party
+||wo-cloud.com^$ping
+||x.bloggurat.net^
+||xnewsletter.de/count/counter.php?
+||zs.dhl.de^
+! Arabic
+||shofonline.org/javashofnet/ti.js
+! French
+||01net.com/track/
+||abs.proxistore.com^
+||affiliation.planethoster.info^$third-party
+||analytics.freespee.com^
+||analytics.valiuz.com^
+||at.360.audion.fm^
+||blogoutils.com/online-$third-party
+||bnpparibas.fr/JavascriptInsert.js
+||btstats.devtribu.fr^
+||c.woopic.com/tools/pdb.min.js
+||caast.tv/v1/record.gif?
+||calcul-pagerank.fr/client/$third-party
+||canalplus-bo.net/web/*/tracker/?
+||capping.sirius.press^
+||cdn-files.prsmedia.fr^*/xiti/
+||ced-ns.sascdn.com/diff/js/smart.js
+||cloudfront.net^$script,domain=gentside.com
+||collect-v6.51.la^
+||compteur.websiteout.net^
+||core.unit-sense.net^
+||da-kolkoz.com/da-top/track/
+||devtribu.fr/t.php?
+||dsj4qf77pyncykf2dki6isfcuy0orwhc.lambda-url.eu-west-1.on.aws^
+||e-pagerank.fr/bouton.gif?$third-party
+||e.viously.com^
+||early-birds.fr/events/
+||easydmp.net/collect_
+||easydmp.net/etag.
+||easydmp.net/get_delivery_data.
+||email-reflex.com^$third-party
+||events.newsroom.bi^
+||events.sk.ht^
+||free.fr/services/compteur_page.php?
+||houston.advgo.net^
+||humanoid.fr/register-impression?
+||i-services.net^*/compteur.php?
+||img-static.com/CERISE.gif?
+||ip7prksb2muxvmmh25t6rxl2te0tfulc.lambda-url.eu-west-1.on.aws^
+||jvc.gg^*/traffic.js
+||leguide.com/js/lgtrk-*.js
+||linguee.fr/white_pixel.gif
+||m6web.fr/statsd/
+||marktplaats.net/identity/mid.js
+||neteventsmedia.be/hit.cfm?
+||netreviews.eu/index.php?action=act_access&$third-party
+||nws.naltis.com^
+||offer.slgnt.eu^
+||optinproject.com/rt/visit/
+||osd.oxygem.it^
+||p.a2d.io/plx.js
+||pagesjaunes.fr/stat/
+||piximedia.com^$third-party
+||qiota.com/api/event
+||rs.smc.tf^
+||scriptsgratuits.com/sg/stats/
+||service-webmaster.fr/cpt-visites/$third-party
+||socialrank.fr/client/$third-party
+||static-od.com/setup/$third-party
+||stats-dc1.frz.io^
+||stats-factory.digitregroup.io^
+||stats.ipmgroup.be^
+||stats.macg.io^
+||stats.tipser.com^
+||t.360.audion.fm^
+||t.ofsys.com^
+||tag.agrvt.com^
+||tag.goldenbees.fr^
+||tag.leadplace.fr^
+||tim.nextinpact.com^
+||track.byzon.swelen.net^$third-party
+||track.kyoads.com^
+||track.laredoute.fr^$image
+||track.myli.io^
+||tracking.ecookie.fr^
+||tracking.kdata.fr^
+||tracking.lqm.io^
+||tracking.netvigie.com^
+||tracking.voxeus.com^
+||trjs.mediafin.be/loader/trmfn-loader.js
+||trk.a-dsp.com^
+||trk.adbutter.net^
+||tsphone.biz/pixelvoleur.jpg?
+||veoxa.com/get_trackingcode.
+||vidazoo.com/report/?
+||viously.com^*/mt?
+||visitping.rossel.be^
+||webreseau.com/impression.asp?
+||webtutoriaux.com/services/compteur-visiteurs/index.php?$third-party
+||wifeo.com/compteurs/$third-party
+||woopic.com/Magic/o_vr.js
+||wrapper.lemde.fr^$third-party
+||ws3.smartp.com^
+||zebestof.com^$third-party
+! Belarusian
+||minsk-in.net/counter.php?
+! Croatian
+||aff*.kolektiva.net^
+! Chinese
+-logging.nextmedia.com^
+||120.132.57.41/pjk/pag/ys.php
+||163.com/sn.gif?
+||3.cn/cesu/r?
+||360.cn/mapping_service?
+||4gtv.tv/js/ga_
+||adv-sv-stat.focus.cn^
+||aixifan.com/acsdk/log.min.js?
+||alicdn.com/tkapi/click.js
+||alimama.cn/inf.js
+||alipay.com/common/um/lsa.swf
+||analytics.meituan.net^
+||atanx.alicdn.com^
+||atom-log.3.cn^
+||baidu.com/cpro/ui/c.js
+||baidu.com/cpro/ui/f.js
+||baidu.com/h.js?
+||baidu.com/hm.gif?
+||baidu.com/js/m.js
+||baidu.com/js/o.js
+||baidu.com/x.js?
+||beacon.sina.com.cn^
+||beaconcdn.qq.com^
+||bokecc.com/flash/playlog?
+||bokecc.com/flash/timerecorder?
+||busuanzi.ibruce.info^$third-party
+||bzclk.baidu.com^
+||c.holmesmind.com^
+||cbsi.com.cn/js/dw.js
+||cdnmaster.com/sitemaster/sm360.js
+||chuzushijian.cn/c.php
+||click.bokecc.com^
+||click.taobao.com^$script
+||cms.grandcloud.cn^$third-party
+||cnzz.com/c.php?
+||collector2c.zhihuishu.com^
+||counter.pixplug.in^$third-party
+||cpro.baidustatic.com^$script,domain=sohu.com
+||cri.cn/js/a1.js
+||csbew.com^$third-party
+||csdn.net^*/counter.js
+||d17m68fovwmgxj.cloudfront.net^
+||da.netease.com^
+||datacollector-dra.dt.hicloud.com^
+||dcbpm.suning.cn^
+||dup.baidustatic.com^
+||eclick.baidu.com^
+||epro.sogou.com^
+||etwun.com:8080/counter.php?
+||experiments.sparanoid.net^
+||fourier.taobao.com^
+||g.yccdn.com^
+||gias.jd.com/js/td.js
+||haostat.qihoo.com^
+||hudong.com/flux.js
+||hyrankhit.meldingcloud.com^
+||ia.51.la^
+||ifengimg.com/sta_collection.*.js
+||imp.ad-plus.cn^
+||imp.go.sohu.com^
+||imp.optaim.com^
+||iqiyi.com/pixel?
+||itc.cn/pv/
+||ixigua.com/at/log/
+||js.letvcdn.com/js/*/stats/
+||js.static.m1905.cn/pingd.js
+||log-api.cli.im^
+||log.hiiir.com^
+||log.qvb.qcloud.com^
+||log.tagtic.cn^
+||mcs.zijieapi.com^
+||mlt01.com/cmp.htm$third-party
+||mon.zijieapi.com^
+||msg.71.am^
+||netease.com/track/
+||netease.com/web/performance?
+||nos.netease.com/udc-web/*.log.js
+||p.aty.sohu.com^
+||p.tencentmind.com^
+||pos.baidu.com^
+||pstatp.com^*/raven.js
+||pstatp.com^*/ttstatistics.
+||pv.hd.sohu.com^
+||pv.kuaizhan.com^
+||pv.sohu.com^
+||px.effirst.com^
+||qbox.me/vds.js
+||qidian.qq.com/report/
+||qq.com/speed
+||r.sax.sina.com.cn^
+||report.meituan.com^
+||s.cdin.me/i.php
+||sitemaji.com/nownews.php?
+||sobeycloud.com/Services/Stat.
+||sohu.com/pvpb.gif?
+||sohu.com/stat/
+||ssac.suning.com^
+||stargame.com/g.js
+||stat.ws.126.net^
+||stats.hanmaker.com^
+||sugs.m.sm.cn^
+||t.hypers.com.cn^
+||t.rainide.com^
+||tanx.com/t/tanxclick.js
+||tanx.com/t/tanxcollect.js
+||taobao.com/tracker.
+||tce.alicdn.com^
+||tieszhu.com/e.html
+||tns.simba.taobao.com^
+||toruk.tanx.com^
+||tr.n2.hk^
+||track.ra.icast.cn^
+||track.storm.mg^
+||track.tomwx.net^
+||track.unidata.ai^
+||tracker-00.qvb.qcloud.com^
+||tracking.cat898.com^
+||tracklog.58.com^
+||trail.71baomu.com^
+||union.360.cn/1899.js
+||videostats.kakao.com^
+||w3t.cn^*/fx.js
+||web-trace.ksapisrv.com^
+||webstat.qiumibao.com^
+||webtrack.pospal.cn^
+||wlog.kuaishou.com^
+||yigouw.com/c.js
+! Croatian
+||tracking.vid4u.org^
+! Czech
+||a.centrum.cz^
+||bisko.mall.tv^
+||c.seznam.cz^
+||counter.cnw.cz^
+||h.imedia.cz^
+||h.seznam.cz/hit/
+||h.seznam.cz/js/dot-small.js
+||hit.skrz.cz^
+||i.imedia.cz^
+||log.cpex.cz^
+||log.idnes.cz^
+||mer.stdout.cz^
+||pixel.biano.cz^
+||pixel.cpex.cz^
+||r2b2.cz/events.php?
+||ssp.seznam.cz^
+||stat.cncenter.cz^
+||stat.kununu.cz^$third-party
+||t.leady.com^
+||t.leady.cz^
+||track.leady.cz^
+! Danish
+||bbl.k.dk/tracking/
+||blogtoppen.dk^*/bt_tracker.js
+||counter.nope.dk^$third-party
+||log.ecgh.dk^
+||newbie.dk/topref.php?
+||newbie.dk^*/counter.php?
+||sslproxy.dk^*/analytics.js
+||statistics.jfmedier.dk^
+||trckr.nordiskemedier.dk^
+||wee.dk/modules/$third-party
+! Dutch
+||adult-trade.nl/lo/track.php
+||analytics.belgacom.be^
+||apm.tnet.nl^
+||bbvms.com/zone/js/zonestats.js
+||botndm.nl^*/init.min.js
+||dmtgo.upc.biz^
+||hottraffic.nl^$third-party
+||marktplaats.net/cnt/
+||mediahuis.be/cxense/
+||npo.nl/divolte/tt/web-event?$domain=zapp.nl
+||pijper.io/visits/
+||rmgdapfnccsharpprd.azurewebsites.net^
+||sp.dpgmedia.net^
+||stat.24liveplus.com^
+||statistics.rbi-nl.com^
+||trkr.shoppingminds.net^
+||ugent.be/js/log.js
+! Estonian
+! Finnish
+||almamedia.fi^*/scroll-monitor.min.js
+||dnt-userreport.com^
+||er.sanoma-sndp.fi/stats/
+||er.sanoma-sndp.fi/v2/stats/
+||nelonenmedia.fi/logger/
+||tags.op-palvelut.fi^
+||vine.eu/track/
+! Georgian
+||links.boom.ge^
+! Greek
+||glami.gr/js/compiled/pt.js
+||kwikmotion.com^*/videojs-kwikstat.min.js
+||stats-real-clients.zentech.gr^
+! Hebrew
+||walla.co.il/stats/
+! Hungarian
+||gpr.hu/pr.pr?
+||heartbeat.pmd.444.hu^
+||pixel.barion.com^
+||rum.marquardmedia.hu^
+||videostat-new.index.hu^
+||videostat.index.hu^
+! Icelandic
+! Indian
+||indiatimes.com/pixel?
+||tvid.in/log/
+! Indonesian
+||mediaquark.com/tracker.js
+! Italian
+||alice.it/cnt/
+||analytics.competitoor.com^
+||analytics.eikondigital.it^
+||analytics.gtechgroup.it^
+||analytics00.meride.tv^
+||analytics2-3-meride-tv.akamaized.net^
+||analytics2-meride-tv.akamaized.net^
+||aruba.it/servlet/counterserver?
+||audit.shaa.it^
+||bemail.it^*/analytics.js
+||blasterzone.it/analytics/
+||click.kataweb.it^
+||cnt.iol.it^
+||digiland.it/count.cgi?
+||diritalia.com^*/seosensor.js
+||dmpcdn.el-mundo.net^
+||dmpmetrics.rcsmetrics.it^
+||eage.it/count2.php?
+||eventsink.api.redbee.live^
+||evnt.iol.it^
+||fb_servpub-a.akamaihd.net^
+||gazzettaobjects.it^*/tracking/
+||glomera.com/stats
+||gmdigital.it/vtrack-staging.js
+||heatmaps.lcisoft.it^
+||heymatic.com^$third-party
+||httdev.it/e/c?
+||iltrovatore.it/vp.htm
+||iol.it^*/clickserver.js
+||iolam.it/service/trk
+||iolam.it/trk
+||italiaonline.it/script/ga.
+||italiaonline.it/script/iol-body.js
+||limone.iltrovatore.it^
+||livestats.matrix.it^
+||log.edidomus.it^
+||logger.kataweb.it^
+||mibatech.com/track/
+||mrwebmaster.it/work/stats.php?
+||nanopress.it/lab.js
+||nanostats.nanopress.it^
+||net-parade.it/tracker/
+||plausible.citynews.ovh^
+||plug.it/tracks/
+||plug.it^*/iol_evnt.
+||plug.it^*/iol_evnt_
+||plug.it^*/track_
+||plug.it^*/tracking_
+||quinet.it/counter/
+||rcsobjects.it/rcs_tracking-service/v1/distro/HTML/trservice.shtml
+||rd.alice.it^
+||redbee.serverside.ai^$image
+||sem.triboomedia.it^
+||sembox.it/js/sembox-tracking.js
+||stat.acca.it^
+||stat.valica.it^
+||stats.itsol.it^
+||stats.rcsobjects.it^
+||stats2.*.fdnames.com^
+||tag.triboomedia.it^
+||tourmake.it^*/stat/
+||tourmake.it^*/stats?
+||tr.bt.matrixspa.it^
+||track.cedsdigital.it^
+||track.eadv.it^
+||track.veedio.it^
+||track.youniversalmedia.com^
+||tracker.bestshopping.com^
+||tracker.iltrovatore.it^
+||tracker.thinkermail.com^
+||tracking.trovaprezzi.it^
+||tracks.arubamediamarketing.it^
+||triboomedia.it^*/Bootstrap.js
+||videomatictv.com/imps/
+||vppst.iltrovatore.it^
+||webbificio.com/add.asp?
+||webbificio.com/wm.asp?
+||websolutions.it/statistiche/
+||wmtools.it/wmtcounter.php?
+||wopweb.net/services/counters/
+! Japanese
+||199.116.177.156^$domain=~fc2.jp.ip
+||a.o2u.jp^
+||ac.prism-world.jp.net^
+||ad.daum.net^
+||affiliate.rakuten.co.jp^$script,third-party
+||analytics-beacon.p.uliza.jp^
+||analytics.contents.by-fw.jp^
+||analytics.liveact.cri-mw.jp^
+||analytics.livesense.marketing^
+||analytics.partcommunity.com^
+||analyzer51.fc2.com^
+||api.all-internet.jp^$third-party
+||api.popin.cc/conversion2.js
+||asumi.shinobi.jp^
+||b.karte.io^
+||b.sli-spark.com^
+||b0.yahoo.co.jp^
+||bidder.mediams.mb.softbank.jp^
+||blogroll.livedoor.net/img/blank.gif?
+||bridge-ashiato.appspot.com/beacon/
+||bs.nakanohito.jp^
+||buzzurl.jp/api/counter/
+||bvr.ast.snva.jp^
+||bvr.snva.jp^
+||c-rings.net^$script,third-party
+||clipkit.co/clipkit_assets/beacon-
+||cloudfunctions.net/trackEvent
+||cnobi.jp^*/js/imp.
+||codemarketing.cloud/rest/
+||cookie.sync.usonar.jp^
+||counter2.blog.livedoor.com^
+||crossees.com^
+||cs.nakanohito.jp^
+||delivery.satr.jp/event/
+||docomo.ne.jp/scripts/retargeting/retargeting.js
+||e-nls.com/disp_cnt.php
+||estore.jp/beacon/
+||ev.tpocdm.com^
+||flux-cdn.com/client/ukiuki/flux_wikiwiki_AS_TM_AT.min.js
+||future-shop.jp/rview.gif?
+||hatmiso.net^$third-party
+||ip2c.landscape.co.jp^
+||ipcheck.blogsys.jp^
+||jal.co.jp/common_rn/img/rtam.gif
+||jal.co.jp/common_rn/js/rtam.js
+||kccsrecommend.site/torimochi_log/
+||kitchen.juicer.cc^
+||l-tike.com/akam/$script
+||lcs.comico.jp^$image
+||line-scdn.net^*/line_tag/
+||line.me/tag.gif$image
+||livedoor.com/counter/
+||log.codemarketing.cloud^
+||log.f-tra.com^
+||log.gs3.goo.ne.jp^
+||log.popin.cc^
+||log000.goo.ne.jp^
+||macromill.com/imp/
+||mofa.go.jp^*/count.cgi?
+||monipla.com/launch.js
+||moshimo.com^*/impression?
+||omt.shinobi.jp^
+||otoshiana.com/ufo/
+||panda.kasika.io^
+||pia.jp/akam/$script
+||pia.jp/images/pt.gif$image
+||popin.cc/iframe/piuid.html
+||popin.cc/js/pixel.js
+||popin.cc/PopinService/Logs/
+||popin.cc/retarget/
+||popin.cc/test/popin_img_m.js
+||popin.cc/test/popin_send_cookie_set_fail.js
+||quant.jp/track/
+||rakuten-static.com/com/rat/
+||rasin.tech/heatmap-
+||rasin.tech/scroll-logs/
+||rcm.shinobi.jp^
+||rd.rakuten.co.jp^$script
+||reports-tsi.tangerine.io^
+||reproio.com^$third-party
+||resultspage.com/js/sli-spark.js
+||rlog.popin.cc^
+||rtg-adroute.focas.jp^
+||s.dc-tag.jp^
+||s.yimg.jp/images/listing/tool/cv/ytag.js
+||sankei-digital.co.jp/log?
+||sankei.co.jp/js/privacy/sando.js
+||script-sh.d2cdm.jp^
+||seesaa.jp/ot_square.pl?
+||shinobi.jp/track?
+||shinobi.jp/zen?
+||sitest.jp/tracking/
+||smart-bdash.com/receptions/action/impression
+||smart-bdash.com/tracking-script/
+||snva.jp/api/bcon/basic?
+||snva.jp/javascripts/reco/
+||speee-ad.akamaized.net^
+||spnx.jp/spnx-logger.js
+||stats.streamhub.io^
+||storage.googleapis.com/rasin/*/hm.js
+||sweet-candy.jp/c.php?$third-party
+||sync.shinobi.jp^
+||sysmon.kakaku.com^
+||t.adlpo.com^
+||t.felmat.net^$third-party
+||t.seesaa.net^
+||tag.cribnotes.jp^
+||targeting.focas.jp^
+||tr.c-tag.net^
+||tr.slvrbullet.com^
+||track.list-finder.jp^
+||track.span-smt.jp^
+||track.thebase.in^
+||tracker-rec.smart-bdash.com^
+||tracker.520call.me^
+||tracker.durasite.net^
+||tracker.shanon-services.com^
+||tracker.smartseminar.jp^
+||trk.fensi.plus^
+||uh.nakanohito.jp^
+||userdive.com^$third-party
+||webbc.fivecdm.com^
+||webtracker.jp^$third-party
+||x9.shinobi.jp^
+||yahoo.co.jp/js/retargeting.js
+! Korean
+||acelogger.heraldcorp.com^
+||cafe24.com/cfa.js
+||cafe24.com/weblog.js
+||cm-exchange.toast.com^
+||event.hackle.io^
+||log.adplex.co.kr^
+||log.cizion.com^
+||log.mofa.go.kr^
+||log.targetpush.co.kr^
+||logger.bzu.kr^
+||logs-partners.coupang.com^
+||megadata.co.kr^
+||mtag.mman.kr^
+||naver.com/mcollector/
+||ngc1.nsm-corp.com^
+||performanceplay.co.kr^
+||pxl.retaku.net^
+||recobell.io/rest/logs?
+||saluton.cizion.com^
+||sas.nsm-corp.com^
+||skplanet.com/pixel?
+||skplanet.com/pixelb?
+||teralog.techhub.co.kr^
+||tracker.adbinead.com^
+||tracker.digitalcamp.co.kr^
+||tracking.adweb.co.kr^$third-party
+! Latvian
+||counter.hackers.lv^
+||pmo.ee/stats/
+||salidzini.lv^*/logo_button.gif?$third-party
+! Lithuanian
+! Norwegian
+||cis.schibsted.com^
+||collect.adplogger.no^
+||ish.tumedia.no^
+||log.medietall.no^
+! Persian
+||1abzar.ir/abzar/tools/stat/
+||analytics.aasaam.com^
+||webgozar.com/c.aspx*&t=counter
+||webgozar.ir/c.aspx*&t=counter
+! Polish
+||analytics.ceneo.pl^
+||analytics.greensender.pl^$third-party
+||cafenews.pl/mpl/static/static.js?
+||cmp.dreamlab.pl^
+||dsg.interia.pl^
+||hit.interia.pl^
+||liczniki.org/hit.php
+||pixel.homebook.pl^
+||pixel6.wp.pl^
+||ppstatic.pl^*/track.js
+||px.wp.pl^
+||scontent.services.tvn.pl^
+||snrbox.com/tck/
+||stats.asp24.pl^
+||stats.media.onet.pl^
+||stats.ulixes.pl^
+||statystyki.panelek.com^
+||tp.convertiser.com^
+||tracking.novem.pl^
+||trc.gpcdn.pl^
+||wymiana.org/stat/
+||youlead.pl/st?browserid
+! Portuguese
+||7gra.us/path-tracker-js/
+||ad-tracker-api.luizalabs.com^
+||analytics-coletor-site.ojc.com.br^
+||analytics-stamp.confi.com.vc^
+||analytics.spun.com.br^
+||b2w.io/event/
+||biggylabs.com.br/track-api/v2/track/site?
+||collect.chaordicsystems.com^
+||events.chaordicsystems.com^
+||hitserver.ibope.com.br^
+||jsuol.com/rm/clicklogger_
+||linximpulse.net/impulse/
+||lurker.olx.com.br^
+||melhorplano.net/scripts/tracker/
+||nctrk.abmail.com.br^
+||netdeal.com.br/open/event/
+||neurotrack.neurolake.io^
+||sat.soluall.net^
+||segmentor.snowfox-ai.com^
+||statig.com.br/pub/setCookie.js?
+||statistic.audima.co^
+||stats.gridmidia.com.br^
+||tags.cmp.tail.digital^
+||terra.com.br/metrics/
+||track.noddus.com^
+||tracker.tolvnow.com^
+||trrsf.com.br/metrics/
+||visit-prod-us.occa.ocs.oraclecloud.com^
+||webstats.sapo.pt^
+||xl.pt/api/stats.ashx?
+! Romanian
+||7w.ro/js/trk.js
+||enginey.altex.ro/events/
+||onnetwork.tv/cnt/
+||pixel.biano.ro^
+||profiling.avandor.com^
+||t5.ro/static/$third-party
+||top.skyzone.ro^
+||views.cancan.ro^
+||vlogs.deja.media^
+! Russian
+|http://a.pr-cy.ru^$third-party
+|https://a.pr-cy.ru^$third-party
+||1l-hit.mail.ru^
+||7host.ru/tr/*?r=$third-party
+||ad.mail.ru^$image,~third-party
+||agates.ru/counters/
+||all-top.ru/cgi-bin/topcount.cgi?
+||anycent.com/analytics/
+||api.vp.rambler.ru/events/
+||autoretro.com.ua/smtop/
+||awaps.yandex.ru^
+||banstat.nadavi.net^
+||bigday.ru/counter.php?
+||bitrix.info/bx_stat
+||browser-updater.yandex.net^
+||c.bigmir.net^
+||cdn-rum.ngenix.net^
+||client-analytics.mts.ru^
+||climatecontrol.ru/counters/
+||cnstats.cdev.eu^
+||cnt.logoslovo.ru^
+||cnt.nov.ru^
+||cnt.rambler.ru^
+||cnt.rate.ru^
+||count.yandeg.ru^
+||counter.insales.ru^
+||counter.megaindex.ru^
+||counter.photopulse.ru^
+||counter.pr-cy.ru^
+||counter.reddigital.ru^
+||crm-analytics.imweb.ru^
+||d.wi-fi.ru^
+||dbex-tracker-v2.driveback.ru^
+||dp.ru/counter.gif?
+||dxb.to/logger/
+||emoment.net/cnt/
+||error.videonow.ru^
+||events.auth.gid.ru^
+||g4p.redtram.com^
+||gainings.biz/counter.php?
+||gde.ru/isapi/tracker.dll?
+||hubrus.com^$third-party
+||ifolder.ru/stat/?
+||imgsmail.ru/gstat?
+||infopolit.com/counter/
+||inforotor.net/rotor/
+||ip.up66.ru^
+||izhevskinfo.ru/count/
+||k50.ru/tracker/
+||karelia.info/counter/
+||kraken.rambler.ru^
+||kvartirant.ru/counter.php?
+||likemore-go.imgsmail.ru^$image
+||linestudio.ru/counter/
+||logs.viavideo.digital^
+||mediaplus.fm/cntr.php?
+||metka.ru/counter/
+||metrics.aviasales.ru^
+||mymed.su/counter/
+||mymetal.ru/counter/
+||myrealty.su/counter/
+||niknok.ru/count.asp?
+||onlines.su/counter.php?
+||open.ua/stat/
+||penza-online.ru^*/userstats.pl?
+||pinnacle.com/ru/?btag=
+||piper.amocrm.ru^
+||pluso.ru/counter.php?
+||pluso.ru/ping.php?
+||prime.rambler.ru^$~script
+||promworld.ru^*/counter.php?
+||properm.ru/top/counter_new.php?
+||r.mail.ru^$image
+||rambler.ru/counter.js
+||redtram.com/px/
+||retailrocket.ru/content/javascript/tracking.js
+||s.agava.ru^
+||s.holm.ru/stat/
+||scnt.rambler.ru^
+||scounter.rambler.ru^
+||sepyra.com^$third-party
+||sishik.ru/counter.php?
+||sp.aviasales.com^
+||sp.aviasales.ru^
+||st.hbrd.io^
+||stainlesssteel.ru/counter.php?
+||stascorp.com/stat/
+||stat.eagleplatform.com^
+||stat.rum.cdnvideo.ru^
+||stat.sputnik.ru^
+||stat.tvigle.ru^
+||statistics.fppressa.ru^
+||stats-*.p2pnow.ru^
+||stats.tazeros.com^
+||stats2.videonow.ru^
+||subscribe.ru/1.gif/$image
+||t1.trex.media^
+||tags.soloway.ru^
+||target.mirtesen.ru^
+||target.smi2.net^
+||target.smi2.ru^
+||tbe.tom.ru^
+||telemetry.jivosite.com^
+||tms-st.cdn.ngenix.net^
+||tms.dmp.wi-fi.ru^
+||top.elec.ru^
+||track.recreativ.ru^
+||tracker.comagic.ru^
+||tracking.gpm-rtv.ru^
+||tracking.retailrocket.net^
+||traktor.ru^*/counter.php?
+||uc.xddi.ru^
+||ulogin.ru/js/stats.js
+||umnico.com/tracker/
+||upstats.yadro.ru^
+||uptolike.com/widgets/*/imp?
+||visitor-microservice.ext.p-a.im^
+||visor.sberbank.ru^
+||webtrack.biz^$third-party
+||wl-analytics.tsp.li^
+||xn--e1aaipcdgnfsn.su^*/counter.php
+||yandeg.ru/count/
+||yandex.net/expjs/latest/exp.js
+||yandex.ru/metrika/
+||zahodi-ka.ru/ic/index_cnt.fcgi?
+||zahodi-ka.ru^*/schet.cgi?
+! Serbian
+||contentexchange.me/static/tracker.js
+||hits.tf.rs^
+||moa.mediaoutcast.com^
+||w4m.rs/tracker.js
+! Slovak
+||stat.ringier.sk^
+! Slovene
+! Spanish
+||1to1.bbva.com^
+||ab.blogs.es^
+||advgo.net/hits/
+||advgo.net/mushroom/
+||analitica.webrpp.com^
+||analytics.lasegunda.ecn.cl^
+||analytics.neoogilvy.uy^
+||bpt.webedia-group.com^
+||citiservi.es/adstrack?
+||collector-videoplayer.5centscdn.net^
+||contadores.miarroba.com^
+||contadores.miarroba.es^
+||creatives.sunmedia.tv^
+||ctx.citiservi.es^
+||datanoticias.prisasd.com^
+||digitalproserver.com/mango-web-metrics/
+||enetres.net/StatisticsV1/
+||epimg.net/js/vr/vrs.
+||g-stats.openhost.es^
+||mat.socy.es^
+||mdstrm.com/js/lib/streammetrics.js
+||mtm.qdqmedia.com^
+||pub.servidoresge.com^
+||recogerconsentimiento.com/consent/
+||report.botm.transparentedge.io^
+||rt.cdnmedia.tv^
+||s3wfg.com/js/vortexloader.js
+||smarte.rs/log
+||sp.vtex.com^
+||stats.administrarweb.es^
+||stats.miarroba.info^
+||stats.qdq.com^
+||stats.sec.telefonica.com^
+||tag.shopping-feed.com^
+||track.sunmedia.tv^
+||track.tappx.com^
+||tracker.thinkindot.com^
+||tracking.smartmeapp.com^
+||trsbf.com/static/fbs.min.js
+||webpixel.smartmeapp.com^
+! Swedish
+||aftonbladet.se/blogportal/view/statistics?$third-party
+||collector.schibsted.io^
+||eniro.com/pixel/
+||evt-api.ntm.eu^
+||vizzit.se^$third-party
+! Tajik
+||pixel.smartmedia.tj^
+! Thai
+||sal.isanook.com^
+||stat.matichon.co.th^
+! Turkish
+||analitik.bik.gov.tr^
+||analytics.kkb.com.tr^
+||collector.wawlabs.com^
+||hulyagedikci.com/vhit.php?
+||iyzipay.com/buyer-protection/assets/js/analytics.js
+||izinal.com/log
+||statistics.daktilo.com^
+||stats.vidyome.com^
+||tracking.venturify.at^
+! Ukranian
+||informers.sinoptik.ua^
+||mgz.com.ua/counter.php?
+||top.zp.ua/counter/
+||tracker.prom.ua^
+||webvitals.luxnet.ua^
+! Vietnamese
+||accesstrade.vn/js/trackingtag/
+||analytics.yomedia.vn^
+||countervov.emitech.vn^
+||f-emc.ngsp.gov.vn^
+||fpt.shop/fa_tracking.js
+||px.dmp.zaloapp.com^
+||st-a.cdp.asia^
+||tracking.aita.gov.vn^
+||tracking3.vnncdn.net^
+||za.zalo.me^
+||za.zdn.vn^
+||zalo.me/v3/w/_zaf.gif
+!-----------------Individual tracking systems-----------------!
+! *** easylist:easyprivacy/easyprivacy_specific.txt ***
+||123rf.com/apicore-index/traffic_log
+||342251b-beta.perplexity.ai/api/$xmlhttprequest
+||40svintageporn.com/hit
+||4hds.com/js/camstats.js
+||4shared.com/js/d1VisitsCounter.4min.js
+||9gag.com/event/
+||9gag.com/track/
+||a-reporting.nytimes.com^
+||a.electerious.com^
+||a.tellonym.me^
+||a10.nationalreview.com^
+||aa.avvo.com^
+||aawsat.com/pageview/
+||aax-eu-dub.amazon.com^$script
+||aax-us-iad.amazon.com^$script
+||ab-machine.forbes.com^
+||ab.fanatical.com^
+||abcnews.com/assets/dtci/js/abcnews_visitorId.js
+||abcnews.com/assets/dtci/js/at.js
+||abebooks.com/timer.gif?
+||about.me/track?
+||abysscdn.com/cdn-cgi/trace
+||academia.edu/record_hit
+||accor.com/g/collect?
+||accuterm.com/data/stat.js
+||acronymfinder.com/~/tr.ashx
+||activate.latimes.com/pc/caltimes/?pulse2001=
+||active.com/ig.track.js
+||activity.fiverr.com^
+||adalytics.io/api/view
+||adblockeronstape.me/stat/
+||adblockeronstreamtape.me/stat/
+||adblockeronstreamtape.xyz/stat/
+||adblockeronstrtape.xyz/stat/
+||adblockplustape.xyz/stat/
+||adblockstreamtape.art/stat/
+||adblockstreamtape.fr/stat/
+||adblockstreamtape.site/stat/
+||adblocktape.online/stat/
+||adblocktape.store/stat/
+||adblocktape.wiki/stat/
+||adc-js.nine.com.au^
+||adguard.com/-/event/
+||adl.bankofthewest.com^
+||adobe.io/system/log
+||adobe.io/web/v1/metrics
+||adtech-events.bookmyshow.com^
+||adv.drtuber.com^
+||advancedmp3players.co.uk/themes/basic/js/analytics.js
+||adweek.com/wp-content/plugins/adw-parsley/
+||aegis.trovo.live^
+||aerlingus.com/ahktqsewxjhguuxe.js
+||affiliates.vpn.ht^
+||agoda.net/v2/track
+||aim.cloudflare.com/__log
+||airtable.com/internal/
+||airtel.in/analytics/pixel?
+||aiv-delivery.net/Events/
+||aiv-delivery.net/v1/ReportEvent
+||akamaihd.net/paay6hyr.gif?
+||alb.reddit.com^
+||algolia.net/1/isalive?
+||alicdn.com/AWSC/et/
+||aliexpress.com/ts?
+||alipay.com/web/bi.do?ref=
+||aljazeera.com/thirdparty/nr.js
+||allaboutberlin.com/whoisthere.js
+||allevents.in/actracker/
+||alljapanesepass.com/ascripts/gcu.js
+||alljapanesepass.com/rstat
+||als-svc.nytimes.com^
+||altruja.de/js/micro/integration-ga.js
+||alwayslucky.com/platform/webvitals
+||amazon.com/1/aiv-web-player/1/OE^
+||amazon.com/1/events/$domain=~aws.amazon.com
+||amazon.com/empty.gif?$image
+||americanexpress.com/beacon
+||amethyst.zappos.com^
+||amiunique.org/analytics.js
+||amnesty.org/collect/
+||ampltd.top.gg^
+||ampltd2.medal.tv^
+||analyselog.dx.com^
+||analytics-api.dvdfab.
+||analytics-batch.blitz.gg^
+||analytics-proxy.springboard.com^
+||analytics-tracking.meetup.com^
+||analytics-wcms.joins.net^
+||analytics-zone-1.api.leadfamly.com^
+||analytics.academy.com^
+||analytics.adfreetime.com^
+||analytics.archive.org^
+||analytics.brave.com^
+||analytics.chase.com^
+||analytics.cookiefirst.dev^
+||analytics.designspiration.com^
+||analytics.faceitanalytics.com^
+||analytics.footballdb.com^
+||analytics.freemake.com^
+||analytics.gamesdrive.net^
+||analytics.getshogun.com^
+||analytics.global.sky.com^
+||analytics.hashnode.com^
+||analytics.kaggle.io^
+||analytics.kooapp.com^
+||analytics.makeitmeme.com^
+||analytics.maxroll.gg^
+||analytics.ml.homedepot.ca^
+||analytics.mouthshut.com^
+||analytics.nike.com^
+||analytics.ovh.com^
+||analytics.oyorooms.com^
+||analytics.pgncs.notion.so^
+||analytics.plex.tv^
+||analytics.productreview.com.au^
+||analytics.realestate.com.au^
+||analytics.send.cm^
+||analytics.silktide.com^
+||analytics.slashdotmedia.com^
+||analytics.synchrony.com^
+||analytics.synedat.com^
+||analytics.ticketmaster.
+||analytics.tradedoubler.com^
+||analytics.vedantu.com^
+||analytics.wavebox.io^
+||analytics.yugen.to^
+||ancestry.com/core.js
+||androidfilehost.com/libs/otf/stats.otf.php?
+||anon-stats.eff.org^
+||antiadtape.com/stat/
+||apartments.com/clientvisit/al.gif?
+||apester.com/cookie/bundle.js
+||api-hotmart-tracking-manager.hotmart.com^
+||api-js.mixpanel.com^
+||api-router.kaspersky-labs.com/logger2/metrics/
+||api.ffm.to/sl/e/$image
+||api.narrativ.com/favicon.ico
+||api.privacyguides.net^
+||app-bnkr.b-cdn.net/js/lv.js
+||app.box.com/app-api/split-proxy/api/metrics
+||app.box.com/gen204
+||appanalysis.banggood.com^
+||archive.org/includes/analytics.js
+||arttrk.com/pixel/
+||as.coinbase.com/metrics
+||assets.instacart.com^
+||atlas.samsung.com/dls2/dtransf/wl?
+||atrack.allposters.com^
+||ats.alot.com^
+||audacy.com/data-events/
+||aurum.tirto.id^
+||auth.services.adobe.com/signin/v1/audit
+||autotrader.com/pixall/
+||avitop.com/aviation/hitlist.asp
+||b629.electronicdesign.com^
+||backcountry.com/api/log
+||baidu.com/static/h.gif
+||baidu.com^*/mwb2.gif?
+||baidu.com^*/wb.gif?
+||banggood.com/collectBanner?
+||banggood.com/collectException
+||bangkokpost.com/hits/
+||barnes.send.cm^
+||barrons.com/cookies/pixel.gif
+||bat.maydream.com^
+||bats.video.yahoo.com^
+||bcbits.com/bundle/bundle/1/analytics-$domain=bandcamp.com
+||bcbits.com/bundle/bundle/1/impl-$domain=bandcamp.com
+||beacon.dropbox.com^
+||beacon.samsclub.com^
+||beacon.shazam.com^
+||beacon.shutterfly.com^
+||beacon.walmart.com^
+||beacon.wikia-services.com^
+||bearblog.dev/hit/
+||beforeitsnews.com/core/ajax/counter/count.php^
+||behance.net/log
+||behance.net/v2/logs
+||bestbuy.com/~assets/bby/_js/ext/optmzly/
+||bfp.capitalone.com^
+||bhphotovideo.com/aperture/shared/js/dataLayer.js
+||bi.banggood.com^
+||bigw.com.au/api/event/
+||bigw.com.au/events/
+||bing.com/fd/ls/GLinkPing.aspx?
+||bing.com/geolocation/write?
+||bing.com/mouselog
+||bing.com/notifications/render?
+||bing.com/rewardsapp/reportActivity?
+||binocule21c.merriam-webster.com^
+||biomedcentral.com/track/
+||blitz-analytics-batch-server.blitz.gg^
+||blockworks.co/_vercel/insights/
+||bmoharris.com/www/assets/analytics/loader.js
+||booking.com/c360/v1/track
+||booking.com/collector/
+||booking.com/logo?
+||booking.com/navigation_times
+||booking.com/sendlayoutevents
+||boomerang.dell.com^
+||box.com/index.php?rm=box_gen204_batch_record
+||brightside.me/metric-collector
+||browsealoud.com/plus/scripts/$script
+||builder.io/api/v1/track
+||buondua.com/hit/
+||butterly.com/node_modules/detect.js/detect.min.js
+||buzzfeed.com/destination-sync.html
+||bwbx.io/s3/javelin/public/hub/js/abba/$script,domain=bloomberg.co.jp|bloomberg.com
+||byteoversea.com/monitor_web/
+||c.fingerprint.com^
+||c.newyorker.com^
+||c.paypal.com^$image,script
+||c.thredup.com^
+||c.vogue.com^
+||c.wired.com^
+||c.wort-suche.com^
+||c.xbox.com^
+||c.ypcdn.com^$domain=yellowpages.com
+||cambash.com/api/events
+||cambash.com/api/metrics
+||camgirls.casa/p.php
+||campsaver.com/nelmio-js-logger/
+||canstockphoto.com/server.php?rqst=track
+||capitalone.com/collector/
+||cargurus.com/cars/cganalyticspageview.action
+||cargurus.com/tr/
+||carsandbids.com/a/p
+||cbc.ca/g/stats/
+||cc.cc/visit_log_ajax/visit_log_save_ajax.php?
+||centerblog.net/stats.js
+||ch3ngl0rd.com/hit/
+||change.org/api-proxy/-/bandit/pull
+||change.org/api-proxy/-/et
+||change.org/api-proxy/-/event_tracker
+||channel.io/front/v6/channels/1/events
+||chatfuel.com/cf-analytics/
+||chatroll.com/t.gif
+||chickadvisor.com/js/detect.min.js
+||cidrap.umn.edu/core/modules/statistics
+||cisco.com/c/dam/cdc/j/at.js
+||cl.canva.com^
+||clanker-events.squarespace.com^
+||clarice.streema.com^
+||classdojo.com/logs/
+||classistatic.com^*/js/lib/prebid-7.5.0.min.js$script,domain=kijiji.ca
+||click.aliexpress.com^$image
+||click.nudevista.com^
+||click.sinx.com^
+||client-log.box.com^
+||client-metrics.chess.com^
+||cloudflare.com/_cf/analytics.js
+||cloudfront.net/tracker-latest.min.js
+||cloudfront.net/vis_opt.js
+||cloudfront.net/vis_opt_no_jquery.js
+||clp-mms.cloudpro.co.uk^
+||cm-mms.coachmag.co.uk^
+||cm.nordvpn.com^
+||cmp.vg.no^*/metrics/
+||cnt.hd21.com^
+||cnt.iceporn.com^
+||cnt.viptube.com^
+||cnt.vivatube.com^
+||cnt.xhamster.com^
+||codecademy.com/analytics/
+||coincheckup.com/report_events/
+||cointelegraph.com/pixel?
+||collect.alipay.com^
+||collect.asics.com^
+||collect.banggood.com^
+||collect.hollisterco.com^
+||collect.reagroupdata.com.au^
+||collect.stepstone.co.uk^
+||collect.thunder-io.com^
+||collector-px0py5pczn.octopart.com^
+||collector.cint.com^
+||collector.fiverr.com^
+||collector.github.com^
+||collector.githubapp.com^
+||collector.megaxh.com^
+||collector.pi.spectrum.net^
+||collector.xhamster.com^
+||collector.xhamster.desi^
+||collector.xhamster2.com^
+||collector.xhamster3.com^
+||collider.com/strpixel.png
+||colvk.viki.io^
+||confiant.msn.com^
+||configurator.ecom-mobile-samsung.com/api/logger
+||connatix.com/scripts/$~third-party
+||connatix.com/us/google/
+||connecteam.com/bi/api/ReportHit/
+||consent.ghostery.com/v1.js
+||consent.trustarc.com/bannermsg?
+||consent.trustarc.com/noticemsg?
+||console-telemetry.oci.oraclecloud.com^
+||consumer.org.nz/session/ping/
+||containers.appdomain.cloud/api/send-log$domain=ibm.com
+||conversion.mooncard.co^
+||copilot-telemetry.githubusercontent.com^
+||count.rin.ru^
+||counter.darkreader.app^
+||coursehero.com/v1/data-tracking
+||coursera.org/eventing
+||cpt.itv.com^
+||crayfish.thingelstad.com^
+||creately.com/static/js/creately-analytics-
+||crta.metro.co.uk^
+||crumbs.robinhood.com^
+||crunchyroll.com/tracker?
+||cryo.socialblade.com^
+||cstats.sankakucomplex.com^
+||cultofmac.com/djrxqhzkbsgf.js
+||cvs.com/tnadstlinj.js
+||cwt.citywire.info^
+||d.skk.moe^
+||dailymail.co.uk/geo/
+||dailymail.co.uk/rta2/
+||dailymotion.com/logger/
+||darkreader.org/data/top-backers.json
+||darkreader.org/elements/backers-
+||data.allstate.com^
+||data.guide.photobucket.com^
+||data.torry.io^
+||data.webullfintech.com/event/
+||data.younow.com^
+||datadoghq.com/assets/dd-browser-logs-rum.js
+||datadome.patreon.com^
+||datayze.com/callback/record_visit?
+||dbhsejcg-meetup-com.cdnjs.network^
+||dc.banggood.com^
+||dcf.espn.com/privacy/
+||dd.auspost.com.au^
+||dd.nytimes.com^
+||dealnews.com/lw/ul.php
+||deepl.com/web/statistics
+||deepnote.com/api/track
+||deezer.com/ajax/gw-light.php?method=triton.pixelTracking&
+||deliver.ptgncdn.com^
+||deliveroo.com^*/events
+||deliveryrank.com/drapp070eb2deb1932e2101e6.js
+||delta.com/datacollect
+||deovr.com/api_logs/
+||dev.to/fallback_activity_recorder
+||developer.mozilla.org/submit/
+||df.infra.shopee.ph^
+||dhl.com/g8Dj6P8TAg/
+||dhresource.com/dhs/fob/js/common/track/$domain=dhgate.com
+||digg.com/library/tracker.js
+||digital.flytedesk.com/js/head.js
+||discover-metrics.cloud.seek.com.au^
+||discover.com/QaiuqHH6L7OpQ2dSZzdDRhs6/
+||discoveryplus.com/events/
+||dmtgvn.com/wrapper/js/common-engine.js$domain=rt.com
+||docs.github.com/events
+||domainit.com/scripts/track.js
+||dominos.co.uk/qRgAwS/
+||dotesports.com/sp.js
+||dp.shoprunner.com^
+||drop.com/impressionsBeacon
+||drop.com/statBeacon
+||dropbox.com/2/client_metrics
+||dropbox.com/2/pap_event_logging
+||dropbox.com/alternate_
+||dropbox.com/jse
+||dropbox.com/log/
+||dropbox.com/log_js_sw_data
+||dropbox.com/prompt/log_impression?
+||dropbox.com/unity_connection_log
+||drudgereport.com/204.png
+||drugs.com/api/logger/
+||drugs.com/img/pixel.gif
+||dtag.breadfinancial.com^
+||dtksoft.com/ajax/log^
+||dubz.co/analytics/
+||dubz.live/analytics/
+||duckduckgo.com/t/
+||dumpster.cam4.com^
+||e.used.ca/event
+||e.zg-api.com/event$domain=zillow.com
+||e2ma.net/track/
+||ea.epochbase.com^
+||ebay.com/delstats/
+||ebay.com/gh/dfpsvc?
+||ebay.com^*/customer_image_service?
+||ebaystatic.com^*tracking/configuration.js
+||ec.thredup.com^
+||edge.staging.fullstory.com^
+||edisound.com/api/p/stats
+||eec.crunchyroll.com^
+||eharmony.ca/fd/
+||eharmony.co.uk/bd/
+||eighten-bloc-party.thebrowser.company/script.js
+||ejlytics.editorji.com^
+||elitesingles.com/cs/tp.png?
+||embed.reddit.com/svc/shreddit
+||engagefront.meteomedia.com^
+||engagefront.theweathernetwork.com^
+||engine.traceparts.com^
+||engineering.com/scripts/$script,domain=eng-tips.com
+||eproof.drudgereport.com^
+||equirodi.*/addstat.php
+||ericdraken.com/a/$script
+||error-collector.ted.com^
+||error.fc2.com/blog/$image
+||error.fc2.com/blog3/$script
+||errorreports.couponcabin.com^
+||et.nytimes.com^
+||et.tidal.com^
+||etsy.com/bcn/beacon
+||etui.fs.ml.com^
+||etx.indiatimes.com^
+||euclid.kuula.co^
+||eurogamer-uk.eurogamer.net^
+||event-api.reverb.com^
+||event-collector.moviesanywhere.com^
+||event.platform.tunein.com^
+||eventlog.jackpot.de^
+||events-prod.autolist.com^
+||events-tracker.deliveroo.net^
+||events.api.godaddy.com^
+||events.framer.com^
+||events.mercadolibre.com^
+||events.practo.com^
+||events.prd.api.max.com^
+||events.privy.com^
+||events.reddit.com^
+||events.redditmedia.com^
+||events.santander.co.uk^
+||events.squarespace.com^
+||events.turbosquid.com^
+||events2.www.edenfantasys.com^
+||evs.icy-lake.kickstarter.com^
+||evs.sgmt.loom.com^$script
+||expedia.*/cl/
+||expressvpn.com/__px.gif?
+||exr-mms.expertreviews.co.uk^
+||extendoffice.com/analytics.js
+||f.cdngeek.com^$domain=edugeek.net
+||f362.nola.com^
+||facebook.com/a/bz?
+||facebook.com/ajax/*/log.php
+||facebook.com/ajax/*logging.
+||facebook.com/ajax/mtouch_perf_page_load_timings/
+||facebook.com/ajax/qm/
+||fanatics.com/api/track
+||fancentro.com/lapi/statisticWriter/
+||fancentro.com/trck-
+||fansedge.com/api/track
+||fansshare.com/t.gif
+||faphouse.com/collector/
+||fathom.app.silverbeak.com^
+||fathom.status.im^
+||fathom.tdvm.net^
+||fbo-statistics-collector-tc.is.flippingbook.com^
+||fc2.com/ana/analyzer.php
+||fc2.com/ana/processor.php?
+||fc2.com/counter_img.php?
+||fdt.kraken.com^
+||femetrics.grammarly.io^
+||figma.com/api/figment-proxy/
+||filext.com/pageview^
+||findmatches.com/bts.js
+||findmatches.com/t/tr/lp/intg.js?
+||findmatches.com/tri?tid=
+||fingerprint.com/events/
+||fingerprintjs.com/visitors/
+||firebaselogging.googleapis.com^
+||fishki.net/counter/
+||fiverr.com/api/v1/activities
+||flipboard.com/api/v2/reporting
+||flipboard.com/usage?
+||flipkart.com/api/3/data/collector/
+||flirt4free.com/pixel/
+||flya.me/eventtrack
+||foodcouture.net/public_html/ra/script.php
+||formula1.com/api/track
+||fortune.com/comscore-json/
+||foursquare.com/v2/private/logactions
+||foxsports.com.au/akam/
+||fp.heavybit.com^
+||fp.measure.office.com^
+||fpa-cdn.adweek.com^
+||fpa-cdn.arstechnica.com^
+||fpc.fingerprint.com^
+||fpt.microsoft.com^
+||freedownloadmanager.org/ajax/th_hit.php
+||freedownloadmanager.org/ajax/th_view.php
+||freepik.*/download.gif?
+||freepik.com/_ga?
+||freeplayervideo.com/cdn-cgi/trace
+||freeprivacypolicy.com/track/
+||fresnel-events.vimeocdn.com^
+||ft.com/ingest?
+||fullscreen.nz/v1/tracking/$domain=threenow.co.nz
+||fusevideo.io/api/event
+||g.ign.com^
+||g.mashable.com^
+||g.newtimes.com^
+||g.pcmag.com^
+||ga.dx.com^
+||ga.nsimg.net^
+||gadgets360.com/analytics.js
+||gaiaonline.com/internal/mkt_t.php?
+||gak.webtoons.com^
+||gamedistribution.com/collect?
+||gamejolt.com/tick/
+||gamivo.com/tcllc?
+||gc.newsweek.com/front/js/counter.js
+||gct.americanexpress.com^
+||generalblue.com/js/pages/shared/analytics.min.js
+||generic-function-log-data-7il2midpaa-nn.a.run.app^$domain=telus.com
+||geo.brobible.com^
+||geo.nbcsports.com^
+||geo.yahoo.com^
+||geoip.boredpanda.com^
+||geoip.hmageo.com^
+||geoip.ifunny.co^
+||geolocation.forbes.com^
+||getadblock.com/js/log.js
+||getpocket.com/t/
+||getpocket.com/web-client-api/braze
+||getpocket.com/web-utilities/public/static/te.js
+||gettyimages.*/pulse$ping
+||ghacks.net/statics/px.gif
+||github.com/_private/browser/stats
+||github.dev/diagnostic?
+||glassdoor.*/geb/events/
+||glassmoni.researchgate.net^
+||global.canon/00cmn/js/*/analytics-
+||global.ssl.fastly.net^$domain=allmodern.com|argos.co.uk|basspro.com|birchlane.com|courier-journal.com|courierpress.com|desertsun.com|detroitnews.com|eddiebauer.com|freep.com|glassesusa.com|greenbaypressgazette.com|harborfreight.com|indystar.com|jsonline.com|kurtgeiger.com|legacy.com|lenovo.com|lohud.com|lowes.com|naplesnews.com|news-journalonline.com|northjersey.com|perigold.com|quickship.com|quikshiptoner.com|radiotimes.com|sainsburys.co.uk|sanuk.com|sheboyganpress.com|tallahassee.com|theadvertiser.com|thisweek.com|ugg.com|usatoday.com|wayfair.co.uk|wayfair.com|wwe.com
+||globes.co.il/shared/s.ashx?
+||gnar.grammarly.com^
+||gnavi.co.jp/analysis/
+||go.fap18.net/ftt2/js.php
+||go.pardot.com^
+||go.theregister.com^$image
+||gobankingrates.com/fp/
+||gofundme.com/track
+||gog-statics.com/js/frontpagelogintracking-$script,domain=gog.com
+||gog-statics.com/js/loginTracking-$script,domain=gog.com
+||goodfon.com/stat/
+||goodreads.com/logging
+||goodreads.com/metrics_logging_batched
+||goodreads.com/report_metric
+||goodreads.com/track/
+||google.com/ads/measurement/
+||google.com/dssw.js
+||google.com/images/phd/px.gif
+||google.com/log?
+||gotie.tunein.com^
+||grabify.link/api/js
+||groove.so/unlocker.js
+||groupon.com/analytic/
+||groupondata.com/tracky
+||gsght.com/twizards.js
+||gso.amocrm.com/humans/
+||gtm.wise.com^
+||gtreus.aliexpress.com^
+||gumtree.com.au/tracking/
+||gurgle.pcmag.com^
+||gurgle.spiceworks.com^
+||hankookilbo.com/service/kt/trk.js$script,domain=koreatimes.co.kr
+||harryrosen.com/analytics/
+||health-metrics-api.setapp.com^
+||healthline.com/api/metrics
+||heap.drop.com^
+||hilton.com/zJbufaUX/
+||hindustantimes.com/res/images/one-pixel.png
+||hits.cyberdrop.me^
+||hlogger.heraldcorp.com^
+||hltv.org/scripts/hltv-tracking.js
+||hn-ping*.hashnode.com^
+||homedepot.ca/mr/thd-ca-prod.js
+||hoo.be/api/hoobe/analytics
+||hotels.com/api/bucketing/v1/evaluateExperimentsAndLog
+||hotels.com/cl/data/omgpixel.json?
+||hotpads.com/node/api/comscore
+||hotstar.com/v1/identify
+||hotstar.com/v1/track
+||houzz.com/hsc/aetrk/
+||houzz.com/js/log?
+||hqq.ac/cdn-cgi/trace
+||hqq.to/cdn-cgi/trace
+||hqq.tv/cdn-cgi/trace
+||html5games.com/event/
+||htrace.wetvinfo.com^
+||huggingface.co/js/script.js
+||hulkshare.com/ajax/tracker.php
+||hulu.com/metricsconfig
+||hypebeast.com/firebase-messaging-sw.js
+||i.pokernews.com^
+||iam-rum-intake.datadoghq.com^
+||ibm.com/analytics/build/bluemix-analytics.min.js
+||ibtimes.com/front/js/counter.js
+||icgp.ie/overview/js/tracker.php
+||idiva.com/analytics_
+||iedc.fitbit.com^
+||ih.newegg.com^
+||iheart.com/api/v3/playback/reporting
+||ihg.com/logging/
+||imagefap.com/images/yes.gif?
+||imagetwistcams.com/pixel/
+||imdb.com/api/_ajax/metrics/
+||imgur.com/albumview.gif?
+||imgur.com/imageview.gif?
+||indeed.com/cmp/_rpc/flog
+||indeed.com/m/rpc/frontendlogging
+||indeed.com/rpc/$~xmlhttprequest
+||indeed.com/rpc/pageload/perf
+||indiatimes.com/personalisation/logdata/
+||indiatimes.com/savelogs?
+||indmetric.rediff.com^
+||inews.co.uk/rta2/
+||info.com/pingback
+||infoq.com/metrics/
+||informer.com/ajax/article_log.php
+||ingest.make.rvohealth.com^
+||ingress.linktr.ee^
+||inq.com/tagserver/logging/logline
+||insideevs.com/analytics.js
+||instagram.com/ajax/bz
+||instructables.com/counter
+||intent.cmo.com.au^
+||intent.goodgearguide.com.au^
+||intent.macworld.co.uk^
+||intent.pcworld.idg.com.au^
+||intent.techadvisor.com^
+||internal-analytics.odoo.com^
+||internetslang.com/jass/
+||intg.snapchat.com^
+||intuitvisitorid.api.intuit.com^
+||invisionapp.com/analytics-api/
+||iono.fm/tracking?
+||ip.cliphunter.com^
+||ip.pichunter.com^
+||irs.gov/h4z97Hz8jMrNO/
+||isc-tracking.eventim.com^
+||isharemetric.rediff.com^
+||ivx.lacompagnie.com^
+||j927.statnews.com^
+||jansatta.com/api/capture/ua
+||jav4tv.com/player/analytics
+||javhd.com/ascripts/gcu.js
+||javhd.com/rstat
+||jetbluevacations.com/apis/v2-analytics/
+||jfapiprod.optimonk.com^
+||jiji.co.ke/tag_event
+||jockey.com/event/
+||jockey.com/scripts/omt-base.js
+||jumbo.zomato.com^
+||juno.com/start/javascript.do?message=
+||justanswer.com/jatag/
+||kaggle.com/api/i/diagnostics.MetricsService
+||kansascity.com/nyb-zsooli/
+||kayak.*/vestigo/measure
+||kbb.com/pixall/
+||kck.st/web/track
+||kinesis.us-east-1.analytics.edmentum.com^
+||kkam.com/rest/high/api/cogitoergosum^
+||klm.us/CWZUvc/
+||kloth.net/images/pixel.gif
+||kohls.com/mtFndb/
+||kohls.com/test_rum_nv?
+||komoot.*/api/t/event
+||kompass.com/logAdvertisements
+||kudoslabs.gg/track/
+||l.usaa.com/e/v1/
+||lastminute.com/ose/processEvent
+||lastminute.com/ose/tracking/
+||lastminute.com/s/hdp/hotel-details/api/logs
+||lastminute.com/s/hdp/hotel-details/api/metrics
+||lastpass.com/lpapi/content/pixels
+||lastpass.com/m.php/proxy_tracker
+||ledger-enquirer.com/lz-isbnoyo/pdp.gif?
+||lego.com/api/dl-event-ingest
+||lendingtree.com/analytics/
+||lendingtree.com/pixel/
+||letsdoeit.com/tracking/
+||lexology.com/pd.js
+||libhunt.com/api/ahoy/event
+||librato-collector.genius.com^
+||lightstep.medium.systems^*/reports
+||link.kogan.com^
+||link2.strawberrynet.com^$image
+||linkedin.com/collect/
+||linkedin.com/li/track$xmlhttprequest
+||linkedin.com/litms/utag/
+||linkedin.com/platform-telemetry/
+||linkedin.com/sensorCollect/
+||links.strava.com^$image
+||linktr.ee/events
+||linris.xyz/cdn-cgi/trace
+||lists.ccmbg.com^
+||littlebigsnake.com/event?
+||livehdcams.com/api/events
+||livehdcams.com/api/metrics
+||livejournal.com/ljcounter/
+||livejournal.com/log?
+||liveperson.net/hc/*/?visitor=
+||lnkd.in/li/track
+||load.tm.all3dp.com/rqlevydw.js
+||log-gateway.zoom.us^
+||log.china.cn^
+||log.genyt.net^
+||log.hypebeast.com^
+||log.klook.com^
+||log.quora.com^
+||log.snapdeal.com^
+||log.v.ssp.yahoo.com^
+||log.webnovel.com^
+||logger.nerdwallet.com^
+||logger007.cam4.com^
+||logging.api.intuit.com^
+||loglady.kiwi.com^
+||logs.hotstar.com^
+||logs.naukri.com^
+||logx.optimizely.com^
+||lolwot.com/B5xaqzSGvMTM.js
+||lookawoman.com/t/
+||lowes.com/gauge/
+||lyft.com/api/track
+||m.facebook.com/ajax/weblite_load_logging/
+||m.facebook.com/ajax/weblite_resources_timing_logging/
+||ma.redhat.com^
+||macys.com/tag_path/
+||mail.proton.me/api/data/v1/stats
+||mail.yahoo.com/f/track/
+||mangadex.org/api/event
+||mangadex.org/p.js
+||manua.ls/g/collect?
+||manua.ls/gtag
+||mapcarta.com/logs
+||mapquest.com/logger
+||marketing.alibaba.com^
+||massivecams.com/api/events
+||massivecams.com/api/metrics
+||mat6tube.com/stats
+||mcc-tags.cisco.com^
+||mcloud.to/log/
+||mcloud.to/ping/
+||mcs-va.tiktokv.com^
+||mcs.tiktokv.us^
+||mcs.us.tiktokv.com^
+||medium.com/_/batch
+||medium.com/_/clientele/reports/performance/
+||meduza.io/stat/
+||megaplay.cc/cdn-cgi/trace
+||mercedes-benz.com/datadog-
+||merriam-webster.com/lapi/v1/mwol-search/stats/lookup
+||messari.io/js/wutangtrack.js
+||messenger.com/ajax/bnzai?
+||metacrawler.com/pingback
+||metrics.audius.co^
+||metrics.bangbros.com^
+||metrics.camsoda.com^
+||metrics.freemake.com^
+||metrics.hackerrank.com^
+||metrics.onewegg.com^
+||metrics.roblox.com^
+||metrics.spkt.io^
+||metrics.syf.com^
+||metrics.ted.com^
+||metricsishare.rediff.com^
+||metro.co.uk/base/rta/
+||metro.co.uk/cvx/client/sync/fpc?
+||metroweekly.com/tools/blog_add_visitor/
+||meucdn.vip/cdn-cgi/trace
+||mewe.com/ubk4jrxn.js
+||mi.academy.com/p/js/1.js
+||mi.dickssportinggoods.com/p/js/1.js
+||mi.grubhub.com^
+||miao.baidu.com^
+||midas.chase.com^
+||mixpanel-proxy.ted.com^
+||mktcs.cloudapps.cisco.com^
+||mo8it.com/count.js
+||modanisa.com/al/j/analytics.js
+||mon.us.tiktokv.com^
+||moneycontrol.com/news/services/get_comscore_pageview/
+||monitor.channel4.com^
+||motorsport.com/stat/
+||mov.t-mobile.com/p/js/1.js
+||movetv.com/sa-events
+||mparticle.weather.com/identity/
+||mps.nbcuni.com/request/page/json/params/*&adunits=$xmlhttprequest
+||mr.homedepot.ca^
+||msg-intl.qy.net^$image
+||msn.com/collect/
+||msn.com/OneCollector/
+||mstm.motorsport.com^
+||myanimelist.net/static/logging.html
+||mybbc-analytics.files.bbci.co.uk/reverb-client-js/smarttag-
+||myspace.com/beacon/
+||n26-trusted.n26.com^
+||na.groupondata.com^
+||naiz.eus/visits
+||namethatporn.com/assets/imgs/1x1.gif
+||narkive.com/ajax/TelemV2?
+||nasi.etherscan.com^
+||nature.com/platform/track/
+||naukrigulf.com/ni/nibms/bms_display.php
+||nbarizona.com/metrics/
+||nbc.com/webevents/
+||nbcnews.com/_next/static/chunks/ads.$script,domain=msnbc.com|nbcnews.com
+||ncbi.nlm.nih.gov/core/pinger
+||neatorama.com/story/view/
+||neeva.com/logql/log
+||neighbourly.co.nz/event-tracking
+||neowin.net/ws/$websocket
+||net.haier.com^
+||netflix.com/msl/playapi/cadmium/logblob/
+||netuplayer.top/cdn-cgi/trace
+||netusia.xyz/cdn-cgi/trace
+||newegg.com/amber3/tracking
+||newegg.com/gfplib.js
+||news.google.com/_/v
+||newscom.com/js/v2/ga.js
+||newser.com/utility.aspx?
+||newsmax.com/js/analytics.js
+||newzit.com/setABframe.html
+||nextdoor.com/events/
+||nflshop.com/api/track
+||nike.com/assets/measure/data-capture/
+||nimbusweb.me/gtlytics.js
+||no9pldds1lmn3.soundcloud.com^
+||noblocktape.com/stat/
+||noodle.backmarket.io^
+||nordace.com/track.js
+||nordstrom.com/api/cake/
+||nordstrom.com/api/cupcake/
+||norton.com/service/norton/head?
+||notion.so/api/v*/teV1
+||novanthealth.org/v1/tagular/beam
+||novelcool.com/files/js/yh_tj.js
+||ntvid.online/cdn-cgi/trace
+||nyt.com/ads/tpc-check.html$domain=nytimes.com
+||nytimes.com/v1/purr-cache
+||nzpages.co.nz/modules/common/track.js
+||observe.metarouter.io^
+||odysee.com/reports/
+||ohm-dot-hackster-io.appspot.com^
+||okx.com/jsstat/sb?
+||online-umwandeln.de/analytics.js
+||ontraport.com/opt_assets/static/js/logging.js
+||opendesktop.org/l/fp
+||ophan.theguardian.com^
+||optimizely.com/js/geo.js
+||optimizely.techtarget.com^
+||oracle.com/visitorinfo/
+||oracleimg.com/us/assets/metrics/ora_docs.js
+||outbound.io/v2/identify
+||outbound.io/v2/track
+||overstock.com/analytics/
+||overstock.com/dlp?
+||ovyerus.com/js/script.js
+||p.ctpost.com/article?
+||p.fusevideo.net^
+||p.hentaiforce.net^
+||p.sfx.ms/is/invis.gif
+||pac.thescottishsun.co.uk^
+||pac.thesun.co.uk^
+||pagesix.com/blaize/datalayer
+||pappagallu.onefootball.com^
+||pardot.com/pd.js
+||paypal.com/credit-presentment/log
+||paypal.com/platform/tealeaftarget
+||pcgamesn.com/cdn-cgi/trace
+||pcmag.com/js/ga.js
+||pcmag.com/js/z0WVjCBSEeGLoxIxOQVEwQ.min.js
+||pendo.scopus.com/data/ptm.gif
+||perf.mouser.com^
+||performance-logger.minted.com^
+||perr.hola.org^
+||petametrics.com^$domain=meidastouch.com
+||pf.newegg.com^
+||pftk.temu.com^
+||ph.thenextweb.com^
+||phonearena.com/_track.php
+||pikbest.com/?m=Stats&
+||ping.hashnode.com^
+||ping.hungama.com^
+||pingback.giphy.com^
+||pingback.issuu.com^
+||pingo.staticmoly.me^
+||pixel.archive.
+||pixel.archivecaslytosk.onion^
+||pixel.archiveiya74codqgiixo33q62qlrqtkgmcitqx5u2oeqnmn5bpcbiyd.onion^
+||pixel.convertize.io^
+||pixel.facebook.com^
+||pixel.honestjohn.co.uk^
+||pixel.ionos.com^
+||pixel.nine.com.au^
+||pixel.tuko.co.ke^
+||pixelzirkus.gameforge.com^
+||pixiedust.buzzfeed.com^
+||planetradio.co.uk/crystal/log
+||plausible.bots.gg^
+||plausible.dragonfru.it^
+||plausible.omgapi.org^
+||plausible.ripped.guide^
+||plausible.safing.io^
+||play.google.com/log
+||player-cdn.com/cdn-cgi/trace
+||player-telemetry.vimeo.com^
+||playvideohd.com/cdn-cgi/trace
+||plenty.vidio.com^
+||plushd.bio/cdn-cgi/trace
+||pm.dailykos.com^
+||pm.geniusmonkey.com^
+||poki.com/observer/
+||politico.com/resource/assets/js.min/video-tracking.
+||poptropica.com/brain/track.php?
+||pornhublive.com/api/events
+||pornhublive.com/api/metrics
+||porzo.com/js/analytics
+||prairiedog.hashnode.com^
+||pravda.com.ua/counter/
+||prescouter.com/pd.js
+||priceline.com/pws/v1/ace/impression/
+||priceline.com/svcs/mkt/tag/
+||princetonreview.com/logging/
+||prisma.io/gastats.js
+||priv.gc.ca/m/m.js
+||privacy-api.9gag.com^
+||privacyfriendly.netlify.app^
+||privacypolicies.com/track/
+||prod-events.nykaa.com^
+||progressive.com/Log/
+||pulpulyy.club/cdn-cgi/trace
+||pulsar.ebay.com^
+||pulse.delta.com^
+||pumpkin.abine.com^
+||pushsquare.com/blank.gif
+||px.srvcs.tumblr.com^
+||pxl.indeed.com^
+||qc.newyorker.com^
+||qc.vogue.com^
+||qc.wired.com^
+||qm.redbull.com^
+||quibids.com/marketing/pixels/
+||quickmeme.com/tracker/
+||qwant.com/action/
+||qwant.com/impression/
+||qwant.com/maps/events
+||qwant.com/v2/api/ux/surveys?
+||qwerpdf.com/trk23/
+||r.apkpure.net^
+||r.bbci.co.uk^
+||raindrop.io/pb/api/event
+||rakuten.com/rmsgjs/soj2.js
+||ranker.com/api/px
+||ranker.com/api/tr?
+||ranker.com/api/tracking/comscore
+||rankhit.china.com^
+||ras.yahoo.com^
+||rbc.ua/enghits/
+||realitytvworld.com/images/pixel.gif
+||rec.banggood.com^
+||reddit.com/static/pixel.png$image
+||reddit.com/timings/
+||redditmedia.com/gtm/jail?
+||redditstatic.com/accountmanager/sentry.
+||redditstatic.com/shreddit/sentry-
+||redfin.com/rift?
+||redgifs.com/v2/metrics/
+||reelgood.com/v3.0/checkip
+||reichelt.com/setsid.php?
+||relay.fiverr.com^
+||reports.tunein.com^
+||researchgate.net/track/
+||reverbnation.com/api/user/app_events
+||rfk.biglots.com^
+||rfk.dsw.com/api/init/1/init.js
+||ring.staticmoly.me^
+||risextube.com/t/
+||roblox.com/_/_/1px.gif
+||roblox.com/report
+||roblox.com/www/e.png?
+||rome.api.flipkart.com/api/1/fdp
+||rps-p2.rockpapershotgun.com^
+||rps-uk.rockpapershotgun.com^
+||rs.mail.ru^
+||rss-loader.com/track/
+||rstat.rockmostbet.com^
+||rt.newswire.ca^
+||rt.prnewswire.com^
+||rt.rakuten.co.jp^$~xmlhttprequest
+||rta.dailymail.co.uk^
+||rta2.inews.co.uk^
+||rta2.metro.co.uk^
+||rta2.newzit.com^
+||rtds.progressive.com^
+||rum.api.intuit.com^
+||rum.condenastdigital.com^
+||rum.kobo.com^
+||rumble.com/l/
+||run.app/events$domain=imgur.com
+||rv.modanisa.com^$script
+||rvo-cohesion.healthline.com^
+||s.infogram.com^
+||s.wayfair.com^
+||saa.insideedition.com^
+||samsung.com/us/web/internal/logger
+||sapphire-api.target.com^
+||sciencechannel.com/events/
+||scloud.online/stat/
+||scoot.co.uk/ajax/log_
+||search.anonymous.ads.brave.com^
+||search.aol.com/beacon/
+||search.brave.com/api/feedback$~third-party
+||search.brave.com/serp/v1/static/serp-js/telemetry/
+||search.ch/audit/
+||searchenginejournal.com/xcs0MhRsfxHG.js
+||searchiq.co/api/tr?
+||seekingalpha.com/mone_event
+||servo-report.dvdfab.
+||sexu.com/api/events
+||sexu.com/api/ttrack
+||sexybabepics.net/re/?ping
+||sf-syn.com/conversion_outbound_tracker$subdocument,domain=sourceforge.net
+||sharesies.com/v1/identify
+||sharesies.com/v1/track
+||shavetape.cash/stat/
+||shazam.com/services/metrics/
+||shobiddak.com/logging/
+||shopmetric.rediff.com^
+||siberiantimes.com/counter/
+||sid.nordstrom.com^
+||silvergames.com/div/g.php?
+||skyscanner.*/slipstream/view
+||slack-edge.com/bv1-10/slack_beacon.
+||slack.com/beacon/
+||slack.com/clog/track/
+||slant.co/js/track.min.js
+||slashdot.org/country.js
+||slashdot.org/images/js.gif
+||slickdeals.net/ajax/stats/
+||slideshare.net/frontend_tracking/
+||slipstream.skyscanner.net^
+||smallpdf.com/build/track-js.js
+||smartlink-api.amuse.io/api/analytics/
+||smassets.net/assets/anonweb/anonweb-click-
+||smetrics.couponcabin.com^
+||smetrics.ralphlauren.com^
+||smutty.com/ajax/trcking/
+||snapchat.com/web/metrics
+||solvusoft.com^*/scripts/visitor.js
+||soundcloud.com^$ping
+||source.chromium.org/v1/logging
+||sourcesync.io/analytics
+||sp.cargurus.co.uk^
+||sp.ecosia.org^
+||sp.welcometothejungle.com^
+||spanishdict.com/page-view-metadata
+||spectrum.gettyimages.com^
+||speed.cloudflare.com/__log
+||sportsmansguide.com/scripts/vendor/at_
+||spotifycdn.com/cdn/js/retargeting-pixels-
+||spt.ahram.org.eg^
+||squarespace.com/api/1/performance/
+||squirrel.malaynahocker.com^
+||srchoffer.com/tracking/
+||srtb.msn.com^
+||srv.plesk.com^
+||ss.photospecialist.co.uk^
+||sstats.adobe.com^
+||st.sawlive.tv^
+||stackoverflow.com/_/client-timings
+||stackshare.io/analytics.
+||stan.xing.com^
+||stapadblockuser.art/stat/
+||stapadblockuser.click/stat/
+||stapadblockuser.info/stat/
+||stapadblockuser.xyz/stat/
+||stape.fun/stat/
+||stapewithadblock.beauty/stat/
+||stapewithadblock.monster/stat/
+||stapewithadblock.xyz/stat/
+||starfiles.co/analytics.php
+||startpage.com/sp/$ping
+||startpage.com/sp/dplpxs?
+||startpage.com/sp/elp
+||startpage.com/sp/jst
+||starzplay.com/resources/js/analytics.js
+||stat.cdngeek.com^
+||stat.pubhtml5.com^
+||stat.tildacdn.com^
+||stat.turb.pw^
+||stat.vulkanvegas.com^
+||stategg.cdngeek.com^
+||statista.com/data/ptm.gif
+||statistics.streamdav.com^
+||stats-jobstreet-sg-en-prod.supercharge-srp.co^$domain=jobstreet.com.sg
+||stats.aerotime.aero^
+||stats.calcalist.co.il^
+||stats.codeur.com^
+||stats.davidickedelivery.com^
+||stats.gateio.ch^
+||stats.ibtimes.co.in^
+||stats.ibtimes.sg^
+||stats.justpaste.it^
+||stats.newsweek.com^
+||stats.pstream.net^
+||stats.qwant.com^
+||stats.sandberg.world^
+||stats.searchftps.net^
+||stats.suenicholls.com^
+||stats.trimbles.ie^
+||stats.vk-portal.net^
+||stats.wordpress.com^
+||stats.wwitv.com^
+||stats2.mytuner.mobi^
+||stayz.com.au/cl/data/omgpixel.json
+||strcloud.in/stat/
+||streamadblocker.com/stat/
+||streamadblocker.store/stat/
+||streamadblocker.xyz/stat/
+||streamlabs.com/web/data/ping
+||streamnoads.com/stat/
+||streamstats.prd.dlive.tv^
+||streamta.pe/stat/
+||streamta.site/stat/
+||streamtape.cc/stat/
+||streamtape.com/stat/
+||streamtape.to/stat/
+||streamtape.xyz/stat/
+||streamtapeadblock.art/stat/
+||streamtapeadblockuser.art/stat/
+||streamtapeadblockuser.homes/stat/
+||streamtapeadblockuser.monster/stat/
+||streamtapeadblockuser.xyz/stat/
+||stripchat.com/pixel/
+||stripe.com/tracking/
+||strtape.cloud/stat/
+||strtapeadblock.club/stat/
+||strtapeadblocker.xyz/stat/
+||strtapewithadblock.art/stat/
+||strtapewithadblock.xyz/stat/
+||strtpe.link/stat/
+||stubhub.com/a/icph
+||suaurl.com/adblock/js/smarttag.js
+||swarm.video/stats/
+||szrpr.raen.com^
+||t.3hentai.net^
+||t.9gag.com^
+||t.airasia.com^
+||t.allmodern.com^
+||t.appsflyer.com^
+||t.av.st^
+||t.birchlane.com^
+||t.dailymail.co.uk^
+||t.deepnote.com^
+||t.freelancer.com^
+||t.imgur.com^
+||t.indeed.com^
+||t.ionos.com^
+||t.jossandmain.com^
+||t.kck.st^
+||t.nypost.com^
+||t.pagesix.com^
+||t.paypal.com^$image
+||t.perigold.com^
+||t.regionsjob.com^
+||t.wayfair.ca^
+||t.wayfair.co.uk^
+||t.wayfair.com^
+||t.y8.com^
+||t.zulily.com^
+||t2.hulu.com^
+||tagger.ope.scmp.com^
+||tags.aljazeera.com^
+||tags.johnlewis.com^
+||tags.news.com.au^$script
+||tags.stepstone.com^
+||tahoe.com/imp
+||taiwanplus.com/api/video/startVideo
+||tao.barstoolsports.com^
+||tapeantiads.com/stat/
+||tapeblocker.com/stat/
+||tapenoads.com/stat/
+||tapewithadblock.com/stat/
+||tapewithadblock.org/stat/
+||taplytics-umami.grubhub.com^
+||target-us.samsung.com^
+||target.com/consumers/v1/ingest/web/eventstream?
+||target.com/consumers/v1/ttms/events?
+||target.com/rum_analytics/
+||target.com/telemetry_data/
+||target.nationwide.com^
+||target.nejm.org^
+||targeting.washpost.nile.works^
+||tarnkappe.info/matjC.js
+||tc.geniusmonkey.com^
+||td.airdroid.com^
+||ted.dailymail.co.uk^
+||telegraph.prd.api.max.com^
+||telem.sre.gopuff.com^
+||telemetry.adobe.io^
+||telemetry.algolia.com^
+||telemetry.api.playstation.com^
+||telemetry.firez.one^
+||telemetry.tradingview.com^
+||tellerreport.com/react/pixel
+||terabox.com/abdr?
+||termsfeed.com/track/
+||tgt.maep.ibm.com^
+||the-sun.com/assets/client/analyticsListeners~
+||the-sun.com/assets/client/newrelicExperimentTracking~
+||theblock.co/api/analytics
+||theconversation.com/javascripts/lib/content_tracker_hook.js
+||thedailybeast.com/static/js/thirdparty.
+||thefreedictionary.com/_/tr.ashx?
+||theladders.com/api/user-tracking/
+||thesun.co.uk/assets/client/analyticsListeners~
+||thesun.co.uk/assets/client/newrelicExperimentTracking~
+||thesun.ie/track?
+||thetimes.co.uk/track?
+||thewindowsclub.com/wp-content/themes/genesis/lib/js/skip-links.min.js
+||thisiswhyimbroke.com/api/user/gift-guide-thumbnail-homepage/tracking
+||thisiswhyimbroke.com/api/user/tracking
+||thriftbooks.com/scripts/sp.js
+||thtk.temu.com^
+||tiendeo.*/_statsapi/
+||tif.ionos.com^
+||tiktok.com/captcha/report
+||tiktok.com/ttwid/check/
+||tiktok.com/v1/list
+||tiktok.com/web/report?
+||tiktok.com/whale/
+||tiktokv.com/monitor_browser/
+||tilanalytics.timesinternet.in^
+||time.is/img/nod.png
+||tms.delta.com/privacy/$image
+||tms.eharmony.ca^
+||tms.hft.everyplate.com^
+||tms.hft.factor75.com^
+||tms.hft.greenchef.com^
+||tms.hft.hellofresh.com^
+||tnaflix.com/stats.php
+||tongji-res.meizu.com^
+||top.gg/api/auctions/i
+||top.wn.com^
+||totalcsgo.com/ctrack/
+||totaljobs.com/analytics/
+||totaljobs.com/chatbot/webhook/analytics
+||totaljobs.com/chatbot/webhook/logger
+||touch.myntra.com^
+||toyota.com/analytics/
+||tpcs.payu.in/pixelwithcookie.gif$domain=hindustantimes.com
+||tr.clickstay.com^
+||tr.www.cloudflare.com^
+||tracemyip.org/vlg/
+||traceparts.com/logs
+||track-visit.monday.com^
+||track.americansongwriter.com^
+||track.dictionary.com^
+||track.eurogirlsescort.com^
+||track.kueez.com^
+||track.mrgugu.com^
+||track.netzero.net^
+||track.sodapdf.com^
+||track.thesaurus.com^
+||track.ultimate-guitar.com^
+||tracker.affiliate.iqbroker.com^
+||tracker.nbcuas.com^
+||tracker.ranker.com^
+||tracker.shopclues.com^
+||tracking.bloomberg.com^
+||tracking.carsales.com.au^
+||tracking.christianpost.com^
+||tracking.digitalocean.com^
+||tracking.engineering.cloud.seek.com.au^
+||tracking.hsn.com^
+||tracking.shopstyle.co.uk^
+||tracking.shopstyle.com^
+||tracking.unrealengine.com^
+||trackr.vivenu.com^
+||tradingview.com/ping
+||treatment.grammarly.com^
+||tredir.go.com^
+||tripadvisor.*/BALinkImpressionTracking/
+||tripadvisor.*/CookiePingback?
+||tripadvisor.*/GARecord^
+||tripadvisor.*/MetricsAjax
+||tripadvisor.*/wm/record
+||tripcdn.com/bee/collect$domain=trip.com
+||trivago.com/tracking/
+||trk.tirto.id^
+||trumba.com/et.aspx?
+||trx3.famousfix.com^
+||ts.delfi.lt^
+||tubepornstars.com/js/analytics
+||tubi.io/datascience/logging?
+||tubitv.com/oz/performance/
+||tumblr.com/pop/js/modern/sentry-
+||tumblr.com/services/bblog
+||tunein.com/api/v1/log/
+||turbobit.net/js/analytics/
+||tweakers.net/ajax/$ping
+||twitter.com/1.1/attribution
+||twitter.com/1.1/jot
+||twitter.com/9/measurement/
+||twitter.com/i/api/1.1/jot
+||twitter.com/i/csp_report?
+||twitter.com/i/jot
+||twitter.com^*/log.json
+||typepad.com/t/stats?
+||ua.indianexpress.com^
+||uber.com/_events
+||uber.com/_track
+||uber.com/careers/apply/_log
+||ubereats.com/_track
+||ubt.tracking.shopee.ph^
+||ubuyanalytics.ubuy.com^
+||ucoz.com/stat/
+||ucweb.com/collect/
+||udemy.com/api-2.0/ecl
+||ulogin.ru/stats.html
+||ultimate-guitar.com/components/ab/event?
+||ultimedia.com/deliver/statistiques/
+||um.contentstudio.io^
+||umami.wakarimasen.moe^
+||unity3d.com/v1/events
+||unsplash.com/nmetrics
+||untappd.com/profile/impression?
+||upi.com/story/stat/
+||uprinting.com/muffins/UPTracker-
+||ups.com/img/icp.gif
+||upwork.com/upi/jslogger
+||urs.metacritic.com^
+||user-metrics.onthemarket.com^
+||usmetric.rediff.com^
+||usnews.com/static/esi/usn-geo.json
+||uviu.com/activity/
+||v.adblockultimate.net^
+||v.ctrl.blog^
+||vagrantup.com/api/auth/_log
+||vanityfair.com/user-context?referrer
+||video.mobile.yahoo.com/log|$xmlhttprequest
+||views.arabnews.com^
+||views.asura.gg^
+||views.asurascans.com^
+||vimeo.com/ablincoln/
+||vimeocdn.com/js_opt/logging_combined.min.js
+||visualstudio.com/v2/track
+||vizcloud.co/ping/
+||vk.com/js/lib/px.js
+||vortex.hulu.com^
+||vrbo.com/edap/elo/v1/event/beacon
+||vrbo.com/serp/api/metrics
+||vsco.co/api/cantor/track
+||w3-reporting.reddit.com^
+||wa.childrensplace.com^
+||wa.gmx.co.uk^
+||wa.gymboree.com^
+||wa.pjplace.com^
+||wa.sugarandjade.com^
+||waaw.ac/cdn-cgi/trace
+||waaw.to/cdn-cgi/trace
+||waaw1.tv/cdn-cgi/trace
+||waitrose.com/gDaVC7/
+||wal.wolfram.com^
+||walmart.ca/api/bsp/logger
+||walmart.ca/api/home-page/logger
+||walmart.ca/api/landing-page/beacon-logger
+||walmartimages.com/dfw/4ff9c6c9-d9a0/$domain=walmart.com
+||wapn1.flosports.tv^
+||wattpad.com/js/tracker/app.
+||wc.yahoodns.net^$image
+||wccftech.com/cnt7vfDVvWa3.js
+||web.whatsapp.com/wam
+||webd-assets.cdn4dd.com/s.js$domain=doordash.com
+||weblog.flyasiana.com^
+||webmd.com/static/v/c?
+||weedmaps.com/pixel?
+||wellsfargo.com/as/jsLog
+||wellsfargo.com/dti_apg/
+||wellsfargo.com/jenny/
+||wellsfargo.com/tracking/
+||wfinterface.com/tracking/$domain=wellsfargo.com
+||wh.ipaddress.com^
+||whattomine.com/stats
+||wheregoes.com/api/event
+||whistleout.com.au/track
+||wikihow.com/q9783LyeWk/
+||wikihow.com/x/collect?
+||wikimonde.com/matom.js
+||wikipedia.org/beacon/
+||windy.com/sedlina/ga/
+||wish.com/api/analytics/
+||wiztube.xyz/cdn-cgi/trace
+||wnyc.org/analytics/
+||wolfram.com/common/javascript/analytics.js
+||wolfram.com/common/javascript/wal/
+||wondershare.com/trk
+||wsj.com/cookies/pixel.gif
+||wstats.e-wok.tv^
+||xero.com/api/events/
+||xfinity.com/event/
+||xhamster.com/api/$ping
+||xhamsterlive.com/pixel/
+||xhcdn.com/js/*.track.min.js
+||xing.com/logjam/
+||xnxx.com/picserror/
+||xvideos.com/picserror/
+||xxf.mobi/hit
+||yahoo.com/_td_api/beacon/
+||yahoo.com/beacon/
+||yahoo.com/beacon?
+||yahoo.com/pageview?
+||yahoo.net/pixel.gif
+||yandex.*/clck/$~ping
+||yandex.*/count/
+||yandex.com/clck/
+||yandex.eu/clck/
+||yandex.ru/clck/
+||yandexcdn.com/cdn-cgi/trace
+||yelp.*/sit_rep
+||yelp.com/ad_acknowledgment
+||yelp.com/ad_syndication_user_tracking
+||yelp.com/spice?
+||yimg.com/aaq/wf/wf-darla-
+||you.com/api/recordEvent
+||youjizzlive.com/api/metrics
+||youmaker.com/g/test
+||yourupload.com/jwe?
+||youtube-nocookie.com/api/stats/atr?
+||youtube-nocookie.com/api/stats/delayplay?
+||youtube-nocookie.com/api/stats/qoe?
+||youtube-nocookie.com/ptracking?
+||youtube-nocookie.com/robots.txt?
+||youtube.com/api/stats/delayplay?
+||youtube.com/api/stats/qoe?
+||youtube.com/get_video?
+||youtube.com/ptracking?
+||youtube.com/set_awesome?
+||youtubekids.com/api/stats/ads?
+||youtubekids.com/api/stats/qoe?
+||youtubekids.com/ptracking?
+||z.cdp-dev.cnn.com^
+||z737.thestar.com^
+||za.qeeq.com^
+||zappos.com/err.cgi?
+||zappos.com/karakoram/js/main.
+||zenimpact.io/dist/zen_init.min.js
+||zerohedge.com/statistics-ajax?
+||zillowstatic.com/contact-pixel/$image,domain=zillow.com
+||zion-telemetry.api.cnn.io^
+||zoosk.com/cs/tp.png?
+! OpenTable
+://track.opentable.
+! Vinted
+://www.vinted.*/relay/events
+! akamaihd.net
+||akamaihd.net^$image,domain=globalnews.ca|nycgo.com|stcatharinesstandard.ca
+! Non-legit domains
+||edge-client^$script,domain=barrons.com
+! Plausible selfhosted
+||jeremiahlee.com/fanboynz.js
+! confection.io
+||hubspot.com/collected-forms/$xmlhttprequest,domain=confection.io
+||s3.amazonaws.com/downloads.mailchimp.com/$script,domain=confection.io
+||substation.confection.io^
+! Adobe
+||lightning.ncaa.com/launch/$script
+! onesignal.com
+||onesignal.com^$domain=androidauthority.com|iphoneincanada.ca|rockpapershotgun.com|senpa.io|shineads.org
+! Bing
+||bing.com/fd/ls/l?IG=
+||bing.com/fd/ls/lsp.aspx
+||bing.com^*/glinkping.aspx$ping,xmlhttprequest
+||bing.com^*/GLinkPingPost.aspx$ping,xmlhttprequest
+! Site specific elements (due to EP)
+###cxense-recs-in-article
+##.embed-responsive-trendmd
+! Aliexpress
+||aliyuncs.com/r.png
+||gj.mmstat.com^
+||oneid.mmstat.com^
+! Port scanning Fingerprinting Trackers (Privacy and CPU abuse)
+! https://nullsweep.com/why-is-this-website-port-scanning-me/
+/^https?:\/\/fdts\.ebay-kleinanzeigen\.de\/[a-z0-9]{13,18}\.js\?/$script,domain=kleinanzeigen.de
+/^https?:\/\/pov\.spectrum\.net\/[a-zA-Z0-9]{14,}\.js/$script,domain=spectrum.net
+/^https?:\/\/tjmaxx\.tjx\.com\/libraries\/[a-z0-9]{20,}/$script,xmlhttprequest,domain=tjx.com
+/^https?:\/\/tmx\.(td|tdbank)\.com\/[a-z0-9]{14,18}\.js.*/$script,domain=mbna.ca|td.com|tdbank.com
+/^https?:\/\/www\.ebay-kleinanzeigen\.de\/[a-z0-9]{8}\-[0-9a-f]{4}\-/$script,domain=kleinanzeigen.de
+/^https?:\/\/www\.kroger\.com\/content\/{20,}/$script,xmlhttprequest,domain=kroger.com
+||127.0.0.1^$third-party,domain=53.com|ameriprise.com|beachbody.com|chick-fil-a.com|citi.com|ebay.at|ebay.be|ebay.ca|ebay.ch|ebay.cn|ebay.co.uk|ebay.com|ebay.com.au|ebay.com.hk|ebay.com.my|ebay.com.sg|ebay.de|ebay.es|ebay.fr|ebay.ie|ebay.it|ebay.nl|ebay.ph|ebay.pl|equifax.ca|equifax.com|globo.com|gumtree.com|kleinanzeigen.de|lendup.com|mbna.ca|rusneb.ru|sciencedirect.com|sky.com|spectrum.net|td.com|tiaa.org|vedacheck.com|wepay.com|whatleaks.com
+||cfa.fidelity.com^
+||citi.com^*/fp.js
+||citibank.com.ph/JSO/js/fp.js
+||citibank.com.ph/tmx/js/
+||citibank.com.sg/jso/js/fp.js
+||citibank.com.sg/tmx/
+||clear.wallapop.com^
+||content22.bmo.com^
+||content22.citi.eu^$script
+||content22.citibank.com.au^
+||content22.citibank.com.sg^$script
+||content22.online.citi.com^
+||customer.homedepot.com^$script
+||drfdisvc.walmart.com^
+||ebay.com/nkfytkqtoxtljvzbxhr.js$script,domain=ebay.com
+||ebaystatic.com/rs/v/10341xh50yz21mhhydueu4m5wad.js
+||ebaystatic.com/rs/v/dxtuvtkk2q3hpkc1xveeo13iaek.js
+||ebaystatic.com/rs/v/klminxoj1uyzvo0p0qu4nhpg0qo.js
+||ebaystatic.com/rs/v/s0hteylevy4bpkd12dvkd4yi5ms.js
+||event.evtm.53.com^
+||idstatus.sky.com^
+||imgs.signifyd.com^
+||olacontent.schwab.com^$script
+||qfp.intuit.com^
+||rba-screen.healthsafe-id.com^
+||rsx.afterpay.com^
+||src.ebay-us.com/*=usllpic$script,domain=ebay.com
+||svc2.sc.com^
+||tm-eps.neutrino.nu^
+||tmetrix.my.chick-fil-a.com^
+||tmx.bestbuy.com^
+||tmx.td.com^
+||u47.pnc.com^
+||w-profiling.cibc.com^$script
+||w-profiling.simplii.com^
+! Fingerprint
+||bankofamerica.com/cookie-id.js
+||bup.bankofamerica.com^
+||cdn1.skrill.com^
+||d276.ourmidland.com^
+||d810.mysanantonio.com^
+||dii.bankaust.com.au^
+||eventbus.intuit.com^
+||f775.thehour.com^
+||h353.ncadvertiser.com^
+||h559.stamfordadvocate.com^
+||halifax-online.co.uk/scripts/16c9d93d/
+||j198.registercitizen.com^
+||l936.expressnews.com^
+||o398.trumbulltimes.com^
+||pf.intuit.com^
+||q777.sfchronicle.com^
+||rail.bankofamerica.com^$script,~third-party,xmlhttprequest
+||sofa.bankofamerica.com^
+||t570.wiltonbulletin.com^
+||tilt.bankofamerica.com^
+||u652.myplainview.com^
+||u927.sfgate.com^
+||w740.newstimes.com^
+||y738.nhregister.com^
+||y820.darientimes.com^
+||y900.greenwichtime.com^
+||z211.yourconroenews.com^
+||z492.ctinsider.com^
+||z680.beaumontenterprise.com^
+||zion.qbo.intuit.com^
+! Consent/GDPR tracking
+! https://github.com/easylist/easylist/blob/08ad3ed93e8ddbc32b8860340f25e8ddf4074741/easyprivacy/easyprivacy_specific.txt#L2813
+://a02342.
+||cb-mms.carbuyer.co.uk^
+||cmp.courrierinternational.com^
+||cmp.finn.no^
+||cmp.huffingtonpost.fr^
+||cmp.lavie.fr^
+||cmp.lemonde.fr^
+||cmp.lepoint.fr^
+||cmp.netzwelt.de^
+||cmp.nouvelobs.com^
+||cmp.tech426.com^
+||cmp.tek.no^
+||cmp.telerama.fr^
+||d.sourcepoint.capitalfm.com^
+||fuse.forbes.com^
+||h-bid.com^$third-party
+||sourcepoint-mms.aetv.com^
+||sourcepoint-mms.history.com^
+||sourcepoint-mms.mylifetime.com^
+||trustarc.mgr.consensu.org/get?
+||vg247-p2.vg247.com^
+||vg247-uk.vg247.com^
+! McClatchy sites (bellinghamherald.com,bnd.com,bradenton.com,centredaily.com etc)
+! https://github.com/easylist/easylist/blob/4ec8049213fd2ede4682f1760764ae79cda7cc55/easyprivacy/easyprivacy_specific.txt#L1067
+/misites/*
+/yozons-lib/*
+! CSP Mining
+$csp=child-src 'none'; frame-src 'self' *; worker-src 'none',domain=fileone.tv|theappguruz.com
+$csp=child-src 'none'; frame-src *; worker-src 'none',domain=thepiratebay.org|vidoza.net
+
+! *** easylist:easyprivacy/easyprivacy_specific_perimeterx.txt ***
+||anthropologie.com/XgWM9nuH/init.js
+||apartmenttherapy.com/jAYekY18/init.js
+||asda.com/px/PX1UGLZTko/init.js
+||ashleyfurniture.com/ouqLB4fq/init.js
+||auctionzip.com/eKtvxkQ2/init.js
+||b.px-cdn.net/api/v1/PXrf8vapwA/
+||bathandbodyworks.com/lsXlyYa5/init.js
+||belk.com/0iiey9LM/init.js
+||bhphotovideo.com/3D8mkYG1/init.js
+||bloomberg.com/8FCGYgk4/init.js
+||booking.com/87sduif98q3rijax
+||booktopia.com.au/Ns7aBMIv/init.js
+||brownsshoes.com/IZ/2tcS0qiG/init.js
+||build.com/2Ztkihy4/init.js
+||calm.com/api/12Xk43jk/init.js
+||calvinklein.us/n8ANl15k/init.js
+||carbon38.com/A44kxi5a/init.js
+||careermatch.com/oGckki0e/init.js
+||carolsdaughter.com/IZ/uaPO0cuk/init.js
+||carters.com/0F3091f3/init.js
+||couchsurfing.com/bEcn7fQX/init.js
+||crunchbase.com/rw7M6iAV/init.js
+||discount.hk-hotel.com/QUkd4lO9/init.js
+||drupal.org/VnPBBfwe/init.js
+||fiverr.com/px/client/PXK3bezZfO/main.min.js
+||flixcart.com/px/gNtTli3A/init.js
+||flooranddecor.com/v1HqbVho/init.js
+||foodora.fi/lJuB4eTB/init.js
+||foodora.se/lJuB4eTB/init.js
+||foodpanda.bg/lJuB4eTB/init.js
+||foodpanda.hk/lJuB4eTB/init.js
+||foodpanda.ph/lJuB4eTB/init.js
+||foodpanda.pk/lJuB4eTB/init.js
+||foodpanda.ro/lJuB4eTB/init.js
+||foodpanda.sg/lJuB4eTB/init.js
+||freepeople.com/tN88Q85M/init.js
+||hotpads.com/xOR1K5b6/init.js
+||houstonchronicle.com/413gkwMT/init.js
+||iherb.com/VtidNbtC/init.js
+||internships.com/oGckki0e/init.js
+||jimmyjohns.com/Abo2Yc8X/init.js
+||joann.com/qXTWmr91/init.js
+||kerastase-usa.com/IZ/PXXiuO7QTJ/init.js
+||kickstarter.com/Uy3R669N/init.js
+||kiehls.com/IZ/PXG8ATFja1/init.js
+||kiva.org/r3pNVz1F/init.js
+||ktla.com/CvbtpUrj/init.js
+||lancome-usa.com/IZ/PXq99AlOxk/init.js
+||madlan.co.il/o4wPDYYd/init.js
+||mysanantonio.com/413gkwMT/init.js
+||newsnationnow.com/yZuPxxW0/init.js
+||nyxcosmetics.com/IZ/PXLZNv2dn4/init.js
+||octopart.com/kdRQnL15/init.js
+||oshkosh.com/0F3091f3/init.js
+||priceline.com/9aTjSd0n/init.js
+||ralphlauren.com^*/init.js
+||realtor.com/rdc_user_check/init.js
+||sams.com.mx/px/PX87wpO5aK/init.js
+||samsclub.com/px/PXsLC3j22K/init.js
+||seattlepi.com/413gkwMT/init.js
+||seekingalpha.com/xgCxM9By/init.js
+||sensor.grubhub.com/O97ybH4J/init.js
+||sfgate.com/413gkwMT/init.js
+||shiekh.com/iJ55yhVs/init.js
+||shoebacca.com/YaRJwC0q/init.js
+||simon.com/46SCNLxs/init.js
+||skechers.com/dL6GOSf9/init.js
+||skiphop.com/0F3091f3/init.js
+||snipesusa.com/6XNN2xkk/init.js
+||spirit.com/kp4CLSb5/init.js
+||ssense.com/58Asv359/init.js
+||stockx.com/16uD0kOF/init.js
+||streeteasy.com/cZdhF737/init.js
+||studeersnel.nl/27m703Hm/init.js
+||studocu.com/27m703Hm/init.js
+||sweetwater.com/p2TBVNJZ/init.js
+||thehill.com/6zcfGH4h/init.js
+||therealreal.com/ev56mY37/init.js
+||timesunion.com/413gkwMT/init.js
+||tumi.com/4i06uv8M/init.js
+||walmart.ca/px/PXnp9B16Cq/init.js
+||walmart.com/px/PXu6b0qd2S/init.js
+||walmartcanada.ca/px/PXcfrcFEfA/init.js
+||walmartcareerswithamission.com/px/PXcfrcFEfA/init.js
+||walmartethics.com/px/PXcfrcFEfA/init.js
+||walmartpetrx.com/1Ct9c6G3/init.js
+||walmartrealty.com/px/PXcfrcFEfA/init.js
+||wfla.com/CvbtpUrj/init.js
+||wgno.com/CvbtpUrj/init.js
+||whois.com/js/gtmDataLayer.js
+||wine-searcher.com/K6S8okp3/init.js
+||worthpoint.com/lIUjcOwl/init.js
+||www.digikey.*/lO2Z493J/init.js
+||www.mouser.*/4UAZUiaI/init.js
+||zazzle.ca/botdefender/init.js
+||zazzle.ca/svc/px
+||zazzle.co.nz/botdefender/init.js
+||zazzle.co.nz/svc/px
+||zazzle.co.uk/botdefender/init.js
+||zazzle.co.uk/svc/px
+||zazzle.com.au/botdefender/init.js
+||zazzle.com.au/svc/px
+||zazzle.com/botdefender/init.js
+||zazzle.com/svc/px
+||zazzle.de/botdefender/init.js
+||zazzle.de/svc/px
+||zazzle.es/botdefender/init.js
+||zazzle.es/svc/px
+||zazzle.fr/botdefender/init.js
+||zazzle.fr/svc/px
+||zillow.com/HYx10rg3/init.js
+||zoominfo.com/osx7m0dx/init.js
+!-----------------Extension specific systems-----------------!
+! *** easylist:easyprivacy/easyprivacy_specific_uBO.txt ***
+!#if ext_ublock
+
+! Admiral popups
+247sports.com,androidpolice.com,arstechnica.com,audiotools.pro,audizine.com,blackenterprise.com,boston.com,britannica.com,cattime.com,cbr.com,cheatsheet.com,collider.com,comingsoon.net,cwtv.com,dogtime.com,download.mokeedev.com,esportstales.com,forums.hfboards.com,freep.com,fresnobee.com,gamerant.com,gbatemp.net,golfdigest.com,grabify.link,hancinema.net,hemmings.com,howtogeek.com,ijr.com,informazionefiscale.it,inquirer.net,insider-gaming.com,knowyourmeme.com,magesypro.pro,makeuseof.com,money.it,motorbiscuit.com,movieweb.com,nationalreview.com,nbcnews.com,neopets.com,nofilmschool.com,nypost.com,omg.blog,order-order.com,pastes.io,playstationlifestyle.net,pwinsider.com,savvytime.com,screenrant.com,siliconera.com,simpleflying.com,sporcle.com,stealthoptional.com,techlicious.com,technicpack.net,thedraftnetwork.com,thefashionspot.com,thegamer.com,thenerdstash.com,titantv.com,topspeed.com,twinfinite.net,usatoday.com,videogamer.com,wnd.com,worldpopulationreview.com,wral.com,wrestlezone.com,wrestlinginc.com,xda-developers.com##+js(acis, document.createElement, admiral)
+gbatemp.net##+js(set, admiral, noopFunc)
+thegamer.com##+js(abort-current-script, document.createElement, admiral)
+brobible.com,dualshockers.com,si.com,androidpolice.com,makeuseof.com,cbr.com,collider.com,thegamer.com,simpleflying.com,stealthoptional.com,xda-developers.com,howtogeek.com,screenrant.com##+js(abort-on-property-read, googletag)
+! fedex.com
+fedex.com##+js(set-local-storage-item, fdx_enable_new_detail_page, true)
+!#if cap_html_filtering
+abema.tv##^script:has-text(NREUM)
+!#else
+abema.tv##+js(rmnt, script, NREUM)
+!#endif
+://coomer.su^$xhr,method=patch|post
+://kemono.su^$xhr,method=patch|post
+@@/^https:\/\/coomer\.su\/api\/v1\/(?:fansly|onlyfans)\/user\/[0-9A-Z_a-z]+\/post\/[-0-9A-Za-z]+(?:\/flag)?$/$xhr,1p,match-case,method=post
+@@/^https:\/\/coomer\.su\/api\/v1\/favorites\/creator\/(?:fansly|onlyfans)\/[0-9A-Z_a-z]+$/$xhr,1p,match-case,method=post
+@@/^https:\/\/coomer\.su\/api\/v1\/favorites\/post\/(?:fansly|onlyfans)\/[0-9A-Z_a-z]+\/\d+$/$xhr,1p,match-case,method=post
+@@/^https:\/\/kemono\.su\/api\/v1\/(?:afdian|boosty|discord|dlsite|fan(?:box|tia)|gumroad|onlyfans|patreon|subscribestar)\/user\/[0-9A-Z_a-z]+\/post\/[-0-9A-Za-z]+(?:\/flag)?$/$xhr,1p,match-case,method=post
+@@/^https:\/\/kemono\.su\/api\/v1\/favorites\/creator\/(?:afdian|boosty|discord|dlsite|fan(?:box|tia)|gumroad|onlyfans|patreon|subscribestar)\/[0-9A-Z_a-z]+$/$xhr,1p,match-case,method=post
+@@/^https:\/\/kemono\.su\/api\/v1\/favorites\/post\/(?:afdian|boosty|discord|dlsite|fan(?:box|tia)|gumroad|onlyfans|patreon|subscribestar)\/[0-9A-Z_a-z]+\/[0-9A-Za-z]+$/$xhr,1p,match-case,method=post
+@@||coomer.su/.well-known/ddos-guard/mark/|
+@@||kemono.su/.well-known/ddos-guard/mark/|
+
+
+! EOF
+!#endif
+!-----------------Individual cname tracking systems-----------------!
+! *** easylist:easyprivacy/easyprivacy_specific_cname_dataunlocker.txt ***
+||0d8is908gby1.www.terraform.com.ar^
+||10ro53kulyb.groove.so^
+||11b6n4ty2x3.taxliencode.com^
+||13js1lbtbj3.sparkloop.app^
+||16i6nuuc2ej.koelewijn.nl^
+||1a715b8q5m3j.www.logology.co^
+||1amehwchx31.bloxdhop.io^
+||1baq2nvd6n7.www.keevowallet.com^
+||1bpmtrvkqkj.pettoonies.com^
+||1bw7etm93lf.www.woodbrass.com^
+||1hb4jkt1u2d.probemas.com^
+||1k5vz1ejbcx.staging.probemas.com^
+||1koa95e6z2j.www.future-fortune.com^
+||1kpv4njzilv.community.intersystems.com^
+||1xejnhs1zd1.staging.aporia.com^
+||2107wrlgff5.development.taxmachine.be^
+||21fhq0t574p.talentkit.io^
+||21udflra4wd.app-dev.cainthus.com^
+||25ix8gm8ien.sandbox.panprices.com^
+||2829i2p88jx.www.csaladinet.hu^
+||2922qj5tf2n.swyftx.com.au^
+||2aa6f9qgrh9.acc.evservice.nl^
+||2e718yf5jypb.test.digitalsurge.io^
+||2rid9fii9chx.www.atlaslane.com^
+||2yqcaqbfnv.nextgen.shareablee.com^
+||3l0zszdzjhpw.www.comicleaks.com^
+||3wn3w3skxpym.round.t3.gg^
+||48z7wyjdsywu.www.revistaferramental.com.br^
+||4jaehnfqizyx.controlconceptsusa.com^
+||5mc92su06suu.www.abhijith.page^
+||6nwp0r33a71m.app.dev.cardahealth.com^
+||704g8xh7qfzx.www.intercity.technology^
+||76zvoxo5yx0l.www.eldorado.gg^
+||771fnypadw0j.pt.themoneytizer.com^
+||78rkcgj4i8c6.www.cefirates.com^
+||7hdl8dlfjm4g.www.cybernetman.com^
+||8e0905osvgw5.taleez.com^
+||8ehhtsv9bo7i.monkeylearn.com^
+||8thlapkjjq3n.jacobzhang.de^
+||9b5gjkrnw71r.it.themoneytizer.com^
+||9kkjfywjz50v.www.eventus.io^
+||9l3cr6dvk2kb.adaptive.marketing^
+||9uim1pc4ej4n.ru.themoneytizer.com^
+||ac9kpxbans1l.staging.unstoppabledomains.com^
+||am3s622gcd6m.tt.live^
+||av6fm8zw2cvz.furucombo.app^
+||b1tow9h4erpw.anur.polymerdev.com^
+||b20p6lt350nt.app.polymersearch.com^
+||b536mpmxoqxa.www.themoneytizer.com^
+||b5j6itccyluq.nofluffjobs.com^
+||bigbtmbvdzda.freelancer.taxmachine.be^
+||cqsecshf4rd9.www.tracktheta.com^
+||cqz6fn6aox.aporia.com^
+||cy98g9wuwn0n.angularjs.poc.glenigan.com^
+||din1j0su0u99.artwallstreet.io^
+||dlziqh9bo7.boring.fm^
+||dsoxjxin5jji.controlconceptsusa.com^
+||e5obq1v261.www.lurkit.com^
+||f02b61sgc617.es.themoneytizer.com^
+||f3ft699cloae.staging.artwallstreet.io^
+||fkupm8697t19.eyevolution.de^
+||fq9vy0muyqi3.www.madrigalmaps.com^
+||fyznhp8inq9x.jaywilsonwebsolutions.com^
+||gl5g98t0vfjb.panprices.com^
+||gvmomuqjv1.swyftx.com^
+||hht8m6w8mnug.quine.sh^
+||i0e6asb0fj5y.www.emanualonline.com^
+||ilkk97e98lvg.www.sidsplumbing.ie^
+||ivrnfvlcgubm.www.cefirates.com^
+||iwl2d7pa4yx1.www.logology.co^
+||ixa9ill0f7bg.grundbuch.zentraler-antragsservice.com^
+||jiktq0fr9hv6.meleton.ru^
+||k1usj3j6p706.dev.app.fika.community^
+||kn81kivjwwc7.www.logology.co^
+||li3k4d70ig52.resourceya.com^
+||lv6od3a4sz12.www.logology.co^
+||m4zoxtrcea1k.controlconceptsusa.com^
+||m6c4t9vmqarj.www.cefirates.com^
+||mh9qqwotr890.koelewijn.nl^
+||mteme7li1d6r.vertexmarketingagency.com^
+||n4kb43cl2bsw.creatordrop.com^
+||nqyuel589fq5.esgrounding.com^
+||o3gxzoewxl1x.cp.zomro.com^
+||otx23nu6rzon.prep.toppers.com^
+||p7h1silo3f.app.cainthus.com^
+||q3xly8i4oz.app.taxmachine.be^
+||q4l5gz6lqog6.www.eventus.io^
+||qnlbs2m0uoto.www.videoath.com^
+||qqeuq1cmoooq.accuretawealth.com^
+||qri2r94eeajr.innovationcast.com^
+||qt5jl7r111h7.allesvoormijnvakantie.nl^
+||rbat6ac0zzjd.www.terraform.com.ar^
+||ros3d4dbs3px.salud-masculina.info^
+||s2whyufxmzam.chatpay.com.br^
+||sfqp4hi357f6.www.emanualonline.com^
+||soahu1wnmt6l.www.replai.io^
+||sr59t7wbx5.claricelin.com^
+||swaljol72dgv.controlconceptsusa.com^
+||sxwxswg8z1xe.www.arnowebtv.com^
+||t7baxp1xmw00.boxoffice.adventuretix.com^
+||ti3av8k3ikwm.resume.gerardbosch.xyz^
+||tnincvf1d1jl.de.themoneytizer.com^
+||tzgurwizule3.app.cardahealth.com^
+||u0crsrah75fy.camberlion.com^
+||uhd5nn09mgml.fort-shop.kiev.ua^
+||unl1zvy2zuyn.franchiseplus.nl^
+||vyz3nn85ed0e.controlconceptsusa.com^
+||vzal21mooz.hyperwrite.ai^
+||w38ju82bano4.cv.gerardbosch.xyz^
+||wayyaj8t094u.www.kodalia.com^
+||wiar9wff0ma9.ping.t3.gg^
+||x2l5lsn8rvsq.li.finance^
+||xlvvy4msxr.coolinastore.com^
+||y4e04gql5o1b.www.nookgaming.com^
+||ysrrzgku6tar.us.themoneytizer.com^
+||zkmhhr1fr79z.dictionary.basabali.org^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_a8net.txt ***
+||1909a8.satofull.jp^
+||a8-22.hana-yume.net^
+||a8-affiliate.kase3535.com^
+||a8-cv.lean-body.jp^
+||a8-hoiku.mama-9jin.com^
+||a8-itp.qoo10.jp^
+||a8-kouten.kouten.work^
+||a8-mamacareer.mama-9jin.com^
+||a8-wpxblog.secure.wpx.ne.jp^
+||a8-wpxshin.secure.wpx.ne.jp^
+||a8-xshop.secure.xserver.ne.jp^
+||a8.01cloud.jp^
+||a8.123.rheos.jp^
+||a8.2ndstreet.jp^
+||a8.366vivi.com^
+||a8.abemashopping.jp^
+||a8.ablenet.jp^
+||a8.aga-hakata.com^
+||a8.ahcswiss.com^
+||a8.air-snet.com^
+||a8.aliceandolivia.jp^
+||a8.ama-mail.jp^
+||a8.amairo-sky.com^
+||a8.andethic.com^
+||a8.arrrt-shop.com^
+||a8.asdf.co.jp^
+||a8.au-hikarinet.com^
+||a8.avalon-works.com^
+||a8.b-cafe.net^
+||a8.bambi-craft.com^
+||a8.bandel.jp^
+||a8.banninkun.com^
+||a8.beerowle.com^
+||a8.benro.jp^
+||a8.big-hikari.com^
+||a8.biglobe.openplat.jp^
+||a8.biz.ne.jp^
+||a8.biziphone.com^
+||a8.bobby-jp.com^
+||a8.boco.co.jp^
+||a8.bon-quish.jp^
+||a8.bousui-pro.com^
+||a8.brandcosme.com^
+||a8.brandkaimasu.com^
+||a8.bridal-hills.com^
+||a8.buddyup.shop^
+||a8.buvlabo.com^
+||a8.calmia-clinic.com^
+||a8.careecen-shukatsu-agent.com^
+||a8.career.rexit.co.jp^
+||a8.careerpark.jp^
+||a8.casie.jp^
+||a8.cbd-cosme.jp^
+||a8.cbd-oil.jp^
+||a8.cbiz.io^
+||a8.centarc.com^
+||a8.chat-lady.jp^
+||a8.chiyo-moni.com^
+||a8.choomia.com^
+||a8.chuo-estate.net^
+||a8.clarah.jp^
+||a8.classicalelf.shop^
+||a8.clubgets.com^
+||a8.cocomeister.jp^
+||a8.coloria.jp^
+||a8.copyki-pr.com^
+||a8.cotta.jp^
+||a8.creativevillage.ne.jp^
+||a8.croaster-select.com^
+||a8.cucua.fun^
+||a8.cyclemarket.jp^
+||a8.cypris-online.jp^
+||a8.daredemomobile.com^
+||a8.de-limmo.jp^
+||a8.degicashop.com^
+||a8.denki-koji.work^
+||a8.denki-tatsujin.com^
+||a8.denwa-hikari.com^
+||a8.denwa-kaisen.jp^
+||a8.denwa-kanyuken.com^
+||a8.diakaimasu.jp^
+||a8.doctorstretch.com^
+||a8.dolcibolle.com^
+||a8.drinco.jp^
+||a8.dstation.jp^
+||a8.dymtech.jp^
+||a8.earth-shiho.com^
+||a8.earthwater-cayenne.com^
+||a8.efax.co.jp^
+||a8.elife.clinic^
+||a8.emeao.jp^
+||a8.emestore.me^
+||a8.emma-sleep-japan.com^
+||a8.engineer-shukatu.jp^
+||a8.eonet.jp^
+||a8.eonet.ne.jp^
+||a8.epauler.co.jp^
+||a8.epo.info^
+||a8.erasutamo.onlinestaff.jp^
+||a8.everest.ac^
+||a8.evertrust-inc.com^
+||a8.exam-katekyo.com^
+||a8.exetime.jp^
+||a8.exwimax.jp^
+||a8.final-seo.jp^
+||a8.fishing-v.jp^
+||a8.fit-theme.com^
+||a8.foods.petokoto.com^
+||a8.form.run^
+||a8.fots.jp^
+||a8.fpo.bz^
+||a8.fracora.com^
+||a8.freeconsultant.btcagent.jp^
+||a8.freeengineer.btcagent.jp^
+||a8.ftcbeauty.com^
+||a8.fujiorganics.com^
+||a8.fxism.jp^
+||a8.gaizyu-taiji.com^
+||a8.gekisapo.com^
+||a8.geo-online.co.jp^
+||a8.global-mobility-service.com^
+||a8.gme.co.jp^
+||a8.golfland.co.jp^
+||a8.goodappeal.site^
+||a8.gtm.co.jp^
+||a8.guardian-mp.aerial-p.com^
+||a8.h-daiya.co.jp^
+||a8.hagent.jp^
+||a8.hakata-hisamatsu.net^
+||a8.hana-mail.jp^
+||a8.happy-card.jp^
+||a8.haptic.co.jp^
+||a8.healthyolive.com^
+||a8.heart-denpo.com^
+||a8.hemptouch.co.jp^
+||a8.hikari-flets.jp^
+||a8.hikari-n.jp^
+||a8.hikari-softbank.jp^
+||a8.hikarix.net^
+||a8.hitohana.tokyo^
+||a8.hitoma-tuhan.com^
+||a8.hoken-connect.com^
+||a8.hokengarden.com^
+||a8.hokkaido-nb.jp^
+||a8.i-netservice.net^
+||a8.i-staff.jp^
+||a8.idiy.biz^
+||a8.ihinnoseiriyasan.com^
+||a8.iisakafuji.online^
+||a8.ikkatsu.jp^
+||a8.industrial-branch.com^
+||a8.infinitussub.com^
+||a8.ippin-do.com^
+||a8.ixyee.net^
+||a8.jiiawater.com^
+||a8.joygirl.jp^
+||a8.joylab.jp^
+||a8.joyvack.com^
+||a8.jp.peacebird.com^
+||a8.kajitaku.com^
+||a8.kami2323.com^
+||a8.kanbei.jp^
+||a8.kateikyoushi.kuraveil.jp^
+||a8.kddi-hikari.com^
+||a8.kekkon.kuraveil.jp^
+||a8.kimonomachi.co.jp^
+||a8.kinkaimasu.jp^
+||a8.kinkennet.jp^
+||a8.kinnikushokudo-ec.jp^
+||a8.kireisalone.style^
+||a8.kireiyu.com^
+||a8.kissmusic.net^
+||a8.kizuna-link.jp^
+||a8.kland.shop^
+||a8.knew.jp^
+||a8.kojyo-worker.com^
+||a8.kotei-denwa.com^
+||a8.kougu-kaitoriyasan.com^
+||a8.kujo-service.com^
+||a8.l-co-shop.jp^
+||a8.labiotte.jp^
+||a8.lacitashop.com^
+||a8.lalala-clean.com^
+||a8.lantelno.jp^
+||a8.lat-international.com^
+||a8.lavie-official.jp^
+||a8.learning.agaroot.jp^
+||a8.lens-labo.com^
+||a8.lens-ocean.com^
+||a8.liver-rhythm.jp^
+||a8.looom.jp^
+||a8.looop-denki.com^
+||a8.lwa-coating.com^
+||a8.lyprimo.jp^
+||a8.machino-housecleaning.com^
+||a8.maf.mentor-capital.jp^
+||a8.makeshop.jp^
+||a8.mamacosme.co.jp^
+||a8.mamaworks.jp^
+||a8.manara.jp^
+||a8.medireanetshopoi.com^
+||a8.migxl.com^
+||a8.minion-wifi.com^
+||a8.mira-feel.com^
+||a8.miror.jp^
+||a8.mishii-list.com^
+||a8.misshajp.com^
+||a8.mm-digitalsales.academy^
+||a8.mochu.jp^
+||a8.mogurun.com^
+||a8.moku.info^
+||a8.mosh.jp^
+||a8.musbell.co.jp^
+||a8.n-pri.jp^
+||a8.nanafu.tokyo^
+||a8.narikiri.me^
+||a8.nengahonpo.com^
+||a8.nengajyo.co.jp^
+||a8.netdego.jp^
+||a8.neur.jp^
+||a8.next-hikari.jp^
+||a8.nezumi-guard.com^
+||a8.nezumi-kanzentaiji.com^
+||a8.nitta-biolab.co.jp^
+||a8.nitta-gelatin.jp^
+||a8.nosh.jp^
+||a8.novicetokyo.com^
+||a8.o-tayori.com^
+||a8.obihiro-butaichi.jp^
+||a8.ocnk.net^
+||a8.okamotogroup.com^
+||a8.olightstore.jp^
+||a8.onamae.com^
+||a8.onecoinenglish.com^
+||a8.ones-ones.jp^
+||a8.otonayaki.com^
+||a8.outline-gym.com^
+||a8.papapa.baby^
+||a8.parcys.com^
+||a8.pcnext.shop^
+||a8.pcrjapan.clinicnearme.jp^
+||a8.pcwrap.com^
+||a8.pearlizumi.co.jp^
+||a8.petfood.mtflat.co.jp^
+||a8.pla-cole.wedding^
+||a8.pocket-m.jp^
+||a8.polyglots.net^
+||a8.princess-jp.com^
+||a8.print-netsquare.com^
+||a8.projectee.online^
+||a8.push.capsules.jp^
+||a8.rank-quest.jp^
+||a8.recmount-plus.com^
+||a8.remix-denki.com^
+||a8.remobiz.jp^
+||a8.renkindo.com^
+||a8.ricafrosh.com^
+||a8.ringbell.co.jp^
+||a8.rinshosiken.com^
+||a8.route-roller.info^
+||a8.runway-harmonia.co.jp^
+||a8.ryugaku.kuraveil.jp^
+||a8.sakemuseum.com^
+||a8.sakuradome-direct.com^
+||a8.sakuramobile.jp^
+||a8.sakuratravel.jp^
+||a8.sara-uv.com^
+||a8.sawadamarche.com^
+||a8.schecon.com^
+||a8.seifu-ac.jp^
+||a8.seminarshelf.com^
+||a8.sennendo.jp^
+||a8.sharefull.com^
+||a8.shikaketegami.com^
+||a8.shikigaku.jp^
+||a8.shinnihonjisyo.co.jp^
+||a8.shitsukekun.com^
+||a8.shizq.store^
+||a8.shokubun.net^
+||a8.shop.basefood.co.jp^
+||a8.shop.km-link.jp^
+||a8.shop.nicosuma.com^
+||a8.shop.tsukijiwadatsumi.com^
+||a8.shopserve.jp^
+||a8.shukatsu-note.com^
+||a8.sibody.tw^
+||a8.simple-hoiku.com^
+||a8.skr-labo.jp^
+||a8.smart-onepage.com^
+||a8.smp.shanon.co.jp^
+||a8.snapmaker.jp^
+||a8.soelu.com^
+||a8.softbank-hikari.jp^
+||a8.sommelier.gift^
+||a8.sp-hoken.net^
+||a8.speever.jp^
+||a8.sport-school.com^
+||a8.ssl.aispr.jp^
+||a8.st.oddspark.com^
+||a8.store.aceservice.jp^
+||a8.store.goo.ne.jp^
+||a8.strapya.com^
+||a8.sui-so.com^
+||a8.suma-sapo.net^
+||a8.sumai-planet.com^
+||a8.sumilena.co.jp^
+||a8.tabechoku.com^
+||a8.tailorenglish.jp^
+||a8.tapp-co.jp^
+||a8.taylormadegolf.jp^
+||a8.tcha-tcha-japan.com^
+||a8.tea-lab.co.jp^
+||a8.tecgate.jp^
+||a8.tech-base.net^
+||a8.techis.jp^
+||a8.tecpartners.jp^
+||a8.teddyworks.co.jp^
+||a8.the-session.jp^
+||a8.themoonmilk.jp^
+||a8.thermostand.jp^
+||a8.thg.co.jp^
+||a8.tideisturning.com^
+||a8.tokihana.net^
+||a8.tokyo-hills-clinic.com^
+||a8.tone.ne.jp^
+||a8.toraiz.jp^
+||a8.tour-sys.com^
+||a8.tour.jtrip.co.jp^
+||a8.track.entry.dokoyorimo.com^
+||a8.triple-m.jp^
+||a8.tscubic.com^
+||a8.uchi-iwai.net^
+||a8.uchideno-kozuchi.com^
+||a8.uluwatutiger.com^
+||a8.unicoffee.tech^
+||a8.uridoki.net^
+||a8.uzuz-college.jp^
+||a8.vector-park.jp^
+||a8.vie-magique.com^
+||a8.vinew.jp^
+||a8.virus-gekitai.com^
+||a8.volstar.jp^
+||a8.vtuber.sexy^
+||a8.watero.pet^
+||a8.waterstand.jp^
+||a8.web-hikari.net^
+||a8.webdeki.com^
+||a8.webist-cri.com^
+||a8.wemotion.co.jp^
+||a8.wifi-fami.com^
+||a8.wifi-tokyo-rentalshop.com^
+||a8.wifi.erasutamo.onlinestaff.jp^
+||a8.willcloud.jp^
+||a8.williesenglish.jp^
+||a8.wizrecruitment.012grp.co.jp^
+||a8.woodlife.jp^
+||a8.worldikids.com^
+||a8.ws.job.career-tasu.jp^
+||a8.www.keurig.jp^
+||a8.www.melonbooks.co.jp^
+||a8.www.nicosuma.com^
+||a8.www.retrospect.co.jp^
+||a8.www.seesaa.co.jp^
+||a8.www.smart-factor.co.jp^
+||a8.xn--google-873exa8m6161dbbyb.net^
+||a8.xn--y8jd4aybzqd.jp^
+||a8.yakumatch.com^
+||a8.yanoman.com^
+||a8.yayoi-kk.co.jp^
+||a8.yellmall.jp^
+||a8.yumejin.jp^
+||a8.yuzen-official.com^
+||a8.zen-camps.com^
+||a8.zeroku.jp^
+||a8.zipan.jp^
+||a8.zzz-land.com^
+||a802.xn--38jf6c4pa86a1dv833cexrb.com^
+||a803.xn--38jf6c4pa86a1dv833cexrb.com^
+||a8affiliate.liftup-turban.net^
+||a8aspconv.itx-home-router.com^
+||a8aspconv.nn-com.co.jp^
+||a8aspconv.ns-air.net^
+||a8aspconv.ns-softbank-hikari.com^
+||a8aspconv.xn--auso-net-h53gmnzi.com^
+||a8aspconv.xn--bgm-os4bt98xxicx4fqs5c8e8agvq.com^
+||a8aspconv.xn--biglobe-kc9k.com^
+||a8aspconv.xn--ipv6-yn4cxgwe959zqrkp58g.com^
+||a8aspconv.xn--ocn-ws1e.jp^
+||a8atcomsme.mellife.jp^
+||a8clic.alcosystem.co.jp^
+||a8click.daini2.co.jp^
+||a8click.you-up.com^
+||a8click.young-mobile.net^
+||a8clk.011330.jp^
+||a8clk.1osechi.com^
+||a8clk.292957.jp^
+||a8clk.9factor.com^
+||a8clk.account.matsui.co.jp^
+||a8clk.adeliv.treasure-f.com^
+||a8clk.adventkk.co.jp^
+||a8clk.afi1.emanon-sharesalon.com^
+||a8clk.aipo.com^
+||a8clk.alljewelry.jp^
+||a8clk.amelia.ne.jp^
+||a8clk.ancar.jp^
+||a8clk.ands-tech.com^
+||a8clk.angeliebe.co.jp^
+||a8clk.aoki-style.com^
+||a8clk.ap.livede55.com^
+||a8clk.app.iioffice.net^
+||a8clk.app.offerbox.jp^
+||a8clk.apply-shop.menu.inc^
+||a8clk.asahi-net.or.jp^
+||a8clk.ashitarunrun.com^
+||a8clk.asp.jcity.co.jp^
+||a8clk.assecli.com^
+||a8clk.ato-barai.com^
+||a8clk.audiobook.jp^
+||a8clk.autoc-one.jp^
+||a8clk.bang.co.jp^
+||a8clk.beauteq.jp^
+||a8clk.bikeman.jp^
+||a8clk.biken-mall.com^
+||a8clk.biomarche.jp^
+||a8clk.birai-cm.com^
+||a8clk.biz-communication.jp^
+||a8clk.bizworkers.jp^
+||a8clk.booking.jetfi.jp^
+||a8clk.bresmile.jp^
+||a8clk.bungeisha.co.jp^
+||a8clk.buy-master.com^
+||a8clk.buyking.club^
+||a8clk.camerakaitori.jp^
+||a8clk.campaigns.speed-kaitori.jp^
+||a8clk.car-mo.jp^
+||a8clk.carbattery110.com^
+||a8clk.career.prismy.jp^
+||a8clk.carenessapp.lifekarte.com^
+||a8clk.cart.amahada.com^
+||a8clk.cart.co-heart.com^
+||a8clk.cart.dr-vegefru.com^
+||a8clk.cart.ordersupli.com^
+||a8clk.cart.raku-uru.jp^
+||a8clk.cd.ecostorecom.jp^
+||a8clk.cev.macchialabel.com^
+||a8clk.chance.com^
+||a8clk.chapup.jp^
+||a8clk.chat-wifi.site^
+||a8clk.checkout.leafee.me^
+||a8clk.chibakan-yachiyo.net^
+||a8clk.chuko-truck.com^
+||a8clk.cleaneo.jp^
+||a8clk.cocorotherapy.com^
+||a8clk.colone.cc^
+||a8clk.coreda.jp^
+||a8clk.cp.favorina.com^
+||a8clk.cp.formalklein.com^
+||a8clk.crefus.com^
+||a8clk.crowdworks.jp^
+||a8clk.cs.machi-ene.jp^
+||a8clk.cv.dreamsv.jp^
+||a8clk.cv.geechs-job.com^
+||a8clk.cv.hanaravi.jp^
+||a8clk.cv.kenkouichiba.com^
+||a8clk.cv.kihada.jp^
+||a8clk.cv.mensfashion.cc^
+||a8clk.cv.onedenki.jp^
+||a8clk.cv.only-story.jp^
+||a8clk.cv.shop.resalon.co.jp^
+||a8clk.cv.syukatsu-kaigi.jp^
+||a8clk.cv.t-fic.co.jp^
+||a8clk.cv.warau.jp^
+||a8clk.cv.yanuk.jp^
+||a8clk.d.toyo-case.co.jp^
+||a8clk.dfashion.docomo.ne.jp^
+||a8clk.digicafe.jp^
+||a8clk.doda.jp^
+||a8clk.dospara.co.jp^
+||a8clk.dr-10.com^
+||a8clk.dr-40.com^
+||a8clk.dr-8.com^
+||a8clk.driver-island.com^
+||a8clk.e-ninniku.jp^
+||a8clk.e-shikakunavi.com^
+||a8clk.ec.halmek.co.jp^
+||a8clk.ec.oreno.co.jp^
+||a8clk.ectool.jp^
+||a8clk.englead.jp^
+||a8clk.es.akyrise.jp^
+||a8clk.ex-wifi.jp^
+||a8clk.excellence-aoyama.com^
+||a8clk.famm.us^
+||a8clk.fastsim.jp^
+||a8clk.fc-mado.com^
+||a8clk.fido-co.com^
+||a8clk.firadis.net^
+||a8clk.for-customer.com^
+||a8clk.form.coached.jp^
+||a8clk.formal.cariru.jp^
+||a8clk.formasp.jp^
+||a8clk.francfranc.com^
+||a8clk.fromcocoro.com^
+||a8clk.fujisan.co.jp^
+||a8clk.fuku-chan.jp^
+||a8clk.funds.jp^
+||a8clk.geo-arekore.jp^
+||a8clk.global-crown.com^
+||a8clk.globalbase.jp^
+||a8clk.golf-kace.com^
+||a8clk.grandg.com^
+||a8clk.grirose.jp^
+||a8clk.gurutas.jp^
+||a8clk.guruyaku.jp^
+||a8clk.hags-ec.com^
+||a8clk.hikakaku.com^
+||a8clk.hikarinobe.com^
+||a8clk.hoken-minaoshi-lab.jp^
+||a8clk.hokennews.jp^
+||a8clk.hom.adebtt.info^
+||a8clk.hotman-onlineshop.com^
+||a8clk.hozon.sp-site.jp^
+||a8clk.hurugicom.jp^
+||a8clk.ias.il24.net^
+||a8clk.inakakon.jp^
+||a8clk.info2.sunbridge.com^
+||a8clk.jaf.or.jp^
+||a8clk.janiking.jp^
+||a8clk.jlp-shop.jp^
+||a8clk.jobspring.jp^
+||a8clk.joggo.me^
+||a8clk.joppy.jp^
+||a8clk.just-buy.jp^
+||a8clk.justfitoffice.com^
+||a8clk.justy-consul.com^
+||a8clk.ka-shimo.com^
+||a8clk.kaitori-beerecords.jp^
+||a8clk.kaitori-janiyard.jp^
+||a8clk.kaitori-retrog.jp^
+||a8clk.kaitori-toretoku.jp^
+||a8clk.kaitori-yamatokukimono.jp^
+||a8clk.kaitori.kind.co.jp^
+||a8clk.kaitoriyasan.group^
+||a8clk.kake-barai.com^
+||a8clk.kanagawa-zero.com^
+||a8clk.kenkoukazoku.co.jp^
+||a8clk.kihada.jp^
+||a8clk.komochikon.jp^
+||a8clk.kyoto-health.co.jp^
+||a8clk.kyoyu-mochibun.com^
+||a8clk.label-seal-print.com^
+||a8clk.lasana.co.jp^
+||a8clk.laundry-out.jp^
+||a8clk.lens-1.jp^
+||a8clk.libinc.jp^
+||a8clk.life.bang.co.jp^
+||a8clk.lolipop.jp^
+||a8clk.loungemembers.com^
+||a8clk.low-ya.com^
+||a8clk.lp.yuyu-kenko.co.jp^
+||a8clk.ma-platform.com^
+||a8clk.macchialabel.com^
+||a8clk.macpaw.com^
+||a8clk.manabiz.jp^
+||a8clk.manage.conoha.jp^
+||a8clk.mapple-tour.com^
+||a8clk.marche.onward.co.jp^
+||a8clk.mat.duskin-hozumi.co.jp^
+||a8clk.meister-coating.com^
+||a8clk.mens-mr.jp^
+||a8clk.mens-rinx.jp^
+||a8clk.merry.duskin-hozumi.co.jp^
+||a8clk.miidas.jp^
+||a8clk.minnadeooyasan.com^
+||a8clk.mirrorball-recurit.emanon-sharesalon.com^
+||a8clk.mobile-norikae.com^
+||a8clk.mop.duskin-hozumi.co.jp^
+||a8clk.moriichi-net.co.jp^
+||a8clk.mouse-jp.co.jp^
+||a8clk.moving.a-tm.co.jp^
+||a8clk.mutukistyle.com^
+||a8clk.muumuu-domain.com^
+||a8clk.mynavi-creator.jp^
+||a8clk.mynavi-job20s.jp^
+||a8clk.mypage.awesome-wash.com^
+||a8clk.nandemo-kimono.com^
+||a8clk.nenga-kazoku.com^
+||a8clk.nenga.fumiiro.jp^
+||a8clk.netowl.jp^
+||a8clk.nikkoudou-kottou.com^
+||a8clk.nissen.co.jp^
+||a8clk.nobirun.jp^
+||a8clk.nta.co.jp^
+||a8clk.nyandaful.jp^
+||a8clk.okamoto-homelife.com^
+||a8clk.okawa-god.jp^
+||a8clk.okuta.com^
+||a8clk.olulu-online.jp^
+||a8clk.onemile.jp^
+||a8clk.only-story.jp^
+||a8clk.order-box.net^
+||a8clk.order.banana-wifi.com^
+||a8clk.order.lpio.jp^
+||a8clk.orders.bon-book.jp^
+||a8clk.osoujihonpo.com^
+||a8clk.owners-age.com^
+||a8clk.p-bandai.jp^
+||a8clk.pages.supporterz.jp^
+||a8clk.patpat.com^
+||a8clk.petelect.jp^
+||a8clk.petitjob.jp^
+||a8clk.photorevo.info^
+||a8clk.plusone.space^
+||a8clk.point-island.com^
+||a8clk.point-land.net^
+||a8clk.point-museum.com^
+||a8clk.point-stadium.com^
+||a8clk.psd.jp^
+||a8clk.purekon.jp^
+||a8clk.qracian365.com^
+||a8clk.radianne.jp^
+||a8clk.rarejob.com^
+||a8clk.rdlp.jp^
+||a8clk.recycle-net.jp^
+||a8clk.rei-book.com^
+||a8clk.rental.geo-online.co.jp^
+||a8clk.reserve.retty.me^
+||a8clk.resortbaito-dive.com^
+||a8clk.rf28.com^
+||a8clk.risou.com^
+||a8clk.satei-meijin.com^
+||a8clk.secure.freee.co.jp^
+||a8clk.secure.jetboy.jp^
+||a8clk.segatoys.com^
+||a8clk.service.ridera-inc.com^
+||a8clk.shadoten.com^
+||a8clk.shareboss.net^
+||a8clk.shikaku-square.com^
+||a8clk.shinnihon-seminar.com^
+||a8clk.shoes.regal.co.jp^
+||a8clk.shokutakubin.com^
+||a8clk.shop.echigofuton.jp^
+||a8clk.shop.kitamura.jp^
+||a8clk.shop.saraya.com^
+||a8clk.shop.shareme.jp^
+||a8clk.shop.sunsorit.co.jp^
+||a8clk.shop.tanita.co.jp^
+||a8clk.sikatoru.com^
+||a8clk.siro.duskin-hozumi.co.jp^
+||a8clk.sirtuinbooster.net^
+||a8clk.sixcore.ne.jp^
+||a8clk.skima.jp^
+||a8clk.skynet-c.jp^
+||a8clk.skyoffice.info^
+||a8clk.sma-ene.jp^
+||a8clk.smart-keiri.com^
+||a8clk.smile-zemi.jp^
+||a8clk.sohbi-company.com^
+||a8clk.solideajapan.com^
+||a8clk.speedcoaching.co.jp^
+||a8clk.staff.mynavi.jp^
+||a8clk.star-mall.net^
+||a8clk.starwifi.jp^
+||a8clk.store.kadokawa.co.jp^
+||a8clk.store.mago-ch.com^
+||a8clk.stylestore.jp^
+||a8clk.suguchoku.jp^
+||a8clk.sumafuri.jp^
+||a8clk.support-hoiku.com^
+||a8clk.supreme-noi.jp^
+||a8clk.sure-i.co.jp^
+||a8clk.t-fic.co.jp^
+||a8clk.taisho-beauty.jp^
+||a8clk.takken-job.com^
+||a8clk.takuhai.daichi-m.co.jp^
+||a8clk.tamiyashop.jp^
+||a8clk.tanp.jp^
+||a8clk.tastytable-food.com^
+||a8clk.teacon.jp^
+||a8clk.titivate.jp^
+||a8clk.toretoku.jp^
+||a8clk.tsuchiya-kaban.jp^
+||a8clk.tsunorice.com^
+||a8clk.uchinotoypoo.jp^
+||a8clk.unihertz.com^
+||a8clk.unionspo.com^
+||a8clk.unlace.net^
+||a8clk.ur-s.me^
+||a8clk.uzu.team^
+||a8clk.videocash.tv^
+||a8clk.voice-inc.co.jp^
+||a8clk.waq-online.com^
+||a8clk.web-camp.io^
+||a8clk.wedding.294p.com^
+||a8clk.weleda.jp^
+||a8clk.wi-ho.net^
+||a8clk.works.sagooo.com^
+||a8clk.world-family.co.jp^
+||a8clk.wpx.ne.jp^
+||a8clk.www.access-jp.jp^
+||a8clk.www.autoway.jp^
+||a8clk.www.big-m-one.com^
+||a8clk.www.cledepeau-beaute.com^
+||a8clk.www.clip-studio.com^
+||a8clk.www.daiohs.com^
+||a8clk.www.doicoffee.com^
+||a8clk.www.duskin-chiyoda.com^
+||a8clk.www.duskin-hozumi.co.jp^
+||a8clk.www.duskin-hozumi.jp^
+||a8clk.www.e87.com^
+||a8clk.www.fitnessshop.jp^
+||a8clk.www.flierinc.com^
+||a8clk.www.gaihekitosou-partners.jp^
+||a8clk.www.green-dog.com^
+||a8clk.www.italki.com^
+||a8clk.www.jaf.or.jp^
+||a8clk.www.just-size.net^
+||a8clk.www.ka-nabell.com^
+||a8clk.www.khaki.jp^
+||a8clk.www.netage.ne.jp^
+||a8clk.www.nortonstore.jp^
+||a8clk.www.oms.energy-itsol.com^
+||a8clk.www.rebo-success.co.jp^
+||a8clk.www.roomdeco.shop^
+||a8clk.www.solar-partners.jp^
+||a8clk.www.solarmonitorlp.energy-itsol.com^
+||a8clk.www.uz.team^
+||a8clk.www.workport.co.jp^
+||a8clk.www.xebiocard.co.jp^
+||a8clk.www.zwei.com^
+||a8clk.xn--t8jx01hmvbgye566gd1f.com^
+||a8clk.xserver.ne.jp^
+||a8clk.y-station.net^
+||a8clk.ykd.co.jp^
+||a8clk.yourmystar.jp^
+||a8clk.yu-en.com^
+||a8clk.yubisashi.com^
+||a8clk.yumeyakata.com^
+||a8clk.ziaco.eco-life.tokyo^
+||a8clk.zigen-shop.com^
+||a8clk1.zkai.co.jp^
+||a8clkapply.mycredit.nexuscard.co.jp^
+||a8clkcv.lognavi.com^
+||a8clkcv.tcb-beauty.net^
+||a8cllk.arahataen.com^
+||a8cname.cloudwifi-nc.com^
+||a8cname.nj-e.jp^
+||a8cnv.rmsbeauty.jp^
+||a8cv.012grp.co.jp^
+||a8cv.03plus.net^
+||a8cv.1-class.jp^
+||a8cv.1sbc.com^
+||a8cv.464981.com^
+||a8cv.489pro.com^
+||a8cv.550909.com^
+||a8cv.a-resort.jp^
+||a8cv.a-ru-ku.co.jp^
+||a8cv.a-satei.com^
+||a8cv.access-jp.jp^
+||a8cv.adornmonde.com^
+||a8cv.aff.life-110.com^
+||a8cv.aiambeauty.jp^
+||a8cv.air-wifiinternet.jp^
+||a8cv.akapon.kanritools.com^
+||a8cv.akihabara-x.jp^
+||a8cv.akippa.com^
+||a8cv.al-on.com^
+||a8cv.all-plan.co.jp^
+||a8cv.all24.jp^
+||a8cv.alvo.co.jp^
+||a8cv.amiami.jp^
+||a8cv.anapnet.com^
+||a8cv.androsophybaby.com^
+||a8cv.ans-ec.shop^
+||a8cv.aplod.jp^
+||a8cv.aquasilver.co.jp^
+||a8cv.araiba.net^
+||a8cv.atami-box.com^
+||a8cv.atgp.jp^
+||a8cv.auhikari-bykddi.com^
+||a8cv.b-concept.tokyo^
+||a8cv.b-e-l.jp^
+||a8cv.b-noix.jp^
+||a8cv.babybjorn.jp^
+||a8cv.baku-art.jp^
+||a8cv.balanslab.jp^
+||a8cv.bb-internet-qsyu.net^
+||a8cv.bbt757.com^
+||a8cv.be-slim-spbikyou.com^
+||a8cv.beaming.jp^
+||a8cv.belion.jp^
+||a8cv.bellcosme.com^
+||a8cv.bellevie-inc.co.jp^
+||a8cv.bettysbeauty.jp^
+||a8cv.beyondvape.jp^
+||a8cv.biken-mall.jp^
+||a8cv.biz-maps.com^
+||a8cv.bizcircle.jp^
+||a8cv.bizcomfort.jp^
+||a8cv.bloomonline.jp^
+||a8cv.bonaventura.shop^
+||a8cv.brandeuse.jp^
+||a8cv.brandnet.info^
+||a8cv.brassiere-shorts.jp^
+||a8cv.bresmile.jp^
+||a8cv.bright-app.com^
+||a8cv.broadbandservice.jp^
+||a8cv.bugsfarm.jp^
+||a8cv.bulk.co.jp^
+||a8cv.busbookmark.jp^
+||a8cv.c-hikari.biz^
+||a8cv.ca-rent.jp^
+||a8cv.cacom.jp^
+||a8cv.calotore.com^
+||a8cv.career.medpeer.jp^
+||a8cv.careerpark-agent.jp^
+||a8cv.carryonmall.com^
+||a8cv.cart.bi-su.jp^
+||a8cv.cast-er.com^
+||a8cv.celav.net^
+||a8cv.celbest.urr.jp^
+||a8cv.cellbic.net^
+||a8cv.chapobook.com^
+||a8cv.chefbox.jp^
+||a8cv.chillaxy.jp^
+||a8cv.chuoms.com^
+||a8cv.cinemage.shop^
+||a8cv.clickjob.jp^
+||a8cv.cloud-wi-fi.jp^
+||a8cv.cloudthome.com^
+||a8cv.coco-gourmet.com^
+||a8cv.codmon.com^
+||a8cv.control.cloudphotobook.com^
+||a8cv.coopnet.or.jp^
+||a8cv.cosmeonline.com^
+||a8cv.cosmo-water.net^
+||a8cv.cosmosfoods.jp^
+||a8cv.covermark.co.jp^
+||a8cv.cozuchi.com^
+||a8cv.cpi.ad.jp^
+||a8cv.cprime-japan.com^
+||a8cv.crecari.com^
+||a8cv.crefus.jp^
+||a8cv.crowdcredit.jp^
+||a8cv.crowdlinks.jp^
+||a8cv.cv2308001.tanomelu.com^
+||a8cv.daini-agent.jp^
+||a8cv.daisenham.com^
+||a8cv.danipita.com^
+||a8cv.danjiki-net.jp^
+||a8cv.dazzyclinic.jp^
+||a8cv.deiba.jp^
+||a8cv.delis.co.jp^
+||a8cv.designlearn.co.jp^
+||a8cv.direct-teleshop.jp^
+||a8cv.direct.shark.co.jp^
+||a8cv.diyfactory.jp^
+||a8cv.doctor-agent.com^
+||a8cv.doctoryotsu.com^
+||a8cv.dokoyorimo.com^
+||a8cv.dokugaku-dx.com^
+||a8cv.downjacket.pro^
+||a8cv.dream-licence.jp^
+||a8cv.dreambeer.jp^
+||a8cv.dreamchance.net^
+||a8cv.drsoie.com^
+||a8cv.dsc-nightstore.com^
+||a8cv.dshu.jp^
+||a8cv.duo.jp^
+||a8cv.e-3shop.com^
+||a8cv.e-3x.jp^
+||a8cv.e-d-v-j.co.jp^
+||a8cv.e-earphone.jp^
+||a8cv.e-stretch-diet.com^
+||a8cv.eakindo.com^
+||a8cv.ec.oliveunion.com^
+||a8cv.eco-ring.com^
+||a8cv.ecodepa.jp^
+||a8cv.eeo.today^
+||a8cv.egmkt.co.jp^
+||a8cv.eikajapan.com^
+||a8cv.elife-shihou.com^
+||a8cv.encounter2017.jp^
+||a8cv.english-bootcamp.com^
+||a8cv.english-cc.com^
+||a8cv.english-village.net^
+||a8cv.entre-salon.com^
+||a8cv.entry.renet.jp^
+||a8cv.euria.store^
+||a8cv.exrg-premium.shop^
+||a8cv.eys-musicschool.com^
+||a8cv.factoringzero.jp^
+||a8cv.fafa-shop.com^
+||a8cv.favorric.com^
+||a8cv.fc-japan.biz^
+||a8cv.fc-osoujikakumei.jp^
+||a8cv.first-spoon.com^
+||a8cv.fitness-terrace.com^
+||a8cv.focusneo.net^
+||a8cv.folio-sec.com^
+||a8cv.folli.jp^
+||a8cv.follome.motaras.co.jp^
+||a8cv.foresight.jp^
+||a8cv.forza-gran.com^
+||a8cv.fots.jp^
+||a8cv.fp-life.design^
+||a8cv.frecious.jp^
+||a8cv.free-max.com^
+||a8cv.freeks-japan.com^
+||a8cv.freelance-start.com^
+||a8cv.fujiplus.jp^
+||a8cv.fukuoka-factoring.net^
+||a8cv.fundrop.jp^
+||a8cv.futurefinder.net^
+||a8cv.fxtrade.co.jp^
+||a8cv.gaiasign.co.jp^
+||a8cv.gaikokujin-support.com^
+||a8cv.gaikouexterior-partners.jp^
+||a8cv.gakuen.omobic.com^
+||a8cv.gb-chat.com^
+||a8cv.gbset.jp^
+||a8cv.genesis-nipt.com^
+||a8cv.gigabaito.com^
+||a8cv.gimuiko.com^
+||a8cv.global-dive.jp^
+||a8cv.global-link-seminar.com^
+||a8cv.glocalnet.jp^
+||a8cv.glow-clinic.com^
+||a8cv.goodlucknail.com^
+||a8cv.goqoo.me^
+||a8cv.grace-grace.info^
+||a8cv.grassbeaute.jp^
+||a8cv.greed-island.ne.jp^
+||a8cv.haka.craht.jp^
+||a8cv.hal-tanteisya.com^
+||a8cv.hanamaro.jp^
+||a8cv.handmade-ch.jp^
+||a8cv.happy-bears.com^
+||a8cv.harasawa.co.jp^
+||a8cv.hariocorp.co.jp^
+||a8cv.hello-people.jp^
+||a8cv.heybit.io^
+||a8cv.hi-tailor.jp^
+||a8cv.hilife-group.com^
+||a8cv.hoken-laundry.com^
+||a8cv.holo-bell.com^
+||a8cv.homepage296.com^
+||a8cv.honeys-onlineshop.com^
+||a8cv.hoppin-garage.com^
+||a8cv.hor.jp^
+||a8cv.hotyoga-loive.com^
+||a8cv.houjin-keitai.com^
+||a8cv.housingbazar.jp^
+||a8cv.humming-water.com^
+||a8cv.hyperknife.info^
+||a8cv.i-office1.net^
+||a8cv.ias.il24.net^
+||a8cv.icoi.style^
+||a8cv.ieagent.jp^
+||a8cv.iekoma.com^
+||a8cv.iikyujin.net^
+||a8cv.ikapula.com^
+||a8cv.info.atgp.jp^
+||a8cv.inkan-takumi.com^
+||a8cv.interlink.or.jp^
+||a8cv.investment.mogecheck.jp^
+||a8cv.ioo-sofa.net^
+||a8cv.irodas.com^
+||a8cv.ishibashi.co.jp^
+||a8cv.ishibestcareer.com^
+||a8cv.ishizawa-lab.co.jp^
+||a8cv.isslim.jp^
+||a8cv.isuzu-rinji.com^
+||a8cv.itscoco.shop^
+||a8cv.iwamizu.com^
+||a8cv.iy-net.jp^
+||a8cv.japaden.jp^
+||a8cv.jbl-link.com^
+||a8cv.jcom.co.jp^
+||a8cv.jeansmate.co.jp^
+||a8cv.jemmy.co.jp^
+||a8cv.join-tech.jp^
+||a8cv.jokyonext.jp^
+||a8cv.joy-karaokerental.com^
+||a8cv.jp-shop.kiwabi.com^
+||a8cv.jp.metrocityworld.com^
+||a8cv.jp.redodopower.com^
+||a8cv.k-ikiiki.jp^
+||a8cv.kabu-online.jp^
+||a8cv.kagoya.jp^
+||a8cv.kaimonocart.com^
+||a8cv.kaimonoform.com^
+||a8cv.kaiteki.gr.jp^
+||a8cv.kaitori-okoku.jp^
+||a8cv.kaitorisatei.info^
+||a8cv.kajier.jp^
+||a8cv.kamurogi.net^
+||a8cv.karitoke.jp^
+||a8cv.kidsmoneyschool.net^
+||a8cv.kikubari-bento.com^
+||a8cv.king-makura.com^
+||a8cv.kk-orange.jp^
+||a8cv.kkmatsusho.jp^
+||a8cv.kn-waterserver.com^
+||a8cv.kobe38.com^
+||a8cv.kosodatemoney.com^
+||a8cv.kstarselect.com^
+||a8cv.kuih.jp^
+||a8cv.kurashi-bears.com^
+||a8cv.kuzefuku-arcade.jp^
+||a8cv.kxn.co.jp^
+||a8cv.kyotokimono-rental.com^
+||a8cv.l-meal.com^
+||a8cv.laclulu.com^
+||a8cv.lalavie.jp^
+||a8cv.lancers.jp^
+||a8cv.laviepre.co.jp^
+||a8cv.lc-jewel.jp^
+||a8cv.lear-caree.com^
+||a8cv.leasonable.com^
+||a8cv.leoandlea.com^
+||a8cv.lianest.co.jp^
+||a8cv.lp.nalevi.mynavi.jp^
+||a8cv.lp.x-house.co.jp^
+||a8cv.lyprinol.jp^
+||a8cv.machi-ene.jp^
+||a8cv.machicon.jp^
+||a8cv.macloud.jp^
+||a8cv.madoguchi.com^
+||a8cv.maenomery.jp^
+||a8cv.magniflexk.com^
+||a8cv.mamarket.co.jp^
+||a8cv.mansiontech.com^
+||a8cv.marumochiya.net^
+||a8cv.mashumaro-bra.com^
+||a8cv.mbb-inc.com^
+||a8cv.mcc-lazer-hr.com^
+||a8cv.meetsmore.com^
+||a8cv.memberpay.jp^
+||a8cv.members.race.sanspo.com^
+||a8cv.menina-joue.jp^
+||a8cv.mentors-lwc.com^
+||a8cv.mi-vision.co.jp^
+||a8cv.minana-jp.com^
+||a8cv.minnano-eikaiwa.com^
+||a8cv.mitaina.tokyo^
+||a8cv.mobabiji.jp^
+||a8cv.modern-deco.jp^
+||a8cv.modescape.com^
+||a8cv.mogecheck.jp^
+||a8cv.mokumokumarket.com^
+||a8cv.momiji-tantei.com^
+||a8cv.mova-creator-school.com^
+||a8cv.ms-toushiguide.jp^
+||a8cv.mura.ne.jp^
+||a8cv.my-arrow.co.jp^
+||a8cv.nagatani-shop.com^
+||a8cv.naire-seisakusho.jp^
+||a8cv.naradenryoku.co.jp^
+||a8cv.natulahonpo.com^
+||a8cv.naturaltech.jp^
+||a8cv.naturebreath-store.com^
+||a8cv.naturecan-fitness.jp^
+||a8cv.nd-clinic.net^
+||a8cv.netvisionacademy.com^
+||a8cv.next1-one.jp^
+||a8cv.nichirei.co.jp^
+||a8cv.nifty.com^
+||a8cv.nigaoe.graphics.vc^
+||a8cv.nijiun.com^
+||a8cv.nikugatodoke.com^
+||a8cv.nippon-olive.co.jp^
+||a8cv.nipt-clinic.jp^
+||a8cv.nittei-group-alliance.com^
+||a8cv.norikae-cashback.com^
+||a8cv.o-juku.com^
+||a8cv.o-ken.com^
+||a8cv.oceanprincess.jp^
+||a8cv.ococorozashi.com^
+||a8cv.off-site.jp^
+||a8cv.ogaland.com^
+||a8cv.oisix.com^
+||a8cv.omakase-cyber-mimamori.net^
+||a8cv.omni7.jp^
+||a8cv.omobic.com^
+||a8cv.one-netbook.jp^
+||a8cv.online-mega.com^
+||a8cv.online.aivil.jp^
+||a8cv.online.bell-road.com^
+||a8cv.online.d-school.co^
+||a8cv.online.thekiss.co.jp^
+||a8cv.onlinestore.xmobile.ne.jp^
+||a8cv.onlinezemi.com^
+||a8cv.open-cage.com^
+||a8cv.orbis.co.jp^
+||a8cv.orochoku.shop^
+||a8cv.otakudathough.com^
+||a8cv.otoriyose.site^
+||a8cv.p-antiaging.com^
+||a8cv.paidy.com^
+||a8cv.palms-gym.com^
+||a8cv.perrot.co^
+||a8cv.pf.classicmusic.tokyo^
+||a8cv.phonim.com^
+||a8cv.photojoy.jp^
+||a8cv.physiqueframe.com^
+||a8cv.picksitter.com^
+||a8cv.pigeon-fw.com^
+||a8cv.pilates-k.jp^
+||a8cv.player.iam-ist.jp^
+||a8cv.pocket-sommelier.com^
+||a8cv.postcoffee.co^
+||a8cv.pre-sana.com^
+||a8cv.premium.aidemy.net^
+||a8cv.presence.jp^
+||a8cv.pro.omobic.com^
+||a8cv.quattrocart.com^
+||a8cv.quick-management.jp^
+||a8cv.r-maid.com^
+||a8cv.radi-cool.shop^
+||a8cv.rakumizu.jp^
+||a8cv.rawfood-lohas.com^
+||a8cv.rehome-navi.com^
+||a8cv.renoveru.jp^
+||a8cv.repairman.jp^
+||a8cv.repitte.jp^
+||a8cv.reservation.matching-photo.com^
+||a8cv.reserve.victoria.tokyo.jp^
+||a8cv.risu-japan.com^
+||a8cv.rita-style.co.jp^
+||a8cv.rmkrmk.com^
+||a8cv.rohto.co.jp^
+||a8cv.runteq.jp^
+||a8cv.s-darts.com^
+||a8cv.sabusuta.jp^
+||a8cv.saitoma.com^
+||a8cv.sakura-forest.com^
+||a8cv.sanix.jp^
+||a8cv.sankyo-fs.jp^
+||a8cv.saraschool.net^
+||a8cv.sarastear.com^
+||a8cv.scheeme.com^
+||a8cv.se-navi.jp^
+||a8cv.second-hand.jp^
+||a8cv.secure.sakura.ad.jp^
+||a8cv.seikatsu-kojo.jp^
+||a8cv.select-type.com^
+||a8cv.selkalabo.com^
+||a8cv.sell.miraias.co.jp^
+||a8cv.setagayarecords.co^
+||a8cv.shadoten.com^
+||a8cv.sharing-tech.co.jp^
+||a8cv.sharing-tech.jp^
+||a8cv.shibarinashi-wifi.jp^
+||a8cv.shibuya-scramble-figure.com^
+||a8cv.shimomoto-cl.co.jp^
+||a8cv.shokubun.ec-design.co.jp^
+||a8cv.shokunosoyokaze.com^
+||a8cv.shop.matsuo1956.jp^
+||a8cv.shop.mintme.jp^
+||a8cv.shop.pixela.jp^
+||a8cv.shop.solve-grp.com^
+||a8cv.sibody.co.jp^
+||a8cv.signalift.com^
+||a8cv.sirusi.jp^
+||a8cv.sl-creations.store^
+||a8cv.slp.partners-re.co.jp^
+||a8cv.smart-shikaku.com^
+||a8cv.smoola.jp^
+||a8cv.snkrdunk.com^
+||a8cv.softbankhikari-collabo.net^
+||a8cv.somresta.jp^
+||a8cv.soundfun.co.jp^
+||a8cv.soyafarm.com^
+||a8cv.spalab-chintai.uk-corp.co.jp^
+||a8cv.spot-pj.com^
+||a8cv.staff-manzoku.co.jp^
+||a8cv.staffagent.co.jp^
+||a8cv.starpeg-music.com^
+||a8cv.store.alpen-group.jp^
+||a8cv.store.ion-e-air.jp^
+||a8cv.store.saneibd.com^
+||a8cv.store.tavenal.com^
+||a8cv.store.tiger-corporation.com^
+||a8cv.store.wiredbeans.jp^
+||a8cv.store.yslabo.net^
+||a8cv.story365.co.jp^
+||a8cv.str.classicmusic.tokyo^
+||a8cv.studycompass.io^
+||a8cv.studycompass.net^
+||a8cv.studygear.evidus.com^
+||a8cv.success-idea.com^
+||a8cv.sumai-surfin.com^
+||a8cv.sunmillion-ikiiki.jp^
+||a8cv.surusuru.jp^
+||a8cv.suzaku.or.jp^
+||a8cv.suzette-shop.jp^
+||a8cv.sweets-paradise-shop.com^
+||a8cv.t-bang.jp^
+||a8cv.t-gaia.co.jp^
+||a8cv.taclinic.jp^
+||a8cv.taisyokudaiko.jp^
+||a8cv.tamago-repeat.com^
+||a8cv.taxi-qjin.com^
+||a8cv.techkidsschool.jp^
+||a8cv.tenishokunext.jp^
+||a8cv.tenkuryo.jp^
+||a8cv.tenshinocart.com^
+||a8cv.tfansite.jp^
+||a8cv.tmix.jp^
+||a8cv.tokei-syuri.jp^
+||a8cv.toko-navi.com^
+||a8cv.tokutoku-battery.com^
+||a8cv.tokyo-dive.com^
+||a8cv.tokyo-indoorgolf.com^
+||a8cv.tokyogas.bocco.me^
+||a8cv.tomodachi-my.com^
+||a8cv.tomorrow-bright.jp^
+||a8cv.tonyuclub.com^
+||a8cv.toushi-up.com^
+||a8cv.toybox-mnr.com^
+||a8cv.toysub.net^
+||a8cv.treasure-f.com^
+||a8cv.trext.tokyo^
+||a8cv.udition.jp^
+||a8cv.unias.jp^
+||a8cv.unico-fan.co.jp^
+||a8cv.untenmenkyo-yi.com^
+||a8cv.urocca.jp^
+||a8cv.usedfun.jp^
+||a8cv.veggie-toreru.jp^
+||a8cv.vieon.co.jp^
+||a8cv.w2solution.co.jp^
+||a8cv.wakan.shop^
+||a8cv.waterenergy.co.jp^
+||a8cv.waterserver.co.jp^
+||a8cv.web-planners.net^
+||a8cv.wedding.mynavi.jp^
+||a8cv.wellcrew.net^
+||a8cv.whynot.jp^
+||a8cv.will-agaclinic.com^
+||a8cv.will-gocon.net^
+||a8cv.willfu.jp^
+||a8cv.winkle.online^
+||a8cv.womanmoney.net^
+||a8cv.wordman.jp^
+||a8cv.worker.sukimaworks.app^
+||a8cv.workman.jp^
+||a8cv.worx.jp^
+||a8cv.www.bedstyle.jp^
+||a8cv.www.bigability.co.jp^
+||a8cv.www.bitlock.jp^
+||a8cv.www.chara-ani.com^
+||a8cv.www.club-sincerite.co.jp^
+||a8cv.www.covearth.co.jp^
+||a8cv.www.iropuri.com^
+||a8cv.www.mogecheck.jp^
+||a8cv.www.monologue.watch^
+||a8cv.www.pascaljp.com^
+||a8cv.www.sofastyle.jp^
+||a8cv.www2.sundai.ac.jp^
+||a8cv.xn--1lqs71d2law9k8zbv08f.tokyo^
+||a8cv.xn--eckl3qmbc6976d2udy3ah35b.com^
+||a8cv.xn--hckxam3skb2412b1hxe.com^
+||a8cv.xn--hdks151yx96c.com^
+||a8cv.y-osohshiki.com^
+||a8cv.ya-man.com^
+||a8cv.yakuzaishi.yakumatch.com^
+||a8cv.yakuzaishibestcareer.com^
+||a8cv.yamasa-suppon.com^
+||a8cv.yamato-gp.net^
+||a8cv.yamatokouso.com^
+||a8cv.ygm-clinic.or.jp^
+||a8cv.yobybo-japan.com^
+||a8cv.yohodo.net^
+||a8cv.yokoyamakaban.com^
+||a8cv.yoriso.com^
+||a8cv.you-shoku.net^
+||a8cv.yui.gift^
+||a8cv.yuyu-tei.jp^
+||a8cv.zacc.jp^
+||a8cv.zeroen-denki.com^
+||a8cv.zerorenovation.com^
+||a8cv.zoner.com^
+||a8cv2.hoken-choice.com^
+||a8cv2.vapelog.jp^
+||a8cventry.uqwimax.jp^
+||a8cvhoiku.kidsmate.jp^
+||a8cvtrack.sincere-garden.jp^
+||a8cvtrack.tokai.jp^
+||a8dev.hikarinet-s.com^
+||a8dns.webcircle.co.jp^
+||a8hokuro.ike-sunshine.co.jp^
+||a8itp.bitoka-japan.com^
+||a8itp.skinx-japan.com^
+||a8kotsujiko.ike-sunshine.co.jp^
+||a8live-vote.eventos.work^
+||a8lp-tebiki.e-sogi.com^
+||a8lpclk.club-marriage.jp^
+||a8n.radishbo-ya.co.jp^
+||a8net.augustberg.jp^
+||a8net.beyond-gym.com^
+||a8net.gset.co.jp^
+||a8net.hassyadai.com^
+||a8net.kitamura-print.com^
+||a8net.mellow-cbd.jp^
+||a8net.pg-learning.net^
+||a8net.sourcenext.com^
+||a8netcv.crebiq.com^
+||a8nikibi.ike-sunshine.co.jp^
+||a8onlineshop.trendmicro.co.jp^
+||a8redirect.cart.ec-sites.jp^
+||a8shop.nihon-trim.co.jp^
+||a8sup.chapup.jp^
+||a8tag.emprorm.com^
+||a8tag.suplinx.com^
+||a8tatoo.ike-sunshine.co.jp^
+||a8track.aidmybank.com^
+||a8track.bizdigi.jp^
+||a8track.speakbuddy-personalcoaching.com^
+||a8track.ulp.co.jp^
+||a8track.www.pontely.com^
+||a8trck.aisatsujo.com^
+||a8trck.aisatsujo.jp^
+||a8trck.helloactivity.com^
+||a8trck.j-sen.jp^
+||a8trck.sibody.co.jp^
+||a8trck.tolot.com^
+||a8trck.worldone.to^
+||a8trck.ws.formzu.net^
+||a8trk.www.std-lab.jp^
+||a8wakiga.ike-sunshine.co.jp^
+||a8wristcut.ike-sunshine.co.jp^
+||a8x.piece-kaitori.jp^
+||ac.livelty.com^
+||acv.auhikari-norikae.com^
+||acv.aun-air-wifi.com^
+||acv.aun-company.com^
+||acv.aun-n-hikari.com^
+||acv.aun-softbank-hikari.com^
+||acv.biglobe-hikari.net^
+||acv.cmf-hikari.net^
+||acv.crea-lp.com^
+||acv.fletsntt.com^
+||acv.hikariocn.com^
+||acv.hikarisoftbank.com^
+||acv.internet-moushikomi.net^
+||acv.kyushu-internet.com^
+||acv.mc-doctor.net^
+||acv.mc-nurse.net^
+||acv.mc-pharma.net^
+||acv.me-hikari.net^
+||acv.next-air-wifi.com^
+||acv.next-internet.info^
+||acv.nft-hikari.net^
+||acv.pikarahikari.net^
+||acv.softbank-hikaricollabo.com^
+||acv.xn--dckf5a1e821s9i7b.com^
+||acv.xn--lck7b0fy49k9y1b.com^
+||ad-a8.www.zeiri4.com^
+||ad.belleeau.jp^
+||ad.e-dpe.jp^
+||ad.houkei-shinjuku.com^
+||ad.ichiban-boshi.com^
+||ad.ichiru.net^
+||ad.jibunde-esute.com^
+||ad.kirara-support.jp^
+||ad.magokoro-care-shoku.com^
+||ad.rejichoice.jp^
+||ad.shinjuku-mens-chuoh.com^
+||ada8-2.ampleur.jp^
+||ada8.ampleur.jp^
+||ads.dandelionchocolate.jp^
+||af.gmobile.biz^
+||af.shozankan-shop.com^
+||afcv.champ-shop.com^
+||afep.pivn.shop^
+||affa8.hikkoshi-master.com^
+||affi.best-hoiku.com^
+||afficv.lettuce.co.jp^
+||affiliate.couleur-labo.com^
+||affiliate.dietician-family.jp^
+||affiliate.htb-energy.co.jp^
+||affiliate.k-uno.co.jp^
+||affiliate.kgcshop.jp^
+||affiliate.ouchi.coop^
+||affiliate.petitwedding.com^
+||affiliate.taihoshop.jp^
+||affiliate.tripact.jp^
+||afi.biyou.web-marketing.ai^
+||afi.iino.life^
+||afi.school.web-marketing.ai^
+||afi.sougou.web-marketing.ai^
+||afi.ssl.gmobb.jp^
+||aficv.finebase.jp^
+||ahachi.dietnavi.com^
+||ahachi.dreamdenki.jp^
+||ai.kaishabaikyaku.com^
+||analytics.villagehouse.jp^
+||approach.wise1-golf.com^
+||asp.glasspp119.jp^
+||asp.hachipp119.com^
+||asp.taishokunext.com^
+||aspa8.ozmall.co.jp^
+||car-a8.tabirai.net^
+||click.techtree.jp^
+||clk.entry.surala.jp^
+||clk.glam-print.com^
+||clk.ingage.jp^
+||clk.liberty-e.com^
+||clk.wagon-hire.com^
+||clkcv.biglobehikari-kaisen.com^
+||contact.kdg-yobi.com^
+||cosme.caseepo.jp^
+||cp.cp.twendee.jp^
+||cv-match.sharebase.jp^
+||cv.2jikaikun.com^
+||cv.a-cial.com^
+||cv.a-hikkoshi.com^
+||cv.a-internet.jp^
+||cv.ag.cybersecurity-jp.com^
+||cv.agent-sana.com^
+||cv.atelier-shark.com^
+||cv.b2b.subscription-store.com^
+||cv.bc-force.com^
+||cv.belta-shop.jp^
+||cv.betrading.jp^
+||cv.bikoshaen.coiption-store.com^
+||cv.sumaho-hoken.jp^
+||cv.taskar.online^
+||cv.tenjin.cc^
+||cv.theatreacademy.info^
+||cv.tokyowork.jp^
+||cv.ui-chiho.clinic^
+||cv.virtualoffice-resonance.jp^
+||cv.web-sana.com^
+||cv.willbefit.jp^
+||cv.wp-avenue.com^
+||cv.www.jobcareer.jp^
+||cv.www.risetokyo.jp^
+||cv.www.rokuzan.net^
+||cv.xn--bcktcvdzde3c.biz^
+||cv.xn--zbs202g.com^
+||cv.zephylrin-x.net^
+||cv1.start-eo.jp^
+||cv1.stefany.co.jp^
+||cvtk01.gmo-agree.com^
+||dwuzxuvwlq.winticket.jp^
+||electricity2.tokyu-ps.jp^
+||ems-a8net-tracking.easy-myshop.jp^
+||herpes2.pa-ruit.jp^
+||investment.lianest.co.jp^
+||itp.yaku-job.com^
+||ja-jp-a8.etudehouse.com^
+||kaden.netoff.co.jp^
+||kikoe.aisei.co.jp^
+||kobetu.grand1corp.com^
+||listing-a8-itp.hello-storage.com^
+||lp.kumamoto4510.com^
+||mvc.shopjapan.co.jp^
+||nccaf.ncc-mens.com^
+||ntt-fletscv.ntt-flets.com^
+||onenet.gakujutsu.com^
+||p004.raffi-hair.com^
+||p005.raffi-hair.com^
+||pages2.rizap.jp^
+||pr.yokohama-chokin.com^
+||rsv.dankore.jp^
+||rsv.pairorder.jp^
+||salto.freeto.jp^
+||sekaopi.nocre.jp^
+||sfcv.chinavi-shop.jp^
+||shop.anu-cosme.com^
+||shopping.cellpure.co.jp^
+||smn.dankore.jp^
+||sokutei.car2828.jp^
+||st-a8.tscubic.com^
+||storea8tracking.alc.co.jp^
+||sub.booksdream-mypage.com^
+||sub.ecd.bookoffonline.co.jp^
+||sub.turningpoint.work^
+||summary.bookoffonline.co.jp^
+||sync-a8.cocolocala.jp^
+||test.shigoto-web.com^
+||test.zeus-wifi.jp^
+||testa8wifi.dokoyorimo.com^
+||thanks.hubspaces.jp^
+||thanks.olivesitter.com^
+||thanks.tsubaki-musicschool.com^
+||track-v4.ipadpresence.com^
+||track.craudia.com^
+||track.kiafudousan.com^
+||track.xmarketech.com^
+||tracking.196189.com^
+||tracking.lead-plus.jp^
+||traka8.crypto-mall.org^
+||trck-a8.j-depo.com^
+||trck.aeon.co.jp^
+||trck.atnenga.com^
+||trck.flexnet.co.jp^
+||trck.frutafrutashop.com^
+||trck.kenkiya.com^
+||trck.naco-do.com^
+||trck.nuwlnuwl.com^
+||trck.propo.co.jp^
+||trck.repesta.com^
+||trck.rework-s.com^
+||trck.stefany.co.jp^
+||trck02.magaseek.com^
+||trcka8.orobianco-jp.com^
+||trcka8net.bestlens.jp^
+||trcka8net.glens.jp^
+||trcka8net.irobot-jp.com^
+||trcka8net.lenszero.com^
+||trcka8net.qieto.net^
+||web.air-entry.com^
+||web.collaboration-access.com^
+||web.hikari-biglobe.com^
+||web.hikari-ocn.com^
+||web.hikari-softbank.com^
+||web.life-cw.com^
+||webtest.lpio.jp^
+||wnform.www.trecenti.com^
+||yoiku-sub.yoiku.support^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_plausible.txt ***
+||custom.plausible.io^
+! Company name: Plausible Analytics https://github.com/AdguardTeam/cname-trackers/blob/master/data/trackers/plausible-analytics.txt
+! custom.plausible.io disguised trackers
+! Company name: Plausible Analytics
+||a-api.skz.dev^
+||a.aawp.de^
+||a.easyazon.com^
+||a.getaawp.com^
+||a.iiro.dev^
+||a.kryptonitewp.com^
+||a.linkz.ai^
+||a.mhthemes.com^
+||a.remy.world^
+||aloha.getoperand.com^
+||also.greatsecuritydebate.net^
+||an.xavierrosee.com^
+||analytics.adam.page^
+||analytics.adonisjs.com^
+||analytics.andrewsmith.com.au^
+||analytics.angelina-fieber.com^
+||analytics.arunraghavan.net^
+||analytics.basistheory.com^
+||analytics.betterplaces.nl^
+||analytics.certifriedit.com^
+||analytics.chattarize.de^
+||analytics.churchthemes.com^
+||analytics.codeforscience.org^
+||analytics.codeskulptor.org^
+||analytics.eikko.ai^
+||analytics.ericafischerphotography.com^
+||analytics.gamedatacrunch.com^
+||analytics.geekyminds.net^
+||analytics.hambleden-capital.com^
+||analytics.hiome.com^
+||analytics.kerns.co^
+||analytics.krieselreihe.com^
+||analytics.lifestyledemocracy.com^
+||analytics.littlekingdesigns.com^
+||analytics.lunge.de^
+||analytics.mambaui.com^
+||analytics.martin-fieber.de^
+||analytics.mattmcadams.com^
+||analytics.mc500.info^
+||analytics.multithread.studio^
+||analytics.mycater.fr^
+||analytics.naturequant.com^
+||analytics.qualityquestions.co^
+||analytics.ramiyer.io^
+||analytics.ramiyer.me^
+||analytics.recamov.com^
+||analytics.sideprojectsoftware.com^
+||analytics.sixfigureswine.com^
+||analytics.teamcovenant.com^
+||analytics.top10-charts.com^
+||analytics.trust.page^
+||analytics.uxmetrics.com^
+||analytics.valheimgamer.com^
+||analytics.vanilla-project.guide^
+||analytics.wayland.app^
+||analytics.whostheboss.co.uk^
+||analytics.whotargets.me^
+||analytics.winter.ink^
+||analytics.xiloc.net^
+||analytics.zevvle.com^
+||antitracking.owncast.online^
+||api.digitalpiloten.org^
+||api.eichendorffschule.online^
+||api.elliehuxtable.com^
+||api.fuck.education^
+||api.ryanyao.design^
+||apis.4bn.xyz^
+||app-stats.supernotes.app^
+||artistchristinacarmel.ericksonbuilt.com^
+||assets.garron.blog^
+||assets.garron.me^
+||assets.mikeroulston.com^
+||assets.modeathletics.com^
+||assets.modehypertext.com^
+||aux.lansator.ro^
+||badwolf.open-election-compass.com^
+||besucher.nona.de^
+||bob.gitclear.com^
+||btstats.benakt.com^
+||cats.d20.rs^
+||cdn.arcstudiopro.com^
+||channelwatcher.panda.tech^
+||cheese.guac.live^
+||churro.noteapps.info^
+||connect.adkhifi.com^
+||connect.astrobotanicals.com^
+||count.gothaer-digital.de^
+||counter.cropvid.com^
+||counter.proxycrawl.com^
+||counter.subtitlebee.com^
+||counter.websitevoice.com^
+||cp.phiilu.com^
+||data.blog.swicket.io^
+||datum.appfleet.com^
+||ds.webprojectslab.com^
+||eliteclng.ericksonbuilt.com^
+||events.mikescerealshack.co^
+||explore.bytelab.uk^
+||external.techopian.com^
+||extramilefloorcare.ericksonbuilt.com^
+||eyes.jstew.art^
+||f8phvntohv.tpetry.me^
+||galop.leferacheval-saintcloud.com^
+||hej.henriksommerfeld.se^
+||hi.koalendar.com^
+||hi.streetworkoutlist.com^
+||hi.victorbaudot.com^
+||hola.xebel.co^
+||hstats.askmiso.com^
+||hurricane.tinybird.co^
+||info.bestbudgetapps.com^
+||informatics.filamentcolors.xyz^
+||insights.affilimate.com^
+||jinx.skullctf.com^
+||joy.ochronus.online^
+||kaladyaudiology.ericksonbuilt.com^
+||kingsandqueens.splowser.com^
+||kon.mediaplatform.group^
+||l.lilyzhou.com^
+||l2k30jsa.theochu.com^
+||lkj23jlkajsa.realestate.help^
+||log.rhythmtowers.com^
+||loggychops.paulsmith.site^
+||logs.theccaa.com^
+||lytics.findairpods.com^
+||marsupial.roleup.com^
+||meter.bref.sh^
+||metric.methoddev.com^
+||metrics.axiomatic-inc.com^
+||metrics.creit.tech^
+||metrics.earrieta.dev^
+||metrics.javierarcheni.com^
+||metrics.recunia.de^
+||momotaro.craigmod.com^
+||momotaro.walkkumano.com^
+||munnin.hicsuntdra.co^
+||noushe.zevvle.com^
+||numbers.monthlyphotos.com^
+||nums.upscale.app^
+||p.aj-foster.com^
+||p.classroombookings.com^
+||p.ejs.dev^
+||p.fairspot.host^
+||p.ianmjones.com^
+||p.iforge.app^
+||p.logbox.io^
+||p.marqueplace.com^
+||p.meilentrio.de^
+||p.nqueue.io^
+||p.ryanhalliday.com^
+||p.versacommerce.de^
+||p.victoria.dev^
+||p.viennaandbailey.co.nz^
+||p.wren.co^
+||p.www.viertaxa.com^
+||pa-stats.encore.dev^
+||pa.opqr.co^
+||pa.travelwhiz.app^
+||peards.zevvle.com^
+||pine.clk.click^
+||pine.nervecentral.com^
+||ping.cavelab.dev^
+||ping.hedlund.xyz^
+||ping.naturadapt.com^
+||ping.resoluteoil.com^
+||pl.1feed.app^
+||pl.astro-akatemia.fi^
+||pl.astro.fi^
+||pl.carbon-tab.ethan.link^
+||pl.codetheweb.blog^
+||pl.ethan.link^
+||pl.fashmoms.com^
+||pl.getfamealy.com^
+||pl.hackathon-makers.com^
+||pl.hitthefrontpage.com^
+||pl.kanbanmail.app^
+||pl.kis-nagy.art^
+||pl.maya-astro.fi^
+||pl.mynorthstarapp.com^
+||pl.terraintinker.com^
+||pl.venusafe.com^
+||pl.volunteeringhb.org.nz^
+||pl.weinshops.online^
+||pla.wigglepixel.nl^
+||plan.devbyexample.com^
+||plans.fundtherebuild.com^
+||plas.imfeld.dev^
+||plau.artemsyzonenko.com^
+||plau.caisy.io^
+||plau.devitjobs.nl^
+||plau.devitjobs.uk^
+||plau.devitjobs.us^
+||plau.devjob.ro^
+||plau.germantechjobs.de^
+||plau.swissdevjobs.ch^
+||plauplauplau.app.budg.co^
+||plauplauplau.budg.co^
+||plaus.outpost.pub^
+||plaus.pentserv.com^
+||plausdj2ajskljzx0ikwkiasible.ethics.info^
+||plausibel.ablis.net^
+||plausible-stats.tangodelta.media^
+||plausible.adreform.com^
+||plausible.alexandar.me^
+||plausible.alpaga.io^
+||plausible.app.kdojang.com^
+||plausible.app.tlschedule.com^
+||plausible.bablab.com^
+||plausible.bacanalia.net^
+||plausible.baychi.org^
+||plausible.beanti.me^
+||plausible.bearer.sh^
+||plausible.benscarblog.com^
+||plausible.billfox.co^
+||plausible.bostad.shop^
+||plausible.buildfirst.tech^
+||plausible.campwire.com^
+||plausible.canpoi.com^
+||plausible.conveyal.com^
+||plausible.corbettbarr.com^
+||plausible.countingindia.com^
+||plausible.dailytics.com^
+||plausible.deploymentfromscratch.com^
+||plausible.dev.logicboard.com^
+||plausible.dingran.me^
+||plausible.doberman.co^
+||plausible.doctave.com^
+||plausible.ejs.dev^
+||plausible.eurostocks.nl^
+||plausible.exploreandcreate.com^
+||plausible.external.sine.foundation^
+||plausible.f1laps.com^
+||plausible.factly.in^
+||plausible.flowcv.io^
+||plausible.getlean.digital^
+||plausible.giveatip.io^
+||plausible.goldanger.de^
+||plausible.golfbreaks.com^
+||plausible.gryka.net^
+||plausible.gymglish.com^
+||plausible.haltakov.net^
+||plausible.help.exploreandcreate.com^
+||plausible.holderbaum-academy.de^
+||plausible.hopecanebay.com^
+||plausible.ionicelements.dev^
+||plausible.jeroenvandenboorn.nl^
+||plausible.joinself.com^
+||plausible.k6sbw.net^
+||plausible.kabaret.no^
+||plausible.kdojang.com^
+||plausible.kundenportal.io^
+||plausible.lesbianromantic.com^
+||plausible.logicboard.com^
+||plausible.mattpruitt.com^
+||plausible.mcj.co^
+||plausible.myvirtualsuper.com^
+||plausible.nickmazuk.com^
+||plausible.nmyvsn.net^
+||plausible.nuqu.org^
+||plausible.promlens.com^
+||plausible.prufit.co^
+||plausible.pumpkint.com^
+||plausible.quantumcomputingexplained.com^
+||plausible.quo.wtf^
+||plausible.rachel.systems^
+||plausible.reabra.com.br^
+||plausible.reactpreview.com^
+||plausible.redchamp.net^
+||plausible.regex.help^
+||plausible.retune.de^
+||plausible.sbw.org^
+||plausible.shadygrovepca.org^
+||plausible.simplelogin.io^
+||plausible.srijn.net^
+||plausible.starlegacyfoundation.org^
+||plausible.strzibny.name^
+||plausible.sysloun.cz^
+||plausible.tac.dappstar.io^
+||plausible.tasteslikeme.ca^
+||plausible.tlschedule.com^
+||plausible.treelightsoftware.com^
+||plausible.umbrellaanalytics.net^
+||plausible.urbanekuensteruhr.de^
+||plausible.vaughanesports.org^
+||plausible.veszelovszki.com^
+||plausible.visitu.com^
+||plausible.viteshot.com^
+||plausible.west.io^
+||plausible.x.baychi.org^
+||plausible.yalepaprika.com^
+||plausible.zest.dev^
+||plausible.zorin.com^
+||pls.ambue.com^
+||pls.fcrpg.net^
+||pls.skycastle.dev^
+||plsbl-staging.edison.se^
+||plsbl.edison.se^
+||prism.drivingkyoto.com^
+||prism.feurer-network.ch^
+||prism.netherlandlines.com^
+||prism.pablonouvelle.com^
+||prism.raumgleiter.com^
+||prism.singapouring.com^
+||prism.tramclockmunich.com^
+||pstat.akathists.com^
+||pstat.goodremotejobs.com^
+||pstats.cloudpal.app^
+||reddwarf.till-sanders.de^
+||reporting.autographapp.me^
+||retention.ankidecks.com^
+||s.allbootdisks.com^
+||s.cameratico.com^
+||s.crackedthecode.co^
+||s.cuoresportivo.no^
+||s.cybercompass.io^
+||s.drawingthemin.com^
+||s.ergotherapieblog.de^
+||s.fission.codes^
+||s.fraservotes.com^
+||s.freelanceratecalculator.com^
+||s.glimesh.tv^
+||s.innoq.com^
+||s.inspectelement.co^
+||s.leolabs.org^
+||s.mannes.tech^
+||s.maxrozen.com^
+||s.nerdfulmind.com^
+||s.repguard.uk^
+||s.saucisson-rebellion.fr^
+||s.sporks.space^
+||s.stgeorgeafc.com.au^
+||s.testingreactjs.com^
+||s.useeffectbyexample.com^
+||s.vucko.co^
+||sa.flux.community^
+||sats.mailbrew.com^
+||see.wasteorshare.com^
+||server.japanbyrivercruise.com^
+||server.olliehorn.com^
+||site-stats.supernotes.app^
+||sp.ballsdigroup.com^
+||sp.gameomatic.fr^
+||sp.jrklein.com^
+||sp.soniccares.com^
+||sp.spaceomatic.fr^
+||sp.wvoil.com^
+||st.anastasija.lt^
+||st.picshuffle.com^
+||st.preciousamber.com^
+||st.sheebamagazine.com^
+||st.tulastudio.se^
+||starman.floorcleanse.co.uk^
+||stat.bill.harding.blog^
+||stat.landingpro.pl^
+||stat.recklesslove.co.za^
+||stat.umsu.de^
+||static.osalta.eu^
+||statistic.jac-systeme.de^
+||statistics.heatbeat.de^
+||statistik.apartments-tirolerhaus.at^
+||statman.sesong.info^
+||stats-aah.gigride.live^
+||stats-whatever.gigride.live^
+||stats.45rpm.ch^
+||stats.69grad.de^
+||stats.acadevor.com^
+||stats.achtsame-yonimassage.de^
+||stats.activityvault.io^
+||stats.adlperformance.es^
+||stats.airtrafik.com^
+||stats.aixbrain.de^
+||stats.albert-kropp-gmbh.de^
+||stats.alibhai.co^
+||stats.alleaktien.de^
+||stats.alocreativa.com^
+||stats.am.ai^
+||stats.amaeya.media^
+||stats.amiibo.life^
+||stats.andrewlevinson.me^
+||stats.appcessible.org^
+||stats.arma.coffee^
+||stats.arquido.com^
+||stats.artisansfiables.fr^
+||stats.artistchristinacarmel.com^
+||stats.asmodee.net^
+||stats.astrr.ru^
+||stats.asymptotic.io^
+||stats.auto-dombrowski.de^
+||stats.autofarm.network^
+||stats.autoscholarwithmrb.com^
+||stats.balticgruppen.se^
+||stats.bananatimer.com^
+||stats.bcdtravel.com^
+||stats.beamd.io^
+||stats.beanr.coffee^
+||stats.beatricew.com^
+||stats.beausimensen.com^
+||stats.beautility.makerkits.co^
+||stats.belic.si^
+||stats.benui.ca^
+||stats.bernardobordadagua.com^
+||stats.bertwagner.com^
+||stats.bestservers.co^
+||stats.bholmes.dev^
+||stats.bikeschool.co.za^
+||stats.bimbase.nl^
+||stats.bitpost.app^
+||stats.blackbird-automotive.com^
+||stats.blackblog.cz^
+||stats.blockleviton.com^
+||stats.blog.catholicluv.com^
+||stats.blog.codingmilitia.com^
+||stats.blog.merckx.fr^
+||stats.blog.sean-wright.com^
+||stats.blog.sublimesecurity.com^
+||stats.bloke.blog^
+||stats.bmxdevils.be^
+||stats.book-rec.com^
+||stats.booncon.com^
+||stats.boscabeatha.ie^
+||stats.breathly.app^
+||stats.brennholzauktion.com^
+||stats.briskoda.net^
+||stats.broddin.be^
+||stats.brumtechtapas.co.uk^
+||stats.buddiy.net^
+||stats.bungeefit.co.uk^
+||stats.burocratin.com^
+||stats.byma.com.br^
+||stats.byterocket.dev^
+||stats.cable.tech^
+||stats.callum.fyi^
+||stats.carrot2.org^
+||stats.carrotsearch.com^
+||stats.caseydunham.com^
+||stats.cassidyjames.com^
+||stats.catholicluv.com^
+||stats.centralswindonnorth-pc.gov.uk^
+||stats.cfcasts.com^
+||stats.chadly.net^
+||stats.changelog.com^
+||stats.changeoil.ca^
+||stats.chomp.haus^
+||stats.chronoslabs.net^
+||stats.cinqsecondes.fr^
+||stats.citizenos.com^
+||stats.clavisaurea.xyz^
+||stats.cleverdiabetic.com^
+||stats.cloud-backup-for-podio.com^
+||stats.coachinghive.com^
+||stats.code-it-studio.de^
+||stats.codeexposed.com^
+||stats.codinginfinity.me^
+||stats.codis.io^
+||stats.coditia.com^
+||stats.cohere.so^
+||stats.coldbox.org^
+||stats.connect.pm^
+||stats.convaise.com^
+||stats.corona-navi.de^
+||stats.covid.vitordino.com^
+||stats.craftybase.com^
+||stats.creativinn.com^
+||stats.crema.fi^
+||stats.cremashop.eu^
+||stats.cremashop.se^
+||stats.crewebo.de^
+||stats.crypdit.com^
+||stats.cryptmail.io^
+||stats.curbnumberpro.com^
+||stats.curtiscummings.me^
+||stats.dailyposter.com^
+||stats.dailyposter.xyz^
+||stats.danestevens.dev^
+||stats.danielwolf.photography^
+||stats.danner-landschaftsbau.at^
+||stats.dashbit.co^
+||stats.davidlms.com^
+||stats.davydepauw.be^
+||stats.dawn.md^
+||stats.declanbyrd.co.uk^
+||stats.deja-lu.de^
+||stats.depends-on-the-definition.com^
+||stats.deva.guru^
+||stats.develop.wwdcscholars.com^
+||stats.devenet.eu^
+||stats.devenet.info^
+||stats.devetkomentara.net^
+||stats.devrain.io^
+||stats.devskills.co^
+||stats.dexie.me^
+||stats.dflydev.com^
+||stats.diarmuidsexton.com^
+||stats.digiexpert.store^
+||stats.dillen.dev^
+||stats.divyanshu013.dev^
+||stats.dmail.co.nz^
+||stats.dmarcdigests.com^
+||stats.doana-r.com^
+||stats.domhabersack.com^
+||stats.doors.live^
+||stats.dotnetos.org^
+||stats.dotplan.io^
+||stats.doublejones.com^
+||stats.dreher-dreher.eu^
+||stats.drsaavedra.mx^
+||stats.drtdentist.ro^
+||stats.dt-esthetique.ch^
+||stats.duetcode.io^
+||stats.earlygame.com^
+||stats.editorhawes.com^
+||stats.eedistudio.ie^
+||stats.eightyfourrooms.com^
+||stats.einsvieracht.de^
+||stats.ekomenyong.com^
+||stats.elementary.io^
+||stats.eliteclng.com^
+||stats.elixir-lang.org^
+||stats.elysenewland.com^
+||stats.emailrep.io^
+||stats.emk.at^
+||stats.emmah.net^
+||stats.emmas.site^
+||stats.engel-apotheke.de^
+||stats.engeldirekt.de^
+||stats.engineering.freeagent.com^
+||stats.equium.io^
+||stats.erikinthekitchen.com^
+||stats.erlef.org^
+||stats.evenchilada.com^
+||stats.executebig.org^
+||stats.extramilefloorcare.com^
+||stats.eyehelp.co^
+||stats.fabiofranchino.com^
+||stats.faluninfo.at^
+||stats.faluninfo.ba^
+||stats.faluninfo.mk^
+||stats.faluninfo.rs^
+||stats.faluninfo.si^
+||stats.fantinel.dev^
+||stats.fastbackward.app^
+||stats.feathercss.makerkits.co^
+||stats.felipesere.com^
+||stats.femtobill.com^
+||stats.ferienwohnung-dombrowski.com^
+||stats.finalrabiesgeneration.org^
+||stats.findvax.us^
+||stats.flightsphere.com^
+||stats.florianfritz.net^
+||stats.flowphantom.com^
+||stats.frantic.im^
+||stats.frenlo.com^
+||stats.fs4c.org^
+||stats.fundimmo.com^
+||stats.fungus.computer^
+||stats.fwdkit.com^
+||stats.galeb.org^
+||stats.galleriacortona.com^
+||stats.gbc.uk^
+||stats.genoplev.dk^
+||stats.geobox.app^
+||stats.gerard.fun^
+||stats.gesund-vital-lebensfreude.com^
+||stats.getdoks.org^
+||stats.gethyas.com^
+||stats.getpickaxe.com^
+||stats.ghinda.com^
+||stats.gigride.live^
+||stats.glassmountains.co.uk^
+||stats.glyphs.fyi^
+||stats.gnalt.de^
+||stats.goldsguide.com^
+||stats.gounified.com^
+||stats.graphql-api.com^
+||stats.graphql-by-pop.com^
+||stats.gras-system.org^
+||stats.gravitaswins.com^
+||stats.greatlakesdesign.co^
+||stats.groupconsent.eu^
+||stats.gslc.utah.edu^
+||stats.gtnetworks.com^
+||stats.guersanguillaume.com^
+||stats.guidingwallet.app^
+||stats.gynsprechstunde.de^
+||stats.hackershare.dev^
+||stats.halcyon.hr^
+||stats.hammertime.me^
+||stats.hauke.me^
+||stats.headhunted.com.au^
+||stats.homepage-2021.askmiso-dev.com^
+||stats.homestow.com^
+||stats.hostfactor.io^
+||stats.hpz-scharnhausen.de^
+||stats.htmlcsstoimage.com^
+||stats.htp.org^
+||stats.hugoreeves.com^
+||stats.huysmanbouw.be^
+||stats.iamzero.dev^
+||stats.ibuildings.net^
+||stats.iefg.org^
+||stats.igassmann.me^
+||stats.igor4stir.com^
+||stats.in-tuition.net^
+||stats.incoming.co^
+||stats.increasinglyfunctional.com^
+||stats.indyhall.org^
+||stats.infoboard.de^
+||stats.innoq.com^
+||stats.instabudget.app^
+||stats.interactjs.io^
+||stats.interruptor.pt^
+||stats.intheloop.dev^
+||stats.intothebox.org^
+||stats.invoice.orballo.dev^
+||stats.ipadhire.co.nz^
+||stats.isabelsommerfeld.com^
+||stats.iscc-system.org^
+||stats.isthispoisonivy.website^
+||stats.ivs.rocks^
+||stats.jackwhiting.co.uk^
+||stats.jamesevers.co.uk^
+||stats.jamesilesantiques.com^
+||stats.jamhouse.app^
+||stats.jansix.at^
+||stats.jasonludden.dev^
+||stats.jdheyburn.co.uk^
+||stats.jerickson.net^
+||stats.jhsheridan.com^
+||stats.jjude.com^
+||stats.joaopedro.dev^
+||stats.jpc.dev^
+||stats.jsbible.com^
+||stats.jtrees.io^
+||stats.jun-etan.com^
+||stats.juniperslab.com^
+||stats.justinwilliams.ca^
+||stats.kaladyaudiology.com^
+||stats.katharinascheitz.com^
+||stats.keirwhitaker.com^
+||stats.kendix.org^
+||stats.kensho.com^
+||stats.kettlebellbundle.com^
+||stats.keyscore.me^
+||stats.kfcsint-lenaartsjeugd.be^
+||stats.klj-consult.com^
+||stats.knowkit.cloud^
+||stats.kod.ru^
+||stats.koehrer.de^
+||stats.koerner-logopaedie.de^
+||stats.kongressen.com^
+||stats.krauss.io^
+||stats.kryptoslogic.com^
+||stats.ks-labs.de^
+||stats.kyushoku2050.org^
+||stats.labibli.com^
+||stats.laptopsin.space^
+||stats.larsroettig.dev^
+||stats.lastfm.matthiasloibl.com^
+||stats.latehours.net^
+||stats.lauracpa.ca^
+||stats.laxallstars.com^
+||stats.leaguestats.gg^
+||stats.leahcollection.com^
+||stats.learnlinux.tv^
+||stats.leavetrackapp.com^
+||stats.lefthoek.com^
+||stats.legendofnom.com^
+||stats.leoloso.com^
+||stats.lessimpact.org^
+||stats.liamdavis.dev^
+||stats.libertyembers.com^
+||stats.lica.at^
+||stats.lik.fr^
+||stats.lilacphilly.org^
+||stats.limitlessnetworks.eu^
+||stats.lippeshirts.de^
+||stats.literacysomerset.org^
+||stats.literaturkreis.online^
+||stats.lmdsp.com^
+||stats.localmetravel.com^
+||stats.lord.io^
+||stats.lstfnd.de^
+||stats.ltdhunt.com^
+||stats.luieremmer.net^
+||stats.lussoveloce.com^
+||stats.macosicons.com^
+||stats.madeit.io^
+||stats.madethis.gallery^
+||stats.maferland.com^
+||stats.magarantie5ans.fr^
+||stats.makerr.market^
+||stats.makingknown.xyz^
+||stats.maklerupdate.de^
+||stats.malizen.com^
+||stats.malte-bartels.de^
+||stats.martinbetz.eu^
+||stats.martyntaylor.com^
+||stats.mashword.com^
+||stats.mastermeup.com^
+||stats.masterybits.com^
+||stats.matthiasloibl.com^
+||stats.matthogg.fyi^
+||stats.maximaconsulting.xyz^
+||stats.meetnfly.com^
+||stats.mein-futterlexikon.org^
+||stats.memberdrive.org^
+||stats.meno.science^
+||stats.mesenvies.fr^
+||stats.michaeloliver.dev^
+||stats.micv.works^
+||stats.missionrabies.com^
+||stats.mostlycoding.com.au^
+||stats.motion-effect.com^
+||stats.motorcyclepartsireland.ie^
+||stats.mrtnvh.com^
+||stats.multiplelenses.com^
+||stats.multiply.cloud^
+||stats.musicuniverse.education^
+||stats.myherocard.com^
+||stats.napaconnect.ca^
+||stats.navedislam.com^
+||stats.nddmed.com^
+||stats.nerdbusiness.com^
+||stats.newslit.co^
+||stats.nexagon.dk^
+||stats.nodewood.com^
+||stats.nomad.radio^
+||stats.nonprofit.foundation^
+||stats.nothingbutnylon.com^
+||stats.nullsecure.com^
+||stats.nytecomics.com^
+||stats.obiit.co^
+||stats.obokat.se^
+||stats.odysseeseine.org^
+||stats.officefoosball.com^
+||stats.oldtinroof.com^
+||stats.oliveoil.pro^
+||stats.olliejudge.com^
+||stats.onepagelove.com^
+||stats.opengatechurch.ca^
+||stats.orbitalhealth.co^
+||stats.ordinarypuzzles.com^
+||stats.ortussolutions.com^
+||stats.osiemsiedem.com^
+||stats.otsohavanto.net^
+||stats.outpostdemo.com^
+||stats.ownpath.xyz^
+||stats.owre.se^
+||stats.p42.ai^
+||stats.parqet.com^
+||stats.parrot.dev^
+||stats.passwordyeti.com^
+||stats.pasteapp.io^
+||stats.pastorwagner.com^
+||stats.patout.dev^
+||stats.patriot.win^
+||stats.paulronge.se^
+||stats.paypresto.co^
+||stats.paysagistes.pro^
+||stats.pebkac.io^
+||stats.pendleratlas.de^
+||stats.perpetual.pizza^
+||stats.petanode.com^
+||stats.petr.codes^
+||stats.phili.pe^
+||stats.philjava.com^
+||stats.photographer.com.au^
+||stats.pianoplanet.app^
+||stats.pinoymusicstation.com^
+||stats.piplette.co^
+||stats.piranhas.co^
+||stats.pise-notes.club^
+||stats.pitstone.co.uk^
+||stats.pizzapizza.io^
+||stats.plainsending.com^
+||stats.planxti.com^
+||stats.poesieundgenuss.com^
+||stats.pointflottant.com^
+||stats.polekatfitness.com^
+||stats.poochplaces.dog^
+||stats.portalmonitor.io^
+||stats.portalzero.net^
+||stats.postcollectors.com^
+||stats.poweringpastcoal.org^
+||stats.preeventualist.org^
+||stats.pri.org^
+||stats.pricewell.io^
+||stats.principedepaz.gt^
+||stats.print.work^
+||stats.processserver101.com^
+||stats.procumeni.cz^
+||stats.prodtype.com^
+||stats.profilehunt.net^
+||stats.profitablesignpricing.com^
+||stats.projectcongress.com^
+||stats.psychotherapieravensburg.de^
+||stats.pubfind.io^
+||stats.qovery.com^
+||stats.quicksilvercre.com^
+||stats.radicaldata.org^
+||stats.radicalweb.design^
+||stats.rasulkireev.com^
+||stats.reactician.com^
+||stats.reactshowcase.com^
+||stats.readers.cafe^
+||stats.readng.co^
+||stats.redlabelsports.com^
+||stats.redpandabooks.com^
+||stats.referralhero.com^
+||stats.rehaag-immobilien.de^
+||stats.reisemobil.pro^
+||stats.remotebear.io^
+||stats.reprage.com^
+||stats.respkt.de^
+||stats.reto.tv^
+||stats.retofunctional.com^
+||stats.revitfamily.app^
+||stats.rideinpeace.ie^
+||stats.rightourhistoryhawaii.com^
+||stats.robhope.com^
+||stats.robotika.ax^
+||stats.rocketvalidator.com^
+||stats.roderickduenas.com^
+||stats.ruhrfestspiele.de^
+||stats.rushilperera.me^
+||stats.rymawby.com^
+||stats.s-zt.at^
+||stats.sakurasky.com^
+||stats.sapnininkas.com^
+||stats.sascha-theobald.de^
+||stats.savoirplus-risquermoins.net^
+||stats.sax.net^
+||stats.scailable.net^
+||stats.scalesql.com^
+||stats.scottbartell.com^
+||stats.screen-play.app^
+||stats.screenagers.com^
+||stats.screenwavemedia.com^
+||stats.seanbailey.dev^
+||stats.sebastiandombrowski.de^
+||stats.sebastiangale.ca^
+||stats.selectam.io^
+||stats.sendngnt.com^
+||stats.servicedesignjobs.com^
+||stats.seva.rocks^
+||stats.sexplore.app^
+||stats.shareup.app^
+||stats.sheer.tj^
+||stats.shepherd.com^
+||stats.shh.io^
+||stats.shiftx.com^
+||stats.siedentop.dev^
+||stats.simplinetworks.com^
+||stats.sirdata.com^
+||stats.sixseven.at^
+||stats.ski.com^
+||stats.slicedthread.com^
+||stats.socialeurope.eu^
+||stats.soundbite.so^
+||stats.southswindon-pc.gov.uk^
+||stats.sparkloop.app^
+||stats.spreadtheworld.net^
+||stats.sprune.com^
+||stats.sqlteam.com^
+||stats.squaddy.se^
+||stats.stack11.io^
+||stats.stackingthebricks.com^
+||stats.stacks.org^
+||stats.staging.hex.pm^
+||stats.steuer-soldaten.de^
+||stats.strawberry.rocks^
+||stats.studypages.com^
+||stats.sublimesecurity.com^
+||stats.suenicholls.com^
+||stats.suggestedit.com^
+||stats.suniboy.com^
+||stats.suominaikidoacademy.com^
+||stats.sushibyte.io^
+||stats.svemir.co^
+||stats.swicket.io^
+||stats.symbiofest.cz^
+||stats.table.party^
+||stats.tarasyarema.com^
+||stats.tax-venture.de^
+||stats.teamdetails.com^
+||stats.tedserbinski.com^
+||stats.teenranch.com^
+||stats.tekin.co.uk^
+||stats.terre-compagne.fr^
+||stats.terribleprojectideas.com^
+||stats.textprotocol.org^
+||stats.theiere-tasse.com^
+||stats.thelandofar.be^
+||stats.thenewradiance.com^
+||stats.thingsthatkeepmeupatnight.dev^
+||stats.thomasbandt.com^
+||stats.thomasvitale.com^
+||stats.tijdschrift.zenleven.nl^
+||stats.time2unfold.com^
+||stats.timkhoury.com^
+||stats.timmo.immo^
+||stats.tinkerer.tools^
+||stats.tl8.io^
+||stats.tms-development.com^
+||stats.tms-development.de^
+||stats.tms-institut.de^
+||stats.tnc.sc^
+||stats.toiletmap.org.uk^
+||stats.training.fit^
+||stats.travelfodder.com^
+||stats.trenntoi.de^
+||stats.tresor.one^
+||stats.trigo.at^
+||stats.trimbles.ie^
+||stats.trussed.dev^
+||stats.tubecalculator.co.uk^
+||stats.twhl.xyz^
+||stats.twirrl.co^
+||stats.ubiwiz.com^
+||stats.unusualtourist.com^
+||stats.urbanfinn.com^
+||stats.urlaubsverwaltung.cloud^
+||stats.useeffect.dev^
+||stats.uxtools.co^
+||stats.v4.agirpourlenvironnement.org^
+||stats.vanityprojects.com^
+||stats.vdsnow.ru^
+||stats.vertis.io^
+||stats.vican.me^
+||stats.visions.ch^
+||stats.voedingskussen.net^
+||stats.voltamediahouse.com^
+||stats.voltimum.com^
+||stats.wachstum.at^
+||stats.wafflemeido.art^
+||stats.walkiees.co.uk^
+||stats.websnap.app^
+||stats.wecodeni.com^
+||stats.wellbeyond.com^
+||stats.westswindon-pc.gov.uk^
+||stats.whenpigsflybbq.com^
+||stats.whereisit5pmrightnow.com^
+||stats.wisebox.co^
+||stats.wordvested.org^
+||stats.world.hey.com^
+||stats.wvs.org.uk^
+||stats.wvsindia.org^
+||stats.wwdcscholars.com^
+||stats.www.agirpourlenvironnement.org^
+||stats.wymanmobilenotary.com^
+||stats.xactcode.com^
+||stats.xn--antnio-dxa.pt^
+||stats.yourdallashandyman.com^
+||stats.zimri.net^
+||statystyki.ekspertyzy-szkolenia.pl^
+||sts.authramp.com^
+||sts.eliasjarzombek.com^
+||sts.papyrs.com^
+||sts.tour-europe.org^
+||stts.sgab-srfp.ch^
+||stts.swisshranalytics.ch^
+||t.lastcast.fm^
+||tics.cortex.gg^
+||tics.seeker.gg^
+||tics.techdirt.com^
+||tipstats.onepagelove.com^
+||tock.weg.plus^
+||track.slickinbox.com^
+||traffic.hostedstatus.page^
+||traffic.taktikal.is^
+||tree.indot.nl^
+||triton.companyegg.com^
+||trolina.mikitvba.com^
+||varys.asongofzandc.xyz^
+||views.emikajewelry.com^
+||views.ericcapella.com^
+||views.sikerlogistics.com^
+||views.sikerproducts.com^
+||visite.scambi.org^
+||visitorcenter.ioafw.com^
+||visitorcenter.srwild.com^
+||visitors.gigianddavid.com^
+||we-love-privacy.humane.club^
+||webstats.bijenpatel.com^
+||yolo.philipbjorge.com^
+||zahlen.olereissmann.de^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_tracedock.txt ***
+||2tty.overstappen.nl^
+||api.bunzlaucastle.com^
+||app1.maatwerkonline.nl^
+||bc.semwerkt.nl^
+||box.bossdata.be^
+||cms.hardloopaanbiedingen.nl^
+||ee.impactextend.dk^
+||erp.qwic.nl^
+||host11.traffic-builders.com^
+||o2.ikontwerpflyers.nl^
+||s1.carnext.com^
+||s4.parkeren-amsterdam.com^
+||s4.parkeren-haarlem.nl^
+||s4.parkeren-utrecht.nl^
+||tdep.bunzlonline.nl^
+||tdep.growwwdigital.com^
+||tdep.sdim.nl^
+||tdep.suncamp.be^
+||tdep.suncamp.de^
+||tdep.suncamp.nl^
+||tdep.suncamp.pl^
+||tdep.teamnijhuis.com^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_at-internet.txt ***
+||71efe2183b8663ad5bf9d7a9320aeb48.leboncoin.fr^
+||a.20minutes.fr^
+||a.hellowork.com^
+||a.pourquoidocteur.fr^
+||a1.api.bbc.co.uk^
+||a1.api.bbc.com^
+||abncx.amv.fr^
+||ama.planet-wissen.de^
+||ama.quarks.de^
+||ama.wdr.de^
+||ama.wdrmaus.de^
+||ana.tv5unis.ca^
+||arrietty.nrj.fr^
+||at-cddc.actu-juridique.fr^
+||at.badische-zeitung.de^
+||atconnect.npo.nl^
+||ati-a1.946d001b783803c1.xhst.bbci.co.uk^
+||ati.sazka.cz^
+||aud.banque-france.fr^
+||avocado.laprovence.com^
+||avp.labanquepostale.fr^
+||blava.viessmann.sk^
+||brickworks.viessmann.sg^
+||buf.lemonde.fr^
+||c0012.brsimg.com^
+||checkpointcharlie.heizung.de^
+||chihiro.nostalgie.fr^
+||col.casa.it^
+||col.idealista.com^
+||col.idealista.it^
+||col.idealista.pt^
+||col.rentalia.com^
+||collect.meilleurtaux.com^
+||conimicutlighthouse.viessmann-us.com^
+||content.kleinezeitung.at^
+||crocetta.viessmann.it^
+||culture.intermedes.com^
+||d.deloitte.fr^
+||d.m-net.de^
+||d.santemagazine.fr^
+||d.uni-medias.com^
+||da.freo.nl^
+||da.maif.fr^
+||da.rabobank.nl^
+||dfr.deloitte.com^
+||dimensions.mappy.com^
+||donjigrad.viessmann.rs^
+||drau.viessmann.si^
+||epwa.europarl.europa.eu^
+||fabryczna.viessmann.pl^
+||faucons.viessmann.fr^
+||hal.courrierinternational.com^
+||hd.pe.fr^
+||hmg.handelsblatt.com^
+||hmg.wiwo.de^
+||hrbitov.viessmann.cz^
+||image.ard.de^
+||image.mdr.de^
+||images.kika.de^
+||insights.biallo.de^
+||insights.sport1.de^
+||johannes.voith.com^
+||kallerupstone.viessmann.dk^
+||kiki.rireetchansons.fr^
+||kistacity.viessmann.se^
+||lem.nouvelobs.com^
+||mediniku.viessmann.lt^
+||mefo1.zdf.de^
+||mkt.usz.ch^
+||montpalatin.handicap.fr^
+||pear.ca-eko-globetrotter.fr^
+||ponyo.cheriefm.fr^
+||protys.protys.fr^
+||res.elle.fr^
+||res.femina.fr^
+||res.franc-tireur.fr^
+||res.marianne.net^
+||res.programme-television.org^
+||res.public.fr^
+||ressources.annoncesbateau.com^
+||ressources.argusassurance.com^
+||ressources.caradisiac.com^
+||ressources.centraleauto.com^
+||ressources.lacentrale.fr^
+||ressources.lagazette.com^
+||ressources.lemoniteur.com^
+||ressources.lsa.fr^
+||ressources.mavoiturecash.fr^
+||ressources.promoneuve.fr^
+||ressources.usine-digitale.com^
+||ressources.usine-nouvelle.com^
+||rsc.lepoint.fr^
+||salzwerk.viessmann.de^
+||selvi.viessmann.com.tr^
+||severn.viessmann.co.uk^
+||sheeta.nrj-play.fr^
+||st1.lg.avendrealouer.fr^
+||steinbackhaus.viessmann.com^
+||steinernehaus.viessmann.at^
+||steinsala.viessmann.lu^
+||strawberry.basf.com^
+||tm.urssaf.fr^
+||torropinto.viessmann.es^
+||tse.telerama.fr^
+||uusimaa.viessmann.fi^
+||waati.quechoisir.org^
+||wareneingang.edeka.de^
+||wasserkraftwerkkessel.viessmann.ch^
+||waterlooberlin.viessmann.ca^
+||woodstock.viessmann.com.au^
+||wvvw.france24.com^
+||wvvw.francemediasmonde.com^
+||wvvw.infomigrants.net^
+||wvvw.mc-doualiya.com^
+||wvvw.rfi.fr^
+||www.strawberry.basf.com^
+||y1.arte.tv^
+||zagrabiti.viessmann.hr^
+||zaventemdijleland.viessmann.be^
+||zelten.fritz-berger.de^
+||zug.sbb.ch^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_adobe.txt ***
+||1ps6e7sort397gy9.edge46.testandtarget.omniture.com^
+||20.edge46.testandtarget.omniture.com^
+||a.1800gotjunk.com^
+||a.acxiom.com^
+||a.addskills.se^
+||a.alzcombocare.com^
+||a.amw.com^
+||a.bigtennetwork.com^
+||a.conferencecall.com^
+||a.ekero.se^
+||a.fchp.org^
+||a.fox.com^
+||a.foxsports.com^
+||a.foxsportsarizona.com^
+||a.foxsportscarolinas.com^
+||a.foxsportsdetroit.com^
+||a.foxsportsflorida.com^
+||a.foxsportshouston.com^
+||a.foxsportskansascity.com^
+||a.foxsportslocal.com^
+||a.foxsportsmidwest.com^
+||a.foxsportsnorth.com^
+||a.foxsportsohio.com^
+||a.foxsportssandiego.com^
+||a.foxsportssouth.com^
+||a.foxsportssouthwest.com^
+||a.foxsportstennessee.com^
+||a.foxsportswest.com^
+||a.foxsportswisconsin.com^
+||a.fxnetworks.com^
+||a.hjart-lungfonden.se^
+||a.intercall.com^
+||a.ipoque.com^
+||a.koodomobile.com^
+||a.lls.org^
+||a.loi.nl^
+||a.medtronic.com^
+||a.mercuriurval.com^
+||a.micorp.com^
+||a.munters.com.au^
+||a.munters.com.mx^
+||a.munters.com^
+||a.munters.es^
+||a.munters.fi^
+||a.munters.it^
+||a.munters.jp^
+||a.munters.us^
+||a.pork.org^
+||a.publicmobile.ca^
+||a.redbrickhealth.com^
+||a.replaytheseries.com^
+||a.rohde-schwarz.com.cn^
+||a.rohde-schwarz.com^
+||a.sami.se^
+||a.simonandschuster.com^
+||a.sj.se^
+||a.smetrics.sovereign.com^
+||a.sodra.com^
+||a.spv.se^
+||a.svenskfast.se^
+||a.tactics.com^
+||a.telus.com^
+||a.transportgruppen.se^
+||a.trivita.com^
+||a.wheelabratorgroup.com^
+||aa-metrics.aircard.jp^
+||aa-metrics.airpayment.jp^
+||aa-metrics.airregi.jp^
+||aa-metrics.airreserve.net^
+||aa-metrics.airrsv.net^
+||aa-metrics.airwait.jp^
+||aa-metrics.arg.x.recruit.co.jp^
+||aa-metrics.beauty.hotpepper.jp^
+||aa-metrics.bookingtable.jp^
+||aa-metrics.golf-jalan.net^
+||aa-metrics.handy.airregi.jp^
+||aa-metrics.handy.arg.x.recruit.co.jp^
+||aa-metrics.hokench.com^
+||aa-metrics.hotpepper.jp^
+||aa-metrics.jalan.net^
+||aa-metrics.ponparemall.com^
+||aa-metrics.r-cash.jp^
+||aa-metrics.recruit-card.jp^
+||aa-metrics.restaurant-board.com^
+||aa-metrics.s-lms.net^
+||aa-metrics.salonboard.com^
+||aa-metrics.tabroom.jp^
+||aa-metrics.trip-ai.jp^
+||aa.analog.com^
+||aa.athome.com^
+||aa.bathandbodyworks.com^
+||aa.cbs.com^
+||aa.cbsi.com^
+||aa.cbsnews.com^
+||aa.cbssports.com^
+||aa.cnet.com^
+||aa.comicbook.com^
+||aa.db-finanzberatung.de^
+||aa.deutsche-bank.de^
+||aa.dyson.at^
+||aa.dyson.be^
+||aa.dyson.ch^
+||aa.dyson.co.uk^
+||aa.dyson.com^
+||aa.dyson.de^
+||aa.dyson.dk^
+||aa.dyson.es^
+||aa.maxblue.de^
+||aa.norisbank.de^
+||aa.postbank.de^
+||aaat.2ndstreet.jp^
+||aadata.april-international.com^
+||aas.mclaren.com^
+||aas.neom.com^
+||abmeldung.information.o2.de^
+||abt.bauhaus.es^
+||abt.bauhaus.info^
+||abt.nike.com^
+||abt.nl.bauhaus^
+||academics.academicsuperstore.com^
+||acs.woolworths.com.au^
+||activity.newlook.com^
+||adb-analytics.live-now.com^
+||adbmetrics.koreanair.com^
+||adbmetrics.larioja.com^
+||adbmetrics.lasprovincias.es^
+||adbmetrics.laverdad.es^
+||adbmetrics.lomejordelvinoderioja.com^
+||adbmetrics.masterelcorreo.com^
+||adbmetrics.miperiodicodigital.com^
+||adbmetrics.vehiculosdeocasion.eus^
+||adbmetrics.vidasolidaria.com^
+||adbmetrics.vocento.com^
+||adbmetrics.welife.es^
+||adbmetrics.womennow.es^
+||adbmetrics.xn--futuroenespaol-1nb.es^
+||adbsmetrics.ep.hmc.co.kr^
+||adbsmetrics.everland.com^
+||adbsmetrics.genesis.com^
+||adbsmetrics.hanwha.com^
+||adbsmetrics.hyundai.com^
+||adbsmetrics.kia.com^
+||adbsmetrics.koreanair.com^
+||adbsmetrics.kt.com^
+||adbsmetrics.lotterentacar.net^
+||adobe-analytics.vionicshoes.com^
+||adobe-dev-landingpageprefix.descubre.interbank.pe^
+||adobe-ep.cms.gov^
+||adobe-ep.cuidadodesalud.gov^
+||adobe-ep.healthcare.gov^
+||adobe-ep.medicaid.gov^
+||adobe-ep.medicare.gov^
+||adobe-nonsecure.cjone.com^
+||adobe-secure.cjone.com^
+||adobe.aeonbank.co.jp^
+||adobe.autoscout24.at^
+||adobe.autoscout24.be^
+||adobe.autoscout24.bg^
+||adobe.autoscout24.com.tr^
+||adobe.autoscout24.com.ua^
+||adobe.autoscout24.com^
+||adobe.autoscout24.cz^
+||adobe.autoscout24.de^
+||adobe.autoscout24.es^
+||adobe.autoscout24.eu^
+||adobe.autoscout24.fr^
+||adobe.autoscout24.hr^
+||adobe.autoscout24.it^
+||adobe.autoscout24.lu^
+||adobe.autoscout24.nl^
+||adobe.autoscout24.pl^
+||adobe.autoscout24.ro^
+||adobe.autoscout24.ru^
+||adobe.autoscout24.se^
+||adobe.bupaglobal.com^
+||adobe.dynamic.ca^
+||adobe.falabella.com.ar^
+||adobe.falabella.com.co^
+||adobe.falabella.com.pe^
+||adobe.falabella.com^
+||adobe.paybooc.co.kr^
+||adobe.pmi.org^
+||adobe.sukoonglobalhealth.com^
+||adobe.toridoll.com^
+||adobe.truckscout24.com^
+||adobe.wacoal.jp^
+||adobeanalytic.aerotek.com^
+||adobeanalytic.allegisglobalsolutions.com^
+||adobeanalytic.astoncarter.com^
+||adobeanalytic.teksystems.com^
+||adobeanalytics-http.hds.com^
+||adobeanalytics-https.hds.com^
+||adobeanalytics-secure.girlscouts.org^
+||adobeanalytics.actalentservices.com^
+||adobeanalytics.aerotek.com^
+||adobeanalytics.allegis-partners.com^
+||adobeanalytics.allegisglobalsolutions.com^
+||adobeanalytics.allegisgroup.com^
+||adobeanalytics.astoncarter.com^
+||adobeanalytics.bws.com.au^
+||adobeanalytics.danmurphys.com.au^
+||adobeanalytics.easi.com^
+||adobeanalytics.geico.com^
+||adobeanalytics.gettinghired.com^
+||adobeanalytics.girlscouts.org^
+||adobeanalytics.medline.com^
+||adobeanalytics.mlaglobal.com^
+||adobeanalytics.populusgroup.com^
+||adobeanalytics.serveone.co.kr^
+||adobeanalytics.teksystems.com^
+||adobeanalytics.vice.com^
+||adobedc.demdex.net^
+||adobeedge.morganstanley.com^
+||adobeedge.my.gov.au^
+||adobes.marugame-seimen.com^
+||adobes.pmi.org^
+||adobetp.chegg.com^
+||adobetps.chegg.com^
+||adtarget.barcainnovationhub.com^
+||adtarget.fcbarcelona.cat^
+||adtarget.fcbarcelona.co.it^
+||adtarget.fcbarcelona.com^
+||adtarget.fcbarcelona.es^
+||adtarget.fcbarcelona.fr^
+||adtarget.fcbarcelona.jp^
+||adtd.douglas.at^
+||adtd.douglas.be^
+||adtd.douglas.ch^
+||adtd.douglas.de^
+||adtd.douglas.it^
+||adtd.douglas.nl^
+||adtd.douglas.pl^
+||aec-target.base.be^
+||aec-target.telenet.be^
+||aep-target.credit-suisse.com^
+||ainu.intel.es^
+||ainu.intel.in^
+||ainu.intel.la^
+||ajo-zensar.adobesandbox.com^
+||ajo1gdc.ajo1gdc.adobevlab.com^
+||al-smetrics.vizio.com^
+||ametrics.finn.no^
+||ametrics.lumen.com^
+||ametrics.web.dnbbank.no^
+||an.avast.com^
+||an.avast.ru^
+||an.constantcontact.com^
+||an.milb.com^
+||an.mlb.com^
+||an.sny.tv^
+||an.theblaze.com^
+||an.yesnetwork.com^
+||analytic.ae.com^
+||analytic.americanfunds.com^
+||analytic.buoyweather.com^
+||analytic.capitalgroup.com^
+||analytic.cibc.com^
+||analytic.fishtrack.com^
+||analytic.hawaii.aaa.com^
+||analytic.hotelclub.com^
+||analytic.pnc.com^
+||analytic.simplyhealth.co.uk^
+||analytic.surfline.com^
+||analytic.texas.aaa.com^
+||analytic.underarmour.com^
+||analytics-lgs.corebridgefinancial.com^
+||analytics-nssl.bradyid.com^
+||analytics-secure.dollargeneral.com^
+||analytics-ssl.allconnect.com^
+||analytics-ssl.bradyid.com^
+||analytics-ssl.seton.co.uk^
+||analytics.adultswim.co.uk^
+||analytics.ae.com^
+||analytics.airindierberger.fi^
+||analytics.americanfunds.com^
+||analytics.amig.com^
+||analytics.asml.com^
+||analytics.autozone.com^
+||analytics.avis.de^
+||analytics.bgr.com^
+||analytics.bleacherreport.com^
+||analytics.boing.es^
+||analytics.boomerangtv.co.uk^
+||analytics.box.com^
+||analytics.boxlunch.com^
+||analytics.buoyweather.com^
+||analytics.canaltnt.es^
+||analytics.capitalgroup.com^
+||analytics.cartoonito.it^
+||analytics.cartoonnetwork.co.uk^
+||analytics.cartoonnetwork.com.au^
+||analytics.cartoonnetwork.jp^
+||analytics.cartoonnetworkasia.com^
+||analytics.cartoonnetworkindia.com^
+||analytics.cartoonnetworkmena.com^
+||analytics.cdf.cl^
+||analytics.ceu.com^
+||analytics.chilevision.cl^
+||analytics.chvnoticias.cl^
+||analytics.cibc.com^
+||analytics.cibcrewards.com^
+||analytics.cnfanart.com^
+||analytics.cnnchile.com^
+||analytics.concorsicartoonito.it^
+||analytics.corusent.com^
+||analytics.cycleworld.com^
+||analytics.disneyplus.com^
+||analytics.esporteinterativo.com.br^
+||analytics.evo.co.uk^
+||analytics.ewz.ch^
+||analytics.firstbankcard.com^
+||analytics.fishtrack.com^
+||analytics.floridatravellife.com^
+||analytics.fnbfremont.com^
+||analytics.fnni.com^
+||analytics.futuro360.com^
+||analytics.geastore.com^
+||analytics.geoutletstore.com^
+||analytics.gestore.com^
+||analytics.gewaterheater.com^
+||analytics.haworth.com^
+||analytics.hiexpress.com^
+||analytics.hlntv.com^
+||analytics.holidayinn.com^
+||analytics.hollywoodlife.com^
+||analytics.homes.com^
+||analytics.hottopic.com^
+||analytics.ihg.com^
+||analytics.johnson.ca^
+||analytics.kellyservices.com^
+||analytics.martinandosa.com^
+||analytics.myapstore.com^
+||analytics.ncaa.com^
+||analytics.onlinehomeretail.co.uk^
+||analytics.phn.com^
+||analytics.plumbworld.co.uk^
+||analytics.shopncaasports.com^
+||analytics.skinit.com^
+||analytics.surfline.com^
+||analytics.tcm.com^
+||analytics.thehartford.com^
+||analytics.theinstitutes.org^
+||analytics.tnt-tv.com^
+||analytics.tntdram.com^
+||analytics.tntdramma.com^
+||analytics.virginaustralia.com^
+||analytics.weldonowen.com^
+||analytics.wienerberger.fr^
+||analytics.wienerberger.hr^
+||analytics.wienerberger.hu^
+||analytics.wienerberger.in^
+||analytics.wienerberger.it^
+||analytics.wienerberger.lt^
+||analytics.wienerberger.mk^
+||analytics.wienerberger.nl^
+||analytics.wienerberger.no^
+||analytics.wienerberger.pl^
+||analytics.wienerberger.ro^
+||analytics.wienerberger.rs^
+||analytics.wienerberger.se^
+||analytics.wienerberger.si^
+||analytics.wienerberger.sk^
+||analytics.xoomenergy.com^
+||analytics.zagg.com^
+||analytics1.dillards.com^
+||analyticsbusiness.ing.ro^
+||analyticsnarc.ro.ing.net^
+||analyticsnossl.forcepoint.com^
+||analyticsresults.bildungsforum.datev.de^
+||analyticsresults.datev-karriereblog.de^
+||analyticsresults.datev-magazin.de^
+||analyticsresults.datev-mymarketing.de^
+||analyticsresults.datev.com^
+||analyticsresults.datev.de^
+||analyticsresults.dev.datev.de^
+||analyticsresults.trialog-magazin.de^
+||analyticsssl.forcepoint.com^
+||anmet.originenergy.com.au^
+||ans.avast.com^
+||ans.avast.ru^
+||ans.milb.com^
+||ans.mlb.com^
+||ans.worldbaseballclassic.com^
+||ans.yesnetwork.com^
+||antp1.omniture.com^
+||antp2.omniture.com^
+||appmetrics.sprint.com^
+||as.autobild.de^
+||as.axelspringer.com^
+||as.bild.de^
+||as.businessinsider.de^
+||as.bz-berlin.de^
+||as.computerbild.de^
+||as.fitbook.de^
+||as.metal-hammer.de^
+||as.musikexpress.de^
+||as.myhomebook.de^
+||as.petbook.de^
+||as.rollingstone.de^
+||as.stylebook.de^
+||as.techbook.de^
+||as.travelbook.de^
+||as.welt.de^
+||as.wieistmeineip.de^
+||asc.e-conolight.com^
+||asc.solidworks.com^
+||asd.bauhaus.at^
+||asd.bauhaus.es^
+||asd.bauhaus.hr^
+||asd.bauhaus.info^
+||asd.nl.bauhaus^
+||assets2.aainsurance.co.nz^
+||assets2.aami.com.au^
+||assets2.apia.com.au^
+||assets2.bingle.com.au^
+||assets2.cilinsurance.com.au^
+||assets2.gio.com.au^
+||assets2.shannons.com.au^
+||assets2.suncorp.com.au^
+||assets2.suncorpbank.com.au^
+||assets2.terrischeer.com.au^
+||assets2.vanz.vero.co.nz^
+||assets2.vero.co.nz^
+||at-cdn.swisscom.ch^
+||at-ecomm.levi.com^
+||at.db-finanzberatung.de^
+||at.deutsche-bank.de^
+||at.maxblue.de^
+||at.mclaren.com^
+||at.neom.com^
+||at.norisbank.de^
+||at.postbank.de^
+||at.swisscom.ch^
+||at.vodafone.de^
+||atarget.adelaide.edu.au^
+||atarget.csu.edu.au^
+||atarget.firstrepublic.com^
+||atarget.harley-davidson.com^
+||atgt.grafana.com^
+||atsmetrics.adobe.com^
+||attorney.findlaw.com^
+||audience.standardchartered.com.tw^
+||awap.equifax.com^
+||axp.8newsnow.com^
+||axp.abc27.com^
+||axp.abc4.com^
+||axp.bigcountryhomepage.com^
+||axp.binghamtonhomepage.com^
+||axp.borderreport.com^
+||axp.brproud.com^
+||axp.cbs17.com^
+||axp.cbs42.com^
+||axp.cbs4indy.com^
+||axp.cenlanow.com^
+||axp.centralillinoisproud.com^
+||axp.cnyhomepage.com^
+||axp.conchovalleyhomepage.com^
+||axp.counton2.com^
+||axp.cw33.com^
+||axp.cw39.com^
+||axp.dcnewsnow.com^
+||axp.everythinglubbock.com^
+||axp.fourstateshomepage.com^
+||axp.fox16.com^
+||axp.fox21news.com^
+||axp.fox2now.com^
+||axp.fox40.com^
+||axp.fox44news.com^
+||axp.fox4kc.com^
+||axp.fox56news.com^
+||axp.fox59.com^
+||axp.fox5sandiego.com^
+||axp.fox8.com^
+||axp.informnny.com^
+||axp.kark.com^
+||axp.kdvr.com^
+||axp.keloland.com^
+||axp.ketk.com^
+||axp.kfor.com^
+||axp.kget.com^
+||axp.khon2.com^
+||axp.klfy.com^
+||axp.koin.com^
+||axp.kron4.com^
+||axp.krqe.com^
+||axp.ksn.com^
+||axp.ksnt.com^
+||axp.ktalnews.com^
+||axp.ktla.com^
+||axp.ktsm.com^
+||axp.kxan.com^
+||axp.kxnet.com^
+||axp.localsyr.com^
+||axp.myarklamiss.com^
+||axp.mychamplainvalley.com^
+||axp.myfox8.com^
+||axp.myhighplains.com^
+||axp.mypanhandle.com^
+||axp.mystateline.com^
+||axp.mysterywire.com^
+||axp.mytwintiers.com^
+||axp.mywabashvalley.com^
+||axp.nbc4i.com^
+||axp.news10.com^
+||axp.newsnationnow.com^
+||axp.nwahomepage.com^
+||axp.ourquadcities.com^
+||axp.ozarksfirst.com^
+||axp.pahomepage.com^
+||axp.phl17.com^
+||axp.pix11.com^
+||axp.qcnews.com^
+||axp.rochesterfirst.com^
+||axp.siouxlandproud.com^
+||axp.texomashomepage.com^
+||axp.thehill.com^
+||axp.tristatehomepage.com^
+||axp.upmatters.com^
+||axp.valleycentral.com^
+||axp.wane.com^
+||axp.wate.com^
+||axp.wavy.com^
+||axp.wboy.com^
+||axp.wbtw.com^
+||axp.wcia.com^
+||axp.wdhn.com^
+||axp.wdtn.com^
+||axp.wearegreenbay.com^
+||axp.westernslopenow.com^
+||axp.wfla.com^
+||axp.wfxrtv.com^
+||axp.wgno.com^
+||axp.wgnradio.com^
+||axp.wgntv.com^
+||axp.whnt.com^
+||axp.who13.com^
+||axp.wiproud.com^
+||axp.wivb.com^
+||axp.wjbf.com^
+||axp.wjhl.com^
+||axp.wjtv.com^
+||axp.wkbn.com^
+||axp.wkrg.com^
+||axp.wkrn.com^
+||axp.wlns.com^
+||axp.wnct.com^
+||axp.woodtv.com^
+||axp.wowktv.com^
+||axp.wpri.com^
+||axp.wrbl.com^
+||axp.wreg.com^
+||axp.wric.com^
+||axp.wsav.com^
+||axp.wspa.com^
+||axp.wtaj.com^
+||axp.wtnh.com^
+||axp.wtrf.com^
+||axp.wvnstv.com^
+||axp.wwlp.com^
+||axp.wytv.com^
+||axp.yourbasin.com^
+||axp.yourbigsky.com^
+||axp.yourcentralvalley.com^
+||axp.yourerie.com^
+||b.aecf.org^
+||b.allsecur.nl^
+||b.escardio.org^
+||b.fox.com^
+||b.foxsports.com^
+||b.freshpair.com^
+||b.fxnetworks.com^
+||b.koodomobile.com^
+||b.law.com^
+||b.m.mynewplace.com^
+||b.medtronic.com^
+||b.mibank.com^
+||b.miretirement.com^
+||b.mitrust.com^
+||b.miwebflex.com^
+||b.mynewplace.com^
+||b.parade.com^
+||b.publicmobile.ca^
+||b.redbrickhealth.com^
+||b.rohde-schwarz.com^
+||b.rwjf.org^
+||b.simonandschuster.com^
+||b.simyo.de^
+||b.snow.com^
+||b.socialdemokraterna.se^
+||b.telus.com^
+||b.tienda.com^
+||b2binsider.adobe.com^
+||bank.svb.com^
+||bc.law.com^
+||bcomniture.focus.de^
+||beer2s.millerbrewing.com^
+||biz1.kddi.com^
+||blau-subdomain.b.information.blau.de^
+||brands.lookfantastic.com^
+||bsna.galeria-kaufhof.de^
+||bsna.inno.be^
+||c.mibank.com^
+||c.rhapsody.com^
+||c.snow.com^
+||candy.sees.com^
+||cat.fonecta.fi^
+||catalogs.printplace.com^
+||cbmetrics.clickbank.com^
+||cctrkom.creditcards.com^
+||cdp.cifinancial.com^
+||cgwebmetrics.capgroup.com^
+||charms.pugster.com^
+||christian.lifeway.com^
+||christians.lifeway.com^
+||ci.intuit.ca^
+||ci.intuit.com^
+||ci.quickbooks.com^
+||clerks.doccheck.com^
+||cmon.congress.gov^
+||cname-aa.022022.net^
+||cname-aa.engineersguide.jp^
+||cname-aanicaciones.bancoentrerios.net^
+||code.randomhouse.com^
+||collect.allianz-technology.ch^
+||collect.allianz.ch^
+||collect.allianzcinema.ch^
+||collect.allianzdriveincinema.ch^
+||collect.cap.ch^
+||collect.elvia.ch^
+||collect2.allianz.ch^
+||collection.saga.co.uk^
+||com.102.122.207.net^
+||connectstats.mckesson.com^
+||cp.deltadentalwa.com^
+||cs.analytics.lego.com^
+||csmetrics.wilton.com^
+||csvt002.harrisbank.com^
+||csvt005.heretakethewheel.com^
+||csvt009.bmoharris.com^
+||csvti.intuit.ca^
+||csvtq.intuit.co.uk^
+||csvtr.bmo.com^
+||csvtr02.bmocorpmc.com^
+||csvtr05.mosaikbusiness.com^
+||csvtr07.bmoinvestorline.com^
+||csvtr09.bmonesbittburns.com^
+||csvtr10.bmocm.com^
+||csvtr13.bmodelawaretrust.com^
+||csvtt.bmolife.com^
+||csvtu.bmolending.com^
+||cups.republicoftea.com^
+||data-ssl.stepstone.at^
+||data-ssl.stepstone.de^
+||data.avid.com^
+||data.bioplanet.be^
+||data.chelseafc.com^
+||data.collectandgo.be^
+||data.collishop.be^
+||data.colruyt.be^
+||data.colruytgroup.com^
+||data.comunicaciones.bancosanjuan.net^
+||data.comunicaciones.bancosantacruz.net^
+||data.comunicaciones.bancosantafe.net^
+||data.comunicaciones.ficohsa.hn^
+||data.comunicaciones.jetstereo.com^
+||data.comunicaciones.motomundohn.com^
+||data.comunicaciones.solvenza.hn^
+||data.comunicaciones.ultramotorhn.com^
+||data.connect.riolasvegas.com^
+||data.connect.riteaid.com^
+||data.connectingthreads.com^
+||data.craftsamericana.com^
+||data.crm-edm.thsrc.com.tw^
+||data.crm.lizearle.com^
+||data.crm.soapandglory.com^
+||data.cs.officedepot.com^
+||data.csdev.officedepot.com^
+||data.customer-success-apac.adobe.com^
+||data.customermail.bioplanet.be^
+||data.customermail.collectandgo.be^
+||data.customermail.colruyt.be^
+||data.customermail.mijnextra.be^
+||data.customermail.mijnxtra.be^
+||data.customermail.sparcolruytgroup.be^
+||data.customermail.syst.colruytgroup.com^
+||data.customermail.test.colruytgroup.com^
+||data.cx.palladiumhotelgroup.com^
+||data.dats24.be^
+||data.deinfeedback.alditalk-kundenbetreuung.de^
+||data.descubre.interbank.pe^
+||data.devbmg.bancobmg.com.br^
+||data.digital.costco.ca^
+||data.digital.costco.com^
+||data.discover.ringcentral.com^
+||data.dreambaby.be^
+||data.dreamland.be^
+||data.e.lotteryoffice.com.au^
+||data.e.ringcentral.com^
+||data.e.visionmondiale.ca^
+||data.e.worldvision.ca^
+||data.eat.nespresso.com^
+||data.eau.nespresso.com^
+||data.ebe.nespresso.com^
+||data.ebr.nespresso.com^
+||data.eca.nespresso.com^
+||data.ech.nespresso.com^
+||data.ede.nespresso.com^
+||data.edm.chowtaifook.com^
+||data.education.aware.com.au^
+||data.efr.nespresso.com^
+||data.egr.nespresso.com^
+||data.eit.nespresso.com^
+||data.ejp.nespresso.com^
+||data.ekr.nespresso.com^
+||data.elu.nespresso.com^
+||data.em.assurancewireless.com^
+||data.em.officedepot.com^
+||data.em.ringcentral.com^
+||data.em.t-mobile.com^
+||data.em.viking.com^
+||data.em.vikingcruises.com^
+||data.em2.cloudflare.com^
+||data.email-discovery.cjm.adobe.com^
+||data.email-disney.cjm.adobe.com^
+||data.email-kpn.cjm.adobe.com^
+||data.email-lightroom.cjm.adobe.com^
+||data.email-merkle.cjm.adobe.com^
+||data.email-mobiledx.cjm.adobe.com^
+||data.email-signify.cjm.adobe.com^
+||data.email-tsb.cjm.adobe.com^
+||data.email.belgiantrain.be^
+||data.email.gamma.be^
+||data.email.gamma.nl^
+||data.email.gobrightline.com^
+||data.email.islandsbanki.is^
+||data.email.karwei.nl^
+||data.email.key.com^
+||data.email.metrobyt-mobile.com^
+||data.email.q8.it^
+||data.email.realmadrid.com^
+||data.email.telmore.dk^
+||data.email.verizon.com^
+||data.email.yourmessage.aviva.co.uk^
+||data.email.yousee.dk^
+||data.emaillpb.adobe.com^
+||data.emails.aucklandairport.co.nz^
+||data.emails.ringcentral.com^
+||data.emdev.officedepot.com^
+||data.emea.coca-cola.com^
+||data.eml.wegmans.com^
+||data.enl.nespresso.com^
+||data.enz.nespresso.com^
+||data.epsilon.adobesandbox.com^
+||data.erfahrung.o2.de^
+||data.esg.nespresso.com^
+||data.euk.nespresso.com^
+||data.europe.coca-cola.com^
+||data.events.cbussuper.com.au^
+||data.fans.realmadrid.com^
+||data.fans.williamsf1.com^
+||data.fundacion.realmadrid.org^
+||data.gc.qantas.com.au^
+||data.grandpalladium.palladiumhotelgroup.com^
+||data.hardrock.palladiumhotelgroup.com^
+||data.hoteles.palladiumhotelgroup.com^
+||data.i.lotteryoffice.com.au^
+||data.i.mysticlake.com^
+||data.ibmnorthamerica.adobesandbox.com^
+||data.info.avianca.com^
+||data.info.aware.com.au^
+||data.info.credit-suisse.com^
+||data.info.ficohsa.com.gt^
+||data.info.ficohsa.com.pa^
+||data.info.gobrightline.com^
+||data.info.jetstereo.com^
+||data.info.lumxpert.signify.com^
+||data.info.motomundohn.com^
+||data.info.nordea.dk^
+||data.info.nordea.fi^
+||data.info.nordea.no^
+||data.info.nordea.se^
+||data.info.smatheast.aaa.com^
+||data.lifesize.com^
+||data.msg.wegmans.com^
+||data.msgs.westpac.com.au^
+||data.myhealth.riteaid.com^
+||data.news.blesscollectionhotels.com^
+||data.news.eurobet.it^
+||data.news.lumxpert.signify.com^
+||data.news.palladiumhotelgroup.com^
+||data.newsletter.avianca.com^
+||data.newsletter.italia.it^
+||data.noreply.timhortons.ca^
+||data.noreply.timsfinancial.ca^
+||data.notice.assurancewireless.com^
+||data.notice.metrobyt-mobile.com^
+||data.notice.t-mobile.com^
+||data.notificaciones.ficohsa.com^
+||data.notifications.campaign.adobe.com^
+||data.notifications.mylighting.signify.com^
+||data.notifications.portal.cooperlighting.com^
+||data.okay.be^
+||data.online.clubeextra.com.br^
+||data.online.paodeacucar.com^
+||data.onlyyou.palladiumhotelgroup.com^
+||data.page.worldvision.ca^
+||data.partner-offers.airmiles.ca^
+||data.pharmacyservices.riteaid.com^
+||data.phg.palladiumhotelgroup.com^
+||data.pnet.co.za^
+||data.prewards.palladiumhotelgroup.com^
+||data.promo.timhortons.ca^
+||data.promo.timhortons.com^
+||data.promos.timsfinancial.ca^
+||data.qaegift.giftcards.com^
+||data.qamailing.mcafee.com^
+||data.qamarketing.giftcards.com^
+||data.resources.ringcentral.com^
+||data.rewards.riteaid.com^
+||data.rmsocio.realmadrid.com^
+||data.securemetrics-apple.com^
+||data.seguridad.ficohsa.com.gt^
+||data.service.aware.com.au^
+||data.service.cfs.com.au^
+||data.service.colonialfirststate.com.au^
+||data.service.manulife.ca^
+||data.service.wizconnected.com^
+||data.services.telia.dk^
+||data.servicing.key.com^
+||data.shop.williamsf1.com^
+||data.skistar1.test.cjmadobe.com^
+||data.smartinfo.future.smart.com^
+||data.smartmkt.future.smart.com^
+||data.socio.realmadrid.net^
+||data.stageegift.giftcards.com^
+||data.stagemarketing.giftcards.com^
+||data.stepstone.be^
+||data.stepstone.de^
+||data.stepstone.fr^
+||data.stepstone.nl^
+||data.surveys.aware.com.au^
+||data.t.worldvision.ca^
+||data.tc.jetstar.com^
+||data.thepointsguy.com^
+||data.tmail.northeast.aaa.com^
+||data.transaction.giftcards.com^
+||data.transactional.williamsf1.com^
+||data.trx.costco.ca^
+||data.trx.costco.com^
+||data.txn.puntoscolombia.com^
+||data.umfrage.blau.de^
+||data.umfrage.whatsappsim.de^
+||data.vinsolutions.com^
+||data.web.doitbest.com^
+||data.welcome.realmadrid.com^
+||data.wunderman-email.cjm.adobe.com^
+||data.your.hestaformercy.com.au^
+||data0.bell.ca^
+||data0.sympatico.ca^
+||data0.virginmobile.ca^
+||data1.bell.ca^
+||data1.sparkasse.at^
+||data1.virginmobile.ca^
+||data1.virginplus.ca^
+||datas.connectingthreads.com^
+||datas.knitpicks.com^
+||dc.areacliente.repsolluzygas.com^
+||dc.kfz-steuercheck.de^
+||dc.madridistas.com^
+||dc.realmadrid.com^
+||dc.realmadridnext.com^
+||dc.repsol.com^
+||dc.repsol.es^
+||dc.stenaline.co.uk^
+||dc.stenaline.com^
+||dc.stenaline.cz^
+||dc.stenaline.de^
+||dc.stenaline.dk^
+||dc.stenaline.ee^
+||dc.stenaline.es^
+||dc.stenaline.fi^
+||dc.stenaline.fr^
+||dc.stenaline.ie^
+||dc.stenaline.it^
+||dc.stenaline.lt^
+||dc.stenaline.lv^
+||dc.stenaline.nl^
+||dc.stenaline.no^
+||dc.stenaline.pl^
+||dc.stenaline.ru^
+||dc.stenaline.se^
+||dc.stenalinetravel.com^
+||dc.tuenergia.repsol.com^
+||dc.waylet.es^
+||dc2.credit-suisse.com^
+||dcs.audi.com^
+||dcs.esprit.at^
+||dcs.esprit.au^
+||dcs.esprit.be^
+||dcs.esprit.co.uk^
+||dcs.esprit.com^
+||dcs.esprit.cz^
+||dcs.esprit.de^
+||dcs.esprit.dk^
+||dcs.esprit.es^
+||dcs.esprit.eu^
+||dcs.esprit.fi^
+||dcs.esprit.fr^
+||dcs.esprit.hk^
+||dcs.esprit.kr^
+||dcs.esprit.nl^
+||dcs.esprit.ph^
+||dcs.esprit.se^
+||dcs.esprit.sg^
+||dcs.esprit.tw^
+||dcs.esprit.us^
+||dcs.espritshop.ch^
+||dcs.espritshop.it^
+||dcs.espritshop.pl^
+||dcs.plussizetech.com^
+||dcs.reiseversicherung.de^
+||delivery.lululemon.com^
+||demo.emaillpb.adobe.com^
+||demo3.management.testandtarget.omniture.com^
+||desuscripcion.phg.palladiumhotelgroup.com^
+||dev.email-signify.cjm.adobe.com^
+||di2.zooplus.es^
+||digistat.westjet.com^
+||digistats.westjet.com^
+||dii1.bitiba.cz^
+||dii1.bitiba.de^
+||dii1.bitiba.fi^
+||dii1.bitiba.fr^
+||dii1.bitiba.it^
+||dii1.bitiba.pl^
+||dii1.zoochic-eu.ru^
+||dii1.zoohit.cz^
+||dii1.zoohit.si^
+||dii1.zoohit.sk^
+||dii1.zooplus.at^
+||dii1.zooplus.be^
+||dii1.zooplus.bg^
+||dii1.zooplus.ch^
+||dii1.zooplus.co.uk^
+||dii1.zooplus.com^
+||dii1.zooplus.de^
+||dii1.zooplus.dk^
+||dii1.zooplus.fi^
+||dii1.zooplus.fr^
+||dii1.zooplus.gr^
+||dii1.zooplus.hr^
+||dii1.zooplus.hu^
+||dii1.zooplus.ie^
+||dii1.zooplus.it^
+||dii1.zooplus.nl^
+||dii1.zooplus.no^
+||dii1.zooplus.pl^
+||dii1.zooplus.pt^
+||dii1.zooplus.ro^
+||dii1.zooplus.se^
+||dii2.bitiba.be^
+||dii2.bitiba.ch^
+||dii2.bitiba.co.uk^
+||dii2.bitiba.cz^
+||dii2.bitiba.de^
+||dii2.bitiba.dk^
+||dii2.bitiba.es^
+||dii2.bitiba.fi^
+||dii2.bitiba.fr^
+||dii2.bitiba.it^
+||dii2.bitiba.nl^
+||dii2.bitiba.pl^
+||dii2.bitiba.se^
+||dii2.shpd.ext.zooplus.io^
+||dii2.shpp.ext.zooplus.io^
+||dii2.zoobee.de^
+||dii2.zoochic-eu.ru^
+||dii2.zoohit.cz^
+||dii2.zoohit.si^
+||dii2.zoohit.sk^
+||dii2.zooplus.at^
+||dii2.zooplus.be^
+||dii2.zooplus.bg^
+||dii2.zooplus.ch^
+||dii2.zooplus.co.uk^
+||dii2.zooplus.com^
+||dii2.zooplus.de^
+||dii2.zooplus.dk^
+||dii2.zooplus.es^
+||dii2.zooplus.fi^
+||dii2.zooplus.fr^
+||dii2.zooplus.gr^
+||dii2.zooplus.hcom.au^
+||dii3.bitiba.be^
+||dii3.bitiba.ch^
+||dii3.bitiba.co.uk^
+||dii3.bitiba.cz^
+||dii3.bitiba.de^
+||dii3.bitiba.dk^
+||dii3.bitiba.es^
+||dii3.bitiba.fi^
+||dii3.bitiba.fr^
+||dii3.bitiba.it^
+||dii3.bitiba.nl^
+||dii3.bitiba.pl^
+||dii3.bitiba.se^
+||dii3.zoochic-eu.ru^
+||dii3.zoohit.cz^
+||dii3.zoohit.si^
+||dii3.zoohit.sk^
+||dii3.zooplus.at^
+||dii3.zooplus.be^
+||dii3.zooplus.bg^
+||dii3.zooplus.ch^
+||dii3.zooplus.co.uk^
+||dii3.zooplus.com^
+||dii3.zooplus.de^
+||dii3.zooplus.dk^
+||dii3.zooplus.es^
+||dii3.zooplus.fi^
+||dii3.zooplus.fr^
+||dii3.zooplus.gr^
+||dii3.zooplus.hr^
+||dii3.zooplus.hu^
+||dii3.zooplus.ie^
+||dii3.zooplus.it^
+||eagle.kudzu.com^
+||electronics.sony-latin.com^
+||emetrics.bose.ca^
+||experiences.simplii.com^
+||flashplayerfeedback.adobe.com^
+||forbes.realclearpolitics.com^
+||fpc.firemountaingems.com^
+||fpcs.firemountaingems.com^
+||fpida.amphi.jp^
+||fpida.bodybook.jp^
+||fpida.cw-x.jp^
+||fpida.successwalk.jp^
+||fpida.une-nana-cool.com^
+||fpida.w-wing.jp^
+||fpida.wacoalholdings.jp^
+||fpida.yue-japan.com^
+||gis.edge45.testandtarget.omniture.com^
+||gms.greatschools.org^
+||guia.edge46.testandtarget.omniture.com^
+||home.usg.com^
+||ig.nadex.com^
+||img.biospace.com^
+||img.healthecareers.com^
+||img.interhome.ch^
+||img.interhome.com^
+||img.interhome.se^
+||img.yemeksepeti.com^
+||incs.get-go.com^
+||incs.marketdistrict.com^
+||info.afl.com.au^
+||info.penrithpanthers.com.au^
+||info.sensis.com.au^
+||info.sharks.com.au^
+||info.telstra.com^
+||info.whitepages.com.au^
+||informatie.communicatie.nn.nl^
+||informatie.mail.nn.nl^
+||infos.anzsmartchoice.com.au^
+||infos.telstra.com^
+||infos.vodafone.com.au^
+||infos.whereis.com^
+||infos.yellow.com.au^
+||insights.academy.com^
+||insights.bodogaffiliate.com^
+||insights.morrismohawk.ca^
+||insights.zinio.com^
+||iqmetrics.faz.net^
+||iqmetrics.handelsblatt.com^
+||iqmetrics.sueddeutsche.de^
+||jinair.nsc.jinair.com^
+||jinair.sc.jinair.com^
+||journeys.journeyed.com^
+||jpaatr.astellas.jp^
+||jptgtr.astellas.jp^
+||kohlermetrics.kohler.com^
+||kohlermetricssecure.kohler.com^
+||l.training-page.worldvision.ca^
+||landing.madridista-free.realmadrid.com^
+||landingpage.emaillpb.adobe.com^
+||lewis.gct.com^
+||live.comunicaciones.jetstereo.com^
+||lms.edge44.testandtarget.omniture.com^
+||lp.b2bmail.adobe.com^
+||lp.club.costacoffee.in^
+||lp.club.costacoffee.pl^
+||lp.demo1.demoamericas275.adobe.com^
+||lp.demo10.demoamericas275.adobe.com^
+||lp.demo11.demoamericas275.adobe.com^
+||lp.demo12.demoamericas275.adobe.com^
+||lp.demo13.demoamericas275.adobe.com^
+||lp.demo14.demoamericas275.adobe.com^
+||lp.demo15.demoamericas275.adobe.com^
+||lp.demo16.demoamericas275.adobe.com^
+||lp.demo17.demoamericas275.adobe.com^
+||lp.demo18.demoamericas275.adobe.com^
+||lp.demo19.demoamericas275.adobe.com^
+||lp.demo2.demoamericas275.adobe.com^
+||lp.demo20.demoamericas275.adobe.com^
+||lp.demo3.demoamericas275.adobe.com^
+||lp.demo4.demoamericas275.adobe.com^
+||lp.demo5.demoamericas275.adobe.com^
+||lp.demo6.demoamericas275.adobe.com^
+||lp.demo7.demoamericas275.adobe.com^
+||lp.demo8.demoamericas275.adobe.com^
+||lp.demo9.demoamericas275.adobe.com^
+||lp.dmillersb.journeyusshared.adobe.com^
+||lp.dmillersbdev.journeyusshared.adobe.com^
+||lp.em.viking.com^
+||lp.email-kpn.cjm.adobe.com^
+||lp.email-lightroom.cjm.adobe.com^
+||lp.email-merkle.cjm.adobe.com^
+||lp.hol1.demoamericas275.adobe.com^
+||lp.hol10.demoamericas275.adobe.com^
+||lp.hol11.demoamericas275.adobe.com^
+||lp.hol12.demoamericas275.adobe.com^
+||lp.hol13.demoamericas275.adobe.com^
+||lp.hol14.demoamericas275.adobe.com^
+||lp.hol15.demoamericas275.adobe.com^
+||lp.hol16.demoamericas275.adobe.com^
+||lp.hol17.demoamericas275.adobe.com^
+||lp.hol18.demoamericas275.adobe.com^
+||lp.hol19.demoamericas275.adobe.com^
+||lp.hol2.demoamericas275.adobe.com^
+||lp.hol20.demoamericas275.adobe.com^
+||lp.hol3.demoamericas275.adobe.com^
+||lp.hol4.demoamericas275.adobe.com^
+||lp.hol5.demoamericas275.adobe.com^
+||lp.hol6.demoamericas275.adobe.com^
+||lp.hol7.demoamericas275.adobe.com^
+||lp.hol8.demoamericas275.adobe.com^
+||lp.jkowalskisb.journeyusshared.adobe.com^
+||lp.jkowalskisbdev.journeyusshared.adobe.com^
+||lp.kkaufmansb.journeyusshared.adobe.com^
+||lp.owarnersb.journeyusshared.adobe.com^
+||lp.owarnersbdev.journeyusshared.adobe.com^
+||lptest.email-mobiledx.cjm.adobe.com^
+||m.communications.ihmvcu.org^
+||m.delltechnologies.com^
+||m.edweek.org^
+||m.olympia.it^
+||m.trb.com^
+||m.univision.com^
+||mailtrustsmetrics.rackspace.com^
+||maling.dn.no^
+||mantis.edge47.testandtarget.omniture.com^
+||matrix.hbo.com^
+||mbox.offermatica.com^
+||mbox.wegmans.com^
+||mbox12e.offermatica.com^
+||mbox3.offermatica.com^
+||mbox4.offermatica.com^
+||mbox5.offermatica.com^
+||mbox9.offermatica.com^
+||mbox9e.offermatica.com^
+||mcdmetric.aaa.com^
+||mcdmetrics.aaa.com^
+||mcdmetrics2.aaa.com^
+||mdws.1stchoicesavings.ca^
+||mdws.advancesavings.ca^
+||mdws.aldergrovecu.ca^
+||mdws.alterna.ca^
+||mdws.assiniboine.mb.ca^
+||mdws.awccu.com^
+||mdws.banquelaurentienne.ca^
+||mdws.battlerivercreditunion.com^
+||mdws.beaubear.ca^
+||mdws.belgianalliancecu.mb.ca^
+||mdws.bergengrencu.com^
+||mdws.biggarcu.com^
+||mdws.blueshorefinancial.com^
+||mdws.bowvalleycu.com^
+||mdws.caissepopclare.com^
+||mdws.canadiandirectfinancial.com^
+||mdws.caseracu.ca^
+||mdws.cccu.ca^
+||mdws.ccunl.ca^
+||mdws.cdcu.com^
+||mdws.chinookcu.com^
+||mdws.chinookfinancial.com^
+||mdws.coastalfinancial.ca^
+||mdws.communitycreditunion.ns.ca^
+||mdws.communityfirst-cu.com^
+||mdws.communitytrust.ca^
+||mdws.comtechcu.com^
+||mdws.conexus.ca^
+||mdws.consolidatedcreditu.com^
+||mdws.copperfin.ca^
+||mdws.cornerstonecu.com^
+||mdws.cua.com^
+||mdws.cvcu.bc.ca^
+||mdws.diamondnorthcu.com^
+||mdws.eaglerivercu.com^
+||mdws.eastcoastcu.ca^
+||mdws.easternedgecu.com^
+||mdws.eccu.ca^
+||mdws.ekccu.com^
+||mdws.encompasscu.ca^
+||mdws.enderbycreditunion.com^
+||mdws.enderbyfinancial.com^
+||mdws.entegra.ca^
+||mdws.envisionfinancial.ca^
+||mdws.estoniancu.com^
+||mdws.firstcu.ca^
+||mdws.firstontariocu.com^
+||mdws.fnbc.ca^
+||mdws.frontlinecu.com^
+||mdws.ganaraskacu.com^
+||mdws.gvccu.com^
+||mdws.heritagecu.ca^
+||mdws.hmecu.com^
+||mdws.icsavings.ca^
+||mdws.implicity.ca^
+||mdws.innovationcu.ca^
+||mdws.inovacreditunion.coop^
+||mdws.integriscu.ca^
+||mdws.interiorsavings.com^
+||mdws.islandsavings.ca^
+||mdws.kawarthacu.com^
+||mdws.lakelandcreditunion.com^
+||mdws.lambtonfinancial.ca^
+||mdws.ldcu.ca^
+||mdws.lecu.ca^
+||mdws.leroycu.ca^
+||mdws.luminusfinancial.com^
+||mdws.memberone.ca^
+||mdws.montaguecreditu.com^
+||mdws.morellcreditu.com^
+||mdws.mvcu.ca^
+||mdws.nelsoncu.com^
+||mdws.newrosscreditunion.ca^
+||mdws.nivervillecu.mb.ca^
+||mdws.nlcu.com^
+||mdws.northerncu.com^
+||mdws.northsave.com^
+||mdws.northsydneycreditunion.com^
+||mdws.noventis.ca^
+||mdws.npscu.ca^
+||mdws.omista.com^
+||mdws.oppacu.com^
+||mdws.pccu.ca^
+||mdws.peacehills.com^
+||mdws.penfinancial.com^
+||mdws.portagecu.mb.ca^
+||mdws.prospera.ca^
+||mdws.provincialcu.com^
+||mdws.provincialemployees.com^
+||mdws.pscu.ca^
+||mdws.revcu.com^
+||mdws.rpcul.com^
+||mdws.samplecu.com^
+||mdws.sdcu.com^
+||mdws.shellcu.com^
+||mdws.southwestcu.com^
+||mdws.sprucecu.bc.ca^
+||mdws.stellamariscreditu.com^
+||mdws.stridecu.ca^
+||mdws.sudburycu.com^
+||mdws.sunrisecu.mb.ca^
+||mdws.sunshineccu.com^
+||mdws.sydneycreditunion.com^
+||mdws.synergycu.ca^
+||mdws.tandia.com^
+||mdws.tcufinancialgroup.com^
+||mdws.teachersplus.ca^
+||mdws.tignishcreditu.com^
+||mdws.ubcu.ca^
+||mdws.ukrainiancu.com^
+||mdws.unitycu.ca^
+||mdws.valleycreditunion.com^
+||mdws.valleyfirst.com^
+||mdws.vancity.com^
+||mdws.vantageone.net^
+||mdws.venturecu.ca^
+||mdws.vermilioncreditunion.com^
+||mdws.victorycreditunion.ca^
+||mdws.visioncu.ca^
+||mdws.wetaskiwincreditunion.com^
+||mdws.weyburncu.ca^
+||mdws.wfcu.ca^
+||mdws.wldcu.com^
+||mdws.wpcu.ca^
+||mdws.wscu.com^
+||mdws.yourcu.com^
+||mea.com^
+||med.aerochambervhc.com^
+||med.androderm.com^
+||med.aptalispharma.com^
+||med.armourthyroid.com^
+||med.asacolhdhcp.com^
+||med.avycaz.com^
+||med.bystolic.com^
+||med.bystolichcp.com^
+||med.bystolicsavings.com^
+||med.canasa.com^
+||med.cerexa.com^
+||med.dalvance.com^
+||med.delzicol.com^
+||med.fetzima.com^
+||med.fetzimahcp.com^
+||med.frx.com^
+||med.frxis.com^
+||med.gelnique.com^
+||med.liletta.com^
+||med.lilettahcp.com^
+||med.linzess.com^
+||med.linzesshcp.com^
+||med.live2thrive.org^
+||med.myandroderm.com^
+||med.namenda.com^
+||med.namendaxrhcp.com^
+||med.namzaric.com^
+||med.rectiv.com^
+||med.saphris.com^
+||med.saphrishcp.com^
+||med.savella.com^
+||med.savellahcp.com^
+||med.teflaro.com^
+||med.viibryd.com^
+||med.viibrydhcp.com^
+||med.vraylar.com^
+||meds.androderm.com^
+||meds.asacolhdhcp.com^
+||meds.avycaz.com^
+||meds.bystolicsavings.com^
+||meds.fetzima.com^
+||meds.liletta.com^
+||meds.lilettahcp.com^
+||meds.linzess.com^
+||meds.linzesshcp.com^
+||meds.rapaflo.com^
+||meds.saphris.com^
+||meds.savella.com^
+||meds.viibryd.com^
+||meds.viibrydhcp.com^
+||met.jasperforge.org^
+||met1.hp.com^
+||met2.hp.com^
+||metc.banfield.com^
+||metric-mobil.aftonbladet.se^
+||metric-nonssl.nomura.co.jp^
+||metric.1035thearrow.com^
+||metric.4imprint.com^
+||metric.advanceautoparts.com^
+||metric.alexandani.com^
+||metric.angieslist.com^
+||metric.armstrong.com^
+||metric.armstrongceilings.com^
+||metric.asos.com^
+||metric.asos.de^
+||metric.atg.se^
+||metric.atlanta.net^
+||metric.australiansuper.com^
+||metric.barclaycardus.com^
+||metric.baylorhealth.com^
+||metric.billmelater.com^
+||metric.bizjournals.com^
+||metric.bostonscientific.com^
+||metric.caixabank.es^
+||metric.carview.co.jp^
+||metric.ch.nissan.co.jp^
+||metric.cort.com^
+||metric.cshgreenwich.org^
+||metric.dertour.de^
+||metric.drsfostersmith.com^
+||metric.duluthtrading.com^
+||metric.emerils.com^
+||metric.fatcatalog.com^
+||metric.foodbusinessnews.net^
+||metric.fxdd.com^
+||metric.genesis.es^
+||metric.golfnow.com^
+||metric.hilton.com^
+||metric.iccu.com^
+||metric.infoworld.com^
+||metric.ing.es^
+||metric.ingdirect.es^
+||metric.its.de^
+||metric.jahnreisen.de^
+||metric.jeppesen.com^
+||metric.kirklands.com^
+||metric.lan.com^
+||metric.langhamhotels.com^
+||metric.lo.movement.com^
+||metric.makemytrip.com^
+||metric.mars.com^
+||metric.marthastewart.com^
+||metric.meatpoultry.com^
+||metric.mein-its.de^
+||metric.melectronics.ch^
+||metric.modcloth.com^
+||metric.morganshotelgroup.com^
+||metric.movement.com^
+||metric.nationalgeographic.com^
+||metric.nissan.be^
+||metric.nissan.co.uk^
+||metric.nissan.cz^
+||metric.nissan.de^
+||metric.nissan.es^
+||metric.nissan.lt^
+||metric.nissan.lv^
+||metric.nissan.nl^
+||metric.nissan.no^
+||metric.nissan.ua^
+||metric.nomura.co.jp^
+||metric.nrma.com.au^
+||metric.nwsource.com^
+||metric.olivegarden.com^
+||metric.optum.com^
+||metric.petinsurance.com^
+||metric.polyone.com^
+||metric.publicstorage.com^
+||metric.redlobster.com^
+||metric.rent.com^
+||metric.restockit.com^
+||metric.samsclub.com^
+||metric.schooloutfitters.com^
+||metric.schwab.com^
+||metric.schwabinstitutional.com^
+||metric.sciencemag.org^
+||metric.sdl.com^
+||metric.seetorontonow.com^
+||metric.serena.com^
+||metric.shop.com^
+||metric.spencersonline.com^
+||metric.superpages.com^
+||metric.thecapitalgrille.com^
+||metric.timewarnercable.com^
+||metric.toyotacertified.com^
+||metric.trulia.com^
+||metric.tsite.jp^
+||metric.vodacom.co.za^
+||metric.vodafone.com.eg^
+||metric.vodafone.hu^
+||metric.volkswagen.com^
+||metric.volkswagen.de^
+||metric.volkswagen.ie^
+||metric.wilsonelectronics.com^
+||metric.worldcat.org^
+||metric.yardhouse.com^
+||metric.yellowpages.com^
+||metric.yp.com^
+||metricas.agzero.com.br^
+||metrics-ieeexplore.ieee.org^
+||metrics-target.siriusxm.com^
+||metrics.1800contacts.com^
+||metrics.24hourfitness.com^
+||metrics.28degreescard.com.au^
+||metrics.3838.com^
+||metrics.3m.com^
+||metrics.48.ie^
+||metrics.aa.com^
+||metrics.aarp.org^
+||metrics.abbott.co.in^
+||metrics.abbott.com^
+||metrics.abbott^
+||metrics.abbottfamily.co.id^
+||metrics.abbvie.com^
+||metrics.abercrombie.com^
+||metrics.academy.com^
+||metrics.acbj.com^
+||metrics.actemra.com^
+||metrics.actemrahcp.com^
+||metrics.activase.com^
+||metrics.active.com^
+||metrics.activecommunities.com^
+||metrics.adobeprimetime.com^
+||metrics.aeo.com^
+||metrics.aetnamedicare.com^
+||metrics.affymetrix.com^
+||metrics.agilent.com^
+||metrics.allaboutyou.com^
+||metrics.allegisgroup.com^
+||metrics.alpo.com^
+||metrics.amd.com^
+||metrics.americanblinds.com^
+||metrics.amersports.com^
+||metrics.angieslist.com^
+||metrics.ansys.com^
+||metrics.apartments.com^
+||metrics.armstrong.com^
+||metrics.assurances-bnc.ca^
+||metrics.asumag.com^
+||metrics.austar.com.au^
+||metrics.australiansuper.com^
+||metrics.avnet.com^
+||metrics.babycenter.de^
+||metrics.babycenter.fr^
+||metrics.babycentre.co.uk^
+||metrics.babynes.ch^
+||metrics.baitoru-id.com^
+||metrics.baitoru.com^
+||metrics.baitorupro.com^
+||metrics.bakeryandsnacks.com^
+||metrics.bakeryawards.co.uk^
+||metrics.bakeryinfo.co.uk^
+||metrics.bananarepublic.eu^
+||metrics.bancobmg.com.br^
+||metrics.bankatfirst.com^
+||metrics.bankia.es^
+||metrics.bankofamerica.com^
+||metrics.banksa.com.au^
+||metrics.bankwest.com.au^
+||metrics.barclaycardus.com^
+||metrics.barclays.co.uk^
+||metrics.base.be^
+||metrics.bayer.com^
+||metrics.bayer.us^
+||metrics.bbva.mx^
+||metrics.bbvaleasing.mx^
+||metrics.bcbsks.com^
+||metrics.bcbsnc.com^
+||metrics.bcbsnd.com^
+||metrics.be.carrefour.eu^
+||metrics.beachbody.com^
+||metrics.bestandless.com.au^
+||metrics.bestrecipes.com.au^
+||metrics.bet.com^
+||metrics.beveragedaily.com^
+||metrics.bhf.org.uk^
+||metrics.billmelater.com^
+||metrics.binge.com.au^
+||metrics.biocompare.com^
+||metrics.biooncology.com^
+||metrics.biopharma-reporter.com^
+||metrics.bitbang.com^
+||metrics.bizjournals.com^
+||metrics.bkb.ch^
+||metrics.blackbaud.com^
+||metrics.blackrock.com^
+||metrics.bmc.com^
+||metrics.bmo.com^
+||metrics.bmwusa.com^
+||metrics.bncollege.com^
+||metrics.bnymellon.com^
+||metrics.boats.com^
+||metrics.bobthebuilder.com^
+||metrics.bodyandsoul.com.au^
+||metrics.boehringer-ingelheim.es^
+||metrics.boozallen.com^
+||metrics.boq.com.au^
+||metrics.borgatapoker.com^
+||metrics.boscovs.com^
+||metrics.bose.ca^
+||metrics.bose.co.jp^
+||metrics.bose.com^
+||metrics.bostonglobe.com^
+||metrics.bostonscientific.com^
+||metrics.bridgestoneamericas.com^
+||metrics.brighthorizons.com^
+||metrics.britishgas.co.uk^
+||metrics.brocade.com^
+||metrics.bt.com.au^
+||metrics.bt.com^
+||metrics.buildasign.com^
+||metrics.bupa.com.au^
+||metrics.business.comcast.com^
+||metrics.buyersedge.com.au^
+||metrics.buysearchsell.com.au^
+||metrics.caesars.com^
+||metrics.cairnspost.com.au^
+||metrics.caixabank.es^
+||metrics.calbaptist.edu^
+||metrics.calgary.ca^
+||metrics.calia.com^
+||metrics.calimera.com^
+||metrics.calvinklein.com^
+||metrics.calvinklein.us^
+||metrics.calwater.com^
+||metrics.camperboerse.com^
+||metrics.cancer.gov^
+||metrics.capella.edu^
+||metrics.capitalone.com^
+||metrics.caracoltv.com^
+||metrics.caranddriver.com^
+||metrics.cardizemla.com^
+||metrics.care.com^
+||metrics.career-education.monster.com^
+||metrics.carfax.com^
+||metrics.carnival.co.uk^
+||metrics.carnival.com.au^
+||metrics.carnival.com^
+||metrics.carphonewarehouse.com^
+||metrics.carpricesecrets.com^
+||metrics.cars.com^
+||metrics.carters.com^
+||metrics.cartoonnetworkla.com^
+||metrics.casinosplendido.com^
+||metrics.casio.com.tw^
+||metrics.catalog.usmint.gov^
+||metrics.cathflo.com^
+||metrics.cbc.ca^
+||metrics.cbc.youtube.mercedes-benz.com^
+||metrics.cbn.com^
+||metrics.ccma.cat^
+||metrics.cdiscount.com^
+||metrics.cedars-sinai.org^
+||metrics.cellcept.com^
+||metrics.census.gov^
+||metrics.centurylink.com^
+||metrics.cgu.com.au^
+||metrics.channelfutures.com^
+||metrics.chapters.indigo.ca^
+||metrics.chatrwireless.com^
+||metrics.chghealthcare.com^
+||metrics.chicagobusiness.com^
+||metrics.chron.com^
+||metrics.chrysler.com^
+||metrics.churchill.com^
+||metrics.ci.model.plymouthrocknj.com^
+||metrics.cigarsinternational.com^
+||metrics.citi.com^
+||metrics.citibank.com.my^
+||metrics.citibank.com.ph^
+||metrics.citibank.com^
+||metrics.citimortgage.com^
+||metrics.citizensbank.com^
+||metrics.claires.com^
+||metrics.cnb.com^
+||metrics.cnn.com^
+||metrics.coachfactory.com^
+||metrics.coalesse.com^
+||metrics.codesports.com.au^
+||metrics.columbia.com^
+||metrics.combinedinsurance.com^
+||metrics.comcast.com^
+||metrics.comenity.net^
+||metrics.commonclaimsmistakesvideo.com^
+||metrics.company.co.uk^
+||metrics.comparethemarket.com^
+||metrics.confectionerynews.com^
+||metrics.consumerreports.org^
+||metrics.contractingbusiness.com^
+||metrics.conveniencestore.co.uk^
+||metrics.cort.com^
+||metrics.corus.ca^
+||metrics.cosmeticsdesign-asia.com^
+||metrics.cosmeticsdesign-europe.com^
+||metrics.cosmeticsdesign.com^
+||metrics.cosmopolitan.co.uk^
+||metrics.cosstores.com^
+||metrics.costco.ca^
+||metrics.costco.com^
+||metrics.costcobusinessdelivery.com^
+||metrics.cotellic.com^
+||metrics.cottages.com^
+||metrics.countryfinancial.com^
+||metrics.couriermail.com.au^
+||metrics.coventryhealthcare.com^
+||metrics.crainsnewyork.com^
+||metrics.crateandbarrel.com^
+||metrics.cru.org^
+||metrics.csi.ca^
+||metrics.csmonitor.com^
+||metrics.css.ch^
+||metrics.csu.edu.au^
+||metrics.ctv.ca^
+||metrics.currys.co.uk^
+||metrics.cvs.com^
+||metrics.cytivalifesciences.com^
+||metrics.dailystrength.org^
+||metrics.dailytelegraph.com.au^
+||metrics.dairyreporter.com^
+||metrics.damart.fr^
+||metrics.dandh.ca^
+||metrics.dandh.com^
+||metrics.datapipe.com^
+||metrics.dcshoes.com^
+||metrics.deakin.edu.au^
+||metrics.defenseone.com^
+||metrics.delicious.com.au^
+||metrics.delta.com^
+||metrics.delwebb.com^
+||metrics.dentalcompare.com^
+||metrics.depakoteer.com^
+||metrics.dertour-reisebuero.de^
+||metrics.dertour.de^
+||metrics.despegar.com^
+||metrics.dhc.co.jp^
+||metrics.dickssportinggoods.com^
+||metrics.diningdough.com^
+||metrics.directtv.com^
+||metrics.directv.com^
+||metrics.discover.com^
+||metrics.discovertrk.com^
+||metrics.dish.co^
+||metrics.dish.com^
+||metrics.distrelec.ch^
+||metrics.divosta.com^
+||metrics.diynetwork.com^
+||metrics.dockers.com^
+||metrics.dog.com^
+||metrics.dollar.com^
+||metrics.dollargeneral.com^
+||metrics.dreamvacationweek.com^
+||metrics.drklein.de^
+||metrics.droidsc.natwest.com^
+||metrics.droidsc.rbs.co.uk^
+||metrics.drsfostersmith.com^
+||metrics.drugpricinglaw.com^
+||metrics.duluthtrading.com^
+||metrics.dunkindonuts.com^
+||metrics.e-abbott.com^
+||metrics.edb.gov.sg^
+||metrics.eddiebauer.com^
+||metrics.eddiev.com^
+||metrics.edgepark.com^
+||metrics.ee.co.uk^
+||metrics.egencia.ae^
+||metrics.egencia.be^
+||metrics.egencia.ca^
+||metrics.egencia.ch^
+||metrics.egencia.cn^
+||metrics.egencia.co.in^
+||metrics.egencia.co.nz^
+||metrics.egencia.co.uk^
+||metrics.egencia.co.za^
+||metrics.egencia.com.au^
+||metrics.egencia.com.hk^
+||metrics.egencia.com.sg^
+||metrics.egencia.com.tr^
+||metrics.egencia.com^
+||metrics.egencia.cz^
+||metrics.egencia.de^
+||metrics.egencia.dk^
+||metrics.egencia.es^
+||metrics.egencia.fi^
+||metrics.egencia.fr^
+||metrics.egencia.ie^
+||metrics.egencia.it^
+||metrics.egencia.nl^
+||metrics.egencia.no^
+||metrics.egencia.pl^
+||metrics.egencia.se^
+||metrics.ehc.com^
+||metrics.ehealthinsurance.com^
+||metrics.eiu.com^
+||metrics.eki-net.com^
+||metrics.el-mundo.net^
+||metrics.elal.com^
+||metrics.electronicdesign.com^
+||metrics.elle.co.jp^
+||metrics.ellechina.com^
+||metrics.eloan.com^
+||metrics.emicizumabinfo.com^
+||metrics.ems.com^
+||metrics.enspryng-hcp.com^
+||metrics.enspryng.com^
+||metrics.ereplacementparts.com^
+||metrics.esignal.com^
+||metrics.evite.com^
+||metrics.evrysdi.com^
+||metrics.ewstv.com^
+||metrics.experts-exchange.com^
+||metrics.extraespanol.warnerbros.com^
+||metrics.extratv.warnerbros.com^
+||metrics.familiaynutricion.com.co^
+||metrics.fancl.co.jp^
+||metrics.farmprogressdaily.com^
+||metrics.farmshopanddelishow.co.uk^
+||metrics.fcsamerica.com^
+||metrics.feednavigator.com^
+||metrics.feedstuffsfoodlink.com^
+||metrics.figis.com^
+||metrics.flexshares.com^
+||metrics.fnac.com^
+||metrics.foodanddrinkexpo.co.uk^
+||metrics.foodex.co.uk^
+||metrics.foodmanufacture.co.uk^
+||metrics.foodnavigator-asia.com^
+||metrics.foodnavigator-latam.com^
+||metrics.foodnavigator-usa.com^
+||metrics.foodnavigator.com^
+||metrics.foodnetwork.com^
+||metrics.forbestravelguide.com^
+||metrics.forecourttrader.co.uk^
+||metrics.fortune.com^
+||metrics.fressnapf.ch^
+||metrics.friskies.com^
+||metrics.ftd.com^
+||metrics.galicia.ar^
+||metrics.gap.com^
+||metrics.genesis.es^
+||metrics.gengraf.com^
+||metrics.genzyme.com^
+||metrics.globalgolf.com^
+||metrics.globe.com.ph^
+||metrics.glucerna.net^
+||metrics.goalfinancial.net^
+||metrics.gobank.com^
+||metrics.goinggoing.com^
+||metrics.goldbook.ca^
+||metrics.goldcoastbulletin.com.au^
+||metrics.golfgalaxy.com^
+||metrics.gomedigap.com^
+||metrics.goodhousekeeping.co.uk^
+||metrics.gordonsjewelers.com^
+||metrics.govexec.com^
+||metrics.gq.com.au^
+||metrics.gracobaby.com^
+||metrics.grandandtoy.com^
+||metrics.greatland.com^
+||metrics.greendot.com^
+||metrics.greenflag.com^
+||metrics.greenies.com^
+||metrics.groupama.fr^
+||metrics.guidancesoftware.com^
+||metrics.gvb.ch^
+||metrics.handmark.com^
+||metrics.harborfreight.com^
+||metrics.harley-davidson.com^
+||metrics.hatarako.net^
+||metrics.hayesandjarvis.co.uk^
+||metrics.hbogo.com^
+||metrics.hbogola.com^
+||metrics.hbr.org^
+||metrics.hbs.edu^
+||metrics.hctra.org^
+||metrics.health.com^
+||metrics.heathrow.com^
+||metrics.heathrowexpress.com^
+||metrics.helpguide.sony.net^
+||metrics.hennessy.com^
+||metrics.her2treatment.com^
+||metrics.heraldsun.com.au^
+||metrics.herbalife.com^
+||metrics.herceptin.com^
+||metrics.herceptinhylecta.com^
+||metrics.hgtv.com^
+||metrics.hitentertainment.com^
+||metrics.hm.com^
+||metrics.hmhco.com^
+||metrics.hollandamerica.com^
+||metrics.hollisterco.com^
+||metrics.hollywood.com^
+||metrics.homeadvisor.com^
+||metrics.homedecorators.com^
+||metrics.hoovers.com^
+||metrics.hrblock.com^
+||metrics.hsamuel.co.uk^
+||metrics.hubert.com^
+||metrics.humirapro.com^
+||metrics.huntingtonsdiseasehcp.com^
+||metrics.hydraulicspneumatics.com^
+||metrics.hyundaiusa.com^
+||metrics.ice.gov^
+||metrics.iconfitness.com^
+||metrics.ifc.org^
+||metrics.iij.ad.jp^
+||metrics.iinet.net.au^
+||metrics.ikea.com^
+||metrics.illinois.gov^
+||metrics.industryweek.com^
+||metrics.inet.fi^
+||metrics.infiniti.com^
+||metrics.infinitiusa.com^
+||metrics.infomedics.it^
+||metrics.infoworld.com^
+||metrics.ing.es^
+||metrics.ingdirect.es^
+||metrics.ingredion.com^
+||metrics.inkcartridges.com^
+||metrics.insider.hagerty.com^
+||metrics.instyle.com^
+||metrics.insurancesaver.com^
+||metrics.intercall.com^
+||metrics.interestfree.com.au^
+||metrics.interhyp.de^
+||metrics.intermountainhealthcare.org^
+||metrics.intervalworld.com^
+||metrics.interweave.com^
+||metrics.investmentnews.com^
+||metrics.ionos.at^
+||metrics.ionos.ca^
+||metrics.ionos.co.uk^
+||metrics.ionos.com^
+||metrics.ionos.de^
+||metrics.ionos.es^
+||metrics.ionos.fr^
+||metrics.ionos.it^
+||metrics.ionos.mx^
+||metrics.iossc.natwest.com^
+||metrics.iossc.rbs.co.uk^
+||metrics.ireport.com^
+||metrics.its.de^
+||metrics.ittoolbox.com^
+||metrics.ivivva.com^
+||metrics.iwakifc.com^
+||metrics.jahnreisen.de^
+||metrics.jamestowndistributors.com^
+||metrics.jeppesen.com^
+||metrics.jetblue.com^
+||metrics.jm-lexus.com^
+||metrics.joefresh.com^
+||metrics.johnhancock.com^
+||metrics.judgemathistv.warnerbros.com^
+||metrics.juiceplus.com^
+||metrics.jungheinrich-profishop.co.uk^
+||metrics.kadcyla.com^
+||metrics.kaercher.com^
+||metrics.kao.com^
+||metrics.kawai-juku.ac.jp^
+||metrics.kayosports.com.au^
+||metrics.kbb.com^
+||metrics.kempinski.com^
+||metrics.kennethcole.com^
+||metrics.keno.com.au^
+||metrics.kenwood.com^
+||metrics.keysight.com^
+||metrics.kia.com^
+||metrics.kidsnews.com.au^
+||metrics.kidspot.com.au^
+||metrics.kimberly-clark.com^
+||metrics.kindercare.com^
+||metrics.kipling-usa.com^
+||metrics.kirklands.com^
+||metrics.knowyourhdl.com^
+||metrics.knowyourtrigs.com^
+||metrics.kone.ae^
+||metrics.kone.at^
+||metrics.kone.be^
+||metrics.kone.ca^
+||metrics.kone.ch^
+||metrics.kone.co.ke^
+||metrics.kone.co.nz^
+||metrics.kone.co.uk^
+||metrics.kone.co.za^
+||metrics.kone.com.au^
+||metrics.kone.com.cy^
+||metrics.kone.com.tr^
+||metrics.kone.com^
+||metrics.kone.cz^
+||metrics.kone.de^
+||metrics.kone.dk^
+||metrics.kone.ee^
+||metrics.kone.fi^
+||metrics.kone.fr^
+||metrics.kone.gr^
+||metrics.kone.hk^
+||metrics.kone.hu^
+||metrics.kone.ie^
+||metrics.kone.in^
+||metrics.kone.is^
+||metrics.kone.it^
+||metrics.kone.lv^
+||metrics.kone.mx^
+||metrics.kone.nl^
+||metrics.kone.no^
+||metrics.kone.ph^
+||metrics.kone.pl^
+||metrics.kone.pt^
+||metrics.kone.ru^
+||metrics.kone.se^
+||metrics.kone.sk^
+||metrics.kone.tw^
+||metrics.kristinehamn.se^
+||metrics.ktvb.com^
+||metrics.kumon.com^
+||metrics.kunilexusofcoloradosprings.com^
+||metrics.lacaixa.es^
+||metrics.lacounty.gov^
+||metrics.ladbrokes.be^
+||metrics.lafourchette.com^
+||metrics.lambweston.com^
+||metrics.langhamhotels.com^
+||metrics.laredoute.fr^
+||metrics.latitudefinancial.com.au^
+||metrics.latitudepay.com^
+||metrics.learningcurve.com^
+||metrics.levi.com^
+||metrics.lexus.com^
+||metrics.lexusofqueens.com^
+||metrics.libertymutual.com^
+||metrics.lifetime.life^
+||metrics.liverpool.com.mx^
+||metrics.lmtonline.com^
+||metrics.loblaws.ca^
+||metrics.lolesports.com^
+||metrics.lorealparisusa.com^
+||metrics.lovefilm.com^
+||metrics.lowes.com^
+||metrics.lucentis.com^
+||metrics.lululemon.ch^
+||metrics.lululemon.cn^
+||metrics.lululemon.co.jp^
+||metrics.lululemon.co.kr^
+||metrics.lululemon.co.nz^
+||metrics.lululemon.co.uk^
+||metrics.lululemon.com.au^
+||metrics.lululemon.com.hk^
+||metrics.lululemon.com^
+||metrics.lululemon.de^
+||metrics.lululemon.fr^
+||metrics.lww.com^
+||metrics.m.abbottnutrition.com^
+||metrics.madeformums.com^
+||metrics.maestrocard.com^
+||metrics.makemytrip.com^
+||metrics.mandg.com^
+||metrics.manheim.com^
+||metrics.marksandspencer.com^
+||metrics.marksandspencer.eu^
+||metrics.marksandspencer.fr^
+||metrics.marksandspencerlondon.com^
+||metrics.marrie^
+||metrics.mars.com^
+||metrics.marthastewartweddings.com^
+||metrics.mastercardadvisors.com^
+||metrics.mastercardintl.com^
+||metrics.masters.com^
+||metrics.maxgo.com^
+||metrics.menshealth.co.uk^
+||metrics.mhn.com^
+||metrics.mhngs.com^
+||metrics.mibcookies.rbs.com^
+||metrics.midwestliving.com^
+||metrics.miketheknight.com^
+||metrics.mindshareworld.com^
+||metrics.miniusa.com^
+||metrics.mobilebanking.scotiabank.com^
+||metrics.modcloth.com^
+||metrics.moen.com^
+||metrics.monclick.it^
+||metrics.moosejaw.com^
+||metrics.morganshotelgroup.com^
+||metrics.morningstar.com^
+||metrics.multiview.com^
+||metrics.myclubwyndham.com^
+||metrics.mypartnersincare.com^
+||metrics.nationalgeographic.com^
+||metrics.nationaljournal.com^
+||metrics.natmags.co.uk^
+||metrics.nba.com^
+||metrics.necn.com^
+||metrics.nestlepurinacareers.com^
+||metrics.newbalance.co.uk^
+||metrics.newport.com^
+||metrics.newportlexus.com^
+||metrics.nike.net^
+||metrics.nikonusa.com^
+||metrics.nintendo.com^
+||metrics.nissan.es^
+||metrics.nissan.lt^
+||metrics.nissan.lv^
+||metrics.nissan.no^
+||metrics.nmfn.com^
+||metrics.nn.nl^
+||metrics.northernnewengland.aaa.com^
+||metrics.northerntrust.com^
+||metrics.northwesternmutual.com^
+||metrics.norvir.com^
+||metrics.nowtv.com^
+||metrics.nrma.com.au^
+||metrics.ntnews.com.au^
+||metrics.nutrisystem.com^
+||metrics.nutropin.com^
+||metrics.nvidia.com^
+||metrics.nwsource.com^
+||metrics.nxtbook.com^
+||metrics.nycgo.com^
+||metrics.nylexpress.com^
+||metrics.o2online.de^
+||metrics.oanda.com^
+||metrics.ocrelizumabinfo.com^
+||metrics.ocrevus.com^
+||metrics.octanner.com^
+||metrics.ogilvy.com^
+||metrics.olgaintimates.com^
+||metrics.omniture.com^
+||metrics.onecall.com^
+||metrics.optimum.net^
+||metrics.optum.com^
+||metrics.oreilly.com^
+||metrics.oreillyauto.com^
+||metrics.orlandofuntickets.com^
+||metrics.pacsun.com^
+||metrics.pagoda.com^
+||metrics.panasonic.biz^
+||metrics.panasonic.jp^
+||metrics.pandora.com^
+||metrics.panerabread.com^
+||metrics.paperdirect.com^
+||metrics.parcelforce.com^
+||metrics.patientsatheart.com^
+||metrics.payback.de^
+||metrics.paysafecard.com^
+||metrics.pcrichard.com^
+||metrics.pebblebeach.com^
+||metrics.penny-reisen.de^
+||metrics.pennymacusa.com^
+||metrics.penton.com^
+||metrics.people.com^
+||metrics.peoplescourt.warnerbros.com^
+||metrics.pepboys.com^
+||metrics.performgroup.com^
+||metrics.perjeta.com^
+||metrics.petchow.net^
+||metrics.petco.com^
+||metrics.petinsurance.com^
+||metrics.pgi.com^
+||metrics.pgs.com^
+||metrics.phoenix.edu^
+||metrics.photos.com^
+||metrics.pinkribbonbottle.com^
+||metrics.pisces-penton.com^
+||metrics.plusrewards.com.au^
+||metrics.pmis.abbott.com^
+||metrics.politico.com^
+||metrics.politico.eu^
+||metrics.polivy.com^
+||metrics.popularwoodworking.com^
+||metrics.portal.roche.de^
+||metrics.post-gazette.com^
+||metrics.postoffice.co.uk^
+||metrics.ppt.org^
+||metrics.prd.base.be^
+||metrics.prd.telenet.be^
+||metrics.premierinn.com^
+||metrics.priceless.com^
+||metrics.princess.com^
+||metrics.privilege.com^
+||metrics.professionnels.roche.fr^
+||metrics.proquest.com^
+||metrics.protectmyid.com^
+||metrics.proximus.be^
+||metrics.prudential.com^
+||metrics.psoriasisuncovered.com^
+||metrics.publiclands.com^
+||metrics.publicstorage.com^
+||metrics.pudahuel.cl^
+||metrics.pulmozyme.com^
+||metrics.puma.com^
+||metrics.purina-petcare.com^
+||metrics.purina.ca^
+||metrics.purinamills.com^
+||metrics.purinastore.com^
+||metrics.purinaveterinarydiets.com^
+||metrics.puritan.com^
+||metrics.pvh.com^
+||metrics.qatarairways.com^
+||metrics.questrade.com^
+||metrics.quiksilver.com^
+||metrics.quill.com^
+||metrics.qvc.jp^
+||metrics.radissonhotels.com^
+||metrics.rainbowmagic.co.uk^
+||metrics.ralphlauren.com^
+||metrics.ralphlauren.fr^
+||metrics.rarediseasesignup.com^
+||metrics.rbcgam.com^
+||metrics.rci.com^
+||metrics.rcsmetrics.it^
+||metrics.realclearpolitics.com^
+||metrics.reallymoving.com^
+||metrics.realpropertymgt.com^
+||metrics.realsimple.com^
+||metrics.realtor.com^
+||metrics.refinitiv.com^
+||metrics.regal.es^
+||metrics.regions.com^
+||metrics.reliant.com^
+||metrics.renesas.com^
+||metrics.renfe.com^
+||metrics.rent.com^
+||metrics.reseguiden.se^
+||metrics.restaurantonline.co.uk^
+||metrics.restockit.com^
+||metrics.retail-week.com^
+||metrics.retailmenot.com^
+||metrics.rethinksma.com^
+||metrics.rewe-reisen.de^
+||metrics.rewe.de^
+||metrics.richmondamerican.com^
+||metrics.rituxan.com^
+||metrics.rituxanforgpampa-hcp.com^
+||metrics.rituxanforpv.com^
+||metrics.rituxanforra-hcp.com^
+||metrics.rituxanforra.com^
+||metrics.rituxanhycela.com^
+||metrics.robeco.com^
+||metrics.roche-applied-science.com^
+||metrics.roche.de^
+||metrics.rochehelse.no^
+||metrics.rochenet.pt^
+||metrics.rockandpop.cl^
+||metrics.rolex.cn^
+||metrics.rolex.com^
+||metrics.rotorooter.com^
+||metrics.roxy.com^
+||metrics.royalcaribbean.com^
+||metrics.royalmail.com^
+||metrics.royalmailgroup.com^
+||metrics.rozlytrek.com^
+||metrics.rydahls.se^
+||metrics.samsclub.com^
+||metrics.samsunglife.com^
+||metrics.sap.com^
+||metrics.sasktel.com^
+||metrics.savethechildren.org.uk^
+||metrics.sbs.com.au^
+||metrics.sce.com^
+||metrics.schooloutfitters.com^
+||metrics.schwans.com^
+||metrics.sciencemag.org^
+||metrics.scopus.com^
+||metrics.scottishpower.co.uk^
+||metrics.sdcvisit.com^
+||metrics.seabourn.com^
+||metrics.seat.com^
+||metrics.seloger.com^
+||metrics.sensai-cosmetics.com^
+||metrics.sentido.com^
+||metrics.sephora.com^
+||metrics.sephora.fr^
+||metrics.sephora.it^
+||metrics.sfchronicle.com^
+||metrics.sfr.fr^
+||metrics.sgic.com.au^
+||metrics.sgproof.com^
+||metrics.shangri-la.com^
+||metrics.shannons.com.au^
+||metrics.sharecare.com^
+||metrics.shinseibank.com^
+||metrics.shoedazzle.com^
+||metrics.shop.superstore.ca^
+||metrics.shopjapan.co.jp^
+||metrics.shopmyexchange.com^
+||metrics.showtime.com^
+||metrics.si.com^
+||metrics.similac.com.tr^
+||metrics.siriusxm.com^
+||metrics.sj1.omniture.com^
+||metrics.sjo.omniture.com^
+||metrics.skandia.se^
+||metrics.skipton.co.uk^
+||metrics.skistar.com^
+||metrics.sky.com^
+||metrics.sky.it^
+||metrics.skynews.com.au^
+||metrics.slate.com^
+||metrics.sling.com^
+||metrics.smbcnikko.co.jp^
+||metrics.smedia.com.au^
+||metrics.snapfish.ca^
+||metrics.snapfish.ch^
+||metrics.solarwinds.com^
+||metrics.solaseedair.jp^
+||metrics.solinst.com^
+||metrics.somas.se^
+||metrics.sony.com^
+||metrics.sony.jp^
+||metrics.sonyericsson.com^
+||metrics.southeastfarmpress.com^
+||metrics.spdrs.com^
+||metrics.speedousa.com^
+||metrics.spencersonline.com^
+||metrics.spirithalloween.com^
+||metrics.splol.com^
+||metrics.srpnet.com^
+||metrics.standardandpoors.com^
+||metrics.stanfordhealthcare.org^
+||metrics.staples.com.au^
+||metrics.staples.com^
+||metrics.starhub.com^
+||metrics.startribune.com^
+||metrics.steelcase.com^
+||metrics.steinhafels.com^
+||metrics.stockhead.com.au^
+||metrics.store.irobot.com^
+||metrics.striderite.com^
+||metrics.strokeawareness.com^
+||metrics.stubhub.co.uk^
+||metrics.stubhub.de^
+||metrics.stubhub.fr^
+||metrics.stwater.co.uk^
+||metrics.suncorpbank.com.au^
+||metrics.sungard.com^
+||metrics.sunlife.com^
+||metrics.sunpowercorp.com^
+||metrics.supercuts.com^
+||metrics.superpages.com^
+||metrics.support.e-abbott.com^
+||metrics.svd.se^
+||metrics.swinburne.edu.c.com^
+||metrics.tagesspiegel.de^
+||metrics.tasteline.com^
+||metrics.tbs.com^
+||metrics.tcm.com^
+||metrics.teachforamerica.org^
+||metrics.teambeachbody.com^
+||metrics.teamviewer.com^
+||metrics.telenor.se^
+||metrics.tescobank.com^
+||metrics.teveten-us.com^
+||metrics.thechronicle.com.au^
+||metrics.thedailybeast.com^
+||metrics.thefa.com^
+||metrics.thegrocer.co.uk^
+||metrics.theomnichannelconference.co.uk^
+||metrics.therestaurantconference.co.uk^
+||metrics.theworlds50best.com^
+||metrics.thingsremembered.com^
+||metrics.thomasandfriends.com^
+||metrics.thomastrackmaster.com^
+||metrics.thrifty.com^
+||metrics.tidycats.com^
+||metrics.timberland.com^
+||metrics.timberland.de^
+||metrics.timberland.es^
+||metrics.timberland.fr^
+||metrics.timberland.it^
+||metrics.timeinc.net^
+||metrics.tips.com.au^
+||metrics.tlc.com^
+||metrics.tntdrama.com^
+||metrics.tollbrothers.com^
+||metrics.tomsofmaine.com^
+||metrics.toolbox.com^
+||metrics.top50boutiquehotels.com^
+||metrics.top50cocktailbars.com^
+||metrics.top50gastropubs.com^
+||metrics.toptenreviews.com^
+||metrics.toryburch.com^
+||metrics.toyotacertificados.com^
+||metrics.toyotacertified.com^
+||metrics.toysrus.com^
+||metrics.trammellcrow.com^
+||metrics.travelodge.com^
+||metrics.trovix.com^
+||metrics.tsb.co.uk^
+||metrics.tulsaworld.com^
+||metrics.turn.com^
+||metrics.turner.com^
+||metrics.tv2.dk^
+||metrics.tyrashow.warnerbros.com^
+||metrics.ubi.com^
+||metrics.uhc.com^
+||metrics.ulsterbank.com^
+||metrics.unipolsai.it^
+||metrics.united-internet.de^
+||metrics.ups.com^
+||metrics.us.levi.com^
+||metrics.us.playstation.com^
+||metrics.usana.com^
+||metrics.usbank.com^
+||metrics.usmint.gov^
+||metrics.usopen.org^
+||metrics.valuecityfurniture.com^
+||metrics.vanquis.co.uk^
+||metrics.vans.com.au^
+||metrics.vcm.com^
+||metrics.venclextahcp.com^
+||metrics.vermontcountrystore.com^
+||metrics.vero.co.nz^
+||metrics.viega.de^
+||metrics.vikingline.ee^
+||metrics.virginaustralia.com^
+||metrics.virginmedia.com^
+||metrics.virtualservers.com^
+||metrics.vision-systems.com^
+||metrics.visitflorida.com^
+||metrics.vitas.com^
+||metrics.vividseats.com^
+||metrics.vocus.com^
+||metrics.vodafone.co.uk^
+||metrics.vodafone.com.eg^
+||metrics.vodafone.com.tr^
+||metrics.vodafone.es^
+||metrics.vodafone.hu^
+||metrics.vodafone.ro^
+||metrics.vogue.com.au^
+||metrics.volusion.com^
+||metrics.vonage.co.uk^
+||metrics.vonage.com^
+||metrics.vrst.com^
+||metrics.vueling.com^
+||metrics.vw.com^
+||metrics.vwfs.com^
+||metrics.vwfs.cz^
+||metrics.vwfs.fr^
+||metrics.vwfs.ie^
+||metrics.vwfs.mx^
+||metrics.vwfs.pl^
+||metrics.vwfs.pt^
+||metrics.wacken.com^
+||metrics.walgreens.com^
+||metrics.walmart.com^
+||metrics.walmartmoneycard.com^
+||metrics.walmartstores.com^
+||metrics.washingtonpost.com^
+||metrics.watch.nba.com^
+||metrics.watlow.com^
+||metrics.wealthmanagement.com^
+||metrics.weeklytimesnow.com.au^
+||metrics.westernunion.com^
+||metrics.westgateresorts.com^
+||metrics.westmarine.com^
+||metrics.wgu.edu^
+||metrics.when.com^
+||metrics.whimn.com.au^
+||metrics.wildadventures.com^
+||metrics.william-reed.com^
+||metrics.williamhill.com^
+||metrics.williams-sonoma.com^
+||metrics.wingatehotels.com^
+||metrics.winsc.natwest.com^
+||metrics.winsc.rbs.co.uk^
+||metrics.wm.com^
+||metrics.wmg.com^
+||metrics.wnba.com^
+||metrics.wolterskluwer.com^
+||metrics.womansday.com^
+||metrics.workforce.com^
+||metrics.workfront.com^
+||metrics.workingadvantage.com^
+||metrics.worldbank.org^
+||metrics.worldmarket.com^
+||metrics.worlds50bestbars.com^
+||metrics.worldsbestsommeliersselection.com^
+||metrics.worldsbestvineyards.com^
+||metrics.worldsteakchallenge.com^
+||metrics.worldvision.org^
+||metrics.wu.com^
+||metrics.www.apus.edu^
+||metrics.wyndhamtrips.com^
+||metrics.xfinity.com^
+||metrics.xofluza.com^
+||metrics.xolairhcp.com^
+||metrics.ybs.co.uk^
+||metrics.yelloh.com^
+||metrics.yellowbook.com^
+||metrics.yellowpages.com^
+||metrics.youandyourwedding.co.uk^
+||metrics.zagg.com^
+||metrics.zales.com^
+||metrics1.citi.com^
+||metrics1.citibank.com^
+||metrics1.citibankonline.com^
+||metrics1.citicards.com^
+||metrics1.thankyou.com^
+||metrics2.houselogic.com^
+||metrics2.williamhill.com^
+||metricss.bibliotheek.nl^
+||metricssecure.empiretoday.com^
+||metricssecure.luna.com^
+||metricssecure.nmfn.com^
+||metricssecure.northwesternmutual.com^
+||metrix.511tactical.com^
+||metrix.avon.uk.com^
+||metrix.publix.com^
+||metrix.youravon.com^
+||mix-omniture.rbs.com^
+||mixomniture.rbs.com^
+||mktg.aa.f5.com^
+||ms.topschooljobs.org^
+||mtc.jetstar.com^
+||mtc.nhk.or.jp^
+||mtc.qantas.com.au^
+||mtc.qantas.com^
+||mtcs.nhk-ondemand.jp^
+||mtcs.nhk.or.jp^
+||mtrcs.popcap.com^
+||mtrcs.redhat.com^
+||mtrs.cooecfluor.com^
+||mtrs.fluor.com^
+||mtrs.fluorconstructors.com^
+||mtrs.fluoruniversity.com^
+||mtx.lastminute.com.au^
+||my.iheart.com^
+||myefo.edge48.testandtarget.omniture.com^
+||myhome.usg.com^
+||n.earthlink.net^
+||n.hdsupplysolutions.com^
+||n.lexusfinancial.com^
+||n.netquote.com^
+||n.news.com^
+||n.thestar.com^
+||nanalytics.virginaustralia.com^
+||nats.xing.com^
+||natsp.xing.com^
+||newsletter.sst-apac.test.cjmadobe.com^
+||newtest.wunderman-email.cjm.adobe.com^
+||nmetrics.samsung.com^
+||nmetrics.samsungmobile.com^
+||nocaadobefpc.optus.com.au^
+||nom.familysearch.org^
+||nom.lds.org^
+||nossl.aafp.org^
+||nossl.aafpfoundation.org^
+||nossl.basco.com^
+||nosslomniture.dupontregistry.com^
+||notice-tmo.notice.assurancewireless.com^
+||nsc.coutts.com^
+||nsc.iombank.com^
+||nsc.natwest.com^
+||nsc.natwestgroup.com^
+||nsc.natwestgroupremembers.com^
+||nsc.natwestinternational.com^
+||nsc.rbs.co.uk^
+||nsc.rbs.com^
+||nsc.ulsterbank.co.uk^
+||nsc.ulsterbank.com^
+||nsc.ulsterbank.ie^
+||nscmetrics.shell.com^
+||nsm.dell.com^
+||nsm.sungardas.com^
+||nsmetrics.adelaidenow.com.au^
+||nsmetrics.couriermail.com.au^
+||nsmetrics.dailytelegraph.com.au^
+||nsmetrics.geelongadvertiser.com.au^
+||nsmetrics.goldcoastbulletin.com.au^
+||nsmetrics.heraldsun.com.au^
+||nsmetrics.ni.com^
+||nsmetrics.theaustralian.com.au^
+||nsmetrics.themercury.com.au^
+||nsmetrics.vogue.com.au^
+||nsteq.queensland.com^
+||nus.nick.com^
+||o.auspost.com.au^
+||o.bluewin.ch^
+||o.carmax.com^
+||o.efaxcorporate.com^
+||o.evite.com^
+||o.evoicereceptionist.com^
+||o.fandango.com^
+||o.lenovo.com^
+||o.macworld.co.uk^
+||o.medallia.com^
+||o.opentable.co.uk^
+||o.opentable.com^
+||o.otrestaurant.com^
+||o.swisscom.ch^
+||o.therosettastone.es^
+||o.webmd.com^
+||o.xbox.com^
+||o8.hyatt.com^
+||ocs.hagerty.com^
+||odc.1und1.de^
+||odc.weather.com^
+||oimg.login.cnbc.com^
+||oimg.m.calltheclose.cnbc.com^
+||oimg.nbcsports.com^
+||oimg.nbcuni.com^
+||oimg.universalorlandovacations.com^
+||oimg.universalstudioshollywood.com^
+||om-ssl.consorsbank.de^
+||om.abritel.fr^
+||om.aopa.org^
+||om.burberry.com^
+||om.cbsi.com^
+||om.churchofjesuschrist.org^
+||om.cyberrentals.com^
+||om.dowjoneson.com^
+||om.escapehomes.com^
+||om.etnetera.cz^
+||om.expedia.com^
+||om.familysearch.org^
+||om.fewo-direkt.de^
+||om.greatrentals.com^
+||om.healthgrades.com^
+||om.homeaway.ca^
+||om.homeaway.co.in^
+||om.homeaway.com^
+||om.hoteis.com^
+||om.hoteles.com^
+||om.hotels.cn^
+||om.hotels.com^
+||om.hotwire.com^
+||om.kmart.com^
+||om.lds.org^
+||om.medreps.com^
+||om.neimanmarcus.com^
+||om.norton.com^
+||om.owenscorning.com^
+||om.ringcentral.com^
+||om.rogersmedia.com^
+||om.sears.com^
+||om.servicelive.com^
+||om.symantec.com^
+||om.travelocity.ca^
+||om.travelocity.com^
+||om.triphomes.com^
+||om.vacationrentals.com^
+||om.vegasmeansbusiness.com^
+||om.visitbouldercity.com^
+||om.vrbo.com^
+||om.zdnet.com.au^
+||ometrics.ameds.com^
+||ometrics.warnerbros.com^
+||ometrics.wb.com^
+||omn.americanexpress.com^
+||omn.costumesupercenter.com^
+||omn.crackle.com^
+||omn.hasbro.com^
+||omn.rockpanel.co.uk^
+||omn.rockwool.by^
+||omn.rockwool.com^
+||omn.sonypictures.com^
+||omn.wholesalehalloweencostumes.com^
+||omn2.hasbro.com^
+||omni.amsurg.com^
+||omni.avg.com^
+||omni.basspro.com^
+||omni.bluebird.com^
+||omni.bluecrn.ca^
+||omni.cineplex.com^
+||omni.copaair.com^
+||omni.elearners.com^
+||omni.israelbonds.com^
+||omni.nwa.com^
+||omni.pemco.com^
+||omni.turningtechnologies.com^
+||omni.vikingrivercruises.com^
+||omni.yellowpages.com^
+||omnis.firstdata.com^
+||omnis.pcmall.com^
+||omnistat.teleflora.com^
+||omnistats.teleflora.com^
+||omnit.pureyoga.com^
+||omniture-secure.valpak.com^
+||omniture.affarsliv.com^
+||omniture.corel.com^
+||omniture.omgeo.com^
+||omniture.partycity.ca^
+||omniture.partycity.com^
+||omniture.rbs.com^
+||omniture.unt.se^
+||omniture.valpak.com^
+||omniture.waff.com^
+||omniture.yodlee.com^
+||omniture443.partycity.ca^
+||omniture443.partycity.com^
+||omnituretrack.local.com^
+||oms.chatelaine.com^
+||oms.chatrwireless.com^
+||oms.cityline.tv^
+||oms.citynews.ca^
+||oms.citytv.com^
+||oms.country600.com^
+||oms.davita.com^
+||oms.dowjones.com^
+||oms.dowjoneson.com^
+||oms.egencia.com^
+||oms.expedia.com^
+||oms.factiva.com^
+||oms.fido.ca^
+||oms.fxnowcanada.ca^
+||oms.goarmy.com^
+||oms.hoteis.com^
+||oms.hoteles.com^
+||oms.hotels.cn^
+||oms.hotels.com^
+||oms.jack969.com^
+||oms.macleans.ca^
+||oms.mansionglobal.com^
+||oms.marketwatch.com^
+||oms.mymcmurray.com^
+||oms.neimanmarcus.com^
+||oms.nhllive.com^
+||oms.norton.com^
+||oms.ocean985.com^
+||oms.omnitv.ca^
+||oms.rogersmedia.com^
+||oms.snnow.ca^
+||oms.symantec.com^
+||oms.travelocity.ca^
+||oms.travelocity.com^
+||oms.tsc.ca^
+||oms.usnews.com^
+||oms.venere.com^
+||oms.wsj.com^
+||oms1.sportsnet.ca^
+||omsc.kpn.com^
+||omt.honda.com^
+||omtr.financialengines.com^
+||omtr1.partners.salesforce.com^
+||omtr2.partners.salesforce.com^
+||omtrdc.jobsdb.com^
+||omtrdc.jobstreet.com^
+||omtrns.sstats.q8.dk^
+||oopt.norauto.fr^
+||opt.delta.com^
+||optimisation.co-oplegalservices.co.uk^
+||optimisation.coop.co.uk^
+||optimisation.data.lloydsbankinggroup.com^
+||optout.info.nordea.fi^
+||optout.info.nordea.no^
+||origin-smetrics.go365.com^
+||origin-target.humana.com^
+||os.efax.es^
+||os.efax.nl^
+||os.efaxcorporate.com^
+||os.evoice.com^
+||os.evoicereceptionist.com^
+||os.fandango.com^
+||os.mbox.com.au^
+||os.mckinseyquarterly.com^
+||os.onebox.com^
+||os.send2fax.com^
+||os.shutterfly.com^
+||os.vudu.com^
+||osc.hrs.com^
+||osc.venetian.com^
+||osc.webroot.com^
+||oscs.palazzolasvegas.com^
+||osimg.discoveruniversal.com^
+||osimg.halloweenhorrornights.com^
+||osimg.nbcuni.com^
+||osimg.universalorlando.co.uk^
+||osimg.universalorlando.com^
+||osimg.universalorlandovacations.com^
+||osimg.universalparks.com^
+||osimg.universalstudioshollywood.com^
+||osimg.windsurfercrs.com^
+||osur.dell.com^
+||otr.kaspersky.ca^
+||otr.kaspersky.co.jp^
+||otr.kaspersky.co.uk^
+||otr.kaspersky.co.za^
+||otr.kaspersky.com.au^
+||otr.kaspersky.com.br^
+||otr.kaspersky.com.tr^
+||otr.kaspersky.com^
+||otr.kaspersky.de^
+||otr.kaspersky.es^
+||otr.kaspersky.fr^
+||otr.kaspersky.it^
+||otr.kaspersky.nl^
+||otr.kaspersky.pt^
+||otr.kaspersky.se^
+||otrack.workday.com^
+||otracks.workday.com^
+||ou.shutterfly.com^
+||outrigger-a.outrigger.com^
+||owss.ihs.com^
+||p1.danskebank.co.uk^
+||p1.danskebank.dk^
+||p1.danskebank.ie^
+||p2.danskebank.co.uk^
+||p2.danskebank.dk^
+||p2.danskebank.fi^
+||p2.danskebank.no^
+||p2.danskebank.se^
+||page.email.key.com^
+||pagedot.deutschepost.de^
+||pages.info.ficohsa.com.pa^
+||pages.mail.puntoscolombia.com^
+||pages.newsletter.avianca.com^
+||pbstats.jpmorgan.com^
+||pc.personalcreations.com^
+||pdmsmrt.buick.ca^
+||pdmsmrt.buick.com^
+||pdmsmrt.cadillac.com^
+||pdmsmrt.cadillaccanada.ca^
+||pdmsmrt.chevrolet.ca^
+||pdmsmrt.chevrolet.com^
+||pdmsmrt.gmc.com^
+||pdmsmrt.gmccanada.ca^
+||petal.calyxflowers.com^
+||plugs.jameco.com^
+||private.cervicalcancer-risk.com^
+||private.cervicalcancer-screening.com^
+||private.roche.com^
+||puritysts.purityproducts.com^
+||purpose.fressnapf.at^
+||purpose.fressnapf.ch^
+||purpose.fressnapf.de^
+||purpose.maxizoo.be^
+||purpose.maxizoo.fr^
+||purpose.maxizoo.ie^
+||purpose.maxizoo.pl^
+||re.stjude.org^
+||repdata.12newsnow.com^
+||repdata.9news.com^
+||repdata.battlecreekenquirer.com^
+||repdata.clarionledger.com^
+||repdata.coloradoan.com^
+||repdata.courier-journal.com^
+||repdata.dnj.com^
+||repdata.eveningsun.com^
+||repdata.federaltimes.com^
+||repdata.floridatoday.com^
+||repdata.kiiitv.com^
+||repdata.king5.com^
+||repdata.kitsapsun.com^
+||repdata.lansingstatejournal.com^
+||repdata.marionstar.com^
+||repdata.montgomeryadvertiser.com^
+||repdata.news10.net^
+||repdata.northjersey.com^
+||repdata.packersnews.com^
+||repdata.poughkeepsiejournal.com^
+||repdata.tallahassee.com^
+||repdata.usatoday.com^
+||repdata.wcsh6.com^
+||repdata.wzzm13.com^
+||repdata.yorkdispatch.com^
+||report.mitsubishicars.com^
+||rpt.kidsfootlocker.com^
+||s-adobe.wacoal.jp^
+||s-adobeanalytics.vice.com^
+||s-omniture.yell.com^
+||s-sitecatalyst.work.shiseido.co.jp^
+||s.acxiom.com^
+||s.americanblinds.com^
+||s.ameriprisestats.com^
+||s.blinds.ca^
+||s.blinds.com^
+||s.boydgaming.com^
+||s.bramptonguardian.com^
+||s.cadent.bloomberglaw.com^
+||s.caledonenterprise.com^
+||s.cambridgetimes.ca^
+||s.columbiathreadneedle.ch^
+||s.columbiathreadneedle.co.uk^
+||s.columbiathreadneedle.hk^
+||s.durhamregion.com^
+||s.flamboroughreview.com^
+||s.grace.com^
+||s.guelphmercury.com^
+||s.hamiltonnews.com^
+||s.hdsupplysolutions.com^
+||s.hm.com^
+||s.insidehalton.com^
+||s.insideottawavalley.com^
+||s.justblinds.com^
+||s.lenovo.com^
+||s.lexusfinancial.com^
+||s.metrics.artistsnetwork.com^
+||s.metrics.skyandtelescope.com^
+||s.metroland.com^
+||s.mississauga.com^
+||s.musicradio.com^
+||s.muskokaregion.com^
+||s.newhamburgindependent.ca^
+||s.niagarafallsreview.ca^
+||s.niagarathisweek.com^
+||s.northbaynipissing.com^
+||s.northumberlandnews.com^
+||s.orangeville.com^
+||s.ourwindsor.ca^
+||s.parrysound.com^
+||s.rosettastone.co.uk^
+||s.rosettastone.com^
+||s.rosettastone.de^
+||s.rosettastone.eu^
+||s.rosettastone.fr^
+||s.sachem.ca^
+||s.save.ca^
+||s.simcoe.com^
+||s.stcatharinesstandard.ca^
+||s.tccc-comms.com^
+||s.testneedle.co.uk^
+||s.theifp.ca^
+||s.thepeterboroughexaminer.com^
+||s.therecord.com^
+||s.thespec.com^
+||s.thestar.com^
+||s.toronto.com^
+||s.toyotafinancial.com^
+||s.waterloochronicle.ca^
+||s.wellandtribune.ca^
+||s.wheels.ca^
+||s.yorkregion.com^
+||s02.bestsecret.com^
+||s1.subaru.com^
+||sa.adidaa.tescomobile.com^
+||sa.adidas.ae^
+||sa.adidas.at^
+||sa.adidas.be^
+||sa.adidas.ca^
+||sa.adidas.ch^
+||sa.adidas.cl^
+||sa.adidas.cn^
+||sa.adidas.co.in^
+||sa.adidas.co.nz^
+||sa.adidas.co.uk^
+||sa.adidas.co^
+||sa.adidas.com.ar^
+||sa.adidas.com.au^
+||sa.adidas.com.br^
+||sa.adidas.com.tr^
+||sa.adidas.com.vn^
+||sa.adidas.com^
+||sa.adidas.cz^
+||sa.adidas.de^
+||sa.adidas.dk^
+||sa.adidas.es^
+||sa.adidas.fi^
+||sa.adidas.fr^
+||sa.adidas.gr^
+||sa.bankofinternet.com^
+||sa.cookingchanneltv.com^
+||sa.discovery.com^
+||sa.discoveryplus.com^
+||sa.discoveryplus.in^
+||sa.dyson.no^
+||sa.eurosport.co.uk^
+||sa.eurosport.com^
+||sa.fchp.org^
+||sa.foodnetwork.com^
+||sa.hgtv.com^
+||sa.oprah.com^
+||sa.tactics.com^
+||sa.tlc.com^
+||saa.247sports.com^
+||saa.cbs.com^
+||saa.cbsi.com^
+||saa.cbsnews.com^
+||saa.cbssports.com^
+||saa.cnet.com^
+||saa.collegesportslive.com^
+||saa.comicbook.com^
+||saa.dabl.com^
+||saa.datasheets360.com^
+||saa.drphil.com^
+||saa.dyson.at^
+||saa.dyson.be^
+||saa.dyson.ch^
+||saa.dyson.co.uk^
+||saa.dyson.com^
+||saa.dyson.de^
+||saa.dyson.dk^
+||saa.dyson.es^
+||saa.dyson.fr^
+||saa.dyson.ie^
+||saa.dyson.it^
+||saa.dyson.lu^
+||saa.dyson.nl^
+||saa.dyson.no^
+||saa.dyson.pt^
+||saa.dyson.se^
+||saa.dysoncanada.ca^
+||saa.etonline.com^
+||saa.gamespot.com^
+||saa.giantbomb.com^
+||saa.globalspec.com^
+||saa.insideedition.com^
+||saa.irvinecompanyapartments.com^
+||saa.last.fm^
+||saa.maxpreps.com^
+||saa.metacritic.com^
+||saa.pacificdentalservices.com^
+||saa.popculture.com^
+||saa.rachaelrayshow.com^
+||saa.smilegeneration.com^
+||saa.sparebank1.no^
+||saa.sportsline.com^
+||saa.startrek.com^
+||saa.tital.es^
+||saa.viacomcbspressexpress.com^
+||saametrics.vaisala.com^
+||sabxt.teeoff.com^
+||sadb.toggoeltern.de^
+||sadbelytics.munichre.com^
+||sadbmetrics.7canibales.com^
+||sadbmetrics.andorrataste.com^
+||sadbmetrics.canarias7.es^
+||sadbmetrics.congresomigueldelibes.es^
+||sadbmetrics.huelva24.com^
+||sadbmetrics.leonoticias.com^
+||sadbmetrics.localdigitalkit.com^
+||sadbmetrics.lomejordelvinoderioja.com^
+||sadbmetrics.madridfusion.net^
+||sadbmetrics.malagaenlamesa.com^
+||sadbmetrics.masterelcorreo.com^
+||sadbmetrics.miperiodicodigital.com^
+||sadbmetrics.mondragoncitychallenge.com^
+||sadbmetrics.muevetebasket.es^
+||sadbmetrics.mujerhoy.com^
+||sadbmetrics.nextspain.es^
+||sadbmetrics.nuevosvecinos.com^
+||sadbmetrics.oferplan.com^
+||sadbmetrics.pidecita.com^
+||sadbmetrics.pisocompartido.com^
+||sadbmetrics.pisos.com^
+||sadbmetrics.relevo.com^
+||sadbmetrics.rtve.es^
+||sadbmetrics.salamancahoy.es^
+||sadbmetrics.salon-sie.com^
+||sadbmetrics.sansebastiangastronomika.com^
+||sadbmetrics.surinenglish.com^
+||sadbmetrics.todoalicante.es^
+||sadbmetrics.topcomparativas.com^
+||sadbmetrics.turium.es^
+||sadbmetrics.tusanuncios.com^
+||sadbmetrics.tvr.es^
+||sadbmetrics.unoauto.com^
+||sadbmetrics.vamosacorrer.com^
+||sadbmetrics.vehiculosocasionlarioja.com^
+||sadbmetrics.vidasolidaria.com^
+||sadbmetrics.vocento.com^
+||sadbmetrics.vocentoeventos.com^
+||sadbmetrics.welife.es^
+||sadbmetrics.womennow.es^
+||sadbmetrics.worldcanic.com^
+||sadbmetrics.xlsemanal.com^
+||sadbmetrics.zendalibros.com^
+||sadobe.autoscout24.at^
+||sadobe.autoscout24.be^
+||sadobe.autoscout24.de^
+||sadobe.autoscout24.es^
+||sadobe.autoscout24.fr^
+||sadobe.autoscout24.it^
+||sadobe.autoscout24.lu^
+||sadobe.autoscout24.nl^
+||sadobe.dentsu-ho.com^
+||sadobe.falabella.com.co^
+||sadobe.falabella.com.pe^
+||sadobe.falabella.com^
+||sadobe.homecenter.com.co^
+||sadobe.mercuryinsurance.com^
+||sadobe.sodimac.com.ar^
+||sadobe.sodimac.com.pe^
+||sadobeanalytics.geico.com^
+||sadobeanalytics.medline.com^
+||sadobemarketing.boden.co.uk^
+||sadobemarketing.boden.eu^
+||sadobemarketing.boden.fr^
+||sadobemarketing.bodenclothing.com.au^
+||sadobemarketing.bodendirect.at^
+||sadobemarketing.bodendirect.de^
+||sadobemarketing.bodenusa.com^
+||sadobemetrics.dr.dk^
+||sadobemetrics.la-z-boy.com^
+||saec-metrics.base.be^
+||saec-metrics.telenet.be^
+||sal.milanoo.com^
+||sam.manager-magazin.de^
+||samc.buero-zueri.ch^
+||samc.frankly.ch^
+||samc.swisscanto.com^
+||samc.zkb.ch^
+||samc.zuerilaufcup.ch^
+||sametrics.finn.no^
+||sams.manager-magazin.de^
+||sams.spiegel.de^
+||samt.frankly.ch^
+||samt.swisscanto.com^
+||samt.zkb.ch^
+||sanalytics.adobe.tp.gskpro.com^
+||sanalytics.adultswim.co.uk^
+||sanalytics.adultswim.fr^
+||sanalytics.alleatherexpo.com^
+||sanalytics.allianz-assistance.co.uk^
+||sanalytics.amig.com^
+||sanalytics.autozone.com^
+||sanalytics.bakerfurniture.com^
+||sanalytics.bd.com^
+||sanalytics.boing.es^
+||sanalytics.boingtv.it^
+||sanalytics.boomerang-tv.pl^
+||sanalytics.boomerang-tv.ro^
+||sanalytics.boomerang.asia^
+||sanalytics.boomerang.com.br^
+||sanalytics.boomerangmena.com^
+||sanalytics.boomerangtv.co.uk^
+||sanalytics.boomerangtv.com.au^
+||sanalytics.boomerangtv.com.tr^
+||sanalytics.boomerangtv.de^
+||sanalytics.boomerangtv.fr^
+||sanalytics.boomerangtv.it^
+||sanalytics.boomerangtv.nl^
+||sanalytics.boomerangtv.se^
+||sanalytics.box.com^
+||sanalytics.boxlunch.com^
+||sanalytics.canaltcm.com^
+||sanalytics.canaltnt.es^
+||sanalytics.cartoonito.co.uk^
+||sanalytics.cartoonito.com.br^
+||sanalytics.cartoonito.com.tr^
+||sanalytics.cartoonito.de^
+||sanalytics.cartoonito.fr^
+||sanalytics.cartoonito.hu^
+||sanalytics.cartoonito.it^
+||sanalytics.cartoonito.pl^
+||sanalytics.cartoonito.pt^
+||sanalytics.cartoonito.ro^
+||sanalytics.cartoonitoafrica.com^
+||sanalytics.cartoonitocheidea.it^
+||sanalytics.cartoonitomena.com^
+||sanalytics.cartoonnetwork.bg^
+||sanalytics.cartoonnetwork.cl^
+||sanalytics.cartoonnetwork.co.uk^
+||sanalytics.cartoonnetwork.com.ar^
+||sanalytics.cartoonnetwork.com.au^
+||sanalytics.cartoonnetwork.com.br^
+||sanalytics.cartoonnetwork.com.co^
+||sanalytics.cartoonnetwork.com.mx^
+||sanalytics.cartoonnetwork.com.tr^
+||sanalytics.cartoonnetwork.com.ve^
+||sanalytics.cartoonnetwork.cz^
+||sanalytics.cartoonnetwork.de^
+||sanalytics.cartoonnetwork.dk^
+||sanalytics.cartoonnetwork.es^
+||sanalytics.cartoonnetwork.fr^
+||sanalytics.cartoonnetwork.hu^
+||sanalytics.cartoonnetwork.it^
+||sanalytics.cartoonnetwork.jp^
+||sanalytics.cartoonnetwork.nl^
+||sanalytics.cartoonnetwork.no^
+||sanalytics.cartoonnetwork.pl^
+||sanalytics.cartoonnetwork.pt^
+||sanalytics.cartoonnetwork.ro^
+||sanalytics.cartoonnetwork.se^
+||sanalytics.cartoonnetworkarabic.com^
+||sanalytics.cartoonnetworkasia.com^
+||sanalytics.cartoonnetworkclimatechampions.com^
+||sanalytics.cartoonnetworkhq.com^
+||sanalytics.cartoonnetworkindia.com^
+||sanalytics.cartoonnetworkkorea.com^
+||sanalytics.cartoonnetworkla.com^
+||sanalytics.cartoonnetworkme.com^
+||sanalytics.cdf.cl^
+||sanalytics.ceu.com^
+||sanalytics.cha-ching.com^
+||sanalytics.chilevision.cl^
+||sanalytics.chvnoticias.cl^
+||sanalytics.cnfanart.com^
+||sanalytics.cnnchile.com^
+||sanalytics.combatefreestyle.com^
+||sanalytics.concorsicartoonito.it^
+||sanalytics.dga.org^
+||sanalytics.discoverykids.com.br^
+||sanalytics.discoverykids.com^
+||sanalytics.disneyplus.com^
+||sanalytics.enterprise.spectrum.com^
+||sanalytics.esporteinterativo.com.br^
+||sanalytics.ewz.ch^
+||sanalytics.express.de^
+||sanalytics.fietsverzekering.nl^
+||sanalytics.firstnational.com^
+||sanalytics.fnbnp.com^
+||sanalytics.fnbsd.com^
+||sanalytics.houghtonstatebank.com^
+||sanalytics.ingredion.com^
+||sanalytics.ksta.de^
+||sanalytics.landmands.com^
+||sanalytics.latamwbd.com^
+||sanalytics.lovemoney.com^
+||sanalytics.mail-corp.com^
+||sanalytics.mopo.de^
+||sanalytics.mz-web.de^
+||sanalytics.nascar.com^
+||sanalytics.ncaa.com^
+||sanalytics.rbs.com.au^
+||sanalytics.rbs.com^
+||sanalytics.rbs.nl^
+||sanalytics.rbsbank.dk^
+||sanalytics.rundschau-online.de^
+||sanalytics.safestepskids.com^
+||sanalytics.sc.metrics-shell.com^
+||sanalytics.scsbnet.com^
+||sanalytics.smart.mercedes-benz.com^
+||sanalytics.solarpotenzial.ch^
+||sanalytics.southpointcasino.com^
+||sanalytics.sydney.edu.au^
+||sanalytics.sydneyuniversity.cn^
+||sanalytics.tcm.com^
+||sanalytics.teentitanstoptalent.com^
+||sanalytics.theinstitutes.org^
+||sanalytics.tnt-tv.de^
+||sanalytics.tnt-tv.pl^
+||sanalytics.tnt-tv.ro^
+||sanalytics.tnt.africa^
+||sanalytics.tntsports.cl^
+||sanalytics.tntsports.com.ar^
+||sanalytics.tntsports.com.br^
+||sanalytics.verizonenterprise.com^
+||sanalytics.warnertv.de^
+||sanalytics.warnertv.fr^
+||sanalytics.warnertv.pl^
+||sanalytics.warnertv.ro^
+||sanalytics.warnertvspiele.de^
+||sanalytics.wbd.com^
+||sanalytics.yorkstatebank.com^
+||sanl.champssports.ca^
+||sanl.footlocker.co.nz^
+||sanl.footlocker.co.uk^
+||sanl.footlocker.com.au^
+||sanl.footlocker.de^
+||sanl.footlocker.fr^
+||sanl.footlocker.kr^
+||sanl.footlocker.nl^
+||sanl.sidestepstore.be^
+||sanl.sidestepstore.es^
+||sappmetrics.sprint.com^
+||satarget.csu.edu.au^
+||satarget.npubank.com.au^
+||satarget.southaustralia.com^
+||satgt.grafana.com^
+||sats.manager-magazin.de^
+||sats.spiegel.de^
+||sb.mynewplace.com^
+||sbrands.lookfantastic.com^
+||sc-forbes.forbes.com^
+||sc-nossl.speakeasy.net^
+||sc.disneylandparis.com^
+||sc.doctorwho.tv^
+||sc.icarly.com^
+||sc.infor.com^
+||sc.infor.jp^
+||sc.lacapitale.com^
+||sc.locator-rbs.co.uk^
+||sc.lombard.ie^
+||sc.mtv.co.uk^
+||sc.mtv.com^
+||sc.mtv.tv^
+||sc.muji.net^
+||sc.natwest.com^
+||sc.natwestgroup.com^
+||sc.natwestinternational.com^
+||sc.neteller.com^
+||sc.nick.co.uk^
+||sc.nick.com^
+||sc.nickelodeonarabia.com^
+||sc.nickjr.com^
+||sc.nicktoons.co.uk^
+||sc.nwf.org^
+||sc.paramount.com^
+||sc.paramountnetwork.com^
+||sc.payback.de^
+||sc.rbos.com^
+||sc.rbs.co.uk^
+||sc.rbs.com^
+||sc.restplatzboerse.de^
+||sc.rhapsody.com^
+||sc.sanitas.com^
+||sc.sonystyle.com.cn^
+||sc.supertv.it^
+||sc.thedailyshow.com^
+||sc.ulsterbank.co.uk^
+||sc.ulsterbank.ie^
+||sc.unitymedia.de^
+||sc.vmware.com^
+||sc.voanews.com^
+||sc.wa.gto.db.com^
+||sc2.constantcontact.com^
+||sc2.infor.com^
+||sc2metrics.exacttarget.com^
+||scadobe.paybooc.co.kr^
+||scadobe.vpay.co.kr^
+||scanalytics.wral.com^
+||sci.intuit.ca^
+||sci.intuit.co.uk^
+||sci.intuit.com^
+||sci.quickbooks.com^
+||scmetrics.exacttarget.com^
+||scmetrics.shell.com^
+||scmetrics.vodafone.it^
+||scnd.landsend.co.uk^
+||scnd.landsend.com^
+||scnd.landsend.de^
+||scode.randomhouse.com^
+||sconnectstats.mckesson.com^
+||scookies-adobe.cbc.be^
+||scookies-adobe.kbc-group.com^
+||scookies-adobe.kbc.be^
+||scookies-adobe.kbc.com^
+||scookies-adobe.kbcbrussels.be^
+||scookies-adobe.kbclease.lu^
+||scookies-adobe.kbcsecurities.com^
+||scookies-adobe.kching.be^
+||scp.deltadentalwa.com^
+||scrippsfoodnetnew.foodnetwork.com^
+||scrippshgtvnew.hgtv.com^
+||scs.allsecur.nl^
+||scs.arcteryx.com^
+||scs.lacapitale.com^
+||scs.lifenet-seimei.co.jp^
+||scsmetrics.ho-mobile.it^
+||scsmetrics.vodafone.it^
+||sdata.avid.com^
+||sdata.chelseafc.com^
+||sdata.connection.com^
+||sdata.efficientlearning.com^
+||sdata.lifesize.com^
+||sdata.sealedair.com^
+||sdata.wiley.com^
+||sdc.allianz-autowelt.com^
+||sdc.allianz-autowelt.de^
+||sdc.allianz-maklerakademie.de^
+||sdc.allianz-vertrieb.de^
+||sdc.allianz-vor-ort.de^
+||sdc.allianz.de^
+||sdc.allianzpp.com^
+||sdc.allvest.de^
+||sdc.aware.com.au^
+||sdc.azt-automotive.com^
+||sdc.firmenonline.de^
+||sdc.firststatesuper.com.au^
+||sdc.kfz-steuercheck.de^
+||sdc.kvm-ga.de^
+||sdc.meinebav.com^
+||sdc.risikolebensversicherungen.com^
+||sdc2.credit-suisse.com^
+||sdcs.felissimo.co.jp^
+||sdome.underarmour.co.jp^
+||sec-analytics.panasonic.co.uk^
+||secmetrics.friendscout24.it^
+||secmetrics.friendscout24.nl^
+||secmetrics.leggmason.com^
+||secmetrics.rakuten-checkout.de^
+||secmetrics.schaefer-shop.at^
+||secmetrics.schaefer-shop.be^
+||secmetrics.schaefer-shop.ch^
+||secmetrics.schaefer-shop.de^
+||secmetrics.schaefer-shop.nl^
+||secu.hagerty.ca^
+||secu.hagerty.com^
+||secu.hagertyagent.com^
+||secu.hagertybroker.ca^
+||secure-stat.canal-plus.com^
+||secure.adata.ca.com^
+||secure.analytics.crowneplaza.com^
+||secure.diet.mayoclinic.org^
+||secure.realwomenofphiladelphia.ca^
+||secure.sigmaaldrich.com^
+||secure.valpak.com^
+||secure.whattoexpect.com^
+||secureanalytics.avis.at^
+||secureanalytics.avis.be^
+||secureanalytics.avis.ch^
+||secureanalytics.avis.co.uk^
+||secureanalytics.avis.com.pt^
+||secureanalytics.avis.cz^
+||secureanalytics.avis.de^
+||secureanalytics.avis.dk^
+||secureanalytics.avis.es^
+||secureanalytics.avis.fr^
+||secureanalytics.avis.lu^
+||secureanalytics.avis.nl^
+||secureanalytics.avis.no^
+||secureanalytics.avis.se^
+||secureanalytics.avisautonoleggio.it^
+||secureanalytics.budget.at^
+||secureanalytics.budget.co.uk^
+||secureanalytics.budget.de^
+||secureanalytics.budget.dk^
+||secureanalytics.budget.es^
+||secureanalytics.budget.fr^
+||secureanalytics.budget.no^
+||secureanalytics.budgetautonoleggio.it^
+||secureclicks.geae.com^
+||secureclicks.geaviation.com^
+||securedata.bioplanet.be^
+||securedata.collectandgo.be^
+||securedata.collectandgo.fr^
+||securedata.collishop.be^
+||securedata.colruyt.be^
+||securedata.colruyt.fr^
+||securedata.colruytgroup.com^
+||securedata.colruytgroupacademy.be^
+||securedata.cru.be^
+||securedata.dats24p.com^
+||securedata.dreambaby.be^
+||securedata.dreamland.be^
+||securedata.mijnspar.be^
+||securedata.monspar.be^
+||securedata.okay.be^
+||securedata.solucious.be^
+||securedata.unsw.edu.au^
+||secureflashplayerfeedback.adobe.com^
+||securemetrics-z.v.aaplimg.com^
+||securemetrics.blackrock.com^
+||securemetrics.dailycandy.com^
+||securemetrics.experience.apple^
+||securemetrics.gap.co.jp^
+||securemetrics.gap.co.uk^
+||securemetrics.gap.eu^
+||securemetrics.marthastewart.com^
+||securemetrics.nbnco.com.au^
+||securestats.cafepress.com^
+||securestats.callawaygolf.com^
+||securetags.aeroterra.com^
+||securetags.esri.ca^
+||securetags.esri.co^
+||securetags.esri.com.tr^
+||securetags.esri.com^
+||securetags.esri.de^
+||securetags.esri.in^
+||securetags.esri.nl^
+||securetags.esri.rw^
+||securetags.esriturkey.com.tr^
+||securetags.esriuk.com^
+||securetags.img.com.br^
+||securetags.sigsa.info^
+||securetenilstats.turner.com^
+||securetracking.huntington.com^
+||sedge.aarp.org^
+||selectronics.sony-latin.com^
+||service.vrp.com^
+||serviceo.comcast.net^
+||serviceo.xfinity.com^
+||serviceos.comcast.net^
+||serviceos.xfinity.com^
+||sgms.greatschools.org^
+||sgw-analytics.panasonic.com^
+||shop.lids.ca^
+||sicas.ikea.com^
+||sig.ig.com^
+||sig.igmarkets.com^
+||sig.nadex.com^
+||simg.bwin.be^
+||simg.bwin.com^
+||simg.bwin.es^
+||simg.bwin.fr^
+||simg.bwin.it^
+||simg.discovery.com^
+||simg.gamebookers.com^
+||simg.interhome.at^
+||simg.interhome.be^
+||simg.interhome.ch^
+||simg.interhome.com^
+||simg.interhome.de^
+||simg.interhome.fr^
+||simg.interhome.ie^
+||simg.interhome.no^
+||simg.interhome.pl^
+||simg.interhome.se^
+||simg.mgsgamesonline.com^
+||simg.ontargetjobs.com^
+||simg.premium.com^
+||simg.sh.bwin.de^
+||simg.yemeksepeti.com^
+||sinfo.dtcidev.co^
+||sinmo.chasecenter.com^
+||sit-metrics.nab.com.au^
+||sit-smetrics.nab.com.au^
+||site.emarketer.com^
+||site.johnlewis-insurance.com^
+||site.johnlewis.com^
+||site.waitrose.com^
+||site2.emarketer.com^
+||sitecat.eset.com^
+||sitecat.troweprice.com^
+||sitecatalyst.smartsource.com^
+||sitecatalyst.work.shiseido.co.jp^
+||sitecatalysts.a-q-f.com^
+||sitecatalysts.saisoncard.co.jp^
+||sitecats.troweprice.com^
+||sitectlystmbiekids.com^
+||sm.edweek.org^
+||sm.sungardas.com^
+||smcom^
+||smetc.banfield.com^
+||smetetrics.resilium.com.au^
+||smetric.4imprint.com^
+||smetric.baylorhealth.com^
+||smetric.millenniumhotels.com^
+||smetric.owb.com^
+||smetric.redlobster.com^
+||smetric.worldcat.org^
+||smetricas.fgv.br^
+||smetriccom^
+||smetricesh.com^
+||smetrics.360training.com^
+||smetrics.3838.com^
+||smetrics.50southcapital.com^
+||smetrics.aaamidatlantic.com^
+||smetrics.abbott.co.in^
+||smetrics.abbott.com.sg^
+||smetrics.abbott.com^
+||smetrics.abbottcore.com^
+||smetrics.abbottdiagnostics.com^
+||smetrics.abbottgps.com^
+||smetrics.abbottnutrition.com.my^
+||smetrics.abbottnutrition.com^
+||smetrics.abbottstore.com^
+||smetrics.abbottvascular.com^
+||smetrics.abilifymaintena.com^
+||smetrics.abilifymycite.com^
+||smetrics.abilifymycitehcp.com^
+||smetrics.absolutetotalcare.com^
+||smetrics.absorbcommunicationskit.com^
+||smetrics.academy.com^
+||smetrics.accaglobal.com^
+||smetrics.accredo.com^
+||smetrics.accuweather.com^
+||smetrics.aclu.org^
+||smetrics.acpny.com^
+||smetrics.acs.org.au^
+||smetrics.act4yourheart.com^
+||smetrics.actemra.com^
+||smetrics.actemrahcp.com^
+||smetrics.activase.com^
+||smetrics.active.com^
+||smetrics.activecommunities.com^
+||smetrics.activeendurance.com^
+||smetrics.activenetwork.com^
+||smetrics.adage.com^
+||smetrics.addabilify.com^
+||smetrics.adiglobal.us^
+||smetrics.adnradio.cl^
+||smetrics.adpkdquestions.com^
+||smetrics.adt.com^
+||smetrics.adult.prevnar13.com^
+||smetrics.adultnutritionlearningcenter.com^
+||smetrics.advil.com^
+||smetrics.aegon.co.uk^
+||smetrics.aelca.es^
+||smetrics.aem.playstation.com^
+||smetrics.aetn.com^
+||smetrics.aetnamedicare.com^
+||smetrics.afbank.com^
+||smetrics.afcom.com^
+||smetrics.affymetrix.com^
+||smetrics.afpjobs.amazon.com^
+||smetrics.afrique.pwc.com^
+||smetrics.aftonbladet.se^
+||smetrics.afvclub.ca^
+||smetrics.afvclub.com^
+||smetrics.agentprovocateur.com^
+||smetrics.agilent.com^
+||smetrics.agillink.com^
+||smetrics.aia.co.kr^
+||smetrics.aia.com^
+||smetrics.aida.de^
+||smetrics.airandgo.fr^
+||smetrics.airasia.com^
+||smetrics.aircanada.com^
+||smetrics.airmiles.ca^
+||smetrics.airngo.at^
+||smetrics.airngo.de^
+||smetrics.airngo.dk^
+||smetrics.airngo.it^
+||smetrics.airngo.nl^
+||smetrics.airngo.no^
+||smetrics.airngo.pt^
+||smetrics.airngo.se^
+||smetrics.airtran.com^
+||smetrics.airtv.net^
+||smetrics.ajinomoto.co.jp^
+||smetrics.aktiv-mit-psa.de^
+||smetrics.albankaldawli.org^
+||smetrics.alecensa.com^
+||smetrics.alexandani.com^
+||smetrics.alfalaval.cn^
+||smetrics.alfalaval.com.au^
+||smetrics.alfalaval.kr^
+||smetrics.alfalaval.sg^
+||smetrics.alka.dk^
+||smetrics.alkamobil.dk^
+||smetrics.allegion.com^
+||smetrics.allenedmonds.ca^
+||smetrics.allenedmonds.com^
+||smetrics.alliancebernstein.com^
+||smetrics.allianz.com.au^
+||smetrics.allianzlife.com^
+||smetrics.allstate.com^
+||smetrics.allstatecorporation.com^
+||smetrics.allwellmedicare.com^
+||smetrics.ally.com^
+||smetrics.alpo.com^
+||smetrics.amaroso.com.au^
+||smetrics.ambetterhealth.com^
+||smetrics.ambetterofillinois.com^
+||smetrics.ambetterofnorthcarolina.com^
+||smetrics.ambetteroftennessee.com^
+||smetrics.amd.com^
+||smetrics.americanairlines.com.au^
+||smetrics.americanairlines.es^
+||smetrics.americanairlines.fr^
+||smetrics.americanairlines.in^
+||smetrics.americanblinds.com^
+||smetrics.americancentury.com^
+||smetrics.americanconnection.io^
+||smetrics.americanway.com^
+||smetrics.americastire.com^
+||smetrics.amersportsproclub.com^
+||smetrics.amfam.com^
+||smetrics.amg.com^
+||smetrics.amgfunds.com^
+||smetrics.amica.com^
+||smetrics.amp.co.nz^
+||smetrics.amplifon.com^
+||smetrics.amway-bulgaria-qas.com^
+||smetrics.amway-estonia.com^
+||smetrics.amway-qas.com.co^
+||smetrics.amway-qas.fr^
+||smetrics.amway-qas.nl^
+||smetrics.amway-turkey-qas.com^
+||smetrics.amway.com.ar^
+||smetrics.amway.com.hn^
+||smetrics.amway.my^
+||smetrics.amway.se^
+||smetrics.ancestry.co.uk^
+||smetrics.ancestry.com^
+||smetrics.ancestry.de^
+||smetrics.angara.com^
+||smetrics.angi.com^
+||smetrics.animalhealthacademy.com.au^
+||smetrics.animalnetwork.com^
+||smetrics.anixter.com^
+||smetrics.anntaylor.com^
+||smetrics.ansible.com^
+||smetrics.ansys.com^
+||smetrics.antena3.com^
+||smetrics.anthem.com^
+||smetrics.anticoagulante.info^
+||smetrics.anwagolf.com^
+||smetrics.apellis.com^
+||smetrics.apia.com.au^
+||smetrics.apps.ge.com^
+||smetrics.aptashop.co.uk^
+||smetrics.arcobusinesssolutions.com^
+||smetrics.argenta.be^
+||smetrics.argenta.eu^
+||smetrics.argos.co.uk^
+||smetrics.arhealthwellness.com^
+||smetrics.armadaskis.com^
+||smetrics.army.mod.uk^
+||smetrics.arnette.com^
+||smetrics.as.com^
+||smetrics.ascensioncomplete.com^
+||smetrics.ascentric.co.uk^
+||smetrics.aservoequihaler.com^
+||smetrics.asgrow.com.mx^
+||smetrics.asics.com^
+||smetrics.asmithbowman.com^
+||smetrics.assurancewireless.com^
+||smetrics.assuranthealth.com^
+||smetrics.asteronlife.com.au^
+||smetrics.asumag.com^
+||smetrics.atecsports.com^
+||smetrics.atlantic.caa.ca^
+||smetrics.atlanticsuperstore.ca^
+||smetrics.atomic.com^
+||smetrics.atresmedia.com^
+||smetrics.atresplayer.com^
+||smetrics.au.com^
+||smetrics.audi.co.uk^
+||smetrics.audifinance.ca^
+||smetrics.audifinancialservices.nl^
+||smetrics.australiancurriculum.edu.au^
+||smetrics.australiansuper.com^
+||smetrics.autodesk.com^
+||smetrics.automobilemag.com^
+||smetrics.automobilwoche.de^
+||smetrics.autonews.com^
+||smetrics.autotrader.com^
+||smetrics.avalara.com^
+||smetrics.avancesenrespiratorio.com^
+||smetrics.avastin-hcp.com^
+||smetrics.avastin.com^
+||smetrics.aveva.com^
+||smetrics.aviationweek.com^
+||smetrics.aviva.co.uk^
+||smetrics.avnet.com^
+||smetrics.axa-direct-life.co.jp^
+||smetrics.axs.com^
+||smetrics.azcompletehealth.com^
+||smetrics.babycenter.at^
+||smetrics.babycenter.ca^
+||smetrics.babycenter.com.au^
+||smetrics.babycenter.com.mx^
+||smetrics.babycenter.com.ph^
+||smetrics.babycenter.de^
+||smetrics.babycenter.fr^
+||smetrics.babycenter.in^
+||smetrics.babycenter.ru^
+||smetrics.babycentre.co.uk^
+||smetrics.babyjoyclub.com^
+||smetrics.babynes.ch^
+||smetrics.bakerbrothersplumbing.com^
+||smetrics.bamboohr.com^
+||smetrics.banamex.com^
+||smetrics.bancobmg.com.br^
+||smetrics.bancomundial.org^
+||smetrics.bancsabadell.com^
+||smetrics.bank-daiwa.co.jp^
+||smetrics.bankatfirst.com^
+||smetrics.bankaustria.at^
+||smetrics.bankinter.com^
+||smetrics.bankofamerica.com^
+||smetrics.bankofmelbourne.com.au^
+||smetrics.banksa.com.au^
+||smetrics.bankwest.com.au^
+||smetrics.banorte.com^
+||smetrics.banquemondiale.org^
+||smetrics.banter.com^
+||smetrics.barandblock.co.uk^
+||smetrics.barcainnovationhub.com^
+||smetrics.barkandwhiskers.com^
+||smetrics.barracuda.com^
+||smetrics.base.be^
+||smetrics.baskinrobbins.com^
+||smetrics.bayer.africa^
+||smetrics.bayer.co^
+||smetrics.bayer.com.br^
+||smetrics.bayer.com.mx^
+||smetrics.bayer.com.tr^
+||smetrics.bayer.com^
+||smetrics.bayer.cr^
+||smetrics.bayer.dz^
+||smetrics.bayer.ec^
+||smetrics.bayer.gt^
+||smetrics.bayer.ma^
+||smetrics.bayer.pe^
+||smetrics.bayer.sk^
+||smetrics.bayer.us^
+||smetrics.bbb.org^
+||smetrics.bbva.com.ar^
+||smetrics.bbva.com.co^
+||smetrics.bbva.com.uy^
+||smetrics.bbva.com^
+||smetrics.bbva.es^
+||smetrics.bbva.it^
+||smetrics.bbva.mx^
+||smetrics.bbva.pe^
+||smetrics.bbvaexperience.com^
+||smetrics.bbvanet.com.co^
+||smetrics.bbvanet.com.mx^
+||smetrics.bbvanetcash.pe^
+||smetrics.bbvaopenmind.com^
+||smetrics.bbvaresearch.com^
+||smetrics.bbvaseguros.mx^
+||smetrics.bcbsks.com^
+||smetrics.bcbsm.com^
+||smetrics.bcbsnc.com^
+||smetrics.bcbsnd.com^
+||smetrics.bd.dk^
+||smetrics.be.carrefour.eu^
+||smetrics.beachbody.com^
+||smetrics.beatsbydre.com.cn^
+||smetrics.beatsbydre.com^
+||smetrics.beckmancoulter.com^
+||smetrics.becomeanex.org^
+||smetrics.beefeater.co.uk^
+||smetrics.belairdirect.com^
+||smetrics.belk.com^
+||smetrics.beneful.com^
+||smetrics.beneplace.com^
+||smetrics.beneplus.cz^
+||smetrics.bereadywith.com^
+||smetrics.besame.fm^
+||smetrics.bestbuy.com^
+||smetrics.bestdrive.cz^
+||smetrics.bestdrive.fr^
+||smetrics.bestegg.com^
+||smetrics.bestinver.es^
+||smetrics.bests.com^
+||smetrics.beterhoren.nl^
+||smetrics.bi-connect.com^
+||smetrics.bi-vetmedica.com^
+||smetrics.biconnect.fr^
+||smetrics.bighistoryproject.com^
+||smetrics.bigkidneybigproblem.com^
+||smetrics.bilfinans.no^
+||smetrics.binge.com.au^
+||smetrics.biomedtracker.com^
+||smetrics.bissell.com^
+||smetrics.bittermens.com^
+||smetrics.bjs.com^
+||smetrics.blau.de^
+||smetrics.bluemercury.com^
+||smetrics.bluenile.com^
+||smetrics.blueprintprep.com^
+||smetrics.bms-immuno-dermatologie.de^
+||smetrics.bms-io-academy.co.uk^
+||smetrics.bms-newfrontiers.com.au^
+||smetrics.bms.com^
+||smetrics.bmscustomerconnect.com^
+||smetrics.bmshealthcare.jp^
+||smetrics.bmsmedinfo.co.uk^
+||smetrics.bmsmedinfo.com^
+||smetrics.bmsoncology.jp^
+||smetrics.bmspaf.org^
+||smetrics.bmsstudyconnect.com^
+||smetrics.bmwusa.com^
+||smetrics.bnpparibas.com^
+||smetrics.bnymellonam.com^
+||smetrics.bodyforlife.com^
+||smetrics.bodyworkmall.com^
+||smetrics.boehringer-ingelheim.es^
+||smetrics.boehringer-ingelheim.hu^
+||smetrics.boehringer-ingelheim.it^
+||smetrics.boehringer-ingelheim.no^
+||smetrics.boehringer-ingelheim.pl^
+||smetrics.boehringer-ingelheim.sk^
+||smetrics.boehringer-ingelheim.ua^
+||smetrics.boehringer-interaktiv.de^
+||smetrics.boehringerone.com^
+||smetrics.boostinfinite.com^
+||smetrics.boostmobile.com^
+||smetrics.borgatacasino.com^
+||smetrics.borgatapoker.com^
+||smetrics.boss.info^
+||smetrics.boston.com^
+||smetrics.bottegaverde.es^
+||smetrics.bottegaverde.it^
+||smetrics.boyihui.com^
+||smetrics.br.de^
+||smetrics.brett-robinson.com^
+||smetrics.bridgestoneamericas.com^
+||smetrics.brinksprepaidmastercard.com^
+||smetrics.briteboxelectrical.com^
+||smetrics.brocade.com^
+||smetrics.buell.com^
+||smetrics.business.comcast.com^
+||smetrics.businessfinancemag.com^
+||smetrics.campaigns.abbott.com.sg^
+||smetrics.carbonite.com^
+||smetrics.care.com^
+||smetrics.carnival.co.uk^
+||smetrics.carolina.com^
+||smetrics.carters.com^
+||smetrics.cartersoshkosh.ca^
+||smetrics.caser.es^
+||smetrics.caserexpatinsurance.com^
+||smetrics.caseys.com^
+||smetrics.cashnetusa.com^
+||smetrics.casinoladbrokes.be^
+||smetrics.casinosplendido.com^
+||smetrics.casio-intl.com^
+||smetrics.casio-watches.com^
+||smetrics.casio.co.jp^
+||smetrics.casio.com.tw^
+||smetrics.casio.com^
+||smetrics.casio.info^
+||smetrics.casio.jp^
+||smetrics.cast.r-agent.com^
+||smetrics.catalog.usmint.gov^
+||smetrics.catchow.com^
+||smetrics.cathflo.com^
+||smetrics.cbc.ca^
+||smetrics.cbc.youtube.mercedes-benz.com^
+||smetrics.cbn.com^
+||smetrics.cdiscount.com^
+||smetrics.cedars-sinai.org^
+||smetrics.celebritycruises.com^
+||smetrics.cellcept.com^
+||smetrics.celticarehealthplan.com^
+||smetrics.centex.com^
+||smetrics.centurylink.com^
+||smetrics.cezigue.fr^
+||smetrics.cfainstitute.org^
+||smetrics.cfox.com^
+||smetrics.channelfutures.com^
+||smetrics.chapstick.com^
+||smetrics.charter.no^
+||smetrics.chase.com^
+||smetrics.chatrwireless.com^
+||smetrics.chelseafc.com^
+||smetrics.chghealthcare.com^
+||smetrics.chicagobusiness.com^
+||smetrics.christianscience.com^
+||smetrics.christies.com^
+||smetrics.chrysler.com^
+||smetrics.churchill.com^
+||smetrics.ciena.com^
+||smetrics.cigar.com^
+||smetrics.cigarsinternational.com^
+||smetrics.cinemaxx.de^
+||smetrics.cirquedusoleil.com^
+||smetrics.cisco.com^
+||smetrics.cisnfm.com^
+||smetrics.cit.com^
+||smetrics.citalia.com^
+||smetrics.citibank.co.id^
+||smetrics.citibank.co.th^
+||smetrics.citibank.co.uk^
+||smetrics.citibank.com.au^
+||smetrics.citibank.com.hk^
+||smetrics.citibank.com.my^
+||smetrics.citibank.com.ph^
+||smetrics.citibank.com.sg^
+||smetrics.citibank.com.tw^
+||smetrics.citibank.com.vn^
+||smetrics.citizensbank.com^
+||smetrics.cjoy.com^
+||smetrics.claires.com^
+||smetrics.claris.com^
+||smetrics.clickatell.com^
+||smetrics.clickbank.com^
+||smetrics.cloudera.com^
+||smetrics.cluballiance.aaa.com^
+||smetrics.clubmonaco.com^
+||smetrics.clubreservations.com^
+||smetrics.cnb.com^
+||smetrics.cnn.com^
+||smetrics.cnr.com^
+||smetrics.coach.com^
+||smetrics.coachfactory.com^
+||smetrics.codan.dk^
+||smetrics.coffretdor-makeup.jp^
+||smetrics.columbia.com^
+||smetrics.combinedinsurance.com^
+||smetrics.comcast.com^
+||smetrics.comdata.com^
+||smetrics.comenity.net^
+||smetrics.commonclaimsmistakesvideo.com^
+||smetrics.condodirect.com^
+||smetrics.consumerreports.org^
+||smetrics.contactsdirect.com^
+||smetrics.controlcenter.com^
+||smetrics.converse.co.uk^
+||smetrics.converse.com^
+||smetrics.cookhouseandpub.co.uk^
+||smetrics.coordinatedcarehealth.com^
+||smetrics.copdinsideout.ca^
+||smetrics.corazon.cl^
+||smetrics.corner.ch^
+||smetrics.cornercard.ch^
+||smetrics.cornertrader.ch^
+||smetrics.corpay.com^
+||smetrics.corpaybusinesscard.com^
+||smetrics.corpayone.com^
+||smetrics.corpayone.dk^
+||smetrics.correos.es^
+||smetrics.cortefiel.com^
+||smetrics.cortevents.com^
+||smetrics.cortfurnitureoutlet.com^
+||smetrics.cortpartyrental.com^
+||smetrics.corus.ca^
+||smetrics.costacruise.com^
+||smetrics.costadelmar.com^
+||smetrics.costco.ca^
+||smetrics.costco.com^
+||smetrics.costcobusinesscentre.ca^
+||smetrics.costcobusinessdelivery.com^
+||smetrics.costumesupercenter.com^
+||smetrics.cotellic.com^
+||smetrics.cottages.com^
+||smetrics.coulditbehcm.com^
+||smetrics.country104.com^
+||smetrics.country105.com^
+||smetrics.countryfinancial.com^
+||smetrics.countryfinancialsecurityblog.com^
+||smetrics.countrypassport.com^
+||smetrics.couponcabin.com^
+||smetrics.cox.com^
+||smetrics.cpaaustralia.com.au^
+||smetrics.cpsenergy.com^
+||smetrics.crains.com^
+||smetrics.crainscleveland.com^
+||smetrics.crainsdetroit.com^
+||smetrics.crainsnewyork.com^
+||smetrics.creditscore.com^
+||smetrics.crimewatchdaily.com^
+||smetrics.crocs.at^
+||smetrics.crocs.ca^
+||smetrics.crocs.co.uk^
+||smetrics.crocs.com^
+||smetrics.crocs.de^
+||smetrics.crocs.eu^
+||smetrics.crocs.fi^
+||smetrics.crocs.nl^
+||smetrics.crocs.se^
+||smetrics.crocsespana.es^
+||smetrics.croma.com^
+||smetrics.cru.org^
+||smetrics.crystalski.co.uk^
+||smetrics.crystalski.ie^
+||smetrics.csmonitor.com^
+||smetrics.css.ch^
+||smetrics.csu.edu.au^
+||smetrics.ctm.uhc.com^
+||smetrics.ctshirts.com^
+||smetrics.ctv.ca^
+||smetrics.cua.com.au^
+||smetrics.cultura.com^
+||smetrics.cupraofficial.de^
+||smetrics.curel.com^
+||smetrics.currys.co.uk^
+||smetrics.customersvc.com^
+||smetrics.customs.pwc.com^
+||smetrics.cvs.com^
+||smetrics.cvty.com^
+||smetrics.cyrillus.be^
+||smetrics.cyrillus.fr^
+||smetrics.cytivalifesciences.co.jp^
+||smetrics.cytivalifesciences.co.kr^
+||smetrics.cytivalifesciences.com^
+||smetrics.daiwa-grp.jp^
+||smetrics.daiwa.jp^
+||smetrics.daiwatv.jp^
+||smetrics.dalisalda.com^
+||smetrics.dallasmidwest.com^
+||smetrics.dandh.ca^
+||smetrics.dandh.com^
+||smetrics.darty.com^
+||smetrics.dashandstars.com^
+||smetrics.datapipe.com^
+||smetrics.davidclulow.com^
+||smetrics.dcu.org^
+||smetrics.deakin.edu.au^
+||smetrics.dekalb.com.co^
+||smetrics.dekalb.com.mx^
+||smetrics.dekalbasgrowdeltapine.com^
+||smetrics.delacon.com.au^
+||smetrics.delta.com^
+||smetrics.deltacargo.com^
+||smetrics.deltafarmpress.com^
+||smetrics.demarini.com^
+||smetrics.desparasitaatumascota.es^
+||smetrics.destinythegame.com^
+||smetrics.detect-afib.com^
+||smetrics.devcommittee.org^
+||smetrics.dfo.com.au^
+||smetrics.dha.com^
+||smetrics.dhc.co.jp^
+||smetrics.dhl.de^
+||smetrics.dickssportinggoods.com^
+||smetrics.digicert.com^
+||smetrics.digital.pwc.ie^
+||smetrics.digitalbalance.com.au^
+||smetrics.diners.co.jp^
+||smetrics.dinersclub.dk^
+||smetrics.directauto.com^
+||smetrics.directline.com^
+||smetrics.directlineforbusiness.co.uk^
+||smetrics.directtv.com^
+||smetrics.directv.com^
+||smetrics.discounttire.com^
+||smetrics.discova.jp^
+||smetrics.dishwireless.com^
+||smetrics.disneychannel.ca^
+||smetrics.disneylachaine.ca^
+||smetrics.dna.es^
+||smetrics.doctoramascotas.com^
+||smetrics.donaldson.com^
+||smetrics.donovanac.com^
+||smetrics.doujinshi-print.com^
+||smetrics.dreamlabdata.com^
+||smetrics.dreamvacationweek.com^
+||smetrics.drschollsshoes.com^
+||smetrics.dryerventwizard.com^
+||smetrics.dunkindonuts.com^
+||smetrics.dxc.com^
+||smetrics.e-abbott.com^
+||smetrics.earpros.com^
+||smetrics.eas.com^
+||smetrics.easacademy.org^
+||smetrics.eascertified.com^
+||smetrics.eastwestbank.com^
+||smetrics.ebgsolutions.com^
+||smetrics.ecmweb.com^
+||smetrics.edgepark.com^
+||smetrics.efirstbank.com^
+||smetrics.einsure.com.au^
+||smetrics.elgallomasgallo.com.gt^
+||smetrics.elgallomasgallo.com.hn^
+||smetrics.elgallomasgallo.com.ni^
+||smetrics.eliquis.co.uk^
+||smetrics.eliquisdataportal.com^
+||smetrics.elle.com^
+||smetrics.elpais.com^
+||smetrics.emblemhealth.com^
+||smetrics.emicizumabinfo.com^
+||smetrics.empliciti.com^
+||smetrics.energia.ie^
+||smetrics.energytoday.biz^
+||smetrics.enjoy365.ch^
+||smetrics.enspryng-hcp.com^
+||smetrics.enspryng.com^
+||smetrics.ensure.com^
+||smetrics.enterprisesg.gov.sg^
+||smetrics.entrykeyid.com^
+||smetrics.eprice.it^
+||smetrics.es-diabetes.com^
+||smetrics.esignal.com^
+||smetrics.essds.com^
+||smetrics.eticketing.abbott.com.sg^
+||smetrics.etihadcargo.com^
+||smetrics.etihadholidays.com^
+||smetrics.ets.org^
+||smetrics.eurekalert.org^
+||smetrics.europafm.com^
+||smetrics.evernorth.com^
+||smetrics.evicore.com^
+||smetrics.evivanlanschot.nl^
+||smetrics.evoshield.com^
+||smetrics.evrysdi.com^
+||smetrics.ewweb.com^
+||smetrics.experts-exchange.com^
+||smetrics.express-scripts.com^
+||smetrics.familiaynutricion.com.co^
+||smetrics.famousfootwear.ca^
+||smetrics.famousfootwear.com^
+||smetrics.fancl.co.jp^
+||smetrics.fancyfeast.com^
+||smetrics.farmtracagri.com^
+||smetrics.fcbarcelona.fr^
+||smetrics.fcbarcelona.jp^
+||smetrics.fedex.com^
+||smetrics.feedthe485.com^
+||smetrics.feelbanfresh.com^
+||smetrics.ferguson.com^
+||smetrics.fergusonshowrooms.com^
+||smetrics.ferris.ac.jp^
+||smetrics.ferroviedellostato.it^
+||smetrics.fetnet.net^
+||smetrics.fifa.com^
+||smetrics.fiftyoutlet.com^
+||smetrics.filemaker.com^
+||smetrics.filmmagic.com^
+||smetrics.finance-magazin.de^
+||smetrics.financing.vwfinance.ca^
+||smetrics.findomestic.it^
+||smetrics.fingerhut.com^
+||smetrics.finishline.com^
+||smetrics.finn.no^
+||smetrics.finning.com^
+||smetrics.fireballwhisky.com^
+||smetrics.firestonebpco.com^
+||smetrics.fivestarpainting.com^
+||smetrics.flagstar.com^
+||smetrics.flashnews.com.au^
+||smetrics.fleetcardapplication.com^
+||smetrics.fleetcardsusa.com^
+||smetrics.fleetcor.com^
+||smetrics.flex.amazon.ca^
+||smetrics.flex.amazon.co.jp^
+||smetrics.flex.amazon.co.uk^
+||smetrics.flex.amazon.com.au^
+||smetrics.flex.amazon.com.mx^
+||smetrics.flex.amazon.com.sg^
+||smetrics.flex.amazon.com^
+||smetrics.flex.amazon.in^
+||smetrics.flexera.com^
+||smetrics.flexerasoftware.com^
+||smetrics.flexshares.com^
+||smetrics.flightnetwork.com^
+||smetrics.flyfar.ca^
+||smetrics.fm96.com^
+||smetrics.fmdos.cl^
+||smetrics.fnac.be^
+||smetrics.fnac.ch^
+||smetrics.fnac.com^
+||smetrics.fnac.es^
+||smetrics.fnac.pt^
+||smetrics.fnacpro.com^
+||smetrics.foeniksprivatlaan.dk^
+||smetrics.fokuslaan.dk^
+||smetrics.fokuslan.no^
+||smetrics.folksam.se^
+||smetrics.folksamlopension.se^
+||smetrics.fondation.pwc.fr^
+||smetrics.foniksprivatlan.no^
+||smetrics.food-management.com^
+||smetrics.ford.ca^
+||smetrics.ford.com^
+||smetrics.forgingmagazine.com^
+||smetrics.forrester.com^
+||smetrics.fortinos.ca^
+||smetrics.fortune.com^
+||smetrics.fostercaretx.com^
+||smetrics.foxbusiness.com^
+||smetrics.foxnews.com^
+||smetrics.fpl.com^
+||smetrics.francosarto.com^
+||smetrics.franke.com^
+||smetrics.fraport-bulgaria.com^
+||smetrics.fraport-galaxy.de^
+||smetrics.fraport-slovenija.si^
+||smetrics.fraport.com^
+||smetrics.fraport.de^
+||smetrics.frasersproperty.com^
+||smetrics.freecreditreport.com^
+||smetrics.freecreditscore.com^
+||smetrics.freedomfordsales.ca^
+||smetrics.freeplus-global.net^
+||smetrics.friskies.com^
+||smetrics.front-line.nl^
+||smetrics.frontier.com^
+||smetrics.frontline.co.th^
+||smetrics.ftd.ca^
+||smetrics.fuelman.com^
+||smetrics.future.smart.com^
+||smetrics.futuro.cl^
+||smetrics.fuzeon.com^
+||smetrics.fxsolutions.com^
+||smetrics.fyndus.de^
+||smetrics.g-shock.com^
+||smetrics.g-shock.jp^
+||smetrics.g-tune.jp^
+||smetrics.gaes.es^
+||smetrics.garageandsocial.com^
+||smetrics.gatesnotes.com^
+||smetrics.gazyva.com^
+||smetrics.gbyguess.ca^
+||smetrics.gcimetrics.com^
+||smetrics.geeksquad.com^
+||smetrics.gehealthcare.com^
+||smetrics.gemcreditline.co.nz^
+||smetrics.gemfinance.co.nz^
+||smetrics.gemplers.com^
+||smetrics.gemvisa.co.nz^
+||smetrics.gemvisa.com.au^
+||smetrics.genarts.com^
+||smetrics.genentech-access.com^
+||smetrics.genentech-forum.com^
+||smetrics.genentech-pro.com^
+||smetrics.genentechhemophilia.com^
+||smetrics.generac.com^
+||smetrics.genesis5g.com^
+||smetrics.genoapay.com^
+||smetrics.genomeweb.com^
+||smetrics.gestionpriveegi.com^
+||smetrics.getauto.com^
+||smetrics.gettington.com^
+||smetrics.ghirardelli.com^
+||smetrics.gibbsanddammunooncology.be^
+||smetrics.gio.com.au^
+||smetrics.glasses.com^
+||smetrics.global.jcb^
+||smetrics.global.mandg.com^
+||smetrics.global.nba.com^
+||smetrics.global.tommy.com^
+||smetrics.globalfinancingfacility.org^
+||smetrics.globaltv.com^
+||smetrics.glucerna.ca^
+||smetrics.glucerna.com^
+||smetrics.gmfinancial.com^
+||smetrics.gobank.com^
+||smetrics.goccl.co.uk^
+||smetrics.golfgalaxy.com^
+||smetrics.gomastercard.com.au^
+||smetrics.gomedigap.com^
+||smetrics.gordonsjewelers.com^
+||smetrics.grainger.com^
+||smetrics.grandandtoy.com^
+||smetrics.greatland.com^
+||smetrics.greendot.com^
+||smetrics.greenflag.com^
+||smetrics.grosvenorcasinos.com^
+||smetrics.group.uhc.com^
+||smetrics.grundfos.com^
+||smetrics.grupobancomundial.org^
+||smetrics.gsbank.com^
+||smetrics.gsfresh.com^
+||smetrics.gshock.com^
+||smetrics.gsipartners.com^
+||smetrics.gsretail.com^
+||smetrics.guaranteesmatter.com^
+||smetrics.guess.eu^
+||smetrics.guessfactory.ca^
+||smetrics.guessfactory.com^
+||smetrics.guhl.com^
+||smetrics.gvb.ch^
+||smetrics.h-dnet.com^
+||smetrics.ha.com^
+||smetrics.haband.com^
+||smetrics.hagerty.co.uk^
+||smetrics.happyfamilyorganics.com^
+||smetrics.harborfreight.com^
+||smetrics.harley-davidson.com^
+||smetrics.hayesandjarvis.co.uk^
+||smetrics.hbogo.com^
+||smetrics.hbonow.com^
+||smetrics.hbr.org^
+||smetrics.hbs.edu^
+||smetrics.hbsp.harvard.edu^
+||smetrics.hdcymru.co.uk^
+||smetrics.health.com^
+||smetrics.healthcompare.com^
+||smetrics.healthengine.com.au^
+||smetrics.healthnet.com^
+||smetrics.healthnetadvantage.com^
+||smetrics.healthnetcalifornia.com^
+||smetrics.healthnetoregon.com^
+||smetrics.healthpartners.com^
+||smetrics.heathrow.com^
+||smetrics.heathrowexpress.com^
+||smetrics.hellobank.fr^
+||smetrics.helvetia.com^
+||smetrics.henkivakuutuskuntoon.fi^
+||smetrics.her2treatment.com^
+||smetrics.herbalife.com^
+||smetrics.herceptin.com^
+||smetrics.herceptinhylecta.com^
+||smetrics.heroesvacationclub.com^
+||smetrics.hfma.org^
+||smetrics.hibiyakadan.com^
+||smetrics.higheroneaccount.com^
+||smetrics.highsmith.com^
+||smetrics.hillrom.com^
+||smetrics.history.ca^
+||smetrics.hitachivantara.com^
+||smetrics.hm.com^
+||smetrics.hmhco.com^
+||smetrics.hoken.zexy.net^
+||smetrics.hollandamerica.com^
+||smetrics.hollisterco.com^
+||smetrics.hollisterco.jp^
+||smetrics.home.kpmg^
+||smetrics.homeadvisor.com^
+||smetrics.homedecorators.com^
+||smetrics.homes.com^
+||smetrics.homestatehealth.com^
+||smetrics.hoovers.com^
+||smetrics.hoseasons.co.uk^
+||smetrics.houseoffraser.co.uk^
+||smetrics.houseoffraser.com^
+||smetrics.howifightms.com^
+||smetrics.hpe.com^
+||smetrics.hrblock.com^
+||smetrics.hsamuel.co.uk^
+||smetrics.htc.com^
+||smetrics.hubert.ca^
+||smetrics.hubert.com^
+||smetrics.hydraulicspneumatics.com^
+||smetrics.ikea.com^
+||smetrics.infinitematerialsolutions.com^
+||smetrics.ingdirect.it^
+||smetrics.insuranceday.com^
+||smetrics.intactarr2pro.com.py^
+||smetrics.intermountainhealthcare.org^
+||smetrics.intervalresortsupport.com^
+||smetrics.intervalworld.com^
+||smetrics.investools.com^
+||smetrics.ivivva.com^
+||smetrics.jacuzzi.com^
+||smetrics.jamestowndistributors.com^
+||smetrics.jarboes.com^
+||smetrics.jardiance.com^
+||smetrics.jetblue.com^
+||smetrics.jimwilsonchevrolet.com^
+||smetrics.johnfrieda.com^
+||smetrics.johnhancock.com^
+||smetrics.joules.com^
+||smetrics.joulesusa.com^
+||smetrics.jpmorgan.com^
+||smetrics.jre-travel.com^
+||smetrics.juiceplus.com^
+||smetrics.jumpforward.com^
+||smetrics.jumpradio.ca^
+||smetrics.junsungki.com^
+||smetrics.jwpepper.com^
+||smetrics.jynarque.com^
+||smetrics.jynarquehcp.com^
+||smetrics.kadcyla.com^
+||smetrics.kaercher.com^
+||smetrics.kaiserpermanente.org^
+||smetrics.kalevavakuutus.fi^
+||smetrics.kamloopshonda.ca^
+||smetrics.kanebo-cosmetics.co.jp^
+||smetrics.kanebo-cosmetics.jp^
+||smetrics.kanebo-forum.net^
+||smetrics.kanebo-global.com^
+||smetrics.kanebo.com^
+||smetrics.kanebocos.net^
+||smetrics.kanen-net.info^
+||smetrics.kansasfarmer.com^
+||smetrics.kao-kirei.com^
+||smetrics.kao.co.jp^
+||smetrics.kao.com^
+||smetrics.kaobeautybrands.com^
+||smetrics.kaptest.com^
+||smetrics.karcher-futuretech.com^
+||smetrics.karcher.cn^
+||smetrics.karcher.com^
+||smetrics.karcher.cz^
+||smetrics.kate-global.net^
+||smetrics.kawai-juku.ac.jp^
+||smetrics.kay.com^
+||smetrics.kayosports.com.au^
+||smetrics.kayoutlet.com^
+||smetrics.kbb.com^
+||smetrics.kebuena.com.mx^
+||smetrics.kelownachev.com^
+||smetrics.kelownatoyota.com^
+||smetrics.kendall.edu^
+||smetrics.kennethcole.com^
+||smetrics.kenwood.com^
+||smetrics.kerry.com^
+||smetrics.ketsusen.jp^
+||smetrics.keysight.co.kr^
+||smetrics.keysight.com.cn^
+||smetrics.keysight.com^
+||smetrics.kioxia-holdings.com^
+||smetrics.kioxia-iwate.co.jp^
+||smetrics.kioxia.com.cn^
+||smetrics.kioxia.com^
+||smetrics.kipling-usa.com^
+||smetrics.kipling.com^
+||smetrics.klikklan.no^
+||smetrics.kmshair.com^
+||smetrics.knowpneumonia.com^
+||smetrics.kol.se^
+||smetrics.kone.ae^
+||smetrics.kone.at^
+||smetrics.kone.be^
+||smetrics.kone.bg^
+||smetrics.kone.bi^
+||smetrics.kone.ca^
+||smetrics.kone.ch^
+||smetrics.kone.cn^
+||smetrics.kone.co.id^
+||smetrics.kone.co.il^
+||smetrics.kone.co.ke^
+||smetrics.kone.co.nz^
+||smetrics.kone.co.uk^
+||smetrics.kone.co.za^
+||smetrics.kone.com.au^
+||smetrics.kone.com.cy^
+||smetrics.kone.com.kh^
+||smetrics.kone.com.tr^
+||smetrics.kone.com^
+||smetrics.kone.cz^
+||smetrics.kone.de^
+||smetrics.kone.dk^
+||smetrics.kone.ee^
+||smetrics.kone.eg^
+||smetrics.kone.es^
+||smetrics.kone.fr^
+||smetrics.kone.gr^
+||smetrics.kone.hk^
+||smetrics.kone.hu^
+||smetrics.kone.ie^
+||smetrics.kone.in^
+||smetrics.kone.is^
+||smetrics.kone.it^
+||smetrics.kone.lt^
+||smetrics.kone.lv^
+||smetrics.kone.mx^
+||smetrics.kone.nl^
+||smetrics.kone.no^
+||smetrics.kone.om^
+||smetrics.kone.pt^
+||smetrics.kone.rs^
+||smetrics.kone.ru^
+||smetrics.kone.se^
+||smetrics.kone.sk^
+||smetrics.kone.us^
+||smetrics.kone.vn^
+||smetrics.kowa-h.com^
+||smetrics.kpmg.com^
+||smetrics.kpmg.us^
+||smetrics.krebs.de^
+||smetrics.krugerseed.com^
+||smetrics.kyndryl.com^
+||smetrics.labaie.com^
+||smetrics.labsafety.com^
+||smetrics.lacounty.gov^
+||smetrics.ladbrokes.be^
+||smetrics.lakeshorelearning.com^
+||smetrics.lakeside.com^
+||smetrics.lakewoodchev.com^
+||smetrics.lalavla.com^
+||smetrics.lambweston.com^
+||smetrics.landa.com^
+||smetrics.landg-life.com^
+||smetrics.landg.com^
+||smetrics.landolakes.com^
+||smetrics.landolakesfoodservice.com^
+||smetrics.landolakesinc.com^
+||smetrics.landrover.com^
+||smetrics.landrover.de^
+||smetrics.lanebryant.com^
+||smetrics.laredoute.fr^
+||smetrics.lasexta.com^
+||smetrics.latitudefinancial.co.nz^
+||smetrics.latitudefinancial.com.au^
+||smetrics.latitudefinancial.com^
+||smetrics.latitudepay.com.au^
+||smetrics.latitudepay.com^
+||smetrics.latrobe.edu.au^
+||smetrics.lazarediamond.jp^
+||smetrics.lcbo.com^
+||smetrics.ldproducts.com^
+||smetrics.leagueone.com^
+||smetrics.leasy.com^
+||smetrics.leasy.dk^
+||smetrics.leasy.se^
+||smetrics.legalandgeneral.com^
+||smetrics.leisuretimepassport.com^
+||smetrics.lenscrafters.ca^
+||smetrics.lenscrafters.com^
+||smetrics.leonardo.essilorluxottica.com^
+||smetrics.lesbonnesbouilles.fr^
+||smetrics.lexmark.com^
+||smetrics.lexus.com^
+||smetrics.lexusonthepark.ca^
+||smetrics.libertymutual.com^
+||smetrics.lidea.today^
+||smetrics.lifestride.com^
+||smetrics.lifetime.life^
+||smetrics.lifree.com^
+||smetrics.lilly.com^
+||smetrics.lillymedical.com^
+||smetrics.lina.co.kr^
+||smetrics.lissage.jp^
+||smetrics.liveitup.com^
+||smetrics.livetmedsklerose.dk^
+||smetrics.lizearle.com^
+||smetrics.lloydslist.com^
+||smetrics.lloydslistintelligence.com^
+||smetrics.lmtonline.com^
+||smetrics.loblaws.ca^
+||smetrics.loewshotels.com^
+||smetrics.loft.com^
+||smetrics.looksmart.com^
+||smetrics.lordabbett.com^
+||smetrics.los40.cl^
+||smetrics.los40.com.co^
+||smetrics.los40.com^
+||smetrics.louandgrey.com^
+||smetrics.louisianahealthconnect.com^
+||smetrics.lowes.com^
+||smetrics.lpl.com^
+||smetrics.ltdcommodities.com^
+||smetrics.lucentis.com^
+||smetrics.lululemon.ch^
+||smetrics.lululemon.cn^
+||smetrics.lululemon.co.jp^
+||smetrics.lululemon.co.kr^
+||smetrics.lululemon.co.nz^
+||smetrics.lululemon.co.uk^
+||smetrics.lululemon.com.au^
+||smetrics.lululemon.com.hk^
+||smetrics.lululemon.com^
+||smetrics.lululemon.de^
+||smetrics.lululemon.es^
+||smetrics.lululemon.fr^
+||smetrics.lululemon.jp^
+||smetrics.lundbeck.com^
+||smetrics.luxilon.com^
+||smetrics.lww.com^
+||smetrics.m1.com.sg^
+||smetrics.mabanque.bnpparibas^
+||smetrics.mackenzieinvestments.com^
+||smetrics.maclinfordcalgary.com^
+||smetrics.macquarie.com.au^
+||smetrics.madewell.com^
+||smetrics.maestrocard.com^
+||smetrics.magic106.com^
+||smetrics.magnoliahealthplan.com^
+||smetrics.magnumicecream.com^
+||smetrics.majeitsubishi-motors.com.au^
+||smetrics.malnutrition.com^
+||smetrics.mandai.com^
+||smetrics.mandatumam.com^
+||smetrics.manpower.com^
+||smetrics.marathonthegame.com^
+||smetrics.marcus.com^
+||smetrics.markandgraham.ca^
+||smetrics.market.uk^
+||smetrics.marketfor.com^
+||smetrics.marketing.attralux.com^
+||smetrics.marketing.colorkinetics.com^
+||smetrics.marketing.interact-lighting.com.cn^
+||smetrics.marketing.lighting.philips.at^
+||smetrics.marketing.lighting.philips.be^
+||smetrics.marketing.lighting.philips.bg^
+||smetrics.marketing.lighting.philips.ca^
+||smetrics.marketing.lighting.philips.ch^
+||smetrics.marketing.lighting.philips.cl^
+||smetrics.marketing.lighting.philips.co.id^
+||smetrics.marketing.lighting.philips.co.il^
+||smetrics.marketing.lighting.philips.co.in^
+||smetrics.marketing.lighting.philips.co.kr^
+||smetrics.marketing.lighting.philips.co.nz^
+||smetrics.marketing.lighting.philips.co.th^
+||smetrics.marketing.lighting.philips.co.uk^
+||smetrics.marketing.lighting.philips.co.za^
+||smetrics.marketing.lighting.philips.com.ar^
+||smetrics.marketing.lighting.philips.com.au^
+||smetrics.marketing.lighting.philips.com.cn^
+||smetrics.marketing.lighting.philips.com.co^
+||smetrics.marketing.lighting.philips.com.eg^
+||smetrics.marketing.lighting.philips.com.hk^
+||smetrics.marketing.lighting.philips.com.mx^
+||smetrics.marketing.lighting.philips.com.my^
+||smetrics.marketing.lighting.philips.com.pe^
+||smetrics.marketing.lighting.philips.com.ph^
+||smetrics.marketing.lighting.philips.com.pk^
+||smetrics.marketing.lighting.philips.com.sg^
+||smetrics.marketing.lighting.philips.com.tr^
+||smetrics.marketing.lighting.philips.com.tw^
+||smetrics.marketing.lighting.philips.com.vn^
+||smetrics.marketing.lighting.philips.com^
+||smetrics.marketing.lighting.philips.cz^
+||smetrics.marketing.lighting.philips.de^
+||smetrics.marketing.lighting.philips.dk^
+||smetrics.marketing.lighting.philips.ee^
+||smetrics.marketing.lighting.philips.es^
+||smetrics.marketing.lighting.philips.fi^
+||smetrics.marketing.lighting.philips.fr^
+||smetrics.marketing.lighting.philips.gr^
+||smetrics.martinfurnitureexperts.com^
+||smetrics.mastercardadvisors.com^
+||smetrics.mastercardbrandcenter.com^
+||smetrics.mastercardbusiness.com^
+||smetrics.mastercardeasysavings.com^
+||smetrics.mastercardintl.com^
+||smetrics.mastercardmoments.com^
+||smetrics.med-iq.com^
+||smetrics.metacam.com^
+||smetrics.microtelinn.com^
+||smetrics.midatlantic.aaa.com^
+||smetrics.mieten.mercedes-benz.de^
+||smetrics.miles-and-more.com^
+||smetrics.mindjet.com^
+||smetrics.minisom.pt^
+||smetrics.miniusa.com^
+||smetrics.minsteronline.co.uk^
+||smetrics.miracle-ear.com^
+||smetrics.misrp.com^
+||smetrics.mitracliphospitalkit.com^
+||smetrics.mitrelinen.co.uk^
+||smetrics.miumiu.com^
+||smetrics.mizuno.com^
+||smetrics.mizuno.jp^
+||smetrics.modernatx.com^
+||smetrics.modernhealthcare.com^
+||smetrics.modernpostcard.com^
+||smetrics.mollymaid.com^
+||smetrics.monaco.pwc.fr^
+||smetrics.moncoeurmavie.ca^
+||smetrics.mondex.com^
+||smetrics.moneta.cz^
+||smetrics.monetaauto.cz^
+||smetrics.monetaleasing.cz^
+||smetrics.moneymarketing.co.uk^
+||smetrics.monsanto.com^
+||smetrics.moodys.com^
+||smetrics.moony.com^
+||smetrics.moosejaw.com^
+||smetrics.morganstanley.com^
+||smetrics.mosquitojoe.com^
+||smetrics.motegrity.com^
+||smetrics.motioncanada.ca^
+||smetrics.motionindustries.com^
+||smetrics.motorsportreg.com^
+||smetrics.motortrend.com^
+||smetrics.mounjaro.com^
+||smetrics.mouse-jp.co.jp^
+||smetrics.movietickets.com^
+||smetrics.moving.com^
+||smetrics.mphasis.com^
+||smetrics.mrappliance.ca^
+||smetrics.mrappliance.com^
+||smetrics.mrelectric.com^
+||smetrics.mrhandyman.ca^
+||smetrics.mrhandyman.com^
+||smetrics.mro-network.com^
+||smetrics.mrplumberatlanta.com^
+||smetrics.mrplumberindy.com^
+||smetrics.mrporter.com^
+||smetrics.mrrooter.ca^
+||smetrics.mrrooter.com^
+||smetrics.msg.com^
+||smetrics.mslifelines.com^
+||smetrics.msvoice.com^
+||smetrics.mtu-solutions.com^
+||smetrics.mufso.com^
+||smetrics.mulberry.com^
+||smetrics.multikino.pl^
+||smetrics.multiverso-fbbva.es^
+||smetrics.multiview.com^
+||smetrics.murata.com^
+||smetrics.mutua.es^
+||smetrics.mutuactivos.com^
+||smetrics.mutuateayuda.es^
+||smetrics.mybenefits.com.au^
+||smetrics.mybonuscenter.com^
+||smetrics.mycareforward.com^
+||smetrics.mycontrolcard.com^
+||smetrics.mydccu.com^
+||smetrics.mydish.com^
+||smetrics.myfreestyle.com^
+||smetrics.myhealthtoolkit.com^
+||smetrics.myio.com.au^
+||smetrics.mykirei.com^
+||smetrics.mylifestages.org^
+||smetrics.mymatrixx.com^
+||smetrics.mymercy.net^
+||smetrics.myonlineservices.ch^
+||smetrics.myrecipes.com^
+||smetrics.mysanantonio.com^
+||smetrics.mysensiva.com^
+||smetrics.myspringfield.com^
+||smetrics.myspringfield.mx^
+||smetrics.mystudywindow.com^
+||smetrics.myvi.in^
+||smetrics.myyellow.com^
+||smetrics.nab.com.au^
+||smetrics.nabbroker.com.au^
+||smetrics.nabtrade.com.au^
+||smetrics.nadaguides.com^
+||smetrics.nadro.mx^
+||smetrics.namestudio.com^
+||smetrics.napaonline.com^
+||smetrics.napaprolink.ca^
+||smetrics.napaprolink.com^
+||smetrics.nascar.com^
+||smetrics.nationalbusinessfurniture.com^
+||smetrics.nationalgeneral.com^
+||smetrics.nationalgrid.com^
+||smetrics.nationalgrideso.com^
+||smetrics.nationalhogfarmer.com^
+||smetrics.nationaltrust.org.uk^
+||smetrics.nationwide.co.uk^
+||smetrics.naturalizer.ca^
+||smetrics.naturalizer.com^
+||smetrics.nba.com^
+||smetrics.nbjsummit.com^
+||smetrics.ncbank.co.jp^
+||smetrics.nebraskafarmer.com^
+||smetrics.nebraskatotalcare.com^
+||smetrics.neighborly.com^
+||smetrics.neighborlybrands.com^
+||smetrics.neighbourly.ca^
+||smetrics.nepro.com^
+||smetrics.nerium.kr^
+||smetrics.nesn.com^
+||smetrics.net-a-porter.com^
+||smetrics.netspend.com^
+||smetrics.nettokom.de^
+||smetrics.netxpress.biz^
+||smetrics.new.wyndhamvrap.com^
+||smetrics.newark.com^
+||smetrics.newbalance.com^
+||smetrics.newequipment.com^
+||smetrics.newfoundlandgrocerystores.ca^
+||smetrics.newport.com^
+||smetrics.news.co.uk^
+||smetrics.nexgardfordogs.com^
+||smetrics.nexium24hr.com^
+||smetrics.nexmo.com^
+||smetrics.nfl.com^
+||smetrics.nfpa.org^
+||smetrics.nhhealthyfamilies.com^
+||smetrics.ni.com^
+||smetrics.nielsen.com^
+||smetrics.nijobs.com^
+||smetrics.nike.net^
+||smetrics.nikonusa.com^
+||smetrics.nintendo.com^
+||smetrics.nisbets.be^
+||smetrics.nisbets.co.nz^
+||smetrics.nisbets.co.uk^
+||smetrics.nisbets.com.au^
+||smetrics.nisbets.de^
+||smetrics.nisbets.fr^
+||smetrics.nisbets.ie^
+||smetrics.nisbets.nl^
+||smetrics.nissanusa.com^
+||smetrics.noblehome.co.jp^
+||smetrics.nofrills.ca^
+||smetrics.noloan.com^
+||smetrics.nomorerules.net^
+||smetrics.nordiclaan.se^
+||smetrics.northernterritory.com^
+||smetrics.notimetowait.com^
+||smetrics.nottingham.ac.uk^
+||smetrics.nowtv.com^
+||smetrics.nowtv.it^
+||smetrics.npr.org^
+||smetrics.npubank.com.au^
+||smetrics.nrhtx.com^
+||smetrics.nrn.com^
+||smetrics.ntkm2.com^
+||smetrics.nuedexta.com^
+||smetrics.nuedextahcp.com^
+||smetrics.nutrisystem.com^
+||smetrics.nutritionmatters.com^
+||smetrics.nutropin.com^
+||smetrics.nvidia.com^
+||smetrics.nycgo.com^
+||smetrics.nykaa.com^
+||smetrics.nykaafashion.com^
+||smetrics.nykaaman.com^
+||smetrics.nylaarp.com^
+||smetrics.nyulangone.org^
+||smetrics.o2online.de^
+||smetrics.oakley.com^
+||smetrics.oakleysi.com^
+||smetrics.obirin.ac.jp^
+||smetrics.oceaniacruises.com^
+||smetrics.oclc.org^
+||smetrics.ocrelizumabinfo.com^
+||smetrics.ocrevus.com^
+||smetrics.oerproject.com^
+||smetrics.officefurniture.com^
+||smetrics.officeworks.com.au^
+||smetrics.ohiofarmer.com^
+||smetrics.ok.dk^
+||smetrics.okcashbag.com^
+||smetrics.oliverpeoples.com^
+||smetrics.omdia.com^
+||smetrics.omniture.com^
+||smetrics.ondacero.es^
+||smetrics.onetrust.com^
+||smetrics.ontechsmartservices.com^
+||smetrics.onureg.ch^
+||smetrics.onward.co.jp^
+||smetrics.opdivo.com^
+||smetrics.opdivo.dk^
+||smetrics.opdivohcp.com^
+||smetrics.opdualag.com^
+||smetrics.openboxdirect.com^
+||smetrics.openshift.com^
+||smetrics.opensource.com^
+||smetrics.opnme.com^
+||smetrics.opodo.co.uk^
+||smetrics.opsm.co.nz^
+||smetrics.opsm.com.au^
+||smetrics.optimum.com^
+||smetrics.optimum.net^
+||smetrics.optum.com^
+||smetrics.orangetheory.com^
+||smetrics.oreilly.com^
+||smetrics.orencia.com^
+||smetrics.orenciahcp.com^
+||smetrics.orenciapatient.se^
+||smetrics.orlandofuntickets.com^
+||smetrics.otsuka-us.com^
+||smetrics.ott.showmax.com^
+||smetrics.ovumkc.com^
+||smetrics.ownertoownercommunication.com^
+||smetrics.oxfam.org.uk^
+||smetrics.packersproshop.com^
+||smetrics.pacsun.com^
+||smetrics.pahealthwellness.com^
+||smetrics.pakietyserwisowe.pl^
+||smetrics.palaceresorts.com^
+||smetrics.palopmed.com^
+||smetrics.panasonic.biz^
+||smetrics.panasonic.jp^
+||smetrics.panasonic.net^
+||smetrics.pandora.com^
+||smetrics.pandora.net^
+||smetrics.panduit.com^
+||smetrics.panerabread.com^
+||smetrics.parasitenportal.de^
+||smetrics.parkerandsons.com^
+||smetrics.partnerbrands.com^
+||smetrics.partnermastercard.com^
+||smetrics.payback.at^
+||smetrics.payback.de^
+||smetrics.payback.in^
+||smetrics.payback.it^
+||smetrics.payback.mx^
+||smetrics.payback.net^
+||smetrics.payback.pl^
+||smetrics.paymarkfinans.dk^
+||smetrics.paymarkfinans.se^
+||smetrics.payment-estimator.vwcredit.com^
+||smetrics.paysafecard.com^
+||smetrics.pbainfo.org^
+||smetrics.pbteen.ca^
+||smetrics.pbteen.com^
+||smetrics.pch.com^
+||smetrics.pcid.ca^
+||smetrics.pcoptimum.ca^
+||smetrics.pcrichard.com^
+||smetrics.pdt.r-agent.com^
+||smetrics.pe.com^
+||smetrics.peachjohn.co.jp^
+||smetrics.peakperformance.com^
+||smetrics.pearlevision.ca^
+||smetrics.pearlevision.com^
+||smetrics.pebblebeach.com^
+||smetrics.pedialyte.com^
+||smetrics.pediasure.com.my^
+||smetrics.pediasure.com^
+||smetrics.pedrodelhierro.com^
+||smetrics.peggy991.com^
+||smetrics.penfed.org^
+||smetrics.penguin.co.uk^
+||smetrics.pennymacusa.com^
+||smetrics.pensionstallet.dk^
+||smetrics.people.com^
+||smetrics.peoplepets.com^
+||smetrics.peoplesjewellers.com^
+||smetrics.performgroup.com^
+||smetrics.perjeta.com^
+||smetrics.persol.com^
+||smetrics.personalwirtschaft.de^
+||smetrics.petbarn.com.au^
+||smetrics.petcentric.com^
+||smetrics.petco.com^
+||smetrics.petersmithcadillac.com^
+||smetrics.petersmithgm.com^
+||smetrics.petvaccinesclinic.com^
+||smetrics.pexion.co.uk^
+||smetrics.pfa.dk^
+||smetrics.pfaassetmanagement.dk^
+||smetrics.pfabank.dk^
+||smetrics.pfaejendomme.dk^
+||smetrics.pfizer.com^
+||smetrics.pfizercemp.com^
+||smetrics.pflege-onkologie.de^
+||smetrics.pgford.ca^
+||smetrics.pgi.com^
+||smetrics.pharmaintelligence.informa.com^
+||smetrics.phesgo.com^
+||smetrics.phoenix.edu^
+||smetrics.phoenixinwest.de^
+||smetrics.photos.com^
+||smetrics.pictet.com^
+||smetrics.pinkribbonbottle.com^
+||smetrics.pionline.com^
+||smetrics.plansponsor.com^
+||smetrics.plasticsnews.com^
+||smetrics.platformservices.co.uk^
+||smetrics.platypusshoes.com.au^
+||smetrics.playcard.com^
+||smetrics.playforpurpose.com.au^
+||smetrics.plumbenefits.com^
+||smetrics.plumbingtoday.biz^
+||smetrics.plumblineservices.com^
+||smetrics.plymouthrock.com^
+||smetrics.pmis.abbott.com^
+||smetrics.podiumpodcast.com^
+||smetrics.pods.com^
+||smetrics.politico.com^
+||smetrics.politicopro.com^
+||smetrics.pordentrodaesclerodermia.com.br^
+||smetrics.potterybarn.ca^
+||smetrics.potterybarnkids.ca^
+||smetrics.powerelectronics.com^
+||smetrics.poweritpro.com^
+||smetrics.powertracagri.com^
+||smetrics.prada.com^
+||smetrics.pradaxapatient.se^
+||smetrics.prado.com.sv^
+||smetrics.preautorizacionfs.com^
+||smetrics.precisionmedicineonline.com^
+||smetrics.prestigeclub.in^
+||smetrics.previcox.d^
+||smetrics.prndl.com^
+||smetrics.ralphlauren.com.au^
+||smetrics.ralphlauren.com.my^
+||smetrics.ralphlauren.com.sg^
+||smetrics.ralphlauren.com.tw^
+||smetrics.ralphlauren.global^
+||smetrics.ralphlauren.nl^
+||smetrics.ralphlauren.pt^
+||smetrics.rate.com^
+||smetrics.realpropertymgt.com^
+||smetrics.recruit.co.jp^
+||smetrics.redcapnow.com^
+||smetrics.rejuvenationhome.ca^
+||smetrics.rent.mercedes-benz.ch^
+||smetrics.rent.mercedes-benz.co.jp^
+||smetrics.rentprogress.com^
+||smetrics.repco.co.nz^
+||smetrics.repco.com.au^
+||smetrics.resortdeveloper.com^
+||smetrics.respimat.com^
+||smetrics.restaurant.com^
+||smetrics.retailagents.tui.co.uk^
+||smetrics.rethinksma.com^
+||smetrics.rexulti.com^
+||smetrics.rexultihcp.com^
+||smetrics.riamoneytransfer.com^
+||smetrics.rimac.com^
+||smetrics.rinpashu.jp^
+||smetrics.riteaid.com^
+||smetrics.rituxan.com^
+||smetrics.rituxanforgpampa-hcp.com^
+||smetrics.rituxanforgpampa.com^
+||smetrics.rituxanforpv.com^
+||smetrics.rituxanforra-hcp.com^
+||smetrics.rituxanforra.com^
+||smetrics.rituxanhycela.com^
+||smetrics.rlicorp.com^
+||smetrics.robeco.com^
+||smetrics.robeco.nl^
+||smetrics.roche-applied-science.com^
+||smetrics.roche-infohub.co.za^
+||smetrics.roche.com^
+||smetrics.rochehelse.no^
+||smetrics.rochemd.bg^
+||smetrics.rochenet.pt^
+||smetrics.rocheonline.net^
+||smetrics.rocheplus.es^
+||smetrics.rochepro-eg.com^
+||smetrics.rochepro.hr^
+||smetrics.rock101.com^
+||smetrics.rockandpop.cl^
+||smetrics.rockettes.com^
+||smetrics.roland.com^
+||smetrics.rolex.com^
+||smetrics.roomandboard.com^
+||smetrics.roomservicebycort.com^
+||smetrics.royalcaribbean.com^
+||smetrics.rozlytrek.com^
+||smetrics.rtl.nl^
+||smetrics.rubbernews.com^
+||smetrics.runbabyrun.fr^
+||smetrics.ryka.com^
+||smetrics.safeauto.com^
+||smetrics.sainsburysbank.co.uk^
+||smetrics.saks.com^
+||smetrics.saksoff5th.com^
+||smetrics.salliemae.com^
+||smetrics.salomon.com^
+||smetrics.samedelman.ca^
+||smetrics.samedelman.com^
+||smetrics.samsung.com.cn^
+||smetrics.samsung.com^
+||smetrics.samsunglife.com^
+||smetrics.sanagate.ch^
+||smetrics.sandbox.ford.com^
+||smetrics.santander.co.uk^
+||smetrics.santandertravelinsurance.co.uk^
+||smetrics.sap.com^
+||smetrics.saseurobonusmastercard.dk^
+||smetrics.saseurobonusmastercard.no^
+||smetrics.saseurobonusmastercard.se^
+||smetrics.sasktel.com^
+||smetrics.saudiairlines.com^
+||smetrics.savethechildren.org.uk^
+||smetrics.saxobank.com^
+||smetrics.saxxanlage.ostsaechsische-sparkasse-dresden.de^
+||smetrics.sazerac.com^
+||smetrics.sazeracbarrelselect.com^
+||smetrics.sazerachouse.com^
+||smetrics.sbisec.co.jp^
+||smetrics.sbishinseibank.co.jp^
+||smetrics.sbs.com.au^
+||smetrics.scandichotels.com^
+||smetrics.scandichotels.de^
+||smetrics.scandichotels.dk^
+||smetrics.scandichotels.fi^
+||smetrics.scandichotels.no^
+||smetrics.scandichotels.se^
+||smetrics.scarboroughtoyota.ca^
+||smetrics.schindler-berufsbildung.ch^
+||smetrics.schindler.ae^
+||smetrics.schindler.ch^
+||smetrics.schindler.cl^
+||smetrics.schindler.cn^
+||smetrics.schindler.co.id^
+||smetrics.schindler.co.il^
+||smetrics.schindler.co.th^
+||smetrics.schindler.co.uk^
+||smetrics.schindler.co.za^
+||smetrics.schindler.co^
+||smetrics.schindler.com.br^
+||smetrics.schindler.com.tr^
+||smetrics.schindler.com^
+||smetrics.schindler.de^
+||smetrics.schindler.eg^
+||smetrics.schindler.es^
+||smetrics.schindler.fi^
+||smetrics.schindler.fr^
+||smetrics.schindler.in^
+||smetrics.schindler.it^
+||smetrics.schindler.lt^
+||smetrics.schindler.lu^
+||smetrics.schindler.ma^
+||smetrics.schindler.mt^
+||smetrics.schindler.mx^
+||smetrics.schindler.my^
+||smetrics.schindler.pe^
+||smetrics.schindler.pl^
+||smetrics.schindler.pt^
+||smetrics.schindler.ro^
+||smetrics.schindler.sa^
+||smetrics.schindler.sg^
+||smetrics.schindler.sk^
+||smetrics.schindler.vn^
+||smetrics.schwans.com^
+||smetrics.science.org^
+||smetrics.sciencecareers.org^
+||smetrics.sciencemagazinedigital.org^
+||smetrics.sdcvisit.com^
+||smetrics.seabourn.com^
+||smetrics.seasearcher.com^
+||smetrics.seat-italia.it^
+||smetrics.seat.be^
+||smetrics.seat.ch^
+||smetrics.seat.co.nz^
+||smetrics.seat.co.uk^
+||smetrics.seat.com^
+||smetrics.seat.de^
+||smetrics.seat.es^
+||smetrics.seat.fi^
+||smetrics.seat.fr^
+||smetrics.seat.ie^
+||smetrics.seat.mx^
+||smetrics.seat.pl^
+||smetrics.seat.ps^
+||smetrics.seat.se^
+||smetrics.seat.sg^
+||smetrics.seat.tn^
+||smetrics.seawheeze.com^
+||smetrics.seb.ee^
+||smetrics.seb.lt^
+||smetrics.seb.lv^
+||smetrics.sebgroup.com^
+||smetrics.sebkort.com^
+||smetrics.secureremserv.com.au^
+||smetrics.seeeliquisevidence.com^
+||smetrics.seguro.mediaset.es^
+||smetrics.seic.com^
+||smetrics.selectquote.com^
+||smetrics.seloger.com^
+||smetrics.sen.com.au^
+||smetrics.sensai-cosmetics.com^
+||smetrics.sephora.com^
+||smetrics.sephora.fr^
+||smetrics.sephora.it^
+||smetrics.sephora.pl^
+||smetrics.seriesplus.com^
+||smetrics.servicechampions.net^
+||smetrics.severntrent.com^
+||smetrics.sfr.fr^
+||smetrics.shangri-la.com^
+||smetrics.shannons.com.au^
+||smetrics.sharekhan.com^
+||smetrics.sheen.jp^
+||smetrics.shell.co.uk^
+||smetrics.shellenergy.co.uk^
+||smetrics.sherwoodbuickgmc.com^
+||smetrics.sherwoodmotorcars.com^
+||smetrics.sherwoodparkchev.com^
+||smetrics.shihang.org^
+||smetrics.shionogi.co.jp^
+||smetrics.shionogi.tv^
+||smetrics.sho.com^
+||smetrics.shop.mrbostondrinks.com^
+||smetrics.shop.superstore.ca^
+||smetrics.shopdisney.in^
+||smetrics.shopjapan.co.jp^
+||smetrics.shopmyexchange.com^
+||smetrics.shopoon.fr^
+||smetrics.shoppersdrugmart.ca^
+||smetrics.shoppremiumoutlets.com^
+||smetrics.showcase.ca^
+||smetrics.showtickets.com^
+||smetrics.showtime.com^
+||smetrics.showtimeanytime.com^
+||smetrics.siapnge.com^
+||smetrics.siblu.de^
+||smetrics.siblu.nl^
+||smetrics.sierra.com^
+||smetrics.silversummithealthplan.com^
+||smetrics.simargenta.be^
+||smetrics.simplyink.com^
+||smetrics.singlife.com^
+||smetrics.siriusxm.ca^
+||smetrics.siriusxm.com^
+||smetrics.sisal.it^
+||smetrics.sivasdescalzo.com^
+||smetrics.sj.se^
+||smetrics.sjmtech.ma^
+||smetrics.skandia.se^
+||smetrics.skechers.co.nz^
+||smetrics.skechers.com.au^
+||smetrics.skiphop.com^
+||smetrics.skipton.co.uk^
+||smetrics.skodafinancialservices.nl^
+||smetrics.sky.com^
+||smetrics.sky.de^
+||smetrics.sky.es^
+||smetrics.sky.it^
+||smetrics.skyhighsecurity.com^
+||smetrics.slcmanagement.com^
+||smetrics.sleepnumber.com^
+||smetrics.sling.com^
+||smetrics.slugger.com^
+||smetrics.smart-invest.sparkasse-wuppertal.de^
+||smetrics.smartcommerce.amazon.in^
+||smetrics.smartervacations.com^
+||smetrics.smartvermoegen.de^
+||smetrics.smbcnikko.co.jp^
+||smetrics.smtb.jp^
+||smetrics.snapfish.ca^
+||smetrics.snapfish.ch^
+||smetrics.snapfish.co.nz^
+||smetrics.snapfish.co.uk^
+||smetrics.snapfish.com.au^
+||smetrics.snapfish.fr^
+||smetrics.snapfish.it^
+||smetrics.snapfish.nl^
+||smetrics.snapfish.no^
+||smetrics.snapfish.pt^
+||smetrics.snapfish.se^
+||smetrics.societyofvaluedminds.org^
+||smetrics.softwareag.com^
+||smetrics.solidigm.com^
+||smetrics.solidigm.de^
+||smetrics.solidigmtechnology.cn^
+||smetrics.solidigmtechnology.jp^
+||smetrics.solidigmtechnology.kr^
+||smetrics.solinst.com^
+||smetrics.solomobile.ca^
+||smetrics.solvingmdddisconnect.com^
+||smetrics.sony.com^
+||smetrics.sony.jp^
+||smetrics.sothebys.com^
+||smetrics.sotyktu.com^
+||smetrics.sotyktuhcp.com^
+||smetrics.southaustralia.com^
+||smetrics.southerncomfort.com^
+||smetrics.southernglazers.com^
+||smetrics.southwestwifi.com^
+||smetrics.spaf-academy.pl^
+||smetrics.sparkassendirekt.de^
+||smetrics.sparksites.com^
+||smetrics.spela.svenskaspel.se^
+||smetrics.spendwise.no^
+||smetrics.spendwise.se^
+||smetrics.spiriva.com^
+||smetrics.sportsbet.com.au^
+||smetrics.sportsmansguide.com^
+||smetrics.sprycel.com^
+||smetrics.sptoyota.com^
+||smetrics.srpmarketplace.com^
+||smetrics.srpnet.com^
+||smetrics.srptelecom.com^
+||smetrics.ssfcu.org^
+||smetrics.ssga.com^
+||smetrics.stanfordchildrens.org^
+||smetrics.stanfordhealthcare.org^
+||smetrics.staples.com^
+||smetrics.staplesadvantage.co.nz^
+||smetrics.staplesadvantage.com^
+||smetrics.starhub.com^
+||smetrics.stark.dk^
+||smetrics.startribune.com^
+||smetrics.statefarm.com^
+||smetrics.statestreet.com^
+||smetrics.statnews.com^
+||smetrics.stewartseeds.com^
+||smetrics.stgeorge.com.au^
+||smetrics.store.irobot.com^
+||smetrics.store.nascar.com^
+||smetrics.store360.luxottica.com^
+||smetrics.strategyand.pwc.com^
+||smetrics.striderite.com^
+||smetrics.strokeawareness.com^
+||smetrics.stubhub.co.uk^
+||smetrics.stwater.co.uk^
+||smetrics.stylefind.com^
+||smetrics.stylintrucks.com^
+||smetrics.subaruofsaskatoon.ca^
+||smetrics.suisai-global.net^
+||smetrics.sumaiida.com^
+||smetrics.sumitclub.jp^
+||smetrics.sun.com^
+||smetrics.suncorp.co.nz^
+||smetrics.suncorp.com.au^
+||smetrics.suncorpbank.com.au^
+||smetrics.sunflowerhealthplan.com^
+||smetrics.sunglasshut.com^
+||smetrics.sunlife.ca^
+||smetrics.sunlife.co.id^
+||smetrics.sunlife.com.vn^
+||smetrics.sunlife.com^
+||smetrics.sunlife.ie^
+||smetrics.sunlifeconnect.com^
+||smetrics.sunlifefinancialtrust.ca^
+||smetrics.sunlifeglobalinvestments.com^
+||smetrics.sunpower.com^
+||smetrics.sunshinehealth.com^
+||smetrics.super8.com^
+||smetrics.supercuts.com^
+||smetrics.superfleet.net^
+||smetrics.superiorhealthplan.com^
+||smetrics.supermarketnews.com^
+||smetrics.suppliesguys.com^
+||smetrics.support.e-abbott.com^
+||smetrics.sustainableplastics.com^
+||smetrics.suunto.com^
+||smetrics.svd.se^
+||smetrics.swalife.com^
+||smetrics.swinburne.edu.au^
+||smetrics.swisslife-select.de^
+||smetrics.sybase.com^
+||smetrics.sympany.ch^
+||smetrics.synergy.net.au^
+||smetrics.synjardyhcp.com^
+||smetrics.synopsys.com^
+||smetrics.t-mobile.com^
+||smetrics.t-mobilemoney.com^
+||smetrics.tab.com.au^
+||smetrics.tabletable.co.uk^
+||smetrics.tackntogs.com^
+||smetrics.takami-labo.com^
+||smetrics.talbots.com^
+||smetrics.tamiflu.com^
+||smetrics.tarceva.com^
+||smetrics.target.com^
+||smetrics.targetoptical.com^
+||smetrics.tataaig.com^
+||smetrics.taxi.com^
+||smetrics.taylormadegolf.com^
+||smetrics.taymark.taylorcorp.com^
+||smetrics.tbs.com^
+||smetrics.tcm.com^
+||smetrics.tcs.com^
+||smetrics.tdworld.com^
+||smetrics.te.com^
+||smetrics.teachforamerica.org^
+||smetrics.teambeachbody.com^
+||smetrics.tecentriq-hcp.com^
+||smetrics.tecentriq.com^
+||smetrics.tecoloco.co.cr^
+||smetrics.tecoloco.com.gt^
+||smetrics.tedbaker.com^
+||smetrics.telegraph.co.uk^
+||smetrics.telenet.be^
+||smetrics.telenor.dk^
+||smetrics.telenor.se^
+||smetrics.ten.com.au^
+||smetrics.tesco.com^
+||smetrics.tescobank.com^
+||smetrics.textbooks.com^
+||smetrics.tfl.gov.uk^
+||smetrics.tgifridays.com^
+||smetrics.tgw.com^
+||smetrics.the-farmer.com^
+||smetrics.theathletesfoot.com.au^
+||smetrics.thebay.com^
+||smetrics.theetihadaviationgroup.com^
+||smetrics.thefa.com^
+||smetrics.thegpsa.org^
+||smetrics.thelawyer.com^
+||smetrics.themadisonsquaregardencompany.com^
+||smetrics.theoutnet.com^
+||smetrics.thepeakfm.com^
+||smetrics.theplayers.com^
+||smetrics.thespacecinema.it^
+||smetrics.thespecialeventshow.com^
+||smetrics.thetruth.com^
+||smetrics.thewhitecompany.com^
+||smetrics.thewolf.ca^
+||smetrics.thingspeak.com^
+||smetrics.thingsremembered.com^
+||smetrics.thomsonlakes.co.uk^
+||smetrics.thomsonski.co.uk^
+||smetrics.thorn.no^
+||smetrics.thorn.se^
+||smetrics.three.co.uk^
+||smetrics.three.ie^
+||smetrics.thrivent.com^
+||smetrics.thriventfinancial.com^
+||smetrics.thymes.com^
+||smetrics.tiaa-cref.org^
+||smetrics.tiaa.org^
+||smetrics.ticket.dk^
+||smetrics.ticket.fi^
+||smetrics.ticket.no^
+||smetrics.ticket.se^
+||smetrics.ticketmaster.com^
+||smetrics.ticketsatwork.com^
+||smetrics.tienda.telcel.com^
+||smetrics.tiffany.com.br^
+||smetrics.tiffany.com.mx^
+||smetrics.tiffany.kr^
+||smetrics.tiffany.ru^
+||smetrics.timberland.com^
+||smetrics.timberland.es^
+||smetrics.timberland.fr^
+||smetrics.timberland.it^
+||smetrics.time.com^
+||smetrics.timeforkids.com^
+||smetrics.timeinc.com^
+||smetrics.timeinc.net^
+||smetrics.timeout.com^
+||smetrics.tirebusiness.com^
+||smetrics.tmz.com^
+||smetrics.tnkase.com^
+||smetrics.tokbox.com^
+||smetrics.tomjoule.de^
+||smetrics.tommy.com^
+||smetrics.tommybahama.com^
+||smetrics.toofab.com^
+||smetrics.toolbox.inter-ikea.com^
+||smetrics.toptenreviews.com^
+||smetrics.toryburch.com^
+||smetrics.totalwine.com^
+||smetrics.toyota.com^
+||smetrics.toysrus.es^
+||smetrics.tractorsupply.com^
+||smetrics.traderonline.com^
+||smetrics.traegergrills.com^
+||smetrics.trailer-bodybuilders.com^
+||smetrics.trainsfares.co.uk^
+||smetrics.trammellcrow.com^
+||smetrics.travelchannel.com^
+||smetrics.travelmoneyonline.co.uk^
+||smetrics.travelodge.com^
+||smetrics.trendyol.com^
+||smetrics.trilliumadvantage.com^
+||smetrics.trilliumohp.cocs.waseda-ac.co.jp^
+||smetrics.trivantis.com^
+||smetrics.turner.com^
+||smetrics.unicefusa.org^
+||smetrics.us.levi.com^
+||smetrics.us.playstation.com^
+||smetrics.vermontcountrystore.com^
+||smetrics.viabcp.com^
+||smetrics.viega.at^
+||smetrics.viega.be^
+||smetrics.viega.com^
+||smetrics.viega.cz^
+||smetrics.viega.de^
+||smetrics.viega.dk^
+||smetrics.viega.es^
+||smetrics.viega.fi^
+||smetrics.viega.fr^
+||smetrics.viega.hr^
+||smetrics.viega.in^
+||smetrics.viega.it^
+||smetrics.viega.lt^
+||smetrics.viega.nl^
+||smetrics.viega.no^
+||smetrics.viega.pl^
+||smetrics.viega.pt^
+||smetrics.viega.se^
+||smetrics.viega.us^
+||smetrics.vikingline.ax^
+||smetrics.vikingline.ee^
+||smetrics.vikingline.fi^
+||smetrics.vince.com^
+||smetrics.virusbuster.jp^
+||smetrics.visiondirect.co.uk^
+||smetrics.vitasure.com.tr^
+||smetrics.vodafone.al^
+||smetrics.volkswagenfinancialservices.nl^
+||smetrics.volusion.com^
+||smetrics.vrst.com^
+||smetrics.vueling.com^
+||smetrics.vwfs-service-plans.io^
+||smetrics.vwfs.co.uk^
+||smetrics.vwfs.com.br^
+||smetrics.vwfs.com^
+||smetrics.vwfs.cz^
+||smetrics.vwfs.de^
+||smetrics.vwfs.es^
+||smetrics.vwfs.fr^
+||smetrics.vwfs.gr^
+||smetrics.vwfs.ie^
+||smetrics.vwfs.io^
+||smetrics.vwfs.it^
+||smetrics.vwfs.mx^
+||smetrics.vwfs.pl^
+||smetrics.vwfs.pt^
+||smetrics.vwpfs.nl^
+||smetrics.walmart.com^
+||smetrics.walmartmoneycard.com^
+||smetrics.walmartstores.com^
+||smetrics.washingtonpost.com^
+||smetrics.waste360.com^
+||smetrics.watch.nba.com^
+||smetrics.waterlooford.com^
+||smetrics.waterloolincoln.com^
+||smetrics.waters.com^
+||smetrics.watsonfantasyfootball.com^
+||smetrics.wavespartnership.org^
+||smetrics.wdeportes.com^
+||smetrics.wdrake.com^
+||smetrics.webex.com^
+||smetrics.webnova.abbottnutrition.com^
+||smetrics.wedenik.com^
+||smetrics.weflive.com^
+||smetrics.wegmans.com^
+||smetrics.wellcareky.com^
+||smetrics.west.edu^
+||smetrics.westcoastuniversity.edu^
+||smetrics.westelm.ca^
+||smetrics.westelm.com^
+||smetrics.westernaustralia.com^
+||smetrics.westernfarmpress.com^
+||smetrics.westernskycommunitycare.com^
+||smetrics.westernunion.com^
+||smetrics.westgateresorts.com^
+||smetrics.westpac.com.au^
+||smetrics.westpacgroup.com.au^
+||smetrics.wgu.edu^
+||smetrics.whatsappsim.de^
+||smetrics.whitbreadinns.co.uk^
+||smetrics.whitbyoshawahonda.com^
+||smetrics.wholesaleclub.ca^
+||smetrics.wibe.com^
+||smetrics.wileyplus.com^
+||smetrics.williamhill.com^
+||smetrics.williamhill.es^
+||smetrics.williamhill.it^
+||smetrics.williamhillplc.com^
+||smetrics.williams-sonoma.ca^
+||smetrics.williams-sonoma.com^
+||smetrics.williamscomfortair.com^
+||smetrics.williamsf1.com^
+||smetrics.wilson.com^
+||smetrics.wilsonniblett.com^
+||smetrics.wimbledon.com^
+||smetrics.winc.co.nz^
+||smetrics.winc.com.au^
+||smetrics.winespectator.com^
+||smetrics.wireimage.com^
+||smetrics.wm.com^
+||smetrics.wmaze.com^
+||smetrics.wmg.com^
+||smetrics.wnba.com^
+||smetrics.wnetwork.com^
+||smetrics.wolterskluwer.com^
+||smetrics.woma-group.com^
+||smetrics.womansday.com^
+||smetrics.womensecret.com^
+||smetrics.womensecret.mx^
+||smetrics.workfront.com^
+||smetrics.workingadvantage.com^
+||smetrics.worldbank.org^
+||smetrics.worldbankgroup.org^
+||smetrics.worldmarket.com^
+||smetrics.worldvision.org^
+||smetrics.wowtv.de^
+||smetrics.wradio.com.co^
+||smetrics.wradio.com.mx^
+||smetrics.wrs.com.sg^
+||smetrics.wsib2b.com^
+||smetrics.wszechnica.roche.pl^
+||smetrics.wu.com^
+||smetrics.wunetspendprepaid.com^
+||smetrics.www.hondros.edu^
+||smetrics.www.vwfs.de^
+||smetrics.wyndham.com^
+||smetrics.wyndhamhotelgroup.com^
+||smetrics.wyndhamhotels.com^
+||smetrics.wyndhamrewards.com^
+||smetrics.xe.com^
+||smetrics.xofluza.com^
+||smetrics.xolairhcp.com^
+||smetrics.y108.ca^
+||smetrics.yaencontre.com^
+||smetrics.ybs.co.uk^
+||smetrics.yellow.com.au^
+||smetrics.yellowpages.com.au^
+||smetrics.yo-ko-o.com^
+||smetrics.yourconroenews.com^
+||smetrics.yourdot.com^
+||smetrics.yourdot.net^
+||smetrics.yourheartyourdecision.com^
+||smetrics.yourindependentgrocer.ca^
+||smetrics.ytv.com^
+||smetrics.zagg.com^
+||smetrics.zales.com^
+||smetrics.zalesoutlet.com^
+||smetrics.zehrs.ca^
+||smetrics.zeiss.com^
+||smetrics.zeposia.com^
+||smetrics.zeposiareg.ch^
+||smetrics.zexy-en-soudan.net^
+||smetrics.zexy-enmusubi.net^
+||smetrics.zimmerbiomet.com^
+||smetrics.zionsbank.com^
+||smetrics.ziplyfiber.com^
+||smetrics.zodiacshoes.com^
+||smetrics.zoneperfect.com^
+||smetrics.zurichlife.co.jp^
+||smetrics1.experian.com^
+||smetrics2.nokia.com^
+||smetrics2.williamhill.com^
+||smetricsadobe.hollandandbarrett.be^
+||smetricsadobe.hollandandbarrett.com^
+||smetricsadobe.hollandandbarrett.ie^
+||smetricsadobe.hollandandbarrett.nl^
+||smetricsqa.sierra.com^
+||smetricstur.www.svenskaspel.se^
+||smetrix.avon.uk.com^
+||smetrix.youravon.com^
+||sminerva.healthcentral.com^
+||smobile.wotif.com^
+||smodus.nike.com^
+||smon.activate.cz^
+||smon.congress.gov^
+||smon.loc.gov^
+||smr.nuro.jp^
+||smr.so-net.ne.jp^
+||sms.ajopharmabeta.riteaid.com^
+||sms.apac.coca-cola.com^
+||sms.em.officedepot.com^
+||sms.email-disney.cjm.adobe.com^
+||sms.mcafee.com^
+||sms.notice.assurancewireless.com^
+||sms.notice.metrobyt-mobile.com^
+||sms.notice.t-mobile.com^
+||sms.riteaid.com^
+||smtc.qantas.com.au^
+||smtc.qantas.com^
+||smtrcs.redhat.com^
+||smtx.belfius.be^
+||smtx.godo.com.au^
+||smtx.lastminute.com.au^
+||smtx.travel.com.au^
+||smy.iheart.com^
+||snalytics.accidenthero.at^
+||snalytics.allianz-assistance.at^
+||snalytics.allianz-assistance.com.sg^
+||snalytics.allianz-assistance.es^
+||snalytics.allianz-assistance.ie^
+||snalytics.allianz-assistance.nl^
+||snalytics.allianz-reiseversicherung.de^
+||snalytics.allianz-travel.ch^
+||snalytics.allianz-travel.com.hk^
+||snalytics.allianz-voyage.fr^
+||snalytics.allyz.com^
+||snalytics.travelinsurance.ca^
+||so.blue.ch^
+||so.bluecinema.ch^
+||so.bluenews.ch^
+||so.blueplus.ch^
+||so.bluewin.ch^
+||so.boh.com^
+||so.desertschools.org^
+||so.opentable.co.uk^
+||so.opentable.com^
+||so.otrestaurant.com^
+||so.sunrise.ch^
+||so.swisscom.ch^
+||so8.hyatt.com^
+||socs.hagerty.com^
+||som.abritel.fr^
+||som.aluguetemporada.com.br^
+||som.athenahealth.com^
+||som.cablestogo.co.uk^
+||som.cbsi.com^
+||som.constellation.com^
+||som.craftsman.com^
+||som.escapehomes.com^
+||som.gaservesamerica.com^
+||som.greatwolf.com^
+||som.healthgrades.com^
+||som.homeaway.com.au^
+||som.homeaway.com^
+||som.homeaway.pt^
+||som.hotels.com^
+||som.hotwire.com^
+||som.kenmore.com^
+||som.kmart.com^
+||som.newenergy.com^
+||som.reethirah.oneandonlyresorts.com^
+||som.resortime.com^
+||som.ringcentral.com^
+||som.sears.com^
+||som.vrbo.com^
+||sometrics.netapp.com^
+||somn.hiltongrandvacations.com^
+||somn.sonypictures.com^
+||somn.wholesalehalloweencostumes.com^
+||somn.wholesalepartysupplies.com^
+||somni.accenture.com^
+||somni.alaskaair.com^
+||somni.americanwesthomes.com^
+||somni.amrock.com^
+||somni.amsurg.com^
+||somni.ashleyfurniturehomestore.com^
+||somni.aussiespecialist.cn^
+||somni.aussiespecialist.com^
+||somni.australia.cn^
+||somni.australia.com^
+||somni.bcg.com^
+||somni.bd.pcm.com^
+||somni.bell.ca^
+||somni.bgsaxo.it^
+||somni.bluebird.com^
+||somni.bluecrossma.com^
+||somni.bostonpizza.com^
+||somni.carecredit.com^
+||somni.carecreditprovidercenter.com^
+||somni.choicehotels.com^
+||somni.cineplex.com^
+||somni.cineplexdigitalmedia.com^
+||somni.cn.saxobank.com^
+||somni.copaair.com^
+||somni.cpogenerac.com^
+||somni.cpopowermatic.com^
+||somni.cporotarytools.com^
+||somni.cposenco.com^
+||somni.cpowilton.com^
+||somni.cpoworkshop.com^
+||somni.creditonebank.com^
+||somni.csc.com^
+||somni.deere.com^
+||somni.deloittenet.deloitte.com^
+||somni.dexknows.com^
+||somni.dispatch.com^
+||somni.djoglobal.com^
+||somni.dsw.com^
+||somni.dxc.com^
+||somni.dxc.technology^
+||somni.edisonfinancial.ca^
+||somni.endocrinologyadvisor.com^
+||somni.firsttechfed.com^
+||somni.genworth.com^
+||somni.getscarlet.com^
+||somni.giljimenez.com^
+||somni.hallmarkecards.com^
+||somni.hardrockhotels.com^
+||somni.home.saxo^
+||somni.huk.de^
+||somni.huk24.de^
+||somni.icicihfc.com^
+||somni.innforks.com^
+||somni.istockphoto.com^
+||somni.listonline.com^
+||somni.mapac.thermofisher.com^
+||somni.moneytips.com^
+||somni.myrocket.com^
+||somni.myspendwell.com^
+||somni.mysynchrony.com^
+||somni.ninemsn.com.au^
+||somni.pemco.com^
+||somni.pluralsight.com^
+||somni.qlmortgageservices.com^
+||somni.quickenloans.org^
+||somni.redcardreloadable.com^
+||somni.reifund.org^
+||somni.rkt.zone^
+||somni.rocketaccount.com^
+||somni.rocketauto.com^
+||somni.rocketcard.com^
+||somni.rocketcentral.com^
+||somni.rocketcompanies.com^
+||somni.rocketloans.com^
+||somni.rocketmoney.com^
+||somni.rocketmortgage.ca^
+||somni.rocketmortgagesquares.com^
+||somni.rocketprotpo.com^
+||somni.rocketsolar.com^
+||somni.serve.com^
+||somni.syf.com^
+||somni.synchrony.com^
+||somni.synchronybank.com^
+||somni.synchronybusiness.com^
+||somni.synchronycareers.com^
+||somni.thatsmymortgage.com^
+||somni.vikingrivercruises.com^
+||somni.yellowpages.com^
+||somniture.fitforfun.de^
+||somniture.scotiabank.mobi^
+||somniture.yodlee.com^
+||somtr.financialengines.com^
+||soptimize.southwest.com^
+||sosc.webroot.com^
+||sowa.carhartt.com^
+||spc.personalcreations.com^
+||spersonalization.glassdoctor.com^
+||spersonalization.ground
+||sphc.caring4cancer.com^
+||spscas.hitachi-solutions.co.jp^
+||srepdata.armytimes.com^
+||srepdata.daily-times.com^
+||srepdata.dailyworld.com^
+||srepdata.desertsun.com^
+||srepdata.desmoinesregister.com^
+||srepdata.elpasotimes.com^
+||srepdata.eveningsun.com^
+||srepdata.fdlreporter.com^
+||srepdata.fox15abilene.com^
+||srepdata.freep.com^
+||srepdata.golfweek.com^
+||srepdata.greatfallstribune.com^
+||srepdata.guampdn.com^
+||srepdata.hometownlife.com^
+||srepdata.hoopshype.com^
+||srepdata.htrnews.com^
+||srepdata.inyork.com^
+||srepdata.ithacajournal.com^
+||srepdata.kens5.com^
+||srepdata.khou.com^
+||srepdata.kiiitv.com^
+||srepdata.ktvb.com^
+||srepdata.kvue.com^
+||srepdata.lansingstatejournal.com^
+||srepdata.livingstondaily.com^
+||srepdata.marionstar.com^
+||srepdata.montgomeryadvertiser.com^
+||srepdata.mycentraljersey.com^
+||srepdata.mynorthshorenow.com^
+||srepdata.newarkadvocate.com^
+||srepdata.news-leader.com^
+||srepdata.newsleader.com^
+||srepdata.postcrescent.com^
+||srepdata.publicopiniononline.com^
+||srepdata.redding.com^
+||srepdata.shreveporttimes.com^
+||srepdata.tcpalm.com^
+||srepdata.tennessean.com^
+||srepdata.theadvertiser.com^
+||srepdata.thedailyjournal.com^
+||srepdata.thespectrum.com^
+||srepdata.thetimesherald.com^
+||srepdata.thetowntalk.com^
+||srepdata.usatoday.com^
+||srepdata.wauwatosanow.com^
+||srepdata.wcsh6.com^
+||srepdata.wkyc.com^
+||srepdata.ydr.com^
+||srepdata.yorkdispatch.com^
+||srepdatats.epocrates.com^
+||sreport.mitsubishicars.com^
+||ssa.animalplanet.com^
+||ssa.asianfoodnetwork.com^
+||ssa.cookingchanneltv.com^
+||ssa.discovery.com^
+||ssa.discoveryplus.in^
+||ssa.discoveryrise.org^
+||ssa.diynetwork.com^
+||ssa.food.com^
+||ssa.foodnetwork.com^
+||ssa.hgtv.com^
+||ssa.investigationdiscovery.com^
+||ssa.sciencechannel.com^
+||ssa.tlc.com^
+||ssc.bellator.com^
+||ssc.bet.plus^
+||ssc.blurb.fr^
+||ssc.cc.com^
+||ssc.cmt.com^
+||ssc.hl.co.uk^
+||ssc.logotv.com^
+||ssc.mtv.com.br^
+||ssc.mtv.com^
+||ssc.mtv.de^
+||ssc.mtv.es^
+||ssc.mtv.it^
+||ssc.mtv.nl^
+||ssc.mtvema.com^
+||ssc.mtvjapan.com^
+||ssc.mtvla.com^
+||ssc.mtvmama.com^
+||ssc.muji.net^
+||ssc.mundonick.com^
+||ssc.nick.co.uk^
+||ssc.nick.com.pl^
+||ssc.nick.com^
+||ssc.nick.de^
+||ssc.nick.tv^
+||ssc.nickanimation.com^
+||ssc.nickatnite.com^
+||ssc.nickelodeon.ee^
+||ssc.nickelodeon.es^
+||ssc.nickelodeon.fr^
+||ssc.nickelodeon.gr^
+||ssc.nickelodeon.la^
+||ssc.nickelodeon.lv^
+||ssc.nickelodeon.nl^
+||ssc.nickelodeon.pt^
+||ssc.nickelodeon.ro^
+||ssc.nickelodeonafrica.com^
+||ssc.nickelodeonarabia.com^
+||ssc.nickhelps.com^
+||ssc.nickjr.com^
+||ssc.nickourworld.tv^
+||ssc.nicktv.it^
+||ssc.ozodi.org^
+||ssc.ozodlik.org^
+||ssc.paramountnetwork.com^
+||ssc.pashtovoa.com^
+||ssc.polygraph.info^
+||ssc.radiofarda.com^
+||ssc.radiomarsho.com^
+||ssc.radiosawa.com^
+||ssc.radiosvoboda.org^
+||ssc.radiotavisupleba.ge^
+||ssc.radiotelevisionmarti.com^
+||ssc.radiyoyacuvoa.com^
+||ssc.rfa.org^
+||ssc.rferl.org^
+||ssc.severreal.org^
+||ssc.sibreal.org^
+||ssc.slobodnaevropa.mk^
+||ssc.slobodnaevropa.org^
+||ssc.smithsonianchannel.com^
+||ssc.smithsonianchannellatam.com^
+||ssc.southpark.de^
+||ssc.southpark.lat^
+||ssc.southparkstudios.co.uk^
+||ssc.southparkstudios.com.br^
+||ssc.southparkstudios.com^
+||ssc.southparkstudios.nu^
+||ssc.supertv.it^
+||ssc.svaboda.org^
+||ssc.svoboda.org^
+||ssc.svobodnaevropa.bg^
+||ssc.szabadeuropa.hu^
+||ssc.tvland.com^
+||ssc.urduvoa.com^
+||ssc.usagm.gov^
+||ssc.vh1.com^
+||ssc.vidcon.com^
+||ssc.vmaj.jp^
+||ssc.vmware.com^
+||ssc.voaafaanoromoo.com^
+||ssc.voaafrica.com^
+||ssc.voaafrique.com^
+||ssc.voabambara.com^
+||ssc.voabangla.com^
+||ssc.voacambodia.com^
+||ssc.voacantonese.com^
+||ssc.voachinese.com^
+||ssc.voadeewanews.com^
+||ssc.voahausa.com^
+||ssc.voaindonesia.com^
+||ssc.voakorea.com^
+||ssc.voalingala.com^
+||ssc.voandebele.com^
+||ssc.voanews.com^
+||ssc.voanouvel.com^
+||ssc.voaportugues.com^
+||ssc.voashona.com^
+||ssc.voasomali.com^
+||ssc.voaswahili.com^
+||ssc.voathai.com^
+||ssc.voatibetan.com^
+||ssc.voatiengviet.com^
+||ssc.voaturkce.com^
+||ssc.voazimbabwe.com^
+||ssc.votvot.tv^
+||ssc.vozdeamerica.com^
+||ssc.zeriamerikes.com^
+||ssite.johnlewisfinance.com^
+||ssitecat.eset.com^
+||ssitectlyst.saksfifthavenue.com^
+||ssl-metrics.tim.it^
+||ssl-omtrdc.dmp-support.jp^
+||ssl-omtrdc.zexy.net^
+||ssl.brandlicensing.eu^
+||ssl.o.additudemag.com^
+||ssl.o.coliquio.de^
+||ssl.o.emedicinehealth.com^
+||ssl.o.globalacademycme.com^
+||ssl.o.guidelines.co.uk^
+||ssl.o.guidelinesinpractice.co.uk^
+||ssl.o.mdedge.com^
+||ssl.o.medhelp.org^
+||ssl.o.medicinenet.com^
+||ssl.o.medscape.co.uk^
+||ssl.o.medscape.com^
+||ssl.o.medscape.org^
+||ssl.o.medscapelive.com^
+||ssl.o.medsims.com^
+||ssl.o.onhealth.com^
+||ssl.o.qxmd.com^
+||ssl.o.rxlist.com^
+||ssl.o.the-hospitalist.org^
+||ssl.o.univadis.com^
+||ssl.o.univadis.de^
+||ssl.o.univadis.es^
+||ssl.o.univadis.fr^
+||ssl.o.univadis.it^
+||ssl.o.vitals.com^
+||ssl.sc.amc.devk.de^
+||sslanalytics.sixt.co.uk^
+||sslanalytics.sixt.com^
+||sslanalytics.sixt.de^
+||sslanalytics.sixt.es^
+||ssldata.thepointsguy.com^
+||sslmetrics.vivint.com^
+||sslsc.sanitas.com^
+||sslstats.canadapost-postescanada.ca^
+||sslstats.canadapost.ca^
+||ssmr.nuro.jp^
+||ssmr.so-net.ne.jp^
+||ssmr.sonynetwork.co.jp^
+||ssmr2.so-net.ne.jp^
+||sstat.detelefoongids.nl^
+||sstat.spreadex.com^
+||sstatistikk.telenor.no^
+||sstats.adobe.com^
+||sstats.airfarewatchdog.com^
+||sstats.alfa.com^
+||sstats.allure.com^
+||sstats.americafirst.com^
+||sstats.arbetarskydd.se^
+||sstats.architecturaldigest.com^
+||sstats.asadventure.com^
+||sstats.asadventure.fr^
+||sstats.asadventure.lu^
+||sstats.asadventure.nl^
+||sstats.atu.at^
+||sstats.auto5.be^
+||sstats.backcountry.com^
+||sstats.bbt.com^
+||sstats.belgiantrain.be^
+||sstats.bever.nl^
+||sstats.bitdefender.com^
+||sstats.bnpparibasfortis.be^
+||sstats.bonappetit.com^
+||sstats.bookingbuddy.co.uk^
+||sstats.bookingbuddy.com^
+||sstats.bookingbuddynersneed.com^
+||sstats.celcom.com.my^
+||sstats.gibson.com^
+||sstats.gohealthinsurance.com^
+||sstats.governmentcontractsusa.com^
+||sstats.grandbridge.com^
+||sstats.hannaandersson.com^
+||sstats.healthcare-sumitomo-pharma.jp^
+||sstats.hemtex.com^
+||sstats.hickoryfarms.com^
+||sstats.holcim.us^
+||sstats.hostplus.com.au^
+||sstats.iata.org^
+||sstats.incorporate.com^
+||sstats.instawares.com^
+||sstats.iridesse.com^
+||sstats.iso.com^
+||sstats.lfg.com^
+||sstats.liander.nl^
+||sstats.mcgriff.com^
+||sstats.meijer.com^
+||sstats.myafco.com^
+||sstats.myfidm.fidm.edu^
+||sstats.nascar.com^
+||sstats.newworldsreading.com^
+||sstats.norauto.es^
+||sstats.norauto.fr^
+||sstats.norauto.it^
+||sstats.norauto.pt^
+||sstats.o2family.cz^
+||sstats.o2knihovna.cz^
+||sstats.o2tvsport.cz^
+||sstats.o2videoteka.cz^
+||sstats.olivia.com^
+||sstats.omahasteaks.com^
+||sstats.onelambda.com^
+||sstats.ooshop.com^
+||sstats.paloaltonetworks.com^
+||sstats.paypal-metrics.com^
+||sstats.portauthorityclothing.com^
+||sstats.prevent.se^
+||sstats.regionalacceptance.com^
+||sstats.rssc.com^
+||sstats.sanmar.com^
+||sstats.scholastic.com^
+||sstats.seat.es^
+||sstats.seat.mx^
+||sstats.seat.ru^
+||sstats.seattlechildrens.org^
+||sstats.securitas-direct.com^
+||sstats.self.com^
+||sstats.sfwmd.gov^
+||sstats.shaneco.com^
+||sstats.sheffieldfinancial.com^
+||sstats.simzdarma.cz^
+||sstats.smartertravel.com^
+||sstats.snowandrock.com^
+||sstats.spafinder.com^
+||sstats.spark.co.nz^
+||sstats.sumitomo-pharma.com^
+||sstats.sumitomo-pharma.jp^
+||sstats.swissotel.com^
+||sstats.tdameritrade.com^
+||sstats.teenvogue.com^
+||sstats.telenor.se^
+||sstats.tena.ca^
+||sstats.tena.us^
+||sstats.thermofisher.com^
+||sstats.thermoscientific.com^
+||sstats.tiffany.at^
+||sstats.tiffany.ca^
+||sstats.tiffany.co.jp^
+||sstats.tiffany.co.uk^
+||sstats.tiffany.com.au^
+||sstats.tiffany.com^
+||sstats.tiffany.de^
+||sstats.tiffany.es^
+||sstats.tiffany.fr^
+||sstats.tiffany.ie^
+||sstats.tiffany.it^
+||sstats.truist.com^
+||sstats.truistinsurance.com^
+||sstats.truistsecurities.com^
+||sstats.uascrubs.com^
+||sstats.upack.com^
+||sstats.vacationclub.com^
+||sstats.vanityfair.com^
+||sstats.vattenfall.nl^
+||sstats.vattenfall.se^
+||sstats.vizergy.com^
+||sstats.vogue.com^
+||sstats.wallisfashion.com^
+||sstats.wartsila.com^
+||sstats.webresint.com^
+||sstats.whattopack.com^
+||sstats.williamoneil.com^
+||sstats.wired.com^
+||sstats.wmagazine.com^
+||sstats.www.o2.cz^
+||sstats.yourchi.org^
+||sstats2.allure.com^
+||sstats2.architecturaldigest.com^
+||sstats2.golfdigest.com^
+||sstats2.gq.com^
+||sstats2.newyorker.com^
+||sstatstest.adobe.com^
+||sswmetrics.bearskinairlines.com^
+||sswmetrics.firstair.ca^
+||sswmetrics.omanair.com^
+||sswmetrics.philippineairlines.com^
+||sswmetrics.sabre.com^
+||st-nlyss1.plala.or.jp^
+||st.bahn.de^
+||st.bahnhof.de^
+||st.der-kleine-ice.de^
+||st.discover-bavaria.com^
+||st.entdecke-deutschland-bahn.de^
+||st.fahrkartenshop2-bahn.de^
+||st.iceportal.de^
+||st.img-bahn.de^
+||st.mashable.com^
+||st.mazdausa.com^
+||st.newyorklife.com^
+||st.newyorklifeinvestments.com^
+||st.nylannuities.com^
+||st.nylinvestments.com^
+||st.onemazdausa.com^
+||st.s-bahn-muenchen-magazin.de^
+||st.wir-entdecken-bayern.de^
+||starget.aircanada.com^
+||starget.airmiles.ca^
+||starget.bitdefender.com^
+||starget.collegeboard.org^
+||starget.huntington.com^
+||starget.intel.cn^
+||starget.intel.co.jp^
+||starget.intel.co.kr^
+||starget.intel.co.uk^
+||starget.intel.com.br^
+||starget.intel.com.tr^
+||starget.intel.com.tw^
+||starget.intel.com^
+||starget.intel.de^
+||starget.intel.fr^
+||starget.intel.in^
+||starget.intel.la^
+||starget.intel.pl^
+||starget.ladbrokes.be^
+||starget.mathworks.com^
+||starget.morganstanley.com^
+||starget.nabtrade.com.au^
+||starget.orlandofuntickets.com^
+||starget.panerabread.com^
+||starget.plumbenefits.com^
+||stat-ssl.akiba-souken.com^
+||stat-ssl.autoway.jp^
+||stat-ssl.bushikaku.net^
+||stat-ssl.career-tasu.jp^
+||stat-ssl.cc-rashinban.com^
+||stat-ssl.eiga.com^
+||stat-ssl.fx-rashinban.com^
+||stat-ssl.hitosara.com^
+||stat-ssl.icotto.jp^
+||stat-ssl.idou.me^
+||stat-ssl.kaago.com^
+||stat-ssl.kakaku.com^
+||stat-ssl.kakakumag.com^
+||stat-ssl.kinarino-mall.jp^
+||stat-ssl.kinarino.jp^
+||stat-ssl.kyujinbox.com^
+||stat-ssl.money-viva.jp^
+||stat-ssl.osorezone.com^
+||stat-ssl.photohito.com^
+||stat-ssl.priceprice.com^
+||stat-ssl.savorjapan.com^
+||stat-ssl.screeningmaster.jp^
+||stat-ssl.shift-one.jp^
+||stat-ssl.smfg.co.jp^
+||stat-ssl.sumaity.com^
+||stat-ssl.tabelog.com^
+||stat-ssl.tasclap.jp^
+||stat-ssl.teamroom.jp^
+||stat-ssl.tour-list.com^
+||stat-ssl.webcg.net^
+||stat-ssl.xn--pckua2a7gp15o89zb.com^
+||stat.4travel.jp^
+||stat.bankofthewest.com^
+||stat.buyersedge.com.au^
+||stat.canal-plus.com^
+||stat.carecredit.com^
+||stat.cruisingpower.com^
+||stat.detelefoongids.nl^
+||stat.eiga.com^
+||stat.gomastercard.com.au^
+||stat.his-j.com^
+||stat.interestfree.com.au^
+||stat.jetsetter.com^
+||stat.kaago.com^
+||stat.kakaku.com^
+||stat.kiwibank.co.nz^
+||stat.marshfieldclinic.org^
+||stat.mint.ca^
+||stat.ncl.com^
+||stat.outrigger.com^
+||stat.thegeneral.com^
+||stat.vocus.com^
+||stat.washingtontimes.com^
+||stats-ssl.mdanderson.org^
+||stats.4travel.jp^
+||stats.aapt.com.au^
+||stats.adobe.com^
+||stats.adultswim.com^
+||stats.agl.com.au^
+||stats.airfarewatchdog.co.uk^
+||stats.airfarewatchdog.com^
+||stats.aplaceformom.com^
+||stats.asadventure.fr^
+||stats.asadventure.nl^
+||stats.ascendmedia.com^
+||stats.bankofthewest.com^
+||stats.bentleymotors.com^
+||stats.bildconnect.de^
+||stats.bitdefender.com^
+||stats.bookhostels.com^
+||stats.bookingbuddy.com^
+||stats.bookingbuddy.eu^
+||stats.cafepress.com^
+||stats.canadapost-postescanada.ca^
+||stats.carecredit.com^
+||stats.cartoonnetwork.com^
+||stats.cruisingpower.com^
+||stats.deloitte.com^
+||stats.deutschlandsim.de^
+||stats.dice.com^
+||stats.discotel.de^
+||stats.drillisch-online.de^
+||stats.economist.com^
+||stats.ellos.dk^
+||stats.epicurious.com^
+||stats.extendedstayamerica.com^
+||stats.fairmont.com^
+||stats.familyvacationcritic.com^
+||stats.fhb.com^
+||stats.fishersci.com^
+||stats.fishersci.de^
+||stats.fishersci.it^
+||stats.franklincovey.com^
+||stats.getty.edu^
+||stats.gibson.com^
+||stats.gomastercard.com.au^
+||stats.handyvertrag.de^
+||stats.hannaandersson.com^
+||stats.harrods.com^
+||stats.hayu.com^
+||stats.his-j.com^
+||stats.honeywell.com^
+||stats.icimusique.ca^
+||stats.instawares.com^
+||stats.interestfree.com.au^
+||stats.investors.com^
+||stats.jetzt-aktivieren.de^
+||stats.juttu.be^
+||stats.kiwibank.co.nz^
+||stats.kroger.com^
+||stats.lag-avtal.se^
+||stats.lumension.com^
+||stats.m2m-mobil.de^
+||stats.marshfieldclinic.org^
+||stats.marshfieldresearch.org^
+||stats.maxxim.de^
+||stats.mcgriff.com^
+||stats.mdanderson.org^
+||stats.meijer.com^
+||stats.merx.com^
+||stats.mint.ca^
+||stats.mt.com^
+||stats.nyteknik.se^
+||stats.onetime.com^
+||stats.oui.sncf^
+||stats.oyster.com^
+||stats.pacificdentalservices.com^
+||stats.paypal-metrics.com^
+||stats.posten.se^
+||stats.postescanada-canadapost.ca^
+||stats.premiumsim.de^
+||stats.radio-canada.ca^
+||stats.rcinet.ca^
+||stats.rs-online.com^
+||stats.russellstover.com^
+||stats.safeway.com^
+||stats.seat-auto.pl^
+||stats.seat-italia.it^
+||stats.seat.be^
+||stats.seat.com.tr^
+||stats.seat.fr^
+||stats.seat.ie^
+||stats.seat.pt^
+||stats.sim.de^
+||stats.simplytel.de^
+||stats.simzdarma.cz^
+||stats.smartertravel.com^
+||stats.smartmobil.de^
+||stats.spark.co.nz^
+||stats.steepandcheap.com^
+||stats.swissotel.com^
+||stats.tdameritrade.com^
+||stats.te.com^
+||stats.telenor.se^
+||stats.tennistalk.com^
+||stats.tfl.gov.uk^
+||stats.thegeneral.com^
+||stats.thermofisher.com^
+||stats.thermoscientific.com^
+||stats.tiffany.at^
+||stats.tiffany.co.jp^
+||stats.tiffany.ie^
+||stats.tnt.com^
+||stats.tork.fr^
+||stats.tou.tv^
+||stats.tradingacademy.com^
+||stats.travnet.se^
+||stats.truist.com^
+||stats.uticorp.com^
+||stats.vattenfall.nl^
+||stats.vattenfall.se^
+||stats.voyages-sncf.com^
+||stats.vulture.com^
+||stats.wallisfashion.com^
+||stats.wartsila.com^
+||stats.wartsila.net^
+||stats.whattopack.com^
+||stats.winsim.de^
+||stats.wired.comco^
+||statyro.com^
+||stel.telegraaf.nl^
+||str2-bbyca-track.bestbuy.com^
+||str2-fsca-track.bestbuy.com^
+||strack.collegeboard.com^
+||strack.evertondirect.evertonfc.com^
+||strack.f1store.formula1.com^
+||strack.futureshop.ca^
+||strack.store.manutd.com^
+||stracking.trutv.com^
+||stscs.ditzo.nl^
+||stttest.bupa.com.au^
+||styles.hautelook.com^
+||subscriptions.costco.ca^
+||subscriptions.costco.com^
+||sud.holidayinsider.com^
+||sud.holidays.hrs.de^
+||sut.iggroup.com^
+||sw88.24kitchen.bg^
+||sw88.24kitchen.com.hr^
+||sw88.24kitchen.nl^
+||sw88.24kitchen.pt^
+||sw88.24kitchen.rs^
+||sw88.24kitchen.si^
+||sw88.cinemapp.com^
+||sw88.disney.com.tr^
+||sw88.disneyoutlet.co.uk^
+||sw88.disneytickets.co.uk^
+||sw88.espnmanofthematch.nl^
+||sw88.foxchannels.com.tr^
+||sw88.foxplay.com^
+||sw88.foxtv.bg^
+||sw88.foxtv.ee^
+||sw88.foxtv.es^
+||sw88.foxtv.fi^
+||sw88.foxtv.hr^
+||sw88.foxtv.pt^
+||sw88.foxtv.rs^
+||sw88.foxtv.ru^
+||sw88.freeform.com^
+||sw88.fxchannel.pl^
+||sw88.fxnetworks.com^
+||sw88.fxturkiye.com.tr^
+||sw88.go.com^
+||sw88.lionkingeducation.co.uk^
+||sw88.natgeo.pt^
+||sw88.natgeotv.com^
+||sw88.nationalgeographic.co.uk^
+||sw88.nationalgeographic.com^
+||sw88.nationalgeographic.de^
+||sw88.nationalgeographic.es^
+||sw88.nationalgeographic.fr^
+||sw88.nationalgeographicbrasil.com^
+||sw88.nationalgeographicexpeditions.co.uk^
+||sw88.nationalgeographicexpeditions.eu^
+||sw88.nationalgeographicla.com^
+||sw88.shopdisney.asia^
+||sw88.shopdisney.co.uk^
+||sw88.shopdisney.de^
+||sw88.shopdisney.es^
+||sw88.shopdisney.eu^
+||sw88.shopdisney.fr^
+||sw88.shopdisney.it^
+||sw88.starchannel-bg.com^
+||sw88.starchannel-hr.com^
+||sw88.starchannel-rs.com^
+||sw88.starchannel.be^
+||sw88.starchannel.nl^
+||sw88.thewaltdisneycompany.eu^
+||swa.asnbank.nl^
+||swa.b2cjewels.com^
+||swa.blgwonen.nl^
+||swa.bol.com^
+||swa.cofinoga.fr^
+||swa.consumentenbond.nl^
+||swa.devolksbank.nl^
+||swa.energiedirect.nl^
+||swa.eonline.com^
+||swa.essent.nl^
+||swa.gifts.com^
+||swa.localworld.co.uk^
+||swa.millesima.co.uk^
+||swa.millesima.com^
+||swa.millesima.it^
+||swa.monabanq.com^
+||swa.nexive.it^
+||swa.onlineverzendservice.be^
+||swa.personalcreations.com^
+||swa.postnl.nl^
+||swa.regiobank.nl^
+||swa.snsbank.nl^
+||swa.st.com^
+||swa.t-mobile.nl^
+||swa.tjmaxx.tjx.com^
+||swa.vodafone.cz^
+||swa.vodafone.pt^
+||swa.wowcher.co.uk^
+||swasc.homedepot.ca^
+||swasc.homedepot.com^
+||swasc.kaufland.bg^
+||swasc.kaufland.com^
+||swasc.kaufland.cz^
+||swasc.kaufland.de^
+||swasc.kaufland.hr^
+||swasc.kaufland.md^
+||swasc.kaufland.pl^
+||swasc.kaufland.ro^
+||swasc.kaufland.sk^
+||swasc.thecompanystore.com^
+||sweb.ulta.com^
+||swebanalytics.acs.org^
+||swebanalytics.degulesider.dk^
+||swebanalytics.eniro.se^
+||swebanalytics.gulesider.no^
+||swebanalytics.krak.dk^
+||swebanalytics.panoramafirm.pl^
+||swebanalytics.pgatour.com^
+||swebmetrics.avaya.com^
+||swebmetrics.ok.gov^
+||swebmetrics.oklahoma.gov^
+||swebmetrics.zebra.com^
+||swebreports.nature.org^
+||swebstats.americanbar.org^
+||swebstats.imf.org^
+||swebstats.us.aimia.com^
+||swebtraffic.executiveboard.com^
+||sxp.allianz.de^
+||t-s.actemra.com^
+||t-s.activase.com^
+||t-s.allergicasthma.com^
+||t-s.avastin-hcp.com^
+||t-s.avastin.com^
+||t-s.biooncology.com^
+||t-s.cathflo.comntaccessservices.com^
+||t.10er-tagesticket.de^
+||t.bahn-mietwagen.de^
+||t.bahnbuchung.de^
+||t.db-gruppen.de^
+||t.emusic.com^
+||t.mashable.com^
+||t.msz-bahn.de^
+||t.nordea.dk^
+||t.nordea.fi^
+||t.nordea.no^
+||t.nordea.se^
+||t.nylinvestments.com^
+||t.popsugar.com^
+||t.rail-and-drive.de^
+||t.valcyte.com^
+||t.veranstaltungsticket-bahn.de^
+||t.xolairhcp.com^
+||t3e.firstchoice.co.uk^
+||ta.taxslayer.com^
+||tags.esri.ca^
+||tags.esri.com^
+||tags.esri.rw^
+||target-omtrdc.deka.de^
+||target-test.cisco.com^
+||target-us.samsung.com^
+||target.accenture.com^
+||target.acpny.com^
+||target.afrique.pwc.com^
+||target.aia.co.kr^
+||target.aiavitality.co.kr^
+||target.alfaromeousa.com^
+||target.allianz.at^
+||target.allianz.ch^
+||target.amica.com^
+||target.ansys.com^
+||target.arcobusinesssolutions.com^
+||target.auspost.com.au^
+||target.bankofamerica.com^
+||target.bankwest.com.au^
+||target.base.be^
+||target.bcbsnd.com^
+||target.bd.dk^
+||target.belairdirect.com^
+||target.bose.com^
+||target.bpbusinesssolutions.com^
+||target.bws.com.au^
+||target.caixabank.es^
+||target.cap.ch^
+||target.carrieres.pwc.fr^
+||target.caseys.com^
+||target.centerpointenergy.com^
+||target.champssports.ca^
+||target.champssports.com^
+||target.changehealthcare.com^
+||target.chase.com^
+||target.chrysler.com^
+||target.cisco.com^
+||target.claris.com^
+||target.comcast.com^
+||target.comdata.com^
+||target.connecticare.com^
+||target.cox.com^
+||target.danmurphys.com.au^
+||target.dodge.com^
+||target.dzbank.de^
+||target.eastbay.com^
+||target.element14.com^
+||target.elvia.ch^
+||target.emblemhealth.com^
+||target.eon.de^
+||target.ey.com^
+||target.farmtracagri.com^
+||target.farnell.com^
+||target.fiatusa.com^
+||target.firestonebpco.com^
+||target.fleetcardsusa.com^
+||target.footlocker.at^
+||target.footlocker.be^
+||target.footlocker.ca^
+||target.footlocker.co.uk^
+||target.footlocker.com.au^
+||target.footlocker.com^
+||target.footlocker.cz^
+||target.footlocker.de^
+||target.footlocker.dk^
+||target.footlocker.es^
+||target.footlocker.fr^
+||target.footlocker.gr^
+||target.footlocker.hu^
+||target.footlocker.ie^
+||target.footlocker.it^
+||target.footlocker.lu^
+||target.footlocker.nl^
+||target.footlocker.no^
+||target.footlocker.pl^
+||target.footlocker.pt^
+||target.footlocker.se^
+||target.fuelman.com^
+||target.groupama.fr^
+||target.gsghukuk.com^
+||target.healthengine.com.au^
+||target.hsn.com^
+||target.huskypro.ca^
+||target.hyundaiusa.com^
+||target.ihg.com^
+||target.intact.ca^
+||target.intactinsurance.com^
+||target.investors.com^
+||target.jeep.com^
+||target.jwatch.org^
+||target.key.com^
+||target.kidsfootlocker.com^
+||target.kwiktripfleet.com^
+||target.maxxia.com.au^
+||target.miaprova.com^
+||target.michaels.com^
+||target.microchip.com^
+||target.microsoft.ca^
+||target.sunlife.co.id^
+||target.sunlife.com.hk^
+||target.sunlife.com.ph^
+||target.sunlife.com^
+||target.sunlifeglobalinvestments.com^
+||target.swinburne.edu.au^
+||target.synergy.net.au^
+||target.telenet.be^
+||target.theconvenienceawards.com^
+||target.thegrocer.co.uk^
+||target.thetruth.com^
+||target.totalwine.com^
+||target.toyota.com^
+||target.troweprice.com^
+||target.tunisie.pwc.fr^
+||target.ultramarfleet.ca^
+||target.veeam.com^
+||target.visitsingapore.com^
+||target.volkswagenfinancialservices.nl^
+||target.vudu.com^
+||target.vwfs.co.uk^
+||target.vwfs.com^
+||target.vwfs.cz^
+||target.vwfs.de^
+||target.vwfs.es^
+||target.vwfs.fr^
+||target.vwfs.gr^
+||target.vwfs.ie^
+||target.vwfs.it^
+||target.vwfs.mx^
+||target.vwfs.pl^
+||target.vwfs.pt^
+||target.walgreens.com^
+||target.wsec06.bancogalicia.com.ar^
+||target.xfinity.com^
+||target.zeiss.com^
+||target.zeiss.de^
+||target.zinia.com^
+||targetab.metrobyt-mobile.com^
+||targetlr.adobe.com^
+||targetsecure.kohler.com^
+||tdor-smetrics.td.com^
+||tel.telegraaf.nl^
+||telemetry.boxt.co.uk^
+||telemetry.chrobinson.com^
+||telemetry.dematic.com^
+||telemetry.goodlifefitness.com^
+||telemetry.marketscope.com^
+||telemetry.moveworks.com^
+||telemetry.navispherecarrier.com^
+||telemetry.stryker.com^
+||telemetry.webasto.com^
+||tenilstats.turner.com^
+||test-landing-page-122122.email-disney.cjm.adobe.com^
+||testtarget.jeep.com^
+||tgt.maep.ibm.com^
+||tmetrics.hdfcbank.com^
+||tmetrics.webex.com^
+||tms.53.com^
+||tnt.yemeksepeti.com^
+||toolboxadobe.inter-ikea.com^
+||tr.rr.com^
+||tr1.kaspersky.ca^
+||tr1.kaspersky.com.tr^
+||tr1.kaspersky.com^
+||tr1.kaspersky.es^
+||tr1.kaspersky.ru^
+||tr2.kaspersky.co.uk^
+||tr2.kaspersky.com^
+||tr2.kaspersky.ru^
+||track.bestbuy.ca^
+||track.collegeboard.org^
+||track.concur.ca^
+||track.concur.com.sg^
+||track.evertondirect.evertonfc.com^
+||track.f1store.formula1.com^
+||track.futureshop.ca^
+||track.inews.co.uk^
+||track.mentor.com^
+||track.nbastore.com.au^
+||track.nbastore.la^
+||track.reservationcounter.com^
+||track.shop.atleticodemadrid.com^
+||track.shop.psg.fr^
+||tracker-aa.paf.es^
+||tracker-aa.pafbetscore.lv^
+||tracking-secure.csob.cz^
+||tracking.brice.fr^
+||tracking.c.mercedes-benz.co.in^
+||tracking.csob.cz^
+||tracking.cspire.com^
+||tracking.dailyglow.com^
+||tracking.kyobo.co.kr^
+||tracking.lg.com^
+||tracking.m.mercedes-benz.co.za^
+||tracking.m.mercedes-benz.com.cn^
+||tracking.m.mercedes-benz.com.sg^
+||tracking.mb.mercedes-benz.com^
+||tracking.medpagetoday.com^
+||tracking.omniture.nt.se^
+||tracking.redbutton.de^
+||tracking.rogers.com^
+||tracking.t.mercedes-benz.com.cn^
+||tracking.techcenter.mercedes-benz.com^
+||tracking.trutv.com^
+||tracking.www5.mercedes-benz.com^
+||trackingaa.hitachienergy.com^
+||trackingssl.agemployeebenefits.be^
+||trackingssl.aginsurance.be^
+||trackingssl.drysolutions.be^
+||trackingssl.homeras.be^
+||trackingssl.vivay-broker.be^
+||trackingssl.yongo.be^
+||trk.chegg.com^
+||ts.popsugar.com^
+||tsa.taxslayer.com^
+||tt.natwest.com^
+||tt.pluralsight.com^
+||tt.rbs.co.uk^
+||tt.rbs.com^
+||tt.sj.se^
+||tt.ubs.com^
+||tt.ulsterbank.co.uk^
+||tt.ulsterbank.ie^
+||ttarget.eastwestbank.com^
+||ttmetrics.faz.net^
+||ttmetrics.jcpenney.com^
+||ucmetrics.hypovereinsbank.de^
+||ucmetrics.unicredit.it^
+||ucmetrics.unicreditbanca.it^
+||ucmetrics.unicreditgroup.eu^
+||uncanny.marvel.com^
+||uncanny.marvelkids.com^
+||unsubscribe.email.verizon.com^
+||ut.dailyfx.com^
+||ut.iggroup.com^
+||ut.upmc.com^
+||value.register.com^
+||vdmwntw1of9t8xgd.edge41.testandtarget.omniture.com^
+||visit.asb.co.nz^
+||visitors.winecountrygiftbaskets.com^
+||visualscience.external.bbc.co.uk^
+||vs.target.com^
+||w3n.llbean.com^
+||w88.abc.com^
+||w88.disneynow.com^
+||w88.espn.com^
+||w88.freeform.com^
+||w88.go.com^
+||w88.m.espn.go.com^
+||w88.natgeotv.com^
+||w88.nationalgeographic.com^
+||w88.qam.disney.go.com^
+||wa.and.co.uk^
+||wa.baltimoreravens.com^
+||wa.bol.com^
+||wa.castorama.fr^
+||wa.childrensplace.com^
+||wa.dailymail.co.uk^
+||wa.devolksbank.nl^
+||wa.eonline.com^
+||wa.gifts.com^
+||wa.gymboree.com^
+||wa.localworld.co.uk^
+||wa.metro.co.uk^
+||wa.ncr.com^
+||wa.nxp.com^
+||wa.personalcreations.com^
+||wa.pjplace.com^
+||wa.postnl.nl^
+||wa.spring-gds.com^
+||wa.st.com^
+||wa.stubhub.com^
+||wa.sugarandjade.com^
+||wa.t-mobile.nl^
+||wa.vodafone.cz^
+||wa.vodafone.de^
+||wa.vodafone.pt^
+||wa1.otto.de^
+||was.epson.com^
+||was.stubhub.com^
+||was.vodafone.de^
+||was.vodafone.nl^
+||wasc.homedepot.ca^
+||wasc.homedepot.com^
+||wasc.kaufland.ro^
+||wass.ihsmarkit.com^
+||wass.spglobal.com^
+||wat.gogoinflight.com^
+||wats.gogoinflight.com^
+||web.ajostg.cfs.com.au^
+||web.ajostg.colonialfirststate.com.au^
+||web.campaign.cfs.com.au^
+||web.campaigns.colonialfirststate.com.au^
+||web.hammacher.com^
+||web.m.hurricanes.co.nz^
+||web.ulta.com^
+||webanalytics.acs.org^
+||webanalytics.astrogaming.com^
+||webanalytics.degulesider.dk^
+||webanalytics.eniro.se^
+||webanalytics.gulesider.no^
+||webanalytics.krak.dk^
+||webanalytics.logicool.co.jp^
+||webanalytics.logitech.com.cn^
+||webanalytics.logitech.com^
+||webanalytics.logitechg.com.cn^
+||webanalytics.logitechg.com^
+||webanalytics.proff.no^
+||webanalyticsnossl.websense.com^
+||webanalyticsssl.websense.com^
+||webapp.e-post.smn.no^
+||webmetrics.avaya.com^
+||webmetrics.perkinelmer.com^
+||webmetrics.turnwrench.com^
+||webmetrics.zebra.com^
+||websdkmetrics.blackrock.com^
+||webstat.4music.com^
+||webstat.channel4.com^
+||webstat.garanti.com.tr^
+||webstat.vodafone.com^
+||webstats.americanbar.org^
+||webstats.cbre.com^
+||webstats.channel4.com^
+||webstats.garanti.com.tr^
+||webstats.imf.org^
+||webstats.kronos.com^
+||webstats.vfsco.com^
+||webstats.vodafone.com^
+||webstats.volvo.com^
+||webstats.volvoce.com^
+||webstats.volvoit.com^
+||webtarget.astrogaming.com^
+||webtarget.logicool.co.jp^
+||webtarget.logitech.com.cn^
+||webtarget.logitech.com^
+||webtarget.logitechg.com.cn^
+||webtarget.logitechg.com^
+||webtraffic.executiveboard.com^
+||webtraffic.mastercontrol.com^
+||worldmtcs.nhk.jp^
+||ww0s.airtours.de^
+||ww0s.robinson.com^
+||ww0s.tui.com^
+||ww8.kohls.com^
+||ww9.kohls.com^
+||wwu.jjill.com^
+||wwv.jjill.com^
+||www-171.aig.com^
+||www-172.aig.com^
+||www-sadobe.384.co.jp^
+||www-sadobe.anabuki-community.com^
+||www-sadobe.anabuki.co.jp^
+||www-smt.daiichisankyo-hc.co.jp^
+||www.metrics.bankaustria.at^
+||www.smetrics.imedeen.us^
+||www1.discountautomirrors.com^
+||www15.jedora.com^
+||www15.jtv.com^
+||www16.jtv.com^
+||www2.automd.com^
+||www2.autopartsplace.com^
+||www2.autopartswarehouse.com^
+||www2.autopartsworld.com^
+||www2.discountairintake.com^
+||www2.discountautomirrors.com^
+||www2.discountbodyparts.com^
+||www2.discountbrakes.com^
+||www2.discountcarlights.com^
+||www2.extraspace.com^
+||www2.local.com^
+||www2.usautoparts.net^
+||www2s.automd.com^
+||www2s.autopartsgiant.com^
+||www2s.autopartswarehouse.com^
+||www2s.canadapartsonline.com^
+||www2s.carjunky.com^
+||www2s.discountautoshocks.com^
+||www2s.discountcatalyticconverters.com^
+||www2s.discountexhaustsystems.com^
+||www2s.discountfuelsystems.com^
+||www2s.extraspace.com^
+||www2s.local.com^
+||www2s.metrics.charlotterusse.com^
+||www2s.speedyperformanceparts.com^
+||www2s.storage.com^
+||www2s.thepartsbin.com^
+||www2s.usautoparts.net^
+||www3.gfa.org^
+||www3s.bimmerpartswholesale.com^
+||www3s.ing.be^
+||www3s.pitstopautoparts.com^
+||www4s.ing.be^
+||www91.intel.co.jp^
+||www91.intel.co.kr^
+||www91.intel.co.uk^
+||www91.intel.com.au^
+||www91.intel.com.br^
+||www91.intel.com.tr^
+||www91.intel.com.tw^
+||www91.intel.com^
+||www91.intel.de^
+||www91.intel.es^
+||www91.intel.fr^
+||www91.intel.in^
+||www91.intel.it^
+||www91.intel.la^
+||www91.intel.pl^
+||wwwmetricssl.visitflorida.com^
+||xp.allianz.de^
+||xps.huk.de^
+||xps.huk24.de^
+||y.ksl.com^
+||zisr3w3i2csfa76m.edge41.testandtarget.omniture.com^
+||zmetrics.boston.com^
+||zmetrics.msn.com^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_acton.txt ***
+||12build.actonservice.com^
+||2.ed.west.com^
+||3347.wolf-gordon.com^
+||3347.wolfgordon.com^
+||3dm.3dimensional.com^
+||3mark.actonservice.com^
+||3plworldwide.actonservice.com^
+||590.conviron.com^
+||a.evergage.com^
+||a.highroadsolution.com^
+||a10053.actonservice.com^
+||a10645.actonservice.com^
+||a10647.actonservice.com^
+||a10655.actonservice.com^
+||a10674.actonservice.com^
+||a10683.actonservice.com^
+||a10695.actonservice.com^
+||a10696.actonservice.com^
+||a10748.actonservice.com^
+||a11058.actonservice.com^
+||a11107.actonservice.com^
+||a11143.actonservice.com^
+||a11159.actonservice.com^
+||a11161.actonservice.com^
+||a11176.actonservice.com^
+||a11178.actonservice.com^
+||a11212.actonservice.com^
+||a11248.actonservice.com^
+||a11283.actonservice.com^
+||a11294.actonservice.com^
+||a11315.actonservice.com^
+||a11320.actonservice.com^
+||a11360.actonservice.com^
+||a11403.actonservice.com^
+||a11413003.actonservice.com^
+||a11426.actonservice.com^
+||a11442.actonservice.com^
+||a11468.actonservice.com^
+||a11481.actonservice.com^
+||a11516.actonservice.com^
+||a11519.actonservice.com^
+||a11522.actonservice.com^
+||a11537.actonservice.com^
+||a11538.actonservice.com^
+||a11550.actonservice.com^
+||a11576.actonservice.com^
+||a11584.actonservice.com^
+||a11585.actonservice.com^
+||a11601.actonservice.com^
+||a11843.actonservice.com^
+||a11862.actonservice.com^
+||a11868.actonservice.com^
+||a11872.actonservice.com^
+||a11888.actonservice.com^
+||a11904.actonservice.com^
+||a11942.actonservice.com^
+||a11943.actonservice.com^
+||a12014.actonservice.com^
+||a12016.actonservice.com^
+||a12058.actonservice.com^
+||a12192.actonservice.com^
+||a12238.actonservice.com^
+||a12254.actonservice.com^
+||a12255.actonservice.com^
+||a12256.actonservice.com^
+||a12269.actonservice.com^
+||a12273.actonservice.com^
+||a12329.actonservice.com^
+||a12332.actonservice.com^
+||a12433.actonservice.com^
+||a12440.actonservice.com^
+||a12517.actonservice.com^
+||a12520.actonservice.com^
+||a12533.actonservice.com^
+||a12547.actonservice.com^
+||a12559.actonservice.com^
+||a12561.actonservice.com^
+||a12572.actonservice.com^
+||a12619.actonservice.com^
+||a12678.actonservice.com^
+||a12724.actonservice.com^
+||a12732.actonservice.com^
+||a12734.actonservice.com^
+||a12770.actonservice.com^
+||a12777.actonservice.com^
+||a12791.actonservice.com^
+||a12826.actonservice.com^
+||a12852.actonservice.com^
+||a12872.actonservice.com^
+||a12876.actonservice.com^
+||a12893.actonservice.com^
+||a12894.actonservice.com^
+||a12924.actonservice.com^
+||a12935.actonservice.com^
+||a12956.actonservice.com^
+||a12991.actonservice.com^
+||a13007.actonservice.com^
+||a13016.actonservice.com^
+||a13027.actonservice.com^
+||a13050.actonservice.com^
+||a13072.actonservice.com^
+||a13080.actonservice.com^
+||a13083.actonservice.com^
+||a13101.actonservice.com^
+||a13104.actonservice.com^
+||a13111.actonservice.com^
+||a13112.actonservice.com^
+||a13118.actonservice.com^
+||a13132.actonservice.com^
+||a13183.actonservice.com^
+||a13188.actonservice.com^
+||a13199.actonservice.com^
+||a13209.actonservice.com^
+||a13294.actonservice.com^
+||a13309.actonservice.com^
+||a13357.actonservice.com^
+||a13363.actonservice.com^
+||a13389.actonservice.com^
+||a13404.actonservice.com^
+||a13425.actonservice.com^
+||a13472.actonservice.com^
+||a13548.actonservice.com^
+||a13557.actonservice.com^
+||a13605.actonservice.com^
+||a13620.actonservice.com^
+||a13653.actonservice.com^
+||a13664.actonservice.com^
+||a13678.actonservice.com^
+||a13709.actonservice.com^
+||a13796.actonservice.com^
+||a13850.actonservice.com^
+||a13866.actonservice.com^
+||a13885.actonservice.com^
+||a13912.actonservice.com^
+||a13913.actonservice.com^
+||a13931.actonservice.com^
+||a13938.actonservice.com^
+||a13951.actonservice.com^
+||a13956.actonservice.com^
+||a14001.actonservice.com^
+||a14010.actonservice.com^
+||a14041.actonservice.com^
+||a14057.actonservice.com^
+||a14063.actonservice.com^
+||a14069.actonservice.com^
+||a14070.actonservice.com^
+||a14082.actonservice.com^
+||a14089.actonservice.com^
+||a14109.actonservice.com^
+||a14142.actonservice.com^
+||a14163.actonservice.com^
+||a14164.actonservice.com^
+||a14181.actonservice.com^
+||a14214.actonservice.com^
+||a14225.actonservice.com^
+||a14249.actonservice.com^
+||a14259.actonservice.com^
+||a14267.actonservice.com^
+||a14273.actonservice.com^
+||a14284.actonservice.com^
+||a14315.actonservice.com^
+||a14338.actonservice.com^
+||a14339.actonservice.com^
+||a14349.actonservice.com^
+||a14362.actonservice.com^
+||a14374.actonservice.com^
+||a14377.actonservice.com^
+||a14378.actonservice.com^
+||a14382.actonservice.com^
+||a14383.actonservice.com^
+||a14412.actonservice.com^
+||a14414.actonservice.com^
+||a14415.actonservice.com^
+||a14418.actonservice.com^
+||a14448.actonservice.com^
+||a14457.actonservice.com^
+||a14481.actonservice.com^
+||a14485.actonservice.com^
+||a14489.actonservice.com^
+||a14515.actonservice.com^
+||a14518.actonservice.com^
+||a14540.actonservice.com^
+||a14641.actonservice.com^
+||a14644.actonservice.com^
+||a14647.actonservice.com^
+||a14655.actonservice.com^
+||a14661.actonservice.com^
+||a14690.actonservice.com^
+||a14700.actonservice.com^
+||a14732.actonservice.com^
+||a14774.actonservice.com^
+||a14788.actonservice.com^
+||a14797.actonservice.com^
+||a14808.actonservice.com^
+||a14814.actonservice.com^
+||a14835.actonservice.com^
+||a15567.actonservice.com^
+||a15575.actonservice.com^
+||a15599.actonservice.com^
+||a15601.actonservice.com^
+||a15613.actonservice.com^
+||a15614.actonservice.com^
+||a15633.actonservice.com^
+||a15654.actonservice.com^
+||a15662.actonservice.com^
+||a15675.actonservice.com^
+||a15691.actonservice.com^
+||a15703.actonservice.com^
+||a15717.actonservice.com^
+||a15742.actonservice.com^
+||a15781.actonservice.com^
+||a15807.actonservice.com^
+||a15817.actonservice.com^
+||a15831.actonservice.com^
+||a15832.actonservice.com^
+||a15838.actonservice.com^
+||a15908.actonservice.com^
+||a15943.actonservice.com^
+||a15944.actonservice.com^
+||a15955.actonservice.com^
+||a15960.actonservice.com^
+||a15991.actonservice.com^
+||a16009.actonservice.com^
+||a16016.actonservice.com^
+||a16017.actonservice.com^
+||a16018.actonservice.com^
+||a16030.actonservice.com^
+||a16048.actonservice.com^
+||a16052.actonservice.com^
+||a16054.actonservice.com^
+||a16068.actonservice.com^
+||a16078.actonservice.com^
+||a16084.actonservice.com^
+||a16089.actonservice.com^
+||a16096.actonservice.com^
+||a16097.actonservice.com^
+||a16101.actonservice.com^
+||a16108.actonservice.com^
+||a16113.actonservice.com^
+||a16119.actonservice.com^
+||a16121.actonservice.com^
+||a16122.actonservice.com^
+||a16133.actonservice.com^
+||a16157.actonservice.com^
+||a16161.actonservice.com^
+||a16176.actonservice.com^
+||a16179.actonservice.com^
+||a16207.actonservice.com^
+||a16220.actonservice.com^
+||a16238.actonservice.com^
+||a16241.actonservice.com^
+||a16242.actonservice.com^
+||a16257.actonservice.com^
+||a16258.actonservice.com^
+||a16269.actonservice.com^
+||a16279.actonservice.com^
+||a16282.actonservice.com^
+||a16291.actonservice.com^
+||a16292.actonservice.com^
+||a16385.actonservice.com^
+||a16404.actonservice.com^
+||a16418.actonservice.com^
+||a16453.actonservice.com^
+||a16468.actonservice.com^
+||a16473.actonservice.com^
+||a16475.actonservice.com^
+||a16476.actonservice.com^
+||a16477.actonservice.com^
+||a16478.actonservice.com^
+||a16479.actonservice.com^
+||a16502.actonservice.com^
+||a16508.actonservice.com^
+||a16509.actonservice.com^
+||a16513.actonservice.com^
+||a16523.actonservice.com^
+||a16524.actonservice.com^
+||a16526.actonservice.com^
+||a16528.actonservice.com^
+||a16529.actonservice.com^
+||a16530.actonservice.com^
+||a16531.actonservice.com^
+||a16532.actonservice.com^
+||a16533.actonservice.com^
+||a16537.actonservice.com^
+||a16560.actonservice.com^
+||a16570.actonservice.com^
+||a16581.actonservice.com^
+||a16583.actonservice.com^
+||a16585.actonservice.com^
+||a16588.actonservice.com^
+||a16589.actonservice.com^
+||a16609.actonservice.com^
+||a16611.actonservice.com^
+||a16617.actonservice.com^
+||a16629.actonservice.com^
+||a16634.actonservice.com^
+||a16635.actonservice.com^
+||a16658.actonservice.com^
+||a16696.actonservice.com^
+||a16734.actonservice.com^
+||a16748.actonservice.com^
+||a16765.actonservice.com^
+||a16778.actonservice.com^
+||a16781.actonservice.com^
+||a16834.actonservice.com^
+||a16842.actonservice.com^
+||a16844.actonservice.com^
+||a16857.actonservice.com^
+||a16858.actonservice.com^
+||a16859.actonservice.com^
+||a16860.actonservice.com^
+||a16861.actonservice.com^
+||a16862.actonservice.com^
+||a16863.actonservice.com^
+||a16864.actonservice.com^
+||a16865.actonservice.com^
+||a16871.actonservice.com^
+||a16893.actonservice.com^
+||a16899.actonservice.com^
+||a16937.actonservice.com^
+||a16955.actonservice.com^
+||a16970.actonservice.com^
+||a17015.actonservice.com^
+||a17033.actonservice.com^
+||a17045.actonservice.com^
+||a17050.actonservice.com^
+||a17084.actonservice.com^
+||a17095.actonservice.com^
+||a17096.actonservice.com^
+||a17097.actonservice.com^
+||a17098.actonservice.com^
+||a17099.actonservice.com^
+||a17100.actonservice.com^
+||a17101.actonservice.com^
+||a17114.actonservice.com^
+||a17120.actonservice.com^
+||a17121.actonservice.com^
+||a17122.actonservice.com^
+||a17124.actonservice.com^
+||a17128.actonservice.com^
+||a17174.actonservice.com^
+||a17181.actonservice.com^
+||a17182.actonservice.com^
+||a17183.actonservice.com^
+||a17186.actonservice.com^
+||a17187.actonservice.com^
+||a17189.actonservice.com^
+||a17217.actonservice.com^
+||a17229.actonservice.com^
+||a17237.actonservice.com^
+||a17245.actonservice.com^
+||a17246.actonservice.com^
+||a17276.actonservice.com^
+||a17277.actonservice.com^
+||a17278.actonservice.com^
+||a17286.actonservice.com^
+||a17292.actonservice.com^
+||a17301.actonservice.com^
+||a17302.actonservice.com^
+||a17305.actonservice.com^
+||a17322.actonservice.com^
+||a17328.actonservice.com^
+||a17347.actonservice.com^
+||a17348.actonservice.com^
+||a17350.actonservice.com^
+||a17351.actonservice.com^
+||a17352.actonservice.com^
+||a17362.actonservice.com^
+||a17367.actonservice.com^
+||a17382.actonservice.com^
+||a17393.actonservice.com^
+||a17395.actonservice.com^
+||a17396.actonservice.com^
+||a17397.actonservice.com^
+||a17398.actonservice.com^
+||a17401.actonservice.com^
+||a17402.actonservice.com^
+||a17403.actonservice.com^
+||a17406.actonservice.com^
+||a17407.actonservice.com^
+||a17408.actonservice.com^
+||a17409.actonservice.com^
+||a17410.actonservice.com^
+||a17412.actonservice.com^
+||a17414.actonservice.com^
+||a17415.actonservice.com^
+||a17416.actonservice.com^
+||a17426.actonservice.com^
+||a17436.actonservice.com^
+||a17452.actonservice.com^
+||a17455.actonservice.com^
+||a17476.actonservice.com^
+||a17481.actonservice.com^
+||a17483.actonservice.com^
+||a17485.actonservice.com^
+||a17505.actonservice.com^
+||a17513.actonservice.com^
+||a17514.actonservice.com^
+||a17538.actonservice.com^
+||a17539.actonservice.com^
+||a17549.actonservice.com^
+||a17552.actonservice.com^
+||a17564.actonservice.com^
+||a17571.actonservice.com^
+||a17591.actonservice.com^
+||a17637.actonservice.com^
+||a17638.actonservice.com^
+||a17639.actonservice.com^
+||a17668.actonservice.com^
+||a17679.actonservice.com^
+||a17685.actonservice.com^
+||a17691.actonservice.com^
+||a17698.actonservice.com^
+||a17699.actonservice.com^
+||a17700.actonservice.com^
+||a17701.actonservice.com^
+||a17703.actonservice.com^
+||a17709.actonservice.com^
+||a17739.actonservice.com^
+||a17742.actonservice.com^
+||a17744.actonservice.com^
+||a17746.actonservice.com^
+||a17752.actonservice.com^
+||a17754.actonservice.com^
+||a17756.actonservice.com^
+||a17757.actonservice.com^
+||a17758.actonservice.com^
+||a17759.actonservice.com^
+||a17760.actonservice.com^
+||a17799.actonservice.com^
+||a17801.actonservice.com^
+||a17803.actonservice.com^
+||a17818.actonservice.com^
+||a17824.actonservice.com^
+||a17842.actonservice.com^
+||a17859.actonservice.com^
+||a17869.actonservice.com^
+||a17870.actonservice.com^
+||a17883.actonservice.com^
+||a17916.actonservice.com^
+||a18327.actonservice.com^
+||a18330.actonservice.com^
+||a18886.actonservice.com^
+||a19537.actonservice.com^
+||a19609.actonservice.com^
+||a19612.actonservice.com^
+||a19615.actonservice.com^
+||a2.avomeen.com^
+||a21068.actonservice.com^
+||a22037.actonservice.com^
+||a22368.actonservice.com^
+||a23509.actonservice.com^
+||a24214.actonservice.com^
+||a24246.actonservice.com^
+||a24273.actonservice.com^
+||a24315.actonservice.com^
+||a24335.actonservice.com^
+||a24335001.actonservice.com^
+||a24336001.actonservice.com^
+||a24395.actonservice.com^
+||a24396.actonservice.com^
+||a24439.actonservice.com^
+||a24457.actonservice.com^
+||a24500.actonservice.com^
+||a24503.actonservice.com^
+||a24506.actonservice.com^
+||a24531.actonservice.com^
+||a24540.actonservice.com^
+||a24543.actonservice.com^
+||a24577001.actonservice.com^
+||a24579.actonservice.com^
+||a24591.actonservice.com^
+||a24600.actonservice.com^
+||a24606.actonservice.com^
+||a24612.actonservice.com^
+||a24638.actonservice.com^
+||a24648.actonservice.com^
+||a24703.actonservice.com^
+||a24727.actonservice.com^
+||a24730.actonservice.com^
+||a24733.actonservice.com^
+||a24766.actonservice.com^
+||a24780.actonservice.com^
+||a24786.actonservice.com^
+||a24793.actonservice.com^
+||a24809.actonservice.com^
+||a24812.actonservice.com^
+||a24820.actonservice.com^
+||a24853.actonservice.com^
+||a24858.actonservice.com^
+||a24863.actonservice.com^
+||a24865.actonservice.com^
+||a24868.actonservice.com^
+||a24899.actonservice.com^
+||a24907.actonservice.com^
+||a24910.actonservice.com^
+||a24962.actonservice.com^
+||a24982.actonservice.com^
+||a24985.actonservice.com^
+||a24998.actonservice.com^
+||a25067.actonservice.com^
+||a25095.actonservice.com^
+||a25098.actonservice.com^
+||a25134.actonservice.com^
+||a25152.actonservice.com^
+||a25186.actonservice.com^
+||a25210.actonservice.com^
+||a25216.actonservice.com^
+||a25224.actonservice.com^
+||a25226.actonservice.com^
+||a25250.actonservice.com^
+||a25303.actonservice.com^
+||a25309.actonservice.com^
+||a25351.actonservice.com^
+||a25370.actonservice.com^
+||a25378.actonservice.com^
+||a25381.actonservice.com^
+||a25393.actonservice.com^
+||a25406.actonservice.com^
+||a25409.actonservice.com^
+||a25513.actonservice.com^
+||a25526.actonservice.com^
+||a25535.actonservice.com^
+||a25545.actonservice.com^
+||a25546.actonservice.com^
+||a25569.actonservice.com^
+||a25572.actonservice.com^
+||a25580.actonservice.com^
+||a25598.actonservice.com^
+||a25599.actonservi
+||a26236.actonservice.com^
+||a26251.actonservice.com^
+||a26268.actonservice.com^
+||a26292.actonservice.com^
+||a26312.actonservice.com^
+||a26361.actonservice.com^
+||a26362.actonservice.com^
+||a26391.actonservice.com^
+||a26394.actonservice.com^
+||a26395.actonservice.com^
+||a26410.actonservice.com^
+||a26448.actonservice.com^
+||a26463.actonservice.com^
+||a26495.actonservice.com^
+||a26521.actonservice.com^
+||a26582.actonservice.com^
+||a26632.actonservice.com^
+||a26634.actonservice.com^
+||a26650.actonservice.com^
+||a26665.actonservice.com^
+||a26676.actonservice.com^
+||a26695.actonservice.com^
+||a26698.actonservice.com^
+||a26705.actonservice.com^
+||a26758.actonservice.com^
+||a26767.actonservice.com^
+||a26781.actonservice.com^
+||a26807.actonservice.com^
+||a26816.actonservice.com^
+||a26826.actonservice.com^
+||a26839.actonservice.com^
+||a26857.actonservice.com^
+||a26879.actonservice.com^
+||a26889.actonservice.com^
+||a26900.actonservice.com^
+||a26962.actonservice.com^
+||a26965.actonservice.com^
+||a26970.actonservice.com^
+||a26991.actonservice.com^
+||a26996.actonservice.com^
+||a27050.actonservice.com^
+||a27059.actonservice.com^
+||a27061.actonservice.com^
+||a27067.actonservice.com^
+||a27069.actonservice.com^
+||a27070.actonservice.com^
+||a27072.actonservice.com^
+||a27075.actonservice.com^
+||a27081.actonservice.com^
+||a27084.actonservice.com^
+||a27087.actonservice.com^
+||a27091.actonservice.com^
+||a27092.actonservice.com^
+||a27110.actonservice.com^
+||a27117.actonservice.com^
+||a27129.actonservice.com^
+||a27138.actonservice.com^
+||a27159.actonservice.com^
+||a27172.actonservice.com^
+||a27175.actonservice.com^
+||a27196.actonservice.com^
+||a27199.actonservice.com^
+||a27205.actonservice.com^
+||a27234.actonservice.com^
+||a27252.actonservice.com^
+||a27297.actonservice.com^
+||a27304.actonservice.com^
+||a27320.actonservice.com^
+||a27331.actonservice.com^
+||a27337.actonservice.com^
+||a27339.actonservice.com^
+||a27342.actonservice.com^
+||a27355.actonservice.com^
+||a27358.actonservice.com^
+||a27384.actonservice.com^
+||a27394.actonservice.com^
+||a27396.actonservice.com^
+||a27397.actonservice.com^
+||a27409.actonservice.com^
+||a27421.actonservice.com^
+||a27424.actonservice.com^
+||a27435.actonservice.com^
+||a27457.actonservice.com^
+||a27461.actonservice.com^
+||a27469.actonservice.com^
+||a27472.actonservice.com^
+||a27519.actonservice.com^
+||a27563.actonservice.com^
+||a27571.actonservice.com^
+||a27574.actonservice.com^
+||a27581.actonservice.com^
+||a27584.actonservice.com^
+||a27587.actonservice.com^
+||a27593.actonservice.com^
+||a27596.actonservice.com^
+||a27598.actonservice.com^
+||a27602.actonservice.com^
+||a27617.actonservice.com^
+||a27619.actonservice.com^
+||a27620.actonservice.com^
+||a27647.actonservice.com^
+||a27657.actonservice.com^
+||a27666.actonservice.com^
+||a27679.actonservice.com^
+||a27686.actonservice.com^
+||a27700.actonservice.com^
+||a27712.actonservice.com^
+||a27728.actonservice.com^
+||a27743.actonservice.com^
+||a27809001.actonservice.com^
+||a27815.actonservice.com^
+||a27817.actonservice.com^
+||a27825.actonservice.com^
+||a27844.actonservice.com^
+||a27872.actonservice.com^
+||a27877.actonservice.com^
+||a27880.actonservice.com^
+||a27884.actonservice.com^
+||a27887.actonservice.com^
+||a27890.actonservice.com^
+||a27899.actonservice.com^
+||a27902.actonservice.com^
+||a27909.actonservice.com^
+||a27923.actonservice.com^
+||a27927.actonservice.com^
+||a27933.actonservice.com^
+||a27942.actonservice.com^
+||a27952.actonservice.com^
+||a27976.actonservice.com^
+||a27980.actonservice.com^
+||a27989.actonservice.com^
+||a27997.actonservice.com^
+||a28011.actonse914.actonservice.com^
+||a28962.actonservice.com^
+||a29009.actonservice.com^
+||a29032.actonservice.com^
+||a29045.actonservice.com^
+||a29047.actonservice.com^
+||a29071.actonservice.com^
+||a29084.actonservice.com^
+||a29088.actonservice.com^
+||a29090.actonservice.com^
+||a29091.actonservice.com^
+||a29112.actonservice.com^
+||a29134.actonservice.com^
+||a29152.actonservice.com^
+||a29171.actonservice.com^
+||a29197.actonservice.com^
+||a29198.actonservice.com^
+||a29213.actonservice.com^
+||a29218.actonservice.com^
+||a29225.actonservice.com^
+||a29235.actonservice.com^
+||a29238.actonservice.com^
+||a29251.actonservice.com^
+||a29255.actonservice.com^
+||a29270.actonservice.com^
+||a29282.actonservice.com^
+||a29286.actonservice.com^
+||a29312.actonservice.com^
+||a29315.actonservice.com^
+||a29319.actonservice.com^
+||a29322.actonservice.com^
+||a29330.actonservice.com^
+||a29354.actonservice.com^
+||a29364.actonservice.com^
+||a29397.actonservice.com^
+||a29412.actonservice.com^
+||a29421.actonservice.com^
+||a29424.actonservice.com^
+||a29440.actonservice.com^
+||a29478.actonservice.com^
+||a29483.actonservice.com^
+||a29508.actonservice.com^
+||a29521.actonservice.com^
+||a29523.actonservice.com^
+||a29539.actonservice.com^
+||a29546.actonservice.com^
+||a29547.actonservice.com^
+||a29565.actonservice.com^
+||a29586.actonservice.com^
+||a29643.actonservice.com^
+||a29655.actonservice.com^
+||a29685.actonservice.com^
+||a29715.actonservice.com^
+||a29757.actonservice.com^
+||a29763.actonservice.com^
+||a29784.actonservice.com^
+||a29794.actonservice.com^
+||a29798.actonservice.com^
+||a29817.actonservice.com^
+||a29820.actonservice.com^
+||a29823.actonservice.com^
+||a29827.actonservice.com^
+||a29831.actonservice.com^
+||a29832.actonservice.com^
+||a29846.actonservice.com^
+||a29866.actonservice.com^
+||a29868.actonservice.com^
+||a29881.actonservice.com^
+||a30003.actonservice.com^
+||a30667.actonservice.com^
+||a30668.actonservice.com^
+||a30798.actonservice.com^
+||a31047.actonservice.com^
+||a31254.actonservice.com^
+||a31734.actonservice.com^
+||a31970.actonservice.com^
+||a31985.actonservice.com^
+||a32224.actonservice.com^
+||a32227.actonservice.com^
+||a32359.actonservice.com^
+||a32559.actonservice.com^
+||a32858.actonservice.com^
+||a33167.actonservice.com^
+||a33174.actonservice.com^
+||a33374.actonservice.com^
+||a33393.actonservice.com^
+||a33519.actonservice.com^
+||a33612.actonservice.com^
+||a33882.actonservice.com^
+||a33994.actonservice.com^
+||a34357.actonservice.com^
+||a34396.actonservice.com^
+||a34436.actonservice.com^
+||a34504.actonservice.com^
+||a34524.actonservice.com^
+||a34529.actonservice.com^
+||a34549.actonservice.com^
+||a34553.actonservice.com^
+||a34718.actonservice.com^
+||a34773.actonservice.com^
+||a34894.actonservice.com^
+||a34938.actonservice.com^
+||a34989.actonservice.com^
+||a35094.actonservice.com^
+||a35110.actonservice.com^
+||a35161.actonservice.com^
+||a35388.actonservice.com^
+||a35415.actonservice.com^
+||a35421.actonservice.com^
+||a35511.actonservice.com^
+||a35617.actonservice.com^
+||a35688.actonservice.com^
+||a35697.actonservice.com^
+||a35827.actonservice.com^
+||a35851.actonservice.com^
+||a35907.actonservice.com^
+||a35910.actonservice.com^
+||a35933.actonservice.com^
+||a36025.actonservice.com^
+||a36117.actonservice.com^
+||a36168.actonservice.com^
+||a36210.actonservice.com^
+||a36213.actonservice.com^
+||a36216.actonservice.com^
+||a36243.actonservice.com^
+||a36279.actonservice.com^
+||a36531.actonservice.com^
+||a36535.actonservice.com^
+||a36575.actonservice.com^
+||a36590.actonservice.com^
+||a36755.actonservice.com^
+||a36777.actonservice.com^
+||a36961.actonservice.comservice.com^
+||a38761.actonservice.com^
+||a38820.actonservice.com^
+||a38951.actonservice.com^
+||a39173.actonservice.com^
+||a39176.actonservice.com^
+||a39177.actonservice.com^
+||a39210.actonservice.com^
+||a39465.actonservice.com^
+||a39468.actonservice.com^
+||a39498.actonservice.com^
+||a39539.actonservice.com^
+||a39606.actonservice.com^
+||a39662.actonservice.com^
+||a39705.actonservice.com^
+||a39744.actonservice.com^
+||a39780.actonservice.com^
+||a39804.actonservice.com^
+||a40194.actonservice.com^
+||a40452.actonservice.com^
+||a40554.actonservice.com^
+||a40587.actonservice.com^
+||a40890.actonservice.com^
+||a40898.actonservice.com^
+||a40899.actonservice.com^
+||a40901.actonservice.com^
+||a40904.actonservice.com^
+||a40905.actonservice.com^
+||a40907.actonservice.com^
+||a40910.actonservice.com^
+||a40913.actonservice.com^
+||a40916.actonservice.com^
+||a40917.actonservice.com^
+||a41166.actonservice.com^
+||a41172.actonservice.com^
+||a41199.actonservice.com^
+||a41309.actonservice.com^
+||a41334.actonservice.com^
+||a41342.actonservice.com^
+||a41385.actonservice.com^
+||a41505.actonservice.com^
+||a41522.actonservice.com^
+||a41547.actonservice.com^
+||a41550.actonservice.com^
+||a41553.actonservice.com^
+||a41556.actonservice.com^
+||a41558.actonservice.com^
+||a41609.actonservice.com^
+||a41628.actonservice.com^
+||a41643.actonservice.com^
+||a41691.actonservice.com^
+||a41714.actonservice.com^
+||a41768.actonservice.com^
+||a41976.actonservice.com^
+||a42330.actonservice.com^
+||a42368.actonservice.com^
+||a42382.actonservice.com^
+||a42384.actonservice.com^
+||a42579.actonservice.com^
+||a42580.actonservice.com^
+||a42623.actonservice.com^
+||a42624.actonservice.com^
+||a42625.actonservice.com^
+||a42626.actonservice.com^
+||a42628.actonservice.com^
+||a42701.actonservice.com^
+||a42707.actonservice.com^
+||a42767.actonservice.com^
+||a42807.actonservice.com^
+||a42845.actonservice.com^
+||a42872.actonservice.com^
+||a42900.actonservice.com^
+||a42917.actonservice.com^
+||a42918.actonservice.com^
+||a42920.actonservice.com^
+||a42927.actonservice.com^
+||a43094.actonservice.com^
+||a43242.actonservice.com^
+||a43246.actonservice.com^
+||a43248.actonservice.com^
+||a43253.actonservice.com^
+||a43254.actonservice.com^
+||a43256.actonservice.com^
+||a43257.actonservice.com^
+||a43260.actonservice.com^
+||a43261.actonservice.com^
+||a43263.actonservice.com^
+||a43271.actonservice.com^
+||a43285.actonservice.com^
+||a43286.actonservice.com^
+||a43290.actonservice.com^
+||a43293.actonservice.com^
+||a43295.actonservice.com^
+||a43296.actonservice.com^
+||a43305.actonservice.com^
+||a43307.actonservice.com^
+||a43309.actonservice.com^
+||a43312.actonservice.com^
+||a43315.actonservice.com^
+||a43317.actonservice.com^
+||a43318.actonservice.com^
+||a43320.actonservice.com^
+||a43321.actonservice.com^
+||a43326.actonservice.com^
+||a43329.actonservice.com^
+||a43333.actonservice.com^
+||a43337.actonservice.com^
+||a43338.actonservice.com^
+||a43339.actonservice.com^
+||a43345.actonservice.com^
+||a43347.actonservice.com^
+||a43348.actonservice.com^
+||a43354.actonservice.com^
+||a43366.actonservice.com^
+||a43367.actonservice.com^
+||a43368.actonservice.com^
+||a43369.actonservice.com^
+||a43372.actonservice.com^
+||a43373.actonservice.com^
+||a43375.actonservice.com^
+||a43376.actonservice.com^
+||a43378.actonservice.com^
+||a43379.actonservice.com^
+||a43380.actonservice.com^
+||a43381.actonservice.com^
+||a43385.actonservice.com^
+||a43386.actonservice.com^
+||a43396.actonservice.com^
+||a43406.actonservice.com^
+||a43410.actonservice.com^
+||a43411.actonservice.com^
+||a43412.actonservice.com^
+||a43414.actonservice.com^
+||a4342nservice.com^
+||a43614.actonservice.com^
+||a43619.actonservice.com^
+||a43621.actonservice.com^
+||a43624.actonservice.com^
+||a43626.actonservice.com^
+||a43628.actonservice.com^
+||a43630.actonservice.com^
+||a43634.actonservice.com^
+||a43640.actonservice.com^
+||a43645.actonservice.com^
+||a43649.actonservice.com^
+||a43658.actonservice.com^
+||a43661.actonservice.com^
+||a43662.actonservice.com^
+||a43665.actonservice.com^
+||a43667.actonservice.com^
+||a43668.actonservice.com^
+||a43672.actonservice.com^
+||a43677.actonservice.com^
+||a43678.actonservice.com^
+||a43685.actonservice.com^
+||a43694.actonservice.com^
+||a43698.actonservice.com^
+||a43702.actonservice.com^
+||a43708.actonservice.com^
+||a43710.actonservice.com^
+||a43711.actonservice.com^
+||a43712.actonservice.com^
+||a43715.actonservice.com^
+||a43723.actonservice.com^
+||a43724.actonservice.com^
+||a43726.actonservice.com^
+||a43733.actonservice.com^
+||a43736.actonservice.com^
+||a43737.actonservice.com^
+||a43740.actonservice.com^
+||a43748.actonservice.com^
+||a43749.actonservice.com^
+||a43750.actonservice.com^
+||a43757.actonservice.com^
+||a43762.actonservice.com^
+||a43765.actonservice.com^
+||a43766.actonservice.com^
+||a43767.actonservice.com^
+||a43770.actonservice.com^
+||a43772.actonservice.com^
+||a43775.actonservice.com^
+||a43778.actonservice.com^
+||a43780.actonservice.com^
+||a43782.actonservice.com^
+||a43784.actonservice.com^
+||a43785.actonservice.com^
+||a43787.actonservice.com^
+||a43789.actonservice.com^
+||a43790.actonservice.com^
+||a43791.actonservice.com^
+||a43792.actonservice.com^
+||a43794.actonservice.com^
+||a43797.actonservice.com^
+||a43800.actonservice.com^
+||a43801.actonservice.com^
+||a43803.actonservice.com^
+||a43804.actonservice.com^
+||a43805.actonservice.com^
+||a43806.actonservice.com^
+||a43807.actonservice.com^
+||a43814.actonservice.com^
+||a43818.actonservice.com^
+||a43820.actonservice.com^
+||a43821.actonservice.com^
+||a43830.actonservice.com^
+||a43834.actonservice.com^
+||a43838.actonservice.com^
+||a43839.actonservice.com^
+||a43840.actonservice.com^
+||a43843.actonservice.com^
+||a43846.actonservice.com^
+||a43847.actonservice.com^
+||a43848.actonservice.com^
+||a43849.actonservice.com^
+||a43853.actonservice.com^
+||a43855.actonservice.com^
+||a43856.actonservice.com^
+||a43858.actonservice.com^
+||a43860.actonservice.com^
+||a43863.actonservice.com^
+||a43866.actonservice.com^
+||a43869.actonservice.com^
+||a43870.actonservice.com^
+||a43871.actonservice.com^
+||a43875.actonservice.com^
+||a43876.actonservice.com^
+||a43878.actonservice.com^
+||a43889.actonservice.com^
+||a43893.actonservice.com^
+||a43896.actonservice.com^
+||a43899.actonservice.com^
+||a43901.actonservice.com^
+||a43906.actonservice.com^
+||a43909.actonservice.com^
+||a43910.actonservice.com^
+||a43913.actonservice.com^
+||a43918.actonservice.com^
+||a43919.actonservice.com^
+||a43921.actonservice.com^
+||a43933.actonservice.com^
+||a43934.actonservice.com^
+||a43937.actonservice.com^
+||a43939.actonservice.com^
+||a43951.actonservice.com^
+||a43952.actonservice.com^
+||a43954.actonservice.com^
+||a43966.actonservice.com^
+||a43967.actonservice.com^
+||a43968.actonservice.com^
+||a43972.actonservice.com^
+||a43976.actonservice.com^
+||a43977.actonservice.com^
+||a43981.actonservice.com^
+||a43982.actonservice.com^
+||a43993.actonservice.com^
+||a43995.actonservice.com^
+||a43996.actonservice.com^
+||a43999.actonservice.com^
+||a44000.actonservice.com^
+||a44022.actonservice.com^
+||a44023.actonservice.com^
+||a44031.actonservice.com^
+||a44036.actonservice.com^
+||a44043.actonservice.com^
+||a44050.actonservice.com^
+||a44051.actonservice.com^
+||a440ervice.com^
+||a44119.actonservice.com^
+||a44120.actonservice.com^
+||a44122.actonservice.com^
+||a44125.actonservice.com^
+||a44127.actonservice.com^
+||a44128.actonservice.com^
+||a44130.actonservice.com^
+||a44131.actonservice.com^
+||a44134.actonservice.com^
+||a44135.actonservice.com^
+||a44137.actonservice.com^
+||a44138.actonservice.com^
+||a44143.actonservice.com^
+||a44145.actonservice.com^
+||a44147.actonservice.com^
+||a44148.actonservice.com^
+||a44155.actonservice.com^
+||a44156.actonservice.com^
+||a44157.actonservice.com^
+||a44170.actonservice.com^
+||a44171.actonservice.com^
+||a44172.actonservice.com^
+||a44177.actonservice.com^
+||a44178.actonservice.com^
+||a44179.actonservice.com^
+||a44182.actonservice.com^
+||a44183.actonservice.com^
+||a44184.actonservice.com^
+||a44190.actonservice.com^
+||a44193.actonservice.com^
+||a44195.actonservice.com^
+||a44200.actonservice.com^
+||a44201.actonservice.com^
+||a44203.actonservice.com^
+||a44205.actonservice.com^
+||a44211.actonservice.com^
+||a44213.actonservice.com^
+||a44214.actonservice.com^
+||a44222.actonservice.com^
+||a44227.actonservice.com^
+||a44230.actonservice.com^
+||a44232.actonservice.com^
+||a44233.actonservice.com^
+||a44241.actonservice.com^
+||a44246.actonservice.com^
+||a44251.actonservice.com^
+||a44263.actonservice.com^
+||a44267.actonservice.com^
+||a44269.actonservice.com^
+||a44270.actonservice.com^
+||a44271.actonservice.com^
+||a44272.actonservice.com^
+||a44273.actonservice.com^
+||a44274.actonservice.com^
+||a44275.actonservice.com^
+||a44277.actonservice.com^
+||a44281.actonservice.com^
+||a44287.actonservice.com^
+||a44289.actonservice.com^
+||a44293.actonservice.com^
+||a44300.actonservice.com^
+||a44301.actonservice.com^
+||a44304.actonservice.com^
+||a44305.actonservice.com^
+||a44306.actonservice.com^
+||a44307.actonservice.com^
+||a44309.actonservice.com^
+||a44310.actonservice.com^
+||a44311.actonservice.com^
+||a44313.actonservice.com^
+||a44314.actonservice.com^
+||a44315.actonservice.com^
+||a44316.actonservice.com^
+||a44320.actonservice.com^
+||a44321.actonservice.com^
+||a44322.actonservice.com^
+||a44325.actonservice.com^
+||a44329.actonservice.com^
+||a44332.actonservice.com^
+||a44342.actonservice.com^
+||a44344.actonservice.com^
+||a44352.actonservice.com^
+||a44354.actonservice.com^
+||a44356.actonservice.com^
+||a44357.actonservice.com^
+||a44358.actonservice.com^
+||a44359.actonservice.com^
+||a44363.actonservice.com^
+||a44364.actonservice.com^
+||a44370.actonservice.com^
+||a44371.actonservice.com^
+||a44379.actonservice.com^
+||a44395.actonservice.com^
+||a44397.actonservice.com^
+||a44529.actonservice.com^
+||a44530.actonservice.com^
+||a44557.actonservice.com^
+||a44581.actonservice.com^
+||a44587.actonservice.com^
+||a44614.actonservice.com^
+||a44619.actonservice.com^
+||a44627.actonservice.com^
+||a44644.actonservice.com^
+||a44656.actonservice.com^
+||a44662.actonservice.com^
+||a44670.actonservice.com^
+||a44685.actonservice.com^
+||a44686.actonservice.com^
+||a44688.actonservice.com^
+||a44712.actonservice.com^
+||a44734.actonservice.com^
+||a44746.actonservice.com^
+||a44748.actonservice.com^
+||a44765.actonservice.com^
+||a44766.actonservice.com^
+||a44772.actonservice.com^
+||a44775.actonservice.com^
+||a44784.actonservice.com^
+||a44785.actonservice.com^
+||a44791.actonservice.com^
+||a44795.actonservice.com^
+||a44820.actonservice.com^
+||a44828.actonservice.com^
+||a44831.actonservice.com^
+||a44833.actonservice.com^
+||a44839.actonservice.com^
+||a44840.actonservice.com^
+||a44845.actonservice.com^
+||a44848.actonservice.com^
+||a44853.actonservice.com^
+||a44863.actonservice.com^
+||a44865.actonservice.com^
+||a44876e.com^
+||a45356.actonservice.com^
+||a45357.actonservice.com^
+||a45359.actonservice.com^
+||a45360.actonservice.com^
+||a45362.actonservice.com^
+||a45363.actonservice.com^
+||a45364.actonservice.com^
+||a45365.actonservice.com^
+||a45366.actonservice.com^
+||a45367.actonservice.com^
+||a45395.actonservice.com^
+||a45403.actonservice.com^
+||a45405.actonservice.com^
+||a45406.actonservice.com^
+||a45411.actonservice.com^
+||a45415.actonservice.com^
+||a45420.actonservice.com^
+||a45427.actonservice.com^
+||a45428.actonservice.com^
+||a45429.actonservice.com^
+||a45443.actonservice.com^
+||a45445.actonservice.com^
+||a45449.actonservice.com^
+||a45452.actonservice.com^
+||a45456.actonservice.com^
+||a45463.actonservice.com^
+||a45477.actonservice.com^
+||a45478.actonservice.com^
+||a45481.actonservice.com^
+||a45498.actonservice.com^
+||a45500.actonservice.com^
+||a45504.actonservice.com^
+||a45508.actonservice.com^
+||a45513.actonservice.com^
+||a45520.actonservice.com^
+||a45521.actonservice.com^
+||a45526.actonservice.com^
+||a45542.actonservice.com^
+||a45548.actonservice.com^
+||a45553.actonservice.com^
+||a45554.actonservice.com^
+||a45570.actonservice.com^
+||a45579.actonservice.com^
+||a45580.actonservice.com^
+||a45584.actonservice.com^
+||a45612.actonservice.com^
+||a45623.actonservice.com^
+||a45634.actonservice.com^
+||a45655.actonservice.com^
+||a45697.actonservice.com^
+||a45704.actonservice.com^
+||a45710.actonservice.com^
+||a45712.actonservice.com^
+||a45716.actonservice.com^
+||a45718.actonservice.com^
+||a45720.actonservice.com^
+||a45722.actonservice.com^
+||a45733.actonservice.com^
+||a45734.actonservice.com^
+||a45751.actonservice.com^
+||a45752.actonservice.com^
+||a45759.actonservice.com^
+||a45770.actonservice.com^
+||a45785.actonservice.com^
+||a45794.actonservice.com^
+||a45797.actonservice.com^
+||a45811.actonservice.com^
+||a45817.actonservice.com^
+||a45836.actonservice.com^
+||a45841.actonservice.com^
+||a45855.actonservice.com^
+||a45856.actonservice.com^
+||a45863.actonservice.com^
+||a45868.actonservice.com^
+||a45899.actonservice.com^
+||a45910.actonservice.com^
+||a8780.actonservice.com^
+||a9643.actonservice.com^
+||aad.actonservice.com^
+||aagon.actonservice.com^
+||aahamarketing.hubinternational.com^
+||aamcompany.actonservice.com^
+||abclegal.actonservice.com^
+||abracon.actonservice.com^
+||absinfo.eagle.org^
+||acadian-asset.actonservice.com^
+||acclaro.actonservice.com^
+||accuride.actonservice.com^
+||accutrain.actonservice.com^
+||accuzip.actonservice.com^
+||acemetrix.actonservice.com^
+||acendas.actonservice.com^
+||aclordi.actonservice.com^
+||act-on-marketing.advancedsolutionsplm.com^
+||act-on-marketing.asidesignsoftware.com^
+||act-on-marketing.slot3d.com^
+||act-on.ioactive.com^
+||act-on.snb.com^
+||act-on.up.edu.pe^
+||act.boxerproperty.com^
+||act.colorlines.com^
+||act.convergencetraining.com^
+||act.cwsglobal.org^
+||act.davistech.edu^
+||act.enli.net^
+||act.lanap.com^
+||act.online.engineering.nyu.edu^
+||act.pivotpointsecurity.com^
+||act.plumvoice.com^
+||act.soneticscorp.com^
+||act.wernerelectric.com^
+||actie.milieudefensie.nl^
+||action.advisorycloud.com^
+||action.logixfiber.com^
+||action.totalcompbuilder.com^
+||action.totalrewardssoftware.com^
+||action.unifiedoffice.com^
+||acton.altep.com^
+||acton.bluetreesystems.com^
+||acton.brightspeed.com^
+||acton.convergentdental.com^
+||acton.dotcom-monitor.com^
+||acton.goldencomm.com^
+||acton.iriworldwide.com^
+||acton.locatesmarter.com^
+||acton.marketing.knowlarity.com^
+||acton.oosis.com^
+||acton.outleads.com^
+||acton.prolabs.com^
+||acton.sightlife.org^
+||acton.simpleviewinc.com^
+||acton.tourismireland.com^
+||acton.trefis.com^
+||actondev.actonservice.com^
+||adm.adminstrumentengineering.com.au^
+||administrator.pnclassaction.com^
+||admissions.easterncollege.ca^
+||admissions.trios.com^
+||admit.mountsaintvincenans.com^
+||ae.cobweb.com^
+||alwayscare.starmountlife.com^
+||aomarketing.blytheco.com^
+||apply.maxlend.com^
+||apptus.actonservice.com^
+||aptare.actonservice.com^
+||apwip-dev.actonservice.com^
+||apwip.actonservice.com^
+||aqr.actonservice.com^
+||aragenbio.actonservice.com^
+||aragonresearch.actonservice.com^
+||argyleforum.actonservice.com^
+||arisglobal.actonservice.com^
+||arrayasolutions.actonservice.com^
+||art2wave.actonservice.com^
+||artisan.actonservice.com^
+||asap-systems.actonservice.com^
+||asc.asc-net.com^
+||ascassociation.actonservice.com^
+||ascentcrm.actonservice.com^
+||ashcroft.actonservice.com^
+||ashergroup.actonservice.com^
+||asiamarketing.sedgwick.com^
+||asimarketing.antonsystems.com^
+||assets.channelplay.in^
+||association.locktonaffinity.net^
+||assure360.actonservice.com^
+||astromed.actonservice.com^
+||at.sharpmarketing.eu^
+||atbs.actonservice.com^
+||aticti.actonservice.com^
+||atlastravel.actonservice.com^
+||atlasworldusa.actonservice.com^
+||aumarketing.sedgwick.com^
+||aurelianlending.actonservice.com^
+||authentic3d.actonservice.com^
+||automate.gixxy.com^
+||autozone.actonservice.com^
+||avalere.actonservice.com^
+||avaloninnovation.actonservice.com^
+||avandsecurity.actonservice.com^
+||avantidestinations.actonservice.com^
+||avertium.actonservice.com^
+||avid.actonservice.com^
+||avma.avmaplit.com^
+||avolvesoftware.actonservice.com^
+||axion-biosystems.actonservice.com^
+||axisre.axiscapital.com^
+||bakercommunications.actonservice.com^
+||ballantine.actonservice.com^
+||ballymoregroup.actonservice.com^
+||bayshoresystems.actonservice.com^
+||bcanl.bca-autoveiling.nl^
+||bcc-ltd.actonservice.com^
+||bcob.charlotte.edu^
+||bcob.uncc.edu^
+||bcs.actonservice.com^
+||bdo.actonservice.com^
+||bdoaustralia.bdo.com.au^
+||beanworks.actonservice.com^
+||beaumont.actonservice.com^
+||bestbuy.actonservice.com^
+||bestinfo.bluetrustloans.com^
+||beyondmeasure.rigoltech.com^
+||bgiamericas.actonservice.com^
+||bi.concordesolutions.com^
+||bigcustomernetwork.actonservice.com^
+||biminibliss.rwbimini.com^
+||bioanalyticalmarketing.eurofins-info.com^
+||biophysicsgroup.actonservice.com^
+||bison.actonservice.com^
+||biworldwide.actonservice.com^
+||biznews.oregon.gov^
+||bizz.cochraneco.com^
+||blackmesh.actonservice.com^
+||bladv.actonservice.com^
+||blockchain.actonservice.com^
+||blog.b2lead.com^
+||blog.trinityconsultants.com^
+||blue-rocket.actonservice.com^
+||blueinfo.marugroup.net^
+||bluemarblepayroll.actonservice.com^
+||bluemountains.actonservice.com^
+||bluvue.actonservice.com^
+||blytheco.actonservice.com^
+||bmiimaging.actonservice.com^
+||bobswatches.actonservice.com^
+||bowl.actonservice.com^
+||br.bio-rad.com^
+||brainsell.actonservice.com^
+||brands.cambrio.com^
+||briefing.actonservice.com^
+||bringg.actonservice.com^
+||brukernano.actonservice.com^
+||bu.actonservice.com^
+||bubblewrapp.actonservice.com^
+||build.bildgta.ca^
+||bulkbookstore.actonservice.com^
+||burnswhite.actonservice.com^
+||business-decision.actonservice.com^
+||business.franchiseforsale.com^
+||business.franchiseopportunities.com^
+||business.matchd.nl^
+||business.royal-cars.com^
+||businessgrouphealth.actonservice.com^
+||butlercc.actonservice.com^
+||buzz.logility.com^
+||buzz.neilsonmarketing.com^
+||c-c-l.actonservice.com^
+||c4cm.actonservice.com^
+||c4contexture.actonservice.com^
+||ca.ssl.holdmybeerconsulting.com^
+||caderonline.bu.edu^
+||caf.actonservice.com^
+||calgary-content.cresa.com^
+||caliberco.actonservice.com^
+||caljetelite.actonservice.com^
+||callsource.actonservice.com^
+||calmradio.actonservice.com^
+||camisado.actonservice.com^
+||campaign.csrxp.org^
+||campaign.lexjet.com^
+||campaigns.ashfieldengage.com^
+||campaigns.hygiena.com^
+||campaigns.mindplusmatter.com^
+||campaigns.primaverabss.com^
+||campaigns.wordandbrown.com^
+||capplanllc.actonservice.com^
+||caradonna.actonservice.com^
+||cargas.actonservice.com^
+||cargurus.actonservice.com^
+||carlisleit.actonservice.com^
+||carolina.actonservice.com^
+||catharsisproductionsmarketing.catharsisproductions.com^
+||cc.pennstatehealth.org^
+||celigo.actonservice.com^
+||cerionnano.actonservice.com^
+||cfpwood.actonservice.com.com^
+||ch.sharpmarketing.eu^
+||click.aabacosmallbusiness.com^
+||click.quickenloansnow.com^
+||college.business.oregonstate.edu^
+||communications.all-risks.com^
+||communications.enrouteglobalexchange.com^
+||communications.globalwidemedia.com^
+||communications.lydallpm.com^
+||communications.marlboroughgroup.com^
+||communications.meadowbrook.com^
+||communications.optimagfx.com^
+||communications.parmenion-im.co.uk^
+||communications.peopleadmin.com^
+||communications.qualico.com^
+||communications.rillion.com^
+||communications.taylorcorp.com^
+||communications.usfleettracking.com^
+||communications.worldtravelinc.com^
+||communications.ypo.org^
+||community.axiscapital.com^
+||community.chpw.org^
+||complianceupdates.aem.org^
+||compugen.actonservice.com^
+||compulite.actonservice.com^
+||compuware.actonservice.com^
+||comviewcorp.actonservice.com^
+||conference.flsmidth.com^
+||confiaen.legalitas.com^
+||connect.audalianexia.com^
+||connect.bdoalliance.com^
+||connect.blackmesh.com^
+||connect.businessldn.co.uk^
+||connect.chiropractic.ac.nz^
+||connect.ciena.com^
+||connect.coloradomtn.edu^
+||connect.dexterchaney.com^
+||connect.digi.com^
+||connect.evocalize.com^
+||connect.frontier.com^
+||connect.imam-us.org^
+||connect.invibio.com^
+||connect.kristechwire.com^
+||connect.landy.com^
+||connect.lightriver.com^
+||connect.mdtelephone.com^
+||connect.meringcarson.com^
+||connect.mikrocentrum.nl^
+||connect.munsonhealthcare.org^
+||connect.opendoorerp.com^
+||connect.purebranding.com^
+||connect.rallypoint.com^
+||connect.rush.edu^
+||connect.shopaplusrentals.com^
+||connect.shopezrentals.com^
+||connect.shoprentone.com^
+||connect.sigbee.com^
+||connect.stvincentcharity.com^
+||connect.thinkinterval.com^
+||connect.tpgtelecom.com.au^
+||connect.uniti.com^
+||connect.uofuhealth.org^
+||connect.walkerfirst.com^
+||connected.integrationpoint.com^
+||connectedmedicaltechnologies.actonservice.com^
+||connexuscu.actonservice.com^
+||conseil.seicgland.ch^
+||conseils.dotbase.com^
+||consulting.ramboll.com^
+||contact.adaptavist.com^
+||contact.assaydepot.com^
+||contact.marathon-sports-ec.com^
+||contactcenter.presenceco.com^
+||content.4teamwork.ch^
+||content.actionbenefits.com^
+||content.aew.com^
+||content.bondbrothers.com^
+||content.brain-storm-email.com^
+||content.cammackhealth.com^
+||content.ceriumnetworks.com^
+||content.circlesstudio.com^
+||content.demand-on.com^
+||content.distium.com^
+||content.e-office.com^
+||content.enlightiumacademy.com^
+||content.fabasoft.com^
+||content.familyfeatures.com^
+||content.harrisproductsgroup.com^
+||content.investresolve.com^
+||content.linesight.com^
+||content.logile.com^
+||content.mhs.net^
+||content.msufcu.org^
+||content.ncek12.com^
+||content.ndm.net^
+||content.northcdatacenters.info^
+||content.palram.com^
+||content.qumulo.com^
+||content.recordpoint.com^
+||content.rightsourcemarketing.com^
+||content.sffirecu.org^
+||content.tacticalma.com^
+||content.wacom.com^
+||content.xpublisher.com^
+||contracts.mhainc.com^
+||convergentdental.actonservice.com^
+||conveyor.lewcoinc.com^
+||corporate-marketing.hrs.com^
+||corporate.averydennison.com^
+||corporatecommunications.bvifsc.vg^
+||cpihrinfo.cpihr.com^
+||crawford-industries.actonservice.com^
+||creationagency.actonservice.com^
+||crm.casabaca.com^
+||crm.masonmac.com^
+||crm.toyotago.com.ec^
+||crmcommunications.progressive.com^
+||crmonline.actonservice.com^
+||crs.actonservice.com^
+||cta.onguard.com^
+||ctg.actonservice.com^
+||ctiimage.actonservice.com^
+||culliganwaterco.actonservice.com^
+||cure.trueface.org^
+||customer.newsflare.com^
+||customercare.aircycle.com^
+||customerrelations.theinstitutes.org^
+||customersucceed.nanophase.com^
+||cxm.ingeniux.com^
+||czsk.sharpmarketing.eu^
+||dacocorp.actonservice.com^
+||dallas-content.cresa.com^
+||datafiletechnologies.actonservice.com^
+||dav.davrontech.com^
+||dbbest.actonservice.com^
+||dc.actonservice.com^
+||de.bca-news.com^
+||de.sharpmarketing.eu^
+||dealercontent.homehardware.ca^
+||dealerrelations.cargurus.com^
+||dealersuccess.drivedominion.com^
+||dedola.actonservice.com^
+||deepcrawl.actonservice.com^
+||dev-iradimed.actonservice.com^
+||dev-spamgourmet.actonservice.com^
+||dev-tacticalma.actonservice.com^
+||devacton.simpleviewinc.com^
+||devotionalclicks.amazingfacts.org^
+||dextersolutions.actonservice.com^
+||dfw.bakerbrothersplumbing.com^
+||dialog.dqs.de^
+||dialog.losberger.com^
+||digital.opsbgic-learning.actonservice.com^
+||direct.t-mobile.com^
+||discover.dignityhealth.org^
+||e.replacementdevicelawsuit.com^
+||edeals.rbp.com^
+||education.greatbatch.com^
+||em-info2.thermofisher.com^
+||em.stauffersafety.com^
+||email.apexauctions.com^
+||email.axisintegrated.ca^
+||email.bowl.com^
+||email.cobsbread.com^
+||email.eomega.org^
+||email.episcopalseniorlife.org^
+||email.festiva.com^
+||email.gncu.org^
+||email.lynnimaging.com^
+||email.mhr.co.uk^
+||email.participaction.com^
+||email.pcmaconvene.org^
+||email.voices.com^
+||email.vollrathco.com^
+||email.zumaoffice.com^
+||emailmarketing.vidanthealth.com^
+||emarketing.landisgyr.com^
+||emarketing.moveo.com^
+||emcalliance.vmware.com^
+||emea.kollmorgen.com^
+||emisgroupplc.actonservice.com^
+||emkt.stefanini.com^
+||emplicity.actonservice.com^
+||enablement.vmware.com^
+||enablis.actonservice.com^
+||enchantedrock.actonservice.com^
+||endeavorbusinessmedia.actonservice.com^
+||enews.learninga-z.com^
+||enews.supplyframe.com^
+||engage.alphastarcm.com^
+||engage.ca.victorinsurance.com^
+||engage.ce.victorinsurance.com^
+||engage.clinipace.com^
+||engage.dorngroup.com^
+||engage.dovetailinsurance.com^
+||engage.ipcginsurance.com^
+||engage.krm22.com^
+||engage.mhainc.com^
+||engage.navigatorgpo.com^
+||engage.permission.com.au^
+||engage.physicstoday.org^
+||engage.ria-insurancesolutions.com^
+||engage.td.org^
+||engage.tines.com^
+||engage.us.victorinsurance.com^
+||enrolldi.glic.com^
+||enterprisehive.actonservice.com^
+||enterpriseimaging.agfahealthcare.com^
+||eo.pearlinsurance.com^
+||epcvip.actonservice.com^
+||equippo.actonservice.com^
+||equity.e2g.com^
+||erepublic.actonservice.com^
+||es.lucanet.com^
+||es.sharpmarketing.eu^
+||eschsupply.actonservice.com^
+||eservices.lubetech.com^
+||estore.biscoind.com^
+||etude.epidemiologie-pop-ge.ch^
+||eu.sharpmarketing.eu^
+||eumarketing.sedgwick.com^
+||events.trapptechnology.com^
+||evergage1.actonservice.com^
+||eversource.actonservice.com^
+||evolent.actonservice.com^
+||evolutionmarketing.actonservice.com^
+||exdmarketing.smu.edu.sg^
+||execreps.actonsoftware.com^
+||experience.faiu.com^
+||experience.rochesterregional.org^
+||experts.actonservice.com^
+||experts.cutter.com^
+||explore.code3esg.com^
+||explore.coursefinders.com^
+||explore.landcentral.com^
+||extendyourreach.actonservice.com^
+||fac.fanucamerica.com^
+||farahatco.actonservice.com^
+||fastenermkt.averydennison.com^
+||fdbs.actonservice.com^
+||fdiinc.actonservice.com^
+||fedsched.actonservice.com^
+||festo.actonservice.com^
+||ffr.actonservice.com^
+||fi.on-channel.com^
+||fiber.zayo.com^
+||fiduciaryfirst.actonservice.com^
+||filbrandtco.actonservice.com^
+||files.urlinsgroup.com^
+||financialeducation-info.uchicago.edu^
+||financialservices.nada.org^
+||financialservices.teranet.ca^
+||findyourinfluence.actonservice.com^
+||finley.finleyusa.com^
+||firstpac.actonservice.com^
+||flexibleplan.actonservice.com^
+||flexpod.ynsecureserver.net^
+||flipt.actonservice.com^
+||floorforce.actonservice.com^
+||flotech.actonservice.com^
+||fluentco.actonservice.com^
+||fly.caljetelite.com^
+||fmbankva.actonservice.com^
+||fna.fnainsurance.com^
+||foodpackaging.kpfilms.com^
+||forbin.actonservice.com^
+||forms.accc-cancer.org^
+||forms.cooperaerobics.com^
+||forms.testoil.com^
+||forpci3.siege-corp.com^
+||foxt.actonservice.com^
+||foxtinfo.foxt.com^
+||fr.lucanet.com^
+||fr.sharpmarketing.eu^
+||franchise.goodearthcoffeehouse.com^
+||franchise.locktonaffinity.net^
+||franchising.mcdonalds.ca^
+||franchising.pizzapizza.ca^
+||franklin-edu.actonservice.com^
+||franklin.edu.actonservice.com^
+||frankwatching.actonservice.com^
+||franoppnetwork.actonservice.com^
+||frenchgerleman.actonservice.com^
+||fridaymarketing.actonservice.com^
+||frontiermetal.actonservice.com^
+||fsresidential.actonservice.com^
+||ftfnews.actonservice.com^
+||fujifilmdb.fujifilmdiosynth.com^
+||fundraising.centuryresources.com^
+||funnelbox.actonservice.com^
+||futurebrand.actonservice.com^
+||futursalumnes.uic.es^
+||gameplanfinancial.actonservice.com^
+||gas-sensing.spec-sensors.com^
+||gassales.eversource.com^
+||gatan.actonservice.com^
+||generaleducation.graduateprogram.org^
+||geo.bluedot.io^
+||geonetric.actonservice.com^
+||get.airecontact.com^
+||get.evidence.care^
+||get.incisive.com^
+||get.isentia.com^
+||get.nuapay.com^
+||getstarted.national.edu^
+||gettoknow.skookum.com^
+||giftplanning.westmont.edu^
+||gk.gkservices.com^
+||global-guardians.actonservice.com^
+||global.raboag.com^
+||globalcommunications.sc.com^
+||globallearningsystems.actonservice.com^
+||globalmed.actonservice.com^
+||glue.evansadhesive.com^
+||go.accumaxglobal.com.au^
+||go.acelisconnectedhealth.com^
+||go.adaquest.com^
+||go.americangriddle.com^
+||go.anthonyliftgates.com^
+||go.bciburke.com^
+||go.bitnami.com^
+||go.biz.uiowa.edu^
+||go.brandactive.com^
+||go.brandactiveinsights.com^
+||go.brunswickgroup.com^
+||go.c4weld.com^
+||go.carlisleft.com^
+||go.ciscoprogram.com^
+||go.convenenow.com^
+||go.delve.com^
+||go.diagraph.com^
+||go.diagraphmsp.com^
+||go.dukane.com^
+||go.durst-group.com^
+||go.eacpds.com^
+||go.eapps.com^
+||go.engiestorage.com^
+||go.esri.fi^
+||go.evolutionmarketing.com.au^
+||go.expresslanedefensivedriving.com^
+||go.fabplaygrounds.com^
+||go.foremostmedia.com^
+||go.gemapowdercoating.net^
+||go.getreadyforthefuture.com^
+||go.gpcom.com^
+||go.hatcocorp.com^
+||go.infopulse.com^
+||go.isbamutual.com^
+||go.janesvilleinnovation.com^
+||go.lanair.com^
+||go.lanmark360.com^
+||go.leecompany.com^
+||go.lendspace.com^
+||go.lenovowebinars.com^
+||go.linksource.com^
+||go.loveshaw.com^
+||go.marfeel.com^
+||go.matthewsautomation.com^
+||go.matthewsmarking.com^
+||go.metalgoodsmfg.com^
+||go.mitchell1.com^
+||go.mktgcampaigns.com^
+||go.mtasolutions.com^
+||go.multi-conveyor.com^
+||go.mvtec.com^
+||go.ngtvalves.com^
+||go.northsidemedia.com^
+||go.nvp.com^
+||go.oroinc.com^
+||go.ovsoftware.nl^
+||go.peppermarketing.com.au^
+||go.pgx.com^
+||go.pheasant.com^
+||go.phhlending.com^
+||go.polarking.com^
+||go.polarkingmobile.com^
+||go.polarleasing.com^
+||go.quartzinvitations.com^
+||go.redimark.com^
+||go.reico.com^
+||go.rex-bac-t.com^
+||go.riosalado.edu^
+||go.rtafleet.com^
+||go.salessurrogate.com^
+||go.segra.com^
+||go.shareknowledge.com^
+||go.simco-ion.com^
+||go.simplomarketing.com^
+||go.solaruniverse.com^
+||go.spartansolutions.com^
+||go.spiroidgearing.com^
+||go.tactile.co^
+||go.tactile.com^
+||go.tdyne.com^
+||go.ticketbiz.se^
+||go.tigertool.com^
+||go.tm4.com^
+||go.tmacteex.org^
+||go.toonboom.com^
+||go.transversal.com^
+||go.triumphlearning.com^
+||go.unifiedav.com^
+||go.unifysquare.com^
+||go.unitusccu.com^
+||go.uscad.com^
+||go.ustruckbody.com^
+||go.warrenaverett.com^
+||go.wireco.com^
+||go.wm.plantemoran.com^
+||go.woodsidecap.com^
+||go.wrmeadows.com^
+||go.wtcmachinery.com^
+||go.zic.co.nz^
+||go2.altaro.com^
+||goaccredited.actonservice.com^
+||gobeyond.superiorgroup.com^
+||gogofunding.actonservice.com^
+||gogovapps.actonservice.com^
+||goldencomm.actonservice.com^
+||goldenhelix.actonservice.com^
+||goldenpaints.actonservice.com^
+||gosenergy.actonservice.com^
+||goto.benchmarkeducation.com^
+||goto.benchmarkuniverse.com^
+||goto.newmarklearning.com^
+||govirtualoffice.actonservice.com^
+||gowestgroup.actonservice.com^
+||gowhiteowl.actonservice.com^
+||grado.ufv.es^
+||grande.actonservice.com^
+||grassrootsunwired.actonservice.com^
+||graystone-eye.actonservice.com^
+||greenbeacon.actonservice.com^
+||greencharge.actonservice.com^
+||greif.actonservice.com^
+||groupevents.sixflags.com^
+||grow.business.xerox.com^
+||growthmodemarketing.actonservice.com^
+||guardiancu.actonservice.com^
+||guidepointglobal.actonservice.com^
+||guideposts.actonservice.com^
+||hancockhealth.hancockregional.org^
+||hardinet.actonservice.com^
+||harlan.actonservice.com^
+||hcu.actonservice.com^
+||health.hillcrest.com^
+||healthcasts.actonservice.com^
+||healthgrades.actonservice.com^
+||healthpay24.actonservice.com^
+||healthy.spartanburgregional.com^
+||heartflow.actonservice.com^
+||helens.actonservice.com^
+||hello.controlmap.io^
+||hello.emergeinteractive.com^
+||hello.highlandsolutions.com^
+||hesconet.actonservice.com^
+||hhglobal.actonservice.com^
+||hi.bigduck.com^
+||hickeysmith.actonservice.com^
+||highwoods.actonservice.com^
+||hines.actonservice.com^
+||hitachi-hightech-as.actonservice.com^
+||hodges.actonservice.com^
+||hodgesmace.actonservice.com^
+||homecareresources.rosemarksystem.com^
+||homehardware.actonservice.com^
+||horacemann.actonservice.com^
+||hotel-marketing.hrs.com^
+||houston-content.cresa.com^
+||hpninfo.hoopis.com^
+||hra.nyp.org^
+||hrci.actonservice.com^
+||hrm.healthgrades.com^
+||hronboard.actonservice.com^
+||hrs.actonservice.com^
+||hu.sharpmarketing.eu^
+||hub.hubfinancial.com^
+||hub.hubinternational.com^
+||hub.verticalmarketsoftware.com^
+||hunterindustries.actonservice.com^
+||huseby.actonservice.com^
+||hvac.goodcoinc.com^
+||hygiena.actonservice.com^
+||iatspayments.actonservice.com^
+||ibamolecular.actonservice.com^
+||icahealth.actonservice.com^
+||icharts.actonservice.com^
+||icslearn.actonsoftware.com^
+||ideadevice.actonservice.com^
+||idrivelogistics.actonservice.com^
+||ids.actonservice.com^
+||ignite.liftigniter.com^
+||ihc.cellmarque.com^
+||immunocorp.actonservice.com^
+||impact-dm.actonservice.com^
+||incisive.actonservice.com^
+||independence.americanportfolios.com^
+||inetprocess.actonservice.com^
+||info-fsi.stanford.edu^
+||info-pacific.marsh.com^
+||info-trek.actonservice.com^
+||info.abadiscount.org^
+||info.abcnorcal.org^
+||info.abcsd.org^
+||info.acacialearning.com^
+||info.accutrain.com^
+||info.acoginsurance.com^
+||info.admtech.com.au^
+||info.advanced-energy.com^
+||info.advantageman.com^
+||info.aestiva.com^
+||info.afidence.com^
+||info.aia-co.aleragroup.com^
+||info.aiabbs.aleragroup.com^
+||info.aiabrg.aleragroup.com^
+||info.aircuity.com^
+||info.aleragroup.com^
+||info.alicat.com^
+||info.allcatcoverage.com^
+||info.alticoadvisors.com^
+||info.americanroller.com^
+||info.anglianwaterbusiness.co.uk^
+||info.apbspeakers.com^
+||info.apisensor.com^
+||info.applied.com^
+||info.appliedtech.pro^
+||info.ardentsolutionsllc.aleragroup.com^
+||info.ascassociation.org^
+||info.aspcapro.org^
+||info.assure360.com^
+||info.atlastravel.com^
+||info.augustahealth.org^
+||info.autozonepro.com^
+||info.avantiplc.com^
+||info.avmalife.org^
+||info.awos.com^
+||info.azuga.com^
+||info.b2lead-marketing.com^
+||info.backbonemedia.com^
+||info.base2s.com^
+||info.battelle.org^
+||info.bcn.nl^
+||info.beaconmedicare.aleragroup.com^
+||info.beaumont.org^
+||info.bellingrathwealth.com^
+||info.belltechlogix.com^
+||info.bematechus.com^
+||info.benico.aleragroup.com^
+||info.biafs.aleragroup.com^
+||info.bintheredumpthatusa.com^
+||info.biocision.com^
+||info.biologos.org^
+||info.bkifg.com^
+||info.blueskytherapy.net^
+||info.blumshapiro.com^
+||info.boundtree.com^
+||info.brand.live^
+||info.briefing.com^
+||info.brilliantfs.com^
+||info.bris.bdo.com.au^
+||info.burnswhite.com^
+||info.bvcm.nl^
+||info.bvo.nl^
+||info.cafonline.org^
+||info.calnexsol.com^
+||info.calypto.com^
+||info.camchealth.org^
+||info.capitalonesettlement.com^
+||info.capsresearch.org^
+||info.cascadeo.com^
+||info.castlemetals.com^
+||info.ccbjournal.com^
+||info.centrak.com^
+||info.centurybizsolutions.com^
+||info.cfevr.org^
+||info.cfl.dk^
+||info.champion.aleragroup.com^
+||info.charityvillage.com^
+||info.chat-desk.com^
+||info.christiancreditcounselors.org^
+||info.cignex.com^
+||info.citymarketingamersfoort.nl^
+||info.claimscope.com^
+||info.clariant.com^
+||info.clarus-rd.com^
+||info.cleanharbors.com^
+||info.cleaningproducts.com^
+||info.clearfunction.com^
+||info.cloudsteer.com^
+||info.cmcagile.com^
+||info.cmworks.com^
+||info.cogstate.com^
+||info.collab9.com^
+||info.compusource.com^
+||info.comsoft-direct.nl^
+||info.cpihr.aleragroup.com^
+||info.cranes101.com^
+||info.creadis.com^
+||info.createeveryopportunity.org^
+||info.cresinsurance.com^
+||info.crisp.aleragroup.com^
+||info.critical-logic.com^
+||info.crossmfg.com^
+||info.ctg.com^
+||info.ctiimage.com^
+||info.culturespanmarketing.com^
+||info.cvosusa.com^
+||info.cytosmart.com^
+||info.dairymaster.com^
+||info.data-basics.com^
+||info.datasci.com^
+||info.dataservicesinc.com^
+||info.datiphy.com^
+||info.davidrio.com^
+||info.dbbest.com^
+||info.dgq.de^
+||info.dickerson-group.aleragroup.com^
+||info.digitalsys.com^
+||info.dimensionfunding.com^
+||info.dimplexthermal.com^
+||info.dlancegolf.com^
+||info.doigcorp.com^
+||info.doverpark.org.sg^
+||info.drawingboard.com^
+||info.duprelogistics.com^
+||info.dynamictechservices.com^
+||info.e-tabs.com^
+||info.earthlinkbusiness.com^
+||info.echelonprint.com^
+||info.eco.ca^
+||info.edriving.com^
+||info.edtrainingcenter.com^
+||info.eecoonline.com^
+||info.electrifai.net^
+||info.em-ametek.com^
+||info.emergentsx.com^
+||info.emersonecologics.com^
+||info.emishealth.com^
+||info.enchantedrock.com^
+||info.enduraproducts.com^
+||info.energizect.com^
+||info.epsbooks.com^
+||info.epworthvilla.org^
+||info.escocorp.com^
+||info.esriaustralia.com.au^
+||info.esriindonesia.co.id^
+||info.esrimalaysia.com.my^
+||info.esrisingapore.com.sg^
+||info.etgroup.net^
+||info.eu.tmi.yokogawa.com^
+||info.exxcel.com^
+||info.fairwaywholesalelending.com^
+||info.familyfeatures.com^
+||info.fastfundlending.com^
+||info.fazzi.com^
+||info.filesanywhere.com^
+||info.financefactors.com^
+||info.flattstationers.com^
+||info.fleetlanding.com^
+||info.flotech.net^
+||info.flyingwithjets.com^
+||info.flytevu.com^
+||info.focuspos.com^
+||info.footstepsgroup.com^
+||info.forumbenefits.aleragroup.com^
+||info.fosterslaw.ca^
+||info.foundationsoft.com^
+||info.fourkitchens.com^
+||info.fptransitions.com^
+||info.franchisegator.com^
+||info.franklin.edu^
+||info.freedom-iot.com^
+||info.freedomcte.com^
+||info.frenchgerleman.com^
+||info.furykeywest.com^
+||info.gatan.com^
+||info.gcgfinancial-aia.aleragroup.com^
+||info.gcgfinancial.aleragroup.com^
+||info.genesishealth.com^
+||info.geonetric.com^
+||info.gkg.net^
+||info.glenviewterrace.com^
+||info.globalventuring.com^
+||info.gluenetworks.com^
+||info.goagilix.com^
+||info.goegyptian.com^
+||info.goldmine.com^
+||info.goodwillgr.org^
+||info.gradability.com.au^
+||info.gravie.com^
+||info.graystone-eye.com^
+||info.greenbusinessnetwork.org^
+||info.greentarget.com^
+||info.greif.com^
+||info.groupbenefits.aleragroup.com^
+||info.groupservices.aleragroup.com^
+||info.guardiancu.org^
+||info.gucu.org^
+||info.guideposts.org^
+||info.halo.com^
+||info.halogistics.com^
+||info.harmonyhit.com^
+||info.harvardapparatus.com^
+||info.hds-rx.com^
+||info.healthcareittoday.com^
+||info.healthcarescene.com^
+||info.healthycommunitiesinstitute.com^
+||info.heartflow.com^
+||info.heirtight.co^
+||info.helens.se^
+||info.hesconet.com^
+||info.hiway.org^
+||info.hmk-ins.aleragroup.com^
+||info.holisticprimarycare.net^
+||info.holmenpaper.com^
+||info.hoopla.net^
+||info.horanassoc.com^
+||info.hygfinancialservicesinc.com^
+||info.iatspayments.com^
+||info.ibamolecular.com^
+||info.ibexherd.com^
+||info.ic3dprinters.com^
+||info.icahn.org^
+||info.icslearn.co.uk^
+||info.ielts.com.au^
+||info.iihnordic.dk^
+||info.ijungo.com^
+||info.infinityenergy.com^
+||info.inigral.com^
+||info.insurancehotline.com^
+||info.interworks.cloud^
+||info.invata.com^
+||info.invo-progressus.com^
+||info.ironcad.com^
+||info.itw-air.com^
+||info.itwcce.com^
+||info.iwerk.com^
+||info.jacksoncoker.com^
+||info.jacounter.aleragroup.com^
+||info.jadelearning.com^
+||info.janiczek.com^
+||info.jccc.edu^
+||info.jensenhughes.com^
+||info.jfahern.com^
+||info.johonnottechnologies.com^
+||info.jonas-construction.com^
+||info.jordansc.com^
+||info.josephmday.com^
+||info.justask.net^
+||info.jwpepper.com^
+||info.kahnlitwin.com^
+||info.kanetix.ca^
+||info.key2.ca^
+||info.key4cleaningsupplies.com^
+||info.klasresearch.com^
+||info.knowledgepathinc.com^
+||info.kollmorgen.cn^
+||info.kollmorgen.com^
+||info.kratoscomms.com^
+||info.kratosdefense.com^
+||info.labelworks.com^
+||info.laconservancy.org^
+||info.lakewoodwestend.org^
+||info.landstar.com^
+||info.lansingbp.com^
+||info.laseradvanced.com^
+||info.ledcrew.com^
+||info.liftfund.com^
+||info.lincolnloop.com^
+||info.linkmedia360.com^
+||info.locbox.com^
+||info.loginvsi.com^
+||info.lonebeaconmedia.com^
+||info.lowestrates.ca^
+||info.mactac.com^
+||info.magnumsystems.com^
+||info.managementsuccess.com^
+||info.marshmsp.com^
+||info.marshpcs.com^
+||info.marublue.com^
+||info.maruedrcx.com^
+||info.marugroup.net^
+||info.marumatchbox.com^
+||info.mccloudservices.com^
+||info.med-iq.com^
+||info.mediamadegreat.com^
+||info.membercoverage.com^
+||info.memberzone.com^
+||info.meriwest.com^
+||info.meyerandassoc.com^
+||info.mhzdesign.com^
+||info.michaelfoods.com^
+||info.micro-matics.com^
+||info.milestoneinternet.com^
+||info.mindbreeze.com^
+||info.mmmlaw.com^
+||info.mobiusleadership.com^
+||info.mobmed.com^
+||info.moneycontrol.network18online.com^
+||info.monsooninc.com^
+||info.morganfranklin.com^
+||info.motion10.nl^
+||info.msconsultants.com^
+||info.mshs.com^
+||info.multichannelsystems.com^
+||info.multitech.com^
+||info.museumofthebible.org^
+||info.mvp.nl^
+||info.mwhccareers.com^
+||info.naag.org^
+||info.nahealth.com^
+||info.nai-consulting.com^
+||info.narcdc.org^
+||info.naswinsure.com^
+||info.nationalfoodgroup.com^
+||info.natlenvtrainers.com^
+||info.navitassys.com^
+||info.navitor.com^
+||info.ncoi.nl^
+||info.neosllc.com^
+||info.nepsisadvisors.com^
+||info.neptune-software.com^
+||info.nescornow.com^
+||info.netec.com^
+||info.nets-inc.com^
+||info.ngfcu.us^
+||info.nibesvv.nl^
+||info.nicholsonclinic.com^
+||info.nilex.com^
+||info.norman-spencer.com^
+||info.normecfoodcare.com^
+||info.northcdatacenters.com^
+||info.northeast.aleragroup.com^
+||info.novahealthcare.com^
+||info.novahomeloans.com^
+||info.nvtc.org^
+||info.ochsner.org^
+||info.ocr-inc.com^
+||info.omep.org^
+||info.ortecfinance.com^
+||info.osiriseducational.co.uk^
+||info.osufoundation.org^
+||info.ozerybakery.com^
+||info.padistance.org^
+||info.pamdrivingjobs.com^
+||info.parallel6.com^
+||info.parivedasolutions.com^
+||info.patientwise.com^
+||info.patrickandco.com^
+||info.paydashboardinfo.com^
+||info.paynewest.com^
+||info.payroll4construction.com^
+||info.pentra.aleragroup.com^
+||info.pentra.com^
+||info.perceptics.com^
+||info.perfectpatients.com^
+||info.pestfree.direct^
+||info.pharmaseek.com^
+||info.philadelphia.aleragroup.com^
+||info.phionline.com^
+||info.phsmobile.com^
+||info.pillartopost.com^
+||info.pittsburgh.aleragroup.com^
+||info.pmhsi.com^
+||info.polypak.com^
+||info.positioninteractive.com^
+||info.postnord.no^
+||info.precoa.com^
+||info.prep101.com^
+||info.prodagio.com^
+||info.progressinvestment.com^
+||info.prosperafinancial.com^
+||info.provencut.com^
+||info.r2cgroup.com^
+||info.racksquared.com^
+||info.rates.ca^
+||info.raytecled.com^
+||info.re-sourcepartners.com^
+||info.reachtech.com^
+||info.readingpartners.org^
+||info.recoverypoint.com^
+||info.redlinesolutions.com^
+||info.relphbenefit.aleragroup.com^
+||info.relphbenefitadvisors.aleragroup.com^
+||info.reltio.com^
+||info.rev1ventures.com^
+||info.rhahvac.com^
+||info.rodenhiser.com^
+||info.romerlabs.com^
+||info.safecorhealth.com^
+||info.safeguardrisksolutions.com^
+||info.safelogic.com^
+||info.safety-kleen.com^
+||info.sagewater.com^
+||info.sante-group.com^
+||info.savesfbay.org^
+||info.sbsgroup.com.au^
+||info.scheidegger.nl^
+||info.schmidt-na.com^
+||info.schoolspecialtynews.com^
+||info.scoopinsurance.ca^
+||info.scottmadden.com^
+||info.scriptel.com^
+||info.secotools.com^
+||info.send-server.com^
+||info.senior-systems.com^
+||info.serverlift.com^
+||info.serversdirect.com^
+||info.services.vivacom.bg^
+||info.shilohtech.com^
+||info.shirazi.aleragroup.com^
+||info.siglentna.com^
+||info.simutechmultimedia.com^
+||info.sispartnerplatform.com^
+||info.skystem.com^
+||info.smartbrief.com^
+||info.smartstrategyapps.com^
+||info.smartstrategyonline.com^
+||info.smilemarketing.com^
+||info.solidscape.com^
+||info.southstarcapital.com^
+||info.spark-point.com^
+||info.spencerfane.com^
+||info.sseinc.com^
+||info.sswhitedental.com^
+||info.stdom.com^
+||info.stratus.hr^
+||info.suite1000.com^
+||info.summitministries.org^
+||info.supercare.health^
+||info.superchoiceservices.com.au^
+||info.suzy.com^
+||info.sydist.com^
+||info.symbio.com^
+||info.synteract.com^
+||info.tcasonline.com^
+||info.techoregon.org^
+||info.techwave.net^
+||info.teletrac.net^
+||info.terracesatcloverwood.org^
+||info.terradatum.com^
+||info.tetravx.com^
+||info.texastaxgroup.com^
+||info.theaba.org^
+||info.thecentennial.aleragroup.com^
+||info.themichaelmannteam.com^
+||info.themsrgroup.com^
+||info.themyersbriggs.com^
+||info.thepgaofamerica.com^
+||info.theprogressiveaccountant.com^
+||info.theshelbyreport.com^
+||info.thesmsgroup.com^
+||info.thomsonlinear.com^
+||info.tighten.com^
+||info.timcorubber.com^
+||info.tiwoiltools.com^
+||info.tmlt.org^
+||info.touchtown.us^
+||info.tpctrainco.com^
+||info.tpctraining.com^
+||info.tradeinterchange.com^
+||info.trapptechnology.com^
+||info.treeoflifecenterus.com^
+||info.trendler.com^
+||info.tri-anim.com^
+||info.truemfg.com^
+||info.truitycu.org^
+||info.tscpainsure.org^
+||info.txeee.engr.utexas.edu^
+||info.tyfone.com^
+||info.uchealth.com^
+||info.uila.com^
+||info.unicosystem.com^
+||info.unicous.com^
+||info.upcurvecloud.com^
+||info.valencepm.com^
+||info.vaporstream.com^
+||info.vcsolutions.com^
+||info.venturesolutions.com^
+||info.veoci.com^
+||info.verifund.tech^
+||info.vesselsvalue.com^
+||info.vestapublicsafety.com^
+||info.vibro-acoustics.com^
+||info.vidanthealth.com^
+||info.vierhetseizoen.nl^
+||info.virtela.net^
+||info.virtusbenefits.aleragroup.com^
+||info.visitgranbury.com^
+||info.visitorlando.com^
+||info.visuresolutions.com^
+||info.vizquest.com^
+||info.vorne.com^
+||info.voxbone.com^
+||info.w-systems.com^
+||info.wafergen.com^
+||info.walkingclassroom.org^
+||info.washingtoninstitute.org^
+||info.watertechonline.com^
+||info.wellbe.me^
+||info.weloveournewwindows.com^
+||info.westerville.org^
+||info.woodward.com^
+||info.worldlink-us.com^
+||info.wsplanadvisor.com^
+||info.yankeehome.com^
+||info.zelmanassociates.com^
+||info.zoominfo-notice.com^
+||info.zoominfo-privacy.com^
+||info.zoominfo.io^
+||info.zoomintel.com^
+||info.zuidema.nl^
+||infoaction.mimakiusa.com^
+||infoco.readingpartners.org^
+||infodc.readingpartners.org^
+||infola.readingpartners.org^
+||infoland.actonservice.com^
+||infontx.readingpartners.org^
+||infonyc.readingpartners.org^
+||inform.milestonegroup.com.au^
+||inform.milestonegroup.com^
+||information.cleanservices.co.uk^
+||information.fi360.com^
+||information.remploy.co.uk^
+||infosea.readingpartners.org^
+||infoservice.paratherm.com^
+||infosfba.readingpartners.org^
+||infospot.roanokegroup.com^
+||inkubate.actonservice.com^
+||inn.charleycreekinn.com^
+||innovate.bionix.com^
+||innovation.communica.world^
+||innovation.leeind.com^
+||innovation.rlgbuilds.com^
+||innovation.thinkcommunica.com^
+||innovations.provisur.com^
+||insight.boomer.com^
+||insight.redflashgroup.com^
+||insight.wittkieffer.com^
+||insights.avad3.com^
+||insights.compagnon.com^
+||insights.diamond-consultants.com^
+||insights.hugheseurope.com^
+||insights.i-runway.com^
+||insights.idispharma.com^
+||insights.jabian.com^
+||insights.jackporter.com^
+||insights.lexiconbranding.com^
+||insights.openfieldx.com^
+||insights.partnerwithfacet.com^
+||insights.squintopera.com^
+||insurance.caainsurancecompany.com^
+||insurancenoodle.actonservice.com^
+||int.deltafaucet.com^
+||intechservices.actonservice.com^
+||intelledox.actonservice.com^
+||intelli-shop.actonservice.com^
+||interedgemarketing.actonservice.com^
+||internalcomms.hubinternational.com^
+||interworks.cloud.actonservice.com^
+||invata.actonservice.com^
+||invited.louwmanexclusive.nl^
+||ioactiveinc.actonservice.com^
+||ip.chipestimate.com^
+||ipinternational.actonservice.com^
+||iq.intellicyt.com^
+||isbamic.actonservice.com^
+||isentia.actonservice.com^
+||ishainsight.actonservice.com^
+||isoplexis.actonservice.com^
+||it.conres.com^
+||it.sharpmarketing.eu^
+||iwantglobal.actonservice.com^
+||jagransolutions.com.actonservice.com^
+||javs.actonservice.com^
+||jeedmact.sc.com^
+||jeffersonawards.actonservice.com^
+||jensenhughes.actonservice.com^
+||jetlinx.actonservice.com^
+||jifflenow.actonservice.com^
+||jobappplus.actonservice.com^
+||join.opencare.com^
+||joinsai.securitiesamerica.com^
+||joinus.holidayseniorliving.com^
+||jwpepper.actonsoftware.com^
+||kbs-services.actonservice.com^
+||kennisdomein.pqr.com^
+||kesko.actonservice.com^
+||kestlerfinancial.actonservice.com^
+||keynotegroup.actonservice.com^
+||kidsdeservethebest.childrenswi.org^
+||kidsdeservethebest.chw.org^
+||kimberlyspa.actonservice.com^
+||km.rightanswers.com^
+||know.gardner-webb.edu^
+||know.gimmal.com^
+||knowledge.equitymethods.com^
+||kone-cranes.actonservice.com^
+||kratosdefense.actonservice.com^
+||kristechwire.actonservice.com^
+||krm22.actonservice.com^
+||kurzweiledu.actonservice.com^
+||kuwaitmarketing.sedgwick.com^
+||kyloepartners.actonservice.com^
+||lammico.actonservice.com^
+||landrykling.actonservice.com^
+||landstar.actonservice.com^
+||landuscooperative.actonservice.com^
+||lansinoh.actonservice.com^
+||lapiana.actonservice.com^
+||laplink.actonservice.com^
+||laserconcepts.actonservice.com^
+||layeredinsight.actonservice.com^
+||lcscompanies.lcsnet.com^
+||leadcertain.actonservice.com^
+||leadership.zengerfolkman.com^
+||learn.altsourcesoftware.com^
+||learn.apartnership.com^
+||learn.brightspotstrategy.com^
+||learn.centricconsulting.com^
+||learn.edmarketing.agency^
+||learn.healthyinteractions.com^
+||learn.image-iq.com^
+||learn.neocertified.com^
+||learn.openlending.com^
+||learn.rtafleet.com^
+||learn.ultherapy.com^
+||ledgeviewpartners.actonservice.com^
+||leecompany.actonservice.com^
+||lgm.averydennison.com^
+||lhasalimited.actonservice.com^
+||libertyhomeequity.actonservice.com^
+||library.westernstatescat.com^
+||licensinginsights.ascap.com^
+||lighterthinnerstronger.fiber-line.com^
+||lilogy.actonservice.com^
+||link.hitachi-hightech.com^
+||links.asbury.org^
+||links.riverview.org^
+||loans.rategenius.com^
+||loansales.cbre.com^
+||lodicoandco.actonservice.com^
+||loginvsi.actonservice.com^
+||logistics.osmworldwide.com^
+||lord.actonservice.com^
+||lowermybills.actonsoftware.com^
+||lp.fsresidential.com^
+||lp.govirtualoffice.com^
+||lp.mnp.ca^
+||lp.rallypoint.com^
+||lp.solaredge.com^
+||lp.vaultlogix.com^
+||lpa.idexpertscorp.com^
+||ltcnetwork.mhainc.com^
+||lucanet.actonservice.com^
+||lumenera.actonservice.com^
+||lydallpm.actonservice.com^
+||lyonsdown.actonservice.com^
+||m.acmgloballab.com^
+||m.evolutiondigital.com^
+||m.smartmatch.email^
+||m.transfix.io^
+||m.unitedmedicareadvisors.com^
+||m.vistaresourcegroup.com^
+||m2t.actonservice.com^
+||ma.a3.se^
+||ma.axiomatics.com^
+||ma.betterbusiness.se^
+||ma.brightby.se^
+||ma.cbre.com^
+||ma.cloudonline.com^
+||ma.kyloepartners.com^
+||ma.lekab.com^
+||ma.lexicon.se^
+||ma.meritgo.se^
+||ma.meritmind.se^
+||ma.moblrn.com^
+||ma.mvr.se^
+||ma.pasco.com^
+||ma.preciofishbone.se^
+||ma.pricegain.com^
+||ma.prover.com^
+||ma.revideco.se^
+||ma.ri.se^
+||ma.smartplanes.se^
+||ma.tss.se^
+||ma.uslawns.com^
+||madetoconnect.summit-broadband.com^
+||madisoncres.actonservice.com^
+||mafiahairdresser.actonservice.com^
+||maformationofficinale.actonservice.com^
+||mail-rite.actonservice.com^
+||mail.fathomdelivers.com^
+||mail.finwellgroup.com^
+||mail.firsthome.com^
+||mail.spandex.com^
+||mailer.conad.com^
+||mailer.gameloft.com^
+||mailers.fusioncharts.com^
+||mailers.unitedadlabel.com^
+||mailing.elconfidencialdigital.com^
+||manufacturing.autodeskcommunications.com^
+||marcom.biodex.com^
+||marcomauto.globalfoundries.com^
+||marcomm.woodward.com^
+||maricich.actonservice.com^
+||markeng.rals.com^
+||markentive.actonservice.com^
+||market.cafex.com^
+||marketing-company.getinsured.com^
+||marketing-fl.waterstonemortgage.com^
+||marketing-info.cargurus.com^
+||marketing-test.aqr.com^
+||marketing-us.alere.com^
+||marketing-us.contentguru.com^
+||marketing-us.palettesoftware.com^
+||marketing.1-800boardup.com^
+||marketing.100days.co.il^
+||marketing.188weststjames.com^
+||marketing.1970group.com^
+||marketing.1edisource.com^
+||marketing.2016cle.com^
+||marketing.3dcadtools.com^
+||marketing.4over.com^
+||marketing.4sightcomms.com^
+||marketing.602.cz^
+||marketing.90degreebenefits.com^
+||marketing.a1cu.org^
+||marketing.a2btracking.com^
+||marketing.aad.org^
+||marketing.aamcompany.com^
+||marketing.abaco.com^
+||marketing.abnbfcu.org^
+||marketing.absoft.co.uk^
+||marketing.acadian-asset.com^
+||marketing.accedo.tv^
+||marketing.acceleratedwealth.com^
+||marketing.access2dayhealth.com^
+||marketing.accesscapitalgrp.com^
+||marketing.accesshardware.com^
+||marketing.accountorgroup.com^
+||marketing.accuride.com^
+||marketing.accurisksolutions.com^
+||marketing.acendas.com^
+||marketing.acieu.net^
+||marketing.acromag.com^
+||marketing.acrowire.com^
+||marketing.act-on.com^
+||marketing.activehousing.co.uk^
+||marketing.activeprospect.com^
+||marketing.acumenehr.com^
+||marketing.acumenmd.com^
+||marketing.adamasconsulting.com^
+||marketing.adept-telecom.co.uk^
+||marketing.advancedpowertech.com^
+||marketing.advanceflooring.co.nz^
+||marketing.advantage.tech^
+||marketing.advectas.se^
+||marketing.advicemedia.com^
+||marketing.advisorsres.com^
+||marketing.aefonline.org^
+||marketing.agracel.com^
+||marketing.airefco.com^
+||marketing.akaes.com^
+||marketing.alabamacu.com^
+||marketing.alaskavisit.com^
+||marketing.alcopro.com^
+||marketing.alere.com^
+||marketing.alereforensics.com^
+||marketing.alfalak.com^
+||marketing.alhi.com^
+||marketing.all-wall.com^
+||marketing.allcorbrokersolutions.com^
+||marketing.allgress.com^
+||marketing.allmy-data.com^
+||marketing.almusnet.com^
+||marketing.alpha1wealth.com^
+||marketing.alphabroder.ca^
+||marketing.alphabroder.com^
+||marketing.alphacommsolutions.com^
+||marketing.alphastarcm.com^
+||marketing.alsearsmd.com^
+||marketing.am.jll.com^
+||marketing.amalto.com^
+||marketing.americanairlinescenter.com^
+||marketing.americanbathgroup.com^
+||marketing.americanweathertechsoffers.com^
+||marketing.amerindrisk.org^
+||marketing.amishcountry.org^
+||marketing.amocc.net^
+||marketing.analysysmason.com^
+||marketing.anchorage.net^
+||marketing.andaluciarealty.com^
+||marketing.angellmarketing.com^
+||marketing.aod-cloud.com^
+||marketing.aoneatm.com^
+||marketing.aotourism.com^
+||marketing.apllogistics.com^
+||marketing.apnconsultinginc.com^
+||marketing.apparound.com^
+||marketing.apptus.com^
+||marketing.aragonresearch.com^
+||marketing.arcsona.com^
+||marketing.arenasports.net^
+||marketing.ariser.se^
+||marketing.arlington-capital.com^
+||marketing.arlington.org^
+||marketing.armsolutions.com^
+||marketing.arrayasolutions.com^
+||marketing.artemiscm.com^
+||marketing.arysta-na.com^
+||marketing.ascellahealth.com^
+||marketing.asginsurance.com^
+||marketing.ashcroft.com^
+||marketing.ashianahomes.com^
+||marketing.asmarterwindow.com^
+||marketing.assetstrategy.com^
+||marketing.astecsolutions.com^
+||marketing.asteracu.com^
+||marketing.astm.org^
+||marketing.asurarisk.com^
+||marketing.atcautomation.com^
+||marketing.aten.com^
+||marketing.atlanticcitynj.com^
+||marketing.atlanticdiagnosticlaboratories.com^
+||marketing.attivoconsulting.com^
+||marketing.attunelive.com^
+||marketing.autopayplus.com^
+||marketing.autozonemecanicos.com^
+||marketing.avantage.nl^
+||marketing.aventel.nl^
+||marketing.aviacode.com^
+||marketing.avidiahealth.com^
+||marketing.avtex.com^
+||marketing.awh.net^
+||marketing.awidubai.com^
+||marketing.aztekweb.com^
+||marketing.balconette.co.uk^
+||marketing.baltimore.org^
+||marketing.barbizon.com^
+||marketing.barenbrug.co.uk^
+||marketing.baristaproshop.com^
+||marketing.barnumfg.com^
+||marketing.barsnet.com^
+||marketing.basalite.com^
+||marketing.baschrock-fg.com^
+||marketing.basyspro.com^
+||marketing.bayhealth.org^
+||marketing.bbsmartsolutions.com^
+||marketing.bca.srl^
+||marketing.bcaespana.es^
+||marketing.bcltechnologies.com^
+||marketing.beachleymedical.com^
+||marketing.bellwethercorp.com^
+||marketing.beneplace.com^
+||marketing.benzcommunications.com^
+||marketing.beringer.net^
+||marketing.berktek.us^
+||marketing.bfandt.com^
+||marketing.bftwealth.com^
+||marketing.bio-optronics.com^
+||marketing.biomerieux-usa.com^
+||marketing.bioquell.com^
+||marketing.biotek.com^
+||marketing.bisongear.com^
+||marketing.biworldwide.co.uk^
+||marketing.blacktrace.com^
+||marketing.blastone.com^
+||marketing.blauw.com^
+||marketing.bldgcontrols.com^
+||marketing.bloomingtonmn.org^
+||marketing.bluebox.net^
+||marketing.bluebusiness.com^
+||marketing.bluefcu.com^
+||marketing.bluekai.com^
+||marketing.bluemarblepayroll.com^
+||marketing.bluvue.com^
+||marketing.bmlwealth.net^
+||marketing.bobswatches.com^
+||marketing.bodine-electric.com^
+||marketing.boeingavenue8.nl^
+||marketing.bondcapital.ca^
+||marketing.bostwick-braun.com^
+||marketing.bouldercoloradousa.com^
+||marketing.boxmanstudios.com^
+||marketing.branchserv.com^
+||marketing.brandingbusiness.com^
+||marketing.brandonindustries.com^
+||marketing.brandywinevalley.com^
+||marketing.braunintertec.com^
+||marketing.brinsea.com^
+||marketing.brucknertruck.com^
+||marketing.brukeroptics.com^
+||marketing.bruynzeel.org^
+||marketing.bswift.com^
+||marketing.btcelectronics.com^
+||marketing.budpack.com^
+||marketing.buffalojeans.com^
+||marketing.bulkbookstore.com^
+||marketing.buscircle.com^
+||marketing.business-events.lu^
+||marketing.business-sweden.se^
+||marketing.businesssystemsuk.com^
+||marketing.butlercc.edu^
+||marketing.buyemp.com^
+||marketing.c-c-l.com^
+||marketing.cabinsatgreenmountain.com^
+||marketing.cachetservices.com^
+||marketing.cadcompany.nl^
+||marketing.caldwell.com^
+||marketing.caldwellpartners.com^
+||marketing.caliberpublicsafety.com^
+||marketing.calilighting.com^
+||marketing.callmeonmycell.com^
+||marketing.callsource.com^
+||marketing.callutc.com^
+||marketing.calm.io^
+||marketing.campusadv.com^
+||marketing.candorcircuitboards.com^
+||marketing.capita-ibs.co.uk^
+||marketing.caplin.com^
+||marketing.careservicesllc.com^
+||marketing.careworks.com^
+||marketing.cargas.com^
+||marketing.carillonlubbock.com^
+||marketing.carlisleit.com^
+||marketing.carltontechnologies.com^
+||marketing.carolina.com^
+||marketing.castrum.uk^
+||marketing.cbancnetwork.com^
+||marketing.ccbtechnology.com^
+||marketing.celayix.com^
+||marketing.celebratinghomedirect.com^
+||marketing.cellarstone.com^
+||marketing.cellero.com^
+||marketing.celona.io^
+||marketing.celsiusinternational.com^
+||marketing.centra.org^
+||marketing.centreforaviation.com^
+||marketing.centsoft.se^
+||marketing.cerionnano.com^
+||marketing.certipay.com^
+||marketing.cfa.ca^
+||marketing.challengemyteam.co.uk^
+||marketing.championsales.com^
+||marketing.chancefinancialgroup.com^
+||marketing.charityfirst.com^
+||marketing.charliebaggsinc.com^
+||marketing.chemometec.com^
+||marketing.cheyenne.org^
+||marketing.choosechicago.com^
+||marketing.christchurchnz.com^
+||marketing.chromachecker.com^
+||marketing.ciandt.com^
+||marketing.circadence.com^
+||marketing.cisco-eagle.com^
+||marketing.citycollege.edu^
+||marketing.cjisgroup.com^
+||marketing.cla.aero^
+||marketing.claritydiagnostics.com^
+||marketing.clarityqst.com^
+||marketing.classroominc.org^
+||marketing.cleardigital.com^
+||marketing.clearlaws.com^
+||marketing.clearviewlive.com^
+||marketing.clickatell.com^
+||marketing.clientsfirst-us.com^
+||marketing.cliffordpower.com^
+||marketing.clinigengroup.com^
+||marketing.cloudmerge.com^
+||marketing.codebaby.com^
+||marketing.cofactordigital.com^
+||marketing.cogentco.com^
+||marketing.colliers.com^
+||marketing.cologuardclassic.com^
+||marketing.comda.com^
+||marketing.commercehomemortgage.com^
+||marketing.communityassociationmanagement.com^
+||marketing.compmort.com^
+||marketing.computerguidance.com^
+||marketing.compuware.com^
+||marketing.confidentialcures.com^
+||marketing.congress.eular.org^
+||marketing.connect.scanstat.com^
+||marketing.connectandsell.com^
+||marketing.conney.com^
+||marketing.conosco.com^
+||marketing.constructionmonitor.com^
+||marketing.construsoft.com^
+||marketing.consumermkts1.com^
+||marketing.contentguru.nl^
+||marketing.convergentusa.com^
+||marketing.copc.com^
+||marketing.coregroupusa.com^
+||marketing.cornerstonevegas.com^
+||marketing.couplescruise.com^
+||marketing.course5i.com^
+||marketing.cpa2biz.com^
+||marketing.cpsi.com^
+||marketing.crawford-industries.com^
+||marketing.crbcunninghams.co.uk^
+||marketing.cresa.com^
+||marketing.crystalcoastnc.org^
+||marketing.ctic.ca^
+||marketing.curetoday.com^
+||marketing.cvma.com^
+||marketing.cyber360solutions.com^
+||marketing.cygnetcloud.com^
+||marketing.cypram.com^
+||marketing.d4discovery.com^
+||marketing.dacocorp.com^
+||marketing.dais.com^
+||marketing.dantecdynamics.com^
+||marketing.darwinspet.com^
+||marketing.data-source.com^
+||marketing.datacenterdynamics.com^
+||marketing.dataflo.com^
+||marketing.datamatics.com^
+||marketing.dataprise.com^
+||marketing.datasyncsolutions.com^
+||marketing.daveycoach.com^
+||marketing.davidcbaker.com^
+||marketing.daytonsuperior.com^
+||marketing.dbh-group.com^
+||marketing.dcihollowmetal.com^
+||marketing.dcmservices.com^
+||marketing.ddc-cabtech.com^
+||marketing.deckerretirementplanning.com^
+||marketing.dedicated-db.com^
+||marketing.dedola.com^
+||marketing.deepcrawl.com^
+||marketing.deltechomes.com^
+||marketing.demagcranes.com^
+||marketing.deppecommunications.com^
+||marketing.dessy.com^
+||marketing.destinationcanada.com^
+||marketing.destinationdc.com^
+||marketing.destinationgranby.com^
+||marketing.destinationtravelnetwork.com^
+||marketing.destinationvancouver.com^
+||marketing.dev-pro.net^
+||marketing.dienerlaw.net^
+||marketing.digitaledge.marketing^
+||marketing.digitalvega.com^
+||marketing.digitalwarehouse.com^
+||marketing.diningalliance.com^
+||marketing.discoverdenton.com^
+||marketing.discoverdunwoody.com^
+||marketing.discoverkalamazoo.com^
+||marketing.discoverlehighvalley.com^
+||marketing.discovernewport.org^
+||marketing.discoverpuertorico.com^
+||marketing.discoversantaclara.org^
+||marketing.discoversaratoga.org^
+||marketing.discoverstcharles.com^
+||marketing.discovertemple.com^
+||marketing.discoverx.com^
+||marketing.discovia.com^
+||marketing.dispatchtoday.com^
+||marketing.diverseco.com.au^
+||marketing.dmcc.ae^
+||marketing.dmcplc.co.uk^
+||marketing.dmihotels.com^
+||marketing.dnacenter.com^
+||marketing.docstar.com^
+||marketing.dohenycompanies.com^
+||marketing.doorway.com^
+||marketing.doprocess.com^
+||marketing.draycir.com^
+||marketing.dreamlawn.com^
+||marketing.dreamstyleremodeling.com^
+||marketing.driveline.co.nz^
+||marketing.driveulu.com^
+||marketing.dryvit.com^
+||marketing.ducenit.com^
+||marketing.duckbrand.com^
+||marketing.duramarktechnologies.com^
+||marketing.dylangrayconsulting.com^
+||marketing.dynamicairshelters.com^
+||marketing.e-emphasys.com^
+||marketing.earthbend.com^
+||marketing.earthquakeauthority.com^
+||marketing.eastbanctech.com^
+||marketing.easydita.com^
+||marketing.eccoviasolutions.com^
+||marketing.ecgmc.com^
+||marketing.echohealthinc.com^
+||marketing.ecosystemintegrity.com^
+||marketing.ecslearn.com^
+||marketing.efleets.com^
+||marketing.ehy.com^
+||marketing.elastoproxy.com^
+||marketing.electroind.com^
+||marketing.electroquip.co.nz^
+||marketing.ellingtonresort.com^
+||marketing.elrig.org^
+||marketing.emds.com^
+||marketing.emeraldheights.com^
+||marketing.emergenttech.com^
+||marketing.emirsoftware.com^
+||marketing.empire-pa.com^
+||marketing.emplicity.com^
+||marketing.employeedevelopmentsystems.com^
+||marketing.endologix.com^
+||marketing.energystewardsinc.com^
+||marketing.enhancedvision.com^
+||marketing.enlightedinc.com^
+||marketing.enrichmentjourneys.com^
+||marketing.entrinsik.com^
+||marketing.envisionpackaging.com^
+||marketing.envylabs.com^
+||marketing.epson.com.au^
+||marketing.epsteinandwhite.com^
+||marketing.equipointpartners.com^
+||marketing.equiscript.com^
+||marketing.ergogenesis.com^
+||marketing.erioninsurance.com^
+||marketing.erm-ins.com^
+||marketing.eschenbach.com^
+||marketing.esecuritysolutions.com^
+||marketing.esenetworks.com^
+||marketing.espec.com^
+||marketing.essellc.com^
+||marketing.et.support^
+||marketing.etcnow.com^
+||marketing.etcnow.net^
+||marketing.eteamsys.com^
+||marketing.eugenecascadescoast.org^
+||marketing.eurofinsus.com^
+||marketing.evansbank.com^
+||marketing.evcp.com^
+||marketing.eventsforce.com^
+||marketing.evolveip.nl^
+||marketing.ewi.org^
+||marketing.exclusive-networks.com.au^
+||marketing.executivetravel.com^
+||marketing.experiencecolumbus.com^
+||marketing.experiencegr.com^
+||marketing.experienceolympia.com^
+||marketing.experts.com^
+||marketing.exploreasheville.com^
+||marketing.explorecharleston.com^
+||marketing.exploreedmonton.com^
+||marketing.exploregwinnett.org^
+||marketing.explorenorthmyrtlebeach.com^
+||marketing.explorestlouis.com^
+||marketing.exponential.com^
+||marketing.expworld.com^
+||marketing.exteresauto.com^
+||marketing.external.xerox.ccom^
+||marketing.ezicarrental.co.nz^
+||marketing.fatiguescience.com^
+||marketing.fedsched.com^
+||marketing.firstinsurancefunding.com^
+||marketing.fmbankva.com^
+||marketing.foxrehab.org^
+||marketing.frannet.com^
+||marketing.frogtape.com^
+||marketing.fwcbd.com^
+||marketing.gatlinburg.com^
+||marketing.gbg.com^
+||marketing.gca.net^
+||marketing.gebroederskoffie.nl^
+||marketing.gen4marketingstudio.com^
+||marketing.genesis-fs.com^
+||marketing.genpak.com^
+||marketing.geowarehouse.ca^
+||marketing.gep.com^
+||marketing.getcertain.ca^
+||marketing.getfidelis.com^
+||marketing.getoverdrive.com^
+||marketing.glenviewterrace.com^
+||marketing.globalcorporateventuring.com^
+||marketing.globalmed.com^
+||marketing.globalmedics.co.nz^
+||marketing.globalpetfoods.ca^
+||marketing.globalpointofcare.abbott^
+||marketing.globerunner.com^
+||marketing.gmcvb.com^
+||marketing.gogofunding.com^
+||marketing.gogovapps.com^
+||marketing.gogreat.com^
+||marketing.goldenpaints.com^
+||marketing.goodcoinc.com^
+||marketing.goosedigital.com^
+||marketing.goprovidence.com^
+||marketing.gorillagroup.com^
+||marketing.gosenergy.com^
+||marketing.gotobermuda.com^
+||marketing.gotolouisville.com^
+||marketing.gowestgroup.com^
+||marketing.gradientfg.com^
+||marketing.gramener.com^
+||marketing.grandecheese.com^
+||marketing.greatcall.com^
+||marketing.greatgunsmarketing.co.uk^
+||marketing.greatpointins.com^
+||marketing.greenbay.com^
+||marketing.greenbrierwv.com^
+||marketing.greycon.com^
+||marketing.groupmgmt.com^
+||marketing.growbinmaster.com^
+||marketing.growthmodemarketing.com^
+||marketing.gulfshores.com^
+||marketing.gwcontainers.com^
+||marketing.halcousa.com^
+||marketing.halobi.com^
+||marketing.hardysolutions.com^
+||marketing.harlancapital.com^
+||marketing.harrishealthcare.com^
+||marketing.harveytool.com^
+||marketing.haughn.com^
+||marketing.hcrwealth.com^
+||marketing.headwaycorp.com^
+||marketing.healthactioncouncil.org^
+||marketing.healthtech.net^
+||marketing.hellomedia.com^
+||marketing.helloposition.com^
+||marketing.hemsleyfraserdigital.co.uk^
+||marketing.hemsleyfraserdigital.com^
+||marketing.heronskey.org^
+||marketing.hfgagents.com^
+||marketing.hfore.com^
+||marketing.hgdata.com^
+||marketing.hhglobal.com^
+||marketing.highpoint.com^
+||marketing.highwoods.com^
+||marketing.higmi.com^
+||marketing.hilltopwealthsolutions.com^
+||marketing.hilltopwealthtax.com^
+||marketing.hines.com^
+||marketing.hodgesmace.com^
+||marketing.holocentric.com^
+||marketing.home-inspection-franchise-opportunity.com^
+||marketing.homedna.com^
+||marketing.homesteadplans.com^
+||marketing.horizonfoodgroup.com^
+||marketing.horizonlims.com^
+||marketing.horizonsoftware.com^
+||marketing.hospicecarelc.org^
+||marketing.hvcb.org^
+||marketing.hyperdisk.com^
+||marketing.iaccompanies.com^
+||marketing.iaclarington.com^
+||marketing.iacollaborative.com^
+||marketing.iansresearch.com^
+||marketing.iar.com^
+||marketing.ibermatica.com^
+||marketing.icreative.nl^
+||marketing.idquantique.com^
+||marketing.igel.com^
+||marketing.iloveny.com^
+||marketing.imageworkscreative.com^
+||marketing.imagexmedia.com^
+||marketing.imninc.com^
+||marketing.impactinnovationgroup.com^
+||marketing.impexium.com^
+||marketing.inaani.com^
+||marketing.incrediwear.com^
+||marketing.indianadunes.com^
+||marketing.industrialformulatorsinc.com^
+||marketing.industrialspec.com^
+||marketing.inex.com^
+||marketing.influitive.com^
+||marketing.influxdb.com^
+||marketing.infrontconsulting.com^
+||marketing.ink-co.com^
+||marketing.insigniam.com^
+||marketing.insignio.de^
+||marketing.instrumentassociates.com^
+||marketing.insurancedesigners.com^
+||marketing.insureon.com^
+||marketing.inszoneinsurance.com^
+||marketing.intellifuel.com^
+||marketing.interact911.com^
+||marketing.intergraph.net^
+||marketing.intermax.nl^
+||marketing.inthenest.com^
+||marketing.intrado.com^
+||marketing.inventiconasia.com^
+||marketing.investwithwmg.com^
+||marketing.invitria.com^
+||marketing.iongroup.com^
+||marketing.iriworldwide.com^
+||marketing.irvingtexas.com^
+||marketing.isaless.com^
+||marketing.ismguide.com^
+||marketing.itiball.com^
+||marketing.itsavvy.com^
+||marketing.itshome.com^
+||marketing.ivctechnologies.com^
+||marketing.iwsinc.com^
+||marketing.izeno.com^
+||marketing.jacksonholechamber.com^
+||marketing.janek.com^
+||marketing.javs.com^
+||marketing.jaysoncompany.com^
+||marketing.jdicleaning.com^
+||marketing.jmait.com^
+||marketing.johncrane.com^
+||marketing.johnsonmelloh.com^
+||marketing.johnstoncountync.org^
+||marketing.journera.com^
+||marketing.joyridecoffee.com^
+||marketing.jstokes.com^
+||marketing.jtsa.edu^
+||marketing.juicepharma.com^
+||marketing.kainmcarthur.com^
+||marketing.kensingsolutions.com^
+||marketing.kestlerfinancial.com^
+||marketing.keylane.com^
+||marketing.keystonegp.com^
+||marketing.kimble-chase.com^
+||marketing.kinectsolar.com^
+||marketing.kingsiii.com^
+||marketing.kiran.com^
+||marketing.knoxville.org^
+||marketing.konareefresort.com^
+||marketing.konecranes.com^
+||marketing.kozzyavm.com^
+||marketing.kpfilms.com^
+||marketing.kurtzon.com^
+||marketing.labdepotinc.com^
+||marketing.lakecountyfl.gov^
+||marketing.lakepointadvisorygroup.com^
+||marketing.landuscooperative.com^
+||marketing.lanner.com^
+||marketing.laplinkemail.com^
+||marketing.latisys.com^
+||marketing.latourism.org^
+||marketing.lcmchealth.org^
+||marketing.leadables.com^
+||marketing.leading-edge.com^
+||marketing.learncia.com^
+||marketing.leasehawk.com^
+||marketing.leatherberryassociates.com^
+||marketing.ledgeviewpartners.com^
+||marketing.leegov.com^
+||marketing.lewispr.com^
+||marketing.lhbindustries.com^
+||marketing.liberateit.com^
+||marketing.libertyhomeequity.com^
+||marketing.libertyreverse.com^
+||marketing.lightstreamin.com^
+||marketing.lilogy.com^
+||marketing.lincoln.org^
+||marketing.lord.com^
+||marketing.lumenera.com^
+||marketing.lumiradx.com^
+||marketing.mafiahairdresser.com^
+||marketing.magnamachine.com^
+||marketing.manningltg.com^
+||marketing.maricich.com^
+||marketing.marineagency.com^
+||marketing.martorusa.com^
+||marketing.marusyngro.com^
+||marketing.marybrowns.com^
+||marketing.masergy.com^
+||marketing.matchstick.legal^
+||marketing.mba.hkust.edu.hk^
+||marketing.mcommgroup.com^
+||marketing.mdbeautyclinic.ca^
+||marketing.medata.com^
+||marketing.medfusion.com^
+||marketing.medhyg.ch^
+||marketing.medical.averydennison.com^
+||marketing.medprostaffing.com^
+||marketing.medsolutions.com^
+||marketing.medsphere.com^
+||marketing.medxm1.com^
+||marketing.meetac.com^
+||marketing.meetprestige.com^
+||marketing.melitta.ca^
+||marketing.melitta.com^
+||marketing.merlinbusinesssoftware.com^
+||marketing.mesalabs.com^
+||marketing.metaltanks.com^
+||marketing.metropolislosangeles.com^
+||marketing.mettl.com^
+||marketing.mgage.com^
+||marketing.mgis.com^
+||marketing.mhe-demag.com^
+||marketing.mhinvest.com^
+||marketing.microlise.com^
+||marketing.middlemarketcenter.org^
+||marketing.midstate-sales.com^
+||marketing.midwestbath.com^
+||marketing.mie-solutions.com^
+||marketing.mijnjungheinrich.nl^
+||marketing.millstonefinancial.net^
+||marketing.mimakiusa.com^
+||marketing.mimico.co.nz^
+||marketing.mindflowdesign.com^
+||marketing.miraflats.com^
+||marketing.mirrorlaketamarackresort.com^
+||marketing.mixitusa.com^
+||marketing.mixpo.com^
+||marketing.mlnrp.com^
+||marketing.mmm-a.net^
+||marketing.mobile.org^
+||marketing.modalife.com^
+||marketing.molenaar.nl^
+||marketing.monetsoftware.com^
+||marketing.monochrome.co.uk^
+||marketing.moodypublishers.com^
+||marketing.mossinc.com^
+||marketing.motionsolutions.com^
+||marketing.motista.com^
+||marketing.motivation.se^
+||marketing.motleys.com^
+||marketing.mowe.studio^
+||marketing.mplsnw.com^
+||marketing.mrcaff.org^
+||marketing.mtrustcompany.com^
+||marketing.multiad.com^
+||marketing.mxmsig.com^
+||marketing.mya.co.uk^
+||marketing.myadvice.com^
+||marketing.mypoindexter.com^
+||marketing.mypureradiance.com^
+||marketing.nace.org^
+||marketing.nacsescrow.com^
+||marketing.nada.org^
+||marketing.naes.com^
+||marketing.nagaworld.com^
+||marketing.napatech.com^
+||marketing.natilik.com^
+||marketing.nav-x.com^
+||marketing.navieninc.com^
+||marketing.navitascredit.com^
+||marketing.ncbrunswick.com^
+||marketing.ne-t.com^
+||marketing.neathousepartners.com^
+||marketing.neighborhoodloans.com^
+||marketing.net3technology.net^
+||marketing.netcel.com^
+||marketing.netplan.co.uk^
+||marketing.netrixllc.com^
+||marketing.netvlies.nl^
+||marketing.network-value.com^
+||marketing.networthadvisorsllc.com^
+||marketing.netwoven.com^
+||marketing.neurorelief.com^
+||marketing.newfangled.com^
+||marketing.newgenerationins.com^
+||marketing.newhomesource.com^
+||marketing.newnet.com^
+||marketing.neworleans.com^
+||marketing.nexans.us^
+||marketing.ngrp.com^
+||marketing.nicepak.com^
+||marketing.nixercomp.com^
+||marketing.njcpa.org^
+||marketing.nopec.org^
+||marketing.norsat.com^
+||marketing.northgate.com^
+||marketing.novatel.com^
+||marketing.novicell.co.uk^
+||marketing.nowplayingutah.com^
+||marketing.nparallel.com^
+||marketing.npuins.com^
+||marketing.nsfocus.com^
+||marketing.nsfocusglobal.com^
+||marketing.nsford.com^
+||marketing.ntconsult.com^
+||marketing.nthdegree.com^
+||marketing.nu.com^
+||marketing.nualight.com^
+||marketing.nugrowth.com^
+||marketing.o3world.com^
+||marketing.objectpartners.com^
+||marketing.oceanclubmyrtlebeach.com^
+||marketing.oceangateresortfl.com^
+||marketing.odfigroup.com^
+||marketing.olivers.dk^
+||marketing.omgnational.com^
+||marketing.omnifymarketing.com^
+||marketing.ompimail.com^
+||marketing.onclive.com^
+||marketing.onececo.com^
+||marketing.oni.co.uk^
+||marketing.onkyousa.com^
+||marketing.openskygroup.com^
+||marketing.opexanalytics.com^
+||marketing.opga.com^
+||marketing.opoffice.com^
+||marketing.optimumenergyco.com^
+||marketing.optionmetrics.com^
+||marketing.optis-world.com^
+||marketing.optitex.com^
+||marketing.orbograph.com^
+||marketing.oremuscorp.com^
+||marketing.originaffinity.com^
+||marketing.orionrisk.com^
+||marketing.orionti.ca^
+||marketing.orolia.com^
+||marketing.orthofi.com^
+||marketing.oswegocounty.com^
+||marketing.oxfordlearning.com^
+||marketing.pac.com^
+||marketing.pacificspecialty.com^
+||marketing.paducah.travel^
+||marketing.page1solutions.com^
+||marketing.pairin.com^
+||marketing.pal-v.com^
+||marketing.palettesoftware.com^
+||marketing.pangea-cds.com^
+||marketing.papersave.com^
+||marketing.parkmycloud.com^
+||marketing.parkplazaresort.com^
+||marketing.parkseniorvillas.com^
+||marketing.partech.com^
+||marketing.patriotcapitalcorp.com^
+||marketing.patsystems.com^
+||marketing.pax8.com^
+||marketing.paysafe.com^
+||marketing.pbcenters.com^
+||marketing.pcsww.com^
+||marketing.petsit.com^
+||marketing.pitcher-nsw.com.au^
+||marketing.prep101.com^
+||marketing.pronaca.com^
+||marketing.protapes.com^
+||marketing.protosell.se^
+||marketing.queenstownnz.nz^
+||marketing.questintegrity.com^
+||marketing.quickencompare.com^
+||marketing.ramsayinnovations.com^
+||marketing.rapidlockingsystem.com^
+||marketing.rattleback.com^
+||marketing.rdoequipment.com^
+||marketing.readinghorizons.com^
+||marketing.readtolead.org^
+||marketing.realcomm.com^
+||marketing.realstorygroup.com^
+||marketing.recarroll.com^
+||marketing.redclassic.com^
+||marketing.redlion.net^
+||marketing.redstonecontentsolutions.com^
+||marketing.regalfin.com^
+||marketing.regenteducation.net^
+||marketing.relevategroup.com^
+||marketing.reliablepaper.com^
+||marketing.remotelock.com^
+||marketing.renaissancedental.com^
+||marketing.responsepoint.com^
+||marketing.resuelve.mx^
+||marketing.revcommercialgroup.com^
+||marketing.revegy.com^
+||marketing.revgroup.com^
+||marketing.revolabs.com^
+||marketing.revparts.com^
+||marketing.revrvgroup.com^
+||marketing.rfactr.com^
+||marketing.rfl.uk.com^
+||marketing.rgproducts.com^
+||marketing.rhinofoods.com^
+||marketing.rimes.com^
+||marketing.riogrande.com^
+||marketing.riseagainsthunger.org^
+||marketing.risingfall.com^
+||marketing.riverfrontig.com^
+||marketing.rme360.com^
+||marketing.rmhoffman.com^
+||marketing.rmhoist.com^
+||marketing.robtheiraguy.com^
+||marketing.rocklakeig.com^
+||marketing.roofconnect.com^
+||marketing.rosica.com^
+||marketing.roxtec.com^
+||marketing.rsvpportal.com^
+||marketing.rtx.travel^
+||marketing.ruckuswireless.com^
+||marketing.ruf-briquetter.com^
+||marketing.runyonsurfaceprep.com^
+||marketing.rxaap.com^
+||marketing.saegissolutions.ca^
+||marketing.safesend.com^
+||marketing.safetreeretirement.com^
+||marketing.safetychix.com^
+||marketing.salespath.com^
+||marketing.sambasafety.com^
+||marketing.sangereby.com^
+||marketing.sanitysolutions.com^
+||marketing.santabarbaraca.com^
+||marketing.sap.events.deloitte.com^
+||marketing.savannahchamber.com^
+||marketing.scalematrix.com^
+||marketing.schneiderdowns.com^
+||marketing.schuff.com^
+||marketing.sciohealthanalytics.com^
+||marketing.seattlesouthside.com^
+||marketing.sectra.com^
+||marketing.securakey.com^
+||marketing.sedgwick.com^
+||marketing.seeclearfield.com^
+||marketing.seemonterey.com^
+||marketing.self-helpfcu.org^
+||marketing.seligsealing.com^
+||marketing.sensoft.ca^
+||marketing.sensysgatso.com^
+||marketing.sentinelgroup.com^
+||marketing.sentirlabs.com^
+||marketing.seobusinessreporter.com^
+||marketing.sepac.com^
+||marketing.sertantcapital.com^
+||marketing.sesui.com^
+||marketing.setaram.com^
+||marketing.sgsco.com^
+||marketing.shadow-soft.com^
+||marketing.sharethrough.com^
+||marketing.shippers-supply.com^
+||marketing.shoplet.com^
+||marketing.shoppingcenteradvisers.com^
+||marketing.shoresatorangebeach.com^
+||marketing.shoresmith.com^
+||marketing.shpfinancial.com^
+||marketing.shreveport-bossier.org^
+||marketing.shurtapemail.com^
+||marketing.sigmanest.com^
+||marketing.signaltheory.com^
+||marketing.simio.com^
+||marketing.simpartners.com^
+||marketing.simplion.com^
+||marketing.sinctech.com^
+||marketing.sirata.com^
+||marketing.skorsports.nl^
+||marketing.slocal.com^
+||marketing.smartcoversystems.com^
+||marketing.smartowner.com^
+||marketing.smartrg.com^
+||marketing.smartvault.com^
+||marketing.smithcarson.com^
+||marketing.socialbakers.com^
+||marketing.softwaresecure.com^
+||marketing.soha.io^
+||marketing.soloprotect.com^
+||marketing.somero.com^
+||marketing.soscanhelp.com^
+||marketing.sosintl.com^
+||marketing.sossystems.co.uk^
+||marketing.soundtrackyourbrand.com^
+||marketing.sourceadvisors.com^
+||marketing.southeastmortgage.com^
+||marketing.southparkcapital.com^
+||marketing.sparktx.com^
+||marketing.spbatpa.org^
+||marketing.specgradeled.com^
+||marketing.speconthejob.com^
+||marketing.spectracom.com^
+||marketing.spigit.com^
+||marketing.spinnakermgmt.com^
+||marketing.sportsworld.org^
+||marketing.springfieldelectric.com^
+||marketing.ssfllp.com^
+||marketing.sstid.com^
+||marketing.staffboom.com^
+||marketing.stahl.com^
+||marketing.stamen.com^
+||marketing.starrcompanies.com^
+||marketing.startfinder.com^
+||marketing.stateandfed.com^
+||marketing.stay-rlhc.com^
+||marketing.steiffusa.com^
+||marketing.stellarmls.com^
+||marketing.stentel.com^
+||marketing.sterlingsolutions.com^
+||marketing.sti.com^
+||marketing.stillsecure.com^
+||marketing.stmh.org^
+||marketing.stockcero.com^
+||marketing.streck.com^
+||marketing.striveoffice.com^
+||marketing.strongpoint.io^
+||marketing.suncrestadvisors.com^
+||marketing.sunny.org^
+||marketing.superiormobilemedics.com^
+||marketing.superiorrecreationalproducts.com^
+||marketing.superwindowsusa.com^
+||marketing.surfcityusa.com^
+||marketing.sustainalytics.com^
+||marketing.swdurethane.com^
+||marketing.symmetry.com^
+||marketing.systancia.com^
+||marketing.tba.group^
+||marketing.techbrite.com^
+||marketing.techcxo.com^
+||marketing.technologyadvice.com^
+||marketing.telstraphonewords.com.au^
+||marketing.tengointernet.com^
+||marketing.testforce.com^
+||marketing.theaffluenttraveler.com^
+||marketing.thebestclaims.com^
+||marketing.thebestirs.com^
+||marketing.thecea.ca^
+||marketing.thefusiongroup.com^
+||marketing.theinovogroup.com^
+||marketing.themonumentgroup.com^
+||marketing.theoccasionsgroup.com^
+||marketing.theofficestore.com^
+||marketing.thepalmbeaches.com^
+||marketing.theplasticsurgeryclinic.ca^
+||marketing.thequincygroupinc.com^
+||marketing.theresortatsummerlin.com^
+||marketing.thermocalc.se^
+||marketing.thesanfranciscopeninsula.com^
+||marketing.thetambellinigroup.com^
+||marketing.thewilsonagency.com^
+||marketing.thewordtailor.com^
+||marketing.thimble.com^
+||marketing.thisisalpha.com^
+||marketing.thisiscleveland.com^
+||marketing.thomassci.com^
+||marketing.threadsol.com^
+||marketing.tidedrycleaners.com^
+||marketing.tignl.eu^
+||marketing.timmons.com^
+||marketing.tmaonline.info^
+||marketing.tmshealth.com^
+||marketing.tongue-tied-nw.co.uk^
+||marketing.toolkitgroup.com^
+||marketing.topekapartnership.com^
+||marketing.topspot.com^
+||marketing.topspotims.com^
+||marketing.torrentcorp.com^
+||marketing.totalcsr.com^
+||marketing.tourismkelowna.com^
+||marketing.tourismpg.com^
+||marketing.tourismrichmond.com^
+||marketing.tourismsaskatoon.com^
+||marketing.tourismvancouver.com^
+||marketing.tourismwinnipeg.com^
+||marketing.towerfcu.org^
+||marketing.toxicology.abbott^
+||marketing.toyotaofeasley.com^
+||marketing.trackmarketing.net^
+||marketing.transcore.com^
+||marketing.translations.com^
+||marketing.transperfect.com^
+||marketing.transtar1.com^
+||marketing.travelink.com^
+||marketing.travelks.com^
+||marketing.travelmarketreport.com^
+||marketing.travelportland.com^
+||marketing.travelsavers.com^
+||marketing.traversecity.com^
+||marketing.traxtech.com^
+||marketing.trextape.com^
+||marketing.triconamericanhomes.com^
+||marketing.triconresidential.com^
+||marketing.trimtabconsultants.com^
+||marketing.trubridge.com^
+||marketing.trucode.com^
+||marketing.trueinfluence.com^
+||marketing.trustarmarketing.com^
+||marketing.trustid.com^
+||marketing.trustonefinancial.org^
+||marketing.tsc.com.ec^
+||marketing.ttcu.com^
+||marketing.tucasi.com^
+||marketing.twofivesix.co^
+||marketing.txsource.net^
+||marketing.u-pic.com^
+||marketing.ugamsolutions.com^
+||marketing.ultimateriskservices.com^
+||marketing.ultimo.com^
+||marketing.uni-med.com^
+||marketing.unimar.com^
+||marketing.unionbenefits.co.uk^
+||marketing.unionhousesf.com^
+||marketing.unionwear.com^
+||marketing.unitedautocredit.net^
+||marketing.uoficreditunion.org^
+||marketing.uptopcorp.com^
+||marketing.urbanprojects.ec^
+||marketing.usailighting.com^
+||marketing.usaprogrip.com^
+||marketing.useadam.co.uk^
+||marketing.usglobaltax.com^
+||marketing.usmedequip.com^
+||marketing.uxreactor.com^
+||marketing.vabi.nl^
+||marketing.vacationcondos.com^
+||marketing.vacationvillastwo.com^
+||marketing.valleyforge.org^
+||marketing.valv.com^
+||marketing.vancive.averydennison.com^
+||marketing.vantagepoint-financial.com^
+||marketing.vathorst.nl^
+||marketing.vault49.com^
+||marketing.vcasoftware.com^
+||marketing.veladx.com^
+||marketing.velti.com^
+||marketing.verantis.com^
+||marketing.versatile-ag.ca^
+||marketing.versium.com^
+||marketing.vertexcs.com^
+||marketing.vestapartners.com^
+||marketing.vetstreet.com^
+||marketing.vfop.com^
+||marketing.vgm.com^
+||marketing.vgmeducation.com^
+||marketing.vgmgroup.com^
+||marketing.vgmhomelink.com^
+||marketing.vigon.com^
+||marketing.villageatwoodsedge.com^
+||marketing.virginia.org^
+||marketing.virtual-images.com^
+||marketing.visailing.com^
+||marketing.visitabq.org^
+||marketing.visitannapolis.org^
+||marketing.visitannarbor.org^
+||marketing.visitaugusta.com^
+||marketing.visitbatonrouge.com^
+||marketing.visitbellevuewa.com^
+||marketing.visitbentonville.com^
+||marketing.visitbgky.com^
+||marketing.visitcalgary.com^
+||marketing.visitcasper.com^
+||marketing.visitcharlottesville.org^
+||marketing.visitchattanooga.com^
+||marketing.visitchesapeake.com^
+||marketing.visitchicagosouthland.com^
+||marketing.visitcookcounty.com^
+||marketing.visitcorpuschristi.com^
+||marketing.visitdenver.com^
+||marketing.visiteauclaire.com^
+||marketing.visitestespark.com^
+||marketing.visitgreaterpalmsprings.com^
+||marketing.visitgreenvillesc.com^
+||marketing.visithamiltoncounty.com^
+||marketing.visitindy.com^
+||marketing.visitjamaica.com^
+||marketing.visitkingston.ca^
+||marketing.visitlex.com^
+||marketing.visitloscabos.travel^
+||marketing.visitlubbock.org^
+||marketing.visitmanisteecounty.com^
+||marketing.visitmdr.com^
+||marketing.visitmilwaukee.org^
+||marketing.visitmontrose.com^
+||marketing.visitmusiccity.com^
+||marketing.visitmyrtlebeach.com^
+||marketing.visitnapavalley.com^
+||marketing.visitnepa.org^
+||marketing.visitnewportbeach.com^
+||marketing.visitoakland.com^
+||marketing.visitomaha.com^
+||marketing.visitorlando.com^
+||marketing.visitpaamericana.com^
+||marketing.visitpanamacitybeach.com^
+||marketing.visitpasadena.com^
+||marketing.visitpensacola.com^
+||marketing.visitphoenix.com^
+||marketing.visitraleigh.com^
+||marketing.visitrapidcity.com^
+||marketing.visitrenotahoe.com^
+||marketing.visitsanmarcos.com^
+||marketing.visitsmcsv.com^
+||marketing.visittucson.org^
+||marketing.visitwashingtoncountypa.com^
+||marketing.visualskus.com^
+||marketing.vting.xcenda.com^
+||marketing.wallindustries.com^
+||marketing.washcochamber.com^
+||marketing.webdcmarketing.com^
+||marketing.wesco.com.br^
+||marketing.worldnetpr.com^
+||marketing.wsandco.com^
+||marketing.xait.com^
+||marketing.xcess.nl^
+||marketing.xicato.com^
+||marketing.xportsoft.com^
+||marketing.xsightusa.com^
+||marketing.xtralight.com^
+||marketing.yapmo.com^
+||marketing.yeovilaudi.co.uk^
+||marketing.yesmarketing.com^
+||marketing.ynsecureserver.net^
+||marketing.yongletape.averydennison.com^
+||marketing.youththink.net^
+||marketing.ytc.com^
+||marketing.zayo.com^
+||marketing.zencos.com^
+||marketing.zeomega.com^
+||marketing.zinniawealth.com^
+||marketing1.aiworldexpo.com^
+||marketing1.directimpactinc.com^
+||marketing1.leica-microsystems.com^
+||marketing1.neverfailgroup.com^
+||marketing2.absolutelybryce.com^
+||marketing2.channel-impact.com^
+||marketing2.globalpointofcare.abbott^
+||marketing2.leica-microsystems.com^
+||marketing2.newhomesource.com^
+||marketing3.polarispacific.com^
+||marketing4.directimpactinc.com^
+||marketing6.directimpactinc.com^
+||marketingautomation.impexium.net^
+||marketingde.mti.com^
+||marketingetsg.insurancedesigners.com^
+||marketinginfo.clutch.com^
+||marketingms.actonservice.com^
+||marketingus.hso.com^
+||markhealth.org^
+||markkinointi.kespro.com^
+||marsh.actonservice.com^
+||marshinsurance.actonservice.com^
+||mas.hronboard.me^
+||masternaut.actonservice.com^
+||mat.aegps.com^
+||matrix42.actonservice.com^
+||mbaco.actonservice.com^
+||mbainfo.ust.hk^
+||mbna.bruker.com^
+||mbns.bruker.com^
+||mbopt.bruker.com^
+||mbs.modernbuilderssupply.com^
+||mc.bruker.com^
+||mcw.actonservice.com^
+||mdfcrm.actonservice.com^
+||meanwellaustralia.actonservice.com^
+||meat.midanmarketing.com^
+||media.claritylabsolutions.com^
+||media.elementsbehavioralhealth.com^
+||media.fsctrust.com^
+||media.gotham.com^
+||media.gstoneinc.com^
+||media.ignitium.com^
+||media.leahy-ifp.com^
+||media.pirtek.co.uk^
+||media.pirtek.de^
+||media.pirtek.nl^
+||media.theartisansapproach.com^
+||mediacy.actonservice.com^
+||mediasolutions.netinsight.net^
+||mediasource.actonservice.com^
+||medisante.actonservice.com^
+||medtrainer.actonservice.com^
+||medxm1.actonservice.com^
+||member.usenix.org^
+||members.simplicity.coop^
+||membership.mortonarb.org^
+||merchant-mail.neosurf.com^
+||meridianbanker.actonservice.com^
+||meriwest.actonservice.com^
+||mesalabs.actonservice.com^
+||message.alldata.com^
+||metallic.actonservice.com^
+||metapack.actonservice.com^
+||metric.khkgears.us^
+||metrics.thesellingagency.com^
+||meylercapital.actonservice.com^
+||mfrmls.actonservice.com^
+||mg.info.averydennison.com^
+||mg.mistrasgroup.com^
+||mhinvest.actonservice.com^
+||mhmp.bruker.com^
+||mhz-design.actonservice.com^
+||microfocus.qm-g.com^
+||microlise.actonservice.com^
+||micronetonline.actonservice.com^
+||microware.actonservice.com^
+||mie-solutions.actonservice.com^
+||mill-all.actonservice.com^
+||milsoft.actonservice.com^
+||mimakiusa.actonservice.com^
+||missionrs.actonservice.com^
+||mkt-i.actonservice.com^
+||mkt.aderant.com^
+||mkt.animalsafety.neogen.com^
+||mkt.bluestate.co^
+||mkt.copernicusmd.com^
+||mkt.detechtion.com^
+||mkt.emea.neogen.com^
+||mkt.environmentsatwork.com^
+||mkt.foodsafety.neogen.com^
+||mkt.globalmentoring.com^
+||mkt.lifesciences.neogen.com^
+||mkt.marcom.neogen.com^
+||mktg.act-on.com^
+||mktg.aicipc.com^
+||mktg.alphawire.com^
+||mktg.bekapublishing.com^
+||mktg.destinationmarketing.org^
+||mktg.digineer.com^
+||mktg.goshenhealth.com^
+||mktg.jeffersonhealth.org^
+||mktg.laresdental.com^
+||mktg.latourhotelsandresorts.com^
+||mktg.matssoft.com^
+||mktg.mecinc.com^
+||mktg.northwoodsoft.com^
+||mktg.pershing.com^
+||mktg.rocklandmfg.com^
+||mktg.rtx.travel^
+||mktg.schlage.com^
+||mktg.senneca.com^
+||mktg.ummhealth.org^
+||mktg.xeniumhr.com^
+||mm.morrellinc.com^
+||mmarkhigh.actonservice.com^
+||mmc-ltd.actonservice.com^
+||moldex.actonservice.com^
+||moody.actonsoftware.com^
+||more.socialflow.com^
+||moreinfo.onnowdigital.com^
+||moreinfo.powerpro360.com^
+||moreinfo.sdmyers.com^
+||morganfranklin.actonservice.com^
+||morrellinc.actonservice.com^
+||mortgagefamily.actonservice.com^
+||motion.kollmorgen.com^
+||motista.actonservice.com^
+||motorsports.locktonaffinity.net^
+||moxtra.actonservice.olormagazine.com^
+||mri.iradimed.com^
+||msi.msigts.com^
+||mwa.meanwellaustralia.com.au^
+||my.carolina.com^
+||my.exotravel.com^
+||network.cogentco.com^
+||newjersey-content.cresa.com^
+||news.bestcompaniesgroup.com^
+||news.bridgetowermedia.com^
+||news.chiefexecutive.net^
+||news.cmatcherlink.com^
+||news.cpbj.com^
+||news.dailyreporter.com^
+||news.djcoregon.com^
+||news.finance-commerce.com^
+||news.idahobusinessreview.com^
+||news.journalrecord.com^
+||news.libn.com^
+||news.lvb.com^
+||news.masslawyersweekly.com^
+||news.mclaren.org^
+||news.mecktimes.com^
+||news.milawyersweekly.com^
+||news.molawyersmedia.com^
+||news.nada.org^
+||news.neworleanscitybusiness.com^
+||news.njbiz.com^
+||news.nydailyrecord.com^
+||news.petage.com^
+||news.pflow.com^
+||news.rbj.net^
+||news.scbiznews.com^
+||news.sp2.org^
+||news.strategiccfo360.com^
+||news.strategiccio360.com^
+||news.thedailyrecord.com^
+||news.thedolancompany.com^
+||news.valawyersweekly.com^
+||newsletter.bcautoencheres.fr^
+||newsletter.davey.com^
+||newsletter.visitnc.com^
+||ngs.actonservice.com^
+||nordicmarketing.sedgwick.com^
+||nordics.sharpmarketing.eu^
+||northplains.actonservice.com^
+||northsidemediagroup.actonservice.com^
+||northwire.actonservice.com^
+||nova-healthcare.actonservice.com^
+||now.tana.fi^
+||nparallel.actonservice.com^
+||nra.locktonaffinity.net^
+||nsfocus.actonservice.com^
+||nu.esri.nl^
+||nurture.mylivingvoice.com^
+||nuvi.actonservice.com^
+||oasisadvantage.actonservice.com^
+||oasismarketing.oasisadvantage.com^
+||objectpartners.actonservice.com^
+||oceanair.actonservice.com^
+||oceanautomotive.actonservice.com^
+||ocozzio.actonservice.com^
+||offers.chemsultants.com^
+||offers.hddistributors.com^
+||offers.jazelauto.com^
+||offers.storagepipe.com^
+||omadi.actonservice.com^
+||omgcreative.actonservice.com^
+||on.leagueapps.com^
+||on.librestream.com^
+||oncoclinicas.actonservice.com^
+||oncourselearning.actonservice.com^
+||one-workspace.matrix42.com^
+||onecallglobal.actonservice.com^
+||onesourcebackground.actonservice.com^
+||online.siteboosters.de^
+||onlineis.actonservice.com^
+||onlinesellerenforcement.vorys.com^
+||onlinevacationcenter.actonservice.com^
+||opoffice.actonservice.com^
+||opportunity.businessbroker.net^
+||opportunityfund.actonservice.com^
+||opsveda.actonservice.com^
+||opticca.actonservice.com^
+||optis-world.actonservice.com^
+||optout.oracle-zoominfo-notice.com^
+||orbis.actonservice.com^
+||oregonstate.actonservice.com^
+||origin.keycodemedia.com^
+||orionmarketing.actonservice.com^
+||orlmarketing.nfp.com^
+||oroinc.actonservice.com^
+||oswegocounty.actonservice.com^
+||ottawa-content.cresa.com^
+||outreach.allmy-data.com^
+||outreach.connectednation.org^
+||outreach.crossref.org^
+||outreach.kansashealthsystem.com^
+||outreach.semaconnect.com^
+||outreach.successforall.org^
+||outreach.veritivcorp.com^
+||packagingsolutions.filamatic.com^
+||pacstainless.actonservice.com^
+||page.asraymond.com^
+||page.downloads.cooperlighting.com^
+||page.ephesus.cooperlighting.com^
+||page.evergage.com^
+||page.irco.com^
+||page.northstateconsultingllc.com^
+||page.oceaninsight.com^
+||page.terguspharma.com^
+||page.vital4.net^
+||page1solutions.actonservice.com^
+||pages.applatix.com^
+||pages.aureon.com^
+||pages.cbecompanies.com^
+||pages.cobweb.com^
+||pages.crd.com^
+||pages.distributionstrategy.com^
+||pages.exterro.com^
+||pages.jobaline.com^
+||pages.srsmith.com^
+||pages.telemessage.com^
+||pages.uila.com^
+||pages.vuzion.cloud^
+||pages.zenefits.com^
+||paintersusainc.actonservice.com^
+||pairin.actonservice.com^
+||pal-v.actonservice.com^
+||paladion.actonservice.com^
+||parallel6.actonservice.com^
+||partner.hubinternational.com^
+||partnership.evolenthealth.com^
+||pasco.actonservice.com^
+||patientpay.actonservice.com^
+||pawsplus.actonservice.com^
+||paydashboard.actonservice.com^
+||paynewest.actonservice.com^
+||pbc.programbrokerage.com^
+||pcci.pccinnovation.org^
+||people.mbtionline.com^
+||peoplehr.actonservice.com^
+||permission.au.actonservice.com^
+||ph.roturadepantalla.com^
+||phdinc.actonservice.com^
+||philadelphia-content.cresa.com^
+||phionline.actonservice.com^
+||phoenix-content.cresa.com^
+||phsmobile.actonservice.com^
+||phyins.actonservice.com^
+||picarro.actonservice.com^
+||pimpoint.inriver.com^
+||pitcher.actonservice.com^
+||pivotpointsecurity.actonservice.com^
+||pl.sharpmarketing.eu^
+||plans.ceteraretirement.com^
+||ple.pearlinsurance.com^
+||pll.pearlinsurance.com^
+||plo.pearlinsurance.com^
+||polypak.actonservice.com^
+||portal.dcgone.com^
+||portal.insight.maruelutions.averydennison.com^
+||postgraduate.smu.edu.sg^
+||promo.ewellix.com^
+||promotions.stationcasinos.com^
+||questions.theanswerco.com^
+||readingpartners.actonservice.com^
+||readytrainingonline.actonservice.com^
+||realcomm.actonservice.com^
+||realestate.collinscu.org^
+||realize.goldenspiralmarketing.com^
+||realogic.actonservice.com^
+||realogicinc.actonservice.com^
+||recoverypoint.actonservice.com^
+||redbooks.actonservice.com^
+||redclassic.actonservice.com^
+||redlion.actonservice.com^
+||redstagfulfillment.actonservice.com^
+||redthreadmarketing.actonservice.com^
+||redvector.actonservice.com^
+||rehmann.actonservice.com^
+||reico.actonservice.com^
+||reliable.elgas.com.au^
+||remarketing.oncourselearning.com^
+||remine.actonservice.com^
+||reppify.actonservice.com^
+||research.insidesales.com^
+||resolution.taxdefensenetwork.com^
+||resources.acarasolutions.com^
+||resources.acarasolutions.in^
+||resources.activatems.com^
+||resources.aldec.com^
+||resources.biz-tech-insights.com^
+||resources.broadleafresults.com^
+||resources.davey.com^
+||resources.digitcom.ca^
+||resources.faronics.com^
+||resources.harneys.com^
+||resources.linengineering.com^
+||resources.lumestrategies.com^
+||resources.recordpoint.com^
+||resources.securew2.com^
+||resources.talentrise.com^
+||results.sierrapiedmont.com^
+||retirementliving.actsretirement.org^
+||retirementservices.firstallied.com^
+||reverb.digitalviscosity.com^
+||revgroup.actonservice.com^
+||rhahvac.actonservice.com^
+||rhinowebgroup.actonservice.com^
+||rightanswers.actonservice.com^
+||riscitsolutions.actonservice.com^
+||rmhoffman.actonservice.com^
+||rollbar.actonservice.com^
+||romotur.actonservice.com^
+||root9b.actonservice.com^
+||roxtec.actonservice.com^
+||rsvp.markettraders.com^
+||rtvision.actonservice.com^
+||rumsey.actonservice.com^
+||ruw.roanokeunderwriting.com^
+||rxaap.actonservice.com^
+||rystadenergy.actonservice.com^
+||rzmarketing.realization.com^
+||s.usenix.org^
+||saas.stratitude.com^
+||sabic.actonservice.com^
+||saegissolutions.actonservice.com^
+||safdirect.actonservice.com^
+||sales.avis.com^
+||sales.northeastind.com^
+||sales.texturacorp.com^
+||sales.virtualpbx.com^
+||salesandmarketing.aitcfis.com^
+||samarketing.sedgwick.com^
+||sc.actonservice.com^
+||scalematrix.actonservice.com^
+||scanoptics.actonservice.com^
+||schinnerer.actonservice.com^
+||schlesingerassociates.actonservice.com^
+||scispg.smu.edu.sg^
+||scmarketing.colliers.com^
+||scorebuddy.actonservice.com^
+||scottmadden.actonservice.com^
+||se.netpartnering.com^
+||seahorseinfo.agilent.com^
+||sealingdev.actonservice.com^
+||seamarketny.actonservice.com^
+||seb.sharpmarketing.eu^
+||seclore.actonservice.com^
+||secured.bitcoinira.com^
+||securityins.actonservice.com^
+||sedgwickpooling.sedgwick.com^
+||segra.actonservice.com^
+||senior-systems.actonservice.com^
+||seniorliving.aberdeenridge.pmma.org^
+||seniorliving.artisseniorliving.com^
+||seniorliving.atriumatnavesink.org^
+||seniorliving.blakehurstlcs.com^
+||seniorliving.blakeliving.com^
+||seniorliving.brandonwildelcs.com^
+||seniorliving.broadviewseniorliving.org^
+||seniorliving.capitalmanor.com^
+||seniorliving.casadelascampanas.com^
+||seniorliving.claremontplace.com^
+||seniorliving.covia.org^
+||seniorliving.cypressplaceseniorliving.com^
+||seniorliving.cypressvillageretirement.com^
+||seniorliving.eastridgeatcutlerbay.com^
+||seniorliving.essexmeadows.com^
+||seniorliving.fellowshipsl.org^
+||seniorliving.foxhillvillage.com^
+||seniorliving.freedomplazafl.com^
+||seniorliving.freedompointefl.com^
+||seniorliving.freedomsquarefl.com^
+||seniorliving.friendshipvillageaz.com^
+||seniorliving.friendsview.org^
+||seniorliving.fvbradenton.com^
+||seniorliving.fvbrandywine.com^
+||seniorliving.fvhollandseniorliving.com^
+||seniorliving.galleriawoodsseniorliving.com^
+||seniorliving.greystonecommunities.com^
+||seniorliving.henryfordvillage.com^
+||seniorliving.heronskey.org^
+||seniorliving.jkv.org^
+||seniorliving.johnknox.com^
+||seniorliving.jslg.org^
+||seniorliving.lakeportseniorliving.com^
+||seniorliving.lakeseminoleseniorliving.com^
+||seniorliving.laurelcirclelcs.com^
+||seniorliving.presvillagenorth.org^
+||seniorliving.sagewoodlcs.com^
+||seniorliving.sandhillcove.com^
+||seniorliving.thestayton.com^
+||seniorliving.thewoodlandsatfurman.org^
+||seniorliving.trilliumwoodslcs.com^
+||seniors.fairportbaptisthomes.org^
+||servcliente.marathon-sports-ec.com^
+||service.charitiesaidfoundation.org.uk^
+||service.frankwatching.com^
+||services.releasepoint.com^
+||servicing.unitedautocredit.net^
+||setaram.actonservice.com^
+||setonhill.actonservice.com^
+||sffirecu.actonservice.com^
+||sfsinfo.sabic.com^
+||sftp.actonservice.com^
+||sg.lucanet.com^
+||share.vollrath.com^
+||shelbypublishing.actonservice.com^
+||shipsmarter.idrivelogistics.com^
+||shop.iwantclips.com^
+||simple.siegelgale.com^
+||simply.lucanet.com^
+||simscale.actonservice.com^
+||site.newzstand.com^
+||sitel.actonservice.com^
+||sjms.actonservice.com^
+||skf.actonservice.com^
+||skillshouse.actonservice.com^
+||slashnext.actonservice.com^
+||smartstrategyonline.actonservice.com^
+||smartworksforme.actonservice.com^
+||smf.southernmetalfab.com^
+||smu.actonservice.com^
+||smuengage.smu.edu.sg^
+||snd.freshstartnews.com^
+||soccajoeys.actonservice.com^
+||solar.sharpmarketing.eu^
+||solidscape.actonservice.com^
+||solutions.advantageauburn.com^
+||solutions.bluebox.net^
+||solutions.bwtek.com^
+||solutions.cmsa.org^
+||solutions.coreandmain.com^
+||solutions.getfluid.com^
+||solutions.intactstudio.ca^
+||solutions.kep-technologies.com^
+||solutions.lumosnetworks.com^
+||solutions.oshaeducationcenter.com^
+||solutions.regence.com^
+||solutions.sertifi.com^
+||solutions.servometer.com^
+||solutions.snapfi.com^
+||solutions.toolepeet.com^
+||solutions.wellspring.com^
+||soneticscorp.actonservice.com^
+||sosintl.actonservice.com^
+||sotelsystems.actonservice.com^
+||southbeachlady.actonservice.com^
+||southwest.pgaofamericagolf.com^
+||spa.admissions.ucdenver.edu^
+||spamtitan.actonservice.com^
+||spark.thelyst.com^
+||spec-sensors.actonservice.com^
+||spencerfane.actonservice.com^
+||spg.specialtyprogramgroup.com^
+||spinnakermgmt.actonservice.com^
+||srglobal.actonservice.com^
+||srmy.srglobal.com^
+||srsa.srglobal.com^
+||srsg.srglobal.com^
+||sruk.srglobal.com^
+||ssdl.actonservice.com^
+||ssfllp.actonservice.com^
+||sswhitedental.actonservice.com^
+||stahl.actonservice.com^
+||stanburns.actonservice.com^
+||starmount.alwayscarebenefits.com^
+||start.ashfieldhealthcare.com^
+||start.mediware.com^
+||start.mybillingtree.com^
+||start.ptl.org^
+||start.sharpclinical.com^
+||start.smartanalyst.com^
+||start.spark-thinking.com^
+||steel.newmill.com^
+||stentel.actonservice.com^
+||stopthink.onefamilyadviser.com^
+||stormwind.actonservice.com^
+||storybook.actonservice.com^
+||strategycompanion.actonservice.com^
+||stratitude.actonservice.com^
+||studentadvantage.actonservice.com^
+||subscriber.franchiseinsights.com^
+||subscriber.smallbusinessstartup.com^
+||subsidies.pnoconsultants.com^
+||success.act-on.com^
+||success.azzure-it.com^
+||success.benico.com^
+||success.catman.global^
+||success.ebmcatalyst.com^
+||success.ebmsoftware.com^
+||success.etgroup.ca^
+||success.getfluid.com^
+||success.intelligentdemand.com^
+||success.lohfeldconsulting.com^
+||success.mapcom.com^
+||success.mgmt3d.com^
+||success.rhb.com^
+||success.vertigis.com^
+||success.vertigisstudio.com^
+||sugabyte.actonservice.com^
+||superiorgroup.actonservice.com^
+||support.flex.com^
+||support2.flex.com^
+||support3.flex.com^
+||svarcom.actonservice.com^
+||svmarketing.destinationtoronto.com^
+||svmarketing.torcvb.com^
+||swim2000.actonservice.com^
+||symbio.actonservice.com^
+||synapse-da.actonservice.com^
+||synbiobeta.actonservice.com^
+||systancia-scp.actonservice.com^
+||system.nefiber.com^
+||t.ao.argyleforum.com^
+||t.ao.consumerfinancereport.com^
+||t.ao.walletjoy.com^
+||t.oticon.com^
+||tablesafe.actonservice.com^
+||target.actonservice.com^
+||targetrecruitllc.actonservice.com^
+||targetstore.actonservice.com^
+||tas.actonservice.com^
+||taylorshellfish.actonservice.com^
+||teach.graduateprogram.org^
+||team.moxtra.com^
+||teamhodges.hodgesualumniandfriends.com^
+||tech.opengear.com^
+||techadv.actonservice.com^
+||technical.kyzen.com^
+||technical.magnalytix.com^
+||technologyadvice.actonservice.com^
+||techservices.trapptechnology.com^
+||tekvox.actonservice.com^
+||telamoncom.actonservice.com^
+||tele2.actonservice.com^
+||telsmith.actonservice.com^
+||telstraphonewords.actonservice.com^
+||tengointernet.actonservice.com^
+||tentflooring.biljax.com^
+||teracom.actonservice.com^
+||terradatum.actonservice.com^
+||test.actonservice.com^
+||testforce.actonservice.com^
+||teyourmarketing.trungaleegan.com^
+||thebasiccompanies.actonservi
+||think.phdinc.com^
+||tradeshows.aem.org^
+||travel.ec-ovc.com^
+||travel.onlinevacationcenter.com^
+||trust.titanhq.com^
+||ugmarketing.smu.edu.sg^
+||uk.lucanet.com^
+||unitedautocredit.actonservice.com^
+||unitusccu.actonservice.com^
+||universalbackground.actonservice.com^
+||updates.aem.org^
+||updates.conexpoconagg.com^
+||us-marketing.roxtec.com^
+||us.lucanet.com^
+||us.onkyo.actonservice.com^
+||usaprogrip.actonservice.com^
+||usb-vna.coppermountaintech.com^
+||ussco-dev.actonservice.com^
+||utexas.actonservice.com^
+||valensoft.actonservice.com^
+||value.kfcu.org^
+||velocitypartners.actonservice.com^
+||veoci.actonservice.com^
+||vertexcs.actonservice.com^
+||vetsource.actonservice.com^
+||vhans.siege-corp.com^
+||view.firstrain.com^
+||vip.gophersport.com^
+||visit.monroecollege.edu^
+||vitalimages.actonservice.com^
+||vitalmedia.actonservice.com^
+||viu.actonservice.com^
+||viu.viubyhub.com^
+||vividcortex.actonservice.com^
+||voiply.actonservice.com^
+||voltdeltainfo.voltdelta.com^
+||vonazon.actonservice.com^
+||vt.mak.com^
+||warfieldtech.actonservice.com^
+||warrenfcu.actonservice.com^
+||washlaundry.actonservice.com^
+||wealthcarecapital.actonservice.com^
+||weare.ballymoregroup.com^
+||web.eisenhowerhealthnews.org^
+||web.iru.org^
+||web.vonazon.com^
+||web.yourerc.com^
+||weidenhammer.actonservice.com^
+||welcome.patientmatters.com^
+||welcome.qualicoliving.com^
+||welcome.visitthelandmark.com^
+||wernerelectric.actonservice.com^
+||westevents.presidio.com^
+||why.hdvest.com^
+||wissen.sage.de^
+||withyou.shorr.com^
+||woodruffsweitzer.actonservice.com^
+||woodtone.actonservice.com^
+||workwonders.hallstar.com^
+||worldnetpr.actonservice.com^
+||wsandco.actonservice.com^
+||ww2.ads-on-line.com^
+||ww2.businessgrouphealth.org^
+||ww2.vinhwellness.com^
+||www.anritsu-apsr-response.com^
+||www.bca.auto^
+||www.bcaeurope.eu^
+||www.continuenow.miami.edu^
+||www.globalinfoportal.com^
+||www.healthcare-distribution.com^
+||www.info.dotvox.com^
+||www.marketing-bmiimaging.com^
+||www.marketing.aftermath.com^
+||www.marketing.linguamatics.com^
+||www.marketing.notifymd.com^
+||www.paydashboardinfo.com^
+||www.wescam.info^
+||www1.cynergysolutions.net^
+||www1.mcsrentalsoftware.com^
+||www1.symmons.com^
+||www2.2ndgear.com^
+||www2.acsvalves.com^
+||www2.advp.com^
+||www2.arvig.com^
+||www2.bimobject.com^
+||www2.bobcad.com^
+||www2.cet-uk.com^
+||www2.citizensclimatelobby.org^
+||www2.cremarc.com^
+||www2.dws-global.com^
+||www2.esri.se^
+||www2.extensis.com^
+||www2.quickbooks.co.uk^
+||www2.senetas.com^
+||www2.simplilearn.com^
+||www2.timecommunications.biz^
+||www2.tyrens.se^
+||www2.yellowspring.co.uk^
+||www2.zacco.com^
+||www3.bimobject.com^
+||www3.motumb2b.com^
+||www4.bimobject.com^
+||www4.qualigence.com^
+||www5.bimobject.com^
+||www8.bimobject.com^
+||xait.actonservice.com^
+||xseedwealth.actonservice.com^
+||yourbrandlive.actonservice.com^
+||yourcare.pennstatehealth.org^
+||yourerc.actonservice.com^
+||yourhealth.bassett.org^
+||yourhealth.bassetthealthnews.org^
+||yourhealth.cooperhealth.org^
+||yourhealth.sahealth.com^
+||yourhealth.wellness.providence.org^
+||youronestopshop.themagnetgroup.com^
+||yoursolution.tapes.averydennison.com^
+||ypowpo.actonservice.com^
+||zenedge.actonservice.com^
+||zoominfo.actonservice.com^
+||zuidema.actonservice.com^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_otto.txt ***
+||prod.nitrosniffer.ottogroup.io^
+||sniffer.nitro-production.otto.boreus.de^
+||sniffer.nitro-test-extern.otto.boreus.de^
+||te.ackermann.ch^
+||te.ambria.de^
+||te.baur.de^
+||te.creation-l.de^
+||te.frankonia.at^
+||te.frankonia.com^
+||te.frankonia.de^
+||te.frankoniamoda.ch^
+||te.heine-shop.nl^
+||te.heine.at^
+||te.heine.ch^
+||te.heine.de^
+||te.helline.fr^
+||te.imwalking.de^
+||te.jelmoli-shop.ch^
+||te.limango.de^
+||te.mirapodo.de^
+||te.mytoys.de^
+||te.nitro-production.otto.boreus.de^
+||te.nitro-test-extern.otto.boreus.de^
+||te.otto.de^
+||te.ottoversand.at^
+||te.quelle.de^
+||te.sheego.de^
+||te.sieh-an.at^
+||te.sieh-an.ch^
+||te.sieh-an.de^
+||te.universal.at^
+||te.waeschepur.de^
+||te.witt-international.cz^
+||te.witt-international.nl^
+||te.witt-international.sk^
+||te.witt-weiden.at^
+||te.witt-weiden.ch^
+||te.witt-weiden.de^
+||te.yomonda.de^
+||te.your-look-for-less.nl^
+||te.your-look-for-less.se^
+||test-extern.nitrosniffer.ottogroup.io^
+||tp.ackermann.ch^
+||tp.ambria.de^
+||tp.baur.de^
+||tp.creation-l.de^
+||tp.frankonia.at^
+||tp.frankonia.com^
+||tp.frankonia.de^
+||tp.frankoniamoda.ch^
+||tp.heine-shop.nl^
+||tp.heine.at^
+||tp.heine.ch^
+||tp.heine.de^
+||tp.imwalking.de^
+||tp.jelmoli-shop.ch^
+||tp.limango.de^
+||tp.mirapodo.de^
+||tp.mytoys.de^
+||tp.otto.de^
+||tp.ottoversand.at^
+||tp.quelle.de^
+||tp.sheego.de^
+||tp.sieh-an.at^
+||tp.sieh-an.ch^
+||tp.sieh-an.de^
+||tp.universal.at^
+||tp.waeschepur.de^
+||tp.witt-international.cz^
+||tp.witt-international.nl^
+||tp.witt-international.sk^
+||tp.witt-weiden.at^
+||tp.witt-weiden.ch^
+||tp.witt-weiden.de^
+||tp.yomonda.de^
+||tp.your-look-for-less.nl^
+||tp.your-look-for-less.se^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_commanders-act.txt ***
+||acquisition.klm.com^
+||configure.adlermode.com^
+||data.auchandirect.fr^
+||data.decathlon.co.uk^
+||data.decathlon.de^
+||data.decathlon.es^
+||data.decathlon.fr^
+||data.decathlon.it^
+||data.decathlon.pl^
+||data.ouigo.com^
+||data.ricaud.com^
+||data.ubi.com^
+||data.wptag.net^
+||logger.yp.ca^
+||sales.disneylandparis.com^
+||tag.boulanger.fr^
+||tagcommander.laredoute.be^
+||tagcommander.laredoute.ch^
+||tc.europcar.com.au^
+||tc.europcar.com^
+||tc.europcar.de^
+||tcdata.fnac.com^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_ingenious-technologies.txt ***
+||0.net.easyjet.com^
+||176.net.jumia.ma^
+||69-74.net.jumia.sn^
+||71-177.net.jumia.ma^
+||admin.net.fidorbank.uk^
+||af.eficads.com^
+||affiliate.logitravel.com^
+||ai.net.anwalt.de^
+||ak-br-cdn.kwai.net.iberostar.com^
+||akv2-br-cdn.kwai.net.iberostar.com^
+||ali-pro-origin-pull.kwai.net.iberostar.com^
+||ali-pro-pull.kwai.net.iberostar.com^
+||amahami.net.anwalt.de^
+||anaconda.net.anwalt.de^
+||api.service.belboon.com^
+||app.chat.global.xiaomi.net.iberostar.com^
+||appassets.androidplatform.net.iberostar.com^
+||appfloor.appcpi.net.iberostar.com^
+||apress.efscle.com^
+||arch.net.jumia.ug^
+||atl-b24-link.ip.twelve99.net.iberostar.com^
+||audio-ak-spotify-com.akamaized.net.iberostar.com^
+||aws-br-cdn.kwai.net.iberostar.com^
+||aws-br-pic.kwai.net.iberostar.com^
+||bdtheque.net.jumia.com.gh^
+||bolt-gcdn.sc-cdn.net.iberostar.com^
+||bruny.net.anwalt.de^
+||bs-pro-origin-pull.kwai.net.iberostar.com^
+||cast.net.anwalt.de^
+||cdn.net.elogia.net^
+||cppm-kc2.net.jumia.ci^
+||cryptotax.efscle.com^
+||csr11.net.asambeauty.com^
+||cust01-cucm-sub-07-cl6.int.net.jumia.ug^
+||dc01p-net-sslvpn0-ra.net.jumia.com.gh^
+||dclnxirp001cou.net.jumia.co.tz^
+||dev-cenam-mobilefirst.tmx-internacional.net.iberostar.com^
+||dit.whatsapp.net.iberostar.com^
+||dls-b23-link.ip.twelve99.net.iberostar.com^
+||dpm.demdex.net.iberostar.com^
+||edge-mobile-static.azureedge.net.iberostar.com^
+||ellypsio.net.jumia.com.ng^
+||eniac.net.jumia.com.gh^
+||external-bos5-1.xx.fbcdn.net.iberostar.com^
+||feldman.net.anwalt.de^
+||find.api.micloud.xiaomi.net.iberostar.com^
+||floraprima.efscle.com^
+||fse.net.anwalt.de^
+||ftwnwght.net.anwalt.de^
+||fulmar.net.anwalt.de^
+||g-br-cdn.kwai.net.iberostar.com^
+||g-fallback.whatsapp.net.iberostar.com^
+||g.whatsapp.net.iberostar.com^
+||gea-exchange-03.net.jumia.ug^
+||ginmon.efscle.com^
+||gitlab.mobiuspace.net.iberostar.com^
+||googleads.g.doubleclick.net.iberostar.com^
+||gw225.net.jumia.com.gh^
+||holtsap1.net.anwalt.de^
+||images.service.belboon.com^
+||insightreporting.net.easyjet.com^
+||instagram.xx.fbcdn.net.iberostar.com^
+||ipv4-c024-mia006-ix.1.oca.nflxvideo.net.iberostar.com^
+||ipv4-cs.intsig.net.iberostar.com^
+||jkanime.net.iberostar.com^
+||kernenergie.efscle.com^
+||lozano.net.anwalt.de^
+||macmorin.net.anwalt.de^
+||mandant.net.anwalt.de^
+||marketing.net.brillen.at^
+||marketing.net.brillen.com^
+||marketing.net.brillen.pl^
+||marketing.net.daraz.lk^
+||marketing.net.daraz.pk^
+||marketing.net.elogia.net^
+||marketing.net.fidor.de^
+||marketing.net.gafas.es^
+||marketing.net.home24.at^
+||marketing.net.home24.be^
+||marketing.net.home24.ch^
+||marketing.net.home24.de^
+||marketing.net.home24.fr^
+||marketing.net.home24.it^
+||marketing.net.home24.nl^
+||marketing.net.idealo-partner.com^
+||marketing.net.immobilienfinanzierung.de^
+||marketing.net.jumia.ci^
+||marketing.net.jumia.co.ke^
+||marketing.net.jumia.com.gh^
+||marketing.net.jumia.com.ng^
+||marketing.net.jumia.ma^
+||marketing.net.occhiali24.it^
+||marketing.net.vsgamers.es^
+||marketing.net.x24factory.com^
+||marketing.tr.netsalesmedia.pl^
+||media-atl3-1.cdn.whatsapp.net.iberostar.com^
+||media.fmid5-1.fna.whatsapp.net.iberostar.com^
+||mellamanjorge.net.anwalt.de^
+||mholland.net.anwalt.de^
+||mohamed.net.anwalt.de^
+||nbcxa65t001z.net.jumia.ug^
+||neoncsr21.net.anwalt.de^
+||net.24-ads.com^
+||net.brillen.de^
+||net.cadeautjes.nl^
+||net.carrefour.es^
+||net.daraz.com.bd^
+||net.daraz.com^
+||net.deine-arena.de^
+||net.eurowings.com^
+||net.home24.com^
+||net.iberia.com^
+||net.jumia.cm^
+||net.jumia.com.eg^
+||net.jumia.com^
+||net.mydays.ch^
+||net.quisma.com^
+||net.shop.com.mm^
+||net.steiner-vision.de^
+||net.tradeers.de^
+||net.wink.es^
+||net.zooplus.com^
+||net.zooplus.de^
+||net.zooplus.es^
+||net.zooplus.fr^
+||net.zooplus.it^
+||net.zooplus.nl^
+||net.zooroyal.de^
+||netmailcsr11.net.anwalt.de^
+||nsm.tr.netsalesmedia.pl^
+||p16-tiktokcdn-com.akamaized.net.iberostar.com^
+||partner.net.fidor.de^
+||partner.net.idealo-partner.com^
+||partner.net.performance360.de^
+||partner.portal.fidormarket.com^
+||partner.service.belboon.com^
+||perf.af.funneldrivers.com^
+||phpmyadmin.toolmonger.net.jumia.co.tz^
+||pny.net.penny.de^
+||prime.net.jumia.co.tz^
+||product.fidormarket.com^
+||pvn.rewe.de^
+||r.akipam.com^
+||r.jakuli.com^
+||r.lafamo.com^
+||r.niwepa.com^
+||r.powuta.com^
+||renaultbankdirekt.efscle.com^
+||report.appmetrica.yandex.net.iberostar.com^
+||resolver.msg.global.xiaomi.net.iberostar.com^
+||router28.net.anwalt.de^
+||rw.net.rewe.de^
+||s010.net.jumia.sn^
+||samia.net.anwalt.de^
+||schwaebischhall.efscle.com^
+||scontent-atl3-2.xx.fbcdn.net.iberostar.com^
+||scontent-cdg4-1.xx.fbcdn.net.iberostar.com^
+||scontent-cdg4-2.xx.fbcdn.net.iberostar.com^
+||scontent.fpbc1-2.fna.fbcdn.net.iberostar.com^
+||scontent.xx.fbcdn.net.iberostar.com^
+||server2.www1.dr.goldenserviceawards.net.jumia.co.ke^
+||skyapi.live.net.iberostar.com^
+||smartbroker.efscle.com^
+||sonar6-akl1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-ams2-1.xx.fbcdn.net.iberostar.com^
+||sonar6-arn2-1.xx.fbcdn.net.iberostar.com^
+||sonar6-atl3-1.xx.fbcdn.net.iberostar.com^
+||sonar6-atl3-2.xx.fbcdn.net.iberostar.com^
+||sonar6-bcn1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-ber1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-bkk1-2.xx.fbcdn.net.iberostar.com^
+||sonar6-bog2-1.xx.fbcdn.net.iberostar.com^
+||sonar6-bom1-2.xx.fbcdn.net.iberostar.com^
+||sonar6-bos5-1.xx.fbcdn.net.iberostar.com^
+||sonar6-bru2-1.xx.fbcdn.net.iberostar.com^
+||sonar6-ccu1-2.xx.fbcdn.net.iberostar.com^
+||sonar6-cdg4-1.xx.fbcdn.net.iberostar.com^
+||sonar6-cdg4-2.xx.fbcdn.net.iberostar.com^
+||sonar6-cdg4-3.xx.fbcdn.net.iberostar.com^
+||sonar6-cgk1-3.xx.fbcdn.net.iberostar.com^
+||sonar6-cph2-1.xx.fbcdn.net.iberostar.com^
+||sonar6-cpt1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-del2-1.xx.fbcdn.net.iberostar.com^
+||sonar6-den4-1.xx.fbcdn.net.iberostar.com^
+||sonar6-dfw5-2.xx.fbcdn.net.iberostar.com^
+||sonar6-doh1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-dub4-1.xx.fbcdn.net.iberostar.com^
+||sonar6-dus1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-eze1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-fco2-1.xx.fbcdn.net.iberostar.com^
+||sonar6-fml20-1.xx.fbcdn.net.iberostar.com^
+||sonar6-for1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-fra3-1.xx.fbcdn.net.iberostar.com^
+||sonar6-fra3-2.xx.fbcdn.net.iberostar.com^
+||sonar6-fra5-1.xx.fbcdn.net.iberostar.com^
+||sonar6-fra5-2.xx.fbcdn.net.iberostar.com^
+||sonar6-gig4-1.xx.fbcdn.net.iberostar.com^
+||sonar6-gmp1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-gru2-1.xx.fbcdn.net.iberostar.com^
+||sonar6-gua1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-ham3-1.xx.fbcdn.net.iberostar.com^
+||sonar6-hbe1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-hel3-1.xx.fbcdn.net.iberostar.com^
+||sonar6-hkg1-2.xx.fbcdn.net.iberostar.com^
+||sonar6-hkt1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-hou1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-hyd1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-iad3-1.xx.fbcdn.net.iberostar.com^
+||sonar6-iev1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-ist1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-itm1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-jnb1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-kul2-1.xx.fbcdn.net.iberostar.com^
+||sonar6-lax3-1.xx.fbcdn.net.iberostar.com^
+||sonar6-lga3-1.xx.fbcdn.net.iberostar.com^
+||sonar6-lhr6-2.xx.fbcdn.net.iberostar.com^
+||sonar6-lim1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-lis1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-los2-1.xx.fbcdn.net.iberostar.com^
+||sonar6-maa2-1.xx.fbcdn.net.iberostar.com^
+||sonar6-mad1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-mad2-1.xx.fbcdn.net.iberostar.com^
+||sonar6-man2-1.xx.fbcdn.net.iberostar.com^
+||sonar6-mba1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-mct1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-mia3-1.xx.fbcdn.net.iberostar.com^
+||sonar6-mnl1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-mrs2-1.xx.fbcdn.net.iberostar.com^
+||sonar6-mrs2-2.xx.fbcdn.net.iberostar.com^
+||sonar6-msp1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-mty2-1.xx.fbcdn.net.iberostar.com^
+||sonar6-muc2-1.xx.fbcdn.net.iberostar.com^
+||sonar6-mxp1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-nrt1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-ord5-2.xx.fbcdn.net.iberostar.com^
+||sonar6-otp1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-pmo1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-pnq1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-prg1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-qro1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-scl2-1.xx.fbcdn.net.iberostar.com^
+||sonar6-sea1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-sin6-1.xx.fbcdn.net.iberostar.com^
+||sonar6-sjc3-1.xx.fbcdn.net.iberostar.com^
+||sonar6-sof1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-ssn1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-syd2-1.xx.fbcdn.net.iberostar.com^
+||sonar6-tir3-2.xx.fbcdn.net.iberostar.com^
+||sonar6-tpe1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-vie1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-waw1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-xsp1-3.xx.fbcdn.net.iberostar.com^
+||sonar6-xxb1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-yyz1-1.xx.fbcdn.net.iberostar.com^
+||sonar6-zrh1-1.xx.fbcdn.net.iberostar.com^
+||sonar6.fcul1-1.fna.fbcdn.net.iberostar.com^
+||sonar6.fgdl1-3.fna.fbcdn.net.iberostar.com^
+||sonar6.fgdl1-4.fna.fbcdn.net.iberostar.com^
+||sonar6.fgym1-1.fna.fbcdn.net.iberostar.com^
+||sonar6.fhmo1-2.fna.fbcdn.net.iberostar.com^
+||sonar6.fmlm1-1.fna.fbcdn.net.iberostar.com^
+||sonar6.fmzt1-1.fna.fbcdn.net.iberostar.com^
+||sonar6.fnog1-1.fna.fbcdn.net.iberostar.com^
+||sonar6.fntr4-1.fna.fbcdn.net.iberostar.com^
+||sonar6.fpbc1-1.fna.fbcdn.net.iberostar.com^
+||sonar6.fpbc1-2.fna.fbcdn.net.iberostar.com^
+||sonar6.fver1-1.fna.fbcdn.net.iberostar.com^
+||sonar6.fzih1-1.fna.fbcdn.net.iberostar.com^
+||sonar6.xy.fbcdn.net.iberostar.com^
+||static.whatsapp.net.iberostar.com^
+||stats.g.doubleclick.net.iberostar.com^
+||stereofixers.net.jumia.com.gh^
+||swissinside.easyjet.com.edgekey.net.easyjet.com^
+||tacsc.net.anwalt.de^
+||tala.net.anwalt.de^
+||tamus.net.anwalt.de^
+||thialfi.net.anwalt.de^
+||thumbs.net.anwalt.de^
+||tic.net.anwalt.de^
+||tirandoalmedio.net.anwalt.de^
+||titomacia.net.anwalt.de^
+||tittendestages.net.anwalt.de^
+||trpkktzakr.easyjet.com.cpanel.net.easyjet.com^
+||turkish.net.anwalt.de^
+||tweetdeck.net.anwalt.de^
+||twistairclub.net.anwalt.de^
+||tx-br-cdn.kwai.net.iberostar.com^
+||tx-pro-pull.kwai.net.iberostar.com^
+||txv2-br-cdn.kwai.net.iberostar.com^
+||tyumen.net.anwalt.de^
+||uandmyfuture.net.anwalt.de^
+||uchiyama.net.anwalt.de^
+||ui.belboon.com^
+||ui.service.belboon.com^
+||umrvmb.net.anwalt.de^
+||us.appbackupapi.micloud.xiaomi.net.iberostar.com^
+||v16m-default.akamaized.net.iberostar.com^
+||valdes.net.anwalt.de^
+||vd-test.net.anwalt.de^
+||vl037.net.anwalt.de^
+||wasteland.net.anwalt.de^
+||whoami.akamai.net.iberostar.com^
+||ws-br-cdn.kwai.net.iberostar.com^
+||ws-pro-origin-pull.kwai.net.iberostar.com^
+||ws-pro-pull.kwai.net.iberostar.com^
+||www.brillen.demarketing.net.brillen.pl^
+||www.ciscenje.net.jumia.com.ng^
+||www.clients.net.anwalt.de^
+||www.csr31.net.anwalt.de^
+||www.iaccede.net.jumia.ug^
+||www.meuble-design.net.jumia.ug^
+||www.online.net.anwalt.de^
+||www.restopascher.net.jumia.sn^
+||zahn.net.anwalt.de^
+||zds.net.anwalt.de^
+||zimadifirenze.net.anwalt.de^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_np6.txt ***
+||cotemaison.np6.com^
+||emailing.casden.banquepopulaire.fr^
+||epm.mailperformance.com^
+||f1.demo.np6.com^
+||f1.mailperf.com^
+||f1.mailperformance.com^
+||f1.mperf.com^
+||f1.np6.com^
+||infojeux.paris.fr^
+||lbv5.mperf.com^
+||mailtracking.tf1.com^
+||mp.pitchero.com^
+||news.mailperformance.com^
+||newsletter.ticketac.com^
+||shortener.np6.com^
+||sms.gestion.cetelem.fr^
+||sms.news.allopneus.com^
+||t8.mailperformance.com^
+||tr.3ou4xcb.cetelem.fr^
+||tr.3xcb.cofinoga.fr^
+||tr.aasi.espmp-agfr.net^
+||tr.abo.cotemaison.fr^
+||tr.account.np6.com^
+||tr.acd-comexpert.fr^
+||tr.acq-pjms.fr^
+||tr.actiflip.devisdirect.com^
+||tr.activeprospects.info^
+||tr.actu-companeo.com^
+||tr.actu.bricodepot.com^
+||tr.actu.reunica.com^
+||tr.actu.rmcbfmplay.com^
+||tr.actualites.bfmtv.com^
+||tr.actualites.reseau-lcd.org^
+||tr.actuentreprises.elior.fr^
+||tr.actupremium.com^
+||tr.actus-fdj.fr^
+||tr.adhesion.ircom-laverriere.com^
+||tr.afpa.espmp-cufr.net^
+||tr.ag2rlamondiale.fr^
+||tr.agefiseminaires.com^
+||tr.alex.espmp-agfr.net^
+||tr.allianz-trade.com^
+||tr.allopneus.com^
+||tr.animation.lexpress.fr^
+||tr.animation.micromania.fr^
+||tr.animations.alticemedia.com^
+||tr.animations.bfmtv.com^
+||tr.apou032.espmp-agfr.net^
+||tr.asp0010.espmp-nifr.net^
+||tr.asp0018.espmp-aufr.net^
+||tr.asp002q.espmp-aufr.net^
+||tr.asp002x.espmp-cufr.net^
+||tr.asp0085.espmp-nifr.net^
+||tr.asp008y.espmp-nifr.net^
+||tr.asp009j.espmp-aufr.net^
+||tr.asp009k.espmp-cufr.net^
+||tr.asp00a0.espmp-cufr.net^
+||tr.asp00a1.espmp-agfr.net^
+||tr.asp00a3.espmp-agfr.net^
+||tr.asp00a6.espmp-nifr.net^
+||tr.asp00ah.espmp-nifr.net^
+||tr.asp00am.espmp-cufr.net^
+||tr.asp1.espmp-agfr.net^
+||tr.asp102n.espmp-cufr.net^
+||tr.asp103z.espmp-nifr.net^
+||tr.asp104p.espmp-aufr.net^
+||tr.asp106d.espmp-cufr.net^
+||tr.asp106g.espmp-nifr.net^
+||tr.asp106m.espmp-agfr.net^
+||tr.asp108a.espmp-cufr.net^
+||tr.asp1098.espmp-cufr.net^
+||tr.asp109c.espmp-aufr.net^
+||tr.asp109e.espmp-cufr.net^
+||tr.asp109y.espmp-agfr.net^
+||tr.asp10a7.espmp-aufr.net^
+||tr.asp10ai.espmp-nifr.net^
+||tr.asp10ap.espmp-nifr.net^
+||tr.asp10ar.espmp-cufr.net^
+||tr.asp10bs.espmp-aufr.net^
+||tr.asp10c8.espmp-agfr.net^
+||tr.asp10cc.espmp-nifr.net^
+||tr.asp10cg.espmp-nifr.net^
+||tr.asp10ch.espmp-nifr.net^
+||tr.asp10cr.espmp-nifr.net^
+||tr.asp10d7.espmp-nifr.net^
+||tr.asp10de.espmp-agfr.net^
+||tr.asp10df.espmp-agfr.net^
+||tr.asp10dq.espmp-nifr.net^
+||tr.asp10dx.espmp-nifr.net^
+||tr.asp10ea.espmp-nifr.net^
+||tr.asp10f5.espmp-agfr.net^
+||tr.asp10f6.espmp-agfr.net^
+||tr.asp10fa.espmp-cufr.net^
+||tr.asp10fg.espmp-aufr.net^
+||tr.asp10fl.espmp-nifr.net^
+||tr.asp10fo.espmp-nifr.net^
+||tr.asp10fp.espmp-nifr.net^
+||tr.asp10fx.espmp-cufr.net^
+||tr.asp10ga.espmp-nifr.net^
+||tr.asp10ge.espmp-nifr.net^
+||tr.asp10h2.espmp-nifr.net^
+||tr.asp10hc.espmp-aufr.net^
+||tr.asp10hg.espmp-cufr.net^
+||tr.asp10hi.espmp-cufr.net^
+||tr.asp10hj.espmp-pofr.net^
+||tr.asp10if.espmp-cufr.net^
+||tr.asp2.espmp-agfr.net^
+||tr.asp202u.espmp-cufr.net^
+||tr.asp2032.espmp-aufr.net^
+||tr.asp2035.espmp-nifr.net^
+||tr.asp203m.espmp-cufr.net^
+||tr.asp2045.espmp-nifr.net^
+||tr.asp204q.espmp-cufr.net^
+||tr.asp205a.espmp-cufr.net^
+||tr.asp2063.espmp-nifr.net^
+||tr.asp206k.espmp-agfr.net^
+||tr.asp2070.espmp-aufr.net^
+||tr.asp2075.espmp-nifr.net^
+||tr.asp2076.espmp-pofr.net^
+||tr.asp2077.espmp-nifr.net^
+||tr.asp2078.espmp-nifr.net^
+||tr.asp207e.espmp-nifr.net^
+||tr.asp207f.espmp-cufr.net^
+||tr.assoc.cfsr-retine.com^
+||tr.avisecheance.maaf.fr^
+||tr.axa-millesimes.espmp-aufr.net^
+||tr.axa.espmp-aufr.net^
+||tr.b2d1.espmp-agfr.net^
+||tr.b2d1068.espmp-nifr.net^
+||tr.b2d106z.espmp-aufr.net^
+||tr.b2d107b.espmp-aufr.net^
+||tr.bati-partner.be^
+||tr.bati-partners.be^
+||tr.batirenover.info^
+||tr.batiweb.co^
+||tr.bel-pros.be^
+||tr.bern.espmp-nifr.net^
+||tr.bgl.premium-benefits.lu^
+||tr.bienvenue.envie-de-bien-manger.com^
+||tr.bizzquotes.co.uk^
+||tr.bobo.espmp-cufr.net^
+||tr.bodet.devisdirect.com^
+||tr.boletim.companeo.pt^
+||tr.boletim.meu-orcamento.pt^
+||tr.bouyguestelecom.espmp-aufr.net^
+||tr.brand.labelleadresse.com^
+||tr.btob-afaceri.ro^
+||tr.btob-cwf.com^
+||tr.btob-deals.co.uk^
+||tr.btob-pro.be^
+||tr.btob-pro.pt^
+||tr.btob.mhdfrance.fr^
+||tr.btobquotes.be^
+||tr.btobquotes.cl^
+||tr.btobquotes.com^
+||tr.btobquotes.mx^
+||tr.buenasofertas.pro^
+||tr.bureauveritas.espmp-aufr.net^
+||tr.business-deal.be^
+||tr.business-deal.cl^
+||tr.business-deal.com.br^
+||tr.business-deal.fr^
+||tr.business-deal.mx^
+||tr.business-deal.nl^
+||tr.business-quotes.co.uk^
+||tr.businessdev.younited-credit.es^
+||tr.cacf-acq.ipsos-surveys.com^
+||tr.cacf.ipsos-surveys.com^
+||tr.camara.eu.com^
+||tr.carl.espmp-cufr.net^
+||tr.cart02d.espmp-agfr.net^
+||tr.carte.lcl.fr^
+||tr.cartegie.fr^
+||tr.cashback.floa.fr^
+||tr.cb4x.banque-casino.fr^
+||tr.cb4x.floa.fr^
+||tr.cclx.espmp-agfr.net^
+||tr.cdiscount.3wregie.com^
+||tr.ceeregion.moethennessy.com^
+||tr.christmas.petit-bateau.com^
+||tr.ciblexo.fr^
+||tr.cifa.espmp-nifr.net^
+||tr.cifa02b.espmp-aufr.net^
+||tr.cifa02d.espmp-aufr.net^
+||tr.cifa02k.espmp-aufr.net^
+||tr.cifa02l.espmp-nifr.net^
+||tr.citiesforlifeparis.latribune.fr^
+||tr.cj.bordeaux-metropole.fr^
+||tr.client.emailing.bnpparibas^
+||tr.clientes.younited-credit.com^
+||tr.clienti.younited-credit.com^
+||tr.clienti.younited-credit.it^
+||tr.clients-mediametrie.fr^
+||tr.clients.base-plus.fr^
+||tr.clients.boursobank.info^
+||tr.clients.boursorama.info^
+||tr.clients.compagnie-hyperactive.com^
+||tr.clients.europrogres.fr^
+||tr.clients.gemy.fr^
+||tr.clients.idaia.group^
+||tr.clients.yellow-agence-internet.com^
+||tr.cnaf.espmp-nifr.net^
+||tr.cogedim.espmp-agfr.net^
+||tr.collectif.groupe-vyv.fr^
+||tr.com-clients.sfr.fr^
+||tr.com-parc.sfr.fr^
+||tr.com-red.sfr.fr^
+||tr.com-web.sfr.fr^
+||tr.com.sfr.fr^
+||tr.combca.fr^
+||tr.commande.location.boulanger.com^
+||tr.commint.groupe.chapsvision.com^
+||tr.communaute.caradisiac.com^
+||tr.communautes-mediametrie.fr^
+||tr.communication.alticemedia.com^
+||tr.communication.ancv.com^
+||tr.communication.armatis-lc.com^
+||tr.communication.arthur-bonnet.com^
+||tr.communication.b2b-actualites.com^
+||tr.communication.boursobank.info^
+||tr.communication.boursorama.info^
+||tr.communication.cgaaer.fr^
+||tr.communication.enkiapp.io^
+||tr.communication.harmonie-mutuelle.fr^
+||tr.communication.hennessy.com^
+||tr.communication.hybrigenics.com^
+||tr.communication.jardindacclimatation.fr^
+||tr.communication.lamaisondesstartups.com^
+||tr.communication.lvmh.fr^
+||tr.communication.lvmhdare.com^
+||tr.communication.mhdfrance.fr^
+||tr.communication.moethennessy.com^
+||tr.communication.moethennessydiageoconnect.com^
+||tr.communication.np6.com^
+||tr.communication.numericable.fr^
+||tr.communication.offresb2b.fr^
+||tr.communication.top-office.com^
+||tr.companeo-news.co.uk^
+||tr.comunicacao.younited-credit.com^
+||tr.comunicazione.younited-credit.com^
+||tr.contact.astuceco.fr^
+||tr.contact.canalplay.com^
+||tr.contact.canalplus.fr^
+||tr.contact.canalsat.fr^
+||tr.contact.cerel.net^
+||tr.contact.cereps.fr^
+||tr.contact.e-turf.fr^
+||tr.contact.henner.com^
+||tr.contact.lvmh.fr^
+||tr.contact.mhl-publishing.fr^
+||tr.contact.ruinart.com^
+||tr.contact.stof.fr^
+||tr.contact.thelist-emirates.fr^
+||tr.contrat.location.boulanger.com^
+||tr.contrat.lokeo.fr^
+||tr.contrats.cetelem.fr^
+||tr.contrats.cofinoga.fr^
+||tr.corporate.moethennessy.com^
+||tr.courriel.mae.fr^
+||tr.courriel.ouestnormandie.cci.fr^
+||tr.courrier.charentelibre.fr^
+||tr.courrier.larepubliquedespyrenees.fr^
+||tr.courrier.sudouest.fr^
+||tr.credito.universo.pt^
+||tr.crtl.espmp-aufr.net^
+||tr.customer-solutions.np6.com^
+||tr.cyberarchi.info^
+||tr.cyprusparadiseestates.com^
+||tr.cypruspremiervacations.com^
+||tr.datacom.espmp-pofr.net^
+||tr.demo.np6.com^
+||tr.designoutlet-contact.fr^
+||tr.devis-companeo.be^
+||tr.devis-companeo.com^
+||tr.devis-companeo.fr^
+||tr.devis-express.be^
+||tr.devis-professionnels.com^
+||tr.devis-professionnels.fr^
+||tr.devis.digital^
+||tr.devisminute-affranchissement.com^
+||tr.devisminute-alarme.com^
+||tr.devisminute-caisseenregistreuse.com^
+||tr.devisminute-fontainereseau.com^
+||tr.devisminute-geolocalisation.com^
+||tr.devisminute-gestiondepatrimoine.com^
+||tr.devisminute-gestiondutemps.com^
+||tr.devisminute-gestionpaie.com^
+||tr.devisminute-materieldestockage.com^
+||tr.devisminute-mutuelle.com^
+||tr.devisminute-operateur.com^
+||tr.devisminute-operateurpro.com^
+||tr.devisminute-securiteb2b.com^
+||tr.devisminute-siteecommerce.com^
+||tr.devisminute-weber.com^
+||tr.devize-companeo.ro^
+||tr.digitalacademy.np6.com^
+||tr.digitaldigest.lvmh.com^
+||tr.directferries.com^
+||tr.dirigeants.harmonie-mutuelle.fr^
+||tr.discover.perfectstay.com^
+||tr.djay.espmp-agfr.net^
+||tr.dkomaison.info^
+||tr.dnapresse.fr^
+||tr.docapost-sirs.com^
+||tr.dogstrust.org.uk^
+||tr.donateur.afm-telethon.fr^
+||tr.dossier-assurance.maaf.fr^
+||tr.drh-holding.lvmh.fr^
+||tr.e-mail.axa.fr^
+||tr.e-mail.axabanque.fr^
+||tr.e-travaux.info^
+||tr.e.entreprise-pm.fr^
+||tr.e.entreprise-pm.net^
+||tr.e.m-entreprise.fr^
+||tr.e.trouver-un-logement-neuf.com^
+||tr.easy-offertes.be^
+||tr.ecolab-france.fr^
+||tr.ecologie-shop.espmp-agfr.net^
+||tr.em.cdiscount-pro.com^
+||tr.em.cdiscountpro.com^
+||tr.email.aeroexpo.online^
+||tr.email.agriexpo.online^
+||tr.email.akerys.com^
+||tr.email.aktuariat.fr^
+||tr.email.archiexpo.com^
+||tr.email.bon-placement-immobilier.fr^
+||tr.email.contact-jaguar.fr^
+||tr.email.contact-landrover.fr^
+||tr.email.custom-campaign.com^
+||tr.email.d17.tv^
+||tr.email.d8.tv^
+||tr.email.directindustry.com^
+||tr.email.distributor-expo.com^
+||tr.email.gap-france.fr^
+||tr.email.harmonie-mutuelle.fr^
+||tr.email.infocredit.orangebank.fr^
+||tr.email.janedeboy.com^
+||tr.email.land-rover-experience.fr^
+||tr.email.maisonfoody.com^
+||tr.email.medicalexpo.com^
+||tr.email.mnpaf.fr^
+||tr.email.nauticexpo.com^
+||tr.email.pointfranchise.co.uk^
+||tr.email.rs-fr.com^
+||tr.email.securite-routiere.gouv.fr^
+||tr.email.solocal.com^
+||tr.email.thelem-assurances.fr^
+||tr.email.toute-la-franchise.com^
+||tr.email.videofutur.fr^
+||tr.email.virtual-expo.com^
+||tr.email.voyagesleclerc.com^
+||tr.emailatia.fr^
+||tr.emailing-wishesfactory.com^
+||tr.emailing.agencereference.com^
+||tr.emailing.canalbox.com^
+||tr.emailing.canalplay.com^
+||tr.emailing.canalplus-afrique.com^
+||tr.emailing.canalplus-caledonie.com^
+||tr.emailing.canalplus-caraibes.com^
+||tr.emailing.canalplus-maurice.com^
+||tr.emailing.canalplus-reunion.com^
+||tr.emailing.canalplus.ch^
+||tr.emailing.canalplus.fr^
+||tr.emailing.canalpro.fr^
+||tr.emailing.canalsat.ch^
+||tr.emailing.cifea-mkg.com^
+||tr.emailing.cnam-paysdelaloire.fr^
+||tr.emailing.coe.int^
+||tr.emailing.cstar.fr^
+||tr.emailing.detours.canal.fr^
+||tr.emailing.grassavoye.com^
+||tr.emailing.pogioclub.be^
+||tr.emailing.studiocanal.com^
+||tr.emailium.fr^
+||tr.emc.moethennessy.com^
+||tr.enedis-infos.fr^
+||tr.enews.customsolutions.fr^
+||tr.enquete-cpf.ifop.com^
+||tr.enquetes.actionlogement.fr^
+||tr.entreprise-pro.info^
+||tr.entreprise.axa.fr^
+||tr.envie-de-bien-manger.espmp-aufr.net^
+||tr.eqs.cpam67.net^
+||tr.ere.emailing.bnpparibas^
+||tr.espmp-agfr.net^
+||tr.estatesandwines.moethennessy.com^
+||tr.etravauxpro.fr^
+||tr.etude.sncd.org^
+||tr.eulerhermes.com^
+||tr.ev001.net^
+||tr.evenements.inpi.fr^
+||tr.expresofferte.be^
+||tr.fg3p.espmp-cufr.net^
+||tr.fidal.pro^
+||tr.fidalformation.pro^
+||tr.finance.moethennessy.com^
+||tr.fleetmatics.vraaguwofferte.be^
+||tr.forum.veuveclicquot.fr^
+||tr.fr.pro.accor.com^
+||tr.france.plimsoll.fr^
+||tr.french-tax-compliance-booking.com^
+||tr.futurecommerce.moethennessy.com^
+||tr.gdfsuez-globalenergy.info^
+||tr.gen.espmp-agfr.net^
+||tr.gestion.cafineo.fr^
+||tr.gestion.cetelem.fr^
+||tr.gestion.coficabail.fr^
+||tr.gestion.cofinoga.fr^
+||tr.gestion.credit-moderne.fr^
+||tr.gestion.domofinance.fr^
+||tr.gestion.floa.fr^
+||tr.gestion.hondafinancialservices.fr^
+||tr.gestion.lexpress.fr^
+||tr.gestion.liberation.fr^
+||tr.gestion.norrsken.fr^
+||tr.gestion.sygmabnpparibas-pf.com^
+||tr.gplus.espmp-nifr.net^
+||tr.grez.espmp-nifr.net^
+||tr.group-appointments.lvmh.fr^
+||tr.group-hr.lvmh.fr^
+||tr.groupama-gne.fr^
+||tr.gtr.moethennessy.com^
+||tr.haute-maurienne-vanoise.net^
+||tr.hcahealthcare.co.uk^
+||tr.hello.maisonfoody.com^
+||tr.helloartisan.info^
+||tr.hmut.espmp-agfr.net^
+||tr.holidaycottages.co.uk^
+||tr.impayes.filiassur.com^
+||tr.info-btob-leaders.com^
+||tr.info-carte.fr^
+||tr.info-companeo.be^
+||tr.info-fr.assurant.com^
+||tr.info-jeux.paris.fr^
+||tr.info-pro.promoneuve.fr^
+||tr.info-strategie.fr^
+||tr.info.actionlogement.fr^
+||tr.info.aeroportdeauville.com^
+||tr.info.ag2rlamondiale.fr^
+||tr.info.aliae.com^
+||tr.info.annoncesbateau.com^
+||tr.info.aprr.fr^
+||tr.info.arialcnp.fr^
+||tr.info.astermod.net^
+||tr.info.aussois.com^
+||tr.info.bessans.com^
+||tr.info.bonneval-sur-arc.com^
+||tr.info.businesscreditcards.bnpparibasfortis.be^
+||tr.info.caissenationalegendarme.fr^
+||tr.info.camping-vagues-oceanes.com^
+||tr.info.capfun.com^
+||tr.info.cartesaffaires.bnpparibas^
+||tr.info.casino-proximites.fr^
+||tr.info.certypro.fr^
+||tr.info.clicochic.com^
+||tr.info.cnch.fr^
+||tr.info.comparadordeprestamos.es^
+||tr.info.conexancemd.com^
+||tr.info.conso-expert.fr^
+||tr.info.covid-resistance-bretagne.fr^
+||tr.info.dentexelans.com^
+||tr.info.e-leclerc.com^
+||tr.info.easyviaggio.com^
+||tr.info.easyviajar.com^
+||tr.info.easyvoyage.co.uk^
+||tr.info.easyvoyage.com^
+||tr.info.ecole-de-savignac.com^
+||tr.info.fulli.com^
+||tr.info.galian.fr^
+||tr.info.harmonie-mutuelle.fr^
+||tr.info.lacentrale.fr^
+||tr.info.lettre.cci.fr^
+||tr.info.linnc.com^
+||tr.info.linxea.com^
+||tr.info.mango-mobilites.fr^
+||tr.info.mango-mobilitesbyaprr.fr^
+||tr.info.mavoiturecash.fr^
+||tr.info.maxis-gbn.com^
+||tr.info.mcgarrybowen.com^
+||tr.info.mdbp.fr^
+||tr.info.mercialys.com^
+||tr.info.mobibam.com^
+||tr.info.np6.com^
+||tr.info.np6.fr^
+||tr.info.oceane-pme.com^
+||tr.info.offres-cartegie.fr^
+||tr.info.onboarding.corporatecards.bnpparibas^
+||tr.info.perl.fr^
+||tr.info.ph-bpifrance.fr^
+||tr.info.phsolidaire-bpifrance.fr^
+||tr.info.pret-bpifrance.fr^
+||tr.info.pret-participatif.fr^
+||tr.info.pretflashtpe-bpifrance.fr^
+||tr.info.projeo-finance.fr^
+||tr.info.promoneuve.fr^
+||tr.info.reunica.com^
+||tr.info.rouen.aeroport.fr^
+||tr.info.rouen.cci.fr^
+||tr.info.snpden.net^
+||tr.info.solidarm.fr^
+||tr.info.svp.com^
+||tr.info.valcenis.com^
+||tr.info.vip-mag.co.uk^
+||tr.info.webikeo.fr^
+||tr.infolettre.securite-routiere.gouv.fr^
+||tr.infolettres.groupama.com^
+||tr.infomarche.hennessy.fr^
+||tr.information.fidalformations.fr^
+||tr.information.labelleadresse.com^
+||tr.information.lacollection-airfrance.be^
+||tr.information.lacollection-airfrance.ch^
+||tr.information.lacollection-airfrance.fr^
+||tr.information.leclubtravel.fr^
+||tr.information.perfectstay.com^
+||tr.information.smartdeals-transavia-fr.com^
+||tr.information.thelist-emirates.fr^
+||tr.informations.harmonie-mutuelle.fr^
+||tr.informations.lcl.fr^
+||tr.infos-admissions.com^
+||tr.infos.afpa.fr^
+||tr.infos.allianz-trade.com^
+||tr.infos.ariase.com^
+||tr.infos.fongecifcentre.com^
+||tr.infos.gazdebordeaux.fr^
+||tr.infos.lacarte.demenagez-moi.com^
+||tr.infos.lettre-resiliation.com^
+||tr.infos.mailrungis.com^
+||tr.infos.odalys-vacances.com^
+||tr.inspiration.culture-data.fr^
+||tr.interieur.cotemaison.fr^
+||tr.interviews-mediametrie.fr^
+||tr.invest.younited-credit.com^
+||tr.invitation-mesdessous.fr^
+||tr.invitation.perfectstay.com^
+||tr.ispaconsulting.com^
+||tr.italia.plimsoll.it^
+||tr.jend.espmp-pofr.net^
+||tr.jesuis.enformedelotus.com^
+||tr.jevoteenligne.fr^
+||tr.jimb.espmp-cufr.net^
+||tr.jkcd.espmp-pofr.net^
+||tr.jkyg.espmp-cufr.net^
+||tr.kang.espmp-cufr.net^
+||tr.kedf.espmp-nifr.net^
+||tr.klse.espmp-agfr.net^
+||tr.kommunikation.younited-credit.com^
+||tr.kontakt.younited-credit.com^
+||tr.kpfc.espmp-nifr.net^
+||tr.kpyn.espmp-cufr.net^
+||tr.kpyn02a.espmp-cufr.net^
+||tr.kpyn02f.espmp-cufr.net^
+||tr.kpyn059.espmp-pofr.net^
+||tr.krus.espmp-agfr.net^
+||tr.landrover.compte-financial-services.fr^
+||tr.laprairie.ifop.com^
+||tr.lbar.espmp-agfr.net^
+||tr.leads.direct^
+||tr.legrandjeu.boulanger.com^
+||tr.lesmarques.envie-de-bien-manger.com^
+||tr.lesmarquesenviedebienmanger.fr^
+||tr.lettre.dechets-infos.com^
+||tr.lettre.helianthal.fr^
+||tr.lettre.lecho-circulaire.com^
+||tr.leyravaud.devisdirect.com^
+||tr.liberation.espmp-aufr.net^
+||tr.livrephoto.espmp-aufr.net^
+||tr.loreal.ifop.com^
+||tr.louisvuittonmalletier.com^
+||tr.louvre-boites.com^
+||tr.ltbu.espmp-nifr.net^
+||tr.ltbu02o.espmp-agfr.net^
+||tr.lvmhappening.lvmh.fr^
+||tr.m.cwisas.com^
+||tr.macarte.truffaut.com^
+||tr.mail-companeo.fr^
+||tr.mail.cdiscount.com.ec^
+||tr.mail.cdiscount.com.pa^
+||tr.mail.digitalpjms.fr^
+||tr.mail.enviedebienmanger.fr^
+||tr.mail.floa.fr^
+||tr.mail.hagerservices.fr^
+||tr.mail.koregraf.com^
+||tr.mail.mdbp.fr^
+||tr.mail.moncoupdepouce.com^
+||tr.mail.primevere.com^
+||tr.mail.satisfactory.fr^
+||tr.mail.solocal.com^
+||tr.mail.vip-mag.co.uk^
+||tr.mail.vipmag.fr^
+||tr.mail.vo3000.com^
+||tr.mail1.macif.fr^
+||tr.mailatia.com^
+||tr.mailing.achatpublic.com^
+||tr.mailing.heliades.fr^
+||tr.mailing.laredoute.fr^
+||tr.mailing.lvmhappening.com^
+||tr.mailing.promodeclic.fr^
+||tr.mailingnp6.lavoirmoderne.com^
+||tr.mailmp.macif.net^
+||tr.mailperf.institut-de-la-protection-sociale.fr^
+||tr.mailperf.ngt-services.com^
+||tr.mailperformance.com^
+||tr.mailperformance.fr^
+||tr.maisonsdumonde.com^
+||tr.marg02n.espmp-agfr.net^
+||tr.marketing.bordeauxgironde.cci.fr^
+||tr.marketing.comparadordeprestamos.es^
+||tr.marketing.fulli.com^
+||tr.marketing.tennaxia.com^
+||tr.marketing.younited-credit.com^
+||tr.marketing.younited-credit.es^
+||tr.marketing.younited-credit.pt^
+||tr.marketingdisruption.co.uk^
+||tr.mart.espmp-agfr.net^
+||tr.mattressman.co.uk^
+||tr.mcom03b.espmp-aufr.net^
+||tr.mcom04p.espmp-aufr.net^
+||tr.melhores-propostas.pt^
+||tr.membres.boursorama.info^
+||tr.mep.enkiapp.io^
+||tr.merit-summit.com^
+||tr.mes-bonsplans.be^
+||tr.mes-prestataires.fr^
+||tr.message.maaf.fr^
+||tr.mh-connect.moethennessy.com^
+||tr.mhch.moet.hennessy.com^
+||tr.mhdconnect.mhdfrance.fr^
+||tr.mhist.moethennessy.com^
+||tr.mhlab78.moethennessy.com^
+||tr.mhusa-trade-engagement.moethennessy.com^
+||tr.mijn-superaanbieding.be^
+||tr.mijnaanbieding.renowizz.be^
+||tr.mika.espmp-nifr.net^
+||tr.mktg.np6.com^
+||tr.mm.infopro-digital.com^
+||tr.mnoc.espmp-nifr.net^
+||tr.mnpd.espmp-agfr.net^
+||tr.moes.espmp-agfr.net^
+||tr.moja-wycena.pl^
+||tr.monagenligne.fr^
+||tr.mondevis-b2b.com^
+||tr.mondevis-pro.com^
+||tr.moving.fr^
+||tr.mp.aconclue-business.fr^
+||tr.mp.aconclue-entreprise.fr^
+||tr.mp.aconclue-pro.com^
+||tr.mp.actu-pm.fr^
+||tr.mp.infomanageo.fr^
+||tr.mp.ld-man.fr^
+||tr.mrls.espmp-agfr.net^
+||tr.mydevisentreprise.com^
+||tr.n.ferrero.fr^
+||tr.n.info.cdgp.fr^
+||tr.n.info.sygmabanque.fr^
+||tr.n.kinder.fr^
+||tr.n.nutella.fr^
+||tr.n.tic-tac.fr^
+||tr.nati02d.espmp-aufr.net^
+||tr.nespresso.com^
+||tr.nespresso.mailsservices.com^
+||tr.new.offres-cartegie.fr^
+||tr.news-abweb.com^
+||tr.news-chocolat.com^
+||tr.news-companeo.cl^
+||tr.news-companeo.com.br^
+||tr.news-companeo.fr^
+||tr.news-companeo.gr^
+||tr.news-companeo.mx^
+||tr.news-companeo.nl^
+||tr.news-companeo.pl^
+||tr.news-dfc.sciences-po.fr^
+||tr.news-fr.perfectstay.com^
+||tr.news-ingerop.com^
+||tr.news.a-t.fr^
+||tr.news.a2micile.com^
+||tr.news.accessmastertour.com^
+||tr.news.accessmbatour.com^
+||tr.news.actu-man.com^
+||tr.news.alcyon.com^
+||tr.news.alibabuy.com^
+||tr.news.alinea.com^
+||tr.news.alinea.fr^
+||tr.news.allopneus.com^
+||tr.news.aramisauto.com^
+||tr.news.assuragency.net^
+||tr.news.bruneau.fr^
+||tr.news.business-deal.co.uk^
+||tr.news.c-media.fr^
+||tr.news.cad-magazine.com^
+||tr.news.capfun.com^
+||tr.news.casino.fr^
+||tr.news.casinodrive.fr^
+||tr.news.casinomax.fr^
+||tr.news.cci-puydedome.com^
+||tr.news.cdiscount.com^
+||tr.news.cdiscountpro.com^
+||tr.news.cenpac.fr^
+||tr.news.chapsvision.com^
+||tr.news.chezmonveto.com^
+||tr.news.chilican.com^
+||tr.news.clicochic.com^
+||tr.news.companeo.es^
+||tr.news.companeo.ro^
+||tr.news.corsicalinea.com^
+||tr.news.cotemaison.fr^
+||tr.news.cporadio.tv^
+||tr.news.crystal-partenaires.com^
+||tr.news.delifrance.com^
+||tr.news.deneuville-chocolat.fr^
+||tr.news.deshotelsetdesiles.com^
+||tr.news.devisdirect.be^
+||tr.news.devisdirect.com^
+||tr.news.digitpjms.fr^
+||tr.news.directeo.fr^
+||tr.news.easy-voyage.com^
+||tr.news.easyviaggio.com^
+||tr.news.easyviajar.com^
+||tr.news.easyvoyage.co.uk^
+||tr.news.easyvoyage.com^
+||tr.news.easyvoyage.de^
+||tr.news.economic-studies.fr^
+||tr.news.editions-lva.fr^
+||tr.news.enkiapp.io^
+||tr.news.entreprise-pm.com^
+||tr.news.epicery.com^
+||tr.news.eureden.com^
+||tr.news.eurodatatv.com^
+||tr.news.exclu.fr^
+||tr.news.extenso-telecom.com^
+||tr.news.externis.com^
+||tr.news.extrabook.com^
+||tr.news.flandrintechnologies.com^
+||tr.news.frame.fr^
+||tr.news.franceloc.fr^
+||tr.news.futuramedia.fr^
+||tr.news.geantcasino.fr^
+||tr.news.geomag.fr^
+||tr.news.glance-mediametrie.com^
+||tr.news.grandsmoulinsdeparis.com^
+||tr.news.groupe-armonia.com^
+||tr.news.hallobanden.be^
+||tr.news.happycap-foundation.fr^
+||tr.news.happycap.org^
+||tr.news.helvyre.fr^
+||tr.news.heredis.com^
+||tr.news.i24news.tv^
+||tr.news.ics.fr^
+||tr.news.infopro-digital.com^
+||tr.news.interforum.fr^
+||tr.news.itancia.com^
+||tr.news.jautomatise.com^
+||tr.news.kalivet.com^
+||tr.news.kpmg-avocats.fr^
+||tr.news.kpmg.fr^
+||tr.news.kpmgacademy.fr^
+||tr.news.kpmgnet.fr^
+||tr.news.kuhn.com^
+||tr.news.la-collectionairfrance.fr^
+||tr.news.la-meilleure-voyance.com^
+||tr.news.labelleadresse.com^
+||tr.news.lacollection-airfrance.be^
+||tr.news.lacollection-airfrance.ch^
+||tr.news.lacollection-airfrance.co.uk^
+||tr.news.lacollection-airfrance.de^
+||tr.news.lacollection-airfrance.fr^
+||tr.news.lacollectionair-france.fr^
+||tr.news.lacollectionairfrance.be^
+||tr.news.lacollectionairfrance.co.uk^
+||tr.news.lacollectionairfrance.de^
+||tr.news.lacollectionairfrance.fr^
+||tr.news.lalettredelexpansion.com^
+||tr.news.latribunebordeaux.fr^
+||tr.news.leclubtravel.fr^
+||tr.news.lentillesmoinscheres.com^
+||tr.news.lentreprise.lexpress.fr^
+||tr.news.lexpansion.lexpress.fr^
+||tr.news.lexpress.fr^
+||tr.news.linxea.com^
+||tr.news.lisez.com^
+||tr.news.lokapimail.com^
+||tr.news.maisonfoody.com^
+||tr.news.maisons-du-monde.com^
+||tr.news.manufacturing.fr^
+||tr.news.mdbp.fr^
+||tr.news.mediametrie.fr^
+||tr.news.meillandrichardier.com^
+||tr.news.mi-oferta.es^
+||tr.news.moethennessy.com^
+||tr.news.mon-horoscope.info^
+||tr.news.monvoyant.fr^
+||tr.news.mperformance.fr^
+||tr.news.normandie.cci.fr^
+||tr.news.np6.com^
+||tr.news.ocs.fr^
+||tr.news.onetoonemba.com^
+||tr.news.ouestnormandie.cci.fr^
+||tr.news.parisinfo.com^
+||tr.news.perfectstay.com^
+||tr.news.perl.fr^
+||tr.news.pl.bata-esp.com^
+||tr.news.prosfora-mou.gr^
+||tr.news.receiveyourquote.co.uk^
+||tr.news.retailglobalsolutions.com^
+||tr.news.roadzila.com^
+||tr.news.seine-estuaire.cci.fr^
+||tr.news.smartdeals-transavia-fr.com^
+||tr.news.smartdealstransavia-fr.com^
+||tr.news.sport2000.fr^
+||tr.news.styles.lexpress.fr^
+||tr.news.supercasino.fr^
+||tr.news.teklifim.pro^
+||tr.news.thelist-emirates.fr^
+||tr.news.themedtechforum.eu^
+||tr.news.tiptel.fr^
+||tr.news.toocampmail.com^
+||tr.news.toute-la-franchise.com^
+||tr.news.triskalia.fr^
+||tr.news.vetharmonie.fr^
+||tr.news.videofutur.fr^
+||tr.news.vip-diary.com^
+||tr.news.vip-mag.co.uk^
+||tr.news.vipmag.fr^
+||tr.news.vivrecotesud.fr^
+||tr.news.vo3000.com^
+||tr.news.votreargent.lexpress.fr^
+||tr.news.voyagesleclerc.com^
+||tr.news.vraaguwofferte.be^
+||tr.news.vraaguwofferte.com^
+||tr.news.younited-coach.com^
+||tr.news.younited-credit.com^
+||tr.news2pjms.fr^
+||tr.news5.cdiscount.com^
+||tr.news6.cdiscount.com^
+||tr.newsletter-habitat.com^
+||tr.newsletter-stressless.com^
+||tr.newsletter-wonderbox.com^
+||tr.newsletter.1664france.fr^
+||tr.newsletter.1oag.com^
+||tr.newsletter.actalians.fr^
+||tr.newsletter.afpa.fr^
+||tr.newsletter.assuragency.net^
+||tr.newsletter.astro-mail.com^
+||tr.newsletter.bassins-a-flot.fr^
+||tr.newsletter.bauermedia.fr^
+||tr.newsletter.bouygues-construction.com^
+||tr.newsletter.bouygues.com^
+||tr.newsletter.capdecision.fr^
+||tr.newsletter.cuisine-plus.tv^
+||tr.newsletter.ecig-privee.fr^
+||tr.newsletter.erenumerique.fr^
+||tr.newsletter.etoiledevenus.com^
+||tr.newsletter.fotodiscount.com^
+||tr.newsletter.huilesdolive.fr^
+||tr.newsletter.leocare.eu^
+||tr.newsletter.location.boulanger.com^
+||tr.newsletter.meilleurmobile.com^
+||tr.newsletter.milleis.fr^
+||tr.newsletter.mixr.net^
+||tr.newsletter.monmedium.com^
+||tr.newsletter.np6.com^
+||tr.newsletter.np6.fr^
+||tr.newsletter.opcoep.fr^
+||tr.newsletter.photoservice.com^
+||tr.newsletter.phyto.com^
+||tr.newsletter.plurielmedia.com^
+||tr.newsletter.tiragephoto.fr^
+||tr.newsletter.younited-credit.com^
+||tr.newsletterpagesjaunes.fr^
+||tr.newsletters-bonpoint.com^
+||tr.newsletters.alticemedia.com^
+||tr.newsletters.coedition-contact.fr^
+||tr.newsletters.odalys-vacances.com^
+||tr.newsletters.qapa-interim.fr^
+||tr.newsletters.youmeetings.com^
+||tr.newsmarketing.allopneus.com^
+||tr.nl.2wls.net^
+||tr.nl.ardennes.cci.fr^
+||tr.nl.mondo-shop.fr^
+||tr.nl.myvipmag.fr^
+||tr.nl.services-sncf.com^
+||tr.nl2.sncf-fidelite.com^
+||tr.nmcm.espmp-cufr.net^
+||tr.notification-gdpr.bnpparibas-pf.fr^
+||tr.notification-gdpr.cafineo.fr^
+||tr.notification-gdpr.cofica.fr^
+||tr.notification-gdpr.cofinoga.fr^
+||tr.notification-gdpr.credit-moderne.fr^
+||tr.notification-gdpr.domofinance.fr^
+||tr.notification-gdpr.loisirs-finance.fr^
+||tr.notification-gdpr.norrsken.fr^
+||tr.notification-gdpr.personal-finance-location.bnpparibas^
+||tr.notification-gdpr.sygmabybnpparibas-pf.com^
+||tr.notification.cafineo.fr^
+||tr.notification.cdiscount.com^
+||tr.notification.cetelem.fr^
+||tr.notification.credit-moderne.fr^
+||tr.notification.norrsken.fr^
+||tr.notification.np6.com^
+||tr.np6.com^
+||tr.np6.fr^
+||tr.np6.orange.fr^
+||tr.observatoire.musee-orangerie.fr^
+||tr.observatoire.musee-orsay.fr^
+||tr.oferta-firmy.pl^
+||tr.ofertas-companeo.es^
+||tr.offer-companeo.co.uk^
+||tr.offerta-companeo.com^
+||tr.offerte.migliorifornitori.it^
+||tr.offre-btob.fr^
+||tr.offre-companeo.com^
+||tr.offre.devisdirect.com^
+||tr.offres-professionnelles.fr^
+||tr.offres.ap-regie.fr^
+||tr.offres.bfmtv.com^
+||tr.offresbtoc.engie.fr^
+||tr.offrevip.floa.fr^
+||tr.ojxm.espmp-aufr.net^
+||tr.openinnovation.lvmh.com^
+||tr.operations.butagaz.fr^
+||tr.orange-lease.fr^
+||tr.orcamento-online.pt^
+||tr.orcamentos-companeo.pt^
+||tr.oxatis.devisdirect.com^
+||tr.panels-mediametrie.fr^
+||tr.part.offres-cartegie.fr^
+||tr.partenaire.groupe-vyv.fr^
+||tr.partenaire.manageo.info^
+||tr.particuliers8.engie.com^
+||tr.partners.younited-credit.it^
+||tr.phjk.espmp-nifr.net^
+||tr.pixe.espmp-cufr.net^
+||tr.pm.pelhammedia.com^
+||tr.poker.np6.com^
+||tr.pole-emploi-services.com^
+||tr.pole-emploi.info^
+||tr.policyexpert.info^
+||tr.politicoevents.eu^
+||tr.politicolive.eu^
+||tr.politicomarketing.eu^
+||tr.portail.afpa.fr^
+||tr.premierembatour.com^
+||tr.prevention.harmonie-mutuelle.fr^
+||tr.preventivo.risparmiazienda.it^
+||tr.pro-renov.be^
+||tr.pro.odalys-vacances.com^
+||tr.prog.cinemanivel.fr^
+||tr.programme-voyageur-sncf.com^
+||tr.projet.cotemaison.fr^
+||tr.promo.np6.fr^
+||tr.promotion.lexpress.fr^
+||tr.prosfores-companeo.gr^
+||tr.prosfores-etairias.gr^
+||tr.ps.espmp-agfr.net^
+||tr.publicisdrugstore.espmp-agfr.net^
+||tr.qualitaetsumfrage.com^
+||tr.qualitaveicolo.com^
+||tr.qualite.groupama.com^
+||tr.qualite.groupebarriere.com^
+||tr.qualite.viparis.com^
+||tr.qualitevehicule.fr^
+||tr.qualityvehiclesurvey.com^
+||tr.quotes.digital^
+||tr.quotes4business.com^
+||tr.quotes4business.info^
+||tr.quotesforbusiness.cl^
+||tr.quotesforbusiness.co.uk^
+||tr.ratm.espmp-agfr.net^
+||tr.raym.espmp-agfr.net^
+||tr.reactivation.vertbaudet.fr^
+||tr.read.glose.com^
+||tr.recouvrement.finrec.com^
+||tr.recouvrement.seeric.com^
+||tr.recouvrement.younited-credit.com^
+||tr.redaction.essentiel-sante-magazine.fr^
+||tr.reglementaire.emailing.bnpparibas^
+||tr.relation-mediametrie.fr^
+||tr.relation.uneo.fr^
+||tr.remboursement.orange.fr^
+||tr.renowizze.be^
+||tr.rh.auchan.com^
+||tr.route-solutiondata.fr^
+||tr.roxi02e.espmp-agfr.net^
+||tr.safrancom-esp.net^
+||tr.sash.espmp-aufr.net^
+||tr.sash02g.espmp-nifr.net^
+||tr.satisfaction.alinea.com^
+||tr.satisfaction.groupe-pv-cp.com^
+||tr.satisfaction.villagesnature.com^
+||tr.scienceshumaines.info^
+||tr.scienceshumaines.pro^
+||tr.secretary.wfitn.org^
+||tr.secteurentreprises.harmonie-mutuelle.fr^
+||tr.service.linxea.com^
+||tr.serviceclient.adagcaladoise.fr^
+||tr.serviceclient.bf-depannage.fr^
+||tr.serviceclient.confogaz.com^
+||tr.serviceclient.depanchauffageservice.fr^
+||tr.serviceclient.effica-service.fr^
+||tr.serviceclient.explore.fr^
+||tr.serviceclient.gazservicerapide.fr^
+||tr.serviceclient.ochauffage.fr^
+||tr.serviceclient.somgaz.fr^
+||tr.serviceclient.thermogaz.fr^
+||tr.serviceclient.younited-coach.com^
+||tr.serviceclient.younited-credit.com^
+||tr.services.alinea.com^
+||tr.services.caradisiac.com^
+||tr.servicesclients.canalplus.ch^
+||tr.servicesclients.canalplus.fr^
+||tr.servicoaocliente.younited-credit.com^
+||tr.sfr.espmp-aufr.net^
+||tr.sgjk.espmp-aufr.net^
+||tr.silvera-contact.fr^
+||tr.skin.espmp-agfr.net^
+||tr.smtp1.email-mediapost.fr^
+||tr.solendi.com^
+||tr.solocal.espmp-aufr.net^
+||tr.solution.uneo.fr^
+||tr.sort.espmp-nifr.net^
+||tr.souscription.floa.fr^
+||tr.spain.plimsoll.es^
+||tr.strategie.gouv.fr^
+||tr.suivi-client-edf.com^
+||tr.surveys.np6.com^
+||tr.tdgx.espmp-cufr.net^
+||tr.think.lvmh.fr^
+||tr.thisiseurope.moethennessy.com^
+||tr.tns.harmonie-mutuelle.fr^
+||tr.toner-service.fr^
+||tr.toner-services.fr^
+||tr.tonerservices.fr^
+||tr.tourisme.visit-lanarbonnaise.com^
+||tr.tpe.harmonie-mutuelle.fr^
+||tr.trafficnews.lyria.com^
+||tr.ujsv.espmp-agfr.net^
+||tr.uk.icicibank.com^
+||tr.uk.katun.com^
+||tr.unaoffertaalgiorno.com^
+||tr.unimy-beyond.com^
+||tr.update.groupon.be^
+||tr.urfk.espmp-agfr.net^
+||tr.urfk02r.espmp-nifr.net^
+||tr.urfk02v.espmp-cufr.net^
+||tr.urfk02z.espmp-nifr.net^
+||tr.urfk03c.espmp-nifr.net^
+||tr.urfk03h.espmp-nifr.net^
+||tr.urfk03k.espmp-agfr.net^
+||tr.urfk03q.espmp-nifr.net^
+||tr.urfk03u.espmp-nifr.net^
+||tr.urfk03x.espmp-agfr.net^
+||tr.urfk041.espmp-cufr.net^
+||tr.urfk042.espmp-nifr.net^
+||tr.urfk044.espmp-nifr.net^
+||tr.urfk050.espmp-cufr.net^
+||tr.urfk052.espmp-cufr.net^
+||tr.urfk057.espmp-aufr.net^
+||tr.urfk05g.espmp-agfr.net^
+||tr.urfk05l.espmp-nifr.net^
+||tr.urfk06h.espmp-nifr.net^
+||tr.urfk06n.espmp-nifr.net^
+||tr.urfk06o.espmp-agfr.net^
+||tr.urfk06x.espmp-cufr.net^
+||tr.urfk06y.espmp-nifr.net^
+||tr.urfk07j.espmp-nifr.net^
+||tr.urfk07r.espmp-agfr.net^
+||tr.urfk07s.espmp-nifr.net^
+||tr.urfk080.espmp-agfr.net^
+||tr.urfk08c.espmp-cufr.net^
+||tr.vernede.huilesdolive.fr^
+||tr.videofutur.fr^
+||tr.ville.bordeaux.fr^
+||tr.voeux-wishes.ipsilon-ip.com^
+||tr.voixduclient.harmonie-mutuelle.fr^
+||tr.votrealarme.securitasdirect.fr^
+||tr.vous.hellobank.fr^
+||tr.wa.wordappeal.com^
+||tr.welcome.easyviaggio.com^
+||tr.welcome.easyviajar.com^
+||tr.welcome.easyvoyage.co.uk^
+||tr.welcome.easyvoyage.com^
+||tr.welcome.easyvoyage.de^
+||tr.welcome.lacollection-airfrance.ch^
+||tr.welcome.lacollection-airfrance.co.uk^
+||tr.welcome.lacollection-airfrance.de^
+||tr.welcome.lacollection-airfrance.fr^
+||tr.welcome.lexpress.fr^
+||tr.welcome.moncoupdepouce.com^
+||tr.welcome.odalys-vacances.com^
+||tr.welcome.perfectstay.com^
+||tr.welcome.smartdeals-transavia-fr.com^
+||tr.welcome.thelist-emirates.fr^
+||tr.welcome.vipmag.fr^
+||tr.wuei.espmp-agfr.net^
+||tr.xlead.digital^
+||tr.xleads.digital^
+||tr.zojh.espmp-aluk.net^
+||tr1.bp06.net^
+||tr1.bp09.net^
+||tr1.bp26.net^
+||tr1.citroen-ipsos.com^
+||tr1.easy-v01.net^
+||tr1.lr001.net^
+||tr1.lr002.net^
+||tr1.lr003.net^
+||tr1.mailperf.com^
+||tr1.mailperformance.com^
+||tr1.mperf.com^
+||tr1.peugeot-ipsos.com^
+||tr1.psa-surveys.com^
+||tr5.mailperf.com^
+||tr5.mperf.com^
+||tr6.mperf.com^
+||tracking.allopneus.com^
+||www.bfc-mp.caisse-epargne.fr^
+||www.fodgfip.fr^
+||www.newsletter.banquepopulaire.fr^
+||www.np6.eu^
+||www.tr.bfc-mp.caisse-epargne.fr^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_criteo.txt ***
+||aajdcp.brand-satei.me^
+||aajfoz.halfclub.com^
+||aajmmd.aireuropa.com^
+||aaqnpa.sizeofficial.se^
+||aaucna.casasbahia.com.br^
+||aazfby.auto.de^
+||abgghj.moustakastoys.gr^
+||abjkfy.muuu.com^
+||abjtuq.exoticca.com^
+||abkobh.chobirich.com^
+||abuaac.suzette-shop.jp^
+||abvghl.udn.com^
+||abxslg.jollyroom.fi^
+||aciysf.destockage-fitness.com^
+||acxajt.jimmykey.com^
+||adhudg.nec-lavie.jp^
+||adixkr.culturekings.com.au^
+||adxzju.penti.com^
+||aehudh.rakumachi.jp^
+||aeuati.wedio.com^
+||afdbwq.blivakker.no^
+||afhjxb.flaconi.de^
+||afoykb.ebook.de^
+||agcmtb.nameit.com^
+||agoqaa.stockmann.com^
+||ahhrtt.pixnet.net^
+||ahngxh.palladiumhotelgroup.com^
+||ahnrmb.topvintage.de^
+||ahsxot.meaningfulbeauty.com^
+||ahuvjy.design-market.fr^
+||ahzygy.thesteelshop.com^
+||aiddut.particleformen.com^
+||aidsro.ostin.com^
+||aikrir.lcwaikiki.com^
+||ajbeqy.delfi.lt^
+||ajgkdt.eazy.de^
+||ajvzis.triumph.com^
+||akpiug.rarecarat.com^
+||alexfj.elten-store.de^
+||alfeza.vueling.com^
+||algrcr.sandro-paris.com^
+||alhiop.thehandsome.com^
+||alrhry.cjthemarket.com^
+||alsgaj.chosun.com^
+||aminks.underarmour.com.tr^
+||amvtwk.thebottleclub.com^
+||anijjm.winkelstraat.nl^
+||annwwu.guitarcenter.com^
+||antblz.mediaworld.it^
+||aoelfb.nanouniverse.jp^
+||aojhzj.watch.co.uk^
+||aolsvc.snowqueen.ru^
+||aonjkj.intermundial.es^
+||aoqcqh.eavalyne.lt^
+||aoqhfs.optikdodomu.cz^
+||aplobv.xexymix.com^
+||appgax.optica-optima.com^
+||apqmxf.curama.jp^
+||aqdawf.ccm.net^
+||aqdawf.magazinedelledonne.it^
+||aqorez.yamo.bio^
+||aqouep.aquaphor.ru^
+||arigng.door.ac^
+||arphzc.woodica.pl^
+||asamgd.rossmann.de^
+||ascbdj.knivesandtools.de^
+||asoewk.jaanuu.com^
+||asttcp.vatera.hu^
+||atcbju.silvergoldbull.ca^
+||ateveq.street-beat.ru^
+||atgtfj.bettermusic.com.au^
+||atzzrq.tbs.co.jp^
+||audsoa.narumiya-online.jp^
+||ausclh.castlery.com^
+||auwdff.dyfashion.ro^
+||aviite.freaksstore.com^
+||awfzfs.kwantum.nl^
+||awggij.wplay.co^
+||awogtl.1stopbedrooms.com^
+||awowwo.forever21.com^
+||awrgkd.1000farmacie.it^
+||awuapj.landwatch.com^
+||axkcmb.mosigra.ru^
+||axoqvl.daf-shoes.com^
+||aydtkb.pikabu.ru^
+||aygccr.eonet.jp^
+||ayleaf.petersofkensington.com.au^
+||azcoct.bikkembergs.com^
+||azlyta.immowelt.de^
+||azscgj.penningtons.com^
+||azxhnt.uniformadvantage.com^
+||bagbgo.unitednude.eu^
+||bavvgo.zingat.com^
+||bbbihe.vertbaudet.es^
+||bbwqcs.vidaxl.ee^
+||bbybqq.levi.co.id^
+||bcfgwi.skidxb.com^
+||bcfhva.tradingpost.com.au^
+||bcsjcj.nasdaq.com^
+||bcybka.deinetuer.de^
+||bcytwb.student.com^
+||bderbn.foxtrot.com.ua^
+||bdickh.globalgolf.com^
+||bdkuth.smartbuyglasses.co.uk^
+||bdqzcj.micuento.com^
+||bdzcck.stadiumgoods.com^
+||beafdf.restaupro.com^
+||beoofo.pairs.lv^
+||bfeagv.chicwish.com^
+||bfjoyp.plus.nl^
+||bfjpbw.herrenausstatter.de^
+||bfzikn.l-wine.ru^
+||bgevqy.moschino.com^
+||bgupcq.westfalia.de^
+||bhawtp.vitacost.com^
+||bhwjoa.cotopaxi.com^
+||bhwkju.vivo.com^
+||bhxemw.charleskeith.com^
+||bilahh.feuvert.fr^
+||bjfbac.hyundaivaudreuil.com^
+||bjqnpe.i-office1.net^
+||bjuvux.andgino.jp^
+||bknqpb.dobredomy.pl^
+||bkpoef.jules.com^
+||blfkmp.fti.de^
+||blmjbp.casamundo.pl^
+||blsoof.wirwinzer.de^
+||blzayw.ticketsmarter.com^
+||blziha.intimissimi.com^
+||bmnbzt.pool-systems.de^
+||bmodjx.mgos.jp^
+||bmzuyj.nifty.com^
+||bnsmoi.valx.jp^
+||bnutnr.landandfarm.com^
+||bnvsjg.hometogo.de^
+||bnzkua.trussardi.com.br^
+||bobawb.pomellato.com^
+||boewzj.meiji-jisho.com^
+||boirza.idealista.pt^
+||bombrw.netshoes.com.br^
+||boqufs.2nn.jp^
+||bpgbcl.coconala.com^
+||bqacmp.vidaxl.no^
+||bqhkix.mosmexa.ru^
+||bqvndd.ifood.com.br^
+||brgrwd.dansko.com^
+||brizxe.dior.com^
+||brjjkd.calzedonia.com^
+||brqory.notino.sk^
+||brycys.24mx.se^
+||bsswkv.kirmizibeyazz.com^
+||bsytzb.hago.kr^
+||btkbei.courir.com^
+||btmean.cardosystems.com^
+||bttmkj.diesel.com^
+||buasmk.earthshoes.com^
+||budibu.saksfifthavenue.com^
+||busrol.st-eustachenissan.com^
+||bvbqyq.odalys-vacances.com^
+||bvexmf.bigtv.ru^
+||bvubje.leboncoin.fr^
+||bwmxdg.kimono-365.jp^
+||bwntyd.neuve-a.net^
+||bwujxl.yoga-lava.com^
+||bxbuvv.zeelool.com^
+||bxumze.buckscountycouriertimes.com^
+||bxumze.dispatch.com^
+||bxumze.jacksonville.com^
+||byjpsr.bobags.com.br^
+||bykwtf.victoriassecret.ae^
+||byqdtp.interpark.com^
+||byxcbk.ipekevi.com^
+||bzcuta.titleboxing.com^
+||bzqxze.remixshop.com^
+||cakmzz.schwab.de^
+||cbudbs.tirendo.de^
+||cbuvhv.desertcart.ae^
+||ccztgy.elgiganten.dk^
+||cdeatz.spartoo.it^
+||cdjhcf.hometogo.es^
+||ceggfe.msc-kreuzfahrten.de^
+||cfsaze.retailmenot.com^
+||cfxsss.deerberg.de^
+||cfyhym.weightwatchers.fr^
+||cgqkhc.trendyol.com^
+||cgvgga.mackenzie-childs.com^
+||chgwwj.klimate.nl^
+||cikvwv.dsdamat.com^
+||cikxuh.iciformation.fr^
+||ciszhp.finanzfrage.net^
+||ciszhp.gesundheitsfrage.net^
+||ciszhp.motorradfrage.net^
+||cjcqls.onbuy.com^
+||cjejjz.thelasthunt.com^
+||cjlekm.correiodopovo.com.br^
+||ckpxtt.justfly.com^
+||cksfgh.jaycar.com.au^
+||clhzet.ubierzswojesciany.pl^
+||clnbze.dziennikzachodni.pl^
+||clnbze.gratka.pl^
+||clnbze.polskatimes.pl^
+||clnbze.poranny.pl^
+||cltxxq.cruises.united.com^
+||cmgfbg.billetreduc.com^
+||cmhmpr.lolaliza.com^
+||cmttvv.bonprix.se^
+||cnlbxi.zoopla.co.uk^
+||cnpxwl.cheapcaribbean.com^
+||cnxddc.lodenfrey.com^
+||cogxmr.travelplanet.pl^
+||colgui.vidaxl.pt^
+||coobuo.pinkpanda.cz^
+||counmg.greatvaluevacations.com^
+||coyizl.embracon.com.br^
+||cploms.hipicon.com^
+||cqemus.gartenhaus-gmbh.de^
+||cqishr.mobile.de^
+||cqpmvc.caminteresse.fr^
+||cqpmvc.capital.fr^
+||cqpmvc.cuisineactuelle.fr^
+||cqpmvc.femmeactuelle.fr^
+||cqpmvc.gala.fr^
+||cqpmvc.prima.fr^
+||cqpmvc.programme-tv.net^
+||cqpmvc.programme.tv^
+||cqubdd.metro.co.uk^
+||cqubdd.thisismoney.co.uk^
+||cruntn.receno.com^
+||csghyg.reginaclinic.jp^
+||cspmkl.gruppal.com^
+||csymrm.24mx.fr^
+||csyqts.tmon.co.kr^
+||ctlayn.talbots.com^
+||ctwqxs.autoscout24.at^
+||ctyjsf.cellphones.com.vn^
+||cueohf.actieforum.com^
+||cueohf.forumactif.com^
+||cueohf.forumactif.fr^
+||cueohf.forumactif.org^
+||cueohf.hungarianforum.com^
+||cufroa.aboutyou.be^
+||cvhefd.ixbt.com^
+||cvtspo.moebel24.de^
+||cvzvun.vidaxl.de^
+||cwcdmm.zennioptical.com^
+||cxalid.turtlebeach.com^
+||cxasci.sprzedajemy.pl^
+||cxrfns.gu-global.com^
+||cyohmj.catawiki.com^
+||czujjs.crownandcaliber.com^
+||czvdlp.hgregoire.com^
+||daifez.thebay.com^
+||dajdnm.splits59.com^
+||dasych.drmartypets.com^
+||dbmyvl.apartmentfinder.com^
+||dbpbyh.americanas.com.br^
+||dbzgtg.infostrada.it^
+||dbzpek.nike.com^
+||dccfog.petco.com^
+||dcclaa.bunte.de^
+||dcclaa.daskochrezept.de^
+||dcclaa.einfachbacken.de^
+||dcclaa.elle.de^
+||dcclaa.freundin.de^
+||dcclaa.harpersbazaar.de^
+||dcclaa.slowlyveggie.de^
+||dckiwt.eataly.com^
+||dcspil.hifiklubben.nl^
+||dcsqim.socialdeal.nl^
+||dcxusu.lacuracao.pe^
+||ddioce.wolverine.com^
+||debjpy.globoshoes.com^
+||denpjz.jamesedition.com^
+||detnmz.bizfluent.com^
+||detnmz.dailypuppy.com^
+||detnmz.ehow.com^
+||detnmz.healthfully.com^
+||detnmz.hellomotherhood.com^
+||detnmz.hunker.com^
+||detnmz.itstillruns.com^
+||detnmz.leaf.tv^
+||detnmz.legalbeagle.com^
+||detnmz.livestrong.com^
+||detnmz.ourpastimes.com^
+||detnmz.sapling.com^
+||detnmz.sciencing.com^
+||detnmz.sportsrec.com^
+||detnmz.techwalla.com^
+||dfigxb.underarmour.com.mx^
+||dgaxzn.samma3a.com^
+||dgbftl.luckyvitamin.com^
+||dgkpzy.2ch2.net^
+||dgmolb.irishjobs.ie^
+||dhmdja.trueprotein.com.au^
+||dhsjpz.bugaboo.com^
+||diboji.class101.net^
+||dikhsb.vividseats.com^
+||dioqto.totaljobs.com^
+||diypxh.tillys.com^
+||djbztw.marimekko.com^
+||djnqoe.rani.com.tr^
+||dkbicq.elektramat.nl^
+||dkclxi.sitkagear.com^
+||dkskbu.demae-can.com^
+||dlesjf.jutarnji.hr^
+||dlqxtm.sssports.com^
+||dmvbpz.swimoutlet.com^
+||dncxgm.pegadorfashion.com^
+||dngpzy.bfmtv.com^
+||dngpzy.zone-turf.fr^
+||dnkeyt.svetsochtillbehor.se^
+||doabqu.s3.com.tw^
+||doagpm.promart.pe^
+||doclec.supersmart.com^
+||doclen.hypedc.com^
+||docyjy.ryderwear.com^
+||dpckzt.mesrecettesfaciles.fr^
+||dptgdj.usagi-online.com^
+||dptkdh.joinhoney.com^
+||dqqfrs.qatarairways.com^
+||drvive.lamoda.ru^
+||dvczvm.cyfrowe.pl^
+||dvghns.idealista.it^
+||dvhcob.jtrip.co.jp^
+||dvrxgs.fc-moto.de^
+||dvvkov.agrieuro.de^
+||dwbotr.ssg.com^
+||dwglgp.dunelm.com^
+||dwrlwx.polo-motorrad.de^
+||dxpxgy.jdsports.com^
+||dyghye.fashionesta.com^
+||dynamic-content.croquetteland.com^
+||dyqebg.aboutyou.hr^
+||dyzmpx.speedway.fr^
+||dzforp.buscape.com.br^
+||dzsevh.voyage-prive.com^
+||dzszbb.homes.co.jp^
+||eatjav.ekosport.fr^
+||eauicw.artnature.co.jp^
+||ebgagg.pink.rs^
+||ebgfyn.zenden.ru^
+||ebhjhw.bonprix.es^
+||ebmhpt.sneakscloud.com^
+||ebnpqi.carrefourlocation.fr^
+||ecdoib.26p.jp^
+||ecefyu.geox.com^
+||eduynp.fcl-hid.com^
+||eennme.vidaxl.sk^
+||eetzod.bemol.com.br^
+||efadyz.smartbuyglasses.co.nz^
+||efbenj.adorebeauty.com.au^
+||efglbp.baur.de^
+||efplso.epost.go.kr^
+||efuxqe.tatilbudur.com^
+||egbqvs.vila.com^
+||eghrbf.immowelt.at^
+||egvemw.aboutyou.ee^
+||ehauzf.jewlr.ca^
+||ehavol.consul.com.br^
+||ehedwd.sikayetvar.com^
+||eicyds.qoo10.jp^
+||eifeou.pandahall.com^
+||eiftfa.fashionette.de^
+||eikwax.marmot.com^
+||eiorzm.orvis.com^
+||eisdog.shape.com^
+||eitkrg.loriblu.com^
+||ejbbcf.finishline.com^
+||ejhyhg.travelist.pl^
+||ejimtl.costway.com^
+||ejpcuw.mitsubishilaval.com^
+||ejrbgi.tous.com^
+||ekphpa.perfectlypriscilla.com^
+||eltlio.boribori.co.kr^
+||elyxvt.wilsonamplifiers.com^
+||embknh.perriconemd.com^
+||emrdnt.sumaity.com^
+||endljp.abv.bg^
+||endljp.bazar.bg^
+||endljp.gong.bg^
+||endljp.kupujemprodajem.com^
+||endljp.nova.bg^
+||endljp.sinoptik.bg^
+||endljp.vesti.bg^
+||eniobs.moncler.com^
+||eofwfj.ria.com^
+||eokdol.flaconi.at^
+||eokzre.jd-sports.com.au^
+||eolvci.olx.ro^
+||eonmxd.urban-research.jp^
+||eozwcp.jetex.com^
+||epcdko.forevernew.com.au^
+||eqingl.ivet.bg^
+||eqkwat.histoiredor.com^
+||eqvioe.polihome.gr^
+||ermiph.petermanningnyc.com^
+||esqjac.costakreuzfahrten.de^
+||etcwmg.instant-gaming.com^
+||etoqel.nordicnest.de^
+||etppmr.luko.eu^
+||etwovr.underarmour.eu^
+||etznkn.ec-store.net^
+||eusdbk.philosophyofficial.com^
+||evkjai.grandado.com^
+||evrget.nikkan-gendai.com^
+||evupmg.olehenriksen.com^
+||ewfrnd.stockmann.ru^
+||eworfe.babyartikel.de^
+||ewygto.swanicoco.co.kr^
+||exbujk.glamood.com^
+||exwvpm.misumi-ec.com^
+||exxwhi.jmty.jp^
+||eyenox.eschuhe.de^
+||eymiwj.promotor.ro^
+||eymiwj.prosport.ro^
+||eywvko.shaddy.jp^
+||eyypxz.canifa.com^
+||eyzubm.gooutdoors.co.uk^
+||ezhddx.thesouledstore.com^
+||ezobam.jdsports.nl^
+||ezvjys.belezanaweb.com.br^
+||fahmta.f1i.com^
+||fahmta.metoffice.gov.uk^
+||fazphz.theiconic.com.au^
+||fbycnk.chiaki.vn^
+||fckxdb.hometogo.it^
+||fcpszk.telestream.net^
+||fculcz.joann.com^
+||fdixsh.platypusshoes.com.au^
+||fdkeip.azafashions.com^
+||fdxtbs.meeters.org^
+||febcyv.joshi-spa.jp^
+||feqbqn.rent.com^
+||fespzx.sfr.fr^
+||ffrmwn.musinsa.com^
+||ffuodj.lanebryant.com^
+||ffyvsn.evisu.com^
+||fgbgtt.cian.ru^
+||fgfecw.rebelle.com^
+||fgfukd.sakazen.co.jp^
+||fgjfwz.legami.com^
+||fglrgt.ruggable.com^
+||fgosob.unhcr.it^
+||fgqxcz.thehipstore.co.uk^
+||fhdnds.mrmarvis.com^
+||fhiwyq.axiory.com^
+||fhngty.vetsecurite.com^
+||fiawmk.empik.com^
+||fiimox.lebenskraftpur.de^
+||fimyxg.haberturk.com^
+||fiowtf.hyggee.com^
+||fjemeg.drim.es^
+||fjighz.armaniexchange.com^
+||fkanei.madura.fr^
+||fkdaik.lightinthebox.com^
+||fkmdky.lifehacker.ru^
+||fksqnp.prismashop.fr^
+||fkxlsc.fenix-store.com^
+||fldoai.municipal.com^
+||flnkmj.hometogo.fr^
+||flznib.weblio.jp^
+||fmjgtp.dentalspeed.com^
+||fmpjka.moroccanoil.com^
+||fmqidg.letras.com^
+||fmqidg.letras.mus.br^
+||fmssly.pets4homes.co.uk^
+||fmufpo.machicon.jp^
+||fnfhgj.secretsales.com^
+||fnlvhy.wowma.jp^
+||fpghll.rossmann.hu^
+||fpptmv.mrmarvis.co.uk^
+||fpxewa.ilmeteo.it^
+||fqcqnb.dwr.com^
+||fqppgv.cheapoair.com^
+||frbdzc.goguynet.jp^
+||frbmdx.fwrd.com^
+||frdoki.athleticshoes.work^
+||frdoki.heisei-housewarming.work^
+||frdoki.liquidfoundation.work^
+||frztrk.netmums.com^
+||fsbozl.dillards.com^
+||fsegfy.lepoint.fr^
+||fsqwdj.live-tennis.eu^
+||fsugco.rcn.nl^
+||ftmsyy.jbl.com.br^
+||ftnnce.autodoc.dk^
+||ftuart.chomedeynissan.com^
+||ftysya.aboutyou.de^
+||ftzets.silkfred.com^
+||fudezz.grid.id^
+||fudezz.gridoto.com^
+||fudezz.kompas.com^
+||fudezz.kompas.tv^
+||fudezz.kompasiana.com^
+||fudezz.motorplus-online.com^
+||fudezz.sonora.id^
+||fufbgj.pazzo.com.tw^
+||fufoir.aif.ru^
+||fuicmy.hana-mail.jp^
+||fuzrxc.aboutyou.nl^
+||fvvyjd.jtv.com^
+||fwsgvo.takami-labo.com^
+||fxmdjr.mamastar.jp^
+||fxmdjr.saita-puls.com^
+||fxmdjr.yogajournal.jp^
+||fxmkij.jny.com^
+||fxsdex.longvadon.com^
+||fxwrdu.autodude.se^
+||fxyvcz.thecompanystore.com^
+||fyccsw.eobuwie.com.pl^
+||fygild.rueonline.com^
+||fywfld.fjellsport.no^
+||fzeidx.vidaxl.gr^
+||fzexkf.drogaraia.com.br^
+||fzgpzp.opodo.de^
+||gaafbi.fashiondays.hu^
+||gaccwr.dutramaquinas.com.br^
+||gagysn.floward.com^
+||gastdn.wolfandbadger.com^
+||gbmfid.1mg.com^
+||gcoiys.cutsclothing.com^
+||gcowhi.thesalarycalculator.co.uk^
+||gcudsn.tradetested.co.nz^
+||gcxiyx.inspireuplift.com^
+||gdsngr.chainreactioncycles.com^
+||gecfnc.foresight.jp^
+||gedozw.autoscout24.cz^
+||gefkkw.cyberport.de^
+||gejzgq.gehaltsvergleich.com^
+||getpxq.rivolishop.com^
+||gfeede.theminda.com^
+||gfgcwf.vidaxl.lv^
+||gfgywe.abril.com.br^
+||gflpvq.rufflebutts.com^
+||gfnokk.natro.com^
+||ghdlry.greetz.nl^
+||ghnwss.fmsstores.gr^
+||ghrzlu.skechers.com.tr^
+||giojhm.finya.de^
+||gjljde.kathmandu.co.nz^
+||gkcqyo.aquazzura.com^
+||gkfdkf.jdsports.co.uk^
+||gksqdt.reitmans.com^
+||gksqfw.reverso.net^
+||glxdlf.tickets.ua^
+||glxmao.eterna.de^
+||glzsji.nordman.ru^
+||gmmhlk.techstar.ro^
+||gmqvql.furnwise.co.uk^
+||gmrhzf.wolfermans.com^
+||gmufag.e1.ru^
+||gmufag.fontanka.ru^
+||gmufag.starhit.ru^
+||gmufag.woman.ru^
+||gmxcdm.vestel.com.tr^
+||gnfqtz.smartphoto.se^
+||gnnkrz.josbank.com^
+||gnrmty.eurovaistine.lt^
+||goazlf.mytoys.de^
+||gocuxy.baycrews.jp^
+||gotpiu.regenbogen.com^
+||gpiljd.thetiebar.com^
+||gpiyhj.leopalace21.com^
+||gppppq.newcars.com^
+||gpzhcc.lapeyre.fr^
+||gqhfjr.sizeofficial.es^
+||gqjppj.rentcafe.com^
+||gqjrfv.autodoc.fi^
+||gqlaur.currentcatalog.com^
+||gqmuky.kaigonohonne.com^
+||grofag.hollandandbarrett.ie^
+||grtmpr.vertbaudet.fr^
+||grxokm.kirstein.de^
+||grxsaq.tagheuer.com^
+||gsbygc.clarks.eu^
+||gsmqez.xcite.com^
+||gspjom.3balls.com^
+||gsyegj.shatura.com^
+||gtgvze.chintai.net^
+||gtzpic.opodo.co.uk^
+||guwuym.barneys.co.jp^
+||gvdqzy.milanoo.com^
+||gvsivx.multinet.com.tr^
+||gwguyh.edreams.es^
+||gwizal.yumbutter.com^
+||gwupkw.flexform.com.br^
+||gxcaxz.cresus.fr^
+||gxsuum.discountmugs.com^
+||gxusko.pinkpanda.hu^
+||gxyojn.underarmour.fr^
+||gybles.shopee.ph^
+||gyqntn.dekoruma.com^
+||gyvcwd.cdiscount.com^
+||gyvyoc.dermoeczanem.com^
+||gyvzjp.conradelektronik.dk^
+||gyydua.dakine.com^
+||gyzwcl.sconto.cz^
+||gzjroa.bradsdeals.com^
+||gzlxvg.papy.co.jp^
+||hauhws.asgoodasnew.de^
+||hauixd.halistores.com^
+||haxdym.min-breeder.com^
+||hbaazk.bukalapak.com^
+||hbahrd.yogibo.jp^
+||hbfpvm.comolib.com^
+||hcdnpe.iareduceri.ro^
+||hchlqx.ghbass.com^
+||hcjpbc.closerweekly.com^
+||hcjpbc.intouchweekly.com^
+||hcjpbc.j-14.com^
+||hcjpbc.lifeandstylemag.com^
+||hcjpbc.mensjournal.com^
+||hcjpbc.muscleandfitness.com^
+||hcjpbc.okmagazine.com^
+||hcjpbc.radaronline.com^
+||hcjpbc.usmagazine.com^
+||hclspy.gourmetencasa-tcm.com^
+||hcmhqb.radpowerbikes.ca^
+||hcsmec.decathlon.pt^
+||hczvwi.soldejaneiro.com^
+||hdicsm.autoscout24.be^
+||hdnagl.womensecret.com^
+||hdxdhu.zumnorde.de^
+||hearob.klix.ba^
+||hekhnn.turnkeyvr.com^
+||hemblx.vans.cl^
+||hesprh.sony.jp^
+||heuida.shopafrm.com^
+||hevqaz.submarino.com.br^
+||hfmphs.loccitane.com^
+||hgzqxe.hanesbrandsinc.jp^
+||hhbxcs.tylko.com^
+||hhhedv.luxauto.lu^
+||hidjoi.perfumesclub.com^
+||hijxfm.gaspedaal.nl^
+||hiknhe.tanabesports.com^
+||hipkqt.contorion.de^
+||hitmse.altinbas.com^
+||hiuplq.diretta.it^
+||hiuplq.eredmenyek.com^
+||hiuplq.flashscore.co.ke^
+||hiuplq.flashscore.co.uk^
+||hiuplq.flashscore.com.br^
+||hiuplq.flashscore.com.ng^
+||hiuplq.flashscore.com.tr^
+||hiuplq.flashscore.com^
+||hiuplq.flashscore.de^
+||hiuplq.flashscore.dk^
+||hiuplq.flashscore.gr^
+||hiuplq.flashscore.nl^
+||hiuplq.flashscore.pl^
+||hiuplq.flashscore.ro^
+||hiuplq.flashscore.sk^
+||hiuplq.flashscore.vn^
+||hiuplq.livescore.in^
+||hiuplq.livesport.cz^
+||hiuplq.resultados.com^
+||hiuplq.rezultati.com^
+||hiuplq.soccer24.com^
+||hiuplq.tennis24.com^
+||hiyksu.karllagerfeldparis.com^
+||hjgcdi.farmacybeauty.com^
+||hleouh.feelunique.com^
+||hlqpie.waves.com^
+||hlreoc.gonuldensevenler.com^
+||hlsjel.engelvoelkers.com^
+||hlygsp.modivo.ro^
+||hmakpa.saksoff5th.com^
+||hmcncq.pierreetvacances.com^
+||hmeqvp.essencemakeup.com^
+||hmgnjf.autoscout24.it^
+||hmlvxk.julian-fashion.com^
+||hmoctt.leboutique.com^
+||hmpfja.up-t.jp^
+||hmvbmf.vidaxl.es^
+||hmyjoj.5-fifth.com^
+||hnnuaa.willhaben.at^
+||hnytrd.ssfshop.com^
+||hoseyy.prettylittlething.com^
+||hpbrqr.daihatsu.co.jp^
+||hplrqg.interflora.fr^
+||hpxsci.miista.com^
+||hqfthz.betterlifeuae.com^
+||hqgkmj.marine-deals.co.nz^
+||hqjuww.kolesa-darom.ru^
+||hrnhcu.kapiva.in^
+||hssyje.theathletesfoot.com.au^
+||hsxqhu.valostore.fi^
+||htmgrl.jollyroom.no^
+||htqfxh.vuch.cz^
+||hutkse.wecandoo.fr^
+||hvrhgt.the-sun.com^
+||hvrhgt.thescottishsun.co.uk^
+||hvrhgt.thesun.co.uk^
+||hvrhgt.thesun.ie^
+||hvrzig.e-domizil.ch^
+||hvwgbj.wikinger-reisen.de^
+||hvxymx.tui.pl^
+||hwwjsi.aboutyou.pl^
+||hwyytk.verabradley.com^
+||hwyyuy.ringcentral.com^
+||hxiabp.colins.com.tr^
+||hxnxxq.tophifi.pl^
+||hyeorg.gmarket.co.kr^
+||hyxvec.michaelpage.co.jp^
+||hyybul.kaskus.co.id^
+||hzcyhe.alvadi.ee^
+||hzeetn.natalie.mu^
+||hzoouw.s-re.jp^
+||hzuheh.palcloset.jp^
+||hzymxd.nocibe.fr^
+||iabdly.hoselink.com.au^
+||iatoex.kahve.com^
+||iazwzp.lyst.com^
+||ibbmly.moneymetals.com^
+||ibkups.rci.com^
+||ibtmla.discovery-expedition.com^
+||icaubf.casamundo.de^
+||icoktb.onygo.com^
+||idbkfy.kango-roo.com^
+||idgptg.esm-computer.de^
+||idianw.warmteservice.nl^
+||idndlc.kango-oshigoto.jp^
+||idqwqm.kkday.com^
+||iegwze.goldcar.es^
+||iethpk.notino.ro^
+||iffalh.y-aoyama.jp^
+||ifnyop.priceline.com^
+||ifqtfo.rugsusa.com^
+||ifxnyp.troquer.com.mx^
+||ifyane.balaan.co.kr^
+||igexlg.weltbild.de^
+||igjytl.unice.com^
+||ignchq.kentaku.co.jp^
+||igxqyi.iese.edu^
+||ihcamp.ybtour.co.kr^
+||ihfwer.aboutyou.com^
+||ihmnnz.flo.com.tr^
+||ihtnxu.tannergoods.com^
+||iiajtl.zeit.de^
+||iiqtru.aunworks.jp^
+||iirpzp.novasol.com^
+||ijaabm.bravotv.com^
+||ijaabm.eonline.com^
+||ijaabm.nbcsports.com^
+||ijaabm.telemundo.com^
+||ijaabm.telemundodeportes.com^
+||ijhlca.lulus.com^
+||ijifwb.green-acres.fr^
+||ikdxfh.jollyroom.se^
+||ilfmju.right-on.co.jp^
+||ilnfdq.cybozu.co.jp^
+||iltcaf.immobilienscout24.de^
+||ilvqos.lyst.es^
+||imhwzc.blibli.com^
+||imjdmq.emcasa.com^
+||indiyo.38-8931.com^
+||inencr.woodhouseclothing.com^
+||inmuzp.popsockets.com^
+||inqjal.dickssportinggoods.com^
+||inrjrj.cafepress.com^
+||ioeczq.juno.co.uk^
+||iooecb.bergzeit.de^
+||ioovrf.coen.co.jp^
+||iopxiu.wingly.io^
+||ipcfgw.pieces.com^
+||iphufr.circleline.com^
+||ipixsi.aboutyou.fi^
+||iptmih.hifi-regler.de^
+||ipummv.pharao24.de^
+||iqbjqv.airarabia.com^
+||iqcxki.johosokuhou.com^
+||iqjwrk.crocodile.co.jp^
+||iqlhlp.ab-in-den-urlaub.ch^
+||iqyioj.harryanddavid.com^
+||irurng.wondershare.jp^
+||iseuaa.olx.pl^
+||isjoui.cainz.com^
+||isovav.akomeya.jp^
+||iuryhk.soccer.com^
+||ivcxpw.kogan.com^
+||ivdguf.elephorm.com^
+||ivencq.nike.com.hk^
+||iwgfdj.iko-yo.net^
+||iwlnpw.claudiepierlot.com^
+||iwpkhm.re-store.ru^
+||iwpneu.eneba.com^
+||ixsgoy.getpenta.com^
+||iyvzqt.agabangmall.com^
+||izwgxw.acordocerto.com.br^
+||jambwe.transsibinfo.com^
+||janzoz.1001pneus.fr^
+||jaomlf.giftmall.co.jp^
+||javvso.newone-shop.com^
+||jbbljg.autoscout24.bg^
+||jbezdi.ilsole24ore.com^
+||jcaqvl.twinset.com^
+||jcplzp.lancel.com^
+||jdbjhd.saniweb.nl^
+||jdgtgb.allgaeuer-zeitung.de^
+||jdgtgb.augsburger-allgemeine.de^
+||jdgtgb.buffed.de^
+||jdgtgb.desired.de^
+||jdgtgb.express.de^
+||jdgtgb.familie.de^
+||jdgtgb.fussballfieber.de^
+||jdgtgb.giga.de^
+||jdgtgb.goettinger-tageblatt.de^
+||jdgtgb.haz.de^
+||jdgtgb.hildesheimer-allgemeine.de^
+||jdgtgb.ka-news.de^
+||jdgtgb.kicker.de^
+||jdgtgb.kino.de^
+||jdgtgb.ksta.de^
+||jdgtgb.ln-online.de^
+||jdgtgb.lvz.de^
+||jdgtgb.mainpost.de^
+||jdgtgb.meineorte.com^
+||jdgtgb.mopo.de^
+||jdgtgb.pcgames.de^
+||jdgtgb.pcgameshardware.de^
+||jdgtgb.rnz.de^
+||jdgtgb.rundschau-online.de^
+||jdgtgb.stylevamp.de^
+||jdgtgb.suedkurier.de^
+||jdgtgb.t-online.de^
+||jdgtgb.twitterperlen.de^
+||jdgtgb.unnuetzes.com^
+||jdgtgb.watson.de^
+||jeccmq.wehkamp.nl^
+||jelndb.truereligion.com^
+||jeyttn.snipes.com^
+||jfltzz.riu.com^
+||jfnnzq.quelle.de^
+||jfpltp.eyeforfashion.pl^
+||jhfuhi.b-exit.com^
+||jhrewn.venezia.pl^
+||jhzwle.ryuryumall.jp^
+||jkizha.theshoecompany.ca^
+||jknarp.kakaku.com^
+||jldtlh.fashionnova.com^
+||jlffeu.nadula.com^
+||jlnyti.mugo.com.tr^
+||jmcnwr.bricoprive.com^
+||jmzill.manterolcasa.com^
+||jnkqnf.cifraclub.com.br^
+||jnkqnf.cifraclub.com^
+||jnzedp.his-j.com^
+||joastb.idealista.com^
+||joqawz.snipes.nl^
+||joskgw.sewingmachinesplus.com^
+||jowtkv.vertbaudet.de^
+||jprbql.jdsports.fr^
+||jptobh.network.com.tr^
+||jpwfrl.mona.de^
+||jraasj.kobo.com^
+||jrucbb.guestreservations.com^
+||jrzgcz.latinaoggi.eu^
+||jshkyh.29cm.co.kr^
+||jspqms.bellevue-ferienhaus.de^
+||jswlpe.modainpelle.com^
+||jswyrt.jp1880.de^
+||jtxrou.saucony.com^
+||jujtcq.amnibus.com^
+||jvrwil.gabor.de^
+||jvzlya.benesse.ne.jp^
+||jwcnjv.xlmoto.eu^
+||jwlvlo.icaniwill.dk^
+||jwmhqs.fsk.ru^
+||jwtnmo.promovacances.com^
+||jxdptu.jouete-online.com^
+||jxeumx.hanaunni.com^
+||jxiwdw.ufret.jp^
+||jxoaza.yourmystar.jp^
+||jybnuw.mudah.my^
+||jynwlg.veromoda.com^
+||jzgfhr.nordicnest.com^
+||jzoxch.menswearhouse.com^
+||jzprtb.1stdibs.com^
+||kabokc.webuy.com^
+||kalwub.mizuho-re.co.jp^
+||katylz.lojaspompeia.com^
+||kbcmdi.florsheim.com.au^
+||kbviuj.enoteca.co.jp^
+||kcqoej.roborock.com^
+||kcuzgn.fnac.be^
+||kcvwuw.iryouworker.com^
+||kdlsdk.neverfullydressed.co.uk^
+||keoofp.gulfnews.com^
+||kftfhp.furusato-tax.jp^
+||kgbokc.masrefacciones.mx^
+||kgqxzw.blue-tomato.com^
+||kgqzgj.rougegorge.com^
+||khcdhu.saraschool.net^
+||khfiwx.sephora.com.br^
+||khfyas.bellybandit.com^
+||khimxz.shoesforcrews.com^
+||khyzbu.lsy031.com^
+||kiddbs.baby-calendar.jp^
+||kighmh.nelson.nl^
+||kiqwal.autoscout24.es^
+||kirsrn.runway-webstore.com^
+||kjdazx.buecher.de^
+||kjdfho.eidaihouse.com^
+||kjjuuy.icaniwill.fi^
+||kjmaoi.babor.com^
+||kjxmcn.eset.com^
+||kkcmcp.printemps.com^
+||kkznoe.autouncle.co.uk^
+||kkzpde.aboutyou.lt^
+||klktmc.parler.co.jp^
+||kmqghr.bristolshop.be^
+||kmqhmn.helen-marlen.com^
+||knapia.weightwatchers.com^
+||knopnf.asambeauty.com^
+||knorzj.wearfigs.com^
+||knymhv.ariat.com^
+||knzmrw.infojobs.net^
+||knzqjr.pult.ru^
+||koifrz.tvc-mall.com^
+||kouopt.calvinklein.com.br^
+||kpbzar.warbyparker.com^
+||kpcyic.sportisimo.cz^
+||kqchxa.denizbutik.com^
+||kqkcoq.vidaxl.fr^
+||kqkydl.postel-deluxe.ru^
+||krskux.newhaircaps.com.br^
+||ktdcoy.lyst.it^
+||kukckk.sagefinds.com^
+||kuusay.yalispor.com.tr^
+||kvfumh.fairwaystyles.com^
+||kvfunf.factorydirect.ca^
+||kvskic.jadore-jun.jp^
+||kwalnc.vans.co.kr^
+||kwqpix.ravenna.gr^
+||kwvbhj.jcpenney.com^
+||kwwgmv.tennistown.de^
+||kwwvxn.uniqlo.com^
+||kxkvpn.josera.de^
+||kxmrwu.ibarakinews.jp^
+||kyjoyk.modoza.com^
+||kyszhn.qvc.jp^
+||kyvpze.vidaxl.co.uk^
+||kzsicw.chip.de^
+||kzsicw.focus.de^
+||kzsicw.tvspielfilm.de^
+||kzsicw.tvtoday.de^
+||kzsisc.3.dk^
+||lacevj.potagercity.fr^
+||ladghy.jcb.co.jp^
+||lapwkd.feelgood-shop.com^
+||lbgfqn.onward.co.jp^
+||lbnrrh.autouncle.dk^
+||lcdsyj.daily.co.jp^
+||lcefua.timberland.ru^
+||lcodff.uta-net.com^
+||lcsopa.onamae.com^
+||lctfgw.evernew.ca^
+||ldgxsr.locasun-vp.fr^
+||ldhteg.mooihorloge.nl^
+||ldvalc.manzara.cz^
+||ldxpmz.people.com^
+||lebtpm.co-medical.com^
+||lexvek.gap.ae^
+||leynqj.newport.se^
+||lezntf.heydudeshoesusa.com^
+||lfercl.tcb-beauty.net^
+||lfuzec.bglen.net^
+||lfxdqs.mamasandpapas.ae^
+||lgbdxo.azazie.com^
+||lgylib.dg-home.ru^
+||lgzkzp.bauhaus.at^
+||lhaqtn.lyst.ca^
+||lhcivu.dekbed-discounter.nl^
+||lhewdj.fnac.pt^
+||lhzulh.tribeamrapali.com^
+||liecso.e-himart.co.kr^
+||ligxyv.hackers.co.kr^
+||liosix.mtvuutiset.fi^
+||ljqpvo.hardrock.com^
+||ljyipz.nugnes1920.com^
+||ljzxdu.largus.fr^
+||lkcxde.miliboo.de^
+||lkjbrd.signals.com^
+||lkluoz.saraceniwines.com^
+||lknqfn.furla.com^
+||lkvkgk.levis.com.tr^
+||llkdiu.chacos.com^
+||llqutk.skechers.com.au^
+||lltmch.zurifurniture.com^
+||lmavci.eloquii.com^
+||lmgenf.ludwigbeck.de^
+||lmgvur.scbt.com^
+||lmnqof.littletoncoin.com^
+||lmorsb.highstreettv.com^
+||lntvby.banggood.com^
+||lnvmxk.familyset.jp^
+||lnxfgm.party-calendar.net^
+||lodlww.carcon.co.jp^
+||lowgxl.yokumoku.jp^
+||lpbhnv.nbcbayarea.com^
+||lpbhnv.nbcchicago.com^
+||lpbhnv.nbcconnecticut.com^
+||lpbhnv.nbcdfw.com^
+||lpbhnv.nbclosangeles.com^
+||lpbhnv.nbcnewyork.com^
+||lpbhnv.nbcphiladelphia.com^
+||lpbhnv.nbcsandiego.com^
+||lpbhnv.necn.com^
+||lpbhnv.telemundo47.com^
+||lpbhnv.telemundo52.com^
+||lpbhnv.telemundopr.com^
+||lpbhnv.telemundowashingtondc.com^
+||lpdbca.internetaptieka.lv^
+||lpygsq.dorita.se^
+||lpzpyf.personalizedplanet.com^
+||lpzxed.superesportes.com.br^
+||lpzxed.uai.com.br^
+||lqbinr.locker-room.co.kr^
+||lqdeyv.thepopcornfactory.com^
+||lqopyc.beermachines.ru^
+||lqpzdi.coppel.com^
+||lqvfkk.sosyopix.com^
+||lqxjrk.fbs.com^
+||lravwm.spa.cz^
+||lrdnuu.shopee.co.th^
+||lreust.joshinweb.jp^
+||lrfctq.wordans.co.uk^
+||lrhyty.weeronline.nl^
+||lrjnbf.sabon.co.jp^
+||lslynl.chiashake.cz^
+||lspfuw.siwonschool.com^
+||ltcmak.alodokter.com^
+||ltecrf.dhgate.com^
+||ltnico.fnac.com^
+||ltqpej.vidaxl.ie^
+||ltsveh.wetteronline.de^
+||ltzpth.sephora.fr^
+||luaqlg.blissy.com^
+||luegnh.sneakercage.gr^
+||lumtjt.plumbingonline.ca^
+||luptbq.lampsplus.com^
+||luumhi.whatonearthcatalog.com^
+||luwzem.skala.nl^
+||lvidqa.unisportstore.de^
+||lvsats.gardner-white.com^
+||lvskfa.medisafe.fr^
+||lwozzk.legacy.com^
+||lxiaho.lesfurets.com^
+||lxmnrl.eobuv.sk^
+||lxoemc.libero.it^
+||lxsway.alltforforaldrar.se^
+||lxsway.blogg.se^
+||lxsway.familjeliv.se^
+||lxsway.tyda.se^
+||lxswqh.oyorooms.com^
+||lxwasy.tatragarden.ua^
+||lxztgb.musee-pla.com^
+||lyegyo.bluenile.com^
+||lyfrir.purehockey.com^
+||lyxfra.shopee.com.my^
+||lzrljv.tradera.com^
+||lzvwxy.hometogo.pl^
+||lzwxzz.chintaistyle.jp^
+||maaiuh.tomorrowland.co.jp^
+||makbti.bandofboats.com^
+||matytt.tone.ne.jp^
+||mbelia.underarmour.co.uk^
+||mcacry.trendhim.it^
+||mchtna.fashionplus.co.kr^
+||mckbpe.united-arrows.co.jp^
+||mczpco.darty.com^
+||mczqzk.yves-rocher.hu^
+||mdcbbx.notino.fr^
+||mdiyay.vseinstrumenti.ru^
+||mdugiz.jdsports.de^
+||mdxhon.allhomes.com.au^
+||meypeg.videdressing.com^
+||mffmbv.cabaia.fr^
+||mgbfxr.formongde.com^
+||mgbivj.hintaopas.fi^
+||mgclyt.costacruceros.es^
+||mgcnid.aboutyou.cz^
+||mgdmqr.parfium.bg^
+||mgefhu.seiska.fi^
+||mgefhu.suomi24.fi^
+||mggakg.littleblack.co.kr^
+||mgixgn.wittchen.com^
+||mgptul.finson.com^
+||mhidwg.elgiganten.se^
+||mhmetr.billabongstore.jp^
+||mhrkxi.thetrybe.com.au^
+||mixxuo.sportys.gr^
+||mjfunt.bibi.com^
+||mjjvkx.monoprice.com^
+||mjnpya.marktplaats.nl^
+||mjwnxc.julbie.com^
+||mkmree.dmm.co.jp^
+||mksogv.oneclickdrive.com^
+||mkzpqu.sungboon.com^
+||mkztpk.invictastores.com^
+||mlfolu.nabava.net^
+||mlgubn.autouncle.de^
+||mlhtmc.macnificos.com^
+||mlmswk.janpara.co.jp^
+||mmwlwm.autoscout24.pl^
+||mnbyto.goo-net.com^
+||mnrddc.journeys.com^
+||mnwljk.ibagy.com.br^
+||mowvra.idlookmall.com^
+||mpglie.apartmentguide.com^
+||mqejtk.theproteinworks.com^
+||mqesfg.bpm-power.com^
+||mqhaxf.keds.com^
+||mqhuzk.soffadirekt.se^
+||mqjsdu.eataly.net^
+||mqldrm.lgcity.ru^
+||mqsicr.smiggle.co.uk^
+||mqvyob.vidaxl.fi^
+||mrksmm.yumegazai.com^
+||msafoy.eyebuydirect.com^
+||mseeru.faz.net^
+||msfvwi.sieuthiyte.com.vn^
+||msioay.backcountry.com^
+||mtbflj.elementaree.ru^
+||mtcvyv.karakartal.com^
+||mtcvyv.sporx.com^
+||mtcvyv.superfb.com^
+||mtcvyv.webaslan.com^
+||mtkure.gazin.com.br^
+||mtoxtg.tezenis.com^
+||mtvgxt.partirpascher.com^
+||mtvnbq.infopraca.pl^
+||mtyciy.solebox.com^
+||mugapi.lazzarionline.com^
+||muhttw.spotlightstores.com^
+||mujjrh.stylenanda.com^
+||muqtti.motoin.de^
+||muvhqe.graodegente.com.br^
+||muwyib.lettuce.co.jp^
+||mvjkbj.inazumanews2.com^
+||mwefgc.pazolini.com^
+||mwxema.galerieslafayette.com^
+||mxdzxd.mister-auto.com^
+||mxmwqo.biosante.com.br^
+||mxpdsu.bhv.fr^
+||mxsvjc.hackers.ac^
+||mybjjg.vlan.be^
+||myxuak.mir-kubikov.ru^
+||navfja.answear.hu^
+||nbfopy.jjshouse.com^
+||nbizzi.store.ferrari.com^
+||nbohze.thenorthface.ru^
+||nbrngg.rinkaiseminar.co.jp^
+||nbyggk.jocee.jp^
+||ncbabz.hometogo.co.uk^
+||ncvsbz.bonds.com.au^
+||ncxxek.donedeal.ie^
+||ndcywq.ullapopken.fr^
+||ndroyp.gettingpersonal.co.uk^
+||neaaom.ytn.co.kr^
+||nffxqi.jorgebischoff.com.br^
+||ngazee.novostroy-m.ru^
+||ngghll.me.co.kr^
+||ngueja.2ememain.be^
+||ngyxtr.ripcurl.com^
+||nhkoze.saneibd.com^
+||nhnazx.outdoorlook.co.uk^
+||nhqkbl.semilac.pl^
+||njnlih.realitatea.net^
+||njxnsb.paodeacucar.com^
+||nkarmh.jmbullion.com^
+||nkqxyn.misterspex.co.uk^
+||nlbukc.babyworld.se^
+||nlgzhd.yoox.com^
+||nljjem.honeys-onlineshop.com^
+||nltzqx.autodoc.co.uk^
+||nlvnht.miror.jp^
+||nmiodk.promiflash.de^
+||nnhxjd.zielonalazienka.pl^
+||nnivvr.zimmo.be^
+||nnkkxb.nuts.com^
+||nnofmj.studiof.com.co^
+||nnqyed.laredoute.be^
+||nntgna.dmm.com^
+||nnvoia.closetworld.com^
+||nnvtvx.chegg.com^
+||npczil.maxandco.com^
+||nplden.legionathletics.com^
+||nprkvj.mall.sk^
+||nptkpt.vangraaf.com^
+||npvbjv.yourroom.ru^
+||nqacsh.boosted.dk^
+||nqcbgz.cocopanda.se^
+||nqgmcp.chairish.com^
+||nrjcur.pomelofashion.com^
+||nsedgj.bonprix.de^
+||nstclj.rubylane.com^
+||nthldc.europcar.co.uk^
+||ntopcd.underarmour.nl^
+||nucgsx.indestructibleshoes.com^
+||nukktn.dorko.hu^
+||nuquds.citizenwatch.com^
+||nuyujp.barstoolsports.com^
+||nvpdaa.brightcellm^
+||nvxlag.liligo.fr^
+||nwajdf.zakzak.co.jp^
+||nwbmvq.jockey.com^
+||nxnszu.ettoday.net^
+||nxovay.fo-online.jp^
+||nxwniq.aboutyou.ie^
+||nycwfz.kigili.com^
+||nytjyf.dholic.co.jp^
+||nyvknh.compracerta.com.br^
+||nzmkzl.mytheresa.com^
+||oaizwm.zox.la^
+||obfrok.partyking.no^
+||obhnrw.furniturebox.se^
+||obhxvb.tmktools.ru^
+||obooom.robinmaybag.com^
+||obtfhl.bellemaison.jp^
+||ocwlhv.ecid.com.br^
+||odkvrg.pedrodelhierro.com^
+||oebarc.ekosport.at^
+||oedlmz.underarmour.it^
+||oesonx.10000recipe.com^
+||oessbi.yves-rocher.ru^
+||ofkqiy.knowfashionstyle.com^
+||ofvosb.jumbo.com.tr^
+||ofwdvh.suntransfers.com^
+||ogcsvq.sourcenext.com^
+||ogpdwe.livin24.com^
+||oguwou.pichau.com.br^
+||ogzucf.all4golf.de^
+||ohrdit.kfzteile24.de^
+||oicmda.ugyismegveszel.hu^
+||oikckw.scarosso.com^
+||oiwnrl.theory.co.jp^
+||ojvxtz.junonline.jp^
+||oktagv.immobilienscout24.at^
+||olhqou.realsimple.com^
+||olklgn.jh-profishop.de^
+||olroyk.ardene.com^
+||olspyo.laredoute.co.uk^
+||olziko.maxmara.com^
+||omvzcq.vidaxl.be^
+||oncahh.boxlunch.com^
+||onghfx.revolve.com^
+||onjjbn.koffiemarkt.be^
+||onoztg.ultimate-guitar.com^
+||ontxgr.hofer-reisen.at^
+||ooqbml.tac-school.co.jp^
+||oozgka.immoscout24.ch^
+||opbdps.bonprix.fi^
+||oqbimz.aviasales.ru^
+||oqidne.itaka.pl^
+||ordbng.extra.com.br^
+||ordpmx.victorianplumbing.co.uk^
+||orsmfg.notino.de^
+||osczsk.lampeetlumiere.be^
+||oshlzg.takealot.com^
+||osjpyw.dico.com.mx^
+||osuwzo.oyunfor.com^
+||osvdtm.theshopyohjiyamamoto.jp^
+||othisf.tagomago.pl^
+||oufrqs.kunduz.com^
+||oufuqh.kant.ru^
+||ounwut.thehappyplanner.com^
+||ouvjnb.westernbikeworks.com^
+||ovmrti.sassyclassy.de^
+||oxbskt.autotrader.com.au^
+||oxizwk.livique.ch^
+||oxtrmw.marinarinaldi.com^
+||oyaswl.manor.ch^
+||oylyaz.mrkoll.se^
+||oyssqe.easyvoyage.com^
+||oyyqan.hejoscar.dk^
+||ozkkuy.fabianafilippi.com^
+||ozvlyz.justmusic.de^
+||pabgey.siepomaga.pl^
+||paqqlk.motatos.de^
+||pardko.pricerunner.com^
+||paupud.meillandrichardier.com^
+||pbecrm.aquanet.ru^
+||pbvnwd.moongori.com^
+||pcdstm.petbarn.com.au^
+||pciidk.shopee.vn^
+||pdftfe.thekooples.com^
+||pdsgaj.piquadro.com^
+||pdzutf.sftworks.jp^
+||pemskb.unitedcinemas.jp^
+||peqvwk.notino.at^
+||pesaea.autoesa.cz^
+||pevftg.shopee.sg^
+||peyqvn.falke.com^
+||pfltjr.essentialnutrition.com.br^
+||pgkxhq.jamesallen.com^
+||phczhg.johnjohndenim.com.br^
+||phgnxd.nike.com.br^
+||phjzsx.elevit.jp^
+||phqwdj.blacknfriday.com^
+||piddme.buyma.com^
+||pihxmq.98doci.com^
+||pjbncv.ode.co.kr^
+||pjgaez.autouncle.at^
+||pjtxmd.epool.ru^
+||pkiawn.konvy.com^
+||pkimbc.bestsecret.com^
+||pkmvjx.my-store.ch^
+||pktytp.membershop.lv^
+||plbcsd.vidaxl.se^
+||plczro.21dressroom.com^
+||pljuin.lensmode.com^
+||plwfwc.teknozone.it^
+||plyizb.latour-lith.nl^
+||pnhesw.jtb.co.jp^
+||pnnpan.cv-library.co.uk^
+||pnovfl.karaca.com^
+||pnvnpy.scullyandscully.com^
+||polhvf.bootbarn.com^
+||porqhi.topictravel.nl^
+||ppgqvz.bigmotoringworld.co.uk^
+||pplpiq.pricerunner.se^
+||ppssav.formal-message.com^
+||pqciix.busuu.com^
+||pqdhda.bluepops.co.kr^
+||pqlcpm.kindoh.co.kr^
+||pqlmae.lamaisonduchocolat.co.jp^
+||prhhqo.vintagevoyage.ru^
+||prkvlr.camper.com^
+||prvizg.shurgard.be^
+||przucu.elkjop.no^
+||psbiaf.converse.com^
+||psqsjg.coach.com^
+||ptlpel.tui.at^
+||ptmcos.beginning.kr^
+||ptouat.wahoofitness.com^
+||ptrenx.vidaxl.com.au^
+||pumlmb.netcologne.de^
+||pvoheg.bubbleroom.se^
+||pxbnou.ig.com.br^
+||pxmzlk.redfin.com^
+||pxxhbz.apamanshop.com^
+||pydnsv.ejobs.ro^
+||pymbay.kinguin.net^
+||pyouad.autonvaraosat24.fi^
+||pytxsn.najlacnejsisport.sk^
+||pywiia.lfmall.co.kr^
+||pzxhyp.aeropostale.com^
+||qahxwy.goosecreekcandle.com^
+||qamnyl.bever.nl^
+||qblkeu.vamvelosiped.ru^
+||qbwkux.home24.at^
+||qcaebg.nos.pt^
+||qcblzn.pinkpanda.it^
+||qceyjl.cellularoutfitter.com^
+||qcgtoz.cwjobs.co.uk^
+||qcmxuy.hardloop.de^
+||qcppad.merrell.com^
+||qdicel.marymaxim.com^
+||qdnxys.cotswoldco.com^
+||qdvavs.trademax.se^
+||qedlai.restplatzboerse.com^
+||qerpks.rollei.de^
+||qexbcx.olx.kz^
+||qezfer.motelamiio.com^
+||qfbles.elefant.ro^
+||qfkmyf.clarins.com^
+||qflwqw.opodo.fr^
+||qfoiss.lendingtree.com^
+||qftpgz.socarrao.com.br^
+||qgbnjd.coches.net^
+||qgmikp.fleurdumal.com^
+||qgscbx.renote.jp^
+||qgumjp.asiae.co.kr^
+||qgumjp.joins.com^
+||qhvdop.shoppinglive.ru^
+||qhzefk.drmartens.com^
+||qjcpcy.imkosmetik.com^
+||qjjgra.vendome.jp^
+||qjxiyt.respect-shoes.ru^
+||qkhhjm.autoscout24.nl^
+||qksbin.nocturne.com.tr^
+||qljiop.allabout.co.jp^
+||qllxvh.shopstyle.com^
+||qlsszi.lululemon.co.nz^
+||qmiiln.tower.jp^
+||qmlzcm.petshop.ru^
+||qmoyfh.xcite.com.sa^
+||qnqdpy.edreams.net^
+||qnzczf.idc-otsuka.jp^
+||qonwdq.helmexpress.com^
+||qoygsv.born2be.pl^
+||qqdflf.lpga.or.jp^
+||qrrhvh.propertyfinder.ae^
+||qrtqsy.freshlycosmetics.com^
+||qtbaye.mona.ch^
+||qtdkfh.beautywelt.de^
+||qtfnvf.ethika.com^
+||qtycwy.modivo.cz^
+||qumaef.conects.com^
+||qutsgp.calif.cc^
+||qvbxza.stoneberry.com^
+||qvenxs.cash-piscines.com^
+||qveyyi.clarivate.com^
+||qvmucs.abluestore.com^
+||qvnpxc.technopark.ru^
+||qvqtga.barenecessities.com^
+||qvsfrk.stephane-christian.com^
+||qvznqz.mekster.se^
+||qvzrde.mensagenscomamor.com^
+||qygxrh.vandykes.com^
+||qymjpg.star-tex.ru^
+||qysknb.fukuishimbun.co.jp^
+||qyvnic.footshop.cz^
+||qzcxtm.mango.com^
+||qzpkxf.edenboutique.ro^
+||qzwbod.blackdiamondequipment.com^
+||qzwktr.nazology.net^
+||qzwktr.nijimen.net^
+||qzwktr.world-fusigi.net^
+||qzxfnv.beams.co.jp^
+||raqwjl.dienthoaigiakho.vn^
+||raspnd.quadratec.com^
+||rcbsrm.fivefoxes.co.jp^
+||rccnyh.airportrentalcars.com^
+||rcevcm.lyst.co.uk^
+||rcqiho.emp.de^
+||rcqtck.dsquared2.com^
+||rczwcs.brack.ch^
+||rdfine.camelbrown.com^
+||reaonq.xn--hdks770u8f0a8dvzft.net^
+||reeokx.reima.com^
+||refwkk.cas.sk^
+||refwkk.mojewypieki.com^
+||refwkk.omnicalculator.com^
+||refwkk.topky.sk^
+||refwkk.zoznam.sk^
+||refytq.camp-fire.jp^
+||remnkv.doda.jp^
+||rertrc.abc-mart.net^
+||retarget.gites-de-france.com^
+||reydrj.kozaczek.pl^
+||reydrj.papilot.pl^
+||rgecga.piary.jp^
+||rgiixp.sperry.com^
+||rgzrys.hangikredi.com^
+||rhxkzd.jane.com^
+||riluwt.voxcinemas.com^
+||rimxqx.slickdeals.net^
+||riovdv.mustit.co.kr^
+||riwnmh.novasol.co.uk^
+||rjjynf.showcase-tv.com^
+||rkxmow.novasol-vacaciones.es^
+||rloddo.olx.bg^
+||rmxhti.zpacks.com^
+||rnffgv.wemakeprice.com^
+||rnnstu.rentbeforeowning.com^
+||rnybul.gismeteo.lv^
+||royzgi.giftishow.com^
+||rpfkgf.rp-online.de^
+||rpfkgf.saarbruecker-zeitung.de^
+||rpiher.web-camp.io^
+||rqbdyk.evo.com^
+||rqhtgf.pierrecardin.com.tr^
+||rqjjdi.bershka.com^
+||rqyxdk.myanimelist.net^
+||rrgiuy.jackroad.co.jp^
+||rrincc.auto-doc.it^
+||rrznha.lanvin-en-bleu.com^
+||rsotku.mitsui-shopping-park.com^
+||rugttt.robinson.com^
+||ruhpbn.zhigaojixie.com^
+||rvbqze.albamoda.de^
+||rvdnyq.topito.com^
+||rverxn.autosphere.fr^
+||rwdito.carsguide.com.au^
+||rwohdj.motocard.com^
+||rwrnkb.lifelongcollectibles.com^
+||rxhsry.sortiraparis.com^
+||rxqqaq.hollandandbarrett.com^
+||rxtolo.domiporta.pl^
+||rymhet.posudamart.ru^
+||ryvapi.fragrancenet.com^
+||rzgwpw.madeincookware.com^
+||rzpjyz.pasona.co.jp^
+||saclel.zotapay.com^
+||sbdhdq.zeeman.com^
+||sbmwgj.vidaxl.hu^
+||sbpzeq.lululemon.com.au^
+||sbttlj.togetter.com^
+||sbxxyx.notino.cz^
+||sbyneh.dailymail.co.uk^
+||scjlpq.navitime.co.jp^
+||scuzgq.greencell.global^
+||scvgzt.onequince.com^
+||sdjthl.tvguide.dk^
+||sdlmaf.bestsecret.at^
+||seyfwl.bryk.pl^
+||seyfwl.deccoria.pl^
+||seyfwl.interia.pl^
+||seyfwl.maxmodels.pl^
+||seyfwl.okazjum.pl^
+||seyfwl.pomponik.pl^
+||seyfwl.smaker.pl^
+||sezixz.officesupply.com^
+||sfajfu.boulanger.com^
+||sfbpok.theluxurycloset.com^
+||sfcbsh.mmlafleur.com^
+||sffyrc.ruparupa.com^
+||sfgysl.ppomppu.co.kr^
+||sflvqq.pleinoutlet.com^
+||shtptt.cupshe.com^
+||siewmi.uncommongoods.com^
+||sihoqd.sheridan.com.au^
+||sipulo.katies.com.au^
+||sisdtb.climatempo.com.br^
+||siusmv.coraltravel.pl^
+||sjryno.fullyloadedchew.com^
+||skbnfa.filorga.com^
+||slewvr.gp.se^
+||slryca.meyou.jp^
+||smbzbm.skymilescruises.com^
+||smsulx.kijijiautos.ca^
+||smtccv.loveholidays.com^
+||snbwyi.heine.at^
+||snprxx.wwfmarket.com^
+||snwhfq.texel.net^
+||sohiuc.sheego.de^
+||sorrhs.nescafe.com.tr^
+||soubej.larebajavirtual.com^
+||soxnwz.lg.com^
+||spenvp.gate.shop^
+||spigte.shopee.tw^
+||spjysa.only.com^
+||spmaeu.gumtree.com.au^
+||spmyma.moscowfresh.ru^
+||sqdgwx.jobrapido.com^
+||sqdljj.kijiji.ca^
+||sqripu.selsey.pl^
+||sqtivj.vidaxl.hr^
+||srbnxr.blair.com^
+||srmdvb.ekohealth.com^
+||srnzdl.morhipo.com^
+||sroork.mrmarvis.nl^
+||sshhfy.ray-ban.com^
+||ssigpc.servusmarktplatz.com^
+||ssushe.kennethcole.com^
+||stliom.vidaxl.cz^
+||sufesj.shop4runners.com^
+||sufetv.chefuniforms.com^
+||suydnc.wwf.it^
+||svoywu.autoscout24.de^
+||svpury.sizeofficial.de^
+||svpxbr.drsquatch.com^
+||swqleb.adidas.ru^
+||swwcyk.ahaber.com.tr^
+||swwcyk.atv.com.tr^
+||swwcyk.takvim.com.tr^
+||sxjfhh.azcentral.com^
+||sxjfhh.clarionledger.com^
+||sxjfhh.courier-journal.com^
+||sxjfhh.courierpostonline.com^
+||sxjfhh.delmarvanow.com^
+||sxjfhh.desmoinesregister.com^
+||sxjfhh.detroitnews.com^
+||sxjfhh.freep.com^
+||sxjfhh.greenbaypressgazette.com^
+||sxjfhh.greenvilleonline.com^
+||sxjfhh.guampdn.com^
+||sxjfhh.indystar.com^
+||sxjfhh.jsonline.com^
+||sxjfhh.lansingstatejournal.com^
+||sxjfhh.lohud.com^
+||sxjfhh.montgomeryadvertiser.com^
+||sxjfhh.newarkadvocate.com^
+||sxjfhh.news-press.com^
+||sxjfhh.northjersey.com^
+||sxjfhh.packersnews.com^
+||sxjfhh.pnj.com^
+||sxjfhh.poughkeepsiejournal.com^
+||sxjfhh.press-citizen.com^
+||sxjfhh.shreveporttimes.com^
+||sxjfhh.tallahassee.com^
+||sxjfhh.tennessean.com^
+||sxjfhh.thespectrum.com^
+||sxjfhh.thetowntalk.com^
+||sxjfhh.usatoday.com^
+||sxjfhh.vcstar.com^
+||sxjfhh.visaliatimesdelta.com^
+||sxmxpm.nectarsleep.com^
+||syfwnf.society6.com^
+||syqhvv.vivense.com^
+||sytuzk.nissanvimontlaval.com^
+||syycwa.barcelo.com^
+||sztpmc.branshes.com^
+||takigx.tourneau.com^
+||takqyi.laurenhi.jp^
+||taldpq.francfranc.com^
+||tatehj.nylaarp.com^
+||tavfri.crazysales.com.au^
+||taznfx.renters.pl^
+||tbjasp.cyrillus.de^
+||tbmgyz.centerparcs.de^
+||tbvjrd.gocase.com.br^
+||tchaxv.large.nl^
+||tczulp.econea.cz^
+||tdbnom.madeleine.de^
+||tdbsoc.thegivingmovement.com^
+||tdjvod.chevignon.com.co^
+||teraes.hgreg.com^
+||tevzas.autoscout24.fr^
+||tfpeev.chanluu.com^
+||tgirgs.flinders.nl^
+||thaqyl.mediamarkt.nl^
+||thqjrh.elly.vn^
+||ticvui.alexandani.com^
+||tiglck.technopolis.bg^
+||tivixv.nutribullet.com^
+||tjbhng.hemington.com.tr^
+||tjnffp.tilebar.com^
+||tjyrup.templeandwebster.com.au^
+||tjzvuo.youcom.com.br^
+||tkgaws.seokplant.com^
+||tkjcqb.forrent.com^
+||tkvied.levi.com.my^
+||tkvxdj.cars.com^
+||tkykzv.polisorb.com^
+||tkzvse.whois.co.kr^
+||tltpyy.saatchiart.com^
+||tmbsxx.oxybul.com^
+||tmhgma.juwelo.de^
+||tmrhpl.nurse-agent.com^
+||tnegqr.bohme.com^
+||tniujy.natura.com.br^
+||tpubrk.eobuv.com^
+||tqkspo.neobyte.es^
+||tqvacq.intrend.it^
+||tqxpnv.bauhaus.info^
+||trkpzz.dcinside.com^
+||trpzjj.hrkgame.com^
+||trvonu.k-manga.jp^
+||tsbkht.puritan.com^
+||tsbmkf.zonnebrillen.com^
+||tsedvc.aboutyou.ch^
+||tshuxi.bbqguys.com^
+||ttfpil.2dehands.be^
+||tuagol.gartenmoebel.de^
+||tufcum.margaretha.se^
+||tugngs.tui.com^
+||tvkfms.nta.co.jp^
+||twcdgc.opodo.ch^
+||twjobq.sixt.com^
+||twjobq.sixt.de^
+||twkbui.mansion-review.jp^
+||twoeej.carrefour.fr^
+||txfryh.terra.com.br^
+||txpbnm.sevellia.com^
+||txyqik.jjshouse.fr^
+||tybfxw.puma.com^
+||tyvuwf.lameteoagricole.net^
+||tzovkp.aboutyou.at^
+||ualkzq.moobel1.ee^
+||uazmti.a101.com.tr^
+||ubdjfy.maje.com^
+||ubdsej.notino.pl^
+||ubmdob.connection.com^
+||ubmups.houseofindya.com^
+||ubpekn.sivillage.com^
+||ubrihx.allbirds.jp^
+||ubvsjh.pointtown.com^
+||ucdvze.gudrunsjoden.com^
+||udgrbq.malwarebytes.com^
+||udmmdl.dudalina.com.br^
+||udonjl.coopdeli.jp^
+||udrvvx.kabum.com.br^
+||udsgty.alkosto.com^
+||uedvam.tatilsepeti.com^
+||ufeonk.viravira.co^
+||uflfhl.mercci22.com^
+||ufsmcn.blackspade.com.tr^
+||ufwsfi.magasins-u.com^
+||ugcsmk.aeschbach-chaussures.ch^
+||ugdcxl.timeout.com^
+||ugdcxl.timeout.jp^
+||ugdcxl.timeout.pt^
+||ugkray.theloom.in^
+||uglwov.logic-immo.com^
+||ugzbsu.klimaworld.com^
+||uhlagm.rakurakuseisan.jp^
+||uhrsek.shoemarker.co.kr^
+||uidpcx.planet.fr^
+||uijciz.gunze.jp^
+||uilwmi.coop.nl^
+||uinpmz.iichi.com^
+||uiwock.epantofi.ro^
+||ujvpma.infinitytools.com^
+||ujvqrs.meandem.com^
+||ukaytg.cortefiel.com^
+||ukgfxw.satofull.jp^
+||ukjphn.vitaminler.com^
+||ukmnlp.techbang.com^
+||ukzjce.idus.com^
+||uldtqa.weekendmaxmara.com^
+||ulidoo.montblanc.com^
+||ultund.misterspex.nl^
+||umdlbn.globetrotter.de^
+||umdpva.gakumado.mynavi.jp^
+||umhyck.belvilla.com^
+||umwuxk.hotel.cz^
+||unyzea.aboutyou.sk^
+||uoblij.farmaline.be^
+||uogqym.christopherandbanks.com^
+||uolwbz.heine.de^
+||upcqgl.idrive.com^
+||upeayz.eksisozluk.com^
+||upwkcv.vidaxl.ro^
+||upwwgd.zentempel.com^
+||uqckxr.chilli.se^
+||ureoaw.netthandelen.no^
+||uriokr.bauhaus.es^
+||urxbvw.tui.nl^
+||usgzei.vidaxl.ch^
+||usivbt.qoo10.com^
+||usrkrz.zdravcity.ru^
+||usyyzz.winparts.nl^
+||uurykr.pizzahut.com.mx^
+||uuzxaz.vidaxl.com^
+||uvccpk.1800petmeds.com^
+||uvgxhu.ezgif.com^
+||uvgxhu.sharemods.com^
+||uvqvvh.avva.com.tr^
+||uvzrtq.livingspaces.com^
+||uwezxr.provenwinners.com^
+||uxkurx.sportsmansguide.com^
+||uxqzcu.raunt.com^
+||uyivht.robertgraham.us^
+||uzevnf.realtystore.com^
+||uzpkre.connor.com.au^
+||vahlnd.bogsfootwear.com^
+||vbsjdd.olx.pt^
+||vbtdzb.fyndiq.se^
+||vcegpu.libas.com.tr^
+||vdkjfd.hottopic.com^
+||vdmvyu.falk.de^
+||vdrebz.kathmandu.com.au^
+||vdtpuw.yellowoctopus.com.au^
+||vedznh.cumhuriyet.com.tr^
+||veosfi.woonexpress.nl^
+||veqvek.ctvnews.ca^
+||veqvek.tsn.ca^
+||vfmahn.slevomat.cz^
+||vgazda.krefel.be^
+||vgbify.underarmour.de^
+||vgellr.esprit.de^
+||vhrbxb.vidaxl.nl^
+||vjjgpt.diamond.jp^
+||vkbvny.ddanzi.com^
+||vkctxy.yves-rocher.fi^
+||vkxyjj.g2a.com^
+||vmjdpk.repairclinic.com^
+||vmsxzx.buienradar.nl^
+||vnlvxi.vivastreet.co.uk^
+||vnqcyq.noon.co.kr^
+||vnzwxk.e-bebek.com^
+||voroud.wine.com.br^
+||vpemsb.autocasion.com^
+||vphsiv.gsshop.com^
+||vpmdiq.propertyfinder.qa^
+||vpuuzj.schnullireich.de^
+||vrhesh.avocadogreenmattress.com^
+||vrvjwr.mobelaris.com^
+||vrzmfy.fool.com^
+||vsfius.aranzulla.it^
+||vsqyaz.sweetwater.com^
+||vttics.world.co.jp^
+||vvaaol.enuygun.com^
+||vvcufx.colombo.com.br^
+||vvikao.brighton.com^
+||vwotiw.agazeta.com.br^
+||vwrgru.happymail.co.jp^
+||vxohkh.laboutiqueofficielle.com^
+||vyibkk.trocandofraldas.com.br^
+||vyjwxc.elemis.com^
+||vyplzy.job-medley.com^
+||vzcfqp.unibet.fr^
+||vzeyba.shopee.co.id^
+||vzhjnw.officedepot.com^
+||waatch.gva.be^
+||waatch.hbvl.be^
+||waatch.nieuwsblad.be^
+||waatch.standaard.be^
+||wabsgz.studocu.com^
+||warrjy.feiler.jp^
+||wavzlt.michaelstars.com^
+||wbcygu.wardow.com^
+||wbiphu.johnbeerens.com^
+||wbkval.ecco.com^
+||wboeot.shop2gether.com.br^
+||wbswtr.decathlon.com.tr^
+||wchjfv.apartmenttherapy.com^
+||wdnyom.faces.com^
+||wdukge.midwayusa.com^
+||wejpuy.factor75.com^
+||wemqip.misli.com^
+||weoccn.bonito.pl^
+||wepany.tripbeat.com^
+||wesbgz.travel.co.jp^
+||wevbgr.vidaxl.it^
+||wezbvq.heine-shop.nl^
+||wfwpok.impressionen.de^
+||wgnrrd.culturekings.com^
+||wgyapq.stormberg.com^
+||whahmy.timberland.es^
+||whcmij.altitude-sports.com^
+||whqkyq.leasingmarkt.de^
+||wigkxx.jetcost.com^
+||wirjoi.meetsmore.com^
+||wjtekf.vidaxl.bg^
+||wkympu.agnesb.co.jp^
+||wlkojk.orange.ro^
+||wlptux.habitaclia.com^
+||wlwtcr.toptoon.com^
+||wmbldi.compass.it^
+||wmizdm.relax-job.com^
+||wnozpl.escarpe.it^
+||wnyywf.frankonia.de^
+||woosyt.portalesardegna.com^
+||woqcfy.sony.ru^
+||wozdcc.vidaxl.at^
+||wpauvu.obuvki.bg^
+||wpgobx.feber.se^
+||wpgobx.marcusoscarsson.se^
+||wpkfti.1300k.com^
+||wppyub.mygenerator.com.au^
+||wqfflc.plantopedia.de^
+||wqudcv.finnishdesignshop.com^
+||wrkbha.lyst.de^
+||wrlnvt.pepita.hu^
+||wrvueo.mollis.ru^
+||wsgddl.deporvillage.it^
+||wsnrfb.modlily.com^
+||wsuqzu.armani.com^
+||wszwgs.cocopanda.fi^
+||wtgnmr.golfdigest.co.jp^
+||wttbup.novasol.de^
+||wucvvh.surpricenow.com^
+||wutsuy.zattini.com.br^
+||wvlirb.lexoffice.de^
+||wvoudw.magaseek.com^
+||wvrukp.globalcyclingnetwork.com^
+||wwnscv.myspringfield.com^
+||wwokkf.laredoute.ru^
+||wxebye.aboutyou.hu^
+||wxgmca.orthofeet.com^
+||wxnxau.air-r.jp^
+||wxwsmt.matsmart.fi^
+||wyaopp.lacoccinelle.net^
+||wyelmp.vidaxl.si^
+||wywvyf.discuss.com.hk^
+||wywvyf.price.com.hk^
+||wzcnha.lenspure.com^
+||wzpwxe.4lapy.ru^
+||wzyjup.patch.com^
+||wzzhvn.hammer.de^
+||xaguwy.thomas-muenz.ru^
+||xbwpfs.fotocasa.es^
+||xdaoxa.footasylum.com^
+||xdbchs.bradfordexchange.com^
+||xejpzk.fram.fr^
+||xekjzy.rinascente.it^
+||xewihp.bayut.com^
+||xfobuc.serenaandlily.com^
+||xfyxtg.buyautoparts.com^
+||xfzcds.netprint.ru^
+||xgspzv.troyestore.com^
+||xgvenv.farmatodo.com.co^
+||xhbzrk.hotmart.com^
+||xhqmvu.k-uno.co.jp^
+||xhxmhs.ounass.ae^
+||xibspj.komehyo.jp^
+||xiqvza.dickblick.com^
+||xiuksf.worten.es^
+||xiznql.laredoute.it^
+||xjkpzh.voraxacessorios.com.br^
+||xkddvf.gigantti.fi^
+||xknhwv.mobile01.com^
+||xkvmsr.hair.com^
+||xlbvvo.luisaviaroma.com^
+||xljqqe.hsn.com^
+||xmcvqq.pinkpanda.ro^
+||xmohlh.melia.com^
+||xmyvhu.soxo.pl^
+||xnbwsp.c-and-a.com^
+||xnukcp.cpcompany.com^
+||xpcpmr.gsm55.com^
+||xpygen.unger-fashion.com^
+||xqtcur.kirklands.com^
+||xqupwc.emp.at^
+||xqzqdj.mfind.pl^
+||xrchmz.mobafire.com^
+||xrcksn.vvf-villages.fr^
+||xrnyhc.welltimes.co.kr^
+||xrxybn.kotofey-shop.ru^
+||xscmzs.tenki.jp^
+||xsrzqh.oferte360.ro^
+||xsswcg.moglix.com^
+||xtazfx.50factory.com^
+||xudmrz.conforama.fr^
+||xuhplp.prioritytire.com^
+||xwpoxv.birdies.com^
+||xxjiqg.oysho.com^
+||xxlefq.commentcamarche.net^
+||xxlefq.hugolescargot.com^
+||xxlefq.jeux-gratuits.com^
+||xxlefq.journaldesfemmes.fr^
+||xxlefq.journaldunet.com^
+||xxlefq.linternaute.com^
+||xyhojp.lacoste.com^
+||xymhzq.klingel.de^
+||xyxgbs.lezhin.com^
+||xyzznt.uterque.com^
+||xzjqlg.marella.com^
+||xzwcng.vans.com.au^
+||yajkhd.supersports.com^
+||yawxae.footpatrol.com^
+||yazzuf.joyn.de^
+||ybswii.swarovski.com^
+||ybzcmz.momoshop.com.tw^
+||ycembr.net-a-porter.com^
+||ychqww.aboutyou.lv^
+||ydbeuq.superpharm.pl^
+||ydcksa.certideal.com^
+||yddtah.takingshape.com^
+||ydosfw.filippa-k.com^
+||ydtzzw.milannews.it^
+||ydtzzw.tuttonapoli.net^
+||ydvsok.newbalance.jp^
+||yefktd.avito.ru^
+||yehyqc.hugoboss.com^
+||yewrcd.govoyages.com^
+||yfepff.raymourflanigan.com^
+||yfpvmd.reed.co.uk^
+||yftkzg.thisisfutbol.com^
+||ygfycf.cpa.mynavi.jp^
+||ygmpia.worten.pt^
+||ygopvz.windsorstore.com^
+||ygsoeu.size.co.uk^
+||ygtfgu.casamundo.nl^
+||ygxqjz.intersport.fi^
+||yhbdzh.farmasiint.com^
+||yhhuzt.gintarine.lt^
+||yhjgjk.wemakeup.it^
+||yhnwux.infomoney.com.br^
+||yhskfe.klipsch.com^
+||yhvewh.aboutyou.ro^
+||yikrmn.ciceksepeti.com^
+||yjpgxf.svsound.com^
+||yjxssk.apartments.com^
+||ykfrpx.kapten-son.com^
+||ykhqhe.domain.com.au^
+||ykqapk.aboutyou.si^
+||ykskhw.candytm.pl^
+||ylsjdq.jegs.com^
+||ymrtre.scandinavianoutdoor.fi^
+||ymvikp.estadao.com.br^
+||ynagqs.vidaxl.pl^
+||ynemmp.goertz.de^
+||ypcdbw.drive2.com^
+||ypcdbw.drive2.ru^
+||ypqgnx.morizon.pl^
+||ypwzcq.tink.de^
+||yqaxvu.leilian-online.com^
+||yrrudp.inven.co.kr^
+||ysaaks.mobiauto.com.br^
+||yskvdo.gebrauchtwagen.at^
+||yszedg.vidaxl.dk^
+||ytbnvm.firadis.net^
+||ytouvy.arezzo.com.br^
+||yueqal.glassesusa.com^
+||yujmyt.theiconic.co.nz^
+||yuoyan.finanzen.de^
+||yvcjyi.beymen.com^
+||yvdaeg.on-running.com^
+||yvdxij.applevacations.com^
+||ywayoh.ecipo.hu^
+||ywcqef.lyst.com.nl^
+||ywrcqa.10tv.com^
+||ywrcqa.11alive.com^
+||ywrcqa.13newsnow.com^
+||ywrcqa.9news.com^
+||ywrcqa.fox43.com^
+||ywrcqa.fox61.com^
+||ywrcqa.kare11.com^
+||ywrcqa.kcentv.com^
+||ywrcqa.khou.com^
+||ywrcqa.ksdk.com^
+||ywrcqa.kvue.com^
+||ywrcqa.wcnc.com^
+||ywrcqa.wfaa.com^
+||ywrcqa.wfmynews2.com^
+||ywrcqa.wgrz.com^
+||ywrcqa.wthr.com^
+||ywrcqa.wusa9.com^
+||ywrcqa.wzzm13.com^
+||ywzmvh.trovaprezzi.it^
+||yxiqqh.dealchecker.co.uk^
+||yxxuyo.nintendo.co.za^
+||yxzfdl.550909.com^
+||yyhijp.g123.jp^
+||yyqlpi.danmusikk.no^
+||yyrtip.mujkoberec.cz^
+||yysjea.stepstone.nl^
+||yzcpqa.gumtree.com^
+||yzdljh.clarins.ca^
+||yzdltz.pricerunner.dk^
+||zbdtkk.totvs.com^
+||zbrfde.ozmall.co.jp^
+||zcjemo.alwaysfashion.com^
+||zcnknu.oxxo.com.tr^
+||zdbbqb.mancrates.com^
+||zdcjts.asics.com^
+||zdpsve.scrapbook.com^
+||zdqlel.restplatzboerse.at^
+||zftces.hoiku-job.net^
+||zfvdeu.novaconcursos.com.br^
+||zgfilz.propertyfinder.eg^
+||zgqgig.skillbox.ru^
+||zgumwv.stepstone.de^
+||zgwxoy.autoscout24.ro^
+||zhcxvk.qvc.com^
+||zhqcir.netage.ne.jp^
+||zhyeqw.mercury.ru^
+||ziwewm.tecovas.com^
+||zjkpxw.tesco.hu^
+||zjrbwb.markenschuhe.de^
+||zjzain.aboutyou.bg^
+||zlgkpr.lottehotel.com^
+||zmfdxt.megastudy.net^
+||zmhsxr.hometogo.com^
+||zmmrpv.peterglenn.com^
+||zmtqmp.shoestock.com.br^
+||zmyopn.babadotop.com.br^
+||zmzkyj.agrieuro.com^
+||znlgke.jiobit.com^
+||znmtka.kikocosmetics.com^
+||znrttr.jaypore.com^
+||zodxgk.lecoqsportif.com^
+||zopqks.kavehome.com^
+||zopxzq.premiata.it^
+||zpnrnr.ab-in-den-urlaub.de^
+||zqkdzl.invia.sk^
+||zquitw.fxpro.com^
+||zqwofo.liverpool.com.mx^
+||zrktaa.cityfurniture.com^
+||zrnsri.vogacloset.com^
+||zrsaff.petworld.no^
+||zrsetz.shutterstock.com^
+||zrxdzq.levelshoes.com^
+||ztfjtn.liujo.com^
+||ztgblo.vidaxl.lt^
+||ztqnls.lojasrenner.com.br^
+||zudver.matsmart.se^
+||zuqjug.nutrabay.com^
+||zvfzqw.cotta.jp^
+||zvvsvr.kettner-edelmetalle.de^
+||zwatgf.megaknihy.cz^
+||zwinqi.spartoo.pt^
+||zxbumj.edreams.it^
+||zxqrdm.vinomofo.com^
+||zxrnfc.drinco.jp^
+||zxrrop.musely.com^
+||zybveu.swappie.com^
+||zzsqqx.shopjapan.co.jp^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_oracle.txt ***
+||10stepswp.advancedtech.com^
+||1stparty.equifax.co.uk^
+||360direct.qualfon.com^
+||529conference.strategic-i.com^
+||a.aer.com^
+||a.swd5.com^
+||aarpannuity.newyorklife.com^
+||aarpfda.newyorklife.com^
+||aarpgfi.newyorklife.com^
+||aarpgli.newyorklife.com^
+||abastur.ubmmexico.com^
+||acceptcards.americanexpress.co.uk^
+||access.acspubs.org^
+||access.sunpower.com^
+||accountancy.bppeloqua.com^
+||accounting.frbservices.org^
+||acq-au.americanexpress.com^
+||acq-hk.americanexpress.com^
+||acq-jp.americanexpress.com^
+||acq-sg.americanexpress.com^
+||acquisition.cbre.com.au^
+||act.firstdata.com^
+||act.pbs.org^
+||action.hassconsult.co.ke^
+||activation.thunderinsider.com^
+||activos.contacto.promerica.fi.cr^
+||adi.ni.com^
+||admin.smartgroup.com.au^
+||adpia.client.adpinfo.com^
+||adpia130611.adpinfo.com^
+||adppartner.solutions.adpinfo.com^
+||advancing.acams.org^
+||advantages.americanexpress.com^
+||advisor.eaglestrategies.com^
+||advisor.newyorklifeannuities.com^
+||advisorservices.etradefinancial.com^
+||advisorservicesfpc.etradefinancial.com^
+||ae-go.experian.com^
+||afhleads.keurig.ca^
+||africa.edm.globalsources.com^
+||agentcomm.mercuryinsurance.com^
+||agexpo.americanexpress.com^
+||agribusiness.intelligence.informa.com^
+||ahima.coniferhealth.com^
+||ai.thermo.com^
+||ai.thermofisher.com^
+||aidc.barcodesgroup.com^
+||albanychicago.advancedtech.com^
+||alerts.ironmountain.com^
+||alerts.wolterskluwerfs.com^
+||alertsatwork.americanexpress.com^
+||alias.cloud-marketing.dimensiondata.com^
+||allergy.thermo.com^
+||allergy.thermofisher.com^
+||altalex.wolterskluwer.com^
+||alternativetechnology.arrow.com^
+||alumni.qualfon.com^
+||am.siemensplmevents.com^
+||amer.juniper.net^
+||americasbrandperformancesupport.hilton.com^
+||amplify.strategic-i.com^
+||ams.oraclecloud.com^
+||analytics.banksneveraskthat.com^
+||analytics.blackboard.com^
+||analytics.cognyte.com^
+||analytics.ferguson.com^
+||analytics.flexpay.io^
+||analytics.pollardwater.com^
+||analytics.uwindsor.ca^
+||angebote.plex.com^
+||announcement.lyreco.com^
+||answers.teradata.ch^
+||answers.teradata.co.uk^
+||answers.teradata.com.cn^
+||answers.teradata.com.sa^
+||answers.teradata.com^
+||answers.teradata.de^
+||answers.teradata.fr^
+||answers.teradata.hu^
+||answers.teradata.in^
+||answers.teradata.jp^
+||answers.teradata.mx^
+||answers.teradata.pl^
+||answers.teradata.ru^
+||answers.teradata.se^
+||antwort.hager.de^
+||ap.quadient.com^
+||apac-go.experian.com^
+||apac.adpinfo.com^
+||apac.juniper.net^
+||apacenews.roche.com^
+||apcinfo.motorolasolutions.com^
+||apcinfo.vertexstandard.com^
+||app.12thman.com^
+||app.12thmanfoundation.com^
+||app.aaas-science.org^
+||app.accelerate.zoominfo.com^
+||app.advertisingsolutions.att-mail.com^
+||app.arizonawildcats.com^
+||app.arts.kent.edu^
+||app.auburntigers.com^
+||app.augustaentertainmentcomplex.com^
+||app.baylorbears.com^
+||app.bbmannpah.com^
+||app.bluehens.com^
+||app.bncontacto.fi.cr^
+||app.bucky.uwbadgers.com^
+||app.budweisergardens.com^
+||app.business.westernunion.com^
+||app.calbears.com^
+||app.campaign.morganstanley.com^
+||app.campaign.trendmicro.com^
+||app.campaigns.fidelity.com^
+||app.cb.pnc.com^
+||app.ceb.executiveboard.com^
+||app.centreinthesquare.com^
+||app.cimarketing.aig.com^
+||app.cloud.plaxo.com^
+||app.cofcsports.com^
+||app.comms.aon.com^
+||app.communications.americanexpress.ca^
+||app.communications.citimortgage.com^
+||app.communications.jdsu.com^
+||app.compasslearning.biz^
+||app.connect.cch.ca^
+||app.connect.mandiant.com^
+||app.connect.synopsys.com^
+||app.connect.vmware.com^
+||app.connect.wgbh.org^
+||app.connect.wgby.org^
+||app.connections.te.com^
+||app.corp.tableausoftware.com^
+||app.crm.millenniumhotels.com^
+||app.csurams.com^
+||app.cubuffs.com^
+||app.customer.adaptiveinsights.com^
+||app.customer.adaptiveplanning.com^
+||app.customerservice.royalmail.com^
+||app.dawsoncreekeventscentre.com^
+||app.demand.nexsan.com^
+||app.demand.ni.com^
+||app.demand.scc.com^
+||app.depaulbluedemons.com^
+||app.dtlphx.net^
+||app.e.dowjones.com^
+||app.e.flukecal.com^
+||app.e.gettyimages.com^
+||app.e.intercall.com^
+||app.e.kqed.org^
+||app.ecupirates.com^
+||app.email.fitchratings.com^
+||app.email.forrester.com^
+||app.emarketing.heat.com^
+||app.emueagles.com^
+||app.enable.atmel.com^
+||app.engineering.sae.org^
+||app.entertainment.comcast-spectacor.com^
+||app.fans.wolveslynx.com^
+||app.fightingillini.com^
+||app.fleet2.vauxhall.co.uk^
+||app.fordidahocenter.com^
+||app.foxtheatre.org^
+||app.frbcommunications.org^
+||app.gafreedom.com^
+||app.gaincapital.com^
+||app.georgiadogs.com^
+||app.gfis.genworth.com^
+||app.gfwm.genworth.com^
+||app.global.certain.com^
+||app.globalbusinesstravel.americanexpress.com^
+||app.go.bmc.com^
+||app.go.coxmedia.com^
+||app.go.csc.com^
+||app.go.endicia.com^
+||app.go.gogoair.com^
+||app.go.gogoinflight.com^
+||app.go.guidancesoftware.com^
+||app.go.healthways.com^
+||app.go.hult.edu^
+||app.go.jacksonhewitt.com^
+||app.go.livingstonintl.com^
+||app.go.nhaschools.com^
+||app.go.nitropdf.com^
+||app.go.pentonmarketingservices.com^
+||app.go.sitel.com^
+||app.go.terremark.com^
+||app.go.wolterskluwerlb.com^
+||app.go.xo.com^
+||app.goairforcefalcons.com^
+||app.goarmywestpoint.com^
+||app.gobulldogs.com^
+||app.godeacs.com^
+||app.gogriz.com^
+||app.goguecenter.auburn.edu^
+||app.goheels.com^
+||app.gopack.com^
+||app.gopsusports.com^
+||app.gostanford.com^
+||app.goto.dowjones.com^
+||app.green.omniture.com^
+||app.griztix.umt.edu^
+||app.gseagles.com^
+||app.hailstate.com^
+||app.hawkeyesports.com^
+||app.health.bjc.org^
+||app.hokiesports.com^
+||app.hornettickets.csus.edu^
+||app.humanaresponses.com^
+||app.huskers.com^
+||app.info.accelus.thomsonreuters.biz^
+||app.info.accelus.thomsonreuters.com^
+||app.info.actuate.com^
+||app.info.americanpublicmediagroup.org^
+||app.info.autotask.com^
+||app.info.aviationweek.com^
+||app.info.avid.com^
+||app.info.compellent.com^
+||app.info.coopenae.fi.cr^
+||app.info.fidelity.com^
+||app.info.fleetmatics.com^
+||app.info.idgenterprise.com^
+||app.info.jdpa.com^
+||app.info.markit.com^
+||app.info.polycom.com^
+||app.info.quark.com^
+||app.info.questrade.com^
+||app.info.recall.com^
+||app.info.redhat.com^
+||app.info.standardandpoors.com^
+||app.info.trinet.com^
+||app.info.truvenhealth.biz^
+||app.info.ubmchannel.com^
+||app.info.washcaps.com^
+||app.info.washingtonwizards.com^
+||app.inform.equifax.com^
+||app.information.cognos.com^
+||app.innovate.molex.com^
+||app.insider.cavs.net^
+||app.insight.cision.com^
+||app.insight.dnb.com^
+||app.insight.thompson.com^
+||app.iowaeventscenter.com^
+||app.iuhoosiers.com^
+||app.jmusports.com^
+||app.knowhow.ceridian.com^
+||app.krannertcenter.com^
+||app.kuathletics.com^
+||app.lacr.motorolasolutions.com^
+||app.leadership.kenblanchard.com^
+||app.learn.datafoundry.com^
+||app.learn.ioninteractive.com^
+||app.learn.mindjet.com^
+||app.learn.rasmussen.edu^
+||app.libertyfirstcreditunionarena.com^
+||app.m1.adsolutions.yp.com^
+||app.machspeed.bluecoat.com^
+||app.mail.mfg.macquarie.com^
+||app.mail.skillsoft.com^
+||app.mailings.erepublic.com^
+||app.mailserver.parker.com^
+||app.marketing.pro.sony.eu^
+||app.marketing.richardsonrfpd.com^
+||app.marketing.wolterskluwerfs.com^
+||app.markkinointi.aller.fi^
+||app.meangreensports.com^
+||app.merchant.bankofamerica.com^
+||app.messages.sonicwall.com^
+||app.mk.westernunion.com^
+||app.mktg.genesys.com^
+||app.mktg.novell.com^
+||app.msuspartans.com^
+||app.network.ecitele.com^
+||app.news.zend.com^
+||app.newsletter.bisnow.com^
+||app.nhra.com^
+||app.noreply.cummins.com^
+||app.now.bomgar.com^
+||app.now.nowtv.com^
+||app.nuhuskies.com^
+||app.nusports.com^
+||app.ohiobobcats.com^
+||app.okcciviccenter.com^
+||app.olemisssports.com^
+||app.online.microfocus.com^
+||app.owners.hilton.com^
+||app.pacslo.org^
+||app.partner.fisglobal.com^
+||app.payments-response.americanexpress.co.uk^
+||app.payments.53.com^
+||app.pbr.com^
+||app.pittsburghpanthers.com^
+||app.playhousesquare.org^
+||app.post.vertafore.com^
+||app.ppacri.org^
+||app.profile.purina.com^
+||app.pultegroup.com^
+||app.qnasdaqomx.com^
+||app.ramblinwreck.com^
+||app.ratingsinfo.standardandpoors.com^
+||app.recruit.caterermail.com^
+||app.reply.perkinelmer.com^
+||app.resources.netiq.com^
+||app.respond.aonhewitt.com^
+||app.response.adobesystemsinc.com^
+||app.response.aiu.edu.au^
+||app.response.americancentury.com^
+||app.response.americanexpress.ca^
+||app.response.americanexpress.com^
+||app.response.att-mail.com^
+||app.response.blackbaud.com^
+||app.response.cetera.com^
+||app.response.firstdata.com^
+||app.response.hanover.com^
+||app.response.hartford.edu^
+||app.response.hslda.org^
+||app.response.integratelecom.com^
+||app.response.intergraph.com^
+||app.response.j2global.com^
+||app.response.jacksonhealthcare.com^
+||app.response.kroll.com^
+||app.response.krollontrack.co.uk^
+||app.response.locumtenens.com^
+||app.response.ncr.com^
+||app.response.neopost.com^
+||app.response.softserveinc.com^
+||app.response.stratfor.com^
+||app.response.thermofisher.com^
+||app.response.transplace.com^
+||app.response.volarisgroup.com^
+||app.results.chronicle.com^
+||app.richmondspiders.com^
+||app.riverbed.com^
+||app.sbas.sage.com^
+||app.selectyourtickets.com^
+||app.siemens-energy.com^
+||app.siemensplmevents.com^
+||app.sjsuspartans.com^
+||app.smart.vivint.com^
+||app.smumustangs.com^
+||app.snssecure.mcafee.com^
+||app.solution.roxar.com^
+||app.solutions.intermec.com^
+||app.soonersports.com^
+||app.stratfor.com^
+||app.success.coniferhealth.com^
+||app.suse.com^
+||app.tableausoftware.com^
+||app.tech.pentontech.com^
+||app.texasperformingarts.org^
+||app.texassports.com^
+||app.texastech.com^
+||app.ticketleader.ca^
+||app.ticketstaronline.com^
+||app.tulanegreenwave.com^
+||app.tysoncenter.com^
+||app.uabsports.com^
+||app.ucdavisaggies.com^
+||app.uhcougars.com^
+||app.uk.partner.equifax.com^
+||app.umassathletics.com^
+||app.umterps.com^
+||app.unlvrebels.com^
+||app.update.lenovo.com^
+||app.update.vodafone.co.uk^
+||app.updates.digicert.com^
+||app.usctrojans.com^
+||app.villanova.com^
+||app.virginiasports.com^
+||app.whartoncenter.com^
+||app.wine.tweglobal.com^
+||app.wsucougars.com^
+||app.wvusports.com^
+||app.your.csc.com^
+||app.your.level3.com^
+||app.zmail.zionsbank.com^
+||appcloud.appyreward.com^
+||applicatifs.ricoh.fr^
+||application.rasmussen.edu^
+||application.ricoh.ch^
+||application.ricoh.co.uk^
+||application.ricoh.co.za^
+||application.ricoh.de^
+||application.ricoh.ie^
+||application.taleo.com^
+||apps.go.hobsons.com^
+||apps.imaginecommunications.com^
+||apps.info.convio.com^
+||apps.software.netsimplicity.com^
+||ar.quadient.com^
+||arincol.arin-innovation.com^
+||as.balluff.com^
+||asia.atradius.com^
+||asia.interface.com^
+||ask.antalis-verpackungen.at^
+||ask.antalis.co.uk^
+||ask.antalis.com.tr^
+||ask.antalis.com^
+||ask.antalis.fr^
+||ask.antalis.lv^
+||ask.antalis.ro^
+||ask.antalis.se^
+||assets.eafit.edu.co^
+||assets.estudioseconomicos.co^
+||assets.spectrumhealthlakeland.org^
+||assistancetrack.changehealthcare.com^
+||ast-en.adp.ca^
+||ast-fr.adp.ca^
+||astcare.com^
+||at-go.experian.com^
+||athl.lsusports.net^
+||au-go.experian.com^
+||au-partners.ingrammicro.com^
+||au.interface.com^
+||au.mywd.com^
+||auforex.americanexpress.com^
+||aus.amexforbusiness.com.au^
+||autoimmunity.thermo.com^
+||autoimmunity.thermofisher.com^
+||automate.opex.com^
+||automation.pemco.com^
+||automationtest.pemco.com^
+||automotive-business.vodafone.com^
+||automotive.balluff.com^
+||avaya-engage.avaya.com^
+||avs.adpinfo.com^
+||axentis.arclogics.com^
+||axp.avaya.com^
+||b2binfo.canon-europe.com^
+||b2bmarketing.swisscom.ch^
+||b2bmarketingsb.swisscom.ch^
+||b2bmarketingsb.swisscom.com^
+||b2bmkt.lge.co.kr^
+||backoffice.verintsystemsinc.com^
+||bancopostapremia.bancoposta.it^
+||banks.adpinfo.com^
+||bbbb.blackboard.com^
+||bbk.pnc.com^
+||bbworld.blackboard.com^
+||bca.aviationweek.com^
+||be-go.experian.com^
+||belgium.wolterskluwer.com^
+||belong.curtin.edu.au^
+||beneficios.davivienda.hn^
+||beneficios.davivienda.sv^
+||benelux2.secureforms.mcafee.com^
+||better.herculesrx.com^
+||beuniquelyinsured.selective.com^
+||beyond.bluewolf.com^
+||bg-go.experian.com^
+||bigdata.clarin.com^
+||biz.coface.com^
+||blackbook.coniferhealth.com^
+||bldr.mkt.samsung.com^
+||blog.myomnipod.com^
+||bnk.wolterskluwerfs.com^
+||boutique.ricoh.fr^
+||bpm.global360.com^
+||bps.ricoh.co.uk^
+||bps.ricoh.ie^
+||bpsemea.hilton.com^
+||br.adpinfo.com^
+||branch.verintsystemsinc.com^
+||branchout.pegs.com^
+||brand.adp.ca^
+||breakthrough.kronos.com^
+||btaconnect.americanexpress.at^
+||btaconnect.americanexpress.co.uk^
+||btaconnect.americanexpress.de^
+||btaconnect.americanexpress.es^
+||btaconnect.americanexpress.fr^
+||btaconnect.americanexpress.it^
+||btaenrolment.americanexpress.at^
+||btaenrolment.americanexpress.co.uk^
+||btaenrolment.americanexpress.it^
+||btaenrolment.americanexpress.nl^
+||bu.adpinfo.com^
+||business-cards.americanexpress.com^
+||business-pages.edfenergy.com^
+||business.keurig.com^
+||business.vodafone.co.nz^
+||business.vodafone.com^
+||businessaffiliate.americanexpress.com^
+||businessmaking.progress.com^
+||businessmedia.americanexpress.com^
+||businessprocess.ricoh.de^
+||buzz.vocus.com^
+||by.mywd.com^
+||ca.connect.finning.com^
+||ca.creditacceptance.com^
+||calibration.ni.com^
+||campaign-fbsg.fujifilm.com^
+||campaign.amadeus.com^
+||campaign.bpost.be.bpost.be^
+||campaign.glory-global.com^
+||campaign.kpmg.co.il^
+||campaign.motorolasolutions.com^
+||campaign.outpayce.com^
+||campaign.phinmaproperties.com^
+||campaign.raymondcorp.com^
+||campaign.rockwellautomation.com^
+||campaign.ruukki.com^
+||campaign.shl.com^
+||campaign.ssab.com^
+||campaigninfo.motorolasolutions.com^
+||campaignresources.motorolasolutions.com^
+||campaigns-de.opentext.com^
+||campaigns-es.opentext.com^
+||campaigns-fr.opentext.com^
+||campaigns-it.opentext.com^
+||campaigns.amadeus.com^
+||campaigns.engage.cebglobal.com^
+||campaigns.glory-global.com^
+||campaigns.grenke.com^
+||campaigns.mellanox.com^
+||campaigns.messagemedia.com.au^
+||campaigns.netscout.com^
+||campaigns.opentext.com^
+||campaigns.ortec.com^
+||campaigns.panasonic.eu^
+||campaigns.rockwellautomation.com^
+||campaigns.sandhill.co.uk^
+||campaigns.technics.eu^
+||campaigns.verisk.com^
+||campaigns.xactware.com^
+||candidate.response.ingenovishealth.com^
+||care.excellence.kaweahhealth.org^
+||care.mercycare.org^
+||care.southeasthealth.org^
+||careers.coniferhealth.com^
+||carepay.gaf.com^
+||cars.autopia.com.au^
+||cars.smartfleetaustralia.com.au^
+||cars.smartleasing.com.au^
+||cascadion.thermo.com^
+||cascadion.thermofisher.com^
+||casl.couch-associates.com^
+||catracking.cubiq.com^
+||catracking.finning.com^
+||ccaas.avaya.com^
+||ccmd.coveredca.com^
+||cd.chemistanddruggist.co.uk^
+||cdrive.compellent.com^
+||cen.acspubs.org^
+||cenbrandlab.acspubs.org^
+||cenjobs.acspubs.org^
+||channel.arubanetworks.com^
+||channel.cummins.com^
+||channel.informaengage.com^
+||channelevents.partnermcafee.com^
+||channelusa.samsung.com^
+||chat.forddirectdealers.com^
+||check.frbservices.org^
+||chiefinvestmentofficer.strategic-i.com^
+||choose.adelaide.edu.au^
+||choose.nu.edu^
+||cihac.ubmmexico.com^
+||cimarketingforms.aig.com^
+||cimarketingforms.cimarketing.aig.com^
+||clarity-infographic.zebra.com^
+||click.rollouki.com^
+||click.vocus.com^
+||clicks.tableau.com^
+||client.trustaff.com^
+||clients.hermes-investment.com^
+||cloud.diagral.fr^
+||cloudhosting-business.vodafone.com^
+||cloverleaf.infor.com^
+||cluent-e.regeneron.com^
+||cm-in.americanexpress.com^
+||cm-sg.americanexpress.com^
+||cm.informaengage.com^
+||cmc.americanexpress.co.uk^
+||cmr.customer.americanexpress.de^
+||cmrcustomer.americanexpress.co.uk^
+||cn-go.experian.com^
+||cn.adpinfo.com^
+||cn.mywd.com^
+||cockpitdcbaima.carte-gr.total.fr^
+||collaborate.blackboard.com^
+||collections.equifax.com^
+||com.carte-gr.total.fr^
+||comm.toro.com^
+||commanslabdpp.carte-gr.total.fr^
+||commanslabdspace.carte-gr.total.fr^
+||commerce.edc.ca^
+||commercial.equifax.com^
+||commercial.inform.equifax.com^
+||comms.cigna.co.uk^
+||comms.cigna.es^
+||comms.cignaglobalhealth.com^
+||comms.cision.com^
+||comms.groupmarketing.dimensiondata.com^
+||comms.services.global.ntt^
+||communicate.cision.ca^
+||communicate.cision.co.uk^
+||communicate.prnewswire.co.uk^
+||communicate.prnewswire.com^
+||communicatelp.keysight.com^
+||communicatie.vub.be^
+||communication.adpinfo.com^
+||communication.futuresummits.com^
+||communication.hager.co.uk^
+||communication.imec.be^
+||communication.imechyperspectral.com^
+||communication.imeciclink.com^
+||communication.imecistart.com^
+||communication.imecitf.com^
+||communication.proximus.borce.pwc.com^
+||communication.ricoh.at^
+||communication.ricoh.ch^
+||communication.ricoh.co.uk^
+||communication.ricoh.de^
+||communication.ricoh.it^
+||communication.ricoh.pt^
+||communications.adpinfo.com^
+||communications.apilayer.com^
+||communications.cigna.com^
+||communications.embarcadero.com^
+||communications.fusioncharts.com^
+||communications.idera.com^
+||communications.sencha.com^
+||communications.ultraedit.com^
+||communications.wpcarey.com^
+||community.fusesource.com^
+||compliance.coniferhealth.com^
+||computers.panasonic.eu^
+||comtelitalia.alcatel-lucent.com^
+||comunicaciones.davivienda.com.pa^
+||comunicaciones.daviviendacorredores.com^
+||comunicaciones.pymas.com.co^
+||comunicazioni.bancamediolanum.it^
+||conf.optum.com^
+||conference.all-energy.com.au^
+||conferences.cigna.com^
+||confirm.aon.com^
+||confirm.ptvgroup.com^
+||connect-qa.netapp.com^
+||connect.abm.netapp.com^
+||connect.acams.org^
+||connect.acspubs.org^
+||connect.arkadin.com^
+||connect.aucmed.edu^
+||connect.becker.com^
+||connect.blackboard.com^
+||connect.blog.netapp.com^
+||connect.build.com^
+||connect.care.eehealth.org^
+||connect.care.kansashealthsystem.com^
+||connect.care.wakemed.org^
+||connect.caringcrowd.org^
+||connect.carrier.com.ph^
+||connect.chapman.com^
+||connect.cloud.netapp.com^
+||connect.cognex.com^
+||connect.compellent.com^
+||connect.cont.hcahealthcare.com^
+||connect.content-hub.netapp.com^
+||connect.customers.netapp.com^
+||connect.delphi.international^
+||connect.dimensiondata.com^
+||connect.flowroute.com^
+||connect.fwd.hcahealthcare.com^
+||connect.gcd.hcahealthcare.com^
+||connect.grassicpas.com^
+||connect.handlesets.com^
+||connect.health.bjc.org^
+||connect.health.lexmed.com^
+||connect.healthcare.northbay.org^
+||connect.healthcare.rush.edu^
+||connect.info.halifaxhealthnews.org^
+||connect.insidelpl.com^
+||connect.intel.com^
+||connect.intercall.com^
+||connect.inxpo.com^
+||connect.ispo.com^
+||connect.labcorp.com^
+||connect.lgcns.com^
+||connect.link.boone.health^
+||connect.medstarhealth.org^
+||connect.memorialcare.org^
+||connect.mhsystem.org^
+||connect.ncd.hcahealthcare.com^
+||connect.netapp.co.il^
+||connect.netapp.co.kr^
+||connect.netapp.com.au^
+||connect.netapp.com.sg^
+||connect.netapp.com.tw^
+||connect.netapp.in^
+||connect.netapp.it^
+||connect.nfd.hcahealthcare.com^
+||connect.partner-connect.netapp.com^
+||connect.satl.hcahealthcare.com^
+||connect.schoolmessenger.com^
+||connect.senecacollege.ca^
+||connect.stihl.info^
+||connect.the-stockmarket.com^
+||connect.xo.com^
+||connect.zebra.com^
+||connect2.secureforms.mcafee.com^
+||connected.verical.com^
+||connectfpc.zebra.com^
+||connection.arrow.com^
+||connection.verical.com^
+||connectlp.keysight.com^
+||connectportal.netapp.com^
+||connecttest.arubanetworks.com^
+||connectwithus.cetera.com^
+||consult.americanexpress.com^
+||consulting.guidehouse.com^
+||consulting.icmi.com^
+||consulting.mcgladrey.com^
+||consumer.equifax.com^
+||consumer.inform.equifax.com^
+||contact-us.adp.ca^
+||contact.aon.com^
+||contact.coface.com^
+||contact.golder.com^
+||contact.iwgplc.com^
+||contact.kikusuiamerica.com^
+||contact.lesmills.com^
+||contact.nalgene.com^
+||contact.no18.com^
+||contact.regus.com^
+||contact.samsungsds.com^
+||contact.spacesworks.com^
+||contact.tsr-net.co.jp^
+||contactcenter.verintsystemsinc.com^
+||contactcentercala.verintsystemsinc.com^
+||contactecs.arrow.com^
+||contacto.lecleire.com.gt^
+||contactus.53.com^
+||content.accelalpha.com^
+||content.bazaarvoice.com^
+||content.blackboard.com^
+||content.box.net^
+||content.convio.com^
+||content.eaes.marketone.com^
+||content.ferguson.com^
+||content.juniper.net^
+||content.nxp.com^
+||content.ohcare.ohiohealth.com^
+||content.powerdms.com^
+||content.prophet.com^
+||content.rackspace.co.uk^
+||content.tatatelebusiness.com^
+||content.verint.com^
+||content.wire.telstra.com^
+||contents.pwc.com^
+||controlexpenses.adp.ca^
+||convention.interfaceflor.com^
+||convision.davivienda.com^
+||cookie.amerigas.com^
+||cookie.cynch.com^
+||cookie.myamerigas.com^
+||cookies.ec4u.com^
+||cookies.engage.russellinvestments.com^
+||cookies.grenke.ch^
+||cookies.grenke.com^
+||cookies.grenke.de^
+||cookies.siemens-energy.com^
+||cookies.siemens-healthineers.com^
+||cookies.wpcarey.com^
+||coop.vmware.com^
+||corporate-klm.americanexpress.nl^
+||corporate.americanexpress.it^
+||corporatecard.americanexpress.nl^
+||corporatecards.americanexpress.com^
+||corporateforms.americanexpress.com^
+||corporatemembershiprewards.americanexpress.co.uk^
+||corporatemembershiprewards.americanexpress.es^
+||corporatemr.americanexpress.co.uk^
+||corporatemr.americanexpress.de^
+||corporatemr40k.americanexpress.co.uk^
+||corporatemrguide.americanexpress.co.uk^
+||corporatemrguide.americanexpress.de^
+||corporateplatino.americanexpress.it^
+||cortellisconnections.thomsonreuters.com^
+||create.encoreglobal.com^
+||crm.ironmountain.com^
+||crm.leads360.com^
+||crm.velocify.com^
+||cs.coopeservidores.fi.cr^
+||cs.hot.net.il^
+||cs.nexttv.co.il^
+||ctc.wolterskluwer.com^
+||curious.cognyte.com^
+||custom.dowjones.com^
+||custom.info.shutterstock.com^
+||customer-engagement.verintsystemsinc.com^
+||customerexperience.verintsystemsinc.com^
+||cx.quadient.com^
+||cyber-pages.att.com^
+||cyber-tracking.att.com^
+||cz-business.vodafone.com^
+||cz-cz.siemensplmevents.com^
+||cz-go.experian.com^
+||data.strategic-i.com^
+||dbl.cadriamarketing.com^
+||dc.bluecoat.com^
+||dd.control4.com^
+||de-de.siemensplmevents.com^
+||de-go.experian.com^
+||de.mywd.com^
+||de.verintsystemsinc.com^
+||defygravity.convio.com^
+||delete.atea.fi^
+||dell.compellent.com^
+||delphi.ni.com^
+||demandgen.ptc.com^
+||demo-mktg.vodafone.com^
+||dependable-s.hyster.com^
+||design.informabi.com^
+||design.nanawall.com^
+||details.pella.com^
+||dev-plan.intel.com^
+||dev.marketing.championhomes.com^
+||dev.marketing.skylinehomes.com^
+||devtracking.risk.lexisnexis.com^
+||dhdaa.duke.edu^
+||dhlsupplychain.dhl.com^
+||diagnostics.thermo.com^
+||dialer.leads360.com^
+||dialer.velocify.com^
+||diamages.carte-gr.total.fr^
+||digital-engineering.de^
+||digital-global.furniture-china.cn^
+||digital.adt.com.uy^
+||digital.aptaracorp.com^
+||digital.forddirectdealers.com^
+||digital.ironmountain.com^
+||digitalworkplace.ricoh.fr^
+||discover.absciex.com.cn^
+||discover.absciex.com^
+||discover.aptly.de^
+||discover.averydennison.com^
+||discover.citeline.com^
+||discover.clarivate.com^
+||discover.fullsail.edu^
+||discover.harvardbusiness.org^
+||discover.immofinanz.com^
+||discover.jll.com^
+||discover.parker.com^
+||discover.pharmaignite.com^
+||discover2.secureforms.mcafee.com^
+||distributors.balluff.com^
+||dk-go.experian.com^
+||dlabiznesu.pracuj.pl^
+||dm.smfl.jp^
+||dmkt.solutions.cas.org^
+||dnews.alfaromeo.it^
+||domorewithless.adp.ca^
+||downeconomywp.advancedtech.com^
+||download.createyournextcustomer.com^
+||download.dnv.com^
+||downloads.advancedtech.com^
+||downloads.coface.com^
+||downloads.mcgladrey.com^
+||dozententag.ni.com^
+||drive.seagate.com^
+||drugtest.questdiagnostics.com^
+||dsdordering.kdrp.com^
+||dtestpromo.fiat.it^
+||dx.thermo.com^
+||dx.thermofisher.com^
+||e-img.hover.to^
+||e-learning.brainshark.com^
+||e.beckmancoulter.com^
+||e.darpro-solutions.com^
+||e.gettyimages.ae^
+||e.gettyimages.co.jp^
+||e.gettyimages.co.nz^
+||e.gettyimages.in^
+||e.gettyimages.nl^
+||e.gettyimages.pt^
+||e.nicklauschildrens.org^
+||e.pomonaelectronics.com^
+||e10.verticurl.com^
+||eagle.aon.com^
+||eatonaero.advancedtech.com^
+||eb.informabi.com^
+||economicadvantage.midamerican.com^
+||economies.adp.ca^
+||ecvmbusiness.mtn.co.za^
+||ed1.comcastbiz.com^
+||edge.ricoh-europe.com^
+||education.bendigotafe.edu.au^
+||education.leads360.com^
+||education.moodybible.org^
+||education.ricoh.ch^
+||education.ricoh.fr^
+||education.velocify.com^
+||educontinua.javeriana.edu.co^
+||efficiency.nl.visma.com^
+||efficiency.visma.com^
+||efficiency.visma.dk^
+||efficiency.visma.fi^
+||efficiency.visma.lv^
+||efficiency.visma.se^
+||ehtel.endress.com^
+||electronics.edm.globalsources.com^
+||electronics.tradeshow.globalsources.com^
+||elia.thermofisher.com^
+||elink.serasaexperian.com.br^
+||eloqua-tracking.kaiserpermanente.org^
+||eloqua-tracking.unity.com^
+||eloqua-tracking.unity3d.com^
+||eloqua-uat.motorolasolutions.com^
+||eloqua.53.com^
+||eloqua.acspubs.org^
+||eloqua.apexsql.com^
+||eloqua.certiport.com^
+||eloqua.digitalpi.com^
+||eloqua.eafit.edu.co^
+||eloqua.eft.com^
+||eloqua.ethicalcorp.com^
+||eloqua.exploreliberty.com^
+||eloqua.eyeforpharma.com^
+||eloqua.eyefortravel.com^
+||eloqua.gdlcouncil.org^
+||eloqua.impactconf.com^
+||eloqua.insurancenexus.com^
+||eloqua.juilliard.edu^
+||eloqua.liberty.edu^
+||eloqua.mindhub.com^
+||eloqua.mindhubpro.com^
+||eloqua.moschampionship.com^
+||eloqua.n.no^
+||eloqua.nissan.com.tw^
+||eloqua.pearsonvue.ae^
+||eloqua.pearsonvue.co.jp^
+||eloqua.pearsonvue.co.uk^
+||eloqua.pearsonvue.com.cn^
+||eloqua.pearsonvue.com^
+||eloqua.pointcode.fr^
+||eloqua.psl.com.au^
+||eloqua.radware.com^
+||eloqua.roche.com^
+||eloqua.saiganeshk.com^
+||eloqua.sigmaaldrich.com^
+||eloqua.ufm.edu^
+||eloqua.undergraduateexam.in^
+||eloquaimages.e.abb.com^
+||eloquamarketing.masterlock.com^
+||eloquatrack.kistler.com^
+||eloquatracking.iqvia.com^
+||eloquatracking.mindbody.io^
+||elq-tracking.genomes.atcc.org^
+||elq-trk.fullsail.edu^
+||elq.accuity.com^
+||elq.adaptris.com^
+||elq.analog.com^
+||elq.ansible.com^
+||elq.artsfestival.org^
+||elq.blackrock.com^
+||elq.cirium.com^
+||elq.efront.com^
+||elq.eg.co.uk^
+||elq.egi.co.uk^
+||elq.enterprisersproject.com^
+||elq.feedbacknow.com^
+||elq.forrester.com^
+||elq.hamamatsu.com^
+||elq.icis.com^
+||elq.irobot.com^
+||elq.keysight.com.cn^
+||elq.keysight.com^
+||elq.lansa.com^
+||elq.macu.com^
+||elq.openshift.com^
+||elq.opensource.com^
+||elq.proagrica.com^
+||elq.proconnect.intuit.com^
+||elq.redhat.com^
+||elq.scanningpens.com.au^
+||elq.scanningpens.com^
+||elq.sonicwall.com^
+||elq.symantec.com^
+||elq.utas.edu.au^
+||elq.xperthr.co.uk^
+||elq.xperthr.nl^
+||elqact.gartner.com^
+||elqapp.spectrum.com^
+||elqforms.qnx.com^
+||elqtrack.broadridge.com^
+||elqtrack.kubotausa.com^
+||elqtrack.poly.com^
+||elqtracking.capella.edu^
+||elqtracking.cengage.com^
+||elqtracking.flexera.com^
+||elqtracking.macegroup.com^
+||elqtracking.medidata.com^
+||elqtracking.mercer-retirement.co.uk^
+||elqtracking.revenera.com^
+||elqtracking.richardsonrfpd.com^
+||elqtracking.strayer.edu^
+||elqtrck.nanawall.com^
+||elqtrk.cn.morningstar.com^
+||elqtrk.cummins.com^
+||elqtrk.hk.morningstar.com^
+||elqtrk.ibbotson.co.jp^
+||elqtrk.inec.com^
+||elqtrk.insight.tech^
+||elqtrk.intel.cn^
+||elqtrk.intel.co.il^
+||elqtrk.intel.co.jp^
+||elqtrk.intel.co.kr^
+||elqtrk.intel.co.uk^
+||elqtrk.intel.com.au^
+||elqtrk.intel.com.br^
+||elqtrk.intel.com.tr^
+||elqtrk.intel.com.tw^
+||elqtrk.intel.com^
+||elqtrk.intel.de^
+||elqtrk.intel.es^
+||elqtrk.intel.fr^
+||elqtrk.intel.in^
+||elqtrk.intel.it^
+||elqtrk.intel.la^
+||elqtrk.intel.pl^
+||elqtrk.intel.ru^
+||elqtrk.morningstar.be^
+||elqtrk.morningstar.com.au^
+||elqtrk.morningstar.com^
+||elqtrk.morningstar.de^
+||elqtrk.morningstar.hk^
+||elqtrk.morningstar.it^
+||elqtrk.morningstar.nl^
+||elqtrk.morningstar.no^
+||elqtrk.my.morningstar.com^
+||elqtrk.tw.morningstar.com^
+||elqtrkstg.intel.com^
+||elqview.kofax.com^
+||elqview.kofax.de^
+||elqview.kofax.jp^
+||elqview.uclahealth.org^
+||elqview2.uclahealth.org^
+||els298548211.medtronic.com^
+||em-email.thermofisher.com^
+||em.thermofisher.com^
+||email-am.jll-mena.com^
+||email-am.jll.ca^
+||email-am.jll.ch^
+||email-am.jll.cl^
+||email-am.jll.co.kr^
+||email-am.jll.co.th^
+||email-am.jll.co.za^
+||email-am.jll.com.ar^
+||email-am.jll.com.au^
+||email-am.jll.com.br^
+||email-am.jll.com.co^
+||email-am.jll.com.mo^
+||email-am.jll.com.mx^
+||email-am.jll.cz^
+||email-am.jll.de^
+||email-am.jll.es^
+||email-am.jll.hu^
+||email-am.jll.pe^
+||email-am.joneslanglasalle.co.jp^
+||email-am.joneslanglasalle.com.vn^
+||email-am.us.jll.com^
+||email-ap.jll-mena.com^
+||email-ap.jll.ca^
+||email-ap.jll.co.id^
+||email-ap.jll.co.in^
+||email-ap.jll.co.kr^
+||email-ap.jll.co.th^
+||email-ap.jll.co.uk^
+||email-ap.jll.com.ar^
+||email-ap.jll.com.au^
+||email-ap.jll.com.hk^
+||email-ap.jll.com.lk^
+||email-ap.jll.com.mx^
+||email-ap.jll.com.my^
+||email-ap.jll.com.ph^
+||email-ap.jll.com.sg^
+||email-ap.jll.com.tw^
+||email-ap.jll.fi^
+||email-ap.jll.nz^
+||email-ap.jll.pe^
+||email-ap.joneslanglasalle.co.jp^
+||email-cm.jll-mena.com^
+||email-cm.jll.co.id^
+||email-cm.jll.co.uk^
+||email-cm.jll.com.hk^
+||email-cm.jll.fi^
+||email-cm.jll.hu^
+||email-cm.jll.pe^
+||email-cm.jllsweden.se^
+||email-cm.joneslanglasalle.com.vn^
+||email-hk.americanexpress.com^
+||email-tw.americanexpress.com^
+||email.hockeytown.com^
+||email.info.exclusive-networks.com^
+||email.mymandg.co.uk^
+||emailhoteldevelopment.ihg.com^
+||emam^
+||emea-go.experian.com^
+||emeadm.rockwellautomation.com^
+||emeanews.secureforms.partnermcafee.com^
+||en-sg.siemensplmevents.com^
+||encompassreport.elliemae.com^
+||endo.dentsply.com^
+||energy.eneco.be^
+||engage-emea.jll.com^
+||engage.3m.co.cr^
+||engage.3m.co.id^
+||engage.3m.co.ke^
+||engage.3m.co.kr^
+||engage.3m.co.rs^
+||engage.3m.co.th^
+||engage.3m.co.uk^
+||engage.3m.co.za^
+||engage.3m.com.ar^
+||engage.3m.com.au^
+||engage.3m.com.bo^
+||engage.3m.com.br^
+||engage.3m.com.cn^
+||engage.3m.com.co^
+||engage.3m.com.do^
+||engage.3m.com.dz^
+||engage.3m.com.ec^
+||engage.3m.com.ee^
+||engage.3m.com.es^
+||engage.3m.com.gt^
+||engage.3m.com.hk^
+||engage.3m.com.hn^
+||engage.3m.com.hr^
+||engage.3m.com.jm^
+||engage.3m.com.lv^
+||engage.3m.com.mx^
+||engage.3m.com.my^
+||engage.3m.com.ni^
+||engage.3m.com.pa^
+||engage.3m.com.pe^
+||engage.3m.com.pk^
+||engage.3m.com.pr^
+||engage.3m.com.pt^
+||engage.3m.com.py^
+||engage.3m.com.qa^
+||engage.3m.com.ro^
+||engage.3m.com.sa^
+||engage.3m.com.sg^
+||engage.3m.com.sv^
+||engage.3m.com.tnm^
+||engage.avalara.com^
+||engage.broadcom.com^
+||engage.build.com^
+||engage.dow.com^
+||engage.ferguson.com^
+||engage.jacksonhewitt.com^
+||engage.jboss.com^
+||engage.neogen.com^
+||engage.nuance.com^
+||engage.nuance.fr^
+||engage.richardsonrfpd.com^
+||engage.shl.com^
+||engage.siriusdecisions.com^
+||engage.unisa.edu.au^
+||engage.uq.edu.au^
+||engage2demand.cisco.com^
+||engagemetrics.cisco.com^
+||engageru2.3mrussia.ru^
+||enquiry.marketingcube.com.au^
+||enterprise.dnb.ca^
+||enterprise2.secureforms.mcafee.com^
+||ep.regis.edu^
+||eqclicks.movember.com^
+||es-business.vodafone.com^
+||es-es.siemensplmevents.com^
+||es-go.experianiness.westernunion.at^
+||es-mktg.vodafone.com^
+||es-sa.siemensplmevents.com^
+||etc.lxhausys.com^
+||etk.locusrobotics.com^
+||etrack.ext.hpe.com^
+||etscampaign.motorola.com^
+||eu.cignaglobalhealth.com^
+||eu.ironmountain.com^
+||eufunding.ukri.org^
+||event.clubcorp.com^
+||event.dnv.com^
+||event.grassicpas.com^
+||event.jma.or.jp^
+||event.ortec.com^
+||event.thermofisher.com^
+||event.thermoscientific.cn^
+||event3.thermofisher.com^
+||event3.thermoscientific.com^
+||eventos.abastur.com^
+||eventos.cihac.com^
+||eventos.mirecweek.com^
+||eventos.ubmmexico.com^
+||eventos.usj.es^
+||events.avaya.com^
+||events.bendigotafe.edu.au^
+||events.blackboard.com^
+||events.careallies.com^
+||events.centex.com^
+||events.cigna.com^
+||events.coface.com^
+||events.elliemae.com^
+||events.engage.cebglobal.com^
+||events.executiveboard.com^
+||events.ferrari.com^
+||events.forddirectdealers.com^
+||events.glory-global.com^
+||events.golubcapital.com^
+||events.interface.com^
+||events.issmarketintelligence.com^
+||events.kangan.edu.au^
+||events.marketingcube.com.au^
+||events.mbrl.ae^
+||events.mcgladrey.com^
+||events.ndtco.com^
+||events.nuance.com^
+||events.tafensw.edu.au^
+||events.verticurl.com^
+||execgroup.convio.com^
+||exhibit.coteriefashionevents.com^
+||exhibit.firex.up.at^
+||exhibit.magicfashionevents.com^
+||exhibit.myfashionevents.com^
+||exhibition.edm.globalsources.com^
+||experience.aifsabroad.com^
+||experience.blackbaud.com^
+||experience.comcastbiz.com^
+||experience.jcu.edu.au^
+||experience.limelight.com^
+||experience.rsm.com.au^
+||experience2013.elliemae.com^
+||experienceplatform.avaya.com^
+||expertise.logarithmicsolutions.com^
+||explore-dev.agilent.com^
+||explore-uat.agilent.com^
+||explore.att.com^
+||explore.broncos.com.au^
+||explore.flexera.com^
+||explore.revenera.com^
+||explore.waldenu.edu^
+||ezgo.advancedtech.com^
+||factory.redbull.racing^
+||fan.info.heat.com^
+||fashion.edm.globalsources.com^
+||fashion.tradeshow.globalsources.com^
+||fasttrack.americanexpress.co.uk^
+||featured.bradyid.com^
+||feedback.aon.com^
+||feedback.avigilon.com^
+||feedback.lifeguardarena.com^
+||ferias.usj.es^
+||files.info.posteitaliane.it^
+||findthetruth.allergyai.com^
+||firstparty1.dentsplysirona.com^
+||firstpartycookie.gettyimages.com^
+||firstpartycookie.istockphoto.com^
+||flavors.firmenich.com^
+||food.informaengage.com^
+||food.pentonmarketingsvcs.com^
+||foodbrochure.advancedtech.com^
+||forex.americanexpress.com^
+||form.fusesource.com^
+||form.harvardbusiness.org^
+||form.innovative-design-lab.com^
+||form.vocalink.com^
+||formaciones.arin-innovation.com^
+||forms-emea.lenovo.com^
+||forms.anthology.com^
+||forms.b.oncourselearning.com^
+||forms.bmc.com^
+||forms.bradyid.com^
+||forms.burriswindows.com^
+||forms.businessnews.telstra.com^
+||forms.capitaliq.com^
+||forms.comcast-spectacor.com^
+||forms.cybersource.com^
+||forms.direxionfunds.com^
+||forms.egi.co.uk^
+||forms.enterprisenews.telstra.com^
+||forms.erepublic.com^
+||forms.executiveboard.com^
+||forms.fidelity.ca^
+||forms.fitchratings.com^
+||forms.flightglobal.com^
+||forms.icis.com^
+||forms.infor.com^
+||forms.irdeto.com^
+||forms.juniper.net^
+||forms.lenovo.com^
+||forms.mcgladrey.com^
+||forms.mdreducation.com^
+||forms.messe-muenchen.de^
+||forms.nexsan.com^
+||forms.nrs-inc.com^
+||forms.pentonmarketingservices.com^
+||forms.personneltoday.com^
+||forms.poweritpro.com^
+||forms.progress.com^
+||forms.sharjahart.org^
+||forms.smarterbusiness.telstra.com^
+||forms.solarwinds.com^
+||forms.systeminetwork.com^
+||forms.telstraglobal.com^
+||forms.verisigninc.com^
+||forms.vistage.com^
+||forms.vmtechpro.com^
+||forms.xperthr.com^
+||forms.xtralis.com^
+||forms2.vistage.com^
+||fpc.acpinternist.org^
+||fpc.acpjournals.org^
+||fpc.acponline.org^
+||fpc.annals.org^
+||fpc.attcenter.com^
+||fpc.cebglobal.com^
+||fpc.choosemylo.com^
+||fpc.ciel.com^
+||fpc.consumerportfolio.com^
+||fpc.gartner.com^
+||fpc.golubcapital.com^
+||fpc.indigovision.com^
+||fpc.inxinternational.com^
+||fpc.laerdal.com^
+||fpc.pelican.com^
+||fpc.questoraclecommunity.org^
+||fpc.sage.com^
+||fpc.sg2.com^
+||fpc.singleplatform.com^
+||fpc.trimarkusa.com^
+||fpcdallasstars.nhl.com^
+||fpcsbulls.nba.com^
+||fpt.inxinternational.com^
+||fr.adpinfo.com^
+||france.alphabet.com^
+||frc.redcross.fi^
+||frostnsullivan.advancedtech.com^
+||future.coniferhealth.com^
+||future.jcu.edu.au^
+||future.uwindsor.ca^
+||fvc.alcatel-lucent.com^
+||fxipca.americanexpress.ca^
+||fxipreferral.americanexpress.com^
+||fxpayments.americanexpress.co.nz^
+||fxpayments.americanexpress.com.au^
+||fxreferral.americanexpress.com^
+||gateway.aimia.com^
+||gb.click.finning.com^
+||gba.kwm.com^
+||gbl.radware.com^
+||gbtracking.cubiq.com^
+||gbtracking.finning.com^
+||gc.titans.com.au^
+||gccmembershiprewards.americanexpress.de^
+||gccmembershiprewards.americanexpress.it^
+||gdg.gardnerdenver.com^
+||gdmelqact.gartner.com^
+||get.diamanti.com^
+||get.docusign.com^
+||getconnected.infor.com^
+||getinfo.fullsail.edu^
+||ghp.adp.ca^
+||global.cphi-china.cn^
+||global.successfactors.com^
+||global.zenprise.com^
+||globalbanking.wolterskluwer.com^
+||globalcustodian.strategic-i.com^
+||globaleloqua.americanexpress.com^
+||globalsolutions.risk.lexisnexis.com^
+||gn.informaengage.com^
+||go-response.thermofisher.com^
+||go-stage.oracle.com^
+||go.accredible.com^
+||go.avalara.com^
+||go.axione.com^
+||go.bandits.com^
+||go.blackboard.com^
+||go.blackrock.com^
+||go.bouygues-construction.com^
+||go.brightspace.com^
+||go.cargotec.com^
+||go.cf.labanquepostale.fr^
+||go.climate.emerson.com^
+||go.comcastspectacor.com^
+||go.comres1.emerson.com^
+||go.cornerstonebuildingbrands.com^
+||go.dunnhumby.com^
+||go.dxc.technology^
+||go.econnect.dellmed.utexas.edu^
+||go.edmontonoilers.com^
+||go.emeadatacenter.services.global.ntt^
+||go.emersonautomation.com^
+||go.engineeringim.com^
+||go.enterprise.spectrum.com^
+||go.event.eset.com^
+||go.exactonline.de^
+||go.exactonline.fr^
+||go.exactonline.nl^
+||go.flukebiomedical.com^
+||go.greenlee.emerson.com^
+||go.hager.com^
+||go.hager.ie^
+||go.hager.nl^
+||go.hager.pl^
+||go.hager.se^
+||go.hello.navan.com^
+||go.heritagebuildings.com^
+||go.info.verifi.com^
+||go.intercall.com^
+||go.inxinternational.com^
+||go.klauke.emerson.com^
+||go.kurumsal.vodafone.com.tr^
+||go.labcorp.com^
+||go.mashery.com^
+||go.metallic.com^
+||go.mge.com^
+||go.morningstar.com^
+||go.motivcx.com^
+||go.netwitness.com^
+||go.oilkings.ca^
+||go.primeone.cloud^
+||go.protools.emerson.com^
+||go.ridgid.emerson.com^
+||go.robertsonbuildings.com^
+||go.rochesterknighthawks.com^
+||go.rohrer.com^
+||go.servicenow.com^
+||go.sfcg.com^
+||go.staubli.com^
+||go.steelbuilding.com^
+||go.teledynemarine.com^
+||go.testo.com^
+||go.ubmamg-media.com^
+||go.ukg.com^
+||go.ultimatesoftware.com^
+||go.visma.com^
+||go.vitecgroup.com^
+||go.wacom.com^
+||go.west.com^
+||go.yescomusa.com^
+||go2.kofax.com^
+||go5.global.toshiba^
+||gomerchant.groupon.com^
+||goto.heartlandpaymentsystems.com^
+||governmentcloud.avaya.com^
+||gr-business.vodafone.com^
+||grc2.secureforms.mcafee.com^
+||groundcare.dixiechopper.com^
+||groups.heatexperience.com^
+||grow.national.biz^
+||gslive.edm.globalsources.com^
+||gsmatch.edm.globalsources.com^
+||gsol.edm.globalsources.com^
+||gsols.edm.globalsources.com^
+||gsupplyair.carte-gr.total.fr^
+||guest.vistage.com^
+||happyholidays.coniferhealth.com^
+||hasslefree.redwingshoes.com^
+||health.aonunited.com^
+||health.fishersci.com^
+||healthcare.fishersci.com^
+||healthcare.mcgladrey.com^
+||healthcare.oakstreethealth.com^
+||healthcare.thermofisher.com^
+||hello.bpost.be^
+||hello.bpost2.be^
+||hello.effervescents.com^
+||hello.grattezvotrecadeau.be^
+||hello.ops.bpost.be^
+||hello.postuler.bpost.be^
+||hello.solliciteren.bpost.be^
+||hello.stbpost.be^
+||hello.trailblazers.com^
+||highered.franklincovey.com^
+||home.edm.globalsources.com^
+||horizoneurope.ukri.org^
+||hospitality.redbull.racing^
+||hptechnology.arrow.com^
+||hr.adp.ca^
+||hsa.wageworks.info^
+||htc.oaken.com^
+||hu-business.vodafone.com^
+||i-ready.curriculumassociates.com^
+||i.moneytransfer.travelex.com^
+||ibmtechnology.arrow.com^
+||ideas.nanawall.com^
+||ie-business.vodafone.com^
+||ie-mktg.vodafone.com^
+||ihub.dpworlduae.com^
+||image.go.aricent.com^
+||image.now.beyondtrust.info^
+||image.success.bluewolf.com^
+||imagenes.ubmmexico.com^
+||imagens.conteudo.algartelecom.com.br^
+||images.a.flukebiomedical.com^
+||images.aepinfo.com^
+||images.alliances.infor.com^
+||images.arcb.com^
+||images.assets.aapa.org^
+||images.at.datawatch.com^
+||images.b2bindia.samsung.com^
+||images.b2bmkt.samsung.com^
+||images.bbs.barclaycard.co.uk^
+||images.bio.ozyme.fr^
+||images.biz.blackberry.com^
+||images.blackhat.com^
+||images.bncontacto.fi.cr^
+||images.bounceback.chiesiusa.com^
+||images.business.fedex.com^
+||images.business.lenovo.com^
+||images.by.sensiolabs.com^
+||images.campaign.crmit.com^
+||images.campaign.reedexpo.at^
+||images.campaign.reedexpo.co.uk^
+||images.campaign.reedexpo.com^
+||images.campaign.reedexpo.de^
+||images.campaigns-qa.fidelity.com^
+||images.care.gundersenhealth.org^
+||images.care.ssmhealth.com^
+||images.care.tgh.org^
+||images.cargomarketing.email.aa.com^
+||images.chbusiness.samsung.com^
+||images.checkpoint.thomsonreuters.biz^
+||images.chef-lavan.tnuva.co.il^
+||images.cloud.cssus.com^
+||images.cloud.secure-24.com^
+||images.cloud.travelport.com^
+||images.cmbinsight.hsbc.com^
+||images.com.bouygues-es.com^
+||images.comm.pwc.com.br^
+||images.comms.cirium.com^
+||images.communication.carsales.com.au^
+||images.communication.maerskline.com^
+||images.communications.aldar.com^
+||images.community.aidshealth.org^
+||images.compasslearning.biz^
+||images.comunicaciones.prosegur.es^
+||images.connect.ais.arrow.com^
+||images.connect.cebglobal.com^
+||images.connect.globalservices.arrow.com^
+||images.connect.hpe.com^
+||images.connect.mandiant.com^
+||images.connect.o2.co.uk^
+||images.connect.omron.eu^
+||images.connect.veritivcorp.com^
+||images.connect2.bt.com^
+||images.connect2.cebglobal.com^
+||images.connect2.globalservices.bt.com^
+||images.constellation.quintiles.com^
+||images.contact.cigna.com^
+||images.contact.princess.com^
+||images.contact.staubli.com^
+||images.contacto.unis.edu.gt^
+||images.e.seagate.com^
+||images.e.skandia.pl^
+||images.e.tcichemicals.com^
+||images.e.transunion.com^
+||images.e.tycois.com^
+||images.e.westuc.com^
+||images.e.xtelligentmedia.com^
+||images.e2.aig.com^
+||images.e3.aig.com^
+||images.edgenuity.com^
+||images.edm.carnivalaustralia.com^
+||images.edm.cunardinoz.com.au^
+||images.edm.princesscruises.com.au^
+||images.edm.propertyguru.com^
+||images.edm.wlcl.com.au^
+||images.education.ifebp.org^
+||images.eloqua.fredhutch.org^
+||images.em.email-prudential.com^
+||images.em.groupon.com^
+||images.em.tdgarden.com^
+||images.email.air-worldwide.com^
+||images.email.fico.com^
+||images.emails.bokfinancial.com^
+||images.emarketing.hccs.edu^
+||images.emarketing.heat.com^
+||images.en25content.twilio.com^
+||images.energysolutions.evergy.com^
+||images.engage.brunswickgroup.com^
+||images.engage.cebglobal.com^
+||images.engage.elliemae.com^
+||images.engage.hamiltontel.com^
+||images.engage.hp.com^
+||images.engage.mettel.net^
+||images.engage.mims.com^
+||images.engage.nexperia.com^
+||images.engage.parexel.com^
+||images.engage.televerde.com^
+||images.engage.ubc.ca^
+||images.engageemea.jll.com^
+||images.enrollment.sunywcc.edu^
+||images.entreprise.com-bpifrance.fr^
+||images.eq.tm.intuit.com^
+||images.experience.eneco.be^
+||images.explore.behr.com^
+||images.explore.editionhotels.com^
+||images.fans.mlse.com^
+||images.fanservices.jaguars.com^
+||images.financial-risk-solutions.thomsonreuters.info^
+||images.flippengroup.com^
+||images.fmpracticemanagement.lexisnexis.com^
+||images.frbusiness.samsung.com^
+||images.gc.georgiancollege.ca^
+||images.gcom.cigna.com^
+||images.get.kareo.com^
+||images.global.thomsonreuters.com^
+||images.globalempcomm.visa.com^
+||images.globalscm.eaton.com^
+||images.go.aifs.com^
+||images.go.alightsolutions.com^
+||images.go.anixter.com^
+||images.go.attcenter.com^
+||images.go.bge.com^
+||images.go.bluejacketslink.com^
+||images.go.braintreepayments.com^
+||images.go.broadridge1.com^
+||images.go.bryantstratton.edu^
+||images.go.citimortgage.com^
+||images.go.consumer.vsp.com^
+||images.go.cummins.com^
+||images.go.dentsplysirona.com^
+||images.go.desjardinsassurancesgenerales.com^
+||images.go.diverseeducation.com^
+||images.go.elementfleet.com^
+||images.go.fastweb.it^
+||images.go.firsttechfed.com^
+||images.go.hulft.com^
+||images.go.ifund.com.hk^
+||images.go.impinj.com^
+||images.go.insidelpl.com^
+||images.go.jll.com^
+||images.go.kpmgisraelmail.co.il^
+||images.go.mathworks.com^
+||images.go.mongodb.com^
+||images.go.na.sage.com^
+||images.go.optotechnik.zeiss.com^
+||images.go.pelican.com^
+||images.go.siriusdecisions.com^
+||images.go.tennisfame.com^
+||images.go.thermofisher.com^
+||images.go.thompson.com^
+||images.go.trimarkusa.com^
+||images.go.vertivco.com^
+||images.go1.desjardinsassurancesgenerales.com^
+||images.go1.lapersonnelle.com^
+||images.grootzakelijk.kpn.com^
+||images.groupcommunications.royalmail.com^
+||images.guidance.choosemylo.com^
+||images.h.analog.com^
+||images.health.stlukes-stl.com^
+||images.hq.scorecardrewards.com^
+||images.i.mesosphere.com^
+||images.igdg.gardnerdenver.com^
+||images.ihs.com^
+||images.images.compagniedesalpes.fr^
+||images.ime.quintiles.com^
+||images.in.my1961.com^
+||images.info.acelatinamerica.com^
+||images.info.alibabacloud.com^
+||images.info.amexgbt.com^
+||images.info.aviationweek.com^
+||images.info.clubcorp.com^
+||images.info.coleparmer.com^
+||images.info.coopenae.fi.cr^
+||images.info.coopeservidores.fi.cr^
+||images.info.dfsco.com^
+||images.info.fticonsulting.com^
+||images.info.grenke.com^
+||images.info.grupovaughan.com^
+||images.info.informex.com^
+||images.info.innovateuk.org^
+||images.info.inttonagriculture.com^
+||images.link.pentonauto.com^
+||images.link.pentonaviation.com^
+||images.link.pentoncem.com^
+||images.link.pentonfinancialservices.com^
+||images.link.pentonfoodnews.com^
+||images.link.pentonlsm.com^
+||images.link.pentonnews.com^
+||images.livecreative.creativecircle.com^
+||images.logisticsnews.dbschenker.com^
+||images.loyalty.lindtusa.com^
+||images.lubricants.petro-canada.com^
+||images.luv.winsupplyinc.com^
+||images.m.onepeloton.com^
+||images.ma.kikusuiamerica.com^
+||images.mail-fellowesbrands.com^
+||images.mail.coloplast.com^
+||images.mail.dolce-gusto.com^
+||images.mail.tena.de^
+||images.mail01.learn.internationalsos.com^
+||images.mailaway.abritel.fr^
+||images.mailaway.fewo-direkt.de^
+||images.mailaway.homeaway.com^
+||images.mailaway.vrbo.com^
+||images.mailinfo.clarivate.com^
+||images.mailing.morningstar.com^
+||images.marketing-de.sage.com^
+||images.marketing.box.com^
+||images.marketing.bpp.com^
+||images.marketing.businessdirect.bt.com^
+||images.marketing.centerpointenergy.com^
+||images.marketing.deltaww.com^
+||images.marketing.emaarinfo.com^
+||images.marketing.habtoormotors.com^
+||images.marketing.invacare.com^
+||images.marketing.irobot.com^
+||images.marketing.kaweahhealth.org^
+||images.marketing.ncc.se^
+||images.marketing.richardsonrfpd.com^
+||images.marketing.selligent.com^
+||images.marketing.statistica.io^
+||images.marketing.strategic-i.com^
+||images.marketing.swhyhk.com^
+||images.marketing.zeusinc.com^
+||images.matservice.fcagroup.com^
+||images.max.max-finance.co.il^
+||images.mdtinternal.com^
+||images.medlem.naf.no^
+||images.medtronicdiabetes.com^
+||images.mkt.acindar.com.ar^
+||images.mkt.movida.com.br^
+||images.mkt.nectarconsulting.com.br^
+||images.mkt.zoominfo.com^
+||images.mkt.zte.com.cn^
+||images.mktg.dynabook.com^
+||images.mktgassets.symantec.com^
+||images.mm.eulerhermes.com^
+||images.moresand.co.uk^
+||images.myhealthyfinances.com^
+||images.myhome.modernize.com^
+||images.na.agcocorp.com^
+||images.na.sage.com^
+||images.nasdaqtech.nasdaq.com^
+||images.nationalproduction.wgbh.org^
+||images.news.auchan.lu^
+||images.news.extrahop.com^
+||images.news.lavoro.gov.it^
+||images.news.meraas.com^
+||images.news.panasonic.asia^
+||images.news.psjhealth.org^
+||images.news.thunderinsider.com^
+||images.news.wiley.com^
+||images.newsletter.hach.com.cn^
+||images.newsletter.larksuite.com^
+||images.newsletter.rewe-group.at^
+||images.notice.wageworks.com^
+||images.noticias.clarin.com^
+||images.notifications.aigdirect.com^
+||images.novedades.fibercorp.com.ar^
+||images.nwinsurance.pemco.com^
+||images.offers.princesscruises.co.uk^
+||images.online.bankofjordan.com.jo^
+||images.online.chancellors.co.uk^
+||images.online.mt.com^
+||images.ops.mailbpost.be^
+||images.oracle.netsuite.com^
+||images.outreach.pewtrusts.org^
+||images.p.smflc.jp^
+||images.partner.fisglobal.com^
+||images.partnersupport.samsung.com^
+||images.performance.volvotrucks.com^
+||images.perspectives.jll.com^
+||images.portal.keppelelectric.com^
+||images.pr.thomsonreuters.com^
+||images.premier.email.shutterstock.com^
+||images.premiumdr.jp^
+||images.pride.kenya-airways.com^
+||images.pro.compagniedesalpes.fr^
+||images.programme.mavieclaire.com^
+||images.promo.mopar.eu^
+||images.promotions.bankofguam.com^
+||images.protect-us.eset.com^
+||images.publicidad.cajalosandes.cl^
+||images.publishing.wiley.com^
+||images.purl.mercedes-benz.com^
+||images.query.adelaide.edu.au^
+||images.read.aspiresys.com^
+||images.register.deloittece.com^
+||images.register.lighthouse-media.com^
+||images.reldirect.lenovo.com^
+||images.respond.macktrucks.com^
+||images.respond.overheaddoor.com^
+||images.respons.aftenposten.no^
+||images.respons.schibsteom^
+||images.tableau.com^
+||images.tableausoftware.com^
+||images.updates.hbonow.com^
+||images.v.cyberintel.verint.com^
+||images.verizonconnect.com^
+||images.voyage.apl.com^
+||images.web.pirelli.com^
+||images.web.roberthalf.com^
+||images.workforce.equifax.com^
+||images2.verizonconnect.com^
+||images3.verizonconnect.com^
+||imeetcentral.pgi.com^
+||img.e.sigsauer.com^
+||img.exb.emaildwtc.com^
+||img.go.coface.com^
+||img.hrm.groups.be^
+||img.learn.abreon.com^
+||img.link.cabinetry.com^
+||img.n.nasdaq.com^
+||img.newsletter.mazda.co.jp^
+||img.response.digicert.com^
+||img.website-security.symantec.com^
+||imgict.dwtcmarketing.com^
+||imginfo.insource.co.jp^
+||imgmail.mediasetpremium.it^
+||immunocap.thermofisher.com^
+||impact.go.economist.com^
+||in-business.vodafone.com^
+||in-mktg.vodafone.com^
+||indoeasia.edm.globalsources.com^
+||industry.tafensw.edu.au^
+||info.abbotsfordcentre.ca^
+||info.academynet.com^
+||info.adp.com^
+||info.aldautomotive.com^
+||info.aldcarmarket.com^
+||info.americas.mizuhogroup.com^
+||info.amperecomputing.com^
+||info.arclogics.com^
+||info.asce.org^
+||info.attcenter.com^
+||info.authorize.net^
+||info.avigilon.com^
+||info.banrural.com.gt^
+||info.bbvaautorenting.es^
+||info.bendigotafe.edu.au^
+||info.bouygues-es.com^
+||info.box.net^
+||info.cengage.com^
+||info.clarivate.com^
+||info.clarivate.jp^
+||info.climatepledgearena.com^
+||info.compasslearning.com^
+||info.compucom.com^
+||info.cybersource.com^
+||info.dailyfx.com^
+||info.deutscher-ausbildungsleiterkongress.de^
+||info.dfinsolutions.com^
+||info.dowjones.com^
+||info.e.royalmail.com^
+||info.edb.gov.sg^
+||info.eedinc.com^
+||info.elliemae.com^
+||info.entega.de^
+||info.extrahop.com^
+||info.fortrea.com^
+||info.frbservices.org^
+||info.fxcm-chinese.com^
+||info.go.lorainccc.edu^
+||info.hila-leumit.co.il^
+||info.hmisrael.co.il^
+||info.igloosoftware.com^
+||info.insideview.com^
+||info.interface.com^
+||info.investa.com.au^
+||info.iowaeventscenter.com^
+||info.kace.com^
+||info.kangan.edu.au^
+||info.kita-aktuell.de^
+||info.landcentral.com^
+||info.lansa.com^
+||info.legal-solutions.thomsonreuters.co.uk^
+||info.lexisnexis.co.in^
+||info.lexisnexis.com.hk^
+||info.lexisnexis.com.my^
+||info.lexisnexis.com.sg^
+||info.liacourascenter.com^
+||info.lloydslistintelligence.com^
+||info.macktrucks.com^
+||info.marketingcube.com.au^
+||info.mdsol.com^
+||info.metronet.com^
+||info.metronetbusiness.com^
+||info.metronetinc.com^
+||info.mouser.com^
+||info.multiburo.com^
+||info.neg.co.jp^
+||info.netgear.be^
+||info.netgear.co.uk^
+||info.netgear.de^
+||info.nhlseattle.com^
+||info.o2business.de^
+||info.ohlogistics.com^
+||info.pbs.org^
+||info.perkinelmer.com.cn^
+||info.perkinelmer.com^
+||info.philadelphiaunion.com^
+||info.phinmaproperties.com^
+||info.protiviti.co.kr^
+||info.quova.com^
+||info.refinitiv.com^
+||info.reutersagency.com^
+||info.revvity.com^
+||info.sanantoniofc.com^
+||info.saverglass.com^
+||info.scene7.com^
+||info.sec.rakuten.com.hk^
+||info.shavve.co.il^
+||info.spurs.com^
+||info.sunsentinelmediagroup.com^
+||info.thecolonialcenter.com^
+||info.thermo.com^
+||info.thermofisher.com^
+||info.thermoscientific.com^
+||info.thunderhead.com^
+||info.transcontinental-printing.com^
+||info.ubmamevents.com^
+||info.vaadsheli.co.il^
+||info.verint.com^
+||info.versicherungspraxis24.de^
+||info.verwaltungspraxis24.de^
+||info.viant.com^
+||info.vismaraet.nl^
+||info.wolterskluwer.de^
+||info.workforceorchestrator.pwc.com^
+||info10.4thoughtmarketing.com^
+||info2.thermoscientific.com^
+||info3.thermofisher.com^
+||inform.janssenpro.eu^
+||information.clubcorp.com^
+||information.skillsoft.com^
+||ingredients.firmenich.com^
+||innovation.m5.net^
+||inqueritos.cp.pt^
+||ins.leavitt.com^
+||ins.wolterskluwerfs.com^
+||insight.aon.com^
+||insight.eurofinsexpertservices.fi^
+||insight.gbm.hsbc.com^
+||insight.leads360.com^
+||insight.optum.com^
+||insight.velocify.com^
+||insights.53.com^
+||insights.aiu.edu.au^
+||insights.atradiuscollections.com^
+||insights.att.com^
+||insights.golubcapital.com^
+||insights.harvardbusiness.org^
+||insights.networks.global.fujitsu.com^
+||insights.nexansdatacenter.com^
+||insightseries.redbull.racing^
+||insurance.alliant.com^
+||insurance.leads360.com^
+||insurance.velocify.com^
+||intel-trk.informa.com^
+||intel-trk.lloydslistintelligence.com^
+||interact.crmtechnologies.com^
+||interest.truvenhealth.com^
+||internal.hcltech.com^
+||internalcomms.dbschenker.com^
+||international.edc.ca^
+||investments.aberdeenstandard.com^
+||investors.firmenich.com^
+||iot-business.vodafone.com^
+||iot.informaengage.com^
+||iready.curriculumassociates.com^
+||irmsolutions.choicepoint.com^
+||isac.thermofisher.com^
+||isbworld.aon.com^
+||it-business.vodafone.com^
+||itt.enterprises.proximus.com^
+||ixia-elq.keysight.com^
+||ixia-lp.keysight.com^
+||ja-jp.siemensplmevents.com^
+||japan.secureforms.partnermcafee.com^
+||jhr.jacksonhealthcare.com^
+||jlfiber.advancedtech.com^
+||jogtestdrive.jeep.com^
+||join.informa-events.com^
+||join.stratfor.com^
+||join02.informamarkets.com^
+||journey.cisco.com^
+||jponmlkj.carte-gr.total.fr^
+||jubileo-ppb.carte-gr.total.fr^
+||justsayyes.infor.com^
+||kampanja.bhtelecom.ba^
+||kampanjer.yxvisa.no^
+||klmcorporate.americanexpress.nl^
+||know.wolterskluwerlr.com^
+||la.idgenterprise.com^
+||labs.verticurl.com^
+||lakerspreferences.gleague.nba.com^
+||lakerspreferences.nba.com^
+||landing-activemeetings.wolterskluwer.com^
+||landing-annotext.wolterskluwer.com^
+||landing-dictnow.wolterskluwer.com^
+||landing-effacts.wolterskluwer.com^
+||landing-kleos.wolterskluwer.com^
+||landing-legisway.wolterskluwer.com^
+||landing-smartdocument.wolterskluwer.com^
+||landing-teamdocs.wolterskluwer.com^
+||landing-trimahn.wolterskluwer.com^
+||landing-trinotar.wolterskluwer.com^
+||landing-winra.wolterskluwer.com^
+||landing.computershare.com^
+||landing.e.columbuscrew.com^
+||landing.georgeson.com^
+||landing.kccllc.com^
+||landing.kwm.com^
+||landing.lgensol.com^
+||landing.newyorkjets.com^
+||landing.wolterskluwer.hu^
+||landingpages.csustudycentres.edu.au^
+||landings.omegacrmconsulting.com^
+||lantern.connect.o2.co.uk^
+||lantern.fortinet.com^
+||lantern7.wealth.mandg.com^
+||lantern8.wealth.mandg.com^
+||lantern9.mandg.com^
+||latam.thomsonreuters.com^
+||law.bppeloqua.com^
+||leadmanagement.leads360.com^
+||leadmanagement.velocify.com^
+||learn.aiu.edu.au^
+||learn.amllp.com^
+||learn.amplypower.com^
+||learn.anthology.com^
+||learn.armaninollp.com^
+||learn.creditacceptance.com^
+||learn.grassicpas.com^
+||learn.houzz.com^
+||learn.huthwaite.com^
+||learn.jacksonhewitt.com^
+||learn.mvpindex.com^
+||learn.ndtco.com^
+||learn.oviahealth.com^
+||learn.panasonic.de^
+||learn.trapac.com^
+||learn.uwindsor.ca^
+||learn.wolterskluwerlb.com^
+||learn.wolterskluwerlr.com^
+||learn.wow.wowforbusiness.com^
+||learning.hmhco.com^
+||learnmore.protiviti.com^
+||legalhold.ediscovery.com^
+||lets.go.mcknightsnetwork.com^
+||lets.go.prweekus.com^
+||lfn.lfg.com^
+||library.acspubs.org^
+||library.daptiv.com^
+||lifestyle.tradeshow.globalsources.com^
+||lineside.networkrail.co.uk^
+||link.bankofscotland.co.uk^
+||link.global.amd.com^
+||link.halifax.co.uk^
+||link.lloydsbank.com^
+||link.mbna.co.uk^
+||links.banking.scottishwidows.co.uk^
+||links.blackhorse.co.uk^
+||links.businessinsurance.bankofscotland.co.uk^
+||links.commercialemails.amcplc.com^
+||links.commercialemails.bankofscotland.co.uk^
+||links.commercialemails.blackhorse.co.uk^
+||links.commercialemails.halifax.co.uk^
+||links.commercialemails.lexautolease.co.uk^
+||links.commercialemails.lloydsbank.com^
+||links.e.response.mayoclinic.org^
+||links.email.bm-solutions.co.uk^
+||links.email.hx-intermediaries.co.uk^
+||links.emails-sharedealing.co.uk^
+||links.emails.birminghammidshires.co.uk^
+||links.global.protiviti.com^
+||links.go.shoretel.com^
+||links.insurance.lloydsbank.com^
+||links.lexautolease.co.uk^
+||links.news.riverview.org^
+||links.npsemails.mbna.co.uk^
+||links.qumu.com^
+||live.alljobs.co.il^
+||live.polycom.com^
+||live.techit.co.il^
+||log.cognex.com^
+||logistics.coyote.com^
+||lp-eq.mitsuichemicals.com^
+||lp-info.arval.com^
+||lp.adp.com^
+||lp.apac.business.samsung.com^
+||lp.befly.com.br^
+||lp.capella.edu^
+||lp.deloittecomunicacao.com.br^
+||lp.dynabook.com^
+||lp.email-particuliers.engie.fr^
+||lp.flytour.com.br^
+||lp.go.toyobo.co.jp^
+||lp.info.aspirus.org^
+||lp.internalcomms.exclusive-networks.com^
+||lp.jurion.de^
+||lp.leadingauthorities.com^
+||lp.marketing.engie-homeservices.fr^
+||lp.mkt-email.samsungsds.com^
+||lp.nexity.fr^
+||lp.oralia.fr^
+||lp.pro.engie.fr^
+||lp.response.deloitte.com^
+||lp.sekisuikasei.com^
+||lp.smartbusiness.samsung.com^
+||lp.solutions.cegos.it^
+||lp.sophos.com^
+||lp.tfd-corp.co.jp^
+||lp3.dentsplysirona.com^
+||lps-info.arval.com^
+||lrbelgium.wolterskluwer.com^
+||lrgermany.wolterskluwer.com^
+||lrhungary.wolterskluwer.com^
+||lritaly.wolterskluwer.com^
+||lrnetherlands.wolterskluwer.com^
+||lrpoland.wolterskluwer.com^
+||lrslovakia.wolterskluwer.com^
+||ltam2.secureforms.mcafee.com^
+||lxlx6p7y.arrow.com^
+||m.bumrungrad1378.com^
+||m.enerpac.com^
+||m.mywd.com^
+||ma.hitachi-systems.com^
+||ma.hmhco.com^
+||mail.carte-gr.total.fr^
+||mail.dolce-gusto.at^
+||mail.dolce-gusto.be^
+||mail.dolce-gusto.bg^
+||mail.dolce-gusto.ca^
+||mail.dolce-gusto.cl^
+||mail.dolce-gusto.co.cr^
+||mail.dolce-gusto.co.il^
+||mail.dolce-gusto.co.kr^
+||mail.dolce-gusto.co.uk^
+||mail.dolce-gusto.co.za^
+||mail.dolce-gusto.com.ar^
+||mail.dolce-gusto.com.au^
+||mail.dolce-gusto.com.my^
+||mail.dolce-gusto.com.sg^
+||mail.dolce-gusto.com.tw^
+||mail.dolce-gusto.cz^
+||mail.hsm.co.uk^
+||making-future.afry.com^
+||marketing-ap.mmc.co.jp^
+||marketing-form.fiat.com^
+||marketing-tracking.thomsonreuters.com^
+||marketing.adaptiveplanning.com^
+||marketing.alkhaleej.com.sa^
+||marketing.amadeus.com^
+||marketing.aviationweek.com^
+||marketing.bajajelectricals.com^
+||marketing.business.vodafone.co.uk^
+||marketing.cigna.com^
+||marketing.clippergifts.at^
+||marketing.clippergifts.co.uk^
+||marketing.colman.ac.il^
+||marketing.enterprisedb.com^
+||marketing.euromaster.de^
+||marketing.global360.com^
+||marketing.golubcapital.com^
+||marketing.ianywhere.com^
+||marketing.igopost.no^
+||marketing.igopost.se^
+||marketing.issmarketintelligence.com^
+||marketing.naf.no^
+||marketing.netafim.cn^
+||marketing.netafim.com.br^
+||marketing.netafim.com.mx^
+||marketing.nova.gr^
+||marketing.omegahms.com^
+||marketing.pelotongroup.com^
+||marketing.promotiv.se^
+||marketing.promotivnordics.dk^
+||marketing.royalalaskanmovers.com^
+||marketing.salva.es^
+||marketing.spcapitaliq.com^
+||marketing.tandemdiabetes.com^
+||marketing.test.insead.edu^
+||marketing.uwmedicine.org^
+||marketing1.yealink.com^
+||marketingb2b.euromaster-neumaticos.es^
+||marketingpro.euromaster.fr^
+||marketreports.autovistagroup.com^
+||marketresearch.jacksonhealthcare.com^
+||markkinointi.igopost.fi^
+||mat.lgdisplay.com^
+||matrixsolutions.strategic-i.com^
+||me.coact.org.au^
+||media.redbull.racing^
+||meet.intercall.com^
+||meet.westuc.com^
+||meeting.nuance.com^
+||meetings.gaylordhotels.com^
+||memberships.clubcorp.com^
+||memelq.acs.org^
+||metrics-now.experian.com^
+||metrics.mhi.com^
+||mexico.balluff.com^
+||micro.workplaceinvesting.fidelity.com^
+||microsite.standardandpoors.com^
+||mirec.ubmmexico.com^
+||mkt-tracking.cloudmargin.com^
+||mkt.consultdss.com^
+||mkt.unipega.com^
+||mktg.forrester.com^
+||mlc.martela.se^
+||mobile-electronics.edm.globalsources.com^
+||mobile.blackboard.com^
+||mobile.tradeshow.globalsources.com^
+||mobile.vmware.com^
+||moodlerooms.blackboard.com^
+||mortgage.equifax.com^
+||mortgage.inform.equifax.com^
+||mortgage.leads360.com^
+||mortgage.velocify.com^
+||motm.adp.ca^
+||move.azets.com^
+||move.azets.dk^
+||move.azets.fi^
+||move.azets.no^
+||move.azets.se^
+||mroprospector.aviationweek.com^
+||ms.informaengage.com^
+||ms1.morganstanley.com^
+||msa-emea.secureforms.partnermcafee.com^
+||msa-uki.secureforms.partnermcafee.com^
+||mt-business.vodafone.com^
+||mx.carte-gr.total.fr^
+||mx.mywd.com^
+||my.catfinancial.com^
+||my.iso.com^
+||my.kpmg.ca^
+||my.macu.com^
+||my.totaljobs.com^
+||my.verisk.com^
+||my.xactware.co.uk^
+||my.xactware.com^
+||myfuture.futureelectronics.com^
+||myhotelbook.pegs.com^
+||myinfo.borland.com^
+||myprofile.panasonic.eu^
+||myprofile.technics.eu^
+||mysite.webroot.com^
+||mystery.vfmleonardo.com^
+||mywebpage.ni.com^
+||nationalaccounts.adp.com^
+||nd.nasdaqtech.nasdaq.com^
+||ndi.nuance.com^
+||ned.themarketingscience.com^
+||networkingexchange.att.com^
+||networkprotection.mcafee.com^
+||networks.balluff.com^
+||news.cannesyachtingfestival.com^
+||news.communications-rmngp.fr^
+||news.crmtechnologies.com^
+||news.equipbaie.com^
+||news.fiac.com^
+||news.iftm.fr^
+||news.inttra.com^
+||news.mazars.nl^
+||news.promo.fcagroup.com^
+||news.reedexpo.com.cn^
+||news.reedexpo.fr^
+||news.salon-aps.com^
+||news.sitl.eu^
+||news.supplychain-event.com^
+||news2.secureforms.mcafee.com^
+||newsflash.elliemae.com^
+||newsletter.standardandpoors.com^
+||newsletter.teletech.com^
+||newsletters.bancsabadell.com^
+||nidays.austria.ni.com^
+||nidays.suisse.ni.com^
+||nidays.switzerland.ni.com^
+||nl-nl.coloplastcare.com^
+||nl.aon.com^
+||nonprofit.aon.com^
+||nordics.atradius.com^
+||notices.regis.edu^
+||notificaciones.conduce-seguro.es^
+||notify.eset.com^
+||novedades.telecomfibercorp.com.ar^
+||now.fintechfutures.com^
+||now.wealthmanagement.com^
+||nurse.fastaff.com^
+||nurse.trustaff.com^
+||nyhed.danskespil.dk^
+||nzbusiness.vodafone.co.nz^
+||occidente.ubmmexico.com^
+||ocpi.americanexpress.ca^
+||offer.coface.com^
+||offer.lyreco.com^
+||offer.omniture.com^
+||offer.sj1.omniture.com^
+||offer.sjo.omniture.com^
+||offers.desertschools.org^
+||oiat.dow.com^
+||oilandgas.opentext.com^
+||oj.brothercloud.com^
+||old.globalservices.arrow.com^
+||one-source.tax.thomsonreuters.com^
+||onecloud.avaya.com^
+||online-mt-com-455208869.p06.elqsandbox.com^
+||online.cphi.cn^
+||online.eaglepi.com^
+||online.expolifestyle.com^
+||online.hausinvest.de^
+||online.hsrexpo.com^
+||online.jtiadvance.co.uk^
+||online.rwdls.com^
+||online.rwdstco.com^
+||online.sharjahart.org^
+||onmlkjiion.carte-gr.total.fr^
+||optifiantsion.carte-gr.total.fr^
+||optimize.mcafee.com^
+||optionen.hager.de^
+||oracle-netsuite-com-796203850.p04.elqsandbox.com^
+||oracle.marketingcube.com.au^
+||oracletechnology.arrow.com^
+||organizations.stratfor.com^
+||origin.www.images.2.forms.healthcare.philips.com^
+||our.sunshinecoast.qld.gov.au^
+||outsource.sitel.com^
+||owp-hk.americanexpress.com^
+||owp-sg-prop.americanexpress.com^
+||owp-tw.americanexpress.com^
+||p01.sc.origins.en25.com^
+||p03.sc.origins.en25.com^
+||p04.sc.origins.en25.com^
+||p06.sc.origins.en25.com^
+||pagename.care.ummhealth.org^
+||pages.arabiancentres.com^
+||pages.att.com^
+||pages.bayer.com^
+||pages.bioglan.com.au^
+||pages.cenomicenters.com^
+||pages.dubaifitnesschallenge.com^
+||pages.erepublic.com^
+||pages.expowest.com^
+||pages.feedback.ignite.gleague.nba.com^
+||pages.feedback.vegasgoldenknights.com^
+||pages.health365.com.au^
+||pages.indigovision.com^
+||pages.info.exclusive-networks.com^
+||pages.intelligence.informa.com^
+||pages.kwm.com^
+||pages.ledger.com^
+||pages.lloydslist.com^
+||pages.lloydslistintelligence.com^
+||pages.magellangroup.com.au^
+||pages.maritimeintelligence.informa.com^
+||pages.mktg-upfield.com^
+||pages.mongodb.com^
+||pages.naturopathica.com.au^
+||pages.nbjsummit.com^
+||pages.omdia.informa.com^
+||pages.pentonmktgsvcs.com^
+||pages.pharmaintelligence.informa.com^
+||pages.primalpictures.com^
+||pages.reply.dpacnc.com^
+||pages.response.terex.com^
+||pages.titanmachinery.com^
+||pages.usviolifeprofessional.mktg-upfield.com^
+||pages.wardsintelligence.informa.com^
+||partenaireslld.temsys.fr^
+||partnermktg.symantec.com^
+||partners.avaya.com^
+||partners.redbull.racing^
+||partners.singularlogic.eu^
+||partnersuccess.cisco.com^
+||partnersuccessmetrics.cisco.com^
+||partnerwith.us.streetbond.com^
+||pci.aon.com^
+||pcm.symantec.com^
+||pd.bppeloqua.com^
+||personal.sonicwall.com^
+||pet-recycling.husky.ca^
+||pgs.aviationweek.com^
+||pgs.centreforaviation.com^
+||pgs.corporatetravelcommunity.com^
+||phadia.thermo.com^
+||phadia.thermofisher.com^
+||phcbi-solution.phchd.com^
+||picis.optum.com^
+||pkg.balluff.com^
+||playbook.convio.com^
+||plbusiness.samsung.com^
+||plusavecmoins.adp.ca^
+||pm.eu.viatrisconnect.com^
+||pm.eu.viatrisconnect.de^
+||pm.eu.viatrisconnect.it^
+||podbooth.martela.com^
+||podbooth.martela.no^
+||podbooth.martela.se^
+||pop.dmglobal.com^
+||portal.krollontrack.co.uk^
+||pre-employmentservices.adp.com^
+||preference.nuance.com^
+||preferencecenter.fticonsulting.com^
+||preferencecentre.americanexpress.co.uk^
+||preferencecentre.americanexpress.es^
+||preferences.acspubs.org^
+||preferences.bowerswilkins.com^
+||preferences.darglobal.co.uk^
+||preferences.definitivetechnology.com^
+||preferences.denon.com^
+||preferences.dtlphx.net^
+||preferences.heatexperience.com^
+||preferences.la-lakers.com^
+||preferences.lakersgaming.com^
+||preferences.marantz.com^
+||preferences.oakstreethealth.com^
+||preferences.polkaudio.com^
+||premierbuyer.edm.globalsources.com^
+||preview.fi-institutional.com.au^
+||primary.hasegawa.jp^
+||pro.stormwindstudios.com^
+||process.global360.com^
+||procurement.cipscomms.org^
+||prod.tracking.refinitiv.com^
+||products.forddirectdealers.com^
+||profiling.afry.com^
+||profiling.eurofins.fi^
+||profiling.idbbn.com^
+||profiling.martela.com^
+||profiling.normet.com^
+||profiling.outokumpu.com^
+||profiling.plannja.com^
+||profiling.ruukki.com^
+||profit.edc.ca^
+||programs.mellanox.com^
+||promo.alfaromeo.it^
+||promo.batesville.com^
+||promo.fiat.com^
+||promos.thermofisher.com^
+||promos.thermoscientific.com^
+||promotion.lginnotek.com^
+||promotion.lindt.az^
+||promotion.lindt.cr^
+||promotion.lindt.gt^
+||promotion.lindt.pa^
+||promotion.sedo.com^
+||promotions.centex.com^
+||promotions.eq.delwebb.com^
+||promotions.hot.net.il^
+||promotions.kangan.edu.au^
+||promotions.thermofisher.com^
+||property.aon.com^
+||pt.balluff.com^
+||publicidad.daviviendaintl.com^
+||pubstr.acs.org^
+||pubstr.acspubs.org^
+||pubstr.chemrxiv.org^
+||purple.mongodb.com^
+||q.nasdaq.com^
+||qago.qiagen.com^
+||r2r.utas.edu.au^
+||radio.moodybible.org^
+||ratings-events.standardandpoors.com^
+||reach.ironmountain.com^
+||ready.curriculumassociates.com^
+||ready.nerdery.com^
+||realbusiness.americanexpress.com^
+||realeducation.kangan.edu.au^
+||realsolutions.americanexpress.fr^
+||realsolutions.americanexpress.it^
+||realsolutions.americanexpress.se^
+||recruit.go.apprenticeshipcommunity.com.au^
+||recruiting.dukekunshan.edu.cn^
+||redwingforbusiness.redwingsafety.com^
+||referafriend.box.com^
+||reg.enterpriseconnect.com^
+||reg.gdconf.com^
+||reg.informationweek.com^
+||reg.insecurity.com^
+||reg.nojitter.com^
+||reg.techweb.com^
+||reg.vrdconf.com^
+||reg.workspace-connect.com^
+||reg.xrdconf.com^
+||register-implants.dentsplysirona.com^
+||register.denovo-us.com^
+||register.dnv.com^
+||register.harley-davidson.com^
+||register.markit.com^
+||register.purina.com^
+||registration.promatis.com^
+||registro.omegacrmconsulting.com^
+||regmdr.pref.ims.dialog-direct.com^
+||relations.extrahop.com^
+||relyonit.americanexpress.co.uk^
+||rent.mgrc.com^
+||renting.aldautomotive.es^
+||request.verisign.com^
+||research.dshb.biology.uiowa.edu^
+||research.leads360.com^
+||research.velocify.com^
+||resources-it.opentext.com^
+||resources.hermanmiller.com^
+||resources.l1id.com^
+||resources.mcgladrey.com^
+||resources.opentext.com^
+||resources.opentext.de^
+||resources.opentext.es^
+||resources.opentext.fr^
+||resources.rockwellautomation.com^
+||resources.thermofisher.com^
+||resources.xo.com^
+||resources2.secureforms.mcafee.com^
+||respond.firstdata.com^
+||respons.intern.schibsted.no^
+||response.abrdn.com^
+||response.accuitysolutions.com^
+||response.approva.net^
+||response.arizonacoyotes.com^
+||response.australian.physio^
+||response.b2b.bea.com^
+||response.bea.com^
+||response.careerstructure.com^
+||response.caterer.com^
+||response.cpp.com^
+||response.cwjobs.co.uk^
+||response.deloittedigital.com^
+||response.desjardins.com^
+||response.economistevents.com^
+||response.eiuperspectives.com^
+||response.ez-dock.com^
+||response.fastaff.com^
+||response.hospital.fastaff.com^
+||response.idt.com^
+||response.informamarketsasia.com^
+||response.ingrammicrocloud.com^
+||response.kadient.com^
+||response.leadingauthorities.com^
+||response.littletikescommercial.com^
+||response.miracle-recreation.com^
+||response.nofault.com^
+||response.nxp.com^
+||response.operative.com^
+||response.optimummedical.co.uk^
+||response.playpower.com^
+||response.playworld.com^
+||response.polycom.com^
+||response.quest.com^
+||response.retailchoice.com^
+||response.reversepartner.genworth.com^
+||response.sagaftra.org^
+||response.sonosite.com^
+||response.stepstone.com^
+||response.tandberg.nl^
+||response.totaljobs.com^
+||response.travelex.co.jp^
+||response.turnkeyvr.com^
+||response.usnursing.com^
+||response.xactware.com^
+||responsed.abrdn.com^
+||responsemp.civica.co.uk^
+||responsemp.civica.com^
+||responses.ingrammicro.com^
+||responsesite.dsm-firmenich.com^
+||rethink.adp.com^
+||retirement.aonunited.com^
+||retirement.newyorklifeannuities.com^
+||review.teradata.com^
+||rh.adp.ca^
+||rh.grupoocq.com.br^
+||rh.ocq.com.br^
+||rh.vettaquimica.com.br^
+||rims.aig.com^
+||rs.adpinfo.com^
+||rsvp.heatexperience.com^
+||ru-ru.siemensplmevents.com^
+||rus.definingnetworks.com^
+||s.clientes.construrama.com^
+||s.corporate.cemex.com^
+||s.sick.com^
+||s1133198723.sc.origins.en25.com^
+||s1325061471.sc.origins.en25.com^
+||s138663192.aon.com^
+||s1782711468.sc.origins.en25.com^
+||s1885709864.sc.origins.en25.com^
+||s2013560044.sc.origins.en25.com^
+||s205119.aon.com^
+||s2448.sc.origins.en25.com^
+||s2564.sc.origins.en25.com^
+||s362693299.aon.ca^
+||s362693299.aon.com^
+||s46849916.sc.origins.en25.com^
+||s615419487.sc.origins.en25.com^
+||s861531437.sc.origins.en25.com^
+||safety.west.com^
+||sales.hot.net.il^
+||sales.strategic-i.com^
+||saleslists.inform.equifax.com^
+||satracking.cubiq.com^
+||satracking.finning.com^
+||save.salary.com.au^
+||save.smartsalary.com.au^
+||savings.adp.ca^
+||say.hello.navan.com^
+||say.hello.tripactions.com^
+||schwacke.autovistagroup.com^
+||se-se.siemensplmevents.com^
+||seao.business.samsung.com^
+||sec.wolterskluwerfs.com^
+||secure-anzgo.arrow.com^
+||secure-e.healthiq.com^
+||secure-eugo.arrow.com^
+||secure.adp.ca^
+||secure.adpinfo.com^
+||secure.aifs.com^
+||secure.constellation.iqvia.com^
+||secure.desjardinsassurancesgenerales.com^
+||secure.desjardinsgeneralinsurance.com^
+||secure.ec4u.com^
+||secure.fortinet.com^
+||secure.immixgroup.com^
+||secure.info.awlgrip.com^
+||secure.info.domo.com^
+||secure.info.zetes.com^
+||secure.lapersonnelle.com^
+||secure.laurelsprings.com^
+||secure.mdtinternal.medtronic.com^
+||secure.medtroniclearn.com^
+||secure.mycalcas.com^
+||secure.nikkol.co.jp^
+||secure.omegacrmconsulting.com^
+||secure.orthology.com^
+||secure.sonosite.com^
+||secure.thepersonal.com^
+||secure.valleymed.org^
+||secure.visualsonics.com^
+||secure1.desjardinsassurancesgenerales.com^
+||secure1.desjardinsgeneralinsurance.com^
+||secure1.lapersonnelle.com^
+||secure1.thepersonal.com^
+||secure3.centralparknyc.org^
+||securecookies.dustin.dk^
+||securecookies.dustin.fi^
+||securecookies.dustin.nl^
+||securecookies.dustin.no^
+||securecookies.dustin.se^
+||securecookies.dustinhome.dk^
+||securecookies.dustinhome.fi^
+||securecookies.dustinhome.nl^
+||securecookies.dustinhome.no^
+||securecookies.dustinhome.se^
+||securecookiesdustininfo.dustin.com^
+||securecookiesdustininfo.dustin.dk^
+||securecookiesdustininfo.dustin.fi^
+||securecookiesdustininfo.dustin.nl^
+||securecookiesdustininfo.dustin.no^
+||securecookiesdustininfo.dustin.se^
+||securecookiesdustininfo.dustinhome.dk^
+||securecookiesdustininfo.dustinhome.fi^
+||securecookiesdustininfo.dustinhome.nl^
+||securecookiesdustininfo.dustinhome.no^
+||securecookiesdustininfo.dustinhome.se^
+||secured.avon-news.com^
+||secured.online.avon.com^
+||securedigital.pru.mandg.com^
+||securedigital.wealth.mandg.com^
+||secureform.adaptris.com^
+||secureform.farmplan.co.uk^
+||secureform.proagrica.com^
+||secureforms.f4f.com^
+||secureforms.icis.com^
+||secureforms.xperthr.com^
+||secureinfo.edc.ca^
+||securetracking.eaton.com^
+||securetracking.golfpride.com^
+||securityintelligence.verint.com^
+||seek.uwa.edu.au^
+||sendmoney.americanexpress.co.uk^
+||sensors.balluff.com^
+||sentiment.icis.com^
+||service.athlon.com^
+||service.bechtle.com^
+||services.bdc.ca^
+||services.blackboard.com^
+||services.cairn.info^
+||services.eclerx.com^
+||services.edc.ca^
+||services.princes-trust.org.uk^
+||servicing.business.hsbc.com^
+||sgforex.americanexpress.com^
+||sgsb.aba.com^
+||show.decorex.com^
+||signup.vovici.com^
+||simple.avaya.com^
+||simpletopay.americanexpress.co.uk^
+||simpletopay.americanexpress.com.au^
+||site.att.com^
+||site.connect.mydrreddys.com^
+||site.infosysbpm.com^
+||site.tdk.com^
+||sites.campaignmgr.cisco.com^
+||sites.groo.co.il^
+||smallbusiness.adpinfo.com^
+||smart.boxtone.com^
+||smb-cashback.alcatel-lucent.com.au^
+||smkt.edm.globalsources.com^
+||sms.cf.labanquepostale.fr^
+||smtpauth.carte-gr.total.fr^
+||smtpmail.carte-gr.total.fr^
+||sns2.secureforms.mcafee.com^
+||social.forddirectdealers.com^
+||social.insidelpl.com^
+||solar.sunpowercorp.com^
+||solicitud.pacifico.com.pe^
+||solucionesreales.americanexpress.es^
+||solution.agc-chemicals.com^
+||solution.resonac.com^
+||solutions.adp.com^
+||solutions.arcb.com^
+||solutions.desertfinancial.com^
+||solutions.equifax.co.uk^
+||solutions.lseg.com^
+||solutions.nuance.com^
+||solutions.oppd.com^
+||solutions.redwingshoes.com^
+||solutions.refinitiv.cn^
+||solutions.refinitiv.com^
+||solutions.risk.lexisnexis.co.uk^
+||solutions.risk.lexisnexis.com^
+||solutions.saashr.com^
+||solutions.sabic.com^
+||solutions.sitech-wc.ca^
+||solutions.staubli.com^
+||solutions.stratus.com^
+||solutions.titanmachinery.com^
+||solutions.unysonlogistics.com^
+||solutions.visaacceptance.com^
+||sources.nxp.com^
+||spaces.martela.com^
+||spaces.martela.fi^
+||spaces.martela.no^
+||spaces.martela.pl^
+||spaces.martela.se^
+||spain.thomsonreuters.com^
+||specialevent.informaengage.com^
+||sponsored.strategic-i.com^
+||springboard.aon.com^
+||srqponmd.carte-gr.total.fr^
+||ssmile.dentsplysirona.com^
+||st.azcardinals.com^
+||start.adelaide.edu.au^
+||stat.ado.hu^
+||stat.altalex.com^
+||stat.bdc.ca^
+||stat.ciss.es^
+||stat.cuadernosdepedagogia.com^
+||stat.dauc.cz^
+||stat.dbschenker.com^
+||stat.guiasjuridicas.es^
+||stat.jogaszvilag.hu^
+||stat.juridicas.com^
+||stat.jusnetkarnovgroup.pt^
+||stat.kkpp.cz^
+||stat.kleos.cz^
+||stat.laley.es^
+||stat.laleynext.es^
+||stat.lamy-formation.fr^
+||stat.lamyetudiant.fr^
+||stat.legalintelligence.com^
+||stat.lex.pl^
+||stat.lexhub.tech^
+||stat.mersz.hu^
+||stat.praceamzda.cz^
+||stat.praetor-systems.cz^
+||stat.prawo.pl^
+||stat.profinfo.pl^
+||stat.rizeniskoly.cz^
+||stat.smarteca.cz^
+||stat.smarteca.es^
+||stat.starterre-campingcar.fr^
+||stat.starterre.fr^
+||stat.suresmile.dentsplysirona.com^
+||stat.taxlive.nl^
+||stat.ucetni-roku.cz^
+||stat.wk-formation.fr^
+||stat.wolterskluwer.com^
+||stat.wolterskluwer.es^
+||stat.wolterskluwer.pl^
+||stat.wolterskluwer.pt^
+||stats.bdc.ca^
+||stats.hager.com^
+||stats.saverglass.com^
+||stay.lottehotel.com^
+||sth.mykingsevents.com^
+||storagetechnology.arrow.com^
+||strikenurse.usnursing.com^
+||study.jcu.edu.au^
+||study.vu.edu.au^
+||submit.info.shutterstock.com^
+||subscribe.adpinfo.com^
+||subscribe.dnv.com^
+||subscribe.verintsystemsinc.com^
+||subscribe.vistage.com^
+||subscriptionmanagement.53.com^
+||subscriptions.bazaarvoice.com^
+||subscriptions.opentext.com^
+||subscriptions.reedpop.com^
+||subscriptionsbnk.wolterskluwerfs.com^
+||subscriptionsconnect.opentext.com^
+||success.coface.com^
+||success.definitive-results.com^
+||summit.edm.globalsources.com^
+||support.panasonic.eu^
+||survey-staging.mazda.com.au^
+||survey.mazda.com.au^
+||survey.xo.com^
+||surveys.executiveboard.com^
+||sustainable.optum.com^
+||suunta.visma.fi^
+||sw.broadcom.com^
+||symantec.ecs.arrow.com^
+||sys.hager.com^
+||t.12thman.com^
+||t.afry.com^
+||t.antalis-verpackungen.at^
+||t.antalis.at^
+||t.antalis.be^
+||t.antalis.ch^
+||t.antalis.cl^
+||t.antalis.co.uk^
+||t.antalis.com.br^
+||t.antalis.com.tr^
+||t.antalis.cz^
+||t.antalis.de^
+||t.antalis.dk^
+||t.antalis.ee^
+||t.antalis.es^
+||t.antalis.fi^
+||t.antalis.fr^
+||t.antalis.hu^
+||t.antalis.ie^
+||t.antalis.lt^
+||t.antalis.lv^
+||t.antalis.nl^
+||t.antalis.pl^
+||t.antalis.pt^
+||t.antalis.ro^
+||t.antalis.se^
+||t.antalis.sk^
+||t.antalisabitek.com^
+||t.antalisbolivia.com^
+||t.antalisperu.com^
+||t.arizonawildcats.com^
+||t.arkansasrazorbacks.com^
+||t.arts.uci.edu^
+||t.auburntigers.com^
+||t.augustaentertainmentcomplex.com^
+||t.azets.com^
+||t.azets.dk^
+||t.azets.fi^
+||t.azets.no^
+||t.azets.se^
+||t.baylorbears.com^
+||t.bceagles.com^
+||t.bluehens.com^
+||t.bucky.uwbadgers.com^
+||t.budweisergardens.com^
+||t.byutickets.com^
+||t.calbears.com^
+||t.centreinthesquare.com^
+||t.charlotte49ers.com^
+||t.chartwayarena.com^
+||t.cincinnatiarts.org^
+||t.classiccenter.com^
+||t.cofcsports.com^
+||t.collinscenterforthearts.com^
+||t.cozone.com^
+||t.csurams.com^
+||t.cubuffs.com^
+||t.dawsoncreekeventscentre.com^
+||t.deloittece.com^
+||t.depaulbluedemons.com^
+||t.e.x.com^
+||t.ecupirates.com^
+||t.emueagles.com^
+||t.fabulousfox.com^
+||t.fairparkdallas.com^
+||t.festo.com^
+||t.fightingillini.com^
+||t.fightingirish.com^
+||t.fordidahocenter.com^
+||t.foxtheatre.org^
+||t.friars.com^
+||t.georgiadogs.com^
+||t.goairforcefalcons.com^
+||t.goarmywestpoint.com^
+||t.gobearcats.com^
+||t.gobison.com^
+||t.goblackbears.com^
+||t.gobulldogs.com^
+||t.goccusports.com^
+||t.godeacs.com^
+||t.goduke.com^
+||t.gofrogs.com^
+||t.gogriz.com^
+||t.goguecenter.auburn.edu^
+||t.goheels.com^
+||t.gohuskies.com^
+||t.gojacks.com^
+||t.golobos.com^
+||t.gomocs.com^
+||t.gopack.com^
+||t.gophersports.com^
+||t.gopoly.com^
+||t.gopsusports.com^
+||t.gorhody.com^
+||t.gostanford.com^
+||t.gotigersgo.com^
+||t.gowyo.com^
+||t.goxavier.com^
+||t.gozips.com^
+||t.griztix.umt.edu^
+||t.gseagles.com^
+||t.hailstate.com^
+||t.hamptonpirates.com^
+||t.hawaiiathletics.com^
+||t.hawkeyesports.com^
+||t.herdzone.com^
+||t.hokiesports.com^
+||t.hornetsports.com^
+||t.huskers.com^
+||t.iowaeventscenter.com^
+||t.iuhoosiers.com^
+||t.jmusports.com^
+||t.krannertcenter.com^
+||t.kstatesports.com^
+||t.ksuowls.com^
+||t.liberty.edu^
+||t.libertyfirstcreditunionarena.com^
+||t.libertyflames.com^
+||t.longbeachstate.com^
+||t.lsusports.net^
+||t.meangreensports.com^
+||t.mgoblue.com^
+||t.miamihurricanes.com^
+||t.mktg.genesys.com^
+||t.mmaeast.com^
+||t.montecarlosbm.com^
+||t.msuspartans.com^
+||t.mynexity.fr^
+||t.navysports.com^
+||t.nevadawolfpack.com^
+||t.nexity-studea.com^
+||t.nexity.fr^
+||t.nhra.com^
+||t.nuhuskies.com^
+||t.nusports.com^
+||t.ohiobobcats.com^
+||t.okcciviccenter.com^
+||t.okstate.com^
+||t.olemisssports.com^
+||t.oralia.fr^
+||t.osubeavers.com^
+||t.owlsports.com^
+||t.paciolan.com^
+||t.pbr.com^
+||t.pennathletics.com^
+||t.pittsburghpanthers.com^
+||t.playhousesquare.org^
+||t.poconoraceway.com^
+||t.portland5.com^
+||t.poyry.com^
+||t.pplcenter.com^
+||t.purduesports.com^
+||t.ramblinwreck.com^
+||t.restek.com^
+||t.richmondspiders.com^
+||t.rolltide.com^
+||t.scarletknights.com^
+||t.selectyourtickets.com^
+||t.seminoles.com^
+||t.sjsuspartans.com^
+||t.sjuhawks.com^
+||t.soec.ca^
+||t.soonersports.com^
+||t.southernmiss.com^
+||t.texasperformingarts.org^
+||t.texassports.com^
+||t.texastech.com^
+||t.thalesgroup.com^
+||t.ticketatlantic.com^
+||t.ticketleader.ca^
+||t.ticketstaronline.com^
+||t.treventscomplex.com^
+||t.tribeathletics.com^
+||t.tulanegreenwave.com^
+||t.tulsahurricane.com^
+||t.tysoncenter.com^
+||t.uabsports.com^
+||t.ucdavisaggies.com^
+||t.ucirvinesports.com^
+||t.uclabruins.com^
+||t.uconnhuskies.com^
+||t.uhcougars.com^
+||t.umassathletics.com^
+||t.umterps.com^
+||t.und.com^
+||t.unlvrebels.com^
+||t.usctrojans.com^
+||t.utahstateaggies.com^
+||t.utrockets.com^
+||t.villanova.com^
+||t.virginiasports.com^
+||t.vucommodores.com^
+||t.whartoncenter.com^
+||t.wsucougars.com^
+||t.wvusports.com^
+||t.xlcenter.com^
+||talent.aonunited.com^
+||talenteq.intuit.com^
+||target.health.childrenswi.org^
+||tdbrochure.advancedtech.com^
+||teammate.arclogics.com^
+||tech.finalto.com^
+||tech.sangfor.com^
+||tech.softchoice.com^
+||techgifts.tradeshow.globalsources.com^
+||technology.informaengage.com^
+||technology1.informaengage.com^
+||technologyservices.equifax.com^
+||technologyservices.inform.equifax.com^
+||techsupport.balluff.com^
+||teefiksummin.visma.fi^
+||teho.visma.fi^
+||temsys.temsys.fr^
+||test.gogoinflight.com^
+||test.marketing.championhomes.com^
+||test.siriusdecisions.com^
+||testforms.fidelity.ca^
+||thetradenews.strategic-i.com^
+||ticketoffice.liberty.edu^
+||tkelq.genesys.com^
+||tlm.adp.ca^
+||tm-marketing.wolterskluwer.com^
+||tmt.intelligence.informa.com^
+||todayintheword.moodybible.org^
+||tp.lexisnexis.co.nz^
+||tp.lexisnexis.com.au^
+||tr-business.vodafone.com^
+||tr-ms.bosch-home.com^
+||tr-ms.profilo.com^
+||tr-ms.siemens-home.bsh-group.com^
+||tr.informabi.com^
+||trace.insead.edu^
+||track-e.cypress.com^
+||track-e.infineon.com^
+||track-e.infineoncommunity.com^
+||track.abrdn.com^
+||track.abrdnacp.com^
+||track.abrdnaef.com^
+||track.abrdnaod.com^
+||track.abrdnawp.com^
+||track.abrdnfco.com^
+||track.abrdnifn.com^
+||track.abrdnjapan.co.uk^
+||track.abrdnnewindia.co.uk^
+||track.asia-focus.co.uk^
+||track.asiadragontrust.co.uk^
+||track.auckland.ac.nz^
+||track.biz.lguplus.com^
+||track.cornerstonebuildingbrands.com^
+||track.deloitte.com^
+||track.docusign.ca^
+||track.docusign.co.uk^
+||track.docusign.com.au^
+||track.docusign.com.br^
+||track.docusign.com.es^
+||track.docusign.com^
+||track.docusign.de^
+||track.docusign.fr^
+||track.docusign.in^
+||track.docusign.it^
+||track.docusign.jp^
+||track.docusign.mx^
+||track.docusign.nl^
+||track.dunedinincomegrowth.co.uk^
+||track.education.intostudy.com^
+||track.estoneworks.com^
+||track.ferrari.com^
+||track.ferraridealers.com^
+||track.financialfairness.org.uk^
+||track.heritagebuildings.com^
+||track.hg.healthgrades.com^
+||track.info.mcknights.com^
+||track.info.mcknightshomecare.com^
+||track.info.mcknightsseniorliving.com^
+||track.info.mmm-online.com^
+||track.info.prweekus.com^
+||track.info.rarediseaseadvisor.com^
+||track.info.renalandurologynews.com^
+||track.info.rheumatologyadvisor.com^
+||track.info.thecardiologyadvisor.com^
+||track.inspirage.com^
+||track.into-giving.com^
+||track.intoglobal.com^
+||track.intostudy.com^
+||track.invtrusts.co.uk^
+||track.lesmills.com^
+||track.murray-income.co.uk^
+||track.murray-intl.co.uk^
+||track.northamericanincome.co.uk^
+||track.plygem.com^
+||track.quad.com^
+||track.simonton.com^
+||track.solutions.ostechnology.co.jp^
+||track.workfusion.com^
+||tracking-uat.veritas.com^
+||tracking.abraa.com^
+||tracking.abrdn.com^
+||tracking.academicyear.org^
+||tracking.accent-technologies.com^
+||tracking.acceptance.industrial.omron.eu^
+||tracking.adp-iat.adp.ca^
+||tracking.adp-iat.adp.com^
+||tracking.adp.ca^
+||tracking.adp.com^
+||tracking.adpinfo.com^
+||tracking.adpri.org^
+||tracking.agora.io^
+||tracking.aifsabroad.com^
+||tracking.air-worldwide.com^
+||tracking.analysis.hibu.com^
+||tracking.apac.business.samsung.com^
+||tracking.arabiancentres.com^
+||tracking.arbor.edu^
+||tracking.atea.dk^
+||tracking.athlon.com^
+||tracking.att.com^
+||tracking.automotivemastermind.com^
+||tracking.blackboard.com^
+||tracking.blog.hibu.com^
+||tracking.bokf.com^
+||tracking.bonava.de^
+||tracking.bonava.ee^
+||tracking.bonava.fi^
+||tracking.bonava.lt^
+||tracking.bonava.lv^
+||tracking.bonava.no^
+||tracking.bonava.ru^
+||tracking.bonava.se^
+||tracking.bradyid.com^
+||tracking.brevant.ca^
+||tracking.brgeneral.org^
+||tracking.build.com^
+||tracking.burriswindows.com^
+||tracking.bv.com^
+||tracking.cairn.info^
+||tracking.campaigns.drax.com^
+||tracking.capitalbank.jo^
+||tracking.capterra.com^
+||tracking.care.essentiahealth.org^
+||tracking.care.muschealth.org^
+||tracking.care.salinasvalleyhealth.com^
+||tracking.cello-square.com^
+||tracking.cengage.com^
+||tracking.changehealthcare.com^
+||tracking.civica.co.uk^
+||tracking.coact.org.au^
+||tracking.compactappliance.com^
+||tracking.connect.services.global.ntt^
+||tracking.construction.com^
+||tracking.contentmarketing.hibu.com^
+||tracking.continuingstudies.wisc.edu^
+||tracking.corporatetraveler.us^
+||tracking.corporatetraveller.co.nz^
+||tracking.corporatetraveller.co.za^
+||tracking.corporatetraveller.com.au^
+||tracking.corptraveller.com^
+||tracking.corteva.ca^
+||tracking.corteva.us^
+||tracking.cpa.qa.web.visa.com^
+||tracking.creditacceptance.com^
+||tracking.dataloen.dk^
+||tracking.dfinsolutions.com^
+||tracking.direxion.com^
+||tracking.dr-10.com^
+||tracking.dr-8.com^
+||tracking.drreddys.com^
+||tracking.dunnhumby.com^
+||tracking.dz.janssenmedicalcloud.me^
+||tracking.edb.gov.sg^
+||tracking.ehrintelligence.com^
+||tracking.eloq.soa.org^
+||tracking.enlist.com^
+||tracking.ent.oviahealth.com^
+||tracking.epredia.com^
+||tracking.europe.business.samsung.com^
+||tracking.events.adp.com^
+||tracking.exclusive-networks.com^
+||tracking.faucet.com^
+||tracking.faucetdirect.com^
+||tracking.fcmtravel.com^
+||tracking.flowofwork.adp.com^
+||tracking.flukecal.com^
+||tracking.fr.adp.com^
+||tracking.fticonsulting.com^
+||tracking.ftitechnology.com^
+||tracking.gartner.com^
+||tracking.gelia.com^
+||tracking.getapp.com^
+||tracking.global-demand02.nec.com^
+||tracking.go.lorainccc.edu^
+||tracking.go.onshape.com^
+||tracking.go.provident.bank^
+||tracking.go.toyobo.co.jp^
+||tracking.graduateschool.edu^
+||tracking.handlesets.com^
+||tracking.hcltech.com^
+||tracking.health.bjc.org^
+||tracking.health.lexmed.com^
+||tracking.healthitanalytics.com^
+||tracking.healthitsecurity.com^
+||tracking.healthpayerintelligence.com^
+||tracking.hibu.com^
+||tracking.hiscox.com^
+||tracking.hot.net.il^
+||tracking.houzz.com^
+||tracking.igloosoftware.com^
+||tracking.inexchange.com^
+||tracking.inexchange.fi^
+||tracking.inexchange.se^
+||tracking.info.ivanti.com^
+||tracking.info.rcgt.com^
+||tracking.info.rochesterknighthawks.com^
+||tracking.info.servicenow.com^
+||tracking.info.zetes.com^
+||tracking.innovamarketinsights.com^
+||tracking.insead.edu^
+||tracking.insperity.com^
+||tracking.janssenmed.cz^
+||tracking.janssenmed.ro^
+||tracking.janssenmed.sk^
+||tracking.janssenmedicalcloud.be^
+||tracking.janssenmedicalcloud.ch^
+||tracking.janssenmedicalcloud.com^
+||tracking.janssenmedicalcloud.de^
+||tracking.janssenmedicalcloud.ee^
+||tracking.janssenmedicalcloud.es^
+||tracking.janssenmedicalcloud.eu^
+||tracking.janssenmedicalcloud.fr^
+||tracking.janssenmedicalcloud.gr^
+||tracking.janssenmedicalcloud.hr^
+||tracking.janssenmedicalcloud.ie^
+||tracking.janssenmedicalcloud.it^
+||tracking.janssenmedicalcloud.lt^
+||tracking.janssenmedicalcloud.me^
+||tracking.janssenmedicalcloud.pl^
+||tracking.janssenmedicalcloud.pt^
+||tracking.janssenmedicalcloud.ro^
+||tracking.janssenmedicalcloud.se^
+||tracking.janssenmedicalcloud.sk^
+||tracking.janssenos.com^
+||tracking.kegerator.com^
+||tracking.kenblanchard.com^
+||tracking.kubota.ca^
+||tracking.lailiveevents.com^
+||tracking.laivideo.com^
+||tracking.laurelsprings.com^
+||tracking.leadingauthorities.com^
+||tracking.learn.oakstreethealth.com^
+||tracking.lenovo.com^
+||tracking.lenovopartnernetwork.com^
+||tracking.lfg.com^
+||tracking.lightingdirect.com^
+||tracking.lightingshowplace.com^
+||tracking.lonnogpersonalabc.visma.no^
+||tracking.lseg.com^
+||tracking.luminishealth.org^
+||tracking.ma.janssenmedicalcloud.me^
+||tracking.mail.ti.com.cn^
+||tracking.mail.ti.com^
+||tracking.mail.tij.co.jp^
+||tracking.mandg.co.uk^
+||tracking.marketing.frequentis.com^
+||tracking.marketone.com^
+||tracking.martela.com^
+||tracking.mathworks.com^
+||tracking.matsinc.com^
+||tracking.mattersurfaces.com^
+||tracking.medicalcloud.janssen.com.tr^
+||tracking.mediwel.net^
+||tracking.mhealthintelligence.com^
+||tracking.mindshiftonline.com^
+||tracking.mizuhogroup.com^
+||tracking.mjbizconference.com^
+||tracking.mjbizdaily.com^
+||tracking.mkt-email.samsungsds.com^
+||tracking.mobiliteverte.engie.fr^
+||tracking.modelgroup.com^
+||tracking.monespaceprime.engie.fr^
+||tracking.mtn.co.za^
+||tracking.my.hq.com^
+||tracking.myregus.com^
+||tracking.myspacesworks.com^
+||tracking.nasdaq.com^
+||tracking.netsuite.com^
+||tracking.news.evergreenhealth.com^
+||tracking.newyorklifeinvestments.com^
+||tracking.ng.janssenmedicalcloud.me^
+||tracking.nl.visma.com^
+||tracking.ntl.no^
+||tracking.ohiohealth.com^
+||tracking.omron.at^
+||tracking.omron.eu^
+||tracking.omron.fr^
+||tracking.omron.pl^
+||tracking.omron.ro^
+||tracking.omron.se^
+||tracking.online.nl.adp.com^
+||tracking.online.wisc.edu^
+||tracking.oppd.com^
+||tracking.oswegohealth.org^
+||tracking.particuliers.engie.fr^
+||tracking.patientengagementhit.com^
+||tracking.pdc.wisc.edu^
+||tracking.pennmedicine.princetonhcs.org^
+||tracking.pgi.com^
+||tracking.pioneer.com^
+||tracking.precisely.com^
+||tracking.precollege.wisc.edu^
+||tracking.pro.engie.fr^
+||tracking.prophet.com^
+||tracking.prophix.com^
+||tracking.ps.shutterstock.com^
+||tracking.ptc.com^
+||tracking.pullsdirect.com^
+||tracking.quadient.com^
+||tracking.questdiagnostics.com^
+||tracking.regus.com^
+||tracking.relationshipone.com^
+||tracking.reply.broadwayinchicago.com^
+||tracking.reply.broadwayinhollywood.com^
+||tracking.reply.dpacnc.com^
+||tracking.response.terex.com^
+||tracking.risk.lexisnexis.co.jp^
+||tracking.risk.lexisnexis.co.uk^
+||tracking.risk.lexisnexis.com.br^
+||tracking.risk.lexisnexis.com^
+||tracking.rootinc.com^
+||tracking.rti-inc.com^
+||tracking.sabic.com^
+||tracking.schneider.com^
+||tracking.sciex.com^
+||tracking.seakeeper.com^
+||tracking.securitymsp.cisco.com^
+||tracking.service.just.nl^
+||tracking.sfitrucks.com^
+||tracking.shl.com^
+||tracking.shop.verymobile.it^
+||tracking.sierrawireless.com^
+||tracking.siriusdecisions.com^
+||tracking.smartbusiness.samsung.com^
+||tracking.softwareadvice.com^
+||tracking.solartrade-us.baywa-re.com^
+||tracking.solutions.parker.com^
+||tracking.stageandscreen.travel^
+||tracking.stericycle.com^
+||tracking.summer.wisc.edu^
+||tracking.syncsketch.com^
+||tracking.taskeasy.com^
+||tracking.tdk.com.cn^
+||tracking.tdk.com^
+||tracking.te.com^
+||tracking.test.insead.edu^
+||tracking.theemeraldconference.com^
+||tracking.thermoinfo.com^
+||tracking.thunderhead.com^
+||tracking.trinet.com^
+||tracking.uberflip.com^
+||tracking.uk.adp.com^
+||tracking.umbrella.com^
+||tracking.umms.org^
+||tracking.usj.es^
+||tracking.utas.edu.au^
+||tracking.ventingdirect.com^
+||tracking.ventingpipe.com^
+||tracking.verisk.comness.samsung.com^
+||tracking.veritas.com^
+||tracking.vertiv.com^
+||tracking.vertivco.com^
+||tracking.virginmediao2business.co.uk^
+||tracking.virtus.com^
+||tracking.visitdubai.com^
+||tracking.visma.co.uk^
+||tracking.visma.com^
+||tracking.visma.dk^
+||tracking.visma.fi^
+||tracking.visma.lt^
+||tracking.visma.lv^
+||tracking.visma.net^
+||tracking.visma.nl^
+||tracking.visma.no^
+||tracking.visma.ro^
+||tracking.visma.se^
+||tracking.vismaraet.nl^
+||tracking.vitalant.org^
+||tracking.vodafone.co.uk^
+||tracking.vodafone.com^
+||tracking.winecoolerdirect.com^
+||tracking.y-nmc.jp^
+||tracking.yealink.com^
+||tracking1.cigna.com.hk^
+||tracking1.cignaglobalhealth.com^
+||tracking1.labcorp.com^
+||tracking1.tena.com^
+||tracking2.bokf.com^
+||tracking2.cigna.co.id^
+||tracking2.cigna.co.uk^
+||tracking2.cigna.com.tw^
+||tracking2.cignaglobal.com^
+||tracking2.labcorp.com^
+||tracking2.lenovo.com^
+||tracking2.questdiagnostics.com^
+||tracking3.labcorp.com^
+||tracking3.lenovo.com^
+||tracking4.labcorp.com^
+||tracking5.labcorp.com^
+||trackingeloqua.tec.mx^
+||trackinginternal.hcltech.com^
+||trackinginternal.ti.com^
+||trackinglrus.wolterskluwer.com^
+||trackingmms.accenture.com^
+||tracks1.ferrari.com^
+||tracks3.ferrari.com^
+||trackside.redbull.racing^
+||tradeshow.edm.globalsources.com^
+||trail.cleardocs.com^
+||trail.dominiosistemas.com.br^
+||trail.sweetandmaxwell.co.uk^
+||trail.thomsonreuters.ca^
+||trail.thomsonreuters.co.jp^
+||trail.thomsonreuters.co.kr^
+||trail.thomsonreuters.co.nz^
+||trail.thomsonreuters.co.uk^
+||trail.thomsonreuters.com.au^
+||trail.thomsonreuters.com.br^
+||trail.thomsonreuters.com.hk^
+||trail.thomsonreuters.com.my^
+||trail.thomsonreuters.com.sg^
+||trail.thomsonreuters.com^
+||trail.thomsonreuters.in^
+||training.thunderhead.com^
+||transact.blackboard.com^
+||transplant.care.uhssa.com^
+||transplant.universityhealth.com^
+||trck.accredible.com^
+||trck.comms.watlow.com^
+||trck.e.atradius.com^
+||trck.el.supremapoker.com.br^
+||trck.forfatterforbundet.no^
+||trck.graiman.com^
+||trck.info.fullsaildc3.com^
+||trck.internalnews.dbschenker.com^
+||trck.medlem.elogit.no^
+||trck.my.elca.ch^
+||trck.www4.earlywarning.com^
+||trck.www4.paze.com^
+||trelleborg.tecs1.com^
+||trk.admmontreal.com^
+||trk.admtoronto.com^
+||trk.advancedmanufacturingeast.com^
+||trk.advancedmanufacturingminneapolis.com^
+||trk.advisory.com^
+||trk.aeroengineconference.com^
+||trk.afcom.com^
+||trk.aibusiness.com^
+||trk.aircharterguide.com^
+||trk.airdimensions.com^
+||trk.airportdata.com^
+||trk.albinpump.com^
+||trk.ali-cle.org^
+||trk.altis.com.gr^
+||trk.americancityandcounty.com^
+||trk.anthology.com^
+||trk.appliedintelligence.live^
+||trk.arozone.cn^
+||trk.arozone.com^
+||trk.aviationweek.com^
+||trk.avlr.net^
+||trk.bakewithstork.com^
+||trk.banktech.com^
+||trk.barcoproducts.ca^
+||trk.barcoproducts.com^
+||trk.batterytechonline.com^
+||trk.becel.ca^
+||trk.becel.com.br^
+||trk.becel.com^
+||trk.beefmagazine.com^
+||trk.bertolli.co.uk^
+||trk.biomedboston.com^
+||trk.blueband.com.ec^
+||trk.blueband.com^
+||trk.bonella.com.ec^
+||trk.broomwade.com^
+||trk.championairtech.com^
+||trk.championpneumatic.com^
+||trk.channelfutures.com^
+||trk.channelleadershipsummit.com^
+||trk.channelpartnersconference.com^
+||trk.citeline.com^
+||trk.concisegroup.com^
+||trk.contact.alphabet.com^
+||trk.contact.umpquabank.com^
+||trk.coteriefashionevents.com^
+||trk.countrycrock.com^
+||trk.createyournextcustomer.com^
+||trk.cremebonjour.fi^
+||trk.cremebonjour.se^
+||trk.croma.nl^
+||trk.cx.motivcx.com^
+||trk.daimlertruck.com^
+||trk.darkreading.com^
+||trk.datacenterknowledge.com^
+||trk.datacenterworld.com^
+||trk.delma.ro^
+||trk.delphiquest.com^
+||trk.designcon.com^
+||trk.designnews.com^
+||trk.digitaltveurope.com^
+||trk.dosatron.com^
+||trk.drdobbs.com^
+||trk.du-darfst.de^
+||trk.dvsystems.com^
+||trk.e.chooseumpquabank.com^
+||trk.elmlea.com^
+||trk.elq.mcphersonoil.com^
+||trk.en.business.westernunion.ch^
+||trk.en.business.westernunion.de^
+||trk.en.business.westernunion.fr^
+||trk.en.business.westernunion.it^
+||trk.en.business.westernunion.pl^
+||trk.encore-can.com^
+||trk.encore-mx.com^
+||trk.encoreglobal.com^
+||trk.engie-homeservices.fr^
+||trk.engineleasingandfinance-europe.com^
+||trk.enjoyplanta.com^
+||trk.equifax.com.au^
+||trk.event.eset.com^
+||trk.evtechexpo.com^
+||trk.evtechexpo.eu^
+||trk.farmprogress.com^
+||trk.farmprogressshow.com^
+||trk.feedstuffs.com^
+||trk.fieldandmain.com^
+||trk.findfashionevents.com^
+||trk.fintechfutures.com^
+||trk.flora.com^
+||trk.flora.es^
+||trk.flora.pl^
+||trk.floraspread.com.au^
+||trk.food-management.com^
+||trk.fr.business.westernunion.ca^
+||trk.fr.business.westernunion.ch^
+||trk.fruitdor.fr^
+||trk.futureelectronics.cn^
+||trk.futureelectronics.com^
+||trk.gardnerdenver.com.cn^
+||trk.gardnerdenver.com^
+||trk.go.ingrammicro.com^
+||trk.go.ingrammicrocloud.com^
+||trk.hartell.com^
+||trk.haskel.com^
+||trk.hello.navan.com^
+||trk.hibon.com^
+||trk.huskerharvestdays.com^
+||trk.icantbelieveitsnotbutter.com^
+||trk.imeeventscalendar.com^
+||trk.imengineeringeast.com^
+||trk.info.puntonet.ec^
+||trk.info.verifi.com^
+||trk.ingersollrand.com^
+||trk.irco.com^
+||trk.itprotoday.com^
+||trk.iwceexpo.com^
+||trk.jorc.com^
+||trk.kansashealthsystem.com^
+||trk.laetta.com^
+||trk.latta.se^
+||trk.lightreading.com^
+||trk.living.chartwell.com^
+||trk.lmipumps.com^
+||trk.lookbook.westernunion.com^
+||trk.magicfashionevents.com^
+||trk.mailchimp.com^
+||trk.margarinaiberia.com.mx^
+||trk.maximus-solution.com^
+||trk.md-kinney.com^
+||trk.mddionline.com^
+||trk.mdeawards.com^
+||trk.meetingsnet.com^
+||trk.metronet.com^
+||trk.metronetbusiness.com^
+||trk.milda.se^
+||trk.miltonroy.com^
+||trk.mk.westernunion.com^
+||trk.mktg.nec.com^
+||trk.mppumps.com^
+||trk.mt.business.westernunion.com^
+||trk.nashpumps.com^
+||trk.nationalhogfarmer.com^
+||trk.ndtco.com^
+||trk.neogen.com^
+||trk.networkxevent.com^
+||trk.news.loyaltycompany.com^
+||trk.novelis.com^
+||trk.nrn.com^
+||trk.oberdorferpumps.com^
+||trk.oma.dk^
+||trk.optum.com^
+||trk.packagingdigest.com^
+||trk.parkitbikeracks.com^
+||trk.peceniejeradost.sk^
+||trk.pecenijeradost.cz^
+||trk.picnictables.com^
+||trk.planta.be^
+||trk.planta.pt^
+||trk.plantafin.fr^
+||trk.plasticstoday.com^
+||trk.powderandbulkshow.com^
+||trk.powderandbulksolids.com^
+||trk.powerdms.com^
+||trk.pro-activ.com^
+||trk.projectfashionevents.com^
+||trk.protiviti.com^
+||trk.ptl.irco.com^
+||trk.quantumbusinessnews.com^
+||trk.rama.com.co^
+||trk.rama.com^
+||trk.reach.utep.edu^
+||trk.recetasprimavera.com^
+||trk.restaurant-hospitality.com^
+||trk.riverview.org^
+||trk.routesonline.com^
+||trk.sais.ch^
+||trk.sana.com.tr^
+||trk.sanella.de^
+||trk.secure.icmi.com^
+||trk.seepex.com^
+||trk.solo.be^
+||trk.solution.desjardins.com^
+||trk.sourcingatmagic.com^
+||trk.specialevents.com^
+||trk.speedbumpsandhumps.com^
+||trk.spsglobal.com^
+||trk.supermarketnews.com^
+||trk.tbivision.com^
+||trk.telecoms.com^
+||trk.the5gexchange.com^
+||trk.thea.at^
+||trk.theaisummit.com^
+||trk.thebatteryshow.com^
+||trk.thebatteryshow.eu^
+||trk.thebenchfactory.com^
+||trk.themspsummit.com^
+||trk.thomaspumps.com^
+||trk.trashcontainers.com^
+||trk.treetopproducts.com^
+||trk.tricontinent.com^
+||trk.tulipan.es^
+||trk.tuthillpump.com^
+||trk.ummhealth.org^
+||trk.updates.juilliard.edu^
+||trk.urgentcomm.com^
+||trk.us.vacasa.com^
+||trk.vaqueiro.pt^
+||trk.violife.com^
+||trk.violifefoods.com^
+||trk.violifeprofessional.com^
+||trk.vitam.gr^
+||trk.vodafone.com.tr^
+||trk.wealthmanagement.com^
+||trk.webhostingtalk.com^
+||trk.welchvacuum.com^
+||trk.wellsfargocenterphilly.com^
+||trk.williamspumps.com^
+||trk.yzsystems.com^
+||trk.zeks.com^
+||trk01.informaconnect.com^
+||trk01.knect365.com^
+||trk02.knect365.com^
+||trk03.knect365.com^
+||trk04.informatech.com^
+||trust.flexpay.io^
+||try.blackboard.com^
+||try.tableau.com^
+||try.tableausoftware.com^
+||tv.totaljobs.com^
+||tw-go.experian.com^
+||u.audi-pureprotection.com^
+||uat.enterprises.proximus.com^
+||ucaas.avaya.com^
+||uk-business.vodafone.com^
+||uk-mktg.vodafone.com^
+||uk.adpinfo.com^
+||uk.partner.equifax.co.uk^
+||uk.realestate.bnpparibas^
+||ukri.innovateuk.org^
+||update.purina.com^
+||update.tcsg.edu^
+||updates.gaylordhotels.com^
+||us-go.experian.com^
+||us-now.experian.com^
+||us.mattamyhomes.com^
+||usingyourcard.americanexpress.co.uk^
+||ussolutions.equifax.com^
+||ut.econnect.utexas.edu^
+||vge-business.vodafone.com^
+||vge-mktg-secure.vodafone.com^
+||vge-mktg.vodafone.com^
+||videos.personneltoday.com^
+||view.americanbuildings.com^
+||view.aon.com^
+||view.centria.com^
+||view.kirbybuildingsystems.com^
+||view.metlspan.com^
+||view.nucorbuildingsystems.com^
+||vip.german.ni.com^
+||vip.granicus.com^
+||vip.maxtor.com^
+||vision.cbre.com.au^
+||visit.adelaide.edu.au^
+||visit.donateblood.com.au^
+||visit.hypertherm.com^
+||visit.lifeblood.com.au^
+||visit.oakstreethealth.com^
+||visit.tafensw.edu.au^
+||visitor.arabiancentres.com^
+||visitor.hotelex.cn^
+||visma.e-conomic.dk^
+||vismaturva.visma.fi^
+||voice.thewealthadvisor.com^
+||vois.vodafone.com^
+||water.tetrapak.com^
+||we.care.oswegohealth.org^
+||wealth.informabi.com^
+||web.akademiai.hu^
+||web.care.eehealth.org^
+||web.care.mclaren.org^
+||web.care.northoaks.org^
+||web.care.uhssa.com^
+||web.care.wakemed.org^
+||web.connect.garnethealth.org^
+||web.destinationretirement.co.uk^
+||web.devry.edu^
+||web.health.childrenswi.org^
+||web.health.memorialcare.org^
+||web.healthcare.northbay.org^
+||web.healthnews.thechristhospital.com^
+||web.houstontexans.com^
+||web.houstontexansluxe.com^
+||web.hubfinancialsolutions.co.uk^
+||web.info.aspirus.org^
+||web.info.mymosaiclifecare.org^
+||web.lsse.net^
+||web.morganfranklin.com^
+||web.northwestern.nm.org^
+||web.nortonrosefulbright.com^
+||web.novogene.com^
+||web.novuna.co.uk^
+||web.novunapersonalfinance.co.uk^
+||web.wearejust.co.uk^
+||web2.perkinelmer.com^
+||web3.perkinelmer.com^
+||web8.perkinelmer.com^
+||webcasts.de.ni.com^
+||webcasts.partnermcafee.com^
+||webinar.ndtco.com^
+||webinars.att.com^
+||webinars.blackboard.com^
+||webinars.cigna.com^
+||webinars.elliemae.com^
+||webinars.monster.com^
+||webinars.oncourselearning.com^
+||webinars.thermofisher.com^
+||website-tracking.smartx.com^
+||webtracking.becker.com^
+||webtracking.cuwebinars.com^
+||webtracking.devry.edu^
+||webtracking.medical.rossu.edu^
+||webtracking.moneylaundering.com^
+||webtracking.oncourselearning.com^
+||welcome..org^
+||welcome.ciscopowerofpartnership.com^
+||welcome.coniferhealth.com^
+||welcome.e.chiefs.com^
+||welcome.floridagators.com^
+||welcome.item24.be^
+||welcome.item24.ch^
+||welcome.item24.com^
+||welcome.item24.cz^
+||welcome.item24.de^
+||welcome.item24.es^
+||welcome.item24.fr^
+||welcome.item24.hu^
+||welcome.item24.it^
+||welcome.item24.kr^
+||welcome.item24.mx^
+||welcome.item24.nl^
+||welcome.item24.pl^
+||welcome.vodafone.com^
+||wellness.palomarhealth.org^
+||whatif.fr.adobe.com^
+||whatif.it.adobe.com^
+||whatif.nl.adobe.com^
+||whitepapers.blackboard.com^
+||whitepapers.rockwellautomation.com^
+||work.construction.com^
+||workforcetrends.advancedtech.com^
+||workplace.ricoh.de^
+||workplace.ricoh.ie^
+||workplace.ricoh.it^
+||workplacesolutions.equifax.com^
+||workplacesolutions.inform.equifax.com^
+||www-102.aig.com^
+||www-103.aig.com^
+||www-103.chartisinsurance.com^
+||www-104.aig.com^
+||www-106.aig.com^
+||www-108.aig.com^
+||www-109.aig.com^
+||www-110.aig.com^
+||www.acpprograms.org^
+||www.activisionnews.com^
+||www.adpinfo.com^
+||www.allergodil.cz^
+||www.allergodil.hu^
+||www.armolipid.com.ru^
+||www.avismarketing.gr^
+||www.cf.labanquepostale.fr^
+||www.chronischepancreatitis.nl^
+||www.communications.kra.go.ke^
+||www.connect.johndorys.co.za^
+||www.connect.panarottis.co.za^
+||www.connect.spurcorp.com^
+||www.epargnez.adp.ca^
+||www.epipenexpiryservice.com^
+||www.ess.tis.co.jp^
+||www.fordprotectplans.com^
+||www.gaylordhotelsnews.com^
+||www.get.ukg.com^
+||www.glf.mt.com^
+||www.heatexperience.com^
+||www.infineon-community.com^
+||www.info.avalara.com^
+||www.info.dunnhumby.com^
+||www.infos-experts.adp.com^
+||www.ins-mercadeo.com^
+||www.learn.dunnhumby.com^
+||www.maserati.info^
+||www.mediwebinars.com^
+||www.mkt.uvg.edu.gt^
+||www.mydocusign.com^
+||www.myfiltration.eaton.com^
+||www.myvehicle.eaton.com^
+||www.nepinplainsight.com^
+||www.newscatalanaoccidente.com^
+||www.newsgrupocatalanaoccidente.com^
+||www.newsplusultra.es^
+||www.on24-webinars.co.uk^
+||www.partnermcafee.com^
+||www.quoteafs.com^
+||www.rdalpha.net^
+||www.registrocumbresallegro.com^
+||www.registroeventosjaver.com^
+||www.registrojardinesdecastalias.com^
+||www.registrovalledesantiago.com^
+||www.registrovillaslapiedad.com^
+||www.retirementadvisorinsights.com^
+||www.safecoprograms.com^
+||www.saugellaviso.it^
+||www.save.adp.ca^
+||www.science.dunnhumby.com^
+||www.scienceaaas.org^
+||www.secondmicrosite.com^
+||www.send.hollandcasino.nl^
+||www.service.hollandcasino.nl^
+||www.service.just.nl^
+||www.solutions.prudential.com^
+||www.sp-newfunds.com^
+||www.test92.com^
+||www.tracking.adp.ch^
+||www.tracking.adp.co.uk^
+||www.undiaenlausj.com^
+||www.unrealpain.com^
+||www.us.roche-applied-science.com^
+||www.viatrisneuropathicpain.co.uk^
+||www.whennotsharingiscaring.com^
+||www.yourplanprovisions.com^
+||www1.kawasaki-motors.com^
+||www2.edgenuity.com^
+||www2.festo.com^
+||www2.firsttechfed.com^
+||www2.info.renesas.cn^
+||www3.americanprogressaction.org^
+||your.maas.ptvgroup.com^
+||your.mapandguide.ptvgroup.com^
+||your.mapandmarket.ptvgroup.com^
+||your.routeoptimiser.ptvgroup.com^
+||your.trafficdata.ptvgroup.com^
+||your.vissim.ptvgroup.com^
+||your.vistro.ptvgroup.com^
+||your.visum.ptvgroup.com^
+||your.xserver.ptvgroup.com^
+||yourporsche.nabooda-auto.com^
+||yourporscheimg.nabooda-auto.com^
+||za-go.experian.com^
+||zakelijke-betalingsoplossingen.americanexpress.nl^
+||zakelijke-oplossingen-nld.americanexpress.nl^
+||zakelijkemarkt.vattenfall.nl^
+||zh-tw.siemensplmevents.com^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_ad-ebis.txt ***
+||a9d8e7b6i5s.andgino.jp^
+||aaa.aqualink.tv^
+||aaaa.jawfp2.org^
+||aaaa.nocor.jp^
+||ac-3.mix.tokyo^
+||ac-ebis-stb.usen.com^
+||ac-ebis-uhome.usen.com^
+||ac-ebis.otoraku.jp^
+||ac-ebis.usen-ad.com^
+||ac-ebis.usen-insurance.com^
+||ac-ebis.usen-pos.com^
+||ac-ebis.usen-service.com^
+||ac-ebis.usen-store.com^
+||ac-ebis.usen.biz^
+||ac.geechs-job.com^
+||ad-ebis.bookpass.auone.jp^
+||ad-ebis.mynavi-job20s.jp^
+||ad-ebis.toysub.jp^
+||ad-track.paravi.jp^
+||ad.320320.net^
+||ad.aim-universe.co.jp^
+||ad.aucfan.com^
+||ad.aucview.com^
+||ad.autorace.jp^
+||ad.kddi-fs.com^
+||ad.ordersuit.info^
+||ad.takasu.co.jp^
+||ad.tempstaff.co.jp^
+||ad.theatre.co.jp^
+||ad.theatreacademy.jp^
+||ad.udition.jp^
+||ad1.tone.ne.jp^
+||adbq.bk.mufg.jp^
+||ade.deskstyle.info^
+||ade.hirose-fx.co.jp^
+||ade.jfx.co.jp^
+||adebis-52667624.wowma.jp^
+||adebis-bkan.vbest.jp^
+||adebis-cname.jobmall.jp^
+||adebis-dojyo.dojyo.jp^
+||adebis-morijuku.morijuku.com^
+||adebis-rikon.vbest.jp^
+||adebis-saimu.vbest.jp^
+||adebis.464981.com^
+||adebis.afc-shop.com^
+||adebis.ahjikan-shop.com^
+||adebis.aij.co.jp^
+||adebis.angfa-store.jp^
+||adebis.bathclin.jp^
+||adebis.bbb-life.jp^
+||adebis.chojyu.com^
+||adebis.crowdcredit.jp^
+||adebis.daiwahouse.co.jp^
+||adebis.demae-can.com^
+||adebis.e-ohaka.com^
+||adebis.entetsu.co.jp^
+||adebis.ferret-one.com^
+||adebis.furisode-ichikura.jp^
+||adebis.gfs-official.com^
+||adebis.gfs.tokyo^
+||adebis.gogin.co.jp^
+||adebis.harutaka.jp^
+||adebis.hotstaff.co.jp^
+||adebis.jp.iface.com^
+||adebis.juku.st^
+||adebis.kamada.co.jp^
+||adebis.kaonavi.jp^
+||adebis.kirei-journal.jp^
+||adebis.kirin.co.jp^
+||adebis.kodomohamigaki.com^
+||adebis.kose.co.jp^
+||adebis.koutsujiko.jp^
+||adebis.leben-establish.jp^
+||adebis.leben-style.jp^
+||adebis.lifestylemag.jp^
+||adebis.livable.co.jp^
+||adebis.logoshome.jp^
+||adebis.mizunomori.com^
+||adebis.no.01.alo-organic.com^
+||adebis.nursery.co.jp^
+||adebis.o-baby.net^
+||adebis.pikaichi.co.jp^
+||adebis.qeee.jp^
+||adebis.real-style.co.jp^
+||adebis.report.clinic^
+||adebis.reruju.com^
+||adebis.s-toushi.jp^
+||adebis.saison-pocket.com^
+||adebis.satori.marketing^
+||adebis.sbishinseibank.co.jp^
+||adebis.sbpayment.jp^
+||adebis.shinseibank.com^
+||adebis.shiseido.co.jp^
+||adebis.sokamocka.com^
+||adebis.thd-web.jp^
+||adebis.theclinic.jp^
+||adebis.tipness.co.jp^
+||adebis.tohshin.co.jp^
+||adebis.toitoitoi.clinic^
+||adebis.tokyuhotels.co.jp^
+||adebis.toushi-up.com^
+||adebis.tspot.co.jp^
+||adebis.urban-research.jp^
+||adebis.wii-clinic.jp^
+||adebis.zenyaku-hbshop.com^
+||adebis01.job-con.jp^
+||adebis02.juku.st^
+||adebis0508.brain-sleep.com^
+||adebis1.1rnavi.com^
+||adebis8628.matsui.co.jp^
+||adebiscname.au-sonpo.co.jp^
+||adebiscname.auone.jp^
+||adebiscname.sumirin-ht.co.jp^
+||adebisu.fairy-contact.jp^
+||adebisu.wowow.co.jp^
+||adex.kintetsu-re.co.jp^
+||adex.naruko333.jp^
+||adex.predear.com^
+||admeasure.hh-online.jp^
+||adnl.bk.mufg.jp^
+||adpromo.peppynet.com^
+||adtrack.loracle.jp^
+||aesus.so-net.ne.jp^
+||analyse.hinemos.info^
+||axjfkc.kobayashi.co.jp^
+||bbbb.goace.jp^
+||beeline.beeline-tire.co.jp^
+||campaign-direct.eisai.jp^
+||campaign-direct.ketsuatsu-taisaku.xyz^
+||campaign-direct.kouketsuatsu-health.xyz^
+||campaign-direct.supplement-news.net^
+||ccc.aqualink.tokyo^
+||cmass.massmedian.co.jp^
+||cname-ade.gom-in.com^
+||cname-ade.hankoya.com^
+||cname-ade.original-calendar.com^
+||cname-ade.shachihata.biz^
+||cname-adebis.nice2meet.us^
+||cname-adebis.vcube.com^
+||cname.crank-in.net^
+||cname.ebis.folio-sec.com^
+||cname.finess.jp^
+||cname.gladis.jp^
+||cname.jaic-college.jp^
+||cname.jf-d.jp^
+||cname.kyusai.co.jp^
+||cname.lions-mansion.jp^
+||cname.mebiusseiyaku.co.jp^
+||cname.mitsuihome.co.jp^
+||cname.nikkei-cnbc.co.jp^
+||cname1.shakenkan.co.jp^
+||cname2.shaken-yoyaku.com^
+||cnameebis.eizoshigoto.com^
+||cnameebis.usagi-online.com^
+||cnameforitp.dermed.jp^
+||cnebis.chocola.com^
+||cnebis.eisai.jp^
+||cnebis.i-no-science.com^
+||corporate.frontierconsul.net^
+||cs0010sbeda.theory-clinic.com^
+||cs0010sbeda.theory-diet.com^
+||cs0010sbeda.theory-kumatarumi.com^
+||cs1470sbeda.schoolasp.com^
+||cs1863sbeda.glaucoma-arrest.net^
+||cs2113sbeda.hokto-onlineshop.jp^
+||cvs.kireimo.jp^
+||d-kint.d-kintetsu.co.jp^
+||digital.anicom-sompo.co.jp^
+||eb.bewithyou.jp^
+||eb.o-b-labo.com^
+||ebis-cname.mirai-japan.co.jp^
+||ebis-tracking.hirakata-skin-clinic.com^
+||ebis-tracking.okinawa-keisei.com^
+||ebis-tracking.shinyokohama-beauty.com^
+||ebis-tracking.tcb-beauty.net^
+||ebis-tracking.tcb-fukushima.com^
+||ebis-tracking.tcb-mito.com^
+||ebis-tracking.tcb-recruit.com^
+||ebis-tracking.tcb-setagaya.com^
+||ebis.15jikai.com^
+||ebis.2jikaikun.com^
+||ebis.aibashiro.jp^
+||ebis.apo-mjob.com^
+||ebis.as-1.co.jp^
+||ebis.ayura.co.jp^
+||ebis.bbo.co.jp^
+||ebis.belta.co.jp^
+||ebis.biyo-job.com^
+||ebis.bulk.co.jp^
+||ebis.c-3-esthe.com^
+||ebis.care-tensyoku.com^
+||ebis.ce-parfait.com^
+||ebis.codecamp.jp^
+||ebis.coyori.com^
+||ebis.cp.claudia.co.jp^
+||ebis.delis.co.jp^
+||ebis.eiyoushi-tensyoku.com^
+||ebis.forcas.com^
+||ebis.funai-finance.com^
+||ebis.funai-ma.com^
+||ebis.funaisoken.co.jp^
+||ebis.glico-direct.jp^
+||ebis.gokusen-ichiba.com^
+||ebis.goldcrest.co.jp^
+||ebis.housekeeping.or.jp^
+||ebis.j-l-m.co.jp^
+||ebis.jinzai-business.com^
+||ebis.jobcan.jp^
+||ebis.jobcan.ne.jp^
+||ebis.jukkou.com^
+||ebis.kan54.jp^
+||ebis.kimonoichiba.com^
+||ebis.kubara.jp^
+||ebis.kusunosetakeshi.com^
+||ebis.lululun.com^
+||ebis.macchialabel.com^
+||ebis.makeshop.jp^
+||ebis.mucuna.co.jp^
+||ebis.n-pri.jp^
+||ebis.nomu-silica.jp^
+||ebis.okasan-online.co.jp^
+||ebis.onamae.com^
+||ebis.palclair.jp^
+||ebis.pasonatech.co.jp^
+||ebis.rabo.cat^
+||ebis.radish-pocket.com^
+||ebis.radishbo-ya.co.jp^
+||ebis.randstad.co.jp^
+||ebis.re-shop.jp^
+||ebis.rozetta.jp^
+||ebis.s-bisco.jp^
+||ebis.samurai271.com^
+||ebis.sbismile.co.jp^
+||ebis.seibu-k.co.jp^
+||ebis.sekisuihouse.co.jp^
+||ebis.sekisuihouse.com^
+||ebis.shabon.com^
+||ebis.smakon.jp^
+||ebis.studio-alice.co.jp^
+||ebis.studioindi.jp^
+||ebis.sunstar-shop.jp^
+||ebis.tokado.jp^
+||ebis.touhan-navi.com^
+||ebis.treasurenet.jp^
+||ebis.umulin-lab.com^
+||ebis.yumeyakata.com^
+||ebis01.vernal.co.jp^
+||ebis01.zkai.co.jp^
+||ebis2020.hoiku-job.net^
+||ebis202001.joyfit.jp^
+||ebisanalysis.mouse-jp.co.jp^
+||ebiscname.clark.ed.jp^
+||ebiscname.english-native.net^
+||ebiscname.infofactory.jp^
+||ebiscname.j-esthe-yoyaku.com^
+||ebiscname.j-esthe.com^
+||ebiscname.native-phrase.com^
+||ebiscname.urr.jp^
+||ebiscosme.tamagokichi.com^
+||ebisfracora.fracora.com^
+||ebisstore.tamagokichi.com^
+||ebistoppan1.kyowahakko-bio-campaign-1.com^
+||emc.dr-stick.shop^
+||frontierconsul02.tsunagaru-office.com^
+||greenjapan-cname.green-japan.com^
+||hokkaidobank.rapi.jp^
+||isebis.takamiclinic.or.jp^
+||isebis.yutoriform.com^
+||itp.phoebebeautyup.com^
+||itpebis03.recella3d.com^
+||kyoufukudoucname.worldsmile.net^
+||marketing.biz.mynavi.jp^
+||marketing.zwei.com^
+||matsubun.matsubun.com^
+||maz.zba.jp^
+||mcad.mods-clinic.com^
+||mcad.mods-clinic.info^
+||mdm.hibinobi-mandom.jp^
+||media.geinoschool-hikaku.net^
+||mgn.ebis.xn--olsz5f0ufw02b.net^
+||msr.p-antiaging.com^
+||ncc.nip-col.jp^
+||nlp-japan.life-and-mind.com^
+||os-om-x.beauty-health.today^
+||os.beauty-health.today^
+||p5mcwdbu.ginzo-buy.jp^
+||partner.haru-shop.jp^
+||sem.tkc-biyou.jp^
+||seo.tkc110.jp^
+||sep02.hinagiku-life.jp^
+||sinceregarden.sincere-garden.jp^
+||test-ad.lucia-c.com^
+||test-ad.mens-lucia.com^
+||tracking.mysurance.co.jp^
+||tracking.nokai.jp^
+||tracking.wao-corp.com^
+||tracking.wao.ne.jp^
+||ureruadebis.papawash.com^
+||urerucname.manara.jp^
+||ureruebis.nintama.co.jp^
+||urr.kumamoto-food.com^
+||www-ebis.384.co.jp^
+||www2.hnavi.co.jp^
+||y8hxgv9m.kobetsu.co.jp^
+||z89yxner8h.datsumou-beauty-times.com^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_eulerian.txt ***
+||0sbm.consobaby.co.uk^
+||16ao.mathon.fr^
+||1bva.societegenerale.fr^
+||1ctc.sfr.fr^
+||2efj.economies.cheque-dejeuner.com^
+||2efj.up.coop^
+||3esm.consubebe.es^
+||5fm.985fm.ca^
+||66jo.societegenerale.fr^
+||6pal.consobaby.com^
+||6swu.cpa-france.org^
+||7lbd4.armandthiery.fr^
+||7mx.eider.com^
+||7mx.eidershop.com^
+||8ezc.sfr.fr^
+||a.audi.fr^
+||a.audifrance.fr^
+||a.oney.es^
+||a.parfumsclub.de^
+||a.perfumesclub.co.uk^
+||a.perfumesclub.com^
+||a.perfumesclub.fr^
+||a.perfumesclub.it^
+||a.perfumesclub.nl^
+||a.perfumesclub.pl^
+||a.perfumesclub.pt^
+||a.weareknitters.co.uk^
+||a.weareknitters.com^
+||a.weareknitters.de^
+||a.weareknitters.dk^
+||a.weareknitters.es^
+||a.weareknitters.fr^
+||a.weareknitters.nl^
+||a.weareknitters.no^
+||a.weareknitters.pl^
+||a.weareknitters.se^
+||a7e.monnierfreres.de^
+||a8ht.hipp.fr^
+||ab.oney.es^
+||ab.perfumesclub.com^
+||ali8.alinea.fr^
+||alp1.drimki.fr^
+||am.belambra.co.uk^
+||am.belambra.com^
+||anz7.allianz-voyage.fr^
+||aod4.societegenerale.fr^
+||ar.allrun.fr^
+||ar.i-run.fr^
+||azg1.emalu-store.com^
+||b1n.carabins.umontreal.ca^
+||bch8.destinia.co^
+||bdj5.terrassesmontecarlosbm.com^
+||bft5.destinia.fr^
+||bja2.destinia.cz^
+||bk.brookeo.fr^
+||blog.tagcentral.fr^
+||bn.voyage-prive.com^
+||bpe2.destinia.co.il^
+||bum7.bymycar.fr^
+||bvz5.destinia.com.tr^
+||bwj4.hrhibiza.com^
+||c0i.ckoi.com^
+||c0p.cepsum.umontreal.ca^
+||c4dv.copinesdevoyage.com^
+||ca.clubavantages.net^
+||cbl6.destinia.gt^
+||cc.conforama.es^
+||cf.campagnes-france.com^
+||ch.credithypo.com^
+||ch0p.darty.com^
+||cls7.theushuaiaexperience.com^
+||cpgo.avatacar.com^
+||cph.credit-pret-hypothecaire.com^
+||cse3.chausport.com^
+||csm.magnetintell.com^
+||csv4.ebs-paris.fr^
+||ct5m.citadium.com^
+||ctp1.bforbank.com^
+||cvi6.destinia.qa^
+||cyf9.destinia.cl^
+||d0f.le-dauphin.com^
+||d2u.dauphinquebec.com^
+||dbj.quebecregion.com^
+||deut1.fdj.fr^
+||deut2.fdj.fr^
+||deut3.fdj.fr^
+||dko.vente-unique.nl^
+||dqs3.darjeeling.fr^
+||dsfe19.madeindesign.com^
+||dv59b.montecarlomeeting.com^
+||dw0c.sfr.fr^
+||dw7u.hotelsbarriere.com^
+||dxe2.heip.fr^
+||ea.access-moto.com^
+||ea.armandthiery.fr^
+||ea.assuronline.com^
+||ea.auchantelecom.fr^
+||ea.audika.com^
+||ea.auvergne-direct.fr^
+||ea.bcassurance.fr^
+||ea.camping-and-co.com^
+||ea.carrefour.com^
+||ea.carrefour.fr^
+||ea.castorama.fr^
+||ea.catimini-boutique.com^
+||ea.catimini.com^
+||ea.ciblo.net^
+||ea.coffrefortplus.com^
+||ea.dcshoes-europe.com^
+||ea.deguisetoi.fr^
+||ea.devred.com^
+||ea.diamant-unique.com^
+||ea.easyvoyage.com^
+||ea.ecotour.com^
+||ea.elstarprevention.com^
+||ea.evaway.com^
+||ea.fleurancenature.com^
+||ea.fleurancenature.fr^
+||ea.francoisesaget.com^
+||ea.franziskasager.de^
+||ea.greenweez.com^
+||ea.greenweez.de^
+||ea.greenweez.es^
+||ea.greenweez.eu^
+||ea.habitat.de^
+||ea.habitat.fr^
+||ea.handsenderplus.com^
+||ea.histoiredor.com^
+||ea.hofmann.es^
+||ea.hofmann.pt^
+||ea.igraal.com^
+||ea.kauf-unique.at^
+||ea.kauf-unique.de^
+||ea.kidiliz.com^
+||ea.labelhabitation.com^
+||ea.lafrancedunordausud.fr^
+||ea.laredoute.pt^
+||ea.lepelican.fr^
+||ea.leskidunordausud.fr^
+||ea.lespagnedunordausud.fr^
+||ea.megustaescribir.com^
+||ea.megustaleer.com.pe^
+||ea.millet-mountain.ch^
+||ea.millet-mountain.com^
+||ea.millet-mountain.de^
+||ea.millet.fr^
+||ea.mistergatesdirect.com^
+||ea.mnt.fr^
+||ea.mondial-assistance.fr^
+||ea.mydailyhotel.com^
+||ea.mywarner.warnerbros.fr^
+||ea.natiloo.com^
+||ea.netvox-assurances.com^
+||ea.nextseguros.es^
+||ea.nomade-aventure.com^
+||ea.odalys-vacances.com^
+||ea.odalys-vacation-rental.com^
+||ea.onestep-boutique.com^
+||ea.online.carrefour.fr^
+||ea.peugeot-assurance.fr^
+||ea.placedestendances.com^
+||ea.poeleaboismaison.com^
+||ea.promovacances.com^
+||ea.quiksilver.eu^
+||ea.radiateurplus.com^
+||ea.rentacar.fr^
+||ea.reunica.com^
+||ea.roxy.eu^
+||ea.sadyr.es^
+||ea.smallable.com^
+||ea.sport2000.fr^
+||ea.telecommandeonline.com^
+||ea.tool-fitness.com^
+||ea.topsante.com^
+||ea.venta-del-diablo.com^
+||ea.venta-unica.com^
+||ea.vente-unique.be^
+||ea.vente-unique.ch^
+||ea.vente-unique.com^
+||ea.vente-unique.lu^
+||ea.ventealapropriete.com^
+||ea.vivus.es^
+||ea.voyage-prive.co.uk^
+||ea.voyage-prive.es^
+||ea.voyage-prive.it^
+||ea.warnerbros.fr^
+||ea.zgeneration.com^
+||eat9.thebeat925.ca^
+||ebc1.capifrance.fr^
+||ef.futuroscope.com^
+||ef.futuroscope.mobi^
+||eit3.destinia.nl^
+||ek8.voyage-prive.com^
+||elr.sfr.fr^
+||erb.tremblant.ca^
+||ert5.rmcsport.tv^
+||et.sncf.com^
+||et.swatch.com^
+||eule1.pmu.fr^
+||eule3.pmu.fr^
+||eule4.pmu.fr^
+||eule5.pmu.fr^
+||euler.pmu.fr^
+||eulerian.alinea.fr^
+||eulerian.astro-way.com^
+||eulerian.belambra.be^
+||eulerian.belambra.fr^
+||eulerian.canal-plus.com^
+||eulerian.eidershop.com^
+||eulerian.eveiletjeux.com^
+||eulerian.look-voyages.fr^
+||eulerian.maison-facile.com^
+||eulerian.malakoffmederic.com^
+||eulerian.mathon.fr^
+||eulerian.monoprix.fr^
+||eulerian.netbooster.com^
+||eulerian.officiel-des-vacances.com^
+||eulerian.oxybul.com^
+||eulerian.sarenza.com^
+||eulerian.siandso.com^
+||eulerian.structube.com^
+||eulerian.telechargement.fr^
+||eulerian.tgv-europe.be^
+||eulerian.tgv-europe.com^
+||eulerian.tgv-europe.es^
+||eulerian.tgv-europe.it^
+||eulerian.tgv-europe.lu^
+||eulerian.tgv-europe.nl^
+||eulerian.thalasseo.com^
+||eulerian.voyage-prive.com^
+||eultech.fnac.com^
+||exd4.destinia.com.au^
+||f0nn.oney.fr^
+||f2.voyage-prive.com^
+||fal2.carrefour-banque.fr^
+||fbu8.hoteldeparismontecarlo.com^
+||fbu8.hotelhermitagemontecarlo.com^
+||fbu8.monte-carlo-beach.com^
+||fbu8.montecarlobay.com^
+||fbu8.montecarloluxuryhotels.com^
+||fbu8.montecarlosbm.com^
+||fbu8.montecarloseasonalsale.com^
+||fbu8.ticket-online.montecarlolive.com^
+||fec1.optimhome.com^
+||fek1.fnactickets.com^
+||fkwc.sfr.fr^
+||fl5dpe.oui.sncf^
+||fma7.aegon.es^
+||fpb8.esce.fr^
+||frc4.placement-direct.fr^
+||fsz1.francoisesaget.com^
+||fsz1.franziskasager.de^
+||fzb5.laboratoire-giphar.fr^
+||fze8.carrefour-banque.fr^
+||fzu4.bysidecar.com^
+||g1be.swisslife-direct.fr^
+||gdm1.toner.fr^
+||gf7t.cheques-cadeaux-culturels.fr^
+||gfn1.ugap.fr^
+||gfv4.destinia.co.za^
+||gi7a.structube.com^
+||gif1.gifi.fr^
+||gli9.inseec-bs.com^
+||gnh2.destinia.lv^
+||gsg9.carrefour-banque.fr^
+||guq9.vente-unique.it^
+||gwtc.sfr.fr^
+||h00c.sfr.fr^
+||hbo5.concours-pass.com^
+||hby7.destinia.it^
+||hde1.repentignychevrolet.com^
+||hgf4.zanzicar.fr^
+||hk2d.tourismemauricie.com^
+||hkj8.evobanco.com^
+||idg1.idgarages.com^
+||igc0.destinia.at^
+||inv3te.oui.sncf^
+||iro.iperceptions.com^
+||irs.iperceptions.com^
+||j2i0.mathon.fr^
+||jcr3.onlyyouhotels.com^
+||jelr1.dili.fr^
+||jfo0.societegenerale.fr^
+||jfp6.destinia.de^
+||jg0c.sfr.fr^
+||jhm3.ifgexecutive.com^
+||jln3.cl-brands.com^
+||jln3.clstudios.com^
+||jn23.madeindesign.ch^
+||jn23.madeindesign.it^
+||jo2f.cheque-cadhoc.fr^
+||ju23.madeindesign.co.uk^
+||jun23.madeindesign.de^
+||jxy6.evobanco.es^
+||kep6.destinia.ie^
+||kux5.raileurope.com^
+||kvt5.blesscollectionhotels.com^
+||kwsjy9.oui.sncf^
+||lbc.lesbonscommerces.fr^
+||leo1.leon-de-bruxelles.fr^
+||let1.devialet.com^
+||lio8.destinia.com.pa^
+||lp.to-lipton.com^
+||lrp7.carrefour-banque.fr^
+||lsv5.belambra.fr^
+||ltm6.destinia.se^
+||lwh1.carrefour-banque.fr^
+||ly8c.caci-online.fr^
+||lzuc.sfr.fr^
+||m3ds.subarumetropolitain.com^
+||mfd.myfirstdressing.com^
+||mgt7.madeindesign.it^
+||mi.miliboo.be^
+||mi.miliboo.ch^
+||mi.miliboo.co.uk^
+||mi.miliboo.com^
+||mi.miliboo.de^
+||mi.miliboo.es^
+||mi.miliboo.it^
+||mi.miliboo.lu^
+||mla3.societegenerale.fr^
+||mm.melia.com^
+||mmz3.beinsports.com^
+||mre6.destinia.ma^
+||msz3.destinia.cn^
+||mud4.destinia.com.eg^
+||mva1.maeva.com^
+||ncx2.voyage-prive.it^
+||net1.netski.com^
+||netc.sfr.fr^
+||ni8.lafuma-boutique.com^
+||ni8.lafuma.com^
+||nlf6.vente-unique.pl^
+||nmo1.orpi.com^
+||nmu3.destinia.be^
+||noa0.compteczam.fr^
+||nrg.red-by-sfr.fr^
+||nym5c.bonlook.com^
+||nym5c.laura.ca^
+||nyt1.biosens-leanature.fr^
+||o68c.sfr.fr^
+||oae6.carrefour-banque.fr^
+||oal2.destinia.co.uk^
+||oek7.april-moto.com^
+||ogb2.biopur-leanature.fr^
+||ogb2.biovie.com^
+||ogb2.eauthermalejonzac.com^
+||ogb2.jardinbio.fr^
+||ogb2.leanatureboutique.com^
+||ogb2.natessance.com^
+||ogb2.sobio-etic.com^
+||oit4.destinia.com.br^
+||oj2q8.montecarlosbm.book-secure.com^
+||ojm4.palladiumhotelgroup.com^
+||one2.onestep.fr^
+||oo.ooshop.com^
+||oph7o.montecarlosbm-corporate.com^
+||opim.pixmania.com^
+||opo4.assuronline.com^
+||oqr4.destinia.in^
+||ouk7.grantalexander.com^
+||p.pmu.fr^
+||pbox.no.photobox.com^
+||pbox.photobox.at^
+||pbox.photobox.be^
+||pbox.photobox.ch^
+||pbox.photobox.co.nz^
+||pbox.photobox.co.uk^
+||pbox.photobox.com.au^
+||pbox.photobox.de^
+||pbox.photobox.dk^
+||pbox.photobox.es^
+||pbox.photobox.fr^
+||pbox.photobox.ie^
+||pbox.photobox.it^
+||pbox.photobox.nl^
+||pbox.photobox.se^
+||pcnphysio-com.ca-eulerian.net^
+||pgt1.voyage-prive.es^
+||piq4.inseec.education^
+||pjh7.us.chantelle.com^
+||pk1u.melanielyne.com^
+||pkc5.hardrockhoteltenerife.com^
+||pm.pmu.fr^
+||po.ponant.com^
+||pol3.cheque-domicile.fr^
+||pp.promocionesfarma.com^
+||ppp7.destinia.kr^
+||pqn7.cheque-dejeuner.fr^
+||prx6.destinia.ch^
+||ps.pmu.fr^
+||pu.pretunique.fr^
+||pv.partenaires-verisure.fr^
+||qal0.destinia.gr^
+||qbl4.ecetech.fr^
+||qjg4.destinia.asia^
+||qpc4.visilab.ch^
+||qpl9.destinia.dk^
+||qsl1.refleximmo.com^
+||qtj0.destinia.pl^
+||quk9.destinia.com.ar^
+||qyn6.ofertastelecable.es^
+||qzl8.destinia.fi^
+||qzu5.carrefour-banque.fr^
+||r1ztni.oui.sncf^
+||r4nds.absorba.com^
+||rce.iperceptions.com^
+||rdc.rachatdecredit.net^
+||rh1a.granions.fr^
+||rjg2.destinia.ly^
+||rmp4.destinia.uy^
+||rqz4.supdigital.fr^
+||rup5.destinia.ru^
+||rvz9.destinia.co.ro^
+||ry0.rythmefm.com^
+||s4e8.cascades.com^
+||sa.lesselectionsskoda.fr^
+||sa.skoda.fr^
+||sa.skodasuperb.fr^
+||sby1.madeindesign.de^
+||sd.securitasdirect.fr^
+||sfp7.eco-conscient.com^
+||sis8.premieremoisson.com^
+||six9e.canal.fr^
+||sk0.monnierfreres.eu^
+||ski1.skiset.com^
+||sno1.snowrental.com^
+||snr4.canalplus.com^
+||srm4.destinia.co.no^
+||ssrlot.lotoquebec.com^
+||ssy7.destinia.com.ua^
+||su1.les-suites.ca^
+||t.locasun-vp.fr^
+||t.locasun.co.uk^
+||t.locasun.de^
+||t.locasun.es^
+||t.locasun.fr^
+||t.locasun.it^
+||t.locasun.nl^
+||t.pmu.fr^
+||t.voyages-sncf.com^
+||t0y.toyota.ca^
+||t9h2.ricardocuisine.com^
+||t9k3a.jeanpaulfortin.com^
+||tdf1.easyviaggio.com^
+||tdf1.easyviajar.com^
+||tdf1.easyvols.fr^
+||tdf1.easyvoyage.co.uk^
+||tdf1.easyvoyage.com^
+||tdf1.easyvoyage.de^
+||tdf1.laredoute.fr^
+||tdf1.vente-unique.pt^
+||tdp1.vivabox.es^
+||tds1.vivabox.be^
+||tmy8.madeindesign.ch^
+||tnz3.carrefour-banque.fr^
+||tr.pmu.fr^
+||tsj0.madeindesign.com^
+||txv0.destinia.hu^
+||udr9.livera.nl^
+||ueb4.destinia.tw^
+||ued8.destinia.sg^
+||uhn9.up-france.fr^
+||ujq1.destinia.is^
+||upload.euleriancdn.net^
+||upz1.destinia.lt^
+||uue2.destinia.ir^
+||uwy4.aegon.es^
+||uzd1.madeindesign.com^
+||v.oney.es^
+||v.oui.sncf^
+||vbe.voyage-prive.be^
+||vch.voyage-prive.ch^
+||vde1.voyage-prive.de^
+||vfo.voyage-prive.co.uk^
+||vfo4.carrefour-banque.fr^
+||vgo.vegaoo.com^
+||vgo.vegaoo.de^
+||vgo.vegaoo.es^
+||vgo.vegaoo.it^
+||vgo.vegaoo.nl^
+||vgo.vegaoo.pt^
+||vgo.vegaooparty.com^
+||vgo.vegaoopro.com^
+||vi.adviso.ca^
+||vnl1.voyage-prive.nl^
+||vpf4.euskaltelofertas.com^
+||vpl.voyage-prive.pl^
+||vqp3.madeindesign.co.uk^
+||vry9.destinia.com^
+||vs.verisure.fr^
+||why3.inseec.education^
+||wlp3.aegon.es^
+||wnd2.destinia.cat^
+||wph2.destinia.us^
+||www.dataholics.tech^
+||www.fasttrack.fr^
+||www.fasttracker.fr^
+||www.mis.tourisme-montreal.org^
+||xay5o.toscane-boutique.fr^
+||xjq5.belambra.be^
+||xuc.monteleone.fr^
+||xy33.smallable.com^
+||xya4.groupefsc.com^
+||yf5.voyage-prive.at^
+||yh6u.dealeusedevoyages.com^
+||yoc.younited-credit.com^
+||ysl3.destinia.ec^
+||yst4.muchoviaje.com^
+||yst4.torviajes.com^
+||yyi7.consobaby.de^
+||zdx5.destinia.pe^
+||zkc5.fleurancenature.fr^
+||zlm2.ecetech.fr^
+||znq9.destinia.mx^
+||zrw1.destinia.jp^
+||zs.voyage-prive.com^
+||zsi7.destinia.do^
+||zum7cc.oui.sncf^
+||zyq2.destinia.sk^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_keyade.txt ***
+||clk.ubi.com^
+||k.brandalley.be^
+||k.brandalley.co.nl^
+||k.brandalley.de^
+||k.brandalley.es^
+||k.brandalley.fr^
+||k.flynas.com^
+||k.hofmann.es^
+||k.laredoute.com^
+||k.laredoute.es^
+||k.laredoute.pt^
+||k.laredoute.ru^
+||k.laredoute.se^
+||k.truffaut.com^
+||k.voyageursdumonde.be^
+||k.voyageursdumonde.ca^
+||k.voyageursdumonde.ch^
+||k.voyageursdumonde.fr^
+||ka.ilius.net^
+||keyade.alltricks.fr^
+||keyade.ooreka.fr^
+||keyade.uniqlo.com^
+||market-keyade.macif.fr^
+||tck.fr.transavia.com^
+||tck.photobox.com^
+||tck.wonderbox.fr^
+||www.keyad.fr^
+||www.keyade.fr^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_lead-forensics.txt ***
+||adssp.dunia.ae^
+||android-analytics-prodhome1.mysoluto.com^
+||assp.semilab.hu^
+||c.cintnetworks.com^
+||capture.norm0care.com^
+||cloud.webtrack.online^
+||data.diagnostics.office.com^
+||f5.track-mv-01.com^
+||fp.measure.office.com^
+||mail.semilab.hu^
+||prodhome1analyticslistener.mysoluto.com^
+||secure.1-cl0ud.com^
+||secure.24-information-acute.com^
+||secure.24-visionaryenterprise.com^
+||secure.365smartenterprising.com^
+||secure.52enterprisingdetails.com^
+||secure.acor1sign.com^
+||secure.agile-company-247.com^
+||secure.agile-company-365.com^
+||secure.agile-enterprise-365.com^
+||secure.agile365enterprise.com^
+||secure.agilecompanyintelligence.com^
+||secure.agiledata7.com^
+||secure.aiea6gaza.com^
+||secure.alda1mure.com^
+||secure.alea6badb.com^
+||secure.alga9frog.com^
+||secure.amos5lynn.com^
+||secure.aran9midi.com^
+||secure.arid5glop.com^
+||secure.badb5refl.com^
+||secure.bait4role.com^
+||secure.bali6nora.com^
+||secure.bank8line.com^
+||secure.barn5bake.com^
+||secure.bass2poll.com^
+||secure.benn8bord.com^
+||secure.bike6debt.com^
+||secure.blue2fund.com^
+||secure.boat3deer.com^
+||secure.bolt8snap.com^
+||secure.bred4tula.com^
+||secure.brie5jiff.com^
+||secure.burn5tilt.com^
+||secure.businessintuition247.com^
+||secure.bux1le001.com^
+||secure.cage6west.com^
+||secure.care5alea.com^
+||secure.cart8draw.com^
+||secure.cast9half.com^
+||secure.cavy9soho.com^
+||secure.ches5sort.com^
+||secure.chic9usia.com^
+||secure.chip2gift.com^
+||secure.chop8live.com^
+||secure.cloud-ingenuity.com^
+||secure.clue6load.com^
+||secure.coat0tire.com^
+||secure.coax7nice.com^
+||secure.companyperceptive-365.com^
+||secure.copy9loom.com^
+||secure.coup7cold.com^
+||secure.cuba7tilt.com^
+||secure.curl7bike.com^
+||secure.dana8herb.com^
+||secure.data-creativecompany.com^
+||secure.data-ingenuity.com^
+||secure.data-insight365.com^
+||secure.dawn3host.com^
+||secure.deng3rada.com^
+||secure.dens1raec.com^
+||secure.details24group.com^
+||secure.detailsinventivegroup.com^
+||secure.dial4gwyn.com^
+||secure.diet3dart.com^
+||secure.doll8tune.com^
+||secure.doll9jiva.com^
+||secure.dump4barn.com^
+||secure.east2pony.com^
+||secure.easy0bark.com^
+||secure.emeu0circ.com^
+||secure.enterprise-operation-inspired.com^
+||secure.enterpriseforesight247.com^
+||secure.enterprisingoperation-7.com^
+||secure.etym6cero.com^
+||secure.fear7calk.com^
+||secure.feed5baby.com^
+||secure.feed5mown.com^
+||secure.file3size.com^
+||secure.flow8free.com^
+||secure.food9wave.com^
+||secure.frog9alea.com^
+||secure.game9time.com^
+||secure.gard4mass.com^
+||secure.garm9yuma.com^
+||secure.gaza2lote.com^
+||secure.gift2pair.com^
+||secure.give2hill.com^
+||secure.glue1lazy.com^
+||secure.golp4elik.com^
+||secure.grow1maid.com^
+||secure.haag0some.com^
+||secure.haig7anax.com^
+||secure.half1hell.com^
+||secure.hall3hook.com^
+||secure.harm6stop.com^
+||secure.hazy4cant.com^
+||secure.head3high.com^
+||secure.hear8crew.com^
+||secure.heat6have.com^
+||secure.herb2warn.com^
+||secure.herb7calk.com^
+||secure.hero6bell.com^
+||secure.hims1nice.com^
+||secure.hiss3lark.com^
+||secure.hook6vein.com^
+||secure.innovation-perceptive52.com^
+||secure.insightful-cloud-365.com^
+||secure.insightful-cloud-7.com^
+||secure.insightful-company-52.com^
+||secure.insightful-enterprise-247.com^
+||secure.insightful-enterprise-intelligence.com^
+||secure.insightfulbusinesswisdom.com^
+||secure.insightfulcloudintuition.com^
+||secure.insightfulcompanyinsight.com^
+||secure.intelligence-enterprise.com^
+||secure.intelligent-business-wisdom.com^
+||secure.intelligent-company-365.com^
+||secure.intelligent-company-foresight.com^
+||secure.intelligent-data-247.com^
+||secure.intelligentcloudforesight.com^
+||secure.intelligentcompanywisdom.com^
+||secure.intelligentdataintuition.com^
+||secure.intelligentdatawisdom.com^
+||secure.intuitive-intuition.com^
+||secure.inventive52intuitive.com^
+||secure.inventiveperception365.com^
+||secure.iron0walk.com^
+||secure.jaup0lake.com^
+||secure.jebb8hurt.com^
+||secure.jody0sora.com^
+||secure.josh7cuba.com^
+||secure.keep0bury.com^
+||secure.keet1liod.com^
+||secure.kick1pore.com^
+||secure.kilo6alga.com^
+||secure.kota3chat.com^
+||secure.kpr2exp21.com^
+||secure.lack4skip.com^
+||secure.lane5down.com^
+||secure.late6year.com^
+||secure.late8chew.com^
+||secure.lave6loki.com^
+||secure.lazy8krti.com^
+||secure.lead5beat.com^
+||secure.left5lock.com^
+||secure.line6agar.com^
+||secure.link5view.com^
+||secure.liod1ours.com^
+||secure.list1holp.com^
+||secure.loki8lave.com^
+||secure.loom3otto.com^
+||secure.lope4refl.com^
+||secure.lote1otto.com^
+||secure.mack7oyes.com^
+||secure.main5poem.com^
+||secure.make6pain.com^
+||secure.mali4blat.com^
+||secure.malm1coax.com^
+||secure.mari4norm.com^
+||secure.marx7loki.com^
+||secure.mass1soma.com^
+||secure.mean8sigh.com^
+||secure.meet3monk.com^
+||secure.mews2ruck.com^
+||secure.mile0tire.com^
+||secure.mill8grip.com^
+||secure.misc1bulk.com^
+||secure.moat4shot.com^
+||secure.mon-com-01.com^
+||secure.mown5gaze.com^
+||secure.navy9gear.com^
+||secure.neck6bake.com^
+||secure.nice3aiea.com^
+||secure.nipe4head.com^
+||secure.node7seat.com^
+||secure.nong3bram.com^
+||secure.nora7nice.com^
+||secure.norm0care.com^
+||secure.nyctrl32.com^
+||secure.oboe3broo.com^
+||secure.office-cloud-52.com^
+||secure.office-information-24.com^
+||secure.office-insightdetails.com^
+||secure.oita4bali.com^
+||secure.otto5loki.com^
+||secure.ours3care.com^
+||secure.page1monk.com^
+||secure.page9awry.com^
+||secure.pair1tune.com^
+||secure.pass8heal.com^
+||secure.path5wall.com^
+||secure.pdxor02.com^
+||secure.peak2poem.com^
+||secure.peep1alea.com^
+||secure.perceptionastute7.com^
+||secure.perk0mean.com^
+||secure.plug1luge.com^
+||secure.plug4norm.com^
+||secure.poor5zero.com^
+||secure.pump8walk.com^
+||secure.raab3frog.com^
+||secure.rals4alum.com^
+||secure.rate2self.com^
+||secure.rate8deny.com^
+||secure.rear9axis.com^
+||secure.redd7liod.com^
+||secure.refl3alea.com^
+||secure.rigi9bury.com^
+||secure.rime8lope.com^
+||secure.ripe8book.com^
+||secure.risk8belt.com^
+||secure.roar9beer.com^
+||secure.rock5rice.com^
+||secure.rote8mino.com^
+||secure.ruth8badb.com^
+||secure.ryke4peep.com^
+||secure.said3page.com^
+||secure.sale0home.com^
+||secure.saon6harz.com^
+||secure.scan6show.com^
+||secure.seat6worn.com^
+||secure.shoo5woop.com^
+||secure.shrfbdg004.com^
+||secure.silk0palm.com^
+||secure.skye6oner.com^
+||secure.slim2disc.com^
+||secure.smart-business-365.com^
+||secure.smart-business-foresight.com^
+||secure.smart-business-ingenuity.com^
+||secure.smart-business-intuition.com^
+||secure.smart-cloud-intelligence.com^
+||secure.smart-company-365.com^
+||secure.smart-company-vision.com^
+||secure.smart-enterprise-365.com^
+||secure.smart-enterprise-52.com^
+||secure.smart-enterprise-7.com^
+||secure.smart-enterprise-acumen.com^
+||secure.smartenterprisewisdom.com^
+||secure.snta0034.com^
+||secure.soil5hear.com^
+||secure.soma9vols.com^
+||secure.sour1bare.com^
+||secure.sour7will.com^
+||secure.spit0stge.com^
+||secure.sugh8yami.com^
+||secure.svr007phz.com^
+||secure.swat8toot.com^
+||secure.tank3pull.com^
+||secure.team8save.com^
+||secure.tent0mown.com^
+||secure.text6film.com^
+||secure.tire1soak.com^
+||secure.tm1-001.com^
+||secure.toll6kerb.com^
+||secure.torn6back.com^
+||secure.toru0vane.com^
+||secure.tray0bury.com^
+||secure.tube6sour.com^
+||secure.tula9mari.com^
+||secure.vane3alga.com^
+||secure.venture-365-inspired.com^
+||secure.venture-enterprising.com^
+||secure.venture365office.com^
+||secure.vice4beek.com^
+||secure.vick6duty.com^
+||secure.visionary-business-52.com^
+||secure.visionary-business-ingenuity.com^
+||secure.visionary-company-ingenuity.com^
+||secure.visionary-data-intuition.com^
+||secure.visionary-enterprise-ingenuity.com^
+||secure.visionary-enterprise-wisdom.com^
+||secure.visionary365enterprise.com^
+||secure.visionarybusiness7.com^
+||secure.visionarybusinessacumen.com^
+||secure.visionarycloudvision.com^
+||secure.visionarycompany52.com^
+||secure.vols7feed.com^
+||secure.wait8hurl.com^
+||secure.wake4tidy.com^
+||secure.want7feed.com^
+||secure.wauk1care.com^
+||secure.weed6tape.com^
+||secure.wild0army.com^
+||secure.wild8prey.com^
+||secure.wine9bond.com^
+||secure.wivo2gaza.com^
+||secure.yama1hove.com^
+||secure.yami8alea.com^
+||secure.yeld9auto.com^
+||secure.yirr5frog.com^
+||segment-api.inrix.com^
+||utm.semilab.hu^
+||utm.shireburn.com^
+||www.1-cl0ud.com^
+||www.1-creative-1.com^
+||www.100-flannelman.com^
+||www.123-tracker.com^
+||www.143nchrtl3.com^
+||www.1h2h54jkw.com^
+||www.200-rockergod.com^
+||www.200summit.com^
+||www.22-trk-srv.com^
+||www.24-visionaryenterprise.com^
+||www.33-trk-srv.com^
+||www.33infra-strat.com^
+||www.44-trk-srv.com^
+||www.44tele-infra.com^
+||www.55-trk-srv.com^
+||www.66-trk-srv.com^
+||www.66infra-strat.com^
+||www.7-companycompany.com^
+||www.88infra-strat.com^
+||www.acor1sign.com^
+||www.active-trk7.com^
+||www.adgjl13.com^
+||www.agile-company-365.com^
+||www.agile-enterprise-365.com^
+||www.agile365enterprise.com^
+||www.agiledata7.com^
+||www.aiea6gaza.com^
+||www.alda1mure.com^
+||www.alea6badb.com^
+||www.alga9frog.com^
+||www.alnw3nsdi.com^
+||www.alskd34.com^
+||www.altabold1.com^
+||www.amos5lynn.com^
+||www.angorch-cdr7.com^
+||www.ape78cn2.com^
+||www.aqedsw4.com^
+||www.aran9midi.com^
+||www.arid5glop.com^
+||www.asdfg23.com^
+||www.atl-6-ga.com^
+||www.azera-s014.com^
+||www.badb5refl.com^
+||www.bae5tracker.com^
+||www.bait4role.com^
+||www.bali6nora.com^
+||www.bank8line.com^
+||www.bass2poll.com^
+||www.baw5tracker.com^
+||www.bdg001a.com^
+||www.benn8bord.com^
+||www.berg-6-82.com^
+||www.bis-dic15.com^
+||www.blocwhite7.com^
+||www.blue2fund.com^
+||www.blzsnd02.com^
+||www.boat3deer.com^
+||www.bolt8snap.com^
+||www.bosctrl32.com^
+||www.bred4tula.com^
+||www.brie5jiff.com^
+||www.burn5tilt.com^
+||www.business-path-55.com^
+||www.bux1le001.com^
+||www.cable-cen-01.com^
+||www.cage6west.com^
+||www.care5alea.com^
+||www.cart8draw.com^
+||www.cast9half.com^
+||www.cavy9soho.com^
+||www.cben9a9s1.com^
+||www.cdbgmj12.com^
+||www.cdert34.com^
+||www.central-core-7.com^
+||www.centralcore7.com^
+||www.ches5sort.com^
+||www.chic9usia.com^
+||www.chip2gift.com^
+||www.chop8live.com^
+||www.click-to-trace.com^
+||www.cloud-9751.com^
+||www.cloud-ingenuity.com^
+||www.cloud-trail.com^
+||www.cloudpath82.com^
+||www.cloudtracer101.com^
+||www.clue6load.com^
+||www.cnej4912jks.com^
+||www.cnt-tm-1.com^
+||www.cntr-di5.com^
+||www.cntr-di7.com^
+||www.co85264.com^
+||www.coat0tire.com^
+||www.coax7nice.com^
+||www.connct-9.com^
+||www.copy9loom.com^
+||www.core-cen-54.com^
+||www.coup7cold.com^
+||www.crb-frm-71.com^
+||www.create-tracking.com^
+||www.cten10010.com^
+||www.cuba7tilt.com^
+||www.cube-78.com^
+||www.curl7bike.com^
+||www.dakic-ia-300.com^
+||www.dana8herb.com^
+||www.data-ingenuity.com^
+||www.data-insight365.com^
+||www.dawn3host.com^
+||www.dbrtkwaa81.com^
+||www.deng3rada.com^
+||www.dens1raec.com^
+||www.dhenr54m.com^
+||www.dial4gwyn.com^
+||www.direct-aws-a1.com^
+||www.direct-azr-78.com^
+||www.discover-path.com^
+||www.discovertrail.net^
+||www.djkeun1bal.com^
+||www.dkjn1bal2.com^
+||www.doll8tune.com^
+||www.doll9jiva.com^
+||www.domainanalytics.net^
+||www.dtc-330d.com^
+||www.dtc-v6t.com^
+||www.dthvdr9.com^
+||www.dump4barn.com^
+||www.east2pony.com^
+||www.easy0bark.com^
+||www.ed-clr-01.com^
+||www.efvrgb12.com^
+||www.ela-3-tnk.com^
+||www.elite-s001.com^
+||www.emeu0circ.com^
+||www.enterpriseforesight247.com^
+||www.enterprisingoperation-7.com^
+||www.etym6cero.com^
+||www.eue21east.com^
+||www.eue27west.com^
+||www.eventcapture03.com^
+||www.eventcapture06.com^
+||www.ever-track-51.com^
+||www.explore-123.com^
+||www.fear7calk.com^
+||www.feed5baby.com^
+||www.feed5mown.com^
+||www.file3size.com^
+||www.final-aws-01.com^
+||www.final-azr-01.com^
+||www.finger-info.net^
+||www.flow8free.com^
+||www.food9wave.com^
+||www.frog9alea.com^
+||www.game9time.com^
+||www.gard4mass.com^
+||www.garm9yuma.com^
+||www.gaza2lote.com^
+||www.gbl007.com^
+||www.gblwebcen.com^
+||www.gift2pair.com^
+||www.glb12pkgr.com^
+||www.glb21pkgr.com^
+||www.gldsta-02-or.com^
+||www.glue1lazy.com^
+||www.golp4elik.com^
+||www.grow1maid.com^
+||www.gtcslt-di2.com^
+||www.gw100-10.com^
+||www.haag0some.com^
+||www.haig7anax.com^
+||www.half1hell.com^
+||www.hall3hook.com^
+||www.harm6stop.com^
+||www.hazy4cant.com^
+||www.head3high.com^
+||www.hear8crew.com^
+||www.heat6have.com^
+||www.herb2warn.com^
+||www.herb7calk.com^
+||www.hero6bell.com^
+||www.hims1nice.com^
+||www.hiss3lark.com^
+||www.hook6vein.com^
+||www.hrb1tng0.com^
+||www.hunt-leads.com^
+||www.hunter-details.com^
+||www.hvgcfx1.com^
+||www.inc9lineedge.com^
+||www.incline9edge.com^
+||www.indpcr1.com^
+||www.insightful-company-52.com^
+||www.insightfulbusinesswisdom.com^
+||www.insightfulcompanyinsight.com^
+||www.intelligence-enterprise.com^
+||www.intelligent-company-foresight.com^
+||www.intelligent-data-247.com^
+||www.intelligentcompanywisdom.com^
+||www.intelligentdatawisdom.com^
+||www.ip-a-box.com^
+||www.ip-route.net^
+||www.iproute66.com^
+||www.iron0walk.com^
+||www.jaup0lake.com^
+||www.jebb8hurt.com^
+||www.jenxsw21lb.com^
+||www.jody0sora.com^
+||www.josh7cuba.com^
+||www.jsnzoe301m.com^
+||www.keet1liod.com^
+||www.kick1pore.com^
+||www.kilo6alga.com^
+||www.kota3chat.com^
+||www.kpr2exp21.com^
+||www.kprbexp21.com^
+||www.ksk-mjto-001.com^
+||www.ksyrium0014.com^
+||www.lack4skip.com^
+||www.laksjd4.com^
+||www.lane5down.com^
+||www.lansrv020.com^
+||www.lansrv030.com^
+||www.lansrv040.com^
+||www.lansrv050.com^
+||www.lansrv060.com^
+||www.lansrv070.com^
+||www.lansrv080.com^
+||www.lansrv090.com^
+||www.late6year.com^
+||www.late8chew.com^
+||www.lave6loki.com^
+||www.lazy8krti.com^
+||www.ldfr-cloud.net^
+||www.lead-123.com^
+||www.lead-analytics-1000.com^
+||www.lead-watcher.com^
+||www.leads.goldenshovel.com^
+||www.ledradn.com^
+||www.left5lock.com^
+||www.letterbox-path.com^
+||www.letterboxtrail.com^
+||www.lforen-cloud-trace.com^
+||www.line6agar.com^
+||www.link5view.com^
+||www.liod1ours.com^
+||www.list1holp.com^
+||www.lmknjb1.com^
+||www.loki8lave.com^
+||www.loom3otto.com^
+||www.lope4refl.com^
+||www.lote1otto.com^
+||www.m1ll1c4n0.com^
+||www.mack7oyes.com^
+||www.main5poem.com^
+||www.make6pain.com^
+||www.mali4blat.com^
+||www.malm1coax.com^
+||www.mari4norm.com^
+||www.marx7loki.com^
+||www.mass1soma.com^
+||www.mavic852.com^
+||www.mbljpu9.com^
+||www.me1294hlx.com^
+||www.mean8sigh.com^
+||www.mediaedge-info.com^
+||www.meet3monk.com^
+||www.mews2ruck.com^
+||www.mialbj6.com^
+||www.mile0tire.com^
+||www.mill8grip.com^
+||www.misc1bulk.com^
+||www.mnbvc34.com^
+||www.moat4shot.com^
+||www.mon-com-01.com^
+||www.mon-com-net.com^
+||www.mown5gaze.com^
+||www.n-core-pipe.com^
+||www.navy9gear.com^
+||www.neck6bake.com^
+||www.network-handle.com^
+||www.nhyund4.com^
+||www.nice3aiea.com^
+||www.nipe4head.com^
+||www.node7seat.com^
+||www.nora7nice.com^
+||www.norm0care.com^
+||www.nw-rail-03.com^
+||www.ny79641.com^
+||www.nyc14ny.com^
+||www.nyctrl32.com^
+||www.oboe3broo.com^
+||www.ofnsv69.com^
+||www.oita4bali.com^
+||www.okc-5190.com^
+||www.okc-5191.com^
+||www.operationintelligence7.com^
+||www.optimum-xyz.com^
+||www.otto5loki.com^
+||www.page1monk.com^
+||www.page9awry.com^
+||www.pair1tune.com^
+||www.pass-1234.com^
+||www.pass8heal.com^
+||www.path-follower.com^
+||www.path-trail.com^
+||www.path5wall.com^
+||www.pdxor02.com^
+||www.peak-ip-54.com^
+||www.peak2poem.com^
+||www.peep1alea.com^
+||www.perk0mean.com^
+||www.pkrchp001.com^
+||www.plokij1.com^
+||www.plug1luge.com^
+||www.plug4norm.com^
+||www.poiuy12.com^
+||www.poor5zero.com^
+||www.poqwo3.com^
+||www.pri12mel.com^
+||www.prt-or-067.com^
+||www.pto-slb-09.com^
+||www.pump8walk.com^
+||www.qetup12.com^
+||www.qlzn6i1l.com^
+||www.qpwoei2.com^
+||www.r45j15.com^
+||www.raab3frog.com^
+||www.rals4alum.com^
+||www.rate2self.com^
+||www.rate8deny.com^
+||www.rdeswa1.com^
+||www.rear9axis.com^
+||www.redd7liod.com^
+||www.refl3alea.com^
+||www.rep0pkgr.com^
+||www.req12pkg.com^
+||www.req12pkgb.com^
+||www.rfr-69.com^
+||www.rigi9bury.com^
+||www.rime8lope.com^
+||www.ripe8book.com^
+||www.risk8belt.com^
+||www.rng-snp-003.com^
+||www.roar9beer.com^
+||www.rock5rice.com^
+||www.rote8mino.com^
+||www.ruth8badb.com^
+||www.ryke4peep.com^
+||www.s3network1.com^
+||www.s5network1.com^
+||www.saas-eue-1.com^
+||www.saas-euw-1.com^
+||www.said3page.com^
+||www.sale0home.com^
+||www.san-spr-01.net^
+||www.saon6harz.com^
+||www.sas15k01.com^
+||www.scan-trail.com^
+||www.scan6show.com^
+||www.sch-alt-91.com^
+||www.sch-crt-91.com^
+||www.se-core-pipe.com^
+||www.sea-nov-1.com^
+||www.seat6worn.com^
+||www.seatac15.com^
+||www.shoo5woop.com^
+||www.shrfbdg004.com^
+||www.skye6oner.com^
+||www.sl-ct5.com^
+||www.slim2disc.com^
+||www.smart-business-365.com^
+||www.smart-business-foresight.com^
+||www.smart-business-intuition.com^
+||www.smart-cloud-intelligence.com^
+||www.smart-company-365.com^
+||www.smart-enterprise-365.com^
+||www.smart-enterprise-7.com^
+||www.smart-enterprise-acumen.com^
+||www.snta0034.com^
+||www.softtrack08.com^
+||www.soil5hear.com^
+||www.soma9vols.com^
+||www.sour1bare.com^
+||www.sour7will.com^
+||www.spit0stge.com^
+||www.spn-twr-14.com^
+||www.srv00infra.com^
+||www.srv1010elan.com^
+||www.srv2020real.com^
+||www.srvtrkxx1.com^
+||www.srvtrkxx2.com^
+||www.star-cntr-5.com^
+||www.sugh8yami.com^
+||www.svr-prc-01.com^
+||www.svr007phz.com^
+||www.sw-rail-7.com^
+||www.swat8toot.com^
+||www.syntace-094.com^
+||www.tank3pull.com^
+||www.tent0mown.com^
+||www.text6film.com^
+||www.tghbn12.com^
+||www.tgvrfc4.com^
+||www.the-lead-tracker.com^
+||www.tire1soak.com^
+||www.tm1-001.com^
+||www.toll6kerb.com^
+||www.torn6back.com^
+||www.toru0vane.com^
+||www.trace-2000.com^
+||www.track-web.net^
+||www.trackdiscovery.net^
+||www.trackercloud.net^
+||www.trackinvestigate.net^
+||www.trail-route.com^
+||www.trail-viewer.com^
+||www.trail-web.com^
+||www.trailbox.net^
+||www.tray0bury.com^
+||www.trksrv44.com^
+||www.trksrv45.com^
+||www.trksrv46.com^
+||www.tst14netreal.com^
+||www.tst16infra.com^
+||www.tube6sour.com^
+||www.tula9mari.com^
+||www.uhygtf1.com^
+||www.ult-blk-cbl.com^
+||www.vane3alga.com^
+||www.vcentury01.com^
+||www.venture-enterprising.com^
+||www.vice4beek.com^
+||www.vick6duty.com^
+||www.visionary-business-52.com^
+||www.visionary-data-intuition.com^
+||www.visionary-enterprise-ingenuity.com^
+||www.visionary-enterprise-wisdom.com^
+||www.visionary365enterprise.com^
+||www.visionarybusiness7.com^
+||www.visionarybusinessacumen.com^
+||www.visionarycompany52.com^
+||www.vols7feed.com^
+||www.wa52613.com^
+||www.wait8hurl.com^
+||www.want7feed.com^
+||www.wauk1care.com^
+||www.web-01-gbl.com^
+||www.web-cntr-07.com^
+||www.websiteexploration.com^
+||www.wild0army.com^
+||www.wild8prey.com^
+||www.wivo2gaza.com^
+||www.www-path.com^
+||www.yama1hove.com^
+||www.yami8alea.com^
+||www.ydwsjt-2.com^
+||www.yeld9auto.com^
+||www.yirr5frog.com^
+||www.zcbmn14.com^
+||www.zmxncb5.com^
+||www.zxcvb23.com^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_webtrekk.txt ***
+||a.deutschehospitality.com^
+||a.hrewards.com^
+||a.jaz-hotel.com^
+||a.maxxhotel.com^
+||a.zleep.com^
+||abc.bayer04.de^
+||analytics.hermesworld.com^
+||analytics.myhermes.de^
+||app03.ikk-classic.de^
+||cdn7.baunetz.de^
+||census.misterspex.at^
+||census.misterspex.no^
+||count.bank99.at^
+||da.bodenhaus.de^
+||da.hornbach.at^
+||da.hornbach.be^
+||da.hornbach.ch^
+||da.hornbach.cz^
+||da.hornbach.de^
+||da.hornbach.lu^
+||da.hornbach.nl^
+||da.hornbach.ro^
+||da.hornbach.se^
+||da.hornbach.sk^
+||data.adlermode.com^
+||data.all-in.de^
+||data.allgaeuer-zeitung.de^
+||data.campaign.prenatal.com^
+||data.campaign.toyscenter.it^
+||data.charles-colby.com^
+||data.engelhorn.com^
+||data.engelhorn.de^
+||data.goertz.de^
+||data.inbank.it^
+||data.janvanderstorm.de^
+||data.kulturkaufhaus.de^
+||data.leipzig.de^
+||data.main-ding.de^
+||data.mainpost.de^
+||data.mapp.com^
+||data.mediaworld.it^
+||data.shirtmaster.com^
+||data.srf.ch^
+||data.vdi-wissensforum.de^
+||data.volksfreund.de^
+||data.westlotto.de^
+||daten.union-investment.de^
+||di.fotos-fuers-leben.ch^
+||di.ifolor.at^
+||di.ifolor.be^
+||di.ifolor.ch^
+||di.ifolor.com^
+||di.ifolor.de^
+||di.ifolor.dk^
+||di.ifolor.es^
+||di.ifolor.fi^
+||di.ifolor.fr^
+||di.ifolor.ie^
+||di.ifolor.it^
+||di.ifolor.lu^
+||di.ifolor.net^
+||di.ifolor.nl^
+||di.ifolor.se^
+||di.spreadmorelove.ch^
+||ed.emp-online.ch^
+||ed.emp-online.com^
+||ed.emp-online.es^
+||ed.emp-online.fr^
+||ed.emp-online.it^
+||ed.emp-shop.cz^
+||ed.emp-shop.dk^
+||ed.emp-shop.no^
+||ed.emp-shop.pl^
+||ed.emp-shop.se^
+||ed.emp-shop.sk^
+||ed.emp.at^
+||ed.emp.co.uk^
+||ed.emp.de^
+||ed.emp.fi^
+||ed.emp.ie^
+||ed.large.be^
+||ed.large.nl^
+||ed.originalpress.com^
+||eht.endress.com^
+||fiwinet.firmenwissen.com^
+||fiwinet.firmenwissen.de^
+||hbbtv-track.prosieben.de^
+||hbbtv-track.prosiebensat1puls4.com^
+||image.deginvest.de^
+||image.kfw-entwicklungsbank.de^
+||image.kfw-formularsammlung.de^
+||image.kfw-ipex-bank.de^
+||image.kfw.de^
+||images1.test.de^
+||img.buch.ch^
+||img.foodspring.at^
+||img.foodspring.ch^
+||img.foodspring.co.uk^
+||img.foodspring.cz^
+||img.foodspring.de^
+||img.foodspring.dk^
+||img.foodspring.es^
+||img.foodspring.fi^
+||img.foodspring.fr^
+||img.foodspring.hr^
+||img.foodspring.it^
+||img.foodspring.nl^
+||img.foodspring.se^
+||img.sparkasse-koelnbonn.de^
+||info.deltapublishing.co.uk^
+||info.klett-sprachen.de^
+||intelligence.officialwesthamstore.com^
+||is.lg.com^
+||mapp.ewm.co.uk^
+||mapp.jysk.dk^
+||mapp.jysk.nl^
+||mapp.yesstyle.com^
+||mff.messefrankfurt.com^
+||mit.bhw.de^
+||mit.db.com^
+||mit.deutsche-bank.de^
+||mit.deutschebank.be^
+||mit.deutschewealth.com^
+||mit.dslbank.de^
+||mit.dws.com^
+||mit.dws.de^
+||mit.postbank.de^
+||mit.researchlog.db.com^
+||mit.researchlog.dbresearch.com^
+||mit.researchlog.dbresearch.de^
+||mon.ingservices.nl^
+||now.peek-cloppenburg.de^
+||on.dextra.ch^
+||ot.obi-baumarkt.ch^
+||ot.obi-brico.ch^
+||ot.obi-italia.it^
+||ot.obi-ticino.ch^
+||ot.obi.at^
+||ot.obi.ba^
+||ot.obi.ch^
+||ot.obi.com^
+||ot.obi.cz^
+||ot.obi.de^
+||ot.obi.hu^
+||ot.obi.pl^
+||ot.obi.si^
+||ot.obi.sk^
+||pix.airbusgroup.com^
+||pix.eads.com^
+||pix.telekom-dienste.de^
+||pix.telekom.com^
+||pix.telekom.de^
+||pixel.augsburger-allgemeine.de^
+||proditor.sparda.de^
+||prophet.heise-academy.de^
+||prophet.heise.de^
+||scout.alpinetrek.co.uk^
+||scout.alpiniste.fr^
+||scout.berg-freunde.at^
+||scout.berg-freunde.ch^
+||scout.bergfreunde.de^
+||scout.bergfreunde.dk^
+||scout.bergfreunde.es^
+||scout.bergfreunde.eu^
+||scout.bergfreunde.fi^
+||scout.bergfreunde.it^
+||scout.bergfreunde.nl^
+||scout.bergfreunde.no^
+||scout.bergfreunde.se^
+||service.hcob-bank.de^
+||spr.bild.de^
+||spr.welt.de^
+||startrekk.flaconi.at^
+||startrekk.flaconi.de^
+||startrekk.flaconi.fr^
+||startrekk.flaconi.pl^
+||statistics.tuv.com^
+||sub1.cosmosdirekt.de^
+||text.benefitsatwork.be^
+||text.benefitsatwork.ch^
+||text.benefitsatwork.pl^
+||text.benefitsatwork.pt^
+||text.convenzioniaziendali.it^
+||text.mitarbeiterangebote.at^
+||text.mitarbeiterangebote.de^
+||text.rahmenvereinbarungen.de^
+||tippcom01.tipp24.com^
+||tr.computeruniverse.net^
+||tr.suedkurier.de^
+||track.emeza.ch^
+||track.emeza.com^
+||track.kiomi.com^
+||track.yellostrom.de^
+||tracking.eduscho.at^
+||tracking.netcologne.de^
+||tracking.shop.hunter.easynet.de^
+||tracking.tchibo.ch^
+||tracking.tchibo.com.tr^
+||tracking.tchibo.cz^
+||tracking.tchibo.de^
+||tracking.tchibo.hu^
+||tracking.tchibo.pl^
+||tracking.tchibo.sk^
+||trail-001.schleich-s.com^
+||trk.blume2000.de^
+||trk.krebsversicherung.de^
+||trk.nuernberger.de^
+||trk.nuernberger.digital^
+||w.ilfattoquotidiano.it^
+||w3.aktionaersbank.de^
+||w3.flatex.es^
+||w3.flatex.nl^
+||w7.berlin.de^
+||w7.berliner-silvester.de^
+||w7.weihnachteninberlin.de^
+||wa.planet-wissen.de^
+||wa.quarks.de^
+||wa.wdr.de^
+||wa.wdrmaus.de^
+||waaf.medion.com^
+||waaf1.aldi-gaming.de^
+||waaf1.aldi-music.de^
+||waaf1.aldilife.com^
+||waaf1.aldiphotos.co.uk^
+||waaf1.alditalk.de^
+||waaf1.hoferfotos.at^
+||watg.xxxlutz.com^
+||wbtrkk.deutschlandcard.de^
+||wbtrkk.teufel.ch^
+||wbtrkk.teufel.de^
+||wbtrkk.teufelaudio.at^
+||wbtrkk.teufelaudio.be^
+||wbtrkk.teufelaudio.com^
+||wbtrkk.teufelaudio.es^
+||wbtrkk.teufelaudio.fr^
+||wbtrkk.teufelaudio.it^
+||wbtrkk.teufelaudio.nl^
+||wbtrkk.teufelaudio.pl^
+||web.autobodytoolmart.com^
+||web.b2bimperialfashion.com^
+||web.b2bpleasefashion.com^
+||web.bankofscotland.de^
+||web.campaign.jaked.com^
+||web.campaign.miriade.com^
+||web.campaign.v73.it^
+||web.collisionservices.com^
+||web.comunicazioni.iol.it^
+||web.crm.beps.it^
+||web.diebayerische.de^
+||web.e.aldermore.co.uk^
+||web.e.bolts.co.uk^
+||web.e.drainagepipe.co.uk^
+||web.e.guttersupplies.co.uk^
+||web.e.panmacmillan.com^
+||web.e.pbslgroup.co.uk^
+||web.e.professionalbuildingsupplies.co.uk^
+||web.e.pvccladding.com^
+||web.email.farrow-ball.com^
+||web.email.pmtonline.co.uk^
+||web.email.principality.co.uk^
+||web.email.superga.co.uk^
+||web.email.theindependentpharmacy.co.uk^
+||web.email.turtlebay.co.uk^
+||web.email.umbro.co.uk^
+||web.email.zone3.com^
+||web.ideaautorepair.com^
+||web.info.bodybuildingwarehouse.co.uk^
+||web.info.bodybuildingwarehouse.com^
+||web.info.bonprix.es^
+||web.info.teamwarrior.com^
+||web.info.vantastic-foods.com^
+||web.info.varelotteriet.dk^
+||web.info.yeppon.it^
+||web.jana-shoes.com^
+||web.mail.parmalat.it^
+||web.mail.proximaati.com^
+||web.mailing.storz-bickel.com^
+||web.mailing.vapormed.com^
+||web.mapp.docpeter.it^
+||web.mapp.edenred.it^
+||web.mapp.ilgiardinodeilibri.it^
+||web.mapp.naturzeit.com^
+||web.mapp.skousen.dk^
+||web.mapp.skousen.no^
+||web.mapp.tretti.se^
+||web.mapp.whiteaway.com^
+||web.mapp.whiteaway.no^
+||web.mapp.whiteaway.se^
+||web.marcotozzi.com^
+||web.marketing.elbenwald.de^
+||web.marketing.jellybelly.com^
+||web.mytoys.de^
+||web.news.creedfragrances.co.uk^
+||web.news.dixiefashion.com^
+||web.news.eprice.it^
+||web.news.imperialfashion.com^
+||web.news.lancel.com^
+||web.news.paganistore.com^
+||web.news.piquadro.com^
+||web.news.pleasefashion.com^
+||web.news.thebridge.it^
+||web.newsletter.koffer-to-go.de^
+||web.newsletter.viviennewestwood.com^
+||web.newsletterit.esprinet.com^
+||web.online.monnalisa.com^
+||web.pages.lloydspharmacy.com^
+||web.redazione.milanofinanza.it^
+||web.sensilab.com^
+||web.sensilab.cz^
+||web.sensilab.de^
+||web.sensilab.dk^
+||web.sensilab.es^
+||web.sensilab.hr^
+||web.sensilab.ie^
+||web.sensilab.it^
+||web.sensilab.org^
+||web.sensilab.pt^
+||web.sensilab.ro^
+||web.sensilab.se^
+||web.sensilab.si^
+||web.sensilab.sk^
+||web.sidsavage.com^
+||web.slim-joy.de^
+||web.slimjoy.com^
+||web.slimjoy.cz^
+||web.slimjoy.dk^
+||web.slimjoy.ro^
+||web.slimjoy.se^
+||web.slimjoy.sk^
+||web.solesource.com^
+||web.tamaris.com^
+||web.tummy-tox.com^
+||web.tummytox.de^
+||web.tummytox.es^
+||web.tummytox.fr^
+||web.tummytox.it^
+||web.tummytox.pt^
+||web.tummytox.sk^
+||web.web.tomasiauto.com^
+||web.x.ilpost.it^
+||webanalytics.also.com^
+||webmet.creditreform-mahnwesen.de^
+||webmet.creditreform.de^
+||website-usage.b2bendix.com^
+||website-usage.knorr-bremse.com^
+||webt.aqipa.com^
+||webt.eleonto.com^
+||webt.eu.teac-audio.com^
+||webt.pure-audio.com^
+||webt.store.okmilo.com^
+||webts.adac.de^
+||wetr.sportscheck.at^
+||wetr.sportscheck.ch^
+||wetr.sportscheck.com^
+||wt.ara.ad^
+||wt.ara.cat^
+||wt.arabalears.cat^
+||wt.dialog-versicherung.de^
+||wt.distrelec.com^
+||wt.envivas.de^
+||wt.generali.de^
+||wt.generalibewegtdeutschland.de^
+||wt.generalihealthsolutions.de^
+||wt.netze-bw.de^
+||wt.vhb.de^
+||wtm.interhyp.de^
+||wttd.douglas.at^
+||wttd.douglas.ch^
+||wttd.douglas.de^
+||wttd.douglas.it^
+||wttd.douglas.nl^
+||wttd.douglas.pl^
+||wttd.madeleine-fashion.be^
+||wttd.madeleine-fashion.nl^
+||wttd.madeleine-mode.at^
+||wttd.madeleine-mode.ch^
+||wttd.madeleine.co.uk^
+||wttd.madeleine.de^
+||wttd.madeleine.fr^
+||wttd.madeleine.gr^
+||www7.springer.com^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_wizaly.txt ***
+||t-test.esvdigital.com^
+||t.wiz.meilleurtaux.com^
+||tk.abt.com^
+||tk.agrizone.net^
+||tk.aircaraibes.com^
+||tk.airfrance.ae^
+||tk.airfrance.am^
+||tk.airfrance.at^
+||tk.airfrance.be^
+||tk.airfrance.bf^
+||tk.airfrance.bg^
+||tk.airfrance.bj^
+||tk.airfrance.ca^
+||tk.airfrance.ch^
+||tk.airfrance.cm^
+||tk.airfrance.co.ao^
+||tk.airfrance.co.il^
+||tk.airfrance.co.jp^
+||tk.airfrance.co.kr^
+||tk.airfrance.co.th^
+||tk.airfrance.co.uk^
+||tk.airfrance.co.za^
+||tk.airfrance.cz^
+||tk.airfrance.de^
+||tk.airfrance.dj^
+||tk.airfrance.dk^
+||tk.airfrance.dz^
+||tk.airfrance.es^
+||tk.airfrance.fi^
+||tk.airfrance.fr^
+||tk.airfrance.ga^
+||tk.airfrance.gf^
+||tk.airfrance.gr^
+||tk.airfrance.hr^
+||tk.airfrance.ht^
+||tk.airfrance.id^
+||tk.airfrance.ie^
+||tk.airfrance.in^
+||tk.airfrance.it^
+||tk.airfrance.ma^
+||tk.airfrance.mg^
+||tk.airfrance.mq^
+||tk.airfrance.mu^
+||tk.airfrance.my^
+||tk.airfrance.ng^
+||tk.airfrance.nl^
+||tk.airfrance.pa^
+||tk.airfrance.pf^
+||tk.airfrance.pl^
+||tk.airfrance.pt^
+||tk.airfrance.re^
+||tk.airfrance.ro^
+||tk.airfrance.rs^
+||tk.airfrance.ru^
+||tk.airfrance.sa^
+||tk.airfrance.se^
+||tk.airfrance.sg^
+||tk.airfrance.sk^
+||tk.airfrance.tn^
+||tk.airfrance.ua^
+||tk.airfrance.us^
+||tk.airfrance.vn^
+||tk.alexandermcqueen.com^
+||tk.apprentis-auteuil.org^
+||tk.assurland.com^
+||tk.assurlandpro.com^
+||tk.atol.fr^
+||tk.balenciaga.com^
+||tk.biovea.com^
+||tk.blancheporte.be^
+||tk.blancheporte.fr^
+||tk.bricoprive.com^
+||tk.bullebleue.fr^
+||tk.cadeaux.com^
+||tk.conforama.fr^
+||tk.dietbon.fr^
+||tk.domitys.fr^
+||tk.dossier.co^
+||tk.engie.fr^
+||tk.etam.com^
+||tk.evaneos.ch^
+||tk.evaneos.de^
+||tk.evaneos.es^
+||tk.evaneos.fr^
+||tk.evaneos.it^
+||tk.evaneos.nl^
+||tk.france-abonnements.fr^
+||tk.frenchbee.com^
+||tk.healthwarehouse.com^
+||tk.hypnia.co.uk^
+||tk.hypnia.es^
+||tk.hypnia.fr^
+||tk.hypnia.nl^
+||tk.illicado.com^
+||tk.interflora.dk^
+||tk.interflora.es^
+||tk.interflora.fr^
+||tk.interflora.it^
+||tk.jeux.loro.ch^
+||tk.jim-joe.fr^
+||tk.kidsaround.com^
+||tk.kitchendiet.fr^
+||tk.klm.com^
+||tk.kusmitea.com^
+||tk.lacoste.com^
+||tk.lamaisonduchocolat.com^
+||tk.lcl.fr^
+||tk.little-big-change.com^
+||tk.lolivier.fr^
+||tk.lulli-sur-la-toile.com^
+||tk.m6boutique.com^
+||tk.macif.fr^
+||tk.maison123.com^
+||tk.manouvellevoiture.com^
+||tk.moveyourfit.com^
+||tk.msccruises.com^
+||tk.nhlottery.com^
+||tk.opinion-assurances.fr^
+||tk.petit-bateau.be^
+||tk.petit-bateau.co.uk^
+||tk.petit-bateau.de^
+||tk.petit-bateau.es^
+||tk.petit-bateau.fr^
+||tk.petit-bateau.it^
+||tk.planete-oui.fr^
+||tk.prismashop.fr^
+||tk.qare.fr^
+||tk.qobuz.com^
+||tk.rentacar.fr^
+||tk.rimowa.com^
+||tk.salomon.com^
+||tk.santevet.be^
+||tk.santevet.com^
+||tk.santevet.de^
+||tk.santevet.es^
+||tk.speedway.fr^
+||tk.svsound.com^
+||tk.teleshopping.fr^
+||tk.tikamoon.ch^
+||tk.tikamoon.co.uk^
+||tk.tikamoon.com^
+||tk.tikamoon.de^
+||tk.tikamoon.es^
+||tk.tikamoon.it^
+||tk.tikamoon.nl^
+||tk.transavia.com^
+||tk.ultrapremiumdirect.com^
+||tk.undiz.com^
+||tk.verisure.fr^
+||tk.viapresse.com^
+||tk.zenpark.com^
+||tracking-test.esearchvision.com^
+||trackv-test.esearchvision.com^
+||tv-test.esvdigital.com^
+||twiz.wizaly.co.uk^
+||twiz.wizaly.fr^
+||wiz.empowerhearing.com^
+||wiz.sncf-connect.com^
+||wz.allianz.fr^
+
+! *** easylist:easyprivacy/easyprivacy_specific_cname_branch.txt ***
+||07b3.pandasuite.io^
+||0ddf.pandasuite.io^
+||1.ftb.al^
+||10008919.pomelo.fashion^
+||10079290.fluz.app^
+||10298198.arch.sofi.org^
+||10298198.info.sofi.org^
+||10298198.m.sofi.org^
+||10298198.o.sofi.org^
+||102d.pandasuite.io^
+||11959579.fun.joyrun.com^
+||12915784.care.sanvello.com^
+||12915784.help.sanvello.com^
+||16134024.artcollection.io^
+||161779.publy.co^
+||18052925.im.intermiles.com^
+||19035924.automated.almosafer.com^
+||19035924.email.almosafer.com^
+||19035924.loyalty.almosafer.com^
+||19035924.mktg.almosafer.com^
+||19035955.automated.tajawal.com^
+||19035955.email.tajawal.com^
+||19035955.loyalty.tajawal.com^
+||19035955.mktg.tajawal.com^
+||1e90.pandasuite.io^
+||2.wantsext.me^
+||20bd.pandasuite.io^
+||2143.pandasuite.io^
+||22153974.branch.rocks^
+||223f.pandasuite.io^
+||2540166.chalknation.com^
+||2uvub6.goldenways.fun^
+||3565433061881492849.academyofconsciousleadership.com^
+||3587285621425460184.academyofconsciousleadership.net^
+||3889082.dev.att.llabs.io^
+||3935128650935608632.academyofconsciousleadership.org^
+||3988408442896783715.theacademyforconsciousleadership.com^
+||3skickasurf.tre.se^
+||40caidaylimpia.catzolab.net^
+||492733704185584515.academyforconsciousculture.com^
+||4b.oktium.com^
+||5173.pandasuite.io^
+||52d8.pandasuite.io^
+||5363316.marketing.numi.com^
+||5363316.trackerinfo.southbeachdiet.com^
+||581b.pandasuite.io^
+||5e00.pandasuite.io^
+||6068372.huckleberry-labs.com^
+||6505338.news.mindbody.io^
+||6519114.automated.almosafer.com^
+||6519114.automated.tajawal.com^
+||6519114.email.tajawal.com^
+||6519114.loyalty.almosafer.com^
+||6519114.loyalty.tajawal.com^
+||6519114.mktg.almosafer.com^
+||6519114.mktg.tajawal.com^
+||6677648.reddoorz.com^
+||671c.pandasuite.io^
+||757d.pandasuite.io^
+||76ef.pandasuite.io^
+||7701534.emails.tntdrama.com^
+||8041691.comms.hipages.com.au^
+||8041691.engage.hipages.com.au^
+||8147563.1954.bk.com^
+||8147563.thekingdom.bk.com^
+||8147563.your-way.bk.com^
+||8820.pandasuite.io^
+||8d4b.pandasuite.io^
+||9189.pandasuite.io^
+||9544702.kazooby.com^
+||9693.pandasuite.io^
+||9735476.sender.skyscanner.com^
+||9735476.sender.skyscanner.net^
+||9735476.test.skyscanner.net^
+||9786.pandasuite.io^
+||9857064.hello.spriggy.com.au^
+||9857064.notice.spriggy.com.au^
+||9955951.pillar.app^
+||9984342.reddoorz.in^
+||9b55.pandasuite.io^
+||9bdb.pandasuite.io^
+||9kvnwwkj.pandasuite.io^
+||_tcp.academyofconsciousleadership.net^
+||a-t.topya.com^
+||a.a23.in^
+||a.careangel.com^
+||a.foxs.pt^
+||a.getemoji.me^
+||a.hibbett.com^
+||a.ifit.io^
+||a.itim.es^
+||a.nelo.mx^
+||a.pickme.lk^
+||a.sbnw.in^
+||a.topya.com^
+||a2.slotxbros.com^
+||aakashapp.byjus.com^
+||abcd.coderays.com^
+||ablink.1954.bk.com^
+||ablink.8email.eightsleep.com^
+||ablink.a.radio.com^
+||ablink.account.one.app^
+||ablink.account.zip.co^
+||ablink.ae.linktr.ee^
+||ablink.alerts.forhers.com^
+||ablink.arch.sofi.org^
+||ablink.autoconfirm.grassdoor.com^
+||ablink.c.grubhub.com^
+||ablink.care.sanvello.com^
+||ablink.comms.hipages.com.au^
+||ablink.comms.trainline.com^
+||ablink.comms.waveapps.com^
+||ablink.commsinfo.trainline.com^
+||ablink.daily.sofi.com^
+||ablink.e.hungryjacks.com.au^
+||ablink.e.jackpocket.com^
+||ablink.e.sanvello.com^
+||ablink.e.theiconic.com.au^
+||ablink.earn.liven.com.au^
+||ablink.edm.zip.co^
+||ablink.em.redmart.com^
+||ablink.email.creator.shopltk.com^
+||ablink.email.etsy.com^
+||ablink.email.luminarypodcasts.com^
+||ablink.email.pressreader.com^
+||ablink.emails.spothero.com^
+||ablink.emails.themarket.nz^
+||ablink.emails.vida.com^
+||ablink.engage.hipages.com.au^
+||ablink.engage.insighttimer.com^
+||ablink.enjoy.wonder.com^
+||ablink.feed.liven.com.au^
+||ablink.fun.joyrun.com^
+||ablink.go1.zip.co^
+||ablink.go2.zip.co^
+||ablink.go3.zip.co^
+||ablink.hello.innit.com^
+||ablink.hello.sanvello.com^
+||ablink.hello.spriggy.com.au^
+||ablink.hello.washmen.com^
+||ablink.help.innit.com^
+||ablink.help.sanvello.com^
+||ablink.help.shopwell.com^
+||ablink.info.felixmobile.com.au^
+||ablink.info.oneatwork.app^
+||ablink.info.pressreader.com^
+||ablink.info.sofi.org^
+||ablink.info.themarket.nz^
+||ablink.info.timhortons.ca^
+||ablink.info.timhortons.com^
+||ablink.info.vida.com^
+||ablink.juicer.li.me^
+||ablink.kfc.com.au^
+||ablink.lifecycle.onxmaps.com^
+||ablink.loyal.timhortons.ca^
+||ablink.loyal.timhortons.com^
+||ablink.loyalty.almosafer.com^
+||ablink.loyalty.tajawal.com^
+||ablink.m.feelcove.com^
+||ablink.m.jackpocket.com^
+||ablink.m.popeyes.com^
+||ablink.m.seatedapp.io^
+||ablink.m.sofi.org^
+||ablink.ma.linktr.ee^
+||ablink.mail.activearcade.ai^
+||ablink.mail.adobespark.com^
+||ablink.mail.flipfit.com^
+||ablink.mail.grailed.com^
+||ablink.mail.homecourt.ai^
+||ablink.mail.parkmobile.io^
+||ablink.mail.truemoney.com^
+||ablink.mail.winwinsave.com^
+||ablink.mail1.iheart.com^
+||ablink.marketing.adobemailing.com^
+||ablink.marketing.li.me^
+||ablink.marketing.motortrend.com^
+||ablink.marketing.onxmaps.com^
+||ablink.media.10play.com.au^
+||ablink.mktg.almosafer.com^
+||ablink.mktg.tajawal.com^
+||ablink.my.zip.co^
+||ablink.news.felixmobile.com.au^
+||ablink.news.forhers.com^
+||ablink.news.gooseinsurance.com^
+||ablink.news.kfc.co.za^
+||ablink.news.lowellfarms.direct^
+||ablink.newsletters1.motortrend.com^
+||ablink.newsletters2.motortrend.com^
+||ablink.notice.spriggy.com.au^
+||ablink.notification.insighttimer.com^
+||ablink.notify.homecourt.ai^
+||ablink.nz-edm.zip.co^
+||ablink.o.sofi.org^
+||ablink.offers.checkout51.com^
+||ablink.offroad-marketing.onxmaps.com^
+||ablink.p.radio.com^
+||ablink.pomelo.fashion^
+||ablink.pomelofashion.com^
+||ablink.promos.timhortons.ca^
+||ablink.promos.timhortons.com^
+||ablink.qa.enjoy.wonder.com^
+||ablink.r.sofi.com^
+||ablink.rider.li.me^
+||ablink.seller.etsy.com^
+||ablink.send.joinjamjar.com.au^
+||ablink.sender.skyscanner.com^
+||ablink.sender.skyscanner.net^
+||ablink.service.max.com^
+||ablink.staging-e.klarna.com^
+||ablink.stream.max.com^
+||ablink.subscribers.motortrend.com^
+||ablink.support.oneatwork.app^
+||ablink.t.feelcove.com^
+||ablink.tchicken.popeyes.com^
+||ablink.test.iheart.com^
+||ablink.test.kfc.com.au^
+||ablink.test.skyscanner.net^
+||ablink.test.vida.com^
+||ablink.thekingdom.bk.com^
+||ablink.thekitchen.popeyes.com^
+||ablink.track.popeyes.com^
+||ablink.track.timhortons.ca^
+||ablink.track.timhortons.com^
+||ablink.uat.enjoy.wonder.com^
+||ablink.updates.creator.shopltk.com^
+||ablink.updates.gooseinsurance.com^
+||ablink.your-way.bk.com^
+||ablink.your.audacy.com^
+||ablinkclicktest.prod.aws.skyscnr.com^
+||ablinks-staging.email.tispr.com^
+||ablinks.comms.healthengine.com.au^
+||ablinks.e.foxsports.com.au^
+||ablinks.e.sportinanutshell.com.au^
+||ablinks.info.amaro.com^
+||ablinks.kfc.com.au^
+||ablinks.mail.claritymoney.com^
+||ablinks.mail.hinge.co^
+||ablinks.mail.pared.com^
+||ablinks.marketing.numi.com^
+||ablinks.news.amaro.com^
+||ablinks.news.learnwithhomer.com^
+||ablinks.notify.healthengine.com.au^
+||ablinks.trackerinfo.southbeachdiet.com^
+||ablinks.welcome.learnwithhomer.com^
+||ablinksemail.wirexapp.com^
+||ablinksuni.a.grubhub.com^
+||ablinksuni.a.seamless.com^
+||abmail.info.amaro.com^
+||abmail.peak.net^
+||abmail.test.iheart.com^
+||abmail2.e.hungryjacks.com.au^
+||acc-link-ccontact.focuscura.com^
+||accenture.epoise.com^
+||accenturetest.epoise.com^
+||access.ipro.net^
+||access.iprolive.com^
+||access2.ipro.net^
+||acesse.tc.com.br^
+||acro.egghead.link^
+||act.wynk.in^
+||activation.depop.com^
+||active-email.branch.rocks^
+||ad.gogox.com^
+||ad.inhaabit.com^
+||adl.kkguan.com^
+||admin.academyforconsciousleadership.net^
+||ads.tikpage.com^
+||aggelakia.openapp.link^
+||ailla.abphotos.link^
+||aivali.openapp.link^
+||al.airtel.in^
+||al.mtrx.dev^
+||al.mtrx.travel^
+||al.mtrxs.dev^
+||al.test.airtel.in^
+||alaburger.openapp.link^
+||alapita.openapp.link^
+||alerts.steadyapp.com^
+||alexa.dev.intecular.com^
+||alibabapizza.openapp.link^
+||alinks.outcomes4me.com^
+||alpha.go.levelbank.com^
+||amandi.openapp.link^
+||amazon-email.branch.rocks^
+||amo.myoyster.mx^
+||ana.e-ticket.co.jp^
+||analytics.adobe.ly^
+||analytics.crowdkeep.com^
+||analytics.eventbrite.com^
+||anapp.adobe.com^
+||android.txtsmarter.com^
+||animaux.oworld.fr^
+||antico.openapp.link^
+||aod.echovisuals.com^
+||ap.hibbett.com^
+||ap.shouta.co^
+||app-branch.yummybazaar-qa.com^
+||app-clicks-corporate.firstrepublic.com^
+||app-clicks.firstrepublic.com^
+||app-dat.kingofthecurve.org^
+||app-dev.onyx.fit^
+||app-dev.stressbuoy.com^
+||app-jp.getmiles.com^
+||app-link-test.inkl.com^
+||app-link.funfull.com^
+||app-link.inkl.com^
+||app-link.republik.gg^
+||app-link.smartvid.io^
+||app-link.udex.us^
+||app-qa.rnd.thronelabs.co^
+||app-redirect.wearephlo.com^
+||app-stage.mschfsneakers.com^
+||app-test.albrt.co^
+||app-test.barking.city^
+||app-test.barking.ee^
+||app-test.comparethemarket.com.au^
+||app-test.evntly.com^
+||app-test.get360fit.com^
+||app-test.goat.com^
+||app-test.hermo.my^
+||app-test.kisikates.com.tr^
+||app-test.klip.ae^
+||app-test.mogo.ca^
+||app-test.mywaggle.com^
+||app-test.nala.money^
+||app-test.planstr.com^
+||app-test.playtally.com^
+||app-test.thestaxapp.com^
+||app-test.utlob.com^
+||app-uat.latrobehealth.com.au^
+||app-uat.navyhealth.com.au^
+||app.1112.com^
+||app.2cents.audio^
+||app.5miles.us^
+||app.8tracks.com^
+||app.aaptiv.com^
+||app.acekuwait.com^
+||app.activityhero.com^
+||app.aksent.ai^
+||app.albrt.co^
+||app.allyos.com^
+||app.almosafer.com^
+||app.almutawapharmacies.com^
+||app.ammanmart.com^
+||app.anch.co^
+||app.appcity.com.au^
+||app.aquaservice.com^
+||app.areyouin.io^
+||app.atlasmission.com^
+||app.audibene.de^
+||app.auge.pro.br^
+||app.autotrader.com.au^
+||app.avopass.com^
+||app.awto.cl^
+||app.awto.com.br^
+||app.ayazona.com^
+||app.babycloud.in^
+||app.bajajfinservmarkets.in^
+||app.ballet.org.uk^
+||app.bancobv.com.br^
+||app.banqi.com.br^
+||app.bareface.agency^
+||app.barking.city^
+||app.barking.ee^
+||app.bateriasparacarrosbogota.com^
+||app.begin.is^
+||app.bekfood.de^
+||app.belbet.by^
+||app.belk.com^
+||app.bergenkino.no^
+||app.berrydates.com^
+||app.bettle.co^
+||app.bible.com^
+||app.biblelens.com^
+||app.bikeep.com^
+||app.bimbaylola.com^
+||app.bloombergconnects.org^
+||app.bovedainc.com^
+||app.bplepay.co.kr^
+||app.brain.ly^
+||app.brandclub.com^
+||app.bruce.work^
+||app.buildd.co^
+||app.butterflymx.com^
+||app.bws.com.au^
+||app.byjus.com^
+||app.caden.io^
+||app.cambolink21.com^
+||app.campaignhero.ai^
+||app.campbowwow.com^
+||app.capitalbikeshare.com^
+||app.cardbaazi.com^
+||app.cardiovisual.com^
+||app.carrierview.com^
+||app.carsguide.com.au^
+||app.catchconnect.com.au^
+||app.changemakerz.org^
+||app.chewy.com^
+||app.citibikenyc.com^
+||app.citylink.ro^
+||app.clarrio-test.com^
+||app.clientbook.com^
+||app.clovia.com^
+||app.cmnet.cf^
+||app.coconuts.co^
+||app.colesmobile.com.au^
+||app.comparethemarket.com.au^
+||app.cookdtv.com^
+||app.coto.world^
+||app.cover.com^
+||app.ctc.ru^
+||app.cuahealth.com.au^
+||app.curesk.in^
+||app.currenciesdirect.com^
+||app.danmurphys.com.au^
+||app.deliverynow.vn^
+||app.delphia.com^
+||app.dev.pyypl.io^
+||app.dev.talksport.com^
+||app.dev.virginradio.co.uk^
+||app.deviceidfinder.com^
+||app.devyce.com^
+||app.dickssportinggoods.com^
+||app.discover.com^
+||app.dolinakrzny.digimuth.com^
+||app.domclick.ru^
+||app.dreambox.ru.com^
+||app.echo.co.uk^
+||app.echovisuals.com^
+||app.eland.kr^
+||app.elanic.in^
+||app.elly.com^
+||app.email.influitive.com^
+||app.entwickler.de^
+||app.etc.se^
+||app.etcel.se^
+||app.evntly.com^
+||app.exercisetimer.net^
+||app.experience297.com^
+||app.explico.sg^
+||app.fashalot.com^
+||app.favorited.com^
+||app.feedacat.com^
+||app.feedadog.com^
+||app.fitmint.io^
+||app.fixly.pl^
+||app.flatex.at^
+||app.flatex.de^
+||app.flowyour.money^
+||app.flykitt.com^
+||app.flyx.me^
+||app.foapp.infyn.it^
+||app.food.li^
+||app.golfgalaxy.com^
+||app.hirenodes.com^
+||app.inkitt.com^
+||app.instantlocal.com^
+||app.intermexonline.com^
+||app.intermiles.com^
+||app.interprefy.com^
+||app.intros.com^
+||app.inutriciondeportiva.com^
+||app.iroomit.com^
+||app.itimes.com^
+||app.iwanttfc.com^
+||app.jamdoughnut.com^
+||app.jili178.us^
+||app.joatspace.com^
+||app.joinkroo.com^
+||app.joinraft.com^
+||app.jurishand.com^
+||app.kaptain11.com^
+||app.kcutsgo.com^
+||app.kernwerk.de^
+||app.kingofthecurve.org^
+||app.kippo.gg^
+||app.kisikates.com.tr^
+||app.klaim.us^
+||app.klip.ae^
+||app.klokahem.com^
+||app.kochamwino.com.pl^
+||app.kora.money^
+||app.koyamedical.com^
+||app.kumu.ph^
+||app.lark.com^
+||app.latrobehealth.com.au^
+||app.lawnlove.com^
+||app.learnz.hu^
+||app.levi.com^
+||app.libre.org^
+||app.link.livibank.com^
+||app.link.nba.com^
+||app.liven.com.au^
+||app.lootpop.com^
+||app.luckysweater.com^
+||app.luve.tv^
+||app.manager.privateaser.com^
+||app.marriott.com^
+||app.matchme.social^
+||app.me4u.ai^
+||app.meclub.com^
+||app.meliuz.com.br^
+||app.memor-i.com^
+||app.menupromo.inlinefx.com^
+||app.mikedfitness.com^
+||app.mingo.chat^
+||app.mintmobile.com^
+||app.mobilapp.io^
+||app.mobilevikings.pl^
+||app.mogo.ca^
+||app.moneta.lk^
+||app.moneywalkie.com^
+||app.movebe.com^
+||app.movegb.com^
+||app.mschfsneakers.com^
+||app.musely.com^
+||app.mybestphotobook.com^
+||app.mybliss.ai^
+||app.mycirclecare.com^
+||app.myrbhs.com.au^
+||app.mywaggle.com^
+||app.naga.com^
+||app.naked.insure^
+||app.nala.money^
+||app.nalogi.online^
+||app.nautilus.io^
+||app.navi.com^
+||app.navyhealth.com.au^
+||app.nhrmcmychart.com^
+||app.nootric.com^
+||app.now.vn^
+||app.nursef.ly^
+||app.ocamping.fr^
+||app.oceans.io^
+||app.ofisten.com^
+||app.omio.com^
+||app.onet.pl^
+||app.onyx.fit^
+||app.onyxcharge.com^
+||app.openfolio.com^
+||app.optus.com.au^
+||app.ouicsport.fr^
+||app.ovloop.com^
+||app.oze789.com^
+||app.p100.io^
+||app.pally.live^
+||app.pandasuite.io^
+||app.panomoments.com^
+||app.pawsket.com^
+||app.payk.com.au^
+||app.payomatic.com^
+||app.payon.mn^
+||app.pdf.ac^
+||app.pethoops.com^
+||app.pickwin.net^
+||app.pickyourtrail.com^
+||app.pixapp.com^
+||app.pointer.com.br^
+||app.pokerup.net^
+||app.pooler.io^
+||app.poolkingmobile.com^
+||app.popsa.com^
+||app.poupaenergia.pt^
+||app.powerwatch.io^
+||app.priceoff.com.br^
+||app.primeconcept.co.uk^
+||app.primexbt.com^
+||app.pro-vision.com^
+||app.producttube.com^
+||app.progressive.com^
+||app.puma.com^
+||app.puneeatouts.in^
+||app.pyypl.io^
+||app.qa.flykitt.com^
+||app.qa.fount.bio^
+||app.qeenatha.com^
+||app.qlan.gg^
+||app.qooxydz.net^
+||app.quidd.co^
+||app.quotesalarm.com^
+||app.radio.com^
+||app.radixdlt.com^
+||app.raneen.com^
+||app.rclb.pl^
+||app.renozee.com^
+||app.resq.club^
+||app.ritual.io^
+||app.rlax.me^
+||app.rmbr.in^
+||app.roomsync.com^
+||app.scrpbx.co^
+||app.seasonshare.com^
+||app.select.id^
+||app.semusi.com^
+||app.sephora.com^
+||app.shopback.com^
+||app.shouta.co^
+||app.showroomprive.com^
+||app.singlife.com^
+||app.skideal-prod.ynadev.com^
+||app.skydo.cloud^
+||app.smartcredit.com^
+||app.smrtp.link^
+||app.snbla.com^
+||app.sortedai.com^
+||app.sosevents.net^
+||app.soultime.com^
+||app.sswt.co^
+||app.stadac.mobilapp.gmbh^
+||app.stagingsimpl.com^
+||app.streaktrivia.com^
+||app.stressbuoy.com^
+||app.subs.tv^
+||app.sunstone.in^
+||app.sweeps.fyi^
+||app.swiftgift.it^
+||app.swiftgift.me^
+||app.ta3weem.com^
+||app.tadatada.com^
+||app.tagachi.io^
+||app.tajawal.com^
+||app.talksport.com^
+||app.task.io^
+||app.teachfx.com^
+||app.test.elly.com^
+||app.th3rdwave.coffee^
+||app.theachieveapp.com^
+||app.theachieveproject.com^
+||app.thedealerapp.co.uk^
+||app.themaven.net^
+||app.thestaxapp.com^
+||app.thetimes.link^
+||app.thetriviabar.com^
+||app.thexlife.co^
+||app.thisisclevetue.com^
+||app.zwilling.com^
+||app1.heroes.jobs^
+||app2.220cordncode.com^
+||application.mindshine.app^
+||applink-test.chalknation.com^
+||applink.aspiration.com^
+||applink.batterii.com^
+||applink.beta.aspiration.com^
+||applink.calciumhealth.com^
+||applink.cw.com.tw^
+||applink.designengineapp.com^
+||applink.discuss.com.hk^
+||applink.eventable.com^
+||applink.flipboard.com^
+||applink.fun88906.com^
+||applink.get-a-way.com^
+||applink.getbambu.com^
+||applink.getconfide.com^
+||applink.glicrx.com^
+||applink.groupthera.com^
+||applink.hellobacsi.com^
+||applink.hightail.com^
+||applink.hk01.com^
+||applink.hktester.com^
+||applink.joyrun.com^
+||applink.jurafuchs.de^
+||applink.mojilala.com^
+||applink.moolban.com^
+||applink.mypostcardapp.com^
+||applink.oskar.de^
+||applink.picmasters.de^
+||applink.pleizi.com^
+||applink.pod.io^
+||applink.podimo.com^
+||applink.psychonline.com^
+||applink.qa.tarjetabumeran.com^
+||applink.raaho.in^
+||applink.tarjetabumeran.com^
+||applink.test.jurafuchs.de^
+||applink.whizzl.com^
+||applink.youareaceo.com^
+||applink2.moolban.com^
+||applinks-test.flybuys.com.au^
+||applinks.afriflirt.com^
+||applinks.aventuraapp.com^
+||applinks.bikersnearby.com^
+||applinks.box8.in^
+||applinks.calpool.com^
+||applinks.capitalone.co.uk^
+||applinks.cougarsnearby.com^
+||applinks.cowboysnearby.com^
+||applinks.fliplearn.com^
+||applinks.flybuys.com.au^
+||applinks.hotspot.travel^
+||applinks.laoshi.io^
+||applinks.makemytrip.com^
+||applinks.tarrakki.com^
+||applinks.truckersnearby.com^
+||applinks.xdressr.com^
+||applinks.zerista.com^
+||appredirect.snapdeal.com^
+||apps-test.spectrum-member.com^
+||apps.airmeet.com^
+||apps.ayopop.id^
+||apps.bannerman.com^
+||apps.circle.com^
+||apps.crib.in^
+||apps.daxko-qa.com^
+||apps.daxko.com^
+||apps.dev.zingeroo.com^
+||apps.ding.jobs^
+||apps.e-butler.com^
+||apps.jeffgalloway.com^
+||apps.myprepaidcenter.com^
+||apps.shakaguide.com^
+||apps.spectrum-member.com^
+||apps.staging.zingeroo.com^
+||apps.uquote.io^
+||apps.weekendgowhere.sg^
+||apps.wholefoodsmarket.com^
+||apps.zingeroo.com^
+||apptest.gotvive.com^
+||apptest.gwsportsapp.in^
+||apptest.jow.fr^
+||apptest.truveiculos.com^
+||apptracker.torob.com^
+||appuat.intermiles.com^
+||apssdc.epoise.com^
+||apssdctest.epoise.com^
+||ar.interiordefine.com^
+||arch.onjoyri.de^
+||aria.inhaabit.com^
+||art.b.inhaabit.com^
+||ascmart.abphotos.link^
+||ask.wearelistening.co.nz^
+||assistant.dg1.com^
+||atb.mlb.com^
+||athlete.uninterrupted.com^
+||atiteasexam.quantresear.ch^
+||atlantablackstar.black.news^
+||atumanera.burgerking.com.mx^
+||authsmtp.happ.social^
+||avasgtest.branch.rocks^
+||awsexam.quantresear.ch^
+||b.arenum.games^
+||b.check-ins.com.my^
+||b.chme.io^
+||b.discotech.me^
+||b.dl.redcrossblood.org^
+||b.ewd.io^
+||b.getmaintainx.com^
+||b.gett.com^
+||b.home.com.au^
+||b.iheart.southwest.com^
+||b.itravel.southwest.com^
+||b.iwanna.southwest.com^
+||b.lyst.com^
+||b.mail.tabcorp.com.au^
+||b.pickme.lk^
+||b.prod1.youroffers.dominos.ca^
+||b.pscp.live^
+||b.sharechat.com^
+||b.sprucehealth.com^
+||b.staging.thechivery.com^
+||b.tate.it^
+||b.thechive.com^
+||b.thechivery.com^
+||b.todaytix.com^
+||b.whee.ly^
+||b.workhere.com^
+||b.your.rewardsemail.dominos.ca^
+||b.ysh.io^
+||b.zedge.me^
+||b73c.pandasuite.io^
+||baccarat.abzorbagames.com^
+||basket.mondo.link^
+||baton.cuetv.online^
+||battlenet.openapp.link^
+||bb.onjoyri.de^
+||bbanywhere.links.rosieapp.com^
+||bbs.theacademyforconsciousleadership.com^
+||bclicks.lyst.com^
+||bde.beformance.com^
+||bdl.xefyr.com^
+||bdtestsendpulse.branch.rocks^
+||be.slowmographer.co^
+||bears.daigostudio.com^
+||bepartof.wechain.eu^
+||beta-link.liilix.com^
+||betrice.wantsext.me^
+||betterhealthrewards.headuplabs.com^
+||bettermedical-app.hotdoc.com.au^
+||bf35f69f2c6f6bcda64064b1f5b49218.domain.com.au^
+||bfg.loanzify.app^
+||bh-test.groc.press^
+||bh.groc.press^
+||bi.irisdating.com^
+||bierlanz-test.till-koppers.de^
+||bierlanz.till-koppers.de^
+||bint.openapp.link^
+||bio.chups.co^
+||bit.beformance.com^
+||bizlink.dinifi.com^
+||bkstg.flyx.me^
+||bl-test.curatedplanet.com^
+||blackdagger.openapp.link^
+||blackenterprise.black.news^
+||blackjack.abzorbagames.com^
+||blavity.black.news^
+||blink.checkworkrights.com.au^
+||blinks.mindoktor.se^
+||blinks.outcomes4me.com^
+||blinkstest.mindoktor.se^
+||bluecore-email.branch.rocks^
+||bmf.branch.rocks^
+||bn.cou
+||bnc.autopass.xyz^
+||bpe.mlb.com^
+||bpeml.mlb.com^
+||br.ac.ebookers.ch^
+||br.ac.ebookers.com^
+||br.ac.ebookers.de^
+||br.ac.ebookers.fi^
+||br.ac.ebookers.fr^
+||br.ac.ebookers.ie^
+||br.ac.mrjet.se^
+||br.ac.orbitz.com^
+||br.ac.travelocity.com^
+||br.ac2.cheaptickets.com^
+||br.backmarket.fr^
+||br.email.lifesum.com^
+||br.eml.walgreens.com^
+||br.links.kmartphotos.com.au^
+||br.links.kodakmoments.com^
+||br.potato1.influitive.com^
+||br.uk.beformance.com^
+||bran.sightdots.com^
+||branch-c.hipages.com.au^
+||branch-consumer.hipages.com.au^
+||branch-io.smartr365.com^
+||branch-test.locationlabs.com^
+||branch-test.rejuvenan.com^
+||branch-test.step.com^
+||branch-test.tbal.io^
+||branch-titan.rejuvenan.com^
+||branch-tradie.hipages.com.au^
+||branch-uutisvahti.yle.fi^
+||branch-ylefi.yle.fi^
+||branch.365soup.bibsolution.net^
+||branch.agmt.it^
+||branch.appryse.com^
+||branch.att.llabs.io^
+||branch.backbon3.com^
+||branch.bottradionetwork.com^
+||branch.callbridge.rocks^
+||branch.careforth.com^
+||branch.carvana.com^
+||branch.chelseafc.com^
+||branch.clicks.anchor.fm^
+||branch.codepressapp.com^
+||branch.connect.actionnetwork.com^
+||branch.craftsmanrepublic.com^
+||branch.dev.att.llabs.io^
+||branch.devishetty.net^
+||branch.dragonslayertravel.com^
+||branch.dstreet.finance^
+||branch.eccocar.com^
+||branch.employus.com^
+||branch.familybase.vzw.com^
+||branch.frankctan.com^
+||branch.gosunpro.com^
+||branch.hyr.work^
+||branch.indi.com^
+||branch.kastapp.link^
+||branch.kiddom.co^
+||branch.lacarte.com^
+||branch.learny.co^
+||branch.link.loop.net.nz^
+||branch.livenation.com^
+||branch.locationlabs.com^
+||branch.mapstr.com^
+||branch.myoyster.mx^
+||branch.mypixie.co^
+||branch.nc.mails.sssports.com^
+||branch.olamoney.com^
+||branch.oneroof.co.nz^
+||branch.oraleye.com^
+||branch.parkingpanda.com^
+||branch.pgatour-mail.com^
+||branch.quantic.edu^
+||branch.rejuvenan.com^
+||branch.release.winfooz.com^
+||branch.reserveout.com^
+||branch.rockmyrun.com^
+||branch.servingchefs.com^
+||branch.seshfitnessapp.com^
+||branch.shoprunner.com^
+||branch.shuruapp.com^
+||branch.socar.kr^
+||branch.spaceback.me^
+||branch.step.com^
+||branch.supportgenie.io^
+||branch.t.slac.com^
+||branch.tadatada.com^
+||branch.tbal.io^
+||branch.thekono.com^
+||branch.threepiece.com^
+||branch.totalbrain.com^
+||branch.trevo.my^
+||branch.tripcody.com^
+||branch.uat.bfsgodirect.com^
+||branch.udl.io^
+||branch.vcf-test.vzw.dev.llabs.io^
+||branch.wallet.bitcoin.com^
+||branch.wawa.com^
+||branch.weeblme.com^
+||branch.wellsitenavigator.com^
+||branch.whatsnxt.app^
+||branch.xoxloveheart.com^
+||branch2.udl.io^
+||branchct.ncapp04.com^
+||branchcust.zulln.se^
+||branchio.foxplay.com^
+||branchio.hipages.com.au^
+||branchio.rsvp.com.au^
+||branchio.services.evaneos.com^
+||branchio.taxibeat.com^
+||branchioth.thehindu.co.in^
+||branchlink.adobespark.com^
+||branchlink.tripcody.com^
+||branchtest.cocoon.today^
+||branchtest.uk.puma.com^
+||branchtest.veryableops.com^
+||branchtest.whataburger.com^
+||branchtrk.lendingtree.com^
+||brands.picklebutnotcucumber.com^
+||bravantrent.eccocar.com^
+||brbristoltruckrentals.eccocar.com^
+||brc.emails.rakuten.com^
+||brc.englishdict.cc^
+||brc.englishtimes.cc^
+||brc.hellotalk.com^
+||brc.languageclass.cc^
+||brc2.aigrammar.net^
+||brcargreen.eccocar.com^
+||brcicar.eccocar.com^
+||brclickrent.eccocar.com^
+||brcrx.eccocar.com^
+||brdriveonrental.eccocar.com^
+||breasycarrental.eccocar.com^
+||brespark.eccocar.com^
+||brevnet.eccocar.com^
+||brfeneval.eccocar.com^
+||brfree2move.eccocar.com^
+||brgoazen.eccocar.com^
+||brgroupeollandini.eccocar.com^
+||brhellorentacar.eccocar.com^
+||brhimobility.eccocar.com^
+||brice-test.nawar.io^
+||brinstascooter.eccocar.com^
+||brioscoot.eccocar.com^
+||brldassustitucion.eccocar.com^
+||brlesrochesmarbella.eccocar.com^
+||brlikecarsharing.eccocar.com^
+||brllanesrentacar.eccocar.com^
+||brmbrenting.eccocar.com^
+||brmexrentacar.eccocar.com^
+||brmocean.eccocar.com^
+||brmoter.eccocar.com^
+||brmov.eccocar.com^
+||brmuvif.eccocar.com^
+||brmuvon.eccocar.com^
+||brnc.seidecor.com.br^
+||bronxvanilla.openapp.link^
+||brooklynway.openapp.link^
+||brpayless.eccocar.com^
+||brquazzar.eccocar.com^
+||brquikly.eccocar.com^
+||brrecordgo.eccocar.com^
+||brrentalservicefinland.eccocar.com^
+||brrhgrocarsharing.eccocar.com^
+||brshareandrent.eccocar.com^
+||brsmovecity.eccocar.com^
+||brsolenelocation.eccocar.com^
+||brtelefurgo.eccocar.com^
+||brtimove.eccocar.com^
+||brtimovesharing.eccocar.com^
+||brtrack.rummypassion.com^
+||brugocarz.eccocar.com^
+||brvallsrentacar.eccocar.com^
+||brvelocity.eccocar.com^
+||brwanacars.eccocar.com^
+||brwerental.eccocar.com^
+||bryurent.eccocar.com^
+||btn.listonic.com^
+||btn.rtl2.de^
+||cclink.carfax.com^
+||chelsea.clicks.hqo.co^
+||clevertapsendgrid.branch.rocks^
+||click-staging.food.mercato.com^
+||click.aaptiv.com^
+||click.bible.com^
+||click.bitesquad.com^
+||click.blueapron.com^
+||click.community.carousell.com^
+||click.depop.com^
+||click.devemails.skechers.com^
+||click.dice.com^
+||click.drizly.com^
+||click.e.affirm.com^
+||click.e.progressive.com^
+||click.e.tdbank.com^
+||click.em.soothe.com^
+||click.email.houndapp.com^
+||click.email.soundhound.com^
+||click.emails.creditonebank.com^
+||click.favordelivery.com^
+||click.food.mercato.com^
+||click.glamsquad.com^
+||click.instacartemail.com^
+||click.mail.carousell.com^
+||click.mail.thecarousell.com^
+||click.mail.theknot.com^
+||click.marketing.carousell.com^
+||click.redditmail.com^
+||click.sutra.co^
+||click.totallymoney.com^
+||click.transactional.carousell.com^
+||click.trycaviar.com^
+||click.trycobble.com^
+||click1.e.audacy.com^
+||click1.e.radio.com^
+||click1.email-postup.branch.rocks^
+||click1.email.audacy.com^
+||click2.email.ticketmaster.com^
+||clicked.ebates.com^
+||clicks.6thstreet.com^
+||clicks.burgerking.co.uk^
+||clicks.drizly.com^
+||clicks.email.shakeshack.com^
+||clicks.equinoxplus.com^
+||clicks.exploreshackle.app^
+||clicks.flaming.burger-king.ch^
+||clicks.food.mercato.com^
+||clicks.kfc.co.uk^
+||clicks.kfc.fr^
+||clicks.lifesum.com^
+||clicks.metronautapp.com^
+||clicks.point.app^
+||clicks.rallyrd.com^
+||clicks.shakeshack.com^
+||clicks.staging.worldremit.com^
+||clicks.thehive.hqo.co^
+||clicks.tunein.com^
+||clicks.variis.com^
+||clicks2.hqo.co^
+||clients.belairdirect.com^
+||clients.intact.ca^
+||clients.nbc-insurance.ca^
+||clk.mindfulsuite.com^
+||cltr.irlmail.org^
+||cmflinks.provesio.com^
+||cn1.stadiumgoods.com^
+||cn2.stadiumgoods.com^
+||cname.pebmed.com.br^
+||collect.ezidox.com^
+||colors.chamoji.com^
+||community.keeperz.app^
+||connect.goziohealth.com^
+||connect.huru.ai^
+||connect.im8.net^
+||connect.pixellot.link^
+||content.booksplusapp.com^
+||content.mini.pix.style^
+||content.pix.style^
+||content.stage.mini.pix.style^
+||content.yole365.com^
+||content.youmiam.com^
+||contractor-app.buildforce.com^
+||converge.headuplabs.com^
+||cooking-app.lkk.com^
+||cp.rootielearning.com^
+||cq.hq1.influitive.com^
+||crepemania.openapp.link^
+||crew-qa.zubie.com^
+||crew.spektare.tv^
+||crew.zubie.com^
+||crrm.onjoyri.de^
+||crypto.egghead.link^
+||cscsexam.quantresear.ch^
+||ct-dev.taskhuman.com^
+||ct.irl.co^
+||ct.irl.com^
+||ct.irlmail.org^
+||ct.taskhuman.com^
+||ctd.drivescore.com^
+||cttest.branch.rocks^
+||cucaido.abphotos.link^
+||culture.pandasuite.io^
+||custom.tonyle.co^
+||customer.libertycarz.com^
+||cz-anag.m-shop.me^
+||cz-babynabytek.m-shop.me^
+||cz-babyplaza.m-shop.me^
+||cz-batteryimport.m-shop.me^
+||cz-cassidi.m-shop.me^
+||cz-countrylife.m-shop.me^
+||cz-efitness.m-shop.me^
+||cz-fightstore.m-shop.me^
+||cz-fitness007.m-shop.me^
+||cz-grafficon.m-shop.me^
+||cz-joealex.m-shop.me^
+||cz-laznejupiter.m-shop.me^
+||cz-myhealth.m-shop.me^
+||cz-newbag.m-shop.me^
+||cz-nobilistilia.m-shop.me^
+||cz-originalstore.m-shop.me^
+||cz-rekant.m-shop.me^
+||cz-rychleleky.m-shop.me^
+||cz-sasoo.m-shop.me^
+||cz-scootshop.m-shop.me^
+||cz-tattoomania.m-shop.me^
+||cz-topalkohol.m-shop.me^
+||cz-topgal.m-shop.me^
+||cz-trenyrkarna.m-shop.me^
+||cz-tropicliberec.m-shop.me^
+||cz-velkykosik.m-shop.me^
+||d-app.progressive.com^
+||d-snapshotapp.progressive.com^
+||d-staging.groc.press^
+||d.cybtel.com^
+||d.delahorro.app^
+||d.groc.press^
+||d.jugnoo.in^
+||d.shopprecouriers.com^
+||d.stay-app.com^
+||d.whoscall.com^
+||d.xapcard.com^
+||d6ek.pandasuite.io^
+||dart.onjoyri.de^
+||dashboardbntest.branchcustom.xyz^
+||dba4.pandasuite.io^
+||ddlbr.timesclub.co^
+||de-metalshop.m-shop.me^
+||dealfastfood.openapp.link^
+||debug-inform.liilix.com^
+||debug-r.rover.com^
+||deep.plant.chat^
+||deep.souk.com.br^
+||deeplink-app.olympia.nl^
+||deeplink-staging.tops.co.th^
+||deeplink.alpha.aspiration.com^
+||deeplink.api-sandbox.notarycam.com^
+||deeplink.app.notarycam.com^
+||deeplink.aspiration.com^
+||deeplink.autotrader.com.au^
+||deeplink.dashnow.my^
+||deeplink.estheticon.com^
+||deeplink.gocover.co.za^
+||deeplink.goodmeasures.com^
+||deeplink.instacartemail.com^
+||deeplink.intelligence.weforum.org^
+||deeplink.lamsaworld.com^
+||deeplink.locokids.cn^
+||deeplink.mobile360.io^
+||deeplink.newsandbox.notarycam.com^
+||deeplink.oxstreet.com^
+||deeplink.ring.md^
+||deeplink.supergreat.com^
+||deeplink.tytod.com^
+||deeplink.wagr.ai^
+||deeplink.wbnc.99array.com^
+||deeplink.winespectator.com^
+||deeplink.xeropan.com^
+||deeplinkdev.upoker.net^
+||deeplinks.breaz.dynamify.com^
+||deeplinks.everyday.dynamify.com^
+||deeplinks.mindtickle.com^
+||deeplinks.myyogateacher.com^
+||deeplinks.pebblebee.com^
+||deeplinktest.yooture.info^
+||deeplinkuat.upoker.net^
+||delete-me-2.branchcustom.xyz^
+||delete-me.branchcustom.xyz^
+||delikoko.openapp.link^
+||delivery.email-pepipost.branch.rocks^
+||delivery.marketing.boutiqaat.com^
+||demo.gomi.do^
+||demojobsapp.epoise.com^
+||denver.thexlife.co^
+||descarga.veikul.com^
+||descargar.billeteramango.com^
+||descargar.telocompro.com.bo^
+||dev-app.insprd.co^
+||dev-business.stc.com.sa^
+||dev-deeplink.bigrichstore.com^
+||dev-dl.oneworldonesai.com^
+||dev-get.unhedged.com.au^
+||dev-get.wysa.uk^
+||dev-link.aira.io^
+||dev-link.getprizepool.com^
+||dev-link.myoptimity.com^
+||dev-links.notarize.com^
+||dev-share.beaconlearningapp.com^
+||dev-share.haloedapp.com^
+||dev-share.smartfashion.ai^
+||dev.getcontact.me^
+||dev.getemoji.me^
+||dev.gldn.io^
+||dev.go.levelbank.com^
+||dev.gomi.do^
+||dev.got-it.link^
+||dev.me.thequad.com^
+||dev.smartrbuyer.com^
+||dev.sswt.co^
+||development.me.thequad.com^
+||devlink.rivafashion.com^
+||devlink.saganworks.com^
+||devlink.sprive.com^
+||devtest.app-birdy.com^
+||dl-stage.zola.com^
+||dl.4buy.net^
+||dl.6thstreet.com^
+||dl.amazonmusic.com^
+||dl.autopay.eu^
+||dl.benefits.express-scripts.com^
+||dl.bimbaylola.com^
+||dl.booksy.com^
+||dl.boutiqaat.com^
+||dl.buildsafe.se^
+||dl.caavo.com^
+||dl.connectedboat.eu^
+||dl.correspondence.evernorth.com^
+||dl.dinngo.co^
+||dl.elaw.om^
+||dl.flipagram.com^
+||dl.flipkartwholesale.com^
+||dl.getdrivemark.com^
+||dl.grip.events^
+||dl.hadaaya.com^
+||dl.health-programs.express-scripts.com^
+||dl.klinq.com^
+||dl.mail.accredo.com^
+||dl.mail.express-scripts.com^
+||dl.manscore.com^
+||dl.mirsal.co^
+||dl.nalbes.com^
+||dl.nekropol-khv.ru^
+||dl.oneworldonesai.com^
+||dl.orders.accredo.com^
+||dl.orders.express-scripts.com^
+||dl.popclub.co.in^
+||dl.purplle.com^
+||dl.right2vote.in^
+||dl.rivafashion.com^
+||dl.shopwell.com^
+||dl.tablelist.com^
+||dl.thebeat.co^
+||dl.tytocare.com^
+||dl.wooribank.com.kh^
+||dl.workindia.in^
+||dl.zola.com^
+||dl2.brandatt.com^
+||dldev.wooribank.com.kh^
+||dlh1.hilton.com^
+||dlink-staging.blueapron.com^
+||dlink.blueapron.com^
+||dlink.hsdyn.com^
+||dlink.upperinc.com^
+||dlp.egghead.link^
+||dls.guidrr.com^
+||dluat.pokerbros.net^
+||dluat.supremapoker.net^
+||do.exaai.chat^
+||do.usefireside.com^
+||domainbntest.branchcustom.xyz^
+||domino.flycl.ps^
+||download-staging.planify.io^
+||download.ayazona.com^
+||download.backpackergame.com^
+||download.bonnti.com^
+||download.coinseed.co^
+||download.connectie.com^
+||download.dackinc.com^
+||download.frolit.io^
+||download.getneema.com^
+||download.gravitus.com^
+||download.headhelp.io^
+||download.helponymous.com^
+||download.ibuzza.net^
+||download.innit.com^
+||download.joingofree.com^
+||download.kesh5.co.il^
+||download.kuailefun.com^
+||download.milkpot.com^
+||download.parkunload.com^
+||download.planify.io^
+||download.poolking.in^
+||download.quizdom.com^
+||download.quizdom.gr^
+||download.sendstack.africa^
+||download.sharexpere.com^
+||download.shiftsmart.com^
+||download.spotangels.com^
+||download.supercoating.com.hk^
+||download.wearelistening.co.nz^
+||download.withu.fit^
+||download.yuehlia.com^
+||download.zikirapp.com^
+||dp.tuex.ca^
+||drive.carpoollogistics.com^
+||drive.waitrapp.com^
+||driver.dctaxi.com^
+||driver.jugnoo.in^
+||e.e.themighty.com^
+||e.shop.app^
+||e.synchronybank.com^
+||e.vcty.co^
+||e035.pandasuite.io^
+||e246.pandasuite.io^
+||e403.pandasuite.io^
+||eat.newtrina.com^
+||ebony.black.news^
+||edu.quizdom.gr^
+||educationlink.clear360.com^
+||ee93.pandasuite.io^
+||ef71.pandasuite.io^
+||elijah.tantawy.app^
+||elinks.dice.com^
+||em.getsimpleprints.com^
+||em.touchtunes.com^
+||em6802.musesapp.com^
+||email-activecampaign.branch.rocks^
+||email-activecampaign.keylyst.com^
+||email-adobe.branch.rocks^
+||email-appboy.branch.rocks^
+||email-betaout.branch.rocks^
+||email-bronto-stage.branch.rocks^
+||email-bronto.branch.rocks^
+||email-bss-new.branch.rocks^
+||email-campmon.branch.rocks^
+||email-cheetahmail.branch.rocks^
+||email-click-test-for-branch.vts.com^
+||email-clicks.vts.com^
+||email-cm.branch.rocks^
+||email-cordial.branch.rocks^
+||email-eloqua.branch.rocks^
+||email-emarsys.branch.rocks^
+||email-epsilon.branch.rocks^
+||email-full-sailthru.branch.rocks^
+||email-hubspot.branch.rocks^
+||email-icubespro.branch.rocks^
+||email-insider.branch.rocks^
+||email-iterable.branch.rocks^
+||email-klaviyo.branch.rocks^
+||email-link.mg-staging.surkus.com^
+||email-link.mg.surkus.com^
+||email-listrak.branch.rocks^
+||email-mailjet.branch.rocks^
+||email-mailup.branch.rocks^
+||email-mandrill.branch.rocks^
+||email-mandrill.id90travel.com^
+||email-marketo.branch.rocks^
+||email-messagegears.branch.rocks^
+||email-moengage.branch.rocks^
+||email-rapidmail.branch.rocks^
+||email-sailthru.branch.io^
+||email-selligent.branch.rocks^
+||email-sender.branch.rocks^
+||email-sendgrid.branch.rocks^
+||email-simple-sailthru.branch.rocks^
+||email-smartech.branch.rocks^
+||email-sp.branch.rocks^
+||email-staging.goodrx.com^
+||email-test.dmcperforma.com.br^
+||email-test.wirexapp.com^
+||email-vero.branch.rocks^
+||email-yesmail.branch.rocks^
+||email.agfuse.com^
+||email.app.theiconic.com.au^
+||email.branch.ninomail.com^
+||email.branchio.mg.kreezee.com^
+||email.chope.co^
+||email.clearscore.ca^
+||email.clearscore.co.za^
+||email.clearscore.com.au^
+||email.clearscore.com^
+||email.customerio.branch.rocks^
+||email.dev.mypopshop.app^
+||email.devishetty.com^
+||email.email-cusomerio.branch.rocks^
+||email.everyonesocial.apptio.com^
+||email.everyonesocial.bostonscientific.com^
+||email.everyonesocial.circle.com^
+||email.everyonesocial.colt.net^
+||email.everyonesocial.coupa.com^
+||email.everyonesocial.dykema.com^
+||email.everyonesocial.frontier.com^
+||email.everyonesocial.gumgum.com^
+||email.everyonesocial.hmausa.com^
+||email.everyonesocial.indeed.com^
+||email.everyonesocial.inmoment.com^
+||email.everyonesocial.integritystaffing.com^
+||email.everyonesocial.lexisnexisrisk.com^
+||email.everyonesocial.lumen.com^
+||email.everyonesocial.merckgroup.com^
+||email.everyonesocial.ni.com^
+||email.everyonesocial.notarize.com^
+||email.everyonesocial.nuskin.com^
+||email.everyonesocial.rubrik.com^
+||email.everyonesocial.united.com^
+||email.everyonesocial.unity.com^
+||email.floatme.io^
+||email.fretello.com^
+||email.goodrx.com^
+||email.happ.social^
+||email.headsuphealth.com^
+||email.inteng-testing.com^
+||email.link.flipgive.com^
+||email.luminpdf.com^
+||email.mail.floatme.io^
+||email.member.theknot.com^
+||email.mg.everyonesocial.com^
+||email.mg.repuzzlic.com^
+||email.mg.test.everyonesocial.com^
+||email.msg.navyfederal.org^
+||email.msg.workday.com^
+||email.mypopshop.app^
+||email.pac-12.com^
+||email.pray.com^
+||email.qa.member.theknot.com^
+||email.reflectlyapp.com^
+||email.rentomojo.in^
+||email.rentomojo.org^
+||email.rentomojomailer.com^
+||email.shouta.co^
+||email.social.avasecurity.com^
+||email.social.f5.com^
+||email.social.qualtrics.com^
+||email.staging-link.flipgive.com^
+||email.strava.com^
+||email.thislife.com^
+||email.wingocard.com^
+||email.wirexapp.com^
+||email1.strava.com^
+||emailct.enfavr.com^
+||emailer45.clovinfo.com^
+||emails.ahctv.com^
+||emails.animalplanet.com^
+||emails.app.allcal.com^
+||emails.cookingchanneltv.com^
+||emails.destinationamerica.com^
+||emails.discoverygo.com^
+||emails.discoverylife.com^
+||emails.foodnetwork.com^
+||emails.hgtv.com^
+||emails.investigationdiscovery.com^
+||emails.motortrend.com^
+||emails.sciencechannel.com^
+||emails.shopupp.com^
+||emails.tlc.com^
+||emails.travelchannel.com^
+||emails.verishop.com^
+||emails.watchown.tv^
+||emb.soothe.com^
+||emlink.hermo.my^
+||emm.ca.puma.com^
+||emm.us.puma.com^
+||encuestas.billeteramango.com^
+||enroll.workforcewellness.com^
+||epoisejobs.epoise.com^
+||epoisepreptest.epoise.com^
+||espaniapizza.openapp.link^
+||espressoroom.openapp.link^
+||eu.gldn.io^
+||euapp.levi.com^
+||eureka-app.eurekaplatform.org^
+||event.spektare.com^
+||eventos.emkt.ingressorapido.com.br^
+||exchange.happ.social^
+||eximius.epoise.com^
+||exitachieve.myre.io^
+||expertsender.branch.rocks^
+||exprealty377.myre.io^
+||f.a23.in^
+||f928.pandasuite.io^
+||face2.ishoppingapp.com^
+||familydoctor-app.hotdoc.com.au^
+||familypractice-app.hotdoc.com.au^
+||fast.icars.cc^
+||fb.echovisuals.com^
+||feedback.campbellmetal.com^
+||feedback.imsmetals.com^
+||feedme.use-beez.com^
+||fetch.gethuan.com^
+||ff.pdf.ac^
+||fight.offtherecord.com^
+||fishing.daigostudio.com^
+||fleet-eml.postmates.com^
+||flutter.branchster.in^
+||foodsouvlakibar.openapp.link^
+||form.heroes.jobs^
+||fraudandcyberawareness.safeguard.hsbc.com^
+||friends.hyll.com^
+||fscareers.epoise.com^
+||fscareerstest.epoise.com^
+||ft.groc.press^
+||ftp.happ.social^
+||fullerton-app.hotdoc.com.au^
+||fut.mondo.link^
+||g.getsimpler.me^
+||g.pathsha.re^
+||g.staging.pathsha.re^
+||g2048.rgluk.com^
+||g993dvyzae.branch.salesfloor.net^
+||ga.groc.press^
+||gallerysouvlakeri.openapp.link^
+||gawayez.e-postserv.com^
+||gb-asymbo.m-shop.me^
+||gear.echovisuals.com^
+||get-beta.kabbee.com^
+||get-dev.mastersapp.com^
+||get-lor.tacter.app^
+||get-stage.petdesk.com^
+||get-staging.even.com^
+||get-staging.iynk.com^
+||get-staging.soloyal.co^
+||get-test-employer.switchapp.com^
+||get-test.avakin.com^
+||get-test.liom^
+||get.call-levels.com^
+||get.prapo.com^
+||get.printt.com^
+||get.printtapp.com^
+||get.prismapp.com^
+||get.pslove.com^
+||get.pslove.dev^
+||get.pulsega.me^
+||get.qapital.com^
+||get.revolut.com^
+||get.reward.me^
+||get.riyazapp.com^
+||get.roomiapp.com^
+||get.sakay.ph^
+||get.schoolbuddy.app^
+||get.seedly.sg^
+||get.sidekick.health^
+||get.smart-guide.org^
+||get.snapask.com^
+||get.soloyal.co^
+||get.somontreal.ca^
+||get.speaky.com^
+||get.spenn.com^
+||get.spot.so^
+||get.staging.tellusapp.com^
+||get.starguide.app^
+||get.stationhead.com^
+||get.switchapp.com^
+||get.telexa.mn^
+||get.tellusapp.com^
+||get.thesmartapp.me^
+||get.toffapp.co^
+||get.tunableapp.com^
+||get.tunity.com^
+||get.utelly.com^
+||get.venmo.com^
+||get.vent.co^
+||get.vero.co^
+||get.vida.co^
+||get.videokits.com^
+||get.viggo.com^
+||get.viggo.energy^
+||get.watchcat.app^
+||get.wawa.games^
+||get.weme.sh^
+||get.wemoms.com^
+||get.wishmindr.com^
+||get.wyndy.com^
+||get.wysa.uk^
+||get.yellw.co^
+||get.yugengamers.com^
+||getapp.beyondmenu.com^
+||getapp.eltiempo.es^
+||getapp.joinleaf.com^
+||getapp.keepy.me^
+||getapp.marinemax.com^
+||getapp.myhappyforce.com^
+||getapp.priceza.com^
+||getdev.payso.ca^
+||getl4w.lookout.com^
+||getownerapp.beyondmenu.com^
+||gets.myoyster.mx^
+||gettunable.affinityblue.com^
+||geystikigonia.openapp.link^
+||gh.vsee.me^
+||ghd.vsee.me^
+||gi.inhaabit.com^
+||go-dev.callersmart.com^
+||go-dev.qantaswellbeing.com^
+||go-staging.qantaswellbeing.com^
+||go-test.bigspring.io^
+||go-test.goflux.de^
+||go-test.homepass.com^
+||go-test.karos.fr^
+||go-test.string.me^
+||go-test.tamed.fdm.dk^
+||go-test.wondavr.com^
+||go-uat.qantaswellbeing.com^
+||go.17app.co^
+||go.4010.ru^
+||go.4sq.com^
+||go.aero.com^
+||go.alpha.avant.com^
+||go.alphaapp.sharekey.com^
+||go.app.sharekey.com^
+||go.asian.mingle.com^
+||go.askbee.my^
+||go.audacy.com^
+||go.augin.app^
+||go.aussie.mingle.com^
+||go.aussiesocial.innovatedating.com^
+||go.aussingles.ignite.technology^
+||go.avant.com^
+||go.backtest.io^
+||go.betql.co^
+||go.bigo.tv^
+||go.bilt.page^
+||go.blackppl.innovatedating.com^
+||go.bluecrewjobs.com^
+||go.bookmate.com^
+||go.booksy.com^
+||go.bouncie.com^
+||go.boxtiq.com^
+||go.brazil.innovatedating.com^
+||go.bro.social^
+||go.callersmart.com^
+||go.calo.app^
+||go.cardless.com^
+||go.cb-w.com^
+||go.channel.io^
+||go.checkncall.com^
+||go.cheerz.com^
+||go.chile.innovatedating.com^
+||go.china.innovatedating.com^
+||go.christsingles.mingle.com^
+||go.citizen.com^
+||go.clickipo.com^
+||go.colombia.innovatedating.com^
+||go.covoitici.fr^
+||go.cwtv.com^
+||go.dateinasia.innovatedating.com^
+||go.datingapp.mingle.com^
+||go.dev.hbnb.io^
+||go.dev.upnext.in^
+||go.devapp.sharekey.com^
+||go.develapme.com^
+||go.dgsta.com^
+||go.divorced.ignite.technology^
+||go.dngn.kr^
+||go.dreamgaragealabama.com^
+||go.driveclutch.com^
+||go.drivemyfreedom.com^
+||go.drivencarsallaccess.ca^
+||go.dubbi.com.br^
+||go.ebat.es^
+||go.ebates.ca^
+||go.egypt.innovatedating.com^
+||go.emails.discoveryplus.com^
+||go.europe.mingle.com^
+||go.everfave.com^
+||go.ezidox.com^
+||go.faithfollow.com^
+||go.fem.mingle.com^
+||go.fiestabites.com^
+||go.filipinocupid.date^
+||go.filipinosingles.ignite.technology^
+||go.findaplayer.com^
+||go.findplay.it^
+||go.fitfusion.com^
+||go.flexwheels.com^
+||go.flipauto.com^
+||go.flipfit.com^
+||go.flyreel.co^
+||go.france.innovatedating.com^
+||go.freework.com^
+||go.frescofrigo.app^
+||go.frip.kr^
+||go.futupilot.com^
+||go.fyndi.ng^
+||go.gaia.com^
+||go.gaydate.ignite.technology^
+||go.gaysingles.ignite.technology^
+||go.germansingles.ignite.technology^
+||go.germany.innovatedating.com^
+||go.getcyclique.com^
+||go.getone.today^
+||go.ginmon.de^
+||go.gridwise.io^
+||go.hbnb.io^
+||go.hcmuaf.edu.vn^
+||go.heleman.org^
+||go.heybianca.co^
+||go.heyho.my^
+||go.holidayextras.co.uk^
+||go.homear.io^
+||go.mytwc.com.au^
+||go.netherlands.innovatedating.com^
+||go.noondate.com^
+||go.norway.innovatedating.com^
+||go.ondutydoc.com^
+||go.onecart.co.za^
+||go.onefc.com^
+||go.ortholive.com^
+||go.palpita.net^
+||go.panda-click.com^
+||go.panda.sa^
+||go.parents.mingle.com^
+||go.payr.app^
+||go.peak.net^
+||go.petmire.com^
+||go.piccolo.mobi^
+||go.picsart.com^
+||go.pinoy.innovatedating.com^
+||go.playbackbone.com^
+||go.player2app.com^
+||go.poland.innovatedating.com^
+||go.polen-app.com^
+||go.porschedrive.com^
+||go.porscheparkingplus.com^
+||go.portfoliobyopenroad.com^
+||go.portugal.innovatedating.com^
+||go.power.trade^
+||go.powunity.com^
+||go.prealpha.avant.com^
+||go.prodapp.sharekey.com^
+||go.pubu.tw^
+||go.qantaswellbeing.com^
+||go.queer.ignite.technology^
+||go.rakuten.com^
+||go.rate.sh^
+||go.ratengoods.com^
+||go.real.co^
+||go.rever.co^
+||go.russia.innovatedating.com^
+||go.rzr.to^
+||go.saudiarabia.innovatedating.com^
+||go.seniorppl.mingle.com^
+||go.shokshak.com^
+||go.shop.app^
+||go.shoppremiumoutlets.com^
+||go.sirved.com^
+||go.skippy.ai^
+||go.smartjobr.com^
+||go.snipsnap.it^
+||go.socar.kr^
+||go.socar.my^
+||go.socialvenu.com^
+||go.southafrica.ignite.technology^
+||go.southafrica.innovatedating.com^
+||go.southafricacupid.co^
+||go.spain.innovatedating.com^
+||go.spot.com^
+||go.stagger.co^
+||go.staging.hbnb.io^
+||go.steps.me^
+||go.stgapp.sharekey.com^
+||go.streetbees.app^
+||go.stshr.co^
+||go.subaru-justdrive.com^
+||go.subscribe.mikealbert.com^
+||go.suiste.app^
+||go.sw.iftly.in^
+||go.sweet.io^
+||go.switzerland.innovatedating.com^
+||go.tab.com.au^
+||go.tamed.fdm.dk^
+||go.teepic.com^
+||go.teepik.com^
+||go.tellusapp.com^
+||go.test.mindfi.co^
+||go.test.shop.app^
+||go.thai.innovatedating.com^
+||go.tinder.com^
+||go.topicit.net^
+||go.trevo.my^
+||go.turkey.innovatedating.com^
+||go.twi.sm^
+||go.uae.innovatedating.com^
+||go.uk.innovatedating.com^
+||go.ukraine.innovatedating.com^
+||go.uksingles.ignite.technology^
+||go.unverbluemt.de^
+||go.usecaya.com^
+||go.venezuela.innovatedating.com^
+||go.viet.innovatedating.com^
+||go.voot.com^
+||go.voypost.com^
+||go.vsee.me^
+||go.wanderu.com^
+||go.wanna.com^
+||go.washland.ae^
+||go.webtoons.com^
+||go.weecare.co^
+||go.werbleapp.com^
+||go.whatchu.com^
+||go.wondavr.com^
+||go.worldwinner.com^
+||go.wu.com^
+||go.you-app.com^
+||go.zakatpedia.com^
+||go.zapyle.com^
+||go.zartoo.ir^
+||go.zebra.i-nox.de^
+||go.zoomex.com^
+||go.zvooq.com^
+||go2.letscliq.com^
+||goa.dngn.kr^
+||god.vsee.me^
+||godev.steps.me^
+||gone.pronhub.fun^
+||goseri-link.mysuki.io^
+||gotest.bouncie.com^
+||gotest.onecart.co.za^
+||gotest.onefc.com^
+||gotest.real.co^
+||gotest.taillight.com^
+||goto.nearlist.com^
+||goto.rosegal.com^
+||goto.zaful.com^
+||gotoaws.dresslily.com^
+||gotoaws.rosegal.com^
+||gotoaws.zaful.com^
+||gotoexp.dresslily.com^
+||gpplus-app.hotdoc.com.au^
+||gr.a23.in^
+||grc.openapp.link^
+||grn.openapp.link^
+||group.dusoft.de^
+||guardian-app.hotdoc.com.au^
+||guitarlearning.deplike.com^
+||guterrat.gaius.app^
+||gyradiko.openapp.link^
+||hanadev.branch.rocks^
+||hanatest.branch.rocks^
+||harman.epoise.com^
+||harmantest.epoise.com^
+||harpra-companion-test.harvinar.com^
+||harpra-companion.harvinar.com^
+||hello.ola.app^
+||hello.steadyapp.com^
+||hello.wellocution.com^
+||hf.forevernetworks.com^
+||hi.hipcamp.com^
+||hi.inhaabit.com^
+||hi.littlepixi.com^
+||hi.syllable.ai^
+||hi.wooribank.com^
+||hipizza.openapp.link^
+||hol.dir.tvsmiles.tv^
+||hootsuite.branch.rocks^
+||hop.dttd.app^
+||host.roxiapp.com^
+||hpark-adobe.branch.rocks^
+||hpark-beta-moengage.branch.rocks^
+||hpark-iterable.branch.rocks^
+||hpark-iterable2.branch.rocks^
+||hpark-marketo.branch.rocks^
+||hpark.branch.rocks^
+||hparksendgrid.branch.rocks^
+||hparksendgridstage.branch.rocks^
+||hst2-invite.ander.ai^
+||hu-topgal.m-shop.me^
+||hubert.branch.rocks^
+||i-dev.villa.ge^
+||i-staging.villa.ge^
+||i.airtel.in^
+||i.appbox.me^
+||i.carry.bible^
+||i.degoo.com^
+||i.getemoji.me^
+||i.honk.me^
+||i.lf360.co^
+||i.live.xyz^
+||i.livexyz.com^
+||i.morons.us^
+||i.play.vividpicks.com^
+||i.poker2u.app^
+||i.pokerbros.net^
+||i.raise.me^
+||i.rttd.io^
+||i.sandbox.love^
+||i.shelf.im^
+||i.spo^
+||igorsgtest.branch.rocks^
+||ilinks.petalcard.com^
+||info.gyg.com.au^
+||inform.liilix.com^
+||iterable.convoy.com^
+||join-staging.kloaked.app^
+||join-test.pre-prod.spur.io^
+||join-test.step.com^
+||join.air.me^
+||join.airvet.com^
+||join.amorus.net^
+||join.asteride.co^
+||join.belive.sg^
+||join.blimp.homes^
+||join.callie.app^
+||join.deetzapp.com^
+||join.entrylevel.net^
+||join.evercoin.com^
+||join.fitgrid.com^
+||join.fusely.app^
+||join.gerak.asia^
+||join.getstarsapp.com^
+||join.haha.me^
+||join.homeyapp.net^
+||join.hu-manity.co^
+||join.hypercare.com^
+||join.kloaked.app^
+||join.lapse.app^
+||join.motion-app.com^
+||join.newtrina.com^
+||join.our-story.co^
+||join.parentlove.me^
+||join.pockit.com^
+||join.qa.fitgrid.com^
+||join.reakt.to^
+||join.schmooze.tech^
+||join.sizl.com^
+||join.spur.io^
+||join.staging.spur.io^
+||join.step.com^
+||join.stuypend.com^
+||join.talker.network^
+||join.thekrishi.com^
+||join.tlon.io^
+||join.travelxp.com^
+||join.vibely.io^
+||join.vtail.co^
+||joina.rune.ai^
+||joinb.rune.ai^
+||jp.ppgamingproxy.lol^
+||jumpto.use-beez.com^
+||jupiterhealth-app.hotdoc.com.au^
+||just.playvici.com^
+||k.itribe.in^
+||k50.rtl2.de^
+||k5app.byjus.com^
+||kamchatka-io.traveler.today^
+||kartik.devishetty.com^
+||kartik.devishetty.net^
+||kd.eland.kr^
+||keyes.myre.io^
+||kingnews.burgerking.co.za^
+||kl-branch-sandbox.thekono.com^
+||kl-branch.thekono.com^
+||kotopoulathanasis.openapp.link^
+||l-t.topya.com^
+||l-test.civic.com^
+||l-test.guesthug.com^
+||l.apna.co^
+||l.audibook.si^
+||l.azarlive.com^
+||l.bhaibandhu.com^
+||l.bigbasket.com^
+||l.biglion.ru^
+||l.brightside.com^
+||l.civic.com^
+||l.coastapp.com^
+||l.create.canva.com^
+||l.cultgear.com^
+||l.dev.audibook.si^
+||l.du.coach^
+||l.e.domain.com.au^
+||l.engage.canva.com^
+||l.getpyfl.com^
+||l.gocement.com^
+||l.gpay.to^
+||l.guesthug.com^
+||l.ialoc.app^
+||l.iamfy.co^
+||l.imax.com^
+||l.itribe.in^
+||l.jayshetty.me^
+||l.kodika.io^
+||l.lottery.com^
+||l.lyfshort.com^
+||l.m.tradiecore.com.au^
+||l.mydoki.app^
+||l.myvoleo.com^
+||l.navx.co^
+||l.newnew.co^
+||l.nflo.at^
+||l.post2b.com^
+||l.prk.bz^
+||l.redcross.or.ke^
+||l.rovo.co^
+||l.siply.in^
+||l.sqrrl.in^
+||l.support.canva.com^
+||l.supremapoker.net^
+||l.t.domain.com.au^
+||l.thumbtack.com^
+||l.topya.com^
+||l.umba.com^
+||l.unfy.ai^
+||l.urban.com.au^
+||l.uvcr.me^
+||l.voalearningenglish.in^
+||l.voleousa.com^
+||l.whizzl.com^
+||l.workoutparty.co^
+||l.your.md^
+||lapescheria.openapp.link^
+||launch.aella.app^
+||launch.meetsaturn.com^
+||launch.vypr.it^
+||lb.billing01.email-allstate.com^
+||lb.marketing01.email-allstate.com^
+||lb.quote01.email-allstate.com^
+||lb.service01.email-allstate.com^
+||ldv.midoplay.com^
+||learn.infinitylearn.com^
+||learn.mywallst.app^
+||learn.rubicoin.com^
+||leb-app.diasporaid.com^
+||lets-dev.irl.com^
+||lets.instantify.it^
+||lets.playzingus.com^
+||lets.useflash.app^
+||lets.watcho.com^
+||level.badlandgame.com^
+||levi247.levi.com^
+||lhp-mortgage.loanzify.com^
+||li.rtl2.de^
+||link-acceptance.alan.com^
+||link-app-dev.agvisorpro.com^
+||link-app-preprod.agvisorpro.com^
+||link-app-staging.agvisorpro.com^
+||link-app.agvisorpro.com^
+||link-be-acceptance.alan.com^
+||link-be.alan.com^
+||link-beta.qonto.co^
+||link-ccontact.focuscura.com^
+||link-debug.killi.io^
+||link-dev.fandompay.com^
+||link-dev.gem.co^
+||link-dev.killi.io^
+||link-dev.sensemetrics.com^
+||link-dev.tradee.com^
+||link-es-acceptance.alan.com^
+||link-es.alan.com^
+||link-mind.alan.com^
+||link-partner.btaskee.com^
+||link-qc.trycircle.com^
+||link-staging.bestest.io^
+||link-staging.killi.io^
+||link-staging.samewave.com^
+||link-staging.viivio.io^
+||link-staging.youbooq.me^
+||link-test.360vuz.com^
+||link-test.acuba.com^
+||link-test.avenue.us^
+||link-test.chalknation.com^
+||link-test.divcity.com^
+||link-test.external.wealth-park.com^
+||link-test.glide.com^
+||link-test.halal-navi.com^
+||link-test.hanpath.com^
+||link-test.ianacare.team^
+||link-test.steadio.co^
+||link-test.trendstag.com^
+||link-test.tumblbug.com^
+||link-web.tatadigital.com^
+||link.1112.com^
+||link.1800contacts.com^
+||link.1fo.vin^
+||link.24go.co^
+||link.321okgo.com^
+||link.360vuz.com^
+||link.3dbear.io^
+||link.abandonedmonkey.codes^
+||link.adhdinsight.com^
+||link.admin.kodakmoments.com^
+||link.afterpay.com^
+||link.ag.fan^
+||link.alerts.busuu.app^
+||link.angelstudios.com^
+||link.announce.busuu.app^
+||link.automated.almosafer.com^
+||link.carfax.com^
+||link.cdl.freshly.com^
+||link.cheerz.com^
+||link.clickipo.com^
+||link.clubmanagergame.com^
+||link.cluno.com^
+||link.cofyz.com^
+||link.collectivebenefits.com^
+||link.conio.com^
+||link.covve.com^
+||link.crazyquest.com^
+||link.creatively.life^
+||link.creditonemail.com^
+||link.crowdfireapp.com^
+||link.crumbl.com^
+||link.curious.com^
+||link.curve.com^
+||link.dana.id^
+||link.daryse.com^
+||link.dawriplus.com^
+||link.debatespace.app^
+||link.debatespace.io^
+||link.deliverr.ca^
+||link.design.unum.la^
+||link.dev-portal.icanbwell.com^
+||link.dev.appewa.com^
+||link.develapme.com^
+||link.developerinsider.co^
+||link.dinifi.com^
+||link.dior.com^
+||link.discotech.me^
+||link.dishcult.com^
+||link.district34.com^
+||link.doctorcareanywhere.com^
+||link.dongnealba.com^
+||link.doopage.com^
+||link.doppels.com^
+||link.dosh.cash^
+||link.dralilabolsanelo.com^
+||link.drum.io^
+||link.dubble.me^
+||link.dvendor.com^
+||link.e.blog.myfitnesspal.com^
+||link.easy.me^
+||link.edapp.com^
+||link.eksperience.net^
+||link.electroneum.com^
+||link.electrover.se^
+||link.em.sssports.com^
+||link.email.almosafer.com^
+||link.email.bnext.es^
+||link.email.myfitnesspal.com^
+||link.email.ninetynine.com^
+||link.email.soothe.com^
+||link.email.tajawal.com^
+||link.emblyapp.com^
+||link.empleyo.com^
+||link.epmyalptest.com^
+||link.eventconnect.io^
+||link.evergreen-life.co.uk^
+||link.everlance.com^
+||link.expiwell.com^
+||link.explorz.app^
+||link.extasy.com^
+||link.external.wealth-park.com^
+||link.fabulist.app^
+||link.faithplay.com^
+||link.fanfight.com^
+||link.fanzapp.io^
+||link.farm.seedz.ag^
+||link.favorited.com^
+||link.fieldcamp.com^
+||link.finfinchannel.com^
+||link.finnomena.com^
+||link.fitforbucks.com^
+||link.fjuul.com^
+||link.flickplay.co^
+||link.flowerapp.com^
+||link.fn365.co.uk^
+||link.foodgroup.com^
+||link.foodi.fr^
+||link.foodiapp.com^
+||link.foodliapp.com^
+||link.foodnetwork.com^
+||link.forexhero.eu^
+||link.freetrade.io^
+||link.frescoymas.com^
+||link.fretello.com^
+||link.gamebrain.co.uk^
+||link.gem.co^
+||link.geo4.me^
+||link.geoparquelitoralviana.pt^
+||link.get.discovery.plus^
+||link.getamber.io^
+||link.getbaqala.com^
+||link.getcoral.app^
+||link.getdinr.com^
+||link.getfoodly.com^
+||link.getfxguru.com^
+||link.getoutpatient.com^
+||link.getremix.ai^
+||link.getsaturday.com^
+||link.getsendit.com^
+||link.getshortcut.co^
+||link.getsigneasy.com^
+||link.giide.com^
+||link.glicrx.com^
+||link.glide.com^
+||link.global.id^
+||link.globecar.app^
+||link.gokimboo.com^
+||link.gradeproof.com^
+||link.gradeviewapp.com^
+||link.granderota.riadeaveiro.pt^
+||link.gravio.com^
+||link.guoqi365.com^
+||link.halal-navi.com^
+||link.hallow.com^
+||link.happycar.info^
+||link.harveyssupermarkets.com^
+||link.hayhayapp.se^
+||link.hbogo.com^
+||link.hbonow.com^
+||link.hd.io^
+||link.heal.com^
+||link.healthbank.io^
+||link.heartbeathealth.com^
+||link.hello-au.circles.life^
+||link.hello-sg.circles.life^
+||link.hello.unum.la^
+||link.hello2-sg.circles.life^
+||link.hellobeerapp.com^
+||link.helloclue.com^
+||link.hermanpro.com^
+||link.hey.mypostcard.com^
+||link.heycloudy.co^
+||link.heyitsbingo.com^
+||link.heymiso.app^
+||link.hivexchange.com.au^
+||link.hobbinity.com^
+||link.hola.health^
+||link.hugoapp.com^
+||link.huuu.ge^
+||link.hyre.no^
+||link.iabmexico.com.mx^
+||link.ianacare.team^
+||link.icecream.club^
+||link.igglo.com^
+||link.im.intermiles.com^
+||link.immobilienscout24.at^
+||link.imprint.co^
+||link.imumz.com^
+||link.individuology.com^
+||link.info.myfitnesspal.com^
+||link.inklusiv.io^
+||link.inoxmovies.com^
+||link.inploi.com^
+||link.insense.pro^
+||link.insider.in^
+||link.instabridge.com^
+||link.instaeats.com^
+||link.instnt.com^
+||link.invoiceowl.com^
+||link.itsdcode.com^
+||link.jawwy.tv^
+||link.jetsobee.com^
+||link.jetstar.com^
+||link.jig.space^
+||link.jitta.co^
+||link.jmbl.app^
+||link.jobble.com^
+||link.joinswitch.co^
+||link.joinswoop.com^
+||link.joinworkpass.com^
+||link.justincase.jp^
+||link.keycollectorcomics.com^
+||link.kidfund.us^
+||link.kidzapp.com^
+||link.killi.io^
+||link.kindred.co^
+||link.kingsnews.whopper.co.za^
+||link.kitchnrock.com^
+||link.kofiz.ru^
+||link.kulina.id^
+||link.lcdg.io^
+||link.lead-out-app-staging.specialized.com^
+||link.lead-out-app.specialized.com^
+||link.legapass.com^
+||link.lendingtree.com^
+||link.letsdayout.com^
+||link.litnet.com^
+||link.loyalty.almosafer.com^
+||link.lpm.surkus.com^
+||link.lpt.surkus.com^
+||link.mail.blidz.com^
+||link.mail.burgerking.ca^
+||link.mail.popsa.com^
+||link.mail.step.com^
+||link.marketing.bleacherreport.com^
+||link.miratelemundo.com^
+||link.mktg.almosafer.com^
+||link.mktg.tajawal.com^
+||link.mobstar.com^
+||link.mypostcard.com^
+||link.nbcadmin.com^
+||link.news.bleacherreport.com^
+||link.news.clearpay.co.uk^
+||link.news.goeuro.com^
+||link.notifications.busuu.app^
+||link.offers.kodakmoments.com^
+||link.onference.in^
+||link.orders.kodakmoments.com^
+||link.pluckk.in^
+||link.plzgrp.it^
+||link.podercard.com^
+||link.point.app^
+||link.poputi.coffee^
+||link.portal.icanbwell.com^
+||link.possiblefinance.com^
+||link.pray.com^
+||link.prenuvo.com^
+||link.prokure.it^
+||link.pulsz.com^
+||link.purplebrick.io^
+||link.qa.bepretty.cl^
+||link.qa.heal.com^
+||link.qanva.st^
+||link.qeenatha.com^
+||link.qp.me^
+||link.radiotunes.com^
+||link.rangde.in^
+||link.rc.faithplay.com^
+||link.rechat.com^
+||link.reflexhealth.co^
+||link.reklaimyours.com^
+||link.resy.com^
+||link.reuters.com^
+||link.revolut.com^
+||link.ride.specialized.com^
+||link.ride.staging.specialized.com^
+||link.ridewithvia.com^
+||link.ripple.thedacare.org^
+||link.rippling.com^
+||link.roomaters.com^
+||link.roveworld.xyz^
+||link.ruhgu.com^
+||link.saganworks.com^
+||link.samewave.com^
+||link.sandboxx.us^
+||link.saratogaocean.com^
+||link.savvy360.com^
+||link.sayferapp.com^
+||link.scoutfin.com^
+||link.seaflux.tech^
+||link.sendbirdie.com^
+||link.sendoutpost.com^
+||link.sensemetrics.com^
+||link.setyawan.dev^
+||link.sevencooks.com^
+||link.sheeriz.com^
+||link.shengcekeji.com^
+||link.shopbuo.com^
+||link.shopview.in^
+||link.shotgun.live^
+||link.shuffoe.com^
+||link.shutterfly.com^
+||link.sidechat.lol^
+||link.siftfoodlabels.com^
+||link.sixcycle.com^
+||link.skillacademy.org^
+||link.sluv.org^
+||link.smallcase.com^
+||link.smartrbuyer.com^
+||link.smile.com.au^
+||link.smokeandsoda.com^
+||link.snapfeet.io^
+||link.snaphabit.app^
+||link.socar.my^
+||link.socash.io^
+||link.somm.io^
+||link.sooooon.com^
+||link.soultime.com^
+||link.space.ge^
+||link.sparrow.geekup.vn^
+||link.splittr.io^
+||link.sporthub.io^
+||link.sprive.com^
+||link.stabilitas.io^
+||link.staff.notab.com^
+||link.stage.easy.me^
+||link.staging.clearsky.jlg.com^
+||link.starshiphsa.com^
+||link.staycircles.com^
+||link.steadio.co^
+||link.steezy.co^
+||link.stg.boxofficevr.com^
+||link.stg.imprint.co^
+||link.stickybeak.co^
+||link.stockalarm.io^
+||link.stockviva.com^
+||link.straitstimes.com^
+||link.stridekick.com^
+||link.studdy.ai^
+||link.stynt.com^
+||link.subscribly.com^
+||link.superlocal.com^
+||link.supermama.io^
+||link.superviz.com^
+||link.support.discovery.plus^
+||link.surbee.io^
+||link.swa.info^
+||link.swaypayapp.com^
+||link.swingindex.golf^
+||link.syfy-channel.com^
+||link.szl.ai^
+||link.t2o.io^
+||link.talescreator.com^
+||link.taptapapp.com^
+||link.target.com.au^
+||link.tastemade.com^
+||link.team.bnext.es^
+||link.team.bnext.io^
+||link.tempo.fit^
+||link.tenallaccess.com.au^
+||link.test.chalknation.com^
+||link.test.stickybeak.co^
+||link.testbook.com^
+||link.thejetjournal.com^
+||link.theprenatalnutritionlibrary.com^
+||link.thesecurityteam.rocks^
+||link.thisislex.app^
+||link.thue.do^
+||link.tigerhall.com^
+||link.tigerhall.isdemo.se^
+||link.tillfinancial.io^
+||link.togaapp.com^
+||link.tomoloyalty.com^
+||link.tomoloyaltysg.com^
+||link.touchtunes.com^
+||link.touchtunesmail.com^
+||link.tr.freshly.com^
+||link.tradee.com^
+||link.tradle.io^
+||link.tribeup.social^
+||link.truckerpath.com^
+||link.trycircle.com^
+||link.trymida.com^
+||link.trytaptab.com^
+||link.tubi.tv^
+||link.tul.io^
+||link.tumblbug.com^
+||link.tupinambaenergia.com.br^
+||link.tv.cbs.com^
+||link.uat.my.smartcrowd.ae^
+||link.ulive.chat^
+||link.up.com.au^
+||link.upperinc.com^
+||link.urbansitter.com^
+||link.us.paramountplus.com^
+||link.usa-network.com^
+||link.usechatty.com^
+||link.vavabid.fr^
+||link.velas.com^
+||link.vezeeta.com^
+||link.vibo.io^
+||link.victoriatheapp.com^
+||link.viivio.io^
+||link.viska.com^
+||link.voiapp.io^
+||link.volt.app^
+||link.vozzi.app^
+||link.wagerlab.app^
+||link.wait.nl^
+||link.wakatoon.com^
+||link.walem.io^
+||link.wappiter.com^
+||link.watchbravotv.com^
+||link.watchoxygen.com^
+||link.wazirx.com^
+||link.wearecauli.com^
+||link.weepec.com^
+||link.wefish.app^
+||link.wegowhere.com^
+||link.welcomeapp.se^
+||link.wetrade.app^
+||link.winndixie.com^
+||link.winwintechnology.com^
+||link.wisaw.com^
+||link.wix.app^
+||link.workmate.asia^
+||link.workwellnessinstit.letzbig.com^
+||link.yourway.burgerking.ca^
+||linker.lyrahealth.com^
+||linker.staging.lyrahealth.com^
+||links-anz.afterpay.com^
+||links-dev.sandboxx.us^
+||links-na.afterpay.com^
+||links-uk.clearpay.co.uk^
+||links.ab.soul-cycle.email^
+||links.alerts.depop.com^
+||links.alerts.forhims.com^
+||links.alerts.hims.com^
+||links.amiralearning.com^
+||links.announce.touchsurgery.com^
+||links.automated.almosafer.com^
+||links.aws.nexttrucking.com^
+||links.blueapron.com^
+||links.br.discoveryplus.com^
+||links.ca.discoveryplus.com^
+||links.campermate.com^
+||links.colonelsclub.kfc.com^
+||links.customers.instacartemail.com^
+||links.dailypay.com^
+||links.e.aecrimecentral.com^
+||links.e.aetv.com^
+||links.e.history.com^
+||links.e.historyvault.com^
+||links.e.lifetimemovieclub.com^
+||links.e.mylifetime.com^
+||links.e.wine.com^
+||links.edm.noracora.com^
+||links.elmc.mylifetime.com^
+||links.em.aetv.com^
+||links.em.history.com^
+||links.em.mylifetime.com^
+||links.email.almosafer.com^
+||links.email.bravotv.com^
+||links.email.distrokid.com^
+||links.email.getgocafe.com^
+||links.email.getprizepool.com^
+||links.email.gianteagle.com^
+||links.email.greenlight.me^
+||links.email.nbc.com^
+||links.email.oxygen.com^
+||links.email.tajawal.com^
+||links.email.usanetwork.com^
+||links.es.aecrimecentral.com^
+||links.evault.history.com^
+||links.fabletics.co.uk^
+||links.fabletics.com^
+||links.fabletics.de^
+||links.fabletics.es^
+||links.fabletics.fr^
+||links.fennel.com^
+||links.getupside.com^
+||links.glamsquad.com^
+||links.grand.co^
+||links.h5.hilton.com^
+||links.h6.hilton.com^
+||links.hitrecord.org^
+||links.huckleberry-labs.com^
+||links.i.blueapron.com^
+||links.info.getgocafe.com^
+||links.info.gianteagle.com^
+||links.info.headspace.com^
+||links.info.kfc.com^
+||links.joro.app^
+||links.justfab.co.uk^
+||links.justfab.com^
+||links.justfab.de^
+||links.justfab.es^
+||links.justfab.fr^
+||links.m.blueapron.com^
+||links.mail.stubhub.com^
+||links.marketing.getprizepool.com^
+||links.max.com^
+||links.mezurashigame.com^
+||links.mgmresorts.com^
+||links.motortrend.com^
+||links.myplace.co^
+||links.myvolly.com^
+||links.nbc.com^
+||links.nbcnews.com^
+||links.news.forhims.com^
+||links.news.hims.com^
+||links.news.mindbody.io^
+||links.nexttrucking.com^
+||links.notarize.com^
+||links.notifications.headspace.com^
+||links.offers.mindbody.io^
+||links.official.vsco.co^
+||links.ohhey.depop.com^
+||links.openfit.com^
+||links.orders.kfc.com^
+||links.ottplay.com^
+||links.outskill.app^
+||links.own.tv^
+||links.oxstreet.com^
+||links.petpartner.co^
+||links.ph.discoveryplus.com^
+||links.picsart.com^
+||links.pinart.io^
+||links.pkrewards.com^
+||links.plated.com^
+||links.playon.tv^
+||links.quatreepingles.fr^
+||links.rally.app^
+||links.respilates.app^
+||links.riftapp.co^
+||links.riverratrounders.com^
+||links.samsclub.com^
+||links.schnucks.com^
+||links.sciencechannel.com^
+||links.sheroes.in^
+||links.shipt.com^
+||links.shoprunner.com^
+||links.shukran.com^
+||links.sidehide.com^
+||links.siklusrefill.com^
+||links.silverpop-email.branch.rocks^
+||links.sleep.com^
+||links.sleepscore.com^
+||links.sliceit.com^
+||links.slicepay.in^
+||links.soulsoftware.org^
+||links.sparkmail.branch.rocks^
+||links.staging-lifestepsapp.com^
+||links.stretchitapp.com^
+||links.subscribed.app^
+||links.sudokuplus.net^
+||links.swazzen.com^
+||links.sweet.io^
+||links.t.blueapron.com^
+||links.t.totallymoney.com^
+||links.t.wine.com^
+||links.teladoc.com^
+||links.thedyrt.com^
+||links.theinfatuation.com^
+||links.thephoenix.org^
+||links.thriveglobal.com^
+||links.tlc.com^
+||links.travelchannel.com^
+||links.tribe.fitness^
+||links.trutify.com^
+||links.tutorbin.com^
+||links.vestoapp.com^
+||links.vyzivovetabulky.sk^
+||links.weareher.com^
+||links.well.co^
+||links.wesponsored.com^
+||links.yayzy.com^
+||links.younify.tv^
+||links.younow.com^
+||links.yummly.com^
+||links2.chownowmail.com^
+||links2.fluent-forever.com^
+||links2.pillar.app^
+||linksbntest.branchcustom.xyz^
+||linkspine.insights.md^
+||linkspinedev.insights.md^
+||linktest.itsdcode.com^
+||linkto.driver.codes^
+||linktrace.diningcity.cn^
+||linkus.buddybet.com^
+||linkvet.insights.md^
+||linkvetdev.insights.md^
+||listen.trakks.com^
+||listen.tunein.com^
+||live.onamp.com^
+||lk.parisfoodies.fr^
+||lk.vrstories.com^
+||lm.groc.press^
+||lnk-stg.welthee.com^
+||lnk-test.jointakeoff.com^
+||lnk.christmaslistapp.com^
+||lnk.culturetrip.com^
+||lnk.dgsta.com^
+||lnk.ernesto.it^
+||lnk.gleeph.net^
+||lnk.joinpopp.in^
+||lnk.jointakeoff.com^
+||lnk.most-days.com^
+||lnk.mostdays.com^
+||lnk.raceful.ly^
+||lnk.rush.gold^
+||lnk.welthee.com^
+||lnk2.patpat.com^
+||local-shares.ri.la^
+||location.imsmetals.com^
+||login.e-ticket.co.jp^
+||lotte.myomee.com^
+||lp.egghead.link^
+||lub-links.eyecue.io^
+||lw.b.inhaabit.com^
+||m-t.topya.com^
+||m-test.papertrail.io^
+||m.aecrimecentral.com^
+||m.aetv.com^
+||m.alto.com^
+||m.bell.ca^
+||m.bigroad.com^
+||m.bitmo.com^
+||m.bookis.com^
+||m.brain.ai^
+||m.brandbassador.com^
+||m.d11.io^
+||m.dq.ca^
+||m.dq.com^
+||m.enlivenhaircare.my^
+||m.equinoxplus.com^
+||m.fontself.com^
+||m.food.sb^
+||m.fyi.tv^
+||m.giftry.com^
+||m.go4.io^
+||m.happ.social^
+||m.history.com^
+||m.historyvault.com^
+||m.icares.app^
+||m.ioicommunity.com.my^
+||m.irl.com^
+||m.irlmail.org^
+||m.jarvisinvest.com^
+||m.kaikuhealth.com^
+||m.lifetimemovieclub.com^
+||m.lssquare.com^
+||m.luckym.ca^
+||m.moomoo.com^
+||m.mylifetime.com^
+||m.natural.ai^
+||m.navi.com^
+||m.nxtgn.us^
+||m.origin.com.au^
+||m.papertrail.io^
+||m.pcmobile.ca^
+||m.petmire.com^
+||m.plateiq.com^
+||m.providers.alto.com^
+||m.realself.com^
+||m.reunionliveseafood.my^
+||m.rifird.com^
+||m.riipay.my^
+||m.rsvy.io^
+||m.shoppre.com^
+||m.shopprecouriers.com^
+||m.shoppreparcels.com^
+||m.showaddict.com^
+||m.spaceplus.my^
+||m.staging.plateiq.com^
+||m.suda.io^
+||m.topya.com^
+||m.varagesale.com^
+||m.vpc.ca^
+||m.washmen.com^
+||m.wishmindr.com^
+||m1.stadiumgoods.com^
+||m2.washmen.com^
+||mac.macheq.com^
+||magic.freetrade.io^
+||mail.academyforconsciousleadership.net^
+||mail.blueapronwine.com^
+||mail.bravado.co^
+||mail.central.co.th^
+||mail.tops.co.th^
+||mail.wondery.com^
+||mail1.happ.social^
+||mail2.happ.social^
+||mailer.happ.social^
+||mailx.happ.social^
+||mallioras.openapp.link^
+||mandrillapp.zola.com^
+||mapp.biryanibykilo.com^
+||marceline.wantsext.me^
+||marketing.boostmi.com^
+||math.meistercody.com^
+||matrix.elecle.bike^
+||maui.shakaguide.com^
+||me.glamhive.com^
+||media.wave.qburst.com^
+||meinauto.hdd-dienste.de^
+||member-app.rightwayhealthcare.com^
+||members.atomcomplete.com^
+||merchant-app.th3rdwave.coffee^
+||merchant.libertycarz.com^
+||microsoft.eventionapp.com^
+||mikelperaia.openapp.link^
+||mitt.3.se^
+||mitt3.3.se^
+||mjwjfzw.goldenways.fun^
+||mk.appwebel.com^
+||mkt.wemakeprxstream.in^
+||mlinks.fluz.app^
+||mlinks.helloalfred.com^
+||monster.branch.rocks^
+||mx.carfax.com^
+||notice.hoopladigital.com^
+||notify.pray.com^
+||offers.grassdoor.com^
+||open.anghami.com^
+||open.bitcoinmagazine.app^
+||open.catchapp.mobi^
+||open.clerkie.io^
+||open.ditch.cash^
+||open.drivescore.com^
+||open.flow.com.mm^
+||open.fotition.com^
+||open.freeplayapp.com^
+||open.gaius.app^
+||open.getsigneasy.com^
+||open.homepass.com^
+||open.homey.app^
+||open.howbout.app^
+||open.kidu.com^
+||open.majelan.com^
+||open.melomm.com^
+||open.muze.chat^
+||open.novamoney.com^
+||open.speeko.co^
+||open.swapu.app^
+||open.theinnercircle.co^
+||open.ticketbro.com^
+||open.trakks.com^
+||open.uzitapp.com^
+||open.wynk.in^
+||openshop.m-shop.me^
+||oshp.io^
+||othanasis.openapp.link^
+||outdoor.theres.co^
+||oxqq.pandasuite.io^
+||p.cab.ua^
+||paramedicexam.quantresear.ch^
+||parentapp.byjus.com^
+||parents.app.playosmo.com^
+||partner-staging.miso.kr^
+||partner.bestbrokers.de^
+||partner.librarius.com.ua^
+||partner.miso.kr^
+||partnerapp.kravein.com.au^
+||partnerapp.urbanclap.com^
+||partnerdev.extasy.com^
+||pay.truemoney.me^
+||payments.acutx.org^
+||paymentslink.dropp.cc^
+||pbm-email.rightwayhealthcare.com^
+||pdf.didgigo.com^
+||pe.txbe.at^
+||pergeroni.openapp.link^
+||pf.a23.in^
+||phlebotomyexam.quantresear.ch^
+||phoenix.thexlife.co^
+||pint-dev-branch.airship.com^
+||pirateclan-alternate.kano.link^
+||pirateclan.kano.link^
+||pirounakia.openapp.link^
+||pitapan.openapp.link^
+||pitatisisminis.openapp.link^
+||pittaking.openapp.link^
+||pizzacamels.openapp.link^
+||pizzaexpress.openapp.link^
+||pizzaromea.openapp.link^
+||pl-topgal.m-shop.me^
+||play.ab05.bet^
+||play.b-t11.com^
+||play.betluk7.com^
+||play.colorplay.fun^
+||play.fanslide.com^
+||play.goldplay.me^
+||play.jdb888.club^
+||play.journey8.com^
+||play.maxgamings.com^
+||play.rheo.tv^
+||play.scavos.com^
+||play.skydreamcasino.net^
+||play.spdfun777.com^
+||play.spkr.com^
+||play.staging.underdogfantasy.com^
+||play.underdogfantasy.com^
+||play.waka8et.com^
+||play.wavelength.zone^
+||plv.geocomply.com^
+||poczta.happ.social^
+||pod.spoti.fi^
+||poll.pollinatepolls.com^
+||pool.onjoyri.de^
+||pool.onjoyride.com^
+||pop3.happ.social^
+||power.viggo.com^
+||prassas.openapp.link^
+||prasserie.openapp.link^
+||prealpha.go.levelbank.com^
+||premiumapp.byjus.com^
+||prenesi-mojm.mercator.si^
+||primary-app.hotdoc.com.au^
+||priority-app.hotdoc.com.au^
+||prismtest.epoise.com^
+||pro.bizportal.co.il^
+||pro.jig.space^
+||pro.pokerup.net^
+||production-link-ccontact.focuscura.com^
+||promo.cafexapp.com^
+||promo.gogo.org.ua^
+||promo.roadie.com^
+||promo.tops.co.th^
+||prunas.openapp.link^
+||psilikaki.openapp.link^
+||psmastersendgrid.branch.rocks^
+||psssaraki.openapp.link^
+||publish.tagstorm.com^
+||puzzle.spiriteq.com^
+||px.pandora.com^
+||pxsg.pandora.com^
+||q.skiplino.com^
+||qa-branch-app.liketoknow.it^
+||qa-brc.emails.rakuten.com^
+||qa-go.ebat.es^
+||qa-prod.branch.rocks^
+||qaapp.forever21.com^
+||qbse.intuit.com^
+||qlp.egghead.link^
+||qr.juuice.com^
+||qrcode.visit-thassos.com^
+||qualitas-app.hotdoc.com.au^
+||quest.epoise.com^
+||question.snapiio.com^
+||questtest.epoise.com^
+||quick.openapp.link^
+||r-dev.urbansitter.net^
+||r.atlasearth.com^
+||r.blidzdeal.com^
+||r.cricbet.co^
+||r.cvglobal.co^
+||r.getcopper-dev.com^
+||r.getcopper.com^
+||r.guggy.com^
+||r.intimately.us^
+||r.morons.us^
+||r.onmyway.com^
+||r.phhhoto.com^
+||r.presspadnews.com^
+||r.rover.com^
+||r.sportsie.com^
+||racemanager-app.sapsailing.com^
+||randstad.epoise.com^
+||randstadtest.epoise.com^
+||rb.groc.press^
+||read.medium.com^
+||read.meistercody.com^
+||recruiter-app.heroes.jobs^
+||redditstream.arborapps.io^
+||redirect.indacar.io^
+||redirect.kataklop.com^
+||redirectdemoqpay.2c2p.com^
+||ref.elitehrv.com^
+||ref.mybb.id^
+||refer-dev.openmed.com^
+||refer.chargerunning.com^
+||refer.dev.wagr.us^
+||refer.dragonfly.com.kh^
+||refer.gober.app^
+||refer.kheloapp.com^
+||refer.openmed.com^
+||refer.payluy.com.kh^
+||referral-ca.mixtiles.com^
+||referral.avena.io^
+||referral.mixtiles.com^
+||referral.moonglabs.com^
+||referral.rvappstudio.c.appwinit.com^
+||resetpassword.surepetcare.io^
+||s.airgoat.com^
+||s.goat.com^
+||send.preply.com^
+||sendgrid.employeelinkapp.com^
+||sendpulsenewtest.branch.rocks^
+||sendpulsetest.branch.rocks^
+||sephora-qa.branch.rocks^
+||sephora-qa.branchstaging.com^
+||sg3.notarize.com^
+||share.atlantic.money^
+||share.aynrand.org^
+||share.beaconlearningapp.com^
+||share.bitzer.app^
+||share.blindside.pro^
+||share.bookey.app^
+||share.boostorder.com^
+||share.bttl.me^
+||share.ccorl.com^
+||share.check-ins.com.my^
+||share.cjcookit.com^
+||share.coupangeats.com^
+||share.curiousjr.com^
+||share.dailyrounds.in^
+||share.drinki.com^
+||share.dunzo.in^
+||share.dusk.app^
+||share.elixirapp.co^
+||share.elsanow.io^
+||share.entertainment.com^
+||share.finory.app^
+||share.flickasa.com^
+||share.foxtrotco.com^
+||share.furaha.co.uk^
+||share.getthatlemonade.com^
+||share.gleeph.net^
+||share.glorify-app.com^
+||share.gobx.com^
+||share.goswaggle.com^
+||share.haloedapp.com^
+||share.headliner.app^
+||share.helpthyneighbour.com^
+||share.heypubstory.com^
+||share.jisp.com^
+||share.jobeo.net^
+||share.jugnoo.in^
+||share.kamipuzzle.com^
+||share.keeano.com^
+||share.ksedi.com^
+||share.liv.rent^
+||share.mansi.io^
+||share.marrow.com^
+||share.moonlightcake.com^
+||share.mooodek.com^
+||share.mzaalo.com^
+||share.nearpod.us^
+||share.oneway.cab^
+||share.oppvenuz.com^
+||share.oyorooms.com^
+||share.palletml.com^
+||share.passportpower.app^
+||share.perchwell.com^
+||share.platoonline.com^
+||share.quin.cl^
+||share.quizizz.com^
+||share.rapfame.app^
+||share.realcrushconnection.com^
+||share.ridehip.com^
+||share.robinhood.com^
+||share.savvy-navvy.com^
+||share.scoreholio.com^
+||share.sharafdg.com^
+||share.sliver.tv^
+||share.soundit.com^
+||share.sparemin.com^
+||share.squadx.online^
+||share.stayplus.com^
+||share.stiya.com^
+||share.swishpick.com^
+||share.talkit.app^
+||share.tessie.com^
+||share.theladbible.com^
+||share.theloopapp.org^
+||share.titanvest.com^
+||share.tops.co.th^
+||share.tornado.com^
+||share.tp666.vip^
+||share.tradeapp.me^
+||share.travelloapp.com^
+||share.vomevolunteer.com^
+||share.wayup.com^
+||share.wigle.me^
+||share.winit.nyc^
+||share.wolfspreads.com^
+||share.worldleaguelive.com^
+||share.yabelink.com^
+||share.yugengamers.com^
+||share2.360vuz.com^
+||shared.jodel.com^
+||sharedev.passportpower.app^
+||sharelink.oppvenuz.com^
+||sharen.oyorooms.com^
+||sharing.kptncook.com^
+||shell-recharge.tupinambaenergia.com.br^
+||sheregesh-io.traveler.today^
+||shop.myaeon2go.com^
+||shoppers-test.instacartemail.com^
+||shoppers.instacartemail.com^
+||shoppingapp.norwex.com^
+||short.afgruppen.no^
+||short.isdev.info^
+||showcase.inhaabit.com^
+||sign.use-neo.com^
+||sk-batteryimport.m-shop.me^
+||sk-sanasport.m-shop.me^
+||sk-topgal.m-shop.me^
+||skaffa.tidyapp.se^
+||skincheckwa-app.hotdoc.com.au^
+||skosgrill.openapp.link^
+||sl.trycircle.com^
+||slotabrosdev.zharev.com^
+||slotabrosuat.zharev.com^
+||sm-test.groc.press^
+||sm.groc.press^
+||sm.sylectus.com^
+||smbranch.nc.mails.sssports.com^
+||sms-vbs.branch.rocks^
+||sms.uphabit.com^
+||smtp.happ.social^
+||smtp2.happ.social^
+||smtpauth.happ.social^
+||snapshotapp.progressive.com^
+||snowman.odencat.com^
+||social.talenttitan.com^
+||social.tinyview.com^
+||socialflow.branch.rocks^
+||sp-app.fixly.pl^
+||splitexpenses.oworld.fr^
+||spread.epoolers.com^
+||ss.silkandsonder.com^
+||ssltest2.branch.io^
+||stadac.mobilapp.io^
+||stageapplink.reki.tv^
+||stagelink.lola.com^
+||stagelink.supershare.com^
+||stagelink.youareaceo.com^
+||staging-c.vcty.co^
+||staging-go.getsquire.com^
+||staging-link-ccontact.focuscura.com^
+||staging-link.docyt.com^
+||staging-links.thriveglobal.com^
+||staging-refer.rooam.co^
+||staging.findeck.link^
+||staging.link.findeck.de^
+||staging.narrateapp.com^
+||staging.refer.wagr.us^
+||starchild.odencat.com^
+||starify.appsonic.fr^
+||start.hearsaysocial.com^
+||start.luscii.com^
+||start.ramp.com^
+||stg-bnc-papago.naver.com^
+||stg-deeplink.ring.md^
+||store.echovisuals.com^
+||store.esquirrel.at^
+||stream.9now.com.au^
+||studio.joinsalut.com^
+||summary.instaread.co^
+||super8-link.mysuki.io^
+||surpreend.x.unikoom.com^
+||t.ac.pandora.com^
+||t.bztest.origin.com.au^
+||t.comms.thetimes.co.uk^
+||t.discover.kayosports.com.au^
+||t.ecomms.origin.com.au^
+||t.haha.me^
+||t.icomms.origin.com.au^
+||t.newsletter.thetimes.co.uk^
+||t.prod1.discover.binge.com.au^
+||t.service.thetimes.co.uk^
+||t.staging-mail.tabcorp.com.au^
+||t1.benefits.tops.co.th^
+||t1.discover.flashnews.com.au^
+||t1.stadiumgoods.com^
+||t2.click.subway.com^
+||td.emails.domain.com.au^
+||test-eml.postmates.com^
+||test-fleet-eml.postmates.com^
+||test.customers.instacartemail.com^
+||test.emails.discovery.com^
+||test.links.emails.br.discoveryplus.com^
+||test.links.emails.ca.discoveryplus.com^
+||test.links.emails.discoveryplus.com^
+||test.links.emails.emea.discoveryplus.com^
+||test.links.emails.ph.discoveryplus.com^
+||testing.news.forhers.com^
+||testing.news.forhims.com^
+||testing.news.hims.com^
+||testlink.urban.com.au^
+||trac.roomster.com^
+||track-mail.homage.co^
+||track-test.workframe.com^
+||track.cafu.com^
+||track.gleeph.net^
+||track.newsplug.com^
+||track.roomster.com^
+||track.spothero.com^
+||track.workframe.com^
+||tracking.email-mandrill.pushd.com^
+||tracking.laredoute.fr^
+||tracking.sp.sofi.com^
+||tracking.staging.goshare.co^
+||tracks.roomster.com^
+||travel.x.unikoom.com^
+||trk-branch.balinea.com^
+||trk.bc.shutterfly.com^
+||trk.e.underarmour.com^
+||trk.flipfit.com^
+||trk.geico.com^
+||trk.luisaviaroma.com^
+||trk.s.sephora.com^
+||trk.send.safestyle.com.au^
+||trk.shoppremiumoutlets.com^
+||trk.squeezemassage.com^
+||trk.underarmour.com^
+||trk.us.underarmour.com^
+||trklink.luisaviaroma.com^
+||try.jaranda.kr^
+||try.joonapp.io^
+||try.popchart.family^
+||try.postmuseapp.com^
+||tsp.onjoyri.de^
+||tst-link-ccontact.focuscura.com^
+||tune.sckmediatv.com^
+||tw.spiriteq.com^
+||txt.appcity.com.au^
+||txt.fuelmyclub.com^
+||txt.hooplaguru.com^
+||txt.htltn.com^
+||txt.shopbanquet.com^
+||txt.showings.com^
+||txt.styr.com^
+||u-test.getgoose.com^
+||u.getgoose.com^
+||u.salony.com^
+||uat-client.intact.ca^
+||uat-client.nbc-insurance.ca^
+||uat-link.covve.com^
+||uat-scanner-link.covve.com^
+||uatrewards-my.greateasternlife.com^
+||uatrewards-sg.greateasternlife.com^
+||uatshare.entertainment.com^
+||ujvh.pandasuite.io^
+||uni.okane-reco-plus.com^
+||universal.okane-reco-plus.com^
+||universal.shakaguide.com^
+||universaldev.taylormadegolf.com^
+||unsubscribe.openapp.link^
+||uptvmovies.uptv.com^
+||ur.b.inhaabit.com^
+||url.density.exchange^
+||url.ultimax.cf^
+||url1020.keycollectorcomics.com^
+||url1445.affirm.com^
+||url1451.careerkarma.info^
+||url1741.linktr.ee^
+||url1981.jhutnick.tantawy.app^
+||url2031.lemonaidhealth.com^
+||url2556.matthewherman.tantawy.app^
+||url259.artcollection.io^
+||url2987.affirm.com^
+||url3009.onbunches.com^
+||url3630.newsletter.experience-muse.com^
+||url3788.blazepizza.com^
+||url4142.dev.att.llabs.io^
+||url485.yourname.tantawy.app^
+||url5290.dev-portal.icanbwell.com^
+||url6013.qa-app11-sendgrid.branch.rocks^
+||url6035.clay-sendgrid-test.branch.rocks^
+||url6143.branch.rocks^
+||url6146.bastien.tantawy.app^
+||url6633.ana.tantawy.app^
+||url6933.email.marcon.au^
+||url7061.support.1dental.com^
+||url7542.fluz.app^
+||url7674.fitgenieapp.com^
+||url8196.mindrise.app^
+||url8258.jshek.branch.rocks^
+||url9609.account.experience-muse.com^
+||use.fvr.to^
+||use.lunos.app^
+||users.rentbabe.com^
+||v-t.topya.com^
+||v.angha.me^
+||v.cameo.com^
+||v.minu.be^
+||v.myvoleo.com^
+||v.topya.com^
+||vcs.kensington.my^
+||ve.velocityclinical.com^
+||verify.spin.app^
+||verify.test.spin.app^
+||verizon-branch.locationlabs.com^
+||video.bzfd.it^
+||video.vitcord.com^
+||viewer.pandasuite.io^
+||vikingclan.kano.link^
+||vip.agentteam.com.au^
+||visit.campermate.com^
+||visit.sendheirloom.com^
+||voeux2020.wearemip.com^
+||vote.speaqapp.com^
+||votedotorg.outvote.io^
+||votejoe.outvote.io^
+||vr.mttr.pt^
+||vr.vivareal.com^
+||vrasto.openapp.link^
+||vrcamdl.istaging.com^
+||vrcamdltest.istaging.com^
+||vtneexam.quantresear.ch^
+||wallet.chain.com^
+||watch.jawwy.tv^
+||watch.stctv.com^
+||watch.vipa.me^
+||wave.getonthewave.com^
+||we.kurly.com^
+||web.givingli.com^
+||webmail.happ.social^
+||webtoons.naver.com^
+||whatcounts.branch.rocks^
+||wl.bl.frequentvalues.com.au^
+||won.wooribank.com^
+||wop-bio.ubiwhere.com^
+||worker-app-dev.buildforce.com^
+||worker-app-staging.buildforce.com^
+||worker-app.buildforce.com^
+||wpunkt.newsweek.pl^
+||wsfc-t.topya.com^
+||wsfc.topya.com^
+||www.branch.rocks^
+||www.getone.today^
+||www.goldenways.fun^
+||www.vetxanh.edu.vn^
+||www1.happ.social^
+||x.gldn.io^
+||x.xtar.io^
+||x88s.pandasuite.io^
+||y-t.topya.com^
+||y.topya.com^
+||y3mmew2.goldenways.fun^
+||yiyemail.branch.rocks^
+||yo.inbots.online^
+||you.pixellot.link^
+||you.stage.pixellot.link^
+||youate.co^
+||your.tmro.me^
+||yummylink.funcapital.com^
+||z.inlist.com^
+||zelle.odencat.com^
+||zombieslayer-alternate.kano.link^
+||zombieslayer.kano.link^
+||zzcqwhn.goldenways.fun^
+!-----------------International individual tracking systems-----------------!
+! *** easylist:easyprivacy/easyprivacy_specific_international.txt ***
+||20min.ch/ana/
+||aachener-zeitung.de/zva/drive.js
+||aerzteblatt.de/inc/js/ga4.js
+||agnes.waz.de^
+||analytics.adliners.de^
+||analytics.daasrv.net^
+||analytics.deutscher-apotheker-verlag.de^
+||analytics.moviepilot.de^
+||arlt.com/analytics/
+||arte.tv/log-player/
+||as.mirapodo.de^
+||as.mytoys.de^
+||as.yomonda.de^
+||autoscout24.de^$ping
+||basicthinking.de/stats/
+||behave.sn.at^
+||berliner-stadtplan.com/t.gif
+||bilder11.markt.de^
+||braunschweiger-zeitung.de/stats/
+||buzzfeed.at/bi/bootstrap/
+||buzzfeed.de/bi/bootstrap/
+||bz-berlin.de/_stats/
+||chartsurfer.de/js/mtm.js
+||chartsurfer.de/uscoll.php?
+||chefkoch.de/tracking/
+||click.alternate.de^
+||cmp2.channelpartner.de^
+||cnt.wetteronline.de^
+||comparis.ch/comparis/Tracking/
+||computerbase.de/api2/$ping,xmlhttprequest
+||computerbase.de/nlytev
+||cp.finanzfrage.net/stats
+||cpx.golem.de^
+||cpxl.golem.de^
+||d.rp-online.de^
+||dasoertliche.de/js/liwAnalytics.js
+||data.sportdeutschland.tv^
+||dd.betano.com^
+||dein-plan.de/t.gif
+||dejure.org/cgi-bin/sitzung.fcgi?
+||derwesten.de/stats/
+||dforum.net/counter/
+||dv.chemie.de^
+||ens.luzernerzeitung.ch^
+||ens.nzz.ch^
+||ens.tagblatt.ch^
+||epimetheus.navigator.web.de^
+||epochtimes.de/mp/track/
+||event-collector.prd.data.s.joyn.de^
+||events.limango.com^
+||fc.vodafone.de^
+||fotocommunity.de/track/
+||froglytics.eventfrog.ch^
+||gegenstimme.tv/tracker/
+||geoip.finanzen.net^
+||glomex.com^$ping
+||gmx.net/monitoring/
+||golem.de/staticrl/scripts/golem_cpxl_
+||hamburger-stadtplan.com/t.gif
+||hannover-stadtplan.com/t.gif
+||happysex.ch/app_jquery/Tracking.js
+||hartgeld.com/cgi-sys/Count.cgi?
+||heise.de/ivw-bin/ivw/cp/
+||herz-fuer-tiere.de^*/ad.gif?
+||herz-fuer-tiere.de^*/sunshine.gif?
+||hokuspokus.tarnkappe.info^
+||homegate.ch/g/collect?
+||horizont.net/stats/
+||inside-channels.ch/proxy/engine/api/v1/auth/ping/
+||inside-it.ch/proxy/engine/api/v1/auth/ping/
+||jobs.ch/api/v1/public/product/track/
+||js.tag24.de/main.js
+||leipziger-stadtplan.com/t.gif
+||llntrack.messe-duesseldorf.de^
+||lokalwerben.t-online.de^
+||metrics.n-tv.de^
+||mlm-tracking-service.meinestadt.de^
+||moviepilot.de/assets/autotrack-
+||mtb-news.de/metric/
+||muenchener-stadtplan.com/t.gif
+||mydirtyhobby.de/tracker
+||navigation-timing.meinestadt.de^
+||nct.ui-portal.de^
+||netzwelt.de/log?
+||news.de/track.php
+||newsdeutschland.com/RPC.php
+||nickles.de/ivw/
+||nius.de/monitoring
+||ostjob.ch/public/statistic/teaser/hit/
+||otto.de/error-logging/
+||otto.de/pass/scale-beacon-service/
+||otto.de^$ping
+||oxifwsabgd.nzz.ch^
+||pi.technik3d.com^
+||pixel.ionos.de^
+||plausible.motorpresse.de^
+||potsdamer-stadtplan.com/t.gif
+||pstt.mtb-news.de^
+||px.derstandard.at^
+||pxc.otto.de^
+||redaktionstest.net/cdn/$ping
+||rem-track.bild.de^
+||responder.wt.heise.de^
+||ricardo.ch/api/browser-statistics/
+||rt.bunte.de^
+||schnaeppchenfuchs.com/js/default-
+||shoop.de/mgtrx/
+||sportnews.bz/pcookie?
+||spreewaldkarte.de/t.gif
+||sqs.quoka.de^
+||squirrel.cividi.ch^
+||srf.ch/udp/tracking/
+||ss.photospecialist.at^
+||ss.photospecialist.de^
+||statistic2.reichelt.de^
+||statistics.riskommunal.net^
+||statistik.mitmischen.de^
+||stats.autoscout24.ch^
+||stats.rocketbeans.tv^
+||stats.sumikai.com^
+||steuertipps.de/scripts/tracking/
+||stol.it/pcookie?
+||stuttgarter-nachrichten.de/cre-1.0/tracking/device.js
+||subpixel.4players.de^
+||suche.web.de/click
+||swisscom.ch/eumcollector/beacons/
+||swmhdata.stuttgarter-nachrichten.de^
+||swmhdata.stuttgarter-zeitung.de^
+||t-online.de/to/web/click?
+||t-online.de/toi/html/de/img/transp.bmp?
+||t.wayfair.de^
+||tagm.eduscho.at^
+||tarnkappe.info^$ping
+||teltarif.de/scripts/fb.js
+||teltarif.de/scripts/ttt.js
+||teltarif.de/ttt.go?
+||tgw.gmx.ch^
+||tgw.gmx.net^
+||tgw.web.de^
+||timing.uhrforum.de^
+||tm.swp.de^
+||tracer.autoscout24.ch^
+||track.dws.de^
+||track.express.de^
+||track.noz.de^
+||track.rheinpfalz.de^
+||track.rundschau-online.de^
+||tracking.asialadies.de^
+||tracking.avladies.de^
+||tracking.badeladies.de^
+||tracking.behaarteladies.de^
+||tracking.bizarrladies.de^
+||tracking.busenladies.de^
+||tracking.deutscheladies.de^
+||tracking.devoteladies.de^
+||tracking.dominanteladies.de^
+||tracking.erfahreneladies.de^
+||tracking.escorts24.de^
+||tracking.exklusivladies.de^
+||tracking.finanzen.net^
+||tracking.fkk24.de^
+||tracking.fupa.net^
+||tracking.grosseladies.de^
+||tracking.hobbyladies.de^
+||tracking.immobilienscout24.de^
+||tracking.jungeladies.de^
+||tracking.krone.at^
+||tracking.kussladies.de^
+||tracking.ladies.de^
+||tracking.latinaladies.de^
+||tracking.live.wetter.at^
+||tracking.massierendeladies.de^
+||tracking.mollyladies.de^
+||tracking.noen.at^
+||tracking.nsladies.de^
+||tracking.nymphomaneladies.de^
+||tracking.oe24.at^
+||tracking.orientladies.de^
+||tracking.osteuropaladies.de^
+||tracking.piercingladies.de^
+||tracking.rasierteladies.de^
+||tracking.schokoladies.de^
+||tracking.tattooladies.de^
+||tracking.tsladies.de^
+||tracking.zaertlicheladies.de^
+||tracking.zierlicheladies.de^
+||tracksrv.zdf.de^
+||ui-portal.de/pos-cdn/tracklib/
+||vfd2dyn.vodafone.de^
+||vinted.de/relay/events
+||wa.gmx.ch^
+||wa.gmx.net^
+||wa.web.de^
+||walbusch.de^$ping
+||werkenntdenbesten.de/js/tracking.
+||werkenntdenbesten.de/pd.js
+||wikipedia.de/tracking.js
+||witt-weiden.de^$ping
+||wlw.de/unified_search_backend/api/v1/tracking/
+||ymprove.gmx.net^
+||ymprove.web.de^
+||zooplus.de/om/pxl/
+! Danish
+||ia.ekstrabladet.dk^
+||jv.dk/assets/statistics/
+! French
+||2ememain.be/c3650cdf-
+||2ememain.be/px/
+||actu.fr/assets/js/smarttag5280-1.js
+||aliasdmc.fr/js/general_sts.js
+||allocine.fr/_/geolocalize
+||analytics.allovoisins.com^
+||analytics.clubic.com^
+||api.odysee.com/locale/get
+||api.tacotax.fr/v2/amplitude_trackers
+||batiactu.com/cap_
+||bmly.impots.gouv.fr^
+||boingtv.fr/track_view
+||cdtm.cdiscount.com^
+||cesu.urssaf.fr/clm10
+||clubic.com/tview
+||compteur.developpez.com^
+||courrierinternational.com/*&vtag=
+||dd.leboncoin.fr^
+||developpez.com/public/js/log.js
+||donnons.org/log.js
+||e.legalstart.fr^
+||e.m6web.fr/events
+||easeus.com/default/js/aff_buy_tracking.js
+||ecranlarge.com/stat
+||email.nautiljon.com/oo/$image
+||eum2.caisse-epargne.fr^
+||events-logs.doctolib.com^
+||flow.kiloutou.fr^
+||fourchette-et-bikini.fr/core/modules/statistics/
+||fsm.lapresse.ca^
+||gamergen.com/ajax/actualites/addVue
+||hits.porn.fr^
+||hlms.ecologie.gouv.fr^
+||ianimes.org/img/tracker.gif
+||igen.fr/modules/statistics/statistics.php
+||insights.decathlon.net^
+||jeu.net/hits.js
+||jscrambler.com^$script,domain=airfrance.fr
+||kwgs.letudiant.fr^
+||lacentrale.fr/collect
+||lacentrale.fr/static/fragment-sentry/lc-sentry.js
+||laposte.fr/cdp/events?
+||ldlc.com/V4px/js/ldlcmachine.js
+||leboncoin.fr/rav-monitoring/
+||lecho.be/fb2?
+||lecho.be/tag/tag-
+||ledevoir.com/js/pianoAnalyticsTags.js
+||lemonde.fr/*&cts=
+||lemonde.fr/*&stc=
+||lemonde.fr/bucket/*/tagistan.
+||leparking-moto.fr/jsV155/Tracker.js
+||leparking.fr/*/Tracker.js
+||lepoint.fr/img-l/$image
+||liberation.fr/newsite/js/cmp/
+||logstash-3.radio-canada.ca^
+||ma-petite-recette.fr/visites
+||marmiton.org/reloaded/errpix.php
+||medoucine.com/tracking/
+||neko-san.fr/stats
+||p.pagesjaunes.fr^
+||paruvendu.fr/*/stats/
+||pixel.dugwood.com^
+||pixel.ionos.fr^
+||promoneuve.fr/stat/
+||pt.legalstart.fr^
+||quellavelinge.com/referer.php?
+||res.paruvendu.fr^
+||rts.ch^*/boreas_b01.js
+||s5.charliehebdo.fr^
+||serv.letudiant.fr^
+||shemsfm.net/ar/setStats/
+||shemsfm.net/fr/setStats/
+||shopping.rakuten.com/rakuten-static-deliver/mob/*/js/track.js
+||sncf-connect.com/apm
+||sncf-connect.com/bff/api/v1/t/events
+||space-blogs.net/include/counter/
+||sta.zone-telechargement.
+||stat.ouedkniss.com^
+||stats*.credit-cooperatif.coop^
+||stats.sexemodel.com^
+||stats.zone-annuaire.
+||stats.zone-telechargement.
+||stt.wawacity.onl^
+||surace-jujitsu.fr/outils/compteur_php/
+||t.7sur7.be^$image
+||t.blablacar.com^
+||tc2.hometogo.net^
+||telerama.fr/*&ptag=
+||tracker.mspy.com^
+||tracking.cdiscount.com^
+||unblog.fr/cu.js
+||vinted.fr/relay/events
+||wawacity.*/bypass
+||woopic.com/z.gif
+||wrhv.education.gouv.fr^
+||wstats.gameblog.fr^
+||wt.oscaro.com^
+||yandex.fr/clck/click
+||zone-telechargement.al/analytics/
+! Belarusian
+||c1hit.zerkalo.io^
+||s1r.zerkalo.io^
+||s3r.zerkalo.io^
+||zerkalo.io/stat/
+! Arabic
+||mosoah.com/analytics.js
+||tags.aljazeera.net^
+! Bosnian
+||insight.olx.ba^
+||klix.ba/pixel/
+! Chinese
+||104.com.tw/log/
+||17173.com/ping.js
+||17173.com/pv?
+||4399.com/js/4399stat.js
+||4399.com/plugins/tj/event?
+||4399stat.5054399.com^
+||55bbs.com/east.html
+||591.com.tw/stats/
+||9game.cn/stat/
+||a.itsmore.cn^
+||accwww9.53kf.com^
+||adstats.tencentmusic.com^
+||al.autohome.com.cn^
+||alicdn.com/f/pcdn/i.php?
+||ams.lelong.com.my^
+||analytics-gw.games.wanmei.com^
+||analytics.126.net^
+||analytics.163.com^
+||analytics.cnblogs.com^
+||analytics.oceanengine.com^
+||analytics.shop.hisense.com^
+||api.ea3w.com/hits.js
+||apilog-web.acfun.cn^
+||apiwmda.58.com.cn^
+||applog.yiche.com^
+||audit.qiuwen.net.cn^
+||autohome.com.cn/impress?
+||baidu.com/api/bidder/
+||baidu.com/kan/api/ipLocation
+||baidu.com^*/ps_default.gif?
+||banana.le.com^
+||bc.qunar.com^
+||beacon.qq.com^
+||cherry.le.com^
+||clewm.net/public/cli_analytics.js$domain=cli.im
+||click.gamersky.com^
+||clickcount.cnool.net^
+||count.candou.com^
+||count5.pconline.com.cn^
+||counter.people.cn^
+||cstm.baidu.com^
+||ctrmi.cn/t/
+||data.bilibili.com^
+||dcard.tw/v1/events
+||dig.lianjia.com^
+||dlswbr.baidu.com^
+||dolphin.deliver.ifeng.com^
+||douyucdn.cn/fish3/1.gif
+||eastmoney.com/usercollect/
+||eastmoney.com/web/prd/jump_tracker.js
+||eclick.360doc.com^
+||ems.youku.com^
+||err.ifengcloud.ifeng.com^
+||event.csdn.net^
+||fclog.baidu.com^
+||flog.pressplay.cc^
+||forum.zuvio.com.tw/api/article/finish
+||frog.yuanfudao.com^
+||ftwo-feedback.autohome.com.cn^
+||ftwo-receiver.autohome.com.cn^
+||gentian-frd.hjapi.com^
+||gia.jd.com^
+||gk.sina.cn^
+||h5log.zongheng.com^
+||hisense.com/ta.js
+||hktvmall.com/api/event
+||huaxiang.eastmoney.com^
+||hujiang.com/v2/log
+||i-cable.com/ci/tracking/
+||i-tm.com.tw/api/itm-tracker.js$domain=pixnet.net
+||idm.api.autohome.com.cn^
+||ifeng.com/i?p=
+||imgstat.baidu.com^
+||improving.wuzhuiso.com^
+||iqiyi.com/dsp_track3
+||iqiyi.com/track2?
+||jcm.jd.com^$script,third-party
+||jcmonitor.xcar.com.cn^
+||jiayuan.com^*/pv.js
+||js.ea3w.com/pv.js
+||kn007.net/snmp.php
+||le.com/op/
+||log.aliyuncs.com^
+||log.bitauto.com^
+||log.flight.qunar.com^
+||log.m.sm.cn^
+||log.mix.sina.com.cn^
+||log.sina.cn^
+||log.zongheng.com^
+||log2.sina.cn^
+||logs.51cto.com^
+||logtake.weidian.com^
+||m.diyibanzhu.buzz/17mb/script/tj.js
+||m.diyibanzhu.buzz/17mb/script/wap.js
+||mail.qq.com/cgi-bin/getinvestigate?
+||map.baidu.com/newmap_test/static/common/images/transparent.gif
+||metric.huya.com^
+||mi.com/stat/
+||monitor.music.qq.com^
+||mp.weixin.qq.com/mp/appmsgreport?
+||mp.weixin.qq.com/mp/getappmsgad?
+||mp.weixin.qq.com/mp/jsmonitor?
+||mp.weixin.qq.com/mp/report?
+||mp.weixin.qq.com/mp/webcommreport?
+||msg.qy.net^
+||msgsndr.com/funnel/event
+||mtrace.qq.com^
+||music.163.com/weapi/feedback/weblog
+||music.163.com/weapi/pl/count
+||netstat.yunnan.cn^
+||nex.163.com^
+||p.data.cctv.com^
+||pan.baidu.com/api/report/
+||pan.baidu.com/pcloud/counter/refreshcount?
+||pan.baidu.com/recent/report?
+||pb.i.sogou.com^
+||people.cn/js/pa.js
+||phpstat.cntcm.com.cn^
+||pingjs.qq.com^
+||pinkoi.com/_log/
+||pixel.kknews.cc^
+||poro.58.com^
+||pptv.com/stg/add?
+||pptv.com/webdelivery/
+||pressplay.cc/marketing/event
+||pv.ltn.com.tw^
+||pv.xcar.com.cn^
+||pvx.xcar.com.cn^
+||qhimg.com/11.0.1.js$script
+||qihucdn.com/11.0.1.js$script
+||qiyukf.com/webda/da.gif$domain=youdao.com
+||qq.com/code.cgi?
+||qq.com/collect/
+||qq.com/kvcollect?
+||qq.com/p?
+||qq.com/qqcom/
+||qq.com/report.cgi?
+||qq.com/report/$image,xmlhttprequest
+||qq.com/report|
+||qq.com/stdlog
+||qreport.qunar.com^
+||qzone.qq.com/iframe/report
+||qzone.qq.com/wspeed.qq.com^
+||qzonestyle.gtimg.cn/qzone/v8/ic/iframeReport.js
+||rcgi.video.qq.com^
+||referer.pixplug.in^
+||reportsk.web.sdo.com^
+||retcode.taobao.com^
+||rlogs.youdao.com^
+||ro.aiwan4399.com^
+||s.360.cn^
+||s.pixfs.net/js/pixlogger.min.js
+||s.pixfs.net/visitor.pixplug.in/
+||sbeacon.sina.com.cn^
+||sfp.safe.baidu.com^
+||shopee.tw/__t__
+||shopee.tw/v2/shpsec/web/report
+||shrek.6.cn^
+||sina.com.cn/view?
+||sinajs.cn/open/api/js/wb.js
+||sngmta.qq.com^
+||sofire.bdstatic.com^
+||sogou.com/cl.gif?
+||sogoucdn.com/hhytrace/
+||sohu.com/adgtr/
+||sohu.com/count/
+||sohu.com/ip/$script
+||sohu.com/pccollector
+||sohu.com/pv.js
+||soufun.com/click/
+||soufun.com/stats/
+||ssp.hinet.net^
+||stadig.ifeng.com^
+||stat-58home.58che.com^
+||stat.*.v-56.com^
+||stat.caijing.com.cn^
+||stat.funshion.net^
+||stat.iteye.com^
+||stat.stheadline.com^
+||stat.uuu9.com^
+||stat.y.qq.com^
+||stat.zol.com.cn^
+||static.funshion.com/*/common/log/
+||static.qiyi.com/js/pingback/
+||statistic.qzone.qq.com^
+||steamchina.com/events/
+||sugar.zhihu.com^
+||tbskip.taobao.com^$script
+||tf.360.cn^
+||theav.xyz/anyalytics
+||theporn.cc/anyalytics?
+||tianxun.com/ajax_website_statistics.
+||titan24.com/scripts/stats.js
+||tj.img4399.com^
+||tongji.mafengwo.cn^
+||tongji.xinmin.cn^
+||tongji2.vip.duba.net/__infoc.gif?
+||top.baidu.com/js/nsclick.js
+||toutiao.com/action_log/
+||toutiao.com^*/user_log/
+||tr.discuss.com.hk^
+||tr.price.com.hk^
+||trace.qq.com^
+||track.hujiang.com^
+||track.sohu.com^
+||track.tom.com^
+||trackcommon.hujiang.com^
+||tracker.ai.xiaomi.com^
+||trackjay.cool3c.com^
+||trail.53kf.com^
+||uestat.video.qiyi.com^
+||utrack.hexun.com^
+||uuu9.com/s.php?
+||v.blog.sohu.com/dostat.do?
+||vatrack.hinet.net^
+||vipstatic.com/mars/
+||visit.xchina.pics^
+||visitorapi.pixplug.in^$domain=pixnet.net
+||wanmei.com/public/js/stat.js
+||weather.com.cn/a1.js
+||webstat.kuwo.cn^
+||weibo.cn/h5logs/
+||weibo.com/aj/log/
+||weiyun.com/cgi-bin/tianshu_report
+||weiyun.com/proxy/domain/boss.qzone.qq.com/fcg-bin/fcg_rep_strategy?
+||wenku.baidu.com/tongji/
+||wkctj.baidu.com^
+||wl.jd.com^$third-party
+||work.3dmgame.com/js/statistics.js
+||wumii.com/images/pixel.png
+||xcar.com.cn/exp/
+||xiaohongshu.com/api/collect
+||xiaohongshu.com/api/v2/collect
+||xiaomi.com/js/mstr.js?
+||ylog.huya.com^
+||youku.com/log/
+||yxdown.com/count.js
+||zcool.com.cn/track/
+||zhihu-web-analytics.zhihu.com^
+||zhihu.com/collector/
+||zhihu.com/zbst/events/
+||zio.xcar.com.cn^
+||zol-img.com.cn^*/logger.js
+||zongheng.com^*/logger.min.js
+||zz.bdstatic.com^
+! Croatian
+||avaz.ba/update/hits/
+||jutarnji.hr/template/js/eph_analytics.js
+! Czech
+||cc.dalten.cz^
+||jslog.post.cz^
+||o2.cz^*-ga_o2cz_bundle.js?
+||report.novinky.cz^
+||stat.super.cz^
+||statistics.csob.cz^
+! Dutch
+||2dehands.be/px/
+||aa.hwigroup.com^$domain=hardware.info
+||analytics.rambla.be^
+||api.rtl.nl/monitoring/
+||bc34.wijnvoordeel.nl^
+||bol.com/tracking/
+||businessinsider.nl^*/tr.php
+||c.vrt.be^
+||coolblue.nl/monitoring/
+||ds2.independer.nl^
+||events.reclamefolder.nl^
+||expert.nl/daix.js
+||fd.nl/pixel/
+||folderz.nl/clickstream/
+||infonu.nl/t.php?
+||kieskeurig.nl/collect
+||kieskeurig.nl/track-
+||klik.nrc.nl/ping?
+||log.rabobank.nl^
+||logs.ggweb.nl^
+||marktplaats.nl/add_counter_image.
+||marktplaats.nl/metrics/
+||marktplaats.nl/px/
+||metrics.nu.nl^
+||njam.tv/tracking/
+||npo-data.nl/tag/v3/npotag.js
+||npo-data.nl/tags/tag.min.js
+||npo.nl/tag/atinternet/
+||pcmweb.nl/track/
+||pg.totaaltv.nl/api/metrics
+||pipeline.rd.nl^$~script
+||r.kleertjes.com^
+||rtl.nl/system/track/
+||sanoma.nl/pixel/
+||sat.sanoma.fi^
+||stats.fd.nl^
+||t.ad.nl^$image
+||t.bd.nl^$image
+||t.bndestem.nl^$image
+||t.destentor.nl^$image
+||t.ed.nl^$image
+||t.gelderlander.nl^$image
+||t.hln.be^$image
+||t.pzc.nl^$image
+||t.tubantia.nl^$image
+||t.vrt.be^
+||tdep.kvk.nl^
+||tijd.be/fb/?
+||tijd.be/fb2?
+||tijd.be/track/
+||topspin.npo.nl^
+||track.pexi.nl^
+||tracking.voordeeluitjes.nl^
+||tvgids.nl/collect
+||tweakers.nl/track/
+||txrx.bol.com^
+||u299.libelle-lekker.be^
+||vinted.nl/relay/events
+||vroom.be^*/stats.js?
+||vroom.be^*/stats.php?
+! Finnish
+||analytics.sanoma.fi^
+||api.nettix.fi/counter/$image
+||data.reactandshare.com^
+||dax.yle.fi^
+||dp.alma.iltalehti.fi/v1/cookie
+||events.il.fi^
+||hs.fi/stats
+||huuto.net/js/analytic/
+||ilcdn.fi^*/Bootstrap.js
+||io-tech.fi/io/www/delvr/lokiz.php
+||is.fi/stats/
+||mha.fi/simple.gif?
+||mtv3.fi/remarketing.js
+||nelonenmedia.fi/hitcounter$image
+||omataloyhtio.fi/ffsw-pushcrew.js
+||omataloyhtio.fi/kuvat/pi.gif$image
+||omataloyhtio.fi/statb.asp
+||puutarha.net/ffsw-pushcrew.js
+||puutarha.net/statb.asp
+||rac.ruutu.fi^
+||rakentaja.fi/kuvat/pi.gif$image
+||rantapallo.fi/s/redirect/tracking?
+||stat.mtv3.fi^
+||stats.fonecta.fi^
+||tori.fi/img/none.gif$image
+||ts.fi/Statistics/Log$image
+||ts.fi^*/spring.js
+! Greek
+||skroutz.gr/analytics/
+||skroutza.skroutz.gr/skroutza.min.js
+||vidads.gr/imp/
+! Hebrew
+||bravo.israelweather.co.il^
+||cellstats.mako.co.il^
+||ds.haaretz.co.il^
+||inn.co.il/Controls/HPJS.ashx?act=log
+||stats.mako.co.il^
+||walla.co.il/CountsHP.asp?
+||walla.co.il/impression/
+! Hungarian
+||adat.borsonline.hu^
+||adat.ingatlanbazar.hu^
+||adat.koponyeg.hu^
+||adat.life.hu^
+||adat.mandiner.hu^
+||adat.mindmegette.hu^
+||adat.origo.hu^
+||adat.travelo.hu^
+||adat.veol.hu^
+||adat.videa.hu^
+||beam.telex.hu^
+||events.ingatlan.com^
+||hirtv.hu/ajaxx/_stat/
+||hirtv.hu/nx_general_stat.jpg?
+||otthonterkep.hu/c.js
+||outal.origo.hu^
+||rtl.hu/_stat/
+||videa.hu/flvplayer_setcookie.php?
+! Indonesian
+||analytic20.detik.com^
+||bukalapak.com/banner-redirector/impression
+||ktracker.kumparan.com^
+||t.bukalapak.com^
+! Italian
+/~shared/do/~/count/?$image
+||alfemminile.com/logpix.php
+||altervista.org/js/contatore.js
+||altervista.org/js_tags/contatore.js
+||altervista.org/stats/
+||altervista.org^*/tb_hits_
+||analytics.laregione.ch^
+||analytics.ticinolibero.ch^
+||analytics.tio.ch^
+||analytics.traderlink.com^
+||as.payback.it^
+||automobile.it/fb/
+||avvenire.it/content/js/track.es5.min.js?
+||bachecaannunci.it/statins3.php?
+||bnamic.com/referrer/
+||c-date.it/tracking?
+||c-date.it^*/tracking2/tr.js
+||c.corriere.it^
+||catalove.com/bimp/
+||catalove.com/ntv/
+||click.tv.repubblica.it^
+||clickserver.libero.it^
+||compare.easyviaggio.com^
+||data.segugio.it^
+||deagostinipassion.it/collezioni/analytics.js
+||execution-ci360.rai.it^
+||fanpage.it/svs.gif?
+||fanpage.it/views/
+||freeonline.org/sito_track?
+||gazzetta.it^*/stats.php?
+||insights.cdt.ch^
+||joka.it/inquiero/isapi/csf.dll?
+||la7.it/js-live/nielsen1.js
+||lalaziosiamonoi.it/pixel
+||laregione.ch/ext/av.php?
+||leggo.it/index.php?$image
+||libero.it//js/comscore/
+||libero.it/cgi-bin/ajaxtrace?
+||libero.it/cgi-bin/cdcounter.cgi?
+||libero.it/cgi-bin/cdcountersp.cgi?
+||libero.it/search/abin/ajaxtrace?
+||libero.it^*/counter.php?
+||lupoporno.com/js/analytics
+||ma.register.it^
+||mediaset.it/cgi-bin/getcod.cgi?
+||mtv.it/flux/trackingcodes/
+||paginebianche.it/cgi-bin/jbimpres.cgi?
+||paginebianche.it/ip?dv=
+||paginegialle.it/cgi-bin/getcod.cgi?
+||paginegialle.it/cgi-bin/jimpres.cgi?
+||paginegialle.it/engagement.js
+||ppcdn.it/iol/tracklib.3.js
+||raiplay.it/hit-service/
+||raiplay.it/tracking/
+||raiplaysound.it/hit-service/
+||repstatic.it^*/nielsen_static_mapping_repubblica_
+||sa.sky.it^
+||seat.it/cgi-bin/getcod.cgi?
+||servizi.unionesarda.it/controlli/
+||smsaffari.it/count_new.php?
+||spaziogames.it/ajax/player_impression.ashx?
+||stats.splinder.com^
+||stats.stylight.it^
+||stats.suedtirolerjobs.it^
+||tantifilm.top^*/ping
+||timinternet.it/timmobilestatic/img/*.gif?
+||timinternet.it/timmobilestatic/jsPrivacy/gdl_function_cookie.js
+||tio.ch/ext/u.php?
+||tio.ch/lib/videojs/video-js-tiostats.js
+||tiscali.it/banner-tiscali/stats.html?
+||tla.traderlink.com^
+||topolino.it^*/omniture.php?
+||track.tesiteca.it^
+||tracker.stileo.it^
+||tracking.donnemagazine.it^$script
+||tracking.foodblog.it^$script
+||tracking.gruppo.mps.it^
+||tracking.mammemagazine.it^$script
+||tracking.motorimagazine.it^$script
+||tracking.notizie.it^$script
+||tracking.offerteshopping.it^$script
+||tracking.style24.it^$script
+||tracking.tuobenessere.it^$script
+||tracking.viaggiamo.it^$script
+||tuttocagliari.net/pixel
+||tuttogratis.it/gopix.php?
+||tuttomercatoweb.com/pixel
+||video.mediaset.it/polymediashowanalytics/
+||videogame.it/a/logview/
+||vinted.it/relay/events
+||virgilio.it/clientinfo.gif?
+||virgilio.it/js/web-vitals-evnt/tracking.js
+||volkswagen-italia.it^*/tracking/
+||vvvvid.it^$ping
+||yachtingnetwork.it/stat/
+! Japanese
+||abema-tv.com/v1/stats/
+||amazonaws.com/ai-img/aia.js
+||ameba.jp/cookie/
+||ameblo.jp/accesslog/
+||analytics.cocolog-nifty.com^
+||analytics.ikyu.com^
+||analytics.tver.jp^
+||analyzer.fc2.com^
+||analyzer2.fc2.com^
+||anyelse.com/stat^
+||astat.nikkei.com^
+||astral.nicovideo.jp^
+||barks.jp/v1/stats
+||bc.nhk.jp^
+||beacon.watch.impress.co.jp^
+||beat.yourtv.jp^
+||blozoo.info/js/ranktool/
+||bookoffonline.co.jp/files/inc_js/ac/
+||bookoffonline.co.jp/files/tracking/
+||carview.co.jp/include_api/log/
+||contx.net/collect.js
+||count.upc.rakuten.co.jp^
+||counter.wikiwiki.jp^
+||d-log.asahi.co.jp^
+||d-log.bs-asahi.tv^
+||d-log.tv-asahi.co.jp^
+||d.tv-asahi.co.jp^
+||daiichi-kamotsu.co.jp/js/google_analytics.js
+||dmm.com/analytics/
+||dmm.com/imp?
+||doda.jp/DodaCommon/Html/js/RtoasterTrack.js
+||doda.jp/DodaFront/Html/js/dodaPrime_pc_aaTag.js
+||doda.jp/resources/dcfront/js/usrclkTracking.js
+||dxlive.com/js/dtrace.js
+||eq-beacon.stream.co.jp^
+||eq-player-log.cdnext.stream.ne.jp^
+||fensi.plus^*/tracking/
+||g123.jp/stats?
+||game-i.daa.jp/skin/analytics.php
+||gizmodo.jp/api/SurveyCountCollection?
+||goo.ne.jp^*/vltracedmd.js
+||hatarako.net/api/recommend/analyze_logger
+||i2i.jp/bin/
+||img.syosetu.org/js/c_
+||j1.ax.xrea.com^
+||k-crm.jp/tracking.js
+||link.tv-asahi.co.jp/tver/cookiesync?
+||ln.ameba.jp^
+||log-lb.skyperfectv.co.jp^
+||log.recommend.nicovideo.jp^
+||logql.yahoo.co.jp^
+||m-oo-m.com/data/report/
+||mangaraw.to/api/v1/view/
+||mayla.jp/TRACKING/
+||measure.ameblo.jp^
+||medibot.delling.care/api/counts/
+||minkou.jp/js/tracking.js
+||mixi.net/static/js/build/mixi-analysis.production.js
+||mng.jiji.com/cookie.html
+||muragon.com/js/normal/gtag-event.js
+||next.rikunabi.com/api/logRecommendRealtimeI2AV2
+||nhk.or.jp^*/bc.js
+||nicovideo.jp/api/counter/
+||nikkei.com/.resources/tracking/
+||odsyms15.com/impression?
+||pvtag.yahoo.co.jp^
+||pw.gigazine.net^
+||pzd.rakuten.co.jp^
+||rakuten.co.jp/com/js/omniture/
+||rakuten.co.jp/gw.js
+||rat.rakuten.co.jp^
+||rdsig.yahoo.co.jp^$image
+||rec1.smt.docomo.ne.jp/bcn_access_log/
+||recv-entry.tbs.co.jp^
+||recv-jnn.tbs.co.jp^
+||retty.me/gen204.php
+||retty.me/javascripts/common/logging.js
+||revive-chat.io/js/tracking-min.js
+||rtm-tracking.zozo.jp^
+||sankei.co.jp/js/analytics/
+||scinable.net/access?
+||scis.tbs.co.jp^
+||seesaawiki.jp/img/rainman.gif?
+||so-zou.jp/js/ga.js
+||stats.nhk.or.jp^
+||suumo.jp^*/tag/
+||sy.amebame.com^
+||sy.ameblo.jp^
+||t.syosetu.org^
+||tekoki-fuzoku-joho.com/js/ALinkPrepare_
+||tower.jp/bundle/beacon
+||track.buyma.com^
+||tracking.game8.jp^
+||tracking.gnavi.co.jp^
+||travel.co.jp/js/analysis.js
+||travel.co.jp/tracking.asp
+||tsite.jp/static/analytics/
+||tv-asahi.co.jp/official/logging?
+||view.fujitv.co.jp^
+||wowow.co.jp/API/new_prg/get_tracking_url.php
+||x.allabout.co.jp^
+||yahoo.co.jp/b?p=
+||yahoo.co.jp/p?
+||yahoo.co.jp/s?s=
+||yjtag.yahoo.co.jp^
+||zatsubitown.com/mailfriend/kaiseki
+! Korean
+||11st.co.kr/st/
+||ad-log.dable.io^
+||adoffice.11st.co.kr^
+||aem-collector.daumkakao.io^
+||auction.co.kr/ad/log.js
+||auction.co.kr/montelena.js
+||bizlog-gateway.myrealtrip.com^
+||cdp.yna.co.kr^
+||chosun.com/hitlog/
+||count.munhwa.com^
+||cue.search.naver.com/api/*/log/
+||data-logdelivery.wconcept.co.kr^
+||daumcdn.net^*/awsa.js
+||gmarket.co.kr/js/common/uuid.js
+||hits.zdnet.co.kr^
+||jdsports.co.kr/collect.php
+||kyson.kakao.com^
+||l.m.naver.com^
+||log.etoday.co.kr^
+||log.kinolights.com^
+||log.zdnet.co.kr^
+||naver.com/PostView.nhn?$image
+||nil.naver.com^
+||pds.auction.co.kr^
+||rake.11st.co.kr^
+||seoul.co.kr/weblog/
+||sp.naver.com^
+||stat.i3.dmm.com^
+||stat.tiara.daum.net^
+||stat.tiara.kakao.com^
+||stat.tiara.tistory.com^
+||stat.wanted.jobs^
+||track.tiara.daum.net^
+||track.tiara.kakao.com^
+||tracker.cauly.co.kr^
+||uts.auction.co.kr^
+||utsssl.auction.co.kr^
+||wcs.naver.com^
+||weblog.coupang.com^
+||weblog.eseoul.go.kr^
+||weblog2.eseoul.go.kr^
+||ytn.co.kr/_comm/ylog.php?
+! Latvian
+||cv.ee/static/stat.php
+||delfi.lv/t/p.js
+||delphi.lv/t/t.js
+||diena.lv/statistics/
+||inbox.lv^*/ga.js
+||insbergs.lv/ins_statistics/
+||reklama.lv/services/espy.php
+||ss.lv/counter/
+||stats.tunt.lv^
+||tanks.lv/top/stats.php
+! Lithuanian
+||15min.lt/cached/tgif$~third-party
+||lrytas.lt/counter/
+! Norwegian
+||click.vgnett.no^
+||data.nrk.no^
+||nrk.no^*/stats/
+||stats.proff.no^
+||tdep.hema.nl/main.js
+||vg.no/stats/
+! Polish
+|http://x.o2.pl^
+||analytics.gazeta.pl^
+||collect.state.centrum24.pl^
+||dot.wp.pl^$script
+||entryhit.wp.pl^
+||euro.com.pl/log-customer-visit
+||eventstream.dodopizza.com^
+||ingbank.pl/mojeing/bs/xx.js
+||interia.pl^*/hit.
+||iplsc.com/inpl.log/
+||iwa.iplsc.com^
+||kropka.onet.pl^
+||mklik.gazeta.pl^
+||nasza-klasa.pl^*/pp_gemius
+||p.gazeta.pl^
+||pixel.wp.pl^
+||rek.www.wp.pl^
+||savecart.pl/d/
+||squid.gazeta.pl/bdtrck/
+||stats.teledyski.info^
+||wp.pl/?rid=
+||wtk.pl/js/WTKStats.js
+! Portuguese
+||audience-mostread.r7.com^
+||click.uol.com.br^
+||dejavu.mercadolivre.com.br^
+||dn.pt/tag/
+||dna.uol.com.br^
+||g.bit.pt^
+||g.bitmag.com.br^
+||geoip.ativo.com^
+||globo-ab.globo.com^
+||globo.com/geo?
+||hits.letras.mus.br^
+||horizon.globo.com^
+||jsuol.com.br/aud/$script
+||lancenet.com.br/pw.js
+||log-ads.r7.com^
+||logger.rm.uol.com.br^
+||logger.uol.com.br^
+||matt.mercadolivre.com.br^
+||metrics.uol.com.br^
+||olx.com.br^*/lurker.
+||poder360.com.br/_tracker
+||r7.com/comscore/
+||sapo.*/clk?u=
+||sapo.pt/Projects/sapoabd/
+||sinonimos.com.br/hits.php
+||tags.globo.com^
+||tm.jsuol.com.br^
+||tm.uol.com.br^
+||track.exame.com^
+||track.olx.com.br^
+||tracker.bt.uol.com.br^
+||tracker.publico.pt^
+||uai.com.br^*/analytics.js
+||uol.com.br/stats?
+! Romanian
+||agrointel.ro/ga.js
+||agrointel.ro/track.js
+||analytics.okazii.ro^
+||views.b1tv.ro^
+||views.romaniatv.net^
+! Russian
+||2ch.hk^*/tracker.js?
+||2gis.ru/_/log
+||2gis.ru/_/metrics
+||3dnews.ru/track
+||4pda.ru/stat/
+||a.mts.ru^
+||a.pikabu.ru^
+||a.ria.ru^
+||ad.mail.ru/static/sync-loader.js
+||ad7.bigmir.net^
+||adme.media/metric-collector
+||affilate.hh.ru^
+||agroserver.ru/ct/
+||analytics.carambatv.ru^
+||auto.ru/-/ajax/$~xmlhttprequest
+||auto.ru/cookiesync/
+||avito.ru/stat/
+||babyblog.ru/pixel?
+||c.sibnet.ru^
+||clck.dzen.ru^
+||consultant.ru/js/counter.js
+||cosmo.ru/*/.js?i=*&r=
+||counter.drom.ru^
+||counter.sibnet.ru^
+||cpa.hh.ru^
+||credistory.ru/api/v1/LiveMetrics/
+||cs42.pikabu.ru^
+||cvt1.sibnet.ru^
+||data.glamour.ru^
+||drom.ru/dummy.
+||dzen.ru/api/*/stats/
+||dzen.ru/pingx
+||dzeninfra.ru/ping?
+||fb.ru/stat/
+||fontanka.ru/api/metrics/
+||fotostrana.ru/start/
+||goya.rutube.ru^
+||hh.ru/analytics^
+||hh.ru/stat?
+||interfax.ru/cnt/
+||irecommend.ru/collect/
+||jetvis.ru/stat/
+||kommersant.ru/a.asp?p=
+||kommersant.uk/banner_stats
+||lamoda.ru/z?
+||link.subscribe.ru^
+||livelib.ru/service/pinger
+||livelib.ru/service/spv
+||livelib.ru/service/traffic
+||livelib.ru/service/visitlist/
+||lmcdn.ru^*/statistics.js
+||log.dzen.ru^
+||log.ren.tv^
+||log.rutube.ru^
+||mail.ru/count/
+||metrika.kontur.ru^
+||mirtesen.ru/js/ms.js
+||ms.dzen.ru^
+||mts.ru/fe-api/logger
+||mytoys.ru/ka_z.jpg?
+||ngs.ru/s/
+||odnoklassniki.ru/dk?cmd=videoStatNew
+||ok.ru/dk?cmd=videoStatNew
+||ozon.ru/tracker/
+||pikabu.ru/ajax/analytics.php
+||pikabu.ru/apps/*/analytics.js
+||pikabu.ru/stat/
+||pixels.boxberry.ru^
+||rabota.by/analytics?
+||rabota.by/stat?
+||radar.imgsmail.ru^
+||rambler.ru/metrics/
+||rambler.ru/ts-metrics/
+||rbc.ru/click?
+||rbc.ru/count/
+||rbc.ru/redir/stat/
+||rbc.ru/rightarror.gif
+||rt.ru/proxy?
+||rutube.ru/counters.html?
+||rutube.ru/dbg/player_stat?
+||seedr.ru^*/stats/
+||servernews.ru/track?
+||sibnet.ru/counter.php?
+||ssp.rambler.ru^
+||start.ru/logger/
+||stat.5-tv.ru^
+||stat.api.2gis.ru^
+||stat.bankiros.ru^
+||stat.pravmir.ru^
+||stat.russianfood.com^
+||stat.stars.ru^
+||stats.mos.ru^
+||superjob.ru/ws/
+||sync.rambler.ru^
+||tes-game.ru/stat/
+||tonkosti.ru/go.php?
+||top-staging.mail.ru^
+||top.mail.ru/tc?js
+||top.mail.ru/tpc.js
+||top.mail.ru/tt?js
+||trk.mail.ru^$image,script
+||vedomosti.ru/boom?
+||vesti.ru/counter/
+||xapi.ozon.ru^$ping
+||xray.mail.ru^
+||yandex.ru/log?
+||yast.rutube.ru^
+! Serbian
+! Slovene
+||24ur.com/bin/player/?mod=statistics&
+||dnevnik.si/tracker/
+||ninja.data.olxcdn.com/ninja-olxba.js
+||tracker.azet.sk^
+! Spanish
+||abc.es/pixel/
+||aemet.es/js/stats.js
+||analytics.bolavip.com^
+||analytics.emol.com^
+||analytics.infobae.com^
+||analytics.redlink.com.ar^
+||audiencies.ccma.cat^
+||bankinter.com/res/img/documento_cargado.gif?
+||caliente.mx/integration-scripts/tracking.min.js
+||coletor.terra.com^
+||compare.easyviajar.com^
+||emol.com/bt/ping
+||epimg.net/js/*/satelliteLib-
+||esfbs.com/site/stat?
+||esmas.com/scripts/esmas_stats.js
+||estadisticas.lanacion.com.ar^
+||estadonline.publiguias.cl^
+||g.siliconweek.es^
+||genial.guru/metric-collector
+||geo.emol.cl^
+||gruporeforma.com/clickGrupoReforma.js
+||hits.antena3.com^
+||horizon-track.globo.com^
+||matt.mercadolibre.
+||mercadolibre.com/tracks^
+||mundodesconocido.com/tracker/
+||pixel.europapress.net^
+||px-intl.ucweb.com^
+||rvv.emol.com^
+||statsmp2.emol.com^
+||t-pan.triodos.com^
+||t13.cl/hit/
+||taringa.net/ajax/track-visit.php
+||terra.com.mx/js/metricspar_
+||terra.com.mx^*/metrics_begin.js
+||terra.com.mx^*/metrics_end.js
+||terra.com/js/metrics/
+||terra.com^*/td.asp?bstat
+||todomercadoweb.es/pixel
+||trrsf.com/metrics/
+||ubeat.tv/api/v1/sda/
+||uecdn.es/js/pbmu.js
+||unm.emol.com^
+||wssgmstats.vibbo.com^
+||wsstats.coches.net^
+! Swedish
+||aftonbladet.se/cnp-assets/glimr-sdk.js
+||ai.idg.se^
+||analytics.elx.cloud^
+||ax.idg.se^
+||blocket.se/js/trafikfonden.js
+||falkenbergtorget.se/sc.gif?
+||fusion.bonniertidskrifter.se^
+||gx.idg.se^
+||prisjakt.nu/js.php?p=trafikfonden
+||stat.nyheter24.se^
+! Thai
+||dek-d.com^*/analytic.js
+||scribe.wongnai.com^
+||ta.sanook.com^
+||thairath.co.th/event/
+! Turkish
+||athena-event-provider.n11.com^
+||c.gazetevatan.com^
+||d.haberler.com^
+||d.sondakika.com^
+||glami.com.tr/tracker/
+||h.n11.com^
+||haberler.com/dinamik/
+||hstats.hepsiburada.com^
+||iys.org.tr/mti-popts.js
+||sahibinden.com/sbbi/
+||stats.birgun.net^
+||tracker.blutv.com^
+! Ukrainian
+|http://r.i.ua^
+|https://r.i.ua^
+||at.ua/stat/
+||counter.nv.ua^
+||counter.ukr.net^
+||meta.ua/c.asp?
+||obozrevatel.com/pixel.png
+||piccy.info/c?
+||piccy.org.ua/c?
+||remp.nv.ua^
+||sport.ua/pixel/
+||target.ukr.net^
+! Vietnamese
+||analytics.aita.gov.vn^
+||api.baomoi.com^$image
+||coccoc.com/log
+||log.ttbc-hcm.gov.vn^
+||logsbin.dantri.com.vn^
+||pixel.coccoc.com^
+||tka.tiki.vn/pixel/
+||track-srv.vietnamnet.vn^
+||w-api.baomoi.com^$image
+!-----------------------Allowlists to fix broken sites------------------------!
+! *** easylist:easyprivacy/easyprivacy_allowlist.txt ***
+@@/cgi-bin/counter_module?action=list_models$subdocument,~third-party
+@@||1001trackstats.com/api/$xmlhttprequest,domain=songstats.com
+@@||1trackapp.com/static/tracking/$script,stylesheet,~third-party
+@@||8tm.net/static/img/fbpixel.png$~third-party
+@@||ab.blogs.es/abtest.png$domain=trendencias.com|xataka.com
+@@||account.adobe.com/newrelic.js$~third-party
+@@||accounts.intuit.com/fe_logger?$~third-party
+@@||addthis.com/*-angularjs.min.js$script,domain=ead.senac.br|missingkids.com|missingkids.org
+@@||addthis.com/js/*/addthis_widget.js$script,domain=stagecoachbus.com
+@@||admin.memberspace.com/sites/*/analytics/views$~third-party
+@@||adobedc.demdex.net/ee/v1/identity/$xmlhttprequest,domain=cibc.com
+@@||adobedtm.com/launch-$script,xmlhttprequest
+@@||adobedtm.com^*/launch-$script,xmlhttprequest
+@@||adobedtm.com^*/s-code-$script
+@@||adobedtm.com^*/satellite-$script
+@@||aeries.net^*/require/analytics/views/$script,~third-party
+@@||ajio.com/static/assets/vendors~static/chunk/common/libraries/fingerprintjs2.$script,~third-party
+@@||akamaihd.net/nbad/player/*/appmeasurement.js$domain=watch.nba.com
+@@||akamaihd.net/nbad/player/*/visitorapi.js$domain=watch.nba.com
+@@||alphaapi.brandify.com/rest/clicktrack$xmlhttprequest,domain=traderjoes.com
+@@||analytics-static.ugc.bazaarvoice.com/prod/$script,domain=hisense.co.uk
+@@||analytics.amplitude.com^$~third-party
+@@||analytics.analytics-egain.com/onetag/$script,domain=boohoo.com|digikey.at|digikey.be|digikey.bg|digikey.ca|digikey.ch|digikey.cn|digikey.co.il|digikey.co.nz|digikey.co.th|digikey.co.uk|digikey.co.za|digikey.com|digikey.com.au|digikey.com.br|digikey.com.mx|digikey.cz|digikey.de|digikey.dk|digikey.ee|digikey.es|digikey.fi|digikey.fr|digikey.gr|digikey.hk|digikey.hu|digikey.ie|digikey.in|digikey.it|digikey.jp|digikey.kr|digikey.lt|digikey.lu|digikey.lv|digikey.my|digikey.nl|digikey.no|digikey.ph|digikey.pl|digikey.pt|digikey.ro|digikey.se|digikey.sg|digikey.si|digikey.sk|digikey.tw
+@@||analytics.edgekey.net/ma_library/html5/html5_malibrary.js$script,domain=mxplayer.in
+@@||analytics.itunes.apple.com^$~third-party
+@@||answers.ros.org/m/default/media/images/$image,~third-party
+@@||api-analytics.magstimconnect.net^$~third-party
+@@||api-js.datadome.co/js/$domain=sso.garena.com
+@@||api-mg2.db-ip.com^$xmlhttprequest,domain=journal-news.com
+@@||api.amplitude.com^$xmlhttprequest,domain=insiderintelligence.com
+@@||api.enthusiastgaming.net^$xmlhttprequest,domain=diep.io
+@@||api.getmakerlog.com/discussions/$~third-party,websocket,xmlhttprequest
+@@||api.ipinfodb.com^$xmlhttprequest,domain=management30.com
+@@||api.perfops.net^$script,xmlhttprequest,domain=cdnperf.com|dnsperf.com
+@@||api.touchnote.io^$xmlhttprequest,domain=app.touchnote.com
+@@||api.us1.exponea.com^$script,xmlhttprequest,domain=walmartpetrx.com
+@@||appboycdn.com/web-sdk/$script,domain=magicseaweed.com
+@@||aramex.co.nz/Umbraco/Api/Tracking/$~third-party
+@@||assets.msn.com/staticsb/statics/latest/adboxes/$script,~third-party
+@@||att.com/scripts/adobe/prod/$script,~third-party
+@@||att.com/scripts/adobe/virtual/detm-container-hdr.js$~third-party
+@@||att.com/ui/services_co_myatt_common/$script,~third-party
+@@||att.tv^*/VisitorAPI.js$script,~third-party
+@@||autocomplete.clearbit.com^$xmlhttprequest,domain=dzone.com
+@@||azureedge.net/prod/smi/loader-config.json$domain=pressdemocrat.com
+@@||azureedge.net^*/analytics/eventtracking.js$script,domain=crimemapping.com
+@@||bam.nr-data.net^$script,domain=kapwing.com
+@@||bgp.he.net/images/flags/*.gif?$image,~third-party
+@@||bjjhq.com/HttpCombiner.ashx?$script,~third-party
+@@||blackcircles.ca^$script,~third-party
+@@||blueconic.net/bostonglobemedia.js$domain=bostonglobe.com
+@@||bluecore.com/triggermail.js$script,domain=fcpeuro.com
+@@||bookmate.com^*/impressions?$~third-party,xmlhttprequest
+@@||bostonglobe.com/login/js/lib/AppMeasurement.js$~third-party
+@@||builder.lift.acquia.com/lift.js$script,domain=edwardjones.com
+@@||c.lytics.io/api/tag/$script,domain=time.com
+@@||c.paypal.com/da/r/fb.js$script
+@@||c.webtrends-optimize.com/acs/$script,domain=tvlicensing.co.uk
+@@||canadacomputers.com/templates/ccnew/assets/js/jquery.browser-fingerprint-$~third-party
+@@||cdc.gov/jscript/metrics/adobe/launch/$script,~third-party
+@@||cdn-net.com/cc.js
+@@||cdn.cquotient.com/js/$domain=fender.com
+@@||cdn.heapanalytics.com^$script,domain=libertymutual.com
+@@||cdn.jsdelivr.net^*/fp.min.js$script,domain=cuevana2.io
+@@||cdn.mxpnl.com/libs/$script,domain=get.pumpkin.care
+@@||cdn.perfops.net/rom3/rom3.min.js$domain=cdnperf.com
+@@||cdn.segment.com/analytics-next/
+@@||cdn.segment.com/analytics.js/$script,domain=abstractapi.com|app.cryptotrader.tax|driversed.com|fender.com|finerdesk.com|foxbusiness.com|foxnews.com|givingassistant.org|inxeption.io|reuters.com|squaretrade.com
+@@||cdn.segment.com/next-integrations/integrations/
+@@||cdn.segment.com/v1/projects/
+@@||cdn.treasuredata.com/sdk/$script,domain=sso.lg.com
+@@||cdn.usefathom.com/script.js$domain=sharpen-free-design-generator.netlify.app
+@@||cdn.viglink.com/api/vglnk.js$domain=9to5mac.com|electrek.co
+@@||certona.net^*/scripts/resonance.js$script,domain=canadiantire.ca|finishline.com|summitracing.com|tumi.com
+@@||channel.images.production.web.w4a.tv^*/ard.png?$domain=yallo.tv
+@@||chart-embed.service.newrelic.com^$subdocument,xmlhttprequest
+@@||chasecdn.com^*/@ccb-blueanalytics/$script,domain=chase.com
+@@||chat.d-id.com/assets/mixpanel.$~third-party
+@@||check.ddos-guard.net/check.js$script
+@@||cleverpush.com/channel/$script,domain=bsdex.de|heise.de
+@@||cleverpush.com/sdk/$script,domain=heise.de
+@@||cloudflare.com/ajax/libs/fingerprintjs2/$domain=extracttable.com|fckrasnodar.ru|login.kroton.com.br
+@@||cloudflare.com/cdn-cgi/trace$domain=infyspringboard.onwingspan.com|myair.resmed.com
+@@||cloudflareinsights.com/beacon.min.js$script,domain=app.uniswap.org
+@@||cloudfront.net/atrk.js$domain=luxuryrealestate.com
+@@||cloudinary.com/perimeterx/$image,domain=perimeterx.com
+@@||cnet.com/a/video-player/uvpjs-rv/$script,~third-party
+@@||cohesionapps.com/cohesion/$domain=bankrate.com|frontier.com
+@@||cohesionapps.com/preamp/$subdocument,xmlhttprequest,domain=frontier.com
+@@||collect.igodigital.com/collect.js$domain=berkley-fishing.com|goodwillfinds.com|samash.com|vitalsource.com|wilsonparking.com.au
+@@||collusion.com/static/newrelic.js$script,~third-party
+@@||community.brave.com/t/$xmlhttprequest
+@@||communityenergysolutions.com/ui/assets/gtm/gtm.js$script,~third-party
+@@||connatix.com/min/connatix.renderer.infeed.min.js$domain=accuweather.com|collider.com|gamepress.gg|salon.com
+@@||console.statsig.com/_next/$~third-party
+@@||content.gap.com/fp/check.js$script,domain=oldnavy.gap.com
+@@||content.gap.com/fp/tags.js$script,domain=oldnavy.gap.com
+@@||coremetrics.com*/eluminate.js
+@@||coxbusiness.com/R136/assets/newrelic/newrelic.js$~third-party
+@@||cpt-static.gannettdigital.com/universal-web-client/master/latest/elements/vendor/adobe/app-measurement.html$xmlhttprequest
+@@||cpt-static.gannettdigital.com/universal-web-client/master/latest/elements/vendor/adobe/visitor-api.html$xmlhttprequest
+@@||cqcounter.com^$domain=cqcounter.com
+@@||cults3d.com/packs/js/quantcast-$~third-party
+@@||cvs.com/shop-assets/js/VisitorAPI.js$~third-party
+@@||d2ma0sm7bfpafd.cloudfront.net/wcsstore/waitrosedirectstorefrontassetstore/custom/js/analyticseventtracking/$script,domain=waitrosecellar.com
+@@||d347cldnsmtg5x.cloudfront.net/util/1x1.gif$image,domain=aplaceforeverything.co.uk
+@@||d41.co/tags/ff-2.min.js$domain=ads.spotify.com
+@@||data.adxcel-ec2.com^$image,domain=laguardia.edu
+@@||datadoghq-browser-agent.com^$script,domain=bbcgoodfood.com|dashboard.getdriven.app|hungryroot.com|usa.experian.com
+@@||delta.com/dlhome/ruxitagentjs$~third-party
+@@||docs.google.com/*/viewdata$~third-party
+@@||driverfix.com^*/index_src.php?tracking=$~third-party
+@@||dw.com.com/js/dw.js$domain=cbsnews.com|tv.com
+@@||dz9qn8fh4jznm.cloudfront.net/script.js$script,domain=bostonglobe.com
+@@||e.cquotient.com/recs/$script,domain=fender.com
+@@||easternbank.com/sites/easternbank/files/google_tag/eastern_bank/google_tag.script.js$script,~third-party
+@@||easy-firmware.com/templates/default/html/*/assets/js/fingerprint2.min.js$script,~third-party
+@@||ec.europa.eu/eurostat/databrowser/assets/analytics/piwik.js$script,~third-party
+@@||ensighten.com^*/Bootstrap.js$domain=americanexpress.com|bestbuy.com|britishairways.com|capitalone.com|caranddriver.com|cart.autodesk.com|citi.com|citigold.com.sg|citizensbank.com|dell.com|fidelity.com|france24.com|hp.com|norton.com|rfi.fr|sbs.com.au|sfgate.com|staples.com|target.com|verizonwireless.com|williamhill.com|womenshealthmag.com|zales.com
+@@||ensighten.com^*/code/$script
+@@||ensighten.com^*/scode/$script,domain=norton.com
+@@||ensighten.com^*/serverComponent.php?$script
+@@||etsy.com/api/v3/ajax/bespoke/*log_performance_metrics=$~third-party
+@@||events.raceresult.com^$~third-party,xmlhttprequest
+@@||evil-inc.com/comic/advertising-age/$~third-party,xmlhttprequest
+@@||extreme-ip-lookup.com^$script,domain=bulkbarn.ca
+@@||ezodn.com/cmp/gvl.json$xmlhttprequest
+@@||fast.fonts.net/jsapi/core/mt.js$script,domain=bkmedical.com|eclecticbars.co.uk|gables.com|itsolutions-inc.com|senate.gov
+@@||fichub.com/plugins/adobe/lib/AppMeasurement.js$domain=natgeotv.com
+@@||fichub.com/plugins/adobe/lib/VisitorAPI.js$domain=natgeotv.com
+@@||firebase.google.com/docs/analytics/$~third-party
+@@||friendbuy.com^$domain=butcherbox.com
+@@||geoip-db.com/jsonp/$script,third-party
+@@||geolocation-db.com/jsonp$script,domain=parts.hp.com
+@@||get.geojs.io/v1/ip/geo.json$domain=namlih.my.id|shop.critrole.com
+@@||getflywheel.com/addons/google-analytics/$~third-party
+@@||getpublica.com/playlist.m3u8$xmlhttprequest
+@@||github.com/gorhill/uBlock/*/src/web_accessible_resources/fingerprint2.js$~third-party
+@@||glookup.info/api/json/$domain=grabify.link
+@@||gnar.grammarly.com/events$xmlhttprequest,domain=account.grammarly.com
+@@||gstatic.com^*/firebase-performance-standalone.js$script,domain=flightradar24.com
+@@||gsuite.tools/js/gtag.js$script,~third-party
+@@||guce.advertising.com/collectIdentifiers$~third-party
+@@||healthgateway.gov.bc.ca/snowplow.js$~third-party
+@@||hello.myfonts.net/count/$stylesheet,domain=cfr.org|condor.com|furniturevillage.co.uk|luggagehero.com
+@@||hobbyking.com^*/gtm.js$script,~third-party
+@@||hotstarext.com/web-messages/core/error/v52.json$xmlhttprequest,domain=hotstar.com
+@@||identity.mparticle.com^$xmlhttprequest
+@@||ignitetv.shaw.ca/js/api/fingerprint.js$~third-party
+@@||ikea.com^*/analyticsEvent.$script,~third-party
+@@||imgur.com/min/px.js$~third-party
+@@||indeed.com/rpc/log/myjobs/$~third-party
+@@||ipapi.co/json/$xmlhttprequest,domain=168.dailymaverick.co.za|audius.co
+@@||ipinfo.io/?token=$domain=assurancemortgage.com|webtv.ert.gr
+@@||ipv4.seeip.org/jsonip$domain=empire-streaming.app
+@@||join.southerncross.co.nz/quote/_assets/js/sx/app/helpers/gtm.js
+@@||js-agent.newrelic.com^$domain=alliantcreditunion.com|giftcards.com|kapwing.com
+@@||js.captcha-display.com/xhr_tag.js$script,domain=auth.garena.com
+@@||js.datadome.co/tags.js$script,domain=sso.garena.com
+@@||js.monitor.azure.com/scripts/$script,domain=genya.it|microsoft.com|rubex.efilecabinet.net
+@@||js.sentry-cdn.com^$script,domain=app.homebinder.com|book.dmm.com|etsy.com|interacty.me|jobs.ch|pizzahut.com.au
+@@||jsrdn.com/s/$script,domain=distro.tv
+@@||jumbe.zaius.com/v2/zaius.gif?$domain=subscriptions.management
+@@||kameleoon.eu/kameleoon.js$script,domain=buttercloth.com
+@@||kaptcha.com/collect/sdk?$domain=palmettostatearmory.com|wyze.com
+@@||kaxsdc.com/collect/sdk$xmlhttprequest,domain=vanillaereward.com
+@@||kohls.com/ecustservice/js/sitecatalyst.js$script,~third-party
+@@||lacoste.com^*/click-analytics.js$~third-party
+@@||languagecloud.sdl.com/node_modules/fingerprintjs2/dist/fingerprint2.min.js$~third-party
+@@||leadpages.io/analytics/v1/observations/capture?$xmlhttprequest
+@@||leanplum.com^$domain=arkadium.com
+@@||legendstracking.com/js/legends-tracking.js$~third-party
+@@||lenovo.com/_ui/desktop/common/js/AdobeAnalyticsEvent.js$script,~third-party
+@@||lenovo.com/fea/js/adobeAnalytics/$script,~third-party,xmlhttprequest
+@@||letmegpt.com/js/gpt.js$~third-party
+@@||level.travel/tracker/tracker.js$script,~third-party
+@@||lightning.bleacherreport.com/launch/*-source.min.js$~third-party
+@@||lightning.bleacherreport.com^*/launch-$~third-party
+@@||live.rezync.com^$script,domain=batteriesplus.com
+@@||liveapi.cleverpush.com/websocket$websocket,domain=heise.de
+@@||loader-cdn.azureedge.net/prod/smi/loader.min.js$domain=pressdemocrat.com
+@@||logging.apache.org^$~third-party
+@@||logo.clearbit.com^$image,third-party
+@@||lr-ingest.io/LogRocket.min.js$domain=smartcare.com
+@@||mapquestapi.com/logger/$domain=hertz.com
+@@||maptiles.ping-admin.ru^$image,domain=ping-admin.com
+@@||matomo.miraheze.org/matomo.js$script,~third-party
+@@||maxmind.com/geoip/$xmlhttprequest,domain=ibanez.com
+@@||maxmind.com^*/geoip.js$domain=aljazeera.com|ballerstatus.com|bikemap.net|carltonjordan.com|cashu.com|coolsport.tv|dereon.com|dr.dk|everydaysource.com|fab.com|girlgames4u.com|incgamers.com|ip-address.cc|maaduu.com|qatarairways.com|sat-direction.com|sotctours.com|stoli.com|vibe.com
+@@||maxmind.com^*/geoip2.js$domain=bandai-hobby.net|boostedboards.com|donorschoose.org|driftinnovation.com|fallout4.com|ibanez.com|instamed.com|metronews.ca|mtv.com.lb|runningheroes.com|teslamotors.com
+@@||mbe.modelica.university/_next/static/*/pages/pageview.js$~third-party
+@@||mclo.gs/js/logview.js$~third-party
+@@||metrics.bangbros.com/tk.js$~third-party
+@@||mlbstatic.com/mlb.com/adobe-analytics/$script,domain=mlb.com
+@@||mmstat.com/eg.js$script,domain=aliexpress.com
+@@||mopar.com/moparsvc/mopar-analytics-state$~third-party
+@@||mozu.com^*/monetate.js$script,domain=acehardware.com
+@@||mparticle.com/js/v2/*/mparticle.js$script,domain=bk.com|cnbc.com|gymshark.com|motortrendondemand.com
+@@||msecnd.net/scripts/jsll-$script,domain=forms.microsoft.com|office.com|sharepoint.com|teams.microsoft.com
+@@||munchkin.marketo.net/munchkin.js$domain=st.com|telus.com
+@@||mxpnl.com/libs/mixpanel-*.min.js$domain=change.org|frigidaire.com
+@@||mxpnl.com^$domain=mixpanel.com
+@@||myaccount.chicagotribune.com/assets/scripts/tag-manager/googleTag.js$~third-party
+@@||nationwide.com/myaccount/includes/images/x.gif$~third-party
+@@||natureetdecouvertes.com^*/pixel.png$~third-party
+@@||netcoresmartech.com/smartechclient.js$domain=hdfcfund.com
+@@||new.abb.com/ruxitagentjs_$~third-party
+@@||newrelic.com/nr-*.min.js$domain=surveymonkey.co.uk|surveymonkey.com|surveymonkey.de
+@@||next.co.uk/static-content/gtm-sdk/gtm.js$~third-party
+@@||nike.com/assets/measure/data-capture/analytics-client.min.js$script,~third-party
+@@||nintendolife.com/themes/base/javascript/fingerprint.js$~third-party
+@@||nocookie.net^*/tracking-opt-in.min.js$script,domain=fandom.com
+@@||noodid.ee/chordQuiz/$~third-party
+@@||noxgroup.com/noxinfluencer/sensor_sdk/$script,domain=noxinfluencer.com
+@@||nsfw.xxx/vendor/fingerprint/fingerprint2.min.js$script,~third-party
+@@||nypost.com/blaize/datalayer$~third-party
+@@||nytimes.com^*/EventTracker.js$~third-party
+@@||ondemand.sas.com^$subdocument
+@@||onenote.com^*/aria-web-telemetry
+@@||online-metrix.net/fp/tags.js$domain=donorschoose.org
+@@||onlinebanking.usbank.com/TUX/public/libs/adobe/appmeasurement.js$script,~third-party
+@@||open.spotifycdn.com/cdn/build/embed/overture.$script,domain=open.spotify.com
+@@||optimove.net^$domain=app.touchnote.com
+@@||ots.webtrends-optimize.com/$xmlhttprequest,domain=tvlicensing.co.uk
+@@||p.typekit.net/p.css$stylesheet,domain=athleticpropulsionlabs.com|browserstack.com|bungie.net|business.untappd.com|robertsspaceindustries.com
+@@||palmettostatearmory.com/static/$script,~third-party
+@@||pals.pa.gov/vendor/analytics/$~third-party
+@@||parcel.app/webtrack.php?$~third-party
+@@||parsely.com/keys/$script,domain=wmmr.com|wrif.com
+@@||paypal.com/xoplatform/logger/api/logger$domain=play.leagueofkingdoms.com
+@@||paypalobjects.com/*/pageView.js$script,domain=paypal.com
+@@||paypalobjects.com/web/*/gAnalytics.js$script,domain=paypal.com
+@@||pendo.io/agent/static/$script,domain=recruiting.adp.com
+@@||plantyn.com/optiext/optiextension.dll$~third-party
+@@||plausible.io/js/plausible.js$script,domain=sammobile.com
+@@||plex.tv/api/v2/geoip$xmlhttprequest
+@@||plugin.intuitcdn.net/vep-collab-smlk-ui/assets/vendor/glance/cobrowse/
+@@||plugins.matomo.org^$image,~third-party
+@@||postex.com/api/ping?$~third-party
+@@||powerquality.eaton.com/include/js/elqScr.js$~third-party
+@@||ps.w.org/wp-slimstat/$domain=wordpress.org
+@@||pub.pixels.ai/prebid_standard.js$script,domain=standard.co.uk
+@@||px-cdn.net/api/v2/collector/ocaptcha$xmlhttprequest
+@@||quantcast.com/wp-content/themes/quantcast/$domain=quantcast.com
+@@||realclearpolitics.com/esm/assets/js/admiral.js$~third-party
+@@||realclearpolitics.com/esm/assets/js/analytics/chartbeat.js$~third-party
+@@||realclearpolitics.com/esm/assets/js/analytics/gaAnalytics.js$~third-party
+@@||reallyfreegeoip.org/json/$domain=thekitchensafe.com
+@@||redbull.com/gtm.js$~third-party
+@@||res-x.com^*/Resonance.aspx?
+@@||researchintel.com^*/feedback.asp$xmlhttprequest,domain=intel.com
+@@||retailmenot.com/__wsm.gif$ping,~third-party,xmlhttprequest
+@@||rfksrv.com/rfk/js/*/init.js$script,domain=riteaid.com
+@@||rollbar.com^*/rollbar.min.js$domain=rollingstone.com|variety.com|wwd.com
+@@||s-microsoft.com/mscc/statics/$script,domain=microsoft.com
+@@||s.btstatic.com/tag.js$domain=sephora.com
+@@||s.thebrighttag.com/tag?site=$domain=sephora.com
+@@||sc.youmaker.com/site/article/count?
+@@||scorecardresearch.com^*/streamingtag_plugin_jwplayer.js
+@@||sealserver.trustwave.com/seal.js$domain=zoom.us
+@@||secure.logmein.com/scripts/Tracking/$script,domain=logme.in|logmein.com
+@@||securegames.iwin.com/data/gtm.json$~third-party,xmlhttprequest
+@@||seg-cdn.pumpkin.care/analytics.js/$~third-party
+@@||seg-cdn.pumpkin.care/next-integrations/integrations/mixpanel/$domain=get.pumpkin.care
+@@||sephora-track.inside-graph.com/gtm/$domain=sephora.com
+@@||sephora-track.inside-graph.com/ig.js$domain=sephora.com
+@@||sephora.com/js/ufe/isomorphic/thirdparty/fp.min.js$script,~third-party
+@@||service.apport.net/apport-spa-common/src/tracking/tracking.js$~third-party
+@@||services.chipotle.com/__imp_apg__/$~third-party
+@@||shoonya.finvasia.com/fingerprint2.min.js$script,~third-party
+@@||shop.bmw.com.au/assets/analytics-setup.js$~third-party
+@@||shopify.com/shopifycloud/boomerang/shopify-boomerang-$domain=rydewear.com
+@@||signalshares.com/webtrends.min.js$script,~third-party
+@@||simcotools.app/assets/adsense-*.js$~third-party
+@@||smushcdn.com^*/1.gif$domain=retrounlim.com
+@@||snap.licdn.com/li.lms-analytics/insight.min.js$domain=msci.com
+@@||sohotheatre.com^*/PageView.js$~third-party
+@@||solr.sas.com/query/$xmlhttprequest,domain=jmp.com
+@@||sophos.com^*/tracking/gainjectmin.js$script,domain=community.sophos.com
+@@||spark.co.nz/content/*/utag.sync.js$domain=skinny.co.nz
+@@||src.fedoraproject.org/static/issues_stats.js?$~third-party
+@@||src.litix.io/shakaplayer/*/shakaplayer-mux.js
+@@||src.litix.io/videojs/*/videojs-mux.js
+@@||ssl-images-amazon.com^*/satelliteLib-$script,domain=audible.com
+@@||startribune.com/analytics-assets/sitecatalyst/appmeasurement.js$~third-party
+@@||statcounter.com/css/packed/statcounter-$stylesheet,~third-party
+@@||statcounter.com/js/packed/statcounter-$script,~third-party
+@@||static.amazon.jobs/assets/analytics-$script,domain=amazon.jobs
+@@||static.cloud.coveo.com/coveo.analytics.js/$domain=cabelas.com
+@@||static.foxnews.com^*/VisitorAPI.js$domain=foxbusiness.com|foxnews.com
+@@||static.knowledgehub.com/global/images/ping.gif?$~third-party
+@@||stats.pusher.com/timeline/$script,domain=bringatrailer.com
+@@||stats.sports.bellmedia.ca^$domain=rds.ca|tsn.ca
+@@||stats.statbroadcast.com/interface/webservice/event/$~third-party
+@@||steamstatic.com/steam/apps/$image,domain=store.steampowered.com
+@@||tagcommander.com^*/tc_$script
+@@||tags.news.com.au/prod/heartbeat/$script
+@@||target.microsoft.com/rest/$xmlhttprequest,domain=microsoft.com
+@@||targetimg1.com/webui/$script,domain=target.com
+@@||teams.microsoft.com/dialin-cdn-root/*/aria-web-telemetry-$~third-party
+@@||tennispro.eu/min/?$script,~third-party
+@@||thaiairways.com/static/common/js/wt_js/webtrends.min.js$~third-party
+@@||thomas.co/sites/default/files/google_tag/primary/google_tag.script.js$script,~third-party
+@@||tinypass.com^*/logAutoMicroConversion?$domain=chicago.suntimes.com
+@@||tms.oracle.com/main/prod/utag.sync.js$~third-party
+@@||tokbox.com/prod/logging/ClientEvent$domain=examroom.ai
+@@||toyota.com/recall/static/js/custom/facebookPixel.js$~third-party
+@@||traceparts.com/lib/piano-analytics/piano-analytics.js$script,~third-party
+@@||track.shipstation.com/collections/trackingEvents.js$~third-party
+@@||trackjs.com/agent/$script,domain=delta.com
+@@||trackonomics.net/client/$script,domain=popsugar.com
+@@||travel-assets.com/platform-analytics-prime/$domain=chase.com
+@@||tunein.com/api/v1/comscore$~third-party
+@@||userapi.com^*.gif?extra=$image,domain=vk.com
+@@||uwufufu.com/_nuxt/mixpanel.$~third-party
+@@||vast.com/vimpressions.js$domain=everycarlisted.com
+@@||vidible.tv^*/ComScore.StreamSense.js
+@@||vidible.tv^*/ComScore.Viewability.js
+@@||vivocha.com^*/vivocha.js?$script,domain=kartell.com
+@@||web.dev/patterns/web-vitals-$~third-party
+@@||webtrends.com/js/webtrends.min.js$script,domain=tvlicensing.co.uk
+@@||weightwatchers.com/optimizelyjs/$script,~third-party
+@@||where2getit.com/traderjoes/rest/clicktrack?$domain=traderjoes.com
+@@||widget.fitanalytics.com/widget.js$script,domain=pullandbear.com
+@@||widget.trustpilot.com/bootstrap/$script,domain=amartfurniture.com.au|exodus.co.uk|imyfone.com
+@@||wpfc.ml/b.gif$image,domain=holybooks.com
+@@||wsj.net/iweb/static_html_files/cxense-candy.js$script,domain=marketwatch.com
+@@||www.ups.com/WebTracking/processInputRequest
+@@||wwwcache.wral.com/presentation/v3/scripts/providers/analytics/ga.js$~third-party
+@@||xeroshoes.co.uk/affiliate/scripts/trackjs.js$~third-party
+@@||xfinity.com/stream/js/api/fingerprint.js$~third-party
+@@||yottaa.net^$script,domain=containerstore.com|hannaandersson.com
+@@||zoominfo.com/c/amplitude-js$script,~third-party
+!! amplitude.com/libs
+@@||amplitude.com/libs/$script,domain=elconfidencial.com|kink.com|pdfexpert.com|xe.com
+!! googletagmanager.com/gtm.js
+@@||googletagmanager.com/gtm.js$domain=3djuegosguias.com|3djuegospc.com|acehardware.com|acornonline.com|ads.spotify.com|aeromexico.com|afisha.timepad.ru|aliexpress.com|ampparit.com|animeanime.jp|anond.hatelabo.jp|applesfera.com|aruba.it|arvopaperi.fi|atptour.com|autobild.de|autorevue.cz|axeptio.eu|backcountry.com|bbcgoodfood.com|benesse-style-care.co.jp|besplatka.ua|beterbed.nl|betten.de|binglee.com.au|book.impress.co.jp|bsa-whitelabel.com|bunte.de|bybit.com|bybitglobal.com|capital.it|carcareplus.jp|carhartt-wip.com|casa.it|ccleaner.com|cdek.ru|cdon.fi|chipotle.com|chronopost.fr|cinemacafe.net|clickup.com|cmoa.jp|como.fi|complex.com|compradiccion.com|computerbild.de|coolermaster.com|costco.co.jp|crello.com|cyclestyle.net|cyclingnews.com|cypress.io|dazeddigital.com|deejay.it|dengekionline.com|dholic.co.jp|directoalpaladar.com|dlsite.com|dmv.ca.gov|doodle.com|dropps.com|e15.cz|easternbank.com|edwardjones.com|elcorteingles.es|elnuevodia.com|enmotive.com|episodi.fi|eprice.it|ergotron.com|espinof.com|euronics.it|expressvpn.com|fandom.com|feex.co.il|festoolusa.com|finanzen.at|finanzen.ch|finanzen.net|flytap.com|focus.de|formula1.com|fortress.com.hk|fortune.com|freenet-funk.de|froxy.com|fum.fi|gamebusiness.jp|gamespark.jp|genbeta.com|glamusha.ru|gorillamind.com|grandhood.dk|gravitydefyer.com|gumtree.com|harveynorman.co.nz|harveynorman.com.au|hatenacorp.jp|headlightrevolution.com|herculesstands.com|hobbyhall.fi|hostingvergelijker.nl|houseofbilocca.com|idealo.at|idealo.de|iexprofs.nl|iltalehti.fi|independent.co.uk|inferno.fi|inside-games.jp|insiderstore.com.br|iphoneitalia.com|jalan.net|jn.pt|join.kazm.com|journaldunet.com|jreastmall.com|junonline.jp|kakuyomu.jp|karriere.at|kauppalehti.fi|kedronparkhotel.com.au|komputronik.pl|konami.com|la7.it|larousse.fr|lastampa.it|lecker.de|level.travel|lift.co.za|linternaute.com|lippu.fi|loopearplugs.com|luko.eu|m1.com|m2o.it|mainichi.jp|makitani.net|mangaseek.net|mcgeeandco.com|mecindo.no|mediamarkt.nl|mediuutiset.fi|mercell.com|meritonsuites.com.au|mikrobitti.fi|mirapodo.de|mobilmania.cz|montcopa.org|mycar-life.com|mysmartprice.com|nap-camp.com|netcombo.com.br|newscafe.ne.jp|nflgamepass.com|nielsendodgechryslerjeepram.com|nihontsushin.com|nordvpn.com|nourison.com|oakandfort.com|odia.ig.com.br|oetker-shop.de|okwave.jp|olx.ro|onlineshop.ocn.ne.jp|papajohns.com|pccomponentes.com|petsathome.com|pgatoursuperstore.com|pioneer.eu|plaion.com|plantsome.ca|poprosa.com|post.ch|primeoak.co.uk|prisjakt.nu|prisonfellowship.org|prizehometickets.com.au|qrcode-monkey.com|radiko.jp|radio-canada.ca|radiorur.de|rbbtoday.com|reanimal.jp|resemom.jp|response.jp|rocketnews24.com|rtl.de|rumba.fi|runescape.com|rustih.ru|sanwacompany.co.jp|saraiva.com.br|saturn.at|savethechildren.it|scan.netsecurity.ne.jp|sciencesetavenir.fr|scotsman.com|soranews24.com|soundguys.com|soundi.fi|spektrum.de|sport-wear.com.ua|sport1.de|sportmaster.ru|spyder7.com|stage.parco.jp|store-jp.nintendo.com|stressless.com|subscribe.greenbuildingadvisor.com|superesportes.com.br|support.brother.com|support.creative.com|swarajyamag.com|swb.de|talent.lowes.com|talouselama.fi|teddyfood.com|tekniikkatalous.fi|telia.no|theretrofitsource.com|tide.com|tilt.fi|tivi.fi|tn.com.ar|topper.com.br|toyota-forklifts.se|trademe.co.nz|tradera.com|tredz.co.uk|trendencias.com|trendenciashombre.com|tribuna.com|tugatech.com.pt|tumi.com|tv-asahi.co.jp|type.jp|uclabruins.com|unieuro.it|uniqlo.com|upc.pl|upwork.com|uqr.to|uusisuomi.fi|veho.fi|vidaextra.com|video.repubblica.it|vip.de|virginmedia.com|vitonica.com|viviennewestwood-tokyo.com|vox.de|vtvgo.vn|wamiz.com|watsons.com.tr|wowma.jp|www.nicovideo.jp|xatakamovil.com|xxl.se|ymobile.jp|youpouch.com|zakzak.co.jp|zazzle.com|zennioptical.com|zf1.tohoku-epco.co.jp|zinio.com|zive.cz|zozo.jp
+!! google-analytics.com/analytics.js
+@@||google-analytics.com/analytics.js$domain=beinsports.com|brooklinen.com|carnesvizzera.ch|cmoa.jp|enmotive.com|healthrangerstore.com|hobbyhall.fi|infoconso-multimedia.fr|jackbox.tv|k2radio.com|koel.com|kowb1290.com|ligtv.com.tr|meritonsuites.com.au|nabortu.ru|news.gamme.com.tw|novatv.bg|papajohns.com|poiskstroek.ru|rzd.ru|saturn.at|schweizerfleisch.ch|skaties.lv|stressless.com|teddyfood.com|tracking.narvar.com|tradera.com|tribuna.com|truwin.com|tuasaude.com|tv3play.no|unicef.de|viandesuisse.ch|vox.de|westernunion.com|worldsbiggestpacman.com|xxl.se
+!! googletagmanager.com/gtag/js
+@@||googletagmanager.com/gtag/js$domain=academy.com|acornonline.com|afisha.timepad.ru|aliexpress.com|carhartt-wip.com|cbslocal.com|cmoa.jp|devclass.com|dholic.co.jp|ejgiftcards.com|enmotive.com|factory.pixiv.net|game.anymanager.io|herculesstands.com|honeystinger.com|hostingvergelijker.nl|huion.com|inforesist.org|kawasaki.com|liene-life.com|livongo.com|m.putlocker.how|mediaite.com|mirrativ.com|modehasen.de|montcopa.org|nihontsushin.com|oko.sh|panflix.com.br|papajohns.com|radiosarajevo.ba|rintraccialamiaspedizione.it|schwab.com|seatmaps.com|skylar.com|starblast.io|timparty.tim.it|toptal.com|virginmedia.com|virginplus.ca|winefolly.com|winhappy.com|xl-bygg.no|zf1.tohoku-epco.co.jp
+!! googleoptimize.com/optimize.js
+@@||googleoptimize.com/optimize.js$domain=binglee.com.au|grasshopper.com|in.bookmyshow.com|inquirer.com|investing.com|lacomer.com.mx|lodgecastiron.com|tentree.ca|virginmedia.com
+!! google-analytics.com/plugins/ua/ec.js
+@@||google-analytics.com/plugins/ua/ec.js$domain=saturn.at|teddyfood.com|xxl.se
+!! google-analytics.com/ga.js
+@@||google-analytics.com/ga.js$domain=meritonsuites.com.au
+!! browser.sentry-cdn.com
+@@||browser.sentry-cdn.com^$domain=acustica-audio.com|dic.pixiv.net|doconcall.com.my|eco-clobber.co.uk|fundhero.io|marshmallow-qa.com|menshealth.com|podcasty.seznam.cz|roomster.com|shop.dns-net.de|spacemarket.com|timesprime.com|vivareal.com.br|womenshealthmag.com
+!! adobedtm.com^*/satelliteLib-
+@@||adobedtm.com^*/satelliteLib-$script,domain=absa.co.za|ally.com|americanexpress.com|as.com|auspost.com.au|backcountry.com|bmw.com.au|canadapost-postescanada.ca|ceair.com|collegeboard.org|conad.it|costco.com|crackle.com|crackle.com.ar|crackle.com.br|crackle.com.ec|crackle.com.mx|crackle.com.pe|crackle.com.py|crave.ca|crimewatchdaily.com|dhl.de|directline.com|elgiganten.se|elkjop.no|eonline.com|fcbarcelona.cat|fcbarcelona.cn|fcbarcelona.com|fcbarcelona.es|fcbarcelona.fr|fcbarcelona.jp|firststatesuper.com.au|gigantti.fi|godigit.com|hellobank.fr|hgtv.com|hrw.com|ilsole24ore.com|jeep.com|laredoute.be|laredoute.ch|laredoute.co.uk|laredoute.com|laredoute.es|laredoute.fr|laredoute.it|laredoute.pl|laredoute.pt|laredoute.ru|lenovo.com|lowes.com|malaysiaairlines.com|mastercard.us|mathworks.com|monoprice.com|myaetnasupplemental.com|nbcnews.com|nfl.com|nflgamepass.com|nofrills.ca|nrj.fr|oprah.com|oracle.com|pnc.com|poweredbycovermore.com|radiko.jp|realtor.com|redbull.tv|repco.co.nz|sbb.ch|searspartsdirect.com|shoppersdrugmart.ca|smooth.com.au|sony.jp|stuff.co.nz|subaru.com|support.nec-lavie.jp|tatacliq.com|telegraph.co.uk|timewarnercable.com|tou.tv|usanetwork.com|vanityfair.com|vtr.com|wayin.com|wired.com|wowway.net
+!! adobedtm.com^*-libraryCode_source.min.js
+@@||adobedtm.com^*-libraryCode_source.min.js$domain=doda.jp
+!! adobedtm.com^*_source.min.js
+@@||adobedtm.com^*_source.min.js$domain=ally.com|americanexpress.com|as.com|backcountry.com|crave.ca|disneyplus.disney.co.jp|hilton.com|hl.co.uk|homedepot.ca|kroger.com|mora.jp|nbarizona.com|pnc.com|tatacliq.com|telus.com
+!! adobedtm.com^*-source.min.js
+@@||adobedtm.com^*-source.min.js$script,domain=53.com|aarp.org|ally.com|americanexpress.com|as.com|atresplayer.com|automobiles.honda.com|backcountry.com|bose.ae|bose.at|bose.ca|bose.ch|bose.cl|bose.co|bose.co.jp|bose.co.nz|bose.co.uk|bose.com|bose.com.au|bose.de|bose.dk|bose.es|bose.fi|bose.fr|bose.hk|bose.hu|bose.ie|bose.it|bose.lu|bose.mx|bose.nl|bose.no|bose.pe|bose.pl|bose.se|boseapac.com|bosebelgium.be|boselatam.com|bt.com|cadenaser.com|churchofjesuschrist.org|cibc.com|crave.ca|currys.co.uk|dollargeneral.com|etihad.com|fedex.com|guitarcenter.com|healthsafe-id.com|helvetia.com|hgtv.com|hilton.com|homedepot.ca|ing.com.au|ingrammicro.com|kroger.com|lenovo.com|manager-magazin.de|marriott.com|mtvuutiset.fi|mybell.bell.ca|natwest.com|nbarizona.com|news.sky.com|personal.natwest.com|pnc.com|poweredbycovermore.com|ralphlauren.com|samsung.com|ssrn.com|tatacliq.com|telegraph.co.uk|telus.com|verizon.com|virginplus.ca|walgreens.com
+!! adobedtm.com^*/mbox-contents-
+@@||adobedtm.com^*/mbox-contents-$script,domain=absa.co.za|ally.com|americanexpress.com|as.com|backcountry.com|ceair.com|conad.it|costco.com|dhl.de|fcbarcelona.cat|fcbarcelona.cn|fcbarcelona.com|fcbarcelona.es|fcbarcelona.fr|fcbarcelona.jp|firststatesuper.com.au|hgtv.com|lenovo.com|lowes.com|nfl.com|oprah.com|pnc.com|shoppersdrugmart.ca|sony.jp|tatacliq.com|usanetwork.com|vanityfair.com|wired.com|wowway.net
+!! adobedtm.com/extensions/
+@@||adobedtm.com/extensions/$domain=antena3.com|apple.com|atresmedia.com|atresplayer.com|automobiles.honda.com|bravotv.com|cadenaser.com|crave.ca|foodnetwork.com|lasexta.com|telus.com|verizon.com
+!! OtAutoBlock.js
+@@||cookielaw.org^*/OtAutoBlock.js$domain=bancsabadell.com|darkreading.com|uphold.com
+!! cxense.com/public/widget/
+@@||cxense.com/public/widget/$domain=bizjournals.com|businessinsider.de|computerbild.de|cxpublic.com|cyclestyle.net|friday.gold|friday.kodansha.co.jp|handelsblatt.com|ksml.fi|mainichi.jp|marketwatch.com|nippon.com|savonsanomat.fi|shueisha.co.jp|tn.com.ar|wsj.com
+!! cxense.com/cx.cce.js
+@@||cxense.com/cx.cce.js$domain=bizjournals.com|businessinsider.de|cxpublic.com|handelsblatt.com|mainichi.jp|marketwatch.com|tarzanweb.jp|tn.com.ar|wpb.shueisha.co.jp|wsj.com
+!! cxense.com/cx.js
+@@||cxense.com/cx.js$domain=13.cl|bizjournals.com|businessinsider.de|computerbild.de|cyclestyle.net|handelsblatt.com|ksml.fi|mainichi.jp|marketwatch.com|nippon.com|savonsanomat.fi|shueisha.co.jp|tarzanweb.jp|tn.com.ar|tv-tokyo.co.jp|wsj.com
+!! collector.appconsent.io
+@@||collector.appconsent.io/hello$domain=lachainemeteo.com|lefigaro.fr
+!! imrworldwide.com/*ggc
+@@||imrworldwide.com/novms/js/2/ggc$script,domain=9now.com.au|adelaidenow.com.au|advertiser.com.au|bestrecipes.com.au|byronnews.com.au|cairnspost.com.au|coffscoastadvocate.com.au|couriermail.com.au|dailyexaminer.com.au|espn.com|frasercoastchronicle.com.au|gattonstar.com.au|geelongadvertiser.com.au|gladstoneobserver.com.au|goldcoastbulletin.com.au|heraldsun.com.au|ipswichadvertiser.com.au|la7.it|news-mail.com.au|news.com.au|noosanews.com.au|ntnews.com.au|sky.it|sunshinecoastdaily.com.au|theaustralian.com.au|themercury.com.au|theweeklytimes.com.au|townsvillebulletin.com.au|tvnow.de|video.corriere.it|weeklytimesnow.com.au|whitsundaytimes.com.au
+! imrworldwide.com/v60.js
+@@||imrworldwide.com/v60.js$domain=adelaidenow.com.au|advertiser.com.au|bestrecipes.com.au|byronnews.com.au|cairnspost.com.au|coffscoastadvocate.com.au|corriereadriatico.it|couriermail.com.au|dailyexaminer.com.au|fanpage.it|frasercoastchronicle.com.au|gattonstar.com.au|geelongadvertiser.com.au|gladstoneobserver.com.au|goldcoastbulletin.com.au|heraldsun.com.au|huffingtonpost.it|ilgazzettino.it|ilmattino.it|ilmessaggero.it|ipswichadvertiser.com.au|la7.it|last.fm|leggo.it|musicfeeds.com.au|news-mail.com.au|noosanews.com.au|ntnews.com.au|nzherald.co.nz|quotidianodipuglia.it|realestateview.com.au|sf.se|sunshinecoastdaily.com.au|theaustralian.com.au|themercury.com.au|theweeklytimes.com.au|threenow.co.nz|townsvillebulletin.com.au|video.deejay.it|video.espresso.repubblica.it|video.ilsecoloxix.it|video.lastampa.it|video.repubblica.it|weatherchannel.com.au|weeklytimesnow.com.au|whitsundaytimes.com.au
+!! mpsnare.iesnare.com
+@@||mpsnare.iesnare.com^$script,domain=citi.com|citibank.com|enmasse.com|jbhifi.com.au|login.skype.com|oreillyauto.com|power.fi|princessauto.com|screwfix.com|usbank.com|verkkokauppa.com|vitacost.com|westernunion.com
+!! ingest.sentry.io/api/
+@@||ingest.sentry.io/api/$xmlhttprequest,domain=orionprotocol.io|play.tv3.lv|tesco.com|tesco.hu
+!! ci-mpsnare.iovation.com
+@@||ci-mpsnare.iovation.com/snare.js$domain=equifax.ca
+!! tag.aticdn.net
+@@||tag.aticdn.net^$script,domain=gouv.fr|rte.ie|tv5monde.com|uktvplay.co.uk|visaconcierge.eu|yourstory.com
+!! omtrdc.net
+@@||omtrdc.net^*/mbox/json?$xmlhttprequest,domain=absa.co.za|att.com|pnc.com|vodafone.it
+!! tags.tiqcdn.com
+@@||tags.tiqcdn.com/utag/*/utag.sync.js$domain=bankofamerica.com|hsbc.co.uk|samsung.com|sony.jp|vmware.com
+! statcounter.com charts https://github.com/uBlockOrigin/uAssets/issues/11321
+@@||gs.statcounter.com/chart.php$script,third-party
+@@||statcounter.com/js//fusioncharts.charts.js
+@@||statcounter.com/js/fusioncharts.js
+@@||www.statcounter.com/images/$image,third-party
+! ping exceptions
+@@||api.babbel.io/gamma/v1/$ping,domain=babbel.com
+! https://github.com/easylist/easylist/issues/10565
+@@||googletagmanager.com/gtm.js$domain=blaklader.at|blaklader.be|blaklader.ca|blaklader.com|blaklader.cz|blaklader.de|blaklader.dk|blaklader.ee|blaklader.es|blaklader.fi|blaklader.fr|blaklader.ie|blaklader.it|blaklader.nl|blaklader.no|blaklader.pl|blaklader.se|blaklader.uk
+! Opera/Safari (buggy 3rd-party implementations)
+! https://forums.lanik.us/viewtopic.php?f=64&t=45603&p=158333
+@@||bugsnag.com^$~third-party,domain=app.bugsnag.com
+! Consent and video Fixes
+@@||sourcepointcmp.bloomberg.*/ccpa.js$script,domain=bloomberg.co.jp|bloomberg.com
+@@||sourcepointcmp.bloomberg.*/mms/get_site_data?$domain=bloomberg.co.jp|bloomberg.com
+! CNAME (Specific allowlists)
+@@||app.clarity.so^$~third-party
+@@||cbsi.map.fastly.net^
+@@||mycleverpush.com/iframe?$domain=bsdex.de
+@@||n8s.jp^$script,domain=nikkei.com
+@@||online-metrix.net^$script,domain=eki-net.com
+@@||p11.techlab-cdn.com^$domain=wizzair.com
+@@||sc.omtrdc.net^$domain=cibc.com
+@@||team-rec.jp^$domain=search-voi.0101.co.jp|voi.0101.co.jp
+@@||tmx.bestbuy.com/z3nsvo31pnlmt3tw.js$domain=bestbuy.com
+@@||wwwimage-tve.cbsstatic.com^
+! Chrome bug (Endless loading causing site to crash https://forums.lanik.us/viewtopic.php?f=64&t=25152)
+! Preliminarily allowlists Omniture s_code tracking pixels (script versions H.25 - H.25.2) due to breakage (https://adblockplus.org/forum/viewtopic.php?f=10&t=11378) if blocking the script causes issues
+@@||omns.americanexpress.com/b/ss/
+@@||omtrdc.net/b/ss/$image,domain=britishairways.com|halifax-online.co.uk
+@@||omtrdc.net/rest/$xmlhttprequest
+! Allowlists to fix broken pages of tracking companies
+! Heatmap
+@@||heatmap.it^$domain=heatmap.com|heatmap.it|heatmap.me|heatmap.org
+@@||komas19.xyz/cdn-cgi/apps/$script,~third-party
+!----------------Allowlists to fix broken international sites-----------------!
+! *** easylist:easyprivacy/easyprivacy_allowlist_international.txt ***
+!---------- German ----------
+@@||adconsole.ch/api/ws-businessclick/*/data.json$domain=finanzen.ch
+@@||adnz.co/dmp/publisher.js$domain=finanzen.ch
+@@||adnz.co/header.js?adTagId=$domain=finanzen.ch
+@@||analytics.edgekey.net/html5/akamaihtml5-min.js$domain=br.de
+@@||api-v4.trbo.com/r.php?$script,domain=blau.de
+@@||apps.derstandard.at^*/TrackingCookieCheck?$subdocument
+@@||asadcdn.com/adlib/$domain=computerbild.de
+@@||asadcdn.com/assets/video/$domain=computerbild.de
+@@||bilder-a.akamaihd.net/ip/js/ipdvdc/ipdvdc.min.js$domain=n-tv.de|toggo.de|vip.de
+@@||businessclick.ch/index.js$domain=finanzen.ch
+@@||classic.comunio.de/clubImg.phtml/$image,~third-party
+@@||digitale-sammlungen.gwlb.de^*/pageview.js$script,domain=digitale-sammlungen.gwlb.de
+@@||dynamicyield.com/scripts/*/dy-coll-nojq-min.js$domain=gigasport.at|gigasport.ch|gigasport.de
+@@||energy.de^*/ivw.js?$domain=energy.de
+@@||ens.nzz.ch^$~third-party
+@@||geo.kaloo.ga/json/$script,domain=tagesspiegel.de
+@@||google-analytics.com/gtm/js?$script,domain=unicef.de
+@@||google-analytics.com/gtm/optimize.js$domain=focus.de
+@@||googleoptimize.com/optimize.js?$domain=eventim.de
+@@||gymnasedeburier.ch/themes/segment/js/$~third-party
+@@||img.adnz.co^$image,domain=finanzen.ch
+@@||kameleoon.eu/images/$domain=welt.de
+@@||kameleoon.eu/kameleoon.js$domain=welt.de
+@@||kameleoon.io/geolocation^$domain=welt.de
+@@||kameleoon.io/ip^$domain=welt.de
+@@||l.ecn-ldr.de/loader/loader.js$domain=braun-hamburg.com
+@@||online.mps-gba.de/praeludium/$script,domain=auto-motor-und-sport.de|caravaning.de|motorradonline.de
+@@||responder.wt-safetag.com/resp/api/get/$script,domain=myhermes.de
+@@||script-at.iocnt.net/iam.js$domain=oe24.at
+@@||showheroes.com/publishertag.js$domain=rollingstone.de
+@@||showheroes.com/pubtag.js$domain=rollingstone.de
+@@||spiegel.de/layout/js/http/netmind-$script
+@@||taboola.com/libtrc/$script,domain=bild.de|computerbild.de|fitbook.de|jetzt.de|metal-hammer.de|musikexpress.de|noizz.de|rollingstone.de|stylebook.de|sueddeutsche.de|techbook.de|travelbook.de|welt.de|wieistmeineip.at|wieistmeineip.ch|wieistmeineip.de
+@@||technical-service.net^$xmlhttprequest,domain=n-tv.de|rtl.de|vip.de
+@@||tipico.de/js/modules/fingerprintjs2/fingerprint2.min.js$script,~third-party
+@@||toggo.de/static/js/sourcepoint.js$domain=toggo.de
+@@||trbo.com/plugin/trbo_$script,domain=blau.de
+@@||uim.tifbs.net/js/$script,domain=web.de
+@@||widgets.trustedshops.com/reviews/tsSticker/$domain=koziol-shop.de
+!---------- Greek -----------
+@@||extreme-ip-lookup.com/json/$xmlhttprequest,domain=skaitv.gr
+!---------- French ----------
+@@||actiris.be/urchin.js
+@@||ausha.tsbluebox.com^$media,domain=podcast.ausha.co
+@@||caf.fr^*/smarttag.js$script,~third-party
+@@||cmp.telerama.fr/js/telerama.min.js$~third-party
+@@||connect.facebook.net^*/fbevents.js$domain=elinoi.com
+@@||forecast.lemonde.fr/p/event/pageview?$image,~third-party
+@@||logic-immo.com/lib/xiti/xiti.js$script,~third-party
+@@||mabanque.fortuneo.fr/js/front/fingerprint2.js$script,domain=mabanque.fortuneo.fr
+@@||pmdstatic.net/advertising-$script,xmlhttprequest,domain=programme-tv.net
+@@||service-public.fr^*/assets/js/eulerian/eulerian.js$~third-party
+@@||tra.scds.pmdstatic.net/sourcepoint/$domain=businessinsider.fr|capital.fr|voici.fr
+@@||trustcommander.net/iab-tcfapi/tcfapi.js$script,domain=tf1info.fr
+!---------- Arabic ----------
+@@||collector.leaddyno.com/shopify.js$script,domain=s4l.us
+@@||nbe.com.eg/NBEeChannelManager/CallMW.aspx$~third-party
+@@||rudaw.net/images/pixel.gif$~third-party
+@@||static.leaddyno.com/js$script,domain=s4l.us
+!---------- Bosnian ----------
+@@||ocdn.eu/ucs/static/*/onesignal.js$script,domain=pulsonline.rs
+!---------- Bulgarian ----------
+!---------- Chinese ----------
+@@||10086.cn/framework/modules/sdc.js$script,~third-party
+@@||aixifan.com^*/sensorsdata.min.js?$domain=acfun.cn
+@@||baidu.com/api/bidder/$domain=jump2.bdimg.com
+@@||gtimg.com/qqcdn/*/beacon.min.js$script,domain=qq.com
+@@||hk.on.cc/js/v4/urchin.js
+@@||iwrite.unipus.cn/js/main/GPT.js$~third-party
+@@||nobook.com/open-interface/official-sensors.git/$script,~third-party
+@@||statics.zcool.com.cn/track/sensors.$script,~third-party
+@@||tianyancha.com^*/sensorsdata.$script,~third-party
+!---------- Czech ----------
+@@||1gr.cz/js/dtm/cache/satelliteLib-$domain=idnes.cz
+@@||creditas.cz/cb/public/assets/SmartTag-$script,~third-party
+@@||h.imedia.cz/js/cmp2/scmp.js$domain=seznam.cz
+@@||hlidacstatu.cz/scripts/highcharts-6/modules/heatmap.js
+@@||seznam.cz/?spec=*&url=$image,domain=search.seznam.cz
+@@||tvcom-static.ssl.cdn.cra.cz/*/videojs.ga.js$script,domain=tvcom.cz
+!---------- Danish ----------
+@@||nemlog-in.dk/resources/js/adrum.js$~third-party
+@@||spoc.sydtrafik.dk/CherwellPortal/dist/app/common/analytics/Analytics.js$~third-party
+!---------- Dutch ----------
+@@||3voor12.vpro.nl^*/streamsense.min.js$~third-party
+@@||ad.crwdcntrl.net^$script,domain=rtl.nl
+@@||marketingautomation.services^$script,domain=leeuwerik.nl
+@@||tag.aticdn.net/piano-analytics.js$script,domain=boerzoektvrouw.kro-ncrv.nl
+!---------- Finnish ----------
+@@||analytics-sdk.yle.fi/yle-analytics.min.js$~third-party
+@@||nelonenmedia.fi/logger/logger-ini.json$xmlhttprequest,domain=embed.sanoma-sndp.fi|supla.fi
+!---------- Hebrew ----------
+@@||amazonaws.com/static.madlan.co.il/*/heatmap.json?$xmlhttprequest
+@@||haaretz.co.il/logger/p.gif?$image,xmlhttprequest
+@@||mixpanel.com/track/?data=$xmlhttprequest,domain=eloan.co.il
+@@||mxpnl.com/libs/mixpanel-*.min.js$domain=eloan.co.il
+@@||themarker.com/logger/p.gif?$image,xmlhttprequest
+@@||trc.taboola.com/inncoil/log/3/available$subdocument,domain=inn.co.il
+!---------- Hungarian ----------
+!---------- Icelandic ----------
+!---------- Italian ----------
+@@||adobedtm.com^*/AppMeasurement.min.js$script,domain=sky.it
+@@||adobetag.com/d2/telecomitalia/live/Aggregato119TIM.js$domain=tim.it
+@@||analytics.edgekey.net/config/beacon-$xmlhttprequest,domain=raiplay.it
+@@||cdnb.4strokemedia.com/carousel/v4/comscore-JS-$script
+@@||chartbeat.com/js/chartbeat_brightcove_plugin.js$domain=capital.it|deejay.it|m2o.it
+@@||clerk.io/clerk.js$script,domain=trony.it
+@@||codicefl.shinystat.com/cgi-bin/getserver.cgi?$script,domain=3bmeteo.com|quotidiano.net
+@@||digitrend.it/wonder-marketing/assets/wordpress/js/videojs.ga.js?$script,domain=vrsicilia.it
+@@||jsdelivr.net^*/keen-tracking.min.js$domain=nextquotidiano.it
+@@||kataweb.it/wt/wt.js?http$domain=gelocal.it|video.huffingtonpost.it|video.ilsecoloxix.it|video.lastampa.it|video.repubblica.it
+@@||livesicilia.it/wp-content/plugins/digistream/digiplayer/js/videojs.ga.js?$script,~third-party
+@@||radio24.ilsole24ore.com/plugins/cordova-plugin-nielsen/www/nielsen.js$script,~third-party
+@@||repubblica.it/pw/pw.js?deskurl=$domain=gelocal.it|ilsecoloxix.it|lastampa.it
+@@||speedcurve.com/js/lux.js$script,domain=tv8.it
+@@||thron.com/shared/plugins/tracking/current/tracking-library-min.js$domain=dainese.com
+@@||timvision.it/libs/fingerprint/fingerprint.js
+@@||track.adform.net/serving/scripts/trackpoint$script,domain=sky.it
+!---------- Indonesian ----------
+@@||detik.com/urchin.js
+!---------- Japanese ----------
+@@||a8.net/svt/$image,domain=samplefan.com
+@@||allabout.co.jp/mtx_cnt.js$script,~third-party
+@@||analytics.digitalpfizer.com/js/prod/pcc/pf_appmeasurement.js$domain=pfizer-covid19-vaccine.jp
+@@||atwiki.jp/common/_img/spacer.gif?$image,domain=atwiki.jp
+@@||b-cloud.templatebank.com/js/gtag.js$~third-party
+@@||bdash-cloud.com/recommend-script/$script,domain=junonline.jp
+@@||bdash-cloud.com/tracking-script/*/tracking.js$domain=junonline.jp
+@@||carsensor.net/usedcar/modules/clicklog_top_lp_revo.php$xmlhttprequest
+@@||cdn.treasuredata.com/sdk/$script,domain=retty.me
+@@||cmn.gyro-n.com/js/gyr.min.js$domain=benesse-style-care.co.jp
+@@||collect.igodigital.com/collect.js$domain=enoteca.co.jp
+@@||delivery.satr.jp^$script,domain=mieru-ca.com
+@@||deteql.net/recommend/provision?$xmlhttprequest,domain=t-fashion.jp
+@@||disneyplus.disney.co.jp/view/vendor/analytics/$~third-party
+@@||dmp.im-apps.net/pms/*/pmt.js$domain=zakzak.co.jp
+@@||docodoco.jp^*/docodoco?key=$script,domain=jrtours.co.jp
+@@||e-stat.go.jp/modules/custom/retrieve/src/js/stat.js?$script,~third-party
+@@||ev.tpocdm.com^$xmlhttprequest,domain=wowma.jp
+@@||gamerch.com/s3-assets/library/js/fingerprint2.min.js?$script,~third-party
+@@||geolocation-db.com/json/$domain=admanager.line.biz
+@@||get.s-onetag.com/*/tag.min.js$domain=zakzak.co.jp
+@@||googleadservices.com/pagead/conversion_async.js$script,domain=jp.square-enix.com
+@@||googletagservices.com/tag/js/gpt.js$domain=fukuishimbun.co.jp
+@@||h-cast.jp^$script,domain=bookoffonline.co.jp
+@@||hakurei.ga/bin2img/wasm_export_bg.wasm$~third-party
+@@||howtonote.jp/google-analytics/$image,~third-party
+@@||in.treasuredata.com/js/*api_key$script,domain=retty.me
+@@||justmyshop.com/gate/criteo/product-id.js$~third-party
+@@||k-img.com/script/analytics/s_code.js$script,domain=kakaku.com
+@@||karte.io/libs/tracker.$domain=zf1.tohoku-epco.co.jp|zozo.jp
+@@||line-scdn.net^*/torimochi.js$script,domain=demae-can.com
+@@||linksynergy.com/minified_logic.js$xmlhttprequest
+@@||log000.goo.ne.jp/gcgw.js$domain=nttxstore.jp
+@@||nakanohito.jp^*/bi.js$domain=kenko-tokina.co.jp|myna.go.jp
+@@||nittsu.com/Tracking/Scripts/Tracking/track.js
+@@||platform.twitter.com/oct.js$domain=ncsoft.jp
+@@||play.dlsite.com/csr/viewer/lib/newrelic.js
+@@||pvtag.yahoo.co.jp^$script,domain=paypaymall.yahoo.co.jp
+@@||rt.rtoaster.jp^$image,domain=ec-store.net
+@@||rtoaster.jp/Rtoaster.js$domain=peachjohn.co.jp|satofull.jp
+@@||rtoaster.jp^$script,domain=ec-store.net|jreastmall.com|lexus.jp|melonbooks.co.jp
+@@||s.yjtag.jp/tag.js$script,domain=baseball.yahoo.co.jp|bousai.yahoo.co.jp|soccer.yahoo.co.jp|www.epson.jp
+@@||sail-horizon.com/spm/spm.v1.min.js$script,domain=voguegirl.jp
+@@||sankei.co.jp/js/analytics/skd.Analysis.js$script
+@@||sanspo.com/parts/chartbeat/$xmlhttprequest
+@@||snva.jp/javascripts/reco/$script,domain=store.charle.co.jp
+@@||suumo.jp/sp/js/beacon.js$script,~third-party
+@@||tm.r-ad.ne.jp/128/ra346756.js$script,domain=hpdsp.net
+@@||townwork.net/js/AppMeasurement.js$~third-party
+@@||treasuredata.com^$script,domain=skincare-univ.com
+@@||twitter.com/oct.js$domain=jp.square-enix.com
+@@||type.jp/common/js/clicktag.js
+@@||ukw.jp^*/?cbk=$script,domain=system5.jp
+@@||useinsider.com/ins.js$domain=pizzahut.jp
+@@||user.userguiding.com/sdk/identify$xmlhttprequest,domain=xaris.ai
+@@||webcdn.stream.ne.jp^*/referrer.js$domain=stream.ne.jp
+@@||yjtag.yahoo.co.jp/tag?$script,domain=bousai.yahoo.co.jp
+@@||yu.xyz.mn/images/event.gif?$image,~third-party
+@@||zinro.net/m/log.php
+!---------- Korean ----------
+@@||naver.net/wcslog.js$domain=m.tv.naver.com
+@@||ssl.pstatic.net/sstatic/sdyn.js$script,domain=search.naver.com
+!---------- Latvian ----------
+@@||gemius.pl/gplayer.js$script,third-party
+!---------- Macedonian ----------
+@@||motika.com.mk/wp-content/plugins/ajax-hits-counter/display-hits.rapid.php$~third-party
+!---------- Norwegian ----------
+@@||cat.telia.no/gtm.js$script,domain=telia.no
+@@||hvemder.no/js/hitcount.min.js$~third-party
+!---------- Polish ----------
+@@||gemius.pl/gstream.js
+@@||hit.gemius.pl/__/redataredir?$domain=ing.pl
+@@||hit.interia.pl/iwa_core$script,~third-party
+@@||iwa.iplsc.com/iwa.js$script
+@@||login.ingbank.pl^*/satelliteLib-$script
+@@||polfan.pl/app/vendor/fingerprint2.min.js$~third-party
+@@||pushpushgo.com/js/$script,domain=centrumriviera.pl
+@@||sascdn.com/tag/$script,domain=filmweb.pl
+@@||smog.moja-ostroleka.pl/mapa/sensorsdata.json$~third-party
+@@||staty.portalradiowy.pl/wstats/$script,third-party
+@@||unpkg.com/web-vitals/dist/web-vitals.base.iife.js$script,domain=wpolityce.pl
+!---------- Portuguese ----------
+@@||d.tailtarget.com/profiles.js$domain=superesportes.com.br
+@@||google-analytics.com/urchin.js$domain=record.xl.pt
+@@||players.fichub.com/plugins/adobe/$domain=24kitchen.pt
+@@||serasaexperian.com.br/dist/scripts/fingerprint2.js$~third-party
+@@||siteapps.com^$script,domain=netcombo.com.br
+@@||tags.t.tailtarget.com/t3m.js?$domain=superesportes.com.br
+@@||tm.jsuol.com.br/uoltm.js$script,domain=uol.com.br
+!---------- Romanian ----------
+@@||content.adunity.com/aulib.js$script,domain=b1tv.ro
+@@||imobiliare.ro/js/gtm.js$script,~third-party
+@@||stream.adunity.com^$xmlhttprequest,domain=b1tv.ro
+!---------- Russian ----------
+@@||afisha.ru/proxy/videonetworkproxy.ashx?$xmlhttprequest
+@@||criteo.net/js/ld/publishertag.js$domain=novayagazeta.ru
+@@||dict.rambler.ru/fcgi-bin/$xmlhttprequest,domain=rambler.ru
+@@||fplay.online/log_event$~third-party,xmlhttprequest
+@@||k12-company.ru^*/statistics.js$script
+@@||krok8.com/wp-content/plugins/pageviews/pageviews.min.js$script,~third-party
+@@||labrc.pw/advstats/$xmlhttprequest
+@@||mc.yandex.ru/metrika/tag.js$script,domain=auto.yandex|coddyschool.com
+@@||mealty.ru/js/ga_events.js$~third-party
+@@||mycargo.rzd.ru/dst/scripts/common/analytics-helper.js$~third-party
+@@||online.bcs.ru^*/piwik.bcs.js$script
+@@||openfpcdn.io/fingerprintjs/v3/iife.min.js$script,domain=mos03education.ru
+@@||pay.citylink.pro/stats/services/$~third-party
+@@||pladform.ru/dive/$xmlhttprequest
+@@||pladform.ru/player$subdocument
+@@||planetazdorovo.ru/pics/transparent_pixel.png$image,~third-party
+@@||playep.pro/log_event$~third-party,xmlhttprequest
+@@||player.fc-zenit.ru/msi/geoip?$xmlhttprequest
+@@||player.smotrim.ru/js/piwik.js$~third-party
+@@||player.vgtrk.com/js/stat.js?
+@@||playy.online/log_event$~third-party,xmlhttprequest
+@@||plplayer.online/log_event$~third-party,xmlhttprequest
+@@||rtr-vesti.ru/pvc_cdn/js/stat.js$domain=player.vgtrk.com
+@@||smotrim.ru/js/stat.js$script
+@@||swa.mail.ru/cgi-bin/counters?$script
+@@||toplay.biz/log_event$~third-party,xmlhttprequest
+@@||ttutu.biz/log_event$~third-party,xmlhttprequest
+@@||ucoz.net/cgi/uutils.fcg?$script,third-party
+@@||wargag.ru/public/js/counter.js?
+@@||widget.myrentacar.me^$script,subdocument
+@@||yandex.ru/metrika/tag.js$script,domain=kuchenland.ru
+@@||yandex.ru/metrika/watch.js$domain=alean.ru|anoncer.net|nabortu.ru|samozapis-spb.ru|tv.yandex.ru|tvrain.ru
+@@||yandex.ru/watch/$xmlhttprequest,domain=anoncer.net
+@@||yandex.ru/webvisor/$xmlhttprequest,domain=anoncer.net
+!---------- Spanish ----------
+@@||api.apolomedia.com/static/libs/event-tracking.min.js$script
+@@||cdn.smartclip-services.com^$script,domain=cerebriti.com
+@@||cloudfront.net/libs/amplitude-$script,domain=elconfidencial.com
+@@||elconfidencial.com^*/AnalyticsEvent.js
+@@||elconfidencial.com^*/EventTracker.js
+@@||groupbycloud.com/gb-tracker-client-3.min.js$domain=officedepot.co.cr
+@@||metrics.el-mundo.net/b/ss/$image,domain=expansion.com
+@@||mi.tigo.com.co/plugins/cordova-plugin-fingerprint-aio/$script,~third-party
+@@||spxl.socy.es^$script,xmlhttprequest,domain=3djuegosguias.com|3djuegospc.com|applesfera.com|compradiccion.com|directoalpaladar.com|espinof.com|genbeta.com|poprosa.com|trendencias.com|trendenciashombre.com|vidaextra.com|vitonica.com|xatakamovil.com
+!---------- Swedish ----------
+@@||lwadm.com/lw/pbjs?pid=$script,domain=sydostran.se
+@@||picsearch.com/js/comscore.js$domain=dn.se
+!---------- Thai ----------
+!---------- Turkish ----------
+@@||cdn.segmentify.com^$script,domain=gratis.com
+@@||merlincdn.net^*/common/images/spacer.gif$image,domain=turkcell.com.tr
+!---------- Ukrainian ----------
+@@||gemius.pl/gplayer.js$domain=tsn.ua
+@@||privatbank.ua/content/*/fp2.min.js$~third-party
+@@||uaprom.net/image/blank.gif?$image
+!---------- Vietnamese ----------
+@@||netcoresmartech.com/smartechclient.js$domain=cgv.vn
+!---------- Anti-Adblock ----------
+@@|http://r.i.ua/s?*&p*&l$image,domain=swordmaster.org
diff --git a/uAssets/thirdparties/publicsuffix.org/list/effective_tld_names.dat b/uAssets/thirdparties/publicsuffix.org/list/effective_tld_names.dat
new file mode 100644
index 0000000..6d6af67
--- /dev/null
+++ b/uAssets/thirdparties/publicsuffix.org/list/effective_tld_names.dat
@@ -0,0 +1,15419 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+// Please pull this list from, and only from https://publicsuffix.org/list/public_suffix_list.dat,
+// rather than any other VCS sites. Pulling from any other URL is not guaranteed to be supported.
+
+// Instructions on pulling and using this list can be found at https://publicsuffix.org/list/.
+
+// ===BEGIN ICANN DOMAINS===
+
+// ac : http://nic.ac/rules.htm
+ac
+com.ac
+edu.ac
+gov.ac
+net.ac
+mil.ac
+org.ac
+
+// ad : https://en.wikipedia.org/wiki/.ad
+ad
+nom.ad
+
+// ae : https://tdra.gov.ae/en/aeda/ae-policies
+ae
+co.ae
+net.ae
+org.ae
+sch.ae
+ac.ae
+gov.ae
+mil.ae
+
+// aero : see https://www.information.aero/index.php?id=66
+aero
+accident-investigation.aero
+accident-prevention.aero
+aerobatic.aero
+aeroclub.aero
+aerodrome.aero
+agents.aero
+aircraft.aero
+airline.aero
+airport.aero
+air-surveillance.aero
+airtraffic.aero
+air-traffic-control.aero
+ambulance.aero
+amusement.aero
+association.aero
+author.aero
+ballooning.aero
+broker.aero
+caa.aero
+cargo.aero
+catering.aero
+certification.aero
+championship.aero
+charter.aero
+civilaviation.aero
+club.aero
+conference.aero
+consultant.aero
+consulting.aero
+control.aero
+council.aero
+crew.aero
+design.aero
+dgca.aero
+educator.aero
+emergency.aero
+engine.aero
+engineer.aero
+entertainment.aero
+equipment.aero
+exchange.aero
+express.aero
+federation.aero
+flight.aero
+fuel.aero
+gliding.aero
+government.aero
+groundhandling.aero
+group.aero
+hanggliding.aero
+homebuilt.aero
+insurance.aero
+journal.aero
+journalist.aero
+leasing.aero
+logistics.aero
+magazine.aero
+maintenance.aero
+media.aero
+microlight.aero
+modelling.aero
+navigation.aero
+parachuting.aero
+paragliding.aero
+passenger-association.aero
+pilot.aero
+press.aero
+production.aero
+recreation.aero
+repbody.aero
+res.aero
+research.aero
+rotorcraft.aero
+safety.aero
+scientist.aero
+services.aero
+show.aero
+skydiving.aero
+software.aero
+student.aero
+trader.aero
+trading.aero
+trainer.aero
+union.aero
+workinggroup.aero
+works.aero
+
+// af : http://www.nic.af/help.jsp
+af
+gov.af
+com.af
+org.af
+net.af
+edu.af
+
+// ag : http://www.nic.ag/prices.htm
+ag
+com.ag
+org.ag
+net.ag
+co.ag
+nom.ag
+
+// ai : http://nic.com.ai/
+ai
+off.ai
+com.ai
+net.ai
+org.ai
+
+// al : http://www.ert.gov.al/ert_alb/faq_det.html?Id=31
+al
+com.al
+edu.al
+gov.al
+mil.al
+net.al
+org.al
+
+// am : https://www.amnic.net/policy/en/Policy_EN.pdf
+am
+co.am
+com.am
+commune.am
+net.am
+org.am
+
+// ao : https://en.wikipedia.org/wiki/.ao
+// http://www.dns.ao/REGISTR.DOC
+ao
+ed.ao
+gv.ao
+og.ao
+co.ao
+pb.ao
+it.ao
+
+// aq : https://en.wikipedia.org/wiki/.aq
+aq
+
+// ar : https://nic.ar/es/nic-argentina/normativa
+ar
+bet.ar
+com.ar
+coop.ar
+edu.ar
+gob.ar
+gov.ar
+int.ar
+mil.ar
+musica.ar
+mutual.ar
+net.ar
+org.ar
+senasa.ar
+tur.ar
+
+// arpa : https://en.wikipedia.org/wiki/.arpa
+// Confirmed by registry <iana-questions@icann.org> 2008-06-18
+arpa
+e164.arpa
+in-addr.arpa
+ip6.arpa
+iris.arpa
+uri.arpa
+urn.arpa
+
+// as : https://en.wikipedia.org/wiki/.as
+as
+gov.as
+
+// asia : https://en.wikipedia.org/wiki/.asia
+asia
+
+// at : https://en.wikipedia.org/wiki/.at
+// Confirmed by registry <it@nic.at> 2008-06-17
+at
+ac.at
+co.at
+gv.at
+or.at
+sth.ac.at
+
+// au : https://en.wikipedia.org/wiki/.au
+// http://www.auda.org.au/
+au
+// 2LDs
+com.au
+net.au
+org.au
+edu.au
+gov.au
+asn.au
+id.au
+// Historic 2LDs (closed to new registration, but sites still exist)
+info.au
+conf.au
+oz.au
+// CGDNs - http://www.cgdn.org.au/
+act.au
+nsw.au
+nt.au
+qld.au
+sa.au
+tas.au
+vic.au
+wa.au
+// 3LDs
+act.edu.au
+catholic.edu.au
+// eq.edu.au - Removed at the request of the Queensland Department of Education
+nsw.edu.au
+nt.edu.au
+qld.edu.au
+sa.edu.au
+tas.edu.au
+vic.edu.au
+wa.edu.au
+// act.gov.au Bug 984824 - Removed at request of Greg Tankard
+// nsw.gov.au Bug 547985 - Removed at request of <Shae.Donelan@services.nsw.gov.au>
+// nt.gov.au Bug 940478 - Removed at request of Greg Connors <Greg.Connors@nt.gov.au>
+qld.gov.au
+sa.gov.au
+tas.gov.au
+vic.gov.au
+wa.gov.au
+// 4LDs
+// education.tas.edu.au - Removed at the request of the Department of Education Tasmania
+schools.nsw.edu.au
+
+// aw : https://en.wikipedia.org/wiki/.aw
+aw
+com.aw
+
+// ax : https://en.wikipedia.org/wiki/.ax
+ax
+
+// az : https://en.wikipedia.org/wiki/.az
+az
+com.az
+net.az
+int.az
+gov.az
+org.az
+edu.az
+info.az
+pp.az
+mil.az
+name.az
+pro.az
+biz.az
+
+// ba : http://nic.ba/users_data/files/pravilnik_o_registraciji.pdf
+ba
+com.ba
+edu.ba
+gov.ba
+mil.ba
+net.ba
+org.ba
+
+// bb : https://en.wikipedia.org/wiki/.bb
+bb
+biz.bb
+co.bb
+com.bb
+edu.bb
+gov.bb
+info.bb
+net.bb
+org.bb
+store.bb
+tv.bb
+
+// bd : https://en.wikipedia.org/wiki/.bd
+*.bd
+
+// be : https://en.wikipedia.org/wiki/.be
+// Confirmed by registry <tech@dns.be> 2008-06-08
+be
+ac.be
+
+// bf : https://en.wikipedia.org/wiki/.bf
+bf
+gov.bf
+
+// bg : https://en.wikipedia.org/wiki/.bg
+// https://www.register.bg/user/static/rules/en/index.html
+bg
+a.bg
+b.bg
+c.bg
+d.bg
+e.bg
+f.bg
+g.bg
+h.bg
+i.bg
+j.bg
+k.bg
+l.bg
+m.bg
+n.bg
+o.bg
+p.bg
+q.bg
+r.bg
+s.bg
+t.bg
+u.bg
+v.bg
+w.bg
+x.bg
+y.bg
+z.bg
+0.bg
+1.bg
+2.bg
+3.bg
+4.bg
+5.bg
+6.bg
+7.bg
+8.bg
+9.bg
+
+// bh : https://en.wikipedia.org/wiki/.bh
+bh
+com.bh
+edu.bh
+net.bh
+org.bh
+gov.bh
+
+// bi : https://en.wikipedia.org/wiki/.bi
+// http://whois.nic.bi/
+bi
+co.bi
+com.bi
+edu.bi
+or.bi
+org.bi
+
+// biz : https://en.wikipedia.org/wiki/.biz
+biz
+
+// bj : https://nic.bj/bj-suffixes.txt
+// submitted by registry <contact@nic.bj>
+bj
+africa.bj
+agro.bj
+architectes.bj
+assur.bj
+avocats.bj
+co.bj
+com.bj
+eco.bj
+econo.bj
+edu.bj
+info.bj
+loisirs.bj
+money.bj
+net.bj
+org.bj
+ote.bj
+resto.bj
+restaurant.bj
+tourism.bj
+univ.bj
+
+// bm : http://www.bermudanic.bm/dnr-text.txt
+bm
+com.bm
+edu.bm
+gov.bm
+net.bm
+org.bm
+
+// bn : http://www.bnnic.bn/faqs
+bn
+com.bn
+edu.bn
+gov.bn
+net.bn
+org.bn
+
+// bo : https://nic.bo/delegacion2015.php#h-1.10
+bo
+com.bo
+edu.bo
+gob.bo
+int.bo
+org.bo
+net.bo
+mil.bo
+tv.bo
+web.bo
+// Social Domains
+academia.bo
+agro.bo
+arte.bo
+blog.bo
+bolivia.bo
+ciencia.bo
+cooperativa.bo
+democracia.bo
+deporte.bo
+ecologia.bo
+economia.bo
+empresa.bo
+indigena.bo
+industria.bo
+info.bo
+medicina.bo
+movimiento.bo
+musica.bo
+natural.bo
+nombre.bo
+noticias.bo
+patria.bo
+politica.bo
+profesional.bo
+plurinacional.bo
+pueblo.bo
+revista.bo
+salud.bo
+tecnologia.bo
+tksat.bo
+transporte.bo
+wiki.bo
+
+// br : http://registro.br/dominio/categoria.html
+// Submitted by registry <fneves@registro.br>
+br
+9guacu.br
+abc.br
+adm.br
+adv.br
+agr.br
+aju.br
+am.br
+anani.br
+aparecida.br
+app.br
+arq.br
+art.br
+ato.br
+b.br
+barueri.br
+belem.br
+bhz.br
+bib.br
+bio.br
+blog.br
+bmd.br
+boavista.br
+bsb.br
+campinagrande.br
+campinas.br
+caxias.br
+cim.br
+cng.br
+cnt.br
+com.br
+contagem.br
+coop.br
+coz.br
+cri.br
+cuiaba.br
+curitiba.br
+def.br
+des.br
+det.br
+dev.br
+ecn.br
+eco.br
+edu.br
+emp.br
+enf.br
+eng.br
+esp.br
+etc.br
+eti.br
+far.br
+feira.br
+flog.br
+floripa.br
+fm.br
+fnd.br
+fortal.br
+fot.br
+foz.br
+fst.br
+g12.br
+geo.br
+ggf.br
+goiania.br
+gov.br
+// gov.br 26 states + df https://en.wikipedia.org/wiki/States_of_Brazil
+ac.gov.br
+al.gov.br
+am.gov.br
+ap.gov.br
+ba.gov.br
+ce.gov.br
+df.gov.br
+es.gov.br
+go.gov.br
+ma.gov.br
+mg.gov.br
+ms.gov.br
+mt.gov.br
+pa.gov.br
+pb.gov.br
+pe.gov.br
+pi.gov.br
+pr.gov.br
+rj.gov.br
+rn.gov.br
+ro.gov.br
+rr.gov.br
+rs.gov.br
+sc.gov.br
+se.gov.br
+sp.gov.br
+to.gov.br
+gru.br
+imb.br
+ind.br
+inf.br
+jab.br
+jampa.br
+jdf.br
+joinville.br
+jor.br
+jus.br
+leg.br
+lel.br
+log.br
+londrina.br
+macapa.br
+maceio.br
+manaus.br
+maringa.br
+mat.br
+med.br
+mil.br
+morena.br
+mp.br
+mus.br
+natal.br
+net.br
+niteroi.br
+*.nom.br
+not.br
+ntr.br
+odo.br
+ong.br
+org.br
+osasco.br
+palmas.br
+poa.br
+ppg.br
+pro.br
+psc.br
+psi.br
+pvh.br
+qsl.br
+radio.br
+rec.br
+recife.br
+rep.br
+ribeirao.br
+rio.br
+riobranco.br
+riopreto.br
+salvador.br
+sampa.br
+santamaria.br
+santoandre.br
+saobernardo.br
+saogonca.br
+seg.br
+sjc.br
+slg.br
+slz.br
+sorocaba.br
+srv.br
+taxi.br
+tc.br
+tec.br
+teo.br
+the.br
+tmp.br
+trd.br
+tur.br
+tv.br
+udi.br
+vet.br
+vix.br
+vlog.br
+wiki.br
+zlg.br
+
+// bs : http://www.nic.bs/rules.html
+bs
+com.bs
+net.bs
+org.bs
+edu.bs
+gov.bs
+
+// bt : https://en.wikipedia.org/wiki/.bt
+bt
+com.bt
+edu.bt
+gov.bt
+net.bt
+org.bt
+
+// bv : No registrations at this time.
+// Submitted by registry <jarle@uninett.no>
+bv
+
+// bw : https://en.wikipedia.org/wiki/.bw
+// http://www.gobin.info/domainname/bw.doc
+// list of other 2nd level tlds ?
+bw
+co.bw
+org.bw
+
+// by : https://en.wikipedia.org/wiki/.by
+// http://tld.by/rules_2006_en.html
+// list of other 2nd level tlds ?
+by
+gov.by
+mil.by
+// Official information does not indicate that com.by is a reserved
+// second-level domain, but it's being used as one (see www.google.com.by and
+// www.yahoo.com.by, for example), so we list it here for safety's sake.
+com.by
+
+// http://hoster.by/
+of.by
+
+// bz : https://en.wikipedia.org/wiki/.bz
+// http://www.belizenic.bz/
+bz
+com.bz
+net.bz
+org.bz
+edu.bz
+gov.bz
+
+// ca : https://en.wikipedia.org/wiki/.ca
+ca
+// ca geographical names
+ab.ca
+bc.ca
+mb.ca
+nb.ca
+nf.ca
+nl.ca
+ns.ca
+nt.ca
+nu.ca
+on.ca
+pe.ca
+qc.ca
+sk.ca
+yk.ca
+// gc.ca: https://en.wikipedia.org/wiki/.gc.ca
+// see also: http://registry.gc.ca/en/SubdomainFAQ
+gc.ca
+
+// cat : https://en.wikipedia.org/wiki/.cat
+cat
+
+// cc : https://en.wikipedia.org/wiki/.cc
+cc
+
+// cd : https://en.wikipedia.org/wiki/.cd
+// see also: https://www.nic.cd/domain/insertDomain_2.jsp?act=1
+cd
+gov.cd
+
+// cf : https://en.wikipedia.org/wiki/.cf
+cf
+
+// cg : https://en.wikipedia.org/wiki/.cg
+cg
+
+// ch : https://en.wikipedia.org/wiki/.ch
+ch
+
+// ci : https://en.wikipedia.org/wiki/.ci
+// http://www.nic.ci/index.php?page=charte
+ci
+org.ci
+or.ci
+com.ci
+co.ci
+edu.ci
+ed.ci
+ac.ci
+net.ci
+go.ci
+asso.ci
+aéroport.ci
+int.ci
+presse.ci
+md.ci
+gouv.ci
+
+// ck : https://en.wikipedia.org/wiki/.ck
+*.ck
+!www.ck
+
+// cl : https://www.nic.cl
+// Confirmed by .CL registry <hsalgado@nic.cl>
+cl
+co.cl
+gob.cl
+gov.cl
+mil.cl
+
+// cm : https://en.wikipedia.org/wiki/.cm plus bug 981927
+cm
+co.cm
+com.cm
+gov.cm
+net.cm
+
+// cn : https://en.wikipedia.org/wiki/.cn
+// Submitted by registry <tanyaling@cnnic.cn>
+cn
+ac.cn
+com.cn
+edu.cn
+gov.cn
+net.cn
+org.cn
+mil.cn
+公司.cn
+网络.cn
+網絡.cn
+// cn geographic names
+ah.cn
+bj.cn
+cq.cn
+fj.cn
+gd.cn
+gs.cn
+gz.cn
+gx.cn
+ha.cn
+hb.cn
+he.cn
+hi.cn
+hl.cn
+hn.cn
+jl.cn
+js.cn
+jx.cn
+ln.cn
+nm.cn
+nx.cn
+qh.cn
+sc.cn
+sd.cn
+sh.cn
+sn.cn
+sx.cn
+tj.cn
+xj.cn
+xz.cn
+yn.cn
+zj.cn
+hk.cn
+mo.cn
+tw.cn
+
+// co : https://en.wikipedia.org/wiki/.co
+// Submitted by registry <tecnico@uniandes.edu.co>
+co
+arts.co
+com.co
+edu.co
+firm.co
+gov.co
+info.co
+int.co
+mil.co
+net.co
+nom.co
+org.co
+rec.co
+web.co
+
+// com : https://en.wikipedia.org/wiki/.com
+com
+
+// coop : https://en.wikipedia.org/wiki/.coop
+coop
+
+// cr : http://www.nic.cr/niccr_publico/showRegistroDominiosScreen.do
+cr
+ac.cr
+co.cr
+ed.cr
+fi.cr
+go.cr
+or.cr
+sa.cr
+
+// cu : https://en.wikipedia.org/wiki/.cu
+cu
+com.cu
+edu.cu
+org.cu
+net.cu
+gov.cu
+inf.cu
+
+// cv : https://en.wikipedia.org/wiki/.cv
+// cv : http://www.dns.cv/tldcv_portal/do?com=DS;5446457100;111;+PAGE(4000018)+K-CAT-CODIGO(RDOM)+RCNT(100); <- registration rules
+cv
+com.cv
+edu.cv
+int.cv
+nome.cv
+org.cv
+
+// cw : http://www.una.cw/cw_registry/
+// Confirmed by registry <registry@una.net> 2013-03-26
+cw
+com.cw
+edu.cw
+net.cw
+org.cw
+
+// cx : https://en.wikipedia.org/wiki/.cx
+// list of other 2nd level tlds ?
+cx
+gov.cx
+
+// cy : http://www.nic.cy/
+// Submitted by registry Panayiotou Fotia <cydns@ucy.ac.cy>
+// namespace policies URL https://www.nic.cy/portal//sites/default/files/symfonia_gia_eggrafi.pdf
+cy
+ac.cy
+biz.cy
+com.cy
+ekloges.cy
+gov.cy
+ltd.cy
+mil.cy
+net.cy
+org.cy
+press.cy
+pro.cy
+tm.cy
+
+// cz : https://en.wikipedia.org/wiki/.cz
+cz
+
+// de : https://en.wikipedia.org/wiki/.de
+// Confirmed by registry <ops@denic.de> (with technical
+// reservations) 2008-07-01
+de
+
+// dj : https://en.wikipedia.org/wiki/.dj
+dj
+
+// dk : https://en.wikipedia.org/wiki/.dk
+// Confirmed by registry <robert@dk-hostmaster.dk> 2008-06-17
+dk
+
+// dm : https://en.wikipedia.org/wiki/.dm
+dm
+com.dm
+net.dm
+org.dm
+edu.dm
+gov.dm
+
+// do : https://en.wikipedia.org/wiki/.do
+do
+art.do
+com.do
+edu.do
+gob.do
+gov.do
+mil.do
+net.do
+org.do
+sld.do
+web.do
+
+// dz : http://www.nic.dz/images/pdf_nic/charte.pdf
+dz
+art.dz
+asso.dz
+com.dz
+edu.dz
+gov.dz
+org.dz
+net.dz
+pol.dz
+soc.dz
+tm.dz
+
+// ec : http://www.nic.ec/reg/paso1.asp
+// Submitted by registry <vabboud@nic.ec>
+ec
+com.ec
+info.ec
+net.ec
+fin.ec
+k12.ec
+med.ec
+pro.ec
+org.ec
+edu.ec
+gov.ec
+gob.ec
+mil.ec
+
+// edu : https://en.wikipedia.org/wiki/.edu
+edu
+
+// ee : http://www.eenet.ee/EENet/dom_reeglid.html#lisa_B
+ee
+edu.ee
+gov.ee
+riik.ee
+lib.ee
+med.ee
+com.ee
+pri.ee
+aip.ee
+org.ee
+fie.ee
+
+// eg : https://en.wikipedia.org/wiki/.eg
+eg
+com.eg
+edu.eg
+eun.eg
+gov.eg
+mil.eg
+name.eg
+net.eg
+org.eg
+sci.eg
+
+// er : https://en.wikipedia.org/wiki/.er
+*.er
+
+// es : https://www.nic.es/site_ingles/ingles/dominios/index.html
+es
+com.es
+nom.es
+org.es
+gob.es
+edu.es
+
+// et : https://en.wikipedia.org/wiki/.et
+et
+com.et
+gov.et
+org.et
+edu.et
+biz.et
+name.et
+info.et
+net.et
+
+// eu : https://en.wikipedia.org/wiki/.eu
+eu
+
+// fi : https://en.wikipedia.org/wiki/.fi
+fi
+// aland.fi : https://en.wikipedia.org/wiki/.ax
+// This domain is being phased out in favor of .ax. As there are still many
+// domains under aland.fi, we still keep it on the list until aland.fi is
+// completely removed.
+// TODO: Check for updates (expected to be phased out around Q1/2009)
+aland.fi
+
+// fj : http://domains.fj/
+// Submitted by registry <garth.miller@cocca.org.nz> 2020-02-11
+fj
+ac.fj
+biz.fj
+com.fj
+gov.fj
+info.fj
+mil.fj
+name.fj
+net.fj
+org.fj
+pro.fj
+
+// fk : https://en.wikipedia.org/wiki/.fk
+*.fk
+
+// fm : https://en.wikipedia.org/wiki/.fm
+com.fm
+edu.fm
+net.fm
+org.fm
+fm
+
+// fo : https://en.wikipedia.org/wiki/.fo
+fo
+
+// fr : https://www.afnic.fr/ https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf
+fr
+asso.fr
+com.fr
+gouv.fr
+nom.fr
+prd.fr
+tm.fr
+// Other SLDs now selfmanaged out of AFNIC range. Former "domaines sectoriels", still registration suffixes
+avoues.fr
+cci.fr
+greta.fr
+huissier-justice.fr
+
+// ga : https://en.wikipedia.org/wiki/.ga
+ga
+
+// gb : This registry is effectively dormant
+// Submitted by registry <Damien.Shaw@ja.net>
+gb
+
+// gd : https://en.wikipedia.org/wiki/.gd
+edu.gd
+gov.gd
+gd
+
+// ge : http://www.nic.net.ge/policy_en.pdf
+ge
+com.ge
+edu.ge
+gov.ge
+org.ge
+mil.ge
+net.ge
+pvt.ge
+
+// gf : https://en.wikipedia.org/wiki/.gf
+gf
+
+// gg : http://www.channelisles.net/register-domains/
+// Confirmed by registry <nigel@channelisles.net> 2013-11-28
+gg
+co.gg
+net.gg
+org.gg
+
+// gh : https://en.wikipedia.org/wiki/.gh
+// see also: http://www.nic.gh/reg_now.php
+// Although domains directly at second level are not possible at the moment,
+// they have been possible for some time and may come back.
+gh
+com.gh
+edu.gh
+gov.gh
+org.gh
+mil.gh
+
+// gi : http://www.nic.gi/rules.html
+gi
+com.gi
+ltd.gi
+gov.gi
+mod.gi
+edu.gi
+org.gi
+
+// gl : https://en.wikipedia.org/wiki/.gl
+// http://nic.gl
+gl
+co.gl
+com.gl
+edu.gl
+net.gl
+org.gl
+
+// gm : http://www.nic.gm/htmlpages%5Cgm-policy.htm
+gm
+
+// gn : http://psg.com/dns/gn/gn.txt
+// Submitted by registry <randy@psg.com>
+gn
+ac.gn
+com.gn
+edu.gn
+gov.gn
+org.gn
+net.gn
+
+// gov : https://en.wikipedia.org/wiki/.gov
+gov
+
+// gp : http://www.nic.gp/index.php?lang=en
+gp
+com.gp
+net.gp
+mobi.gp
+edu.gp
+org.gp
+asso.gp
+
+// gq : https://en.wikipedia.org/wiki/.gq
+gq
+
+// gr : https://grweb.ics.forth.gr/english/1617-B-2005.html
+// Submitted by registry <segred@ics.forth.gr>
+gr
+com.gr
+edu.gr
+net.gr
+org.gr
+gov.gr
+
+// gs : https://en.wikipedia.org/wiki/.gs
+gs
+
+// gt : https://www.gt/sitio/registration_policy.php?lang=en
+gt
+com.gt
+edu.gt
+gob.gt
+ind.gt
+mil.gt
+net.gt
+org.gt
+
+// gu : http://gadao.gov.gu/register.html
+// University of Guam : https://www.uog.edu
+// Submitted by uognoc@triton.uog.edu
+gu
+com.gu
+edu.gu
+gov.gu
+guam.gu
+info.gu
+net.gu
+org.gu
+web.gu
+
+// gw : https://en.wikipedia.org/wiki/.gw
+// gw : https://nic.gw/regras/
+gw
+
+// gy : https://en.wikipedia.org/wiki/.gy
+// http://registry.gy/
+gy
+co.gy
+com.gy
+edu.gy
+gov.gy
+net.gy
+org.gy
+
+// hk : https://www.hkirc.hk
+// Submitted by registry <hk.tech@hkirc.hk>
+hk
+com.hk
+edu.hk
+gov.hk
+idv.hk
+net.hk
+org.hk
+公司.hk
+教育.hk
+敎育.hk
+政府.hk
+個人.hk
+个人.hk
+箇人.hk
+網络.hk
+网络.hk
+组織.hk
+網絡.hk
+网絡.hk
+组织.hk
+組織.hk
+組织.hk
+
+// hm : https://en.wikipedia.org/wiki/.hm
+hm
+
+// hn : http://www.nic.hn/politicas/ps02,,05.html
+hn
+com.hn
+edu.hn
+org.hn
+net.hn
+mil.hn
+gob.hn
+
+// hr : http://www.dns.hr/documents/pdf/HRTLD-regulations.pdf
+hr
+iz.hr
+from.hr
+name.hr
+com.hr
+
+// ht : http://www.nic.ht/info/charte.cfm
+ht
+com.ht
+shop.ht
+firm.ht
+info.ht
+adult.ht
+net.ht
+pro.ht
+org.ht
+med.ht
+art.ht
+coop.ht
+pol.ht
+asso.ht
+edu.ht
+rel.ht
+gouv.ht
+perso.ht
+
+// hu : http://www.domain.hu/domain/English/sld.html
+// Confirmed by registry <pasztor@iszt.hu> 2008-06-12
+hu
+co.hu
+info.hu
+org.hu
+priv.hu
+sport.hu
+tm.hu
+2000.hu
+agrar.hu
+bolt.hu
+casino.hu
+city.hu
+erotica.hu
+erotika.hu
+film.hu
+forum.hu
+games.hu
+hotel.hu
+ingatlan.hu
+jogasz.hu
+konyvelo.hu
+lakas.hu
+media.hu
+news.hu
+reklam.hu
+sex.hu
+shop.hu
+suli.hu
+szex.hu
+tozsde.hu
+utazas.hu
+video.hu
+
+// id : https://pandi.id/en/domain/registration-requirements/
+id
+ac.id
+biz.id
+co.id
+desa.id
+go.id
+mil.id
+my.id
+net.id
+or.id
+ponpes.id
+sch.id
+web.id
+
+// ie : https://en.wikipedia.org/wiki/.ie
+ie
+gov.ie
+
+// il : http://www.isoc.org.il/domains/
+// see also: https://en.isoc.org.il/il-cctld/registration-rules
+// ISOC-IL (operated by .il Registry)
+il
+ac.il
+co.il
+gov.il
+idf.il
+k12.il
+muni.il
+net.il
+org.il
+// xn--4dbrk0ce ("Israel", Hebrew) : IL
+ישראל
+// xn--4dbgdty6c.xn--4dbrk0ce.
+אקדמיה.ישראל
+// xn--5dbhl8d.xn--4dbrk0ce.
+ישוב.ישראל
+// xn--8dbq2a.xn--4dbrk0ce.
+צהל.ישראל
+// xn--hebda8b.xn--4dbrk0ce.
+ממשל.ישראל
+
+// im : https://www.nic.im/
+// Submitted by registry <info@nic.im>
+im
+ac.im
+co.im
+com.im
+ltd.co.im
+net.im
+org.im
+plc.co.im
+tt.im
+tv.im
+
+// in : https://en.wikipedia.org/wiki/.in
+// see also: https://registry.in/policies
+// Please note, that nic.in is not an official eTLD, but used by most
+// government institutions.
+in
+5g.in
+6g.in
+ac.in
+ai.in
+am.in
+bihar.in
+biz.in
+business.in
+ca.in
+cn.in
+co.in
+com.in
+coop.in
+cs.in
+delhi.in
+dr.in
+edu.in
+er.in
+firm.in
+gen.in
+gov.in
+gujarat.in
+ind.in
+info.in
+int.in
+internet.in
+io.in
+me.in
+mil.in
+net.in
+nic.in
+org.in
+pg.in
+post.in
+pro.in
+res.in
+travel.in
+tv.in
+uk.in
+up.in
+us.in
+
+// info : https://en.wikipedia.org/wiki/.info
+info
+
+// int : https://en.wikipedia.org/wiki/.int
+// Confirmed by registry <iana-questions@icann.org> 2008-06-18
+int
+eu.int
+
+// io : http://www.nic.io/rules.htm
+// list of other 2nd level tlds ?
+io
+com.io
+
+// iq : http://www.cmc.iq/english/iq/iqregister1.htm
+iq
+gov.iq
+edu.iq
+mil.iq
+com.iq
+org.iq
+net.iq
+
+// ir : http://www.nic.ir/Terms_and_Conditions_ir,_Appendix_1_Domain_Rules
+// Also see http://www.nic.ir/Internationalized_Domain_Names
+// Two <iran>.ir entries added at request of <tech-team@nic.ir>, 2010-04-16
+ir
+ac.ir
+co.ir
+gov.ir
+id.ir
+net.ir
+org.ir
+sch.ir
+// xn--mgba3a4f16a.ir (<iran>.ir, Persian YEH)
+ایران.ir
+// xn--mgba3a4fra.ir (<iran>.ir, Arabic YEH)
+ايران.ir
+
+// is : http://www.isnic.is/domain/rules.php
+// Confirmed by registry <marius@isgate.is> 2008-12-06
+is
+net.is
+com.is
+edu.is
+gov.is
+org.is
+int.is
+
+// it : https://en.wikipedia.org/wiki/.it
+it
+gov.it
+edu.it
+// Reserved geo-names (regions and provinces):
+// https://www.nic.it/sites/default/files/archivio/docs/Regulation_assignation_v7.1.pdf
+// Regions
+abr.it
+abruzzo.it
+aosta-valley.it
+aostavalley.it
+bas.it
+basilicata.it
+cal.it
+calabria.it
+cam.it
+campania.it
+emilia-romagna.it
+emiliaromagna.it
+emr.it
+friuli-v-giulia.it
+friuli-ve-giulia.it
+friuli-vegiulia.it
+friuli-venezia-giulia.it
+friuli-veneziagiulia.it
+friuli-vgiulia.it
+friuliv-giulia.it
+friulive-giulia.it
+friulivegiulia.it
+friulivenezia-giulia.it
+friuliveneziagiulia.it
+friulivgiulia.it
+fvg.it
+laz.it
+lazio.it
+lig.it
+liguria.it
+lom.it
+lombardia.it
+lombardy.it
+lucania.it
+mar.it
+marche.it
+mol.it
+molise.it
+piedmont.it
+piemonte.it
+pmn.it
+pug.it
+puglia.it
+sar.it
+sardegna.it
+sardinia.it
+sic.it
+sicilia.it
+sicily.it
+taa.it
+tos.it
+toscana.it
+trentin-sud-tirol.it
+trentin-süd-tirol.it
+trentin-sudtirol.it
+trentin-südtirol.it
+trentin-sued-tirol.it
+trentin-suedtirol.it
+trentino-a-adige.it
+trentino-aadige.it
+trentino-alto-adige.it
+trentino-altoadige.it
+trentino-s-tirol.it
+trentino-stirol.it
+trentino-sud-tirol.it
+trentino-süd-tirol.it
+trentino-sudtirol.it
+trentino-südtirol.it
+trentino-sued-tirol.it
+trentino-suedtirol.it
+trentino.it
+trentinoa-adige.it
+trentinoaadige.it
+trentinoalto-adige.it
+trentinoaltoadige.it
+trentinos-tirol.it
+trentinostirol.it
+trentinosud-tirol.it
+trentinosüd-tirol.it
+trentinosudtirol.it
+trentinosüdtirol.it
+trentinosued-tirol.it
+trentinosuedtirol.it
+trentinsud-tirol.it
+trentinsüd-tirol.it
+trentinsudtirol.it
+trentinsüdtirol.it
+trentinsued-tirol.it
+trentinsuedtirol.it
+tuscany.it
+umb.it
+umbria.it
+val-d-aosta.it
+val-daosta.it
+vald-aosta.it
+valdaosta.it
+valle-aosta.it
+valle-d-aosta.it
+valle-daosta.it
+valleaosta.it
+valled-aosta.it
+valledaosta.it
+vallee-aoste.it
+vallée-aoste.it
+vallee-d-aoste.it
+vallée-d-aoste.it
+valleeaoste.it
+valléeaoste.it
+valleedaoste.it
+valléedaoste.it
+vao.it
+vda.it
+ven.it
+veneto.it
+// Provinces
+ag.it
+agrigento.it
+al.it
+alessandria.it
+alto-adige.it
+altoadige.it
+an.it
+ancona.it
+andria-barletta-trani.it
+andria-trani-barletta.it
+andriabarlettatrani.it
+andriatranibarletta.it
+ao.it
+aosta.it
+aoste.it
+ap.it
+aq.it
+aquila.it
+ar.it
+arezzo.it
+ascoli-piceno.it
+ascolipiceno.it
+asti.it
+at.it
+av.it
+avellino.it
+ba.it
+balsan-sudtirol.it
+balsan-südtirol.it
+balsan-suedtirol.it
+balsan.it
+bari.it
+barletta-trani-andria.it
+barlettatraniandria.it
+belluno.it
+benevento.it
+bergamo.it
+bg.it
+bi.it
+biella.it
+bl.it
+bn.it
+bo.it
+bologna.it
+bolzano-altoadige.it
+bolzano.it
+bozen-sudtirol.it
+bozen-südtirol.it
+bozen-suedtirol.it
+bozen.it
+br.it
+brescia.it
+brindisi.it
+bs.it
+bt.it
+bulsan-sudtirol.it
+bulsan-südtirol.it
+bulsan-suedtirol.it
+bulsan.it
+bz.it
+ca.it
+cagliari.it
+caltanissetta.it
+campidano-medio.it
+campidanomedio.it
+campobasso.it
+carbonia-iglesias.it
+carboniaiglesias.it
+carrara-massa.it
+carraramassa.it
+caserta.it
+catania.it
+catanzaro.it
+cb.it
+ce.it
+cesena-forli.it
+cesena-forlì.it
+cesenaforli.it
+cesenaforlì.it
+ch.it
+chieti.it
+ci.it
+cl.it
+cn.it
+co.it
+como.it
+cosenza.it
+cr.it
+cremona.it
+crotone.it
+cs.it
+ct.it
+cuneo.it
+cz.it
+dell-ogliastra.it
+dellogliastra.it
+en.it
+enna.it
+fc.it
+fe.it
+fermo.it
+ferrara.it
+fg.it
+fi.it
+firenze.it
+florence.it
+fm.it
+foggia.it
+forli-cesena.it
+forlì-cesena.it
+forlicesena.it
+forlìcesena.it
+fr.it
+frosinone.it
+ge.it
+genoa.it
+genova.it
+go.it
+gorizia.it
+gr.it
+grosseto.it
+iglesias-carbonia.it
+iglesiascarbonia.it
+im.it
+imperia.it
+is.it
+isernia.it
+kr.it
+la-spezia.it
+laquila.it
+laspezia.it
+latina.it
+lc.it
+le.it
+lecce.it
+lecco.it
+li.it
+livorno.it
+lo.it
+lodi.it
+lt.it
+lu.it
+lucca.it
+macerata.it
+mantova.it
+massa-carrara.it
+massacarrara.it
+matera.it
+mb.it
+mc.it
+me.it
+medio-campidano.it
+mediocampidano.it
+messina.it
+mi.it
+milan.it
+milano.it
+mn.it
+mo.it
+modena.it
+monza-brianza.it
+monza-e-della-brianza.it
+monza.it
+monzabrianza.it
+monzaebrianza.it
+monzaedellabrianza.it
+ms.it
+mt.it
+na.it
+naples.it
+napoli.it
+no.it
+novara.it
+nu.it
+nuoro.it
+og.it
+ogliastra.it
+olbia-tempio.it
+olbiatempio.it
+or.it
+oristano.it
+ot.it
+pa.it
+padova.it
+padua.it
+palermo.it
+parma.it
+pavia.it
+pc.it
+pd.it
+pe.it
+perugia.it
+pesaro-urbino.it
+pesarourbino.it
+pescara.it
+pg.it
+pi.it
+piacenza.it
+pisa.it
+pistoia.it
+pn.it
+po.it
+pordenone.it
+potenza.it
+pr.it
+prato.it
+pt.it
+pu.it
+pv.it
+pz.it
+ra.it
+ragusa.it
+ravenna.it
+rc.it
+re.it
+reggio-calabria.it
+reggio-emilia.it
+reggiocalabria.it
+reggioemilia.it
+rg.it
+ri.it
+rieti.it
+rimini.it
+rm.it
+rn.it
+ro.it
+roma.it
+rome.it
+rovigo.it
+sa.it
+salerno.it
+sassari.it
+savona.it
+si.it
+siena.it
+siracusa.it
+so.it
+sondrio.it
+sp.it
+sr.it
+ss.it
+suedtirol.it
+südtirol.it
+sv.it
+ta.it
+taranto.it
+te.it
+tempio-olbia.it
+tempioolbia.it
+teramo.it
+terni.it
+tn.it
+to.it
+torino.it
+tp.it
+tr.it
+trani-andria-barletta.it
+trani-barletta-andria.it
+traniandriabarletta.it
+tranibarlettaandria.it
+trapani.it
+trento.it
+treviso.it
+trieste.it
+ts.it
+turin.it
+tv.it
+ud.it
+udine.it
+urbino-pesaro.it
+urbinopesaro.it
+va.it
+varese.it
+vb.it
+vc.it
+ve.it
+venezia.it
+venice.it
+verbania.it
+vercelli.it
+verona.it
+vi.it
+vibo-valentia.it
+vibovalentia.it
+vicenza.it
+viterbo.it
+vr.it
+vs.it
+vt.it
+vv.it
+
+// je : http://www.channelisles.net/register-domains/
+// Confirmed by registry <nigel@channelisles.net> 2013-11-28
+je
+co.je
+net.je
+org.je
+
+// jm : http://www.com.jm/register.html
+*.jm
+
+// jo : http://www.dns.jo/Registration_policy.aspx
+jo
+com.jo
+org.jo
+net.jo
+edu.jo
+sch.jo
+gov.jo
+mil.jo
+name.jo
+
+// jobs : https://en.wikipedia.org/wiki/.jobs
+jobs
+
+// jp : https://en.wikipedia.org/wiki/.jp
+// http://jprs.co.jp/en/jpdomain.html
+// Submitted by registry <info@jprs.jp>
+jp
+// jp organizational type names
+ac.jp
+ad.jp
+co.jp
+ed.jp
+go.jp
+gr.jp
+lg.jp
+ne.jp
+or.jp
+// jp prefecture type names
+aichi.jp
+akita.jp
+aomori.jp
+chiba.jp
+ehime.jp
+fukui.jp
+fukuoka.jp
+fukushima.jp
+gifu.jp
+gunma.jp
+hiroshima.jp
+hokkaido.jp
+hyogo.jp
+ibaraki.jp
+ishikawa.jp
+iwate.jp
+kagawa.jp
+kagoshima.jp
+kanagawa.jp
+kochi.jp
+kumamoto.jp
+kyoto.jp
+mie.jp
+miyagi.jp
+miyazaki.jp
+nagano.jp
+nagasaki.jp
+nara.jp
+niigata.jp
+oita.jp
+okayama.jp
+okinawa.jp
+osaka.jp
+saga.jp
+saitama.jp
+shiga.jp
+shimane.jp
+shizuoka.jp
+tochigi.jp
+tokushima.jp
+tokyo.jp
+tottori.jp
+toyama.jp
+wakayama.jp
+yamagata.jp
+yamaguchi.jp
+yamanashi.jp
+栃木.jp
+愛知.jp
+愛媛.jp
+兵庫.jp
+熊本.jp
+茨城.jp
+北海道.jp
+千葉.jp
+和歌山.jp
+長崎.jp
+長野.jp
+新潟.jp
+青森.jp
+静岡.jp
+東京.jp
+石川.jp
+埼玉.jp
+三重.jp
+京都.jp
+佐賀.jp
+大分.jp
+大阪.jp
+奈良.jp
+宮城.jp
+宮崎.jp
+富山.jp
+山口.jp
+山形.jp
+山梨.jp
+岩手.jp
+岐阜.jp
+岡山.jp
+島根.jp
+広島.jp
+徳島.jp
+沖縄.jp
+滋賀.jp
+神奈川.jp
+福井.jp
+福岡.jp
+福島.jp
+秋田.jp
+群馬.jp
+香川.jp
+高知.jp
+鳥取.jp
+鹿児島.jp
+// jp geographic type names
+// http://jprs.jp/doc/rule/saisoku-1.html
+*.kawasaki.jp
+*.kitakyushu.jp
+*.kobe.jp
+*.nagoya.jp
+*.sapporo.jp
+*.sendai.jp
+*.yokohama.jp
+!city.kawasaki.jp
+!city.kitakyushu.jp
+!city.kobe.jp
+!city.nagoya.jp
+!city.sapporo.jp
+!city.sendai.jp
+!city.yokohama.jp
+// 4th level registration
+aisai.aichi.jp
+ama.aichi.jp
+anjo.aichi.jp
+asuke.aichi.jp
+chiryu.aichi.jp
+chita.aichi.jp
+fuso.aichi.jp
+gamagori.aichi.jp
+handa.aichi.jp
+hazu.aichi.jp
+hekinan.aichi.jp
+higashiura.aichi.jp
+ichinomiya.aichi.jp
+inazawa.aichi.jp
+inuyama.aichi.jp
+isshiki.aichi.jp
+iwakura.aichi.jp
+kanie.aichi.jp
+kariya.aichi.jp
+kasugai.aichi.jp
+kira.aichi.jp
+kiyosu.aichi.jp
+komaki.aichi.jp
+konan.aichi.jp
+kota.aichi.jp
+mihama.aichi.jp
+miyoshi.aichi.jp
+nishio.aichi.jp
+nisshin.aichi.jp
+obu.aichi.jp
+oguchi.aichi.jp
+oharu.aichi.jp
+okazaki.aichi.jp
+owariasahi.aichi.jp
+seto.aichi.jp
+shikatsu.aichi.jp
+shinshiro.aichi.jp
+shitara.aichi.jp
+tahara.aichi.jp
+takahama.aichi.jp
+tobishima.aichi.jp
+toei.aichi.jp
+togo.aichi.jp
+tokai.aichi.jp
+tokoname.aichi.jp
+toyoake.aichi.jp
+toyohashi.aichi.jp
+toyokawa.aichi.jp
+toyone.aichi.jp
+toyota.aichi.jp
+tsushima.aichi.jp
+yatomi.aichi.jp
+akita.akita.jp
+daisen.akita.jp
+fujisato.akita.jp
+gojome.akita.jp
+hachirogata.akita.jp
+happou.akita.jp
+higashinaruse.akita.jp
+honjo.akita.jp
+honjyo.akita.jp
+ikawa.akita.jp
+kamikoani.akita.jp
+kamioka.akita.jp
+katagami.akita.jp
+kazuno.akita.jp
+kitaakita.akita.jp
+kosaka.akita.jp
+kyowa.akita.jp
+misato.akita.jp
+mitane.akita.jp
+moriyoshi.akita.jp
+nikaho.akita.jp
+noshiro.akita.jp
+odate.akita.jp
+oga.akita.jp
+ogata.akita.jp
+semboku.akita.jp
+yokote.akita.jp
+yurihonjo.akita.jp
+aomori.aomori.jp
+gonohe.aomori.jp
+hachinohe.aomori.jp
+hashikami.aomori.jp
+hiranai.aomori.jp
+hirosaki.aomori.jp
+itayanagi.aomori.jp
+kuroishi.aomori.jp
+misawa.aomori.jp
+mutsu.aomori.jp
+nakadomari.aomori.jp
+noheji.aomori.jp
+oirase.aomori.jp
+owani.aomori.jp
+rokunohe.aomori.jp
+sannohe.aomori.jp
+shichinohe.aomori.jp
+shingo.aomori.jp
+takko.aomori.jp
+towada.aomori.jp
+tsugaru.aomori.jp
+tsuruta.aomori.jp
+abiko.chiba.jp
+asahi.chiba.jp
+chonan.chiba.jp
+chosei.chiba.jp
+choshi.chiba.jp
+chuo.chiba.jp
+funabashi.chiba.jp
+futtsu.chiba.jp
+hanamigawa.chiba.jp
+ichihara.chiba.jp
+ichikawa.chiba.jp
+ichinomiya.chiba.jp
+inzai.chiba.jp
+isumi.chiba.jp
+kamagaya.chiba.jp
+kamogawa.chiba.jp
+kashiwa.chiba.jp
+katori.chiba.jp
+katsuura.chiba.jp
+kimitsu.chiba.jp
+kisarazu.chiba.jp
+kozaki.chiba.jp
+kujukuri.chiba.jp
+kyonan.chiba.jp
+matsudo.chiba.jp
+midori.chiba.jp
+mihama.chiba.jp
+minamiboso.chiba.jp
+mobara.chiba.jp
+mutsuzawa.chiba.jp
+nagara.chiba.jp
+nagareyama.chiba.jp
+narashino.chiba.jp
+narita.chiba.jp
+noda.chiba.jp
+oamishirasato.chiba.jp
+omigawa.chiba.jp
+onjuku.chiba.jp
+otaki.chiba.jp
+sakae.chiba.jp
+sakura.chiba.jp
+shimofusa.chiba.jp
+shirako.chiba.jp
+shiroi.chiba.jp
+shisui.chiba.jp
+sodegaura.chiba.jp
+sosa.chiba.jp
+tako.chiba.jp
+tateyama.chiba.jp
+togane.chiba.jp
+tohnosho.chiba.jp
+tomisato.chiba.jp
+urayasu.chiba.jp
+yachimata.chiba.jp
+yachiyo.chiba.jp
+yokaichiba.chiba.jp
+yokoshibahikari.chiba.jp
+yotsukaido.chiba.jp
+ainan.ehime.jp
+honai.ehime.jp
+ikata.ehime.jp
+imabari.ehime.jp
+iyo.ehime.jp
+kamijima.ehime.jp
+kihoku.ehime.jp
+kumakogen.ehime.jp
+masaki.ehime.jp
+matsuno.ehime.jp
+matsuyama.ehime.jp
+namikata.ehime.jp
+niihama.ehime.jp
+ozu.ehime.jp
+saijo.ehime.jp
+seiyo.ehime.jp
+shikokuchuo.ehime.jp
+tobe.ehime.jp
+toon.ehime.jp
+uchiko.ehime.jp
+uwajima.ehime.jp
+yawatahama.ehime.jp
+echizen.fukui.jp
+eiheiji.fukui.jp
+fukui.fukui.jp
+ikeda.fukui.jp
+katsuyama.fukui.jp
+mihama.fukui.jp
+minamiechizen.fukui.jp
+obama.fukui.jp
+ohi.fukui.jp
+ono.fukui.jp
+sabae.fukui.jp
+sakai.fukui.jp
+takahama.fukui.jp
+tsuruga.fukui.jp
+wakasa.fukui.jp
+ashiya.fukuoka.jp
+buzen.fukuoka.jp
+chikugo.fukuoka.jp
+chikuho.fukuoka.jp
+chikujo.fukuoka.jp
+chikushino.fukuoka.jp
+chikuzen.fukuoka.jp
+chuo.fukuoka.jp
+dazaifu.fukuoka.jp
+fukuchi.fukuoka.jp
+hakata.fukuoka.jp
+higashi.fukuoka.jp
+hirokawa.fukuoka.jp
+hisayama.fukuoka.jp
+iizuka.fukuoka.jp
+inatsuki.fukuoka.jp
+kaho.fukuoka.jp
+kasuga.fukuoka.jp
+kasuya.fukuoka.jp
+kawara.fukuoka.jp
+keisen.fukuoka.jp
+koga.fukuoka.jp
+kurate.fukuoka.jp
+kurogi.fukuoka.jp
+kurume.fukuoka.jp
+minami.fukuoka.jp
+miyako.fukuoka.jp
+miyama.fukuoka.jp
+miyawaka.fukuoka.jp
+mizumaki.fukuoka.jp
+munakata.fukuoka.jp
+nakagawa.fukuoka.jp
+nakama.fukuoka.jp
+nishi.fukuoka.jp
+nogata.fukuoka.jp
+ogori.fukuoka.jp
+okagaki.fukuoka.jp
+okawa.fukuoka.jp
+oki.fukuoka.jp
+omuta.fukuoka.jp
+onga.fukuoka.jp
+onojo.fukuoka.jp
+oto.fukuoka.jp
+saigawa.fukuoka.jp
+sasaguri.fukuoka.jp
+shingu.fukuoka.jp
+shinyoshitomi.fukuoka.jp
+shonai.fukuoka.jp
+soeda.fukuoka.jp
+sue.fukuoka.jp
+tachiarai.fukuoka.jp
+tagawa.fukuoka.jp
+takata.fukuoka.jp
+toho.fukuoka.jp
+toyotsu.fukuoka.jp
+tsuiki.fukuoka.jp
+ukiha.fukuoka.jp
+umi.fukuoka.jp
+usui.fukuoka.jp
+yamada.fukuoka.jp
+yame.fukuoka.jp
+yanagawa.fukuoka.jp
+yukuhashi.fukuoka.jp
+aizubange.fukushima.jp
+aizumisato.fukushima.jp
+aizuwakamatsu.fukushima.jp
+asakawa.fukushima.jp
+bandai.fukushima.jp
+date.fukushima.jp
+fukushima.fukushima.jp
+furudono.fukushima.jp
+futaba.fukushima.jp
+hanawa.fukushima.jp
+higashi.fukushima.jp
+hirata.fukushima.jp
+hirono.fukushima.jp
+iitate.fukushima.jp
+inawashiro.fukushima.jp
+ishikawa.fukushima.jp
+iwaki.fukushima.jp
+izumizaki.fukushima.jp
+kagamiishi.fukushima.jp
+kaneyama.fukushima.jp
+kawamata.fukushima.jp
+kitakata.fukushima.jp
+kitashiobara.fukushima.jp
+koori.fukushima.jp
+koriyama.fukushima.jp
+kunimi.fukushima.jp
+miharu.fukushima.jp
+mishima.fukushima.jp
+namie.fukushima.jp
+nango.fukushima.jp
+nishiaizu.fukushima.jp
+nishigo.fukushima.jp
+okuma.fukushima.jp
+omotego.fukushima.jp
+ono.fukushima.jp
+otama.fukushima.jp
+samegawa.fukushima.jp
+shimogo.fukushima.jp
+shirakawa.fukushima.jp
+showa.fukushima.jp
+soma.fukushima.jp
+sukagawa.fukushima.jp
+taishin.fukushima.jp
+tamakawa.fukushima.jp
+tanagura.fukushima.jp
+tenei.fukushima.jp
+yabuki.fukushima.jp
+yamato.fukushima.jp
+yamatsuri.fukushima.jp
+yanaizu.fukushima.jp
+yugawa.fukushima.jp
+anpachi.gifu.jp
+ena.gifu.jp
+gifu.gifu.jp
+ginan.gifu.jp
+godo.gifu.jp
+gujo.gifu.jp
+hashima.gifu.jp
+hichiso.gifu.jp
+hida.gifu.jp
+higashishirakawa.gifu.jp
+ibigawa.gifu.jp
+ikeda.gifu.jp
+kakamigahara.gifu.jp
+kani.gifu.jp
+kasahara.gifu.jp
+kasamatsu.gifu.jp
+kawaue.gifu.jp
+kitagata.gifu.jp
+mino.gifu.jp
+minokamo.gifu.jp
+mitake.gifu.jp
+mizunami.gifu.jp
+motosu.gifu.jp
+nakatsugawa.gifu.jp
+ogaki.gifu.jp
+sakahogi.gifu.jp
+seki.gifu.jp
+sekigahara.gifu.jp
+shirakawa.gifu.jp
+tajimi.gifu.jp
+takayama.gifu.jp
+tarui.gifu.jp
+toki.gifu.jp
+tomika.gifu.jp
+wanouchi.gifu.jp
+yamagata.gifu.jp
+yaotsu.gifu.jp
+yoro.gifu.jp
+annaka.gunma.jp
+chiyoda.gunma.jp
+fujioka.gunma.jp
+higashiagatsuma.gunma.jp
+isesaki.gunma.jp
+itakura.gunma.jp
+kanna.gunma.jp
+kanra.gunma.jp
+katashina.gunma.jp
+kawaba.gunma.jp
+kiryu.gunma.jp
+kusatsu.gunma.jp
+maebashi.gunma.jp
+meiwa.gunma.jp
+midori.gunma.jp
+minakami.gunma.jp
+naganohara.gunma.jp
+nakanojo.gunma.jp
+nanmoku.gunma.jp
+numata.gunma.jp
+oizumi.gunma.jp
+ora.gunma.jp
+ota.gunma.jp
+shibukawa.gunma.jp
+shimonita.gunma.jp
+shinto.gunma.jp
+showa.gunma.jp
+takasaki.gunma.jp
+takayama.gunma.jp
+tamamura.gunma.jp
+tatebayashi.gunma.jp
+tomioka.gunma.jp
+tsukiyono.gunma.jp
+tsumagoi.gunma.jp
+ueno.gunma.jp
+yoshioka.gunma.jp
+asaminami.hiroshima.jp
+daiwa.hiroshima.jp
+etajima.hiroshima.jp
+fuchu.hiroshima.jp
+fukuyama.hiroshima.jp
+hatsukaichi.hiroshima.jp
+higashihiroshima.hiroshima.jp
+hongo.hiroshima.jp
+jinsekikogen.hiroshima.jp
+kaita.hiroshima.jp
+kui.hiroshima.jp
+kumano.hiroshima.jp
+kure.hiroshima.jp
+mihara.hiroshima.jp
+miyoshi.hiroshima.jp
+naka.hiroshima.jp
+onomichi.hiroshima.jp
+osakikamijima.hiroshima.jp
+otake.hiroshima.jp
+saka.hiroshima.jp
+sera.hiroshima.jp
+seranishi.hiroshima.jp
+shinichi.hiroshima.jp
+shobara.hiroshima.jp
+takehara.hiroshima.jp
+abashiri.hokkaido.jp
+abira.hokkaido.jp
+aibetsu.hokkaido.jp
+akabira.hokkaido.jp
+akkeshi.hokkaido.jp
+asahikawa.hokkaido.jp
+ashibetsu.hokkaido.jp
+ashoro.hokkaido.jp
+assabu.hokkaido.jp
+atsuma.hokkaido.jp
+bibai.hokkaido.jp
+biei.hokkaido.jp
+bifuka.hokkaido.jp
+bihoro.hokkaido.jp
+biratori.hokkaido.jp
+chippubetsu.hokkaido.jp
+chitose.hokkaido.jp
+date.hokkaido.jp
+ebetsu.hokkaido.jp
+embetsu.hokkaido.jp
+eniwa.hokkaido.jp
+erimo.hokkaido.jp
+esan.hokkaido.jp
+esashi.hokkaido.jp
+fukagawa.hokkaido.jp
+fukushima.hokkaido.jp
+furano.hokkaido.jp
+furubira.hokkaido.jp
+haboro.hokkaido.jp
+hakodate.hokkaido.jp
+hamatonbetsu.hokkaido.jp
+hidaka.hokkaido.jp
+higashikagura.hokkaido.jp
+higashikawa.hokkaido.jp
+hiroo.hokkaido.jp
+hokuryu.hokkaido.jp
+hokuto.hokkaido.jp
+honbetsu.hokkaido.jp
+horokanai.hokkaido.jp
+horonobe.hokkaido.jp
+ikeda.hokkaido.jp
+imakane.hokkaido.jp
+ishikari.hokkaido.jp
+iwamizawa.hokkaido.jp
+iwanai.hokkaido.jp
+kamifurano.hokkaido.jp
+kamikawa.hokkaido.jp
+kamishihoro.hokkaido.jp
+kamisunagawa.hokkaido.jp
+kamoenai.hokkaido.jp
+kayabe.hokkaido.jp
+kembuchi.hokkaido.jp
+kikonai.hokkaido.jp
+kimobetsu.hokkaido.jp
+kitahiroshima.hokkaido.jp
+kitami.hokkaido.jp
+kiyosato.hokkaido.jp
+koshimizu.hokkaido.jp
+kunneppu.hokkaido.jp
+kuriyama.hokkaido.jp
+kuromatsunai.hokkaido.jp
+kushiro.hokkaido.jp
+kutchan.hokkaido.jp
+kyowa.hokkaido.jp
+mashike.hokkaido.jp
+matsumae.hokkaido.jp
+mikasa.hokkaido.jp
+minamifurano.hokkaido.jp
+mombetsu.hokkaido.jp
+moseushi.hokkaido.jp
+mukawa.hokkaido.jp
+muroran.hokkaido.jp
+naie.hokkaido.jp
+nakagawa.hokkaido.jp
+nakasatsunai.hokkaido.jp
+nakatombetsu.hokkaido.jp
+nanae.hokkaido.jp
+nanporo.hokkaido.jp
+nayoro.hokkaido.jp
+nemuro.hokkaido.jp
+niikappu.hokkaido.jp
+niki.hokkaido.jp
+nishiokoppe.hokkaido.jp
+noboribetsu.hokkaido.jp
+numata.hokkaido.jp
+obihiro.hokkaido.jp
+obira.hokkaido.jp
+oketo.hokkaido.jp
+okoppe.hokkaido.jp
+otaru.hokkaido.jp
+otobe.hokkaido.jp
+otofuke.hokkaido.jp
+otoineppu.hokkaido.jp
+oumu.hokkaido.jp
+ozora.hokkaido.jp
+pippu.hokkaido.jp
+rankoshi.hokkaido.jp
+rebun.hokkaido.jp
+rikubetsu.hokkaido.jp
+rishiri.hokkaido.jp
+rishirifuji.hokkaido.jp
+saroma.hokkaido.jp
+sarufutsu.hokkaido.jp
+shakotan.hokkaido.jp
+shari.hokkaido.jp
+shibecha.hokkaido.jp
+shibetsu.hokkaido.jp
+shikabe.hokkaido.jp
+shikaoi.hokkaido.jp
+shimamaki.hokkaido.jp
+shimizu.hokkaido.jp
+shimokawa.hokkaido.jp
+shinshinotsu.hokkaido.jp
+shintoku.hokkaido.jp
+shiranuka.hokkaido.jp
+shiraoi.hokkaido.jp
+shiriuchi.hokkaido.jp
+sobetsu.hokkaido.jp
+sunagawa.hokkaido.jp
+taiki.hokkaido.jp
+takasu.hokkaido.jp
+takikawa.hokkaido.jp
+takinoue.hokkaido.jp
+teshikaga.hokkaido.jp
+tobetsu.hokkaido.jp
+tohma.hokkaido.jp
+tomakomai.hokkaido.jp
+tomari.hokkaido.jp
+toya.hokkaido.jp
+toyako.hokkaido.jp
+toyotomi.hokkaido.jp
+toyoura.hokkaido.jp
+tsubetsu.hokkaido.jp
+tsukigata.hokkaido.jp
+urakawa.hokkaido.jp
+urausu.hokkaido.jp
+uryu.hokkaido.jp
+utashinai.hokkaido.jp
+wakkanai.hokkaido.jp
+wassamu.hokkaido.jp
+yakumo.hokkaido.jp
+yoichi.hokkaido.jp
+aioi.hyogo.jp
+akashi.hyogo.jp
+ako.hyogo.jp
+amagasaki.hyogo.jp
+aogaki.hyogo.jp
+asago.hyogo.jp
+ashiya.hyogo.jp
+awaji.hyogo.jp
+fukusaki.hyogo.jp
+goshiki.hyogo.jp
+harima.hyogo.jp
+himeji.hyogo.jp
+ichikawa.hyogo.jp
+inagawa.hyogo.jp
+itami.hyogo.jp
+kakogawa.hyogo.jp
+kamigori.hyogo.jp
+kamikawa.hyogo.jp
+kasai.hyogo.jp
+kasuga.hyogo.jp
+kawanishi.hyogo.jp
+miki.hyogo.jp
+minamiawaji.hyogo.jp
+nishinomiya.hyogo.jp
+nishiwaki.hyogo.jp
+ono.hyogo.jp
+sanda.hyogo.jp
+sannan.hyogo.jp
+sasayama.hyogo.jp
+sayo.hyogo.jp
+shingu.hyogo.jp
+shinonsen.hyogo.jp
+shiso.hyogo.jp
+sumoto.hyogo.jp
+taishi.hyogo.jp
+taka.hyogo.jp
+takarazuka.hyogo.jp
+takasago.hyogo.jp
+takino.hyogo.jp
+tamba.hyogo.jp
+tatsuno.hyogo.jp
+toyooka.hyogo.jp
+yabu.hyogo.jp
+yashiro.hyogo.jp
+yoka.hyogo.jp
+yokawa.hyogo.jp
+ami.ibaraki.jp
+asahi.ibaraki.jp
+bando.ibaraki.jp
+chikusei.ibaraki.jp
+daigo.ibaraki.jp
+fujishiro.ibaraki.jp
+hitachi.ibaraki.jp
+hitachinaka.ibaraki.jp
+hitachiomiya.ibaraki.jp
+hitachiota.ibaraki.jp
+ibaraki.ibaraki.jp
+ina.ibaraki.jp
+inashiki.ibaraki.jp
+itako.ibaraki.jp
+iwama.ibaraki.jp
+joso.ibaraki.jp
+kamisu.ibaraki.jp
+kasama.ibaraki.jp
+kashima.ibaraki.jp
+kasumigaura.ibaraki.jp
+koga.ibaraki.jp
+miho.ibaraki.jp
+mito.ibaraki.jp
+moriya.ibaraki.jp
+naka.ibaraki.jp
+namegata.ibaraki.jp
+oarai.ibaraki.jp
+ogawa.ibaraki.jp
+omitama.ibaraki.jp
+ryugasaki.ibaraki.jp
+sakai.ibaraki.jp
+sakuragawa.ibaraki.jp
+shimodate.ibaraki.jp
+shimotsuma.ibaraki.jp
+shirosato.ibaraki.jp
+sowa.ibaraki.jp
+suifu.ibaraki.jp
+takahagi.ibaraki.jp
+tamatsukuri.ibaraki.jp
+tokai.ibaraki.jp
+tomobe.ibaraki.jp
+tone.ibaraki.jp
+toride.ibaraki.jp
+tsuchiura.ibaraki.jp
+tsukuba.ibaraki.jp
+uchihara.ibaraki.jp
+ushiku.ibaraki.jp
+yachiyo.ibaraki.jp
+yamagata.ibaraki.jp
+yawara.ibaraki.jp
+yuki.ibaraki.jp
+anamizu.ishikawa.jp
+hakui.ishikawa.jp
+hakusan.ishikawa.jp
+kaga.ishikawa.jp
+kahoku.ishikawa.jp
+kanazawa.ishikawa.jp
+kawakita.ishikawa.jp
+komatsu.ishikawa.jp
+nakanoto.ishikawa.jp
+nanao.ishikawa.jp
+nomi.ishikawa.jp
+nonoichi.ishikawa.jp
+noto.ishikawa.jp
+shika.ishikawa.jp
+suzu.ishikawa.jp
+tsubata.ishikawa.jp
+tsurugi.ishikawa.jp
+uchinada.ishikawa.jp
+wajima.ishikawa.jp
+fudai.iwate.jp
+fujisawa.iwate.jp
+hanamaki.iwate.jp
+hiraizumi.iwate.jp
+hirono.iwate.jp
+ichinohe.iwate.jp
+ichinoseki.iwate.jp
+iwaizumi.iwate.jp
+iwate.iwate.jp
+joboji.iwate.jp
+kamaishi.iwate.jp
+kanegasaki.iwate.jp
+karumai.iwate.jp
+kawai.iwate.jp
+kitakami.iwate.jp
+kuji.iwate.jp
+kunohe.iwate.jp
+kuzumaki.iwate.jp
+miyako.iwate.jp
+mizusawa.iwate.jp
+morioka.iwate.jp
+ninohe.iwate.jp
+noda.iwate.jp
+ofunato.iwate.jp
+oshu.iwate.jp
+otsuchi.iwate.jp
+rikuzentakata.iwate.jp
+shiwa.iwate.jp
+shizukuishi.iwate.jp
+sumita.iwate.jp
+tanohata.iwate.jp
+tono.iwate.jp
+yahaba.iwate.jp
+yamada.iwate.jp
+ayagawa.kagawa.jp
+higashikagawa.kagawa.jp
+kanonji.kagawa.jp
+kotohira.kagawa.jp
+manno.kagawa.jp
+marugame.kagawa.jp
+mitoyo.kagawa.jp
+naoshima.kagawa.jp
+sanuki.kagawa.jp
+tadotsu.kagawa.jp
+takamatsu.kagawa.jp
+tonosho.kagawa.jp
+uchinomi.kagawa.jp
+utazu.kagawa.jp
+zentsuji.kagawa.jp
+akune.kagoshima.jp
+amami.kagoshima.jp
+hioki.kagoshima.jp
+isa.kagoshima.jp
+isen.kagoshima.jp
+izumi.kagoshima.jp
+kagoshima.kagoshima.jp
+kanoya.kagoshima.jp
+kawanabe.kagoshima.jp
+kinko.kagoshima.jp
+kouyama.kagoshima.jp
+makurazaki.kagoshima.jp
+matsumoto.kagoshima.jp
+minamitane.kagoshima.jp
+nakatane.kagoshima.jp
+nishinoomote.kagoshima.jp
+satsumasendai.kagoshima.jp
+soo.kagoshima.jp
+tarumizu.kagoshima.jp
+yusui.kagoshima.jp
+aikawa.kanagawa.jp
+atsugi.kanagawa.jp
+ayase.kanagawa.jp
+chigasaki.kanagawa.jp
+ebina.kanagawa.jp
+fujisawa.kanagawa.jp
+hadano.kanagawa.jp
+hakone.kanagawa.jp
+hiratsuka.kanagawa.jp
+isehara.kanagawa.jp
+kaisei.kanagawa.jp
+kamakura.kanagawa.jp
+kiyokawa.kanagawa.jp
+matsuda.kanagawa.jp
+minamiashigara.kanagawa.jp
+miura.kanagawa.jp
+nakai.kanagawa.jp
+ninomiya.kanagawa.jp
+odawara.kanagawa.jp
+oi.kanagawa.jp
+oiso.kanagawa.jp
+sagamihara.kanagawa.jp
+samukawa.kanagawa.jp
+tsukui.kanagawa.jp
+yamakita.kanagawa.jp
+yamato.kanagawa.jp
+yokosuka.kanagawa.jp
+yugawara.kanagawa.jp
+zama.kanagawa.jp
+zushi.kanagawa.jp
+aki.kochi.jp
+geisei.kochi.jp
+hidaka.kochi.jp
+higashitsuno.kochi.jp
+ino.kochi.jp
+kagami.kochi.jp
+kami.kochi.jp
+kitagawa.kochi.jp
+kochi.kochi.jp
+mihara.kochi.jp
+motoyama.kochi.jp
+muroto.kochi.jp
+nahari.kochi.jp
+nakamura.kochi.jp
+nankoku.kochi.jp
+nishitosa.kochi.jp
+niyodogawa.kochi.jp
+ochi.kochi.jp
+okawa.kochi.jp
+otoyo.kochi.jp
+otsuki.kochi.jp
+sakawa.kochi.jp
+sukumo.kochi.jp
+susaki.kochi.jp
+tosa.kochi.jp
+tosashimizu.kochi.jp
+toyo.kochi.jp
+tsuno.kochi.jp
+umaji.kochi.jp
+yasuda.kochi.jp
+yusuhara.kochi.jp
+amakusa.kumamoto.jp
+arao.kumamoto.jp
+aso.kumamoto.jp
+choyo.kumamoto.jp
+gyokuto.kumamoto.jp
+kamiamakusa.kumamoto.jp
+kikuchi.kumamoto.jp
+kumamoto.kumamoto.jp
+mashiki.kumamoto.jp
+mifune.kumamoto.jp
+minamata.kumamoto.jp
+minamioguni.kumamoto.jp
+nagasu.kumamoto.jp
+nishihara.kumamoto.jp
+oguni.kumamoto.jp
+ozu.kumamoto.jp
+sumoto.kumamoto.jp
+takamori.kumamoto.jp
+uki.kumamoto.jp
+uto.kumamoto.jp
+yamaga.kumamoto.jp
+yamato.kumamoto.jp
+yatsushiro.kumamoto.jp
+ayabe.kyoto.jp
+fukuchiyama.kyoto.jp
+higashiyama.kyoto.jp
+ide.kyoto.jp
+ine.kyoto.jp
+joyo.kyoto.jp
+kameoka.kyoto.jp
+kamo.kyoto.jp
+kita.kyoto.jp
+kizu.kyoto.jp
+kumiyama.kyoto.jp
+kyotamba.kyoto.jp
+kyotanabe.kyoto.jp
+kyotango.kyoto.jp
+maizuru.kyoto.jp
+minami.kyoto.jp
+minamiyamashiro.kyoto.jp
+miyazu.kyoto.jp
+muko.kyoto.jp
+nagaokakyo.kyoto.jp
+nakagyo.kyoto.jp
+nantan.kyoto.jp
+oyamazaki.kyoto.jp
+sakyo.kyoto.jp
+seika.kyoto.jp
+tanabe.kyoto.jp
+uji.kyoto.jp
+ujitawara.kyoto.jp
+wazuka.kyoto.jp
+yamashina.kyoto.jp
+yawata.kyoto.jp
+asahi.mie.jp
+inabe.mie.jp
+ise.mie.jp
+kameyama.mie.jp
+kawagoe.mie.jp
+kiho.mie.jp
+kisosaki.mie.jp
+kiwa.mie.jp
+komono.mie.jp
+kumano.mie.jp
+kuwana.mie.jp
+matsusaka.mie.jp
+meiwa.mie.jp
+mihama.mie.jp
+minamiise.mie.jp
+misugi.mie.jp
+miyama.mie.jp
+nabari.mie.jp
+shima.mie.jp
+suzuka.mie.jp
+tado.mie.jp
+taiki.mie.jp
+taki.mie.jp
+tamaki.mie.jp
+toba.mie.jp
+tsu.mie.jp
+udono.mie.jp
+ureshino.mie.jp
+watarai.mie.jp
+yokkaichi.mie.jp
+furukawa.miyagi.jp
+higashimatsushima.miyagi.jp
+ishinomaki.miyagi.jp
+iwanuma.miyagi.jp
+kakuda.miyagi.jp
+kami.miyagi.jp
+kawasaki.miyagi.jp
+marumori.miyagi.jp
+matsushima.miyagi.jp
+minamisanriku.miyagi.jp
+misato.miyagi.jp
+murata.miyagi.jp
+natori.miyagi.jp
+ogawara.miyagi.jp
+ohira.miyagi.jp
+onagawa.miyagi.jp
+osaki.miyagi.jp
+rifu.miyagi.jp
+semine.miyagi.jp
+shibata.miyagi.jp
+shichikashuku.miyagi.jp
+shikama.miyagi.jp
+shiogama.miyagi.jp
+shiroishi.miyagi.jp
+tagajo.miyagi.jp
+taiwa.miyagi.jp
+tome.miyagi.jp
+tomiya.miyagi.jp
+wakuya.miyagi.jp
+watari.miyagi.jp
+yamamoto.miyagi.jp
+zao.miyagi.jp
+aya.miyazaki.jp
+ebino.miyazaki.jp
+gokase.miyazaki.jp
+hyuga.miyazaki.jp
+kadogawa.miyazaki.jp
+kawaminami.miyazaki.jp
+kijo.miyazaki.jp
+kitagawa.miyazaki.jp
+kitakata.miyazaki.jp
+kitaura.miyazaki.jp
+kobayashi.miyazaki.jp
+kunitomi.miyazaki.jp
+kushima.miyazaki.jp
+mimata.miyazaki.jp
+miyakonojo.miyazaki.jp
+miyazaki.miyazaki.jp
+morotsuka.miyazaki.jp
+nichinan.miyazaki.jp
+nishimera.miyazaki.jp
+nobeoka.miyazaki.jp
+saito.miyazaki.jp
+shiiba.miyazaki.jp
+shintomi.miyazaki.jp
+takaharu.miyazaki.jp
+takanabe.miyazaki.jp
+takazaki.miyazaki.jp
+tsuno.miyazaki.jp
+achi.nagano.jp
+agematsu.nagano.jp
+anan.nagano.jp
+aoki.nagano.jp
+asahi.nagano.jp
+azumino.nagano.jp
+chikuhoku.nagano.jp
+chikuma.nagano.jp
+chino.nagano.jp
+fujimi.nagano.jp
+hakuba.nagano.jp
+hara.nagano.jp
+hiraya.nagano.jp
+iida.nagano.jp
+iijima.nagano.jp
+iiyama.nagano.jp
+iizuna.nagano.jp
+ikeda.nagano.jp
+ikusaka.nagano.jp
+ina.nagano.jp
+karuizawa.nagano.jp
+kawakami.nagano.jp
+kiso.nagano.jp
+kisofukushima.nagano.jp
+kitaaiki.nagano.jp
+komagane.nagano.jp
+komoro.nagano.jp
+matsukawa.nagano.jp
+matsumoto.nagano.jp
+miasa.nagano.jp
+minamiaiki.nagano.jp
+minamimaki.nagano.jp
+minamiminowa.nagano.jp
+minowa.nagano.jp
+miyada.nagano.jp
+miyota.nagano.jp
+mochizuki.nagano.jp
+nagano.nagano.jp
+nagawa.nagano.jp
+nagiso.nagano.jp
+nakagawa.nagano.jp
+nakano.nagano.jp
+nozawaonsen.nagano.jp
+obuse.nagano.jp
+ogawa.nagano.jp
+okaya.nagano.jp
+omachi.nagano.jp
+omi.nagano.jp
+ookuwa.nagano.jp
+ooshika.nagano.jp
+otaki.nagano.jp
+otari.nagano.jp
+sakae.nagano.jp
+sakaki.nagano.jp
+saku.nagano.jp
+sakuho.nagano.jp
+shimosuwa.nagano.jp
+shinanomachi.nagano.jp
+shiojiri.nagano.jp
+suwa.nagano.jp
+suzaka.nagano.jp
+takagi.nagano.jp
+takamori.nagano.jp
+takayama.nagano.jp
+tateshina.nagano.jp
+tatsuno.nagano.jp
+togakushi.nagano.jp
+togura.nagano.jp
+tomi.nagano.jp
+ueda.nagano.jp
+wada.nagano.jp
+yamagata.nagano.jp
+yamanouchi.nagano.jp
+yasaka.nagano.jp
+yasuoka.nagano.jp
+chijiwa.nagasaki.jp
+futsu.nagasaki.jp
+goto.nagasaki.jp
+hasami.nagasaki.jp
+hirado.nagasaki.jp
+iki.nagasaki.jp
+isahaya.nagasaki.jp
+kawatana.nagasaki.jp
+kuchinotsu.nagasaki.jp
+matsuura.nagasaki.jp
+nagasaki.nagasaki.jp
+obama.nagasaki.jp
+omura.nagasaki.jp
+oseto.nagasaki.jp
+saikai.nagasaki.jp
+sasebo.nagasaki.jp
+seihi.nagasaki.jp
+shimabara.nagasaki.jp
+shinkamigoto.nagasaki.jp
+togitsu.nagasaki.jp
+tsushima.nagasaki.jp
+unzen.nagasaki.jp
+ando.nara.jp
+gose.nara.jp
+heguri.nara.jp
+higashiyoshino.nara.jp
+ikaruga.nara.jp
+ikoma.nara.jp
+kamikitayama.nara.jp
+kanmaki.nara.jp
+kashiba.nara.jp
+kashihara.nara.jp
+katsuragi.nara.jp
+kawai.nara.jp
+kawakami.nara.jp
+kawanishi.nara.jp
+koryo.nara.jp
+kurotaki.nara.jp
+mitsue.nara.jp
+miyake.nara.jp
+nara.nara.jp
+nosegawa.nara.jp
+oji.nara.jp
+ouda.nara.jp
+oyodo.nara.jp
+sakurai.nara.jp
+sango.nara.jp
+shimoichi.nara.jp
+shimokitayama.nara.jp
+shinjo.nara.jp
+soni.nara.jp
+takatori.nara.jp
+tawaramoto.nara.jp
+tenkawa.nara.jp
+tenri.nara.jp
+uda.nara.jp
+yamatokoriyama.nara.jp
+yamatotakada.nara.jp
+yamazoe.nara.jp
+yoshino.nara.jp
+aga.niigata.jp
+agano.niigata.jp
+gosen.niigata.jp
+itoigawa.niigata.jp
+izumozaki.niigata.jp
+joetsu.niigata.jp
+kamo.niigata.jp
+kariwa.niigata.jp
+kashiwazaki.niigata.jp
+minamiuonuma.niigata.jp
+mitsuke.niigata.jp
+muika.niigata.jp
+murakami.niigata.jp
+myoko.niigata.jp
+nagaoka.niigata.jp
+niigata.niigata.jp
+ojiya.niigata.jp
+omi.niigata.jp
+sado.niigata.jp
+sanjo.niigata.jp
+seiro.niigata.jp
+seirou.niigata.jp
+sekikawa.niigata.jp
+shibata.niigata.jp
+tagami.niigata.jp
+tainai.niigata.jp
+tochio.niigata.jp
+tokamachi.niigata.jp
+tsubame.niigata.jp
+tsunan.niigata.jp
+uonuma.niigata.jp
+yahiko.niigata.jp
+yoita.niigata.jp
+yuzawa.niigata.jp
+beppu.oita.jp
+bungoono.oita.jp
+bungotakada.oita.jp
+hasama.oita.jp
+hiji.oita.jp
+himeshima.oita.jp
+hita.oita.jp
+kamitsue.oita.jp
+kokonoe.oita.jp
+kuju.oita.jp
+kunisaki.oita.jp
+kusu.oita.jp
+oita.oita.jp
+saiki.oita.jp
+taketa.oita.jp
+tsukumi.oita.jp
+usa.oita.jp
+usuki.oita.jp
+yufu.oita.jp
+akaiwa.okayama.jp
+asakuchi.okayama.jp
+bizen.okayama.jp
+hayashima.okayama.jp
+ibara.okayama.jp
+kagamino.okayama.jp
+kasaoka.okayama.jp
+kibichuo.okayama.jp
+kumenan.okayama.jp
+kurashiki.okayama.jp
+maniwa.okayama.jp
+misaki.okayama.jp
+nagi.okayama.jp
+niimi.okayama.jp
+nishiawakura.okayama.jp
+okayama.okayama.jp
+satosho.okayama.jp
+setouchi.okayama.jp
+shinjo.okayama.jp
+shoo.okayama.jp
+soja.okayama.jp
+takahashi.okayama.jp
+tamano.okayama.jp
+tsuyama.okayama.jp
+wake.okayama.jp
+yakage.okayama.jp
+aguni.okinawa.jp
+ginowan.okinawa.jp
+ginoza.okinawa.jp
+gushikami.okinawa.jp
+haebaru.okinawa.jp
+higashi.okinawa.jp
+hirara.okinawa.jp
+iheya.okinawa.jp
+ishigaki.okinawa.jp
+ishikawa.okinawa.jp
+itoman.okinawa.jp
+izena.okinawa.jp
+kadena.okinawa.jp
+kin.okinawa.jp
+kitadaito.okinawa.jp
+kitanakagusuku.okinawa.jp
+kumejima.okinawa.jp
+kunigami.okinawa.jp
+minamidaito.okinawa.jp
+motobu.okinawa.jp
+nago.okinawa.jp
+naha.okinawa.jp
+nakagusuku.okinawa.jp
+nakijin.okinawa.jp
+nanjo.okinawa.jp
+nishihara.okinawa.jp
+ogimi.okinawa.jp
+okinawa.okinawa.jp
+onna.okinawa.jp
+shimoji.okinawa.jp
+taketomi.okinawa.jp
+tarama.okinawa.jp
+tokashiki.okinawa.jp
+tomigusuku.okinawa.jp
+tonaki.okinawa.jp
+urasoe.okinawa.jp
+uruma.okinawa.jp
+yaese.okinawa.jp
+yomitan.okinawa.jp
+yonabaru.okinawa.jp
+yonaguni.okinawa.jp
+zamami.okinawa.jp
+abeno.osaka.jp
+chihayaakasaka.osaka.jp
+chuo.osaka.jp
+daito.osaka.jp
+fujiidera.osaka.jp
+habikino.osaka.jp
+hannan.osaka.jp
+higashiosaka.osaka.jp
+higashisumiyoshi.osaka.jp
+higashiyodogawa.osaka.jp
+hirakata.osaka.jp
+ibaraki.osaka.jp
+ikeda.osaka.jp
+izumi.osaka.jp
+izumiotsu.osaka.jp
+izumisano.osaka.jp
+kadoma.osaka.jp
+kaizuka.osaka.jp
+kanan.osaka.jp
+kashiwara.osaka.jp
+katano.osaka.jp
+kawachinagano.osaka.jp
+kishiwada.osaka.jp
+kita.osaka.jp
+kumatori.osaka.jp
+matsubara.osaka.jp
+minato.osaka.jp
+minoh.osaka.jp
+misaki.osaka.jp
+moriguchi.osaka.jp
+neyagawa.osaka.jp
+nishi.osaka.jp
+nose.osaka.jp
+osakasayama.osaka.jp
+sakai.osaka.jp
+sayama.osaka.jp
+sennan.osaka.jp
+settsu.osaka.jp
+shijonawate.osaka.jp
+shimamoto.osaka.jp
+suita.osaka.jp
+tadaoka.osaka.jp
+taishi.osaka.jp
+tajiri.osaka.jp
+takaishi.osaka.jp
+takatsuki.osaka.jp
+tondabayashi.osaka.jp
+toyonaka.osaka.jp
+toyono.osaka.jp
+yao.osaka.jp
+ariake.saga.jp
+arita.saga.jp
+fukudomi.saga.jp
+genkai.saga.jp
+hamatama.saga.jp
+hizen.saga.jp
+imari.saga.jp
+kamimine.saga.jp
+kanzaki.saga.jp
+karatsu.saga.jp
+kashima.saga.jp
+kitagata.saga.jp
+kitahata.saga.jp
+kiyama.saga.jp
+kouhoku.saga.jp
+kyuragi.saga.jp
+nishiarita.saga.jp
+ogi.saga.jp
+omachi.saga.jp
+ouchi.saga.jp
+saga.saga.jp
+shiroishi.saga.jp
+taku.saga.jp
+tara.saga.jp
+tosu.saga.jp
+yoshinogari.saga.jp
+arakawa.saitama.jp
+asaka.saitama.jp
+chichibu.saitama.jp
+fujimi.saitama.jp
+fujimino.saitama.jp
+fukaya.saitama.jp
+hanno.saitama.jp
+hanyu.saitama.jp
+hasuda.saitama.jp
+hatogaya.saitama.jp
+hatoyama.saitama.jp
+hidaka.saitama.jp
+higashichichibu.saitama.jp
+higashimatsuyama.saitama.jp
+honjo.saitama.jp
+ina.saitama.jp
+iruma.saitama.jp
+iwatsuki.saitama.jp
+kamiizumi.saitama.jp
+kamikawa.saitama.jp
+kamisato.saitama.jp
+kasukabe.saitama.jp
+kawagoe.saitama.jp
+kawaguchi.saitama.jp
+kawajima.saitama.jp
+kazo.saitama.jp
+kitamoto.saitama.jp
+koshigaya.saitama.jp
+kounosu.saitama.jp
+kuki.saitama.jp
+kumagaya.saitama.jp
+matsubushi.saitama.jp
+minano.saitama.jp
+misato.saitama.jp
+miyashiro.saitama.jp
+miyoshi.saitama.jp
+moroyama.saitama.jp
+nagatoro.saitama.jp
+namegawa.saitama.jp
+niiza.saitama.jp
+ogano.saitama.jp
+ogawa.saitama.jp
+ogose.saitama.jp
+okegawa.saitama.jp
+omiya.saitama.jp
+otaki.saitama.jp
+ranzan.saitama.jp
+ryokami.saitama.jp
+saitama.saitama.jp
+sakado.saitama.jp
+satte.saitama.jp
+sayama.saitama.jp
+shiki.saitama.jp
+shiraoka.saitama.jp
+soka.saitama.jp
+sugito.saitama.jp
+toda.saitama.jp
+tokigawa.saitama.jp
+tokorozawa.saitama.jp
+tsurugashima.saitama.jp
+urawa.saitama.jp
+warabi.saitama.jp
+yashio.saitama.jp
+yokoze.saitama.jp
+yono.saitama.jp
+yorii.saitama.jp
+yoshida.saitama.jp
+yoshikawa.saitama.jp
+yoshimi.saitama.jp
+aisho.shiga.jp
+gamo.shiga.jp
+higashiomi.shiga.jp
+hikone.shiga.jp
+koka.shiga.jp
+konan.shiga.jp
+kosei.shiga.jp
+koto.shiga.jp
+kusatsu.shiga.jp
+maibara.shiga.jp
+moriyama.shiga.jp
+nagahama.shiga.jp
+nishiazai.shiga.jp
+notogawa.shiga.jp
+omihachiman.shiga.jp
+otsu.shiga.jp
+ritto.shiga.jp
+ryuoh.shiga.jp
+takashima.shiga.jp
+takatsuki.shiga.jp
+torahime.shiga.jp
+toyosato.shiga.jp
+yasu.shiga.jp
+akagi.shimane.jp
+ama.shimane.jp
+gotsu.shimane.jp
+hamada.shimane.jp
+higashiizumo.shimane.jp
+hikawa.shimane.jp
+hikimi.shimane.jp
+izumo.shimane.jp
+kakinoki.shimane.jp
+masuda.shimane.jp
+matsue.shimane.jp
+misato.shimane.jp
+nishinoshima.shimane.jp
+ohda.shimane.jp
+okinoshima.shimane.jp
+okuizumo.shimane.jp
+shimane.shimane.jp
+tamayu.shimane.jp
+tsuwano.shimane.jp
+unnan.shimane.jp
+yakumo.shimane.jp
+yasugi.shimane.jp
+yatsuka.shimane.jp
+arai.shizuoka.jp
+atami.shizuoka.jp
+fuji.shizuoka.jp
+fujieda.shizuoka.jp
+fujikawa.shizuoka.jp
+fujinomiya.shizuoka.jp
+fukuroi.shizuoka.jp
+gotemba.shizuoka.jp
+haibara.shizuoka.jp
+hamamatsu.shizuoka.jp
+higashiizu.shizuoka.jp
+ito.shizuoka.jp
+iwata.shizuoka.jp
+izu.shizuoka.jp
+izunokuni.shizuoka.jp
+kakegawa.shizuoka.jp
+kannami.shizuoka.jp
+kawanehon.shizuoka.jp
+kawazu.shizuoka.jp
+kikugawa.shizuoka.jp
+kosai.shizuoka.jp
+makinohara.shizuoka.jp
+matsuzaki.shizuoka.jp
+minamiizu.shizuoka.jp
+mishima.shizuoka.jp
+morimachi.shizuoka.jp
+nishiizu.shizuoka.jp
+numazu.shizuoka.jp
+omaezaki.shizuoka.jp
+shimada.shizuoka.jp
+shimizu.shizuoka.jp
+shimoda.shizuoka.jp
+shizuoka.shizuoka.jp
+susono.shizuoka.jp
+yaizu.shizuoka.jp
+yoshida.shizuoka.jp
+ashikaga.tochigi.jp
+bato.tochigi.jp
+haga.tochigi.jp
+ichikai.tochigi.jp
+iwafune.tochigi.jp
+kaminokawa.tochigi.jp
+kanuma.tochigi.jp
+karasuyama.tochigi.jp
+kuroiso.tochigi.jp
+mashiko.tochigi.jp
+mibu.tochigi.jp
+moka.tochigi.jp
+motegi.tochigi.jp
+nasu.tochigi.jp
+nasushiobara.tochigi.jp
+nikko.tochigi.jp
+nishikata.tochigi.jp
+nogi.tochigi.jp
+ohira.tochigi.jp
+ohtawara.tochigi.jp
+oyama.tochigi.jp
+sakura.tochigi.jp
+sano.tochigi.jp
+shimotsuke.tochigi.jp
+shioya.tochigi.jp
+takanezawa.tochigi.jp
+tochigi.tochigi.jp
+tsuga.tochigi.jp
+ujiie.tochigi.jp
+utsunomiya.tochigi.jp
+yaita.tochigi.jp
+aizumi.tokushima.jp
+anan.tokushima.jp
+ichiba.tokushima.jp
+itano.tokushima.jp
+kainan.tokushima.jp
+komatsushima.tokushima.jp
+matsushige.tokushima.jp
+mima.tokushima.jp
+minami.tokushima.jp
+miyoshi.tokushima.jp
+mugi.tokushima.jp
+nakagawa.tokushima.jp
+naruto.tokushima.jp
+sanagochi.tokushima.jp
+shishikui.tokushima.jp
+tokushima.tokushima.jp
+wajiki.tokushima.jp
+adachi.tokyo.jp
+akiruno.tokyo.jp
+akishima.tokyo.jp
+aogashima.tokyo.jp
+arakawa.tokyo.jp
+bunkyo.tokyo.jp
+chiyoda.tokyo.jp
+chofu.tokyo.jp
+chuo.tokyo.jp
+edogawa.tokyo.jp
+fuchu.tokyo.jp
+fussa.tokyo.jp
+hachijo.tokyo.jp
+hachioji.tokyo.jp
+hamura.tokyo.jp
+higashikurume.tokyo.jp
+higashimurayama.tokyo.jp
+higashiyamato.tokyo.jp
+hino.tokyo.jp
+hinode.tokyo.jp
+hinohara.tokyo.jp
+inagi.tokyo.jp
+itabashi.tokyo.jp
+katsushika.tokyo.jp
+kita.tokyo.jp
+kiyose.tokyo.jp
+kodaira.tokyo.jp
+koganei.tokyo.jp
+kokubunji.tokyo.jp
+komae.tokyo.jp
+koto.tokyo.jp
+kouzushima.tokyo.jp
+kunitachi.tokyo.jp
+machida.tokyo.jp
+meguro.tokyo.jp
+minato.tokyo.jp
+mitaka.tokyo.jp
+mizuho.tokyo.jp
+musashimurayama.tokyo.jp
+musashino.tokyo.jp
+nakano.tokyo.jp
+nerima.tokyo.jp
+ogasawara.tokyo.jp
+okutama.tokyo.jp
+ome.tokyo.jp
+oshima.tokyo.jp
+ota.tokyo.jp
+setagaya.tokyo.jp
+shibuya.tokyo.jp
+shinagawa.tokyo.jp
+shinjuku.tokyo.jp
+suginami.tokyo.jp
+sumida.tokyo.jp
+tachikawa.tokyo.jp
+taito.tokyo.jp
+tama.tokyo.jp
+toshima.tokyo.jp
+chizu.tottori.jp
+hino.tottori.jp
+kawahara.tottori.jp
+koge.tottori.jp
+kotoura.tottori.jp
+misasa.tottori.jp
+nanbu.tottori.jp
+nichinan.tottori.jp
+sakaiminato.tottori.jp
+tottori.tottori.jp
+wakasa.tottori.jp
+yazu.tottori.jp
+yonago.tottori.jp
+asahi.toyama.jp
+fuchu.toyama.jp
+fukumitsu.toyama.jp
+funahashi.toyama.jp
+himi.toyama.jp
+imizu.toyama.jp
+inami.toyama.jp
+johana.toyama.jp
+kamiichi.toyama.jp
+kurobe.toyama.jp
+nakaniikawa.toyama.jp
+namerikawa.toyama.jp
+nanto.toyama.jp
+nyuzen.toyama.jp
+oyabe.toyama.jp
+taira.toyama.jp
+takaoka.toyama.jp
+tateyama.toyama.jp
+toga.toyama.jp
+tonami.toyama.jp
+toyama.toyama.jp
+unazuki.toyama.jp
+uozu.toyama.jp
+yamada.toyama.jp
+arida.wakayama.jp
+aridagawa.wakayama.jp
+gobo.wakayama.jp
+hashimoto.wakayama.jp
+hidaka.wakayama.jp
+hirogawa.wakayama.jp
+inami.wakayama.jp
+iwade.wakayama.jp
+kainan.wakayama.jp
+kamitonda.wakayama.jp
+katsuragi.wakayama.jp
+kimino.wakayama.jp
+kinokawa.wakayama.jp
+kitayama.wakayama.jp
+koya.wakayama.jp
+koza.wakayama.jp
+kozagawa.wakayama.jp
+kudoyama.wakayama.jp
+kushimoto.wakayama.jp
+mihama.wakayama.jp
+misato.wakayama.jp
+nachikatsuura.wakayama.jp
+shingu.wakayama.jp
+shirahama.wakayama.jp
+taiji.wakayama.jp
+tanabe.wakayama.jp
+wakayama.wakayama.jp
+yuasa.wakayama.jp
+yura.wakayama.jp
+asahi.yamagata.jp
+funagata.yamagata.jp
+higashine.yamagata.jp
+iide.yamagata.jp
+kahoku.yamagata.jp
+kaminoyama.yamagata.jp
+kaneyama.yamagata.jp
+kawanishi.yamagata.jp
+mamurogawa.yamagata.jp
+mikawa.yamagata.jp
+murayama.yamagata.jp
+nagai.yamagata.jp
+nakayama.yamagata.jp
+nanyo.yamagata.jp
+nishikawa.yamagata.jp
+obanazawa.yamagata.jp
+oe.yamagata.jp
+oguni.yamagata.jp
+ohkura.yamagata.jp
+oishida.yamagata.jp
+sagae.yamagata.jp
+sakata.yamagata.jp
+sakegawa.yamagata.jp
+shinjo.yamagata.jp
+shirataka.yamagata.jp
+shonai.yamagata.jp
+takahata.yamagata.jp
+tendo.yamagata.jp
+tozawa.yamagata.jp
+tsuruoka.yamagata.jp
+yamagata.yamagata.jp
+yamanobe.yamagata.jp
+yonezawa.yamagata.jp
+yuza.yamagata.jp
+abu.yamaguchi.jp
+hagi.yamaguchi.jp
+hikari.yamaguchi.jp
+hofu.yamaguchi.jp
+iwakuni.yamaguchi.jp
+kudamatsu.yamaguchi.jp
+mitou.yamaguchi.jp
+nagato.yamaguchi.jp
+oshima.yamaguchi.jp
+shimonoseki.yamaguchi.jp
+shunan.yamaguchi.jp
+tabuse.yamaguchi.jp
+tokuyama.yamaguchi.jp
+toyota.yamaguchi.jp
+ube.yamaguchi.jp
+yuu.yamaguchi.jp
+chuo.yamanashi.jp
+doshi.yamanashi.jp
+fuefuki.yamanashi.jp
+fujikawa.yamanashi.jp
+fujikawaguchiko.yamanashi.jp
+fujiyoshida.yamanashi.jp
+hayakawa.yamanashi.jp
+hokuto.yamanashi.jp
+ichikawamisato.yamanashi.jp
+kai.yamanashi.jp
+kofu.yamanashi.jp
+koshu.yamanashi.jp
+kosuge.yamanashi.jp
+minami-alps.yamanashi.jp
+minobu.yamanashi.jp
+nakamichi.yamanashi.jp
+nanbu.yamanashi.jp
+narusawa.yamanashi.jp
+nirasaki.yamanashi.jp
+nishikatsura.yamanashi.jp
+oshino.yamanashi.jp
+otsuki.yamanashi.jp
+showa.yamanashi.jp
+tabayama.yamanashi.jp
+tsuru.yamanashi.jp
+uenohara.yamanashi.jp
+yamanakako.yamanashi.jp
+yamanashi.yamanashi.jp
+
+// ke : http://www.kenic.or.ke/index.php/en/ke-domains/ke-domains
+ke
+ac.ke
+co.ke
+go.ke
+info.ke
+me.ke
+mobi.ke
+ne.ke
+or.ke
+sc.ke
+
+// kg : http://www.domain.kg/dmn_n.html
+kg
+org.kg
+net.kg
+com.kg
+edu.kg
+gov.kg
+mil.kg
+
+// kh : http://www.mptc.gov.kh/dns_registration.htm
+*.kh
+
+// ki : http://www.ki/dns/index.html
+ki
+edu.ki
+biz.ki
+net.ki
+org.ki
+gov.ki
+info.ki
+com.ki
+
+// km : https://en.wikipedia.org/wiki/.km
+// http://www.domaine.km/documents/charte.doc
+km
+org.km
+nom.km
+gov.km
+prd.km
+tm.km
+edu.km
+mil.km
+ass.km
+com.km
+// These are only mentioned as proposed suggestions at domaine.km, but
+// https://en.wikipedia.org/wiki/.km says they're available for registration:
+coop.km
+asso.km
+presse.km
+medecin.km
+notaires.km
+pharmaciens.km
+veterinaire.km
+gouv.km
+
+// kn : https://en.wikipedia.org/wiki/.kn
+// http://www.dot.kn/domainRules.html
+kn
+net.kn
+org.kn
+edu.kn
+gov.kn
+
+// kp : http://www.kcce.kp/en_index.php
+kp
+com.kp
+edu.kp
+gov.kp
+org.kp
+rep.kp
+tra.kp
+
+// kr : https://en.wikipedia.org/wiki/.kr
+// see also: http://domain.nida.or.kr/eng/registration.jsp
+kr
+ac.kr
+co.kr
+es.kr
+go.kr
+hs.kr
+kg.kr
+mil.kr
+ms.kr
+ne.kr
+or.kr
+pe.kr
+re.kr
+sc.kr
+// kr geographical names
+busan.kr
+chungbuk.kr
+chungnam.kr
+daegu.kr
+daejeon.kr
+gangwon.kr
+gwangju.kr
+gyeongbuk.kr
+gyeonggi.kr
+gyeongnam.kr
+incheon.kr
+jeju.kr
+jeonbuk.kr
+jeonnam.kr
+seoul.kr
+ulsan.kr
+
+// kw : https://www.nic.kw/policies/
+// Confirmed by registry <nic.tech@citra.gov.kw>
+kw
+com.kw
+edu.kw
+emb.kw
+gov.kw
+ind.kw
+net.kw
+org.kw
+
+// ky : http://www.icta.ky/da_ky_reg_dom.php
+// Confirmed by registry <kysupport@perimeterusa.com> 2008-06-17
+ky
+com.ky
+edu.ky
+net.ky
+org.ky
+
+// kz : https://en.wikipedia.org/wiki/.kz
+// see also: http://www.nic.kz/rules/index.jsp
+kz
+org.kz
+edu.kz
+net.kz
+gov.kz
+mil.kz
+com.kz
+
+// la : https://en.wikipedia.org/wiki/.la
+// Submitted by registry <gavin.brown@nic.la>
+la
+int.la
+net.la
+info.la
+edu.la
+gov.la
+per.la
+com.la
+org.la
+
+// lb : https://en.wikipedia.org/wiki/.lb
+// Submitted by registry <randy@psg.com>
+lb
+com.lb
+edu.lb
+gov.lb
+net.lb
+org.lb
+
+// lc : https://en.wikipedia.org/wiki/.lc
+// see also: http://www.nic.lc/rules.htm
+lc
+com.lc
+net.lc
+co.lc
+org.lc
+edu.lc
+gov.lc
+
+// li : https://en.wikipedia.org/wiki/.li
+li
+
+// lk : https://www.nic.lk/index.php/domain-registration/lk-domain-naming-structure
+lk
+gov.lk
+sch.lk
+net.lk
+int.lk
+com.lk
+org.lk
+edu.lk
+ngo.lk
+soc.lk
+web.lk
+ltd.lk
+assn.lk
+grp.lk
+hotel.lk
+ac.lk
+
+// lr : http://psg.com/dns/lr/lr.txt
+// Submitted by registry <randy@psg.com>
+lr
+com.lr
+edu.lr
+gov.lr
+org.lr
+net.lr
+
+// ls : http://www.nic.ls/
+// Confirmed by registry <lsadmin@nic.ls>
+ls
+ac.ls
+biz.ls
+co.ls
+edu.ls
+gov.ls
+info.ls
+net.ls
+org.ls
+sc.ls
+
+// lt : https://en.wikipedia.org/wiki/.lt
+lt
+// gov.lt : http://www.gov.lt/index_en.php
+gov.lt
+
+// lu : http://www.dns.lu/en/
+lu
+
+// lv : http://www.nic.lv/DNS/En/generic.php
+lv
+com.lv
+edu.lv
+gov.lv
+org.lv
+mil.lv
+id.lv
+net.lv
+asn.lv
+conf.lv
+
+// ly : http://www.nic.ly/regulations.php
+ly
+com.ly
+net.ly
+gov.ly
+plc.ly
+edu.ly
+sch.ly
+med.ly
+org.ly
+id.ly
+
+// ma : https://en.wikipedia.org/wiki/.ma
+// http://www.anrt.ma/fr/admin/download/upload/file_fr782.pdf
+ma
+co.ma
+net.ma
+gov.ma
+org.ma
+ac.ma
+press.ma
+
+// mc : http://www.nic.mc/
+mc
+tm.mc
+asso.mc
+
+// md : https://en.wikipedia.org/wiki/.md
+md
+
+// me : https://en.wikipedia.org/wiki/.me
+me
+co.me
+net.me
+org.me
+edu.me
+ac.me
+gov.me
+its.me
+priv.me
+
+// mg : http://nic.mg/nicmg/?page_id=39
+mg
+org.mg
+nom.mg
+gov.mg
+prd.mg
+tm.mg
+edu.mg
+mil.mg
+com.mg
+co.mg
+
+// mh : https://en.wikipedia.org/wiki/.mh
+mh
+
+// mil : https://en.wikipedia.org/wiki/.mil
+mil
+
+// mk : https://en.wikipedia.org/wiki/.mk
+// see also: http://dns.marnet.net.mk/postapka.php
+mk
+com.mk
+org.mk
+net.mk
+edu.mk
+gov.mk
+inf.mk
+name.mk
+
+// ml : http://www.gobin.info/domainname/ml-template.doc
+// see also: https://en.wikipedia.org/wiki/.ml
+ml
+com.ml
+edu.ml
+gouv.ml
+gov.ml
+net.ml
+org.ml
+presse.ml
+
+// mm : https://en.wikipedia.org/wiki/.mm
+*.mm
+
+// mn : https://en.wikipedia.org/wiki/.mn
+mn
+gov.mn
+edu.mn
+org.mn
+
+// mo : http://www.monic.net.mo/
+mo
+com.mo
+net.mo
+org.mo
+edu.mo
+gov.mo
+
+// mobi : https://en.wikipedia.org/wiki/.mobi
+mobi
+
+// mp : http://www.dot.mp/
+// Confirmed by registry <dcamacho@saipan.com> 2008-06-17
+mp
+
+// mq : https://en.wikipedia.org/wiki/.mq
+mq
+
+// mr : https://en.wikipedia.org/wiki/.mr
+mr
+gov.mr
+
+// ms : http://www.nic.ms/pdf/MS_Domain_Name_Rules.pdf
+ms
+com.ms
+edu.ms
+gov.ms
+net.ms
+org.ms
+
+// mt : https://www.nic.org.mt/go/policy
+// Submitted by registry <help@nic.org.mt>
+mt
+com.mt
+edu.mt
+net.mt
+org.mt
+
+// mu : https://en.wikipedia.org/wiki/.mu
+mu
+com.mu
+net.mu
+org.mu
+gov.mu
+ac.mu
+co.mu
+or.mu
+
+// museum : https://welcome.museum/wp-content/uploads/2018/05/20180525-Registration-Policy-MUSEUM-EN_VF-2.pdf https://welcome.museum/buy-your-dot-museum-2/
+museum
+
+// mv : https://en.wikipedia.org/wiki/.mv
+// "mv" included because, contra Wikipedia, google.mv exists.
+mv
+aero.mv
+biz.mv
+com.mv
+coop.mv
+edu.mv
+gov.mv
+info.mv
+int.mv
+mil.mv
+museum.mv
+name.mv
+net.mv
+org.mv
+pro.mv
+
+// mw : http://www.registrar.mw/
+mw
+ac.mw
+biz.mw
+co.mw
+com.mw
+coop.mw
+edu.mw
+gov.mw
+int.mw
+museum.mw
+net.mw
+org.mw
+
+// mx : http://www.nic.mx/
+// Submitted by registry <farias@nic.mx>
+mx
+com.mx
+org.mx
+gob.mx
+edu.mx
+net.mx
+
+// my : http://www.mynic.my/
+// Available strings: https://mynic.my/resources/domains/buying-a-domain/
+my
+biz.my
+com.my
+edu.my
+gov.my
+mil.my
+name.my
+net.my
+org.my
+
+// mz : http://www.uem.mz/
+// Submitted by registry <antonio@uem.mz>
+mz
+ac.mz
+adv.mz
+co.mz
+edu.mz
+gov.mz
+mil.mz
+net.mz
+org.mz
+
+// na : http://www.na-nic.com.na/
+// http://www.info.na/domain/
+na
+info.na
+pro.na
+name.na
+school.na
+or.na
+dr.na
+us.na
+mx.na
+ca.na
+in.na
+cc.na
+tv.na
+ws.na
+mobi.na
+co.na
+com.na
+org.na
+
+// name : has 2nd-level tlds, but there's no list of them
+name
+
+// nc : http://www.cctld.nc/
+nc
+asso.nc
+nom.nc
+
+// ne : https://en.wikipedia.org/wiki/.ne
+ne
+
+// net : https://en.wikipedia.org/wiki/.net
+net
+
+// nf : https://en.wikipedia.org/wiki/.nf
+nf
+com.nf
+net.nf
+per.nf
+rec.nf
+web.nf
+arts.nf
+firm.nf
+info.nf
+other.nf
+store.nf
+
+// ng : http://www.nira.org.ng/index.php/join-us/register-ng-domain/189-nira-slds
+ng
+com.ng
+edu.ng
+gov.ng
+i.ng
+mil.ng
+mobi.ng
+name.ng
+net.ng
+org.ng
+sch.ng
+
+// ni : http://www.nic.ni/
+ni
+ac.ni
+biz.ni
+co.ni
+com.ni
+edu.ni
+gob.ni
+in.ni
+info.ni
+int.ni
+mil.ni
+net.ni
+nom.ni
+org.ni
+web.ni
+
+// nl : https://en.wikipedia.org/wiki/.nl
+// https://www.sidn.nl/
+// ccTLD for the Netherlands
+nl
+
+// no : https://www.norid.no/en/om-domenenavn/regelverk-for-no/
+// Norid geographical second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-b/
+// Norid category second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-c/
+// Norid category second-level domains managed by parties other than Norid : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-d/
+// RSS feed: https://teknisk.norid.no/en/feed/
+no
+// Norid category second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-c/
+fhs.no
+vgs.no
+fylkesbibl.no
+folkebibl.no
+museum.no
+idrett.no
+priv.no
+// Norid category second-level domains managed by parties other than Norid : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-d/
+mil.no
+stat.no
+dep.no
+kommune.no
+herad.no
+// Norid geographical second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-b/
+// counties
+aa.no
+ah.no
+bu.no
+fm.no
+hl.no
+hm.no
+jan-mayen.no
+mr.no
+nl.no
+nt.no
+of.no
+ol.no
+oslo.no
+rl.no
+sf.no
+st.no
+svalbard.no
+tm.no
+tr.no
+va.no
+vf.no
+// primary and lower secondary schools per county
+gs.aa.no
+gs.ah.no
+gs.bu.no
+gs.fm.no
+gs.hl.no
+gs.hm.no
+gs.jan-mayen.no
+gs.mr.no
+gs.nl.no
+gs.nt.no
+gs.of.no
+gs.ol.no
+gs.oslo.no
+gs.rl.no
+gs.sf.no
+gs.st.no
+gs.svalbard.no
+gs.tm.no
+gs.tr.no
+gs.va.no
+gs.vf.no
+// cities
+akrehamn.no
+åkrehamn.no
+algard.no
+ålgård.no
+arna.no
+brumunddal.no
+bryne.no
+bronnoysund.no
+brønnøysund.no
+drobak.no
+drøbak.no
+egersund.no
+fetsund.no
+floro.no
+florø.no
+fredrikstad.no
+hokksund.no
+honefoss.no
+hønefoss.no
+jessheim.no
+jorpeland.no
+jørpeland.no
+kirkenes.no
+kopervik.no
+krokstadelva.no
+langevag.no
+langevåg.no
+leirvik.no
+mjondalen.no
+mjøndalen.no
+mo-i-rana.no
+mosjoen.no
+mosjøen.no
+nesoddtangen.no
+orkanger.no
+osoyro.no
+osøyro.no
+raholt.no
+råholt.no
+sandnessjoen.no
+sandnessjøen.no
+skedsmokorset.no
+slattum.no
+spjelkavik.no
+stathelle.no
+stavern.no
+stjordalshalsen.no
+stjørdalshalsen.no
+tananger.no
+tranby.no
+vossevangen.no
+// communities
+afjord.no
+åfjord.no
+agdenes.no
+al.no
+ål.no
+alesund.no
+ålesund.no
+alstahaug.no
+alta.no
+áltá.no
+alaheadju.no
+álaheadju.no
+alvdal.no
+amli.no
+åmli.no
+amot.no
+åmot.no
+andebu.no
+andoy.no
+andøy.no
+andasuolo.no
+ardal.no
+årdal.no
+aremark.no
+arendal.no
+ås.no
+aseral.no
+åseral.no
+asker.no
+askim.no
+askvoll.no
+askoy.no
+askøy.no
+asnes.no
+åsnes.no
+audnedaln.no
+aukra.no
+aure.no
+aurland.no
+aurskog-holand.no
+aurskog-høland.no
+austevoll.no
+austrheim.no
+averoy.no
+averøy.no
+balestrand.no
+ballangen.no
+balat.no
+bálát.no
+balsfjord.no
+bahccavuotna.no
+báhccavuotna.no
+bamble.no
+bardu.no
+beardu.no
+beiarn.no
+bajddar.no
+bájddar.no
+baidar.no
+báidár.no
+berg.no
+bergen.no
+berlevag.no
+berlevåg.no
+bearalvahki.no
+bearalváhki.no
+bindal.no
+birkenes.no
+bjarkoy.no
+bjarkøy.no
+bjerkreim.no
+bjugn.no
+bodo.no
+bodø.no
+badaddja.no
+bådåddjå.no
+budejju.no
+bokn.no
+bremanger.no
+bronnoy.no
+brønnøy.no
+bygland.no
+bykle.no
+barum.no
+bærum.no
+bo.telemark.no
+bø.telemark.no
+bo.nordland.no
+bø.nordland.no
+bievat.no
+bievát.no
+bomlo.no
+bømlo.no
+batsfjord.no
+båtsfjord.no
+bahcavuotna.no
+báhcavuotna.no
+dovre.no
+drammen.no
+drangedal.no
+dyroy.no
+dyrøy.no
+donna.no
+dønna.no
+eid.no
+eidfjord.no
+eidsberg.no
+eidskog.no
+eidsvoll.no
+eigersund.no
+elverum.no
+enebakk.no
+engerdal.no
+etne.no
+etnedal.no
+evenes.no
+evenassi.no
+evenášši.no
+evje-og-hornnes.no
+farsund.no
+fauske.no
+fuossko.no
+fuoisku.no
+fedje.no
+fet.no
+finnoy.no
+finnøy.no
+fitjar.no
+fjaler.no
+fjell.no
+flakstad.no
+flatanger.no
+flekkefjord.no
+flesberg.no
+flora.no
+fla.no
+flå.no
+folldal.no
+forsand.no
+fosnes.no
+frei.no
+frogn.no
+froland.no
+frosta.no
+frana.no
+fræna.no
+froya.no
+frøya.no
+fusa.no
+fyresdal.no
+forde.no
+førde.no
+gamvik.no
+gangaviika.no
+gáŋgaviika.no
+gaular.no
+gausdal.no
+gildeskal.no
+gildeskål.no
+giske.no
+gjemnes.no
+gjerdrum.no
+gjerstad.no
+gjesdal.no
+gjovik.no
+gjøvik.no
+gloppen.no
+gol.no
+gran.no
+grane.no
+granvin.no
+gratangen.no
+grimstad.no
+grong.no
+kraanghke.no
+kråanghke.no
+grue.no
+gulen.no
+hadsel.no
+halden.no
+halsa.no
+hamar.no
+hamaroy.no
+habmer.no
+hábmer.no
+hapmir.no
+hápmir.no
+hammerfest.no
+hammarfeasta.no
+hámmárfeasta.no
+haram.no
+hareid.no
+harstad.no
+hasvik.no
+aknoluokta.no
+ákŋoluokta.no
+hattfjelldal.no
+aarborte.no
+haugesund.no
+hemne.no
+hemnes.no
+hemsedal.no
+heroy.more-og-romsdal.no
+herøy.møre-og-romsdal.no
+heroy.nordland.no
+herøy.nordland.no
+hitra.no
+hjartdal.no
+hjelmeland.no
+hobol.no
+hobøl.no
+hof.no
+hol.no
+hole.no
+holmestrand.no
+holtalen.no
+holtålen.no
+hornindal.no
+horten.no
+hurdal.no
+hurum.no
+hvaler.no
+hyllestad.no
+hagebostad.no
+hægebostad.no
+hoyanger.no
+høyanger.no
+hoylandet.no
+høylandet.no
+ha.no
+hå.no
+ibestad.no
+inderoy.no
+inderøy.no
+iveland.no
+jevnaker.no
+jondal.no
+jolster.no
+jølster.no
+karasjok.no
+karasjohka.no
+kárášjohka.no
+karlsoy.no
+galsa.no
+gálsá.no
+karmoy.no
+karmøy.no
+kautokeino.no
+guovdageaidnu.no
+klepp.no
+klabu.no
+klæbu.no
+kongsberg.no
+kongsvinger.no
+kragero.no
+kragerø.no
+kristiansand.no
+kristiansund.no
+krodsherad.no
+krødsherad.no
+kvalsund.no
+rahkkeravju.no
+ráhkkerávju.no
+kvam.no
+kvinesdal.no
+kvinnherad.no
+kviteseid.no
+kvitsoy.no
+kvitsøy.no
+kvafjord.no
+kvæfjord.no
+giehtavuoatna.no
+kvanangen.no
+kvænangen.no
+navuotna.no
+návuotna.no
+kafjord.no
+kåfjord.no
+gaivuotna.no
+gáivuotna.no
+larvik.no
+lavangen.no
+lavagis.no
+loabat.no
+loabát.no
+lebesby.no
+davvesiida.no
+leikanger.no
+leirfjord.no
+leka.no
+leksvik.no
+lenvik.no
+leangaviika.no
+leaŋgaviika.no
+lesja.no
+levanger.no
+lier.no
+lierne.no
+lillehammer.no
+lillesand.no
+lindesnes.no
+lindas.no
+lindås.no
+lom.no
+loppa.no
+lahppi.no
+láhppi.no
+lund.no
+lunner.no
+luroy.no
+lurøy.no
+luster.no
+lyngdal.no
+lyngen.no
+ivgu.no
+lardal.no
+lerdal.no
+lærdal.no
+lodingen.no
+lødingen.no
+lorenskog.no
+lørenskog.no
+loten.no
+løten.no
+malvik.no
+masoy.no
+måsøy.no
+muosat.no
+muosát.no
+mandal.no
+marker.no
+marnardal.no
+masfjorden.no
+meland.no
+meldal.no
+melhus.no
+meloy.no
+meløy.no
+meraker.no
+meråker.no
+moareke.no
+moåreke.no
+midsund.no
+midtre-gauldal.no
+modalen.no
+modum.no
+molde.no
+moskenes.no
+moss.no
+mosvik.no
+malselv.no
+målselv.no
+malatvuopmi.no
+málatvuopmi.no
+namdalseid.no
+aejrie.no
+namsos.no
+namsskogan.no
+naamesjevuemie.no
+nååmesjevuemie.no
+laakesvuemie.no
+nannestad.no
+narvik.no
+narviika.no
+naustdal.no
+nedre-eiker.no
+nes.akershus.no
+nes.buskerud.no
+nesna.no
+nesodden.no
+nesseby.no
+unjarga.no
+unjárga.no
+nesset.no
+nissedal.no
+nittedal.no
+nord-aurdal.no
+nord-fron.no
+nord-odal.no
+norddal.no
+nordkapp.no
+davvenjarga.no
+davvenjárga.no
+nordre-land.no
+nordreisa.no
+raisa.no
+ráisa.no
+nore-og-uvdal.no
+notodden.no
+naroy.no
+nærøy.no
+notteroy.no
+nøtterøy.no
+odda.no
+oksnes.no
+øksnes.no
+oppdal.no
+oppegard.no
+oppegård.no
+orkdal.no
+orland.no
+ørland.no
+orskog.no
+ørskog.no
+orsta.no
+ørsta.no
+os.hedmark.no
+os.hordaland.no
+osen.no
+osteroy.no
+osterøy.no
+ostre-toten.no
+østre-toten.no
+overhalla.no
+ovre-eiker.no
+øvre-eiker.no
+oyer.no
+øyer.no
+oygarden.no
+øygarden.no
+oystre-slidre.no
+øystre-slidre.no
+porsanger.no
+porsangu.no
+porsáŋgu.no
+porsgrunn.no
+radoy.no
+radøy.no
+rakkestad.no
+rana.no
+ruovat.no
+randaberg.no
+rauma.no
+rendalen.no
+rennebu.no
+rennesoy.no
+rennesøy.no
+rindal.no
+ringebu.no
+ringerike.no
+ringsaker.no
+rissa.no
+risor.no
+risør.no
+roan.no
+rollag.no
+rygge.no
+ralingen.no
+rælingen.no
+rodoy.no
+rødøy.no
+romskog.no
+rømskog.no
+roros.no
+røros.no
+rost.no
+røst.no
+royken.no
+røyken.no
+royrvik.no
+røyrvik.no
+rade.no
+råde.no
+salangen.no
+siellak.no
+saltdal.no
+salat.no
+sálát.no
+sálat.no
+samnanger.no
+sande.more-og-romsdal.no
+sande.møre-og-romsdal.no
+sande.vestfold.no
+sandefjord.no
+sandnes.no
+sandoy.no
+sandøy.no
+sarpsborg.no
+sauda.no
+sauherad.no
+sel.no
+selbu.no
+selje.no
+seljord.no
+sigdal.no
+siljan.no
+sirdal.no
+skaun.no
+skedsmo.no
+ski.no
+skien.no
+skiptvet.no
+skjervoy.no
+skjervøy.no
+skierva.no
+skiervá.no
+skjak.no
+skjåk.no
+skodje.no
+skanland.no
+skånland.no
+skanit.no
+skánit.no
+smola.no
+smøla.no
+snillfjord.no
+snasa.no
+snåsa.no
+snoasa.no
+snaase.no
+snåase.no
+sogndal.no
+sokndal.no
+sola.no
+solund.no
+songdalen.no
+sortland.no
+spydeberg.no
+stange.no
+stavanger.no
+steigen.no
+steinkjer.no
+stjordal.no
+stjørdal.no
+stokke.no
+stor-elvdal.no
+stord.no
+stordal.no
+storfjord.no
+omasvuotna.no
+strand.no
+stranda.no
+stryn.no
+sula.no
+suldal.no
+sund.no
+sunndal.no
+surnadal.no
+sveio.no
+svelvik.no
+sykkylven.no
+sogne.no
+søgne.no
+somna.no
+sømna.no
+sondre-land.no
+søndre-land.no
+sor-aurdal.no
+sør-aurdal.no
+sor-fron.no
+sør-fron.no
+sor-odal.no
+sør-odal.no
+sor-varanger.no
+sør-varanger.no
+matta-varjjat.no
+mátta-várjjat.no
+sorfold.no
+sørfold.no
+sorreisa.no
+sørreisa.no
+sorum.no
+sørum.no
+tana.no
+deatnu.no
+time.no
+tingvoll.no
+tinn.no
+tjeldsund.no
+dielddanuorri.no
+tjome.no
+tjøme.no
+tokke.no
+tolga.no
+torsken.no
+tranoy.no
+tranøy.no
+tromso.no
+tromsø.no
+tromsa.no
+romsa.no
+trondheim.no
+troandin.no
+trysil.no
+trana.no
+træna.no
+trogstad.no
+trøgstad.no
+tvedestrand.no
+tydal.no
+tynset.no
+tysfjord.no
+divtasvuodna.no
+divttasvuotna.no
+tysnes.no
+tysvar.no
+tysvær.no
+tonsberg.no
+tønsberg.no
+ullensaker.no
+ullensvang.no
+ulvik.no
+utsira.no
+vadso.no
+vadsø.no
+cahcesuolo.no
+čáhcesuolo.no
+vaksdal.no
+valle.no
+vang.no
+vanylven.no
+vardo.no
+vardø.no
+varggat.no
+várggát.no
+vefsn.no
+vaapste.no
+vega.no
+vegarshei.no
+vegårshei.no
+vennesla.no
+verdal.no
+verran.no
+vestby.no
+vestnes.no
+vestre-slidre.no
+vestre-toten.no
+vestvagoy.no
+vestvågøy.no
+vevelstad.no
+vik.no
+vikna.no
+vindafjord.no
+volda.no
+voss.no
+varoy.no
+værøy.no
+vagan.no
+vågan.no
+voagat.no
+vagsoy.no
+vågsøy.no
+vaga.no
+vågå.no
+valer.ostfold.no
+våler.østfold.no
+valer.hedmark.no
+våler.hedmark.no
+
+// np : http://www.mos.com.np/register.html
+*.np
+
+// nr : http://cenpac.net.nr/dns/index.html
+// Submitted by registry <technician@cenpac.net.nr>
+nr
+biz.nr
+info.nr
+gov.nr
+edu.nr
+org.nr
+net.nr
+com.nr
+
+// nu : https://en.wikipedia.org/wiki/.nu
+nu
+
+// nz : https://en.wikipedia.org/wiki/.nz
+// Submitted by registry <jay@nzrs.net.nz>
+nz
+ac.nz
+co.nz
+cri.nz
+geek.nz
+gen.nz
+govt.nz
+health.nz
+iwi.nz
+kiwi.nz
+maori.nz
+mil.nz
+māori.nz
+net.nz
+org.nz
+parliament.nz
+school.nz
+
+// om : https://en.wikipedia.org/wiki/.om
+om
+co.om
+com.om
+edu.om
+gov.om
+med.om
+museum.om
+net.om
+org.om
+pro.om
+
+// onion : https://tools.ietf.org/html/rfc7686
+onion
+
+// org : https://en.wikipedia.org/wiki/.org
+org
+
+// pa : http://www.nic.pa/
+// Some additional second level "domains" resolve directly as hostnames, such as
+// pannet.pa, so we add a rule for "pa".
+pa
+ac.pa
+gob.pa
+com.pa
+org.pa
+sld.pa
+edu.pa
+net.pa
+ing.pa
+abo.pa
+med.pa
+nom.pa
+
+// pe : https://www.nic.pe/InformeFinalComision.pdf
+pe
+edu.pe
+gob.pe
+nom.pe
+mil.pe
+org.pe
+com.pe
+net.pe
+
+// pf : http://www.gobin.info/domainname/formulaire-pf.pdf
+pf
+com.pf
+org.pf
+edu.pf
+
+// pg : https://en.wikipedia.org/wiki/.pg
+*.pg
+
+// ph : http://www.domains.ph/FAQ2.asp
+// Submitted by registry <jed@email.com.ph>
+ph
+com.ph
+net.ph
+org.ph
+gov.ph
+edu.ph
+ngo.ph
+mil.ph
+i.ph
+
+// pk : http://pk5.pknic.net.pk/pk5/msgNamepk.PK
+pk
+com.pk
+net.pk
+edu.pk
+org.pk
+fam.pk
+biz.pk
+web.pk
+gov.pk
+gob.pk
+gok.pk
+gon.pk
+gop.pk
+gos.pk
+info.pk
+
+// pl http://www.dns.pl/english/index.html
+// Submitted by registry
+pl
+com.pl
+net.pl
+org.pl
+// pl functional domains (http://www.dns.pl/english/index.html)
+aid.pl
+agro.pl
+atm.pl
+auto.pl
+biz.pl
+edu.pl
+gmina.pl
+gsm.pl
+info.pl
+mail.pl
+miasta.pl
+media.pl
+mil.pl
+nieruchomosci.pl
+nom.pl
+pc.pl
+powiat.pl
+priv.pl
+realestate.pl
+rel.pl
+sex.pl
+shop.pl
+sklep.pl
+sos.pl
+szkola.pl
+targi.pl
+tm.pl
+tourism.pl
+travel.pl
+turystyka.pl
+// Government domains
+gov.pl
+ap.gov.pl
+griw.gov.pl
+ic.gov.pl
+is.gov.pl
+kmpsp.gov.pl
+konsulat.gov.pl
+kppsp.gov.pl
+kwp.gov.pl
+kwpsp.gov.pl
+mup.gov.pl
+mw.gov.pl
+oia.gov.pl
+oirm.gov.pl
+oke.gov.pl
+oow.gov.pl
+oschr.gov.pl
+oum.gov.pl
+pa.gov.pl
+pinb.gov.pl
+piw.gov.pl
+po.gov.pl
+pr.gov.pl
+psp.gov.pl
+psse.gov.pl
+pup.gov.pl
+rzgw.gov.pl
+sa.gov.pl
+sdn.gov.pl
+sko.gov.pl
+so.gov.pl
+sr.gov.pl
+starostwo.gov.pl
+ug.gov.pl
+ugim.gov.pl
+um.gov.pl
+umig.gov.pl
+upow.gov.pl
+uppo.gov.pl
+us.gov.pl
+uw.gov.pl
+uzs.gov.pl
+wif.gov.pl
+wiih.gov.pl
+winb.gov.pl
+wios.gov.pl
+witd.gov.pl
+wiw.gov.pl
+wkz.gov.pl
+wsa.gov.pl
+wskr.gov.pl
+wsse.gov.pl
+wuoz.gov.pl
+wzmiuw.gov.pl
+zp.gov.pl
+zpisdn.gov.pl
+// pl regional domains (http://www.dns.pl/english/index.html)
+augustow.pl
+babia-gora.pl
+bedzin.pl
+beskidy.pl
+bialowieza.pl
+bialystok.pl
+bielawa.pl
+bieszczady.pl
+boleslawiec.pl
+bydgoszcz.pl
+bytom.pl
+cieszyn.pl
+czeladz.pl
+czest.pl
+dlugoleka.pl
+elblag.pl
+elk.pl
+glogow.pl
+gniezno.pl
+gorlice.pl
+grajewo.pl
+ilawa.pl
+jaworzno.pl
+jelenia-gora.pl
+jgora.pl
+kalisz.pl
+kazimierz-dolny.pl
+karpacz.pl
+kartuzy.pl
+kaszuby.pl
+katowice.pl
+kepno.pl
+ketrzyn.pl
+klodzko.pl
+kobierzyce.pl
+kolobrzeg.pl
+konin.pl
+konskowola.pl
+kutno.pl
+lapy.pl
+lebork.pl
+legnica.pl
+lezajsk.pl
+limanowa.pl
+lomza.pl
+lowicz.pl
+lubin.pl
+lukow.pl
+malbork.pl
+malopolska.pl
+mazowsze.pl
+mazury.pl
+mielec.pl
+mielno.pl
+mragowo.pl
+naklo.pl
+nowaruda.pl
+nysa.pl
+olawa.pl
+olecko.pl
+olkusz.pl
+olsztyn.pl
+opoczno.pl
+opole.pl
+ostroda.pl
+ostroleka.pl
+ostrowiec.pl
+ostrowwlkp.pl
+pila.pl
+pisz.pl
+podhale.pl
+podlasie.pl
+polkowice.pl
+pomorze.pl
+pomorskie.pl
+prochowice.pl
+pruszkow.pl
+przeworsk.pl
+pulawy.pl
+radom.pl
+rawa-maz.pl
+rybnik.pl
+rzeszow.pl
+sanok.pl
+sejny.pl
+slask.pl
+slupsk.pl
+sosnowiec.pl
+stalowa-wola.pl
+skoczow.pl
+starachowice.pl
+stargard.pl
+suwalki.pl
+swidnica.pl
+swiebodzin.pl
+swinoujscie.pl
+szczecin.pl
+szczytno.pl
+tarnobrzeg.pl
+tgory.pl
+turek.pl
+tychy.pl
+ustka.pl
+walbrzych.pl
+warmia.pl
+warszawa.pl
+waw.pl
+wegrow.pl
+wielun.pl
+wlocl.pl
+wloclawek.pl
+wodzislaw.pl
+wolomin.pl
+wroclaw.pl
+zachpomor.pl
+zagan.pl
+zarow.pl
+zgora.pl
+zgorzelec.pl
+
+// pm : https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf
+pm
+
+// pn : http://www.government.pn/PnRegistry/policies.htm
+pn
+gov.pn
+co.pn
+org.pn
+edu.pn
+net.pn
+
+// post : https://en.wikipedia.org/wiki/.post
+post
+
+// pr : http://www.nic.pr/index.asp?f=1
+pr
+com.pr
+net.pr
+org.pr
+gov.pr
+edu.pr
+isla.pr
+pro.pr
+biz.pr
+info.pr
+name.pr
+// these aren't mentioned on nic.pr, but on https://en.wikipedia.org/wiki/.pr
+est.pr
+prof.pr
+ac.pr
+
+// pro : http://registry.pro/get-pro
+pro
+aaa.pro
+aca.pro
+acct.pro
+avocat.pro
+bar.pro
+cpa.pro
+eng.pro
+jur.pro
+law.pro
+med.pro
+recht.pro
+
+// ps : https://en.wikipedia.org/wiki/.ps
+// http://www.nic.ps/registration/policy.html#reg
+ps
+edu.ps
+gov.ps
+sec.ps
+plo.ps
+com.ps
+org.ps
+net.ps
+
+// pt : https://www.dns.pt/en/domain/pt-terms-and-conditions-registration-rules/
+pt
+net.pt
+gov.pt
+org.pt
+edu.pt
+int.pt
+publ.pt
+com.pt
+nome.pt
+
+// pw : https://en.wikipedia.org/wiki/.pw
+pw
+co.pw
+ne.pw
+or.pw
+ed.pw
+go.pw
+belau.pw
+
+// py : http://www.nic.py/pautas.html#seccion_9
+// Submitted by registry
+py
+com.py
+coop.py
+edu.py
+gov.py
+mil.py
+net.py
+org.py
+
+// qa : http://domains.qa/en/
+qa
+com.qa
+edu.qa
+gov.qa
+mil.qa
+name.qa
+net.qa
+org.qa
+sch.qa
+
+// re : https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf
+re
+asso.re
+com.re
+nom.re
+
+// ro : http://www.rotld.ro/
+ro
+arts.ro
+com.ro
+firm.ro
+info.ro
+nom.ro
+nt.ro
+org.ro
+rec.ro
+store.ro
+tm.ro
+www.ro
+
+// rs : https://www.rnids.rs/en/domains/national-domains
+rs
+ac.rs
+co.rs
+edu.rs
+gov.rs
+in.rs
+org.rs
+
+// ru : https://cctld.ru/files/pdf/docs/en/rules_ru-rf.pdf
+// Submitted by George Georgievsky <gug@cctld.ru>
+ru
+
+// rw : https://www.ricta.org.rw/sites/default/files/resources/registry_registrar_contract_0.pdf
+rw
+ac.rw
+co.rw
+coop.rw
+gov.rw
+mil.rw
+net.rw
+org.rw
+
+// sa : http://www.nic.net.sa/
+sa
+com.sa
+net.sa
+org.sa
+gov.sa
+med.sa
+pub.sa
+edu.sa
+sch.sa
+
+// sb : http://www.sbnic.net.sb/
+// Submitted by registry <lee.humphries@telekom.com.sb>
+sb
+com.sb
+edu.sb
+gov.sb
+net.sb
+org.sb
+
+// sc : http://www.nic.sc/
+sc
+com.sc
+gov.sc
+net.sc
+org.sc
+edu.sc
+
+// sd : http://www.isoc.sd/sudanic.isoc.sd/billing_pricing.htm
+// Submitted by registry <admin@isoc.sd>
+sd
+com.sd
+net.sd
+org.sd
+edu.sd
+med.sd
+tv.sd
+gov.sd
+info.sd
+
+// se : https://en.wikipedia.org/wiki/.se
+// Submitted by registry <patrik.wallstrom@iis.se>
+se
+a.se
+ac.se
+b.se
+bd.se
+brand.se
+c.se
+d.se
+e.se
+f.se
+fh.se
+fhsk.se
+fhv.se
+g.se
+h.se
+i.se
+k.se
+komforb.se
+kommunalforbund.se
+komvux.se
+l.se
+lanbib.se
+m.se
+n.se
+naturbruksgymn.se
+o.se
+org.se
+p.se
+parti.se
+pp.se
+press.se
+r.se
+s.se
+t.se
+tm.se
+u.se
+w.se
+x.se
+y.se
+z.se
+
+// sg : http://www.nic.net.sg/page/registration-policies-procedures-and-guidelines
+sg
+com.sg
+net.sg
+org.sg
+gov.sg
+edu.sg
+per.sg
+
+// sh : http://nic.sh/rules.htm
+sh
+com.sh
+net.sh
+gov.sh
+org.sh
+mil.sh
+
+// si : https://en.wikipedia.org/wiki/.si
+si
+
+// sj : No registrations at this time.
+// Submitted by registry <jarle@uninett.no>
+sj
+
+// sk : https://en.wikipedia.org/wiki/.sk
+// list of 2nd level domains ?
+sk
+
+// sl : http://www.nic.sl
+// Submitted by registry <adam@neoip.com>
+sl
+com.sl
+net.sl
+edu.sl
+gov.sl
+org.sl
+
+// sm : https://en.wikipedia.org/wiki/.sm
+sm
+
+// sn : https://en.wikipedia.org/wiki/.sn
+sn
+art.sn
+com.sn
+edu.sn
+gouv.sn
+org.sn
+perso.sn
+univ.sn
+
+// so : http://sonic.so/policies/
+so
+com.so
+edu.so
+gov.so
+me.so
+net.so
+org.so
+
+// sr : https://en.wikipedia.org/wiki/.sr
+sr
+
+// ss : https://registry.nic.ss/
+// Submitted by registry <technical@nic.ss>
+ss
+biz.ss
+com.ss
+edu.ss
+gov.ss
+me.ss
+net.ss
+org.ss
+sch.ss
+
+// st : http://www.nic.st/html/policyrules/
+st
+co.st
+com.st
+consulado.st
+edu.st
+embaixada.st
+mil.st
+net.st
+org.st
+principe.st
+saotome.st
+store.st
+
+// su : https://en.wikipedia.org/wiki/.su
+su
+
+// sv : http://www.svnet.org.sv/niveldos.pdf
+sv
+com.sv
+edu.sv
+gob.sv
+org.sv
+red.sv
+
+// sx : https://en.wikipedia.org/wiki/.sx
+// Submitted by registry <jcvignes@openregistry.com>
+sx
+gov.sx
+
+// sy : https://en.wikipedia.org/wiki/.sy
+// see also: http://www.gobin.info/domainname/sy.doc
+sy
+edu.sy
+gov.sy
+net.sy
+mil.sy
+com.sy
+org.sy
+
+// sz : https://en.wikipedia.org/wiki/.sz
+// http://www.sispa.org.sz/
+sz
+co.sz
+ac.sz
+org.sz
+
+// tc : https://en.wikipedia.org/wiki/.tc
+tc
+
+// td : https://en.wikipedia.org/wiki/.td
+td
+
+// tel: https://en.wikipedia.org/wiki/.tel
+// http://www.telnic.org/
+tel
+
+// tf : https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf
+tf
+
+// tg : https://en.wikipedia.org/wiki/.tg
+// http://www.nic.tg/
+tg
+
+// th : https://en.wikipedia.org/wiki/.th
+// Submitted by registry <krit@thains.co.th>
+th
+ac.th
+co.th
+go.th
+in.th
+mi.th
+net.th
+or.th
+
+// tj : http://www.nic.tj/policy.html
+tj
+ac.tj
+biz.tj
+co.tj
+com.tj
+edu.tj
+go.tj
+gov.tj
+int.tj
+mil.tj
+name.tj
+net.tj
+nic.tj
+org.tj
+test.tj
+web.tj
+
+// tk : https://en.wikipedia.org/wiki/.tk
+tk
+
+// tl : https://en.wikipedia.org/wiki/.tl
+tl
+gov.tl
+
+// tm : http://www.nic.tm/local.html
+tm
+com.tm
+co.tm
+org.tm
+net.tm
+nom.tm
+gov.tm
+mil.tm
+edu.tm
+
+// tn : http://www.registre.tn/fr/
+// https://whois.ati.tn/
+tn
+com.tn
+ens.tn
+fin.tn
+gov.tn
+ind.tn
+info.tn
+intl.tn
+mincom.tn
+nat.tn
+net.tn
+org.tn
+perso.tn
+tourism.tn
+
+// to : https://en.wikipedia.org/wiki/.to
+// Submitted by registry <egullich@colo.to>
+to
+com.to
+gov.to
+net.to
+org.to
+edu.to
+mil.to
+
+// tr : https://nic.tr/
+// https://nic.tr/forms/eng/policies.pdf
+// https://nic.tr/index.php?USRACTN=PRICELST
+tr
+av.tr
+bbs.tr
+bel.tr
+biz.tr
+com.tr
+dr.tr
+edu.tr
+gen.tr
+gov.tr
+info.tr
+mil.tr
+k12.tr
+kep.tr
+name.tr
+net.tr
+org.tr
+pol.tr
+tel.tr
+tsk.tr
+tv.tr
+web.tr
+// Used by Northern Cyprus
+nc.tr
+// Used by government agencies of Northern Cyprus
+gov.nc.tr
+
+// tt : http://www.nic.tt/
+tt
+co.tt
+com.tt
+org.tt
+net.tt
+biz.tt
+info.tt
+pro.tt
+int.tt
+coop.tt
+jobs.tt
+mobi.tt
+travel.tt
+museum.tt
+aero.tt
+name.tt
+gov.tt
+edu.tt
+
+// tv : https://en.wikipedia.org/wiki/.tv
+// Not listing any 2LDs as reserved since none seem to exist in practice,
+// Wikipedia notwithstanding.
+tv
+
+// tw : https://en.wikipedia.org/wiki/.tw
+tw
+edu.tw
+gov.tw
+mil.tw
+com.tw
+net.tw
+org.tw
+idv.tw
+game.tw
+ebiz.tw
+club.tw
+網路.tw
+組織.tw
+商業.tw
+
+// tz : http://www.tznic.or.tz/index.php/domains
+// Submitted by registry <manager@tznic.or.tz>
+tz
+ac.tz
+co.tz
+go.tz
+hotel.tz
+info.tz
+me.tz
+mil.tz
+mobi.tz
+ne.tz
+or.tz
+sc.tz
+tv.tz
+
+// ua : https://hostmaster.ua/policy/?ua
+// Submitted by registry <dk@cctld.ua>
+ua
+// ua 2LD
+com.ua
+edu.ua
+gov.ua
+in.ua
+net.ua
+org.ua
+// ua geographic names
+// https://hostmaster.ua/2ld/
+cherkassy.ua
+cherkasy.ua
+chernigov.ua
+chernihiv.ua
+chernivtsi.ua
+chernovtsy.ua
+ck.ua
+cn.ua
+cr.ua
+crimea.ua
+cv.ua
+dn.ua
+dnepropetrovsk.ua
+dnipropetrovsk.ua
+donetsk.ua
+dp.ua
+if.ua
+ivano-frankivsk.ua
+kh.ua
+kharkiv.ua
+kharkov.ua
+kherson.ua
+khmelnitskiy.ua
+khmelnytskyi.ua
+kiev.ua
+kirovograd.ua
+km.ua
+kr.ua
+kropyvnytskyi.ua
+krym.ua
+ks.ua
+kv.ua
+kyiv.ua
+lg.ua
+lt.ua
+lugansk.ua
+luhansk.ua
+lutsk.ua
+lv.ua
+lviv.ua
+mk.ua
+mykolaiv.ua
+nikolaev.ua
+od.ua
+odesa.ua
+odessa.ua
+pl.ua
+poltava.ua
+rivne.ua
+rovno.ua
+rv.ua
+sb.ua
+sebastopol.ua
+sevastopol.ua
+sm.ua
+sumy.ua
+te.ua
+ternopil.ua
+uz.ua
+uzhgorod.ua
+uzhhorod.ua
+vinnica.ua
+vinnytsia.ua
+vn.ua
+volyn.ua
+yalta.ua
+zakarpattia.ua
+zaporizhzhe.ua
+zaporizhzhia.ua
+zhitomir.ua
+zhytomyr.ua
+zp.ua
+zt.ua
+
+// ug : https://www.registry.co.ug/
+ug
+co.ug
+or.ug
+ac.ug
+sc.ug
+go.ug
+ne.ug
+com.ug
+org.ug
+
+// uk : https://en.wikipedia.org/wiki/.uk
+// Submitted by registry <Michael.Daly@nominet.org.uk>
+uk
+ac.uk
+co.uk
+gov.uk
+ltd.uk
+me.uk
+net.uk
+nhs.uk
+org.uk
+plc.uk
+police.uk
+*.sch.uk
+
+// us : https://en.wikipedia.org/wiki/.us
+us
+dni.us
+fed.us
+isa.us
+kids.us
+nsn.us
+// us geographic names
+ak.us
+al.us
+ar.us
+as.us
+az.us
+ca.us
+co.us
+ct.us
+dc.us
+de.us
+fl.us
+ga.us
+gu.us
+hi.us
+ia.us
+id.us
+il.us
+in.us
+ks.us
+ky.us
+la.us
+ma.us
+md.us
+me.us
+mi.us
+mn.us
+mo.us
+ms.us
+mt.us
+nc.us
+nd.us
+ne.us
+nh.us
+nj.us
+nm.us
+nv.us
+ny.us
+oh.us
+ok.us
+or.us
+pa.us
+pr.us
+ri.us
+sc.us
+sd.us
+tn.us
+tx.us
+ut.us
+vi.us
+vt.us
+va.us
+wa.us
+wi.us
+wv.us
+wy.us
+// The registrar notes several more specific domains available in each state,
+// such as state.*.us, dst.*.us, etc., but resolution of these is somewhat
+// haphazard; in some states these domains resolve as addresses, while in others
+// only subdomains are available, or even nothing at all. We include the
+// most common ones where it's clear that different sites are different
+// entities.
+k12.ak.us
+k12.al.us
+k12.ar.us
+k12.as.us
+k12.az.us
+k12.ca.us
+k12.co.us
+k12.ct.us
+k12.dc.us
+k12.fl.us
+k12.ga.us
+k12.gu.us
+// k12.hi.us Bug 614565 - Hawaii has a state-wide DOE login
+k12.ia.us
+k12.id.us
+k12.il.us
+k12.in.us
+k12.ks.us
+k12.ky.us
+k12.la.us
+k12.ma.us
+k12.md.us
+k12.me.us
+k12.mi.us
+k12.mn.us
+k12.mo.us
+k12.ms.us
+k12.mt.us
+k12.nc.us
+// k12.nd.us Bug 1028347 - Removed at request of Travis Rosso <trossow@nd.gov>
+k12.ne.us
+k12.nh.us
+k12.nj.us
+k12.nm.us
+k12.nv.us
+k12.ny.us
+k12.oh.us
+k12.ok.us
+k12.or.us
+k12.pa.us
+k12.pr.us
+// k12.ri.us Removed at request of Kim Cournoyer <netsupport@staff.ri.net>
+k12.sc.us
+// k12.sd.us Bug 934131 - Removed at request of James Booze <James.Booze@k12.sd.us>
+k12.tn.us
+k12.tx.us
+k12.ut.us
+k12.vi.us
+k12.vt.us
+k12.va.us
+k12.wa.us
+k12.wi.us
+// k12.wv.us Bug 947705 - Removed at request of Verne Britton <verne@wvnet.edu>
+k12.wy.us
+cc.ak.us
+cc.al.us
+cc.ar.us
+cc.as.us
+cc.az.us
+cc.ca.us
+cc.co.us
+cc.ct.us
+cc.dc.us
+cc.de.us
+cc.fl.us
+cc.ga.us
+cc.gu.us
+cc.hi.us
+cc.ia.us
+cc.id.us
+cc.il.us
+cc.in.us
+cc.ks.us
+cc.ky.us
+cc.la.us
+cc.ma.us
+cc.md.us
+cc.me.us
+cc.mi.us
+cc.mn.us
+cc.mo.us
+cc.ms.us
+cc.mt.us
+cc.nc.us
+cc.nd.us
+cc.ne.us
+cc.nh.us
+cc.nj.us
+cc.nm.us
+cc.nv.us
+cc.ny.us
+cc.oh.us
+cc.ok.us
+cc.or.us
+cc.pa.us
+cc.pr.us
+cc.ri.us
+cc.sc.us
+cc.sd.us
+cc.tn.us
+cc.tx.us
+cc.ut.us
+cc.vi.us
+cc.vt.us
+cc.va.us
+cc.wa.us
+cc.wi.us
+cc.wv.us
+cc.wy.us
+lib.ak.us
+lib.al.us
+lib.ar.us
+lib.as.us
+lib.az.us
+lib.ca.us
+lib.co.us
+lib.ct.us
+lib.dc.us
+// lib.de.us Issue #243 - Moved to Private section at request of Ed Moore <Ed.Moore@lib.de.us>
+lib.fl.us
+lib.ga.us
+lib.gu.us
+lib.hi.us
+lib.ia.us
+lib.id.us
+lib.il.us
+lib.in.us
+lib.ks.us
+lib.ky.us
+lib.la.us
+lib.ma.us
+lib.md.us
+lib.me.us
+lib.mi.us
+lib.mn.us
+lib.mo.us
+lib.ms.us
+lib.mt.us
+lib.nc.us
+lib.nd.us
+lib.ne.us
+lib.nh.us
+lib.nj.us
+lib.nm.us
+lib.nv.us
+lib.ny.us
+lib.oh.us
+lib.ok.us
+lib.or.us
+lib.pa.us
+lib.pr.us
+lib.ri.us
+lib.sc.us
+lib.sd.us
+lib.tn.us
+lib.tx.us
+lib.ut.us
+lib.vi.us
+lib.vt.us
+lib.va.us
+lib.wa.us
+lib.wi.us
+// lib.wv.us Bug 941670 - Removed at request of Larry W Arnold <arnold@wvlc.lib.wv.us>
+lib.wy.us
+// k12.ma.us contains school districts in Massachusetts. The 4LDs are
+// managed independently except for private (PVT), charter (CHTR) and
+// parochial (PAROCH) schools. Those are delegated directly to the
+// 5LD operators. <k12-ma-hostmaster _ at _ rsuc.gweep.net>
+pvt.k12.ma.us
+chtr.k12.ma.us
+paroch.k12.ma.us
+// Merit Network, Inc. maintains the registry for =~ /(k12|cc|lib).mi.us/ and the following
+// see also: http://domreg.merit.edu
+// see also: whois -h whois.domreg.merit.edu help
+ann-arbor.mi.us
+cog.mi.us
+dst.mi.us
+eaton.mi.us
+gen.mi.us
+mus.mi.us
+tec.mi.us
+washtenaw.mi.us
+
+// uy : http://www.nic.org.uy/
+uy
+com.uy
+edu.uy
+gub.uy
+mil.uy
+net.uy
+org.uy
+
+// uz : http://www.reg.uz/
+uz
+co.uz
+com.uz
+net.uz
+org.uz
+
+// va : https://en.wikipedia.org/wiki/.va
+va
+
+// vc : https://en.wikipedia.org/wiki/.vc
+// Submitted by registry <kshah@ca.afilias.info>
+vc
+com.vc
+net.vc
+org.vc
+gov.vc
+mil.vc
+edu.vc
+
+// ve : https://registro.nic.ve/
+// Submitted by registry nic@nic.ve and nicve@conatel.gob.ve
+ve
+arts.ve
+bib.ve
+co.ve
+com.ve
+e12.ve
+edu.ve
+firm.ve
+gob.ve
+gov.ve
+info.ve
+int.ve
+mil.ve
+net.ve
+nom.ve
+org.ve
+rar.ve
+rec.ve
+store.ve
+tec.ve
+web.ve
+
+// vg : https://en.wikipedia.org/wiki/.vg
+vg
+
+// vi : http://www.nic.vi/newdomainform.htm
+// http://www.nic.vi/Domain_Rules/body_domain_rules.html indicates some other
+// TLDs are "reserved", such as edu.vi and gov.vi, but doesn't actually say they
+// are available for registration (which they do not seem to be).
+vi
+co.vi
+com.vi
+k12.vi
+net.vi
+org.vi
+
+// vn : https://www.vnnic.vn/en/domain/cctld-vn
+// https://vnnic.vn/sites/default/files/tailieu/vn.cctld.domains.txt
+vn
+ac.vn
+ai.vn
+biz.vn
+com.vn
+edu.vn
+gov.vn
+health.vn
+id.vn
+info.vn
+int.vn
+io.vn
+name.vn
+net.vn
+org.vn
+pro.vn
+
+// vn geographical names
+angiang.vn
+bacgiang.vn
+backan.vn
+baclieu.vn
+bacninh.vn
+baria-vungtau.vn
+bentre.vn
+binhdinh.vn
+binhduong.vn
+binhphuoc.vn
+binhthuan.vn
+camau.vn
+cantho.vn
+caobang.vn
+daklak.vn
+daknong.vn
+danang.vn
+dienbien.vn
+dongnai.vn
+dongthap.vn
+gialai.vn
+hagiang.vn
+haiduong.vn
+haiphong.vn
+hanam.vn
+hanoi.vn
+hatinh.vn
+haugiang.vn
+hoabinh.vn
+hungyen.vn
+khanhhoa.vn
+kiengiang.vn
+kontum.vn
+laichau.vn
+lamdong.vn
+langson.vn
+laocai.vn
+longan.vn
+namdinh.vn
+nghean.vn
+ninhbinh.vn
+ninhthuan.vn
+phutho.vn
+phuyen.vn
+quangbinh.vn
+quangnam.vn
+quangngai.vn
+quangninh.vn
+quangtri.vn
+soctrang.vn
+sonla.vn
+tayninh.vn
+thaibinh.vn
+thainguyen.vn
+thanhhoa.vn
+thanhphohochiminh.vn
+thuathienhue.vn
+tiengiang.vn
+travinh.vn
+tuyenquang.vn
+vinhlong.vn
+vinhphuc.vn
+yenbai.vn
+
+// vu : https://en.wikipedia.org/wiki/.vu
+// http://www.vunic.vu/
+vu
+com.vu
+edu.vu
+net.vu
+org.vu
+
+// wf : https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf
+wf
+
+// ws : https://en.wikipedia.org/wiki/.ws
+// http://samoanic.ws/index.dhtml
+ws
+com.ws
+net.ws
+org.ws
+gov.ws
+edu.ws
+
+// yt : https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf
+yt
+
+// IDN ccTLDs
+// When submitting patches, please maintain a sort by ISO 3166 ccTLD, then
+// U-label, and follow this format:
+// // A-Label ("<Latin renderings>", <language name>[, variant info]) : <ISO 3166 ccTLD>
+// // [sponsoring org]
+// U-Label
+
+// xn--mgbaam7a8h ("Emerat", Arabic) : AE
+// http://nic.ae/english/arabicdomain/rules.jsp
+امارات
+
+// xn--y9a3aq ("hye", Armenian) : AM
+// ISOC AM (operated by .am Registry)
+հայ
+
+// xn--54b7fta0cc ("Bangla", Bangla) : BD
+বাংলা
+
+// xn--90ae ("bg", Bulgarian) : BG
+бг
+
+// xn--mgbcpq6gpa1a ("albahrain", Arabic) : BH
+البحرين
+
+// xn--90ais ("bel", Belarusian/Russian Cyrillic) : BY
+// Operated by .by registry
+бел
+
+// xn--fiqs8s ("Zhongguo/China", Chinese, Simplified) : CN
+// CNNIC
+// http://cnnic.cn/html/Dir/2005/10/11/3218.htm
+中国
+
+// xn--fiqz9s ("Zhongguo/China", Chinese, Traditional) : CN
+// CNNIC
+// http://cnnic.cn/html/Dir/2005/10/11/3218.htm
+中國
+
+// xn--lgbbat1ad8j ("Algeria/Al Jazair", Arabic) : DZ
+الجزائر
+
+// xn--wgbh1c ("Egypt/Masr", Arabic) : EG
+// http://www.dotmasr.eg/
+مصر
+
+// xn--e1a4c ("eu", Cyrillic) : EU
+// https://eurid.eu
+ею
+
+// xn--qxa6a ("eu", Greek) : EU
+// https://eurid.eu
+ευ
+
+// xn--mgbah1a3hjkrd ("Mauritania", Arabic) : MR
+موريتانيا
+
+// xn--node ("ge", Georgian Mkhedruli) : GE
+გე
+
+// xn--qxam ("el", Greek) : GR
+// Hellenic Ministry of Infrastructure, Transport, and Networks
+ελ
+
+// xn--j6w193g ("Hong Kong", Chinese) : HK
+// https://www.hkirc.hk
+// Submitted by registry <hk.tech@hkirc.hk>
+// https://www.hkirc.hk/content.jsp?id=30#!/34
+香港
+公司.香港
+教育.香港
+政府.香港
+個人.香港
+網絡.香港
+組織.香港
+
+// xn--2scrj9c ("Bharat", Kannada) : IN
+// India
+ಭಾರತ
+
+// xn--3hcrj9c ("Bharat", Oriya) : IN
+// India
+ଭାରତ
+
+// xn--45br5cyl ("Bharatam", Assamese) : IN
+// India
+ভাৰত
+
+// xn--h2breg3eve ("Bharatam", Sanskrit) : IN
+// India
+भारतम्
+
+// xn--h2brj9c8c ("Bharot", Santali) : IN
+// India
+भारोत
+
+// xn--mgbgu82a ("Bharat", Sindhi) : IN
+// India
+ڀارت
+
+// xn--rvc1e0am3e ("Bharatam", Malayalam) : IN
+// India
+ഭാരതം
+
+// xn--h2brj9c ("Bharat", Devanagari) : IN
+// India
+भारत
+
+// xn--mgbbh1a ("Bharat", Kashmiri) : IN
+// India
+بارت
+
+// xn--mgbbh1a71e ("Bharat", Arabic) : IN
+// India
+بھارت
+
+// xn--fpcrj9c3d ("Bharat", Telugu) : IN
+// India
+భారత్
+
+// xn--gecrj9c ("Bharat", Gujarati) : IN
+// India
+ભારત
+
+// xn--s9brj9c ("Bharat", Gurmukhi) : IN
+// India
+ਭਾਰਤ
+
+// xn--45brj9c ("Bharat", Bengali) : IN
+// India
+ভারত
+
+// xn--xkc2dl3a5ee0h ("India", Tamil) : IN
+// India
+இந்தியா
+
+// xn--mgba3a4f16a ("Iran", Persian) : IR
+ایران
+
+// xn--mgba3a4fra ("Iran", Arabic) : IR
+ايران
+
+// xn--mgbtx2b ("Iraq", Arabic) : IQ
+// Communications and Media Commission
+عراق
+
+// xn--mgbayh7gpa ("al-Ordon", Arabic) : JO
+// National Information Technology Center (NITC)
+// Royal Scientific Society, Al-Jubeiha
+الاردن
+
+// xn--3e0b707e ("Republic of Korea", Hangul) : KR
+한국
+
+// xn--80ao21a ("Kaz", Kazakh) : KZ
+қаз
+
+// xn--q7ce6a ("Lao", Lao) : LA
+ລາວ
+
+// xn--fzc2c9e2c ("Lanka", Sinhalese-Sinhala) : LK
+// https://nic.lk
+ලංකා
+
+// xn--xkc2al3hye2a ("Ilangai", Tamil) : LK
+// https://nic.lk
+இலங்கை
+
+// xn--mgbc0a9azcg ("Morocco/al-Maghrib", Arabic) : MA
+المغرب
+
+// xn--d1alf ("mkd", Macedonian) : MK
+// MARnet
+мкд
+
+// xn--l1acc ("mon", Mongolian) : MN
+мон
+
+// xn--mix891f ("Macao", Chinese, Traditional) : MO
+// MONIC / HNET Asia (Registry Operator for .mo)
+澳門
+
+// xn--mix082f ("Macao", Chinese, Simplified) : MO
+澳门
+
+// xn--mgbx4cd0ab ("Malaysia", Malay) : MY
+مليسيا
+
+// xn--mgb9awbf ("Oman", Arabic) : OM
+عمان
+
+// xn--mgbai9azgqp6j ("Pakistan", Urdu/Arabic) : PK
+پاکستان
+
+// xn--mgbai9a5eva00b ("Pakistan", Urdu/Arabic, variant) : PK
+پاكستان
+
+// xn--ygbi2ammx ("Falasteen", Arabic) : PS
+// The Palestinian National Internet Naming Authority (PNINA)
+// http://www.pnina.ps
+فلسطين
+
+// xn--90a3ac ("srb", Cyrillic) : RS
+// https://www.rnids.rs/en/domains/national-domains
+срб
+пр.срб
+орг.срб
+обр.срб
+од.срб
+упр.срб
+ак.срб
+
+// xn--p1ai ("rf", Russian-Cyrillic) : RU
+// https://cctld.ru/files/pdf/docs/en/rules_ru-rf.pdf
+// Submitted by George Georgievsky <gug@cctld.ru>
+рф
+
+// xn--wgbl6a ("Qatar", Arabic) : QA
+// http://www.ict.gov.qa/
+قطر
+
+// xn--mgberp4a5d4ar ("AlSaudiah", Arabic) : SA
+// http://www.nic.net.sa/
+السعودية
+
+// xn--mgberp4a5d4a87g ("AlSaudiah", Arabic, variant) : SA
+السعودیة
+
+// xn--mgbqly7c0a67fbc ("AlSaudiah", Arabic, variant) : SA
+السعودیۃ
+
+// xn--mgbqly7cvafr ("AlSaudiah", Arabic, variant) : SA
+السعوديه
+
+// xn--mgbpl2fh ("sudan", Arabic) : SD
+// Operated by .sd registry
+سودان
+
+// xn--yfro4i67o Singapore ("Singapore", Chinese) : SG
+新加坡
+
+// xn--clchc0ea0b2g2a9gcd ("Singapore", Tamil) : SG
+சிங்கப்பூர்
+
+// xn--ogbpf8fl ("Syria", Arabic) : SY
+سورية
+
+// xn--mgbtf8fl ("Syria", Arabic, variant) : SY
+سوريا
+
+// xn--o3cw4h ("Thai", Thai) : TH
+// http://www.thnic.co.th
+ไทย
+ศึกษา.ไทย
+ธุรกิจ.ไทย
+รัฐบาล.ไทย
+ทหาร.ไทย
+เน็ต.ไทย
+องค์กร.ไทย
+
+// xn--pgbs0dh ("Tunisia", Arabic) : TN
+// http://nic.tn
+تونس
+
+// xn--kpry57d ("Taiwan", Chinese, Traditional) : TW
+// http://www.twnic.net/english/dn/dn_07a.htm
+台灣
+
+// xn--kprw13d ("Taiwan", Chinese, Simplified) : TW
+// http://www.twnic.net/english/dn/dn_07a.htm
+台湾
+
+// xn--nnx388a ("Taiwan", Chinese, variant) : TW
+臺灣
+
+// xn--j1amh ("ukr", Cyrillic) : UA
+укр
+
+// xn--mgb2ddes ("AlYemen", Arabic) : YE
+اليمن
+
+// xxx : http://icmregistry.com
+xxx
+
+// ye : http://www.y.net.ye/services/domain_name.htm
+ye
+com.ye
+edu.ye
+gov.ye
+net.ye
+mil.ye
+org.ye
+
+// za : https://www.zadna.org.za/content/page/domain-information/
+ac.za
+agric.za
+alt.za
+co.za
+edu.za
+gov.za
+grondar.za
+law.za
+mil.za
+net.za
+ngo.za
+nic.za
+nis.za
+nom.za
+org.za
+school.za
+tm.za
+web.za
+
+// zm : https://zicta.zm/
+// Submitted by registry <info@zicta.zm>
+zm
+ac.zm
+biz.zm
+co.zm
+com.zm
+edu.zm
+gov.zm
+info.zm
+mil.zm
+net.zm
+org.zm
+sch.zm
+
+// zw : https://www.potraz.gov.zw/
+// Confirmed by registry <bmtengwa@potraz.gov.zw> 2017-01-25
+zw
+ac.zw
+co.zw
+gov.zw
+mil.zw
+org.zw
+
+
+// newGTLDs
+
+// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2024-01-06T15:12:04Z
+// This list is auto-generated, don't edit it manually.
+// aaa : American Automobile Association, Inc.
+// https://www.iana.org/domains/root/db/aaa.html
+aaa
+
+// aarp : AARP
+// https://www.iana.org/domains/root/db/aarp.html
+aarp
+
+// abb : ABB Ltd
+// https://www.iana.org/domains/root/db/abb.html
+abb
+
+// abbott : Abbott Laboratories, Inc.
+// https://www.iana.org/domains/root/db/abbott.html
+abbott
+
+// abbvie : AbbVie Inc.
+// https://www.iana.org/domains/root/db/abbvie.html
+abbvie
+
+// abc : Disney Enterprises, Inc.
+// https://www.iana.org/domains/root/db/abc.html
+abc
+
+// able : Able Inc.
+// https://www.iana.org/domains/root/db/able.html
+able
+
+// abogado : Registry Services, LLC
+// https://www.iana.org/domains/root/db/abogado.html
+abogado
+
+// abudhabi : Abu Dhabi Systems and Information Centre
+// https://www.iana.org/domains/root/db/abudhabi.html
+abudhabi
+
+// academy : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/academy.html
+academy
+
+// accenture : Accenture plc
+// https://www.iana.org/domains/root/db/accenture.html
+accenture
+
+// accountant : dot Accountant Limited
+// https://www.iana.org/domains/root/db/accountant.html
+accountant
+
+// accountants : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/accountants.html
+accountants
+
+// aco : ACO Severin Ahlmann GmbH & Co. KG
+// https://www.iana.org/domains/root/db/aco.html
+aco
+
+// actor : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/actor.html
+actor
+
+// ads : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/ads.html
+ads
+
+// adult : ICM Registry AD LLC
+// https://www.iana.org/domains/root/db/adult.html
+adult
+
+// aeg : Aktiebolaget Electrolux
+// https://www.iana.org/domains/root/db/aeg.html
+aeg
+
+// aetna : Aetna Life Insurance Company
+// https://www.iana.org/domains/root/db/aetna.html
+aetna
+
+// afl : Australian Football League
+// https://www.iana.org/domains/root/db/afl.html
+afl
+
+// africa : ZA Central Registry NPC trading as Registry.Africa
+// https://www.iana.org/domains/root/db/africa.html
+africa
+
+// agakhan : Fondation Aga Khan (Aga Khan Foundation)
+// https://www.iana.org/domains/root/db/agakhan.html
+agakhan
+
+// agency : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/agency.html
+agency
+
+// aig : American International Group, Inc.
+// https://www.iana.org/domains/root/db/aig.html
+aig
+
+// airbus : Airbus S.A.S.
+// https://www.iana.org/domains/root/db/airbus.html
+airbus
+
+// airforce : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/airforce.html
+airforce
+
+// airtel : Bharti Airtel Limited
+// https://www.iana.org/domains/root/db/airtel.html
+airtel
+
+// akdn : Fondation Aga Khan (Aga Khan Foundation)
+// https://www.iana.org/domains/root/db/akdn.html
+akdn
+
+// alibaba : Alibaba Group Holding Limited
+// https://www.iana.org/domains/root/db/alibaba.html
+alibaba
+
+// alipay : Alibaba Group Holding Limited
+// https://www.iana.org/domains/root/db/alipay.html
+alipay
+
+// allfinanz : Allfinanz Deutsche Vermögensberatung Aktiengesellschaft
+// https://www.iana.org/domains/root/db/allfinanz.html
+allfinanz
+
+// allstate : Allstate Fire and Casualty Insurance Company
+// https://www.iana.org/domains/root/db/allstate.html
+allstate
+
+// ally : Ally Financial Inc.
+// https://www.iana.org/domains/root/db/ally.html
+ally
+
+// alsace : Region Grand Est
+// https://www.iana.org/domains/root/db/alsace.html
+alsace
+
+// alstom : ALSTOM
+// https://www.iana.org/domains/root/db/alstom.html
+alstom
+
+// amazon : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/amazon.html
+amazon
+
+// americanexpress : American Express Travel Related Services Company, Inc.
+// https://www.iana.org/domains/root/db/americanexpress.html
+americanexpress
+
+// americanfamily : AmFam, Inc.
+// https://www.iana.org/domains/root/db/americanfamily.html
+americanfamily
+
+// amex : American Express Travel Related Services Company, Inc.
+// https://www.iana.org/domains/root/db/amex.html
+amex
+
+// amfam : AmFam, Inc.
+// https://www.iana.org/domains/root/db/amfam.html
+amfam
+
+// amica : Amica Mutual Insurance Company
+// https://www.iana.org/domains/root/db/amica.html
+amica
+
+// amsterdam : Gemeente Amsterdam
+// https://www.iana.org/domains/root/db/amsterdam.html
+amsterdam
+
+// analytics : Campus IP LLC
+// https://www.iana.org/domains/root/db/analytics.html
+analytics
+
+// android : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/android.html
+android
+
+// anquan : Beijing Qihu Keji Co., Ltd.
+// https://www.iana.org/domains/root/db/anquan.html
+anquan
+
+// anz : Australia and New Zealand Banking Group Limited
+// https://www.iana.org/domains/root/db/anz.html
+anz
+
+// aol : Oath Inc.
+// https://www.iana.org/domains/root/db/aol.html
+aol
+
+// apartments : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/apartments.html
+apartments
+
+// app : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/app.html
+app
+
+// apple : Apple Inc.
+// https://www.iana.org/domains/root/db/apple.html
+apple
+
+// aquarelle : Aquarelle.com
+// https://www.iana.org/domains/root/db/aquarelle.html
+aquarelle
+
+// arab : League of Arab States
+// https://www.iana.org/domains/root/db/arab.html
+arab
+
+// aramco : Aramco Services Company
+// https://www.iana.org/domains/root/db/aramco.html
+aramco
+
+// archi : Identity Digital Limited
+// https://www.iana.org/domains/root/db/archi.html
+archi
+
+// army : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/army.html
+army
+
+// art : UK Creative Ideas Limited
+// https://www.iana.org/domains/root/db/art.html
+art
+
+// arte : Association Relative à la Télévision Européenne G.E.I.E.
+// https://www.iana.org/domains/root/db/arte.html
+arte
+
+// asda : Wal-Mart Stores, Inc.
+// https://www.iana.org/domains/root/db/asda.html
+asda
+
+// associates : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/associates.html
+associates
+
+// athleta : The Gap, Inc.
+// https://www.iana.org/domains/root/db/athleta.html
+athleta
+
+// attorney : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/attorney.html
+attorney
+
+// auction : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/auction.html
+auction
+
+// audi : AUDI Aktiengesellschaft
+// https://www.iana.org/domains/root/db/audi.html
+audi
+
+// audible : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/audible.html
+audible
+
+// audio : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/audio.html
+audio
+
+// auspost : Australian Postal Corporation
+// https://www.iana.org/domains/root/db/auspost.html
+auspost
+
+// author : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/author.html
+author
+
+// auto : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/auto.html
+auto
+
+// autos : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/autos.html
+autos
+
+// avianca : Avianca Inc.
+// https://www.iana.org/domains/root/db/avianca.html
+avianca
+
+// aws : AWS Registry LLC
+// https://www.iana.org/domains/root/db/aws.html
+aws
+
+// axa : AXA Group Operations SAS
+// https://www.iana.org/domains/root/db/axa.html
+axa
+
+// azure : Microsoft Corporation
+// https://www.iana.org/domains/root/db/azure.html
+azure
+
+// baby : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/baby.html
+baby
+
+// baidu : Baidu, Inc.
+// https://www.iana.org/domains/root/db/baidu.html
+baidu
+
+// banamex : Citigroup Inc.
+// https://www.iana.org/domains/root/db/banamex.html
+banamex
+
+// bananarepublic : The Gap, Inc.
+// https://www.iana.org/domains/root/db/bananarepublic.html
+bananarepublic
+
+// band : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/band.html
+band
+
+// bank : fTLD Registry Services LLC
+// https://www.iana.org/domains/root/db/bank.html
+bank
+
+// bar : Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable
+// https://www.iana.org/domains/root/db/bar.html
+bar
+
+// barcelona : Municipi de Barcelona
+// https://www.iana.org/domains/root/db/barcelona.html
+barcelona
+
+// barclaycard : Barclays Bank PLC
+// https://www.iana.org/domains/root/db/barclaycard.html
+barclaycard
+
+// barclays : Barclays Bank PLC
+// https://www.iana.org/domains/root/db/barclays.html
+barclays
+
+// barefoot : Gallo Vineyards, Inc.
+// https://www.iana.org/domains/root/db/barefoot.html
+barefoot
+
+// bargains : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/bargains.html
+bargains
+
+// baseball : MLB Advanced Media DH, LLC
+// https://www.iana.org/domains/root/db/baseball.html
+baseball
+
+// basketball : Fédération Internationale de Basketball (FIBA)
+// https://www.iana.org/domains/root/db/basketball.html
+basketball
+
+// bauhaus : Werkhaus GmbH
+// https://www.iana.org/domains/root/db/bauhaus.html
+bauhaus
+
+// bayern : Bayern Connect GmbH
+// https://www.iana.org/domains/root/db/bayern.html
+bayern
+
+// bbc : British Broadcasting Corporation
+// https://www.iana.org/domains/root/db/bbc.html
+bbc
+
+// bbt : BB&T Corporation
+// https://www.iana.org/domains/root/db/bbt.html
+bbt
+
+// bbva : BANCO BILBAO VIZCAYA ARGENTARIA, S.A.
+// https://www.iana.org/domains/root/db/bbva.html
+bbva
+
+// bcg : The Boston Consulting Group, Inc.
+// https://www.iana.org/domains/root/db/bcg.html
+bcg
+
+// bcn : Municipi de Barcelona
+// https://www.iana.org/domains/root/db/bcn.html
+bcn
+
+// beats : Beats Electronics, LLC
+// https://www.iana.org/domains/root/db/beats.html
+beats
+
+// beauty : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/beauty.html
+beauty
+
+// beer : Registry Services, LLC
+// https://www.iana.org/domains/root/db/beer.html
+beer
+
+// bentley : Bentley Motors Limited
+// https://www.iana.org/domains/root/db/bentley.html
+bentley
+
+// berlin : dotBERLIN GmbH & Co. KG
+// https://www.iana.org/domains/root/db/berlin.html
+berlin
+
+// best : BestTLD Pty Ltd
+// https://www.iana.org/domains/root/db/best.html
+best
+
+// bestbuy : BBY Solutions, Inc.
+// https://www.iana.org/domains/root/db/bestbuy.html
+bestbuy
+
+// bet : Identity Digital Limited
+// https://www.iana.org/domains/root/db/bet.html
+bet
+
+// bharti : Bharti Enterprises (Holding) Private Limited
+// https://www.iana.org/domains/root/db/bharti.html
+bharti
+
+// bible : American Bible Society
+// https://www.iana.org/domains/root/db/bible.html
+bible
+
+// bid : dot Bid Limited
+// https://www.iana.org/domains/root/db/bid.html
+bid
+
+// bike : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/bike.html
+bike
+
+// bing : Microsoft Corporation
+// https://www.iana.org/domains/root/db/bing.html
+bing
+
+// bingo : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/bingo.html
+bingo
+
+// bio : Identity Digital Limited
+// https://www.iana.org/domains/root/db/bio.html
+bio
+
+// black : Identity Digital Limited
+// https://www.iana.org/domains/root/db/black.html
+black
+
+// blackfriday : Registry Services, LLC
+// https://www.iana.org/domains/root/db/blackfriday.html
+blackfriday
+
+// blockbuster : Dish DBS Corporation
+// https://www.iana.org/domains/root/db/blockbuster.html
+blockbuster
+
+// blog : Knock Knock WHOIS There, LLC
+// https://www.iana.org/domains/root/db/blog.html
+blog
+
+// bloomberg : Bloomberg IP Holdings LLC
+// https://www.iana.org/domains/root/db/bloomberg.html
+bloomberg
+
+// blue : Identity Digital Limited
+// https://www.iana.org/domains/root/db/blue.html
+blue
+
+// bms : Bristol-Myers Squibb Company
+// https://www.iana.org/domains/root/db/bms.html
+bms
+
+// bmw : Bayerische Motoren Werke Aktiengesellschaft
+// https://www.iana.org/domains/root/db/bmw.html
+bmw
+
+// bnpparibas : BNP Paribas
+// https://www.iana.org/domains/root/db/bnpparibas.html
+bnpparibas
+
+// boats : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/boats.html
+boats
+
+// boehringer : Boehringer Ingelheim International GmbH
+// https://www.iana.org/domains/root/db/boehringer.html
+boehringer
+
+// bofa : Bank of America Corporation
+// https://www.iana.org/domains/root/db/bofa.html
+bofa
+
+// bom : Núcleo de Informação e Coordenação do Ponto BR - NIC.br
+// https://www.iana.org/domains/root/db/bom.html
+bom
+
+// bond : ShortDot SA
+// https://www.iana.org/domains/root/db/bond.html
+bond
+
+// boo : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/boo.html
+boo
+
+// book : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/book.html
+book
+
+// booking : Booking.com B.V.
+// https://www.iana.org/domains/root/db/booking.html
+booking
+
+// bosch : Robert Bosch GMBH
+// https://www.iana.org/domains/root/db/bosch.html
+bosch
+
+// bostik : Bostik SA
+// https://www.iana.org/domains/root/db/bostik.html
+bostik
+
+// boston : Registry Services, LLC
+// https://www.iana.org/domains/root/db/boston.html
+boston
+
+// bot : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/bot.html
+bot
+
+// boutique : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/boutique.html
+boutique
+
+// box : Intercap Registry Inc.
+// https://www.iana.org/domains/root/db/box.html
+box
+
+// bradesco : Banco Bradesco S.A.
+// https://www.iana.org/domains/root/db/bradesco.html
+bradesco
+
+// bridgestone : Bridgestone Corporation
+// https://www.iana.org/domains/root/db/bridgestone.html
+bridgestone
+
+// broadway : Celebrate Broadway, Inc.
+// https://www.iana.org/domains/root/db/broadway.html
+broadway
+
+// broker : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/broker.html
+broker
+
+// brother : Brother Industries, Ltd.
+// https://www.iana.org/domains/root/db/brother.html
+brother
+
+// brussels : DNS.be vzw
+// https://www.iana.org/domains/root/db/brussels.html
+brussels
+
+// build : Plan Bee LLC
+// https://www.iana.org/domains/root/db/build.html
+build
+
+// builders : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/builders.html
+builders
+
+// business : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/business.html
+business
+
+// buy : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/buy.html
+buy
+
+// buzz : DOTSTRATEGY CO.
+// https://www.iana.org/domains/root/db/buzz.html
+buzz
+
+// bzh : Association www.bzh
+// https://www.iana.org/domains/root/db/bzh.html
+bzh
+
+// cab : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/cab.html
+cab
+
+// cafe : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/cafe.html
+cafe
+
+// cal : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/cal.html
+cal
+
+// call : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/call.html
+call
+
+// calvinklein : PVH gTLD Holdings LLC
+// https://www.iana.org/domains/root/db/calvinklein.html
+calvinklein
+
+// cam : Cam Connecting SARL
+// https://www.iana.org/domains/root/db/cam.html
+cam
+
+// camera : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/camera.html
+camera
+
+// camp : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/camp.html
+camp
+
+// canon : Canon Inc.
+// https://www.iana.org/domains/root/db/canon.html
+canon
+
+// capetown : ZA Central Registry NPC trading as ZA Central Registry
+// https://www.iana.org/domains/root/db/capetown.html
+capetown
+
+// capital : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/capital.html
+capital
+
+// capitalone : Capital One Financial Corporation
+// https://www.iana.org/domains/root/db/capitalone.html
+capitalone
+
+// car : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/car.html
+car
+
+// caravan : Caravan International, Inc.
+// https://www.iana.org/domains/root/db/caravan.html
+caravan
+
+// cards : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/cards.html
+cards
+
+// care : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/care.html
+care
+
+// career : dotCareer LLC
+// https://www.iana.org/domains/root/db/career.html
+career
+
+// careers : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/careers.html
+careers
+
+// cars : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/cars.html
+cars
+
+// casa : Registry Services, LLC
+// https://www.iana.org/domains/root/db/casa.html
+casa
+
+// case : Digity, LLC
+// https://www.iana.org/domains/root/db/case.html
+case
+
+// cash : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/cash.html
+cash
+
+// casino : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/casino.html
+casino
+
+// catering : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/catering.html
+catering
+
+// catholic : Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication)
+// https://www.iana.org/domains/root/db/catholic.html
+catholic
+
+// cba : COMMONWEALTH BANK OF AUSTRALIA
+// https://www.iana.org/domains/root/db/cba.html
+cba
+
+// cbn : The Christian Broadcasting Network, Inc.
+// https://www.iana.org/domains/root/db/cbn.html
+cbn
+
+// cbre : CBRE, Inc.
+// https://www.iana.org/domains/root/db/cbre.html
+cbre
+
+// center : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/center.html
+center
+
+// ceo : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/ceo.html
+ceo
+
+// cern : European Organization for Nuclear Research ("CERN")
+// https://www.iana.org/domains/root/db/cern.html
+cern
+
+// cfa : CFA Institute
+// https://www.iana.org/domains/root/db/cfa.html
+cfa
+
+// cfd : ShortDot SA
+// https://www.iana.org/domains/root/db/cfd.html
+cfd
+
+// chanel : Chanel International B.V.
+// https://www.iana.org/domains/root/db/chanel.html
+chanel
+
+// channel : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/channel.html
+channel
+
+// charity : Public Interest Registry
+// https://www.iana.org/domains/root/db/charity.html
+charity
+
+// chase : JPMorgan Chase Bank, National Association
+// https://www.iana.org/domains/root/db/chase.html
+chase
+
+// chat : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/chat.html
+chat
+
+// cheap : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/cheap.html
+cheap
+
+// chintai : CHINTAI Corporation
+// https://www.iana.org/domains/root/db/chintai.html
+chintai
+
+// christmas : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/christmas.html
+christmas
+
+// chrome : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/chrome.html
+chrome
+
+// church : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/church.html
+church
+
+// cipriani : Hotel Cipriani Srl
+// https://www.iana.org/domains/root/db/cipriani.html
+cipriani
+
+// circle : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/circle.html
+circle
+
+// cisco : Cisco Technology, Inc.
+// https://www.iana.org/domains/root/db/cisco.html
+cisco
+
+// citadel : Citadel Domain LLC
+// https://www.iana.org/domains/root/db/citadel.html
+citadel
+
+// citi : Citigroup Inc.
+// https://www.iana.org/domains/root/db/citi.html
+citi
+
+// citic : CITIC Group Corporation
+// https://www.iana.org/domains/root/db/citic.html
+citic
+
+// city : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/city.html
+city
+
+// claims : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/claims.html
+claims
+
+// cleaning : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/cleaning.html
+cleaning
+
+// click : Internet Naming Company LLC
+// https://www.iana.org/domains/root/db/click.html
+click
+
+// clinic : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/clinic.html
+clinic
+
+// clinique : The Estée Lauder Companies Inc.
+// https://www.iana.org/domains/root/db/clinique.html
+clinique
+
+// clothing : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/clothing.html
+clothing
+
+// cloud : Aruba PEC S.p.A.
+// https://www.iana.org/domains/root/db/cloud.html
+cloud
+
+// club : Registry Services, LLC
+// https://www.iana.org/domains/root/db/club.html
+club
+
+// clubmed : Club Méditerranée S.A.
+// https://www.iana.org/domains/root/db/clubmed.html
+clubmed
+
+// coach : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/coach.html
+coach
+
+// codes : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/codes.html
+codes
+
+// coffee : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/coffee.html
+coffee
+
+// college : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/college.html
+college
+
+// cologne : dotKoeln GmbH
+// https://www.iana.org/domains/root/db/cologne.html
+cologne
+
+// comcast : Comcast IP Holdings I, LLC
+// https://www.iana.org/domains/root/db/comcast.html
+comcast
+
+// commbank : COMMONWEALTH BANK OF AUSTRALIA
+// https://www.iana.org/domains/root/db/commbank.html
+commbank
+
+// community : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/community.html
+community
+
+// company : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/company.html
+company
+
+// compare : Registry Services, LLC
+// https://www.iana.org/domains/root/db/compare.html
+compare
+
+// computer : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/computer.html
+computer
+
+// comsec : VeriSign, Inc.
+// https://www.iana.org/domains/root/db/comsec.html
+comsec
+
+// condos : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/condos.html
+condos
+
+// construction : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/construction.html
+construction
+
+// consulting : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/consulting.html
+consulting
+
+// contact : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/contact.html
+contact
+
+// contractors : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/contractors.html
+contractors
+
+// cooking : Registry Services, LLC
+// https://www.iana.org/domains/root/db/cooking.html
+cooking
+
+// cool : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/cool.html
+cool
+
+// corsica : Collectivité de Corse
+// https://www.iana.org/domains/root/db/corsica.html
+corsica
+
+// country : Internet Naming Company LLC
+// https://www.iana.org/domains/root/db/country.html
+country
+
+// coupon : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/coupon.html
+coupon
+
+// coupons : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/coupons.html
+coupons
+
+// courses : Registry Services, LLC
+// https://www.iana.org/domains/root/db/courses.html
+courses
+
+// cpa : American Institute of Certified Public Accountants
+// https://www.iana.org/domains/root/db/cpa.html
+cpa
+
+// credit : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/credit.html
+credit
+
+// creditcard : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/creditcard.html
+creditcard
+
+// creditunion : DotCooperation LLC
+// https://www.iana.org/domains/root/db/creditunion.html
+creditunion
+
+// cricket : dot Cricket Limited
+// https://www.iana.org/domains/root/db/cricket.html
+cricket
+
+// crown : Crown Equipment Corporation
+// https://www.iana.org/domains/root/db/crown.html
+crown
+
+// crs : Federated Co-operatives Limited
+// https://www.iana.org/domains/root/db/crs.html
+crs
+
+// cruise : Viking River Cruises (Bermuda) Ltd.
+// https://www.iana.org/domains/root/db/cruise.html
+cruise
+
+// cruises : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/cruises.html
+cruises
+
+// cuisinella : SCHMIDT GROUPE S.A.S.
+// https://www.iana.org/domains/root/db/cuisinella.html
+cuisinella
+
+// cymru : Nominet UK
+// https://www.iana.org/domains/root/db/cymru.html
+cymru
+
+// cyou : ShortDot SA
+// https://www.iana.org/domains/root/db/cyou.html
+cyou
+
+// dabur : Dabur India Limited
+// https://www.iana.org/domains/root/db/dabur.html
+dabur
+
+// dad : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/dad.html
+dad
+
+// dance : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/dance.html
+dance
+
+// data : Dish DBS Corporation
+// https://www.iana.org/domains/root/db/data.html
+data
+
+// date : dot Date Limited
+// https://www.iana.org/domains/root/db/date.html
+date
+
+// dating : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/dating.html
+dating
+
+// datsun : NISSAN MOTOR CO., LTD.
+// https://www.iana.org/domains/root/db/datsun.html
+datsun
+
+// day : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/day.html
+day
+
+// dclk : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/dclk.html
+dclk
+
+// dds : Registry Services, LLC
+// https://www.iana.org/domains/root/db/dds.html
+dds
+
+// deal : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/deal.html
+deal
+
+// dealer : Intercap Registry Inc.
+// https://www.iana.org/domains/root/db/dealer.html
+dealer
+
+// deals : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/deals.html
+deals
+
+// degree : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/degree.html
+degree
+
+// delivery : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/delivery.html
+delivery
+
+// dell : Dell Inc.
+// https://www.iana.org/domains/root/db/dell.html
+dell
+
+// deloitte : Deloitte Touche Tohmatsu
+// https://www.iana.org/domains/root/db/deloitte.html
+deloitte
+
+// delta : Delta Air Lines, Inc.
+// https://www.iana.org/domains/root/db/delta.html
+delta
+
+// democrat : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/democrat.html
+democrat
+
+// dental : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/dental.html
+dental
+
+// dentist : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/dentist.html
+dentist
+
+// desi
+// https://www.iana.org/domains/root/db/desi.html
+desi
+
+// design : Registry Services, LLC
+// https://www.iana.org/domains/root/db/design.html
+design
+
+// dev : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/dev.html
+dev
+
+// dhl : Deutsche Post AG
+// https://www.iana.org/domains/root/db/dhl.html
+dhl
+
+// diamonds : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/diamonds.html
+diamonds
+
+// diet : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/diet.html
+diet
+
+// digital : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/digital.html
+digital
+
+// direct : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/direct.html
+direct
+
+// directory : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/directory.html
+directory
+
+// discount : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/discount.html
+discount
+
+// discover : Discover Financial Services
+// https://www.iana.org/domains/root/db/discover.html
+discover
+
+// dish : Dish DBS Corporation
+// https://www.iana.org/domains/root/db/dish.html
+dish
+
+// diy : Internet Naming Company LLC
+// https://www.iana.org/domains/root/db/diy.html
+diy
+
+// dnp : Dai Nippon Printing Co., Ltd.
+// https://www.iana.org/domains/root/db/dnp.html
+dnp
+
+// docs : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/docs.html
+docs
+
+// doctor : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/doctor.html
+doctor
+
+// dog : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/dog.html
+dog
+
+// domains : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/domains.html
+domains
+
+// dot : Dish DBS Corporation
+// https://www.iana.org/domains/root/db/dot.html
+dot
+
+// download : dot Support Limited
+// https://www.iana.org/domains/root/db/download.html
+download
+
+// drive : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/drive.html
+drive
+
+// dtv : Dish DBS Corporation
+// https://www.iana.org/domains/root/db/dtv.html
+dtv
+
+// dubai : Dubai Smart Government Department
+// https://www.iana.org/domains/root/db/dubai.html
+dubai
+
+// dunlop : The Goodyear Tire & Rubber Company
+// https://www.iana.org/domains/root/db/dunlop.html
+dunlop
+
+// dupont : DuPont Specialty Products USA, LLC
+// https://www.iana.org/domains/root/db/dupont.html
+dupont
+
+// durban : ZA Central Registry NPC trading as ZA Central Registry
+// https://www.iana.org/domains/root/db/durban.html
+durban
+
+// dvag : Deutsche Vermögensberatung Aktiengesellschaft DVAG
+// https://www.iana.org/domains/root/db/dvag.html
+dvag
+
+// dvr : DISH Technologies L.L.C.
+// https://www.iana.org/domains/root/db/dvr.html
+dvr
+
+// earth : Interlink Systems Innovation Institute K.K.
+// https://www.iana.org/domains/root/db/earth.html
+earth
+
+// eat : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/eat.html
+eat
+
+// eco : Big Room Inc.
+// https://www.iana.org/domains/root/db/eco.html
+eco
+
+// edeka : EDEKA Verband kaufmännischer Genossenschaften e.V.
+// https://www.iana.org/domains/root/db/edeka.html
+edeka
+
+// education : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/education.html
+education
+
+// email : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/email.html
+email
+
+// emerck : Merck KGaA
+// https://www.iana.org/domains/root/db/emerck.html
+emerck
+
+// energy : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/energy.html
+energy
+
+// engineer : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/engineer.html
+engineer
+
+// engineering : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/engineering.html
+engineering
+
+// enterprises : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/enterprises.html
+enterprises
+
+// epson : Seiko Epson Corporation
+// https://www.iana.org/domains/root/db/epson.html
+epson
+
+// equipment : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/equipment.html
+equipment
+
+// ericsson : Telefonaktiebolaget L M Ericsson
+// https://www.iana.org/domains/root/db/ericsson.html
+ericsson
+
+// erni : ERNI Group Holding AG
+// https://www.iana.org/domains/root/db/erni.html
+erni
+
+// esq : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/esq.html
+esq
+
+// estate : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/estate.html
+estate
+
+// eurovision : European Broadcasting Union (EBU)
+// https://www.iana.org/domains/root/db/eurovision.html
+eurovision
+
+// eus : Puntueus Fundazioa
+// https://www.iana.org/domains/root/db/eus.html
+eus
+
+// events : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/events.html
+events
+
+// exchange : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/exchange.html
+exchange
+
+// expert : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/expert.html
+expert
+
+// exposed : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/exposed.html
+exposed
+
+// express : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/express.html
+express
+
+// extraspace : Extra Space Storage LLC
+// https://www.iana.org/domains/root/db/extraspace.html
+extraspace
+
+// fage : Fage International S.A.
+// https://www.iana.org/domains/root/db/fage.html
+fage
+
+// fail : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/fail.html
+fail
+
+// fairwinds : FairWinds Partners, LLC
+// https://www.iana.org/domains/root/db/fairwinds.html
+fairwinds
+
+// faith : dot Faith Limited
+// https://www.iana.org/domains/root/db/faith.html
+faith
+
+// family : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/family.html
+family
+
+// fan : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/fan.html
+fan
+
+// fans : ZDNS International Limited
+// https://www.iana.org/domains/root/db/fans.html
+fans
+
+// farm : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/farm.html
+farm
+
+// farmers : Farmers Insurance Exchange
+// https://www.iana.org/domains/root/db/farmers.html
+farmers
+
+// fashion : Registry Services, LLC
+// https://www.iana.org/domains/root/db/fashion.html
+fashion
+
+// fast : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/fast.html
+fast
+
+// fedex : Federal Express Corporation
+// https://www.iana.org/domains/root/db/fedex.html
+fedex
+
+// feedback : Top Level Spectrum, Inc.
+// https://www.iana.org/domains/root/db/feedback.html
+feedback
+
+// ferrari : Fiat Chrysler Automobiles N.V.
+// https://www.iana.org/domains/root/db/ferrari.html
+ferrari
+
+// ferrero : Ferrero Trading Lux S.A.
+// https://www.iana.org/domains/root/db/ferrero.html
+ferrero
+
+// fidelity : Fidelity Brokerage Services LLC
+// https://www.iana.org/domains/root/db/fidelity.html
+fidelity
+
+// fido : Rogers Communications Canada Inc.
+// https://www.iana.org/domains/root/db/fido.html
+fido
+
+// film : Motion Picture Domain Registry Pty Ltd
+// https://www.iana.org/domains/root/db/film.html
+film
+
+// final : Núcleo de Informação e Coordenação do Ponto BR - NIC.br
+// https://www.iana.org/domains/root/db/final.html
+final
+
+// finance : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/finance.html
+finance
+
+// financial : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/financial.html
+financial
+
+// fire : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/fire.html
+fire
+
+// firestone : Bridgestone Licensing Services, Inc
+// https://www.iana.org/domains/root/db/firestone.html
+firestone
+
+// firmdale : Firmdale Holdings Limited
+// https://www.iana.org/domains/root/db/firmdale.html
+firmdale
+
+// fish : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/fish.html
+fish
+
+// fishing : Registry Services, LLC
+// https://www.iana.org/domains/root/db/fishing.html
+fishing
+
+// fit : Registry Services, LLC
+// https://www.iana.org/domains/root/db/fit.html
+fit
+
+// fitness : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/fitness.html
+fitness
+
+// flickr : Flickr, Inc.
+// https://www.iana.org/domains/root/db/flickr.html
+flickr
+
+// flights : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/flights.html
+flights
+
+// flir : FLIR Systems, Inc.
+// https://www.iana.org/domains/root/db/flir.html
+flir
+
+// florist : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/florist.html
+florist
+
+// flowers : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/flowers.html
+flowers
+
+// fly : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/fly.html
+fly
+
+// foo : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/foo.html
+foo
+
+// food : Internet Naming Company LLC
+// https://www.iana.org/domains/root/db/food.html
+food
+
+// football : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/football.html
+football
+
+// ford : Ford Motor Company
+// https://www.iana.org/domains/root/db/ford.html
+ford
+
+// forex : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/forex.html
+forex
+
+// forsale : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/forsale.html
+forsale
+
+// forum : Fegistry, LLC
+// https://www.iana.org/domains/root/db/forum.html
+forum
+
+// foundation : Public Interest Registry
+// https://www.iana.org/domains/root/db/foundation.html
+foundation
+
+// fox : FOX Registry, LLC
+// https://www.iana.org/domains/root/db/fox.html
+fox
+
+// free : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/free.html
+free
+
+// fresenius : Fresenius Immobilien-Verwaltungs-GmbH
+// https://www.iana.org/domains/root/db/fresenius.html
+fresenius
+
+// frl : FRLregistry B.V.
+// https://www.iana.org/domains/root/db/frl.html
+frl
+
+// frogans : OP3FT
+// https://www.iana.org/domains/root/db/frogans.html
+frogans
+
+// frontier : Frontier Communications Corporation
+// https://www.iana.org/domains/root/db/frontier.html
+frontier
+
+// ftr : Frontier Communications Corporation
+// https://www.iana.org/domains/root/db/ftr.html
+ftr
+
+// fujitsu : Fujitsu Limited
+// https://www.iana.org/domains/root/db/fujitsu.html
+fujitsu
+
+// fun : Radix FZC DMCC
+// https://www.iana.org/domains/root/db/fun.html
+fun
+
+// fund : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/fund.html
+fund
+
+// furniture : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/furniture.html
+furniture
+
+// futbol : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/futbol.html
+futbol
+
+// fyi : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/fyi.html
+fyi
+
+// gal : Asociación puntoGAL
+// https://www.iana.org/domains/root/db/gal.html
+gal
+
+// gallery : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/gallery.html
+gallery
+
+// gallo : Gallo Vineyards, Inc.
+// https://www.iana.org/domains/root/db/gallo.html
+gallo
+
+// gallup : Gallup, Inc.
+// https://www.iana.org/domains/root/db/gallup.html
+gallup
+
+// game : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/game.html
+game
+
+// games : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/games.html
+games
+
+// gap : The Gap, Inc.
+// https://www.iana.org/domains/root/db/gap.html
+gap
+
+// garden : Registry Services, LLC
+// https://www.iana.org/domains/root/db/garden.html
+garden
+
+// gay : Registry Services, LLC
+// https://www.iana.org/domains/root/db/gay.html
+gay
+
+// gbiz : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/gbiz.html
+gbiz
+
+// gdn : Joint Stock Company "Navigation-information systems"
+// https://www.iana.org/domains/root/db/gdn.html
+gdn
+
+// gea : GEA Group Aktiengesellschaft
+// https://www.iana.org/domains/root/db/gea.html
+gea
+
+// gent : Easyhost BV
+// https://www.iana.org/domains/root/db/gent.html
+gent
+
+// genting : Resorts World Inc Pte. Ltd.
+// https://www.iana.org/domains/root/db/genting.html
+genting
+
+// george : Wal-Mart Stores, Inc.
+// https://www.iana.org/domains/root/db/george.html
+george
+
+// ggee : GMO Internet, Inc.
+// https://www.iana.org/domains/root/db/ggee.html
+ggee
+
+// gift : DotGift, LLC
+// https://www.iana.org/domains/root/db/gift.html
+gift
+
+// gifts : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/gifts.html
+gifts
+
+// gives : Public Interest Registry
+// https://www.iana.org/domains/root/db/gives.html
+gives
+
+// giving : Public Interest Registry
+// https://www.iana.org/domains/root/db/giving.html
+giving
+
+// glass : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/glass.html
+glass
+
+// gle : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/gle.html
+gle
+
+// global : Identity Digital Limited
+// https://www.iana.org/domains/root/db/global.html
+global
+
+// globo : Globo Comunicação e Participações S.A
+// https://www.iana.org/domains/root/db/globo.html
+globo
+
+// gmail : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/gmail.html
+gmail
+
+// gmbh : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/gmbh.html
+gmbh
+
+// gmo : GMO Internet, Inc.
+// https://www.iana.org/domains/root/db/gmo.html
+gmo
+
+// gmx : 1&1 Mail & Media GmbH
+// https://www.iana.org/domains/root/db/gmx.html
+gmx
+
+// godaddy : Go Daddy East, LLC
+// https://www.iana.org/domains/root/db/godaddy.html
+godaddy
+
+// gold : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/gold.html
+gold
+
+// goldpoint : YODOBASHI CAMERA CO.,LTD.
+// https://www.iana.org/domains/root/db/goldpoint.html
+goldpoint
+
+// golf : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/golf.html
+golf
+
+// goo : NTT DOCOMO, INC.
+// https://www.iana.org/domains/root/db/goo.html
+goo
+
+// goodyear : The Goodyear Tire & Rubber Company
+// https://www.iana.org/domains/root/db/goodyear.html
+goodyear
+
+// goog : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/goog.html
+goog
+
+// google : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/google.html
+google
+
+// gop : Republican State Leadership Committee, Inc.
+// https://www.iana.org/domains/root/db/gop.html
+gop
+
+// got : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/got.html
+got
+
+// grainger : Grainger Registry Services, LLC
+// https://www.iana.org/domains/root/db/grainger.html
+grainger
+
+// graphics : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/graphics.html
+graphics
+
+// gratis : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/gratis.html
+gratis
+
+// green : Identity Digital Limited
+// https://www.iana.org/domains/root/db/green.html
+green
+
+// gripe : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/gripe.html
+gripe
+
+// grocery : Wal-Mart Stores, Inc.
+// https://www.iana.org/domains/root/db/grocery.html
+grocery
+
+// group : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/group.html
+group
+
+// guardian : The Guardian Life Insurance Company of America
+// https://www.iana.org/domains/root/db/guardian.html
+guardian
+
+// gucci : Guccio Gucci S.p.a.
+// https://www.iana.org/domains/root/db/gucci.html
+gucci
+
+// guge : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/guge.html
+guge
+
+// guide : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/guide.html
+guide
+
+// guitars : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/guitars.html
+guitars
+
+// guru : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/guru.html
+guru
+
+// hair : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/hair.html
+hair
+
+// hamburg : Hamburg Top-Level-Domain GmbH
+// https://www.iana.org/domains/root/db/hamburg.html
+hamburg
+
+// hangout : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/hangout.html
+hangout
+
+// haus : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/haus.html
+haus
+
+// hbo : HBO Registry Services, Inc.
+// https://www.iana.org/domains/root/db/hbo.html
+hbo
+
+// hdfc : HOUSING DEVELOPMENT FINANCE CORPORATION LIMITED
+// https://www.iana.org/domains/root/db/hdfc.html
+hdfc
+
+// hdfcbank : HDFC Bank Limited
+// https://www.iana.org/domains/root/db/hdfcbank.html
+hdfcbank
+
+// health : Registry Services, LLC
+// https://www.iana.org/domains/root/db/health.html
+health
+
+// healthcare : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/healthcare.html
+healthcare
+
+// help : Innovation service Limited
+// https://www.iana.org/domains/root/db/help.html
+help
+
+// helsinki : City of Helsinki
+// https://www.iana.org/domains/root/db/helsinki.html
+helsinki
+
+// here : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/here.html
+here
+
+// hermes : HERMES INTERNATIONAL
+// https://www.iana.org/domains/root/db/hermes.html
+hermes
+
+// hiphop : Dot Hip Hop, LLC
+// https://www.iana.org/domains/root/db/hiphop.html
+hiphop
+
+// hisamitsu : Hisamitsu Pharmaceutical Co.,Inc.
+// https://www.iana.org/domains/root/db/hisamitsu.html
+hisamitsu
+
+// hitachi : Hitachi, Ltd.
+// https://www.iana.org/domains/root/db/hitachi.html
+hitachi
+
+// hiv : Internet Naming Company LLC
+// https://www.iana.org/domains/root/db/hiv.html
+hiv
+
+// hkt : PCCW-HKT DataCom Services Limited
+// https://www.iana.org/domains/root/db/hkt.html
+hkt
+
+// hockey : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/hockey.html
+hockey
+
+// holdings : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/holdings.html
+holdings
+
+// holiday : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/holiday.html
+holiday
+
+// homedepot : Home Depot Product Authority, LLC
+// https://www.iana.org/domains/root/db/homedepot.html
+homedepot
+
+// homegoods : The TJX Companies, Inc.
+// https://www.iana.org/domains/root/db/homegoods.html
+homegoods
+
+// homes : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/homes.html
+homes
+
+// homesense : The TJX Companies, Inc.
+// https://www.iana.org/domains/root/db/homesense.html
+homesense
+
+// honda : Honda Motor Co., Ltd.
+// https://www.iana.org/domains/root/db/honda.html
+honda
+
+// horse : Registry Services, LLC
+// https://www.iana.org/domains/root/db/horse.html
+horse
+
+// hospital : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/hospital.html
+hospital
+
+// host : Radix FZC DMCC
+// https://www.iana.org/domains/root/db/host.html
+host
+
+// hosting : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/hosting.html
+hosting
+
+// hot : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/hot.html
+hot
+
+// hotels : Booking.com B.V.
+// https://www.iana.org/domains/root/db/hotels.html
+hotels
+
+// hotmail : Microsoft Corporation
+// https://www.iana.org/domains/root/db/hotmail.html
+hotmail
+
+// house : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/house.html
+house
+
+// how : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/how.html
+how
+
+// hsbc : HSBC Global Services (UK) Limited
+// https://www.iana.org/domains/root/db/hsbc.html
+hsbc
+
+// hughes : Hughes Satellite Systems Corporation
+// https://www.iana.org/domains/root/db/hughes.html
+hughes
+
+// hyatt : Hyatt GTLD, L.L.C.
+// https://www.iana.org/domains/root/db/hyatt.html
+hyatt
+
+// hyundai : Hyundai Motor Company
+// https://www.iana.org/domains/root/db/hyundai.html
+hyundai
+
+// ibm : International Business Machines Corporation
+// https://www.iana.org/domains/root/db/ibm.html
+ibm
+
+// icbc : Industrial and Commercial Bank of China Limited
+// https://www.iana.org/domains/root/db/icbc.html
+icbc
+
+// ice : IntercontinentalExchange, Inc.
+// https://www.iana.org/domains/root/db/ice.html
+ice
+
+// icu : ShortDot SA
+// https://www.iana.org/domains/root/db/icu.html
+icu
+
+// ieee : IEEE Global LLC
+// https://www.iana.org/domains/root/db/ieee.html
+ieee
+
+// ifm : ifm electronic gmbh
+// https://www.iana.org/domains/root/db/ifm.html
+ifm
+
+// ikano : Ikano S.A.
+// https://www.iana.org/domains/root/db/ikano.html
+ikano
+
+// imamat : Fondation Aga Khan (Aga Khan Foundation)
+// https://www.iana.org/domains/root/db/imamat.html
+imamat
+
+// imdb : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/imdb.html
+imdb
+
+// immo : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/immo.html
+immo
+
+// immobilien : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/immobilien.html
+immobilien
+
+// inc : Intercap Registry Inc.
+// https://www.iana.org/domains/root/db/inc.html
+inc
+
+// industries : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/industries.html
+industries
+
+// infiniti : NISSAN MOTOR CO., LTD.
+// https://www.iana.org/domains/root/db/infiniti.html
+infiniti
+
+// ing : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/ing.html
+ing
+
+// ink : Registry Services, LLC
+// https://www.iana.org/domains/root/db/ink.html
+ink
+
+// institute : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/institute.html
+institute
+
+// insurance : fTLD Registry Services LLC
+// https://www.iana.org/domains/root/db/insurance.html
+insurance
+
+// insure : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/insure.html
+insure
+
+// international : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/international.html
+international
+
+// intuit : Intuit Administrative Services, Inc.
+// https://www.iana.org/domains/root/db/intuit.html
+intuit
+
+// investments : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/investments.html
+investments
+
+// ipiranga : Ipiranga Produtos de Petroleo S.A.
+// https://www.iana.org/domains/root/db/ipiranga.html
+ipiranga
+
+// irish : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/irish.html
+irish
+
+// ismaili : Fondation Aga Khan (Aga Khan Foundation)
+// https://www.iana.org/domains/root/db/ismaili.html
+ismaili
+
+// ist : Istanbul Metropolitan Municipality
+// https://www.iana.org/domains/root/db/ist.html
+ist
+
+// istanbul : Istanbul Metropolitan Municipality
+// https://www.iana.org/domains/root/db/istanbul.html
+istanbul
+
+// itau : Itau Unibanco Holding S.A.
+// https://www.iana.org/domains/root/db/itau.html
+itau
+
+// itv : ITV Services Limited
+// https://www.iana.org/domains/root/db/itv.html
+itv
+
+// jaguar : Jaguar Land Rover Ltd
+// https://www.iana.org/domains/root/db/jaguar.html
+jaguar
+
+// java : Oracle Corporation
+// https://www.iana.org/domains/root/db/java.html
+java
+
+// jcb : JCB Co., Ltd.
+// https://www.iana.org/domains/root/db/jcb.html
+jcb
+
+// jeep : FCA US LLC.
+// https://www.iana.org/domains/root/db/jeep.html
+jeep
+
+// jetzt : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/jetzt.html
+jetzt
+
+// jewelry : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/jewelry.html
+jewelry
+
+// jio : Reliance Industries Limited
+// https://www.iana.org/domains/root/db/jio.html
+jio
+
+// jll : Jones Lang LaSalle Incorporated
+// https://www.iana.org/domains/root/db/jll.html
+jll
+
+// jmp : Matrix IP LLC
+// https://www.iana.org/domains/root/db/jmp.html
+jmp
+
+// jnj : Johnson & Johnson Services, Inc.
+// https://www.iana.org/domains/root/db/jnj.html
+jnj
+
+// joburg : ZA Central Registry NPC trading as ZA Central Registry
+// https://www.iana.org/domains/root/db/joburg.html
+joburg
+
+// jot : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/jot.html
+jot
+
+// joy : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/joy.html
+joy
+
+// jpmorgan : JPMorgan Chase Bank, National Association
+// https://www.iana.org/domains/root/db/jpmorgan.html
+jpmorgan
+
+// jprs : Japan Registry Services Co., Ltd.
+// https://www.iana.org/domains/root/db/jprs.html
+jprs
+
+// juegos : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/juegos.html
+juegos
+
+// juniper : JUNIPER NETWORKS, INC.
+// https://www.iana.org/domains/root/db/juniper.html
+juniper
+
+// kaufen : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/kaufen.html
+kaufen
+
+// kddi : KDDI CORPORATION
+// https://www.iana.org/domains/root/db/kddi.html
+kddi
+
+// kerryhotels : Kerry Trading Co. Limited
+// https://www.iana.org/domains/root/db/kerryhotels.html
+kerryhotels
+
+// kerrylogistics : Kerry Trading Co. Limited
+// https://www.iana.org/domains/root/db/kerrylogistics.html
+kerrylogistics
+
+// kerryproperties : Kerry Trading Co. Limited
+// https://www.iana.org/domains/root/db/kerryproperties.html
+kerryproperties
+
+// kfh : Kuwait Finance House
+// https://www.iana.org/domains/root/db/kfh.html
+kfh
+
+// kia : KIA MOTORS CORPORATION
+// https://www.iana.org/domains/root/db/kia.html
+kia
+
+// kids : DotKids Foundation Limited
+// https://www.iana.org/domains/root/db/kids.html
+kids
+
+// kim : Identity Digital Limited
+// https://www.iana.org/domains/root/db/kim.html
+kim
+
+// kindle : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/kindle.html
+kindle
+
+// kitchen : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/kitchen.html
+kitchen
+
+// kiwi : DOT KIWI LIMITED
+// https://www.iana.org/domains/root/db/kiwi.html
+kiwi
+
+// koeln : dotKoeln GmbH
+// https://www.iana.org/domains/root/db/koeln.html
+koeln
+
+// komatsu : Komatsu Ltd.
+// https://www.iana.org/domains/root/db/komatsu.html
+komatsu
+
+// kosher : Kosher Marketing Assets LLC
+// https://www.iana.org/domains/root/db/kosher.html
+kosher
+
+// kpmg : KPMG International Cooperative (KPMG International Genossenschaft)
+// https://www.iana.org/domains/root/db/kpmg.html
+kpmg
+
+// kpn : Koninklijke KPN N.V.
+// https://www.iana.org/domains/root/db/kpn.html
+kpn
+
+// krd : KRG Department of Information Technology
+// https://www.iana.org/domains/root/db/krd.html
+krd
+
+// kred : KredTLD Pty Ltd
+// https://www.iana.org/domains/root/db/kred.html
+kred
+
+// kuokgroup : Kerry Trading Co. Limited
+// https://www.iana.org/domains/root/db/kuokgroup.html
+kuokgroup
+
+// kyoto : Academic Institution: Kyoto Jyoho Gakuen
+// https://www.iana.org/domains/root/db/kyoto.html
+kyoto
+
+// lacaixa : Fundación Bancaria Caixa d’Estalvis i Pensions de Barcelona, “la Caixa”
+// https://www.iana.org/domains/root/db/lacaixa.html
+lacaixa
+
+// lamborghini : Automobili Lamborghini S.p.A.
+// https://www.iana.org/domains/root/db/lamborghini.html
+lamborghini
+
+// lamer : The Estée Lauder Companies Inc.
+// https://www.iana.org/domains/root/db/lamer.html
+lamer
+
+// lancaster : LANCASTER
+// https://www.iana.org/domains/root/db/lancaster.html
+lancaster
+
+// land : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/land.html
+land
+
+// landrover : Jaguar Land Rover Ltd
+// https://www.iana.org/domains/root/db/landrover.html
+landrover
+
+// lanxess : LANXESS Corporation
+// https://www.iana.org/domains/root/db/lanxess.html
+lanxess
+
+// lasalle : Jones Lang LaSalle Incorporated
+// https://www.iana.org/domains/root/db/lasalle.html
+lasalle
+
+// lat : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/lat.html
+lat
+
+// latino : Dish DBS Corporation
+// https://www.iana.org/domains/root/db/latino.html
+latino
+
+// latrobe : La Trobe University
+// https://www.iana.org/domains/root/db/latrobe.html
+latrobe
+
+// law : Registry Services, LLC
+// https://www.iana.org/domains/root/db/law.html
+law
+
+// lawyer : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/lawyer.html
+lawyer
+
+// lds : IRI Domain Management, LLC
+// https://www.iana.org/domains/root/db/lds.html
+lds
+
+// lease : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/lease.html
+lease
+
+// leclerc : A.C.D. LEC Association des Centres Distributeurs Edouard Leclerc
+// https://www.iana.org/domains/root/db/leclerc.html
+leclerc
+
+// lefrak : LeFrak Organization, Inc.
+// https://www.iana.org/domains/root/db/lefrak.html
+lefrak
+
+// legal : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/legal.html
+legal
+
+// lego : LEGO Juris A/S
+// https://www.iana.org/domains/root/db/lego.html
+lego
+
+// lexus : TOYOTA MOTOR CORPORATION
+// https://www.iana.org/domains/root/db/lexus.html
+lexus
+
+// lgbt : Identity Digital Limited
+// https://www.iana.org/domains/root/db/lgbt.html
+lgbt
+
+// lidl : Schwarz Domains und Services GmbH & Co. KG
+// https://www.iana.org/domains/root/db/lidl.html
+lidl
+
+// life : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/life.html
+life
+
+// lifeinsurance : American Council of Life Insurers
+// https://www.iana.org/domains/root/db/lifeinsurance.html
+lifeinsurance
+
+// lifestyle : Internet Naming Company LLC
+// https://www.iana.org/domains/root/db/lifestyle.html
+lifestyle
+
+// lighting : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/lighting.html
+lighting
+
+// like : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/like.html
+like
+
+// lilly : Eli Lilly and Company
+// https://www.iana.org/domains/root/db/lilly.html
+lilly
+
+// limited : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/limited.html
+limited
+
+// limo : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/limo.html
+limo
+
+// lincoln : Ford Motor Company
+// https://www.iana.org/domains/root/db/lincoln.html
+lincoln
+
+// link : Nova Registry Ltd
+// https://www.iana.org/domains/root/db/link.html
+link
+
+// lipsy : Lipsy Ltd
+// https://www.iana.org/domains/root/db/lipsy.html
+lipsy
+
+// live : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/live.html
+live
+
+// living : Internet Naming Company LLC
+// https://www.iana.org/domains/root/db/living.html
+living
+
+// llc : Identity Digital Limited
+// https://www.iana.org/domains/root/db/llc.html
+llc
+
+// llp : Intercap Registry Inc.
+// https://www.iana.org/domains/root/db/llp.html
+llp
+
+// loan : dot Loan Limited
+// https://www.iana.org/domains/root/db/loan.html
+loan
+
+// loans : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/loans.html
+loans
+
+// locker : Orange Domains LLC
+// https://www.iana.org/domains/root/db/locker.html
+locker
+
+// locus : Locus Analytics LLC
+// https://www.iana.org/domains/root/db/locus.html
+locus
+
+// lol : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/lol.html
+lol
+
+// london : Dot London Domains Limited
+// https://www.iana.org/domains/root/db/london.html
+london
+
+// lotte : Lotte Holdings Co., Ltd.
+// https://www.iana.org/domains/root/db/lotte.html
+lotte
+
+// lotto : Identity Digital Limited
+// https://www.iana.org/domains/root/db/lotto.html
+lotto
+
+// love : Merchant Law Group LLP
+// https://www.iana.org/domains/root/db/love.html
+love
+
+// lpl : LPL Holdings, Inc.
+// https://www.iana.org/domains/root/db/lpl.html
+lpl
+
+// lplfinancial : LPL Holdings, Inc.
+// https://www.iana.org/domains/root/db/lplfinancial.html
+lplfinancial
+
+// ltd : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/ltd.html
+ltd
+
+// ltda : InterNetX, Corp
+// https://www.iana.org/domains/root/db/ltda.html
+ltda
+
+// lundbeck : H. Lundbeck A/S
+// https://www.iana.org/domains/root/db/lundbeck.html
+lundbeck
+
+// luxe : Registry Services, LLC
+// https://www.iana.org/domains/root/db/luxe.html
+luxe
+
+// luxury : Luxury Partners, LLC
+// https://www.iana.org/domains/root/db/luxury.html
+luxury
+
+// madrid : Comunidad de Madrid
+// https://www.iana.org/domains/root/db/madrid.html
+madrid
+
+// maif : Mutuelle Assurance Instituteur France (MAIF)
+// https://www.iana.org/domains/root/db/maif.html
+maif
+
+// maison : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/maison.html
+maison
+
+// makeup : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/makeup.html
+makeup
+
+// man : MAN SE
+// https://www.iana.org/domains/root/db/man.html
+man
+
+// management : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/management.html
+management
+
+// mango : PUNTO FA S.L.
+// https://www.iana.org/domains/root/db/mango.html
+mango
+
+// map : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/map.html
+map
+
+// market : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/market.html
+market
+
+// marketing : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/marketing.html
+marketing
+
+// markets : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/markets.html
+markets
+
+// marriott : Marriott Worldwide Corporation
+// https://www.iana.org/domains/root/db/marriott.html
+marriott
+
+// marshalls : The TJX Companies, Inc.
+// https://www.iana.org/domains/root/db/marshalls.html
+marshalls
+
+// mattel : Mattel Sites, Inc.
+// https://www.iana.org/domains/root/db/mattel.html
+mattel
+
+// mba : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/mba.html
+mba
+
+// mckinsey : McKinsey Holdings, Inc.
+// https://www.iana.org/domains/root/db/mckinsey.html
+mckinsey
+
+// med : Medistry LLC
+// https://www.iana.org/domains/root/db/med.html
+med
+
+// media : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/media.html
+media
+
+// meet : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/meet.html
+meet
+
+// melbourne : The Crown in right of the State of Victoria, represented by its Department of State Development, Business and Innovation
+// https://www.iana.org/domains/root/db/melbourne.html
+melbourne
+
+// meme : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/meme.html
+meme
+
+// memorial : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/memorial.html
+memorial
+
+// men : Exclusive Registry Limited
+// https://www.iana.org/domains/root/db/men.html
+men
+
+// menu : Dot Menu Registry, LLC
+// https://www.iana.org/domains/root/db/menu.html
+menu
+
+// merckmsd : MSD Registry Holdings, Inc.
+// https://www.iana.org/domains/root/db/merckmsd.html
+merckmsd
+
+// miami : Registry Services, LLC
+// https://www.iana.org/domains/root/db/miami.html
+miami
+
+// microsoft : Microsoft Corporation
+// https://www.iana.org/domains/root/db/microsoft.html
+microsoft
+
+// mini : Bayerische Motoren Werke Aktiengesellschaft
+// https://www.iana.org/domains/root/db/mini.html
+mini
+
+// mint : Intuit Administrative Services, Inc.
+// https://www.iana.org/domains/root/db/mint.html
+mint
+
+// mit : Massachusetts Institute of Technology
+// https://www.iana.org/domains/root/db/mit.html
+mit
+
+// mitsubishi : Mitsubishi Corporation
+// https://www.iana.org/domains/root/db/mitsubishi.html
+mitsubishi
+
+// mlb : MLB Advanced Media DH, LLC
+// https://www.iana.org/domains/root/db/mlb.html
+mlb
+
+// mls : The Canadian Real Estate Association
+// https://www.iana.org/domains/root/db/mls.html
+mls
+
+// mma : MMA IARD
+// https://www.iana.org/domains/root/db/mma.html
+mma
+
+// mobile : Dish DBS Corporation
+// https://www.iana.org/domains/root/db/mobile.html
+mobile
+
+// moda : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/moda.html
+moda
+
+// moe : Interlink Systems Innovation Institute K.K.
+// https://www.iana.org/domains/root/db/moe.html
+moe
+
+// moi : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/moi.html
+moi
+
+// mom : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/mom.html
+mom
+
+// monash : Monash University
+// https://www.iana.org/domains/root/db/monash.html
+monash
+
+// money : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/money.html
+money
+
+// monster : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/monster.html
+monster
+
+// mormon : IRI Domain Management, LLC
+// https://www.iana.org/domains/root/db/mormon.html
+mormon
+
+// mortgage : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/mortgage.html
+mortgage
+
+// moscow : Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID)
+// https://www.iana.org/domains/root/db/moscow.html
+moscow
+
+// moto : Motorola Trademark Holdings, LLC
+// https://www.iana.org/domains/root/db/moto.html
+moto
+
+// motorcycles : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/motorcycles.html
+motorcycles
+
+// mov : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/mov.html
+mov
+
+// movie : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/movie.html
+movie
+
+// msd : MSD Registry Holdings, Inc.
+// https://www.iana.org/domains/root/db/msd.html
+msd
+
+// mtn : MTN Dubai Limited
+// https://www.iana.org/domains/root/db/mtn.html
+mtn
+
+// mtr : MTR Corporation Limited
+// https://www.iana.org/domains/root/db/mtr.html
+mtr
+
+// music : DotMusic Limited
+// https://www.iana.org/domains/root/db/music.html
+music
+
+// nab : National Australia Bank Limited
+// https://www.iana.org/domains/root/db/nab.html
+nab
+
+// nagoya : GMO Registry, Inc.
+// https://www.iana.org/domains/root/db/nagoya.html
+nagoya
+
+// natura : NATURA COSMÉTICOS S.A.
+// https://www.iana.org/domains/root/db/natura.html
+natura
+
+// navy : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/navy.html
+navy
+
+// nba : NBA REGISTRY, LLC
+// https://www.iana.org/domains/root/db/nba.html
+nba
+
+// nec : NEC Corporation
+// https://www.iana.org/domains/root/db/nec.html
+nec
+
+// netbank : COMMONWEALTH BANK OF AUSTRALIA
+// https://www.iana.org/domains/root/db/netbank.html
+netbank
+
+// netflix : Netflix, Inc.
+// https://www.iana.org/domains/root/db/netflix.html
+netflix
+
+// network : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/network.html
+network
+
+// neustar : NeuStar, Inc.
+// https://www.iana.org/domains/root/db/neustar.html
+neustar
+
+// new : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/new.html
+new
+
+// news : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/news.html
+news
+
+// next : Next plc
+// https://www.iana.org/domains/root/db/next.html
+next
+
+// nextdirect : Next plc
+// https://www.iana.org/domains/root/db/nextdirect.html
+nextdirect
+
+// nexus : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/nexus.html
+nexus
+
+// nfl : NFL Reg Ops LLC
+// https://www.iana.org/domains/root/db/nfl.html
+nfl
+
+// ngo : Public Interest Registry
+// https://www.iana.org/domains/root/db/ngo.html
+ngo
+
+// nhk : Japan Broadcasting Corporation (NHK)
+// https://www.iana.org/domains/root/db/nhk.html
+nhk
+
+// nico : DWANGO Co., Ltd.
+// https://www.iana.org/domains/root/db/nico.html
+nico
+
+// nike : NIKE, Inc.
+// https://www.iana.org/domains/root/db/nike.html
+nike
+
+// nikon : NIKON CORPORATION
+// https://www.iana.org/domains/root/db/nikon.html
+nikon
+
+// ninja : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/ninja.html
+ninja
+
+// nissan : NISSAN MOTOR CO., LTD.
+// https://www.iana.org/domains/root/db/nissan.html
+nissan
+
+// nissay : Nippon Life Insurance Company
+// https://www.iana.org/domains/root/db/nissay.html
+nissay
+
+// nokia : Nokia Corporation
+// https://www.iana.org/domains/root/db/nokia.html
+nokia
+
+// norton : NortonLifeLock Inc.
+// https://www.iana.org/domains/root/db/norton.html
+norton
+
+// now : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/now.html
+now
+
+// nowruz : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+// https://www.iana.org/domains/root/db/nowruz.html
+nowruz
+
+// nowtv : Starbucks (HK) Limited
+// https://www.iana.org/domains/root/db/nowtv.html
+nowtv
+
+// nra : NRA Holdings Company, INC.
+// https://www.iana.org/domains/root/db/nra.html
+nra
+
+// nrw : Minds + Machines GmbH
+// https://www.iana.org/domains/root/db/nrw.html
+nrw
+
+// ntt : NIPPON TELEGRAPH AND TELEPHONE CORPORATION
+// https://www.iana.org/domains/root/db/ntt.html
+ntt
+
+// nyc : The City of New York by and through the New York City Department of Information Technology & Telecommunications
+// https://www.iana.org/domains/root/db/nyc.html
+nyc
+
+// obi : OBI Group Holding SE & Co. KGaA
+// https://www.iana.org/domains/root/db/obi.html
+obi
+
+// observer : Fegistry, LLC
+// https://www.iana.org/domains/root/db/observer.html
+observer
+
+// office : Microsoft Corporation
+// https://www.iana.org/domains/root/db/office.html
+office
+
+// okinawa : BRregistry, Inc.
+// https://www.iana.org/domains/root/db/okinawa.html
+okinawa
+
+// olayan : Competrol (Luxembourg) Sarl
+// https://www.iana.org/domains/root/db/olayan.html
+olayan
+
+// olayangroup : Competrol (Luxembourg) Sarl
+// https://www.iana.org/domains/root/db/olayangroup.html
+olayangroup
+
+// oldnavy : The Gap, Inc.
+// https://www.iana.org/domains/root/db/oldnavy.html
+oldnavy
+
+// ollo : Dish DBS Corporation
+// https://www.iana.org/domains/root/db/ollo.html
+ollo
+
+// omega : The Swatch Group Ltd
+// https://www.iana.org/domains/root/db/omega.html
+omega
+
+// one : One.com A/S
+// https://www.iana.org/domains/root/db/one.html
+one
+
+// ong : Public Interest Registry
+// https://www.iana.org/domains/root/db/ong.html
+ong
+
+// onl : iRegistry GmbH
+// https://www.iana.org/domains/root/db/onl.html
+onl
+
+// online : Radix FZC DMCC
+// https://www.iana.org/domains/root/db/online.html
+online
+
+// ooo : INFIBEAM AVENUES LIMITED
+// https://www.iana.org/domains/root/db/ooo.html
+ooo
+
+// open : American Express Travel Related Services Company, Inc.
+// https://www.iana.org/domains/root/db/open.html
+open
+
+// oracle : Oracle Corporation
+// https://www.iana.org/domains/root/db/oracle.html
+oracle
+
+// orange : Orange Brand Services Limited
+// https://www.iana.org/domains/root/db/orange.html
+orange
+
+// organic : Identity Digital Limited
+// https://www.iana.org/domains/root/db/organic.html
+organic
+
+// origins : The Estée Lauder Companies Inc.
+// https://www.iana.org/domains/root/db/origins.html
+origins
+
+// osaka : Osaka Registry Co., Ltd.
+// https://www.iana.org/domains/root/db/osaka.html
+osaka
+
+// otsuka : Otsuka Holdings Co., Ltd.
+// https://www.iana.org/domains/root/db/otsuka.html
+otsuka
+
+// ott : Dish DBS Corporation
+// https://www.iana.org/domains/root/db/ott.html
+ott
+
+// ovh : MédiaBC
+// https://www.iana.org/domains/root/db/ovh.html
+ovh
+
+// page : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/page.html
+page
+
+// panasonic : Panasonic Holdings Corporation
+// https://www.iana.org/domains/root/db/panasonic.html
+panasonic
+
+// paris : City of Paris
+// https://www.iana.org/domains/root/db/paris.html
+paris
+
+// pars : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+// https://www.iana.org/domains/root/db/pars.html
+pars
+
+// partners : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/partners.html
+partners
+
+// parts : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/parts.html
+parts
+
+// party : Blue Sky Registry Limited
+// https://www.iana.org/domains/root/db/party.html
+party
+
+// pay : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/pay.html
+pay
+
+// pccw : PCCW Enterprises Limited
+// https://www.iana.org/domains/root/db/pccw.html
+pccw
+
+// pet : Identity Digital Limited
+// https://www.iana.org/domains/root/db/pet.html
+pet
+
+// pfizer : Pfizer Inc.
+// https://www.iana.org/domains/root/db/pfizer.html
+pfizer
+
+// pharmacy : National Association of Boards of Pharmacy
+// https://www.iana.org/domains/root/db/pharmacy.html
+pharmacy
+
+// phd : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/phd.html
+phd
+
+// philips : Koninklijke Philips N.V.
+// https://www.iana.org/domains/root/db/philips.html
+philips
+
+// phone : Dish DBS Corporation
+// https://www.iana.org/domains/root/db/phone.html
+phone
+
+// photo : Registry Services, LLC
+// https://www.iana.org/domains/root/db/photo.html
+photo
+
+// photography : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/photography.html
+photography
+
+// photos : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/photos.html
+photos
+
+// physio : PhysBiz Pty Ltd
+// https://www.iana.org/domains/root/db/physio.html
+physio
+
+// pics : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/pics.html
+pics
+
+// pictet : Pictet Europe S.A.
+// https://www.iana.org/domains/root/db/pictet.html
+pictet
+
+// pictures : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/pictures.html
+pictures
+
+// pid : Top Level Spectrum, Inc.
+// https://www.iana.org/domains/root/db/pid.html
+pid
+
+// pin : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/pin.html
+pin
+
+// ping : Ping Registry Provider, Inc.
+// https://www.iana.org/domains/root/db/ping.html
+ping
+
+// pink : Identity Digital Limited
+// https://www.iana.org/domains/root/db/pink.html
+pink
+
+// pioneer : Pioneer Corporation
+// https://www.iana.org/domains/root/db/pioneer.html
+pioneer
+
+// pizza : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/pizza.html
+pizza
+
+// place : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/place.html
+place
+
+// play : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/play.html
+play
+
+// playstation : Sony Interactive Entertainment Inc.
+// https://www.iana.org/domains/root/db/playstation.html
+playstation
+
+// plumbing : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/plumbing.html
+plumbing
+
+// plus : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/plus.html
+plus
+
+// pnc : PNC Domain Co., LLC
+// https://www.iana.org/domains/root/db/pnc.html
+pnc
+
+// pohl : Deutsche Vermögensberatung Aktiengesellschaft DVAG
+// https://www.iana.org/domains/root/db/pohl.html
+pohl
+
+// poker : Identity Digital Limited
+// https://www.iana.org/domains/root/db/poker.html
+poker
+
+// politie : Politie Nederland
+// https://www.iana.org/domains/root/db/politie.html
+politie
+
+// porn : ICM Registry PN LLC
+// https://www.iana.org/domains/root/db/porn.html
+porn
+
+// pramerica : Prudential Financial, Inc.
+// https://www.iana.org/domains/root/db/pramerica.html
+pramerica
+
+// praxi : Praxi S.p.A.
+// https://www.iana.org/domains/root/db/praxi.html
+praxi
+
+// press : Radix FZC DMCC
+// https://www.iana.org/domains/root/db/press.html
+press
+
+// prime : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/prime.html
+prime
+
+// prod : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/prod.html
+prod
+
+// productions : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/productions.html
+productions
+
+// prof : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/prof.html
+prof
+
+// progressive : Progressive Casualty Insurance Company
+// https://www.iana.org/domains/root/db/progressive.html
+progressive
+
+// promo : Identity Digital Limited
+// https://www.iana.org/domains/root/db/promo.html
+promo
+
+// properties : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/properties.html
+properties
+
+// property : Digital Property Infrastructure Limited
+// https://www.iana.org/domains/root/db/property.html
+property
+
+// protection : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/protection.html
+protection
+
+// pru : Prudential Financial, Inc.
+// https://www.iana.org/domains/root/db/pru.html
+pru
+
+// prudential : Prudential Financial, Inc.
+// https://www.iana.org/domains/root/db/prudential.html
+prudential
+
+// pub : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/pub.html
+pub
+
+// pwc : PricewaterhouseCoopers LLP
+// https://www.iana.org/domains/root/db/pwc.html
+pwc
+
+// qpon : dotQPON LLC
+// https://www.iana.org/domains/root/db/qpon.html
+qpon
+
+// quebec : PointQuébec Inc
+// https://www.iana.org/domains/root/db/quebec.html
+quebec
+
+// quest : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/quest.html
+quest
+
+// racing : Premier Registry Limited
+// https://www.iana.org/domains/root/db/racing.html
+racing
+
+// radio : European Broadcasting Union (EBU)
+// https://www.iana.org/domains/root/db/radio.html
+radio
+
+// read : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/read.html
+read
+
+// realestate : dotRealEstate LLC
+// https://www.iana.org/domains/root/db/realestate.html
+realestate
+
+// realtor : Real Estate Domains LLC
+// https://www.iana.org/domains/root/db/realtor.html
+realtor
+
+// realty : Internet Naming Company LLC
+// https://www.iana.org/domains/root/db/realty.html
+realty
+
+// recipes : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/recipes.html
+recipes
+
+// red : Identity Digital Limited
+// https://www.iana.org/domains/root/db/red.html
+red
+
+// redstone : Redstone Haute Couture Co., Ltd.
+// https://www.iana.org/domains/root/db/redstone.html
+redstone
+
+// redumbrella : Travelers TLD, LLC
+// https://www.iana.org/domains/root/db/redumbrella.html
+redumbrella
+
+// rehab : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/rehab.html
+rehab
+
+// reise : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/reise.html
+reise
+
+// reisen : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/reisen.html
+reisen
+
+// reit : National Association of Real Estate Investment Trusts, Inc.
+// https://www.iana.org/domains/root/db/reit.html
+reit
+
+// reliance : Reliance Industries Limited
+// https://www.iana.org/domains/root/db/reliance.html
+reliance
+
+// ren : ZDNS International Limited
+// https://www.iana.org/domains/root/db/ren.html
+ren
+
+// rent : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/rent.html
+rent
+
+// rentals : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/rentals.html
+rentals
+
+// repair : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/repair.html
+repair
+
+// report : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/report.html
+report
+
+// republican : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/republican.html
+republican
+
+// rest : Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable
+// https://www.iana.org/domains/root/db/rest.html
+rest
+
+// restaurant : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/restaurant.html
+restaurant
+
+// review : dot Review Limited
+// https://www.iana.org/domains/root/db/review.html
+review
+
+// reviews : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/reviews.html
+reviews
+
+// rexroth : Robert Bosch GMBH
+// https://www.iana.org/domains/root/db/rexroth.html
+rexroth
+
+// rich : iRegistry GmbH
+// https://www.iana.org/domains/root/db/rich.html
+rich
+
+// richardli : Pacific Century Asset Management (HK) Limited
+// https://www.iana.org/domains/root/db/richardli.html
+richardli
+
+// ricoh : Ricoh Company, Ltd.
+// https://www.iana.org/domains/root/db/ricoh.html
+ricoh
+
+// ril : Reliance Industries Limited
+// https://www.iana.org/domains/root/db/ril.html
+ril
+
+// rio : Empresa Municipal de Informática SA - IPLANRIO
+// https://www.iana.org/domains/root/db/rio.html
+rio
+
+// rip : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/rip.html
+rip
+
+// rocks : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/rocks.html
+rocks
+
+// rodeo : Registry Services, LLC
+// https://www.iana.org/domains/root/db/rodeo.html
+rodeo
+
+// rogers : Rogers Communications Canada Inc.
+// https://www.iana.org/domains/root/db/rogers.html
+rogers
+
+// room : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/room.html
+room
+
+// rsvp : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/rsvp.html
+rsvp
+
+// rugby : World Rugby Strategic Developments Limited
+// https://www.iana.org/domains/root/db/rugby.html
+rugby
+
+// ruhr : dotSaarland GmbH
+// https://www.iana.org/domains/root/db/ruhr.html
+ruhr
+
+// run : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/run.html
+run
+
+// rwe : RWE AG
+// https://www.iana.org/domains/root/db/rwe.html
+rwe
+
+// ryukyu : BRregistry, Inc.
+// https://www.iana.org/domains/root/db/ryukyu.html
+ryukyu
+
+// saarland : dotSaarland GmbH
+// https://www.iana.org/domains/root/db/saarland.html
+saarland
+
+// safe : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/safe.html
+safe
+
+// safety : Safety Registry Services, LLC.
+// https://www.iana.org/domains/root/db/safety.html
+safety
+
+// sakura : SAKURA Internet Inc.
+// https://www.iana.org/domains/root/db/sakura.html
+sakura
+
+// sale : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/sale.html
+sale
+
+// salon : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/salon.html
+salon
+
+// samsclub : Wal-Mart Stores, Inc.
+// https://www.iana.org/domains/root/db/samsclub.html
+samsclub
+
+// samsung : SAMSUNG SDS CO., LTD
+// https://www.iana.org/domains/root/db/samsung.html
+samsung
+
+// sandvik : Sandvik AB
+// https://www.iana.org/domains/root/db/sandvik.html
+sandvik
+
+// sandvikcoromant : Sandvik AB
+// https://www.iana.org/domains/root/db/sandvikcoromant.html
+sandvikcoromant
+
+// sanofi : Sanofi
+// https://www.iana.org/domains/root/db/sanofi.html
+sanofi
+
+// sap : SAP AG
+// https://www.iana.org/domains/root/db/sap.html
+sap
+
+// sarl : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/sarl.html
+sarl
+
+// sas : Research IP LLC
+// https://www.iana.org/domains/root/db/sas.html
+sas
+
+// save : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/save.html
+save
+
+// saxo : Saxo Bank A/S
+// https://www.iana.org/domains/root/db/saxo.html
+saxo
+
+// sbi : STATE BANK OF INDIA
+// https://www.iana.org/domains/root/db/sbi.html
+sbi
+
+// sbs : ShortDot SA
+// https://www.iana.org/domains/root/db/sbs.html
+sbs
+
+// scb : The Siam Commercial Bank Public Company Limited ("SCB")
+// https://www.iana.org/domains/root/db/scb.html
+scb
+
+// schaeffler : Schaeffler Technologies AG & Co. KG
+// https://www.iana.org/domains/root/db/schaeffler.html
+schaeffler
+
+// schmidt : SCHMIDT GROUPE S.A.S.
+// https://www.iana.org/domains/root/db/schmidt.html
+schmidt
+
+// scholarships : Scholarships.com, LLC
+// https://www.iana.org/domains/root/db/scholarships.html
+scholarships
+
+// school : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/school.html
+school
+
+// schule : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/schule.html
+schule
+
+// schwarz : Schwarz Domains und Services GmbH & Co. KG
+// https://www.iana.org/domains/root/db/schwarz.html
+schwarz
+
+// science : dot Science Limited
+// https://www.iana.org/domains/root/db/science.html
+science
+
+// scot : Dot Scot Registry Limited
+// https://www.iana.org/domains/root/db/scot.html
+scot
+
+// search : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/search.html
+search
+
+// seat : SEAT, S.A. (Sociedad Unipersonal)
+// https://www.iana.org/domains/root/db/seat.html
+seat
+
+// secure : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/secure.html
+secure
+
+// security : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/security.html
+security
+
+// seek : Seek Limited
+// https://www.iana.org/domains/root/db/seek.html
+seek
+
+// select : Registry Services, LLC
+// https://www.iana.org/domains/root/db/select.html
+select
+
+// sener : Sener Ingeniería y Sistemas, S.A.
+// https://www.iana.org/domains/root/db/sener.html
+sener
+
+// services : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/services.html
+services
+
+// seven : Seven West Media Ltd
+// https://www.iana.org/domains/root/db/seven.html
+seven
+
+// sew : SEW-EURODRIVE GmbH & Co KG
+// https://www.iana.org/domains/root/db/sew.html
+sew
+
+// sex : ICM Registry SX LLC
+// https://www.iana.org/domains/root/db/sex.html
+sex
+
+// sexy : Internet Naming Company LLC
+// https://www.iana.org/domains/root/db/sexy.html
+sexy
+
+// sfr : Societe Francaise du Radiotelephone - SFR
+// https://www.iana.org/domains/root/db/sfr.html
+sfr
+
+// shangrila : Shangri‐La International Hotel Management Limited
+// https://www.iana.org/domains/root/db/shangrila.html
+shangrila
+
+// sharp : Sharp Corporation
+// https://www.iana.org/domains/root/db/sharp.html
+sharp
+
+// shaw : Shaw Cablesystems G.P.
+// https://www.iana.org/domains/root/db/shaw.html
+shaw
+
+// shell : Shell Information Technology International Inc
+// https://www.iana.org/domains/root/db/shell.html
+shell
+
+// shia : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+// https://www.iana.org/domains/root/db/shia.html
+shia
+
+// shiksha : Identity Digital Limited
+// https://www.iana.org/domains/root/db/shiksha.html
+shiksha
+
+// shoes : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/shoes.html
+shoes
+
+// shop : GMO Registry, Inc.
+// https://www.iana.org/domains/root/db/shop.html
+shop
+
+// shopping : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/shopping.html
+shopping
+
+// shouji : Beijing Qihu Keji Co., Ltd.
+// https://www.iana.org/domains/root/db/shouji.html
+shouji
+
+// show : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/show.html
+show
+
+// silk : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/silk.html
+silk
+
+// sina : Sina Corporation
+// https://www.iana.org/domains/root/db/sina.html
+sina
+
+// singles : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/singles.html
+singles
+
+// site : Radix FZC DMCC
+// https://www.iana.org/domains/root/db/site.html
+site
+
+// ski : Identity Digital Limited
+// https://www.iana.org/domains/root/db/ski.html
+ski
+
+// skin : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/skin.html
+skin
+
+// sky : Sky International AG
+// https://www.iana.org/domains/root/db/sky.html
+sky
+
+// skype : Microsoft Corporation
+// https://www.iana.org/domains/root/db/skype.html
+skype
+
+// sling : DISH Technologies L.L.C.
+// https://www.iana.org/domains/root/db/sling.html
+sling
+
+// smart : Smart Communications, Inc. (SMART)
+// https://www.iana.org/domains/root/db/smart.html
+smart
+
+// smile : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/smile.html
+smile
+
+// sncf : Société Nationale SNCF
+// https://www.iana.org/domains/root/db/sncf.html
+sncf
+
+// soccer : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/soccer.html
+soccer
+
+// social : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/social.html
+social
+
+// softbank : SoftBank Group Corp.
+// https://www.iana.org/domains/root/db/softbank.html
+softbank
+
+// software : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/software.html
+software
+
+// sohu : Sohu.com Limited
+// https://www.iana.org/domains/root/db/sohu.html
+sohu
+
+// solar : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/solar.html
+solar
+
+// solutions : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/solutions.html
+solutions
+
+// song : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/song.html
+song
+
+// sony : Sony Corporation
+// https://www.iana.org/domains/root/db/sony.html
+sony
+
+// soy : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/soy.html
+soy
+
+// spa : Asia Spa and Wellness Promotion Council Limited
+// https://www.iana.org/domains/root/db/spa.html
+spa
+
+// space : Radix FZC DMCC
+// https://www.iana.org/domains/root/db/space.html
+space
+
+// sport : SportAccord
+// https://www.iana.org/domains/root/db/sport.html
+sport
+
+// spot : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/spot.html
+spot
+
+// srl : InterNetX, Corp
+// https://www.iana.org/domains/root/db/srl.html
+srl
+
+// stada : STADA Arzneimittel AG
+// https://www.iana.org/domains/root/db/stada.html
+stada
+
+// staples : Staples, Inc.
+// https://www.iana.org/domains/root/db/staples.html
+staples
+
+// star : Star India Private Limited
+// https://www.iana.org/domains/root/db/star.html
+star
+
+// statebank : STATE BANK OF INDIA
+// https://www.iana.org/domains/root/db/statebank.html
+statebank
+
+// statefarm : State Farm Mutual Automobile Insurance Company
+// https://www.iana.org/domains/root/db/statefarm.html
+statefarm
+
+// stc : Saudi Telecom Company
+// https://www.iana.org/domains/root/db/stc.html
+stc
+
+// stcgroup : Saudi Telecom Company
+// https://www.iana.org/domains/root/db/stcgroup.html
+stcgroup
+
+// stockholm : Stockholms kommun
+// https://www.iana.org/domains/root/db/stockholm.html
+stockholm
+
+// storage : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/storage.html
+storage
+
+// store : Radix FZC DMCC
+// https://www.iana.org/domains/root/db/store.html
+store
+
+// stream : dot Stream Limited
+// https://www.iana.org/domains/root/db/stream.html
+stream
+
+// studio : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/studio.html
+studio
+
+// study : Registry Services, LLC
+// https://www.iana.org/domains/root/db/study.html
+study
+
+// style : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/style.html
+style
+
+// sucks : Vox Populi Registry Ltd.
+// https://www.iana.org/domains/root/db/sucks.html
+sucks
+
+// supplies : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/supplies.html
+supplies
+
+// supply : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/supply.html
+supply
+
+// support : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/support.html
+support
+
+// surf : Registry Services, LLC
+// https://www.iana.org/domains/root/db/surf.html
+surf
+
+// surgery : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/surgery.html
+surgery
+
+// suzuki : SUZUKI MOTOR CORPORATION
+// https://www.iana.org/domains/root/db/suzuki.html
+suzuki
+
+// swatch : The Swatch Group Ltd
+// https://www.iana.org/domains/root/db/swatch.html
+swatch
+
+// swiss : Swiss Confederation
+// https://www.iana.org/domains/root/db/swiss.html
+swiss
+
+// sydney : State of New South Wales, Department of Premier and Cabinet
+// https://www.iana.org/domains/root/db/sydney.html
+sydney
+
+// systems : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/systems.html
+systems
+
+// tab : Tabcorp Holdings Limited
+// https://www.iana.org/domains/root/db/tab.html
+tab
+
+// taipei : Taipei City Government
+// https://www.iana.org/domains/root/db/taipei.html
+taipei
+
+// talk : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/talk.html
+talk
+
+// taobao : Alibaba Group Holding Limited
+// https://www.iana.org/domains/root/db/taobao.html
+taobao
+
+// target : Target Domain Holdings, LLC
+// https://www.iana.org/domains/root/db/target.html
+target
+
+// tatamotors : Tata Motors Ltd
+// https://www.iana.org/domains/root/db/tatamotors.html
+tatamotors
+
+// tatar : Limited Liability Company "Coordination Center of Regional Domain of Tatarstan Republic"
+// https://www.iana.org/domains/root/db/tatar.html
+tatar
+
+// tattoo : Registry Services, LLC
+// https://www.iana.org/domains/root/db/tattoo.html
+tattoo
+
+// tax : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/tax.html
+tax
+
+// taxi : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/taxi.html
+taxi
+
+// tci : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+// https://www.iana.org/domains/root/db/tci.html
+tci
+
+// tdk : TDK Corporation
+// https://www.iana.org/domains/root/db/tdk.html
+tdk
+
+// team : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/team.html
+team
+
+// tech : Radix FZC DMCC
+// https://www.iana.org/domains/root/db/tech.html
+tech
+
+// technology : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/technology.html
+technology
+
+// temasek : Temasek Holdings (Private) Limited
+// https://www.iana.org/domains/root/db/temasek.html
+temasek
+
+// tennis : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/tennis.html
+tennis
+
+// teva : Teva Pharmaceutical Industries Limited
+// https://www.iana.org/domains/root/db/teva.html
+teva
+
+// thd : Home Depot Product Authority, LLC
+// https://www.iana.org/domains/root/db/thd.html
+thd
+
+// theater : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/theater.html
+theater
+
+// theatre : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/theatre.html
+theatre
+
+// tiaa : Teachers Insurance and Annuity Association of America
+// https://www.iana.org/domains/root/db/tiaa.html
+tiaa
+
+// tickets : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/tickets.html
+tickets
+
+// tienda : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/tienda.html
+tienda
+
+// tips : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/tips.html
+tips
+
+// tires : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/tires.html
+tires
+
+// tirol : punkt Tirol GmbH
+// https://www.iana.org/domains/root/db/tirol.html
+tirol
+
+// tjmaxx : The TJX Companies, Inc.
+// https://www.iana.org/domains/root/db/tjmaxx.html
+tjmaxx
+
+// tjx : The TJX Companies, Inc.
+// https://www.iana.org/domains/root/db/tjx.html
+tjx
+
+// tkmaxx : The TJX Companies, Inc.
+// https://www.iana.org/domains/root/db/tkmaxx.html
+tkmaxx
+
+// tmall : Alibaba Group Holding Limited
+// https://www.iana.org/domains/root/db/tmall.html
+tmall
+
+// today : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/today.html
+today
+
+// tokyo : GMO Registry, Inc.
+// https://www.iana.org/domains/root/db/tokyo.html
+tokyo
+
+// tools : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/tools.html
+tools
+
+// top : .TOP Registry
+// https://www.iana.org/domains/root/db/top.html
+top
+
+// toray : Toray Industries, Inc.
+// https://www.iana.org/domains/root/db/toray.html
+toray
+
+// toshiba : TOSHIBA Corporation
+// https://www.iana.org/domains/root/db/toshiba.html
+toshiba
+
+// total : TotalEnergies SE
+// https://www.iana.org/domains/root/db/total.html
+total
+
+// tours : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/tours.html
+tours
+
+// town : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/town.html
+town
+
+// toyota : TOYOTA MOTOR CORPORATION
+// https://www.iana.org/domains/root/db/toyota.html
+toyota
+
+// toys : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/toys.html
+toys
+
+// trade : Elite Registry Limited
+// https://www.iana.org/domains/root/db/trade.html
+trade
+
+// trading : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/trading.html
+trading
+
+// training : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/training.html
+training
+
+// travel : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/travel.html
+travel
+
+// travelers : Travelers TLD, LLC
+// https://www.iana.org/domains/root/db/travelers.html
+travelers
+
+// travelersinsurance : Travelers TLD, LLC
+// https://www.iana.org/domains/root/db/travelersinsurance.html
+travelersinsurance
+
+// trust : Internet Naming Company LLC
+// https://www.iana.org/domains/root/db/trust.html
+trust
+
+// trv : Travelers TLD, LLC
+// https://www.iana.org/domains/root/db/trv.html
+trv
+
+// tube : Latin American Telecom LLC
+// https://www.iana.org/domains/root/db/tube.html
+tube
+
+// tui : TUI AG
+// https://www.iana.org/domains/root/db/tui.html
+tui
+
+// tunes : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/tunes.html
+tunes
+
+// tushu : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/tushu.html
+tushu
+
+// tvs : T V SUNDRAM IYENGAR & SONS LIMITED
+// https://www.iana.org/domains/root/db/tvs.html
+tvs
+
+// ubank : National Australia Bank Limited
+// https://www.iana.org/domains/root/db/ubank.html
+ubank
+
+// ubs : UBS AG
+// https://www.iana.org/domains/root/db/ubs.html
+ubs
+
+// unicom : China United Network Communications Corporation Limited
+// https://www.iana.org/domains/root/db/unicom.html
+unicom
+
+// university : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/university.html
+university
+
+// uno : Radix FZC DMCC
+// https://www.iana.org/domains/root/db/uno.html
+uno
+
+// uol : UBN INTERNET LTDA.
+// https://www.iana.org/domains/root/db/uol.html
+uol
+
+// ups : UPS Market Driver, Inc.
+// https://www.iana.org/domains/root/db/ups.html
+ups
+
+// vacations : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/vacations.html
+vacations
+
+// vana : Internet Naming Company LLC
+// https://www.iana.org/domains/root/db/vana.html
+vana
+
+// vanguard : The Vanguard Group, Inc.
+// https://www.iana.org/domains/root/db/vanguard.html
+vanguard
+
+// vegas : Dot Vegas, Inc.
+// https://www.iana.org/domains/root/db/vegas.html
+vegas
+
+// ventures : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/ventures.html
+ventures
+
+// verisign : VeriSign, Inc.
+// https://www.iana.org/domains/root/db/verisign.html
+verisign
+
+// versicherung : tldbox GmbH
+// https://www.iana.org/domains/root/db/versicherung.html
+versicherung
+
+// vet : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/vet.html
+vet
+
+// viajes : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/viajes.html
+viajes
+
+// video : Dog Beach, LLC
+// https://www.iana.org/domains/root/db/video.html
+video
+
+// vig : VIENNA INSURANCE GROUP AG Wiener Versicherung Gruppe
+// https://www.iana.org/domains/root/db/vig.html
+vig
+
+// viking : Viking River Cruises (Bermuda) Ltd.
+// https://www.iana.org/domains/root/db/viking.html
+viking
+
+// villas : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/villas.html
+villas
+
+// vin : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/vin.html
+vin
+
+// vip : Registry Services, LLC
+// https://www.iana.org/domains/root/db/vip.html
+vip
+
+// virgin : Virgin Enterprises Limited
+// https://www.iana.org/domains/root/db/virgin.html
+virgin
+
+// visa : Visa Worldwide Pte. Limited
+// https://www.iana.org/domains/root/db/visa.html
+visa
+
+// vision : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/vision.html
+vision
+
+// viva : Saudi Telecom Company
+// https://www.iana.org/domains/root/db/viva.html
+viva
+
+// vivo : Telefonica Brasil S.A.
+// https://www.iana.org/domains/root/db/vivo.html
+vivo
+
+// vlaanderen : DNS.be vzw
+// https://www.iana.org/domains/root/db/vlaanderen.html
+vlaanderen
+
+// vodka : Registry Services, LLC
+// https://www.iana.org/domains/root/db/vodka.html
+vodka
+
+// volvo : Volvo Holding Sverige Aktiebolag
+// https://www.iana.org/domains/root/db/volvo.html
+volvo
+
+// vote : Monolith Registry LLC
+// https://www.iana.org/domains/root/db/vote.html
+vote
+
+// voting : Valuetainment Corp.
+// https://www.iana.org/domains/root/db/voting.html
+voting
+
+// voto : Monolith Registry LLC
+// https://www.iana.org/domains/root/db/voto.html
+voto
+
+// voyage : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/voyage.html
+voyage
+
+// wales : Nominet UK
+// https://www.iana.org/domains/root/db/wales.html
+wales
+
+// walmart : Wal-Mart Stores, Inc.
+// https://www.iana.org/domains/root/db/walmart.html
+walmart
+
+// walter : Sandvik AB
+// https://www.iana.org/domains/root/db/walter.html
+walter
+
+// wang : Zodiac Wang Limited
+// https://www.iana.org/domains/root/db/wang.html
+wang
+
+// wanggou : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/wanggou.html
+wanggou
+
+// watch : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/watch.html
+watch
+
+// watches : Identity Digital Limited
+// https://www.iana.org/domains/root/db/watches.html
+watches
+
+// weather : International Business Machines Corporation
+// https://www.iana.org/domains/root/db/weather.html
+weather
+
+// weatherchannel : International Business Machines Corporation
+// https://www.iana.org/domains/root/db/weatherchannel.html
+weatherchannel
+
+// webcam : dot Webcam Limited
+// https://www.iana.org/domains/root/db/webcam.html
+webcam
+
+// weber : Saint-Gobain Weber SA
+// https://www.iana.org/domains/root/db/weber.html
+weber
+
+// website : Radix FZC DMCC
+// https://www.iana.org/domains/root/db/website.html
+website
+
+// wed
+// https://www.iana.org/domains/root/db/wed.html
+wed
+
+// wedding : Registry Services, LLC
+// https://www.iana.org/domains/root/db/wedding.html
+wedding
+
+// weibo : Sina Corporation
+// https://www.iana.org/domains/root/db/weibo.html
+weibo
+
+// weir : Weir Group IP Limited
+// https://www.iana.org/domains/root/db/weir.html
+weir
+
+// whoswho : Who's Who Registry
+// https://www.iana.org/domains/root/db/whoswho.html
+whoswho
+
+// wien : punkt.wien GmbH
+// https://www.iana.org/domains/root/db/wien.html
+wien
+
+// wiki : Registry Services, LLC
+// https://www.iana.org/domains/root/db/wiki.html
+wiki
+
+// williamhill : William Hill Organization Limited
+// https://www.iana.org/domains/root/db/williamhill.html
+williamhill
+
+// win : First Registry Limited
+// https://www.iana.org/domains/root/db/win.html
+win
+
+// windows : Microsoft Corporation
+// https://www.iana.org/domains/root/db/windows.html
+windows
+
+// wine : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/wine.html
+wine
+
+// winners : The TJX Companies, Inc.
+// https://www.iana.org/domains/root/db/winners.html
+winners
+
+// wme : William Morris Endeavor Entertainment, LLC
+// https://www.iana.org/domains/root/db/wme.html
+wme
+
+// wolterskluwer : Wolters Kluwer N.V.
+// https://www.iana.org/domains/root/db/wolterskluwer.html
+wolterskluwer
+
+// woodside : Woodside Petroleum Limited
+// https://www.iana.org/domains/root/db/woodside.html
+woodside
+
+// work : Registry Services, LLC
+// https://www.iana.org/domains/root/db/work.html
+work
+
+// works : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/works.html
+works
+
+// world : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/world.html
+world
+
+// wow : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/wow.html
+wow
+
+// wtc : World Trade Centers Association, Inc.
+// https://www.iana.org/domains/root/db/wtc.html
+wtc
+
+// wtf : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/wtf.html
+wtf
+
+// xbox : Microsoft Corporation
+// https://www.iana.org/domains/root/db/xbox.html
+xbox
+
+// xerox : Xerox DNHC LLC
+// https://www.iana.org/domains/root/db/xerox.html
+xerox
+
+// xfinity : Comcast IP Holdings I, LLC
+// https://www.iana.org/domains/root/db/xfinity.html
+xfinity
+
+// xihuan : Beijing Qihu Keji Co., Ltd.
+// https://www.iana.org/domains/root/db/xihuan.html
+xihuan
+
+// xin : Elegant Leader Limited
+// https://www.iana.org/domains/root/db/xin.html
+xin
+
+// xn--11b4c3d : VeriSign Sarl
+// https://www.iana.org/domains/root/db/xn--11b4c3d.html
+कॉम
+
+// xn--1ck2e1b : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/xn--1ck2e1b.html
+セール
+
+// xn--1qqw23a : Guangzhou YU Wei Information Technology Co., Ltd.
+// https://www.iana.org/domains/root/db/xn--1qqw23a.html
+佛山
+
+// xn--30rr7y : Excellent First Limited
+// https://www.iana.org/domains/root/db/xn--30rr7y.html
+慈善
+
+// xn--3bst00m : Eagle Horizon Limited
+// https://www.iana.org/domains/root/db/xn--3bst00m.html
+集团
+
+// xn--3ds443g : TLD REGISTRY LIMITED OY
+// https://www.iana.org/domains/root/db/xn--3ds443g.html
+在线
+
+// xn--3pxu8k : VeriSign Sarl
+// https://www.iana.org/domains/root/db/xn--3pxu8k.html
+点看
+
+// xn--42c2d9a : VeriSign Sarl
+// https://www.iana.org/domains/root/db/xn--42c2d9a.html
+คอม
+
+// xn--45q11c : Zodiac Gemini Ltd
+// https://www.iana.org/domains/root/db/xn--45q11c.html
+八卦
+
+// xn--4gbrim : Helium TLDs Ltd
+// https://www.iana.org/domains/root/db/xn--4gbrim.html
+موقع
+
+// xn--55qw42g : China Organizational Name Administration Center
+// https://www.iana.org/domains/root/db/xn--55qw42g.html
+公益
+
+// xn--55qx5d : China Internet Network Information Center (CNNIC)
+// https://www.iana.org/domains/root/db/xn--55qx5d.html
+公司
+
+// xn--5su34j936bgsg : Shangri‐La International Hotel Management Limited
+// https://www.iana.org/domains/root/db/xn--5su34j936bgsg.html
+香格里拉
+
+// xn--5tzm5g : Global Website TLD Asia Limited
+// https://www.iana.org/domains/root/db/xn--5tzm5g.html
+网站
+
+// xn--6frz82g : Identity Digital Limited
+// https://www.iana.org/domains/root/db/xn--6frz82g.html
+移动
+
+// xn--6qq986b3xl : Tycoon Treasure Limited
+// https://www.iana.org/domains/root/db/xn--6qq986b3xl.html
+我爱你
+
+// xn--80adxhks : Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID)
+// https://www.iana.org/domains/root/db/xn--80adxhks.html
+москва
+
+// xn--80aqecdr1a : Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication)
+// https://www.iana.org/domains/root/db/xn--80aqecdr1a.html
+католик
+
+// xn--80asehdb : CORE Association
+// https://www.iana.org/domains/root/db/xn--80asehdb.html
+онлайн
+
+// xn--80aswg : CORE Association
+// https://www.iana.org/domains/root/db/xn--80aswg.html
+сайт
+
+// xn--8y0a063a : China United Network Communications Corporation Limited
+// https://www.iana.org/domains/root/db/xn--8y0a063a.html
+联通
+
+// xn--9dbq2a : VeriSign Sarl
+// https://www.iana.org/domains/root/db/xn--9dbq2a.html
+קום
+
+// xn--9et52u : RISE VICTORY LIMITED
+// https://www.iana.org/domains/root/db/xn--9et52u.html
+时尚
+
+// xn--9krt00a : Sina Corporation
+// https://www.iana.org/domains/root/db/xn--9krt00a.html
+微博
+
+// xn--b4w605ferd : Temasek Holdings (Private) Limited
+// https://www.iana.org/domains/root/db/xn--b4w605ferd.html
+淡马锡
+
+// xn--bck1b9a5dre4c : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/xn--bck1b9a5dre4c.html
+ファッション
+
+// xn--c1avg : Public Interest Registry
+// https://www.iana.org/domains/root/db/xn--c1avg.html
+орг
+
+// xn--c2br7g : VeriSign Sarl
+// https://www.iana.org/domains/root/db/xn--c2br7g.html
+नेट
+
+// xn--cck2b3b : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/xn--cck2b3b.html
+ストア
+
+// xn--cckwcxetd : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/xn--cckwcxetd.html
+アマゾン
+
+// xn--cg4bki : SAMSUNG SDS CO., LTD
+// https://www.iana.org/domains/root/db/xn--cg4bki.html
+삼성
+
+// xn--czr694b : Internet DotTrademark Organisation Limited
+// https://www.iana.org/domains/root/db/xn--czr694b.html
+商标
+
+// xn--czrs0t : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/xn--czrs0t.html
+商店
+
+// xn--czru2d : Zodiac Aquarius Limited
+// https://www.iana.org/domains/root/db/xn--czru2d.html
+商城
+
+// xn--d1acj3b : The Foundation for Network Initiatives “The Smart Internet”
+// https://www.iana.org/domains/root/db/xn--d1acj3b.html
+дети
+
+// xn--eckvdtc9d : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/xn--eckvdtc9d.html
+ポイント
+
+// xn--efvy88h : Guangzhou YU Wei Information Technology Co., Ltd.
+// https://www.iana.org/domains/root/db/xn--efvy88h.html
+新闻
+
+// xn--fct429k : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/xn--fct429k.html
+家電
+
+// xn--fhbei : VeriSign Sarl
+// https://www.iana.org/domains/root/db/xn--fhbei.html
+كوم
+
+// xn--fiq228c5hs : TLD REGISTRY LIMITED OY
+// https://www.iana.org/domains/root/db/xn--fiq228c5hs.html
+中文网
+
+// xn--fiq64b : CITIC Group Corporation
+// https://www.iana.org/domains/root/db/xn--fiq64b.html
+中信
+
+// xn--fjq720a : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/xn--fjq720a.html
+娱乐
+
+// xn--flw351e : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/xn--flw351e.html
+谷歌
+
+// xn--fzys8d69uvgm : PCCW Enterprises Limited
+// https://www.iana.org/domains/root/db/xn--fzys8d69uvgm.html
+電訊盈科
+
+// xn--g2xx48c : Nawang Heli(Xiamen) Network Service Co., LTD.
+// https://www.iana.org/domains/root/db/xn--g2xx48c.html
+购物
+
+// xn--gckr3f0f : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/xn--gckr3f0f.html
+クラウド
+
+// xn--gk3at1e : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/xn--gk3at1e.html
+通販
+
+// xn--hxt814e : Zodiac Taurus Limited
+// https://www.iana.org/domains/root/db/xn--hxt814e.html
+网店
+
+// xn--i1b6b1a6a2e : Public Interest Registry
+// https://www.iana.org/domains/root/db/xn--i1b6b1a6a2e.html
+संगठन
+
+// xn--imr513n : Internet DotTrademark Organisation Limited
+// https://www.iana.org/domains/root/db/xn--imr513n.html
+餐厅
+
+// xn--io0a7i : China Internet Network Information Center (CNNIC)
+// https://www.iana.org/domains/root/db/xn--io0a7i.html
+网络
+
+// xn--j1aef : VeriSign Sarl
+// https://www.iana.org/domains/root/db/xn--j1aef.html
+ком
+
+// xn--jlq480n2rg : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/xn--jlq480n2rg.html
+亚马逊
+
+// xn--jvr189m : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/xn--jvr189m.html
+食品
+
+// xn--kcrx77d1x4a : Koninklijke Philips N.V.
+// https://www.iana.org/domains/root/db/xn--kcrx77d1x4a.html
+飞利浦
+
+// xn--kput3i : Beijing RITT-Net Technology Development Co., Ltd
+// https://www.iana.org/domains/root/db/xn--kput3i.html
+手机
+
+// xn--mgba3a3ejt : Aramco Services Company
+// https://www.iana.org/domains/root/db/xn--mgba3a3ejt.html
+ارامكو
+
+// xn--mgba7c0bbn0a : Competrol (Luxembourg) Sarl
+// https://www.iana.org/domains/root/db/xn--mgba7c0bbn0a.html
+العليان
+
+// xn--mgbab2bd : CORE Association
+// https://www.iana.org/domains/root/db/xn--mgbab2bd.html
+بازار
+
+// xn--mgbca7dzdo : Abu Dhabi Systems and Information Centre
+// https://www.iana.org/domains/root/db/xn--mgbca7dzdo.html
+ابوظبي
+
+// xn--mgbi4ecexp : Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication)
+// https://www.iana.org/domains/root/db/xn--mgbi4ecexp.html
+كاثوليك
+
+// xn--mgbt3dhd : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+// https://www.iana.org/domains/root/db/xn--mgbt3dhd.html
+همراه
+
+// xn--mk1bu44c : VeriSign Sarl
+// https://www.iana.org/domains/root/db/xn--mk1bu44c.html
+닷컴
+
+// xn--mxtq1m : Net-Chinese Co., Ltd.
+// https://www.iana.org/domains/root/db/xn--mxtq1m.html
+政府
+
+// xn--ngbc5azd : International Domain Registry Pty. Ltd.
+// https://www.iana.org/domains/root/db/xn--ngbc5azd.html
+شبكة
+
+// xn--ngbe9e0a : Kuwait Finance House
+// https://www.iana.org/domains/root/db/xn--ngbe9e0a.html
+بيتك
+
+// xn--ngbrx : League of Arab States
+// https://www.iana.org/domains/root/db/xn--ngbrx.html
+عرب
+
+// xn--nqv7f : Public Interest Registry
+// https://www.iana.org/domains/root/db/xn--nqv7f.html
+机构
+
+// xn--nqv7fs00ema : Public Interest Registry
+// https://www.iana.org/domains/root/db/xn--nqv7fs00ema.html
+组织机构
+
+// xn--nyqy26a : Stable Tone Limited
+// https://www.iana.org/domains/root/db/xn--nyqy26a.html
+健康
+
+// xn--otu796d : Jiang Yu Liang Cai Technology Company Limited
+// https://www.iana.org/domains/root/db/xn--otu796d.html
+招聘
+
+// xn--p1acf : Rusnames Limited
+// https://www.iana.org/domains/root/db/xn--p1acf.html
+рус
+
+// xn--pssy2u : VeriSign Sarl
+// https://www.iana.org/domains/root/db/xn--pssy2u.html
+大拿
+
+// xn--q9jyb4c : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/xn--q9jyb4c.html
+みんな
+
+// xn--qcka1pmc : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/xn--qcka1pmc.html
+グーグル
+
+// xn--rhqv96g : Stable Tone Limited
+// https://www.iana.org/domains/root/db/xn--rhqv96g.html
+世界
+
+// xn--rovu88b : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/xn--rovu88b.html
+書籍
+
+// xn--ses554g : KNET Co., Ltd.
+// https://www.iana.org/domains/root/db/xn--ses554g.html
+网址
+
+// xn--t60b56a : VeriSign Sarl
+// https://www.iana.org/domains/root/db/xn--t60b56a.html
+닷넷
+
+// xn--tckwe : VeriSign Sarl
+// https://www.iana.org/domains/root/db/xn--tckwe.html
+コム
+
+// xn--tiq49xqyj : Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication)
+// https://www.iana.org/domains/root/db/xn--tiq49xqyj.html
+天主教
+
+// xn--unup4y : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/xn--unup4y.html
+游戏
+
+// xn--vermgensberater-ctb : Deutsche Vermögensberatung Aktiengesellschaft DVAG
+// https://www.iana.org/domains/root/db/xn--vermgensberater-ctb.html
+vermögensberater
+
+// xn--vermgensberatung-pwb : Deutsche Vermögensberatung Aktiengesellschaft DVAG
+// https://www.iana.org/domains/root/db/xn--vermgensberatung-pwb.html
+vermögensberatung
+
+// xn--vhquv : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/xn--vhquv.html
+企业
+
+// xn--vuq861b : Beijing Tele-info Technology Co., Ltd.
+// https://www.iana.org/domains/root/db/xn--vuq861b.html
+信息
+
+// xn--w4r85el8fhu5dnra : Kerry Trading Co. Limited
+// https://www.iana.org/domains/root/db/xn--w4r85el8fhu5dnra.html
+嘉里大酒店
+
+// xn--w4rs40l : Kerry Trading Co. Limited
+// https://www.iana.org/domains/root/db/xn--w4rs40l.html
+嘉里
+
+// xn--xhq521b : Guangzhou YU Wei Information Technology Co., Ltd.
+// https://www.iana.org/domains/root/db/xn--xhq521b.html
+广东
+
+// xn--zfr164b : China Organizational Name Administration Center
+// https://www.iana.org/domains/root/db/xn--zfr164b.html
+政务
+
+// xyz : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/xyz.html
+xyz
+
+// yachts : XYZ.COM LLC
+// https://www.iana.org/domains/root/db/yachts.html
+yachts
+
+// yahoo : Oath Inc.
+// https://www.iana.org/domains/root/db/yahoo.html
+yahoo
+
+// yamaxun : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/yamaxun.html
+yamaxun
+
+// yandex : Yandex Europe B.V.
+// https://www.iana.org/domains/root/db/yandex.html
+yandex
+
+// yodobashi : YODOBASHI CAMERA CO.,LTD.
+// https://www.iana.org/domains/root/db/yodobashi.html
+yodobashi
+
+// yoga : Registry Services, LLC
+// https://www.iana.org/domains/root/db/yoga.html
+yoga
+
+// yokohama : GMO Registry, Inc.
+// https://www.iana.org/domains/root/db/yokohama.html
+yokohama
+
+// you : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/you.html
+you
+
+// youtube : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/youtube.html
+youtube
+
+// yun : Beijing Qihu Keji Co., Ltd.
+// https://www.iana.org/domains/root/db/yun.html
+yun
+
+// zappos : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/zappos.html
+zappos
+
+// zara : Industria de Diseño Textil, S.A. (INDITEX, S.A.)
+// https://www.iana.org/domains/root/db/zara.html
+zara
+
+// zero : Amazon Registry Services, Inc.
+// https://www.iana.org/domains/root/db/zero.html
+zero
+
+// zip : Charleston Road Registry Inc.
+// https://www.iana.org/domains/root/db/zip.html
+zip
+
+// zone : Binky Moon, LLC
+// https://www.iana.org/domains/root/db/zone.html
+zone
+
+// zuerich : Kanton Zürich (Canton of Zurich)
+// https://www.iana.org/domains/root/db/zuerich.html
+zuerich
+
+
+// ===END ICANN DOMAINS===
+// ===BEGIN PRIVATE DOMAINS===
+// (Note: these are in alphabetical order by company name)
+
+// 1GB LLC : https://www.1gb.ua/
+// Submitted by 1GB LLC <noc@1gb.com.ua>
+cc.ua
+inf.ua
+ltd.ua
+
+// 611coin : https://611project.org/
+611.to
+
+// Aaron Marais' Gitlab pages: https://lab.aaronleem.co.za
+// Submitted by Aaron Marais <its_me@aaronleem.co.za>
+graphox.us
+
+// accesso Technology Group, plc. : https://accesso.com/
+// Submitted by accesso Team <accessoecommerce@accesso.com>
+*.devcdnaccesso.com
+
+// Acorn Labs : https://acorn.io
+// Submitted by Craig Jellick <domains@acorn.io>
+*.on-acorn.io
+
+// ActiveTrail: https://www.activetrail.biz/
+// Submitted by Ofer Kalaora <postmaster@activetrail.com>
+activetrail.biz
+
+// Adobe : https://www.adobe.com/
+// Submitted by Ian Boston <boston@adobe.com> and Lars Trieloff <trieloff@adobe.com>
+adobeaemcloud.com
+*.dev.adobeaemcloud.com
+hlx.live
+adobeaemcloud.net
+hlx.page
+hlx3.page
+
+// Adobe Developer Platform : https://developer.adobe.com
+// Submitted by Jesse MacFadyen<jessem@adobe.com>
+adobeio-static.net
+adobeioruntime.net
+
+// Agnat sp. z o.o. : https://domena.pl
+// Submitted by Przemyslaw Plewa <it-admin@domena.pl>
+beep.pl
+
+// Airkit : https://www.airkit.com/
+// Submitted by Grant Cooksey <security@airkit.com>
+airkitapps.com
+airkitapps-au.com
+airkitapps.eu
+
+// Aiven: https://aiven.io/
+// Submitted by Etienne Stalmans <security@aiven.io>
+aivencloud.com
+
+// Akamai : https://www.akamai.com/
+// Submitted by Akamai Team <publicsuffixlist@akamai.com>
+akadns.net
+akamai.net
+akamai-staging.net
+akamaiedge.net
+akamaiedge-staging.net
+akamaihd.net
+akamaihd-staging.net
+akamaiorigin.net
+akamaiorigin-staging.net
+akamaized.net
+akamaized-staging.net
+edgekey.net
+edgekey-staging.net
+edgesuite.net
+edgesuite-staging.net
+
+// alboto.ca : http://alboto.ca
+// Submitted by Anton Avramov <avramov@alboto.ca>
+barsy.ca
+
+// Alces Software Ltd : http://alces-software.com
+// Submitted by Mark J. Titorenko <mark.titorenko@alces-software.com>
+*.compute.estate
+*.alces.network
+
+// all-inkl.com : https://all-inkl.com
+// Submitted by Werner Kaltofen <wk@all-inkl.com>
+kasserver.com
+
+// Altervista: https://www.altervista.org
+// Submitted by Carlo Cannas <tech_staff@altervista.it>
+altervista.org
+
+// alwaysdata : https://www.alwaysdata.com
+// Submitted by Cyril <admin@alwaysdata.com>
+alwaysdata.net
+
+// Amaze Software : https://amaze.co
+// Submitted by Domain Admin <domainadmin@amaze.co>
+myamaze.net
+
+// Amazon : https://www.amazon.com/
+// Submitted by AWS Security <psl-maintainers@amazon.com>
+// Subsections of Amazon/subsidiaries will appear until "concludes" tag
+
+// Amazon API Gateway
+// Submitted by AWS Security <psl-maintainers@amazon.com>
+// Reference: 4d863337-ff98-4501-a6f2-361eba8445d6
+execute-api.cn-north-1.amazonaws.com.cn
+execute-api.cn-northwest-1.amazonaws.com.cn
+execute-api.af-south-1.amazonaws.com
+execute-api.ap-east-1.amazonaws.com
+execute-api.ap-northeast-1.amazonaws.com
+execute-api.ap-northeast-2.amazonaws.com
+execute-api.ap-northeast-3.amazonaws.com
+execute-api.ap-south-1.amazonaws.com
+execute-api.ap-south-2.amazonaws.com
+execute-api.ap-southeast-1.amazonaws.com
+execute-api.ap-southeast-2.amazonaws.com
+execute-api.ap-southeast-3.amazonaws.com
+execute-api.ap-southeast-4.amazonaws.com
+execute-api.ca-central-1.amazonaws.com
+execute-api.eu-central-1.amazonaws.com
+execute-api.eu-central-2.amazonaws.com
+execute-api.eu-north-1.amazonaws.com
+execute-api.eu-south-1.amazonaws.com
+execute-api.eu-south-2.amazonaws.com
+execute-api.eu-west-1.amazonaws.com
+execute-api.eu-west-2.amazonaws.com
+execute-api.eu-west-3.amazonaws.com
+execute-api.il-central-1.amazonaws.com
+execute-api.me-central-1.amazonaws.com
+execute-api.me-south-1.amazonaws.com
+execute-api.sa-east-1.amazonaws.com
+execute-api.us-east-1.amazonaws.com
+execute-api.us-east-2.amazonaws.com
+execute-api.us-gov-east-1.amazonaws.com
+execute-api.us-gov-west-1.amazonaws.com
+execute-api.us-west-1.amazonaws.com
+execute-api.us-west-2.amazonaws.com
+
+// Amazon CloudFront
+// Submitted by Donavan Miller <donavanm@amazon.com>
+// Reference: 54144616-fd49-4435-8535-19c6a601bdb3
+cloudfront.net
+
+// Amazon Cognito
+// Submitted by AWS Security <psl-maintainers@amazon.com>
+// Reference: 7bee1013-f456-47df-bfe8-03c78d946d61
+auth.af-south-1.amazoncognito.com
+auth.ap-northeast-1.amazoncognito.com
+auth.ap-northeast-2.amazoncognito.com
+auth.ap-northeast-3.amazoncognito.com
+auth.ap-south-1.amazoncognito.com
+auth.ap-southeast-1.amazoncognito.com
+auth.ap-southeast-2.amazoncognito.com
+auth.ap-southeast-3.amazoncognito.com
+auth.ca-central-1.amazoncognito.com
+auth.eu-central-1.amazoncognito.com
+auth.eu-north-1.amazoncognito.com
+auth.eu-south-1.amazoncognito.com
+auth.eu-west-1.amazoncognito.com
+auth.eu-west-2.amazoncognito.com
+auth.eu-west-3.amazoncognito.com
+auth.il-central-1.amazoncognito.com
+auth.me-south-1.amazoncognito.com
+auth.sa-east-1.amazoncognito.com
+auth.us-east-1.amazoncognito.com
+auth-fips.us-east-1.amazoncognito.com
+auth.us-east-2.amazoncognito.com
+auth-fips.us-east-2.amazoncognito.com
+auth-fips.us-gov-west-1.amazoncognito.com
+auth.us-west-1.amazoncognito.com
+auth-fips.us-west-1.amazoncognito.com
+auth.us-west-2.amazoncognito.com
+auth-fips.us-west-2.amazoncognito.com
+
+// Amazon EC2
+// Submitted by Luke Wells <psl-maintainers@amazon.com>
+// Reference: 4c38fa71-58ac-4768-99e5-689c1767e537
+*.compute.amazonaws.com
+*.compute-1.amazonaws.com
+*.compute.amazonaws.com.cn
+us-east-1.amazonaws.com
+
+// Amazon EMR
+// Submitted by AWS Security <psl-maintainers@amazon.com>
+// Reference: 597f3f8e-9283-4e48-8e32-7ee25a1ff6ab
+emrappui-prod.cn-north-1.amazonaws.com.cn
+emrnotebooks-prod.cn-north-1.amazonaws.com.cn
+emrstudio-prod.cn-north-1.amazonaws.com.cn
+emrappui-prod.cn-northwest-1.amazonaws.com.cn
+emrnotebooks-prod.cn-northwest-1.amazonaws.com.cn
+emrstudio-prod.cn-northwest-1.amazonaws.com.cn
+emrappui-prod.af-south-1.amazonaws.com
+emrnotebooks-prod.af-south-1.amazonaws.com
+emrstudio-prod.af-south-1.amazonaws.com
+emrappui-prod.ap-east-1.amazonaws.com
+emrnotebooks-prod.ap-east-1.amazonaws.com
+emrstudio-prod.ap-east-1.amazonaws.com
+emrappui-prod.ap-northeast-1.amazonaws.com
+emrnotebooks-prod.ap-northeast-1.amazonaws.com
+emrstudio-prod.ap-northeast-1.amazonaws.com
+emrappui-prod.ap-northeast-2.amazonaws.com
+emrnotebooks-prod.ap-northeast-2.amazonaws.com
+emrstudio-prod.ap-northeast-2.amazonaws.com
+emrappui-prod.ap-northeast-3.amazonaws.com
+emrnotebooks-prod.ap-northeast-3.amazonaws.com
+emrstudio-prod.ap-northeast-3.amazonaws.com
+emrappui-prod.ap-south-1.amazonaws.com
+emrnotebooks-prod.ap-south-1.amazonaws.com
+emrstudio-prod.ap-south-1.amazonaws.com
+emrappui-prod.ap-southeast-1.amazonaws.com
+emrnotebooks-prod.ap-southeast-1.amazonaws.com
+emrstudio-prod.ap-southeast-1.amazonaws.com
+emrappui-prod.ap-southeast-2.amazonaws.com
+emrnotebooks-prod.ap-southeast-2.amazonaws.com
+emrstudio-prod.ap-southeast-2.amazonaws.com
+emrappui-prod.ap-southeast-3.amazonaws.com
+emrnotebooks-prod.ap-southeast-3.amazonaws.com
+emrstudio-prod.ap-southeast-3.amazonaws.com
+emrappui-prod.ca-central-1.amazonaws.com
+emrnotebooks-prod.ca-central-1.amazonaws.com
+emrstudio-prod.ca-central-1.amazonaws.com
+emrappui-prod.eu-central-1.amazonaws.com
+emrnotebooks-prod.eu-central-1.amazonaws.com
+emrstudio-prod.eu-central-1.amazonaws.com
+emrappui-prod.eu-north-1.amazonaws.com
+emrnotebooks-prod.eu-north-1.amazonaws.com
+emrstudio-prod.eu-north-1.amazonaws.com
+emrappui-prod.eu-south-1.amazonaws.com
+emrnotebooks-prod.eu-south-1.amazonaws.com
+emrstudio-prod.eu-south-1.amazonaws.com
+emrappui-prod.eu-west-1.amazonaws.com
+emrnotebooks-prod.eu-west-1.amazonaws.com
+emrstudio-prod.eu-west-1.amazonaws.com
+emrappui-prod.eu-west-2.amazonaws.com
+emrnotebooks-prod.eu-west-2.amazonaws.com
+emrstudio-prod.eu-west-2.amazonaws.com
+emrappui-prod.eu-west-3.amazonaws.com
+emrnotebooks-prod.eu-west-3.amazonaws.com
+emrstudio-prod.eu-west-3.amazonaws.com
+emrappui-prod.me-central-1.amazonaws.com
+emrnotebooks-prod.me-central-1.amazonaws.com
+emrstudio-prod.me-central-1.amazonaws.com
+emrappui-prod.me-south-1.amazonaws.com
+emrnotebooks-prod.me-south-1.amazonaws.com
+emrstudio-prod.me-south-1.amazonaws.com
+emrappui-prod.sa-east-1.amazonaws.com
+emrnotebooks-prod.sa-east-1.amazonaws.com
+emrstudio-prod.sa-east-1.amazonaws.com
+emrappui-prod.us-east-1.amazonaws.com
+emrnotebooks-prod.us-east-1.amazonaws.com
+emrstudio-prod.us-east-1.amazonaws.com
+emrappui-prod.us-east-2.amazonaws.com
+emrnotebooks-prod.us-east-2.amazonaws.com
+emrstudio-prod.us-east-2.amazonaws.com
+emrappui-prod.us-gov-east-1.amazonaws.com
+emrnotebooks-prod.us-gov-east-1.amazonaws.com
+emrstudio-prod.us-gov-east-1.amazonaws.com
+emrappui-prod.us-gov-west-1.amazonaws.com
+emrnotebooks-prod.us-gov-west-1.amazonaws.com
+emrstudio-prod.us-gov-west-1.amazonaws.com
+emrappui-prod.us-west-1.amazonaws.com
+emrnotebooks-prod.us-west-1.amazonaws.com
+emrstudio-prod.us-west-1.amazonaws.com
+emrappui-prod.us-west-2.amazonaws.com
+emrnotebooks-prod.us-west-2.amazonaws.com
+emrstudio-prod.us-west-2.amazonaws.com
+
+// Amazon Managed Workflows for Apache Airflow
+// Submitted by AWS Security <psl-maintainers@amazon.com>
+// Reference: 4ab55e6f-90c0-4a8d-b6a0-52ca5dbb1c2e
+*.cn-north-1.airflow.amazonaws.com.cn
+*.cn-northwest-1.airflow.amazonaws.com.cn
+*.ap-northeast-1.airflow.amazonaws.com
+*.ap-northeast-2.airflow.amazonaws.com
+*.ap-south-1.airflow.amazonaws.com
+*.ap-southeast-1.airflow.amazonaws.com
+*.ap-southeast-2.airflow.amazonaws.com
+*.ca-central-1.airflow.amazonaws.com
+*.eu-central-1.airflow.amazonaws.com
+*.eu-north-1.airflow.amazonaws.com
+*.eu-west-1.airflow.amazonaws.com
+*.eu-west-2.airflow.amazonaws.com
+*.eu-west-3.airflow.amazonaws.com
+*.sa-east-1.airflow.amazonaws.com
+*.us-east-1.airflow.amazonaws.com
+*.us-east-2.airflow.amazonaws.com
+*.us-west-2.airflow.amazonaws.com
+
+// Amazon S3
+// Submitted by AWS Security <psl-maintainers@amazon.com>
+// Reference: 0e801048-08f2-4064-9cb8-e7373e0b57f4
+s3.dualstack.cn-north-1.amazonaws.com.cn
+s3-accesspoint.dualstack.cn-north-1.amazonaws.com.cn
+s3-website.dualstack.cn-north-1.amazonaws.com.cn
+s3.cn-north-1.amazonaws.com.cn
+s3-accesspoint.cn-north-1.amazonaws.com.cn
+s3-deprecated.cn-north-1.amazonaws.com.cn
+s3-object-lambda.cn-north-1.amazonaws.com.cn
+s3-website.cn-north-1.amazonaws.com.cn
+s3.dualstack.cn-northwest-1.amazonaws.com.cn
+s3-accesspoint.dualstack.cn-northwest-1.amazonaws.com.cn
+s3.cn-northwest-1.amazonaws.com.cn
+s3-accesspoint.cn-northwest-1.amazonaws.com.cn
+s3-object-lambda.cn-northwest-1.amazonaws.com.cn
+s3-website.cn-northwest-1.amazonaws.com.cn
+s3.dualstack.af-south-1.amazonaws.com
+s3-accesspoint.dualstack.af-south-1.amazonaws.com
+s3-website.dualstack.af-south-1.amazonaws.com
+s3.af-south-1.amazonaws.com
+s3-accesspoint.af-south-1.amazonaws.com
+s3-object-lambda.af-south-1.amazonaws.com
+s3-website.af-south-1.amazonaws.com
+s3.dualstack.ap-east-1.amazonaws.com
+s3-accesspoint.dualstack.ap-east-1.amazonaws.com
+s3.ap-east-1.amazonaws.com
+s3-accesspoint.ap-east-1.amazonaws.com
+s3-object-lambda.ap-east-1.amazonaws.com
+s3-website.ap-east-1.amazonaws.com
+s3.dualstack.ap-northeast-1.amazonaws.com
+s3-accesspoint.dualstack.ap-northeast-1.amazonaws.com
+s3-website.dualstack.ap-northeast-1.amazonaws.com
+s3.ap-northeast-1.amazonaws.com
+s3-accesspoint.ap-northeast-1.amazonaws.com
+s3-object-lambda.ap-northeast-1.amazonaws.com
+s3-website.ap-northeast-1.amazonaws.com
+s3.dualstack.ap-northeast-2.amazonaws.com
+s3-accesspoint.dualstack.ap-northeast-2.amazonaws.com
+s3-website.dualstack.ap-northeast-2.amazonaws.com
+s3.ap-northeast-2.amazonaws.com
+s3-accesspoint.ap-northeast-2.amazonaws.com
+s3-object-lambda.ap-northeast-2.amazonaws.com
+s3-website.ap-northeast-2.amazonaws.com
+s3.dualstack.ap-northeast-3.amazonaws.com
+s3-accesspoint.dualstack.ap-northeast-3.amazonaws.com
+s3-website.dualstack.ap-northeast-3.amazonaws.com
+s3.ap-northeast-3.amazonaws.com
+s3-accesspoint.ap-northeast-3.amazonaws.com
+s3-object-lambda.ap-northeast-3.amazonaws.com
+s3-website.ap-northeast-3.amazonaws.com
+s3.dualstack.ap-south-1.amazonaws.com
+s3-accesspoint.dualstack.ap-south-1.amazonaws.com
+s3-website.dualstack.ap-south-1.amazonaws.com
+s3.ap-south-1.amazonaws.com
+s3-accesspoint.ap-south-1.amazonaws.com
+s3-object-lambda.ap-south-1.amazonaws.com
+s3-website.ap-south-1.amazonaws.com
+s3.dualstack.ap-south-2.amazonaws.com
+s3-accesspoint.dualstack.ap-south-2.amazonaws.com
+s3.ap-south-2.amazonaws.com
+s3-accesspoint.ap-south-2.amazonaws.com
+s3-object-lambda.ap-south-2.amazonaws.com
+s3-website.ap-south-2.amazonaws.com
+s3.dualstack.ap-southeast-1.amazonaws.com
+s3-accesspoint.dualstack.ap-southeast-1.amazonaws.com
+s3-website.dualstack.ap-southeast-1.amazonaws.com
+s3.ap-southeast-1.amazonaws.com
+s3-accesspoint.ap-southeast-1.amazonaws.com
+s3-object-lambda.ap-southeast-1.amazonaws.com
+s3-website.ap-southeast-1.amazonaws.com
+s3.dualstack.ap-southeast-2.amazonaws.com
+s3-accesspoint.dualstack.ap-southeast-2.amazonaws.com
+s3-website.dualstack.ap-southeast-2.amazonaws.com
+s3.ap-southeast-2.amazonaws.com
+s3-accesspoint.ap-southeast-2.amazonaws.com
+s3-object-lambda.ap-southeast-2.amazonaws.com
+s3-website.ap-southeast-2.amazonaws.com
+s3.dualstack.ap-southeast-3.amazonaws.com
+s3-accesspoint.dualstack.ap-southeast-3.amazonaws.com
+s3.ap-southeast-3.amazonaws.com
+s3-accesspoint.ap-southeast-3.amazonaws.com
+s3-object-lambda.ap-southeast-3.amazonaws.com
+s3-website.ap-southeast-3.amazonaws.com
+s3.dualstack.ap-southeast-4.amazonaws.com
+s3-accesspoint.dualstack.ap-southeast-4.amazonaws.com
+s3.ap-southeast-4.amazonaws.com
+s3-accesspoint.ap-southeast-4.amazonaws.com
+s3-object-lambda.ap-southeast-4.amazonaws.com
+s3-website.ap-southeast-4.amazonaws.com
+s3.dualstack.ca-central-1.amazonaws.com
+s3-accesspoint.dualstack.ca-central-1.amazonaws.com
+s3-accesspoint-fips.dualstack.ca-central-1.amazonaws.com
+s3-fips.dualstack.ca-central-1.amazonaws.com
+s3-website.dualstack.ca-central-1.amazonaws.com
+s3.ca-central-1.amazonaws.com
+s3-accesspoint.ca-central-1.amazonaws.com
+s3-accesspoint-fips.ca-central-1.amazonaws.com
+s3-fips.ca-central-1.amazonaws.com
+s3-object-lambda.ca-central-1.amazonaws.com
+s3-website.ca-central-1.amazonaws.com
+s3.dualstack.eu-central-1.amazonaws.com
+s3-accesspoint.dualstack.eu-central-1.amazonaws.com
+s3-website.dualstack.eu-central-1.amazonaws.com
+s3.eu-central-1.amazonaws.com
+s3-accesspoint.eu-central-1.amazonaws.com
+s3-object-lambda.eu-central-1.amazonaws.com
+s3-website.eu-central-1.amazonaws.com
+s3.dualstack.eu-central-2.amazonaws.com
+s3-accesspoint.dualstack.eu-central-2.amazonaws.com
+s3.eu-central-2.amazonaws.com
+s3-accesspoint.eu-central-2.amazonaws.com
+s3-object-lambda.eu-central-2.amazonaws.com
+s3-website.eu-central-2.amazonaws.com
+s3.dualstack.eu-north-1.amazonaws.com
+s3-accesspoint.dualstack.eu-north-1.amazonaws.com
+s3.eu-north-1.amazonaws.com
+s3-accesspoint.eu-north-1.amazonaws.com
+s3-object-lambda.eu-north-1.amazonaws.com
+s3-website.eu-north-1.amazonaws.com
+s3.dualstack.eu-south-1.amazonaws.com
+s3-accesspoint.dualstack.eu-south-1.amazonaws.com
+s3-website.dualstack.eu-south-1.amazonaws.com
+s3.eu-south-1.amazonaws.com
+s3-accesspoint.eu-south-1.amazonaws.com
+s3-object-lambda.eu-south-1.amazonaws.com
+s3-website.eu-south-1.amazonaws.com
+s3.dualstack.eu-south-2.amazonaws.com
+s3-accesspoint.dualstack.eu-south-2.amazonaws.com
+s3.eu-south-2.amazonaws.com
+s3-accesspoint.eu-south-2.amazonaws.com
+s3-object-lambda.eu-south-2.amazonaws.com
+s3-website.eu-south-2.amazonaws.com
+s3.dualstack.eu-west-1.amazonaws.com
+s3-accesspoint.dualstack.eu-west-1.amazonaws.com
+s3-website.dualstack.eu-west-1.amazonaws.com
+s3.eu-west-1.amazonaws.com
+s3-accesspoint.eu-west-1.amazonaws.com
+s3-deprecated.eu-west-1.amazonaws.com
+s3-object-lambda.eu-west-1.amazonaws.com
+s3-website.eu-west-1.amazonaws.com
+s3.dualstack.eu-west-2.amazonaws.com
+s3-accesspoint.dualstack.eu-west-2.amazonaws.com
+s3.eu-west-2.amazonaws.com
+s3-accesspoint.eu-west-2.amazonaws.com
+s3-object-lambda.eu-west-2.amazonaws.com
+s3-website.eu-west-2.amazonaws.com
+s3.dualstack.eu-west-3.amazonaws.com
+s3-accesspoint.dualstack.eu-west-3.amazonaws.com
+s3-website.dualstack.eu-west-3.amazonaws.com
+s3.eu-west-3.amazonaws.com
+s3-accesspoint.eu-west-3.amazonaws.com
+s3-object-lambda.eu-west-3.amazonaws.com
+s3-website.eu-west-3.amazonaws.com
+s3.dualstack.il-central-1.amazonaws.com
+s3-accesspoint.dualstack.il-central-1.amazonaws.com
+s3.il-central-1.amazonaws.com
+s3-accesspoint.il-central-1.amazonaws.com
+s3-object-lambda.il-central-1.amazonaws.com
+s3-website.il-central-1.amazonaws.com
+s3.dualstack.me-central-1.amazonaws.com
+s3-accesspoint.dualstack.me-central-1.amazonaws.com
+s3.me-central-1.amazonaws.com
+s3-accesspoint.me-central-1.amazonaws.com
+s3-object-lambda.me-central-1.amazonaws.com
+s3-website.me-central-1.amazonaws.com
+s3.dualstack.me-south-1.amazonaws.com
+s3-accesspoint.dualstack.me-south-1.amazonaws.com
+s3.me-south-1.amazonaws.com
+s3-accesspoint.me-south-1.amazonaws.com
+s3-object-lambda.me-south-1.amazonaws.com
+s3-website.me-south-1.amazonaws.com
+s3.amazonaws.com
+s3-1.amazonaws.com
+s3-ap-east-1.amazonaws.com
+s3-ap-northeast-1.amazonaws.com
+s3-ap-northeast-2.amazonaws.com
+s3-ap-northeast-3.amazonaws.com
+s3-ap-south-1.amazonaws.com
+s3-ap-southeast-1.amazonaws.com
+s3-ap-southeast-2.amazonaws.com
+s3-ca-central-1.amazonaws.com
+s3-eu-central-1.amazonaws.com
+s3-eu-north-1.amazonaws.com
+s3-eu-west-1.amazonaws.com
+s3-eu-west-2.amazonaws.com
+s3-eu-west-3.amazonaws.com
+s3-external-1.amazonaws.com
+s3-fips-us-gov-east-1.amazonaws.com
+s3-fips-us-gov-west-1.amazonaws.com
+mrap.accesspoint.s3-global.amazonaws.com
+s3-me-south-1.amazonaws.com
+s3-sa-east-1.amazonaws.com
+s3-us-east-2.amazonaws.com
+s3-us-gov-east-1.amazonaws.com
+s3-us-gov-west-1.amazonaws.com
+s3-us-west-1.amazonaws.com
+s3-us-west-2.amazonaws.com
+s3-website-ap-northeast-1.amazonaws.com
+s3-website-ap-southeast-1.amazonaws.com
+s3-website-ap-southeast-2.amazonaws.com
+s3-website-eu-west-1.amazonaws.com
+s3-website-sa-east-1.amazonaws.com
+s3-website-us-east-1.amazonaws.com
+s3-website-us-gov-west-1.amazonaws.com
+s3-website-us-west-1.amazonaws.com
+s3-website-us-west-2.amazonaws.com
+s3.dualstack.sa-east-1.amazonaws.com
+s3-accesspoint.dualstack.sa-east-1.amazonaws.com
+s3-website.dualstack.sa-east-1.amazonaws.com
+s3.sa-east-1.amazonaws.com
+s3-accesspoint.sa-east-1.amazonaws.com
+s3-object-lambda.sa-east-1.amazonaws.com
+s3-website.sa-east-1.amazonaws.com
+s3.dualstack.us-east-1.amazonaws.com
+s3-accesspoint.dualstack.us-east-1.amazonaws.com
+s3-accesspoint-fips.dualstack.us-east-1.amazonaws.com
+s3-fips.dualstack.us-east-1.amazonaws.com
+s3-website.dualstack.us-east-1.amazonaws.com
+s3.us-east-1.amazonaws.com
+s3-accesspoint.us-east-1.amazonaws.com
+s3-accesspoint-fips.us-east-1.amazonaws.com
+s3-deprecated.us-east-1.amazonaws.com
+s3-fips.us-east-1.amazonaws.com
+s3-object-lambda.us-east-1.amazonaws.com
+s3-website.us-east-1.amazonaws.com
+s3.dualstack.us-east-2.amazonaws.com
+s3-accesspoint.dualstack.us-east-2.amazonaws.com
+s3-accesspoint-fips.dualstack.us-east-2.amazonaws.com
+s3-fips.dualstack.us-east-2.amazonaws.com
+s3.us-east-2.amazonaws.com
+s3-accesspoint.us-east-2.amazonaws.com
+s3-accesspoint-fips.us-east-2.amazonaws.com
+s3-deprecated.us-east-2.amazonaws.com
+s3-fips.us-east-2.amazonaws.com
+s3-object-lambda.us-east-2.amazonaws.com
+s3-website.us-east-2.amazonaws.com
+s3.dualstack.us-gov-east-1.amazonaws.com
+s3-accesspoint.dualstack.us-gov-east-1.amazonaws.com
+s3-accesspoint-fips.dualstack.us-gov-east-1.amazonaws.com
+s3-fips.dualstack.us-gov-east-1.amazonaws.com
+s3.us-gov-east-1.amazonaws.com
+s3-accesspoint.us-gov-east-1.amazonaws.com
+s3-accesspoint-fips.us-gov-east-1.amazonaws.com
+s3-fips.us-gov-east-1.amazonaws.com
+s3-object-lambda.us-gov-east-1.amazonaws.com
+s3-website.us-gov-east-1.amazonaws.com
+s3.dualstack.us-gov-west-1.amazonaws.com
+s3-accesspoint.dualstack.us-gov-west-1.amazonaws.com
+s3-accesspoint-fips.dualstack.us-gov-west-1.amazonaws.com
+s3-fips.dualstack.us-gov-west-1.amazonaws.com
+s3.us-gov-west-1.amazonaws.com
+s3-accesspoint.us-gov-west-1.amazonaws.com
+s3-accesspoint-fips.us-gov-west-1.amazonaws.com
+s3-fips.us-gov-west-1.amazonaws.com
+s3-object-lambda.us-gov-west-1.amazonaws.com
+s3-website.us-gov-west-1.amazonaws.com
+s3.dualstack.us-west-1.amazonaws.com
+s3-accesspoint.dualstack.us-west-1.amazonaws.com
+s3-accesspoint-fips.dualstack.us-west-1.amazonaws.com
+s3-fips.dualstack.us-west-1.amazonaws.com
+s3-website.dualstack.us-west-1.amazonaws.com
+s3.us-west-1.amazonaws.com
+s3-accesspoint.us-west-1.amazonaws.com
+s3-accesspoint-fips.us-west-1.amazonaws.com
+s3-fips.us-west-1.amazonaws.com
+s3-object-lambda.us-west-1.amazonaws.com
+s3-website.us-west-1.amazonaws.com
+s3.dualstack.us-west-2.amazonaws.com
+s3-accesspoint.dualstack.us-west-2.amazonaws.com
+s3-accesspoint-fips.dualstack.us-west-2.amazonaws.com
+s3-fips.dualstack.us-west-2.amazonaws.com
+s3-website.dualstack.us-west-2.amazonaws.com
+s3.us-west-2.amazonaws.com
+s3-accesspoint.us-west-2.amazonaws.com
+s3-accesspoint-fips.us-west-2.amazonaws.com
+s3-deprecated.us-west-2.amazonaws.com
+s3-fips.us-west-2.amazonaws.com
+s3-object-lambda.us-west-2.amazonaws.com
+s3-website.us-west-2.amazonaws.com
+
+// Amazon SageMaker Notebook Instances
+// Submitted by AWS Security <psl-maintainers@amazon.com>
+// Reference: fe8c9e94-5a22-486d-8750-991a3a9b13c6
+notebook.af-south-1.sagemaker.aws
+notebook.ap-east-1.sagemaker.aws
+notebook.ap-northeast-1.sagemaker.aws
+notebook.ap-northeast-2.sagemaker.aws
+notebook.ap-northeast-3.sagemaker.aws
+notebook.ap-south-1.sagemaker.aws
+notebook.ap-south-2.sagemaker.aws
+notebook.ap-southeast-1.sagemaker.aws
+notebook.ap-southeast-2.sagemaker.aws
+notebook.ap-southeast-3.sagemaker.aws
+notebook.ap-southeast-4.sagemaker.aws
+notebook.ca-central-1.sagemaker.aws
+notebook.eu-central-1.sagemaker.aws
+notebook.eu-central-2.sagemaker.aws
+notebook.eu-north-1.sagemaker.aws
+notebook.eu-south-1.sagemaker.aws
+notebook.eu-south-2.sagemaker.aws
+notebook.eu-west-1.sagemaker.aws
+notebook.eu-west-2.sagemaker.aws
+notebook.eu-west-3.sagemaker.aws
+notebook.il-central-1.sagemaker.aws
+notebook.me-central-1.sagemaker.aws
+notebook.me-south-1.sagemaker.aws
+notebook.sa-east-1.sagemaker.aws
+notebook.us-east-1.sagemaker.aws
+notebook-fips.us-east-1.sagemaker.aws
+notebook.us-east-2.sagemaker.aws
+notebook-fips.us-east-2.sagemaker.aws
+notebook.us-gov-east-1.sagemaker.aws
+notebook-fips.us-gov-east-1.sagemaker.aws
+notebook.us-gov-west-1.sagemaker.aws
+notebook-fips.us-gov-west-1.sagemaker.aws
+notebook.us-west-1.sagemaker.aws
+notebook.us-west-2.sagemaker.aws
+notebook-fips.us-west-2.sagemaker.aws
+notebook.cn-north-1.sagemaker.com.cn
+notebook.cn-northwest-1.sagemaker.com.cn
+
+// Amazon SageMaker Studio
+// Submitted by AWS Security <psl-maintainers@amazon.com>
+// Reference: 057ee397-6bf8-4f20-b807-d7bc145ac980
+studio.af-south-1.sagemaker.aws
+studio.ap-east-1.sagemaker.aws
+studio.ap-northeast-1.sagemaker.aws
+studio.ap-northeast-2.sagemaker.aws
+studio.ap-northeast-3.sagemaker.aws
+studio.ap-south-1.sagemaker.aws
+studio.ap-southeast-1.sagemaker.aws
+studio.ap-southeast-2.sagemaker.aws
+studio.ap-southeast-3.sagemaker.aws
+studio.ca-central-1.sagemaker.aws
+studio.eu-central-1.sagemaker.aws
+studio.eu-north-1.sagemaker.aws
+studio.eu-south-1.sagemaker.aws
+studio.eu-west-1.sagemaker.aws
+studio.eu-west-2.sagemaker.aws
+studio.eu-west-3.sagemaker.aws
+studio.il-central-1.sagemaker.aws
+studio.me-central-1.sagemaker.aws
+studio.me-south-1.sagemaker.aws
+studio.sa-east-1.sagemaker.aws
+studio.us-east-1.sagemaker.aws
+studio.us-east-2.sagemaker.aws
+studio.us-gov-east-1.sagemaker.aws
+studio-fips.us-gov-east-1.sagemaker.aws
+studio.us-gov-west-1.sagemaker.aws
+studio-fips.us-gov-west-1.sagemaker.aws
+studio.us-west-1.sagemaker.aws
+studio.us-west-2.sagemaker.aws
+studio.cn-north-1.sagemaker.com.cn
+studio.cn-northwest-1.sagemaker.com.cn
+
+// Analytics on AWS
+// Submitted by AWS Security <psl-maintainers@amazon.com>
+// Reference: 955f9f40-a495-4e73-ae85-67b77ac9cadd
+analytics-gateway.ap-northeast-1.amazonaws.com
+analytics-gateway.ap-northeast-2.amazonaws.com
+analytics-gateway.ap-south-1.amazonaws.com
+analytics-gateway.ap-southeast-1.amazonaws.com
+analytics-gateway.ap-southeast-2.amazonaws.com
+analytics-gateway.eu-central-1.amazonaws.com
+analytics-gateway.eu-west-1.amazonaws.com
+analytics-gateway.us-east-1.amazonaws.com
+analytics-gateway.us-east-2.amazonaws.com
+analytics-gateway.us-west-2.amazonaws.com
+
+// AWS Amplify
+// Submitted by AWS Security <psl-maintainers@amazon.com>
+// Reference: 5ecce854-c033-4fc4-a755-1a9916d9a9bb
+*.amplifyapp.com
+
+// AWS App Runner
+// Submitted by AWS Security <psl-maintainers@amazon.com>
+// Reference: 6828c008-ba5d-442f-ade5-48da4e7c2316
+*.awsapprunner.com
+
+// AWS Cloud9
+// Submitted by: AWS Security <psl-maintainers@amazon.com>
+// Reference: 05c44955-977c-4b57-938a-f2af92733f9f
+webview-assets.aws-cloud9.af-south-1.amazonaws.com
+vfs.cloud9.af-south-1.amazonaws.com
+webview-assets.cloud9.af-south-1.amazonaws.com
+webview-assets.aws-cloud9.ap-east-1.amazonaws.com
+vfs.cloud9.ap-east-1.amazonaws.com
+webview-assets.cloud9.ap-east-1.amazonaws.com
+webview-assets.aws-cloud9.ap-northeast-1.amazonaws.com
+vfs.cloud9.ap-northeast-1.amazonaws.com
+webview-assets.cloud9.ap-northeast-1.amazonaws.com
+webview-assets.aws-cloud9.ap-northeast-2.amazonaws.com
+vfs.cloud9.ap-northeast-2.amazonaws.com
+webview-assets.cloud9.ap-northeast-2.amazonaws.com
+webview-assets.aws-cloud9.ap-northeast-3.amazonaws.com
+vfs.cloud9.ap-northeast-3.amazonaws.com
+webview-assets.cloud9.ap-northeast-3.amazonaws.com
+webview-assets.aws-cloud9.ap-south-1.amazonaws.com
+vfs.cloud9.ap-south-1.amazonaws.com
+webview-assets.cloud9.ap-south-1.amazonaws.com
+webview-assets.aws-cloud9.ap-southeast-1.amazonaws.com
+vfs.cloud9.ap-southeast-1.amazonaws.com
+webview-assets.cloud9.ap-southeast-1.amazonaws.com
+webview-assets.aws-cloud9.ap-southeast-2.amazonaws.com
+vfs.cloud9.ap-southeast-2.amazonaws.com
+webview-assets.cloud9.ap-southeast-2.amazonaws.com
+webview-assets.aws-cloud9.ca-central-1.amazonaws.com
+vfs.cloud9.ca-central-1.amazonaws.com
+webview-assets.cloud9.ca-central-1.amazonaws.com
+webview-assets.aws-cloud9.eu-central-1.amazonaws.com
+vfs.cloud9.eu-central-1.amazonaws.com
+webview-assets.cloud9.eu-central-1.amazonaws.com
+webview-assets.aws-cloud9.eu-north-1.amazonaws.com
+vfs.cloud9.eu-north-1.amazonaws.com
+webview-assets.cloud9.eu-north-1.amazonaws.com
+webview-assets.aws-cloud9.eu-south-1.amazonaws.com
+vfs.cloud9.eu-south-1.amazonaws.com
+webview-assets.cloud9.eu-south-1.amazonaws.com
+webview-assets.aws-cloud9.eu-west-1.amazonaws.com
+vfs.cloud9.eu-west-1.amazonaws.com
+webview-assets.cloud9.eu-west-1.amazonaws.com
+webview-assets.aws-cloud9.eu-west-2.amazonaws.com
+vfs.cloud9.eu-west-2.amazonaws.com
+webview-assets.cloud9.eu-west-2.amazonaws.com
+webview-assets.aws-cloud9.eu-west-3.amazonaws.com
+vfs.cloud9.eu-west-3.amazonaws.com
+webview-assets.cloud9.eu-west-3.amazonaws.com
+webview-assets.aws-cloud9.me-south-1.amazonaws.com
+vfs.cloud9.me-south-1.amazonaws.com
+webview-assets.cloud9.me-south-1.amazonaws.com
+webview-assets.aws-cloud9.sa-east-1.amazonaws.com
+vfs.cloud9.sa-east-1.amazonaws.com
+webview-assets.cloud9.sa-east-1.amazonaws.com
+webview-assets.aws-cloud9.us-east-1.amazonaws.com
+vfs.cloud9.us-east-1.amazonaws.com
+webview-assets.cloud9.us-east-1.amazonaws.com
+webview-assets.aws-cloud9.us-east-2.amazonaws.com
+vfs.cloud9.us-east-2.amazonaws.com
+webview-assets.cloud9.us-east-2.amazonaws.com
+webview-assets.aws-cloud9.us-west-1.amazonaws.com
+vfs.cloud9.us-west-1.amazonaws.com
+webview-assets.cloud9.us-west-1.amazonaws.com
+webview-assets.aws-cloud9.us-west-2.amazonaws.com
+vfs.cloud9.us-west-2.amazonaws.com
+webview-assets.cloud9.us-west-2.amazonaws.com
+
+// AWS Elastic Beanstalk
+// Submitted by AWS Security <psl-maintainers@amazon.com>
+// Reference: bb5a965c-dec3-4967-aa22-e306ad064797
+cn-north-1.eb.amazonaws.com.cn
+cn-northwest-1.eb.amazonaws.com.cn
+elasticbeanstalk.com
+af-south-1.elasticbeanstalk.com
+ap-east-1.elasticbeanstalk.com
+ap-northeast-1.elasticbeanstalk.com
+ap-northeast-2.elasticbeanstalk.com
+ap-northeast-3.elasticbeanstalk.com
+ap-south-1.elasticbeanstalk.com
+ap-southeast-1.elasticbeanstalk.com
+ap-southeast-2.elasticbeanstalk.com
+ap-southeast-3.elasticbeanstalk.com
+ca-central-1.elasticbeanstalk.com
+eu-central-1.elasticbeanstalk.com
+eu-north-1.elasticbeanstalk.com
+eu-south-1.elasticbeanstalk.com
+eu-west-1.elasticbeanstalk.com
+eu-west-2.elasticbeanstalk.com
+eu-west-3.elasticbeanstalk.com
+il-central-1.elasticbeanstalk.com
+me-south-1.elasticbeanstalk.com
+sa-east-1.elasticbeanstalk.com
+us-east-1.elasticbeanstalk.com
+us-east-2.elasticbeanstalk.com
+us-gov-east-1.elasticbeanstalk.com
+us-gov-west-1.elasticbeanstalk.com
+us-west-1.elasticbeanstalk.com
+us-west-2.elasticbeanstalk.com
+
+// (AWS) Elastic Load Balancing
+// Submitted by Luke Wells <psl-maintainers@amazon.com>
+// Reference: 12a3d528-1bac-4433-a359-a395867ffed2
+*.elb.amazonaws.com.cn
+*.elb.amazonaws.com
+
+// AWS Global Accelerator
+// Submitted by Daniel Massaguer <psl-maintainers@amazon.com>
+// Reference: d916759d-a08b-4241-b536-4db887383a6a
+awsglobalaccelerator.com
+
+// eero
+// Submitted by Yue Kang <eero-dynamic-dns@amazon.com>
+// Reference: 264afe70-f62c-4c02-8ab9-b5281ed24461
+eero.online
+eero-stage.online
+
+// concludes Amazon
+
+// Amune : https://amune.org/
+// Submitted by Team Amune <cert@amune.org>
+t3l3p0rt.net
+tele.amune.org
+
+// Apigee : https://apigee.com/
+// Submitted by Apigee Security Team <security@apigee.com>
+apigee.io
+
+// Apphud : https://apphud.com
+// Submitted by Alexander Selivanov <alex@apphud.com>
+siiites.com
+
+// Appspace : https://www.appspace.com
+// Submitted by Appspace Security Team <security@appspace.com>
+appspacehosted.com
+appspaceusercontent.com
+
+// Appudo UG (haftungsbeschränkt) : https://www.appudo.com
+// Submitted by Alexander Hochbaum <admin@appudo.com>
+appudo.net
+
+// Aptible : https://www.aptible.com/
+// Submitted by Thomas Orozco <thomas@aptible.com>
+on-aptible.com
+
+// ASEINet : https://www.aseinet.com/
+// Submitted by Asei SEKIGUCHI <mail@aseinet.com>
+user.aseinet.ne.jp
+gv.vc
+d.gv.vc
+
+// Asociación Amigos de la Informática "Euskalamiga" : http://encounter.eus/
+// Submitted by Hector Martin <marcan@euskalencounter.org>
+user.party.eus
+
+// Association potager.org : https://potager.org/
+// Submitted by Lunar <jardiniers@potager.org>
+pimienta.org
+poivron.org
+potager.org
+sweetpepper.org
+
+// ASUSTOR Inc. : http://www.asustor.com
+// Submitted by Vincent Tseng <vincenttseng@asustor.com>
+myasustor.com
+
+// Atlassian : https://atlassian.com
+// Submitted by Sam Smyth <devloop@atlassian.com>
+cdn.prod.atlassian-dev.net
+
+// Authentick UG (haftungsbeschränkt) : https://authentick.net
+// Submitted by Lukas Reschke <lukas@authentick.net>
+translated.page
+
+// Autocode : https://autocode.com
+// Submitted by Jacob Lee <jacob@autocode.com>
+autocode.dev
+
+// AVM : https://avm.de
+// Submitted by Andreas Weise <a.weise@avm.de>
+myfritz.net
+
+// AVStack Pte. Ltd. : https://avstack.io
+// Submitted by Jasper Hugo <jasper@avstack.io>
+onavstack.net
+
+// AW AdvisorWebsites.com Software Inc : https://advisorwebsites.com
+// Submitted by James Kennedy <domains@advisorwebsites.com>
+*.awdev.ca
+*.advisor.ws
+
+// AZ.pl sp. z.o.o: https://az.pl
+// Submitted by Krzysztof Wolski <krzysztof.wolski@home.eu>
+ecommerce-shop.pl
+
+// b-data GmbH : https://www.b-data.io
+// Submitted by Olivier Benz <olivier.benz@b-data.ch>
+b-data.io
+
+// backplane : https://www.backplane.io
+// Submitted by Anthony Voutas <anthony@backplane.io>
+backplaneapp.io
+
+// Balena : https://www.balena.io
+// Submitted by Petros Angelatos <petrosagg@balena.io>
+balena-devices.com
+
+// University of Banja Luka : https://unibl.org
+// Domains for Republic of Srpska administrative entity.
+// Submitted by Marko Ivanovic <kormang@hotmail.rs>
+rs.ba
+
+// Banzai Cloud
+// Submitted by Janos Matyas <info@banzaicloud.com>
+*.banzai.cloud
+app.banzaicloud.io
+*.backyards.banzaicloud.io
+
+// BASE, Inc. : https://binc.jp
+// Submitted by Yuya NAGASAWA <public-suffix-list@binc.jp>
+base.ec
+official.ec
+buyshop.jp
+fashionstore.jp
+handcrafted.jp
+kawaiishop.jp
+supersale.jp
+theshop.jp
+shopselect.net
+base.shop
+
+// BeagleBoard.org Foundation : https://beagleboard.org
+// Submitted by Jason Kridner <jkridner@beagleboard.org>
+beagleboard.io
+
+// Beget Ltd
+// Submitted by Lev Nekrasov <lnekrasov@beget.com>
+*.beget.app
+
+// BetaInABox
+// Submitted by Adrian <adrian@betainabox.com>
+betainabox.com
+
+// BinaryLane : http://www.binarylane.com
+// Submitted by Nathan O'Sullivan <nathan@mammoth.com.au>
+bnr.la
+
+// Bitbucket : http://bitbucket.org
+// Submitted by Andy Ortlieb <aortlieb@atlassian.com>
+bitbucket.io
+
+// Blackbaud, Inc. : https://www.blackbaud.com
+// Submitted by Paul Crowder <paul.crowder@blackbaud.com>
+blackbaudcdn.net
+
+// Blatech : http://www.blatech.net
+// Submitted by Luke Bratch <luke@bratch.co.uk>
+of.je
+
+// Blue Bite, LLC : https://bluebite.com
+// Submitted by Joshua Weiss <admin.engineering@bluebite.com>
+bluebite.io
+
+// Boomla : https://boomla.com
+// Submitted by Tibor Halter <thalter@boomla.com>
+boomla.net
+
+// Boutir : https://www.boutir.com
+// Submitted by Eric Ng Ka Ka <ngkaka@boutir.com>
+boutir.com
+
+// Boxfuse : https://boxfuse.com
+// Submitted by Axel Fontaine <axel@boxfuse.com>
+boxfuse.io
+
+// bplaced : https://www.bplaced.net/
+// Submitted by Miroslav Bozic <security@bplaced.net>
+square7.ch
+bplaced.com
+bplaced.de
+square7.de
+bplaced.net
+square7.net
+
+// Brendly : https://brendly.rs
+// Submitted by Dusan Radovanovic <dusan.radovanovic@brendly.rs>
+shop.brendly.rs
+
+// BrowserSafetyMark
+// Submitted by Dave Tharp <browsersafetymark.io@quicinc.com>
+browsersafetymark.io
+
+// Bytemark Hosting : https://www.bytemark.co.uk
+// Submitted by Paul Cammish <paul.cammish@bytemark.co.uk>
+uk0.bigv.io
+dh.bytemark.co.uk
+vm.bytemark.co.uk
+
+// Caf.js Labs LLC : https://www.cafjs.com
+// Submitted by Antonio Lain <antlai@cafjs.com>
+cafjs.com
+
+// callidomus : https://www.callidomus.com/
+// Submitted by Marcus Popp <admin@callidomus.com>
+mycd.eu
+
+// Canva Pty Ltd : https://canva.com/
+// Submitted by Joel Aquilina <publicsuffixlist@canva.com>
+canva-apps.cn
+canva-apps.com
+
+// Carrd : https://carrd.co
+// Submitted by AJ <aj@carrd.co>
+drr.ac
+uwu.ai
+carrd.co
+crd.co
+ju.mp
+
+// CentralNic : http://www.centralnic.com/names/domains
+// Submitted by registry <gavin.brown@centralnic.com>
+ae.org
+br.com
+cn.com
+com.de
+com.se
+de.com
+eu.com
+gb.net
+hu.net
+jp.net
+jpn.com
+mex.com
+ru.com
+sa.com
+se.net
+uk.com
+uk.net
+us.com
+za.bz
+za.com
+
+// No longer operated by CentralNic, these entries should be adopted and/or removed by current operators
+// Submitted by Gavin Brown <gavin.brown@centralnic.com>
+ar.com
+hu.com
+kr.com
+no.com
+qc.com
+uy.com
+
+// Africa.com Web Solutions Ltd : https://registry.africa.com
+// Submitted by Gavin Brown <gavin.brown@centralnic.com>
+africa.com
+
+// iDOT Services Limited : http://www.domain.gr.com
+// Submitted by Gavin Brown <gavin.brown@centralnic.com>
+gr.com
+
+// Radix FZC : http://domains.in.net
+// Submitted by Gavin Brown <gavin.brown@centralnic.com>
+in.net
+web.in
+
+// US REGISTRY LLC : http://us.org
+// Submitted by Gavin Brown <gavin.brown@centralnic.com>
+us.org
+
+// co.com Registry, LLC : https://registry.co.com
+// Submitted by Gavin Brown <gavin.brown@centralnic.com>
+co.com
+
+// Roar Domains LLC : https://roar.basketball/
+// Submitted by Gavin Brown <gavin.brown@centralnic.com>
+aus.basketball
+nz.basketball
+
+// BRS Media : https://brsmedia.com/
+// Submitted by Gavin Brown <gavin.brown@centralnic.com>
+radio.am
+radio.fm
+
+// c.la : http://www.c.la/
+c.la
+
+// certmgr.org : https://certmgr.org
+// Submitted by B. Blechschmidt <hostmaster@certmgr.org>
+certmgr.org
+
+// Cityhost LLC : https://cityhost.ua
+// Submitted by Maksym Rivtin <support@cityhost.net.ua>
+cx.ua
+
+// Civilized Discourse Construction Kit, Inc. : https://www.discourse.org/
+// Submitted by Rishabh Nambiar & Michael Brown <team@discourse.org>
+discourse.group
+discourse.team
+
+// Clever Cloud : https://www.clever-cloud.com/
+// Submitted by Quentin Adam <noc@clever-cloud.com>
+cleverapps.io
+
+// Clerk : https://www.clerk.dev
+// Submitted by Colin Sidoti <systems@clerk.dev>
+clerk.app
+clerkstage.app
+*.lcl.dev
+*.lclstage.dev
+*.stg.dev
+*.stgstage.dev
+
+// ClickRising : https://clickrising.com/
+// Submitted by Umut Gumeli <infrastructure-publicsuffixlist@clickrising.com>
+clickrising.net
+
+// Cloud66 : https://www.cloud66.com/
+// Submitted by Khash Sajadi <khash@cloud66.com>
+c66.me
+cloud66.ws
+cloud66.zone
+
+// CloudAccess.net : https://www.cloudaccess.net/
+// Submitted by Pawel Panek <noc@cloudaccess.net>
+jdevcloud.com
+wpdevcloud.com
+cloudaccess.host
+freesite.host
+cloudaccess.net
+
+// cloudControl : https://www.cloudcontrol.com/
+// Submitted by Tobias Wilken <tw@cloudcontrol.com>
+cloudcontrolled.com
+cloudcontrolapp.com
+
+// Cloudera, Inc. : https://www.cloudera.com/
+// Submitted by Kedarnath Waikar <security@cloudera.com>
+*.cloudera.site
+
+// Cloudflare, Inc. : https://www.cloudflare.com/
+// Submitted by Cloudflare Team <publicsuffixlist@cloudflare.com>
+cf-ipfs.com
+cloudflare-ipfs.com
+trycloudflare.com
+pages.dev
+r2.dev
+workers.dev
+
+// Clovyr : https://clovyr.io
+// Submitted by Patrick Nielsen <patrick@clovyr.io>
+wnext.app
+
+// co.ca : http://registry.co.ca/
+co.ca
+
+// Co & Co : https://co-co.nl/
+// Submitted by Govert Versluis <govert@co-co.nl>
+*.otap.co
+
+// i-registry s.r.o. : http://www.i-registry.cz/
+// Submitted by Martin Semrad <semrad@i-registry.cz>
+co.cz
+
+// CDN77.com : http://www.cdn77.com
+// Submitted by Jan Krpes <jan.krpes@cdn77.com>
+c.cdn77.org
+cdn77-ssl.net
+r.cdn77.net
+rsc.cdn77.org
+ssl.origin.cdn77-secure.org
+
+// Cloud DNS Ltd : http://www.cloudns.net
+// Submitted by Aleksander Hristov <noc@cloudns.net>
+cloudns.asia
+cloudns.biz
+cloudns.club
+cloudns.cc
+cloudns.eu
+cloudns.in
+cloudns.info
+cloudns.org
+cloudns.pro
+cloudns.pw
+cloudns.us
+
+// CNPY : https://cnpy.gdn
+// Submitted by Angelo Gladding <angelo@lahacker.net>
+cnpy.gdn
+
+// Codeberg e. V. : https://codeberg.org
+// Submitted by Moritz Marquardt <git@momar.de>
+codeberg.page
+
+// CoDNS B.V.
+co.nl
+co.no
+
+// Combell.com : https://www.combell.com
+// Submitted by Thomas Wouters <thomas.wouters@combellgroup.com>
+webhosting.be
+hosting-cluster.nl
+
+// Coordination Center for TLD RU and XN--P1AI : https://cctld.ru/en/domains/domens_ru/reserved/
+// Submitted by George Georgievsky <gug@cctld.ru>
+ac.ru
+edu.ru
+gov.ru
+int.ru
+mil.ru
+test.ru
+
+// COSIMO GmbH : http://www.cosimo.de
+// Submitted by Rene Marticke <rmarticke@cosimo.de>
+dyn.cosidns.de
+dynamisches-dns.de
+dnsupdater.de
+internet-dns.de
+l-o-g-i-n.de
+dynamic-dns.info
+feste-ip.net
+knx-server.net
+static-access.net
+
+// Craynic, s.r.o. : http://www.craynic.com/
+// Submitted by Ales Krajnik <ales.krajnik@craynic.com>
+realm.cz
+
+// Cryptonomic : https://cryptonomic.net/
+// Submitted by Andrew Cady <public-suffix-list@cryptonomic.net>
+*.cryptonomic.net
+
+// Cupcake : https://cupcake.io/
+// Submitted by Jonathan Rudenberg <jonathan@cupcake.io>
+cupcake.is
+
+// Curv UG : https://curv-labs.de/
+// Submitted by Marvin Wiesner <Marvin@curv-labs.de>
+curv.dev
+
+// Customer OCI - Oracle Dyn https://cloud.oracle.com/home https://dyn.com/dns/
+// Submitted by Gregory Drake <support@dyn.com>
+// Note: This is intended to also include customer-oci.com due to wildcards implicitly including the current label
+*.customer-oci.com
+*.oci.customer-oci.com
+*.ocp.customer-oci.com
+*.ocs.customer-oci.com
+
+// cyon GmbH : https://www.cyon.ch/
+// Submitted by Dominic Luechinger <dol@cyon.ch>
+cyon.link
+cyon.site
+
+// Danger Science Group: https://dangerscience.com/
+// Submitted by Skylar MacDonald <skylar@dangerscience.com>
+fnwk.site
+folionetwork.site
+platform0.app
+
+// Daplie, Inc : https://daplie.com
+// Submitted by AJ ONeal <aj@daplie.com>
+daplie.me
+localhost.daplie.me
+
+// Datto, Inc. : https://www.datto.com/
+// Submitted by Philipp Heckel <ph@datto.com>
+dattolocal.com
+dattorelay.com
+dattoweb.com
+mydatto.com
+dattolocal.net
+mydatto.net
+
+// Dansk.net : http://www.dansk.net/
+// Submitted by Anani Voule <digital@digital.co.dk>
+biz.dk
+co.dk
+firm.dk
+reg.dk
+store.dk
+
+// dappnode.io : https://dappnode.io/
+// Submitted by Abel Boldu / DAppNode Team <community@dappnode.io>
+dyndns.dappnode.io
+
+// dapps.earth : https://dapps.earth/
+// Submitted by Daniil Burdakov <icqkill@gmail.com>
+*.dapps.earth
+*.bzz.dapps.earth
+
+// Dark, Inc. : https://darklang.com
+// Submitted by Paul Biggar <ops@darklang.com>
+builtwithdark.com
+
+// DataDetect, LLC. : https://datadetect.com
+// Submitted by Andrew Banchich <abanchich@sceven.com>
+demo.datadetect.com
+instance.datadetect.com
+
+// Datawire, Inc : https://www.datawire.io
+// Submitted by Richard Li <secalert@datawire.io>
+edgestack.me
+
+// DDNS5 : https://ddns5.com
+// Submitted by Cameron Elliott <cameron@cameronelliott.com>
+ddns5.com
+
+// Debian : https://www.debian.org/
+// Submitted by Peter Palfrader / Debian Sysadmin Team <dsa-publicsuffixlist@debian.org>
+debian.net
+
+// Deno Land Inc : https://deno.com/
+// Submitted by Luca Casonato <hostmaster@deno.com>
+deno.dev
+deno-staging.dev
+
+// deSEC : https://desec.io/
+// Submitted by Peter Thomassen <peter@desec.io>
+dedyn.io
+
+// Deta: https://www.deta.sh/
+// Submitted by Aavash Shrestha <aavash@deta.sh>
+deta.app
+deta.dev
+
+// Diher Solutions : https://diher.solutions
+// Submitted by Didi Hermawan <mail@diher.solutions>
+*.rss.my.id
+*.diher.solutions
+
+// Discord Inc : https://discord.com
+// Submitted by Sahn Lam <slam@discordapp.com>
+discordsays.com
+discordsez.com
+
+// DNS Africa Ltd https://dns.business
+// Submitted by Calvin Browne <calvin@dns.business>
+jozi.biz
+
+// DNShome : https://www.dnshome.de/
+// Submitted by Norbert Auler <mail@dnshome.de>
+dnshome.de
+
+// DotArai : https://www.dotarai.com/
+// Submitted by Atsadawat Netcharadsang <atsadawat@dotarai.co.th>
+online.th
+shop.th
+
+// DrayTek Corp. : https://www.draytek.com/
+// Submitted by Paul Fang <mis@draytek.com>
+drayddns.com
+
+// DreamCommerce : https://shoper.pl/
+// Submitted by Konrad Kotarba <konrad.kotarba@dreamcommerce.com>
+shoparena.pl
+
+// DreamHost : http://www.dreamhost.com/
+// Submitted by Andrew Farmer <andrew.farmer@dreamhost.com>
+dreamhosters.com
+
+// Drobo : http://www.drobo.com/
+// Submitted by Ricardo Padilha <rpadilha@drobo.com>
+mydrobo.com
+
+// Drud Holdings, LLC. : https://www.drud.com/
+// Submitted by Kevin Bridges <kevin@drud.com>
+drud.io
+drud.us
+
+// DuckDNS : http://www.duckdns.org/
+// Submitted by Richard Harper <richard@duckdns.org>
+duckdns.org
+
+// Bip : https://bip.sh
+// Submitted by Joel Kennedy <joel@bip.sh>
+bip.sh
+
+// bitbridge.net : Submitted by Craig Welch, abeliidev@gmail.com
+bitbridge.net
+
+// dy.fi : http://dy.fi/
+// Submitted by Heikki Hannikainen <hessu@hes.iki.fi>
+dy.fi
+tunk.org
+
+// DynDNS.com : http://www.dyndns.com/services/dns/dyndns/
+dyndns-at-home.com
+dyndns-at-work.com
+dyndns-blog.com
+dyndns-free.com
+dyndns-home.com
+dyndns-ip.com
+dyndns-mail.com
+dyndns-office.com
+dyndns-pics.com
+dyndns-remote.com
+dyndns-server.com
+dyndns-web.com
+dyndns-wiki.com
+dyndns-work.com
+dyndns.biz
+dyndns.info
+dyndns.org
+dyndns.tv
+at-band-camp.net
+ath.cx
+barrel-of-knowledge.info
+barrell-of-knowledge.info
+better-than.tv
+blogdns.com
+blogdns.net
+blogdns.org
+blogsite.org
+boldlygoingnowhere.org
+broke-it.net
+buyshouses.net
+cechire.com
+dnsalias.com
+dnsalias.net
+dnsalias.org
+dnsdojo.com
+dnsdojo.net
+dnsdojo.org
+does-it.net
+doesntexist.com
+doesntexist.org
+dontexist.com
+dontexist.net
+dontexist.org
+doomdns.com
+doomdns.org
+dvrdns.org
+dyn-o-saur.com
+dynalias.com
+dynalias.net
+dynalias.org
+dynathome.net
+dyndns.ws
+endofinternet.net
+endofinternet.org
+endoftheinternet.org
+est-a-la-maison.com
+est-a-la-masion.com
+est-le-patron.com
+est-mon-blogueur.com
+for-better.biz
+for-more.biz
+for-our.info
+for-some.biz
+for-the.biz
+forgot.her.name
+forgot.his.name
+from-ak.com
+from-al.com
+from-ar.com
+from-az.net
+from-ca.com
+from-co.net
+from-ct.com
+from-dc.com
+from-de.com
+from-fl.com
+from-ga.com
+from-hi.com
+from-ia.com
+from-id.com
+from-il.com
+from-in.com
+from-ks.com
+from-ky.com
+from-la.net
+from-ma.com
+from-md.com
+from-me.org
+from-mi.com
+from-mn.com
+from-mo.com
+from-ms.com
+from-mt.com
+from-nc.com
+from-nd.com
+from-ne.com
+from-nh.com
+from-nj.com
+from-nm.com
+from-nv.com
+from-ny.net
+from-oh.com
+from-ok.com
+from-or.com
+from-pa.com
+from-pr.com
+from-ri.com
+from-sc.com
+from-sd.com
+from-tn.com
+from-tx.com
+from-ut.com
+from-va.com
+from-vt.com
+from-wa.com
+from-wi.com
+from-wv.com
+from-wy.com
+ftpaccess.cc
+fuettertdasnetz.de
+game-host.org
+game-server.cc
+getmyip.com
+gets-it.net
+go.dyndns.org
+gotdns.com
+gotdns.org
+groks-the.info
+groks-this.info
+ham-radio-op.net
+here-for-more.info
+hobby-site.com
+hobby-site.org
+home.dyndns.org
+homedns.org
+homeftp.net
+homeftp.org
+homeip.net
+homelinux.com
+homelinux.net
+homelinux.org
+homeunix.com
+homeunix.net
+homeunix.org
+iamallama.com
+in-the-band.net
+is-a-anarchist.com
+is-a-blogger.com
+is-a-bookkeeper.com
+is-a-bruinsfan.org
+is-a-bulls-fan.com
+is-a-candidate.org
+is-a-caterer.com
+is-a-celticsfan.org
+is-a-chef.com
+is-a-chef.net
+is-a-chef.org
+is-a-conservative.com
+is-a-cpa.com
+is-a-cubicle-slave.com
+is-a-democrat.com
+is-a-designer.com
+is-a-doctor.com
+is-a-financialadvisor.com
+is-a-geek.com
+is-a-geek.net
+is-a-geek.org
+is-a-green.com
+is-a-guru.com
+is-a-hard-worker.com
+is-a-hunter.com
+is-a-knight.org
+is-a-landscaper.com
+is-a-lawyer.com
+is-a-liberal.com
+is-a-libertarian.com
+is-a-linux-user.org
+is-a-llama.com
+is-a-musician.com
+is-a-nascarfan.com
+is-a-nurse.com
+is-a-painter.com
+is-a-patsfan.org
+is-a-personaltrainer.com
+is-a-photographer.com
+is-a-player.com
+is-a-republican.com
+is-a-rockstar.com
+is-a-socialist.com
+is-a-soxfan.org
+is-a-student.com
+is-a-teacher.com
+is-a-techie.com
+is-a-therapist.com
+is-an-accountant.com
+is-an-actor.com
+is-an-actress.com
+is-an-anarchist.com
+is-an-artist.com
+is-an-engineer.com
+is-an-entertainer.com
+is-by.us
+is-certified.com
+is-found.org
+is-gone.com
+is-into-anime.com
+is-into-cars.com
+is-into-cartoons.com
+is-into-games.com
+is-leet.com
+is-lost.org
+is-not-certified.com
+is-saved.org
+is-slick.com
+is-uberleet.com
+is-very-bad.org
+is-very-evil.org
+is-very-good.org
+is-very-nice.org
+is-very-sweet.org
+is-with-theband.com
+isa-geek.com
+isa-geek.net
+isa-geek.org
+isa-hockeynut.com
+issmarterthanyou.com
+isteingeek.de
+istmein.de
+kicks-ass.net
+kicks-ass.org
+knowsitall.info
+land-4-sale.us
+lebtimnetz.de
+leitungsen.de
+likes-pie.com
+likescandy.com
+merseine.nu
+mine.nu
+misconfused.org
+mypets.ws
+myphotos.cc
+neat-url.com
+office-on-the.net
+on-the-web.tv
+podzone.net
+podzone.org
+readmyblog.org
+saves-the-whales.com
+scrapper-site.net
+scrapping.cc
+selfip.biz
+selfip.com
+selfip.info
+selfip.net
+selfip.org
+sells-for-less.com
+sells-for-u.com
+sells-it.net
+sellsyourhome.org
+servebbs.com
+servebbs.net
+servebbs.org
+serveftp.net
+serveftp.org
+servegame.org
+shacknet.nu
+simple-url.com
+space-to-rent.com
+stuff-4-sale.org
+stuff-4-sale.us
+teaches-yoga.com
+thruhere.net
+traeumtgerade.de
+webhop.biz
+webhop.info
+webhop.net
+webhop.org
+worse-than.tv
+writesthisblog.com
+
+// ddnss.de : https://www.ddnss.de/
+// Submitted by Robert Niedziela <webmaster@ddnss.de>
+ddnss.de
+dyn.ddnss.de
+dyndns.ddnss.de
+dyndns1.de
+dyn-ip24.de
+home-webserver.de
+dyn.home-webserver.de
+myhome-server.de
+ddnss.org
+
+// Definima : http://www.definima.com/
+// Submitted by Maxence Bitterli <maxence@definima.com>
+definima.net
+definima.io
+
+// DigitalOcean App Platform : https://www.digitalocean.com/products/app-platform/
+// Submitted by Braxton Huggins <psl-maintainers@digitalocean.com>
+ondigitalocean.app
+
+// DigitalOcean Spaces : https://www.digitalocean.com/products/spaces/
+// Submitted by Robin H. Johnson <psl-maintainers@digitalocean.com>
+*.digitaloceanspaces.com
+
+// dnstrace.pro : https://dnstrace.pro/
+// Submitted by Chris Partridge <chris@partridge.tech>
+bci.dnstrace.pro
+
+// Dynu.com : https://www.dynu.com/
+// Submitted by Sue Ye <sue@dynu.com>
+ddnsfree.com
+ddnsgeek.com
+giize.com
+gleeze.com
+kozow.com
+loseyourip.com
+ooguy.com
+theworkpc.com
+casacam.net
+dynu.net
+accesscam.org
+camdvr.org
+freeddns.org
+mywire.org
+webredirect.org
+myddns.rocks
+blogsite.xyz
+
+// dynv6 : https://dynv6.com
+// Submitted by Dominik Menke <dom@digineo.de>
+dynv6.net
+
+// E4YOU spol. s.r.o. : https://e4you.cz/
+// Submitted by Vladimir Dudr <info@e4you.cz>
+e4.cz
+
+// Easypanel : https://easypanel.io
+// Submitted by Andrei Canta <andrei@easypanel.io>
+easypanel.app
+easypanel.host
+
+// Elementor : Elementor Ltd.
+// Submitted by Anton Barkan <antonb@elementor.com>
+elementor.cloud
+elementor.cool
+
+// En root‽ : https://en-root.org
+// Submitted by Emmanuel Raviart <emmanuel@raviart.com>
+en-root.fr
+
+// Enalean SAS: https://www.enalean.com
+// Submitted by Thomas Cottier <thomas.cottier@enalean.com>
+mytuleap.com
+tuleap-partners.com
+
+// Encoretivity AB: https://encore.dev
+// Submitted by André Eriksson <andre@encore.dev>
+encr.app
+encoreapi.com
+
+// ECG Robotics, Inc: https://ecgrobotics.org
+// Submitted by <frc1533@ecgrobotics.org>
+onred.one
+staging.onred.one
+
+// encoway GmbH : https://www.encoway.de
+// Submitted by Marcel Daus <cloudops@encoway.de>
+eu.encoway.cloud
+
+// EU.org https://eu.org/
+// Submitted by Pierre Beyssac <hostmaster@eu.org>
+eu.org
+al.eu.org
+asso.eu.org
+at.eu.org
+au.eu.org
+be.eu.org
+bg.eu.org
+ca.eu.org
+cd.eu.org
+ch.eu.org
+cn.eu.org
+cy.eu.org
+cz.eu.org
+de.eu.org
+dk.eu.org
+edu.eu.org
+ee.eu.org
+es.eu.org
+fi.eu.org
+fr.eu.org
+gr.eu.org
+hr.eu.org
+hu.eu.org
+ie.eu.org
+il.eu.org
+in.eu.org
+int.eu.org
+is.eu.org
+it.eu.org
+jp.eu.org
+kr.eu.org
+lt.eu.org
+lu.eu.org
+lv.eu.org
+mc.eu.org
+me.eu.org
+mk.eu.org
+mt.eu.org
+my.eu.org
+net.eu.org
+ng.eu.org
+nl.eu.org
+no.eu.org
+nz.eu.org
+paris.eu.org
+pl.eu.org
+pt.eu.org
+q-a.eu.org
+ro.eu.org
+ru.eu.org
+se.eu.org
+si.eu.org
+sk.eu.org
+tr.eu.org
+uk.eu.org
+us.eu.org
+
+// Eurobyte : https://eurobyte.ru
+// Submitted by Evgeniy Subbotin <e.subbotin@eurobyte.ru>
+eurodir.ru
+
+// Evennode : http://www.evennode.com/
+// Submitted by Michal Kralik <support@evennode.com>
+eu-1.evennode.com
+eu-2.evennode.com
+eu-3.evennode.com
+eu-4.evennode.com
+us-1.evennode.com
+us-2.evennode.com
+us-3.evennode.com
+us-4.evennode.com
+
+// eDirect Corp. : https://hosting.url.com.tw/
+// Submitted by C.S. chang <cschang@corp.url.com.tw>
+twmail.cc
+twmail.net
+twmail.org
+mymailer.com.tw
+url.tw
+
+// Fabrica Technologies, Inc. : https://www.fabrica.dev/
+// Submitted by Eric Jiang <eric@fabrica.dev>
+onfabrica.com
+
+// Facebook, Inc.
+// Submitted by Peter Ruibal <public-suffix@fb.com>
+apps.fbsbx.com
+
+// FAITID : https://faitid.org/
+// Submitted by Maxim Alzoba <tech.contact@faitid.org>
+// https://www.flexireg.net/stat_info
+ru.net
+adygeya.ru
+bashkiria.ru
+bir.ru
+cbg.ru
+com.ru
+dagestan.ru
+grozny.ru
+kalmykia.ru
+kustanai.ru
+marine.ru
+mordovia.ru
+msk.ru
+mytis.ru
+nalchik.ru
+nov.ru
+pyatigorsk.ru
+spb.ru
+vladikavkaz.ru
+vladimir.ru
+abkhazia.su
+adygeya.su
+aktyubinsk.su
+arkhangelsk.su
+armenia.su
+ashgabad.su
+azerbaijan.su
+balashov.su
+bashkiria.su
+bryansk.su
+bukhara.su
+chimkent.su
+dagestan.su
+east-kazakhstan.su
+exnet.su
+georgia.su
+grozny.su
+ivanovo.su
+jambyl.su
+kalmykia.su
+kaluga.su
+karacol.su
+karaganda.su
+karelia.su
+khakassia.su
+krasnodar.su
+kurgan.su
+kustanai.su
+lenug.su
+mangyshlak.su
+mordovia.su
+msk.su
+murmansk.su
+nalchik.su
+navoi.su
+north-kazakhstan.su
+nov.su
+obninsk.su
+penza.su
+pokrovsk.su
+sochi.su
+spb.su
+tashkent.su
+termez.su
+togliatti.su
+troitsk.su
+tselinograd.su
+tula.su
+tuva.su
+vladikavkaz.su
+vladimir.su
+vologda.su
+
+// Fancy Bits, LLC : http://getchannels.com
+// Submitted by Aman Gupta <aman@getchannels.com>
+channelsdvr.net
+u.channelsdvr.net
+
+// Fastly Inc. : http://www.fastly.com/
+// Submitted by Fastly Security <security@fastly.com>
+edgecompute.app
+fastly-edge.com
+fastly-terrarium.com
+fastlylb.net
+map.fastlylb.net
+freetls.fastly.net
+map.fastly.net
+a.prod.fastly.net
+global.prod.fastly.net
+a.ssl.fastly.net
+b.ssl.fastly.net
+global.ssl.fastly.net
+
+// Fastmail : https://www.fastmail.com/
+// Submitted by Marc Bradshaw <marc@fastmailteam.com>
+*.user.fm
+
+// FASTVPS EESTI OU : https://fastvps.ru/
+// Submitted by Likhachev Vasiliy <lihachev@fastvps.ru>
+fastvps-server.com
+fastvps.host
+myfast.host
+fastvps.site
+myfast.space
+
+// Fedora : https://fedoraproject.org/
+// submitted by Patrick Uiterwijk <puiterwijk@fedoraproject.org>
+fedorainfracloud.org
+fedorapeople.org
+cloud.fedoraproject.org
+app.os.fedoraproject.org
+app.os.stg.fedoraproject.org
+
+// FearWorks Media Ltd. : https://fearworksmedia.co.uk
+// submitted by Keith Fairley <domains@fearworksmedia.co.uk>
+conn.uk
+copro.uk
+hosp.uk
+
+// Fermax : https://fermax.com/
+// submitted by Koen Van Isterdael <k.vanisterdael@fermax.be>
+mydobiss.com
+
+// FH Muenster : https://www.fh-muenster.de
+// Submitted by Robin Naundorf <r.naundorf@fh-muenster.de>
+fh-muenster.io
+
+// Filegear Inc. : https://www.filegear.com
+// Submitted by Jason Zhu <jason@owtware.com>
+filegear.me
+filegear-au.me
+filegear-de.me
+filegear-gb.me
+filegear-ie.me
+filegear-jp.me
+filegear-sg.me
+
+// Firebase, Inc.
+// Submitted by Chris Raynor <chris@firebase.com>
+firebaseapp.com
+
+// Firewebkit : https://www.firewebkit.com
+// Submitted by Majid Qureshi <mqureshi@amrayn.com>
+fireweb.app
+
+// FLAP : https://www.flap.cloud
+// Submitted by Louis Chemineau <louis@chmn.me>
+flap.id
+
+// FlashDrive : https://flashdrive.io
+// Submitted by Eric Chan <support@flashdrive.io>
+onflashdrive.app
+fldrv.com
+
+// fly.io: https://fly.io
+// Submitted by Kurt Mackey <kurt@fly.io>
+fly.dev
+edgeapp.net
+shw.io
+
+// Flynn : https://flynn.io
+// Submitted by Jonathan Rudenberg <jonathan@flynn.io>
+flynnhosting.net
+
+// Forgerock : https://www.forgerock.com
+// Submitted by Roderick Parr <roderick.parr@forgerock.com>
+forgeblocks.com
+id.forgerock.io
+
+// Framer : https://www.framer.com
+// Submitted by Koen Rouwhorst <koenrh@framer.com>
+framer.app
+framercanvas.com
+framer.media
+framer.photos
+framer.website
+framer.wiki
+
+// Frusky MEDIA&PR : https://www.frusky.de
+// Submitted by Victor Pupynin <hallo@frusky.de>
+*.frusky.de
+
+// RavPage : https://www.ravpage.co.il
+// Submitted by Roni Horowitz <roni@responder.co.il>
+ravpage.co.il
+
+// Frederik Braun https://frederik-braun.com
+// Submitted by Frederik Braun <fb@frederik-braun.com>
+0e.vc
+
+// Freebox : http://www.freebox.fr
+// Submitted by Romain Fliedel <rfliedel@freebox.fr>
+freebox-os.com
+freeboxos.com
+fbx-os.fr
+fbxos.fr
+freebox-os.fr
+freeboxos.fr
+
+// freedesktop.org : https://www.freedesktop.org
+// Submitted by Daniel Stone <daniel@fooishbar.org>
+freedesktop.org
+
+// freemyip.com : https://freemyip.com
+// Submitted by Cadence <contact@freemyip.com>
+freemyip.com
+
+// FunkFeuer - Verein zur Förderung freier Netze : https://www.funkfeuer.at
+// Submitted by Daniel A. Maierhofer <vorstand@funkfeuer.at>
+wien.funkfeuer.at
+
+// Futureweb GmbH : https://www.futureweb.at
+// Submitted by Andreas Schnederle-Wagner <schnederle@futureweb.at>
+*.futurecms.at
+*.ex.futurecms.at
+*.in.futurecms.at
+futurehosting.at
+futuremailing.at
+*.ex.ortsinfo.at
+*.kunden.ortsinfo.at
+*.statics.cloud
+
+// GDS : https://www.gov.uk/service-manual/technology/managing-domain-names
+// Submitted by Stephen Ford <hostmaster@digital.cabinet-office.gov.uk>
+independent-commission.uk
+independent-inquest.uk
+independent-inquiry.uk
+independent-panel.uk
+independent-review.uk
+public-inquiry.uk
+royal-commission.uk
+campaign.gov.uk
+service.gov.uk
+
+// CDDO : https://www.gov.uk/guidance/get-an-api-domain-on-govuk
+// Submitted by Jamie Tanna <jamie.tanna@digital.cabinet-office.gov.uk>
+api.gov.uk
+
+// Gehirn Inc. : https://www.gehirn.co.jp/
+// Submitted by Kohei YOSHIDA <tech@gehirn.co.jp>
+gehirn.ne.jp
+usercontent.jp
+
+// Gentlent, Inc. : https://www.gentlent.com
+// Submitted by Tom Klein <tom@gentlent.com>
+gentapps.com
+gentlentapis.com
+lab.ms
+cdn-edges.net
+
+// Ghost Foundation : https://ghost.org
+// Submitted by Matt Hanley <security@ghost.org>
+ghost.io
+
+// GignoSystemJapan: http://gsj.bz
+// Submitted by GignoSystemJapan <kakutou-ec@gsj.bz>
+gsj.bz
+
+// GitHub, Inc.
+// Submitted by Patrick Toomey <security@github.com>
+githubusercontent.com
+githubpreview.dev
+github.io
+
+// GitLab, Inc.
+// Submitted by Alex Hanselka <alex@gitlab.com>
+gitlab.io
+
+// Gitplac.si - https://gitplac.si
+// Submitted by Aljaž Starc <me@aljaxus.eu>
+gitapp.si
+gitpage.si
+
+// Glitch, Inc : https://glitch.com
+// Submitted by Mads Hartmann <mads@glitch.com>
+glitch.me
+
+// Global NOG Alliance : https://nogalliance.org/
+// Submitted by Sander Steffann <sander@nogalliance.org>
+nog.community
+
+// Globe Hosting SRL : https://www.globehosting.com/
+// Submitted by Gavin Brown <gavin.brown@centralnic.com>
+co.ro
+shop.ro
+
+// GMO Pepabo, Inc. : https://pepabo.com/
+// Submitted by Hosting Div <admin@pepabo.com>
+lolipop.io
+angry.jp
+babyblue.jp
+babymilk.jp
+backdrop.jp
+bambina.jp
+bitter.jp
+blush.jp
+boo.jp
+boy.jp
+boyfriend.jp
+but.jp
+candypop.jp
+capoo.jp
+catfood.jp
+cheap.jp
+chicappa.jp
+chillout.jp
+chips.jp
+chowder.jp
+chu.jp
+ciao.jp
+cocotte.jp
+coolblog.jp
+cranky.jp
+cutegirl.jp
+daa.jp
+deca.jp
+deci.jp
+digick.jp
+egoism.jp
+fakefur.jp
+fem.jp
+flier.jp
+floppy.jp
+fool.jp
+frenchkiss.jp
+girlfriend.jp
+girly.jp
+gloomy.jp
+gonna.jp
+greater.jp
+hacca.jp
+heavy.jp
+her.jp
+hiho.jp
+hippy.jp
+holy.jp
+hungry.jp
+icurus.jp
+itigo.jp
+jellybean.jp
+kikirara.jp
+kill.jp
+kilo.jp
+kuron.jp
+littlestar.jp
+lolipopmc.jp
+lolitapunk.jp
+lomo.jp
+lovepop.jp
+lovesick.jp
+main.jp
+mods.jp
+mond.jp
+mongolian.jp
+moo.jp
+namaste.jp
+nikita.jp
+nobushi.jp
+noor.jp
+oops.jp
+parallel.jp
+parasite.jp
+pecori.jp
+peewee.jp
+penne.jp
+pepper.jp
+perma.jp
+pigboat.jp
+pinoko.jp
+punyu.jp
+pupu.jp
+pussycat.jp
+pya.jp
+raindrop.jp
+readymade.jp
+sadist.jp
+schoolbus.jp
+secret.jp
+staba.jp
+stripper.jp
+sub.jp
+sunnyday.jp
+thick.jp
+tonkotsu.jp
+under.jp
+upper.jp
+velvet.jp
+verse.jp
+versus.jp
+vivian.jp
+watson.jp
+weblike.jp
+whitesnow.jp
+zombie.jp
+heteml.net
+
+// GOV.UK Platform as a Service : https://www.cloud.service.gov.uk/
+// Submitted by Tom Whitwell <gov-uk-paas-support@digital.cabinet-office.gov.uk>
+cloudapps.digital
+london.cloudapps.digital
+
+// GOV.UK Pay : https://www.payments.service.gov.uk/
+// Submitted by Richard Baker <richard.baker@digital.cabinet-office.gov.uk>
+pymnt.uk
+
+// GlobeHosting, Inc.
+// Submitted by Zoltan Egresi <egresi@globehosting.com>
+ro.im
+
+// GoIP DNS Services : http://www.goip.de
+// Submitted by Christian Poulter <milchstrasse@goip.de>
+goip.de
+
+// Google, Inc.
+// Submitted by Eduardo Vela <evn@google.com>
+run.app
+a.run.app
+web.app
+*.0emm.com
+appspot.com
+*.r.appspot.com
+codespot.com
+googleapis.com
+googlecode.com
+pagespeedmobilizer.com
+publishproxy.com
+withgoogle.com
+withyoutube.com
+*.gateway.dev
+cloud.goog
+translate.goog
+*.usercontent.goog
+cloudfunctions.net
+blogspot.ae
+blogspot.al
+blogspot.am
+blogspot.ba
+blogspot.be
+blogspot.bg
+blogspot.bj
+blogspot.ca
+blogspot.cf
+blogspot.ch
+blogspot.cl
+blogspot.co.at
+blogspot.co.id
+blogspot.co.il
+blogspot.co.ke
+blogspot.co.nz
+blogspot.co.uk
+blogspot.co.za
+blogspot.com
+blogspot.com.ar
+blogspot.com.au
+blogspot.com.br
+blogspot.com.by
+blogspot.com.co
+blogspot.com.cy
+blogspot.com.ee
+blogspot.com.eg
+blogspot.com.es
+blogspot.com.mt
+blogspot.com.ng
+blogspot.com.tr
+blogspot.com.uy
+blogspot.cv
+blogspot.cz
+blogspot.de
+blogspot.dk
+blogspot.fi
+blogspot.fr
+blogspot.gr
+blogspot.hk
+blogspot.hr
+blogspot.hu
+blogspot.ie
+blogspot.in
+blogspot.is
+blogspot.it
+blogspot.jp
+blogspot.kr
+blogspot.li
+blogspot.lt
+blogspot.lu
+blogspot.md
+blogspot.mk
+blogspot.mr
+blogspot.mx
+blogspot.my
+blogspot.nl
+blogspot.no
+blogspot.pe
+blogspot.pt
+blogspot.qa
+blogspot.re
+blogspot.ro
+blogspot.rs
+blogspot.ru
+blogspot.se
+blogspot.sg
+blogspot.si
+blogspot.sk
+blogspot.sn
+blogspot.td
+blogspot.tw
+blogspot.ug
+blogspot.vn
+
+// Goupile : https://goupile.fr
+// Submitted by Niels Martignene <hello@goupile.fr>
+goupile.fr
+
+// Government of the Netherlands: https://www.government.nl
+// Submitted by <domeinnaam@minaz.nl>
+gov.nl
+
+// Group 53, LLC : https://www.group53.com
+// Submitted by Tyler Todd <noc@nova53.net>
+awsmppl.com
+
+// GünstigBestellen : https://günstigbestellen.de
+// Submitted by Furkan Akkoc <info@hendelzon.de>
+günstigbestellen.de
+günstigliefern.de
+
+// Hakaran group: http://hakaran.cz
+// Submitted by Arseniy Sokolov <security@hakaran.cz>
+fin.ci
+free.hr
+caa.li
+ua.rs
+conf.se
+
+// Handshake : https://handshake.org
+// Submitted by Mike Damm <md@md.vc>
+hs.zone
+hs.run
+
+// Hashbang : https://hashbang.sh
+hashbang.sh
+
+// Hasura : https://hasura.io
+// Submitted by Shahidh K Muhammed <shahidh@hasura.io>
+hasura.app
+hasura-app.io
+
+// Heilbronn University of Applied Sciences - Faculty Informatics (GitLab Pages): https://www.hs-heilbronn.de
+// Submitted by Richard Zowalla <mi-admin@hs-heilbronn.de>
+pages.it.hs-heilbronn.de
+
+// Hepforge : https://www.hepforge.org
+// Submitted by David Grellscheid <admin@hepforge.org>
+hepforge.org
+
+// Heroku : https://www.heroku.com/
+// Submitted by Tom Maher <tmaher@heroku.com>
+herokuapp.com
+herokussl.com
+
+// Hibernating Rhinos
+// Submitted by Oren Eini <oren@ravendb.net>
+ravendb.cloud
+ravendb.community
+ravendb.me
+development.run
+ravendb.run
+
+// home.pl S.A.: https://home.pl
+// Submitted by Krzysztof Wolski <krzysztof.wolski@home.eu>
+homesklep.pl
+
+// Hong Kong Productivity Council: https://www.hkpc.org/
+// Submitted by SECaaS Team <summchan@hkpc.org>
+secaas.hk
+
+// Hoplix : https://www.hoplix.com
+// Submitted by Danilo De Franco<info@hoplix.shop>
+hoplix.shop
+
+
+// HOSTBIP REGISTRY : https://www.hostbip.com/
+// Submitted by Atanunu Igbunuroghene <publicsuffixlist@hostbip.com>
+orx.biz
+biz.gl
+col.ng
+firm.ng
+gen.ng
+ltd.ng
+ngo.ng
+edu.scot
+sch.so
+
+// HostFly : https://www.ie.ua
+// Submitted by Bohdan Dub <support@hostfly.com.ua>
+ie.ua
+
+// HostyHosting (hostyhosting.com)
+hostyhosting.io
+
+// Häkkinen.fi
+// Submitted by Eero Häkkinen <Eero+psl@Häkkinen.fi>
+häkkinen.fi
+
+// Ici la Lune : http://www.icilalune.com/
+// Submitted by Simon Morvan <simon@icilalune.com>
+*.moonscale.io
+moonscale.net
+
+// iki.fi
+// Submitted by Hannu Aronsson <haa@iki.fi>
+iki.fi
+
+// iliad italia: https://www.iliad.it
+// Submitted by Marios Makassikis <mmakassikis@freebox.fr>
+ibxos.it
+iliadboxos.it
+
+// Impertrix Solutions : <https://impertrixcdn.com>
+// Submitted by Zhixiang Zhao <csuite@impertrix.com>
+impertrixcdn.com
+impertrix.com
+
+// Incsub, LLC: https://incsub.com/
+// Submitted by Aaron Edwards <sysadmins@incsub.com>
+smushcdn.com
+wphostedmail.com
+wpmucdn.com
+tempurl.host
+wpmudev.host
+
+// Individual Network Berlin e.V. : https://www.in-berlin.de/
+// Submitted by Christian Seitz <chris@in-berlin.de>
+dyn-berlin.de
+in-berlin.de
+in-brb.de
+in-butter.de
+in-dsl.de
+in-dsl.net
+in-dsl.org
+in-vpn.de
+in-vpn.net
+in-vpn.org
+
+// info.at : http://www.info.at/
+biz.at
+info.at
+
+// info.cx : http://info.cx
+// Submitted by Jacob Slater <whois@igloo.to>
+info.cx
+
+// Interlegis : http://www.interlegis.leg.br
+// Submitted by Gabriel Ferreira <registrobr@interlegis.leg.br>
+ac.leg.br
+al.leg.br
+am.leg.br
+ap.leg.br
+ba.leg.br
+ce.leg.br
+df.leg.br
+es.leg.br
+go.leg.br
+ma.leg.br
+mg.leg.br
+ms.leg.br
+mt.leg.br
+pa.leg.br
+pb.leg.br
+pe.leg.br
+pi.leg.br
+pr.leg.br
+rj.leg.br
+rn.leg.br
+ro.leg.br
+rr.leg.br
+rs.leg.br
+sc.leg.br
+se.leg.br
+sp.leg.br
+to.leg.br
+
+// intermetrics GmbH : https://pixolino.com/
+// Submitted by Wolfgang Schwarz <admin@intermetrics.de>
+pixolino.com
+
+// Internet-Pro, LLP: https://netangels.ru/
+// Submitted by Vasiliy Sheredeko <piphon@gmail.com>
+na4u.ru
+
+// iopsys software solutions AB : https://iopsys.eu/
+// Submitted by Roman Azarenko <roman.azarenko@iopsys.eu>
+iopsys.se
+
+// IPiFony Systems, Inc. : https://www.ipifony.com/
+// Submitted by Matthew Hardeman <mhardeman@ipifony.com>
+ipifony.net
+
+// IServ GmbH : https://iserv.de
+// Submitted by Mario Hoberg <info@iserv.de>
+iservschule.de
+mein-iserv.de
+schulplattform.de
+schulserver.de
+test-iserv.de
+iserv.dev
+
+// I-O DATA DEVICE, INC. : http://www.iodata.com/
+// Submitted by Yuji Minagawa <domains-admin@iodata.jp>
+iobb.net
+
+// Jelastic, Inc. : https://jelastic.com/
+// Submitted by Ihor Kolodyuk <ik@jelastic.com>
+mel.cloudlets.com.au
+cloud.interhostsolutions.be
+mycloud.by
+alp1.ae.flow.ch
+appengine.flow.ch
+es-1.axarnet.cloud
+diadem.cloud
+vip.jelastic.cloud
+jele.cloud
+it1.eur.aruba.jenv-aruba.cloud
+it1.jenv-aruba.cloud
+keliweb.cloud
+cs.keliweb.cloud
+oxa.cloud
+tn.oxa.cloud
+uk.oxa.cloud
+primetel.cloud
+uk.primetel.cloud
+ca.reclaim.cloud
+uk.reclaim.cloud
+us.reclaim.cloud
+ch.trendhosting.cloud
+de.trendhosting.cloud
+jele.club
+amscompute.com
+dopaas.com
+paas.hosted-by-previder.com
+rag-cloud.hosteur.com
+rag-cloud-ch.hosteur.com
+jcloud.ik-server.com
+jcloud-ver-jpc.ik-server.com
+demo.jelastic.com
+kilatiron.com
+paas.massivegrid.com
+jed.wafaicloud.com
+lon.wafaicloud.com
+ryd.wafaicloud.com
+j.scaleforce.com.cy
+jelastic.dogado.eu
+fi.cloudplatform.fi
+demo.datacenter.fi
+paas.datacenter.fi
+jele.host
+mircloud.host
+paas.beebyte.io
+sekd1.beebyteapp.io
+jele.io
+cloud-fr1.unispace.io
+jc.neen.it
+cloud.jelastic.open.tim.it
+jcloud.kz
+upaas.kazteleport.kz
+cloudjiffy.net
+fra1-de.cloudjiffy.net
+west1-us.cloudjiffy.net
+jls-sto1.elastx.net
+jls-sto2.elastx.net
+jls-sto3.elastx.net
+faststacks.net
+fr-1.paas.massivegrid.net
+lon-1.paas.massivegrid.net
+lon-2.paas.massivegrid.net
+ny-1.paas.massivegrid.net
+ny-2.paas.massivegrid.net
+sg-1.paas.massivegrid.net
+jelastic.saveincloud.net
+nordeste-idc.saveincloud.net
+j.scaleforce.net
+jelastic.tsukaeru.net
+sdscloud.pl
+unicloud.pl
+mircloud.ru
+jelastic.regruhosting.ru
+enscaled.sg
+jele.site
+jelastic.team
+orangecloud.tn
+j.layershift.co.uk
+phx.enscaled.us
+mircloud.us
+
+// Jino : https://www.jino.ru
+// Submitted by Sergey Ulyashin <ulyashin@jino.ru>
+myjino.ru
+*.hosting.myjino.ru
+*.landing.myjino.ru
+*.spectrum.myjino.ru
+*.vps.myjino.ru
+
+// Jotelulu S.L. : https://jotelulu.com
+// Submitted by Daniel Fariña <ingenieria@jotelulu.com>
+jotelulu.cloud
+
+// Joyent : https://www.joyent.com/
+// Submitted by Brian Bennett <brian.bennett@joyent.com>
+*.triton.zone
+*.cns.joyent.com
+
+// JS.ORG : http://dns.js.org
+// Submitted by Stefan Keim <admin@js.org>
+js.org
+
+// KaasHosting : http://www.kaashosting.nl/
+// Submitted by Wouter Bakker <hostmaster@kaashosting.nl>
+kaas.gg
+khplay.nl
+
+// Kakao : https://www.kakaocorp.com/
+// Submitted by JaeYoong Lee <cec@kakaocorp.com>
+ktistory.com
+
+// Kapsi : https://kapsi.fi
+// Submitted by Tomi Juntunen <erani@kapsi.fi>
+kapsi.fi
+
+// Keyweb AG : https://www.keyweb.de
+// Submitted by Martin Dannehl <postmaster@keymachine.de>
+keymachine.de
+
+// KingHost : https://king.host
+// Submitted by Felipe Keller Braz <felipebraz@kinghost.com.br>
+kinghost.net
+uni5.net
+
+// KnightPoint Systems, LLC : http://www.knightpoint.com/
+// Submitted by Roy Keene <rkeene@knightpoint.com>
+knightpoint.systems
+
+// KoobinEvent, SL: https://www.koobin.com
+// Submitted by Iván Oliva <ivan.oliva@koobin.com>
+koobin.events
+
+// KUROKU LTD : https://kuroku.ltd/
+// Submitted by DisposaBoy <security@oya.to>
+oya.to
+
+// Katholieke Universiteit Leuven: https://www.kuleuven.be
+// Submitted by Abuse KU Leuven <abuse@kuleuven.be>
+kuleuven.cloud
+ezproxy.kuleuven.be
+
+// .KRD : http://nic.krd/data/krd/Registration%20Policy.pdf
+co.krd
+edu.krd
+
+// Krellian Ltd. : https://krellian.com
+// Submitted by Ben Francis <ben@krellian.com>
+krellian.net
+webthings.io
+
+// LCube - Professional hosting e.K. : https://www.lcube-webhosting.de
+// Submitted by Lars Laehn <info@lcube.de>
+git-repos.de
+lcube-server.de
+svn-repos.de
+
+// Leadpages : https://www.leadpages.net
+// Submitted by Greg Dallavalle <domains@leadpages.net>
+leadpages.co
+lpages.co
+lpusercontent.com
+
+// Lelux.fi : https://lelux.fi/
+// Submitted by Lelux Admin <publisuffix@lelux.site>
+lelux.site
+
+// Lifetime Hosting : https://Lifetime.Hosting/
+// Submitted by Mike Fillator <support@lifetime.hosting>
+co.business
+co.education
+co.events
+co.financial
+co.network
+co.place
+co.technology
+
+// Lightmaker Property Manager, Inc. : https://app.lmpm.com/
+// Submitted by Greg Holland <greg.holland@lmpm.com>
+app.lmpm.com
+
+// linkyard ldt: https://www.linkyard.ch/
+// Submitted by Mario Siegenthaler <mario.siegenthaler@linkyard.ch>
+linkyard.cloud
+linkyard-cloud.ch
+
+// Linode : https://linode.com
+// Submitted by <security@linode.com>
+members.linode.com
+*.nodebalancer.linode.com
+*.linodeobjects.com
+ip.linodeusercontent.com
+
+// LiquidNet Ltd : http://www.liquidnetlimited.com/
+// Submitted by Victor Velchev <admin@liquidnetlimited.com>
+we.bs
+
+// Localcert : https://localcert.dev
+// Submitted by Lann Martin <security@localcert.dev>
+*.user.localcert.dev
+
+// localzone.xyz
+// Submitted by Kenny Niehage <hello@yahe.sh>
+localzone.xyz
+
+// Log'in Line : https://www.loginline.com/
+// Submitted by Rémi Mach <remi.mach@loginline.com>
+loginline.app
+loginline.dev
+loginline.io
+loginline.services
+loginline.site
+
+// Lokalized : https://lokalized.nl
+// Submitted by Noah Taheij <noah@lokalized.nl>
+servers.run
+
+// Lõhmus Family, The
+// Submitted by Heiki Lõhmus <hostmaster at lohmus dot me>
+lohmus.me
+
+// LubMAN UMCS Sp. z o.o : https://lubman.pl/
+// Submitted by Ireneusz Maliszewski <ireneusz.maliszewski@lubman.pl>
+krasnik.pl
+leczna.pl
+lubartow.pl
+lublin.pl
+poniatowa.pl
+swidnik.pl
+
+// Lug.org.uk : https://lug.org.uk
+// Submitted by Jon Spriggs <admin@lug.org.uk>
+glug.org.uk
+lug.org.uk
+lugs.org.uk
+
+// Lukanet Ltd : https://lukanet.com
+// Submitted by Anton Avramov <register@lukanet.com>
+barsy.bg
+barsy.co.uk
+barsyonline.co.uk
+barsycenter.com
+barsyonline.com
+barsy.club
+barsy.de
+barsy.eu
+barsy.in
+barsy.info
+barsy.io
+barsy.me
+barsy.menu
+barsy.mobi
+barsy.net
+barsy.online
+barsy.org
+barsy.pro
+barsy.pub
+barsy.ro
+barsy.shop
+barsy.site
+barsy.support
+barsy.uk
+
+// Magento Commerce
+// Submitted by Damien Tournoud <dtournoud@magento.cloud>
+*.magentosite.cloud
+
+// May First - People Link : https://mayfirst.org/
+// Submitted by Jamie McClelland <info@mayfirst.org>
+mayfirst.info
+mayfirst.org
+
+// Mail.Ru Group : https://hb.cldmail.ru
+// Submitted by Ilya Zaretskiy <zaretskiy@corp.mail.ru>
+hb.cldmail.ru
+
+// Mail Transfer Platform : https://www.neupeer.com
+// Submitted by Li Hui <lihui@neupeer.com>
+cn.vu
+
+// Maze Play: https://www.mazeplay.com
+// Submitted by Adam Humpherys <adam@mws.dev>
+mazeplay.com
+
+// mcpe.me : https://mcpe.me
+// Submitted by Noa Heyl <hi@noa.dev>
+mcpe.me
+
+// McHost : https://mchost.ru
+// Submitted by Evgeniy Subbotin <e.subbotin@mchost.ru>
+mcdir.me
+mcdir.ru
+mcpre.ru
+vps.mcdir.ru
+
+// Mediatech : https://mediatech.by
+// Submitted by Evgeniy Kozhuhovskiy <ugenk@mediatech.by>
+mediatech.by
+mediatech.dev
+
+// Medicom Health : https://medicomhealth.com
+// Submitted by Michael Olson <molson@medicomhealth.com>
+hra.health
+
+// Memset hosting : https://www.memset.com
+// Submitted by Tom Whitwell <domains@memset.com>
+miniserver.com
+memset.net
+
+// Messerli Informatik AG : https://www.messerli.ch/
+// Submitted by Ruben Schmidmeister <psl-maintainers@messerli.ch>
+messerli.app
+
+// MetaCentrum, CESNET z.s.p.o. : https://www.metacentrum.cz/en/
+// Submitted by Zdeněk Šustr <zdenek.sustr@cesnet.cz>
+*.cloud.metacentrum.cz
+custom.metacentrum.cz
+
+// MetaCentrum, CESNET z.s.p.o. : https://www.metacentrum.cz/en/
+// Submitted by Radim Janča <janca@cesnet.cz>
+flt.cloud.muni.cz
+usr.cloud.muni.cz
+
+// Meteor Development Group : https://www.meteor.com/hosting
+// Submitted by Pierre Carrier <pierre@meteor.com>
+meteorapp.com
+eu.meteorapp.com
+
+// Michau Enterprises Limited : http://www.co.pl/
+co.pl
+
+// Microsoft Corporation : http://microsoft.com
+// Submitted by Public Suffix List Admin <msftpsladmin@microsoft.com>
+*.azurecontainer.io
+azurewebsites.net
+azure-mobile.net
+cloudapp.net
+azurestaticapps.net
+1.azurestaticapps.net
+2.azurestaticapps.net
+3.azurestaticapps.net
+4.azurestaticapps.net
+5.azurestaticapps.net
+6.azurestaticapps.net
+7.azurestaticapps.net
+centralus.azurestaticapps.net
+eastasia.azurestaticapps.net
+eastus2.azurestaticapps.net
+westeurope.azurestaticapps.net
+westus2.azurestaticapps.net
+
+// minion.systems : http://minion.systems
+// Submitted by Robert Böttinger <r@minion.systems>
+csx.cc
+
+// Mintere : https://mintere.com/
+// Submitted by Ben Aubin <security@mintere.com>
+mintere.site
+
+// MobileEducation, LLC : https://joinforte.com
+// Submitted by Grayson Martin <grayson.martin@mobileeducation.us>
+forte.id
+
+// Mozilla Corporation : https://mozilla.com
+// Submitted by Ben Francis <bfrancis@mozilla.com>
+mozilla-iot.org
+
+// Mozilla Foundation : https://mozilla.org/
+// Submitted by glob <glob@mozilla.com>
+bmoattachments.org
+
+// MSK-IX : https://www.msk-ix.ru/
+// Submitted by Khannanov Roman <r.khannanov@msk-ix.ru>
+net.ru
+org.ru
+pp.ru
+
+// Mythic Beasts : https://www.mythic-beasts.com
+// Submitted by Paul Cammish <kelduum@mythic-beasts.com>
+hostedpi.com
+customer.mythic-beasts.com
+caracal.mythic-beasts.com
+fentiger.mythic-beasts.com
+lynx.mythic-beasts.com
+ocelot.mythic-beasts.com
+oncilla.mythic-beasts.com
+onza.mythic-beasts.com
+sphinx.mythic-beasts.com
+vs.mythic-beasts.com
+x.mythic-beasts.com
+yali.mythic-beasts.com
+cust.retrosnub.co.uk
+
+// Nabu Casa : https://www.nabucasa.com
+// Submitted by Paulus Schoutsen <infra@nabucasa.com>
+ui.nabu.casa
+
+// Net at Work Gmbh : https://www.netatwork.de
+// Submitted by Jan Jaeschke <jan.jaeschke@netatwork.de>
+cloud.nospamproxy.com
+
+// Netlify : https://www.netlify.com
+// Submitted by Jessica Parsons <jessica@netlify.com>
+netlify.app
+
+// Neustar Inc.
+// Submitted by Trung Tran <Trung.Tran@neustar.biz>
+4u.com
+
+// ngrok : https://ngrok.com/
+// Submitted by Alan Shreve <alan@ngrok.com>
+ngrok.app
+ngrok-free.app
+ngrok.dev
+ngrok-free.dev
+ngrok.io
+ap.ngrok.io
+au.ngrok.io
+eu.ngrok.io
+in.ngrok.io
+jp.ngrok.io
+sa.ngrok.io
+us.ngrok.io
+ngrok.pizza
+
+// Nicolaus Copernicus University in Torun - MSK TORMAN (https://www.man.torun.pl)
+torun.pl
+
+// Nimbus Hosting Ltd. : https://www.nimbushosting.co.uk/
+// Submitted by Nicholas Ford <nick@nimbushosting.co.uk>
+nh-serv.co.uk
+
+// NFSN, Inc. : https://www.NearlyFreeSpeech.NET/
+// Submitted by Jeff Wheelhouse <support@nearlyfreespeech.net>
+nfshost.com
+
+// Noop : https://noop.app
+// Submitted by Nathaniel Schweinberg <noop@rearc.io>
+*.developer.app
+noop.app
+
+// Northflank Ltd. : https://northflank.com/
+// Submitted by Marco Suter <marco@northflank.com>
+*.northflank.app
+*.build.run
+*.code.run
+*.database.run
+*.migration.run
+
+// Noticeable : https://noticeable.io
+// Submitted by Laurent Pellegrino <security@noticeable.io>
+noticeable.news
+
+// Now-DNS : https://now-dns.com
+// Submitted by Steve Russell <steve@now-dns.com>
+dnsking.ch
+mypi.co
+n4t.co
+001www.com
+ddnslive.com
+myiphost.com
+forumz.info
+16-b.it
+32-b.it
+64-b.it
+soundcast.me
+tcp4.me
+dnsup.net
+hicam.net
+now-dns.net
+ownip.net
+vpndns.net
+dynserv.org
+now-dns.org
+x443.pw
+now-dns.top
+ntdll.top
+freeddns.us
+crafting.xyz
+zapto.xyz
+
+// nsupdate.info : https://www.nsupdate.info/
+// Submitted by Thomas Waldmann <info@nsupdate.info>
+nsupdate.info
+nerdpol.ovh
+
+// No-IP.com : https://noip.com/
+// Submitted by Deven Reza <publicsuffixlist@noip.com>
+blogsyte.com
+brasilia.me
+cable-modem.org
+ciscofreak.com
+collegefan.org
+couchpotatofries.org
+damnserver.com
+ddns.me
+ditchyourip.com
+dnsfor.me
+dnsiskinky.com
+dvrcam.info
+dynns.com
+eating-organic.net
+fantasyleague.cc
+geekgalaxy.com
+golffan.us
+health-carereform.com
+homesecuritymac.com
+homesecuritypc.com
+hopto.me
+ilovecollege.info
+loginto.me
+mlbfan.org
+mmafan.biz
+myactivedirectory.com
+mydissent.net
+myeffect.net
+mymediapc.net
+mypsx.net
+mysecuritycamera.com
+mysecuritycamera.net
+mysecuritycamera.org
+net-freaks.com
+nflfan.org
+nhlfan.net
+no-ip.ca
+no-ip.co.uk
+no-ip.net
+noip.us
+onthewifi.com
+pgafan.net
+point2this.com
+pointto.us
+privatizehealthinsurance.net
+quicksytes.com
+read-books.org
+securitytactics.com
+serveexchange.com
+servehumour.com
+servep2p.com
+servesarcasm.com
+stufftoread.com
+ufcfan.org
+unusualperson.com
+workisboring.com
+3utilities.com
+bounceme.net
+ddns.net
+ddnsking.com
+gotdns.ch
+hopto.org
+myftp.biz
+myftp.org
+myvnc.com
+no-ip.biz
+no-ip.info
+no-ip.org
+noip.me
+redirectme.net
+servebeer.com
+serveblog.net
+servecounterstrike.com
+serveftp.com
+servegame.com
+servehalflife.com
+servehttp.com
+serveirc.com
+serveminecraft.net
+servemp3.com
+servepics.com
+servequake.com
+sytes.net
+webhop.me
+zapto.org
+
+// NodeArt : https://nodeart.io
+// Submitted by Konstantin Nosov <Nosov@nodeart.io>
+stage.nodeart.io
+
+// Nucleos Inc. : https://nucleos.com
+// Submitted by Piotr Zduniak <piotr@nucleos.com>
+pcloud.host
+
+// NYC.mn : http://www.information.nyc.mn
+// Submitted by Matthew Brown <mattbrown@nyc.mn>
+nyc.mn
+
+// Observable, Inc. : https://observablehq.com
+// Submitted by Mike Bostock <dns@observablehq.com>
+static.observableusercontent.com
+
+// Octopodal Solutions, LLC. : https://ulterius.io/
+// Submitted by Andrew Sampson <andrew@ulterius.io>
+cya.gg
+
+// OMG.LOL : <https://omg.lol>
+// Submitted by Adam Newbold <adam@omg.lol>
+omg.lol
+
+// Omnibond Systems, LLC. : https://www.omnibond.com
+// Submitted by Cole Estep <cole@omnibond.com>
+cloudycluster.net
+
+// OmniWe Limited: https://omniwe.com
+// Submitted by Vicary Archangel <vicary@omniwe.com>
+omniwe.site
+
+// One.com: https://www.one.com/
+// Submitted by Jacob Bunk Nielsen <jbn@one.com>
+123hjemmeside.dk
+123hjemmeside.no
+123homepage.it
+123kotisivu.fi
+123minsida.se
+123miweb.es
+123paginaweb.pt
+123sait.ru
+123siteweb.fr
+123webseite.at
+123webseite.de
+123website.be
+123website.ch
+123website.lu
+123website.nl
+service.one
+simplesite.com
+simplesite.com.br
+simplesite.gr
+simplesite.pl
+
+// One Fold Media : http://www.onefoldmedia.com/
+// Submitted by Eddie Jones <eddie@onefoldmedia.com>
+nid.io
+
+// Open Social : https://www.getopensocial.com/
+// Submitted by Alexander Varwijk <security@getopensocial.com>
+opensocial.site
+
+// OpenCraft GmbH : http://opencraft.com/
+// Submitted by Sven Marnach <sven@opencraft.com>
+opencraft.hosting
+
+// OpenResearch GmbH: https://openresearch.com/
+// Submitted by Philipp Schmid <ops@openresearch.com>
+orsites.com
+
+// Opera Software, A.S.A.
+// Submitted by Yngve Pettersen <yngve@opera.com>
+operaunite.com
+
+// Orange : https://www.orange.com
+// Submitted by Alexandre Linte <alexandre.linte@orange.com>
+tech.orange
+
+// Oursky Limited : https://authgear.com/, https://skygear.io/
+// Submitted by Authgear Team <hello@authgear.com>, Skygear Developer <hello@skygear.io>
+authgear-staging.com
+authgearapps.com
+skygearapp.com
+
+// OutSystems
+// Submitted by Duarte Santos <domain-admin@outsystemscloud.com>
+outsystemscloud.com
+
+// OVHcloud: https://ovhcloud.com
+// Submitted by Vincent Cassé <vincent.casse@ovhcloud.com>
+*.webpaas.ovh.net
+*.hosting.ovh.net
+
+// OwnProvider GmbH: http://www.ownprovider.com
+// Submitted by Jan Moennich <jan.moennich@ownprovider.com>
+ownprovider.com
+own.pm
+
+// OwO : https://whats-th.is/
+// Submitted by Dean Sheather <dean@deansheather.com>
+*.owo.codes
+
+// OX : http://www.ox.rs
+// Submitted by Adam Grand <webmaster@mail.ox.rs>
+ox.rs
+
+// oy.lc
+// Submitted by Charly Coste <changaco@changaco.oy.lc>
+oy.lc
+
+// Pagefog : https://pagefog.com/
+// Submitted by Derek Myers <derek@pagefog.com>
+pgfog.com
+
+// Pagefront : https://www.pagefronthq.com/
+// Submitted by Jason Kriss <jason@pagefronthq.com>
+pagefrontapp.com
+
+// PageXL : https://pagexl.com
+// Submitted by Yann Guichard <yann@pagexl.com>
+pagexl.com
+
+// Paywhirl, Inc : https://paywhirl.com/
+// Submitted by Daniel Netzer <dan@paywhirl.com>
+*.paywhirl.com
+
+// pcarrier.ca Software Inc: https://pcarrier.ca/
+// Submitted by Pierre Carrier <pc@rrier.ca>
+bar0.net
+bar1.net
+bar2.net
+rdv.to
+
+// .pl domains (grandfathered)
+art.pl
+gliwice.pl
+krakow.pl
+poznan.pl
+wroc.pl
+zakopane.pl
+
+// Pantheon Systems, Inc. : https://pantheon.io/
+// Submitted by Gary Dylina <gary@pantheon.io>
+pantheonsite.io
+gotpantheon.com
+
+// Peplink | Pepwave : http://peplink.com/
+// Submitted by Steve Leung <steveleung@peplink.com>
+mypep.link
+
+// Perspecta : https://perspecta.com/
+// Submitted by Kenneth Van Alstyne <kvanalstyne@perspecta.com>
+perspecta.cloud
+
+// PE Ulyanov Kirill Sergeevich : https://airy.host
+// Submitted by Kirill Ulyanov <k.ulyanov@airy.host>
+lk3.ru
+
+// Planet-Work : https://www.planet-work.com/
+// Submitted by Frédéric VANNIÈRE <f.vanniere@planet-work.com>
+on-web.fr
+
+// Platform.sh : https://platform.sh
+// Submitted by Nikola Kotur <nikola@platform.sh>
+bc.platform.sh
+ent.platform.sh
+eu.platform.sh
+us.platform.sh
+*.platformsh.site
+*.tst.site
+
+// Platter: https://platter.dev
+// Submitted by Patrick Flor <patrick@platter.dev>
+platter-app.com
+platter-app.dev
+platterp.us
+
+// Plesk : https://www.plesk.com/
+// Submitted by Anton Akhtyamov <program-managers@plesk.com>
+pdns.page
+plesk.page
+pleskns.com
+
+// Port53 : https://port53.io/
+// Submitted by Maximilian Schieder <maxi@zeug.co>
+dyn53.io
+
+// Porter : https://porter.run/
+// Submitted by Rudraksh MK <rudi@porter.run>
+onporter.run
+
+// Positive Codes Technology Company : http://co.bn/faq.html
+// Submitted by Zulfais <pc@co.bn>
+co.bn
+
+// Postman, Inc : https://postman.com
+// Submitted by Rahul Dhawan <security@postman.com>
+postman-echo.com
+pstmn.io
+mock.pstmn.io
+httpbin.org
+
+//prequalifyme.today : https://prequalifyme.today
+//Submitted by DeepakTiwari deepak@ivylead.io
+prequalifyme.today
+
+// prgmr.com : https://prgmr.com/
+// Submitted by Sarah Newman <owner@prgmr.com>
+xen.prgmr.com
+
+// priv.at : http://www.nic.priv.at/
+// Submitted by registry <lendl@nic.at>
+priv.at
+
+// privacytools.io : https://www.privacytools.io/
+// Submitted by Jonah Aragon <jonah@privacytools.io>
+prvcy.page
+
+// Protocol Labs : https://protocol.ai/
+// Submitted by Michael Burns <noc@protocol.ai>
+*.dweb.link
+
+// Protonet GmbH : http://protonet.io
+// Submitted by Martin Meier <admin@protonet.io>
+protonet.io
+
+// Publication Presse Communication SARL : https://ppcom.fr
+// Submitted by Yaacov Akiba Slama <admin@chirurgiens-dentistes-en-france.fr>
+chirurgiens-dentistes-en-france.fr
+byen.site
+
+// pubtls.org: https://www.pubtls.org
+// Submitted by Kor Nielsen <kor@pubtls.org>
+pubtls.org
+
+// PythonAnywhere LLP: https://www.pythonanywhere.com
+// Submitted by Giles Thomas <giles@pythonanywhere.com>
+pythonanywhere.com
+eu.pythonanywhere.com
+
+// QOTO, Org.
+// Submitted by Jeffrey Phillips Freeman <jeffrey.freeman@qoto.org>
+qoto.io
+
+// Qualifio : https://qualifio.com/
+// Submitted by Xavier De Cock <xdecock@gmail.com>
+qualifioapp.com
+
+// Quality Unit: https://qualityunit.com
+// Submitted by Vasyl Tsalko <vtsalko@qualityunit.com>
+ladesk.com
+
+// QuickBackend: https://www.quickbackend.com
+// Submitted by Dani Biro <dani@pymet.com>
+qbuser.com
+
+// Rad Web Hosting: https://radwebhosting.com
+// Submitted by Scott Claeys <s.claeys@radwebhosting.com>
+cloudsite.builders
+
+// Redgate Software: https://red-gate.com
+// Submitted by Andrew Farries <andrew.farries@red-gate.com>
+instances.spawn.cc
+
+// Redstar Consultants : https://www.redstarconsultants.com/
+// Submitted by Jons Slemmer <jons@redstarconsultants.com>
+instantcloud.cn
+
+// Russian Academy of Sciences
+// Submitted by Tech Support <support@rasnet.ru>
+ras.ru
+
+// QA2
+// Submitted by Daniel Dent (https://www.danieldent.com/)
+qa2.com
+
+// QCX
+// Submitted by Cassandra Beelen <cassandra@beelen.one>
+qcx.io
+*.sys.qcx.io
+
+// QNAP System Inc : https://www.qnap.com
+// Submitted by Nick Chang <nickchang@qnap.com>
+dev-myqnapcloud.com
+alpha-myqnapcloud.com
+myqnapcloud.com
+
+// Quip : https://quip.com
+// Submitted by Patrick Linehan <plinehan@quip.com>
+*.quipelements.com
+
+// Qutheory LLC : http://qutheory.io
+// Submitted by Jonas Schwartz <jonas@qutheory.io>
+vapor.cloud
+vaporcloud.io
+
+// Rackmaze LLC : https://www.rackmaze.com
+// Submitted by Kirill Pertsev <kika@rackmaze.com>
+rackmaze.com
+rackmaze.net
+
+// Rakuten Games, Inc : https://dev.viberplay.io
+// Submitted by Joshua Zhang <public-suffix@rgames.jp>
+g.vbrplsbx.io
+
+// Rancher Labs, Inc : https://rancher.com
+// Submitted by Vincent Fiduccia <domains@rancher.com>
+*.on-k3s.io
+*.on-rancher.cloud
+*.on-rio.io
+
+// Read The Docs, Inc : https://www.readthedocs.org
+// Submitted by David Fischer <team@readthedocs.org>
+readthedocs.io
+
+// Red Hat, Inc. OpenShift : https://openshift.redhat.com/
+// Submitted by Tim Kramer <tkramer@rhcloud.com>
+rhcloud.com
+
+// Render : https://render.com
+// Submitted by Anurag Goel <dev@render.com>
+app.render.com
+onrender.com
+
+// Repl.it : https://repl.it
+// Submitted by Lincoln Bergeson <lincoln@replit.com>
+firewalledreplit.co
+id.firewalledreplit.co
+repl.co
+id.repl.co
+repl.run
+
+// Resin.io : https://resin.io
+// Submitted by Tim Perry <tim@resin.io>
+resindevice.io
+devices.resinstaging.io
+
+// RethinkDB : https://www.rethinkdb.com/
+// Submitted by Chris Kastorff <info@rethinkdb.com>
+hzc.io
+
+// Revitalised Limited : http://www.revitalised.co.uk
+// Submitted by Jack Price <jack@revitalised.co.uk>
+wellbeingzone.eu
+wellbeingzone.co.uk
+
+// Rico Developments Limited : https://adimo.co
+// Submitted by Colin Brown <hello@adimo.co>
+adimo.co.uk
+
+// Riseup Networks : https://riseup.net
+// Submitted by Micah Anderson <micah@riseup.net>
+itcouldbewor.se
+
+// Rochester Institute of Technology : http://www.rit.edu/
+// Submitted by Jennifer Herting <jchits@rit.edu>
+git-pages.rit.edu
+
+// Rocky Enterprise Software Foundation : https://resf.org
+// Submitted by Neil Hanlon <neil@resf.org>
+rocky.page
+
+// Rusnames Limited: http://rusnames.ru/
+// Submitted by Sergey Zotov <admin@rusnames.ru>
+биз.рус
+ком.рус
+крым.рус
+мир.рус
+мск.рус
+орг.рус
+самара.рус
+сочи.рус
+спб.рус
+я.рус
+
+// SAKURA Internet Inc. : https://www.sakura.ad.jp/
+// Submitted by Internet Service Department <rs-vendor-ml@sakura.ad.jp>
+180r.com
+dojin.com
+sakuratan.com
+sakuraweb.com
+x0.com
+2-d.jp
+bona.jp
+crap.jp
+daynight.jp
+eek.jp
+flop.jp
+halfmoon.jp
+jeez.jp
+matrix.jp
+mimoza.jp
+ivory.ne.jp
+mail-box.ne.jp
+mints.ne.jp
+mokuren.ne.jp
+opal.ne.jp
+sakura.ne.jp
+sumomo.ne.jp
+topaz.ne.jp
+netgamers.jp
+nyanta.jp
+o0o0.jp
+rdy.jp
+rgr.jp
+rulez.jp
+s3.isk01.sakurastorage.jp
+s3.isk02.sakurastorage.jp
+saloon.jp
+sblo.jp
+skr.jp
+tank.jp
+uh-oh.jp
+undo.jp
+rs.webaccel.jp
+user.webaccel.jp
+websozai.jp
+xii.jp
+squares.net
+jpn.org
+kirara.st
+x0.to
+from.tv
+sakura.tv
+
+// Salesforce.com, Inc. https://salesforce.com/
+// Submitted by Michael Biven <mbiven@salesforce.com>
+*.builder.code.com
+*.dev-builder.code.com
+*.stg-builder.code.com
+
+// Sandstorm Development Group, Inc. : https://sandcats.io/
+// Submitted by Asheesh Laroia <asheesh@sandstorm.io>
+sandcats.io
+
+// SBE network solutions GmbH : https://www.sbe.de/
+// Submitted by Norman Meilick <nm@sbe.de>
+logoip.de
+logoip.com
+
+// Scaleway : https://www.scaleway.com/
+// Submitted by Rémy Léone <rleone@scaleway.com>
+fr-par-1.baremetal.scw.cloud
+fr-par-2.baremetal.scw.cloud
+nl-ams-1.baremetal.scw.cloud
+fnc.fr-par.scw.cloud
+functions.fnc.fr-par.scw.cloud
+k8s.fr-par.scw.cloud
+nodes.k8s.fr-par.scw.cloud
+s3.fr-par.scw.cloud
+s3-website.fr-par.scw.cloud
+whm.fr-par.scw.cloud
+priv.instances.scw.cloud
+pub.instances.scw.cloud
+k8s.scw.cloud
+k8s.nl-ams.scw.cloud
+nodes.k8s.nl-ams.scw.cloud
+s3.nl-ams.scw.cloud
+s3-website.nl-ams.scw.cloud
+whm.nl-ams.scw.cloud
+k8s.pl-waw.scw.cloud
+nodes.k8s.pl-waw.scw.cloud
+s3.pl-waw.scw.cloud
+s3-website.pl-waw.scw.cloud
+scalebook.scw.cloud
+smartlabeling.scw.cloud
+dedibox.fr
+
+// schokokeks.org GbR : https://schokokeks.org/
+// Submitted by Hanno Böck <hanno@schokokeks.org>
+schokokeks.net
+
+// Scottish Government: https://www.gov.scot
+// Submitted by Martin Ellis <martin.ellis@gov.scot>
+gov.scot
+service.gov.scot
+
+// Scry Security : http://www.scrysec.com
+// Submitted by Shante Adam <shante@skyhat.io>
+scrysec.com
+
+// Securepoint GmbH : https://www.securepoint.de
+// Submitted by Erik Anders <erik.anders@securepoint.de>
+firewall-gateway.com
+firewall-gateway.de
+my-gateway.de
+my-router.de
+spdns.de
+spdns.eu
+firewall-gateway.net
+my-firewall.org
+myfirewall.org
+spdns.org
+
+// Seidat : https://www.seidat.com
+// Submitted by Artem Kondratev <accounts@seidat.com>
+seidat.net
+
+// Sellfy : https://sellfy.com
+// Submitted by Yuriy Romadin <contact@sellfy.com>
+sellfy.store
+
+// Senseering GmbH : https://www.senseering.de
+// Submitted by Felix Mönckemeyer <f.moenckemeyer@senseering.de>
+senseering.net
+
+// Sendmsg: https://www.sendmsg.co.il
+// Submitted by Assaf Stern <domains@comstar.co.il>
+minisite.ms
+
+// Service Magnet : https://myservicemagnet.com
+// Submitted by Dave Sanders <dave@myservicemagnet.com>
+magnet.page
+
+// Service Online LLC : http://drs.ua/
+// Submitted by Serhii Bulakh <support@drs.ua>
+biz.ua
+co.ua
+pp.ua
+
+// Shift Crypto AG : https://shiftcrypto.ch
+// Submitted by alex <alex@shiftcrypto.ch>
+shiftcrypto.dev
+shiftcrypto.io
+
+// ShiftEdit : https://shiftedit.net/
+// Submitted by Adam Jimenez <adam@shiftcreate.com>
+shiftedit.io
+
+// Shopblocks : http://www.shopblocks.com/
+// Submitted by Alex Bowers <alex@shopblocks.com>
+myshopblocks.com
+
+// Shopify : https://www.shopify.com
+// Submitted by Alex Richter <alex.richter@shopify.com>
+myshopify.com
+
+// Shopit : https://www.shopitcommerce.com/
+// Submitted by Craig McMahon <craig@shopitcommerce.com>
+shopitsite.com
+
+// shopware AG : https://shopware.com
+// Submitted by Jens Küper <cloud@shopware.com>
+shopware.store
+
+// Siemens Mobility GmbH
+// Submitted by Oliver Graebner <security@mo-siemens.io>
+mo-siemens.io
+
+// SinaAppEngine : http://sae.sina.com.cn/
+// Submitted by SinaAppEngine <saesupport@sinacloud.com>
+1kapp.com
+appchizi.com
+applinzi.com
+sinaapp.com
+vipsinaapp.com
+
+// Siteleaf : https://www.siteleaf.com/
+// Submitted by Skylar Challand <support@siteleaf.com>
+siteleaf.net
+
+// Skyhat : http://www.skyhat.io
+// Submitted by Shante Adam <shante@skyhat.io>
+bounty-full.com
+alpha.bounty-full.com
+beta.bounty-full.com
+
+// Smallregistry by Promopixel SARL: https://www.smallregistry.net
+// Former AFNIC's SLDs
+// Submitted by Jérôme Lipowicz <support@promopixel.com>
+aeroport.fr
+avocat.fr
+chambagri.fr
+chirurgiens-dentistes.fr
+experts-comptables.fr
+medecin.fr
+notaires.fr
+pharmacien.fr
+port.fr
+veterinaire.fr
+
+// Small Technology Foundation : https://small-tech.org
+// Submitted by Aral Balkan <aral@small-tech.org>
+small-web.org
+
+// Smoove.io : https://www.smoove.io/
+// Submitted by Dan Kozak <dan@smoove.io>
+vp4.me
+
+// Snowflake Inc : https://www.snowflake.com/
+// Submitted by Faith Olapade <faith.olapade@snowflake.com>
+snowflake.app
+privatelink.snowflake.app
+streamlit.app
+streamlitapp.com
+
+// Snowplow Analytics : https://snowplowanalytics.com/
+// Submitted by Ian Streeter <ian@snowplowanalytics.com>
+try-snowplow.com
+
+// SourceHut : https://sourcehut.org
+// Submitted by Drew DeVault <sir@cmpwn.com>
+srht.site
+
+// Stackhero : https://www.stackhero.io
+// Submitted by Adrien Gillon <adrien+public-suffix-list@stackhero.io>
+stackhero-network.com
+
+// Staclar : https://staclar.com
+// Submitted by Q Misell <q@staclar.com>
+musician.io
+// Submitted by Matthias Merkel <matthias.merkel@staclar.com>
+novecore.site
+
+// staticland : https://static.land
+// Submitted by Seth Vincent <sethvincent@gmail.com>
+static.land
+dev.static.land
+sites.static.land
+
+// Storebase : https://www.storebase.io
+// Submitted by Tony Schirmer <tony@storebase.io>
+storebase.store
+
+// Strategic System Consulting (eApps Hosting): https://www.eapps.com/
+// Submitted by Alex Oancea <aoancea@cloudscale365.com>
+vps-host.net
+atl.jelastic.vps-host.net
+njs.jelastic.vps-host.net
+ric.jelastic.vps-host.net
+
+// Sony Interactive Entertainment LLC : https://sie.com/
+// Submitted by David Coles <david.coles@sony.com>
+playstation-cloud.com
+
+// SourceLair PC : https://www.sourcelair.com
+// Submitted by Antonis Kalipetis <akalipetis@sourcelair.com>
+apps.lair.io
+*.stolos.io
+
+// SpaceKit : https://www.spacekit.io/
+// Submitted by Reza Akhavan <spacekit.io@gmail.com>
+spacekit.io
+
+// SpeedPartner GmbH: https://www.speedpartner.de/
+// Submitted by Stefan Neufeind <info@speedpartner.de>
+customer.speedpartner.de
+
+// Spreadshop (sprd.net AG) : https://www.spreadshop.com/
+// Submitted by Martin Breest <security@spreadshop.com>
+myspreadshop.at
+myspreadshop.com.au
+myspreadshop.be
+myspreadshop.ca
+myspreadshop.ch
+myspreadshop.com
+myspreadshop.de
+myspreadshop.dk
+myspreadshop.es
+myspreadshop.fi
+myspreadshop.fr
+myspreadshop.ie
+myspreadshop.it
+myspreadshop.net
+myspreadshop.nl
+myspreadshop.no
+myspreadshop.pl
+myspreadshop.se
+myspreadshop.co.uk
+
+// Standard Library : https://stdlib.com
+// Submitted by Jacob Lee <jacob@stdlib.com>
+api.stdlib.com
+
+// Storipress : https://storipress.com
+// Submitted by Benno Liu <benno@storipress.com>
+storipress.app
+
+// Storj Labs Inc. : https://storj.io/
+// Submitted by Philip Hutchins <hostmaster@storj.io>
+storj.farm
+
+// Studenten Net Twente : http://www.snt.utwente.nl/
+// Submitted by Silke Hofstra <syscom@snt.utwente.nl>
+utwente.io
+
+// Student-Run Computing Facility : https://www.srcf.net/
+// Submitted by Edwin Balani <sysadmins@srcf.net>
+soc.srcf.net
+user.srcf.net
+
+// Sub 6 Limited: http://www.sub6.com
+// Submitted by Dan Miller <dm@sub6.com>
+temp-dns.com
+
+// Supabase : https://supabase.io
+// Submitted by Inian Parameshwaran <security@supabase.io>
+supabase.co
+supabase.in
+supabase.net
+su.paba.se
+
+// Symfony, SAS : https://symfony.com/
+// Submitted by Fabien Potencier <fabien@symfony.com>
+*.s5y.io
+*.sensiosite.cloud
+
+// Syncloud : https://syncloud.org
+// Submitted by Boris Rybalkin <syncloud@syncloud.it>
+syncloud.it
+
+// Synology, Inc. : https://www.synology.com/
+// Submitted by Rony Weng <ronyweng@synology.com>
+dscloud.biz
+direct.quickconnect.cn
+dsmynas.com
+familyds.com
+diskstation.me
+dscloud.me
+i234.me
+myds.me
+synology.me
+dscloud.mobi
+dsmynas.net
+familyds.net
+dsmynas.org
+familyds.org
+vpnplus.to
+direct.quickconnect.to
+
+// Tabit Technologies Ltd. : https://tabit.cloud/
+// Submitted by Oren Agiv <oren@tabit.cloud>
+tabitorder.co.il
+mytabit.co.il
+mytabit.com
+
+// TAIFUN Software AG : http://taifun-software.de
+// Submitted by Bjoern Henke <dev-server@taifun-software.de>
+taifun-dns.de
+
+// Tailscale Inc. : https://www.tailscale.com
+// Submitted by David Anderson <danderson@tailscale.com>
+beta.tailscale.net
+ts.net
+
+// TASK geographical domains (www.task.gda.pl/uslugi/dns)
+gda.pl
+gdansk.pl
+gdynia.pl
+med.pl
+sopot.pl
+
+// team.blue https://team.blue
+// Submitted by Cedric Dubois <cedric.dubois@team.blue>
+site.tb-hosting.com
+
+// Teckids e.V. : https://www.teckids.org
+// Submitted by Dominik George <dominik.george@teckids.org>
+edugit.io
+s3.teckids.org
+
+// Telebit : https://telebit.cloud
+// Submitted by AJ ONeal <aj@telebit.cloud>
+telebit.app
+telebit.io
+*.telebit.xyz
+
+// Thingdust AG : https://thingdust.com/
+// Submitted by Adrian Imboden <adi@thingdust.com>
+*.firenet.ch
+*.svc.firenet.ch
+reservd.com
+thingdustdata.com
+cust.dev.thingdust.io
+cust.disrec.thingdust.io
+cust.prod.thingdust.io
+cust.testing.thingdust.io
+reservd.dev.thingdust.io
+reservd.disrec.thingdust.io
+reservd.testing.thingdust.io
+
+// ticket i/O GmbH : https://ticket.io
+// Submitted by Christian Franke <it@ticket.io>
+tickets.io
+
+// Tlon.io : https://tlon.io
+// Submitted by Mark Staarink <mark@tlon.io>
+arvo.network
+azimuth.network
+tlon.network
+
+// Tor Project, Inc. : https://torproject.org
+// Submitted by Antoine Beaupré <anarcat@torproject.org
+torproject.net
+pages.torproject.net
+
+// TownNews.com : http://www.townnews.com
+// Submitted by Dustin Ward <dward@townnews.com>
+bloxcms.com
+townnews-staging.com
+
+// TrafficPlex GmbH : https://www.trafficplex.de/
+// Submitted by Phillipp Röll <phillipp.roell@trafficplex.de>
+12hp.at
+2ix.at
+4lima.at
+lima-city.at
+12hp.ch
+2ix.ch
+4lima.ch
+lima-city.ch
+trafficplex.cloud
+de.cool
+12hp.de
+2ix.de
+4lima.de
+lima-city.de
+1337.pictures
+clan.rip
+lima-city.rocks
+webspace.rocks
+lima.zone
+
+// TransIP : https://www.transip.nl
+// Submitted by Rory Breuk <rbreuk@transip.nl>
+*.transurl.be
+*.transurl.eu
+*.transurl.nl
+
+// TransIP: https://www.transip.nl
+// Submitted by Cedric Dubois <cedric.dubois@team.blue>
+site.transip.me
+
+// TuxFamily : http://tuxfamily.org
+// Submitted by TuxFamily administrators <adm@staff.tuxfamily.org>
+tuxfamily.org
+
+// TwoDNS : https://www.twodns.de/
+// Submitted by TwoDNS-Support <support@two-dns.de>
+dd-dns.de
+diskstation.eu
+diskstation.org
+dray-dns.de
+draydns.de
+dyn-vpn.de
+dynvpn.de
+mein-vigor.de
+my-vigor.de
+my-wan.de
+syno-ds.de
+synology-diskstation.de
+synology-ds.de
+
+// Typedream : https://typedream.com
+// Submitted by Putri Karunia <putri@typedream.com>
+typedream.app
+
+// Typeform : https://www.typeform.com
+// Submitted by Sergi Ferriz <sergi.ferriz@typeform.com>
+pro.typeform.com
+
+// Uberspace : https://uberspace.de
+// Submitted by Moritz Werner <mwerner@jonaspasche.com>
+uber.space
+*.uberspace.de
+
+// UDR Limited : http://www.udr.hk.com
+// Submitted by registry <hostmaster@udr.hk.com>
+hk.com
+hk.org
+ltd.hk
+inc.hk
+
+// UK Intis Telecom LTD : https://it.com
+// Submitted by ITComdomains <to@it.com>
+it.com
+
+// UNIVERSAL DOMAIN REGISTRY : https://www.udr.org.yt/
+// see also: whois -h whois.udr.org.yt help
+// Submitted by Atanunu Igbunuroghene <publicsuffixlist@udr.org.yt>
+name.pm
+sch.tf
+biz.wf
+sch.wf
+org.yt
+
+// United Gameserver GmbH : https://united-gameserver.de
+// Submitted by Stefan Schwarz <sysadm@united-gameserver.de>
+virtualuser.de
+virtual-user.de
+
+// Upli : https://upli.io
+// Submitted by Lenny Bakkalian <lenny.bakkalian@gmail.com>
+upli.io
+
+// urown.net : https://urown.net
+// Submitted by Hostmaster <hostmaster@urown.net>
+urown.cloud
+dnsupdate.info
+
+// .US
+// Submitted by Ed Moore <Ed.Moore@lib.de.us>
+lib.de.us
+
+// VeryPositive SIA : http://very.lv
+// Submitted by Danko Aleksejevs <danko@very.lv>
+2038.io
+
+// Vercel, Inc : https://vercel.com/
+// Submitted by Connor Davis <security@vercel.com>
+vercel.app
+vercel.dev
+now.sh
+
+// Viprinet Europe GmbH : http://www.viprinet.com
+// Submitted by Simon Kissel <hostmaster@viprinet.com>
+router.management
+
+// Virtual-Info : https://www.virtual-info.info/
+// Submitted by Adnan RIHAN <hostmaster@v-info.info>
+v-info.info
+
+// Voorloper.com: https://voorloper.com
+// Submitted by Nathan van Bakel <info@voorloper.com>
+voorloper.cloud
+
+// Voxel.sh DNS : https://voxel.sh/dns/
+// Submitted by Mia Rehlinger <dns@voxel.sh>
+neko.am
+nyaa.am
+be.ax
+cat.ax
+es.ax
+eu.ax
+gg.ax
+mc.ax
+us.ax
+xy.ax
+nl.ci
+xx.gl
+app.gp
+blog.gt
+de.gt
+to.gt
+be.gy
+cc.hn
+blog.kg
+io.kg
+jp.kg
+tv.kg
+uk.kg
+us.kg
+de.ls
+at.md
+de.md
+jp.md
+to.md
+indie.porn
+vxl.sh
+ch.tc
+me.tc
+we.tc
+nyan.to
+at.vg
+blog.vu
+dev.vu
+me.vu
+
+// V.UA Domain Administrator : https://domain.v.ua/
+// Submitted by Serhii Rostilo <sergey@rostilo.kiev.ua>
+v.ua
+
+// Vultr Objects : https://www.vultr.com/products/object-storage/
+// Submitted by Niels Maumenee <storage@vultr.com>
+*.vultrobjects.com
+
+// Waffle Computer Inc., Ltd. : https://docs.waffleinfo.com
+// Submitted by Masayuki Note <masa@blade.wafflecell.com>
+wafflecell.com
+
+// WebHare bv: https://www.webhare.com/
+// Submitted by Arnold Hendriks <info@webhare.com>
+*.webhare.dev
+
+// WebHotelier Technologies Ltd: https://www.webhotelier.net/
+// Submitted by Apostolos Tsakpinis <apostolos.tsakpinis@gmail.com>
+reserve-online.net
+reserve-online.com
+bookonline.app
+hotelwithflight.com
+
+// WeDeploy by Liferay, Inc. : https://www.wedeploy.com
+// Submitted by Henrique Vicente <security@wedeploy.com>
+wedeploy.io
+wedeploy.me
+wedeploy.sh
+
+// Western Digital Technologies, Inc : https://www.wdc.com
+// Submitted by Jung Jin <jungseok.jin@wdc.com>
+remotewd.com
+
+// WIARD Enterprises : https://wiardweb.com
+// Submitted by Kidd Hustle <kiddhustle@wiardweb.com>
+pages.wiardweb.com
+
+// Wikimedia Labs : https://wikitech.wikimedia.org
+// Submitted by Arturo Borrero Gonzalez <aborrero@wikimedia.org>
+wmflabs.org
+toolforge.org
+wmcloud.org
+
+// WISP : https://wisp.gg
+// Submitted by Stepan Fedotov <stepan@wisp.gg>
+panel.gg
+daemon.panel.gg
+
+// Wizard Zines : https://wizardzines.com
+// Submitted by Julia Evans <julia@wizardzines.com>
+messwithdns.com
+
+// WoltLab GmbH : https://www.woltlab.com
+// Submitted by Tim Düsterhus <security@woltlab.cloud>
+woltlab-demo.com
+myforum.community
+community-pro.de
+diskussionsbereich.de
+community-pro.net
+meinforum.net
+
+// Woods Valldata : https://www.woodsvalldata.co.uk/
+// Submitted by Chris Whittle <chris.whittle@woodsvalldata.co.uk>
+affinitylottery.org.uk
+raffleentry.org.uk
+weeklylottery.org.uk
+
+// WP Engine : https://wpengine.com/
+// Submitted by Michael Smith <michael.smith@wpengine.com>
+// Submitted by Brandon DuRette <brandon.durette@wpengine.com>
+wpenginepowered.com
+js.wpenginepowered.com
+
+// Wix.com, Inc. : https://www.wix.com
+// Submitted by Shahar Talmi <shahar@wix.com>
+wixsite.com
+editorx.io
+wixstudio.io
+wix.run
+
+// XenonCloud GbR: https://xenoncloud.net
+// Submitted by Julian Uphoff <publicsuffixlist@xenoncloud.net>
+half.host
+
+// XnBay Technology : http://www.xnbay.com/
+// Submitted by XnBay Developer <developer.xncloud@gmail.com>
+xnbay.com
+u2.xnbay.com
+u2-local.xnbay.com
+
+// XS4ALL Internet bv : https://www.xs4all.nl/
+// Submitted by Daniel Mostertman <unixbeheer+publicsuffix@xs4all.net>
+cistron.nl
+demon.nl
+xs4all.space
+
+// Yandex.Cloud LLC: https://cloud.yandex.com
+// Submitted by Alexander Lodin <security+psl@yandex-team.ru>
+yandexcloud.net
+storage.yandexcloud.net
+website.yandexcloud.net
+
+// YesCourse Pty Ltd : https://yescourse.com
+// Submitted by Atul Bhouraskar <atul@yescourse.com>
+official.academy
+
+// Yola : https://www.yola.com/
+// Submitted by Stefano Rivera <stefano@yola.com>
+yolasite.com
+
+// Yombo : https://yombo.net
+// Submitted by Mitch Schwenk <mitch@yombo.net>
+ybo.faith
+yombo.me
+homelink.one
+ybo.party
+ybo.review
+ybo.science
+ybo.trade
+
+// Yunohost : https://yunohost.org
+// Submitted by Valentin Grimaud <security@yunohost.org>
+ynh.fr
+nohost.me
+noho.st
+
+// ZaNiC : http://www.za.net/
+// Submitted by registry <hostmaster@nic.za.net>
+za.net
+za.org
+
+// Zine EOOD : https://zine.bg/
+// Submitted by Martin Angelov <martin@zine.bg>
+bss.design
+
+// Zitcom A/S : https://www.zitcom.dk
+// Submitted by Emil Stahl <esp@zitcom.dk>
+basicserver.io
+virtualserver.io
+enterprisecloud.nu
+
+// ===END PRIVATE DOMAINS===
diff --git a/uAssets/thirdparties/urlhaus-filter/LICENSE.md b/uAssets/thirdparties/urlhaus-filter/LICENSE.md
new file mode 100644
index 0000000..b81428e
--- /dev/null
+++ b/uAssets/thirdparties/urlhaus-filter/LICENSE.md
@@ -0,0 +1,42 @@
+CC0 1.0 Universal
+==================
+
+Statement of Purpose
+---------------------
+
+The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.
+
+For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.
+
+1. Copyright and Related Rights.
+--------------------------------
+A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:
+
+i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;
+ii. moral rights retained by the original author(s) and/or performer(s);
+iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;
+iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;
+v. rights protecting the extraction, dissemination, use and reuse of data in a Work;
+vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and
+vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.
+
+2. Waiver.
+-----------
+To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback.
+----------------------------
+Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+--------------------------------
+
+a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.
+b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.
+c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.
+d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.
+
+For more information, please see
+https://creativecommons.org/publicdomain/zero/1.0/ \ No newline at end of file
diff --git a/uAssets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt b/uAssets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt
new file mode 100644
index 0000000..af2609a
--- /dev/null
+++ b/uAssets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt
@@ -0,0 +1,1820 @@
+! Title: Online Malicious URL Blocklist
+! Updated: 2024-01-21T00:08:40Z
+! Expires: 1 day (update frequency)
+! Homepage: https://gitlab.com/malware-filter/urlhaus-filter
+! License: https://gitlab.com/malware-filter/urlhaus-filter#license
+! Source: https://urlhaus.abuse.ch/api/
+1.232.65.33
+1.41.113.39
+1.70.81.147
+1.70.86.129
+1.94.97.137
+100.2.73.74
+100.37.147.20
+100.38.45.134
+101.42.164.92
+101.51.121.206
+101.58.147.54
+101.58.80.116
+101.58.83.134
+102.66.22.215
+103.125.163.10
+103.133.214.139
+103.155.81.228
+103.164.200.170
+103.171.0.200
+103.180.149.62
+103.186.67.227
+103.195.141.241
+103.230.153.181
+103.245.236.146
+103.28.32.56
+103.4.117.26
+103.43.7.94
+103.67.196.50
+103.68.85.20
+103.81.24.84
+103.82.211.164
+103.84.37.101
+103.85.95.5
+104.168.5.4
+104.183.208.237
+104.37.185.125
+106.1.1.207
+106.104.169.205
+106.104.193.155
+106.110.215.242
+106.246.224.219
+107.135.46.249
+107.175.113.207
+107.175.243.133
+107.185.9.221
+108.190.201.37
+108.190.56.144
+108.191.87.108
+108.2.158.69
+108.21.247.248
+108.27.217.242
+108.46.196.185
+108.53.211.27
+108.58.113.114
+108.6.184.196
+109.107.182.3
+109.107.182.40
+109.111.184.77
+109.125.133.101
+109.127.90.14
+109.128.33.208
+109.168.144.26
+109.235.189.104
+109.92.181.49
+109.92.28.89
+109.96.180.132
+110.130.187.146
+110.135.20.127
+110.180.137.97
+110.181.232.32
+110.182.161.175
+110.182.175.67
+110.182.224.217
+110.183.58.139
+110.44.200.155
+110.44.202.120
+111.185.124.170
+111.185.126.251
+111.185.126.26
+111.185.127.181
+111.185.23.84
+111.185.24.110
+111.185.50.27
+111.185.63.165
+111.61.103.93
+111.70.20.43
+111.70.20.97
+111.70.30.157
+111.70.31.10
+111.70.31.11
+111.70.31.17
+111.70.31.22
+111.90.151.233
+112.135.200.199
+112.145.210.253
+112.164.53.158
+112.165.60.196
+112.237.230.116
+112.242.94.0
+112.248.107.108
+112.248.113.202
+112.248.114.35
+112.248.190.27
+112.248.80.151
+113.106.167.11
+113.214.56.228
+113.214.56.231
+113.214.56.232
+113.214.56.234
+113.214.56.235
+113.221.72.175
+113.221.72.245
+113.24.167.144
+113.25.129.21
+113.26.211.110
+113.26.214.143
+113.26.51.240
+113.61.2.23
+114.218.96.128
+114.227.34.163
+114.230.90.93
+114.239.90.137
+114.67.217.170
+115.165.209.73
+115.40.65.61
+115.49.106.119
+115.49.5.101
+115.50.102.195
+115.55.228.81
+115.55.233.40
+115.55.244.127
+115.55.248.99
+115.55.252.93
+115.55.53.62
+115.56.181.106
+115.58.132.235
+115.58.93.82
+115.59.77.10
+115.61.9.141
+115.63.58.138
+115.78.234.227
+115.90.181.102
+115.94.9.181
+115.98.19.129
+116.102.161.23
+117.218.245.23
+117.91.247.142
+118.107.43.171
+118.232.124.33
+118.232.129.74
+118.232.130.189
+118.232.194.140
+118.232.241.198
+118.233.242.3
+118.233.243.14
+118.32.38.88
+118.37.144.151
+118.37.162.141
+118.40.218.253
+118.87.22.247
+118.88.39.150
+118.91.54.34
+119.178.216.67
+119.179.215.50
+119.179.237.53
+119.179.240.88
+119.179.252.218
+119.183.30.184
+119.185.178.156
+119.186.206.212
+119.186.208.192
+119.192.213.113
+119.197.163.57
+119.203.151.14
+120.211.103.229
+120.79.154.38
+120.88.126.204
+121.132.162.245
+121.140.198.125
+121.141.103.21
+121.144.52.82
+121.147.74.158
+121.148.219.111
+121.164.154.240
+121.166.181.62
+121.169.114.247
+121.174.49.204
+121.190.90.250
+121.202.206.129
+121.231.200.164
+121.234.151.120
+121.254.113.14
+121.254.76.192
+121.37.198.25
+121.4.59.117
+122.100.175.200
+122.100.234.101
+122.165.55.223
+122.99.49.168
+123.0.226.180
+123.11.145.247
+123.110.124.238
+123.110.124.244
+123.110.151.230
+123.110.182.187
+123.110.19.248
+123.110.204.243
+123.110.71.1
+123.12.236.199
+123.129.128.197
+123.14.209.218
+123.173.4.189
+123.175.71.201
+123.193.21.48
+123.194.35.146
+123.194.60.238
+123.195.134.206
+123.195.161.7
+123.195.197.10
+123.195.56.180
+123.240.103.89
+123.240.143.236
+123.240.227.189
+123.240.246.124
+123.240.46.61
+123.240.7.168
+123.241.11.41
+123.241.148.58
+123.241.185.58
+123.241.210.96
+123.241.214.157
+123.241.57.252
+123.241.64.38
+123.241.72.120
+123.249.25.73
+123.9.195.14
+124.106.33.31
+124.131.105.104
+124.153.20.102
+124.194.46.204
+124.218.226.149
+124.234.157.195
+124.234.157.243
+124.234.243.28
+124.234.246.156
+124.235.252.83
+124.6.14.122
+124.80.222.61
+125.132.252.13
+125.136.171.66
+125.136.208.156
+125.209.71.6
+125.4.18.139
+125.40.113.65
+125.44.215.206
+125.44.36.74
+125.47.95.201
+128.92.210.156
+129.122.98.12
+130.255.159.133
+134.122.184.3
+134.122.184.37
+134.65.48.134
+139.47.12.16
+14.100.66.178
+14.173.103.187
+14.193.33.175
+14.41.41.251
+141.98.10.47
+141.98.90.28
+142.112.34.58
+144.129.13.190
+145.255.30.170
+146.19.191.200
+149.106.157.134
+149.255.35.132
+15.204.49.148
+150.117.7.70
+150.221.43.86
+151.240.193.184
+152.160.185.29
+154.126.178.16
+154.91.227.10
+154.92.16.100
+158.180.47.184
+158.255.82.115
+158.255.82.128
+158.255.82.157
+158.255.82.218
+158.255.82.235
+158.255.82.238
+158.255.82.247
+162.199.220.67
+162.209.98.174
+162.250.123.61
+163.142.89.174
+163.47.209.166
+164.155.231.101
+171.231.112.173
+171.240.70.148
+1717.1000uc.com
+172.105.29.23
+172.115.66.80
+172.245.208.28
+173.235.253.239
+173.30.118.52
+173.56.85.8
+173.77.221.139
+174.83.125.86
+175.211.148.96
+175.213.246.140
+175.30.111.194
+175.30.76.197
+176.113.115.213
+176.124.161.240
+176.124.192.196
+176.32.38.205
+176.97.210.240
+177.71.62.53
+178.131.101.80
+178.131.104.3
+178.131.105.119
+178.131.64.145
+178.131.84.65
+178.151.143.2
+178.173.39.201
+178.19.183.14
+178.219.38.228
+178.34.177.78
+178.48.47.124
+178.75.6.127
+180.107.222.222
+180.116.171.85
+180.117.195.141
+180.176.180.12
+180.176.41.131
+180.177.105.202
+180.177.105.243
+180.177.214.181
+180.214.189.213
+180.218.166.63
+180.218.212.209
+180.218.230.159
+180.218.6.191
+180.35.174.54
+180.72.148.38
+181.129.100.122
+181.13.133.18
+181.204.212.82
+181.224.242.131
+181.49.47.190
+182.113.35.92
+182.117.171.39
+182.119.226.192
+182.121.14.232
+182.121.192.98
+182.121.64.26
+182.126.84.28
+182.127.114.250
+182.127.152.85
+182.127.155.188
+182.155.225.229
+182.155.80.34
+182.18.235.96
+182.216.221.251
+182.235.147.107
+182.253.205.235
+182.52.51.239
+183.109.146.238
+183.96.87.29
+183.98.70.16
+185.109.113.198
+185.12.78.161
+185.141.78.161
+185.16.38.38
+185.161.208.234
+185.161.248.185
+185.161.248.78
+185.172.128.109
+185.172.128.11
+185.172.128.113
+185.172.128.121
+185.172.128.154
+185.172.128.160
+185.172.128.19
+185.172.128.24
+185.172.128.32
+185.172.128.53
+185.172.128.79
+185.172.128.8
+185.196.10.146
+185.215.113.204
+185.215.113.66
+185.215.113.68
+185.215.113.84
+185.216.133.16
+185.221.3.244
+185.224.128.187
+185.81.157.123
+185.81.157.150
+185.81.157.213
+185.81.157.24
+185.81.157.244
+186.96.209.159
+186.96.210.173
+187.189.56.33
+187.2.27.108
+187.250.57.67
+188.138.190.184
+188.150.231.39
+188.158.121.3
+188.217.112.189
+188.26.203.32
+188.65.41.210
+189.29.8.11
+190.12.99.194
+190.144.138.246
+190.144.235.237
+190.15.176.254
+190.57.183.186
+190.98.37.200
+192.254.204.95
+193.117.208.148
+193.142.147.59
+193.176.31.152
+193.233.132.117
+193.233.132.15
+193.25.5.252
+193.3.19.114
+194.145.227.21
+194.152.35.139
+194.208.56.60
+194.247.33.52
+194.3.177.220
+194.33.191.102
+194.33.191.248
+194.38.23.2
+194.90.129.193
+195.144.235.42
+195.158.95.85
+195.20.16.153
+195.20.16.211
+195.22.237.98
+195.223.19.229
+195.24.153.74
+195.64.169.119
+195.82.103.83
+196.210.93.161
+196.218.64.83
+196.221.148.92
+197.210.197.185
+197.44.210.17
+197.44.40.12
+198.12.81.138
+1ecosolution.it
+2.136.83.131
+2.155.31.122
+2.179.179.159
+2.180.35.231
+2.180.9.57
+2.181.0.146
+2.181.0.20
+2.181.0.61
+2.184.54.225
+2.187.36.184
+2.225.20.46
+2.238.73.213
+2.36.19.125
+2.36.68.156
+20.169.49.77
+200.59.107.13
+200.59.72.210
+200.59.77.135
+200.59.79.204
+200.59.80.63
+200.59.85.167
+200.6.167.101
+200.69.57.195
+200.69.62.153
+200.69.62.205
+200.81.127.208
+200.81.162.118
+201.20.122.114
+201.221.109.20
+202.166.220.109
+202.4.124.58
+202.51.181.238
+202.79.169.52
+202.79.172.107
+202.79.172.110
+202.79.172.222
+202.79.172.93
+203.111.213.210
+203.122.41.174
+203.204.146.133
+203.204.186.225
+203.204.193.17
+203.204.217.138
+203.204.235.113
+203.217.100.150
+203.223.44.206
+205.185.123.66
+206.204.136.207
+207.188.148.20
+207.188.159.0
+208.115.233.154
+208.180.16.17
+209.145.51.44
+210.103.32.230
+210.34.80.129
+211.184.58.163
+211.223.149.46
+211.225.18.95
+211.51.224.122
+211.63.246.15
+211.78.25.25
+211.78.28.62
+212.150.145.194
+212.200.115.20
+212.225.196.177
+212.231.226.35
+212.46.197.114
+212.5.200.222
+213.149.166.35
+213.151.47.18
+213.16.63.103
+213.195.117.168
+213.243.216.3
+213.33.204.186
+213.7.223.212
+216.183.54.169
+216.244.203.118
+216.244.203.122
+216.244.203.33
+216.244.247.208
+217.11.75.162
+217.113.229.91
+217.114.43.149
+217.133.12.171
+217.34.45.65
+217.45.176.204
+218.149.51.211
+218.157.39.232
+218.35.172.81
+218.35.210.194
+218.38.241.103
+218.38.241.105
+219.115.24.14
+219.68.233.14
+219.68.233.67
+219.68.245.160
+219.68.245.35
+219.68.5.140
+219.70.216.125
+219.74.212.55
+219.85.163.80
+219.85.59.58
+219.89.121.234
+219.89.123.232
+220.127.168.87
+220.208.77.116
+220.80.59.85
+220.82.170.22
+220.88.160.105
+220.89.92.14
+221.14.104.239
+221.144.45.4
+221.145.153.108
+221.15.17.166
+221.15.185.101
+221.15.4.14
+221.15.48.9
+221.15.93.150
+221.15.94.212
+222.102.122.199
+222.104.200.163
+222.110.33.103
+222.134.163.142
+222.134.163.28
+222.138.237.162
+222.139.230.53
+222.141.78.164
+222.142.132.189
+222.142.241.51
+222.142.247.73
+222.243.14.67
+222.92.82.91
+223.12.204.134
+223.13.73.7
+223.197.228.236
+223.8.198.209
+223.8.213.153
+223.8.218.226
+223.8.5.63
+23.228.143.58
+24.112.19.248
+24.112.21.152
+24.135.96.42
+24.153.218.165
+24.164.134.156
+24.176.206.12
+24.45.161.117
+24.90.222.215
+24.96.221.50
+24.96.42.73
+24help.ooguy.com
+27.100.152.171
+27.113.195.69
+27.138.44.95
+27.202.160.59
+27.202.31.103
+27.215.209.13
+27.215.87.20
+27.220.100.135
+27.54.171.213
+27.71.59.7
+31.0.136.2
+31.168.179.83
+31.168.60.234
+31.168.62.37
+31.182.115.211
+31.184.194.114
+31.220.3.140
+31.41.244.146
+33rdderryscouts.com
+34.82.253.169
+36.64.215.90
+36.66.139.36
+36.93.41.223
+36.97.200.121
+37.139.249.103
+37.143.220.159
+37.34.209.216
+37.49.230.152
+37.57.165.123
+37.64.8.234
+38.13.24.38
+39.174.238.52
+39.174.238.55
+39.174.238.56
+39.174.238.59
+39.74.251.113
+42.224.193.3
+42.225.15.233
+42.226.222.17
+42.227.178.24
+42.227.185.170
+42.227.249.108
+42.231.44.98
+42.231.50.132
+42.233.146.119
+42.234.245.239
+42.235.148.103
+42.235.167.61
+42.235.189.227
+42.235.46.194
+42.235.51.129
+42.235.78.212
+42.238.247.168
+43.129.239.195
+43.139.92.184
+43.249.172.195
+43.255.174.228
+44.203.122.41
+45.126.209.4
+45.131.111.142
+45.15.156.13
+45.166.185.4
+45.234.132.163
+45.37.98.100
+45.87.5.2
+45.95.146.126
+45.95.146.26
+45.95.146.38
+45.95.147.236
+45.95.169.102
+46.100.166.120
+46.100.49.235
+46.100.5.56
+46.100.50.137
+46.100.63.216
+46.175.138.75
+46.191.143.16
+46.209.250.117
+46.21.179.164
+46.238.228.206
+46.238.231.91
+46.6.1.3
+47.109.102.98
+47.110.247.171
+47.154.86.212
+47.157.96.228
+47.176.252.169
+47.180.188.158
+47.197.31.176
+47.213.89.126
+47.236.140.86
+47.46.231.38
+47.61.168.151
+47.98.224.91
+49.142.114.242
+49.143.128.105
+49.143.43.93
+49.158.112.149
+49.158.197.108
+49.158.201.200
+49.158.206.47
+49.159.105.209
+49.174.82.174
+49.176.181.215
+49.213.137.4
+49.213.157.76
+49.213.187.75
+49.213.228.23
+49.213.228.82
+49.213.231.81
+49.232.142.48
+49.232.2.50
+49.70.118.175
+49.70.119.29
+49.89.201.211
+49.89.48.122
+5.133.65.53
+5.148.32.222
+5.201.176.87
+5.227.66.231
+5.232.130.89
+5.42.65.44
+5.42.65.85
+5.42.66.0
+5.42.67.26
+5.64.165.176
+5.89.36.162
+5.9.122.22
+50.168.161.19
+50.168.180.82
+50.168.217.251
+50.168.230.187
+50.168.230.218
+50.168.230.234
+50.168.230.250
+50.168.233.123
+50.168.233.187
+50.168.233.74
+51.182.145.71
+51.68.124.231
+542199235l.com
+58.105.193.146
+58.114.57.146
+58.115.161.70
+58.115.174.187
+58.152.158.49
+58.208.93.220
+59.1.48.150
+59.170.118.242
+59.2.183.119
+59.21.202.96
+59.24.52.209
+59.7.131.145
+59.89.4.98
+60.198.53.14
+60.246.119.253
+61.115.156.246
+61.163.152.171
+61.238.188.212
+61.247.183.18
+61.52.109.162
+61.52.14.100
+61.52.38.221
+61.53.39.152
+61.53.93.235
+61.56.172.212
+61.56.182.81
+61.57.87.252
+61.57.90.224
+61.57.96.188
+61.58.79.90
+61.61.218.23
+61.63.114.3
+61.63.158.125
+61.70.247.150
+61.73.216.184
+62.122.205.125
+62.169.235.215
+62.201.109.121
+62.219.110.93
+62.219.196.140
+62.219.239.154
+62.234.175.104
+62.30.149.182
+62.38.222.98
+62.90.167.100
+66.109.227.64
+66.109.227.65
+66.57.55.210
+66.75.88.177
+67.11.6.224
+67.215.209.154
+67.253.160.37
+67.80.31.20
+68.169.168.177
+68.179.176.106
+68.230.16.241
+68.95.120.155
+69.112.13.25
+69.75.227.186
+70.15.208.104
+70.65.214.60
+71.104.88.244
+71.167.232.237
+71.167.83.16
+72.131.114.175
+72.133.144.143
+72.133.152.230
+72.18.130.238
+72.18.130.48
+72.43.115.147
+73.1.228.140
+73.245.16.190
+73.88.104.85
+74.101.1.208
+74.50.80.82
+75.88.251.198
+75.99.143.195
+75.99.204.66
+76.107.46.8
+76.169.22.24
+76.175.27.104
+76.226.160.251
+76.50.182.40
+77.105.132.216
+77.105.132.229
+77.120.179.203
+77.228.245.19
+77.237.25.210
+77.49.219.34
+77.65.45.186
+77.79.135.225
+77.91.124.172
+77.94.122.33
+78.188.27.225
+79.11.92.240
+79.122.116.101
+79.124.73.65
+79.58.245.134
+79.6.34.156
+80.11.206.177
+80.11.62.54
+80.119.16.128
+80.181.130.84
+80.191.165.45
+80.210.18.126
+80.210.28.54
+80.210.35.140
+80.66.88.71
+80.68.196.6
+80.98.159.141
+80.98.202.200
+81.174.34.108
+81.218.212.95
+82.1.25.159
+82.142.100.221
+82.157.254.217
+82.209.187.190
+82.62.110.252
+82.65.205.108
+82.80.129.159
+82.81.1.140
+82.81.108.50
+82.81.170.27
+82.81.199.8
+82.81.254.242
+82.81.53.77
+82.81.97.91
+83.165.237.163
+83.218.189.6
+83.228.106.27
+84.171.69.167
+84.196.218.223
+84.203.151.223
+84.22.136.158
+84.228.107.192
+84.228.168.253
+84.228.234.91
+84.228.86.151
+84.242.139.134
+84.3.255.187
+84.33.116.171
+84.33.122.235
+85.113.49.80
+85.130.184.207
+85.130.196.83
+85.130.205.97
+85.196.178.238
+85.209.11.204
+85.209.176.46
+85.9.243.199
+85.97.111.84
+86.160.158.236
+86.221.90.175
+86.233.193.155
+86.6.187.44
+87.110.12.226
+87.121.87.44
+87.236.82.113
+87.242.89.170
+87.251.64.208
+87.251.77.166
+87.26.110.70
+87.26.181.132
+87.61.247.223
+87.69.116.10
+88.100.255.247
+88.151.192.77
+88.212.254.174
+88.247.179.46
+88.247.222.82
+88.250.19.224
+88.90.79.166
+89.135.142.235
+89.149.127.214
+89.17.225.21
+89.190.156.10
+89.190.156.211
+89.190.156.250
+89.23.96.177
+89.25.223.211
+90.154.229.81
+90.176.171.4
+90.213.136.109
+90.3.181.57
+90.3.186.159
+90.63.155.1
+90.63.157.209
+90.68.161.157
+90.84.226.16
+91.122.213.250
+91.202.45.223
+91.202.46.183
+91.213.50.74
+91.220.222.40
+91.224.98.57
+91.225.163.226
+91.239.77.159
+91.86.53.244
+91.92.122.87
+91.92.188.72
+91.98.8.255
+92.114.191.82
+92.162.107.172
+92.246.147.103
+92.26.84.52
+92.81.131.98
+92.85.48.31
+93.123.49.138
+93.123.85.110
+93.123.85.133
+93.123.85.19
+93.123.85.42
+93.123.85.71
+93.123.85.91
+93.39.178.18
+93.41.154.145
+93.41.182.249
+93.41.227.233
+93.43.212.140
+93.56.68.13
+93.57.35.40
+93.86.63.20
+94.139.165.153
+94.198.53.143
+94.226.32.206
+94.239.85.31
+94.41.60.179
+94.53.116.104
+94.53.120.109
+94.67.196.94
+94.74.128.50
+95.158.69.35
+95.170.113.227
+95.229.5.214
+95.230.237.125
+95.241.232.238
+95.38.24.186
+95.42.33.110
+95.43.99.79
+95.91.182.4
+95.91.96.123
+96.18.165.28
+96.242.173.171
+96.246.139.49
+96.246.156.236
+96.246.211.187
+96.47.147.169
+96.77.209.214
+98.113.151.173
+98.113.166.225
+98.14.183.227
+98.14.30.176
+99.107.113.242
+99.122.11.106
+99.157.23.199
+99.2.117.58
+99.73.209.178
+abode-dashboard-media.s3.ap-south-1.amazonaws.com
+accountingnj.blob.core.windows.net
+addtactical.com
+admin.byte.in.ua
+agemn.co.za
+airhobi.com
+aizanjyq.page.link
+alakheilizwe.org
+alertsecurities.in
+alinac.ca
+altunminyum.github.io
+anapa-zarya.ru
+aosafrica.co.za
+api-ms.cobainaja.id
+api.52kkg.com
+api.baimless.com
+apps.saintsoporte.com
+aristonbentre.com
+artmediastudio.ro
+asterglobal.com
+asu.com.vn
+athadnw.com
+atomm.com.br
+azmeasurement.com
+b.clu-e.eu
+balkarsoftware.cubistech.com
+bearcatpumps.com.cn
+bearware.org
+bigmikesupplies.co.za
+blooming.s3.amazonaws.com
+bontiakhotel.net
+borgomaira.it
+british-shorthair.es
+brknarikan.com
+bruiserbodies.com
+bufetesanchezabogados.com
+buscascolegios.diit.cl
+buvpgiii.page.link
+camminachetipassa.it
+canconsulting.in
+cargoconnect.online
+carthagefire.net
+casamuseoayerbe.co
+cdaonline.com.ar
+cfs10.blog.daum.net
+cfs13.tistory.com
+cfs7.blog.daum.net
+cfs9.blog.daum.net
+cfu.twr.mybluehost.me
+chashni.co
+chemsky.tn
+chingman.net
+chuckozeas.com
+clexowinsurance.com
+cnc.catairlines.net
+cnom.sante.gov.ml
+colegiojuanbernardone.com
+comediantes.org
+compan.oss-cn-hongkong.aliyuncs.com
+configure.syscatec.com
+crackload.net
+crz.de
+cynorix.com
+d1.udashi.com
+d7.fajridemo.com
+dacsandongthapmuoi.vn
+demo.devswire.com
+derekludlow.com
+destinymc.co.za
+devises-dz.com
+diclegrup.org
+dienmay01.maudemo.com
+dl.198424.com
+dl.9xu.com
+dokumentasoluciones.com
+dom.daf.free.fr
+donkeytourscroatia.com
+down.udashi.com
+download.doumaibiji.cn
+download.skycn.com
+downloayxkemam.sbs
+dukaree.com
+dw.c4kdeliver.top
+e-commerce.saleensuporte.com.br
+eastconsults.com
+ecoproducts.com.my
+ecox.pt
+elliert.github.io
+emgvod.com
+erkaradyator.com.tr
+et3.ektpnc.com
+exilum.com
+expressionsofwood.ca
+famesa.com.ar
+fastactionmedicalbilling.com
+fastersonic2017.github.io
+fetchdesignprint.co.za
+ff119f.oss-accelerate.aliyuncs.com
+files5.uludagbilisim.com
+frezzyhook.com
+funletters.net
+fvia.id.vn
+galandskiyher5.com
+gmhealthcare.dothome.co.kr
+greenisco.com
+growrock.co.za
+gsslofxh.page.link
+gumetale.github.io
+habbotips.free.fr
+heyleny2.dothome.co.kr
+hitstation.nl
+hopvibestravel.co.za
+hostigram.xyz
+houssagynecologue.com
+hr2019.vrcom7.com
+hranp10.gbbs8.cc
+hseda.com
+hugo.topteamlife.com
+hunggiang.vn
+hutmienj.page.link
+hwthurmann.de
+hxtqvudd.page.link
+idpminic.org
+if90f.oss-accelerate.aliyuncs.com
+img.softmedal.com
+imit.ac.in
+ingonherbal.com
+intellectproactive.com
+interpol.edu.pl
+ircftp.net
+ishahcouture.com
+islammagdy.com
+izlidemi.github.io
+jeffdahlke.com
+jhayesconsulting.com
+ji.alie3ksgdd.com
+ji.alie3ksggg.com
+jobcity.com
+jointings.org
+juntadeconfrariesdese.live-website.com
+justplay.asia
+kalp-s.com
+karer.by
+kest.com.pe
+kevinley.com
+lameguard.ru
+lang.topteamlife.com
+lasikofmichigan.com
+lastimaners.ug
+leeziptv.com
+library.arihantmbainstitute.ac.in
+lindnerelektroanlagen.de
+live.com.gt
+loop.topteamlife.com
+lostheaven.com.cn
+lti.cs.vt.edu
+mail.alphaassessoriato.com.br
+mail.chapanakit-rta.com
+marquesvogt.com
+maxmoney.com
+maxximbrasil.com
+mbgrm.com
+medfioytrkdkcodlskeej.net
+meeweb.com
+meonhanong.com
+microsecurityupdate.com
+microtrimsltd.com.bd
+mistydeblasiophotography.com
+moninediy.com
+mumgee.co.za
+muzzumilruheel.com
+my-sbox.trns.co.za
+myekisan.com
+mysura.it
+namthaibinh.net
+nerve.untergrund.net
+networkwheels.co.za
+ngwcscyd.page.link
+notaire-gay-friendly.fr
+ns1.koleso.tc
+nsb.org.uk
+nzdintab.page.link
+oazahotel.com.mk
+ogumeta.github.io
+olivehr.co.za
+olugun.co.za
+opencart.notebookparcalari.com
+opolis.io
+orderedami.com
+orlcasablanca.com
+orsan.gruporhynous.com
+p4936.webmo.fr
+pagamento.afya.com.br
+palharesinformatica.com.br
+pan.tenire.com
+parallel.rockvideos.at
+pascasarjana.iainfmpapua.ac.id
+patisserie.co.ke
+pink99.com
+pns.org.pk
+ponizinny.nl
+posmicrosystems.com
+pouya.blob.core.windows.net
+pqhanh.ddns.net
+proativa.konkisti.com.br
+procuratio.nu
+proecologicsistem.com
+propagandaetrafego.com
+protechasia.com
+pub-97694a1358de4edbb16efd939f516a29.r2.dev
+qcollect.co.za
+qlts.venuscorp.vn
+quickcheckx.github.io
+quizbn.com
+records.dennisign.se
+reifenquick.de
+resourceedge.org
+rodhigital.com
+rollsbeer.com
+romvalstudios.com
+roofing.galacticleads.com
+safetygear.pk
+sapiens-services.com
+schleswig-flensburg.freifunk.net
+sd-1093121-h00002.ferozo.net
+sd-1684625-h00001.ferozo.net
+sdfhusdf-1252681487.cos.ap-chengdu.myqcloud.com
+secretmindcontrol.com
+server.easysalepage.in.th
+server.toeicswt.co.kr
+shahu66.com
+shapefiles.fews.net.s3.amazonaws.com
+shells.nesco-alkes.com
+sierrafoodcorp.com
+siparisler.github.io
+skybornsaga.com
+smjyihre.page.link
+smpn41.semarangkota.go.id
+soft.110route.com
+softdl.360tpcdn.com
+sos.vivi.sg
+spices.com.sg
+src1.minibai.com
+srv-fattureincloud.de
+static.cz01.cn
+stdown.dinju.com
+still.topteamlife.com
+stoneyarchkennels.com
+suakhoaketsattphcm.com
+sudmqtha.page.link
+support.clz.kr
+techniguitare.com
+tecni-soft.com
+telagrmac.com
+temptmag.com
+tengfeidn.com
+test.earborist.com
+test.typoten.com
+tght1.oss-cn-hongkong.aliyuncs.com
+thedoctorsgym.net
+threerosesbeauty.com
+tiemvangngoctham.com
+transfer.adttemp.com.br
+travelwithmanta.co.za
+ummotosmexico.mx
+unapromo.com
+unlockingdreamsfinancial.com
+updates.ultimate-fakkers.co.network
+upload.vina-host.com
+uxsingh.com
+vipysknik.by
+viviendas8.com
+vkengcivil.com.br
+vmi1159541.contaboserver.net
+vqqmofxg.page.link
+websound.ru
+winderswonders.com
+wispafoods.com
+wordpress.ductai.xyz
+wwoanswi.page.link
+wynecare.com
+xiangshunjy.com
+xn----7sbhgfcdscaa3cdd6dq3e3dvf.xn--p1ai
+xz888.oss-cn-hangzhou.aliyuncs.com
+y.shavsl.com
+yemdtrto.page.link
+youronestophalalshop.com
+yp.hnggzyjy.cn
+ysbaojia.com
+ywsbiouy.page.link
+z.shavsl.com
+zaofisa.net
+zen.topteamlife.com
+zgepikqf.page.link
+zhengxinpeixun.oss-cn-qingdao.aliyuncs.com
+zsin2.ebnsina.top
+||adclick.g.doubleclick.net/pcs/click?adurl=//balkarsoftware.cubistech.com$all
+||adclick.g.doubleclick.net/pcs/click?adurl=//churchinmanila.org/$all
+||adclick.g.doubleclick.net/pcs/click?adurl=//old.umcl.us/$all
+||adclick.g.doubleclick.net/pcs/click?adurl=//procuratio.nu/$all
+||adclick.g.doubleclick.net/pcs/click?adurl=//vaibhavtripathi.in$all
+||adclick.g.doubleclick.net/pcs/click?adurl=//www.deltabehavioralhealth.org/$all
+||adclick.g.doubleclick.net/pcs/click?adurl=//www.jd-forever.com/$all
+||adclick.g.doubleclick.net/pcs/click?adurl=https://dongyu.us/$all
+||adclick.g.doubleclick.net/pcs/click?adurl=https://namaacont.com/$all
+||adclick.g.doubleclick.net/pcs/click?adurl=https://posicionamientonatural.es/$all
+||adclick.g.doubleclick.net/pcs/click?adurl=https://redeamazoniaazul.org/$all
+||adclick.g.doubleclick.net/pcs/click?adurl=https://synergyconsulting.us$all
+||adclick.g.doubleclick.net/pcs/click?adurl=https://wegrowcoaching.com/$all
+||agies.org/wp-content/uploads/2018/11/cp/hotspotstudioportable_ynvjewjz.bmp$all
+||agies.org/wp-content/uploads/2018/11/cp/virtuawinportable_ltsjlawx.png$all
+||bitbucket.org/!api/2.0/snippets/mounmeinlylo/6qaezk/68ca2fb6aac2a81f027f3153f0d611c70af8c116/files/file$all
+||bitbucket.org/!api/2.0/snippets/mounmeinlylo/6qano5/2aa998bdd45ea12f5552d98e8e28825a5a95cc86/files/file$all
+||bitbucket.org/!api/2.0/snippets/mounmeinlylo/bqaeer/5b924a1aa7fee2cb51377a9085ed3793f6a749a7/files/file$all
+||bitbucket.org/112download/browser/downloads/onionbrowser.rar$all
+||bitbucket.org/4afziyfqzm/afziyfqzm/downloads/new_kiddions.rar$all
+||bitbucket.org/adobeofficial/adobeofficiall/downloads/setup_en_x64.zip$all
+||bitbucket.org/aneex/gtaaaaa/downloads/kiddions_menu.rar$all
+||bitbucket.org/aneex/gtavnew/downloads/kiddions_menu.rar$all
+||bitbucket.org/aneex/kiddions_menu/downloads/kiddions_menu.rar$all
+||bitbucket.org/aneex/rust-aim-esp/downloads/rust_aimesp.rar$all
+||bitbucket.org/aneex/warzone_2.0_unlock_tool_aim_esp/downloads/warzone_2.0_unlock_tool_aim_esp.rar$all
+||bitbucket.org/apilogic2023/api/downloads/password_2022_installer.rar$all
+||bitbucket.org/bodywawe/downwawe/downloads/fort.rar$all
+||bitbucket.org/contore/update/downloads/password_2022_installer.rar$all
+||bitbucket.org/downcloud-load-ad/ads1022/downloads/afterburner.zip$all
+||bitbucket.org/download-aa/download_aaa/downloads/fortnite_hack.rar$all
+||bitbucket.org/download-aa/download_aaa/downloads/kiddions_mod_menu.rar$all
+||bitbucket.org/download-hack/download/downloads/kiddions_menu.rar$all
+||bitbucket.org/easy-s0ft/easys0ft/downloads/fortnite_hack.rar$all
+||bitbucket.org/fdfffdfdd/sasa/downloads/crypted.exe$all
+||bitbucket.org/foxxlrep/repo/downloads/newf.dotm$all
+||bitbucket.org/foxxlrep/repo/downloads/za.xlsx$all
+||bitbucket.org/foxxlrep/repo/downloads/zip.zip$all
+||bitbucket.org/frozenthrone1337/yeah/downloads/64.dll$all
+||bitbucket.org/georgy1ss1s/geoasdfasdf/downloads/fortnite_hack.rar$all
+||bitbucket.org/georgy1ss1s/geoasdfasdf/downloads/kiddions_mod_menu.rar$all
+||bitbucket.org/greeeengo/xcaseasd/downloads/%d0%a1s_g%d0%9e_ch%d0%90ng%d0%95r.rar$all
+||bitbucket.org/greeeengo/xcaseasd/downloads/5m_mod_menu.rar$all
+||bitbucket.org/greeeengo/xcaseasd/downloads/g%d0%bed_of_war_ragnar%d0%bek_cr%d0%b0%d1%81k.rar$all
+||bitbucket.org/greeeengo/xcaseasd/downloads/sonic_frontiers_cracked.rar$all
+||bitbucket.org/inseller31/loverskit1/downloads/fort.rar$all
+||bitbucket.org/it-alert-2023/update/downloads/sns_24.apk$all
+||bitbucket.org/jhjhhjhjjhhj/regge/downloads/f%d0%bertnit%d0%b5_h%d0%a1.rar$all
+||bitbucket.org/jwgo-software/software_good/downloads/svcpjuhbt.exe$all
+||bitbucket.org/lucianoeasy1/whythefuckareutryingtotrackthishttpdebuggerlol/raw/67c59c70dfb800fa2bf21b3217e2485221c20428/fund.exe$all
+||bitbucket.org/myworkescxz/meyca/downloads/soft.rar$all
+||bitbucket.org/neironner/app/downloads/appwesoft.rar$all
+||bitbucket.org/neonbatsv4/neonbats2/downloads/neonbatsloader.rar$all
+||bitbucket.org/nobodoimportante/diniasndiasnid/raw/f9296891a4af851f86f26f100be89a44da6958f3/limm.exe$all
+||bitbucket.org/nobodoimportante/diniasndiasnid/raw/f9296891a4af851f86f26f100be89a44da6958f3/route.exe$all
+||bitbucket.org/o1lov/repo1lov/downloads/kidi.rar$all
+||bitbucket.org/osaka123/mahoa1/downloads/suburbanskamacite.exe$all
+||bitbucket.org/pavelalekseev11/346346/downloads/socks5-clean.exe$all
+||bitbucket.org/rpoverka/zhopa/downloads/1bz7kfahvu.exe$all
+||bitbucket.org/rpoverka/zhopa/downloads/systemupdate.exe$all
+||bitbucket.org/rpvpov0nqt/rpvpov0nqt/downloads/fortnite_hack.rar$all
+||bitbucket.org/rpvpov0nqt/rpvpov0nqt/downloads/new_kiddions.rar$all
+||bitbucket.org/rpvpov0nqt/rpvpov0nqt/downloads/roblox_doors_src.rar$all
+||bitbucket.org/samesaaa/123/downloads/tjeajweeeh.exe$all
+||bitbucket.org/shgz2/sghz3/downloads/fortnie_hack.rar$all
+||bitbucket.org/shgz2/sghz3/downloads/kiddions_mod_menu.rar$all
+||bitbucket.org/slack-files/windows/downloads/siacksetupwin.iso$all
+||bitbucket.org/softwarefiles/fulldownloadhere/downloads/main_setups_full_version.rar$all
+||bitbucket.org/tautara-dwnl/download/downloads/kiddions_menu.rar$all
+||bitbucket.org/tautaracheats-dwnld/tautaracheats/downloads/fortnite_cheat.rar$all
+||bitbucket.org/tautata-hacks/download/downloads/kiddions_menu.rar$all
+||bitbucket.org/testing77777/appdevlompent55555555/downloads/m5traider.exe$all
+||bitbucket.org/testing77777/appdevlompent55555555/downloads/v2.exe$all
+||bitbucket.org/valentinomaseratti/symphitems/downloads/passw_items_applicationsetupfile14.1.rar$all
+||bitbucket.org/wfwfwe2/2/downloads/softinstall.rar$all
+||bitbucket.org/workker300066/partners/downloads/project_8.exe$all
+||bitbucket.org/worldofsoft1/soft/downloads/soft.rar$all
+||bitbucket.org/zesoftwares/zesoft/downloads/zesoftapp.rar$all
+||cd.textfiles.com/hmatrix/data/hack1226.exe$all
+||cdn.discordapp.com/attachments/1195683358328500324/1195831830071492699/planetstherapy.rar$all
+||cdn.discordapp.com/attachments/1195683358328500324/1195831830071492699/planetstherapy.rar?ex=65b56c2d&is=65a2f72d&hm=d6a8e16a651fa91637573161b20a6987f499456d1d95380d6eb9487553ae5467&$all
+||cdn.discordapp.com/attachments/1195683358328500324/1196239971011538985/planetsbeta.rar$all
+||cdn.discordapp.com/attachments/1196556125491953824/1196569754517917746/planetsbeta.rar$all
+||cfs5.tistory.com/upload_control/download.blog?fhandle=ymxvzzcxmzyyqgzzns50axn0b3j5lmnvbtovyxr0ywnolzavmtqwmdawmdawmdawlmv4zq%3d%3d&filename=crack-pro20.exe$all
+||chiptune.com/razor/rzr-winner_intro.zip$all
+||cipro.mx/prensa/xljcumsgpfm3baaivz/$all
+||cloud.restoro.com//download/sa/restoro.exe$all
+||cloud.restoro.com/download/2105/restorosetup64.exe$all
+||codeload.github.com/drakeo03/rbxfpsunlocker-x64-hotfix1/zip/refs/heads/main$all
+||codeload.github.com/jackelfa/appunlim/zip/refs/heads/main$all
+||codeload.github.com/meteoradminz/hidden-tear/zip/master$all
+||codeload.github.com/mr-r3b00t/rdp_backdoor/zip/refs/heads/main$all
+||codeload.github.com/unlockteame/unlimited/zip/refs/heads/main$all
+||dhnconstrucciones.com.ar/wp-admin/sm02zsvdywdotb7rql/$all
+||dl.packetstormsecurity.net/dos/nemesy13.zip$all
+||docs.google.com/uc?export=download&id=11mi132ptx9rjlbgex4ep7qabji8v7urn$all
+||docs.google.com/uc?export=download&id=140vkyfrfhbqkukc2hnw-gsvi5wjw6iyi$all
+||docs.google.com/uc?export=download&id=162eqplutnz1zkvzpmxfzzncvq91-s7vy$all
+||docs.google.com/uc?export=download&id=1abxeysgy4nzun-bhdcgjanl15guji6tn$all
+||docs.google.com/uc?export=download&id=1c6tgo9uoo-xxvvecmzzimumznzj34bpi$all
+||docs.google.com/uc?export=download&id=1ctmywlj5wouiug1wgizy3ke7yj1u0yor&revid=0b_t0-zked1mgagxwmxcwywq5q0q1uk1uoxcwaup6l2ovmtdjpq$all
+||docs.google.com/uc?export=download&id=1gv_nk9llqw4fxudo-khja7nuuj1kevvw&revid=0b7zefp-g6n7vm0zhowo4be9pvus4mmh0ymxvd3r6zlu3ylznpq$all
+||docs.google.com/uc?export=download&id=1h_dyp_d5lst4akyf2qezxl7j1scvbtvs&revid=0b5thckui5i0mdk5moelbnm9vuhnydvjnvwpyq01vrg5xvwhrpq$all
+||docs.google.com/uc?export=download&id=1jpl-uouydm5hypqm67uokyddrblbpxvw&revid=0b7zpiprmoc5ubhpwclq0cxdyte5vwtrbymnidznhtgm3bzvrpq$all
+||docs.google.com/uc?export=download&id=1jxxc4l7icdzs0zx0iz7hayfglrujm8ro$all
+||docs.google.com/uc?export=download&id=1m8jszvq-ztfrul7vgsb6q-n3ftgnkbdj&revid=0bxrhybf9__wnmgjlnmxmunzznlu0v204azc4edmzcep6a0hzpq$all
+||docs.google.com/uc?export=download&id=1mbxcfxtftgmjozw64tqu-7odxzgmfezr$all
+||docs.google.com/uc?export=download&id=1ntz3ngmlaujliud8iqx3taaz7tzrqbj9$all
+||docs.google.com/uc?export=download&id=1pgpjkox9-ztieqrellytrhuk9bykwmfj$all
+||docs.google.com/uc?export=download&id=1sbd1rnw8luztjmsh6gdlzupvyupbopa0&revid=0b3yyjts_woklr2vnyxvqohlidxbxn1l2wwjntxfnwvi5v0h3pq$all
+||docs.google.com/uc?export=download&id=1tilqozot07vylvdmmsfs7ia452jwhktj&revid=0b7gsmqzks4xkcdjcwhuvatj2qvlvchnmnnovu2ldzstek2jzpq$all
+||docs.google.com/uc?export=download&id=1uh8squz6doag3ywzn7rpx0k5jfze9r6d$all
+||docs.google.com/uc?export=download&id=1vpjjnz5xarnv1tbde79kuatj0tis3ty7$all
+||docs.google.com/uc?export=download&id=1ygn4gkmy9musdp_lgnpyjjh6rskt39vp&revid=0b8rbgp2bpeofmk5ta3n3mgjtefbzdevwtk5wwhpjd3yruejjpq$all
+||drive.google.com.it-barcelona.com/frm0reseen/prntscrnofamzorderid.jpg.exe$all
+||drive.google.com/u/0/uc?id=13st0duhd4buy1kbprqwpj_j7caaeg8vh&export=download$all
+||drive.google.com/u/0/uc?id=1971nn11jts-j0fmdyn1kow_zr8szvsjo&export=download$all
+||drive.google.com/u/0/uc?id=1apbgg8cyhbx3l2qaezfjnk9krbmumfbf&export=download$all
+||drive.google.com/u/0/uc?id=1r8ha5a1gtjvb-3-1be7hpndhbv5yyonu&export=download$all
+||drive.google.com/u/0/uc?id=1txdqckk-lg72vbxwzaisonda3smn8tg8&export=download$all
+||drive.google.com/u/1/uc?id=1uq00qoghsvrdaayru6cjrd9pctx-dknv&export=download$all
+||drive.google.com/uc?cliviu_1@hotmail.com=cliviu_1@hotmail.com&id=1gdzatrrbj01eowmiswlpjp_fhry9rxnj$all
+||drive.google.com/uc?export=download&confirm=no_antivirus&id=1-5tfbyc52tepabxjdszg1dcqgaizf0m6$all
+||drive.google.com/uc?export=download&confirm=no_antivirus&id=11whde3xy7c5akks24p0ezs8s8lunjiay$all
+||drive.google.com/uc?export=download&confirm=no_antivirus&id=1cpaqimeblbmxrxoli6d3cczgkrbzpy8_$all
+||drive.google.com/uc?export=download&confirm=t&id=145b1fbjtyee3w1rjsazo7hzcoiiaxzum&uuid=eb581596-9566-4a21-b3b6-e6909eb42ff6&at=akkf8vzrltviqrn7wljfjcwisgcc:1683793107077$all
+||drive.google.com/uc?export=download&confirm=t&id=1bs6fwvgvs2ybztttr9ff5uhzwla25gj6&uuid=9b7e82d4-3ba8-46f1-95a5-0b8d4cbfab7b&at=akkf8vygxbw49pjbhr68c_mwqqsa:1683561478278$all
+||drive.google.com/uc?export=download&id=10lygpyju_dlg3x6r9oslzgblshakstl-$all
+||drive.google.com/uc?export=download&id=11cbyky_wegqjut6afr8jannw7vub-xxf$all
+||drive.google.com/uc?export=download&id=12ma_yvbmprts6e_vkfnmwikrnwsarqbw$all
+||drive.google.com/uc?export=download&id=12rmvuwgpj0dzbb3haoaww2lviavhvb4r$all
+||drive.google.com/uc?export=download&id=12yydeirz4axzmnp6we4crryoamntes2n$all
+||drive.google.com/uc?export=download&id=12zhu5cy9mntlhoz9fq7v9q_-xi-iozmj$all
+||drive.google.com/uc?export=download&id=166umzeeolcirtwvqvmwcselvekuk4ihn$all
+||drive.google.com/uc?export=download&id=16cxnfwhckhznnkons3bjuyy-qnq0e7bn$all
+||drive.google.com/uc?export=download&id=1_ldguopt2cg7fblntw3ltxgtxqtmlflc$all
+||drive.google.com/uc?export=download&id=1alq8r5tnr6wwiftqa3l6d9fymv7y0g9m$all
+||drive.google.com/uc?export=download&id=1atioyidn3mw8562b_ctgn9pqpy0bupuo$all
+||drive.google.com/uc?export=download&id=1b6t1mjnjcvndcy-mdqq0neqrbocqyju4$all
+||drive.google.com/uc?export=download&id=1ctnmusyjuqkrxgvd6uph5ttb4-sb1zxr$all
+||drive.google.com/uc?export=download&id=1e2y5yppu_zjj4o3wmuo-2j8n9lbthkzc$all
+||drive.google.com/uc?export=download&id=1epjfdii2xi7gt4jpyzhtdsey0m8p7k9d$all
+||drive.google.com/uc?export=download&id=1esmx-uerj9dsxpubwctu7fjbwsguvrrx$all
+||drive.google.com/uc?export=download&id=1esz_dau_9fiysgttamdbs8skndirug-g$all
+||drive.google.com/uc?export=download&id=1etpmpb2shvuny5dxj5awfpxklxqpbzgx$all
+||drive.google.com/uc?export=download&id=1ff79_1umnp7iyibpg169gupnkiz0zfr_$all
+||drive.google.com/uc?export=download&id=1fhqpevblkipshqumjmsbzeetdzhzxv-j$all
+||drive.google.com/uc?export=download&id=1gfn3lqd1rvybut4ha-ldl92wt8ysrzfc$all
+||drive.google.com/uc?export=download&id=1gvnzexvvs3vpv0-ihflwnmzmhij3qqly$all
+||drive.google.com/uc?export=download&id=1heka7sgmbcessdhxtvmfwxownz7sipbb$all
+||drive.google.com/uc?export=download&id=1i0ozy5tekbzxfckeqecxvhh5r8-lv9ws$all
+||drive.google.com/uc?export=download&id=1ifvzub1blhmwsirshbe2wu5b1tus3ls-$all
+||drive.google.com/uc?export=download&id=1jmvlc342a-9khhwqofk1aticown34bxe$all
+||drive.google.com/uc?export=download&id=1jvqaqhw3wrdy09sf69rsggxmk_jl7lz5$all
+||drive.google.com/uc?export=download&id=1k0bqhrtnu4v1yexoni5p1utyjuohmfzm$all
+||drive.google.com/uc?export=download&id=1lhnnwoydntgqibsykxwgd32s5xftxvfh$all
+||drive.google.com/uc?export=download&id=1lmpe0kfqp0mxvcovqjdktlhnarcv_bk1$all
+||drive.google.com/uc?export=download&id=1lrviuk1wka4di3qh7ach-b7m1ics2hbp$all
+||drive.google.com/uc?export=download&id=1ltd2fcvjfx_xinikqpdvxtenf3hb3le4$all
+||drive.google.com/uc?export=download&id=1n8_s6gijerearczwh74blkygodig64eo$all
+||drive.google.com/uc?export=download&id=1nw1gmzg6lwtuhs0tte969xcfpp9_dc5q$all
+||drive.google.com/uc?export=download&id=1nx37rcyoclifch3waaddhuzclyj4ouue$all
+||drive.google.com/uc?export=download&id=1ofiwp1uqcvvfk9swmqw_bfuzs5ptzjhh$all
+||drive.google.com/uc?export=download&id=1oxpqeutyreby186exx4zeofyz0rjocsp$all
+||drive.google.com/uc?export=download&id=1pr2l1wfpwhfzln-sq93bb9xwfqtrwezu$all
+||drive.google.com/uc?export=download&id=1qnnvejemq-1gs3dvhxttfutbma4feybs$all
+||drive.google.com/uc?export=download&id=1qrmiydcjalup6ilaiwgef0frfh9m6gx2$all
+||drive.google.com/uc?export=download&id=1rfsmrzeanvap2tnmtwrptlepwarwlkge$all
+||drive.google.com/uc?export=download&id=1rq-2h4iteuydypxvrcy7p37mlfzpy5eg$all
+||drive.google.com/uc?export=download&id=1rqhgsr779gyzvi15p-bmkx8txq4bj-yi$all
+||drive.google.com/uc?export=download&id=1rvztoer7k-x6prsqaji-5hjnz9iylhvk$all
+||drive.google.com/uc?export=download&id=1satmexzn3qpvqzfxnc-5dtnnn8lihdxh$all
+||drive.google.com/uc?export=download&id=1sjm5t0ktlepibtv3kgaousspnw3zonom$all
+||drive.google.com/uc?export=download&id=1sqvm1xsoranfnvqst_kkdmn8yhgulm4k$all
+||drive.google.com/uc?export=download&id=1tt_d2mf24yqbtzg94dohbzoegv4l7-3z$all
+||drive.google.com/uc?export=download&id=1ud7jvcluulbsjnjwl_tgwruqe62dbucr$all
+||drive.google.com/uc?export=download&id=1uobsidldlaxsxs22gi0rmycjvpoku8al$all
+||drive.google.com/uc?export=download&id=1v5a676454tly-_qpuv0g08wpfh6szqoi$all
+||drive.google.com/uc?export=download&id=1veoquekmvfj3rhpvfogdclmsu31vpjuz$all
+||drive.google.com/uc?export=download&id=1wqxmzlocxvvsa-lqa51xswzmutqfblky$all
+||drive.google.com/uc?export=download&id=1wv07wdj_zncpe-bn4lxwur1qugt3htkl$all
+||drive.google.com/uc?export=download&id=1xogdtsjtbne7mpq2bwz6dzrc-yfwtn_s$all
+||drive.google.com/uc?export=download&id=1xxzitr2atghh3tb2xeucjldcedrvf7it$all
+||drive.google.com/uc?export=download&id=1yfqtugahqhqrulwugdekeavffktsl8ci$all
+||drive.google.com/uc?export=download&id=1yydiodtw09banou13ro8ielf9rcmljxy$all
+||drive.google.com/uc?export=download&id=1z7qbxztr4wgrzspyom-exvhwzwzwlh4v$all
+||drive.google.com/uc?export=download&id=1z7qhwcozjwehksdhw-yuivac2jzwjqia$all
+||drive.google.com/uc?id=17bsqdb9hpmi35bdhkfrcxc41lgj02zd3&export=download$all
+||drive.google.com/uc?id=1a7jwdzayvxw_d3cgv_n7tjf4sty3ufor&export=download$all
+||drive.google.com/uc?id=1ekcinmskddduir6reyjrjyzvcyw-1idj&export=download$all
+||drive.google.com/uc?id=1gwsdcu5mxxo0oq3kiaerlwqqcpxbg74p&export=download&authuser=0$all
+||drive.google.com/uc?id=1kavuowl0c1mms_vtxozw-cwq7hwto0el&export=download&authuser=0$all
+||drive.google.com/uc?id=1qvag-koyy2l8h5lwvaeaw35hnuwbm3xo$all
+||drive.google.com/uc?id=1re8ewllfl3pjf1m1ywjwjwbitzqqmhjs&export=download$all
+||encurtador.com.br/crdlt$all
+||encurtador.com.br/twzqs$all
+||firebasestorage.googleapis.com/v0/b/single-arcanum-377723.appspot.com/o/z3x15dughi%2finv%2805-19%29copy%2318-54-15.js?alt=media&token=31a3f851-d85c-4137-b245-bb7b7913cb57$all
+||firebasestorage.googleapis.com/v0/b/swift-apogee-377705.appspot.com/o/jgkurksbnk%2fcontract_02_21_copy%233.zip?alt=media&token=49d7e765-a76b-4728-9213-34a69a8f928d$all
+||firebasestorage.googleapis.com/v0/b/tonal-depth-377622.appspot.com/o/cqtcxoljqm%2fcontract_02_21_copy%2332.zip?alt=media&token=0af57743-0613-4fa8-90c9-fd5045f227bc$all
+||free.360totalsecurity.com/totalsecurity/360ts_setup_mini_ww.datacash.cpi202304_6.6.0.1054.exe$all
+||free.360totalsecurity.com/totalsecurity/360ts_setup_mini_ww.marketator.cpi20230401_6.6.0.1054.exe$all
+||fromthetrenchesworldreport.com/analytics/zy5ntk/$all
+||gedebey-tvradio.info/wp-includes/b8cana2zy/$all
+||github.com/aztecer/dwdadawfeged23543fwgdvsg43q/raw/main/aztec.exe$all
+||github.com/aztecer/dwdadawfeged23543fwgdvsg43q/raw/main/payload.exe$all
+||github.com/bual3/best/archive/refs/heads/main.zip$all
+||github.com/catgamesyt/terrariasetup/raw/main/terraria.rar$all
+||github.com/chelloxy/do-not-try-this-at-home/raw/main/temp1.exe$all
+||github.com/chelloxy/do-not-try-this-at-home/raw/main/temp2.exe$all
+||github.com/chelloxy/do-not-try-this-at-home/raw/main/temp3.exe$all
+||github.com/christophed21/open_program/archive/refs/heads/main.zip$all
+||github.com/clever88-code/test/raw/main/v4install.exe$all
+||github.com/crack2012/fuulcrack/raw/main/pass2022%20installer.7z.001$all
+||github.com/cronusxd/update/releases/download/programa/universal.cheat.all.games.rar$all
+||github.com/demonoracle/stacygenerator/raw/main/gorgeousmovement.exe$all
+||github.com/doklevesor/downsoftadlr/blob/main/adlightroom.zip$all
+||github.com/doklevesor/downsoftcsp/blob/main/clipstudiopaint.zip$all
+||github.com/doklevesor/downsoftdr18/blob/main/davinciresolve18.zip$all
+||github.com/dysan4ik1/tse/raw/main/brg.exe$all
+||github.com/eksss112/savefreesoft/raw/3b97590ce32d41211984da2c25c06b9ed8b66b73/savefreesoft.com%20download.rar$all
+||github.com/esgpocark/esg_payloads/raw/master/bin/notepad.exe$all
+||github.com/esgpocark/esg_payloads/raw/master/bin/office.exe$all
+||github.com/ethmonsterm/ethmonsterm/raw/main/cpm.exe$all
+||github.com/ethmonsterm/ethmonsterm/raw/main/wnnrg.sys$all
+||github.com/evavevav/fortnitenewhack/raw/main/fortnite%20new%20hack.zip$all
+||github.com/fate1337pw/fortnite/raw/main/fortnite2.exe$all
+||github.com/fate1337pw/fortnite/raw/main/fortnite3.exe$all
+||github.com/filmans/winlocker/releases/download/winlocker/cheat.exe$all
+||github.com/fra1zz1337/stealer/releases/download/stealer/creal.exe$all
+||github.com/guzman1337/crypted/raw/main/miner.exe$all
+||github.com/himesshawne/mcu/releases/download/v2.0/cheater.pro.1.6.0.msi$all
+||github.com/himesshawne/openai-multi-client/releases/download/v1.6.0/cheater.pro.1.6.0.msi$all
+||github.com/himesshawne/website/releases/download/v2.6.0/cheater.pro.1.6.0.msi$all
+||github.com/hoter666/8888/blob/main/banana.exe$all
+||github.com/hoter666/8888/blob/main/bitter.exe$all
+||github.com/hoter666/8888/blob/main/project7.exe$all
+||github.com/inheritancehope401/ce/raw/main/6.exe$all
+||github.com/jackelfa/appunlim/archive/refs/heads/main.zip$all
+||github.com/janchuk/voidrat/raw/master/voidrat.exe$all
+||github.com/kseniakucherksenia/.github.io/raw/main/cayv0deo9jst417.exe$all
+||github.com/kyango01/steam/raw/main/soft.exe$all
+||github.com/macigaiga/cstest/raw/master/cs_maltest.exe$all
+||github.com/marianaxx0492494/update/raw/main/setup.msi$all
+||github.com/markosofts/adobe-after-effects-2022-1.5/blob/main/adobe-after-effects-2022-1.5.zip$all
+||github.com/markosofts/stake-price-prediction/blob/main/stake%20prediction%20(updated).zip$all
+||github.com/megacrack1496/newcrack/blob/main/addobe%20photoshop%20crack%202022.7z$all
+||github.com/megacrack1496/newcrack/blob/main/adobe%20after%20effects%202023%20v23.0.0.59.7z$all
+||github.com/megacrack1496/newcrack/blob/main/adobe%20premiere%20pro%202023%20v23.0.0.63%20rus.7z$all
+||github.com/megacrack1496/newcrack/blob/main/fl%20studio%20producer%20edition%2020.7.2%20build%201852.7z$all
+||github.com/megacrack1496/newcrack/blob/main/pass_2022_installer.7z$all
+||github.com/megacrack1496/newcrack/blob/main/wondershare%20filmora%20crack.7z$all
+||github.com/meylorlauro/asm-installer/releases/download/v1.0.0/cheat.space.1.4.3.msi$all
+||github.com/moom825/discord-rat-2.0/raw/master/discord%20rat/resources/passwordstealer.dll$all
+||github.com/moom825/discord-rat-2.0/raw/master/discord%20rat/resources/token%20grabber.dll$all
+||github.com/mr-r3b00t/rdp_backdoor/archive/refs/heads/main.zip$all
+||github.com/neardream2/1/raw/main/1230.exe$all
+||github.com/obaasia/svhost/raw/main/cbchr.exe$all
+||github.com/ollll4533/alexproduct/raw/main/%40natsu338_alice.exe$all
+||github.com/onursanal/evlilik/raw/main/kimlik%20fotokopileri.zip$all
+||github.com/perecrestock/joker1488/raw/main/easy.exe$all
+||github.com/progrovv/winlock/raw/main/winlock.exe$all
+||github.com/puralain3478/main/archive/refs/heads/main.zip$all
+||github.com/quqies/a4soft/raw/main/bin.exe$all
+||github.com/rebecavil77/dekstopapp/archive/refs/heads/main.zip$all
+||github.com/riseme-origami/g/raw/main/client-built.exe$all
+||github.com/roblox4dev/synapsex-/raw/main/synapsex%20api%20cracked.rar$all
+||github.com/s1lenthashhh/lolminer/raw/main/lolminer.exe$all
+||github.com/s1lenthashhh/watchdog/raw/main/watchdog.exe$all
+||github.com/s1lenthashhh/winring/raw/main/winring0x64.sys$all
+||github.com/s1lenthashhh/xmrig/raw/main/xmrig.exe$all
+||github.com/salatikochen/salatapps/archive/refs/heads/main.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03-b03/02690278f8242674740078dd4144388a73bf0f1dc7eb774dcbd707483b36fa28.exe.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03-b03/0bd6f7619002c129af1c0230a04a6980c76664d9870918ebd40f48b9d66a2c24.exe.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03-b03/161655d05f38148b9f01c784fe463251a73cc61565af139afca09254cb74e7de.exe.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03-b03/3e2d82c9de2dd414e21d69262f1a813a15cbb2061bc1a358c03c7935ba411b27.exe.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03-b03/3e7ce7699a593f1d639a4aa2c8677a3de3ecff16703ab56bc7fea72236c3792a.exe.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03-b03/400f2900013a13fd86c6ed19bc9184a2180f7213a7a29161203089ad805986f9.doc.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/0aeb3870737fa3045af03fc548c974a51a5a67d5a5f5b4b25e3724e3e1747217.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/0cb4087b8d532e5fae9ff5d39815fd9b394f9e12cbf783a32329f925022350bc.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/190ab3322d6ed47185da263e1755ae94fbf1f1dac4936a80ef699c353c40644a.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/20b4ea1f84a5e558f9665e34dde6f63139f0d71308d7175b2b19f7d7a27415b6.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/2105e00a54f1b79f80f312b0b58331d2b5df0cfac1a54aae8fda47a166053717.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/24cd4865f03fcaa7b5e76245734a43309cae82e24843cd667ceb3c3d46aa3095.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/341a04c9291e3c8abdf73234d07209be2d0a7a26bbf156e1c768eb0fa927cb89.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/41bbbd67f80e8b695a6dd7b7dee9ed842e30481b77fcf4770bffbe6ff603a575.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/42a1f35d0964a5ddadc8b7bcfdc992f0e2d41c0e13889d89c4ead656c6184c8e.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/57057862192b71d7a2c5d1ef78dd5b462622932c96af2e9bf30a20381153c816.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/624c2a77dcb7007979cf123da46497a9c66fe49cd7450f26b6018f45bd756d68.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/6f15ceecaa485f10fb8d58ce571431d8817eba0228a1b8dc3c32f2b2615eb7d8.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/7281624072d7fa3ba1991c4312684fb92595b6d5ff3a0cc889e60108f2ab2771.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/79dbd3cf2e2673d4a3d3815f75e1ba8d83172cedf890d7ee173ae5d6acbd00e5.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/a108cb7fb55413596c27e5c26ab7504de599e3887fc89270d0d3610ac3c81c7a.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/b9cfe2558142967652a7a3946a86e27ad21984142a943cf42013642925f0dc4c.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/c286702ff65538ccba76472df1e9bdc10ff24187aa184224077365b8e8413e98.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/d202c27ed2da0f1864f0ec0d760a0afb406b27b637ced263cd0962385786eab0.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/f20c3e85e4cf868c660baa39734d183c36b185d088ba18a5adccde1cdbf22535.zip$all
+||github.com/siqlab/malware-retailer/raw/main/compressed-zip-t03/fdab1c4dba388ea6ea066395b32263faf409fe01f430d777d569ff32ce6095e5.zip$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/029375780db860b29c868bb8e790fc388d6a0cce986be2b6af6e0bd5d85a5e31.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/07c0acc9cd9a6ae4af685344e28e0a756d3f3a77a60f607d3f90f493d7061108.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/12cc22da6901d5fc26e8f2d3ee79a1c346f83a7ae43e25d1384e1df23d9adb69.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/15c63318bd5a529e599e5d60302f2dc14961ebcc209b735796efbfdb4c1d59fd.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/1e3d458e7ef866069259cb3b13b761e46f6278c3fca69ca846baca650b4e0f72.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/26a53caa59be5c918cfee530cd39363f8a409033d6c8af51d8f8900aa67acf9a.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/3b9da1066d77143b24ee1c9b9c9787f63400bc599fcaf4bfc8f58efc802cf760.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/59162d6533d5d56ceedd3f8a24e85e75cd198c72db5719188a4a582752d7fbe4.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/5fe74ecfd6a9eeef45bed3760e4511c300dc843d17120361e5abd021cc107567.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/659474921cf6a4423645f52a7bf5a9be0e42f41573cb6918d5fdebd66b07e4b2.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/75d8077636ee1ec7b44f33cfdc65dc4a5b96d4c0b9ac3df0879b97e2bae1f9dd.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/83f32a3d2dc9e3d9903f395a20b8ddd74a1f35487c6dffd67d9d9a014961f9d0.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/865b3db67f0565e0b41e72aa036d78183c33dab95bd4be7b4f13aebda88ab0c0.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/891b6cff6879ab69ae185a5956987ec46daaf434c60c93589c9ac06e4a4f7005.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/901d3bacbe82db5382c4f653efb11d4784254b3ad727530c73ae327b734c1a4b.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/a0538252234edd82661f55fea05df541c095a9f74368d8dca1582d797a1d084a.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/a5d66a7d45ad000c9925a7cc663df2a8944fcd5cf8de64533ea36f545599ca39.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/b5ed26bd6f40eda4ff90ec9b4a60b295c77a723d38ebebb0c70997caedc6fb8c.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/c42b27e42760a1e1812ef9db5f9abb3424c5f9fb5390b006b0a39f6b28cc259c.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/c4fc1686ecf325a5432309a2fec15357f6ff849252747ef44de7b4f1f4d4d1c2.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/cb0e88abe7aee128ff8635e44df9797d0224aff000d03fc5d9166e575b50f4a1.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/d5335cb7e978f712440f2d4eb67ed8b8813daf0f0f817ec690a3c1419e41b4c2.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/e756885f12abdf5cc8450232691a4f55c1e524262825a4a00ced4f004a2c69c1.exe$all
+||github.com/siqlab/malware-retailer/raw/main/malwares-unzipped/2023-01-03/f4438ed05971a15d70c9683dc9e1a55c583ea8c61039e9e85eb391ca6e3fa0ae.exe$all
+||github.com/software-alex/soft/archive/refs/heads/main.zip$all
+||github.com/spaten228/terpilla/raw/main/ghost_vpn_free_setup.zip$all
+||github.com/ssslllap1/asdasd/raw/main/crypted.exe$all
+||github.com/supercrack10239/crack/blob/main/addobe%20photoshop%20crack%202022.7z$all
+||github.com/supercrack10239/crack/blob/main/adobe%20after%20effects%202023%20v23.0.0.59.7z$all
+||github.com/supercrack10239/crack/blob/main/adobe%20premiere%20pro%202023%20v23.0.0.63%20rus.7z$all
+||github.com/supercrack10239/crack/blob/main/fl%20studio%20producer%20edition%2020.7.2%20build%201852.7z$all
+||github.com/supercrack10239/crack/blob/main/pass_2022_installer.7z$all
+||github.com/supercrack10239/crack/blob/main/wondershare%20filmora%20crack.7z$all
+||github.com/teamccracks/cracked/raw/main/cracked.zip$all
+||github.com/tedburke/commandcam/archive/refs/heads/master.zip$all
+||github.com/thelaimpluss/tlp-pc/raw/main/minuscrypt_crypted.exe$all
+||github.com/xkhateebx/gifthouse/raw/master/martdrum.exe$all
+||github.com/xmrig/xmrig/releases/download/v6.10.0/xmrig-6.10.0-linux-static-x64.tar.gz$all
+||hostingcloud.racing/7991.js$all
+||iili.io/jobtiis.png$all
+||kimyen.net/upload/vltkbacdau.exe$all
+||kimyen.net/upload/vltknhatrac.exe$all
+||kimyen.net/upload/vltktanthutn.exe$all
+||livetrack.in/employeemasterimages/qace.jpg$all
+||media.discordapp.net/attachments/1032350472058720336/1039600025644306442/t.png?width=810&height=520$all
+||paste.ee/d/0vd04/0$all
+||paste.ee/d/6tbjh$all
+||paste.ee/d/aboug$all
+||paste.ee/d/ahetu/0$all
+||paste.ee/d/djefv$all
+||paste.ee/d/dpx5s$all
+||paste.ee/d/itowl$all
+||paste.ee/d/kbhk3$all
+||paste.ee/d/khdfq$all
+||paste.ee/d/lgdrg$all
+||paste.ee/d/lqqyi/0$all
+||paste.ee/d/mvrcc/0$all
+||paste.ee/d/nrazb$all
+||paste.ee/d/nwskr$all
+||paste.ee/d/oq9ny$all
+||paste.ee/d/r16sv$all
+||paste.ee/d/rzz07$all
+||paste.ee/d/s5jmq$all
+||paste.ee/d/unayy$all
+||paste.ee/d/vdoj8$all
+||paste.ee/d/vzehv$all
+||paste.ee/d/wvy0p$all
+||paste.ee/d/ywmny$all
+||pastebin.com/raw/24pz470w$all
+||pastebin.com/raw/acvqhpqn$all
+||pastebin.com/raw/amkfytg5$all
+||pastebin.com/raw/cettpel9$all
+||pastebin.com/raw/l8kkk6we$all
+||pastebin.com/raw/xwjufwq9$all
+||pasteio.com/download/xce2srtqymib$all
+||pasteio.com/download/xllglhavdlkc$all
+||pasteio.com/download/xpq3rfxbtxkz$all
+||pasteio.com/download/xwxy5n0wkwgu$all
+||pasteio.com/download/xxmqin6lcz5s$all
+||raw.githubusercontent.com/arntsonl/calc_security_poc/master/dll/calc.dll$all
+||raw.githubusercontent.com/arturle1/mainrasenupmbuilgdive/main/l.exe$all
+||raw.githubusercontent.com/bero1985/berotinypascal/e34bd4164f4b7c27e7cf667dffd9274d33d6dfbe/bin/btpc.exe$all
+||raw.githubusercontent.com/blackwhite555/123/main/123.exe$all
+||raw.githubusercontent.com/catgamesyt/terrariasetup/main/terraria.rar$all
+||raw.githubusercontent.com/duantienty/client/main/client2.jpg$all
+||raw.githubusercontent.com/duantienty/miner/main/client.jpg$all
+||raw.githubusercontent.com/duantienty/miner/main/jcojp.jpg$all
+||raw.githubusercontent.com/e-x-o-d-u-s/ransomware-exodus/main/ransomware-exodus.ps1$all
+||raw.githubusercontent.com/elder4ever/powershell/main/ransom/invoke-ransom.ps1$all
+||raw.githubusercontent.com/evil-coder66/defendercontrol/main/defendercontrol.exe$all
+||raw.githubusercontent.com/faridmohammed/winlockerbuilderv5/main/winlockerbuilderv5.exe$all
+||raw.githubusercontent.com/fuzzbunch/fuzzbunch/master/payloads/doublepulsar-1.3.1.exe$all
+||raw.githubusercontent.com/helloxsploit/otte-locker/main/otte-locker.exe$all
+||raw.githubusercontent.com/hrgerge/tsestoi3n4g/main/j.bat$all
+||raw.githubusercontent.com/inheritancehope401/ce/main/6.exe$all
+||raw.githubusercontent.com/kseniakucherksenia/.github.io/main/cayv0deo9jst417.exe$all
+||raw.githubusercontent.com/l4gtr4/predator/main/sh3x.php$all
+||raw.githubusercontent.com/lacasitamx/instalador-x/master/lacasita/lacasita.sh$all
+||raw.githubusercontent.com/macigaiga/cstest/master/cs_maltest.exe$all
+||raw.githubusercontent.com/newkey2024/rep1/main/setup.msi$all
+||raw.githubusercontent.com/paulx1x9/vid/main/build.exe$all
+||raw.githubusercontent.com/phucxo9999/trungads/main/document.zip$all
+||raw.githubusercontent.com/phucxo9999/trungads/main/ngocads$all
+||raw.githubusercontent.com/progrovv/winlock/main/winlock.exe$all
+||raw.githubusercontent.com/realtek25556/rhti2/gh-pages/90hfnvo69vk2ot.bmp$all
+||raw.githubusercontent.com/shiwisha1/roblox-cookie-stealer/main/roblox/stealer%20resou%e2%80%aenls.scr$all
+||raw.githubusercontent.com/smug246/luna-injection/main/obfuscated-injection.js$all
+||raw.githubusercontent.com/softwatehub/assa/main/heaoyam78.exe$all
+||raw.githubusercontent.com/sukankersen/sss/main/software_latest_update_ver_1.3.rar$all
+||raw.githubusercontent.com/swagkarna/bypass-tamper-protection/main/nsudo.exe$all
+||raw.githubusercontent.com/victor220291/ransomcreator/master/ransom_builder.exe$all
+||raw.githubusercontent.com/xanaxgang/yea-i-do-them-drugz/main/mnr/prig.txt$all
+||raw.githubusercontent.com/xanaxgang/yea-i-do-them-drugz/main/mnr/xm.txt$all
+||reiwo-service.de/cgi-bin/o/$all
+||sendspace.com/pro/dl/qywfr3$all
+||teknoarge.com/update/ana/update.exe$all
+||textbin.net/raw/1lkc5ccspw$all
+||textbin.net/raw/butw0ld4oq$all
+||textbin.net/raw/bxsdhvfnrn$all
+||textbin.net/raw/cgeahsl8f7$all
+||textbin.net/raw/dbxah8sw1f$all
+||textbin.net/raw/iesxjvp9nc$all
+||textbin.net/raw/ld17s2rgt9$all
+||textbin.net/raw/oguv3ega7u$all
+||transfer.sh/get/3gg2z1jgon/supere.exe$all
+||transfer.sh/get/zppfa5npng/hfesga.exe$all
+||update.itopvpn.com/dl/idr/v3/pub/idrb5event.exe$all
+||uploaddeimagens.com.br/images/004/644/749/original/new_image.jpg$all
+||uploaddeimagens.com.br/images/004/652/514/original/new_image.jpg$all
+||uploaddeimagens.com.br/images/004/654/536/original/new_image.jpg$all
+||uploaddeimagens.com.br/images/004/666/676/original/vbs.jpg$all
+||uploaddeimagens.com.br/images/004/666/683/original/js.jpg$all
+||uploaddeimagens.com.br/images/004/666/683/original/js.jpg?1700183864$all
+||uploaddeimagens.com.br/images/004/667/608/original/hta.jpg$all
+||uploaddeimagens.com.br/images/004/674/364/original/vbsss.jpg$all
+||uploaddeimagens.com.br/images/004/674/364/original/vbsss.jpg?$all
+||uploaddeimagens.com.br/images/004/682/782/original/rump_vbs.jpg$all
+||uploaddeimagens.com.br/images/004/682/782/original/rump_vbs.jpg?1701793262$all
+||uploaddeimagens.com.br/images/004/682/796/original/dll.jpg$all
+||uploaddeimagens.com.br/images/004/683/777/original/rump_vbs.jpg$all
+||uploaddeimagens.com.br/images/004/683/779/original/download.jpg$all
+||uploaddeimagens.com.br/images/004/683/779/original/download.jpg?1701878864$all
+||uploaddeimagens.com.br/images/004/686/431/original/dll_vbe.jpg$all
+||uploaddeimagens.com.br/images/004/686/431/original/dll_vbe.jpg?1702073941$all
+||uploaddeimagens.com.br/images/004/689/631/original/new_image.jpg$all
+||uploaddeimagens.com.br/images/004/689/631/original/new_image.jpg?1702461175$all
+||uploaddeimagens.com.br/images/004/691/257/original/js.jpg$all
+||uploaddeimagens.com.br/images/004/691/257/original/js.jpg?1702591609$all
+||uplooder.net/img/image/1/34fec500e907172f97bbd6338c9b6f4c/paymentconfirmation-kxpjsopl.bmp$all
+||uplooder.net/img/image/55/3aaf30c5197afc426d8a54c0eab89f89/vbc-cmwddmkj.png$all
+||vk.com/doc164097589_672772894?hash=r2f52hr4iwhq6oanzzzdbogzzin7qlyqvbyg9mwfcwz&dl=tx6ydxzxchzczodvizh23nh3lkvstem815uphdhmzet&api=1&no_preview=1#rise$all
+||vk.com/doc164097589_672773524?hash=whfml4m0b8zhwopj7relucrkil17xoghiixsw6ir5vt&dl=rmeu6ftmswwvk6vol7mvwgzao6svbmjs9xpdafywusp&api=1&no_preview=1#xin$all
+||vk.com/doc164097589_672773588?hash=jzhpjjsyg4yagxkfzsffemmjqopf9dnvpsacjvxx3z4&dl=wbojhivc1jdfk2hvc67fhl2prexkdmcczb1zolxszfz&api=1&no_preview=1#otz$all
+||vk.com/doc164097589_672775196?hash=2dj4mcbxgjwsskxxrf39mql1jc2a9i6kqyzsza4zjvh&dl=y9kavl1bqynsnjs8mdiqg0tvry5txjdz3sdi895pk94&api=1&no_preview=1#maff$all
+||vk.com/doc164097589_672794721?hash=ilffzxjds2a6wmniauywhgrfqhqyh6xpbssztgvye4z&dl=fetpk8ywvtm0bwnzjl8naltcgh9n6ecbbmrepuz8fo0&api=1&no_preview=1#sing$all
+||vk.com/doc164097589_672795979?hash=wtcdh98ni7ci6lenw4pawjmucuhnvzlwakg0iringfh&dl=v7o704lzw6mlfogdl6ek7opaa2yzcyptjdiv8hbw1xh&api=1&no_preview=1#per$all
+||vk.com/doc164097589_672801119?hash=bzufsrx4hpsm3pe8qkp3dca15ykdqkxfztoj6k59vih&dl=x4bswiochitwf4nufuuomb5jzkdanlpd6weic57jkbz&api=1&no_preview=1#rise$all
+||vk.com/doc164097589_672809633?hash=9pcczyhyyuzfuzmgct2u2n2zflbgdlnilybqlqd5ajd&dl=dv5oqgutzsjc4d5bz1eoq7hahaulyasrb6yn6bvxmud&api=1&no_preview=1#1$all
+||vk.com/doc164097589_672811753?hash=qixm1scwslblnzgrueesit4jdhdjimhbaqphmkakde0&dl=r3dw78fkoye17kovcxm7yzwx2gkyoz2gfiuvwrn5mqs&api=1&no_preview=1#7b$all
+||vk.com/doc164097589_672813098?hash=z47hlkggzbv5cscvpi0t6ucwpwgyzxozj1x38vkt4xc&dl=xlyizoqreznq8v2qa37gk9bebkj7l3ptu6pb1tfcnlo&api=1&no_preview=1$all
+||vk.com/doc164097589_672813475?hash=mt5nemk3vrcela6oqlueqxl1t92za0ivgfjmdr3xbtx&dl=cjweov815zdhsaczm3ciznfgfd5om7uij8spt2y5e8k&api=1&no_preview=1#rise$all
+||vk.com/doc164097589_672815513?hash=6kpgsczglgazjtqgorttdzg3zwrrvanz9zxf3vuvyih&dl=z5kdzzn0d9jjmw65pcj1mzp30v9gk3aue9gbxfrbb78&api=1&no_preview=1#ww11$all
+||vk.com/doc164097589_672823818?hash=owetos7dnkrzdovzwjhmposhsumza4ntmt4crdzxzzl&dl=cweashzhqvqmzkeqdqjwpkqxatswryeioqhzvlzozph&api=1&no_preview=1#dimatest$all
+||vk.com/doc164097589_672823946?hash=dqtckljteuolh6vtjomrbmpvqjtzugnztz5kzsc43l4&dl=zpla9rbszjzbqxwfkwrk114kauwwndnkuellnagln44&api=1&no_preview=1#crocks$all
+||vk.com/doc164097589_672835249?hash=zlpufgushlvoz75x6lxbfxt5pilvan4w5oskmruidl4&dl=jaogl9fgzqzzegtzkdqg7m3zttcugogdbeyqdbewkhh&api=1&no_preview=1#per$all
+||vk.com/doc164097589_672838642?hash=sarzvf1ibv8fpjgobdypflu8lsvj0y4awauobse8zsg&dl=xkpkgmdktuze5qnibynvqijz3ftcqstnpmhbzz3cuit&api=1&no_preview=1$all
+||vk.com/doc164097589_672848110?hash=xhxg1mrsvnfrabtgswvehucvm3vaxt39sw3lazqenth&dl=xlylkzn7bb1ou908sn7kmeynnesxbeuapd0j6pvsmlw&api=1&no_preview=1#orig$all
+||vk.com/doc164097589_672848165?hash=qwz41xkv3bsnxkv5lrzvtnwbkmhhjogu9sjcdzqrqzk&dl=fybrpz6569bjgpljbqp97spp0uymzr7isl7jenluakl&api=1&no_preview=1#test22$all
+||vk.com/doc164097589_672848890?hash=agdfaivazhok4zggfx7mbsw92mwi0mwwiubmnobyvat&dl=ruxkmvehwyskjecmagjaizk02aznmkbw815id7q7zzl&api=1&no_preview=1#rise$all
+||vk.com/doc164097589_672855059?hash=guiwjew8cbbl4itmmv3lsuqd65mhlawrna9idxpaaz4&dl=zo7idhcl7mwbqelxdw29p9jcaqxrzkcc4l6vsh7lcqp&api=1&no_preview=1#maff$all
+||vk.com/doc164097589_672855116?hash=msh9tutepii3wiyev6kebbkdxiwetahfqibe9dzyqzx&dl=tz5ygfei1sdhnb9uzsvx9gzre6edwa4elozsedog8yt&api=1&no_preview=1#1$all
+||vk.com/doc164097589_672858091?hash=irnkuufnqzbbztsygms9wz3uvxwqf1zupwzw9rczazd&dl=2x93p814ks67lwvwsw2gorwv23dolbfwkozhzjbycc4&api=1&no_preview=1#crypted$all
+||vk.com/doc164097589_672862278?hash=21i7dsvbmxeztzpvqpqsqxrw1rlsakucst1uy19cvpt&dl=qqyius7egr6nllrcxrfbe55kfliilrlyz1gtllcabxc&api=1&no_preview=1$all
+||vk.com/doc164097589_672882872?hash=bry6tackhqnbhrzmyemfvaudteibslh5w2jnyvfoezg&dl=1oafkvae12zczmk7l98sxbkmvjwfasjqmtvtfzwqsex&api=1&no_preview=1#orig$all
+||vk.com/doc164097589_672882914?hash=zp5pefcwr5iisvq0muycceryhfkz5aujqzxztd6egzw&dl=yft5x1i8jhq3uiqgaygi1felppzl7mtklujhpq1mb0d&api=1&no_preview=1#per$all
+||vk.com/doc164097589_672894834?hash=ogutktyvltqealjsj8nzr6uxxicpeiofarh4bcoqf5o&dl=h3jslbpt4ig8x8tytnydsb5dxoiscod2zphg1ac3hok&api=1&no_preview=1#xin$all
+||vk.com/doc164097589_672894867?hash=82n4une6lta551fjlmroyngz2olcajii9rezhk62zyh&dl=i0mecfkc77cwiz42qedgwkh6aeuxkhlqeh6vskdzvms&api=1&no_preview=1#smad$all
+||vk.com/doc164097589_672894910?hash=axvvegnswzslqcleej7mzhu1o12ix2uzbszrhwldarx&dl=fxgv44ctepkuk9vzbz51vaonnqdpahn2bzjgecuo36t&api=1&no_preview=1#maff$all
+||vk.com/doc164097589_672899681?hash=akyjcl6re4gvigev5rly4zpfuip3mey3g0stznncrsx&dl=z5f7ed5rtaluicfmhui6cghktxrbopaaabpqqz9zcg4&api=1&no_preview=1$all
+||vk.com/doc164097589_672901273?hash=mhv743wdztolnz5txncj381jhlpbmgvuhp8ztd2uwpk&dl=vjlznv50rnc2brmjttebuhyfzx4ipslnxonzh8y0nag&api=1&no_preview=1#lumma$all
+||vk.com/doc164097589_672902175?hash=6f6damsr5az5n8oxujcrrg91flag0feian9pw8iznto&dl=7pyo88tuz7angsy8aj2egyvzo6szh4r8izyf6ddfobk&api=1&no_preview=1#smad$all
+||vk.com/doc164097589_672903012?hash=lzmmca9wtpi86q8eqvyhgkf4pewv6tquspcjq9zaolp&dl=tuioima6cagwehgoyrnyvglmryq2ulmj99pzzbmk7tx&api=1&no_preview=1#kisrise$all
+||vk.com/doc164097589_672903039?hash=nlciohutnzebmkjdtlkph9tzqwp6h50zpthqylyvgrz&dl=5ynf80dzztzjzhbzhssgmtfblemc56upedphmi9hqdo&api=1&no_preview=1#otrab$all
+||vk.com/doc164097589_672904566?hash=ciss8hitt3bbj5jlo8zg03t8axdyfkkanvpdxtqpmpg&dl=a6q6ym14vlnzhdvcicljv0hu0p4mjgjyxb6nqlezzyo&api=1&no_preview=1#1$all
+||vk.com/doc418490229_670717111?hash=ma0zcz4pca0pbv2ilxft0djii4ucebwpwl0ssdjfbns&dl=bxgyqgvcsyyzzokvvmbujukarbtibiz1gy9q6agec38&api=1&no_preview=1#per$all
+||vk.com/doc418490229_670718069?hash=4jc5lyloseu4pcv6rv3g4vpc45cbncwymbvk2ovnnrk&dl=zsabrx4d4ufuiskxzeqkxrrcjg2dwqulgrkqmwzaaht&api=1&no_preview=1#xin$all
+||vk.com/doc418490229_670722112?hash=frdzkdne6d6ukdedkrcf6xcfgpnjn8opziuzguyvq8h&dl=txcmuye7zzqj9a5e4krlcafoobu42eqtl6c7ynnnki8&api=1&no_preview=1#rise$all
+||vk.com/doc418490229_670723755?hash=ea90h10ztvw6xvsa1xz26bmknorvxr40nkswq1tydtd&dl=y7bueutrqcpaeqdwwz7zrjm4gzfwghvruhqnchzs4kt&api=1&no_preview=1#1$all
+||vk.com/doc418490229_670753541?hash=cwvzbopmemmojb7ycamm1dqzhkxqi8tp1wczamohxeg&dl=gzyhq0httusddra6lgsgxjfxwffzzsxqoqqz8utkizh&api=1&no_preview=1#maff$all
+||vk.com/doc418490229_670753644?hash=zugevwezulqi6sg1qjazzlefgysy1eeqv3ha3exfplp&dl=00mguxkrvpup1momuua0vwwvtd6l4j4jkujltihk9et&api=1&no_preview=1#persom$all
+||vk.com/doc418490229_670756815?hash=ez7tbegyvnzbljzkhapq74bfzr3c7ma8isgnpc6npj8&dl=sphmvwaqmv85zk6rapz3izaqdyauwrzewzokrinh5it&api=1&no_preview=1#image$all
+||vk.com/doc418490229_670757138?hash=zxgu00sb48fpcw80miqvbpoteprfzjcryfcphtodiyl&dl=qimdxepcvciqxvemihmyt33amjszgdyfmexqjqivnlp&api=1&no_preview=1#rise$all
+||vk.com/doc418490229_670757513?hash=oevegtbzr6dj4lo71cwdorbqxkgghuybiccarsahcd0&dl=2i51smt9hzksupfqtyctd0cvnhfwxzrnzeanlifzizo&api=1&no_preview=1$all
+||vk.com/doc418490229_670758293?hash=ah48gkqfodzzbkigdnjwwmgbyovs8urqycouyxkwlwh&dl=zkj7zjarzrflucb0sp3le6ly0dpkbppzuteftsdhldz&api=1&no_preview=1#maff$all
+||vk.com/doc418490229_670765405?hash=xpqhmzzvwoaohpdz3yzijngqvq6tooipywucmof2kiz&dl=ea5fdesgw1pxv8barae2vsazfqwj4nxkybdntcmfbi4&api=1&no_preview=1#originalotr$all
+||vk.com/doc418490229_670770364?hash=txxuzk5psrj01ur9bvyycntch7k0ufse5xtwueoqcys&dl=uocwuqryztgbedgvuusqpeuidamwat1s7qhdxr2xz1p&api=1&no_preview=1#1exe$all
+||vk.com/doc418490229_670776901?hash=6ffzozryhnmu3cwr0odvmwkd3csa6wjg8hpg0qn27o0&dl=oa1nay8nyo0jakylbuah2jpxtxnrpkcz7a2znzt1sgz&api=1&no_preview=1#crypted2k$all
+||vk.com/doc418490229_670781472?hash=yzpp2xthgiaugb6j5dgnlbi2eohnyhlh9thzpljxgds&dl=duwqibqzerjepu8n4vieh2boxxbovykp8pwxzrqlm0s&api=1&no_preview=1#cryptesgerg$all
+||walkinglate.com/w/w-12.exe$all
+||wallpapercave.com/uwp/uwp4072801.png$all
+||wallpapercave.com/uwp/uwp4082989.png$all
+||wallpapercave.com/uwp/uwp4098462.png$all
+||wallpapercave.com/uwp/uwp4194121.png$all
+||wallpapercave.com/uwp/uwp4203994.png$all
+||wallpapercave.com/uwp/uwp4228677.png$all
+||wtools.io/code/dl/bhob$all
+||wtools.io/code/dl/bl7q$all
+||wtools.io/code/dl/blgw$all
+||wtools.io/code/dl/blhb$all
+||wtools.io/code/dl/bmfk$all
+||wtools.io/code/dl/bojp$all
+||wtools.io/code/dl/booa$all
+||wtools.io/code/dl/bouq$all
+||wtools.io/code/dl/bpno$all
+||wtools.io/code/dl/bpx3$all
+||wtools.io/code/dl/breq$all
+||wtools.io/code/dl/bsko$all
diff --git a/uAssets/tools/make-diffpatch.sh b/uAssets/tools/make-diffpatch.sh
new file mode 100755
index 0000000..81e0aab
--- /dev/null
+++ b/uAssets/tools/make-diffpatch.sh
@@ -0,0 +1,100 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+set -e
+
+# To be executed at the root of CDN repo
+#
+# It's not being hosted at CDN because that
+# repo is also used as a website
+
+VERSION=$1
+if [[ -z $VERSION ]]; then
+ echo "Error: No version provided, aborting"
+ exit 1
+fi
+
+PATCHES_DIR=$2
+if [[ -z $PATCHES_DIR ]]; then
+ echo "Error: patches directory is not provided, aborting"
+ exit 1
+fi
+
+PREVIOUS_VERSION=$(<version)
+PREVIOUS_PATCH_FILE="$PATCHES_DIR/$PREVIOUS_VERSION.patch"
+: > "$PREVIOUS_PATCH_FILE"
+
+NEXT_PATCH_FILE="$PATCHES_DIR/$VERSION.patch"
+
+# Temporary file to receive the RCS patch data
+DIFF=$(mktemp)
+
+FILES=( $(git diff --name-only) )
+for FILE in "${FILES[@]}"; do
+
+ # Reference:
+ # https://github.com/ameshkov/diffupdates
+
+ if (head "$FILE" | grep -q '^! Version: '); then
+ sed -Ei "1,10s;^! Version: .+$;! Version: $VERSION;" "$FILE"
+ fi
+
+ # Patches are for filter lists supporting differential updates
+ if (head "$FILE" | grep -q '^! Diff-Path: '); then
+
+ # Extract diff name from `! Diff-Path:` field
+ DIFF_NAME=$(grep -m 1 -oP '^! Diff-Path: [^#]+#?\K.*' "$FILE")
+ # Fall back to `! Diff-Name:` field if no name found
+ # Remove once `! Diff-Name:` is no longer needed after transition
+ if [[ -z $DIFF_NAME ]]; then
+ DIFF_NAME=$(grep -m 1 -oP '^! Diff-Name: \K.+' "$FILE")
+ fi
+ echo "Info: Diff name for ${FILE} is ${DIFF_NAME}"
+
+ # We need a patch name to generate a valid patch
+ if [[ -n $DIFF_NAME ]]; then
+
+ # Compute relative patch path
+ PATCH_PATH="$(realpath --relative-to="$(dirname "$FILE")" "$NEXT_PATCH_FILE")"
+
+ # Fill in patch path to next version (do not clobber hash portion)
+ sed -Ei "1,10s;^! Diff-Path: [^#]+(#.+)?$;! Diff-Path: $PATCH_PATH\1;" "$FILE"
+
+ # Compute the RCS diff between current version and new version
+ git show "HEAD:$FILE" | diff -n - "$FILE" > "$DIFF" || true
+
+ FILE_CHECKSUM="$(sha1sum "$FILE")"
+ FILE_CHECKSUM=${FILE_CHECKSUM:0:10}
+
+ DIFF_LINES=$(wc -l < "$DIFF")
+ echo "Info: Computed patch for ${FILE} has ${DIFF_LINES} lines"
+
+ # Populate output file with patch information
+ echo "Info: Adding patch data of ${FILE} to ${PREVIOUS_PATCH_FILE}"
+ echo "diff name:$DIFF_NAME lines:$DIFF_LINES checksum:$FILE_CHECKSUM" >> "$PREVIOUS_PATCH_FILE"
+ cat "$DIFF" >> "$PREVIOUS_PATCH_FILE"
+
+ else
+
+ echo "Error: Diff name not found, skipping"
+
+ fi
+ fi
+
+ # Stage changed file
+ echo "Info: Staging $FILE"
+ git add -u "$FILE"
+
+done
+
+# Create a patch only if there was a previous version
+if [[ -n $PREVIOUS_VERSION ]]; then
+ echo "Info: Staging $PREVIOUS_PATCH_FILE"
+ git add "$PREVIOUS_PATCH_FILE"
+fi
+
+echo -n "$VERSION" > version
+git add version
+
+rm -f "$DIFF"
diff --git a/uAssets/tools/make-easylist.mjs b/uAssets/tools/make-easylist.mjs
new file mode 100644
index 0000000..b648363
--- /dev/null
+++ b/uAssets/tools/make-easylist.mjs
@@ -0,0 +1,201 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2022-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+// jshint node:true, esversion:9
+
+'use strict';
+
+/******************************************************************************/
+
+import fs from 'fs/promises';
+import path from 'path';
+import process from 'process';
+
+/******************************************************************************/
+
+const expandedParts = new Set();
+
+/******************************************************************************/
+
+const commandLineArgs = (( ) => {
+ const args = new Map();
+ let name, value;
+ for ( const arg of process.argv.slice(2) ) {
+ const pos = arg.indexOf('=');
+ if ( pos === -1 ) {
+ name = arg;
+ value = '';
+ } else {
+ name = arg.slice(0, pos);
+ value = arg.slice(pos+1);
+ }
+ args.set(name, value);
+ }
+ return args;
+})();
+
+/******************************************************************************/
+
+function expandTemplate(wd, parts) {
+ const out = [];
+ const reInclude = /^%include +(.+):(.+)%\s+/gm;
+ const trim = text => trimSublist(text);
+ for ( const part of parts ) {
+ if ( typeof part !== 'string' ) {
+ out.push(part);
+ continue;
+ }
+ let lastIndex = 0;
+ for (;;) {
+ const match = reInclude.exec(part);
+ if ( match === null ) { break; }
+ out.push(part.slice(lastIndex, match.index).trim());
+ const repo = match[1].trim();
+ const fpath = `${match[2].trim()}`;
+ if ( expandedParts.has(fpath) === false ) {
+ console.info(` Inserting ${fpath}`);
+ out.push(
+ out.push({ file: `${fpath}` }),
+ `! *** ${repo}:${fpath} ***`,
+ fs.readFile(`${wd}/${fpath}`, { encoding: 'utf8' })
+ .then(text => fpath.includes('header') ? text : trim(text)),
+ );
+ expandedParts.add(fpath);
+ }
+ lastIndex = reInclude.lastIndex;
+ }
+ out.push(part.slice(lastIndex).trim());
+ }
+ return out;
+}
+
+/******************************************************************************/
+
+function expandIncludeDirectives(wd, parts) {
+ const out = [];
+ const reInclude = /^!#include (.+)\s*/gm;
+ const trim = text => trimSublist(text);
+ let parentPath = '';
+ for ( const part of parts ) {
+ if ( typeof part !== 'string' ) {
+ if ( typeof part === 'object' && part.file !== undefined ) {
+ parentPath = part.file;
+ }
+ out.push(part);
+ continue;
+ }
+ let lastIndex = 0;
+ for (;;) {
+ const match = reInclude.exec(part);
+ if ( match === null ) { break; }
+ out.push(part.slice(lastIndex, match.index).trim());
+ const fpath = `${path.dirname(parentPath)}/${match[1].trim()}`;
+ if ( expandedParts.has(fpath) === false ) {
+ console.info(` Inserting ${fpath}`);
+ out.push(
+ { file: fpath },
+ `! *** ${fpath} ***`,
+ fs.readFile(`${wd}/${fpath}`, { encoding: 'utf8' })
+ .then(text => fpath.includes('header') ? text : trim(text)),
+ );
+ expandedParts.add(fpath);
+ }
+ lastIndex = reInclude.lastIndex;
+ }
+ out.push(part.slice(lastIndex).trim());
+ }
+ return out;
+}
+
+/******************************************************************************/
+
+function trimSublist(text) {
+ // Remove empty comment lines
+ text = text.replace(/^!\s*$(?:\r\n|\n)/gm, '');
+ // Remove sublist header information: the importing list will provide its
+ // own header.
+ text = text.trim().replace(/^(?:!\s+[^\r\n]+?(?:\r\n|\n))+/s, '');
+ return text;
+}
+
+/******************************************************************************/
+
+function minify(text) {
+ // remove issue-related comments
+ text = text.replace(/^! https:\/\/.*?[\n\r]+/gm, '');
+ // remove empty lines
+ text = text.replace(/^[\n\r]+/gm, '');
+ // convert potentially present Windows-style newlines
+ text = text.replace(/\r\n/g, '\n');
+ return text;
+}
+
+/******************************************************************************/
+
+function assemble(parts) {
+ const out = [];
+ for ( const part of parts ) {
+ if ( typeof part !== 'string' ) { continue; }
+ out.push(part);
+ }
+ return out.join('\n').trim() + '\n';
+}
+
+/******************************************************************************/
+
+async function main() {
+ const workingDir = commandLineArgs.get('dir') || '.';
+ const inFile = commandLineArgs.get('in');
+ if ( typeof inFile !== 'string' || inFile === '' ) {
+ process.exit(1);
+ }
+ const outFile = commandLineArgs.get('out');
+ if ( typeof outFile !== 'string' || outFile === '' ) {
+ process.exit(1);
+ }
+
+ console.info(` Using template at ${inFile}`);
+
+ const inText = fs.readFile(`${workingDir}/${inFile}`, { encoding: 'utf8' });
+
+ let parts = [ inText ];
+ do {
+ parts = await Promise.all(parts);
+ parts = expandTemplate(workingDir, parts);
+ } while ( parts.some(v => v instanceof Promise) );
+
+ do {
+ parts = await Promise.all(parts);
+ parts = expandIncludeDirectives(workingDir, parts);
+ } while ( parts.some(v => v instanceof Promise));
+
+ let afterText = assemble(parts);
+
+ if ( commandLineArgs.get('minify') !== undefined ) {
+ afterText = minify(afterText);
+ }
+
+ console.info(` Creating ${outFile}`);
+
+ fs.writeFile(outFile, afterText);
+}
+
+main();
diff --git a/uAssets/tools/make-easylist.sh b/uAssets/tools/make-easylist.sh
new file mode 100755
index 0000000..0185d8a
--- /dev/null
+++ b/uAssets/tools/make-easylist.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+echo "*** uAssets: Assembling EasyList lists"
+TMPDIR=$(mktemp -d)
+mkdir -p $TMPDIR/easylist
+git clone --depth 1 https://github.com/easylist/easylist.git $TMPDIR/easylist
+cp -R templates/easy*.template $TMPDIR/easylist/
+
+echo "*** uAssets: Assembling easylist.txt"
+node ./tools/make-easylist.mjs dir=$TMPDIR/easylist in=easylist.template out=thirdparties/easylist/easylist.txt
+
+echo "*** uAssets: Assembling easyprivacy.txt"
+node ./tools/make-easylist.mjs dir=$TMPDIR/easylist in=easyprivacy.template out=thirdparties/easylist/easyprivacy.txt
+
+echo "*** uAssets: Assembling easylist-annoyances.txt"
+node ./tools/make-easylist.mjs dir=$TMPDIR/easylist in=easylist-annoyances.template out=thirdparties/easylist/easylist-annoyances.txt
+
+echo "*** uAssets: Assembling easylist-cookies.txt"
+node ./tools/make-easylist.mjs dir=$TMPDIR/easylist in=easylist-cookies.template out=thirdparties/easylist/easylist-cookies.txt
+
+echo "*** uAssets: Assembling easylist-social.txt"
+node ./tools/make-easylist.mjs dir=$TMPDIR/easylist in=easylist-social.template out=thirdparties/easylist/easylist-social.txt
+
+echo "*** uAssets: Assembling easylist-newsletters.txt"
+node ./tools/make-easylist.mjs dir=$TMPDIR/easylist in=easylist-newsletters.template out=thirdparties/easylist/easylist-newsletters.txt
+
+echo "*** uAssets: Assembling easylist-notifications.txt"
+node ./tools/make-easylist.mjs dir=$TMPDIR/easylist in=easylist-notifications.template out=thirdparties/easylist/easylist-notifications.txt
+
+echo "*** uAssets: Assembling easylist-chat.txt"
+node ./tools/make-easylist.mjs dir=$TMPDIR/easylist in=easylist-chat.template out=thirdparties/easylist/easylist-chat.txt
+
+rm -rf $TMPDIR
diff --git a/uAssets/tools/make-ublock.sh b/uAssets/tools/make-ublock.sh
new file mode 100755
index 0000000..f35fb13
--- /dev/null
+++ b/uAssets/tools/make-ublock.sh
@@ -0,0 +1,21 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+echo "*** uAssets: Assembling filters/filters.txt"
+node ./tools/make-easylist.mjs in=templates/ublock-filters.template out=filters/filters.min.txt minify=1
+
+echo "*** uAssets: Assembling filters/quick-fixes.txt"
+node ./tools/make-easylist.mjs in=templates/ublock-quick-fixes.template out=filters/quick-fixes.min.txt minify=1
+
+echo "*** uAssets: Assembling filters/privacy.txt"
+node ./tools/make-easylist.mjs in=templates/ublock-privacy.template out=filters/privacy.min.txt minify=1
+
+echo "*** uAssets: Assembling filters/unbreak.txt"
+node ./tools/make-easylist.mjs in=templates/ublock-unbreak.template out=filters/unbreak.min.txt minify=1
+
+echo "*** uAssets: Assembling filters/badware.txt"
+node ./tools/make-easylist.mjs in=templates/ublock-badware.template out=filters/badware.min.txt minify=1
+
+echo "*** uAssets: Assembling filters/annoyances.txt"
+node ./tools/make-easylist.mjs in=templates/ublock-annoyances.template out=filters/annoyances.min.txt minify=1
diff --git a/uAssets/tools/make-validate.sh b/uAssets/tools/make-validate.sh
new file mode 100755
index 0000000..8d7ff9b
--- /dev/null
+++ b/uAssets/tools/make-validate.sh
@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+# https://stackoverflow.com/a/52526704
+echo "*** Importing required uBO files"
+mkdir -p build/validate
+git clone --filter=blob:none --no-checkout https://github.com/gorhill/uBlock.git build/validate/uBlock
+cd build/validate/uBlock
+git sparse-checkout init --cone
+git sparse-checkout set src/js src/lib
+cd -
diff --git a/uAssets/tools/need-patch.mjs b/uAssets/tools/need-patch.mjs
new file mode 100644
index 0000000..c0cf231
--- /dev/null
+++ b/uAssets/tools/need-patch.mjs
@@ -0,0 +1,81 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2023-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+// jshint node:true, esversion:9
+
+'use strict';
+
+/******************************************************************************/
+
+import fs from 'fs/promises';
+import path from 'path';
+import process from 'process';
+
+/******************************************************************************/
+
+const commandLineArgs = (( ) => {
+ const args = new Map();
+ let name, value;
+ for ( const arg of process.argv.slice(2) ) {
+ const pos = arg.indexOf('=');
+ if ( pos === -1 ) {
+ name = arg;
+ value = '';
+ } else {
+ name = arg.slice(0, pos);
+ value = arg.slice(pos+1);
+ }
+ args.set(name, value);
+ }
+ return args;
+})();
+
+/******************************************************************************/
+
+async function main() {
+ const MS_PER_HOUR = 60 * 60 * 1000;
+ const targetDelayInHours = parseInt(commandLineArgs.get('delay') || '5', 10);
+
+ const hoursSinceEpoch = Math.floor(Date.now() / MS_PER_HOUR);
+ if ( (hoursSinceEpoch % targetDelayInHours) === 0 ) {
+ console.log('yes');
+ process.exit(0);
+ }
+
+ const version = await fs.readFile('version', { encoding: 'utf8' });
+ const match = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/.exec(version);
+ if ( match === null ) {
+ console.log('yes');
+ process.exit(0);
+ }
+
+ const date = new Date();
+ date.setUTCFullYear(
+ parseInt(match[1], 10),
+ parseInt(match[2], 10) - 1,
+ parseInt(match[3], 10)
+ );
+ date.setUTCHours(0, parseInt(match[4], 10), 0, 0);
+ const expiredTimeInHours = (Date.now() - date.getTime()) / MS_PER_HOUR;
+ console.log(expiredTimeInHours >= targetDelayInHours ? 'yes' : 'no');
+}
+
+main();
diff --git a/uAssets/tools/update-3rdparties.sh b/uAssets/tools/update-3rdparties.sh
new file mode 100755
index 0000000..f007c0c
--- /dev/null
+++ b/uAssets/tools/update-3rdparties.sh
@@ -0,0 +1,30 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+TEMPFILE=$(mktemp)
+
+echo "*** uAssets: updating remote assets..."
+
+declare -A assets
+assets=(
+ ['thirdparties/pgl.yoyo.org/as/serverlist']='https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&startdate%5Bday%5D=&startdate%5Bmonth%5D=&startdate%5Byear%5D=&mimetype=plaintext'
+ ['thirdparties/publicsuffix.org/list/effective_tld_names.dat']='https://publicsuffix.org/list/public_suffix_list.dat'
+ ['thirdparties/urlhaus-filter/urlhaus-filter-online.txt']='https://malware-filter.gitlab.io/urlhaus-filter/urlhaus-filter-online.txt'
+)
+
+for i in "${!assets[@]}"; do
+ localURL="$i"
+ remoteURL="${assets[$i]}"
+ echo "*** Downloading ${remoteURL}"
+ if wget -q -T 30 -O "$TEMPFILE" -- "$remoteURL"; then
+ if [ -s "$TEMPFILE" ]; then
+ if ! cmp -s "$TEMPFILE" "$localURL"; then
+ echo " New version found: ${localURL}"
+ if [ "$1" != "dry" ]; then
+ mv "$TEMPFILE" "$localURL"
+ fi
+ fi
+ fi
+ fi
+done
diff --git a/uAssets/tools/update-diffpatches.sh b/uAssets/tools/update-diffpatches.sh
new file mode 100755
index 0000000..406598e
--- /dev/null
+++ b/uAssets/tools/update-diffpatches.sh
@@ -0,0 +1,115 @@
+#!/usr/bin/env bash
+#
+# This script assumes a linux environment
+
+set -e
+
+# To be executed at the root of CDN repo
+#
+# It's not being hosted at CDN because that
+# repo is also used as a website
+
+REPO_DIR=$1
+if [[ -z $REPO_DIR ]]; then
+ echo "Error: repo directory is not provided, aborting"
+ exit 1
+fi
+
+PATCHES_DIR=$2
+if [[ -z $PATCHES_DIR ]]; then
+ echo "Error: patches directory is not provided, aborting"
+ exit 1
+fi
+
+FILTER_FILES=$3
+if [[ -z $FILTER_FILES ]]; then
+ echo "Error: filter lists are not provided, aborting"
+ exit 1
+fi
+FILTER_FILES=( "$FILTER_FILES" )
+
+PATCH_FILES=( $(ls -1v "$PATCHES_DIR"/*.patch | head -n -1) )
+
+# Keep only the most recent (5-day x 4-per-day) patches
+OBSOLETE_PATCHES=( $(ls -1v "$PATCHES_DIR"/*.patch | head -n -20) )
+for FILE in "${OBSOLETE_PATCHES[@]}"; do
+ echo "Removing obsolete patch $FILE"
+ git rm "$FILE"
+done
+
+NEW_PATCH_FILE=$(mktemp)
+DIFF_FILE=$(mktemp)
+
+for PATCH_FILE in "${PATCH_FILES[@]}"; do
+
+ # Extract tag from patch file name
+ [[ ${PATCH_FILE} =~ ^$PATCHES_DIR/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)\.patch$ ]] && \
+ PREVIOUS_VERSION=${BASH_REMATCH[1]}
+
+ # This will receive a clone of an old version of the current repo
+ echo "Fetching repo at $PREVIOUS_VERSION version"
+ OLD_REPO=$(mktemp -d)
+ git clone -q --single-branch --branch "$PREVIOUS_VERSION" --depth=1 "https://github.com/$REPO_DIR.git" "$OLD_REPO" 2>/dev/null || true
+
+ # Skip if version doesn't exist
+ if [ -z "$(ls -A "$OLD_REPO" 2>/dev/null)" ]; then
+ continue;
+ fi
+
+ : > "$NEW_PATCH_FILE"
+
+ for FILTER_LIST in ${FILTER_FILES[@]}; do
+
+ if [ ! -f "$OLD_REPO/$FILTER_LIST" ]; then continue; fi
+
+ # Patches are for filter lists supporting differential updates
+ if ! (head "$OLD_REPO/$FILTER_LIST" | grep -q '^! Diff-Path: '); then
+ continue
+ fi
+
+ # Reference:
+ # https://github.com/ameshkov/diffupdates
+
+ # Extract diff name from `! Diff-Path:` field
+ DIFF_NAME=$(grep -m 1 -oP '^! Diff-Path: [^#]+#?\K.*' "$FILTER_LIST")
+ # Fall back to `! Diff-Name:` field if no name found
+ # Remove once `! Diff-Name:` is no longer needed after transition
+ if [[ -z $DIFF_NAME ]]; then
+ DIFF_NAME=$(grep -m 1 -oP '^! Diff-Name: \K.+' "$FILTER_LIST")
+ fi
+
+ # We need a patch name to generate a valid patch
+ if [[ -z $DIFF_NAME ]]; then
+ echo "Info: $FILTER_LIST is missing a patch name, skipping"
+ continue
+ fi
+
+ # Compute the RCS diff between current version and new version
+ diff -n "$OLD_REPO/$FILTER_LIST" "$FILTER_LIST" > "$DIFF_FILE" || true
+
+ FILE_CHECKSUM=$(sha1sum "$FILTER_LIST")
+ FILE_CHECKSUM=${FILE_CHECKSUM:0:10}
+
+ DIFF_LINE_COUNT=$(wc -l < "$DIFF_FILE")
+
+ # Patch header
+ DIFF_HEAD="diff name:$DIFF_NAME lines:$DIFF_LINE_COUNT checksum:$FILE_CHECKSUM"
+ printf "\tAdding diff: %s\n" "$DIFF_HEAD"
+ echo "$DIFF_HEAD" >> "$NEW_PATCH_FILE"
+ # Patch data
+ cat "$DIFF_FILE" >> "$NEW_PATCH_FILE"
+
+ done
+
+ rm -rf "$OLD_REPO"
+
+ # Stage changed patch file
+ mv -f "$NEW_PATCH_FILE" "$PATCH_FILE"
+ ls -l "$PATCH_FILE"
+ echo "Info: Staging ${PATCH_FILE}"
+ git add -u "$PATCH_FILE"
+
+done
+
+rm -f "$DIFF_FILE"
+rm -f "$NEW_PATCH_FILE"
diff --git a/uAssets/tools/validate/config.js b/uAssets/tools/validate/config.js
new file mode 100644
index 0000000..270aedb
--- /dev/null
+++ b/uAssets/tools/validate/config.js
@@ -0,0 +1,33 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2022-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+// jshint node:true, esversion:8, laxbreak:true
+
+'use strict';
+
+export default {
+ dnsQueries: [
+ 'https://cloudflare-dns.com/dns-query?name=${hn}&type=A',
+ 'https://dns.google/resolve?name=${hn}&type=A',
+ ],
+ // ms
+ throttle: 250,
+};
diff --git a/uAssets/tools/validate/package.json b/uAssets/tools/validate/package.json
new file mode 100644
index 0000000..c10527a
--- /dev/null
+++ b/uAssets/tools/validate/package.json
@@ -0,0 +1,6 @@
+{
+ "engines": {
+ "node": ">=17.5.0"
+ },
+ "type": "module"
+}
diff --git a/uAssets/tools/validate/validate.js b/uAssets/tools/validate/validate.js
new file mode 100644
index 0000000..ce448f8
--- /dev/null
+++ b/uAssets/tools/validate/validate.js
@@ -0,0 +1,321 @@
+/*******************************************************************************
+
+ uBlock Origin - a browser extension to block requests.
+ Copyright (C) 2022-present Raymond Hill
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://github.com/gorhill/uBlock
+*/
+
+// jshint node:true, esversion:8, laxbreak:true
+
+'use strict';
+
+/******************************************************************************/
+
+import fs from 'fs/promises';
+import https from 'https';
+import path from 'path';
+import process from 'process';
+
+import { StaticFilteringParser } from './uBlock/src/js/static-filtering-parser.js';
+import { LineIterator } from './uBlock/src/js/text-utils.js';
+
+import config from './config.js';
+
+/******************************************************************************/
+
+const commandLineArgs = (( ) => {
+ const args = new Map();
+ let name, value;
+ for ( const arg of process.argv.slice(2) ) {
+ const pos = arg.indexOf('=');
+ if ( pos === -1 ) {
+ name = arg;
+ value = '';
+ } else {
+ name = arg.slice(0, pos);
+ value = arg.slice(pos+1).trim();
+ }
+ args.set(name, value);
+ }
+ return args;
+})();
+
+/******************************************************************************/
+
+const stdOutput = [];
+
+const log = (text, silent = false) => {
+ stdOutput.push(text);
+ if ( silent === false ) {
+ console.log(text);
+ }
+};
+
+/******************************************************************************/
+
+const jsonSetMapReplacer = (k, v) => {
+ if ( v instanceof Set || v instanceof Map ) {
+ if ( v.size === 0 ) { return; }
+ return Array.from(v);
+ }
+ return v;
+};
+
+/******************************************************************************/
+
+const writeFile = async (fname, data) => {
+ const dir = path.dirname(fname);
+ await fs.mkdir(dir, { recursive: true });
+ const promise = fs.writeFile(fname, data);
+ writeOps.push(promise);
+ return promise;
+};
+const writeOps = [];
+
+/******************************************************************************/
+
+function sleep(ms) {
+ return new Promise(resolve => {
+ setTimeout(( ) => { resolve(); }, ms);
+ });
+}
+
+/******************************************************************************/
+
+// https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/make-api-requests/dns-json/
+
+async function validateHostnameWithQuery(url) {
+ return new Promise((resolve, reject) => {
+ const options = {
+ headers: {
+ accept: 'application/dns-json',
+ }
+ };
+ https.get(url, options, response => {
+ const data = [];
+ response.on('data', chunk => {
+ data.push(chunk.toString());
+ });
+ response.on('end', ( ) => {
+ let result;
+ try {
+ result = JSON.parse(data.join(''));
+ } catch(ex) {
+ }
+ resolve(result);
+ });
+ }).on('error', error => {
+ resolve();
+ });
+ });
+}
+
+async function validateHostname(hn) {
+ await sleep(config.throttle);
+ for ( const dnsQuery of config.dnsQueries ) {
+ const url = dnsQuery.replace('${hn}', hn);
+ const result = await validateHostnameWithQuery(url);
+ if ( result !== undefined && result.Status !== 2 ) { return result; }
+ }
+}
+
+/******************************************************************************/
+
+function parseHostnameList(parser, s, hostnames) {
+ let beg = 0;
+ let slen = s.length;
+ while ( beg < slen ) {
+ let end = s.indexOf('|', beg);
+ if ( end === -1 ) { end = slen; }
+ const hn = parser.normalizeHostnameValue(s.slice(beg, end));
+ beg = end + 1;
+ if ( hn === undefined ) { continue; }
+ if ( hn.includes('*') ) { continue; }
+ hostnames.push(hn);
+ }
+ return hostnames;
+}
+
+/******************************************************************************/
+
+function processNet(parser) {
+ const hostnames = [];
+ if ( parser.patternIsPlainHostname() ) {
+ hostnames.push(parser.getPattern());
+ } else if ( parser.patternIsLeftHostnameAnchored() ) {
+ const match = /^([^/?]+)/.exec(parser.getPattern());
+ if (
+ match !== null &&
+ match[1].includes('*') === false &&
+ match[1].startsWith('.') === false &&
+ match[1].endsWith('.') === false
+ ) {
+ hostnames.push(match[0]);
+ }
+ }
+ if ( parser.hasOptions() === false ) { return hostnames; }
+ for ( const { id, val } of parser.netOptions() ) {
+ if ( id !== parser.OPTTokenDomain ) { continue; }
+ parseHostnameList(parser, val, hostnames);
+ }
+ return hostnames;
+}
+
+/******************************************************************************/
+
+function processExt(parser) {
+ const hostnames = [];
+ if ( parser.hasOptions() === false ) { return hostnames; }
+ for ( const { hn } of parser.extOptions() ) {
+ if ( hn.includes('*') ) { continue; }
+ hostnames.push(hn);
+ }
+ return hostnames;
+}
+
+/******************************************************************************/
+
+// https://www.rfc-editor.org/rfc/rfc1035.html
+
+function checkHostname(hn, result) {
+ if ( result instanceof Object === false ) { return; }
+ if ( result.Status === 1 ) { return `${hn} format error`; }
+ if ( result.Status === 2 ) { return `${hn} dns server failure`; }
+ if ( result.Status === 3 ) { return `${hn} name error`; }
+ if ( result.Status === 4 ) { return `${hn} not implemented`; }
+ if ( result.Status === 5 ) { return `${hn} refused`; }
+ if ( result.Answer === undefined ) { return; }
+ for ( const entry of result.Answer ) {
+ if ( entry.data === undefined ) { continue; }
+ for ( const re of parkedDomainAuthorities ) {
+ if ( re.test(entry.data) === false ) { continue; }
+ return `${hn} parked`;
+ }
+ }
+}
+
+const parkedDomainAuthorities = [
+ /^traff-\d+\.hugedomains\.com\.?$/,
+ /^\d+\.parkingcrew\.net\.?$/,
+ /^ns\d\.centralnic\.net\.?(\s|$)/,
+ /^ns\d\.pananames\.com\.?(\s|$)/,
+];
+
+/******************************************************************************/
+
+function toProgressString(lineno, hn) {
+ const parts = [];
+ if ( lineno > 0 ) { parts.push(`${lineno}`); }
+ if ( hn ) { parts.push(hn); }
+ const s = parts.join(' ');
+ process.stdout.write(`\r${s.padEnd(lastProgressStr.length)}\r`);
+ lastProgressStr = s;
+}
+
+let lastProgressStr = '';
+
+/******************************************************************************/
+
+// TODO: resume from partial results
+
+async function processList(parser, text, lineto, fpath) {
+
+ const lineIter = new LineIterator(text);
+ const lines = [];
+
+ while ( lineIter.eot() === false ) {
+ lines.push(lineIter.next());
+ }
+
+ if ( lineto === undefined ) {
+ lineto = lines.length;
+ }
+
+ for ( let i = lines.length; i > 0; i-- ) {
+ if ( i > lineto ) { continue; }
+ toProgressString(i);
+
+ let line = lines[i-1];
+
+ parser.analyze(line);
+
+ if ( parser.shouldIgnore() ) { continue; }
+
+ let hostnames;
+ if ( parser.category !== parser.CATStaticNetFilter ) {
+ hostnames = processExt(parser);
+ } else if ( parser.patternHasUnicode() === false || parser.toASCII() ) {
+ hostnames = processNet(parser);
+ }
+ const badHostnames = [];
+ for ( const hn of hostnames ) {
+ if ( hn.endsWith('.onion') ) { continue; }
+ if ( /^\d+\.\d+\.\d+\.\d+$/.test(hn) ) { continue; }
+ let result = validatedHostnames.get(hn);
+ if ( result === undefined ) {
+ toProgressString(i, hn);
+ result = await validateHostname(hn);
+ validatedHostnames.set(hn, result);
+ }
+ const diagnostic = checkHostname(hn, result);
+ if ( diagnostic === undefined ) { continue; }
+ badHostnames.push(diagnostic);
+ }
+ if ( badHostnames.length !== 0 ) {
+ toProgressString(0);
+ const lineno = i;
+ badHostnames.forEach(v => {
+ log(`${lineno} ${v}`);
+ });
+ writeFile(fpath, stdOutput.join('\n'));
+ }
+ }
+ toProgressString(0);
+}
+
+const validatedHostnames = new Map();
+
+/******************************************************************************/
+
+async function main() {
+ const infile = commandLineArgs.get('in');
+ if ( infile === undefined || infile === '' ) { return; }
+ const outdir = commandLineArgs.get('out');
+ if ( outdir === undefined || outdir === '' ) { return; }
+
+ const infileParts = path.parse(infile);
+ const lineto = commandLineArgs.get('line') !== undefined
+ ? parseInt(commandLineArgs.get('line'), 10)
+ : undefined;
+
+ const partialResultPath = `${outdir}/${infileParts.name}.results.partial.txt`;
+ const parser = new StaticFilteringParser();
+
+ const text = await fs.readFile(infile, { encoding: 'utf8' });
+ await processList(parser, text, lineto, partialResultPath);
+
+ writeFile(`${outdir}/${infileParts.name}.results.txt`, stdOutput.join('\n'));
+ writeFile(`${outdir}/${infileParts.name}.dns.results.txt`, JSON.stringify(validatedHostnames, jsonSetMapReplacer, 1));
+
+ fs.rm(partialResultPath);
+
+ await Promise.all(writeOps);
+}
+
+main();
+
+/******************************************************************************/